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.
Files changed (434) hide show
  1. package/.agent/ARCHITECTURE.md +9 -6
  2. package/.agent/agents/accessibility-reviewer.md +23 -16
  3. package/.agent/agents/ai-code-reviewer.md +25 -21
  4. package/.agent/agents/anti-pattern-reviewer.md +12 -7
  5. package/.agent/agents/api-architect.md +1 -0
  6. package/.agent/agents/backend-specialist.md +23 -22
  7. package/.agent/agents/cloud-engineer.md +1 -0
  8. package/.agent/agents/code-archaeologist.md +1 -0
  9. package/.agent/agents/complexity-reviewer.md +10 -7
  10. package/.agent/agents/database-architect.md +3 -2
  11. package/.agent/agents/db-latency-auditor.md +6 -2
  12. package/.agent/agents/debugger.md +3 -2
  13. package/.agent/agents/dependency-reviewer.md +1 -0
  14. package/.agent/agents/devops-engineer.md +9 -8
  15. package/.agent/agents/documentation-writer.md +6 -5
  16. package/.agent/agents/explorer-agent.md +1 -0
  17. package/.agent/agents/frontend-reviewer.md +21 -17
  18. package/.agent/agents/frontend-specialist.md +23 -20
  19. package/.agent/agents/game-developer.md +1 -0
  20. package/.agent/agents/interaction-reviewer.md +10 -5
  21. package/.agent/agents/logic-reviewer.md +3 -0
  22. package/.agent/agents/minimalist-reviewer.md +6 -0
  23. package/.agent/agents/mobile-developer.md +7 -6
  24. package/.agent/agents/mobile-reviewer.md +14 -13
  25. package/.agent/agents/orchestrator.md +3 -0
  26. package/.agent/agents/penetration-tester.md +1 -0
  27. package/.agent/agents/performance-optimizer.md +6 -5
  28. package/.agent/agents/performance-reviewer.md +6 -6
  29. package/.agent/agents/pipeline-reviewer.md +144 -0
  30. package/.agent/agents/precedence-reviewer.md +1 -0
  31. package/.agent/agents/product-manager.md +1 -0
  32. package/.agent/agents/product-owner.md +1 -0
  33. package/.agent/agents/product-reviewer.md +12 -7
  34. package/.agent/agents/project-planner.md +3 -0
  35. package/.agent/agents/qa-automation-engineer.md +50 -43
  36. package/.agent/agents/resilience-reviewer.md +1 -0
  37. package/.agent/agents/schema-reviewer.md +1 -0
  38. package/.agent/agents/security-auditor.md +24 -24
  39. package/.agent/agents/seo-specialist.md +33 -23
  40. package/.agent/agents/sql-reviewer.md +5 -4
  41. package/.agent/agents/supervisor-agent.md +12 -2
  42. package/.agent/agents/swarm-worker-contracts.md +13 -13
  43. package/.agent/agents/swarm-worker-registry.md +51 -51
  44. package/.agent/agents/system-architect.md +1 -0
  45. package/.agent/agents/test-coverage-reviewer.md +25 -22
  46. package/.agent/agents/test-engineer.md +12 -11
  47. package/.agent/agents/throughput-optimizer.md +45 -40
  48. package/.agent/agents/type-safety-reviewer.md +5 -4
  49. package/.agent/agents/ui-ux-auditor.md +6 -4
  50. package/.agent/agents/ui-visual-auditor.md +3 -0
  51. package/.agent/agents/ux-reviewer.md +11 -6
  52. package/.agent/agents/visual-reviewer.md +11 -6
  53. package/.agent/agents/vitals-reviewer.md +5 -4
  54. package/.agent/config/claude.json +18 -0
  55. package/.agent/config/plugin.json +102 -0
  56. package/.agent/config/slash-commands.json +103 -0
  57. package/.agent/config/specialist-registry.json +415 -0
  58. package/.agent/config/system-prompt.md +191 -0
  59. package/.agent/history/architecture-graph.yaml +302 -3
  60. package/.agent/history/graph-cache.json +515 -45
  61. package/.agent/history/memory/.memory.idx +1532 -1
  62. package/.agent/history/memory/MEMORY.md +102 -1
  63. package/.agent/history/memory.db +0 -0
  64. package/.agent/history/snapshots/bin__adapter-install.js.json +13 -0
  65. package/.agent/history/snapshots/bin__global-store.js.json +15 -0
  66. package/.agent/history/snapshots/bin__mcp-server.js.json +19 -0
  67. package/.agent/history/snapshots/bin__proxy-server.js.json +20 -0
  68. package/.agent/history/snapshots/bin__spawn-agent.js.json +12 -0
  69. package/.agent/history/snapshots/bin__tk-proxy.js.json +21 -0
  70. package/.agent/history/snapshots/bin__tribunal-kit.js.json +9 -7
  71. package/.agent/history/snapshots/bin__wrapper.js.json +14 -0
  72. package/.agent/history/snapshots/eslint.config.js.json +1 -2
  73. package/.agent/history/snapshots/scripts__benchmark.js.json +14 -0
  74. package/.agent/history/snapshots/scripts__changelog.js.json +1 -2
  75. package/.agent/history/snapshots/scripts__fix-vbc.js.json +11 -0
  76. package/.agent/history/snapshots/scripts__stress_benchmark.js.json +15 -0
  77. package/.agent/history/snapshots/scripts__sync-version.js.json +1 -2
  78. package/.agent/history/snapshots/scripts__validate-payload.js.json +1 -2
  79. package/.agent/history/snapshots/scripts__visual_audit.js.json +11 -0
  80. package/.agent/history/snapshots/test__integration__bridges.test.js.json +1 -2
  81. package/.agent/history/snapshots/test__integration__graceful_degradation.test.js.json +12 -0
  82. package/.agent/history/snapshots/test__integration__init.test.js.json +1 -2
  83. package/.agent/history/snapshots/test__integration__minimal_change_pipeline.test.js.json +13 -0
  84. package/.agent/history/snapshots/test__integration__parallel_tribunal.test.js.json +12 -0
  85. package/.agent/history/snapshots/test__integration__routing.test.js.json +1 -2
  86. package/.agent/history/snapshots/test__integration__swarm_dispatcher.test.js.json +1 -2
  87. package/.agent/history/snapshots/test__integration__sync_status.test.js.json +13 -0
  88. package/.agent/history/snapshots/test__integration__wave2.test.js.json +1 -2
  89. package/.agent/history/snapshots/test__integration__wrapper.test.js.json +13 -0
  90. package/.agent/history/snapshots/test__unit__align.test.js.json +10 -0
  91. package/.agent/history/snapshots/test__unit__args.test.js.json +3 -3
  92. package/.agent/history/snapshots/test__unit__audit_release.test.js.json +16 -0
  93. package/.agent/history/snapshots/test__unit__case_law_manager.test.js.json +1 -2
  94. package/.agent/history/snapshots/test__unit__cicd_validator.test.js.json +12 -0
  95. package/.agent/history/snapshots/test__unit__compile.test.js.json +10 -0
  96. package/.agent/history/snapshots/test__unit__context_broker.test.js.json +1 -2
  97. package/.agent/history/snapshots/test__unit__contract_engine.test.js.json +13 -0
  98. package/.agent/history/snapshots/test__unit__copyDir.test.js.json +3 -3
  99. package/.agent/history/snapshots/test__unit__graph_tools.test.js.json +1 -2
  100. package/.agent/history/snapshots/test__unit__guardrail_engine.test.js.json +10 -0
  101. package/.agent/history/snapshots/test__unit__impact_classifier.test.js.json +12 -0
  102. package/.agent/history/snapshots/test__unit__init.test.js.json +14 -0
  103. package/.agent/history/snapshots/test__unit__inner_loop_validator.test.js.json +1 -2
  104. package/.agent/history/snapshots/test__unit__integrity_manifest.test.js.json +13 -0
  105. package/.agent/history/snapshots/test__unit__learn.test.js.json +11 -0
  106. package/.agent/history/snapshots/test__unit__marathon.test.js.json +22 -0
  107. package/.agent/history/snapshots/test__unit__mcp_server.test.js.json +16 -0
  108. package/.agent/history/snapshots/test__unit__memory.test.js.json +13 -0
  109. package/.agent/history/snapshots/test__unit__minimal_change.test.js.json +10 -0
  110. package/.agent/history/snapshots/test__unit__native.test.js.json +10 -0
  111. package/.agent/history/snapshots/test__unit__optimize.test.js.json +13 -0
  112. package/.agent/history/snapshots/test__unit__path_resolution.test.js.json +14 -0
  113. package/.agent/history/snapshots/test__unit__production_readiness_evidence.test.js.json +21 -0
  114. package/.agent/history/snapshots/test__unit__selfInstall.test.js.json +3 -3
  115. package/.agent/history/snapshots/test__unit__semver.test.js.json +3 -3
  116. package/.agent/history/snapshots/test__unit__skill_evolution.test.js.json +11 -0
  117. package/.agent/history/snapshots/test__unit__stress.test.js.json +15 -0
  118. package/.agent/history/snapshots/test__unit__swarm_dispatcher.test.js.json +3 -3
  119. package/.agent/history/snapshots/test__unit__utils.test.js.json +10 -0
  120. package/.agent/mcp_config.json +1 -6
  121. package/.agent/routing_index.json +2033 -263
  122. package/.agent/rules/GEMINI.md +11 -9
  123. package/.agent/rules/GEMINI_PLANNER.md +19 -21
  124. package/.agent/scripts/_colors.js +52 -54
  125. package/.agent/scripts/_utils.js +52 -53
  126. package/.agent/scripts/ast_context_loader.js +137 -0
  127. package/.agent/scripts/auto_preview.js +39 -43
  128. package/.agent/scripts/bundle_analyzer.js +47 -60
  129. package/.agent/scripts/case_law_manager.js +200 -294
  130. package/.agent/scripts/checklist.js +73 -94
  131. package/.agent/scripts/cicd_validator.js +305 -0
  132. package/.agent/scripts/context_broker.js +317 -412
  133. package/.agent/scripts/contract_engine.js +402 -0
  134. package/.agent/scripts/dependency_analyzer.js +112 -124
  135. package/.agent/scripts/graph_builder.js +75 -103
  136. package/.agent/scripts/graph_visualizer.js +10 -12
  137. package/.agent/scripts/graph_zoom.js +38 -55
  138. package/.agent/scripts/guardrail_engine.js +195 -145
  139. package/.agent/scripts/impact_classifier.js +55 -30
  140. package/.agent/scripts/inner_loop_validator.js +108 -159
  141. package/.agent/scripts/integrity_manifest.js +59 -67
  142. package/.agent/scripts/lint_runner.js +65 -75
  143. package/.agent/scripts/marathon_harness.js +131 -208
  144. package/.agent/scripts/memory_engine.js +581 -0
  145. package/.agent/scripts/minify_context.js +29 -33
  146. package/.agent/scripts/minimal_change_engine.js +95 -87
  147. package/.agent/scripts/mutation_runner.js +46 -62
  148. package/.agent/scripts/payload_schemas.js +146 -0
  149. package/.agent/scripts/pipeline_engine.js +320 -209
  150. package/.agent/scripts/prompt_compiler.js +166 -93
  151. package/.agent/scripts/schema_validator.js +73 -121
  152. package/.agent/scripts/security_scan.js +88 -117
  153. package/.agent/scripts/session_manager.js +52 -69
  154. package/.agent/scripts/signal_detector.js +24 -22
  155. package/.agent/scripts/skill_evolution.js +184 -245
  156. package/.agent/scripts/skill_integrator.js +35 -48
  157. package/.agent/scripts/socratic_gate_policy.js +15 -12
  158. package/.agent/scripts/strengthen_skills.js +29 -33
  159. package/.agent/scripts/swarm_dispatcher.js +397 -200
  160. package/.agent/scripts/test_runner.js +54 -56
  161. package/.agent/scripts/token_budget_broker.js +126 -13
  162. package/.agent/scripts/trace_engine.js +126 -0
  163. package/.agent/scripts/verify_all.js +76 -93
  164. package/.agent/scripts/visual_audit.js +16 -21
  165. package/.agent/skill_topic_map.json +22 -3
  166. package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
  167. package/.agent/skills/60fps-animation/SKILL.md +7 -0
  168. package/.agent/skills/accessible-animation/SKILL.md +5 -1
  169. package/.agent/skills/adapt/SKILL.md +7 -1
  170. package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
  171. package/.agent/skills/agent-organizer/SKILL.md +1 -0
  172. package/.agent/skills/agentic-patterns/SKILL.md +33 -25
  173. package/.agent/skills/agentic-workflows-2026/SKILL.md +6 -2
  174. package/.agent/skills/ai-app-hardening/SKILL.md +9 -8
  175. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
  176. package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
  177. package/.agent/skills/animation-systems/SKILL.md +11 -10
  178. package/.agent/skills/antfu-conventions/SKILL.md +7 -2
  179. package/.agent/skills/api-patterns/SKILL.md +14 -10
  180. package/.agent/skills/api-security-auditor/SKILL.md +15 -14
  181. package/.agent/skills/app-builder/SKILL.md +1 -0
  182. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
  183. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  184. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
  185. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
  186. package/.agent/skills/apple-design/SKILL.md +8 -7
  187. package/.agent/skills/architecture/SKILL.md +3 -2
  188. package/.agent/skills/audit-and-fix/SKILL.md +8 -5
  189. package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
  190. package/.agent/skills/backend-security-expert/SKILL.md +1 -0
  191. package/.agent/skills/baseline-ui/SKILL.md +8 -7
  192. package/.agent/skills/bash-linux/SKILL.md +1 -0
  193. package/.agent/skills/behavioral-modes/SKILL.md +1 -0
  194. package/.agent/skills/better-colors/SKILL.md +11 -7
  195. package/.agent/skills/better-typography/SKILL.md +30 -16
  196. package/.agent/skills/better-ui/SKILL.md +17 -10
  197. package/.agent/skills/bolder/SKILL.md +6 -0
  198. package/.agent/skills/brainstorming/SKILL.md +6 -4
  199. package/.agent/skills/browser-native-ai/SKILL.md +5 -4
  200. package/.agent/skills/build-primitive/SKILL.md +5 -0
  201. package/.agent/skills/building-native-ui/SKILL.md +1 -0
  202. package/.agent/skills/cicd-pro/SKILL.md +2 -1
  203. package/.agent/skills/clarify/SKILL.md +19 -14
  204. package/.agent/skills/clean-code/SKILL.md +16 -15
  205. package/.agent/skills/cloud-architect/SKILL.md +1 -0
  206. package/.agent/skills/cobejs/SKILL.md +7 -9
  207. package/.agent/skills/code-review-checklist/SKILL.md +1 -0
  208. package/.agent/skills/codebase-design/SKILL.md +7 -2
  209. package/.agent/skills/colorize/SKILL.md +8 -3
  210. package/.agent/skills/compact-landing/SKILL.md +8 -3
  211. package/.agent/skills/company-logos/SKILL.md +6 -0
  212. package/.agent/skills/config-validator/SKILL.md +10 -9
  213. package/.agent/skills/containerization-pro/SKILL.md +6 -5
  214. package/.agent/skills/context-engineering-pro/SKILL.md +5 -4
  215. package/.agent/skills/create-design-md/SKILL.md +13 -5
  216. package/.agent/skills/critique/SKILL.md +10 -8
  217. package/.agent/skills/csharp-developer/SKILL.md +1 -0
  218. package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
  219. package/.agent/skills/database-design/SKILL.md +2 -1
  220. package/.agent/skills/delight/SKILL.md +6 -0
  221. package/.agent/skills/deployment-procedures/SKILL.md +2 -1
  222. package/.agent/skills/design-lab/SKILL.md +5 -0
  223. package/.agent/skills/devops-engineer/SKILL.md +3 -2
  224. package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
  225. package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
  226. package/.agent/skills/distill/SKILL.md +7 -2
  227. package/.agent/skills/documentation-templates/SKILL.md +3 -2
  228. package/.agent/skills/domain-modeling/SKILL.md +12 -4
  229. package/.agent/skills/duckdb-analytical-sql/SKILL.md +7 -3
  230. package/.agent/skills/edge-ai-mobile/SKILL.md +5 -1
  231. package/.agent/skills/edge-computing/SKILL.md +9 -8
  232. package/.agent/skills/emil-design-eng/SKILL.md +43 -27
  233. package/.agent/skills/error-resilience/SKILL.md +34 -16
  234. package/.agent/skills/expo-router-v4/SKILL.md +2 -1
  235. package/.agent/skills/extract-design-system/SKILL.md +12 -11
  236. package/.agent/skills/fabel-protocol/SKILL.md +24 -17
  237. package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
  238. package/.agent/skills/fixing-metadata/SKILL.md +24 -13
  239. package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
  240. package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
  241. package/.agent/skills/frontend-design/SKILL.md +21 -13
  242. package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
  243. package/.agent/skills/game-design-expert/SKILL.md +1 -0
  244. package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
  245. package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
  246. package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
  247. package/.agent/skills/git-pro/SKILL.md +10 -9
  248. package/.agent/skills/github-operations/SKILL.md +2 -1
  249. package/.agent/skills/gpt-taste/SKILL.md +7 -0
  250. package/.agent/skills/gsap-core/SKILL.md +26 -22
  251. package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
  252. package/.agent/skills/gsap-performance/SKILL.md +4 -3
  253. package/.agent/skills/gsap-plugins/SKILL.md +34 -33
  254. package/.agent/skills/gsap-react/SKILL.md +9 -8
  255. package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
  256. package/.agent/skills/gsap-timeline/SKILL.md +18 -15
  257. package/.agent/skills/gsap-utils/SKILL.md +25 -24
  258. package/.agent/skills/harden/SKILL.md +9 -3
  259. package/.agent/skills/harness-protocol/SKILL.md +1 -0
  260. package/.agent/skills/i18n-localization/SKILL.md +10 -9
  261. package/.agent/skills/impeccable/SKILL.md +5 -0
  262. package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
  263. package/.agent/skills/improve-ui/SKILL.md +12 -5
  264. package/.agent/skills/intelligent-routing/SKILL.md +7 -6
  265. package/.agent/skills/knowledge-graph/SKILL.md +1 -0
  266. package/.agent/skills/landing-page/SKILL.md +1 -0
  267. package/.agent/skills/lint-and-validate/SKILL.md +9 -4
  268. package/.agent/skills/llm-engineering/SKILL.md +55 -54
  269. package/.agent/skills/local-first/SKILL.md +20 -19
  270. package/.agent/skills/local-first-architecture/SKILL.md +6 -1
  271. package/.agent/skills/lottie-animation/SKILL.md +7 -3
  272. package/.agent/skills/marquee-loop/SKILL.md +1 -0
  273. package/.agent/skills/masked-reveal/SKILL.md +17 -4
  274. package/.agent/skills/mcp-builder/SKILL.md +13 -10
  275. package/.agent/skills/micro-interaction/SKILL.md +20 -5
  276. package/.agent/skills/mobile-design/SKILL.md +26 -15
  277. package/.agent/skills/monorepo-management/SKILL.md +3 -2
  278. package/.agent/skills/morphing-icons/SKILL.md +16 -6
  279. package/.agent/skills/motion-engineering/SKILL.md +19 -15
  280. package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
  281. package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
  282. package/.agent/skills/observability/SKILL.md +45 -44
  283. package/.agent/skills/opentelemetry-observability/SKILL.md +2 -1
  284. package/.agent/skills/page-transition-animation/SKILL.md +6 -3
  285. package/.agent/skills/parallel-agents/SKILL.md +7 -2
  286. package/.agent/skills/performance-profiling/SKILL.md +24 -13
  287. package/.agent/skills/plan-writing/SKILL.md +1 -0
  288. package/.agent/skills/platform-engineer/SKILL.md +3 -2
  289. package/.agent/skills/platform-engineering-opentofu/SKILL.md +1 -0
  290. package/.agent/skills/playwright-ai-e2e/SKILL.md +3 -2
  291. package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
  292. package/.agent/skills/polish/SKILL.md +13 -12
  293. package/.agent/skills/powershell-windows/SKILL.md +1 -0
  294. package/.agent/skills/pricing-page/SKILL.md +8 -3
  295. package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
  296. package/.agent/skills/progressive-blur/SKILL.md +9 -4
  297. package/.agent/skills/project-idioms/SKILL.md +1 -0
  298. package/.agent/skills/property-based-testing/SKILL.md +10 -12
  299. package/.agent/skills/python-patterns/SKILL.md +1 -0
  300. package/.agent/skills/python-pro/SKILL.md +1 -0
  301. package/.agent/skills/quieter/SKILL.md +6 -0
  302. package/.agent/skills/react-doctor/SKILL.md +6 -0
  303. package/.agent/skills/react-specialist/SKILL.md +32 -28
  304. package/.agent/skills/readme-builder/SKILL.md +1 -0
  305. package/.agent/skills/realtime-patterns/SKILL.md +34 -33
  306. package/.agent/skills/red-team-tactics/SKILL.md +1 -0
  307. package/.agent/skills/redesign-skill/SKILL.md +6 -0
  308. package/.agent/skills/review-animations/SKILL.md +5 -2
  309. package/.agent/skills/review-animations/STANDARDS.md +37 -23
  310. package/.agent/skills/rust-pro/SKILL.md +1 -0
  311. package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
  312. package/.agent/skills/server-management/SKILL.md +1 -0
  313. package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
  314. package/.agent/skills/shape/SKILL.md +9 -2
  315. package/.agent/skills/skill-creator/SKILL.md +1 -0
  316. package/.agent/skills/soft-skill/SKILL.md +6 -0
  317. package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
  318. package/.agent/skills/sql-pro/SKILL.md +1 -0
  319. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  320. package/.agent/skills/svg-animation/SKILL.md +16 -7
  321. package/.agent/skills/swiftui-expert/SKILL.md +1 -0
  322. package/.agent/skills/swiss-design/SKILL.md +5 -0
  323. package/.agent/skills/system-design-pro/SKILL.md +1 -0
  324. package/.agent/skills/systematic-debugging/SKILL.md +1 -0
  325. package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
  326. package/.agent/skills/taste-skill/SKILL.md +6 -0
  327. package/.agent/skills/tdd-workflow/SKILL.md +5 -0
  328. package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
  329. package/.agent/skills/testing-patterns/SKILL.md +123 -115
  330. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
  331. package/.agent/skills/thinking-protocol/SKILL.md +3 -0
  332. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
  333. package/.agent/skills/transitions-dev/SKILL.md +19 -6
  334. package/.agent/skills/trend-researcher/SKILL.md +1 -0
  335. package/.agent/skills/typescript-advanced/SKILL.md +23 -18
  336. package/.agent/skills/typeset/SKILL.md +10 -1
  337. package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
  338. package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
  339. package/.agent/skills/ui-skills-root/SKILL.md +39 -38
  340. package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
  341. package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
  342. package/.agent/skills/vector-search-pgvector/SKILL.md +3 -2
  343. package/.agent/skills/vue-expert/SKILL.md +22 -19
  344. package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
  345. package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
  346. package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
  347. package/.agent/skills/web-quality-audit/SKILL.md +5 -0
  348. package/.agent/skills/webapp-testing/SKILL.md +14 -13
  349. package/.agent/skills/webgpu-performance/SKILL.md +1 -0
  350. package/.agent/skills/whimsy-injector/SKILL.md +9 -5
  351. package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
  352. package/.agent/skills/zero-trust-passkeys/SKILL.md +11 -6
  353. package/.agent/templates/DESIGN.md +119 -110
  354. package/.agent/templates/design-tokens.json +9 -6
  355. package/.agent/workflows/acf.md +1 -0
  356. package/.agent/workflows/api-tester.md +1 -0
  357. package/.agent/workflows/audit.md +1 -0
  358. package/.agent/workflows/brainstorm.md +1 -0
  359. package/.agent/workflows/changelog.md +1 -0
  360. package/.agent/workflows/contract.md +60 -0
  361. package/.agent/workflows/create.md +1 -0
  362. package/.agent/workflows/debug.md +1 -0
  363. package/.agent/workflows/deploy.md +1 -0
  364. package/.agent/workflows/enhance.md +1 -0
  365. package/.agent/workflows/fix-ci.md +89 -0
  366. package/.agent/workflows/fix.md +1 -0
  367. package/.agent/workflows/generate.md +1 -0
  368. package/.agent/workflows/marathon.md +1 -0
  369. package/.agent/workflows/migrate.md +1 -0
  370. package/.agent/workflows/minimal.md +9 -7
  371. package/.agent/workflows/orchestrate.md +1 -0
  372. package/.agent/workflows/performance-benchmarker.md +1 -0
  373. package/.agent/workflows/pipeline.md +26 -21
  374. package/.agent/workflows/plan.md +1 -0
  375. package/.agent/workflows/preview.md +1 -0
  376. package/.agent/workflows/refactor.md +3 -2
  377. package/.agent/workflows/review-ai.md +4 -3
  378. package/.agent/workflows/review.md +1 -0
  379. package/.agent/workflows/session.md +1 -0
  380. package/.agent/workflows/status.md +1 -0
  381. package/.agent/workflows/strengthen-skills.md +1 -0
  382. package/.agent/workflows/super-prompt.md +1 -0
  383. package/.agent/workflows/swarm.md +15 -3
  384. package/.agent/workflows/test.md +8 -7
  385. package/.agent/workflows/tribunal-backend.md +3 -2
  386. package/.agent/workflows/tribunal-cicd.md +104 -0
  387. package/.agent/workflows/tribunal-database.md +1 -0
  388. package/.agent/workflows/tribunal-frontend.md +8 -6
  389. package/.agent/workflows/tribunal-full.md +2 -1
  390. package/.agent/workflows/tribunal-mobile.md +6 -5
  391. package/.agent/workflows/tribunal-performance.md +1 -0
  392. package/.agent/workflows/tribunal-speed.md +1 -0
  393. package/.agent/workflows/tribunal-ui.md +29 -21
  394. package/.agent/workflows/ui-ux-pro-max.md +19 -15
  395. package/.claude/CLAUDE.md +442 -0
  396. package/CONTRIBUTING.md +3 -3
  397. package/README.md +105 -45
  398. package/SECURITY.md +11 -11
  399. package/bin/adapter-install.js +240 -0
  400. package/bin/global-store.js +48 -0
  401. package/bin/mcp-server.js +781 -332
  402. package/bin/proxy-server.js +113 -0
  403. package/bin/spawn-agent.js +39 -0
  404. package/bin/tk-proxy.js +34 -0
  405. package/bin/tribunal-kit.js +29 -30
  406. package/bin/wrapper.js +40 -46
  407. package/dist/cli.js +6 -0
  408. package/dist/commands/case.js +2 -0
  409. package/dist/commands/contract.js +440 -0
  410. package/dist/commands/init.js +8 -51
  411. package/dist/commands/status.js +61 -30
  412. package/dist/commands/validate.js +22 -31
  413. package/dist/index.d.ts +8 -1
  414. package/dist/tui/banner.js +77 -0
  415. package/dist/tui/index.js +21 -0
  416. package/dist/tui/reviewer-grid.js +90 -0
  417. package/dist/tui/shimmer.js +91 -0
  418. package/dist/tui/theme.js +130 -0
  419. package/dist/tui/tree.js +93 -0
  420. package/dist/tui/wizard.js +148 -0
  421. package/dist/utils/helpers.js +5 -41
  422. package/package.json +33 -15
  423. package/scripts/benchmark.js +62 -86
  424. package/scripts/build-graph.js +71 -0
  425. package/scripts/changelog.js +67 -73
  426. package/scripts/fix-vbc.js +13 -15
  427. package/scripts/fix-vbc.ps1 +2 -118
  428. package/scripts/stress_benchmark.js +358 -0
  429. package/scripts/sync-version.js +71 -41
  430. package/scripts/validate-payload.js +23 -30
  431. package/scripts/visual_audit.js +23 -13
  432. package/.agent/history/snapshots/migrate_refs.js.json +0 -11
  433. package/.agent/scripts/compile_router.py +0 -112
  434. 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
+ };
@@ -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
- return;
49
- // Big ASCII art (TRIBUNAL-KIT)
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": "6.0.1",
4
- "description": "Your AI writes code that doesn't exist. Tribunal Kit stops it. The governance layer for AI coding agents — 51 specialists, 27 parallel reviewers, 183 skills, Rust core, MCP server. Works with Cursor, VSCode, Windsurf, Claude Code, and Aider.",
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": "^6.0.1",
110
- "@tribunal-kit/core-darwin-x64": "^6.0.1",
111
- "@tribunal-kit/core-linux-arm64": "^6.0.1",
112
- "@tribunal-kit/core-linux-x64": "^6.0.1",
113
- "@tribunal-kit/core-win32-arm64": "^6.0.1",
114
- "@tribunal-kit/core-win32-x64": "^6.0.1"
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
  }
@@ -6,22 +6,22 @@
6
6
  * Run: node scripts/benchmark.js
7
7
  */
8
8
 
9
- const { spawnSync } = require("child_process");
10
- const path = require("path");
11
- const fs = require("fs");
12
- const os = require("os");
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: "\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",
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("node", command.split(" "), {
63
- stdio: "pipe",
64
- encoding: "utf8",
65
- env: { ...process.env, TK_SKIP_UPDATE_CHECK: "1" },
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("gray", ` ─────────────────────────────────────────`));
76
- console.log(c("gray", ` Platform: ${os.platform()} ${os.arch()}`));
77
- console.log(c("gray", ` Node: ${process.version}`));
78
- console.log(
79
- c(
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, "../bin/wrapper.js");
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("cyan", " ▸ Benchmarking: CLI cold-start (--help)"));
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("cyan", " ▸ Benchmarking: tk status"));
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("cyan", " ▸ Benchmarking: tk init --dry-run"));
99
+ console.log(c('cyan', ' ▸ Benchmarking: tk init --dry-run'));
113
100
  const initResult = await benchmarkCommand(
114
- "Init (dry-run)",
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("cyan", " ▸ Benchmarking: tk init (real copy)"));
108
+ console.log(c('cyan', ' ▸ Benchmarking: tk init (real copy)'));
122
109
  const initRealResult = await benchmark(
123
- "Init (full copy)",
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
- "node",
129
- [cliPath, "init", "--quiet", "--skip-update-check", `--path=${runDir}`],
130
- {
131
- stdio: "pipe",
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("cyan", " ▸ Benchmarking: DAG scheduling calculation"));
129
+ console.log(c('cyan', ' ▸ Benchmarking: DAG scheduling calculation'));
147
130
  const dagResult = await benchmark(
148
- "DAG wave scheduling",
131
+ 'DAG wave scheduling',
149
132
  () => {
150
133
  const workers = [
151
- { task_id: "w1", dependencies: [] },
152
- { task_id: "w2", dependencies: ["w1"] },
153
- { task_id: "w3", dependencies: ["w1"] },
154
- { task_id: "w4", dependencies: ["w2", "w3"] },
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((w) => {
141
+ workers.forEach(w => {
159
142
  inDegree[w.task_id] = 0;
160
143
  adjList[w.task_id] = [];
161
144
  });
162
- workers.forEach((w) => {
163
- w.dependencies.forEach((dep) => {
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((id) => inDegree[id] === 0);
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((id) => {
174
- adjList[id].forEach((nbr) => {
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("cyan", " ▸ Benchmarking: Minimal Change Governance Engine"));
170
+ console.log(c('cyan', ' ▸ Benchmarking: Minimal Change Governance Engine'));
188
171
  const minResult = await benchmark(
189
- "Minimal Change Audit",
172
+ 'Minimal Change Audit',
190
173
  () => {
191
- const minEngine = require("../.agent/scripts/minimal_change_engine");
192
- minEngine.evaluateMinimalChange("add retry logic to API requests", {
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("gray", ` ─────────────────────────────────────────────────────────`),
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 ? "green" : r.avg < 500 ? "yellow" : "red";
195
+ const avgColor = r.avg < 100 ? 'green' : r.avg < 500 ? 'yellow' : 'red';
218
196
  console.log(
219
- ` ${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))}`,
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, "../benchmark-results.json");
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((r) => ({
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("green", ` ✔ Results saved to benchmark-results.json`));
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((err) => {
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 };