[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EQFMCNETA214WSNBBM2191":3,"skill-same:01M6EQFMCNETA214WSNBBM2191":89},{"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":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6EQFMCNETA214WSNBBM2191","superpower-zustand",null,"MANDATORY for creating Zustand stores. This skill is required when users request state management, creating stores, or mention Zustand. Do NOT create Zustand stores without this skill - all stores must use the required StoreBuilder pattern with immer middleware and factory pattern separation","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\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36],"zustand","superpower zustand","create","state management","state","factory","management","use","do","pattern","users","separation","middleware","2026-11-10 10:12:30",false,"---\nname: superpower-zustand\ndescription: MANDATORY for creating Zustand stores. This skill is required when users request state management, creating stores, or mention Zustand. Do NOT create Zustand stores without this skill - all stores must use the required StoreBuilder pattern with immer middleware and factory pattern separation\n---\n\n# Zustand StoreBuilder Pattern\n\n\u003CCRITICAL>\nDO NOT create Zustand stores using standard patterns (create with inline actions). ALL Zustand stores in this project MUST use the StoreBuilder pattern defined below. This is a required architectural standard, not a suggestion.\n\u003C\u002FCRITICAL>\n\n## Purpose\n\nEnforce a standardized, type-safe approach to creating Zustand stores that:\n- Separates state definition from actions using the factory pattern\n- Integrates immer middleware for convenient immutable updates\n- Supports optional persistence with fine-grained control\n- Exposes both reactive (useStore hook) and non-reactive (get\u002Fset) access\n- Maintains consistent patterns across the codebase\n\n## When to Use This Skill\n\nUse this skill when:\n- Creating new Zustand stores for state management\n- User requests state management solutions in a React application\n- Implementing stores for any feature requiring client-side state\n\n## Required Pattern\n\nAll Zustand stores MUST use the StoreBuilder utility located in `assets\u002Fstorebuilder.ts`.\n\n### Core Implementation Steps\n\n1. **Copy the StoreBuilder utility** (if not already in the project)\n   - Source: `skills\u002Fsuperpower-zustand\u002Fassets\u002Fstorebuilder.ts`\n   - Destination: `src\u002Flib\u002Fstorebuilder.ts` (or similar location in the project)\n\n2. **Define state type separately from actions**\n   - Create a type for the full store (state + actions)\n   - Use `Omit` to exclude action methods when passing to StoreBuilder\n\n3. **Initialize the store with StoreBuilder**\n   - Pass initial state as first argument\n   - Optionally pass PersistConfig as second argument for persistence\n\n4. **Separate actions using createFactory**\n   - Define all actions as methods in the createFactory argument\n   - Actions access `set` from the StoreBuilder closure\n   - Use immer-style mutations within `set` callbacks\n\n5. **Export the factory-created hook**\n   - The hook returned by createFactory combines state, actions, and store utilities\n\n### Required Code Structure\n\n```typescript\nimport { StoreBuilder } from '.\u002Fstorebuilder';\n\n\u002F\u002F 1. Define complete state type\ntype MyStoreState = {\n  \u002F\u002F State fields\n  value: number;\n  items: string[];\n\n  \u002F\u002F Action methods\n  setValue: (v: number) => void;\n  addItem: (item: string) => void;\n};\n\n\u002F\u002F 2. Initialize StoreBuilder with state only (Omit actions)\nconst { set, createFactory } = StoreBuilder\u003COmit\u003CMyStoreState, 'setValue' | 'addItem'>>(\n  {\n    value: 0,\n    items: [],\n  },\n  \u002F\u002F Optional: persistence config\n  \u002F\u002F {\n  \u002F\u002F   name: 'my-store',\n  \u002F\u002F   version: 1,\n  \u002F\u002F }\n);\n\n\u002F\u002F 3. Create factory with actions\nconst useMyStore = createFactory({\n  setValue: (v: number) => set((state) => { state.value = v; }),\n  addItem: (item: string) => set((state) => { state.items.push(item); }),\n});\n\n\u002F\u002F 4. Export the hook\nexport { useMyStore };\n```\n\n### State Updates with Immer\n\nWhen using `set`, write mutations directly on the draft state (immer middleware is included):\n\n```typescript\n\u002F\u002F ✅ Correct: Mutate draft\nset((state) => {\n  state.count += 1;\n  state.items.push(newItem);\n  state.nested.property = 'value';\n});\n\n\u002F\u002F ❌ Incorrect: Don't return new object\nset((state) => ({ ...state, count: state.count + 1 }));\n```\n\n### Persistence Configuration\n\nWhen state should persist across sessions:\n\n```typescript\nconst { createFactory } = StoreBuilder(\n  initialState,\n  {\n    name: 'storage-key',           \u002F\u002F Required: localStorage key\n    version: 1,                     \u002F\u002F Optional: for migration handling\n    storage: sessionStorage,        \u002F\u002F Optional: defaults to localStorage\n    partialize: (state) => ({       \u002F\u002F Optional: persist only specific fields\n      theme: state.theme,\n      preferences: state.preferences,\n    }),\n  }\n);\n```\n\n## Reference Documentation\n\nFor detailed examples and advanced patterns, read `references\u002Fpattern-guide.md`:\n- Basic usage examples\n- Persistence patterns\n- Complex stores with async actions\n- Using get\u002Fset outside React components\n- Type safety patterns\n\nLoad the reference documentation when:\n- Implementing complex stores with async operations\n- Needing examples of persistence configuration\n- User asks about advanced Zustand patterns\n- Unsure about specific implementation details\n\n## Verification\n\nAfter creating a store, verify:\n1. ✅ StoreBuilder utility is imported from project location\n2. ✅ State type uses `Omit` to exclude actions\n3. ✅ All actions are defined in `createFactory`, not in initial state\n4. ✅ State updates use immer-style mutations (mutate draft, don't return new object)\n5. ✅ Exported hook name follows convention (e.g., `useMyStore`)\n6. ✅ Persistence config is included if state should persist\n\n## Non-React Usage\n\nThe pattern supports non-reactive access outside React components:\n\n```typescript\nconst { get, set, subscribe } = StoreBuilder(initialState);\n\n\u002F\u002F Get current state\nconst current = get();\n\n\u002F\u002F Update state\nset((state) => { state.value = 10; });\n\n\u002F\u002F Subscribe to changes\nconst unsubscribe = subscribe((state) => console.log(state));\n```\n\nUse `get` and `set` when:\n- Accessing state in utility functions\n- Implementing middleware or side effects\n- Working outside React component lifecycle\n","# Zustand StoreBuilder Pattern\n\n\u003CCRITICAL>\nDO NOT create Zustand stores using standard patterns (create with inline actions). ALL Zustand stores in this project MUST use the StoreBuilder pattern defined below. This is a required architectural standard, not a suggestion.\n\u003C\u002FCRITICAL>\n\n## Purpose\n\nEnforce a standardized, type-safe approach to creating Zustand stores that:\n- Separates state definition from actions using the factory pattern\n- Integrates immer middleware for convenient immutable updates\n- Supports optional persistence with fine-grained control\n- Exposes both reactive (useStore hook) and non-reactive (get\u002Fset) access\n- Maintains consistent patterns across the codebase\n\n## When to Use This Skill\n\nUse this skill when:\n- Creating new Zustand stores for state management\n- User requests state management solutions in a React application\n- Implementing stores for any feature requiring client-side state\n\n## Required Pattern\n\nAll Zustand stores MUST use the StoreBuilder utility located in `assets\u002Fstorebuilder.ts`.\n\n### Core Implementation Steps\n\n1. **Copy the StoreBuilder utility** (if not already in the project)\n   - Source: `skills\u002Fsuperpower-zustand\u002Fassets\u002Fstorebuilder.ts`\n   - Destination: `src\u002Flib\u002Fstorebuilder.ts` (or similar location in the project)\n\n2. **Define state type separately from actions**\n   - Create a type for the full store (state + actions)\n   - Use `Omit` to exclude action methods when passing to StoreBuilder\n\n3. **Initialize the store with StoreBuilder**\n   - Pass initial state as first argument\n   - Optionally pass PersistConfig as second argument for persistence\n\n4. **Separate actions using createFactory**\n   - Define all actions as methods in the createFactory argument\n   - Actions access `set` from the StoreBuilder closure\n   - Use immer-style mutations within `set` callbacks\n\n5. **Export the factory-created hook**\n   - The hook returned by createFactory combines state, actions, and store utilities\n\n### Required Code Structure\n\n```typescript\nimport { StoreBuilder } from '.\u002Fstorebuilder';\n\n\u002F\u002F 1. Define complete state type\ntype MyStoreState = {\n  \u002F\u002F State fields\n  value: number;\n  items: string[];\n\n  \u002F\u002F Action methods\n  setValue: (v: number) => void;\n  addItem: (item: string) => void;\n};\n\n\u002F\u002F 2. Initialize StoreBuilder with state only (Omit actions)\nconst { set, createFactory } = StoreBuilder\u003COmit\u003CMyStoreState, 'setValue' | 'addItem'>>(\n  {\n    value: 0,\n    items: [],\n  },\n  \u002F\u002F Optional: persistence config\n  \u002F\u002F {\n  \u002F\u002F   name: 'my-store',\n  \u002F\u002F   version: 1,\n  \u002F\u002F }\n);\n\n\u002F\u002F 3. Create factory with actions\nconst useMyStore = createFactory({\n  setValue: (v: number) => set((state) => { state.value = v; }),\n  addItem: (item: string) => set((state) => { state.items.push(item); }),\n});\n\n\u002F\u002F 4. Export the hook\nexport { useMyStore };\n```\n\n### State Updates with Immer\n\nWhen using `set`, write mutations directly on the draft state (immer middleware is included):\n\n```typescript\n\u002F\u002F ✅ Correct: Mutate draft\nset((state) => {\n  state.count += 1;\n  state.items.push(newItem);\n  state.nested.property = 'value';\n});\n\n\u002F\u002F ❌ Incorrect: Don't return new object\nset((state) => ({ ...state, count: state.count + 1 }));\n```\n\n### Persistence Configuration\n\nWhen state should persist across sessions:\n\n```typescript\nconst { createFactory } = StoreBuilder(\n  initialState,\n  {\n    name: 'storage-key',           \u002F\u002F Required: localStorage key\n    version: 1,                     \u002F\u002F Optional: for migration handling\n    storage: sessionStorage,        \u002F\u002F Optional: defaults to localStorage\n    partialize: (state) => ({       \u002F\u002F Optional: persist only specific fields\n      theme: state.theme,\n      preferences: state.preferences,\n    }),\n  }\n);\n```\n\n## Reference Documentation\n\nFor detailed examples and advanced patterns, read `references\u002Fpattern-guide.md`:\n- Basic usage examples\n- Persistence patterns\n- Complex stores with async actions\n- Using get\u002Fset outside React components\n- Type safety patterns\n\nLoad the reference documentation when:\n- Implementing complex stores with async operations\n- Needing examples of persistence configuration\n- User asks about advanced Zustand patterns\n- Unsure about specific implementation details\n\n## Verification\n\nAfter creating a store, verify:\n1. ✅ StoreBuilder utility is imported from project location\n2. ✅ State type uses `Omit` to exclude actions\n3. ✅ All actions are defined in `createFactory`, not in initial state\n4. ✅ State updates use immer-style mutations (mutate draft, don't return new object)\n5. ✅ Exported hook name follows convention (e.g., `useMyStore`)\n6. ✅ Persistence config is included if state should persist\n\n## Non-React Usage\n\nThe pattern supports non-reactive access outside React components:\n\n```typescript\nconst { get, set, subscribe } = StoreBuilder(initialState);\n\n\u002F\u002F Get current state\nconst current = get();\n\n\u002F\u002F Update state\nset((state) => { state.value = 10; });\n\n\u002F\u002F Subscribe to changes\nconst unsubscribe = subscribe((state) => console.log(state));\n```\n\nUse `get` and `set` when:\n- Accessing state in utility functions\n- Implementing middleware or side effects\n- Working outside React component lifecycle\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand",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":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill superpower-zustand",{"tool":57,"command":58},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill superpower-zustand",{"tool":60,"command":61},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill superpower-zustand","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand\u002FSKILL.md",true,[65,71,77,81,85],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"assets\u002Fstorebuilder.ts","SCRIPT","脚本",1733,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand\u002Fassets\u002Fstorebuilder.ts",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"myceliate.yaml","REFERENCE","参考文档",237,"https:\u002F\u002Fgithub.com\u002FPattyboi101\u002Fmyceliate-cli\u002Fblob\u002Fmain\u002Fexamples\u002Fspore-template\u002Fmyceliate.yaml",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"README.md",845,"https:\u002F\u002Fgithub.com\u002FPattyboi101\u002Fmyceliate-cli\u002Fblob\u002Fmain\u002Fexamples\u002Fspore-template\u002FREADME.md",{"path":82,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Fpattern-guide.md",7066,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand\u002Freferences\u002Fpattern-guide.md",{"path":86,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":87,"sourceHtmlUrl":88},"skill-report.json",21041,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcygnusfear\u002Fsuperpower-zustand\u002Fskill-report.json",[90,100,110,119,125,132],{"skillNo":91,"name":92,"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":93,"categories":94,"keywords":96,"publishedAt":37},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[95],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[97,98,99],"model","model hierarchy","model hierarchy skill",{"skillNo":101,"name":102,"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":103,"categories":104,"keywords":106,"publishedAt":37},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[105],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[107,108,109],"MCP","zoom","zoom mcp",{"skillNo":111,"name":112,"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":113,"categories":114,"keywords":115,"publishedAt":37},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[116,117,118,108],"sdk","zoom apps sdk","apps",{"skillNo":120,"name":121,"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":122,"categories":123,"keywords":124,"publishedAt":37},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[121],{"skillNo":126,"name":127,"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":128,"categories":129,"keywords":131,"publishedAt":37},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[130],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[127],{"skillNo":133,"name":134,"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":135,"categories":136,"keywords":137,"publishedAt":37},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[134]]