@standardagents/cli 0.12.8 → 0.13.0-next.c55f029
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +432 -22
- package/dist/index.js.map +1 -1
- package/package.json +7 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/templates/root.ts","../src/templates/models.ts","../src/templates/prompts.ts","../src/templates/agents.ts","../src/templates/tools.ts","../src/templates/hooks.ts","../src/templates/api.ts","../src/commands/scaffold.ts","../src/commands/init.ts","../src/commands/init-chat.ts","../src/commands/pack.ts","../src/commands/unpack.ts","../src/index.ts"],"names":["path","fs","prompt","readline","runCommand","spawn","detectPackageManager","selectPackageManager","isStandardAgentsProject"],"mappings":";;;;;;;;;;;;;;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,QAAG,GAAG,OAAO,CAAA;AAAA,EACvC,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,OAAA,KAAoB;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,QAAG,GAAG,OAAO,CAAA;AAAA,EACrC,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,QAAG,GAAG,OAAO,CAAA;AAAA,EACxC,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,OAAA,KAAoB;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,QAAG,GAAG,OAAO,CAAA;AAAA,EACtC,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,OAAA,KAAoB;AACxB,IAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,EACrB;AACF,CAAA;;;AClBO,IAAM,cAAA,GAAiB,CAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACAvB,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,iBAAA,GAAoB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACA1B,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAxB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAA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","file":"index.js","sourcesContent":["import chalk from 'chalk';\n\nexport const logger = {\n success: (message: string) => {\n console.log(chalk.green('✓'), message);\n },\n error: (message: string) => {\n console.log(chalk.red('✗'), message);\n },\n warning: (message: string) => {\n console.log(chalk.yellow('⚠'), message);\n },\n info: (message: string) => {\n console.log(chalk.blue('ℹ'), message);\n },\n log: (message: string) => {\n console.log(message);\n },\n};\n","export const ROOT_CLAUDE_MD = `# Standard Agents\n\nThis project uses Standard Agents - a framework for building AI agents on Cloudflare Workers.\n\n## Architecture Overview\n\nStandard Agents uses a **composition model** where four core components work together:\n\n\\`\\`\\`\nModel → Prompt → Agent → Thread\n │ │ │ │\n │ │ │ └─ Conversation instance (Durable Object)\n │ │ └─ Orchestrates conversation flow\n │ └─ System instructions + tools\n └─ LLM provider configuration\n\\`\\`\\`\n\n**Models** define which LLM to use (provider, model ID, pricing, fallbacks).\n**Prompts** define what the LLM should do (system instructions, available tools).\n**Agents** orchestrate conversations (which prompt, stop conditions, turn limits).\n**Threads** are individual conversation instances with persistent storage.\n\n## How Components Compose\n\n### Basic Flow\n1. User creates a thread with an agent\n2. Agent uses its configured prompt\n3. Prompt specifies the model and tools\n4. LLM responds, potentially calling tools\n5. Tools execute and return results\n6. Loop continues until stop condition\n\n### Sub-Prompts (Prompts as Tools)\nPrompts can call other prompts as tools. This enables:\n- **Specialized reasoning**: A main prompt delegates to expert sub-prompts\n- **Structured outputs**: Sub-prompt validates and formats data\n- **Context isolation**: Sub-prompt gets fresh context without full history\n\n\\`\\`\\`typescript\n// Main prompt can call 'data_extractor' as a tool\ndefinePrompt({\n name: 'main_assistant',\n tools: ['data_extractor'], // Another prompt exposed as tool\n // ...\n});\n\\`\\`\\`\n\n### Agent Handoffs (Agents as Tools)\nAgents can delegate to other agents entirely:\n- **Specialization**: Route to domain-specific agents\n- **Escalation**: Hand off to more capable agents\n- **Workflows**: Chain agents for multi-step processes\n\n\\`\\`\\`typescript\ndefineAgent({\n name: 'triage_agent',\n exposeAsTool: true,\n toolDescription: 'Hand off to triage for initial assessment',\n // ...\n});\n\\`\\`\\`\n\n## File Structure\n\n\\`\\`\\`\nagents/\n├── CLAUDE.md # This file\n├── Thread.ts # Durable Object for conversation threads\n├── AgentBuilder.ts # Durable Object for metadata\n├── agents/ # Agent definitions (defineAgent)\n│ └── CLAUDE.md\n├── prompts/ # Prompt definitions (definePrompt)\n│ └── CLAUDE.md\n├── models/ # Model configurations (defineModel)\n│ └── CLAUDE.md\n├── tools/ # Custom tools (defineTool)\n│ └── CLAUDE.md\n├── hooks/ # Lifecycle hooks (defineHook)\n│ └── CLAUDE.md\n└── api/ # Thread API endpoints (defineThreadEndpoint)\n └── CLAUDE.md\n\\`\\`\\`\n\nFiles are **auto-discovered** at runtime. No manual registration needed.\n\n## ThreadState\n\n\\`ThreadState\\` is the state object available in tools and hooks:\n\n\\`\\`\\`typescript\ninterface ThreadState {\n // Identity (readonly)\n threadId: string; // Thread identifier\n agentId: string; // Agent identifier\n userId: string | null; // User identifier (if set)\n createdAt: number; // Creation timestamp\n\n // Methods\n getMessages(options?): Promise<MessagesResult>; // Get conversation history\n injectMessage(input): Promise<Message>; // Add message to thread\n loadModel(name): Promise<ModelConfig>; // Load model definition\n loadPrompt(name): Promise<PromptConfig>; // Load prompt definition\n loadAgent(name): Promise<AgentConfig>; // Load agent definition\n}\n\\`\\`\\`\n\nAccess in tools:\n\\`\\`\\`typescript\nexport default defineTool('...', schema, async (state, args) => {\n const threadId = state.threadId;\n const { messages } = await state.getMessages();\n // ...\n});\n\\`\\`\\`\n\nAccess in hooks:\n\\`\\`\\`typescript\nexport default defineHook({\n hook: 'before_create_message',\n id: 'my_hook',\n execute: async (state, message) => {\n console.log(\\`Thread: \\${state.threadId}, Agent: \\${state.agentId}\\`);\n return message;\n }\n});\n\\`\\`\\`\n\n## Quick Reference\n\n| Function | Purpose | Directory |\n|----------|---------|-----------|\n| \\`defineModel()\\` | Configure LLM provider | \\`agents/models/\\` |\n| \\`definePrompt()\\` | System instructions + tools | \\`agents/prompts/\\` |\n| \\`defineAgent()\\` | Conversation orchestration | \\`agents/agents/\\` |\n| \\`defineTool()\\` | Custom tool functions | \\`agents/tools/\\` |\n| \\`defineHook()\\` | Lifecycle interception | \\`agents/hooks/\\` |\n| \\`defineThreadEndpoint()\\` | Custom API routes | \\`agents/api/\\` |\n\n## Runtime Utilities\n\nImport from \\`@standardagents/builder\\`:\n\n\\`\\`\\`typescript\nimport {\n queueTool, // Queue another tool for execution\n injectMessage, // Add message without triggering execution\n getMessages, // Retrieve message history\n emitThreadEvent, // Send custom WebSocket events\n} from '@standardagents/builder';\n\\`\\`\\`\n\n## Documentation\n\nFull documentation: https://docs.standardagentbuilder.com\n\n- [Architecture Overview](https://docs.standardagentbuilder.com/introduction/architecture)\n- [Models](https://docs.standardagentbuilder.com/core-concepts/models)\n- [Prompts](https://docs.standardagentbuilder.com/core-concepts/prompts)\n- [Agents](https://docs.standardagentbuilder.com/core-concepts/agents)\n- [Tools](https://docs.standardagentbuilder.com/core-concepts/tools)\n- [Hooks](https://docs.standardagentbuilder.com/core-concepts/hooks)\n- [ThreadState](https://docs.standardagentbuilder.com/core-concepts/threadstate)\n- [Thread API](https://docs.standardagentbuilder.com/core-concepts/api)\n`;\n","export const MODELS_CLAUDE_MD = `# Model Definitions\n\nModels define which LLM provider and model to use for prompts.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this model configuration |\n| \\`provider\\` | \\`'openai' \\\\| 'anthropic' \\\\| 'openrouter' \\\\| 'google'\\` | Yes | LLM provider |\n| \\`model\\` | \\`string\\` | Yes | Model ID sent to provider API |\n| \\`fallbacks\\` | \\`string[]\\` | No | Fallback model names to try if primary fails |\n| \\`inputPrice\\` | \\`number\\` | No | Cost per 1M input tokens (USD) |\n| \\`outputPrice\\` | \\`number\\` | No | Cost per 1M output tokens (USD) |\n| \\`cachedPrice\\` | \\`number\\` | No | Cost per 1M cached input tokens |\n| \\`includedProviders\\` | \\`string[]\\` | No | Provider prefixes for OpenRouter routing |\n\n## Example\n\n\\`\\`\\`typescript\nimport { defineModel } from '@standardagents/builder';\n\nexport default defineModel({\n name: 'default',\n provider: 'openrouter',\n model: 'google/gemini-3-flash-preview',\n fallbacks: ['fast', 'cheap-heavy'],\n});\n\\`\\`\\`\n\n## Recommended Models (OpenRouter)\n\n| Use Case | Model ID | Description |\n|----------|----------|-------------|\n| Fast/Cheap | \\`z-ai/glm-4.5-air\\` | Quick responses, low cost |\n| Mid-tier | \\`google/gemini-3-flash-preview\\` | Good balance of speed and quality |\n| Cheap Heavy | \\`z-ai/glm-4.7\\` | More capable, still affordable |\n| Heavy | \\`google/gemini-3-pro-preview\\` | Most capable, for complex tasks |\n\n**⚠️ Google Models**: When using Google models (\\`google/gemini-*\\`), you must enable \\`reasoning\\` in your prompt configuration or tool calls will fail. See the prompts CLAUDE.md for details.\n\n## Provider API Keys\n\nSet these environment variables in \\`.dev.vars\\` (local) or Cloudflare secrets (production):\n\n| Provider | Environment Variable |\n|----------|---------------------|\n| OpenAI | \\`OPENAI_API_KEY\\` |\n| Anthropic | \\`ANTHROPIC_API_KEY\\` |\n| OpenRouter | \\`OPENROUTER_API_KEY\\` |\n| Google | \\`GOOGLE_API_KEY\\` |\n\n## Fallback Strategy\n\nWhen a model fails, fallbacks are tried in order:\n1. Primary model (2 attempts)\n2. First fallback (2 attempts)\n3. Second fallback (2 attempts)\n4. ...and so on\n\nRetries occur on: network errors, rate limits (429), server errors (5xx), auth errors (401).\n\n## OpenRouter Configuration\n\nFor OpenRouter, use the full model path:\n\n\\`\\`\\`typescript\nexport default defineModel({\n name: 'heavy',\n provider: 'openrouter',\n model: 'google/gemini-3-pro-preview',\n includedProviders: ['google'], // Prefer Google's servers\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Name by use case**, not model ID (e.g., \\`fast\\`, \\`default\\`, \\`heavy\\`)\n- **Configure fallbacks** for production reliability\n- **Set pricing** for cost tracking in logs\n- **Use environment variables** for API keys, never hardcode\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/model\n`;\n","export const PROMPTS_CLAUDE_MD = `# Prompt Definitions\n\nPrompts define system instructions, model selection, and available tools for LLM interactions.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this prompt |\n| \\`toolDescription\\` | \\`string\\` | Yes | Description shown when used as a tool |\n| \\`prompt\\` | \\`string \\\\| StructuredPrompt\\` | Yes | System instructions |\n| \\`model\\` | \\`string\\` | Yes | Model name to use (references \\`agents/models/\\`) |\n| \\`tools\\` | \\`(string \\\\| ToolConfig)[]\\` | No | Available tools (include ai_human agent names for handoffs) |\n| \\`includeChat\\` | \\`boolean\\` | No | Include full conversation history |\n| \\`includePastTools\\` | \\`boolean\\` | No | Include previous tool results |\n| \\`parallelToolCalls\\` | \\`boolean\\` | No | Allow multiple concurrent tool calls |\n| \\`toolChoice\\` | \\`'auto' \\\\| 'none' \\\\| 'required'\\` | No | Tool calling strategy |\n| \\`requiredSchema\\` | \\`z.ZodObject\\` | No | Input validation when called as tool |\n| \\`hooks\\` | \\`string[]\\` | No | Hook IDs to run for this prompt (overrides agent hooks) |\n| \\`reasoning\\` | \\`ReasoningConfig\\` | No | Extended thinking configuration |\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { definePrompt } from '@standardagents/builder';\n\nexport default definePrompt({\n name: 'customer_support',\n toolDescription: 'Handle customer support inquiries',\n model: 'default',\n prompt: \\`You are a helpful customer support agent.\nAlways be polite and professional.\nIf you cannot help, escalate to a human.\\`,\n tools: ['search_knowledge_base', 'create_ticket'],\n includeChat: true,\n});\n\\`\\`\\`\n\n## Structured Prompts\n\nInclude other prompts for reusable instruction blocks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'main_assistant',\n toolDescription: 'Primary assistant',\n model: 'default',\n prompt: [\n { type: 'text', content: 'You are a helpful assistant.\\\\n\\\\n' },\n { type: 'include', prompt: 'common_rules' }, // Includes another prompt\n { type: 'text', content: '\\\\n\\\\nBe concise.' },\n ],\n});\n\\`\\`\\`\n\n## Tool Configuration\n\nTools can be simple names or detailed configs:\n\n\\`\\`\\`typescript\ntools: [\n 'simple_tool', // Just the tool name\n {\n name: 'complex_tool',\n includeTextResponse: true, // Include sub-prompt text in result\n includeToolCalls: false, // Exclude sub-prompt tool calls\n includeErrors: true, // Include error details\n initUserMessageProperty: 'query', // Use this arg as initial message\n },\n],\n\\`\\`\\`\n\n## Input Validation\n\nValidate inputs when prompt is called as a tool:\n\n\\`\\`\\`typescript\nimport { z } from 'zod';\n\nexport default definePrompt({\n name: 'data_extractor',\n toolDescription: 'Extract structured data from text',\n model: 'default',\n prompt: 'Extract the requested data from the input.',\n requiredSchema: z.object({\n text: z.string().describe('Text to extract from'),\n fields: z.array(z.string()).describe('Fields to extract'),\n }),\n});\n\\`\\`\\`\n\n## Extended Thinking (Reasoning)\n\nEnable for complex reasoning tasks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'code_reviewer',\n toolDescription: 'Review code for issues',\n model: 'heavy',\n prompt: 'Review the code thoroughly...',\n reasoning: {\n effort: 'high', // 'low' | 'medium' | 'high'\n maxTokens: 16000, // Max thinking tokens\n exclude: true, // Don't include thinking in response\n },\n});\n\\`\\`\\`\n\n**⚠️ Google Models Require Reasoning**: When using Google models (\\`google/gemini-*\\`) via OpenRouter, you **must** include \\`reasoning\\` configuration or tool calls will fail. At minimum:\n\n\\`\\`\\`typescript\nreasoning: {\n effort: 'low', // Can be 'low', 'medium', or 'high'\n},\n\\`\\`\\`\n\n## Hooks\n\nAttach lifecycle hooks to a prompt:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'customer_support',\n toolDescription: 'Handle customer support',\n model: 'default',\n prompt: 'You are a support agent...',\n hooks: ['limit_to_20', 'redact_pii'], // Hook IDs from agents/hooks/\n});\n\\`\\`\\`\n\nPrompt hooks take precedence over agent hooks. See \\`agents/hooks/CLAUDE.md\\` for details.\n\n## Best Practices\n\n- **Write clear instructions** - Structure with headers and bullet points\n- **Describe tools thoroughly** - LLMs decide based on descriptions\n- **Validate inputs with Zod** - Catch errors early\n- **Use \\`includeChat\\`** for conversational context\n- **Name by purpose**, not model (e.g., \\`support_agent\\` not \\`gpt4_prompt\\`)\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/prompt\n`;\n","export const AGENTS_CLAUDE_MD = `# Agent Definitions\n\nAgents orchestrate conversations by defining prompts, stop conditions, and turn limits.\n\n## Agent Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this agent |\n| \\`type\\` | \\`'ai_human' \\\\| 'dual_ai'\\` | No | Conversation type (default: \\`ai_human\\`) |\n| \\`sideA\\` | \\`SideConfig\\` | Yes | Configuration for side A (AI in ai_human) |\n| \\`sideB\\` | \\`SideConfig\\` | No | Configuration for side B (required for dual_ai) |\n| \\`maxSessionTurns\\` | \\`number\\` | No | Max total turns across both sides |\n| \\`exposeAsTool\\` | \\`boolean\\` | No | Allow other prompts to hand off to this agent |\n| \\`toolDescription\\` | \\`string\\` | No | Description when used as tool (required if exposeAsTool) |\n| \\`hooks\\` | \\`string[]\\` | No | Hook IDs to run for this agent (fallback if prompt has no hooks) |\n| \\`tags\\` | \\`string[]\\` | No | Tags for categorization and filtering |\n\n## Side Configuration\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`label\\` | \\`string\\` | No | Display name for this side |\n| \\`prompt\\` | \\`string\\` | Yes | Prompt name to use (references \\`agents/prompts/\\`) |\n| \\`stopOnResponse\\` | \\`boolean\\` | No | Stop turn when LLM returns text (default: true) |\n| \\`stopTool\\` | \\`string\\` | No | Tool that stops this side's turn |\n| \\`stopToolResponseProperty\\` | \\`string\\` | No | Property to extract from stop tool result |\n| \\`endConversationTool\\` | \\`string\\` | No | Tool that ends the entire conversation |\n| \\`maxTurns\\` | \\`number\\` | No | Maximum turns for this side |\n| \\`manualStopCondition\\` | \\`boolean\\` | No | Enable custom stop handling via hooks |\n\n## Basic Example (AI-Human)\n\n\\`\\`\\`typescript\nimport { defineAgent } from '@standardagents/builder';\n\nexport default defineAgent({\n name: 'support_agent',\n type: 'ai_human',\n sideA: {\n label: 'Support',\n prompt: 'customer_support',\n stopOnResponse: true,\n endConversationTool: 'close_ticket',\n maxTurns: 50,\n },\n tags: ['support', 'tier-1'],\n});\n\\`\\`\\`\n\n## Dual-AI Example\n\nTwo AI agents conversing (e.g., debate, iterative refinement):\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'code_review_debate',\n type: 'dual_ai',\n maxSessionTurns: 20,\n sideA: {\n label: 'Reviewer',\n prompt: 'code_reviewer',\n stopOnResponse: true,\n },\n sideB: {\n label: 'Developer',\n prompt: 'code_defender',\n stopOnResponse: true,\n },\n});\n\\`\\`\\`\n\n## Agent Handoffs\n\nExpose an agent for handoffs from other prompts:\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'escalation_agent',\n type: 'ai_human',\n exposeAsTool: true,\n toolDescription: 'Escalate to senior support for complex issues',\n sideA: {\n prompt: 'senior_support',\n },\n});\n\\`\\`\\`\n\nOther prompts can then include the agent name in their \\`tools\\` array to enable handoffs.\n\n## Stop Conditions (Priority Order)\n\n1. **endConversationTool** - Ends entire conversation (highest priority)\n2. **stopTool** - Ends current side's turn\n3. **maxTurns** - Ends side's participation when reached\n4. **stopOnResponse** - Ends turn when LLM returns text\n5. **maxSessionTurns** - Ends conversation (hard limit: 250)\n\n## Hooks\n\nAttach lifecycle hooks at the agent level:\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'support_agent',\n type: 'ai_human',\n hooks: ['log_all_messages', 'sanitize_results'],\n sideA: {\n prompt: 'customer_support',\n },\n});\n\\`\\`\\`\n\nAgent hooks run as a fallback when the active prompt has no hooks defined. Prompt hooks always take precedence. See \\`agents/hooks/CLAUDE.md\\` for details.\n\n## Naming Convention\n\nAgent names **must** end with the \\`_agent\\` suffix (e.g., \\`support_agent\\`, \\`research_agent\\`).\nThis convention is enforced by the builder UI and makes agents easily identifiable in logs and code.\n\n## Best Practices\n\n- **Use descriptive names** (\\`customer_support_agent\\` not \\`agent1\\`)\n- **Always use the _agent suffix** - names like \\`support_agent\\`, \\`research_agent\\`\n- **Always set maxTurns** as a safety limit\n- **Match stop conditions to use case** - chat apps use stopOnResponse, workflows use stopTool\n- **Use labels** for clarity in logs and UI\n- **Organize with tags** for filtering\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/agent\n`;\n","export const TOOLS_CLAUDE_MD = `# Custom Tools\n\nTools extend agent capabilities beyond text generation. They allow LLMs to fetch data, perform calculations, execute side effects, and chain to other prompts or agents.\n\n## Function Signature\n\n\\`\\`\\`typescript\ndefineTool({\n description: string, // What the tool does (shown to LLM)\n args?: z.ZodObject, // Input validation schema (optional)\n execute: (state, args) => ToolResult, // Implementation\n tenvs?: z.ZodObject, // Thread environment variables (optional)\n})\n\\`\\`\\`\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool({\n description: 'Search the knowledge base for articles matching a query',\n args: z.object({\n query: z.string().describe('Search query'),\n limit: z.number().optional().default(10).describe('Max results'),\n }),\n execute: async (state, args) => {\n const results = await searchKB(args.query, args.limit);\n return {\n status: 'success',\n result: JSON.stringify(results),\n };\n },\n});\n\\`\\`\\`\n\n## ToolResult Interface\n\n| Property | Type | Description |\n|----------|------|-------------|\n| \\`status\\` | \\`'success' \\\\| 'error'\\` | Whether the tool succeeded |\n| \\`result\\` | \\`string\\` | Tool output (required for success) |\n| \\`error\\` | \\`string\\` | Error message (for error status) |\n| \\`attachments\\` | \\`ToolAttachment[]\\` | Files to attach (images, etc.) |\n\n## ThreadState Access\n\nThe \\`state\\` parameter provides access to:\n\n\\`\\`\\`typescript\nexecute: async (state, args) => {\n // Thread information\n const threadId = state.thread.id;\n const thread = state.thread.instance;\n\n // Configuration\n const agentName = state.agent.name;\n const modelName = state.model.name;\n\n // Message history\n const messages = state.messages;\n\n // Environment bindings\n const env = state.env;\n\n // Parent state (for sub-prompts)\n const root = state.rootState;\n}\n\\`\\`\\`\n\n## Tool Without Arguments\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Get current server time',\n execute: async (state) => {\n return {\n status: 'success',\n result: new Date().toISOString(),\n };\n },\n});\n\\`\\`\\`\n\n## Error Handling\n\nReturn errors gracefully instead of throwing:\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Fetch user data',\n args: z.object({ userId: z.string() }),\n execute: async (state, args) => {\n try {\n const user = await fetchUser(args.userId);\n return { status: 'success', result: JSON.stringify(user) };\n } catch (error) {\n return {\n status: 'error',\n error: \\`Failed to fetch user: \\${error.message}\\`,\n };\n }\n },\n});\n\\`\\`\\`\n\n## Queueing Additional Tools\n\nQueue another tool to run after the current one:\n\n\\`\\`\\`typescript\nimport { queueTool } from '@standardagents/builder';\n\nexport default defineTool({\n description: 'Create order and send confirmation',\n args: z.object({ items: z.array(z.string()) }),\n execute: async (state, args) => {\n const order = await createOrder(args.items);\n\n // Queue email tool to run next\n queueTool(state, 'send_confirmation_email', {\n orderId: order.id,\n email: state.thread.metadata.userEmail,\n });\n\n return { status: 'success', result: JSON.stringify(order) };\n },\n});\n\\`\\`\\`\n\n## Injecting Messages\n\nAdd messages without triggering re-execution:\n\n\\`\\`\\`typescript\nimport { injectMessage } from '@standardagents/builder';\n\nexport default defineTool({\n description: 'Log audit event',\n args: z.object({ event: z.string() }),\n execute: async (state, args) => {\n await injectMessage(state, {\n role: 'system',\n content: \\`[AUDIT] \\${args.event}\\`,\n });\n return { status: 'success', result: 'Logged' };\n },\n});\n\\`\\`\\`\n\n## Thread Environment Variables (tenvs)\n\nTools can declare required thread environment variables:\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Search uploaded documents',\n args: z.object({ query: z.string() }),\n execute: async (state, args) => {\n const vectorStoreId = state.tenvs.vectorStoreId;\n const results = await searchVectorStore(vectorStoreId, args.query);\n return { status: 'success', result: JSON.stringify(results) };\n },\n tenvs: z.object({\n vectorStoreId: z.string().describe('OpenAI Vector Store ID'),\n }),\n});\n\\`\\`\\`\n\n## Returning Attachments\n\nTools can return file attachments (e.g., generated images):\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Generate a chart from data',\n args: z.object({ data: z.array(z.number()) }),\n execute: async (state, args) => {\n const chartImage = await generateChart(args.data);\n return {\n status: 'success',\n result: 'Chart generated successfully',\n attachments: [{\n name: 'chart.png',\n mimeType: 'image/png',\n data: chartImage.base64,\n width: 800,\n height: 600,\n }],\n };\n },\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Write clear descriptions** - LLMs decide tool usage based on descriptions\n- **Describe all parameters** with \\`.describe()\\` in Zod schemas\n- **Handle errors gracefully** - return error status, don't throw\n- **Use snake_case** for file names (\\`search_knowledge_base.ts\\`)\n- **Keep tools focused** - one task per tool\n- **Use \\`state.rootState\\`** when queueing from sub-prompts\n\n## Supported Zod Types\n\n- Primitives: \\`string\\`, \\`number\\`, \\`boolean\\`, \\`null\\`\n- Enums: \\`z.enum(['a', 'b', 'c'])\\`\n- Arrays: \\`z.array(z.string())\\`\n- Objects: \\`z.object({ ... })\\`\n- Optional: \\`z.string().optional()\\`\n- Default: \\`z.number().default(10)\\`\n- Nullable: \\`z.string().nullable()\\`\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/tool\n`;\n","export const HOOKS_CLAUDE_MD = `# Lifecycle Hooks\n\nHooks intercept and modify agent execution at specific lifecycle points.\n\n## Available Hooks\n\n| Hook | Signature | Purpose |\n|------|-----------|---------|\n| \\`filter_messages\\` | \\`(state: ThreadState, messages: Message[]) => Message[]\\` | Filter raw messages before LLM context |\n| \\`prefilter_llm_history\\` | \\`(state: ThreadState, messages: LLMMessage[]) => LLMMessage[]\\` | Modify chat completion messages before LLM |\n| \\`before_create_message\\` | \\`(state: ThreadState, message: Message) => Message\\` | Modify message before database insert |\n| \\`after_create_message\\` | \\`(state: ThreadState, message: Message) => void\\` | Run logic after message created |\n| \\`before_update_message\\` | \\`(state: ThreadState, id: string, updates: Record) => Record\\` | Modify updates before message update |\n| \\`after_update_message\\` | \\`(state: ThreadState, message: Message) => void\\` | Run logic after message updated |\n| \\`before_store_tool_result\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult\\` | Modify tool result before storage |\n| \\`after_tool_call_success\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult \\\\| null\\` | Process successful tool execution |\n| \\`after_tool_call_failure\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult \\\\| null\\` | Process failed tool execution |\n\nAll hooks receive \\`ThreadState\\` as their first parameter, providing access to thread identity, message history, and resource loading.\n\n## Creating a Hook\n\nEach hook file exports a default \\`defineHook\\` call with three properties:\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'filter_messages', // Hook type\n id: 'limit_recent_messages', // Unique ID (snake_case)\n execute: async (state, messages) => {\n return messages.slice(-20);\n }\n});\n\\`\\`\\`\n\n## Hook Scoping\n\nHooks are scoped to **prompts** or **agents** via their ID:\n\n\\`\\`\\`typescript\n// In a prompt definition\ndefinePrompt({\n name: 'customer_support',\n hooks: ['limit_recent_messages', 'redact_pii'],\n // ...\n});\n\n// In an agent definition\ndefineAgent({\n name: 'support_agent',\n hooks: ['log_all_messages'],\n // ...\n});\n\\`\\`\\`\n\n- **Prompt hooks** take precedence over agent hooks\n- If a prompt defines hooks, only those run (agent hooks are skipped)\n- If no prompt hooks are defined, agent hooks run as fallback\n- Hooks are filtered by type at runtime\n\n## File Naming\n\nHook files can use **any name** — the hook type and ID are defined inside the file:\n\n\\`\\`\\`\nagents/hooks/\n├── my_filter.ts # Could contain any hook type\n├── redact_sensitive_data.ts\n├── log_tool_usage.ts\n└── add_metadata.ts\n\\`\\`\\`\n\n## Examples\n\n### Filter Messages (Limit Context)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'filter_messages',\n id: 'limit_to_20',\n execute: async (state, messages) => {\n return messages.slice(-20);\n }\n});\n\\`\\`\\`\n\n### Prefilter LLM History (Redact Content)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'prefilter_llm_history',\n id: 'redact_pii',\n execute: async (state, messages) => {\n return messages.map(msg => ({\n ...msg,\n content: typeof msg.content === 'string'\n ? msg.content.replace(/\\\\b\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\\\\b/g, '[REDACTED]')\n : msg.content,\n }));\n }\n});\n\\`\\`\\`\n\n### Before Create Message (Add Metadata)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'before_create_message',\n id: 'add_version_metadata',\n execute: async (state, message) => {\n if (message.role === 'user' && message.content) {\n return { ...message, content: \\`[v1.0] \\${message.content}\\` };\n }\n return message;\n }\n});\n\\`\\`\\`\n\n### Before Store Tool Result (Sanitize)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'before_store_tool_result',\n id: 'sanitize_results',\n execute: async (state, toolCall, toolResult) => {\n // toolCall: { id, type: 'function', function: { name, arguments } }\n // toolResult: { status, result?, error?, stack?, attachments? }\n if (toolResult.result) {\n return { ...toolResult, result: toolResult.result.replace(/secret/gi, '[REDACTED]') };\n }\n return toolResult;\n }\n});\n\\`\\`\\`\n\n### After Tool Call Success (Logging)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'after_tool_call_success',\n id: 'log_tool_success',\n execute: async (state, toolCall, result) => {\n console.log(\\`Tool \\${toolCall.function.name} succeeded\\`);\n return null; // Return null to use original result\n }\n});\n\\`\\`\\`\n\n### After Tool Call Failure (Recovery)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'after_tool_call_failure',\n id: 'weather_fallback',\n execute: async (state, toolCall, result) => {\n if (toolCall.function.name === 'fetch_weather') {\n return {\n status: 'success',\n result: JSON.stringify({ temp: 'unavailable', fallback: true }),\n };\n }\n return null; // Use original error for other tools\n }\n});\n\\`\\`\\`\n\n## Hook Categories\n\n**Transformation hooks** (return modified data):\n- \\`filter_messages\\`\n- \\`prefilter_llm_history\\`\n- \\`before_create_message\\`\n- \\`before_update_message\\`\n- \\`before_store_tool_result\\`\n- \\`after_tool_call_success\\` (return modified result or null)\n- \\`after_tool_call_failure\\` (return modified result or null)\n\n**Event hooks** (side effects only):\n- \\`after_create_message\\`\n- \\`after_update_message\\`\n\n## Best Practices\n\n- **Keep hooks fast** - target <100ms execution\n- **Wrap in try-catch** - hooks continue on error (original data preserved)\n- **Use unique IDs** - hook IDs must be snake_case and unique across the project\n- **Scope appropriately** - assign hooks to prompts or agents that need them\n- **Document purpose** with clear comments\n- **Use for cross-cutting concerns** - logging, redaction, enrichment\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/hook\n`;\n","export const API_CLAUDE_MD = `# Thread-Specific API Endpoints\n\nDefine custom API endpoints that operate on specific threads with access to the thread's ThreadState.\n\n## File-Based Routing\n\n| File Pattern | HTTP Method | Route |\n|--------------|-------------|-------|\n| \\`name.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.get.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.post.ts\\` | POST | \\`/api/threads/:id/name\\` |\n| \\`name.put.ts\\` | PUT | \\`/api/threads/:id/name\\` |\n| \\`name.delete.ts\\` | DELETE | \\`/api/threads/:id/name\\` |\n| \\`nested/route.ts\\` | GET | \\`/api/threads/:id/nested/route\\` |\n\n## Basic Example\n\n\\`\\`\\`typescript\n// agents/api/status.get.ts -> GET /api/threads/:id/status\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n const { messages, total } = await state.getMessages();\n return Response.json({\n threadId: state.threadId,\n messageCount: total,\n status: 'active',\n });\n});\n\\`\\`\\`\n\n## Handler Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| \\`req\\` | \\`Request\\` | The incoming HTTP request |\n| \\`state\\` | \\`ThreadState\\` | Thread state with messages, identity, file system, etc. |\n\nNote: \\`state.execution\\` is always \\`null\\` in endpoints since the thread is at rest.\n\n## ThreadState Methods\n\nAccess thread data through the state object:\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n // Thread identity\n console.log('Thread ID:', state.threadId);\n console.log('Agent ID:', state.agentId);\n console.log('User ID:', state.userId);\n\n // Message operations\n const { messages, total, hasMore } = await state.getMessages({\n limit: 100,\n offset: 0,\n order: 'desc',\n });\n\n // File system operations\n const files = await state.findFiles('**/*.json');\n const data = await state.readFile('/data/config.json');\n\n // Resource loading\n const agent = await state.loadAgent('my-agent');\n const prompt = await state.loadPrompt('my-prompt');\n\n return Response.json({ messages, total });\n});\n\\`\\`\\`\n\n## POST with Request Body\n\n\\`\\`\\`typescript\n// agents/api/export.post.ts -> POST /api/threads/:id/export\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n const body = await req.json();\n const { format = 'json' } = body;\n\n const { messages } = await state.getMessages();\n\n if (format === 'csv') {\n const csv = messages.map(m => \\`\\${m.role},\\${m.content}\\`).join('\\\\n');\n return new Response(csv, {\n headers: { 'Content-Type': 'text/csv' },\n });\n }\n\n return Response.json(messages);\n});\n\\`\\`\\`\n\n## Nested Routes\n\nCreate directories for nested routes:\n\n\\`\\`\\`\nagents/api/\n├── status.get.ts -> GET /api/threads/:id/status\n├── export.post.ts -> POST /api/threads/:id/export\n└── messages/\n ├── count.ts -> GET /api/threads/:id/messages/count\n └── search.post.ts -> POST /api/threads/:id/messages/search\n\\`\\`\\`\n\n## Error Handling\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n try {\n const data = await riskyOperation();\n return Response.json(data);\n } catch (error) {\n return Response.json({ error: error.message }, { status: 500 });\n }\n});\n\\`\\`\\`\n\n## File System Operations\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n // Read files\n const content = await state.readFile('/data/file.txt');\n\n // Write files\n await state.writeFile('/output/result.json', JSON.stringify(data), 'application/json');\n\n // List directory\n const { entries } = await state.readdirFile('/data');\n\n // Search files\n const matches = await state.grepFiles('pattern');\n const paths = await state.findFiles('**/*.ts');\n\n return Response.json({ success: true });\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Keep handlers fast** - endpoints are in the request path\n- **Paginate large queries** - use limit/offset for messages\n- **Validate input data** - check request body before processing\n- **Use descriptive file names** - \\`export.post.ts\\` not \\`ep1.ts\\`\n- **Return proper status codes** - 200, 400, 404, 500\n- **Import from spec** - use \\`@standardagents/spec\\` for \\`defineThreadEndpoint\\`\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/core-concepts/api\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, modify, applyEdits } from 'jsonc-parser';\nimport { loadFile, writeFile, generateCode, parseModule, builders } from 'magicast';\nimport { addVitePlugin } from 'magicast/helpers';\nimport { logger } from '../utils/logger.js';\nimport {\n ROOT_CLAUDE_MD,\n MODELS_CLAUDE_MD,\n PROMPTS_CLAUDE_MD,\n AGENTS_CLAUDE_MD,\n TOOLS_CLAUDE_MD,\n HOOKS_CLAUDE_MD,\n API_CLAUDE_MD,\n} from '../templates/index.js';\n\ninterface ScaffoldOptions {\n force?: boolean;\n}\n\n// Template for wrangler.jsonc\nconst WRANGLER_TEMPLATE = (name: string) => {\n const today = new Date().toISOString().split('T')[0];\n return `{\n \"$schema\": \"node_modules/wrangler/config-schema.json\",\n \"name\": \"${name}\",\n \"main\": \"worker/index.ts\",\n \"compatibility_date\": \"${today}\",\n \"compatibility_flags\": [\"nodejs_compat\"],\n \"observability\": {\n \"enabled\": true\n },\n \"assets\": {\n \"directory\": \"dist/client\",\n \"not_found_handling\": \"single-page-application\",\n \"binding\": \"ASSETS\",\n \"run_worker_first\": [\"/**\"]\n },\n \"durable_objects\": {\n \"bindings\": [\n {\n \"name\": \"AGENT_BUILDER_THREAD\",\n \"class_name\": \"DurableThread\"\n },\n {\n \"name\": \"AGENT_BUILDER\",\n \"class_name\": \"DurableAgentBuilder\"\n }\n ]\n },\n \"migrations\": [\n {\n \"tag\": \"v1\",\n \"new_sqlite_classes\": [\"DurableThread\"]\n },\n {\n \"tag\": \"v2\",\n \"new_sqlite_classes\": [\"DurableAgentBuilder\"]\n }\n ]\n}\n`;\n};\n\n// Templates for Durable Object files\nconst THREAD_TS = `import { DurableThread } from 'virtual:@standardagents/builder'\n\nexport default class Thread extends DurableThread {}\n`;\n\nconst AGENT_BUILDER_TS = `import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n\nexport default class AgentBuilder extends DurableAgentBuilder {}\n`;\n\n// Worker entry point template\nconst WORKER_INDEX = `import { router } from \"virtual:@standardagents/builder\"\nimport DurableThread from '../agents/Thread';\nimport DurableAgentBuilder from '../agents/AgentBuilder';\n\nexport default {\n async fetch(request, env) {\n const res = await router(request, env)\n return res ?? new Response(null, { status: 404 })\n },\n} satisfies ExportedHandler<Env>\n\nexport { DurableThread, DurableAgentBuilder }\n`;\n\n// Utility functions\nfunction getProjectName(cwd: string): string {\n const packageJsonPath = path.join(cwd, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkg.name) {\n return pkg.name.replace(/^@[^/]+\\//, ''); // Remove scope if present\n }\n } catch {\n // Ignore parse errors\n }\n }\n return path.basename(cwd);\n}\n\nfunction findViteConfig(cwd: string): string | null {\n const candidates = ['vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nfunction findWranglerConfig(cwd: string): string | null {\n const candidates = ['wrangler.jsonc', 'wrangler.json'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nasync function modifyViteConfig(configPath: string, force: boolean): Promise<boolean> {\n try {\n const mod = await loadFile(configPath);\n\n // Check if plugins already include our plugins\n const code = fs.readFileSync(configPath, 'utf-8');\n const hasCloudflare = code.includes('@cloudflare/vite-plugin') || code.includes('cloudflare()');\n const hasAgentBuilder = code.includes('@standardagents/builder') || code.includes('agentbuilder()');\n\n if (hasCloudflare && hasAgentBuilder && !force) {\n logger.info('Vite config already includes Standard Agents plugins');\n return true;\n }\n\n // Add agentbuilder plugin if not present (must come before cloudflare)\n if (!hasAgentBuilder || force) {\n addVitePlugin(mod, {\n from: '@standardagents/builder',\n imported: 'agentbuilder',\n constructor: 'agentbuilder',\n options: { mountPoint: '/' },\n });\n logger.success('Added agentbuilder plugin to vite.config');\n }\n\n // Add cloudflare plugin if not present\n if (!hasCloudflare || force) {\n addVitePlugin(mod, {\n from: '@cloudflare/vite-plugin',\n imported: 'cloudflare',\n constructor: 'cloudflare',\n });\n logger.success('Added cloudflare plugin to vite.config');\n }\n\n await writeFile(mod, configPath);\n return true;\n } catch (error) {\n logger.warning(`Could not automatically modify vite.config: ${error}`);\n logger.log('');\n logger.log('Please manually add the following to your vite.config.ts:');\n logger.log('');\n logger.log(` import { agentbuilder } from '@standardagents/builder'`);\n logger.log(` import { cloudflare } from '@cloudflare/vite-plugin'`);\n logger.log('');\n logger.log(` plugins: [agentbuilder({ mountPoint: '/' }), cloudflare()]`);\n logger.log('');\n return false;\n }\n}\n\nfunction createOrUpdateWranglerConfig(cwd: string, projectName: string, force: boolean): boolean {\n const existingConfig = findWranglerConfig(cwd);\n\n if (existingConfig && !force) {\n // Update existing config\n try {\n const text = fs.readFileSync(existingConfig, 'utf-8');\n const config = parse(text);\n\n // Check if already configured\n const hasBindings = config.durable_objects?.bindings?.some(\n (b: any) => b.name === 'AGENT_BUILDER_THREAD' || b.name === 'AGENT_BUILDER'\n );\n\n if (hasBindings) {\n logger.info('wrangler.jsonc already configured for Standard Agents');\n return true;\n }\n\n // Add bindings to existing config\n let result = text;\n\n // Add durable_objects if not present\n if (!config.durable_objects) {\n const edits = modify(result, ['durable_objects'], {\n bindings: [\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n ]\n }, {});\n result = applyEdits(result, edits);\n } else {\n // Add to existing bindings\n const bindings = config.durable_objects.bindings || [];\n bindings.push(\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n );\n const edits = modify(result, ['durable_objects', 'bindings'], bindings, {});\n result = applyEdits(result, edits);\n }\n\n // Add migrations if not present\n if (!config.migrations) {\n const edits = modify(result, ['migrations'], [\n { tag: 'v1', new_sqlite_classes: ['DurableThread'] },\n { tag: 'v2', new_sqlite_classes: ['DurableAgentBuilder'] }\n ], {});\n result = applyEdits(result, edits);\n }\n\n // Update main entry point if needed\n if (!config.main || !config.main.includes('worker')) {\n const edits = modify(result, ['main'], 'worker/index.ts', {});\n result = applyEdits(result, edits);\n }\n\n // Add assets configuration if not present\n if (!config.assets) {\n const edits = modify(result, ['assets'], {\n directory: 'dist/client',\n not_found_handling: 'single-page-application',\n binding: 'ASSETS',\n run_worker_first: ['/**']\n }, {});\n result = applyEdits(result, edits);\n }\n\n fs.writeFileSync(existingConfig, result, 'utf-8');\n logger.success('Updated wrangler.jsonc with Standard Agents configuration');\n return true;\n } catch (error) {\n logger.warning(`Could not update wrangler config: ${error}`);\n return false;\n }\n }\n\n // Create new wrangler.jsonc\n const wranglerPath = path.join(cwd, 'wrangler.jsonc');\n const sanitizedName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n fs.writeFileSync(wranglerPath, WRANGLER_TEMPLATE(sanitizedName), 'utf-8');\n logger.success('Created wrangler.jsonc');\n return true;\n}\n\nfunction getWorkerEntryPoint(cwd: string): string {\n // Check wrangler config for main entry\n const wranglerConfig = findWranglerConfig(cwd);\n if (wranglerConfig) {\n try {\n const text = fs.readFileSync(wranglerConfig, 'utf-8');\n const config = parse(text);\n if (config.main) {\n return path.join(cwd, config.main);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Default to worker/index.ts\n return path.join(cwd, 'worker', 'index.ts');\n}\n\nasync function createOrUpdateWorkerEntry(cwd: string, force: boolean): Promise<boolean> {\n const entryPath = getWorkerEntryPoint(cwd);\n const entryDir = path.dirname(entryPath);\n\n // Create worker directory if needed\n if (!fs.existsSync(entryDir)) {\n fs.mkdirSync(entryDir, { recursive: true });\n logger.success(`Created ${path.relative(cwd, entryDir)} directory`);\n }\n\n // If file doesn't exist, create it\n if (!fs.existsSync(entryPath)) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n // File exists - try to modify it\n const content = fs.readFileSync(entryPath, 'utf-8');\n\n // Check if already configured\n const hasRouter = content.includes('virtual:@standardagents/builder') && content.includes('router');\n const hasDurableExports = content.includes('DurableThread') && content.includes('DurableAgentBuilder');\n\n if (hasRouter && hasDurableExports && !force) {\n logger.info(`${path.relative(cwd, entryPath)} already configured`);\n return true;\n }\n\n try {\n const mod = await loadFile(entryPath);\n\n // Add imports\n if (!content.includes('virtual:@standardagents/builder') || force) {\n mod.imports.$add({\n from: 'virtual:@standardagents/builder',\n imported: 'router',\n local: 'router',\n });\n }\n\n if (!content.includes(\"'../agents/Thread'\") || force) {\n mod.imports.$add({\n from: '../agents/Thread',\n imported: 'default',\n local: 'DurableThread',\n });\n }\n\n if (!content.includes(\"'../agents/AgentBuilder'\") || force) {\n mod.imports.$add({\n from: '../agents/AgentBuilder',\n imported: 'default',\n local: 'DurableAgentBuilder',\n });\n }\n\n // Check if there's a default export with fetch\n const { code } = generateCode(mod);\n\n // If we can't easily add the router, just overwrite\n if (force || !hasRouter) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Updated ${path.relative(cwd, entryPath)} with Standard Agents router`);\n }\n\n return true;\n } catch (error) {\n // Fall back to template\n if (force) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n logger.warning(`Could not automatically modify ${path.relative(cwd, entryPath)}`);\n logger.log('');\n logger.log('Please ensure your worker entry point includes:');\n logger.log('');\n logger.log(` import { router } from \"virtual:@standardagents/builder\"`);\n logger.log(` import DurableThread from '../agents/Thread';`);\n logger.log(` import DurableAgentBuilder from '../agents/AgentBuilder';`);\n logger.log('');\n logger.log(' // In your fetch handler:');\n logger.log(' const res = router(request, env)');\n logger.log(' if (res) return res');\n logger.log('');\n logger.log(' // Export Durable Objects:');\n logger.log(' export { DurableThread, DurableAgentBuilder }');\n logger.log('');\n return false;\n }\n}\n\nfunction createDurableObjects(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n // Create Thread.ts\n const threadPath = path.join(agentsDir, 'Thread.ts');\n if (!fs.existsSync(threadPath)) {\n fs.writeFileSync(threadPath, THREAD_TS, 'utf-8');\n logger.success('Created agents/Thread.ts');\n } else {\n logger.info('agents/Thread.ts already exists');\n }\n\n // Create AgentBuilder.ts\n const agentBuilderPath = path.join(agentsDir, 'AgentBuilder.ts');\n if (!fs.existsSync(agentBuilderPath)) {\n fs.writeFileSync(agentBuilderPath, AGENT_BUILDER_TS, 'utf-8');\n logger.success('Created agents/AgentBuilder.ts');\n } else {\n logger.info('agents/AgentBuilder.ts already exists');\n }\n}\n\nfunction createDirectoriesAndDocs(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n // Create project root CLAUDE.md (for AI assistants to understand the project)\n const rootDocPath = path.join(cwd, 'CLAUDE.md');\n if (!fs.existsSync(rootDocPath)) {\n fs.writeFileSync(rootDocPath, ROOT_CLAUDE_MD, 'utf-8');\n logger.success('Created CLAUDE.md');\n }\n\n // Create subdirectories with their CLAUDE.md files\n const directories = [\n { path: 'agents/agents', doc: AGENTS_CLAUDE_MD },\n { path: 'agents/prompts', doc: PROMPTS_CLAUDE_MD },\n { path: 'agents/models', doc: MODELS_CLAUDE_MD },\n { path: 'agents/tools', doc: TOOLS_CLAUDE_MD },\n { path: 'agents/hooks', doc: HOOKS_CLAUDE_MD },\n { path: 'agents/api', doc: API_CLAUDE_MD },\n ];\n\n for (const dir of directories) {\n const dirPath = path.join(cwd, dir.path);\n const docPath = path.join(dirPath, 'CLAUDE.md');\n\n // Create directory\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n logger.success(`Created ${dir.path}`);\n }\n\n // Create CLAUDE.md\n if (!fs.existsSync(docPath)) {\n fs.writeFileSync(docPath, dir.doc, 'utf-8');\n logger.success(`Created ${dir.path}/CLAUDE.md`);\n }\n }\n}\n\nfunction updateTsConfig(cwd: string): void {\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsconfigPath)) {\n logger.info('No tsconfig.json found, skipping TypeScript configuration');\n return;\n }\n\n try {\n const text = fs.readFileSync(tsconfigPath, 'utf-8');\n const config = parse(text);\n let result = text;\n\n // Add types to compilerOptions\n const types = config.compilerOptions?.types || [];\n const newTypes = [\n './worker-configuration.d.ts',\n './.agents/types.d.ts',\n './.agents/virtual-module.d.ts'\n ].filter(t => !types.includes(t));\n\n if (newTypes.length > 0) {\n const allTypes = [...types, ...newTypes];\n const edits = modify(result, ['compilerOptions', 'types'], allTypes, {});\n result = applyEdits(result, edits);\n }\n\n // Add worker and agents to include\n const include = config.include || [];\n const newIncludes = ['worker', 'agents'].filter(i => !include.includes(i));\n\n if (newIncludes.length > 0) {\n const allIncludes = [...include, ...newIncludes];\n const edits = modify(result, ['include'], allIncludes, {});\n result = applyEdits(result, edits);\n }\n\n if (newTypes.length > 0 || newIncludes.length > 0) {\n fs.writeFileSync(tsconfigPath, result, 'utf-8');\n logger.success('Updated tsconfig.json with Standard Agents types');\n } else {\n logger.info('tsconfig.json already configured');\n }\n } catch (error) {\n logger.warning('Could not update tsconfig.json, you may need to add types manually');\n }\n}\n\nfunction cleanupViteDefaults(cwd: string): void {\n // Remove default Vite files that we don't need\n const filesToRemove = [\n 'src/main.ts',\n 'src/style.css',\n 'src/counter.ts',\n 'src/typescript.svg',\n 'src/vite-env.d.ts',\n 'index.html',\n 'public/vite.svg',\n ];\n\n const dirsToRemove = ['src', 'public'];\n\n for (const file of filesToRemove) {\n const filePath = path.join(cwd, file);\n if (fs.existsSync(filePath)) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // Ignore errors\n }\n }\n }\n\n // Remove empty directories\n for (const dir of dirsToRemove) {\n const dirPath = path.join(cwd, dir);\n if (fs.existsSync(dirPath)) {\n try {\n const files = fs.readdirSync(dirPath);\n if (files.length === 0) {\n fs.rmdirSync(dirPath);\n }\n } catch {\n // Ignore errors\n }\n }\n }\n}\n\nexport async function scaffold(options: ScaffoldOptions = {}) {\n const cwd = process.cwd();\n const projectName = getProjectName(cwd);\n const force = options.force || false;\n\n logger.info('Scaffolding Standard Agents...');\n logger.log('');\n\n // 1. Find and modify vite.config\n const viteConfigPath = findViteConfig(cwd);\n if (viteConfigPath) {\n await modifyViteConfig(viteConfigPath, force);\n } else {\n logger.warning('No vite.config found. Please create one with cloudflare and agentbuilder plugins.');\n }\n\n // 2. Create or update wrangler.jsonc\n createOrUpdateWranglerConfig(cwd, projectName, force);\n\n // 3. Create or update worker entry point\n await createOrUpdateWorkerEntry(cwd, force);\n\n // 4. Create Durable Object files\n createDurableObjects(cwd);\n\n // 5. Create agent directories with documentation\n createDirectoriesAndDocs(cwd);\n\n // 6. Update tsconfig.json\n updateTsConfig(cwd);\n\n // 7. Clean up default Vite files (only if force is true, meaning fresh project)\n if (force) {\n cleanupViteDefaults(cwd);\n }\n\n logger.log('');\n logger.success('Standard Agents scaffolding complete!');\n logger.log('');\n logger.log('Your project structure:');\n logger.log('');\n logger.log(' CLAUDE.md # Architecture documentation');\n logger.log(' agents/');\n logger.log(' ├── Thread.ts # Durable Object for threads');\n logger.log(' ├── AgentBuilder.ts # Durable Object for agent state');\n logger.log(' ├── agents/ # Agent definitions');\n logger.log(' ├── prompts/ # Prompt definitions');\n logger.log(' ├── models/ # Model configurations');\n logger.log(' ├── tools/ # Custom tools');\n logger.log(' ├── hooks/ # Lifecycle hooks');\n logger.log(' └── api/ # Thread API endpoints');\n logger.log(' worker/');\n logger.log(' └── index.ts # Cloudflare Worker entry point');\n logger.log('');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport crypto from 'node:crypto';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { logger } from '../utils/logger.js';\nimport { scaffold } from './scaffold.js';\n\ninterface InitOptions {\n yes?: boolean;\n template?: string;\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const onData = (char: string) => {\n const c = char.toString();\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004': // Ctrl+D\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n break;\n case '\\u0003': // Ctrl+C\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F': // Backspace\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n }\n break;\n default:\n password += c;\n stdout.write('*');\n break;\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Use shell: false to properly handle arguments with spaces\n // Node's spawn will handle argument escaping automatically\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with hyphens\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n}\n\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | 'bun' {\n // Check environment variable first (most reliable when running via npx/pnpm exec)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n // Check for lockfiles\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\n// Injected at build time by tsup (see tsup.config.ts)\n// During publish, CLI_PUBLISH_VERSION env var is set to the actual version being published\ndeclare const __CLI_VERSION__: string;\n\n/**\n * Get the package version specifier to use when installing @standardagents packages.\n *\n * - In workspace mode (STANDARDAGENTS_WORKSPACE=1), returns 'workspace:*' for pnpm linking\n * - Otherwise returns the exact CLI version (e.g., '0.11.0-next.abc123')\n */\nfunction getPackageVersion(): string {\n // For local development in a pnpm workspace, use workspace protocol\n if (process.env.STANDARDAGENTS_WORKSPACE === '1') {\n return 'workspace:*';\n }\n return __CLI_VERSION__;\n}\n\nasync function selectPackageManager(detected: 'npm' | 'pnpm' | 'yarn' | 'bun'): Promise<'npm' | 'pnpm' | 'yarn' | 'bun'> {\n const options = ['npm', 'pnpm', 'yarn', 'bun'] as const;\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n // Move cursor up to overwrite previous render (except first time)\n stdout.write('\\x1B[?25l'); // Hide cursor\n\n // Clear and redraw\n stdout.write(`\\x1B[${options.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n // Handle arrow keys (escape sequences)\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nexport async function init(projectNameArg?: string, options: InitOptions = {}) {\n const cwd = process.cwd();\n const detectedPm = detectPackageManager();\n const template = options.template || 'vanilla-ts';\n\n logger.log('');\n logger.info('Creating a new Standard Agents project...');\n logger.log('');\n\n // Select package manager\n let pm: 'npm' | 'pnpm' | 'yarn' | 'bun';\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Run create vite\n logger.log('');\n logger.info(`Step 1: Creating Vite project with ${template} template...`);\n logger.log('');\n\n try {\n // Determine the correct create command based on package manager\n // All package managers should use create-vite@latest to ensure the latest version\n // Use --no-interactive to skip prompts (like \"Install with npm and start now?\")\n let createCmd: string;\n let createArgs: string[];\n\n switch (pm) {\n case 'pnpm':\n createCmd = 'pnpm';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'yarn':\n createCmd = 'yarn';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'bun':\n createCmd = 'bun';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n default:\n createCmd = 'npm';\n createArgs = ['create', 'vite@latest', projectName, '--', '--template', template, '--no-interactive'];\n }\n\n await runCommand(createCmd, createArgs, cwd);\n } catch (error) {\n logger.error('Failed to create Vite project');\n process.exit(1);\n }\n\n // Create vite.config.ts if it doesn't exist (some templates may not include one)\n const viteConfigPath = path.join(projectPath, 'vite.config.ts');\n if (!fs.existsSync(viteConfigPath)) {\n const viteConfigContent = `import { defineConfig } from 'vite'\n\nexport default defineConfig({\n plugins: [],\n})\n`;\n fs.writeFileSync(viteConfigPath, viteConfigContent, 'utf-8');\n logger.success('Created vite.config.ts');\n }\n\n // Update package.json name to kebab-case (handles spaces and special characters)\n const packageJsonPath = path.join(projectPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const kebabName = toKebabCase(projectName);\n if (packageJson.name !== kebabName) {\n packageJson.name = kebabName;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n // Step 2: Collect API keys and admin password\n logger.log('');\n logger.info('Step 2: Configuring environment variables...');\n logger.log('');\n\n // Generate encryption key\n const encryptionKey = crypto.randomBytes(32).toString('hex');\n\n // Ask for API keys and admin password\n let openrouterKey = '';\n let openaiKey = '';\n let adminPassword = '';\n\n if (!options.yes) {\n logger.log('API keys are optional but required to use AI models.');\n logger.log('You can add them later by editing .dev.vars');\n logger.log('');\n\n openrouterKey = await prompt('OpenRouter API key (optional, press Enter to skip): ');\n openaiKey = await prompt('OpenAI API key (optional, press Enter to skip): ');\n\n logger.log('');\n logger.log('Set a temporary admin password for development access.');\n logger.log('Press Enter to use the default password \"admin\".');\n logger.log('');\n\n while (true) {\n adminPassword = await promptPassword('Temporary admin password: ');\n\n if (!adminPassword) {\n adminPassword = 'admin';\n break;\n }\n\n const confirmPassword = await promptPassword('Confirm password: ');\n\n if (adminPassword === confirmPassword) {\n break;\n } else {\n logger.warning('Passwords do not match. Please try again.');\n logger.log('');\n adminPassword = '';\n }\n }\n }\n\n // Default admin password if not provided (for --yes flag)\n if (!adminPassword) {\n adminPassword = 'admin';\n }\n\n // Step 3: Install Standard Agents dependencies\n logger.log('');\n logger.info('Step 3: Installing Standard Agents dependencies...');\n logger.log('');\n\n try {\n const installCmd = pm === 'npm' ? 'install' : 'add';\n const devFlag = pm === 'npm' ? '--save-dev' : '-D';\n const packageVersion = getPackageVersion();\n\n // Install dev dependencies\n await runCommand(pm, [\n installCmd, devFlag,\n '@cloudflare/vite-plugin',\n 'wrangler',\n ], projectPath);\n\n // Build list of regular dependencies\n // All @standardagents packages are version-locked to CLI version\n // We explicitly install all packages at the exact version to avoid\n // npm/pnpm resolving transitive deps with semver ranges (which excludes prereleases)\n const deps = [\n `@standardagents/builder@${packageVersion}`,\n `@standardagents/spec@${packageVersion}`,\n `@standardagents/sip@${packageVersion}`,\n 'zod'\n ];\n\n // Add provider packages based on API keys provided\n if (openaiKey) {\n deps.push(`@standardagents/openai@${packageVersion}`);\n }\n if (openrouterKey) {\n deps.push(`@standardagents/openrouter@${packageVersion}`);\n }\n\n // Install regular dependencies (builder needs to be in dependencies, not devDependencies)\n await runCommand(pm, [installCmd, ...deps], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Step 4: Run scaffold in the new project directory\n logger.log('');\n logger.info('Step 4: Configuring Standard Agents...');\n logger.log('');\n\n // Change to project directory for scaffold\n process.chdir(projectPath);\n\n await scaffold({ force: true });\n\n // Write .dev.vars file with collected environment variables\n logger.log('');\n logger.info('Writing environment configuration...');\n logger.log('');\n\n // Create .dev.vars file\n const devVarsLines: string[] = [\n '# Standard Agents Environment Variables',\n '# This file contains secrets for local development only',\n '# Do not commit this file to version control',\n '',\n '# Encryption key for secure data (auto-generated)',\n `ENCRYPTION_KEY=${encryptionKey}`,\n '',\n '# Temporary admin password for development access',\n `SUPER_ADMIN_PASSWORD=${adminPassword}`,\n '',\n '# AI Provider API Keys',\n '# Uncomment and add your keys as needed',\n ];\n\n if (openrouterKey) {\n devVarsLines.push(`OPENROUTER_API_KEY=${openrouterKey}`);\n } else {\n devVarsLines.push('# OPENROUTER_API_KEY=your-openrouter-key');\n }\n\n if (openaiKey) {\n devVarsLines.push(`OPENAI_API_KEY=${openaiKey}`);\n } else {\n devVarsLines.push('# OPENAI_API_KEY=your-openai-key');\n }\n\n devVarsLines.push('');\n\n const devVarsPath = path.join(projectPath, '.dev.vars');\n fs.writeFileSync(devVarsPath, devVarsLines.join('\\n'), 'utf-8');\n logger.success('Created .dev.vars with encryption key');\n\n // Add .dev.vars to .gitignore if it exists\n const gitignorePath = path.join(projectPath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.dev.vars')) {\n fs.appendFileSync(gitignorePath, '\\n# Local environment variables\\n.dev.vars\\n');\n logger.success('Added .dev.vars to .gitignore');\n }\n }\n\n // Step 5: Generate Cloudflare types\n logger.log('');\n logger.info('Step 5: Generating Cloudflare types...');\n logger.log('');\n\n try {\n await runCommand('npx', ['wrangler', 'types'], projectPath);\n } catch (error) {\n logger.warning('Could not generate types automatically. Run \"npx wrangler types\" manually.');\n }\n\n // Done!\n logger.log('');\n logger.success('Project created successfully!');\n logger.log('');\n logger.log('Next steps:');\n logger.log('');\n logger.log(` cd ${projectName}`);\n logger.log(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n logger.log('');\n logger.log('For more information, visit: https://standardagents.ai/docs');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport net from 'node:net';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport { logger } from '../utils/logger.js';\n\ninterface InitChatOptions {\n yes?: boolean;\n framework?: 'vite' | 'nextjs';\n}\n\ntype Framework = 'vite' | 'nextjs';\ntype PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\n/**\n * Get the @standardagents/react version to use based on the CLI's version.\n * If CLI is running a prerelease (e.g., 0.11.0-next.1), use that tag.\n * Otherwise, use the exact CLI version.\n */\nfunction getReactPackageVersion(): string {\n try {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js -> ../package.json\n const pkgPath = path.resolve(__dirname, '../package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const version = pkg.version as string;\n\n const prereleaseMatch = version.match(/-([a-z]+)\\./i);\n if (prereleaseMatch) {\n return prereleaseMatch[1];\n }\n\n return `^${version}`;\n } catch {\n return 'latest';\n }\n}\n\n/**\n * Get the path to the chat source directory bundled with the CLI\n */\nfunction getChatSourceDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js -> ../chat\n return path.resolve(__dirname, '../chat');\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const redraw = () => {\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n };\n\n const onData = (data: string) => {\n const str = data.toString();\n\n for (let i = 0; i < str.length; i++) {\n const c = str[i];\n\n if (c === '\\x1B') {\n if (str[i + 1] === '[') {\n i += 2;\n continue;\n }\n continue;\n }\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004':\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n return;\n case '\\u0003':\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F':\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n redraw();\n }\n break;\n default:\n if (c.charCodeAt(0) >= 32) {\n password += c;\n stdout.write('*');\n }\n break;\n }\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\nasync function selectPackageManager(detected: PackageManager): Promise<PackageManager> {\n const options: PackageManager[] = ['npm', 'pnpm', 'yarn', 'bun'];\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[0J');\n\n stdout.write('Select a package manager:\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n stdout.write('Select a package manager:\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nasync function selectFramework(): Promise<Framework> {\n const options: { value: Framework; label: string }[] = [\n { value: 'vite', label: 'Vite (React + TypeScript)' },\n { value: 'nextjs', label: 'Next.js (App Router)' },\n ];\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[0J');\n\n stdout.write('Select a framework:\\n');\n options.forEach((opt, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt.label}\\x1B[0m\\n`);\n });\n };\n\n stdout.write('Select a framework:\\n');\n options.forEach((opt, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt.label}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(options[selectedIndex].value);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isPortOpen(port: number): Promise<boolean> {\n const tryConnect = (host: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const socket = new net.Socket();\n socket.setTimeout(200);\n\n socket.on('connect', () => {\n socket.destroy();\n resolve(true);\n });\n\n socket.on('timeout', () => {\n socket.destroy();\n resolve(false);\n });\n\n socket.on('error', () => {\n socket.destroy();\n resolve(false);\n });\n\n socket.connect(port, host);\n });\n };\n\n if (await tryConnect('127.0.0.1')) return true;\n if (await tryConnect('::1')) return true;\n return false;\n}\n\nasync function isAgentbuilderInstance(url: string): Promise<boolean> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1000);\n\n const response = await fetch(`${url}/api/agents`, {\n signal: controller.signal,\n headers: { 'Accept': 'application/json' },\n });\n\n clearTimeout(timeout);\n\n if (response.status === 401) {\n return true;\n }\n\n if (response.ok) {\n const data = await response.json();\n return Array.isArray(data.agents);\n }\n return false;\n } catch {\n return false;\n }\n}\n\nasync function detectAgentbuilderInstance(): Promise<string | null> {\n const portsToScan = [\n 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180,\n 3000, 3001, 3002, 3003,\n 8080, 8000, 4000,\n ];\n\n logger.log('\\x1B[90mScanning for running agentbuilder instance...\\x1B[0m');\n\n const openPorts: number[] = [];\n\n await Promise.all(\n portsToScan.map(async (port) => {\n if (await isPortOpen(port)) {\n openPorts.push(port);\n }\n })\n );\n\n for (const port of openPorts.sort((a, b) => a - b)) {\n const url = `http://localhost:${port}`;\n if (await isAgentbuilderInstance(url)) {\n return url;\n }\n }\n\n return null;\n}\n\n/**\n * Copy a directory recursively, skipping certain files/folders\n */\nfunction copyDir(src: string, dest: string, skip: string[] = []) {\n if (!fs.existsSync(dest)) {\n fs.mkdirSync(dest, { recursive: true });\n }\n\n const entries = fs.readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n if (skip.includes(entry.name)) continue;\n\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath, skip);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Update package.json with correct SDK version and project name\n */\nfunction updatePackageJson(filePath: string, projectName: string, reactVersion: string) {\n const pkg = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n\n // Update name\n pkg.name = projectName;\n\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n\n // Remove private flag for user projects\n delete pkg.private;\n\n // Remove workspace-specific scripts\n delete pkg.scripts?.['dev:next'];\n delete pkg.scripts?.['build:next'];\n\n fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n}\n\n/**\n * Update package.json for Next.js project\n */\nfunction updateNextPackageJson(filePath: string, projectName: string, reactVersion: string) {\n const pkg = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n\n // Update name\n pkg.name = projectName;\n\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n\n // Remove private flag for user projects\n delete pkg.private;\n\n // Update scripts for Next.js only\n pkg.scripts = {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n };\n\n // Remove vite-specific deps\n delete pkg.devDependencies?.['@tailwindcss/vite'];\n delete pkg.devDependencies?.['@vitejs/plugin-react'];\n delete pkg.devDependencies?.['vite'];\n\n fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n}\n\nexport async function initChat(projectNameArg?: string, options: InitChatOptions = {}) {\n const cwd = process.cwd();\n const chatSourceDir = getChatSourceDir();\n\n // Check if chat source exists\n if (!fs.existsSync(chatSourceDir)) {\n logger.error('Chat source files not found. This CLI installation may be corrupted.');\n process.exit(1);\n }\n\n logger.log('');\n logger.info('Scaffolding a frontend chat application...');\n logger.log('');\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Select framework\n let framework: Framework;\n if (options.framework) {\n framework = options.framework;\n } else if (options.yes) {\n framework = 'vite';\n } else {\n framework = await selectFramework();\n logger.log('');\n }\n\n // Step 2: Get Agentbuilder URL\n let serverUrl: string;\n if (options.yes) {\n serverUrl = 'http://localhost:5173';\n } else {\n const detectedUrl = await detectAgentbuilderInstance();\n\n if (detectedUrl) {\n logger.success(`Found agentbuilder at ${detectedUrl}`);\n const urlInput = await prompt(`Agentbuilder dev server URL [${detectedUrl}]: `);\n serverUrl = urlInput || detectedUrl;\n } else {\n logger.log('\\x1B[90mNo running agentbuilder instance found\\x1B[0m');\n const urlInput = await prompt('Agentbuilder dev server URL [http://localhost:5173]: ');\n serverUrl = urlInput || 'http://localhost:5173';\n }\n\n if (!isValidUrl(serverUrl)) {\n logger.error('Invalid URL format');\n process.exit(1);\n }\n }\n\n // Select package manager\n const detectedPm = detectPackageManager();\n let pm: PackageManager;\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n logger.log('');\n logger.info(`Creating ${framework === 'vite' ? 'Vite' : 'Next.js'} project...`);\n logger.log('');\n\n // Create project directory\n fs.mkdirSync(projectPath, { recursive: true });\n\n // Get React package version\n const reactVersion = getReactPackageVersion();\n\n // Copy source files based on framework\n if (framework === 'vite') {\n await scaffoldVite(projectPath, chatSourceDir, projectName, serverUrl, reactVersion);\n } else {\n await scaffoldNextjs(projectPath, chatSourceDir, projectName, serverUrl, reactVersion);\n }\n\n // Install dependencies\n logger.log('');\n logger.info('Installing dependencies...');\n logger.log('');\n\n try {\n await runCommand(pm, pm === 'npm' ? ['install'] : ['install'], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Success message\n logger.log('');\n logger.success('Chat UI scaffolded successfully!');\n logger.log('');\n\n // Start dev server\n logger.info('Starting development server...');\n logger.log('');\n\n const devArgs = pm === 'npm' ? ['run', 'dev'] : ['dev'];\n const devProcess = spawn(pm, devArgs, {\n cwd: projectPath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: false,\n });\n\n let browserOpened = false;\n const openBrowser = (url: string) => {\n if (browserOpened) return;\n browserOpened = true;\n const openCmd = process.platform === 'darwin' ? 'open' :\n process.platform === 'win32' ? 'start' : 'xdg-open';\n spawn(openCmd, [url], { stdio: 'ignore', detached: true }).unref();\n };\n\n devProcess.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n process.stdout.write(data);\n\n const urlMatch = text.match(/Local:\\s+(https?:\\/\\/localhost:\\d+\\/?)/);\n if (urlMatch && !browserOpened) {\n openBrowser(urlMatch[1]);\n }\n });\n\n devProcess.stderr?.on('data', (data: Buffer) => {\n process.stderr.write(data);\n });\n\n devProcess.on('error', (error) => {\n logger.error(`Failed to start dev server: ${error.message}`);\n process.exit(1);\n });\n}\n\nasync function scaffoldVite(\n projectPath: string,\n chatSourceDir: string,\n projectName: string,\n serverUrl: string,\n reactVersion: string\n) {\n // Copy shared source files\n copyDir(path.join(chatSourceDir, 'src'), path.join(projectPath, 'src'), []);\n logger.success('Copied src/');\n\n // Copy vite-specific files to root\n const viteDir = path.join(chatSourceDir, 'vite');\n\n // Copy and update index.html to point to src/main.tsx\n let indexHtml = fs.readFileSync(path.join(viteDir, 'index.html'), 'utf-8');\n indexHtml = indexHtml.replace('src=\"/main.tsx\"', 'src=\"/src/main.tsx\"');\n fs.writeFileSync(path.join(projectPath, 'index.html'), indexHtml, 'utf-8');\n logger.success('Created index.html');\n\n fs.copyFileSync(path.join(viteDir, 'main.tsx'), path.join(projectPath, 'src', 'main.tsx'));\n logger.success('Created src/main.tsx');\n\n // Read and adapt vite.config.ts (remove root and adjust paths)\n let viteConfig = fs.readFileSync(path.join(viteDir, 'vite.config.ts'), 'utf-8');\n // Simplify config for standalone project\n viteConfig = `import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\nimport tailwindcss from '@tailwindcss/vite'\n\nexport default defineConfig({\n plugins: [\n react(),\n tailwindcss(),\n ],\n})\n`;\n fs.writeFileSync(path.join(projectPath, 'vite.config.ts'), viteConfig, 'utf-8');\n logger.success('Created vite.config.ts');\n\n // Copy and update tsconfig\n fs.copyFileSync(path.join(chatSourceDir, 'tsconfig.json'), path.join(projectPath, 'tsconfig.json'));\n // Update tsconfig to remove vite-specific include\n const tsconfig = JSON.parse(fs.readFileSync(path.join(projectPath, 'tsconfig.json'), 'utf-8'));\n tsconfig.include = ['src'];\n delete tsconfig.compilerOptions?.paths;\n fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', 'utf-8');\n logger.success('Created tsconfig.json');\n\n // Copy and update package.json\n fs.copyFileSync(path.join(chatSourceDir, 'package.json'), path.join(projectPath, 'package.json'));\n // Read, modify, and write package.json\n const pkg = JSON.parse(fs.readFileSync(path.join(projectPath, 'package.json'), 'utf-8'));\n pkg.name = projectName;\n pkg.scripts = {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n };\n delete pkg.private;\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n // Remove next.js deps\n delete pkg.dependencies?.['next'];\n delete pkg.devDependencies?.['@tailwindcss/postcss'];\n delete pkg.devDependencies?.['postcss'];\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n logger.success('Created package.json');\n\n // Create .env\n const envContent = `# Agentbuilder connection\nVITE_AGENTBUILDER_URL=${serverUrl}\n`;\n fs.writeFileSync(path.join(projectPath, '.env'), envContent, 'utf-8');\n logger.success('Created .env');\n\n // Create .gitignore\n fs.writeFileSync(path.join(projectPath, '.gitignore'), `node_modules\ndist\n.env\n`, 'utf-8');\n logger.success('Created .gitignore');\n\n // Update main.tsx paths (it expects ../src/ but now they're in same dir)\n let mainTsx = fs.readFileSync(path.join(projectPath, 'src', 'main.tsx'), 'utf-8');\n mainTsx = mainTsx\n .replace(/from '\\.\\.\\/src\\//g, \"from './\")\n .replace(/import '\\.\\.\\/src\\//g, \"import './\");\n fs.writeFileSync(path.join(projectPath, 'src', 'main.tsx'), mainTsx, 'utf-8');\n\n // Copy favicon\n if (fs.existsSync(path.join(viteDir, 'favicon.svg'))) {\n fs.copyFileSync(path.join(viteDir, 'favicon.svg'), path.join(projectPath, 'favicon.svg'));\n logger.success('Created favicon.svg');\n }\n}\n\nasync function scaffoldNextjs(\n projectPath: string,\n chatSourceDir: string,\n projectName: string,\n serverUrl: string,\n reactVersion: string\n) {\n // Copy shared source files to src/\n copyDir(path.join(chatSourceDir, 'src'), path.join(projectPath, 'src'), []);\n logger.success('Copied src/');\n\n // Copy next-specific files\n const nextDir = path.join(chatSourceDir, 'next');\n\n // Copy app directory\n copyDir(path.join(nextDir, 'app'), path.join(projectPath, 'app'), []);\n logger.success('Copied app/');\n\n // Copy next.config.ts\n fs.copyFileSync(path.join(nextDir, 'next.config.ts'), path.join(projectPath, 'next.config.ts'));\n logger.success('Created next.config.ts');\n\n // Copy postcss.config.mjs\n fs.copyFileSync(path.join(nextDir, 'postcss.config.mjs'), path.join(projectPath, 'postcss.config.mjs'));\n logger.success('Created postcss.config.mjs');\n\n // Create tsconfig.json for Next.js\n const tsconfig = {\n compilerOptions: {\n target: \"ES2017\",\n lib: [\"dom\", \"dom.iterable\", \"esnext\"],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: \"esnext\",\n moduleResolution: \"bundler\",\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: \"preserve\",\n incremental: true,\n plugins: [{ name: \"next\" }],\n paths: {\n \"@/*\": [\"./src/*\"]\n }\n },\n include: [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n exclude: [\"node_modules\"]\n };\n fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', 'utf-8');\n logger.success('Created tsconfig.json');\n\n // Create package.json for Next.js\n const pkg = JSON.parse(fs.readFileSync(path.join(chatSourceDir, 'package.json'), 'utf-8'));\n pkg.name = projectName;\n pkg.scripts = {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n };\n delete pkg.private;\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n // Remove vite-specific deps\n delete pkg.devDependencies?.['@tailwindcss/vite'];\n delete pkg.devDependencies?.['@vitejs/plugin-react'];\n delete pkg.devDependencies?.['vite'];\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n logger.success('Created package.json');\n\n // Create .env.local\n const envContent = `# Agentbuilder connection\nNEXT_PUBLIC_AGENTBUILDER_URL=${serverUrl}\n`;\n fs.writeFileSync(path.join(projectPath, '.env.local'), envContent, 'utf-8');\n logger.success('Created .env.local');\n\n // Create .gitignore\n fs.writeFileSync(path.join(projectPath, '.gitignore'), `node_modules\n.next\nout\n.env.local\n`, 'utf-8');\n logger.success('Created .gitignore');\n\n // Update layout.tsx paths\n let layoutTsx = fs.readFileSync(path.join(projectPath, 'app', 'layout.tsx'), 'utf-8');\n layoutTsx = layoutTsx.replace(/from '\\.\\.\\/\\.\\.\\/src\\//g, \"from '../src/\");\n fs.writeFileSync(path.join(projectPath, 'app', 'layout.tsx'), layoutTsx, 'utf-8');\n\n // Update page.tsx paths\n let pageTsx = fs.readFileSync(path.join(projectPath, 'app', 'page.tsx'), 'utf-8');\n pageTsx = pageTsx.replace(/from '\\.\\.\\/\\.\\.\\/src\\//g, \"from '../src/\");\n fs.writeFileSync(path.join(projectPath, 'app', 'page.tsx'), pageTsx, 'utf-8');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Item selection state for extract/copy decision\n */\ninterface SelectionItem {\n name: string;\n type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n filePath: string;\n mode: 'extract' | 'copy';\n isShared: boolean;\n sharedWith: string[];\n}\n\n/**\n * Interactive select prompt for choosing from a list of options.\n */\nasync function selectAgent(agents: string[]): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l'); // Hide cursor\n stdout.write(`\\x1B[${agents.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select an agent to pack (use arrows, enter to confirm):\\n');\n agents.forEach((agent, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${agent}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select an agent to pack (use arrows, enter to confirm):\\n');\n agents.forEach((agent, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${agent}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + agents.length) % agents.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % agents.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(agents[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\n/**\n * Interactive item mode selector for extract/copy decisions.\n */\nasync function selectItemModes(\n items: SelectionItem[],\n _agentName: string\n): Promise<SelectionItem[]> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const getDisplayLines = () => {\n const lines: string[] = [];\n lines.push('');\n lines.push('Remove originals? (space to toggle, enter to confirm)');\n lines.push('');\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const isSelected = i === selectedIndex;\n const cursor = isSelected ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const modeText = item.mode === 'extract'\n ? '\\x1B[32m(extract)\\x1B[0m'\n : '\\x1B[90m(copy)\\x1B[0m';\n\n lines.push(`${cursor} ${item.name} \\x1B[90m(${item.type})\\x1B[0m ${modeText}`);\n }\n\n lines.push('');\n return lines;\n };\n\n const render = (initial = false) => {\n const lines = getDisplayLines();\n if (!initial) {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${lines.length}A`);\n stdout.write('\\x1B[0J');\n }\n stdout.write(lines.join('\\n') + '\\n');\n };\n\n render(true);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + items.length) % items.length;\n render();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % items.length;\n render();\n } else if (key === ' ') {\n items[selectedIndex].mode = items[selectedIndex].mode === 'extract' ? 'copy' : 'extract';\n render();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(items);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\ninterface PackOptions {\n output?: string;\n npm?: boolean;\n version?: string;\n noRemove?: boolean;\n noInteractive?: boolean;\n}\n\n/**\n * Check if this is a valid Standard Agents project.\n */\nfunction isStandardAgentsProject(): boolean {\n // Check for agents directory\n if (!fs.existsSync('agents')) {\n return false;\n }\n\n // Check for @standardagents/builder dependency\n try {\n const pkgJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n return '@standardagents/builder' in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Pack an agent with all its dependencies.\n */\nexport async function pack(agentName: string | undefined, options: PackOptions) {\n logger.info('Packing agent...\\n');\n\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of packing service (uses separate entry point without Cloudflare deps)\n let PackingService: any;\n try {\n const packing = await import('@standardagents/builder/packing');\n PackingService = packing.PackingService;\n } catch (err) {\n logger.error('Failed to load packing service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed and built.');\n if (err instanceof Error) {\n logger.info(`Error: ${err.message}`);\n }\n process.exit(1);\n }\n\n const packingService = new PackingService();\n\n // If no agent name provided, show interactive select\n if (!agentName) {\n const agents = packingService.listAgents(rootDir);\n\n if (agents.length === 0) {\n logger.error('No agents found in agents/agents/');\n process.exit(1);\n }\n\n if (agents.length === 1) {\n // Only one agent, use it directly\n agentName = agents[0];\n logger.info(`Found one agent: ${agentName}`);\n } else {\n // Multiple agents, show interactive select\n console.log('');\n agentName = await selectAgent(agents);\n console.log('');\n }\n }\n\n // At this point agentName is guaranteed to be defined (we exit if no agents found)\n if (!agentName) {\n // This should never happen, but satisfies TypeScript\n logger.error('No agent selected');\n process.exit(1);\n }\n const selectedAgent = agentName;\n\n logger.info(`Analyzing agent: ${selectedAgent}`);\n\n // Analyze the agent\n const analysis = await packingService.analyzeAgent(selectedAgent, rootDir);\n\n if (analysis.errors.length > 0) {\n logger.error('Analysis failed:');\n for (const error of analysis.errors) {\n console.log(` - ${error}`);\n }\n process.exit(1);\n }\n\n // Show analysis results\n console.log('');\n logger.info('Discovered constituents:');\n console.log(` Agents: ${analysis.constituents.agents.map((a: { name: string }) => a.name).join(', ') || '(none)'}`);\n console.log(` Prompts: ${analysis.constituents.prompts.map((p: { name: string }) => p.name).join(', ') || '(none)'}`);\n console.log(` Tools: ${analysis.constituents.tools.map((t: { name: string }) => t.name).join(', ') || '(none)'}`);\n console.log(` Models: ${analysis.constituents.models.map((m: { name: string }) => m.name).join(', ') || '(none)'}`);\n console.log(` Hooks: ${analysis.constituents.hooks.map((h: { name: string }) => h.name).join(', ') || '(none)'}`);\n\n // Show warnings\n if (analysis.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of analysis.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n // Build selection items from analysis\n const selectionItems: SelectionItem[] = [];\n\n for (const agent of analysis.constituents.agents) {\n selectionItems.push({\n name: agent.name,\n type: 'agent',\n filePath: agent.filePath,\n mode: agent.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: agent.sharedWith.length > 0,\n sharedWith: agent.sharedWith,\n });\n }\n\n for (const prompt of analysis.constituents.prompts) {\n selectionItems.push({\n name: prompt.name,\n type: 'prompt',\n filePath: prompt.filePath,\n mode: prompt.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: prompt.sharedWith.length > 0,\n sharedWith: prompt.sharedWith,\n });\n }\n\n for (const tool of analysis.constituents.tools) {\n selectionItems.push({\n name: tool.name,\n type: 'tool',\n filePath: tool.filePath,\n mode: tool.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: tool.sharedWith.length > 0,\n sharedWith: tool.sharedWith,\n });\n }\n\n for (const model of analysis.constituents.models) {\n selectionItems.push({\n name: model.name,\n type: 'model',\n filePath: model.filePath,\n mode: model.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: model.sharedWith.length > 0,\n sharedWith: model.sharedWith,\n });\n }\n\n for (const hook of analysis.constituents.hooks) {\n selectionItems.push({\n name: hook.name,\n type: 'hook',\n filePath: hook.filePath,\n mode: hook.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: hook.sharedWith.length > 0,\n sharedWith: hook.sharedWith,\n });\n }\n\n // Show interactive selector unless --no-interactive is specified\n let itemSelections: { name: string; type: string; filePath: string; mode: 'extract' | 'copy' }[] | undefined;\n\n if (!options.noInteractive && process.stdin.isTTY && selectionItems.length > 0) {\n console.log('');\n const selections = await selectItemModes(selectionItems, selectedAgent);\n itemSelections = selections.map(s => ({\n name: s.name,\n type: s.type,\n filePath: s.filePath,\n mode: s.mode,\n }));\n console.log('');\n }\n\n // Determine output directory\n const outputDir = options.output || path.join(rootDir, 'agents', 'packed');\n\n // Execute packing\n logger.info(`Packing to: ${outputDir}`);\n\n const result = await packingService.pack({\n agentName: selectedAgent,\n rootDir,\n outputDir,\n version: options.version || '1.0.0',\n npm: options.npm || false,\n removeOriginals: itemSelections ? false : !options.noRemove, // Let itemSelections handle removal\n packageId: `standardagent-${selectedAgent.replace(/_/g, '-')}`,\n itemSelections,\n });\n\n if (!result.success) {\n logger.error(`Packing failed: ${result.error}`);\n process.exit(1);\n }\n\n // Show result\n console.log('');\n logger.success('Packing complete!');\n console.log(` Package ID: ${result.packageId}`);\n console.log(` Output: ${result.outputPath}`);\n console.log(` Files: ${result.filesCreated.length} created`);\n\n if (result.filesRemoved && result.filesRemoved.length > 0) {\n console.log(` Removed: ${result.filesRemoved.length} original files`);\n }\n\n if (result.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of result.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n if (options.npm) {\n console.log('');\n logger.info('NPM package structure created. To publish:');\n console.log(` cd ${result.outputPath}`);\n console.log(' npm publish');\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../utils/logger.js';\n\ninterface UnpackOptions {\n noSignatures?: boolean;\n}\n\n/**\n * Check if this is a valid Standard Agents project.\n */\nfunction isStandardAgentsProject(): boolean {\n // Check for agents directory\n if (!fs.existsSync('agents')) {\n return false;\n }\n\n // Check for @standardagents/builder dependency\n try {\n const pkgJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n return '@standardagents/builder' in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Unpack a packed agent to the local agents directory.\n */\nexport async function unpack(pkgIdentifier: string | undefined, options: UnpackOptions) {\n logger.info('Unpacking agent...\\n');\n\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of unpacking service\n let UnpackingService: any;\n try {\n const builder = await import('@standardagents/builder/runtime');\n UnpackingService = (builder as any).UnpackingService;\n\n if (!UnpackingService) {\n const packing = await import('@standardagents/builder');\n UnpackingService = (packing as any).UnpackingService;\n }\n } catch (err) {\n logger.error('Failed to load unpacking service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed.');\n process.exit(1);\n }\n\n const unpackingService = new UnpackingService();\n\n // If no package identifier provided, list available packages\n if (!pkgIdentifier) {\n const packages = await unpackingService.listPackages(rootDir);\n\n if (packages.length === 0) {\n logger.info('No packed agents found.');\n logger.info('Pack an agent with: agents pack <agent-name>');\n process.exit(0);\n }\n\n logger.info('Available packed agents:');\n for (const pkg of packages) {\n console.log(` - ${pkg.packageId} (${pkg.version}) [${pkg.source}]`);\n console.log(` Entry: ${pkg.entryAgent}`);\n console.log(` Path: ${pkg.path}`);\n console.log('');\n }\n logger.info('Run: agents unpack <package-id>');\n process.exit(0);\n }\n\n logger.info(`Unpacking: ${pkgIdentifier}`);\n\n // Execute unpacking\n const result = await unpackingService.unpack({\n package: pkgIdentifier,\n rootDir,\n keepSignatures: !options.noSignatures,\n });\n\n if (!result.success) {\n logger.error(`Unpacking failed: ${result.error}`);\n process.exit(1);\n }\n\n // Show result\n console.log('');\n logger.success('Unpacking complete!');\n console.log(` Package: ${result.packageId}`);\n console.log(` Files: ${result.filesCreated.length} created`);\n\n if (result.filesCreated.length > 0) {\n console.log('');\n logger.info('Created files:');\n for (const file of result.filesCreated) {\n const relPath = path.relative(rootDir, file);\n console.log(` - ${relPath}`);\n }\n }\n\n if (result.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of result.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n if (options.noSignatures) {\n console.log('');\n logger.info('Package signatures removed - files are fully editable.');\n } else {\n console.log('');\n logger.info('Package signatures preserved - files are editable but marked as packed.');\n }\n}\n\n/**\n * List all packed agents.\n */\nexport async function listPacked() {\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of unpacking service\n let UnpackingService: any;\n try {\n const builder = await import('@standardagents/builder/runtime');\n UnpackingService = (builder as any).UnpackingService;\n\n if (!UnpackingService) {\n const packing = await import('@standardagents/builder');\n UnpackingService = (packing as any).UnpackingService;\n }\n } catch (err) {\n logger.error('Failed to load unpacking service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed.');\n process.exit(1);\n }\n\n const unpackingService = new UnpackingService();\n const packages = await unpackingService.listPackages(rootDir);\n\n if (packages.length === 0) {\n logger.info('No packed agents found.');\n logger.info('Pack an agent with: agents pack <agent-name>');\n return;\n }\n\n logger.info('Discovered packed agents:\\n');\n\n for (const pkg of packages) {\n console.log(`${pkg.packageId} (${pkg.version})`);\n console.log(` Source: ${pkg.source}`);\n console.log(` Entry: ${pkg.entryAgent}`);\n console.log(` Path: ${pkg.path}`);\n console.log('');\n }\n}\n","import { Command } from 'commander';\nimport { init } from './commands/init.js';\nimport { scaffold } from './commands/scaffold.js';\nimport { initChat } from './commands/init-chat.js';\nimport { pack } from './commands/pack.js';\nimport { unpack, listPacked } from './commands/unpack.js';\n\n// Injected at build time by tsup (see tsup.config.ts)\ndeclare const __CLI_VERSION__: string;\n\nconst program = new Command();\n\nprogram\n .name('agents')\n .description('CLI tool for Standard Agents / AgentBuilder')\n .version(__CLI_VERSION__);\n\nprogram\n .command('init [project-name]')\n .description('Create a new Standard Agents project (runs create vite, then scaffold)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--template <template>', 'Vite template to use', 'vanilla-ts')\n .action(init);\n\nprogram\n .command('scaffold')\n .description('Add Standard Agents to an existing Vite project')\n .option('--force', 'Overwrite existing configuration')\n .action(scaffold);\n\nprogram\n .command('init-chat [project-name]')\n .description('Scaffold a frontend chat application')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--framework <framework>', 'Framework to use (vite or nextjs)')\n .action(initChat);\n\nprogram\n .command('pack [agent-name]')\n .description('Pack an agent with all its dependencies')\n .option('--output <dir>', 'Output directory (default: agents/packed)')\n .option('--npm', 'Generate npm-ready package structure')\n .option('--version <version>', 'Package version (default: 1.0.0)')\n .option('--no-remove', 'Keep original files after packing')\n .option('--no-interactive', 'Skip interactive item mode selector')\n .action(pack);\n\nprogram\n .command('unpack [package]')\n .description('Unpack a packed agent to the local agents directory')\n .option('--no-signatures', 'Remove package signatures (fully editable)')\n .action(unpack);\n\nprogram\n .command('list-packed')\n .description('List all discovered packed agents')\n .action(listPacked);\n\nprogram.parse();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/logger.ts","../src/templates/root.ts","../src/templates/models.ts","../src/templates/prompts.ts","../src/templates/agents.ts","../src/templates/tools.ts","../src/templates/hooks.ts","../src/templates/api.ts","../src/commands/scaffold.ts","../src/commands/init.ts","../src/commands/init-chat.ts","../src/commands/pack.ts","../src/commands/unpack.ts","../src/commands/deploy.ts","../src/index.ts"],"names":["path","fs","prompt","readline","runCommand","spawn","detectPackageManager","selectPackageManager","isStandardAgentsProject","chalk"],"mappings":";;;;;;;;;;;;;;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,QAAG,GAAG,OAAO,CAAA;AAAA,EACvC,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,OAAA,KAAoB;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,QAAG,GAAG,OAAO,CAAA;AAAA,EACrC,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,QAAG,GAAG,OAAO,CAAA;AAAA,EACxC,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,OAAA,KAAoB;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,QAAG,GAAG,OAAO,CAAA;AAAA,EACtC,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,OAAA,KAAoB;AACxB,IAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,EACrB;AACF,CAAA;;;AClBO,IAAM,cAAA,GAAiB,CAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACAvB,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,iBAAA,GAAoB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACA1B,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAxB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAxB,IAAM,aAAA,GAAgB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACqB7B,IAAM,iBAAA,GAAoB,CAAC,IAAA,KAAiB;AAC1C,EAAA,MAAM,KAAA,GAAA,qBAAY,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACnD,EAAA,OAAO,CAAA;AAAA;AAAA,WAAA,EAEI,IAAI,CAAA;AAAA;AAAA,yBAAA,EAEU,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAmChC,CAAA;AAGA,IAAM,SAAA,GAAY,CAAA;;AAAA;AAAA,CAAA;AAKlB,IAAM,gBAAA,GAAmB,CAAA;;AAAA;AAAA,CAAA;AAMzB,IAAM,YAAA,GAAe,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAerB,SAAS,eAAe,GAAA,EAAqB;AAC3C,EAAA,MAAM,eAAA,GAAkBA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AACrD,EAAA,IAAIC,GAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAC,CAAA;AAChE,MAAA,IAAI,IAAI,IAAA,EAAM;AACZ,QAAA,OAAO,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAAA,MACzC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAOD,KAAA,CAAK,SAAS,GAAG,CAAA;AAC1B;AAEA,SAAS,eAAe,GAAA,EAA4B;AAClD,EAAA,MAAM,UAAA,GAAa,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,mBAAmB,iBAAiB,CAAA;AAC5F,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,UAAA,GAAaA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA;AAC3C,IAAA,IAAIC,GAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,mBAAmB,GAAA,EAA4B;AACtD,EAAA,MAAM,UAAA,GAAa,CAAC,gBAAA,EAAkB,eAAe,CAAA;AACrD,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,UAAA,GAAaD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA;AAC3C,IAAA,IAAIC,GAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,gBAAA,CAAiB,YAAoB,KAAA,EAAkC;AACpF,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,UAAU,CAAA;AAGrC,IAAA,MAAM,IAAA,GAAOA,GAAA,CAAG,YAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAChD,IAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA,CAAS,yBAAyB,CAAA,IAAK,IAAA,CAAK,SAAS,cAAc,CAAA;AAC9F,IAAA,MAAM,kBAAkB,IAAA,CAAK,QAAA,CAAS,yBAAyB,CAAA,IAAK,IAAA,CAAK,SAAS,gBAAgB,CAAA;AAElG,IAAA,IAAI,aAAA,IAAiB,eAAA,IAAmB,CAAC,KAAA,EAAO;AAC9C,MAAA,MAAA,CAAO,KAAK,sDAAsD,CAAA;AAClE,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,mBAAmB,KAAA,EAAO;AAC7B,MAAA,aAAA,CAAc,GAAA,EAAK;AAAA,QACjB,IAAA,EAAM,yBAAA;AAAA,QACN,QAAA,EAAU,cAAA;AAAA,QACV,WAAA,EAAa,cAAA;AAAA,QACb,OAAA,EAAS,EAAE,UAAA,EAAY,GAAA;AAAI,OAC5B,CAAA;AACD,MAAA,MAAA,CAAO,QAAQ,0CAA0C,CAAA;AAAA,IAC3D;AAGA,IAAA,IAAI,CAAC,iBAAiB,KAAA,EAAO;AAC3B,MAAA,aAAA,CAAc,GAAA,EAAK;AAAA,QACjB,IAAA,EAAM,yBAAA;AAAA,QACN,QAAA,EAAU,YAAA;AAAA,QACV,WAAA,EAAa;AAAA,OACd,CAAA;AACD,MAAA,MAAA,CAAO,QAAQ,wCAAwC,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,SAAA,CAAU,KAAK,UAAU,CAAA;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,4CAAA,EAA+C,KAAK,CAAA,CAAE,CAAA;AACrE,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,2DAA2D,CAAA;AACtE,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,CAAA,wDAAA,CAA0D,CAAA;AACrE,IAAA,MAAA,CAAO,IAAI,CAAA,sDAAA,CAAwD,CAAA;AACnE,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,CAAA,4DAAA,CAA8D,CAAA;AACzE,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,4BAAA,CAA6B,GAAA,EAAa,WAAA,EAAqB,KAAA,EAAyB;AAC/F,EAAA,MAAM,cAAA,GAAiB,mBAAmB,GAAG,CAAA;AAE7C,EAAA,IAAI,cAAA,IAAkB,CAAC,KAAA,EAAO;AAE5B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAOA,GAAA,CAAG,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AACpD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAI,CAAA;AAGzB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,eAAA,EAAiB,QAAA,EAAU,IAAA;AAAA,QACpD,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,KAAS,sBAAA,IAA0B,EAAE,IAAA,KAAS;AAAA,OAC9D;AAEA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,MAAA,CAAO,KAAK,uDAAuD,CAAA;AACnE,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,MAAA,GAAS,IAAA;AAGb,MAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,CAAC,iBAAiB,CAAA,EAAG;AAAA,UAChD,QAAA,EAAU;AAAA,YACR,EAAE,IAAA,EAAM,sBAAA,EAAwB,UAAA,EAAY,eAAA,EAAgB;AAAA,YAC5D,EAAE,IAAA,EAAM,eAAA,EAAiB,UAAA,EAAY,qBAAA;AAAsB;AAC7D,SACF,EAAG,EAAE,CAAA;AACL,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACnC,CAAA,MAAO;AAEL,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,eAAA,CAAgB,QAAA,IAAY,EAAC;AACrD,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,EAAE,IAAA,EAAM,sBAAA,EAAwB,UAAA,EAAY,eAAA,EAAgB;AAAA,UAC5D,EAAE,IAAA,EAAM,eAAA,EAAiB,UAAA,EAAY,qBAAA;AAAsB,SAC7D;AACA,QAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,EAAQ,CAAC,mBAAmB,UAAU,CAAA,EAAG,QAAA,EAAU,EAAE,CAAA;AAC1E,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACnC;AAGA,MAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,CAAC,YAAY,CAAA,EAAG;AAAA,UAC3C,EAAE,GAAA,EAAK,IAAA,EAAM,kBAAA,EAAoB,CAAC,eAAe,CAAA,EAAE;AAAA,UACnD,EAAE,GAAA,EAAK,IAAA,EAAM,kBAAA,EAAoB,CAAC,qBAAqB,CAAA;AAAE,SAC3D,EAAG,EAAE,CAAA;AACL,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACnC;AAGA,MAAA,IAAI,CAAC,OAAO,IAAA,IAAQ,CAAC,OAAO,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,QAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,EAAQ,CAAC,MAAM,CAAA,EAAG,iBAAA,EAAmB,EAAE,CAAA;AAC5D,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACnC;AAGA,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,CAAC,QAAQ,CAAA,EAAG;AAAA,UACvC,SAAA,EAAW,aAAA;AAAA,UACX,kBAAA,EAAoB,yBAAA;AAAA,UACpB,OAAA,EAAS,QAAA;AAAA,UACT,gBAAA,EAAkB,CAAC,KAAK;AAAA,SAC1B,EAAG,EAAE,CAAA;AACL,QAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,MACnC;AAEA,MAAAA,GAAA,CAAG,aAAA,CAAc,cAAA,EAAgB,MAAA,EAAQ,OAAO,CAAA;AAChD,MAAA,MAAA,CAAO,QAAQ,2DAA2D,CAAA;AAC1E,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,kCAAA,EAAqC,KAAK,CAAA,CAAE,CAAA;AAC3D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,MAAM,YAAA,GAAeD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,gBAAgB,CAAA;AACpD,EAAA,MAAM,gBAAgB,WAAA,CAAY,WAAA,EAAY,CAAE,OAAA,CAAQ,eAAe,GAAG,CAAA;AAC1E,EAAAC,GAAA,CAAG,aAAA,CAAc,YAAA,EAAc,iBAAA,CAAkB,aAAa,GAAG,OAAO,CAAA;AACxE,EAAA,MAAA,CAAO,QAAQ,wBAAwB,CAAA;AACvC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,oBAAoB,GAAA,EAAqB;AAEhD,EAAA,MAAM,cAAA,GAAiB,mBAAmB,GAAG,CAAA;AAC7C,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAOA,GAAA,CAAG,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AACpD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAI,CAAA;AACzB,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,OAAOD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAA,CAAO,IAAI,CAAA;AAAA,MACnC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAGA,EAAA,OAAOA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,UAAU,CAAA;AAC5C;AAEA,eAAe,yBAAA,CAA0B,KAAa,KAAA,EAAkC;AACtF,EAAA,MAAM,SAAA,GAAY,oBAAoB,GAAG,CAAA;AACzC,EAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAGvC,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,IAAAA,GAAA,CAAG,SAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,MAAA,CAAO,QAAQ,CAAA,QAAA,EAAWD,KAAA,CAAK,SAAS,GAAA,EAAK,QAAQ,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,EACpE;AAGA,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,IAAAA,GAAA,CAAG,aAAA,CAAc,SAAA,EAAW,YAAA,EAAc,OAAO,CAAA;AACjD,IAAA,MAAA,CAAO,QAAQ,CAAA,QAAA,EAAWD,KAAA,CAAK,SAAS,GAAA,EAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAUC,GAAA,CAAG,YAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAGlD,EAAA,MAAM,YAAY,OAAA,CAAQ,QAAA,CAAS,iCAAiC,CAAA,IAAK,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAClG,EAAA,MAAM,oBAAoB,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA,IAAK,OAAA,CAAQ,SAAS,qBAAqB,CAAA;AAErG,EAAA,IAAI,SAAA,IAAa,iBAAA,IAAqB,CAAC,KAAA,EAAO;AAC5C,IAAA,MAAA,CAAO,KAAK,CAAA,EAAGD,KAAA,CAAK,SAAS,GAAA,EAAK,SAAS,CAAC,CAAA,mBAAA,CAAqB,CAAA;AACjE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,SAAS,CAAA;AAGpC,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,iCAAiC,KAAK,KAAA,EAAO;AACjE,MAAA,GAAA,CAAI,QAAQ,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,iCAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,oBAAoB,KAAK,KAAA,EAAO;AACpD,MAAA,GAAA,CAAI,QAAQ,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,0BAA0B,KAAK,KAAA,EAAO;AAC1D,MAAA,GAAA,CAAI,QAAQ,IAAA,CAAK;AAAA,QACf,IAAA,EAAM,wBAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAGA,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,YAAA,CAAa,GAAG,CAAA;AAGjC,IAAA,IAAI,KAAA,IAAS,CAAC,SAAA,EAAW;AACvB,MAAAC,GAAA,CAAG,aAAA,CAAc,SAAA,EAAW,YAAA,EAAc,OAAO,CAAA;AACjD,MAAA,MAAA,CAAO,QAAQ,CAAA,QAAA,EAAWD,KAAA,CAAK,SAAS,GAAA,EAAK,SAAS,CAAC,CAAA,4BAAA,CAA8B,CAAA;AAAA,IACvF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAEd,IAAA,IAAI,KAAA,EAAO;AACT,MAAAC,GAAA,CAAG,aAAA,CAAc,SAAA,EAAW,YAAA,EAAc,OAAO,CAAA;AACjD,MAAA,MAAA,CAAO,QAAQ,CAAA,QAAA,EAAWD,KAAA,CAAK,SAAS,GAAA,EAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AACzD,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAA,CAAO,QAAQ,CAAA,+BAAA,EAAkCA,KAAA,CAAK,SAAS,GAAA,EAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AAChF,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,iDAAiD,CAAA;AAC5D,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,CAAA,0DAAA,CAA4D,CAAA;AACvE,IAAA,MAAA,CAAO,IAAI,CAAA,+CAAA,CAAiD,CAAA;AAC5D,IAAA,MAAA,CAAO,IAAI,CAAA,2DAAA,CAA6D,CAAA;AACxE,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,6BAA6B,CAAA;AACxC,IAAA,MAAA,CAAO,IAAI,oCAAoC,CAAA;AAC/C,IAAA,MAAA,CAAO,IAAI,uBAAuB,CAAA;AAClC,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,8BAA8B,CAAA;AACzC,IAAA,MAAA,CAAO,IAAI,iDAAiD,CAAA;AAC5D,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,GAAA,EAAmB;AAC/C,EAAA,MAAM,SAAA,GAAYA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAEzC,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,IAAAA,GAAA,CAAG,SAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EAC7C;AAGA,EAAA,MAAM,UAAA,GAAaD,KAAA,CAAK,IAAA,CAAK,SAAA,EAAW,WAAW,CAAA;AACnD,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAAA,GAAA,CAAG,aAAA,CAAc,UAAA,EAAY,SAAA,EAAW,OAAO,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAQ,0BAA0B,CAAA;AAAA,EAC3C,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,KAAK,iCAAiC,CAAA;AAAA,EAC/C;AAGA,EAAA,MAAM,gBAAA,GAAmBD,KAAA,CAAK,IAAA,CAAK,SAAA,EAAW,iBAAiB,CAAA;AAC/D,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACpC,IAAAA,GAAA,CAAG,aAAA,CAAc,gBAAA,EAAkB,gBAAA,EAAkB,OAAO,CAAA;AAC5D,IAAA,MAAA,CAAO,QAAQ,gCAAgC,CAAA;AAAA,EACjD,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,KAAK,uCAAuC,CAAA;AAAA,EACrD;AACF;AAEA,SAAS,yBAAyB,GAAA,EAAmB;AACnD,EAAkBD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ;AAGzC,EAAA,MAAM,WAAA,GAAcA,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,WAAW,CAAA;AAC9C,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,IAAAA,GAAA,CAAG,aAAA,CAAc,WAAA,EAAa,cAAA,EAAgB,OAAO,CAAA;AACrD,IAAA,MAAA,CAAO,QAAQ,mBAAmB,CAAA;AAAA,EACpC;AAGA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,EAAE,IAAA,EAAM,eAAA,EAAiB,GAAA,EAAK,gBAAA,EAAiB;AAAA,IAC/C,EAAE,IAAA,EAAM,gBAAA,EAAkB,GAAA,EAAK,iBAAA,EAAkB;AAAA,IACjD,EAAE,IAAA,EAAM,eAAA,EAAiB,GAAA,EAAK,gBAAA,EAAiB;AAAA,IAC/C,EAAE,IAAA,EAAM,cAAA,EAAgB,GAAA,EAAK,eAAA,EAAgB;AAAA,IAC7C,EAAE,IAAA,EAAM,cAAA,EAAgB,GAAA,EAAK,eAAA,EAAgB;AAAA,IAC7C,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAK,aAAA;AAAc,GAC3C;AAEA,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,MAAM,OAAA,GAAUD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,IAAI,CAAA;AACvC,IAAA,MAAM,OAAA,GAAUA,KAAA,CAAK,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAG9C,IAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAAA,GAAA,CAAG,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,QAAA,EAAW,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IACtC;AAGA,IAAA,IAAI,CAACA,GAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAAA,GAAA,CAAG,aAAA,CAAc,OAAA,EAAS,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA;AAC1C,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,QAAA,EAAW,GAAA,CAAI,IAAI,CAAA,UAAA,CAAY,CAAA;AAAA,IAChD;AAAA,EACF;AACF;AAEA,SAAS,eAAe,GAAA,EAAmB;AACzC,EAAA,MAAM,YAAA,GAAeD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,eAAe,CAAA;AAEnD,EAAA,IAAI,CAACC,GAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,KAAK,2DAA2D,CAAA;AACvE,IAAA;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAOA,GAAA,CAAG,YAAA,CAAa,YAAA,EAAc,OAAO,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAI,CAAA;AACzB,IAAA,IAAI,MAAA,GAAS,IAAA;AAGb,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,eAAA,EAAiB,KAAA,IAAS,EAAC;AAChD,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,6BAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,MACA,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,KAAA,CAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AAEhC,IAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,MAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAA,EAAO,GAAG,QAAQ,CAAA;AACvC,MAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,EAAQ,CAAC,mBAAmB,OAAO,CAAA,EAAG,QAAA,EAAU,EAAE,CAAA;AACvE,MAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IACnC;AAGA,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,IAAA,MAAM,WAAA,GAAc,CAAC,QAAA,EAAU,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AAEzE,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,WAAA,GAAc,CAAC,GAAG,OAAA,EAAS,GAAG,WAAW,CAAA;AAC/C,MAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,EAAQ,CAAC,SAAS,CAAA,EAAG,WAAA,EAAa,EAAE,CAAA;AACzD,MAAA,MAAA,GAAS,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACjD,MAAAA,GAAA,CAAG,aAAA,CAAc,YAAA,EAAc,MAAA,EAAQ,OAAO,CAAA;AAC9C,MAAA,MAAA,CAAO,QAAQ,kDAAkD,CAAA;AAAA,IACnE,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,QAAQ,oEAAoE,CAAA;AAAA,EACrF;AACF;AAEA,SAAS,oBAAoB,GAAA,EAAmB;AAE9C,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,aAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAO,QAAQ,CAAA;AAErC,EAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,IAAA,MAAM,QAAA,GAAWD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AACpC,IAAA,IAAIC,GAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,IAAI;AACF,QAAAA,GAAA,CAAG,WAAW,QAAQ,CAAA;AAAA,MACxB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,IAAA,MAAM,OAAA,GAAUD,KAAA,CAAK,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA;AAClC,IAAA,IAAIC,GAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQA,GAAA,CAAG,WAAA,CAAY,OAAO,CAAA;AACpC,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAAA,GAAA,CAAG,UAAU,OAAO,CAAA;AAAA,QACtB;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,QAAA,CAAS,OAAA,GAA2B,EAAC,EAAG;AAC5D,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,EAAA,MAAM,WAAA,GAAc,eAAe,GAAG,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,KAAA;AAE/B,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,MAAM,cAAA,GAAiB,eAAe,GAAG,CAAA;AACzC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,gBAAA,CAAiB,gBAAgB,KAAK,CAAA;AAAA,EAC9C,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,QAAQ,mFAAmF,CAAA;AAAA,EACpG;AAGA,EAAA,4BAAA,CAA6B,GAAA,EAAK,aAAa,KAAK,CAAA;AAGpD,EAAA,MAAM,yBAAA,CAA0B,KAAK,KAAK,CAAA;AAG1C,EAAA,oBAAA,CAAqB,GAAG,CAAA;AAGxB,EAAA,wBAAA,CAAyB,GAAG,CAAA;AAG5B,EAAA,cAAA,CAAe,GAAG,CAAA;AAGlB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,EACzB;AAEA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,QAAQ,uCAAuC,CAAA;AACtD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,IAAI,yBAAyB,CAAA;AACpC,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,IAAI,wDAAwD,CAAA;AACnE,EAAA,MAAA,CAAO,IAAI,WAAW,CAAA;AACtB,EAAA,MAAA,CAAO,IAAI,uEAAwD,CAAA;AACnE,EAAA,MAAA,CAAO,IAAI,2EAA4D,CAAA;AACvE,EAAA,MAAA,CAAO,IAAI,8DAA+C,CAAA;AAC1D,EAAA,MAAA,CAAO,IAAI,+DAAgD,CAAA;AAC3D,EAAA,MAAA,CAAO,IAAI,iEAAkD,CAAA;AAC7D,EAAA,MAAA,CAAO,IAAI,yDAA0C,CAAA;AACrD,EAAA,MAAA,CAAO,IAAI,4DAA6C,CAAA;AACxD,EAAA,MAAA,CAAO,IAAI,iEAAkD,CAAA;AAC7D,EAAA,MAAA,CAAO,IAAI,WAAW,CAAA;AACtB,EAAA,MAAA,CAAO,IAAI,0EAA2D,CAAA;AACtE,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACf;;;AC3jBA,eAAe,OAAO,QAAA,EAAmC;AACvD,EAAA,MAAM,EAAA,GAAK,SAAS,eAAA,CAAgB;AAAA,IAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,QAAQ,OAAA,CAAQ;AAAA,GACjB,CAAA;AAED,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,CAAC,MAAA,KAAW;AAChC,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEA,eAAe,eAAe,QAAA,EAAmC;AAC/D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,MAAA,CAAO,MAAM,QAAQ,CAAA;AAErB,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,IAAI,QAAA,GAAW,EAAA;AAEf,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC/B,MAAA,MAAM,CAAA,GAAI,KAAK,QAAA,EAAS;AAExB,MAAA,QAAQ,CAAA;AAAG,QACT,KAAK,IAAA;AAAA,QACL,KAAK,IAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,UAAA,KAAA,CAAM,KAAA,EAAM;AACZ,UAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,UAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,UAAA;AAAA,QACF,KAAK,GAAA;AACH,UAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACd,UAAA;AAAA,QACF,KAAK,MAAA;AAAA;AAAA,QACL,KAAK,IAAA;AACH,UAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,YAAA,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC/B,YAAA,MAAA,CAAO,UAAU,CAAC,CAAA;AAClB,YAAA,MAAA,CAAO,SAAS,CAAC,CAAA;AACjB,YAAA,MAAA,CAAO,MAAM,QAAA,GAAW,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,UACrD;AACA,UAAA;AAAA,QACF;AACE,UAAA,QAAA,IAAY,CAAA;AACZ,UAAA,MAAA,CAAO,MAAM,GAAG,CAAA;AAChB,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAEA,SAAS,UAAA,CAAW,OAAA,EAAiB,IAAA,EAAgB,GAAA,EAA4B;AAC/E,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAGtC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM;AAAA,MACjC,GAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,EAAE,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AACH;AAEA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,OAAO,GAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,eAAe,GAAG,CAAA,CAC1B,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC3B;AAEA,SAAS,oBAAA,GAAwD;AAE/D,EAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,qBAAA;AAC9B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,EACxC;AAGA,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,EAAG,OAAO,MAAA;AAC5C,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,MAAA;AACvC,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,KAAA;AACvC,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,mBAAmB,CAAA,EAAG,OAAO,KAAA;AAE/C,EAAA,OAAO,KAAA;AACT;AAYA,SAAS,iBAAA,GAA4B;AAEnC,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,wBAAA,KAA6B,GAAA,EAAK;AAChD,IAAA,OAAO,aAAA;AAAA,EACT;AACA,EAAA,OAAO,qBAAA;AACT;AAEA,eAAe,qBAAqB,QAAA,EAAqF;AACvH,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA;AAE9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,IAAI,aAAA,GAAgB,aAAA;AAEpB,IAAA,MAAM,gBAAgB,MAAM;AAE1B,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAGxB,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1C,MAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAEtB,MAAA,MAAA,CAAO,MAAM,4DAA4D,CAAA;AACzE,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,aAAA,GAAgB,EAAA;AACrD,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,QAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,QAAA,MAAA,CAAO,KAAA,CAAM,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,EAAG,GAAG,GAAG,MAAM,CAAA;AAAA,CAAW,CAAA;AAAA,MAC/D,CAAC,CAAA;AAAA,IACH,CAAA;AAGA,IAAA,MAAA,CAAO,MAAM,4DAA4D,CAAA;AACzE,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,aAAA,GAAgB,EAAA;AACrD,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,EAAG,GAAG,GAAG,MAAM,CAAA;AAAA,CAAW,CAAA;AAAA,IAC/D,CAAC,CAAA;AAED,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB;AAE9B,MAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AACnC,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AAC/D,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AAC1C,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,KAAK,OAAA,CAAQ,MAAA;AAC9C,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,MAChC,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAQ;AACzB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAEA,eAAsB,IAAA,CAAK,cAAA,EAAyB,OAAA,GAAuB,EAAC,EAAG;AAC7E,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,EAAA,MAAM,aAAa,oBAAA,EAAqB;AACxC,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,YAAA;AAErC,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,2CAA2C,CAAA;AACvD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,EAAA,GAAK,UAAA;AAAA,EACP,CAAA,MAAO;AACL,IAAA,EAAA,GAAK,MAAM,qBAAqB,UAAU,CAAA;AAC1C,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,WAAA,GAAc,cAAA;AAElB,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,EAAK;AAChC,IAAA,WAAA,GAAc,MAAM,OAAO,gBAAgB,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAA,CAAO,MAAM,0BAA0B,CAAA;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,WAAA,GAAcD,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,WAAW,CAAA;AAG9C,EAAA,IAAIC,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,WAAA,EAAc,WAAW,CAAA,gBAAA,CAAkB,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,mCAAA,EAAsC,QAAQ,CAAA,YAAA,CAAc,CAAA;AACxE,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,EAAA,IAAI;AAIF,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,UAAA;AAEJ,IAAA,QAAQ,EAAA;AAAI,MACV,KAAK,MAAA;AACH,QAAA,SAAA,GAAY,MAAA;AACZ,QAAA,UAAA,GAAa,CAAC,QAAA,EAAU,aAAA,EAAe,WAAA,EAAa,YAAA,EAAc,UAAU,OAAO,CAAA;AACnF,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,SAAA,GAAY,MAAA;AACZ,QAAA,UAAA,GAAa,CAAC,QAAA,EAAU,aAAA,EAAe,WAAA,EAAa,YAAA,EAAc,UAAU,OAAO,CAAA;AACnF,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,UAAA,GAAa,CAAC,QAAA,EAAU,aAAA,EAAe,WAAA,EAAa,YAAA,EAAc,UAAU,OAAO,CAAA;AACnF,QAAA;AAAA,MACF;AACE,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,UAAA,GAAa,CAAC,QAAA,EAAU,aAAA,EAAe,aAAa,IAAA,EAAM,YAAA,EAAc,UAAU,OAAO,CAAA;AAAA;AAG7F,IAAA,MAAM,UAAA,CAAW,SAAA,EAAW,UAAA,EAAY,GAAG,CAAA;AAI3C,IAAA,MAAM,sBAAA,GAAyBD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,cAAc,CAAA;AACpE,IAAA,IAAI,CAACC,GAAAA,CAAG,UAAA,CAAW,sBAAsB,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,IACxE;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,MAAM,+BAA+B,CAAA;AAC5C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,cAAA,GAAiBD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,gBAAgB,CAAA;AAC9D,EAAA,IAAI,CAACC,GAAAA,CAAG,UAAA,CAAW,cAAc,CAAA,EAAG;AAClC,IAAA,MAAM,iBAAA,GAAoB,CAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAM1B,IAAAA,GAAAA,CAAG,aAAA,CAAc,cAAA,EAAgB,iBAAA,EAAmB,OAAO,CAAA;AAC3D,IAAA,MAAA,CAAO,QAAQ,wBAAwB,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,eAAA,GAAkBD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,cAAc,CAAA;AAC7D,EAAA,IAAIC,GAAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAClC,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAC,CAAA;AACxE,IAAA,MAAM,SAAA,GAAY,YAAY,WAAW,CAAA;AACzC,IAAA,IAAI,WAAA,CAAY,SAAS,SAAA,EAAW;AAClC,MAAA,WAAA,CAAY,IAAA,GAAO,SAAA;AACnB,MAAAA,GAAAA,CAAG,aAAA,CAAc,eAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,aAAa,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,EAAM,OAAO,CAAA;AAAA,IACxF;AAAA,EACF;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,8CAA8C,CAAA;AAC1D,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,MAAM,gBAAgB,MAAA,CAAO,WAAA,CAAY,EAAE,CAAA,CAAE,SAAS,KAAK,CAAA;AAG3D,EAAA,IAAI,aAAA,GAAgB,EAAA;AACpB,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI,aAAA,GAAgB,EAAA;AAEpB,EAAA,IAAI,CAAC,QAAQ,GAAA,EAAK;AAChB,IAAA,MAAA,CAAO,IAAI,sDAAsD,CAAA;AACjE,IAAA,MAAA,CAAO,IAAI,6CAA6C,CAAA;AACxD,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,IAAA,aAAA,GAAgB,MAAM,OAAO,sDAAsD,CAAA;AACnF,IAAA,SAAA,GAAY,MAAM,OAAO,kDAAkD,CAAA;AAE3E,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,IAAA,MAAA,CAAO,IAAI,wDAAwD,CAAA;AACnE,IAAA,MAAA,CAAO,IAAI,kDAAkD,CAAA;AAC7D,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,aAAA,GAAgB,MAAM,eAAe,4BAA4B,CAAA;AAEjE,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,aAAA,GAAgB,OAAA;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,eAAA,GAAkB,MAAM,cAAA,CAAe,oBAAoB,CAAA;AAEjE,MAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,QAAQ,2CAA2C,CAAA;AAC1D,QAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,QAAA,aAAA,GAAgB,EAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,aAAA,GAAgB,OAAA;AAAA,EAClB;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,oDAAoD,CAAA;AAChE,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,EAAA,KAAO,KAAA,GAAQ,SAAA,GAAY,KAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,EAAA,KAAO,KAAA,GAAQ,YAAA,GAAe,IAAA;AAC9C,IAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAGzC,IAAA,MAAM,WAAW,EAAA,EAAI;AAAA,MACnB,UAAA;AAAA,MAAY,OAAA;AAAA,MACZ,yBAAA;AAAA,MACA;AAAA,OACC,WAAW,CAAA;AAMd,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,2BAA2B,cAAc,CAAA,CAAA;AAAA,MACzC,wBAAwB,cAAc,CAAA,CAAA;AAAA,MACtC,uBAAuB,cAAc,CAAA,CAAA;AAAA,MACrC;AAAA,KACF;AAGA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,uBAAA,EAA0B,cAAc,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,2BAAA,EAA8B,cAAc,CAAA,CAAE,CAAA;AAAA,IAC1D;AAGA,IAAA,MAAM,WAAW,EAAA,EAAI,CAAC,YAAY,GAAG,IAAI,GAAG,WAAW,CAAA;AAAA,EACzD,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,MAAM,gCAAgC,CAAA;AAC7C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AACpD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,OAAA,CAAQ,MAAM,WAAW,CAAA;AAEzB,EAAA,MAAM,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAG9B,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,sCAAsC,CAAA;AAClD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,MAAM,YAAA,GAAyB;AAAA,IAC7B,yCAAA;AAAA,IACA,yDAAA;AAAA,IACA,8CAAA;AAAA,IACA,EAAA;AAAA,IACA,mDAAA;AAAA,IACA,kBAAkB,aAAa,CAAA,CAAA;AAAA,IAC/B,EAAA;AAAA,IACA,mDAAA;AAAA,IACA,wBAAwB,aAAa,CAAA,CAAA;AAAA,IACrC,EAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,YAAA,CAAa,IAAA,CAAK,CAAA,mBAAA,EAAsB,aAAa,CAAA,CAAE,CAAA;AAAA,EACzD,CAAA,MAAO;AACL,IAAA,YAAA,CAAa,KAAK,0CAA0C,CAAA;AAAA,EAC9D;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,YAAA,CAAa,IAAA,CAAK,CAAA,eAAA,EAAkB,SAAS,CAAA,CAAE,CAAA;AAAA,EACjD,CAAA,MAAO;AACL,IAAA,YAAA,CAAa,KAAK,kCAAkC,CAAA;AAAA,EACtD;AAEA,EAAA,YAAA,CAAa,KAAK,EAAE,CAAA;AAEpB,EAAA,MAAM,WAAA,GAAcD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,WAAW,CAAA;AACtD,EAAAC,IAAG,aAAA,CAAc,WAAA,EAAa,aAAa,IAAA,CAAK,IAAI,GAAG,OAAO,CAAA;AAC9D,EAAA,MAAA,CAAO,QAAQ,uCAAuC,CAAA;AAGtD,EAAA,MAAM,aAAA,GAAgBD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,YAAY,CAAA;AACzD,EAAA,IAAIC,GAAAA,CAAG,UAAA,CAAW,aAAa,CAAA,EAAG;AAChC,IAAA,MAAM,gBAAA,GAAmBA,GAAAA,CAAG,YAAA,CAAa,aAAA,EAAe,OAAO,CAAA;AAC/D,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3C,MAAAA,GAAAA,CAAG,cAAA,CAAe,aAAA,EAAe,8CAA8C,CAAA;AAC/E,MAAA,MAAA,CAAO,QAAQ,+BAA+B,CAAA;AAAA,IAChD;AAAA,EACF;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,wCAAwC,CAAA;AACpD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,EAAA,IAAI;AACF,IAAA,MAAM,WAAW,KAAA,EAAO,CAAC,UAAA,EAAY,OAAO,GAAG,WAAW,CAAA;AAAA,EAC5D,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,QAAQ,4EAA4E,CAAA;AAAA,EAC7F;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,QAAQ,+BAA+B,CAAA;AAC9C,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,IAAI,aAAa,CAAA;AACxB,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAE,CAAA;AAChC,EAAA,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,EAAA,KAAO,KAAA,GAAQ,SAAA,GAAY,EAAE,CAAA,IAAA,CAAM,CAAA;AACnD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,IAAI,6DAA6D,CAAA;AAC1E;AC3dA,SAAS,sBAAA,GAAiC;AACxC,EAAA,IAAI;AACF,IAAA,MAAM,YAAYD,KAAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAE7D,IAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,iBAAiB,CAAA;AACzD,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMC,IAAG,YAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACxD,IAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AAEpB,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AACpD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO,gBAAgB,CAAC,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAI,OAAO,CAAA,CAAA;AAAA,EACpB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAKA,SAAS,gBAAA,GAA2B;AAClC,EAAA,MAAM,YAAYD,KAAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAE7D,EAAA,OAAOA,KAAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,SAAS,CAAA;AAC1C;AAEA,eAAeE,QAAO,QAAA,EAAmC;AACvD,EAAA,MAAM,EAAA,GAAKC,SAAS,eAAA,CAAgB;AAAA,IAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,QAAQ,OAAA,CAAQ;AAAA,GACjB,CAAA;AAED,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,CAAC,MAAA,KAAW;AAChC,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAyEA,SAASC,WAAAA,CAAW,OAAA,EAAiB,IAAA,EAAgB,GAAA,EAA4B;AAC/E,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,KAAA,GAAQC,KAAAA,CAAM,OAAA,EAAS,IAAA,EAAM;AAAA,MACjC,GAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAI,EAAE,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,SAAS,MAAM,CAAA;AAAA,EAC1B,CAAC,CAAA;AACH;AAEA,SAASC,qBAAAA,GAAuC;AAC9C,EAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,qBAAA;AAC9B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,EACxC;AAEA,EAAA,IAAIL,GAAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,EAAG,OAAO,MAAA;AAC5C,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,MAAA;AACvC,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,KAAA;AACvC,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,mBAAmB,CAAA,EAAG,OAAO,KAAA;AAE/C,EAAA,OAAO,KAAA;AACT;AAEA,eAAeM,sBAAqB,QAAA,EAAmD;AACrF,EAAA,MAAM,OAAA,GAA4B,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA;AAE9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,IAAI,aAAA,GAAgB,aAAA;AAEpB,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AACxB,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1C,MAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAEtB,MAAA,MAAA,CAAO,MAAM,6BAA6B,CAAA;AAC1C,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,aAAA,GAAgB,EAAA;AACrD,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,QAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,QAAA,MAAA,CAAO,KAAA,CAAM,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,EAAG,GAAG,GAAG,MAAM,CAAA;AAAA,CAAW,CAAA;AAAA,MAC/D,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAA,CAAO,MAAM,6BAA6B,CAAA;AAC1C,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,aAAA,GAAgB,EAAA;AACrD,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,MAAA,MAAA,CAAO,KAAA,CAAM,GAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,EAAG,GAAG,GAAG,MAAM,CAAA;AAAA,CAAW,CAAA;AAAA,IAC/D,CAAC,CAAA;AAED,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB;AAC9B,MAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AACnC,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AAC/D,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AAC1C,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,KAAK,OAAA,CAAQ,MAAA;AAC9C,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,MAChC,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAQ;AACzB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAEA,eAAe,eAAA,GAAsC;AACnD,EAAA,MAAM,OAAA,GAAiD;AAAA,IACrD,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,2BAAA,EAA4B;AAAA,IACpD,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,sBAAA;AAAuB,GACnD;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AACxB,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1C,MAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAEtB,MAAA,MAAA,CAAO,MAAM,uBAAuB,CAAA;AACpC,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,QAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,QAAA,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,IAAI,SAAS,CAAA,EAAG,IAAI,KAAK,CAAA;AAAA,CAAW,CAAA;AAAA,MAC5D,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAA,CAAO,MAAM,uBAAuB,CAAA;AACpC,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC1B,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,MAAA,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,IAAI,SAAS,CAAA,EAAG,IAAI,KAAK,CAAA;AAAA,CAAW,CAAA;AAAA,IAC5D,CAAC,CAAA;AAED,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB;AAC9B,MAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AACnC,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA;AAC/D,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AAC1C,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,KAAK,OAAA,CAAQ,MAAA;AAC9C,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,OAAA,CAAQ,OAAA,CAAQ,aAAa,CAAA,CAAE,KAAK,CAAA;AAAA,MACtC,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAQ;AACzB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAEA,SAAS,WAAW,GAAA,EAAsB;AACxC,EAAA,IAAI;AACF,IAAA,IAAI,IAAI,GAAG,CAAA;AACX,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAe,WAAW,IAAA,EAAgC;AACxD,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAmC;AACrD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,EAAO;AAC9B,MAAA,MAAA,CAAO,WAAW,GAAG,CAAA;AAErB,MAAA,MAAA,CAAO,EAAA,CAAG,WAAW,MAAM;AACzB,QAAA,MAAA,CAAO,OAAA,EAAQ;AACf,QAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACd,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,EAAA,CAAG,WAAW,MAAM;AACzB,QAAA,MAAA,CAAO,OAAA,EAAQ;AACf,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,EAAA,CAAG,SAAS,MAAM;AACvB,QAAA,MAAA,CAAO,OAAA,EAAQ;AACf,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,MAAM,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,IAAA;AAC1C,EAAA,IAAI,MAAM,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,IAAA;AACpC,EAAA,OAAO,KAAA;AACT;AAEA,eAAe,uBAAuB,GAAA,EAA+B;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,UAAU,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,GAAI,CAAA;AAEzD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,WAAA,CAAA,EAAe;AAAA,MAChD,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,OAAA,EAAS,EAAE,QAAA,EAAU,kBAAA;AAAmB,KACzC,CAAA;AAED,IAAA,YAAA,CAAa,OAAO,CAAA;AAEpB,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,SAAS,EAAA,EAAI;AACf,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,eAAe,0BAAA,GAAqD;AAClE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAC1C,GAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,IAAA;AAAA,IAClB,IAAA;AAAA,IAAM,GAAA;AAAA,IAAM;AAAA,GACd;AAEA,EAAA,MAAA,CAAO,IAAI,8DAA8D,CAAA;AAEzE,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,WAAA,CAAY,GAAA,CAAI,OAAO,IAAA,KAAS;AAC9B,MAAA,IAAI,MAAM,UAAA,CAAW,IAAI,CAAA,EAAG;AAC1B,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AAClD,IAAA,MAAM,GAAA,GAAM,oBAAoB,IAAI,CAAA,CAAA;AACpC,IAAA,IAAI,MAAM,sBAAA,CAAuB,GAAG,CAAA,EAAG;AACrC,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,OAAA,CAAQ,GAAA,EAAa,IAAA,EAAc,IAAA,GAAiB,EAAC,EAAG;AAC/D,EAAA,IAAI,CAACN,GAAAA,CAAG,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,IAAAA,IAAG,SAAA,CAAU,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,UAAUA,GAAAA,CAAG,WAAA,CAAY,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAG;AAE/B,IAAA,MAAM,OAAA,GAAUD,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACzC,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAE3C,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,OAAA,CAAQ,OAAA,EAAS,UAAU,IAAI,CAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAAC,GAAAA,CAAG,YAAA,CAAa,OAAA,EAAS,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AACF;AA2DA,eAAsB,QAAA,CAAS,cAAA,EAAyB,OAAA,GAA2B,EAAC,EAAG;AACrF,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,EAAA,MAAM,gBAAgB,gBAAA,EAAiB;AAGvC,EAAA,IAAI,CAACA,GAAAA,CAAG,UAAA,CAAW,aAAa,CAAA,EAAG;AACjC,IAAA,MAAA,CAAO,MAAM,sEAAsE,CAAA;AACnF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,4CAA4C,CAAA;AACxD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,IAAI,WAAA,GAAc,cAAA;AAElB,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,OAAA,CAAQ,GAAA,EAAK;AAChC,IAAA,WAAA,GAAc,MAAMC,QAAO,gBAAgB,CAAA;AAAA,EAC7C;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAA,CAAO,MAAM,0BAA0B,CAAA;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,WAAA,GAAcF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,WAAW,CAAA;AAG9C,EAAA,IAAIC,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,WAAA,EAAc,WAAW,CAAA,gBAAA,CAAkB,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,SAAA,GAAY,OAAA,CAAQ,SAAA;AAAA,EACtB,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,IAAA,SAAA,GAAY,MAAA;AAAA,EACd,CAAA,MAAO;AACL,IAAA,SAAA,GAAY,MAAM,eAAA,EAAgB;AAClC,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,SAAA,GAAY,uBAAA;AAAA,EACd,CAAA,MAAO;AACL,IAAA,MAAM,WAAA,GAAc,MAAM,0BAAA,EAA2B;AAErD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AACrD,MAAA,MAAM,QAAA,GAAW,MAAMC,OAAAA,CAAO,CAAA,6BAAA,EAAgC,WAAW,CAAA,GAAA,CAAK,CAAA;AAC9E,MAAA,SAAA,GAAY,QAAA,IAAY,WAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAI,uDAAuD,CAAA;AAClE,MAAA,MAAM,QAAA,GAAW,MAAMA,OAAAA,CAAO,uDAAuD,CAAA;AACrF,MAAA,SAAA,GAAY,QAAA,IAAY,uBAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAA,CAAO,MAAM,oBAAoB,CAAA;AACjC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAGA,EAAA,MAAM,aAAaI,qBAAAA,EAAqB;AACxC,EAAA,IAAI,EAAA;AACJ,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,EAAA,GAAK,UAAA;AAAA,EACP,CAAA,MAAO;AACL,IAAA,EAAA,GAAK,MAAMC,sBAAqB,UAAU,CAAA;AAC1C,IAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,CAAA,SAAA,EAAY,SAAA,KAAc,MAAA,GAAS,MAAA,GAAS,SAAS,CAAA,WAAA,CAAa,CAAA;AAC9E,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAAN,IAAG,SAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAG7C,EAAA,MAAM,eAAe,sBAAA,EAAuB;AAG5C,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,MAAM,YAAA,CAAa,WAAA,EAAa,aAAA,EAAe,WAAA,EAAa,WAAW,YAAY,CAAA;AAAA,EACrF,CAAA,MAAO;AACL,IAAA,MAAM,cAAA,CAAe,WAAA,EAAa,aAAA,EAAe,WAAA,EAAa,WAAW,YAAY,CAAA;AAAA,EACvF;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,EAAA,IAAI;AACF,IAAA,MAAMG,WAAAA,CAAW,EAAA,EAAI,EAAA,KAAO,KAAA,GAAQ,CAAC,SAAS,CAAA,GAAI,CAAC,SAAS,CAAA,EAAG,WAAW,CAAA;AAAA,EAC5E,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,MAAM,gCAAgC,CAAA;AAC7C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AACb,EAAA,MAAA,CAAO,QAAQ,kCAAkC,CAAA;AACjD,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAGb,EAAA,MAAA,CAAO,KAAK,gCAAgC,CAAA;AAC5C,EAAA,MAAA,CAAO,IAAI,EAAE,CAAA;AAEb,EAAA,MAAM,OAAA,GAAU,OAAO,KAAA,GAAQ,CAAC,OAAO,KAAK,CAAA,GAAI,CAAC,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAaC,KAAAA,CAAM,EAAA,EAAI,OAAA,EAAS;AAAA,IACpC,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAAA,IACjC,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAgB;AACnC,IAAA,IAAI,aAAA,EAAe;AACnB,IAAA,aAAA,GAAgB,IAAA;AAChB,IAAA,MAAM,OAAA,GAAU,QAAQ,QAAA,KAAa,QAAA,GAAW,SAChC,OAAA,CAAQ,QAAA,KAAa,UAAU,OAAA,GAAU,UAAA;AACzD,IAAAA,KAAAA,CAAM,OAAA,EAAS,CAAC,GAAG,CAAA,EAAG,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,CAAA,CAAE,KAAA,EAAM;AAAA,EACnE,CAAA;AAEA,EAAA,UAAA,CAAW,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AAC9C,IAAA,MAAM,IAAA,GAAO,KAAK,QAAA,EAAS;AAC3B,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAEzB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,wCAAwC,CAAA;AACpE,IAAA,IAAI,QAAA,IAAY,CAAC,aAAA,EAAe;AAC9B,MAAA,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,IACzB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,UAAA,CAAW,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AAC9C,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC3B,CAAC,CAAA;AAED,EAAA,UAAA,CAAW,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AAChC,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAC3D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACH;AAEA,eAAe,YAAA,CACb,WAAA,EACA,aAAA,EACA,WAAA,EACA,WACA,YAAA,EACA;AAEA,EAAA,OAAA,CAAQL,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,KAAK,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,KAAK,CAAA,EAAG,EAAE,CAAA;AAC1E,EAAA,MAAA,CAAO,QAAQ,aAAa,CAAA;AAG5B,EAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,MAAM,CAAA;AAG/C,EAAA,IAAI,SAAA,GAAYC,IAAG,YAAA,CAAaD,KAAAA,CAAK,KAAK,OAAA,EAAS,YAAY,GAAG,OAAO,CAAA;AACzE,EAAA,SAAA,GAAY,SAAA,CAAU,OAAA,CAAQ,iBAAA,EAAmB,qBAAqB,CAAA;AACtE,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AACzE,EAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AAEnC,EAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,UAAU,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,KAAA,EAAO,UAAU,CAAC,CAAA;AACzF,EAAA,MAAA,CAAO,QAAQ,sBAAsB,CAAA;AAGrC,EAAA,IAAI,UAAA,GAAaC,IAAG,YAAA,CAAaD,KAAAA,CAAK,KAAK,OAAA,EAAS,gBAAgB,GAAG,OAAO,CAAA;AAE9E,EAAA,UAAA,GAAa,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAWb,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,gBAAgB,CAAA,EAAG,YAAY,OAAO,CAAA;AAC9E,EAAA,MAAA,CAAO,QAAQ,wBAAwB,CAAA;AAGvC,EAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,eAAe,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,eAAe,CAAC,CAAA;AAElG,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAMC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,eAAe,CAAA,EAAG,OAAO,CAAC,CAAA;AAC7F,EAAA,QAAA,CAAS,OAAA,GAAU,CAAC,KAAK,CAAA;AACzB,EAAA,OAAO,SAAS,eAAA,EAAiB,KAAA;AACjC,EAAAC,GAAAA,CAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,eAAe,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,GAAI,MAAM,OAAO,CAAA;AAC3G,EAAA,MAAA,CAAO,QAAQ,uBAAuB,CAAA;AAGtC,EAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,cAAc,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,cAAc,CAAC,CAAA;AAEhG,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAMC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AACvF,EAAA,GAAA,CAAI,IAAA,GAAO,WAAA;AACX,EAAA,GAAA,CAAI,OAAA,GAAU;AAAA,IACZ,GAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AACA,EAAA,OAAO,GAAA,CAAI,OAAA;AAEX,EAAA,IAAI,GAAA,CAAI,YAAA,GAAe,uBAAuB,CAAA,EAAG;AAC/C,IAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,CAAA,GAAI,YAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,GAAA,CAAI,eAAe,MAAM,CAAA;AAChC,EAAA,OAAO,GAAA,CAAI,kBAAkB,sBAAsB,CAAA;AACnD,EAAA,OAAO,GAAA,CAAI,kBAAkB,SAAS,CAAA;AACtC,EAAAC,GAAAA,CAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,cAAc,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAA,GAAI,MAAM,OAAO,CAAA;AACrG,EAAA,MAAA,CAAO,QAAQ,sBAAsB,CAAA;AAGrC,EAAA,MAAM,UAAA,GAAa,CAAA;AAAA,sBAAA,EACG,SAAS;AAAA,CAAA;AAE/B,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,MAAM,CAAA,EAAG,YAAY,OAAO,CAAA;AACpE,EAAA,MAAA,CAAO,QAAQ,cAAc,CAAA;AAG7B,EAAAC,IAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,YAAY,CAAA,EAAG,CAAA;AAAA;AAAA;AAAA,CAAA,EAGtD,OAAO,CAAA;AACR,EAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AAGnC,EAAA,IAAI,OAAA,GAAUC,IAAG,YAAA,CAAaD,KAAAA,CAAK,KAAK,WAAA,EAAa,KAAA,EAAO,UAAU,CAAA,EAAG,OAAO,CAAA;AAChF,EAAA,OAAA,GAAU,QACP,OAAA,CAAQ,oBAAA,EAAsB,UAAU,CAAA,CACxC,OAAA,CAAQ,wBAAwB,YAAY,CAAA;AAC/C,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,KAAA,EAAO,UAAU,CAAA,EAAG,OAAA,EAAS,OAAO,CAAA;AAG5E,EAAA,IAAIC,IAAG,UAAA,CAAWD,KAAAA,CAAK,KAAK,OAAA,EAAS,aAAa,CAAC,CAAA,EAAG;AACpD,IAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,aAAa,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,aAAa,CAAC,CAAA;AACxF,IAAA,MAAA,CAAO,QAAQ,qBAAqB,CAAA;AAAA,EACtC;AACF;AAEA,eAAe,cAAA,CACb,WAAA,EACA,aAAA,EACA,WAAA,EACA,WACA,YAAA,EACA;AAEA,EAAA,OAAA,CAAQA,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,KAAK,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,KAAK,CAAA,EAAG,EAAE,CAAA;AAC1E,EAAA,MAAA,CAAO,QAAQ,aAAa,CAAA;AAG5B,EAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,MAAM,CAAA;AAG/C,EAAA,OAAA,CAAQA,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,KAAK,CAAA,EAAG,EAAE,CAAA;AACpE,EAAA,MAAA,CAAO,QAAQ,aAAa,CAAA;AAG5B,EAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,gBAAgB,CAAC,CAAA;AAC9F,EAAA,MAAA,CAAO,QAAQ,wBAAwB,CAAA;AAGvC,EAAAC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,oBAAoB,CAAA,EAAGA,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,oBAAoB,CAAC,CAAA;AACtG,EAAA,MAAA,CAAO,QAAQ,4BAA4B,CAAA;AAG3C,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ,QAAA;AAAA,MACR,GAAA,EAAK,CAAC,KAAA,EAAO,cAAA,EAAgB,QAAQ,CAAA;AAAA,MACrC,OAAA,EAAS,IAAA;AAAA,MACT,YAAA,EAAc,IAAA;AAAA,MACd,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ,IAAA;AAAA,MACR,eAAA,EAAiB,IAAA;AAAA,MACjB,MAAA,EAAQ,QAAA;AAAA,MACR,gBAAA,EAAkB,SAAA;AAAA,MAClB,iBAAA,EAAmB,IAAA;AAAA,MACnB,eAAA,EAAiB,IAAA;AAAA,MACjB,GAAA,EAAK,UAAA;AAAA,MACL,WAAA,EAAa,IAAA;AAAA,MACb,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,CAAC,SAAS;AAAA;AACnB,KACF;AAAA,IACA,OAAA,EAAS,CAAC,eAAA,EAAiB,SAAA,EAAW,YAAY,qBAAqB,CAAA;AAAA,IACvE,OAAA,EAAS,CAAC,cAAc;AAAA,GAC1B;AACA,EAAAC,GAAAA,CAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,eAAe,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA,GAAI,MAAM,OAAO,CAAA;AAC3G,EAAA,MAAA,CAAO,QAAQ,uBAAuB,CAAA;AAGtC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAMC,GAAAA,CAAG,YAAA,CAAaD,KAAAA,CAAK,IAAA,CAAK,aAAA,EAAe,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AACzF,EAAA,GAAA,CAAI,IAAA,GAAO,WAAA;AACX,EAAA,GAAA,CAAI,OAAA,GAAU;AAAA,IACZ,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AACA,EAAA,OAAO,GAAA,CAAI,OAAA;AAEX,EAAA,IAAI,GAAA,CAAI,YAAA,GAAe,uBAAuB,CAAA,EAAG;AAC/C,IAAA,GAAA,CAAI,YAAA,CAAa,uBAAuB,CAAA,GAAI,YAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,GAAA,CAAI,kBAAkB,mBAAmB,CAAA;AAChD,EAAA,OAAO,GAAA,CAAI,kBAAkB,sBAAsB,CAAA;AACnD,EAAA,OAAO,GAAA,CAAI,kBAAkB,MAAM,CAAA;AACnC,EAAAC,GAAAA,CAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,cAAc,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAA,GAAI,MAAM,OAAO,CAAA;AACrG,EAAA,MAAA,CAAO,QAAQ,sBAAsB,CAAA;AAGrC,EAAA,MAAM,UAAA,GAAa,CAAA;AAAA,6BAAA,EACU,SAAS;AAAA,CAAA;AAEtC,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,YAAY,CAAA,EAAG,YAAY,OAAO,CAAA;AAC1E,EAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AAGnC,EAAAC,IAAG,aAAA,CAAcD,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,YAAY,CAAA,EAAG,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA,EAItD,OAAO,CAAA;AACR,EAAA,MAAA,CAAO,QAAQ,oBAAoB,CAAA;AAGnC,EAAA,IAAI,SAAA,GAAYC,IAAG,YAAA,CAAaD,KAAAA,CAAK,KAAK,WAAA,EAAa,KAAA,EAAO,YAAY,CAAA,EAAG,OAAO,CAAA;AACpF,EAAA,SAAA,GAAY,SAAA,CAAU,OAAA,CAAQ,0BAAA,EAA4B,eAAe,CAAA;AACzE,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,KAAA,EAAO,YAAY,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAGhF,EAAA,IAAI,OAAA,GAAUC,IAAG,YAAA,CAAaD,KAAAA,CAAK,KAAK,WAAA,EAAa,KAAA,EAAO,UAAU,CAAA,EAAG,OAAO,CAAA;AAChF,EAAA,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,0BAAA,EAA4B,eAAe,CAAA;AACrE,EAAAC,GAAAA,CAAG,cAAcD,KAAAA,CAAK,IAAA,CAAK,aAAa,KAAA,EAAO,UAAU,CAAA,EAAG,OAAA,EAAS,OAAO,CAAA;AAC9E;ACxyBA,eAAe,YAAY,MAAA,EAAmC;AAC5D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AACxB,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,MAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAEtB,MAAA,MAAA,CAAO,MAAM,2DAA2D,CAAA;AACxE,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAA,KAAM;AAC3B,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,QAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,QAAA,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAS,GAAG,KAAK,CAAA;AAAA,CAAW,CAAA;AAAA,MACxD,CAAC,CAAA;AAAA,IACH,CAAA;AAGA,IAAA,MAAA,CAAO,MAAM,2DAA2D,CAAA;AACxE,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAA,KAAM;AAC3B,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,aAAA,GAAgB,uBAAA,GAAqB,GAAA;AAC1D,MAAA,MAAM,SAAA,GAAY,CAAA,KAAM,aAAA,GAAgB,UAAA,GAAa,UAAA;AACrD,MAAA,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAS,GAAG,KAAK,CAAA;AAAA,CAAW,CAAA;AAAA,IACxD,CAAC,CAAA;AAED,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB;AAC9B,MAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AACnC,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,CAAA,GAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA;AAC7D,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AAC1C,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,KAAK,MAAA,CAAO,MAAA;AAC7C,QAAA,aAAA,EAAc;AAAA,MAChB,CAAA,MAAA,IAAW,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,OAAA,CAAQ,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,MAC/B,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAQ;AACzB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAKA,eAAe,eAAA,CACb,OACA,UAAA,EAC0B;AAC1B,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AAEvB,IAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,uDAAuD,CAAA;AAClE,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,QAAA,MAAM,aAAa,CAAA,KAAM,aAAA;AACzB,QAAA,MAAM,MAAA,GAAS,aAAa,uBAAA,GAAqB,GAAA;AACjD,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,KAAS,SAAA,GAC3B,0BAAA,GACA,uBAAA;AAEJ,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,UAAA,EAAa,IAAA,CAAK,IAAI,CAAA,SAAA,EAAY,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC/E;AAEA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,OAAA,GAAU,KAAA,KAAU;AAClC,MAAA,MAAM,QAAQ,eAAA,EAAgB;AAC9B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AACxB,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AACpC,QAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,MACxB;AACA,MAAA,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,IAAI,IAAI,CAAA;AAAA,IACtC,CAAA;AAEA,IAAA,MAAA,CAAO,IAAI,CAAA;AAEX,IAAA,MAAM,SAAS,KAAA,CAAM,KAAA;AACrB,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,IACvB;AACA,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,KAAA,CAAM,UAAA,CAAW,UAAU,KAAK,CAAA;AAChC,MAAA,KAAA,CAAM,KAAA,EAAM;AACZ,MAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,MAAA,MAAA,CAAO,MAAM,WAAW,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB;AAC9B,MAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AACnC,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA;AAC3D,QAAA,MAAA,EAAO;AAAA,MACT,CAAA,MAAA,IAAW,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,GAAA,EAAK;AAC1C,QAAA,aAAA,GAAA,CAAiB,aAAA,GAAgB,KAAK,KAAA,CAAM,MAAA;AAC5C,QAAA,MAAA,EAAO;AAAA,MACT,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,QAAA,KAAA,CAAM,aAAa,EAAE,IAAA,GAAO,KAAA,CAAM,aAAa,CAAA,CAAE,IAAA,KAAS,YAAY,MAAA,GAAS,SAAA;AAC/E,QAAA,MAAA,EAAO;AAAA,MACT,CAAA,MAAA,IAAW,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AACvC,QAAA,OAAA,EAAQ;AACR,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAQ;AACzB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AACjB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAaA,SAAS,uBAAA,GAAmC;AAE1C,EAAA,IAAI,CAACC,GAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAC,CAAA;AACnE,IAAA,MAAM,OAAO,EAAE,GAAG,QAAQ,YAAA,EAAc,GAAG,QAAQ,eAAA,EAAgB;AACnE,IAAA,OAAO,yBAAA,IAA6B,IAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKA,eAAsB,IAAA,CAAK,WAA+B,OAAA,EAAsB;AAC9E,EAAA,MAAA,CAAO,KAAK,oBAAoB,CAAA;AAGhC,EAAA,IAAI,CAAC,yBAAwB,EAAG;AAC9B,IAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AACpE,IAAA,MAAA,CAAO,KAAK,gFAAgF,CAAA;AAC5F,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,EAAI;AAG5B,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAO,iCAAiC,CAAA;AAC9D,IAAA,cAAA,GAAiB,OAAA,CAAQ,cAAA;AAAA,EAC3B,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,MAAM,6DAA6D,CAAA;AAC1E,IAAA,MAAA,CAAO,KAAK,2DAA2D,CAAA;AACvE,IAAA,IAAI,eAAe,KAAA,EAAO;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,IACrC;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,EAAe;AAG1C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,UAAA,CAAW,OAAO,CAAA;AAEhD,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,MAAA,CAAO,MAAM,mCAAmC,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEvB,MAAA,SAAA,GAAY,OAAO,CAAC,CAAA;AACpB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,CAAA;AAAA,IAC7C,CAAA,MAAO;AAEL,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,SAAA,GAAY,MAAM,YAAY,MAAM,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,SAAA,EAAW;AAEd,IAAA,MAAA,CAAO,MAAM,mBAAmB,CAAA;AAChC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,MAAM,aAAA,GAAgB,SAAA;AAEtB,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,aAAa,CAAA,CAAE,CAAA;AAG/C,EAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,YAAA,CAAa,eAAe,OAAO,CAAA;AAEzE,EAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAA,CAAO,MAAM,kBAAkB,CAAA;AAC/B,IAAA,KAAA,MAAW,KAAA,IAAS,SAAS,MAAA,EAAQ;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5B;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,QAAA,CAAS,YAAA,CAAa,OAAO,GAAA,CAAI,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AACpH,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,QAAA,CAAS,YAAA,CAAa,QAAQ,GAAA,CAAI,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AACrH,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,QAAA,CAAS,YAAA,CAAa,MAAM,GAAA,CAAI,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AACnH,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,QAAA,CAAS,YAAA,CAAa,OAAO,GAAA,CAAI,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AACpH,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,QAAA,CAAS,YAAA,CAAa,MAAM,GAAA,CAAI,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AAGnH,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,SAAS,QAAA,EAAU;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9B;AAAA,EACF;AAGA,EAAA,MAAM,iBAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,KAAA,IAAS,QAAA,CAAS,YAAA,CAAa,MAAA,EAAQ;AAChD,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MAClB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,IAAA,EAAM,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,IAAI,MAAA,GAAS,SAAA;AAAA,MAC7C,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,MACpC,YAAY,KAAA,CAAM;AAAA,KACnB,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAWC,OAAAA,IAAU,QAAA,CAAS,YAAA,CAAa,OAAA,EAAS;AAClD,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MAClB,MAAMA,OAAAA,CAAO,IAAA;AAAA,MACb,IAAA,EAAM,QAAA;AAAA,MACN,UAAUA,OAAAA,CAAO,QAAA;AAAA,MACjB,IAAA,EAAMA,OAAAA,CAAO,UAAA,CAAW,MAAA,GAAS,IAAI,MAAA,GAAS,SAAA;AAAA,MAC9C,QAAA,EAAUA,OAAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,MACrC,YAAYA,OAAAA,CAAO;AAAA,KACpB,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,YAAA,CAAa,KAAA,EAAO;AAC9C,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MAClB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,IAAA,EAAM,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,IAAI,MAAA,GAAS,SAAA;AAAA,MAC5C,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,MACnC,YAAY,IAAA,CAAK;AAAA,KAClB,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,QAAA,CAAS,YAAA,CAAa,MAAA,EAAQ;AAChD,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MAClB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,IAAA,EAAM,OAAA;AAAA,MACN,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,IAAA,EAAM,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,IAAI,MAAA,GAAS,SAAA;AAAA,MAC7C,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,MACpC,YAAY,KAAA,CAAM;AAAA,KACnB,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,QAAA,CAAS,YAAA,CAAa,KAAA,EAAO;AAC9C,IAAA,cAAA,CAAe,IAAA,CAAK;AAAA,MAClB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,IAAA,EAAM,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,IAAI,MAAA,GAAS,SAAA;AAAA,MAC5C,QAAA,EAAU,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,MACnC,YAAY,IAAA,CAAK;AAAA,KAClB,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,cAAA;AAEJ,EAAA,IAAI,CAAC,QAAQ,aAAA,IAAiB,OAAA,CAAQ,MAAM,KAAA,IAAS,cAAA,CAAe,SAAS,CAAA,EAAG;AAC9E,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,cAA6B,CAAA;AACtE,IAAA,cAAA,GAAiB,UAAA,CAAW,IAAI,CAAA,CAAA,MAAM;AAAA,MACpC,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,MAAM,CAAA,CAAE;AAAA,KACV,CAAE,CAAA;AACF,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,YAAY,OAAA,CAAQ,MAAA,IAAUF,MAAK,IAAA,CAAK,OAAA,EAAS,UAAU,QAAQ,CAAA;AAGzE,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,YAAA,EAAe,SAAS,CAAA,CAAE,CAAA;AAEtC,EAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,IAAA,CAAK;AAAA,IACvC,SAAA,EAAW,aAAA;AAAA,IACX,OAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,IAC5B,GAAA,EAAK,QAAQ,GAAA,IAAO,KAAA;AAAA,IACpB,eAAA,EAAiB,cAAA,GAAiB,KAAA,GAAQ,CAAC,OAAA,CAAQ,QAAA;AAAA;AAAA,IACnD,WAAW,CAAA,cAAA,EAAiB,aAAA,CAAc,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA;AAAA,IAC5D;AAAA,GACD,CAAA;AAED,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAC9C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAA,CAAO,QAAQ,mBAAmB,CAAA;AAClC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,QAAA,CAAU,CAAA;AAEjE,EAAA,IAAI,MAAA,CAAO,YAAA,IAAgB,MAAA,CAAO,YAAA,CAAa,SAAS,CAAA,EAAG;AACzD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,eAAA,CAAiB,CAAA;AAAA,EAC1E;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,KAAK,4CAA4C,CAAA;AACxD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AACvC,IAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAAA,EAC7B;AACF;ACzYA,SAASQ,wBAAAA,GAAmC;AAE1C,EAAA,IAAI,CAACP,GAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAC,CAAA;AACnE,IAAA,MAAM,OAAO,EAAE,GAAG,QAAQ,YAAA,EAAc,GAAG,QAAQ,eAAA,EAAgB;AACnE,IAAA,OAAO,yBAAA,IAA6B,IAAA;AAAA,EACtC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKA,eAAsB,MAAA,CAAO,eAAmC,OAAA,EAAwB;AACtF,EAAA,MAAA,CAAO,KAAK,sBAAsB,CAAA;AAGlC,EAAA,IAAI,CAACO,0BAAwB,EAAG;AAC9B,IAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AACpE,IAAA,MAAA,CAAO,KAAK,gFAAgF,CAAA;AAC5F,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,EAAI;AAG5B,EAAA,IAAI,gBAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAO,iCAAiC,CAAA;AAC9D,IAAA,gBAAA,GAAoB,OAAA,CAAgB,gBAAA;AAEpC,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,OAAA,GAAU,MAAM,OAAO,yBAAyB,CAAA;AACtD,MAAA,gBAAA,GAAoB,OAAA,CAAgB,gBAAA;AAAA,IACtC;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,MAAM,+DAA+D,CAAA;AAC5E,IAAA,MAAA,CAAO,KAAK,iDAAiD,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,gBAAA,GAAmB,IAAI,gBAAA,EAAiB;AAG9C,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,YAAA,CAAa,OAAO,CAAA;AAE5D,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,KAAK,yBAAyB,CAAA;AACrC,MAAA,MAAA,CAAO,KAAK,8CAA8C,CAAA;AAC1D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,GAAA,CAAI,SAAS,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,GAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AACnE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAC1C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB;AACA,IAAA,MAAA,CAAO,KAAK,iCAAiC,CAAA;AAC7C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,aAAa,CAAA,CAAE,CAAA;AAGzC,EAAA,MAAM,MAAA,GAAS,MAAM,gBAAA,CAAiB,MAAA,CAAO;AAAA,IAC3C,OAAA,EAAS,aAAA;AAAA,IACT,OAAA;AAAA,IACA,cAAA,EAAgB,CAAC,OAAA,CAAQ;AAAA,GAC1B,CAAA;AAED,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAA,CAAO,QAAQ,qBAAqB,CAAA;AACpC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAC/C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA,QAAA,CAAU,CAAA;AAEjE,EAAA,IAAI,MAAA,CAAO,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAClC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,KAAK,gBAAgB,CAAA;AAC5B,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,YAAA,EAAc;AACtC,MAAA,MAAM,OAAA,GAAUR,KAAAA,CAAK,QAAA,CAAS,OAAA,EAAS,IAAI,CAAA;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9B;AAAA,EACF;AAEA,EAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,KAAK,wDAAwD,CAAA;AAAA,EACtE,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,KAAK,yEAAyE,CAAA;AAAA,EACvF;AACF;AAKA,eAAsB,UAAA,GAAa;AAEjC,EAAA,IAAI,CAACQ,0BAAwB,EAAG;AAC9B,IAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AACpE,IAAA,MAAA,CAAO,KAAK,gFAAgF,CAAA;AAC5F,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,EAAI;AAG5B,EAAA,IAAI,gBAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAO,iCAAiC,CAAA;AAC9D,IAAA,gBAAA,GAAoB,OAAA,CAAgB,gBAAA;AAEpC,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,OAAA,GAAU,MAAM,OAAO,yBAAyB,CAAA;AACtD,MAAA,gBAAA,GAAoB,OAAA,CAAgB,gBAAA;AAAA,IACtC;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,MAAM,+DAA+D,CAAA;AAC5E,IAAA,MAAA,CAAO,KAAK,iDAAiD,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,gBAAA,GAAmB,IAAI,gBAAA,EAAiB;AAC9C,EAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,YAAA,CAAa,OAAO,CAAA;AAE5D,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,MAAA,CAAO,KAAK,yBAAyB,CAAA;AACrC,IAAA,MAAA,CAAO,KAAK,8CAA8C,CAAA;AAC1D,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,KAAK,6BAA6B,CAAA;AAEzC,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAG,GAAA,CAAI,SAAS,CAAA,EAAA,EAAK,GAAA,CAAI,OAAO,CAAA,CAAA,CAAG,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AACtC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAC1C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACpC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB;AACF;ACrIA,IAAM,gBAAA,GAAmB,+BAAA;AAEzB,IAAM,sBAAA,GAAyB,IAAI,IAAA,GAAO,IAAA;AAKnC,SAAS,aAAa,OAAA,EAAyC;AACpE,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,EAAG;AACtC,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AACzC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACnC,IAAA,IAAI,YAAY,EAAA,EAAI;AACpB,IAAA,MAAM,MAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,OAAO,EAAE,IAAA,EAAK;AAC3C,IAAA,IAAI,QAAQ,OAAA,CAAQ,KAAA,CAAM,OAAA,GAAU,CAAC,EAAE,IAAA,EAAK;AAE5C,IAAA,IAAI,MAAM,UAAA,CAAW,GAAG,KAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAChD,MAAA,KAAA,GAAQ,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,IAChD,CAAA,MAAA,IAAW,MAAM,UAAA,CAAW,GAAG,KAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvD,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,IAC3B;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,EAChB;AACA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,eAAA,CAAgB,GAAW,CAAA,EAAmB;AAE5D,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA;AACtD,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA;AAEtD,EAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAC1C,EAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AACxB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AACxB,IAAA,IAAI,EAAA,GAAK,IAAI,OAAO,EAAA;AACpB,IAAA,IAAI,EAAA,GAAK,IAAI,OAAO,CAAA;AAAA,EACtB;AAGA,EAAA,IAAI,IAAA,IAAQ,CAAC,IAAA,EAAM,OAAO,EAAA;AAC1B,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,EAAM,OAAO,CAAA;AAC1B,EAAA,OAAO,CAAA;AACT;AAGO,SAAS,mBAAmB,SAAA,EAAkC;AACnE,EAAA,IAAI,YAAY,sBAAA,EAAwB;AACtC,IAAA,OAAO,gBAAgB,WAAA,CAAY,SAAS,CAAC,CAAA,+BAAA,EAAkC,WAAA,CAAY,sBAAsB,CAAC,CAAA,+BAAA,CAAA;AAAA,EACpH;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,cAAA,CAAe,QAAkB,cAAA,EAAwC;AACvF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,eAAA,EAAiB;AAAA,GACnB;AACF;AAGO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AACjC,EAAA,IAAI,KAAA,GAAQ,OAAO,IAAA,EAAM,OAAO,IAAI,KAAA,GAAQ,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC5D,EAAA,OAAO,IAAI,KAAA,IAAS,IAAA,GAAO,IAAA,CAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAC9C;AAGO,SAAS,kBAAkB,QAAA,EAAuC;AACvE,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,OAAO,GAAG,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,QAAA,CAAS,MAAM,OAAO,CAAA,CAAA;AAAA,EAC1D;AACA,EAAA,IAAI,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG;AACjD,IAAA,OAAO,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,eAAA;AACT;AAKO,SAAS,aAAA,GAAyB;AACvC,EAAA,MAAM,mBAAmBP,GAAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,IAAKA,GAAAA,CAAG,WAAW,eAAe,CAAA;AACzF,EAAA,MAAM,YAAA,GAAeA,GAAAA,CAAG,UAAA,CAAW,eAAe,CAAA;AAClD,EAAA,OAAO,gBAAA,IAAoB,YAAA;AAC7B;AAMO,SAAS,WAAW,OAAA,EAA8D;AAEvF,EAAA,MAAM,WAAA,GAAcA,GAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,GACpC,YAAA,CAAaA,GAAAA,CAAG,YAAA,CAAa,MAAA,EAAQ,OAAO,CAAC,CAAA,GAC7C,EAAC;AAGL,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,oBAAoB,WAAA,CAAY,gBAAA;AAC7E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAGA,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,IAAY,QAAQ,GAAA,CAAI,iBAAA,IAAqB,YAAY,iBAAA,IAAqB,gBAAA;AAEvG,EAAA,OAAO,EAAE,QAAQ,QAAA,EAAS;AAC5B;AAMO,SAAS,cAAA,GAA2B;AACzC,EAAA,MAAM,SAAA,GAAY,eAAA;AAClB,EAAA,IAAI,CAACA,GAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,SAAU,EAAC;AAEvC,EAAA,MAAM,gBAAA,uBAAuB,GAAA,CAAI,CAAC,OAAO,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAC,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQA,GAAAA,CAAG,WAAA,CAAY,SAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,gBAAA,CAAiB,GAAA,CAAID,KAAAA,CAAK,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA;AAEzF,EAAA,OAAO,KAAA,CAAM,IAAI,CAAA,IAAA,KAAQ;AACvB,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,IAAI,CAAA;AAE1C,IAAA,MAAM,QAAA,GAAWC,GAAAA,CAAG,YAAA,CAAa,QAAQ,CAAA;AACzC,IAAA,IAAI,CAAC,QAAA,CAAS,UAAA,CAAWA,IAAG,YAAA,CAAa,GAAG,CAAC,CAAA,EAAG;AAC9C,MAAA,OAAOD,MAAK,QAAA,CAAS,IAAA,EAAMA,KAAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,OAAA,GAAUC,GAAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAEjD,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,4DAA4D,CAAA;AAC5F,IAAA,OAAO,SAAA,GAAY,SAAA,CAAU,CAAC,CAAA,GAAID,KAAAA,CAAK,SAAS,IAAA,EAAMA,KAAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,EAC1E,CAAC,CAAA;AACH;AAGO,SAAS,iBAAA,GAA4B;AAC1C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,mDAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,IAAA,IAAIC,GAAAA,CAAG,UAAA,CAAW,CAAC,CAAA,EAAG;AACpB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAMA,IAAG,YAAA,CAAa,CAAA,EAAG,OAAO,CAAC,CAAA;AAClD,MAAA,OAAO,GAAA,CAAI,OAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAC5E;AAGA,SAASK,qBAAAA,GAA+B;AAEtC,EAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,qBAAA;AAC9B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACvC,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAAA,EACxC;AAGA,EAAA,IAAIL,GAAAA,CAAG,UAAA,CAAW,gBAAgB,CAAA,EAAG,OAAO,MAAA;AAC5C,EAAA,IAAIA,GAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG,OAAO,MAAA;AACvC,EAAA,IAAIA,GAAAA,CAAG,WAAW,WAAW,CAAA,IAAKA,IAAG,UAAA,CAAW,UAAU,GAAG,OAAO,KAAA;AACpE,EAAA,OAAO,KAAA;AACT;AAOA,SAAS,aAAa,QAAA,EAAwB;AAC5C,EAAA,MAAM,KAAKK,qBAAAA,EAAqB;AAChC,EAAA,MAAM,QAAA,GAAW,EAAA,KAAO,KAAA,GAAQ,gBAAA,GAAmB,GAAG,EAAE,CAAA,gBAAA,CAAA;AAExD,EAAA,QAAA,CAAS,QAAA,EAAU;AAAA,IACjB,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK;AAAA,MACH,GAAG,OAAA,CAAQ,GAAA;AAAA,MACX,iBAAA,EAAmB;AAAA;AACrB,GACD,CAAA;AACH;AAMO,SAAS,gBAAA,GAAkE;AAEhF,EAAA,MAAM,UAAA,GAAa,CAAC,eAAA,EAAiB,MAAM,CAAA;AAE3C,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,IAAI,CAACL,GAAAA,CAAG,UAAA,CAAW,GAAG,CAAA,EAAG;AAGzB,IAAA,MAAM,MAAA,GAAS,gBAAgB,GAAG,CAAA;AAClC,IAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,EACrB;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GAGF;AACF;AAEA,SAAS,gBAAgB,GAAA,EAAmE;AAC1F,EAAA,MAAM,UAAUA,GAAAA,CAAG,WAAA,CAAY,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC3D,EAAA,MAAM,UAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAO,KAAM,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAGrG,EAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,MAAM,WAAW,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,GAAI,CAAA;AACvE,IAAA,MAAM,WAAW,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,GAAI,CAAA;AACvE,IAAA,IAAI,QAAA,KAAa,QAAA,EAAU,OAAO,QAAA,GAAW,QAAA;AAE7C,IAAA,MAAM,KAAA,GAAQA,IAAG,QAAA,CAASD,KAAAA,CAAK,KAAK,GAAA,EAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAA;AAClD,IAAA,MAAM,KAAA,GAAQC,IAAG,QAAA,CAASD,KAAAA,CAAK,KAAK,GAAA,EAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAA;AAClD,IAAA,OAAO,KAAA,GAAQ,KAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,QAAA,GAAWA,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAUC,GAAAA,CAAG,YAAA,CAAa,QAAQ,CAAA;AAExC,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,QAAA,CAAS,OAAA,EAAS,CAAA,EAAG,GAAK,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AAChF,MAAA,OAAO,EAAE,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAAQ;AAAA,IACxD;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,aAAY,IAAK,KAAA,CAAM,SAAS,QAAA,IAAY,KAAA,CAAM,SAAS,cAAA,EAAgB;AACnF,MAAA,MAAM,SAAS,eAAA,CAAgBD,KAAAA,CAAK,KAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AACzD,MAAA,IAAI,QAAQ,OAAO,MAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGA,eAAsB,oBAAA,CACpB,UACA,cAAA,EACmC;AACnC,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,SAAA,CAAW,CAAA;AAC9C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,IAAI,MAAM,CAAA,kCAAA,EAAqC,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AAAA,EACrF;AACA,EAAA,MAAM,QAAA,GAAqC,MAAM,GAAA,CAAI,IAAA,EAAK;AAG1D,EAAA,IAAI,eAAA,CAAgB,cAAA,EAAgB,QAAA,CAAS,uBAAuB,IAAI,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,gBAAA,EAAmB,cAAc,CAAA,gCAAA,EAAmC,QAAA,CAAS,uBAAuB,CAAA;AAAA;AAAA,4CAAA;AAAA,KAGtG;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAGA,eAAsB,YAAA,CACpB,QAAA,EACA,MAAA,EACA,aAAA,EACA,UACA,cAAA,EACyB;AACzB,EAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,EAAA,QAAA,CAAS,MAAA,CAAO,QAAA,EAAU,IAAI,IAAA,CAAK,CAAC,IAAI,UAAA,CAAW,aAAa,CAAC,GAAG,EAAE,IAAA,EAAM,wBAAA,EAA0B,GAAG,UAAU,CAAA;AACnH,EAAA,QAAA,CAAS,MAAA,CAAO,UAAA,EAAY,IAAI,IAAA,CAAK,CAAC,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,GAAG,EAAE,IAAA,EAAM,kBAAA,EAAoB,GAAG,eAAe,CAAA;AAC/G,EAAA,QAAA,CAAS,MAAA,CAAO,mBAAmB,cAAc,CAAA;AACjD,EAAA,QAAA,CAAS,OAAO,aAAA,EAAe,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,MAAM,CAAC,CAAA;AAE7D,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,QAAA,CAAA,EAAY;AAAA,IAC7C,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,KACnC;AAAA,IACA,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAM,IAAI,IAAA,EAAK;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,GAAA,CAAI,MAAM,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAC/E;AAEA,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,QAAA,GAAW,kBAAkB,IAA2B,CAAA;AAC9D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,MAAM,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,IAAA;AACT;AAIA,eAAsB,OAAO,OAAA,EAAwB;AACnD,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGS,KAAAA,CAAM,IAAA,CAAK,wBAAwB,CAAC;AAAA,CAAI,CAAA;AAGvD,EAAA,IAAI,CAAC,eAAc,EAAG;AACpB,IAAA,MAAA,CAAO,MAAM,uDAAuD,CAAA;AACpE,IAAA,MAAA,CAAO,KAAK,2EAA2E,CAAA;AACvF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,CAAC,EAAE,MAAA,EAAQ,QAAA,EAAS,GAAI,WAAW,OAAO,CAAA;AAAA,EAC5C,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,KAAA,CAAO,IAAc,OAAO,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,MAAA,CAAO,QAAQ,sBAAsB,CAAA;AAGrC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAA,CAAO,MAAM,oCAAoC,CAAA;AACjD,IAAA,MAAA,CAAO,KAAK,gEAAgE,CAAA;AAC5E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,MAAA,EAAS,MAAA,CAAO,MAAM,SAAS,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAGpG,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI;AACF,IAAA,cAAA,GAAiB,iBAAA,EAAkB;AAAA,EACrC,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,KAAA,CAAO,IAAc,OAAO,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iBAAA,EAAoB,cAAc,CAAA,CAAE,CAAA;AAGhD,EAAA,IAAI;AACF,IAAA,MAAM,gBAAA,GAAmB,MAAM,oBAAA,CAAqB,QAAA,EAAU,cAAc,CAAA;AAC5E,IAAA,IAAI,eAAA,CAAgB,cAAA,EAAgB,gBAAA,CAAiB,sBAAsB,IAAI,CAAA,EAAG;AAChF,MAAA,MAAA,CAAO,OAAA;AAAA,QACL,CAAA,sCAAA,EAAyC,iBAAiB,sBAAsB,CAAA,sBAAA;AAAA,OAClF;AAAA,IACF;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,KAAA,CAAO,IAAc,OAAO,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAA,CAAO,KAAK,uBAAuB,CAAA;AACnC,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,MAAM,6CAA6C,CAAA;AAC1D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAA,CAAO,QAAQ,gBAAgB,CAAA;AAG/B,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI;AACF,IAAA,CAAC,EAAE,UAAA,EAAY,aAAA,EAAc,GAAI,gBAAA,EAAiB;AAAA,EACpD,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,KAAA,CAAO,IAAc,OAAO,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,MAAA,EAAQ,cAAc,CAAA;AACtD,EAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,UAAU,CAAA,EAAA,EAAK,YAAY,aAAA,CAAc,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AAG7E,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,aAAA,CAAc,MAAM,CAAA;AAC3D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,QAAQ,WAAW,CAAA;AAAA,EAC5B;AAGA,EAAA,MAAA,CAAO,KAAK,cAAc,CAAA;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,YAAA,CAAa,UAAU,MAAA,EAAQ,aAAA,EAAe,UAAU,cAAc,CAAA;AAC3F,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,MAAA,CAAO,OAAA,CAAQA,KAAAA,CAAM,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAGlD,IAAA,IAAI,MAAA,CAAO,OAAO,UAAA,EAAY;AAC5B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAClF;AACA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,KAAA,CAAO,IAAc,OAAO,CAAA;AACnC,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AC9bA,IAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAE5B,OAAA,CACG,KAAK,QAAQ,CAAA,CACb,YAAY,6CAA6C,CAAA,CACzD,QAAQ,qBAAe,CAAA;AAE1B,OAAA,CACG,QAAQ,qBAAqB,CAAA,CAC7B,WAAA,CAAY,wEAAwE,EACpF,MAAA,CAAO,WAAA,EAAa,+BAA+B,CAAA,CACnD,OAAO,uBAAA,EAAyB,sBAAA,EAAwB,YAAY,CAAA,CACpE,OAAO,IAAI,CAAA;AAEd,OAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,SAAA,EAAW,kCAAkC,CAAA,CACpD,MAAA,CAAO,QAAQ,CAAA;AAElB,OAAA,CACG,OAAA,CAAQ,0BAA0B,CAAA,CAClC,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA,CAAO,WAAA,EAAa,+BAA+B,EACnD,MAAA,CAAO,yBAAA,EAA2B,mCAAmC,CAAA,CACrE,OAAO,QAAQ,CAAA;AAElB,OAAA,CACG,OAAA,CAAQ,mBAAmB,CAAA,CAC3B,WAAA,CAAY,yCAAyC,CAAA,CACrD,MAAA,CAAO,gBAAA,EAAkB,2CAA2C,CAAA,CACpE,MAAA,CAAO,OAAA,EAAS,sCAAsC,CAAA,CACtD,MAAA,CAAO,qBAAA,EAAuB,kCAAkC,CAAA,CAChE,MAAA,CAAO,aAAA,EAAe,mCAAmC,CAAA,CACzD,MAAA,CAAO,kBAAA,EAAoB,qCAAqC,CAAA,CAChE,MAAA,CAAO,IAAI,CAAA;AAEd,OAAA,CACG,OAAA,CAAQ,kBAAkB,CAAA,CAC1B,WAAA,CAAY,qDAAqD,CAAA,CACjE,MAAA,CAAO,iBAAA,EAAmB,4CAA4C,CAAA,CACtE,MAAA,CAAO,MAAM,CAAA;AAEhB,OAAA,CACG,QAAQ,aAAa,CAAA,CACrB,YAAY,mCAAmC,CAAA,CAC/C,OAAO,UAAU,CAAA;AAEpB,OAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,+DAA+D,CAAA,CAC3E,MAAA,CAAO,iBAAA,EAAmB,uDAAuD,EACjF,MAAA,CAAO,kBAAA,EAAoB,gEAAgE,CAAA,CAC3F,OAAO,MAAM,CAAA;AAEhB,OAAA,CAAQ,KAAA,EAAM","file":"index.js","sourcesContent":["import chalk from 'chalk';\n\nexport const logger = {\n success: (message: string) => {\n console.log(chalk.green('✓'), message);\n },\n error: (message: string) => {\n console.log(chalk.red('✗'), message);\n },\n warning: (message: string) => {\n console.log(chalk.yellow('⚠'), message);\n },\n info: (message: string) => {\n console.log(chalk.blue('ℹ'), message);\n },\n log: (message: string) => {\n console.log(message);\n },\n};\n","export const ROOT_CLAUDE_MD = `# Standard Agents\n\nThis project uses Standard Agents - a framework for building AI agents on Cloudflare Workers.\n\n## Architecture Overview\n\nStandard Agents uses a **composition model** where four core components work together:\n\n\\`\\`\\`\nModel → Prompt → Agent → Thread\n │ │ │ │\n │ │ │ └─ Conversation instance (Durable Object)\n │ │ └─ Orchestrates conversation flow\n │ └─ System instructions + tools\n └─ LLM provider configuration\n\\`\\`\\`\n\n**Models** define which LLM to use (provider, model ID, pricing, fallbacks).\n**Prompts** define what the LLM should do (system instructions, available tools).\n**Agents** orchestrate conversations (which prompt, stop conditions, turn limits).\n**Threads** are individual conversation instances with persistent storage.\n\n## How Components Compose\n\n### Basic Flow\n1. User creates a thread with an agent\n2. Agent uses its configured prompt\n3. Prompt specifies the model and tools\n4. LLM responds, potentially calling tools\n5. Tools execute and return results\n6. Loop continues until stop condition\n\n### Sub-Prompts (Prompts as Tools)\nPrompts can call other prompts as tools. This enables:\n- **Specialized reasoning**: A main prompt delegates to expert sub-prompts\n- **Structured outputs**: Sub-prompt validates and formats data\n- **Context isolation**: Sub-prompt gets fresh context without full history\n\n\\`\\`\\`typescript\n// Main prompt can call 'data_extractor' as a tool\ndefinePrompt({\n name: 'main_assistant',\n tools: ['data_extractor'], // Another prompt exposed as tool\n // ...\n});\n\\`\\`\\`\n\n### Agent Handoffs (Agents as Tools)\nAgents can delegate to other agents entirely:\n- **Specialization**: Route to domain-specific agents\n- **Escalation**: Hand off to more capable agents\n- **Workflows**: Chain agents for multi-step processes\n\n\\`\\`\\`typescript\ndefineAgent({\n name: 'triage_agent',\n exposeAsTool: true,\n toolDescription: 'Hand off to triage for initial assessment',\n // ...\n});\n\\`\\`\\`\n\n## File Structure\n\n\\`\\`\\`\nagents/\n├── CLAUDE.md # This file\n├── Thread.ts # Durable Object for conversation threads\n├── AgentBuilder.ts # Durable Object for metadata\n├── agents/ # Agent definitions (defineAgent)\n│ └── CLAUDE.md\n├── prompts/ # Prompt definitions (definePrompt)\n│ └── CLAUDE.md\n├── models/ # Model configurations (defineModel)\n│ └── CLAUDE.md\n├── tools/ # Custom tools (defineTool)\n│ └── CLAUDE.md\n├── hooks/ # Lifecycle hooks (defineHook)\n│ └── CLAUDE.md\n└── api/ # Thread API endpoints (defineThreadEndpoint)\n └── CLAUDE.md\n\\`\\`\\`\n\nFiles are **auto-discovered** at runtime. No manual registration needed.\n\n## ThreadState\n\n\\`ThreadState\\` is the state object available in tools and hooks:\n\n\\`\\`\\`typescript\ninterface ThreadState {\n // Identity (readonly)\n threadId: string; // Thread identifier\n agentId: string; // Agent identifier\n userId: string | null; // User identifier (if set)\n createdAt: number; // Creation timestamp\n children: SubagentRegistryEntry[]; // Resumable child registry\n terminated: number | null; // Soft-termination timestamp\n\n // Methods\n getMessages(options?): Promise<MessagesResult>; // Get conversation history\n injectMessage(input): Promise<Message>; // Add message to thread\n queueMessage(input): Promise<void>; // Queue message for next step\n loadModel(name): Promise<ModelConfig>; // Load model definition\n loadPrompt(name): Promise<PromptConfig>; // Load prompt definition\n loadAgent(name): Promise<AgentConfig>; // Load agent definition\n env(propertyName): Promise<string>; // Resolve env value for this thread\n setEnv(propertyName, value): Promise<void>; // Set thread env + propagate to active descendants\n notifyParent(content): Promise<void>; // Explicitly queue a silent message to the parent\n setStatus(status): Promise<void>; // Update this child in the parent registry\n getChildThread(referenceId): Promise<ThreadState | null>; // Resolve child thread\n getParentThread(): Promise<ThreadState | null>; // Resolve parent thread\n terminate(): Promise<void>; // Soft-terminate thread\n}\n\\`\\`\\`\n\n## Subagents\n\n\\`dual_ai\\` agents can be used as subagents from prompt tool configs:\n\n- Each subagent runs in its own thread (\\`DurableThread\\`)\n- Parent/child linkage is tracked in thread metadata\n- Resumable children are visible in \\`state.children\\`\n- Parent threads create/message resumable children via built-ins (\\`subagent_create\\`, \\`subagent_message\\`)\n- Child completion results are queued back to the parent when \\`parentCommunication\\` is \\`implicit\\`\n- Explicit relationships can stay idle until code calls \\`state.notifyParent()\\` or \\`state.setStatus()\\`\n\nAccess in tools:\n\\`\\`\\`typescript\nexport default defineTool('...', schema, async (state, args) => {\n const threadId = state.threadId;\n const { messages } = await state.getMessages();\n // ...\n});\n\\`\\`\\`\n\nAccess in hooks:\n\\`\\`\\`typescript\nexport default defineHook({\n hook: 'before_create_message',\n id: 'my_hook',\n execute: async (state, message) => {\n console.log(\\`Thread: \\${state.threadId}, Agent: \\${state.agentId}\\`);\n return message;\n }\n});\n\\`\\`\\`\n\n## Quick Reference\n\n| Function | Purpose | Directory |\n|----------|---------|-----------|\n| \\`defineModel()\\` | Configure LLM provider | \\`agents/models/\\` |\n| \\`definePrompt()\\` | System instructions + tools | \\`agents/prompts/\\` |\n| \\`defineAgent()\\` | Conversation orchestration | \\`agents/agents/\\` |\n| \\`defineTool()\\` | Custom tool functions | \\`agents/tools/\\` |\n| \\`defineHook()\\` | Lifecycle interception | \\`agents/hooks/\\` |\n| \\`defineThreadEndpoint()\\` | Custom API routes | \\`agents/api/\\` |\n\n## Runtime Utilities\n\nImport from \\`@standardagents/builder\\`:\n\n\\`\\`\\`typescript\nimport {\n queueTool, // Queue another tool for execution\n injectMessage, // Add message without triggering execution\n getMessages, // Retrieve message history\n emitThreadEvent, // Send custom WebSocket events\n} from '@standardagents/builder';\n\\`\\`\\`\n\n## Documentation\n\nFull documentation: https://docs.standardagentbuilder.com\n\n- [Architecture Overview](https://docs.standardagentbuilder.com/introduction/architecture)\n- [Models](https://docs.standardagentbuilder.com/core-concepts/models)\n- [Prompts](https://docs.standardagentbuilder.com/core-concepts/prompts)\n- [Agents](https://docs.standardagentbuilder.com/core-concepts/agents)\n- [Tools](https://docs.standardagentbuilder.com/core-concepts/tools)\n- [Hooks](https://docs.standardagentbuilder.com/core-concepts/hooks)\n- [ThreadState](https://docs.standardagentbuilder.com/core-concepts/threadstate)\n- [Thread API](https://docs.standardagentbuilder.com/core-concepts/api)\n`;\n","export const MODELS_CLAUDE_MD = `# Model Definitions\n\nModels define which LLM provider and model to use for prompts.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this model configuration |\n| \\`provider\\` | \\`'openai' \\\\| 'anthropic' \\\\| 'openrouter' \\\\| 'google'\\` | Yes | LLM provider |\n| \\`model\\` | \\`string\\` | Yes | Model ID sent to provider API |\n| \\`fallbacks\\` | \\`string[]\\` | No | Fallback model names to try if primary fails |\n| \\`inputPrice\\` | \\`number\\` | No | Cost per 1M input tokens (USD) |\n| \\`outputPrice\\` | \\`number\\` | No | Cost per 1M output tokens (USD) |\n| \\`cachedPrice\\` | \\`number\\` | No | Cost per 1M cached input tokens |\n| \\`includedProviders\\` | \\`string[]\\` | No | Provider prefixes for OpenRouter routing |\n\n## Example\n\n\\`\\`\\`typescript\nimport { defineModel } from '@standardagents/builder';\n\nexport default defineModel({\n name: 'default',\n provider: 'openrouter',\n model: 'google/gemini-3-flash-preview',\n fallbacks: ['fast', 'cheap-heavy'],\n});\n\\`\\`\\`\n\n## Recommended Models (OpenRouter)\n\n| Use Case | Model ID | Description |\n|----------|----------|-------------|\n| Fast/Cheap | \\`z-ai/glm-4.5-air\\` | Quick responses, low cost |\n| Mid-tier | \\`google/gemini-3-flash-preview\\` | Good balance of speed and quality |\n| Cheap Heavy | \\`z-ai/glm-4.7\\` | More capable, still affordable |\n| Heavy | \\`google/gemini-3-pro-preview\\` | Most capable, for complex tasks |\n\n**⚠️ Google Models**: When using Google models (\\`google/gemini-*\\`), you must enable \\`reasoning\\` in your prompt configuration or tool calls will fail. See the prompts CLAUDE.md for details.\n\n## Provider API Keys\n\nSet these environment variables in \\`.dev.vars\\` (local) or Cloudflare secrets (production):\n\n| Provider | Environment Variable |\n|----------|---------------------|\n| OpenAI | \\`OPENAI_API_KEY\\` |\n| Anthropic | \\`ANTHROPIC_API_KEY\\` |\n| OpenRouter | \\`OPENROUTER_API_KEY\\` |\n| Google | \\`GOOGLE_API_KEY\\` |\n\n## Fallback Strategy\n\nWhen a model fails, fallbacks are tried in order:\n1. Primary model (2 attempts)\n2. First fallback (2 attempts)\n3. Second fallback (2 attempts)\n4. ...and so on\n\nRetries occur on: network errors, rate limits (429), server errors (5xx), auth errors (401).\n\n## OpenRouter Configuration\n\nFor OpenRouter, use the full model path:\n\n\\`\\`\\`typescript\nexport default defineModel({\n name: 'heavy',\n provider: 'openrouter',\n model: 'google/gemini-3-pro-preview',\n includedProviders: ['google'], // Prefer Google's servers\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Name by use case**, not model ID (e.g., \\`fast\\`, \\`default\\`, \\`heavy\\`)\n- **Configure fallbacks** for production reliability\n- **Set pricing** for cost tracking in logs\n- **Use environment variables** for API keys, never hardcode\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/model\n`;\n","export const PROMPTS_CLAUDE_MD = `# Prompt Definitions\n\nPrompts define system instructions, model selection, and available tools for LLM interactions.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this prompt |\n| \\`toolDescription\\` | \\`string\\` | Yes | Description shown when used as a tool |\n| \\`prompt\\` | \\`string \\\\| StructuredPrompt\\` | Yes | System instructions |\n| \\`model\\` | \\`string\\` | Yes | Model name to use (references \\`agents/models/\\`) |\n| \\`tools\\` | \\`(string \\\\| ToolConfig \\\\| SubagentToolConfig)[]\\` | No | Available tools (include ai_human agent names for handoffs and dual_ai subagent configs) |\n| \\`includeChat\\` | \\`boolean\\` | No | Include full conversation history |\n| \\`includePastTools\\` | \\`boolean\\` | No | Include previous tool results |\n| \\`parallelToolCalls\\` | \\`boolean\\` | No | Allow multiple concurrent tool calls |\n| \\`toolChoice\\` | \\`'auto' \\\\| 'none' \\\\| 'required'\\` | No | Tool calling strategy |\n| \\`requiredSchema\\` | \\`z.ZodObject\\` | No | Input validation when called as tool |\n| \\`variables\\` | \\`VariableDefinition[]\\` | No | Variable declarations (\\`name\\`, \\`type\\`, \\`required\\`, \\`scoped\\`, \\`description\\`) |\n| \\`env\\` | \\`Record<string, string>\\` | No | Prompt-level default values for variables |\n| \\`hooks\\` | \\`string[]\\` | No | Hook IDs to run for this prompt (overrides agent hooks) |\n| \\`reasoning\\` | \\`ReasoningConfig\\` | No | Extended thinking configuration |\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { definePrompt } from '@standardagents/builder';\n\nexport default definePrompt({\n name: 'customer_support',\n toolDescription: 'Handle customer support inquiries',\n model: 'default',\n prompt: \\`You are a helpful customer support agent.\nAlways be polite and professional.\nIf you cannot help, escalate to a human.\\`,\n tools: ['search_knowledge_base', 'create_ticket'],\n includeChat: true,\n});\n\\`\\`\\`\n\n## Structured Prompts\n\nInclude other prompts for reusable instruction blocks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'main_assistant',\n toolDescription: 'Primary assistant',\n model: 'default',\n prompt: [\n { type: 'text', content: 'You are a helpful assistant.\\\\n\\\\n' },\n { type: 'include', prompt: 'common_rules' }, // Includes another prompt\n { type: 'env', property: 'ASSISTANT_TONE' }, // Inject variable value\n { type: 'text', content: '\\\\n\\\\nBe concise.' },\n ],\n});\n\\`\\`\\`\n\n\\`type: 'env'\\` inserts a resolved thread variable value. Use this only for non-secret values that are safe to expose to the LLM.\n\n## Tool Configuration\n\nTools can be simple names or detailed configs:\n\n\\`\\`\\`typescript\ntools: [\n 'simple_tool', // Just the tool name\n {\n name: 'complex_tool',\n includeTextResponse: true, // Include sub-prompt text in result\n includeToolCalls: false, // Exclude sub-prompt tool calls\n includeErrors: true, // Include error details\n initUserMessageProperty: 'query', // Use this arg as initial message\n },\n],\n\\`\\`\\`\n\n### Subagent Tool Configuration\n\nUse \\`SubagentToolConfig\\` when the tool is a \\`dual_ai\\` agent:\n\n\\`\\`\\`typescript\ntools: [\n // Blocking, non-resumable (default)\n { name: 'data_processor_agent' },\n\n // Non-blocking, resumable with a single instance\n {\n name: 'browser_agent',\n blocking: false,\n immediate: {\n nameEnv: 'BROWSER_AGENT_NAME',\n descriptionEnv: 'BROWSER_AGENT_DESCRIPTION',\n scopedEnv: ['BROWSER_AGENT_API_KEY'],\n },\n optional: 'ENABLE_BROWSER_AGENT',\n initAgentNameProperty: 'name',\n resumable: {\n receives_messages: 'side_a',\n maxInstances: 1,\n parentCommunication: 'explicit',\n },\n },\n]\n\\`\\`\\`\n\nWhen prompt-configured resumable dual_ai subagents exist, the runtime auto-injects:\n- \\`subagent_create\\` for spawning new child instances\n- \\`subagent_message\\` for messaging active resumable instances\n\n\\`subagent_create\\` supports optional \\`name\\` for human-friendly child thread labels.\nPair it with \\`initAgentNameProperty\\` to map that argument into a \\`name:<value>\\` thread tag.\n\nSet \\`immediate: true\\` to run a tool automatically when the prompt activates.\nUse \\`immediate: { nameEnv, descriptionEnv, scopedEnv }\\` when you want safe per-instance bootstrap hints while keeping copied scoped env runtime-only.\nSet \\`optional: 'ENV_NAME'\\` to enable a subagent branch only when env resolves to \\`true\\`, \\`1\\`, or \\`yes\\`.\nSet \\`resumable.parentCommunication: 'explicit'\\` when the child should stay quiet until its own tools or hooks call \\`state.notifyParent()\\` or \\`state.setStatus()\\`.\nIf required scoped vars are missing, the runtime returns \\`error_code: \"subagent_env_required\"\\` with a temporary \\`GET/POST /api/threads/:id/variables/:requestId\\` endpoint in \\`error_data.endpoint\\`.\n\n## Input Validation\n\nValidate inputs when prompt is called as a tool:\n\n\\`\\`\\`typescript\nimport { z } from 'zod';\n\nexport default definePrompt({\n name: 'data_extractor',\n toolDescription: 'Extract structured data from text',\n model: 'default',\n prompt: 'Extract the requested data from the input.',\n requiredSchema: z.object({\n text: z.string().describe('Text to extract from'),\n fields: z.array(z.string()).describe('Fields to extract'),\n }),\n});\n\\`\\`\\`\n\n## Extended Thinking (Reasoning)\n\nEnable for complex reasoning tasks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'code_reviewer',\n toolDescription: 'Review code for issues',\n model: 'heavy',\n prompt: 'Review the code thoroughly...',\n reasoning: {\n effort: 'high', // 'low' | 'medium' | 'high'\n maxTokens: 16000, // Max thinking tokens\n exclude: true, // Don't include thinking in response\n },\n});\n\\`\\`\\`\n\n**⚠️ Google Models Require Reasoning**: When using Google models (\\`google/gemini-*\\`) via OpenRouter, you **must** include \\`reasoning\\` configuration or tool calls will fail. At minimum:\n\n\\`\\`\\`typescript\nreasoning: {\n effort: 'low', // Can be 'low', 'medium', or 'high'\n},\n\\`\\`\\`\n\n## Hooks\n\nAttach lifecycle hooks to a prompt:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'customer_support',\n toolDescription: 'Handle customer support',\n model: 'default',\n prompt: 'You are a support agent...',\n hooks: ['limit_to_20', 'redact_pii'], // Hook IDs from agents/hooks/\n});\n\\`\\`\\`\n\nPrompt hooks take precedence over agent hooks. See \\`agents/hooks/CLAUDE.md\\` for details.\n\n## Best Practices\n\n- **Write clear instructions** - Structure with headers and bullet points\n- **Describe tools thoroughly** - LLMs decide based on descriptions\n- **Validate inputs with Zod** - Catch errors early\n- **Use \\`includeChat\\`** for conversational context\n- **Name by purpose**, not model (e.g., \\`support_agent\\` not \\`gpt4_prompt\\`)\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/prompt\n`;\n","export const AGENTS_CLAUDE_MD = `# Agent Definitions\n\nAgents orchestrate conversations by defining prompts, stop conditions, and turn limits.\n\n## Agent Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this agent |\n| \\`type\\` | \\`'ai_human' \\\\| 'dual_ai'\\` | No | Conversation type (default: \\`ai_human\\`) |\n| \\`sideA\\` | \\`SideConfig\\` | Yes | Configuration for side A (AI in ai_human) |\n| \\`sideB\\` | \\`SideConfig\\` | No | Configuration for side B (required for dual_ai) |\n| \\`maxSessionTurns\\` | \\`number\\` | No | Max total turns across both sides |\n| \\`exposeAsTool\\` | \\`boolean\\` | No | Allow other prompts to hand off to this agent |\n| \\`toolDescription\\` | \\`string\\` | No | Description when used as tool (required if exposeAsTool) |\n| \\`env\\` | \\`Record<string, string>\\` | No | Agent-level default variable values |\n| \\`hooks\\` | \\`string[]\\` | No | Hook IDs to run for this agent (fallback if prompt has no hooks) |\n| \\`tags\\` | \\`string[]\\` | No | Tags for categorization and filtering |\n\n## Side Configuration\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`label\\` | \\`string\\` | No | Display name for this side |\n| \\`prompt\\` | \\`string\\` | Yes | Prompt name to use (references \\`agents/prompts/\\`) |\n| \\`stopOnResponse\\` | \\`boolean\\` | No | Stop turn when LLM returns text (default: true) |\n| \\`stopTool\\` | \\`string\\` | No | Tool that stops this side's turn |\n| \\`stopToolResponseProperty\\` | \\`string\\` | No | Property to extract from stop tool result |\n| \\`endConversationTool\\` | \\`string\\` | No | Tool that ends the entire conversation |\n| \\`failSessionTool\\` | \\`string\\` | No | Tool that fails and ends the entire conversation |\n| \\`statusTool\\` | \\`string\\` | No | Tool that reports subagent status to a parent registry |\n| \\`maxTurns\\` | \\`number\\` | No | Maximum turns for this side |\n| \\`manualStopCondition\\` | \\`boolean\\` | No | Enable custom stop handling via hooks |\n\n## Basic Example (AI-Human)\n\n\\`\\`\\`typescript\nimport { defineAgent } from '@standardagents/builder';\n\nexport default defineAgent({\n name: 'support_agent',\n type: 'ai_human',\n sideA: {\n label: 'Support',\n prompt: 'customer_support',\n stopOnResponse: true,\n endConversationTool: 'close_ticket',\n maxTurns: 50,\n },\n tags: ['support', 'tier-1'],\n});\n\\`\\`\\`\n\n## Dual-AI Example\n\nTwo AI agents conversing (e.g., debate, iterative refinement):\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'code_review_debate',\n type: 'dual_ai',\n maxSessionTurns: 20,\n sideA: {\n label: 'Reviewer',\n prompt: 'code_reviewer',\n stopOnResponse: true,\n },\n sideB: {\n label: 'Developer',\n prompt: 'code_defender',\n stopOnResponse: true,\n },\n});\n\\`\\`\\`\n\n## Dual-AI Subagent Pattern\n\nWhen a \\`dual_ai\\` agent is used as a subagent tool, a common split is:\n- **sideA**: performs work (tools, data gathering, execution)\n- **sideB**: reflection, verification, and quality checks\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'research_subagent',\n type: 'dual_ai',\n exposeAsTool: true,\n toolDescription: 'Researches and validates findings autonomously',\n maxSessionTurns: 16,\n sideA: {\n label: 'Worker',\n prompt: 'research_worker',\n statusTool: 'set_subagent_status',\n failSessionTool: 'fail_research_subagent',\n endConversationTool: 'finish_subagent',\n },\n sideB: {\n label: 'Reviewer',\n prompt: 'research_reviewer',\n stopOnResponse: true,\n },\n});\n\\`\\`\\`\n\n## Agent Handoffs\n\nExpose an agent for handoffs from other prompts:\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'escalation_agent',\n type: 'ai_human',\n exposeAsTool: true,\n toolDescription: 'Escalate to senior support for complex issues',\n sideA: {\n prompt: 'senior_support',\n },\n});\n\\`\\`\\`\n\nOther prompts can then include the agent name in their \\`tools\\` array to enable handoffs.\n\n## Stop Conditions (Priority Order)\n\n1. **failSessionTool** - Ends entire conversation with a terminal failure\n2. **endConversationTool** - Ends entire conversation successfully\n3. **stopTool** - Ends current side's turn\n4. **maxTurns** - Ends side's participation when reached\n5. **stopOnResponse** - Ends turn when LLM returns text\n6. **maxSessionTurns** - Ends conversation (hard limit: 250)\n\n## Hooks\n\nAttach lifecycle hooks at the agent level:\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'support_agent',\n type: 'ai_human',\n hooks: ['log_all_messages', 'sanitize_results'],\n sideA: {\n prompt: 'customer_support',\n },\n});\n\\`\\`\\`\n\nAgent hooks run as a fallback when the active prompt has no hooks defined. Prompt hooks always take precedence. See \\`agents/hooks/CLAUDE.md\\` for details.\n\n## Naming Convention\n\nAgent names **must** end with the \\`_agent\\` suffix (e.g., \\`support_agent\\`, \\`research_agent\\`).\nThis convention is enforced by the builder UI and makes agents easily identifiable in logs and code.\n\n## Best Practices\n\n- **Use descriptive names** (\\`customer_support_agent\\` not \\`agent1\\`)\n- **Always use the _agent suffix** - names like \\`support_agent\\`, \\`research_agent\\`\n- **Always set maxTurns** as a safety limit\n- **Match stop conditions to use case** - chat apps use stopOnResponse, workflows use stopTool\n- **Use labels** for clarity in logs and UI\n- **Organize with tags** for filtering\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/agent\n`;\n","export const TOOLS_CLAUDE_MD = `# Custom Tools\n\nTools extend agent capabilities beyond text generation. They allow LLMs to fetch data, perform calculations, execute side effects, and chain to other prompts or agents.\n\n## Function Signature\n\n\\`\\`\\`typescript\ndefineTool({\n description: string, // What the tool does (shown to LLM)\n args?: z.ZodObject, // Input validation schema (optional)\n execute: (state, args) => ToolResult, // Implementation\n variables?: VariableDefinition[], // Declared variables (optional)\n})\n\\`\\`\\`\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool({\n description: 'Search the knowledge base for articles matching a query',\n args: z.object({\n query: z.string().describe('Search query'),\n limit: z.number().optional().default(10).describe('Max results'),\n }),\n execute: async (state, args) => {\n const results = await searchKB(args.query, args.limit);\n return {\n status: 'success',\n result: JSON.stringify(results),\n };\n },\n});\n\\`\\`\\`\n\n## ToolResult Interface\n\n| Property | Type | Description |\n|----------|------|-------------|\n| \\`status\\` | \\`'success' \\\\| 'error'\\` | Whether the tool succeeded |\n| \\`result\\` | \\`string\\` | Tool output (required for success) |\n| \\`error\\` | \\`string\\` | Error message (for error status) |\n| \\`error_code\\` | \\`string\\` | Machine-readable error code |\n| \\`error_data\\` | \\`Record<string, unknown>\\` | Structured error payload |\n| \\`attachments\\` | \\`ToolAttachment[]\\` | Files to attach (images, etc.) |\n\n## ThreadState Access\n\nThe \\`state\\` parameter provides access to:\n\n\\`\\`\\`typescript\nexecute: async (state, args) => {\n // Thread information\n const threadId = state.thread.id;\n const thread = state.thread.instance;\n\n // Configuration\n const agentName = state.agent.name;\n const modelName = state.model.name;\n\n // Message history\n const messages = state.messages;\n\n // Thread variable resolution\n const apiKey = await state.env('GOOGLE_API_KEY');\n await state.setEnv('LAST_TOOL_RUN_AT', new Date().toISOString());\n\n // Parent state (for sub-prompts)\n const root = state.rootState;\n}\n\\`\\`\\`\n\n## Tool Without Arguments\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Get current server time',\n execute: async (state) => {\n return {\n status: 'success',\n result: new Date().toISOString(),\n };\n },\n});\n\\`\\`\\`\n\n## Error Handling\n\nReturn errors gracefully instead of throwing:\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Fetch user data',\n args: z.object({ userId: z.string() }),\n execute: async (state, args) => {\n try {\n const user = await fetchUser(args.userId);\n return { status: 'success', result: JSON.stringify(user) };\n } catch (error) {\n return {\n status: 'error',\n error: \\`Failed to fetch user: \\${error.message}\\`,\n };\n }\n },\n});\n\\`\\`\\`\n\n## Queueing Additional Tools\n\nQueue another tool to run after the current one:\n\n\\`\\`\\`typescript\nimport { queueTool } from '@standardagents/builder';\n\nexport default defineTool({\n description: 'Create order and send confirmation',\n args: z.object({ items: z.array(z.string()) }),\n execute: async (state, args) => {\n const order = await createOrder(args.items);\n\n // Queue email tool to run next\n queueTool(state, 'send_confirmation_email', {\n orderId: order.id,\n email: state.thread.metadata.userEmail,\n });\n\n return { status: 'success', result: JSON.stringify(order) };\n },\n});\n\\`\\`\\`\n\n## Injecting Messages\n\nAdd messages without triggering re-execution:\n\n\\`\\`\\`typescript\nimport { injectMessage } from '@standardagents/builder';\n\nexport default defineTool({\n description: 'Log audit event',\n args: z.object({ event: z.string() }),\n execute: async (state, args) => {\n await injectMessage(state, {\n role: 'system',\n content: \\`[AUDIT] \\${args.event}\\`,\n });\n return { status: 'success', result: 'Logged' };\n },\n});\n\\`\\`\\`\n\n## Variables and Env\n\nTools can declare variable requirements with \\`variables\\`, including \\`required\\` and \\`description\\` metadata:\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Search uploaded documents',\n args: z.object({ query: z.string() }),\n execute: async (state, args) => {\n const vectorStoreId = await state.env('VECTOR_STORE_ID');\n const results = await searchVectorStore(vectorStoreId, args.query);\n return { status: 'success', result: JSON.stringify(results) };\n },\n variables: [\n {\n name: 'VECTOR_STORE_ID',\n type: 'text',\n required: true,\n scoped: false,\n description: 'OpenAI Vector Store ID',\n },\n ],\n});\n\\`\\`\\`\n\nUse \\`scoped: true\\` for per-instance values that should not inherit from parent thread env (for example per-account OAuth tokens on subagents).\n\n## Returning Attachments\n\nTools can return file attachments (e.g., generated images):\n\n\\`\\`\\`typescript\nexport default defineTool({\n description: 'Generate a chart from data',\n args: z.object({ data: z.array(z.number()) }),\n execute: async (state, args) => {\n const chartImage = await generateChart(args.data);\n return {\n status: 'success',\n result: 'Chart generated successfully',\n attachments: [{\n name: 'chart.png',\n mimeType: 'image/png',\n data: chartImage.base64,\n width: 800,\n height: 600,\n }],\n };\n },\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Write clear descriptions** - LLMs decide tool usage based on descriptions\n- **Describe all parameters** with \\`.describe()\\` in Zod schemas\n- **Handle errors gracefully** - return error status, don't throw\n- **Use snake_case** for file names (\\`search_knowledge_base.ts\\`)\n- **Keep tools focused** - one task per tool\n- **Use \\`state.rootState\\`** when queueing from sub-prompts\n\n## Supported Zod Types\n\n- Primitives: \\`string\\`, \\`number\\`, \\`boolean\\`, \\`null\\`\n- Enums: \\`z.enum(['a', 'b', 'c'])\\`\n- Arrays: \\`z.array(z.string())\\`\n- Objects: \\`z.object({ ... })\\`\n- Optional: \\`z.string().optional()\\`\n- Default: \\`z.number().default(10)\\`\n- Nullable: \\`z.string().nullable()\\`\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/tool\n`;\n","export const HOOKS_CLAUDE_MD = `# Lifecycle Hooks\n\nHooks intercept and modify agent execution at specific lifecycle points.\n\n## Available Hooks\n\n| Hook | Signature | Purpose |\n|------|-----------|---------|\n| \\`filter_messages\\` | \\`(state: ThreadState, messages: Message[]) => Message[]\\` | Filter raw messages before LLM context |\n| \\`prefilter_llm_history\\` | \\`(state: ThreadState, messages: LLMMessage[]) => LLMMessage[]\\` | Modify chat completion messages before LLM |\n| \\`before_create_message\\` | \\`(state: ThreadState, message: Message) => Message\\` | Modify message before database insert |\n| \\`after_create_message\\` | \\`(state: ThreadState, message: Message) => void\\` | Run logic after message created |\n| \\`before_update_message\\` | \\`(state: ThreadState, id: string, updates: Record) => Record\\` | Modify updates before message update |\n| \\`after_update_message\\` | \\`(state: ThreadState, message: Message) => void\\` | Run logic after message updated |\n| \\`before_store_tool_result\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult\\` | Modify tool result before storage |\n| \\`after_tool_call_success\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult \\\\| null\\` | Process successful tool execution |\n| \\`after_tool_call_failure\\` | \\`(state: ThreadState, toolCall: HookToolCall, result: HookToolResult) => HookToolResult \\\\| null\\` | Process failed tool execution |\n\nAll hooks receive \\`ThreadState\\` as their first parameter, providing access to thread identity, message history, and resource loading.\n\n## Creating a Hook\n\nEach hook file exports a default \\`defineHook\\` call with three properties:\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'filter_messages', // Hook type\n id: 'limit_recent_messages', // Unique ID (snake_case)\n execute: async (state, messages) => {\n return messages.slice(-20);\n }\n});\n\\`\\`\\`\n\n## Hook Scoping\n\nHooks are scoped to **prompts** or **agents** via their ID:\n\n\\`\\`\\`typescript\n// In a prompt definition\ndefinePrompt({\n name: 'customer_support',\n hooks: ['limit_recent_messages', 'redact_pii'],\n // ...\n});\n\n// In an agent definition\ndefineAgent({\n name: 'support_agent',\n hooks: ['log_all_messages'],\n // ...\n});\n\\`\\`\\`\n\n- **Prompt hooks** take precedence over agent hooks\n- If a prompt defines hooks, only those run (agent hooks are skipped)\n- If no prompt hooks are defined, agent hooks run as fallback\n- Hooks are filtered by type at runtime\n\n## File Naming\n\nHook files can use **any name** — the hook type and ID are defined inside the file:\n\n\\`\\`\\`\nagents/hooks/\n├── my_filter.ts # Could contain any hook type\n├── redact_sensitive_data.ts\n├── log_tool_usage.ts\n└── add_metadata.ts\n\\`\\`\\`\n\n## Examples\n\n### Filter Messages (Limit Context)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'filter_messages',\n id: 'limit_to_20',\n execute: async (state, messages) => {\n return messages.slice(-20);\n }\n});\n\\`\\`\\`\n\n### Prefilter LLM History (Redact Content)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'prefilter_llm_history',\n id: 'redact_pii',\n execute: async (state, messages) => {\n return messages.map(msg => ({\n ...msg,\n content: typeof msg.content === 'string'\n ? msg.content.replace(/\\\\b\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\\\\b/g, '[REDACTED]')\n : msg.content,\n }));\n }\n});\n\\`\\`\\`\n\n### Before Create Message (Add Metadata)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'before_create_message',\n id: 'add_version_metadata',\n execute: async (state, message) => {\n if (message.role === 'user' && message.content) {\n return { ...message, content: \\`[v1.0] \\${message.content}\\` };\n }\n return message;\n }\n});\n\\`\\`\\`\n\n### Before Store Tool Result (Sanitize)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'before_store_tool_result',\n id: 'sanitize_results',\n execute: async (state, toolCall, toolResult) => {\n // toolCall: { id, type: 'function', function: { name, arguments } }\n // toolResult: { status, result?, error?, stack?, attachments? }\n if (toolResult.result) {\n return { ...toolResult, result: toolResult.result.replace(/secret/gi, '[REDACTED]') };\n }\n return toolResult;\n }\n});\n\\`\\`\\`\n\n### After Tool Call Success (Logging)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'after_tool_call_success',\n id: 'log_tool_success',\n execute: async (state, toolCall, result) => {\n console.log(\\`Tool \\${toolCall.function.name} succeeded\\`);\n return null; // Return null to use original result\n }\n});\n\\`\\`\\`\n\n### After Tool Call Failure (Recovery)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook({\n hook: 'after_tool_call_failure',\n id: 'weather_fallback',\n execute: async (state, toolCall, result) => {\n if (toolCall.function.name === 'fetch_weather') {\n return {\n status: 'success',\n result: JSON.stringify({ temp: 'unavailable', fallback: true }),\n };\n }\n return null; // Use original error for other tools\n }\n});\n\\`\\`\\`\n\n## Hook Categories\n\n**Transformation hooks** (return modified data):\n- \\`filter_messages\\`\n- \\`prefilter_llm_history\\`\n- \\`before_create_message\\`\n- \\`before_update_message\\`\n- \\`before_store_tool_result\\`\n- \\`after_tool_call_success\\` (return modified result or null)\n- \\`after_tool_call_failure\\` (return modified result or null)\n\n**Event hooks** (side effects only):\n- \\`after_create_message\\`\n- \\`after_update_message\\`\n\n## Best Practices\n\n- **Keep hooks fast** - target <100ms execution\n- **Wrap in try-catch** - hooks continue on error (original data preserved)\n- **Use unique IDs** - hook IDs must be snake_case and unique across the project\n- **Scope appropriately** - assign hooks to prompts or agents that need them\n- **Document purpose** with clear comments\n- **Use for cross-cutting concerns** - logging, redaction, enrichment\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/hook\n`;\n","export const API_CLAUDE_MD = `# Thread-Specific API Endpoints\n\nDefine custom API endpoints that operate on specific threads with access to the thread's ThreadState.\n\n## File-Based Routing\n\n| File Pattern | HTTP Method | Route |\n|--------------|-------------|-------|\n| \\`name.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.get.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.post.ts\\` | POST | \\`/api/threads/:id/name\\` |\n| \\`name.put.ts\\` | PUT | \\`/api/threads/:id/name\\` |\n| \\`name.delete.ts\\` | DELETE | \\`/api/threads/:id/name\\` |\n| \\`nested/route.ts\\` | GET | \\`/api/threads/:id/nested/route\\` |\n\n## Basic Example\n\n\\`\\`\\`typescript\n// agents/api/status.get.ts -> GET /api/threads/:id/status\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n const { messages, total } = await state.getMessages();\n return Response.json({\n threadId: state.threadId,\n messageCount: total,\n status: 'active',\n });\n});\n\\`\\`\\`\n\n## Handler Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| \\`req\\` | \\`Request\\` | The incoming HTTP request |\n| \\`state\\` | \\`ThreadState\\` | Thread state with messages, identity, file system, etc. |\n\nNote: \\`state.execution\\` is always \\`null\\` in endpoints since the thread is at rest.\n\n## ThreadState Methods\n\nAccess thread data through the state object:\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n // Thread identity\n console.log('Thread ID:', state.threadId);\n console.log('Agent ID:', state.agentId);\n console.log('User ID:', state.userId);\n\n // Message operations\n const { messages, total, hasMore } = await state.getMessages({\n limit: 100,\n offset: 0,\n order: 'desc',\n });\n\n // Thread env (thread scope + active descendants)\n const approvalGate = await state.env('TOPDOWN_APPROVAL_GATE');\n await state.setEnv('TOPDOWN_APPROVAL_GATE', approvalGate || 'open');\n\n // File system operations\n const files = await state.findFiles('**/*.json');\n const data = await state.readFile('/data/config.json');\n\n // Resource loading\n const agent = await state.loadAgent('my-agent');\n const prompt = await state.loadPrompt('my-prompt');\n\n return Response.json({ messages, total });\n});\n\\`\\`\\`\n\n## POST with Request Body\n\n\\`\\`\\`typescript\n// agents/api/export.post.ts -> POST /api/threads/:id/export\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n const body = await req.json();\n const { format = 'json' } = body;\n\n const { messages } = await state.getMessages();\n\n if (format === 'csv') {\n const csv = messages.map(m => \\`\\${m.role},\\${m.content}\\`).join('\\\\n');\n return new Response(csv, {\n headers: { 'Content-Type': 'text/csv' },\n });\n }\n\n return Response.json(messages);\n});\n\\`\\`\\`\n\n## Nested Routes\n\nCreate directories for nested routes:\n\n\\`\\`\\`\nagents/api/\n├── status.get.ts -> GET /api/threads/:id/status\n├── export.post.ts -> POST /api/threads/:id/export\n└── messages/\n ├── count.ts -> GET /api/threads/:id/messages/count\n └── search.post.ts -> POST /api/threads/:id/messages/search\n\\`\\`\\`\n\n## Error Handling\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n try {\n const data = await riskyOperation();\n return Response.json(data);\n } catch (error) {\n return Response.json({ error: error.message }, { status: 500 });\n }\n});\n\\`\\`\\`\n\n## File System Operations\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/spec';\n\nexport default defineThreadEndpoint(async (req, state) => {\n // Read files\n const content = await state.readFile('/data/file.txt');\n\n // Write files\n await state.writeFile('/output/result.json', JSON.stringify(data), 'application/json');\n\n // List directory\n const { entries } = await state.readdirFile('/data');\n\n // Search files\n const matches = await state.grepFiles('pattern');\n const paths = await state.findFiles('**/*.ts');\n\n return Response.json({ success: true });\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Keep handlers fast** - endpoints are in the request path\n- **Paginate large queries** - use limit/offset for messages\n- **Validate input data** - check request body before processing\n- **Use descriptive file names** - \\`export.post.ts\\` not \\`ep1.ts\\`\n- **Return proper status codes** - 200, 400, 404, 500\n- **Import from spec** - use \\`@standardagents/spec\\` for \\`defineThreadEndpoint\\`\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/core-concepts/api\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, modify, applyEdits } from 'jsonc-parser';\nimport { loadFile, writeFile, generateCode, parseModule, builders } from 'magicast';\nimport { addVitePlugin } from 'magicast/helpers';\nimport { logger } from '../utils/logger.js';\nimport {\n ROOT_CLAUDE_MD,\n MODELS_CLAUDE_MD,\n PROMPTS_CLAUDE_MD,\n AGENTS_CLAUDE_MD,\n TOOLS_CLAUDE_MD,\n HOOKS_CLAUDE_MD,\n API_CLAUDE_MD,\n} from '../templates/index.js';\n\ninterface ScaffoldOptions {\n force?: boolean;\n}\n\n// Template for wrangler.jsonc\nconst WRANGLER_TEMPLATE = (name: string) => {\n const today = new Date().toISOString().split('T')[0];\n return `{\n \"$schema\": \"node_modules/wrangler/config-schema.json\",\n \"name\": \"${name}\",\n \"main\": \"worker/index.ts\",\n \"compatibility_date\": \"${today}\",\n \"compatibility_flags\": [\"nodejs_compat\"],\n \"observability\": {\n \"enabled\": true\n },\n \"assets\": {\n \"directory\": \"dist/client\",\n \"not_found_handling\": \"single-page-application\",\n \"binding\": \"ASSETS\",\n \"run_worker_first\": [\"/**\"]\n },\n \"durable_objects\": {\n \"bindings\": [\n {\n \"name\": \"AGENT_BUILDER_THREAD\",\n \"class_name\": \"DurableThread\"\n },\n {\n \"name\": \"AGENT_BUILDER\",\n \"class_name\": \"DurableAgentBuilder\"\n }\n ]\n },\n \"migrations\": [\n {\n \"tag\": \"v1\",\n \"new_sqlite_classes\": [\"DurableThread\"]\n },\n {\n \"tag\": \"v2\",\n \"new_sqlite_classes\": [\"DurableAgentBuilder\"]\n }\n ]\n}\n`;\n};\n\n// Templates for Durable Object files\nconst THREAD_TS = `import { DurableThread } from 'virtual:@standardagents/builder'\n\nexport default class Thread extends DurableThread {}\n`;\n\nconst AGENT_BUILDER_TS = `import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n\nexport default class AgentBuilder extends DurableAgentBuilder {}\n`;\n\n// Worker entry point template\nconst WORKER_INDEX = `import { router } from \"virtual:@standardagents/builder\"\nimport DurableThread from '../agents/Thread';\nimport DurableAgentBuilder from '../agents/AgentBuilder';\n\nexport default {\n async fetch(request, env) {\n const res = await router(request, env)\n return res ?? new Response(null, { status: 404 })\n },\n} satisfies ExportedHandler<Env>\n\nexport { DurableThread, DurableAgentBuilder }\n`;\n\n// Utility functions\nfunction getProjectName(cwd: string): string {\n const packageJsonPath = path.join(cwd, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkg.name) {\n return pkg.name.replace(/^@[^/]+\\//, ''); // Remove scope if present\n }\n } catch {\n // Ignore parse errors\n }\n }\n return path.basename(cwd);\n}\n\nfunction findViteConfig(cwd: string): string | null {\n const candidates = ['vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nfunction findWranglerConfig(cwd: string): string | null {\n const candidates = ['wrangler.jsonc', 'wrangler.json'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nasync function modifyViteConfig(configPath: string, force: boolean): Promise<boolean> {\n try {\n const mod = await loadFile(configPath);\n\n // Check if plugins already include our plugins\n const code = fs.readFileSync(configPath, 'utf-8');\n const hasCloudflare = code.includes('@cloudflare/vite-plugin') || code.includes('cloudflare()');\n const hasAgentBuilder = code.includes('@standardagents/builder') || code.includes('agentbuilder()');\n\n if (hasCloudflare && hasAgentBuilder && !force) {\n logger.info('Vite config already includes Standard Agents plugins');\n return true;\n }\n\n // Add agentbuilder plugin if not present (must come before cloudflare)\n if (!hasAgentBuilder || force) {\n addVitePlugin(mod, {\n from: '@standardagents/builder',\n imported: 'agentbuilder',\n constructor: 'agentbuilder',\n options: { mountPoint: '/' },\n });\n logger.success('Added agentbuilder plugin to vite.config');\n }\n\n // Add cloudflare plugin if not present\n if (!hasCloudflare || force) {\n addVitePlugin(mod, {\n from: '@cloudflare/vite-plugin',\n imported: 'cloudflare',\n constructor: 'cloudflare',\n });\n logger.success('Added cloudflare plugin to vite.config');\n }\n\n await writeFile(mod, configPath);\n return true;\n } catch (error) {\n logger.warning(`Could not automatically modify vite.config: ${error}`);\n logger.log('');\n logger.log('Please manually add the following to your vite.config.ts:');\n logger.log('');\n logger.log(` import { agentbuilder } from '@standardagents/builder'`);\n logger.log(` import { cloudflare } from '@cloudflare/vite-plugin'`);\n logger.log('');\n logger.log(` plugins: [agentbuilder({ mountPoint: '/' }), cloudflare()]`);\n logger.log('');\n return false;\n }\n}\n\nfunction createOrUpdateWranglerConfig(cwd: string, projectName: string, force: boolean): boolean {\n const existingConfig = findWranglerConfig(cwd);\n\n if (existingConfig && !force) {\n // Update existing config\n try {\n const text = fs.readFileSync(existingConfig, 'utf-8');\n const config = parse(text);\n\n // Check if already configured\n const hasBindings = config.durable_objects?.bindings?.some(\n (b: any) => b.name === 'AGENT_BUILDER_THREAD' || b.name === 'AGENT_BUILDER'\n );\n\n if (hasBindings) {\n logger.info('wrangler.jsonc already configured for Standard Agents');\n return true;\n }\n\n // Add bindings to existing config\n let result = text;\n\n // Add durable_objects if not present\n if (!config.durable_objects) {\n const edits = modify(result, ['durable_objects'], {\n bindings: [\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n ]\n }, {});\n result = applyEdits(result, edits);\n } else {\n // Add to existing bindings\n const bindings = config.durable_objects.bindings || [];\n bindings.push(\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n );\n const edits = modify(result, ['durable_objects', 'bindings'], bindings, {});\n result = applyEdits(result, edits);\n }\n\n // Add migrations if not present\n if (!config.migrations) {\n const edits = modify(result, ['migrations'], [\n { tag: 'v1', new_sqlite_classes: ['DurableThread'] },\n { tag: 'v2', new_sqlite_classes: ['DurableAgentBuilder'] }\n ], {});\n result = applyEdits(result, edits);\n }\n\n // Update main entry point if needed\n if (!config.main || !config.main.includes('worker')) {\n const edits = modify(result, ['main'], 'worker/index.ts', {});\n result = applyEdits(result, edits);\n }\n\n // Add assets configuration if not present\n if (!config.assets) {\n const edits = modify(result, ['assets'], {\n directory: 'dist/client',\n not_found_handling: 'single-page-application',\n binding: 'ASSETS',\n run_worker_first: ['/**']\n }, {});\n result = applyEdits(result, edits);\n }\n\n fs.writeFileSync(existingConfig, result, 'utf-8');\n logger.success('Updated wrangler.jsonc with Standard Agents configuration');\n return true;\n } catch (error) {\n logger.warning(`Could not update wrangler config: ${error}`);\n return false;\n }\n }\n\n // Create new wrangler.jsonc\n const wranglerPath = path.join(cwd, 'wrangler.jsonc');\n const sanitizedName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n fs.writeFileSync(wranglerPath, WRANGLER_TEMPLATE(sanitizedName), 'utf-8');\n logger.success('Created wrangler.jsonc');\n return true;\n}\n\nfunction getWorkerEntryPoint(cwd: string): string {\n // Check wrangler config for main entry\n const wranglerConfig = findWranglerConfig(cwd);\n if (wranglerConfig) {\n try {\n const text = fs.readFileSync(wranglerConfig, 'utf-8');\n const config = parse(text);\n if (config.main) {\n return path.join(cwd, config.main);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Default to worker/index.ts\n return path.join(cwd, 'worker', 'index.ts');\n}\n\nasync function createOrUpdateWorkerEntry(cwd: string, force: boolean): Promise<boolean> {\n const entryPath = getWorkerEntryPoint(cwd);\n const entryDir = path.dirname(entryPath);\n\n // Create worker directory if needed\n if (!fs.existsSync(entryDir)) {\n fs.mkdirSync(entryDir, { recursive: true });\n logger.success(`Created ${path.relative(cwd, entryDir)} directory`);\n }\n\n // If file doesn't exist, create it\n if (!fs.existsSync(entryPath)) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n // File exists - try to modify it\n const content = fs.readFileSync(entryPath, 'utf-8');\n\n // Check if already configured\n const hasRouter = content.includes('virtual:@standardagents/builder') && content.includes('router');\n const hasDurableExports = content.includes('DurableThread') && content.includes('DurableAgentBuilder');\n\n if (hasRouter && hasDurableExports && !force) {\n logger.info(`${path.relative(cwd, entryPath)} already configured`);\n return true;\n }\n\n try {\n const mod = await loadFile(entryPath);\n\n // Add imports\n if (!content.includes('virtual:@standardagents/builder') || force) {\n mod.imports.$add({\n from: 'virtual:@standardagents/builder',\n imported: 'router',\n local: 'router',\n });\n }\n\n if (!content.includes(\"'../agents/Thread'\") || force) {\n mod.imports.$add({\n from: '../agents/Thread',\n imported: 'default',\n local: 'DurableThread',\n });\n }\n\n if (!content.includes(\"'../agents/AgentBuilder'\") || force) {\n mod.imports.$add({\n from: '../agents/AgentBuilder',\n imported: 'default',\n local: 'DurableAgentBuilder',\n });\n }\n\n // Check if there's a default export with fetch\n const { code } = generateCode(mod);\n\n // If we can't easily add the router, just overwrite\n if (force || !hasRouter) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Updated ${path.relative(cwd, entryPath)} with Standard Agents router`);\n }\n\n return true;\n } catch (error) {\n // Fall back to template\n if (force) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n logger.warning(`Could not automatically modify ${path.relative(cwd, entryPath)}`);\n logger.log('');\n logger.log('Please ensure your worker entry point includes:');\n logger.log('');\n logger.log(` import { router } from \"virtual:@standardagents/builder\"`);\n logger.log(` import DurableThread from '../agents/Thread';`);\n logger.log(` import DurableAgentBuilder from '../agents/AgentBuilder';`);\n logger.log('');\n logger.log(' // In your fetch handler:');\n logger.log(' const res = router(request, env)');\n logger.log(' if (res) return res');\n logger.log('');\n logger.log(' // Export Durable Objects:');\n logger.log(' export { DurableThread, DurableAgentBuilder }');\n logger.log('');\n return false;\n }\n}\n\nfunction createDurableObjects(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n // Create Thread.ts\n const threadPath = path.join(agentsDir, 'Thread.ts');\n if (!fs.existsSync(threadPath)) {\n fs.writeFileSync(threadPath, THREAD_TS, 'utf-8');\n logger.success('Created agents/Thread.ts');\n } else {\n logger.info('agents/Thread.ts already exists');\n }\n\n // Create AgentBuilder.ts\n const agentBuilderPath = path.join(agentsDir, 'AgentBuilder.ts');\n if (!fs.existsSync(agentBuilderPath)) {\n fs.writeFileSync(agentBuilderPath, AGENT_BUILDER_TS, 'utf-8');\n logger.success('Created agents/AgentBuilder.ts');\n } else {\n logger.info('agents/AgentBuilder.ts already exists');\n }\n}\n\nfunction createDirectoriesAndDocs(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n // Create project root CLAUDE.md (for AI assistants to understand the project)\n const rootDocPath = path.join(cwd, 'CLAUDE.md');\n if (!fs.existsSync(rootDocPath)) {\n fs.writeFileSync(rootDocPath, ROOT_CLAUDE_MD, 'utf-8');\n logger.success('Created CLAUDE.md');\n }\n\n // Create subdirectories with their CLAUDE.md files\n const directories = [\n { path: 'agents/agents', doc: AGENTS_CLAUDE_MD },\n { path: 'agents/prompts', doc: PROMPTS_CLAUDE_MD },\n { path: 'agents/models', doc: MODELS_CLAUDE_MD },\n { path: 'agents/tools', doc: TOOLS_CLAUDE_MD },\n { path: 'agents/hooks', doc: HOOKS_CLAUDE_MD },\n { path: 'agents/api', doc: API_CLAUDE_MD },\n ];\n\n for (const dir of directories) {\n const dirPath = path.join(cwd, dir.path);\n const docPath = path.join(dirPath, 'CLAUDE.md');\n\n // Create directory\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n logger.success(`Created ${dir.path}`);\n }\n\n // Create CLAUDE.md\n if (!fs.existsSync(docPath)) {\n fs.writeFileSync(docPath, dir.doc, 'utf-8');\n logger.success(`Created ${dir.path}/CLAUDE.md`);\n }\n }\n}\n\nfunction updateTsConfig(cwd: string): void {\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsconfigPath)) {\n logger.info('No tsconfig.json found, skipping TypeScript configuration');\n return;\n }\n\n try {\n const text = fs.readFileSync(tsconfigPath, 'utf-8');\n const config = parse(text);\n let result = text;\n\n // Add types to compilerOptions\n const types = config.compilerOptions?.types || [];\n const newTypes = [\n './worker-configuration.d.ts',\n './.agents/types.d.ts',\n './.agents/virtual-module.d.ts'\n ].filter(t => !types.includes(t));\n\n if (newTypes.length > 0) {\n const allTypes = [...types, ...newTypes];\n const edits = modify(result, ['compilerOptions', 'types'], allTypes, {});\n result = applyEdits(result, edits);\n }\n\n // Add worker and agents to include\n const include = config.include || [];\n const newIncludes = ['worker', 'agents'].filter(i => !include.includes(i));\n\n if (newIncludes.length > 0) {\n const allIncludes = [...include, ...newIncludes];\n const edits = modify(result, ['include'], allIncludes, {});\n result = applyEdits(result, edits);\n }\n\n if (newTypes.length > 0 || newIncludes.length > 0) {\n fs.writeFileSync(tsconfigPath, result, 'utf-8');\n logger.success('Updated tsconfig.json with Standard Agents types');\n } else {\n logger.info('tsconfig.json already configured');\n }\n } catch (error) {\n logger.warning('Could not update tsconfig.json, you may need to add types manually');\n }\n}\n\nfunction cleanupViteDefaults(cwd: string): void {\n // Remove default Vite files that we don't need\n const filesToRemove = [\n 'src/main.ts',\n 'src/style.css',\n 'src/counter.ts',\n 'src/typescript.svg',\n 'src/vite-env.d.ts',\n 'index.html',\n 'public/vite.svg',\n ];\n\n const dirsToRemove = ['src', 'public'];\n\n for (const file of filesToRemove) {\n const filePath = path.join(cwd, file);\n if (fs.existsSync(filePath)) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // Ignore errors\n }\n }\n }\n\n // Remove empty directories\n for (const dir of dirsToRemove) {\n const dirPath = path.join(cwd, dir);\n if (fs.existsSync(dirPath)) {\n try {\n const files = fs.readdirSync(dirPath);\n if (files.length === 0) {\n fs.rmdirSync(dirPath);\n }\n } catch {\n // Ignore errors\n }\n }\n }\n}\n\nexport async function scaffold(options: ScaffoldOptions = {}) {\n const cwd = process.cwd();\n const projectName = getProjectName(cwd);\n const force = options.force || false;\n\n logger.info('Scaffolding Standard Agents...');\n logger.log('');\n\n // 1. Find and modify vite.config\n const viteConfigPath = findViteConfig(cwd);\n if (viteConfigPath) {\n await modifyViteConfig(viteConfigPath, force);\n } else {\n logger.warning('No vite.config found. Please create one with cloudflare and agentbuilder plugins.');\n }\n\n // 2. Create or update wrangler.jsonc\n createOrUpdateWranglerConfig(cwd, projectName, force);\n\n // 3. Create or update worker entry point\n await createOrUpdateWorkerEntry(cwd, force);\n\n // 4. Create Durable Object files\n createDurableObjects(cwd);\n\n // 5. Create agent directories with documentation\n createDirectoriesAndDocs(cwd);\n\n // 6. Update tsconfig.json\n updateTsConfig(cwd);\n\n // 7. Clean up default Vite files (only if force is true, meaning fresh project)\n if (force) {\n cleanupViteDefaults(cwd);\n }\n\n logger.log('');\n logger.success('Standard Agents scaffolding complete!');\n logger.log('');\n logger.log('Your project structure:');\n logger.log('');\n logger.log(' CLAUDE.md # Architecture documentation');\n logger.log(' agents/');\n logger.log(' ├── Thread.ts # Durable Object for threads');\n logger.log(' ├── AgentBuilder.ts # Durable Object for agent state');\n logger.log(' ├── agents/ # Agent definitions');\n logger.log(' ├── prompts/ # Prompt definitions');\n logger.log(' ├── models/ # Model configurations');\n logger.log(' ├── tools/ # Custom tools');\n logger.log(' ├── hooks/ # Lifecycle hooks');\n logger.log(' └── api/ # Thread API endpoints');\n logger.log(' worker/');\n logger.log(' └── index.ts # Cloudflare Worker entry point');\n logger.log('');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport crypto from 'node:crypto';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { logger } from '../utils/logger.js';\nimport { scaffold } from './scaffold.js';\n\ninterface InitOptions {\n yes?: boolean;\n template?: string;\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const onData = (char: string) => {\n const c = char.toString();\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004': // Ctrl+D\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n break;\n case '\\u0003': // Ctrl+C\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F': // Backspace\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n }\n break;\n default:\n password += c;\n stdout.write('*');\n break;\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Use shell: false to properly handle arguments with spaces\n // Node's spawn will handle argument escaping automatically\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with hyphens\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n}\n\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | 'bun' {\n // Check environment variable first (most reliable when running via npx/pnpm exec)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n // Check for lockfiles\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\n// Injected at build time by tsup (see tsup.config.ts)\n// During publish, CLI_PUBLISH_VERSION env var is set to the actual version being published\ndeclare const __CLI_VERSION__: string;\n\n/**\n * Get the package version specifier to use when installing @standardagents packages.\n *\n * - In workspace mode (STANDARDAGENTS_WORKSPACE=1), returns 'workspace:*' for pnpm linking\n * - Otherwise returns the exact CLI version (e.g., '0.11.0-next.abc123')\n */\nfunction getPackageVersion(): string {\n // For local development in a pnpm workspace, use workspace protocol\n if (process.env.STANDARDAGENTS_WORKSPACE === '1') {\n return 'workspace:*';\n }\n return __CLI_VERSION__;\n}\n\nasync function selectPackageManager(detected: 'npm' | 'pnpm' | 'yarn' | 'bun'): Promise<'npm' | 'pnpm' | 'yarn' | 'bun'> {\n const options = ['npm', 'pnpm', 'yarn', 'bun'] as const;\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n // Move cursor up to overwrite previous render (except first time)\n stdout.write('\\x1B[?25l'); // Hide cursor\n\n // Clear and redraw\n stdout.write(`\\x1B[${options.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n // Handle arrow keys (escape sequences)\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nexport async function init(projectNameArg?: string, options: InitOptions = {}) {\n const cwd = process.cwd();\n const detectedPm = detectPackageManager();\n const template = options.template || 'vanilla-ts';\n\n logger.log('');\n logger.info('Creating a new Standard Agents project...');\n logger.log('');\n\n // Select package manager\n let pm: 'npm' | 'pnpm' | 'yarn' | 'bun';\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Run create vite\n logger.log('');\n logger.info(`Step 1: Creating Vite project with ${template} template...`);\n logger.log('');\n\n try {\n // Determine the correct create command based on package manager\n // All package managers should use create-vite@latest to ensure the latest version\n // Use --no-interactive to skip prompts (like \"Install with npm and start now?\")\n let createCmd: string;\n let createArgs: string[];\n\n switch (pm) {\n case 'pnpm':\n createCmd = 'pnpm';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--yes'];\n break;\n case 'yarn':\n createCmd = 'yarn';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--yes'];\n break;\n case 'bun':\n createCmd = 'bun';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--yes'];\n break;\n default:\n createCmd = 'npm';\n createArgs = ['create', 'vite@latest', projectName, '--', '--template', template, '--yes'];\n }\n\n await runCommand(createCmd, createArgs, cwd);\n\n // create-vite may occasionally return zero after a canceled interactive flow;\n // treat missing package.json as a hard scaffold failure.\n const createdPackageJsonPath = path.join(projectPath, 'package.json');\n if (!fs.existsSync(createdPackageJsonPath)) {\n throw new Error('Vite project scaffolding did not create package.json');\n }\n } catch (error) {\n logger.error('Failed to create Vite project');\n process.exit(1);\n }\n\n // Create vite.config.ts if it doesn't exist (some templates may not include one)\n const viteConfigPath = path.join(projectPath, 'vite.config.ts');\n if (!fs.existsSync(viteConfigPath)) {\n const viteConfigContent = `import { defineConfig } from 'vite'\n\nexport default defineConfig({\n plugins: [],\n})\n`;\n fs.writeFileSync(viteConfigPath, viteConfigContent, 'utf-8');\n logger.success('Created vite.config.ts');\n }\n\n // Update package.json name to kebab-case (handles spaces and special characters)\n const packageJsonPath = path.join(projectPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const kebabName = toKebabCase(projectName);\n if (packageJson.name !== kebabName) {\n packageJson.name = kebabName;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n // Step 2: Collect API keys and admin password\n logger.log('');\n logger.info('Step 2: Configuring environment variables...');\n logger.log('');\n\n // Generate encryption key\n const encryptionKey = crypto.randomBytes(32).toString('hex');\n\n // Ask for API keys and admin password\n let openrouterKey = '';\n let openaiKey = '';\n let adminPassword = '';\n\n if (!options.yes) {\n logger.log('API keys are optional but required to use AI models.');\n logger.log('You can add them later by editing .dev.vars');\n logger.log('');\n\n openrouterKey = await prompt('OpenRouter API key (optional, press Enter to skip): ');\n openaiKey = await prompt('OpenAI API key (optional, press Enter to skip): ');\n\n logger.log('');\n logger.log('Set a temporary admin password for development access.');\n logger.log('Press Enter to use the default password \"admin\".');\n logger.log('');\n\n while (true) {\n adminPassword = await promptPassword('Temporary admin password: ');\n\n if (!adminPassword) {\n adminPassword = 'admin';\n break;\n }\n\n const confirmPassword = await promptPassword('Confirm password: ');\n\n if (adminPassword === confirmPassword) {\n break;\n } else {\n logger.warning('Passwords do not match. Please try again.');\n logger.log('');\n adminPassword = '';\n }\n }\n }\n\n // Default admin password if not provided (for --yes flag)\n if (!adminPassword) {\n adminPassword = 'admin';\n }\n\n // Step 3: Install Standard Agents dependencies\n logger.log('');\n logger.info('Step 3: Installing Standard Agents dependencies...');\n logger.log('');\n\n try {\n const installCmd = pm === 'npm' ? 'install' : 'add';\n const devFlag = pm === 'npm' ? '--save-dev' : '-D';\n const packageVersion = getPackageVersion();\n\n // Install dev dependencies\n await runCommand(pm, [\n installCmd, devFlag,\n '@cloudflare/vite-plugin',\n 'wrangler',\n ], projectPath);\n\n // Build list of regular dependencies\n // All @standardagents packages are version-locked to CLI version\n // We explicitly install all packages at the exact version to avoid\n // npm/pnpm resolving transitive deps with semver ranges (which excludes prereleases)\n const deps = [\n `@standardagents/builder@${packageVersion}`,\n `@standardagents/spec@${packageVersion}`,\n `@standardagents/sip@${packageVersion}`,\n 'zod'\n ];\n\n // Add provider packages based on API keys provided\n if (openaiKey) {\n deps.push(`@standardagents/openai@${packageVersion}`);\n }\n if (openrouterKey) {\n deps.push(`@standardagents/openrouter@${packageVersion}`);\n }\n\n // Install regular dependencies (builder needs to be in dependencies, not devDependencies)\n await runCommand(pm, [installCmd, ...deps], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Step 4: Run scaffold in the new project directory\n logger.log('');\n logger.info('Step 4: Configuring Standard Agents...');\n logger.log('');\n\n // Change to project directory for scaffold\n process.chdir(projectPath);\n\n await scaffold({ force: true });\n\n // Write .dev.vars file with collected environment variables\n logger.log('');\n logger.info('Writing environment configuration...');\n logger.log('');\n\n // Create .dev.vars file\n const devVarsLines: string[] = [\n '# Standard Agents Environment Variables',\n '# This file contains secrets for local development only',\n '# Do not commit this file to version control',\n '',\n '# Encryption key for secure data (auto-generated)',\n `ENCRYPTION_KEY=${encryptionKey}`,\n '',\n '# Temporary admin password for development access',\n `SUPER_ADMIN_PASSWORD=${adminPassword}`,\n '',\n '# AI Provider API Keys',\n '# Uncomment and add your keys as needed',\n ];\n\n if (openrouterKey) {\n devVarsLines.push(`OPENROUTER_API_KEY=${openrouterKey}`);\n } else {\n devVarsLines.push('# OPENROUTER_API_KEY=your-openrouter-key');\n }\n\n if (openaiKey) {\n devVarsLines.push(`OPENAI_API_KEY=${openaiKey}`);\n } else {\n devVarsLines.push('# OPENAI_API_KEY=your-openai-key');\n }\n\n devVarsLines.push('');\n\n const devVarsPath = path.join(projectPath, '.dev.vars');\n fs.writeFileSync(devVarsPath, devVarsLines.join('\\n'), 'utf-8');\n logger.success('Created .dev.vars with encryption key');\n\n // Add .dev.vars to .gitignore if it exists\n const gitignorePath = path.join(projectPath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.dev.vars')) {\n fs.appendFileSync(gitignorePath, '\\n# Local environment variables\\n.dev.vars\\n');\n logger.success('Added .dev.vars to .gitignore');\n }\n }\n\n // Step 5: Generate Cloudflare types\n logger.log('');\n logger.info('Step 5: Generating Cloudflare types...');\n logger.log('');\n\n try {\n await runCommand('npx', ['wrangler', 'types'], projectPath);\n } catch (error) {\n logger.warning('Could not generate types automatically. Run \"npx wrangler types\" manually.');\n }\n\n // Done!\n logger.log('');\n logger.success('Project created successfully!');\n logger.log('');\n logger.log('Next steps:');\n logger.log('');\n logger.log(` cd ${projectName}`);\n logger.log(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n logger.log('');\n logger.log('For more information, visit: https://standardagents.ai/docs');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport net from 'node:net';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport { logger } from '../utils/logger.js';\n\ninterface InitChatOptions {\n yes?: boolean;\n framework?: 'vite' | 'nextjs';\n}\n\ntype Framework = 'vite' | 'nextjs';\ntype PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\n/**\n * Get the @standardagents/react version to use based on the CLI's version.\n * If CLI is running a prerelease (e.g., 0.11.0-next.1), use that tag.\n * Otherwise, use the exact CLI version.\n */\nfunction getReactPackageVersion(): string {\n try {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js -> ../package.json\n const pkgPath = path.resolve(__dirname, '../package.json');\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const version = pkg.version as string;\n\n const prereleaseMatch = version.match(/-([a-z]+)\\./i);\n if (prereleaseMatch) {\n return prereleaseMatch[1];\n }\n\n return `^${version}`;\n } catch {\n return 'latest';\n }\n}\n\n/**\n * Get the path to the chat source directory bundled with the CLI\n */\nfunction getChatSourceDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js -> ../chat\n return path.resolve(__dirname, '../chat');\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const redraw = () => {\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n };\n\n const onData = (data: string) => {\n const str = data.toString();\n\n for (let i = 0; i < str.length; i++) {\n const c = str[i];\n\n if (c === '\\x1B') {\n if (str[i + 1] === '[') {\n i += 2;\n continue;\n }\n continue;\n }\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004':\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n return;\n case '\\u0003':\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F':\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n redraw();\n }\n break;\n default:\n if (c.charCodeAt(0) >= 32) {\n password += c;\n stdout.write('*');\n }\n break;\n }\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\nasync function selectPackageManager(detected: PackageManager): Promise<PackageManager> {\n const options: PackageManager[] = ['npm', 'pnpm', 'yarn', 'bun'];\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[0J');\n\n stdout.write('Select a package manager:\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n stdout.write('Select a package manager:\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nasync function selectFramework(): Promise<Framework> {\n const options: { value: Framework; label: string }[] = [\n { value: 'vite', label: 'Vite (React + TypeScript)' },\n { value: 'nextjs', label: 'Next.js (App Router)' },\n ];\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${options.length + 1}A`);\n stdout.write('\\x1B[0J');\n\n stdout.write('Select a framework:\\n');\n options.forEach((opt, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt.label}\\x1B[0m\\n`);\n });\n };\n\n stdout.write('Select a framework:\\n');\n options.forEach((opt, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt.label}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(options[selectedIndex].value);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function isPortOpen(port: number): Promise<boolean> {\n const tryConnect = (host: string): Promise<boolean> => {\n return new Promise((resolve) => {\n const socket = new net.Socket();\n socket.setTimeout(200);\n\n socket.on('connect', () => {\n socket.destroy();\n resolve(true);\n });\n\n socket.on('timeout', () => {\n socket.destroy();\n resolve(false);\n });\n\n socket.on('error', () => {\n socket.destroy();\n resolve(false);\n });\n\n socket.connect(port, host);\n });\n };\n\n if (await tryConnect('127.0.0.1')) return true;\n if (await tryConnect('::1')) return true;\n return false;\n}\n\nasync function isAgentbuilderInstance(url: string): Promise<boolean> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1000);\n\n const response = await fetch(`${url}/api/agents`, {\n signal: controller.signal,\n headers: { 'Accept': 'application/json' },\n });\n\n clearTimeout(timeout);\n\n if (response.status === 401) {\n return true;\n }\n\n if (response.ok) {\n const data = await response.json();\n return Array.isArray(data.agents);\n }\n return false;\n } catch {\n return false;\n }\n}\n\nasync function detectAgentbuilderInstance(): Promise<string | null> {\n const portsToScan = [\n 5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180,\n 3000, 3001, 3002, 3003,\n 8080, 8000, 4000,\n ];\n\n logger.log('\\x1B[90mScanning for running agentbuilder instance...\\x1B[0m');\n\n const openPorts: number[] = [];\n\n await Promise.all(\n portsToScan.map(async (port) => {\n if (await isPortOpen(port)) {\n openPorts.push(port);\n }\n })\n );\n\n for (const port of openPorts.sort((a, b) => a - b)) {\n const url = `http://localhost:${port}`;\n if (await isAgentbuilderInstance(url)) {\n return url;\n }\n }\n\n return null;\n}\n\n/**\n * Copy a directory recursively, skipping certain files/folders\n */\nfunction copyDir(src: string, dest: string, skip: string[] = []) {\n if (!fs.existsSync(dest)) {\n fs.mkdirSync(dest, { recursive: true });\n }\n\n const entries = fs.readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n if (skip.includes(entry.name)) continue;\n\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath, skip);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n}\n\n/**\n * Update package.json with correct SDK version and project name\n */\nfunction updatePackageJson(filePath: string, projectName: string, reactVersion: string) {\n const pkg = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n\n // Update name\n pkg.name = projectName;\n\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n\n // Remove private flag for user projects\n delete pkg.private;\n\n // Remove workspace-specific scripts\n delete pkg.scripts?.['dev:next'];\n delete pkg.scripts?.['build:next'];\n\n fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n}\n\n/**\n * Update package.json for Next.js project\n */\nfunction updateNextPackageJson(filePath: string, projectName: string, reactVersion: string) {\n const pkg = JSON.parse(fs.readFileSync(filePath, 'utf-8'));\n\n // Update name\n pkg.name = projectName;\n\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n\n // Remove private flag for user projects\n delete pkg.private;\n\n // Update scripts for Next.js only\n pkg.scripts = {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n };\n\n // Remove vite-specific deps\n delete pkg.devDependencies?.['@tailwindcss/vite'];\n delete pkg.devDependencies?.['@vitejs/plugin-react'];\n delete pkg.devDependencies?.['vite'];\n\n fs.writeFileSync(filePath, JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n}\n\nexport async function initChat(projectNameArg?: string, options: InitChatOptions = {}) {\n const cwd = process.cwd();\n const chatSourceDir = getChatSourceDir();\n\n // Check if chat source exists\n if (!fs.existsSync(chatSourceDir)) {\n logger.error('Chat source files not found. This CLI installation may be corrupted.');\n process.exit(1);\n }\n\n logger.log('');\n logger.info('Scaffolding a frontend chat application...');\n logger.log('');\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Select framework\n let framework: Framework;\n if (options.framework) {\n framework = options.framework;\n } else if (options.yes) {\n framework = 'vite';\n } else {\n framework = await selectFramework();\n logger.log('');\n }\n\n // Step 2: Get Agentbuilder URL\n let serverUrl: string;\n if (options.yes) {\n serverUrl = 'http://localhost:5173';\n } else {\n const detectedUrl = await detectAgentbuilderInstance();\n\n if (detectedUrl) {\n logger.success(`Found agentbuilder at ${detectedUrl}`);\n const urlInput = await prompt(`Agentbuilder dev server URL [${detectedUrl}]: `);\n serverUrl = urlInput || detectedUrl;\n } else {\n logger.log('\\x1B[90mNo running agentbuilder instance found\\x1B[0m');\n const urlInput = await prompt('Agentbuilder dev server URL [http://localhost:5173]: ');\n serverUrl = urlInput || 'http://localhost:5173';\n }\n\n if (!isValidUrl(serverUrl)) {\n logger.error('Invalid URL format');\n process.exit(1);\n }\n }\n\n // Select package manager\n const detectedPm = detectPackageManager();\n let pm: PackageManager;\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n logger.log('');\n logger.info(`Creating ${framework === 'vite' ? 'Vite' : 'Next.js'} project...`);\n logger.log('');\n\n // Create project directory\n fs.mkdirSync(projectPath, { recursive: true });\n\n // Get React package version\n const reactVersion = getReactPackageVersion();\n\n // Copy source files based on framework\n if (framework === 'vite') {\n await scaffoldVite(projectPath, chatSourceDir, projectName, serverUrl, reactVersion);\n } else {\n await scaffoldNextjs(projectPath, chatSourceDir, projectName, serverUrl, reactVersion);\n }\n\n // Install dependencies\n logger.log('');\n logger.info('Installing dependencies...');\n logger.log('');\n\n try {\n await runCommand(pm, pm === 'npm' ? ['install'] : ['install'], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Success message\n logger.log('');\n logger.success('Chat UI scaffolded successfully!');\n logger.log('');\n\n // Start dev server\n logger.info('Starting development server...');\n logger.log('');\n\n const devArgs = pm === 'npm' ? ['run', 'dev'] : ['dev'];\n const devProcess = spawn(pm, devArgs, {\n cwd: projectPath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: false,\n });\n\n let browserOpened = false;\n const openBrowser = (url: string) => {\n if (browserOpened) return;\n browserOpened = true;\n const openCmd = process.platform === 'darwin' ? 'open' :\n process.platform === 'win32' ? 'start' : 'xdg-open';\n spawn(openCmd, [url], { stdio: 'ignore', detached: true }).unref();\n };\n\n devProcess.stdout?.on('data', (data: Buffer) => {\n const text = data.toString();\n process.stdout.write(data);\n\n const urlMatch = text.match(/Local:\\s+(https?:\\/\\/localhost:\\d+\\/?)/);\n if (urlMatch && !browserOpened) {\n openBrowser(urlMatch[1]);\n }\n });\n\n devProcess.stderr?.on('data', (data: Buffer) => {\n process.stderr.write(data);\n });\n\n devProcess.on('error', (error) => {\n logger.error(`Failed to start dev server: ${error.message}`);\n process.exit(1);\n });\n}\n\nasync function scaffoldVite(\n projectPath: string,\n chatSourceDir: string,\n projectName: string,\n serverUrl: string,\n reactVersion: string\n) {\n // Copy shared source files\n copyDir(path.join(chatSourceDir, 'src'), path.join(projectPath, 'src'), []);\n logger.success('Copied src/');\n\n // Copy vite-specific files to root\n const viteDir = path.join(chatSourceDir, 'vite');\n\n // Copy and update index.html to point to src/main.tsx\n let indexHtml = fs.readFileSync(path.join(viteDir, 'index.html'), 'utf-8');\n indexHtml = indexHtml.replace('src=\"/main.tsx\"', 'src=\"/src/main.tsx\"');\n fs.writeFileSync(path.join(projectPath, 'index.html'), indexHtml, 'utf-8');\n logger.success('Created index.html');\n\n fs.copyFileSync(path.join(viteDir, 'main.tsx'), path.join(projectPath, 'src', 'main.tsx'));\n logger.success('Created src/main.tsx');\n\n // Read and adapt vite.config.ts (remove root and adjust paths)\n let viteConfig = fs.readFileSync(path.join(viteDir, 'vite.config.ts'), 'utf-8');\n // Simplify config for standalone project\n viteConfig = `import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\nimport tailwindcss from '@tailwindcss/vite'\n\nexport default defineConfig({\n plugins: [\n react(),\n tailwindcss(),\n ],\n})\n`;\n fs.writeFileSync(path.join(projectPath, 'vite.config.ts'), viteConfig, 'utf-8');\n logger.success('Created vite.config.ts');\n\n // Copy and update tsconfig\n fs.copyFileSync(path.join(chatSourceDir, 'tsconfig.json'), path.join(projectPath, 'tsconfig.json'));\n // Update tsconfig to remove vite-specific include\n const tsconfig = JSON.parse(fs.readFileSync(path.join(projectPath, 'tsconfig.json'), 'utf-8'));\n tsconfig.include = ['src'];\n delete tsconfig.compilerOptions?.paths;\n fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', 'utf-8');\n logger.success('Created tsconfig.json');\n\n // Copy and update package.json\n fs.copyFileSync(path.join(chatSourceDir, 'package.json'), path.join(projectPath, 'package.json'));\n // Read, modify, and write package.json\n const pkg = JSON.parse(fs.readFileSync(path.join(projectPath, 'package.json'), 'utf-8'));\n pkg.name = projectName;\n pkg.scripts = {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n };\n delete pkg.private;\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n // Remove next.js deps\n delete pkg.dependencies?.['next'];\n delete pkg.devDependencies?.['@tailwindcss/postcss'];\n delete pkg.devDependencies?.['postcss'];\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n logger.success('Created package.json');\n\n // Create .env\n const envContent = `# Agentbuilder connection\nVITE_AGENTBUILDER_URL=${serverUrl}\n`;\n fs.writeFileSync(path.join(projectPath, '.env'), envContent, 'utf-8');\n logger.success('Created .env');\n\n // Create .gitignore\n fs.writeFileSync(path.join(projectPath, '.gitignore'), `node_modules\ndist\n.env\n`, 'utf-8');\n logger.success('Created .gitignore');\n\n // Update main.tsx paths (it expects ../src/ but now they're in same dir)\n let mainTsx = fs.readFileSync(path.join(projectPath, 'src', 'main.tsx'), 'utf-8');\n mainTsx = mainTsx\n .replace(/from '\\.\\.\\/src\\//g, \"from './\")\n .replace(/import '\\.\\.\\/src\\//g, \"import './\");\n fs.writeFileSync(path.join(projectPath, 'src', 'main.tsx'), mainTsx, 'utf-8');\n\n // Copy favicon\n if (fs.existsSync(path.join(viteDir, 'favicon.svg'))) {\n fs.copyFileSync(path.join(viteDir, 'favicon.svg'), path.join(projectPath, 'favicon.svg'));\n logger.success('Created favicon.svg');\n }\n}\n\nasync function scaffoldNextjs(\n projectPath: string,\n chatSourceDir: string,\n projectName: string,\n serverUrl: string,\n reactVersion: string\n) {\n // Copy shared source files to src/\n copyDir(path.join(chatSourceDir, 'src'), path.join(projectPath, 'src'), []);\n logger.success('Copied src/');\n\n // Copy next-specific files\n const nextDir = path.join(chatSourceDir, 'next');\n\n // Copy app directory\n copyDir(path.join(nextDir, 'app'), path.join(projectPath, 'app'), []);\n logger.success('Copied app/');\n\n // Copy next.config.ts\n fs.copyFileSync(path.join(nextDir, 'next.config.ts'), path.join(projectPath, 'next.config.ts'));\n logger.success('Created next.config.ts');\n\n // Copy postcss.config.mjs\n fs.copyFileSync(path.join(nextDir, 'postcss.config.mjs'), path.join(projectPath, 'postcss.config.mjs'));\n logger.success('Created postcss.config.mjs');\n\n // Create tsconfig.json for Next.js\n const tsconfig = {\n compilerOptions: {\n target: \"ES2017\",\n lib: [\"dom\", \"dom.iterable\", \"esnext\"],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: \"esnext\",\n moduleResolution: \"bundler\",\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: \"preserve\",\n incremental: true,\n plugins: [{ name: \"next\" }],\n paths: {\n \"@/*\": [\"./src/*\"]\n }\n },\n include: [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n exclude: [\"node_modules\"]\n };\n fs.writeFileSync(path.join(projectPath, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2) + '\\n', 'utf-8');\n logger.success('Created tsconfig.json');\n\n // Create package.json for Next.js\n const pkg = JSON.parse(fs.readFileSync(path.join(chatSourceDir, 'package.json'), 'utf-8'));\n pkg.name = projectName;\n pkg.scripts = {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n };\n delete pkg.private;\n // Update @standardagents/react version\n if (pkg.dependencies?.['@standardagents/react']) {\n pkg.dependencies['@standardagents/react'] = reactVersion;\n }\n // Remove vite-specific deps\n delete pkg.devDependencies?.['@tailwindcss/vite'];\n delete pkg.devDependencies?.['@vitejs/plugin-react'];\n delete pkg.devDependencies?.['vite'];\n fs.writeFileSync(path.join(projectPath, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf-8');\n logger.success('Created package.json');\n\n // Create .env.local\n const envContent = `# Agentbuilder connection\nNEXT_PUBLIC_AGENTBUILDER_URL=${serverUrl}\n`;\n fs.writeFileSync(path.join(projectPath, '.env.local'), envContent, 'utf-8');\n logger.success('Created .env.local');\n\n // Create .gitignore\n fs.writeFileSync(path.join(projectPath, '.gitignore'), `node_modules\n.next\nout\n.env.local\n`, 'utf-8');\n logger.success('Created .gitignore');\n\n // Update layout.tsx paths\n let layoutTsx = fs.readFileSync(path.join(projectPath, 'app', 'layout.tsx'), 'utf-8');\n layoutTsx = layoutTsx.replace(/from '\\.\\.\\/\\.\\.\\/src\\//g, \"from '../src/\");\n fs.writeFileSync(path.join(projectPath, 'app', 'layout.tsx'), layoutTsx, 'utf-8');\n\n // Update page.tsx paths\n let pageTsx = fs.readFileSync(path.join(projectPath, 'app', 'page.tsx'), 'utf-8');\n pageTsx = pageTsx.replace(/from '\\.\\.\\/\\.\\.\\/src\\//g, \"from '../src/\");\n fs.writeFileSync(path.join(projectPath, 'app', 'page.tsx'), pageTsx, 'utf-8');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../utils/logger.js';\n\n/**\n * Item selection state for extract/copy decision\n */\ninterface SelectionItem {\n name: string;\n type: 'agent' | 'prompt' | 'tool' | 'model' | 'hook';\n filePath: string;\n mode: 'extract' | 'copy';\n isShared: boolean;\n sharedWith: string[];\n}\n\n/**\n * Interactive select prompt for choosing from a list of options.\n */\nasync function selectAgent(agents: string[]): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const renderOptions = () => {\n stdout.write('\\x1B[?25l'); // Hide cursor\n stdout.write(`\\x1B[${agents.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select an agent to pack (use arrows, enter to confirm):\\n');\n agents.forEach((agent, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${agent}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select an agent to pack (use arrows, enter to confirm):\\n');\n agents.forEach((agent, i) => {\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${agent}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + agents.length) % agents.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % agents.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(agents[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\n/**\n * Interactive item mode selector for extract/copy decisions.\n */\nasync function selectItemModes(\n items: SelectionItem[],\n _agentName: string\n): Promise<SelectionItem[]> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = 0;\n\n const getDisplayLines = () => {\n const lines: string[] = [];\n lines.push('');\n lines.push('Remove originals? (space to toggle, enter to confirm)');\n lines.push('');\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const isSelected = i === selectedIndex;\n const cursor = isSelected ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const modeText = item.mode === 'extract'\n ? '\\x1B[32m(extract)\\x1B[0m'\n : '\\x1B[90m(copy)\\x1B[0m';\n\n lines.push(`${cursor} ${item.name} \\x1B[90m(${item.type})\\x1B[0m ${modeText}`);\n }\n\n lines.push('');\n return lines;\n };\n\n const render = (initial = false) => {\n const lines = getDisplayLines();\n if (!initial) {\n stdout.write('\\x1B[?25l');\n stdout.write(`\\x1B[${lines.length}A`);\n stdout.write('\\x1B[0J');\n }\n stdout.write(lines.join('\\n') + '\\n');\n };\n\n render(true);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h');\n };\n\n const onData = (key: string) => {\n if (key === '\\x1B[A' || key === 'k') {\n selectedIndex = (selectedIndex - 1 + items.length) % items.length;\n render();\n } else if (key === '\\x1B[B' || key === 'j') {\n selectedIndex = (selectedIndex + 1) % items.length;\n render();\n } else if (key === ' ') {\n items[selectedIndex].mode = items[selectedIndex].mode === 'extract' ? 'copy' : 'extract';\n render();\n } else if (key === '\\r' || key === '\\n') {\n cleanup();\n resolve(items);\n } else if (key === '\\x03') {\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\ninterface PackOptions {\n output?: string;\n npm?: boolean;\n version?: string;\n noRemove?: boolean;\n noInteractive?: boolean;\n}\n\n/**\n * Check if this is a valid Standard Agents project.\n */\nfunction isStandardAgentsProject(): boolean {\n // Check for agents directory\n if (!fs.existsSync('agents')) {\n return false;\n }\n\n // Check for @standardagents/builder dependency\n try {\n const pkgJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n return '@standardagents/builder' in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Pack an agent with all its dependencies.\n */\nexport async function pack(agentName: string | undefined, options: PackOptions) {\n logger.info('Packing agent...\\n');\n\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of packing service (uses separate entry point without Cloudflare deps)\n let PackingService: any;\n try {\n const packing = await import('@standardagents/builder/packing');\n PackingService = packing.PackingService;\n } catch (err) {\n logger.error('Failed to load packing service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed and built.');\n if (err instanceof Error) {\n logger.info(`Error: ${err.message}`);\n }\n process.exit(1);\n }\n\n const packingService = new PackingService();\n\n // If no agent name provided, show interactive select\n if (!agentName) {\n const agents = packingService.listAgents(rootDir);\n\n if (agents.length === 0) {\n logger.error('No agents found in agents/agents/');\n process.exit(1);\n }\n\n if (agents.length === 1) {\n // Only one agent, use it directly\n agentName = agents[0];\n logger.info(`Found one agent: ${agentName}`);\n } else {\n // Multiple agents, show interactive select\n console.log('');\n agentName = await selectAgent(agents);\n console.log('');\n }\n }\n\n // At this point agentName is guaranteed to be defined (we exit if no agents found)\n if (!agentName) {\n // This should never happen, but satisfies TypeScript\n logger.error('No agent selected');\n process.exit(1);\n }\n const selectedAgent = agentName;\n\n logger.info(`Analyzing agent: ${selectedAgent}`);\n\n // Analyze the agent\n const analysis = await packingService.analyzeAgent(selectedAgent, rootDir);\n\n if (analysis.errors.length > 0) {\n logger.error('Analysis failed:');\n for (const error of analysis.errors) {\n console.log(` - ${error}`);\n }\n process.exit(1);\n }\n\n // Show analysis results\n console.log('');\n logger.info('Discovered constituents:');\n console.log(` Agents: ${analysis.constituents.agents.map((a: { name: string }) => a.name).join(', ') || '(none)'}`);\n console.log(` Prompts: ${analysis.constituents.prompts.map((p: { name: string }) => p.name).join(', ') || '(none)'}`);\n console.log(` Tools: ${analysis.constituents.tools.map((t: { name: string }) => t.name).join(', ') || '(none)'}`);\n console.log(` Models: ${analysis.constituents.models.map((m: { name: string }) => m.name).join(', ') || '(none)'}`);\n console.log(` Hooks: ${analysis.constituents.hooks.map((h: { name: string }) => h.name).join(', ') || '(none)'}`);\n\n // Show warnings\n if (analysis.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of analysis.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n // Build selection items from analysis\n const selectionItems: SelectionItem[] = [];\n\n for (const agent of analysis.constituents.agents) {\n selectionItems.push({\n name: agent.name,\n type: 'agent',\n filePath: agent.filePath,\n mode: agent.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: agent.sharedWith.length > 0,\n sharedWith: agent.sharedWith,\n });\n }\n\n for (const prompt of analysis.constituents.prompts) {\n selectionItems.push({\n name: prompt.name,\n type: 'prompt',\n filePath: prompt.filePath,\n mode: prompt.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: prompt.sharedWith.length > 0,\n sharedWith: prompt.sharedWith,\n });\n }\n\n for (const tool of analysis.constituents.tools) {\n selectionItems.push({\n name: tool.name,\n type: 'tool',\n filePath: tool.filePath,\n mode: tool.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: tool.sharedWith.length > 0,\n sharedWith: tool.sharedWith,\n });\n }\n\n for (const model of analysis.constituents.models) {\n selectionItems.push({\n name: model.name,\n type: 'model',\n filePath: model.filePath,\n mode: model.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: model.sharedWith.length > 0,\n sharedWith: model.sharedWith,\n });\n }\n\n for (const hook of analysis.constituents.hooks) {\n selectionItems.push({\n name: hook.name,\n type: 'hook',\n filePath: hook.filePath,\n mode: hook.sharedWith.length > 0 ? 'copy' : 'extract',\n isShared: hook.sharedWith.length > 0,\n sharedWith: hook.sharedWith,\n });\n }\n\n // Show interactive selector unless --no-interactive is specified\n let itemSelections: { name: string; type: string; filePath: string; mode: 'extract' | 'copy' }[] | undefined;\n\n if (!options.noInteractive && process.stdin.isTTY && selectionItems.length > 0) {\n console.log('');\n const selections = await selectItemModes(selectionItems, selectedAgent);\n itemSelections = selections.map(s => ({\n name: s.name,\n type: s.type,\n filePath: s.filePath,\n mode: s.mode,\n }));\n console.log('');\n }\n\n // Determine output directory\n const outputDir = options.output || path.join(rootDir, 'agents', 'packed');\n\n // Execute packing\n logger.info(`Packing to: ${outputDir}`);\n\n const result = await packingService.pack({\n agentName: selectedAgent,\n rootDir,\n outputDir,\n version: options.version || '1.0.0',\n npm: options.npm || false,\n removeOriginals: itemSelections ? false : !options.noRemove, // Let itemSelections handle removal\n packageId: `standardagent-${selectedAgent.replace(/_/g, '-')}`,\n itemSelections,\n });\n\n if (!result.success) {\n logger.error(`Packing failed: ${result.error}`);\n process.exit(1);\n }\n\n // Show result\n console.log('');\n logger.success('Packing complete!');\n console.log(` Package ID: ${result.packageId}`);\n console.log(` Output: ${result.outputPath}`);\n console.log(` Files: ${result.filesCreated.length} created`);\n\n if (result.filesRemoved && result.filesRemoved.length > 0) {\n console.log(` Removed: ${result.filesRemoved.length} original files`);\n }\n\n if (result.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of result.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n if (options.npm) {\n console.log('');\n logger.info('NPM package structure created. To publish:');\n console.log(` cd ${result.outputPath}`);\n console.log(' npm publish');\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../utils/logger.js';\n\ninterface UnpackOptions {\n noSignatures?: boolean;\n}\n\n/**\n * Check if this is a valid Standard Agents project.\n */\nfunction isStandardAgentsProject(): boolean {\n // Check for agents directory\n if (!fs.existsSync('agents')) {\n return false;\n }\n\n // Check for @standardagents/builder dependency\n try {\n const pkgJson = JSON.parse(fs.readFileSync('package.json', 'utf-8'));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n return '@standardagents/builder' in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Unpack a packed agent to the local agents directory.\n */\nexport async function unpack(pkgIdentifier: string | undefined, options: UnpackOptions) {\n logger.info('Unpacking agent...\\n');\n\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of unpacking service\n let UnpackingService: any;\n try {\n const builder = await import('@standardagents/builder/runtime');\n UnpackingService = (builder as any).UnpackingService;\n\n if (!UnpackingService) {\n const packing = await import('@standardagents/builder');\n UnpackingService = (packing as any).UnpackingService;\n }\n } catch (err) {\n logger.error('Failed to load unpacking service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed.');\n process.exit(1);\n }\n\n const unpackingService = new UnpackingService();\n\n // If no package identifier provided, list available packages\n if (!pkgIdentifier) {\n const packages = await unpackingService.listPackages(rootDir);\n\n if (packages.length === 0) {\n logger.info('No packed agents found.');\n logger.info('Pack an agent with: agents pack <agent-name>');\n process.exit(0);\n }\n\n logger.info('Available packed agents:');\n for (const pkg of packages) {\n console.log(` - ${pkg.packageId} (${pkg.version}) [${pkg.source}]`);\n console.log(` Entry: ${pkg.entryAgent}`);\n console.log(` Path: ${pkg.path}`);\n console.log('');\n }\n logger.info('Run: agents unpack <package-id>');\n process.exit(0);\n }\n\n logger.info(`Unpacking: ${pkgIdentifier}`);\n\n // Execute unpacking\n const result = await unpackingService.unpack({\n package: pkgIdentifier,\n rootDir,\n keepSignatures: !options.noSignatures,\n });\n\n if (!result.success) {\n logger.error(`Unpacking failed: ${result.error}`);\n process.exit(1);\n }\n\n // Show result\n console.log('');\n logger.success('Unpacking complete!');\n console.log(` Package: ${result.packageId}`);\n console.log(` Files: ${result.filesCreated.length} created`);\n\n if (result.filesCreated.length > 0) {\n console.log('');\n logger.info('Created files:');\n for (const file of result.filesCreated) {\n const relPath = path.relative(rootDir, file);\n console.log(` - ${relPath}`);\n }\n }\n\n if (result.warnings.length > 0) {\n console.log('');\n logger.warning('Warnings:');\n for (const warning of result.warnings) {\n console.log(` - ${warning}`);\n }\n }\n\n if (options.noSignatures) {\n console.log('');\n logger.info('Package signatures removed - files are fully editable.');\n } else {\n console.log('');\n logger.info('Package signatures preserved - files are editable but marked as packed.');\n }\n}\n\n/**\n * List all packed agents.\n */\nexport async function listPacked() {\n // Verify this is a Standard Agents project\n if (!isStandardAgentsProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Make sure you have @standardagents/builder installed and an agents/ directory.');\n process.exit(1);\n }\n\n const rootDir = process.cwd();\n\n // Dynamic import of unpacking service\n let UnpackingService: any;\n try {\n const builder = await import('@standardagents/builder/runtime');\n UnpackingService = (builder as any).UnpackingService;\n\n if (!UnpackingService) {\n const packing = await import('@standardagents/builder');\n UnpackingService = (packing as any).UnpackingService;\n }\n } catch (err) {\n logger.error('Failed to load unpacking service from @standardagents/builder');\n logger.info('Make sure @standardagents/builder is installed.');\n process.exit(1);\n }\n\n const unpackingService = new UnpackingService();\n const packages = await unpackingService.listPackages(rootDir);\n\n if (packages.length === 0) {\n logger.info('No packed agents found.');\n logger.info('Pack an agent with: agents pack <agent-name>');\n return;\n }\n\n logger.info('Discovered packed agents:\\n');\n\n for (const pkg of packages) {\n console.log(`${pkg.packageId} (${pkg.version})`);\n console.log(` Source: ${pkg.source}`);\n console.log(` Entry: ${pkg.entryAgent}`);\n console.log(` Path: ${pkg.path}`);\n console.log('');\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\nimport chalk from 'chalk';\nimport { logger } from '../utils/logger.js';\n\n// --- Types ---\n\ninterface DeployManifest {\n agents: string[];\n builder_version: string;\n}\n\ninterface PlatformManifestResponse {\n latest_builder_version: string;\n minimum_builder_version: string;\n}\n\ninterface DeployResponse {\n deploy: {\n id: string;\n account_id: string;\n builder_version: string;\n status: string;\n created_at: number;\n completed_at: number;\n };\n}\n\ninterface DeployErrorResponse {\n error?: { code: string; message: string };\n errors?: string[];\n}\n\nexport interface DeployOptions {\n apiKey?: string;\n endpoint?: string;\n}\n\n// --- Constants ---\n\nconst DEFAULT_ENDPOINT = 'https://api.standardagents.ai';\n\nconst FREE_TIER_BUNDLE_LIMIT = 5 * 1024 * 1024; // 5 MB\n\n// --- Pure helper functions (exported for testing) ---\n\n/** Parse a .env file into key-value pairs. Ignores comments and empty lines. */\nexport function parseEnvFile(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith('#')) continue;\n const eqIndex = trimmed.indexOf('=');\n if (eqIndex === -1) continue;\n const key = trimmed.slice(0, eqIndex).trim();\n let value = trimmed.slice(eqIndex + 1).trim();\n // Strip surrounding quotes and handle escaped quotes inside\n if (value.startsWith('\"') && value.endsWith('\"')) {\n value = value.slice(1, -1).replace(/\\\\\"/g, '\"');\n } else if (value.startsWith(\"'\") && value.endsWith(\"'\")) {\n value = value.slice(1, -1);\n }\n result[key] = value;\n }\n return result;\n}\n\n/**\n * Compare two semver strings. Returns -1 if a < b, 0 if equal, 1 if a > b.\n * Pre-release versions (e.g. 1.0.0-alpha) are treated as less than the release version.\n */\nexport function compareVersions(a: string, b: string): number {\n // Strip v prefix and split off pre-release suffix\n const [coreA, preA] = a.replace(/^v/, '').split('-', 2);\n const [coreB, preB] = b.replace(/^v/, '').split('-', 2);\n\n const partsA = coreA.split('.').map(Number);\n const partsB = coreB.split('.').map(Number);\n for (let i = 0; i < 3; i++) {\n const va = partsA[i] ?? 0;\n const vb = partsB[i] ?? 0;\n if (va < vb) return -1;\n if (va > vb) return 1;\n }\n\n // Equal core versions — pre-release is less than release\n if (preA && !preB) return -1;\n if (!preA && preB) return 1;\n return 0;\n}\n\n/** Validate bundle size against the free tier limit. Returns null if OK, or a warning message. */\nexport function validateBundleSize(sizeBytes: number): string | null {\n if (sizeBytes > FREE_TIER_BUNDLE_LIMIT) {\n return `Bundle size (${formatBytes(sizeBytes)}) exceeds the free tier limit (${formatBytes(FREE_TIER_BUNDLE_LIMIT)}). A paid plan may be required.`;\n }\n return null;\n}\n\n/** Create a deploy manifest from agent names and builder version. */\nexport function createManifest(agents: string[], builderVersion: string): DeployManifest {\n return {\n agents,\n builder_version: builderVersion,\n };\n}\n\n/** Format bytes into a human-readable string. */\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/** Format a deploy error response into a human-readable message. */\nexport function formatDeployError(response: DeployErrorResponse): string {\n if (response.error) {\n return `${response.error.code}: ${response.error.message}`;\n }\n if (response.errors && response.errors.length > 0) {\n return response.errors.join('\\n');\n }\n return 'Unknown error';\n}\n\n// --- IO helper functions (exported for testing) ---\n\n/** Check if the current directory is a Standard Agents project. */\nexport function detectProject(): boolean {\n const hasWranglerJsonc = fs.existsSync('wrangler.jsonc') || fs.existsSync('wrangler.json');\n const hasAgentsDir = fs.existsSync('agents/agents');\n return hasWranglerJsonc || hasAgentsDir;\n}\n\n/**\n * Load deploy configuration from options, env vars, and .env file.\n * Throws if API key is not found (instead of process.exit, for testability).\n */\nexport function loadConfig(options: DeployOptions): { apiKey: string; endpoint: string } {\n // Read .env file once (if it exists) as the lowest-priority source\n const envFileVars = fs.existsSync('.env')\n ? parseEnvFile(fs.readFileSync('.env', 'utf-8'))\n : {};\n\n // API key: CLI flag > env var > .env file\n const apiKey = options.apiKey || process.env.PLATFORM_API_KEY || envFileVars.PLATFORM_API_KEY;\n if (!apiKey) {\n throw new Error(\n 'No API key found. Provide one with --api-key, set PLATFORM_API_KEY env var, or add it to .env'\n );\n }\n\n // Endpoint: CLI flag > env var > .env file > default\n const endpoint = options.endpoint || process.env.PLATFORM_ENDPOINT || envFileVars.PLATFORM_ENDPOINT || DEFAULT_ENDPOINT;\n\n return { apiKey, endpoint };\n}\n\n/**\n * Discover agent names from agents/agents/ directory.\n * Returns agent names extracted from defineAgent() calls, falling back to filenames.\n */\nexport function discoverAgents(): string[] {\n const agentsDir = 'agents/agents';\n if (!fs.existsSync(agentsDir)) return [];\n\n const scriptExtensions = new Set(['.ts', '.js', '.mts', '.mjs']);\n const files = fs.readdirSync(agentsDir).filter(f => scriptExtensions.has(path.extname(f)));\n\n return files.map(file => {\n const filePath = path.join(agentsDir, file);\n // Guard against symlinks pointing outside the project\n const realPath = fs.realpathSync(filePath);\n if (!realPath.startsWith(fs.realpathSync('.'))) {\n return path.basename(file, path.extname(file));\n }\n const content = fs.readFileSync(filePath, 'utf-8');\n // Match name property inside defineAgent(), handling nested objects via [\\s\\S]\n const nameMatch = content.match(/defineAgent\\s*\\(\\s*\\{[\\s\\S]*?\\bname\\s*:\\s*['\"]([^'\"]+)['\"]/);\n return nameMatch ? nameMatch[1] : path.basename(file, path.extname(file));\n });\n}\n\n/** Read the installed @standardagents/builder version. */\nexport function getBuilderVersion(): string {\n const searchPaths = [\n 'node_modules/@standardagents/builder/package.json',\n '../node_modules/@standardagents/builder/package.json',\n ];\n for (const p of searchPaths) {\n if (fs.existsSync(p)) {\n const pkg = JSON.parse(fs.readFileSync(p, 'utf-8'));\n return pkg.version;\n }\n }\n throw new Error('Could not find @standardagents/builder. Is it installed?');\n}\n\n/** Detect the user's package manager. */\nfunction detectPackageManager(): string {\n // Check environment variable first (most reliable when running via npx/pnpm exec)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n // Fall back to lockfile detection\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb') || fs.existsSync('bun.lock')) return 'bun';\n return 'npm';\n}\n\n/**\n * Run Vite production build with platform endpoint injected.\n * Note: PLATFORM_API_KEY is NOT passed to the build — it is a runtime secret\n * injected by the platform via service binding, not a build-time variable.\n */\nfunction buildProject(endpoint: string): void {\n const pm = detectPackageManager();\n const buildCmd = pm === 'npm' ? 'npx vite build' : `${pm} exec vite build`;\n\n execSync(buildCmd, {\n stdio: 'inherit',\n env: {\n ...process.env,\n PLATFORM_ENDPOINT: endpoint,\n },\n });\n}\n\n/**\n * Find the Worker bundle in the build output.\n * Searches common locations produced by @cloudflare/vite-plugin.\n */\nexport function findWorkerBundle(): { bundlePath: string; bundleContent: Buffer } {\n // The Cloudflare Vite plugin outputs Worker bundles to .wrangler/tmp/\n const searchDirs = ['.wrangler/tmp', 'dist'];\n\n for (const dir of searchDirs) {\n if (!fs.existsSync(dir)) continue;\n\n // Search recursively for .js or .mjs files that look like Worker bundles\n const bundle = findBundleInDir(dir);\n if (bundle) return bundle;\n }\n\n throw new Error(\n 'Could not find Worker bundle in build output.\\n' +\n 'Expected build output in .wrangler/tmp/ or dist/.\\n' +\n 'Make sure `vite build` completed successfully.'\n );\n}\n\nfunction findBundleInDir(dir: string): { bundlePath: string; bundleContent: Buffer } | null {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const jsFiles = entries.filter(e => e.isFile() && (e.name.endsWith('.js') || e.name.endsWith('.mjs')));\n\n // Prioritize index.js/index.mjs, then largest file\n jsFiles.sort((a, b) => {\n const aIsIndex = a.name === 'index.js' || a.name === 'index.mjs' ? 0 : 1;\n const bIsIndex = b.name === 'index.js' || b.name === 'index.mjs' ? 0 : 1;\n if (aIsIndex !== bIsIndex) return aIsIndex - bIsIndex;\n // Larger files are more likely to be the bundle\n const aSize = fs.statSync(path.join(dir, a.name)).size;\n const bSize = fs.statSync(path.join(dir, b.name)).size;\n return bSize - aSize;\n });\n\n for (const entry of jsFiles) {\n const fullPath = path.join(dir, entry.name);\n const content = fs.readFileSync(fullPath);\n // Worker bundles contain export statements and are non-empty\n if (content.length > 0 && content.toString('utf-8', 0, 10000).includes('export')) {\n return { bundlePath: fullPath, bundleContent: content };\n }\n }\n\n // Then check subdirectories\n for (const entry of entries) {\n if (entry.isDirectory() && entry.name !== 'client' && entry.name !== 'node_modules') {\n const result = findBundleInDir(path.join(dir, entry.name));\n if (result) return result;\n }\n }\n\n return null;\n}\n\n/** Check platform version requirements. */\nexport async function checkPlatformVersion(\n endpoint: string,\n builderVersion: string\n): Promise<PlatformManifestResponse> {\n const res = await fetch(`${endpoint}/manifest`);\n if (!res.ok) {\n throw new Error(`Failed to check platform version: ${res.status} ${res.statusText}`);\n }\n const manifest: PlatformManifestResponse = await res.json();\n\n // Check minimum version\n if (compareVersions(builderVersion, manifest.minimum_builder_version) < 0) {\n throw new Error(\n `Builder version ${builderVersion} is below the platform minimum (${manifest.minimum_builder_version}).\\n` +\n `Please upgrade @standardagents/builder:\\n` +\n ` npm install @standardagents/builder@latest`\n );\n }\n\n return manifest;\n}\n\n/** Upload the deploy to the Platform API. */\nexport async function uploadDeploy(\n endpoint: string,\n apiKey: string,\n bundleContent: Buffer,\n manifest: DeployManifest,\n builderVersion: string\n): Promise<DeployResponse> {\n const formData = new FormData();\n formData.append('bundle', new Blob([new Uint8Array(bundleContent)], { type: 'application/javascript' }), 'index.js');\n formData.append('manifest', new Blob([JSON.stringify(manifest)], { type: 'application/json' }), 'manifest.json');\n formData.append('builder_version', builderVersion);\n formData.append('agent_count', String(manifest.agents.length));\n\n const res = await fetch(`${endpoint}/deploys`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: formData,\n });\n\n let body: unknown;\n try {\n body = await res.json();\n } catch {\n throw new Error(`Deploy failed (${res.status}): Invalid response from server`);\n }\n\n if (!res.ok) {\n const errorMsg = formatDeployError(body as DeployErrorResponse);\n throw new Error(`Deploy failed (${res.status}): ${errorMsg}`);\n }\n\n return body as DeployResponse;\n}\n\n// --- Main command ---\n\nexport async function deploy(options: DeployOptions) {\n console.log('');\n logger.info(`${chalk.bold('Standard Agents Deploy')}\\n`);\n\n // Step 1: Detect project\n if (!detectProject()) {\n logger.error('This does not appear to be a Standard Agents project.');\n logger.info('Run this command from a directory with wrangler.jsonc and agents/agents/.');\n process.exit(1);\n }\n\n // Step 2: Load configuration\n let apiKey: string;\n let endpoint: string;\n try {\n ({ apiKey, endpoint } = loadConfig(options));\n } catch (err) {\n logger.error((err as Error).message);\n process.exit(1);\n }\n logger.success('Configuration loaded');\n\n // Step 3: Discover agents\n const agents = discoverAgents();\n if (agents.length === 0) {\n logger.error('No agents found in agents/agents/.');\n logger.info('Create at least one agent with defineAgent() before deploying.');\n process.exit(1);\n }\n logger.success(`Found ${agents.length} agent${agents.length === 1 ? '' : 's'}: ${agents.join(', ')}`);\n\n // Step 4: Get builder version\n let builderVersion: string;\n try {\n builderVersion = getBuilderVersion();\n } catch (err) {\n logger.error((err as Error).message);\n process.exit(1);\n }\n logger.info(`Builder version: ${builderVersion}`);\n\n // Step 5: Check platform version requirements\n try {\n const platformManifest = await checkPlatformVersion(endpoint, builderVersion);\n if (compareVersions(builderVersion, platformManifest.latest_builder_version) < 0) {\n logger.warning(\n `A newer builder version is available (${platformManifest.latest_builder_version}). Consider upgrading.`\n );\n }\n } catch (err) {\n logger.error((err as Error).message);\n process.exit(1);\n }\n\n // Step 6: Build (only endpoint is passed — API key is a runtime secret, not a build-time var)\n logger.info('Building project...\\n');\n try {\n buildProject(endpoint);\n } catch {\n console.log('');\n logger.error('Build failed. See output above for details.');\n process.exit(1);\n }\n console.log('');\n logger.success('Build complete');\n\n // Step 7: Find bundle and create manifest\n let bundlePath: string;\n let bundleContent: Buffer;\n try {\n ({ bundlePath, bundleContent } = findWorkerBundle());\n } catch (err) {\n logger.error((err as Error).message);\n process.exit(1);\n }\n\n const manifest = createManifest(agents, builderVersion);\n logger.success(`Bundle: ${bundlePath} (${formatBytes(bundleContent.length)})`);\n\n // Step 8: Validate bundle size\n const sizeWarning = validateBundleSize(bundleContent.length);\n if (sizeWarning) {\n logger.warning(sizeWarning);\n }\n\n // Step 9: Upload\n logger.info('Uploading...');\n try {\n const result = await uploadDeploy(endpoint, apiKey, bundleContent, manifest, builderVersion);\n console.log('');\n logger.success(chalk.bold('Deploy successful!'));\n console.log(` Deploy ID: ${result.deploy.id}`);\n console.log(` Status: ${result.deploy.status}`);\n\n // Derive the live URL from the account_id (slug)\n if (result.deploy.account_id) {\n console.log(` URL: https://${result.deploy.account_id}.standardagents.ai`);\n }\n console.log('');\n } catch (err) {\n logger.error((err as Error).message);\n process.exit(1);\n }\n}\n","import { Command } from 'commander';\nimport { init } from './commands/init.js';\nimport { scaffold } from './commands/scaffold.js';\nimport { initChat } from './commands/init-chat.js';\nimport { pack } from './commands/pack.js';\nimport { unpack, listPacked } from './commands/unpack.js';\nimport { deploy } from './commands/deploy.js';\n\n// Injected at build time by tsup (see tsup.config.ts)\ndeclare const __CLI_VERSION__: string;\n\nconst program = new Command();\n\nprogram\n .name('agents')\n .description('CLI tool for Standard Agents / AgentBuilder')\n .version(__CLI_VERSION__);\n\nprogram\n .command('init [project-name]')\n .description('Create a new Standard Agents project (runs create vite, then scaffold)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--template <template>', 'Vite template to use', 'vanilla-ts')\n .action(init);\n\nprogram\n .command('scaffold')\n .description('Add Standard Agents to an existing Vite project')\n .option('--force', 'Overwrite existing configuration')\n .action(scaffold);\n\nprogram\n .command('init-chat [project-name]')\n .description('Scaffold a frontend chat application')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--framework <framework>', 'Framework to use (vite or nextjs)')\n .action(initChat);\n\nprogram\n .command('pack [agent-name]')\n .description('Pack an agent with all its dependencies')\n .option('--output <dir>', 'Output directory (default: agents/packed)')\n .option('--npm', 'Generate npm-ready package structure')\n .option('--version <version>', 'Package version (default: 1.0.0)')\n .option('--no-remove', 'Keep original files after packing')\n .option('--no-interactive', 'Skip interactive item mode selector')\n .action(pack);\n\nprogram\n .command('unpack [package]')\n .description('Unpack a packed agent to the local agents directory')\n .option('--no-signatures', 'Remove package signatures (fully editable)')\n .action(unpack);\n\nprogram\n .command('list-packed')\n .description('List all discovered packed agents')\n .action(listPacked);\n\nprogram\n .command('deploy')\n .description('Build and deploy your project to the Standard Agents platform')\n .option('--api-key <key>', 'Platform API key (overrides PLATFORM_API_KEY env var)')\n .option('--endpoint <url>', 'Platform API endpoint (default: https://api.standardagents.ai)')\n .action(deploy);\n\nprogram.parse();\n"]}
|