tribunal-kit 6.0.1 → 8.0.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/ARCHITECTURE.md +9 -6
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/config/claude.json +18 -0
- package/.agent/config/plugin.json +102 -0
- package/.agent/config/slash-commands.json +103 -0
- package/.agent/config/specialist-registry.json +415 -0
- package/.agent/config/system-prompt.md +191 -0
- package/.agent/history/architecture-graph.yaml +302 -3
- package/.agent/history/graph-cache.json +515 -45
- package/.agent/history/memory/.memory.idx +1532 -1
- package/.agent/history/memory/MEMORY.md +102 -1
- package/.agent/history/memory.db +0 -0
- package/.agent/history/snapshots/bin__adapter-install.js.json +13 -0
- package/.agent/history/snapshots/bin__global-store.js.json +15 -0
- package/.agent/history/snapshots/bin__mcp-server.js.json +19 -0
- package/.agent/history/snapshots/bin__proxy-server.js.json +20 -0
- package/.agent/history/snapshots/bin__spawn-agent.js.json +12 -0
- package/.agent/history/snapshots/bin__tk-proxy.js.json +21 -0
- package/.agent/history/snapshots/bin__tribunal-kit.js.json +9 -7
- package/.agent/history/snapshots/bin__wrapper.js.json +14 -0
- package/.agent/history/snapshots/eslint.config.js.json +1 -2
- package/.agent/history/snapshots/scripts__benchmark.js.json +14 -0
- package/.agent/history/snapshots/scripts__changelog.js.json +1 -2
- package/.agent/history/snapshots/scripts__fix-vbc.js.json +11 -0
- package/.agent/history/snapshots/scripts__stress_benchmark.js.json +15 -0
- package/.agent/history/snapshots/scripts__sync-version.js.json +1 -2
- package/.agent/history/snapshots/scripts__validate-payload.js.json +1 -2
- package/.agent/history/snapshots/scripts__visual_audit.js.json +11 -0
- package/.agent/history/snapshots/test__integration__bridges.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__graceful_degradation.test.js.json +12 -0
- package/.agent/history/snapshots/test__integration__init.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__minimal_change_pipeline.test.js.json +13 -0
- package/.agent/history/snapshots/test__integration__parallel_tribunal.test.js.json +12 -0
- package/.agent/history/snapshots/test__integration__routing.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__sync_status.test.js.json +13 -0
- package/.agent/history/snapshots/test__integration__wave2.test.js.json +1 -2
- package/.agent/history/snapshots/test__integration__wrapper.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__align.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__args.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__audit_release.test.js.json +16 -0
- package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__cicd_validator.test.js.json +12 -0
- package/.agent/history/snapshots/test__unit__compile.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__context_broker.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__contract_engine.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__copyDir.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__guardrail_engine.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__impact_classifier.test.js.json +12 -0
- package/.agent/history/snapshots/test__unit__init.test.js.json +14 -0
- package/.agent/history/snapshots/test__unit__inner_loop_validator.test.js.json +1 -2
- package/.agent/history/snapshots/test__unit__integrity_manifest.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__learn.test.js.json +11 -0
- package/.agent/history/snapshots/test__unit__marathon.test.js.json +22 -0
- package/.agent/history/snapshots/test__unit__mcp_server.test.js.json +16 -0
- package/.agent/history/snapshots/test__unit__memory.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__minimal_change.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__native.test.js.json +10 -0
- package/.agent/history/snapshots/test__unit__optimize.test.js.json +13 -0
- package/.agent/history/snapshots/test__unit__path_resolution.test.js.json +14 -0
- package/.agent/history/snapshots/test__unit__production_readiness_evidence.test.js.json +21 -0
- package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__semver.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__skill_evolution.test.js.json +11 -0
- package/.agent/history/snapshots/test__unit__stress.test.js.json +15 -0
- package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +3 -3
- package/.agent/history/snapshots/test__unit__utils.test.js.json +10 -0
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2033 -263
- package/.agent/rules/GEMINI.md +11 -9
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/ast_context_loader.js +137 -0
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/memory_engine.js +581 -0
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/payload_schemas.js +146 -0
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +166 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +397 -200
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +126 -13
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +22 -3
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
- package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
- package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +2 -1
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +10 -12
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +2 -1
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/.claude/CLAUDE.md +442 -0
- package/CONTRIBUTING.md +3 -3
- package/README.md +105 -45
- package/SECURITY.md +11 -11
- package/bin/adapter-install.js +240 -0
- package/bin/global-store.js +48 -0
- package/bin/mcp-server.js +781 -332
- package/bin/proxy-server.js +113 -0
- package/bin/spawn-agent.js +39 -0
- package/bin/tk-proxy.js +34 -0
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +40 -46
- package/dist/cli.js +6 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/init.js +8 -51
- package/dist/commands/status.js +61 -30
- package/dist/commands/validate.js +22 -31
- package/dist/index.d.ts +8 -1
- package/dist/tui/banner.js +77 -0
- package/dist/tui/index.js +21 -0
- package/dist/tui/reviewer-grid.js +90 -0
- package/dist/tui/shimmer.js +91 -0
- package/dist/tui/theme.js +130 -0
- package/dist/tui/tree.js +93 -0
- package/dist/tui/wizard.js +148 -0
- package/dist/utils/helpers.js +5 -41
- package/package.json +33 -15
- package/scripts/benchmark.js +62 -86
- package/scripts/build-graph.js +71 -0
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- package/scripts/visual_audit.js +23 -13
- package/.agent/history/snapshots/migrate_refs.js.json +0 -11
- package/.agent/scripts/compile_router.py +0 -112
- package/.agent/scripts/migrate_skills_frontmatter.py +0 -64
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* node .agent/scripts/verify_all.js --skip build,deps
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
'use strict';
|
|
13
13
|
|
|
14
|
-
const fs = require(
|
|
15
|
-
const path = require(
|
|
16
|
-
const { execFileSync } = require(
|
|
14
|
+
const fs = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const { execFileSync } = require('child_process');
|
|
17
17
|
|
|
18
18
|
const {
|
|
19
19
|
RED,
|
|
@@ -28,31 +28,31 @@ const {
|
|
|
28
28
|
summaryTable,
|
|
29
29
|
timer,
|
|
30
30
|
formatMs,
|
|
31
|
-
} = require(
|
|
31
|
+
} = require('./_colors');
|
|
32
32
|
|
|
33
|
-
const { walkDir, hasNpm } = require(
|
|
33
|
+
const { walkDir, hasNpm } = require('./_utils');
|
|
34
34
|
|
|
35
35
|
// ── Results Tracking ────────────────────────────────────────────────────────
|
|
36
36
|
|
|
37
37
|
const RESULTS = [];
|
|
38
38
|
|
|
39
39
|
function trackOk(label, ms, note) {
|
|
40
|
-
const timing = ms != null ? `${DIM}(${formatMs(ms)})${RESET}` :
|
|
41
|
-
const noteStr = note ? ` ${DIM}${note}${RESET}` :
|
|
40
|
+
const timing = ms != null ? `${DIM}(${formatMs(ms)})${RESET}` : '';
|
|
41
|
+
const noteStr = note ? ` ${DIM}${note}${RESET}` : '';
|
|
42
42
|
console.log(` ${GREEN}✅ ${label}${RESET} ${timing}${noteStr}`);
|
|
43
|
-
RESULTS.push({ name: label, status:
|
|
43
|
+
RESULTS.push({ name: label, status: 'pass', ms, note: note || '' });
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
function trackFail(label, ms, note) {
|
|
47
|
-
const timing = ms != null ? `${DIM}(${formatMs(ms)})${RESET}` :
|
|
48
|
-
const noteStr = note ? `\n ${note}` :
|
|
47
|
+
const timing = ms != null ? `${DIM}(${formatMs(ms)})${RESET}` : '';
|
|
48
|
+
const noteStr = note ? `\n ${note}` : '';
|
|
49
49
|
console.log(` ${RED}❌ ${label}${RESET} ${timing}${noteStr}`);
|
|
50
|
-
RESULTS.push({ name: label, status:
|
|
50
|
+
RESULTS.push({ name: label, status: 'fail', ms, note: note || '' });
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function trackSkip(label, reason) {
|
|
54
54
|
console.log(` ${YELLOW}⏭️ ${label} — ${reason}${RESET}`);
|
|
55
|
-
RESULTS.push({ name: label, status:
|
|
55
|
+
RESULTS.push({ name: label, status: 'skip', note: `skipped: ${reason}` });
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// ── Command Runner ──────────────────────────────────────────────────────────
|
|
@@ -63,29 +63,29 @@ function trackSkip(label, reason) {
|
|
|
63
63
|
function run(label, cmd, cwd) {
|
|
64
64
|
const elapsed = timer();
|
|
65
65
|
try {
|
|
66
|
-
const isWindows = process.platform ===
|
|
66
|
+
const isWindows = process.platform === 'win32';
|
|
67
67
|
|
|
68
68
|
execFileSync(cmd[0], cmd.slice(1), {
|
|
69
69
|
cwd,
|
|
70
|
-
stdio:
|
|
70
|
+
stdio: 'pipe',
|
|
71
71
|
timeout: 120000,
|
|
72
|
-
encoding:
|
|
72
|
+
encoding: 'utf8',
|
|
73
73
|
shell: isWindows,
|
|
74
74
|
});
|
|
75
75
|
trackOk(label, elapsed());
|
|
76
76
|
return true;
|
|
77
77
|
} catch (err) {
|
|
78
78
|
const ms = elapsed();
|
|
79
|
-
if (err.code ===
|
|
80
|
-
trackSkip(label,
|
|
79
|
+
if (err.code === 'ENOENT') {
|
|
80
|
+
trackSkip(label, 'tool not installed — skipping');
|
|
81
81
|
return true;
|
|
82
82
|
}
|
|
83
83
|
if (err.killed) {
|
|
84
|
-
trackFail(label, ms,
|
|
84
|
+
trackFail(label, ms, 'timed out after 120s');
|
|
85
85
|
return false;
|
|
86
86
|
}
|
|
87
|
-
const output = ((err.stdout ||
|
|
88
|
-
trackFail(label, ms, output ? output.slice(0, 500) :
|
|
87
|
+
const output = ((err.stdout || '') + (err.stderr || '')).trim();
|
|
88
|
+
trackFail(label, ms, output ? output.slice(0, 500) : 'non-zero exit code');
|
|
89
89
|
return false;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
@@ -96,31 +96,25 @@ function run(label, cmd, cwd) {
|
|
|
96
96
|
*/
|
|
97
97
|
function scanSecrets(cwd) {
|
|
98
98
|
const elapsed = timer();
|
|
99
|
-
const patterns = [
|
|
100
|
-
"password=",
|
|
101
|
-
"secret=",
|
|
102
|
-
"api_key=",
|
|
103
|
-
"private_key=",
|
|
104
|
-
"auth_token=",
|
|
105
|
-
];
|
|
99
|
+
const patterns = ['password=', 'secret=', 'api_key=', 'private_key=', 'auth_token='];
|
|
106
100
|
const found = [];
|
|
107
101
|
|
|
108
|
-
const sourceExtensions = new Set([
|
|
102
|
+
const sourceExtensions = new Set(['.ts', '.tsx', '.js', '.jsx', '.py']);
|
|
109
103
|
const files = walkDir(cwd, { extensions: sourceExtensions });
|
|
110
104
|
|
|
111
105
|
for (const fullPath of files) {
|
|
112
106
|
let content;
|
|
113
107
|
try {
|
|
114
|
-
content = fs.readFileSync(fullPath,
|
|
108
|
+
content = fs.readFileSync(fullPath, 'utf8');
|
|
115
109
|
} catch {
|
|
116
110
|
continue;
|
|
117
111
|
}
|
|
118
112
|
|
|
119
|
-
const lines = content.split(
|
|
113
|
+
const lines = content.split('\n');
|
|
120
114
|
for (let i = 0; i < lines.length; i++) {
|
|
121
115
|
const low = lines[i].toLowerCase().trim();
|
|
122
|
-
const hasPattern = patterns.some(
|
|
123
|
-
if (hasPattern && !low.startsWith(
|
|
116
|
+
const hasPattern = patterns.some(p => low.includes(p));
|
|
117
|
+
if (hasPattern && !low.startsWith('#') && low.includes('=')) {
|
|
124
118
|
const rel = path.relative(cwd, fullPath);
|
|
125
119
|
found.push(`${rel}:${i + 1}`);
|
|
126
120
|
}
|
|
@@ -129,14 +123,10 @@ function scanSecrets(cwd) {
|
|
|
129
123
|
|
|
130
124
|
const ms = elapsed();
|
|
131
125
|
if (found.length > 0) {
|
|
132
|
-
trackFail(
|
|
126
|
+
trackFail('Secret scan', ms, found.slice(0, 5).join('\n '));
|
|
133
127
|
return false;
|
|
134
128
|
}
|
|
135
|
-
trackOk(
|
|
136
|
-
"Secret scan — no hardcoded credentials found",
|
|
137
|
-
ms,
|
|
138
|
-
`${files.length} files scanned`,
|
|
139
|
-
);
|
|
129
|
+
trackOk('Secret scan — no hardcoded credentials found', ms, `${files.length} files scanned`);
|
|
140
130
|
return true;
|
|
141
131
|
}
|
|
142
132
|
|
|
@@ -148,82 +138,81 @@ function verifyAll(cwd, skipped) {
|
|
|
148
138
|
RESULTS.length = 0; // Reset for clean runs (prevents accumulation in tests)
|
|
149
139
|
const totalTimer = timer();
|
|
150
140
|
|
|
151
|
-
console.log(sectionHeader(
|
|
152
|
-
if (!skipped.includes(
|
|
141
|
+
console.log(sectionHeader('Secret Scan', 1));
|
|
142
|
+
if (!skipped.includes('secrets')) {
|
|
153
143
|
if (!scanSecrets(cwd)) failures++;
|
|
154
144
|
} else {
|
|
155
|
-
trackSkip(
|
|
145
|
+
trackSkip('Secret scan', 'skipped by flag');
|
|
156
146
|
}
|
|
157
147
|
|
|
158
|
-
console.log(sectionHeader(
|
|
159
|
-
if (!skipped.includes(
|
|
148
|
+
console.log(sectionHeader('TypeScript', 2));
|
|
149
|
+
if (!skipped.includes('typescript')) {
|
|
160
150
|
if (hasNpm(cwd)) {
|
|
161
|
-
if (!run(
|
|
151
|
+
if (!run('tsc --noEmit', ['npx', 'tsc', '--noEmit'], cwd)) failures++;
|
|
162
152
|
} else {
|
|
163
|
-
trackSkip(
|
|
153
|
+
trackSkip('TypeScript', 'no package.json found in project');
|
|
164
154
|
}
|
|
165
155
|
} else {
|
|
166
|
-
trackSkip(
|
|
156
|
+
trackSkip('TypeScript', 'skipped by flag');
|
|
167
157
|
}
|
|
168
158
|
|
|
169
|
-
console.log(sectionHeader(
|
|
170
|
-
if (!skipped.includes(
|
|
159
|
+
console.log(sectionHeader('ESLint', 3));
|
|
160
|
+
if (!skipped.includes('lint')) {
|
|
171
161
|
if (hasNpm(cwd)) {
|
|
172
|
-
if (!run(
|
|
173
|
-
failures++;
|
|
162
|
+
if (!run('ESLint', ['npx', 'eslint', '.', '--max-warnings=0'], cwd)) failures++;
|
|
174
163
|
} else {
|
|
175
|
-
trackSkip(
|
|
164
|
+
trackSkip('ESLint', 'no package.json found in project');
|
|
176
165
|
}
|
|
177
166
|
} else {
|
|
178
|
-
trackSkip(
|
|
167
|
+
trackSkip('ESLint', 'skipped by flag');
|
|
179
168
|
}
|
|
180
169
|
|
|
181
|
-
console.log(sectionHeader(
|
|
182
|
-
if (!skipped.includes(
|
|
170
|
+
console.log(sectionHeader('Unit Tests', 4));
|
|
171
|
+
if (!skipped.includes('tests')) {
|
|
183
172
|
if (hasNpm(cwd)) {
|
|
184
|
-
if (!run(
|
|
185
|
-
failures++;
|
|
173
|
+
if (!run('Test suite', ['npm', 'test', '--', '--passWithNoTests'], cwd)) failures++;
|
|
186
174
|
} else {
|
|
187
|
-
trackSkip(
|
|
175
|
+
trackSkip('Tests', 'no package.json found in project');
|
|
188
176
|
}
|
|
189
177
|
} else {
|
|
190
|
-
trackSkip(
|
|
178
|
+
trackSkip('Tests', 'skipped by flag');
|
|
191
179
|
}
|
|
192
180
|
|
|
193
|
-
console.log(sectionHeader(
|
|
194
|
-
if (!skipped.includes(
|
|
181
|
+
console.log(sectionHeader('Build', 5));
|
|
182
|
+
if (!skipped.includes('build')) {
|
|
195
183
|
if (hasNpm(cwd)) {
|
|
196
|
-
if (!run(
|
|
184
|
+
if (!run('npm run build', ['npm', 'run', 'build'], cwd)) failures++;
|
|
197
185
|
} else {
|
|
198
|
-
trackSkip(
|
|
186
|
+
trackSkip('Build', 'no package.json found in project');
|
|
199
187
|
}
|
|
200
188
|
} else {
|
|
201
|
-
trackSkip(
|
|
189
|
+
trackSkip('Build', 'skipped by flag');
|
|
202
190
|
}
|
|
203
191
|
|
|
204
|
-
console.log(sectionHeader(
|
|
205
|
-
if (!skipped.includes(
|
|
192
|
+
console.log(sectionHeader('Dependency Audit', 6));
|
|
193
|
+
if (!skipped.includes('deps')) {
|
|
206
194
|
if (hasNpm(cwd)) {
|
|
207
|
-
if (!run(
|
|
208
|
-
failures++;
|
|
195
|
+
if (!run('npm audit', ['npm', 'audit', '--audit-level=high'], cwd)) failures++;
|
|
209
196
|
} else {
|
|
210
|
-
trackSkip(
|
|
197
|
+
trackSkip('Dependency audit', 'no package.json found in project');
|
|
211
198
|
}
|
|
212
199
|
} else {
|
|
213
|
-
trackSkip(
|
|
200
|
+
trackSkip('Dependency audit', 'skipped by flag');
|
|
214
201
|
}
|
|
215
202
|
|
|
216
|
-
console.log(sectionHeader(
|
|
217
|
-
if (!skipped.includes(
|
|
218
|
-
const cargoToml = path.join(cwd,
|
|
203
|
+
console.log(sectionHeader('Rust Core Tests', 7));
|
|
204
|
+
if (!skipped.includes('rust')) {
|
|
205
|
+
const cargoToml = path.join(cwd, 'crates', 'core', 'Cargo.toml');
|
|
219
206
|
if (fs.existsSync(cargoToml)) {
|
|
220
|
-
if (
|
|
207
|
+
if (
|
|
208
|
+
!run('Rust Core Tests', ['cargo', 'test', '--manifest-path', 'crates/core/Cargo.toml'], cwd)
|
|
209
|
+
)
|
|
221
210
|
failures++;
|
|
222
211
|
} else {
|
|
223
|
-
trackSkip(
|
|
212
|
+
trackSkip('Rust Core Tests', 'crates/core/Cargo.toml not found in project');
|
|
224
213
|
}
|
|
225
214
|
} else {
|
|
226
|
-
trackSkip(
|
|
215
|
+
trackSkip('Rust Core Tests', 'skipped by flag');
|
|
227
216
|
}
|
|
228
217
|
|
|
229
218
|
// ━━━ Summary Table ━━━
|
|
@@ -231,26 +220,20 @@ function verifyAll(cwd, skipped) {
|
|
|
231
220
|
console.log(`\n${BOLD}${CYAN}━━━ Verification Summary ━━━${RESET}`);
|
|
232
221
|
summaryTable(RESULTS);
|
|
233
222
|
|
|
234
|
-
const passCount = RESULTS.filter(
|
|
235
|
-
const failCount = RESULTS.filter(
|
|
236
|
-
const skipCount = RESULTS.filter(
|
|
223
|
+
const passCount = RESULTS.filter(r => r.status === 'pass').length;
|
|
224
|
+
const failCount = RESULTS.filter(r => r.status === 'fail').length;
|
|
225
|
+
const skipCount = RESULTS.filter(r => r.status === 'skip').length;
|
|
237
226
|
|
|
227
|
+
console.log(`\n ${DIM}Total: ${RESULTS.length} checks in ${formatMs(totalMs)}${RESET}`);
|
|
238
228
|
console.log(
|
|
239
|
-
|
|
240
|
-
);
|
|
241
|
-
console.log(
|
|
242
|
-
` ${GREEN}${passCount} passed${RESET} ${failCount > 0 ? `${RED}${failCount} failed${RESET} ` : ""}${skipCount > 0 ? `${YELLOW}${skipCount} skipped${RESET}` : ""}`,
|
|
229
|
+
` ${GREEN}${passCount} passed${RESET} ${failCount > 0 ? `${RED}${failCount} failed${RESET} ` : ''}${skipCount > 0 ? `${YELLOW}${skipCount} skipped${RESET}` : ''}`,
|
|
243
230
|
);
|
|
244
231
|
|
|
245
232
|
console.log();
|
|
246
233
|
if (failures === 0) {
|
|
247
|
-
console.log(
|
|
248
|
-
`${GREEN}${BOLD} ✔ All checks passed — safe to deploy.${RESET}`,
|
|
249
|
-
);
|
|
234
|
+
console.log(`${GREEN}${BOLD} ✔ All checks passed — safe to deploy.${RESET}`);
|
|
250
235
|
} else {
|
|
251
|
-
console.log(
|
|
252
|
-
`${RED}${BOLD} ✖ ${failures} check(s) failed — fix before deploying.${RESET}`,
|
|
253
|
-
);
|
|
236
|
+
console.log(`${RED}${BOLD} ✖ ${failures} check(s) failed — fix before deploying.${RESET}`);
|
|
254
237
|
}
|
|
255
238
|
console.log();
|
|
256
239
|
|
|
@@ -265,10 +248,10 @@ function parseArgs(argv) {
|
|
|
265
248
|
const raw = argv.slice(2);
|
|
266
249
|
|
|
267
250
|
for (let i = 0; i < raw.length; i++) {
|
|
268
|
-
if (raw[i] ===
|
|
251
|
+
if (raw[i] === '--skip' && raw[i + 1]) {
|
|
269
252
|
args.skip = raw[++i]
|
|
270
|
-
.split(
|
|
271
|
-
.map(
|
|
253
|
+
.split(',')
|
|
254
|
+
.map(s => s.trim().toLowerCase())
|
|
272
255
|
.filter(Boolean);
|
|
273
256
|
}
|
|
274
257
|
}
|
|
@@ -279,7 +262,7 @@ function main() {
|
|
|
279
262
|
const args = parseArgs(process.argv);
|
|
280
263
|
const cwd = process.cwd();
|
|
281
264
|
|
|
282
|
-
console.log(banner(
|
|
265
|
+
console.log(banner('verify_all.js', { Project: cwd }));
|
|
283
266
|
|
|
284
267
|
const failures = verifyAll(cwd, args.skip);
|
|
285
268
|
process.exit(failures > 0 ? 1 : 0);
|
|
@@ -10,43 +10,34 @@
|
|
|
10
10
|
* node .agent/scripts/visual_audit.js --file src/components/Button.tsx
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
'use strict';
|
|
14
14
|
|
|
15
|
-
const fs = require(
|
|
16
|
-
const path = require(
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
const path = require('path');
|
|
17
17
|
|
|
18
|
-
const {
|
|
19
|
-
GREEN,
|
|
20
|
-
YELLOW,
|
|
21
|
-
BOLD,
|
|
22
|
-
DIM,
|
|
23
|
-
RESET,
|
|
24
|
-
banner,
|
|
25
|
-
timer,
|
|
26
|
-
formatMs,
|
|
27
|
-
} = require("./_colors");
|
|
18
|
+
const { GREEN, YELLOW, BOLD, DIM, RESET, banner, timer, formatMs } = require('./_colors');
|
|
28
19
|
|
|
29
|
-
const { walkDir, SOURCE_EXTENSIONS } = require(
|
|
20
|
+
const { walkDir, SOURCE_EXTENSIONS } = require('./_utils');
|
|
30
21
|
|
|
31
22
|
function auditFile(filePath) {
|
|
32
23
|
let content;
|
|
33
24
|
try {
|
|
34
|
-
content = fs.readFileSync(filePath,
|
|
25
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
35
26
|
} catch {
|
|
36
27
|
return [];
|
|
37
28
|
}
|
|
38
29
|
|
|
39
30
|
const issues = [];
|
|
40
|
-
const lines = content.split(
|
|
31
|
+
const lines = content.split('\n');
|
|
41
32
|
|
|
42
33
|
for (let i = 0; i < lines.length; i++) {
|
|
43
34
|
const line = lines[i];
|
|
44
35
|
|
|
45
36
|
// Check for hardcoded hex colors when oklch or CSS variables are expected
|
|
46
|
-
if (/#([0-9a-fA-F]{3}){1,2}\b/.test(line) && !line.includes(
|
|
37
|
+
if (/#([0-9a-fA-F]{3}){1,2}\b/.test(line) && !line.includes('// ignore-color')) {
|
|
47
38
|
issues.push({
|
|
48
39
|
line: i + 1,
|
|
49
|
-
rule:
|
|
40
|
+
rule: 'oklch-color',
|
|
50
41
|
message: `Hardcoded hex color found: "${line.trim()}". Prefer OKLCH or design token CSS variables.`,
|
|
51
42
|
});
|
|
52
43
|
}
|
|
@@ -59,7 +50,7 @@ function main() {
|
|
|
59
50
|
const cwd = process.cwd();
|
|
60
51
|
const elapsed = timer();
|
|
61
52
|
|
|
62
|
-
console.log(banner(
|
|
53
|
+
console.log(banner('visual_audit.js', { Target: cwd }));
|
|
63
54
|
|
|
64
55
|
const files = walkDir(cwd, { extensions: SOURCE_EXTENSIONS });
|
|
65
56
|
let totalIssues = 0;
|
|
@@ -79,9 +70,13 @@ function main() {
|
|
|
79
70
|
console.log(`\n ${DIM}Audited ${files.length} files in ${formatMs(elapsed())}${RESET}`);
|
|
80
71
|
|
|
81
72
|
if (totalIssues === 0) {
|
|
82
|
-
console.log(
|
|
73
|
+
console.log(
|
|
74
|
+
` ${GREEN}${BOLD}✔ Visual audit complete — zero design violations found.${RESET}\n`,
|
|
75
|
+
);
|
|
83
76
|
} else {
|
|
84
|
-
console.log(
|
|
77
|
+
console.log(
|
|
78
|
+
` ${YELLOW}${BOLD}⚠ Visual audit completed with ${totalIssues} advisory issue(s).${RESET}\n`,
|
|
79
|
+
);
|
|
85
80
|
}
|
|
86
81
|
}
|
|
87
82
|
|
|
@@ -198,15 +198,34 @@
|
|
|
198
198
|
]
|
|
199
199
|
},
|
|
200
200
|
"file_extensions": {
|
|
201
|
-
".tsx": [
|
|
202
|
-
|
|
201
|
+
".tsx": [
|
|
202
|
+
"react-specialist",
|
|
203
|
+
"nextjs-react-expert",
|
|
204
|
+
"frontend-design",
|
|
205
|
+
"better-ui",
|
|
206
|
+
"expo-router-v4",
|
|
207
|
+
"playwright-ai-e2e"
|
|
208
|
+
],
|
|
209
|
+
".ts": [
|
|
210
|
+
"typescript-advanced",
|
|
211
|
+
"clean-code",
|
|
212
|
+
"lint-and-validate",
|
|
213
|
+
"opentelemetry-observability",
|
|
214
|
+
"property-based-testing"
|
|
215
|
+
],
|
|
203
216
|
".jsx": ["react-specialist", "frontend-design"],
|
|
204
217
|
".js": ["nodejs-best-practices", "clean-code", "opentelemetry-observability"],
|
|
205
218
|
".vue": ["vue-expert", "frontend-design"],
|
|
206
219
|
".py": ["python-pro", "python-patterns", "duckdb-analytical-sql", "property-based-testing"],
|
|
207
220
|
".rs": ["rust-pro"],
|
|
208
221
|
".cs": ["csharp-developer"],
|
|
209
|
-
".sql": [
|
|
222
|
+
".sql": [
|
|
223
|
+
"sql-pro",
|
|
224
|
+
"database-architect",
|
|
225
|
+
"supabase-postgres-best-practices",
|
|
226
|
+
"vector-search-pgvector",
|
|
227
|
+
"duckdb-analytical-sql"
|
|
228
|
+
],
|
|
210
229
|
".prisma": ["database-architect", "database-design", "vector-search-pgvector"],
|
|
211
230
|
".css": ["frontend-design", "better-colors", "better-typography", "swiss-design"],
|
|
212
231
|
".sh": ["bash-linux"],
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before applying animation principles to web components, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Target interaction pattern → Identify applicability of Squash & Stretch, Anticipation, Slow In/Out, or Follow Through
|
|
24
25
|
2. Volume-Preservation Rule (Section 26) → Keep UI squash/stretch subtle (max 2%-4%); if height scales to 0.97, width MUST scale to 1.03
|
|
25
26
|
3. Staging Rules (Section 31) → Direct user focus with sequential motion rather than competing simultaneous animations
|
|
@@ -31,22 +32,28 @@ Translate Disney's 12 classic principles of animation into modern CSS, Web API,
|
|
|
31
32
|
## The 6 Essential Web Principles
|
|
32
33
|
|
|
33
34
|
### 1. Squash & Stretch (Scale Elasticity)
|
|
35
|
+
|
|
34
36
|
- Compress elements slightly on impact (e.g. button press down `scale(0.97)`), then stretch slightly on release (`scale(1.02)` -> `scale(1)`).
|
|
35
37
|
- **Rule**: Preserve overall volume. If height decreases by 5%, width must expand by 5%.
|
|
36
38
|
|
|
37
39
|
### 2. Anticipation (Pre-Motion Cue)
|
|
40
|
+
|
|
38
41
|
- Before a major movement (e.g. modal sliding up), perform a micro-backwards movement (e.g. shift down `2px` for `40ms`) to prepare the user's eye.
|
|
39
42
|
|
|
40
43
|
### 3. Staging (Focus & Spatial Hierarchy)
|
|
44
|
+
|
|
41
45
|
- Direct user attention to one primary animation at a time. Never animate competing layout elements across different regions simultaneously.
|
|
42
46
|
|
|
43
47
|
### 4. Slow In & Slow Out (Easing Curves)
|
|
48
|
+
|
|
44
49
|
- Objects in nature start slow, accelerate, and decelerate gradually. Use strong ease-out curves (`cubic-bezier(0.16, 1, 0.3, 1)`) for UI entrances.
|
|
45
50
|
|
|
46
51
|
### 5. Arcs (Natural Curvilinear Trajectories)
|
|
52
|
+
|
|
47
53
|
- Human arms and physical objects move in curved arcs rather than mechanical straight lines. When moving elements across 2D space, use parabolic bezier curves or `offset-path`.
|
|
48
54
|
|
|
49
55
|
### 6. Follow Through & Overlapping Action
|
|
56
|
+
|
|
50
57
|
- Secondary elements (e.g. badge text inside a sliding card) lag slightly behind the main container (stagger delay 30ms - 50ms), creating organic physical realism.
|
|
51
58
|
|
|
52
59
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before writing animation CSS or JS, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Target animated properties → Strictly enforce GPU compositor-only properties (`transform`, `opacity`) and ban layout-triggering properties (`width`, `height`, `top`, `left`)
|
|
24
25
|
2. Scale Math Replacement (Section 29) → Use `transform: scaleX(2)` instead of animating `width`
|
|
25
26
|
3. `will-change` VRAM Management (Section 45) → Apply `will-change` dynamically during active animation and remove upon completion
|
|
@@ -31,12 +32,16 @@ Eliminate jank, layout thrashing, and frame drops to achieve locked 60fps / 120f
|
|
|
31
32
|
## 4 Performance Rules
|
|
32
33
|
|
|
33
34
|
### 1. Compositor-Only Animation Pipeline
|
|
35
|
+
|
|
34
36
|
Only animate properties handled strictly by the GPU compositor layer:
|
|
37
|
+
|
|
35
38
|
- ✅ **Compositor Properties** (Zero Layout / Zero Paint): `transform` (`translate3d`, `scale`, `rotate`) and `opacity`.
|
|
36
39
|
- ❌ **Forbidden Animating Properties** (Triggers Full Layout Re-calculation): `width`, `height`, `margin`, `padding`, `top`, `left`, `border-width`.
|
|
37
40
|
|
|
38
41
|
### 2. Replacing Width/Height Transitions with Scale Math
|
|
42
|
+
|
|
39
43
|
Instead of animating `width: 100px` to `200px`:
|
|
44
|
+
|
|
40
45
|
```css
|
|
41
46
|
/* BAD: Triggers Layout recalculation on every frame */
|
|
42
47
|
.box-bad {
|
|
@@ -52,10 +57,12 @@ Instead of animating `width: 100px` to `200px`:
|
|
|
52
57
|
```
|
|
53
58
|
|
|
54
59
|
### 3. `will-change` Management
|
|
60
|
+
|
|
55
61
|
- Apply `will-change: transform, opacity` ONLY right before or during active animation.
|
|
56
62
|
- Remove `will-change` when animation completes to free up GPU VRAM memory!
|
|
57
63
|
|
|
58
64
|
### 4. Layout Thrashing Prevention in JS
|
|
65
|
+
|
|
59
66
|
- Never interleave DOM reads (`element.offsetHeight`) with DOM writes (`element.style.height = ...`) inside requestAnimationFrame or scroll handlers. Batch all reads first, then perform all writes.
|
|
60
67
|
|
|
61
68
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before implementing UI animation code, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. CSS stylesheets → Verify presence of `@media (prefers-reduced-motion: reduce)` rules
|
|
24
25
|
2. Framer Motion / GSAP components → Query `useReducedMotion()` or `matchMedia('(prefers-reduced-motion: reduce)')`
|
|
25
26
|
3. Vestibular Trigger Replacement (Section 57) → Replace parallax scroll and 3D rotations with instant opacity cross-fades (`0 -> 1`)
|
|
@@ -31,6 +32,7 @@ Ensure UI motion respects user accessibility preferences (`prefers-reduced-motio
|
|
|
31
32
|
## 3 Tiered Reduced-Motion Rules
|
|
32
33
|
|
|
33
34
|
### Tier 1: CSS Reduced Motion Media Query
|
|
35
|
+
|
|
34
36
|
```css
|
|
35
37
|
@media (prefers-reduced-motion: reduce) {
|
|
36
38
|
*,
|
|
@@ -45,8 +47,9 @@ Ensure UI motion respects user accessibility preferences (`prefers-reduced-motio
|
|
|
45
47
|
```
|
|
46
48
|
|
|
47
49
|
### Tier 2: React & Framer Motion Hook (`useReducedMotion`)
|
|
50
|
+
|
|
48
51
|
```tsx
|
|
49
|
-
import { useReducedMotion, motion } from
|
|
52
|
+
import { useReducedMotion, motion } from 'framer-motion';
|
|
50
53
|
|
|
51
54
|
export function AccessibleCard({ children }) {
|
|
52
55
|
const shouldReduceMotion = useReducedMotion();
|
|
@@ -64,6 +67,7 @@ export function AccessibleCard({ children }) {
|
|
|
64
67
|
```
|
|
65
68
|
|
|
66
69
|
### Tier 3: Replacing Parallax & Vestibular Triggers with Instant Fades
|
|
70
|
+
|
|
67
71
|
- Disorienting motions (parallax scrolling, 3D rotations, zoom scaling) MUST be converted into instant cross-fades (`opacity: 0 -> 1`) when `prefers-reduced-motion: reduce` is active.
|
|
68
72
|
|
|
69
73
|
---
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before engineering responsive layouts or cross-device UIs, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Container Queries (`@container`) over Viewport Media Queries (Section 24) → Adapt component layouts based on parent container width (`container-type: inline-size`)
|
|
24
25
|
2. Touch Target Sizing (Section 39) → Ensure interactive controls meet min `44x44px` target size on touch devices
|
|
25
26
|
3. Fluid Clamp Scaling (Section 45) → Use `clamp()` for smooth fluid typography and spacing without abrupt media query jumps
|
|
@@ -31,7 +32,9 @@ Architect UIs that adapt fluidly to screen dimensions, container boundaries, inp
|
|
|
31
32
|
## 4 Adaptation Mechanics
|
|
32
33
|
|
|
33
34
|
### 1. Container Queries (`@container`) over Viewport Media Queries (`@media`)
|
|
35
|
+
|
|
34
36
|
- Components should adapt based on their parent container's width, NOT the global browser window size:
|
|
37
|
+
|
|
35
38
|
```css
|
|
36
39
|
.card-container {
|
|
37
40
|
container-type: inline-size;
|
|
@@ -46,14 +49,17 @@ Architect UIs that adapt fluidly to screen dimensions, container boundaries, inp
|
|
|
46
49
|
```
|
|
47
50
|
|
|
48
51
|
### 2. Touch Target Sizing (Min 44x44px)
|
|
52
|
+
|
|
49
53
|
- Interactive targets on mobile/touch interfaces MUST maintain a minimum tap target size of `44x44px` (or `48x48px` for Android), even if the visual icon is smaller (`16px`).
|
|
50
54
|
|
|
51
55
|
### 3. Drawer on Mobile -> Modal on Desktop
|
|
56
|
+
|
|
52
57
|
- Complex popovers or dialogs on mobile screens should render as bottom sheets (drawers) with drag-to-dismiss handles, automatically morphing into centered modals on desktop viewports ($\ge 768\text{px}$).
|
|
53
58
|
|
|
54
59
|
### 4. Fluid Typography & Spacing
|
|
60
|
+
|
|
55
61
|
- Use `clamp()` for fluid scaling without abrupt media query jumps:
|
|
56
|
-
$$\text{FontSize} = \text{clamp}(1\text{rem}, 0.8\text{rem} + 1\text{vw}, 1.75\text{rem})$$
|
|
62
|
+
$$\text{FontSize} = \text{clamp}(1\text{rem}, 0.8\text{rem} + 1\text{vw}, 1.75\text{rem})$$
|
|
57
63
|
|
|
58
64
|
---
|
|
59
65
|
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before building RAG pipelines or vector search components, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. Hybrid Search Requirement (Section 16) → Always combine Dense Vector Search with Sparse BM25 Search to catch exact keyword matches (IDs, versions)
|
|
24
25
|
2. Two-Stage Reranking Pipeline (Section 29) → Retrieve top ~50 candidate chunks, then rerank with a Cross-Encoder down to top 3-5 before feeding the LLM
|
|
25
26
|
3. Context XML Framing (Section 59) → Wrap retrieved chunks inside explicit `<context>` XML tags in the prompt to prevent indirect prompt injection
|
|
@@ -20,6 +20,7 @@ scripts-binding:
|
|
|
20
20
|
## Mandatory Pre-Flight Context Inspection
|
|
21
21
|
|
|
22
22
|
Before dispatching multi-agent tasks, you MUST inspect:
|
|
23
|
+
|
|
23
24
|
1. `swarm-worker-registry.md` / `task.md` → Verify target worker agents and global execution state
|
|
24
25
|
2. Context Window Budget rules (Section 1) → Trim worker payload context to max 3 files per dispatch
|
|
25
26
|
3. Handoff state signals (`COMPLETE`, `BLOCKED`, `ERROR`) → Verify terminal status handling rules
|