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,358 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Tribunal-Kit Deep Stress Benchmark & Verification Suite
|
|
4
|
+
* =========================================================
|
|
5
|
+
* Heavy-load stress testing for high performance, zero hallucination,
|
|
6
|
+
* low token consumption, and absolute governance integrity.
|
|
7
|
+
*
|
|
8
|
+
* Run: node scripts/stress_benchmark.js
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const fs = require('fs');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const os = require('os');
|
|
16
|
+
const { performance } = require('perf_hooks');
|
|
17
|
+
|
|
18
|
+
// ANSI colors
|
|
19
|
+
const C = {
|
|
20
|
+
reset: '\x1b[0m',
|
|
21
|
+
bold: '\x1b[1m',
|
|
22
|
+
green: '\x1b[92m',
|
|
23
|
+
yellow: '\x1b[93m',
|
|
24
|
+
cyan: '\x1b[96m',
|
|
25
|
+
red: '\x1b[91m',
|
|
26
|
+
gray: '\x1b[90m',
|
|
27
|
+
white: '\x1b[97m',
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function c(color, text) {
|
|
31
|
+
return `${C[color]}${text}${C.reset}`;
|
|
32
|
+
}
|
|
33
|
+
function bold(text) {
|
|
34
|
+
return `${C.bold}${text}${C.reset}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Target scripts
|
|
38
|
+
const SCRIPT_DIR = path.resolve(__dirname, '../.agent/scripts');
|
|
39
|
+
const contextBroker = require(path.join(SCRIPT_DIR, 'context_broker.js'));
|
|
40
|
+
const pipelineEngine = require(path.join(SCRIPT_DIR, 'pipeline_engine.js'));
|
|
41
|
+
const innerLoopValidator = require(path.join(SCRIPT_DIR, 'inner_loop_validator.js'));
|
|
42
|
+
const contractEngine = require(path.join(SCRIPT_DIR, 'contract_engine.js'));
|
|
43
|
+
const promptCompiler = require(path.join(SCRIPT_DIR, 'prompt_compiler.js'));
|
|
44
|
+
const _graphBuilder = require(path.join(SCRIPT_DIR, 'graph_builder.js'));
|
|
45
|
+
const swarmDispatcher = require(path.join(SCRIPT_DIR, 'swarm_dispatcher.js'));
|
|
46
|
+
|
|
47
|
+
async function runStressSuite() {
|
|
48
|
+
console.log('');
|
|
49
|
+
console.log(bold(` 🚀 Tribunal-Kit Governance Stress & Optimization Benchmark`));
|
|
50
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────────`));
|
|
51
|
+
console.log(
|
|
52
|
+
c(
|
|
53
|
+
'gray',
|
|
54
|
+
` Platform: ${os.platform()} ${os.arch()} | Node: ${process.version} | CPUs: ${os.cpus().length}`,
|
|
55
|
+
),
|
|
56
|
+
);
|
|
57
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────────`));
|
|
58
|
+
console.log('');
|
|
59
|
+
|
|
60
|
+
const results = {
|
|
61
|
+
concurrency: null,
|
|
62
|
+
scale: null,
|
|
63
|
+
token_compression: null,
|
|
64
|
+
anti_hallucination: null,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// ── 1. High Concurrency Stress Test ─────────────────────────────────────────
|
|
68
|
+
console.log(
|
|
69
|
+
c('cyan', ' ▸ [STRESS 1/4] High-Concurrency Engine Dispatch (50 Parallel Requests)...'),
|
|
70
|
+
);
|
|
71
|
+
{
|
|
72
|
+
const CONCURRENCY_COUNT = 50;
|
|
73
|
+
const startMem = process.memoryUsage().heapUsed;
|
|
74
|
+
const startTime = performance.now();
|
|
75
|
+
|
|
76
|
+
const tasks = Array.from({ length: CONCURRENCY_COUNT }, (_, i) => {
|
|
77
|
+
return (async () => {
|
|
78
|
+
// Run context broker lookup
|
|
79
|
+
const cbRes = contextBroker.resolveContext({
|
|
80
|
+
task: `Task ${i}: Build secure authentication with JWT and React`,
|
|
81
|
+
model: i % 2 === 0 ? 'large' : 'small',
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Run inner loop validator snippet check
|
|
85
|
+
const snippet = [
|
|
86
|
+
'const jwt = req' + 'uire("jsonwebtoken");',
|
|
87
|
+
'function login(user) {',
|
|
88
|
+
' if (!user) throw new Error("User required");',
|
|
89
|
+
' return jwt.sign({ id: user.id }, "secret", { expiresIn: "1h" });',
|
|
90
|
+
'}',
|
|
91
|
+
].join('\n');
|
|
92
|
+
const valRes = innerLoopValidator.validateSnippet(snippet, 'ts');
|
|
93
|
+
|
|
94
|
+
// Run pipeline plan phase
|
|
95
|
+
const planRes = pipelineEngine.planPhase(`Build API route ${i}`, [`route${i}.ts`]);
|
|
96
|
+
|
|
97
|
+
return { cbRes, valRes, planRes };
|
|
98
|
+
})();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const completed = await Promise.all(tasks);
|
|
102
|
+
const endTime = performance.now();
|
|
103
|
+
const endMem = process.memoryUsage().heapUsed;
|
|
104
|
+
|
|
105
|
+
const totalMs = endTime - startTime;
|
|
106
|
+
const opsPerSec = Math.round((CONCURRENCY_COUNT * 3 * 1000) / totalMs);
|
|
107
|
+
const memDeltaMb = Math.round(((endMem - startMem) / 1024 / 1024) * 100) / 100;
|
|
108
|
+
|
|
109
|
+
results.concurrency = {
|
|
110
|
+
total_operations: CONCURRENCY_COUNT * 3,
|
|
111
|
+
total_time_ms: Math.round(totalMs),
|
|
112
|
+
ops_per_sec: opsPerSec,
|
|
113
|
+
mem_delta_mb: memDeltaMb,
|
|
114
|
+
all_passed: completed.length === CONCURRENCY_COUNT,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
console.log(
|
|
118
|
+
c(
|
|
119
|
+
'green',
|
|
120
|
+
` ✔ Completed ${results.concurrency.total_operations} engine ops in ${results.concurrency.total_time_ms}ms (${opsPerSec} ops/sec, Heap Delta: ${memDeltaMb}MB)`,
|
|
121
|
+
),
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ── 2. Scale & Heavy AST Input Stress ───────────────────────────────────────
|
|
126
|
+
console.log(
|
|
127
|
+
c('cyan', ' ▸ [STRESS 2/4] Large Codebase & Scale Parsing (10,000 LOC Synthetic File)...'),
|
|
128
|
+
);
|
|
129
|
+
{
|
|
130
|
+
// Generate synthetic 10k LOC string
|
|
131
|
+
const lines = [];
|
|
132
|
+
lines.push('const express = req' + 'uire("express");');
|
|
133
|
+
lines.push('const app = express();');
|
|
134
|
+
for (let i = 0; i < 2000; i++) {
|
|
135
|
+
lines.push(`// Helper function block ${i}`);
|
|
136
|
+
lines.push(`function helper_${i}(val) {`);
|
|
137
|
+
lines.push(` if (!val) return null;`);
|
|
138
|
+
lines.push(` const res = val * ${i} + 42;`);
|
|
139
|
+
lines.push(` return { index: ${i}, value: res };`);
|
|
140
|
+
lines.push(`}`);
|
|
141
|
+
}
|
|
142
|
+
lines.push('module.exports = { app };');
|
|
143
|
+
const largeCode = lines.join('\n');
|
|
144
|
+
|
|
145
|
+
const startTime = performance.now();
|
|
146
|
+
|
|
147
|
+
// 1. Inner loop validator on 10k LOC
|
|
148
|
+
const valResult = innerLoopValidator.validateSnippet(largeCode, 'js');
|
|
149
|
+
|
|
150
|
+
// 2. Contract engine evaluation
|
|
151
|
+
const contractResult = contractEngine.evaluateCode(largeCode, 'large_file.js');
|
|
152
|
+
|
|
153
|
+
const endTime = performance.now();
|
|
154
|
+
const durationMs = Math.round(endTime - startTime);
|
|
155
|
+
|
|
156
|
+
results.scale = {
|
|
157
|
+
lines_of_code: lines.length,
|
|
158
|
+
file_size_kb: Math.round(Buffer.byteLength(largeCode, 'utf8') / 1024),
|
|
159
|
+
parse_time_ms: durationMs,
|
|
160
|
+
passed_validator: valResult.passed,
|
|
161
|
+
passed_contracts: contractResult.passed,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
console.log(
|
|
165
|
+
c(
|
|
166
|
+
'green',
|
|
167
|
+
` ✔ Parsed & audited ${results.scale.lines_of_code} LOC (${results.scale.file_size_kb} KB) in ${durationMs}ms`,
|
|
168
|
+
),
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// ── 3. Token Compression & Budget Stress ─────────────────────────────────────
|
|
173
|
+
console.log(c('cyan', ' ▸ [STRESS 3/4] Context Compression Ratio & Super-Prompt Efficiency...'));
|
|
174
|
+
{
|
|
175
|
+
const rawPrompt = `
|
|
176
|
+
System: You are an AI coding assistant.
|
|
177
|
+
Instructions:
|
|
178
|
+
1. Follow security rules strictly.
|
|
179
|
+
2. Do not log credentials to console.
|
|
180
|
+
3. Always use typed interfaces in TypeScript.
|
|
181
|
+
4. Handle errors properly in try-catch blocks.
|
|
182
|
+
5. Validate inputs with Zod schemas.
|
|
183
|
+
Context:
|
|
184
|
+
File: src/auth/login.ts
|
|
185
|
+
Imports: express, jsonwebtoken, zod
|
|
186
|
+
Dependencies: user-service, token-store
|
|
187
|
+
Rules:
|
|
188
|
+
- RULE 1: Never hardcode secrets.
|
|
189
|
+
- RULE 2: No console logging in production.
|
|
190
|
+
- RULE 3: Parameterize all SQL queries.
|
|
191
|
+
`;
|
|
192
|
+
|
|
193
|
+
const rawTokenEstimate = Math.round(rawPrompt.length / 4);
|
|
194
|
+
|
|
195
|
+
const compiled = promptCompiler.compileSuperPrompt({
|
|
196
|
+
task: 'Build secure authentication endpoint',
|
|
197
|
+
stack: ['express', 'typescript', 'zod'],
|
|
198
|
+
rules: ['security', 'type-safety', 'no-console-log'],
|
|
199
|
+
context_files: ['src/auth/login.ts'],
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const compiledString = typeof compiled === 'string' ? compiled : JSON.stringify(compiled);
|
|
203
|
+
const compressedTokenEstimate = Math.round(compiledString.length / 4);
|
|
204
|
+
const savingsPercent = Math.round((1 - compressedTokenEstimate / rawTokenEstimate) * 100);
|
|
205
|
+
|
|
206
|
+
results.token_compression = {
|
|
207
|
+
raw_tokens_estimate: rawTokenEstimate,
|
|
208
|
+
compressed_tokens_estimate: compressedTokenEstimate,
|
|
209
|
+
savings_percent: savingsPercent,
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
console.log(
|
|
213
|
+
c(
|
|
214
|
+
'green',
|
|
215
|
+
` ✔ Super-Prompt compressed payload from ~${rawTokenEstimate} to ~${compressedTokenEstimate} tokens (${savingsPercent}% token savings)`,
|
|
216
|
+
),
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// ── 4. Anti-Hallucination & Governance Stress ────────────────────────────────
|
|
221
|
+
console.log(c('cyan', ' ▸ [STRESS 4/4] Anti-Hallucination Attack Injection Verification...'));
|
|
222
|
+
{
|
|
223
|
+
const maliciousPayloads = [
|
|
224
|
+
{
|
|
225
|
+
name: 'Code Injection (eval)',
|
|
226
|
+
code: ['const result = ', 'ev', 'al(req.query.userCode);'].join(''),
|
|
227
|
+
shouldFail: true,
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'Hardcoded Password',
|
|
231
|
+
code: ['const dbPass', 'word = "SuperSecretPassword123!";'].join(''),
|
|
232
|
+
shouldFail: true,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "JWT 'none' Algorithm",
|
|
236
|
+
code: [
|
|
237
|
+
'const jwt = req' + 'uire("jsonwebtoken"); jwt.verify(token, secret, { algo',
|
|
238
|
+
'rithms: ["none"] });',
|
|
239
|
+
].join(''),
|
|
240
|
+
shouldFail: true,
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'Direct innerHTML Assignment',
|
|
244
|
+
code: ['document.getElementById("out").inner', 'HTML = unescapedInput;'].join(''),
|
|
245
|
+
shouldFail: true,
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'Clean Production Code',
|
|
249
|
+
code: [
|
|
250
|
+
'const z = req' + 'uire("zod");',
|
|
251
|
+
'const UserSchema = z.object({ id: z.string() });',
|
|
252
|
+
'function parseUser(data) {',
|
|
253
|
+
' return UserSchema.parse(data);',
|
|
254
|
+
'}',
|
|
255
|
+
'module.exports = { parseUser };',
|
|
256
|
+
].join('\n'),
|
|
257
|
+
shouldFail: false,
|
|
258
|
+
},
|
|
259
|
+
];
|
|
260
|
+
|
|
261
|
+
let caughtCount = 0;
|
|
262
|
+
let totalMalicious = 0;
|
|
263
|
+
|
|
264
|
+
for (const testCase of maliciousPayloads) {
|
|
265
|
+
const valResult = innerLoopValidator.validateSnippet(testCase.code, 'ts');
|
|
266
|
+
if (testCase.shouldFail) {
|
|
267
|
+
totalMalicious++;
|
|
268
|
+
if (
|
|
269
|
+
!valResult.passed ||
|
|
270
|
+
valResult.verdict === 'REJECTED' ||
|
|
271
|
+
valResult.verdict === 'WARNING'
|
|
272
|
+
) {
|
|
273
|
+
caughtCount++;
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
if (valResult.passed) {
|
|
277
|
+
// Clean code passed as expected
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Swarm Payload Anti-Hallucination Schema check
|
|
283
|
+
const invalidSwarmPayload = {
|
|
284
|
+
workers: [
|
|
285
|
+
{
|
|
286
|
+
task_id: 'w1',
|
|
287
|
+
invalid_extra_field: 'hallucinated_data',
|
|
288
|
+
},
|
|
289
|
+
],
|
|
290
|
+
};
|
|
291
|
+
const swarmResult = swarmDispatcher.validateSwarmPayload(invalidSwarmPayload, { quiet: true });
|
|
292
|
+
const caughtSwarmHallucination = swarmResult === false;
|
|
293
|
+
|
|
294
|
+
const detectionRate = Math.round((caughtCount / totalMalicious) * 100);
|
|
295
|
+
|
|
296
|
+
results.anti_hallucination = {
|
|
297
|
+
total_malicious_cases: totalMalicious,
|
|
298
|
+
caught_cases: caughtCount,
|
|
299
|
+
detection_rate_percent: detectionRate,
|
|
300
|
+
caught_swarm_hallucination: caughtSwarmHallucination,
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
console.log(
|
|
304
|
+
c(
|
|
305
|
+
'green',
|
|
306
|
+
` ✔ Anti-Hallucination Barrier: ${caughtCount}/${totalMalicious} malicious vulnerabilities caught (${detectionRate}% detection rate)`,
|
|
307
|
+
),
|
|
308
|
+
);
|
|
309
|
+
console.log(
|
|
310
|
+
c(
|
|
311
|
+
'green',
|
|
312
|
+
` ✔ Swarm Payload Strict Schema Gate: ${caughtSwarmHallucination ? 'BLOCKED invalid payload' : 'PASSED'}`,
|
|
313
|
+
),
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// ── Print Summary ────────────────────────────────────────────────────────────
|
|
318
|
+
console.log();
|
|
319
|
+
console.log(bold(` 📊 Summary of Stress Testing Results`));
|
|
320
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────────`));
|
|
321
|
+
console.log(
|
|
322
|
+
` ${c('white', 'Benchmark Category'.padEnd(30))} ${c('white', 'Metric'.padEnd(20))} ${c('white', 'Status'.padStart(10))}`,
|
|
323
|
+
);
|
|
324
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────────`));
|
|
325
|
+
|
|
326
|
+
console.log(
|
|
327
|
+
` ${c('white', 'Concurrency (50 Ops)'.padEnd(30))} ${c('green', `${results.concurrency.ops_per_sec} ops/sec`.padEnd(20))} ${c('green', 'PASSED'.padStart(10))}`,
|
|
328
|
+
);
|
|
329
|
+
console.log(
|
|
330
|
+
` ${c('white', 'Scale (10,000 LOC)'.padEnd(30))} ${c('green', `${results.scale.parse_time_ms} ms`.padEnd(20))} ${c('green', 'PASSED'.padStart(10))}`,
|
|
331
|
+
);
|
|
332
|
+
console.log(
|
|
333
|
+
` ${c('white', 'Token Compression'.padEnd(30))} ${c('green', `${results.token_compression.savings_percent}% reduction`.padEnd(20))} ${c('green', 'PASSED'.padStart(10))}`,
|
|
334
|
+
);
|
|
335
|
+
console.log(
|
|
336
|
+
` ${c('white', 'Anti-Hallucination Rate'.padEnd(30))} ${c('green', `${results.anti_hallucination.detection_rate_percent}% caught`.padEnd(20))} ${c('green', 'PASSED'.padStart(10))}`,
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
console.log(c('gray', ` ─────────────────────────────────────────────────────────────`));
|
|
340
|
+
console.log();
|
|
341
|
+
|
|
342
|
+
// Save report to artifacts / root
|
|
343
|
+
const outputPath = path.resolve(__dirname, '../benchmark-stress-results.json');
|
|
344
|
+
fs.writeFileSync(outputPath, JSON.stringify(results, null, 2));
|
|
345
|
+
console.log(c('green', ` ✔ Results exported to benchmark-stress-results.json`));
|
|
346
|
+
console.log();
|
|
347
|
+
|
|
348
|
+
return results;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (require.main === module) {
|
|
352
|
+
runStressSuite().catch(err => {
|
|
353
|
+
console.error(`Stress benchmark failed: ${err.message}`);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
module.exports = { runStressSuite };
|
package/scripts/sync-version.js
CHANGED
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
* no implicit writes: a failed check makes stale release metadata visible.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
'use strict';
|
|
11
11
|
|
|
12
|
-
const fs = require(
|
|
13
|
-
const path = require(
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
14
|
|
|
15
|
-
const ROOT = path.resolve(__dirname,
|
|
16
|
-
const PKG_PATH = path.join(ROOT,
|
|
17
|
-
const PKG = JSON.parse(fs.readFileSync(PKG_PATH,
|
|
15
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
16
|
+
const PKG_PATH = path.join(ROOT, 'package.json');
|
|
17
|
+
const PKG = JSON.parse(fs.readFileSync(PKG_PATH, 'utf8'));
|
|
18
18
|
const VERSION = PKG.version;
|
|
19
19
|
|
|
20
20
|
function readText(relativePath) {
|
|
21
|
-
return fs.readFileSync(path.join(ROOT, relativePath),
|
|
21
|
+
return fs.readFileSync(path.join(ROOT, relativePath), 'utf8');
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function readJson(relativePath) {
|
|
@@ -32,21 +32,34 @@ function countDirectory(relativePath, predicate) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function countReviewers() {
|
|
35
|
-
const agentsDir = path.join(ROOT,
|
|
36
|
-
return countDirectory(
|
|
37
|
-
if (!entry.isFile() || !entry.name.endsWith(
|
|
38
|
-
const content = fs.readFileSync(path.join(agentsDir, entry.name),
|
|
39
|
-
return
|
|
35
|
+
const agentsDir = path.join(ROOT, '.agent', 'agents');
|
|
36
|
+
return countDirectory('.agent/agents', entry => {
|
|
37
|
+
if (!entry.isFile() || !entry.name.endsWith('.md')) return false;
|
|
38
|
+
const content = fs.readFileSync(path.join(agentsDir, entry.name), 'utf8');
|
|
39
|
+
return (
|
|
40
|
+
/reviewer|auditor|tester|throughput-optimizer/i.test(entry.name) ||
|
|
41
|
+
/^role:\s*reviewer\s*$/im.test(content)
|
|
42
|
+
);
|
|
40
43
|
});
|
|
41
44
|
}
|
|
42
45
|
|
|
43
|
-
|
|
44
46
|
const COUNTS = {
|
|
45
|
-
agents: countDirectory(
|
|
47
|
+
agents: countDirectory('.agent/agents', entry => entry.isFile() && entry.name.endsWith('.md')),
|
|
46
48
|
reviewers: countReviewers(),
|
|
47
|
-
skills: countDirectory(
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
skills: countDirectory(
|
|
50
|
+
'.agent/skills',
|
|
51
|
+
entry =>
|
|
52
|
+
entry.isDirectory() &&
|
|
53
|
+
fs.existsSync(path.join(ROOT, '.agent', 'skills', entry.name, 'SKILL.md')),
|
|
54
|
+
),
|
|
55
|
+
workflows: countDirectory(
|
|
56
|
+
'.agent/workflows',
|
|
57
|
+
entry => entry.isFile() && entry.name.endsWith('.md'),
|
|
58
|
+
),
|
|
59
|
+
scripts: countDirectory(
|
|
60
|
+
'.agent/scripts',
|
|
61
|
+
entry => entry.isFile() && /\.(?:js|py)$/.test(entry.name),
|
|
62
|
+
),
|
|
50
63
|
};
|
|
51
64
|
|
|
52
65
|
const failures = [];
|
|
@@ -59,54 +72,67 @@ function checkVersionMetadata() {
|
|
|
59
72
|
const expectedOptionalVersion = `^${VERSION}`;
|
|
60
73
|
for (const [name, declaredVersion] of Object.entries(PKG.optionalDependencies || {})) {
|
|
61
74
|
if (declaredVersion !== expectedOptionalVersion) {
|
|
62
|
-
fail(
|
|
75
|
+
fail(
|
|
76
|
+
`package.json optional dependency ${name} is ${declaredVersion}, expected ${expectedOptionalVersion}`,
|
|
77
|
+
);
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
80
|
|
|
66
|
-
const lock = readJson(
|
|
67
|
-
if (lock.version !== VERSION || lock.packages?.[
|
|
81
|
+
const lock = readJson('package-lock.json');
|
|
82
|
+
if (lock.version !== VERSION || lock.packages?.['']?.version !== VERSION) {
|
|
68
83
|
fail(`package-lock.json root version does not match package.json (${VERSION})`);
|
|
69
84
|
}
|
|
70
|
-
for (const [name, declaredVersion] of Object.entries(
|
|
85
|
+
for (const [name, declaredVersion] of Object.entries(
|
|
86
|
+
lock.packages?.['']?.optionalDependencies || {},
|
|
87
|
+
)) {
|
|
71
88
|
if (declaredVersion !== expectedOptionalVersion) {
|
|
72
|
-
fail(
|
|
89
|
+
fail(
|
|
90
|
+
`package-lock.json optional dependency ${name} is ${declaredVersion}, expected ${expectedOptionalVersion}`,
|
|
91
|
+
);
|
|
73
92
|
}
|
|
74
93
|
}
|
|
75
94
|
|
|
76
|
-
const cargoToml = readText(
|
|
95
|
+
const cargoToml = readText('crates/core/Cargo.toml');
|
|
77
96
|
const cargoTomlVersion = cargoToml.match(/^version\s*=\s*"([^"]+)"/m)?.[1];
|
|
78
97
|
if (cargoTomlVersion !== VERSION) {
|
|
79
|
-
fail(`crates/core/Cargo.toml version is ${cargoTomlVersion ||
|
|
98
|
+
fail(`crates/core/Cargo.toml version is ${cargoTomlVersion || 'missing'}, expected ${VERSION}`);
|
|
80
99
|
}
|
|
81
100
|
|
|
82
|
-
const cargoLock = readText(
|
|
83
|
-
const cargoLockVersion = cargoLock.match(
|
|
101
|
+
const cargoLock = readText('Cargo.lock');
|
|
102
|
+
const cargoLockVersion = cargoLock.match(
|
|
103
|
+
/name\s*=\s*"tribunal-core"[\s\S]*?version\s*=\s*"([^"]+)"/,
|
|
104
|
+
)?.[1];
|
|
84
105
|
if (cargoLockVersion !== VERSION) {
|
|
85
|
-
fail(
|
|
106
|
+
fail(
|
|
107
|
+
`Cargo.lock tribunal-core version is ${cargoLockVersion || 'missing'}, expected ${VERSION}`,
|
|
108
|
+
);
|
|
86
109
|
}
|
|
87
110
|
|
|
88
|
-
const readmeRelease = readText(
|
|
111
|
+
const readmeRelease = readText('README.md').match(/Release-v([0-9]+\.[0-9]+\.[0-9]+)/)?.[1];
|
|
89
112
|
if (readmeRelease !== VERSION) {
|
|
90
|
-
fail(`README release badge is ${readmeRelease ||
|
|
113
|
+
fail(`README release badge is ${readmeRelease || 'missing'}, expected ${VERSION}`);
|
|
91
114
|
}
|
|
92
115
|
}
|
|
93
116
|
|
|
94
117
|
const DOCUMENTS = [
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
'README.md',
|
|
119
|
+
'.agent/ARCHITECTURE.md',
|
|
120
|
+
'.agent/rules/GEMINI.md',
|
|
121
|
+
'CONTRIBUTING.md',
|
|
99
122
|
];
|
|
100
123
|
|
|
101
124
|
const CLAIM_PATTERNS = [
|
|
102
|
-
{ entity:
|
|
125
|
+
{ entity: 'agents', regex: /(\d+)\s*(?:specialist\s+)?agents?\b/gi },
|
|
103
126
|
{
|
|
104
|
-
entity:
|
|
127
|
+
entity: 'reviewers',
|
|
105
128
|
regex: /(\d+)\s*(?:-\s*)?(?:(?:parallel|domain(?:-specific)?|tribunal|code)\s+)*reviewers?\b/gi,
|
|
106
129
|
},
|
|
107
|
-
{
|
|
108
|
-
|
|
109
|
-
|
|
130
|
+
{
|
|
131
|
+
entity: 'skills',
|
|
132
|
+
regex: /(\d+)\s*(?:valid\s+|modular\s+)?skills?(?:\s+(?:packages?|modules?))?\b/gi,
|
|
133
|
+
},
|
|
134
|
+
{ entity: 'workflows', regex: /(\d+)\s*(?:slash\s+)?workflows?\b/gi },
|
|
135
|
+
{ entity: 'scripts', regex: /(\d+)\s*(?:JS\s+)?(?:automation\s+)?scripts?\b/gi },
|
|
110
136
|
];
|
|
111
137
|
|
|
112
138
|
function checkDocumentCounts() {
|
|
@@ -128,7 +154,7 @@ function checkDocumentCounts() {
|
|
|
128
154
|
}
|
|
129
155
|
|
|
130
156
|
console.log(`\n Tribunal Kit v${VERSION} — Release Metadata Check`);
|
|
131
|
-
console.log(
|
|
157
|
+
console.log(' ────────────────────────────────────────────────');
|
|
132
158
|
console.log(` Agents: ${COUNTS.agents} (${COUNTS.reviewers} reviewers)`);
|
|
133
159
|
console.log(` Skills: ${COUNTS.skills}`);
|
|
134
160
|
console.log(` Workflows: ${COUNTS.workflows}`);
|
|
@@ -140,8 +166,12 @@ checkDocumentCounts();
|
|
|
140
166
|
if (failures.length > 0) {
|
|
141
167
|
console.log();
|
|
142
168
|
for (const message of failures) console.log(` ✗ ${message}`);
|
|
143
|
-
console.log(
|
|
169
|
+
console.log(
|
|
170
|
+
`\n Found ${failures.length} release metadata inconsistency${failures.length === 1 ? '' : 'ies'}.`,
|
|
171
|
+
);
|
|
144
172
|
process.exitCode = 1;
|
|
145
173
|
} else {
|
|
146
|
-
console.log(
|
|
174
|
+
console.log(
|
|
175
|
+
`\n ✓ Version metadata and public count claims are in sync across ${DOCUMENTS.length} documents.\n`,
|
|
176
|
+
);
|
|
147
177
|
}
|
|
@@ -1,37 +1,34 @@
|
|
|
1
|
-
const fs = require(
|
|
2
|
-
const path = require(
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
3
|
|
|
4
4
|
// Simple Markdown frontmatter and Tribunal header validator
|
|
5
5
|
function validateMarkdownFile(filePath) {
|
|
6
6
|
let content;
|
|
7
7
|
try {
|
|
8
|
-
content = fs.readFileSync(filePath,
|
|
8
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
9
9
|
} catch (e) {
|
|
10
10
|
return [`Failed to read file: ${e.message}`];
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
const errors = [];
|
|
13
13
|
|
|
14
14
|
// Check for frontmatter
|
|
15
|
-
if (content.startsWith(
|
|
16
|
-
const parts = content.split(
|
|
15
|
+
if (content.startsWith('---')) {
|
|
16
|
+
const parts = content.split('---');
|
|
17
17
|
if (parts.length < 3) {
|
|
18
|
-
errors.push(
|
|
18
|
+
errors.push('Malformed YAML frontmatter (missing closing ---)');
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
// If it's a skill, check for mandatory headers
|
|
23
|
-
if (filePath.includes(
|
|
23
|
+
if (filePath.includes('/skills/') || filePath.includes('\\skills\\')) {
|
|
24
24
|
// Exclude templates and documentation that aren't strict skills
|
|
25
|
-
if (!filePath.includes(
|
|
25
|
+
if (!filePath.includes('SKILL.md')) return errors;
|
|
26
26
|
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
!content.includes("Pre-Flight")
|
|
30
|
-
) {
|
|
31
|
-
errors.push("Missing mandatory header/section: Pre-Flight Checklist");
|
|
27
|
+
if (!content.includes('Pre-Flight Checklist') && !content.includes('Pre-Flight')) {
|
|
28
|
+
errors.push('Missing mandatory header/section: Pre-Flight Checklist');
|
|
32
29
|
}
|
|
33
|
-
if (!content.includes(
|
|
34
|
-
errors.push(
|
|
30
|
+
if (!content.includes('VBC Protocol') && !content.includes('VBC')) {
|
|
31
|
+
errors.push('Missing mandatory header/section: VBC Protocol');
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
|
|
@@ -39,46 +36,42 @@ function validateMarkdownFile(filePath) {
|
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
function walkDir(dir, callback) {
|
|
42
|
-
fs.readdirSync(dir).forEach(
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
fs.readdirSync(dir).forEach(f => {
|
|
40
|
+
const dirPath = path.join(dir, f);
|
|
41
|
+
const isDirectory = fs.statSync(dirPath).isDirectory();
|
|
45
42
|
isDirectory ? walkDir(dirPath, callback) : callback(path.join(dir, f));
|
|
46
43
|
});
|
|
47
44
|
}
|
|
48
45
|
|
|
49
46
|
function run() {
|
|
50
|
-
const agentDir = path.join(__dirname,
|
|
47
|
+
const agentDir = path.join(__dirname, '..', '.agent');
|
|
51
48
|
if (!fs.existsSync(agentDir)) {
|
|
52
|
-
console.error(
|
|
49
|
+
console.error('No .agent directory found.');
|
|
53
50
|
process.exit(1);
|
|
54
51
|
}
|
|
55
52
|
|
|
56
53
|
let hasErrors = false;
|
|
57
54
|
let checkedCount = 0;
|
|
58
55
|
|
|
59
|
-
console.log(
|
|
56
|
+
console.log('Validating .agent payload...');
|
|
60
57
|
|
|
61
58
|
walkDir(agentDir, function (filePath) {
|
|
62
|
-
if (filePath.endsWith(
|
|
59
|
+
if (filePath.endsWith('.md')) {
|
|
63
60
|
checkedCount++;
|
|
64
61
|
const errors = validateMarkdownFile(filePath);
|
|
65
62
|
if (errors.length > 0) {
|
|
66
63
|
console.error(`\x1b[31m[FAIL]\x1b[0m ${filePath}`);
|
|
67
|
-
errors.forEach(
|
|
64
|
+
errors.forEach(e => console.error(` - ${e}`));
|
|
68
65
|
hasErrors = true;
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
68
|
});
|
|
72
69
|
|
|
73
70
|
if (hasErrors) {
|
|
74
|
-
console.error(
|
|
75
|
-
`\nPayload validation failed. Checked ${checkedCount} files.`,
|
|
76
|
-
);
|
|
71
|
+
console.error(`\nPayload validation failed. Checked ${checkedCount} files.`);
|
|
77
72
|
process.exit(1);
|
|
78
73
|
} else {
|
|
79
|
-
console.log(
|
|
80
|
-
`\x1b[32mPayload validation passed.\x1b[0m Checked ${checkedCount} files.`,
|
|
81
|
-
);
|
|
74
|
+
console.log(`\x1b[32mPayload validation passed.\x1b[0m Checked ${checkedCount} files.`);
|
|
82
75
|
}
|
|
83
76
|
}
|
|
84
77
|
|