claudeinone-cli 1.0.1 → 1.0.3
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/dist/index.js +16 -1
- package/kit/.claude/.ck.json +9 -0
- package/kit/.claude/.ckignore +12 -0
- package/kit/.claude/agents/accessibility-auditor.md +46 -0
- package/kit/.claude/agents/api-designer.md +43 -0
- package/kit/.claude/agents/backend-developer.md +54 -0
- package/kit/.claude/agents/brainstormer.md +33 -0
- package/kit/.claude/agents/campaign-manager.md +36 -0
- package/kit/.claude/agents/code-reviewer.md +39 -0
- package/kit/.claude/agents/content-creator.md +38 -0
- package/kit/.claude/agents/copywriter.md +42 -0
- package/kit/.claude/agents/database-admin.md +37 -0
- package/kit/.claude/agents/debugger.md +46 -0
- package/kit/.claude/agents/devops-engineer.md +41 -0
- package/kit/.claude/agents/docs-manager.md +33 -0
- package/kit/.claude/agents/email-wizard.md +40 -0
- package/kit/.claude/agents/frontend-developer.md +52 -0
- package/kit/.claude/agents/fullstack-developer.md +55 -0
- package/kit/.claude/agents/git-manager.md +40 -0
- package/kit/.claude/agents/i18n-specialist.md +46 -0
- package/kit/.claude/agents/integration-specialist.md +48 -0
- package/kit/.claude/agents/journal-writer.md +39 -0
- package/kit/.claude/agents/mcp-manager.md +57 -0
- package/kit/.claude/agents/mobile-developer.md +38 -0
- package/kit/.claude/agents/performance-optimizer.md +38 -0
- package/kit/.claude/agents/planner.md +56 -0
- package/kit/.claude/agents/project-manager.md +34 -0
- package/kit/.claude/agents/refactorer.md +43 -0
- package/kit/.claude/agents/researcher.md +45 -0
- package/kit/.claude/agents/risk-analyst.md +33 -0
- package/kit/.claude/agents/scalability-consultant.md +39 -0
- package/kit/.claude/agents/scout.md +25 -0
- package/kit/.claude/agents/security-auditor.md +42 -0
- package/kit/.claude/agents/seo-specialist.md +44 -0
- package/kit/.claude/agents/skill-creator.md +64 -0
- package/kit/.claude/agents/social-media-manager.md +35 -0
- package/kit/.claude/agents/systems-designer.md +35 -0
- package/kit/.claude/agents/technology-strategist.md +43 -0
- package/kit/.claude/agents/tester.md +40 -0
- package/kit/.claude/agents/ui-ux-designer.md +40 -0
- package/kit/.claude/commands/co/ask.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/co/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/co/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/co/bootstrap.md +31 -0
- package/kit/.claude/commands/co/brainstorm.md +27 -0
- package/kit/.claude/commands/co/campaign.md +28 -0
- package/kit/.claude/commands/co/changelog.md +25 -0
- package/kit/.claude/commands/co/checkpoint.md +25 -0
- package/kit/.claude/commands/co/ci.md +26 -0
- package/kit/.claude/commands/co/ck-help.md +24 -0
- package/kit/.claude/commands/co/coding-level.md +24 -0
- package/kit/.claude/commands/co/content-cro.md +26 -0
- package/kit/.claude/commands/co/content-enhance.md +26 -0
- package/kit/.claude/commands/co/content-fast.md +24 -0
- package/kit/.claude/commands/co/content-good.md +26 -0
- package/kit/.claude/commands/co/cook.md +33 -0
- package/kit/.claude/commands/co/debug.md +26 -0
- package/kit/.claude/commands/co/deploy.md +25 -0
- package/kit/.claude/commands/co/design-3d.md +27 -0
- package/kit/.claude/commands/co/design-describe.md +25 -0
- package/kit/.claude/commands/co/design-fast.md +25 -0
- package/kit/.claude/commands/co/design-good.md +28 -0
- package/kit/.claude/commands/co/design-screenshot.md +26 -0
- package/kit/.claude/commands/co/design-video.md +26 -0
- package/kit/.claude/commands/co/docker.md +24 -0
- package/kit/.claude/commands/co/docs-api.md +25 -0
- package/kit/.claude/commands/co/docs-init.md +26 -0
- package/kit/.claude/commands/co/docs-readme.md +24 -0
- package/kit/.claude/commands/co/docs-summarize.md +25 -0
- package/kit/.claude/commands/co/docs-update.md +25 -0
- package/kit/.claude/commands/co/env-check.md +25 -0
- package/kit/.claude/commands/co/fix-ci.md +29 -0
- package/kit/.claude/commands/co/fix-fast.md +28 -0
- package/kit/.claude/commands/co/fix-hard.md +33 -0
- package/kit/.claude/commands/co/fix-logs.md +28 -0
- package/kit/.claude/commands/co/fix-types.md +28 -0
- package/kit/.claude/commands/co/fix-ui.md +28 -0
- package/kit/.claude/commands/co/fix.md +27 -0
- package/kit/.claude/commands/co/git-cm.md +26 -0
- package/kit/.claude/commands/co/git-cp.md +26 -0
- package/kit/.claude/commands/co/git-pr.md +26 -0
- package/kit/.claude/commands/co/index.md +24 -0
- package/kit/.claude/commands/co/integrate-polar.md +29 -0
- package/kit/.claude/commands/co/integrate-sepay.md +29 -0
- package/kit/.claude/commands/co/journal.md +27 -0
- package/kit/.claude/commands/co/k8s.md +24 -0
- package/kit/.claude/commands/co/kanban.md +25 -0
- package/kit/.claude/commands/co/lint-fix.md +24 -0
- package/kit/.claude/commands/co/load.md +25 -0
- package/kit/.claude/commands/co/migrate.md +28 -0
- package/kit/.claude/commands/co/mock.md +26 -0
- package/kit/.claude/commands/co/mode.md +24 -0
- package/kit/.claude/commands/co/monitor.md +25 -0
- package/kit/.claude/commands/co/new-feature.md +27 -0
- package/kit/.claude/commands/co/optimize.md +26 -0
- package/kit/.claude/commands/co/plan-archive.md +24 -0
- package/kit/.claude/commands/co/plan-ci.md +28 -0
- package/kit/.claude/commands/co/plan-cro.md +27 -0
- package/kit/.claude/commands/co/plan-fast.md +24 -0
- package/kit/.claude/commands/co/plan-hard.md +27 -0
- package/kit/.claude/commands/co/plan-parallel.md +25 -0
- package/kit/.claude/commands/co/plan-two.md +29 -0
- package/kit/.claude/commands/co/plan-validate.md +27 -0
- package/kit/.claude/commands/co/plan.md +27 -0
- package/kit/.claude/commands/co/pr.md +25 -0
- package/kit/.claude/commands/co/preview.md +26 -0
- package/kit/.claude/commands/co/refactor.md +25 -0
- package/kit/.claude/commands/co/release.md +25 -0
- package/kit/.claude/commands/co/review-a11y.md +24 -0
- package/kit/.claude/commands/co/review-codebase-parallel.md +27 -0
- package/kit/.claude/commands/co/review-codebase.md +27 -0
- package/kit/.claude/commands/co/review-perf.md +24 -0
- package/kit/.claude/commands/co/review-security.md +25 -0
- package/kit/.claude/commands/co/scaffold.md +25 -0
- package/kit/.claude/commands/co/scout.md +26 -0
- package/kit/.claude/commands/co/secure.md +26 -0
- package/kit/.claude/commands/co/seed.md +25 -0
- package/kit/.claude/commands/co/seo-audit.md +24 -0
- package/kit/.claude/commands/co/seo-keywords.md +25 -0
- package/kit/.claude/commands/co/skill-create.md +29 -0
- package/kit/.claude/commands/co/skill-fix-logs.md +28 -0
- package/kit/.claude/commands/co/slide-create.md +24 -0
- package/kit/.claude/commands/co/spawn.md +24 -0
- package/kit/.claude/commands/co/terraform.md +24 -0
- package/kit/.claude/commands/co/test-gen.md +24 -0
- package/kit/.claude/commands/co/test-ui.md +27 -0
- package/kit/.claude/commands/co/test.md +26 -0
- package/kit/.claude/commands/co/use-mcp.md +25 -0
- package/kit/.claude/commands/co/video-script.md +25 -0
- package/kit/.claude/commands/co/watzup.md +25 -0
- package/kit/.claude/commands/co/worktree.md +25 -0
- package/kit/.claude/commands/co/write-blog.md +25 -0
- package/kit/.claude/commands/co/write-copy.md +24 -0
- package/kit/.claude/commands/co/write-email.md +25 -0
- package/kit/.claude/commands/content/content-cro.md +26 -0
- package/kit/.claude/commands/content/content-enhance.md +26 -0
- package/kit/.claude/commands/content/content-fast.md +24 -0
- package/kit/.claude/commands/content/content-good.md +26 -0
- package/kit/.claude/commands/content/enhance.md +26 -0
- package/kit/.claude/commands/content/good.md +26 -0
- package/kit/.claude/commands/core/ask.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto-fast.md +28 -0
- package/kit/.claude/commands/core/bootstrap-auto-parallel.md +29 -0
- package/kit/.claude/commands/core/bootstrap-auto.md +30 -0
- package/kit/.claude/commands/core/bootstrap.md +31 -0
- package/kit/.claude/commands/core/ck-help.md +24 -0
- package/kit/.claude/commands/core/coding-level.md +24 -0
- package/kit/.claude/commands/core/cook.md +33 -0
- package/kit/.claude/commands/core/debug.md +26 -0
- package/kit/.claude/commands/core/journal.md +27 -0
- package/kit/.claude/commands/core/kanban.md +25 -0
- package/kit/.claude/commands/core/preview.md +26 -0
- package/kit/.claude/commands/core/scout.md +26 -0
- package/kit/.claude/commands/core/test-ui.md +27 -0
- package/kit/.claude/commands/core/test.md +26 -0
- package/kit/.claude/commands/core/use-mcp.md +25 -0
- package/kit/.claude/commands/core/watzup.md +25 -0
- package/kit/.claude/commands/core/worktree.md +25 -0
- package/kit/.claude/commands/design/3d.md +27 -0
- package/kit/.claude/commands/design/design-3d.md +27 -0
- package/kit/.claude/commands/design/design-describe.md +25 -0
- package/kit/.claude/commands/design/design-fast.md +25 -0
- package/kit/.claude/commands/design/design-good.md +28 -0
- package/kit/.claude/commands/design/design-screenshot.md +26 -0
- package/kit/.claude/commands/design/design-video.md +26 -0
- package/kit/.claude/commands/design/good.md +28 -0
- package/kit/.claude/commands/design/video.md +26 -0
- package/kit/.claude/commands/docs/docs-init.md +26 -0
- package/kit/.claude/commands/docs/docs-summarize.md +25 -0
- package/kit/.claude/commands/docs/docs-update.md +25 -0
- package/kit/.claude/commands/docs/init.md +26 -0
- package/kit/.claude/commands/docs/summarize.md +25 -0
- package/kit/.claude/commands/fix/ci.md +29 -0
- package/kit/.claude/commands/fix/fast.md +28 -0
- package/kit/.claude/commands/fix/fix-ci.md +29 -0
- package/kit/.claude/commands/fix/fix-fast.md +28 -0
- package/kit/.claude/commands/fix/fix-hard.md +33 -0
- package/kit/.claude/commands/fix/fix-logs.md +28 -0
- package/kit/.claude/commands/fix/fix-types.md +28 -0
- package/kit/.claude/commands/fix/fix-ui.md +28 -0
- package/kit/.claude/commands/fix/hard.md +33 -0
- package/kit/.claude/commands/fix/logs.md +28 -0
- package/kit/.claude/commands/fix/types.md +28 -0
- package/kit/.claude/commands/fix/ui.md +28 -0
- package/kit/.claude/commands/git/cp.md +26 -0
- package/kit/.claude/commands/git/git-cm.md +26 -0
- package/kit/.claude/commands/git/git-cp.md +26 -0
- package/kit/.claude/commands/git/git-pr.md +26 -0
- package/kit/.claude/commands/integrate/integrate-polar.md +29 -0
- package/kit/.claude/commands/integrate/integrate-sepay.md +29 -0
- package/kit/.claude/commands/integrate/sepay.md +29 -0
- package/kit/.claude/commands/plan/ci.md +28 -0
- package/kit/.claude/commands/plan/cro.md +27 -0
- package/kit/.claude/commands/plan/hard.md +27 -0
- package/kit/.claude/commands/plan/plan-archive.md +24 -0
- package/kit/.claude/commands/plan/plan-ci.md +28 -0
- package/kit/.claude/commands/plan/plan-cro.md +27 -0
- package/kit/.claude/commands/plan/plan-fast.md +24 -0
- package/kit/.claude/commands/plan/plan-hard.md +27 -0
- package/kit/.claude/commands/plan/plan-parallel.md +25 -0
- package/kit/.claude/commands/plan/plan-two.md +29 -0
- package/kit/.claude/commands/plan/plan-validate.md +27 -0
- package/kit/.claude/commands/plan/plan.md +27 -0
- package/kit/.claude/commands/plan/validate.md +27 -0
- package/kit/.claude/commands/skill/fix-logs.md +28 -0
- package/kit/.claude/commands/skill/skill-create.md +29 -0
- package/kit/.claude/commands/skill/skill-fix-logs.md +28 -0
- package/kit/.claude/settings.json +16 -0
- package/kit/.claude/skills/ai-anthropic.md +100 -0
- package/kit/.claude/skills/ai-context-engineering.md +113 -0
- package/kit/.claude/skills/ai-gemini.md +152 -0
- package/kit/.claude/skills/ai-langchain.md +93 -0
- package/kit/.claude/skills/ai-llamaindex.md +179 -0
- package/kit/.claude/skills/ai-mcp-builder.md +101 -0
- package/kit/.claude/skills/ai-openai.md +250 -0
- package/kit/.claude/skills/ai-prompt-engineering.md +173 -0
- package/kit/.claude/skills/ai-rag.md +91 -0
- package/kit/.claude/skills/ai-vectordb.md +215 -0
- package/kit/.claude/skills/analytics-segment.md +161 -0
- package/kit/.claude/skills/api-caching.md +103 -0
- package/kit/.claude/skills/api-documentation.md +50 -0
- package/kit/.claude/skills/api-graphql.md +234 -0
- package/kit/.claude/skills/api-openapi.md +116 -0
- package/kit/.claude/skills/api-pagination-filtering.md +239 -0
- package/kit/.claude/skills/api-rate-limiting.md +179 -0
- package/kit/.claude/skills/api-rest-advanced.md +50 -0
- package/kit/.claude/skills/api-rest.md +217 -0
- package/kit/.claude/skills/api-trpc.md +173 -0
- package/kit/.claude/skills/api-versioning.md +70 -0
- package/kit/.claude/skills/api-webhooks.md +226 -0
- package/kit/.claude/skills/arch-clean-code.md +226 -0
- package/kit/.claude/skills/arch-clean.md +91 -0
- package/kit/.claude/skills/arch-cqrs.md +229 -0
- package/kit/.claude/skills/arch-ddd.md +85 -0
- package/kit/.claude/skills/arch-event-driven.md +189 -0
- package/kit/.claude/skills/arch-microservices.md +80 -0
- package/kit/.claude/skills/arch-monorepo.md +87 -0
- package/kit/.claude/skills/arch-multi-tenant.md +81 -0
- package/kit/.claude/skills/arch-serverless.md +86 -0
- package/kit/.claude/skills/auth-clerk.md +97 -0
- package/kit/.claude/skills/auth-jwt.md +143 -0
- package/kit/.claude/skills/auth-lucia.md +93 -0
- package/kit/.claude/skills/auth-nextauth.md +446 -0
- package/kit/.claude/skills/auth-oauth.md +208 -0
- package/kit/.claude/skills/auth-oauth2.md +110 -0
- package/kit/.claude/skills/auth-passkeys.md +109 -0
- package/kit/.claude/skills/auth-session.md +88 -0
- package/kit/.claude/skills/backend-dotnet.md +414 -0
- package/kit/.claude/skills/backend-express.md +129 -0
- package/kit/.claude/skills/backend-fastify.md +104 -0
- package/kit/.claude/skills/backend-go.md +205 -0
- package/kit/.claude/skills/backend-graphql.md +149 -0
- package/kit/.claude/skills/backend-grpc.md +382 -0
- package/kit/.claude/skills/backend-hono.md +95 -0
- package/kit/.claude/skills/backend-java-spring.md +198 -0
- package/kit/.claude/skills/backend-nodejs-express.md +165 -0
- package/kit/.claude/skills/backend-nodejs.md +143 -0
- package/kit/.claude/skills/backend-php-laravel.md +156 -0
- package/kit/.claude/skills/backend-python-django.md +200 -0
- package/kit/.claude/skills/backend-python-fastapi.md +169 -0
- package/kit/.claude/skills/backend-ruby-rails.md +190 -0
- package/kit/.claude/skills/backend-rust.md +182 -0
- package/kit/.claude/skills/backend-websockets.md +392 -0
- package/kit/.claude/skills/cache-redis.md +195 -0
- package/kit/.claude/skills/caching-strategies.md +100 -0
- package/kit/.claude/skills/cloud-aws.md +165 -0
- package/kit/.claude/skills/cloud-azure.md +187 -0
- package/kit/.claude/skills/cloud-cloudflare.md +74 -0
- package/kit/.claude/skills/cloud-fly.md +94 -0
- package/kit/.claude/skills/cloud-gcp.md +160 -0
- package/kit/.claude/skills/cloud-railway.md +92 -0
- package/kit/.claude/skills/cloud-render.md +70 -0
- package/kit/.claude/skills/cloud-serverless.md +68 -0
- package/kit/.claude/skills/cloud-vercel.md +76 -0
- package/kit/.claude/skills/component-patterns.md +50 -0
- package/kit/.claude/skills/content-management.md +197 -0
- package/kit/.claude/skills/cors-security.md +50 -0
- package/kit/.claude/skills/data-csv-excel.md +210 -0
- package/kit/.claude/skills/database-optimization.md +196 -0
- package/kit/.claude/skills/databases-transactions.md +68 -0
- package/kit/.claude/skills/db-cassandra.md +89 -0
- package/kit/.claude/skills/db-drizzle.md +363 -0
- package/kit/.claude/skills/db-dynamodb.md +83 -0
- package/kit/.claude/skills/db-elasticsearch.md +105 -0
- package/kit/.claude/skills/db-firebase-firestore.md +191 -0
- package/kit/.claude/skills/db-mongodb.md +198 -0
- package/kit/.claude/skills/db-mysql.md +50 -0
- package/kit/.claude/skills/db-neon.md +72 -0
- package/kit/.claude/skills/db-planetscale.md +76 -0
- package/kit/.claude/skills/db-postgresql.md +50 -0
- package/kit/.claude/skills/db-prisma.md +414 -0
- package/kit/.claude/skills/db-redis.md +50 -0
- package/kit/.claude/skills/db-sqlite.md +149 -0
- package/kit/.claude/skills/db-supabase.md +445 -0
- package/kit/.claude/skills/devops-ci-cd.md +271 -0
- package/kit/.claude/skills/devops-database-backup.md +77 -0
- package/kit/.claude/skills/devops-docker.md +93 -0
- package/kit/.claude/skills/devops-github-actions.md +82 -0
- package/kit/.claude/skills/devops-health-checks.md +50 -0
- package/kit/.claude/skills/devops-kubernetes.md +109 -0
- package/kit/.claude/skills/devops-logging.md +163 -0
- package/kit/.claude/skills/devops-monitoring.md +203 -0
- package/kit/.claude/skills/devops-pulumi.md +94 -0
- package/kit/.claude/skills/devops-secrets.md +166 -0
- package/kit/.claude/skills/devops-terraform.md +226 -0
- package/kit/.claude/skills/error-boundaries.md +84 -0
- package/kit/.claude/skills/file-storage.md +50 -0
- package/kit/.claude/skills/frontend-angular.md +104 -0
- package/kit/.claude/skills/frontend-astro.md +94 -0
- package/kit/.claude/skills/frontend-bundle-analysis.md +147 -0
- package/kit/.claude/skills/frontend-forms.md +134 -0
- package/kit/.claude/skills/frontend-htmx.md +86 -0
- package/kit/.claude/skills/frontend-nextjs.md +188 -0
- package/kit/.claude/skills/frontend-pwa.md +105 -0
- package/kit/.claude/skills/frontend-react-hooks.md +238 -0
- package/kit/.claude/skills/frontend-react.md +129 -0
- package/kit/.claude/skills/frontend-remix-advanced.md +106 -0
- package/kit/.claude/skills/frontend-remix.md +101 -0
- package/kit/.claude/skills/frontend-solid.md +99 -0
- package/kit/.claude/skills/frontend-state-management.md +134 -0
- package/kit/.claude/skills/frontend-state.md +106 -0
- package/kit/.claude/skills/frontend-svelte.md +121 -0
- package/kit/.claude/skills/frontend-testing.md +100 -0
- package/kit/.claude/skills/frontend-vite.md +94 -0
- package/kit/.claude/skills/frontend-vue.md +133 -0
- package/kit/.claude/skills/frontend-webpack.md +93 -0
- package/kit/.claude/skills/functional-programming.md +50 -0
- package/kit/.claude/skills/hooks-custom.md +50 -0
- package/kit/.claude/skills/http-server.md +50 -0
- package/kit/.claude/skills/i18n-general.md +89 -0
- package/kit/.claude/skills/i18n-localization.md +191 -0
- package/kit/.claude/skills/i18n-nextjs.md +127 -0
- package/kit/.claude/skills/infrastructure-docker-compose.md +77 -0
- package/kit/.claude/skills/infrastructure-serverless.md +177 -0
- package/kit/.claude/skills/jwt-tokens.md +50 -0
- package/kit/.claude/skills/logging-winston.md +106 -0
- package/kit/.claude/skills/messaging-kafka.md +102 -0
- package/kit/.claude/skills/messaging-rabbitmq.md +50 -0
- package/kit/.claude/skills/mobile-capacitor.md +109 -0
- package/kit/.claude/skills/mobile-expo.md +101 -0
- package/kit/.claude/skills/mobile-flutter.md +259 -0
- package/kit/.claude/skills/mobile-react-native.md +238 -0
- package/kit/.claude/skills/monitoring-apm.md +50 -0
- package/kit/.claude/skills/monitoring-error-tracking.md +217 -0
- package/kit/.claude/skills/nodejs-streams.md +168 -0
- package/kit/.claude/skills/oauth-integration.md +50 -0
- package/kit/.claude/skills/patterns-dependency-injection.md +218 -0
- package/kit/.claude/skills/patterns-factory-singleton.md +209 -0
- package/kit/.claude/skills/patterns-observer-pubsub.md +210 -0
- package/kit/.claude/skills/payment-lemonsqueezy.md +101 -0
- package/kit/.claude/skills/payment-square.md +178 -0
- package/kit/.claude/skills/payment-stripe.md +206 -0
- package/kit/.claude/skills/perf-bundle.md +100 -0
- package/kit/.claude/skills/perf-web-vitals.md +102 -0
- package/kit/.claude/skills/performance-database-connection-pooling.md +67 -0
- package/kit/.claude/skills/performance-metrics.md +73 -0
- package/kit/.claude/skills/performance-optimization.md +208 -0
- package/kit/.claude/skills/performance-web-vitals.md +169 -0
- package/kit/.claude/skills/rate-limiting.md +77 -0
- package/kit/.claude/skills/reactive-programming.md +50 -0
- package/kit/.claude/skills/realtime-database.md +50 -0
- package/kit/.claude/skills/realtime-subscriptions.md +218 -0
- package/kit/.claude/skills/saas-ab-testing.md +90 -0
- package/kit/.claude/skills/saas-analytics.md +113 -0
- package/kit/.claude/skills/saas-billing.md +106 -0
- package/kit/.claude/skills/saas-email.md +88 -0
- package/kit/.claude/skills/saas-feature-flags.md +83 -0
- package/kit/.claude/skills/saas-onboarding.md +96 -0
- package/kit/.claude/skills/saas-user-onboarding.md +207 -0
- package/kit/.claude/skills/security-encryption.md +216 -0
- package/kit/.claude/skills/security-owasp.md +212 -0
- package/kit/.claude/skills/security-secrets-rotation.md +64 -0
- package/kit/.claude/skills/seo-content.md +94 -0
- package/kit/.claude/skills/seo-technical.md +101 -0
- package/kit/.claude/skills/serverless-framework.md +151 -0
- package/kit/.claude/skills/sharding-scaling.md +50 -0
- package/kit/.claude/skills/styling-css-modules.md +219 -0
- package/kit/.claude/skills/styling-styled-components.md +206 -0
- package/kit/.claude/skills/styling-tailwind.md +206 -0
- package/kit/.claude/skills/test-e2e.md +86 -0
- package/kit/.claude/skills/test-integration.md +216 -0
- package/kit/.claude/skills/test-performance.md +162 -0
- package/kit/.claude/skills/test-tdd.md +170 -0
- package/kit/.claude/skills/test-unit.md +301 -0
- package/kit/.claude/skills/testing-accessibility.md +117 -0
- package/kit/.claude/skills/testing-contract.md +75 -0
- package/kit/.claude/skills/testing-e2e-advanced.md +50 -0
- package/kit/.claude/skills/testing-load-stress.md +79 -0
- package/kit/.claude/skills/testing-mutation.md +92 -0
- package/kit/.claude/skills/testing-snapshot.md +50 -0
- package/kit/.claude/skills/testing-vitest.md +172 -0
- package/kit/.claude/skills/tooling-biome.md +91 -0
- package/kit/.claude/skills/tooling-build-tools.md +166 -0
- package/kit/.claude/skills/tooling-bun.md +94 -0
- package/kit/.claude/skills/tooling-eslint.md +103 -0
- package/kit/.claude/skills/tooling-git.md +79 -0
- package/kit/.claude/skills/tooling-monorepo.md +162 -0
- package/kit/.claude/skills/tooling-testing-frameworks.md +207 -0
- package/kit/.claude/skills/tooling-typescript.md +156 -0
- package/kit/.claude/skills/ui-a11y.md +106 -0
- package/kit/.claude/skills/ui-framer.md +106 -0
- package/kit/.claude/skills/ui-gsap.md +102 -0
- package/kit/.claude/skills/ui-radix.md +82 -0
- package/kit/.claude/skills/ui-shadcn.md +463 -0
- package/kit/.claude/skills/ui-tailwind.md +98 -0
- package/kit/.claude/skills/ui-threejs.md +110 -0
- package/kit/.claude/skills/ui-tokens.md +97 -0
- package/kit/.claude/skills/utilities-date-time.md +170 -0
- package/kit/.claude/skills/validation-schemas.md +110 -0
- package/kit/.claude/skills/version-control-git.md +144 -0
- package/kit/.claude/skills/web-accessibility-wcag.md +102 -0
- package/kit/.claude/skills/web-astro.md +197 -0
- package/kit/.claude/skills/web-html-css.md +224 -0
- package/kit/.claude/skills/web-htmx.md +99 -0
- package/kit/.claude/skills/web-nextjs-advanced.md +202 -0
- package/kit/.claude/skills/web-remix.md +194 -0
- package/kit/.claude/skills/web-seo.md +99 -0
- package/kit/.claude/skills/web-svelte.md +234 -0
- package/kit/.claude/skills/websocket-server.md +50 -0
- package/kit/.claude/skills/writing-marketing.md +89 -0
- package/kit/.claude/skills/writing-technical.md +119 -0
- package/kit/CLAUDE.md +206 -0
- package/kit/README.md +150 -0
- package/kit/SKILLS_INDEX.md +188 -0
- package/kit/docs/README.md +3 -0
- package/kit/journals/README.md +3 -0
- package/kit/plans/README.md +3 -0
- package/package.json +3 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# OAuth 2.0
|
|
2
|
+
|
|
3
|
+
Industry-standard authorization framework for delegated access.
|
|
4
|
+
|
|
5
|
+
## OAuth 2.0 Flows
|
|
6
|
+
|
|
7
|
+
### Authorization Code Flow (Most Secure)
|
|
8
|
+
```
|
|
9
|
+
1. User visits app, clicks "Login with Google"
|
|
10
|
+
2. Redirects to Google login page
|
|
11
|
+
3. User authenticates with Google
|
|
12
|
+
4. Google redirects back to app with auth code
|
|
13
|
+
5. App exchanges code for access token (backend)
|
|
14
|
+
6. App can now access user data
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Implementation (Node.js + Google)
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
const passport = require('passport');
|
|
21
|
+
const GoogleStrategy = require('passport-google-oauth20').Strategy;
|
|
22
|
+
|
|
23
|
+
passport.use(new GoogleStrategy({
|
|
24
|
+
clientID: process.env.GOOGLE_CLIENT_ID,
|
|
25
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
26
|
+
callbackURL: 'http://localhost:3000/auth/google/callback'
|
|
27
|
+
},
|
|
28
|
+
function(accessToken, refreshToken, profile, done) {
|
|
29
|
+
// Find or create user
|
|
30
|
+
User.findOrCreate({ googleId: profile.id }, (err, user) => {
|
|
31
|
+
return done(err, user);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
));
|
|
35
|
+
|
|
36
|
+
// Routes
|
|
37
|
+
app.get('/auth/google',
|
|
38
|
+
passport.authenticate('google', { scope: ['profile', 'email'] }));
|
|
39
|
+
|
|
40
|
+
app.get('/auth/google/callback',
|
|
41
|
+
passport.authenticate('google', { failureRedirect: '/login' }),
|
|
42
|
+
(req, res) => {
|
|
43
|
+
res.redirect('/dashboard');
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## PKCE (For Native/SPA Apps)
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
// Generate code challenge
|
|
51
|
+
const crypto = require('crypto');
|
|
52
|
+
const codeVerifier = crypto.randomBytes(32).toString('hex');
|
|
53
|
+
const codeChallenge = crypto
|
|
54
|
+
.createHash('sha256')
|
|
55
|
+
.update(codeVerifier)
|
|
56
|
+
.digest('base64url');
|
|
57
|
+
|
|
58
|
+
// Exchange with verifier
|
|
59
|
+
const tokenResponse = await fetch('https://oauth.example.com/token', {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
body: {
|
|
62
|
+
grant_type: 'authorization_code',
|
|
63
|
+
code: authCode,
|
|
64
|
+
code_verifier: codeVerifier,
|
|
65
|
+
client_id: CLIENT_ID,
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Token Management
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
// Store tokens securely
|
|
74
|
+
localStorage.setItem('access_token', accessToken);
|
|
75
|
+
|
|
76
|
+
// Refresh token when expired
|
|
77
|
+
async function getValidToken() {
|
|
78
|
+
if (isTokenExpired(accessToken)) {
|
|
79
|
+
const response = await fetch('/api/refresh', {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
body: { refreshToken }
|
|
82
|
+
});
|
|
83
|
+
const { accessToken: newToken } = await response.json();
|
|
84
|
+
localStorage.setItem('access_token', newToken);
|
|
85
|
+
return newToken;
|
|
86
|
+
}
|
|
87
|
+
return accessToken;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Use in API requests
|
|
91
|
+
const token = await getValidToken();
|
|
92
|
+
const response = await fetch('/api/users', {
|
|
93
|
+
headers: { 'Authorization': `Bearer ${token}` }
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Best Practices
|
|
98
|
+
|
|
99
|
+
1. **Never store credentials in frontend**
|
|
100
|
+
2. **Use PKCE for public clients**
|
|
101
|
+
3. **Refresh tokens before expiry**
|
|
102
|
+
4. **Validate OAuth provider certificates**
|
|
103
|
+
5. **Implement proper error handling**
|
|
104
|
+
6. **Scope requests to minimum needed**
|
|
105
|
+
|
|
106
|
+
## Resources
|
|
107
|
+
|
|
108
|
+
- [OAuth 2.0 Specification](https://tools.ietf.org/html/rfc6749)
|
|
109
|
+
- [PKCE](https://tools.ietf.org/html/rfc7636)
|
|
110
|
+
- [OpenID Connect](https://openid.net/connect/)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# WebAuthn Passkeys
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Passkeys use device biometrics (Touch ID, Face ID) for phishing-resistant, passwordless authentication.
|
|
5
|
+
|
|
6
|
+
## Setup with SimpleWebAuthn
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @simplewebauthn/server @simplewebauthn/browser
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Registration Flow
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
// app/api/auth/passkey/register/generate/route.ts
|
|
16
|
+
import { generateRegistrationOptions } from '@simplewebauthn/server';
|
|
17
|
+
|
|
18
|
+
export async function POST(req: Request) {
|
|
19
|
+
const { userId } = await auth(); // get current user
|
|
20
|
+
const user = await prisma.user.findUnique({ where: { id: userId } });
|
|
21
|
+
const existingCredentials = await prisma.passkey.findMany({ where: { userId } });
|
|
22
|
+
|
|
23
|
+
const options = await generateRegistrationOptions({
|
|
24
|
+
rpName: 'My App',
|
|
25
|
+
rpID: process.env.RP_ID!, // 'yourdomain.com'
|
|
26
|
+
userID: new TextEncoder().encode(userId),
|
|
27
|
+
userName: user!.email,
|
|
28
|
+
excludeCredentials: existingCredentials.map(c => ({
|
|
29
|
+
id: c.credentialId, type: 'public-key'
|
|
30
|
+
})),
|
|
31
|
+
authenticatorSelection: {
|
|
32
|
+
residentKey: 'preferred',
|
|
33
|
+
userVerification: 'preferred',
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Store challenge temporarily
|
|
38
|
+
await redis.setex(`challenge:${userId}`, 300, options.challenge);
|
|
39
|
+
return Response.json(options);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// app/api/auth/passkey/register/verify/route.ts
|
|
43
|
+
import { verifyRegistrationResponse } from '@simplewebauthn/server';
|
|
44
|
+
|
|
45
|
+
export async function POST(req: Request) {
|
|
46
|
+
const { userId } = await auth();
|
|
47
|
+
const body = await req.json();
|
|
48
|
+
const challenge = await redis.get(`challenge:${userId}`);
|
|
49
|
+
|
|
50
|
+
const { verified, registrationInfo } = await verifyRegistrationResponse({
|
|
51
|
+
response: body,
|
|
52
|
+
expectedChallenge: challenge!,
|
|
53
|
+
expectedOrigin: process.env.ORIGIN!,
|
|
54
|
+
expectedRPID: process.env.RP_ID!,
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (verified && registrationInfo) {
|
|
58
|
+
await prisma.passkey.create({
|
|
59
|
+
data: {
|
|
60
|
+
userId,
|
|
61
|
+
credentialId: registrationInfo.credential.id,
|
|
62
|
+
publicKey: Buffer.from(registrationInfo.credential.publicKey),
|
|
63
|
+
counter: registrationInfo.credential.counter,
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return Response.json({ verified });
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Authentication Flow
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Browser: start authentication
|
|
76
|
+
import { startAuthentication } from '@simplewebauthn/browser';
|
|
77
|
+
|
|
78
|
+
const options = await fetch('/api/auth/passkey/authenticate/generate', { method: 'POST' }).then(r => r.json());
|
|
79
|
+
const response = await startAuthentication(options);
|
|
80
|
+
await fetch('/api/auth/passkey/authenticate/verify', {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
body: JSON.stringify(response),
|
|
83
|
+
headers: { 'Content-Type': 'application/json' }
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// Server: verify authentication
|
|
89
|
+
import { verifyAuthenticationResponse } from '@simplewebauthn/server';
|
|
90
|
+
|
|
91
|
+
const passkey = await prisma.passkey.findFirst({ where: { credentialId: body.id } });
|
|
92
|
+
const { verified } = await verifyAuthenticationResponse({
|
|
93
|
+
response: body,
|
|
94
|
+
expectedChallenge: challenge!,
|
|
95
|
+
expectedOrigin: process.env.ORIGIN!,
|
|
96
|
+
expectedRPID: process.env.RP_ID!,
|
|
97
|
+
credential: { id: passkey!.credentialId, publicKey: passkey!.publicKey, counter: passkey!.counter }
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Best Practices
|
|
102
|
+
- Set `RP_ID` to your domain without protocol or path
|
|
103
|
+
- Store challenges in Redis with short TTL (5 min)
|
|
104
|
+
- Update `counter` after each authentication to detect cloned credentials
|
|
105
|
+
- Offer passkeys as addition to, not replacement for, existing auth
|
|
106
|
+
|
|
107
|
+
## Resources
|
|
108
|
+
- [SimpleWebAuthn docs](https://simplewebauthn.dev)
|
|
109
|
+
- [WebAuthn Guide](https://webauthn.guide)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Session Authentication
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Server-side sessions store user state on the server, giving the client only an encrypted session cookie.
|
|
5
|
+
|
|
6
|
+
## iron-session (Next.js)
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install iron-session
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
// lib/session.ts
|
|
14
|
+
import { SessionOptions } from 'iron-session';
|
|
15
|
+
|
|
16
|
+
export interface SessionData { userId?: string; role?: string; }
|
|
17
|
+
|
|
18
|
+
export const sessionOptions: SessionOptions = {
|
|
19
|
+
password: process.env.SESSION_SECRET!,
|
|
20
|
+
cookieName: 'app-session',
|
|
21
|
+
cookieOptions: {
|
|
22
|
+
secure: process.env.NODE_ENV === 'production',
|
|
23
|
+
httpOnly: true,
|
|
24
|
+
sameSite: 'lax',
|
|
25
|
+
maxAge: 60 * 60 * 24 * 7,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
// app/api/auth/login/route.ts
|
|
32
|
+
import { getIronSession } from 'iron-session';
|
|
33
|
+
import { cookies } from 'next/headers';
|
|
34
|
+
import bcrypt from 'bcryptjs';
|
|
35
|
+
|
|
36
|
+
export async function POST(req: Request) {
|
|
37
|
+
const { email, password } = await req.json();
|
|
38
|
+
const user = await prisma.user.findUnique({ where: { email } });
|
|
39
|
+
if (!user || !(await bcrypt.compare(password, user.passwordHash))) {
|
|
40
|
+
return Response.json({ error: 'Invalid credentials' }, { status: 401 });
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const session = await getIronSession<SessionData>(await cookies(), sessionOptions);
|
|
44
|
+
session.userId = user.id;
|
|
45
|
+
session.role = user.role;
|
|
46
|
+
await session.save();
|
|
47
|
+
return Response.json({ success: true });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// app/api/auth/logout/route.ts
|
|
51
|
+
export async function POST() {
|
|
52
|
+
const session = await getIronSession<SessionData>(await cookies(), sessionOptions);
|
|
53
|
+
session.destroy();
|
|
54
|
+
return Response.json({ success: true });
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Express Sessions with Redis
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm install express-session connect-redis redis
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import session from 'express-session';
|
|
66
|
+
import RedisStore from 'connect-redis';
|
|
67
|
+
import { createClient } from 'redis';
|
|
68
|
+
|
|
69
|
+
const redisClient = createClient({ url: process.env.REDIS_URL });
|
|
70
|
+
await redisClient.connect();
|
|
71
|
+
|
|
72
|
+
app.use(session({
|
|
73
|
+
store: new RedisStore({ client: redisClient }),
|
|
74
|
+
secret: process.env.SESSION_SECRET!,
|
|
75
|
+
resave: false,
|
|
76
|
+
saveUninitialized: false,
|
|
77
|
+
cookie: { secure: true, httpOnly: true, maxAge: 7 * 24 * 60 * 60 * 1000, sameSite: 'lax' }
|
|
78
|
+
}));
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Best Practices
|
|
82
|
+
- Use `httpOnly: true` and `secure: true` in production
|
|
83
|
+
- Use Redis — never memory store in production
|
|
84
|
+
- Regenerate session ID on login to prevent fixation: `req.session.regenerate(cb)`
|
|
85
|
+
- Set `sameSite: 'lax'` to prevent CSRF
|
|
86
|
+
|
|
87
|
+
## Resources
|
|
88
|
+
- [iron-session](https://github.com/vvo/iron-session)
|