genaicode 0.10.0 → 0.10.1

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.
@@ -1 +1 @@
1
- export declare const GENAICODE_HELP_DOCUMENT = "# GenAIcode Help Documentation\n\n## Overview\n\nGenAIcode is an AI-powered code generation and management tool designed to streamline software development. It leverages various AI services (Vertex AI, AI Studio, OpenAI, Anthropic) to generate, modify, and analyze code. The tool supports both interactive CLI and web UI modes, offering features like code generation, image processing, and context optimization.\n\n## Quick Start\n\n1. Installation:\n ```bash\n npm install -g genaicode\n ```\n\n2. Basic Usage:\n ```bash\n genaicode \"Your prompt here\"\n ```\n\n3. UI Mode:\n ```bash\n genaicode --ui\n ```\n\n## Core Features\n\n### AI Services Integration\n\n- **Supported Services**:\n - Vertex AI (with Gemini Pro)\n - OpenAI (GPT-4)\n - Anthropic (Claude)\n - AI Studio\n - Custom Plugin Services\n\n- **Service Auto-detection**: Automatically detects available AI services based on environment configuration\n- **Fallback Mechanism**: Handles service failures with automatic fallback options\n- **Model Configuration**: Supports per-service model configuration via .genaicoderc\n\n### Interaction Modes\n\n1. **UI Mode**:\n - Web-based interface\n - Real-time updates\n - Visual diff viewing\n - Progress tracking\n - File operation preview\n\n2. **Interactive CLI**:\n - Command-line interface\n - Step-by-step guidance\n - Task file support\n - Operation control\n\n### File Operations\n\n- Create/Update/Delete files\n- Move files\n- Create directories\n- Patch files\n- Context-aware operations\n- Safety checks and validation\n\n### Image Processing\n\n- **Generation**: Create images using AI services\n- **Analysis**: Vision model support for image context\n- **Manipulation**:\n - Background removal\n - Image splitting\n - Resizing\n - Format conversion\n\n### Context Management\n\n- Smart context optimization\n- History tracking and summarization\n- Token usage optimization\n- Conversation continuation\n- Cache management\n\n## Configuration\n\n### .genaicoderc Options\n\n```json\n{\n \"rootDir\": \".\",\n \"ignorePaths\": [\"node_modules\", \"dist\"],\n \"lintCommand\": \"npm run lint\",\n \"importantContext\": {\n \"systemPrompt\": [],\n \"files\": []\n },\n \"plugins\": [],\n \"modelOverrides\": {\n \"aiStudio\": {\n \"default\": \"gemini-pro\",\n \"cheap\": \"gemini-pro-vision\"\n }\n }\n}\n```\n\n### CLI Options\n\n- `--verbose-prompt`: Enable detailed prompt logging\n- `--dry-run`: Simulate operations without making changes\n- `--temperature`: Control AI response randomness\n- `--vision`: Enable image analysis\n- `--imagen`: Enable image generation\n- `--cheap`: Use cost-optimized models\n- `--ui`: Launch web interface\n- `--ui-port`: Specify UI port\n- `--content-mask`: Filter context\n- `--disable-cache`: Disable caching\n- `--disable-history`: Disable history tracking\n\n## Plugin System\n\n### Types of Plugins\n\n1. **AI Service Plugins**:\n - Custom AI service integration\n - Model configuration\n - Response handling\n\n2. **Action Handlers**:\n - Custom operations\n - User interaction\n - File processing\n\n3. **Operation Extensions**:\n - File operations\n - Image processing\n - Analysis tools\n\n### Creating Plugins\n\nBasic plugin structure:\n```typescript\nexport default {\n name: \"my-plugin\",\n aiServices?: {\n [key: string]: {\n generateContent: GenerateContentFunction;\n serviceConfig: ServiceConfig;\n }\n },\n operations?: {\n [key: string]: Operation;\n },\n actionHandlers?: {\n [key: string]: {\n handler: ActionHandler;\n description: string;\n }\n }\n}\n```\n\n## Best Practices\n\n1. **Code Generation**:\n - Provide clear, specific prompts\n - Review generated code before applying\n - Use appropriate temperature settings\n - Leverage context optimization\n\n2. **File Management**:\n - Use absolute paths\n - Verify file operations\n - Handle dependencies properly\n - Maintain consistent structure\n\n3. **Context Optimization**:\n - Keep relevant files in context\n - Remove unnecessary content\n - Use content masking when needed\n - Monitor token usage\n\n4. **Error Handling**:\n - Check operation results\n - Handle service failures\n - Validate generated code\n - Use appropriate fallback options\n\n## Troubleshooting\n\n### Common Issues\n\n1. **AI Service Connection**:\n - Verify API keys\n - Check service availability\n - Confirm network connection\n - Review rate limits\n\n2. **File Operations**:\n - Check file permissions\n - Verify paths\n - Review operation logs\n - Confirm file existence\n\n3. **Context Problems**:\n - Monitor token usage\n - Review context optimization\n - Check file inclusion\n - Verify content masks\n\n4. **Plugin Issues**:\n - Validate plugin structure\n - Check compatibility\n - Review error logs\n - Update dependencies\n\n### Getting Help\n\n- Use the `--help` command\n- Check documentation\n- Review error messages\n- Contact support\n\n## Advanced Topics\n\n### Custom Actions\n\nCreating custom actions:\n```typescript\nexport const myCustomAction: ActionHandler = async (props) => {\n // Implementation\n};\n```\n\n### Hook System\n\nAvailable hooks:\n- Pre/post operation\n- Generate content\n- Planning\n- Context optimization\n\n### Project Profiles\n\nSupported frameworks:\n- JavaScript/TypeScript\n- Python\n- Java\n- Go\n- React\n\n## Security Considerations\n\n1. **API Keys**:\n - Secure storage\n - Regular rotation\n - Access control\n - Environment variables\n\n2. **File Operations**:\n - Permission checks\n - Path validation\n - Content verification\n - Operation logging\n\n3. **Plugin Security**:\n - Source verification\n - Dependency scanning\n - Permission management\n - Code review\n\n## Updates and Maintenance\n\n- Regular updates\n- Security patches\n- Feature additions\n- Bug fixes\n- Documentation updates\n\n## Support\n\nFor additional help:\n- GitHub Issues\n- Documentation\n- Community Forums\n- Support Channels\n";
1
+ export declare const GENAICODE_HELP_DOCUMENT = "# GenAIcode Help Documentation\n\n## Overview\n\nGenAIcode is an AI-powered code generation and management tool designed to streamline software development. It leverages various AI services (Vertex AI, AI Studio, OpenAI, Anthropic) to generate, modify, and analyze code. The tool supports both interactive CLI and web UI modes, offering features like code generation, image processing, and context optimization.\n\n## Quick Start\n\n1. Installation:\n ```bash\n npm install -g genaicode\n ```\n\n2. Basic Usage:\n ```bash\n genaicode \"Your prompt here\"\n ```\n\n3. UI Mode:\n ```bash\n genaicode --ui\n ```\n\n## Core Features\n\n### AI Services Integration\n\n- **Supported Services**:\n - Vertex AI (with Gemini Pro)\n - OpenAI (GPT-4)\n - Anthropic (Claude)\n - AI Studio\n - Custom Plugin Services\n\n- **Service Auto-detection**: Automatically detects available AI services based on environment configuration\n- **Fallback Mechanism**: Handles service failures with automatic fallback options\n- **Model Configuration**: Supports per-service model configuration via .genaicoderc\n\n### Interaction Modes\n\n1. **UI Mode**:\n - Web-based interface\n - Real-time updates\n - Visual diff viewing\n - Progress tracking\n - File operation preview\n\n2. **Interactive CLI**:\n - Command-line interface\n - Step-by-step guidance\n - Task file support\n - Operation control\n\n### File Operations\n\n- Create/Update/Delete files\n- Move files\n- Create directories\n- Patch files\n- Context-aware operations\n- Safety checks and validation\n\n### Image Processing\n\n- **Generation**: Create images using AI services\n- **Analysis**: Vision model support for image context\n- **Manipulation**:\n - Background removal\n - Image splitting\n - Resizing\n - Format conversion\n\n### Context Management\n\n- Smart context optimization\n- History tracking and summarization\n- Token usage optimization\n- Conversation continuation\n- Cache management\n\n## Configuration\n\n### .genaicoderc Options\n\n```json\n{\n \"rootDir\": \".\",\n \"ignorePaths\": [\"node_modules\", \"dist\"],\n \"lintCommand\": \"npm run lint\",\n \"importantContext\": {\n \"systemPrompt\": [],\n \"files\": []\n },\n \"plugins\": [],\n \"modelOverrides\": {\n \"aiStudio\": {\n \"default\": \"gemini-pro\",\n \"cheap\": \"gemini-pro-vision\"\n }\n }\n}\n```\n\n### CLI Options\n\n- `--verbose-prompt`: Enable detailed prompt logging\n- `--dry-run`: Simulate operations without making changes\n- `--temperature`: Control AI response randomness\n- `--vision`: Enable image analysis\n- `--imagen`: Enable image generation\n- `--cheap`: Use cost-optimized models\n- `--ui`: Launch web interface\n- `--ui-port`: Specify UI port\n- `--content-mask`: Filter context\n- `--disable-cache`: Disable caching\n- `--disable-history`: Disable history tracking\n\n## Plugin System\n\n### Types of Plugins\n\n1. **AI Service Plugins**:\n - Custom AI service integration\n - Model configuration\n - Response handling\n\n2. **Action Handlers**:\n - Custom operations\n - User interaction\n - File processing\n - Git context retrieval (`requestGitContext` for commits, file changes, blame)\n\n3. **Operation Extensions**:\n - File operations\n - Image processing\n - Analysis tools\n\n### Creating Plugins\n\nBasic plugin structure:\n```typescript\nexport default {\n name: \"my-plugin\",\n aiServices?: {\n [key: string]: {\n generateContent: GenerateContentFunction;\n serviceConfig: ServiceConfig;\n }\n },\n operations?: {\n [key: string]: Operation;\n },\n actionHandlers?: {\n [key: string]: {\n handler: ActionHandler;\n description: string;\n }\n }\n}\n```\n\n## Best Practices\n\n1. **Code Generation**:\n - Provide clear, specific prompts\n - Review generated code before applying\n - Use appropriate temperature settings\n - Leverage context optimization\n\n2. **File Management**:\n - Use absolute paths\n - Verify file operations\n - Handle dependencies properly\n - Maintain consistent structure\n\n3. **Context Optimization**:\n - Keep relevant files in context\n - Remove unnecessary content\n - Use content masking when needed\n - Monitor token usage\n\n4. **Error Handling**:\n - Check operation results\n - Handle service failures\n - Validate generated code\n - Use appropriate fallback options\n\n## Troubleshooting\n\n### Common Issues\n\n1. **AI Service Connection**:\n - Verify API keys\n - Check service availability\n - Confirm network connection\n - Review rate limits\n\n2. **File Operations**:\n - Check file permissions\n - Verify paths\n - Review operation logs\n - Confirm file existence\n\n3. **Context Problems**:\n - Monitor token usage\n - Review context optimization\n - Check file inclusion\n - Verify content masks\n\n4. **Plugin Issues**:\n - Validate plugin structure\n - Check compatibility\n - Review error logs\n - Update dependencies\n\n### Getting Help\n\n- Use the `--help` command\n- Check documentation\n- Review error messages\n- Contact support\n\n## Advanced Topics\n\n### Custom Actions\n\nCreating custom actions:\n```typescript\nexport const myCustomAction: ActionHandler = async (props) => {\n // Implementation\n};\n```\n\n### Hook System\n\nAvailable hooks:\n- Pre/post operation\n- Generate content\n- Planning\n- Context optimization\n\n### Project Profiles\n\nSupported frameworks:\n- JavaScript/TypeScript\n- Python\n- Java\n- Go\n- React\n\n## Security Considerations\n\n1. **API Keys**:\n - Secure storage\n - Regular rotation\n - Access control\n - Environment variables\n\n2. **File Operations**:\n - Permission checks\n - Path validation\n - Content verification\n - Operation logging\n\n3. **Plugin Security**:\n - Source verification\n - Dependency scanning\n - Permission management\n - Code review\n\n## Updates and Maintenance\n\n- Regular updates\n- Security patches\n- Feature additions\n- Bug fixes\n- Documentation updates\n\n## Support\n\nFor additional help:\n- GitHub Issues\n- Documentation\n- Community Forums\n- Support Channels\n";
@@ -128,6 +128,7 @@ GenAIcode is an AI-powered code generation and management tool designed to strea
128
128
  - Custom operations
129
129
  - User interaction
130
130
  - File processing
131
+ - Git context retrieval (\`requestGitContext\` for commits, file changes, blame)
131
132
 
132
133
  3. **Operation Extensions**:
133
134
  - File operations
@@ -1 +1 @@
1
- {"version":3,"file":"genaicode-help-document.js","sourceRoot":"","sources":["../../src/help-docs/genaicode-help-document.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4RtC,CAAC"}
1
+ {"version":3,"file":"genaicode-help-document.js","sourceRoot":"","sources":["../../src/help-docs/genaicode-help-document.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6RtC,CAAC"}
@@ -53,5 +53,6 @@ export interface RcConfig {
53
53
  plugins?: string[];
54
54
  featuresEnabled?: {
55
55
  appContext?: boolean;
56
+ gitContext?: boolean;
56
57
  };
57
58
  }
@@ -1,11 +1,18 @@
1
+ import path from 'path';
2
+ import simpleGit from 'simple-git';
1
3
  import { findRcFile, parseRcFile, CODEGENRC_FILENAME } from './config-lib.js';
2
4
  import { loadPlugins } from './plugin-loader.js';
3
- import path from 'path';
4
5
  import { DEFAULT_EXTENSIONS, DEFAULT_IGNORE_PATHS } from '../project-profiles/index.js';
5
6
  import { SCHEMA_VIRTUAL_FILE_NAME } from './config-schema.js';
6
7
  // Read and parse the configuration
7
8
  const rcFilePath = await findRcFile();
8
9
  export const rcConfig = parseRcFile(rcFilePath);
10
+ if (typeof rcConfig.featuresEnabled === 'undefined') {
11
+ rcConfig.featuresEnabled = {};
12
+ }
13
+ if (typeof rcConfig.featuresEnabled?.gitContext === 'undefined') {
14
+ rcConfig.featuresEnabled.gitContext = await simpleGit(rcConfig.rootDir).checkIsRepo();
15
+ }
9
16
  export const rcConfigSchemaFilePath = path.join(rcConfig.rootDir, SCHEMA_VIRTUAL_FILE_NAME);
10
17
  await loadPlugins(rcConfig);
11
18
  export const sourceExtensions = rcConfig.extensions ?? [...DEFAULT_EXTENSIONS.JS];
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,mCAAmC;AACnC,MAAM,UAAU,GAAW,MAAM,UAAU,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAa,WAAW,CAAC,UAAU,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAE5F,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAa,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAE5F,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAa,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAErG,2GAA2G;AAC3G,MAAM,CAAC,MAAM,cAAc,GAAmB,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;AAE5E,SAAS,uBAAuB,CAAC,OAAqC;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,iDAAiD;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/main/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,mCAAmC;AACnC,MAAM,UAAU,GAAW,MAAM,UAAU,EAAE,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAa,WAAW,CAAC,UAAU,CAAC,CAAC;AAE1D,IAAI,OAAO,QAAQ,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;IACpD,QAAQ,CAAC,eAAe,GAAG,EAAE,CAAC;AAChC,CAAC;AAED,IAAI,OAAO,QAAQ,CAAC,eAAe,EAAE,UAAU,KAAK,WAAW,EAAE,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,UAAU,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAE5F,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAa,QAAQ,CAAC,UAAU,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAE5F,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAa,QAAQ,CAAC,WAAW,IAAI,CAAC,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAErG,2GAA2G;AAC3G,MAAM,CAAC,MAAM,cAAc,GAAmB,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;AAE5E,SAAS,uBAAuB,CAAC,OAAqC;IACpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAED,iDAAiD;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC"}