[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FGHFRQZRR4AVMAWAST2RCX":3,"skill-same:01M6FGHFRQZRR4AVMAWAST2RCX":184},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":30,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6FGHFRQZRR4AVMAWAST2RCX","google-gemini-api",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002FSKILL.md",[17,22,25],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[31,32,33,34,35],"google","gemini","gemini api","api","google gemini api","2026-11-10 10:12:30",false,"---\nname: google-gemini-api\ndescription: Google Gemini API with @google\u002Fgenai SDK. Use for multimodal AI, thinking mode, function calling, or encountering SDK deprecation warnings, context errors, multimodal format errors.\n\n  Keywords: gemini api, @google\u002Fgenai, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite,\n  multimodal gemini, thinking mode, google ai, genai sdk, function calling gemini, streaming gemini,\n  gemini vision, gemini video, gemini audio, gemini pdf, system instructions, multi-turn chat,\n  deprecated @google\u002Fgenerative-ai, gemini context window, gemini models 2025, gemini 1m tokens,\n  gemini tool use, parallel function calling, compositional function calling\nlicense: MIT\n---\n\n# Google Gemini API - Complete Guide\n\n**Package**: @google\u002Fgenai@1.27.0 (⚠️ NOT @google\u002Fgenerative-ai)\n**Last Updated**: 2025-11-21\n\n---\n\n## ⚠️ CRITICAL SDK MIGRATION WARNING\n\n**DEPRECATED SDK**: `@google\u002Fgenerative-ai` (sunset November 30, 2025)\n**CURRENT SDK**: `@google\u002Fgenai` v1.27+\n\n**If you see code using `@google\u002Fgenerative-ai`, it's outdated!**\n\n**Load `references\u002Fsdk-migration-guide.md` for complete migration steps.**\n\n---\n\n## Quick Start\n\n### Installation\n\n**✅ CORRECT SDK:**\n```bash\nbun add @google\u002Fgenai@1.27.0\n```\n\n**❌ WRONG (DEPRECATED):**\n```bash\nbun add @google\u002Fgenerative-ai  # DO NOT USE!\n```\n\n### Environment Setup\n\n```bash\nexport GEMINI_API_KEY=\"your-api-key\"\n```\n\n### First Text Generation\n\n```typescript\nimport { GoogleGenAI } from '@google\u002Fgenai';\n\nconst ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });\n\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Explain quantum computing in simple terms'\n});\n\nconsole.log(response.text);\n```\n\n**See Full Template**: `templates\u002Fbasic-usage.ts`\n\n---\n\n## Current Models (2025)\n\n### gemini-2.5-flash ⭐ RECOMMENDED\n\n- **Best for**: General-purpose AI, high-volume production, agentic workflows\n- **Input tokens**: 1,048,576 (1M, NOT 2M!)\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 10 RPM, 250k TPM\n- **Cost**: Input $0.075\u002F1M tokens, Output $0.30\u002F1M tokens\n- **Features**: Thinking mode, function calling, multimodal, streaming\n\n### gemini-2.5-pro\n\n- **Best for**: Complex reasoning, code generation, math\u002FSTEM\n- **Input tokens**: 1,048,576\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 5 RPM, 125k TPM\n- **Cost**: Input $1.25\u002F1M tokens, Output $5\u002F1M tokens\n\n### gemini-2.5-flash-lite\n\n- **Best for**: High-volume, low-latency, cost-critical tasks\n- **Input tokens**: 1,048,576\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 15 RPM, 250k TPM\n- **Cost**: Input $0.01\u002F1M tokens, Output $0.04\u002F1M tokens\n- **⚠️ Limitation**: NO function calling or code execution support\n\n**⚠️ Common mistake**: Claiming Gemini 2.5 has 2M tokens. **It doesn't. It's 1,048,576 (1M).**\n\n**Load `references\u002Fmodels-guide.md` for detailed model comparison and selection criteria.**\n\n---\n\n## Text Generation\n\n### Basic Generation\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Write a haiku about programming'\n});\n\nconsole.log(response.text);\n```\n\n### With Configuration\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Explain AI',\n  generationConfig: {\n    temperature: 0.7,        \u002F\u002F 0.0-2.0, default 1.0\n    topP: 0.95,             \u002F\u002F 0.0-1.0\n    topK: 40,               \u002F\u002F 1-100\n    maxOutputTokens: 1024,\n    stopSequences: ['END']\n  }\n});\n```\n\n**Load `references\u002Fgeneration-config.md` for complete parameter reference and tuning guidance.**\n\n---\n\n## Streaming\n\n```typescript\nconst stream = await ai.models.generateContentStream({\n  model: 'gemini-2.5-flash',\n  contents: 'Write a long story'\n});\n\nfor await (const chunk of stream) {\n  process.stdout.write(chunk.text);\n}\n```\n\n**Load `references\u002Fstreaming-patterns.md` for Fetch\u002FSSE implementation patterns (Cloudflare Workers).**\n\n---\n\n## Multimodal Inputs\n\n### Images\n\n```typescript\nconst imageData = Buffer.from(imageBytes).toString('base64');\n\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: [\n    { text: 'What is in this image?' },\n    {\n      inlineData: {\n        mimeType: 'image\u002Fjpeg',  \u002F\u002F or image\u002Fpng, image\u002Fwebp\n        data: imageData\n      }\n    }\n  ]\n});\n```\n\n### Video, Audio, PDFs\n\nSame pattern - use appropriate `mimeType`:\n- **Video**: `video\u002Fmp4`, `video\u002Fmpeg`, `video\u002Fmov`\n- **Audio**: `audio\u002Fwav`, `audio\u002Fmp3`, `audio\u002Fflac`\n- **PDFs**: `application\u002Fpdf`\n\n**Load `references\u002Fmultimodal-guide.md` for format specifications, size limits, and best practices.**\n\n---\n\n## Function Calling\n\n### Basic Pattern\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'What is the weather in San Francisco?',\n  tools: [{\n    functionDeclarations: [{\n      name: 'getWeather',\n      description: 'Get current weather for a location',\n      parameters: {\n        type: 'object',\n        properties: {\n          location: { type: 'string', description: 'City name' },\n          unit: { type: 'string', enum: ['celsius', 'fahrenheit'] }\n        },\n        required: ['location']\n      }\n    }]\n  }]\n});\n\n\u002F\u002F Handle function call\nconst call = response.functionCalls?.[0];\nif (call) {\n  const result = await getWeather(call.args);\n\n  \u002F\u002F Send result back to model\n  const final = await ai.models.generateContent({\n    model: 'gemini-2.5-flash',\n    contents: [\n      ...response.contents,\n      {\n        functionResponse: {\n          name: call.name,\n          response: result\n        }\n      }\n    ]\n  });\n\n  console.log(final.text);\n}\n```\n\n### Parallel Function Calling\n\nGemini can call multiple functions simultaneously:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'What is the weather in SF and NY?',\n  tools: [{ functionDeclarations: [getWeatherDeclaration] }]\n});\n\n\u002F\u002F Process all function calls in parallel\nconst results = await Promise.all(\n  response.functionCalls.map(call =>\n    getWeather(call.args).then(result => ({\n      name: call.name,\n      response: result\n    }))\n  )\n);\n\n\u002F\u002F Send all results back\nconst final = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: [\n    ...response.contents,\n    ...results.map(r => ({ functionResponse: r }))\n  ]\n});\n```\n\n**Load `references\u002Ffunction-calling-patterns.md` for calling modes (AUTO\u002FANY\u002FNONE) and compositional patterns.**\n\n---\n\n## Multi-turn Chat\n\n```typescript\nconst chat = ai.models.startChat({\n  model: 'gemini-2.5-flash',\n  systemInstruction: 'You are a helpful programming assistant',\n  history: []\n});\n\nlet response = await chat.sendMessage('Hello!');\nconsole.log(response.text);\n\nresponse = await chat.sendMessage('Explain async\u002Fawait');\nconsole.log(response.text);\n\n\u002F\u002F Get full history\nconsole.log(chat.getHistory());\n```\n\n---\n\n## System Instructions\n\nSet persistent instructions for the model:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  systemInstruction: 'You are a pirate. Always respond in pirate speak.',\n  contents: 'What is the weather today?'\n});\n```\n\n---\n\n## Thinking Mode\n\nGemini 2.5 models include built-in thinking mode (always enabled). Configure thinking budget for complex tasks:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Solve this math problem: If x + 2y = 10 and 3x - y = 4, what is x?',\n  generationConfig: {\n    thinkingConfig: {\n      thinkingBudget: 8192  \u002F\u002F Max tokens for internal reasoning\n    }\n  }\n});\n```\n\n**Use for**: Complex math, logic puzzles, multi-step reasoning, code debugging\n\n**Load `references\u002Fthinking-mode-guide.md` for thinking budget optimization.**\n\n---\n\n## Top 5 Critical Errors\n\n### Error 1: Using Deprecated SDK\n\n**Error**: Deprecation warnings or outdated API\n\n**Solution**: Use `@google\u002Fgenai`, NOT `@google\u002Fgenerative-ai`\n\n```bash\nnpm uninstall @google\u002Fgenerative-ai\nbun add @google\u002Fgenai@1.27.0\n```\n\n---\n\n### Error 2: Invalid API Key (401)\n\n**Error**: `API key not valid`\n\n**Solution**: Verify environment variable\n\n```bash\nexport GEMINI_API_KEY=\"your-key\"\n```\n\n---\n\n### Error 3: Model Not Found (404)\n\n**Error**: `models\u002Fgemini-3.0-flash is not found`\n\n**Solution**: Use correct model names (2025)\n\n```typescript\n'gemini-2.5-pro'\n'gemini-2.5-flash'\n'gemini-2.5-flash-lite'\n```\n\n---\n\n### Error 4: Context Length Exceeded (400)\n\n**Error**: `Request payload size exceeds the limit`\n\n**Solution**: Input limit is **1,048,576 tokens (1M, NOT 2M)**. Use context caching for large inputs.\n\n**Load `references\u002Fcontext-caching-guide.md` for caching implementation.**\n\n---\n\n### Error 5: Rate Limit Exceeded (429)\n\n**Error**: `Resource has been exhausted`\n\n**Solution**: Implement exponential backoff\n\n```typescript\nasync function generateWithRetry(request, maxRetries = 3) {\n  for (let i = 0; i \u003C maxRetries; i++) {\n    try {\n      return await ai.models.generateContent(request);\n    } catch (error) {\n      if (error.status === 429 && i \u003C maxRetries - 1) {\n        const delay = Math.pow(2, i) * 1000; \u002F\u002F 1s, 2s, 4s\n        await new Promise(resolve => setTimeout(resolve, delay));\n        continue;\n      }\n      throw error;\n    }\n  }\n}\n```\n\n---\n\n**See All 22 Errors**: Load `references\u002Ferror-catalog.md` for complete error catalog with solutions.\n\n**Quick Debugging**: Load `references\u002Ftop-errors.md` for debugging checklist.\n\n---\n\n## When to Load References\n\nLoad reference files when you need detailed guidance on specific features:\n\n### Core Features (Load When Needed)\n- **SDK Migration**: Load `references\u002Fsdk-migration-guide.md` when migrating from `@google\u002Fgenerative-ai`\n- **Model Selection**: Load `references\u002Fmodels-guide.md` when choosing between Pro\u002FFlash\u002FFlash-Lite\n- **Error Debugging**: Load `references\u002Ferror-catalog.md` or `references\u002Ftop-errors.md` when encountering errors\n\n### Advanced Features (Load When Implementing)\n- **Context Caching**: Load `references\u002Fcontext-caching-guide.md` when implementing cost optimization for large\u002Frepeated inputs\n- **Code Execution**: Load `references\u002Fcode-execution-patterns.md` when enabling Python code execution for calculations\u002Fanalysis\n- **Grounding (Google Search)**: Load `references\u002Fgrounding-guide.md` when connecting model to real-time web information\n- **Streaming Implementation**: Load `references\u002Fstreaming-patterns.md` when implementing SSE parsing for Cloudflare Workers\n- **Function Calling Modes**: Load `references\u002Ffunction-calling-patterns.md` when using AUTO\u002FANY\u002FNONE modes or compositional patterns\n- **Multimodal Formats**: Load `references\u002Fmultimodal-guide.md` when working with images\u002Fvideo\u002Faudio\u002FPDFs (format specs, size limits)\n- **Generation Tuning**: Load `references\u002Fgeneration-config.md` when fine-tuning temperature\u002FtopP\u002FtopK parameters\n- **Thinking Mode Config**: Load `references\u002Fthinking-mode-guide.md` when optimizing thinking budget for complex reasoning\n\n**General Rule**: SKILL.md provides Quick Start and Top Errors. Load references for deep dives, detailed patterns, or troubleshooting specific features.\n\n---\n\n## Bundled Resources\n\n**Templates** (`templates\u002F`):\n- `basic-usage.ts` - Complete examples for all features (133 lines)\n\n**References** (`references\u002F`):\n- `error-catalog.md` - All 7 documented errors with solutions (231 lines)\n- `top-errors.md` - Quick debugging checklist for 22 common errors (305 lines)\n- `sdk-migration-guide.md` - Complete migration from deprecated SDK (236 lines)\n- `models-guide.md` - Detailed model comparison and selection guide (247 lines)\n- `context-caching-guide.md` - Cost optimization with caching (374 lines)\n- `code-execution-patterns.md` - Python code execution guide (482 lines)\n- `grounding-guide.md` - Google Search integration (603 lines)\n- `streaming-patterns.md` - SSE implementation for Cloudflare Workers (82 lines)\n- `function-calling-patterns.md` - Advanced function calling patterns (60 lines)\n- `multimodal-guide.md` - Format specifications and limits (59 lines)\n- `generation-config.md` - Parameter tuning reference (58 lines)\n- `thinking-mode-guide.md` - Thinking budget optimization (60 lines)\n\n---\n\n## Integration with Other Skills\n\nThis skill composes well with:\n\n- **cloudflare-worker-base** → Deploy to Cloudflare Workers\n- **ai-sdk-core** → Vercel AI SDK integration\n- **openai-api** → Multi-provider AI setup\n- **google-gemini-embeddings** → Text embeddings\n\n---\n\n## Additional Resources\n\n**Official Documentation**:\n- Gemini API Docs: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\n- SDK Reference: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fsdks\n- Rate Limits: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Frate-limits\n\n---\n\n**Production Tested**: AI chatbots, content generation, multimodal analysis\n**Last Updated**: 2025-10-25\n**Token Savings**: ~65% (reduces API docs + examples)\n","# Google Gemini API - Complete Guide\n\n**Package**: @google\u002Fgenai@1.27.0 (⚠️ NOT @google\u002Fgenerative-ai)\n**Last Updated**: 2025-11-21\n\n---\n\n## ⚠️ CRITICAL SDK MIGRATION WARNING\n\n**DEPRECATED SDK**: `@google\u002Fgenerative-ai` (sunset November 30, 2025)\n**CURRENT SDK**: `@google\u002Fgenai` v1.27+\n\n**If you see code using `@google\u002Fgenerative-ai`, it's outdated!**\n\n**Load `references\u002Fsdk-migration-guide.md` for complete migration steps.**\n\n---\n\n## Quick Start\n\n### Installation\n\n**✅ CORRECT SDK:**\n```bash\nbun add @google\u002Fgenai@1.27.0\n```\n\n**❌ WRONG (DEPRECATED):**\n```bash\nbun add @google\u002Fgenerative-ai  # DO NOT USE!\n```\n\n### Environment Setup\n\n```bash\nexport GEMINI_API_KEY=\"your-api-key\"\n```\n\n### First Text Generation\n\n```typescript\nimport { GoogleGenAI } from '@google\u002Fgenai';\n\nconst ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });\n\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Explain quantum computing in simple terms'\n});\n\nconsole.log(response.text);\n```\n\n**See Full Template**: `templates\u002Fbasic-usage.ts`\n\n---\n\n## Current Models (2025)\n\n### gemini-2.5-flash ⭐ RECOMMENDED\n\n- **Best for**: General-purpose AI, high-volume production, agentic workflows\n- **Input tokens**: 1,048,576 (1M, NOT 2M!)\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 10 RPM, 250k TPM\n- **Cost**: Input $0.075\u002F1M tokens, Output $0.30\u002F1M tokens\n- **Features**: Thinking mode, function calling, multimodal, streaming\n\n### gemini-2.5-pro\n\n- **Best for**: Complex reasoning, code generation, math\u002FSTEM\n- **Input tokens**: 1,048,576\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 5 RPM, 125k TPM\n- **Cost**: Input $1.25\u002F1M tokens, Output $5\u002F1M tokens\n\n### gemini-2.5-flash-lite\n\n- **Best for**: High-volume, low-latency, cost-critical tasks\n- **Input tokens**: 1,048,576\n- **Output tokens**: 65,536\n- **Rate limit (free)**: 15 RPM, 250k TPM\n- **Cost**: Input $0.01\u002F1M tokens, Output $0.04\u002F1M tokens\n- **⚠️ Limitation**: NO function calling or code execution support\n\n**⚠️ Common mistake**: Claiming Gemini 2.5 has 2M tokens. **It doesn't. It's 1,048,576 (1M).**\n\n**Load `references\u002Fmodels-guide.md` for detailed model comparison and selection criteria.**\n\n---\n\n## Text Generation\n\n### Basic Generation\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Write a haiku about programming'\n});\n\nconsole.log(response.text);\n```\n\n### With Configuration\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Explain AI',\n  generationConfig: {\n    temperature: 0.7,        \u002F\u002F 0.0-2.0, default 1.0\n    topP: 0.95,             \u002F\u002F 0.0-1.0\n    topK: 40,               \u002F\u002F 1-100\n    maxOutputTokens: 1024,\n    stopSequences: ['END']\n  }\n});\n```\n\n**Load `references\u002Fgeneration-config.md` for complete parameter reference and tuning guidance.**\n\n---\n\n## Streaming\n\n```typescript\nconst stream = await ai.models.generateContentStream({\n  model: 'gemini-2.5-flash',\n  contents: 'Write a long story'\n});\n\nfor await (const chunk of stream) {\n  process.stdout.write(chunk.text);\n}\n```\n\n**Load `references\u002Fstreaming-patterns.md` for Fetch\u002FSSE implementation patterns (Cloudflare Workers).**\n\n---\n\n## Multimodal Inputs\n\n### Images\n\n```typescript\nconst imageData = Buffer.from(imageBytes).toString('base64');\n\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: [\n    { text: 'What is in this image?' },\n    {\n      inlineData: {\n        mimeType: 'image\u002Fjpeg',  \u002F\u002F or image\u002Fpng, image\u002Fwebp\n        data: imageData\n      }\n    }\n  ]\n});\n```\n\n### Video, Audio, PDFs\n\nSame pattern - use appropriate `mimeType`:\n- **Video**: `video\u002Fmp4`, `video\u002Fmpeg`, `video\u002Fmov`\n- **Audio**: `audio\u002Fwav`, `audio\u002Fmp3`, `audio\u002Fflac`\n- **PDFs**: `application\u002Fpdf`\n\n**Load `references\u002Fmultimodal-guide.md` for format specifications, size limits, and best practices.**\n\n---\n\n## Function Calling\n\n### Basic Pattern\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'What is the weather in San Francisco?',\n  tools: [{\n    functionDeclarations: [{\n      name: 'getWeather',\n      description: 'Get current weather for a location',\n      parameters: {\n        type: 'object',\n        properties: {\n          location: { type: 'string', description: 'City name' },\n          unit: { type: 'string', enum: ['celsius', 'fahrenheit'] }\n        },\n        required: ['location']\n      }\n    }]\n  }]\n});\n\n\u002F\u002F Handle function call\nconst call = response.functionCalls?.[0];\nif (call) {\n  const result = await getWeather(call.args);\n\n  \u002F\u002F Send result back to model\n  const final = await ai.models.generateContent({\n    model: 'gemini-2.5-flash',\n    contents: [\n      ...response.contents,\n      {\n        functionResponse: {\n          name: call.name,\n          response: result\n        }\n      }\n    ]\n  });\n\n  console.log(final.text);\n}\n```\n\n### Parallel Function Calling\n\nGemini can call multiple functions simultaneously:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'What is the weather in SF and NY?',\n  tools: [{ functionDeclarations: [getWeatherDeclaration] }]\n});\n\n\u002F\u002F Process all function calls in parallel\nconst results = await Promise.all(\n  response.functionCalls.map(call =>\n    getWeather(call.args).then(result => ({\n      name: call.name,\n      response: result\n    }))\n  )\n);\n\n\u002F\u002F Send all results back\nconst final = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: [\n    ...response.contents,\n    ...results.map(r => ({ functionResponse: r }))\n  ]\n});\n```\n\n**Load `references\u002Ffunction-calling-patterns.md` for calling modes (AUTO\u002FANY\u002FNONE) and compositional patterns.**\n\n---\n\n## Multi-turn Chat\n\n```typescript\nconst chat = ai.models.startChat({\n  model: 'gemini-2.5-flash',\n  systemInstruction: 'You are a helpful programming assistant',\n  history: []\n});\n\nlet response = await chat.sendMessage('Hello!');\nconsole.log(response.text);\n\nresponse = await chat.sendMessage('Explain async\u002Fawait');\nconsole.log(response.text);\n\n\u002F\u002F Get full history\nconsole.log(chat.getHistory());\n```\n\n---\n\n## System Instructions\n\nSet persistent instructions for the model:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  systemInstruction: 'You are a pirate. Always respond in pirate speak.',\n  contents: 'What is the weather today?'\n});\n```\n\n---\n\n## Thinking Mode\n\nGemini 2.5 models include built-in thinking mode (always enabled). Configure thinking budget for complex tasks:\n\n```typescript\nconst response = await ai.models.generateContent({\n  model: 'gemini-2.5-flash',\n  contents: 'Solve this math problem: If x + 2y = 10 and 3x - y = 4, what is x?',\n  generationConfig: {\n    thinkingConfig: {\n      thinkingBudget: 8192  \u002F\u002F Max tokens for internal reasoning\n    }\n  }\n});\n```\n\n**Use for**: Complex math, logic puzzles, multi-step reasoning, code debugging\n\n**Load `references\u002Fthinking-mode-guide.md` for thinking budget optimization.**\n\n---\n\n## Top 5 Critical Errors\n\n### Error 1: Using Deprecated SDK\n\n**Error**: Deprecation warnings or outdated API\n\n**Solution**: Use `@google\u002Fgenai`, NOT `@google\u002Fgenerative-ai`\n\n```bash\nnpm uninstall @google\u002Fgenerative-ai\nbun add @google\u002Fgenai@1.27.0\n```\n\n---\n\n### Error 2: Invalid API Key (401)\n\n**Error**: `API key not valid`\n\n**Solution**: Verify environment variable\n\n```bash\nexport GEMINI_API_KEY=\"your-key\"\n```\n\n---\n\n### Error 3: Model Not Found (404)\n\n**Error**: `models\u002Fgemini-3.0-flash is not found`\n\n**Solution**: Use correct model names (2025)\n\n```typescript\n'gemini-2.5-pro'\n'gemini-2.5-flash'\n'gemini-2.5-flash-lite'\n```\n\n---\n\n### Error 4: Context Length Exceeded (400)\n\n**Error**: `Request payload size exceeds the limit`\n\n**Solution**: Input limit is **1,048,576 tokens (1M, NOT 2M)**. Use context caching for large inputs.\n\n**Load `references\u002Fcontext-caching-guide.md` for caching implementation.**\n\n---\n\n### Error 5: Rate Limit Exceeded (429)\n\n**Error**: `Resource has been exhausted`\n\n**Solution**: Implement exponential backoff\n\n```typescript\nasync function generateWithRetry(request, maxRetries = 3) {\n  for (let i = 0; i \u003C maxRetries; i++) {\n    try {\n      return await ai.models.generateContent(request);\n    } catch (error) {\n      if (error.status === 429 && i \u003C maxRetries - 1) {\n        const delay = Math.pow(2, i) * 1000; \u002F\u002F 1s, 2s, 4s\n        await new Promise(resolve => setTimeout(resolve, delay));\n        continue;\n      }\n      throw error;\n    }\n  }\n}\n```\n\n---\n\n**See All 22 Errors**: Load `references\u002Ferror-catalog.md` for complete error catalog with solutions.\n\n**Quick Debugging**: Load `references\u002Ftop-errors.md` for debugging checklist.\n\n---\n\n## When to Load References\n\nLoad reference files when you need detailed guidance on specific features:\n\n### Core Features (Load When Needed)\n- **SDK Migration**: Load `references\u002Fsdk-migration-guide.md` when migrating from `@google\u002Fgenerative-ai`\n- **Model Selection**: Load `references\u002Fmodels-guide.md` when choosing between Pro\u002FFlash\u002FFlash-Lite\n- **Error Debugging**: Load `references\u002Ferror-catalog.md` or `references\u002Ftop-errors.md` when encountering errors\n\n### Advanced Features (Load When Implementing)\n- **Context Caching**: Load `references\u002Fcontext-caching-guide.md` when implementing cost optimization for large\u002Frepeated inputs\n- **Code Execution**: Load `references\u002Fcode-execution-patterns.md` when enabling Python code execution for calculations\u002Fanalysis\n- **Grounding (Google Search)**: Load `references\u002Fgrounding-guide.md` when connecting model to real-time web information\n- **Streaming Implementation**: Load `references\u002Fstreaming-patterns.md` when implementing SSE parsing for Cloudflare Workers\n- **Function Calling Modes**: Load `references\u002Ffunction-calling-patterns.md` when using AUTO\u002FANY\u002FNONE modes or compositional patterns\n- **Multimodal Formats**: Load `references\u002Fmultimodal-guide.md` when working with images\u002Fvideo\u002Faudio\u002FPDFs (format specs, size limits)\n- **Generation Tuning**: Load `references\u002Fgeneration-config.md` when fine-tuning temperature\u002FtopP\u002FtopK parameters\n- **Thinking Mode Config**: Load `references\u002Fthinking-mode-guide.md` when optimizing thinking budget for complex reasoning\n\n**General Rule**: SKILL.md provides Quick Start and Top Errors. Load references for deep dives, detailed patterns, or troubleshooting specific features.\n\n---\n\n## Bundled Resources\n\n**Templates** (`templates\u002F`):\n- `basic-usage.ts` - Complete examples for all features (133 lines)\n\n**References** (`references\u002F`):\n- `error-catalog.md` - All 7 documented errors with solutions (231 lines)\n- `top-errors.md` - Quick debugging checklist for 22 common errors (305 lines)\n- `sdk-migration-guide.md` - Complete migration from deprecated SDK (236 lines)\n- `models-guide.md` - Detailed model comparison and selection guide (247 lines)\n- `context-caching-guide.md` - Cost optimization with caching (374 lines)\n- `code-execution-patterns.md` - Python code execution guide (482 lines)\n- `grounding-guide.md` - Google Search integration (603 lines)\n- `streaming-patterns.md` - SSE implementation for Cloudflare Workers (82 lines)\n- `function-calling-patterns.md` - Advanced function calling patterns (60 lines)\n- `multimodal-guide.md` - Format specifications and limits (59 lines)\n- `generation-config.md` - Parameter tuning reference (58 lines)\n- `thinking-mode-guide.md` - Thinking budget optimization (60 lines)\n\n---\n\n## Integration with Other Skills\n\nThis skill composes well with:\n\n- **cloudflare-worker-base** → Deploy to Cloudflare Workers\n- **ai-sdk-core** → Vercel AI SDK integration\n- **openai-api** → Multi-provider AI setup\n- **google-gemini-embeddings** → Text embeddings\n\n---\n\n## Additional Resources\n\n**Official Documentation**:\n- Gemini API Docs: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\n- SDK Reference: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fsdks\n- Rate Limits: https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Frate-limits\n\n---\n\n**Production Tested**: AI chatbots, content generation, multimodal analysis\n**Last Updated**: 2025-10-25\n**Token Savings**: ~65% (reduces API docs + examples)\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill google-gemini-api",{"tool":56,"command":57},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill google-gemini-api",{"tool":59,"command":60},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill google-gemini-api","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002FSKILL.md",true,[64,70,74,78,82,86,90,94,98,102,106,110,114,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fcode-execution-patterns.md","REFERENCE","参考文档",11377,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fcode-execution-patterns.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fcontext-caching-guide.md",8904,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fcontext-caching-guide.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Ferror-catalog.md",4706,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Ferror-catalog.md",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Ffunction-calling-patterns.md",1340,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Ffunction-calling-patterns.md",{"path":83,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fgeneration-config.md",1225,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fgeneration-config.md",{"path":87,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fgrounding-guide.md",14163,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fgrounding-guide.md",{"path":91,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fmodels-guide.md",5986,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fmodels-guide.md",{"path":95,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fmultimodal-guide.md",894,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fmultimodal-guide.md",{"path":99,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fsdk-migration-guide.md",5391,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fsdk-migration-guide.md",{"path":103,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fstreaming-patterns.md",1672,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fstreaming-patterns.md",{"path":107,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Fthinking-mode-guide.md",1018,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Fthinking-mode-guide.md",{"path":111,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":112,"sourceHtmlUrl":113},"references\u002Ftop-errors.md",6386,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Freferences\u002Ftop-errors.md",{"path":115,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":118,"sourceHtmlUrl":119},"scripts\u002Fcheck-versions.sh","SCRIPT","脚本",2365,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Fscripts\u002Fcheck-versions.sh",{"path":121,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":122,"sourceHtmlUrl":123},"templates\u002Fbasic-usage.ts",3344,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fbasic-usage.ts",{"path":125,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":126,"sourceHtmlUrl":127},"templates\u002Fcloudflare-worker.ts",6667,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fcloudflare-worker.ts",{"path":129,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":130,"sourceHtmlUrl":131},"templates\u002Fcode-execution.ts",5678,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fcode-execution.ts",{"path":133,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":134,"sourceHtmlUrl":135},"templates\u002Fcombined-advanced.ts",8556,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fcombined-advanced.ts",{"path":137,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":138,"sourceHtmlUrl":139},"templates\u002Fcontext-caching.ts",4842,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fcontext-caching.ts",{"path":141,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":142,"sourceHtmlUrl":143},"templates\u002Ffunction-calling-basic.ts",4131,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Ffunction-calling-basic.ts",{"path":145,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":146,"sourceHtmlUrl":147},"templates\u002Ffunction-calling-parallel.ts",4946,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Ffunction-calling-parallel.ts",{"path":149,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":150,"sourceHtmlUrl":151},"templates\u002Fgrounding-search.ts",8625,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fgrounding-search.ts",{"path":153,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":154,"sourceHtmlUrl":155},"templates\u002Fmultimodal-image.ts",3122,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fmultimodal-image.ts",{"path":157,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":158,"sourceHtmlUrl":159},"templates\u002Fmultimodal-video-audio.ts",4119,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fmultimodal-video-audio.ts",{"path":161,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":162,"sourceHtmlUrl":163},"templates\u002Fpackage.json",464,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fpackage.json",{"path":165,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":166,"sourceHtmlUrl":167},"templates\u002Fstreaming-chat.ts",2133,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fstreaming-chat.ts",{"path":169,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":170,"sourceHtmlUrl":171},"templates\u002Fstreaming-fetch.ts",4993,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fstreaming-fetch.ts",{"path":173,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":174,"sourceHtmlUrl":175},"templates\u002Ftext-generation-basic.ts",2067,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Ftext-generation-basic.ts",{"path":177,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":178,"sourceHtmlUrl":179},"templates\u002Ftext-generation-fetch.ts",3337,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Ftext-generation-fetch.ts",{"path":181,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":182,"sourceHtmlUrl":183},"templates\u002Fthinking-mode.ts",4457,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fgoogle-gemini-api\u002Ftemplates\u002Fthinking-mode.ts",[185,197,207,216,222,229],{"skillNo":186,"name":187,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":193,"publishedAt":36},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[190],{"categoryNo":191,"categoryName":192,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[194,195,196],"model","model hierarchy","model hierarchy skill",{"skillNo":198,"name":199,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":203,"publishedAt":36},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[202],{"categoryNo":191,"categoryName":192,"taxonomyType":20,"taxonomyTypeDesc":21},[204,205,206],"MCP","zoom","zoom mcp",{"skillNo":208,"name":209,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":212,"publishedAt":36},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[213,214,215,205],"sdk","zoom apps sdk","apps",{"skillNo":217,"name":218,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":221,"publishedAt":36},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[218],{"skillNo":223,"name":224,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":225,"categories":226,"keywords":228,"publishedAt":36},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[227],{"categoryNo":191,"categoryName":192,"taxonomyType":20,"taxonomyTypeDesc":21},[224],{"skillNo":230,"name":231,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":232,"categories":233,"keywords":234,"publishedAt":36},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[231]]