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
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zero-dependency interactive terminal multi-select wizard.
|
|
5
|
+
* Handles keyboard navigation, space-to-toggle, and non-TTY fallback.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const readline = require('readline');
|
|
9
|
+
const { isTTY, hasColor, RGB, GLYPHS, color, bold } = require('./theme');
|
|
10
|
+
|
|
11
|
+
class WizardPrompt {
|
|
12
|
+
displaySummary(question, options) {
|
|
13
|
+
const g = GLYPHS;
|
|
14
|
+
const prefix = color(RGB.AMBER, '?');
|
|
15
|
+
const boldQ = bold(question);
|
|
16
|
+
console.log(` ${prefix} ${boldQ}`);
|
|
17
|
+
|
|
18
|
+
for (const opt of options) {
|
|
19
|
+
const check = opt.selected
|
|
20
|
+
? color(RGB.EMERALD, g.check)
|
|
21
|
+
: color(RGB.ZINC_600, g.uncheck);
|
|
22
|
+
|
|
23
|
+
const labelColored = opt.selected
|
|
24
|
+
? color(RGB.WHITE, opt.label)
|
|
25
|
+
: color(RGB.ZINC_500, opt.label);
|
|
26
|
+
|
|
27
|
+
const detailColored = color(RGB.ZINC_600, opt.detail || '');
|
|
28
|
+
|
|
29
|
+
console.log(` ${check} ${labelColored} ${detailColored}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const hint = '[Space] Toggle · [Enter] Confirm · [A] Select All';
|
|
33
|
+
console.log(` ${color(RGB.ZINC_600, hint)}`);
|
|
34
|
+
console.log();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async selectMultiple(question, initialOptions) {
|
|
38
|
+
if (!isTTY || !process.stdin.isTTY) {
|
|
39
|
+
this.displaySummary(question, initialOptions);
|
|
40
|
+
return initialOptions;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const options = initialOptions.map(opt => ({ ...opt }));
|
|
44
|
+
let cursor = 0;
|
|
45
|
+
const g = GLYPHS;
|
|
46
|
+
|
|
47
|
+
return new Promise(resolve => {
|
|
48
|
+
readline.emitKeypressEvents(process.stdin);
|
|
49
|
+
if (process.stdin.isTTY) {
|
|
50
|
+
process.stdin.setRawMode(true);
|
|
51
|
+
}
|
|
52
|
+
process.stdin.resume();
|
|
53
|
+
|
|
54
|
+
// Hide cursor
|
|
55
|
+
process.stdout.write('\x1b[?25l');
|
|
56
|
+
|
|
57
|
+
const render = (isFinal = false) => {
|
|
58
|
+
// Move back up lines if not initial render
|
|
59
|
+
const totalLines = options.length + 3;
|
|
60
|
+
|
|
61
|
+
let out = '';
|
|
62
|
+
const prefix = color(RGB.AMBER, '?');
|
|
63
|
+
out += ` ${prefix} ${bold(question)}\n`;
|
|
64
|
+
|
|
65
|
+
options.forEach((opt, idx) => {
|
|
66
|
+
const isCursor = idx === cursor;
|
|
67
|
+
const pointer = isCursor ? color(RGB.FLAME, g.chevron) : ' ';
|
|
68
|
+
const check = opt.selected
|
|
69
|
+
? color(RGB.EMERALD, g.check)
|
|
70
|
+
: color(RGB.ZINC_600, g.uncheck);
|
|
71
|
+
|
|
72
|
+
const labelColored = opt.selected
|
|
73
|
+
? color(RGB.WHITE, bold(opt.label))
|
|
74
|
+
: color(RGB.ZINC_400, opt.label);
|
|
75
|
+
|
|
76
|
+
const detailColored = color(RGB.ZINC_600, opt.detail || '');
|
|
77
|
+
out += ` ${pointer} ${check} ${labelColored} ${detailColored}\n`;
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
if (isFinal) {
|
|
81
|
+
out += ` ${color(RGB.EMERALD, '✔ Configuration selected.')}\n`;
|
|
82
|
+
} else {
|
|
83
|
+
const hint = '[Space] Toggle · [Enter] Confirm · [A] All · [↑/↓] Move';
|
|
84
|
+
out += ` ${color(RGB.ZINC_600, hint)}\n`;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return { out, totalLines };
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
let renderedOnce = false;
|
|
91
|
+
|
|
92
|
+
const draw = (isFinal = false) => {
|
|
93
|
+
const { out } = render(isFinal);
|
|
94
|
+
if (renderedOnce) {
|
|
95
|
+
// Clear and rewrite lines
|
|
96
|
+
process.stdout.write(`\x1b[${options.length + 2}A\r`);
|
|
97
|
+
}
|
|
98
|
+
process.stdout.write(out);
|
|
99
|
+
renderedOnce = true;
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
draw();
|
|
103
|
+
|
|
104
|
+
const onKeypress = (str, key) => {
|
|
105
|
+
if (!key) return;
|
|
106
|
+
|
|
107
|
+
if (key.ctrl && key.name === 'c') {
|
|
108
|
+
cleanup();
|
|
109
|
+
process.exit(130);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (key.name === 'up' || key.name === 'k') {
|
|
113
|
+
cursor = (cursor - 1 + options.length) % options.length;
|
|
114
|
+
draw();
|
|
115
|
+
} else if (key.name === 'down' || key.name === 'j') {
|
|
116
|
+
cursor = (cursor + 1) % options.length;
|
|
117
|
+
draw();
|
|
118
|
+
} else if (key.name === 'space') {
|
|
119
|
+
options[cursor].selected = !options[cursor].selected;
|
|
120
|
+
draw();
|
|
121
|
+
} else if (str === 'a' || str === 'A') {
|
|
122
|
+
const allSelected = options.every(o => o.selected);
|
|
123
|
+
options.forEach(o => (o.selected = !allSelected));
|
|
124
|
+
draw();
|
|
125
|
+
} else if (key.name === 'return' || key.name === 'enter') {
|
|
126
|
+
cleanup();
|
|
127
|
+
draw(true);
|
|
128
|
+
resolve(options);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const cleanup = () => {
|
|
133
|
+
process.stdin.removeListener('keypress', onKeypress);
|
|
134
|
+
if (process.stdin.isTTY) {
|
|
135
|
+
process.stdin.setRawMode(false);
|
|
136
|
+
}
|
|
137
|
+
process.stdin.pause();
|
|
138
|
+
process.stdout.write('\x1b[?25h'); // restore cursor
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
process.stdin.on('keypress', onKeypress);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
module.exports = {
|
|
147
|
+
WizardPrompt,
|
|
148
|
+
};
|
package/dist/utils/helpers.js
CHANGED
|
@@ -43,47 +43,11 @@ function getKitAgent() {
|
|
|
43
43
|
}
|
|
44
44
|
return agentDir;
|
|
45
45
|
}
|
|
46
|
+
const { renderBanner } = require('../tui/banner');
|
|
47
|
+
|
|
46
48
|
function banner(quiet) {
|
|
47
|
-
if (quiet)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const art = String.raw `
|
|
51
|
-
████████╗██████╗ ██╗██████╗ ██╗ ██╗███╗ ██╗ █████╗ ██╗ ██╗ ██╗██╗████████╗
|
|
52
|
-
╚══██╔══╝██╔══██╗██║██╔══██╗██║ ██║████╗ ██║██╔══██╗██║ ██║ ██╔╝██║╚══██╔══╝
|
|
53
|
-
██║ ██████╔╝██║██████╔╝██║ ██║██╔██╗ ██║███████║██║█████╗█████╔╝ ██║ ██║
|
|
54
|
-
██║ ██╔══██╗██║██╔══██╗██║ ██║██║╚██╗██║██╔══██║██║╚════╝██╔═██╗ ██║ ██║
|
|
55
|
-
██║ ██║ ██║██║██████╔╝╚██████╔╝██║ ╚████║██║ ██║███████╗ ██║ ██╗██║ ██║
|
|
56
|
-
╚═╝ ╚═╝ ╚═╝╚═╝╚═════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ `.split('\n').filter(Boolean);
|
|
57
|
-
console.log();
|
|
58
|
-
for (const line of art) {
|
|
59
|
-
let gradientLine = ' \x1b[1m';
|
|
60
|
-
const len = line.length;
|
|
61
|
-
for (let i = 0; i < len; i++) {
|
|
62
|
-
const char = line[i];
|
|
63
|
-
if (char === ' ') {
|
|
64
|
-
gradientLine += ' ';
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
// Horizontal gradient: flame red (left) to coral/orange (right)
|
|
68
|
-
const ratio = i / len;
|
|
69
|
-
const r = 255;
|
|
70
|
-
const g = Math.floor(30 + ratio * 100);
|
|
71
|
-
const b = Math.floor(60 - ratio * 40);
|
|
72
|
-
gradientLine += `\x1b[38;2;${r};${g};${b}m${char}`;
|
|
73
|
-
}
|
|
74
|
-
gradientLine += '\x1b[0m';
|
|
75
|
-
(0, logger_1.log)(gradientLine);
|
|
76
|
-
}
|
|
77
|
-
console.log();
|
|
78
|
-
// Subtitle strip
|
|
79
|
-
const W = 84;
|
|
80
|
-
const plainSub = '🛡️ ANTI-HALLUCINATION AGENT SYSTEM';
|
|
81
|
-
const coloredSub = `${(0, logger_1.bold)((0, logger_1.c)('white', '🛡️ ANTI-HALLUCINATION AGENT SYSTEM'))}`;
|
|
82
|
-
const sp = Math.max(0, W - plainSub.length);
|
|
83
|
-
const centred = ' '.repeat(Math.floor(sp / 2)) + coloredSub + ' '.repeat(Math.ceil(sp / 2));
|
|
84
|
-
(0, logger_1.log)(` ${(0, logger_1.c)('gray', `✦ ${'━'.repeat(W - 6)} ✦`)}`);
|
|
85
|
-
(0, logger_1.log)(` ${centred}`);
|
|
86
|
-
(0, logger_1.log)(` ${(0, logger_1.c)('gray', `✦ ${'━'.repeat(W - 6)} ✦`)}`);
|
|
87
|
-
console.log();
|
|
49
|
+
if (quiet) return;
|
|
50
|
+
const PKG = require('../../package.json');
|
|
51
|
+
renderBanner(PKG.version, quiet);
|
|
88
52
|
}
|
|
89
53
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tribunal-kit",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Your AI writes code that doesn't exist. Tribunal Kit stops it. The governance layer for AI coding agents —
|
|
3
|
+
"version": "8.0.0",
|
|
4
|
+
"description": "Your AI writes code that doesn't exist. Tribunal Kit stops it. The governance layer for AI coding agents — 52 specialists, 28 parallel reviewers, 183 skills, Rust core, MCP server. Works with Cursor, VSCode, Windsurf, Claude Code, and Aider.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
7
7
|
"ai-agent",
|
|
@@ -43,13 +43,19 @@
|
|
|
43
43
|
"ai-code-reviewer",
|
|
44
44
|
"hallucination-mitigation",
|
|
45
45
|
"autonomous-workflows",
|
|
46
|
-
"code-correctness"
|
|
46
|
+
"code-correctness",
|
|
47
|
+
"claude-code-plugin",
|
|
48
|
+
"claude-plugin"
|
|
47
49
|
],
|
|
48
50
|
"homepage": "https://github.com/Harmitx7/tribunal-kit",
|
|
49
51
|
"repository": {
|
|
50
52
|
"type": "git",
|
|
51
53
|
"url": "git+https://github.com/Harmitx7/tribunal-kit.git"
|
|
52
54
|
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/Harmitx7/tribunal-kit/issues"
|
|
57
|
+
},
|
|
58
|
+
"author": "Harmitx7",
|
|
53
59
|
"license": "MIT",
|
|
54
60
|
"types": "dist/index.d.ts",
|
|
55
61
|
"main": "dist/cli.js",
|
|
@@ -63,26 +69,33 @@
|
|
|
63
69
|
},
|
|
64
70
|
"bin": {
|
|
65
71
|
"tribunal-kit": "bin/wrapper.js",
|
|
66
|
-
"tk": "bin/wrapper.js"
|
|
72
|
+
"tk": "bin/wrapper.js",
|
|
73
|
+
"tk-proxy": "bin/tk-proxy.js",
|
|
74
|
+
"tk-adapt": "bin/adapter-install.js"
|
|
67
75
|
},
|
|
68
76
|
"files": [
|
|
69
77
|
"bin/",
|
|
70
78
|
"dist/",
|
|
71
79
|
"scripts/",
|
|
72
80
|
".agent/",
|
|
81
|
+
".claude/CLAUDE.md",
|
|
73
82
|
"README.md",
|
|
74
83
|
"LICENSE",
|
|
75
84
|
"SECURITY.md",
|
|
76
85
|
"CONTRIBUTING.md",
|
|
77
|
-
"mcp_config.json"
|
|
86
|
+
"mcp_config.json",
|
|
87
|
+
".agent/config/plugin.json",
|
|
88
|
+
".agent/config/system-prompt.md",
|
|
89
|
+
".agent/config/slash-commands.json",
|
|
90
|
+
".agent/config/specialist-registry.json"
|
|
78
91
|
],
|
|
79
92
|
"engines": {
|
|
80
93
|
"node": ">=18.0.0"
|
|
81
94
|
},
|
|
82
95
|
"scripts": {
|
|
83
|
-
"test": "npm run validate-payload && jest --runInBand --coverage",
|
|
84
|
-
"test:unit": "jest test/unit --coverage",
|
|
85
|
-
"test:integration": "jest test/integration --coverage",
|
|
96
|
+
"test": "npm run validate-payload && jest --runInBand --coverage --forceExit",
|
|
97
|
+
"test:unit": "jest test/unit --coverage --forceExit",
|
|
98
|
+
"test:integration": "jest test/integration --coverage --forceExit",
|
|
86
99
|
"preversion": "node scripts/sync-version.js",
|
|
87
100
|
"version": "node scripts/changelog.js && git add CHANGELOG.md",
|
|
88
101
|
"changelog": "node scripts/changelog.js",
|
|
@@ -90,11 +103,12 @@
|
|
|
90
103
|
"sync": "node scripts/sync-version.js",
|
|
91
104
|
"validate-payload": "node scripts/validate-payload.js",
|
|
92
105
|
"benchmark": "node scripts/benchmark.js",
|
|
106
|
+
"benchmark:stress": "node scripts/stress_benchmark.js",
|
|
93
107
|
"benchmark:rust": "cargo build --release && node scripts/benchmark.js",
|
|
94
108
|
"build:rust": "cargo build --release",
|
|
95
109
|
"build:core": "cargo build --release --manifest-path crates/core/Cargo.toml",
|
|
96
110
|
"test:rust": "cargo test --manifest-path crates/core/Cargo.toml",
|
|
97
|
-
"test:all": "npm run validate-payload && npm run test:rust && jest --runInBand --coverage",
|
|
111
|
+
"test:all": "npm run validate-payload && npm run test:rust && jest --runInBand --coverage --forceExit",
|
|
98
112
|
"format": "prettier --write .",
|
|
99
113
|
"format:check": "prettier --check .",
|
|
100
114
|
"build": "npm run build:rust"
|
|
@@ -106,12 +120,12 @@
|
|
|
106
120
|
"typescript": "^5.4.5"
|
|
107
121
|
},
|
|
108
122
|
"optionalDependencies": {
|
|
109
|
-
"@tribunal-kit/core-darwin-arm64": "^
|
|
110
|
-
"@tribunal-kit/core-darwin-x64": "^
|
|
111
|
-
"@tribunal-kit/core-linux-arm64": "^
|
|
112
|
-
"@tribunal-kit/core-linux-x64": "^
|
|
113
|
-
"@tribunal-kit/core-win32-arm64": "^
|
|
114
|
-
"@tribunal-kit/core-win32-x64": "^
|
|
123
|
+
"@tribunal-kit/core-darwin-arm64": "^8.0.0",
|
|
124
|
+
"@tribunal-kit/core-darwin-x64": "^8.0.0",
|
|
125
|
+
"@tribunal-kit/core-linux-arm64": "^8.0.0",
|
|
126
|
+
"@tribunal-kit/core-linux-x64": "^8.0.0",
|
|
127
|
+
"@tribunal-kit/core-win32-arm64": "^8.0.0",
|
|
128
|
+
"@tribunal-kit/core-win32-x64": "^8.0.0"
|
|
115
129
|
},
|
|
116
130
|
"jest": {
|
|
117
131
|
"testMatch": [
|
|
@@ -124,5 +138,9 @@
|
|
|
124
138
|
".agent/scripts/**/*.js",
|
|
125
139
|
"dist/**/*.js"
|
|
126
140
|
]
|
|
141
|
+
},
|
|
142
|
+
"dependencies": {
|
|
143
|
+
"better-sqlite3": "^13.0.3",
|
|
144
|
+
"zod": "^4.5.4"
|
|
127
145
|
}
|
|
128
146
|
}
|
package/scripts/benchmark.js
CHANGED
|
@@ -6,22 +6,22 @@
|
|
|
6
6
|
* Run: node scripts/benchmark.js
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
const { spawnSync } = require(
|
|
10
|
-
const path = require(
|
|
11
|
-
const fs = require(
|
|
12
|
-
const os = require(
|
|
9
|
+
const { spawnSync } = require('child_process');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const os = require('os');
|
|
13
13
|
|
|
14
14
|
// ANSI colors
|
|
15
15
|
const C = {
|
|
16
|
-
reset:
|
|
17
|
-
bold:
|
|
18
|
-
dim:
|
|
19
|
-
red:
|
|
20
|
-
green:
|
|
21
|
-
yellow:
|
|
22
|
-
cyan:
|
|
23
|
-
white:
|
|
24
|
-
gray:
|
|
16
|
+
reset: '\x1b[0m',
|
|
17
|
+
bold: '\x1b[1m',
|
|
18
|
+
dim: '\x1b[2m',
|
|
19
|
+
red: '\x1b[91m',
|
|
20
|
+
green: '\x1b[92m',
|
|
21
|
+
yellow: '\x1b[93m',
|
|
22
|
+
cyan: '\x1b[96m',
|
|
23
|
+
white: '\x1b[97m',
|
|
24
|
+
gray: '\x1b[90m',
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
function c(color, text) {
|
|
@@ -59,10 +59,10 @@ function benchmarkCommand(label, command, runs = 3) {
|
|
|
59
59
|
return benchmark(
|
|
60
60
|
label,
|
|
61
61
|
() => {
|
|
62
|
-
spawnSync(
|
|
63
|
-
stdio:
|
|
64
|
-
encoding:
|
|
65
|
-
env: { ...process.env, TK_SKIP_UPDATE_CHECK:
|
|
62
|
+
spawnSync('node', command.split(' '), {
|
|
63
|
+
stdio: 'pipe',
|
|
64
|
+
encoding: 'utf8',
|
|
65
|
+
env: { ...process.env, TK_SKIP_UPDATE_CHECK: '1' },
|
|
66
66
|
});
|
|
67
67
|
},
|
|
68
68
|
runs,
|
|
@@ -72,67 +72,50 @@ function benchmarkCommand(label, command, runs = 3) {
|
|
|
72
72
|
async function main() {
|
|
73
73
|
console.log();
|
|
74
74
|
console.log(bold(` ⚡ Tribunal-Kit Performance Benchmark`));
|
|
75
|
-
console.log(c(
|
|
76
|
-
console.log(c(
|
|
77
|
-
console.log(c(
|
|
78
|
-
console.log(
|
|
79
|
-
|
|
80
|
-
"gray",
|
|
81
|
-
` CPUs: ${os.cpus().length}x ${os.cpus()[0]?.model || "unknown"}`,
|
|
82
|
-
),
|
|
83
|
-
);
|
|
84
|
-
console.log(c("gray", ` ─────────────────────────────────────────`));
|
|
75
|
+
console.log(c('gray', ` ─────────────────────────────────────────`));
|
|
76
|
+
console.log(c('gray', ` Platform: ${os.platform()} ${os.arch()}`));
|
|
77
|
+
console.log(c('gray', ` Node: ${process.version}`));
|
|
78
|
+
console.log(c('gray', ` CPUs: ${os.cpus().length}x ${os.cpus()[0]?.model || 'unknown'}`));
|
|
79
|
+
console.log(c('gray', ` ─────────────────────────────────────────`));
|
|
85
80
|
console.log();
|
|
86
81
|
|
|
87
|
-
const cliPath = path.resolve(__dirname,
|
|
82
|
+
const cliPath = path.resolve(__dirname, '../bin/wrapper.js');
|
|
88
83
|
const tempDir = path.join(os.tmpdir(), `tribunal-bench-${Date.now()}`);
|
|
89
84
|
fs.mkdirSync(tempDir, { recursive: true });
|
|
90
85
|
|
|
91
86
|
const results = [];
|
|
92
87
|
|
|
93
88
|
// 1. Cold start (help)
|
|
94
|
-
console.log(c(
|
|
95
|
-
const helpResult = await benchmarkCommand(
|
|
96
|
-
"CLI cold-start (--help)",
|
|
97
|
-
`${cliPath} --help`,
|
|
98
|
-
5,
|
|
99
|
-
);
|
|
89
|
+
console.log(c('cyan', ' ▸ Benchmarking: CLI cold-start (--help)'));
|
|
90
|
+
const helpResult = await benchmarkCommand('CLI cold-start (--help)', `${cliPath} --help`, 5);
|
|
100
91
|
results.push(helpResult);
|
|
101
92
|
|
|
102
93
|
// 2. Status check
|
|
103
|
-
console.log(c(
|
|
104
|
-
const statusResult = await benchmarkCommand(
|
|
105
|
-
"Status check",
|
|
106
|
-
`${cliPath} status --quiet`,
|
|
107
|
-
5,
|
|
108
|
-
);
|
|
94
|
+
console.log(c('cyan', ' ▸ Benchmarking: tk status'));
|
|
95
|
+
const statusResult = await benchmarkCommand('Status check', `${cliPath} status --quiet`, 5);
|
|
109
96
|
results.push(statusResult);
|
|
110
97
|
|
|
111
98
|
// 3. Init (dry-run)
|
|
112
|
-
console.log(c(
|
|
99
|
+
console.log(c('cyan', ' ▸ Benchmarking: tk init --dry-run'));
|
|
113
100
|
const initResult = await benchmarkCommand(
|
|
114
|
-
|
|
101
|
+
'Init (dry-run)',
|
|
115
102
|
`${cliPath} init --dry-run --quiet --skip-update-check --path=${tempDir}`,
|
|
116
103
|
3,
|
|
117
104
|
);
|
|
118
105
|
results.push(initResult);
|
|
119
106
|
|
|
120
107
|
// 4. Init (real, to temp dir)
|
|
121
|
-
console.log(c(
|
|
108
|
+
console.log(c('cyan', ' ▸ Benchmarking: tk init (real copy)'));
|
|
122
109
|
const initRealResult = await benchmark(
|
|
123
|
-
|
|
110
|
+
'Init (full copy)',
|
|
124
111
|
() => {
|
|
125
112
|
const runDir = path.join(tempDir, `run-${Date.now()}`);
|
|
126
113
|
fs.mkdirSync(runDir, { recursive: true });
|
|
127
|
-
spawnSync(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
encoding: "utf8",
|
|
133
|
-
env: { ...process.env, TK_SKIP_UPDATE_CHECK: "1" },
|
|
134
|
-
},
|
|
135
|
-
);
|
|
114
|
+
spawnSync('node', [cliPath, 'init', '--quiet', '--skip-update-check', `--path=${runDir}`], {
|
|
115
|
+
stdio: 'pipe',
|
|
116
|
+
encoding: 'utf8',
|
|
117
|
+
env: { ...process.env, TK_SKIP_UPDATE_CHECK: '1' },
|
|
118
|
+
});
|
|
136
119
|
// Cleanup
|
|
137
120
|
try {
|
|
138
121
|
fs.rmSync(runDir, { recursive: true, force: true });
|
|
@@ -143,35 +126,35 @@ async function main() {
|
|
|
143
126
|
results.push(initRealResult);
|
|
144
127
|
|
|
145
128
|
// 5. DAG scheduling benchmark
|
|
146
|
-
console.log(c(
|
|
129
|
+
console.log(c('cyan', ' ▸ Benchmarking: DAG scheduling calculation'));
|
|
147
130
|
const dagResult = await benchmark(
|
|
148
|
-
|
|
131
|
+
'DAG wave scheduling',
|
|
149
132
|
() => {
|
|
150
133
|
const workers = [
|
|
151
|
-
{ task_id:
|
|
152
|
-
{ task_id:
|
|
153
|
-
{ task_id:
|
|
154
|
-
{ task_id:
|
|
134
|
+
{ task_id: 'w1', dependencies: [] },
|
|
135
|
+
{ task_id: 'w2', dependencies: ['w1'] },
|
|
136
|
+
{ task_id: 'w3', dependencies: ['w1'] },
|
|
137
|
+
{ task_id: 'w4', dependencies: ['w2', 'w3'] },
|
|
155
138
|
];
|
|
156
139
|
const inDegree = {};
|
|
157
140
|
const adjList = {};
|
|
158
|
-
workers.forEach(
|
|
141
|
+
workers.forEach(w => {
|
|
159
142
|
inDegree[w.task_id] = 0;
|
|
160
143
|
adjList[w.task_id] = [];
|
|
161
144
|
});
|
|
162
|
-
workers.forEach(
|
|
163
|
-
w.dependencies.forEach(
|
|
145
|
+
workers.forEach(w => {
|
|
146
|
+
w.dependencies.forEach(dep => {
|
|
164
147
|
adjList[dep].push(w.task_id);
|
|
165
148
|
inDegree[w.task_id] += 1;
|
|
166
149
|
});
|
|
167
150
|
});
|
|
168
|
-
let currentWave = Object.keys(inDegree).filter(
|
|
151
|
+
let currentWave = Object.keys(inDegree).filter(id => inDegree[id] === 0);
|
|
169
152
|
const waves = [];
|
|
170
153
|
while (currentWave.length > 0) {
|
|
171
154
|
waves.push(currentWave);
|
|
172
155
|
const next = [];
|
|
173
|
-
currentWave.forEach(
|
|
174
|
-
adjList[id].forEach(
|
|
156
|
+
currentWave.forEach(id => {
|
|
157
|
+
adjList[id].forEach(nbr => {
|
|
175
158
|
inDegree[nbr] -= 1;
|
|
176
159
|
if (inDegree[nbr] === 0) next.push(nbr);
|
|
177
160
|
});
|
|
@@ -184,12 +167,12 @@ async function main() {
|
|
|
184
167
|
results.push(dagResult);
|
|
185
168
|
|
|
186
169
|
// 6. Minimal Change Governance Engine benchmark
|
|
187
|
-
console.log(c(
|
|
170
|
+
console.log(c('cyan', ' ▸ Benchmarking: Minimal Change Governance Engine'));
|
|
188
171
|
const minResult = await benchmark(
|
|
189
|
-
|
|
172
|
+
'Minimal Change Audit',
|
|
190
173
|
() => {
|
|
191
|
-
const minEngine = require(
|
|
192
|
-
minEngine.evaluateMinimalChange(
|
|
174
|
+
const minEngine = require('../.agent/scripts/minimal_change_engine');
|
|
175
|
+
minEngine.evaluateMinimalChange('add retry logic to API requests', {
|
|
193
176
|
files_added: 0,
|
|
194
177
|
files_modified: 1,
|
|
195
178
|
estimated_lines_added: 15,
|
|
@@ -199,39 +182,32 @@ async function main() {
|
|
|
199
182
|
);
|
|
200
183
|
results.push(minResult);
|
|
201
184
|
|
|
202
|
-
|
|
203
185
|
// Print results table
|
|
204
186
|
console.log();
|
|
205
187
|
console.log(bold(` Results`));
|
|
188
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────`));
|
|
206
189
|
console.log(
|
|
207
|
-
c(
|
|
208
|
-
);
|
|
209
|
-
console.log(
|
|
210
|
-
` ${c("white", "Operation".padEnd(30))} ${c("white", "Avg (ms)".padStart(10))} ${c("white", "Min".padStart(8))} ${c("white", "Max".padStart(8))}`,
|
|
211
|
-
);
|
|
212
|
-
console.log(
|
|
213
|
-
c("gray", ` ─────────────────────────────────────────────────────────`),
|
|
190
|
+
` ${c('white', 'Operation'.padEnd(30))} ${c('white', 'Avg (ms)'.padStart(10))} ${c('white', 'Min'.padStart(8))} ${c('white', 'Max'.padStart(8))}`,
|
|
214
191
|
);
|
|
192
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────`));
|
|
215
193
|
|
|
216
194
|
for (const r of results) {
|
|
217
|
-
const avgColor = r.avg < 100 ?
|
|
195
|
+
const avgColor = r.avg < 100 ? 'green' : r.avg < 500 ? 'yellow' : 'red';
|
|
218
196
|
console.log(
|
|
219
|
-
` ${c(
|
|
197
|
+
` ${c('white', r.label.padEnd(30))} ${c(avgColor, String(Math.round(r.avg)).padStart(10))} ${c('gray', String(Math.round(r.min)).padStart(8))} ${c('gray', String(Math.round(r.max)).padStart(8))}`,
|
|
220
198
|
);
|
|
221
199
|
}
|
|
222
200
|
|
|
223
|
-
console.log(
|
|
224
|
-
c("gray", ` ─────────────────────────────────────────────────────────`),
|
|
225
|
-
);
|
|
201
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────`));
|
|
226
202
|
console.log();
|
|
227
203
|
|
|
228
204
|
// Write results to JSON for CI/comparison
|
|
229
|
-
const outputPath = path.resolve(__dirname,
|
|
205
|
+
const outputPath = path.resolve(__dirname, '../benchmark-results.json');
|
|
230
206
|
const outputData = {
|
|
231
207
|
timestamp: new Date().toISOString(),
|
|
232
208
|
platform: `${os.platform()}-${os.arch()}`,
|
|
233
209
|
node: process.version,
|
|
234
|
-
results: results.map(
|
|
210
|
+
results: results.map(r => ({
|
|
235
211
|
label: r.label,
|
|
236
212
|
avg_ms: Math.round(r.avg),
|
|
237
213
|
min_ms: Math.round(r.min),
|
|
@@ -240,7 +216,7 @@ async function main() {
|
|
|
240
216
|
})),
|
|
241
217
|
};
|
|
242
218
|
fs.writeFileSync(outputPath, JSON.stringify(outputData, null, 2));
|
|
243
|
-
console.log(c(
|
|
219
|
+
console.log(c('green', ` ✔ Results saved to benchmark-results.json`));
|
|
244
220
|
|
|
245
221
|
// Cleanup temp
|
|
246
222
|
try {
|
|
@@ -249,7 +225,7 @@ async function main() {
|
|
|
249
225
|
console.log();
|
|
250
226
|
}
|
|
251
227
|
|
|
252
|
-
main().catch(
|
|
228
|
+
main().catch(err => {
|
|
253
229
|
console.error(`Benchmark failed: ${err.message}`);
|
|
254
230
|
process.exit(1);
|
|
255
231
|
});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const { spawn } = require('child_process');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const os = require('os');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
|
|
6
|
+
async function buildSemanticGraph(targetPath = process.cwd()) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
// Determine platform-specific binary
|
|
9
|
+
const platform = os.platform();
|
|
10
|
+
const _arch = os.arch();
|
|
11
|
+
|
|
12
|
+
let binaryName = 'tribunal-core';
|
|
13
|
+
if (platform === 'win32') binaryName += '.exe';
|
|
14
|
+
|
|
15
|
+
// For development, try to use the locally compiled debug/release binary
|
|
16
|
+
let binaryPath = path.join(__dirname, '..', 'target', 'release', binaryName);
|
|
17
|
+
if (!fs.existsSync(binaryPath)) {
|
|
18
|
+
binaryPath = path.join(__dirname, '..', 'target', 'debug', binaryName);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (!fs.existsSync(binaryPath)) {
|
|
22
|
+
console.error("Tribunal Core binary not found. Please run 'npm run build:core'.");
|
|
23
|
+
return reject(new Error('Tribunal Core binary not found.'));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
console.log(`Building Semantic Context Graph for ${targetPath}...`);
|
|
27
|
+
|
|
28
|
+
const coreProcess = spawn(binaryPath, ['graph', targetPath], {
|
|
29
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
let stdoutData = '';
|
|
33
|
+
let stderrData = '';
|
|
34
|
+
|
|
35
|
+
coreProcess.stdout.on('data', data => {
|
|
36
|
+
stdoutData += data.toString();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
coreProcess.stderr.on('data', data => {
|
|
40
|
+
stderrData += data.toString();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
coreProcess.on('close', code => {
|
|
44
|
+
if (code !== 0) {
|
|
45
|
+
console.error(`Graph generation failed with code ${code}`);
|
|
46
|
+
console.error(stderrData);
|
|
47
|
+
return reject(new Error(`Graph generation failed: ${stderrData}`));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const result = JSON.parse(stdoutData.trim());
|
|
52
|
+
console.log(`Graph built successfully: ${result.nodes} nodes parsed.`);
|
|
53
|
+
console.log(`Graph saved to: ${result.graph_path}`);
|
|
54
|
+
resolve(result);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
console.error('Failed to parse core engine output:', stdoutData);
|
|
57
|
+
reject(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Allow running directly from CLI
|
|
64
|
+
if (require.main === module) {
|
|
65
|
+
const targetDir = process.argv[2] || process.cwd();
|
|
66
|
+
buildSemanticGraph(targetDir).catch(_err => {
|
|
67
|
+
process.exit(1);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = { buildSemanticGraph };
|