@standardagents/builder 0.12.6 → 0.12.7
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/built-in-routes.js +68 -53
- package/dist/built-in-routes.js.map +1 -1
- package/dist/index.js +67 -52
- package/dist/index.js.map +1 -1
- package/dist/packing.d.ts +3 -3
- package/dist/packing.js +67 -52
- package/dist/packing.js.map +1 -1
- package/dist/plugin.js +67 -52
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -4
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/generateTypes.ts","../src/sdk/generators/generateModelFile.ts","../src/sdk/generators/jsonSchemaToZod.ts","../src/sdk/generators/generatePromptFile.ts","../src/sdk/generators/generateAgentFile.ts","../src/sdk/persistence/index.ts","../src/packing/metadata-service.ts","../src/packing/ast-utils.ts","../src/packing/packing-service.ts","../src/packing/discovery.ts","../src/packing/unpacking-service.ts","../src/packing/npm-publish-service.ts","../src/plugin.ts"],"names":["fs","path","escapeString","path3","fs3","patch","path4","fs4","path5","fs5","path6","fs6","ts2","pkgJsonPath","path7","fs7","resolve","id","outputDir","options"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","file":"plugin.js","sourcesContent":["/**\n * Type generation module for AgentBuilder.\n *\n * Generates TypeScript declaration files that provide compile-time\n * type safety for model, prompt, agent, and tool references.\n *\n * @module\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * Configuration for directory scanning.\n */\nexport interface DirectoryConfig {\n modelsDir: string;\n promptsDir: string;\n agentsDir: string;\n toolsDir: string;\n hooksDir: string;\n outputDir: string;\n}\n\n/**\n * Content of the generated tsconfig.json for the .agents directory.\n */\nconst TSCONFIG_CONTENT = `{\n \"compilerOptions\": {\n \"composite\": true,\n \"declaration\": true,\n \"declarationMap\": true,\n \"skipLibCheck\": true,\n \"strict\": true,\n \"moduleResolution\": \"bundler\",\n \"module\": \"ESNext\",\n \"target\": \"ESNext\"\n },\n \"include\": [\"types.d.ts\", \"virtual-module.d.ts\"]\n}\n`;\n\n/**\n * Result of scanning a prompt file, including name and schema fields.\n */\nexport interface PromptScanResult {\n name: string;\n schemaFields: string[];\n}\n\n/**\n * Result of scanning an agent file, including name and side_a prompt.\n */\nexport interface AgentScanResult {\n name: string;\n sideAPrompt: string | null;\n}\n\n/**\n * Extract schema field names from a Zod object definition in file content.\n *\n * Matches patterns like:\n * - z.object({ fieldName: z.string(), ... })\n * - z.object({ field_name: z.number().optional(), ... })\n *\n * @param content - File content to scan\n * @returns Array of field names found in the schema\n */\nexport function extractSchemaFields(content: string): string[] {\n const fields: string[] = [];\n\n // Find requiredSchema: z.object({ ... }) pattern\n // This regex captures the content inside z.object({ ... })\n const schemaMatch = content.match(/requiredSchema:\\s*z\\.object\\(\\s*\\{([^}]+)\\}/s);\n if (!schemaMatch) {\n return fields;\n }\n\n const schemaContent = schemaMatch[1];\n\n // Extract field names - matches: fieldName: z.xxx or 'field-name': z.xxx\n // Handles both identifier and string keys\n const fieldMatches = schemaContent.matchAll(/(?:['\"]([^'\"]+)['\"]|(\\w+))\\s*:/g);\n for (const match of fieldMatches) {\n const fieldName = match[1] || match[2];\n if (fieldName && !fieldName.startsWith('z.')) {\n fields.push(fieldName);\n }\n }\n\n return fields;\n}\n\n/**\n * Scan a directory for prompts and extract names and schema fields.\n *\n * @param dir - Directory to scan\n * @returns Array of prompt scan results with names and schema fields\n */\nexport function scanPromptsWithSchemas(dir: string): PromptScanResult[] {\n const results: PromptScanResult[] = [];\n\n if (!fs.existsSync(dir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract name\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n const name = nameMatch[1];\n const schemaFields = extractSchemaFields(content);\n results.push({ name, schemaFields });\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning prompts directory ${dir}:`, error);\n }\n\n return results;\n}\n\n/**\n * Scan a directory for agents and extract names and side_a prompt references.\n *\n * @param dir - Directory to scan\n * @returns Array of agent scan results with names and side_a prompts\n */\nexport function scanAgentsWithSideA(dir: string): AgentScanResult[] {\n const results: AgentScanResult[] = [];\n\n if (!fs.existsSync(dir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract agent name\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n const name = nameMatch[1];\n\n // Extract sideA.prompt or side_a_agent_prompt\n let sideAPrompt: string | null = null;\n\n // Try sideA: { prompt: 'xxx' } pattern\n const sideAMatch = content.match(/sideA:\\s*\\{[^}]*prompt:\\s*['\"]([^'\"]+)['\"]/);\n if (sideAMatch) {\n sideAPrompt = sideAMatch[1];\n }\n\n results.push({ name, sideAPrompt });\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning agents directory ${dir}:`, error);\n }\n\n return results;\n}\n\n/**\n * Scan a directory for TypeScript files and extract the definition names.\n *\n * This function reads each .ts file and extracts the `name` property from\n * the defineX() call. It uses a simple regex pattern to avoid full parsing.\n *\n * @param dir - Directory to scan\n * @param useFilename - If true, use filename as the name (for tools that don't have name property)\n * @returns Array of definition names found\n */\nexport function scanForNames(dir: string, useFilename: boolean = false): string[] {\n const names: string[] = [];\n\n if (!fs.existsSync(dir)) {\n return names;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (useFilename) {\n // For tools: use the filename (without extension) as the tool name\n // Convert underscores to match convention (e.g., my_tool.ts -> my_tool)\n const toolName = entry.name.replace(/\\.ts$/, '');\n // Verify the file actually exports a tool (contains defineTool)\n if (content.includes('defineTool')) {\n names.push(toolName);\n }\n } else {\n // Extract name from defineX({ name: 'xxx', ... })\n // Matches: name: 'xxx' or name: \"xxx\"\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n names.push(nameMatch[1]);\n }\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning directory ${dir}:`, error);\n }\n\n return names;\n}\n\n/**\n * Scan hooks directory and extract hook IDs from defineHook({ id: '...' }) calls.\n *\n * @param dir - Directory to scan\n * @returns Array of hook IDs found\n */\nexport function scanHooksForIds(dir: string): string[] {\n const hookIds: string[] = [];\n\n if (!fs.existsSync(dir)) {\n return hookIds;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n // Skip index.ts - it's a utility module, not a hook\n if (entry.name === 'index.ts') {\n continue;\n }\n\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract id from defineHook({ ... id: 'xxx' ... })\n // Match: id: 'xxx' or id: \"xxx\"\n const idMatch = content.match(/defineHook\\s*\\(\\s*\\{[^}]*id:\\s*['\"]([^'\"]+)['\"]/s);\n if (idMatch) {\n hookIds.push(idMatch[1]);\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning hooks directory ${dir}:`, error);\n }\n\n return hookIds;\n}\n\n/**\n * Generate interface properties from an array of string names.\n * Each name becomes a property with value `true`.\n *\n * @param names - Array of string names\n * @returns TypeScript interface properties string\n */\nfunction generateRegistryProperties(names: string[]): string {\n if (names.length === 0) {\n return '';\n }\n\n return names.map((n) => `'${n}': true;`).join('\\n ');\n}\n\n/**\n * Generate schema registry properties from prompt scan results and agent mappings.\n *\n * @param promptResults - Array of prompt scan results\n * @param agentResults - Array of agent scan results\n * @returns TypeScript interface properties string for PromptSchemaRegistry\n */\nfunction generateSchemaRegistryProperties(\n promptResults: PromptScanResult[],\n agentResults: AgentScanResult[]\n): string {\n const entries: string[] = [];\n\n // Create a map of prompt names to their schema fields\n const promptSchemaMap = new Map<string, string[]>();\n for (const prompt of promptResults) {\n if (prompt.schemaFields.length > 0) {\n promptSchemaMap.set(prompt.name, prompt.schemaFields);\n }\n }\n\n // Add prompt entries\n for (const prompt of promptResults) {\n if (prompt.schemaFields.length > 0) {\n const fieldsUnion = prompt.schemaFields.map(f => `'${f}'`).join(' | ');\n entries.push(`'${prompt.name}': ${fieldsUnion};`);\n }\n }\n\n // Add agent entries (map to their side_a prompt's schema)\n for (const agent of agentResults) {\n if (agent.sideAPrompt) {\n const schemaFields = promptSchemaMap.get(agent.sideAPrompt);\n if (schemaFields && schemaFields.length > 0) {\n const fieldsUnion = schemaFields.map(f => `'${f}'`).join(' | ');\n entries.push(`'${agent.name}': ${fieldsUnion};`);\n }\n }\n }\n\n return entries.join('\\n ');\n}\n\n/**\n * Generate the types.d.ts content for the .agents directory.\n *\n * This generates a namespace augmentation that overrides the default `string`\n * types in the StandardAgentSpec namespace with specific union types based on\n * the user's defined models, prompts, agents, and tools.\n *\n * @param config - Directory configuration\n * @returns The generated TypeScript declaration content\n */\nexport function generateTypesContent(config: DirectoryConfig): string {\n const models = scanForNames(config.modelsDir);\n const promptResults = scanPromptsWithSchemas(config.promptsDir);\n const agentResults = scanAgentsWithSideA(config.agentsDir);\n // Tools use filename as name since defineTool doesn't have a name property\n const tools = scanForNames(config.toolsDir, true);\n // Hooks use id from defineHook({ id: '...' })\n const hookIds = scanHooksForIds(config.hooksDir);\n\n // Extract just the names for registries\n const prompts = promptResults.map(p => p.name);\n const agents = agentResults.map(a => a.name);\n\n // Generate the callables union from all three sources\n const callables = [...prompts, ...agents, ...tools];\n\n return `// Auto-generated by @standardagents/builder - DO NOT EDIT\n// Generated at: ${new Date().toISOString()}\n//\n// This file augments the StandardAgentSpec namespace declared in @standardagents/spec\n// to provide type-safe references for your models, prompts, agents, tools, and hooks.\n\n/**\n * Augment the global StandardAgentSpec namespace with your project's specific types.\n * This provides autocomplete and type checking for model, prompt, agent, tool, and hook references.\n *\n * Uses interface declaration merging with property keys to create union types.\n * Example: interface ModelRegistry { 'gpt-4o': true; } gives type Models = 'gpt-4o'\n */\ndeclare global {\n namespace StandardAgentSpec {\n /** Model names from agents/models/ */\n interface ModelRegistry {\n ${generateRegistryProperties(models)}\n }\n\n /** Prompt names from agents/prompts/ */\n interface PromptRegistry {\n ${generateRegistryProperties(prompts)}\n }\n\n /** Agent names from agents/agents/ */\n interface AgentRegistry {\n ${generateRegistryProperties(agents)}\n }\n\n /** Tool names from agents/tools/ */\n interface ToolRegistry {\n ${generateRegistryProperties(tools)}\n }\n\n /** All callable items (prompts, agents, tools) that can be used as tools */\n interface CallableRegistry {\n ${generateRegistryProperties(callables)}\n }\n\n /** Hook IDs from agents/hooks/ */\n interface HookIdRegistry {\n ${generateRegistryProperties(hookIds)}\n }\n\n /** Schema field names for prompts and agents (used for initUserMessageProperty autocomplete) */\n interface PromptSchemaRegistry {\n ${generateSchemaRegistryProperties(promptResults, agentResults)}\n }\n }\n}\n\n// This export is required for TypeScript to treat this as a module\n// and allow the declare global to work properly\nexport {};\n`;\n}\n\n/**\n * Generate the virtual-module.d.ts content for the .agents directory.\n *\n * This provides type declarations for the virtual:@standardagents/builder module.\n * It must be in a separate file (without export {}) to work as an ambient module declaration.\n *\n * @returns The generated TypeScript declaration content\n */\nexport function generateVirtualModuleContent(): string {\n return `// Auto-generated by @standardagents/builder - DO NOT EDIT\n//\n// Type declarations for the virtual:@standardagents/builder module.\n// This file must NOT have any exports to work as an ambient module declaration.\n\n/**\n * Type declarations for the consolidated virtual module.\n * This module provides DurableThread and DurableAgentBuilder classes\n * with all virtual module methods (tools, hooks, models, prompts, agents)\n * already implemented, plus the router function.\n */\ndeclare module 'virtual:@standardagents/builder' {\n import type { DurableThread as BaseDurableThread } from '@standardagents/builder/runtime';\n import type { DurableAgentBuilder as BaseDurableAgentBuilder } from '@standardagents/builder/runtime';\n import type { ThreadEnv } from '@standardagents/builder/runtime';\n\n // ============================================================\n // Message Types\n // ============================================================\n\n export interface ThreadMessage {\n id: string;\n role: string;\n content: string | null;\n name: string | null;\n tool_calls: string | null;\n tool_call_id: string | null;\n tool_status: 'success' | 'error' | null;\n log_id: string | null;\n created_at: number;\n silent: boolean;\n parent_id: string | null;\n depth: number;\n status: 'pending' | 'completed' | 'failed' | null;\n reasoning_content: string | null;\n reasoning_details: string | null;\n }\n\n export interface GetMessagesResult {\n messages: ThreadMessage[];\n total: number;\n hasMore: boolean;\n }\n\n // ============================================================\n // Log Types\n // ============================================================\n\n export interface ThreadLog {\n id: string;\n message_id: string;\n provider: string;\n model: string;\n model_name: string | null;\n prompt_name: string | null;\n tools_called: string | null;\n parent_log_id: string | null;\n retry_of_log_id: string | null;\n error: string | null;\n cost_total: number | null;\n is_complete: boolean;\n created_at: number;\n request_body: string | null;\n }\n\n export interface GetLogsResult {\n logs: ThreadLog[];\n total: number;\n hasMore: boolean;\n }\n\n export interface ThreadLogDetails extends ThreadLog {\n endpoint: string | null;\n request_headers: string | null;\n response_body: string | null;\n response_headers: string | null;\n status_code: number | null;\n reasoning_content: string | null;\n input_tokens: number | null;\n cached_tokens: number | null;\n output_tokens: number | null;\n reasoning_tokens: number | null;\n total_tokens: number | null;\n latency_ms: number | null;\n time_to_first_token_ms: number | null;\n finish_reason: string | null;\n error_type: string | null;\n cost_input: number | null;\n cost_output: number | null;\n message_history_length: number | null;\n tools_available: number | null;\n tools_schema: string | null;\n message_history: string | null;\n system_prompt: string | null;\n errors: string | null;\n tool_results: string | null;\n }\n\n // ============================================================\n // Thread Metadata Types\n // ============================================================\n\n export interface ThreadMetaResult {\n thread: {\n id: string;\n agent_id: string;\n user_id: string | null;\n tags: string[];\n created_at: number;\n };\n agent: {\n id: string;\n title: string;\n type: string;\n side_a_label?: string;\n side_b_label?: string;\n } | null;\n stats: {\n message_count: number;\n log_count: number;\n };\n }\n\n // ============================================================\n // DurableThread Class\n // ============================================================\n\n /**\n * DurableThread with all virtual module methods pre-implemented.\n * Extend this class in your agents/Thread.ts file.\n *\n * @example\n * \\`\\`\\`typescript\n * import { DurableThread } from 'virtual:@standardagents/builder'\n *\n * export class Thread extends DurableThread {}\n * \\`\\`\\`\n */\n export class DurableThread extends BaseDurableThread {\n // Virtual module registry methods\n tools(): Record<string, () => Promise<any>>;\n hooks(): Record<string, () => Promise<any>>;\n models(): Record<string, () => Promise<any>>;\n prompts(): Record<string, () => Promise<any>>;\n agents(): Record<string, () => Promise<any>>;\n\n // Lookup methods\n loadModel(name: string): Promise<any>;\n getModelNames(): string[];\n loadPrompt(name: string): Promise<any>;\n getPromptNames(): string[];\n loadAgent(name: string): Promise<any>;\n getAgentNames(): string[];\n\n // Execution methods\n execute(\n threadId: string,\n agentId: string,\n initial_messages?: any[],\n data?: any\n ): Promise<Response>;\n sendMessage(\n threadId: string,\n content: string,\n role?: string\n ): Promise<Response>;\n stop(): Promise<Response>;\n shouldStop(): Promise<boolean>;\n\n // Message methods\n getMessages(\n limit?: number,\n offset?: number,\n order?: 'ASC' | 'DESC',\n includeSilent?: boolean,\n maxDepth?: number\n ): Promise<GetMessagesResult>;\n deleteMessage(messageId: string): Promise<{ success: boolean; error?: string }>;\n seedMessages(args: {\n messages: Array<{\n id: string;\n role: string;\n content: string;\n created_at: number;\n }>;\n }): Promise<{ success: boolean; count?: number; error?: string }>;\n\n // Log methods\n getLogs(\n limit?: number,\n offset?: number,\n order?: 'ASC' | 'DESC'\n ): Promise<GetLogsResult>;\n getLogDetails(logId: string): Promise<ThreadLogDetails>;\n\n // Thread management methods\n getThreadMeta(threadId: string): Promise<ThreadMetaResult>;\n updateThreadMeta(\n threadId: string,\n params: UpdateThreadParams\n ): Promise<{\n success: boolean;\n error?: string;\n thread?: {\n id: string;\n agent_id: string;\n user_id: string | null;\n tags: string[];\n created_at: number;\n };\n }>;\n deleteThread(): Promise<{ success: boolean; message: string }>;\n\n // WebSocket/fetch handler\n fetch(request: Request): Promise<Response>;\n }\n\n // ============================================================\n // DurableAgentBuilder Types\n // ============================================================\n\n export interface ThreadRegistryEntry {\n id: string;\n agent_name: string;\n user_id: string | null;\n tags: string[] | null;\n created_at: number;\n }\n\n export interface UpdateThreadParams {\n agent_name?: string;\n user_id?: string | null;\n tags?: string[] | null;\n }\n\n export interface User {\n id: string;\n username: string;\n password_hash: string;\n role: 'admin';\n created_at: number;\n updated_at: number;\n }\n\n export interface Provider {\n name: string;\n sdk: string;\n api_key: string;\n }\n\n // ============================================================\n // DurableAgentBuilder Class\n // ============================================================\n\n /**\n * DurableAgentBuilder with all virtual module methods pre-implemented.\n * Extend this class in your agents/AgentBuilder.ts file.\n *\n * @example\n * \\`\\`\\`typescript\n * import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n *\n * export class AgentBuilder extends DurableAgentBuilder {}\n * \\`\\`\\`\n */\n export class DurableAgentBuilder extends BaseDurableAgentBuilder {\n // Virtual module registry methods\n tools(): Record<string, () => Promise<any>>;\n hooks(): Record<string, () => Promise<any>>;\n models(): Record<string, () => Promise<any>>;\n prompts(): Record<string, () => Promise<any>>;\n agents(): Record<string, () => Promise<any>>;\n\n // Lookup methods\n loadModel(name: string): Promise<any>;\n getModelNames(): string[];\n loadPrompt(name: string): Promise<any>;\n getPromptNames(): string[];\n loadAgent(name: string): Promise<any>;\n getAgentNames(): string[];\n\n // Thread registry methods\n createThread(params: {\n agent_name: string;\n user_id?: string;\n tags?: string[];\n }): Promise<ThreadRegistryEntry>;\n getThread(id: string): Promise<ThreadRegistryEntry | null>;\n listThreads(params?: {\n agent_name?: string;\n user_id?: string;\n search?: string;\n startDate?: number;\n endDate?: number;\n limit?: number;\n offset?: number;\n }): Promise<{ threads: ThreadRegistryEntry[]; total: number }>;\n deleteThread(id: string): Promise<boolean>;\n updateThreadAgent(id: string, agent_name: string): Promise<boolean>;\n updateThread(id: string, params: UpdateThreadParams): Promise<ThreadRegistryEntry | null>;\n getThreadStub(threadId: string): DurableObjectStub;\n\n // Provider methods\n getProvider(name: string): Promise<Provider | null>;\n setProvider(provider: Provider): Promise<void>;\n listProviders(): Promise<Provider[]>;\n deleteProvider(name: string): Promise<boolean>;\n\n // User methods\n getUserByUsername(username: string): Promise<User | null>;\n getUserById(id: string): Promise<User | null>;\n createUser(params: {\n username: string;\n password_hash: string;\n role?: 'admin';\n }): Promise<User>;\n hasUsers(): Promise<boolean>;\n listUsers(): Promise<Array<{\n id: string;\n username: string;\n role: 'admin';\n created_at: number;\n updated_at: number;\n }>>;\n updateUser(\n id: string,\n params: {\n username?: string;\n password_hash?: string;\n role?: 'admin';\n }\n ): Promise<User | null>;\n deleteUser(id: string): Promise<boolean>;\n\n // Session methods\n createSession(params: {\n user_id: string;\n token_hash: string;\n expires_at: number;\n }): Promise<string>;\n validateSession(tokenHash: string): Promise<{ user_id: string; expires_at: number } | null>;\n cleanupSessions(): Promise<number>;\n deleteSession(tokenHash: string): Promise<void>;\n\n // API key methods\n createApiKey(params: {\n name: string;\n key_hash: string;\n key_prefix: string;\n last_five: string;\n user_id: string;\n }): Promise<string>;\n validateApiKey(keyHash: string): Promise<{ user_id: string; id: string } | null>;\n listApiKeys(userId: string): Promise<Array<{\n id: string;\n name: string;\n key_prefix: string;\n last_five: string;\n created_at: number;\n last_used_at: number | null;\n }>>;\n deleteApiKey(id: string, userId: string): Promise<boolean>;\n\n // OAuth methods\n linkOAuthAccount(params: {\n user_id: string;\n provider: 'github' | 'google';\n provider_user_id: string;\n provider_username?: string;\n }): Promise<void>;\n findUserByOAuth(\n provider: 'github' | 'google',\n providerUserId: string\n ): Promise<User | null>;\n\n // Edit lock methods (for GitHub integration)\n acquireEditLock(params: {\n locked_by: string;\n lock_reason: string;\n }): Promise<boolean>;\n releaseEditLock(lockedBy: string): Promise<boolean>;\n getEditLockState(): Promise<{\n locked: boolean;\n locked_by: string | null;\n locked_at: number | null;\n lock_reason: string | null;\n pending_changes: string | null;\n }>;\n setPendingChanges(changes: string): Promise<void>;\n\n // WebSocket/fetch handler\n fetch(request: Request): Promise<Response>;\n }\n\n // ============================================================\n // Router Function\n // ============================================================\n\n /**\n * Main router function for handling incoming requests.\n * Routes requests to the appropriate API endpoint or serves the UI.\n *\n * @example\n * \\`\\`\\`typescript\n * import { router } from 'virtual:@standardagents/builder'\n *\n * export default {\n * async fetch(request: Request, env: Env) {\n * const response = await router(request, env);\n * return response ?? new Response('Not Found', { status: 404 });\n * }\n * }\n * \\`\\`\\`\n */\n export function router<Env extends ThreadEnv = ThreadEnv>(\n request: Request,\n env: Env\n ): Promise<Response | null>;\n}\n\n/**\n * Legacy alias for the router module.\n * @deprecated Use \\`import { router } from 'virtual:@standardagents/builder'\\` instead.\n */\ndeclare module 'virtual:@standardagents/router' {\n import type { ThreadEnv } from '@standardagents/builder/runtime';\n\n export function router<Env extends ThreadEnv = ThreadEnv>(\n request: Request,\n env: Env\n ): Promise<Response | null>;\n\n export { DurableThread } from 'virtual:@standardagents/builder';\n}\n`;\n}\n\n/**\n * Ensure a directory exists, creating it if necessary.\n *\n * @param dir - Directory path to ensure exists\n */\nfunction ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Generate the .agents directory with type declarations.\n *\n * Creates or updates:\n * - .agents/types.d.ts - Type declarations for all definitions (with export {})\n * - .agents/virtual-module.d.ts - Virtual module declarations (ambient, no export)\n * - .agents/tsconfig.json - TypeScript configuration\n * - .agents/.gitignore - Ignore all generated files\n *\n * @param config - Directory configuration\n */\nexport function generateTypes(config: DirectoryConfig): void {\n ensureDir(config.outputDir);\n\n // Generate types.d.ts (global namespace augmentation - needs export {})\n const typesContent = generateTypesContent(config);\n fs.writeFileSync(path.join(config.outputDir, 'types.d.ts'), typesContent);\n\n // Generate virtual-module.d.ts (ambient module declaration - no export)\n const virtualModuleContent = generateVirtualModuleContent();\n fs.writeFileSync(path.join(config.outputDir, 'virtual-module.d.ts'), virtualModuleContent);\n\n // Generate tsconfig.json\n fs.writeFileSync(path.join(config.outputDir, 'tsconfig.json'), TSCONFIG_CONTENT);\n\n // Generate .gitignore to ignore all generated files\n fs.writeFileSync(path.join(config.outputDir, '.gitignore'), '*\\n');\n}\n\n/**\n * Check if type generation is needed based on file modification times.\n *\n * @param config - Directory configuration\n * @returns True if types need regeneration\n */\nexport function needsRegeneration(config: DirectoryConfig): boolean {\n const typesPath = path.join(config.outputDir, 'types.d.ts');\n\n // If types file doesn't exist, we need to generate\n if (!fs.existsSync(typesPath)) {\n return true;\n }\n\n const typesMtime = fs.statSync(typesPath).mtime;\n\n // Check if any source directory has newer files\n const dirs = [config.modelsDir, config.promptsDir, config.agentsDir, config.toolsDir, config.hooksDir];\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) {\n continue;\n }\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const fileMtime = fs.statSync(filePath).mtime;\n if (fileMtime > typesMtime) {\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n/**\n * Get default directory configuration based on a base directory.\n *\n * @param baseDir - Base directory (usually process.cwd())\n * @param options - Optional overrides for directory paths\n * @returns Complete directory configuration\n */\nexport function getDefaultConfig(\n baseDir: string,\n options: Partial<DirectoryConfig> = {}\n): DirectoryConfig {\n return {\n modelsDir: options.modelsDir ?? path.join(baseDir, 'agents/models'),\n promptsDir: options.promptsDir ?? path.join(baseDir, 'agents/prompts'),\n agentsDir: options.agentsDir ?? path.join(baseDir, 'agents/agents'),\n toolsDir: options.toolsDir ?? path.join(baseDir, 'agents/tools'),\n hooksDir: options.hooksDir ?? path.join(baseDir, 'agents/hooks'),\n outputDir: options.outputDir ?? path.join(baseDir, '.agents'),\n };\n}\n","import type { ModelDefinition } from '../defineModel.js';\n\n/**\n * Options for generating a model file.\n */\nexport interface GenerateModelFileOptions {\n /** The provider export name (e.g., 'openai', 'openrouter') */\n providerName: string;\n /** The provider package (e.g., '@standardagents/openai') */\n providerPackage: string;\n}\n\n/**\n * Generate a TypeScript file for a model definition.\n *\n * @param data - The model definition data\n * @param options - Provider import options (required since providers are functions)\n */\nexport function generateModelFile(data: ModelDefinition, options: GenerateModelFileOptions): string {\n const { providerName, providerPackage } = options;\n\n const lines = [\n `import { defineModel } from '@standardagents/spec';`,\n `import { ${providerName} } from '${providerPackage}';`,\n '',\n `export default defineModel({`,\n ` name: '${escapeString(data.name)}',`,\n ` provider: ${providerName},`,\n ` model: '${escapeString(data.model)}',`,\n ];\n\n if (data.includedProviders && data.includedProviders.length > 0) {\n lines.push(` includedProviders: ${JSON.stringify(data.includedProviders)},`);\n }\n\n if (data.fallbacks && data.fallbacks.length > 0) {\n lines.push(` fallbacks: ${JSON.stringify(data.fallbacks)},`);\n }\n\n if (data.providerTools && data.providerTools.length > 0) {\n lines.push(` providerTools: ${JSON.stringify(data.providerTools)},`);\n }\n\n if (data.inputPrice !== undefined) {\n lines.push(` inputPrice: ${data.inputPrice},`);\n }\n\n if (data.outputPrice !== undefined) {\n lines.push(` outputPrice: ${data.outputPrice},`);\n }\n\n if (data.cachedPrice !== undefined) {\n lines.push(` cachedPrice: ${data.cachedPrice},`);\n }\n\n // Add capabilities if defined\n if (data.capabilities && Object.keys(data.capabilities).length > 0) {\n const caps = data.capabilities;\n const capLines: string[] = [];\n\n if (caps.supportsImages !== undefined) {\n capLines.push(` supportsImages: ${caps.supportsImages},`);\n }\n if (caps.supportsToolCalls !== undefined) {\n capLines.push(` supportsToolCalls: ${caps.supportsToolCalls},`);\n }\n if (caps.supportsStreaming !== undefined) {\n capLines.push(` supportsStreaming: ${caps.supportsStreaming},`);\n }\n if (caps.supportsJsonMode !== undefined) {\n capLines.push(` supportsJsonMode: ${caps.supportsJsonMode},`);\n }\n if (caps.maxContextTokens !== undefined) {\n capLines.push(` maxContextTokens: ${caps.maxContextTokens},`);\n }\n if (caps.maxOutputTokens !== undefined) {\n capLines.push(` maxOutputTokens: ${caps.maxOutputTokens},`);\n }\n if (caps.reasoningLevels !== undefined) {\n capLines.push(` reasoningLevels: ${JSON.stringify(caps.reasoningLevels)},`);\n }\n\n if (capLines.length > 0) {\n lines.push(` capabilities: {`);\n lines.push(...capLines);\n lines.push(` },`);\n }\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\\\/g, '\\\\\\\\');\n}\n","/**\n * Converts JSON Schema to Zod code string.\n *\n * This is used when saving prompts from the UI - the form editor works with\n * JSON Schema, but we need to generate Zod code for the TypeScript file.\n */\n\nexport interface JSONSchema {\n type?: string;\n description?: string;\n properties?: Record<string, JSONSchema>;\n required?: string[];\n items?: JSONSchema;\n enum?: (string | number | boolean)[];\n anyOf?: JSONSchema[];\n oneOf?: JSONSchema[];\n allOf?: JSONSchema[];\n const?: any;\n default?: any;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n additionalProperties?: boolean | JSONSchema;\n nullable?: boolean;\n}\n\n/**\n * Convert a JSON Schema to Zod code string.\n *\n * @param schema - The JSON Schema to convert\n * @param indent - Current indentation level (for pretty printing)\n * @returns Zod code as a string\n *\n * @example\n * ```typescript\n * const schema = {\n * type: 'object',\n * properties: {\n * name: { type: 'string', description: 'User name' },\n * age: { type: 'number' }\n * },\n * required: ['name']\n * };\n *\n * jsonSchemaToZod(schema);\n * // Returns: z.object({ name: z.string().describe('User name'), age: z.number().optional() })\n * ```\n */\nexport function jsonSchemaToZod(schema: JSONSchema, indent = 0): string {\n if (!schema || Object.keys(schema).length === 0) {\n return 'z.any()';\n }\n\n // Handle anyOf (union types)\n if (schema.anyOf && schema.anyOf.length > 0) {\n const types = schema.anyOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n return `z.union([${types.join(', ')}])`;\n }\n\n // Handle oneOf (similar to anyOf for our purposes)\n if (schema.oneOf && schema.oneOf.length > 0) {\n const types = schema.oneOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n return `z.union([${types.join(', ')}])`;\n }\n\n // Handle allOf (intersection types - merge objects)\n if (schema.allOf && schema.allOf.length > 0) {\n const types = schema.allOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n // For allOf, we use .and() to intersect\n return types.reduce((acc, t) => `${acc}.and(${t})`);\n }\n\n // Handle const\n if (schema.const !== undefined) {\n return `z.literal(${JSON.stringify(schema.const)})`;\n }\n\n // Handle enum\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v) => JSON.stringify(v));\n if (values.length === 1) {\n return `z.literal(${values[0]})`;\n }\n return `z.enum([${values.join(', ')}])`;\n }\n\n // Handle by type\n switch (schema.type) {\n case 'string':\n return buildStringSchema(schema);\n\n case 'number':\n case 'integer':\n return buildNumberSchema(schema);\n\n case 'boolean':\n return addDescription('z.boolean()', schema.description);\n\n case 'null':\n return addDescription('z.null()', schema.description);\n\n case 'array':\n return buildArraySchema(schema, indent);\n\n case 'object':\n return buildObjectSchema(schema, indent);\n\n default:\n // No type specified - use any\n return 'z.any()';\n }\n}\n\nfunction buildStringSchema(schema: JSONSchema): string {\n let code = 'z.string()';\n\n // Add constraints\n if (schema.minLength !== undefined) {\n code += `.min(${schema.minLength})`;\n }\n if (schema.maxLength !== undefined) {\n code += `.max(${schema.maxLength})`;\n }\n if (schema.pattern) {\n code += `.regex(/${escapeRegex(schema.pattern)}/)`;\n }\n\n // Handle format (common JSON Schema formats)\n if (schema.format) {\n switch (schema.format) {\n case 'email':\n code += '.email()';\n break;\n case 'uri':\n case 'url':\n code += '.url()';\n break;\n case 'uuid':\n code += '.uuid()';\n break;\n case 'date-time':\n code += '.datetime()';\n break;\n case 'date':\n code += '.date()';\n break;\n case 'time':\n code += '.time()';\n break;\n case 'ipv4':\n code += '.ip({ version: \"v4\" })';\n break;\n case 'ipv6':\n code += '.ip({ version: \"v6\" })';\n break;\n // Other formats are ignored\n }\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction buildNumberSchema(schema: JSONSchema): string {\n let code = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if (schema.minimum !== undefined) {\n code += `.min(${schema.minimum})`;\n }\n if (schema.maximum !== undefined) {\n code += `.max(${schema.maximum})`;\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction buildArraySchema(schema: JSONSchema, indent: number): string {\n const itemsSchema = schema.items ? jsonSchemaToZod(schema.items, indent) : 'z.any()';\n let code = `z.array(${itemsSchema})`;\n\n return addDescription(code, schema.description);\n}\n\nfunction buildObjectSchema(schema: JSONSchema, indent: number): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n // Empty object or object with any properties\n if (schema.additionalProperties === false) {\n return addDescription('z.object({})', schema.description);\n }\n return addDescription('z.record(z.any())', schema.description);\n }\n\n const required = new Set(schema.required || []);\n const spaces = ' '.repeat(indent + 1);\n const closingSpaces = ' '.repeat(indent);\n\n const props = Object.entries(schema.properties).map(([key, propSchema]) => {\n let propCode = jsonSchemaToZod(propSchema, indent + 1);\n\n // Handle nullable\n if (propSchema.nullable) {\n propCode += '.nullable()';\n }\n\n // Add optional() if not in required array\n if (!required.has(key)) {\n propCode += '.optional()';\n }\n\n // Handle default values\n if (propSchema.default !== undefined) {\n propCode += `.default(${JSON.stringify(propSchema.default)})`;\n }\n\n return `${spaces}${safePropertyKey(key)}: ${propCode}`;\n });\n\n const propsStr = props.join(',\\n');\n let code = `z.object({\\n${propsStr}\\n${closingSpaces}})`;\n\n // Handle additionalProperties\n if (schema.additionalProperties === false) {\n code += '.strict()';\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction addDescription(code: string, description?: string): string {\n if (description) {\n return `${code}.describe(${JSON.stringify(description)})`;\n }\n return code;\n}\n\nfunction escapeRegex(pattern: string): string {\n // Escape forward slashes for regex literal\n return pattern.replace(/\\//g, '\\\\/');\n}\n\nfunction safePropertyKey(key: string): string {\n // Check if key is a valid JS identifier\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key;\n }\n // Otherwise quote it\n return JSON.stringify(key);\n}\n\n/**\n * Check if a JSON Schema is empty or trivial (no meaningful constraints).\n */\nexport function isEmptySchema(schema: JSONSchema | null | undefined): boolean {\n if (!schema) return true;\n if (Object.keys(schema).length === 0) return true;\n\n // A schema with only type: object and empty properties is considered empty\n if (\n schema.type === 'object' &&\n (!schema.properties || Object.keys(schema.properties).length === 0) &&\n (!schema.required || schema.required.length === 0)\n ) {\n return true;\n }\n\n return false;\n}\n","import type { PromptDefinition, PromptPart, StructuredPrompt } from '../definePrompt.js';\nimport { jsonSchemaToZod, isEmptySchema, type JSONSchema } from './jsonSchemaToZod.js';\n\n/**\n * Tool configuration from UI (snake_case).\n */\ninterface ToolConfigInput {\n name: string;\n include_text_response?: boolean;\n include_tool_calls?: boolean;\n include_errors?: boolean;\n init_user_message_property?: string | null;\n init_attachments_property?: string | null;\n tenvs?: Record<string, unknown>;\n}\n\n/**\n * Prompt part as it comes from the UI/API.\n * Supports both new format (type: 'text'/'include') and legacy format (type: 'string'/'prompt')\n */\ninterface PromptPartInput {\n // New format\n type: 'text' | 'include' | 'string' | 'prompt' | 'variable';\n content?: string; // For type: 'text'\n prompt?: string; // For type: 'include'\n // Legacy format\n value?: string; // For legacy type: 'string' or 'variable'\n id?: string; // For legacy type: 'prompt'\n label?: string; // Legacy UI field\n schema?: any; // Legacy field from UI, ignored\n}\n\n/**\n * Input data for generating a prompt file.\n * This can include JSON Schema for requiredSchema which will be converted to Zod.\n */\nexport interface PromptFileData {\n name: string;\n toolDescription?: string;\n /**\n * Prompt content can be:\n * - A plain string\n * - A structured array of prompt parts\n * - A JSON string of a structured array (legacy format from UI)\n */\n prompt?: string | PromptPartInput[];\n model: string;\n includeChat?: boolean;\n includePastTools?: boolean;\n parallelToolCalls?: boolean;\n toolChoice?: 'auto' | 'none' | 'required';\n tools?: (string | ToolConfigInput)[];\n reasoning?: {\n effort?: 'low' | 'medium' | 'high';\n maxTokens?: number;\n exclude?: boolean;\n include?: boolean;\n };\n /**\n * Required schema as JSON Schema (from the UI).\n * Will be converted to Zod code.\n */\n requiredSchema?: JSONSchema;\n /**\n * Hook IDs to associate with this prompt.\n */\n hooks?: string[];\n}\n\n/**\n * Generate a TypeScript file for a prompt definition.\n *\n * @param data - Prompt data including JSON Schema for requiredSchema\n * @returns TypeScript code as a string\n */\nexport function generatePromptFile(data: PromptFileData): string {\n const hasSchema = data.requiredSchema && !isEmptySchema(data.requiredSchema);\n\n const lines = [`import { definePrompt } from '@standardagents/spec';`];\n\n // Add zod import if there's a requiredSchema with actual content\n if (hasSchema) {\n lines.push(`import { z } from 'zod';`);\n }\n\n lines.push('');\n lines.push(`export default definePrompt({`);\n lines.push(` name: '${escapeString(data.name)}',`);\n\n if (data.toolDescription) {\n lines.push(` toolDescription: '${escapeString(data.toolDescription)}',`);\n }\n\n // Prompt content - either plain string or structured array\n if (data.prompt !== undefined) {\n const promptCode = formatPromptContent(data.prompt);\n lines.push(` prompt: ${promptCode},`);\n }\n\n lines.push(` model: '${escapeString(data.model)}',`);\n\n // Note: exposeAsTool removed - all prompts are exposed as tools by default\n\n if (data.includeChat !== undefined) {\n lines.push(` includeChat: ${data.includeChat},`);\n }\n\n if (data.includePastTools !== undefined) {\n lines.push(` includePastTools: ${data.includePastTools},`);\n }\n\n if (data.parallelToolCalls !== undefined) {\n lines.push(` parallelToolCalls: ${data.parallelToolCalls},`);\n }\n\n if (data.toolChoice && data.toolChoice !== 'auto') {\n lines.push(` toolChoice: '${data.toolChoice}',`);\n }\n\n // Tools - can be strings or ToolConfig objects (including ai_human agent names for handoffs)\n if (data.tools && data.tools.length > 0) {\n const toolsCode = formatToolsArray(data.tools);\n lines.push(` tools: ${toolsCode},`);\n }\n\n // Reasoning config - output as TypeScript object (no quoted keys)\n if (data.reasoning && hasNonNullProperties(data.reasoning)) {\n const reasoningCode = formatReasoningConfig(data.reasoning);\n lines.push(` reasoning: ${reasoningCode},`);\n }\n\n // Hooks - array of hook IDs\n if (data.hooks && data.hooks.length > 0) {\n const hooksCode = data.hooks.map(h => `'${escapeString(h)}'`).join(', ');\n lines.push(` hooks: [${hooksCode}],`);\n }\n\n // RequiredSchema - convert JSON Schema to Zod code\n if (hasSchema) {\n const zodCode = jsonSchemaToZod(data.requiredSchema!, 1);\n lines.push(` requiredSchema: ${zodCode},`);\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Check if an object has any non-null/non-undefined properties.\n */\nfunction hasNonNullProperties(obj: Record<string, any>): boolean {\n return Object.values(obj).some(v => v !== null && v !== undefined);\n}\n\n/**\n * Format the tools array as TypeScript code (not JSON).\n * Transforms snake_case properties from UI to camelCase for TypeScript.\n */\nfunction formatToolsArray(tools: (string | ToolConfigInput)[]): string {\n const formatted = tools.map(tool => {\n if (typeof tool === 'string') {\n return `'${escapeString(tool)}'`;\n }\n // Tool config object - transform to camelCase and format as TypeScript\n return formatToolConfig(tool);\n });\n\n if (formatted.length === 1) {\n return `[${formatted[0]}]`;\n }\n\n // Multi-line format for multiple tools\n const indented = formatted.map(t => ` ${t}`).join(',\\n');\n return `[\\n${indented}\\n ]`;\n}\n\n/**\n * Format a tool config object as TypeScript code.\n * Transforms snake_case to camelCase and omits null/default values.\n */\nfunction formatToolConfig(config: ToolConfigInput): string {\n const parts: string[] = [];\n\n parts.push(`name: '${escapeString(config.name)}'`);\n\n // Transform snake_case to camelCase and only include non-default values\n if (config.include_text_response !== undefined && config.include_text_response !== true) {\n parts.push(`includeTextResponse: ${config.include_text_response}`);\n }\n\n if (config.include_tool_calls !== undefined && config.include_tool_calls !== true) {\n parts.push(`includeToolCalls: ${config.include_tool_calls}`);\n }\n\n if (config.include_errors !== undefined && config.include_errors !== true) {\n parts.push(`includeErrors: ${config.include_errors}`);\n }\n\n if (config.init_user_message_property !== undefined && config.init_user_message_property !== null) {\n parts.push(`initUserMessageProperty: '${escapeString(config.init_user_message_property)}'`);\n }\n\n if (config.init_attachments_property !== undefined && config.init_attachments_property !== null) {\n parts.push(`initAttachmentsProperty: '${escapeString(config.init_attachments_property)}'`);\n }\n\n // Serialize tenvs for provider tools\n if (config.tenvs && Object.keys(config.tenvs).length > 0) {\n parts.push(`tenvs: ${JSON.stringify(config.tenvs)}`);\n }\n\n return `{ ${parts.join(', ')} }`;\n}\n\n/**\n * Format reasoning config as TypeScript code (not JSON).\n */\nfunction formatReasoningConfig(reasoning: PromptFileData['reasoning']): string {\n if (!reasoning) return '{}';\n\n const parts: string[] = [];\n\n if (reasoning.effort !== undefined && reasoning.effort !== null) {\n parts.push(`effort: '${reasoning.effort}'`);\n }\n\n if (reasoning.maxTokens !== undefined && reasoning.maxTokens !== null) {\n parts.push(`maxTokens: ${reasoning.maxTokens}`);\n }\n\n if (reasoning.exclude !== undefined && reasoning.exclude !== null) {\n parts.push(`exclude: ${reasoning.exclude}`);\n }\n\n if (reasoning.include !== undefined && reasoning.include !== null) {\n parts.push(`include: ${reasoning.include}`);\n }\n\n if (parts.length === 0) {\n return '{}';\n }\n\n return `{ ${parts.join(', ')} }`;\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction escapeTemplateLiteral(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\${/g, '\\\\${');\n}\n\n/**\n * Parse prompt content into an array of parts.\n * Returns null if it's a plain string, or the array of parts if structured.\n */\nfunction parsePromptContent(prompt: string | PromptPartInput[] | undefined): PromptPartInput[] | null {\n if (!prompt) return null;\n\n // Already an array\n if (Array.isArray(prompt)) {\n return prompt;\n }\n\n // Try to parse as JSON array (legacy format from UI)\n if (typeof prompt === 'string') {\n try {\n const parsed = JSON.parse(prompt);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Not JSON, it's a plain string\n }\n }\n\n return null;\n}\n\n/**\n * Format prompt content as TypeScript code.\n * Plain strings use template literals, structured prompts use helper functions.\n */\nfunction formatPromptContent(prompt: string | PromptPartInput[] | undefined): string {\n if (!prompt) return \"''\";\n\n // Parse the prompt content\n const parts = parsePromptContent(prompt);\n\n // If it's a structured prompt (array), format it using helper functions\n if (parts !== null) {\n return formatStructuredPrompt(parts);\n }\n\n // Plain string - use template literal for multi-line\n if (typeof prompt === 'string') {\n if (prompt.includes('\\n')) {\n return `\\`${escapeTemplateLiteral(prompt)}\\``;\n }\n return `'${escapeString(prompt)}'`;\n }\n\n return \"''\";\n}\n\n/**\n * Format a structured prompt array as TypeScript code using discriminated union objects.\n */\nfunction formatStructuredPrompt(parts: PromptPartInput[]): string {\n if (parts.length === 0) {\n return '[]';\n }\n\n // Normalize parts to the new format\n const normalizedParts = parts.map(normalizePart);\n\n // Check if it's simple enough to be on one line (single short text part)\n if (normalizedParts.length === 1 && normalizedParts[0].type === 'text') {\n const content = normalizedParts[0].content || '';\n if (!content.includes('\\n') && content.length < 50) {\n return `[{ type: 'text', content: '${escapeString(content)}' }]`;\n }\n }\n\n // Multi-line format\n const formattedParts = normalizedParts.map(part => {\n if (part.type === 'text') {\n const content = part.content || '';\n // Use template literal for multi-line strings\n if (content.includes('\\n')) {\n return ` { type: 'text', content: \\`${escapeTemplateLiteral(content)}\\` }`;\n }\n return ` { type: 'text', content: '${escapeString(content)}' }`;\n } else if (part.type === 'include') {\n const promptName = part.prompt || '';\n return ` { type: 'include', prompt: '${escapeString(promptName)}' }`;\n }\n return ` // Unknown part type: ${(part as any).type}`;\n });\n\n return `[\\n${formattedParts.join(',\\n')},\\n ]`;\n}\n\n/**\n * Normalize a prompt part from legacy format to new format.\n * Legacy: { type: 'string', value: '...' } or { type: 'prompt', id: '...' }\n * New: { type: 'text', content: '...' } or { type: 'include', prompt: '...' }\n */\nfunction normalizePart(part: PromptPartInput): { type: 'text'; content: string } | { type: 'include'; prompt: string } {\n // Handle new format\n if (part.type === 'text') {\n return { type: 'text', content: part.content || '' };\n }\n if (part.type === 'include') {\n return { type: 'include', prompt: part.prompt || '' };\n }\n\n // Handle legacy format\n if (part.type === 'string') {\n return { type: 'text', content: part.value || '' };\n }\n if (part.type === 'prompt') {\n return { type: 'include', prompt: part.id || '' };\n }\n if (part.type === 'variable') {\n // Variables are converted to text with placeholder syntax\n return { type: 'text', content: `{{${part.value || ''}}}` };\n }\n\n // Fallback for unknown types\n return { type: 'text', content: '' };\n}\n","import type { AgentDefinition } from '../defineAgent.js';\n\n/**\n * Generate a TypeScript file for an agent definition.\n */\nexport function generateAgentFile(data: AgentDefinition): string {\n const lines = [\n `import { defineAgent } from '@standardagents/spec';`,\n '',\n `export default defineAgent({`,\n ` name: '${escapeString(data.name)}',`,\n ];\n\n // Package metadata fields (preserved from unpacked agents)\n if (data.packageName) {\n lines.push(` packageName: '${escapeString(data.packageName)}',`);\n }\n if (data.version) {\n lines.push(` version: '${escapeString(data.version)}',`);\n }\n if (data.author) {\n lines.push(` author: '${escapeString(data.author)}',`);\n }\n if (data.license) {\n lines.push(` license: '${escapeString(data.license)}',`);\n }\n\n // Only include title if explicitly provided (deprecated field)\n if (data.title) {\n lines.push(` title: '${escapeString(data.title)}',`);\n }\n\n if (data.type && data.type !== 'ai_human') {\n lines.push(` type: '${data.type}',`);\n }\n\n // Only include maxSessionTurns if it's a valid number (not null/undefined)\n if (data.maxSessionTurns !== undefined && data.maxSessionTurns !== null) {\n lines.push(` maxSessionTurns: ${data.maxSessionTurns},`);\n }\n\n // Side A config\n lines.push(` sideA: ${formatSideConfig(data.sideA)},`);\n\n // Side B config (optional)\n if (data.sideB) {\n lines.push(` sideB: ${formatSideConfig(data.sideB)},`);\n }\n\n if (data.exposeAsTool !== undefined) {\n lines.push(` exposeAsTool: ${data.exposeAsTool},`);\n }\n\n if (data.toolDescription) {\n lines.push(` toolDescription: '${escapeString(data.toolDescription)}',`);\n }\n\n // Serialize agent-level tenvs\n if (data.tenvs && Object.keys(data.tenvs).length > 0) {\n lines.push(` tenvs: ${JSON.stringify(data.tenvs)},`);\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction formatSideConfig(config: AgentDefinition['sideA']): string {\n const parts: string[] = ['{'];\n\n if (config.label) {\n parts.push(` label: '${escapeString(config.label)}',`);\n }\n\n parts.push(` prompt: '${escapeString(config.prompt)}',`);\n\n if (config.stopOnResponse !== undefined) {\n parts.push(` stopOnResponse: ${config.stopOnResponse},`);\n }\n\n if (config.stopTool) {\n parts.push(` stopTool: '${escapeString(config.stopTool)}',`);\n }\n\n if (config.stopToolResponseProperty) {\n parts.push(` stopToolResponseProperty: '${escapeString(config.stopToolResponseProperty)}',`);\n }\n\n if (config.maxSteps !== undefined) {\n parts.push(` maxSteps: ${config.maxSteps},`);\n }\n\n if (config.endSessionTool) {\n parts.push(` endSessionTool: '${escapeString(config.endSessionTool)}',`);\n }\n\n // Only include manualStopCondition if true (false is the default)\n if (config.manualStopCondition) {\n parts.push(` manualStopCondition: ${config.manualStopCondition},`);\n }\n\n parts.push(' }');\n return parts.join('\\n');\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\\\/g, '\\\\\\\\');\n}\n","/**\n * File persistence service for dev mode.\n *\n * This module provides filesystem operations for creating, updating, and deleting\n * model, prompt, and agent definition files. It runs in the Vite plugin context\n * (Node.js) where filesystem access is available.\n *\n * In production (Cloudflare Workers), these operations would be handled by\n * a different mechanism (e.g., GitHub API commits).\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { generateModelFile, type GenerateModelFileOptions } from '../generators/generateModelFile.js';\nimport { generatePromptFile, type PromptFileData } from '../generators/generatePromptFile.js';\nimport { generateAgentFile } from '../generators/generateAgentFile.js';\nimport type { ModelDefinition } from '../defineModel.js';\nimport type { AgentDefinition } from '../defineAgent.js';\n\n/**\n * Mapping from provider string identifiers to their package info.\n * Used to generate proper import statements in model files.\n */\nexport const PROVIDER_PACKAGE_MAP: Record<string, { name: string; package: string }> = {\n openai: { name: 'openai', package: '@standardagents/openai' },\n openrouter: { name: 'openrouter', package: '@standardagents/openrouter' },\n anthropic: { name: 'anthropic', package: '@standardagents/anthropic' },\n google: { name: 'google', package: '@standardagents/google' },\n test: { name: 'test', package: '@standardagents/builder/test' },\n};\n\n/**\n * Convert a model/prompt/agent name to a safe filename.\n * Handles characters that are invalid in filesystem paths:\n * - Replaces `/` and `\\` with `__` (path separators)\n * - Replaces `:` with `_` (invalid on Windows, used in model IDs like `:free`)\n * - Replaces `-` with `_` for consistency with existing conventions\n * - Replaces `.` with `_` to avoid confusion with file extensions\n * - Replaces other problematic characters (`*`, `?`, `\"`, `<`, `>`, `|`) with `_`\n */\nexport function nameToFilename(name: string): string {\n return name\n .replace(/[/\\\\]/g, '__') // Path separators become double underscore\n .replace(/[:*?\"<>|.]/g, '_') // Invalid/problematic characters become underscore\n .replace(/-/g, '_'); // Hyphens become underscore for consistency\n}\n\n/**\n * Get the file path for a model definition.\n */\nexport function getModelFilePath(modelsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(modelsDir, `${filename}.ts`);\n}\n\n/**\n * Check if a model file already exists.\n */\nexport function modelExists(modelsDir: string, name: string): boolean {\n const filePath = getModelFilePath(modelsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Result of a persistence operation.\n */\nexport interface PersistenceResult {\n success: boolean;\n filePath?: string;\n error?: string;\n}\n\n/**\n * Raw model data from UI (uses string provider identifier).\n * This is transformed into proper TypeScript with ProviderFactory imports.\n */\nexport interface RawModelData {\n name: string;\n provider: string; // String identifier like 'openai', 'openrouter'\n model: string;\n includedProviders?: string[];\n fallbacks?: string[];\n inputPrice?: number;\n outputPrice?: number;\n cachedPrice?: number;\n capabilities?: {\n supportsImages?: boolean;\n supportsToolCalls?: boolean;\n supportsStreaming?: boolean;\n supportsJsonMode?: boolean;\n maxContextTokens?: number;\n maxOutputTokens?: number;\n reasoningLevels?: Record<number, string | null>;\n };\n}\n\n/**\n * Save a model definition to a TypeScript file.\n *\n * @param modelsDir - The directory where models are stored\n * @param data - The raw model data (with string provider)\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function saveModel(\n modelsDir: string,\n data: RawModelData,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure models directory exists\n if (!fs.existsSync(modelsDir)) {\n fs.mkdirSync(modelsDir, { recursive: true });\n }\n\n const filePath = getModelFilePath(modelsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Model file already exists: ${filePath}. Use update to modify existing models.`,\n };\n }\n\n // Look up provider package info\n const providerInfo = PROVIDER_PACKAGE_MAP[data.provider];\n if (!providerInfo) {\n return {\n success: false,\n error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(PROVIDER_PACKAGE_MAP).join(', ')}`,\n };\n }\n\n // Generate the TypeScript file content\n const content = generateModelFile(data as any, {\n providerName: providerInfo.name,\n providerPackage: providerInfo.package,\n });\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save model',\n };\n }\n}\n\n/**\n * Delete a model definition file.\n *\n * @param modelsDir - The directory where models are stored\n * @param name - The model name\n * @returns Result of the operation\n */\nexport async function deleteModel(\n modelsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getModelFilePath(modelsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Model file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete model',\n };\n }\n}\n\n/**\n * Transform snake_case model data from the UI to camelCase for internal use.\n * The UI sends field names like `included_providers`, etc.\n * but the backend expects `includedProviders`, etc.\n *\n * Also strips price fields for OpenRouter models since those are returned\n * per-request by the OpenRouter API.\n */\nexport function transformModelData(data: any): any {\n const transformed: any = {};\n const isOpenRouter = data.provider === 'openrouter';\n\n // Direct mappings (snake_case -> camelCase)\n const fieldMappings: Record<string, string> = {\n included_providers: 'includedProviders',\n input_price: 'inputPrice',\n output_price: 'outputPrice',\n cached_price: 'cachedPrice',\n };\n\n // Fields to skip for OpenRouter models (prices come from API per-request)\n const openRouterSkipFields = ['inputPrice', 'outputPrice', 'cachedPrice', 'input_price', 'output_price', 'cached_price'];\n\n for (const [key, value] of Object.entries(data)) {\n // Skip 'id' field as it's not needed for persistence\n if (key === 'id') continue;\n\n // Skip price fields for OpenRouter models\n if (isOpenRouter && openRouterSkipFields.includes(key)) continue;\n\n // Check if this is a snake_case field that needs transformation\n if (fieldMappings[key]) {\n const transformedKey = fieldMappings[key];\n // Skip price fields for OpenRouter even after transformation\n if (isOpenRouter && openRouterSkipFields.includes(transformedKey)) continue;\n transformed[transformedKey] = value;\n } else {\n // Keep the field as-is (handles camelCase fields and 'name', 'model', 'provider', etc.)\n transformed[key] = value;\n }\n }\n\n return transformed;\n}\n\n/**\n * Validate model data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validateModelData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Model name is required and must be a string';\n }\n\n if (!data.provider || typeof data.provider !== 'string') {\n return 'Model provider is required and must be a string';\n }\n\n const validProviders = Object.keys(PROVIDER_PACKAGE_MAP);\n if (!validProviders.includes(data.provider)) {\n return `Invalid provider '${data.provider}'. Must be one of: ${validProviders.join(', ')}`;\n }\n\n if (!data.model || typeof data.model !== 'string') {\n return 'Model ID is required and must be a string';\n }\n\n // Validate optional numeric fields\n if (data.inputPrice !== undefined && typeof data.inputPrice !== 'number') {\n return 'inputPrice must be a number';\n }\n\n if (data.outputPrice !== undefined && typeof data.outputPrice !== 'number') {\n return 'outputPrice must be a number';\n }\n\n if (data.cachedPrice !== undefined && typeof data.cachedPrice !== 'number') {\n return 'cachedPrice must be a number';\n }\n\n // Validate fallbacks is an array of strings\n if (data.fallbacks !== undefined) {\n if (!Array.isArray(data.fallbacks)) {\n return 'fallbacks must be an array';\n }\n for (const fallback of data.fallbacks) {\n if (typeof fallback !== 'string') {\n return 'Each fallback must be a string (model name)';\n }\n }\n }\n\n // Validate includedProviders is an array of strings\n if (data.includedProviders !== undefined) {\n if (!Array.isArray(data.includedProviders)) {\n return 'includedProviders must be an array';\n }\n for (const provider of data.includedProviders) {\n if (typeof provider !== 'string') {\n return 'Each includedProvider must be a string';\n }\n }\n }\n\n return null;\n}\n\n// ============================================================================\n// Prompt Persistence\n// ============================================================================\n\n/**\n * Transform snake_case prompt data from the UI to camelCase for internal use.\n * The UI sends field names like `model_id`, `tool_description`, etc.\n * but the backend expects `model`, `toolDescription`, etc.\n */\nexport function transformPromptData(data: any): any {\n const transformed: any = {};\n\n // Direct mappings (snake_case -> camelCase)\n const fieldMappings: Record<string, string> = {\n model_id: 'model',\n tool_description: 'toolDescription',\n expose_as_tool: 'exposeAsTool',\n required_schema: 'requiredSchema',\n include_chat: 'includeChat',\n include_past_tools: 'includePastTools',\n parallel_tool_calls: 'parallelToolCalls',\n tool_choice: 'toolChoice',\n reasoning_effort: 'reasoningEffort',\n reasoning_max_tokens: 'reasoningMaxTokens',\n reasoning_exclude: 'reasoningExclude',\n include_reasoning: 'includeReasoning',\n };\n\n for (const [key, value] of Object.entries(data)) {\n // Skip 'id' field as it's not needed for persistence\n if (key === 'id') continue;\n\n // Check if this is a snake_case field that needs transformation\n if (fieldMappings[key]) {\n transformed[fieldMappings[key]] = value;\n } else {\n // Keep the field as-is (handles camelCase fields and 'name', 'prompt', 'tools', etc.)\n transformed[key] = value;\n }\n }\n\n // Build reasoning config if any reasoning fields are present\n if (\n transformed.reasoningEffort !== undefined ||\n transformed.reasoningMaxTokens !== undefined ||\n transformed.reasoningExclude !== undefined ||\n transformed.includeReasoning !== undefined\n ) {\n transformed.reasoning = {};\n if (transformed.reasoningEffort) {\n transformed.reasoning.effort = transformed.reasoningEffort;\n }\n if (transformed.reasoningMaxTokens) {\n transformed.reasoning.maxTokens = transformed.reasoningMaxTokens;\n }\n if (transformed.reasoningExclude !== undefined) {\n transformed.reasoning.exclude = transformed.reasoningExclude;\n }\n if (transformed.includeReasoning !== undefined) {\n transformed.reasoning.include = transformed.includeReasoning;\n }\n // Clean up the flat fields\n delete transformed.reasoningEffort;\n delete transformed.reasoningMaxTokens;\n delete transformed.reasoningExclude;\n delete transformed.includeReasoning;\n }\n\n return transformed;\n}\n\n/**\n * Get the file path for a prompt definition.\n */\nexport function getPromptFilePath(promptsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(promptsDir, `${filename}.ts`);\n}\n\n/**\n * Check if a prompt file already exists.\n */\nexport function promptExists(promptsDir: string, name: string): boolean {\n const filePath = getPromptFilePath(promptsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Save a prompt definition to a TypeScript file.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param data - The prompt definition data (with JSON Schema for requiredSchema)\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function savePrompt(\n promptsDir: string,\n data: PromptFileData,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure prompts directory exists\n if (!fs.existsSync(promptsDir)) {\n fs.mkdirSync(promptsDir, { recursive: true });\n }\n\n const filePath = getPromptFilePath(promptsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Prompt file already exists: ${filePath}. Use update to modify existing prompts.`,\n };\n }\n\n // Generate the TypeScript file content (converts JSON Schema to Zod)\n const content = generatePromptFile(data);\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save prompt',\n };\n }\n}\n\n/**\n * Delete a prompt definition file.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param name - The prompt name\n * @returns Result of the operation\n */\nexport async function deletePrompt(\n promptsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getPromptFilePath(promptsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Prompt file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete prompt',\n };\n }\n}\n\n/**\n * Rename a prompt definition file and update its name property.\n * Since prompts contain Zod schemas that can't be easily regenerated from JSON Schema,\n * this function reads the file and updates the name property in place.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldName - The current prompt name\n * @param newName - The new prompt name\n * @returns Result of the operation\n */\nexport async function renamePrompt(\n promptsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getPromptFilePath(promptsDir, oldName);\n const newFilePath = getPromptFilePath(promptsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Prompt file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Prompt file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename prompt',\n };\n }\n}\n\n/**\n * Validate prompt data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validatePromptData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Prompt name is required and must be a string';\n }\n\n if (data.name.includes('/')) {\n return \"Prompt name cannot contain '/'. Reserved for namespace qualification.\";\n }\n\n if (!data.model || typeof data.model !== 'string') {\n return 'Prompt model is required and must be a string';\n }\n\n // toolDescription is optional but should be string if provided\n if (data.toolDescription !== undefined && typeof data.toolDescription !== 'string') {\n return 'toolDescription must be a string';\n }\n\n // prompt content is optional but should be string if provided\n if (data.prompt !== undefined && typeof data.prompt !== 'string') {\n return 'prompt must be a string';\n }\n\n // Validate boolean fields (exposeAsTool removed - all prompts exposed by default)\n const booleanFields = ['includeChat', 'includePastTools', 'parallelToolCalls'];\n for (const field of booleanFields) {\n if (data[field] !== undefined && typeof data[field] !== 'boolean') {\n return `${field} must be a boolean`;\n }\n }\n\n // Validate toolChoice\n if (data.toolChoice !== undefined) {\n const validChoices = ['auto', 'none', 'required'];\n if (!validChoices.includes(data.toolChoice)) {\n return `Invalid toolChoice '${data.toolChoice}'. Must be one of: ${validChoices.join(', ')}`;\n }\n }\n\n // Validate tools is an array\n if (data.tools !== undefined && !Array.isArray(data.tools)) {\n return 'tools must be an array';\n }\n\n // Validate reasoning config\n if (data.reasoning !== undefined) {\n if (typeof data.reasoning !== 'object') {\n return 'reasoning must be an object';\n }\n if (data.reasoning.effort !== undefined) {\n const validEfforts = ['low', 'medium', 'high'];\n if (!validEfforts.includes(data.reasoning.effort)) {\n return `Invalid reasoning.effort '${data.reasoning.effort}'. Must be one of: ${validEfforts.join(', ')}`;\n }\n }\n if (data.reasoning.maxTokens !== undefined && typeof data.reasoning.maxTokens !== 'number') {\n return 'reasoning.maxTokens must be a number';\n }\n }\n\n // requiredSchema is validated by the generatePromptFile function\n // (it handles JSON Schema to Zod conversion)\n\n return null;\n}\n\n// ============================================================================\n// Agent Persistence\n// ============================================================================\n\n/**\n * Transform snake_case agent data from the UI to camelCase for internal use.\n * The UI sends field names like `side_a_label`, `side_a_agent_prompt`, etc.\n * but the backend expects nested structures like `sideA.label`, `sideA.prompt`, etc.\n */\nexport function transformAgentData(data: any): any {\n const transformed: any = {\n name: data.name,\n };\n\n // title is deprecated but include if provided for backward compatibility\n if (data.title) {\n transformed.title = data.title;\n }\n\n // Type\n if (data.type) {\n transformed.type = data.type;\n }\n\n // Max session turns\n if (data.max_session_turns !== undefined) {\n transformed.maxSessionTurns = data.max_session_turns;\n }\n\n // Side A configuration\n transformed.sideA = {\n prompt: data.side_a_agent_prompt,\n };\n if (data.side_a_label) {\n transformed.sideA.label = data.side_a_label;\n }\n if (data.side_a_stop_on_response !== undefined) {\n transformed.sideA.stopOnResponse = data.side_a_stop_on_response;\n }\n if (data.side_a_stop_tool) {\n transformed.sideA.stopTool = data.side_a_stop_tool;\n }\n if (data.side_a_stop_tool_response_property) {\n transformed.sideA.stopToolResponseProperty = data.side_a_stop_tool_response_property;\n }\n if (data.side_a_max_steps !== undefined) {\n transformed.sideA.maxSteps = data.side_a_max_steps;\n }\n if (data.side_a_end_session_tool) {\n transformed.sideA.endSessionTool = data.side_a_end_session_tool;\n }\n if (data.side_a_manual_stop_condition !== undefined) {\n transformed.sideA.manualStopCondition = data.side_a_manual_stop_condition;\n }\n\n // Side B configuration (optional, for dual_ai)\n if (data.side_b_agent_prompt) {\n transformed.sideB = {\n prompt: data.side_b_agent_prompt,\n };\n if (data.side_b_label) {\n transformed.sideB.label = data.side_b_label;\n }\n if (data.side_b_stop_on_response !== undefined) {\n transformed.sideB.stopOnResponse = data.side_b_stop_on_response;\n }\n if (data.side_b_stop_tool) {\n transformed.sideB.stopTool = data.side_b_stop_tool;\n }\n if (data.side_b_stop_tool_response_property) {\n transformed.sideB.stopToolResponseProperty = data.side_b_stop_tool_response_property;\n }\n if (data.side_b_max_steps !== undefined) {\n transformed.sideB.maxSteps = data.side_b_max_steps;\n }\n if (data.side_b_end_session_tool) {\n transformed.sideB.endSessionTool = data.side_b_end_session_tool;\n }\n if (data.side_b_manual_stop_condition !== undefined) {\n transformed.sideB.manualStopCondition = data.side_b_manual_stop_condition;\n }\n }\n\n // Tool exposure\n if (data.expose_as_tool !== undefined) {\n transformed.exposeAsTool = data.expose_as_tool;\n }\n if (data.tool_description) {\n transformed.toolDescription = data.tool_description;\n }\n\n return transformed;\n}\n\n/**\n * Get the file path for an agent definition.\n */\nexport function getAgentFilePath(agentsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(agentsDir, `${filename}.ts`);\n}\n\n/**\n * Check if an agent file already exists.\n */\nexport function agentExists(agentsDir: string, name: string): boolean {\n const filePath = getAgentFilePath(agentsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Extract metadata fields from an existing agent TypeScript file.\n * These fields are added during unpack and should be preserved during edits.\n *\n * @param filePath - Path to the agent TypeScript file\n * @returns Object with metadata fields, or empty object if none found\n */\nfunction extractAgentMetadata(filePath: string): {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n} {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n\n const metadata: Record<string, string> = {};\n\n // Simple regex extraction for metadata fields\n // These are string literals in the defineAgent call\n const packageNameMatch = content.match(/packageName:\\s*['\"]([^'\"]+)['\"]/);\n if (packageNameMatch) metadata.packageName = packageNameMatch[1];\n\n const versionMatch = content.match(/version:\\s*['\"]([^'\"]+)['\"]/);\n if (versionMatch) metadata.version = versionMatch[1];\n\n const authorMatch = content.match(/author:\\s*['\"]([^'\"]+)['\"]/);\n if (authorMatch) metadata.author = authorMatch[1];\n\n const licenseMatch = content.match(/license:\\s*['\"]([^'\"]+)['\"]/);\n if (licenseMatch) metadata.license = licenseMatch[1];\n\n return metadata;\n } catch {\n return {};\n }\n}\n\n/**\n * Save an agent definition to a TypeScript file.\n *\n * When overwriting an existing file, this function preserves metadata fields\n * (packageName, version, author, license) that were set during unpack operations.\n * These fields enable the pack modal to show correct defaults for re-packing.\n *\n * @param agentsDir - The directory where agents are stored\n * @param data - The agent definition data\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function saveAgent(\n agentsDir: string,\n data: AgentDefinition,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure agents directory exists\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n const filePath = getAgentFilePath(agentsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Agent file already exists: ${filePath}. Use update to modify existing agents.`,\n };\n }\n\n // When overwriting, preserve metadata fields from the existing file\n // These are set during unpack and should survive edits\n if (overwrite && fs.existsSync(filePath)) {\n const existingMetadata = extractAgentMetadata(filePath);\n if (existingMetadata.packageName && !data.packageName) {\n data.packageName = existingMetadata.packageName;\n }\n if (existingMetadata.version && !data.version) {\n data.version = existingMetadata.version;\n }\n if (existingMetadata.author && !data.author) {\n data.author = existingMetadata.author;\n }\n if (existingMetadata.license && !data.license) {\n data.license = existingMetadata.license;\n }\n }\n\n // Generate the TypeScript file content\n const content = generateAgentFile(data);\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save agent',\n };\n }\n}\n\n/**\n * Delete an agent definition file.\n *\n * @param agentsDir - The directory where agents are stored\n * @param name - The agent name\n * @returns Result of the operation\n */\nexport async function deleteAgent(\n agentsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getAgentFilePath(agentsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Agent file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete agent',\n };\n }\n}\n\n/**\n * Rename an agent definition file and update its name property.\n * This function reads the file and updates the name property in place.\n *\n * @param agentsDir - The directory where agents are stored\n * @param oldName - The current agent name\n * @param newName - The new agent name\n * @returns Result of the operation\n */\nexport async function renameAgent(\n agentsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getAgentFilePath(agentsDir, oldName);\n const newFilePath = getAgentFilePath(agentsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Agent file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Agent file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename agent',\n };\n }\n}\n\n/**\n * Rename a model definition file and update its name property.\n * This function reads the file and updates the name property in place.\n *\n * @param modelsDir - The directory where models are stored\n * @param oldName - The current model name\n * @param newName - The new model name\n * @returns Result of the operation\n */\nexport async function renameModel(\n modelsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getModelFilePath(modelsDir, oldName);\n const newFilePath = getModelFilePath(modelsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Model file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Model file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename model',\n };\n }\n}\n\n// ============================================================================\n// Cascade Update Functions\n// ============================================================================\n\n/**\n * Update model references in all prompt files when a model is renamed.\n * Prompts reference models via the `model` field.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldModelName - The old model name\n * @param newModelName - The new model name\n * @returns Array of updated file paths\n */\nexport async function updateModelReferencesInPrompts(\n promptsDir: string,\n oldModelName: string,\n newModelName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(promptsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(promptsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(promptsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n\n // Match model: 'old_name' or model: \"old_name\"\n const modelRegex = new RegExp(`model:\\\\s*['\"]${escapeRegExp(oldModelName)}['\"]`, 'g');\n\n if (modelRegex.test(content)) {\n content = content.replace(modelRegex, `model: '${newModelName}'`);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Update prompt references in other prompt files when a prompt is renamed.\n * Prompts reference other prompts via the `tools` array (prompts exposed as tools).\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldPromptName - The old prompt name\n * @param newPromptName - The new prompt name\n * @returns Array of updated file paths\n */\nexport async function updatePromptReferencesInPrompts(\n promptsDir: string,\n oldPromptName: string,\n newPromptName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(promptsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(promptsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(promptsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n let modified = false;\n\n // Match prompt references in tools array: 'old_name' or \"old_name\"\n // This is a simple string replacement within the tools array context\n const toolsArrayRegex = /tools:\\s*\\[([^\\]]*)\\]/gs;\n const newContent = content.replace(toolsArrayRegex, (match) => {\n const oldMatch = match;\n // Replace the prompt name within the tools array\n const promptRefRegex = new RegExp(`['\"]${escapeRegExp(oldPromptName)}['\"]`, 'g');\n const replaced = match.replace(promptRefRegex, `'${newPromptName}'`);\n if (replaced !== oldMatch) {\n modified = true;\n }\n return replaced;\n });\n\n if (modified) {\n await fs.promises.writeFile(filePath, newContent, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Update prompt references in agent files when a prompt is renamed.\n * Agents reference prompts via sideA.prompt and sideB.prompt fields.\n *\n * @param agentsDir - The directory where agents are stored\n * @param oldPromptName - The old prompt name\n * @param newPromptName - The new prompt name\n * @returns Array of updated file paths\n */\nexport async function updatePromptReferencesInAgents(\n agentsDir: string,\n oldPromptName: string,\n newPromptName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(agentsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n\n // Match prompt: 'old_name' or prompt: \"old_name\" in sideA/sideB objects\n const promptRegex = new RegExp(`prompt:\\\\s*['\"]${escapeRegExp(oldPromptName)}['\"]`, 'g');\n\n if (promptRegex.test(content)) {\n content = content.replace(promptRegex, `prompt: '${newPromptName}'`);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Escape special regex characters in a string\n */\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Validate agent data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validateAgentData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Agent name is required and must be a string';\n }\n\n if (data.name.includes('/')) {\n return \"Agent name cannot contain '/'. Reserved for namespace qualification.\";\n }\n\n // title is deprecated and optional - validate if provided\n if (data.title !== undefined && typeof data.title !== 'string') {\n return 'Agent title must be a string if provided';\n }\n\n // Validate type\n if (data.type !== undefined) {\n const validTypes = ['ai_human', 'dual_ai'];\n if (!validTypes.includes(data.type)) {\n return `Invalid type '${data.type}'. Must be one of: ${validTypes.join(', ')}`;\n }\n }\n\n // Validate sideA\n if (!data.sideA || typeof data.sideA !== 'object') {\n return 'sideA configuration is required';\n }\n\n if (!data.sideA.prompt || typeof data.sideA.prompt !== 'string') {\n return 'sideA.prompt is required and must be a string';\n }\n\n // Validate sideA optional fields\n if (data.sideA.label !== undefined && typeof data.sideA.label !== 'string') {\n return 'sideA.label must be a string';\n }\n\n if (data.sideA.stopOnResponse !== undefined && typeof data.sideA.stopOnResponse !== 'boolean') {\n return 'sideA.stopOnResponse must be a boolean';\n }\n\n if (data.sideA.stopTool !== undefined && typeof data.sideA.stopTool !== 'string') {\n return 'sideA.stopTool must be a string';\n }\n\n if (data.sideA.stopTool && !data.sideA.stopToolResponseProperty) {\n return 'sideA.stopToolResponseProperty is required when sideA.stopTool is set';\n }\n\n if (data.sideA.maxSteps !== undefined) {\n if (typeof data.sideA.maxSteps !== 'number' || data.sideA.maxSteps <= 0) {\n return 'sideA.maxSteps must be a positive number';\n }\n }\n\n // Validate dual_ai requires sideB\n if (data.type === 'dual_ai') {\n if (!data.sideB || typeof data.sideB !== 'object') {\n return 'sideB configuration is required for dual_ai type';\n }\n\n if (!data.sideB.prompt || typeof data.sideB.prompt !== 'string') {\n return 'sideB.prompt is required for dual_ai type';\n }\n\n // Validate sideB optional fields\n if (data.sideB.stopTool && !data.sideB.stopToolResponseProperty) {\n return 'sideB.stopToolResponseProperty is required when sideB.stopTool is set';\n }\n\n if (data.sideB.maxSteps !== undefined) {\n if (typeof data.sideB.maxSteps !== 'number' || data.sideB.maxSteps <= 0) {\n return 'sideB.maxSteps must be a positive number';\n }\n }\n }\n\n // Validate exposeAsTool requires toolDescription\n if (data.exposeAsTool && !data.toolDescription) {\n return 'toolDescription is required when exposeAsTool is true';\n }\n\n // Validate maxSessionTurns (only applicable for dual_ai agents)\n // Skip validation if null/undefined (ai_human agents send null)\n if (data.maxSessionTurns !== undefined && data.maxSessionTurns !== null) {\n if (typeof data.maxSessionTurns !== 'number' || data.maxSessionTurns <= 0) {\n return 'maxSessionTurns must be a positive number';\n }\n }\n\n return null;\n}\n","/**\n * Metadata service for Standard Agents packing.\n *\n * Manages .standardagent/{agent-name}.json files that store package metadata\n * (packageName, version, license, etc.) for preservation across pack/unpack cycles.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PackageMetadata } from './types.js';\n\n/**\n * Service for managing package metadata in .standardagent/ directory.\n */\nexport class MetadataService {\n private metadataDir: string;\n\n /**\n * Create a new MetadataService.\n *\n * @param agentsDir - Path to the agents/ directory\n */\n constructor(agentsDir: string) {\n this.metadataDir = path.join(agentsDir, '.standardagent');\n }\n\n /**\n * Read metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @returns Metadata if found, null otherwise\n */\n async read(agentName: string): Promise<PackageMetadata | null> {\n const filePath = this.getMetadataPath(agentName);\n\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n return JSON.parse(content) as PackageMetadata;\n } catch {\n return null;\n }\n }\n\n /**\n * Write metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @param metadata - Metadata to write\n */\n async write(agentName: string, metadata: PackageMetadata): Promise<void> {\n // Ensure directory exists\n if (!fs.existsSync(this.metadataDir)) {\n fs.mkdirSync(this.metadataDir, { recursive: true });\n }\n\n const filePath = this.getMetadataPath(agentName);\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2));\n }\n\n /**\n * Delete metadata for an agent.\n *\n * @param agentName - Name of the agent\n */\n async delete(agentName: string): Promise<void> {\n const filePath = this.getMetadataPath(agentName);\n\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n\n /**\n * Get the next version by incrementing the patch number.\n *\n * @param currentVersion - Current semver version (e.g., \"1.0.0\")\n * @returns Incremented version (e.g., \"1.0.1\")\n */\n getNextVersion(currentVersion: string): string {\n const parts = currentVersion.split('.');\n\n if (parts.length < 3) {\n // Invalid semver, return as-is with .1 appended\n return `${currentVersion}.1`;\n }\n\n // Handle prerelease versions (e.g., \"1.0.0-beta.1\")\n const patchPart = parts[2];\n const prereleaseIndex = patchPart.indexOf('-');\n\n if (prereleaseIndex > -1) {\n // Has prerelease suffix, just increment patch\n const patch = parseInt(patchPart.substring(0, prereleaseIndex), 10);\n const prerelease = patchPart.substring(prereleaseIndex);\n return `${parts[0]}.${parts[1]}.${patch + 1}${prerelease}`;\n }\n\n // Standard semver - increment patch\n const patch = parseInt(patchPart, 10);\n return `${parts[0]}.${parts[1]}.${patch + 1}`;\n }\n\n /**\n * Validate a semver version string.\n *\n * @param version - Version string to validate\n * @returns true if valid semver format\n */\n isValidVersion(version: string): boolean {\n // Basic semver pattern: X.Y.Z or X.Y.Z-prerelease\n const semverPattern = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n return semverPattern.test(version);\n }\n\n /**\n * Validate an npm package name.\n *\n * @param name - Package name to validate\n * @returns Object with valid flag and optional error message\n */\n validatePackageName(name: string): { valid: boolean; error?: string } {\n if (!name) {\n return { valid: false, error: 'Package name is required' };\n }\n\n if (name.length > 214) {\n return { valid: false, error: 'Package name must be 214 characters or less' };\n }\n\n if (name.startsWith('.') || name.startsWith('_')) {\n return { valid: false, error: 'Package name cannot start with . or _' };\n }\n\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Package name must be lowercase' };\n }\n\n // Allow scoped packages (@scope/name) or regular packages\n const validPattern = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n if (!validPattern.test(name)) {\n return {\n valid: false,\n error: 'Package name can only contain lowercase letters, numbers, hyphens, underscores, and dots',\n };\n }\n\n return { valid: true };\n }\n\n /**\n * Generate a suggested package name from project ID and agent name.\n *\n * @param projectId - Project identifier (optional)\n * @param agentName - Agent name\n * @returns Suggested npm package name\n */\n suggestPackageName(projectId: string | undefined, agentName: string): string {\n // Normalize agent name: lowercase, replace underscores with hyphens\n const normalizedAgent = agentName.toLowerCase().replace(/_/g, '-');\n\n if (projectId) {\n const normalizedProject = projectId.toLowerCase().replace(/_/g, '-');\n return `standardagent-${normalizedProject}-${normalizedAgent}`;\n }\n\n return `standardagent-${normalizedAgent}`;\n }\n\n /**\n * Get the file path for an agent's metadata.\n */\n private getMetadataPath(agentName: string): string {\n return path.join(this.metadataDir, `${agentName}.json`);\n }\n}\n","/**\n * AST utilities for analyzing agent code during packing.\n *\n * Uses TypeScript's compiler API to extract information from\n * define* calls and tool execute functions.\n *\n * @module\n */\n\nimport * as ts from 'typescript';\nimport * as fs from 'node:fs';\nimport MagicString from 'magic-string';\n\n/**\n * Result of extracting uses from a tool definition.\n */\nexport interface ExtractUsesResult {\n /** Array of tool/prompt/agent names in the uses list */\n uses: string[];\n /** Whether the uses property was found */\n found: boolean;\n /** Line number where uses was found (1-indexed) */\n line?: number;\n}\n\n/**\n * Result of extracting tools from a prompt definition.\n */\nexport interface ExtractPromptToolsResult {\n /** Tool names in the tools array */\n tools: string[];\n /** Whether it's a mix of strings and objects */\n hasSubpromptConfigs: boolean;\n}\n\n/**\n * Extract the `uses` array from a defineTool call in source code.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Extraction result with uses array and metadata\n *\n * @example\n * ```typescript\n * const result = extractToolUses(`\n * export default defineTool({\n * description: 'My tool',\n * uses: ['helper_tool', 'other_agent:main'],\n * execute: async (state, args) => { ... }\n * });\n * `);\n * // result.uses = ['helper_tool', 'other_agent:main']\n * ```\n */\nexport function extractToolUses(sourceCode: string): ExtractUsesResult {\n const sourceFile = ts.createSourceFile(\n 'tool.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractUsesResult = {\n uses: [],\n found: false,\n };\n\n function visit(node: ts.Node): void {\n // Look for defineTool({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineTool' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'uses' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'uses' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n result.found = true;\n result.line = sourceFile.getLineAndCharacterOfPosition(prop.getStart()).line + 1;\n\n // Extract string values from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.uses.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the `tools` array from a definePrompt call.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Array of tool names\n */\nexport function extractPromptTools(sourceCode: string): ExtractPromptToolsResult {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractPromptToolsResult = {\n tools: [],\n hasSubpromptConfigs: false,\n };\n\n function visit(node: ts.Node): void {\n // Look for definePrompt({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'tools' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'tools' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n // Extract tool names from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.tools.push(element.text);\n } else if (ts.isObjectLiteralExpression(element)) {\n // SubpromptConfig object - look for 'name' property\n result.hasSubpromptConfigs = true;\n for (const objProp of element.properties) {\n if (\n ts.isPropertyAssignment(objProp) &&\n ts.isIdentifier(objProp.name) &&\n objProp.name.text === 'name' &&\n ts.isStringLiteral(objProp.initializer)\n ) {\n result.tools.push(objProp.initializer.text);\n }\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the model name from a definePrompt call.\n */\nexport function extractPromptModel(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let model: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'model' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n model = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return model;\n}\n\n/**\n * Extract included prompts from a prompt's 'includes' array or structured prompt.\n */\nexport function extractPromptIncludes(sourceCode: string): string[] {\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const includes: string[] = [];\n\n function extractFromStructuredPrompt(arr: ts.ArrayLiteralExpression): void {\n for (const element of arr.elements) {\n if (ts.isObjectLiteralExpression(element)) {\n // Look for { type: 'include', name: '...' }\n let hasIncludeType = false;\n let includeName: string | null = null;\n\n for (const prop of element.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'type' &&\n ts.isStringLiteral(prop.initializer) &&\n prop.initializer.text === 'include'\n ) {\n hasIncludeType = true;\n }\n if (\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n includeName = prop.initializer.text;\n }\n }\n }\n\n if (hasIncludeType && includeName && !includes.includes(includeName)) {\n includes.push(includeName);\n }\n }\n }\n }\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n // Check 'prompt' property for structured prompts\n if (\n prop.name.text === 'prompt' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n extractFromStructuredPrompt(prop.initializer);\n }\n\n // Also check 'includes' array if present\n if (\n prop.name.text === 'includes' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element) && !includes.includes(element.text)) {\n includes.push(element.text);\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return includes;\n}\n\n/**\n * Extract the prompt name from an agent's sideA or sideB configuration.\n */\nexport function extractAgentPrompts(sourceCode: string): { sideA?: string; sideB?: string } {\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: { sideA?: string; sideB?: string } = {};\n\n function extractPromptFromSide(obj: ts.ObjectLiteralExpression): string | undefined {\n for (const prop of obj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'prompt' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n return prop.initializer.text;\n }\n }\n return undefined;\n }\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'sideA' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideA = extractPromptFromSide(prop.initializer);\n }\n if (\n prop.name.text === 'sideB' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideB = extractPromptFromSide(prop.initializer);\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the 'description' property from a defineAgent call.\n */\nexport function extractAgentDescription(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let description: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'description' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n description = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return description;\n}\n\n/**\n * Extract the 'name' property value from a define* call.\n */\nexport function extractDefinitionName(sourceCode: string): string | null {\n const sourceFile = ts.createSourceFile(\n 'def.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let name: string | null = null;\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'defineTool' ||\n node.expression.text === 'definePrompt' ||\n node.expression.text === 'defineAgent' ||\n node.expression.text === 'defineModel' ||\n node.expression.text === 'defineHook') &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n name = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return name;\n}\n\n/**\n * Extract the fallbacks array from a defineModel call.\n */\nexport function extractModelFallbacks(sourceCode: string): string[] {\n const sourceFile = ts.createSourceFile(\n 'model.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const fallbacks: string[] = [];\n\n function visit(node: ts.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineModel' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'fallbacks' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n fallbacks.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return fallbacks;\n}\n\n// Note: injectPackageSignature was removed as part of the packed agent architecture redesign.\n// Packed packages now use a single index.ts with inline definitions instead of individual\n// transformed files with __package metadata.\n\n/**\n * Transform a bundled JavaScript file back to TypeScript export format.\n *\n * Converts bundled format:\n * ```javascript\n * // Bundled from: agents/agents/test.ts\n * // Local dependencies have been inlined\n *\n * import { defineAgent } from '@standardagents/builder';\n *\n * var test_agent = defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n *\n * export { test_agent as default };\n * ```\n *\n * To TypeScript export format:\n * ```typescript\n * import { defineAgent } from '@standardagents/builder';\n *\n * export default defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n * ```\n *\n * Uses TypeScript AST parsing + magic-string for safe, precise transformations.\n *\n * @param code - Bundled JavaScript source code\n * @returns Transformed TypeScript source code\n */\nexport function transformBundledJs(code: string): string {\n const s = new MagicString(code);\n const sourceFile = ts.createSourceFile(\n 'file.js',\n code,\n ts.ScriptTarget.ESNext,\n true\n );\n\n // Find the first import statement to determine where real code starts\n let firstImportStart = -1;\n\n // Track what to remove and transform\n let varStatementInfo: {\n start: number;\n varNameEnd: number;\n fullStart: number;\n } | null = null;\n\n function visit(node: ts.Node): void {\n // Find first import statement\n if (ts.isImportDeclaration(node) && firstImportStart === -1) {\n firstImportStart = node.getStart();\n }\n\n // Find: var NAME = defineX({...})\n if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations[0];\n if (\n decl &&\n decl.initializer &&\n ts.isCallExpression(decl.initializer)\n ) {\n const callExpr = decl.initializer.expression;\n if (\n ts.isIdentifier(callExpr) &&\n (callExpr.text === 'defineAgent' ||\n callExpr.text === 'definePrompt' ||\n callExpr.text === 'defineTool' ||\n callExpr.text === 'defineModel' ||\n callExpr.text === 'defineHook')\n ) {\n varStatementInfo = {\n fullStart: node.getFullStart(),\n start: node.getStart(),\n varNameEnd: decl.initializer.getStart(),\n };\n\n // Replace \"var NAME = \" with \"export default \"\n s.overwrite(varStatementInfo.start, varStatementInfo.varNameEnd, 'export default ');\n }\n }\n }\n\n // Find and remove: export { NAME as default };\n if (ts.isExportDeclaration(node)) {\n const exportClause = node.exportClause;\n if (exportClause && ts.isNamedExports(exportClause)) {\n for (const element of exportClause.elements) {\n // Check if this is \"NAME as default\"\n if (\n element.propertyName &&\n ts.isIdentifier(element.name) &&\n element.name.text === 'default'\n ) {\n // Remove the entire export statement\n s.remove(node.getFullStart(), node.getEnd());\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n // Remove leading comments before the first import\n if (firstImportStart > 0) {\n s.remove(0, firstImportStart);\n }\n\n return s.toString().trim() + '\\n';\n}\n\n/**\n * Metadata to inject into an agent definition.\n */\nexport interface AgentMetadata {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n}\n\n/**\n * Inject metadata properties into a defineAgent call.\n *\n * This function finds the defineAgent({ ... }) call in the TypeScript code\n * and inserts metadata properties (packageName, version, author, license)\n * after the name property.\n *\n * @param tsCode - TypeScript source code containing a defineAgent call\n * @param metadata - Metadata to inject\n * @returns Modified TypeScript code with metadata injected\n *\n * @example\n * ```typescript\n * const code = `export default defineAgent({\n * name: \"test_agent\",\n * type: \"ai_human\",\n * ...\n * });`;\n *\n * const result = injectAgentMetadata(code, {\n * packageName: 'standardagent-test',\n * version: '1.2.3',\n * author: 'Test Co',\n * license: 'MIT'\n * });\n *\n * // Result:\n * // export default defineAgent({\n * // name: \"test_agent\",\n * // packageName: \"standardagent-test\",\n * // version: \"1.2.3\",\n * // author: \"Test Co\",\n * // license: \"MIT\",\n * // type: \"ai_human\",\n * // ...\n * // });\n * ```\n */\nexport function injectAgentMetadata(tsCode: string, metadata: AgentMetadata): string {\n // Skip if no metadata to inject\n if (!metadata.packageName && !metadata.version && !metadata.author && !metadata.license) {\n return tsCode;\n }\n\n const s = new MagicString(tsCode);\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n tsCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n function visit(node: ts.Node): void {\n // Look for defineAgent({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'name' property to insert after it\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name'\n ) {\n // Build the metadata properties string\n const metadataProps: string[] = [];\n\n if (metadata.packageName) {\n metadataProps.push(`packageName: ${JSON.stringify(metadata.packageName)}`);\n }\n if (metadata.version) {\n metadataProps.push(`version: ${JSON.stringify(metadata.version)}`);\n }\n if (metadata.author) {\n metadataProps.push(`author: ${JSON.stringify(metadata.author)}`);\n }\n if (metadata.license) {\n metadataProps.push(`license: ${JSON.stringify(metadata.license)}`);\n }\n\n if (metadataProps.length > 0) {\n // Get the position right after the name property\n const propEnd = prop.getEnd();\n const afterProp = tsCode.substring(propEnd, propEnd + 1);\n\n // Insert metadata properties after the name property\n // If there's already a comma after name, insert after the comma\n // Otherwise, add a comma and then the metadata\n if (afterProp === ',') {\n // Insert after the comma (propEnd + 1)\n const insertText = `\\n ${metadataProps.join(',\\n ')},`;\n s.appendRight(propEnd + 1, insertText);\n } else {\n // No comma after name, add one along with metadata\n const insertText = `,\\n ${metadataProps.join(',\\n ')}`;\n s.appendRight(propEnd, insertText);\n }\n }\n\n return; // Found and processed, no need to continue\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n return s.toString();\n}\n","/**\n * Packing service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze agents and their dependencies\n * - Pack agents with all constituents using Rollup bundling\n * - Generate npm-ready package structures with TypeScript definitions\n *\n * The new Rollup-based approach:\n * - Preserves imports, constants, and helper functions\n * - Bundles local dependencies inline\n * - Keeps npm packages as external dependencies\n * - Creates separate files per constituent with re-exports in index.ts\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n// Rollup imports are done dynamically in bundleFile() to avoid loading\n// Node.js-only dependencies during Vite dev server startup\nimport type { Plugin, RollupOptions } from 'rollup';\nimport type {\n PackingAnalysis,\n ConstituentItem,\n PackingOptions,\n PackingResult,\n PackedMeta,\n ItemSelection,\n PackageMetadata,\n} from './types.js';\nimport { MetadataService } from './metadata-service.js';\nimport {\n extractToolUses,\n extractPromptTools,\n extractPromptModel,\n extractPromptIncludes,\n extractAgentPrompts,\n extractDefinitionName,\n extractModelFallbacks,\n extractAgentDescription,\n} from './ast-utils.js';\n\n/**\n * Service for packing agents with their dependencies.\n */\nexport class PackingService {\n /**\n * Resolve the version of an npm package from node_modules.\n *\n * @param pkgName - Package name (e.g., '@standardagents/spec')\n * @param rootDir - Root directory of the project\n * @returns Version specifier (e.g., '^1.2.3') or '*' if not found\n */\n protected resolvePackageVersion(pkgName: string, rootDir: string): string {\n const pkgJsonPath = path.join(rootDir, 'node_modules', pkgName, 'package.json');\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n return `^${pkgJson.version}`;\n } catch {\n // Fallback - use wildcard if we can't resolve\n return '*';\n }\n }\n /**\n * Analyze an agent to discover all its constituents.\n *\n * This performs static analysis on the agent definition and all\n * referenced prompts, tools, models, and hooks.\n *\n * @param agentName - Name of the agent to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with all discovered constituents\n */\n async analyzeAgent(agentName: string, rootDir: string): Promise<PackingAnalysis> {\n const agentsDir = path.join(rootDir, 'agents');\n const analysis: PackingAnalysis = {\n agent: agentName,\n primaryPrompt: '',\n constituents: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n agents: [],\n },\n shared: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n },\n warnings: [],\n errors: [],\n };\n\n // Load the agent file\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.errors.push(`Agent file not found: ${agentName}`);\n return analysis;\n }\n\n // Add agent to constituents\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n });\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt (primary)\n if (agentPrompts.sideA) {\n analysis.primaryPrompt = agentPrompts.sideA;\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Check for shared items (used by other agents)\n await this.checkSharedItems(agentsDir, analysis);\n\n return analysis;\n }\n\n /**\n * Generate a README for an analyzed agent.\n *\n * This is used during analysis to provide a pre-populated README\n * that can be edited in the PackModal before packing.\n *\n * @param analysis - The packing analysis result\n * @param rootDir - Root directory of the project\n * @returns Object with generatedReadme and agentDescription\n */\n generateReadmeForAnalysis(\n analysis: PackingAnalysis,\n rootDir: string\n ): { generatedReadme: string; agentDescription?: string } {\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n\n // Try to extract description from agent file\n let agentDescription: string | undefined;\n const agentItem = analysis.constituents.agents.find(a => a.name === analysis.agent);\n if (agentItem?.filePath) {\n try {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = extractAgentDescription(agentSource) || undefined;\n } catch {\n // Ignore errors reading agent file\n }\n }\n\n // Get suggested package name\n const suggestedPackageName = metadataService.suggestPackageName(undefined, analysis.agent);\n\n // Generate the README\n const generatedReadme = this.generateReadme(\n suggestedPackageName,\n analysis.agent,\n '1.0.0', // Default version, will be replaced in modal\n 'MIT', // Default license\n agentDescription\n );\n\n return { generatedReadme, agentDescription };\n }\n\n /**\n * Recursively analyze a prompt and its dependencies.\n */\n private async analyzePrompt(\n promptName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) {\n analysis.warnings.push(`Prompt file not found: ${promptName}`);\n return;\n }\n\n const thisKey = `prompt:${promptName}`;\n\n // Add prompt to constituents (allow duplicates with different parentKey for tree display)\n // Use name+parentKey to avoid exact duplicates\n if (!analysis.constituents.prompts.some(p => p.name === promptName && p.parentKey === parentKey)) {\n analysis.constituents.prompts.push({\n name: promptName,\n filePath: promptFilePath,\n discoveredVia: 'agent-prompt',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`prompt:${promptName}`)) {\n return;\n }\n visited.add(`prompt:${promptName}`);\n\n // Read and analyze the prompt file\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n // Extract and analyze model\n const modelName = extractPromptModel(promptSource);\n if (modelName) {\n await this.analyzeModel(modelName, agentsDir, analysis, visited, thisKey);\n }\n\n // Extract and analyze tools\n const { tools: toolNames } = extractPromptTools(promptSource);\n for (const toolName of toolNames) {\n await this.analyzeTool(toolName, agentsDir, analysis, visited, 'prompt-tools', thisKey);\n }\n\n // Extract and analyze included prompts\n const includedPrompts = extractPromptIncludes(promptSource);\n for (const includedPrompt of includedPrompts) {\n const item = analysis.constituents.prompts.find(p => p.name === includedPrompt);\n if (item) {\n if (item.discoveredVia === 'agent-prompt') {\n item.discoveredVia = 'prompt-includes';\n }\n }\n await this.analyzePrompt(includedPrompt, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a tool and its dependencies.\n * This also handles prompts-as-tools and agents-as-tools (handoffs).\n */\n private async analyzeTool(\n toolName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n discoveredVia: ConstituentItem['discoveredVia'],\n parentKey?: string\n ): Promise<void> {\n const thisKey = `tool:${toolName}`;\n\n // Check if it's a prompt being used as a tool\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), toolName);\n if (promptFilePath) {\n // It's a prompt, analyze it (with parent tracking)\n await this.analyzePrompt(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n // Check if it's an agent being used as a tool (handoff)\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), toolName);\n if (agentFilePath) {\n // It's an agent handoff, analyze it recursively\n await this.analyzeNestedAgent(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n const toolFilePath = this.findFile(path.join(agentsDir, 'tools'), toolName);\n if (!toolFilePath) {\n analysis.warnings.push(`Tool file not found: ${toolName}`);\n return;\n }\n\n // Add tool to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.tools.some(t => t.name === toolName && t.parentKey === parentKey)) {\n analysis.constituents.tools.push({\n name: toolName,\n filePath: toolFilePath,\n discoveredVia,\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`tool:${toolName}`)) {\n return;\n }\n visited.add(`tool:${toolName}`);\n\n // Read and analyze the tool file\n const toolSource = fs.readFileSync(toolFilePath, 'utf-8');\n\n // Extract uses array - this is the definitive list of tool dependencies\n // Since tools must declare their dependencies in `uses`, we rely on this\n // rather than trying to detect queueTool/invokeTool calls via AST\n const { uses } = extractToolUses(toolSource);\n for (const usedItem of uses) {\n // Determine if it's a tool, prompt, or agent\n await this.analyzeTool(usedItem, agentsDir, analysis, visited, 'uses', thisKey);\n }\n }\n\n /**\n * Analyze a nested agent (used as a handoff target).\n */\n private async analyzeNestedAgent(\n agentName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.warnings.push(`Agent file not found: ${agentName}`);\n return;\n }\n\n const thisKey = `agent:${agentName}`;\n\n // Add agent to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.agents.some(a => a.name === agentName && a.parentKey === parentKey)) {\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'uses',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`agent:${agentName}`)) {\n return;\n }\n visited.add(`agent:${agentName}`);\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt\n if (agentPrompts.sideA) {\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, visited, thisKey);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a model and its fallbacks.\n */\n private async analyzeModel(\n modelName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const modelFilePath = this.findFile(path.join(agentsDir, 'models'), modelName);\n if (!modelFilePath) {\n analysis.warnings.push(`Model file not found: ${modelName}`);\n return;\n }\n\n const thisKey = `model:${modelName}`;\n\n // Add model to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.models.some(m => m.name === modelName && m.parentKey === parentKey)) {\n analysis.constituents.models.push({\n name: modelName,\n filePath: modelFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`model:${modelName}`)) {\n return;\n }\n visited.add(`model:${modelName}`);\n\n // Read and analyze the model file for fallbacks\n const modelSource = fs.readFileSync(modelFilePath, 'utf-8');\n const fallbacks = extractModelFallbacks(modelSource);\n\n // Recursively analyze fallback models\n for (const fallbackName of fallbacks) {\n await this.analyzeModel(fallbackName, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Check which items are shared with other agents.\n */\n private async checkSharedItems(\n agentsDir: string,\n analysis: PackingAnalysis\n ): Promise<void> {\n const agentsPath = path.join(agentsDir, 'agents');\n if (!fs.existsSync(agentsPath)) return;\n\n const agentFiles = fs.readdirSync(agentsPath).filter(f => f.endsWith('.ts'));\n\n for (const agentFile of agentFiles) {\n const otherAgentName = agentFile.replace('.ts', '');\n if (otherAgentName === analysis.agent) continue;\n\n // Analyze the other agent to see what it uses\n const otherAnalysis = await this.analyzeAgentLight(otherAgentName, path.dirname(agentsDir));\n\n // Check prompts\n for (const prompt of analysis.constituents.prompts) {\n if (otherAnalysis.prompts.includes(prompt.name)) {\n prompt.sharedWith.push(otherAgentName);\n if (!analysis.shared.prompts.includes(prompt.name)) {\n analysis.shared.prompts.push(prompt.name);\n }\n }\n }\n\n // Check tools\n for (const tool of analysis.constituents.tools) {\n if (otherAnalysis.tools.includes(tool.name)) {\n tool.sharedWith.push(otherAgentName);\n if (!analysis.shared.tools.includes(tool.name)) {\n analysis.shared.tools.push(tool.name);\n }\n }\n }\n\n // Check models\n for (const model of analysis.constituents.models) {\n if (otherAnalysis.models.includes(model.name)) {\n model.sharedWith.push(otherAgentName);\n if (!analysis.shared.models.includes(model.name)) {\n analysis.shared.models.push(model.name);\n }\n }\n }\n }\n }\n\n /**\n * Light analysis of an agent - just get the names of used items.\n */\n private async analyzeAgentLight(\n agentName: string,\n rootDir: string\n ): Promise<{ prompts: string[]; tools: string[]; models: string[] }> {\n const result = { prompts: [] as string[], tools: [] as string[], models: [] as string[] };\n const agentsDir = path.join(rootDir, 'agents');\n const visited = new Set<string>();\n\n const agentFilePath = this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) return result;\n\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = extractAgentPrompts(agentSource);\n\n const analyzePromptLight = (promptName: string) => {\n if (visited.has(promptName)) return;\n visited.add(promptName);\n\n result.prompts.push(promptName);\n\n const promptFilePath = this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) return;\n\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n const modelName = extractPromptModel(promptSource);\n if (modelName && !result.models.includes(modelName)) {\n result.models.push(modelName);\n }\n\n const { tools } = extractPromptTools(promptSource);\n for (const tool of tools) {\n if (!result.tools.includes(tool)) {\n result.tools.push(tool);\n }\n }\n\n const includes = extractPromptIncludes(promptSource);\n for (const inc of includes) {\n analyzePromptLight(inc);\n }\n };\n\n if (agentPrompts.sideA) analyzePromptLight(agentPrompts.sideA);\n if (agentPrompts.sideB) analyzePromptLight(agentPrompts.sideB);\n\n return result;\n }\n\n /**\n * Pack an agent with all its dependencies using Rollup bundling.\n *\n * The packing format creates:\n * - dist/{type}/{name}.js - Individual bundled files per constituent\n * - dist/index.js - Re-exports and lazy loaders\n * - dist/index.d.ts - TypeScript type definitions\n * - package.json - With standardagent field and dependencies\n * - tsconfig.json - For building\n *\n * @param options - Packing options\n * @returns Packing result\n */\n async pack(options: PackingOptions): Promise<PackingResult> {\n const {\n agentName,\n rootDir,\n outputDir,\n version = '1.0.0',\n removeOriginals = false,\n packageId = `standardagent-${agentName.replace(/_/g, '-')}`,\n packageName,\n license,\n licenseOwner,\n itemSelections,\n readme,\n } = options;\n\n // Use packageName if provided, otherwise fall back to packageId\n const finalPackageName = packageName || packageId;\n\n const packedAt = Date.now();\n const meta: PackedMeta = {\n packageId,\n version,\n entryAgents: [agentName],\n packedAt,\n };\n\n const result: PackingResult = {\n success: false,\n packageId,\n outputPath: '',\n meta,\n filesCreated: [],\n warnings: [],\n };\n\n try {\n // Analyze the agent\n const analysis = await this.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n result.warnings = analysis.warnings;\n return result;\n }\n\n result.warnings = analysis.warnings;\n\n // Create output directory structure\n const pkgOutputDir = path.join(outputDir, packageId);\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'agents'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'prompts'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'tools'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'models'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'hooks'), { recursive: true });\n\n // Collect all items to bundle (deduplicate by name since constituents may have\n // multiple entries with different parentKeys for tree display purposes)\n const seenItems = new Set<string>();\n const allItems: Array<ConstituentItem & { type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook' }> = [];\n\n for (const a of analysis.constituents.agents) {\n const key = `agent:${a.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...a, type: 'agent' });\n }\n }\n for (const p of analysis.constituents.prompts) {\n const key = `prompt:${p.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...p, type: 'prompt' });\n }\n }\n for (const t of analysis.constituents.tools) {\n const key = `tool:${t.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...t, type: 'tool' });\n }\n }\n for (const m of analysis.constituents.models) {\n const key = `model:${m.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...m, type: 'model' });\n }\n }\n for (const h of analysis.constituents.hooks) {\n const key = `hook:${h.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...h, type: 'hook' });\n }\n }\n\n // Track external dependencies\n const externalDeps = new Map<string, string>();\n\n // Bundle each constituent file with Rollup\n for (const item of allItems) {\n // Input path for bundleFile (it will output .js)\n const outputPath = path.join(\n pkgOutputDir,\n 'dist',\n this.getTypeDir(item.type),\n `${item.name}.js`\n );\n\n const deps = await this.bundleFile(item.filePath, outputPath, rootDir);\n\n // Collect external dependencies\n for (const [depName, depVersion] of deps) {\n if (!externalDeps.has(depName)) {\n externalDeps.set(depName, depVersion);\n }\n }\n\n result.filesCreated.push(outputPath);\n }\n\n // Generate dist/index.js with re-exports\n const indexJs = this.generateReExportIndex(analysis, meta);\n const indexJsPath = path.join(pkgOutputDir, 'dist', 'index.js');\n fs.writeFileSync(indexJsPath, indexJs);\n result.filesCreated.push(indexJsPath);\n\n // Generate dist/index.d.ts with type definitions\n const indexDts = this.generateIndexDts(analysis);\n const indexDtsPath = path.join(pkgOutputDir, 'dist', 'index.d.ts');\n fs.writeFileSync(indexDtsPath, indexDts);\n result.filesCreated.push(indexDtsPath);\n\n // Generate package.json with collected dependencies\n const pkgJson = this.generatePackageJson(\n finalPackageName,\n version,\n agentName,\n externalDeps,\n rootDir,\n license,\n licenseOwner\n );\n const pkgJsonPath = path.join(pkgOutputDir, 'package.json');\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n result.filesCreated.push(pkgJsonPath);\n\n // Generate LICENSE file if license is specified\n if (license) {\n const licenseContent = this.generateLicenseFile(license, licenseOwner);\n const licensePath = path.join(pkgOutputDir, 'LICENSE');\n fs.writeFileSync(licensePath, licenseContent);\n result.filesCreated.push(licensePath);\n }\n\n // Generate README.md\n // If custom readme provided, use it; otherwise generate from agent description\n let readmeContent = readme;\n if (!readmeContent) {\n // Try to extract description from agent file\n const agentItem = analysis.constituents.agents.find(a => a.name === agentName);\n let agentDescription: string | undefined;\n if (agentItem?.filePath) {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = extractAgentDescription(agentSource) || undefined;\n }\n readmeContent = this.generateReadme(\n finalPackageName,\n agentName,\n version,\n license,\n agentDescription\n );\n }\n const readmePath = path.join(pkgOutputDir, 'README.md');\n fs.writeFileSync(readmePath, readmeContent);\n result.filesCreated.push(readmePath);\n\n // Handle original files based on user selection or removeOriginals flag\n if (removeOriginals || itemSelections) {\n result.filesRemoved = [];\n\n for (const item of allItems) {\n // Check if user specified extraction for this item\n const selection = itemSelections?.find(s => s.name === item.name && s.type === item.type);\n const shouldRemove = selection\n ? selection.mode === 'extract'\n : (removeOriginals && item.sharedWith.length === 0);\n\n if (shouldRemove && fs.existsSync(item.filePath)) {\n fs.unlinkSync(item.filePath);\n result.filesRemoved.push(item.filePath);\n }\n }\n }\n\n // Save metadata for future pack/unpack cycles\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n const metadata: PackageMetadata = {\n packageName: finalPackageName,\n version,\n license: license || '',\n licenseOwner: licenseOwner || '',\n lastPackedAt: new Date().toISOString(),\n };\n await metadataService.write(agentName, metadata);\n\n result.success = true;\n result.outputPath = pkgOutputDir;\n result.meta = meta;\n\n return result;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n return result;\n }\n }\n\n /**\n * Bundle a single source file with its local dependencies using Rollup.\n *\n * Local files (from the same agents/ directory) are inlined.\n * npm packages are kept as external dependencies.\n * Output is bundled JavaScript with all local deps inlined.\n *\n * @returns Map of external dependencies (name -> version specifier)\n */\n protected async bundleFile(\n inputPath: string,\n outputPath: string,\n rootDir: string\n ): Promise<Map<string, string>> {\n // Dynamic imports to avoid loading Node.js-only dependencies at module init time\n const { rollup } = await import('rollup');\n const nodeResolve = (await import('@rollup/plugin-node-resolve')).default;\n const commonjs = (await import('@rollup/plugin-commonjs')).default;\n const esbuild = (await import('rollup-plugin-esbuild')).default;\n\n const externalDeps = new Map<string, string>();\n const agentsDir = path.join(rootDir, 'agents');\n // Capture method reference for use inside Rollup plugin\n const resolveVersion = this.resolvePackageVersion.bind(this);\n\n // Create a Rollup plugin to track and externalize non-local imports\n const trackExternalsPlugin: Plugin = {\n name: 'track-externals',\n resolveId(source, importer) {\n // Entry point (no importer) - let Rollup handle it\n if (!importer) {\n return null;\n }\n\n // Handle relative imports - these might be local agent files\n if (source.startsWith('./') || source.startsWith('../')) {\n const resolved = path.resolve(path.dirname(importer), source);\n // Try to find the file with .ts extension\n let tsResolved = resolved;\n if (!resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n if (fs.existsSync(`${resolved}.ts`)) {\n tsResolved = `${resolved}.ts`;\n } else if (fs.existsSync(`${resolved}.js`)) {\n tsResolved = `${resolved}.js`;\n } else if (fs.existsSync(`${resolved}/index.ts`)) {\n tsResolved = `${resolved}/index.ts`;\n }\n }\n // If it's within the agents directory, bundle it\n if (tsResolved.includes(agentsDir) || resolved.includes(agentsDir)) {\n return null; // Let Rollup resolve it normally (will be bundled)\n }\n return null;\n }\n\n // Absolute paths within agents dir - bundle them\n if (source.startsWith('/') && source.includes(agentsDir)) {\n return null;\n }\n\n // All non-relative imports are external (npm packages)\n // Track the dependency\n const pkgName = source.startsWith('@')\n ? source.split('/').slice(0, 2).join('/')\n : source.split('/')[0];\n\n // Determine version specifier based on package\n if (pkgName.startsWith('@standardagents/')) {\n externalDeps.set(pkgName, resolveVersion(pkgName, rootDir));\n } else if (pkgName === 'zod') {\n externalDeps.set(pkgName, '^4.0.0');\n } else {\n externalDeps.set(pkgName, '*');\n }\n\n return { id: source, external: true };\n },\n };\n\n const rollupOptions: RollupOptions = {\n input: inputPath,\n plugins: [\n trackExternalsPlugin,\n nodeResolve({\n extensions: ['.ts', '.js'],\n }),\n commonjs(),\n esbuild({\n target: 'es2022',\n sourceMap: false,\n }),\n ],\n onwarn(warning, warn) {\n // Suppress certain warnings\n if (warning.code === 'UNRESOLVED_IMPORT') return;\n if (warning.code === 'CIRCULAR_DEPENDENCY') return;\n warn(warning);\n },\n };\n\n const bundle = await rollup(rollupOptions);\n\n try {\n const { output } = await bundle.generate({\n format: 'esm',\n exports: 'named',\n });\n\n // The output is bundled JS with all local dependencies inlined\n // and external npm packages preserved as imports\n const bundledCode = output[0].code;\n\n // Add a header comment showing the original source\n const header = `// Bundled from: ${path.relative(rootDir, inputPath)}\\n// Local dependencies have been inlined\\n\\n`;\n\n // Write the bundled JS output\n fs.writeFileSync(outputPath, header + bundledCode);\n\n await bundle.close();\n } catch (error) {\n await bundle.close();\n throw error;\n }\n\n return externalDeps;\n }\n\n /**\n * Get the directory name for a constituent type.\n */\n private getTypeDir(type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook'): string {\n switch (type) {\n case 'agent': return 'agents';\n case 'prompt': return 'prompts';\n case 'tool': return 'tools';\n case 'model': return 'models';\n case 'hook': return 'hooks';\n }\n }\n\n /**\n * Deduplicate constituents by name (for packing, not for tree display).\n */\n private deduplicateConstituents(analysis: PackingAnalysis): {\n agents: ConstituentItem[];\n prompts: ConstituentItem[];\n tools: ConstituentItem[];\n models: ConstituentItem[];\n hooks: ConstituentItem[];\n } {\n const dedupe = <T extends { name: string }>(items: T[]): T[] => {\n const seen = new Set<string>();\n return items.filter(item => {\n if (seen.has(item.name)) return false;\n seen.add(item.name);\n return true;\n });\n };\n\n return {\n agents: dedupe(analysis.constituents.agents),\n prompts: dedupe(analysis.constituents.prompts),\n tools: dedupe(analysis.constituents.tools),\n models: dedupe(analysis.constituents.models),\n hooks: dedupe(analysis.constituents.hooks),\n };\n }\n\n /**\n * Check if a name is a valid JavaScript/TypeScript identifier.\n */\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n\n /**\n * Quote a property/export name if it contains non-identifier characters.\n * JavaScript identifiers must start with a letter, underscore, or dollar sign,\n * and contain only letters, digits, underscores, or dollar signs.\n */\n private quoteName(name: string): string {\n if (this.isValidIdentifier(name)) {\n return name;\n }\n // Quote names with special characters (like hyphens)\n return `'${name}'`;\n }\n\n /**\n * Generate the dist/index.js file with re-exports and lazy loaders.\n */\n private generateReExportIndex(analysis: PackingAnalysis, meta: PackedMeta): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n '// Packed agent: ' + analysis.agent,\n '// Generated by @standardagents/builder',\n '',\n ];\n\n // Generate direct re-exports\n for (const agent of constituents.agents) {\n lines.push(`export { default as ${this.quoteName(agent.name)} } from './agents/${agent.name}.js';`);\n }\n for (const prompt of constituents.prompts) {\n lines.push(`export { default as ${this.quoteName(prompt.name)} } from './prompts/${prompt.name}.js';`);\n }\n for (const tool of constituents.tools) {\n lines.push(`export { default as ${this.quoteName(tool.name)} } from './tools/${tool.name}.js';`);\n }\n for (const model of constituents.models) {\n lines.push(`export { default as ${this.quoteName(model.name)} } from './models/${model.name}.js';`);\n }\n for (const hook of constituents.hooks) {\n lines.push(`export { default as ${this.quoteName(hook.name)} } from './hooks/${hook.name}.js';`);\n }\n\n lines.push('');\n\n // Generate agents registry with lazy loaders\n lines.push('// Registry exports for lazy loading');\n lines.push('export const agents = {');\n for (const agent of constituents.agents) {\n lines.push(` ${this.quoteName(agent.name)}: async () => (await import('./agents/${agent.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts registry\n lines.push('export const prompts = {');\n for (const prompt of constituents.prompts) {\n lines.push(` ${this.quoteName(prompt.name)}: async () => (await import('./prompts/${prompt.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools registry\n lines.push('export const tools = {');\n for (const tool of constituents.tools) {\n lines.push(` ${this.quoteName(tool.name)}: async () => (await import('./tools/${tool.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models registry\n lines.push('export const models = {');\n for (const model of constituents.models) {\n lines.push(` ${this.quoteName(model.name)}: async () => (await import('./models/${model.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks registry\n lines.push('export const hooks = {');\n for (const hook of constituents.hooks) {\n lines.push(` ${this.quoteName(hook.name)}: async () => (await import('./hooks/${hook.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate __meta export\n lines.push('export const __meta = ' + JSON.stringify(meta, null, 2) + ';');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the dist/index.d.ts file with type definitions.\n */\n private generateIndexDts(analysis: PackingAnalysis): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n 'import type {',\n ' AgentDefinition,',\n ' PromptDefinition,',\n ' ToolDefinition,',\n ' ModelDefinition,',\n ' PackedMeta,',\n \"} from '@standardagents/spec';\",\n '',\n 'type DefinitionLoader<T> = () => Promise<T>;',\n '',\n ];\n\n // Generate direct exports (only for valid identifiers)\n for (const agent of constituents.agents) {\n if (this.isValidIdentifier(agent.name)) {\n lines.push(`export declare const ${agent.name}: AgentDefinition;`);\n }\n }\n for (const prompt of constituents.prompts) {\n if (this.isValidIdentifier(prompt.name)) {\n lines.push(`export declare const ${prompt.name}: PromptDefinition;`);\n }\n }\n for (const tool of constituents.tools) {\n if (this.isValidIdentifier(tool.name)) {\n lines.push(`export declare const ${tool.name}: ToolDefinition<unknown, any, any>;`);\n }\n }\n for (const model of constituents.models) {\n if (this.isValidIdentifier(model.name)) {\n lines.push(`export declare const ${model.name}: ModelDefinition;`);\n }\n }\n for (const hook of constituents.hooks) {\n if (this.isValidIdentifier(hook.name)) {\n lines.push(`export declare const ${hook.name}: unknown;`);\n }\n }\n lines.push('');\n\n // Generate agents type\n lines.push('export declare const agents: {');\n for (const agent of constituents.agents) {\n lines.push(` readonly ${this.quoteName(agent.name)}: DefinitionLoader<AgentDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts type\n lines.push('export declare const prompts: {');\n for (const prompt of constituents.prompts) {\n lines.push(` readonly ${this.quoteName(prompt.name)}: DefinitionLoader<PromptDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools type\n lines.push('export declare const tools: {');\n for (const tool of constituents.tools) {\n lines.push(` readonly ${this.quoteName(tool.name)}: DefinitionLoader<ToolDefinition<unknown, any, any>>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models type\n lines.push('export declare const models: {');\n for (const model of constituents.models) {\n lines.push(` readonly ${this.quoteName(model.name)}: DefinitionLoader<ModelDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks type\n lines.push('export declare const hooks: {');\n for (const hook of constituents.hooks) {\n lines.push(` readonly ${this.quoteName(hook.name)}: DefinitionLoader<unknown>;`);\n }\n lines.push('};');\n lines.push('');\n\n lines.push('export declare const __meta: PackedMeta;');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the package.json file with dependencies.\n */\n private generatePackageJson(\n packageName: string,\n version: string,\n agentName: string,\n externalDeps: Map<string, string>,\n rootDir: string,\n license?: string,\n licenseOwner?: string\n ): Record<string, unknown> {\n // Build dependencies object, ensuring @standardagents/spec is included\n const dependencies: Record<string, string> = {\n '@standardagents/spec': this.resolvePackageVersion('@standardagents/spec', rootDir),\n };\n\n for (const [name, ver] of externalDeps) {\n dependencies[name] = ver;\n }\n\n const pkgJson: Record<string, unknown> = {\n name: packageName,\n version,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n },\n keywords: ['standardagent'],\n standardagent: {\n entryAgents: [agentName],\n },\n files: license ? ['dist', 'LICENSE', 'README.md'] : ['dist', 'README.md'],\n dependencies,\n };\n\n // Add license if specified\n if (license) {\n pkgJson.license = license;\n }\n\n // Add author if license owner specified\n if (licenseOwner) {\n pkgJson.author = licenseOwner;\n }\n\n return pkgJson;\n }\n\n /**\n * Generate LICENSE file content for common licenses.\n */\n private generateLicenseFile(license: string, owner?: string): string {\n const year = new Date().getFullYear();\n const copyrightHolder = owner || '[COPYRIGHT HOLDER]';\n\n switch (license) {\n case 'MIT':\n return `MIT License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n\n case 'Apache-2.0':\n return ` Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n Copyright ${year} ${copyrightHolder}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n`;\n\n case 'ISC':\n return `ISC License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n`;\n\n case 'GPL-3.0':\n return `GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (c) ${year} ${copyrightHolder}\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>.\n`;\n\n case 'BSD-3-Clause':\n return `BSD 3-Clause License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n`;\n\n case 'Unlicensed':\n case 'UNLICENSED':\n return `Copyright (c) ${year} ${copyrightHolder}\n\nAll Rights Reserved.\n\nThis software and associated documentation files (the \"Software\") are\nproprietary and confidential. Unauthorized copying, modification, distribution,\nor use of the Software, via any medium, is strictly prohibited.\n`;\n\n default:\n return `${license}\n\nCopyright (c) ${year} ${copyrightHolder}\n`;\n }\n }\n\n /**\n * Get information about a packed package.\n *\n * Reads the package.json and README.md from a packed package directory.\n * Used by the packed-info API endpoint to show package details before publishing.\n *\n * @param packageId - The package directory name (e.g., 'standardagent-my-agent')\n * @param rootDir - Root directory of the project\n * @returns Package info or null if not found\n */\n getPackedInfo(\n packageId: string,\n rootDir: string\n ): {\n packageName: string;\n version: string;\n license?: string;\n author?: string;\n entryAgents: string[];\n readme?: string;\n } | null {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Try to find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n // Try alternate naming conventions\n if (!fs.existsSync(packedDir)) {\n return null;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n return null;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Read package.json\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Read README.md if it exists\n let readme: string | undefined;\n const readmePath = path.join(packageDir, 'README.md');\n if (fs.existsSync(readmePath)) {\n readme = fs.readFileSync(readmePath, 'utf-8');\n }\n\n return {\n packageName: pkgJson.name,\n version: pkgJson.version,\n license: pkgJson.license,\n author: pkgJson.author,\n entryAgents: pkgJson.standardagent?.entryAgents || [],\n readme,\n };\n }\n\n /**\n * List all packed packages in the workspace.\n *\n * @param rootDir - Root directory of the project\n * @returns Array of package directory names\n */\n listPackedPackages(rootDir: string): string[] {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n if (!fs.existsSync(packedDir)) {\n return [];\n }\n\n return fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n }\n\n /**\n * Generate README.md content for a packed agent.\n *\n * @param packageName - The npm package name\n * @param agentName - The agent name\n * @param version - The package version\n * @param license - The license type\n * @param description - Optional description from the agent definition\n * @returns README markdown content\n */\n generateReadme(\n packageName: string,\n agentName: string,\n version: string,\n license?: string,\n description?: string\n ): string {\n const desc = description || 'A Standard Agent package.';\n\n return `# ${packageName}\n\n${desc}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${packageName}\n\\`\\`\\`\n\n## Usage\n\nThis is a [Standard Agent](https://standardagentbuilder.com) package. To use it:\n\n1. Install in your Standard Agents project\n2. The agent will be automatically discovered and available\n\n\\`\\`\\`typescript\n// Create a thread with this agent\nconst thread = await client.createThread({\n agent_id: '${packageName}/${agentName}'\n});\n\\`\\`\\`\n\n## License\n\n${license || 'See LICENSE file'}\n`;\n }\n\n /**\n * Find a file by name in a directory.\n */\n private findFile(dir: string, name: string): string | null {\n if (!fs.existsSync(dir)) {\n return null;\n }\n\n // Try exact match with .ts extension\n const exactPath = path.join(dir, `${name}.ts`);\n if (fs.existsSync(exactPath)) {\n return exactPath;\n }\n\n // Try finding by name property in files\n const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts'));\n for (const file of files) {\n const filePath = path.join(dir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const extractedName = extractDefinitionName(source);\n if (extractedName === name) {\n return filePath;\n }\n }\n\n return null;\n }\n\n /**\n * List all agents in the workspace.\n */\n listAgents(rootDir: string): string[] {\n const agentsDir = path.join(rootDir, 'agents', 'agents');\n if (!fs.existsSync(agentsDir)) {\n return [];\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n const agents: string[] = [];\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const name = extractDefinitionName(source);\n if (name) {\n agents.push(name);\n } else {\n agents.push(file.replace('.ts', ''));\n }\n }\n\n return agents;\n }\n}\n","/**\n * Package discovery service for Standard Agents.\n *\n * Discovers packed agent packages from:\n * - npm packages (by keyword, naming convention, or standardagent field)\n * - Local agents/packed/ directory\n *\n * Packages are detected by checking for the `standardagent` field in\n * package.json, not by looking for manifest.json.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { DiscoveredPackage, PackageSignature } from './types.js';\n\n/**\n * Configuration for package discovery.\n */\nexport interface DiscoveryConfig {\n /** Root directory of the project */\n rootDir: string;\n /** Directory for local packed agents (default: agents/packed) */\n packedDir?: string;\n /** Whether to scan npm packages (default: true) */\n scanNpm?: boolean;\n /** Whether to scan local packed directory (default: true) */\n scanLocal?: boolean;\n}\n\n/**\n * Service for discovering packed agent packages.\n */\nexport class PackageDiscoveryService {\n private config: Required<DiscoveryConfig>;\n\n constructor(config: DiscoveryConfig) {\n this.config = {\n rootDir: config.rootDir,\n packedDir: config.packedDir ?? path.join(config.rootDir, 'agents', 'packed'),\n scanNpm: config.scanNpm ?? true,\n scanLocal: config.scanLocal ?? true,\n };\n }\n\n /**\n * Discover all packed agent packages.\n *\n * @returns Array of discovered packages\n */\n async discoverPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (this.config.scanNpm) {\n const npmPackages = await this.discoverNpmPackages();\n packages.push(...npmPackages);\n }\n\n if (this.config.scanLocal) {\n const localPackages = await this.discoverLocalPackages();\n packages.push(...localPackages);\n }\n\n return packages;\n }\n\n /**\n * Discover npm packages that are Standard Agents packages.\n *\n * Looks for packages with:\n * - \"standardagent\" keyword in package.json\n * - \"standardagent-*\" prefix in name\n * - \"@standardagents/*\" scope\n * - \"standardagent\" field in package.json\n */\n private async discoverNpmPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n const nodeModulesDir = path.join(this.config.rootDir, 'node_modules');\n\n if (!fs.existsSync(nodeModulesDir)) {\n return packages;\n }\n\n // Scan root level packages\n const rootEntries = await this.scanDirectory(nodeModulesDir);\n for (const entry of rootEntries) {\n if (entry.startsWith('.')) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package - scan contents\n const scopeDir = path.join(nodeModulesDir, entry);\n const scopeEntries = await this.scanDirectory(scopeDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const pkgDir = path.join(scopeDir, scopedPkg);\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkNpmPackage(pkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkgDir = path.join(nodeModulesDir, entry);\n const pkg = await this.checkNpmPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if an npm package is a Standard Agent package.\n *\n * Detection is based on the `standardagent` field in package.json,\n * which must contain `entryAgents` array.\n */\n private async checkNpmPackage(\n pkgDir: string,\n pkgName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Check if this is a Standard Agent package\n const isStandardAgent =\n // Has \"standardagent\" keyword\n pkgJson.keywords?.includes('standardagent') ||\n // Has \"standardagent-*\" prefix\n pkgName.startsWith('standardagent-') ||\n // Has \"@standardagents/*\" scope\n pkgName.startsWith('@standardagents/') ||\n // Has \"standardagent\" field\n pkgJson.standardagent !== undefined;\n\n if (!isStandardAgent) {\n return null;\n }\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n // Might be a different kind of standardagent package\n // (like @standardagents/builder itself)\n return null;\n }\n\n return {\n packageId: pkgJson.name || pkgName,\n version: pkgJson.version || '0.0.0',\n source: 'npm',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading npm package ${pkgName}:`, error);\n return null;\n }\n }\n\n /**\n * Discover local packed agents from agents/packed/ directory.\n * Handles both regular packages and scoped packages (@scope/name).\n */\n private async discoverLocalPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (!fs.existsSync(this.config.packedDir)) {\n return packages;\n }\n\n const entries = await this.scanDirectory(this.config.packedDir);\n\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n\n const pkgDir = path.join(this.config.packedDir, entry);\n const stat = fs.statSync(pkgDir);\n\n if (!stat.isDirectory()) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package directory - scan contents for actual packages\n const scopeEntries = await this.scanDirectory(pkgDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const scopedPkgDir = path.join(pkgDir, scopedPkg);\n const scopedStat = fs.statSync(scopedPkgDir);\n\n if (!scopedStat.isDirectory()) continue;\n\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkLocalPackage(scopedPkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkg = await this.checkLocalPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if a local directory is a packed agent package.\n *\n * Detection is based on the `standardagent` field in package.json.\n */\n private async checkLocalPackage(\n pkgDir: string,\n dirName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n return null;\n }\n\n return {\n packageId: pkgJson.name || dirName,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading local package ${dirName}:`, error);\n return null;\n }\n }\n\n /**\n * Scan a directory and return entry names.\n */\n private async scanDirectory(dir: string): Promise<string[]> {\n if (!fs.existsSync(dir)) {\n return [];\n }\n\n const entries = fs.readdirSync(dir);\n return entries;\n }\n\n /**\n * Validate a standardagent field structure in package.json.\n */\n static validateStandardAgentField(field: unknown): field is { entryAgents: string[] } {\n if (typeof field !== 'object' || field === null) {\n return false;\n }\n\n const f = field as Record<string, unknown>;\n\n return (\n Array.isArray(f.entryAgents) &&\n f.entryAgents.length > 0 &&\n f.entryAgents.every((e: unknown) => typeof e === 'string')\n );\n }\n\n /**\n * Get a package by ID.\n */\n async getPackage(packageId: string): Promise<DiscoveredPackage | null> {\n const packages = await this.discoverPackages();\n return packages.find(p => p.packageId === packageId) ?? null;\n }\n\n /**\n * Create a package signature from a discovered package.\n *\n * Note: packedAt is set to current time since it's no longer\n * stored in a manifest file.\n */\n static createSignature(pkg: DiscoveredPackage): PackageSignature {\n return {\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n packedAt: Date.now(),\n };\n }\n}\n\n/**\n * Convenience function to discover all packages.\n */\nexport async function discoverPackages(rootDir: string): Promise<DiscoveredPackage[]> {\n const service = new PackageDiscoveryService({ rootDir });\n return service.discoverPackages();\n}\n","/**\n * Unpacking service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze packed packages to discover exportable items\n * - Transform bundled JavaScript back to TypeScript source files\n * - Restore packed agents to editable source files\n *\n * Uses AST-based transformation (TypeScript Compiler API + magic-string)\n * to accurately preserve all code including Zod schemas and execute functions.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as ts from 'typescript';\nimport type {\n UnpackOptions,\n UnpackResult,\n UnpackAnalysis,\n UnpackableItem,\n UnpackItemSelection,\n DiscoveredPackage,\n} from './types.js';\nimport { PackageDiscoveryService } from './discovery.js';\nimport {\n transformBundledJs,\n extractAgentPrompts,\n extractPromptTools,\n extractPromptModel,\n extractToolUses,\n injectAgentMetadata,\n type AgentMetadata,\n} from './ast-utils.js';\n\n/**\n * Registry item type for consistent iteration.\n */\ntype ItemType = 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n\n/**\n * Maps type to directory name (plural form).\n */\nconst TYPE_TO_DIR: Record<ItemType, string> = {\n agent: 'agents',\n prompt: 'prompts',\n tool: 'tools',\n model: 'models',\n hook: 'hooks',\n};\n\n/**\n * Service for unpacking packed agent packages.\n */\nexport class UnpackingService {\n /**\n * Analyze a package to discover what can be unpacked.\n *\n * @param packageId - Package ID to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with items that can be unpacked\n */\n async analyzeUnpack(packageId: string, rootDir: string): Promise<UnpackAnalysis> {\n const analysis: UnpackAnalysis = {\n packageId,\n version: '',\n source: 'local',\n canUnpack: false,\n items: [],\n warnings: [],\n errors: [],\n };\n\n try {\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n\n if (!pkg) {\n analysis.errors.push(`Package not found: ${packageId}`);\n return analysis;\n }\n\n analysis.version = pkg.version;\n analysis.source = pkg.source;\n\n // Read and parse the index.js to discover registry items\n const indexPath = path.join(pkg.path, 'dist', 'index.js');\n if (!fs.existsSync(indexPath)) {\n analysis.errors.push(`Package index not found: ${indexPath}`);\n return analysis;\n }\n\n const indexContent = fs.readFileSync(indexPath, 'utf-8');\n const registryItems = this.parseIndexExports(indexContent);\n\n // Build a map of all available items for quick lookup\n const availableItems = new Map<string, { type: ItemType; name: string }>();\n for (const item of registryItems) {\n availableItems.set(`${item.type}:${item.name}`, item);\n }\n\n // Read bundled files to discover relationships\n const agentsDir = path.join(rootDir, 'agents');\n const itemsWithRelations: UnpackableItem[] = [];\n\n // Process each item and discover its relationships\n for (const item of registryItems) {\n const targetPath = path.join(agentsDir, TYPE_TO_DIR[item.type], `${item.name}.ts`);\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const existsGlobally = this.fileExists(targetPath);\n const sourceExists = fs.existsSync(sourcePath);\n\n if (!sourceExists) {\n analysis.warnings.push(`Source file not found for ${item.type} \"${item.name}\": ${sourcePath}`);\n continue;\n }\n\n // Read the bundled file to discover relationships\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n const children = this.discoverRelationships(item.type, item.name, bundledCode, availableItems);\n\n // Add the item itself (no parentKey for root-level items initially)\n itemsWithRelations.push({\n name: item.name,\n type: item.type,\n targetPath,\n existsGlobally,\n action: existsGlobally ? 'skip' : 'generate',\n });\n\n // Add children with parentKey\n for (const child of children) {\n const childTargetPath = path.join(agentsDir, TYPE_TO_DIR[child.type], `${child.name}.ts`);\n const childSourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[child.type], `${child.name}.js`);\n const childExists = this.fileExists(childTargetPath);\n const childSourceExists = fs.existsSync(childSourcePath);\n\n if (!childSourceExists) {\n continue; // Skip if source doesn't exist\n }\n\n itemsWithRelations.push({\n name: child.name,\n type: child.type,\n targetPath: childTargetPath,\n existsGlobally: childExists,\n action: childExists ? 'skip' : 'generate',\n parentKey: `${item.type}:${item.name}`,\n });\n }\n }\n\n // Deduplicate items (keep first occurrence, but allow duplicates with different parentKeys)\n analysis.items = itemsWithRelations;\n\n // Add warning if all items already exist\n const itemsToGenerate = analysis.items.filter(i => i.action === 'generate');\n if (itemsToGenerate.length === 0 && analysis.items.length > 0) {\n analysis.warnings.push('All items already exist in the global namespace. Nothing to unpack.');\n }\n\n analysis.canUnpack = itemsToGenerate.length > 0;\n\n } catch (error) {\n analysis.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return analysis;\n }\n\n /**\n * Discover relationships from a bundled file.\n * Returns child items that this item references.\n */\n private discoverRelationships(\n type: ItemType,\n name: string,\n bundledCode: string,\n availableItems: Map<string, { type: ItemType; name: string }>\n ): Array<{ type: ItemType; name: string }> {\n const children: Array<{ type: ItemType; name: string }> = [];\n\n if (type === 'agent') {\n // Extract prompts from agent's sideA and sideB\n const prompts = extractAgentPrompts(bundledCode);\n if (prompts.sideA && availableItems.has(`prompt:${prompts.sideA}`)) {\n children.push({ type: 'prompt', name: prompts.sideA });\n }\n if (prompts.sideB && availableItems.has(`prompt:${prompts.sideB}`)) {\n children.push({ type: 'prompt', name: prompts.sideB });\n }\n } else if (type === 'prompt') {\n // Extract tools and model from prompt\n const toolsResult = extractPromptTools(bundledCode);\n for (const toolName of toolsResult.tools) {\n // Tool could be a tool or an agent (exposeAsTool)\n if (availableItems.has(`tool:${toolName}`)) {\n children.push({ type: 'tool', name: toolName });\n } else if (availableItems.has(`agent:${toolName}`)) {\n children.push({ type: 'agent', name: toolName });\n }\n }\n\n const model = extractPromptModel(bundledCode);\n if (model && availableItems.has(`model:${model}`)) {\n children.push({ type: 'model', name: model });\n }\n } else if (type === 'tool') {\n // Extract uses from tool\n const usesResult = extractToolUses(bundledCode);\n for (const useName of usesResult.uses) {\n // Uses can reference tools, prompts, or agents\n // Format can be \"tool_name\" or \"agent_name:prompt_name\"\n const colonIndex = useName.indexOf(':');\n if (colonIndex > 0) {\n // agent:prompt format\n const agentName = useName.substring(0, colonIndex);\n if (availableItems.has(`agent:${agentName}`)) {\n children.push({ type: 'agent', name: agentName });\n }\n } else {\n // Simple name - could be tool, prompt, or agent\n if (availableItems.has(`tool:${useName}`)) {\n children.push({ type: 'tool', name: useName });\n } else if (availableItems.has(`prompt:${useName}`)) {\n children.push({ type: 'prompt', name: useName });\n } else if (availableItems.has(`agent:${useName}`)) {\n children.push({ type: 'agent', name: useName });\n }\n }\n }\n }\n\n return children;\n }\n\n /**\n * Unpack a packed agent package by transforming bundled JS back to TypeScript.\n *\n * @param options - Unpacking options\n * @returns Result of the unpacking operation\n */\n async unpack(options: UnpackOptions): Promise<UnpackResult> {\n const { packageId, rootDir, deletePackage = false, itemSelections } = options;\n\n const result: UnpackResult = {\n success: false,\n packageId,\n filesGenerated: [],\n filesSkipped: [],\n packageDeleted: false,\n warnings: [],\n };\n\n try {\n // First analyze to get the items\n const analysis = await this.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n return result;\n }\n\n result.warnings.push(...analysis.warnings);\n\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n if (!pkg) {\n result.error = `Package not found: ${packageId}`;\n return result;\n }\n\n // Apply item selections if provided\n const itemsToProcess = this.applySelections(analysis.items, itemSelections);\n\n // Read package.json to get metadata for agent injection\n const pkgJsonPath = path.join(pkg.path, 'package.json');\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Extract author from package.json (can be string or object)\n let author = '';\n if (typeof pkgJson.author === 'string') {\n author = pkgJson.author;\n } else if (pkgJson.author?.name) {\n author = pkgJson.author.name;\n }\n\n // Build metadata for agent injection\n const agentMetadata: AgentMetadata = {\n packageName: pkgJson.name || undefined,\n version: pkgJson.version || undefined,\n author: author || undefined,\n license: pkgJson.license || undefined,\n };\n\n // Deduplicate by type:name (process each unique item only once)\n const processedItems = new Set<string>();\n\n for (const item of itemsToProcess) {\n const itemKey = `${item.type}:${item.name}`;\n if (processedItems.has(itemKey)) {\n continue; // Skip duplicates\n }\n processedItems.add(itemKey);\n\n if (item.action === 'skip') {\n result.filesSkipped.push(item.targetPath);\n continue;\n }\n\n try {\n // Read the bundled JS file\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n\n // Transform using AST\n let tsCode = transformBundledJs(bundledCode);\n\n // For agents, inject metadata from package.json so it persists through pack/unpack cycles\n if (item.type === 'agent') {\n tsCode = injectAgentMetadata(tsCode, agentMetadata);\n }\n\n // Ensure directory exists\n const dir = path.dirname(item.targetPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write the TypeScript file\n fs.writeFileSync(item.targetPath, tsCode);\n result.filesGenerated.push(item.targetPath);\n\n } catch (error) {\n result.warnings.push(\n `Failed to generate ${item.type} \"${item.name}\": ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Delete package if requested and it's a local package\n if (deletePackage && pkg.source === 'local') {\n try {\n this.deleteDirectory(pkg.path);\n result.packageDeleted = true;\n } catch (error) {\n result.warnings.push(\n `Failed to delete package: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else if (deletePackage && pkg.source === 'npm') {\n result.warnings.push('Cannot delete npm packages. Use npm uninstall instead.');\n }\n\n result.success = true;\n\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n }\n\n /**\n * Parse the index.js file to extract registry items.\n *\n * Looks for patterns like:\n * ```javascript\n * export const agents = {\n * support_agent: async () => (await import('./agents/support_agent.js')).default,\n * };\n * ```\n */\n private parseIndexExports(indexContent: string): Array<{ name: string; type: ItemType }> {\n const sourceFile = ts.createSourceFile(\n 'index.js',\n indexContent,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const items: Array<{ name: string; type: ItemType }> = [];\n const registryTypes: ItemType[] = ['agent', 'prompt', 'tool', 'model', 'hook'];\n\n function visit(node: ts.Node): void {\n // Look for: export const agents = { ... }\n if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n for (const decl of node.declarationList.declarations) {\n if (!ts.isIdentifier(decl.name)) continue;\n\n const varName = decl.name.text;\n\n // Check if this is a registry (agents, prompts, tools, models, hooks)\n let itemType: ItemType | null = null;\n for (const type of registryTypes) {\n if (varName === TYPE_TO_DIR[type]) {\n itemType = type;\n break;\n }\n }\n\n if (itemType && decl.initializer && ts.isObjectLiteralExpression(decl.initializer)) {\n // Extract keys from the object\n for (const prop of decl.initializer.properties) {\n if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {\n let name: string | undefined;\n\n if (ts.isPropertyAssignment(prop)) {\n if (ts.isIdentifier(prop.name)) {\n name = prop.name.text;\n } else if (ts.isStringLiteral(prop.name)) {\n name = prop.name.text;\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n name = prop.name.text;\n }\n\n if (name) {\n items.push({ name, type: itemType });\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return items;\n }\n\n /**\n * Resolve a package identifier to a discovered package.\n */\n private async resolvePackage(\n pkgIdentifier: string,\n rootDir: string\n ): Promise<DiscoveredPackage | null> {\n // Check if it's a local path\n if (pkgIdentifier.startsWith('/') || pkgIdentifier.startsWith('./')) {\n const absolutePath = path.isAbsolute(pkgIdentifier)\n ? pkgIdentifier\n : path.join(rootDir, pkgIdentifier);\n\n const pkgJsonPath = path.join(absolutePath, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || path.basename(absolutePath),\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: absolutePath,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, return null\n }\n }\n\n return null;\n }\n\n // Check local packed directory first\n const packedDir = path.join(rootDir, 'agents', 'packed', pkgIdentifier);\n const pkgJsonPath = path.join(packedDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || pkgIdentifier,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: packedDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, continue to npm check\n }\n }\n\n // Check npm packages\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n const pkg = packages.find(\n p => p.packageId === pkgIdentifier || p.path.endsWith(`node_modules/${pkgIdentifier}`)\n );\n\n return pkg || null;\n }\n\n /**\n * Apply user selections to items.\n */\n private applySelections(\n items: UnpackableItem[],\n selections?: UnpackItemSelection[]\n ): UnpackableItem[] {\n if (!selections || selections.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const selection = selections.find(\n s => s.name === item.name && s.type === item.type\n );\n if (selection) {\n return { ...item, action: selection.action };\n }\n return item;\n });\n }\n\n /**\n * Check if a file exists.\n */\n private fileExists(filePath: string): boolean {\n // Check for .ts and .js extensions\n if (fs.existsSync(filePath)) {\n return true;\n }\n // Check without extension\n const withoutExt = filePath.replace(/\\.(ts|js)$/, '');\n return fs.existsSync(`${withoutExt}.ts`) || fs.existsSync(`${withoutExt}.js`);\n }\n\n /**\n * Recursively delete a directory.\n */\n private deleteDirectory(dirPath: string): void {\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n }\n\n /**\n * List available packed packages.\n */\n async listPackages(rootDir: string): Promise<Array<{\n packageId: string;\n version: string;\n source: 'npm' | 'local';\n entryAgents: string[];\n path: string;\n }>> {\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n\n return packages.map(pkg => ({\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n entryAgents: pkg.entryAgents,\n path: pkg.path,\n }));\n }\n}\n","/**\n * npm publish service for Standard Agents.\n *\n * Handles publishing packed agent packages to npm registries.\n * Manages temporary .npmrc files for authentication.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Options for publishing a package.\n */\nexport interface PublishOptions {\n /** Directory containing the package to publish */\n packageDir: string;\n /** npm auth token */\n token: string;\n /** npm registry URL (default: https://registry.npmjs.org) */\n registry?: string;\n /** If true, run npm publish --dry-run */\n dryRun?: boolean;\n}\n\n/**\n * Result of a publish operation.\n */\nexport interface PublishResult {\n /** Whether publish succeeded */\n success: boolean;\n /** Combined stdout output */\n output: string;\n /** Error message if failed */\n error?: string;\n /** Published package name (if successful) */\n packageName?: string;\n /** Published version (if successful) */\n version?: string;\n}\n\n/**\n * Service for publishing packages to npm.\n */\nexport class NpmPublishService {\n /**\n * Validate an npm auth token format.\n *\n * @param token - Token to validate\n * @returns true if token appears valid\n */\n validateToken(token: string): boolean {\n if (!token || token.trim().length === 0) {\n return false;\n }\n\n // npm tokens are typically:\n // - Classic tokens: npm_xxxx (36+ chars)\n // - Granular tokens: npm_xxxx (also 36+ chars)\n // - Legacy tokens: various formats\n // We do basic validation - actual auth is done by npm\n return token.trim().length >= 10;\n }\n\n /**\n * Validate a registry URL.\n *\n * @param registry - Registry URL to validate\n * @returns true if URL is valid https URL\n */\n validateRegistry(registry: string): boolean {\n try {\n const url = new URL(registry);\n return url.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n /**\n * Publish a package to npm.\n *\n * Creates a temporary .npmrc with the token, runs npm publish,\n * and deletes the .npmrc immediately after.\n *\n * @param options - Publish options\n * @returns Publish result\n */\n async publish(options: PublishOptions): Promise<PublishResult> {\n const {\n packageDir,\n token,\n registry = 'https://registry.npmjs.org',\n dryRun = false,\n } = options;\n\n // Validate inputs\n if (!this.validateToken(token)) {\n return {\n success: false,\n output: '',\n error: 'Invalid npm token format',\n };\n }\n\n if (!this.validateRegistry(registry)) {\n return {\n success: false,\n output: '',\n error: 'Registry URL must use HTTPS',\n };\n }\n\n // Check package.json exists\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return {\n success: false,\n output: '',\n error: 'package.json not found in package directory',\n };\n }\n\n // Read package info\n let packageName: string;\n let version: string;\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n packageName = pkgJson.name;\n version = pkgJson.version;\n } catch (e) {\n return {\n success: false,\n output: '',\n error: `Failed to read package.json: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n // Create temporary .npmrc\n const npmrcPath = path.join(packageDir, '.npmrc');\n const registryHost = new URL(registry).host;\n const npmrcContent = `//${registryHost}/:_authToken=${token}\\nregistry=${registry}\\n`;\n\n try {\n // Write .npmrc with restricted permissions (owner read/write only)\n fs.writeFileSync(npmrcPath, npmrcContent, { mode: 0o600 });\n\n // Build npm publish command\n const args = ['publish'];\n if (dryRun) {\n args.push('--dry-run');\n }\n args.push('--access', 'public');\n\n const command = `npm ${args.join(' ')}`;\n\n // Execute npm publish\n const { stdout, stderr } = await execAsync(command, {\n cwd: packageDir,\n env: {\n ...process.env,\n // Ensure npm uses our .npmrc\n npm_config_userconfig: npmrcPath,\n },\n });\n\n const output = [stdout, stderr].filter(Boolean).join('\\n');\n\n return {\n success: true,\n output,\n packageName,\n version,\n };\n } catch (e) {\n const error = e as Error & { stdout?: string; stderr?: string };\n const output = [error.stdout, error.stderr].filter(Boolean).join('\\n');\n\n return {\n success: false,\n output,\n error: error.message || 'npm publish failed',\n };\n } finally {\n // Always delete .npmrc, even on error\n try {\n if (fs.existsSync(npmrcPath)) {\n fs.unlinkSync(npmrcPath);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n\n /**\n * Check if a package version already exists on the registry.\n *\n * @param packageName - Package name\n * @param version - Version to check\n * @param registry - Registry URL\n * @returns true if version exists\n */\n async versionExists(\n packageName: string,\n version: string,\n registry = 'https://registry.npmjs.org'\n ): Promise<boolean> {\n try {\n const url = `${registry}/${packageName}/${version}`;\n const response = await fetch(url);\n return response.status === 200;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the npm package URL for a published package.\n *\n * @param packageName - Package name\n * @param registry - Registry URL\n * @returns URL to view the package\n */\n getPackageUrl(packageName: string, registry = 'https://registry.npmjs.org'): string {\n if (registry === 'https://registry.npmjs.org') {\n return `https://www.npmjs.com/package/${packageName}`;\n }\n // For custom registries, return the registry URL\n return `${registry}/${packageName}`;\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Plugin, ViteDevServer } from \"vite\";\n\nimport { generateTypes, getDefaultConfig, needsRegeneration } from \"./sdk/generateTypes.js\";\nimport { parseModelFile } from \"./utils/model-parser.js\";\nimport {\n saveModel,\n deleteModel,\n renameModel,\n validateModelData,\n modelExists,\n transformModelData,\n savePrompt,\n deletePrompt,\n renamePrompt,\n validatePromptData,\n promptExists,\n transformPromptData,\n saveAgent,\n deleteAgent,\n validateAgentData,\n agentExists,\n transformAgentData,\n updateModelReferencesInPrompts,\n updatePromptReferencesInPrompts,\n updatePromptReferencesInAgents,\n} from \"./sdk/persistence/index.js\";\nimport { PackingService } from \"./packing/packing-service.js\";\nimport { UnpackingService } from \"./packing/unpacking-service.js\";\nimport { NpmPublishService } from \"./packing/npm-publish-service.js\";\nimport type { ItemSelection, UnpackItemSelection } from \"./packing/types.js\";\n\nconst VIRTUAL_TOOLS_ID = \"virtual:@standardagents-tools\";\nconst RESOLVED_VIRTUAL_TOOLS_ID = \"\\0\" + VIRTUAL_TOOLS_ID;\n\nconst VIRTUAL_ROUTES_ID = \"virtual:@standardagents-routes\";\nconst RESOLVED_VIRTUAL_ROUTES_ID = \"\\0\" + VIRTUAL_ROUTES_ID;\n\n// Legacy alias for backward compatibility\nconst VIRTUAL_ROUTER_ID = \"virtual:@standardagents/router\";\nconst RESOLVED_VIRTUAL_ROUTER_ID = \"\\0\" + VIRTUAL_ROUTER_ID;\n\nconst VIRTUAL_HOOKS_ID = \"virtual:@standardagents-hooks\";\nconst RESOLVED_VIRTUAL_HOOKS_ID = \"\\0\" + VIRTUAL_HOOKS_ID;\n\nconst VIRTUAL_CONFIG_ID = \"virtual:@standardagents-config\";\nconst RESOLVED_VIRTUAL_CONFIG_ID = \"\\0\" + VIRTUAL_CONFIG_ID;\n\nconst VIRTUAL_THREAD_API_ID = \"virtual:@standardagents-thread-api\";\nconst RESOLVED_VIRTUAL_THREAD_API_ID = \"\\0\" + VIRTUAL_THREAD_API_ID;\n\n// Virtual modules for models, prompts, and agents\nconst VIRTUAL_MODELS_ID = \"virtual:@standardagents-models\";\nconst RESOLVED_VIRTUAL_MODELS_ID = \"\\0\" + VIRTUAL_MODELS_ID;\n\nconst VIRTUAL_PROMPTS_ID = \"virtual:@standardagents-prompts\";\nconst RESOLVED_VIRTUAL_PROMPTS_ID = \"\\0\" + VIRTUAL_PROMPTS_ID;\n\nconst VIRTUAL_AGENTS_ID = \"virtual:@standardagents-agents\";\nconst RESOLVED_VIRTUAL_AGENTS_ID = \"\\0\" + VIRTUAL_AGENTS_ID;\n\nconst VIRTUAL_EFFECTS_ID = \"virtual:@standardagents-effects\";\nconst RESOLVED_VIRTUAL_EFFECTS_ID = \"\\0\" + VIRTUAL_EFFECTS_ID;\n\nconst VIRTUAL_PROVIDERS_ID = \"virtual:@standardagents-providers\";\nconst RESOLVED_VIRTUAL_PROVIDERS_ID = \"\\0\" + VIRTUAL_PROVIDERS_ID;\n\n// Namespaced registry for packing system\nconst VIRTUAL_REGISTRY_ID = \"virtual:@standardagents-registry\";\nconst RESOLVED_VIRTUAL_REGISTRY_ID = \"\\0\" + VIRTUAL_REGISTRY_ID;\n\n// Consolidated virtual module that provides DurableThread and DurableAgentBuilder\n// with methods already implemented (tools, hooks, models, prompts, agents)\nconst VIRTUAL_BUILDER_ID = \"virtual:@standardagents/builder\";\nconst RESOLVED_VIRTUAL_BUILDER_ID = \"\\0\" + VIRTUAL_BUILDER_ID;\n\n// API Routes functionality\nfunction scanApiDirectory(\n dir: string,\n baseRoute = \"\"\n): Array<{\n method: string;\n route: string;\n importPath: string;\n}> {\n const routes: Array<{ method: string; route: string; importPath: string }> =\n [];\n\n if (!fs.existsSync(dir)) {\n return routes;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Convert [param] to :param for rou3 dynamic routes in directory names\n const convertedDirName = entry.name.replace(/\\[([^\\]]+)\\]/g, ':$1');\n const subRoute = baseRoute + \"/\" + convertedDirName;\n routes.push(...scanApiDirectory(fullPath, subRoute));\n } else if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(/\\.ts$/, \"\");\n let method = \"\";\n let routePath = baseRoute;\n\n if (fileName.includes(\".\")) {\n const parts = fileName.split(\".\");\n const methodPart = parts[parts.length - 1].toUpperCase();\n if ([\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"].includes(methodPart)) {\n method = methodPart;\n const pathPart = parts.slice(0, -1).join(\".\");\n if (pathPart !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = pathPart.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n } else {\n if (fileName !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = fileName.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n }\n } else {\n if (fileName !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = fileName.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n }\n\n const importPath =\n \"./\" + path.relative(process.cwd(), fullPath).replace(/\\\\/g, \"/\");\n\n routes.push({\n method,\n route: routePath || \"/\",\n importPath,\n });\n }\n }\n\n return routes;\n } catch (error) {\n console.error(`Error scanning API directory ${dir}:`, error);\n return [];\n }\n}\n\n// Tools functionality\nfunction isSnakeCase(str: string): boolean {\n return /^[a-z][a-z0-9_]*[a-z0-9]$/.test(str) || /^[a-z]$/.test(str);\n}\n\nfunction validateToolFile(filePath: string, fileName: string): string | null {\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n const hasDefaultExport = /export\\s+default\\s+defineTool/.test(content);\n\n if (!hasDefaultExport) {\n return `Tool file '${fileName}.ts' must have a default export using defineTool()`;\n }\n\n return null;\n } catch (error) {\n return `Failed to read tool file '${fileName}.ts'`;\n }\n}\n\nasync function scanToolsDirectory(\n dir: string\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const tools: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return tools;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n let toolError: string | undefined;\n\n const validationError = validateToolFile(filePath, fileName);\n\n if (validationError) {\n toolError = validationError;\n console.error(`\\n❌ Tool validation error: ${validationError}`);\n }\n\n if (!isSnakeCase(fileName)) {\n const warning = `Tool name should be in snake_case format (e.g., 'log_name', 'send_email')`;\n if (toolError) {\n toolError += ` | ${warning}`;\n } else {\n toolError = warning;\n }\n console.warn(\n `\\n⚠️ Tool naming warning: '${fileName}' should be in snake_case format (e.g., 'log_name', 'send_email')`\n );\n }\n\n tools.push({ name: fileName, importPath, error: toolError });\n }\n }\n\n return tools;\n}\n\n/**\n * Hook metadata extracted from a hook definition file.\n */\ninterface HookFileInfo {\n /** Unique hook ID from defineHook({ id: '...' }) */\n id: string;\n /** Hook type from defineHook({ hook: '...' }) */\n hook: string;\n /** Import path for the hook file */\n importPath: string;\n}\n\n/**\n * Scan hooks directory and extract hook metadata from defineHook calls.\n * Extracts both the hook ID and hook type for proper registration.\n */\nasync function scanHooksDirectory(\n dir: string\n): Promise<HookFileInfo[]> {\n const hooks: HookFileInfo[] = [];\n\n if (!fs.existsSync(dir)) {\n return hooks;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n\n // Skip index.ts - it's a utility module, not a hook\n if (fileName === \"index\") {\n continue;\n }\n\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n\n // Extract id from defineHook({ ... id: 'xxx' ... })\n const idMatch = content.match(/id:\\s*['\"]([^'\"]+)['\"]/);\n // Extract hook type from defineHook({ ... hook: 'xxx' ... })\n const hookMatch = content.match(/hook:\\s*['\"]([^'\"]+)['\"]/);\n\n if (idMatch && hookMatch) {\n hooks.push({\n id: idMatch[1],\n hook: hookMatch[1],\n importPath,\n });\n } else {\n // Fallback for old-style hooks without id/hook properties\n // Use filename as both id and name for backward compatibility\n console.warn(\n `[vite-plugin-agent] Hook file '${entry.name}' is using deprecated format. ` +\n `Please update to use defineHook({ hook: '...', id: '...', execute: ... })`\n );\n }\n } catch (error) {\n console.error(`[vite-plugin-agent] Error reading hook file ${entry.name}:`, error);\n }\n }\n }\n\n return hooks;\n}\n\n/**\n * Scan a directory for config definitions (models, prompts, or agents).\n * Extracts the name from the defineX() call in each file.\n */\nasync function scanConfigDirectory(\n dir: string,\n definePattern: RegExp\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const items: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return items;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n\n // Check for default export with define function\n const hasDefaultExport = definePattern.test(content);\n if (!hasDefaultExport) {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `File must have a default export using the define function`,\n });\n continue;\n }\n\n // Extract name from defineX({ name: 'xxx', ... })\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n items.push({ name: nameMatch[1], importPath });\n } else {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `Could not extract name from definition`,\n });\n }\n } catch (error) {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `Failed to read file: ${error}`,\n });\n }\n }\n }\n\n return items;\n}\n\nasync function scanModelsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+defineModel/);\n}\n\nasync function scanPromptsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+definePrompt/);\n}\n\nasync function scanAgentsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+defineAgent/);\n}\n\n/**\n * Scan effects directory for effect definitions.\n * Effects use the same pattern as tools (filename = effect name).\n */\nasync function scanEffectsDirectory(\n dir: string\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const effects: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return effects;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n // Skip CLAUDE.md and other non-effect files\n if (fileName === \"CLAUDE\" || fileName.startsWith(\"_\")) {\n continue;\n }\n\n // Verify file exports defineEffect\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n if (!content.includes(\"defineEffect\")) {\n continue; // Not an effect file\n }\n } catch {\n continue;\n }\n\n effects.push({ name: fileName, importPath });\n }\n }\n\n return effects;\n}\n\n/**\n * Parse JSON body from an incoming HTTP request (Node.js IncomingMessage).\n * Used by dev-mode API handlers that intercept requests before they reach workerd.\n */\nfunction parseRequestBody(req: import('http').IncomingMessage): Promise<any> {\n return new Promise((resolve, reject) => {\n let body = '';\n req.on('data', (chunk: Buffer) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n try {\n resolve(body ? JSON.parse(body) : {});\n } catch (e) {\n reject(new Error('Invalid JSON body'));\n }\n });\n req.on('error', reject);\n });\n}\n\nexport interface AgentPluginOptions {\n mountPoint?: string;\n toolsDir?: string;\n hooksDir?: string;\n apiDir?: string;\n modelsDir?: string;\n promptsDir?: string;\n agentsDir?: string;\n effectsDir?: string;\n /**\n * Additional provider packages to expose in the UI.\n * First-party providers (@standardagents/openai, @standardagents/openrouter) are always included.\n * @example ['my-custom-provider', '@company/custom-openai']\n */\n providers?: string[];\n}\n\nexport function agentbuilder(options: AgentPluginOptions = {}): Plugin {\n // Normalize mount point: ensure leading slash, no trailing slash\n let mountPoint = options.mountPoint || \"/agents\";\n if (!mountPoint.startsWith(\"/\")) {\n mountPoint = \"/\" + mountPoint;\n }\n if (mountPoint.endsWith(\"/\") && mountPoint.length > 1) {\n mountPoint = mountPoint.slice(0, -1);\n }\n\n const toolsDir = options.toolsDir\n ? path.resolve(process.cwd(), options.toolsDir)\n : path.resolve(process.cwd(), \"agents/tools\");\n const hooksDir = options.hooksDir\n ? path.resolve(process.cwd(), options.hooksDir)\n : path.resolve(process.cwd(), \"agents/hooks\");\n const threadApiDir = options.apiDir\n ? path.resolve(process.cwd(), options.apiDir)\n : path.resolve(process.cwd(), \"agents/api\");\n const modelsDir = options.modelsDir\n ? path.resolve(process.cwd(), options.modelsDir)\n : path.resolve(process.cwd(), \"agents/models\");\n const promptsDir = options.promptsDir\n ? path.resolve(process.cwd(), options.promptsDir)\n : path.resolve(process.cwd(), \"agents/prompts\");\n const agentsDir = options.agentsDir\n ? path.resolve(process.cwd(), options.agentsDir)\n : path.resolve(process.cwd(), \"agents/agents\");\n const effectsDir = options.effectsDir\n ? path.resolve(process.cwd(), options.effectsDir)\n : path.resolve(process.cwd(), \"agents/effects\");\n const outputDir = path.resolve(process.cwd(), \".agents\");\n\n // Type generation configuration\n const typeGenConfig = {\n modelsDir,\n promptsDir,\n agentsDir,\n toolsDir,\n hooksDir,\n outputDir,\n };\n\n // Helper to regenerate types\n function regenerateTypes() {\n if (needsRegeneration(typeGenConfig)) {\n generateTypes(typeGenConfig);\n }\n }\n\n // Read and prepare rou3 code for inlining\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const rou3Path = path.join(__dirname, '../dist/rou3.js');\n let rou3Code = '';\n try {\n rou3Code = fs.readFileSync(rou3Path, 'utf-8')\n // Remove export statement\n .replace(/^export \\{[^}]+\\};?\\s*$/gm, '')\n // Remove sourcemap comments\n .replace(/\\/\\/# sourceMappingURL=.+$/gm, '')\n .trim();\n } catch (err) {\n console.warn('[vite-plugin-agent] Could not read rou3.js for inlining:', err);\n }\n\n let routesVersion = Math.random().toString(36).substring(7);\n let agentsVersion = Math.random().toString(36).substring(7);\n let registryVersion = Math.random().toString(36).substring(7);\n\n // Helper to dynamically find the worker environment (non-client environment)\n // The actual environment name comes from the user's wrangler.jsonc 'name' property\n // and is transformed to snake_case by the Cloudflare Vite plugin\n function getWorkerEnvironment(server: ViteDevServer) {\n const envNames = Object.keys(server.environments);\n // Find the first environment that's not 'client' (the default client environment)\n const workerEnvName = envNames.find(name => name !== 'client');\n\n if (!workerEnvName) {\n console.warn('[vite-plugin-agent] Could not find worker environment');\n return null;\n }\n\n return server.environments[workerEnvName];\n }\n\n // Helper functions for module reloading\n // NOTE: Virtual modules don't work with reloadModule() because they have no file property.\n // We use invalidateModule() + hot.send() to force workerd to re-import the module.\n\n /**\n * Invalidate a virtual module across ALL Vite environments.\n *\n * Key insight: Each Vite environment (client, workers, etc.) has its own isolated\n * EnvironmentModuleGraph. A module loaded in one environment doesn't exist in another's\n * graph. We need to search ALL environments to find where the module was actually loaded.\n *\n * The function tries multiple lookup strategies:\n * 1. By resolved ID (e.g., \"\\0virtual:@standardagents-agents\")\n * 2. By virtual ID URL (e.g., \"virtual:@standardagents-agents\")\n * 3. By resolved ID URL (same as #1 but via URL map)\n *\n * When found, it invalidates the module AND all its importers to ensure the\n * entire dependency chain gets refreshed.\n */\n function invalidateVirtualModule(\n server: ViteDevServer,\n virtualId: string,\n resolvedId: string\n ): { invalidatedAny: boolean; environments: string[] } {\n const invalidatedEnvs: string[] = [];\n\n for (const [envName, env] of Object.entries(server.environments)) {\n // Try multiple lookup methods since workerd may have stored the module\n // with a different key format\n let mod = env.moduleGraph.getModuleById(resolvedId);\n\n if (!mod) {\n // Try by virtual ID URL\n mod = env.moduleGraph.urlToModuleMap.get(virtualId);\n }\n\n if (!mod) {\n // Try by resolved ID URL (some environments store by this)\n mod = env.moduleGraph.urlToModuleMap.get(resolvedId);\n }\n\n if (mod) {\n console.log(`[HMR] Found ${virtualId} in ${envName} environment, invalidating`);\n env.moduleGraph.invalidateModule(mod);\n invalidatedEnvs.push(envName);\n\n // Also invalidate all importers to ensure the dependency chain refreshes\n // This is critical for modules that import the virtual module\n for (const importer of mod.importers) {\n env.moduleGraph.invalidateModule(importer);\n console.log(`[HMR] Also invalidated importer: ${importer.url}`);\n }\n }\n }\n\n return {\n invalidatedAny: invalidatedEnvs.length > 0,\n environments: invalidatedEnvs,\n };\n }\n\n async function reloadToolsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_TOOLS_ID,\n RESOLVED_VIRTUAL_TOOLS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n // This handles the case where the module hasn't been loaded yet\n const toolsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_TOOLS_ID\n );\n workerEnv.moduleGraph.invalidateModule(toolsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:tools-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadToolsModule error:', err);\n return false;\n }\n }\n\n async function reloadRoutesModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n routesVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_ROUTES_ID,\n RESOLVED_VIRTUAL_ROUTES_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const routesModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_ROUTES_ID\n );\n workerEnv.moduleGraph.invalidateModule(routesModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:routes-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRoutesModule error:', err);\n return false;\n }\n }\n\n async function reloadHooksModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_HOOKS_ID,\n RESOLVED_VIRTUAL_HOOKS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const hooksModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_HOOKS_ID\n );\n workerEnv.moduleGraph.invalidateModule(hooksModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:hooks-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadHooksModule error:', err);\n return false;\n }\n }\n\n async function reloadModelsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_MODELS_ID,\n RESOLVED_VIRTUAL_MODELS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const modelsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_MODELS_ID\n );\n workerEnv.moduleGraph.invalidateModule(modelsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:models-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadModelsModule error:', err);\n return false;\n }\n }\n\n async function reloadPromptsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_PROMPTS_ID,\n RESOLVED_VIRTUAL_PROMPTS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const promptsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_PROMPTS_ID\n );\n workerEnv.moduleGraph.invalidateModule(promptsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:prompts-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadPromptsModule error:', err);\n return false;\n }\n }\n\n async function reloadAgentsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n agentsVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_AGENTS_ID,\n RESOLVED_VIRTUAL_AGENTS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const agentsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_AGENTS_ID\n );\n workerEnv.moduleGraph.invalidateModule(agentsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:agents-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadAgentsModule error:', err);\n return false;\n }\n }\n\n async function reloadRouterModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n routesVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n // Note: VIRTUAL_ROUTER_ID is a legacy alias that resolves to VIRTUAL_ROUTES_ID\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_ROUTES_ID,\n RESOLVED_VIRTUAL_ROUTES_ID\n );\n\n // Also invalidate the legacy router alias\n invalidateVirtualModule(\n server,\n VIRTUAL_ROUTER_ID,\n RESOLVED_VIRTUAL_ROUTER_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const routerModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_ROUTES_ID\n );\n workerEnv.moduleGraph.invalidateModule(routerModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRouterModule error:', err);\n return false;\n }\n }\n\n async function reloadRegistryModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n registryVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_REGISTRY_ID,\n RESOLVED_VIRTUAL_REGISTRY_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const registryModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_REGISTRY_ID\n );\n workerEnv.moduleGraph.invalidateModule(registryModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRegistryModule error:', err);\n return false;\n }\n }\n\n function handleFileChange(\n file: string,\n server: ViteDevServer\n ) {\n const isToolFile = file.startsWith(toolsDir) && file.endsWith(\".ts\");\n const isThreadApiFile = file.startsWith(threadApiDir) && file.endsWith(\".ts\");\n const isHookFile = file.startsWith(hooksDir) && file.endsWith(\".ts\");\n const isModelFile = file.startsWith(modelsDir) && file.endsWith(\".ts\");\n const isPromptFile = file.startsWith(promptsDir) && file.endsWith(\".ts\");\n const isAgentFile = file.startsWith(agentsDir) && file.endsWith(\".ts\");\n\n const isConfigFile = isModelFile || isPromptFile || isAgentFile;\n\n if (!isToolFile && !isThreadApiFile && !isHookFile && !isConfigFile) return;\n\n // Regenerate types when config files change\n if (isConfigFile || isToolFile) {\n regenerateTypes();\n }\n\n if (isToolFile) {\n reloadToolsModule(server);\n }\n\n if (isModelFile) {\n reloadModelsModule(server);\n }\n\n if (isPromptFile) {\n reloadPromptsModule(server);\n }\n\n if (isAgentFile) {\n reloadAgentsModule(server);\n }\n\n if (isThreadApiFile) {\n reloadRoutesModule(server);\n }\n\n if (isHookFile) {\n reloadHooksModule(server);\n // Also reload routes since the routes virtual module imports and passes hooks\n reloadRoutesModule(server);\n }\n }\n\n return {\n name: \"vite-plugin-agent\",\n enforce: \"pre\" as const,\n\n config() {\n // EXCLUDE our packages from pre-bundling - they contain cloudflare:workers\n // imports that can't be resolved during Vite's dependency optimization phase.\n // The Cloudflare Vite plugin handles these specially in the worker environment.\n const depsToExclude = [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n '@standardagents/builder/image-processing',\n '@standardagents/builder/packing',\n // WASM image processing deps - must be excluded to avoid pre-bundle cache issues\n '@cf-wasm/photon',\n '@cf-wasm/photon/workerd',\n '@standardagents/sip',\n // sip's jsquash dependencies (WASM-based decoders)\n '@jsquash/avif',\n '@jsquash/webp',\n // Rollup and plugins - only used by CLI pack command, not in dev/production\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n\n // INCLUDE common dependencies that are used by the builder package\n // This prevents dynamic discovery during dev which causes cache invalidation errors\n const depsToInclude = [\n 'zod',\n 'openai',\n 'magic-string',\n '@standardagents/spec',\n ];\n\n // Locate the builder's pre-built client assets directory\n // This tells the Cloudflare Vite plugin that we have static assets to serve,\n // which prevents it from stripping the 'assets' config from wrangler.json output.\n // Without this, @cloudflare/vite-plugin removes assets config when it doesn't detect\n // a client entry, imported assets, or a publicDir with files.\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const builderClientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n return {\n // Set publicDir to builder's client assets so Cloudflare plugin preserves assets config\n publicDir: fs.existsSync(builderClientDir) ? builderClientDir : undefined,\n build: {\n rollupOptions: {\n // The packing system dynamically imports rollup, typescript, and related\n // plugins for the CLI `pack` command. These are never needed at runtime\n // in Cloudflare Workers and must be externalized:\n // - rollup/typescript/fsevents contain Node.js-only APIs (__filename, fs)\n // - fsevents is macOS-only and doesn't exist on Linux CI\n external: [\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ],\n },\n },\n optimizeDeps: {\n // Exclude our packages from pre-bundling - they contain cloudflare:workers imports\n // that cannot be resolved during dependency optimization\n exclude: depsToExclude,\n // Include common deps upfront to prevent re-optimization during dev\n include: depsToInclude,\n },\n ssr: {\n // noExternal ensures Vite transforms these instead of leaving as external\n // The Cloudflare plugin handles the actual bundling and knows about cloudflare:workers\n noExternal: [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n ],\n },\n // Suppress sourcemap warnings for packages without source maps (like typescript)\n server: {\n sourcemapIgnoreList: (sourcePath) => {\n return sourcePath.includes('node_modules/typescript') ||\n sourcePath.includes('node_modules/.pnpm/typescript');\n },\n },\n };\n },\n\n // Apply exclusions and inclusions to ALL environments including Cloudflare worker\n configEnvironment(name, config) {\n const depsToExclude = [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n '@standardagents/builder/image-processing',\n '@standardagents/builder/packing',\n // WASM image processing deps\n '@cf-wasm/photon',\n '@cf-wasm/photon/workerd',\n '@standardagents/sip',\n // sip's jsquash dependencies (WASM-based decoders)\n '@jsquash/avif',\n '@jsquash/webp',\n // Rollup and plugins - only used by CLI pack command, not in dev/production\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n\n // Include common deps upfront to prevent re-optimization during dev\n const depsToInclude = [\n 'zod',\n 'zod/v3',\n 'zod/v4',\n 'zod/v4/core',\n 'openai',\n 'magic-string',\n '@standardagents/spec',\n ];\n\n // Ensure these are excluded from optimization in all environments\n config.optimizeDeps = config.optimizeDeps || {};\n config.optimizeDeps.exclude = [\n ...(config.optimizeDeps.exclude || []),\n ...depsToExclude.filter(dep => !config.optimizeDeps?.exclude?.includes(dep)),\n ];\n config.optimizeDeps.include = [\n ...(config.optimizeDeps.include || []),\n ...depsToInclude.filter(dep => !config.optimizeDeps?.include?.includes(dep)),\n ];\n\n // Externalize packing system deps from production builds for all environments.\n // These are only used by the CLI `pack` command and contain Node.js APIs\n // (__filename, fs) that don't exist in Cloudflare Workers.\n const packingDeps = [\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n config.build = config.build || {};\n config.build.rollupOptions = config.build.rollupOptions || {};\n const existing = config.build.rollupOptions.external;\n if (Array.isArray(existing)) {\n for (const dep of packingDeps) {\n if (!existing.includes(dep)) existing.push(dep);\n }\n } else if (typeof existing === 'string') {\n config.build.rollupOptions.external = [existing, ...packingDeps];\n } else if (!existing) {\n config.build.rollupOptions.external = [...packingDeps];\n }\n },\n\n resolveId(id) {\n if (id === VIRTUAL_TOOLS_ID) {\n return RESOLVED_VIRTUAL_TOOLS_ID;\n }\n if (id === VIRTUAL_ROUTES_ID || id === VIRTUAL_ROUTER_ID) {\n return RESOLVED_VIRTUAL_ROUTES_ID;\n }\n if (id === VIRTUAL_HOOKS_ID) {\n return RESOLVED_VIRTUAL_HOOKS_ID;\n }\n if (id === VIRTUAL_CONFIG_ID) {\n return RESOLVED_VIRTUAL_CONFIG_ID;\n }\n if (id === VIRTUAL_THREAD_API_ID) {\n return RESOLVED_VIRTUAL_THREAD_API_ID;\n }\n if (id === VIRTUAL_MODELS_ID) {\n return RESOLVED_VIRTUAL_MODELS_ID;\n }\n if (id === VIRTUAL_PROMPTS_ID) {\n return RESOLVED_VIRTUAL_PROMPTS_ID;\n }\n if (id === VIRTUAL_AGENTS_ID) {\n return RESOLVED_VIRTUAL_AGENTS_ID;\n }\n if (id === VIRTUAL_EFFECTS_ID) {\n return RESOLVED_VIRTUAL_EFFECTS_ID;\n }\n if (id === VIRTUAL_PROVIDERS_ID) {\n return RESOLVED_VIRTUAL_PROVIDERS_ID;\n }\n if (id === VIRTUAL_REGISTRY_ID) {\n return RESOLVED_VIRTUAL_REGISTRY_ID;\n }\n if (id === VIRTUAL_BUILDER_ID) {\n return RESOLVED_VIRTUAL_BUILDER_ID;\n }\n },\n\n async load(id) {\n\n if (id === RESOLVED_VIRTUAL_TOOLS_ID) {\n const tools = await scanToolsDirectory(toolsDir);\n\n const toolsCode = tools\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => [\"${escapedError}\", null, async () => ({ status: \"error\", error: \"Tool validation failed\" })],`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import tool ${name}:', error);\n return [\"Failed to load tool: \" + error.message, null, async () => ({ status: \"error\", error: \"Import failed\" })];\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n const moduleCode = `// Virtual agent tools module\nexport const tools = {\n${toolsCode}\n};`;\n return moduleCode;\n }\n\n if (id === RESOLVED_VIRTUAL_ROUTES_ID) {\n // Scan user thread API directory\n const threadRoutes = scanApiDirectory(threadApiDir);\n\n // Generate user thread route registration code\n const threadRouteCode = threadRoutes\n .map(({ method, route, importPath }) => {\n const apiRoute = `/api/threads/:id${route}`;\n return ` addRoute(\n router,\n \"${method}\",\n \"${apiRoute}\",\n /* v${routesVersion} */ async () => (await import(\"${importPath}\")).default\n );`;\n })\n .join('\\n');\n\n return `// Inline rou3 router code (no external imports) /* v${routesVersion} */\n${rou3Code}\n\nimport { registerBuiltInRoutes } from \"@standardagents/builder/built-in-routes\";\nimport { config } from \"virtual:@standardagents-config\";\nimport { tools } from \"virtual:@standardagents-tools\";\nimport { hooks } from \"virtual:@standardagents-hooks\";\nimport { models, modelNames } from \"virtual:@standardagents-models\";\nimport { prompts, promptNames } from \"virtual:@standardagents-prompts\";\nimport { agents, agentNames } from \"virtual:@standardagents-agents\";\nimport { registry } from \"virtual:@standardagents-registry\";\nimport { requireAuth, createThreadEndpointHandler } from \"@standardagents/builder/runtime\";\nimport { isThreadEndpoint } from \"@standardagents/spec\";\n\nconst MOUNT_POINT = \"${mountPoint}\";\n\n// Routes that don't require authentication\nconst PUBLIC_ROUTES = [\n '/api/auth/login',\n '/api/auth/config',\n '/api/auth/oauth/github',\n '/api/auth/oauth/google',\n '/api/auth/oauth/github/callback',\n '/api/auth/oauth/google/callback',\n '/api/hooks' // Hook metadata is safe to expose publicly\n];\n\n// Check if a route is public (no auth required)\nfunction isPublicRoute(routePath) {\n // Exact match for auth routes\n if (PUBLIC_ROUTES.includes(routePath)) {\n return true;\n }\n\n // Thread routes are always public\n if (routePath.startsWith('/api/threads/') || routePath === '/api/threads') {\n return true;\n }\n\n // Provider icon routes are public (used by <img src>)\n if (routePath.startsWith('/api/providers/') && routePath.includes('/icon')) {\n return true;\n }\n\n return false;\n}\n\n// CORS headers for API responses\nconst CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, PATCH, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\n// Helper to create headers with CORS\nfunction corsHeaders(contentType) {\n return {\n \"Content-Type\": contentType,\n ...CORS_HEADERS,\n };\n}\n\n// Helper to add CORS headers to any Response without touching the body\nfunction addCorsHeaders(response) {\n // Skip WebSocket upgrade responses - they can't be wrapped\n if (response.status === 101) {\n return response;\n }\n\n // Skip if already has CORS headers\n if (response.headers.has(\"Access-Control-Allow-Origin\")) {\n return response;\n }\n\n // Create new headers with CORS added\n const newHeaders = new Headers(response.headers);\n for (const [key, value] of Object.entries(CORS_HEADERS)) {\n newHeaders.set(key, value);\n }\n\n // Return new Response with same body stream (not cloned, just transferred)\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: newHeaders,\n });\n}\n\nexport async function router(request, env) {\n const url = new URL(request.url);\n const pathname = url.pathname;\n\n // Check if request is under mount point\n if (!pathname.startsWith(MOUNT_POINT)) {\n return null;\n }\n\n // Handle CORS preflight requests\n if (request.method === \"OPTIONS\") {\n return new Response(null, {\n status: 204,\n headers: CORS_HEADERS,\n });\n }\n\n // Strip mount point prefix for route matching, ensuring we keep the leading slash\n let routePath = pathname.slice(MOUNT_POINT.length) || \"/\";\n if (!routePath.startsWith('/')) {\n routePath = '/' + routePath;\n }\n\n // Handle API routes\n const router = createRouter();\n\n // Register built-in API routes with runtime data\n registerBuiltInRoutes(router, { config, tools, hooks, models, modelNames, prompts, promptNames, agents, agentNames, registry });\n\n // Register user thread API routes\n${threadRouteCode}\n\n const routeMatch = findRoute(\n router,\n request.method.toUpperCase(),\n routePath\n );\n\n if (routeMatch) {\n // Check if authentication is required for this route\n const publicRoute = isPublicRoute(routePath);\n const isApiRoute = routePath.startsWith('/api/');\n\n let authContext = null;\n\n // Require authentication for all API routes except public ones\n if (isApiRoute && !publicRoute) {\n const authResult = await requireAuth(request, env);\n\n // If requireAuth returns a Response, it's an error (401)\n if (authResult instanceof Response) {\n return addCorsHeaders(authResult);\n }\n\n authContext = authResult;\n }\n\n let controller = await routeMatch.data();\n\n // Check if this is a thread endpoint (marked by defineThreadEndpoint)\n // If so, wrap it with createThreadEndpointHandler to provide ThreadState\n if (isThreadEndpoint(controller)) {\n controller = createThreadEndpointHandler(controller.__handler);\n }\n\n const context = {\n req: request,\n params: routeMatch.params || {},\n env: env,\n url: url,\n config,\n tools,\n auth: authContext, // Add auth context to controller context\n };\n const result = await controller(context);\n\n if (result instanceof Response) {\n return addCorsHeaders(result);\n }\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: corsHeaders(\"text/plain\"),\n });\n }\n // JSON responses get CORS headers\n return new Response(JSON.stringify(result), {\n headers: corsHeaders(\"application/json\"),\n });\n }\n\n // Serve UI for all other routes (SPA fallback)\n return serveUI(routePath, env);\n}\n\nasync function serveUI(pathname, env) {\n try {\n // Use Cloudflare Workers Assets binding (automatically created from wrangler assets config)\n if (env.ASSETS) {\n try {\n // Create a proper request for the asset path\n // Use a dummy origin since we only care about the path\n // Re-add mount point since pathname was stripped by router\n // Handle root mountPoint \"/\" specially to avoid double slashes\n const mountPrefix = MOUNT_POINT === \"/\" ? \"\" : MOUNT_POINT;\n const assetUrl = \\`http://localhost\\${mountPrefix}\\${pathname}\\`;\n let response = await env.ASSETS.fetch(assetUrl);\n\n // If not found, fall back to index.html for SPA routing\n const isIndexHtml = response.status === 404 || pathname === \"/\" || !pathname.includes(\".\");\n if (isIndexHtml) {\n response = await env.ASSETS.fetch(\\`http://localhost\\${mountPrefix}/index.html\\`);\n\n // Transform HTML to use configured mount point\n if (response.status === 200) {\n const html = await response.text();\n // Replace default /agents/ paths with configured mount point\n const modifiedHtml = html.replace(/\\\\/agents\\\\//g, \\`\\${MOUNT_POINT}/\\`);\n return new Response(modifiedHtml, {\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n },\n });\n }\n }\n\n return response;\n } catch (assetError) {\n console.error(\"Error fetching from ASSETS:\", assetError);\n }\n }\n\n // Fallback: proxy to UI dev server if explicitly configured\n if (env.UI_DEV_SERVER) {\n const assetPath = pathname === \"/\" ? \"/index.html\" : pathname;\n const response = await fetch(\\`\\${env.UI_DEV_SERVER}\\${assetPath}\\`);\n return response;\n }\n\n // In production/dev, assets should be served by Cloudflare Workers automatically\n // This function only handles fallback cases\n return null;\n } catch (error) {\n console.error(\"Error serving UI:\", error);\n return null;\n }\n}\n\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_HOOKS_ID) {\n const hooks = await scanHooksDirectory(hooksDir);\n\n // Generate hooks registry keyed by hook ID\n // Each hook loader returns the full hook definition { hook, id, execute }\n const hooksCode = hooks\n .map(({ id: hookId, hook, importPath }) => {\n return ` \"${hookId}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('[Hooks] Failed to import hook ${hookId}:', error);\n return null;\n }\n },`;\n })\n .join(\"\\n\");\n\n return `// Virtual agent hooks module\n// Hook registry keyed by hook ID\n// Each loader returns: { hook: string, id: string, execute: Function }\nexport const hooks = {\n${hooksCode}\n};`;\n }\n\n if (id === RESOLVED_VIRTUAL_CONFIG_ID) {\n // Get relative paths from cwd\n const relativeToolsDir = path.relative(process.cwd(), toolsDir).replace(/\\\\/g, \"/\");\n const relativeHooksDir = path.relative(process.cwd(), hooksDir).replace(/\\\\/g, \"/\");\n const relativeApiDir = path.relative(process.cwd(), threadApiDir).replace(/\\\\/g, \"/\");\n const relativeModelsDir = path.relative(process.cwd(), modelsDir).replace(/\\\\/g, \"/\");\n const relativePromptsDir = path.relative(process.cwd(), promptsDir).replace(/\\\\/g, \"/\");\n const relativeAgentsDir = path.relative(process.cwd(), agentsDir).replace(/\\\\/g, \"/\");\n\n return `// Virtual agent config module\nexport const config = {\n toolsDir: \"${relativeToolsDir}\",\n hooksDir: \"${relativeHooksDir}\",\n apiDir: \"${relativeApiDir}\",\n modelsDir: \"${relativeModelsDir}\",\n promptsDir: \"${relativePromptsDir}\",\n agentsDir: \"${relativeAgentsDir}\",\n mountPoint: \"${mountPoint}\",\n};`;\n }\n\n // Virtual modules for models, prompts, and agents\n if (id === RESOLVED_VIRTUAL_MODELS_ID) {\n const models = await scanModelsDirectory(modelsDir);\n\n const modelsCode = models\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import model ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent models module\nexport const models = {\n${modelsCode}\n};\n\nexport const modelNames = ${JSON.stringify(models.filter(m => !m.error).map(m => m.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_PROMPTS_ID) {\n const prompts = await scanPromptsDirectory(promptsDir);\n\n const promptsCode = prompts\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import prompt ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent prompts module\nexport const prompts = {\n${promptsCode}\n};\n\nexport const promptNames = ${JSON.stringify(prompts.filter(p => !p.error).map(p => p.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_AGENTS_ID) {\n console.log(`[vite-plugin-agent] load() called for agents module (v${agentsVersion})`);\n const agents = await scanAgentsDirectory(agentsDir);\n console.log(`[vite-plugin-agent] Found ${agents.length} agents:`, agents.map(a => a.name));\n\n const agentsCode = agents\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import agent ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent agents module /* v${agentsVersion} */\nexport const agents = {\n${agentsCode}\n};\n\nexport const agentNames = ${JSON.stringify(agents.filter(a => !a.error).map(a => a.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_EFFECTS_ID) {\n const effects = await scanEffectsDirectory(effectsDir);\n\n const effectsCode = effects\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import effect ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent effects module\nexport const effects = {\n${effectsCode}\n};\n\nexport const effectNames = ${JSON.stringify(effects.filter(e => !e.error).map(e => e.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_PROVIDERS_ID) {\n // First-party providers (always available)\n const firstPartyProviders = [\n { name: 'openai', package: '@standardagents/openai', label: 'OpenAI', envKey: 'OPENAI_API_KEY' },\n { name: 'openrouter', package: '@standardagents/openrouter', label: 'OpenRouter', envKey: 'OPENROUTER_API_KEY' },\n ];\n\n // Custom providers from plugin options\n const customProviders = (options.providers || []).map(pkg => ({\n name: pkg.split('/').pop() || pkg,\n package: pkg,\n label: pkg.split('/').pop() || pkg,\n envKey: `${(pkg.split('/').pop() || pkg).toUpperCase().replace(/-/g, '_')}_API_KEY`,\n isCustom: true,\n }));\n\n const allProviders = [...firstPartyProviders, ...customProviders];\n\n return `// Virtual providers module - lists available LLM provider packages\nexport const providers = ${JSON.stringify(allProviders, null, 2)};\n\nexport const providerNames = ${JSON.stringify(allProviders.map(p => p.name))};\n\n// Provider factories - dynamic imports for code splitting\nexport const providerFactories = {\n${allProviders.map(p => ` \"${p.name}\": async () => (await import(\"${p.package}\")).${p.name},`).join('\\n')}\n};\n`;\n }\n\n // Namespaced registry virtual module: virtual:@standardagents-registry\n // Provides global namespace + packed package namespaces for namespace isolation\n if (id === RESOLVED_VIRTUAL_REGISTRY_ID) {\n console.log(`[vite-plugin-agent] load() called for registry module (v${registryVersion})`);\n const tools = await scanToolsDirectory(toolsDir);\n const hooks = await scanHooksDirectory(hooksDir);\n const models = await scanModelsDirectory(modelsDir);\n const prompts = await scanPromptsDirectory(promptsDir);\n const agents = await scanAgentsDirectory(agentsDir);\n\n // Helper to convert relative paths to absolute paths\n const toAbsolutePath = (relativePath: string) => {\n if (relativePath.startsWith('./')) {\n return path.resolve(process.cwd(), relativePath).replace(/\\\\/g, '/');\n }\n return relativePath;\n };\n\n // Generate global namespace loaders\n const globalToolsCode = tools\n .filter(t => !t.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalPromptsCode = prompts\n .filter(p => !p.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalModelsCode = models\n .filter(m => !m.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalAgentsCode = agents\n .filter(a => !a.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalHooksCode = hooks\n .map(({ id, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${id}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n // Scan for packed packages (local agents/packed/ directory)\n // Note: npm package scanning would require additional logic\n const packedDir = path.resolve(process.cwd(), 'agents/packed');\n const packedPackages: Array<{\n packageId: string;\n version: string;\n entryAgents: string[];\n items: {\n agents: Array<{ name: string; path: string }>;\n prompts: Array<{ name: string; path: string }>;\n tools: Array<{ name: string; path: string }>;\n models: Array<{ name: string; path: string }>;\n hooks: Array<{ name: string; path: string }>;\n };\n }> = [];\n\n if (fs.existsSync(packedDir)) {\n console.log(`[vite-plugin-agent] Scanning packed directory: ${packedDir}`);\n const pkgDirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n console.log(`[vite-plugin-agent] Found package dirs: ${pkgDirs.join(', ')}`);\n\n for (const pkgDirName of pkgDirs) {\n const pkgPath = path.join(packedDir, pkgDirName);\n const pkgJsonPath = path.join(pkgPath, 'package.json');\n\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n console.log(`[vite-plugin-agent] Loaded ${pkgDirName} package.json, standardagent:`, pkgJson.standardagent);\n\n // Check for standardagent field (new Rollup-based format)\n if (!pkgJson.standardagent) {\n continue; // Not a packed agent package\n }\n\n // Derive the output directory from package.json main field\n // e.g., \"./dist/index.js\" -> \"dist\", \"./src/index.js\" -> \"src\"\n const mainEntry = pkgJson.main || './dist/index.js';\n const outputDir = path.dirname(mainEntry).replace(/^\\.\\//, '');\n\n const scanPackedDir = async (subDir: string) => {\n const fullPath = path.join(pkgPath, outputDir, subDir);\n if (!fs.existsSync(fullPath)) return [];\n\n const files = fs.readdirSync(fullPath)\n .filter(f => f.endsWith('.js') || f.endsWith('.ts'))\n .map(f => ({\n name: f.replace(/\\.(js|ts)$/, ''),\n path: path.join(fullPath, f).replace(/\\\\/g, '/'),\n }));\n return files;\n };\n\n const pkg = {\n packageId: pkgJson.name,\n version: pkgJson.version,\n entryAgents: pkgJson.standardagent.entryAgents || [],\n items: {\n agents: await scanPackedDir('agents'),\n prompts: await scanPackedDir('prompts'),\n tools: await scanPackedDir('tools'),\n models: await scanPackedDir('models'),\n hooks: await scanPackedDir('hooks'),\n },\n };\n console.log(`[vite-plugin-agent] Scanned package ${pkgJson.name}:`, pkg.items.agents);\n packedPackages.push(pkg);\n } catch (err) {\n console.warn(`[vite-plugin-agent] Failed to load packed package ${pkgDirName}:`, err);\n }\n }\n }\n } else {\n console.log(`[vite-plugin-agent] Packed directory does not exist: ${packedDir}`);\n }\n console.log(`[vite-plugin-agent] Total packed packages found: ${packedPackages.length}`);\n\n // Generate packed packages code\n const packagesCode = packedPackages.map(pkg => {\n const signature = JSON.stringify({\n packageId: pkg.packageId,\n version: pkg.version,\n source: 'local',\n packedAt: Date.now(),\n });\n\n const genLoaders = (items: Array<{ name: string; path: string }>) =>\n items.map(item =>\n ` \"${item.name}\": async () => {\n const mod = await import(\"${item.path}\");\n return { ...mod.default, __package: ${signature} };\n },`\n ).join(\"\\n\");\n\n return ` \"${pkg.packageId}\": {\n agents: {\n${genLoaders(pkg.items.agents)}\n },\n prompts: {\n${genLoaders(pkg.items.prompts)}\n },\n tools: {\n${genLoaders(pkg.items.tools)}\n },\n models: {\n${genLoaders(pkg.items.models)}\n },\n hooks: {\n${genLoaders(pkg.items.hooks)}\n },\n entryAgents: ${JSON.stringify(pkg.entryAgents)},\n signature: ${signature},\n },`;\n }).join(\"\\n\");\n\n return `// Virtual namespaced registry module /* v${registryVersion} */\n// Provides global namespace + packed package namespaces for namespace isolation\n\nexport const registry = {\n global: {\n agents: {\n${globalAgentsCode}\n },\n prompts: {\n${globalPromptsCode}\n },\n tools: {\n${globalToolsCode}\n },\n models: {\n${globalModelsCode}\n },\n hooks: {\n${globalHooksCode}\n },\n },\n packages: {\n${packagesCode}\n },\n};\n\n// Helper to get all visible agent names (global + entry points)\nexport function getVisibleAgentNames() {\n const globalAgents = Object.keys(registry.global.agents);\n const entryPoints = Object.values(registry.packages)\n .flatMap(pkg => pkg.entryAgents);\n return [...new Set([...globalAgents, ...entryPoints])];\n}\n\n// Helper to get all visible tool names (global only - packed tools are internal)\nexport function getVisibleToolNames() {\n return Object.keys(registry.global.tools);\n}\n`;\n }\n\n // Consolidated virtual module: virtual:@standardagents/builder\n // Exports DurableThread and DurableAgentBuilder classes with methods already implemented\n if (id === RESOLVED_VIRTUAL_BUILDER_ID) {\n const tools = await scanToolsDirectory(toolsDir);\n const hooks = await scanHooksDirectory(hooksDir);\n const models = await scanModelsDirectory(modelsDir);\n const prompts = await scanPromptsDirectory(promptsDir);\n const agents = await scanAgentsDirectory(agentsDir);\n const effects = await scanEffectsDirectory(effectsDir);\n\n // Helper to convert relative paths to absolute paths\n // Virtual modules need absolute paths since relative paths are resolved against the virtual module location\n const toAbsolutePath = (relativePath: string) => {\n if (relativePath.startsWith('./')) {\n return path.resolve(process.cwd(), relativePath).replace(/\\\\/g, '/');\n }\n return relativePath;\n };\n\n // Generate tools code\n const toolsCode = tools\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => [\"${escapedError}\", null, async () => ({ status: \"error\", error: \"Tool validation failed\" })],`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import tool ${name}:', error);\n return [\"Failed to load tool: \" + error.message, null, async () => ({ status: \"error\", error: \"Import failed\" })];\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate hooks code\n const hooksCode = hooks\n .map(({ id, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${id}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('[Hooks] Failed to import hook ${id}:', error);\n return null;\n }\n },`;\n })\n .join(\"\\n\");\n\n // Generate models code\n const modelsCode = models\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import model ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate prompts code\n const promptsCode = prompts\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import prompt ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate agents code\n const agentsCode = agents\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import agent ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate effects code\n const effectsCode = effects\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import effect ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Consolidated virtual module: virtual:@standardagents/builder\n// Provides DurableThread, DurableAgentBuilder, and router\nimport { DurableThread as _BaseDurableThread } from '@standardagents/builder/runtime';\nimport { DurableAgentBuilder as _BaseDurableAgentBuilder } from '@standardagents/builder/runtime';\n\n// Import sip WASM module and initializer\n// Static import allows workerd to pre-compile the WASM at bundle time\n// WASM is bundled in builder's dist to avoid transitive dependency resolution issues\nimport _sipWasm from '@standardagents/builder/dist/sip.wasm';\nimport { initWithWasmModule as _initSipWasm } from '@standardagents/sip';\n\n// Re-export router from virtual:@standardagents-routes\nexport { router } from 'virtual:@standardagents-routes';\n\n// Import namespaced registry for packed agent support\nimport { registry as _registry } from 'virtual:@standardagents-registry';\n\n// Registry objects\nconst _tools = {\n${toolsCode}\n};\n\nconst _hooks = {\n${hooksCode}\n};\n\nconst _models = {\n${modelsCode}\n};\n\nconst _prompts = {\n${promptsCode}\n};\n\nconst _agents = {\n${agentsCode}\n};\n\nconst _effects = {\n${effectsCode}\n};\n\n/**\n * DurableThread with all virtual module methods already implemented.\n * Simply extend this class in your agents/Thread.ts file.\n */\nexport class DurableThread extends _BaseDurableThread {\n constructor(ctx, env) {\n super(ctx, env);\n // Initialize sip WASM in DO constructor\n // blockConcurrencyWhile ensures WASM is ready before handling any requests\n // Pass the statically imported WASM module for workerd to pre-compile\n ctx.blockConcurrencyWhile(async () => {\n await _initSipWasm(_sipWasm);\n });\n }\n\n tools() {\n return _tools;\n }\n\n hooks() {\n return _hooks;\n }\n\n models() {\n return _models;\n }\n\n prompts() {\n return _prompts;\n }\n\n agents() {\n return _agents;\n }\n\n effects() {\n return _effects;\n }\n\n registry() {\n return _registry;\n }\n}\n\n/**\n * DurableAgentBuilder with all virtual module methods already implemented.\n * Simply extend this class in your agents/AgentBuilder.ts file.\n */\nexport class DurableAgentBuilder extends _BaseDurableAgentBuilder {\n tools() {\n return _tools;\n }\n\n hooks() {\n return _hooks;\n }\n\n models() {\n return _models;\n }\n\n prompts() {\n return _prompts;\n }\n\n agents() {\n return _agents;\n }\n\n effects() {\n return _effects;\n }\n\n registry() {\n return _registry;\n }\n}\n`;\n }\n },\n\n buildStart() {\n // Generate types on startup\n regenerateTypes();\n\n // Watch all directories\n this.addWatchFile(toolsDir);\n this.addWatchFile(threadApiDir);\n this.addWatchFile(hooksDir);\n this.addWatchFile(modelsDir);\n this.addWatchFile(promptsDir);\n this.addWatchFile(agentsDir);\n this.addWatchFile(effectsDir);\n },\n\n configureServer(server) {\n // Watch for new files being added\n server.watcher.on(\"add\", async (file) => {\n handleFileChange(file, server);\n });\n\n // Watch for files being deleted\n server.watcher.on(\"unlink\", (file) => {\n handleFileChange(file, server);\n });\n\n // Add middleware to serve AgentBuilder UI\n // This emulates how Cloudflare Workers Assets binding works in production\n server.middlewares.use(async (req, res, next) => {\n const url = req.url;\n\n // Check if request is under mount point\n if (!url || !url.startsWith(mountPoint)) {\n next();\n return;\n }\n\n // Strip mount point prefix, ensuring we keep the leading slash\n let pathWithoutMount = url.slice(mountPoint.length) || '/';\n if (!pathWithoutMount.startsWith('/')) {\n pathWithoutMount = '/' + pathWithoutMount;\n }\n\n // Handle dev-only API routes that require filesystem access\n // These endpoints write to the filesystem and must be handled in Node.js\n const method = req.method?.toUpperCase();\n\n // POST /api/models - Create a new model\n if (pathWithoutMount === '/api/models' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformModelData(rawBody);\n const validationError = validateModelData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if model already exists\n if (modelExists(modelsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Model '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await saveModel(modelsDir, body, false);\n\n if (result.success) {\n // Reload the models virtual module to reflect the new model\n await reloadModelsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n model: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create model' }));\n return;\n }\n }\n\n // PUT /api/models/:name - Update an existing model\n // Use (.+) to capture model names with slashes (e.g., x-ai/grok-4-fast)\n const modelPutMatch = pathWithoutMount.match(/^\\/api\\/models\\/(.+)$/);\n if (modelPutMatch && method === 'PUT') {\n try {\n const urlModelName = decodeURIComponent(modelPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformModelData(rawBody);\n\n // Check if name in body differs from URL (name change requested)\n const newName = body.name;\n const isNameChange = newName && newName !== urlModelName;\n\n const validationError = validateModelData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n let updatedPrompts: string[] = [];\n\n if (isNameChange) {\n // Rename the model file first\n const renameResult = await renameModel(modelsDir, urlModelName, newName);\n if (!renameResult.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: renameResult.error }));\n return;\n }\n\n // Cascade update: update model references in all prompts\n updatedPrompts = await updateModelReferencesInPrompts(promptsDir, urlModelName, newName);\n }\n\n // Save the updated model data\n const result = await saveModel(modelsDir, body, true);\n\n if (result.success) {\n // Reload the models virtual module to reflect the changes\n await reloadModelsModule(server);\n\n // If prompts were updated due to cascade, reload prompts module too\n if (updatedPrompts.length > 0) {\n await reloadPromptsModule(server);\n }\n\n // Reload router to pick up new module bindings\n await reloadRouterModule(server);\n\n // Small delay to ensure filesystem operations are fully flushed\n await new Promise(resolve => setTimeout(resolve, 100));\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n model: body,\n filePath: result.filePath,\n ...(isNameChange && { renamed: { from: urlModelName, to: newName }, updatedPrompts }),\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update model' }));\n return;\n }\n }\n\n // DELETE /api/models/:name - Delete a model\n // Use (.+) to capture model names with slashes (e.g., x-ai/grok-4-fast)\n const modelDeleteMatch = pathWithoutMount.match(/^\\/api\\/models\\/(.+)$/);\n if (modelDeleteMatch && method === 'DELETE') {\n try {\n const modelName = decodeURIComponent(modelDeleteMatch[1]);\n const result = await deleteModel(modelsDir, modelName);\n\n if (result.success) {\n // Reload the models virtual module to reflect the deletion\n await reloadModelsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: modelName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete model' }));\n return;\n }\n }\n\n // POST /api/prompts - Create a new prompt\n if (pathWithoutMount === '/api/prompts' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformPromptData(rawBody);\n const validationError = validatePromptData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if prompt already exists\n if (promptExists(promptsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Prompt '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await savePrompt(promptsDir, body, false);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the new prompt\n await reloadPromptsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n prompt: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create prompt' }));\n return;\n }\n }\n\n // PUT /api/prompts/:name - Update an existing prompt\n const promptPutMatch = pathWithoutMount.match(/^\\/api\\/prompts\\/([^/]+)$/);\n if (promptPutMatch && method === 'PUT') {\n try {\n const urlPromptName = decodeURIComponent(promptPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformPromptData(rawBody);\n\n // Check if name in body differs from URL (name change requested)\n const newName = body.name;\n const isNameChange = newName && newName !== urlPromptName;\n\n const validationError = validatePromptData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n let updatedPrompts: string[] = [];\n let updatedAgents: string[] = [];\n\n if (isNameChange) {\n // Rename the prompt file first\n const renameResult = await renamePrompt(promptsDir, urlPromptName, newName);\n if (!renameResult.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: renameResult.error }));\n return;\n }\n\n // Cascade update: update prompt references in other prompts (tools array)\n updatedPrompts = await updatePromptReferencesInPrompts(promptsDir, urlPromptName, newName);\n\n // Cascade update: update prompt references in agents (defaultPrompt field)\n updatedAgents = await updatePromptReferencesInAgents(agentsDir, urlPromptName, newName);\n }\n\n // Save the updated prompt data (will overwrite the renamed file)\n const result = await savePrompt(promptsDir, body, true);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the changes\n await reloadPromptsModule(server);\n\n // If agents were updated due to cascade, reload agents module too\n if (updatedAgents.length > 0) {\n await reloadAgentsModule(server);\n }\n\n // Reload router to pick up new module bindings\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n prompt: body,\n filePath: result.filePath,\n ...(isNameChange && { renamed: { from: urlPromptName, to: newName }, updatedPrompts, updatedAgents }),\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update prompt' }));\n return;\n }\n }\n\n // DELETE /api/prompts/:name - Delete a prompt\n const promptDeleteMatch = pathWithoutMount.match(/^\\/api\\/prompts\\/([^/]+)$/);\n if (promptDeleteMatch && method === 'DELETE') {\n try {\n const promptName = decodeURIComponent(promptDeleteMatch[1]);\n const result = await deletePrompt(promptsDir, promptName);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the deletion\n await reloadPromptsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: promptName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete prompt' }));\n return;\n }\n }\n\n // POST /api/agents - Create a new agent\n if (pathWithoutMount === '/api/agents' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformAgentData(rawBody);\n const validationError = validateAgentData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if agent already exists\n if (agentExists(agentsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Agent '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await saveAgent(agentsDir, body, false);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the new agent\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n agent: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create agent' }));\n return;\n }\n }\n\n // PUT /api/agents/:name - Update an existing agent\n const agentPutMatch = pathWithoutMount.match(/^\\/api\\/agents\\/([^/]+)$/);\n if (agentPutMatch && method === 'PUT') {\n try {\n const agentName = decodeURIComponent(agentPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformAgentData(rawBody);\n\n // Ensure the name in the body matches the URL (or use URL name)\n body.name = agentName;\n\n const validationError = validateAgentData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // For updates, the agent should exist (but we allow overwrite)\n const result = await saveAgent(agentsDir, body, true);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the changes\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n agent: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update agent' }));\n return;\n }\n }\n\n // DELETE /api/agents/:name - Delete an agent\n const agentDeleteMatch = pathWithoutMount.match(/^\\/api\\/agents\\/([^/]+)$/);\n if (agentDeleteMatch && method === 'DELETE') {\n try {\n const agentName = decodeURIComponent(agentDeleteMatch[1]);\n const result = await deleteAgent(agentsDir, agentName);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the deletion\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: agentName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete agent' }));\n return;\n }\n }\n\n // GET /api/pack/:agentName/analyze - Analyze agent for packing\n const packAnalyzeMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/analyze$/);\n if (packAnalyzeMatch && method === 'GET') {\n try {\n const agentName = decodeURIComponent(packAnalyzeMatch[1]);\n const packingService = new PackingService();\n const rootDir = process.cwd();\n\n const analysis = await packingService.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: analysis.errors.join('\\n'),\n warnings: analysis.warnings,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(analysis));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to analyze agent' }));\n return;\n }\n }\n\n // POST /api/pack/:agentName - Pack an agent\n const packMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)$/);\n if (packMatch && method === 'POST') {\n try {\n const agentName = decodeURIComponent(packMatch[1]);\n const body = await parseRequestBody(req) as {\n itemSelections?: ItemSelection[];\n version?: string;\n packageId?: string;\n packageName?: string;\n license?: string;\n licenseOwner?: string;\n };\n\n const packingService = new PackingService();\n const rootDir = process.cwd();\n const outputDir = path.join(rootDir, 'agents', 'packed');\n\n const result = await packingService.pack({\n agentName,\n rootDir,\n outputDir,\n version: body.version,\n packageId: body.packageId,\n packageName: body.packageName,\n license: body.license,\n licenseOwner: body.licenseOwner,\n itemSelections: body.itemSelections,\n });\n\n if (!result.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: result.error,\n warnings: result.warnings,\n }));\n return;\n }\n\n // Reload modules after packing to pick up changes\n // Order matters: reload dependencies first, then routes module last\n // (routes imports from all the others)\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(result));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to pack agent' }));\n return;\n }\n }\n\n // DELETE /api/pack/:packageId - Delete a local packed agent\n const packDeleteMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)$/);\n if (packDeleteMatch && method === 'DELETE') {\n try {\n const packageId = decodeURIComponent(packDeleteMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n // Find the package\n const packages = await unpackingService.listPackages(rootDir);\n const pkg = packages.find(p => p.packageId === packageId);\n\n if (!pkg) {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Package not found: ${packageId}` }));\n return;\n }\n\n if (pkg.source !== 'local') {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'Cannot delete npm packages. Use npm uninstall instead.' }));\n return;\n }\n\n // Delete the package directory\n const fs = await import('node:fs');\n fs.rmSync(pkg.path, { recursive: true, force: true });\n\n // Reload modules after deletion to pick up changes\n // Order matters: reload dependencies first, then routes module last\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ success: true, packageId }));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete package' }));\n return;\n }\n }\n\n // GET /api/pack/:packageId/download - Download packed agent as tarball\n const packDownloadMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/download$/);\n if (packDownloadMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(packDownloadMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n // Find the package\n const packages = await unpackingService.listPackages(rootDir);\n const pkg = packages.find(p => p.packageId === packageId);\n\n if (!pkg) {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Package not found: ${packageId}` }));\n return;\n }\n\n // Create tarball using native tar command\n const { spawn } = await import('child_process');\n const parentDir = path.dirname(pkg.path);\n const dirName = path.basename(pkg.path);\n\n res.setHeader('Content-Type', 'application/gzip');\n res.setHeader('Content-Disposition', `attachment; filename=\"${packageId}.tar.gz\"`);\n\n const tar = spawn('tar', ['-czf', '-', '-C', parentDir, dirName]);\n tar.stdout.pipe(res);\n tar.stderr.on('data', (data) => console.error('tar error:', data.toString()));\n tar.on('error', (err) => {\n console.error('Failed to spawn tar:', err);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'Failed to create tarball' }));\n }\n });\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to download package' }));\n return;\n }\n }\n\n // GET /api/pack/:packageId/packed-info - Get packed package info for publish preview\n const packInfoMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/packed-info$/);\n if (packInfoMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(packInfoMatch[1]);\n const packingService = new PackingService();\n const rootDir = process.cwd();\n\n const info = packingService.getPackedInfo(packageId, rootDir);\n\n if (!info) {\n const availablePackages = packingService.listPackedPackages(rootDir);\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: `Packed package not found: ${packageId}`,\n availablePackages,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(info));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to read package info' }));\n return;\n }\n }\n\n // POST /api/pack/:packageId/publish - Publish packed agent to npm\n const packPublishMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/publish$/);\n if (packPublishMatch && method === 'POST') {\n try {\n const packageId = decodeURIComponent(packPublishMatch[1]);\n const body = await parseRequestBody(req) as {\n token?: string;\n registry?: string;\n dryRun?: boolean;\n };\n\n const rootDir = process.cwd();\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n if (!fs.existsSync(packedDir)) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'No packed packages found. Pack the agent first.' }));\n return;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: `Package not found: ${packageId}. Available packages: ${dirs.join(', ') || 'none'}`\n }));\n return;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Get token from request body, environment, or .dev.vars file\n let token = body.token || process.env.NPM_TOKEN;\n let tokenSource = body.token ? 'provided' : 'environment';\n\n // If no token yet, try reading from .dev.vars file\n if (!token) {\n const devVarsPath = path.join(rootDir, '.dev.vars');\n if (fs.existsSync(devVarsPath)) {\n const devVars = fs.readFileSync(devVarsPath, 'utf-8');\n const match = devVars.match(/^NPM_TOKEN=(.+)$/m);\n if (match) {\n token = match[1].trim();\n tokenSource = 'environment';\n }\n }\n }\n\n if (!token) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: 'npm token is required. Either provide a token in the request or set NPM_TOKEN in your .dev.vars or .env file.'\n }));\n return;\n }\n\n const publishService = new NpmPublishService();\n const result = await publishService.publish({\n packageDir,\n token,\n registry: body.registry,\n dryRun: body.dryRun,\n });\n\n if (!result.success) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error, output: result.output }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n packageName: result.packageName,\n version: result.version,\n output: result.output,\n url: publishService.getPackageUrl(result.packageName!, body.registry),\n tokenSource,\n }));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to publish package' }));\n return;\n }\n }\n\n // GET /api/unpack/:packageId/analyze - Analyze package for unpacking\n const unpackAnalyzeMatch = pathWithoutMount.match(/^\\/api\\/unpack\\/([^/]+)\\/analyze$/);\n if (unpackAnalyzeMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(unpackAnalyzeMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n const analysis = await unpackingService.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: analysis.errors.join('\\n'),\n warnings: analysis.warnings,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(analysis));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to analyze package' }));\n return;\n }\n }\n\n // POST /api/unpack/:packageId - Unpack a package\n const unpackMatch = pathWithoutMount.match(/^\\/api\\/unpack\\/([^/]+)$/);\n if (unpackMatch && method === 'POST') {\n try {\n const packageId = decodeURIComponent(unpackMatch[1]);\n const body = await parseRequestBody(req) as {\n itemSelections?: UnpackItemSelection[];\n deletePackage?: boolean;\n };\n\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n const result = await unpackingService.unpack({\n packageId,\n rootDir,\n deletePackage: body.deletePackage,\n itemSelections: body.itemSelections,\n });\n\n if (!result.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: result.error,\n warnings: result.warnings,\n }));\n return;\n }\n\n // Reload modules after unpacking to pick up new files\n // Order matters: reload dependencies first, then routes module last\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(result));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to unpack package' }));\n return;\n }\n }\n\n // Let other API routes pass through to the worker\n if (pathWithoutMount.startsWith('/api/')) {\n next();\n return;\n }\n\n // Check for UI dev server proxy mode (for HMR during development)\n // Only proxy non-API routes (UI assets, SPA routes)\n const uiDevServer = process.env.UI_DEV_SERVER;\n if (uiDevServer && !pathWithoutMount.startsWith('/api/')) {\n // In HMR mode, proxy UI requests to the Vite dev server\n // pathWithoutMount already has leading slash (e.g., '/index.html')\n // UI dev server runs with VITE_BASE matching our mountPoint\n const targetUrl = `${uiDevServer}${pathWithoutMount}`;\n try {\n const proxyRes = await fetch(targetUrl);\n res.statusCode = proxyRes.status;\n\n // Forward response headers (except those that shouldn't be forwarded)\n proxyRes.headers.forEach((value, key) => {\n if (!['content-encoding', 'transfer-encoding'].includes(key.toLowerCase())) {\n res.setHeader(key, value);\n }\n });\n\n const body = await proxyRes.arrayBuffer();\n res.end(Buffer.from(body));\n return;\n } catch (error) {\n console.error('[agentbuilder] Failed to proxy to UI dev server:', error);\n // Fall through to static file serving as fallback\n }\n }\n\n // Check if this is a static asset request\n const isStaticAsset = pathWithoutMount.startsWith('/assets/') ||\n pathWithoutMount.startsWith('/vendor.js') ||\n pathWithoutMount.startsWith('/vue.js') ||\n pathWithoutMount.startsWith('/monaco.js') ||\n pathWithoutMount.startsWith('/index.js') ||\n pathWithoutMount.startsWith('/index.css') ||\n pathWithoutMount.match(/\\.(js|css|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|ico)$/);\n\n // For static assets, serve the actual file\n // For all other routes (including SPA routes like /login, /threads, etc.), serve index.html\n const shouldServeUI = true;\n\n if (shouldServeUI) {\n // Serve from the built client directory\n // Client is always at dist/client relative to package root\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const clientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n let filePath: string;\n if (isStaticAsset) {\n // For static assets, serve the actual file\n const cleanUrl = pathWithoutMount.split('?')[0];\n filePath = path.join(clientDir, cleanUrl);\n } else {\n // For all other routes (SPA routes), serve index.html\n filePath = path.join(clientDir, 'index.html');\n }\n\n try {\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath);\n\n // Inject mount point config into HTML\n const ext = path.extname(filePath).toLowerCase();\n if (ext === '.html') {\n const configScript = `<script>window.__AGENTBUILDER_CONFIG__ = { mountPoint: \"${mountPoint}\" };</script>`;\n let htmlContent = content.toString();\n\n // Transform asset paths from default /agents/ to configured mount point\n // Handle special case where mountPoint is '/' to avoid double slashes\n const assetPrefix = mountPoint === '/' ? '/' : `${mountPoint}/`;\n htmlContent = htmlContent.replace(/\\/agents\\//g, assetPrefix);\n\n // Inject config\n htmlContent = htmlContent.replace('</head>', `${configScript}</head>`);\n\n content = Buffer.from(htmlContent);\n }\n\n // Set appropriate MIME type\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.ttf': 'font/ttf',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n };\n\n const contentType = mimeTypes[ext] || 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.end(content);\n return;\n }\n } catch (error) {\n console.error('Error serving AgentBuilder UI:', error);\n }\n }\n\n next();\n });\n },\n\n handleHotUpdate({ file, server }) {\n handleFileChange(file, server);\n },\n\n writeBundle(options, bundle) {\n // In production build, copy client files to user's dist directory\n // Files go to dist/client/{mountPath} to match ASSETS binding expectations\n const outDir = options.dir || 'dist';\n // Put client files in a 'client' subdirectory, preserving mountPath structure\n // This ensures ASSETS can find files at the expected paths (e.g., /agentbuilder/index.html)\n const mountPath = mountPoint.slice(1); // \"agentbuilder\" or \"\"\n const mountDir = mountPath\n ? path.join(outDir, '../client', mountPath) // dist/client/agentbuilder\n : path.join(outDir, '../client'); // dist/client\n\n // Locate the client directory\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const clientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n if (!fs.existsSync(clientDir)) {\n console.warn(`[agentbuilder] Client directory not found at ${clientDir}`);\n return;\n }\n\n // Create mount directory\n fs.mkdirSync(mountDir, { recursive: true });\n\n // Copy all client files recursively\n function copyRecursive(src: string, dest: string) {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n fs.mkdirSync(destPath, { recursive: true });\n copyRecursive(srcPath, destPath);\n } else {\n let content = fs.readFileSync(srcPath);\n\n // Inject mount point config into index.html\n if (entry.name === 'index.html') {\n const configScript = `<script>window.__AGENTBUILDER_CONFIG__ = { mountPoint: \"${mountPoint}\" };</script>`;\n let htmlContent = content.toString();\n\n // Transform asset paths from default /agents/ to configured mount point\n // Handle special case where mountPoint is '/' to avoid double slashes\n const assetPrefix = mountPoint === '/' ? '/' : `${mountPoint}/`;\n htmlContent = htmlContent.replace(/\\/agents\\//g, assetPrefix);\n\n // Inject config\n htmlContent = htmlContent.replace('</head>', `${configScript}</head>`);\n\n content = Buffer.from(htmlContent);\n }\n\n fs.writeFileSync(destPath, content);\n }\n }\n }\n\n copyRecursive(clientDir, mountDir);\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/sdk/generateTypes.ts","../src/sdk/generators/generateModelFile.ts","../src/sdk/generators/jsonSchemaToZod.ts","../src/sdk/generators/generatePromptFile.ts","../src/sdk/generators/generateAgentFile.ts","../src/sdk/persistence/index.ts","../src/packing/metadata-service.ts","../src/packing/ast-utils.ts","../src/packing/packing-service.ts","../src/packing/discovery.ts","../src/packing/unpacking-service.ts","../src/packing/npm-publish-service.ts","../src/plugin.ts"],"names":["fs","path","escapeString","path3","fs3","patch","path4","fs4","path5","fs5","path6","fs6","pkgJsonPath","path7","fs7","resolve","id","outputDir","options"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;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":"plugin.js","sourcesContent":["/**\n * Type generation module for AgentBuilder.\n *\n * Generates TypeScript declaration files that provide compile-time\n * type safety for model, prompt, agent, and tool references.\n *\n * @module\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * Configuration for directory scanning.\n */\nexport interface DirectoryConfig {\n modelsDir: string;\n promptsDir: string;\n agentsDir: string;\n toolsDir: string;\n hooksDir: string;\n outputDir: string;\n}\n\n/**\n * Content of the generated tsconfig.json for the .agents directory.\n */\nconst TSCONFIG_CONTENT = `{\n \"compilerOptions\": {\n \"composite\": true,\n \"declaration\": true,\n \"declarationMap\": true,\n \"skipLibCheck\": true,\n \"strict\": true,\n \"moduleResolution\": \"bundler\",\n \"module\": \"ESNext\",\n \"target\": \"ESNext\"\n },\n \"include\": [\"types.d.ts\", \"virtual-module.d.ts\"]\n}\n`;\n\n/**\n * Result of scanning a prompt file, including name and schema fields.\n */\nexport interface PromptScanResult {\n name: string;\n schemaFields: string[];\n}\n\n/**\n * Result of scanning an agent file, including name and side_a prompt.\n */\nexport interface AgentScanResult {\n name: string;\n sideAPrompt: string | null;\n}\n\n/**\n * Extract schema field names from a Zod object definition in file content.\n *\n * Matches patterns like:\n * - z.object({ fieldName: z.string(), ... })\n * - z.object({ field_name: z.number().optional(), ... })\n *\n * @param content - File content to scan\n * @returns Array of field names found in the schema\n */\nexport function extractSchemaFields(content: string): string[] {\n const fields: string[] = [];\n\n // Find requiredSchema: z.object({ ... }) pattern\n // This regex captures the content inside z.object({ ... })\n const schemaMatch = content.match(/requiredSchema:\\s*z\\.object\\(\\s*\\{([^}]+)\\}/s);\n if (!schemaMatch) {\n return fields;\n }\n\n const schemaContent = schemaMatch[1];\n\n // Extract field names - matches: fieldName: z.xxx or 'field-name': z.xxx\n // Handles both identifier and string keys\n const fieldMatches = schemaContent.matchAll(/(?:['\"]([^'\"]+)['\"]|(\\w+))\\s*:/g);\n for (const match of fieldMatches) {\n const fieldName = match[1] || match[2];\n if (fieldName && !fieldName.startsWith('z.')) {\n fields.push(fieldName);\n }\n }\n\n return fields;\n}\n\n/**\n * Scan a directory for prompts and extract names and schema fields.\n *\n * @param dir - Directory to scan\n * @returns Array of prompt scan results with names and schema fields\n */\nexport function scanPromptsWithSchemas(dir: string): PromptScanResult[] {\n const results: PromptScanResult[] = [];\n\n if (!fs.existsSync(dir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract name\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n const name = nameMatch[1];\n const schemaFields = extractSchemaFields(content);\n results.push({ name, schemaFields });\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning prompts directory ${dir}:`, error);\n }\n\n return results;\n}\n\n/**\n * Scan a directory for agents and extract names and side_a prompt references.\n *\n * @param dir - Directory to scan\n * @returns Array of agent scan results with names and side_a prompts\n */\nexport function scanAgentsWithSideA(dir: string): AgentScanResult[] {\n const results: AgentScanResult[] = [];\n\n if (!fs.existsSync(dir)) {\n return results;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract agent name\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n const name = nameMatch[1];\n\n // Extract sideA.prompt or side_a_agent_prompt\n let sideAPrompt: string | null = null;\n\n // Try sideA: { prompt: 'xxx' } pattern\n const sideAMatch = content.match(/sideA:\\s*\\{[^}]*prompt:\\s*['\"]([^'\"]+)['\"]/);\n if (sideAMatch) {\n sideAPrompt = sideAMatch[1];\n }\n\n results.push({ name, sideAPrompt });\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning agents directory ${dir}:`, error);\n }\n\n return results;\n}\n\n/**\n * Scan a directory for TypeScript files and extract the definition names.\n *\n * This function reads each .ts file and extracts the `name` property from\n * the defineX() call. It uses a simple regex pattern to avoid full parsing.\n *\n * @param dir - Directory to scan\n * @param useFilename - If true, use filename as the name (for tools that don't have name property)\n * @returns Array of definition names found\n */\nexport function scanForNames(dir: string, useFilename: boolean = false): string[] {\n const names: string[] = [];\n\n if (!fs.existsSync(dir)) {\n return names;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n if (useFilename) {\n // For tools: use the filename (without extension) as the tool name\n // Convert underscores to match convention (e.g., my_tool.ts -> my_tool)\n const toolName = entry.name.replace(/\\.ts$/, '');\n // Verify the file actually exports a tool (contains defineTool)\n if (content.includes('defineTool')) {\n names.push(toolName);\n }\n } else {\n // Extract name from defineX({ name: 'xxx', ... })\n // Matches: name: 'xxx' or name: \"xxx\"\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n names.push(nameMatch[1]);\n }\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning directory ${dir}:`, error);\n }\n\n return names;\n}\n\n/**\n * Scan hooks directory and extract hook IDs from defineHook({ id: '...' }) calls.\n *\n * @param dir - Directory to scan\n * @returns Array of hook IDs found\n */\nexport function scanHooksForIds(dir: string): string[] {\n const hookIds: string[] = [];\n\n if (!fs.existsSync(dir)) {\n return hookIds;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n // Skip index.ts - it's a utility module, not a hook\n if (entry.name === 'index.ts') {\n continue;\n }\n\n const filePath = path.join(dir, entry.name);\n const content = fs.readFileSync(filePath, 'utf-8');\n\n // Extract id from defineHook({ ... id: 'xxx' ... })\n // Match: id: 'xxx' or id: \"xxx\"\n const idMatch = content.match(/defineHook\\s*\\(\\s*\\{[^}]*id:\\s*['\"]([^'\"]+)['\"]/s);\n if (idMatch) {\n hookIds.push(idMatch[1]);\n }\n }\n }\n } catch (error) {\n console.error(`Error scanning hooks directory ${dir}:`, error);\n }\n\n return hookIds;\n}\n\n/**\n * Generate interface properties from an array of string names.\n * Each name becomes a property with value `true`.\n *\n * @param names - Array of string names\n * @returns TypeScript interface properties string\n */\nfunction generateRegistryProperties(names: string[]): string {\n if (names.length === 0) {\n return '';\n }\n\n return names.map((n) => `'${n}': true;`).join('\\n ');\n}\n\n/**\n * Generate schema registry properties from prompt scan results and agent mappings.\n *\n * @param promptResults - Array of prompt scan results\n * @param agentResults - Array of agent scan results\n * @returns TypeScript interface properties string for PromptSchemaRegistry\n */\nfunction generateSchemaRegistryProperties(\n promptResults: PromptScanResult[],\n agentResults: AgentScanResult[]\n): string {\n const entries: string[] = [];\n\n // Create a map of prompt names to their schema fields\n const promptSchemaMap = new Map<string, string[]>();\n for (const prompt of promptResults) {\n if (prompt.schemaFields.length > 0) {\n promptSchemaMap.set(prompt.name, prompt.schemaFields);\n }\n }\n\n // Add prompt entries\n for (const prompt of promptResults) {\n if (prompt.schemaFields.length > 0) {\n const fieldsUnion = prompt.schemaFields.map(f => `'${f}'`).join(' | ');\n entries.push(`'${prompt.name}': ${fieldsUnion};`);\n }\n }\n\n // Add agent entries (map to their side_a prompt's schema)\n for (const agent of agentResults) {\n if (agent.sideAPrompt) {\n const schemaFields = promptSchemaMap.get(agent.sideAPrompt);\n if (schemaFields && schemaFields.length > 0) {\n const fieldsUnion = schemaFields.map(f => `'${f}'`).join(' | ');\n entries.push(`'${agent.name}': ${fieldsUnion};`);\n }\n }\n }\n\n return entries.join('\\n ');\n}\n\n/**\n * Generate the types.d.ts content for the .agents directory.\n *\n * This generates a namespace augmentation that overrides the default `string`\n * types in the StandardAgentSpec namespace with specific union types based on\n * the user's defined models, prompts, agents, and tools.\n *\n * @param config - Directory configuration\n * @returns The generated TypeScript declaration content\n */\nexport function generateTypesContent(config: DirectoryConfig): string {\n const models = scanForNames(config.modelsDir);\n const promptResults = scanPromptsWithSchemas(config.promptsDir);\n const agentResults = scanAgentsWithSideA(config.agentsDir);\n // Tools use filename as name since defineTool doesn't have a name property\n const tools = scanForNames(config.toolsDir, true);\n // Hooks use id from defineHook({ id: '...' })\n const hookIds = scanHooksForIds(config.hooksDir);\n\n // Extract just the names for registries\n const prompts = promptResults.map(p => p.name);\n const agents = agentResults.map(a => a.name);\n\n // Generate the callables union from all three sources\n const callables = [...prompts, ...agents, ...tools];\n\n return `// Auto-generated by @standardagents/builder - DO NOT EDIT\n// Generated at: ${new Date().toISOString()}\n//\n// This file augments the StandardAgentSpec namespace declared in @standardagents/spec\n// to provide type-safe references for your models, prompts, agents, tools, and hooks.\n\n/**\n * Augment the global StandardAgentSpec namespace with your project's specific types.\n * This provides autocomplete and type checking for model, prompt, agent, tool, and hook references.\n *\n * Uses interface declaration merging with property keys to create union types.\n * Example: interface ModelRegistry { 'gpt-4o': true; } gives type Models = 'gpt-4o'\n */\ndeclare global {\n namespace StandardAgentSpec {\n /** Model names from agents/models/ */\n interface ModelRegistry {\n ${generateRegistryProperties(models)}\n }\n\n /** Prompt names from agents/prompts/ */\n interface PromptRegistry {\n ${generateRegistryProperties(prompts)}\n }\n\n /** Agent names from agents/agents/ */\n interface AgentRegistry {\n ${generateRegistryProperties(agents)}\n }\n\n /** Tool names from agents/tools/ */\n interface ToolRegistry {\n ${generateRegistryProperties(tools)}\n }\n\n /** All callable items (prompts, agents, tools) that can be used as tools */\n interface CallableRegistry {\n ${generateRegistryProperties(callables)}\n }\n\n /** Hook IDs from agents/hooks/ */\n interface HookIdRegistry {\n ${generateRegistryProperties(hookIds)}\n }\n\n /** Schema field names for prompts and agents (used for initUserMessageProperty autocomplete) */\n interface PromptSchemaRegistry {\n ${generateSchemaRegistryProperties(promptResults, agentResults)}\n }\n }\n}\n\n// This export is required for TypeScript to treat this as a module\n// and allow the declare global to work properly\nexport {};\n`;\n}\n\n/**\n * Generate the virtual-module.d.ts content for the .agents directory.\n *\n * This provides type declarations for the virtual:@standardagents/builder module.\n * It must be in a separate file (without export {}) to work as an ambient module declaration.\n *\n * @returns The generated TypeScript declaration content\n */\nexport function generateVirtualModuleContent(): string {\n return `// Auto-generated by @standardagents/builder - DO NOT EDIT\n//\n// Type declarations for the virtual:@standardagents/builder module.\n// This file must NOT have any exports to work as an ambient module declaration.\n\n/**\n * Type declarations for the consolidated virtual module.\n * This module provides DurableThread and DurableAgentBuilder classes\n * with all virtual module methods (tools, hooks, models, prompts, agents)\n * already implemented, plus the router function.\n */\ndeclare module 'virtual:@standardagents/builder' {\n import type { DurableThread as BaseDurableThread } from '@standardagents/builder/runtime';\n import type { DurableAgentBuilder as BaseDurableAgentBuilder } from '@standardagents/builder/runtime';\n import type { ThreadEnv } from '@standardagents/builder/runtime';\n\n // ============================================================\n // Message Types\n // ============================================================\n\n export interface ThreadMessage {\n id: string;\n role: string;\n content: string | null;\n name: string | null;\n tool_calls: string | null;\n tool_call_id: string | null;\n tool_status: 'success' | 'error' | null;\n log_id: string | null;\n created_at: number;\n silent: boolean;\n parent_id: string | null;\n depth: number;\n status: 'pending' | 'completed' | 'failed' | null;\n reasoning_content: string | null;\n reasoning_details: string | null;\n }\n\n export interface GetMessagesResult {\n messages: ThreadMessage[];\n total: number;\n hasMore: boolean;\n }\n\n // ============================================================\n // Log Types\n // ============================================================\n\n export interface ThreadLog {\n id: string;\n message_id: string;\n provider: string;\n model: string;\n model_name: string | null;\n prompt_name: string | null;\n tools_called: string | null;\n parent_log_id: string | null;\n retry_of_log_id: string | null;\n error: string | null;\n cost_total: number | null;\n is_complete: boolean;\n created_at: number;\n request_body: string | null;\n }\n\n export interface GetLogsResult {\n logs: ThreadLog[];\n total: number;\n hasMore: boolean;\n }\n\n export interface ThreadLogDetails extends ThreadLog {\n endpoint: string | null;\n request_headers: string | null;\n response_body: string | null;\n response_headers: string | null;\n status_code: number | null;\n reasoning_content: string | null;\n input_tokens: number | null;\n cached_tokens: number | null;\n output_tokens: number | null;\n reasoning_tokens: number | null;\n total_tokens: number | null;\n latency_ms: number | null;\n time_to_first_token_ms: number | null;\n finish_reason: string | null;\n error_type: string | null;\n cost_input: number | null;\n cost_output: number | null;\n message_history_length: number | null;\n tools_available: number | null;\n tools_schema: string | null;\n message_history: string | null;\n system_prompt: string | null;\n errors: string | null;\n tool_results: string | null;\n }\n\n // ============================================================\n // Thread Metadata Types\n // ============================================================\n\n export interface ThreadMetaResult {\n thread: {\n id: string;\n agent_id: string;\n user_id: string | null;\n tags: string[];\n created_at: number;\n };\n agent: {\n id: string;\n title: string;\n type: string;\n side_a_label?: string;\n side_b_label?: string;\n } | null;\n stats: {\n message_count: number;\n log_count: number;\n };\n }\n\n // ============================================================\n // DurableThread Class\n // ============================================================\n\n /**\n * DurableThread with all virtual module methods pre-implemented.\n * Extend this class in your agents/Thread.ts file.\n *\n * @example\n * \\`\\`\\`typescript\n * import { DurableThread } from 'virtual:@standardagents/builder'\n *\n * export class Thread extends DurableThread {}\n * \\`\\`\\`\n */\n export class DurableThread extends BaseDurableThread {\n // Virtual module registry methods\n tools(): Record<string, () => Promise<any>>;\n hooks(): Record<string, () => Promise<any>>;\n models(): Record<string, () => Promise<any>>;\n prompts(): Record<string, () => Promise<any>>;\n agents(): Record<string, () => Promise<any>>;\n\n // Lookup methods\n loadModel(name: string): Promise<any>;\n getModelNames(): string[];\n loadPrompt(name: string): Promise<any>;\n getPromptNames(): string[];\n loadAgent(name: string): Promise<any>;\n getAgentNames(): string[];\n\n // Execution methods\n execute(\n threadId: string,\n agentId: string,\n initial_messages?: any[],\n data?: any\n ): Promise<Response>;\n sendMessage(\n threadId: string,\n content: string,\n role?: string\n ): Promise<Response>;\n stop(): Promise<Response>;\n shouldStop(): Promise<boolean>;\n\n // Message methods\n getMessages(\n limit?: number,\n offset?: number,\n order?: 'ASC' | 'DESC',\n includeSilent?: boolean,\n maxDepth?: number\n ): Promise<GetMessagesResult>;\n deleteMessage(messageId: string): Promise<{ success: boolean; error?: string }>;\n seedMessages(args: {\n messages: Array<{\n id: string;\n role: string;\n content: string;\n created_at: number;\n }>;\n }): Promise<{ success: boolean; count?: number; error?: string }>;\n\n // Log methods\n getLogs(\n limit?: number,\n offset?: number,\n order?: 'ASC' | 'DESC'\n ): Promise<GetLogsResult>;\n getLogDetails(logId: string): Promise<ThreadLogDetails>;\n\n // Thread management methods\n getThreadMeta(threadId: string): Promise<ThreadMetaResult>;\n updateThreadMeta(\n threadId: string,\n params: UpdateThreadParams\n ): Promise<{\n success: boolean;\n error?: string;\n thread?: {\n id: string;\n agent_id: string;\n user_id: string | null;\n tags: string[];\n created_at: number;\n };\n }>;\n deleteThread(): Promise<{ success: boolean; message: string }>;\n\n // WebSocket/fetch handler\n fetch(request: Request): Promise<Response>;\n }\n\n // ============================================================\n // DurableAgentBuilder Types\n // ============================================================\n\n export interface ThreadRegistryEntry {\n id: string;\n agent_name: string;\n user_id: string | null;\n tags: string[] | null;\n created_at: number;\n }\n\n export interface UpdateThreadParams {\n agent_name?: string;\n user_id?: string | null;\n tags?: string[] | null;\n }\n\n export interface User {\n id: string;\n username: string;\n password_hash: string;\n role: 'admin';\n created_at: number;\n updated_at: number;\n }\n\n export interface Provider {\n name: string;\n sdk: string;\n api_key: string;\n }\n\n // ============================================================\n // DurableAgentBuilder Class\n // ============================================================\n\n /**\n * DurableAgentBuilder with all virtual module methods pre-implemented.\n * Extend this class in your agents/AgentBuilder.ts file.\n *\n * @example\n * \\`\\`\\`typescript\n * import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n *\n * export class AgentBuilder extends DurableAgentBuilder {}\n * \\`\\`\\`\n */\n export class DurableAgentBuilder extends BaseDurableAgentBuilder {\n // Virtual module registry methods\n tools(): Record<string, () => Promise<any>>;\n hooks(): Record<string, () => Promise<any>>;\n models(): Record<string, () => Promise<any>>;\n prompts(): Record<string, () => Promise<any>>;\n agents(): Record<string, () => Promise<any>>;\n\n // Lookup methods\n loadModel(name: string): Promise<any>;\n getModelNames(): string[];\n loadPrompt(name: string): Promise<any>;\n getPromptNames(): string[];\n loadAgent(name: string): Promise<any>;\n getAgentNames(): string[];\n\n // Thread registry methods\n createThread(params: {\n agent_name: string;\n user_id?: string;\n tags?: string[];\n }): Promise<ThreadRegistryEntry>;\n getThread(id: string): Promise<ThreadRegistryEntry | null>;\n listThreads(params?: {\n agent_name?: string;\n user_id?: string;\n search?: string;\n startDate?: number;\n endDate?: number;\n limit?: number;\n offset?: number;\n }): Promise<{ threads: ThreadRegistryEntry[]; total: number }>;\n deleteThread(id: string): Promise<boolean>;\n updateThreadAgent(id: string, agent_name: string): Promise<boolean>;\n updateThread(id: string, params: UpdateThreadParams): Promise<ThreadRegistryEntry | null>;\n getThreadStub(threadId: string): DurableObjectStub;\n\n // Provider methods\n getProvider(name: string): Promise<Provider | null>;\n setProvider(provider: Provider): Promise<void>;\n listProviders(): Promise<Provider[]>;\n deleteProvider(name: string): Promise<boolean>;\n\n // User methods\n getUserByUsername(username: string): Promise<User | null>;\n getUserById(id: string): Promise<User | null>;\n createUser(params: {\n username: string;\n password_hash: string;\n role?: 'admin';\n }): Promise<User>;\n hasUsers(): Promise<boolean>;\n listUsers(): Promise<Array<{\n id: string;\n username: string;\n role: 'admin';\n created_at: number;\n updated_at: number;\n }>>;\n updateUser(\n id: string,\n params: {\n username?: string;\n password_hash?: string;\n role?: 'admin';\n }\n ): Promise<User | null>;\n deleteUser(id: string): Promise<boolean>;\n\n // Session methods\n createSession(params: {\n user_id: string;\n token_hash: string;\n expires_at: number;\n }): Promise<string>;\n validateSession(tokenHash: string): Promise<{ user_id: string; expires_at: number } | null>;\n cleanupSessions(): Promise<number>;\n deleteSession(tokenHash: string): Promise<void>;\n\n // API key methods\n createApiKey(params: {\n name: string;\n key_hash: string;\n key_prefix: string;\n last_five: string;\n user_id: string;\n }): Promise<string>;\n validateApiKey(keyHash: string): Promise<{ user_id: string; id: string } | null>;\n listApiKeys(userId: string): Promise<Array<{\n id: string;\n name: string;\n key_prefix: string;\n last_five: string;\n created_at: number;\n last_used_at: number | null;\n }>>;\n deleteApiKey(id: string, userId: string): Promise<boolean>;\n\n // OAuth methods\n linkOAuthAccount(params: {\n user_id: string;\n provider: 'github' | 'google';\n provider_user_id: string;\n provider_username?: string;\n }): Promise<void>;\n findUserByOAuth(\n provider: 'github' | 'google',\n providerUserId: string\n ): Promise<User | null>;\n\n // Edit lock methods (for GitHub integration)\n acquireEditLock(params: {\n locked_by: string;\n lock_reason: string;\n }): Promise<boolean>;\n releaseEditLock(lockedBy: string): Promise<boolean>;\n getEditLockState(): Promise<{\n locked: boolean;\n locked_by: string | null;\n locked_at: number | null;\n lock_reason: string | null;\n pending_changes: string | null;\n }>;\n setPendingChanges(changes: string): Promise<void>;\n\n // WebSocket/fetch handler\n fetch(request: Request): Promise<Response>;\n }\n\n // ============================================================\n // Router Function\n // ============================================================\n\n /**\n * Main router function for handling incoming requests.\n * Routes requests to the appropriate API endpoint or serves the UI.\n *\n * @example\n * \\`\\`\\`typescript\n * import { router } from 'virtual:@standardagents/builder'\n *\n * export default {\n * async fetch(request: Request, env: Env) {\n * const response = await router(request, env);\n * return response ?? new Response('Not Found', { status: 404 });\n * }\n * }\n * \\`\\`\\`\n */\n export function router<Env extends ThreadEnv = ThreadEnv>(\n request: Request,\n env: Env\n ): Promise<Response | null>;\n}\n\n/**\n * Legacy alias for the router module.\n * @deprecated Use \\`import { router } from 'virtual:@standardagents/builder'\\` instead.\n */\ndeclare module 'virtual:@standardagents/router' {\n import type { ThreadEnv } from '@standardagents/builder/runtime';\n\n export function router<Env extends ThreadEnv = ThreadEnv>(\n request: Request,\n env: Env\n ): Promise<Response | null>;\n\n export { DurableThread } from 'virtual:@standardagents/builder';\n}\n`;\n}\n\n/**\n * Ensure a directory exists, creating it if necessary.\n *\n * @param dir - Directory path to ensure exists\n */\nfunction ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n}\n\n/**\n * Generate the .agents directory with type declarations.\n *\n * Creates or updates:\n * - .agents/types.d.ts - Type declarations for all definitions (with export {})\n * - .agents/virtual-module.d.ts - Virtual module declarations (ambient, no export)\n * - .agents/tsconfig.json - TypeScript configuration\n * - .agents/.gitignore - Ignore all generated files\n *\n * @param config - Directory configuration\n */\nexport function generateTypes(config: DirectoryConfig): void {\n ensureDir(config.outputDir);\n\n // Generate types.d.ts (global namespace augmentation - needs export {})\n const typesContent = generateTypesContent(config);\n fs.writeFileSync(path.join(config.outputDir, 'types.d.ts'), typesContent);\n\n // Generate virtual-module.d.ts (ambient module declaration - no export)\n const virtualModuleContent = generateVirtualModuleContent();\n fs.writeFileSync(path.join(config.outputDir, 'virtual-module.d.ts'), virtualModuleContent);\n\n // Generate tsconfig.json\n fs.writeFileSync(path.join(config.outputDir, 'tsconfig.json'), TSCONFIG_CONTENT);\n\n // Generate .gitignore to ignore all generated files\n fs.writeFileSync(path.join(config.outputDir, '.gitignore'), '*\\n');\n}\n\n/**\n * Check if type generation is needed based on file modification times.\n *\n * @param config - Directory configuration\n * @returns True if types need regeneration\n */\nexport function needsRegeneration(config: DirectoryConfig): boolean {\n const typesPath = path.join(config.outputDir, 'types.d.ts');\n\n // If types file doesn't exist, we need to generate\n if (!fs.existsSync(typesPath)) {\n return true;\n }\n\n const typesMtime = fs.statSync(typesPath).mtime;\n\n // Check if any source directory has newer files\n const dirs = [config.modelsDir, config.promptsDir, config.agentsDir, config.toolsDir, config.hooksDir];\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) {\n continue;\n }\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith('.ts')) {\n const filePath = path.join(dir, entry.name);\n const fileMtime = fs.statSync(filePath).mtime;\n if (fileMtime > typesMtime) {\n return true;\n }\n }\n }\n }\n\n return false;\n}\n\n/**\n * Get default directory configuration based on a base directory.\n *\n * @param baseDir - Base directory (usually process.cwd())\n * @param options - Optional overrides for directory paths\n * @returns Complete directory configuration\n */\nexport function getDefaultConfig(\n baseDir: string,\n options: Partial<DirectoryConfig> = {}\n): DirectoryConfig {\n return {\n modelsDir: options.modelsDir ?? path.join(baseDir, 'agents/models'),\n promptsDir: options.promptsDir ?? path.join(baseDir, 'agents/prompts'),\n agentsDir: options.agentsDir ?? path.join(baseDir, 'agents/agents'),\n toolsDir: options.toolsDir ?? path.join(baseDir, 'agents/tools'),\n hooksDir: options.hooksDir ?? path.join(baseDir, 'agents/hooks'),\n outputDir: options.outputDir ?? path.join(baseDir, '.agents'),\n };\n}\n","import type { ModelDefinition } from '../defineModel.js';\n\n/**\n * Options for generating a model file.\n */\nexport interface GenerateModelFileOptions {\n /** The provider export name (e.g., 'openai', 'openrouter') */\n providerName: string;\n /** The provider package (e.g., '@standardagents/openai') */\n providerPackage: string;\n}\n\n/**\n * Generate a TypeScript file for a model definition.\n *\n * @param data - The model definition data\n * @param options - Provider import options (required since providers are functions)\n */\nexport function generateModelFile(data: ModelDefinition, options: GenerateModelFileOptions): string {\n const { providerName, providerPackage } = options;\n\n const lines = [\n `import { defineModel } from '@standardagents/spec';`,\n `import { ${providerName} } from '${providerPackage}';`,\n '',\n `export default defineModel({`,\n ` name: '${escapeString(data.name)}',`,\n ` provider: ${providerName},`,\n ` model: '${escapeString(data.model)}',`,\n ];\n\n if (data.includedProviders && data.includedProviders.length > 0) {\n lines.push(` includedProviders: ${JSON.stringify(data.includedProviders)},`);\n }\n\n if (data.fallbacks && data.fallbacks.length > 0) {\n lines.push(` fallbacks: ${JSON.stringify(data.fallbacks)},`);\n }\n\n if (data.providerTools && data.providerTools.length > 0) {\n lines.push(` providerTools: ${JSON.stringify(data.providerTools)},`);\n }\n\n if (data.inputPrice !== undefined) {\n lines.push(` inputPrice: ${data.inputPrice},`);\n }\n\n if (data.outputPrice !== undefined) {\n lines.push(` outputPrice: ${data.outputPrice},`);\n }\n\n if (data.cachedPrice !== undefined) {\n lines.push(` cachedPrice: ${data.cachedPrice},`);\n }\n\n // Add capabilities if defined\n if (data.capabilities && Object.keys(data.capabilities).length > 0) {\n const caps = data.capabilities;\n const capLines: string[] = [];\n\n if (caps.supportsImages !== undefined) {\n capLines.push(` supportsImages: ${caps.supportsImages},`);\n }\n if (caps.supportsToolCalls !== undefined) {\n capLines.push(` supportsToolCalls: ${caps.supportsToolCalls},`);\n }\n if (caps.supportsStreaming !== undefined) {\n capLines.push(` supportsStreaming: ${caps.supportsStreaming},`);\n }\n if (caps.supportsJsonMode !== undefined) {\n capLines.push(` supportsJsonMode: ${caps.supportsJsonMode},`);\n }\n if (caps.maxContextTokens !== undefined) {\n capLines.push(` maxContextTokens: ${caps.maxContextTokens},`);\n }\n if (caps.maxOutputTokens !== undefined) {\n capLines.push(` maxOutputTokens: ${caps.maxOutputTokens},`);\n }\n if (caps.reasoningLevels !== undefined) {\n capLines.push(` reasoningLevels: ${JSON.stringify(caps.reasoningLevels)},`);\n }\n\n if (capLines.length > 0) {\n lines.push(` capabilities: {`);\n lines.push(...capLines);\n lines.push(` },`);\n }\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\\\/g, '\\\\\\\\');\n}\n","/**\n * Converts JSON Schema to Zod code string.\n *\n * This is used when saving prompts from the UI - the form editor works with\n * JSON Schema, but we need to generate Zod code for the TypeScript file.\n */\n\nexport interface JSONSchema {\n type?: string;\n description?: string;\n properties?: Record<string, JSONSchema>;\n required?: string[];\n items?: JSONSchema;\n enum?: (string | number | boolean)[];\n anyOf?: JSONSchema[];\n oneOf?: JSONSchema[];\n allOf?: JSONSchema[];\n const?: any;\n default?: any;\n minimum?: number;\n maximum?: number;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n format?: string;\n additionalProperties?: boolean | JSONSchema;\n nullable?: boolean;\n}\n\n/**\n * Convert a JSON Schema to Zod code string.\n *\n * @param schema - The JSON Schema to convert\n * @param indent - Current indentation level (for pretty printing)\n * @returns Zod code as a string\n *\n * @example\n * ```typescript\n * const schema = {\n * type: 'object',\n * properties: {\n * name: { type: 'string', description: 'User name' },\n * age: { type: 'number' }\n * },\n * required: ['name']\n * };\n *\n * jsonSchemaToZod(schema);\n * // Returns: z.object({ name: z.string().describe('User name'), age: z.number().optional() })\n * ```\n */\nexport function jsonSchemaToZod(schema: JSONSchema, indent = 0): string {\n if (!schema || Object.keys(schema).length === 0) {\n return 'z.any()';\n }\n\n // Handle anyOf (union types)\n if (schema.anyOf && schema.anyOf.length > 0) {\n const types = schema.anyOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n return `z.union([${types.join(', ')}])`;\n }\n\n // Handle oneOf (similar to anyOf for our purposes)\n if (schema.oneOf && schema.oneOf.length > 0) {\n const types = schema.oneOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n return `z.union([${types.join(', ')}])`;\n }\n\n // Handle allOf (intersection types - merge objects)\n if (schema.allOf && schema.allOf.length > 0) {\n const types = schema.allOf.map((s) => jsonSchemaToZod(s, indent));\n if (types.length === 1) {\n return types[0];\n }\n // For allOf, we use .and() to intersect\n return types.reduce((acc, t) => `${acc}.and(${t})`);\n }\n\n // Handle const\n if (schema.const !== undefined) {\n return `z.literal(${JSON.stringify(schema.const)})`;\n }\n\n // Handle enum\n if (schema.enum && schema.enum.length > 0) {\n const values = schema.enum.map((v) => JSON.stringify(v));\n if (values.length === 1) {\n return `z.literal(${values[0]})`;\n }\n return `z.enum([${values.join(', ')}])`;\n }\n\n // Handle by type\n switch (schema.type) {\n case 'string':\n return buildStringSchema(schema);\n\n case 'number':\n case 'integer':\n return buildNumberSchema(schema);\n\n case 'boolean':\n return addDescription('z.boolean()', schema.description);\n\n case 'null':\n return addDescription('z.null()', schema.description);\n\n case 'array':\n return buildArraySchema(schema, indent);\n\n case 'object':\n return buildObjectSchema(schema, indent);\n\n default:\n // No type specified - use any\n return 'z.any()';\n }\n}\n\nfunction buildStringSchema(schema: JSONSchema): string {\n let code = 'z.string()';\n\n // Add constraints\n if (schema.minLength !== undefined) {\n code += `.min(${schema.minLength})`;\n }\n if (schema.maxLength !== undefined) {\n code += `.max(${schema.maxLength})`;\n }\n if (schema.pattern) {\n code += `.regex(/${escapeRegex(schema.pattern)}/)`;\n }\n\n // Handle format (common JSON Schema formats)\n if (schema.format) {\n switch (schema.format) {\n case 'email':\n code += '.email()';\n break;\n case 'uri':\n case 'url':\n code += '.url()';\n break;\n case 'uuid':\n code += '.uuid()';\n break;\n case 'date-time':\n code += '.datetime()';\n break;\n case 'date':\n code += '.date()';\n break;\n case 'time':\n code += '.time()';\n break;\n case 'ipv4':\n code += '.ip({ version: \"v4\" })';\n break;\n case 'ipv6':\n code += '.ip({ version: \"v6\" })';\n break;\n // Other formats are ignored\n }\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction buildNumberSchema(schema: JSONSchema): string {\n let code = schema.type === 'integer' ? 'z.number().int()' : 'z.number()';\n\n if (schema.minimum !== undefined) {\n code += `.min(${schema.minimum})`;\n }\n if (schema.maximum !== undefined) {\n code += `.max(${schema.maximum})`;\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction buildArraySchema(schema: JSONSchema, indent: number): string {\n const itemsSchema = schema.items ? jsonSchemaToZod(schema.items, indent) : 'z.any()';\n let code = `z.array(${itemsSchema})`;\n\n return addDescription(code, schema.description);\n}\n\nfunction buildObjectSchema(schema: JSONSchema, indent: number): string {\n if (!schema.properties || Object.keys(schema.properties).length === 0) {\n // Empty object or object with any properties\n if (schema.additionalProperties === false) {\n return addDescription('z.object({})', schema.description);\n }\n return addDescription('z.record(z.any())', schema.description);\n }\n\n const required = new Set(schema.required || []);\n const spaces = ' '.repeat(indent + 1);\n const closingSpaces = ' '.repeat(indent);\n\n const props = Object.entries(schema.properties).map(([key, propSchema]) => {\n let propCode = jsonSchemaToZod(propSchema, indent + 1);\n\n // Handle nullable\n if (propSchema.nullable) {\n propCode += '.nullable()';\n }\n\n // Add optional() if not in required array\n if (!required.has(key)) {\n propCode += '.optional()';\n }\n\n // Handle default values\n if (propSchema.default !== undefined) {\n propCode += `.default(${JSON.stringify(propSchema.default)})`;\n }\n\n return `${spaces}${safePropertyKey(key)}: ${propCode}`;\n });\n\n const propsStr = props.join(',\\n');\n let code = `z.object({\\n${propsStr}\\n${closingSpaces}})`;\n\n // Handle additionalProperties\n if (schema.additionalProperties === false) {\n code += '.strict()';\n }\n\n return addDescription(code, schema.description);\n}\n\nfunction addDescription(code: string, description?: string): string {\n if (description) {\n return `${code}.describe(${JSON.stringify(description)})`;\n }\n return code;\n}\n\nfunction escapeRegex(pattern: string): string {\n // Escape forward slashes for regex literal\n return pattern.replace(/\\//g, '\\\\/');\n}\n\nfunction safePropertyKey(key: string): string {\n // Check if key is a valid JS identifier\n if (/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key)) {\n return key;\n }\n // Otherwise quote it\n return JSON.stringify(key);\n}\n\n/**\n * Check if a JSON Schema is empty or trivial (no meaningful constraints).\n */\nexport function isEmptySchema(schema: JSONSchema | null | undefined): boolean {\n if (!schema) return true;\n if (Object.keys(schema).length === 0) return true;\n\n // A schema with only type: object and empty properties is considered empty\n if (\n schema.type === 'object' &&\n (!schema.properties || Object.keys(schema.properties).length === 0) &&\n (!schema.required || schema.required.length === 0)\n ) {\n return true;\n }\n\n return false;\n}\n","import type { PromptDefinition, PromptPart, StructuredPrompt } from '../definePrompt.js';\nimport { jsonSchemaToZod, isEmptySchema, type JSONSchema } from './jsonSchemaToZod.js';\n\n/**\n * Tool configuration from UI (snake_case).\n */\ninterface ToolConfigInput {\n name: string;\n include_text_response?: boolean;\n include_tool_calls?: boolean;\n include_errors?: boolean;\n init_user_message_property?: string | null;\n init_attachments_property?: string | null;\n tenvs?: Record<string, unknown>;\n}\n\n/**\n * Prompt part as it comes from the UI/API.\n * Supports both new format (type: 'text'/'include') and legacy format (type: 'string'/'prompt')\n */\ninterface PromptPartInput {\n // New format\n type: 'text' | 'include' | 'string' | 'prompt' | 'variable';\n content?: string; // For type: 'text'\n prompt?: string; // For type: 'include'\n // Legacy format\n value?: string; // For legacy type: 'string' or 'variable'\n id?: string; // For legacy type: 'prompt'\n label?: string; // Legacy UI field\n schema?: any; // Legacy field from UI, ignored\n}\n\n/**\n * Input data for generating a prompt file.\n * This can include JSON Schema for requiredSchema which will be converted to Zod.\n */\nexport interface PromptFileData {\n name: string;\n toolDescription?: string;\n /**\n * Prompt content can be:\n * - A plain string\n * - A structured array of prompt parts\n * - A JSON string of a structured array (legacy format from UI)\n */\n prompt?: string | PromptPartInput[];\n model: string;\n includeChat?: boolean;\n includePastTools?: boolean;\n parallelToolCalls?: boolean;\n toolChoice?: 'auto' | 'none' | 'required';\n tools?: (string | ToolConfigInput)[];\n reasoning?: {\n effort?: 'low' | 'medium' | 'high';\n maxTokens?: number;\n exclude?: boolean;\n include?: boolean;\n };\n /**\n * Required schema as JSON Schema (from the UI).\n * Will be converted to Zod code.\n */\n requiredSchema?: JSONSchema;\n /**\n * Hook IDs to associate with this prompt.\n */\n hooks?: string[];\n}\n\n/**\n * Generate a TypeScript file for a prompt definition.\n *\n * @param data - Prompt data including JSON Schema for requiredSchema\n * @returns TypeScript code as a string\n */\nexport function generatePromptFile(data: PromptFileData): string {\n const hasSchema = data.requiredSchema && !isEmptySchema(data.requiredSchema);\n\n const lines = [`import { definePrompt } from '@standardagents/spec';`];\n\n // Add zod import if there's a requiredSchema with actual content\n if (hasSchema) {\n lines.push(`import { z } from 'zod';`);\n }\n\n lines.push('');\n lines.push(`export default definePrompt({`);\n lines.push(` name: '${escapeString(data.name)}',`);\n\n if (data.toolDescription) {\n lines.push(` toolDescription: '${escapeString(data.toolDescription)}',`);\n }\n\n // Prompt content - either plain string or structured array\n if (data.prompt !== undefined) {\n const promptCode = formatPromptContent(data.prompt);\n lines.push(` prompt: ${promptCode},`);\n }\n\n lines.push(` model: '${escapeString(data.model)}',`);\n\n // Note: exposeAsTool removed - all prompts are exposed as tools by default\n\n if (data.includeChat !== undefined) {\n lines.push(` includeChat: ${data.includeChat},`);\n }\n\n if (data.includePastTools !== undefined) {\n lines.push(` includePastTools: ${data.includePastTools},`);\n }\n\n if (data.parallelToolCalls !== undefined) {\n lines.push(` parallelToolCalls: ${data.parallelToolCalls},`);\n }\n\n if (data.toolChoice && data.toolChoice !== 'auto') {\n lines.push(` toolChoice: '${data.toolChoice}',`);\n }\n\n // Tools - can be strings or ToolConfig objects (including ai_human agent names for handoffs)\n if (data.tools && data.tools.length > 0) {\n const toolsCode = formatToolsArray(data.tools);\n lines.push(` tools: ${toolsCode},`);\n }\n\n // Reasoning config - output as TypeScript object (no quoted keys)\n if (data.reasoning && hasNonNullProperties(data.reasoning)) {\n const reasoningCode = formatReasoningConfig(data.reasoning);\n lines.push(` reasoning: ${reasoningCode},`);\n }\n\n // Hooks - array of hook IDs\n if (data.hooks && data.hooks.length > 0) {\n const hooksCode = data.hooks.map(h => `'${escapeString(h)}'`).join(', ');\n lines.push(` hooks: [${hooksCode}],`);\n }\n\n // RequiredSchema - convert JSON Schema to Zod code\n if (hasSchema) {\n const zodCode = jsonSchemaToZod(data.requiredSchema!, 1);\n lines.push(` requiredSchema: ${zodCode},`);\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Check if an object has any non-null/non-undefined properties.\n */\nfunction hasNonNullProperties(obj: Record<string, any>): boolean {\n return Object.values(obj).some(v => v !== null && v !== undefined);\n}\n\n/**\n * Format the tools array as TypeScript code (not JSON).\n * Transforms snake_case properties from UI to camelCase for TypeScript.\n */\nfunction formatToolsArray(tools: (string | ToolConfigInput)[]): string {\n const formatted = tools.map(tool => {\n if (typeof tool === 'string') {\n return `'${escapeString(tool)}'`;\n }\n // Tool config object - transform to camelCase and format as TypeScript\n return formatToolConfig(tool);\n });\n\n if (formatted.length === 1) {\n return `[${formatted[0]}]`;\n }\n\n // Multi-line format for multiple tools\n const indented = formatted.map(t => ` ${t}`).join(',\\n');\n return `[\\n${indented}\\n ]`;\n}\n\n/**\n * Format a tool config object as TypeScript code.\n * Transforms snake_case to camelCase and omits null/default values.\n */\nfunction formatToolConfig(config: ToolConfigInput): string {\n const parts: string[] = [];\n\n parts.push(`name: '${escapeString(config.name)}'`);\n\n // Transform snake_case to camelCase and only include non-default values\n if (config.include_text_response !== undefined && config.include_text_response !== true) {\n parts.push(`includeTextResponse: ${config.include_text_response}`);\n }\n\n if (config.include_tool_calls !== undefined && config.include_tool_calls !== true) {\n parts.push(`includeToolCalls: ${config.include_tool_calls}`);\n }\n\n if (config.include_errors !== undefined && config.include_errors !== true) {\n parts.push(`includeErrors: ${config.include_errors}`);\n }\n\n if (config.init_user_message_property !== undefined && config.init_user_message_property !== null) {\n parts.push(`initUserMessageProperty: '${escapeString(config.init_user_message_property)}'`);\n }\n\n if (config.init_attachments_property !== undefined && config.init_attachments_property !== null) {\n parts.push(`initAttachmentsProperty: '${escapeString(config.init_attachments_property)}'`);\n }\n\n // Serialize tenvs for provider tools\n if (config.tenvs && Object.keys(config.tenvs).length > 0) {\n parts.push(`tenvs: ${JSON.stringify(config.tenvs)}`);\n }\n\n return `{ ${parts.join(', ')} }`;\n}\n\n/**\n * Format reasoning config as TypeScript code (not JSON).\n */\nfunction formatReasoningConfig(reasoning: PromptFileData['reasoning']): string {\n if (!reasoning) return '{}';\n\n const parts: string[] = [];\n\n if (reasoning.effort !== undefined && reasoning.effort !== null) {\n parts.push(`effort: '${reasoning.effort}'`);\n }\n\n if (reasoning.maxTokens !== undefined && reasoning.maxTokens !== null) {\n parts.push(`maxTokens: ${reasoning.maxTokens}`);\n }\n\n if (reasoning.exclude !== undefined && reasoning.exclude !== null) {\n parts.push(`exclude: ${reasoning.exclude}`);\n }\n\n if (reasoning.include !== undefined && reasoning.include !== null) {\n parts.push(`include: ${reasoning.include}`);\n }\n\n if (parts.length === 0) {\n return '{}';\n }\n\n return `{ ${parts.join(', ')} }`;\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\");\n}\n\nfunction escapeTemplateLiteral(str: string): string {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`').replace(/\\${/g, '\\\\${');\n}\n\n/**\n * Parse prompt content into an array of parts.\n * Returns null if it's a plain string, or the array of parts if structured.\n */\nfunction parsePromptContent(prompt: string | PromptPartInput[] | undefined): PromptPartInput[] | null {\n if (!prompt) return null;\n\n // Already an array\n if (Array.isArray(prompt)) {\n return prompt;\n }\n\n // Try to parse as JSON array (legacy format from UI)\n if (typeof prompt === 'string') {\n try {\n const parsed = JSON.parse(prompt);\n if (Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Not JSON, it's a plain string\n }\n }\n\n return null;\n}\n\n/**\n * Format prompt content as TypeScript code.\n * Plain strings use template literals, structured prompts use helper functions.\n */\nfunction formatPromptContent(prompt: string | PromptPartInput[] | undefined): string {\n if (!prompt) return \"''\";\n\n // Parse the prompt content\n const parts = parsePromptContent(prompt);\n\n // If it's a structured prompt (array), format it using helper functions\n if (parts !== null) {\n return formatStructuredPrompt(parts);\n }\n\n // Plain string - use template literal for multi-line\n if (typeof prompt === 'string') {\n if (prompt.includes('\\n')) {\n return `\\`${escapeTemplateLiteral(prompt)}\\``;\n }\n return `'${escapeString(prompt)}'`;\n }\n\n return \"''\";\n}\n\n/**\n * Format a structured prompt array as TypeScript code using discriminated union objects.\n */\nfunction formatStructuredPrompt(parts: PromptPartInput[]): string {\n if (parts.length === 0) {\n return '[]';\n }\n\n // Normalize parts to the new format\n const normalizedParts = parts.map(normalizePart);\n\n // Check if it's simple enough to be on one line (single short text part)\n if (normalizedParts.length === 1 && normalizedParts[0].type === 'text') {\n const content = normalizedParts[0].content || '';\n if (!content.includes('\\n') && content.length < 50) {\n return `[{ type: 'text', content: '${escapeString(content)}' }]`;\n }\n }\n\n // Multi-line format\n const formattedParts = normalizedParts.map(part => {\n if (part.type === 'text') {\n const content = part.content || '';\n // Use template literal for multi-line strings\n if (content.includes('\\n')) {\n return ` { type: 'text', content: \\`${escapeTemplateLiteral(content)}\\` }`;\n }\n return ` { type: 'text', content: '${escapeString(content)}' }`;\n } else if (part.type === 'include') {\n const promptName = part.prompt || '';\n return ` { type: 'include', prompt: '${escapeString(promptName)}' }`;\n }\n return ` // Unknown part type: ${(part as any).type}`;\n });\n\n return `[\\n${formattedParts.join(',\\n')},\\n ]`;\n}\n\n/**\n * Normalize a prompt part from legacy format to new format.\n * Legacy: { type: 'string', value: '...' } or { type: 'prompt', id: '...' }\n * New: { type: 'text', content: '...' } or { type: 'include', prompt: '...' }\n */\nfunction normalizePart(part: PromptPartInput): { type: 'text'; content: string } | { type: 'include'; prompt: string } {\n // Handle new format\n if (part.type === 'text') {\n return { type: 'text', content: part.content || '' };\n }\n if (part.type === 'include') {\n return { type: 'include', prompt: part.prompt || '' };\n }\n\n // Handle legacy format\n if (part.type === 'string') {\n return { type: 'text', content: part.value || '' };\n }\n if (part.type === 'prompt') {\n return { type: 'include', prompt: part.id || '' };\n }\n if (part.type === 'variable') {\n // Variables are converted to text with placeholder syntax\n return { type: 'text', content: `{{${part.value || ''}}}` };\n }\n\n // Fallback for unknown types\n return { type: 'text', content: '' };\n}\n","import type { AgentDefinition } from '../defineAgent.js';\n\n/**\n * Generate a TypeScript file for an agent definition.\n */\nexport function generateAgentFile(data: AgentDefinition): string {\n const lines = [\n `import { defineAgent } from '@standardagents/spec';`,\n '',\n `export default defineAgent({`,\n ` name: '${escapeString(data.name)}',`,\n ];\n\n // Package metadata fields (preserved from unpacked agents)\n if (data.packageName) {\n lines.push(` packageName: '${escapeString(data.packageName)}',`);\n }\n if (data.version) {\n lines.push(` version: '${escapeString(data.version)}',`);\n }\n if (data.author) {\n lines.push(` author: '${escapeString(data.author)}',`);\n }\n if (data.license) {\n lines.push(` license: '${escapeString(data.license)}',`);\n }\n\n // Only include title if explicitly provided (deprecated field)\n if (data.title) {\n lines.push(` title: '${escapeString(data.title)}',`);\n }\n\n if (data.type && data.type !== 'ai_human') {\n lines.push(` type: '${data.type}',`);\n }\n\n // Only include maxSessionTurns if it's a valid number (not null/undefined)\n if (data.maxSessionTurns !== undefined && data.maxSessionTurns !== null) {\n lines.push(` maxSessionTurns: ${data.maxSessionTurns},`);\n }\n\n // Side A config\n lines.push(` sideA: ${formatSideConfig(data.sideA)},`);\n\n // Side B config (optional)\n if (data.sideB) {\n lines.push(` sideB: ${formatSideConfig(data.sideB)},`);\n }\n\n if (data.exposeAsTool !== undefined) {\n lines.push(` exposeAsTool: ${data.exposeAsTool},`);\n }\n\n if (data.toolDescription) {\n lines.push(` toolDescription: '${escapeString(data.toolDescription)}',`);\n }\n\n // Serialize agent-level tenvs\n if (data.tenvs && Object.keys(data.tenvs).length > 0) {\n lines.push(` tenvs: ${JSON.stringify(data.tenvs)},`);\n }\n\n lines.push(`});`);\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction formatSideConfig(config: AgentDefinition['sideA']): string {\n const parts: string[] = ['{'];\n\n if (config.label) {\n parts.push(` label: '${escapeString(config.label)}',`);\n }\n\n parts.push(` prompt: '${escapeString(config.prompt)}',`);\n\n if (config.stopOnResponse !== undefined) {\n parts.push(` stopOnResponse: ${config.stopOnResponse},`);\n }\n\n if (config.stopTool) {\n parts.push(` stopTool: '${escapeString(config.stopTool)}',`);\n }\n\n if (config.stopToolResponseProperty) {\n parts.push(` stopToolResponseProperty: '${escapeString(config.stopToolResponseProperty)}',`);\n }\n\n if (config.maxSteps !== undefined) {\n parts.push(` maxSteps: ${config.maxSteps},`);\n }\n\n if (config.endSessionTool) {\n parts.push(` endSessionTool: '${escapeString(config.endSessionTool)}',`);\n }\n\n // Only include manualStopCondition if true (false is the default)\n if (config.manualStopCondition) {\n parts.push(` manualStopCondition: ${config.manualStopCondition},`);\n }\n\n parts.push(' }');\n return parts.join('\\n');\n}\n\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\\\/g, '\\\\\\\\');\n}\n","/**\n * File persistence service for dev mode.\n *\n * This module provides filesystem operations for creating, updating, and deleting\n * model, prompt, and agent definition files. It runs in the Vite plugin context\n * (Node.js) where filesystem access is available.\n *\n * In production (Cloudflare Workers), these operations would be handled by\n * a different mechanism (e.g., GitHub API commits).\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { generateModelFile, type GenerateModelFileOptions } from '../generators/generateModelFile.js';\nimport { generatePromptFile, type PromptFileData } from '../generators/generatePromptFile.js';\nimport { generateAgentFile } from '../generators/generateAgentFile.js';\nimport type { ModelDefinition } from '../defineModel.js';\nimport type { AgentDefinition } from '../defineAgent.js';\n\n/**\n * Mapping from provider string identifiers to their package info.\n * Used to generate proper import statements in model files.\n */\nexport const PROVIDER_PACKAGE_MAP: Record<string, { name: string; package: string }> = {\n openai: { name: 'openai', package: '@standardagents/openai' },\n openrouter: { name: 'openrouter', package: '@standardagents/openrouter' },\n anthropic: { name: 'anthropic', package: '@standardagents/anthropic' },\n google: { name: 'google', package: '@standardagents/google' },\n test: { name: 'test', package: '@standardagents/builder/test' },\n};\n\n/**\n * Convert a model/prompt/agent name to a safe filename.\n * Handles characters that are invalid in filesystem paths:\n * - Replaces `/` and `\\` with `__` (path separators)\n * - Replaces `:` with `_` (invalid on Windows, used in model IDs like `:free`)\n * - Replaces `-` with `_` for consistency with existing conventions\n * - Replaces `.` with `_` to avoid confusion with file extensions\n * - Replaces other problematic characters (`*`, `?`, `\"`, `<`, `>`, `|`) with `_`\n */\nexport function nameToFilename(name: string): string {\n return name\n .replace(/[/\\\\]/g, '__') // Path separators become double underscore\n .replace(/[:*?\"<>|.]/g, '_') // Invalid/problematic characters become underscore\n .replace(/-/g, '_'); // Hyphens become underscore for consistency\n}\n\n/**\n * Get the file path for a model definition.\n */\nexport function getModelFilePath(modelsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(modelsDir, `${filename}.ts`);\n}\n\n/**\n * Check if a model file already exists.\n */\nexport function modelExists(modelsDir: string, name: string): boolean {\n const filePath = getModelFilePath(modelsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Result of a persistence operation.\n */\nexport interface PersistenceResult {\n success: boolean;\n filePath?: string;\n error?: string;\n}\n\n/**\n * Raw model data from UI (uses string provider identifier).\n * This is transformed into proper TypeScript with ProviderFactory imports.\n */\nexport interface RawModelData {\n name: string;\n provider: string; // String identifier like 'openai', 'openrouter'\n model: string;\n includedProviders?: string[];\n fallbacks?: string[];\n inputPrice?: number;\n outputPrice?: number;\n cachedPrice?: number;\n capabilities?: {\n supportsImages?: boolean;\n supportsToolCalls?: boolean;\n supportsStreaming?: boolean;\n supportsJsonMode?: boolean;\n maxContextTokens?: number;\n maxOutputTokens?: number;\n reasoningLevels?: Record<number, string | null>;\n };\n}\n\n/**\n * Save a model definition to a TypeScript file.\n *\n * @param modelsDir - The directory where models are stored\n * @param data - The raw model data (with string provider)\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function saveModel(\n modelsDir: string,\n data: RawModelData,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure models directory exists\n if (!fs.existsSync(modelsDir)) {\n fs.mkdirSync(modelsDir, { recursive: true });\n }\n\n const filePath = getModelFilePath(modelsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Model file already exists: ${filePath}. Use update to modify existing models.`,\n };\n }\n\n // Look up provider package info\n const providerInfo = PROVIDER_PACKAGE_MAP[data.provider];\n if (!providerInfo) {\n return {\n success: false,\n error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(PROVIDER_PACKAGE_MAP).join(', ')}`,\n };\n }\n\n // Generate the TypeScript file content\n const content = generateModelFile(data as any, {\n providerName: providerInfo.name,\n providerPackage: providerInfo.package,\n });\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save model',\n };\n }\n}\n\n/**\n * Delete a model definition file.\n *\n * @param modelsDir - The directory where models are stored\n * @param name - The model name\n * @returns Result of the operation\n */\nexport async function deleteModel(\n modelsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getModelFilePath(modelsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Model file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete model',\n };\n }\n}\n\n/**\n * Transform snake_case model data from the UI to camelCase for internal use.\n * The UI sends field names like `included_providers`, etc.\n * but the backend expects `includedProviders`, etc.\n *\n * Also strips price fields for OpenRouter models since those are returned\n * per-request by the OpenRouter API.\n */\nexport function transformModelData(data: any): any {\n const transformed: any = {};\n const isOpenRouter = data.provider === 'openrouter';\n\n // Direct mappings (snake_case -> camelCase)\n const fieldMappings: Record<string, string> = {\n included_providers: 'includedProviders',\n input_price: 'inputPrice',\n output_price: 'outputPrice',\n cached_price: 'cachedPrice',\n };\n\n // Fields to skip for OpenRouter models (prices come from API per-request)\n const openRouterSkipFields = ['inputPrice', 'outputPrice', 'cachedPrice', 'input_price', 'output_price', 'cached_price'];\n\n for (const [key, value] of Object.entries(data)) {\n // Skip 'id' field as it's not needed for persistence\n if (key === 'id') continue;\n\n // Skip price fields for OpenRouter models\n if (isOpenRouter && openRouterSkipFields.includes(key)) continue;\n\n // Check if this is a snake_case field that needs transformation\n if (fieldMappings[key]) {\n const transformedKey = fieldMappings[key];\n // Skip price fields for OpenRouter even after transformation\n if (isOpenRouter && openRouterSkipFields.includes(transformedKey)) continue;\n transformed[transformedKey] = value;\n } else {\n // Keep the field as-is (handles camelCase fields and 'name', 'model', 'provider', etc.)\n transformed[key] = value;\n }\n }\n\n return transformed;\n}\n\n/**\n * Validate model data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validateModelData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Model name is required and must be a string';\n }\n\n if (!data.provider || typeof data.provider !== 'string') {\n return 'Model provider is required and must be a string';\n }\n\n const validProviders = Object.keys(PROVIDER_PACKAGE_MAP);\n if (!validProviders.includes(data.provider)) {\n return `Invalid provider '${data.provider}'. Must be one of: ${validProviders.join(', ')}`;\n }\n\n if (!data.model || typeof data.model !== 'string') {\n return 'Model ID is required and must be a string';\n }\n\n // Validate optional numeric fields\n if (data.inputPrice !== undefined && typeof data.inputPrice !== 'number') {\n return 'inputPrice must be a number';\n }\n\n if (data.outputPrice !== undefined && typeof data.outputPrice !== 'number') {\n return 'outputPrice must be a number';\n }\n\n if (data.cachedPrice !== undefined && typeof data.cachedPrice !== 'number') {\n return 'cachedPrice must be a number';\n }\n\n // Validate fallbacks is an array of strings\n if (data.fallbacks !== undefined) {\n if (!Array.isArray(data.fallbacks)) {\n return 'fallbacks must be an array';\n }\n for (const fallback of data.fallbacks) {\n if (typeof fallback !== 'string') {\n return 'Each fallback must be a string (model name)';\n }\n }\n }\n\n // Validate includedProviders is an array of strings\n if (data.includedProviders !== undefined) {\n if (!Array.isArray(data.includedProviders)) {\n return 'includedProviders must be an array';\n }\n for (const provider of data.includedProviders) {\n if (typeof provider !== 'string') {\n return 'Each includedProvider must be a string';\n }\n }\n }\n\n return null;\n}\n\n// ============================================================================\n// Prompt Persistence\n// ============================================================================\n\n/**\n * Transform snake_case prompt data from the UI to camelCase for internal use.\n * The UI sends field names like `model_id`, `tool_description`, etc.\n * but the backend expects `model`, `toolDescription`, etc.\n */\nexport function transformPromptData(data: any): any {\n const transformed: any = {};\n\n // Direct mappings (snake_case -> camelCase)\n const fieldMappings: Record<string, string> = {\n model_id: 'model',\n tool_description: 'toolDescription',\n expose_as_tool: 'exposeAsTool',\n required_schema: 'requiredSchema',\n include_chat: 'includeChat',\n include_past_tools: 'includePastTools',\n parallel_tool_calls: 'parallelToolCalls',\n tool_choice: 'toolChoice',\n reasoning_effort: 'reasoningEffort',\n reasoning_max_tokens: 'reasoningMaxTokens',\n reasoning_exclude: 'reasoningExclude',\n include_reasoning: 'includeReasoning',\n };\n\n for (const [key, value] of Object.entries(data)) {\n // Skip 'id' field as it's not needed for persistence\n if (key === 'id') continue;\n\n // Check if this is a snake_case field that needs transformation\n if (fieldMappings[key]) {\n transformed[fieldMappings[key]] = value;\n } else {\n // Keep the field as-is (handles camelCase fields and 'name', 'prompt', 'tools', etc.)\n transformed[key] = value;\n }\n }\n\n // Build reasoning config if any reasoning fields are present\n if (\n transformed.reasoningEffort !== undefined ||\n transformed.reasoningMaxTokens !== undefined ||\n transformed.reasoningExclude !== undefined ||\n transformed.includeReasoning !== undefined\n ) {\n transformed.reasoning = {};\n if (transformed.reasoningEffort) {\n transformed.reasoning.effort = transformed.reasoningEffort;\n }\n if (transformed.reasoningMaxTokens) {\n transformed.reasoning.maxTokens = transformed.reasoningMaxTokens;\n }\n if (transformed.reasoningExclude !== undefined) {\n transformed.reasoning.exclude = transformed.reasoningExclude;\n }\n if (transformed.includeReasoning !== undefined) {\n transformed.reasoning.include = transformed.includeReasoning;\n }\n // Clean up the flat fields\n delete transformed.reasoningEffort;\n delete transformed.reasoningMaxTokens;\n delete transformed.reasoningExclude;\n delete transformed.includeReasoning;\n }\n\n return transformed;\n}\n\n/**\n * Get the file path for a prompt definition.\n */\nexport function getPromptFilePath(promptsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(promptsDir, `${filename}.ts`);\n}\n\n/**\n * Check if a prompt file already exists.\n */\nexport function promptExists(promptsDir: string, name: string): boolean {\n const filePath = getPromptFilePath(promptsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Save a prompt definition to a TypeScript file.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param data - The prompt definition data (with JSON Schema for requiredSchema)\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function savePrompt(\n promptsDir: string,\n data: PromptFileData,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure prompts directory exists\n if (!fs.existsSync(promptsDir)) {\n fs.mkdirSync(promptsDir, { recursive: true });\n }\n\n const filePath = getPromptFilePath(promptsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Prompt file already exists: ${filePath}. Use update to modify existing prompts.`,\n };\n }\n\n // Generate the TypeScript file content (converts JSON Schema to Zod)\n const content = generatePromptFile(data);\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save prompt',\n };\n }\n}\n\n/**\n * Delete a prompt definition file.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param name - The prompt name\n * @returns Result of the operation\n */\nexport async function deletePrompt(\n promptsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getPromptFilePath(promptsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Prompt file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete prompt',\n };\n }\n}\n\n/**\n * Rename a prompt definition file and update its name property.\n * Since prompts contain Zod schemas that can't be easily regenerated from JSON Schema,\n * this function reads the file and updates the name property in place.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldName - The current prompt name\n * @param newName - The new prompt name\n * @returns Result of the operation\n */\nexport async function renamePrompt(\n promptsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getPromptFilePath(promptsDir, oldName);\n const newFilePath = getPromptFilePath(promptsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Prompt file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Prompt file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename prompt',\n };\n }\n}\n\n/**\n * Validate prompt data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validatePromptData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Prompt name is required and must be a string';\n }\n\n if (data.name.includes('/')) {\n return \"Prompt name cannot contain '/'. Reserved for namespace qualification.\";\n }\n\n if (!data.model || typeof data.model !== 'string') {\n return 'Prompt model is required and must be a string';\n }\n\n // toolDescription is optional but should be string if provided\n if (data.toolDescription !== undefined && typeof data.toolDescription !== 'string') {\n return 'toolDescription must be a string';\n }\n\n // prompt content is optional but should be string if provided\n if (data.prompt !== undefined && typeof data.prompt !== 'string') {\n return 'prompt must be a string';\n }\n\n // Validate boolean fields (exposeAsTool removed - all prompts exposed by default)\n const booleanFields = ['includeChat', 'includePastTools', 'parallelToolCalls'];\n for (const field of booleanFields) {\n if (data[field] !== undefined && typeof data[field] !== 'boolean') {\n return `${field} must be a boolean`;\n }\n }\n\n // Validate toolChoice\n if (data.toolChoice !== undefined) {\n const validChoices = ['auto', 'none', 'required'];\n if (!validChoices.includes(data.toolChoice)) {\n return `Invalid toolChoice '${data.toolChoice}'. Must be one of: ${validChoices.join(', ')}`;\n }\n }\n\n // Validate tools is an array\n if (data.tools !== undefined && !Array.isArray(data.tools)) {\n return 'tools must be an array';\n }\n\n // Validate reasoning config\n if (data.reasoning !== undefined) {\n if (typeof data.reasoning !== 'object') {\n return 'reasoning must be an object';\n }\n if (data.reasoning.effort !== undefined) {\n const validEfforts = ['low', 'medium', 'high'];\n if (!validEfforts.includes(data.reasoning.effort)) {\n return `Invalid reasoning.effort '${data.reasoning.effort}'. Must be one of: ${validEfforts.join(', ')}`;\n }\n }\n if (data.reasoning.maxTokens !== undefined && typeof data.reasoning.maxTokens !== 'number') {\n return 'reasoning.maxTokens must be a number';\n }\n }\n\n // requiredSchema is validated by the generatePromptFile function\n // (it handles JSON Schema to Zod conversion)\n\n return null;\n}\n\n// ============================================================================\n// Agent Persistence\n// ============================================================================\n\n/**\n * Transform snake_case agent data from the UI to camelCase for internal use.\n * The UI sends field names like `side_a_label`, `side_a_agent_prompt`, etc.\n * but the backend expects nested structures like `sideA.label`, `sideA.prompt`, etc.\n */\nexport function transformAgentData(data: any): any {\n const transformed: any = {\n name: data.name,\n };\n\n // title is deprecated but include if provided for backward compatibility\n if (data.title) {\n transformed.title = data.title;\n }\n\n // Type\n if (data.type) {\n transformed.type = data.type;\n }\n\n // Max session turns\n if (data.max_session_turns !== undefined) {\n transformed.maxSessionTurns = data.max_session_turns;\n }\n\n // Side A configuration\n transformed.sideA = {\n prompt: data.side_a_agent_prompt,\n };\n if (data.side_a_label) {\n transformed.sideA.label = data.side_a_label;\n }\n if (data.side_a_stop_on_response !== undefined) {\n transformed.sideA.stopOnResponse = data.side_a_stop_on_response;\n }\n if (data.side_a_stop_tool) {\n transformed.sideA.stopTool = data.side_a_stop_tool;\n }\n if (data.side_a_stop_tool_response_property) {\n transformed.sideA.stopToolResponseProperty = data.side_a_stop_tool_response_property;\n }\n if (data.side_a_max_steps !== undefined) {\n transformed.sideA.maxSteps = data.side_a_max_steps;\n }\n if (data.side_a_end_session_tool) {\n transformed.sideA.endSessionTool = data.side_a_end_session_tool;\n }\n if (data.side_a_manual_stop_condition !== undefined) {\n transformed.sideA.manualStopCondition = data.side_a_manual_stop_condition;\n }\n\n // Side B configuration (optional, for dual_ai)\n if (data.side_b_agent_prompt) {\n transformed.sideB = {\n prompt: data.side_b_agent_prompt,\n };\n if (data.side_b_label) {\n transformed.sideB.label = data.side_b_label;\n }\n if (data.side_b_stop_on_response !== undefined) {\n transformed.sideB.stopOnResponse = data.side_b_stop_on_response;\n }\n if (data.side_b_stop_tool) {\n transformed.sideB.stopTool = data.side_b_stop_tool;\n }\n if (data.side_b_stop_tool_response_property) {\n transformed.sideB.stopToolResponseProperty = data.side_b_stop_tool_response_property;\n }\n if (data.side_b_max_steps !== undefined) {\n transformed.sideB.maxSteps = data.side_b_max_steps;\n }\n if (data.side_b_end_session_tool) {\n transformed.sideB.endSessionTool = data.side_b_end_session_tool;\n }\n if (data.side_b_manual_stop_condition !== undefined) {\n transformed.sideB.manualStopCondition = data.side_b_manual_stop_condition;\n }\n }\n\n // Tool exposure\n if (data.expose_as_tool !== undefined) {\n transformed.exposeAsTool = data.expose_as_tool;\n }\n if (data.tool_description) {\n transformed.toolDescription = data.tool_description;\n }\n\n return transformed;\n}\n\n/**\n * Get the file path for an agent definition.\n */\nexport function getAgentFilePath(agentsDir: string, name: string): string {\n const filename = nameToFilename(name);\n return path.join(agentsDir, `${filename}.ts`);\n}\n\n/**\n * Check if an agent file already exists.\n */\nexport function agentExists(agentsDir: string, name: string): boolean {\n const filePath = getAgentFilePath(agentsDir, name);\n return fs.existsSync(filePath);\n}\n\n/**\n * Extract metadata fields from an existing agent TypeScript file.\n * These fields are added during unpack and should be preserved during edits.\n *\n * @param filePath - Path to the agent TypeScript file\n * @returns Object with metadata fields, or empty object if none found\n */\nfunction extractAgentMetadata(filePath: string): {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n} {\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n\n const metadata: Record<string, string> = {};\n\n // Simple regex extraction for metadata fields\n // These are string literals in the defineAgent call\n const packageNameMatch = content.match(/packageName:\\s*['\"]([^'\"]+)['\"]/);\n if (packageNameMatch) metadata.packageName = packageNameMatch[1];\n\n const versionMatch = content.match(/version:\\s*['\"]([^'\"]+)['\"]/);\n if (versionMatch) metadata.version = versionMatch[1];\n\n const authorMatch = content.match(/author:\\s*['\"]([^'\"]+)['\"]/);\n if (authorMatch) metadata.author = authorMatch[1];\n\n const licenseMatch = content.match(/license:\\s*['\"]([^'\"]+)['\"]/);\n if (licenseMatch) metadata.license = licenseMatch[1];\n\n return metadata;\n } catch {\n return {};\n }\n}\n\n/**\n * Save an agent definition to a TypeScript file.\n *\n * When overwriting an existing file, this function preserves metadata fields\n * (packageName, version, author, license) that were set during unpack operations.\n * These fields enable the pack modal to show correct defaults for re-packing.\n *\n * @param agentsDir - The directory where agents are stored\n * @param data - The agent definition data\n * @param overwrite - Whether to overwrite an existing file (for updates)\n * @returns Result of the operation\n */\nexport async function saveAgent(\n agentsDir: string,\n data: AgentDefinition,\n overwrite: boolean = false\n): Promise<PersistenceResult> {\n try {\n // Ensure agents directory exists\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n const filePath = getAgentFilePath(agentsDir, data.name);\n\n // Check if file already exists\n if (!overwrite && fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Agent file already exists: ${filePath}. Use update to modify existing agents.`,\n };\n }\n\n // When overwriting, preserve metadata fields from the existing file\n // These are set during unpack and should survive edits\n if (overwrite && fs.existsSync(filePath)) {\n const existingMetadata = extractAgentMetadata(filePath);\n if (existingMetadata.packageName && !data.packageName) {\n data.packageName = existingMetadata.packageName;\n }\n if (existingMetadata.version && !data.version) {\n data.version = existingMetadata.version;\n }\n if (existingMetadata.author && !data.author) {\n data.author = existingMetadata.author;\n }\n if (existingMetadata.license && !data.license) {\n data.license = existingMetadata.license;\n }\n }\n\n // Generate the TypeScript file content\n const content = generateAgentFile(data);\n\n // Write the file\n await fs.promises.writeFile(filePath, content, 'utf-8');\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to save agent',\n };\n }\n}\n\n/**\n * Delete an agent definition file.\n *\n * @param agentsDir - The directory where agents are stored\n * @param name - The agent name\n * @returns Result of the operation\n */\nexport async function deleteAgent(\n agentsDir: string,\n name: string\n): Promise<PersistenceResult> {\n try {\n const filePath = getAgentFilePath(agentsDir, name);\n\n if (!fs.existsSync(filePath)) {\n return {\n success: false,\n error: `Agent file not found: ${filePath}`,\n };\n }\n\n await fs.promises.unlink(filePath);\n\n return {\n success: true,\n filePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to delete agent',\n };\n }\n}\n\n/**\n * Rename an agent definition file and update its name property.\n * This function reads the file and updates the name property in place.\n *\n * @param agentsDir - The directory where agents are stored\n * @param oldName - The current agent name\n * @param newName - The new agent name\n * @returns Result of the operation\n */\nexport async function renameAgent(\n agentsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getAgentFilePath(agentsDir, oldName);\n const newFilePath = getAgentFilePath(agentsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Agent file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Agent file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename agent',\n };\n }\n}\n\n/**\n * Rename a model definition file and update its name property.\n * This function reads the file and updates the name property in place.\n *\n * @param modelsDir - The directory where models are stored\n * @param oldName - The current model name\n * @param newName - The new model name\n * @returns Result of the operation\n */\nexport async function renameModel(\n modelsDir: string,\n oldName: string,\n newName: string\n): Promise<PersistenceResult> {\n try {\n const oldFilePath = getModelFilePath(modelsDir, oldName);\n const newFilePath = getModelFilePath(modelsDir, newName);\n\n if (!fs.existsSync(oldFilePath)) {\n return {\n success: false,\n error: `Model file not found: ${oldFilePath}`,\n };\n }\n\n if (fs.existsSync(newFilePath)) {\n return {\n success: false,\n error: `Model file already exists: ${newFilePath}`,\n };\n }\n\n // Read the current file content\n const content = await fs.promises.readFile(oldFilePath, 'utf-8');\n\n // Update the name property in the file content\n // Matches: name: 'old_name', or name: \"old_name\",\n const updatedContent = content.replace(\n /name:\\s*['\"]([^'\"]+)['\"]/,\n `name: '${newName}'`\n );\n\n // Write to the new file\n await fs.promises.writeFile(newFilePath, updatedContent, 'utf-8');\n\n // Delete the old file\n await fs.promises.unlink(oldFilePath);\n\n return {\n success: true,\n filePath: newFilePath,\n };\n } catch (error: any) {\n return {\n success: false,\n error: error.message || 'Failed to rename model',\n };\n }\n}\n\n// ============================================================================\n// Cascade Update Functions\n// ============================================================================\n\n/**\n * Update model references in all prompt files when a model is renamed.\n * Prompts reference models via the `model` field.\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldModelName - The old model name\n * @param newModelName - The new model name\n * @returns Array of updated file paths\n */\nexport async function updateModelReferencesInPrompts(\n promptsDir: string,\n oldModelName: string,\n newModelName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(promptsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(promptsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(promptsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n\n // Match model: 'old_name' or model: \"old_name\"\n const modelRegex = new RegExp(`model:\\\\s*['\"]${escapeRegExp(oldModelName)}['\"]`, 'g');\n\n if (modelRegex.test(content)) {\n content = content.replace(modelRegex, `model: '${newModelName}'`);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Update prompt references in other prompt files when a prompt is renamed.\n * Prompts reference other prompts via the `tools` array (prompts exposed as tools).\n *\n * @param promptsDir - The directory where prompts are stored\n * @param oldPromptName - The old prompt name\n * @param newPromptName - The new prompt name\n * @returns Array of updated file paths\n */\nexport async function updatePromptReferencesInPrompts(\n promptsDir: string,\n oldPromptName: string,\n newPromptName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(promptsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(promptsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(promptsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n let modified = false;\n\n // Match prompt references in tools array: 'old_name' or \"old_name\"\n // This is a simple string replacement within the tools array context\n const toolsArrayRegex = /tools:\\s*\\[([^\\]]*)\\]/gs;\n const newContent = content.replace(toolsArrayRegex, (match) => {\n const oldMatch = match;\n // Replace the prompt name within the tools array\n const promptRefRegex = new RegExp(`['\"]${escapeRegExp(oldPromptName)}['\"]`, 'g');\n const replaced = match.replace(promptRefRegex, `'${newPromptName}'`);\n if (replaced !== oldMatch) {\n modified = true;\n }\n return replaced;\n });\n\n if (modified) {\n await fs.promises.writeFile(filePath, newContent, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Update prompt references in agent files when a prompt is renamed.\n * Agents reference prompts via sideA.prompt and sideB.prompt fields.\n *\n * @param agentsDir - The directory where agents are stored\n * @param oldPromptName - The old prompt name\n * @param newPromptName - The new prompt name\n * @returns Array of updated file paths\n */\nexport async function updatePromptReferencesInAgents(\n agentsDir: string,\n oldPromptName: string,\n newPromptName: string\n): Promise<string[]> {\n const updatedFiles: string[] = [];\n\n if (!fs.existsSync(agentsDir)) {\n return updatedFiles;\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n let content = await fs.promises.readFile(filePath, 'utf-8');\n\n // Match prompt: 'old_name' or prompt: \"old_name\" in sideA/sideB objects\n const promptRegex = new RegExp(`prompt:\\\\s*['\"]${escapeRegExp(oldPromptName)}['\"]`, 'g');\n\n if (promptRegex.test(content)) {\n content = content.replace(promptRegex, `prompt: '${newPromptName}'`);\n await fs.promises.writeFile(filePath, content, 'utf-8');\n updatedFiles.push(filePath);\n }\n }\n\n return updatedFiles;\n}\n\n/**\n * Escape special regex characters in a string\n */\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Validate agent data before saving.\n * Returns an error message if invalid, or null if valid.\n */\nexport function validateAgentData(data: any): string | null {\n if (!data.name || typeof data.name !== 'string') {\n return 'Agent name is required and must be a string';\n }\n\n if (data.name.includes('/')) {\n return \"Agent name cannot contain '/'. Reserved for namespace qualification.\";\n }\n\n // title is deprecated and optional - validate if provided\n if (data.title !== undefined && typeof data.title !== 'string') {\n return 'Agent title must be a string if provided';\n }\n\n // Validate type\n if (data.type !== undefined) {\n const validTypes = ['ai_human', 'dual_ai'];\n if (!validTypes.includes(data.type)) {\n return `Invalid type '${data.type}'. Must be one of: ${validTypes.join(', ')}`;\n }\n }\n\n // Validate sideA\n if (!data.sideA || typeof data.sideA !== 'object') {\n return 'sideA configuration is required';\n }\n\n if (!data.sideA.prompt || typeof data.sideA.prompt !== 'string') {\n return 'sideA.prompt is required and must be a string';\n }\n\n // Validate sideA optional fields\n if (data.sideA.label !== undefined && typeof data.sideA.label !== 'string') {\n return 'sideA.label must be a string';\n }\n\n if (data.sideA.stopOnResponse !== undefined && typeof data.sideA.stopOnResponse !== 'boolean') {\n return 'sideA.stopOnResponse must be a boolean';\n }\n\n if (data.sideA.stopTool !== undefined && typeof data.sideA.stopTool !== 'string') {\n return 'sideA.stopTool must be a string';\n }\n\n if (data.sideA.stopTool && !data.sideA.stopToolResponseProperty) {\n return 'sideA.stopToolResponseProperty is required when sideA.stopTool is set';\n }\n\n if (data.sideA.maxSteps !== undefined) {\n if (typeof data.sideA.maxSteps !== 'number' || data.sideA.maxSteps <= 0) {\n return 'sideA.maxSteps must be a positive number';\n }\n }\n\n // Validate dual_ai requires sideB\n if (data.type === 'dual_ai') {\n if (!data.sideB || typeof data.sideB !== 'object') {\n return 'sideB configuration is required for dual_ai type';\n }\n\n if (!data.sideB.prompt || typeof data.sideB.prompt !== 'string') {\n return 'sideB.prompt is required for dual_ai type';\n }\n\n // Validate sideB optional fields\n if (data.sideB.stopTool && !data.sideB.stopToolResponseProperty) {\n return 'sideB.stopToolResponseProperty is required when sideB.stopTool is set';\n }\n\n if (data.sideB.maxSteps !== undefined) {\n if (typeof data.sideB.maxSteps !== 'number' || data.sideB.maxSteps <= 0) {\n return 'sideB.maxSteps must be a positive number';\n }\n }\n }\n\n // Validate exposeAsTool requires toolDescription\n if (data.exposeAsTool && !data.toolDescription) {\n return 'toolDescription is required when exposeAsTool is true';\n }\n\n // Validate maxSessionTurns (only applicable for dual_ai agents)\n // Skip validation if null/undefined (ai_human agents send null)\n if (data.maxSessionTurns !== undefined && data.maxSessionTurns !== null) {\n if (typeof data.maxSessionTurns !== 'number' || data.maxSessionTurns <= 0) {\n return 'maxSessionTurns must be a positive number';\n }\n }\n\n return null;\n}\n","/**\n * Metadata service for Standard Agents packing.\n *\n * Manages .standardagent/{agent-name}.json files that store package metadata\n * (packageName, version, license, etc.) for preservation across pack/unpack cycles.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { PackageMetadata } from './types.js';\n\n/**\n * Service for managing package metadata in .standardagent/ directory.\n */\nexport class MetadataService {\n private metadataDir: string;\n\n /**\n * Create a new MetadataService.\n *\n * @param agentsDir - Path to the agents/ directory\n */\n constructor(agentsDir: string) {\n this.metadataDir = path.join(agentsDir, '.standardagent');\n }\n\n /**\n * Read metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @returns Metadata if found, null otherwise\n */\n async read(agentName: string): Promise<PackageMetadata | null> {\n const filePath = this.getMetadataPath(agentName);\n\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(filePath, 'utf-8');\n return JSON.parse(content) as PackageMetadata;\n } catch {\n return null;\n }\n }\n\n /**\n * Write metadata for an agent.\n *\n * @param agentName - Name of the agent\n * @param metadata - Metadata to write\n */\n async write(agentName: string, metadata: PackageMetadata): Promise<void> {\n // Ensure directory exists\n if (!fs.existsSync(this.metadataDir)) {\n fs.mkdirSync(this.metadataDir, { recursive: true });\n }\n\n const filePath = this.getMetadataPath(agentName);\n fs.writeFileSync(filePath, JSON.stringify(metadata, null, 2));\n }\n\n /**\n * Delete metadata for an agent.\n *\n * @param agentName - Name of the agent\n */\n async delete(agentName: string): Promise<void> {\n const filePath = this.getMetadataPath(agentName);\n\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n }\n\n /**\n * Get the next version by incrementing the patch number.\n *\n * @param currentVersion - Current semver version (e.g., \"1.0.0\")\n * @returns Incremented version (e.g., \"1.0.1\")\n */\n getNextVersion(currentVersion: string): string {\n const parts = currentVersion.split('.');\n\n if (parts.length < 3) {\n // Invalid semver, return as-is with .1 appended\n return `${currentVersion}.1`;\n }\n\n // Handle prerelease versions (e.g., \"1.0.0-beta.1\")\n const patchPart = parts[2];\n const prereleaseIndex = patchPart.indexOf('-');\n\n if (prereleaseIndex > -1) {\n // Has prerelease suffix, just increment patch\n const patch = parseInt(patchPart.substring(0, prereleaseIndex), 10);\n const prerelease = patchPart.substring(prereleaseIndex);\n return `${parts[0]}.${parts[1]}.${patch + 1}${prerelease}`;\n }\n\n // Standard semver - increment patch\n const patch = parseInt(patchPart, 10);\n return `${parts[0]}.${parts[1]}.${patch + 1}`;\n }\n\n /**\n * Validate a semver version string.\n *\n * @param version - Version string to validate\n * @returns true if valid semver format\n */\n isValidVersion(version: string): boolean {\n // Basic semver pattern: X.Y.Z or X.Y.Z-prerelease\n const semverPattern = /^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?$/;\n return semverPattern.test(version);\n }\n\n /**\n * Validate an npm package name.\n *\n * @param name - Package name to validate\n * @returns Object with valid flag and optional error message\n */\n validatePackageName(name: string): { valid: boolean; error?: string } {\n if (!name) {\n return { valid: false, error: 'Package name is required' };\n }\n\n if (name.length > 214) {\n return { valid: false, error: 'Package name must be 214 characters or less' };\n }\n\n if (name.startsWith('.') || name.startsWith('_')) {\n return { valid: false, error: 'Package name cannot start with . or _' };\n }\n\n if (name !== name.toLowerCase()) {\n return { valid: false, error: 'Package name must be lowercase' };\n }\n\n // Allow scoped packages (@scope/name) or regular packages\n const validPattern = /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n if (!validPattern.test(name)) {\n return {\n valid: false,\n error: 'Package name can only contain lowercase letters, numbers, hyphens, underscores, and dots',\n };\n }\n\n return { valid: true };\n }\n\n /**\n * Generate a suggested package name from project ID and agent name.\n *\n * @param projectId - Project identifier (optional)\n * @param agentName - Agent name\n * @returns Suggested npm package name\n */\n suggestPackageName(projectId: string | undefined, agentName: string): string {\n // Normalize agent name: lowercase, replace underscores with hyphens\n const normalizedAgent = agentName.toLowerCase().replace(/_/g, '-');\n\n if (projectId) {\n const normalizedProject = projectId.toLowerCase().replace(/_/g, '-');\n return `standardagent-${normalizedProject}-${normalizedAgent}`;\n }\n\n return `standardagent-${normalizedAgent}`;\n }\n\n /**\n * Get the file path for an agent's metadata.\n */\n private getMetadataPath(agentName: string): string {\n return path.join(this.metadataDir, `${agentName}.json`);\n }\n}\n","/**\n * AST utilities for analyzing agent code during packing.\n *\n * Uses TypeScript's compiler API to extract information from\n * define* calls and tool execute functions.\n *\n * @module\n */\n\nimport type * as TypeScript from 'typescript';\nimport * as fs from 'node:fs';\nimport MagicString from 'magic-string';\n\n// Lazy-load TypeScript to avoid top-level imports that break Cloudflare Workers.\n// The packing system is only used in Node.js CLI contexts, but the code gets\n// bundled into built-in-routes.js by tsup. A static import would appear at the\n// top level of the bundle, causing \"No such module typescript\" at deploy time.\nlet _ts: typeof TypeScript | undefined;\nexport async function loadTypeScript(): Promise<typeof TypeScript> {\n if (!_ts) _ts = await import('typescript') as typeof TypeScript;\n return _ts;\n}\n\n/**\n * Result of extracting uses from a tool definition.\n */\nexport interface ExtractUsesResult {\n /** Array of tool/prompt/agent names in the uses list */\n uses: string[];\n /** Whether the uses property was found */\n found: boolean;\n /** Line number where uses was found (1-indexed) */\n line?: number;\n}\n\n/**\n * Result of extracting tools from a prompt definition.\n */\nexport interface ExtractPromptToolsResult {\n /** Tool names in the tools array */\n tools: string[];\n /** Whether it's a mix of strings and objects */\n hasSubpromptConfigs: boolean;\n}\n\n/**\n * Extract the `uses` array from a defineTool call in source code.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Extraction result with uses array and metadata\n *\n * @example\n * ```typescript\n * const result = extractToolUses(`\n * export default defineTool({\n * description: 'My tool',\n * uses: ['helper_tool', 'other_agent:main'],\n * execute: async (state, args) => { ... }\n * });\n * `);\n * // result.uses = ['helper_tool', 'other_agent:main']\n * ```\n */\nexport async function extractToolUses(sourceCode: string): Promise<ExtractUsesResult> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'tool.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractUsesResult = {\n uses: [],\n found: false,\n };\n\n function visit(node: TypeScript.Node): void {\n // Look for defineTool({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineTool' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'uses' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'uses' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n result.found = true;\n result.line = sourceFile.getLineAndCharacterOfPosition(prop.getStart()).line + 1;\n\n // Extract string values from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.uses.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the `tools` array from a definePrompt call.\n *\n * @param sourceCode - TypeScript/JavaScript source code\n * @returns Array of tool names\n */\nexport async function extractPromptTools(sourceCode: string): Promise<ExtractPromptToolsResult> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: ExtractPromptToolsResult = {\n tools: [],\n hasSubpromptConfigs: false,\n };\n\n function visit(node: TypeScript.Node): void {\n // Look for definePrompt({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'tools' property\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'tools' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n // Extract tool names from the array\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n result.tools.push(element.text);\n } else if (ts.isObjectLiteralExpression(element)) {\n // SubpromptConfig object - look for 'name' property\n result.hasSubpromptConfigs = true;\n for (const objProp of element.properties) {\n if (\n ts.isPropertyAssignment(objProp) &&\n ts.isIdentifier(objProp.name) &&\n objProp.name.text === 'name' &&\n ts.isStringLiteral(objProp.initializer)\n ) {\n result.tools.push(objProp.initializer.text);\n }\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the model name from a definePrompt call.\n */\nexport async function extractPromptModel(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let model: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'model' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n model = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return model;\n}\n\n/**\n * Extract included prompts from a prompt's 'includes' array or structured prompt.\n */\nexport async function extractPromptIncludes(sourceCode: string): Promise<string[]> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'prompt.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const includes: string[] = [];\n\n function extractFromStructuredPrompt(arr: TypeScript.ArrayLiteralExpression): void {\n for (const element of arr.elements) {\n if (ts.isObjectLiteralExpression(element)) {\n // Look for { type: 'include', name: '...' }\n let hasIncludeType = false;\n let includeName: string | null = null;\n\n for (const prop of element.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'type' &&\n ts.isStringLiteral(prop.initializer) &&\n prop.initializer.text === 'include'\n ) {\n hasIncludeType = true;\n }\n if (\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n includeName = prop.initializer.text;\n }\n }\n }\n\n if (hasIncludeType && includeName && !includes.includes(includeName)) {\n includes.push(includeName);\n }\n }\n }\n }\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'definePrompt' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n // Check 'prompt' property for structured prompts\n if (\n prop.name.text === 'prompt' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n extractFromStructuredPrompt(prop.initializer);\n }\n\n // Also check 'includes' array if present\n if (\n prop.name.text === 'includes' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element) && !includes.includes(element.text)) {\n includes.push(element.text);\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return includes;\n}\n\n/**\n * Extract the prompt name from an agent's sideA or sideB configuration.\n */\nexport async function extractAgentPrompts(sourceCode: string): Promise<{ sideA?: string; sideB?: string }> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const result: { sideA?: string; sideB?: string } = {};\n\n function extractPromptFromSide(obj: TypeScript.ObjectLiteralExpression): string | undefined {\n for (const prop of obj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'prompt' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n return prop.initializer.text;\n }\n }\n return undefined;\n }\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name)) {\n if (\n prop.name.text === 'sideA' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideA = extractPromptFromSide(prop.initializer);\n }\n if (\n prop.name.text === 'sideB' &&\n ts.isObjectLiteralExpression(prop.initializer)\n ) {\n result.sideB = extractPromptFromSide(prop.initializer);\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return result;\n}\n\n/**\n * Extract the 'description' property from a defineAgent call.\n */\nexport async function extractAgentDescription(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let description: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'description' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n description = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return description;\n}\n\n/**\n * Extract the 'name' property value from a define* call.\n */\nexport async function extractDefinitionName(sourceCode: string): Promise<string | null> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'def.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n let name: string | null = null;\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'defineTool' ||\n node.expression.text === 'definePrompt' ||\n node.expression.text === 'defineAgent' ||\n node.expression.text === 'defineModel' ||\n node.expression.text === 'defineHook') &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name' &&\n ts.isStringLiteral(prop.initializer)\n ) {\n name = prop.initializer.text;\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return name;\n}\n\n/**\n * Extract the fallbacks array from a defineModel call.\n */\nexport async function extractModelFallbacks(sourceCode: string): Promise<string[]> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'model.ts',\n sourceCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const fallbacks: string[] = [];\n\n function visit(node: TypeScript.Node): void {\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineModel' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'fallbacks' &&\n ts.isArrayLiteralExpression(prop.initializer)\n ) {\n for (const element of prop.initializer.elements) {\n if (ts.isStringLiteral(element)) {\n fallbacks.push(element.text);\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return fallbacks;\n}\n\n// Note: injectPackageSignature was removed as part of the packed agent architecture redesign.\n// Packed packages now use a single index.ts with inline definitions instead of individual\n// transformed files with __package metadata.\n\n/**\n * Transform a bundled JavaScript file back to TypeScript export format.\n *\n * Converts bundled format:\n * ```javascript\n * // Bundled from: agents/agents/test.ts\n * // Local dependencies have been inlined\n *\n * import { defineAgent } from '@standardagents/builder';\n *\n * var test_agent = defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n *\n * export { test_agent as default };\n * ```\n *\n * To TypeScript export format:\n * ```typescript\n * import { defineAgent } from '@standardagents/builder';\n *\n * export default defineAgent({\n * name: \"test_agent\",\n * ...\n * });\n * ```\n *\n * Uses TypeScript AST parsing + magic-string for safe, precise transformations.\n *\n * @param code - Bundled JavaScript source code\n * @returns Transformed TypeScript source code\n */\nexport async function transformBundledJs(code: string): Promise<string> {\n const ts = await loadTypeScript();\n const s = new MagicString(code);\n const sourceFile = ts.createSourceFile(\n 'file.js',\n code,\n ts.ScriptTarget.ESNext,\n true\n );\n\n // Find the first import statement to determine where real code starts\n let firstImportStart = -1;\n\n // Track what to remove and transform\n let varStatementInfo: {\n start: number;\n varNameEnd: number;\n fullStart: number;\n } | null = null;\n\n function visit(node: TypeScript.Node): void {\n // Find first import statement\n if (ts.isImportDeclaration(node) && firstImportStart === -1) {\n firstImportStart = node.getStart();\n }\n\n // Find: var NAME = defineX({...})\n if (ts.isVariableStatement(node)) {\n const decl = node.declarationList.declarations[0];\n if (\n decl &&\n decl.initializer &&\n ts.isCallExpression(decl.initializer)\n ) {\n const callExpr = decl.initializer.expression;\n if (\n ts.isIdentifier(callExpr) &&\n (callExpr.text === 'defineAgent' ||\n callExpr.text === 'definePrompt' ||\n callExpr.text === 'defineTool' ||\n callExpr.text === 'defineModel' ||\n callExpr.text === 'defineHook')\n ) {\n varStatementInfo = {\n fullStart: node.getFullStart(),\n start: node.getStart(),\n varNameEnd: decl.initializer.getStart(),\n };\n\n // Replace \"var NAME = \" with \"export default \"\n s.overwrite(varStatementInfo.start, varStatementInfo.varNameEnd, 'export default ');\n }\n }\n }\n\n // Find and remove: export { NAME as default };\n if (ts.isExportDeclaration(node)) {\n const exportClause = node.exportClause;\n if (exportClause && ts.isNamedExports(exportClause)) {\n for (const element of exportClause.elements) {\n // Check if this is \"NAME as default\"\n if (\n element.propertyName &&\n ts.isIdentifier(element.name) &&\n element.name.text === 'default'\n ) {\n // Remove the entire export statement\n s.remove(node.getFullStart(), node.getEnd());\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n // Remove leading comments before the first import\n if (firstImportStart > 0) {\n s.remove(0, firstImportStart);\n }\n\n return s.toString().trim() + '\\n';\n}\n\n/**\n * Metadata to inject into an agent definition.\n */\nexport interface AgentMetadata {\n packageName?: string;\n version?: string;\n author?: string;\n license?: string;\n}\n\n/**\n * Inject metadata properties into a defineAgent call.\n *\n * This function finds the defineAgent({ ... }) call in the TypeScript code\n * and inserts metadata properties (packageName, version, author, license)\n * after the name property.\n *\n * @param tsCode - TypeScript source code containing a defineAgent call\n * @param metadata - Metadata to inject\n * @returns Modified TypeScript code with metadata injected\n *\n * @example\n * ```typescript\n * const code = `export default defineAgent({\n * name: \"test_agent\",\n * type: \"ai_human\",\n * ...\n * });`;\n *\n * const result = injectAgentMetadata(code, {\n * packageName: 'standardagent-test',\n * version: '1.2.3',\n * author: 'Test Co',\n * license: 'MIT'\n * });\n *\n * // Result:\n * // export default defineAgent({\n * // name: \"test_agent\",\n * // packageName: \"standardagent-test\",\n * // version: \"1.2.3\",\n * // author: \"Test Co\",\n * // license: \"MIT\",\n * // type: \"ai_human\",\n * // ...\n * // });\n * ```\n */\nexport async function injectAgentMetadata(tsCode: string, metadata: AgentMetadata): Promise<string> {\n // Skip if no metadata to inject\n if (!metadata.packageName && !metadata.version && !metadata.author && !metadata.license) {\n return tsCode;\n }\n\n const ts = await loadTypeScript();\n const s = new MagicString(tsCode);\n const sourceFile = ts.createSourceFile(\n 'agent.ts',\n tsCode,\n ts.ScriptTarget.ESNext,\n true\n );\n\n function visit(node: TypeScript.Node): void {\n // Look for defineAgent({ ... }) calls\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'defineAgent' &&\n node.arguments.length > 0 &&\n ts.isObjectLiteralExpression(node.arguments[0])\n ) {\n const configObj = node.arguments[0];\n\n // Find the 'name' property to insert after it\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === 'name'\n ) {\n // Build the metadata properties string\n const metadataProps: string[] = [];\n\n if (metadata.packageName) {\n metadataProps.push(`packageName: ${JSON.stringify(metadata.packageName)}`);\n }\n if (metadata.version) {\n metadataProps.push(`version: ${JSON.stringify(metadata.version)}`);\n }\n if (metadata.author) {\n metadataProps.push(`author: ${JSON.stringify(metadata.author)}`);\n }\n if (metadata.license) {\n metadataProps.push(`license: ${JSON.stringify(metadata.license)}`);\n }\n\n if (metadataProps.length > 0) {\n // Get the position right after the name property\n const propEnd = prop.getEnd();\n const afterProp = tsCode.substring(propEnd, propEnd + 1);\n\n // Insert metadata properties after the name property\n // If there's already a comma after name, insert after the comma\n // Otherwise, add a comma and then the metadata\n if (afterProp === ',') {\n // Insert after the comma (propEnd + 1)\n const insertText = `\\n ${metadataProps.join(',\\n ')},`;\n s.appendRight(propEnd + 1, insertText);\n } else {\n // No comma after name, add one along with metadata\n const insertText = `,\\n ${metadataProps.join(',\\n ')}`;\n s.appendRight(propEnd, insertText);\n }\n }\n\n return; // Found and processed, no need to continue\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n\n return s.toString();\n}\n","/**\n * Packing service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze agents and their dependencies\n * - Pack agents with all constituents using Rollup bundling\n * - Generate npm-ready package structures with TypeScript definitions\n *\n * The new Rollup-based approach:\n * - Preserves imports, constants, and helper functions\n * - Bundles local dependencies inline\n * - Keeps npm packages as external dependencies\n * - Creates separate files per constituent with re-exports in index.ts\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n// Rollup imports are done dynamically in bundleFile() to avoid loading\n// Node.js-only dependencies during Vite dev server startup\nimport type { Plugin, RollupOptions } from 'rollup';\nimport type {\n PackingAnalysis,\n ConstituentItem,\n PackingOptions,\n PackingResult,\n PackedMeta,\n ItemSelection,\n PackageMetadata,\n} from './types.js';\nimport { MetadataService } from './metadata-service.js';\nimport {\n extractToolUses,\n extractPromptTools,\n extractPromptModel,\n extractPromptIncludes,\n extractAgentPrompts,\n extractDefinitionName,\n extractModelFallbacks,\n extractAgentDescription,\n} from './ast-utils.js';\n\n/**\n * Service for packing agents with their dependencies.\n */\nexport class PackingService {\n /**\n * Resolve the version of an npm package from node_modules.\n *\n * @param pkgName - Package name (e.g., '@standardagents/spec')\n * @param rootDir - Root directory of the project\n * @returns Version specifier (e.g., '^1.2.3') or '*' if not found\n */\n protected resolvePackageVersion(pkgName: string, rootDir: string): string {\n const pkgJsonPath = path.join(rootDir, 'node_modules', pkgName, 'package.json');\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n return `^${pkgJson.version}`;\n } catch {\n // Fallback - use wildcard if we can't resolve\n return '*';\n }\n }\n /**\n * Analyze an agent to discover all its constituents.\n *\n * This performs static analysis on the agent definition and all\n * referenced prompts, tools, models, and hooks.\n *\n * @param agentName - Name of the agent to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with all discovered constituents\n */\n async analyzeAgent(agentName: string, rootDir: string): Promise<PackingAnalysis> {\n const agentsDir = path.join(rootDir, 'agents');\n const analysis: PackingAnalysis = {\n agent: agentName,\n primaryPrompt: '',\n constituents: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n agents: [],\n },\n shared: {\n prompts: [],\n tools: [],\n models: [],\n hooks: [],\n },\n warnings: [],\n errors: [],\n };\n\n // Load the agent file\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.errors.push(`Agent file not found: ${agentName}`);\n return analysis;\n }\n\n // Add agent to constituents\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n });\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt (primary)\n if (agentPrompts.sideA) {\n analysis.primaryPrompt = agentPrompts.sideA;\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, new Set(), `agent:${agentName}`);\n }\n\n // Check for shared items (used by other agents)\n await this.checkSharedItems(agentsDir, analysis);\n\n return analysis;\n }\n\n /**\n * Generate a README for an analyzed agent.\n *\n * This is used during analysis to provide a pre-populated README\n * that can be edited in the PackModal before packing.\n *\n * @param analysis - The packing analysis result\n * @param rootDir - Root directory of the project\n * @returns Object with generatedReadme and agentDescription\n */\n async generateReadmeForAnalysis(\n analysis: PackingAnalysis,\n rootDir: string\n ): Promise<{ generatedReadme: string; agentDescription?: string }> {\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n\n // Try to extract description from agent file\n let agentDescription: string | undefined;\n const agentItem = analysis.constituents.agents.find(a => a.name === analysis.agent);\n if (agentItem?.filePath) {\n try {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = (await extractAgentDescription(agentSource)) || undefined;\n } catch {\n // Ignore errors reading agent file\n }\n }\n\n // Get suggested package name\n const suggestedPackageName = metadataService.suggestPackageName(undefined, analysis.agent);\n\n // Generate the README\n const generatedReadme = this.generateReadme(\n suggestedPackageName,\n analysis.agent,\n '1.0.0', // Default version, will be replaced in modal\n 'MIT', // Default license\n agentDescription\n );\n\n return { generatedReadme, agentDescription };\n }\n\n /**\n * Recursively analyze a prompt and its dependencies.\n */\n private async analyzePrompt(\n promptName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) {\n analysis.warnings.push(`Prompt file not found: ${promptName}`);\n return;\n }\n\n const thisKey = `prompt:${promptName}`;\n\n // Add prompt to constituents (allow duplicates with different parentKey for tree display)\n // Use name+parentKey to avoid exact duplicates\n if (!analysis.constituents.prompts.some(p => p.name === promptName && p.parentKey === parentKey)) {\n analysis.constituents.prompts.push({\n name: promptName,\n filePath: promptFilePath,\n discoveredVia: 'agent-prompt',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`prompt:${promptName}`)) {\n return;\n }\n visited.add(`prompt:${promptName}`);\n\n // Read and analyze the prompt file\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n // Extract and analyze model\n const modelName = await extractPromptModel(promptSource);\n if (modelName) {\n await this.analyzeModel(modelName, agentsDir, analysis, visited, thisKey);\n }\n\n // Extract and analyze tools\n const { tools: toolNames } = await extractPromptTools(promptSource);\n for (const toolName of toolNames) {\n await this.analyzeTool(toolName, agentsDir, analysis, visited, 'prompt-tools', thisKey);\n }\n\n // Extract and analyze included prompts\n const includedPrompts = await extractPromptIncludes(promptSource);\n for (const includedPrompt of includedPrompts) {\n const item = analysis.constituents.prompts.find(p => p.name === includedPrompt);\n if (item) {\n if (item.discoveredVia === 'agent-prompt') {\n item.discoveredVia = 'prompt-includes';\n }\n }\n await this.analyzePrompt(includedPrompt, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a tool and its dependencies.\n * This also handles prompts-as-tools and agents-as-tools (handoffs).\n */\n private async analyzeTool(\n toolName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n discoveredVia: ConstituentItem['discoveredVia'],\n parentKey?: string\n ): Promise<void> {\n const thisKey = `tool:${toolName}`;\n\n // Check if it's a prompt being used as a tool\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), toolName);\n if (promptFilePath) {\n // It's a prompt, analyze it (with parent tracking)\n await this.analyzePrompt(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n // Check if it's an agent being used as a tool (handoff)\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), toolName);\n if (agentFilePath) {\n // It's an agent handoff, analyze it recursively\n await this.analyzeNestedAgent(toolName, agentsDir, analysis, visited, parentKey);\n return;\n }\n\n const toolFilePath = await this.findFile(path.join(agentsDir, 'tools'), toolName);\n if (!toolFilePath) {\n analysis.warnings.push(`Tool file not found: ${toolName}`);\n return;\n }\n\n // Add tool to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.tools.some(t => t.name === toolName && t.parentKey === parentKey)) {\n analysis.constituents.tools.push({\n name: toolName,\n filePath: toolFilePath,\n discoveredVia,\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`tool:${toolName}`)) {\n return;\n }\n visited.add(`tool:${toolName}`);\n\n // Read and analyze the tool file\n const toolSource = fs.readFileSync(toolFilePath, 'utf-8');\n\n // Extract uses array - this is the definitive list of tool dependencies\n // Since tools must declare their dependencies in `uses`, we rely on this\n // rather than trying to detect queueTool/invokeTool calls via AST\n const { uses } = await extractToolUses(toolSource);\n for (const usedItem of uses) {\n // Determine if it's a tool, prompt, or agent\n await this.analyzeTool(usedItem, agentsDir, analysis, visited, 'uses', thisKey);\n }\n }\n\n /**\n * Analyze a nested agent (used as a handoff target).\n */\n private async analyzeNestedAgent(\n agentName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) {\n analysis.warnings.push(`Agent file not found: ${agentName}`);\n return;\n }\n\n const thisKey = `agent:${agentName}`;\n\n // Add agent to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.agents.some(a => a.name === agentName && a.parentKey === parentKey)) {\n analysis.constituents.agents.push({\n name: agentName,\n filePath: agentFilePath,\n discoveredVia: 'uses',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`agent:${agentName}`)) {\n return;\n }\n visited.add(`agent:${agentName}`);\n\n // Read and analyze the agent file\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n // Analyze sideA prompt\n if (agentPrompts.sideA) {\n await this.analyzePrompt(agentPrompts.sideA, agentsDir, analysis, visited, thisKey);\n }\n\n // Analyze sideB prompt if present\n if (agentPrompts.sideB) {\n await this.analyzePrompt(agentPrompts.sideB, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Analyze a model and its fallbacks.\n */\n private async analyzeModel(\n modelName: string,\n agentsDir: string,\n analysis: PackingAnalysis,\n visited: Set<string>,\n parentKey?: string\n ): Promise<void> {\n const modelFilePath = await this.findFile(path.join(agentsDir, 'models'), modelName);\n if (!modelFilePath) {\n analysis.warnings.push(`Model file not found: ${modelName}`);\n return;\n }\n\n const thisKey = `model:${modelName}`;\n\n // Add model to constituents (allow duplicates with different parentKey for tree display)\n if (!analysis.constituents.models.some(m => m.name === modelName && m.parentKey === parentKey)) {\n analysis.constituents.models.push({\n name: modelName,\n filePath: modelFilePath,\n discoveredVia: 'static',\n sharedWith: [],\n parentKey,\n });\n }\n\n // Stop recursion if already visited (but we still added it above for tree display)\n if (visited.has(`model:${modelName}`)) {\n return;\n }\n visited.add(`model:${modelName}`);\n\n // Read and analyze the model file for fallbacks\n const modelSource = fs.readFileSync(modelFilePath, 'utf-8');\n const fallbacks = await extractModelFallbacks(modelSource);\n\n // Recursively analyze fallback models\n for (const fallbackName of fallbacks) {\n await this.analyzeModel(fallbackName, agentsDir, analysis, visited, thisKey);\n }\n }\n\n /**\n * Check which items are shared with other agents.\n */\n private async checkSharedItems(\n agentsDir: string,\n analysis: PackingAnalysis\n ): Promise<void> {\n const agentsPath = path.join(agentsDir, 'agents');\n if (!fs.existsSync(agentsPath)) return;\n\n const agentFiles = fs.readdirSync(agentsPath).filter(f => f.endsWith('.ts'));\n\n for (const agentFile of agentFiles) {\n const otherAgentName = agentFile.replace('.ts', '');\n if (otherAgentName === analysis.agent) continue;\n\n // Analyze the other agent to see what it uses\n const otherAnalysis = await this.analyzeAgentLight(otherAgentName, path.dirname(agentsDir));\n\n // Check prompts\n for (const prompt of analysis.constituents.prompts) {\n if (otherAnalysis.prompts.includes(prompt.name)) {\n prompt.sharedWith.push(otherAgentName);\n if (!analysis.shared.prompts.includes(prompt.name)) {\n analysis.shared.prompts.push(prompt.name);\n }\n }\n }\n\n // Check tools\n for (const tool of analysis.constituents.tools) {\n if (otherAnalysis.tools.includes(tool.name)) {\n tool.sharedWith.push(otherAgentName);\n if (!analysis.shared.tools.includes(tool.name)) {\n analysis.shared.tools.push(tool.name);\n }\n }\n }\n\n // Check models\n for (const model of analysis.constituents.models) {\n if (otherAnalysis.models.includes(model.name)) {\n model.sharedWith.push(otherAgentName);\n if (!analysis.shared.models.includes(model.name)) {\n analysis.shared.models.push(model.name);\n }\n }\n }\n }\n }\n\n /**\n * Light analysis of an agent - just get the names of used items.\n */\n private async analyzeAgentLight(\n agentName: string,\n rootDir: string\n ): Promise<{ prompts: string[]; tools: string[]; models: string[] }> {\n const result = { prompts: [] as string[], tools: [] as string[], models: [] as string[] };\n const agentsDir = path.join(rootDir, 'agents');\n const visited = new Set<string>();\n\n const agentFilePath = await this.findFile(path.join(agentsDir, 'agents'), agentName);\n if (!agentFilePath) return result;\n\n const agentSource = fs.readFileSync(agentFilePath, 'utf-8');\n const agentPrompts = await extractAgentPrompts(agentSource);\n\n const analyzePromptLight = async (promptName: string) => {\n if (visited.has(promptName)) return;\n visited.add(promptName);\n\n result.prompts.push(promptName);\n\n const promptFilePath = await this.findFile(path.join(agentsDir, 'prompts'), promptName);\n if (!promptFilePath) return;\n\n const promptSource = fs.readFileSync(promptFilePath, 'utf-8');\n\n const modelName = await extractPromptModel(promptSource);\n if (modelName && !result.models.includes(modelName)) {\n result.models.push(modelName);\n }\n\n const { tools } = await extractPromptTools(promptSource);\n for (const tool of tools) {\n if (!result.tools.includes(tool)) {\n result.tools.push(tool);\n }\n }\n\n const includes = await extractPromptIncludes(promptSource);\n for (const inc of includes) {\n await analyzePromptLight(inc);\n }\n };\n\n if (agentPrompts.sideA) await analyzePromptLight(agentPrompts.sideA);\n if (agentPrompts.sideB) await analyzePromptLight(agentPrompts.sideB);\n\n return result;\n }\n\n /**\n * Pack an agent with all its dependencies using Rollup bundling.\n *\n * The packing format creates:\n * - dist/{type}/{name}.js - Individual bundled files per constituent\n * - dist/index.js - Re-exports and lazy loaders\n * - dist/index.d.ts - TypeScript type definitions\n * - package.json - With standardagent field and dependencies\n * - tsconfig.json - For building\n *\n * @param options - Packing options\n * @returns Packing result\n */\n async pack(options: PackingOptions): Promise<PackingResult> {\n const {\n agentName,\n rootDir,\n outputDir,\n version = '1.0.0',\n removeOriginals = false,\n packageId = `standardagent-${agentName.replace(/_/g, '-')}`,\n packageName,\n license,\n licenseOwner,\n itemSelections,\n readme,\n } = options;\n\n // Use packageName if provided, otherwise fall back to packageId\n const finalPackageName = packageName || packageId;\n\n const packedAt = Date.now();\n const meta: PackedMeta = {\n packageId,\n version,\n entryAgents: [agentName],\n packedAt,\n };\n\n const result: PackingResult = {\n success: false,\n packageId,\n outputPath: '',\n meta,\n filesCreated: [],\n warnings: [],\n };\n\n try {\n // Analyze the agent\n const analysis = await this.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n result.warnings = analysis.warnings;\n return result;\n }\n\n result.warnings = analysis.warnings;\n\n // Create output directory structure\n const pkgOutputDir = path.join(outputDir, packageId);\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'agents'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'prompts'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'tools'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'models'), { recursive: true });\n fs.mkdirSync(path.join(pkgOutputDir, 'dist', 'hooks'), { recursive: true });\n\n // Collect all items to bundle (deduplicate by name since constituents may have\n // multiple entries with different parentKeys for tree display purposes)\n const seenItems = new Set<string>();\n const allItems: Array<ConstituentItem & { type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook' }> = [];\n\n for (const a of analysis.constituents.agents) {\n const key = `agent:${a.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...a, type: 'agent' });\n }\n }\n for (const p of analysis.constituents.prompts) {\n const key = `prompt:${p.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...p, type: 'prompt' });\n }\n }\n for (const t of analysis.constituents.tools) {\n const key = `tool:${t.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...t, type: 'tool' });\n }\n }\n for (const m of analysis.constituents.models) {\n const key = `model:${m.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...m, type: 'model' });\n }\n }\n for (const h of analysis.constituents.hooks) {\n const key = `hook:${h.name}`;\n if (!seenItems.has(key)) {\n seenItems.add(key);\n allItems.push({ ...h, type: 'hook' });\n }\n }\n\n // Track external dependencies\n const externalDeps = new Map<string, string>();\n\n // Bundle each constituent file with Rollup\n for (const item of allItems) {\n // Input path for bundleFile (it will output .js)\n const outputPath = path.join(\n pkgOutputDir,\n 'dist',\n this.getTypeDir(item.type),\n `${item.name}.js`\n );\n\n const deps = await this.bundleFile(item.filePath, outputPath, rootDir);\n\n // Collect external dependencies\n for (const [depName, depVersion] of deps) {\n if (!externalDeps.has(depName)) {\n externalDeps.set(depName, depVersion);\n }\n }\n\n result.filesCreated.push(outputPath);\n }\n\n // Generate dist/index.js with re-exports\n const indexJs = this.generateReExportIndex(analysis, meta);\n const indexJsPath = path.join(pkgOutputDir, 'dist', 'index.js');\n fs.writeFileSync(indexJsPath, indexJs);\n result.filesCreated.push(indexJsPath);\n\n // Generate dist/index.d.ts with type definitions\n const indexDts = this.generateIndexDts(analysis);\n const indexDtsPath = path.join(pkgOutputDir, 'dist', 'index.d.ts');\n fs.writeFileSync(indexDtsPath, indexDts);\n result.filesCreated.push(indexDtsPath);\n\n // Generate package.json with collected dependencies\n const pkgJson = this.generatePackageJson(\n finalPackageName,\n version,\n agentName,\n externalDeps,\n rootDir,\n license,\n licenseOwner\n );\n const pkgJsonPath = path.join(pkgOutputDir, 'package.json');\n fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));\n result.filesCreated.push(pkgJsonPath);\n\n // Generate LICENSE file if license is specified\n if (license) {\n const licenseContent = this.generateLicenseFile(license, licenseOwner);\n const licensePath = path.join(pkgOutputDir, 'LICENSE');\n fs.writeFileSync(licensePath, licenseContent);\n result.filesCreated.push(licensePath);\n }\n\n // Generate README.md\n // If custom readme provided, use it; otherwise generate from agent description\n let readmeContent = readme;\n if (!readmeContent) {\n // Try to extract description from agent file\n const agentItem = analysis.constituents.agents.find(a => a.name === agentName);\n let agentDescription: string | undefined;\n if (agentItem?.filePath) {\n const agentSource = fs.readFileSync(agentItem.filePath, 'utf-8');\n agentDescription = (await extractAgentDescription(agentSource)) || undefined;\n }\n readmeContent = this.generateReadme(\n finalPackageName,\n agentName,\n version,\n license,\n agentDescription\n );\n }\n const readmePath = path.join(pkgOutputDir, 'README.md');\n fs.writeFileSync(readmePath, readmeContent);\n result.filesCreated.push(readmePath);\n\n // Handle original files based on user selection or removeOriginals flag\n if (removeOriginals || itemSelections) {\n result.filesRemoved = [];\n\n for (const item of allItems) {\n // Check if user specified extraction for this item\n const selection = itemSelections?.find(s => s.name === item.name && s.type === item.type);\n const shouldRemove = selection\n ? selection.mode === 'extract'\n : (removeOriginals && item.sharedWith.length === 0);\n\n if (shouldRemove && fs.existsSync(item.filePath)) {\n fs.unlinkSync(item.filePath);\n result.filesRemoved.push(item.filePath);\n }\n }\n }\n\n // Save metadata for future pack/unpack cycles\n const agentsDir = path.join(rootDir, 'agents');\n const metadataService = new MetadataService(agentsDir);\n const metadata: PackageMetadata = {\n packageName: finalPackageName,\n version,\n license: license || '',\n licenseOwner: licenseOwner || '',\n lastPackedAt: new Date().toISOString(),\n };\n await metadataService.write(agentName, metadata);\n\n result.success = true;\n result.outputPath = pkgOutputDir;\n result.meta = meta;\n\n return result;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n return result;\n }\n }\n\n /**\n * Bundle a single source file with its local dependencies using Rollup.\n *\n * Local files (from the same agents/ directory) are inlined.\n * npm packages are kept as external dependencies.\n * Output is bundled JavaScript with all local deps inlined.\n *\n * @returns Map of external dependencies (name -> version specifier)\n */\n protected async bundleFile(\n inputPath: string,\n outputPath: string,\n rootDir: string\n ): Promise<Map<string, string>> {\n // Dynamic imports to avoid loading Node.js-only dependencies at module init time\n const { rollup } = await import('rollup');\n const nodeResolve = (await import('@rollup/plugin-node-resolve')).default;\n const commonjs = (await import('@rollup/plugin-commonjs')).default;\n const esbuild = (await import('rollup-plugin-esbuild')).default;\n\n const externalDeps = new Map<string, string>();\n const agentsDir = path.join(rootDir, 'agents');\n // Capture method reference for use inside Rollup plugin\n const resolveVersion = this.resolvePackageVersion.bind(this);\n\n // Create a Rollup plugin to track and externalize non-local imports\n const trackExternalsPlugin: Plugin = {\n name: 'track-externals',\n resolveId(source, importer) {\n // Entry point (no importer) - let Rollup handle it\n if (!importer) {\n return null;\n }\n\n // Handle relative imports - these might be local agent files\n if (source.startsWith('./') || source.startsWith('../')) {\n const resolved = path.resolve(path.dirname(importer), source);\n // Try to find the file with .ts extension\n let tsResolved = resolved;\n if (!resolved.endsWith('.ts') && !resolved.endsWith('.js')) {\n if (fs.existsSync(`${resolved}.ts`)) {\n tsResolved = `${resolved}.ts`;\n } else if (fs.existsSync(`${resolved}.js`)) {\n tsResolved = `${resolved}.js`;\n } else if (fs.existsSync(`${resolved}/index.ts`)) {\n tsResolved = `${resolved}/index.ts`;\n }\n }\n // If it's within the agents directory, bundle it\n if (tsResolved.includes(agentsDir) || resolved.includes(agentsDir)) {\n return null; // Let Rollup resolve it normally (will be bundled)\n }\n return null;\n }\n\n // Absolute paths within agents dir - bundle them\n if (source.startsWith('/') && source.includes(agentsDir)) {\n return null;\n }\n\n // All non-relative imports are external (npm packages)\n // Track the dependency\n const pkgName = source.startsWith('@')\n ? source.split('/').slice(0, 2).join('/')\n : source.split('/')[0];\n\n // Determine version specifier based on package\n if (pkgName.startsWith('@standardagents/')) {\n externalDeps.set(pkgName, resolveVersion(pkgName, rootDir));\n } else if (pkgName === 'zod') {\n externalDeps.set(pkgName, '^4.0.0');\n } else {\n externalDeps.set(pkgName, '*');\n }\n\n return { id: source, external: true };\n },\n };\n\n const rollupOptions: RollupOptions = {\n input: inputPath,\n plugins: [\n trackExternalsPlugin,\n nodeResolve({\n extensions: ['.ts', '.js'],\n }),\n commonjs(),\n esbuild({\n target: 'es2022',\n sourceMap: false,\n }),\n ],\n onwarn(warning, warn) {\n // Suppress certain warnings\n if (warning.code === 'UNRESOLVED_IMPORT') return;\n if (warning.code === 'CIRCULAR_DEPENDENCY') return;\n warn(warning);\n },\n };\n\n const bundle = await rollup(rollupOptions);\n\n try {\n const { output } = await bundle.generate({\n format: 'esm',\n exports: 'named',\n });\n\n // The output is bundled JS with all local dependencies inlined\n // and external npm packages preserved as imports\n const bundledCode = output[0].code;\n\n // Add a header comment showing the original source\n const header = `// Bundled from: ${path.relative(rootDir, inputPath)}\\n// Local dependencies have been inlined\\n\\n`;\n\n // Write the bundled JS output\n fs.writeFileSync(outputPath, header + bundledCode);\n\n await bundle.close();\n } catch (error) {\n await bundle.close();\n throw error;\n }\n\n return externalDeps;\n }\n\n /**\n * Get the directory name for a constituent type.\n */\n private getTypeDir(type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook'): string {\n switch (type) {\n case 'agent': return 'agents';\n case 'prompt': return 'prompts';\n case 'tool': return 'tools';\n case 'model': return 'models';\n case 'hook': return 'hooks';\n }\n }\n\n /**\n * Deduplicate constituents by name (for packing, not for tree display).\n */\n private deduplicateConstituents(analysis: PackingAnalysis): {\n agents: ConstituentItem[];\n prompts: ConstituentItem[];\n tools: ConstituentItem[];\n models: ConstituentItem[];\n hooks: ConstituentItem[];\n } {\n const dedupe = <T extends { name: string }>(items: T[]): T[] => {\n const seen = new Set<string>();\n return items.filter(item => {\n if (seen.has(item.name)) return false;\n seen.add(item.name);\n return true;\n });\n };\n\n return {\n agents: dedupe(analysis.constituents.agents),\n prompts: dedupe(analysis.constituents.prompts),\n tools: dedupe(analysis.constituents.tools),\n models: dedupe(analysis.constituents.models),\n hooks: dedupe(analysis.constituents.hooks),\n };\n }\n\n /**\n * Check if a name is a valid JavaScript/TypeScript identifier.\n */\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n\n /**\n * Quote a property/export name if it contains non-identifier characters.\n * JavaScript identifiers must start with a letter, underscore, or dollar sign,\n * and contain only letters, digits, underscores, or dollar signs.\n */\n private quoteName(name: string): string {\n if (this.isValidIdentifier(name)) {\n return name;\n }\n // Quote names with special characters (like hyphens)\n return `'${name}'`;\n }\n\n /**\n * Generate the dist/index.js file with re-exports and lazy loaders.\n */\n private generateReExportIndex(analysis: PackingAnalysis, meta: PackedMeta): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n '// Packed agent: ' + analysis.agent,\n '// Generated by @standardagents/builder',\n '',\n ];\n\n // Generate direct re-exports\n for (const agent of constituents.agents) {\n lines.push(`export { default as ${this.quoteName(agent.name)} } from './agents/${agent.name}.js';`);\n }\n for (const prompt of constituents.prompts) {\n lines.push(`export { default as ${this.quoteName(prompt.name)} } from './prompts/${prompt.name}.js';`);\n }\n for (const tool of constituents.tools) {\n lines.push(`export { default as ${this.quoteName(tool.name)} } from './tools/${tool.name}.js';`);\n }\n for (const model of constituents.models) {\n lines.push(`export { default as ${this.quoteName(model.name)} } from './models/${model.name}.js';`);\n }\n for (const hook of constituents.hooks) {\n lines.push(`export { default as ${this.quoteName(hook.name)} } from './hooks/${hook.name}.js';`);\n }\n\n lines.push('');\n\n // Generate agents registry with lazy loaders\n lines.push('// Registry exports for lazy loading');\n lines.push('export const agents = {');\n for (const agent of constituents.agents) {\n lines.push(` ${this.quoteName(agent.name)}: async () => (await import('./agents/${agent.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts registry\n lines.push('export const prompts = {');\n for (const prompt of constituents.prompts) {\n lines.push(` ${this.quoteName(prompt.name)}: async () => (await import('./prompts/${prompt.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools registry\n lines.push('export const tools = {');\n for (const tool of constituents.tools) {\n lines.push(` ${this.quoteName(tool.name)}: async () => (await import('./tools/${tool.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models registry\n lines.push('export const models = {');\n for (const model of constituents.models) {\n lines.push(` ${this.quoteName(model.name)}: async () => (await import('./models/${model.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks registry\n lines.push('export const hooks = {');\n for (const hook of constituents.hooks) {\n lines.push(` ${this.quoteName(hook.name)}: async () => (await import('./hooks/${hook.name}.js')).default,`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate __meta export\n lines.push('export const __meta = ' + JSON.stringify(meta, null, 2) + ';');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the dist/index.d.ts file with type definitions.\n */\n private generateIndexDts(analysis: PackingAnalysis): string {\n const constituents = this.deduplicateConstituents(analysis);\n\n const lines: string[] = [\n 'import type {',\n ' AgentDefinition,',\n ' PromptDefinition,',\n ' ToolDefinition,',\n ' ModelDefinition,',\n ' PackedMeta,',\n \"} from '@standardagents/spec';\",\n '',\n 'type DefinitionLoader<T> = () => Promise<T>;',\n '',\n ];\n\n // Generate direct exports (only for valid identifiers)\n for (const agent of constituents.agents) {\n if (this.isValidIdentifier(agent.name)) {\n lines.push(`export declare const ${agent.name}: AgentDefinition;`);\n }\n }\n for (const prompt of constituents.prompts) {\n if (this.isValidIdentifier(prompt.name)) {\n lines.push(`export declare const ${prompt.name}: PromptDefinition;`);\n }\n }\n for (const tool of constituents.tools) {\n if (this.isValidIdentifier(tool.name)) {\n lines.push(`export declare const ${tool.name}: ToolDefinition<unknown, any, any>;`);\n }\n }\n for (const model of constituents.models) {\n if (this.isValidIdentifier(model.name)) {\n lines.push(`export declare const ${model.name}: ModelDefinition;`);\n }\n }\n for (const hook of constituents.hooks) {\n if (this.isValidIdentifier(hook.name)) {\n lines.push(`export declare const ${hook.name}: unknown;`);\n }\n }\n lines.push('');\n\n // Generate agents type\n lines.push('export declare const agents: {');\n for (const agent of constituents.agents) {\n lines.push(` readonly ${this.quoteName(agent.name)}: DefinitionLoader<AgentDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate prompts type\n lines.push('export declare const prompts: {');\n for (const prompt of constituents.prompts) {\n lines.push(` readonly ${this.quoteName(prompt.name)}: DefinitionLoader<PromptDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate tools type\n lines.push('export declare const tools: {');\n for (const tool of constituents.tools) {\n lines.push(` readonly ${this.quoteName(tool.name)}: DefinitionLoader<ToolDefinition<unknown, any, any>>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate models type\n lines.push('export declare const models: {');\n for (const model of constituents.models) {\n lines.push(` readonly ${this.quoteName(model.name)}: DefinitionLoader<ModelDefinition>;`);\n }\n lines.push('};');\n lines.push('');\n\n // Generate hooks type\n lines.push('export declare const hooks: {');\n for (const hook of constituents.hooks) {\n lines.push(` readonly ${this.quoteName(hook.name)}: DefinitionLoader<unknown>;`);\n }\n lines.push('};');\n lines.push('');\n\n lines.push('export declare const __meta: PackedMeta;');\n lines.push('');\n\n return lines.join('\\n');\n }\n\n /**\n * Generate the package.json file with dependencies.\n */\n private generatePackageJson(\n packageName: string,\n version: string,\n agentName: string,\n externalDeps: Map<string, string>,\n rootDir: string,\n license?: string,\n licenseOwner?: string\n ): Record<string, unknown> {\n // Build dependencies object, ensuring @standardagents/spec is included\n const dependencies: Record<string, string> = {\n '@standardagents/spec': this.resolvePackageVersion('@standardagents/spec', rootDir),\n };\n\n for (const [name, ver] of externalDeps) {\n dependencies[name] = ver;\n }\n\n const pkgJson: Record<string, unknown> = {\n name: packageName,\n version,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n types: './dist/index.d.ts',\n import: './dist/index.js',\n },\n },\n keywords: ['standardagent'],\n standardagent: {\n entryAgents: [agentName],\n },\n files: license ? ['dist', 'LICENSE', 'README.md'] : ['dist', 'README.md'],\n dependencies,\n };\n\n // Add license if specified\n if (license) {\n pkgJson.license = license;\n }\n\n // Add author if license owner specified\n if (licenseOwner) {\n pkgJson.author = licenseOwner;\n }\n\n return pkgJson;\n }\n\n /**\n * Generate LICENSE file content for common licenses.\n */\n private generateLicenseFile(license: string, owner?: string): string {\n const year = new Date().getFullYear();\n const copyrightHolder = owner || '[COPYRIGHT HOLDER]';\n\n switch (license) {\n case 'MIT':\n return `MIT License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n\n case 'Apache-2.0':\n return ` Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n Copyright ${year} ${copyrightHolder}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n`;\n\n case 'ISC':\n return `ISC License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n`;\n\n case 'GPL-3.0':\n return `GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright (c) ${year} ${copyrightHolder}\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see <https://www.gnu.org/licenses/>.\n`;\n\n case 'BSD-3-Clause':\n return `BSD 3-Clause License\n\nCopyright (c) ${year} ${copyrightHolder}\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n`;\n\n case 'Unlicensed':\n case 'UNLICENSED':\n return `Copyright (c) ${year} ${copyrightHolder}\n\nAll Rights Reserved.\n\nThis software and associated documentation files (the \"Software\") are\nproprietary and confidential. Unauthorized copying, modification, distribution,\nor use of the Software, via any medium, is strictly prohibited.\n`;\n\n default:\n return `${license}\n\nCopyright (c) ${year} ${copyrightHolder}\n`;\n }\n }\n\n /**\n * Get information about a packed package.\n *\n * Reads the package.json and README.md from a packed package directory.\n * Used by the packed-info API endpoint to show package details before publishing.\n *\n * @param packageId - The package directory name (e.g., 'standardagent-my-agent')\n * @param rootDir - Root directory of the project\n * @returns Package info or null if not found\n */\n getPackedInfo(\n packageId: string,\n rootDir: string\n ): {\n packageName: string;\n version: string;\n license?: string;\n author?: string;\n entryAgents: string[];\n readme?: string;\n } | null {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Try to find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n // Try alternate naming conventions\n if (!fs.existsSync(packedDir)) {\n return null;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n return null;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Read package.json\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Read README.md if it exists\n let readme: string | undefined;\n const readmePath = path.join(packageDir, 'README.md');\n if (fs.existsSync(readmePath)) {\n readme = fs.readFileSync(readmePath, 'utf-8');\n }\n\n return {\n packageName: pkgJson.name,\n version: pkgJson.version,\n license: pkgJson.license,\n author: pkgJson.author,\n entryAgents: pkgJson.standardagent?.entryAgents || [],\n readme,\n };\n }\n\n /**\n * List all packed packages in the workspace.\n *\n * @param rootDir - Root directory of the project\n * @returns Array of package directory names\n */\n listPackedPackages(rootDir: string): string[] {\n const packedDir = path.join(rootDir, 'agents', 'packed');\n if (!fs.existsSync(packedDir)) {\n return [];\n }\n\n return fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n }\n\n /**\n * Generate README.md content for a packed agent.\n *\n * @param packageName - The npm package name\n * @param agentName - The agent name\n * @param version - The package version\n * @param license - The license type\n * @param description - Optional description from the agent definition\n * @returns README markdown content\n */\n generateReadme(\n packageName: string,\n agentName: string,\n version: string,\n license?: string,\n description?: string\n ): string {\n const desc = description || 'A Standard Agent package.';\n\n return `# ${packageName}\n\n${desc}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${packageName}\n\\`\\`\\`\n\n## Usage\n\nThis is a [Standard Agent](https://standardagentbuilder.com) package. To use it:\n\n1. Install in your Standard Agents project\n2. The agent will be automatically discovered and available\n\n\\`\\`\\`typescript\n// Create a thread with this agent\nconst thread = await client.createThread({\n agent_id: '${packageName}/${agentName}'\n});\n\\`\\`\\`\n\n## License\n\n${license || 'See LICENSE file'}\n`;\n }\n\n /**\n * Find a file by name in a directory.\n */\n private async findFile(dir: string, name: string): Promise<string | null> {\n if (!fs.existsSync(dir)) {\n return null;\n }\n\n // Try exact match with .ts extension\n const exactPath = path.join(dir, `${name}.ts`);\n if (fs.existsSync(exactPath)) {\n return exactPath;\n }\n\n // Try finding by name property in files\n const files = fs.readdirSync(dir).filter(f => f.endsWith('.ts'));\n for (const file of files) {\n const filePath = path.join(dir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const extractedName = await extractDefinitionName(source);\n if (extractedName === name) {\n return filePath;\n }\n }\n\n return null;\n }\n\n /**\n * List all agents in the workspace.\n */\n async listAgents(rootDir: string): Promise<string[]> {\n const agentsDir = path.join(rootDir, 'agents', 'agents');\n if (!fs.existsSync(agentsDir)) {\n return [];\n }\n\n const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.ts'));\n const agents: string[] = [];\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n const source = fs.readFileSync(filePath, 'utf-8');\n const name = await extractDefinitionName(source);\n if (name) {\n agents.push(name);\n } else {\n agents.push(file.replace('.ts', ''));\n }\n }\n\n return agents;\n }\n}\n","/**\n * Package discovery service for Standard Agents.\n *\n * Discovers packed agent packages from:\n * - npm packages (by keyword, naming convention, or standardagent field)\n * - Local agents/packed/ directory\n *\n * Packages are detected by checking for the `standardagent` field in\n * package.json, not by looking for manifest.json.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { DiscoveredPackage, PackageSignature } from './types.js';\n\n/**\n * Configuration for package discovery.\n */\nexport interface DiscoveryConfig {\n /** Root directory of the project */\n rootDir: string;\n /** Directory for local packed agents (default: agents/packed) */\n packedDir?: string;\n /** Whether to scan npm packages (default: true) */\n scanNpm?: boolean;\n /** Whether to scan local packed directory (default: true) */\n scanLocal?: boolean;\n}\n\n/**\n * Service for discovering packed agent packages.\n */\nexport class PackageDiscoveryService {\n private config: Required<DiscoveryConfig>;\n\n constructor(config: DiscoveryConfig) {\n this.config = {\n rootDir: config.rootDir,\n packedDir: config.packedDir ?? path.join(config.rootDir, 'agents', 'packed'),\n scanNpm: config.scanNpm ?? true,\n scanLocal: config.scanLocal ?? true,\n };\n }\n\n /**\n * Discover all packed agent packages.\n *\n * @returns Array of discovered packages\n */\n async discoverPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (this.config.scanNpm) {\n const npmPackages = await this.discoverNpmPackages();\n packages.push(...npmPackages);\n }\n\n if (this.config.scanLocal) {\n const localPackages = await this.discoverLocalPackages();\n packages.push(...localPackages);\n }\n\n return packages;\n }\n\n /**\n * Discover npm packages that are Standard Agents packages.\n *\n * Looks for packages with:\n * - \"standardagent\" keyword in package.json\n * - \"standardagent-*\" prefix in name\n * - \"@standardagents/*\" scope\n * - \"standardagent\" field in package.json\n */\n private async discoverNpmPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n const nodeModulesDir = path.join(this.config.rootDir, 'node_modules');\n\n if (!fs.existsSync(nodeModulesDir)) {\n return packages;\n }\n\n // Scan root level packages\n const rootEntries = await this.scanDirectory(nodeModulesDir);\n for (const entry of rootEntries) {\n if (entry.startsWith('.')) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package - scan contents\n const scopeDir = path.join(nodeModulesDir, entry);\n const scopeEntries = await this.scanDirectory(scopeDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const pkgDir = path.join(scopeDir, scopedPkg);\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkNpmPackage(pkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkgDir = path.join(nodeModulesDir, entry);\n const pkg = await this.checkNpmPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if an npm package is a Standard Agent package.\n *\n * Detection is based on the `standardagent` field in package.json,\n * which must contain `entryAgents` array.\n */\n private async checkNpmPackage(\n pkgDir: string,\n pkgName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Check if this is a Standard Agent package\n const isStandardAgent =\n // Has \"standardagent\" keyword\n pkgJson.keywords?.includes('standardagent') ||\n // Has \"standardagent-*\" prefix\n pkgName.startsWith('standardagent-') ||\n // Has \"@standardagents/*\" scope\n pkgName.startsWith('@standardagents/') ||\n // Has \"standardagent\" field\n pkgJson.standardagent !== undefined;\n\n if (!isStandardAgent) {\n return null;\n }\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n // Might be a different kind of standardagent package\n // (like @standardagents/builder itself)\n return null;\n }\n\n return {\n packageId: pkgJson.name || pkgName,\n version: pkgJson.version || '0.0.0',\n source: 'npm',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading npm package ${pkgName}:`, error);\n return null;\n }\n }\n\n /**\n * Discover local packed agents from agents/packed/ directory.\n * Handles both regular packages and scoped packages (@scope/name).\n */\n private async discoverLocalPackages(): Promise<DiscoveredPackage[]> {\n const packages: DiscoveredPackage[] = [];\n\n if (!fs.existsSync(this.config.packedDir)) {\n return packages;\n }\n\n const entries = await this.scanDirectory(this.config.packedDir);\n\n for (const entry of entries) {\n if (entry.startsWith('.')) continue;\n\n const pkgDir = path.join(this.config.packedDir, entry);\n const stat = fs.statSync(pkgDir);\n\n if (!stat.isDirectory()) continue;\n\n if (entry.startsWith('@')) {\n // Scoped package directory - scan contents for actual packages\n const scopeEntries = await this.scanDirectory(pkgDir);\n\n for (const scopedPkg of scopeEntries) {\n if (scopedPkg.startsWith('.')) continue;\n const scopedPkgDir = path.join(pkgDir, scopedPkg);\n const scopedStat = fs.statSync(scopedPkgDir);\n\n if (!scopedStat.isDirectory()) continue;\n\n const fullName = `${entry}/${scopedPkg}`;\n const pkg = await this.checkLocalPackage(scopedPkgDir, fullName);\n if (pkg) {\n packages.push(pkg);\n }\n }\n } else {\n // Regular package\n const pkg = await this.checkLocalPackage(pkgDir, entry);\n if (pkg) {\n packages.push(pkg);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Check if a local directory is a packed agent package.\n *\n * Detection is based on the `standardagent` field in package.json.\n */\n private async checkLocalPackage(\n pkgDir: string,\n dirName: string\n ): Promise<DiscoveredPackage | null> {\n const pkgJsonPath = path.join(pkgDir, 'package.json');\n\n if (!fs.existsSync(pkgJsonPath)) {\n return null;\n }\n\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Must have standardagent field with entryAgents\n if (!pkgJson.standardagent?.entryAgents) {\n return null;\n }\n\n return {\n packageId: pkgJson.name || dirName,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: pkgDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n description: pkgJson.description,\n };\n } catch (error) {\n console.warn(`[PackageDiscovery] Error reading local package ${dirName}:`, error);\n return null;\n }\n }\n\n /**\n * Scan a directory and return entry names.\n */\n private async scanDirectory(dir: string): Promise<string[]> {\n if (!fs.existsSync(dir)) {\n return [];\n }\n\n const entries = fs.readdirSync(dir);\n return entries;\n }\n\n /**\n * Validate a standardagent field structure in package.json.\n */\n static validateStandardAgentField(field: unknown): field is { entryAgents: string[] } {\n if (typeof field !== 'object' || field === null) {\n return false;\n }\n\n const f = field as Record<string, unknown>;\n\n return (\n Array.isArray(f.entryAgents) &&\n f.entryAgents.length > 0 &&\n f.entryAgents.every((e: unknown) => typeof e === 'string')\n );\n }\n\n /**\n * Get a package by ID.\n */\n async getPackage(packageId: string): Promise<DiscoveredPackage | null> {\n const packages = await this.discoverPackages();\n return packages.find(p => p.packageId === packageId) ?? null;\n }\n\n /**\n * Create a package signature from a discovered package.\n *\n * Note: packedAt is set to current time since it's no longer\n * stored in a manifest file.\n */\n static createSignature(pkg: DiscoveredPackage): PackageSignature {\n return {\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n packedAt: Date.now(),\n };\n }\n}\n\n/**\n * Convenience function to discover all packages.\n */\nexport async function discoverPackages(rootDir: string): Promise<DiscoveredPackage[]> {\n const service = new PackageDiscoveryService({ rootDir });\n return service.discoverPackages();\n}\n","/**\n * Unpacking service for Standard Agents.\n *\n * Provides functionality to:\n * - Analyze packed packages to discover exportable items\n * - Transform bundled JavaScript back to TypeScript source files\n * - Restore packed agents to editable source files\n *\n * Uses AST-based transformation (TypeScript Compiler API + magic-string)\n * to accurately preserve all code including Zod schemas and execute functions.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type * as TypeScript from 'typescript';\nimport type {\n UnpackOptions,\n UnpackResult,\n UnpackAnalysis,\n UnpackableItem,\n UnpackItemSelection,\n DiscoveredPackage,\n} from './types.js';\nimport { PackageDiscoveryService } from './discovery.js';\nimport {\n loadTypeScript,\n transformBundledJs,\n extractAgentPrompts,\n extractPromptTools,\n extractPromptModel,\n extractToolUses,\n injectAgentMetadata,\n type AgentMetadata,\n} from './ast-utils.js';\n\n/**\n * Registry item type for consistent iteration.\n */\ntype ItemType = 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n\n/**\n * Maps type to directory name (plural form).\n */\nconst TYPE_TO_DIR: Record<ItemType, string> = {\n agent: 'agents',\n prompt: 'prompts',\n tool: 'tools',\n model: 'models',\n hook: 'hooks',\n};\n\n/**\n * Service for unpacking packed agent packages.\n */\nexport class UnpackingService {\n /**\n * Analyze a package to discover what can be unpacked.\n *\n * @param packageId - Package ID to analyze\n * @param rootDir - Root directory of the agents workspace\n * @returns Analysis result with items that can be unpacked\n */\n async analyzeUnpack(packageId: string, rootDir: string): Promise<UnpackAnalysis> {\n const analysis: UnpackAnalysis = {\n packageId,\n version: '',\n source: 'local',\n canUnpack: false,\n items: [],\n warnings: [],\n errors: [],\n };\n\n try {\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n\n if (!pkg) {\n analysis.errors.push(`Package not found: ${packageId}`);\n return analysis;\n }\n\n analysis.version = pkg.version;\n analysis.source = pkg.source;\n\n // Read and parse the index.js to discover registry items\n const indexPath = path.join(pkg.path, 'dist', 'index.js');\n if (!fs.existsSync(indexPath)) {\n analysis.errors.push(`Package index not found: ${indexPath}`);\n return analysis;\n }\n\n const indexContent = fs.readFileSync(indexPath, 'utf-8');\n const registryItems = await this.parseIndexExports(indexContent);\n\n // Build a map of all available items for quick lookup\n const availableItems = new Map<string, { type: ItemType; name: string }>();\n for (const item of registryItems) {\n availableItems.set(`${item.type}:${item.name}`, item);\n }\n\n // Read bundled files to discover relationships\n const agentsDir = path.join(rootDir, 'agents');\n const itemsWithRelations: UnpackableItem[] = [];\n\n // Process each item and discover its relationships\n for (const item of registryItems) {\n const targetPath = path.join(agentsDir, TYPE_TO_DIR[item.type], `${item.name}.ts`);\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const existsGlobally = this.fileExists(targetPath);\n const sourceExists = fs.existsSync(sourcePath);\n\n if (!sourceExists) {\n analysis.warnings.push(`Source file not found for ${item.type} \"${item.name}\": ${sourcePath}`);\n continue;\n }\n\n // Read the bundled file to discover relationships\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n const children = await this.discoverRelationships(item.type, item.name, bundledCode, availableItems);\n\n // Add the item itself (no parentKey for root-level items initially)\n itemsWithRelations.push({\n name: item.name,\n type: item.type,\n targetPath,\n existsGlobally,\n action: existsGlobally ? 'skip' : 'generate',\n });\n\n // Add children with parentKey\n for (const child of children) {\n const childTargetPath = path.join(agentsDir, TYPE_TO_DIR[child.type], `${child.name}.ts`);\n const childSourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[child.type], `${child.name}.js`);\n const childExists = this.fileExists(childTargetPath);\n const childSourceExists = fs.existsSync(childSourcePath);\n\n if (!childSourceExists) {\n continue; // Skip if source doesn't exist\n }\n\n itemsWithRelations.push({\n name: child.name,\n type: child.type,\n targetPath: childTargetPath,\n existsGlobally: childExists,\n action: childExists ? 'skip' : 'generate',\n parentKey: `${item.type}:${item.name}`,\n });\n }\n }\n\n // Deduplicate items (keep first occurrence, but allow duplicates with different parentKeys)\n analysis.items = itemsWithRelations;\n\n // Add warning if all items already exist\n const itemsToGenerate = analysis.items.filter(i => i.action === 'generate');\n if (itemsToGenerate.length === 0 && analysis.items.length > 0) {\n analysis.warnings.push('All items already exist in the global namespace. Nothing to unpack.');\n }\n\n analysis.canUnpack = itemsToGenerate.length > 0;\n\n } catch (error) {\n analysis.errors.push(error instanceof Error ? error.message : String(error));\n }\n\n return analysis;\n }\n\n /**\n * Discover relationships from a bundled file.\n * Returns child items that this item references.\n */\n private async discoverRelationships(\n type: ItemType,\n name: string,\n bundledCode: string,\n availableItems: Map<string, { type: ItemType; name: string }>\n ): Promise<Array<{ type: ItemType; name: string }>> {\n const children: Array<{ type: ItemType; name: string }> = [];\n\n if (type === 'agent') {\n // Extract prompts from agent's sideA and sideB\n const prompts = await extractAgentPrompts(bundledCode);\n if (prompts.sideA && availableItems.has(`prompt:${prompts.sideA}`)) {\n children.push({ type: 'prompt', name: prompts.sideA });\n }\n if (prompts.sideB && availableItems.has(`prompt:${prompts.sideB}`)) {\n children.push({ type: 'prompt', name: prompts.sideB });\n }\n } else if (type === 'prompt') {\n // Extract tools and model from prompt\n const toolsResult = await extractPromptTools(bundledCode);\n for (const toolName of toolsResult.tools) {\n // Tool could be a tool or an agent (exposeAsTool)\n if (availableItems.has(`tool:${toolName}`)) {\n children.push({ type: 'tool', name: toolName });\n } else if (availableItems.has(`agent:${toolName}`)) {\n children.push({ type: 'agent', name: toolName });\n }\n }\n\n const model = await extractPromptModel(bundledCode);\n if (model && availableItems.has(`model:${model}`)) {\n children.push({ type: 'model', name: model });\n }\n } else if (type === 'tool') {\n // Extract uses from tool\n const usesResult = await extractToolUses(bundledCode);\n for (const useName of usesResult.uses) {\n // Uses can reference tools, prompts, or agents\n // Format can be \"tool_name\" or \"agent_name:prompt_name\"\n const colonIndex = useName.indexOf(':');\n if (colonIndex > 0) {\n // agent:prompt format\n const agentName = useName.substring(0, colonIndex);\n if (availableItems.has(`agent:${agentName}`)) {\n children.push({ type: 'agent', name: agentName });\n }\n } else {\n // Simple name - could be tool, prompt, or agent\n if (availableItems.has(`tool:${useName}`)) {\n children.push({ type: 'tool', name: useName });\n } else if (availableItems.has(`prompt:${useName}`)) {\n children.push({ type: 'prompt', name: useName });\n } else if (availableItems.has(`agent:${useName}`)) {\n children.push({ type: 'agent', name: useName });\n }\n }\n }\n }\n\n return children;\n }\n\n /**\n * Unpack a packed agent package by transforming bundled JS back to TypeScript.\n *\n * @param options - Unpacking options\n * @returns Result of the unpacking operation\n */\n async unpack(options: UnpackOptions): Promise<UnpackResult> {\n const { packageId, rootDir, deletePackage = false, itemSelections } = options;\n\n const result: UnpackResult = {\n success: false,\n packageId,\n filesGenerated: [],\n filesSkipped: [],\n packageDeleted: false,\n warnings: [],\n };\n\n try {\n // First analyze to get the items\n const analysis = await this.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n result.error = analysis.errors.join('\\n');\n return result;\n }\n\n result.warnings.push(...analysis.warnings);\n\n // Find the package\n const pkg = await this.resolvePackage(packageId, rootDir);\n if (!pkg) {\n result.error = `Package not found: ${packageId}`;\n return result;\n }\n\n // Apply item selections if provided\n const itemsToProcess = this.applySelections(analysis.items, itemSelections);\n\n // Read package.json to get metadata for agent injection\n const pkgJsonPath = path.join(pkg.path, 'package.json');\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n // Extract author from package.json (can be string or object)\n let author = '';\n if (typeof pkgJson.author === 'string') {\n author = pkgJson.author;\n } else if (pkgJson.author?.name) {\n author = pkgJson.author.name;\n }\n\n // Build metadata for agent injection\n const agentMetadata: AgentMetadata = {\n packageName: pkgJson.name || undefined,\n version: pkgJson.version || undefined,\n author: author || undefined,\n license: pkgJson.license || undefined,\n };\n\n // Deduplicate by type:name (process each unique item only once)\n const processedItems = new Set<string>();\n\n for (const item of itemsToProcess) {\n const itemKey = `${item.type}:${item.name}`;\n if (processedItems.has(itemKey)) {\n continue; // Skip duplicates\n }\n processedItems.add(itemKey);\n\n if (item.action === 'skip') {\n result.filesSkipped.push(item.targetPath);\n continue;\n }\n\n try {\n // Read the bundled JS file\n const sourcePath = path.join(pkg.path, 'dist', TYPE_TO_DIR[item.type], `${item.name}.js`);\n const bundledCode = fs.readFileSync(sourcePath, 'utf-8');\n\n // Transform using AST\n let tsCode = await transformBundledJs(bundledCode);\n\n // For agents, inject metadata from package.json so it persists through pack/unpack cycles\n if (item.type === 'agent') {\n tsCode = await injectAgentMetadata(tsCode, agentMetadata);\n }\n\n // Ensure directory exists\n const dir = path.dirname(item.targetPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write the TypeScript file\n fs.writeFileSync(item.targetPath, tsCode);\n result.filesGenerated.push(item.targetPath);\n\n } catch (error) {\n result.warnings.push(\n `Failed to generate ${item.type} \"${item.name}\": ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n // Delete package if requested and it's a local package\n if (deletePackage && pkg.source === 'local') {\n try {\n this.deleteDirectory(pkg.path);\n result.packageDeleted = true;\n } catch (error) {\n result.warnings.push(\n `Failed to delete package: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n } else if (deletePackage && pkg.source === 'npm') {\n result.warnings.push('Cannot delete npm packages. Use npm uninstall instead.');\n }\n\n result.success = true;\n\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n }\n\n /**\n * Parse the index.js file to extract registry items.\n *\n * Looks for patterns like:\n * ```javascript\n * export const agents = {\n * support_agent: async () => (await import('./agents/support_agent.js')).default,\n * };\n * ```\n */\n private async parseIndexExports(indexContent: string): Promise<Array<{ name: string; type: ItemType }>> {\n const ts = await loadTypeScript();\n const sourceFile = ts.createSourceFile(\n 'index.js',\n indexContent,\n ts.ScriptTarget.ESNext,\n true\n );\n\n const items: Array<{ name: string; type: ItemType }> = [];\n const registryTypes: ItemType[] = ['agent', 'prompt', 'tool', 'model', 'hook'];\n\n function visit(node: TypeScript.Node): void {\n // Look for: export const agents = { ... }\n if (\n ts.isVariableStatement(node) &&\n node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword)\n ) {\n for (const decl of node.declarationList.declarations) {\n if (!ts.isIdentifier(decl.name)) continue;\n\n const varName = decl.name.text;\n\n // Check if this is a registry (agents, prompts, tools, models, hooks)\n let itemType: ItemType | null = null;\n for (const type of registryTypes) {\n if (varName === TYPE_TO_DIR[type]) {\n itemType = type;\n break;\n }\n }\n\n if (itemType && decl.initializer && ts.isObjectLiteralExpression(decl.initializer)) {\n // Extract keys from the object\n for (const prop of decl.initializer.properties) {\n if (ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) {\n let name: string | undefined;\n\n if (ts.isPropertyAssignment(prop)) {\n if (ts.isIdentifier(prop.name)) {\n name = prop.name.text;\n } else if (ts.isStringLiteral(prop.name)) {\n name = prop.name.text;\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n name = prop.name.text;\n }\n\n if (name) {\n items.push({ name, type: itemType });\n }\n }\n }\n }\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return items;\n }\n\n /**\n * Resolve a package identifier to a discovered package.\n */\n private async resolvePackage(\n pkgIdentifier: string,\n rootDir: string\n ): Promise<DiscoveredPackage | null> {\n // Check if it's a local path\n if (pkgIdentifier.startsWith('/') || pkgIdentifier.startsWith('./')) {\n const absolutePath = path.isAbsolute(pkgIdentifier)\n ? pkgIdentifier\n : path.join(rootDir, pkgIdentifier);\n\n const pkgJsonPath = path.join(absolutePath, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || path.basename(absolutePath),\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: absolutePath,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, return null\n }\n }\n\n return null;\n }\n\n // Check local packed directory first\n const packedDir = path.join(rootDir, 'agents', 'packed', pkgIdentifier);\n const pkgJsonPath = path.join(packedDir, 'package.json');\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n if (pkgJson.standardagent?.entryAgents) {\n return {\n packageId: pkgJson.name || pkgIdentifier,\n version: pkgJson.version || '0.0.0',\n source: 'local',\n path: packedDir,\n entryAgents: pkgJson.standardagent.entryAgents,\n };\n }\n } catch {\n // Invalid JSON, continue to npm check\n }\n }\n\n // Check npm packages\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n const pkg = packages.find(\n p => p.packageId === pkgIdentifier || p.path.endsWith(`node_modules/${pkgIdentifier}`)\n );\n\n return pkg || null;\n }\n\n /**\n * Apply user selections to items.\n */\n private applySelections(\n items: UnpackableItem[],\n selections?: UnpackItemSelection[]\n ): UnpackableItem[] {\n if (!selections || selections.length === 0) {\n return items;\n }\n\n return items.map(item => {\n const selection = selections.find(\n s => s.name === item.name && s.type === item.type\n );\n if (selection) {\n return { ...item, action: selection.action };\n }\n return item;\n });\n }\n\n /**\n * Check if a file exists.\n */\n private fileExists(filePath: string): boolean {\n // Check for .ts and .js extensions\n if (fs.existsSync(filePath)) {\n return true;\n }\n // Check without extension\n const withoutExt = filePath.replace(/\\.(ts|js)$/, '');\n return fs.existsSync(`${withoutExt}.ts`) || fs.existsSync(`${withoutExt}.js`);\n }\n\n /**\n * Recursively delete a directory.\n */\n private deleteDirectory(dirPath: string): void {\n if (fs.existsSync(dirPath)) {\n fs.rmSync(dirPath, { recursive: true, force: true });\n }\n }\n\n /**\n * List available packed packages.\n */\n async listPackages(rootDir: string): Promise<Array<{\n packageId: string;\n version: string;\n source: 'npm' | 'local';\n entryAgents: string[];\n path: string;\n }>> {\n const discovery = new PackageDiscoveryService({ rootDir });\n const packages = await discovery.discoverPackages();\n\n return packages.map(pkg => ({\n packageId: pkg.packageId,\n version: pkg.version,\n source: pkg.source,\n entryAgents: pkg.entryAgents,\n path: pkg.path,\n }));\n }\n}\n","/**\n * npm publish service for Standard Agents.\n *\n * Handles publishing packed agent packages to npm registries.\n * Manages temporary .npmrc files for authentication.\n *\n * @module\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Options for publishing a package.\n */\nexport interface PublishOptions {\n /** Directory containing the package to publish */\n packageDir: string;\n /** npm auth token */\n token: string;\n /** npm registry URL (default: https://registry.npmjs.org) */\n registry?: string;\n /** If true, run npm publish --dry-run */\n dryRun?: boolean;\n}\n\n/**\n * Result of a publish operation.\n */\nexport interface PublishResult {\n /** Whether publish succeeded */\n success: boolean;\n /** Combined stdout output */\n output: string;\n /** Error message if failed */\n error?: string;\n /** Published package name (if successful) */\n packageName?: string;\n /** Published version (if successful) */\n version?: string;\n}\n\n/**\n * Service for publishing packages to npm.\n */\nexport class NpmPublishService {\n /**\n * Validate an npm auth token format.\n *\n * @param token - Token to validate\n * @returns true if token appears valid\n */\n validateToken(token: string): boolean {\n if (!token || token.trim().length === 0) {\n return false;\n }\n\n // npm tokens are typically:\n // - Classic tokens: npm_xxxx (36+ chars)\n // - Granular tokens: npm_xxxx (also 36+ chars)\n // - Legacy tokens: various formats\n // We do basic validation - actual auth is done by npm\n return token.trim().length >= 10;\n }\n\n /**\n * Validate a registry URL.\n *\n * @param registry - Registry URL to validate\n * @returns true if URL is valid https URL\n */\n validateRegistry(registry: string): boolean {\n try {\n const url = new URL(registry);\n return url.protocol === 'https:';\n } catch {\n return false;\n }\n }\n\n /**\n * Publish a package to npm.\n *\n * Creates a temporary .npmrc with the token, runs npm publish,\n * and deletes the .npmrc immediately after.\n *\n * @param options - Publish options\n * @returns Publish result\n */\n async publish(options: PublishOptions): Promise<PublishResult> {\n const {\n packageDir,\n token,\n registry = 'https://registry.npmjs.org',\n dryRun = false,\n } = options;\n\n // Validate inputs\n if (!this.validateToken(token)) {\n return {\n success: false,\n output: '',\n error: 'Invalid npm token format',\n };\n }\n\n if (!this.validateRegistry(registry)) {\n return {\n success: false,\n output: '',\n error: 'Registry URL must use HTTPS',\n };\n }\n\n // Check package.json exists\n const pkgJsonPath = path.join(packageDir, 'package.json');\n if (!fs.existsSync(pkgJsonPath)) {\n return {\n success: false,\n output: '',\n error: 'package.json not found in package directory',\n };\n }\n\n // Read package info\n let packageName: string;\n let version: string;\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n packageName = pkgJson.name;\n version = pkgJson.version;\n } catch (e) {\n return {\n success: false,\n output: '',\n error: `Failed to read package.json: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n // Create temporary .npmrc\n const npmrcPath = path.join(packageDir, '.npmrc');\n const registryHost = new URL(registry).host;\n const npmrcContent = `//${registryHost}/:_authToken=${token}\\nregistry=${registry}\\n`;\n\n try {\n // Write .npmrc with restricted permissions (owner read/write only)\n fs.writeFileSync(npmrcPath, npmrcContent, { mode: 0o600 });\n\n // Build npm publish command\n const args = ['publish'];\n if (dryRun) {\n args.push('--dry-run');\n }\n args.push('--access', 'public');\n\n const command = `npm ${args.join(' ')}`;\n\n // Execute npm publish\n const { stdout, stderr } = await execAsync(command, {\n cwd: packageDir,\n env: {\n ...process.env,\n // Ensure npm uses our .npmrc\n npm_config_userconfig: npmrcPath,\n },\n });\n\n const output = [stdout, stderr].filter(Boolean).join('\\n');\n\n return {\n success: true,\n output,\n packageName,\n version,\n };\n } catch (e) {\n const error = e as Error & { stdout?: string; stderr?: string };\n const output = [error.stdout, error.stderr].filter(Boolean).join('\\n');\n\n return {\n success: false,\n output,\n error: error.message || 'npm publish failed',\n };\n } finally {\n // Always delete .npmrc, even on error\n try {\n if (fs.existsSync(npmrcPath)) {\n fs.unlinkSync(npmrcPath);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n }\n\n /**\n * Check if a package version already exists on the registry.\n *\n * @param packageName - Package name\n * @param version - Version to check\n * @param registry - Registry URL\n * @returns true if version exists\n */\n async versionExists(\n packageName: string,\n version: string,\n registry = 'https://registry.npmjs.org'\n ): Promise<boolean> {\n try {\n const url = `${registry}/${packageName}/${version}`;\n const response = await fetch(url);\n return response.status === 200;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the npm package URL for a published package.\n *\n * @param packageName - Package name\n * @param registry - Registry URL\n * @returns URL to view the package\n */\n getPackageUrl(packageName: string, registry = 'https://registry.npmjs.org'): string {\n if (registry === 'https://registry.npmjs.org') {\n return `https://www.npmjs.com/package/${packageName}`;\n }\n // For custom registries, return the registry URL\n return `${registry}/${packageName}`;\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Plugin, ViteDevServer } from \"vite\";\n\nimport { generateTypes, getDefaultConfig, needsRegeneration } from \"./sdk/generateTypes.js\";\nimport { parseModelFile } from \"./utils/model-parser.js\";\nimport {\n saveModel,\n deleteModel,\n renameModel,\n validateModelData,\n modelExists,\n transformModelData,\n savePrompt,\n deletePrompt,\n renamePrompt,\n validatePromptData,\n promptExists,\n transformPromptData,\n saveAgent,\n deleteAgent,\n validateAgentData,\n agentExists,\n transformAgentData,\n updateModelReferencesInPrompts,\n updatePromptReferencesInPrompts,\n updatePromptReferencesInAgents,\n} from \"./sdk/persistence/index.js\";\nimport { PackingService } from \"./packing/packing-service.js\";\nimport { UnpackingService } from \"./packing/unpacking-service.js\";\nimport { NpmPublishService } from \"./packing/npm-publish-service.js\";\nimport type { ItemSelection, UnpackItemSelection } from \"./packing/types.js\";\n\nconst VIRTUAL_TOOLS_ID = \"virtual:@standardagents-tools\";\nconst RESOLVED_VIRTUAL_TOOLS_ID = \"\\0\" + VIRTUAL_TOOLS_ID;\n\nconst VIRTUAL_ROUTES_ID = \"virtual:@standardagents-routes\";\nconst RESOLVED_VIRTUAL_ROUTES_ID = \"\\0\" + VIRTUAL_ROUTES_ID;\n\n// Legacy alias for backward compatibility\nconst VIRTUAL_ROUTER_ID = \"virtual:@standardagents/router\";\nconst RESOLVED_VIRTUAL_ROUTER_ID = \"\\0\" + VIRTUAL_ROUTER_ID;\n\nconst VIRTUAL_HOOKS_ID = \"virtual:@standardagents-hooks\";\nconst RESOLVED_VIRTUAL_HOOKS_ID = \"\\0\" + VIRTUAL_HOOKS_ID;\n\nconst VIRTUAL_CONFIG_ID = \"virtual:@standardagents-config\";\nconst RESOLVED_VIRTUAL_CONFIG_ID = \"\\0\" + VIRTUAL_CONFIG_ID;\n\nconst VIRTUAL_THREAD_API_ID = \"virtual:@standardagents-thread-api\";\nconst RESOLVED_VIRTUAL_THREAD_API_ID = \"\\0\" + VIRTUAL_THREAD_API_ID;\n\n// Virtual modules for models, prompts, and agents\nconst VIRTUAL_MODELS_ID = \"virtual:@standardagents-models\";\nconst RESOLVED_VIRTUAL_MODELS_ID = \"\\0\" + VIRTUAL_MODELS_ID;\n\nconst VIRTUAL_PROMPTS_ID = \"virtual:@standardagents-prompts\";\nconst RESOLVED_VIRTUAL_PROMPTS_ID = \"\\0\" + VIRTUAL_PROMPTS_ID;\n\nconst VIRTUAL_AGENTS_ID = \"virtual:@standardagents-agents\";\nconst RESOLVED_VIRTUAL_AGENTS_ID = \"\\0\" + VIRTUAL_AGENTS_ID;\n\nconst VIRTUAL_EFFECTS_ID = \"virtual:@standardagents-effects\";\nconst RESOLVED_VIRTUAL_EFFECTS_ID = \"\\0\" + VIRTUAL_EFFECTS_ID;\n\nconst VIRTUAL_PROVIDERS_ID = \"virtual:@standardagents-providers\";\nconst RESOLVED_VIRTUAL_PROVIDERS_ID = \"\\0\" + VIRTUAL_PROVIDERS_ID;\n\n// Namespaced registry for packing system\nconst VIRTUAL_REGISTRY_ID = \"virtual:@standardagents-registry\";\nconst RESOLVED_VIRTUAL_REGISTRY_ID = \"\\0\" + VIRTUAL_REGISTRY_ID;\n\n// Consolidated virtual module that provides DurableThread and DurableAgentBuilder\n// with methods already implemented (tools, hooks, models, prompts, agents)\nconst VIRTUAL_BUILDER_ID = \"virtual:@standardagents/builder\";\nconst RESOLVED_VIRTUAL_BUILDER_ID = \"\\0\" + VIRTUAL_BUILDER_ID;\n\n// API Routes functionality\nfunction scanApiDirectory(\n dir: string,\n baseRoute = \"\"\n): Array<{\n method: string;\n route: string;\n importPath: string;\n}> {\n const routes: Array<{ method: string; route: string; importPath: string }> =\n [];\n\n if (!fs.existsSync(dir)) {\n return routes;\n }\n\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Convert [param] to :param for rou3 dynamic routes in directory names\n const convertedDirName = entry.name.replace(/\\[([^\\]]+)\\]/g, ':$1');\n const subRoute = baseRoute + \"/\" + convertedDirName;\n routes.push(...scanApiDirectory(fullPath, subRoute));\n } else if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(/\\.ts$/, \"\");\n let method = \"\";\n let routePath = baseRoute;\n\n if (fileName.includes(\".\")) {\n const parts = fileName.split(\".\");\n const methodPart = parts[parts.length - 1].toUpperCase();\n if ([\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\"].includes(methodPart)) {\n method = methodPart;\n const pathPart = parts.slice(0, -1).join(\".\");\n if (pathPart !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = pathPart.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n } else {\n if (fileName !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = fileName.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n }\n } else {\n if (fileName !== \"index\") {\n // Convert [param] to :param for rou3 dynamic routes\n const convertedPath = fileName.replace(/\\[([^\\]]+)\\]/g, ':$1');\n routePath += \"/\" + convertedPath;\n }\n }\n\n const importPath =\n \"./\" + path.relative(process.cwd(), fullPath).replace(/\\\\/g, \"/\");\n\n routes.push({\n method,\n route: routePath || \"/\",\n importPath,\n });\n }\n }\n\n return routes;\n } catch (error) {\n console.error(`Error scanning API directory ${dir}:`, error);\n return [];\n }\n}\n\n// Tools functionality\nfunction isSnakeCase(str: string): boolean {\n return /^[a-z][a-z0-9_]*[a-z0-9]$/.test(str) || /^[a-z]$/.test(str);\n}\n\nfunction validateToolFile(filePath: string, fileName: string): string | null {\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n const hasDefaultExport = /export\\s+default\\s+defineTool/.test(content);\n\n if (!hasDefaultExport) {\n return `Tool file '${fileName}.ts' must have a default export using defineTool()`;\n }\n\n return null;\n } catch (error) {\n return `Failed to read tool file '${fileName}.ts'`;\n }\n}\n\nasync function scanToolsDirectory(\n dir: string\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const tools: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return tools;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n let toolError: string | undefined;\n\n const validationError = validateToolFile(filePath, fileName);\n\n if (validationError) {\n toolError = validationError;\n console.error(`\\n❌ Tool validation error: ${validationError}`);\n }\n\n if (!isSnakeCase(fileName)) {\n const warning = `Tool name should be in snake_case format (e.g., 'log_name', 'send_email')`;\n if (toolError) {\n toolError += ` | ${warning}`;\n } else {\n toolError = warning;\n }\n console.warn(\n `\\n⚠️ Tool naming warning: '${fileName}' should be in snake_case format (e.g., 'log_name', 'send_email')`\n );\n }\n\n tools.push({ name: fileName, importPath, error: toolError });\n }\n }\n\n return tools;\n}\n\n/**\n * Hook metadata extracted from a hook definition file.\n */\ninterface HookFileInfo {\n /** Unique hook ID from defineHook({ id: '...' }) */\n id: string;\n /** Hook type from defineHook({ hook: '...' }) */\n hook: string;\n /** Import path for the hook file */\n importPath: string;\n}\n\n/**\n * Scan hooks directory and extract hook metadata from defineHook calls.\n * Extracts both the hook ID and hook type for proper registration.\n */\nasync function scanHooksDirectory(\n dir: string\n): Promise<HookFileInfo[]> {\n const hooks: HookFileInfo[] = [];\n\n if (!fs.existsSync(dir)) {\n return hooks;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n\n // Skip index.ts - it's a utility module, not a hook\n if (fileName === \"index\") {\n continue;\n }\n\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n\n // Extract id from defineHook({ ... id: 'xxx' ... })\n const idMatch = content.match(/id:\\s*['\"]([^'\"]+)['\"]/);\n // Extract hook type from defineHook({ ... hook: 'xxx' ... })\n const hookMatch = content.match(/hook:\\s*['\"]([^'\"]+)['\"]/);\n\n if (idMatch && hookMatch) {\n hooks.push({\n id: idMatch[1],\n hook: hookMatch[1],\n importPath,\n });\n } else {\n // Fallback for old-style hooks without id/hook properties\n // Use filename as both id and name for backward compatibility\n console.warn(\n `[vite-plugin-agent] Hook file '${entry.name}' is using deprecated format. ` +\n `Please update to use defineHook({ hook: '...', id: '...', execute: ... })`\n );\n }\n } catch (error) {\n console.error(`[vite-plugin-agent] Error reading hook file ${entry.name}:`, error);\n }\n }\n }\n\n return hooks;\n}\n\n/**\n * Scan a directory for config definitions (models, prompts, or agents).\n * Extracts the name from the defineX() call in each file.\n */\nasync function scanConfigDirectory(\n dir: string,\n definePattern: RegExp\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const items: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return items;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n\n // Check for default export with define function\n const hasDefaultExport = definePattern.test(content);\n if (!hasDefaultExport) {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `File must have a default export using the define function`,\n });\n continue;\n }\n\n // Extract name from defineX({ name: 'xxx', ... })\n const nameMatch = content.match(/name:\\s*['\"]([^'\"]+)['\"]/);\n if (nameMatch) {\n items.push({ name: nameMatch[1], importPath });\n } else {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `Could not extract name from definition`,\n });\n }\n } catch (error) {\n items.push({\n name: entry.name.replace(\".ts\", \"\"),\n importPath,\n error: `Failed to read file: ${error}`,\n });\n }\n }\n }\n\n return items;\n}\n\nasync function scanModelsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+defineModel/);\n}\n\nasync function scanPromptsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+definePrompt/);\n}\n\nasync function scanAgentsDirectory(dir: string) {\n return scanConfigDirectory(dir, /export\\s+default\\s+defineAgent/);\n}\n\n/**\n * Scan effects directory for effect definitions.\n * Effects use the same pattern as tools (filename = effect name).\n */\nasync function scanEffectsDirectory(\n dir: string\n): Promise<Array<{ name: string; importPath: string; error?: string }>> {\n const effects: Array<{ name: string; importPath: string; error?: string }> = [];\n\n if (!fs.existsSync(dir)) {\n return effects;\n }\n\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && entry.name.endsWith(\".ts\")) {\n const fileName = entry.name.replace(\".ts\", \"\");\n const filePath = path.join(dir, entry.name);\n const importPath =\n \"./\" + path.relative(process.cwd(), filePath).replace(/\\\\/g, \"/\");\n\n // Skip CLAUDE.md and other non-effect files\n if (fileName === \"CLAUDE\" || fileName.startsWith(\"_\")) {\n continue;\n }\n\n // Verify file exports defineEffect\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n if (!content.includes(\"defineEffect\")) {\n continue; // Not an effect file\n }\n } catch {\n continue;\n }\n\n effects.push({ name: fileName, importPath });\n }\n }\n\n return effects;\n}\n\n/**\n * Parse JSON body from an incoming HTTP request (Node.js IncomingMessage).\n * Used by dev-mode API handlers that intercept requests before they reach workerd.\n */\nfunction parseRequestBody(req: import('http').IncomingMessage): Promise<any> {\n return new Promise((resolve, reject) => {\n let body = '';\n req.on('data', (chunk: Buffer) => {\n body += chunk.toString();\n });\n req.on('end', () => {\n try {\n resolve(body ? JSON.parse(body) : {});\n } catch (e) {\n reject(new Error('Invalid JSON body'));\n }\n });\n req.on('error', reject);\n });\n}\n\nexport interface AgentPluginOptions {\n mountPoint?: string;\n toolsDir?: string;\n hooksDir?: string;\n apiDir?: string;\n modelsDir?: string;\n promptsDir?: string;\n agentsDir?: string;\n effectsDir?: string;\n /**\n * Additional provider packages to expose in the UI.\n * First-party providers (@standardagents/openai, @standardagents/openrouter) are always included.\n * @example ['my-custom-provider', '@company/custom-openai']\n */\n providers?: string[];\n}\n\nexport function agentbuilder(options: AgentPluginOptions = {}): Plugin {\n // Normalize mount point: ensure leading slash, no trailing slash\n let mountPoint = options.mountPoint || \"/agents\";\n if (!mountPoint.startsWith(\"/\")) {\n mountPoint = \"/\" + mountPoint;\n }\n if (mountPoint.endsWith(\"/\") && mountPoint.length > 1) {\n mountPoint = mountPoint.slice(0, -1);\n }\n\n const toolsDir = options.toolsDir\n ? path.resolve(process.cwd(), options.toolsDir)\n : path.resolve(process.cwd(), \"agents/tools\");\n const hooksDir = options.hooksDir\n ? path.resolve(process.cwd(), options.hooksDir)\n : path.resolve(process.cwd(), \"agents/hooks\");\n const threadApiDir = options.apiDir\n ? path.resolve(process.cwd(), options.apiDir)\n : path.resolve(process.cwd(), \"agents/api\");\n const modelsDir = options.modelsDir\n ? path.resolve(process.cwd(), options.modelsDir)\n : path.resolve(process.cwd(), \"agents/models\");\n const promptsDir = options.promptsDir\n ? path.resolve(process.cwd(), options.promptsDir)\n : path.resolve(process.cwd(), \"agents/prompts\");\n const agentsDir = options.agentsDir\n ? path.resolve(process.cwd(), options.agentsDir)\n : path.resolve(process.cwd(), \"agents/agents\");\n const effectsDir = options.effectsDir\n ? path.resolve(process.cwd(), options.effectsDir)\n : path.resolve(process.cwd(), \"agents/effects\");\n const outputDir = path.resolve(process.cwd(), \".agents\");\n\n // Type generation configuration\n const typeGenConfig = {\n modelsDir,\n promptsDir,\n agentsDir,\n toolsDir,\n hooksDir,\n outputDir,\n };\n\n // Helper to regenerate types\n function regenerateTypes() {\n if (needsRegeneration(typeGenConfig)) {\n generateTypes(typeGenConfig);\n }\n }\n\n // Read and prepare rou3 code for inlining\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const rou3Path = path.join(__dirname, '../dist/rou3.js');\n let rou3Code = '';\n try {\n rou3Code = fs.readFileSync(rou3Path, 'utf-8')\n // Remove export statement\n .replace(/^export \\{[^}]+\\};?\\s*$/gm, '')\n // Remove sourcemap comments\n .replace(/\\/\\/# sourceMappingURL=.+$/gm, '')\n .trim();\n } catch (err) {\n console.warn('[vite-plugin-agent] Could not read rou3.js for inlining:', err);\n }\n\n let routesVersion = Math.random().toString(36).substring(7);\n let agentsVersion = Math.random().toString(36).substring(7);\n let registryVersion = Math.random().toString(36).substring(7);\n\n // Helper to dynamically find the worker environment (non-client environment)\n // The actual environment name comes from the user's wrangler.jsonc 'name' property\n // and is transformed to snake_case by the Cloudflare Vite plugin\n function getWorkerEnvironment(server: ViteDevServer) {\n const envNames = Object.keys(server.environments);\n // Find the first environment that's not 'client' (the default client environment)\n const workerEnvName = envNames.find(name => name !== 'client');\n\n if (!workerEnvName) {\n console.warn('[vite-plugin-agent] Could not find worker environment');\n return null;\n }\n\n return server.environments[workerEnvName];\n }\n\n // Helper functions for module reloading\n // NOTE: Virtual modules don't work with reloadModule() because they have no file property.\n // We use invalidateModule() + hot.send() to force workerd to re-import the module.\n\n /**\n * Invalidate a virtual module across ALL Vite environments.\n *\n * Key insight: Each Vite environment (client, workers, etc.) has its own isolated\n * EnvironmentModuleGraph. A module loaded in one environment doesn't exist in another's\n * graph. We need to search ALL environments to find where the module was actually loaded.\n *\n * The function tries multiple lookup strategies:\n * 1. By resolved ID (e.g., \"\\0virtual:@standardagents-agents\")\n * 2. By virtual ID URL (e.g., \"virtual:@standardagents-agents\")\n * 3. By resolved ID URL (same as #1 but via URL map)\n *\n * When found, it invalidates the module AND all its importers to ensure the\n * entire dependency chain gets refreshed.\n */\n function invalidateVirtualModule(\n server: ViteDevServer,\n virtualId: string,\n resolvedId: string\n ): { invalidatedAny: boolean; environments: string[] } {\n const invalidatedEnvs: string[] = [];\n\n for (const [envName, env] of Object.entries(server.environments)) {\n // Try multiple lookup methods since workerd may have stored the module\n // with a different key format\n let mod = env.moduleGraph.getModuleById(resolvedId);\n\n if (!mod) {\n // Try by virtual ID URL\n mod = env.moduleGraph.urlToModuleMap.get(virtualId);\n }\n\n if (!mod) {\n // Try by resolved ID URL (some environments store by this)\n mod = env.moduleGraph.urlToModuleMap.get(resolvedId);\n }\n\n if (mod) {\n console.log(`[HMR] Found ${virtualId} in ${envName} environment, invalidating`);\n env.moduleGraph.invalidateModule(mod);\n invalidatedEnvs.push(envName);\n\n // Also invalidate all importers to ensure the dependency chain refreshes\n // This is critical for modules that import the virtual module\n for (const importer of mod.importers) {\n env.moduleGraph.invalidateModule(importer);\n console.log(`[HMR] Also invalidated importer: ${importer.url}`);\n }\n }\n }\n\n return {\n invalidatedAny: invalidatedEnvs.length > 0,\n environments: invalidatedEnvs,\n };\n }\n\n async function reloadToolsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_TOOLS_ID,\n RESOLVED_VIRTUAL_TOOLS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n // This handles the case where the module hasn't been loaded yet\n const toolsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_TOOLS_ID\n );\n workerEnv.moduleGraph.invalidateModule(toolsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:tools-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadToolsModule error:', err);\n return false;\n }\n }\n\n async function reloadRoutesModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n routesVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_ROUTES_ID,\n RESOLVED_VIRTUAL_ROUTES_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const routesModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_ROUTES_ID\n );\n workerEnv.moduleGraph.invalidateModule(routesModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:routes-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRoutesModule error:', err);\n return false;\n }\n }\n\n async function reloadHooksModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_HOOKS_ID,\n RESOLVED_VIRTUAL_HOOKS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const hooksModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_HOOKS_ID\n );\n workerEnv.moduleGraph.invalidateModule(hooksModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:hooks-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadHooksModule error:', err);\n return false;\n }\n }\n\n async function reloadModelsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_MODELS_ID,\n RESOLVED_VIRTUAL_MODELS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const modelsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_MODELS_ID\n );\n workerEnv.moduleGraph.invalidateModule(modelsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:models-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadModelsModule error:', err);\n return false;\n }\n }\n\n async function reloadPromptsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_PROMPTS_ID,\n RESOLVED_VIRTUAL_PROMPTS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const promptsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_PROMPTS_ID\n );\n workerEnv.moduleGraph.invalidateModule(promptsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:prompts-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadPromptsModule error:', err);\n return false;\n }\n }\n\n async function reloadAgentsModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n agentsVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_AGENTS_ID,\n RESOLVED_VIRTUAL_AGENTS_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const agentsModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_AGENTS_ID\n );\n workerEnv.moduleGraph.invalidateModule(agentsModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n // Also send custom event for UI reactivity\n server.ws.send({\n type: \"custom\",\n event: \"agent:agents-updated\",\n data: { timestamp: Date.now() },\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadAgentsModule error:', err);\n return false;\n }\n }\n\n async function reloadRouterModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n routesVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n // Note: VIRTUAL_ROUTER_ID is a legacy alias that resolves to VIRTUAL_ROUTES_ID\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_ROUTES_ID,\n RESOLVED_VIRTUAL_ROUTES_ID\n );\n\n // Also invalidate the legacy router alias\n invalidateVirtualModule(\n server,\n VIRTUAL_ROUTER_ID,\n RESOLVED_VIRTUAL_ROUTER_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const routerModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_ROUTES_ID\n );\n workerEnv.moduleGraph.invalidateModule(routerModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRouterModule error:', err);\n return false;\n }\n }\n\n async function reloadRegistryModule(server: ViteDevServer) {\n const workerEnv = getWorkerEnvironment(server);\n if (!workerEnv) return false;\n\n try {\n // Increment version FIRST so load() generates new code\n registryVersion = Math.random().toString(36).substring(7);\n\n // Invalidate module in ALL environments where it exists\n const { invalidatedAny } = invalidateVirtualModule(\n server,\n VIRTUAL_REGISTRY_ID,\n RESOLVED_VIRTUAL_REGISTRY_ID\n );\n\n if (!invalidatedAny) {\n // Module not found in any environment - create entry and invalidate\n const registryModule = await workerEnv.moduleGraph.ensureEntryFromUrl(\n VIRTUAL_REGISTRY_ID\n );\n workerEnv.moduleGraph.invalidateModule(registryModule);\n }\n\n // Send HMR update to trigger module re-evaluation in workerd\n workerEnv.hot.send({\n type: \"full-reload\",\n path: \"*\",\n });\n return true;\n } catch (err) {\n console.error('[HMR] reloadRegistryModule error:', err);\n return false;\n }\n }\n\n function handleFileChange(\n file: string,\n server: ViteDevServer\n ) {\n const isToolFile = file.startsWith(toolsDir) && file.endsWith(\".ts\");\n const isThreadApiFile = file.startsWith(threadApiDir) && file.endsWith(\".ts\");\n const isHookFile = file.startsWith(hooksDir) && file.endsWith(\".ts\");\n const isModelFile = file.startsWith(modelsDir) && file.endsWith(\".ts\");\n const isPromptFile = file.startsWith(promptsDir) && file.endsWith(\".ts\");\n const isAgentFile = file.startsWith(agentsDir) && file.endsWith(\".ts\");\n\n const isConfigFile = isModelFile || isPromptFile || isAgentFile;\n\n if (!isToolFile && !isThreadApiFile && !isHookFile && !isConfigFile) return;\n\n // Regenerate types when config files change\n if (isConfigFile || isToolFile) {\n regenerateTypes();\n }\n\n if (isToolFile) {\n reloadToolsModule(server);\n }\n\n if (isModelFile) {\n reloadModelsModule(server);\n }\n\n if (isPromptFile) {\n reloadPromptsModule(server);\n }\n\n if (isAgentFile) {\n reloadAgentsModule(server);\n }\n\n if (isThreadApiFile) {\n reloadRoutesModule(server);\n }\n\n if (isHookFile) {\n reloadHooksModule(server);\n // Also reload routes since the routes virtual module imports and passes hooks\n reloadRoutesModule(server);\n }\n }\n\n return {\n name: \"vite-plugin-agent\",\n enforce: \"pre\" as const,\n\n config() {\n // EXCLUDE our packages from pre-bundling - they contain cloudflare:workers\n // imports that can't be resolved during Vite's dependency optimization phase.\n // The Cloudflare Vite plugin handles these specially in the worker environment.\n const depsToExclude = [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n '@standardagents/builder/image-processing',\n '@standardagents/builder/packing',\n // WASM image processing deps - must be excluded to avoid pre-bundle cache issues\n '@cf-wasm/photon',\n '@cf-wasm/photon/workerd',\n '@standardagents/sip',\n // sip's jsquash dependencies (WASM-based decoders)\n '@jsquash/avif',\n '@jsquash/webp',\n // Rollup and plugins - only used by CLI pack command, not in dev/production\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n\n // INCLUDE common dependencies that are used by the builder package\n // This prevents dynamic discovery during dev which causes cache invalidation errors\n const depsToInclude = [\n 'zod',\n 'openai',\n 'magic-string',\n '@standardagents/spec',\n ];\n\n // Locate the builder's pre-built client assets directory\n // This tells the Cloudflare Vite plugin that we have static assets to serve,\n // which prevents it from stripping the 'assets' config from wrangler.json output.\n // Without this, @cloudflare/vite-plugin removes assets config when it doesn't detect\n // a client entry, imported assets, or a publicDir with files.\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const builderClientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n return {\n // Set publicDir to builder's client assets so Cloudflare plugin preserves assets config\n publicDir: fs.existsSync(builderClientDir) ? builderClientDir : undefined,\n build: {\n rollupOptions: {\n // The packing system dynamically imports rollup, typescript, and related\n // plugins for the CLI `pack` command. These are never needed at runtime\n // in Cloudflare Workers and must be externalized:\n // - rollup/typescript/fsevents contain Node.js-only APIs (__filename, fs)\n // - fsevents is macOS-only and doesn't exist on Linux CI\n external: [\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ],\n },\n },\n optimizeDeps: {\n // Exclude our packages from pre-bundling - they contain cloudflare:workers imports\n // that cannot be resolved during dependency optimization\n exclude: depsToExclude,\n // Include common deps upfront to prevent re-optimization during dev\n include: depsToInclude,\n },\n ssr: {\n // noExternal ensures Vite transforms these instead of leaving as external\n // The Cloudflare plugin handles the actual bundling and knows about cloudflare:workers\n noExternal: [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n ],\n },\n // Suppress sourcemap warnings for packages without source maps (like typescript)\n server: {\n sourcemapIgnoreList: (sourcePath) => {\n return sourcePath.includes('node_modules/typescript') ||\n sourcePath.includes('node_modules/.pnpm/typescript');\n },\n },\n };\n },\n\n // Apply exclusions and inclusions to ALL environments including Cloudflare worker\n configEnvironment(name, config) {\n const depsToExclude = [\n '@standardagents/builder',\n '@standardagents/builder/runtime',\n '@standardagents/builder/built-in-routes',\n '@standardagents/builder/image-processing',\n '@standardagents/builder/packing',\n // WASM image processing deps\n '@cf-wasm/photon',\n '@cf-wasm/photon/workerd',\n '@standardagents/sip',\n // sip's jsquash dependencies (WASM-based decoders)\n '@jsquash/avif',\n '@jsquash/webp',\n // Rollup and plugins - only used by CLI pack command, not in dev/production\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n\n // Include common deps upfront to prevent re-optimization during dev\n const depsToInclude = [\n 'zod',\n 'zod/v3',\n 'zod/v4',\n 'zod/v4/core',\n 'openai',\n 'magic-string',\n '@standardagents/spec',\n ];\n\n // Ensure these are excluded from optimization in all environments\n config.optimizeDeps = config.optimizeDeps || {};\n config.optimizeDeps.exclude = [\n ...(config.optimizeDeps.exclude || []),\n ...depsToExclude.filter(dep => !config.optimizeDeps?.exclude?.includes(dep)),\n ];\n config.optimizeDeps.include = [\n ...(config.optimizeDeps.include || []),\n ...depsToInclude.filter(dep => !config.optimizeDeps?.include?.includes(dep)),\n ];\n\n // Externalize packing system deps from production builds for all environments.\n // These are only used by the CLI `pack` command and contain Node.js APIs\n // (__filename, fs) that don't exist in Cloudflare Workers.\n const packingDeps = [\n 'rollup',\n '@rollup/plugin-commonjs',\n '@rollup/plugin-node-resolve',\n 'rollup-plugin-esbuild',\n 'fsevents',\n 'typescript',\n ];\n config.build = config.build || {};\n config.build.rollupOptions = config.build.rollupOptions || {};\n const existing = config.build.rollupOptions.external;\n if (Array.isArray(existing)) {\n for (const dep of packingDeps) {\n if (!existing.includes(dep)) existing.push(dep);\n }\n } else if (typeof existing === 'string') {\n config.build.rollupOptions.external = [existing, ...packingDeps];\n } else if (!existing) {\n config.build.rollupOptions.external = [...packingDeps];\n }\n },\n\n resolveId(id) {\n if (id === VIRTUAL_TOOLS_ID) {\n return RESOLVED_VIRTUAL_TOOLS_ID;\n }\n if (id === VIRTUAL_ROUTES_ID || id === VIRTUAL_ROUTER_ID) {\n return RESOLVED_VIRTUAL_ROUTES_ID;\n }\n if (id === VIRTUAL_HOOKS_ID) {\n return RESOLVED_VIRTUAL_HOOKS_ID;\n }\n if (id === VIRTUAL_CONFIG_ID) {\n return RESOLVED_VIRTUAL_CONFIG_ID;\n }\n if (id === VIRTUAL_THREAD_API_ID) {\n return RESOLVED_VIRTUAL_THREAD_API_ID;\n }\n if (id === VIRTUAL_MODELS_ID) {\n return RESOLVED_VIRTUAL_MODELS_ID;\n }\n if (id === VIRTUAL_PROMPTS_ID) {\n return RESOLVED_VIRTUAL_PROMPTS_ID;\n }\n if (id === VIRTUAL_AGENTS_ID) {\n return RESOLVED_VIRTUAL_AGENTS_ID;\n }\n if (id === VIRTUAL_EFFECTS_ID) {\n return RESOLVED_VIRTUAL_EFFECTS_ID;\n }\n if (id === VIRTUAL_PROVIDERS_ID) {\n return RESOLVED_VIRTUAL_PROVIDERS_ID;\n }\n if (id === VIRTUAL_REGISTRY_ID) {\n return RESOLVED_VIRTUAL_REGISTRY_ID;\n }\n if (id === VIRTUAL_BUILDER_ID) {\n return RESOLVED_VIRTUAL_BUILDER_ID;\n }\n },\n\n async load(id) {\n\n if (id === RESOLVED_VIRTUAL_TOOLS_ID) {\n const tools = await scanToolsDirectory(toolsDir);\n\n const toolsCode = tools\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => [\"${escapedError}\", null, async () => ({ status: \"error\", error: \"Tool validation failed\" })],`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import tool ${name}:', error);\n return [\"Failed to load tool: \" + error.message, null, async () => ({ status: \"error\", error: \"Import failed\" })];\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n const moduleCode = `// Virtual agent tools module\nexport const tools = {\n${toolsCode}\n};`;\n return moduleCode;\n }\n\n if (id === RESOLVED_VIRTUAL_ROUTES_ID) {\n // Scan user thread API directory\n const threadRoutes = scanApiDirectory(threadApiDir);\n\n // Generate user thread route registration code\n const threadRouteCode = threadRoutes\n .map(({ method, route, importPath }) => {\n const apiRoute = `/api/threads/:id${route}`;\n return ` addRoute(\n router,\n \"${method}\",\n \"${apiRoute}\",\n /* v${routesVersion} */ async () => (await import(\"${importPath}\")).default\n );`;\n })\n .join('\\n');\n\n return `// Inline rou3 router code (no external imports) /* v${routesVersion} */\n${rou3Code}\n\nimport { registerBuiltInRoutes } from \"@standardagents/builder/built-in-routes\";\nimport { config } from \"virtual:@standardagents-config\";\nimport { tools } from \"virtual:@standardagents-tools\";\nimport { hooks } from \"virtual:@standardagents-hooks\";\nimport { models, modelNames } from \"virtual:@standardagents-models\";\nimport { prompts, promptNames } from \"virtual:@standardagents-prompts\";\nimport { agents, agentNames } from \"virtual:@standardagents-agents\";\nimport { registry } from \"virtual:@standardagents-registry\";\nimport { requireAuth, createThreadEndpointHandler } from \"@standardagents/builder/runtime\";\nimport { isThreadEndpoint } from \"@standardagents/spec\";\n\nconst MOUNT_POINT = \"${mountPoint}\";\n\n// Routes that don't require authentication\nconst PUBLIC_ROUTES = [\n '/api/auth/login',\n '/api/auth/config',\n '/api/auth/oauth/github',\n '/api/auth/oauth/google',\n '/api/auth/oauth/github/callback',\n '/api/auth/oauth/google/callback',\n '/api/hooks' // Hook metadata is safe to expose publicly\n];\n\n// Check if a route is public (no auth required)\nfunction isPublicRoute(routePath) {\n // Exact match for auth routes\n if (PUBLIC_ROUTES.includes(routePath)) {\n return true;\n }\n\n // Thread routes are always public\n if (routePath.startsWith('/api/threads/') || routePath === '/api/threads') {\n return true;\n }\n\n // Provider icon routes are public (used by <img src>)\n if (routePath.startsWith('/api/providers/') && routePath.includes('/icon')) {\n return true;\n }\n\n return false;\n}\n\n// CORS headers for API responses\nconst CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, DELETE, PATCH, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Authorization, X-Requested-With\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\n// Helper to create headers with CORS\nfunction corsHeaders(contentType) {\n return {\n \"Content-Type\": contentType,\n ...CORS_HEADERS,\n };\n}\n\n// Helper to add CORS headers to any Response without touching the body\nfunction addCorsHeaders(response) {\n // Skip WebSocket upgrade responses - they can't be wrapped\n if (response.status === 101) {\n return response;\n }\n\n // Skip if already has CORS headers\n if (response.headers.has(\"Access-Control-Allow-Origin\")) {\n return response;\n }\n\n // Create new headers with CORS added\n const newHeaders = new Headers(response.headers);\n for (const [key, value] of Object.entries(CORS_HEADERS)) {\n newHeaders.set(key, value);\n }\n\n // Return new Response with same body stream (not cloned, just transferred)\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: newHeaders,\n });\n}\n\nexport async function router(request, env) {\n const url = new URL(request.url);\n const pathname = url.pathname;\n\n // Check if request is under mount point\n if (!pathname.startsWith(MOUNT_POINT)) {\n return null;\n }\n\n // Handle CORS preflight requests\n if (request.method === \"OPTIONS\") {\n return new Response(null, {\n status: 204,\n headers: CORS_HEADERS,\n });\n }\n\n // Strip mount point prefix for route matching, ensuring we keep the leading slash\n let routePath = pathname.slice(MOUNT_POINT.length) || \"/\";\n if (!routePath.startsWith('/')) {\n routePath = '/' + routePath;\n }\n\n // Handle API routes\n const router = createRouter();\n\n // Register built-in API routes with runtime data\n registerBuiltInRoutes(router, { config, tools, hooks, models, modelNames, prompts, promptNames, agents, agentNames, registry });\n\n // Register user thread API routes\n${threadRouteCode}\n\n const routeMatch = findRoute(\n router,\n request.method.toUpperCase(),\n routePath\n );\n\n if (routeMatch) {\n // Check if authentication is required for this route\n const publicRoute = isPublicRoute(routePath);\n const isApiRoute = routePath.startsWith('/api/');\n\n let authContext = null;\n\n // Require authentication for all API routes except public ones\n if (isApiRoute && !publicRoute) {\n const authResult = await requireAuth(request, env);\n\n // If requireAuth returns a Response, it's an error (401)\n if (authResult instanceof Response) {\n return addCorsHeaders(authResult);\n }\n\n authContext = authResult;\n }\n\n let controller = await routeMatch.data();\n\n // Check if this is a thread endpoint (marked by defineThreadEndpoint)\n // If so, wrap it with createThreadEndpointHandler to provide ThreadState\n if (isThreadEndpoint(controller)) {\n controller = createThreadEndpointHandler(controller.__handler);\n }\n\n const context = {\n req: request,\n params: routeMatch.params || {},\n env: env,\n url: url,\n config,\n tools,\n auth: authContext, // Add auth context to controller context\n };\n const result = await controller(context);\n\n if (result instanceof Response) {\n return addCorsHeaders(result);\n }\n if (typeof result === \"string\") {\n return new Response(result, {\n headers: corsHeaders(\"text/plain\"),\n });\n }\n // JSON responses get CORS headers\n return new Response(JSON.stringify(result), {\n headers: corsHeaders(\"application/json\"),\n });\n }\n\n // Serve UI for all other routes (SPA fallback)\n return serveUI(routePath, env);\n}\n\nasync function serveUI(pathname, env) {\n try {\n // Use Cloudflare Workers Assets binding (automatically created from wrangler assets config)\n if (env.ASSETS) {\n try {\n // Create a proper request for the asset path\n // Use a dummy origin since we only care about the path\n // Re-add mount point since pathname was stripped by router\n // Handle root mountPoint \"/\" specially to avoid double slashes\n const mountPrefix = MOUNT_POINT === \"/\" ? \"\" : MOUNT_POINT;\n const assetUrl = \\`http://localhost\\${mountPrefix}\\${pathname}\\`;\n let response = await env.ASSETS.fetch(assetUrl);\n\n // If not found, fall back to index.html for SPA routing\n const isIndexHtml = response.status === 404 || pathname === \"/\" || !pathname.includes(\".\");\n if (isIndexHtml) {\n response = await env.ASSETS.fetch(\\`http://localhost\\${mountPrefix}/index.html\\`);\n\n // Transform HTML to use configured mount point\n if (response.status === 200) {\n const html = await response.text();\n // Replace default /agents/ paths with configured mount point\n const modifiedHtml = html.replace(/\\\\/agents\\\\//g, \\`\\${MOUNT_POINT}/\\`);\n return new Response(modifiedHtml, {\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n },\n });\n }\n }\n\n return response;\n } catch (assetError) {\n console.error(\"Error fetching from ASSETS:\", assetError);\n }\n }\n\n // Fallback: proxy to UI dev server if explicitly configured\n if (env.UI_DEV_SERVER) {\n const assetPath = pathname === \"/\" ? \"/index.html\" : pathname;\n const response = await fetch(\\`\\${env.UI_DEV_SERVER}\\${assetPath}\\`);\n return response;\n }\n\n // In production/dev, assets should be served by Cloudflare Workers automatically\n // This function only handles fallback cases\n return null;\n } catch (error) {\n console.error(\"Error serving UI:\", error);\n return null;\n }\n}\n\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_HOOKS_ID) {\n const hooks = await scanHooksDirectory(hooksDir);\n\n // Generate hooks registry keyed by hook ID\n // Each hook loader returns the full hook definition { hook, id, execute }\n const hooksCode = hooks\n .map(({ id: hookId, hook, importPath }) => {\n return ` \"${hookId}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('[Hooks] Failed to import hook ${hookId}:', error);\n return null;\n }\n },`;\n })\n .join(\"\\n\");\n\n return `// Virtual agent hooks module\n// Hook registry keyed by hook ID\n// Each loader returns: { hook: string, id: string, execute: Function }\nexport const hooks = {\n${hooksCode}\n};`;\n }\n\n if (id === RESOLVED_VIRTUAL_CONFIG_ID) {\n // Get relative paths from cwd\n const relativeToolsDir = path.relative(process.cwd(), toolsDir).replace(/\\\\/g, \"/\");\n const relativeHooksDir = path.relative(process.cwd(), hooksDir).replace(/\\\\/g, \"/\");\n const relativeApiDir = path.relative(process.cwd(), threadApiDir).replace(/\\\\/g, \"/\");\n const relativeModelsDir = path.relative(process.cwd(), modelsDir).replace(/\\\\/g, \"/\");\n const relativePromptsDir = path.relative(process.cwd(), promptsDir).replace(/\\\\/g, \"/\");\n const relativeAgentsDir = path.relative(process.cwd(), agentsDir).replace(/\\\\/g, \"/\");\n\n return `// Virtual agent config module\nexport const config = {\n toolsDir: \"${relativeToolsDir}\",\n hooksDir: \"${relativeHooksDir}\",\n apiDir: \"${relativeApiDir}\",\n modelsDir: \"${relativeModelsDir}\",\n promptsDir: \"${relativePromptsDir}\",\n agentsDir: \"${relativeAgentsDir}\",\n mountPoint: \"${mountPoint}\",\n};`;\n }\n\n // Virtual modules for models, prompts, and agents\n if (id === RESOLVED_VIRTUAL_MODELS_ID) {\n const models = await scanModelsDirectory(modelsDir);\n\n const modelsCode = models\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import model ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent models module\nexport const models = {\n${modelsCode}\n};\n\nexport const modelNames = ${JSON.stringify(models.filter(m => !m.error).map(m => m.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_PROMPTS_ID) {\n const prompts = await scanPromptsDirectory(promptsDir);\n\n const promptsCode = prompts\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import prompt ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent prompts module\nexport const prompts = {\n${promptsCode}\n};\n\nexport const promptNames = ${JSON.stringify(prompts.filter(p => !p.error).map(p => p.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_AGENTS_ID) {\n console.log(`[vite-plugin-agent] load() called for agents module (v${agentsVersion})`);\n const agents = await scanAgentsDirectory(agentsDir);\n console.log(`[vite-plugin-agent] Found ${agents.length} agents:`, agents.map(a => a.name));\n\n const agentsCode = agents\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import agent ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent agents module /* v${agentsVersion} */\nexport const agents = {\n${agentsCode}\n};\n\nexport const agentNames = ${JSON.stringify(agents.filter(a => !a.error).map(a => a.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_EFFECTS_ID) {\n const effects = await scanEffectsDirectory(effectsDir);\n\n const effectsCode = effects\n .map(({ name, importPath, error }) => {\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${importPath}\")).default;\n } catch (error) {\n console.error('Failed to import effect ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Virtual agent effects module\nexport const effects = {\n${effectsCode}\n};\n\nexport const effectNames = ${JSON.stringify(effects.filter(e => !e.error).map(e => e.name))};\n`;\n }\n\n if (id === RESOLVED_VIRTUAL_PROVIDERS_ID) {\n // First-party providers (always available)\n const firstPartyProviders = [\n { name: 'openai', package: '@standardagents/openai', label: 'OpenAI', envKey: 'OPENAI_API_KEY' },\n { name: 'openrouter', package: '@standardagents/openrouter', label: 'OpenRouter', envKey: 'OPENROUTER_API_KEY' },\n ];\n\n // Custom providers from plugin options\n const customProviders = (options.providers || []).map(pkg => ({\n name: pkg.split('/').pop() || pkg,\n package: pkg,\n label: pkg.split('/').pop() || pkg,\n envKey: `${(pkg.split('/').pop() || pkg).toUpperCase().replace(/-/g, '_')}_API_KEY`,\n isCustom: true,\n }));\n\n const allProviders = [...firstPartyProviders, ...customProviders];\n\n return `// Virtual providers module - lists available LLM provider packages\nexport const providers = ${JSON.stringify(allProviders, null, 2)};\n\nexport const providerNames = ${JSON.stringify(allProviders.map(p => p.name))};\n\n// Provider factories - dynamic imports for code splitting\nexport const providerFactories = {\n${allProviders.map(p => ` \"${p.name}\": async () => (await import(\"${p.package}\")).${p.name},`).join('\\n')}\n};\n`;\n }\n\n // Namespaced registry virtual module: virtual:@standardagents-registry\n // Provides global namespace + packed package namespaces for namespace isolation\n if (id === RESOLVED_VIRTUAL_REGISTRY_ID) {\n console.log(`[vite-plugin-agent] load() called for registry module (v${registryVersion})`);\n const tools = await scanToolsDirectory(toolsDir);\n const hooks = await scanHooksDirectory(hooksDir);\n const models = await scanModelsDirectory(modelsDir);\n const prompts = await scanPromptsDirectory(promptsDir);\n const agents = await scanAgentsDirectory(agentsDir);\n\n // Helper to convert relative paths to absolute paths\n const toAbsolutePath = (relativePath: string) => {\n if (relativePath.startsWith('./')) {\n return path.resolve(process.cwd(), relativePath).replace(/\\\\/g, '/');\n }\n return relativePath;\n };\n\n // Generate global namespace loaders\n const globalToolsCode = tools\n .filter(t => !t.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalPromptsCode = prompts\n .filter(p => !p.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalModelsCode = models\n .filter(m => !m.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalAgentsCode = agents\n .filter(a => !a.error)\n .map(({ name, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${name}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n const globalHooksCode = hooks\n .map(({ id, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${id}\": async () => (await import(\"${absPath}\")).default,`;\n })\n .join(\"\\n\");\n\n // Scan for packed packages (local agents/packed/ directory)\n // Note: npm package scanning would require additional logic\n const packedDir = path.resolve(process.cwd(), 'agents/packed');\n const packedPackages: Array<{\n packageId: string;\n version: string;\n entryAgents: string[];\n items: {\n agents: Array<{ name: string; path: string }>;\n prompts: Array<{ name: string; path: string }>;\n tools: Array<{ name: string; path: string }>;\n models: Array<{ name: string; path: string }>;\n hooks: Array<{ name: string; path: string }>;\n };\n }> = [];\n\n if (fs.existsSync(packedDir)) {\n console.log(`[vite-plugin-agent] Scanning packed directory: ${packedDir}`);\n const pkgDirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n console.log(`[vite-plugin-agent] Found package dirs: ${pkgDirs.join(', ')}`);\n\n for (const pkgDirName of pkgDirs) {\n const pkgPath = path.join(packedDir, pkgDirName);\n const pkgJsonPath = path.join(pkgPath, 'package.json');\n\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n console.log(`[vite-plugin-agent] Loaded ${pkgDirName} package.json, standardagent:`, pkgJson.standardagent);\n\n // Check for standardagent field (new Rollup-based format)\n if (!pkgJson.standardagent) {\n continue; // Not a packed agent package\n }\n\n // Derive the output directory from package.json main field\n // e.g., \"./dist/index.js\" -> \"dist\", \"./src/index.js\" -> \"src\"\n const mainEntry = pkgJson.main || './dist/index.js';\n const outputDir = path.dirname(mainEntry).replace(/^\\.\\//, '');\n\n const scanPackedDir = async (subDir: string) => {\n const fullPath = path.join(pkgPath, outputDir, subDir);\n if (!fs.existsSync(fullPath)) return [];\n\n const files = fs.readdirSync(fullPath)\n .filter(f => f.endsWith('.js') || f.endsWith('.ts'))\n .map(f => ({\n name: f.replace(/\\.(js|ts)$/, ''),\n path: path.join(fullPath, f).replace(/\\\\/g, '/'),\n }));\n return files;\n };\n\n const pkg = {\n packageId: pkgJson.name,\n version: pkgJson.version,\n entryAgents: pkgJson.standardagent.entryAgents || [],\n items: {\n agents: await scanPackedDir('agents'),\n prompts: await scanPackedDir('prompts'),\n tools: await scanPackedDir('tools'),\n models: await scanPackedDir('models'),\n hooks: await scanPackedDir('hooks'),\n },\n };\n console.log(`[vite-plugin-agent] Scanned package ${pkgJson.name}:`, pkg.items.agents);\n packedPackages.push(pkg);\n } catch (err) {\n console.warn(`[vite-plugin-agent] Failed to load packed package ${pkgDirName}:`, err);\n }\n }\n }\n } else {\n console.log(`[vite-plugin-agent] Packed directory does not exist: ${packedDir}`);\n }\n console.log(`[vite-plugin-agent] Total packed packages found: ${packedPackages.length}`);\n\n // Generate packed packages code\n const packagesCode = packedPackages.map(pkg => {\n const signature = JSON.stringify({\n packageId: pkg.packageId,\n version: pkg.version,\n source: 'local',\n packedAt: Date.now(),\n });\n\n const genLoaders = (items: Array<{ name: string; path: string }>) =>\n items.map(item =>\n ` \"${item.name}\": async () => {\n const mod = await import(\"${item.path}\");\n return { ...mod.default, __package: ${signature} };\n },`\n ).join(\"\\n\");\n\n return ` \"${pkg.packageId}\": {\n agents: {\n${genLoaders(pkg.items.agents)}\n },\n prompts: {\n${genLoaders(pkg.items.prompts)}\n },\n tools: {\n${genLoaders(pkg.items.tools)}\n },\n models: {\n${genLoaders(pkg.items.models)}\n },\n hooks: {\n${genLoaders(pkg.items.hooks)}\n },\n entryAgents: ${JSON.stringify(pkg.entryAgents)},\n signature: ${signature},\n },`;\n }).join(\"\\n\");\n\n return `// Virtual namespaced registry module /* v${registryVersion} */\n// Provides global namespace + packed package namespaces for namespace isolation\n\nexport const registry = {\n global: {\n agents: {\n${globalAgentsCode}\n },\n prompts: {\n${globalPromptsCode}\n },\n tools: {\n${globalToolsCode}\n },\n models: {\n${globalModelsCode}\n },\n hooks: {\n${globalHooksCode}\n },\n },\n packages: {\n${packagesCode}\n },\n};\n\n// Helper to get all visible agent names (global + entry points)\nexport function getVisibleAgentNames() {\n const globalAgents = Object.keys(registry.global.agents);\n const entryPoints = Object.values(registry.packages)\n .flatMap(pkg => pkg.entryAgents);\n return [...new Set([...globalAgents, ...entryPoints])];\n}\n\n// Helper to get all visible tool names (global only - packed tools are internal)\nexport function getVisibleToolNames() {\n return Object.keys(registry.global.tools);\n}\n`;\n }\n\n // Consolidated virtual module: virtual:@standardagents/builder\n // Exports DurableThread and DurableAgentBuilder classes with methods already implemented\n if (id === RESOLVED_VIRTUAL_BUILDER_ID) {\n const tools = await scanToolsDirectory(toolsDir);\n const hooks = await scanHooksDirectory(hooksDir);\n const models = await scanModelsDirectory(modelsDir);\n const prompts = await scanPromptsDirectory(promptsDir);\n const agents = await scanAgentsDirectory(agentsDir);\n const effects = await scanEffectsDirectory(effectsDir);\n\n // Helper to convert relative paths to absolute paths\n // Virtual modules need absolute paths since relative paths are resolved against the virtual module location\n const toAbsolutePath = (relativePath: string) => {\n if (relativePath.startsWith('./')) {\n return path.resolve(process.cwd(), relativePath).replace(/\\\\/g, '/');\n }\n return relativePath;\n };\n\n // Generate tools code\n const toolsCode = tools\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => [\"${escapedError}\", null, async () => ({ status: \"error\", error: \"Tool validation failed\" })],`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import tool ${name}:', error);\n return [\"Failed to load tool: \" + error.message, null, async () => ({ status: \"error\", error: \"Import failed\" })];\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate hooks code\n const hooksCode = hooks\n .map(({ id, importPath }) => {\n const absPath = toAbsolutePath(importPath);\n return ` \"${id}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('[Hooks] Failed to import hook ${id}:', error);\n return null;\n }\n },`;\n })\n .join(\"\\n\");\n\n // Generate models code\n const modelsCode = models\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import model ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate prompts code\n const promptsCode = prompts\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import prompt ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate agents code\n const agentsCode = agents\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import agent ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n // Generate effects code\n const effectsCode = effects\n .map(({ name, importPath, error }) => {\n const absPath = toAbsolutePath(importPath);\n if (error) {\n const escapedError = error.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n return ` \"${name}\": async () => { throw new Error(\"${escapedError}\"); },`;\n } else {\n return ` \"${name}\": async () => {\n try {\n return (await import(\"${absPath}\")).default;\n } catch (error) {\n console.error('Failed to import effect ${name}:', error);\n throw error;\n }\n },`;\n }\n })\n .join(\"\\n\");\n\n return `// Consolidated virtual module: virtual:@standardagents/builder\n// Provides DurableThread, DurableAgentBuilder, and router\nimport { DurableThread as _BaseDurableThread } from '@standardagents/builder/runtime';\nimport { DurableAgentBuilder as _BaseDurableAgentBuilder } from '@standardagents/builder/runtime';\n\n// Import sip WASM module and initializer\n// Static import allows workerd to pre-compile the WASM at bundle time\n// WASM is bundled in builder's dist to avoid transitive dependency resolution issues\nimport _sipWasm from '@standardagents/builder/dist/sip.wasm';\nimport { initWithWasmModule as _initSipWasm } from '@standardagents/sip';\n\n// Re-export router from virtual:@standardagents-routes\nexport { router } from 'virtual:@standardagents-routes';\n\n// Import namespaced registry for packed agent support\nimport { registry as _registry } from 'virtual:@standardagents-registry';\n\n// Registry objects\nconst _tools = {\n${toolsCode}\n};\n\nconst _hooks = {\n${hooksCode}\n};\n\nconst _models = {\n${modelsCode}\n};\n\nconst _prompts = {\n${promptsCode}\n};\n\nconst _agents = {\n${agentsCode}\n};\n\nconst _effects = {\n${effectsCode}\n};\n\n/**\n * DurableThread with all virtual module methods already implemented.\n * Simply extend this class in your agents/Thread.ts file.\n */\nexport class DurableThread extends _BaseDurableThread {\n constructor(ctx, env) {\n super(ctx, env);\n // Initialize sip WASM in DO constructor\n // blockConcurrencyWhile ensures WASM is ready before handling any requests\n // Pass the statically imported WASM module for workerd to pre-compile\n ctx.blockConcurrencyWhile(async () => {\n await _initSipWasm(_sipWasm);\n });\n }\n\n tools() {\n return _tools;\n }\n\n hooks() {\n return _hooks;\n }\n\n models() {\n return _models;\n }\n\n prompts() {\n return _prompts;\n }\n\n agents() {\n return _agents;\n }\n\n effects() {\n return _effects;\n }\n\n registry() {\n return _registry;\n }\n}\n\n/**\n * DurableAgentBuilder with all virtual module methods already implemented.\n * Simply extend this class in your agents/AgentBuilder.ts file.\n */\nexport class DurableAgentBuilder extends _BaseDurableAgentBuilder {\n tools() {\n return _tools;\n }\n\n hooks() {\n return _hooks;\n }\n\n models() {\n return _models;\n }\n\n prompts() {\n return _prompts;\n }\n\n agents() {\n return _agents;\n }\n\n effects() {\n return _effects;\n }\n\n registry() {\n return _registry;\n }\n}\n`;\n }\n },\n\n buildStart() {\n // Generate types on startup\n regenerateTypes();\n\n // Watch all directories\n this.addWatchFile(toolsDir);\n this.addWatchFile(threadApiDir);\n this.addWatchFile(hooksDir);\n this.addWatchFile(modelsDir);\n this.addWatchFile(promptsDir);\n this.addWatchFile(agentsDir);\n this.addWatchFile(effectsDir);\n },\n\n configureServer(server) {\n // Watch for new files being added\n server.watcher.on(\"add\", async (file) => {\n handleFileChange(file, server);\n });\n\n // Watch for files being deleted\n server.watcher.on(\"unlink\", (file) => {\n handleFileChange(file, server);\n });\n\n // Add middleware to serve AgentBuilder UI\n // This emulates how Cloudflare Workers Assets binding works in production\n server.middlewares.use(async (req, res, next) => {\n const url = req.url;\n\n // Check if request is under mount point\n if (!url || !url.startsWith(mountPoint)) {\n next();\n return;\n }\n\n // Strip mount point prefix, ensuring we keep the leading slash\n let pathWithoutMount = url.slice(mountPoint.length) || '/';\n if (!pathWithoutMount.startsWith('/')) {\n pathWithoutMount = '/' + pathWithoutMount;\n }\n\n // Handle dev-only API routes that require filesystem access\n // These endpoints write to the filesystem and must be handled in Node.js\n const method = req.method?.toUpperCase();\n\n // POST /api/models - Create a new model\n if (pathWithoutMount === '/api/models' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformModelData(rawBody);\n const validationError = validateModelData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if model already exists\n if (modelExists(modelsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Model '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await saveModel(modelsDir, body, false);\n\n if (result.success) {\n // Reload the models virtual module to reflect the new model\n await reloadModelsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n model: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create model' }));\n return;\n }\n }\n\n // PUT /api/models/:name - Update an existing model\n // Use (.+) to capture model names with slashes (e.g., x-ai/grok-4-fast)\n const modelPutMatch = pathWithoutMount.match(/^\\/api\\/models\\/(.+)$/);\n if (modelPutMatch && method === 'PUT') {\n try {\n const urlModelName = decodeURIComponent(modelPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformModelData(rawBody);\n\n // Check if name in body differs from URL (name change requested)\n const newName = body.name;\n const isNameChange = newName && newName !== urlModelName;\n\n const validationError = validateModelData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n let updatedPrompts: string[] = [];\n\n if (isNameChange) {\n // Rename the model file first\n const renameResult = await renameModel(modelsDir, urlModelName, newName);\n if (!renameResult.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: renameResult.error }));\n return;\n }\n\n // Cascade update: update model references in all prompts\n updatedPrompts = await updateModelReferencesInPrompts(promptsDir, urlModelName, newName);\n }\n\n // Save the updated model data\n const result = await saveModel(modelsDir, body, true);\n\n if (result.success) {\n // Reload the models virtual module to reflect the changes\n await reloadModelsModule(server);\n\n // If prompts were updated due to cascade, reload prompts module too\n if (updatedPrompts.length > 0) {\n await reloadPromptsModule(server);\n }\n\n // Reload router to pick up new module bindings\n await reloadRouterModule(server);\n\n // Small delay to ensure filesystem operations are fully flushed\n await new Promise(resolve => setTimeout(resolve, 100));\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n model: body,\n filePath: result.filePath,\n ...(isNameChange && { renamed: { from: urlModelName, to: newName }, updatedPrompts }),\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update model' }));\n return;\n }\n }\n\n // DELETE /api/models/:name - Delete a model\n // Use (.+) to capture model names with slashes (e.g., x-ai/grok-4-fast)\n const modelDeleteMatch = pathWithoutMount.match(/^\\/api\\/models\\/(.+)$/);\n if (modelDeleteMatch && method === 'DELETE') {\n try {\n const modelName = decodeURIComponent(modelDeleteMatch[1]);\n const result = await deleteModel(modelsDir, modelName);\n\n if (result.success) {\n // Reload the models virtual module to reflect the deletion\n await reloadModelsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: modelName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete model' }));\n return;\n }\n }\n\n // POST /api/prompts - Create a new prompt\n if (pathWithoutMount === '/api/prompts' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformPromptData(rawBody);\n const validationError = validatePromptData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if prompt already exists\n if (promptExists(promptsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Prompt '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await savePrompt(promptsDir, body, false);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the new prompt\n await reloadPromptsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n prompt: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create prompt' }));\n return;\n }\n }\n\n // PUT /api/prompts/:name - Update an existing prompt\n const promptPutMatch = pathWithoutMount.match(/^\\/api\\/prompts\\/([^/]+)$/);\n if (promptPutMatch && method === 'PUT') {\n try {\n const urlPromptName = decodeURIComponent(promptPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformPromptData(rawBody);\n\n // Check if name in body differs from URL (name change requested)\n const newName = body.name;\n const isNameChange = newName && newName !== urlPromptName;\n\n const validationError = validatePromptData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n let updatedPrompts: string[] = [];\n let updatedAgents: string[] = [];\n\n if (isNameChange) {\n // Rename the prompt file first\n const renameResult = await renamePrompt(promptsDir, urlPromptName, newName);\n if (!renameResult.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: renameResult.error }));\n return;\n }\n\n // Cascade update: update prompt references in other prompts (tools array)\n updatedPrompts = await updatePromptReferencesInPrompts(promptsDir, urlPromptName, newName);\n\n // Cascade update: update prompt references in agents (defaultPrompt field)\n updatedAgents = await updatePromptReferencesInAgents(agentsDir, urlPromptName, newName);\n }\n\n // Save the updated prompt data (will overwrite the renamed file)\n const result = await savePrompt(promptsDir, body, true);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the changes\n await reloadPromptsModule(server);\n\n // If agents were updated due to cascade, reload agents module too\n if (updatedAgents.length > 0) {\n await reloadAgentsModule(server);\n }\n\n // Reload router to pick up new module bindings\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n prompt: body,\n filePath: result.filePath,\n ...(isNameChange && { renamed: { from: urlPromptName, to: newName }, updatedPrompts, updatedAgents }),\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update prompt' }));\n return;\n }\n }\n\n // DELETE /api/prompts/:name - Delete a prompt\n const promptDeleteMatch = pathWithoutMount.match(/^\\/api\\/prompts\\/([^/]+)$/);\n if (promptDeleteMatch && method === 'DELETE') {\n try {\n const promptName = decodeURIComponent(promptDeleteMatch[1]);\n const result = await deletePrompt(promptsDir, promptName);\n\n if (result.success) {\n // Reload the prompts virtual module to reflect the deletion\n await reloadPromptsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: promptName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete prompt' }));\n return;\n }\n }\n\n // POST /api/agents - Create a new agent\n if (pathWithoutMount === '/api/agents' && method === 'POST') {\n try {\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformAgentData(rawBody);\n const validationError = validateAgentData(body);\n\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // Check if agent already exists\n if (agentExists(agentsDir, body.name)) {\n res.statusCode = 409;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Agent '${body.name}' already exists. Use PUT to update.` }));\n return;\n }\n\n const result = await saveAgent(agentsDir, body, false);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the new agent\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 201;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n agent: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to create agent' }));\n return;\n }\n }\n\n // PUT /api/agents/:name - Update an existing agent\n const agentPutMatch = pathWithoutMount.match(/^\\/api\\/agents\\/([^/]+)$/);\n if (agentPutMatch && method === 'PUT') {\n try {\n const agentName = decodeURIComponent(agentPutMatch[1]);\n const rawBody = await parseRequestBody(req);\n // Transform snake_case from UI to camelCase for internal use\n const body = transformAgentData(rawBody);\n\n // Ensure the name in the body matches the URL (or use URL name)\n body.name = agentName;\n\n const validationError = validateAgentData(body);\n if (validationError) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: validationError }));\n return;\n }\n\n // For updates, the agent should exist (but we allow overwrite)\n const result = await saveAgent(agentsDir, body, true);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the changes\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n agent: body,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to update agent' }));\n return;\n }\n }\n\n // DELETE /api/agents/:name - Delete an agent\n const agentDeleteMatch = pathWithoutMount.match(/^\\/api\\/agents\\/([^/]+)$/);\n if (agentDeleteMatch && method === 'DELETE') {\n try {\n const agentName = decodeURIComponent(agentDeleteMatch[1]);\n const result = await deleteAgent(agentsDir, agentName);\n\n if (result.success) {\n // Reload the agents virtual module to reflect the deletion\n await reloadAgentsModule(server);\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n deleted: agentName,\n filePath: result.filePath,\n }));\n } else {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error }));\n }\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete agent' }));\n return;\n }\n }\n\n // GET /api/pack/:agentName/analyze - Analyze agent for packing\n const packAnalyzeMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/analyze$/);\n if (packAnalyzeMatch && method === 'GET') {\n try {\n const agentName = decodeURIComponent(packAnalyzeMatch[1]);\n const packingService = new PackingService();\n const rootDir = process.cwd();\n\n const analysis = await packingService.analyzeAgent(agentName, rootDir);\n\n if (analysis.errors.length > 0) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: analysis.errors.join('\\n'),\n warnings: analysis.warnings,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(analysis));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to analyze agent' }));\n return;\n }\n }\n\n // POST /api/pack/:agentName - Pack an agent\n const packMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)$/);\n if (packMatch && method === 'POST') {\n try {\n const agentName = decodeURIComponent(packMatch[1]);\n const body = await parseRequestBody(req) as {\n itemSelections?: ItemSelection[];\n version?: string;\n packageId?: string;\n packageName?: string;\n license?: string;\n licenseOwner?: string;\n };\n\n const packingService = new PackingService();\n const rootDir = process.cwd();\n const outputDir = path.join(rootDir, 'agents', 'packed');\n\n const result = await packingService.pack({\n agentName,\n rootDir,\n outputDir,\n version: body.version,\n packageId: body.packageId,\n packageName: body.packageName,\n license: body.license,\n licenseOwner: body.licenseOwner,\n itemSelections: body.itemSelections,\n });\n\n if (!result.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: result.error,\n warnings: result.warnings,\n }));\n return;\n }\n\n // Reload modules after packing to pick up changes\n // Order matters: reload dependencies first, then routes module last\n // (routes imports from all the others)\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(result));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to pack agent' }));\n return;\n }\n }\n\n // DELETE /api/pack/:packageId - Delete a local packed agent\n const packDeleteMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)$/);\n if (packDeleteMatch && method === 'DELETE') {\n try {\n const packageId = decodeURIComponent(packDeleteMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n // Find the package\n const packages = await unpackingService.listPackages(rootDir);\n const pkg = packages.find(p => p.packageId === packageId);\n\n if (!pkg) {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Package not found: ${packageId}` }));\n return;\n }\n\n if (pkg.source !== 'local') {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'Cannot delete npm packages. Use npm uninstall instead.' }));\n return;\n }\n\n // Delete the package directory\n const fs = await import('node:fs');\n fs.rmSync(pkg.path, { recursive: true, force: true });\n\n // Reload modules after deletion to pick up changes\n // Order matters: reload dependencies first, then routes module last\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ success: true, packageId }));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to delete package' }));\n return;\n }\n }\n\n // GET /api/pack/:packageId/download - Download packed agent as tarball\n const packDownloadMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/download$/);\n if (packDownloadMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(packDownloadMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n // Find the package\n const packages = await unpackingService.listPackages(rootDir);\n const pkg = packages.find(p => p.packageId === packageId);\n\n if (!pkg) {\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: `Package not found: ${packageId}` }));\n return;\n }\n\n // Create tarball using native tar command\n const { spawn } = await import('child_process');\n const parentDir = path.dirname(pkg.path);\n const dirName = path.basename(pkg.path);\n\n res.setHeader('Content-Type', 'application/gzip');\n res.setHeader('Content-Disposition', `attachment; filename=\"${packageId}.tar.gz\"`);\n\n const tar = spawn('tar', ['-czf', '-', '-C', parentDir, dirName]);\n tar.stdout.pipe(res);\n tar.stderr.on('data', (data) => console.error('tar error:', data.toString()));\n tar.on('error', (err) => {\n console.error('Failed to spawn tar:', err);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'Failed to create tarball' }));\n }\n });\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to download package' }));\n return;\n }\n }\n\n // GET /api/pack/:packageId/packed-info - Get packed package info for publish preview\n const packInfoMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/packed-info$/);\n if (packInfoMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(packInfoMatch[1]);\n const packingService = new PackingService();\n const rootDir = process.cwd();\n\n const info = packingService.getPackedInfo(packageId, rootDir);\n\n if (!info) {\n const availablePackages = packingService.listPackedPackages(rootDir);\n res.statusCode = 404;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: `Packed package not found: ${packageId}`,\n availablePackages,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(info));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to read package info' }));\n return;\n }\n }\n\n // POST /api/pack/:packageId/publish - Publish packed agent to npm\n const packPublishMatch = pathWithoutMount.match(/^\\/api\\/pack\\/([^/]+)\\/publish$/);\n if (packPublishMatch && method === 'POST') {\n try {\n const packageId = decodeURIComponent(packPublishMatch[1]);\n const body = await parseRequestBody(req) as {\n token?: string;\n registry?: string;\n dryRun?: boolean;\n };\n\n const rootDir = process.cwd();\n const packedDir = path.join(rootDir, 'agents', 'packed');\n\n // Find the package directory\n let packageDir = path.join(packedDir, packageId);\n\n if (!fs.existsSync(packageDir)) {\n if (!fs.existsSync(packedDir)) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: 'No packed packages found. Pack the agent first.' }));\n return;\n }\n\n const dirs = fs.readdirSync(packedDir, { withFileTypes: true })\n .filter(d => d.isDirectory())\n .map(d => d.name);\n\n const matchingDir = dirs.find(d =>\n d === packageId ||\n d === `standardagent-${packageId}` ||\n d === `standardagent-${packageId.replace(/_/g, '-')}`\n );\n\n if (!matchingDir) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: `Package not found: ${packageId}. Available packages: ${dirs.join(', ') || 'none'}`\n }));\n return;\n }\n\n packageDir = path.join(packedDir, matchingDir);\n }\n\n // Get token from request body, environment, or .dev.vars file\n let token = body.token || process.env.NPM_TOKEN;\n let tokenSource = body.token ? 'provided' : 'environment';\n\n // If no token yet, try reading from .dev.vars file\n if (!token) {\n const devVarsPath = path.join(rootDir, '.dev.vars');\n if (fs.existsSync(devVarsPath)) {\n const devVars = fs.readFileSync(devVarsPath, 'utf-8');\n const match = devVars.match(/^NPM_TOKEN=(.+)$/m);\n if (match) {\n token = match[1].trim();\n tokenSource = 'environment';\n }\n }\n }\n\n if (!token) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: 'npm token is required. Either provide a token in the request or set NPM_TOKEN in your .dev.vars or .env file.'\n }));\n return;\n }\n\n const publishService = new NpmPublishService();\n const result = await publishService.publish({\n packageDir,\n token,\n registry: body.registry,\n dryRun: body.dryRun,\n });\n\n if (!result.success) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: result.error, output: result.output }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n success: true,\n packageName: result.packageName,\n version: result.version,\n output: result.output,\n url: publishService.getPackageUrl(result.packageName!, body.registry),\n tokenSource,\n }));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to publish package' }));\n return;\n }\n }\n\n // GET /api/unpack/:packageId/analyze - Analyze package for unpacking\n const unpackAnalyzeMatch = pathWithoutMount.match(/^\\/api\\/unpack\\/([^/]+)\\/analyze$/);\n if (unpackAnalyzeMatch && method === 'GET') {\n try {\n const packageId = decodeURIComponent(unpackAnalyzeMatch[1]);\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n const analysis = await unpackingService.analyzeUnpack(packageId, rootDir);\n\n if (analysis.errors.length > 0) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: analysis.errors.join('\\n'),\n warnings: analysis.warnings,\n }));\n return;\n }\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(analysis));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to analyze package' }));\n return;\n }\n }\n\n // POST /api/unpack/:packageId - Unpack a package\n const unpackMatch = pathWithoutMount.match(/^\\/api\\/unpack\\/([^/]+)$/);\n if (unpackMatch && method === 'POST') {\n try {\n const packageId = decodeURIComponent(unpackMatch[1]);\n const body = await parseRequestBody(req) as {\n itemSelections?: UnpackItemSelection[];\n deletePackage?: boolean;\n };\n\n const unpackingService = new UnpackingService();\n const rootDir = process.cwd();\n\n const result = await unpackingService.unpack({\n packageId,\n rootDir,\n deletePackage: body.deletePackage,\n itemSelections: body.itemSelections,\n });\n\n if (!result.success) {\n res.statusCode = 400;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({\n error: result.error,\n warnings: result.warnings,\n }));\n return;\n }\n\n // Reload modules after unpacking to pick up new files\n // Order matters: reload dependencies first, then routes module last\n reloadToolsModule(server);\n reloadHooksModule(server);\n await reloadAgentsModule(server);\n await reloadPromptsModule(server);\n await reloadModelsModule(server);\n await reloadRegistryModule(server);\n // Reload routes module LAST since it imports from all the above\n await reloadRouterModule(server);\n\n res.statusCode = 200;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify(result));\n return;\n } catch (error: any) {\n res.statusCode = 500;\n res.setHeader('Content-Type', 'application/json');\n res.end(JSON.stringify({ error: error.message || 'Failed to unpack package' }));\n return;\n }\n }\n\n // Let other API routes pass through to the worker\n if (pathWithoutMount.startsWith('/api/')) {\n next();\n return;\n }\n\n // Check for UI dev server proxy mode (for HMR during development)\n // Only proxy non-API routes (UI assets, SPA routes)\n const uiDevServer = process.env.UI_DEV_SERVER;\n if (uiDevServer && !pathWithoutMount.startsWith('/api/')) {\n // In HMR mode, proxy UI requests to the Vite dev server\n // pathWithoutMount already has leading slash (e.g., '/index.html')\n // UI dev server runs with VITE_BASE matching our mountPoint\n const targetUrl = `${uiDevServer}${pathWithoutMount}`;\n try {\n const proxyRes = await fetch(targetUrl);\n res.statusCode = proxyRes.status;\n\n // Forward response headers (except those that shouldn't be forwarded)\n proxyRes.headers.forEach((value, key) => {\n if (!['content-encoding', 'transfer-encoding'].includes(key.toLowerCase())) {\n res.setHeader(key, value);\n }\n });\n\n const body = await proxyRes.arrayBuffer();\n res.end(Buffer.from(body));\n return;\n } catch (error) {\n console.error('[agentbuilder] Failed to proxy to UI dev server:', error);\n // Fall through to static file serving as fallback\n }\n }\n\n // Check if this is a static asset request\n const isStaticAsset = pathWithoutMount.startsWith('/assets/') ||\n pathWithoutMount.startsWith('/vendor.js') ||\n pathWithoutMount.startsWith('/vue.js') ||\n pathWithoutMount.startsWith('/monaco.js') ||\n pathWithoutMount.startsWith('/index.js') ||\n pathWithoutMount.startsWith('/index.css') ||\n pathWithoutMount.match(/\\.(js|css|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|ico)$/);\n\n // For static assets, serve the actual file\n // For all other routes (including SPA routes like /login, /threads, etc.), serve index.html\n const shouldServeUI = true;\n\n if (shouldServeUI) {\n // Serve from the built client directory\n // Client is always at dist/client relative to package root\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const clientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n let filePath: string;\n if (isStaticAsset) {\n // For static assets, serve the actual file\n const cleanUrl = pathWithoutMount.split('?')[0];\n filePath = path.join(clientDir, cleanUrl);\n } else {\n // For all other routes (SPA routes), serve index.html\n filePath = path.join(clientDir, 'index.html');\n }\n\n try {\n if (fs.existsSync(filePath)) {\n let content = fs.readFileSync(filePath);\n\n // Inject mount point config into HTML\n const ext = path.extname(filePath).toLowerCase();\n if (ext === '.html') {\n const configScript = `<script>window.__AGENTBUILDER_CONFIG__ = { mountPoint: \"${mountPoint}\" };</script>`;\n let htmlContent = content.toString();\n\n // Transform asset paths from default /agents/ to configured mount point\n // Handle special case where mountPoint is '/' to avoid double slashes\n const assetPrefix = mountPoint === '/' ? '/' : `${mountPoint}/`;\n htmlContent = htmlContent.replace(/\\/agents\\//g, assetPrefix);\n\n // Inject config\n htmlContent = htmlContent.replace('</head>', `${configScript}</head>`);\n\n content = Buffer.from(htmlContent);\n }\n\n // Set appropriate MIME type\n const mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.ttf': 'font/ttf',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n };\n\n const contentType = mimeTypes[ext] || 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.end(content);\n return;\n }\n } catch (error) {\n console.error('Error serving AgentBuilder UI:', error);\n }\n }\n\n next();\n });\n },\n\n handleHotUpdate({ file, server }) {\n handleFileChange(file, server);\n },\n\n writeBundle(options, bundle) {\n // In production build, copy client files to user's dist directory\n // Files go to dist/client/{mountPath} to match ASSETS binding expectations\n const outDir = options.dir || 'dist';\n // Put client files in a 'client' subdirectory, preserving mountPath structure\n // This ensures ASSETS can find files at the expected paths (e.g., /agentbuilder/index.html)\n const mountPath = mountPoint.slice(1); // \"agentbuilder\" or \"\"\n const mountDir = mountPath\n ? path.join(outDir, '../client', mountPath) // dist/client/agentbuilder\n : path.join(outDir, '../client'); // dist/client\n\n // Locate the client directory\n const currentDir = path.dirname(fileURLToPath(import.meta.url));\n const isInDist = currentDir.endsWith('dist');\n const clientDir = path.resolve(\n currentDir,\n isInDist ? './client' : '../dist/client'\n );\n\n if (!fs.existsSync(clientDir)) {\n console.warn(`[agentbuilder] Client directory not found at ${clientDir}`);\n return;\n }\n\n // Create mount directory\n fs.mkdirSync(mountDir, { recursive: true });\n\n // Copy all client files recursively\n function copyRecursive(src: string, dest: string) {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n fs.mkdirSync(destPath, { recursive: true });\n copyRecursive(srcPath, destPath);\n } else {\n let content = fs.readFileSync(srcPath);\n\n // Inject mount point config into index.html\n if (entry.name === 'index.html') {\n const configScript = `<script>window.__AGENTBUILDER_CONFIG__ = { mountPoint: \"${mountPoint}\" };</script>`;\n let htmlContent = content.toString();\n\n // Transform asset paths from default /agents/ to configured mount point\n // Handle special case where mountPoint is '/' to avoid double slashes\n const assetPrefix = mountPoint === '/' ? '/' : `${mountPoint}/`;\n htmlContent = htmlContent.replace(/\\/agents\\//g, assetPrefix);\n\n // Inject config\n htmlContent = htmlContent.replace('</head>', `${configScript}</head>`);\n\n content = Buffer.from(htmlContent);\n }\n\n fs.writeFileSync(destPath, content);\n }\n }\n }\n\n copyRecursive(clientDir, mountDir);\n },\n };\n}\n"]}
|