[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7DPQAPGYDDBTQ47AZMVVG":3,"skill-same:01M6F7DPQAPGYDDBTQ47AZMVVG":90},{"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":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":72,"ownerHtmlUrl":73,"ownerBlogUrl":6,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6F7DPQAPGYDDBTQ47AZMVVG","assemblyai-ci-integration",null,"Configure AssemblyAI CI\u002FCD integration with GitHub Actions and testing.\nUse when setting up automated testing, configuring CI pipelines,\nor integrating AssemblyAI transcription tests into your build process.\nTrigger with phrases like \"assemblyai CI\", \"assemblyai GitHub Actions\",\n\"assemblyai automated tests\", \"CI assemblyai\".","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\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-ci-integration\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"assemblyai ci integration","integration","ci","read","assemblyai","CI\u002FCD","trigger","io","tests","up","edit","write","testing","text","configure","Bash","github actions","actions","speech","code","2026-11-10 10:12:30",false,"---\nname: assemblyai-ci-integration\ndescription: |\n  Configure AssemblyAI CI\u002FCD integration with GitHub Actions and testing.\n  Use when setting up automated testing, configuring CI pipelines,\n  or integrating AssemblyAI transcription tests into your build process.\n  Trigger with phrases like \"assemblyai CI\", \"assemblyai GitHub Actions\",\n  \"assemblyai automated tests\", \"CI assemblyai\".\nallowed-tools: Read, Write, Edit, Bash(gh:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, ai, speech-to-text, assemblyai, transcription, ci]\ncompatible-with: claude-code\n---\n\n# AssemblyAI CI Integration\n\n## Overview\nSet up CI\u002FCD pipelines for AssemblyAI transcription projects with unit tests (mocked), integration tests (live API), and cost-controlled test strategies.\n\n## Prerequisites\n- GitHub repository with Actions enabled\n- AssemblyAI API key for testing\n- npm\u002Fpnpm project configured\n\n## Instructions\n\n### Step 1: GitHub Actions Workflow\n\n```yaml\n# .github\u002Fworkflows\u002Fassemblyai-tests.yml\nname: AssemblyAI Tests\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\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        # Unit tests use mocked AssemblyAI client — no API key needed\n\n  integration-tests:\n    runs-on: ubuntu-latest\n    # Only run on main branch to limit API costs\n    if: github.ref == 'refs\u002Fheads\u002Fmain'\n    env:\n      ASSEMBLYAI_API_KEY: ${{ secrets.ASSEMBLYAI_API_KEY }}\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 run test:integration\n        timeout-minutes: 5\n```\n\n### Step 2: Configure Secrets\n\n```bash\n# Store API key as GitHub secret\ngh secret set ASSEMBLYAI_API_KEY --body \"your-test-api-key\"\n\n# Use a separate test key with lower quota to control costs\n# Get one from https:\u002F\u002Fwww.assemblyai.com\u002Fapp\u002Faccount\n```\n\n### Step 3: Unit Tests (Mocked — Free, Fast)\n\n```typescript\n\u002F\u002F tests\u002Funit\u002Ftranscription.test.ts\nimport { describe, it, expect, vi, beforeEach } from 'vitest';\nimport { AssemblyAI } from 'assemblyai';\n\nvi.mock('assemblyai', () => ({\n  AssemblyAI: vi.fn().mockImplementation(() => ({\n    transcripts: {\n      transcribe: vi.fn().mockResolvedValue({\n        id: 'mock-transcript-id',\n        status: 'completed',\n        text: 'Hello world, this is a test transcription.',\n        audio_duration: 5.2,\n        words: [\n          { text: 'Hello', start: 0, end: 300, confidence: 0.99 },\n          { text: 'world', start: 310, end: 600, confidence: 0.98 },\n        ],\n        utterances: [\n          { speaker: 'A', text: 'Hello world, this is a test transcription.', start: 0, end: 5200 },\n        ],\n      }),\n      get: vi.fn(),\n      list: vi.fn().mockResolvedValue({\n        transcripts: [{ id: 'mock-1', status: 'completed' }],\n      }),\n      delete: vi.fn().mockResolvedValue({}),\n    },\n    lemur: {\n      task: vi.fn().mockResolvedValue({\n        request_id: 'mock-lemur-id',\n        response: 'This is a greeting recording.',\n      }),\n      summary: vi.fn().mockResolvedValue({\n        response: 'The audio contains a greeting.',\n      }),\n    },\n  })),\n}));\n\ndescribe('TranscriptionService', () => {\n  it('should transcribe audio and return text', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const result = await client.transcripts.transcribe({\n      audio: 'https:\u002F\u002Fexample.com\u002Ftest.wav',\n    });\n\n    expect(result.status).toBe('completed');\n    expect(result.text).toContain('Hello world');\n    expect(result.words).toHaveLength(2);\n  });\n\n  it('should handle speaker diarization', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const result = await client.transcripts.transcribe({\n      audio: 'https:\u002F\u002Fexample.com\u002Ftest.wav',\n      speaker_labels: true,\n    });\n\n    expect(result.utterances).toBeDefined();\n    expect(result.utterances![0].speaker).toBe('A');\n  });\n\n  it('should run LeMUR task', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const { response } = await client.lemur.task({\n      transcript_ids: ['mock-transcript-id'],\n      prompt: 'Summarize.',\n    });\n\n    expect(response).toBeTruthy();\n  });\n});\n```\n\n### Step 4: Integration Tests (Live API — Controlled)\n\n```typescript\n\u002F\u002F tests\u002Fintegration\u002Fassemblyai.test.ts\nimport { describe, it, expect } from 'vitest';\nimport { AssemblyAI } from 'assemblyai';\n\n\u002F\u002F Use a short, free sample audio to minimize costs\nconst TEST_AUDIO = 'https:\u002F\u002Fstorage.googleapis.com\u002Faai-web-samples\u002F5_common_sports_702.wav';\n\nconst skipIfNoKey = !process.env.ASSEMBLYAI_API_KEY;\n\ndescribe.skipIf(skipIfNoKey)('AssemblyAI Integration', () => {\n  const client = new AssemblyAI({\n    apiKey: process.env.ASSEMBLYAI_API_KEY!,\n  });\n\n  it('should transcribe a short audio file', async () => {\n    const transcript = await client.transcripts.transcribe({\n      audio: TEST_AUDIO,\n    });\n\n    expect(transcript.status).toBe('completed');\n    expect(transcript.text).toBeTruthy();\n    expect(transcript.audio_duration).toBeGreaterThan(0);\n    expect(transcript.words?.length).toBeGreaterThan(0);\n  }, 60_000); \u002F\u002F 60s timeout for transcription\n\n  it('should list recent transcripts', async () => {\n    const page = await client.transcripts.list({ limit: 5 });\n    expect(page.transcripts).toBeDefined();\n    expect(Array.isArray(page.transcripts)).toBe(true);\n  });\n\n  it('should run LeMUR on a transcript', async () => {\n    const transcript = await client.transcripts.transcribe({\n      audio: TEST_AUDIO,\n    });\n\n    const { response } = await client.lemur.task({\n      transcript_ids: [transcript.id],\n      prompt: 'What is this about? One sentence.',\n    });\n\n    expect(response).toBeTruthy();\n    expect(response.length).toBeGreaterThan(10);\n  }, 90_000);\n});\n```\n\n### Step 5: Cost-Controlled Testing Strategy\n\n```yaml\n# Only run integration tests on main (not on every PR)\n# Use short sample audio (~30s = ~$0.002 per test run)\n# Cache transcript IDs across tests when possible\n\n# In package.json:\n# \"test\": \"vitest --exclude='**\u002Fintegration\u002F**'\"\n# \"test:integration\": \"vitest --include='**\u002Fintegration\u002F**'\"\n```\n\n## Output\n- Unit test pipeline (mocked, runs on every PR)\n- Integration test pipeline (live API, runs on main only)\n- GitHub Secrets configured for API key\n- Cost-controlled test strategy\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret not found | Missing GitHub secret | `gh secret set ASSEMBLYAI_API_KEY` |\n| Integration test timeout | Slow transcription | Increase timeout to 60s+, use short audio |\n| Flaky tests | Network latency | Add retry logic, use `vitest.retries(2)` |\n| High test costs | Long audio files | Use 30-second sample audio |\n\n## Resources\n- [GitHub Actions Documentation](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions)\n- [Vitest Documentation](https:\u002F\u002Fvitest.dev\u002F)\n- [AssemblyAI Node SDK](https:\u002F\u002Fgithub.com\u002FAssemblyAI\u002Fassemblyai-node-sdk)\n\n## Next Steps\nFor deployment patterns, see `assemblyai-deploy-integration`.\n\n","# AssemblyAI CI Integration\n\n## Overview\nSet up CI\u002FCD pipelines for AssemblyAI transcription projects with unit tests (mocked), integration tests (live API), and cost-controlled test strategies.\n\n## Prerequisites\n- GitHub repository with Actions enabled\n- AssemblyAI API key for testing\n- npm\u002Fpnpm project configured\n\n## Instructions\n\n### Step 1: GitHub Actions Workflow\n\n```yaml\n# .github\u002Fworkflows\u002Fassemblyai-tests.yml\nname: AssemblyAI Tests\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\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        # Unit tests use mocked AssemblyAI client — no API key needed\n\n  integration-tests:\n    runs-on: ubuntu-latest\n    # Only run on main branch to limit API costs\n    if: github.ref == 'refs\u002Fheads\u002Fmain'\n    env:\n      ASSEMBLYAI_API_KEY: ${{ secrets.ASSEMBLYAI_API_KEY }}\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 run test:integration\n        timeout-minutes: 5\n```\n\n### Step 2: Configure Secrets\n\n```bash\n# Store API key as GitHub secret\ngh secret set ASSEMBLYAI_API_KEY --body \"your-test-api-key\"\n\n# Use a separate test key with lower quota to control costs\n# Get one from https:\u002F\u002Fwww.assemblyai.com\u002Fapp\u002Faccount\n```\n\n### Step 3: Unit Tests (Mocked — Free, Fast)\n\n```typescript\n\u002F\u002F tests\u002Funit\u002Ftranscription.test.ts\nimport { describe, it, expect, vi, beforeEach } from 'vitest';\nimport { AssemblyAI } from 'assemblyai';\n\nvi.mock('assemblyai', () => ({\n  AssemblyAI: vi.fn().mockImplementation(() => ({\n    transcripts: {\n      transcribe: vi.fn().mockResolvedValue({\n        id: 'mock-transcript-id',\n        status: 'completed',\n        text: 'Hello world, this is a test transcription.',\n        audio_duration: 5.2,\n        words: [\n          { text: 'Hello', start: 0, end: 300, confidence: 0.99 },\n          { text: 'world', start: 310, end: 600, confidence: 0.98 },\n        ],\n        utterances: [\n          { speaker: 'A', text: 'Hello world, this is a test transcription.', start: 0, end: 5200 },\n        ],\n      }),\n      get: vi.fn(),\n      list: vi.fn().mockResolvedValue({\n        transcripts: [{ id: 'mock-1', status: 'completed' }],\n      }),\n      delete: vi.fn().mockResolvedValue({}),\n    },\n    lemur: {\n      task: vi.fn().mockResolvedValue({\n        request_id: 'mock-lemur-id',\n        response: 'This is a greeting recording.',\n      }),\n      summary: vi.fn().mockResolvedValue({\n        response: 'The audio contains a greeting.',\n      }),\n    },\n  })),\n}));\n\ndescribe('TranscriptionService', () => {\n  it('should transcribe audio and return text', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const result = await client.transcripts.transcribe({\n      audio: 'https:\u002F\u002Fexample.com\u002Ftest.wav',\n    });\n\n    expect(result.status).toBe('completed');\n    expect(result.text).toContain('Hello world');\n    expect(result.words).toHaveLength(2);\n  });\n\n  it('should handle speaker diarization', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const result = await client.transcripts.transcribe({\n      audio: 'https:\u002F\u002Fexample.com\u002Ftest.wav',\n      speaker_labels: true,\n    });\n\n    expect(result.utterances).toBeDefined();\n    expect(result.utterances![0].speaker).toBe('A');\n  });\n\n  it('should run LeMUR task', async () => {\n    const client = new AssemblyAI({ apiKey: 'test-key' });\n    const { response } = await client.lemur.task({\n      transcript_ids: ['mock-transcript-id'],\n      prompt: 'Summarize.',\n    });\n\n    expect(response).toBeTruthy();\n  });\n});\n```\n\n### Step 4: Integration Tests (Live API — Controlled)\n\n```typescript\n\u002F\u002F tests\u002Fintegration\u002Fassemblyai.test.ts\nimport { describe, it, expect } from 'vitest';\nimport { AssemblyAI } from 'assemblyai';\n\n\u002F\u002F Use a short, free sample audio to minimize costs\nconst TEST_AUDIO = 'https:\u002F\u002Fstorage.googleapis.com\u002Faai-web-samples\u002F5_common_sports_702.wav';\n\nconst skipIfNoKey = !process.env.ASSEMBLYAI_API_KEY;\n\ndescribe.skipIf(skipIfNoKey)('AssemblyAI Integration', () => {\n  const client = new AssemblyAI({\n    apiKey: process.env.ASSEMBLYAI_API_KEY!,\n  });\n\n  it('should transcribe a short audio file', async () => {\n    const transcript = await client.transcripts.transcribe({\n      audio: TEST_AUDIO,\n    });\n\n    expect(transcript.status).toBe('completed');\n    expect(transcript.text).toBeTruthy();\n    expect(transcript.audio_duration).toBeGreaterThan(0);\n    expect(transcript.words?.length).toBeGreaterThan(0);\n  }, 60_000); \u002F\u002F 60s timeout for transcription\n\n  it('should list recent transcripts', async () => {\n    const page = await client.transcripts.list({ limit: 5 });\n    expect(page.transcripts).toBeDefined();\n    expect(Array.isArray(page.transcripts)).toBe(true);\n  });\n\n  it('should run LeMUR on a transcript', async () => {\n    const transcript = await client.transcripts.transcribe({\n      audio: TEST_AUDIO,\n    });\n\n    const { response } = await client.lemur.task({\n      transcript_ids: [transcript.id],\n      prompt: 'What is this about? One sentence.',\n    });\n\n    expect(response).toBeTruthy();\n    expect(response.length).toBeGreaterThan(10);\n  }, 90_000);\n});\n```\n\n### Step 5: Cost-Controlled Testing Strategy\n\n```yaml\n# Only run integration tests on main (not on every PR)\n# Use short sample audio (~30s = ~$0.002 per test run)\n# Cache transcript IDs across tests when possible\n\n# In package.json:\n# \"test\": \"vitest --exclude='**\u002Fintegration\u002F**'\"\n# \"test:integration\": \"vitest --include='**\u002Fintegration\u002F**'\"\n```\n\n## Output\n- Unit test pipeline (mocked, runs on every PR)\n- Integration test pipeline (live API, runs on main only)\n- GitHub Secrets configured for API key\n- Cost-controlled test strategy\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Secret not found | Missing GitHub secret | `gh secret set ASSEMBLYAI_API_KEY` |\n| Integration test timeout | Slow transcription | Increase timeout to 60s+, use short audio |\n| Flaky tests | Network latency | Add retry logic, use `vitest.retries(2)` |\n| High test costs | Long audio files | Use 30-second sample audio |\n\n## Resources\n- [GitHub Actions Documentation](https:\u002F\u002Fdocs.github.com\u002Fen\u002Factions)\n- [Vitest Documentation](https:\u002F\u002Fvitest.dev\u002F)\n- [AssemblyAI Node SDK](https:\u002F\u002Fgithub.com\u002FAssemblyAI\u002Fassemblyai-node-sdk)\n\n## Next Steps\nFor deployment patterns, see `assemblyai-deploy-integration`.\n\n",{"name":5,"tags":57,"author":62,"license":15,"version":63,"description":64,"allowed-tools":65,"compatible-with":66},[58,59,60,36,61,34],"saas","ai","speech-to-text","transcription","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure AssemblyAI CI\u002FCD integration with GitHub Actions and testing.\nUse when setting up automated testing, configuring CI pipelines,\nor integrating AssemblyAI transcription tests into your build process.\nTrigger with phrases like \"assemblyai CI\", \"assemblyai GitHub Actions\",\n\"assemblyai automated tests\", \"CI assemblyai\".\n","Read, Write, Edit, Bash(gh:*)","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-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":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-ci-integration",{"tool":82,"command":83},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-ci-integration",{"tool":85,"command":86},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-ci-integration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-ci-integration\u002FSKILL.md",true,[],[91,103,113,122,128,135],{"skillNo":92,"name":93,"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":94,"categories":95,"keywords":99,"publishedAt":52},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[96],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[100,101,102],"model","model hierarchy","model hierarchy skill",{"skillNo":104,"name":105,"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":106,"categories":107,"keywords":109,"publishedAt":52},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[108],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},[110,111,112],"MCP","zoom","zoom mcp",{"skillNo":114,"name":115,"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":116,"categories":117,"keywords":118,"publishedAt":52},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[119,120,121,111],"sdk","zoom apps sdk","apps",{"skillNo":123,"name":124,"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":125,"categories":126,"keywords":127,"publishedAt":52},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[124],{"skillNo":129,"name":130,"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":131,"categories":132,"keywords":134,"publishedAt":52},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[133],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},[130],{"skillNo":136,"name":137,"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":138,"categories":139,"keywords":140,"publishedAt":52},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[137]]