[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XG3VRBT8CKQZHNHYNBZ13K":3,"skill-same:01M6XG3VRBT8CKQZHNHYNBZ13K":64},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":14,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6XG3VRBT8CKQZHNHYNBZ13K","dependency-upgrade",null,"Master major dependency version upgrades, compatibility analysis, staged upgrade strategies, and comprehensive testing approaches.","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\u002Fcopilot\u002Fdependency-upgrade\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"dependency","dependency upgrade","upgrade","testing","analysis","upgrades","version","master","community","compatibility","strategies","staged","unknown","2026","2026-11-10 10:12:30",false,"---\nname: dependency-upgrade\ndescription: \"Master major dependency version upgrades, compatibility analysis, staged upgrade strategies, and comprehensive testing approaches.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Dependency Upgrade\n\nMaster major dependency version upgrades, compatibility analysis, staged upgrade strategies, and comprehensive testing approaches.\n\n## Do not use this skill when\n\n- The task is unrelated to dependency upgrade\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources\u002Fimplementation-playbook.md`.\n\n## Use this skill when\n\n- Upgrading major framework versions\n- Updating security-vulnerable dependencies\n- Modernizing legacy dependencies\n- Resolving dependency conflicts\n- Planning incremental upgrade paths\n- Testing compatibility matrices\n- Automating dependency updates\n\n## Semantic Versioning Review\n\n```\nMAJOR.MINOR.PATCH (e.g., 2.3.1)\n\nMAJOR: Breaking changes\nMINOR: New features, backward compatible\nPATCH: Bug fixes, backward compatible\n\n^2.3.1 = >=2.3.1 \u003C3.0.0 (minor updates)\n~2.3.1 = >=2.3.1 \u003C2.4.0 (patch updates)\n2.3.1 = exact version\n```\n\n## Dependency Analysis\n\n### Audit Dependencies\n```bash\n# npm\nnpm outdated\nnpm audit\nnpm audit fix\n\n# yarn\nyarn outdated\nyarn audit\n\n# Check for major updates\nnpx npm-check-updates\nnpx npm-check-updates -u  # Update package.json\n```\n\n### Analyze Dependency Tree\n```bash\n# See why a package is installed\nnpm ls package-name\nyarn why package-name\n\n# Find duplicate packages\nnpm dedupe\nyarn dedupe\n\n# Visualize dependencies\nnpx madge --image graph.png src\u002F\n```\n\n## Compatibility Matrix\n\n```javascript\n\u002F\u002F compatibility-matrix.js\nconst compatibilityMatrix = {\n  'react': {\n    '16.x': {\n      'react-dom': '^16.0.0',\n      'react-router-dom': '^5.0.0',\n      '@testing-library\u002Freact': '^11.0.0'\n    },\n    '17.x': {\n      'react-dom': '^17.0.0',\n      'react-router-dom': '^5.0.0 || ^6.0.0',\n      '@testing-library\u002Freact': '^12.0.0'\n    },\n    '18.x': {\n      'react-dom': '^18.0.0',\n      'react-router-dom': '^6.0.0',\n      '@testing-library\u002Freact': '^13.0.0'\n    }\n  }\n};\n\nfunction checkCompatibility(packages) {\n  \u002F\u002F Validate package versions against matrix\n}\n```\n\n## Staged Upgrade Strategy\n\n### Phase 1: Planning\n```bash\n# 1. Identify current versions\nnpm list --depth=0\n\n# 2. Check for breaking changes\n# Read CHANGELOG.md and MIGRATION.md\n\n# 3. Create upgrade plan\necho \"Upgrade order:\n1. TypeScript\n2. React\n3. React Router\n4. Testing libraries\n5. Build tools\" > UPGRADE_PLAN.md\n```\n\n### Phase 2: Incremental Updates\n```bash\n# Don't upgrade everything at once!\n\n# Step 1: Update TypeScript\nnpm install typescript@latest\n\n# Test\nnpm run test\nnpm run build\n\n# Step 2: Update React (one major version at a time)\nnpm install react@17 react-dom@17\n\n# Test again\nnpm run test\n\n# Step 3: Continue with other packages\nnpm install react-router-dom@6\n\n# And so on...\n```\n\n### Phase 3: Validation\n```javascript\n\u002F\u002F tests\u002Fcompatibility.test.js\ndescribe('Dependency Compatibility', () => {\n  it('should have compatible React versions', () => {\n    const reactVersion = require('react\u002Fpackage.json').version;\n    const reactDomVersion = require('react-dom\u002Fpackage.json').version;\n\n    expect(reactVersion).toBe(reactDomVersion);\n  });\n\n  it('should not have peer dependency warnings', () => {\n    \u002F\u002F Run npm ls and check for warnings\n  });\n});\n```\n\n## Breaking Change Handling\n\n### Identifying Breaking Changes\n```bash\n# Use changelog parsers\nnpx changelog-parser react 16.0.0 17.0.0\n\n# Or manually check\ncurl https:\u002F\u002Fraw.githubusercontent.com\u002Ffacebook\u002Freact\u002Fmain\u002FCHANGELOG.md\n```\n\n### Codemod for Automated Fixes\n```bash\n# React upgrade codemods\nnpx react-codeshift \u003Ctransform> \u003Cpath>\n\n# Example: Update lifecycle methods\nnpx react-codeshift \\\n  --parser tsx \\\n  --transform react-codeshift\u002Ftransforms\u002Frename-unsafe-lifecycles.js \\\n  src\u002F\n```\n\n### Custom Migration Script\n```javascript\n\u002F\u002F migration-script.js\nconst fs = require('fs');\nconst glob = require('glob');\n\nglob('src\u002F**\u002F*.tsx', (err, files) => {\n  files.forEach(file => {\n    let content = fs.readFileSync(file, 'utf8');\n\n    \u002F\u002F Replace old API with new API\n    content = content.replace(\n      \u002FcomponentWillMount\u002Fg,\n      'UNSAFE_componentWillMount'\n    );\n\n    \u002F\u002F Update imports\n    content = content.replace(\n      \u002Fimport { Component } from 'react'\u002Fg,\n      \"import React, { Component } from 'react'\"\n    );\n\n    fs.writeFileSync(file, content);\n  });\n});\n```\n\n## Testing Strategy\n\n### Unit Tests\n```javascript\n\u002F\u002F Ensure tests pass before and after upgrade\nnpm run test\n\n\u002F\u002F Update test utilities if needed\nnpm install @testing-library\u002Freact@latest\n```\n\n### Integration Tests\n```javascript\n\u002F\u002F tests\u002Fintegration\u002Fapp.test.js\ndescribe('App Integration', () => {\n  it('should render without crashing', () => {\n    render(\u003CApp \u002F>);\n  });\n\n  it('should handle navigation', () => {\n    const { getByText } = render(\u003CApp \u002F>);\n    fireEvent.click(getByText('Navigate'));\n    expect(screen.getByText('New Page')).toBeInTheDocument();\n  });\n});\n```\n\n### Visual Regression Tests\n```javascript\n\u002F\u002F visual-regression.test.js\ndescribe('Visual Regression', () => {\n  it('should match snapshot', () => {\n    const { container } = render(\u003CApp \u002F>);\n    expect(container.firstChild).toMatchSnapshot();\n  });\n});\n```\n\n### E2E Tests\n```javascript\n\u002F\u002F cypress\u002Fe2e\u002Fapp.cy.js\ndescribe('E2E Tests', () => {\n  it('should complete user flow', () => {\n    cy.visit('\u002F');\n    cy.get('[data-testid=\"login\"]').click();\n    cy.get('input[name=\"email\"]').type('user@example.com');\n    cy.get('button[type=\"submit\"]').click();\n    cy.url().should('include', '\u002Fdashboard');\n  });\n});\n```\n\n## Automated Dependency Updates\n\n### Renovate Configuration\n```json\n\u002F\u002F renovate.json\n{\n  \"extends\": [\"config:base\"],\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"minor\", \"patch\"],\n      \"automerge\": true\n    },\n    {\n      \"matchUpdateTypes\": [\"major\"],\n      \"automerge\": false,\n      \"labels\": [\"major-update\"]\n    }\n  ],\n  \"schedule\": [\"before 3am on Monday\"],\n  \"timezone\": \"America\u002FNew_York\"\n}\n```\n\n### Dependabot Configuration\n```yaml\n# .github\u002Fdependabot.yml\nversion: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"\u002F\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 5\n    reviewers:\n      - \"team-leads\"\n    commit-message:\n      prefix: \"chore\"\n      include: \"scope\"\n```\n\n## Rollback Plan\n\n```javascript\n\u002F\u002F rollback.sh\n#!\u002Fbin\u002Fbash\n\n# Save current state\ngit stash\ngit checkout -b upgrade-branch\n\n# Attempt upgrade\nnpm install package@latest\n\n# Run tests\nif npm run test; then\n  echo \"Upgrade successful\"\n  git add package.json package-lock.json\n  git commit -m \"chore: upgrade package\"\nelse\n  echo \"Upgrade failed, rolling back\"\n  git checkout main\n  git branch -D upgrade-branch\n  npm install  # Restore from package-lock.json\nfi\n```\n\n## Common Upgrade Patterns\n\n### Lock File Management\n```bash\n# npm\nnpm install --package-lock-only  # Update lock file only\nnpm ci  # Clean install from lock file\n\n# yarn\nyarn install --frozen-lockfile  # CI mode\nyarn upgrade-interactive  # Interactive upgrades\n```\n\n### Peer Dependency Resolution\n```bash\n# npm 7+: strict peer dependencies\nnpm install --legacy-peer-deps  # Ignore peer deps\n\n# npm 8+: override peer dependencies\nnpm install --force\n```\n\n### Workspace Upgrades\n```bash\n# Update all workspace packages\nnpm install --workspaces\n\n# Update specific workspace\nnpm install package@latest --workspace=packages\u002Fapp\n```\n\n## Resources\n\n- **references\u002Fsemver.md**: Semantic versioning guide\n- **references\u002Fcompatibility-matrix.md**: Common compatibility issues\n- **references\u002Fstaged-upgrades.md**: Incremental upgrade strategies\n- **references\u002Ftesting-strategy.md**: Comprehensive testing approaches\n- **assets\u002Fupgrade-checklist.md**: Step-by-step checklist\n- **assets\u002Fcompatibility-matrix.csv**: Version compatibility table\n- **scripts\u002Faudit-dependencies.sh**: Dependency audit script\n\n## Best Practices\n\n1. **Read Changelogs**: Understand what changed\n2. **Upgrade Incrementally**: One major version at a time\n3. **Test Thoroughly**: Unit, integration, E2E tests\n4. **Check Peer Dependencies**: Resolve conflicts early\n5. **Use Lock Files**: Ensure reproducible installs\n6. **Automate Updates**: Use Renovate or Dependabot\n7. **Monitor**: Watch for runtime errors post-upgrade\n8. **Document**: Keep upgrade notes\n\n## Upgrade Checklist\n\n```markdown\nPre-Upgrade:\n- [ ] Review current dependency versions\n- [ ] Read changelogs for breaking changes\n- [ ] Create feature branch\n- [ ] Backup current state (git tag)\n- [ ] Run full test suite (baseline)\n\nDuring Upgrade:\n- [ ] Upgrade one dependency at a time\n- [ ] Update peer dependencies\n- [ ] Fix TypeScript errors\n- [ ] Update tests if needed\n- [ ] Run test suite after each upgrade\n- [ ] Check bundle size impact\n\nPost-Upgrade:\n- [ ] Full regression testing\n- [ ] Performance testing\n- [ ] Update documentation\n- [ ] Deploy to staging\n- [ ] Monitor for errors\n- [ ] Deploy to production\n```\n\n## Common Pitfalls\n\n- Upgrading all dependencies at once\n- Not testing after each upgrade\n- Ignoring peer dependency warnings\n- Forgetting to update lock file\n- Not reading breaking change notes\n- Skipping major versions\n- Not having rollback plan\n","# Dependency Upgrade\n\nMaster major dependency version upgrades, compatibility analysis, staged upgrade strategies, and comprehensive testing approaches.\n\n## Do not use this skill when\n\n- The task is unrelated to dependency upgrade\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources\u002Fimplementation-playbook.md`.\n\n## Use this skill when\n\n- Upgrading major framework versions\n- Updating security-vulnerable dependencies\n- Modernizing legacy dependencies\n- Resolving dependency conflicts\n- Planning incremental upgrade paths\n- Testing compatibility matrices\n- Automating dependency updates\n\n## Semantic Versioning Review\n\n```\nMAJOR.MINOR.PATCH (e.g., 2.3.1)\n\nMAJOR: Breaking changes\nMINOR: New features, backward compatible\nPATCH: Bug fixes, backward compatible\n\n^2.3.1 = >=2.3.1 \u003C3.0.0 (minor updates)\n~2.3.1 = >=2.3.1 \u003C2.4.0 (patch updates)\n2.3.1 = exact version\n```\n\n## Dependency Analysis\n\n### Audit Dependencies\n```bash\n# npm\nnpm outdated\nnpm audit\nnpm audit fix\n\n# yarn\nyarn outdated\nyarn audit\n\n# Check for major updates\nnpx npm-check-updates\nnpx npm-check-updates -u  # Update package.json\n```\n\n### Analyze Dependency Tree\n```bash\n# See why a package is installed\nnpm ls package-name\nyarn why package-name\n\n# Find duplicate packages\nnpm dedupe\nyarn dedupe\n\n# Visualize dependencies\nnpx madge --image graph.png src\u002F\n```\n\n## Compatibility Matrix\n\n```javascript\n\u002F\u002F compatibility-matrix.js\nconst compatibilityMatrix = {\n  'react': {\n    '16.x': {\n      'react-dom': '^16.0.0',\n      'react-router-dom': '^5.0.0',\n      '@testing-library\u002Freact': '^11.0.0'\n    },\n    '17.x': {\n      'react-dom': '^17.0.0',\n      'react-router-dom': '^5.0.0 || ^6.0.0',\n      '@testing-library\u002Freact': '^12.0.0'\n    },\n    '18.x': {\n      'react-dom': '^18.0.0',\n      'react-router-dom': '^6.0.0',\n      '@testing-library\u002Freact': '^13.0.0'\n    }\n  }\n};\n\nfunction checkCompatibility(packages) {\n  \u002F\u002F Validate package versions against matrix\n}\n```\n\n## Staged Upgrade Strategy\n\n### Phase 1: Planning\n```bash\n# 1. Identify current versions\nnpm list --depth=0\n\n# 2. Check for breaking changes\n# Read CHANGELOG.md and MIGRATION.md\n\n# 3. Create upgrade plan\necho \"Upgrade order:\n1. TypeScript\n2. React\n3. React Router\n4. Testing libraries\n5. Build tools\" > UPGRADE_PLAN.md\n```\n\n### Phase 2: Incremental Updates\n```bash\n# Don't upgrade everything at once!\n\n# Step 1: Update TypeScript\nnpm install typescript@latest\n\n# Test\nnpm run test\nnpm run build\n\n# Step 2: Update React (one major version at a time)\nnpm install react@17 react-dom@17\n\n# Test again\nnpm run test\n\n# Step 3: Continue with other packages\nnpm install react-router-dom@6\n\n# And so on...\n```\n\n### Phase 3: Validation\n```javascript\n\u002F\u002F tests\u002Fcompatibility.test.js\ndescribe('Dependency Compatibility', () => {\n  it('should have compatible React versions', () => {\n    const reactVersion = require('react\u002Fpackage.json').version;\n    const reactDomVersion = require('react-dom\u002Fpackage.json').version;\n\n    expect(reactVersion).toBe(reactDomVersion);\n  });\n\n  it('should not have peer dependency warnings', () => {\n    \u002F\u002F Run npm ls and check for warnings\n  });\n});\n```\n\n## Breaking Change Handling\n\n### Identifying Breaking Changes\n```bash\n# Use changelog parsers\nnpx changelog-parser react 16.0.0 17.0.0\n\n# Or manually check\ncurl https:\u002F\u002Fraw.githubusercontent.com\u002Ffacebook\u002Freact\u002Fmain\u002FCHANGELOG.md\n```\n\n### Codemod for Automated Fixes\n```bash\n# React upgrade codemods\nnpx react-codeshift \u003Ctransform> \u003Cpath>\n\n# Example: Update lifecycle methods\nnpx react-codeshift \\\n  --parser tsx \\\n  --transform react-codeshift\u002Ftransforms\u002Frename-unsafe-lifecycles.js \\\n  src\u002F\n```\n\n### Custom Migration Script\n```javascript\n\u002F\u002F migration-script.js\nconst fs = require('fs');\nconst glob = require('glob');\n\nglob('src\u002F**\u002F*.tsx', (err, files) => {\n  files.forEach(file => {\n    let content = fs.readFileSync(file, 'utf8');\n\n    \u002F\u002F Replace old API with new API\n    content = content.replace(\n      \u002FcomponentWillMount\u002Fg,\n      'UNSAFE_componentWillMount'\n    );\n\n    \u002F\u002F Update imports\n    content = content.replace(\n      \u002Fimport { Component } from 'react'\u002Fg,\n      \"import React, { Component } from 'react'\"\n    );\n\n    fs.writeFileSync(file, content);\n  });\n});\n```\n\n## Testing Strategy\n\n### Unit Tests\n```javascript\n\u002F\u002F Ensure tests pass before and after upgrade\nnpm run test\n\n\u002F\u002F Update test utilities if needed\nnpm install @testing-library\u002Freact@latest\n```\n\n### Integration Tests\n```javascript\n\u002F\u002F tests\u002Fintegration\u002Fapp.test.js\ndescribe('App Integration', () => {\n  it('should render without crashing', () => {\n    render(\u003CApp \u002F>);\n  });\n\n  it('should handle navigation', () => {\n    const { getByText } = render(\u003CApp \u002F>);\n    fireEvent.click(getByText('Navigate'));\n    expect(screen.getByText('New Page')).toBeInTheDocument();\n  });\n});\n```\n\n### Visual Regression Tests\n```javascript\n\u002F\u002F visual-regression.test.js\ndescribe('Visual Regression', () => {\n  it('should match snapshot', () => {\n    const { container } = render(\u003CApp \u002F>);\n    expect(container.firstChild).toMatchSnapshot();\n  });\n});\n```\n\n### E2E Tests\n```javascript\n\u002F\u002F cypress\u002Fe2e\u002Fapp.cy.js\ndescribe('E2E Tests', () => {\n  it('should complete user flow', () => {\n    cy.visit('\u002F');\n    cy.get('[data-testid=\"login\"]').click();\n    cy.get('input[name=\"email\"]').type('user@example.com');\n    cy.get('button[type=\"submit\"]').click();\n    cy.url().should('include', '\u002Fdashboard');\n  });\n});\n```\n\n## Automated Dependency Updates\n\n### Renovate Configuration\n```json\n\u002F\u002F renovate.json\n{\n  \"extends\": [\"config:base\"],\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"minor\", \"patch\"],\n      \"automerge\": true\n    },\n    {\n      \"matchUpdateTypes\": [\"major\"],\n      \"automerge\": false,\n      \"labels\": [\"major-update\"]\n    }\n  ],\n  \"schedule\": [\"before 3am on Monday\"],\n  \"timezone\": \"America\u002FNew_York\"\n}\n```\n\n### Dependabot Configuration\n```yaml\n# .github\u002Fdependabot.yml\nversion: 2\nupdates:\n  - package-ecosystem: \"npm\"\n    directory: \"\u002F\"\n    schedule:\n      interval: \"weekly\"\n    open-pull-requests-limit: 5\n    reviewers:\n      - \"team-leads\"\n    commit-message:\n      prefix: \"chore\"\n      include: \"scope\"\n```\n\n## Rollback Plan\n\n```javascript\n\u002F\u002F rollback.sh\n#!\u002Fbin\u002Fbash\n\n# Save current state\ngit stash\ngit checkout -b upgrade-branch\n\n# Attempt upgrade\nnpm install package@latest\n\n# Run tests\nif npm run test; then\n  echo \"Upgrade successful\"\n  git add package.json package-lock.json\n  git commit -m \"chore: upgrade package\"\nelse\n  echo \"Upgrade failed, rolling back\"\n  git checkout main\n  git branch -D upgrade-branch\n  npm install  # Restore from package-lock.json\nfi\n```\n\n## Common Upgrade Patterns\n\n### Lock File Management\n```bash\n# npm\nnpm install --package-lock-only  # Update lock file only\nnpm ci  # Clean install from lock file\n\n# yarn\nyarn install --frozen-lockfile  # CI mode\nyarn upgrade-interactive  # Interactive upgrades\n```\n\n### Peer Dependency Resolution\n```bash\n# npm 7+: strict peer dependencies\nnpm install --legacy-peer-deps  # Ignore peer deps\n\n# npm 8+: override peer dependencies\nnpm install --force\n```\n\n### Workspace Upgrades\n```bash\n# Update all workspace packages\nnpm install --workspaces\n\n# Update specific workspace\nnpm install package@latest --workspace=packages\u002Fapp\n```\n\n## Resources\n\n- **references\u002Fsemver.md**: Semantic versioning guide\n- **references\u002Fcompatibility-matrix.md**: Common compatibility issues\n- **references\u002Fstaged-upgrades.md**: Incremental upgrade strategies\n- **references\u002Ftesting-strategy.md**: Comprehensive testing approaches\n- **assets\u002Fupgrade-checklist.md**: Step-by-step checklist\n- **assets\u002Fcompatibility-matrix.csv**: Version compatibility table\n- **scripts\u002Faudit-dependencies.sh**: Dependency audit script\n\n## Best Practices\n\n1. **Read Changelogs**: Understand what changed\n2. **Upgrade Incrementally**: One major version at a time\n3. **Test Thoroughly**: Unit, integration, E2E tests\n4. **Check Peer Dependencies**: Resolve conflicts early\n5. **Use Lock Files**: Ensure reproducible installs\n6. **Automate Updates**: Use Renovate or Dependabot\n7. **Monitor**: Watch for runtime errors post-upgrade\n8. **Document**: Keep upgrade notes\n\n## Upgrade Checklist\n\n```markdown\nPre-Upgrade:\n- [ ] Review current dependency versions\n- [ ] Read changelogs for breaking changes\n- [ ] Create feature branch\n- [ ] Backup current state (git tag)\n- [ ] Run full test suite (baseline)\n\nDuring Upgrade:\n- [ ] Upgrade one dependency at a time\n- [ ] Update peer dependencies\n- [ ] Fix TypeScript errors\n- [ ] Update tests if needed\n- [ ] Run test suite after each upgrade\n- [ ] Check bundle size impact\n\nPost-Upgrade:\n- [ ] Full regression testing\n- [ ] Performance testing\n- [ ] Update documentation\n- [ ] Deploy to staging\n- [ ] Monitor for errors\n- [ ] Deploy to production\n```\n\n## Common Pitfalls\n\n- Upgrading all dependencies at once\n- Not testing after each upgrade\n- Ignoring peer dependency warnings\n- Forgetting to update lock file\n- Not reading breaking change notes\n- Skipping major versions\n- Not having rollback plan\n",{"name":5,"risk":36,"source":32,"date_added":43,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fdependency-upgrade","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill dependency-upgrade",{"tool":56,"command":57},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill dependency-upgrade",{"tool":59,"command":60},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill dependency-upgrade","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fdependency-upgrade\u002FSKILL.md",true,[],[65,89,115,125,138,155],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":38},"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",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[77,78,79,80,81,82,83,84,85,86,87,88],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":90,"name":91,"nameZh":6,"description":92,"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":95,"publishedAt":38},"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",[],[96,97,98,99,100,101,79,102,103,104,105,106,107,108,109,110,111,112,113,114],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":38},"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",[],[122,123,96,107,108,109,110,100,79,112,124,113,114,106,104,103,102,111,101,99],"trend radar","radar","pulse",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":38},"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",[],[132,133,134,135,136,137],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":38},"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",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[140,85,148,149,150,88,107,151,152,153,98,154,111],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":38},"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",[],[157,162,163,164,111,165,152,166,167,168,169,170],"status","play","go","latest","github","discover","control","cmd","volume"]