codymaster 4.1.4 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -2
- package/README.md +56 -86
- package/dist/index.js +130 -16
- package/dist/ui/box.js +2 -2
- package/dist/ui/onboarding.js +11 -5
- package/install.sh +317 -35
- package/package.json +8 -8
- package/public/dashboard/app.js +1270 -0
- package/public/dashboard/index.html +218 -0
- package/public/dashboard/style.css +440 -0
- package/skills/AGENTS.md +61 -0
- package/skills/CLAUDE.md +158 -0
- package/skills/boxme-git-config/SKILL.md +56 -0
- package/skills/boxme-local-dev/SKILL.md +66 -0
- package/skills/build.sh +30 -0
- package/skills/cf +314 -0
- package/skills/cf 2 +313 -0
- package/skills/cm-ads-tracker/SKILL.md +364 -69
- package/skills/cm-auto-publisher/SKILL.md +81 -0
- package/skills/cm-booking-calendar/SKILL.md +521 -0
- package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
- package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
- package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
- package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
- package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
- package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
- package/skills/cm-brainstorm-idea/SKILL.md +15 -24
- package/skills/cm-clean-code/SKILL.md +300 -0
- package/skills/cm-code-review/SKILL.md +0 -27
- package/skills/cm-codeintell/SKILL.md +598 -0
- package/skills/cm-content-factory/.content-factory-state.json +132 -0
- package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/cm-content-factory/AGENTS.md +61 -0
- package/skills/cm-content-factory/CLAUDE.md +63 -0
- package/skills/cm-content-factory/CURSOR.md +43 -0
- package/skills/cm-content-factory/Content Factory.zip +0 -0
- package/skills/cm-content-factory/cf +313 -0
- package/skills/cm-content-factory/config.schema.json +397 -0
- package/skills/cm-content-factory/dashboard/app.js +556 -0
- package/skills/cm-content-factory/dashboard/index.html +397 -0
- package/skills/cm-content-factory/dashboard/style.css +1211 -0
- package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
- package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
- package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
- package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
- package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
- package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
- package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
- package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
- package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
- package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
- package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
- package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
- package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
- package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
- package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
- package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
- package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
- package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
- package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
- package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
- package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
- package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
- package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
- package/skills/cm-content-factory/extensions/hooks.py +126 -0
- package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
- package/skills/cm-content-factory/landing/index.html +680 -0
- package/skills/cm-content-factory/landing/script.js +101 -0
- package/skills/cm-content-factory/landing/style.css +1216 -0
- package/skills/cm-content-factory/landing/translations.js +508 -0
- package/skills/cm-content-factory/logs/events.jsonl +11 -0
- package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
- package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
- package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
- package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
- package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
- package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
- package/skills/cm-content-factory/scripts/audit.py +106 -0
- package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
- package/skills/cm-content-factory/scripts/deploy.py +146 -0
- package/skills/cm-content-factory/scripts/extract.py +132 -0
- package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
- package/skills/cm-content-factory/scripts/memory.py +521 -0
- package/skills/cm-content-factory/scripts/monetize.py +239 -0
- package/skills/cm-content-factory/scripts/pipeline.py +357 -0
- package/skills/cm-content-factory/scripts/plan.py +163 -0
- package/skills/cm-content-factory/scripts/publish.py +145 -0
- package/skills/cm-content-factory/scripts/research.py +337 -0
- package/skills/cm-content-factory/scripts/scaffold.py +464 -0
- package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
- package/skills/cm-content-factory/scripts/seo.py +90 -0
- package/skills/cm-content-factory/scripts/state_manager.py +320 -0
- package/skills/cm-content-factory/scripts/token_manager.py +268 -0
- package/skills/cm-content-factory/scripts/validate.py +221 -0
- package/skills/cm-content-factory/scripts/wizard.py +329 -0
- package/skills/cm-content-factory/scripts/write.py +93 -0
- package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
- package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
- package/skills/cm-content-factory/tests/conftest.py +66 -0
- package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
- package/skills/cm-content-factory/tests/test_memory.py +128 -0
- package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
- package/skills/cm-content-factory/tests/test_research.py +56 -0
- package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
- package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
- package/skills/cm-content-factory/tests/test_wizard.py +121 -0
- package/skills/cm-continuity/SKILL.md +7 -0
- package/skills/cm-cro-methodology/SKILL.md +290 -0
- package/skills/cm-dashboard/SKILL.md +7 -525
- package/skills/cm-debugging/SKILL.md +7 -116
- package/skills/cm-deep-search/SKILL.md +5 -1
- package/skills/cm-dockit/README.md +6 -15
- package/skills/cm-dockit/SKILL.md +20 -37
- package/skills/cm-execution/SKILL.md +6 -1
- package/skills/cm-frappe-agent/SKILL.md +134 -0
- package/skills/cm-frappe-agent/agents/doctype-architect.md +596 -0
- package/skills/cm-frappe-agent/agents/erpnext-customizer.md +643 -0
- package/skills/cm-frappe-agent/agents/frappe-backend.md +814 -0
- package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +557 -0
- package/skills/cm-frappe-agent/agents/frappe-debugger.md +625 -0
- package/skills/cm-frappe-agent/agents/frappe-fixer.md +275 -0
- package/skills/cm-frappe-agent/agents/frappe-frontend.md +660 -0
- package/skills/cm-frappe-agent/agents/frappe-installer.md +158 -0
- package/skills/cm-frappe-agent/agents/frappe-performance.md +307 -0
- package/skills/cm-frappe-agent/agents/frappe-planner.md +419 -0
- package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +153 -0
- package/skills/cm-frappe-agent/agents/github-workflow.md +286 -0
- package/skills/cm-frappe-agent/commands/frappe-app.md +351 -0
- package/skills/cm-frappe-agent/commands/frappe-backend.md +162 -0
- package/skills/cm-frappe-agent/commands/frappe-bench.md +254 -0
- package/skills/cm-frappe-agent/commands/frappe-debug.md +263 -0
- package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +272 -0
- package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +310 -0
- package/skills/cm-frappe-agent/commands/frappe-erpnext.md +210 -0
- package/skills/cm-frappe-agent/commands/frappe-fix.md +59 -0
- package/skills/cm-frappe-agent/commands/frappe-frontend.md +210 -0
- package/skills/cm-frappe-agent/commands/frappe-fullstack.md +243 -0
- package/skills/cm-frappe-agent/commands/frappe-github.md +57 -0
- package/skills/cm-frappe-agent/commands/frappe-install.md +52 -0
- package/skills/cm-frappe-agent/commands/frappe-plan.md +442 -0
- package/skills/cm-frappe-agent/commands/frappe-remote.md +58 -0
- package/skills/cm-frappe-agent/commands/frappe-test.md +356 -0
- package/skills/cm-frappe-agent/docs/README.md +51 -0
- package/skills/cm-frappe-agent/docs/agents-catalog.md +113 -0
- package/skills/cm-frappe-agent/docs/architecture.md +149 -0
- package/skills/cm-frappe-agent/docs/commands-catalog.md +82 -0
- package/skills/cm-frappe-agent/docs/resources-catalog.md +66 -0
- package/skills/cm-frappe-agent/docs/sitemap-urls.txt +52 -0
- package/skills/cm-frappe-agent/docs/sitemap.md +81 -0
- package/skills/cm-frappe-agent/docs/sop/user-guide.md +178 -0
- package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +122 -0
- package/skills/cm-frappe-agent/resources/7-layer-architecture.md +985 -0
- package/skills/cm-frappe-agent/resources/bench_commands.md +73 -0
- package/skills/cm-frappe-agent/resources/code-patterns-guide.md +948 -0
- package/skills/cm-frappe-agent/resources/common_pitfalls.md +266 -0
- package/skills/cm-frappe-agent/resources/doctype-registry.md +158 -0
- package/skills/cm-frappe-agent/resources/installation-guide.md +289 -0
- package/skills/cm-frappe-agent/resources/rest-api-patterns.md +182 -0
- package/skills/cm-frappe-agent/resources/scaffold_checklist.md +82 -0
- package/skills/cm-frappe-agent/resources/upgrade_patterns.md +113 -0
- package/skills/cm-frappe-agent/resources/web-form-patterns.md +252 -0
- package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +621 -0
- package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +642 -0
- package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +576 -0
- package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +740 -0
- package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +47 -0
- package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +608 -0
- package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +46 -0
- package/skills/cm-git-worktrees/SKILL.md +0 -7
- package/skills/cm-google-form/SKILL.md +266 -0
- package/skills/cm-google-form/templates/apps-script.js +55 -0
- package/skills/cm-google-form/templates/form-markup.html +110 -0
- package/skills/cm-google-form/templates/form-submit.js +201 -0
- package/skills/cm-google-form/templates/toast.css +152 -0
- package/skills/cm-growth-hacking/SKILL.md +293 -0
- package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
- package/skills/cm-growth-hacking/calendar-integration.md +264 -0
- package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
- package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
- package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
- package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
- package/skills/cm-growth-hacking/tracking-events.md +246 -0
- package/skills/cm-growth-hacking/trigger-system.md +342 -0
- package/skills/cm-how-it-work/SKILL.md +20 -4
- package/skills/cm-identity-guard/SKILL.md +0 -11
- package/skills/cm-jtbd/SKILL.md +1 -1
- package/skills/cm-notebooklm/SKILL.md +172 -0
- package/skills/cm-notebooklm/references/command_reference.md +94 -0
- package/skills/cm-notebooklm/references/workflows.md +60 -0
- package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
- package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
- package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
- package/skills/cm-planning/SKILL.md +39 -52
- package/skills/cm-project-bootstrap/SKILL.md +1308 -99
- package/skills/cm-quality-gate/SKILL.md +13 -106
- package/skills/cm-reactor/SKILL.md +274 -0
- package/skills/cm-safe-deploy/SKILL.md +415 -52
- package/skills/cm-safe-i18n/SKILL.md +1 -22
- package/skills/cm-secret-shield/SKILL.md +2 -2
- package/skills/cm-security-gate/SKILL.md +114 -0
- package/skills/cm-skill-chain/SKILL.md +2 -2
- package/skills/cm-skill-index/SKILL.md +9 -6
- package/skills/cm-skill-mastery/SKILL.md +2 -15
- package/skills/cm-start/SKILL.md +9 -0
- package/skills/cm-tdd/SKILL.md +16 -49
- package/skills/cm-ui-preview/SKILL.md +35 -173
- package/skills/cm-ux-master/FEATURES-v4.md +305 -0
- package/skills/cm-ux-master/README-ru.md +135 -0
- package/skills/cm-ux-master/README-vi.md +135 -0
- package/skills/cm-ux-master/README-zh.md +135 -0
- package/skills/cm-ux-master/README.md +489 -0
- package/skills/cm-ux-master/SKILL.md +773 -62
- package/skills/cm-ux-master/cli/README.md +180 -0
- package/skills/cm-ux-master/cli/pyproject.toml +106 -0
- package/skills/cm-ux-master/cli/requirements.txt +21 -0
- package/skills/cm-ux-master/cli/templates/base/skill-core.md +262 -0
- package/skills/cm-ux-master/cli/templates/platforms/claude.yaml +21 -0
- package/skills/cm-ux-master/cli/templates/platforms/cursor.yaml +21 -0
- package/skills/cm-ux-master/cli/templates/platforms/figma.yaml +24 -0
- package/skills/cm-ux-master/cli/templates/platforms/vscode-mcp.yaml +28 -0
- package/skills/cm-ux-master/cli/templates/platforms/windsurf.yaml +21 -0
- package/skills/cm-ux-master/cli/uxmaster/__init__.py +10 -0
- package/skills/cm-ux-master/cli/uxmaster/__main__.py +19 -0
- package/skills/cm-ux-master/cli/uxmaster/cli.py +349 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/__init__.py +8 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/extract.py +18 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/init.py +58 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +194 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/search.py +23 -0
- package/skills/cm-ux-master/cli/uxmaster/commands/validate.py +270 -0
- package/skills/cm-ux-master/cli/uxmaster/search_engine.py +532 -0
- package/skills/cm-ux-master/cli/uxmaster/template_engine.py +458 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/__init__.py +9 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/console.py +42 -0
- package/skills/cm-ux-master/cli/uxmaster/utils/detect.py +83 -0
- package/skills/cm-ux-master/data/accessibility-advanced.csv +26 -0
- package/skills/cm-ux-master/data/animation.csv +31 -0
- package/skills/cm-ux-master/data/charts.csv +26 -0
- package/skills/cm-ux-master/data/colors.csv +97 -0
- package/skills/cm-ux-master/data/design-tests.csv +37 -0
- package/skills/cm-ux-master/data/devices.csv +21 -0
- package/skills/cm-ux-master/data/icons.csv +101 -0
- package/skills/cm-ux-master/data/landing.csv +31 -0
- package/skills/cm-ux-master/data/products.csv +97 -0
- package/skills/cm-ux-master/data/react-performance.csv +45 -0
- package/skills/cm-ux-master/data/responsive.csv +26 -0
- package/skills/cm-ux-master/data/semi-tokens.csv +52 -0
- package/skills/cm-ux-master/data/stacks/angular.csv +34 -0
- package/skills/cm-ux-master/data/stacks/astro.csv +54 -0
- package/skills/cm-ux-master/data/stacks/electron.csv +32 -0
- package/skills/cm-ux-master/data/stacks/flutter.csv +53 -0
- package/skills/cm-ux-master/data/stacks/html-tailwind.csv +56 -0
- package/skills/cm-ux-master/data/stacks/htmx.csv +28 -0
- package/skills/cm-ux-master/data/stacks/jetpack-compose.csv +53 -0
- package/skills/cm-ux-master/data/stacks/nextjs.csv +53 -0
- package/skills/cm-ux-master/data/stacks/nuxt-ui.csv +51 -0
- package/skills/cm-ux-master/data/stacks/nuxtjs.csv +59 -0
- package/skills/cm-ux-master/data/stacks/react-native.csv +52 -0
- package/skills/cm-ux-master/data/stacks/react.csv +54 -0
- package/skills/cm-ux-master/data/stacks/shadcn.csv +61 -0
- package/skills/cm-ux-master/data/stacks/svelte.csv +54 -0
- package/skills/cm-ux-master/data/stacks/swiftui.csv +51 -0
- package/skills/cm-ux-master/data/stacks/tauri.csv +29 -0
- package/skills/cm-ux-master/data/stacks/vue.csv +50 -0
- package/skills/cm-ux-master/data/styles.csv +68 -0
- package/skills/cm-ux-master/data/typography.csv +58 -0
- package/skills/cm-ux-master/data/ui-reasoning.csv +101 -0
- package/skills/cm-ux-master/data/ux-guidelines.csv +100 -0
- package/skills/cm-ux-master/data/ux-laws.csv +49 -0
- package/skills/cm-ux-master/data/web-interface.csv +31 -0
- package/skills/cm-ux-master/docs/LANDING-PAGE.html +377 -0
- package/skills/cm-ux-master/docs/README.md +108 -0
- package/skills/cm-ux-master/docs/css/styles.css +573 -0
- package/skills/cm-ux-master/docs/examples/demo-script.md +319 -0
- package/skills/cm-ux-master/docs/guides/for-designers.md +692 -0
- package/skills/cm-ux-master/docs/guides/for-developers.md +778 -0
- package/skills/cm-ux-master/docs/guides/for-product-managers.md +693 -0
- package/skills/cm-ux-master/docs/guides/react-guide-vi.md +50 -0
- package/skills/cm-ux-master/docs/index.html +1062 -0
- package/skills/cm-ux-master/docs/js/i18n.js +84 -0
- package/skills/cm-ux-master/docs/js/lang/de.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/en.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/fr.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/hi.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/id.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ja.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ko.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/ru.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/vi.js +145 -0
- package/skills/cm-ux-master/docs/js/lang/zh.js +145 -0
- package/skills/cm-ux-master/docs/js/main.js +117 -0
- package/skills/cm-ux-master/docs/plan/PHASE1-COMPLETION.md +217 -0
- package/skills/cm-ux-master/docs/plan/PHASE2-COMPLETION.md +199 -0
- package/skills/cm-ux-master/docs/plan/PHASE2-ENHANCED-COMPLETION.md +352 -0
- package/skills/cm-ux-master/docs/plan/PHASE3-VALIDATION-COMPLETION.md +499 -0
- package/skills/cm-ux-master/docs/plan/PHASE4-TESTING-POLISH-COMPLETION.md +483 -0
- package/skills/cm-ux-master/docs/plan/UXM-2.0-ROADMAP.md +681 -0
- package/skills/cm-ux-master/docs/plan/WOW-PITCH.md +410 -0
- package/skills/cm-ux-master/docs/technical/api-reference.md +824 -0
- package/skills/cm-ux-master/docs/technical/harvester-v4.md +328 -0
- package/skills/cm-ux-master/docs/technical/how-it-works.md +1128 -0
- package/skills/cm-ux-master/docs/tutorials/quickstart.md +339 -0
- package/skills/cm-ux-master/docs/tutorials/tutorials.md +939 -0
- package/skills/cm-ux-master/docs/tutorials/user-guide.md +716 -0
- package/skills/cm-ux-master/examples/README.md +63 -0
- package/skills/cm-ux-master/mcp/__init__.py +3 -0
- package/skills/cm-ux-master/mcp/integrations/__init__.py +11 -0
- package/skills/cm-ux-master/mcp/integrations/figma/__init__.py +6 -0
- package/skills/cm-ux-master/mcp/integrations/figma/client.py +293 -0
- package/skills/cm-ux-master/mcp/integrations/figma/plugin/code.js +561 -0
- package/skills/cm-ux-master/mcp/integrations/figma/plugin/ui.html +334 -0
- package/skills/cm-ux-master/mcp/integrations/stitch/__init__.py +5 -0
- package/skills/cm-ux-master/mcp/integrations/stitch/client.py +410 -0
- package/skills/cm-ux-master/mcp/integrations/vscode/package.json +167 -0
- package/skills/cm-ux-master/mcp/integrations/vscode/src/extension.ts +81 -0
- package/skills/cm-ux-master/mcp/mcp-config.json +274 -0
- package/skills/cm-ux-master/mcp/server.py +771 -0
- package/skills/cm-ux-master/mcp/tools/__init__.py +13 -0
- package/skills/cm-ux-master/mcp-server/server.py +595 -0
- package/skills/cm-ux-master/output/fila/FilaDashboard.tsx +47 -0
- package/skills/cm-ux-master/output/fila/components/badge/component.tsx +35 -0
- package/skills/cm-ux-master/output/fila/components/badge/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/button/component.tsx +53 -0
- package/skills/cm-ux-master/output/fila/components/button/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/card/component.tsx +35 -0
- package/skills/cm-ux-master/output/fila/components/card/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/components/input/component.tsx +41 -0
- package/skills/cm-ux-master/output/fila/components/input/index.ts +1 -0
- package/skills/cm-ux-master/output/fila/design-system.css +151 -0
- package/skills/cm-ux-master/output/fila/design-system.html +1596 -0
- package/skills/cm-ux-master/output/fila/design-system.json +168 -0
- package/skills/cm-ux-master/output/fila/figma-tokens.json +523 -0
- package/skills/cm-ux-master/output/fila/harvest-v4-raw.json +406 -0
- package/skills/cm-ux-master/output/fila/semi-theme-override.css +95 -0
- package/skills/cm-ux-master/output/haravan/HaravanDashboard.tsx +103 -0
- package/skills/cm-ux-master/output/haravan/design-system-v3-live.html +2716 -0
- package/skills/cm-ux-master/output/haravan/design-system-v3.html +1770 -0
- package/skills/cm-ux-master/output/haravan/design-system.html +914 -0
- package/skills/cm-ux-master/output/haravan/figma-tokens.json +84 -0
- package/skills/cm-ux-master/output/haravan/haravan-harvest.json +33 -0
- package/skills/cm-ux-master/output/haravan/harvest-v3-raw.json +167 -0
- package/skills/cm-ux-master/output/haravan/semi-theme-override.css +39 -0
- package/skills/cm-ux-master/references/audit-template.md +257 -0
- package/skills/cm-ux-master/references/cultural-ux.md +346 -0
- package/skills/cm-ux-master/references/dark-patterns.md +362 -0
- package/skills/cm-ux-master/references/heuristic-conflicts.md +296 -0
- package/skills/cm-ux-master/references/krug-principles.md +289 -0
- package/skills/cm-ux-master/references/nielsen-heuristics.md +360 -0
- package/skills/cm-ux-master/references/wcag-checklist.md +306 -0
- package/skills/cm-ux-master/scripts/component_generator.py +631 -0
- package/skills/cm-ux-master/scripts/core.py +305 -0
- package/skills/cm-ux-master/scripts/demo_validation.py +452 -0
- package/skills/cm-ux-master/scripts/design_doc_generator.py +1325 -0
- package/skills/cm-ux-master/scripts/design_system.py +1141 -0
- package/skills/cm-ux-master/scripts/design_system_indexer.py +889 -0
- package/skills/cm-ux-master/scripts/extract_i18n.py +251 -0
- package/skills/cm-ux-master/scripts/extractor.py +1437 -0
- package/skills/cm-ux-master/scripts/figma_bridge.py +406 -0
- package/skills/cm-ux-master/scripts/generate.py +147 -0
- package/skills/cm-ux-master/scripts/harvest_session.py +207 -0
- package/skills/cm-ux-master/scripts/harvester.js +240 -0
- package/skills/cm-ux-master/scripts/harvester_browser.py +717 -0
- package/skills/cm-ux-master/scripts/harvester_cli.py +431 -0
- package/skills/cm-ux-master/scripts/harvester_v1.js +275 -0
- package/skills/cm-ux-master/scripts/harvester_v3.js +620 -0
- package/skills/cm-ux-master/scripts/harvester_v4.js +1003 -0
- package/skills/cm-ux-master/scripts/install.py +528 -0
- package/skills/cm-ux-master/scripts/license.py +81 -0
- package/skills/cm-ux-master/scripts/media/qrpayment.png +0 -0
- package/skills/cm-ux-master/scripts/pro_stubs.py +120 -0
- package/skills/cm-ux-master/scripts/project_registry.py +217 -0
- package/skills/cm-ux-master/scripts/search.py +114 -0
- package/skills/cm-ux-master/scripts/semi_mcp_bridge.py +425 -0
- package/skills/cm-ux-master/scripts/stitch_integration.py +583 -0
- package/skills/cm-ux-master/scripts/test_harvester_v4.py +335 -0
- package/skills/cm-ux-master/scripts/token_mapper.py +626 -0
- package/skills/cm-ux-master/scripts/validation_engine.py +1571 -0
- package/skills/cm-ux-master/scripts/wizard.py +653 -0
- package/skills/cm-ux-master/setup.py +93 -0
- package/skills/cm-ux-master/templates/base/flutter-widget.dart +69 -0
- package/skills/cm-ux-master/templates/base/html-page.html +152 -0
- package/skills/cm-ux-master/templates/base/react-component.tsx +47 -0
- package/skills/cm-ux-master/templates/base/swiftui-view.swift +62 -0
- package/skills/cm-ux-master/templates/quick-start.sh +176 -0
- package/skills/cm-ux-master/tests/automation/batch-validate.sh +250 -0
- package/skills/cm-ux-master/tests/automation/generate-test-projects.sh +561 -0
- package/skills/cm-ux-master/tests/automation/run-all-tests.sh +315 -0
- package/skills/cm-ux-master/tests/test_design_doc.py +145 -0
- package/skills/cm-ux-master/tests/test_devices.py +74 -0
- package/skills/cm-ux-master/tests/test_generator.py +116 -0
- package/skills/cm-ux-master/tests/test_harvest_session.py +131 -0
- package/skills/cm-ux-master/tests/test_harvester.py +127 -0
- package/skills/cm-ux-master/tests/test_harvester_v3.py +324 -0
- package/skills/cm-ux-master/tests/test_mcp_server.py +496 -0
- package/skills/cm-ux-master/tests/test_new_domains.py +108 -0
- package/skills/cm-ux-master/tests/test_new_stacks.py +103 -0
- package/skills/cm-ux-master/tests/test_project_registry.py +146 -0
- package/skills/cm-ux-master/tests/test_semi_mcp_bridge.py +207 -0
- package/skills/cm-ux-master/tests/test_token_mapper.py +247 -0
- package/skills/cm-ux-master/tests/test_validation_engine.py +617 -0
- package/skills/config.schema.json +397 -0
- package/skills/frappe-app-builder.zip +0 -0
- package/skills/jobs-to-be-done/SKILL.md +266 -0
- package/skills/jobs-to-be-done/references/case-studies.md +154 -0
- package/skills/jobs-to-be-done/references/competitive-strategy.md +280 -0
- package/skills/jobs-to-be-done/references/diagnostics.md +158 -0
- package/skills/jobs-to-be-done/references/innovation-process.md +392 -0
- package/skills/jobs-to-be-done/references/organizational-change.md +328 -0
- package/skills/marketplace-report-crawler/SKILL.md +176 -0
- package/skills/marketplace-report-crawler/config/accounts.json +41 -0
- package/skills/marketplace-report-crawler/config/report-types.json +422 -0
- package/skills/marketplace-report-crawler/config/sessions.json +3 -0
- package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +102 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +114 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +94 -0
- package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +272 -0
- package/skills/marketplace-report-crawler/scripts/crawl-runner.js +281 -0
- package/skills/marketplace-report-crawler/scripts/session-check.sh +72 -0
- package/skills/marketplace-report-crawler/scripts/session-manager.sh +349 -0
- package/skills/marketplace-report-crawler/scripts/setup-folders.sh +83 -0
- package/skills/medical-research/SKILL.md +194 -0
- package/skills/medical-research/scripts/evidence_checker.py +288 -0
- package/skills/mom-test/SKILL.md +267 -0
- package/skills/mom-test/references/avoiding-bad-data.md +221 -0
- package/skills/mom-test/references/case-studies.md +306 -0
- package/skills/mom-test/references/commitment-advancement.md +219 -0
- package/skills/mom-test/references/finding-conversations.md +251 -0
- package/skills/mom-test/references/processing-learning.md +256 -0
- package/skills/mom-test/references/question-patterns.md +198 -0
- package/skills/pandasai-analytics/SKILL.md +251 -0
- package/skills/release-it/SKILL.md +235 -0
- package/skills/release-it/references/anti-patterns.md +279 -0
- package/skills/release-it/references/capacity-planning.md +285 -0
- package/skills/release-it/references/chaos-engineering.md +325 -0
- package/skills/release-it/references/deployment-strategies.md +331 -0
- package/skills/release-it/references/observability.md +301 -0
- package/skills/release-it/references/stability-patterns.md +355 -0
- package/skills/scripts/sync-ide-skills.sh +61 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +37 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +34 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +51 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +39 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +52 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +25 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +31 -0
- package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +25 -0
- package/skills/skill-creator-ultra/README.md +1242 -0
- package/skills/skill-creator-ultra/SKILL.md +388 -0
- package/skills/skill-creator-ultra/agents/analyzer.md +274 -0
- package/skills/skill-creator-ultra/agents/comparator.md +202 -0
- package/skills/skill-creator-ultra/agents/grader.md +223 -0
- package/skills/skill-creator-ultra/assets/eval_review.html +146 -0
- package/skills/skill-creator-ultra/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator-ultra/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +109 -0
- package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +116 -0
- package/skills/skill-creator-ultra/examples/example_api_docs.md +189 -0
- package/skills/skill-creator-ultra/examples/example_db_migration.md +253 -0
- package/skills/skill-creator-ultra/examples/example_git_commit.md +111 -0
- package/skills/skill-creator-ultra/install.ps1 +289 -0
- package/skills/skill-creator-ultra/install.sh +313 -0
- package/skills/skill-creator-ultra/phases/phase1_interview.md +202 -0
- package/skills/skill-creator-ultra/phases/phase2_extract.md +55 -0
- package/skills/skill-creator-ultra/phases/phase3_detect.md +57 -0
- package/skills/skill-creator-ultra/phases/phase4_generate.md +543 -0
- package/skills/skill-creator-ultra/phases/phase5_test.md +319 -0
- package/skills/skill-creator-ultra/phases/phase6_eval.md +301 -0
- package/skills/skill-creator-ultra/phases/phase7_iterate.md +103 -0
- package/skills/skill-creator-ultra/phases/phase8_optimize.md +113 -0
- package/skills/skill-creator-ultra/resources/advanced_patterns.md +499 -0
- package/skills/skill-creator-ultra/resources/anti_patterns.md +376 -0
- package/skills/skill-creator-ultra/resources/blueprints.md +498 -0
- package/skills/skill-creator-ultra/resources/checklist.md +243 -0
- package/skills/skill-creator-ultra/resources/composition_cookbook.md +291 -0
- package/skills/skill-creator-ultra/resources/description_optimization.md +90 -0
- package/skills/skill-creator-ultra/resources/eval_guide.md +133 -0
- package/skills/skill-creator-ultra/resources/industry_questions.md +189 -0
- package/skills/skill-creator-ultra/resources/interview_questions.md +200 -0
- package/skills/skill-creator-ultra/resources/pattern_detection.md +200 -0
- package/skills/skill-creator-ultra/resources/prompt_engineering.md +531 -0
- package/skills/skill-creator-ultra/resources/schemas.md +430 -0
- package/skills/skill-creator-ultra/resources/script_integration.md +593 -0
- package/skills/skill-creator-ultra/resources/scripts_guide.md +339 -0
- package/skills/skill-creator-ultra/resources/skill_template.md +124 -0
- package/skills/skill-creator-ultra/resources/skill_writing_guide.md +634 -0
- package/skills/skill-creator-ultra/resources/versioning_guide.md +193 -0
- package/skills/skill-creator-ultra/scripts/ci_eval.py +200 -0
- package/skills/skill-creator-ultra/scripts/package_skill.py +165 -0
- package/skills/skill-creator-ultra/scripts/simulate_skill.py +398 -0
- package/skills/skill-creator-ultra/scripts/skill_audit.py +611 -0
- package/skills/skill-creator-ultra/scripts/skill_compare.py +265 -0
- package/skills/skill-creator-ultra/scripts/skill_export.py +334 -0
- package/skills/skill-creator-ultra/scripts/skill_scaffold.py +403 -0
- package/skills/skill-creator-ultra/scripts/skill_stats.py +339 -0
- package/skills/skill-creator-ultra/scripts/validate_skill.py +411 -0
- package/skills/tailwind-mastery/SKILL.md +229 -0
- package/skills/vercel-react-best-practices/AGENTS.md +3373 -0
- package/skills/vercel-react-best-practices/README.md +123 -0
- package/skills/vercel-react-best-practices/SKILL.md +143 -0
- package/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web-design-guidelines/SKILL.md +39 -0
- package/skills/cro-methodology/SKILL.md +0 -98
- /package/skills/{cro-methodology → cm-cro-methodology}/references/COPYWRITING.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/OBJECTIONS.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/PERSUASION.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/RESEARCH.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/funnel-analysis.md +0 -0
- /package/skills/{cro-methodology → cm-cro-methodology}/references/testing-methodology.md +0 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# Stability Patterns
|
|
2
|
+
|
|
3
|
+
Stability patterns are the countermeasures to the anti-patterns that cause production failures. Each pattern addresses specific failure modes and, when combined, creates a defense-in-depth strategy that allows systems to absorb shocks, degrade gracefully, and recover automatically.
|
|
4
|
+
|
|
5
|
+
These patterns are not theoretical -- they are battle-tested responses to the recurring failure modes described in the anti-patterns reference.
|
|
6
|
+
|
|
7
|
+
## 1. Circuit Breaker
|
|
8
|
+
|
|
9
|
+
The Circuit Breaker is the single most important stability pattern. It prevents a failing downstream dependency from taking down the calling service by short-circuiting requests when failures exceed a threshold.
|
|
10
|
+
|
|
11
|
+
### State Machine
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
success failure count
|
|
15
|
+
┌───────┐ exceeds threshold
|
|
16
|
+
│ │ │
|
|
17
|
+
▼ │ ▼
|
|
18
|
+
┌────────┐ │ ┌────────┐
|
|
19
|
+
│ CLOSED │─┘ │ OPEN │
|
|
20
|
+
└────────┘ └────────┘
|
|
21
|
+
▲ │
|
|
22
|
+
│ success │ timeout expires
|
|
23
|
+
│ ▼
|
|
24
|
+
│ ┌──────────┐
|
|
25
|
+
└────────────────────│HALF-OPEN │
|
|
26
|
+
(trial request └──────────┘
|
|
27
|
+
succeeds) │
|
|
28
|
+
│ trial request fails
|
|
29
|
+
└──────────────────┐
|
|
30
|
+
│
|
|
31
|
+
┌────────┐
|
|
32
|
+
│ OPEN │
|
|
33
|
+
└────────┘
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### States Explained
|
|
37
|
+
|
|
38
|
+
| State | Behavior | Transitions |
|
|
39
|
+
|-------|----------|-------------|
|
|
40
|
+
| **Closed** | Requests pass through normally; failures are counted | Transitions to Open when failure count exceeds threshold within time window |
|
|
41
|
+
| **Open** | All requests fail immediately without calling downstream | Transitions to Half-Open after a recovery timeout expires |
|
|
42
|
+
| **Half-Open** | A limited number of trial requests are allowed through | Transitions to Closed if trials succeed; back to Open if trials fail |
|
|
43
|
+
|
|
44
|
+
### Configuration Parameters
|
|
45
|
+
|
|
46
|
+
| Parameter | Description | Typical Range |
|
|
47
|
+
|-----------|-------------|---------------|
|
|
48
|
+
| **Failure threshold** | Number of failures before opening | 5-20 failures |
|
|
49
|
+
| **Time window** | Period over which failures are counted | 30-120 seconds |
|
|
50
|
+
| **Recovery timeout** | Time to wait in Open state before trying Half-Open | 15-60 seconds |
|
|
51
|
+
| **Trial requests** | Number of requests allowed in Half-Open | 1-5 requests |
|
|
52
|
+
| **Success threshold** | Consecutive successes needed to close | 3-5 successes |
|
|
53
|
+
|
|
54
|
+
### What Counts as a Failure
|
|
55
|
+
|
|
56
|
+
Not every error should trip the circuit breaker. Configure what counts:
|
|
57
|
+
|
|
58
|
+
| Should Trip | Should Not Trip |
|
|
59
|
+
|------------|----------------|
|
|
60
|
+
| Connection timeout | 400 Bad Request (client error) |
|
|
61
|
+
| Read timeout | 404 Not Found |
|
|
62
|
+
| 5xx server error | 429 Too Many Requests (handle with retry/backoff) |
|
|
63
|
+
| Connection refused | Business logic validation errors |
|
|
64
|
+
| Circuit breaker open on downstream | Request cancellation by client |
|
|
65
|
+
|
|
66
|
+
### Implementation Considerations
|
|
67
|
+
|
|
68
|
+
- **Granularity:** One circuit breaker per downstream service, or per endpoint within a service? Per-endpoint gives finer control but more complexity.
|
|
69
|
+
- **Fallback behavior:** When the circuit is open, what do you return? Cached data? Default value? Error response? The right answer depends on the use case.
|
|
70
|
+
- **Monitoring:** Every circuit breaker state change should emit a metric and a log entry. An open circuit breaker is a critical signal.
|
|
71
|
+
- **Coordination:** In a fleet of instances, each has its own circuit breaker state. Consider whether this is acceptable or if you need coordinated state (usually independent is fine).
|
|
72
|
+
- **Half-open thundering herd:** When the recovery timeout expires, only let one or two trial requests through -- not the full backlog.
|
|
73
|
+
|
|
74
|
+
### Code Pattern (Pseudocode)
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
class CircuitBreaker:
|
|
78
|
+
state = CLOSED
|
|
79
|
+
failure_count = 0
|
|
80
|
+
last_failure_time = null
|
|
81
|
+
|
|
82
|
+
function call(operation):
|
|
83
|
+
if state == OPEN:
|
|
84
|
+
if now() - last_failure_time > recovery_timeout:
|
|
85
|
+
state = HALF_OPEN
|
|
86
|
+
else:
|
|
87
|
+
raise CircuitOpenException()
|
|
88
|
+
|
|
89
|
+
try:
|
|
90
|
+
result = operation()
|
|
91
|
+
on_success()
|
|
92
|
+
return result
|
|
93
|
+
catch Exception:
|
|
94
|
+
on_failure()
|
|
95
|
+
raise
|
|
96
|
+
|
|
97
|
+
function on_success():
|
|
98
|
+
if state == HALF_OPEN:
|
|
99
|
+
state = CLOSED
|
|
100
|
+
failure_count = 0
|
|
101
|
+
|
|
102
|
+
function on_failure():
|
|
103
|
+
failure_count += 1
|
|
104
|
+
last_failure_time = now()
|
|
105
|
+
if failure_count >= threshold:
|
|
106
|
+
state = OPEN
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 2. Bulkheads
|
|
112
|
+
|
|
113
|
+
Named after the watertight compartments in a ship's hull, bulkheads partition system resources so that a failure in one partition does not sink the entire system.
|
|
114
|
+
|
|
115
|
+
### Types of Bulkheads
|
|
116
|
+
|
|
117
|
+
| Type | Mechanism | Use Case |
|
|
118
|
+
|------|-----------|----------|
|
|
119
|
+
| **Thread pool isolation** | Separate thread pools per dependency | Service A gets 20 threads, Service B gets 20 threads; A's failure cannot exhaust B's pool |
|
|
120
|
+
| **Connection pool isolation** | Separate connection pools per downstream | Payment DB pool separate from analytics DB pool |
|
|
121
|
+
| **Process isolation** | Separate OS processes per workload | Background jobs in separate processes from request handling |
|
|
122
|
+
| **Container isolation** | Separate containers per service | Each microservice in its own container with resource limits |
|
|
123
|
+
| **Swim lanes** | Complete stack isolation for critical paths | Checkout flow runs on entirely separate infrastructure from browsing |
|
|
124
|
+
|
|
125
|
+
### Swim Lanes
|
|
126
|
+
|
|
127
|
+
Swim lanes are the most rigorous form of bulkheading. A swim lane is a complete, isolated stack -- from load balancer to database -- dedicated to a specific function.
|
|
128
|
+
|
|
129
|
+
**When to use swim lanes:**
|
|
130
|
+
- Revenue-critical paths (checkout, payment processing)
|
|
131
|
+
- Compliance-critical paths (authentication, audit logging)
|
|
132
|
+
- When a non-critical feature has historically caused outages affecting critical features
|
|
133
|
+
|
|
134
|
+
**Design rules for swim lanes:**
|
|
135
|
+
- No synchronous calls across swim lane boundaries
|
|
136
|
+
- No shared databases, caches, or message queues
|
|
137
|
+
- Asynchronous replication of data between lanes if needed
|
|
138
|
+
- Each lane has independent scaling, deployment, and monitoring
|
|
139
|
+
|
|
140
|
+
### Sizing Bulkheads
|
|
141
|
+
|
|
142
|
+
The key question: how many resources does each partition get?
|
|
143
|
+
|
|
144
|
+
- **Too generous:** Wasted resources; the partition rarely uses its full allocation
|
|
145
|
+
- **Too tight:** The partition cannot handle legitimate load spikes
|
|
146
|
+
- **Right-sized:** Based on measured throughput at p99 load, plus 20-30% headroom
|
|
147
|
+
|
|
148
|
+
**Approach:** Measure the actual concurrency for each dependency under peak load. Set the bulkhead size to p99 concurrency + 20% headroom. Set a queue/reject policy for requests beyond the limit.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 3. Timeouts
|
|
153
|
+
|
|
154
|
+
Every outbound call needs a timeout. Every. Single. One. A missing timeout is a thread leak waiting to happen.
|
|
155
|
+
|
|
156
|
+
### Types of Timeouts
|
|
157
|
+
|
|
158
|
+
| Type | What It Controls | Typical Range |
|
|
159
|
+
|------|-----------------|---------------|
|
|
160
|
+
| **Connect timeout** | Time to establish a TCP connection | 500ms - 2s |
|
|
161
|
+
| **Read timeout** | Time to receive a response after connecting | 1s - 30s (depends on operation) |
|
|
162
|
+
| **Write timeout** | Time to send the request body | 1s - 10s |
|
|
163
|
+
| **Idle timeout** | Time a connection can sit unused in the pool | 30s - 5 min |
|
|
164
|
+
| **Request timeout** | Overall deadline for the entire operation | Varies by use case |
|
|
165
|
+
|
|
166
|
+
### Timeout Propagation
|
|
167
|
+
|
|
168
|
+
When Service A calls Service B, which calls Service C, timeouts must propagate down the chain. If the user's request has a 5-second deadline, Service A should not start a 10-second operation.
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
User request: 10s deadline
|
|
172
|
+
→ Service A: 8s deadline (2s for own processing)
|
|
173
|
+
→ Service B: 5s deadline (3s for A's processing)
|
|
174
|
+
→ Service C: 3s deadline (2s for B's processing)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Implementation:** Pass the remaining deadline in a request header (e.g., `X-Request-Deadline` or gRPC deadline propagation). Each service subtracts its own processing time and passes the remainder downstream.
|
|
178
|
+
|
|
179
|
+
### Common Timeout Mistakes
|
|
180
|
+
|
|
181
|
+
| Mistake | Consequence | Fix |
|
|
182
|
+
|---------|-------------|-----|
|
|
183
|
+
| Using default OS timeout (120-300s) | Threads blocked for minutes | Set explicit timeouts on every call |
|
|
184
|
+
| Same timeout for all operations | Fast reads wait too long; slow writes fail prematurely | Tune timeouts per operation type |
|
|
185
|
+
| No timeout on DNS resolution | DNS failure blocks thread for OS default (30s+) | Use async DNS or set DNS timeout |
|
|
186
|
+
| Not timing out connection pool acquisition | Thread waits forever for a connection from the pool | Set pool checkout timeout (500ms-2s) |
|
|
187
|
+
| Timeout too aggressive | Legitimate slow responses treated as failures | Set timeout based on p99 latency + margin |
|
|
188
|
+
|
|
189
|
+
### Setting Timeout Values
|
|
190
|
+
|
|
191
|
+
1. Measure the p99 latency of the operation under normal load
|
|
192
|
+
2. Add a margin (typically 2-3x p99)
|
|
193
|
+
3. Consider the user-facing deadline -- if the user will wait only 5 seconds, your timeout must be less than 5 seconds
|
|
194
|
+
4. Monitor timeout rates -- if timeouts fire frequently, the downstream is degrading
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 4. Retry with Backoff
|
|
199
|
+
|
|
200
|
+
Retries are necessary because transient failures are real -- network blips, momentary overloads, and garbage collection pauses cause temporary unavailability that resolves on its own. But naive retries (immediate, unlimited) cause more harm than good.
|
|
201
|
+
|
|
202
|
+
### Retry Strategy Components
|
|
203
|
+
|
|
204
|
+
| Component | Purpose | Implementation |
|
|
205
|
+
|-----------|---------|----------------|
|
|
206
|
+
| **Exponential backoff** | Increase delay between retries to give the downstream time to recover | Delay = base * 2^attempt (e.g., 100ms, 200ms, 400ms, 800ms) |
|
|
207
|
+
| **Jitter** | Randomize the delay to prevent all clients from retrying at the same instant | Delay = random(0, base * 2^attempt) |
|
|
208
|
+
| **Maximum retries** | Limit total attempts to prevent infinite retry loops | Typically 3-5 retries |
|
|
209
|
+
| **Retry budget** | Limit the percentage of requests that are retries across the entire fleet | No more than 10-20% of total requests should be retries |
|
|
210
|
+
| **Idempotency** | Ensure the operation is safe to retry without side effects | Use idempotency keys for mutations |
|
|
211
|
+
|
|
212
|
+
### When to Retry
|
|
213
|
+
|
|
214
|
+
| Retry | Do Not Retry |
|
|
215
|
+
|-------|-------------|
|
|
216
|
+
| 503 Service Unavailable | 400 Bad Request |
|
|
217
|
+
| 429 Too Many Requests (with backoff) | 401/403 Authentication/Authorization |
|
|
218
|
+
| Connection timeout | 404 Not Found |
|
|
219
|
+
| Connection reset | 422 Validation Error |
|
|
220
|
+
| Read timeout (for idempotent operations) | Read timeout (for non-idempotent operations without idempotency key) |
|
|
221
|
+
|
|
222
|
+
### Retry Budget
|
|
223
|
+
|
|
224
|
+
A retry budget limits the total percentage of retried requests across your entire fleet. Without a budget, a fleet of 100 instances each retrying 3 times can amplify load on a struggling downstream by 300x.
|
|
225
|
+
|
|
226
|
+
**Implementation:**
|
|
227
|
+
- Track the ratio of retries to original requests over a sliding window (e.g., 1 minute)
|
|
228
|
+
- If retry ratio exceeds the budget (e.g., 20%), stop retrying and fail fast
|
|
229
|
+
- This provides fleet-level protection that per-instance retry limits cannot
|
|
230
|
+
|
|
231
|
+
### The Thundering Herd Problem with Retries
|
|
232
|
+
|
|
233
|
+
When a downstream service recovers, all clients retry simultaneously, overwhelming it again. Jitter solves this:
|
|
234
|
+
|
|
235
|
+
- **No jitter:** All 1,000 clients retry at exactly t+100ms, t+200ms, t+400ms
|
|
236
|
+
- **Full jitter:** Each client retries at random(0, 100ms), random(0, 200ms), random(0, 400ms) -- spreading the load evenly
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 5. Steady State
|
|
241
|
+
|
|
242
|
+
Production systems accumulate cruft over time. Log files grow. Sessions pile up. Temporary files linger. Database tables bloat. Without active management, this accumulation eventually exhausts a resource -- disk space, memory, database capacity -- and the system fails.
|
|
243
|
+
|
|
244
|
+
### What Accumulates
|
|
245
|
+
|
|
246
|
+
| Resource | Growth Mechanism | Consequence of Neglect |
|
|
247
|
+
|----------|-----------------|----------------------|
|
|
248
|
+
| **Log files** | Application logging, access logs | Disk full; application cannot write; crash |
|
|
249
|
+
| **Database rows** | Event logs, audit trails, temp records | Slow queries; backup failures; storage costs |
|
|
250
|
+
| **Sessions** | User sessions stored server-side | Memory exhaustion; swap thrashing |
|
|
251
|
+
| **Temp files** | Upload processing, report generation | Disk full |
|
|
252
|
+
| **Cache entries** | Application cache without TTL | Memory exhaustion |
|
|
253
|
+
| **Message queues** | Unprocessed or dead-letter messages | Queue backpressure; memory/disk exhaustion |
|
|
254
|
+
|
|
255
|
+
### Steady State Design
|
|
256
|
+
|
|
257
|
+
Every resource that grows must have a corresponding mechanism to shrink:
|
|
258
|
+
|
|
259
|
+
- **Log rotation:** Rotate by size (500MB) and time (daily); retain N files; compress rotated files
|
|
260
|
+
- **Data purging:** Delete or archive records older than retention period; run during off-peak hours
|
|
261
|
+
- **Session cleanup:** Set maximum session duration and idle timeout; evict expired sessions automatically
|
|
262
|
+
- **Cache eviction:** Use TTL-based expiration; implement LRU or LFU eviction when memory limit is reached
|
|
263
|
+
- **Queue management:** Set maximum queue depth; dead-letter after N delivery attempts; alert on growing queue size
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 6. Fail Fast
|
|
268
|
+
|
|
269
|
+
If a system knows it cannot process a request successfully, it should reject the request immediately rather than consuming resources in a doomed attempt.
|
|
270
|
+
|
|
271
|
+
### When to Fail Fast
|
|
272
|
+
|
|
273
|
+
| Condition | Fail-Fast Response |
|
|
274
|
+
|-----------|-------------------|
|
|
275
|
+
| Circuit breaker is open | Return 503 immediately |
|
|
276
|
+
| Required parameter missing | Return 400 immediately |
|
|
277
|
+
| User not authenticated | Return 401 immediately |
|
|
278
|
+
| Resource limit exceeded (rate limit) | Return 429 immediately |
|
|
279
|
+
| Request deadline already expired | Return 504 immediately |
|
|
280
|
+
| Required downstream service unavailable | Return 503 with degraded response |
|
|
281
|
+
|
|
282
|
+
### Why Fail Fast Is Kind
|
|
283
|
+
|
|
284
|
+
Failing fast is not hostile -- it is kind. A fast rejection lets the caller know immediately that this request will not work, freeing the caller to retry elsewhere, display an error, or degrade gracefully. A slow failure wastes the caller's time, threads, and hope.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## 7. Let It Crash
|
|
289
|
+
|
|
290
|
+
Borrowed from Erlang's "let it crash" philosophy: when a process enters an unrecoverable or uncertain state, it is safer to terminate and restart from a known-good state than to attempt in-process recovery.
|
|
291
|
+
|
|
292
|
+
### When to Let It Crash
|
|
293
|
+
|
|
294
|
+
- Corrupted in-memory state that cannot be validated
|
|
295
|
+
- Resource handles (file descriptors, connections) in an unknown state
|
|
296
|
+
- Unhandled exception in a critical path where recovery logic is complex and error-prone
|
|
297
|
+
- Process consuming excessive memory or CPU with no clear cause
|
|
298
|
+
|
|
299
|
+
### Prerequisites for Let It Crash
|
|
300
|
+
|
|
301
|
+
- **Fast restart:** Process must start in seconds, not minutes
|
|
302
|
+
- **Supervision:** A supervisor must detect the crash and restart the process
|
|
303
|
+
- **State recovery:** Critical state must be externalized (database, distributed cache) -- not lost on crash
|
|
304
|
+
- **Health checks:** Load balancer must detect the restart and route traffic away during startup
|
|
305
|
+
- **Crash budget:** Monitor crash frequency; excessive crashes indicate a deeper problem, not a healthy recovery mechanism
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 8. Handshaking
|
|
310
|
+
|
|
311
|
+
Handshaking is a protocol-level mechanism where the server tells the client whether it is ready to accept work before the client sends a full request. This prevents the server from being overwhelmed when it is already overloaded.
|
|
312
|
+
|
|
313
|
+
### Handshaking Mechanisms
|
|
314
|
+
|
|
315
|
+
| Level | Mechanism | Example |
|
|
316
|
+
|-------|-----------|---------|
|
|
317
|
+
| **TCP** | SYN/ACK with backlog queue | OS rejects connections when listen queue is full |
|
|
318
|
+
| **HTTP** | 100 Continue response | Server tells client to proceed with request body, or rejects early |
|
|
319
|
+
| **Application** | Health check + load shedding | Load balancer checks `/ready` endpoint; server returns 503 when overloaded |
|
|
320
|
+
| **gRPC** | Flow control with window updates | Server signals how much data it can receive |
|
|
321
|
+
| **Custom** | Pre-flight capacity check | Client asks "can you handle this request?" before sending payload |
|
|
322
|
+
|
|
323
|
+
### Application-Level Handshaking
|
|
324
|
+
|
|
325
|
+
Implement a readiness check that reflects actual capacity:
|
|
326
|
+
|
|
327
|
+
```
|
|
328
|
+
GET /ready
|
|
329
|
+
|
|
330
|
+
200 OK → Server can accept work
|
|
331
|
+
503 Unavailable → Server is overloaded; do not send requests
|
|
332
|
+
|
|
333
|
+
Readiness considers:
|
|
334
|
+
- Thread pool utilization < 80%
|
|
335
|
+
- Connection pool utilization < 80%
|
|
336
|
+
- Response latency < SLO threshold
|
|
337
|
+
- No critical dependency failures
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
This allows load balancers and service meshes to route traffic away from overloaded instances before they fail, rather than after.
|
|
341
|
+
|
|
342
|
+
## Pattern Combinations
|
|
343
|
+
|
|
344
|
+
These patterns are most effective in combination. Common pairings:
|
|
345
|
+
|
|
346
|
+
| Combination | Effect |
|
|
347
|
+
|-------------|--------|
|
|
348
|
+
| **Timeout + Circuit Breaker** | Timeout detects slow failures; circuit breaker prevents repeated attempts |
|
|
349
|
+
| **Circuit Breaker + Fallback** | Circuit breaker trips; fallback provides degraded response |
|
|
350
|
+
| **Bulkhead + Circuit Breaker** | Bulkhead limits blast radius; circuit breaker stops the bleeding |
|
|
351
|
+
| **Retry + Timeout + Circuit Breaker** | Retry handles transient failures; timeout limits wait; circuit breaker stops persistent failures |
|
|
352
|
+
| **Fail Fast + Handshaking** | Server signals overload; client fails fast without sending work |
|
|
353
|
+
| **Steady State + Let It Crash** | Cleanup prevents resource exhaustion; crash recovers from unknown states |
|
|
354
|
+
|
|
355
|
+
The key principle: no single pattern is sufficient. Production-ready systems layer multiple patterns to create defense in depth.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# sync-ide-skills.sh — Sync skill symlinks to IDE compatibility directories.
|
|
4
|
+
#
|
|
5
|
+
# Discovers all skill directories (those containing SKILL.md) at the repo root
|
|
6
|
+
# and creates symlinks in each IDE's skills directory:
|
|
7
|
+
# .claude/skills/ .cursor/skills/ .windsurf/skills/ .pi/skills/
|
|
8
|
+
#
|
|
9
|
+
# Run this after adding or removing a skill.
|
|
10
|
+
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
14
|
+
cd "$REPO_ROOT"
|
|
15
|
+
|
|
16
|
+
IDE_DIRS=(.claude/skills .cursor/skills .windsurf/skills .pi/skills)
|
|
17
|
+
|
|
18
|
+
# Discover skills: top-level directories containing SKILL.md
|
|
19
|
+
skills=()
|
|
20
|
+
for dir in */; do
|
|
21
|
+
dir="${dir%/}"
|
|
22
|
+
[[ -f "$dir/SKILL.md" ]] && skills+=("$dir")
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
if [[ ${#skills[@]} -eq 0 ]]; then
|
|
26
|
+
echo "Error: No skill directories found (expected dirs with SKILL.md at repo root)"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
echo "Found ${#skills[@]} skills: ${skills[*]}"
|
|
31
|
+
echo ""
|
|
32
|
+
|
|
33
|
+
errors=0
|
|
34
|
+
|
|
35
|
+
for ide_dir in "${IDE_DIRS[@]}"; do
|
|
36
|
+
# Clean existing symlinks
|
|
37
|
+
rm -rf "$ide_dir"
|
|
38
|
+
mkdir -p "$ide_dir"
|
|
39
|
+
|
|
40
|
+
for skill in "${skills[@]}"; do
|
|
41
|
+
ln -s "../../$skill" "$ide_dir/$skill"
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
# Verify symlinks resolve
|
|
45
|
+
broken=$(find "$ide_dir" -maxdepth 1 -type l ! -exec test -e {} \; -print 2>/dev/null || true)
|
|
46
|
+
if [[ -n "$broken" ]]; then
|
|
47
|
+
echo "ERROR: Broken symlinks in $ide_dir:"
|
|
48
|
+
echo "$broken"
|
|
49
|
+
errors=$((errors + 1))
|
|
50
|
+
else
|
|
51
|
+
echo "OK $ide_dir/ — ${#skills[@]} symlinks"
|
|
52
|
+
fi
|
|
53
|
+
done
|
|
54
|
+
|
|
55
|
+
echo ""
|
|
56
|
+
if [[ $errors -gt 0 ]]; then
|
|
57
|
+
echo "FAILED: $errors directory(ies) have broken symlinks"
|
|
58
|
+
exit 1
|
|
59
|
+
else
|
|
60
|
+
echo "All ${#skills[@]} skills synced to ${#IDE_DIRS[@]} IDE directories."
|
|
61
|
+
fi
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 🔍 Audit skill theo 7 nguyên tắc hoàn hảo
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Audit — Chấm điểm Skill
|
|
6
|
+
|
|
7
|
+
## Cách dùng
|
|
8
|
+
|
|
9
|
+
Hỏi user: "Anh muốn audit skill nào? Cho em đường dẫn tới thư mục skill hoặc file SKILL.md"
|
|
10
|
+
|
|
11
|
+
## Chạy audit
|
|
12
|
+
|
|
13
|
+
// turbo
|
|
14
|
+
|
|
15
|
+
1. Chạy lệnh audit:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_audit.py" <đường_dẫn_skill>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
1. Nếu user muốn output JSON:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_audit.py" <đường_dẫn_skill> --json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
1. Nếu user muốn chấm khắt khe:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_audit.py" <đường_dẫn_skill> --strict
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Sau khi chạy
|
|
34
|
+
|
|
35
|
+
- Hiển thị kết quả cho user
|
|
36
|
+
- Nếu điểm thấp (<70%) → gợi ý sửa các nguyên tắc bị điểm thấp
|
|
37
|
+
- Nếu điểm cao (≥85%) → khen và gợi ý export ra các nền tảng khác
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 🔄 So sánh 2 phiên bản skill
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Compare — So sánh phiên bản
|
|
6
|
+
|
|
7
|
+
## Cách dùng
|
|
8
|
+
|
|
9
|
+
Hỏi user 2 đường dẫn:
|
|
10
|
+
|
|
11
|
+
1. "Đường dẫn tới skill phiên bản CŨ?"
|
|
12
|
+
2. "Đường dẫn tới skill phiên bản MỚI?"
|
|
13
|
+
|
|
14
|
+
## Chạy compare
|
|
15
|
+
|
|
16
|
+
// turbo
|
|
17
|
+
|
|
18
|
+
1. So sánh 2 thư mục:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_compare.py" <đường_dẫn_cũ> <đường_dẫn_mới>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
1. Output JSON:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_compare.py" <đường_dẫn_cũ> <đường_dẫn_mới> --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Sau khi chạy
|
|
31
|
+
|
|
32
|
+
- Hiển thị bảng so sánh metrics
|
|
33
|
+
- Cho biết phiên bản mới tốt hơn hay tệ hơn
|
|
34
|
+
- Gợi ý cải thiện nếu cần
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 📦 Export skill ra các nền tảng (Cursor, Claude, Windsurf, OpenClaw...)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Export — Chuyển đổi đa nền tảng
|
|
6
|
+
|
|
7
|
+
## Cách dùng
|
|
8
|
+
|
|
9
|
+
Hỏi user 2 thông tin:
|
|
10
|
+
|
|
11
|
+
1. "Đường dẫn tới skill muốn export?"
|
|
12
|
+
2. "Export sang nền tảng nào?" (cursor / claude / windsurf / cline / copilot / openclaw / all)
|
|
13
|
+
|
|
14
|
+
## Chạy export
|
|
15
|
+
|
|
16
|
+
// turbo
|
|
17
|
+
|
|
18
|
+
1. Export sang 1 nền tảng:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_export.py" <đường_dẫn_skill> --platform <nền_tảng>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
1. Export tất cả:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_export.py" <đường_dẫn_skill> --platform all
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
1. Chỉ định thư mục output:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_export.py" <đường_dẫn_skill> --platform all --output <thư_mục>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Nền tảng hỗ trợ
|
|
37
|
+
|
|
38
|
+
| Nền tảng | Flag | File output |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| Cursor | `cursor` | `.mdc` |
|
|
41
|
+
| Claude Code | `claude` | `.md` |
|
|
42
|
+
| Windsurf | `windsurf` | `.md` |
|
|
43
|
+
| Cline | `cline` | `.md` |
|
|
44
|
+
| GitHub Copilot | `copilot` | `.md` |
|
|
45
|
+
| OpenClaw | `openclaw` | `.txt` |
|
|
46
|
+
| Tất cả | `all` | Mỗi nền tảng 1 file |
|
|
47
|
+
|
|
48
|
+
## Sau khi chạy
|
|
49
|
+
|
|
50
|
+
- Hiển thị danh sách files đã export
|
|
51
|
+
- Hướng dẫn user copy file vào đúng vị trí cho từng nền tảng
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 🧠 Tạo Skill mới từ ý tưởng (phỏng vấn 5 Phase → sinh full package)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Generator — Tạo Skill từ ý tưởng
|
|
6
|
+
|
|
7
|
+
Khi user gõ `/skill-generate`, thực hiện quy trình sau:
|
|
8
|
+
|
|
9
|
+
## Bước 1: Kích hoạt Skill Generator
|
|
10
|
+
|
|
11
|
+
Đọc file `SKILL.md` trong skill `skill-generator` và bắt đầu quy trình tạo skill mới.
|
|
12
|
+
|
|
13
|
+
AI sẽ đóng vai **Skill Architect** và thực hiện pipeline 5 Phase:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Phase 1: 🎤 Phỏng vấn thông minh → Hiểu công việc user
|
|
17
|
+
Phase 2: 🔬 Trích xuất thông tin → Cấu trúc hóa
|
|
18
|
+
Phase 3: 🔎 Phát hiện pattern → Chọn kiến trúc
|
|
19
|
+
Phase 4: 🏗️ Sinh skill package → Tạo đầy đủ files
|
|
20
|
+
Phase 5: 🧪 Test & refine → Đảm bảo chất lượng
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Bước 2: Bắt đầu phỏng vấn
|
|
24
|
+
|
|
25
|
+
Hỏi user câu mở đầu:
|
|
26
|
+
|
|
27
|
+
> "Anh/chị mô tả cho em nghe công việc mà anh/chị muốn AI tự động hóa đi.
|
|
28
|
+
> Nói tự nhiên thôi, như đang hướng dẫn một đồng nghiệp mới vậy."
|
|
29
|
+
|
|
30
|
+
## Bước 3: Hoàn thành
|
|
31
|
+
|
|
32
|
+
Sau khi chạy xong 5 Phase:
|
|
33
|
+
|
|
34
|
+
- Tạo **full skill package** (SKILL.md + README + resources + examples + scripts + workflows)
|
|
35
|
+
- Hiển thị cấu trúc thư mục
|
|
36
|
+
- Chạy dry run test
|
|
37
|
+
- Hướng dẫn sử dụng
|
|
38
|
+
|
|
39
|
+
> 💡 **Lưu ý:** Nếu user đã cung cấp flow rõ ràng → AI tự nhận diện Fast Track, skip phỏng vấn.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 🧩 Tạo skeleton skill mới từ 1 lệnh
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Scaffold — Tạo skill mới
|
|
6
|
+
|
|
7
|
+
## Cách dùng
|
|
8
|
+
|
|
9
|
+
Hỏi user:
|
|
10
|
+
|
|
11
|
+
1. "Tên skill mới là gì? (kebab-case, ví dụ: price-quoter)"
|
|
12
|
+
2. "Muốn tạo cơ bản hay đầy đủ?" (cơ bản = chỉ SKILL.md / đầy đủ = kèm scripts + resources + examples)
|
|
13
|
+
|
|
14
|
+
## Chạy scaffold
|
|
15
|
+
|
|
16
|
+
// turbo
|
|
17
|
+
|
|
18
|
+
1. Tạo cơ bản:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_scaffold.py" <tên_skill>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
1. Tạo đầy đủ:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_scaffold.py" <tên_skill> --full
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
1. Tạo kèm scripts:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_scaffold.py" <tên_skill> --with-scripts
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
1. Chế độ tương tác (hỏi từng bước):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_scaffold.py" <tên_skill> --interactive
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
1. Chỉ định thư mục output:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\skill_scaffold.py" <tên_skill> --full --output <thư_mục>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Sau khi chạy
|
|
49
|
+
|
|
50
|
+
- Hiển thị cấu trúc thư mục đã tạo
|
|
51
|
+
- Mở file SKILL.md cho user điền nội dung
|
|
52
|
+
- Gợi ý chạy /skill-audit sau khi viết xong
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 🧪 Mô phỏng chạy thử skill
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill Simulate — Mô phỏng dry-run
|
|
6
|
+
|
|
7
|
+
## Cách dùng
|
|
8
|
+
|
|
9
|
+
Hỏi user: "Anh muốn simulate skill nào? Cho em đường dẫn."
|
|
10
|
+
|
|
11
|
+
## Chạy simulate
|
|
12
|
+
|
|
13
|
+
// turbo
|
|
14
|
+
|
|
15
|
+
1. Mô phỏng skill:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
python "$env:USERPROFILE\.gemini\antigravity\skills\skill-generator\scripts\simulate_skill.py" <đường_dẫn_skill>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Sau khi chạy
|
|
22
|
+
|
|
23
|
+
- Hiển thị từng bước đã mô phỏng
|
|
24
|
+
- Cảnh báo các bước mơ hồ cần sửa
|
|
25
|
+
- Gợi ý thay thế từ mơ hồ bằng từ chính xác
|