tribunal-kit 6.0.0 → 7.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 (353) hide show
  1. package/.agent/.manifest.json +78 -0
  2. package/.agent/ARCHITECTURE.md +19 -241
  3. package/.agent/agents/accessibility-reviewer.md +23 -16
  4. package/.agent/agents/ai-code-reviewer.md +25 -21
  5. package/.agent/agents/anti-pattern-reviewer.md +12 -7
  6. package/.agent/agents/api-architect.md +1 -0
  7. package/.agent/agents/backend-specialist.md +23 -22
  8. package/.agent/agents/cloud-engineer.md +1 -0
  9. package/.agent/agents/code-archaeologist.md +1 -0
  10. package/.agent/agents/complexity-reviewer.md +10 -7
  11. package/.agent/agents/database-architect.md +3 -2
  12. package/.agent/agents/db-latency-auditor.md +6 -2
  13. package/.agent/agents/debugger.md +3 -2
  14. package/.agent/agents/dependency-reviewer.md +1 -0
  15. package/.agent/agents/devops-engineer.md +9 -8
  16. package/.agent/agents/documentation-writer.md +6 -5
  17. package/.agent/agents/explorer-agent.md +1 -0
  18. package/.agent/agents/frontend-reviewer.md +21 -17
  19. package/.agent/agents/frontend-specialist.md +23 -20
  20. package/.agent/agents/game-developer.md +1 -0
  21. package/.agent/agents/interaction-reviewer.md +10 -5
  22. package/.agent/agents/logic-reviewer.md +3 -0
  23. package/.agent/agents/minimalist-reviewer.md +6 -0
  24. package/.agent/agents/mobile-developer.md +7 -6
  25. package/.agent/agents/mobile-reviewer.md +14 -13
  26. package/.agent/agents/orchestrator.md +3 -0
  27. package/.agent/agents/penetration-tester.md +1 -0
  28. package/.agent/agents/performance-optimizer.md +6 -5
  29. package/.agent/agents/performance-reviewer.md +6 -6
  30. package/.agent/agents/pipeline-reviewer.md +144 -0
  31. package/.agent/agents/precedence-reviewer.md +1 -0
  32. package/.agent/agents/product-manager.md +1 -0
  33. package/.agent/agents/product-owner.md +1 -0
  34. package/.agent/agents/product-reviewer.md +12 -7
  35. package/.agent/agents/project-planner.md +3 -0
  36. package/.agent/agents/qa-automation-engineer.md +50 -43
  37. package/.agent/agents/resilience-reviewer.md +1 -0
  38. package/.agent/agents/schema-reviewer.md +1 -0
  39. package/.agent/agents/security-auditor.md +24 -24
  40. package/.agent/agents/seo-specialist.md +33 -23
  41. package/.agent/agents/sql-reviewer.md +5 -4
  42. package/.agent/agents/supervisor-agent.md +12 -2
  43. package/.agent/agents/swarm-worker-contracts.md +13 -13
  44. package/.agent/agents/swarm-worker-registry.md +51 -51
  45. package/.agent/agents/system-architect.md +1 -0
  46. package/.agent/agents/test-coverage-reviewer.md +25 -22
  47. package/.agent/agents/test-engineer.md +12 -11
  48. package/.agent/agents/throughput-optimizer.md +45 -40
  49. package/.agent/agents/type-safety-reviewer.md +5 -4
  50. package/.agent/agents/ui-ux-auditor.md +6 -4
  51. package/.agent/agents/ui-visual-auditor.md +3 -0
  52. package/.agent/agents/ux-reviewer.md +11 -6
  53. package/.agent/agents/visual-reviewer.md +11 -6
  54. package/.agent/agents/vitals-reviewer.md +5 -4
  55. package/.agent/history/memory/.memory.idx +3716 -1
  56. package/.agent/history/memory/MEMORY.md +246 -1
  57. package/.agent/mcp_config.json +1 -6
  58. package/.agent/routing_index.json +2034 -263
  59. package/.agent/rules/GEMINI.md +12 -10
  60. package/.agent/rules/GEMINI_PLANNER.md +19 -21
  61. package/.agent/scripts/_colors.js +52 -54
  62. package/.agent/scripts/_utils.js +52 -53
  63. package/.agent/scripts/auto_preview.js +39 -43
  64. package/.agent/scripts/bundle_analyzer.js +47 -60
  65. package/.agent/scripts/case_law_manager.js +200 -294
  66. package/.agent/scripts/checklist.js +73 -94
  67. package/.agent/scripts/cicd_validator.js +305 -0
  68. package/.agent/scripts/compile_router.py +4 -111
  69. package/.agent/scripts/context_broker.js +317 -412
  70. package/.agent/scripts/contract_engine.js +402 -0
  71. package/.agent/scripts/dependency_analyzer.js +112 -124
  72. package/.agent/scripts/graph_builder.js +75 -103
  73. package/.agent/scripts/graph_visualizer.js +10 -12
  74. package/.agent/scripts/graph_zoom.js +38 -55
  75. package/.agent/scripts/guardrail_engine.js +195 -145
  76. package/.agent/scripts/impact_classifier.js +55 -30
  77. package/.agent/scripts/inner_loop_validator.js +108 -159
  78. package/.agent/scripts/integrity_manifest.js +59 -67
  79. package/.agent/scripts/lint_runner.js +65 -75
  80. package/.agent/scripts/marathon_harness.js +131 -208
  81. package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
  82. package/.agent/scripts/minify_context.js +29 -33
  83. package/.agent/scripts/minimal_change_engine.js +95 -87
  84. package/.agent/scripts/mutation_runner.js +46 -62
  85. package/.agent/scripts/pipeline_engine.js +320 -209
  86. package/.agent/scripts/prompt_compiler.js +118 -93
  87. package/.agent/scripts/schema_validator.js +73 -121
  88. package/.agent/scripts/security_scan.js +88 -117
  89. package/.agent/scripts/session_manager.js +52 -69
  90. package/.agent/scripts/signal_detector.js +24 -22
  91. package/.agent/scripts/skill_evolution.js +184 -245
  92. package/.agent/scripts/skill_integrator.js +35 -48
  93. package/.agent/scripts/socratic_gate_policy.js +15 -12
  94. package/.agent/scripts/strengthen_skills.js +29 -33
  95. package/.agent/scripts/swarm_dispatcher.js +120 -151
  96. package/.agent/scripts/test_runner.js +54 -56
  97. package/.agent/scripts/token_budget_broker.js +9 -7
  98. package/.agent/scripts/trace_engine.js +126 -0
  99. package/.agent/scripts/verify_all.js +76 -93
  100. package/.agent/scripts/visual_audit.js +16 -21
  101. package/.agent/skill_topic_map.json +237 -0
  102. package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
  103. package/.agent/skills/60fps-animation/SKILL.md +7 -0
  104. package/.agent/skills/accessible-animation/SKILL.md +5 -1
  105. package/.agent/skills/adapt/SKILL.md +7 -1
  106. package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
  107. package/.agent/skills/agent-organizer/SKILL.md +1 -0
  108. package/.agent/skills/agentic-patterns/SKILL.md +33 -25
  109. package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
  110. package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
  111. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
  112. package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
  113. package/.agent/skills/animation-systems/SKILL.md +11 -10
  114. package/.agent/skills/antfu-conventions/SKILL.md +7 -2
  115. package/.agent/skills/api-patterns/SKILL.md +14 -10
  116. package/.agent/skills/api-security-auditor/SKILL.md +15 -14
  117. package/.agent/skills/app-builder/SKILL.md +1 -0
  118. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
  119. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
  120. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
  121. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
  122. package/.agent/skills/apple-design/SKILL.md +8 -7
  123. package/.agent/skills/architecture/SKILL.md +3 -2
  124. package/.agent/skills/audit-and-fix/SKILL.md +8 -5
  125. package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
  126. package/.agent/skills/backend-security-expert/SKILL.md +1 -0
  127. package/.agent/skills/baseline-ui/SKILL.md +8 -7
  128. package/.agent/skills/bash-linux/SKILL.md +1 -0
  129. package/.agent/skills/behavioral-modes/SKILL.md +1 -0
  130. package/.agent/skills/better-colors/SKILL.md +11 -7
  131. package/.agent/skills/better-typography/SKILL.md +30 -16
  132. package/.agent/skills/better-ui/SKILL.md +17 -10
  133. package/.agent/skills/bolder/SKILL.md +6 -0
  134. package/.agent/skills/brainstorming/SKILL.md +6 -4
  135. package/.agent/skills/browser-native-ai/SKILL.md +5 -4
  136. package/.agent/skills/build-primitive/SKILL.md +5 -0
  137. package/.agent/skills/building-native-ui/SKILL.md +1 -0
  138. package/.agent/skills/cicd-pro/SKILL.md +2 -1
  139. package/.agent/skills/clarify/SKILL.md +19 -14
  140. package/.agent/skills/clean-code/SKILL.md +16 -15
  141. package/.agent/skills/cloud-architect/SKILL.md +1 -0
  142. package/.agent/skills/cobejs/SKILL.md +7 -9
  143. package/.agent/skills/code-review-checklist/SKILL.md +1 -0
  144. package/.agent/skills/codebase-design/SKILL.md +7 -2
  145. package/.agent/skills/colorize/SKILL.md +8 -3
  146. package/.agent/skills/compact-landing/SKILL.md +8 -3
  147. package/.agent/skills/company-logos/SKILL.md +6 -0
  148. package/.agent/skills/config-validator/SKILL.md +10 -9
  149. package/.agent/skills/containerization-pro/SKILL.md +6 -5
  150. package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
  151. package/.agent/skills/create-design-md/SKILL.md +13 -5
  152. package/.agent/skills/critique/SKILL.md +10 -8
  153. package/.agent/skills/csharp-developer/SKILL.md +1 -0
  154. package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
  155. package/.agent/skills/database-design/SKILL.md +2 -1
  156. package/.agent/skills/delight/SKILL.md +6 -0
  157. package/.agent/skills/deployment-procedures/SKILL.md +2 -1
  158. package/.agent/skills/design-lab/SKILL.md +5 -0
  159. package/.agent/skills/devops-engineer/SKILL.md +3 -2
  160. package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
  161. package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
  162. package/.agent/skills/distill/SKILL.md +7 -2
  163. package/.agent/skills/documentation-templates/SKILL.md +3 -2
  164. package/.agent/skills/domain-modeling/SKILL.md +12 -4
  165. package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
  166. package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
  167. package/.agent/skills/edge-computing/SKILL.md +9 -8
  168. package/.agent/skills/emil-design-eng/SKILL.md +43 -27
  169. package/.agent/skills/error-resilience/SKILL.md +34 -16
  170. package/.agent/skills/expo-router-v4/SKILL.md +81 -0
  171. package/.agent/skills/extract-design-system/SKILL.md +12 -11
  172. package/.agent/skills/fabel-protocol/SKILL.md +24 -17
  173. package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
  174. package/.agent/skills/fixing-metadata/SKILL.md +24 -13
  175. package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
  176. package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
  177. package/.agent/skills/frontend-design/SKILL.md +21 -13
  178. package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
  179. package/.agent/skills/game-design-expert/SKILL.md +1 -0
  180. package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
  181. package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
  182. package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
  183. package/.agent/skills/git-pro/SKILL.md +10 -9
  184. package/.agent/skills/github-operations/SKILL.md +2 -1
  185. package/.agent/skills/gpt-taste/SKILL.md +7 -0
  186. package/.agent/skills/gsap-core/SKILL.md +26 -22
  187. package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
  188. package/.agent/skills/gsap-performance/SKILL.md +4 -3
  189. package/.agent/skills/gsap-plugins/SKILL.md +34 -33
  190. package/.agent/skills/gsap-react/SKILL.md +9 -8
  191. package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
  192. package/.agent/skills/gsap-timeline/SKILL.md +18 -15
  193. package/.agent/skills/gsap-utils/SKILL.md +25 -24
  194. package/.agent/skills/harden/SKILL.md +9 -3
  195. package/.agent/skills/harness-protocol/SKILL.md +1 -0
  196. package/.agent/skills/i18n-localization/SKILL.md +10 -9
  197. package/.agent/skills/impeccable/SKILL.md +5 -0
  198. package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
  199. package/.agent/skills/improve-ui/SKILL.md +12 -5
  200. package/.agent/skills/intelligent-routing/SKILL.md +7 -6
  201. package/.agent/skills/knowledge-graph/SKILL.md +1 -0
  202. package/.agent/skills/landing-page/SKILL.md +1 -0
  203. package/.agent/skills/lint-and-validate/SKILL.md +9 -4
  204. package/.agent/skills/llm-engineering/SKILL.md +55 -54
  205. package/.agent/skills/local-first/SKILL.md +20 -19
  206. package/.agent/skills/local-first-architecture/SKILL.md +6 -1
  207. package/.agent/skills/lottie-animation/SKILL.md +7 -3
  208. package/.agent/skills/marquee-loop/SKILL.md +1 -0
  209. package/.agent/skills/masked-reveal/SKILL.md +17 -4
  210. package/.agent/skills/mcp-builder/SKILL.md +13 -10
  211. package/.agent/skills/micro-interaction/SKILL.md +20 -5
  212. package/.agent/skills/mobile-design/SKILL.md +26 -15
  213. package/.agent/skills/monorepo-management/SKILL.md +3 -2
  214. package/.agent/skills/morphing-icons/SKILL.md +16 -6
  215. package/.agent/skills/motion-engineering/SKILL.md +19 -15
  216. package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
  217. package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
  218. package/.agent/skills/observability/SKILL.md +45 -44
  219. package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
  220. package/.agent/skills/page-transition-animation/SKILL.md +6 -3
  221. package/.agent/skills/parallel-agents/SKILL.md +7 -2
  222. package/.agent/skills/performance-profiling/SKILL.md +24 -13
  223. package/.agent/skills/plan-writing/SKILL.md +1 -0
  224. package/.agent/skills/platform-engineer/SKILL.md +3 -2
  225. package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
  226. package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
  227. package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
  228. package/.agent/skills/polish/SKILL.md +13 -12
  229. package/.agent/skills/powershell-windows/SKILL.md +1 -0
  230. package/.agent/skills/pricing-page/SKILL.md +8 -3
  231. package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
  232. package/.agent/skills/progressive-blur/SKILL.md +9 -4
  233. package/.agent/skills/project-idioms/SKILL.md +1 -0
  234. package/.agent/skills/property-based-testing/SKILL.md +58 -0
  235. package/.agent/skills/python-patterns/SKILL.md +1 -0
  236. package/.agent/skills/python-pro/SKILL.md +1 -0
  237. package/.agent/skills/quieter/SKILL.md +6 -0
  238. package/.agent/skills/react-doctor/SKILL.md +6 -0
  239. package/.agent/skills/react-specialist/SKILL.md +32 -28
  240. package/.agent/skills/readme-builder/SKILL.md +1 -0
  241. package/.agent/skills/realtime-patterns/SKILL.md +34 -33
  242. package/.agent/skills/red-team-tactics/SKILL.md +1 -0
  243. package/.agent/skills/redesign-skill/SKILL.md +6 -0
  244. package/.agent/skills/review-animations/SKILL.md +5 -2
  245. package/.agent/skills/review-animations/STANDARDS.md +37 -23
  246. package/.agent/skills/rust-pro/SKILL.md +1 -0
  247. package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
  248. package/.agent/skills/server-management/SKILL.md +1 -0
  249. package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
  250. package/.agent/skills/shape/SKILL.md +9 -2
  251. package/.agent/skills/skill-creator/SKILL.md +1 -0
  252. package/.agent/skills/soft-skill/SKILL.md +6 -0
  253. package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
  254. package/.agent/skills/sql-pro/SKILL.md +1 -0
  255. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
  256. package/.agent/skills/svg-animation/SKILL.md +16 -7
  257. package/.agent/skills/swiftui-expert/SKILL.md +1 -0
  258. package/.agent/skills/swiss-design/SKILL.md +5 -0
  259. package/.agent/skills/system-design-pro/SKILL.md +1 -0
  260. package/.agent/skills/systematic-debugging/SKILL.md +1 -0
  261. package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
  262. package/.agent/skills/taste-skill/SKILL.md +6 -0
  263. package/.agent/skills/tdd-workflow/SKILL.md +5 -0
  264. package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
  265. package/.agent/skills/testing-patterns/SKILL.md +123 -115
  266. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
  267. package/.agent/skills/thinking-protocol/SKILL.md +3 -0
  268. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
  269. package/.agent/skills/transitions-dev/SKILL.md +19 -6
  270. package/.agent/skills/trend-researcher/SKILL.md +1 -0
  271. package/.agent/skills/typescript-advanced/SKILL.md +23 -18
  272. package/.agent/skills/typeset/SKILL.md +10 -1
  273. package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
  274. package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
  275. package/.agent/skills/ui-skills-root/SKILL.md +39 -38
  276. package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
  277. package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
  278. package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
  279. package/.agent/skills/vue-expert/SKILL.md +22 -19
  280. package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
  281. package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
  282. package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
  283. package/.agent/skills/web-quality-audit/SKILL.md +5 -0
  284. package/.agent/skills/webapp-testing/SKILL.md +14 -13
  285. package/.agent/skills/webgpu-performance/SKILL.md +1 -0
  286. package/.agent/skills/whimsy-injector/SKILL.md +9 -5
  287. package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
  288. package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
  289. package/.agent/templates/DESIGN.md +119 -110
  290. package/.agent/templates/design-tokens.json +9 -6
  291. package/.agent/workflows/acf.md +1 -0
  292. package/.agent/workflows/api-tester.md +1 -0
  293. package/.agent/workflows/audit.md +1 -0
  294. package/.agent/workflows/brainstorm.md +1 -0
  295. package/.agent/workflows/changelog.md +1 -0
  296. package/.agent/workflows/contract.md +60 -0
  297. package/.agent/workflows/create.md +1 -0
  298. package/.agent/workflows/debug.md +1 -0
  299. package/.agent/workflows/deploy.md +1 -0
  300. package/.agent/workflows/enhance.md +1 -0
  301. package/.agent/workflows/fix-ci.md +89 -0
  302. package/.agent/workflows/fix.md +1 -0
  303. package/.agent/workflows/generate.md +1 -0
  304. package/.agent/workflows/marathon.md +1 -0
  305. package/.agent/workflows/migrate.md +1 -0
  306. package/.agent/workflows/minimal.md +9 -7
  307. package/.agent/workflows/orchestrate.md +1 -0
  308. package/.agent/workflows/performance-benchmarker.md +1 -0
  309. package/.agent/workflows/pipeline.md +26 -21
  310. package/.agent/workflows/plan.md +1 -0
  311. package/.agent/workflows/preview.md +1 -0
  312. package/.agent/workflows/refactor.md +3 -2
  313. package/.agent/workflows/review-ai.md +4 -3
  314. package/.agent/workflows/review.md +1 -0
  315. package/.agent/workflows/session.md +1 -0
  316. package/.agent/workflows/status.md +1 -0
  317. package/.agent/workflows/strengthen-skills.md +1 -0
  318. package/.agent/workflows/super-prompt.md +1 -0
  319. package/.agent/workflows/swarm.md +15 -3
  320. package/.agent/workflows/test.md +8 -7
  321. package/.agent/workflows/tribunal-backend.md +3 -2
  322. package/.agent/workflows/tribunal-cicd.md +104 -0
  323. package/.agent/workflows/tribunal-database.md +1 -0
  324. package/.agent/workflows/tribunal-frontend.md +8 -6
  325. package/.agent/workflows/tribunal-full.md +15 -14
  326. package/.agent/workflows/tribunal-mobile.md +6 -5
  327. package/.agent/workflows/tribunal-performance.md +1 -0
  328. package/.agent/workflows/tribunal-speed.md +1 -0
  329. package/.agent/workflows/tribunal-ui.md +29 -21
  330. package/.agent/workflows/ui-ux-pro-max.md +19 -15
  331. package/CONTRIBUTING.md +3 -3
  332. package/README.md +160 -88
  333. package/SECURITY.md +11 -11
  334. package/bin/mcp-server.js +512 -233
  335. package/bin/tribunal-kit.js +29 -30
  336. package/bin/wrapper.js +45 -48
  337. package/dist/cli.js +26 -0
  338. package/dist/commands/case.js +2 -0
  339. package/dist/commands/contract.js +440 -0
  340. package/dist/commands/memory.js +3 -2
  341. package/dist/commands/native.js +36 -0
  342. package/dist/commands/status.js +6 -0
  343. package/dist/esm/index.mjs +32 -0
  344. package/dist/index.d.ts +58 -3
  345. package/package.json +20 -16
  346. package/scripts/benchmark.js +62 -86
  347. package/scripts/changelog.js +67 -73
  348. package/scripts/fix-vbc.js +13 -15
  349. package/scripts/fix-vbc.ps1 +2 -118
  350. package/scripts/stress_benchmark.js +358 -0
  351. package/scripts/sync-version.js +71 -41
  352. package/scripts/validate-payload.js +23 -30
  353. package/scripts/visual_audit.js +23 -13
@@ -14,10 +14,10 @@
14
14
  * node .agent/scripts/dependency_analyzer.js . --check-unused
15
15
  */
16
16
 
17
- "use strict";
17
+ 'use strict';
18
18
 
19
- const fs = require("fs");
20
- const path = require("path");
19
+ const fs = require('fs');
20
+ const path = require('path');
21
21
 
22
22
  const {
23
23
  BOLD,
@@ -32,66 +32,59 @@ const {
32
32
  fail,
33
33
  warn,
34
34
  skip,
35
- } = require("./_colors");
35
+ } = require('./_colors');
36
36
 
37
- const { walkDir, loadJson, runCommand } = require("./_utils");
37
+ const { walkDir, loadJson, runCommand, DEFAULT_SKIP_DIRS } = require('./_utils');
38
38
 
39
- const SOURCE_EXTENSIONS = new Set([
40
- ".ts",
41
- ".tsx",
42
- ".js",
43
- ".jsx",
44
- ".mjs",
45
- ".cjs",
46
- ]);
39
+ const SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
47
40
 
48
41
  const NODE_BUILTINS = new Set([
49
- "fs",
50
- "path",
51
- "os",
52
- "crypto",
53
- "http",
54
- "https",
55
- "url",
56
- "util",
57
- "stream",
58
- "events",
59
- "child_process",
60
- "cluster",
61
- "net",
62
- "dns",
63
- "tls",
64
- "readline",
65
- "zlib",
66
- "buffer",
67
- "querystring",
68
- "string_decoder",
69
- "assert",
70
- "perf_hooks",
71
- "worker_threads",
72
- "timers",
73
- "v8",
74
- "node:fs",
75
- "node:path",
76
- "node:os",
77
- "node:crypto",
78
- "node:http",
79
- "node:https",
80
- "node:url",
81
- "node:util",
82
- "node:stream",
83
- "node:events",
84
- "node:child_process",
85
- "node:net",
86
- "node:dns",
87
- "node:tls",
88
- "node:readline",
89
- "node:zlib",
90
- "node:buffer",
91
- "node:assert",
92
- "node:perf_hooks",
93
- "node:worker_threads",
94
- "node:timers",
42
+ 'fs',
43
+ 'path',
44
+ 'os',
45
+ 'crypto',
46
+ 'http',
47
+ 'https',
48
+ 'url',
49
+ 'util',
50
+ 'stream',
51
+ 'events',
52
+ 'child_process',
53
+ 'cluster',
54
+ 'net',
55
+ 'dns',
56
+ 'tls',
57
+ 'readline',
58
+ 'zlib',
59
+ 'buffer',
60
+ 'querystring',
61
+ 'string_decoder',
62
+ 'assert',
63
+ 'perf_hooks',
64
+ 'worker_threads',
65
+ 'timers',
66
+ 'v8',
67
+ 'node:fs',
68
+ 'node:path',
69
+ 'node:os',
70
+ 'node:crypto',
71
+ 'node:http',
72
+ 'node:https',
73
+ 'node:url',
74
+ 'node:util',
75
+ 'node:stream',
76
+ 'node:events',
77
+ 'node:child_process',
78
+ 'node:net',
79
+ 'node:dns',
80
+ 'node:tls',
81
+ 'node:readline',
82
+ 'node:zlib',
83
+ 'node:buffer',
84
+ 'node:assert',
85
+ 'node:perf_hooks',
86
+ 'node:worker_threads',
87
+ 'node:timers',
95
88
  ]);
96
89
 
97
90
  function extractImports(projectRoot) {
@@ -102,13 +95,24 @@ function extractImports(projectRoot) {
102
95
  /import\s*\(\s*["']([^"'.][^"']*)["']/g,
103
96
  ];
104
97
 
105
- // Use shared walkDir from _utils.js
106
- const files = walkDir(projectRoot, { extensions: SOURCE_EXTENSIONS });
98
+ // Use shared walkDir from _utils.js (excluding test directories)
99
+ const files = walkDir(projectRoot, {
100
+ extensions: SOURCE_EXTENSIONS,
101
+ skipDirs: new Set([
102
+ ...DEFAULT_SKIP_DIRS,
103
+ 'test',
104
+ 'tests',
105
+ '__tests__',
106
+ 'spec',
107
+ 'specs',
108
+ 'fixtures',
109
+ ]),
110
+ });
107
111
 
108
112
  for (const fullPath of files) {
109
113
  let content;
110
114
  try {
111
- content = fs.readFileSync(fullPath, "utf8");
115
+ content = fs.readFileSync(fullPath, 'utf8');
112
116
  } catch {
113
117
  continue;
114
118
  }
@@ -119,11 +123,11 @@ function extractImports(projectRoot) {
119
123
  let match;
120
124
  while ((match = pattern.exec(content)) !== null) {
121
125
  let pkg = match[1];
122
- if (pkg.startsWith("@")) {
123
- const parts = pkg.split("/");
126
+ if (pkg.startsWith('@')) {
127
+ const parts = pkg.split('/');
124
128
  pkg = parts.length >= 2 ? `${parts[0]}/${parts[1]}` : pkg;
125
129
  } else {
126
- pkg = pkg.split("/")[0];
130
+ pkg = pkg.split('/')[0];
127
131
  }
128
132
  imports.add(pkg);
129
133
  }
@@ -140,33 +144,29 @@ function checkUnused(pkg, usedImports) {
140
144
  ]);
141
145
 
142
146
  const implicitPackages = new Set([
143
- "typescript",
144
- "eslint",
145
- "prettier",
146
- "vitest",
147
- "jest",
148
- "ts-node",
149
- "@types/node",
150
- "@types/react",
151
- "tailwindcss",
152
- "postcss",
153
- "autoprefixer",
154
- "nodemon",
155
- "tsx",
156
- "vite",
157
- "next",
158
- "webpack",
159
- "babel",
160
- "@babel/core",
147
+ 'typescript',
148
+ 'eslint',
149
+ 'prettier',
150
+ 'vitest',
151
+ 'jest',
152
+ 'ts-node',
153
+ '@types/node',
154
+ '@types/react',
155
+ 'tailwindcss',
156
+ 'postcss',
157
+ 'autoprefixer',
158
+ 'nodemon',
159
+ 'tsx',
160
+ 'vite',
161
+ 'next',
162
+ 'webpack',
163
+ 'babel',
164
+ '@babel/core',
161
165
  ]);
162
166
 
163
167
  const unused = [];
164
168
  for (const d of allDeps) {
165
- if (
166
- !implicitPackages.has(d) &&
167
- !d.startsWith("@types/") &&
168
- !usedImports.has(d)
169
- ) {
169
+ if (!implicitPackages.has(d) && !d.startsWith('@types/') && !usedImports.has(d)) {
170
170
  unused.push(d);
171
171
  }
172
172
  }
@@ -189,43 +189,40 @@ function checkPhantom(pkg, usedImports) {
189
189
  }
190
190
 
191
191
  function runNpmAudit(projectRoot) {
192
- const result = runCommand("npm", ["audit", "--json"], {
192
+ const result = runCommand('npm', ['audit', '--json'], {
193
193
  cwd: projectRoot,
194
194
  timeout: 60000,
195
195
  });
196
196
 
197
197
  if (result.status === null && !result.stdout) {
198
- skip("npm not installed — skipping audit");
198
+ skip('npm not installed — skipping audit');
199
199
  return true;
200
200
  }
201
201
 
202
202
  try {
203
203
  const auditData = JSON.parse(result.stdout);
204
- const vulns =
205
- (auditData.metadata && auditData.metadata.vulnerabilities) || {};
204
+ const vulns = (auditData.metadata && auditData.metadata.vulnerabilities) || {};
206
205
  const critical = vulns.critical || 0;
207
206
  const high = vulns.high || 0;
208
207
  const moderate = vulns.moderate || 0;
209
208
  const low = vulns.low || 0;
210
209
 
211
210
  if (critical + high > 0) {
212
- fail(
213
- `npm audit: ${critical} critical, ${high} high, ${moderate} moderate, ${low} low`,
214
- );
211
+ fail(`npm audit: ${critical} critical, ${high} high, ${moderate} moderate, ${low} low`);
215
212
  return false;
216
213
  } else if (moderate + low > 0) {
217
214
  warn(`npm audit: ${moderate} moderate, ${low} low vulnerabilities`);
218
215
  return true;
219
216
  } else {
220
- ok("npm audit — no known vulnerabilities");
217
+ ok('npm audit — no known vulnerabilities');
221
218
  return true;
222
219
  }
223
220
  } catch {
224
221
  if (result.ok) {
225
- ok("npm audit — clean");
222
+ ok('npm audit — clean');
226
223
  return true;
227
224
  }
228
- fail("npm audit returned errors");
225
+ fail('npm audit returned errors');
229
226
  return false;
230
227
  }
231
228
  }
@@ -237,22 +234,18 @@ function main() {
237
234
  let checkUnusedFlag = false;
238
235
 
239
236
  for (let i = 0; i < args.length; i++) {
240
- if (args[i] === "--audit") auditFlag = true;
241
- else if (args[i] === "--check-unused") checkUnusedFlag = true;
242
- else if (args[i] === "-h" || args[i] === "--help") {
243
- console.log(
244
- "Usage: node dependency_analyzer.js <path> [--audit] [--check-unused]",
245
- );
237
+ if (args[i] === '--audit') auditFlag = true;
238
+ else if (args[i] === '--check-unused') checkUnusedFlag = true;
239
+ else if (args[i] === '-h' || args[i] === '--help') {
240
+ console.log('Usage: node dependency_analyzer.js <path> [--audit] [--check-unused]');
246
241
  process.exit(0);
247
- } else if (!args[i].startsWith("-") && !targetPath) {
242
+ } else if (!args[i].startsWith('-') && !targetPath) {
248
243
  targetPath = args[i];
249
244
  }
250
245
  }
251
246
 
252
247
  if (!targetPath) {
253
- console.log(
254
- "Usage: node dependency_analyzer.js <path> [--audit] [--check-unused]",
255
- );
248
+ console.log('Usage: node dependency_analyzer.js <path> [--audit] [--check-unused]');
256
249
  process.exit(1);
257
250
  }
258
251
 
@@ -262,13 +255,11 @@ function main() {
262
255
  process.exit(1);
263
256
  }
264
257
 
265
- console.log(banner("dependency_analyzer.js", { Project: projectRoot }));
258
+ console.log(banner('dependency_analyzer.js', { Project: projectRoot }));
266
259
 
267
- const pkg = loadJson(path.join(projectRoot, "package.json"));
260
+ const pkg = loadJson(path.join(projectRoot, 'package.json'));
268
261
  if (!pkg) {
269
- skip(
270
- "No package.json found — dependency analysis requires a Node.js project",
271
- );
262
+ skip('No package.json found — dependency analysis requires a Node.js project');
272
263
  process.exit(0);
273
264
  }
274
265
 
@@ -282,36 +273,33 @@ function main() {
282
273
  );
283
274
 
284
275
  if (!checkUnusedFlag) {
285
- console.log(sectionHeader("Phantom Imports (not in package.json)"));
276
+ console.log(sectionHeader('Phantom Imports (not in package.json)'));
286
277
  const phantom = checkPhantom(pkg, usedImports);
287
278
  if (phantom.length > 0) {
288
279
  for (const p of phantom)
289
- fail(
290
- `'${p}' is imported but not in package.json — possible hallucination`,
291
- );
280
+ fail(`'${p}' is imported but not in package.json — possible hallucination`);
292
281
  issues += phantom.length;
293
282
  } else {
294
- ok("All imports found in package.json");
283
+ ok('All imports found in package.json');
295
284
  }
296
285
  }
297
286
 
298
- console.log(sectionHeader("Unused Dependencies"));
287
+ console.log(sectionHeader('Unused Dependencies'));
299
288
  const unused = checkUnused(pkg, usedImports);
300
289
  if (unused.length > 0) {
301
- for (const u of unused)
302
- warn(`'${u}' is in package.json but never imported — may be unused`);
290
+ for (const u of unused) warn(`'${u}' is in package.json but never imported — may be unused`);
303
291
  } else {
304
- ok("No obviously unused dependencies found");
292
+ ok('No obviously unused dependencies found');
305
293
  }
306
294
 
307
295
  if (auditFlag) {
308
- console.log(sectionHeader("Vulnerability Audit"));
296
+ console.log(sectionHeader('Vulnerability Audit'));
309
297
  if (!runNpmAudit(projectRoot)) issues += 1;
310
298
  }
311
299
 
312
300
  console.log(`\n${BOLD}${CYAN}━━━ Dependency Analysis Summary ━━━${RESET}`);
313
301
  if (issues === 0) {
314
- ok("All dependency checks passed");
302
+ ok('All dependency checks passed');
315
303
  } else {
316
304
  fail(`${issues} issue(s) found — review above`);
317
305
  }