tribunal-kit 9.2.5 → 9.2.6

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 (875) hide show
  1. package/.agent/ADRs/ADR-001-system-architecture-intelligence.md +1 -1
  2. package/.agent/ARCHITECTURE.md +4 -4
  3. package/.agent/agents/agent-shield-auditor.md +4 -1
  4. package/.agent/agents/anti-slop-auditor.md +79 -0
  5. package/.agent/agents/api-architect.md +5 -0
  6. package/.agent/agents/architecture-auditor.md +20 -19
  7. package/.agent/agents/backend-security-architect.md +115 -0
  8. package/.agent/agents/frontend-reviewer.md +2 -0
  9. package/.agent/agents/frontend-specialist.md +2 -1
  10. package/.agent/agents/harness-manager.md +8 -0
  11. package/.agent/agents/human-gate-negotiator.md +6 -2
  12. package/.agent/agents/kernel-scheduler.md +4 -0
  13. package/.agent/agents/memory-archivist.md +5 -0
  14. package/.agent/agents/orchestrator.md +0 -1
  15. package/.agent/agents/project-planner.md +0 -1
  16. package/.agent/agents/security-auditor.md +0 -1
  17. package/.agent/agents/system-architect.md +15 -1
  18. package/.agent/agents/ui-ux-auditor.md +5 -0
  19. package/.agent/agents/ui-visual-auditor.md +5 -0
  20. package/.agent/config/claude.json +2 -2
  21. package/.agent/config/plugin.json +2 -2
  22. package/.agent/config/system-prompt.md +1 -1
  23. package/.agent/history/architecture-intelligence.html +794 -0
  24. package/.agent/history/architecture-model.json +16096 -0
  25. package/.agent/history/architecture-verification.json +22 -0
  26. package/.agent/history/integrity_manifest.json +1905 -0
  27. package/.agent/plans/implementation_plan.md +15 -8
  28. package/.agent/plans/task.md +6 -0
  29. package/.agent/routing_index.json +3340 -2060
  30. package/.agent/rules/GEMINI.md +1 -1
  31. package/.agent/rules/kernel.md +16 -13
  32. package/.agent/scripts/_utils.js +6 -1
  33. package/.agent/scripts/ab_json_experiment.js +129 -0
  34. package/.agent/scripts/architecture_diff.js +260 -0
  35. package/.agent/scripts/architecture_extractor.js +753 -0
  36. package/.agent/scripts/architecture_health.js +256 -0
  37. package/.agent/scripts/architecture_mapper.js +91 -25
  38. package/.agent/scripts/architecture_verifier.js +270 -0
  39. package/.agent/scripts/architecture_visualizer.js +873 -0
  40. package/.agent/scripts/backend_audit.js +238 -0
  41. package/.agent/scripts/backend_report_generator.js +161 -0
  42. package/.agent/scripts/benchmark_suite.js +493 -0
  43. package/.agent/scripts/blast_radius_engine.js +234 -0
  44. package/.agent/scripts/checklist.js +8 -4
  45. package/.agent/scripts/consolidation_experiment.js +543 -0
  46. package/.agent/scripts/context_compiler.js +49 -18
  47. package/.agent/scripts/cross_agent_correlator.js +223 -0
  48. package/.agent/scripts/dependency_analyzer.js +26 -4
  49. package/.agent/scripts/evidence_verifier.js +171 -0
  50. package/.agent/scripts/finding_schema.js +104 -0
  51. package/.agent/scripts/findings_validator.js +147 -0
  52. package/.agent/scripts/guardrail_engine.js +43 -24
  53. package/.agent/scripts/harness_manager.js +30 -18
  54. package/.agent/scripts/impact_classifier.js +6 -5
  55. package/.agent/scripts/integrity_manifest.js +49 -9
  56. package/.agent/scripts/lint_runner.js +4 -2
  57. package/.agent/scripts/live_abc_benchmark.js +452 -0
  58. package/.agent/scripts/mcp_server.js +81 -59
  59. package/.agent/scripts/memory_archivist.js +18 -12
  60. package/.agent/scripts/memory_consolidator.js +6 -6
  61. package/.agent/scripts/memory_engine.js +33 -17
  62. package/.agent/scripts/pipeline_engine.js +26 -11
  63. package/.agent/scripts/secret_redactor.js +119 -0
  64. package/.agent/scripts/session_logger.js +4 -4
  65. package/.agent/scripts/session_manager.js +6 -1
  66. package/.agent/scripts/swarm_dispatcher.js +29 -20
  67. package/.agent/scripts/syscall_registry.js +28 -23
  68. package/.agent/scripts/test_runner.js +1 -1
  69. package/.agent/scripts/tier3_audit.js +195 -0
  70. package/.agent/scripts/validation_engine.js +236 -0
  71. package/.agent/scripts/verify_all.js +5 -3
  72. package/.agent/skill_topic_map.json +341 -314
  73. package/.agent/skills/12-principles-of-animation/SKILL.md +92 -22
  74. package/.agent/skills/60fps-animation/SKILL.md +83 -26
  75. package/.agent/skills/accessible-animation/SKILL.md +93 -31
  76. package/.agent/skills/adapt/SKILL.md +92 -22
  77. package/.agent/skills/adr-generation/SKILL.md +88 -12
  78. package/.agent/skills/advanced-rag-pipelines/SKILL.md +83 -22
  79. package/.agent/skills/agent-organizer/SKILL.md +85 -27
  80. package/.agent/skills/agent-syscall-guidelines/SKILL.md +100 -25
  81. package/.agent/skills/agentic-patterns/SKILL.md +93 -23
  82. package/.agent/skills/agentic-workflows-2026/SKILL.md +92 -20
  83. package/.agent/skills/agentshield-security/SKILL.md +85 -26
  84. package/.agent/skills/ai-app-hardening/SKILL.md +92 -20
  85. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +83 -22
  86. package/.agent/skills/animation-on-scroll/SKILL.md +93 -31
  87. package/.agent/skills/animation-systems/SKILL.md +93 -31
  88. package/.agent/skills/antfu-conventions/SKILL.md +92 -22
  89. package/.agent/skills/anti-slop-enforcement/SKILL.md +118 -0
  90. package/.agent/skills/api-patterns/SKILL.md +83 -22
  91. package/.agent/skills/api-security-auditor/SKILL.md +102 -24
  92. package/.agent/skills/app-builder/SKILL.md +85 -30
  93. package/.agent/skills/appflow-wireframe/SKILL.md +78 -18
  94. package/.agent/skills/apple-design/SKILL.md +92 -22
  95. package/.agent/skills/architecture/SKILL.md +83 -22
  96. package/.agent/skills/architecture-drift/SKILL.md +88 -12
  97. package/.agent/skills/architecture-intelligence/SKILL.md +53 -0
  98. package/.agent/skills/audit-and-fix/SKILL.md +95 -25
  99. package/.agent/skills/authentication-best-practices/SKILL.md +92 -22
  100. package/.agent/skills/autonomous-execution/SKILL.md +86 -8
  101. package/.agent/skills/backend-alembic/SKILL.md +91 -0
  102. package/.agent/skills/backend-architecture-auditor/SKILL.md +101 -0
  103. package/.agent/skills/backend-mongodb/SKILL.md +133 -0
  104. package/.agent/skills/backend-mysql/SKILL.md +84 -0
  105. package/.agent/skills/backend-performance-auditor/SKILL.md +100 -0
  106. package/.agent/skills/backend-postgresql/SKILL.md +117 -0
  107. package/.agent/skills/backend-redis/SKILL.md +122 -0
  108. package/.agent/skills/backend-security-expert/SKILL.md +83 -22
  109. package/.agent/skills/backend-sqlalchemy/SKILL.md +107 -0
  110. package/.agent/skills/backend-sqlite/SKILL.md +93 -0
  111. package/.agent/skills/backend-testing-auditor/SKILL.md +113 -0
  112. package/.agent/skills/baseline-ui/SKILL.md +92 -22
  113. package/.agent/skills/bash-linux/SKILL.md +84 -26
  114. package/.agent/skills/behavioral-modes/SKILL.md +93 -23
  115. package/.agent/skills/better-colors/SKILL.md +92 -22
  116. package/.agent/skills/better-typography/SKILL.md +88 -18
  117. package/.agent/skills/better-ui/SKILL.md +83 -22
  118. package/.agent/skills/bolder/SKILL.md +92 -22
  119. package/.agent/skills/brainstorming/SKILL.md +83 -23
  120. package/.agent/skills/browser-audit/SKILL.md +94 -24
  121. package/.agent/skills/browser-native-ai/SKILL.md +92 -22
  122. package/.agent/skills/build-primitive/SKILL.md +92 -22
  123. package/.agent/skills/building-native-ui/SKILL.md +83 -22
  124. package/.agent/skills/cicd-pro/SKILL.md +83 -22
  125. package/.agent/skills/clarify/SKILL.md +92 -22
  126. package/.agent/skills/clean-code/SKILL.md +83 -22
  127. package/.agent/skills/cloud-architect/SKILL.md +83 -22
  128. package/.agent/skills/cobejs/SKILL.md +92 -22
  129. package/.agent/skills/code-review-checklist/SKILL.md +92 -22
  130. package/.agent/skills/codebase-design/SKILL.md +83 -22
  131. package/.agent/skills/colorize/SKILL.md +92 -22
  132. package/.agent/skills/compact-landing/SKILL.md +92 -22
  133. package/.agent/skills/company-logos/SKILL.md +92 -22
  134. package/.agent/skills/config-validator/SKILL.md +84 -26
  135. package/.agent/skills/containerization-pro/SKILL.md +83 -22
  136. package/.agent/skills/context-engineering-pro/SKILL.md +92 -20
  137. package/.agent/skills/create-design-md/SKILL.md +92 -22
  138. package/.agent/skills/critique/SKILL.md +93 -23
  139. package/.agent/skills/csharp-developer/SKILL.md +92 -22
  140. package/.agent/skills/data-validation-schemas/SKILL.md +84 -26
  141. package/.agent/skills/database-design/SKILL.md +83 -22
  142. package/.agent/skills/delight/SKILL.md +92 -22
  143. package/.agent/skills/deployment-procedures/SKILL.md +84 -26
  144. package/.agent/skills/design-lab/SKILL.md +93 -23
  145. package/.agent/skills/devops-engineer/SKILL.md +92 -22
  146. package/.agent/skills/devops-incident-responder/SKILL.md +84 -26
  147. package/.agent/skills/diagnosing-bugs/SKILL.md +93 -23
  148. package/.agent/skills/distill/SKILL.md +92 -22
  149. package/.agent/skills/documentation-templates/SKILL.md +84 -26
  150. package/.agent/skills/domain-modeling/SKILL.md +92 -22
  151. package/.agent/skills/duckdb-analytical-sql/SKILL.md +91 -19
  152. package/.agent/skills/edge-ai-mobile/SKILL.md +91 -19
  153. package/.agent/skills/edge-computing/SKILL.md +84 -26
  154. package/.agent/skills/emil-design-eng/SKILL.md +92 -22
  155. package/.agent/skills/error-resilience/SKILL.md +83 -22
  156. package/.agent/skills/expo-router-v4/SKILL.md +90 -18
  157. package/.agent/skills/extract-design-system/SKILL.md +84 -26
  158. package/.agent/skills/fabel-protocol/SKILL.md +93 -23
  159. package/.agent/skills/failure-mode-analysis/SKILL.md +88 -12
  160. package/.agent/skills/fastapi-pro/SKILL.md +123 -0
  161. package/.agent/skills/fixing-accessibility/SKILL.md +92 -22
  162. package/.agent/skills/fixing-metadata/SKILL.md +92 -22
  163. package/.agent/skills/fixing-motion-performance/SKILL.md +92 -22
  164. package/.agent/skills/framer-motion-expert/SKILL.md +85 -30
  165. package/.agent/skills/frontend-design/SKILL.md +92 -22
  166. package/.agent/skills/frontend-security-expert/SKILL.md +83 -22
  167. package/.agent/skills/game-design-expert/SKILL.md +84 -26
  168. package/.agent/skills/game-engineering-expert/SKILL.md +84 -26
  169. package/.agent/skills/generative-ui-expert/SKILL.md +92 -22
  170. package/.agent/skills/geo-fundamentals/SKILL.md +84 -26
  171. package/.agent/skills/git-pro/SKILL.md +83 -22
  172. package/.agent/skills/github-operations/SKILL.md +92 -22
  173. package/.agent/skills/gpt-taste/SKILL.md +92 -22
  174. package/.agent/skills/graph-engineering/SKILL.md +116 -28
  175. package/.agent/skills/gsap-core/SKILL.md +92 -22
  176. package/.agent/skills/gsap-frameworks/SKILL.md +92 -22
  177. package/.agent/skills/gsap-performance/SKILL.md +92 -22
  178. package/.agent/skills/gsap-plugins/SKILL.md +92 -22
  179. package/.agent/skills/gsap-react/SKILL.md +92 -22
  180. package/.agent/skills/gsap-scrolltrigger/SKILL.md +92 -22
  181. package/.agent/skills/gsap-timeline/SKILL.md +92 -22
  182. package/.agent/skills/gsap-utils/SKILL.md +92 -22
  183. package/.agent/skills/harden/SKILL.md +92 -22
  184. package/.agent/skills/harness-protocol/SKILL.md +93 -23
  185. package/.agent/skills/hf-cli/SKILL.md +86 -6
  186. package/.agent/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
  187. package/.agent/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
  188. package/.agent/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
  189. package/.agent/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
  190. package/.agent/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
  191. package/.agent/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
  192. package/.agent/skills/hf-mem/SKILL.md +86 -6
  193. package/.agent/skills/huggingface-best/SKILL.md +86 -16
  194. package/.agent/skills/huggingface-community-evals/SKILL.md +86 -8
  195. package/.agent/skills/huggingface-datasets/SKILL.md +86 -8
  196. package/.agent/skills/huggingface-gradio/SKILL.md +86 -8
  197. package/.agent/skills/huggingface-llm-trainer/SKILL.md +86 -9
  198. package/.agent/skills/huggingface-local-models/SKILL.md +86 -8
  199. package/.agent/skills/huggingface-lora-space-builder/SKILL.md +86 -8
  200. package/.agent/skills/huggingface-paper-publisher/SKILL.md +86 -7
  201. package/.agent/skills/huggingface-papers/SKILL.md +86 -8
  202. package/.agent/skills/huggingface-spaces/SKILL.md +86 -8
  203. package/.agent/skills/huggingface-tool-builder/SKILL.md +86 -8
  204. package/.agent/skills/huggingface-trackio/SKILL.md +77 -8
  205. package/.agent/skills/huggingface-vision-trainer/SKILL.md +86 -8
  206. package/.agent/skills/huggingface-zerogpu/SKILL.md +86 -8
  207. package/.agent/skills/human-gate-negotiation/SKILL.md +96 -30
  208. package/.agent/skills/i18n-localization/SKILL.md +84 -26
  209. package/.agent/skills/impeccable/SKILL.md +92 -22
  210. package/.agent/skills/improve-codebase-architecture/SKILL.md +92 -22
  211. package/.agent/skills/improve-ui/SKILL.md +92 -22
  212. package/.agent/skills/intelligent-routing/SKILL.md +81 -18
  213. package/.agent/skills/knowledge-graph/SKILL.md +94 -24
  214. package/.agent/skills/landing-page/SKILL.md +93 -23
  215. package/.agent/skills/lint-and-validate/SKILL.md +84 -26
  216. package/.agent/skills/llm-engineering/SKILL.md +92 -22
  217. package/.agent/skills/local-first/SKILL.md +84 -26
  218. package/.agent/skills/local-first-architecture/SKILL.md +83 -22
  219. package/.agent/skills/lottie-animation/SKILL.md +92 -22
  220. package/.agent/skills/marquee-loop/SKILL.md +92 -22
  221. package/.agent/skills/masked-reveal/SKILL.md +93 -24
  222. package/.agent/skills/mcp-builder/SKILL.md +84 -26
  223. package/.agent/skills/micro-interaction/SKILL.md +93 -31
  224. package/.agent/skills/mobile-design/SKILL.md +83 -22
  225. package/.agent/skills/monorepo-management/SKILL.md +84 -26
  226. package/.agent/skills/morphing-icons/SKILL.md +93 -24
  227. package/.agent/skills/motion-engineering/SKILL.md +84 -23
  228. package/.agent/skills/nextjs-react-expert/SKILL.md +83 -22
  229. package/.agent/skills/nodejs-best-practices/SKILL.md +83 -22
  230. package/.agent/skills/observability/SKILL.md +92 -22
  231. package/.agent/skills/opentelemetry-observability/SKILL.md +91 -19
  232. package/.agent/skills/page-transition-animation/SKILL.md +92 -22
  233. package/.agent/skills/parallel-agents/SKILL.md +85 -27
  234. package/.agent/skills/performance-profiling/SKILL.md +93 -23
  235. package/.agent/skills/plan-writing/SKILL.md +83 -22
  236. package/.agent/skills/platform-engineer/SKILL.md +84 -26
  237. package/.agent/skills/platform-engineering-opentofu/SKILL.md +91 -19
  238. package/.agent/skills/playwright-ai-e2e/SKILL.md +92 -20
  239. package/.agent/skills/playwright-best-practices/SKILL.md +85 -27
  240. package/.agent/skills/polish/SKILL.md +92 -22
  241. package/.agent/skills/powershell-windows/SKILL.md +92 -22
  242. package/.agent/skills/pricing-page/SKILL.md +92 -22
  243. package/.agent/skills/product-aware-heuristics/SKILL.md +93 -23
  244. package/.agent/skills/progressive-blur/SKILL.md +92 -22
  245. package/.agent/skills/project-idioms/SKILL.md +93 -23
  246. package/.agent/skills/property-based-testing/SKILL.md +92 -20
  247. package/.agent/skills/python-patterns/SKILL.md +84 -26
  248. package/.agent/skills/python-pro/SKILL.md +83 -22
  249. package/.agent/skills/quieter/SKILL.md +92 -22
  250. package/.agent/skills/react-doctor/SKILL.md +92 -22
  251. package/.agent/skills/react-specialist/SKILL.md +83 -22
  252. package/.agent/skills/readme-builder/SKILL.md +84 -26
  253. package/.agent/skills/realtime-patterns/SKILL.md +92 -22
  254. package/.agent/skills/red-team-tactics/SKILL.md +83 -22
  255. package/.agent/skills/redesign-skill/SKILL.md +92 -22
  256. package/.agent/skills/review-animations/SKILL.md +92 -22
  257. package/.agent/skills/rust-pro/SKILL.md +83 -22
  258. package/.agent/skills/semantic-filesystem-navigation/SKILL.md +79 -24
  259. package/.agent/skills/seo-fundamentals/SKILL.md +84 -26
  260. package/.agent/skills/server-management/SKILL.md +84 -26
  261. package/.agent/skills/session-log-interrogation/SKILL.md +81 -29
  262. package/.agent/skills/shadcn-ui-expert/SKILL.md +84 -26
  263. package/.agent/skills/shape/SKILL.md +93 -23
  264. package/.agent/skills/skill-creator/SKILL.md +88 -20
  265. package/.agent/skills/soft-skill/SKILL.md +92 -22
  266. package/.agent/skills/sounds-on-the-web/SKILL.md +92 -22
  267. package/.agent/skills/sql-pro/SKILL.md +83 -22
  268. package/.agent/skills/subagent-driven-development/SKILL.md +92 -32
  269. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +83 -22
  270. package/.agent/skills/svg-animation/SKILL.md +93 -24
  271. package/.agent/skills/swiftui-expert/SKILL.md +84 -26
  272. package/.agent/skills/swiss-design/SKILL.md +92 -22
  273. package/.agent/skills/system-design-pro/SKILL.md +90 -16
  274. package/.agent/skills/systematic-debugging/SKILL.md +85 -27
  275. package/.agent/skills/tailwind-patterns/SKILL.md +92 -22
  276. package/.agent/skills/taste-skill/SKILL.md +92 -22
  277. package/.agent/skills/tdd-workflow/SKILL.md +84 -23
  278. package/.agent/skills/test-result-analyzer/SKILL.md +93 -23
  279. package/.agent/skills/testing-patterns/SKILL.md +93 -23
  280. package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +92 -22
  281. package/.agent/skills/thinking-protocol/SKILL.md +79 -21
  282. package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +92 -22
  283. package/.agent/skills/train-sentence-transformers/SKILL.md +86 -8
  284. package/.agent/skills/transformers-js/SKILL.md +86 -15
  285. package/.agent/skills/transitions-dev/SKILL.md +92 -22
  286. package/.agent/skills/trend-researcher/SKILL.md +92 -22
  287. package/.agent/skills/tribunal-instincts-memory/SKILL.md +86 -31
  288. package/.agent/skills/trl-training/SKILL.md +86 -16
  289. package/.agent/skills/typescript-advanced/SKILL.md +83 -22
  290. package/.agent/skills/typeset/SKILL.md +92 -22
  291. package/.agent/skills/ui-reasoning-engine/SKILL.md +93 -23
  292. package/.agent/skills/ui-skill-packs/SKILL.md +94 -24
  293. package/.agent/skills/ui-skills-root/SKILL.md +94 -24
  294. package/.agent/skills/ui-ux-pro-max/SKILL.md +93 -23
  295. package/.agent/skills/ui-ux-researcher/SKILL.md +92 -22
  296. package/.agent/skills/vector-search-pgvector/SKILL.md +91 -19
  297. package/.agent/skills/verification-before-completion/SKILL.md +90 -18
  298. package/.agent/skills/vue-expert/SKILL.md +83 -22
  299. package/.agent/skills/vulnerability-scanner/SKILL.md +93 -26
  300. package/.agent/skills/web-accessibility-auditor/SKILL.md +84 -26
  301. package/.agent/skills/web-design-guidelines/SKILL.md +92 -22
  302. package/.agent/skills/web-quality-audit/SKILL.md +92 -22
  303. package/.agent/skills/webapp-testing/SKILL.md +85 -27
  304. package/.agent/skills/webgpu-performance/SKILL.md +92 -22
  305. package/.agent/skills/whimsy-injector/SKILL.md +93 -23
  306. package/.agent/skills/workflow-optimizer/SKILL.md +93 -23
  307. package/.agent/skills/zero-trust-passkeys/SKILL.md +91 -19
  308. package/.agent/skills_inventory.json +6922 -0
  309. package/.agent/workflows/arch.md +80 -0
  310. package/.agent/workflows/assimilate.md +4 -1
  311. package/.agent/workflows/audit.md +0 -1
  312. package/.agent/workflows/generate.md +26 -21
  313. package/.agent/workflows/htop.md +5 -1
  314. package/.agent/workflows/marathon.md +0 -1
  315. package/.agent/workflows/resume.md +5 -2
  316. package/.agent/workflows/skill-enhancement-engine.md +1 -1
  317. package/.agent/workflows/team-mode.md +4 -1
  318. package/.agent/workflows/tribunal-backend.md +19 -7
  319. package/.agent/workflows/tribunal-frontend.md +6 -0
  320. package/.agent/workflows/tribunal-ui.md +5 -0
  321. package/.agents/skills/12-principles-of-animation/SKILL.md +92 -22
  322. package/.agents/skills/60fps-animation/SKILL.md +83 -26
  323. package/.agents/skills/accessible-animation/SKILL.md +93 -31
  324. package/.agents/skills/adapt/SKILL.md +92 -22
  325. package/.agents/skills/adr-generation/SKILL.md +88 -12
  326. package/.agents/skills/advanced-rag-pipelines/SKILL.md +83 -22
  327. package/.agents/skills/agent-organizer/SKILL.md +85 -27
  328. package/.agents/skills/agent-syscall-guidelines/SKILL.md +100 -25
  329. package/.agents/skills/agentic-patterns/SKILL.md +93 -23
  330. package/.agents/skills/agentic-workflows-2026/SKILL.md +92 -20
  331. package/.agents/skills/agentshield-security/SKILL.md +85 -26
  332. package/.agents/skills/ai-app-hardening/SKILL.md +92 -20
  333. package/.agents/skills/ai-prompt-injection-defense/SKILL.md +83 -22
  334. package/.agents/skills/animation-on-scroll/SKILL.md +93 -31
  335. package/.agents/skills/animation-systems/SKILL.md +93 -31
  336. package/.agents/skills/antfu-conventions/SKILL.md +92 -22
  337. package/.agents/skills/anti-slop-enforcement/SKILL.md +118 -0
  338. package/.agents/skills/api-patterns/SKILL.md +83 -22
  339. package/.agents/skills/api-security-auditor/SKILL.md +102 -24
  340. package/.agents/skills/app-builder/SKILL.md +85 -30
  341. package/.agents/skills/appflow-wireframe/SKILL.md +78 -18
  342. package/.agents/skills/apple-design/SKILL.md +92 -22
  343. package/.agents/skills/architecture/SKILL.md +83 -22
  344. package/.agents/skills/architecture-drift/SKILL.md +88 -12
  345. package/.agents/skills/architecture-intelligence/SKILL.md +53 -0
  346. package/.agents/skills/audit-and-fix/SKILL.md +95 -25
  347. package/.agents/skills/authentication-best-practices/SKILL.md +92 -22
  348. package/.agents/skills/autonomous-execution/SKILL.md +86 -8
  349. package/.agents/skills/backend-alembic/SKILL.md +91 -0
  350. package/.agents/skills/backend-architecture-auditor/SKILL.md +101 -0
  351. package/.agents/skills/backend-mongodb/SKILL.md +133 -0
  352. package/.agents/skills/backend-mysql/SKILL.md +84 -0
  353. package/.agents/skills/backend-performance-auditor/SKILL.md +100 -0
  354. package/.agents/skills/backend-postgresql/SKILL.md +117 -0
  355. package/.agents/skills/backend-redis/SKILL.md +122 -0
  356. package/.agents/skills/backend-security-expert/SKILL.md +83 -22
  357. package/.agents/skills/backend-sqlalchemy/SKILL.md +107 -0
  358. package/.agents/skills/backend-sqlite/SKILL.md +93 -0
  359. package/.agents/skills/backend-testing-auditor/SKILL.md +113 -0
  360. package/.agents/skills/baseline-ui/SKILL.md +92 -22
  361. package/.agents/skills/bash-linux/SKILL.md +84 -26
  362. package/.agents/skills/behavioral-modes/SKILL.md +93 -23
  363. package/.agents/skills/better-colors/SKILL.md +92 -22
  364. package/.agents/skills/better-typography/SKILL.md +88 -18
  365. package/.agents/skills/better-ui/SKILL.md +83 -22
  366. package/.agents/skills/bolder/SKILL.md +92 -22
  367. package/.agents/skills/brainstorming/SKILL.md +83 -23
  368. package/.agents/skills/browser-audit/SKILL.md +94 -24
  369. package/.agents/skills/browser-native-ai/SKILL.md +92 -22
  370. package/.agents/skills/build-primitive/SKILL.md +92 -22
  371. package/.agents/skills/building-native-ui/SKILL.md +83 -22
  372. package/.agents/skills/cicd-pro/SKILL.md +83 -22
  373. package/.agents/skills/clarify/SKILL.md +92 -22
  374. package/.agents/skills/clean-code/SKILL.md +83 -22
  375. package/.agents/skills/cloud-architect/SKILL.md +83 -22
  376. package/.agents/skills/cobejs/SKILL.md +92 -22
  377. package/.agents/skills/code-review-checklist/SKILL.md +92 -22
  378. package/.agents/skills/codebase-design/SKILL.md +83 -22
  379. package/.agents/skills/colorize/SKILL.md +92 -22
  380. package/.agents/skills/compact-landing/SKILL.md +92 -22
  381. package/.agents/skills/company-logos/SKILL.md +92 -22
  382. package/.agents/skills/config-validator/SKILL.md +84 -26
  383. package/.agents/skills/containerization-pro/SKILL.md +83 -22
  384. package/.agents/skills/context-engineering-pro/SKILL.md +92 -20
  385. package/.agents/skills/create-design-md/SKILL.md +92 -22
  386. package/.agents/skills/critique/SKILL.md +93 -23
  387. package/.agents/skills/csharp-developer/SKILL.md +92 -22
  388. package/.agents/skills/data-validation-schemas/SKILL.md +84 -26
  389. package/.agents/skills/database-design/SKILL.md +83 -22
  390. package/.agents/skills/delight/SKILL.md +92 -22
  391. package/.agents/skills/deployment-procedures/SKILL.md +84 -26
  392. package/.agents/skills/design-lab/SKILL.md +93 -23
  393. package/.agents/skills/devops-engineer/SKILL.md +92 -22
  394. package/.agents/skills/devops-incident-responder/SKILL.md +84 -26
  395. package/.agents/skills/diagnosing-bugs/SKILL.md +93 -23
  396. package/.agents/skills/distill/SKILL.md +92 -22
  397. package/.agents/skills/documentation-templates/SKILL.md +84 -26
  398. package/.agents/skills/domain-modeling/SKILL.md +92 -22
  399. package/.agents/skills/duckdb-analytical-sql/SKILL.md +91 -19
  400. package/.agents/skills/edge-ai-mobile/SKILL.md +91 -19
  401. package/.agents/skills/edge-computing/SKILL.md +84 -26
  402. package/.agents/skills/emil-design-eng/SKILL.md +92 -22
  403. package/.agents/skills/error-resilience/SKILL.md +83 -22
  404. package/.agents/skills/expo-router-v4/SKILL.md +90 -18
  405. package/.agents/skills/extract-design-system/SKILL.md +84 -26
  406. package/.agents/skills/fabel-protocol/SKILL.md +93 -23
  407. package/.agents/skills/failure-mode-analysis/SKILL.md +88 -12
  408. package/.agents/skills/fastapi-pro/SKILL.md +123 -0
  409. package/.agents/skills/fixing-accessibility/SKILL.md +92 -22
  410. package/.agents/skills/fixing-metadata/SKILL.md +92 -22
  411. package/.agents/skills/fixing-motion-performance/SKILL.md +92 -22
  412. package/.agents/skills/framer-motion-expert/SKILL.md +85 -30
  413. package/.agents/skills/frontend-design/SKILL.md +92 -22
  414. package/.agents/skills/frontend-security-expert/SKILL.md +83 -22
  415. package/.agents/skills/game-design-expert/SKILL.md +84 -26
  416. package/.agents/skills/game-engineering-expert/SKILL.md +84 -26
  417. package/.agents/skills/generative-ui-expert/SKILL.md +92 -22
  418. package/.agents/skills/geo-fundamentals/SKILL.md +84 -26
  419. package/.agents/skills/git-pro/SKILL.md +83 -22
  420. package/.agents/skills/github-operations/SKILL.md +92 -22
  421. package/.agents/skills/gpt-taste/SKILL.md +92 -22
  422. package/.agents/skills/graph-engineering/SKILL.md +116 -28
  423. package/.agents/skills/gsap-core/SKILL.md +92 -22
  424. package/.agents/skills/gsap-frameworks/SKILL.md +92 -22
  425. package/.agents/skills/gsap-performance/SKILL.md +92 -22
  426. package/.agents/skills/gsap-plugins/SKILL.md +92 -22
  427. package/.agents/skills/gsap-react/SKILL.md +92 -22
  428. package/.agents/skills/gsap-scrolltrigger/SKILL.md +92 -22
  429. package/.agents/skills/gsap-timeline/SKILL.md +92 -22
  430. package/.agents/skills/gsap-utils/SKILL.md +92 -22
  431. package/.agents/skills/harden/SKILL.md +92 -22
  432. package/.agents/skills/harness-protocol/SKILL.md +93 -23
  433. package/.agents/skills/hf-cli/SKILL.md +86 -6
  434. package/.agents/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
  435. package/.agents/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
  436. package/.agents/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
  437. package/.agents/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
  438. package/.agents/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
  439. package/.agents/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
  440. package/.agents/skills/hf-mem/SKILL.md +86 -6
  441. package/.agents/skills/huggingface-best/SKILL.md +86 -16
  442. package/.agents/skills/huggingface-community-evals/SKILL.md +86 -8
  443. package/.agents/skills/huggingface-datasets/SKILL.md +86 -8
  444. package/.agents/skills/huggingface-gradio/SKILL.md +86 -8
  445. package/.agents/skills/huggingface-llm-trainer/SKILL.md +86 -9
  446. package/.agents/skills/huggingface-local-models/SKILL.md +86 -8
  447. package/.agents/skills/huggingface-lora-space-builder/SKILL.md +86 -8
  448. package/.agents/skills/huggingface-paper-publisher/SKILL.md +86 -7
  449. package/.agents/skills/huggingface-papers/SKILL.md +86 -8
  450. package/.agents/skills/huggingface-spaces/SKILL.md +86 -8
  451. package/.agents/skills/huggingface-tool-builder/SKILL.md +86 -8
  452. package/.agents/skills/huggingface-trackio/SKILL.md +77 -8
  453. package/.agents/skills/huggingface-vision-trainer/SKILL.md +86 -8
  454. package/.agents/skills/huggingface-zerogpu/SKILL.md +86 -8
  455. package/.agents/skills/human-gate-negotiation/SKILL.md +96 -30
  456. package/.agents/skills/i18n-localization/SKILL.md +84 -26
  457. package/.agents/skills/impeccable/SKILL.md +92 -22
  458. package/.agents/skills/improve-codebase-architecture/SKILL.md +92 -22
  459. package/.agents/skills/improve-ui/SKILL.md +92 -22
  460. package/.agents/skills/intelligent-routing/SKILL.md +81 -18
  461. package/.agents/skills/knowledge-graph/SKILL.md +94 -24
  462. package/.agents/skills/landing-page/SKILL.md +93 -23
  463. package/.agents/skills/lint-and-validate/SKILL.md +84 -26
  464. package/.agents/skills/llm-engineering/SKILL.md +92 -22
  465. package/.agents/skills/local-first/SKILL.md +84 -26
  466. package/.agents/skills/local-first-architecture/SKILL.md +83 -22
  467. package/.agents/skills/lottie-animation/SKILL.md +92 -22
  468. package/.agents/skills/marquee-loop/SKILL.md +92 -22
  469. package/.agents/skills/masked-reveal/SKILL.md +93 -24
  470. package/.agents/skills/mcp-builder/SKILL.md +84 -26
  471. package/.agents/skills/micro-interaction/SKILL.md +93 -31
  472. package/.agents/skills/mobile-design/SKILL.md +83 -22
  473. package/.agents/skills/monorepo-management/SKILL.md +84 -26
  474. package/.agents/skills/morphing-icons/SKILL.md +93 -24
  475. package/.agents/skills/motion-engineering/SKILL.md +84 -23
  476. package/.agents/skills/nextjs-react-expert/SKILL.md +83 -22
  477. package/.agents/skills/nodejs-best-practices/SKILL.md +83 -22
  478. package/.agents/skills/observability/SKILL.md +92 -22
  479. package/.agents/skills/opentelemetry-observability/SKILL.md +91 -19
  480. package/.agents/skills/page-transition-animation/SKILL.md +92 -22
  481. package/.agents/skills/parallel-agents/SKILL.md +85 -27
  482. package/.agents/skills/performance-profiling/SKILL.md +93 -23
  483. package/.agents/skills/plan-writing/SKILL.md +83 -22
  484. package/.agents/skills/platform-engineer/SKILL.md +84 -26
  485. package/.agents/skills/platform-engineering-opentofu/SKILL.md +91 -19
  486. package/.agents/skills/playwright-ai-e2e/SKILL.md +92 -20
  487. package/.agents/skills/playwright-best-practices/SKILL.md +85 -27
  488. package/.agents/skills/polish/SKILL.md +92 -22
  489. package/.agents/skills/powershell-windows/SKILL.md +92 -22
  490. package/.agents/skills/pricing-page/SKILL.md +92 -22
  491. package/.agents/skills/product-aware-heuristics/SKILL.md +93 -23
  492. package/.agents/skills/progressive-blur/SKILL.md +92 -22
  493. package/.agents/skills/project-idioms/SKILL.md +93 -23
  494. package/.agents/skills/property-based-testing/SKILL.md +92 -20
  495. package/.agents/skills/python-patterns/SKILL.md +84 -26
  496. package/.agents/skills/python-pro/SKILL.md +83 -22
  497. package/.agents/skills/quieter/SKILL.md +92 -22
  498. package/.agents/skills/react-doctor/SKILL.md +92 -22
  499. package/.agents/skills/react-specialist/SKILL.md +83 -22
  500. package/.agents/skills/readme-builder/SKILL.md +84 -26
  501. package/.agents/skills/realtime-patterns/SKILL.md +92 -22
  502. package/.agents/skills/red-team-tactics/SKILL.md +83 -22
  503. package/.agents/skills/redesign-skill/SKILL.md +92 -22
  504. package/.agents/skills/review-animations/SKILL.md +92 -22
  505. package/.agents/skills/rust-pro/SKILL.md +83 -22
  506. package/.agents/skills/semantic-filesystem-navigation/SKILL.md +79 -24
  507. package/.agents/skills/seo-fundamentals/SKILL.md +84 -26
  508. package/.agents/skills/server-management/SKILL.md +84 -26
  509. package/.agents/skills/session-log-interrogation/SKILL.md +81 -29
  510. package/.agents/skills/shadcn-ui-expert/SKILL.md +84 -26
  511. package/.agents/skills/shape/SKILL.md +93 -23
  512. package/.agents/skills/skill-creator/SKILL.md +88 -20
  513. package/.agents/skills/soft-skill/SKILL.md +92 -22
  514. package/.agents/skills/sounds-on-the-web/SKILL.md +92 -22
  515. package/.agents/skills/sql-pro/SKILL.md +83 -22
  516. package/.agents/skills/subagent-driven-development/SKILL.md +92 -32
  517. package/.agents/skills/supabase-postgres-best-practices/SKILL.md +83 -22
  518. package/.agents/skills/svg-animation/SKILL.md +93 -24
  519. package/.agents/skills/swiftui-expert/SKILL.md +84 -26
  520. package/.agents/skills/swiss-design/SKILL.md +92 -22
  521. package/.agents/skills/system-design-pro/SKILL.md +90 -16
  522. package/.agents/skills/systematic-debugging/SKILL.md +85 -27
  523. package/.agents/skills/tailwind-patterns/SKILL.md +92 -22
  524. package/.agents/skills/taste-skill/SKILL.md +92 -22
  525. package/.agents/skills/tdd-workflow/SKILL.md +84 -23
  526. package/.agents/skills/test-result-analyzer/SKILL.md +93 -23
  527. package/.agents/skills/testing-patterns/SKILL.md +93 -23
  528. package/.agents/skills/thermo-nuclear-code-quality-review/SKILL.md +92 -22
  529. package/.agents/skills/thinking-protocol/SKILL.md +79 -21
  530. package/.agents/skills/to-spring-or-not-to-spring/SKILL.md +92 -22
  531. package/.agents/skills/train-sentence-transformers/SKILL.md +86 -8
  532. package/.agents/skills/transformers-js/SKILL.md +86 -15
  533. package/.agents/skills/transitions-dev/SKILL.md +92 -22
  534. package/.agents/skills/trend-researcher/SKILL.md +92 -22
  535. package/.agents/skills/tribunal-instincts-memory/SKILL.md +86 -31
  536. package/.agents/skills/trl-training/SKILL.md +86 -16
  537. package/.agents/skills/typescript-advanced/SKILL.md +83 -22
  538. package/.agents/skills/typeset/SKILL.md +92 -22
  539. package/.agents/skills/ui-reasoning-engine/SKILL.md +93 -23
  540. package/.agents/skills/ui-skill-packs/SKILL.md +94 -24
  541. package/.agents/skills/ui-skills-root/SKILL.md +94 -24
  542. package/.agents/skills/ui-ux-pro-max/SKILL.md +93 -23
  543. package/.agents/skills/ui-ux-researcher/SKILL.md +92 -22
  544. package/.agents/skills/vector-search-pgvector/SKILL.md +91 -19
  545. package/.agents/skills/verification-before-completion/SKILL.md +90 -18
  546. package/.agents/skills/vue-expert/SKILL.md +83 -22
  547. package/.agents/skills/vulnerability-scanner/SKILL.md +93 -26
  548. package/.agents/skills/web-accessibility-auditor/SKILL.md +84 -26
  549. package/.agents/skills/web-design-guidelines/SKILL.md +92 -22
  550. package/.agents/skills/web-quality-audit/SKILL.md +92 -22
  551. package/.agents/skills/webapp-testing/SKILL.md +85 -27
  552. package/.agents/skills/webgpu-performance/SKILL.md +92 -22
  553. package/.agents/skills/whimsy-injector/SKILL.md +93 -23
  554. package/.agents/skills/workflow-optimizer/SKILL.md +93 -23
  555. package/.agents/skills/zero-trust-passkeys/SKILL.md +91 -19
  556. package/README.md +64 -42
  557. package/bin/adapter-install.js +1 -1
  558. package/bin/mcp-server.js +51 -42
  559. package/bin/wrapper.js +16 -0
  560. package/package.json +168 -169
  561. package/plugins/core-plugin.json +26 -26
  562. package/plugins/gemini/extension.json +6 -6
  563. package/skills/12-principles-of-animation/SKILL.md +92 -22
  564. package/skills/60fps-animation/SKILL.md +83 -26
  565. package/skills/accessible-animation/SKILL.md +93 -31
  566. package/skills/adapt/SKILL.md +92 -22
  567. package/skills/adr-generation/SKILL.md +88 -12
  568. package/skills/advanced-rag-pipelines/SKILL.md +83 -22
  569. package/skills/agent-organizer/SKILL.md +85 -27
  570. package/skills/agent-syscall-guidelines/SKILL.md +100 -25
  571. package/skills/agentic-patterns/SKILL.md +93 -23
  572. package/skills/agentic-workflows-2026/SKILL.md +92 -20
  573. package/skills/agentshield-security/SKILL.md +85 -26
  574. package/skills/ai-app-hardening/SKILL.md +92 -20
  575. package/skills/ai-prompt-injection-defense/SKILL.md +83 -22
  576. package/skills/animation-on-scroll/SKILL.md +93 -31
  577. package/skills/animation-systems/SKILL.md +93 -31
  578. package/skills/antfu-conventions/SKILL.md +92 -22
  579. package/skills/anti-slop-enforcement/SKILL.md +118 -0
  580. package/skills/api-patterns/SKILL.md +83 -22
  581. package/skills/api-security-auditor/SKILL.md +102 -24
  582. package/skills/app-builder/SKILL.md +85 -30
  583. package/skills/appflow-wireframe/SKILL.md +78 -18
  584. package/skills/apple-design/SKILL.md +92 -22
  585. package/skills/architecture/SKILL.md +83 -22
  586. package/skills/architecture-drift/SKILL.md +88 -12
  587. package/skills/architecture-intelligence/SKILL.md +53 -0
  588. package/skills/audit-and-fix/SKILL.md +95 -25
  589. package/skills/authentication-best-practices/SKILL.md +92 -22
  590. package/skills/autonomous-execution/SKILL.md +86 -8
  591. package/skills/backend-alembic/SKILL.md +91 -0
  592. package/skills/backend-architecture-auditor/SKILL.md +101 -0
  593. package/skills/backend-mongodb/SKILL.md +133 -0
  594. package/skills/backend-mysql/SKILL.md +84 -0
  595. package/skills/backend-performance-auditor/SKILL.md +100 -0
  596. package/skills/backend-postgresql/SKILL.md +117 -0
  597. package/skills/backend-redis/SKILL.md +122 -0
  598. package/skills/backend-security-expert/SKILL.md +83 -22
  599. package/skills/backend-sqlalchemy/SKILL.md +107 -0
  600. package/skills/backend-sqlite/SKILL.md +93 -0
  601. package/skills/backend-testing-auditor/SKILL.md +113 -0
  602. package/skills/baseline-ui/SKILL.md +92 -22
  603. package/skills/bash-linux/SKILL.md +84 -26
  604. package/skills/behavioral-modes/SKILL.md +93 -23
  605. package/skills/better-colors/SKILL.md +92 -22
  606. package/skills/better-typography/SKILL.md +88 -18
  607. package/skills/better-ui/SKILL.md +83 -22
  608. package/skills/bolder/SKILL.md +92 -22
  609. package/skills/brainstorming/SKILL.md +83 -23
  610. package/skills/browser-audit/SKILL.md +94 -24
  611. package/skills/browser-native-ai/SKILL.md +92 -22
  612. package/skills/build-primitive/SKILL.md +92 -22
  613. package/skills/building-native-ui/SKILL.md +83 -22
  614. package/skills/cicd-pro/SKILL.md +83 -22
  615. package/skills/clarify/SKILL.md +92 -22
  616. package/skills/clean-code/SKILL.md +83 -22
  617. package/skills/cloud-architect/SKILL.md +83 -22
  618. package/skills/cobejs/SKILL.md +92 -22
  619. package/skills/code-review-checklist/SKILL.md +92 -22
  620. package/skills/codebase-design/SKILL.md +83 -22
  621. package/skills/colorize/SKILL.md +92 -22
  622. package/skills/compact-landing/SKILL.md +92 -22
  623. package/skills/company-logos/SKILL.md +92 -22
  624. package/skills/config-validator/SKILL.md +84 -26
  625. package/skills/containerization-pro/SKILL.md +83 -22
  626. package/skills/context-engineering-pro/SKILL.md +92 -20
  627. package/skills/create-design-md/SKILL.md +92 -22
  628. package/skills/critique/SKILL.md +93 -23
  629. package/skills/csharp-developer/SKILL.md +92 -22
  630. package/skills/data-validation-schemas/SKILL.md +84 -26
  631. package/skills/database-design/SKILL.md +83 -22
  632. package/skills/delight/SKILL.md +92 -22
  633. package/skills/deployment-procedures/SKILL.md +84 -26
  634. package/skills/design-lab/SKILL.md +93 -23
  635. package/skills/devops-engineer/SKILL.md +92 -22
  636. package/skills/devops-incident-responder/SKILL.md +84 -26
  637. package/skills/diagnosing-bugs/SKILL.md +93 -23
  638. package/skills/distill/SKILL.md +92 -22
  639. package/skills/documentation-templates/SKILL.md +84 -26
  640. package/skills/domain-modeling/SKILL.md +92 -22
  641. package/skills/duckdb-analytical-sql/SKILL.md +91 -19
  642. package/skills/edge-ai-mobile/SKILL.md +91 -19
  643. package/skills/edge-computing/SKILL.md +84 -26
  644. package/skills/emil-design-eng/SKILL.md +92 -22
  645. package/skills/error-resilience/SKILL.md +83 -22
  646. package/skills/expo-router-v4/SKILL.md +90 -18
  647. package/skills/extract-design-system/SKILL.md +84 -26
  648. package/skills/fabel-protocol/SKILL.md +93 -23
  649. package/skills/failure-mode-analysis/SKILL.md +88 -12
  650. package/skills/fastapi-pro/SKILL.md +123 -0
  651. package/skills/fixing-accessibility/SKILL.md +92 -22
  652. package/skills/fixing-metadata/SKILL.md +92 -22
  653. package/skills/fixing-motion-performance/SKILL.md +92 -22
  654. package/skills/framer-motion-expert/SKILL.md +85 -30
  655. package/skills/frontend-design/SKILL.md +92 -22
  656. package/skills/frontend-security-expert/SKILL.md +83 -22
  657. package/skills/game-design-expert/SKILL.md +84 -26
  658. package/skills/game-engineering-expert/SKILL.md +84 -26
  659. package/skills/generative-ui-expert/SKILL.md +92 -22
  660. package/skills/geo-fundamentals/SKILL.md +84 -26
  661. package/skills/git-pro/SKILL.md +83 -22
  662. package/skills/github-operations/SKILL.md +92 -22
  663. package/skills/gpt-taste/SKILL.md +92 -22
  664. package/skills/graph-engineering/SKILL.md +116 -28
  665. package/skills/gsap-core/SKILL.md +92 -22
  666. package/skills/gsap-frameworks/SKILL.md +92 -22
  667. package/skills/gsap-performance/SKILL.md +92 -22
  668. package/skills/gsap-plugins/SKILL.md +92 -22
  669. package/skills/gsap-react/SKILL.md +92 -22
  670. package/skills/gsap-scrolltrigger/SKILL.md +92 -22
  671. package/skills/gsap-timeline/SKILL.md +92 -22
  672. package/skills/gsap-utils/SKILL.md +92 -22
  673. package/skills/harden/SKILL.md +92 -22
  674. package/skills/harness-protocol/SKILL.md +93 -23
  675. package/skills/hf-cli/SKILL.md +86 -6
  676. package/skills/hf-cloud-aws-context-discovery/SKILL.md +86 -8
  677. package/skills/hf-cloud-python-env-setup/SKILL.md +86 -8
  678. package/skills/hf-cloud-sagemaker-deployment-planner/SKILL.md +86 -8
  679. package/skills/hf-cloud-sagemaker-iam-preflight/SKILL.md +86 -8
  680. package/skills/hf-cloud-sagemaker-production-defaults/SKILL.md +86 -8
  681. package/skills/hf-cloud-serving-image-selection/SKILL.md +86 -8
  682. package/skills/hf-mem/SKILL.md +86 -6
  683. package/skills/huggingface-best/SKILL.md +86 -16
  684. package/skills/huggingface-community-evals/SKILL.md +86 -8
  685. package/skills/huggingface-datasets/SKILL.md +86 -8
  686. package/skills/huggingface-gradio/SKILL.md +86 -8
  687. package/skills/huggingface-llm-trainer/SKILL.md +86 -9
  688. package/skills/huggingface-local-models/SKILL.md +86 -8
  689. package/skills/huggingface-lora-space-builder/SKILL.md +86 -8
  690. package/skills/huggingface-paper-publisher/SKILL.md +86 -7
  691. package/skills/huggingface-papers/SKILL.md +86 -8
  692. package/skills/huggingface-spaces/SKILL.md +86 -8
  693. package/skills/huggingface-tool-builder/SKILL.md +86 -8
  694. package/skills/huggingface-trackio/SKILL.md +77 -8
  695. package/skills/huggingface-vision-trainer/SKILL.md +86 -8
  696. package/skills/huggingface-zerogpu/SKILL.md +86 -8
  697. package/skills/human-gate-negotiation/SKILL.md +96 -30
  698. package/skills/i18n-localization/SKILL.md +84 -26
  699. package/skills/impeccable/SKILL.md +92 -22
  700. package/skills/improve-codebase-architecture/SKILL.md +92 -22
  701. package/skills/improve-ui/SKILL.md +92 -22
  702. package/skills/intelligent-routing/SKILL.md +81 -18
  703. package/skills/knowledge-graph/SKILL.md +94 -24
  704. package/skills/landing-page/SKILL.md +93 -23
  705. package/skills/lint-and-validate/SKILL.md +84 -26
  706. package/skills/llm-engineering/SKILL.md +92 -22
  707. package/skills/local-first/SKILL.md +84 -26
  708. package/skills/local-first-architecture/SKILL.md +83 -22
  709. package/skills/lottie-animation/SKILL.md +92 -22
  710. package/skills/marquee-loop/SKILL.md +92 -22
  711. package/skills/masked-reveal/SKILL.md +93 -24
  712. package/skills/mcp-builder/SKILL.md +84 -26
  713. package/skills/micro-interaction/SKILL.md +93 -31
  714. package/skills/mobile-design/SKILL.md +83 -22
  715. package/skills/monorepo-management/SKILL.md +84 -26
  716. package/skills/morphing-icons/SKILL.md +93 -24
  717. package/skills/motion-engineering/SKILL.md +84 -23
  718. package/skills/nextjs-react-expert/SKILL.md +83 -22
  719. package/skills/nodejs-best-practices/SKILL.md +83 -22
  720. package/skills/observability/SKILL.md +92 -22
  721. package/skills/opentelemetry-observability/SKILL.md +91 -19
  722. package/skills/page-transition-animation/SKILL.md +92 -22
  723. package/skills/parallel-agents/SKILL.md +85 -27
  724. package/skills/performance-profiling/SKILL.md +93 -23
  725. package/skills/plan-writing/SKILL.md +83 -22
  726. package/skills/platform-engineer/SKILL.md +84 -26
  727. package/skills/platform-engineering-opentofu/SKILL.md +91 -19
  728. package/skills/playwright-ai-e2e/SKILL.md +92 -20
  729. package/skills/playwright-best-practices/SKILL.md +85 -27
  730. package/skills/polish/SKILL.md +92 -22
  731. package/skills/powershell-windows/SKILL.md +92 -22
  732. package/skills/pricing-page/SKILL.md +92 -22
  733. package/skills/product-aware-heuristics/SKILL.md +93 -23
  734. package/skills/progressive-blur/SKILL.md +92 -22
  735. package/skills/project-idioms/SKILL.md +93 -23
  736. package/skills/property-based-testing/SKILL.md +92 -20
  737. package/skills/python-patterns/SKILL.md +84 -26
  738. package/skills/python-pro/SKILL.md +83 -22
  739. package/skills/quieter/SKILL.md +92 -22
  740. package/skills/react-doctor/SKILL.md +92 -22
  741. package/skills/react-specialist/SKILL.md +83 -22
  742. package/skills/readme-builder/SKILL.md +84 -26
  743. package/skills/realtime-patterns/SKILL.md +92 -22
  744. package/skills/red-team-tactics/SKILL.md +83 -22
  745. package/skills/redesign-skill/SKILL.md +92 -22
  746. package/skills/review-animations/SKILL.md +92 -22
  747. package/skills/rust-pro/SKILL.md +83 -22
  748. package/skills/semantic-filesystem-navigation/SKILL.md +79 -24
  749. package/skills/seo-fundamentals/SKILL.md +84 -26
  750. package/skills/server-management/SKILL.md +84 -26
  751. package/skills/session-log-interrogation/SKILL.md +81 -29
  752. package/skills/shadcn-ui-expert/SKILL.md +84 -26
  753. package/skills/shape/SKILL.md +93 -23
  754. package/skills/skill-creator/SKILL.md +88 -20
  755. package/skills/soft-skill/SKILL.md +92 -22
  756. package/skills/sounds-on-the-web/SKILL.md +92 -22
  757. package/skills/sql-pro/SKILL.md +83 -22
  758. package/skills/subagent-driven-development/SKILL.md +92 -32
  759. package/skills/supabase-postgres-best-practices/SKILL.md +83 -22
  760. package/skills/svg-animation/SKILL.md +93 -24
  761. package/skills/swiftui-expert/SKILL.md +84 -26
  762. package/skills/swiss-design/SKILL.md +92 -22
  763. package/skills/system-design-pro/SKILL.md +90 -16
  764. package/skills/systematic-debugging/SKILL.md +85 -27
  765. package/skills/tailwind-patterns/SKILL.md +92 -22
  766. package/skills/taste-skill/SKILL.md +92 -22
  767. package/skills/tdd-workflow/SKILL.md +84 -23
  768. package/skills/test-result-analyzer/SKILL.md +93 -23
  769. package/skills/testing-patterns/SKILL.md +93 -23
  770. package/skills/thermo-nuclear-code-quality-review/SKILL.md +92 -22
  771. package/skills/thinking-protocol/SKILL.md +79 -21
  772. package/skills/to-spring-or-not-to-spring/SKILL.md +92 -22
  773. package/skills/train-sentence-transformers/SKILL.md +86 -8
  774. package/skills/transformers-js/SKILL.md +86 -15
  775. package/skills/transitions-dev/SKILL.md +92 -22
  776. package/skills/trend-researcher/SKILL.md +92 -22
  777. package/skills/tribunal-instincts-memory/SKILL.md +86 -31
  778. package/skills/trl-training/SKILL.md +86 -16
  779. package/skills/typescript-advanced/SKILL.md +83 -22
  780. package/skills/typeset/SKILL.md +92 -22
  781. package/skills/ui-reasoning-engine/SKILL.md +93 -23
  782. package/skills/ui-skill-packs/SKILL.md +94 -24
  783. package/skills/ui-skills-root/SKILL.md +94 -24
  784. package/skills/ui-ux-pro-max/SKILL.md +93 -23
  785. package/skills/ui-ux-researcher/SKILL.md +92 -22
  786. package/skills/vector-search-pgvector/SKILL.md +91 -19
  787. package/skills/verification-before-completion/SKILL.md +90 -18
  788. package/skills/vue-expert/SKILL.md +83 -22
  789. package/skills/vulnerability-scanner/SKILL.md +93 -26
  790. package/skills/web-accessibility-auditor/SKILL.md +84 -26
  791. package/skills/web-design-guidelines/SKILL.md +92 -22
  792. package/skills/web-quality-audit/SKILL.md +92 -22
  793. package/skills/webapp-testing/SKILL.md +85 -27
  794. package/skills/webgpu-performance/SKILL.md +92 -22
  795. package/skills/whimsy-injector/SKILL.md +93 -23
  796. package/skills/workflow-optimizer/SKILL.md +93 -23
  797. package/skills/zero-trust-passkeys/SKILL.md +91 -19
  798. package/src/browser/audit.js +11 -7
  799. package/src/browser/case_bridge.js +4 -3
  800. package/src/browser/cdp.js +60 -47
  801. package/src/browser/discovery.js +22 -12
  802. package/src/browser/idpi.js +6 -3
  803. package/src/browser/index.js +1 -1
  804. package/src/browser/launcher.js +8 -2
  805. package/src/browser/sentinel.js +13 -7
  806. package/src/browser/synapse.js +1 -1
  807. package/src/browser/trimmer.js +16 -7
  808. package/src/cli.js +402 -349
  809. package/src/commands/align.js +184 -177
  810. package/src/commands/arch.js +172 -0
  811. package/src/commands/audit-web.js +20 -6
  812. package/src/commands/browse.js +9 -3
  813. package/src/commands/case.js +93 -66
  814. package/src/commands/compare-web.js +12 -4
  815. package/src/commands/compile.js +81 -75
  816. package/src/commands/context.js +148 -63
  817. package/src/commands/contract.js +89 -106
  818. package/src/commands/deconstruct.js +18 -6
  819. package/src/commands/graph.js +47 -39
  820. package/src/commands/guardrail.js +45 -73
  821. package/src/commands/heal.js +15 -5
  822. package/src/commands/hook.js +29 -25
  823. package/src/commands/init.js +398 -329
  824. package/src/commands/learn.js +183 -107
  825. package/src/commands/marathon.js +65 -42
  826. package/src/commands/memory.js +491 -390
  827. package/src/commands/minimal.js +73 -59
  828. package/src/commands/mutate.js +31 -27
  829. package/src/commands/native.js +226 -81
  830. package/src/commands/optimize.js +303 -270
  831. package/src/commands/review.js +971 -0
  832. package/src/commands/sdd.js +65 -55
  833. package/src/commands/status.js +15 -5
  834. package/src/commands/sync.js +24 -22
  835. package/src/commands/system1.js +312 -0
  836. package/src/commands/uninstall.js +59 -50
  837. package/src/commands/update.js +41 -34
  838. package/src/commands/validate.js +13 -5
  839. package/src/context/ranker.js +339 -0
  840. package/src/esm/index.mjs +3 -1
  841. package/src/evolution/engine.js +295 -0
  842. package/src/mcp/server.js +2 -2
  843. package/src/synthesis/claim_check_separator.js +271 -0
  844. package/src/system1/laya-package-lock.json +303 -0
  845. package/src/system1/laya-package.json +16 -0
  846. package/src/system1/provider.js +127 -0
  847. package/src/tui/banner.js +1 -1
  848. package/src/tui/reviewer-grid.js +3 -7
  849. package/src/tui/shimmer.js +1 -3
  850. package/src/tui/theme.js +20 -20
  851. package/src/tui/wizard.js +4 -8
  852. package/src/types.js +2 -2
  853. package/src/utils/fs.js +79 -78
  854. package/src/utils/hasher.js +90 -88
  855. package/src/utils/helpers.js +40 -41
  856. package/src/utils/logger.js +38 -31
  857. package/src/utils/version.js +120 -101
  858. package/scripts/apply-version.js +0 -57
  859. package/scripts/audit_skill_sdo.js +0 -89
  860. package/scripts/benchmark.js +0 -231
  861. package/scripts/build-graph.js +0 -71
  862. package/scripts/changelog.js +0 -190
  863. package/scripts/clean-pycache.js +0 -42
  864. package/scripts/context_compiler.js +0 -1143
  865. package/scripts/fix-vbc.js +0 -96
  866. package/scripts/fix-vbc.ps1 +0 -3
  867. package/scripts/modernize_skills.js +0 -268
  868. package/scripts/package-cores.js +0 -116
  869. package/scripts/skill_enhancement_engine.js +0 -608
  870. package/scripts/stress_benchmark.js +0 -358
  871. package/scripts/sync-skills.js +0 -61
  872. package/scripts/sync-version.js +0 -177
  873. package/scripts/telemetry_gc.js +0 -156
  874. package/scripts/validate-payload.js +0 -73
  875. package/scripts/visual_audit.js +0 -136
@@ -1,1143 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * context_compiler.js — Tribunal Kit SOTA Context Compiler Engine
4
- * ════════════════════════════════════════════════════════════════════
5
- * Deterministic, high-speed context extraction engine for:
6
- * 1. Single Files (Flight Data HUD Dossier)
7
- * 2. Multi-File Pairs (Interface Bridge Dossier)
8
- * 3. Project Folders (Subsystem Macro Dossier)
9
- * 4. Batch Vault Crawling (--crawl)
10
- * 5. Semantic Drift Sentinel (--check)
11
- *
12
- * Designed for both CLI execution and in-process MCP server integration.
13
- */
14
-
15
- 'use strict';
16
-
17
- const fs = require('fs');
18
- const path = require('path');
19
- const crypto = require('crypto');
20
-
21
-
22
- // Optional ANSI colors
23
- let C = {
24
- GREEN: '\x1b[92m',
25
- YELLOW: '\x1b[93m',
26
- CYAN: '\x1b[96m',
27
- RED: '\x1b[91m',
28
- BLUE: '\x1b[94m',
29
- BOLD: '\x1b[1m',
30
- DIM: '\x1b[2m',
31
- RESET: '\x1b[0m',
32
- };
33
-
34
- try {
35
- const colorsMod = require('./_colors');
36
- if (colorsMod) C = Object.assign({}, C, colorsMod);
37
- } catch {
38
- try {
39
- const colorsMod = require('../.agent/scripts/_colors');
40
- if (colorsMod) C = Object.assign({}, C, colorsMod);
41
- } catch {
42
- // Fallback C used
43
- }
44
- }
45
-
46
- // ── Hashing Helpers ─────────────────────────────────────────────────────────
47
-
48
- function computeSha256(content) {
49
- const normalized = content.replace(/\r\n/g, '\n').trim();
50
- return crypto.createHash('sha256').update(normalized, 'utf8').digest('hex').substring(0, 16);
51
- }
52
-
53
- function computeInterfaceHash(signatures) {
54
- const text = signatures
55
- .map(s => `${s.kind}:${s.name}:${s.signature}`)
56
- .sort()
57
- .join('\n');
58
- return crypto.createHash('sha256').update(text, 'utf8').digest('hex').substring(0, 16);
59
- }
60
-
61
- // ── Multi-Language AST / Regex Skeleton Extractor ───────────────────────────
62
-
63
- function extractFileSkeleton(filePath, rawContent) {
64
- const ext = path.extname(filePath).toLowerCase();
65
- const lines = rawContent.split(/\r?\n/);
66
- const imports = [];
67
- const exports = [];
68
- const types = [];
69
- const landmines = [];
70
-
71
- // 1. Comments and Landmines (Chesterton's Fences)
72
- lines.forEach((line, idx) => {
73
- const trimmed = line.trim();
74
- if (
75
- trimmed.includes('// VERIFY') ||
76
- trimmed.includes('// NOTE') ||
77
- trimmed.includes('// FIX') ||
78
- trimmed.includes('// HACK') ||
79
- trimmed.includes('// CAUTION') ||
80
- trimmed.includes('// INVARIANT') ||
81
- trimmed.includes('// DO NOT') ||
82
- trimmed.includes('# VERIFY') ||
83
- trimmed.includes('# NOTE')
84
- ) {
85
- landmines.push({
86
- line: idx + 1,
87
- content: trimmed,
88
- });
89
- }
90
- });
91
-
92
- // 2. Language-Specific Parsers
93
- if (ext === '.ts' || ext === '.tsx' || ext === '.js' || ext === '.jsx' || ext === '.mjs') {
94
- // Phase 1: Try Rust AST Extraction
95
- try {
96
- const absPath = path.resolve(process.cwd(), filePath);
97
- let corePath = null;
98
- try {
99
- const { getBinaryPath } = require('../.agent/scripts/_utils');
100
- corePath = getBinaryPath();
101
- } catch (_) {
102
- try {
103
- const { getBinaryPath } = require('./_utils');
104
- corePath = getBinaryPath();
105
- } catch (_2) {
106
- try {
107
- const wrapper = require('../bin/wrapper');
108
- corePath = wrapper.getBinaryPath ? wrapper.getBinaryPath() : null;
109
- } catch (_3) {}
110
- }
111
- }
112
-
113
- if (
114
- !corePath &&
115
- process.env.TRIBUNAL_CORE_PATH &&
116
- fs.existsSync(process.env.TRIBUNAL_CORE_PATH)
117
- ) {
118
- corePath = process.env.TRIBUNAL_CORE_PATH;
119
- }
120
-
121
- if (corePath && fs.existsSync(corePath)) {
122
- const result = require('child_process').execFileSync(corePath, ['ast-extract', '--file', absPath], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
123
- const data = JSON.parse(result);
124
- if (data && data.success) {
125
- // We map the Rust JSON into the exact format expected by the rest of the JS code
126
- const mappedImports = data.imports.map(i => ({
127
- source: i.source,
128
- specifiers: i.specifiers,
129
- line: 0,
130
- }));
131
- const mappedExports = data.exports.map(e => ({
132
- kind: e.kind,
133
- name: e.name,
134
- signature: e.signature,
135
- line: 0,
136
- }));
137
- const mappedTypes = data.types.map(t => ({
138
- kind: t.kind,
139
- name: t.name,
140
- signature: t.signature,
141
- line: 0,
142
- }));
143
-
144
- return {
145
- imports: mappedImports,
146
- exports: mappedExports,
147
- types: mappedTypes,
148
- landmines: data.landmines,
149
- interfaceHash: computeInterfaceHash(mappedExports.concat(mappedTypes)),
150
- };
151
- }
152
- }
153
- } catch (_e) {
154
- // Silent fallback to Regex parsing
155
- }
156
-
157
- lines.forEach((line, idx) => {
158
- const trimmed = line.trim();
159
-
160
- // Imports
161
- const importMatch = trimmed.match(
162
- /^import\s+(?:type\s+)?(?:(.+?)\s+from\s+)?['"]([^'"]+)['"]/,
163
- );
164
- if (importMatch) {
165
- imports.push({
166
- source: importMatch[2],
167
- specifiers: importMatch[1] ? importMatch[1].trim() : '*',
168
- line: idx + 1,
169
- });
170
- }
171
- const requireMatch = trimmed.match(
172
- /(?:const|let|var)\s+(.+?)\s*=\s*require\(['"]([^'"]+)['"]\)/,
173
- );
174
- if (requireMatch) {
175
- imports.push({
176
- source: requireMatch[2],
177
- specifiers: requireMatch[1].trim(),
178
- line: idx + 1,
179
- });
180
- }
181
-
182
- // Exports
183
- const exportFunc = trimmed.match(
184
- /^export\s+(?:default\s+)?(?:async\s+)?function\s+(\w+)\s*(\(.*?\))/,
185
- );
186
- if (exportFunc) {
187
- exports.push({
188
- kind: 'function',
189
- name: exportFunc[1],
190
- signature: `function ${exportFunc[1]}${exportFunc[2]}`,
191
- line: idx + 1,
192
- });
193
- }
194
-
195
- const exportConst = trimmed.match(
196
- /^export\s+const\s+(\w+)(?:\s*:\s*([^=]+))?\s*=\s*(?:async\s+)?(?:\((.*?)\)|(\w+))\s*=>/,
197
- );
198
- if (exportConst) {
199
- exports.push({
200
- kind: 'arrow_function',
201
- name: exportConst[1],
202
- signature: `const ${exportConst[1]}: (${exportConst[3] || exportConst[4] || ''}) => ...`,
203
- line: idx + 1,
204
- });
205
- }
206
-
207
- const exportClass = trimmed.match(
208
- /^export\s+(?:default\s+)?class\s+(\w+)(?:\s+extends\s+(\w+))?/,
209
- );
210
- if (exportClass) {
211
- exports.push({
212
- kind: 'class',
213
- name: exportClass[1],
214
- signature: `class ${exportClass[1]}${exportClass[2] ? ' extends ' + exportClass[2] : ''}`,
215
- line: idx + 1,
216
- });
217
- }
218
-
219
- // Types & Interfaces
220
- const exportType = trimmed.match(/^export\s+type\s+(\w+)(?:<.*?>)?\s*=/);
221
- if (exportType) {
222
- types.push({
223
- kind: 'type',
224
- name: exportType[1],
225
- signature: trimmed.replace(/;?$/, ''),
226
- line: idx + 1,
227
- });
228
- }
229
-
230
- const exportInterface = trimmed.match(
231
- /^export\s+interface\s+(\w+)(?:<.*?>)?(?:\s+extends\s+.*?)?\s*\{?/,
232
- );
233
- if (exportInterface) {
234
- types.push({
235
- kind: 'interface',
236
- name: exportInterface[1],
237
- signature: trimmed.replace(/\{?$/, '').trim(),
238
- line: idx + 1,
239
- });
240
- }
241
- });
242
- } else if (ext === '.rs') {
243
- lines.forEach((line, idx) => {
244
- const trimmed = line.trim();
245
-
246
- // Use statements
247
- const useMatch = trimmed.match(/^(?:pub\s+)?use\s+([^;]+);/);
248
- if (useMatch) {
249
- imports.push({
250
- source: useMatch[1].trim(),
251
- specifiers: useMatch[1].trim(),
252
- line: idx + 1,
253
- });
254
- }
255
-
256
- // Public Functions
257
- const pubFn = trimmed.match(
258
- /^pub(?:\(.*?\))?\s+(?:async\s+)?fn\s+(\w+)(?:<.*?>)?\s*(\(.*?\))(?:\s*->\s*([^{;]+))?/,
259
- );
260
- if (pubFn) {
261
- exports.push({
262
- kind: 'function',
263
- name: pubFn[1],
264
- signature: `pub fn ${pubFn[1]}${pubFn[2]}${pubFn[3] ? ' -> ' + pubFn[3].trim() : ''}`,
265
- line: idx + 1,
266
- });
267
- }
268
-
269
- // Structs & Enums
270
- const pubStruct = trimmed.match(/^pub(?:\(.*?\))?\s+struct\s+(\w+)/);
271
- if (pubStruct) {
272
- types.push({
273
- kind: 'struct',
274
- name: pubStruct[1],
275
- signature: `pub struct ${pubStruct[1]}`,
276
- line: idx + 1,
277
- });
278
- }
279
-
280
- const pubEnum = trimmed.match(/^pub(?:\(.*?\))?\s+enum\s+(\w+)/);
281
- if (pubEnum) {
282
- types.push({
283
- kind: 'enum',
284
- name: pubEnum[1],
285
- signature: `pub enum ${pubEnum[1]}`,
286
- line: idx + 1,
287
- });
288
- }
289
-
290
- const pubTrait = trimmed.match(/^pub(?:\(.*?\))?\s+trait\s+(\w+)/);
291
- if (pubTrait) {
292
- types.push({
293
- kind: 'trait',
294
- name: pubTrait[1],
295
- signature: `pub trait ${pubTrait[1]}`,
296
- line: idx + 1,
297
- });
298
- }
299
- });
300
- } else if (ext === '.py') {
301
- lines.forEach((line, idx) => {
302
- const trimmed = line.trim();
303
-
304
- const importMatch = trimmed.match(/^(?:from\s+([\w.]+)\s+)?import\s+(.+)$/);
305
- if (importMatch) {
306
- imports.push({
307
- source: importMatch[1] || importMatch[2],
308
- specifiers: importMatch[2],
309
- line: idx + 1,
310
- });
311
- }
312
-
313
- const defMatch = trimmed.match(
314
- /^(?:async\s+)?def\s+([a-zA-Z_]\w*)\s*(\(.*?\))(?:\s*->\s*([^:]+))?:/,
315
- );
316
- if (defMatch && !defMatch[1].startsWith('_')) {
317
- exports.push({
318
- kind: 'function',
319
- name: defMatch[1],
320
- signature: `def ${defMatch[1]}${defMatch[2]}${defMatch[3] ? ' -> ' + defMatch[3].trim() : ''}`,
321
- line: idx + 1,
322
- });
323
- }
324
-
325
- const classMatch = trimmed.match(/^class\s+([a-zA-Z_]\w*)(?:\((.*?)\))?:/);
326
- if (classMatch && !classMatch[1].startsWith('_')) {
327
- types.push({
328
- kind: 'class',
329
- name: classMatch[1],
330
- signature: `class ${classMatch[1]}${classMatch[2] ? '(' + classMatch[2] + ')' : ''}`,
331
- line: idx + 1,
332
- });
333
- }
334
- });
335
- }
336
-
337
- const allSignatures = exports.concat(types);
338
- const interfaceHash = computeInterfaceHash(allSignatures);
339
-
340
- return {
341
- imports,
342
- exports,
343
- types,
344
- landmines,
345
- interfaceHash,
346
- };
347
- }
348
-
349
- // ── Inbound Callers Discovery ───────────────────────────────────────────────
350
-
351
- function findInboundCallers(targetFilePath, exportNames, workspaceRoot = process.cwd()) {
352
- const callers = [];
353
- const baseName = path.basename(targetFilePath);
354
- const stem = baseName.replace(/\.[^.]+$/, '');
355
- const relativeTarget = path.relative(workspaceRoot, targetFilePath).replace(/\\/g, '/');
356
-
357
- // Search tokens: module stem and exported symbol names
358
- const searchTokens = new Set([stem]);
359
- exportNames.slice(0, 8).forEach(n => searchTokens.add(n));
360
-
361
- // Try using git grep or ripgrep if available
362
- // SECURITY: Use execFileSync with argument arrays to prevent OS command injection (CWE-78).
363
- // The token is derived from the filename and may contain shell metacharacters like $(...).
364
- // Using execFileSync bypasses the shell entirely, so no interpolation attack is possible.
365
- const grepOutputs = [];
366
- try {
367
- const { execFileSync } = require('child_process');
368
- for (const token of searchTokens) {
369
- if (!token || token.length < 3) continue;
370
- try {
371
- const res = execFileSync('git', [
372
- 'grep', '-n', '-I', '-e', token, '--',
373
- ':!docs/', ':!node_modules/', ':!src/', ':!target/', ':!*.lock'
374
- ], {
375
- cwd: workspaceRoot,
376
- stdio: ['ignore', 'pipe', 'ignore'],
377
- encoding: 'utf8',
378
- });
379
- if (res) grepOutputs.push(...res.split('\n').filter(Boolean));
380
- } catch {
381
- // Ripgrep fallback
382
- try {
383
- const res = execFileSync('rg', [
384
- '-n', '--no-heading', '--color=never', '-e', token,
385
- '-g', '!docs/**', '-g', '!node_modules/**', '-g', '!target/**', '-g', '!src/**'
386
- ], {
387
- cwd: workspaceRoot,
388
- stdio: ['ignore', 'pipe', 'ignore'],
389
- encoding: 'utf8',
390
- });
391
- if (res) grepOutputs.push(...res.split('\n').filter(Boolean));
392
- } catch {
393
- // Silent catch
394
- }
395
- }
396
- }
397
- } catch {
398
- // Grep unavailable
399
- }
400
-
401
- const seenSites = new Set();
402
-
403
- for (const line of grepOutputs) {
404
- const parts = line.split(':');
405
- if (parts.length < 3) continue;
406
- const callerFile = parts[0].replace(/\\/g, '/');
407
- const lineNum = parseInt(parts[1], 10);
408
- const lineContent = parts.slice(2).join(':').trim();
409
-
410
- // Ignore self-references and context docs
411
- if (
412
- callerFile === relativeTarget ||
413
- callerFile.includes('.context.md') ||
414
- callerFile.includes('INDEX.md')
415
- ) {
416
- continue;
417
- }
418
-
419
- const key = `${callerFile}:${lineNum}`;
420
- if (seenSites.has(key)) continue;
421
- seenSites.add(key);
422
-
423
- callers.push({
424
- file: callerFile,
425
- line: lineNum,
426
- snippet: lineContent.substring(0, 100),
427
- isDirectImport:
428
- lineContent.includes('import') ||
429
- lineContent.includes('require') ||
430
- lineContent.includes('use '),
431
- });
432
-
433
- if (callers.length >= 12) break; // Cap callers for token efficiency
434
- }
435
-
436
- return callers;
437
- }
438
-
439
- // ── Test & Skill Discovery ──────────────────────────────────────────────────
440
-
441
- function discoverTests(targetFilePath, workspaceRoot = process.cwd()) {
442
- const tests = [];
443
- const baseName = path.basename(targetFilePath);
444
- const stem = baseName.replace(/\.[^.]+$/, '');
445
-
446
- const testPatterns = [`${stem}.test.`, `${stem}.spec.`, `${stem}_test.`, `test_${stem}.`];
447
-
448
- function walk(dir) {
449
- if (!fs.existsSync(dir)) return;
450
- try {
451
- const entries = fs.readdirSync(dir, { withFileTypes: true });
452
- for (const entry of entries) {
453
- if (
454
- entry.name === 'node_modules' ||
455
- entry.name === 'target' ||
456
- entry.name === '.git' ||
457
- entry.name === 'dist'
458
- ) {
459
- continue;
460
- }
461
- const full = path.join(dir, entry.name);
462
- if (entry.isDirectory()) {
463
- // Only walk tests dirs or immediate directories
464
- if (
465
- entry.name === 'tests' ||
466
- entry.name === '__tests__' ||
467
- entry.name === 'test' ||
468
- entry.name === 'crates'
469
- ) {
470
- walk(full);
471
- }
472
- } else if (entry.isFile()) {
473
- for (const pat of testPatterns) {
474
- if (entry.name.includes(pat)) {
475
- tests.push(path.relative(workspaceRoot, full).replace(/\\/g, '/'));
476
- break;
477
- }
478
- }
479
- }
480
- }
481
- } catch {
482
- // Ignore read errors
483
- }
484
- }
485
-
486
- walk(workspaceRoot);
487
- return Array.from(new Set(tests)).slice(0, 5);
488
- }
489
-
490
- function resolveSkills(targetFilePath, content) {
491
- const skills = [];
492
- const ext = path.extname(targetFilePath).toLowerCase();
493
- const lowerContent = content.toLowerCase();
494
-
495
- if (ext === '.rs') skills.push('rust-pro');
496
- if (ext === '.py') skills.push('python-pro');
497
- if (ext === '.ts' || ext === '.tsx' || ext === '.js') {
498
- if (lowerContent.includes('react') || ext.endsWith('x')) skills.push('react-specialist');
499
- else skills.push('clean-code');
500
- }
501
-
502
- if (
503
- lowerContent.includes('auth') ||
504
- lowerContent.includes('jwt') ||
505
- lowerContent.includes('token') ||
506
- lowerContent.includes('crypto')
507
- ) {
508
- skills.push('backend-security-expert');
509
- }
510
- if (
511
- lowerContent.includes('query') ||
512
- lowerContent.includes('prisma') ||
513
- lowerContent.includes('sql') ||
514
- lowerContent.includes('database')
515
- ) {
516
- skills.push('database-architect');
517
- }
518
- if (
519
- lowerContent.includes('compress') ||
520
- lowerContent.includes('tokens') ||
521
- lowerContent.includes('prompt')
522
- ) {
523
- skills.push('context-engineering-pro');
524
- }
525
-
526
- skills.push('fabel-protocol');
527
- return Array.from(new Set(skills));
528
- }
529
-
530
- function resolvePath(targetPath, workspaceRoot = process.cwd()) {
531
- const clean = targetPath.replace(/^['"]|['"]$/g, '');
532
- if (path.isAbsolute(clean) && fs.existsSync(clean)) return clean;
533
-
534
- const direct = path.resolve(workspaceRoot, clean);
535
- if (fs.existsSync(direct)) return direct;
536
-
537
- if (clean.startsWith('tribunal-kit/') || clean.startsWith('tribunal-kit\\')) {
538
- const stripped = clean.replace(/^tribunal-kit[/\\]/, '');
539
- const strippedPath = path.resolve(workspaceRoot, stripped);
540
- if (fs.existsSync(strippedPath)) return strippedPath;
541
- }
542
-
543
- const parentPath = path.resolve(workspaceRoot, '..', clean);
544
- if (fs.existsSync(parentPath)) return parentPath;
545
-
546
- return direct;
547
- }
548
-
549
- function getDocsDir(workspaceRoot = process.cwd()) {
550
- const local = path.join(workspaceRoot, 'docs', 'context');
551
- if (fs.existsSync(local)) {
552
- try {
553
- const files = fs
554
- .readdirSync(local)
555
- .filter(f => f.endsWith('.context.md') || f.endsWith('.bridge.md'));
556
- if (files.length > 0) return local;
557
- } catch {
558
- // fallback
559
- }
560
- }
561
- const parent = path.join(workspaceRoot, '..', 'docs', 'context');
562
- if (fs.existsSync(parent)) {
563
- try {
564
- const files = fs
565
- .readdirSync(parent)
566
- .filter(f => f.endsWith('.context.md') || f.endsWith('.bridge.md'));
567
- if (files.length > 0) return parent;
568
- } catch {
569
- // fallback
570
- }
571
- }
572
- return local;
573
- }
574
-
575
- // ── Single-File Context Analysis ────────────────────────────────────────────
576
-
577
- function analyzeSingleFile(targetPath, workspaceRoot = process.cwd()) {
578
- const absPath = resolvePath(targetPath, workspaceRoot);
579
- if (!fs.existsSync(absPath)) {
580
- throw new Error(`File not found: ${absPath}`);
581
- }
582
-
583
- const rawContent = fs.readFileSync(absPath, 'utf8');
584
- const relativePath = path.relative(workspaceRoot, absPath).replace(/\\/g, '/');
585
- const sourceHash = computeSha256(rawContent);
586
- const skeleton = extractFileSkeleton(relativePath, rawContent);
587
- const exportNames = skeleton.exports.map(e => e.name).concat(skeleton.types.map(t => t.name));
588
- const callers = findInboundCallers(absPath, exportNames, workspaceRoot);
589
- const tests = discoverTests(absPath, workspaceRoot);
590
- const skills = resolveSkills(relativePath, rawContent);
591
-
592
- // Determine domain layer
593
- let domainLayer = 'Core Logic / Utility';
594
- if (relativePath.includes('api') || relativePath.includes('route'))
595
- domainLayer = 'API / Gateway Layer';
596
- else if (relativePath.includes('service')) domainLayer = 'Service / Business Logic';
597
- else if (
598
- relativePath.includes('model') ||
599
- relativePath.includes('schema') ||
600
- relativePath.includes('db')
601
- )
602
- domainLayer = 'Data / Persistence Layer';
603
- else if (relativePath.includes('components') || relativePath.includes('ui'))
604
- domainLayer = 'UI / Presentation Layer';
605
- else if (relativePath.includes('commands')) domainLayer = 'Command / Dispatch Layer';
606
-
607
- return {
608
- mode: 'single_file',
609
- filePath: relativePath,
610
- sourceHash,
611
- interfaceHash: skeleton.interfaceHash,
612
- domainLayer,
613
- imports: skeleton.imports,
614
- exports: skeleton.exports,
615
- types: skeleton.types,
616
- landmines: skeleton.landmines,
617
- callers,
618
- tests,
619
- skills,
620
- lineCount: rawContent.split('\n').length,
621
- byteSize: Buffer.byteLength(rawContent, 'utf8'),
622
- };
623
- }
624
-
625
- // ── Multi-File Interface Bridge Analysis ────────────────────────────────────
626
-
627
- function analyzeMultiFileBridge(pathA, pathB, workspaceRoot = process.cwd()) {
628
- const metaA = analyzeSingleFile(pathA, workspaceRoot);
629
- const metaB = analyzeSingleFile(pathB, workspaceRoot);
630
-
631
- const aImportsB = metaA.imports.some(imp =>
632
- imp.source.includes(path.basename(metaB.filePath).replace(/\.[^.]+$/, '')),
633
- );
634
- const bImportsA = metaB.imports.some(imp =>
635
- imp.source.includes(path.basename(metaA.filePath).replace(/\.[^.]+$/, '')),
636
- );
637
-
638
- const sharedTypes = [];
639
- const typeNamesA = new Set(metaA.types.map(t => t.name));
640
- for (const t of metaB.types) {
641
- if (typeNamesA.has(t.name)) sharedTypes.push(t.name);
642
- }
643
-
644
- return {
645
- mode: 'multi_file_bridge',
646
- fileA: metaA,
647
- fileB: metaB,
648
- coupling: {
649
- aImportsB,
650
- bImportsA,
651
- sharedTypes,
652
- relationship:
653
- aImportsB && bImportsA
654
- ? 'Bidirectional Coupling'
655
- : aImportsB
656
- ? 'A depends on B'
657
- : bImportsA
658
- ? 'B depends on A'
659
- : 'Sibling / Peer Modules',
660
- },
661
- };
662
- }
663
-
664
- // ── Directory / Project Subsystem Analysis ──────────────────────────────────
665
-
666
- function analyzeDirectory(dirPath, workspaceRoot = process.cwd()) {
667
- const absDir = path.isAbsolute(dirPath) ? dirPath : path.resolve(workspaceRoot, dirPath);
668
- if (!fs.existsSync(absDir) || !fs.statSync(absDir).isDirectory()) {
669
- throw new Error(`Directory not found: ${absDir}`);
670
- }
671
-
672
- const relativeDir = path.relative(workspaceRoot, absDir).replace(/\\/g, '/') || '.';
673
- const manifests = [];
674
- const subsystems = [];
675
- let totalFiles = 0;
676
- const langCounts = {};
677
-
678
- const ignoreSet = new Set([
679
- 'node_modules',
680
- 'target',
681
- '.git',
682
- 'dist',
683
- 'coverage',
684
- '.gemini',
685
- 'build',
686
- ]);
687
-
688
- // Check top-level manifests
689
- if (fs.existsSync(path.join(absDir, 'package.json'))) manifests.push('package.json');
690
- if (fs.existsSync(path.join(absDir, 'Cargo.toml'))) manifests.push('Cargo.toml');
691
- if (fs.existsSync(path.join(absDir, 'pyproject.toml'))) manifests.push('pyproject.toml');
692
-
693
- const entries = fs.readdirSync(absDir, { withFileTypes: true });
694
-
695
- for (const entry of entries) {
696
- if (ignoreSet.has(entry.name) || entry.name.startsWith('.')) continue;
697
- const subFull = path.join(absDir, entry.name);
698
- if (entry.isDirectory()) {
699
- try {
700
- const subFiles = fs.readdirSync(subFull);
701
- subsystems.push({
702
- name: entry.name,
703
- fileCount: subFiles.length,
704
- keySample: subFiles.slice(0, 3).join(', '),
705
- });
706
- } catch {
707
- // Ignore unreadable
708
- }
709
- } else if (entry.isFile()) {
710
- totalFiles++;
711
- const ext = path.extname(entry.name).toLowerCase() || 'other';
712
- langCounts[ext] = (langCounts[ext] || 0) + 1;
713
- }
714
- }
715
-
716
- return {
717
- mode: 'directory_subsystem',
718
- dirPath: relativeDir,
719
- manifests,
720
- subsystems,
721
- directFiles: totalFiles,
722
- langCounts,
723
- };
724
- }
725
-
726
- // ── Markdown Dossier Generators ─────────────────────────────────────────────
727
-
728
- function renderSingleFileDossier(data) {
729
- const callersTable =
730
- data.callers.length > 0
731
- ? data.callers
732
- .map(
733
- c =>
734
- `| \`${c.file}:${c.line}\` | \`${c.snippet}\` | ${c.isDirectImport ? 'Direct Import' : 'Symbol Reference'} |`,
735
- )
736
- .join('\n')
737
- : '| *None detected (potential root entrypoint or test)* | - | - |';
738
-
739
- const typesTable =
740
- data.exports.concat(data.types).length > 0
741
- ? data.exports
742
- .concat(data.types)
743
- .slice(0, 10)
744
- .map(s => `| \`${s.name}\` | \`${s.kind}\` | \`${s.signature}\` | Line ${s.line} |`)
745
- .join('\n')
746
- : '| *No explicit exported symbols detected* | - | - | - |';
747
-
748
- const landminesContent =
749
- data.landmines.length > 0
750
- ? data.landmines.map(l => `> [!CAUTION]\n> **Line ${l.line}:** \`${l.content}\``).join('\n\n')
751
- : '> [!NOTE]\n> No explicit defensive comments (`// VERIFY`, `// NOTE`, `// HACK`) found in source code.';
752
-
753
- const testCommand = data.tests.length > 0 ? `npm test -- ${data.tests[0]}` : `npm test`;
754
-
755
- return `---
756
- version: 2.0.0
757
- source_file: "${data.filePath}"
758
- source_hash: "${data.sourceHash}"
759
- interface_hash: "${data.interfaceHash}"
760
- last_synced: "${new Date().toISOString().split('T')[0]}"
761
- domain_layer: "${data.domainLayer}"
762
- associated_skills:
763
- ${data.skills.map(s => ` - ${s}`).join('\n')}
764
- associated_tests:
765
- ${data.tests.length > 0 ? data.tests.map(t => ` - ${t}`).join('\n') : ' - none'}
766
- ---
767
-
768
- <!-- AI_QUICK_INJECT_START -->
769
- > [!TIP]
770
- > **AI Prompt Injection Card (Copy into future prompts touching this file):**
771
- > \`\`\`yaml
772
- > Target: ${data.filePath} (${data.domainLayer})
773
- > Role: Core logic for ${path.basename(data.filePath)}.
774
- > Exports: [${data.exports
775
- .map(e => e.name)
776
- .slice(0, 6)
777
- .join(', ')}]
778
- > Inbound Callers: ${data.callers.length} active consumer sites.
779
- > Invariant Check: Verify test passing before merge: ${testCommand}
780
- > \`\`\`
781
- <!-- AI_QUICK_INJECT_END -->
782
-
783
- # 🧭 FILE DOSSIER: \`${path.basename(data.filePath)}\`
784
- \`${data.filePath}\` • **${data.domainLayer}** • **Hash:** \`${data.sourceHash}\`
785
-
786
- | Freshness | Blast Radius | Exports Count | Test Coverage | Primary Callers |
787
- | :--- | :--- | :--- | :--- | :--- |
788
- | 🟢 **Fresh** (\`${data.sourceHash}\`) | **${data.callers.length} Callers** | **${data.exports.length} Symbols** | ${data.tests.length > 0 ? '✅ Linked (' + data.tests.length + ' files)' : '⚠️ Unlinked'} | \`${data.callers[0] ? data.callers[0].file : 'Entrypoint'}\` |
789
-
790
- ---
791
-
792
- ## ⚡ 30-Second Mental Model
793
- > **Mission:** Implements ${data.domainLayer.toLowerCase()} responsibilities for \`${data.filePath}\`, exposing verified interfaces to callers while adhering to Tribunal safety standards.
794
-
795
- ---
796
-
797
- ## 📋 Public API & Type Contract Matrix
798
-
799
- | Symbol | Kind | Signature | Location |
800
- | :--- | :--- | :--- | :--- |
801
- ${typesTable}
802
-
803
- ---
804
-
805
- ## 🔗 Blast Radius & Call Topology
806
-
807
- \`\`\`mermaid
808
- graph LR
809
- classDef target fill:#1e293b,stroke:#3b82f6,stroke-width:2px,color:#fff;
810
- classDef ext fill:#0f172a,stroke:#64748b,stroke-width:1px,color:#94a3b8;
811
-
812
- subgraph Inbound Callers
813
- ${
814
- data.callers
815
- .slice(0, 4)
816
- .map((c, i) => ` C${i}["${c.file}"]:::ext`)
817
- .join('\n') || ' C0["Entrypoint / CLI"]:::ext'
818
- }
819
- end
820
-
821
- T["${path.basename(data.filePath)}"]:::target
822
-
823
- subgraph Dependencies
824
- ${
825
- data.imports
826
- .slice(0, 4)
827
- .map((imp, i) => ` D${i}["${imp.source}"]:::ext`)
828
- .join('\n') || ' D0["Stdlib"]:::ext'
829
- }
830
- end
831
-
832
- ${
833
- data.callers
834
- .slice(0, 4)
835
- .map((_, i) => ` C${i} --> T`)
836
- .join('\n') || ' C0 --> T'
837
- }
838
- ${
839
- data.imports
840
- .slice(0, 4)
841
- .map((_, i) => ` T --> D${i}`)
842
- .join('\n') || ' T --> D0'
843
- }
844
- \`\`\`
845
-
846
- ### Inbound Consumer Sites
847
- | Caller File | Line Snippet | Vector |
848
- | :--- | :--- | :--- |
849
- ${callersTable}
850
-
851
- ---
852
-
853
- ## ⚠️ Chesterton's Fences & Non-Obvious Quirks
854
-
855
- ${landminesContent}
856
-
857
- ---
858
-
859
- ## 🧪 Verification & Test Harness
860
-
861
- \`\`\`bash
862
- # Run isolated tests for this module:
863
- ${testCommand}
864
- \`\`\`
865
- `;
866
- }
867
-
868
- function renderBridgeDossier(data) {
869
- return `---
870
- version: 2.0.0
871
- bridge: "${data.fileA.filePath} <--> ${data.fileB.filePath}"
872
- relationship: "${data.coupling.relationship}"
873
- last_synced: "${new Date().toISOString().split('T')[0]}"
874
- ---
875
-
876
- # 🌉 INTERFACE BRIDGE DOSSIER
877
- **Module A:** \`${data.fileA.filePath}\`
878
- **Module B:** \`${data.fileB.filePath}\`
879
- **Coupling Relationship:** \`${data.coupling.relationship}\`
880
-
881
- ---
882
-
883
- ## 🗺️ Cross-Boundary Topology
884
-
885
- \`\`\`mermaid
886
- graph LR
887
- A["${path.basename(data.fileA.filePath)}"]
888
- B["${path.basename(data.fileB.filePath)}"]
889
-
890
- ${data.coupling.aImportsB ? 'A -->|"Imports & Calls"| B' : ''}
891
- ${data.coupling.bImportsA ? 'B -->|"Imports & Calls"| A' : ''}
892
- ${!data.coupling.aImportsB && !data.coupling.bImportsA ? 'A -.->|"Sibling / Parallel"| B' : ''}
893
- \`\`\`
894
-
895
- ## 📦 Shared Types & Interfaces
896
- ${
897
- data.coupling.sharedTypes.length > 0
898
- ? data.coupling.sharedTypes.map(t => `- \`${t}\``).join('\n')
899
- : '- *No identical type names detected between modules.*'
900
- }
901
-
902
- ## 📋 Interface Alignment Summary
903
- - **${path.basename(data.fileA.filePath)} Exports:** ${data.fileA.exports.length} symbols.
904
- - **${path.basename(data.fileB.filePath)} Exports:** ${data.fileB.exports.length} symbols.
905
- `;
906
- }
907
-
908
- function renderDirectoryDossier(data) {
909
- return `---
910
- version: 2.0.0
911
- target_dir: "${data.dirPath}"
912
- manifests: [${data.manifests.join(', ')}]
913
- last_synced: "${new Date().toISOString().split('T')[0]}"
914
- ---
915
-
916
- <!-- PROJECT_AI_ONBOARDING_CARD -->
917
- Project Subsystem: ${data.dirPath}
918
- Manifests: ${data.manifests.join(', ') || 'None'}
919
- Subsystems: ${data.subsystems.map(s => s.name).join(', ')}
920
- <!-- /PROJECT_AI_ONBOARDING_CARD -->
921
-
922
- # 🏛️ SUBSYSTEM DOSSIER: \`${data.dirPath}\`
923
-
924
- ## 🗺️ Subsystem Architecture Clusters
925
- \`\`\`mermaid
926
- graph TD
927
- ${data.subsystems.map(s => ` S_${s.name}["${s.name} (${s.fileCount} files)"]`).join('\n')}
928
- \`\`\`
929
-
930
- ## 📂 Subsystem Breakdown
931
- | Subsystem Folder | File Count | Samples |
932
- | :--- | :--- | :--- |
933
- ${data.subsystems.map(s => `| \`${s.name}/\` | ${s.fileCount} | \`${s.keySample}\` |`).join('\n')}
934
- `;
935
- }
936
-
937
- // ── Living Vault Manager ───────────────────────────────────────────────────
938
-
939
- function syncVaultIndex(workspaceRoot = process.cwd()) {
940
- const docsDir = getDocsDir(workspaceRoot);
941
- const indexFile = path.join(docsDir, 'INDEX.md');
942
-
943
- if (!fs.existsSync(docsDir)) {
944
- fs.mkdirSync(docsDir, { recursive: true });
945
- }
946
-
947
- const files = fs
948
- .readdirSync(docsDir)
949
- .filter(f => f.endsWith('.context.md') || f.endsWith('.bridge.md'));
950
-
951
- const rows = [];
952
- for (const f of files) {
953
- const content = fs.readFileSync(path.join(docsDir, f), 'utf8');
954
- const sourceMatch = content.match(/source_file:\s*["']?([^"'\n]+)/);
955
- const bridgeMatch = content.match(/bridge:\s*["']?([^"'\n]+)/);
956
- const dirMatch = content.match(/target_dir:\s*["']?([^"'\n]+)/);
957
- const hashMatch = content.match(/source_hash:\s*["']?([^"'\n]+)/);
958
- const domainMatch = content.match(/domain_layer:\s*["']?([^"'\n]+)/);
959
-
960
- let source = f;
961
- let domain = 'General';
962
- const hash = hashMatch ? hashMatch[1] : 'n/a';
963
- let status = '🟢 Fresh';
964
-
965
- if (sourceMatch) {
966
- source = sourceMatch[1].replace(/["']/g, '');
967
- domain = domainMatch ? domainMatch[1].replace(/["']/g, '') : 'Single Module';
968
- const absSource = resolvePath(source, workspaceRoot);
969
- if (fs.existsSync(absSource)) {
970
- const curHash = computeSha256(fs.readFileSync(absSource, 'utf8'));
971
- if (curHash !== hash) {
972
- status = '🔴 Stale';
973
- }
974
- } else {
975
- status = '⚪ Missing';
976
- }
977
- } else if (bridgeMatch) {
978
- source = bridgeMatch[1].replace(/["']/g, '');
979
- domain = 'Interface Bridge';
980
- status = '🟢 Linked';
981
- } else if (dirMatch) {
982
- source = dirMatch[1].replace(/["']/g, '');
983
- domain = 'Subsystem Cluster';
984
- const absDir = resolvePath(source, workspaceRoot);
985
- status = fs.existsSync(absDir) ? '🟢 Active' : '⚪ Missing';
986
- }
987
-
988
- rows.push(`| [\`${source}\`](${f}) | ${domain} | \`${hash}\` | ${status} |`);
989
- }
990
-
991
- const indexContent = `# 📚 Codebase Context Vault Registry
992
- > Living architectural catalog generated and verified by \`/context\`.
993
-
994
- | Source Target | Domain Layer | Hash Snapshot | Status |
995
- | :--- | :--- | :--- | :--- |
996
- ${rows.join('\n') || '| *No context dossiers generated yet. Run `/context <file>` to begin.* | - | - | - |'}
997
-
998
- ---
999
- *Run \`node scripts/context_compiler.js --check\` to audit context freshness across all files.*
1000
- `;
1001
-
1002
- fs.writeFileSync(indexFile, indexContent, 'utf8');
1003
- return { indexedCount: files.length, indexFile };
1004
- }
1005
-
1006
- function checkDrift(workspaceRoot = process.cwd()) {
1007
- const syncRes = syncVaultIndex(workspaceRoot);
1008
- const content = fs.readFileSync(syncRes.indexFile, 'utf8');
1009
- const staleCount = (content.match(/🔴 Stale/g) || []).length;
1010
- const freshCount = (content.match(/🟢 Fresh/g) || []).length;
1011
-
1012
- return {
1013
- total: syncRes.indexedCount,
1014
- fresh: freshCount,
1015
- stale: staleCount,
1016
- isHealthy: staleCount === 0,
1017
- };
1018
- }
1019
-
1020
- // ── CLI Dispatcher ─────────────────────────────────────────────────────────
1021
-
1022
- function main() {
1023
- const args = process.argv.slice(2);
1024
- const workspaceRoot = process.cwd();
1025
-
1026
- if (args.includes('--check')) {
1027
- const drift = checkDrift(workspaceRoot);
1028
- if (args.includes('--json')) {
1029
- console.log(JSON.stringify(drift));
1030
- process.exit(0);
1031
- }
1032
- console.log(`\n${C.BOLD}═══ Context Vault Drift Audit ═══${C.RESET}`);
1033
- console.log(`Total Dossiers: ${drift.total}`);
1034
- console.log(`🟢 Fresh: ${drift.fresh}`);
1035
- console.log(`🔴 Stale: ${drift.stale}`);
1036
- console.log(
1037
- `Status: ${drift.isHealthy ? C.GREEN + 'HEALTHY' : C.RED + 'DRIFT DETECTED'}${C.RESET}\n`,
1038
- );
1039
- process.exit(drift.isHealthy ? 0 : 1);
1040
- }
1041
-
1042
- let fileArg = null;
1043
- let dirArg = null;
1044
- let multiArgs = [];
1045
- const writeFlag = args.includes('--write');
1046
- const jsonFlag = args.includes('--json');
1047
-
1048
- for (let i = 0; i < args.length; i++) {
1049
- if (args[i] === '--file' && args[i + 1]) {
1050
- fileArg = args[++i];
1051
- } else if (args[i] === '--dir' && args[i + 1]) {
1052
- dirArg = args[++i];
1053
- } else if (args[i] === '--multi' && args[i + 1] && args[i + 2]) {
1054
- multiArgs = [args[++i], args[++i]];
1055
- } else if (!args[i].startsWith('--')) {
1056
- if (!fileArg && !dirArg) {
1057
- // Autodetect positional arg
1058
- const candidate = args[i].replace(/^['"]|['"]$/g, '');
1059
- if (fs.existsSync(candidate)) {
1060
- if (fs.statSync(candidate).isDirectory()) {
1061
- dirArg = candidate;
1062
- } else {
1063
- fileArg = candidate;
1064
- }
1065
- }
1066
- }
1067
- }
1068
- }
1069
-
1070
- if (multiArgs.length === 2) {
1071
- const result = analyzeMultiFileBridge(multiArgs[0], multiArgs[1], workspaceRoot);
1072
- if (jsonFlag) {
1073
- console.log(JSON.stringify(result, null, 2));
1074
- } else {
1075
- const md = renderBridgeDossier(result);
1076
- if (writeFlag) {
1077
- const outName = `${path.basename(multiArgs[0]).replace(/\.[^.]+$/, '')}__${path.basename(multiArgs[1]).replace(/\.[^.]+$/, '')}.bridge.md`;
1078
- const dest = path.join(workspaceRoot, 'docs', 'context', outName);
1079
- fs.mkdirSync(path.dirname(dest), { recursive: true });
1080
- fs.writeFileSync(dest, md, 'utf8');
1081
- syncVaultIndex(workspaceRoot);
1082
- console.log(`${C.GREEN}✔ Bridge Dossier written to ${dest}${C.RESET}`);
1083
- } else {
1084
- console.log(md);
1085
- }
1086
- }
1087
- } else if (dirArg) {
1088
- const result = analyzeDirectory(dirArg, workspaceRoot);
1089
- if (jsonFlag) {
1090
- console.log(JSON.stringify(result, null, 2));
1091
- } else {
1092
- const md = renderDirectoryDossier(result);
1093
- if (writeFlag) {
1094
- const outName = `${path.basename(dirArg)}.context.md`;
1095
- const dest = path.join(workspaceRoot, 'docs', 'context', outName);
1096
- fs.mkdirSync(path.dirname(dest), { recursive: true });
1097
- fs.writeFileSync(dest, md, 'utf8');
1098
- syncVaultIndex(workspaceRoot);
1099
- console.log(`${C.GREEN}✔ Directory Dossier written to ${dest}${C.RESET}`);
1100
- } else {
1101
- console.log(md);
1102
- }
1103
- }
1104
- } else if (fileArg) {
1105
- const result = analyzeSingleFile(fileArg, workspaceRoot);
1106
- if (jsonFlag) {
1107
- console.log(JSON.stringify(result, null, 2));
1108
- } else {
1109
- const md = renderSingleFileDossier(result);
1110
- if (writeFlag) {
1111
- const outName = `${path.basename(fileArg).replace(/\.[^.]+$/, '')}.context.md`;
1112
- const dest = path.join(workspaceRoot, 'docs', 'context', outName);
1113
- fs.mkdirSync(path.dirname(dest), { recursive: true });
1114
- fs.writeFileSync(dest, md, 'utf8');
1115
- syncVaultIndex(workspaceRoot);
1116
- console.log(`${C.GREEN}✔ Single-File Dossier written to ${dest}${C.RESET}`);
1117
- } else {
1118
- console.log(md);
1119
- }
1120
- }
1121
- } else {
1122
- console.error(
1123
- `${C.RED}Error: Provide --file <path>, --dir <path>, --multi <fileA> <fileB>, or --check${C.RESET}`,
1124
- );
1125
- process.exit(1);
1126
- }
1127
- }
1128
-
1129
- // Export functions for in-process MCP server use
1130
- module.exports = {
1131
- analyzeSingleFile,
1132
- analyzeMultiFileBridge,
1133
- analyzeDirectory,
1134
- renderSingleFileDossier,
1135
- renderBridgeDossier,
1136
- renderDirectoryDossier,
1137
- syncVaultIndex,
1138
- checkDrift,
1139
- };
1140
-
1141
- if (require.main === module) {
1142
- main();
1143
- }