[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6JDVQTN7RKVVZBAEBX9AS2W":3,"skill-same:01M6JDVQTN7RKVVZBAEBX9AS2W":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M6JDVQTN7RKVVZBAEBX9AS2W","google-drive",null,"List, download, upload, and share Google Drive files, including public shared folder video intake when OAuth is unavailable.","S3YED\u002Fappie-kit","S3YED","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F62743867?v=4","01M6JBKBRRVP6KMS0VWZ27T3R6","01M6JBKBX0KG30284PW1DBYJT1",14,"MIT","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fgoogle-drive\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34,35,36,37,38,39],"google","google drive","drive","share","intake","OAuth","Video","download","public","list","files","upload","shared","folder","2026-11-10 10:12:30",false,"---\nname: google-drive\ndescription: List, download, upload, and share Google Drive files, including public shared folder video intake when OAuth is unavailable.\n---\n\n# Google Drive Skill\n\n## Purpose\nInteract with Google Drive: list files, upload, download, create folders, manage sharing, and recover media from public shared Drive folders for analysis or social publishing.\n\n## Key Folders\n\n| Folder | ID | Purpose |\n|--------|----|---------|\n| **CURRENT** | `1SfLKzSCFsFWaCUl63_L9GtJWMIKSWTyO` | Active client projects (Weblyfe) |\n\n## Capabilities\n- List files in folders\n- Upload files\n- Download files\n- Create folders\n- Set sharing permissions\n- Search files\n- Download public shared video files even when OAuth is expired\u002Frevoked\n\n## Configuration Required\n\n### Environment Variables\n```bash\nGOOGLE_CLIENT_ID=your-client-id\nGOOGLE_CLIENT_SECRET=your-client-secret\n# OAuth token obtained via OAuth flow\nGOOGLE_ACCESS_TOKEN=your-access-token\nGOOGLE_REFRESH_TOKEN=your-refresh-token\n```\n\n### Setup\n1. Create OAuth app in Google Cloud Console\n2. Enable Google Drive API\n3. Get credentials\n4. Complete OAuth flow to get tokens\n\n## Usage Examples\n\n### List Files\n```bash\ngdrive list --folder \"Appie Backups\"\n```\n\n### Upload\n```bash\ngdrive upload \u002Fpath\u002Fto\u002Ffile.txt --name \"backup.txt\" --folder \"Appie Backups\"\n```\n\n### Download\n```bash\ngdrive download \u003Cfile-id> --output \u002Fpath\u002Fto\u002Fsave.txt\n```\n\n### Create Folder\n```bash\ngdrive mkdir \"New Folder\" --parent \"parent-folder-id\"\n```\n\n## OAuth\u002Fprivate Drive access checks\n\nWhen the user asks whether Drive access is available, do not rely on stored account presence alone. First run a real read-only Drive probe with `gog drive ls --account seyed@weblyfe.nl --json --no-input` and inspect `gog auth list --json` for scopes. See `references\u002Foauth-drive-access-check.md` for the exact check sequence and safe reporting pattern.\n\n## Appie-2 OAuth with `gog`\n\nFor private Drive\u002FDocs\u002FSheets access on Appie-2, use `references\u002Fgog-oauth-drive.md`. Key points: `gog` stores config\u002Ftokens under `\u002Froot\u002F.config\u002Fgogcli\u002F`; verify with `gog drive ls --account seyed@weblyfe.nl`; if tokens are expired or revoked, use the remote two-step OAuth flow and never echo auth codes or token contents.\n\n## Public shared folder video fallback\n\nIf Drive OAuth fails with `invalid_grant`, `401`, or missing scopes but the user gave a public folder link, do not stop immediately. Use `references\u002Fpublic-shared-folder-video-download.md`:\n\n1. Fetch the public folder HTML with a browser user agent.\n2. Extract embedded Drive file IDs, names, MIME types, and sizes.\n3. For large videos, parse the Google virus-scan warning form inputs.\n4. Download via `https:\u002F\u002Fdrive.usercontent.google.com\u002Fdownload` with `id`, `export=download`, `confirm=t`, and `uuid`.\n5. Verify with `ffprobe` before analysis or publishing.\n6. For social use, transcode MOV\u002FHEVC to H.264\u002FAAC MP4 first.\n\n## API Wrapper\n\n### `api\u002Fgoogle-drive.js`\n```javascript\nconst drive = require('.\u002Fapi\u002Fgoogle-drive.js');\n\n\u002F\u002F List files\nconst files = await drive.listFiles({ folderId: 'xxx' });\n\n\u002F\u002F Upload\nawait drive.uploadFile('\u002Fpath\u002Fto\u002Ffile.txt', { name: 'file.txt', folderId: 'xxx' });\n\n\u002F\u002F Download\nawait drive.downloadFile('file-id', '\u002Fpath\u002Fto\u002Fsave.txt');\n\n\u002F\u002F Search\nconst results = await drive.searchFiles('query string');\n```\n\n## Folder-to-folder media transfers\n\nWhen the user asks to move or copy batches of videos\u002Fassets between Drive folders, use `references\u002Ffolder-to-folder-media-copy.md`. Prefer `gog drive copy` for Drive-native file copies, inventory source\u002Fdestination first, skip exact-name duplicates, then verify count, missing files, and binary size matches before reporting.\n\n## Common Use Cases\n\n| Use Case | Implementation |\n|----------|----------------|\n| Auto-backup | Appie → Drive → Daily backup folder |\n| File sharing | Generate share links |\n| Public video intake | Parse public folder HTML and use the large-file interstitial flow; see `references\u002Fpublic-shared-folder-video-download.md` |\n| Folder-to-folder media transfer | Copy accessible Drive media with `gog drive copy`; see `references\u002Ffolder-to-folder-media-copy.md` |\n| Document sync | Sync local files to Drive |\n| Team folders | Create organized folder structure |\n\n## Error Handling\n\n- **401**: Token expired - refresh token, or use the public shared folder fallback if the URL is public\n- **403**: Permission denied - check sharing settings\n- **404**: File not found - verify file-id\n- **429**: Rate limit - wait and retry\n- **Google virus scan warning**: For large public files, parse the download form and use `drive.usercontent.google.com\u002Fdownload`\n\n## See Also\n- [Google Drive API Docs](https:\u002F\u002Fdevelopers.google.com\u002Fdrive\u002Fapi\u002Fv3)\n","# Google Drive Skill\n\n## Purpose\nInteract with Google Drive: list files, upload, download, create folders, manage sharing, and recover media from public shared Drive folders for analysis or social publishing.\n\n## Key Folders\n\n| Folder | ID | Purpose |\n|--------|----|---------|\n| **CURRENT** | `1SfLKzSCFsFWaCUl63_L9GtJWMIKSWTyO` | Active client projects (Weblyfe) |\n\n## Capabilities\n- List files in folders\n- Upload files\n- Download files\n- Create folders\n- Set sharing permissions\n- Search files\n- Download public shared video files even when OAuth is expired\u002Frevoked\n\n## Configuration Required\n\n### Environment Variables\n```bash\nGOOGLE_CLIENT_ID=your-client-id\nGOOGLE_CLIENT_SECRET=your-client-secret\n# OAuth token obtained via OAuth flow\nGOOGLE_ACCESS_TOKEN=your-access-token\nGOOGLE_REFRESH_TOKEN=your-refresh-token\n```\n\n### Setup\n1. Create OAuth app in Google Cloud Console\n2. Enable Google Drive API\n3. Get credentials\n4. Complete OAuth flow to get tokens\n\n## Usage Examples\n\n### List Files\n```bash\ngdrive list --folder \"Appie Backups\"\n```\n\n### Upload\n```bash\ngdrive upload \u002Fpath\u002Fto\u002Ffile.txt --name \"backup.txt\" --folder \"Appie Backups\"\n```\n\n### Download\n```bash\ngdrive download \u003Cfile-id> --output \u002Fpath\u002Fto\u002Fsave.txt\n```\n\n### Create Folder\n```bash\ngdrive mkdir \"New Folder\" --parent \"parent-folder-id\"\n```\n\n## OAuth\u002Fprivate Drive access checks\n\nWhen the user asks whether Drive access is available, do not rely on stored account presence alone. First run a real read-only Drive probe with `gog drive ls --account seyed@weblyfe.nl --json --no-input` and inspect `gog auth list --json` for scopes. See `references\u002Foauth-drive-access-check.md` for the exact check sequence and safe reporting pattern.\n\n## Appie-2 OAuth with `gog`\n\nFor private Drive\u002FDocs\u002FSheets access on Appie-2, use `references\u002Fgog-oauth-drive.md`. Key points: `gog` stores config\u002Ftokens under `\u002Froot\u002F.config\u002Fgogcli\u002F`; verify with `gog drive ls --account seyed@weblyfe.nl`; if tokens are expired or revoked, use the remote two-step OAuth flow and never echo auth codes or token contents.\n\n## Public shared folder video fallback\n\nIf Drive OAuth fails with `invalid_grant`, `401`, or missing scopes but the user gave a public folder link, do not stop immediately. Use `references\u002Fpublic-shared-folder-video-download.md`:\n\n1. Fetch the public folder HTML with a browser user agent.\n2. Extract embedded Drive file IDs, names, MIME types, and sizes.\n3. For large videos, parse the Google virus-scan warning form inputs.\n4. Download via `https:\u002F\u002Fdrive.usercontent.google.com\u002Fdownload` with `id`, `export=download`, `confirm=t`, and `uuid`.\n5. Verify with `ffprobe` before analysis or publishing.\n6. For social use, transcode MOV\u002FHEVC to H.264\u002FAAC MP4 first.\n\n## API Wrapper\n\n### `api\u002Fgoogle-drive.js`\n```javascript\nconst drive = require('.\u002Fapi\u002Fgoogle-drive.js');\n\n\u002F\u002F List files\nconst files = await drive.listFiles({ folderId: 'xxx' });\n\n\u002F\u002F Upload\nawait drive.uploadFile('\u002Fpath\u002Fto\u002Ffile.txt', { name: 'file.txt', folderId: 'xxx' });\n\n\u002F\u002F Download\nawait drive.downloadFile('file-id', '\u002Fpath\u002Fto\u002Fsave.txt');\n\n\u002F\u002F Search\nconst results = await drive.searchFiles('query string');\n```\n\n## Folder-to-folder media transfers\n\nWhen the user asks to move or copy batches of videos\u002Fassets between Drive folders, use `references\u002Ffolder-to-folder-media-copy.md`. Prefer `gog drive copy` for Drive-native file copies, inventory source\u002Fdestination first, skip exact-name duplicates, then verify count, missing files, and binary size matches before reporting.\n\n## Common Use Cases\n\n| Use Case | Implementation |\n|----------|----------------|\n| Auto-backup | Appie → Drive → Daily backup folder |\n| File sharing | Generate share links |\n| Public video intake | Parse public folder HTML and use the large-file interstitial flow; see `references\u002Fpublic-shared-folder-video-download.md` |\n| Folder-to-folder media transfer | Copy accessible Drive media with `gog drive copy`; see `references\u002Ffolder-to-folder-media-copy.md` |\n| Document sync | Sync local files to Drive |\n| Team folders | Create organized folder structure |\n\n## Error Handling\n\n- **401**: Token expired - refresh token, or use the public shared folder fallback if the URL is public\n- **403**: Permission denied - check sharing settings\n- **404**: File not found - verify file-id\n- **429**: Rate limit - wait and retry\n- **Google virus scan warning**: For large public files, parse the download form and use `drive.usercontent.google.com\u002Fdownload`\n\n## See Also\n- [Google Drive API Docs](https:\u002F\u002Fdevelopers.google.com\u002Fdrive\u002Fapi\u002Fv3)\n",{"name":5,"description":7},"master","8ec37df6d71fb664ea19d32c079e7d3ff931a8e0","skills\u002Fintegrations\u002Fgoogle-drive",3,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit","https:\u002F\u002Fweblyfe.ai","https:\u002F\u002Fgithub.com\u002FS3YED","2026-08-27 01:54:02",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add S3YED\u002Fappie-kit --skill google-drive",{"tool":59,"command":60},"bunx","bunx skills add S3YED\u002Fappie-kit --skill google-drive",{"tool":62,"command":63},"pnpm","pnpm dlx skills add S3YED\u002Fappie-kit --skill google-drive","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fgoogle-drive\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"api.js","SCRIPT","脚本",11279,"https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fintegrations\u002Fgoogle-drive\u002Fapi.js",[74,104,139,165,196,221],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":40},"01M6JFD4M6N4DSGC7TXEJ5R3J2","ai-music","AI music generation and audio tools: HeartMuLa lyrics-to-music generation, songwriting craft (+ Suno prompts), and audio spectrogram\u002Ffeature visualization.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fwethlete\u002Fai-music\u002FSKILL.md",[80,83,84],{"categoryNo":81,"categoryName":82,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"music","ai music","humanizer","visualization","Tools","Audio","hermes","hermes agent","songwriting","suno","lyrics","prompts","heartmula","craft","generation","feature","ai music generation","music generation",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":118,"publishedAt":40},"01M6JFCZE4XNFQFMNZDHKHT5V5","agentic-webdesign-design-system-ingestion","Use v0 Design Systems 2.0, Bolt Design System Agents, or Lovable to generate production UI from a client's real design system components — not generic Tailwind. Use when building a client website where brand consistency matters.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-design-system-ingestion\u002FSKILL.md",[110,113],{"categoryNo":111,"categoryName":112,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138],"design","agentic","design system","system","ingestion","webdesign","agentic webdesign design system ingestion","components","generate","design systems","website","ui","Tailwind","bolt","lovable","v0","design-system","wed","design system components","appie",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":147,"publishedAt":40},"01M6JFCVPX3913CFAS6QQJ33ZB","agentic-webdesign-agent-elements","Use 21st.dev Agent Elements — 25 shadcn\u002Fui components purpose-built for AI agent UIs. Tool cards (Bash, Edit, Search, Plan, Subagent, MCP), chat, input, streaming. Open source, shadcn-registry install, no runtime lock-in.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fweb-design\u002Fagentic-webdesign-agent-elements\u002FSKILL.md",[145,146],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},[120,148,124,149,150,151,126,152,153,154,155,156,157,158,159,160,161,162,163,164],"elements","agentic webdesign agent elements","MCP","ai agent","registry","search","streaming","open source","open","Bash","plan","subagent","edit","install","input","lock","source",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":175,"publishedAt":40},"01M6JFCQC7H65M9QJ6TRE71BS1","vercel-deployment","Deploy static sites and frontends to Vercel — handles both CLI and REST API paths, including the CLI token sanitization workaround.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fvercel-deployment\u002FSKILL.md",[171,174],{"categoryNo":172,"categoryName":173,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195],"deployment","vercel deployment","vercel","macos","cli","linux","windows","deploy","vercel deploy","REST","api","site","deploy to vercel","token","rest api","host","sites","paths","sanitization","static site",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":203,"publishedAt":40},"01M6JFCM4SMTXBM5A01BK2YQG1","software-quality-workflows","Umbrella workflow for TDD, debugging, code simplification, spikes, pre-commit review, and debugger-assisted investigation.","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Fsoftware-quality-workflows\u002FSKILL.md",[202],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220],"workflows","quality","software","software quality workflows","review","tdd","workflow","commit","debugging","code","debugger","pre-commit","investigation","code simplification","user","simplification","for",{"skillNo":222,"name":223,"nameZh":6,"description":224,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":225,"categories":226,"keywords":234,"publishedAt":40},"01M6JFCGD0M6CEATY01W7YN6DB","react-component-refactoring","Safely refactor large React components into smaller, maintainable pieces using proven patterns","https:\u002F\u002Fgithub.com\u002FS3YED\u002Fappie-kit\u002Fblob\u002Fmaster\u002Fskills\u002Fsoftware-development\u002Freact-component-refactoring\u002FSKILL.md",[227,230,233],{"categoryNo":228,"categoryName":229,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":231,"categoryName":232,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[235,236,237,238,239,240,241,242,179,243,244,126,245,182,246,213,247,248,249,250],"react","component","refactoring","component refactoring","react component","react component refactoring","frontend","writing","safe","typescript","react components","modular","refactor","simplify","patterns","test-driven-development"]