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
@@ -9,28 +9,28 @@
9
9
  * node .agent/scripts/auto_preview.js restart
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
- const fs = require("fs");
15
- const path = require("path");
16
- const { spawn } = require("child_process");
17
- const net = require("net");
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+ const { spawn } = require('child_process');
17
+ const net = require('net');
18
18
 
19
- const PID_FILE = ".preview.pid";
19
+ const PID_FILE = '.preview.pid';
20
20
  const DEFAULT_PORT = 3000;
21
21
  const TIMEOUT_SECONDS = 30;
22
22
 
23
- const { GREEN, RED, YELLOW, BOLD, RESET } = require("./colors.js");
23
+ const { GREEN, RED, YELLOW, BOLD, RESET } = require('./colors.js');
24
24
 
25
25
  function findStartCommand() {
26
- const pkgPath = path.resolve("package.json");
26
+ const pkgPath = path.resolve('package.json');
27
27
  if (!fs.existsSync(pkgPath)) return { cmd: [], found: false };
28
28
 
29
29
  try {
30
- const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
30
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
31
31
  const scripts = pkg.scripts || {};
32
- if (scripts.dev) return { cmd: ["npm", "run", "dev"], found: true };
33
- if (scripts.start) return { cmd: ["npm", "run", "start"], found: true };
32
+ if (scripts.dev) return { cmd: ['npm', 'run', 'dev'], found: true };
33
+ if (scripts.start) return { cmd: ['npm', 'run', 'start'], found: true };
34
34
  } catch {
35
35
  // Ignore
36
36
  }
@@ -38,13 +38,13 @@ function findStartCommand() {
38
38
  }
39
39
 
40
40
  function getPortFromEnv() {
41
- const envPath = path.resolve(".env");
41
+ const envPath = path.resolve('.env');
42
42
  if (fs.existsSync(envPath)) {
43
43
  try {
44
- const data = fs.readFileSync(envPath, "utf8");
45
- for (const line of data.split("\n")) {
46
- if (line.trim().startsWith("PORT=")) {
47
- return parseInt(line.split("=")[1].trim(), 10);
44
+ const data = fs.readFileSync(envPath, 'utf8');
45
+ for (const line of data.split('\n')) {
46
+ if (line.trim().startsWith('PORT=')) {
47
+ return parseInt(line.split('=')[1].trim(), 10);
48
48
  }
49
49
  }
50
50
  } catch {}
@@ -53,36 +53,36 @@ function getPortFromEnv() {
53
53
  }
54
54
 
55
55
  function isPortOpen(port) {
56
- return new Promise((resolve) => {
56
+ return new Promise(resolve => {
57
57
  const client = new net.Socket();
58
58
  client.setTimeout(1000);
59
59
  client
60
- .once("connect", () => {
60
+ .once('connect', () => {
61
61
  client.destroy();
62
62
  resolve(true);
63
63
  })
64
- .once("timeout", () => {
64
+ .once('timeout', () => {
65
65
  client.destroy();
66
66
  resolve(false);
67
67
  })
68
- .once("error", () => {
68
+ .once('error', () => {
69
69
  resolve(false);
70
70
  })
71
- .connect(port, "localhost");
71
+ .connect(port, 'localhost');
72
72
  });
73
73
  }
74
74
 
75
75
  function readPid() {
76
76
  if (fs.existsSync(PID_FILE)) {
77
77
  try {
78
- return parseInt(fs.readFileSync(PID_FILE, "utf8").trim(), 10);
78
+ return parseInt(fs.readFileSync(PID_FILE, 'utf8').trim(), 10);
79
79
  } catch {}
80
80
  }
81
81
  return null;
82
82
  }
83
83
 
84
84
  function writePid(pid) {
85
- fs.writeFileSync(PID_FILE, String(pid), "utf8");
85
+ fs.writeFileSync(PID_FILE, String(pid), 'utf8');
86
86
  }
87
87
 
88
88
  function clearPid() {
@@ -107,18 +107,16 @@ async function startServer() {
107
107
  console.log(
108
108
  ` This project has no package.json, or its package.json has no 'dev' or 'start' script.`,
109
109
  );
110
- console.log(
111
- ` Add a script to package.json, or start your server manually.`,
112
- );
110
+ console.log(` Add a script to package.json, or start your server manually.`);
113
111
  return;
114
112
  }
115
113
 
116
- console.log(`${BOLD}Starting: ${cmd.join(" ")}${RESET}`);
114
+ console.log(`${BOLD}Starting: ${cmd.join(' ')}${RESET}`);
117
115
  // Adjust command for windows (npm.cmd instead of npm)
118
- const executable = process.platform === "win32" ? `${cmd[0]}.cmd` : cmd[0];
116
+ const executable = process.platform === 'win32' ? `${cmd[0]}.cmd` : cmd[0];
119
117
 
120
118
  const proc = spawn(executable, cmd.slice(1), {
121
- stdio: "pipe",
119
+ stdio: 'pipe',
122
120
  detached: true,
123
121
  });
124
122
 
@@ -135,19 +133,17 @@ async function startServer() {
135
133
  console.log(`\n${GREEN}✅ Server started${RESET}`);
136
134
  console.log(` URL: http://localhost:${port}`);
137
135
  console.log(` PID: ${proc.pid}`);
138
- console.log(` Command: ${cmd.join(" ")}`);
136
+ console.log(` Command: ${cmd.join(' ')}`);
139
137
  console.log(`\nStop with: node .agent/scripts/auto_preview.js stop`);
140
138
  return;
141
139
  }
142
- process.stdout.write(".");
143
- await new Promise((r) => setTimeout(r, 1000));
140
+ process.stdout.write('.');
141
+ await new Promise(r => setTimeout(r, 1000));
144
142
  }
145
143
 
146
- console.log(
147
- `\n${RED}❌ Server did not start within ${TIMEOUT_SECONDS}s${RESET}`,
148
- );
144
+ console.log(`\n${RED}❌ Server did not start within ${TIMEOUT_SECONDS}s${RESET}`);
149
145
  try {
150
- process.kill(proc.pid, "SIGTERM");
146
+ process.kill(proc.pid, 'SIGTERM');
151
147
  } catch {}
152
148
  clearPid();
153
149
  }
@@ -159,7 +155,7 @@ function stopServer() {
159
155
  return;
160
156
  }
161
157
  try {
162
- process.kill(pid, "SIGTERM");
158
+ process.kill(pid, 'SIGTERM');
163
159
  console.log(`${GREEN}✅ Server stopped (PID ${pid})${RESET}`);
164
160
  } catch {
165
161
  console.log(`${YELLOW}Process ${pid} was not running${RESET}`);
@@ -181,7 +177,7 @@ async function showStatus() {
181
177
 
182
178
  async function main() {
183
179
  const args = process.argv.slice(2);
184
- const actions = new Set(["start", "stop", "status", "restart"]);
180
+ const actions = new Set(['start', 'stop', 'status', 'restart']);
185
181
 
186
182
  if (args.length < 1 || !actions.has(args[0])) {
187
183
  console.log(`Usage: node auto_preview.js [start|stop|status|restart]`);
@@ -189,15 +185,15 @@ async function main() {
189
185
  }
190
186
 
191
187
  const action = args[0];
192
- if (action === "start") {
188
+ if (action === 'start') {
193
189
  await startServer();
194
- } else if (action === "stop") {
190
+ } else if (action === 'stop') {
195
191
  stopServer();
196
- } else if (action === "status") {
192
+ } else if (action === 'status') {
197
193
  await showStatus();
198
- } else if (action === "restart") {
194
+ } else if (action === 'restart') {
199
195
  stopServer();
200
- await new Promise((r) => setTimeout(r, 1000));
196
+ await new Promise(r => setTimeout(r, 1000));
201
197
  await startServer();
202
198
  }
203
199
  }
@@ -14,10 +14,10 @@
14
14
  * node .agent/scripts/bundle_analyzer.js . --threshold 500
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
  YELLOW,
@@ -33,21 +33,21 @@ const {
33
33
  fail,
34
34
  warn,
35
35
  skip,
36
- } = require("./_colors");
36
+ } = require('./_colors');
37
37
 
38
- const { loadJson, runCommand } = require("./_utils");
38
+ const { loadJson, runCommand } = require('./_utils');
39
39
 
40
40
  const HEAVY_PACKAGES = {
41
- moment: "Use date-fns or dayjs instead (~2KB vs ~230KB)",
42
- lodash: "Import specific functions: lodash/debounce instead of full lodash",
43
- rxjs: "Import specific operators to enable tree-shaking",
44
- "aws-sdk": "Use @aws-sdk/client-* v3 modular imports",
45
- firebase: "Use modular imports: firebase/auth, firebase/firestore",
46
- "chart.js": "Register only needed components",
47
- three: "Import specific modules from three/examples/jsm/",
48
- "@mui/material": "Ensure babel-plugin-import or modular imports",
49
- "@mui/icons-material": "Import specific icons, never the barrel",
50
- antd: "Use modular imports with babel-plugin-import",
41
+ moment: 'Use date-fns or dayjs instead (~2KB vs ~230KB)',
42
+ lodash: 'Import specific functions: lodash/debounce instead of full lodash',
43
+ rxjs: 'Import specific operators to enable tree-shaking',
44
+ 'aws-sdk': 'Use @aws-sdk/client-* v3 modular imports',
45
+ firebase: 'Use modular imports: firebase/auth, firebase/firestore',
46
+ 'chart.js': 'Register only needed components',
47
+ three: 'Import specific modules from three/examples/jsm/',
48
+ '@mui/material': 'Ensure babel-plugin-import or modular imports',
49
+ '@mui/icons-material': 'Import specific icons, never the barrel',
50
+ antd: 'Use modular imports with babel-plugin-import',
51
51
  };
52
52
 
53
53
  function formatSize(sizeBytes) {
@@ -57,27 +57,27 @@ function formatSize(sizeBytes) {
57
57
  }
58
58
 
59
59
  function detectBundler(projectRoot) {
60
- const pkg = loadJson(path.join(projectRoot, "package.json"));
60
+ const pkg = loadJson(path.join(projectRoot, 'package.json'));
61
61
  if (!pkg) return null;
62
62
 
63
63
  const deps = { ...(pkg.dependencies || {}), ...(pkg.devDependencies || {}) };
64
64
 
65
- if (deps.vite) return "vite";
66
- if (deps.next) return "next";
67
- if (deps.webpack) return "webpack";
65
+ if (deps.vite) return 'vite';
66
+ if (deps.next) return 'next';
67
+ if (deps.webpack) return 'webpack';
68
68
 
69
69
  if (
70
- fs.existsSync(path.join(projectRoot, "webpack.config.js")) ||
71
- fs.existsSync(path.join(projectRoot, "webpack.config.ts"))
70
+ fs.existsSync(path.join(projectRoot, 'webpack.config.js')) ||
71
+ fs.existsSync(path.join(projectRoot, 'webpack.config.ts'))
72
72
  ) {
73
- return "webpack";
73
+ return 'webpack';
74
74
  }
75
75
 
76
76
  return null;
77
77
  }
78
78
 
79
79
  function findDistDir(projectRoot) {
80
- const candidates = ["dist", "build", ".next", "out", "public/build"];
80
+ const candidates = ['dist', 'build', '.next', 'out', 'public/build'];
81
81
  for (const c of candidates) {
82
82
  const d = path.join(projectRoot, c);
83
83
  if (fs.existsSync(d) && fs.statSync(d).isDirectory()) return d;
@@ -118,7 +118,7 @@ function analyzeDist(distDir) {
118
118
  }
119
119
 
120
120
  function checkHeavyDependencies(projectRoot) {
121
- const pkg = loadJson(path.join(projectRoot, "package.json"));
121
+ const pkg = loadJson(path.join(projectRoot, 'package.json'));
122
122
  if (!pkg) return [];
123
123
 
124
124
  const deps = Object.keys(pkg.dependencies || {});
@@ -133,14 +133,14 @@ function checkHeavyDependencies(projectRoot) {
133
133
  }
134
134
 
135
135
  function runBuild(projectRoot) {
136
- const pkg = loadJson(path.join(projectRoot, "package.json"));
136
+ const pkg = loadJson(path.join(projectRoot, 'package.json'));
137
137
  if (pkg && (!pkg.scripts || !pkg.scripts.build)) {
138
138
  skip("No 'build' script found in package.json");
139
139
  return true;
140
140
  }
141
141
 
142
142
  const elapsed = timer();
143
- const result = runCommand("npm", ["run", "build"], {
143
+ const result = runCommand('npm', ['run', 'build'], {
144
144
  cwd: projectRoot,
145
145
  timeout: 300000,
146
146
  });
@@ -152,9 +152,9 @@ function runBuild(projectRoot) {
152
152
  }
153
153
 
154
154
  fail(`Build failed ${DIM}(${formatMs(ms)})${RESET}`);
155
- const output = (result.stdout + "\n" + result.stderr).trim();
155
+ const output = (result.stdout + '\n' + result.stderr).trim();
156
156
  if (output) {
157
- for (const line of output.split("\n").slice(0, 10)) {
157
+ for (const line of output.split('\n').slice(0, 10)) {
158
158
  console.log(` ${line}`);
159
159
  }
160
160
  }
@@ -169,18 +169,14 @@ function main() {
169
169
  let threshold = 250;
170
170
 
171
171
  for (let i = 0; i < args.length; i++) {
172
- if (args[i] === "--build") buildFlag = true;
173
- else if (args[i] === "--threshold" && i + 1 < args.length) {
172
+ if (args[i] === '--build') buildFlag = true;
173
+ else if (args[i] === '--threshold' && i + 1 < args.length) {
174
174
  threshold = parseInt(args[++i], 10);
175
- } else if (args[i] === "-h" || args[i] === "--help") {
176
- console.log(
177
- "Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
178
- );
175
+ } else if (args[i] === '-h' || args[i] === '--help') {
176
+ console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
179
177
  process.exit(0);
180
- } else if (args[i].startsWith("-")) {
181
- console.log(
182
- "Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
183
- );
178
+ } else if (args[i].startsWith('-')) {
179
+ console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
184
180
  process.exit(1);
185
181
  } else if (!targetPath) {
186
182
  targetPath = args[i];
@@ -188,9 +184,7 @@ function main() {
188
184
  }
189
185
 
190
186
  if (!targetPath) {
191
- console.log(
192
- "Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]",
193
- );
187
+ console.log('Usage: node bundle_analyzer.js <path> [--build] [--threshold <kb>]');
194
188
  process.exit(1);
195
189
  }
196
190
 
@@ -202,15 +196,15 @@ function main() {
202
196
 
203
197
  const bundler = detectBundler(projectRoot);
204
198
  console.log(
205
- banner("bundle_analyzer.js", {
199
+ banner('bundle_analyzer.js', {
206
200
  Project: projectRoot,
207
- Bundler: bundler || "auto-detect",
201
+ Bundler: bundler || 'auto-detect',
208
202
  Threshold: `${threshold}KB`,
209
203
  }),
210
204
  );
211
205
 
212
206
  if (buildFlag) {
213
- console.log(sectionHeader("Building Project"));
207
+ console.log(sectionHeader('Building Project'));
214
208
  if (!runBuild(projectRoot)) {
215
209
  process.exit(1);
216
210
  }
@@ -223,25 +217,19 @@ function main() {
223
217
  let distResult = null;
224
218
 
225
219
  if (!distDir) {
226
- skip("No build output directory found (dist/, build/, .next/, out/)");
227
- skip("Run with --build to create a build first, or build manually");
220
+ skip('No build output directory found (dist/, build/, .next/, out/)');
221
+ skip('Run with --build to create a build first, or build manually');
228
222
  } else {
229
- console.log(
230
- sectionHeader(
231
- `Bundle Size Analysis (${path.relative(projectRoot, distDir)}/)`,
232
- ),
233
- );
223
+ console.log(sectionHeader(`Bundle Size Analysis (${path.relative(projectRoot, distDir)}/)`));
234
224
  distResult = analyzeDist(distDir);
235
- console.log(
236
- `\n Total bundle size: ${BOLD}${formatSize(distResult.total)}${RESET}`,
237
- );
225
+ console.log(`\n Total bundle size: ${BOLD}${formatSize(distResult.total)}${RESET}`);
238
226
 
239
227
  const thresholdBytes = threshold * 1024;
240
228
  console.log(`\n ${BOLD}Top files by size:${RESET}`);
241
229
  let count = 0;
242
230
  for (const [filepath, size] of distResult.files) {
243
231
  if (count++ >= 10) break;
244
- const sizeStr = formatSize(size).padStart(10, " ");
232
+ const sizeStr = formatSize(size).padStart(10, ' ');
245
233
  if (size > thresholdBytes) {
246
234
  warn(`${sizeStr} ${filepath}`);
247
235
  } else {
@@ -250,8 +238,7 @@ function main() {
250
238
  }
251
239
 
252
240
  const largeJs = distResult.files.filter(
253
- ([f, s]) =>
254
- (f.endsWith(".js") || f.endsWith(".mjs")) && s > thresholdBytes,
241
+ ([f, s]) => (f.endsWith('.js') || f.endsWith('.mjs')) && s > thresholdBytes,
255
242
  );
256
243
  if (largeJs.length > 0) {
257
244
  console.log(
@@ -260,14 +247,14 @@ function main() {
260
247
  }
261
248
  }
262
249
 
263
- console.log(sectionHeader("Dependency Weight Check"));
250
+ console.log(sectionHeader('Dependency Weight Check'));
264
251
  if (heavy.length > 0) {
265
252
  for (const [pkgName, suggestion] of heavy) {
266
253
  warn(`'${pkgName}' is a heavy dependency`);
267
254
  console.log(` → ${suggestion}`);
268
255
  }
269
256
  } else {
270
- ok("No known-heavy packages detected");
257
+ ok('No known-heavy packages detected');
271
258
  }
272
259
 
273
260
  // ━━━ Summary ━━━ (reuses cached distResult instead of re-scanning)
@@ -286,7 +273,7 @@ function main() {
286
273
  if (heavy.length > 0) {
287
274
  warn(`${heavy.length} heavy dependency suggestion(s) — see above`);
288
275
  } else if (distResult && heavy.length === 0) {
289
- ok("No optimization suggestions");
276
+ ok('No optimization suggestions');
290
277
  }
291
278
  console.log();
292
279
  }