[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71AE7GEMECDRN8ZHA6R17CQ":3,"skill-same:01M71AE7GEMECDRN8ZHA6R17CQ":57},{"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":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":14,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M71AE7GEMECDRN8ZHA6R17CQ","zustand-store-ts",null,"Create Zustand stores following established patterns with proper TypeScript types and middleware.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fzustand-store-ts\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"zustand store ts","zustand","store","typescript","create","community","patterns","middleware","types","with","unknown","2026","2026-11-10 10:12:30",false,"---\nname: zustand-store-ts\ndescription: \"Create Zustand stores following established patterns with proper TypeScript types and middleware.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Zustand Store\n\nCreate Zustand stores following established patterns with proper TypeScript types and middleware.\n\n## Quick Start\n\nCopy the template from assets\u002Ftemplate.ts and replace placeholders:\n- `{{StoreName}}` → PascalCase store name (e.g., `Project`)\n- `{{description}}` → Brief description for JSDoc\n\n## Always Use subscribeWithSelector\n\n```typescript\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand\u002Fmiddleware';\n\nexport const useMyStore = create\u003CMyStore>()(\n  subscribeWithSelector((set, get) => ({\n    \u002F\u002F state and actions\n  }))\n);\n```\n\n## Separate State and Actions\n\n```typescript\nexport interface MyState {\n  items: Item[];\n  isLoading: boolean;\n}\n\nexport interface MyActions {\n  addItem: (item: Item) => void;\n  loadItems: () => Promise\u003Cvoid>;\n}\n\nexport type MyStore = MyState & MyActions;\n```\n\n## Use Individual Selectors\n\n```typescript\n\u002F\u002F Good - only re-renders when `items` changes\nconst items = useMyStore((state) => state.items);\n\n\u002F\u002F Avoid - re-renders on any state change\nconst { items, isLoading } = useMyStore();\n```\n\n## Subscribe Outside React\n\n```typescript\nuseMyStore.subscribe(\n  (state) => state.selectedId,\n  (selectedId) => console.log('Selected:', selectedId)\n);\n```\n\n## Integration Steps\n\n1. Create store in `src\u002Ffrontend\u002Fsrc\u002Fstore\u002F`\n2. Export from `src\u002Ffrontend\u002Fsrc\u002Fstore\u002Findex.ts`\n3. Add tests in `src\u002Ffrontend\u002Fsrc\u002Fstore\u002F*.test.ts`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Zustand Store\n\nCreate Zustand stores following established patterns with proper TypeScript types and middleware.\n\n## Quick Start\n\nCopy the template from assets\u002Ftemplate.ts and replace placeholders:\n- `{{StoreName}}` → PascalCase store name (e.g., `Project`)\n- `{{description}}` → Brief description for JSDoc\n\n## Always Use subscribeWithSelector\n\n```typescript\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand\u002Fmiddleware';\n\nexport const useMyStore = create\u003CMyStore>()(\n  subscribeWithSelector((set, get) => ({\n    \u002F\u002F state and actions\n  }))\n);\n```\n\n## Separate State and Actions\n\n```typescript\nexport interface MyState {\n  items: Item[];\n  isLoading: boolean;\n}\n\nexport interface MyActions {\n  addItem: (item: Item) => void;\n  loadItems: () => Promise\u003Cvoid>;\n}\n\nexport type MyStore = MyState & MyActions;\n```\n\n## Use Individual Selectors\n\n```typescript\n\u002F\u002F Good - only re-renders when `items` changes\nconst items = useMyStore((state) => state.items);\n\n\u002F\u002F Avoid - re-renders on any state change\nconst { items, isLoading } = useMyStore();\n```\n\n## Subscribe Outside React\n\n```typescript\nuseMyStore.subscribe(\n  (state) => state.selectedId,\n  (selectedId) => console.log('Selected:', selectedId)\n);\n```\n\n## Integration Steps\n\n1. Create store in `src\u002Ffrontend\u002Fsrc\u002Fstore\u002F`\n2. Export from `src\u002Ffrontend\u002Fsrc\u002Fstore\u002Findex.ts`\n3. Add tests in `src\u002Ffrontend\u002Fsrc\u002Fstore\u002F*.test.ts`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":29,"source":24,"date_added":36,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fzustand-store-ts","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill zustand-store-ts",{"tool":49,"command":50},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill zustand-store-ts",{"tool":52,"command":53},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill zustand-store-ts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fzustand-store-ts\u002FSKILL.md",true,[],[58,81,107,117,130,149],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":69,"publishedAt":31},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[70,71,72,73,74,75,76,77,78,79,80,28],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":31},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[88,89,90,91,92,93,72,94,95,96,97,98,99,100,101,102,103,104,105,106],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":108,"name":109,"nameZh":6,"description":110,"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":31},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[114,115,88,99,100,101,102,92,72,104,116,105,106,98,96,95,94,103,93,91],"trend radar","radar","pulse",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":31},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[124,125,126,127,128,129],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":141,"publishedAt":31},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[136],{"categoryNo":137,"categoryName":138,"taxonomyType":139,"taxonomyTypeDesc":140},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[132,78,142,143,144,28,99,145,146,147,90,148,103],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":31},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[151,156,157,158,103,159,146,160,161,162,163,164],"status","play","go","latest","github","discover","control","cmd","volume"]