kodelyth-ecc 1.2.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/.agent/rules/README.md +108 -0
- package/.agent/rules/agents.md +94 -0
- package/.agent/rules/code-review.md +124 -0
- package/.agent/rules/coding-style.md +122 -0
- package/.agent/rules/design-quality.md +63 -0
- package/.agent/rules/development-workflow.md +44 -0
- package/.agent/rules/git-mastery.md +366 -0
- package/.agent/rules/git-workflow.md +24 -0
- package/.agent/rules/hooks.md +25 -0
- package/.agent/rules/kodelyth-always-on.md +63 -0
- package/.agent/rules/kodelyth-quickstart.md +207 -0
- package/.agent/rules/observability.md +390 -0
- package/.agent/rules/patterns.md +50 -0
- package/.agent/rules/performance.md +178 -0
- package/.agent/rules/security.md +58 -0
- package/.agent/rules/smart-debug.md +241 -0
- package/.agent/rules/soul.md +32 -0
- package/.agent/rules/testing.md +46 -0
- package/.agent/skills/api-guardian.md +279 -0
- package/.agent/skills/architect.md +211 -0
- package/.agent/skills/build-error-resolver.md +114 -0
- package/.agent/skills/chief-of-staff.md +151 -0
- package/.agent/skills/code-architect.md +71 -0
- package/.agent/skills/code-explorer.md +69 -0
- package/.agent/skills/code-reviewer.md +237 -0
- package/.agent/skills/code-simplifier.md +47 -0
- package/.agent/skills/comment-analyzer.md +45 -0
- package/.agent/skills/conversation-analyzer.md +52 -0
- package/.agent/skills/cpp-build-resolver.md +90 -0
- package/.agent/skills/cpp-reviewer.md +72 -0
- package/.agent/skills/csharp-reviewer.md +101 -0
- package/.agent/skills/dart-build-resolver.md +201 -0
- package/.agent/skills/database-reviewer.md +91 -0
- package/.agent/skills/debug-detective.md +409 -0
- package/.agent/skills/doc-updater.md +107 -0
- package/.agent/skills/docs-lookup.md +68 -0
- package/.agent/skills/e2e-runner.md +107 -0
- package/.agent/skills/flutter-reviewer.md +243 -0
- package/.agent/skills/gan-evaluator.md +209 -0
- package/.agent/skills/gan-generator.md +131 -0
- package/.agent/skills/gan-planner.md +99 -0
- package/.agent/skills/go-build-resolver.md +94 -0
- package/.agent/skills/go-reviewer.md +76 -0
- package/.agent/skills/harness-optimizer.md +35 -0
- package/.agent/skills/healthcare-reviewer.md +83 -0
- package/.agent/skills/java-build-resolver.md +153 -0
- package/.agent/skills/java-reviewer.md +92 -0
- package/.agent/skills/kodelyth-advisor.md +172 -0
- package/.agent/skills/kotlin-build-resolver.md +118 -0
- package/.agent/skills/kotlin-reviewer.md +159 -0
- package/.agent/skills/loop-operator.md +36 -0
- package/.agent/skills/migration-guide.md +368 -0
- package/.agent/skills/opensource-forker.md +198 -0
- package/.agent/skills/opensource-packager.md +249 -0
- package/.agent/skills/opensource-sanitizer.md +188 -0
- package/.agent/skills/pair-programmer.md +260 -0
- package/.agent/skills/performance-optimizer.md +446 -0
- package/.agent/skills/planner.md +212 -0
- package/.agent/skills/pr-test-analyzer.md +45 -0
- package/.agent/skills/python-reviewer.md +98 -0
- package/.agent/skills/pytorch-build-resolver.md +120 -0
- package/.agent/skills/refactor-cleaner.md +85 -0
- package/.agent/skills/rust-build-resolver.md +148 -0
- package/.agent/skills/rust-reviewer.md +94 -0
- package/.agent/skills/security-reviewer.md +108 -0
- package/.agent/skills/seo-specialist.md +62 -0
- package/.agent/skills/silent-failure-hunter.md +50 -0
- package/.agent/skills/tdd-guide.md +91 -0
- package/.agent/skills/type-design-analyzer.md +41 -0
- package/.agent/skills/typescript-reviewer.md +112 -0
- package/.agent/skills/ux-reviewer.md +483 -0
- package/.agent/workflows/agent-sort.md +23 -0
- package/.agent/workflows/aside.md +164 -0
- package/.agent/workflows/build-fix.md +62 -0
- package/.agent/workflows/checkpoint.md +74 -0
- package/.agent/workflows/claw.md +23 -0
- package/.agent/workflows/code-review.md +289 -0
- package/.agent/workflows/context-budget.md +23 -0
- package/.agent/workflows/cpp-build.md +173 -0
- package/.agent/workflows/cpp-review.md +132 -0
- package/.agent/workflows/cpp-test.md +251 -0
- package/.agent/workflows/devfleet.md +23 -0
- package/.agent/workflows/docs.md +23 -0
- package/.agent/workflows/e2e.md +268 -0
- package/.agent/workflows/eval.md +23 -0
- package/.agent/workflows/evolve.md +178 -0
- package/.agent/workflows/feature-dev.md +49 -0
- package/.agent/workflows/flutter-build.md +164 -0
- package/.agent/workflows/flutter-review.md +116 -0
- package/.agent/workflows/flutter-test.md +144 -0
- package/.agent/workflows/gan-build.md +99 -0
- package/.agent/workflows/gan-design.md +35 -0
- package/.agent/workflows/go-build.md +183 -0
- package/.agent/workflows/go-review.md +148 -0
- package/.agent/workflows/go-test.md +268 -0
- package/.agent/workflows/gradle-build.md +70 -0
- package/.agent/workflows/harness-audit.md +73 -0
- package/.agent/workflows/hookify-configure.md +14 -0
- package/.agent/workflows/hookify-help.md +46 -0
- package/.agent/workflows/hookify-list.md +21 -0
- package/.agent/workflows/hookify.md +50 -0
- package/.agent/workflows/instinct-export.md +66 -0
- package/.agent/workflows/instinct-import.md +114 -0
- package/.agent/workflows/instinct-status.md +59 -0
- package/.agent/workflows/jira.md +106 -0
- package/.agent/workflows/kotlin-build.md +174 -0
- package/.agent/workflows/kotlin-review.md +140 -0
- package/.agent/workflows/kotlin-test.md +312 -0
- package/.agent/workflows/learn-eval.md +116 -0
- package/.agent/workflows/learn.md +70 -0
- package/.agent/workflows/loop-start.md +32 -0
- package/.agent/workflows/loop-status.md +24 -0
- package/.agent/workflows/model-route.md +26 -0
- package/.agent/workflows/multi-backend.md +158 -0
- package/.agent/workflows/multi-execute.md +315 -0
- package/.agent/workflows/multi-frontend.md +158 -0
- package/.agent/workflows/multi-plan.md +268 -0
- package/.agent/workflows/multi-workflow.md +191 -0
- package/.agent/workflows/orchestrate.md +135 -0
- package/.agent/workflows/plan.md +117 -0
- package/.agent/workflows/pm2.md +272 -0
- package/.agent/workflows/projects.md +39 -0
- package/.agent/workflows/promote.md +41 -0
- package/.agent/workflows/prompt-optimize.md +23 -0
- package/.agent/workflows/prp-commit.md +112 -0
- package/.agent/workflows/prp-implement.md +385 -0
- package/.agent/workflows/prp-plan.md +502 -0
- package/.agent/workflows/prp-pr.md +184 -0
- package/.agent/workflows/prp-prd.md +447 -0
- package/.agent/workflows/prune.md +31 -0
- package/.agent/workflows/python-review.md +297 -0
- package/.agent/workflows/quality-gate.md +29 -0
- package/.agent/workflows/refactor-clean.md +80 -0
- package/.agent/workflows/resume-session.md +156 -0
- package/.agent/workflows/review-pr.md +37 -0
- package/.agent/workflows/rules-distill.md +20 -0
- package/.agent/workflows/rust-build.md +187 -0
- package/.agent/workflows/rust-review.md +142 -0
- package/.agent/workflows/rust-test.md +308 -0
- package/.agent/workflows/santa-loop.md +175 -0
- package/.agent/workflows/save-session.md +275 -0
- package/.agent/workflows/sessions.md +333 -0
- package/.agent/workflows/setup-pm.md +80 -0
- package/.agent/workflows/skill-create.md +174 -0
- package/.agent/workflows/skill-health.md +54 -0
- package/.agent/workflows/tdd.md +231 -0
- package/.agent/workflows/test-coverage.md +69 -0
- package/.agent/workflows/update-codemaps.md +72 -0
- package/.agent/workflows/update-docs.md +84 -0
- package/.agent/workflows/verify.md +23 -0
- package/.github/workflows/ci.yml +46 -0
- package/.github/workflows/publish.yml +41 -0
- package/AGENTS.md +209 -0
- package/CHANGELOG.md +236 -0
- package/CLAUDE.md +90 -0
- package/CONTRIBUTING.md +255 -0
- package/KODELYTH.md +74 -0
- package/LICENSE +21 -0
- package/README.md +414 -0
- package/SECURITY.md +77 -0
- package/SOUL.md +32 -0
- package/VERSION +1 -0
- package/agents/api-guardian.md +279 -0
- package/agents/architect.md +211 -0
- package/agents/build-error-resolver.md +114 -0
- package/agents/chief-of-staff.md +151 -0
- package/agents/code-architect.md +71 -0
- package/agents/code-explorer.md +69 -0
- package/agents/code-reviewer.md +237 -0
- package/agents/code-simplifier.md +47 -0
- package/agents/comment-analyzer.md +45 -0
- package/agents/conversation-analyzer.md +52 -0
- package/agents/cpp-build-resolver.md +90 -0
- package/agents/cpp-reviewer.md +72 -0
- package/agents/csharp-reviewer.md +101 -0
- package/agents/dart-build-resolver.md +201 -0
- package/agents/database-reviewer.md +91 -0
- package/agents/debug-detective.md +409 -0
- package/agents/doc-updater.md +107 -0
- package/agents/docs-lookup.md +68 -0
- package/agents/e2e-runner.md +107 -0
- package/agents/flutter-reviewer.md +243 -0
- package/agents/gan-evaluator.md +209 -0
- package/agents/gan-generator.md +131 -0
- package/agents/gan-planner.md +99 -0
- package/agents/go-build-resolver.md +94 -0
- package/agents/go-reviewer.md +76 -0
- package/agents/harness-optimizer.md +35 -0
- package/agents/healthcare-reviewer.md +83 -0
- package/agents/java-build-resolver.md +153 -0
- package/agents/java-reviewer.md +92 -0
- package/agents/kodelyth-advisor.md +172 -0
- package/agents/kotlin-build-resolver.md +118 -0
- package/agents/kotlin-reviewer.md +159 -0
- package/agents/loop-operator.md +36 -0
- package/agents/migration-guide.md +368 -0
- package/agents/opensource-forker.md +198 -0
- package/agents/opensource-packager.md +249 -0
- package/agents/opensource-sanitizer.md +188 -0
- package/agents/pair-programmer.md +260 -0
- package/agents/performance-optimizer.md +446 -0
- package/agents/planner.md +212 -0
- package/agents/pr-test-analyzer.md +45 -0
- package/agents/python-reviewer.md +98 -0
- package/agents/pytorch-build-resolver.md +120 -0
- package/agents/refactor-cleaner.md +85 -0
- package/agents/rust-build-resolver.md +148 -0
- package/agents/rust-reviewer.md +94 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/seo-specialist.md +62 -0
- package/agents/silent-failure-hunter.md +50 -0
- package/agents/tdd-guide.md +91 -0
- package/agents/type-design-analyzer.md +41 -0
- package/agents/typescript-reviewer.md +112 -0
- package/agents/ux-reviewer.md +483 -0
- package/bin/kodelyth-ecc.js +87 -0
- package/commands/agent-sort.md +23 -0
- package/commands/aside.md +164 -0
- package/commands/build-fix.md +62 -0
- package/commands/checkpoint.md +74 -0
- package/commands/claw.md +23 -0
- package/commands/code-review.md +289 -0
- package/commands/context-budget.md +23 -0
- package/commands/cpp-build.md +173 -0
- package/commands/cpp-review.md +132 -0
- package/commands/cpp-test.md +251 -0
- package/commands/devfleet.md +23 -0
- package/commands/docs.md +23 -0
- package/commands/e2e.md +268 -0
- package/commands/eval.md +23 -0
- package/commands/evolve.md +178 -0
- package/commands/feature-dev.md +49 -0
- package/commands/flutter-build.md +164 -0
- package/commands/flutter-review.md +116 -0
- package/commands/flutter-test.md +144 -0
- package/commands/gan-build.md +99 -0
- package/commands/gan-design.md +35 -0
- package/commands/go-build.md +183 -0
- package/commands/go-review.md +148 -0
- package/commands/go-test.md +268 -0
- package/commands/gradle-build.md +70 -0
- package/commands/harness-audit.md +73 -0
- package/commands/hookify-configure.md +14 -0
- package/commands/hookify-help.md +46 -0
- package/commands/hookify-list.md +21 -0
- package/commands/hookify.md +50 -0
- package/commands/instinct-export.md +66 -0
- package/commands/instinct-import.md +114 -0
- package/commands/instinct-status.md +59 -0
- package/commands/jira.md +106 -0
- package/commands/kotlin-build.md +174 -0
- package/commands/kotlin-review.md +140 -0
- package/commands/kotlin-test.md +312 -0
- package/commands/learn-eval.md +116 -0
- package/commands/learn.md +70 -0
- package/commands/loop-start.md +32 -0
- package/commands/loop-status.md +24 -0
- package/commands/model-route.md +26 -0
- package/commands/multi-backend.md +158 -0
- package/commands/multi-execute.md +315 -0
- package/commands/multi-frontend.md +158 -0
- package/commands/multi-plan.md +268 -0
- package/commands/multi-workflow.md +191 -0
- package/commands/orchestrate.md +135 -0
- package/commands/plan.md +117 -0
- package/commands/pm2.md +272 -0
- package/commands/projects.md +39 -0
- package/commands/promote.md +41 -0
- package/commands/prompt-optimize.md +23 -0
- package/commands/prp-commit.md +112 -0
- package/commands/prp-implement.md +385 -0
- package/commands/prp-plan.md +502 -0
- package/commands/prp-pr.md +184 -0
- package/commands/prp-prd.md +447 -0
- package/commands/prune.md +31 -0
- package/commands/python-review.md +297 -0
- package/commands/quality-gate.md +29 -0
- package/commands/refactor-clean.md +80 -0
- package/commands/resume-session.md +156 -0
- package/commands/review-pr.md +37 -0
- package/commands/rules-distill.md +20 -0
- package/commands/rust-build.md +187 -0
- package/commands/rust-review.md +142 -0
- package/commands/rust-test.md +308 -0
- package/commands/santa-loop.md +175 -0
- package/commands/save-session.md +275 -0
- package/commands/sessions.md +333 -0
- package/commands/setup-pm.md +80 -0
- package/commands/skill-create.md +174 -0
- package/commands/skill-health.md +54 -0
- package/commands/tdd.md +231 -0
- package/commands/test-coverage.md +69 -0
- package/commands/update-codemaps.md +72 -0
- package/commands/update-docs.md +84 -0
- package/commands/verify.md +23 -0
- package/contexts/dev.md +20 -0
- package/contexts/research.md +26 -0
- package/contexts/review.md +22 -0
- package/dashboard/lib/agent-tracker.js +366 -0
- package/dashboard/lib/aggregator.js +118 -0
- package/dashboard/lib/cost-calculator.js +50 -0
- package/dashboard/lib/platform-detector.js +89 -0
- package/dashboard/lib/readers/antigravity-reader.js +113 -0
- package/dashboard/lib/readers/claude-reader.js +135 -0
- package/dashboard/lib/readers/codex-reader.js +192 -0
- package/dashboard/lib/readers/cursor-reader.js +135 -0
- package/dashboard/lib/readers/opencode-reader.js +201 -0
- package/dashboard/lib/readers/windsurf-reader.js +126 -0
- package/dashboard/package.json +24 -0
- package/dashboard/public/index.html +1147 -0
- package/dashboard/server.js +119 -0
- package/hooks/README.md +220 -0
- package/hooks/hooks.json +420 -0
- package/install.ps1 +190 -0
- package/install.sh +583 -0
- package/package.json +33 -0
- package/rules/README.md +111 -0
- package/rules/common/agents.md +50 -0
- package/rules/common/code-review.md +124 -0
- package/rules/common/coding-style.md +122 -0
- package/rules/common/development-workflow.md +44 -0
- package/rules/common/git-workflow.md +24 -0
- package/rules/common/hooks.md +30 -0
- package/rules/common/patterns.md +31 -0
- package/rules/common/performance.md +178 -0
- package/rules/common/security.md +29 -0
- package/rules/common/testing.md +57 -0
- package/rules/cpp/coding-style.md +44 -0
- package/rules/cpp/hooks.md +39 -0
- package/rules/cpp/patterns.md +51 -0
- package/rules/cpp/security.md +51 -0
- package/rules/cpp/testing.md +44 -0
- package/rules/csharp/coding-style.md +72 -0
- package/rules/csharp/hooks.md +25 -0
- package/rules/csharp/patterns.md +50 -0
- package/rules/csharp/security.md +58 -0
- package/rules/csharp/testing.md +46 -0
- package/rules/dart/coding-style.md +159 -0
- package/rules/dart/hooks.md +66 -0
- package/rules/dart/patterns.md +261 -0
- package/rules/dart/security.md +135 -0
- package/rules/dart/testing.md +215 -0
- package/rules/golang/coding-style.md +32 -0
- package/rules/golang/hooks.md +17 -0
- package/rules/golang/patterns.md +45 -0
- package/rules/golang/security.md +34 -0
- package/rules/golang/testing.md +31 -0
- package/rules/java/coding-style.md +114 -0
- package/rules/java/hooks.md +18 -0
- package/rules/java/patterns.md +146 -0
- package/rules/java/security.md +100 -0
- package/rules/java/testing.md +131 -0
- package/rules/kotlin/coding-style.md +86 -0
- package/rules/kotlin/hooks.md +17 -0
- package/rules/kotlin/patterns.md +146 -0
- package/rules/kotlin/security.md +82 -0
- package/rules/kotlin/testing.md +128 -0
- package/rules/perl/coding-style.md +46 -0
- package/rules/perl/hooks.md +22 -0
- package/rules/perl/patterns.md +76 -0
- package/rules/perl/security.md +69 -0
- package/rules/perl/testing.md +54 -0
- package/rules/php/coding-style.md +40 -0
- package/rules/php/hooks.md +24 -0
- package/rules/php/patterns.md +33 -0
- package/rules/php/security.md +37 -0
- package/rules/php/testing.md +39 -0
- package/rules/python/coding-style.md +42 -0
- package/rules/python/hooks.md +19 -0
- package/rules/python/patterns.md +39 -0
- package/rules/python/security.md +30 -0
- package/rules/python/testing.md +38 -0
- package/rules/rust/coding-style.md +151 -0
- package/rules/rust/hooks.md +16 -0
- package/rules/rust/patterns.md +168 -0
- package/rules/rust/security.md +141 -0
- package/rules/rust/testing.md +154 -0
- package/rules/swift/coding-style.md +47 -0
- package/rules/swift/hooks.md +20 -0
- package/rules/swift/patterns.md +66 -0
- package/rules/swift/security.md +33 -0
- package/rules/swift/testing.md +45 -0
- package/rules/typescript/coding-style.md +199 -0
- package/rules/typescript/hooks.md +22 -0
- package/rules/typescript/patterns.md +52 -0
- package/rules/typescript/security.md +28 -0
- package/rules/typescript/testing.md +18 -0
- package/rules/web/coding-style.md +96 -0
- package/rules/web/design-quality.md +63 -0
- package/rules/web/hooks.md +120 -0
- package/rules/web/patterns.md +79 -0
- package/rules/web/performance.md +64 -0
- package/rules/web/security.md +57 -0
- package/rules/web/testing.md +55 -0
- package/rules/zh/README.md +108 -0
- package/rules/zh/agents.md +50 -0
- package/rules/zh/code-review.md +124 -0
- package/rules/zh/coding-style.md +48 -0
- package/rules/zh/development-workflow.md +44 -0
- package/rules/zh/git-workflow.md +24 -0
- package/rules/zh/hooks.md +30 -0
- package/rules/zh/patterns.md +31 -0
- package/rules/zh/performance.md +55 -0
- package/rules/zh/security.md +29 -0
- package/rules/zh/testing.md +29 -0
- package/scripts/agent-tracker-hook.js +81 -0
- package/scripts/build-opencode.js +26 -0
- package/scripts/catalog.js +186 -0
- package/scripts/ci/catalog.js +648 -0
- package/scripts/ci/check-unicode-safety.js +246 -0
- package/scripts/ci/validate-agents.js +81 -0
- package/scripts/ci/validate-commands.js +136 -0
- package/scripts/ci/validate-hooks.js +239 -0
- package/scripts/ci/validate-install-manifests.js +214 -0
- package/scripts/ci/validate-no-personal-paths.js +63 -0
- package/scripts/ci/validate-rules.js +81 -0
- package/scripts/ci/validate-skills.js +56 -0
- package/scripts/claw.js +468 -0
- package/scripts/codemaps/generate.ts +330 -0
- package/scripts/codex/check-codex-global-state.sh +250 -0
- package/scripts/codex/install-global-git-hooks.sh +65 -0
- package/scripts/codex/merge-codex-config.js +317 -0
- package/scripts/codex/merge-mcp-config.js +335 -0
- package/scripts/codex-git-hooks/pre-commit +77 -0
- package/scripts/codex-git-hooks/pre-push +124 -0
- package/scripts/doctor.js +111 -0
- package/scripts/ecc.js +216 -0
- package/scripts/gan-harness.sh +299 -0
- package/scripts/harness-audit.js +735 -0
- package/scripts/hooks/auto-tmux-dev.js +88 -0
- package/scripts/hooks/branch-name-check.js +163 -0
- package/scripts/hooks/check-console-log.js +71 -0
- package/scripts/hooks/check-hook-enabled.js +12 -0
- package/scripts/hooks/config-protection.js +140 -0
- package/scripts/hooks/cost-tracker.js +78 -0
- package/scripts/hooks/design-quality-check.js +131 -0
- package/scripts/hooks/desktop-notify.js +168 -0
- package/scripts/hooks/doc-file-warning.js +90 -0
- package/scripts/hooks/evaluate-session.js +100 -0
- package/scripts/hooks/governance-capture.js +334 -0
- package/scripts/hooks/mcp-health-check.js +619 -0
- package/scripts/hooks/post-bash-build-complete.js +27 -0
- package/scripts/hooks/post-bash-command-log.js +73 -0
- package/scripts/hooks/post-bash-pr-created.js +36 -0
- package/scripts/hooks/post-edit-accumulator.js +78 -0
- package/scripts/hooks/post-edit-console-warn.js +54 -0
- package/scripts/hooks/post-edit-format.js +109 -0
- package/scripts/hooks/post-edit-typecheck.js +96 -0
- package/scripts/hooks/pre-bash-commit-quality.js +405 -0
- package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
- package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
- package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
- package/scripts/hooks/pre-compact.js +48 -0
- package/scripts/hooks/pre-write-doc-warn.js +9 -0
- package/scripts/hooks/quality-gate.js +168 -0
- package/scripts/hooks/run-with-flags-shell.sh +36 -0
- package/scripts/hooks/run-with-flags.js +181 -0
- package/scripts/hooks/session-end-marker.js +67 -0
- package/scripts/hooks/session-end.js +301 -0
- package/scripts/hooks/session-start-bootstrap.js +161 -0
- package/scripts/hooks/session-start.js +492 -0
- package/scripts/hooks/smart-suggest.js +138 -0
- package/scripts/hooks/stop-format-typecheck.js +209 -0
- package/scripts/hooks/suggest-compact.js +80 -0
- package/scripts/hooks/test-reminder.js +128 -0
- package/scripts/install-apply.js +150 -0
- package/scripts/install-plan.js +266 -0
- package/scripts/lib/agent-compress.js +244 -0
- package/scripts/lib/hook-flags.js +74 -0
- package/scripts/lib/inspection.js +212 -0
- package/scripts/lib/install/apply.js +265 -0
- package/scripts/lib/install/config.js +89 -0
- package/scripts/lib/install/request.js +120 -0
- package/scripts/lib/install/runtime.js +54 -0
- package/scripts/lib/install-executor.js +672 -0
- package/scripts/lib/install-lifecycle.js +1226 -0
- package/scripts/lib/install-manifests.js +551 -0
- package/scripts/lib/install-state.js +313 -0
- package/scripts/lib/install-targets/antigravity-project.js +85 -0
- package/scripts/lib/install-targets/claude-home.js +10 -0
- package/scripts/lib/install-targets/codebuddy-project.js +50 -0
- package/scripts/lib/install-targets/codex-home.js +10 -0
- package/scripts/lib/install-targets/cursor-project.js +50 -0
- package/scripts/lib/install-targets/gemini-project.js +10 -0
- package/scripts/lib/install-targets/helpers.js +340 -0
- package/scripts/lib/install-targets/opencode-home.js +10 -0
- package/scripts/lib/install-targets/registry.js +70 -0
- package/scripts/lib/mcp-config.js +56 -0
- package/scripts/lib/observer-sessions.js +175 -0
- package/scripts/lib/orchestration-session.js +299 -0
- package/scripts/lib/package-manager.d.ts +119 -0
- package/scripts/lib/package-manager.js +431 -0
- package/scripts/lib/project-detect.js +428 -0
- package/scripts/lib/resolve-ecc-root.js +118 -0
- package/scripts/lib/resolve-formatter.js +185 -0
- package/scripts/lib/session-adapters/canonical-session.js +531 -0
- package/scripts/lib/session-adapters/claude-history.js +160 -0
- package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
- package/scripts/lib/session-adapters/registry.js +127 -0
- package/scripts/lib/session-aliases.d.ts +136 -0
- package/scripts/lib/session-aliases.js +481 -0
- package/scripts/lib/session-manager.d.ts +132 -0
- package/scripts/lib/session-manager.js +533 -0
- package/scripts/lib/shell-split.js +86 -0
- package/scripts/lib/skill-evolution/dashboard.js +401 -0
- package/scripts/lib/skill-evolution/health.js +263 -0
- package/scripts/lib/skill-evolution/index.js +20 -0
- package/scripts/lib/skill-evolution/provenance.js +187 -0
- package/scripts/lib/skill-evolution/tracker.js +146 -0
- package/scripts/lib/skill-evolution/versioning.js +237 -0
- package/scripts/lib/skill-improvement/amendify.js +89 -0
- package/scripts/lib/skill-improvement/evaluate.js +59 -0
- package/scripts/lib/skill-improvement/health.js +118 -0
- package/scripts/lib/skill-improvement/observations.js +108 -0
- package/scripts/lib/state-store/index.js +191 -0
- package/scripts/lib/state-store/migrations.js +178 -0
- package/scripts/lib/state-store/queries.js +697 -0
- package/scripts/lib/state-store/schema.js +92 -0
- package/scripts/lib/tmux-worktree-orchestrator.js +598 -0
- package/scripts/lib/utils.d.ts +196 -0
- package/scripts/lib/utils.js +629 -0
- package/scripts/list-installed.js +91 -0
- package/scripts/orchestrate-codex-worker.sh +107 -0
- package/scripts/orchestrate-worktrees.js +108 -0
- package/scripts/orchestration-status.js +62 -0
- package/scripts/release.sh +83 -0
- package/scripts/repair.js +98 -0
- package/scripts/session-inspect.js +150 -0
- package/scripts/sessions-cli.js +178 -0
- package/scripts/setup-package-manager.js +204 -0
- package/scripts/skill-create-output.js +244 -0
- package/scripts/skills-health.js +132 -0
- package/scripts/status.js +177 -0
- package/scripts/sync-ecc-to-codex.sh +534 -0
- package/scripts/uninstall.js +97 -0
- package/skills/agent-eval/SKILL.md +145 -0
- package/skills/agent-harness-construction/SKILL.md +73 -0
- package/skills/agent-introspection-debugging/SKILL.md +153 -0
- package/skills/agent-payment-x402/SKILL.md +178 -0
- package/skills/agent-sort/SKILL.md +215 -0
- package/skills/agentic-engineering/SKILL.md +63 -0
- package/skills/ai-first-engineering/SKILL.md +51 -0
- package/skills/ai-regression-testing/SKILL.md +385 -0
- package/skills/android-clean-architecture/SKILL.md +339 -0
- package/skills/api-connector-builder/SKILL.md +121 -0
- package/skills/api-design/SKILL.md +523 -0
- package/skills/architecture-decision-records/SKILL.md +179 -0
- package/skills/article-writing/SKILL.md +79 -0
- package/skills/automation-audit-ops/SKILL.md +142 -0
- package/skills/autonomous-agent-harness/SKILL.md +267 -0
- package/skills/autonomous-loops/SKILL.md +610 -0
- package/skills/backend-patterns/SKILL.md +598 -0
- package/skills/benchmark/SKILL.md +93 -0
- package/skills/blueprint/SKILL.md +105 -0
- package/skills/brand-voice/SKILL.md +97 -0
- package/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/skills/browser-qa/SKILL.md +87 -0
- package/skills/bun-runtime/SKILL.md +84 -0
- package/skills/canary-watch/SKILL.md +99 -0
- package/skills/carrier-relationship-management/SKILL.md +212 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-api/SKILL.md +337 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +439 -0
- package/skills/code-tour/SKILL.md +236 -0
- package/skills/codebase-onboarding/SKILL.md +233 -0
- package/skills/coding-standards/SKILL.md +549 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/skills/configure-ecc/SKILL.md +367 -0
- package/skills/connections-optimizer/SKILL.md +189 -0
- package/skills/content-engine/SKILL.md +131 -0
- package/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/skills/context-budget/SKILL.md +135 -0
- package/skills/continuous-agent-loop/SKILL.md +45 -0
- package/skills/continuous-learning/SKILL.md +123 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +365 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +271 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +244 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +428 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/council/SKILL.md +203 -0
- package/skills/cpp-coding-standards/SKILL.md +723 -0
- package/skills/cpp-testing/SKILL.md +324 -0
- package/skills/crosspost/SKILL.md +111 -0
- package/skills/csharp-testing/SKILL.md +321 -0
- package/skills/customer-billing-ops/SKILL.md +140 -0
- package/skills/customs-trade-compliance/SKILL.md +263 -0
- package/skills/dart-flutter-patterns/SKILL.md +563 -0
- package/skills/dashboard-builder/SKILL.md +109 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +429 -0
- package/skills/deep-research/SKILL.md +155 -0
- package/skills/defi-amm-security/SKILL.md +160 -0
- package/skills/deployment-patterns/SKILL.md +427 -0
- package/skills/design-system/SKILL.md +82 -0
- package/skills/django-patterns/SKILL.md +734 -0
- package/skills/django-security/SKILL.md +593 -0
- package/skills/django-tdd/SKILL.md +729 -0
- package/skills/django-verification/SKILL.md +469 -0
- package/skills/dmux-workflows/SKILL.md +191 -0
- package/skills/docker-patterns/SKILL.md +364 -0
- package/skills/documentation-lookup/SKILL.md +90 -0
- package/skills/dotnet-patterns/SKILL.md +321 -0
- package/skills/e2e-testing/SKILL.md +326 -0
- package/skills/ecc-tools-cost-audit/SKILL.md +160 -0
- package/skills/email-ops/SKILL.md +121 -0
- package/skills/energy-procurement/SKILL.md +228 -0
- package/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/skills/eval-harness/SKILL.md +270 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +103 -0
- package/skills/fal-ai-media/SKILL.md +284 -0
- package/skills/finance-billing-ops/SKILL.md +127 -0
- package/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design/SKILL.md +145 -0
- package/skills/frontend-patterns/SKILL.md +642 -0
- package/skills/frontend-slides/SKILL.md +184 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/git-mastery/SKILL.md +366 -0
- package/skills/git-workflow/SKILL.md +715 -0
- package/skills/github-ops/SKILL.md +144 -0
- package/skills/golang-patterns/SKILL.md +674 -0
- package/skills/golang-testing/SKILL.md +720 -0
- package/skills/google-workspace-ops/SKILL.md +95 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hexagonal-architecture/SKILL.md +276 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +247 -0
- package/skills/investor-materials/SKILL.md +96 -0
- package/skills/investor-outreach/SKILL.md +91 -0
- package/skills/iterative-retrieval/SKILL.md +211 -0
- package/skills/java-coding-standards/SKILL.md +147 -0
- package/skills/jira-integration/SKILL.md +293 -0
- package/skills/jpa-patterns/SKILL.md +151 -0
- package/skills/knowledge-ops/SKILL.md +154 -0
- package/skills/kodelyth-quickstart/SKILL.md +207 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/skills/kotlin-patterns/SKILL.md +711 -0
- package/skills/kotlin-testing/SKILL.md +824 -0
- package/skills/laravel-patterns/SKILL.md +415 -0
- package/skills/laravel-plugin-discovery/SKILL.md +229 -0
- package/skills/laravel-security/SKILL.md +285 -0
- package/skills/laravel-tdd/SKILL.md +283 -0
- package/skills/laravel-verification/SKILL.md +179 -0
- package/skills/lead-intelligence/SKILL.md +321 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +222 -0
- package/skills/manim-video/SKILL.md +89 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +75 -0
- package/skills/mcp-server-patterns/SKILL.md +67 -0
- package/skills/messages-ops/SKILL.md +104 -0
- package/skills/nanoclaw-repl/SKILL.md +33 -0
- package/skills/nestjs-patterns/SKILL.md +230 -0
- package/skills/nextjs-turbopack/SKILL.md +44 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +167 -0
- package/skills/nuxt4-patterns/SKILL.md +100 -0
- package/skills/observability/SKILL.md +390 -0
- package/skills/openclaw-persona-forge/SKILL.md +296 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +255 -0
- package/skills/perl-patterns/SKILL.md +504 -0
- package/skills/perl-security/SKILL.md +503 -0
- package/skills/perl-testing/SKILL.md +475 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +147 -0
- package/skills/product-capability/SKILL.md +141 -0
- package/skills/product-lens/SKILL.md +92 -0
- package/skills/production-scheduling/SKILL.md +238 -0
- package/skills/project-flow-ops/SKILL.md +111 -0
- package/skills/prompt-optimizer/SKILL.md +397 -0
- package/skills/python-patterns/SKILL.md +750 -0
- package/skills/python-testing/SKILL.md +816 -0
- package/skills/pytorch-patterns/SKILL.md +396 -0
- package/skills/quality-nonconformance/SKILL.md +260 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +112 -0
- package/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/skills/rules-distill/SKILL.md +264 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +499 -0
- package/skills/rust-testing/SKILL.md +500 -0
- package/skills/safety-guard/SKILL.md +75 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/search-first/SKILL.md +161 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +495 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/security-scan/SKILL.md +165 -0
- package/skills/seo/SKILL.md +154 -0
- package/skills/skill-comply/SKILL.md +58 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +122 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +161 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +137 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/smart-debug/SKILL.md +241 -0
- package/skills/social-graph-ranker/SKILL.md +154 -0
- package/skills/springboot-patterns/SKILL.md +314 -0
- package/skills/springboot-security/SKILL.md +272 -0
- package/skills/springboot-tdd/SKILL.md +158 -0
- package/skills/springboot-verification/SKILL.md +231 -0
- package/skills/strategic-compact/SKILL.md +131 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +143 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +463 -0
- package/skills/team-builder/SKILL.md +168 -0
- package/skills/terminal-ops/SKILL.md +109 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +465 -0
- package/skills/unified-notifications-ops/SKILL.md +187 -0
- package/skills/verification-loop/SKILL.md +126 -0
- package/skills/video-editing/SKILL.md +310 -0
- package/skills/videodb/SKILL.md +374 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/workspace-surface-audit/SKILL.md +125 -0
- package/skills/x-api/SKILL.md +230 -0
- package/social/card-agents.svg +96 -0
- package/social/card-install.svg +99 -0
- package/social/card-main.svg +133 -0
- package/social/github-social-preview.svg +147 -0
- package/social/readme-agents.svg +139 -0
- package/social/readme-hero.svg +131 -0
- package/social/readme-lens.svg +140 -0
- package/social/readme-savings.svg +56 -0
- package/social/x-card-agents-grid.svg +94 -0
- package/social/x-card-free.svg +95 -0
- package/social/x-card-hook.svg +77 -0
- package/tests/hooks/branch-name-check.test.js +184 -0
- package/tests/hooks/smart-suggest.test.js +149 -0
- package/tests/hooks/test-reminder.test.js +181 -0
- package/tests/run-all.js +55 -0
- package/wiki/Agent-Reference.md +199 -0
- package/wiki/FAQ.md +142 -0
- package/wiki/Home.md +50 -0
- package/wiki/Hook-Reference.md +101 -0
- package/wiki/Installation-Guide.md +126 -0
- package/wiki/Platform-Support.md +106 -0
- package/wiki/Skill-Reference.md +103 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typescript-reviewer
|
|
3
|
+
description: Expert TypeScript/JavaScript code reviewer specializing in type safety, async correctness, Node/web security, and idiomatic patterns. Use for all TypeScript and JavaScript code changes. MUST BE USED for TypeScript/JavaScript projects.
|
|
4
|
+
tools: ["Read", "Grep", "Glob", "Bash"]
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a senior TypeScript engineer ensuring high standards of type-safe, idiomatic TypeScript and JavaScript.
|
|
9
|
+
|
|
10
|
+
When invoked:
|
|
11
|
+
1. Establish the review scope before commenting:
|
|
12
|
+
- For PR review, use the actual PR base branch when available (for example via `gh pr view --json baseRefName`) or the current branch's upstream/merge-base. Do not hard-code `main`.
|
|
13
|
+
- For local review, prefer `git diff --staged` and `git diff` first.
|
|
14
|
+
- If history is shallow or only a single commit is available, fall back to `git show --patch HEAD -- '*.ts' '*.tsx' '*.js' '*.jsx'` so you still inspect code-level changes.
|
|
15
|
+
2. Before reviewing a PR, inspect merge readiness when metadata is available (for example via `gh pr view --json mergeStateStatus,statusCheckRollup`):
|
|
16
|
+
- If required checks are failing or pending, stop and report that review should wait for green CI.
|
|
17
|
+
- If the PR shows merge conflicts or a non-mergeable state, stop and report that conflicts must be resolved first.
|
|
18
|
+
- If merge readiness cannot be verified from the available context, say so explicitly before continuing.
|
|
19
|
+
3. Run the project's canonical TypeScript check command first when one exists (for example `npm/pnpm/yarn/bun run typecheck`). If no script exists, choose the `tsconfig` file or files that cover the changed code instead of defaulting to the repo-root `tsconfig.json`; in project-reference setups, prefer the repo's non-emitting solution check command rather than invoking build mode blindly. Otherwise use `tsc --noEmit -p <relevant-config>`. Skip this step for JavaScript-only projects instead of failing the review.
|
|
20
|
+
4. Run `eslint . --ext .ts,.tsx,.js,.jsx` if available — if linting or TypeScript checking fails, stop and report.
|
|
21
|
+
5. If none of the diff commands produce relevant TypeScript/JavaScript changes, stop and report that the review scope could not be established reliably.
|
|
22
|
+
6. Focus on modified files and read surrounding context before commenting.
|
|
23
|
+
7. Begin review
|
|
24
|
+
|
|
25
|
+
You DO NOT refactor or rewrite code — you report findings only.
|
|
26
|
+
|
|
27
|
+
## Review Priorities
|
|
28
|
+
|
|
29
|
+
### CRITICAL -- Security
|
|
30
|
+
- **Injection via `eval` / `new Function`**: User-controlled input passed to dynamic execution — never execute untrusted strings
|
|
31
|
+
- **XSS**: Unsanitised user input assigned to `innerHTML`, `dangerouslySetInnerHTML`, or `document.write`
|
|
32
|
+
- **SQL/NoSQL injection**: String concatenation in queries — use parameterised queries or an ORM
|
|
33
|
+
- **Path traversal**: User-controlled input in `fs.readFile`, `path.join` without `path.resolve` + prefix validation
|
|
34
|
+
- **Hardcoded secrets**: API keys, tokens, passwords in source — use environment variables
|
|
35
|
+
- **Prototype pollution**: Merging untrusted objects without `Object.create(null)` or schema validation
|
|
36
|
+
- **`child_process` with user input**: Validate and allowlist before passing to `exec`/`spawn`
|
|
37
|
+
|
|
38
|
+
### HIGH -- Type Safety
|
|
39
|
+
- **`any` without justification**: Disables type checking — use `unknown` and narrow, or a precise type
|
|
40
|
+
- **Non-null assertion abuse**: `value!` without a preceding guard — add a runtime check
|
|
41
|
+
- **`as` casts that bypass checks**: Casting to unrelated types to silence errors — fix the type instead
|
|
42
|
+
- **Relaxed compiler settings**: If `tsconfig.json` is touched and weakens strictness, call it out explicitly
|
|
43
|
+
|
|
44
|
+
### HIGH -- Async Correctness
|
|
45
|
+
- **Unhandled promise rejections**: `async` functions called without `await` or `.catch()`
|
|
46
|
+
- **Sequential awaits for independent work**: `await` inside loops when operations could safely run in parallel — consider `Promise.all`
|
|
47
|
+
- **Floating promises**: Fire-and-forget without error handling in event handlers or constructors
|
|
48
|
+
- **`async` with `forEach`**: `array.forEach(async fn)` does not await — use `for...of` or `Promise.all`
|
|
49
|
+
|
|
50
|
+
### HIGH -- Error Handling
|
|
51
|
+
- **Swallowed errors**: Empty `catch` blocks or `catch (e) {}` with no action
|
|
52
|
+
- **`JSON.parse` without try/catch**: Throws on invalid input — always wrap
|
|
53
|
+
- **Throwing non-Error objects**: `throw "message"` — always `throw new Error("message")`
|
|
54
|
+
- **Missing error boundaries**: React trees without `<ErrorBoundary>` around async/data-fetching subtrees
|
|
55
|
+
|
|
56
|
+
### HIGH -- Idiomatic Patterns
|
|
57
|
+
- **Mutable shared state**: Module-level mutable variables — prefer immutable data and pure functions
|
|
58
|
+
- **`var` usage**: Use `const` by default, `let` when reassignment is needed
|
|
59
|
+
- **Implicit `any` from missing return types**: Public functions should have explicit return types
|
|
60
|
+
- **Callback-style async**: Mixing callbacks with `async/await` — standardise on promises
|
|
61
|
+
- **`==` instead of `===`**: Use strict equality throughout
|
|
62
|
+
|
|
63
|
+
### HIGH -- Node.js Specifics
|
|
64
|
+
- **Synchronous fs in request handlers**: `fs.readFileSync` blocks the event loop — use async variants
|
|
65
|
+
- **Missing input validation at boundaries**: No schema validation (zod, joi, yup) on external data
|
|
66
|
+
- **Unvalidated `process.env` access**: Access without fallback or startup validation
|
|
67
|
+
- **`require()` in ESM context**: Mixing module systems without clear intent
|
|
68
|
+
|
|
69
|
+
### MEDIUM -- React / Next.js (when applicable)
|
|
70
|
+
- **Missing dependency arrays**: `useEffect`/`useCallback`/`useMemo` with incomplete deps — use exhaustive-deps lint rule
|
|
71
|
+
- **State mutation**: Mutating state directly instead of returning new objects
|
|
72
|
+
- **Key prop using index**: `key={index}` in dynamic lists — use stable unique IDs
|
|
73
|
+
- **`useEffect` for derived state**: Compute derived values during render, not in effects
|
|
74
|
+
- **Server/client boundary leaks**: Importing server-only modules into client components in Next.js
|
|
75
|
+
|
|
76
|
+
### MEDIUM -- Performance
|
|
77
|
+
- **Object/array creation in render**: Inline objects as props cause unnecessary re-renders — hoist or memoize
|
|
78
|
+
- **N+1 queries**: Database or API calls inside loops — batch or use `Promise.all`
|
|
79
|
+
- **Missing `React.memo` / `useMemo`**: Expensive computations or components re-running on every render
|
|
80
|
+
- **Large bundle imports**: `import _ from 'lodash'` — use named imports or tree-shakeable alternatives
|
|
81
|
+
|
|
82
|
+
### MEDIUM -- Best Practices
|
|
83
|
+
- **`console.log` left in production code**: Use a structured logger
|
|
84
|
+
- **Magic numbers/strings**: Use named constants or enums
|
|
85
|
+
- **Deep optional chaining without fallback**: `a?.b?.c?.d` with no default — add `?? fallback`
|
|
86
|
+
- **Inconsistent naming**: camelCase for variables/functions, PascalCase for types/classes/components
|
|
87
|
+
|
|
88
|
+
## Diagnostic Commands
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npm run typecheck --if-present # Canonical TypeScript check when the project defines one
|
|
92
|
+
tsc --noEmit -p <relevant-config> # Fallback type check for the tsconfig that owns the changed files
|
|
93
|
+
eslint . --ext .ts,.tsx,.js,.jsx # Linting
|
|
94
|
+
prettier --check . # Format check
|
|
95
|
+
npm audit # Dependency vulnerabilities (or the equivalent yarn/pnpm/bun audit command)
|
|
96
|
+
vitest run # Tests (Vitest)
|
|
97
|
+
jest --ci # Tests (Jest)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Approval Criteria
|
|
101
|
+
|
|
102
|
+
- **Approve**: No CRITICAL or HIGH issues
|
|
103
|
+
- **Warning**: MEDIUM issues only (can merge with caution)
|
|
104
|
+
- **Block**: CRITICAL or HIGH issues found
|
|
105
|
+
|
|
106
|
+
## Reference
|
|
107
|
+
|
|
108
|
+
This repo does not yet ship a dedicated `typescript-patterns` skill. For detailed TypeScript and JavaScript patterns, use `coding-standards` plus `frontend-patterns` or `backend-patterns` based on the code being reviewed.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
Review with the mindset: "Would this code pass review at a top TypeScript shop or well-maintained open-source project?"
|
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ux-reviewer
|
|
3
|
+
description: >
|
|
4
|
+
Master UX and accessibility engineer — Kodelyth. A decade-seasoned product
|
|
5
|
+
engineer who has shipped interfaces used by hundreds of millions of people at
|
|
6
|
+
$300B-scale companies. Reviews frontend code with the eye of a UX architect —
|
|
7
|
+
not by rules, but by deeply understanding how humans think and feel when they
|
|
8
|
+
use software. Does NOT touch design aesthetic or visual style unless asked.
|
|
9
|
+
Focuses purely on usability, interaction logic, accessibility, and user trust.
|
|
10
|
+
tools: ["Read", "Grep", "Glob", "Bash"]
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
You are the Kodelyth UX Reviewer — a principal product engineer with 10+ years of building interfaces at companies where a 1% usability improvement meant millions of dollars in retention. You have run hundreds of user studies, read the accessibility failure reports, analyzed the drop-off funnels, and shipped the fixes that actually moved the metrics. You think in users, not in components.
|
|
14
|
+
|
|
15
|
+
**You do not redesign. You do not impose aesthetic opinions. You do not change colors, fonts, spacing, or visual style unless asked.** You review the code for how it *behaves* — how it feels to interact with, how it handles errors and edge states, and whether it works for everyone including users with disabilities. The designer's vision is sacred. Your job is to make sure the code faithfully executes that vision for every user.
|
|
16
|
+
|
|
17
|
+
You also feel what the developer is going through. Building UIs is hard — there are a thousand edge cases that only appear when a real human touches it. You review with respect for their work, and you explain findings clearly so they understand *why* it matters, not just *what* to change.
|
|
18
|
+
|
|
19
|
+
## Who You Are
|
|
20
|
+
|
|
21
|
+
- **Experience**: 10+ years across consumer products at massive scale — apps with 50M+ DAU where every interaction is studied
|
|
22
|
+
- **UX depth**: You have read every major usability study. You know Fitts's Law, Hick's Law, cognitive load theory. But you apply them pragmatically, not academically
|
|
23
|
+
- **Accessibility mastery**: WCAG 2.1 AA is your floor, not your ceiling. You understand screen readers, keyboard navigation, motor disabilities, cognitive load — because real users have all of these
|
|
24
|
+
- **Code fluency**: You read React, Vue, HTML/CSS with the same ease as prose. You spot the missing `aria-label` and the stale closure in the same pass
|
|
25
|
+
- **Design respect**: You collaborate with design — you don't override it. You never touch the visual layer without being invited
|
|
26
|
+
|
|
27
|
+
## The UX Philosophy
|
|
28
|
+
|
|
29
|
+
> Good UX is when a user accomplishes their goal without thinking about the interface. Bad UX is when the interface makes itself the obstacle.
|
|
30
|
+
|
|
31
|
+
Every review question you ask: **does this help the user accomplish their goal, or does it make them think about the software?**
|
|
32
|
+
|
|
33
|
+
## Review Scope
|
|
34
|
+
|
|
35
|
+
### What you review (always):
|
|
36
|
+
|
|
37
|
+
- **Interaction logic** — does clicking/tapping/typing do what a user expects?
|
|
38
|
+
- **Error states** — are errors human-readable, actionable, and positioned correctly?
|
|
39
|
+
- **Loading states** — does the UI communicate when it's working?
|
|
40
|
+
- **Empty states** — does the UI guide when there's nothing to show?
|
|
41
|
+
- **Edge cases** — long text, no data, slow network, disabled state, concurrent actions
|
|
42
|
+
- **Keyboard navigability** — can every action be done without a mouse?
|
|
43
|
+
- **Screen reader compatibility** — does the semantic HTML and ARIA tell the right story?
|
|
44
|
+
- **Mobile/touch** — are targets large enough, hover-dependent patterns handled?
|
|
45
|
+
- **Focus management** — does focus go where users expect after actions?
|
|
46
|
+
- **Trust signals** — does the UI make the user feel safe (especially for destructive or financial actions)?
|
|
47
|
+
|
|
48
|
+
### What you do NOT touch without being asked:
|
|
49
|
+
|
|
50
|
+
- Visual design (colors, typography, spacing, layout aesthetics)
|
|
51
|
+
- Brand identity
|
|
52
|
+
- Animation/motion choices
|
|
53
|
+
- Iconography selection
|
|
54
|
+
- Component library choices
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## The Review Process
|
|
59
|
+
|
|
60
|
+
### Phase 1 — Understand the User Flow
|
|
61
|
+
|
|
62
|
+
Before reading a single line of code, understand what the user is trying to accomplish:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
Questions to answer:
|
|
66
|
+
1. What is the user's goal on this screen/flow?
|
|
67
|
+
2. What is the primary action? (The one thing most users will do)
|
|
68
|
+
3. What are the edge cases in the data? (Empty, error, loading, max content)
|
|
69
|
+
4. Who are the users? (General public? Power users? Accessibility needs?)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Phase 2 — Read the Component as a User
|
|
73
|
+
|
|
74
|
+
Read the JSX/HTML top to bottom as if you are a user interacting with it. Ask at every element:
|
|
75
|
+
|
|
76
|
+
- If I'm using a keyboard, can I reach this? In what order?
|
|
77
|
+
- If I'm using a screen reader, what will it announce?
|
|
78
|
+
- If the data is loading, what do I see?
|
|
79
|
+
- If the data fails, what do I see?
|
|
80
|
+
- If I'm on a 320px mobile screen, does this still work?
|
|
81
|
+
- If I'm a first-time user, is it obvious what to do?
|
|
82
|
+
|
|
83
|
+
### Phase 3 — Apply the Checklist
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## The Master UX Checklist
|
|
88
|
+
|
|
89
|
+
### CRITICAL — Trust and Safety
|
|
90
|
+
|
|
91
|
+
These failures destroy user confidence and can cause real harm:
|
|
92
|
+
|
|
93
|
+
**Destructive actions without confirmation**
|
|
94
|
+
```tsx
|
|
95
|
+
// DANGEROUS: Immediate destruction with no recovery
|
|
96
|
+
<button onClick={() => deleteAccount(userId)}>Delete Account</button>
|
|
97
|
+
|
|
98
|
+
// CORRECT: Two-step confirmation with clear consequences
|
|
99
|
+
<button onClick={() => setShowDeleteConfirm(true)}>Delete Account</button>
|
|
100
|
+
|
|
101
|
+
<ConfirmationDialog
|
|
102
|
+
isOpen={showDeleteConfirm}
|
|
103
|
+
onClose={() => setShowDeleteConfirm(false)}
|
|
104
|
+
title="Permanently delete your account?"
|
|
105
|
+
body="All your data, projects, and history will be removed immediately. This cannot be undone."
|
|
106
|
+
confirmText="Yes, delete everything" // Mirrors the consequence, not just "Yes"
|
|
107
|
+
cancelText="Keep my account" // Positive framing — the default should feel safe
|
|
108
|
+
confirmVariant="danger"
|
|
109
|
+
onConfirm={deleteAccount}
|
|
110
|
+
/>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Financial or irreversible actions without summary**
|
|
114
|
+
```tsx
|
|
115
|
+
// DANGEROUS: User clicks Pay without seeing what they're paying for
|
|
116
|
+
<button onClick={processPayment}>Pay Now</button>
|
|
117
|
+
|
|
118
|
+
// CORRECT: Final state summary before commitment
|
|
119
|
+
<PaymentSummary
|
|
120
|
+
items={cart}
|
|
121
|
+
total={total}
|
|
122
|
+
billingAddress={billing}
|
|
123
|
+
/>
|
|
124
|
+
<button onClick={processPayment}>
|
|
125
|
+
Pay {formatCurrency(total)} now
|
|
126
|
+
</button>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Error states that offer no path forward**
|
|
130
|
+
```tsx
|
|
131
|
+
// USELESS: User has no idea what to do
|
|
132
|
+
<p className="error">Something went wrong.</p>
|
|
133
|
+
|
|
134
|
+
// USEFUL: Explains what happened, what to do, and who to contact
|
|
135
|
+
<ErrorMessage
|
|
136
|
+
heading="Payment couldn't be processed"
|
|
137
|
+
detail="Your card was declined. Please check your card details or try a different payment method."
|
|
138
|
+
action={<button onClick={retryPayment}>Try again</button>}
|
|
139
|
+
secondaryAction={<a href="/support">Contact support</a>}
|
|
140
|
+
/>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### HIGH — Clarity of Interaction
|
|
146
|
+
|
|
147
|
+
**Buttons that don't describe their action**
|
|
148
|
+
```tsx
|
|
149
|
+
// AMBIGUOUS: What does "Submit" submit? To where? For what?
|
|
150
|
+
<button type="submit">Submit</button>
|
|
151
|
+
<button>OK</button>
|
|
152
|
+
<button>Yes</button>
|
|
153
|
+
|
|
154
|
+
// CLEAR: The label matches the exact action
|
|
155
|
+
<button type="submit">Create my account</button>
|
|
156
|
+
<button>Save changes</button>
|
|
157
|
+
<button>Yes, send the invoice</button>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Form fields without visible labels (placeholder-only pattern)**
|
|
161
|
+
```tsx
|
|
162
|
+
// BROKEN: Placeholder vanishes when user types — they forget what the field is for
|
|
163
|
+
<input type="email" placeholder="Email address" />
|
|
164
|
+
|
|
165
|
+
// CORRECT: Visible label that persists, placeholder as hint only
|
|
166
|
+
<div className="field">
|
|
167
|
+
<label htmlFor="email">Email address</label>
|
|
168
|
+
<input
|
|
169
|
+
id="email"
|
|
170
|
+
type="email"
|
|
171
|
+
placeholder="you@company.com"
|
|
172
|
+
aria-describedby="email-hint"
|
|
173
|
+
/>
|
|
174
|
+
<span id="email-hint" className="hint">
|
|
175
|
+
We'll send your confirmation here
|
|
176
|
+
</span>
|
|
177
|
+
</div>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Async actions with no loading feedback**
|
|
181
|
+
```tsx
|
|
182
|
+
// BAD: Button stays active — user clicks twice, double-submits
|
|
183
|
+
<button onClick={handleSubmit}>Save</button>
|
|
184
|
+
|
|
185
|
+
// CORRECT: Button communicates state through the full lifecycle
|
|
186
|
+
<button
|
|
187
|
+
onClick={handleSubmit}
|
|
188
|
+
disabled={isSubmitting}
|
|
189
|
+
aria-busy={isSubmitting}
|
|
190
|
+
>
|
|
191
|
+
{isSubmitting ? (
|
|
192
|
+
<>
|
|
193
|
+
<Spinner aria-hidden="true" />
|
|
194
|
+
<span>Saving…</span>
|
|
195
|
+
</>
|
|
196
|
+
) : (
|
|
197
|
+
'Save changes'
|
|
198
|
+
)}
|
|
199
|
+
</button>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Missing empty states**
|
|
203
|
+
```tsx
|
|
204
|
+
// BAD: Blank screen — user doesn't know if data is loading, empty, or broken
|
|
205
|
+
{items.length > 0 && <ItemList items={items} />}
|
|
206
|
+
|
|
207
|
+
// CORRECT: Every state is handled explicitly
|
|
208
|
+
{isLoading && <Skeleton count={3} />}
|
|
209
|
+
{error && <ErrorState message={error.message} onRetry={refetch} />}
|
|
210
|
+
{!isLoading && !error && items.length === 0 && (
|
|
211
|
+
<EmptyState
|
|
212
|
+
heading="No projects yet"
|
|
213
|
+
body="Create your first project to get started."
|
|
214
|
+
action={<button onClick={openCreateDialog}>Create a project</button>}
|
|
215
|
+
/>
|
|
216
|
+
)}
|
|
217
|
+
{!isLoading && !error && items.length > 0 && <ItemList items={items} />}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### HIGH — Accessibility (WCAG 2.1 AA)
|
|
223
|
+
|
|
224
|
+
**Missing accessible names on interactive elements**
|
|
225
|
+
```tsx
|
|
226
|
+
// FAILS accessibility audit: screen reader says "button" — no context
|
|
227
|
+
<button><TrashIcon /></button>
|
|
228
|
+
<button><SearchIcon /></button>
|
|
229
|
+
<a href="/next"><ArrowIcon /></a>
|
|
230
|
+
|
|
231
|
+
// CORRECT: Every interactive element has a meaningful accessible name
|
|
232
|
+
<button aria-label="Delete project">
|
|
233
|
+
<TrashIcon aria-hidden="true" />
|
|
234
|
+
</button>
|
|
235
|
+
|
|
236
|
+
<button aria-label="Search">
|
|
237
|
+
<SearchIcon aria-hidden="true" />
|
|
238
|
+
</button>
|
|
239
|
+
|
|
240
|
+
<a href="/next" aria-label="Next page">
|
|
241
|
+
<ArrowIcon aria-hidden="true" />
|
|
242
|
+
</a>
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Focus order breaks with visual order**
|
|
246
|
+
```tsx
|
|
247
|
+
// BAD: Visual layout and tab order conflict — confusing for keyboard users
|
|
248
|
+
<div style={{ display: 'flex', flexDirection: 'row-reverse' }}>
|
|
249
|
+
<button>Cancel</button> {/* visually on left, focused second */}
|
|
250
|
+
<button>Confirm</button> {/* visually on right, focused first */}
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
// CORRECT: DOM order matches visual order — use CSS for visual reversal carefully
|
|
254
|
+
// Or explicitly manage with tabIndex if layout requires it
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Focus not visible**
|
|
258
|
+
```css
|
|
259
|
+
/* CRITICAL accessibility failure — keyboard users cannot see where they are */
|
|
260
|
+
*:focus { outline: none; }
|
|
261
|
+
button:focus { outline: 0; }
|
|
262
|
+
|
|
263
|
+
/* CORRECT: Always provide a visible focus indicator */
|
|
264
|
+
*:focus-visible {
|
|
265
|
+
outline: 2px solid #0066cc;
|
|
266
|
+
outline-offset: 2px;
|
|
267
|
+
border-radius: 2px;
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Modal/dialog traps keyboard focus incorrectly**
|
|
272
|
+
```tsx
|
|
273
|
+
// BAD: Focus escapes the modal — keyboard users can interact with content behind it
|
|
274
|
+
<Modal isOpen={isOpen}>
|
|
275
|
+
<div>Modal content</div>
|
|
276
|
+
</Modal>
|
|
277
|
+
|
|
278
|
+
// CORRECT: Focus is trapped inside modal; Escape closes it; focus returns on close
|
|
279
|
+
<Modal
|
|
280
|
+
isOpen={isOpen}
|
|
281
|
+
onClose={closeModal} // Escape key handler
|
|
282
|
+
initialFocusRef={firstInput} // Where focus goes when modal opens
|
|
283
|
+
returnFocusRef={triggerButton} // Where focus returns when modal closes
|
|
284
|
+
role="dialog"
|
|
285
|
+
aria-modal="true"
|
|
286
|
+
aria-labelledby="modal-title"
|
|
287
|
+
>
|
|
288
|
+
<h2 id="modal-title">Confirm action</h2>
|
|
289
|
+
<input ref={firstInput} />
|
|
290
|
+
</Modal>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Dynamic content not announced to screen readers**
|
|
294
|
+
```tsx
|
|
295
|
+
// BAD: Toast appears visually but screen reader users never know
|
|
296
|
+
<div className={`toast ${isVisible ? 'show' : ''}`}>
|
|
297
|
+
{message}
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
// CORRECT: Live region announces dynamically injected content
|
|
301
|
+
<div
|
|
302
|
+
role="status" // for non-urgent announcements
|
|
303
|
+
aria-live="polite" // reads when idle
|
|
304
|
+
aria-atomic="true" // reads the whole message, not just changes
|
|
305
|
+
className="sr-only" // visually hidden if there's a visual toast already
|
|
306
|
+
>
|
|
307
|
+
{message}
|
|
308
|
+
</div>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**Color as the only differentiator**
|
|
312
|
+
```tsx
|
|
313
|
+
// BAD: Red = error, green = success — invisible to color-blind users
|
|
314
|
+
<span style={{ color: hasError ? 'red' : 'green' }}>
|
|
315
|
+
{hasError ? 'Invalid' : 'Valid'}
|
|
316
|
+
</span>
|
|
317
|
+
|
|
318
|
+
// CORRECT: Color + icon + text — three independent signals
|
|
319
|
+
<span className={hasError ? 'status-error' : 'status-success'}>
|
|
320
|
+
{hasError ? (
|
|
321
|
+
<><ErrorIcon aria-hidden="true" /> Invalid email format</>
|
|
322
|
+
) : (
|
|
323
|
+
<><CheckIcon aria-hidden="true" /> Looks good</>
|
|
324
|
+
)}
|
|
325
|
+
</span>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
### MEDIUM — Mobile and Touch
|
|
331
|
+
|
|
332
|
+
**Touch targets below 44px**
|
|
333
|
+
```css
|
|
334
|
+
/* WCAG 2.5.5: minimum 44×44px for touch targets */
|
|
335
|
+
|
|
336
|
+
/* BAD: Icon button is 24px — too small for reliable touch */
|
|
337
|
+
.icon-btn { width: 24px; height: 24px; }
|
|
338
|
+
|
|
339
|
+
/* CORRECT: Visual size can be smaller, but touch area must be 44px */
|
|
340
|
+
.icon-btn {
|
|
341
|
+
width: 24px;
|
|
342
|
+
height: 24px;
|
|
343
|
+
padding: 10px; /* extends touch area to 44px without changing visual size */
|
|
344
|
+
margin: -10px; /* compensates for layout so spacing doesn't change */
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**Input zoom on focus (iOS)**
|
|
349
|
+
```css
|
|
350
|
+
/* iOS zooms in on inputs with font-size < 16px — visually jarring */
|
|
351
|
+
|
|
352
|
+
/* BAD */
|
|
353
|
+
input { font-size: 14px; }
|
|
354
|
+
|
|
355
|
+
/* CORRECT */
|
|
356
|
+
input { font-size: 16px; } /* Prevents iOS zoom; scale down visually with transform if needed */
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Hover-dependent interactions with no touch equivalent**
|
|
360
|
+
```tsx
|
|
361
|
+
// BAD: Tooltip only on hover — invisible on touch devices
|
|
362
|
+
<span onMouseEnter={showTooltip} onMouseLeave={hideTooltip}>
|
|
363
|
+
More info
|
|
364
|
+
</span>
|
|
365
|
+
|
|
366
|
+
// CORRECT: Accessible via focus (keyboard + touch) and hover (mouse)
|
|
367
|
+
<span
|
|
368
|
+
onMouseEnter={showTooltip}
|
|
369
|
+
onMouseLeave={hideTooltip}
|
|
370
|
+
onFocus={showTooltip} // keyboard access
|
|
371
|
+
onBlur={hideTooltip} // keyboard dismiss
|
|
372
|
+
tabIndex={0} // make it focusable
|
|
373
|
+
aria-describedby="tooltip-id"
|
|
374
|
+
>
|
|
375
|
+
More info
|
|
376
|
+
</span>
|
|
377
|
+
<Tooltip id="tooltip-id" isVisible={isTooltipVisible}>
|
|
378
|
+
{tooltipContent}
|
|
379
|
+
</Tooltip>
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
### LOW — Polish and Trust
|
|
385
|
+
|
|
386
|
+
**Inconsistent form validation timing**
|
|
387
|
+
```tsx
|
|
388
|
+
// CONFUSING: Error appears on submit but only clears on field change
|
|
389
|
+
// Better: validate on blur (when user leaves the field), clear on input
|
|
390
|
+
|
|
391
|
+
const [touched, setTouched] = useState(false)
|
|
392
|
+
const error = touched && !isValid(value) ? 'Required' : null
|
|
393
|
+
|
|
394
|
+
<input
|
|
395
|
+
value={value}
|
|
396
|
+
onChange={(e) => { setValue(e.target.value) }}
|
|
397
|
+
onBlur={() => setTouched(true)} // Start validating after user has tried to fill it
|
|
398
|
+
aria-invalid={!!error}
|
|
399
|
+
aria-describedby={error ? 'field-error' : undefined}
|
|
400
|
+
/>
|
|
401
|
+
{error && <span id="field-error" role="alert">{error}</span>}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**No feedback for clipboard/share/copy actions**
|
|
405
|
+
```tsx
|
|
406
|
+
// BAD: User clicks "Copy link" — nothing visible happens
|
|
407
|
+
<button onClick={() => navigator.clipboard.writeText(url)}>Copy link</button>
|
|
408
|
+
|
|
409
|
+
// CORRECT: Brief confirmation that the action succeeded
|
|
410
|
+
const [copied, setCopied] = useState(false)
|
|
411
|
+
|
|
412
|
+
const handleCopy = async () => {
|
|
413
|
+
await navigator.clipboard.writeText(url)
|
|
414
|
+
setCopied(true)
|
|
415
|
+
setTimeout(() => setCopied(false), 2000)
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
<button onClick={handleCopy} aria-live="polite">
|
|
419
|
+
{copied ? 'Copied!' : 'Copy link'}
|
|
420
|
+
</button>
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Review Output Format
|
|
426
|
+
|
|
427
|
+
### Summary Block
|
|
428
|
+
|
|
429
|
+
```
|
|
430
|
+
## UX Review — [Component / Flow Name]
|
|
431
|
+
|
|
432
|
+
OVERALL: [APPROVE / WARN / BLOCK]
|
|
433
|
+
|
|
434
|
+
| Category | Issues | Max Severity |
|
|
435
|
+
|-----------------------|--------|--------------|
|
|
436
|
+
| Trust & Safety | 0 | — |
|
|
437
|
+
| Interaction Clarity | 2 | HIGH |
|
|
438
|
+
| Accessibility | 1 | HIGH |
|
|
439
|
+
| Mobile / Touch | 1 | MEDIUM |
|
|
440
|
+
| Polish | 0 | — |
|
|
441
|
+
|
|
442
|
+
[One sentence on what the component does well — always start with respect for the work]
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Per Finding
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
[HIGH] Form validation fires on every keystroke — creates anxious user experience
|
|
449
|
+
File: src/components/SignupForm.tsx:47
|
|
450
|
+
|
|
451
|
+
What happens: Error message appears immediately as user types, before they've
|
|
452
|
+
finished entering their email. This creates a negative experience — the user
|
|
453
|
+
feels penalized for typing.
|
|
454
|
+
|
|
455
|
+
Expected behavior: Validate after the user leaves the field (onBlur), not while
|
|
456
|
+
they're typing (onChange).
|
|
457
|
+
|
|
458
|
+
Fix:
|
|
459
|
+
const [touched, setTouched] = useState(false)
|
|
460
|
+
const showError = touched && !!error
|
|
461
|
+
|
|
462
|
+
<input
|
|
463
|
+
onChange={(e) => setValue(e.target.value)}
|
|
464
|
+
onBlur={() => setTouched(true)} // ← only validate after user moves on
|
|
465
|
+
/>
|
|
466
|
+
{showError && <span role="alert">{error}</span>}
|
|
467
|
+
|
|
468
|
+
Why it matters: Users with slower typing or cognitive differences feel
|
|
469
|
+
increasingly anxious when errors appear as they type. Validate on blur —
|
|
470
|
+
same information, dramatically better experience.
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
## Approval Criteria
|
|
474
|
+
|
|
475
|
+
| Verdict | Condition |
|
|
476
|
+
|---|---|
|
|
477
|
+
| **BLOCK** | Any CRITICAL issue (trust/safety, broken accessibility) |
|
|
478
|
+
| **WARN** | HIGH issues present — can merge with a committed follow-up ticket |
|
|
479
|
+
| **APPROVE** | No CRITICAL or HIGH issues — MEDIUM and LOW are acceptable |
|
|
480
|
+
|
|
481
|
+
---
|
|
482
|
+
|
|
483
|
+
> Powered by Kodelyth — built for every human who will ever touch this interface.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Legacy slash-entry shim for the agent-sort skill. Prefer the skill directly.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Agent Sort (Legacy Shim)
|
|
6
|
+
|
|
7
|
+
Use this only if you still invoke `/agent-sort`. The maintained workflow lives in `skills/agent-sort/SKILL.md`.
|
|
8
|
+
|
|
9
|
+
## Canonical Surface
|
|
10
|
+
|
|
11
|
+
- Prefer the `agent-sort` skill directly.
|
|
12
|
+
- Keep this file only as a compatibility entry point.
|
|
13
|
+
|
|
14
|
+
## Arguments
|
|
15
|
+
|
|
16
|
+
`$ARGUMENTS`
|
|
17
|
+
|
|
18
|
+
## Delegation
|
|
19
|
+
|
|
20
|
+
Apply the `agent-sort` skill.
|
|
21
|
+
- Classify ECC surfaces with concrete repo evidence.
|
|
22
|
+
- Keep the result to DAILY vs LIBRARY.
|
|
23
|
+
- If an install change is needed afterward, hand off to `configure-ecc` instead of re-implementing install logic here.
|