claude-skill-lord 1.5.0
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/.claude-plugin/marketplace.json +19 -0
- package/.claude-plugin/plugin.json +54 -0
- package/CLAUDE.md +81 -0
- package/LICENSE +33 -0
- package/LICENSE-ui-ux-pro-max.txt +21 -0
- package/README.md +294 -0
- package/agents/architect.md +211 -0
- package/agents/brainstormer.md +103 -0
- package/agents/build-error-resolver.md +114 -0
- package/agents/chief-of-staff.md +151 -0
- package/agents/code-reviewer.md +285 -0
- package/agents/copywriter.md +111 -0
- package/agents/database-admin.md +91 -0
- package/agents/debugger.md +135 -0
- package/agents/docs-manager.md +119 -0
- package/agents/e2e-runner.md +107 -0
- package/agents/git-manager.md +199 -0
- package/agents/harness-optimizer.md +35 -0
- package/agents/loop-operator.md +36 -0
- package/agents/planner.md +245 -0
- package/agents/project-manager.md +117 -0
- package/agents/quality-gate.md +173 -0
- package/agents/refactor-cleaner.md +85 -0
- package/agents/scout.md +105 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/skill-router.md +112 -0
- package/agents/tdd-guide.md +91 -0
- package/agents/ui-ux-designer.md +220 -0
- package/assets/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/assets/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/assets/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/assets/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/assets/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/assets/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/assets/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/assets/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/assets/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/assets/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/assets/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/assets/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/assets/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/assets/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/assets/canvas-fonts/DMMono-OFL.txt +93 -0
- package/assets/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/assets/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/assets/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/assets/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/assets/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/assets/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/assets/canvas-fonts/Gloock-OFL.txt +93 -0
- package/assets/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/assets/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/assets/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/assets/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/assets/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/assets/canvas-fonts/Italiana-OFL.txt +93 -0
- package/assets/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/assets/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/assets/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/assets/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/assets/canvas-fonts/Jura-Light.ttf +0 -0
- package/assets/canvas-fonts/Jura-Medium.ttf +0 -0
- package/assets/canvas-fonts/Jura-OFL.txt +93 -0
- package/assets/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/assets/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/assets/canvas-fonts/Lora-Bold.ttf +0 -0
- package/assets/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/assets/canvas-fonts/Lora-Italic.ttf +0 -0
- package/assets/canvas-fonts/Lora-OFL.txt +93 -0
- package/assets/canvas-fonts/Lora-Regular.ttf +0 -0
- package/assets/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/assets/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/assets/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/assets/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/assets/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/assets/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/assets/canvas-fonts/Outfit-OFL.txt +93 -0
- package/assets/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/assets/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/assets/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/assets/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/assets/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/assets/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/assets/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/assets/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/assets/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/assets/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/assets/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/assets/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/assets/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/assets/canvas-fonts/Tektur-OFL.txt +93 -0
- package/assets/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/assets/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/assets/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/assets/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/assets/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/assets/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/assets/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/assets/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/commands/ask.md +56 -0
- package/commands/audit.md +25 -0
- package/commands/bootstrap/auto/fast.md +111 -0
- package/commands/bootstrap/auto.md +115 -0
- package/commands/bootstrap.md +137 -0
- package/commands/brainstorm.md +69 -0
- package/commands/build-fix.md +66 -0
- package/commands/code-review.md +44 -0
- package/commands/code.md +93 -0
- package/commands/commit_gen.md +44 -0
- package/commands/content/cro.md +43 -0
- package/commands/content/enhance.md +14 -0
- package/commands/content/fast.md +13 -0
- package/commands/content/good.md +16 -0
- package/commands/cook/auto/fast.md +26 -0
- package/commands/cook/auto.md +15 -0
- package/commands/cook.md +105 -0
- package/commands/debug.md +13 -0
- package/commands/design/3d.md +74 -0
- package/commands/design/describe.md +21 -0
- package/commands/design/fast.md +22 -0
- package/commands/design/good.md +26 -0
- package/commands/design/screenshot.md +32 -0
- package/commands/design/video.md +32 -0
- package/commands/docs/init.md +15 -0
- package/commands/docs/summarize.md +22 -0
- package/commands/docs/update.md +23 -0
- package/commands/e2e.md +365 -0
- package/commands/evolve.md +178 -0
- package/commands/fix/ci.md +20 -0
- package/commands/fix/fast.md +19 -0
- package/commands/fix/hard.md +43 -0
- package/commands/fix/logs.md +20 -0
- package/commands/fix/test.md +20 -0
- package/commands/fix/types.md +9 -0
- package/commands/fix/ui.md +35 -0
- package/commands/fix.md +12 -0
- package/commands/git/cm.md +11 -0
- package/commands/git/cp.md +9 -0
- package/commands/git/pr.md +15 -0
- package/commands/integrate/polar.md +28 -0
- package/commands/integrate/sepay.md +28 -0
- package/commands/journal.md +5 -0
- package/commands/learn.md +74 -0
- package/commands/loop-start.md +36 -0
- package/commands/loop-status.md +28 -0
- package/commands/model-route.md +30 -0
- package/commands/plan.md +115 -0
- package/commands/prompt-optimize.md +38 -0
- package/commands/quality-gate.md +33 -0
- package/commands/refactor-clean.md +84 -0
- package/commands/review/codebase.md +49 -0
- package/commands/route.md +28 -0
- package/commands/scout/ext.md +35 -0
- package/commands/scout.md +28 -0
- package/commands/skill/add.md +29 -0
- package/commands/skill/create.md +22 -0
- package/commands/skill/fix-logs.md +21 -0
- package/commands/skill/optimize.md +28 -0
- package/commands/skill-create.md +174 -0
- package/commands/tdd.md +328 -0
- package/commands/test.md +8 -0
- package/commands/verify.md +63 -0
- package/commands/watzup.md +8 -0
- package/hooks/hooks.json +86 -0
- package/hooks/scripts/block-no-verify.js +19 -0
- package/hooks/scripts/check-console-log.js +71 -0
- package/hooks/scripts/check-hook-enabled.js +12 -0
- package/hooks/scripts/config-protection.js +125 -0
- package/hooks/scripts/post-edit-console-warn.js +54 -0
- package/hooks/scripts/post-edit-format.js +109 -0
- package/hooks/scripts/post-edit-typecheck.js +96 -0
- package/hooks/scripts/quality-gate.js +168 -0
- package/hooks/scripts/run-with-flags-shell.sh +32 -0
- package/hooks/scripts/run-with-flags.js +120 -0
- package/hooks/scripts/session-end.js +301 -0
- package/hooks/scripts/session-start.js +98 -0
- package/manifests/install-modules.json +96 -0
- package/manifests/install-profiles.json +17 -0
- package/package.json +52 -0
- package/scripts/install.js +144 -0
- package/scripts/lib/hook-flags.js +74 -0
- package/scripts/lib/profile-utils.js +97 -0
- package/scripts/lib/resolve-formatter.js +185 -0
- package/scripts/lib/resolve-root.js +89 -0
- package/scripts/lib/utils.js +564 -0
- package/scripts/sl.js +677 -0
- package/skills/manifest.json +493 -0
- package/skills/tier-1/api-design/SKILL.md +523 -0
- package/skills/tier-1/backend-development/SKILL.md +95 -0
- package/skills/tier-1/backend-development/references/backend-api-design.md +495 -0
- package/skills/tier-1/backend-development/references/backend-architecture.md +454 -0
- package/skills/tier-1/backend-development/references/backend-authentication.md +338 -0
- package/skills/tier-1/backend-development/references/backend-code-quality.md +659 -0
- package/skills/tier-1/backend-development/references/backend-debugging.md +904 -0
- package/skills/tier-1/backend-development/references/backend-devops.md +494 -0
- package/skills/tier-1/backend-development/references/backend-mindset.md +387 -0
- package/skills/tier-1/backend-development/references/backend-performance.md +397 -0
- package/skills/tier-1/backend-development/references/backend-security.md +290 -0
- package/skills/tier-1/backend-development/references/backend-technologies.md +256 -0
- package/skills/tier-1/backend-development/references/backend-testing.md +429 -0
- package/skills/tier-1/code-review/SKILL.md +143 -0
- package/skills/tier-1/code-review/references/code-review-reception.md +209 -0
- package/skills/tier-1/code-review/references/requesting-code-review.md +105 -0
- package/skills/tier-1/code-review/references/verification-before-completion.md +139 -0
- package/skills/tier-1/databases/SKILL.md +232 -0
- package/skills/tier-1/databases/references/mongodb-aggregation.md +447 -0
- package/skills/tier-1/databases/references/mongodb-atlas.md +465 -0
- package/skills/tier-1/databases/references/mongodb-crud.md +408 -0
- package/skills/tier-1/databases/references/mongodb-indexing.md +442 -0
- package/skills/tier-1/databases/references/postgresql-administration.md +594 -0
- package/skills/tier-1/databases/references/postgresql-performance.md +527 -0
- package/skills/tier-1/databases/references/postgresql-psql-cli.md +467 -0
- package/skills/tier-1/databases/references/postgresql-queries.md +475 -0
- package/skills/tier-1/databases/scripts/.coverage +0 -0
- package/skills/tier-1/databases/scripts/db_backup.py +502 -0
- package/skills/tier-1/databases/scripts/db_migrate.py +414 -0
- package/skills/tier-1/databases/scripts/db_performance_check.py +444 -0
- package/skills/tier-1/databases/scripts/requirements.txt +20 -0
- package/skills/tier-1/databases/scripts/tests/coverage-db.json +1 -0
- package/skills/tier-1/databases/scripts/tests/requirements.txt +4 -0
- package/skills/tier-1/databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/tier-1/databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/tier-1/databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/tier-1/debugging/SKILL.md +84 -0
- package/skills/tier-1/debugging/references/defense-in-depth.md +124 -0
- package/skills/tier-1/debugging/references/root-cause-tracing.md +122 -0
- package/skills/tier-1/debugging/references/systematic-debugging.md +102 -0
- package/skills/tier-1/debugging/references/verification.md +123 -0
- package/skills/tier-1/debugging/scripts/find-polluter.sh +63 -0
- package/skills/tier-1/debugging/scripts/find-polluter.test.md +102 -0
- package/skills/tier-1/devops/.env.example +76 -0
- package/skills/tier-1/devops/SKILL.md +285 -0
- package/skills/tier-1/devops/references/browser-rendering.md +305 -0
- package/skills/tier-1/devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/tier-1/devops/references/cloudflare-platform.md +271 -0
- package/skills/tier-1/devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/tier-1/devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/tier-1/devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/tier-1/devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/tier-1/devops/references/docker-basics.md +297 -0
- package/skills/tier-1/devops/references/docker-compose.md +292 -0
- package/skills/tier-1/devops/references/gcloud-platform.md +297 -0
- package/skills/tier-1/devops/references/gcloud-services.md +304 -0
- package/skills/tier-1/devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/tier-1/devops/scripts/docker_optimize.py +320 -0
- package/skills/tier-1/devops/scripts/requirements.txt +20 -0
- package/skills/tier-1/devops/scripts/tests/requirements.txt +3 -0
- package/skills/tier-1/devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/tier-1/devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/tier-1/frontend-development/SKILL.md +399 -0
- package/skills/tier-1/frontend-development/resources/common-patterns.md +331 -0
- package/skills/tier-1/frontend-development/resources/complete-examples.md +872 -0
- package/skills/tier-1/frontend-development/resources/component-patterns.md +502 -0
- package/skills/tier-1/frontend-development/resources/data-fetching.md +767 -0
- package/skills/tier-1/frontend-development/resources/file-organization.md +502 -0
- package/skills/tier-1/frontend-development/resources/loading-and-error-states.md +501 -0
- package/skills/tier-1/frontend-development/resources/performance.md +406 -0
- package/skills/tier-1/frontend-development/resources/routing-guide.md +364 -0
- package/skills/tier-1/frontend-development/resources/styling-guide.md +428 -0
- package/skills/tier-1/frontend-development/resources/typescript-standards.md +418 -0
- package/skills/tier-1/react-best-practices/AGENTS.md +2410 -0
- package/skills/tier-1/react-best-practices/README.md +123 -0
- package/skills/tier-1/react-best-practices/SKILL.md +125 -0
- package/skills/tier-1/react-best-practices/metadata.json +15 -0
- package/skills/tier-1/react-best-practices/rules/_sections.md +46 -0
- package/skills/tier-1/react-best-practices/rules/_template.md +28 -0
- package/skills/tier-1/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/tier-1/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/skills/tier-1/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/tier-1/react-best-practices/rules/async-defer-await.md +80 -0
- package/skills/tier-1/react-best-practices/rules/async-dependencies.md +36 -0
- package/skills/tier-1/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/tier-1/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/tier-1/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/skills/tier-1/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/tier-1/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/tier-1/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/tier-1/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/tier-1/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/tier-1/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/tier-1/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/tier-1/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/tier-1/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/skills/tier-1/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/tier-1/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/tier-1/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/tier-1/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/tier-1/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/tier-1/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/tier-1/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/tier-1/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/tier-1/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/tier-1/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/tier-1/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/tier-1/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/tier-1/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/tier-1/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/tier-1/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/tier-1/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/tier-1/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/tier-1/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/tier-1/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/tier-1/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/tier-1/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/tier-1/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/tier-1/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/tier-1/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/tier-1/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/tier-1/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/tier-1/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/tier-1/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/tier-1/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/tier-1/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/tier-1/research/SKILL.md +168 -0
- package/skills/tier-1/security-review/SKILL.md +495 -0
- package/skills/tier-1/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/tier-1/sequential-thinking/.env.example +8 -0
- package/skills/tier-1/sequential-thinking/README.md +183 -0
- package/skills/tier-1/sequential-thinking/SKILL.md +94 -0
- package/skills/tier-1/sequential-thinking/package.json +31 -0
- package/skills/tier-1/sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/tier-1/sequential-thinking/references/advanced-techniques.md +76 -0
- package/skills/tier-1/sequential-thinking/references/core-patterns.md +95 -0
- package/skills/tier-1/sequential-thinking/references/examples-api.md +88 -0
- package/skills/tier-1/sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/tier-1/sequential-thinking/references/examples-debug.md +90 -0
- package/skills/tier-1/sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/tier-1/sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/tier-1/sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/tier-1/sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/tier-1/tdd-workflow/SKILL.md +410 -0
- package/skills/tier-1/testing/SKILL.md +56 -0
- package/skills/tier-1/ui-styling/LICENSE.txt +202 -0
- package/skills/tier-1/ui-styling/SKILL.md +321 -0
- package/skills/tier-1/ui-styling/references/canvas-design-system.md +320 -0
- package/skills/tier-1/ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/tier-1/ui-styling/references/shadcn-components.md +424 -0
- package/skills/tier-1/ui-styling/references/shadcn-theming.md +373 -0
- package/skills/tier-1/ui-styling/references/tailwind-customization.md +483 -0
- package/skills/tier-1/ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/tier-1/ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/tier-1/ui-styling/scripts/.coverage +0 -0
- package/skills/tier-1/ui-styling/scripts/requirements.txt +17 -0
- package/skills/tier-1/ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/tier-1/ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/tier-1/ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/tier-1/ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/tier-1/ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/tier-1/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/tier-1/ui-ux-pro-max/SKILL.md +659 -0
- package/skills/tier-1/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/skills/tier-1/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/skills/tier-1/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/tier-1/ui-ux-pro-max/data/colors.csv +162 -0
- package/skills/tier-1/ui-ux-pro-max/data/design.csv +1776 -0
- package/skills/tier-1/ui-ux-pro-max/data/draft.csv +1779 -0
- package/skills/tier-1/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/skills/tier-1/ui-ux-pro-max/data/icons.csv +106 -0
- package/skills/tier-1/ui-ux-pro-max/data/landing.csv +35 -0
- package/skills/tier-1/ui-ux-pro-max/data/products.csv +162 -0
- package/skills/tier-1/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/tier-1/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/tier-1/ui-ux-pro-max/data/styles.csv +85 -0
- package/skills/tier-1/ui-ux-pro-max/data/typography.csv +74 -0
- package/skills/tier-1/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/skills/tier-1/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/tier-1/ui-ux-pro-max/scripts/core.py +247 -0
- package/skills/tier-1/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/tier-1/ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/tier-1/ui-ux-pro-max/templates/base/quick-reference.md +297 -0
- package/skills/tier-1/ui-ux-pro-max/templates/base/skill-content.md +358 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/agent.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/claude.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/codebuddy.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/codex.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/continue.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/copilot.json +18 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/cursor.json +18 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/droid.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/gemini.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/kiro.json +18 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/opencode.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/qoder.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/roocode.json +18 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/trae.json +21 -0
- package/skills/tier-1/ui-ux-pro-max/templates/platforms/windsurf.json +18 -0
- package/skills/tier-1/web-frameworks/SKILL.md +324 -0
- package/skills/tier-1/web-frameworks/references/nextjs-app-router.md +465 -0
- package/skills/tier-1/web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/skills/tier-1/web-frameworks/references/nextjs-optimization.md +511 -0
- package/skills/tier-1/web-frameworks/references/nextjs-server-components.md +495 -0
- package/skills/tier-1/web-frameworks/references/remix-icon-integration.md +603 -0
- package/skills/tier-1/web-frameworks/references/turborepo-caching.md +551 -0
- package/skills/tier-1/web-frameworks/references/turborepo-pipelines.md +517 -0
- package/skills/tier-1/web-frameworks/references/turborepo-setup.md +542 -0
- package/skills/tier-1/web-frameworks/scripts/.coverage +0 -0
- package/skills/tier-1/web-frameworks/scripts/__init__.py +0 -0
- package/skills/tier-1/web-frameworks/scripts/nextjs_init.py +547 -0
- package/skills/tier-1/web-frameworks/scripts/requirements.txt +16 -0
- package/skills/tier-1/web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/skills/tier-1/web-frameworks/scripts/tests/requirements.txt +3 -0
- package/skills/tier-1/web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/skills/tier-1/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/skills/tier-1/web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/skills/tier-2/ai-multimodal/.env.example +97 -0
- package/skills/tier-2/ai-multimodal/SKILL.md +353 -0
- package/skills/tier-2/ai-multimodal/references/audio-processing.md +373 -0
- package/skills/tier-2/ai-multimodal/references/image-generation.md +558 -0
- package/skills/tier-2/ai-multimodal/references/video-analysis.md +498 -0
- package/skills/tier-2/ai-multimodal/references/vision-understanding.md +479 -0
- package/skills/tier-2/ai-multimodal/scripts/.coverage +0 -0
- package/skills/tier-2/ai-multimodal/scripts/document_converter.py +395 -0
- package/skills/tier-2/ai-multimodal/scripts/gemini_batch_process.py +480 -0
- package/skills/tier-2/ai-multimodal/scripts/media_optimizer.py +506 -0
- package/skills/tier-2/ai-multimodal/scripts/requirements.txt +26 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/.coverage +0 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/requirements.txt +20 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/test_document_converter.py +74 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/test_failures.log +258 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -0
- package/skills/tier-2/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -0
- package/skills/tier-2/autonomous-loops/SKILL.md +610 -0
- package/skills/tier-2/backend-patterns/SKILL.md +598 -0
- package/skills/tier-2/better-auth/SKILL.md +204 -0
- package/skills/tier-2/better-auth/references/advanced-features.md +553 -0
- package/skills/tier-2/better-auth/references/database-integration.md +577 -0
- package/skills/tier-2/better-auth/references/email-password-auth.md +416 -0
- package/skills/tier-2/better-auth/references/oauth-providers.md +430 -0
- package/skills/tier-2/better-auth/scripts/.coverage +0 -0
- package/skills/tier-2/better-auth/scripts/better_auth_init.py +521 -0
- package/skills/tier-2/better-auth/scripts/requirements.txt +15 -0
- package/skills/tier-2/better-auth/scripts/tests/.coverage +0 -0
- package/skills/tier-2/better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/skills/tier-2/brand/SKILL.md +97 -0
- package/skills/tier-2/brand/references/approval-checklist.md +169 -0
- package/skills/tier-2/brand/references/asset-organization.md +157 -0
- package/skills/tier-2/brand/references/brand-guideline-template.md +140 -0
- package/skills/tier-2/brand/references/color-palette-management.md +186 -0
- package/skills/tier-2/brand/references/consistency-checklist.md +94 -0
- package/skills/tier-2/brand/references/logo-usage-rules.md +185 -0
- package/skills/tier-2/brand/references/messaging-framework.md +85 -0
- package/skills/tier-2/brand/references/typography-specifications.md +214 -0
- package/skills/tier-2/brand/references/update.md +118 -0
- package/skills/tier-2/brand/references/visual-identity.md +96 -0
- package/skills/tier-2/brand/references/voice-framework.md +88 -0
- package/skills/tier-2/brand/scripts/extract-colors.cjs +341 -0
- package/skills/tier-2/brand/scripts/inject-brand-context.cjs +349 -0
- package/skills/tier-2/brand/scripts/sync-brand-to-tokens.cjs +266 -0
- package/skills/tier-2/brand/scripts/validate-asset.cjs +387 -0
- package/skills/tier-2/brand/templates/brand-guidelines-starter.md +275 -0
- package/skills/tier-2/claude-code/SKILL.md +188 -0
- package/skills/tier-2/claude-code/references/advanced-features.md +399 -0
- package/skills/tier-2/claude-code/references/agent-skills.md +399 -0
- package/skills/tier-2/claude-code/references/api-reference.md +498 -0
- package/skills/tier-2/claude-code/references/best-practices.md +447 -0
- package/skills/tier-2/claude-code/references/cicd-integration.md +428 -0
- package/skills/tier-2/claude-code/references/configuration.md +480 -0
- package/skills/tier-2/claude-code/references/enterprise-features.md +472 -0
- package/skills/tier-2/claude-code/references/getting-started.md +252 -0
- package/skills/tier-2/claude-code/references/hooks-and-plugins.md +441 -0
- package/skills/tier-2/claude-code/references/ide-integration.md +316 -0
- package/skills/tier-2/claude-code/references/mcp-integration.md +386 -0
- package/skills/tier-2/claude-code/references/slash-commands.md +489 -0
- package/skills/tier-2/claude-code/references/troubleshooting.md +456 -0
- package/skills/tier-2/codebase-onboarding/SKILL.md +233 -0
- package/skills/tier-2/coding-standards/SKILL.md +530 -0
- package/skills/tier-2/continuous-learning/SKILL.md +365 -0
- package/skills/tier-2/continuous-learning/agents/observer-loop.sh +191 -0
- package/skills/tier-2/continuous-learning/agents/observer.md +198 -0
- package/skills/tier-2/continuous-learning/agents/session-guardian.sh +150 -0
- package/skills/tier-2/continuous-learning/agents/start-observer.sh +240 -0
- package/skills/tier-2/continuous-learning/config.json +8 -0
- package/skills/tier-2/continuous-learning/hooks/observe.sh +412 -0
- package/skills/tier-2/continuous-learning/scripts/detect-project.sh +228 -0
- package/skills/tier-2/continuous-learning/scripts/instinct-cli.py +1426 -0
- package/skills/tier-2/continuous-learning/scripts/test_parse_instinct.py +984 -0
- package/skills/tier-2/database-migrations/SKILL.md +429 -0
- package/skills/tier-2/deployment-patterns/SKILL.md +427 -0
- package/skills/tier-2/design/SKILL.md +302 -0
- package/skills/tier-2/design/data/cip/deliverables.csv +51 -0
- package/skills/tier-2/design/data/cip/industries.csv +21 -0
- package/skills/tier-2/design/data/cip/mockup-contexts.csv +21 -0
- package/skills/tier-2/design/data/cip/styles.csv +21 -0
- package/skills/tier-2/design/data/icon/styles.csv +16 -0
- package/skills/tier-2/design/data/logo/colors.csv +56 -0
- package/skills/tier-2/design/data/logo/industries.csv +56 -0
- package/skills/tier-2/design/data/logo/styles.csv +56 -0
- package/skills/tier-2/design/references/banner-sizes-and-styles.md +118 -0
- package/skills/tier-2/design/references/cip-deliverable-guide.md +95 -0
- package/skills/tier-2/design/references/cip-design.md +121 -0
- package/skills/tier-2/design/references/cip-prompt-engineering.md +84 -0
- package/skills/tier-2/design/references/cip-style-guide.md +68 -0
- package/skills/tier-2/design/references/design-routing.md +207 -0
- package/skills/tier-2/design/references/icon-design.md +122 -0
- package/skills/tier-2/design/references/logo-color-psychology.md +101 -0
- package/skills/tier-2/design/references/logo-design.md +92 -0
- package/skills/tier-2/design/references/logo-prompt-engineering.md +158 -0
- package/skills/tier-2/design/references/logo-style-guide.md +109 -0
- package/skills/tier-2/design/references/slides-copywriting-formulas.md +84 -0
- package/skills/tier-2/design/references/slides-create.md +4 -0
- package/skills/tier-2/design/references/slides-html-template.md +295 -0
- package/skills/tier-2/design/references/slides-layout-patterns.md +137 -0
- package/skills/tier-2/design/references/slides-strategies.md +94 -0
- package/skills/tier-2/design/references/slides.md +42 -0
- package/skills/tier-2/design/references/social-photos-design.md +329 -0
- package/skills/tier-2/design/scripts/cip/core.py +215 -0
- package/skills/tier-2/design/scripts/cip/generate.py +484 -0
- package/skills/tier-2/design/scripts/cip/render-html.py +424 -0
- package/skills/tier-2/design/scripts/cip/search.py +127 -0
- package/skills/tier-2/design/scripts/icon/generate.py +487 -0
- package/skills/tier-2/design/scripts/logo/core.py +175 -0
- package/skills/tier-2/design/scripts/logo/generate.py +362 -0
- package/skills/tier-2/design/scripts/logo/search.py +114 -0
- package/skills/tier-2/design-system/SKILL.md +244 -0
- package/skills/tier-2/design-system/data/slide-backgrounds.csv +11 -0
- package/skills/tier-2/design-system/data/slide-charts.csv +26 -0
- package/skills/tier-2/design-system/data/slide-color-logic.csv +14 -0
- package/skills/tier-2/design-system/data/slide-copy.csv +26 -0
- package/skills/tier-2/design-system/data/slide-layout-logic.csv +16 -0
- package/skills/tier-2/design-system/data/slide-layouts.csv +26 -0
- package/skills/tier-2/design-system/data/slide-strategies.csv +16 -0
- package/skills/tier-2/design-system/data/slide-typography.csv +15 -0
- package/skills/tier-2/design-system/references/component-specs.md +236 -0
- package/skills/tier-2/design-system/references/component-tokens.md +214 -0
- package/skills/tier-2/design-system/references/primitive-tokens.md +203 -0
- package/skills/tier-2/design-system/references/semantic-tokens.md +215 -0
- package/skills/tier-2/design-system/references/states-and-variants.md +241 -0
- package/skills/tier-2/design-system/references/tailwind-integration.md +251 -0
- package/skills/tier-2/design-system/references/token-architecture.md +224 -0
- package/skills/tier-2/design-system/scripts/embed-tokens.cjs +99 -0
- package/skills/tier-2/design-system/scripts/fetch-background.py +317 -0
- package/skills/tier-2/design-system/scripts/generate-slide.py +753 -0
- package/skills/tier-2/design-system/scripts/generate-tokens.cjs +205 -0
- package/skills/tier-2/design-system/scripts/html-token-validator.py +327 -0
- package/skills/tier-2/design-system/scripts/search-slides.py +218 -0
- package/skills/tier-2/design-system/scripts/slide-token-validator.py +35 -0
- package/skills/tier-2/design-system/scripts/slide_search_core.py +453 -0
- package/skills/tier-2/design-system/scripts/validate-tokens.cjs +251 -0
- package/skills/tier-2/design-system/templates/design-tokens-starter.json +143 -0
- package/skills/tier-2/docker-patterns/SKILL.md +364 -0
- package/skills/tier-2/e2e-testing/SKILL.md +326 -0
- package/skills/tier-2/eval-harness/SKILL.md +270 -0
- package/skills/tier-2/frontend-patterns/SKILL.md +642 -0
- package/skills/tier-2/google-adk-python/SKILL.md +242 -0
- package/skills/tier-2/mcp-management/README.md +219 -0
- package/skills/tier-2/mcp-management/SKILL.md +209 -0
- package/skills/tier-2/mcp-management/assets/tools.json +3146 -0
- package/skills/tier-2/mcp-management/references/configuration.md +114 -0
- package/skills/tier-2/mcp-management/references/gemini-cli-integration.md +215 -0
- package/skills/tier-2/mcp-management/references/mcp-protocol.md +116 -0
- package/skills/tier-2/mcp-management/scripts/.env.example +10 -0
- package/skills/tier-2/mcp-management/scripts/cli.ts +195 -0
- package/skills/tier-2/mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/tier-2/mcp-management/scripts/dist/cli.js +127 -0
- package/skills/tier-2/mcp-management/scripts/dist/mcp-client.js +115 -0
- package/skills/tier-2/mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/tier-2/mcp-management/scripts/package.json +20 -0
- package/skills/tier-2/mcp-management/scripts/tsconfig.json +15 -0
- package/skills/tier-2/mcp-server-patterns/SKILL.md +67 -0
- package/skills/tier-2/media-processing/SKILL.md +358 -0
- package/skills/tier-2/media-processing/references/ffmpeg-encoding.md +358 -0
- package/skills/tier-2/media-processing/references/ffmpeg-filters.md +503 -0
- package/skills/tier-2/media-processing/references/ffmpeg-streaming.md +403 -0
- package/skills/tier-2/media-processing/references/format-compatibility.md +375 -0
- package/skills/tier-2/media-processing/references/imagemagick-batch.md +612 -0
- package/skills/tier-2/media-processing/references/imagemagick-editing.md +623 -0
- package/skills/tier-2/media-processing/scripts/batch_resize.py +342 -0
- package/skills/tier-2/media-processing/scripts/media_convert.py +311 -0
- package/skills/tier-2/media-processing/scripts/requirements.txt +24 -0
- package/skills/tier-2/media-processing/scripts/tests/.coverage +0 -0
- package/skills/tier-2/media-processing/scripts/tests/requirements.txt +2 -0
- package/skills/tier-2/media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/skills/tier-2/media-processing/scripts/tests/test_media_convert.py +259 -0
- package/skills/tier-2/media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/skills/tier-2/media-processing/scripts/video_optimize.py +414 -0
- package/skills/tier-2/mobile-development/SKILL.md +212 -0
- package/skills/tier-2/mobile-development/references/mobile-android.md +604 -0
- package/skills/tier-2/mobile-development/references/mobile-best-practices.md +545 -0
- package/skills/tier-2/mobile-development/references/mobile-debugging.md +1089 -0
- package/skills/tier-2/mobile-development/references/mobile-frameworks.md +465 -0
- package/skills/tier-2/mobile-development/references/mobile-ios.md +496 -0
- package/skills/tier-2/mobile-development/references/mobile-mindset.md +544 -0
- package/skills/tier-2/payment-integration/README.md +185 -0
- package/skills/tier-2/payment-integration/SKILL.md +118 -0
- package/skills/tier-2/payment-integration/references/polar/benefits.md +396 -0
- package/skills/tier-2/payment-integration/references/polar/best-practices.md +482 -0
- package/skills/tier-2/payment-integration/references/polar/checkouts.md +266 -0
- package/skills/tier-2/payment-integration/references/polar/overview.md +184 -0
- package/skills/tier-2/payment-integration/references/polar/products.md +244 -0
- package/skills/tier-2/payment-integration/references/polar/sdk.md +436 -0
- package/skills/tier-2/payment-integration/references/polar/subscriptions.md +340 -0
- package/skills/tier-2/payment-integration/references/polar/webhooks.md +405 -0
- package/skills/tier-2/payment-integration/references/sepay/api.md +140 -0
- package/skills/tier-2/payment-integration/references/sepay/best-practices.md +337 -0
- package/skills/tier-2/payment-integration/references/sepay/overview.md +138 -0
- package/skills/tier-2/payment-integration/references/sepay/qr-codes.md +228 -0
- package/skills/tier-2/payment-integration/references/sepay/sdk.md +213 -0
- package/skills/tier-2/payment-integration/references/sepay/webhooks.md +208 -0
- package/skills/tier-2/payment-integration/scripts/.env.example +20 -0
- package/skills/tier-2/payment-integration/scripts/checkout-helper.js +244 -0
- package/skills/tier-2/payment-integration/scripts/package.json +17 -0
- package/skills/tier-2/payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/skills/tier-2/payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/skills/tier-2/payment-integration/scripts/test-scripts.js +237 -0
- package/skills/tier-2/planning/SKILL.md +88 -0
- package/skills/tier-2/planning/references/codebase-understanding.md +62 -0
- package/skills/tier-2/planning/references/output-standards.md +87 -0
- package/skills/tier-2/planning/references/plan-organization.md +100 -0
- package/skills/tier-2/planning/references/research-phase.md +49 -0
- package/skills/tier-2/planning/references/solution-design.md +63 -0
- package/skills/tier-2/postgres-patterns/SKILL.md +147 -0
- package/skills/tier-2/problem-solving/SKILL.md +96 -0
- package/skills/tier-2/problem-solving/references/attribution.md +69 -0
- package/skills/tier-2/problem-solving/references/collision-zone-thinking.md +79 -0
- package/skills/tier-2/problem-solving/references/inversion-exercise.md +91 -0
- package/skills/tier-2/problem-solving/references/meta-pattern-recognition.md +87 -0
- package/skills/tier-2/problem-solving/references/scale-game.md +95 -0
- package/skills/tier-2/problem-solving/references/simplification-cascades.md +80 -0
- package/skills/tier-2/problem-solving/references/when-stuck.md +72 -0
- package/skills/tier-2/strategic-compact/SKILL.md +131 -0
- package/skills/tier-2/strategic-compact/suggest-compact.sh +54 -0
- package/skills/tier-2/verification-loop/SKILL.md +126 -0
- package/skills/tier-3/agentic-engineering/SKILL.md +63 -0
- package/skills/tier-3/banner-design/SKILL.md +192 -0
- package/skills/tier-3/banner-design/references/banner-sizes-and-styles.md +118 -0
- package/skills/tier-3/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/tier-3/django-patterns/SKILL.md +734 -0
- package/skills/tier-3/golang-patterns/SKILL.md +674 -0
- package/skills/tier-3/kotlin-patterns/SKILL.md +711 -0
- package/skills/tier-3/laravel-patterns/SKILL.md +415 -0
- package/skills/tier-3/prompt-optimizer/SKILL.md +397 -0
- package/skills/tier-3/python-patterns/SKILL.md +750 -0
- package/skills/tier-3/pytorch-patterns/SKILL.md +396 -0
- package/skills/tier-3/rust-patterns/SKILL.md +499 -0
- package/skills/tier-3/shopify/README.md +66 -0
- package/skills/tier-3/shopify/SKILL.md +319 -0
- package/skills/tier-3/shopify/references/app-development.md +470 -0
- package/skills/tier-3/shopify/references/extensions.md +493 -0
- package/skills/tier-3/shopify/references/themes.md +498 -0
- package/skills/tier-3/shopify/scripts/.coverage +0 -0
- package/skills/tier-3/shopify/scripts/requirements.txt +19 -0
- package/skills/tier-3/shopify/scripts/shopify_init.py +423 -0
- package/skills/tier-3/shopify/scripts/tests/.coverage +0 -0
- package/skills/tier-3/shopify/scripts/tests/test_shopify_init.py +385 -0
- package/skills/tier-3/slides/SKILL.md +42 -0
- package/skills/tier-3/slides/references/copywriting-formulas.md +84 -0
- package/skills/tier-3/slides/references/create.md +4 -0
- package/skills/tier-3/slides/references/html-template.md +295 -0
- package/skills/tier-3/slides/references/layout-patterns.md +137 -0
- package/skills/tier-3/slides/references/slide-strategies.md +94 -0
- package/skills/tier-3/springboot-patterns/SKILL.md +314 -0
- package/skills/tier-3/swiftui-patterns/SKILL.md +259 -0
- package/skills/tier-3/threejs/SKILL.md +89 -0
- package/skills/tier-3/threejs/references/01-getting-started.md +177 -0
- package/skills/tier-3/threejs/references/02-loaders.md +169 -0
- package/skills/tier-3/threejs/references/03-textures.md +170 -0
- package/skills/tier-3/threejs/references/04-cameras.md +195 -0
- package/skills/tier-3/threejs/references/05-lights.md +183 -0
- package/skills/tier-3/threejs/references/06-animations.md +214 -0
- package/skills/tier-3/threejs/references/07-math.md +260 -0
- package/skills/tier-3/threejs/references/08-interaction.md +267 -0
- package/skills/tier-3/threejs/references/09-postprocessing.md +240 -0
- package/skills/tier-3/threejs/references/10-controls.md +259 -0
- package/skills/tier-3/threejs/references/11-materials-advanced.md +270 -0
- package/skills/tier-3/threejs/references/12-performance.md +269 -0
- package/skills/tier-3/threejs/references/13-node-materials.md +298 -0
- package/skills/tier-3/threejs/references/14-physics-vr.md +304 -0
- package/skills/tier-3/threejs/references/15-specialized-loaders.md +333 -0
- package/skills/tier-3/threejs/references/16-webgpu.md +302 -0
- package/skills/tier-3/vercel-deploy/SKILL.md +112 -0
- package/skills/tier-3/vercel-deploy/scripts/deploy.sh +249 -0
- package/workflows/development-rules.md +49 -0
- package/workflows/orchestration-protocol.md +16 -0
- package/workflows/primary-workflow.md +52 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tests for better_auth_init.py
|
|
3
|
+
|
|
4
|
+
Covers main functionality with mocked I/O and file operations.
|
|
5
|
+
Target: >80% coverage
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import sys
|
|
9
|
+
import pytest
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from unittest.mock import Mock, patch, mock_open, MagicMock
|
|
12
|
+
from io import StringIO
|
|
13
|
+
|
|
14
|
+
# Add parent directory to path
|
|
15
|
+
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
16
|
+
|
|
17
|
+
from better_auth_init import BetterAuthInit, EnvConfig, main
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@pytest.fixture
|
|
21
|
+
def mock_project_root(tmp_path):
|
|
22
|
+
"""Create mock project root with package.json."""
|
|
23
|
+
(tmp_path / "package.json").write_text("{}")
|
|
24
|
+
return tmp_path
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@pytest.fixture
|
|
28
|
+
def auth_init(mock_project_root):
|
|
29
|
+
"""Create BetterAuthInit instance with mock project root."""
|
|
30
|
+
return BetterAuthInit(project_root=mock_project_root)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class TestBetterAuthInit:
|
|
34
|
+
"""Test BetterAuthInit class."""
|
|
35
|
+
|
|
36
|
+
def test_init_with_project_root(self, mock_project_root):
|
|
37
|
+
"""Test initialization with explicit project root."""
|
|
38
|
+
init = BetterAuthInit(project_root=mock_project_root)
|
|
39
|
+
assert init.project_root == mock_project_root
|
|
40
|
+
assert init.env_config is None
|
|
41
|
+
|
|
42
|
+
def test_find_project_root_success(self, mock_project_root, monkeypatch):
|
|
43
|
+
"""Test finding project root successfully."""
|
|
44
|
+
monkeypatch.chdir(mock_project_root)
|
|
45
|
+
init = BetterAuthInit()
|
|
46
|
+
assert init.project_root == mock_project_root
|
|
47
|
+
|
|
48
|
+
def test_find_project_root_failure(self, tmp_path, monkeypatch):
|
|
49
|
+
"""Test failure to find project root."""
|
|
50
|
+
# Create path without package.json
|
|
51
|
+
no_package_dir = tmp_path / "no-package"
|
|
52
|
+
no_package_dir.mkdir()
|
|
53
|
+
monkeypatch.chdir(no_package_dir)
|
|
54
|
+
|
|
55
|
+
# Mock parent to stop infinite loop
|
|
56
|
+
with patch.object(Path, "parent", new_callable=lambda: property(lambda self: self)):
|
|
57
|
+
with pytest.raises(RuntimeError, match="Could not find project root"):
|
|
58
|
+
BetterAuthInit()
|
|
59
|
+
|
|
60
|
+
def test_generate_secret(self):
|
|
61
|
+
"""Test secret generation."""
|
|
62
|
+
secret = BetterAuthInit.generate_secret()
|
|
63
|
+
assert len(secret) == 64 # 32 bytes = 64 hex chars
|
|
64
|
+
assert all(c in "0123456789abcdef" for c in secret)
|
|
65
|
+
|
|
66
|
+
# Test custom length
|
|
67
|
+
secret = BetterAuthInit.generate_secret(length=16)
|
|
68
|
+
assert len(secret) == 32 # 16 bytes = 32 hex chars
|
|
69
|
+
|
|
70
|
+
def test_parse_env_file(self, tmp_path):
|
|
71
|
+
"""Test parsing .env file."""
|
|
72
|
+
env_content = """
|
|
73
|
+
# Comment
|
|
74
|
+
KEY1=value1
|
|
75
|
+
KEY2="value2"
|
|
76
|
+
KEY3='value3'
|
|
77
|
+
INVALID LINE
|
|
78
|
+
KEY4=value=with=equals
|
|
79
|
+
"""
|
|
80
|
+
env_file = tmp_path / ".env"
|
|
81
|
+
env_file.write_text(env_content)
|
|
82
|
+
|
|
83
|
+
result = BetterAuthInit._parse_env_file(env_file)
|
|
84
|
+
|
|
85
|
+
assert result["KEY1"] == "value1"
|
|
86
|
+
assert result["KEY2"] == "value2"
|
|
87
|
+
assert result["KEY3"] == "value3"
|
|
88
|
+
assert result["KEY4"] == "value=with=equals"
|
|
89
|
+
assert "INVALID" not in result
|
|
90
|
+
|
|
91
|
+
def test_parse_env_file_missing(self, tmp_path):
|
|
92
|
+
"""Test parsing missing .env file."""
|
|
93
|
+
result = BetterAuthInit._parse_env_file(tmp_path / "nonexistent.env")
|
|
94
|
+
assert result == {}
|
|
95
|
+
|
|
96
|
+
def test_load_env_files(self, auth_init, mock_project_root):
|
|
97
|
+
"""Test loading environment variables from multiple files."""
|
|
98
|
+
# Create .env files
|
|
99
|
+
claude_env = mock_project_root / ".claude" / ".env"
|
|
100
|
+
claude_env.parent.mkdir(parents=True, exist_ok=True)
|
|
101
|
+
claude_env.write_text("BASE_VAR=base\nOVERRIDE=claude")
|
|
102
|
+
|
|
103
|
+
skills_env = mock_project_root / ".claude" / "skills" / ".env"
|
|
104
|
+
skills_env.parent.mkdir(parents=True, exist_ok=True)
|
|
105
|
+
skills_env.write_text("OVERRIDE=skills\nSKILLS_VAR=skills")
|
|
106
|
+
|
|
107
|
+
# Mock process env (highest priority)
|
|
108
|
+
with patch.dict("os.environ", {"OVERRIDE": "process", "PROCESS_VAR": "process"}):
|
|
109
|
+
result = auth_init._load_env_files()
|
|
110
|
+
|
|
111
|
+
assert result["BASE_VAR"] == "base"
|
|
112
|
+
assert result["SKILLS_VAR"] == "skills"
|
|
113
|
+
assert result["OVERRIDE"] == "process" # Process env wins
|
|
114
|
+
assert result["PROCESS_VAR"] == "process"
|
|
115
|
+
|
|
116
|
+
def test_prompt_direct_db_sqlite(self, auth_init):
|
|
117
|
+
"""Test prompting for SQLite database."""
|
|
118
|
+
with patch("builtins.input", side_effect=["3", "./test.db"]):
|
|
119
|
+
config = auth_init._prompt_direct_db()
|
|
120
|
+
|
|
121
|
+
assert config["type"] == "sqlite"
|
|
122
|
+
assert "better-sqlite3" in config["import"]
|
|
123
|
+
assert "./test.db" in config["config"]
|
|
124
|
+
|
|
125
|
+
def test_prompt_direct_db_postgresql(self, auth_init):
|
|
126
|
+
"""Test prompting for PostgreSQL database."""
|
|
127
|
+
with patch("builtins.input", side_effect=["1", "postgresql://localhost/test"]):
|
|
128
|
+
config = auth_init._prompt_direct_db()
|
|
129
|
+
|
|
130
|
+
assert config["type"] == "postgresql"
|
|
131
|
+
assert "pg" in config["import"]
|
|
132
|
+
assert config["env_var"] == ("DATABASE_URL", "postgresql://localhost/test")
|
|
133
|
+
|
|
134
|
+
def test_prompt_direct_db_mysql(self, auth_init):
|
|
135
|
+
"""Test prompting for MySQL database."""
|
|
136
|
+
with patch("builtins.input", side_effect=["2", "mysql://localhost/test"]):
|
|
137
|
+
config = auth_init._prompt_direct_db()
|
|
138
|
+
|
|
139
|
+
assert config["type"] == "mysql"
|
|
140
|
+
assert "mysql2" in config["import"]
|
|
141
|
+
assert config["env_var"][0] == "DATABASE_URL"
|
|
142
|
+
|
|
143
|
+
def test_prompt_drizzle(self, auth_init):
|
|
144
|
+
"""Test prompting for Drizzle ORM."""
|
|
145
|
+
with patch("builtins.input", return_value="1"):
|
|
146
|
+
config = auth_init._prompt_drizzle()
|
|
147
|
+
|
|
148
|
+
assert config["type"] == "drizzle"
|
|
149
|
+
assert config["provider"] == "pg"
|
|
150
|
+
assert "drizzleAdapter" in config["import"]
|
|
151
|
+
assert "drizzleAdapter" in config["config"]
|
|
152
|
+
|
|
153
|
+
def test_prompt_prisma(self, auth_init):
|
|
154
|
+
"""Test prompting for Prisma."""
|
|
155
|
+
with patch("builtins.input", return_value="2"):
|
|
156
|
+
config = auth_init._prompt_prisma()
|
|
157
|
+
|
|
158
|
+
assert config["type"] == "prisma"
|
|
159
|
+
assert config["provider"] == "mysql"
|
|
160
|
+
assert "prismaAdapter" in config["import"]
|
|
161
|
+
assert "PrismaClient" in config["import"]
|
|
162
|
+
|
|
163
|
+
def test_prompt_kysely(self, auth_init):
|
|
164
|
+
"""Test prompting for Kysely."""
|
|
165
|
+
config = auth_init._prompt_kysely()
|
|
166
|
+
|
|
167
|
+
assert config["type"] == "kysely"
|
|
168
|
+
assert "kyselyAdapter" in config["import"]
|
|
169
|
+
|
|
170
|
+
def test_prompt_mongodb(self, auth_init):
|
|
171
|
+
"""Test prompting for MongoDB."""
|
|
172
|
+
with patch("builtins.input", side_effect=["mongodb://localhost/test", "mydb"]):
|
|
173
|
+
config = auth_init._prompt_mongodb()
|
|
174
|
+
|
|
175
|
+
assert config["type"] == "mongodb"
|
|
176
|
+
assert "mongodbAdapter" in config["import"]
|
|
177
|
+
assert "mydb" in config["config"]
|
|
178
|
+
assert config["env_var"] == ("MONGODB_URI", "mongodb://localhost/test")
|
|
179
|
+
|
|
180
|
+
def test_prompt_database(self, auth_init):
|
|
181
|
+
"""Test database prompting with different choices."""
|
|
182
|
+
# Test valid choice
|
|
183
|
+
with patch("builtins.input", side_effect=["3", "1"]):
|
|
184
|
+
config = auth_init.prompt_database()
|
|
185
|
+
assert config["type"] == "prisma"
|
|
186
|
+
|
|
187
|
+
# Test invalid choice (defaults to direct DB)
|
|
188
|
+
with patch("builtins.input", side_effect=["99", "1", "postgresql://localhost/test"]):
|
|
189
|
+
with patch("builtins.print"):
|
|
190
|
+
config = auth_init.prompt_database()
|
|
191
|
+
assert config["type"] == "postgresql"
|
|
192
|
+
|
|
193
|
+
def test_prompt_auth_methods(self, auth_init):
|
|
194
|
+
"""Test prompting for authentication methods."""
|
|
195
|
+
with patch("builtins.input", return_value="1 2 3 5 8"):
|
|
196
|
+
with patch("builtins.print"):
|
|
197
|
+
methods = auth_init.prompt_auth_methods()
|
|
198
|
+
|
|
199
|
+
assert methods == ["1", "2", "3", "5", "8"]
|
|
200
|
+
|
|
201
|
+
def test_prompt_auth_methods_invalid(self, auth_init):
|
|
202
|
+
"""Test filtering invalid auth method choices."""
|
|
203
|
+
with patch("builtins.input", return_value="1 99 abc 3"):
|
|
204
|
+
with patch("builtins.print"):
|
|
205
|
+
methods = auth_init.prompt_auth_methods()
|
|
206
|
+
|
|
207
|
+
assert methods == ["1", "3"]
|
|
208
|
+
|
|
209
|
+
def test_generate_auth_config_basic(self, auth_init):
|
|
210
|
+
"""Test generating basic auth config."""
|
|
211
|
+
db_config = {
|
|
212
|
+
"import": "import Database from 'better-sqlite3';",
|
|
213
|
+
"config": "database: new Database('./dev.db')"
|
|
214
|
+
}
|
|
215
|
+
auth_methods = ["1"] # Email/password only
|
|
216
|
+
|
|
217
|
+
config = auth_init.generate_auth_config(db_config, auth_methods)
|
|
218
|
+
|
|
219
|
+
assert "import { betterAuth }" in config
|
|
220
|
+
assert "emailAndPassword" in config
|
|
221
|
+
assert "enabled: true" in config
|
|
222
|
+
assert "better-sqlite3" in config
|
|
223
|
+
|
|
224
|
+
def test_generate_auth_config_with_oauth(self, auth_init):
|
|
225
|
+
"""Test generating config with OAuth providers."""
|
|
226
|
+
db_config = {
|
|
227
|
+
"import": "import { Pool } from 'pg';",
|
|
228
|
+
"config": "database: new Pool()"
|
|
229
|
+
}
|
|
230
|
+
auth_methods = ["1", "2", "3", "4"] # Email + GitHub + Google + Discord
|
|
231
|
+
|
|
232
|
+
config = auth_init.generate_auth_config(db_config, auth_methods)
|
|
233
|
+
|
|
234
|
+
assert "socialProviders" in config
|
|
235
|
+
assert "github:" in config
|
|
236
|
+
assert "google:" in config
|
|
237
|
+
assert "discord:" in config
|
|
238
|
+
assert "GITHUB_CLIENT_ID" in config
|
|
239
|
+
assert "GOOGLE_CLIENT_ID" in config
|
|
240
|
+
assert "DISCORD_CLIENT_ID" in config
|
|
241
|
+
|
|
242
|
+
def test_generate_auth_config_with_plugins(self, auth_init):
|
|
243
|
+
"""Test generating config with plugins."""
|
|
244
|
+
db_config = {"import": "", "config": "database: db"}
|
|
245
|
+
auth_methods = ["5", "6", "7", "8"] # 2FA, Passkey, Magic Link, Username
|
|
246
|
+
|
|
247
|
+
config = auth_init.generate_auth_config(db_config, auth_methods)
|
|
248
|
+
|
|
249
|
+
assert "plugins:" in config
|
|
250
|
+
assert "twoFactor" in config
|
|
251
|
+
assert "passkey" in config
|
|
252
|
+
assert "magicLink" in config
|
|
253
|
+
assert "username" in config
|
|
254
|
+
assert "from 'better-auth/plugins'" in config
|
|
255
|
+
|
|
256
|
+
def test_generate_env_file_basic(self, auth_init):
|
|
257
|
+
"""Test generating basic .env file."""
|
|
258
|
+
db_config = {"type": "sqlite"}
|
|
259
|
+
auth_methods = ["1"]
|
|
260
|
+
|
|
261
|
+
env_content = auth_init.generate_env_file(db_config, auth_methods)
|
|
262
|
+
|
|
263
|
+
assert "BETTER_AUTH_SECRET=" in env_content
|
|
264
|
+
assert "BETTER_AUTH_URL=http://localhost:3000" in env_content
|
|
265
|
+
assert len(env_content.split("\n")) >= 2
|
|
266
|
+
|
|
267
|
+
def test_generate_env_file_with_database_url(self, auth_init):
|
|
268
|
+
"""Test generating .env with database URL."""
|
|
269
|
+
db_config = {
|
|
270
|
+
"env_var": ("DATABASE_URL", "postgresql://localhost/test")
|
|
271
|
+
}
|
|
272
|
+
auth_methods = []
|
|
273
|
+
|
|
274
|
+
env_content = auth_init.generate_env_file(db_config, auth_methods)
|
|
275
|
+
|
|
276
|
+
assert "DATABASE_URL=postgresql://localhost/test" in env_content
|
|
277
|
+
|
|
278
|
+
def test_generate_env_file_with_oauth(self, auth_init):
|
|
279
|
+
"""Test generating .env with OAuth credentials."""
|
|
280
|
+
db_config = {}
|
|
281
|
+
auth_methods = ["2", "3", "4"] # GitHub, Google, Discord
|
|
282
|
+
|
|
283
|
+
env_content = auth_init.generate_env_file(db_config, auth_methods)
|
|
284
|
+
|
|
285
|
+
assert "GITHUB_CLIENT_ID=" in env_content
|
|
286
|
+
assert "GITHUB_CLIENT_SECRET=" in env_content
|
|
287
|
+
assert "GOOGLE_CLIENT_ID=" in env_content
|
|
288
|
+
assert "GOOGLE_CLIENT_SECRET=" in env_content
|
|
289
|
+
assert "DISCORD_CLIENT_ID=" in env_content
|
|
290
|
+
assert "DISCORD_CLIENT_SECRET=" in env_content
|
|
291
|
+
|
|
292
|
+
def test_save_files(self, auth_init, mock_project_root):
|
|
293
|
+
"""Test saving configuration files."""
|
|
294
|
+
auth_config = "// auth config"
|
|
295
|
+
env_content = "SECRET=test"
|
|
296
|
+
|
|
297
|
+
with patch("builtins.input", side_effect=["1"]):
|
|
298
|
+
auth_init._save_files(auth_config, env_content)
|
|
299
|
+
|
|
300
|
+
# Check auth.ts was saved
|
|
301
|
+
auth_path = mock_project_root / "lib" / "auth.ts"
|
|
302
|
+
assert auth_path.exists()
|
|
303
|
+
assert auth_path.read_text() == auth_config
|
|
304
|
+
|
|
305
|
+
# Check .env was saved
|
|
306
|
+
env_path = mock_project_root / ".env"
|
|
307
|
+
assert env_path.exists()
|
|
308
|
+
assert env_path.read_text() == env_content
|
|
309
|
+
|
|
310
|
+
def test_save_files_custom_path(self, auth_init, mock_project_root):
|
|
311
|
+
"""Test saving with custom path."""
|
|
312
|
+
auth_config = "// config"
|
|
313
|
+
env_content = "SECRET=test"
|
|
314
|
+
|
|
315
|
+
custom_path = str(mock_project_root / "custom" / "auth.ts")
|
|
316
|
+
with patch("builtins.input", side_effect=["5", custom_path]):
|
|
317
|
+
auth_init._save_files(auth_config, env_content)
|
|
318
|
+
|
|
319
|
+
assert Path(custom_path).exists()
|
|
320
|
+
|
|
321
|
+
def test_save_files_backup_existing_env(self, auth_init, mock_project_root):
|
|
322
|
+
"""Test backing up existing .env file."""
|
|
323
|
+
# Create existing .env
|
|
324
|
+
env_path = mock_project_root / ".env"
|
|
325
|
+
env_path.write_text("OLD_SECRET=old")
|
|
326
|
+
|
|
327
|
+
auth_config = "// config"
|
|
328
|
+
env_content = "NEW_SECRET=new"
|
|
329
|
+
|
|
330
|
+
with patch("builtins.input", return_value="1"):
|
|
331
|
+
auth_init._save_files(auth_config, env_content)
|
|
332
|
+
|
|
333
|
+
# Check backup was created
|
|
334
|
+
backup_path = mock_project_root / ".env.backup"
|
|
335
|
+
assert backup_path.exists()
|
|
336
|
+
assert backup_path.read_text() == "OLD_SECRET=old"
|
|
337
|
+
|
|
338
|
+
# Check new .env
|
|
339
|
+
assert env_path.read_text() == "NEW_SECRET=new"
|
|
340
|
+
|
|
341
|
+
def test_run_full_flow(self, auth_init, mock_project_root):
|
|
342
|
+
"""Test complete run flow."""
|
|
343
|
+
inputs = [
|
|
344
|
+
"1", # Direct DB
|
|
345
|
+
"1", # PostgreSQL
|
|
346
|
+
"postgresql://localhost/test",
|
|
347
|
+
"1 2", # Email + GitHub
|
|
348
|
+
"n" # Don't save
|
|
349
|
+
]
|
|
350
|
+
|
|
351
|
+
with patch("builtins.input", side_effect=inputs):
|
|
352
|
+
with patch("builtins.print"):
|
|
353
|
+
auth_init.run()
|
|
354
|
+
|
|
355
|
+
# Should complete without errors
|
|
356
|
+
# Files not saved because user chose 'n'
|
|
357
|
+
assert not (mock_project_root / "auth.ts").exists()
|
|
358
|
+
|
|
359
|
+
def test_run_save_files(self, auth_init, mock_project_root):
|
|
360
|
+
"""Test run flow with file saving."""
|
|
361
|
+
inputs = [
|
|
362
|
+
"1", # Direct DB
|
|
363
|
+
"3", # SQLite
|
|
364
|
+
"", # Default path
|
|
365
|
+
"1", # Email only
|
|
366
|
+
"y", # Save
|
|
367
|
+
"1" # Save location
|
|
368
|
+
]
|
|
369
|
+
|
|
370
|
+
with patch("builtins.input", side_effect=inputs):
|
|
371
|
+
with patch("builtins.print"):
|
|
372
|
+
auth_init.run()
|
|
373
|
+
|
|
374
|
+
# Check files were created
|
|
375
|
+
assert (mock_project_root / "lib" / "auth.ts").exists()
|
|
376
|
+
assert (mock_project_root / ".env").exists()
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
class TestMainFunction:
|
|
380
|
+
"""Test main entry point."""
|
|
381
|
+
|
|
382
|
+
def test_main_success(self, tmp_path, monkeypatch):
|
|
383
|
+
"""Test successful main execution."""
|
|
384
|
+
(tmp_path / "package.json").write_text("{}")
|
|
385
|
+
monkeypatch.chdir(tmp_path)
|
|
386
|
+
|
|
387
|
+
inputs = ["1", "3", "", "1", "n"]
|
|
388
|
+
|
|
389
|
+
with patch("builtins.input", side_effect=inputs):
|
|
390
|
+
with patch("builtins.print"):
|
|
391
|
+
exit_code = main()
|
|
392
|
+
|
|
393
|
+
assert exit_code == 0
|
|
394
|
+
|
|
395
|
+
def test_main_keyboard_interrupt(self, tmp_path, monkeypatch):
|
|
396
|
+
"""Test main with keyboard interrupt."""
|
|
397
|
+
(tmp_path / "package.json").write_text("{}")
|
|
398
|
+
monkeypatch.chdir(tmp_path)
|
|
399
|
+
|
|
400
|
+
with patch("builtins.input", side_effect=KeyboardInterrupt()):
|
|
401
|
+
with patch("builtins.print"):
|
|
402
|
+
exit_code = main()
|
|
403
|
+
|
|
404
|
+
assert exit_code == 1
|
|
405
|
+
|
|
406
|
+
def test_main_error(self, tmp_path, monkeypatch):
|
|
407
|
+
"""Test main with error."""
|
|
408
|
+
# No package.json - should fail
|
|
409
|
+
no_package = tmp_path / "no-package"
|
|
410
|
+
no_package.mkdir()
|
|
411
|
+
monkeypatch.chdir(no_package)
|
|
412
|
+
|
|
413
|
+
with patch.object(Path, "parent", new_callable=lambda: property(lambda self: self)):
|
|
414
|
+
with patch("sys.stderr", new_callable=StringIO):
|
|
415
|
+
exit_code = main()
|
|
416
|
+
|
|
417
|
+
assert exit_code == 1
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
if __name__ == "__main__":
|
|
421
|
+
pytest.main([__file__, "-v", "--cov=better_auth_init", "--cov-report=term-missing"])
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ckm:brand
|
|
3
|
+
description: Brand voice, visual identity, messaging frameworks, asset management, brand consistency. Activate for branded content, tone of voice, marketing assets, brand compliance, style guides.
|
|
4
|
+
argument-hint: "[update|review|create] [args]"
|
|
5
|
+
metadata:
|
|
6
|
+
author: claudekit
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Brand
|
|
11
|
+
|
|
12
|
+
Brand identity, voice, messaging, asset management, and consistency frameworks.
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- Brand voice definition and content tone guidance
|
|
17
|
+
- Visual identity standards and style guide development
|
|
18
|
+
- Messaging framework creation
|
|
19
|
+
- Brand consistency review and audit
|
|
20
|
+
- Asset organization, naming, and approval
|
|
21
|
+
- Color palette management and typography specs
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
**Inject brand context into prompts:**
|
|
26
|
+
```bash
|
|
27
|
+
node scripts/inject-brand-context.cjs
|
|
28
|
+
node scripts/inject-brand-context.cjs --json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Validate an asset:**
|
|
32
|
+
```bash
|
|
33
|
+
node scripts/validate-asset.cjs <asset-path>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Extract/compare colors:**
|
|
37
|
+
```bash
|
|
38
|
+
node scripts/extract-colors.cjs --palette
|
|
39
|
+
node scripts/extract-colors.cjs <image-path>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Brand Sync Workflow
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# 1. Edit docs/brand-guidelines.md (or use /brand update)
|
|
46
|
+
# 2. Sync to design tokens
|
|
47
|
+
node scripts/sync-brand-to-tokens.cjs
|
|
48
|
+
# 3. Verify
|
|
49
|
+
node scripts/inject-brand-context.cjs --json | head -20
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Files synced:**
|
|
53
|
+
- `docs/brand-guidelines.md` → Source of truth
|
|
54
|
+
- `assets/design-tokens.json` → Token definitions
|
|
55
|
+
- `assets/design-tokens.css` → CSS variables
|
|
56
|
+
|
|
57
|
+
## Subcommands
|
|
58
|
+
|
|
59
|
+
| Subcommand | Description | Reference |
|
|
60
|
+
|------------|-------------|-----------|
|
|
61
|
+
| `update` | Update brand identity and sync to all design systems | `references/update.md` |
|
|
62
|
+
|
|
63
|
+
## References
|
|
64
|
+
|
|
65
|
+
| Topic | File |
|
|
66
|
+
|-------|------|
|
|
67
|
+
| Voice Framework | `references/voice-framework.md` |
|
|
68
|
+
| Visual Identity | `references/visual-identity.md` |
|
|
69
|
+
| Messaging | `references/messaging-framework.md` |
|
|
70
|
+
| Consistency | `references/consistency-checklist.md` |
|
|
71
|
+
| Guidelines Template | `references/brand-guideline-template.md` |
|
|
72
|
+
| Asset Organization | `references/asset-organization.md` |
|
|
73
|
+
| Color Management | `references/color-palette-management.md` |
|
|
74
|
+
| Typography | `references/typography-specifications.md` |
|
|
75
|
+
| Logo Usage | `references/logo-usage-rules.md` |
|
|
76
|
+
| Approval Checklist | `references/approval-checklist.md` |
|
|
77
|
+
|
|
78
|
+
## Scripts
|
|
79
|
+
|
|
80
|
+
| Script | Purpose |
|
|
81
|
+
|--------|---------|
|
|
82
|
+
| `scripts/inject-brand-context.cjs` | Extract brand context for prompt injection |
|
|
83
|
+
| `scripts/sync-brand-to-tokens.cjs` | Sync brand-guidelines.md → design-tokens.json/css |
|
|
84
|
+
| `scripts/validate-asset.cjs` | Validate asset naming, size, format |
|
|
85
|
+
| `scripts/extract-colors.cjs` | Extract and compare colors against palette |
|
|
86
|
+
|
|
87
|
+
## Templates
|
|
88
|
+
|
|
89
|
+
| Template | Purpose |
|
|
90
|
+
|----------|---------|
|
|
91
|
+
| `templates/brand-guidelines-starter.md` | Complete starter template for new brands |
|
|
92
|
+
|
|
93
|
+
## Routing
|
|
94
|
+
|
|
95
|
+
1. Parse subcommand from `$ARGUMENTS` (first word)
|
|
96
|
+
2. Load corresponding `references/{subcommand}.md`
|
|
97
|
+
3. Execute with remaining arguments
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Asset Approval Checklist
|
|
2
|
+
|
|
3
|
+
Comprehensive checklist for reviewing marketing assets before approval.
|
|
4
|
+
|
|
5
|
+
## Quick Review
|
|
6
|
+
|
|
7
|
+
Before detailed review, verify:
|
|
8
|
+
- [ ] Asset serves stated purpose
|
|
9
|
+
- [ ] Target audience appropriate
|
|
10
|
+
- [ ] No obvious errors or issues
|
|
11
|
+
- [ ] Aligns with campaign goals
|
|
12
|
+
|
|
13
|
+
## Visual Elements
|
|
14
|
+
|
|
15
|
+
### Logo Usage
|
|
16
|
+
- [ ] Correct logo variant for context
|
|
17
|
+
- [ ] Proper clear space maintained
|
|
18
|
+
- [ ] Minimum size requirements met
|
|
19
|
+
- [ ] Approved colors only
|
|
20
|
+
- [ ] No unauthorized modifications
|
|
21
|
+
- [ ] Appropriate for background
|
|
22
|
+
|
|
23
|
+
### Color Compliance
|
|
24
|
+
- [ ] Uses brand palette colors only
|
|
25
|
+
- [ ] Primary/secondary ratio appropriate (60/30/10)
|
|
26
|
+
- [ ] Semantic colors used correctly
|
|
27
|
+
- [ ] No off-brand colors introduced
|
|
28
|
+
- [ ] Consistent across all elements
|
|
29
|
+
|
|
30
|
+
### Typography
|
|
31
|
+
- [ ] Brand fonts used throughout
|
|
32
|
+
- [ ] Correct font weights applied
|
|
33
|
+
- [ ] Proper type hierarchy
|
|
34
|
+
- [ ] Appropriate sizes for medium
|
|
35
|
+
- [ ] Line heights adequate
|
|
36
|
+
- [ ] No orphans/widows in body text
|
|
37
|
+
|
|
38
|
+
### Imagery
|
|
39
|
+
- [ ] Matches brand photography style
|
|
40
|
+
- [ ] Appropriate subjects/content
|
|
41
|
+
- [ ] Quality meets requirements
|
|
42
|
+
- [ ] Properly licensed/credited
|
|
43
|
+
- [ ] Optimized for intended use
|
|
44
|
+
|
|
45
|
+
## Accessibility
|
|
46
|
+
|
|
47
|
+
### Visual Accessibility
|
|
48
|
+
- [ ] Text contrast ratio >= 4.5:1 (AA)
|
|
49
|
+
- [ ] Large text contrast >= 3:1
|
|
50
|
+
- [ ] Interactive elements have visible focus
|
|
51
|
+
- [ ] Color not sole indicator of meaning
|
|
52
|
+
- [ ] Alt text for all images
|
|
53
|
+
|
|
54
|
+
### Content Accessibility
|
|
55
|
+
- [ ] Clear and scannable layout
|
|
56
|
+
- [ ] Readable font sizes
|
|
57
|
+
- [ ] Logical reading order
|
|
58
|
+
- [ ] Meaningful headings structure
|
|
59
|
+
- [ ] Links describe destination
|
|
60
|
+
|
|
61
|
+
## Content Quality
|
|
62
|
+
|
|
63
|
+
### Copy Review
|
|
64
|
+
- [ ] Matches brand voice
|
|
65
|
+
- [ ] Appropriate tone for context
|
|
66
|
+
- [ ] No prohibited terms used
|
|
67
|
+
- [ ] Value proposition clear
|
|
68
|
+
- [ ] CTA compelling and clear
|
|
69
|
+
- [ ] Proofread for errors
|
|
70
|
+
|
|
71
|
+
### Messaging
|
|
72
|
+
- [ ] Aligns with key messages
|
|
73
|
+
- [ ] Differentiators highlighted
|
|
74
|
+
- [ ] Benefits over features
|
|
75
|
+
- [ ] Target audience addressed
|
|
76
|
+
- [ ] No conflicting claims
|
|
77
|
+
|
|
78
|
+
## Technical Requirements
|
|
79
|
+
|
|
80
|
+
### File Specifications
|
|
81
|
+
- [ ] Correct file format
|
|
82
|
+
- [ ] Appropriate resolution
|
|
83
|
+
- [ ] File size optimized
|
|
84
|
+
- [ ] Proper naming convention
|
|
85
|
+
- [ ] Metadata included
|
|
86
|
+
|
|
87
|
+
### Platform Requirements
|
|
88
|
+
| Platform | Verified |
|
|
89
|
+
|----------|----------|
|
|
90
|
+
| Instagram | [ ] Correct dimensions |
|
|
91
|
+
| Twitter/X | [ ] Meets requirements |
|
|
92
|
+
| LinkedIn | [ ] Professional standards |
|
|
93
|
+
| Facebook | [ ] Guidelines compliant |
|
|
94
|
+
| Email | [ ] Size under 1MB |
|
|
95
|
+
| Web | [ ] Optimized for web |
|
|
96
|
+
|
|
97
|
+
## Legal & Compliance
|
|
98
|
+
|
|
99
|
+
### Intellectual Property
|
|
100
|
+
- [ ] Stock images licensed
|
|
101
|
+
- [ ] Music/audio cleared
|
|
102
|
+
- [ ] No trademark violations
|
|
103
|
+
- [ ] User content authorized
|
|
104
|
+
- [ ] Credits included where needed
|
|
105
|
+
|
|
106
|
+
### Regulatory
|
|
107
|
+
- [ ] Required disclosures present
|
|
108
|
+
- [ ] No misleading claims
|
|
109
|
+
- [ ] Pricing accurate
|
|
110
|
+
- [ ] Terms linked where needed
|
|
111
|
+
- [ ] Privacy compliant
|
|
112
|
+
|
|
113
|
+
## Review Status
|
|
114
|
+
|
|
115
|
+
### Reviewer Sign-off
|
|
116
|
+
|
|
117
|
+
| Review Area | Reviewer | Date | Status |
|
|
118
|
+
|-------------|----------|------|--------|
|
|
119
|
+
| Visual Design | | | [ ] Pass / [ ] Revisions |
|
|
120
|
+
| Copy/Content | | | [ ] Pass / [ ] Revisions |
|
|
121
|
+
| Brand Compliance | | | [ ] Pass / [ ] Revisions |
|
|
122
|
+
| Technical | | | [ ] Pass / [ ] Revisions |
|
|
123
|
+
| Legal | | | [ ] Pass / [ ] Revisions |
|
|
124
|
+
|
|
125
|
+
### Final Approval
|
|
126
|
+
|
|
127
|
+
- [ ] All review areas passed
|
|
128
|
+
- [ ] Revisions completed (if any)
|
|
129
|
+
- [ ] Final version uploaded
|
|
130
|
+
- [ ] Metadata updated
|
|
131
|
+
- [ ] Ready for publish/use
|
|
132
|
+
|
|
133
|
+
**Approved By:** _______________
|
|
134
|
+
|
|
135
|
+
**Date:** _______________
|
|
136
|
+
|
|
137
|
+
**Version:** _______________
|
|
138
|
+
|
|
139
|
+
## Common Issues & Fixes
|
|
140
|
+
|
|
141
|
+
| Issue | Fix |
|
|
142
|
+
|-------|-----|
|
|
143
|
+
| Logo too small | Increase to minimum size |
|
|
144
|
+
| Wrong font | Replace with brand font |
|
|
145
|
+
| Low contrast | Adjust colors for accessibility |
|
|
146
|
+
| Off-brand color | Replace with palette color |
|
|
147
|
+
| Blurry image | Use higher resolution source |
|
|
148
|
+
| Missing alt text | Add descriptive alt text |
|
|
149
|
+
| Weak CTA | Strengthen action-oriented copy |
|
|
150
|
+
|
|
151
|
+
## Automation Support
|
|
152
|
+
|
|
153
|
+
The `validate-asset.cjs` script can auto-check:
|
|
154
|
+
- Color palette compliance
|
|
155
|
+
- Minimum dimensions
|
|
156
|
+
- File format/size
|
|
157
|
+
- Naming convention
|
|
158
|
+
- Basic metadata
|
|
159
|
+
|
|
160
|
+
Run: `node .claude/skills/brand/scripts/validate-asset.cjs <asset-path>`
|
|
161
|
+
|
|
162
|
+
## Archival
|
|
163
|
+
|
|
164
|
+
After approval:
|
|
165
|
+
1. Update asset status in manifest.json
|
|
166
|
+
2. Add approver and timestamp
|
|
167
|
+
3. Move previous versions to archive
|
|
168
|
+
4. Update campaign tracking
|
|
169
|
+
5. Notify relevant teams
|