[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FA2P67PMEHA6ND20GXGK92":3,"skill-same:01M6FA2P67PMEHA6ND20GXGK92":85},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":67,"ownerHtmlUrl":68,"ownerBlogUrl":6,"ownerDescription":69,"updatedAt":70,"install":71,"resources":84},"01M6FA2P67PMEHA6ND20GXGK92","elevenlabs-ci-integration",null,"Configure CI\u002FCD pipelines for ElevenLabs with mocked unit tests and gated integration tests.\nUse when setting up GitHub Actions for TTS projects, configuring CI test strategies,\nor automating ElevenLabs integration validation.\nTrigger: \"elevenlabs CI\", \"elevenlabs GitHub Actions\",\n\"elevenlabs automated tests\", \"CI elevenlabs\", \"elevenlabs pipeline\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Felevenlabs-ci-integration\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"integration","elevenlabs ci integration","elevenlabs","ci","edit","code","CI\u002FCD","test strategies","unit","io","strategies","actions","up","write","read","projects","configure","Bash","pipeline","github actions","2026-11-10 10:12:30",false,"---\nname: elevenlabs-ci-integration\ndescription: |\n  Configure CI\u002FCD pipelines for ElevenLabs with mocked unit tests and gated integration tests.\n  Use when setting up GitHub Actions for TTS projects, configuring CI test strategies,\n  or automating ElevenLabs integration validation.\n  Trigger: \"elevenlabs CI\", \"elevenlabs GitHub Actions\",\n  \"elevenlabs automated tests\", \"CI elevenlabs\", \"elevenlabs pipeline\".\nallowed-tools: Read, Write, Edit, Bash(gh:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, voice, ai, elevenlabs, ci, github-actions]\ncompatible-with: claude-code\n---\n\n# ElevenLabs CI Integration\n\n## Overview\n\nSet up CI\u002FCD pipelines that test ElevenLabs integrations without burning character quota on every PR. Uses a two-tier strategy: mocked unit tests on every push, gated integration tests on demand.\n\n## Prerequisites\n\n- GitHub repository with Actions enabled\n- ElevenLabs API key for integration tests\n- npm\u002Fpnpm project with vitest configured\n\n## Instructions\n\n### Step 1: GitHub Actions Workflow\n\n```yaml\n# .github\u002Fworkflows\u002Felevenlabs-tests.yml\nname: ElevenLabs Tests\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  # Tier 1: Always runs — no API key needed, no quota cost\n  unit-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"npm\"\n      - run: npm ci\n      - run: npm test -- --coverage\n        env:\n          # Mock mode — no real API calls\n          ELEVENLABS_API_KEY: \"sk_test_mock_key_for_ci\"\n\n  # Tier 2: Only on main or manual trigger — uses real API\n  integration-tests:\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\u002Fheads\u002Fmain' || github.event_name == 'workflow_dispatch'\n    needs: unit-tests\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"npm\"\n      - run: npm ci\n\n      # Check quota before running integration tests\n      - name: Check ElevenLabs quota\n        env:\n          ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }}\n        run: |\n          REMAINING=$(curl -s https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fuser \\\n            -H \"xi-api-key: ${ELEVENLABS_API_KEY}\" | \\\n            jq '.subscription | (.character_limit - .character_count)')\n          echo \"Characters remaining: $REMAINING\"\n          if [ \"$REMAINING\" -lt 5000 ]; then\n            echo \"::warning::Low ElevenLabs quota ($REMAINING chars). Skipping integration tests.\"\n            echo \"SKIP_INTEGRATION=true\" >> $GITHUB_ENV\n          fi\n\n      - name: Run integration tests\n        if: env.SKIP_INTEGRATION != 'true'\n        env:\n          ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }}\n          ELEVENLABS_INTEGRATION: \"1\"\n        run: npm run test:integration\n```\n\n### Step 2: Configure Repository Secrets\n\n```bash\n# Store API key as GitHub secret (use a test\u002Fdev key, NOT production)\ngh secret set ELEVENLABS_API_KEY --body \"sk_your_test_key_here\"\n\n# Optional: webhook secret for webhook tests\ngh secret set ELEVENLABS_WEBHOOK_SECRET --body \"whsec_your_secret_here\"\n```\n\n### Step 3: Unit Test with SDK Mock\n\n```typescript\n\u002F\u002F tests\u002Funit\u002Ftts-service.test.ts\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\n\n\u002F\u002F Mock the entire SDK — no API calls, no quota usage\nvi.mock(\"@elevenlabs\u002Felevenlabs-js\", () => ({\n  ElevenLabsClient: vi.fn().mockImplementation(() => ({\n    textToSpeech: {\n      convert: vi.fn().mockResolvedValue(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue(new Uint8Array([0xFF, 0xFB, 0x90, 0x00])); \u002F\u002F MP3 header\n            controller.close();\n          },\n        })\n      ),\n      stream: vi.fn().mockImplementation(async function* () {\n        yield new Uint8Array([0xFF, 0xFB, 0x90, 0x00]);\n      }),\n    },\n    voices: {\n      getAll: vi.fn().mockResolvedValue({\n        voices: [\n          { voice_id: \"21m00Tcm4TlvDq8ikWAM\", name: \"Rachel\", category: \"premade\" },\n        ],\n      }),\n    },\n    user: {\n      get: vi.fn().mockResolvedValue({\n        subscription: { tier: \"pro\", character_count: 1000, character_limit: 500000 },\n      }),\n    },\n  })),\n}));\n\nimport { ElevenLabsClient } from \"@elevenlabs\u002Felevenlabs-js\";\n\ndescribe(\"TTS Service\", () => {\n  let client: InstanceType\u003Ctypeof ElevenLabsClient>;\n\n  beforeEach(() => {\n    client = new ElevenLabsClient();\n  });\n\n  it(\"should call TTS with correct parameters\", async () => {\n    await client.textToSpeech.convert(\"21m00Tcm4TlvDq8ikWAM\", {\n      text: \"Test speech\",\n      model_id: \"eleven_multilingual_v2\",\n      voice_settings: { stability: 0.5, similarity_boost: 0.75 },\n    });\n\n    expect(client.textToSpeech.convert).toHaveBeenCalledWith(\n      \"21m00Tcm4TlvDq8ikWAM\",\n      expect.objectContaining({\n        text: \"Test speech\",\n        model_id: \"eleven_multilingual_v2\",\n      })\n    );\n  });\n\n  it(\"should handle voice listing\", async () => {\n    const result = await client.voices.getAll();\n    expect(result.voices).toHaveLength(1);\n    expect(result.voices[0].name).toBe(\"Rachel\");\n  });\n});\n```\n\n### Step 4: Integration Test (Gated)\n\n```typescript\n\u002F\u002F tests\u002Fintegration\u002Ftts-smoke.test.ts\nimport { describe, it, expect } from \"vitest\";\n\nconst SKIP = !process.env.ELEVENLABS_INTEGRATION;\n\ndescribe.skipIf(SKIP)(\"ElevenLabs Integration\", () => {\n  it(\"should generate audio from text\", async () => {\n    const { ElevenLabsClient } = await import(\"@elevenlabs\u002Felevenlabs-js\");\n    const client = new ElevenLabsClient();\n\n    \u002F\u002F Use Flash model + short text to minimize quota usage\n    const audio = await client.textToSpeech.convert(\"21m00Tcm4TlvDq8ikWAM\", {\n      text: \"CI test.\",  \u002F\u002F 8 characters = 4 credits (Flash)\n      model_id: \"eleven_flash_v2_5\",\n      output_format: \"mp3_22050_32\",\n    });\n\n    expect(audio).toBeDefined();\n  }, 30_000);\n\n  it(\"should list voices\", async () => {\n    const { ElevenLabsClient } = await import(\"@elevenlabs\u002Felevenlabs-js\");\n    const client = new ElevenLabsClient();\n    const { voices } = await client.voices.getAll();\n    expect(voices.length).toBeGreaterThan(0);\n  });\n});\n```\n\n### Step 5: Package Scripts\n\n```json\n{\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest --watch\",\n    \"test:integration\": \"ELEVENLABS_INTEGRATION=1 vitest run tests\u002Fintegration\u002F\",\n    \"test:ci\": \"vitest run --coverage --reporter=junit --outputFile=test-results.xml\"\n  }\n}\n```\n\n## CI Strategy Summary\n\n| Tier | When | API Key | Quota Cost | Coverage |\n|------|------|---------|------------|----------|\n| Unit tests | Every push\u002FPR | Mock key | 0 characters | SDK integration patterns |\n| Integration | Main + manual | Real test key | ~50 chars | End-to-end TTS verification |\n| Quota check | Before integration | Real test key | 0 (GET only) | Prevents surprise billing |\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret not found in CI | Missing repository secret | `gh secret set ELEVENLABS_API_KEY` |\n| Integration tests timeout | Slow TTS generation | Increase test timeout to 30s; use Flash model |\n| Quota depleted in CI | Too many integration runs | Use quota guard; limit to main branch only |\n| Mock drift | SDK API changed | Update mocks when upgrading SDK |\n\n## Resources\n\n- [GitHub Actions Secrets](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-guides\u002Fusing-secrets-in-github-actions)\n- [Vitest CI Configuration](https:\u002F\u002Fvitest.dev\u002Fguide\u002Fci.html)\n- [ElevenLabs JS SDK](https:\u002F\u002Fgithub.com\u002Felevenlabs\u002Felevenlabs-js)\n\n## Next Steps\n\nFor deployment patterns, see `elevenlabs-deploy-integration`.\n\n","# ElevenLabs CI Integration\n\n## Overview\n\nSet up CI\u002FCD pipelines that test ElevenLabs integrations without burning character quota on every PR. Uses a two-tier strategy: mocked unit tests on every push, gated integration tests on demand.\n\n## Prerequisites\n\n- GitHub repository with Actions enabled\n- ElevenLabs API key for integration tests\n- npm\u002Fpnpm project with vitest configured\n\n## Instructions\n\n### Step 1: GitHub Actions Workflow\n\n```yaml\n# .github\u002Fworkflows\u002Felevenlabs-tests.yml\nname: ElevenLabs Tests\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  # Tier 1: Always runs — no API key needed, no quota cost\n  unit-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"npm\"\n      - run: npm ci\n      - run: npm test -- --coverage\n        env:\n          # Mock mode — no real API calls\n          ELEVENLABS_API_KEY: \"sk_test_mock_key_for_ci\"\n\n  # Tier 2: Only on main or manual trigger — uses real API\n  integration-tests:\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\u002Fheads\u002Fmain' || github.event_name == 'workflow_dispatch'\n    needs: unit-tests\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: actions\u002Fsetup-node@v4\n        with:\n          node-version: \"20\"\n          cache: \"npm\"\n      - run: npm ci\n\n      # Check quota before running integration tests\n      - name: Check ElevenLabs quota\n        env:\n          ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }}\n        run: |\n          REMAINING=$(curl -s https:\u002F\u002Fapi.elevenlabs.io\u002Fv1\u002Fuser \\\n            -H \"xi-api-key: ${ELEVENLABS_API_KEY}\" | \\\n            jq '.subscription | (.character_limit - .character_count)')\n          echo \"Characters remaining: $REMAINING\"\n          if [ \"$REMAINING\" -lt 5000 ]; then\n            echo \"::warning::Low ElevenLabs quota ($REMAINING chars). Skipping integration tests.\"\n            echo \"SKIP_INTEGRATION=true\" >> $GITHUB_ENV\n          fi\n\n      - name: Run integration tests\n        if: env.SKIP_INTEGRATION != 'true'\n        env:\n          ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }}\n          ELEVENLABS_INTEGRATION: \"1\"\n        run: npm run test:integration\n```\n\n### Step 2: Configure Repository Secrets\n\n```bash\n# Store API key as GitHub secret (use a test\u002Fdev key, NOT production)\ngh secret set ELEVENLABS_API_KEY --body \"sk_your_test_key_here\"\n\n# Optional: webhook secret for webhook tests\ngh secret set ELEVENLABS_WEBHOOK_SECRET --body \"whsec_your_secret_here\"\n```\n\n### Step 3: Unit Test with SDK Mock\n\n```typescript\n\u002F\u002F tests\u002Funit\u002Ftts-service.test.ts\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\n\n\u002F\u002F Mock the entire SDK — no API calls, no quota usage\nvi.mock(\"@elevenlabs\u002Felevenlabs-js\", () => ({\n  ElevenLabsClient: vi.fn().mockImplementation(() => ({\n    textToSpeech: {\n      convert: vi.fn().mockResolvedValue(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue(new Uint8Array([0xFF, 0xFB, 0x90, 0x00])); \u002F\u002F MP3 header\n            controller.close();\n          },\n        })\n      ),\n      stream: vi.fn().mockImplementation(async function* () {\n        yield new Uint8Array([0xFF, 0xFB, 0x90, 0x00]);\n      }),\n    },\n    voices: {\n      getAll: vi.fn().mockResolvedValue({\n        voices: [\n          { voice_id: \"21m00Tcm4TlvDq8ikWAM\", name: \"Rachel\", category: \"premade\" },\n        ],\n      }),\n    },\n    user: {\n      get: vi.fn().mockResolvedValue({\n        subscription: { tier: \"pro\", character_count: 1000, character_limit: 500000 },\n      }),\n    },\n  })),\n}));\n\nimport { ElevenLabsClient } from \"@elevenlabs\u002Felevenlabs-js\";\n\ndescribe(\"TTS Service\", () => {\n  let client: InstanceType\u003Ctypeof ElevenLabsClient>;\n\n  beforeEach(() => {\n    client = new ElevenLabsClient();\n  });\n\n  it(\"should call TTS with correct parameters\", async () => {\n    await client.textToSpeech.convert(\"21m00Tcm4TlvDq8ikWAM\", {\n      text: \"Test speech\",\n      model_id: \"eleven_multilingual_v2\",\n      voice_settings: { stability: 0.5, similarity_boost: 0.75 },\n    });\n\n    expect(client.textToSpeech.convert).toHaveBeenCalledWith(\n      \"21m00Tcm4TlvDq8ikWAM\",\n      expect.objectContaining({\n        text: \"Test speech\",\n        model_id: \"eleven_multilingual_v2\",\n      })\n    );\n  });\n\n  it(\"should handle voice listing\", async () => {\n    const result = await client.voices.getAll();\n    expect(result.voices).toHaveLength(1);\n    expect(result.voices[0].name).toBe(\"Rachel\");\n  });\n});\n```\n\n### Step 4: Integration Test (Gated)\n\n```typescript\n\u002F\u002F tests\u002Fintegration\u002Ftts-smoke.test.ts\nimport { describe, it, expect } from \"vitest\";\n\nconst SKIP = !process.env.ELEVENLABS_INTEGRATION;\n\ndescribe.skipIf(SKIP)(\"ElevenLabs Integration\", () => {\n  it(\"should generate audio from text\", async () => {\n    const { ElevenLabsClient } = await import(\"@elevenlabs\u002Felevenlabs-js\");\n    const client = new ElevenLabsClient();\n\n    \u002F\u002F Use Flash model + short text to minimize quota usage\n    const audio = await client.textToSpeech.convert(\"21m00Tcm4TlvDq8ikWAM\", {\n      text: \"CI test.\",  \u002F\u002F 8 characters = 4 credits (Flash)\n      model_id: \"eleven_flash_v2_5\",\n      output_format: \"mp3_22050_32\",\n    });\n\n    expect(audio).toBeDefined();\n  }, 30_000);\n\n  it(\"should list voices\", async () => {\n    const { ElevenLabsClient } = await import(\"@elevenlabs\u002Felevenlabs-js\");\n    const client = new ElevenLabsClient();\n    const { voices } = await client.voices.getAll();\n    expect(voices.length).toBeGreaterThan(0);\n  });\n});\n```\n\n### Step 5: Package Scripts\n\n```json\n{\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest --watch\",\n    \"test:integration\": \"ELEVENLABS_INTEGRATION=1 vitest run tests\u002Fintegration\u002F\",\n    \"test:ci\": \"vitest run --coverage --reporter=junit --outputFile=test-results.xml\"\n  }\n}\n```\n\n## CI Strategy Summary\n\n| Tier | When | API Key | Quota Cost | Coverage |\n|------|------|---------|------------|----------|\n| Unit tests | Every push\u002FPR | Mock key | 0 characters | SDK integration patterns |\n| Integration | Main + manual | Real test key | ~50 chars | End-to-end TTS verification |\n| Quota check | Before integration | Real test key | 0 (GET only) | Prevents surprise billing |\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret not found in CI | Missing repository secret | `gh secret set ELEVENLABS_API_KEY` |\n| Integration tests timeout | Slow TTS generation | Increase test timeout to 30s; use Flash model |\n| Quota depleted in CI | Too many integration runs | Use quota guard; limit to main branch only |\n| Mock drift | SDK API changed | Update mocks when upgrading SDK |\n\n## Resources\n\n- [GitHub Actions Secrets](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions\u002Fsecurity-guides\u002Fusing-secrets-in-github-actions)\n- [Vitest CI Configuration](https:\u002F\u002Fvitest.dev\u002Fguide\u002Fci.html)\n- [ElevenLabs JS SDK](https:\u002F\u002Fgithub.com\u002Felevenlabs\u002Felevenlabs-js)\n\n## Next Steps\n\nFor deployment patterns, see `elevenlabs-deploy-integration`.\n\n",{"name":5,"tags":52,"author":57,"license":15,"version":58,"description":59,"allowed-tools":60,"compatible-with":61},[53,54,55,29,30,56],"saas","voice","ai","github-actions","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure CI\u002FCD pipelines for ElevenLabs with mocked unit tests and gated integration tests.\nUse when setting up GitHub Actions for TTS projects, configuring CI test strategies,\nor automating ElevenLabs integration validation.\nTrigger: \"elevenlabs CI\", \"elevenlabs GitHub Actions\",\n\"elevenlabs automated tests\", \"CI elevenlabs\", \"elevenlabs pipeline\".\n","Read, Write, Edit, Bash(gh:*)","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Felevenlabs-ci-integration",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":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":83},[73,76,79],{"tool":74,"command":75},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill elevenlabs-ci-integration",{"tool":77,"command":78},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill elevenlabs-ci-integration",{"tool":80,"command":81},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill elevenlabs-ci-integration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Felevenlabs-ci-integration\u002FSKILL.md",true,[],[86,98,108,117,123,130],{"skillNo":87,"name":88,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":94,"publishedAt":47},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[91],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[95,96,97],"model","model hierarchy","model hierarchy skill",{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":47},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[103],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},[105,106,107],"MCP","zoom","zoom mcp",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":47},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[114,115,116,106],"sdk","zoom apps sdk","apps",{"skillNo":118,"name":119,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":47},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[119],{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":47},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[128],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},[125],{"skillNo":131,"name":132,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":47},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[132]]