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.
- package/.agent/.manifest.json +78 -0
- package/.agent/ARCHITECTURE.md +19 -241
- package/.agent/agents/accessibility-reviewer.md +23 -16
- package/.agent/agents/ai-code-reviewer.md +25 -21
- package/.agent/agents/anti-pattern-reviewer.md +12 -7
- package/.agent/agents/api-architect.md +1 -0
- package/.agent/agents/backend-specialist.md +23 -22
- package/.agent/agents/cloud-engineer.md +1 -0
- package/.agent/agents/code-archaeologist.md +1 -0
- package/.agent/agents/complexity-reviewer.md +10 -7
- package/.agent/agents/database-architect.md +3 -2
- package/.agent/agents/db-latency-auditor.md +6 -2
- package/.agent/agents/debugger.md +3 -2
- package/.agent/agents/dependency-reviewer.md +1 -0
- package/.agent/agents/devops-engineer.md +9 -8
- package/.agent/agents/documentation-writer.md +6 -5
- package/.agent/agents/explorer-agent.md +1 -0
- package/.agent/agents/frontend-reviewer.md +21 -17
- package/.agent/agents/frontend-specialist.md +23 -20
- package/.agent/agents/game-developer.md +1 -0
- package/.agent/agents/interaction-reviewer.md +10 -5
- package/.agent/agents/logic-reviewer.md +3 -0
- package/.agent/agents/minimalist-reviewer.md +6 -0
- package/.agent/agents/mobile-developer.md +7 -6
- package/.agent/agents/mobile-reviewer.md +14 -13
- package/.agent/agents/orchestrator.md +3 -0
- package/.agent/agents/penetration-tester.md +1 -0
- package/.agent/agents/performance-optimizer.md +6 -5
- package/.agent/agents/performance-reviewer.md +6 -6
- package/.agent/agents/pipeline-reviewer.md +144 -0
- package/.agent/agents/precedence-reviewer.md +1 -0
- package/.agent/agents/product-manager.md +1 -0
- package/.agent/agents/product-owner.md +1 -0
- package/.agent/agents/product-reviewer.md +12 -7
- package/.agent/agents/project-planner.md +3 -0
- package/.agent/agents/qa-automation-engineer.md +50 -43
- package/.agent/agents/resilience-reviewer.md +1 -0
- package/.agent/agents/schema-reviewer.md +1 -0
- package/.agent/agents/security-auditor.md +24 -24
- package/.agent/agents/seo-specialist.md +33 -23
- package/.agent/agents/sql-reviewer.md +5 -4
- package/.agent/agents/supervisor-agent.md +12 -2
- package/.agent/agents/swarm-worker-contracts.md +13 -13
- package/.agent/agents/swarm-worker-registry.md +51 -51
- package/.agent/agents/system-architect.md +1 -0
- package/.agent/agents/test-coverage-reviewer.md +25 -22
- package/.agent/agents/test-engineer.md +12 -11
- package/.agent/agents/throughput-optimizer.md +45 -40
- package/.agent/agents/type-safety-reviewer.md +5 -4
- package/.agent/agents/ui-ux-auditor.md +6 -4
- package/.agent/agents/ui-visual-auditor.md +3 -0
- package/.agent/agents/ux-reviewer.md +11 -6
- package/.agent/agents/visual-reviewer.md +11 -6
- package/.agent/agents/vitals-reviewer.md +5 -4
- package/.agent/history/memory/.memory.idx +3716 -1
- package/.agent/history/memory/MEMORY.md +246 -1
- package/.agent/mcp_config.json +1 -6
- package/.agent/routing_index.json +2034 -263
- package/.agent/rules/GEMINI.md +12 -10
- package/.agent/rules/GEMINI_PLANNER.md +19 -21
- package/.agent/scripts/_colors.js +52 -54
- package/.agent/scripts/_utils.js +52 -53
- package/.agent/scripts/auto_preview.js +39 -43
- package/.agent/scripts/bundle_analyzer.js +47 -60
- package/.agent/scripts/case_law_manager.js +200 -294
- package/.agent/scripts/checklist.js +73 -94
- package/.agent/scripts/cicd_validator.js +305 -0
- package/.agent/scripts/compile_router.py +4 -111
- package/.agent/scripts/context_broker.js +317 -412
- package/.agent/scripts/contract_engine.js +402 -0
- package/.agent/scripts/dependency_analyzer.js +112 -124
- package/.agent/scripts/graph_builder.js +75 -103
- package/.agent/scripts/graph_visualizer.js +10 -12
- package/.agent/scripts/graph_zoom.js +38 -55
- package/.agent/scripts/guardrail_engine.js +195 -145
- package/.agent/scripts/impact_classifier.js +55 -30
- package/.agent/scripts/inner_loop_validator.js +108 -159
- package/.agent/scripts/integrity_manifest.js +59 -67
- package/.agent/scripts/lint_runner.js +65 -75
- package/.agent/scripts/marathon_harness.js +131 -208
- package/.agent/scripts/migrate_skills_frontmatter.py +4 -63
- package/.agent/scripts/minify_context.js +29 -33
- package/.agent/scripts/minimal_change_engine.js +95 -87
- package/.agent/scripts/mutation_runner.js +46 -62
- package/.agent/scripts/pipeline_engine.js +320 -209
- package/.agent/scripts/prompt_compiler.js +118 -93
- package/.agent/scripts/schema_validator.js +73 -121
- package/.agent/scripts/security_scan.js +88 -117
- package/.agent/scripts/session_manager.js +52 -69
- package/.agent/scripts/signal_detector.js +24 -22
- package/.agent/scripts/skill_evolution.js +184 -245
- package/.agent/scripts/skill_integrator.js +35 -48
- package/.agent/scripts/socratic_gate_policy.js +15 -12
- package/.agent/scripts/strengthen_skills.js +29 -33
- package/.agent/scripts/swarm_dispatcher.js +120 -151
- package/.agent/scripts/test_runner.js +54 -56
- package/.agent/scripts/token_budget_broker.js +9 -7
- package/.agent/scripts/trace_engine.js +126 -0
- package/.agent/scripts/verify_all.js +76 -93
- package/.agent/scripts/visual_audit.js +16 -21
- package/.agent/skill_topic_map.json +237 -0
- package/.agent/skills/12-principles-of-animation/SKILL.md +7 -0
- package/.agent/skills/60fps-animation/SKILL.md +7 -0
- package/.agent/skills/accessible-animation/SKILL.md +5 -1
- package/.agent/skills/adapt/SKILL.md +7 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +1 -0
- package/.agent/skills/agent-organizer/SKILL.md +1 -0
- package/.agent/skills/agentic-patterns/SKILL.md +33 -25
- package/.agent/skills/agentic-workflows-2026/SKILL.md +80 -0
- package/.agent/skills/ai-app-hardening/SKILL.md +59 -0
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +7 -6
- package/.agent/skills/animation-on-scroll/SKILL.md +24 -15
- package/.agent/skills/animation-systems/SKILL.md +11 -10
- package/.agent/skills/antfu-conventions/SKILL.md +7 -2
- package/.agent/skills/api-patterns/SKILL.md +14 -10
- package/.agent/skills/api-security-auditor/SKILL.md +15 -14
- package/.agent/skills/app-builder/SKILL.md +1 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +12 -12
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +3 -3
- package/.agent/skills/apple-design/SKILL.md +8 -7
- package/.agent/skills/architecture/SKILL.md +3 -2
- package/.agent/skills/audit-and-fix/SKILL.md +8 -5
- package/.agent/skills/authentication-best-practices/SKILL.md +9 -8
- package/.agent/skills/backend-security-expert/SKILL.md +1 -0
- package/.agent/skills/baseline-ui/SKILL.md +8 -7
- package/.agent/skills/bash-linux/SKILL.md +1 -0
- package/.agent/skills/behavioral-modes/SKILL.md +1 -0
- package/.agent/skills/better-colors/SKILL.md +11 -7
- package/.agent/skills/better-typography/SKILL.md +30 -16
- package/.agent/skills/better-ui/SKILL.md +17 -10
- package/.agent/skills/bolder/SKILL.md +6 -0
- package/.agent/skills/brainstorming/SKILL.md +6 -4
- package/.agent/skills/browser-native-ai/SKILL.md +5 -4
- package/.agent/skills/build-primitive/SKILL.md +5 -0
- package/.agent/skills/building-native-ui/SKILL.md +1 -0
- package/.agent/skills/cicd-pro/SKILL.md +2 -1
- package/.agent/skills/clarify/SKILL.md +19 -14
- package/.agent/skills/clean-code/SKILL.md +16 -15
- package/.agent/skills/cloud-architect/SKILL.md +1 -0
- package/.agent/skills/cobejs/SKILL.md +7 -9
- package/.agent/skills/code-review-checklist/SKILL.md +1 -0
- package/.agent/skills/codebase-design/SKILL.md +7 -2
- package/.agent/skills/colorize/SKILL.md +8 -3
- package/.agent/skills/compact-landing/SKILL.md +8 -3
- package/.agent/skills/company-logos/SKILL.md +6 -0
- package/.agent/skills/config-validator/SKILL.md +10 -9
- package/.agent/skills/containerization-pro/SKILL.md +6 -5
- package/.agent/skills/context-engineering-pro/SKILL.md +70 -0
- package/.agent/skills/create-design-md/SKILL.md +13 -5
- package/.agent/skills/critique/SKILL.md +10 -8
- package/.agent/skills/csharp-developer/SKILL.md +1 -0
- package/.agent/skills/data-validation-schemas/SKILL.md +28 -23
- package/.agent/skills/database-design/SKILL.md +2 -1
- package/.agent/skills/delight/SKILL.md +6 -0
- package/.agent/skills/deployment-procedures/SKILL.md +2 -1
- package/.agent/skills/design-lab/SKILL.md +5 -0
- package/.agent/skills/devops-engineer/SKILL.md +3 -2
- package/.agent/skills/devops-incident-responder/SKILL.md +2 -1
- package/.agent/skills/diagnosing-bugs/SKILL.md +12 -2
- package/.agent/skills/distill/SKILL.md +7 -2
- package/.agent/skills/documentation-templates/SKILL.md +3 -2
- package/.agent/skills/domain-modeling/SKILL.md +12 -4
- package/.agent/skills/duckdb-analytical-sql/SKILL.md +59 -0
- package/.agent/skills/edge-ai-mobile/SKILL.md +50 -0
- package/.agent/skills/edge-computing/SKILL.md +9 -8
- package/.agent/skills/emil-design-eng/SKILL.md +43 -27
- package/.agent/skills/error-resilience/SKILL.md +34 -16
- package/.agent/skills/expo-router-v4/SKILL.md +81 -0
- package/.agent/skills/extract-design-system/SKILL.md +12 -11
- package/.agent/skills/fabel-protocol/SKILL.md +24 -17
- package/.agent/skills/fixing-accessibility/SKILL.md +23 -16
- package/.agent/skills/fixing-metadata/SKILL.md +24 -13
- package/.agent/skills/fixing-motion-performance/SKILL.md +7 -5
- package/.agent/skills/framer-motion-expert/SKILL.md +29 -15
- package/.agent/skills/frontend-design/SKILL.md +21 -13
- package/.agent/skills/frontend-security-expert/SKILL.md +1 -0
- package/.agent/skills/game-design-expert/SKILL.md +1 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +1 -0
- package/.agent/skills/generative-ui-expert/SKILL.md +3 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +2 -1
- package/.agent/skills/git-pro/SKILL.md +10 -9
- package/.agent/skills/github-operations/SKILL.md +2 -1
- package/.agent/skills/gpt-taste/SKILL.md +7 -0
- package/.agent/skills/gsap-core/SKILL.md +26 -22
- package/.agent/skills/gsap-frameworks/SKILL.md +6 -5
- package/.agent/skills/gsap-performance/SKILL.md +4 -3
- package/.agent/skills/gsap-plugins/SKILL.md +34 -33
- package/.agent/skills/gsap-react/SKILL.md +9 -8
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +34 -33
- package/.agent/skills/gsap-timeline/SKILL.md +18 -15
- package/.agent/skills/gsap-utils/SKILL.md +25 -24
- package/.agent/skills/harden/SKILL.md +9 -3
- package/.agent/skills/harness-protocol/SKILL.md +1 -0
- package/.agent/skills/i18n-localization/SKILL.md +10 -9
- package/.agent/skills/impeccable/SKILL.md +5 -0
- package/.agent/skills/improve-codebase-architecture/SKILL.md +10 -5
- package/.agent/skills/improve-ui/SKILL.md +12 -5
- package/.agent/skills/intelligent-routing/SKILL.md +7 -6
- package/.agent/skills/knowledge-graph/SKILL.md +1 -0
- package/.agent/skills/landing-page/SKILL.md +1 -0
- package/.agent/skills/lint-and-validate/SKILL.md +9 -4
- package/.agent/skills/llm-engineering/SKILL.md +55 -54
- package/.agent/skills/local-first/SKILL.md +20 -19
- package/.agent/skills/local-first-architecture/SKILL.md +6 -1
- package/.agent/skills/lottie-animation/SKILL.md +7 -3
- package/.agent/skills/marquee-loop/SKILL.md +1 -0
- package/.agent/skills/masked-reveal/SKILL.md +17 -4
- package/.agent/skills/mcp-builder/SKILL.md +13 -10
- package/.agent/skills/micro-interaction/SKILL.md +20 -5
- package/.agent/skills/mobile-design/SKILL.md +26 -15
- package/.agent/skills/monorepo-management/SKILL.md +3 -2
- package/.agent/skills/morphing-icons/SKILL.md +16 -6
- package/.agent/skills/motion-engineering/SKILL.md +19 -15
- package/.agent/skills/nextjs-react-expert/SKILL.md +26 -21
- package/.agent/skills/nodejs-best-practices/SKILL.md +89 -76
- package/.agent/skills/observability/SKILL.md +45 -44
- package/.agent/skills/opentelemetry-observability/SKILL.md +59 -0
- package/.agent/skills/page-transition-animation/SKILL.md +6 -3
- package/.agent/skills/parallel-agents/SKILL.md +7 -2
- package/.agent/skills/performance-profiling/SKILL.md +24 -13
- package/.agent/skills/plan-writing/SKILL.md +1 -0
- package/.agent/skills/platform-engineer/SKILL.md +3 -2
- package/.agent/skills/platform-engineering-opentofu/SKILL.md +68 -0
- package/.agent/skills/playwright-ai-e2e/SKILL.md +60 -0
- package/.agent/skills/playwright-best-practices/SKILL.md +29 -28
- package/.agent/skills/polish/SKILL.md +13 -12
- package/.agent/skills/powershell-windows/SKILL.md +1 -0
- package/.agent/skills/pricing-page/SKILL.md +8 -3
- package/.agent/skills/product-aware-heuristics/SKILL.md +122 -72
- package/.agent/skills/progressive-blur/SKILL.md +9 -4
- package/.agent/skills/project-idioms/SKILL.md +1 -0
- package/.agent/skills/property-based-testing/SKILL.md +58 -0
- package/.agent/skills/python-patterns/SKILL.md +1 -0
- package/.agent/skills/python-pro/SKILL.md +1 -0
- package/.agent/skills/quieter/SKILL.md +6 -0
- package/.agent/skills/react-doctor/SKILL.md +6 -0
- package/.agent/skills/react-specialist/SKILL.md +32 -28
- package/.agent/skills/readme-builder/SKILL.md +1 -0
- package/.agent/skills/realtime-patterns/SKILL.md +34 -33
- package/.agent/skills/red-team-tactics/SKILL.md +1 -0
- package/.agent/skills/redesign-skill/SKILL.md +6 -0
- package/.agent/skills/review-animations/SKILL.md +5 -2
- package/.agent/skills/review-animations/STANDARDS.md +37 -23
- package/.agent/skills/rust-pro/SKILL.md +1 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +4 -3
- package/.agent/skills/server-management/SKILL.md +1 -0
- package/.agent/skills/shadcn-ui-expert/SKILL.md +28 -22
- package/.agent/skills/shape/SKILL.md +9 -2
- package/.agent/skills/skill-creator/SKILL.md +1 -0
- package/.agent/skills/soft-skill/SKILL.md +6 -0
- package/.agent/skills/sounds-on-the-web/SKILL.md +1 -0
- package/.agent/skills/sql-pro/SKILL.md +1 -0
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +1 -0
- package/.agent/skills/svg-animation/SKILL.md +16 -7
- package/.agent/skills/swiftui-expert/SKILL.md +1 -0
- package/.agent/skills/swiss-design/SKILL.md +5 -0
- package/.agent/skills/system-design-pro/SKILL.md +1 -0
- package/.agent/skills/systematic-debugging/SKILL.md +1 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +25 -11
- package/.agent/skills/taste-skill/SKILL.md +6 -0
- package/.agent/skills/tdd-workflow/SKILL.md +5 -0
- package/.agent/skills/test-result-analyzer/SKILL.md +1 -0
- package/.agent/skills/testing-patterns/SKILL.md +123 -115
- package/.agent/skills/thermo-nuclear-code-quality-review/SKILL.md +5 -0
- package/.agent/skills/thinking-protocol/SKILL.md +3 -0
- package/.agent/skills/to-spring-or-not-to-spring/SKILL.md +9 -8
- package/.agent/skills/transitions-dev/SKILL.md +19 -6
- package/.agent/skills/trend-researcher/SKILL.md +1 -0
- package/.agent/skills/typescript-advanced/SKILL.md +23 -18
- package/.agent/skills/typeset/SKILL.md +10 -1
- package/.agent/skills/ui-reasoning-engine/SKILL.md +67 -48
- package/.agent/skills/ui-skill-packs/SKILL.md +6 -1
- package/.agent/skills/ui-skills-root/SKILL.md +39 -38
- package/.agent/skills/ui-ux-pro-max/SKILL.md +34 -26
- package/.agent/skills/ui-ux-researcher/SKILL.md +1 -0
- package/.agent/skills/vector-search-pgvector/SKILL.md +78 -0
- package/.agent/skills/vue-expert/SKILL.md +22 -19
- package/.agent/skills/vulnerability-scanner/SKILL.md +22 -21
- package/.agent/skills/web-accessibility-auditor/SKILL.md +2 -1
- package/.agent/skills/web-design-guidelines/SKILL.md +16 -10
- package/.agent/skills/web-quality-audit/SKILL.md +5 -0
- package/.agent/skills/webapp-testing/SKILL.md +14 -13
- package/.agent/skills/webgpu-performance/SKILL.md +1 -0
- package/.agent/skills/whimsy-injector/SKILL.md +9 -5
- package/.agent/skills/workflow-optimizer/SKILL.md +1 -0
- package/.agent/skills/zero-trust-passkeys/SKILL.md +90 -0
- package/.agent/templates/DESIGN.md +119 -110
- package/.agent/templates/design-tokens.json +9 -6
- package/.agent/workflows/acf.md +1 -0
- package/.agent/workflows/api-tester.md +1 -0
- package/.agent/workflows/audit.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/changelog.md +1 -0
- package/.agent/workflows/contract.md +60 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/fix-ci.md +89 -0
- package/.agent/workflows/fix.md +1 -0
- package/.agent/workflows/generate.md +1 -0
- package/.agent/workflows/marathon.md +1 -0
- package/.agent/workflows/migrate.md +1 -0
- package/.agent/workflows/minimal.md +9 -7
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/performance-benchmarker.md +1 -0
- package/.agent/workflows/pipeline.md +26 -21
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/refactor.md +3 -2
- package/.agent/workflows/review-ai.md +4 -3
- package/.agent/workflows/review.md +1 -0
- package/.agent/workflows/session.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/strengthen-skills.md +1 -0
- package/.agent/workflows/super-prompt.md +1 -0
- package/.agent/workflows/swarm.md +15 -3
- package/.agent/workflows/test.md +8 -7
- package/.agent/workflows/tribunal-backend.md +3 -2
- package/.agent/workflows/tribunal-cicd.md +104 -0
- package/.agent/workflows/tribunal-database.md +1 -0
- package/.agent/workflows/tribunal-frontend.md +8 -6
- package/.agent/workflows/tribunal-full.md +15 -14
- package/.agent/workflows/tribunal-mobile.md +6 -5
- package/.agent/workflows/tribunal-performance.md +1 -0
- package/.agent/workflows/tribunal-speed.md +1 -0
- package/.agent/workflows/tribunal-ui.md +29 -21
- package/.agent/workflows/ui-ux-pro-max.md +19 -15
- package/CONTRIBUTING.md +3 -3
- package/README.md +160 -88
- package/SECURITY.md +11 -11
- package/bin/mcp-server.js +512 -233
- package/bin/tribunal-kit.js +29 -30
- package/bin/wrapper.js +45 -48
- package/dist/cli.js +26 -0
- package/dist/commands/case.js +2 -0
- package/dist/commands/contract.js +440 -0
- package/dist/commands/memory.js +3 -2
- package/dist/commands/native.js +36 -0
- package/dist/commands/status.js +6 -0
- package/dist/esm/index.mjs +32 -0
- package/dist/index.d.ts +58 -3
- package/package.json +20 -16
- package/scripts/benchmark.js +62 -86
- package/scripts/changelog.js +67 -73
- package/scripts/fix-vbc.js +13 -15
- package/scripts/fix-vbc.ps1 +2 -118
- package/scripts/stress_benchmark.js +358 -0
- package/scripts/sync-version.js +71 -41
- package/scripts/validate-payload.js +23 -30
- 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": [
|
|
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
|
|
201
|
-
|
|
|
202
|
-
| `.agent/scripts/lint_runner.js`
|
|
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(
|
|
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
|
|
92
|
-
import OpenAI from
|
|
92
|
+
import { z } from 'zod';
|
|
93
|
+
import OpenAI from 'openai';
|
|
93
94
|
|
|
94
95
|
const SentimentSchema = z.object({
|
|
95
|
-
sentiment: z.enum([
|
|
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:
|
|
105
|
+
model: 'gpt-4o-mini',
|
|
105
106
|
response_format: {
|
|
106
|
-
type:
|
|
107
|
+
type: 'json_schema',
|
|
107
108
|
json_schema: {
|
|
108
|
-
name:
|
|
109
|
+
name: 'sentiment_analysis',
|
|
109
110
|
strict: true,
|
|
110
111
|
schema: {
|
|
111
|
-
type:
|
|
112
|
+
type: 'object',
|
|
112
113
|
properties: {
|
|
113
|
-
sentiment: { type:
|
|
114
|
-
confidence: { type:
|
|
115
|
-
reasoning: { type:
|
|
116
|
-
topics: { type:
|
|
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: [
|
|
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:
|
|
125
|
-
{ role:
|
|
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
|
|
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:
|
|
137
|
+
model: 'gemini-2.0-flash',
|
|
137
138
|
generationConfig: {
|
|
138
|
-
responseMimeType:
|
|
139
|
+
responseMimeType: 'application/json',
|
|
139
140
|
responseSchema: {
|
|
140
141
|
type: SchemaType.OBJECT,
|
|
141
142
|
properties: {
|
|
142
|
-
sentiment: { type: SchemaType.STRING, enum: [
|
|
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: [
|
|
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:
|
|
163
|
+
type: 'function',
|
|
163
164
|
function: {
|
|
164
|
-
name:
|
|
165
|
-
description:
|
|
165
|
+
name: 'search_products',
|
|
166
|
+
description: 'Search products by name, category, or price range',
|
|
166
167
|
parameters: {
|
|
167
|
-
type:
|
|
168
|
+
type: 'object',
|
|
168
169
|
properties: {
|
|
169
|
-
query: { type:
|
|
170
|
-
category: { type:
|
|
171
|
-
max_price: { type:
|
|
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: [
|
|
174
|
+
required: ['query'],
|
|
174
175
|
},
|
|
175
176
|
},
|
|
176
177
|
},
|
|
177
178
|
{
|
|
178
|
-
type:
|
|
179
|
+
type: 'function',
|
|
179
180
|
function: {
|
|
180
|
-
name:
|
|
181
|
-
description:
|
|
181
|
+
name: 'get_order_status',
|
|
182
|
+
description: 'Get the status of an order by order ID',
|
|
182
183
|
parameters: {
|
|
183
|
-
type:
|
|
184
|
+
type: 'object',
|
|
184
185
|
properties: {
|
|
185
|
-
order_id: { type:
|
|
186
|
+
order_id: { type: 'string', description: 'The order ID (e.g., ORD-12345)' },
|
|
186
187
|
},
|
|
187
|
-
required: [
|
|
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:
|
|
197
|
-
{ role:
|
|
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:
|
|
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 ===
|
|
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:
|
|
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:
|
|
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 =
|
|
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(
|
|
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(
|
|
315
|
-
res.setHeader(
|
|
316
|
-
res.setHeader(
|
|
317
|
-
res.setHeader(
|
|
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:
|
|
321
|
-
messages: [{ role:
|
|
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(
|
|
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 =
|
|
339
|
-
if (event.data ===
|
|
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: [
|
|
59
|
-
queryFn: () => fetch(
|
|
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
|
|
65
|
+
import { useQuery } from '@powersync/react';
|
|
65
66
|
|
|
66
|
-
const { data, isLoading } = useQuery(
|
|
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(
|
|
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
|
|
87
|
-
import { WebsocketProvider } from
|
|
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(
|
|
91
|
+
const provider = new WebsocketProvider('wss://sync.example.com', 'room-1', ydoc);
|
|
91
92
|
|
|
92
93
|
// Shared state array
|
|
93
|
-
const yarray = ydoc.getArray(
|
|
94
|
+
const yarray = ydoc.getArray('todos');
|
|
94
95
|
|
|
95
96
|
// Observe changes (Fires locally and when peers sync)
|
|
96
|
-
yarray.observe(
|
|
97
|
-
console.log(
|
|
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, [
|
|
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
|
|
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(
|
|
129
|
-
friends: EntityTable<Friend,
|
|
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:
|
|
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:
|
|
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
|
|
142
|
-
const friends = useLiveQuery(() => db.friends.where(
|
|
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 (
|
|
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
|
|
36
|
-
import { DotLottiePlayer, Controls } from
|
|
37
|
-
import
|
|
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 {
|
|
37
|
-
|
|
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 {
|
|
49
|
-
|
|
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
|
|
51
|
-
import { z } from
|
|
51
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
52
|
+
import { z } from 'zod';
|
|
52
53
|
|
|
53
54
|
const server = new McpServer({
|
|
54
|
-
name:
|
|
55
|
-
version:
|
|
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
|
-
|
|
61
|
-
|
|
61
|
+
'query_production_database',
|
|
62
|
+
'Executes a read-only sanitized query against the production analytical replica.',
|
|
62
63
|
{
|
|
63
|
-
table: z
|
|
64
|
-
|
|
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:
|
|
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:
|
|
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.";
|