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
@@ -21,6 +21,7 @@ scripts-binding:
21
21
  ## Mandatory Pre-Flight Context Inspection
22
22
 
23
23
  Before inspecting codebase architecture, you MUST inspect:
24
+
24
25
  1. Context Snapshots (`.agent/history/snapshots/`) → Read pre-computed JSON snapshots to reduce token overhead by 27x
25
26
  2. `graph_builder.js` output → Check downstream dependencies, risk scores, and blast radius before modifying any file
26
27
  3. Module boundaries → Identify top imported symbols and high-risk core modules
@@ -21,6 +21,7 @@ scripts-binding:
21
21
  ## Mandatory Pre-Flight Context Inspection
22
22
 
23
23
  Before engineering full landing pages, you MUST inspect:
24
+
24
25
  1. Hero Layout Model (Section 50) → Choose appropriate layout variance model (Model A Centered Stacked, Model B Asymmetric Split, Model C Full-Bleed Canvas)
25
26
  2. CTA Hierarchy (Section 32) → Ensure exactly ONE primary solid accent button above the fold; pair only with a secondary ghost button
26
27
  3. Blueprint Rhythm (Section 22) → Follow the 6-section blueprint (Nav, Hero, Social Proof, Features, Testimonials, Final CTA)
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before running linting tools or modifying linter rules, you MUST inspect:
23
+
23
24
  1. Zero-Warning CI Blocking (Section 34) → Enforce zero-warning policy in CI pipelines; ban treating lint warnings as non-blocking
24
25
  2. Mandatory Strict Type Checks (Section 121) → Run static type checking (`tsc --noEmit` or `mypy`) alongside linters to catch non-linter type bugs
25
26
  3. Diff Review Before Auto-Fixing (Section 15) → Review diffs explicitly after auto-fixing (`eslint --fix`) to prevent accidental removal of side-effect code
@@ -69,7 +70,11 @@ npx prettier --write .
69
70
  ```json
70
71
  // .eslintrc.json
71
72
  {
72
- "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking"],
73
+ "extends": [
74
+ "eslint:recommended",
75
+ "plugin:@typescript-eslint/recommended",
76
+ "plugin:@typescript-eslint/recommended-requiring-type-checking"
77
+ ],
73
78
  "rules": {
74
79
  "@typescript-eslint/no-explicit-any": "error",
75
80
  "@typescript-eslint/no-floating-promises": "error",
@@ -197,9 +202,9 @@ repos:
197
202
 
198
203
  ## Scripts
199
204
 
200
- | Script | Purpose | Run With |
201
- | -------------------------- | ----------------------------------------- | ------------------------------------------------ |
202
- | `.agent/scripts/lint_runner.js` | Runs project linting and reports findings | `node .agent/scripts/lint_runner.js <project_path>` |
205
+ | Script | Purpose | Run With |
206
+ | ------------------------------- | ----------------------------------------- | --------------------------------------------------- |
207
+ | `.agent/scripts/lint_runner.js` | Runs project linting and reports findings | `node .agent/scripts/lint_runner.js <project_path>` |
203
208
 
204
209
  ---
205
210
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before engineering LLM integrations or tool calling loops, you MUST inspect:
23
+
23
24
  1. Zod Schema Validation on JSON Outputs (Section 115) → Always run Zod validation (`Schema.parse(...)`) on LLM JSON responses, even in strict mode
24
25
  2. Hybrid Vector + Keyword Search (Section 290) → Use hybrid vector + BM25 keyword search in RAG applications to prevent missing exact identifiers
25
26
  3. System Prompt Secret Isolation (Section 69) → Never put private API keys, database credentials, or secret internal URLs into system prompts
@@ -76,7 +77,7 @@ const SYSTEM_PROMPT = `You are a customer support agent for Acme Corp.
76
77
  - End with a follow-up question
77
78
 
78
79
  ## Context
79
- Current date: ${new Date().toISOString().split("T")[0]}
80
+ Current date: ${new Date().toISOString().split('T')[0]}
80
81
  User plan: {{user_plan}}
81
82
  `;
82
83
 
@@ -88,11 +89,11 @@ User plan: {{user_plan}}
88
89
  ### Structured Output (JSON Mode)
89
90
 
90
91
  ```typescript
91
- import { z } from "zod";
92
- import OpenAI from "openai";
92
+ import { z } from 'zod';
93
+ import OpenAI from 'openai';
93
94
 
94
95
  const SentimentSchema = z.object({
95
- sentiment: z.enum(["positive", "negative", "neutral"]),
96
+ sentiment: z.enum(['positive', 'negative', 'neutral']),
96
97
  confidence: z.number().min(0).max(1),
97
98
  reasoning: z.string(),
98
99
  topics: z.array(z.string()),
@@ -101,49 +102,49 @@ const SentimentSchema = z.object({
101
102
  // OpenAI — json_schema mode (strict = true enforces schema exactly)
102
103
  async function analyzeSentiment(text: string) {
103
104
  const response = await openai.chat.completions.create({
104
- model: "gpt-4o-mini",
105
+ model: 'gpt-4o-mini',
105
106
  response_format: {
106
- type: "json_schema",
107
+ type: 'json_schema',
107
108
  json_schema: {
108
- name: "sentiment_analysis",
109
+ name: 'sentiment_analysis',
109
110
  strict: true,
110
111
  schema: {
111
- type: "object",
112
+ type: 'object',
112
113
  properties: {
113
- sentiment: { type: "string", enum: ["positive", "negative", "neutral"] },
114
- confidence: { type: "number" },
115
- reasoning: { type: "string" },
116
- topics: { type: "array", items: { type: "string" } },
114
+ sentiment: { type: 'string', enum: ['positive', 'negative', 'neutral'] },
115
+ confidence: { type: 'number' },
116
+ reasoning: { type: 'string' },
117
+ topics: { type: 'array', items: { type: 'string' } },
117
118
  },
118
- required: ["sentiment", "confidence", "reasoning", "topics"],
119
+ required: ['sentiment', 'confidence', 'reasoning', 'topics'],
119
120
  additionalProperties: false, // required for strict mode
120
121
  },
121
122
  },
122
123
  },
123
124
  messages: [
124
- { role: "system", content: "Analyze sentiment." },
125
- { role: "user", content: text },
125
+ { role: 'system', content: 'Analyze sentiment.' },
126
+ { role: 'user', content: text },
126
127
  ],
127
128
  });
128
- const raw = JSON.parse(response.choices[0].message.content ?? "{}");
129
+ const raw = JSON.parse(response.choices[0].message.content ?? '{}');
129
130
  return SentimentSchema.parse(raw); // always validate with Zod even in strict mode
130
131
  }
131
132
 
132
133
  // Gemini — response_mime_type + response_schema
133
- import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
134
+ import { GoogleGenerativeAI, SchemaType } from '@google/generative-ai';
134
135
  const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!);
135
136
  const model = genAI.getGenerativeModel({
136
- model: "gemini-2.0-flash",
137
+ model: 'gemini-2.0-flash',
137
138
  generationConfig: {
138
- responseMimeType: "application/json",
139
+ responseMimeType: 'application/json',
139
140
  responseSchema: {
140
141
  type: SchemaType.OBJECT,
141
142
  properties: {
142
- sentiment: { type: SchemaType.STRING, enum: ["positive", "negative", "neutral"] },
143
+ sentiment: { type: SchemaType.STRING, enum: ['positive', 'negative', 'neutral'] },
143
144
  confidence: { type: SchemaType.NUMBER },
144
145
  topics: { type: SchemaType.ARRAY, items: { type: SchemaType.STRING } },
145
146
  },
146
- required: ["sentiment", "confidence", "topics"],
147
+ required: ['sentiment', 'confidence', 'topics'],
147
148
  },
148
149
  },
149
150
  });
@@ -159,32 +160,32 @@ const model = genAI.getGenerativeModel({
159
160
  ```typescript
160
161
  const tools: OpenAI.ChatCompletionTool[] = [
161
162
  {
162
- type: "function",
163
+ type: 'function',
163
164
  function: {
164
- name: "search_products",
165
- description: "Search products by name, category, or price range",
165
+ name: 'search_products',
166
+ description: 'Search products by name, category, or price range',
166
167
  parameters: {
167
- type: "object",
168
+ type: 'object',
168
169
  properties: {
169
- query: { type: "string", description: "Search query" },
170
- category: { type: "string", enum: ["electronics", "clothing", "home"] },
171
- max_price: { type: "number", description: "Maximum price in USD" },
170
+ query: { type: 'string', description: 'Search query' },
171
+ category: { type: 'string', enum: ['electronics', 'clothing', 'home'] },
172
+ max_price: { type: 'number', description: 'Maximum price in USD' },
172
173
  },
173
- required: ["query"],
174
+ required: ['query'],
174
175
  },
175
176
  },
176
177
  },
177
178
  {
178
- type: "function",
179
+ type: 'function',
179
180
  function: {
180
- name: "get_order_status",
181
- description: "Get the status of an order by order ID",
181
+ name: 'get_order_status',
182
+ description: 'Get the status of an order by order ID',
182
183
  parameters: {
183
- type: "object",
184
+ type: 'object',
184
185
  properties: {
185
- order_id: { type: "string", description: "The order ID (e.g., ORD-12345)" },
186
+ order_id: { type: 'string', description: 'The order ID (e.g., ORD-12345)' },
186
187
  },
187
- required: ["order_id"],
188
+ required: ['order_id'],
188
189
  },
189
190
  },
190
191
  },
@@ -193,18 +194,18 @@ const tools: OpenAI.ChatCompletionTool[] = [
193
194
  // Tool execution loop
194
195
  async function chatWithTools(userMessage: string) {
195
196
  const messages: OpenAI.ChatCompletionMessageParam[] = [
196
- { role: "system", content: SYSTEM_PROMPT },
197
- { role: "user", content: userMessage },
197
+ { role: 'system', content: SYSTEM_PROMPT },
198
+ { role: 'user', content: userMessage },
198
199
  ];
199
200
 
200
201
  let response = await openai.chat.completions.create({
201
- model: "gpt-4o-mini",
202
+ model: 'gpt-4o-mini',
202
203
  messages,
203
204
  tools,
204
205
  });
205
206
 
206
207
  // Process tool calls
207
- while (response.choices[0].finish_reason === "tool_calls") {
208
+ while (response.choices[0].finish_reason === 'tool_calls') {
208
209
  const toolCalls = response.choices[0].message.tool_calls ?? [];
209
210
  messages.push(response.choices[0].message);
210
211
 
@@ -212,14 +213,14 @@ async function chatWithTools(userMessage: string) {
212
213
  const args = JSON.parse(call.function.arguments);
213
214
  const result = await executeFunction(call.function.name, args);
214
215
  messages.push({
215
- role: "tool",
216
+ role: 'tool',
216
217
  tool_call_id: call.id,
217
218
  content: JSON.stringify(result),
218
219
  });
219
220
  }
220
221
 
221
222
  response = await openai.chat.completions.create({
222
- model: "gpt-4o-mini",
223
+ model: 'gpt-4o-mini',
223
224
  messages,
224
225
  tools,
225
226
  });
@@ -262,19 +263,19 @@ function chunkDocument(text: string, options: ChunkOptions = {}): Chunk[] {
262
263
  const {
263
264
  maxTokens = 512, // chunk size
264
265
  overlapTokens = 50, // overlap between chunks
265
- separator = "\n\n", // split on paragraph boundaries first
266
+ separator = '\n\n', // split on paragraph boundaries first
266
267
  } = options;
267
268
 
268
269
  const paragraphs = text.split(separator);
269
270
  const chunks: Chunk[] = [];
270
- let current = "";
271
+ let current = '';
271
272
 
272
273
  for (const para of paragraphs) {
273
274
  if (tokenCount(current + para) > maxTokens && current) {
274
275
  chunks.push({ text: current.trim(), tokens: tokenCount(current) });
275
276
  // Keep overlap from previous chunk
276
- const words = current.split(" ");
277
- current = words.slice(-overlapTokens).join(" ") + separator + para;
277
+ const words = current.split(' ');
278
+ current = words.slice(-overlapTokens).join(' ') + separator + para;
278
279
  } else {
279
280
  current += separator + para;
280
281
  }
@@ -311,14 +312,14 @@ Milvus → Enterprise scale, GPU acceleration
311
312
 
312
313
  ```typescript
313
314
  // Server-Sent Events for AI token streaming
314
- app.get("/api/chat", async (req, res) => {
315
- res.setHeader("Content-Type", "text/event-stream");
316
- res.setHeader("Cache-Control", "no-cache");
317
- res.setHeader("Connection", "keep-alive");
315
+ app.get('/api/chat', async (req, res) => {
316
+ res.setHeader('Content-Type', 'text/event-stream');
317
+ res.setHeader('Cache-Control', 'no-cache');
318
+ res.setHeader('Connection', 'keep-alive');
318
319
 
319
320
  const stream = await openai.chat.completions.create({
320
- model: "gpt-4o-mini",
321
- messages: [{ role: "user", content: req.query.message as string }],
321
+ model: 'gpt-4o-mini',
322
+ messages: [{ role: 'user', content: req.query.message as string }],
322
323
  stream: true,
323
324
  });
324
325
 
@@ -329,14 +330,14 @@ app.get("/api/chat", async (req, res) => {
329
330
  }
330
331
  }
331
332
 
332
- res.write("data: [DONE]\n\n");
333
+ res.write('data: [DONE]\n\n');
333
334
  res.end();
334
335
  });
335
336
 
336
337
  // Client-side consumption
337
338
  const eventSource = new EventSource(`/api/chat?message=${encodeURIComponent(msg)}`);
338
- eventSource.onmessage = (event) => {
339
- if (event.data === "[DONE]") {
339
+ eventSource.onmessage = event => {
340
+ if (event.data === '[DONE]') {
340
341
  eventSource.close();
341
342
  return;
342
343
  }
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing local-first storage or CRDT synchronization, you MUST inspect:
23
+
23
24
  1. Conflict Resolution Strategy (Section 15) → Define explicit conflict resolution (LWW timestamps or Yjs CRDTs) before writing local sync logic
24
25
  2. Persistent Storage (Section 16) → Use IndexedDB (via Dexie/idb) or SQLite WASM for local persistence; ban localStorage for >5MB data
25
26
  3. Incremental Watermark Sync (Section 17) → Perform delta syncs using timestamps/watermarks rather than re-fetching full datasets
@@ -55,20 +56,20 @@ Do not use React Query / SWR to build local-first. They are HTTP caching mechani
55
56
  // ❌ CLOUD-FIRST (React Query / Fetch)
56
57
  // Fails when offline. Subject to UI latency.
57
58
  const { data, isLoading } = useQuery({
58
- queryKey: ["todos"],
59
- queryFn: () => fetch("/api/todos").then((res) => res.json()),
59
+ queryKey: ['todos'],
60
+ queryFn: () => fetch('/api/todos').then(res => res.json()),
60
61
  });
61
62
 
62
63
  // ✅ LOCAL-FIRST (e.g. PowerSync / ElectricSQL / WatermelonDB)
63
64
  // Resolves instantly. Data lives locally. Syncs silently in background.
64
- import { useQuery } from "@powersync/react";
65
+ import { useQuery } from '@powersync/react';
65
66
 
66
- const { data, isLoading } = useQuery("SELECT * FROM todos ORDER BY created_at DESC");
67
+ const { data, isLoading } = useQuery('SELECT * FROM todos ORDER BY created_at DESC');
67
68
 
68
69
  // Writes are also local First
69
70
  const addTodo = async (text: string) => {
70
71
  // Written to the local SQLite WASM database instantly.
71
- await localDb.execute("INSERT INTO todos (id, text) VALUES (uuid(), ?)", [text]);
72
+ await localDb.execute('INSERT INTO todos (id, text) VALUES (uuid(), ?)', [text]);
72
73
  // Background worker syncs to Postgres later.
73
74
  };
74
75
  ```
@@ -83,22 +84,22 @@ When two users edit the exact same document offline and then reconnect, how is i
83
84
 
84
85
  ```typescript
85
86
  // Yjs - The leading CRDT library for collaborative text/state
86
- import * as Y from "yjs";
87
- import { WebsocketProvider } from "y-websocket";
87
+ import * as Y from 'yjs';
88
+ import { WebsocketProvider } from 'y-websocket';
88
89
 
89
90
  const ydoc = new Y.Doc();
90
- const provider = new WebsocketProvider("wss://sync.example.com", "room-1", ydoc);
91
+ const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc);
91
92
 
92
93
  // Shared state array
93
- const yarray = ydoc.getArray("todos");
94
+ const yarray = ydoc.getArray('todos');
94
95
 
95
96
  // Observe changes (Fires locally and when peers sync)
96
- yarray.observe((event) => {
97
- console.log("State updated natively without conflict:", yarray.toArray());
97
+ yarray.observe(event => {
98
+ console.log('State updated natively without conflict:', yarray.toArray());
98
99
  });
99
100
 
100
101
  // Insert data (Instantly merges cleanly with remote peers)
101
- yarray.insert(0, ["Buy milk"]);
102
+ yarray.insert(0, ['Buy milk']);
102
103
  ```
103
104
 
104
105
  ---
@@ -117,7 +118,7 @@ Storing megabytes of relational data in `localStorage` will crash the browser.
117
118
 
118
119
  ```typescript
119
120
  // Clean IndexedDB Wrapper Example (Dexie)
120
- import Dexie, { type EntityTable } from "dexie";
121
+ import Dexie, { type EntityTable } from 'dexie';
121
122
 
122
123
  interface Friend {
123
124
  id: number;
@@ -125,21 +126,21 @@ interface Friend {
125
126
  age: number;
126
127
  }
127
128
 
128
- const db = new Dexie("FriendsDatabase") as Dexie & {
129
- friends: EntityTable<Friend, "id">;
129
+ const db = new Dexie('FriendsDatabase') as Dexie & {
130
+ friends: EntityTable<Friend, 'id'>;
130
131
  };
131
132
 
132
133
  // Schema configuration
133
134
  db.version(1).stores({
134
- friends: "++id, name, age", // Primary key and indexed props
135
+ friends: '++id, name, age', // Primary key and indexed props
135
136
  });
136
137
 
137
138
  // Write to DB instantly
138
- await db.friends.add({ name: "Alice", age: 25 });
139
+ await db.friends.add({ name: 'Alice', age: 25 });
139
140
 
140
141
  // Live query natively drives React state without network calls
141
- import { useLiveQuery } from "dexie-react-hooks";
142
- const friends = useLiveQuery(() => db.friends.where("age").above(21).toArray());
142
+ import { useLiveQuery } from 'dexie-react-hooks';
143
+ const friends = useLiveQuery(() => db.friends.where('age').above(21).toArray());
143
144
  ```
144
145
 
145
146
  ---
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing local-first architecture or offline sync engines, you MUST inspect:
23
+
23
24
  1. Zero Network Latency Rule (Section 24) → Execute reads and writes against local storage (IndexedDB/SQLite) first before queueing outbound sync
24
25
  2. Outbound Mutation Queue (Section 28) → Persist mutation logs in IndexedDB with client-generated UUID `idempotencyKey` fields
25
26
  3. Conflict Resolution Strategy (Section 33) → Use Last-Write-Wins (LWW) for simple fields or CRDTs (Yjs/Automerge) for collaborative state
@@ -31,19 +32,23 @@ Architect software that reads and writes to local storage (SQLite/IndexedDB) fir
31
32
  ## 4 Pillars of Local-First Architecture
32
33
 
33
34
  ### 1. Read & Write Local First
35
+
34
36
  - **Zero Network Latency**: UI queries (`select * from tasks`) run synchronously or near-instantaneously against in-memory or IndexedDB caches.
35
- - Mutations update the local cache immediately (*optimistic write*), appending a mutation log item to an outbound sync queue.
37
+ - Mutations update the local cache immediately (_optimistic write_), appending a mutation log item to an outbound sync queue.
36
38
 
37
39
  ### 2. Outbound Mutation Queue & Idempotency
40
+
38
41
  - Store mutation logs in a persistent local queue (`IndexedDB` / `SQLite`).
39
42
  - Assign every client mutation a unique UUID (`idempotencyKey`).
40
43
  - When network connection is restored, flush queue items sequentially with automatic retry on 5xx failures.
41
44
 
42
45
  ### 3. Conflict Resolution (CRDTs & LWW)
46
+
43
47
  - **Last-Write-Wins (LWW)**: Timestamp + Client ID ordering for simple fields.
44
48
  - **CRDTs (Yjs / Automerge)**: Conflict-free Replicated Data Types for collaborative text editing and array state.
45
49
 
46
50
  ### 4. Background Delta Streaming
51
+
47
52
  - Receive database updates via WebSockets or Server-Sent Events (SSE) as thin binary deltas (`sync_version > client_version`), applying changes to local storage without re-fetching full datasets.
48
53
 
49
54
  ---
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before integrating Lottie animations, you MUST inspect:
23
+
23
24
  1. Asset Format (.lottie vs .json) → Prefer compressed `.lottie` (dotLottie) assets for 80% smaller bundle file sizes
24
25
  2. Playback Triggers (Section 34) → Bind playback to user hover/click or viewport intersection instead of aggressive continuous looping
25
26
  3. Package Manifest (`package.json`) → Verify `@dotlottie/react-player` or `lottie-web` library dependencies
@@ -31,10 +32,11 @@ Integrate lightweight, vector-based Lottie animations with interactive trigger c
31
32
  ## 3 Lottie Integration Recipes
32
33
 
33
34
  ### 1. React dotLottie Interactive Player (`@dotlottie/react-player`)
35
+
34
36
  ```tsx
35
- import React, { useRef } from "react";
36
- import { DotLottiePlayer, Controls } from "@dotlottie/react-player";
37
- import "@dotlottie/react-player/dist/index.css";
37
+ import React, { useRef } from 'react';
38
+ import { DotLottiePlayer, Controls } from '@dotlottie/react-player';
39
+ import '@dotlottie/react-player/dist/index.css';
38
40
 
39
41
  export function InteractiveLottieIcon() {
40
42
  const lottieRef = useRef<any>(null);
@@ -57,9 +59,11 @@ export function InteractiveLottieIcon() {
57
59
  ```
58
60
 
59
61
  ### 2. Runtime Color Injection / Theming
62
+
60
63
  Pass custom CSS variable overrides to dotLottie players to dynamically recolor vector paths at runtime without re-downloading JSON assets.
61
64
 
62
65
  ### 3. Performance & Lazy Loading
66
+
63
67
  - Use `.lottie` (dotLottie format) instead of uncompressed `.json` Lottie files to achieve **80% smaller bundle file sizes**.
64
68
  - Lazy-load offscreen Lottie animations using `IntersectionObserver`.
65
69
 
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing marquee loop tracks, you MUST inspect:
23
+
23
24
  1. DOM Structure (Section 24) → Duplicate item tracks MUST be rendered with `aria-hidden="true"` to prevent screen reader redundancy
24
25
  2. Hover Accessibility (Section 50) → Enforce `animation-play-state: paused` on `:hover` and `:focus-within`
25
26
  3. Reduced Motion Fallback (Section 61) → Collapse marquee into static wrapped flex grid when `prefers-reduced-motion: reduce` is active
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before implementing clip-path or SVG mask reveals, you MUST inspect:
23
+
23
24
  1. Target DOM elements → Enforce `overflow: hidden` on text line wrappers to prevent unmasked overflow artifacts
24
25
  2. `clip-path: inset()` syntax (Section 26) → Prefer CSS `clip-path` over heavy SVG masks for linear curtain wipes
25
26
  3. Transition Easing → Use custom ease-out curves (`cubic-bezier(0.16, 1, 0.3, 1)`) for smooth deceleration
@@ -31,10 +32,15 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
31
32
  ## 3 Masked Reveal Patterns
32
33
 
33
34
  ### 1. CSS `clip-path` Curtain Reveal
35
+
34
36
  ```css
35
37
  @keyframes curtain-reveal {
36
- from { clip-path: inset(0 100% 0 0); }
37
- to { clip-path: inset(0 0 0 0); }
38
+ from {
39
+ clip-path: inset(0 100% 0 0);
40
+ }
41
+ to {
42
+ clip-path: inset(0 0 0 0);
43
+ }
38
44
  }
39
45
 
40
46
  .reveal-image-curtain {
@@ -43,10 +49,15 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
43
49
  ```
44
50
 
45
51
  ### 2. Radial Spotlight Clip Reveal
52
+
46
53
  ```css
47
54
  @keyframes circle-expand {
48
- from { clip-path: circle(0% at 50% 50%); }
49
- to { clip-path: circle(150% at 50% 50%); }
55
+ from {
56
+ clip-path: circle(0% at 50% 50%);
57
+ }
58
+ to {
59
+ clip-path: circle(150% at 50% 50%);
60
+ }
50
61
  }
51
62
 
52
63
  .spotlight-reveal {
@@ -55,7 +66,9 @@ Create editorial, high-end visual reveals using CSS `clip-path` and SVG masks.
55
66
  ```
56
67
 
57
68
  ### 3. Masked Text Line Wipe (Editorial Typography)
69
+
58
70
  Wrap text lines inside overflow-hidden wrappers and animate inner text lines upward:
71
+
59
72
  ```css
60
73
  .text-line-wrapper {
61
74
  overflow: hidden;
@@ -20,6 +20,7 @@ scripts-binding:
20
20
  ## Mandatory Pre-Flight Context Inspection
21
21
 
22
22
  Before architecting MCP tools or resource handlers, you MUST inspect:
23
+
23
24
  1. Strict Zod Input Validation (Section 45) → Enforce explicit JSON Schema parameter validation (Zod) for every tool exposed to the LLM
24
25
  2. Resource vs Tool Distinction (Section 68) → Use Resources for static read-only data (`file:///`, `db://schema`), Tools strictly for dynamic parameterized actions
25
26
  3. Output Payload Truncation Safeguard (Section 94) → Forcibly truncate large tool response outputs before returning payload to protect LLM context windows
@@ -47,27 +48,29 @@ A robust MCP server exposes exactly 3 primary concepts:
47
48
 
48
49
  ```typescript
49
50
  // Standardize exposing a Tool securely via an MCP Server Wrapper
50
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
51
- import { z } from "zod";
51
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
52
+ import { z } from 'zod';
52
53
 
53
54
  const server = new McpServer({
54
- name: "internal-database-auditor",
55
- version: "1.0.0",
55
+ name: 'internal-database-auditor',
56
+ version: '1.0.0',
56
57
  });
57
58
 
58
59
  // Defining a rigorous tool parameter boundary
59
60
  server.tool(
60
- "query_production_database",
61
- "Executes a read-only sanitized query against the production analytical replica.",
61
+ 'query_production_database',
62
+ 'Executes a read-only sanitized query against the production analytical replica.',
62
63
  {
63
- table: z.enum(["users", "transactions", "audit_logs"]).describe("The specific table to analyze"),
64
- limit: z.number().max(100).default(10).describe("Maximum row returns to prevent context bloat"),
64
+ table: z
65
+ .enum(['users', 'transactions', 'audit_logs'])
66
+ .describe('The specific table to analyze'),
67
+ limit: z.number().max(100).default(10).describe('Maximum row returns to prevent context bloat'),
65
68
  },
66
69
  async ({ table, limit }) => {
67
70
  // Execution logic
68
71
  const data = await secureDatabaseClient.query(`SELECT * FROM ${table} LIMIT ${limit}`);
69
72
  return {
70
- content: [{ type: "text", text: JSON.stringify(data) }],
73
+ content: [{ type: 'text', text: JSON.stringify(data) }],
71
74
  };
72
75
  },
73
76
  );
@@ -91,7 +94,7 @@ If your description is vague, the LLM will hallucinate executions unpredictably.
91
94
 
92
95
  ```typescript
93
96
  // ❌ VAGUE (The LLM will guess when to use this, often incorrectly)
94
- description: "Changes the system status.";
97
+ description: 'Changes the system status.';
95
98
 
96
99
  // ✅ DETERMINISTIC (The LLM knows the exact boundaries and consequences)
97
100
  description: "Transitions the payment processing gateway between 'ACTIVE' and 'MAINTENANCE' modes. Use this ONLY after verifying traffic logs to halt impending queue flooding. Requires Admin clearance.";