@groundtruth-mcp/gt-mcp 2.4.0 → 2.5.1

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/README.md CHANGED
@@ -1,37 +1,45 @@
1
- <p align="center">
2
- <img src="./banner.webp" alt="GroundTruth — self-hosted MCP server for live documentation and code audits" width="100%" />
3
- </p>
4
-
5
- <h1 align="center">GroundTruth</h1>
6
-
7
- <p align="center">
8
- Your AI assistant just confidently wrote deprecated code again.<br/>
9
- This fixes that.
10
- </p>
1
+ <div align="center">
2
+ <table><tr><td>
3
+ <pre>
4
+ ██████╗ ████████╗ ███╗ ███╗ ██████╗ ██████╗
5
+ ██╔════╝ ╚══██╔══╝ ████╗ ████║ ██╔════╝ ██╔══██╗
6
+ ██║ ███╗ ██║ ██╔████╔██║ ██║ ██████╔╝
7
+ ██║ ██║ ██║ ██║╚██╔╝██║ ██║ ██╔═══╝
8
+ ╚██████╔╝ ██║ ██║ ╚═╝ ██║ ╚██████╗ ██║
9
+ </pre>
10
+ </td></tr></table>
11
+ </div>
12
+
13
+ <h3 align="center">Your AI assistant just mass-produced deprecated code again.<br/>You merged it because the formatting was clean.<br/><br/>GroundTruth fixes that.</h3>
11
14
 
12
15
  <p align="center">
13
16
  <a href="https://www.npmjs.com/package/@groundtruth-mcp/gt-mcp"><img src="https://img.shields.io/npm/v/@groundtruth-mcp/gt-mcp?color=00d4aa&label=npm" alt="npm version" /></a>
14
17
  <a href="https://github.com/rm-rf-prod/GroundTruth-MCP/actions/workflows/ci.yml"><img src="https://github.com/rm-rf-prod/GroundTruth-MCP/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
15
18
  <a href="./LICENSE"><img src="https://img.shields.io/badge/license-ELv2-orange" alt="Elastic License 2.0" /></a>
16
- <img src="https://img.shields.io/badge/libraries-363%2B-teal" alt="363+ libraries" />
19
+ <img src="https://img.shields.io/badge/libraries-363%2B-teal" alt="Unlimited libraries" />
17
20
  <img src="https://img.shields.io/badge/audit_patterns-100%2B-red" alt="100+ audit patterns" />
18
- <img src="https://img.shields.io/badge/tests-631-brightgreen" alt="631 tests" />
21
+ <img src="https://img.shields.io/badge/tests-704-brightgreen" alt="704 tests" />
19
22
  <img src="https://img.shields.io/badge/node-%3E%3D24-green" alt="Node 24+" />
23
+ <img src="https://img.shields.io/badge/status-active%20development-blue" alt="Active Development" />
20
24
  </p>
21
25
 
26
+ <h4 align="center">Self-hosted MCP server. 363+ curated libraries. 100+ audit patterns. No rate limits. No API keys.<br/>Ships updates continuously — your MCP client picks them up on restart.</h4>
27
+
22
28
  ---
23
29
 
24
- ## The problem with AI coding assistants
30
+ ## The problem (it's you, but also the model)
31
+
32
+ Your AI assistant just mass-produced seven files of deprecated code and you merged all of it because the formatting was nice and the variable names were clean. We've all been there. Some of us are still there. Some of us are in production there.
25
33
 
26
- They hallucinate APIs. Not because the models are bad because documentation moves faster than training data does. A library ships a major version, deprecates half its API, and the model keeps generating the old patterns for the next six months. You catch it in review if you're lucky. In production if you're not.
34
+ Here's what happened: React shipped v19 and killed `forwardRef`. Next.js made `cookies()` async. Tailwind moved to v4 and nuked `@tailwind` directives. Your model didn't get the memo. It's still writing patterns from the before times with absolute confidence and zero hesitation.
27
35
 
28
- There's also the security problem nobody talks about enough. AI assistants produce insecure patterns without knowing they're doing it: SQL built with template literals, `innerHTML` fed user input, `any` scattered through TypeScript like confetti, `cookies()` called without `await` in Next.js 16. The model isn't malicious it just learned from code that predates the rule change, and now it's your problem.
36
+ And the security stuff that's the part that should keep you up at night but doesn't because you don't know about it yet. The model will hand you SQL injection dressed up as a query builder, pass user input to `innerHTML` like it's a feature, and use `any` in TypeScript with the same energy as someone who puts ketchup on steak. It learned from real code. Real code that real people got real fired over.
29
37
 
30
- Context7 helps with the first problem. But it has rate limits, lives in the cloud, and covers around 130 libraries. Hit the quota mid-session and you get nothing. I did that enough times that I built the thing I actually wanted.
38
+ Context7 is one solution. Cloud-hosted. Rate-limited. Covers about 130 libraries. Works great until you burn through the quota at 11pm debugging a production outage and it serves you a 429 while your Slack is lighting up.
31
39
 
32
- **GroundTruth runs on your machine.** It fetches docs directly from the source at query time — `llms.txt` files first (purpose-built for LLMs by the maintainers themselves), then Jina Reader for JS-rendered pages, then GitHub. No quota. No cold start. No cache from six months ago. 363+ libraries across the Python AI/ML stack, Go, Rust, and web standards including OWASP, MDN, and WebAssembly.
40
+ **GroundTruth runs on your machine.** No quota to hit. No cloud to go down. Fetches docs from the source `llms.txt`, Jina Reader, GitHub right when you ask. 363+ curated libraries, plus npm, PyPI, crates.io, and pkg.go.dev as fallback. Any public package. Any ecosystem.
33
41
 
34
- The audit tool scans your actual source files at `file:line` level and fetches current fix guidance from the real spec. Not a linting rule someone wrote in 2019. The actual spec.
42
+ The audit tool reads your actual files, finds issues at exact `file:line` locations, and fetches the current fix from the real spec. Not a Medium article. Not a 2019 ESLint plugin. The OWASP cheat sheet that was updated last month.
35
43
 
36
44
  ---
37
45
 
@@ -64,11 +72,21 @@ Add to your MCP config (`claude_desktop_config.json`, `.cursor/mcp.json`, or `.v
64
72
  }
65
73
  ```
66
74
 
67
- No build step. No config file. Node.js 24+. npx pulls the latest version on every session start automatically.
75
+ No build step. No config file. Node.js 24+. Using `@latest` means npx pulls the newest version on every session start automatically — you always get the latest libraries, audit patterns, and fixes without doing anything.
76
+
77
+ ### Automatic updates
78
+
79
+ GroundTruth checks npm for new versions on every startup. If a newer version exists, you get a notification:
80
+
81
+ - **stderr log** — visible in your MCP client's server output
82
+ - **MCP logging message** — surfaces in clients that support MCP log notifications
83
+ - **Tool response footer** — appended to every tool response until you restart with the latest version
84
+
85
+ Since the install uses `npx -y @groundtruth-mcp/gt-mcp@latest`, restarting your MCP client (or starting a new session) is enough to get the update. No manual `npm update` needed.
68
86
 
69
87
  ### Optional: GitHub token
70
88
 
71
- GroundTruth fetches README files, release notes, and migration guides from GitHub. Unauthenticated requests are rate-limited to 60/hr. If you build anything with more than a couple dependencies, you'll hit that by lunch.
89
+ GroundTruth fetches README files, release notes, migration guides, and code examples from GitHub. Unauthenticated requests are rate-limited to 60/hr. If you build anything with more than a couple dependencies, you'll hit that by lunch.
72
90
 
73
91
  ```bash
74
92
  # Claude Code
@@ -92,19 +110,20 @@ A token with no extra scopes (public repo read) is enough. Takes the limit from
92
110
 
93
111
  ## Tools
94
112
 
95
- Nine tools. Each does one thing and stops there.
113
+ Ten tools. Each does one thing and stops there.
96
114
 
97
115
  | Tool | What it does |
98
116
  |---|---|
99
- | `gt_resolve_library` | Find a library by name — gets the registry entry and docs URL |
117
+ | `gt_resolve_library` | Find a library by name — gets the registry entry and docs URL. Falls back to npm, PyPI, crates.io, and pkg.go.dev |
100
118
  | `gt_get_docs` | Fetch live docs for a specific topic (not whatever was cached six months ago) |
101
119
  | `gt_best_practices` | Get patterns, anti-patterns, and config guidance for any library |
102
- | `gt_auto_scan` | Read `package.json` / `requirements.txt`, fetch best practices for everything in it |
120
+ | `gt_auto_scan` | Read `package.json` / `requirements.txt`, detect lockfile versions, fetch best practices for everything in it |
103
121
  | `gt_search` | Search OWASP, MDN, web.dev, W3C, official language docs, and AI provider docs |
104
122
  | `gt_audit` | Scan your source files — finds real issues at exact `file:line` with live fixes attached |
105
123
  | `gt_changelog` | Fetch release notes before you run `npm update` and regret it |
106
124
  | `gt_compat` | Check browser and runtime compatibility — before Safari breaks your launch |
107
- | `gt_compare` | Compare 23 libraries side-by-side so you can finally pick one and move on |
125
+ | `gt_compare` | Compare 2-3 libraries side-by-side so you can finally pick one and move on |
126
+ | `gt_examples` | Search GitHub for real-world code examples of any library or usage pattern |
108
127
 
109
128
  ---
110
129
 
@@ -148,7 +167,7 @@ gt_audit({ categories: ["typescript", "react"] }) // type safety + React ru
148
167
  gt_audit({
149
168
  projectPath: "./src", // defaults to cwd
150
169
  categories: ["security"], // or "all" (default)
151
- maxFiles: 100, // 1200, default 50
170
+ maxFiles: 100, // 1-200, default 50
152
171
  tokens: 6000, // max tokens per docs fetch, default 4000
153
172
  })
154
173
  ```
@@ -207,7 +226,7 @@ gt_compat({ feature: "CSS :has() selector", environments: ["safari", "firefox"]
207
226
 
208
227
  ## `gt_compare` — pick one already
209
228
 
210
- Side-by-side comparison of 23 libraries. Fetches live docs for each and filters to content relevant to your criteria. Useful for the "prisma vs drizzle" debate you've been having with yourself for three weeks while using neither.
229
+ Side-by-side comparison of 2-3 libraries. Fetches live docs for each and filters to content relevant to your criteria. Useful for the "prisma vs drizzle" debate you've been having with yourself for three weeks while using neither.
211
230
 
212
231
  ```
213
232
  gt_compare({ libraries: ["prisma", "drizzle-orm"] })
@@ -218,9 +237,24 @@ gt_compare({ libraries: ["react", "solid-js"], criteria: "performance rendering"
218
237
 
219
238
  ---
220
239
 
240
+ ## `gt_examples` — see how other people actually use it
241
+
242
+ Searches GitHub for real-world usage examples of any library or pattern. Returns code snippets from popular open-source projects with file paths and repository attribution. Useful when the docs tell you what an API does but not how anyone actually uses it in production.
243
+
244
+ ```
245
+ gt_examples({ library: "drizzle-orm" })
246
+ gt_examples({ library: "tanstack/query", pattern: "useMutation" })
247
+ gt_examples({ library: "fastapi", pattern: "middleware", language: "python" })
248
+ gt_examples({ library: "hono", pattern: "auth guard", maxResults: 10 })
249
+ ```
250
+
251
+ Requires `GT_GITHUB_TOKEN` for higher rate limits. Without a token, GitHub Code Search allows 10 requests per minute.
252
+
253
+ ---
254
+
221
255
  ## `gt_search` — anything that isn't a specific library
222
256
 
223
- For questions not tied to a particular package. Pulls from OWASP, MDN, web.dev, W3C, official language docs, AI provider docs, and everything else in the topic map below. Good for when you know what you need but not which library page it lives on.
257
+ For questions not tied to a particular package. Pulls from OWASP, MDN, web.dev, W3C, official language docs, AI provider docs, Google developer docs, and everything else in the topic map below. Good for when you know what you need but not which library page it lives on.
224
258
 
225
259
  ```
226
260
  gt_search({ query: "WCAG 2.2 focus indicators" })
@@ -229,26 +263,36 @@ gt_search({ query: "Core Web Vitals LCP optimization" })
229
263
  gt_search({ query: "gRPC vs REST tradeoffs" })
230
264
  gt_search({ query: "OpenTelemetry Node.js setup" })
231
265
  gt_search({ query: "RAG retrieval patterns" })
232
- gt_search({ query: "WebAssembly use cases" })
233
- gt_search({ query: "MCP protocol tool definition" })
266
+ gt_search({ query: "Google Gemini API function calling" })
267
+ gt_search({ query: "Claude tool use best practices" })
268
+ gt_search({ query: "OpenAI structured output" })
269
+ gt_search({ query: "Firebase Firestore security rules" })
234
270
  ```
235
271
 
236
272
  ### Covered topic areas
237
273
 
238
274
  | Area | Topics |
239
275
  |---|---|
240
- | Security | OWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, authentication, CORS, JWT, OAuth 2.1, OIDC, WebAuthn / passkeys |
276
+ | Security | OWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, authentication, CORS, JWT, OAuth 2.1, OIDC, WebAuthn / passkeys, SSRF, file upload security, clickjacking, path traversal, API security, supply chain / SBOM |
241
277
  | Accessibility | WCAG 2.2, WAI-ARIA, keyboard navigation |
242
278
  | Performance | Core Web Vitals, image optimization, web fonts, Speculation Rules API |
243
- | Web APIs | Fetch, Web Workers, Service Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer, ResizeObserver, Web Animations API, WebAssembly |
244
- | CSS | Grid, Flexbox, Container Queries, Custom Properties, View Transitions, Cascade Layers |
245
- | HTTP & protocols | Headers, caching, HTTP/2, HTTP/3, REST, OpenAPI, GraphQL, gRPC / Protocol Buffers, Server-Sent Events |
246
- | Standards | JSON Schema, JSON-LD / Structured Data, OpenTelemetry, Semantic Versioning, MCP Protocol |
247
- | AI | Agents & tool calling, RAG, prompt engineering, vector search / embeddings |
248
- | Infrastructure | Docker, Kubernetes, GitHub Actions, Terraform, monorepo patterns |
279
+ | Web APIs | Fetch, Web Workers, Service Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer, ResizeObserver, Web Animations API, WebAssembly, AbortController, File System Access API |
280
+ | CSS | Grid, Flexbox, Container Queries, Custom Properties, View Transitions, Cascade Layers, Nesting, :has(), Subgrid, Scroll-driven Animations, oklch / color-mix, @scope |
281
+ | HTTP & protocols | Headers, caching, HTTP/2, HTTP/3, REST, OpenAPI, GraphQL, gRPC / Protocol Buffers, Server-Sent Events, JSON Schema |
282
+ | Standards | JSON-LD / Structured Data, OpenTelemetry, Semantic Versioning, MCP Protocol, Intl API, i18n / Localization |
283
+ | Google APIs | Gemini API, Maps API, Analytics 4, Ads API, Search Console, Sheets API, Drive API, Calendar API, OAuth / Identity, Tag Manager, reCAPTCHA, Lighthouse / PageSpeed, YouTube API, Gmail API, Workspace / Apps Script, Custom Search, Chrome Extensions, SEO guidelines, Fonts API |
284
+ | Google Cloud | Cloud Run, Cloud Functions, Cloud Storage, BigQuery, Pub/Sub, Vertex AI, Vision API, Speech APIs, Translation, Natural Language, GKE, IAM |
285
+ | Firebase | Firestore, Authentication, Cloud Functions, Hosting |
286
+ | Anthropic / Claude | Claude API, tool use, prompt caching, vision, extended thinking, computer use, streaming, message batches, PDF support, citations, models, rate limits, Claude Code, Agent SDK |
287
+ | OpenAI | Chat API, Responses API, function calling, structured output, embeddings, fine-tuning, vision, image generation, Whisper / STT, TTS, Realtime API, Batch API, moderation, Agents SDK, rate limits, production best practices |
288
+ | AI providers | Mistral AI, Cohere, Groq, Replicate, Together AI, Hugging Face |
289
+ | AI frameworks | LangChain, LangGraph, LlamaIndex, CrewAI, AutoGen |
290
+ | AI concepts | Agents & tool calling, RAG, prompt engineering, vector search / embeddings, fine-tuning, AI safety, evaluation, multimodal AI, code generation, voice AI |
291
+ | Vector databases | Pinecone, Chroma, Weaviate |
292
+ | Infrastructure | Docker, Kubernetes, GitHub Actions, Terraform, Cloudflare Workers, monorepo patterns |
249
293
  | Databases | PostgreSQL, Redis, MongoDB |
250
294
  | Languages | Rust, Go, Python, Node.js, TypeScript |
251
- | Frameworks | NestJS, Elysia, Payload CMS, Kysely, Pinia, React Native / Expo + full ecosystem |
295
+ | Frameworks | NestJS, Elysia, Angular, Flutter, Payload CMS, Kysely, Pinia, React Native / Expo + full ecosystem, Material Design |
252
296
 
253
297
  ---
254
298
 
@@ -276,6 +320,8 @@ use gt to check WCAG focus indicators
276
320
  use gt for OpenTelemetry setup
277
321
  find all issues and fix with gt
278
322
  use gt for gRPC
323
+ use gt for Google Gemini API
324
+ use gt for Claude tool use
279
325
  ```
280
326
 
281
327
  ### Direct tool calls
@@ -286,10 +332,13 @@ gt_get_docs({ libraryId: "nestjs/nest", topic: "guards" })
286
332
  gt_best_practices({ libraryId: "vercel/next.js", topic: "caching" })
287
333
  gt_auto_scan({ projectPath: "." })
288
334
  gt_search({ query: "OpenTelemetry Node.js distributed tracing" })
335
+ gt_search({ query: "Google Gemini API function calling" })
336
+ gt_search({ query: "Claude prompt caching" })
289
337
  gt_audit({ projectPath: ".", categories: ["security", "accessibility"] })
290
338
  gt_changelog({ libraryId: "vercel/next.js", version: "15" })
291
339
  gt_compat({ feature: "CSS container queries", environments: ["safari"] })
292
340
  gt_compare({ libraries: ["prisma", "drizzle-orm"], criteria: "TypeScript support" })
341
+ gt_examples({ library: "hono", pattern: "middleware" })
293
342
  ```
294
343
 
295
344
  ---
@@ -305,13 +354,13 @@ For every library docs request, GroundTruth tries sources in this order and stop
305
354
  1. **`llms.txt` / `llms-full.txt`** — context files published by the project maintainer specifically for LLM consumption. More reliable than scraping the docs site.
306
355
  2. **Jina Reader** (`r.jina.ai`) — converts the official docs page to clean markdown. Handles JS-rendered sites that would return nothing via a plain fetch.
307
356
  3. **GitHub README / releases** — latest release notes and README from the project repository.
308
- 4. **npm / PyPI metadata** — fallback for packages outside the curated registry.
357
+ 4. **npm / PyPI / crates.io / pkg.go.dev** — fallback for packages outside the curated registry, with automatic `llms.txt` probing on discovered homepages.
309
358
 
310
359
  ---
311
360
 
312
- ## Library coverage — 363+ libraries
361
+ ## Library coverage — unlimited
313
362
 
314
- Every major ecosystem. If a library publishes an `llms.txt`, it's probably in here.
363
+ 363+ curated entries in the registry, plus automatic fallback to npm, PyPI, crates.io, and pkg.go.dev. Any public package in any major ecosystem is resolvable — the registry gives you curated quality, the fallbacks give you universal reach.
315
364
 
316
365
  | Ecosystem | Libraries |
317
366
  |---|---|
@@ -322,9 +371,14 @@ Every major ecosystem. If a library publishes an `llms.txt`, it's probably in he
322
371
  | Backend (Go) | Gin, Fiber, GORM, chi |
323
372
  | Backend (Rust) | Axum, Actix Web, sqlx, Tokio |
324
373
  | Database / ORM | Prisma, Drizzle, Kysely, TypeORM, Mongoose, Knex, Supabase, Neon, Turso, Electric SQL |
325
- | Vector databases | Pinecone, Qdrant |
326
- | AI / ML (JS) | Vercel AI SDK, Anthropic SDK, OpenAI SDK, LangChain.js, LlamaIndex.TS, Transformers.js, Ollama, assistant-ui |
327
- | AI / ML (Python) | LangChain, LlamaIndex, CrewAI, LangGraph, HuggingFace Transformers |
374
+ | Vector databases | Pinecone, Chroma, Weaviate, Qdrant |
375
+ | AI / LLM providers | Anthropic Claude API, OpenAI API, Google Gemini API, Mistral AI, Cohere, Groq, Replicate, Together AI, Fireworks AI |
376
+ | AI SDKs (JS/TS) | Vercel AI SDK, Anthropic SDK, OpenAI SDK, Google Generative AI, LangChain.js, Transformers.js, Ollama, assistant-ui |
377
+ | AI SDKs (Python) | Anthropic Python SDK, OpenAI Python SDK, Google Gemini Python SDK, LangChain, LlamaIndex, CrewAI, LangGraph, AutoGen, HuggingFace Transformers |
378
+ | AI agents | Claude Code, Claude Agent SDK, OpenAI Agents SDK |
379
+ | AI audio / voice | ElevenLabs, Deepgram, AssemblyAI |
380
+ | AI image / video | Stability AI, fal.ai |
381
+ | Google | Firebase, Google Cloud, Google Maps API, Google APIs Client, Vertex AI, Angular, Flutter, Material Design |
328
382
  | Testing | Vitest, Playwright, Jest, Testing Library, Cypress, MSW |
329
383
  | Auth | Clerk, NextAuth, Better Auth, Lucia, Passport.js |
330
384
  | Validation | Zod, Yup, Valibot, Effect |
@@ -336,12 +390,14 @@ Every major ecosystem. If a library publishes an `llms.txt`, it's probably in he
336
390
  | Mobile | Expo, React Native, React Navigation, NativeWind, Reanimated, MMKV, FlashList, Skia, Moti |
337
391
  | Build tools | Vite, Turbopack, SWC, Rollup, Webpack, Biome, ESLint, Prettier, Turborepo, Nx |
338
392
  | Runtime | Node.js, Bun, Deno |
339
- | Cloud | Vercel, Cloudflare Workers, AWS SDK, Firebase |
393
+ | Cloud | Vercel, Cloudflare Workers, AWS SDK, Firebase, Google Cloud |
394
+ | Monitoring | Sentry, PostHog, OpenTelemetry, Pino |
395
+ | Automation | n8n, Trigger.dev |
340
396
  | HTTP clients | Axios, ky |
341
397
  | Real-time | Socket.IO, PartyKit |
342
- | Observability | OpenTelemetry, Sentry, Pino |
343
398
  | GraphQL clients | Apollo Client, urql |
344
- | HTTP utils | clsx, tailwind-merge |
399
+ | ML / Deep learning | PyTorch, TensorFlow, HuggingFace Transformers |
400
+ | Serverless | Upstash Redis |
345
401
 
346
402
  ---
347
403
 
@@ -353,14 +409,19 @@ Context7 is solid. Here's why I reach for this instead.
353
409
  |---|---|---|
354
410
  | Hosting | Self-hosted | Cloud |
355
411
  | Rate limits | None | Yes |
356
- | Source priority | llms.txt Jina GitHub | Doc page embeddings |
412
+ | Source priority | llms.txt -> Jina -> GitHub | Doc page embeddings |
357
413
  | Code audit | Yes — 100+ patterns, 18 categories, file:line, live fixes | No |
358
- | Freeform search | Yes — OWASP, MDN, AI docs, web standards | Library docs only |
414
+ | Freeform search | Yes — OWASP, MDN, AI docs, Google APIs, web standards | Library docs only |
359
415
  | Changelog lookup | Yes — GitHub Releases, CHANGELOG.md, docs site | No |
360
416
  | Browser compatibility | Yes — MDN + caniuse.com | No |
361
- | Library comparison | Yes — 23 libraries side-by-side, any criteria | No |
362
- | Libraries | 363+ curated + npm/PyPI fallback | ~130 |
417
+ | Library comparison | Yes — 2-3 libraries side-by-side, any criteria | No |
418
+ | Code examples | Yes GitHub Code Search for real-world usage | No |
419
+ | Lockfile detection | Yes — reads exact versions from lockfiles | No |
420
+ | Libraries | Unlimited — 363+ curated + npm/PyPI/crates.io/Go fallback | ~130 |
421
+ | AI coverage | Claude, OpenAI, Gemini, Mistral, Cohere, Groq, LangChain, LlamaIndex, CrewAI, 20+ more | Limited |
422
+ | Google APIs | Full coverage — Maps, Analytics, Ads, Cloud, Firebase, Vertex AI, 30+ services | Partial |
363
423
  | Python / Rust / Go | Yes | Limited |
424
+ | Update notifications | Yes — notifies when new version available | No |
364
425
  | API key required | No | No |
365
426
 
366
427
  The two tools approach the same problem from different angles. Context7 embeds doc pages and retrieves them by semantic similarity. GroundTruth fetches from the source at query time and prioritizes `llms.txt` files — content the maintainers specifically wrote for LLM consumption. Neither is universally better, but when you hit a rate limit at 11pm debugging a production issue, "self-hosted with no quota" stops being a nice-to-have.
@@ -369,7 +430,7 @@ The two tools approach the same problem from different angles. Context7 embeds d
369
430
 
370
431
  ## Tests
371
432
 
372
- 631 tests across 19 files. Every audit pattern has a test. Every manifest parser has a test. If a pattern ships without a test, the CI pipeline says no before any human has to.
433
+ 704 tests across 22 files. Every audit pattern has a test. Every manifest parser has a test. If a pattern ships without a test, the CI pipeline says no before any human has to.
373
434
 
374
435
  ```bash
375
436
  npm test # run all tests
@@ -384,20 +445,48 @@ npm run typecheck # TypeScript strict check (no emit)
384
445
  | `src/tools/auto-scan.test.ts` | All 8 manifest parsers using temp directories (package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod, pom.xml, composer.json, build.gradle) |
385
446
  | `src/utils/extract.test.ts` | Topic relevance ranking, truncation, document order preservation |
386
447
  | `src/utils/sanitize.test.ts` | Prompt injection stripping, `<script>`/`<style>` removal, navigation link cleanup |
448
+ | `src/utils/lockfile.test.ts` | Lockfile version detection for package-lock, pnpm-lock, yarn.lock, Cargo.lock |
449
+ | `src/tools/examples.test.ts` | GitHub Code Search, caching, rate limit handling, error states |
450
+ | `src/utils/version-check.test.ts` | Version comparison, update notification formatting, pending update state |
387
451
 
388
452
  Tests run in CI on every push and pull request to `main`. See `.github/workflows/ci.yml`.
389
453
 
390
454
  ---
391
455
 
456
+ ## Environment variables
457
+
458
+ All optional. GroundTruth works out of the box with zero configuration.
459
+
460
+ | Variable | Purpose | Default |
461
+ |---|---|---|
462
+ | `GT_GITHUB_TOKEN` | GitHub API auth — raises rate limit from 60 to 5000 req/hr | none |
463
+ | `GT_CACHE_DIR` | Disk cache location for persistent cross-session caching | `~/.gt-mcp-cache` |
464
+ | `GT_CONCURRENCY` | Parallel fetch limit in `gt_auto_scan` | `6` |
465
+
466
+ ---
467
+
392
468
  ## Requirements
393
469
 
394
- - Node.js 20+
470
+ - Node.js 24+
395
471
  - Claude Code, Cursor, VS Code (MCP extension), or Claude Desktop
396
472
 
397
473
  That's it. No Docker. No config files. No environment variables unless you want the GitHub token.
398
474
 
399
475
  ---
400
476
 
477
+ ## Active development
478
+
479
+ GroundTruth is under active development. New curated registry entries, audit patterns, search topics, and features are added regularly. The registry covers 363+ libraries with deep curated metadata, and automatic fallback to npm, PyPI, crates.io, and pkg.go.dev means any public package is resolvable out of the box.
480
+
481
+ Recent additions include comprehensive coverage for Google Gemini API, Anthropic Claude API (tool use, prompt caching, vision, extended thinking, computer use, streaming, batches), OpenAI API (chat, responses, function calling, structured output, embeddings, fine-tuning, realtime, agents), and 20+ additional AI providers and frameworks.
482
+
483
+ To stay updated:
484
+ - **Star and watch** the [GitHub repo](https://github.com/rm-rf-prod/GroundTruth-MCP) for release notifications
485
+ - **Use `@latest`** in your MCP config (the default install command) — npx fetches the newest version automatically
486
+ - **Check tool responses** — GroundTruth appends an update notice when a newer version is available
487
+
488
+ ---
489
+
401
490
  ## Contributing
402
491
 
403
492
  The library registry lives in `src/sources/registry.ts`. Adding a library is a PR with `id`, `name`, `docsUrl`, and `llmsTxtUrl` if the project publishes one. If you've been frustrated by a library not being covered, that's the fix — it takes about five minutes.
@@ -406,9 +495,23 @@ Issues and requests: [github.com/rm-rf-prod/GroundTruth-MCP/issues](https://gith
406
495
 
407
496
  ---
408
497
 
498
+ ## Full documentation
499
+
500
+ Want the full technical breakdown? Architecture, every tool's input schema, every audit pattern, the fetch pipeline, caching internals, the obfuscation build, and how the registry works?
501
+
502
+ **[Read the full docs](./docs/DOCUMENTATION.md)** — everything in one place, for the people who actually read documentation before using a tool.
503
+
504
+ ---
505
+
409
506
  ## Star history
410
507
 
411
- [![Star History Chart](https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date)](https://star-history.com/#rm-rf-prod/GroundTruth-MCP&Date)
508
+ <a href="https://star-history.com/#rm-rf-prod/GroundTruth-MCP&Date">
509
+ <picture>
510
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date&theme=dark" />
511
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date" />
512
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date" />
513
+ </picture>
514
+ </a>
412
515
 
413
516
  ---
414
517
 
@@ -1,5 +1,5 @@
1
1
  export declare const SERVER_NAME = "GroundTruth";
2
- export declare const SERVER_VERSION = "2.4.0";
2
+ export declare const SERVER_VERSION = "2.5.1";
3
3
  export declare const REGISTRY_BADGE_SIZE = 363;
4
4
  export declare const CHARS_PER_TOKEN = 3.8;
5
5
  export declare const DISK_CACHE_DIR: string;
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- const a0_0x3eb31a=a0_0x85cf;(function(_0xc2c0ac,_0x30094d){const _0x308a75=a0_0x85cf,_0x550075=_0xc2c0ac();while(!![]){try{const _0x2f5e60=parseInt(_0x308a75(0x86,'VVyb'))/0x1+-parseInt(_0x308a75(0x8b,'sqHs'))/0x2+-parseInt(_0x308a75(0x8f,'npp9'))/0x3*(parseInt(_0x308a75(0x8c,'mBx3'))/0x4)+-parseInt(_0x308a75(0x95,'#$3b'))/0x5*(parseInt(_0x308a75(0x97,'IfGQ'))/0x6)+-parseInt(_0x308a75(0x94,'sqHs'))/0x7+parseInt(_0x308a75(0x83,'ocx1'))/0x8*(parseInt(_0x308a75(0x9c,'5EHd'))/0x9)+parseInt(_0x308a75(0x99,'Yy*n'))/0xa;if(_0x2f5e60===_0x30094d)break;else _0x550075['push'](_0x550075['shift']());}catch(_0x288595){_0x550075['push'](_0x550075['shift']());}}}(a0_0x1e91,0x3cd9b));export const SERVER_NAME=a0_0x3eb31a(0x7d,'&@Lx')+'h';export const SERVER_VERSION='2.4.0';export const REGISTRY_BADGE_SIZE=0x16b;export const CHARS_PER_TOKEN=3.8;export const DISK_CACHE_DIR=process.env.GT_CACHE_DIR??(process.env.HOME?process.env.HOME+(a0_0x3eb31a(0x9d,'Hxw8')+a0_0x3eb31a(0x93,'uSS2')):a0_0x3eb31a(0x7e,'npp9')+a0_0x3eb31a(0x7b,'oObP'));export const DEFAULT_TOKEN_LIMIT=0x1f40;export const MAX_TOKEN_LIMIT=0x4e20;function a0_0x1e91(){const _0x137166=['dXqkfw7cU8k3x8ortNBdTSo4','nwSDw2yxWPGyr1hdLmoE','mc9nWOBcKSogwwNcQ8o2','y8o/W7/dPCkxW7yWoW','bJJdKSk/WPZdQgBcUsO','WPVcGSkhwCkNWQaWW6WJWRX9oSoQ','A8k2rhZdVau','W4GwkCkmo8ouW7aQg8o6','da0lW6pcRSowqmopu24j','FgaZw28oWONcNLldPq','W7xdISkNW7T9WPZcHe8ekG','BcpdNgxdJSkHWOT9','dealW5/cSXn/nmoDyW','oSo/W7tdUxLXCGJcHci','aSkqWR3dSSo2W7NdLmk2gNO','WQpdK8obWQ1vWRBcSuGEWOW','WQ9Zfc7dKmkXsCk3W6tcQW','WPddGg4ru1/cSCkTWQZcS1aAWP0','fSk2oGDzhKVcUSoUtG','BhKEk8o2WOjMWO0Enq','Ec3cOmomWO3dGCoEW64YWOC','WPZcI8kcuCkLW695W6eZWRb8','WPBdNmkFBINdImkyWPJdItpdRNS','WPL0sbmvWO3cJmkxW5/dVa','ttNcJmoWgedcSmoCqqC','hCoCv8kTl0frWPGdWQxcSSo2','W4GYgu1nW4JcVmk1W5ZcPGddTq','cHSghw3cUSoWECoys3xdRq','wCk1WRm+W6bQpSkXWO8','zZDf','mc9nWOBcKSogwwNcQ8oY','hmoDW6lcUSoUWQ/dISk1tvqi','WPVcQqZcISksW4xdHmkXuSkpsG','z3Pas8o2WOnjWQC','v1rqWRhcSmoKxq','W6tdHIat'];a0_0x1e91=function(){return _0x137166;};return a0_0x1e91();}export const CACHE_TTL_MS=0x1e*0x3c*0x3e8;export const FETCH_TIMEOUT_MS=0x3a98;export const JINA_BASE_URL=a0_0x3eb31a(0x80,'&4Jl')+a0_0x3eb31a(0x92,'5EHd');export const NPM_REGISTRY_URL=a0_0x3eb31a(0x8e,'gLtH')+a0_0x3eb31a(0x7c,'AGrS')+a0_0x3eb31a(0x9a,'gC)n');export const PYPI_URL=a0_0x3eb31a(0x88,'kZvM')+a0_0x3eb31a(0x84,'Hj&9')+'i';export const GITHUB_API_URL=a0_0x3eb31a(0x82,'d2bM')+a0_0x3eb31a(0x9e,'jI)I')+'om';function a0_0x85cf(_0x55b749,_0x392526){_0x55b749=_0x55b749-0x7b;const _0x1e91dc=a0_0x1e91();let _0x85cfc0=_0x1e91dc[_0x55b749];if(a0_0x85cf['AbZDDr']===undefined){var _0x5eb0b6=function(_0x4b7efe){const _0xfd2871='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59fae3='',_0x184256='';for(let _0x18efc0=0x0,_0x6416ee,_0x17c295,_0x52b72c=0x0;_0x17c295=_0x4b7efe['charAt'](_0x52b72c++);~_0x17c295&&(_0x6416ee=_0x18efc0%0x4?_0x6416ee*0x40+_0x17c295:_0x17c295,_0x18efc0++%0x4)?_0x59fae3+=String['fromCharCode'](0xff&_0x6416ee>>(-0x2*_0x18efc0&0x6)):0x0){_0x17c295=_0xfd2871['indexOf'](_0x17c295);}for(let _0x2cf5c7=0x0,_0x1dcbda=_0x59fae3['length'];_0x2cf5c7<_0x1dcbda;_0x2cf5c7++){_0x184256+='%'+('00'+_0x59fae3['charCodeAt'](_0x2cf5c7)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x184256);};const _0x3a791a=function(_0x5e0019,_0xffd1a5){let _0x4b26ca=[],_0x11894b=0x0,_0x93a97d,_0x30d29b='';_0x5e0019=_0x5eb0b6(_0x5e0019);let _0x450a0d;for(_0x450a0d=0x0;_0x450a0d<0x100;_0x450a0d++){_0x4b26ca[_0x450a0d]=_0x450a0d;}for(_0x450a0d=0x0;_0x450a0d<0x100;_0x450a0d++){_0x11894b=(_0x11894b+_0x4b26ca[_0x450a0d]+_0xffd1a5['charCodeAt'](_0x450a0d%_0xffd1a5['length']))%0x100,_0x93a97d=_0x4b26ca[_0x450a0d],_0x4b26ca[_0x450a0d]=_0x4b26ca[_0x11894b],_0x4b26ca[_0x11894b]=_0x93a97d;}_0x450a0d=0x0,_0x11894b=0x0;for(let _0x6ab43f=0x0;_0x6ab43f<_0x5e0019['length'];_0x6ab43f++){_0x450a0d=(_0x450a0d+0x1)%0x100,_0x11894b=(_0x11894b+_0x4b26ca[_0x450a0d])%0x100,_0x93a97d=_0x4b26ca[_0x450a0d],_0x4b26ca[_0x450a0d]=_0x4b26ca[_0x11894b],_0x4b26ca[_0x11894b]=_0x93a97d,_0x30d29b+=String['fromCharCode'](_0x5e0019['charCodeAt'](_0x6ab43f)^_0x4b26ca[(_0x4b26ca[_0x450a0d]+_0x4b26ca[_0x11894b])%0x100]);}return _0x30d29b;};a0_0x85cf['DcTvnZ']=_0x3a791a,a0_0x85cf['InfUkH']={},a0_0x85cf['AbZDDr']=!![];}const _0x16e8f8=_0x1e91dc[0x0],_0x4456ab=_0x55b749+_0x16e8f8,_0x3f5254=a0_0x85cf['InfUkH'][_0x4456ab];return!_0x3f5254?(a0_0x85cf['Aicaag']===undefined&&(a0_0x85cf['Aicaag']=!![]),_0x85cfc0=a0_0x85cf['DcTvnZ'](_0x85cfc0,_0x392526),a0_0x85cf['InfUkH'][_0x4456ab]=_0x85cfc0):_0x85cfc0=_0x3f5254,_0x85cfc0;}export const GITHUB_RAW_URL=a0_0x3eb31a(0x96,'gLtH')+a0_0x3eb31a(0x9b,'&E8d')+a0_0x3eb31a(0x87,'1ixd')+a0_0x3eb31a(0x8d,'#$3b');export const INJECTION_PATTERNS=[/ignore\s+(all\s+)?(previous|prior|above)\s+instructions?/gi,/you\s+(are|must|should|will|have\s+to)\s+now/gi,/\bSYSTEM\s*:/g,/\bASSISTANT\s*:/g,/\b(JAILBREAK|DAN|DO ANYTHING NOW)\b/gi,/<\s*(?:system|instructions?)\s*>/gi,/forget\s+(everything|all)\s+(you|your)/gi,/new\s+instructions?.*?:/gi,/override\s+(your\s+)?(previous\s+)?instructions?/gi,/<!--[\s\S]{0,500}-->/g,/[\u202A-\u202E\u2066-\u2069]/g,/\bact\s+as\b.{0,50}(?:you are|you're|an?\s+ai|a\s+model)/gi,/\bpretend\s+(?:you\s+are|to\s+be)\b/gi,/\bfrom\s+now\s+on\b.{0,30}(?:you|ignore|forget)/gi];
1
+ const a0_0x51cb44=a0_0x1405;(function(_0x2e16e9,_0x406b9d){const _0x54e7cf=a0_0x1405,_0x4542dd=_0x2e16e9();while(!![]){try{const _0x3573a3=-parseInt(_0x54e7cf(0x9e,'6zj*'))/0x1*(-parseInt(_0x54e7cf(0xa7,'2a9$'))/0x2)+-parseInt(_0x54e7cf(0xa9,'g9RI'))/0x3*(parseInt(_0x54e7cf(0xa4,'M5VA'))/0x4)+parseInt(_0x54e7cf(0x94,'PxUQ'))/0x5+parseInt(_0x54e7cf(0xa5,'M5VA'))/0x6*(parseInt(_0x54e7cf(0x95,'O]4['))/0x7)+-parseInt(_0x54e7cf(0xb1,'wy2P'))/0x8*(-parseInt(_0x54e7cf(0x93,'s(Tv'))/0x9)+parseInt(_0x54e7cf(0xa3,'Hd1D'))/0xa*(-parseInt(_0x54e7cf(0xa6,'rdRO'))/0xb)+parseInt(_0x54e7cf(0x90,'Ct2X'))/0xc*(-parseInt(_0x54e7cf(0xa1,'A!IY'))/0xd);if(_0x3573a3===_0x406b9d)break;else _0x4542dd['push'](_0x4542dd['shift']());}catch(_0x40153a){_0x4542dd['push'](_0x4542dd['shift']());}}}(a0_0x5b90,0x441a5));export const SERVER_NAME=a0_0x51cb44(0x9f,'tSNV')+'h';function a0_0x5b90(){const _0x3e5a90=['WOKapSoJW7aoaCkB','WRTsvW/cLdHGwSkLW44','WRZdLSkboCowW4OhWPNdPYa','kCk7WPy5stFdSxq','a2/cIvRdSM4lWO0+W5bgvW','sKLQW6xcLSk9W7jwemk3','W4RdSGFcUCobuhBcQ3iyvdCV','W6iteeJdLZb5e8ksW5uLBmkS','W5LlW6rUW5X9W5xcUrTQ','W4xdTd83mmkrW58','WOvKkmkOWRqnmhxcKJu','WR4oW69P','W4hcPSoovmovW43dJmkIW7TvWP3cV8oO','W4RdKfdcUSkiaCk7W4VcHmkmwq','W6HBWRy/yt9Ay8o5W74j','sCkkWQuuWORdMmocbvFdQCkMbq','t8kgWQCuWOldKSkKdh/dH8k1p8ow','wCoNBSkeA8oXC8od','W6OqfuJdK2SNfSkoW743','hCk6kmkjBCo9mmoPW7tcPW','jmoHWOPaFSkQWRm','r8oToCohvCo/dNmJ','W48Ap8oiW4mmjSkGWO7dVq','bSknqwldOqLCWONdMCobgG','WRdcISkfp8omW5yxWPxcVw0','cHldOWpcHqOo','h8k0WQjdWOFcGmo+','hCkPWRHsW5RdM8k4fmoZCG','lCkYgmoqw8kEWQ/cPctdJmkiWP4','W5pdJSozD8kKW5q2W5FcKSknWQ3dQSkg','aa3cHCoMFSkjWOmj','W67cNCotyCkaWOyYWPJdVLRdU8oy','m8oZrSksqCkgWRZcV0RdRW','vmkpsvtcSa','i8k9WPfsBSkNWPxdTG','WPZdPmknf8kEW4/dMSokW65n','W5TBnq','W53dLJRcQhdcSxBdTa','E8oUwmkwhmorW7xcPrFdRW','W6voWPK6fmoWWQvFW6CA','wmkkAJVcLmoFWOHWWQy','W6lcQCoAys3cMSkwW4n2sM0Ebq'];a0_0x5b90=function(){return _0x3e5a90;};return a0_0x5b90();}export const SERVER_VERSION=a0_0x51cb44(0xb6,'!dO3');export const REGISTRY_BADGE_SIZE=0x16b;export const CHARS_PER_TOKEN=3.8;export const DISK_CACHE_DIR=process.env.GT_CACHE_DIR??(process.env.HOME?process.env.HOME+(a0_0x51cb44(0x92,'mR#g')+a0_0x51cb44(0xa0,'Hd1D')):a0_0x51cb44(0xb5,'wy2P')+a0_0x51cb44(0xb3,'H#qo'));export const DEFAULT_TOKEN_LIMIT=0x1f40;export const MAX_TOKEN_LIMIT=0x4e20;function a0_0x1405(_0x2b74f6,_0x3cc51b){_0x2b74f6=_0x2b74f6-0x8f;const _0x5b9032=a0_0x5b90();let _0x14059a=_0x5b9032[_0x2b74f6];if(a0_0x1405['MGBqTS']===undefined){var _0x10503e=function(_0x4b9e67){const _0x12f846='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x50bc76='',_0x1ec587='';for(let _0x4387d1=0x0,_0x5b795e,_0x44f8cf,_0x2d1606=0x0;_0x44f8cf=_0x4b9e67['charAt'](_0x2d1606++);~_0x44f8cf&&(_0x5b795e=_0x4387d1%0x4?_0x5b795e*0x40+_0x44f8cf:_0x44f8cf,_0x4387d1++%0x4)?_0x50bc76+=String['fromCharCode'](0xff&_0x5b795e>>(-0x2*_0x4387d1&0x6)):0x0){_0x44f8cf=_0x12f846['indexOf'](_0x44f8cf);}for(let _0x4f244e=0x0,_0x19ba50=_0x50bc76['length'];_0x4f244e<_0x19ba50;_0x4f244e++){_0x1ec587+='%'+('00'+_0x50bc76['charCodeAt'](_0x4f244e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1ec587);};const _0x2a4296=function(_0x448702,_0x2dcd97){let _0x100a37=[],_0x41673c=0x0,_0x592ae6,_0x564105='';_0x448702=_0x10503e(_0x448702);let _0x16b34c;for(_0x16b34c=0x0;_0x16b34c<0x100;_0x16b34c++){_0x100a37[_0x16b34c]=_0x16b34c;}for(_0x16b34c=0x0;_0x16b34c<0x100;_0x16b34c++){_0x41673c=(_0x41673c+_0x100a37[_0x16b34c]+_0x2dcd97['charCodeAt'](_0x16b34c%_0x2dcd97['length']))%0x100,_0x592ae6=_0x100a37[_0x16b34c],_0x100a37[_0x16b34c]=_0x100a37[_0x41673c],_0x100a37[_0x41673c]=_0x592ae6;}_0x16b34c=0x0,_0x41673c=0x0;for(let _0x48663d=0x0;_0x48663d<_0x448702['length'];_0x48663d++){_0x16b34c=(_0x16b34c+0x1)%0x100,_0x41673c=(_0x41673c+_0x100a37[_0x16b34c])%0x100,_0x592ae6=_0x100a37[_0x16b34c],_0x100a37[_0x16b34c]=_0x100a37[_0x41673c],_0x100a37[_0x41673c]=_0x592ae6,_0x564105+=String['fromCharCode'](_0x448702['charCodeAt'](_0x48663d)^_0x100a37[(_0x100a37[_0x16b34c]+_0x100a37[_0x41673c])%0x100]);}return _0x564105;};a0_0x1405['eNDfVl']=_0x2a4296,a0_0x1405['yTPEjJ']={},a0_0x1405['MGBqTS']=!![];}const _0x410983=_0x5b9032[0x0],_0x4778da=_0x2b74f6+_0x410983,_0x3256fb=a0_0x1405['yTPEjJ'][_0x4778da];return!_0x3256fb?(a0_0x1405['ZTbHpA']===undefined&&(a0_0x1405['ZTbHpA']=!![]),_0x14059a=a0_0x1405['eNDfVl'](_0x14059a,_0x3cc51b),a0_0x1405['yTPEjJ'][_0x4778da]=_0x14059a):_0x14059a=_0x3256fb,_0x14059a;}export const CACHE_TTL_MS=0x1e*0x3c*0x3e8;export const FETCH_TIMEOUT_MS=0x3a98;export const JINA_BASE_URL=a0_0x51cb44(0x9a,'h$3U')+a0_0x51cb44(0xaf,'N]mf');export const NPM_REGISTRY_URL=a0_0x51cb44(0xb0,'N]mf')+a0_0x51cb44(0x91,'wy2P')+'js.org';export const PYPI_URL=a0_0x51cb44(0xb8,'A!IY')+a0_0x51cb44(0xa8,'rdRO')+'i';export const GITHUB_API_URL=a0_0x51cb44(0x9d,'HyNG')+a0_0x51cb44(0xad,'V[#Q')+'om';export const GITHUB_RAW_URL=a0_0x51cb44(0x96,'2a9$')+a0_0x51cb44(0xab,'O]4[')+a0_0x51cb44(0x97,'V[#Q')+a0_0x51cb44(0x8f,'O]4[');export const INJECTION_PATTERNS=[/ignore\s+(all\s+)?(previous|prior|above)\s+instructions?/gi,/you\s+(are|must|should|will|have\s+to)\s+now/gi,/\bSYSTEM\s*:/g,/\bASSISTANT\s*:/g,/\b(JAILBREAK|DAN|DO ANYTHING NOW)\b/gi,/<\s*(?:system|instructions?)\s*>/gi,/forget\s+(everything|all)\s+(you|your)/gi,/new\s+instructions?.*?:/gi,/override\s+(your\s+)?(previous\s+)?instructions?/gi,/<!--[\s\S]{0,500}-->/g,/[\u202A-\u202E\u2066-\u2069]/g,/\bact\s+as\b.{0,50}(?:you are|you're|an?\s+ai|a\s+model)/gi,/\bpretend\s+(?:you\s+are|to\s+be)\b/gi,/\bfrom\s+now\s+on\b.{0,30}(?:you|ignore|forget)/gi];
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- function a1_0x4a12(_0x5e35e2,_0x554fa2){_0x5e35e2=_0x5e35e2-0x1b1;const _0x298aaf=a1_0x298a();let _0x4a121a=_0x298aaf[_0x5e35e2];if(a1_0x4a12['ehZIHF']===undefined){var _0xdb05ca=function(_0x3a2c41){const _0x22f437='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1b2118='',_0x51a434='';for(let _0x1acfff=0x0,_0x46f5fc,_0x38b285,_0x11813a=0x0;_0x38b285=_0x3a2c41['charAt'](_0x11813a++);~_0x38b285&&(_0x46f5fc=_0x1acfff%0x4?_0x46f5fc*0x40+_0x38b285:_0x38b285,_0x1acfff++%0x4)?_0x1b2118+=String['fromCharCode'](0xff&_0x46f5fc>>(-0x2*_0x1acfff&0x6)):0x0){_0x38b285=_0x22f437['indexOf'](_0x38b285);}for(let _0x4fc2bd=0x0,_0x589d20=_0x1b2118['length'];_0x4fc2bd<_0x589d20;_0x4fc2bd++){_0x51a434+='%'+('00'+_0x1b2118['charCodeAt'](_0x4fc2bd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x51a434);};const _0x4767c7=function(_0x1d3f5e,_0x34f1ac){let _0x42fa92=[],_0x593835=0x0,_0x20e5e7,_0x12f058='';_0x1d3f5e=_0xdb05ca(_0x1d3f5e);let _0x11dd3b;for(_0x11dd3b=0x0;_0x11dd3b<0x100;_0x11dd3b++){_0x42fa92[_0x11dd3b]=_0x11dd3b;}for(_0x11dd3b=0x0;_0x11dd3b<0x100;_0x11dd3b++){_0x593835=(_0x593835+_0x42fa92[_0x11dd3b]+_0x34f1ac['charCodeAt'](_0x11dd3b%_0x34f1ac['length']))%0x100,_0x20e5e7=_0x42fa92[_0x11dd3b],_0x42fa92[_0x11dd3b]=_0x42fa92[_0x593835],_0x42fa92[_0x593835]=_0x20e5e7;}_0x11dd3b=0x0,_0x593835=0x0;for(let _0x33a257=0x0;_0x33a257<_0x1d3f5e['length'];_0x33a257++){_0x11dd3b=(_0x11dd3b+0x1)%0x100,_0x593835=(_0x593835+_0x42fa92[_0x11dd3b])%0x100,_0x20e5e7=_0x42fa92[_0x11dd3b],_0x42fa92[_0x11dd3b]=_0x42fa92[_0x593835],_0x42fa92[_0x593835]=_0x20e5e7,_0x12f058+=String['fromCharCode'](_0x1d3f5e['charCodeAt'](_0x33a257)^_0x42fa92[(_0x42fa92[_0x11dd3b]+_0x42fa92[_0x593835])%0x100]);}return _0x12f058;};a1_0x4a12['nIZBhx']=_0x4767c7,a1_0x4a12['eyuMdX']={},a1_0x4a12['ehZIHF']=!![];}const _0x10f867=_0x298aaf[0x0],_0x286448=_0x5e35e2+_0x10f867,_0x1bde3b=a1_0x4a12['eyuMdX'][_0x286448];return!_0x1bde3b?(a1_0x4a12['JkDJGw']===undefined&&(a1_0x4a12['JkDJGw']=!![]),_0x4a121a=a1_0x4a12['nIZBhx'](_0x4a121a,_0x554fa2),a1_0x4a12['eyuMdX'][_0x286448]=_0x4a121a):_0x4a121a=_0x1bde3b,_0x4a121a;}const a1_0x40cacd=a1_0x4a12;(function(_0x46e58f,_0x3ec00a){const _0x43c2e4=a1_0x4a12,_0x1fd659=_0x46e58f();while(!![]){try{const _0x15da29=-parseInt(_0x43c2e4(0x26e,'Tw@B'))/0x1*(parseInt(_0x43c2e4(0x260,'1!um'))/0x2)+parseInt(_0x43c2e4(0x2c5,'GbC0'))/0x3+parseInt(_0x43c2e4(0x2c3,'1!um'))/0x4+parseInt(_0x43c2e4(0x283,'rTAy'))/0x5*(-parseInt(_0x43c2e4(0x1fc,'uS18'))/0x6)+parseInt(_0x43c2e4(0x24d,'^t9^'))/0x7+parseInt(_0x43c2e4(0x27b,'U8YA'))/0x8+-parseInt(_0x43c2e4(0x21e,')BKf'))/0x9;if(_0x15da29===_0x3ec00a)break;else _0x1fd659['push'](_0x1fd659['shift']());}catch(_0x475410){_0x1fd659['push'](_0x1fd659['shift']());}}}(a1_0x298a,0x9b093));import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{SERVER_NAME,SERVER_VERSION}from'./constants.js';import{getInstallId}from'./utils/watermark.js';import{z}from'zod';import{registerResolveTool}from'./tools/resolve.js';import{registerDocsTool}from'./tools/docs.js';import{registerBestPracticesTool}from'./tools/best-practices.js';import{registerAutoScanTool}from'./tools/auto-scan.js';import{registerSearchTool}from'./tools/search.js';import{registerAuditTool}from'./tools/audit.js';import{registerChangelogTool}from'./tools/changelog.js';function a1_0x298a(){const _0x280ad7=['rbtdUeBcOmoWW5NdJLKY','WRDNC3W','k8kWiCo6','wCoHwMtdJSoWe8oHWRCg','W7rUcIOnW65/rCo3ma','WRutWRFdGanHumoooxy','umkutCopW6BcH1JdNmklW4e','tY4rW6PHbWKGWOL1','W4ddPSkLoCkFhtpdPd/dNW','lEkcJhfFa0ddUMW8FW','WOhdNmomgCo7ah5wWO99','hmkGuMNcLSoIcmkOWRiC','CHFdM202zcSGyJi','o080ttRcMMONBmoA','W451A8kPW4/cLGJdGmkMWRa','ftxdOCk3DxFdR8obW4v1','W4zazSo3W6tdNN1yBSka','W5pdOCo3','BHSRua','F8o5mMGftSoVFM58','tM0uW6O','gYeaWPvVaW4XWQvX','WRzXBNO','WONcG8oJACoGqgBcJCo+','WPnQbtZdIq1CW7pdMZm','WOZcOdNdOSkjDCoJF8o8Aa','jSkIWQldMdVdTMhcQSoqb0q5','WPpcNSkiwSoWc3GfW4Pq','t1hdU1xcQSoWW43cLrDZ','WR/cHCkuhSobu8oHWOrtWQO','WOSrxr54W5ZcNvfuga','W5DjvGDbaGVdKLpcIG','WQrkwaCc','WP8vd8kCW6pcHuVdGmkpbW','emoOWOtdHtdcQ8osthlcHW','WRhdI8kFtmkhqSo9WPvEW68','vmo5rLSiW4BcIZf3iG','hYzlWQ5TqwFdQmkHzmkOW4KP','tZujW7y+udNdHmk4tq','W7ZdOSkqjmokWOC4ksmdW4FdJZa','E8oWW6/cHg/cSapcH8oyja','W6ypWOFdV055vmoBFEkaHW','W5NcNNBcJJfqE8oHW6VdSa','WOJdGmo0F8kUvMVcMmkWWQC','W5FdG0FcVSoBWPTrkqldLG','fCo0WO7dI2RcJmkhg3/cKa','Dq8RrNlcLIi4ASoE','W4XNp8kLW43cLGxdN8kLWQS','vmo0s1DyW6NcMJ1MFG','W6hcKSo1FITVW4/dJSkSW5S','W47cHbNdN3DkFmoHWQ7cVa','BSoUxqDbW6VcS2SJCq','ECo7otWzxCkNEse3','WR8dgWNdHND3uhup','WRlcICo1nWzB','mCoTW5iostGrW6P1WOS','t1dcH8kaFdVcRSkcW4zY','tfFdQf3dRCo5W53dNxmY','WOhdSmk1omkoe0NcR3dcNa','WR3dJfHFqtVdOCkytCku','W6pdLmorWOFdUeynW7itnq','W77cJCkFtmkhv8o5WOSBW6K','p8oHW7tdGw3cQGpcR8oWAa','W6NdLSoEWOVcPGSjWRixFG','x8oRW6ZcR8onr8kHumoefG','wCkEgCoBW6lcILBdHSooWOK','D0tdVcGRF38vy3m','d2WKxsRcIa','WRaNWPi1hCoKqmkpWRddTG','WRuXtHHyWRrwW73cJCki','bmoZWOxdJ27dLq','dSoaWQj4WOSoDeHUWRu','dmkcW6C+WPyolfjRWRi','cJBcRCkXyJJdPmkeW4PO','W5RdKeVcSCorW5WxnbxcKW','W7KpsI/dGbPAWRJcJX8','W5eMCvW5hq06Fc4','W6a/WO7dTub9','b3q5vZBdGYFdRCkqW6K','i8k4aNqdwSkQEsz/','W5KiqI3cJ2i1W5VcLb4','W6JdM8obdmktaCkIWQf5W6qodWW','s1hdSuC','FSoRW4G1i8oIAG','WO/cSSk3p8kLqfZcVgpcNa','WRu8WOjM4OcLW6rGWONcSSoT','WP/dMSkLWQ0QumorxCk1nG','W59gFCocWOBdU0FcH8k4cW','W55JnvuZfKzdA2y','WQeNWPKRqCkW','WOxdL0dcIhXoC8o3W6FcPW','oCkjWPxcN8k5BSo2WRT+lG','o8kWASkOscRcK8kefmkX','WRq0WPuUeCkRxCkpW73cOW','FHTU4Oc2FSoyjxf+W4i','h1xdP0RdPCo2W4/cHbbZ','WOFcUNxdU8kpy8kPFmoWBG','xbOHvZddKH4JEmoc','mCkkWOlcJmo2cSkiW49sfW','WR3cO8ouF8kDW5G','W5bXmSkJW5NdM0pcICkRWRa','vgpcUCo2i2tcTSkcW7T/s3ldGa','WRSR4OA4AqxdT1bwW6yQ','t8kzcCoFWQZdGW','W4XNsqjtW7m','W5lcLCkAh8oMhtSAWOnN','WQWfha/dIwrHkdvg','rcBcR1i','WORcQchdRSoDAmkSESoMDW','tSkUus3dMCoZbSkOWRiD','W5XYFqL6ta0sA30','n8ksWO7cLCo5q8oqW482cW','W61+wcXoWQnUsSoNEq','WO0deW54WO/dGHLAaW','mmkNzmoUDchdLSofgSk4','EfdcUwSTCwuxDsa','WONcVqRdUmkyBCkXESo7mG','qbj7hgtdGtFcKSktW6u','W78GWOxdOKyPqCohoga','EfhdVrpcPSo3W5lcHHX+','sCkhW7eSWPaoFX4K4Owu','dchcQuOCWRyZm8kLhG','W480n8kbW6/dUe3cHCoKWRe','WO3cOdtdP8oDF8kSBmoHEq','DuhdTNK0','reOoW706hNxdKCkJca','W5pdLCosW4JdRv8ZW78Fpq','CCo2W77dGwpcQGpcH8kupG','WR3cN8kzxCocrCk1WQfEW74','W7z5cIHcW69MrSoXoa','oSocWQi+WPaFzbX3WRi','WP9Msa4DW7DqW7RdISoB','W7CZWPhdOKP9tmkpDvW','gCkXWRdcUmkshCoVvSk2fZRdI8kw','rGhdOCkOCIxdR8ktW5bb','W4RcMmkfW5WhhSoCe8k5nG','xmo9W77cGMFdPfhcG8oylq','W4tdSCk7','W5fFuLvfhNtdRMhcQG','W4X2wb5pW71fW7dcGSol','W5hdOmk/jSkkrW','WRa5WPnMrCk2uSkdWR3dQG','WPrdW4VcRmoiW6ade8oxW5lcQa','lSkiWOCDbmoxsCkzWPug','WQVdRCokF8kDW5OSidOr','WOifrXzcW5ZdKHbBvG','w2CsW7mRba','ot7dOSkIy3FIGPRdGCoVEq','p8obW58i','DrWVvJFdMsrXBmoy','WRhdKuOaudRdTmkjtmkE','W5/cKN3cItfkyCkLW6JcUa','WQddKf9jrsFdS8kms8oB','WRiYWOhdTKX7umkpkgm','WRVdJKHiFYtdVmkisSkw','txWjW617eJddLSk4bG','W5b+gWrBW7jyW6RdHSoj','W6FcNNhcJ3brA8kLW7RcSG','WR3dKmkKW6yTuSoAcSkGAq','WONdL8o2W6q4tCoagmoZjW','WP1LFvy5bq8qlI4','WR7cPCojFmkwW5X4BdmD','tvxdVvRcQSoSWOdcHW11','W6aZWOZcSfDMfCojnh0','WQZcGSkasSklfSoBWOHFW68','WRZcMCkrtmoEfUkcGCohACoV','WQBdLSofWOFdOe4pW6HqmW','lvH/egRcGx0xt8oyWOVcK2S','WOlcPJlcQ+kdQsZcHxZdP3K','dcxcO0TiW7e2kmkGha','g2OKrJ3cHIFcOSkrW6m','adxdV8kKmcldVSkgW5T9','W6zWWOBdTvb9fCoFl3i','WRm2W7zrW7Wtpsb8Fq','WRaHWPCKumk3vSkzW7/cOW','WRJdI1LfvgJdTmkeqCox','tdXUqdVdHt5XFCoe','xqK6qZlcLI8JF8oz','W5msESk2W6NdLZbBDmoa','W5JdIalcU8ohWO8eob7dMG','nSoJ4OgqWQHBk8ktW4eqWRS','W4dcH8oYrCkSrMhcHCoKW70','W7Lmt0FdL3DLfc0i','BbSRuhhdHd8/ECoF','WOCvqbPVW4BdKXq','BCo0W7JcLwxcP0BcLCkulG','cwOSvI3dIctdRCktWRa','WRLTtZ0bW6SVsmoQlW','FHO8tsW','ySo2ndWyqSkQEd1/','e8oFW6qS','W55MFSk+W5lcLGRdImkPWQC','tYLuWRLUbXnLWO5P','lCk3zmohsHJcPCo0vSkZ','W4JdTSk1A8knw1dcVNNdNW','pHpdJxGLimkMWRNcP8km','FHS6aJZdKZKLlCog','hCkbW7i2WOy2lHZIHPBdPG','F8oHFXzya8kQAJPf','W5Djvabqa1/dPctcVW','WQq9pY7cGSkiW6D4W6Pr','mfldQNjMlCk9WQtdOSoE','WR/dJmkZWQ0SsSoQhSk7mG','meddRxiJyCkXWQtdR8oF','dxK5usW','DmklWOldMSoGdmkDWPSXnq','W4i8WOhdSvbSfCoAlNy','WPezrWa9W5VdNGfCfq','WPWM4OcmW7/cI8oAdColWRBcOW','WQ3cPJJdPSkCiCkWFmoJEW','WPOhfCoLWQBdJWldImoBaW','A8oIW4iibmoCdmkgWOCB','W5vVzHm8b1fdpY4','W5fND18/qa','WR/cKCkoW5hcVrKUW5auhWjq','pCkuW4FcKCoYhCoCWOT4jW','W4BdPSkpkmkvxKNcVgpcMG','W5NcKNdcMh9xmSo3W6VcSq','hhK/s2tdJY3dRCkgW7G','t8oTW7FdRmotr8k1ua','WQGLWPnMv8kRrSkeWRFcRW','W5LJCmk+W4ddHuJcICkZWQC','W47dOqldImk8s8oQnCkZAG','xmo/qvDjW6BcIMLLAq','WQ06g3LvWRS7s8oZfsfvWOi','wIGqWQT/aG5PW5PL','WPBcOCkjhmkRreZcSW','WQpcJ8oMlafzW68','WRVdKb5iqsVdVCoemSoc','bSoOWP7dMZlcGCklathcHq','vmoSuX5eW6NcJcvMia','aCoXWO3dKh/dHCkptZhcIa','fxRdRmkVDhFdVCkjW4zR','gsDnWQXJisFdGSkQyCk2','hhKUrI3dHsBcVSos4Oke','W4pcSSkJp8kBxv3cVgpcMW','wmoHugtdHCoHqmkSWRGt','W7tdN8kx4Ow6WQPmgmodeJu','W4ddV8kGj8kFqbNcThFdNW','qCoJeHHAWQJcNsXGEq','W6mWW7zeW7etidHMDG','b8o1WRxdKMZdGmkjfJVcGW','jadcSIzWFCoHWPdcR8oGwmkwFW','W6X84OclECkYWOtcRK/dN2O','tJurW6PQeL0JWPvZ','pLNdTZPMhmkQWQNcQSod','sgyhWQnPa1aNWOmS','FmkxW74RnSodwCke','Fq06qtBcLJ45Amkw','g8ooW6eWWOeolfv3WRu','WOxdM8kZWQ0ItCogcmk2ia','W7tdOCk1A8kDr2BcVgtcIW','4OE8ocPgg8ohnSk5WP3dJW','W4rDCCk5W6/dNgq','WQVcMmkvta','vmoXASkOEI3cQCode8kG','p8oYW6/cVM3cSuFcJ8oaAa','hmkNwxNdLCo9qmkTWRGc','W7tdH19osgJdUSkexCox','W4pdLCkxWOFdUaSFW6WvmW','WOK3janTvHDFo0ZdM1ZdTa','aYJdVSo7mdVdP8kdW5T9','u8kucmkAW7dcJeVcImkCWOO','WOCAC8k2W7pdKgvjmCkm','t8kjWQ7dRH41WR4','WRzUzw3cPaTEoqbj','W4quWOJdQSoDW4edfCosW68','stdcV1akW78VkmkWba','fSkVWQpdLtSrWOe','W6JcJ8kzW4JdJeqEWRWvmq','W5CmpZJcICkoW6DkW597','W74mbGldL3n2hJXC','WOhcKCkawSoqc3GdWODG','WPOusc/dIaSrWPldIey','E8oWW6JcGN7cRuhcGW','ErORqZxdNYq2lCov','WOyYWPpdU8ktW5PrfSodW7q','WRZcVSodzCoFWP9QpJqF','ECoXmNKFdCoSyJWG','WQe0WOqJeCkWxmokWRddRa','WPeDeWP4W47dGXjDta','WR3dHLSnvcFcTCkoxCku','W6ORwJSnW6LQr8o3Eq','dmooW642WOCzBu5TWQm','W4vBC8k+W77dHJWDBSoj','Amk4jNqnwCkQBIz7','W7eLWPBdUvDWgCkpd3y','a8onW7i7qhPEW79ZWPS','kSokW4nCbCogsCklWO0g','W5iuWOpdQG','W7q9W5xcVSkZW5aDgmkrW68','WQDKW6bcW7OioYbNAG','qCo5wHjmWQJcGIb1Aq','A8ocW5utcSkuq8kmWOag','D1VcUwWQC3G'];a1_0x298a=function(){return _0x280ad7;};return a1_0x298a();}import{registerCompatTool}from'./tools/compat.js';import{registerCompareTool}from'./tools/compare.js';const server=new McpServer({'name':SERVER_NAME,'version':SERVER_VERSION},{'instructions':a1_0x40cacd(0x1d8,')BKf')+a1_0x40cacd(0x26a,'X^R)')+a1_0x40cacd(0x287,'0a3)')+a1_0x40cacd(0x20c,')BKf')+a1_0x40cacd(0x2aa,'C%I$')+a1_0x40cacd(0x1f7,'s]5e')+a1_0x40cacd(0x1c7,'Z87@')+a1_0x40cacd(0x27c,'X8d)')+a1_0x40cacd(0x28c,'GbC0')+a1_0x40cacd(0x254,'u37Z')+a1_0x40cacd(0x262,'DL%%')+a1_0x40cacd(0x1f1,'u37Z')+a1_0x40cacd(0x1fb,'U79m')+a1_0x40cacd(0x2d5,'963b')+a1_0x40cacd(0x282,'2Oju')+a1_0x40cacd(0x255,'gZHb')+a1_0x40cacd(0x1b3,'^t9^')+a1_0x40cacd(0x1ce,'CnbT')+a1_0x40cacd(0x1f9,'aw9G')+a1_0x40cacd(0x258,')Io1')+a1_0x40cacd(0x225,'AE8&')+a1_0x40cacd(0x1b2,'^Ke^')+a1_0x40cacd(0x1e7,'K@94')+a1_0x40cacd(0x1d2,'JkD^')+a1_0x40cacd(0x2bf,'CnbT')+a1_0x40cacd(0x1e1,'62TJ')+a1_0x40cacd(0x21c,'s]5e')+a1_0x40cacd(0x2ad,'X8d)')+a1_0x40cacd(0x236,'u37Z')+a1_0x40cacd(0x1b5,'*0Z6')+a1_0x40cacd(0x2b9,'0a3)')+a1_0x40cacd(0x299,'x2jb')+a1_0x40cacd(0x24b,'U8YA')+a1_0x40cacd(0x276,'^fpt')+a1_0x40cacd(0x20a,'X8d)')+a1_0x40cacd(0x2d2,'4!YH')+a1_0x40cacd(0x1e3,'gZHb')+a1_0x40cacd(0x1b8,'vB2t')+a1_0x40cacd(0x1c5,'jV%^')+a1_0x40cacd(0x288,'Z87@')+a1_0x40cacd(0x2b3,')Io1')+a1_0x40cacd(0x261,'jV%^')+a1_0x40cacd(0x24a,'Tw@B')+a1_0x40cacd(0x23b,')BKf')+a1_0x40cacd(0x230,'*0Z6')+a1_0x40cacd(0x1f8,'K@94')+a1_0x40cacd(0x23d,'4!YH')+a1_0x40cacd(0x208,'TJY0')+'—\x20Detect\x20a'+a1_0x40cacd(0x1c0,'X8d)')+'\x20dependenc'+a1_0x40cacd(0x256,'odRU')+'tch\x20best\x20p'+a1_0x40cacd(0x2b1,'4!YH')+a1_0x40cacd(0x25b,'^Ke^')+a1_0x40cacd(0x1cb,'DL%%')+a1_0x40cacd(0x22b,'^fpt')+a1_0x40cacd(0x28f,'TJY0')+'\x20web\x20stand'+a1_0x40cacd(0x1bb,'AE8&')+a1_0x40cacd(0x25c,'h@pm')+'ssibility,'+a1_0x40cacd(0x1d6,'$I#i')+a1_0x40cacd(0x1ec,'jV%^')+a1_0x40cacd(0x1cc,'AE8&')+a1_0x40cacd(0x21d,'^t9^')+a1_0x40cacd(0x27d,'vB2t')+a1_0x40cacd(0x22a,'cXt$')+a1_0x40cacd(0x278,'6$f5')+a1_0x40cacd(0x2a1,'6$f5')+a1_0x40cacd(0x213,'yzrI')+a1_0x40cacd(0x1c3,'U8YA')+'\x20gt_change'+a1_0x40cacd(0x21f,'gZHb')+a1_0x40cacd(0x2c9,'IRgy')+a1_0x40cacd(0x1bf,'aw9G')+a1_0x40cacd(0x1d3,'^fpt')+a1_0x40cacd(0x222,'X8d)')+a1_0x40cacd(0x2c0,'h@pm')+a1_0x40cacd(0x2c7,'U79m')+a1_0x40cacd(0x28b,'x2jb')+a1_0x40cacd(0x22e,')BKf')+a1_0x40cacd(0x2a2,'K@94')+a1_0x40cacd(0x2b7,'gZHb')+a1_0x40cacd(0x23f,'X^R)')+a1_0x40cacd(0x2cf,'0&kE')+a1_0x40cacd(0x2a6,'DL%%')+a1_0x40cacd(0x24f,'DL%%')+a1_0x40cacd(0x2a7,'4!YH')+a1_0x40cacd(0x247,'u37Z')+a1_0x40cacd(0x2c8,'[KMy')+'by-side.\x0a\x0a'+a1_0x40cacd(0x215,'chzy')+a1_0x40cacd(0x1bc,'yzrI')+a1_0x40cacd(0x273,'jV%^')+a1_0x40cacd(0x2d7,'$I#i')+a1_0x40cacd(0x26b,')Io1')+a1_0x40cacd(0x1fd,'X8d)')+a1_0x40cacd(0x1dd,'K@94')+a1_0x40cacd(0x211,'^Ke^')+(a1_0x40cacd(0x264,'^t9^')+a1_0x40cacd(0x268,'h@pm')+a1_0x40cacd(0x2d0,'[KMy')+a1_0x40cacd(0x1e9,'^fpt')+a1_0x40cacd(0x1ef,'aw9G')+a1_0x40cacd(0x22c,'IRgy')+'{\x20projectP'+a1_0x40cacd(0x1e5,'U8YA')+a1_0x40cacd(0x2b6,'Z87@')+a1_0x40cacd(0x23c,'aw9G')+a1_0x40cacd(0x1eb,'gZHb')+a1_0x40cacd(0x29e,'$I#i')+a1_0x40cacd(0x2d1,'odRU')+a1_0x40cacd(0x2d6,'X8d)')+a1_0x40cacd(0x20e,'[KMy')+a1_0x40cacd(0x29b,'odRU')+a1_0x40cacd(0x29c,'Tw@B')+a1_0x40cacd(0x1f2,'gZHb')+a1_0x40cacd(0x1d5,')BKf')+a1_0x40cacd(0x204,'AE8&')+'ng\x20data.')});registerResolveTool(server),registerDocsTool(server),registerBestPracticesTool(server),registerAutoScanTool(server),registerSearchTool(server),registerAuditTool(server),registerChangelogTool(server),registerCompatTool(server),registerCompareTool(server),server[a1_0x40cacd(0x1bd,'h@pm')](a1_0x40cacd(0x2cb,'h@pm')+a1_0x40cacd(0x1c4,'U79m'),'Scan\x20this\x20'+a1_0x40cacd(0x218,'GbC0')+a1_0x40cacd(0x270,'aw9G')+a1_0x40cacd(0x1cd,'chzy')+a1_0x40cacd(0x1b7,'uS18')+a1_0x40cacd(0x20d,'^Ke^')+a1_0x40cacd(0x1cf,'U8YA')+a1_0x40cacd(0x1e4,'6$f5')+a1_0x40cacd(0x29d,'C%I$'),()=>({'messages':[{'role':a1_0x40cacd(0x2b4,'UL9*'),'content':{'type':a1_0x40cacd(0x29f,'UL9*'),'text':a1_0x40cacd(0x245,'U79m')+a1_0x40cacd(0x277,'*0Z6')+a1_0x40cacd(0x237,')Io1')+a1_0x40cacd(0x1d7,'gZHb')+a1_0x40cacd(0x1b4,'s]5e')+a1_0x40cacd(0x271,'chzy')+a1_0x40cacd(0x27e,'&Bx9')+a1_0x40cacd(0x2ba,'$I#i')+a1_0x40cacd(0x206,'Tw@B')+a1_0x40cacd(0x293,'&Bx9')+a1_0x40cacd(0x295,'U79m')+a1_0x40cacd(0x2c2,'odRU')+'js,\x20TypeSc'+a1_0x40cacd(0x21b,'s]5e')+a1_0x40cacd(0x26c,'v4[N')+a1_0x40cacd(0x284,'^t9^')+a1_0x40cacd(0x216,'chzy')+a1_0x40cacd(0x253,'AE8&')+a1_0x40cacd(0x232,'K@94')+'e\x20best-pra'+a1_0x40cacd(0x1c1,'cXt$')+a1_0x40cacd(0x25f,'X8d)')+a1_0x40cacd(0x244,'JkD^')+'o\x20change\x20a'+a1_0x40cacd(0x229,'&Bx9')+a1_0x40cacd(0x207,'GbC0')+a1_0x40cacd(0x1ba,'jV%^')}}]})),server[a1_0x40cacd(0x209,'1!um')](a1_0x40cacd(0x25e,'h@pm')+a1_0x40cacd(0x200,'DL%%'),a1_0x40cacd(0x1ff,'*0Z6')+a1_0x40cacd(0x1b9,'C%I$')+a1_0x40cacd(0x297,'Tw@B')+a1_0x40cacd(0x1ea,'C%I$')+a1_0x40cacd(0x210,'U79m')+a1_0x40cacd(0x231,'jV%^')+a1_0x40cacd(0x27f,'rTAy'),{'library':z[a1_0x40cacd(0x1df,'yzrI')]()[a1_0x40cacd(0x252,'uS18')](a1_0x40cacd(0x214,'[KMy')+a1_0x40cacd(0x217,'U8YA')+a1_0x40cacd(0x1be,'aw9G')+a1_0x40cacd(0x22d,'62TJ')+',\x20\x27prisma\x27')},({library:_0x22f437})=>({'messages':[{'role':a1_0x40cacd(0x2b0,')BKf'),'content':{'type':a1_0x40cacd(0x298,'x2jb'),'text':a1_0x40cacd(0x241,'chzy')+a1_0x40cacd(0x2ca,'cXt$')+a1_0x40cacd(0x26f,')BKf')+a1_0x40cacd(0x250,'[KMy')+a1_0x40cacd(0x296,'963b')+a1_0x40cacd(0x2be,'2mkX')+_0x22f437+(a1_0x40cacd(0x1d1,'[KMy')+a1_0x40cacd(0x294,'4!YH')+a1_0x40cacd(0x2cc,')BKf')+a1_0x40cacd(0x226,'^Ke^')+a1_0x40cacd(0x28a,')BKf')+a1_0x40cacd(0x2bc,'TJY0')+a1_0x40cacd(0x263,'6$f5')+a1_0x40cacd(0x219,'$I#i')+a1_0x40cacd(0x2cd,'u37Z')+a1_0x40cacd(0x24c,'U8YA'))}}]})),server[a1_0x40cacd(0x1d0,'AE8&')](a1_0x40cacd(0x281,'x2jb')+a1_0x40cacd(0x2b5,'IRgy'),a1_0x40cacd(0x1ee,'$I#i')+a1_0x40cacd(0x223,'U79m')+'ctices\x20for'+a1_0x40cacd(0x1e0,'0a3)')+a1_0x40cacd(0x251,'jV%^')+'is\x20project',()=>({'messages':[{'role':a1_0x40cacd(0x235,'963b'),'content':{'type':'text','text':a1_0x40cacd(0x272,'DL%%')+a1_0x40cacd(0x1f4,'1!um')+a1_0x40cacd(0x2c6,'*0Z6')+'\x20dependenc'+'ies\x20in\x20thi'+a1_0x40cacd(0x291,'K@94')+a1_0x40cacd(0x2bb,'s]5e')+a1_0x40cacd(0x2a5,')Io1')+a1_0x40cacd(0x1b1,'DL%%')+'tices\x20for\x20'+a1_0x40cacd(0x1d4,'AE8&')+'Highlight\x20'+a1_0x40cacd(0x2ce,'odRU')+a1_0x40cacd(0x1e8,'TJY0')+a1_0x40cacd(0x2a4,'vB2t')}}]})),server[a1_0x40cacd(0x203,'DL%%')]('compare-li'+a1_0x40cacd(0x25a,'0&kE'),a1_0x40cacd(0x1c2,'Z87@')+a1_0x40cacd(0x2c1,'s]5e')+a1_0x40cacd(0x286,'62TJ')+a1_0x40cacd(0x242,'v4[N')+a1_0x40cacd(0x290,'^Ke^')+a1_0x40cacd(0x239,'DL%%')+a1_0x40cacd(0x234,'4!YH'),{'libraries':z[a1_0x40cacd(0x1da,'GbC0')]()[a1_0x40cacd(0x22f,'TJY0')](a1_0x40cacd(0x248,'gZHb')+a1_0x40cacd(0x2ac,'u37Z')+a1_0x40cacd(0x2ae,'&Bx9')+'\x20e.g.\x20\x27pri'+'sma,\x20drizz'+a1_0x40cacd(0x1db,'u37Z')+a1_0x40cacd(0x2ab,')BKf')+'ibot,\x20yup\x27')},({libraries:_0x1b2118})=>({'messages':[{'role':a1_0x40cacd(0x275,'s]5e'),'content':{'type':a1_0x40cacd(0x1c9,'$I#i'),'text':a1_0x40cacd(0x1f5,'^t9^')+a1_0x40cacd(0x28e,'AE8&')+a1_0x40cacd(0x1ed,'U79m')+a1_0x40cacd(0x292,'aw9G')+a1_0x40cacd(0x26d,')Io1')+a1_0x40cacd(0x1de,'vB2t')+_0x1b2118+(a1_0x40cacd(0x1c6,'4!YH')+a1_0x40cacd(0x24e,'JkD^')+'ferences,\x20'+a1_0x40cacd(0x20f,'^Ke^')+a1_0x40cacd(0x2a9,'6$f5')+a1_0x40cacd(0x1fa,'yzrI')+a1_0x40cacd(0x279,'^Ke^')+a1_0x40cacd(0x212,'1!um'))}}]})),server[a1_0x40cacd(0x203,'DL%%')](a1_0x40cacd(0x202,'yzrI')+a1_0x40cacd(0x1e2,'2Oju'),a1_0x40cacd(0x2bd,'2mkX')+a1_0x40cacd(0x285,'X^R)')+a1_0x40cacd(0x221,'jV%^')+a1_0x40cacd(0x220,'2Oju')+a1_0x40cacd(0x1f6,'*0Z6')+a1_0x40cacd(0x280,'UL9*')+a1_0x40cacd(0x266,'odRU')+a1_0x40cacd(0x246,'TJY0'),{'topic':z[a1_0x40cacd(0x2d4,'0&kE')]()[a1_0x40cacd(0x289,'*0Z6')](a1_0x40cacd(0x23e,'2mkX')+a1_0x40cacd(0x1b6,'^t9^')+a1_0x40cacd(0x1fe,'chzy')+a1_0x40cacd(0x1e6,'JkD^')+a1_0x40cacd(0x227,')BKf')+a1_0x40cacd(0x2d3,'62TJ')+a1_0x40cacd(0x2a3,'U79m')+a1_0x40cacd(0x2af,'DL%%'))},({topic:_0x51a434})=>({'messages':[{'role':a1_0x40cacd(0x2a0,'^fpt'),'content':{'type':a1_0x40cacd(0x20b,'Tw@B'),'text':a1_0x40cacd(0x201,'2mkX')+a1_0x40cacd(0x21a,'U79m')+a1_0x40cacd(0x2c4,'1!um')+a1_0x40cacd(0x238,'^fpt')+'uidance\x20an'+a1_0x40cacd(0x29a,'3]ej')+a1_0x40cacd(0x1f0,'2Oju')+a1_0x40cacd(0x28d,'4!YH')+'\x20'+_0x51a434+(a1_0x40cacd(0x23a,'v4[N')+a1_0x40cacd(0x224,'3]ej')+a1_0x40cacd(0x267,'3]ej')+a1_0x40cacd(0x2a8,'0a3)')+a1_0x40cacd(0x265,'DL%%')+a1_0x40cacd(0x25d,'odRU')+a1_0x40cacd(0x240,'v4[N')+a1_0x40cacd(0x1d9,'JkD^')+a1_0x40cacd(0x27a,'^t9^')+'\x20reference'+'s.')}}]}));async function main(){const _0x5e4208=a1_0x40cacd,_0x1acfff=new StdioServerTransport();await server[_0x5e4208(0x274,'&Bx9')](_0x1acfff),console[_0x5e4208(0x233,')BKf')](SERVER_NAME+'\x20v'+SERVER_VERSION+('\x20running\x20v'+_0x5e4208(0x249,'CnbT'))+getInstallId()+']');}main()[a1_0x40cacd(0x243,'jV%^')](_0x46f5fc=>{const _0x185f15=a1_0x40cacd;console[_0x185f15(0x1f3,'v4[N')](_0x185f15(0x228,')BKf')+'r:',_0x46f5fc),process[_0x185f15(0x2b2,'1!um')](0x1);});
2
+ const a1_0x42d9bd=a1_0xbd2c;(function(_0x3334ec,_0x39ffdb){const _0x1a9efd=a1_0xbd2c,_0x129a51=_0x3334ec();while(!![]){try{const _0x571b53=-parseInt(_0x1a9efd(0x12f,'GitB'))/0x1*(-parseInt(_0x1a9efd(0x1d6,'ihdT'))/0x2)+-parseInt(_0x1a9efd(0x17f,'4!*N'))/0x3+-parseInt(_0x1a9efd(0x1c8,'PTsH'))/0x4*(-parseInt(_0x1a9efd(0x1b6,'hYbD'))/0x5)+-parseInt(_0x1a9efd(0x13c,'BIae'))/0x6*(parseInt(_0x1a9efd(0x155,'YKSx'))/0x7)+-parseInt(_0x1a9efd(0x238,'8R8Y'))/0x8+-parseInt(_0x1a9efd(0x131,'HjYu'))/0x9*(parseInt(_0x1a9efd(0x197,'hR&c'))/0xa)+parseInt(_0x1a9efd(0x1e8,'iJxz'))/0xb;if(_0x571b53===_0x39ffdb)break;else _0x129a51['push'](_0x129a51['shift']());}catch(_0x4d006a){_0x129a51['push'](_0x129a51['shift']());}}}(a1_0xa900,0xf2a23));import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';function a1_0xbd2c(_0x5b340f,_0x15589b){_0x5b340f=_0x5b340f-0x12b;const _0xa90085=a1_0xa900();let _0xbd2c52=_0xa90085[_0x5b340f];if(a1_0xbd2c['gjMpry']===undefined){var _0xd5c529=function(_0x8d602d){const _0xf34389='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59dfc8='',_0x2b8085='';for(let _0x4884c9=0x0,_0x1ba5fc,_0x141c27,_0x388c94=0x0;_0x141c27=_0x8d602d['charAt'](_0x388c94++);~_0x141c27&&(_0x1ba5fc=_0x4884c9%0x4?_0x1ba5fc*0x40+_0x141c27:_0x141c27,_0x4884c9++%0x4)?_0x59dfc8+=String['fromCharCode'](0xff&_0x1ba5fc>>(-0x2*_0x4884c9&0x6)):0x0){_0x141c27=_0xf34389['indexOf'](_0x141c27);}for(let _0x5eb69d=0x0,_0x33d034=_0x59dfc8['length'];_0x5eb69d<_0x33d034;_0x5eb69d++){_0x2b8085+='%'+('00'+_0x59dfc8['charCodeAt'](_0x5eb69d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2b8085);};const _0x492806=function(_0x1eb6aa,_0x31b1fb){let _0x1f6346=[],_0x193dd0=0x0,_0x64b712,_0x36a9c6='';_0x1eb6aa=_0xd5c529(_0x1eb6aa);let _0x19d7be;for(_0x19d7be=0x0;_0x19d7be<0x100;_0x19d7be++){_0x1f6346[_0x19d7be]=_0x19d7be;}for(_0x19d7be=0x0;_0x19d7be<0x100;_0x19d7be++){_0x193dd0=(_0x193dd0+_0x1f6346[_0x19d7be]+_0x31b1fb['charCodeAt'](_0x19d7be%_0x31b1fb['length']))%0x100,_0x64b712=_0x1f6346[_0x19d7be],_0x1f6346[_0x19d7be]=_0x1f6346[_0x193dd0],_0x1f6346[_0x193dd0]=_0x64b712;}_0x19d7be=0x0,_0x193dd0=0x0;for(let _0x2155cd=0x0;_0x2155cd<_0x1eb6aa['length'];_0x2155cd++){_0x19d7be=(_0x19d7be+0x1)%0x100,_0x193dd0=(_0x193dd0+_0x1f6346[_0x19d7be])%0x100,_0x64b712=_0x1f6346[_0x19d7be],_0x1f6346[_0x19d7be]=_0x1f6346[_0x193dd0],_0x1f6346[_0x193dd0]=_0x64b712,_0x36a9c6+=String['fromCharCode'](_0x1eb6aa['charCodeAt'](_0x2155cd)^_0x1f6346[(_0x1f6346[_0x19d7be]+_0x1f6346[_0x193dd0])%0x100]);}return _0x36a9c6;};a1_0xbd2c['ozlOwF']=_0x492806,a1_0xbd2c['YCGXYJ']={},a1_0xbd2c['gjMpry']=!![];}const _0x93ac4d=_0xa90085[0x0],_0x5adb57=_0x5b340f+_0x93ac4d,_0x5c23c9=a1_0xbd2c['YCGXYJ'][_0x5adb57];return!_0x5c23c9?(a1_0xbd2c['KJREdF']===undefined&&(a1_0xbd2c['KJREdF']=!![]),_0xbd2c52=a1_0xbd2c['ozlOwF'](_0xbd2c52,_0x15589b),a1_0xbd2c['YCGXYJ'][_0x5adb57]=_0xbd2c52):_0xbd2c52=_0x5c23c9,_0xbd2c52;}import{SERVER_NAME,SERVER_VERSION}from'./constants.js';import{getInstallId}from'./utils/watermark.js';import{checkForUpdate,formatUpdateNotice,setPendingUpdate}from'./utils/version-check.js';function a1_0xa900(){const _0x4d6199=['WQu3n3NdU8okBCkloCkh','W5TpWRJdO8oRheWKxCk8','WQ91wCksW7tcG8outmo2kW','W7HzWPZdVCoLiSo5eCoSra','krz0WORdHEkcQemPWOdcMW','W5njWPhcVmo1jmoItCk3fa','WR1/dCkcW7/dGSoobmoNyW','WOVdQctdHYiTgq','WRn6WOFcSqFcHSoZ','W6XEyv7cHafFr2XE','WO7dSMBdHteWcSosWP/dKa','WRxcNSknbIn7irJcHx4','W6GAWRBcUmo0m8kQnCk+vq','W7f9WOFcVG','WO/dHHBdRv8fWRBdTmo+W7i','W5tcSCkiW7aKBYNdQ1BdHG','W7BdRmkfW4pdH8o/W7RcUq','pSoBW5ntW7nNW67dPNCR','WOVdSNZcV3jXqmoqWOJdUW','WOVcGfVdPUkcNSkNb8kjWOeU','fYpcVGRcPSkhb8kyW53cISoKWRFcLa','W5XZwfDKcSonW7HEBq','W6nfWPGweCkdWQT/WPNdPq','WPlcKmogrSk6yHBdKCkMW7C','tgpdLCoRFgVcO8oEyCo/','xConWPaqjSoUW6VdR8kuBq','bYmGwhu6WPNcImopnW','WRj4nmkuWRS0WQ4','FmktuY/dLSokW4hdK8k3WQy','EtX0WO3cHSouqWpcImkb','W79xWPxdSCkNi8o4dmk2tG','zCkSihddUsRdTftcJSog','x8olWPCyB8oG','sCkzW6hdPGNcSvesW7mBW4Xcnq','D1PyWPFcHSoqfGVcJmov','w8keW50CW7j1W5JdONS+','omk1ibNcN8oAW4hdGCoZWQu','WQLZhmksWRVdGSoChSoJlG','W4bkWR7cT8o1f0a0fCo6','WP3cIKFdPSo+W6H0WOZcIs4','pGHWWP3cJmosbe/cImov','W5OoWR3dSSo2heeYgCo6','relcIJBdKb05','WPu2WQhdPmkpiYVdTrddGW','z05NW7G','W408mdtcT8k6CCkni8kh','W6mOlCo7W6dcTtFdMaT7','hIJcNfZcLmowWOjBBYu','4OA3dSonjSoGdc/cSmoLWOq','hJbLxwqWWOtcJSkaaG','WR5pyuJdJG1seZHv','o0HjWPbPW6amW6j2','WRpdHXdcUeqFWRhdUmk7W7u','lSk2W7ldNh02iSkfW4JdRW','WPFdSYNdMdmR','W6Lnh8k9WRWXWQJcK+kgUgi','reddK3ldJX8+WRFdR8kA','C05NWQOAiSoKW7WJlq','yb1HW6uqkmkWW7aJFG','wxeww305WOZcK8ojiW','W6BdU8kxW4tdKmo5W77cULhdMa','W7hdMCknmsq+pG3cRMS','W4hcMSolu8k3yHJcN8kVWR4','W4HaWR/cT8oGduW2fSkZ','WP9RW6Hw','WRNcJ1xdUu4pWQFdVSkTW68','oCkSW6tdHJ8Sj8kiW5NcUW','W5XUt0W+ECoRWPTJFG','W71mhSoUW7DLW7NdLKK3','WQ7dIuy6waJdGSk1oG4','WPddSIpdH2WTfCozWOJdJq','btxdTLFdU8kDh8kPW5NcSq','WP9MW7ucW6pdNLW8WPBcOG','WRq6gSkjW7BcJmoDcCkIiG','WQL7n8oXW7tdSdtdIqTS','W74FiqpdL1ieDcLQEIP7','W69BcmoRWR43','WPxcVqi3xGJcMmkFFvi','WQv4WOFdSchcMmoOWRBdM3q','W7KEhCoPW7SJW6xdGqOz','WQe2W7DFW4aPW7rsW59T','WQa5lMJdTSkyBCozp8kF','W4TVW75gWQ/dNKyGW4xcPa','W6jDWPhcSCoOimkQeCkJfa','WPDIWQzkl8kcoCozW4eM','WPtdSJpdKdb9qokePCoCW4m','D8kQfMxdTx7dV2tcNSow','uCkBWO8CW6y','v3pdUf3dU8kru8k2W5RcRW','WQeoWRFcVd3dGHbmcmkY','WR/dTa5llZ0eW4RdRSkm','W5/dS081i8kHWPBcSmo5CG','fmkBWOGDW7P6W5/dPJiP','fIqXqu8NWO7cGmooEq','WOW6WRVcOCouwqZdLrdcGq','p8oWCXRcLCoxW5BdM8kNWRO','DvlcKe4VrCkBWPVcLCkP','pIySf8oBW6NdJmk/WPXn','W4/cJLVcMCoRW7iWWOpcLga','qN3dTLJcTSoPWPzq','dSoAWQBcUv/dPq','WRhdS0PhoNmbWP3dICoj','k8kIBXxcK8obW5ddOSkYWRC','WRddTSoRsuXZv3ddGay','W4rEWRRdPCoNx10/gmkP','W7fWWPRcPa','WO47WQZdPmkopcBdTaZcIW','WOHVW6rbW6C','W7zMWOVcSJ/cNmoGWRBcGIW','W7NcQmkoW6HNBY/dUfRdLG','WRuIzCo7W6xcTsNdMeHR','thFdVXJdVSoFw8o/W57cUa','fJ8HdNyXWPNcGSoiEq','W75FWPFcUmoPm8kQf8kPwa','WRFdT8kLx1TZr3RdHfu','W5rLWQznl8oCE8oMWOKH','W6GpW50','jK5uWPC','W4eZWQZcSmkzoYBdRrBcMa','W5/cTh/cGNSUkmoJWQ3dTmop','hSkGW4vzW59+W45GEWa','W5OoWQVdPCoTfuW0cCo6','W5BcQ8oCW6bIoYFdRv7dJa','v8kDWPqCW7O0WP3cOtuv','W6a9W6jhW4yYW7ryW4r0','WQBcJfyWwa/dJmoEyuW','W7RcS8owWOlcM8k0WRJcOqVdVG','W7FcQG4jpdSnWOFcKmkE','W6SjW4rtoCkpWRWSW5dcPa','fmocWQdcTupdPWn1W4K6','fX7cK2pcI0SfWRddUCk5W4vO','W4lcUmkQcwGYCG3cUw0','WRmOyG','WQ3dLHddQLrwW6lcR8kfW7i','WQhcHK8LwGNcICksyuK','W5v5WOFcSsxcLCkPWRFcIgu','uMpcUSoptg3dV8kqyCoQ','r8kkWPCrECk6WQpdTSkbza','asxdU8o6kelcUSoqyCoW','iqJdTgFcM0XFc8kLW5W','WR8dW7tcUcBdJH9As+kdKG','WOZIGOydvGJcO8kfWQtdPNi','WO9NW75fWQhcTrb3W4xcSq','WPfLW6ejh8kcFmk/W4y3','rSozWPag','gColWQFcS0pdQWuW','WRm+nSo7W7VdOZ/dOKD3','eJNdLvdcLCkv','y8kEAt7cSSojW6W','W6FcHSocbCk1nIBdJmkMWRy','gheQxdaGWOxcK8ofpa','WOZdSezMe8oUWOxcT8o1Da','WQW0W6at4OkXESksuCozyq','kb/cOd/cM1PFhmk0WPS','WQD1WQCuW4S/WQXaW4DX','W4/cNKRcPmkQW7qGWOVcJIq','W4FdPdddKdeMqmoBWPxdHG','W6lcJ00NgXRcGmotlum','W5tcUCkiW6bRDwBdQeVdGa','WPmoW6RdQG','W4NdUmkpW71LDYpcU0VdLW','tsBcV8oTEK7dSCkClSoR','WPeBW6lcOmk6dMedlmkkna','W7ZdJXZdUL8nWRddPmk7W7u','WO8yW7ZcUmoaWQldJSotWQ9w','W63cLKdcQX1BW7hcVSk4W6NdVL80oq','W4TVwfCKlSonWRfMDa','W7tcMSknDwfqnXtcRIa','W6XXWOFdSclcN8kPWQBcNMm','WO1HW6jhWQ/dILG+WPFcTW','WRv7imo1W7tdVxRdM0jY','WQG2wCkcW7JcHSoFtmoNoW','atBdOCoNkedcT8opjmoQ','WRj5W6NcPCkpj27cOqZcMG','W5BcSqZdKG4nbmoD','g8kQg1yCWO8DWQNdTIO','BqRcU2ddIW','WPm0WRVcVCoAphtcOq/cJW','WQS/jhddU8kdB8krp8oi','W5ThWQ/dRSkUx0G0hSk/','WOFdH8kremoNC0/cJmkiWR50W5esWOa','CghdQrJdUmofymk8W5dcVa','EKRdHthdJf7IGz7dO8omWO0','x8ko4OwgW7bwW7y4mmotiG','WQi+W7rhWOGQWQzvW452','W740WQLajmkvoCo+W4O2','b8kDW4bcmSo9WRxdGCkRxCoAkCka','jJ7dMr/cNmopWQ1BBJG','W4lcH8oismkInG','WQ0yW5KwnSkcW7KwWRJcPa','WQldJCobB3mTyc7cK2aTWQNcSG','W6GpW4nepSkyWQb/W5tdIW','W68Eg8oZWR9LW7NdM0u1','fmknWPGdW7f9W5xdPhW8','W7NdOuy1amk6WQRcPSo7EG','D1fNW6ShkmkWW7C/Eq','W51YuuW+ECoNW51EAq','WPz/WQnapSkinCk/W5C3','Er8/WP7dI8kCrb/cM8kC','W7LkWPpcR8oMi8oVsmkVxa','WQ1/jSknW77cGmoidCoWoG','WRL4DCknWRCOW73cRmkuWOy','WPRdVuz0nSk4WO8','qq7dMdFdNHjNWRtdPCkA','W4L8WOdcOJFcGSoWW6lcJ28','WRlcM004sW8','W4yjW6RdU8obWQlcH8owWRjA','jmkBWRavW5u8mSkrxmkW','eSoXWQFcS1ddReCHW4rJ','W6i4W69wW4yXW7rVW5LT','nIONaSkfWQ3dHSoMW4Wo','W6jHWR3cSZNcNCo5WQpcIwu','WPq3mxBdVSkeBW','WQxdO10olZaiW4tcGSoC','n1XdWPeVW6bdWQnVWR0','WR5pCexcHWDzqgXB','iX/dTgxcJGHnf8kVWOC','WPv6W69aoCkcBmo6W5D+','u8ktW4fzW48FW6rdzqm','W55VsfCVlSonWOiFoW','kH9YWOZcL8ovfXBdHmkw','WRfPvCobW4pcM8okcCoria','asldVmoMkftcVSoviSoX','WPK2WOegW5BdJmo+WPtcQcm','WPTKW69ijmkioCoZW40W','WPqsW6xdVCokWRG','WRBcGeeWsfVcISoqFXO','WOL3WR1rW6BdM013W6/dPW','WQzszaW','WPRcMKRcTa','WO4GWRVcP8kFicBIGPvFWOa','e8onWRhdSf7dReC0WOS1','CL9dWPmTW7bbWOKRW7y','WQTJDKlcNqvBvG','qcJdOfhdSCouh8kZW5FcVG','WRLKm8kuWRmIWQNcUSkiWOm','W5rnWRBcQCkDW7NcOCouWRrUW5Ok','l8k1EaS','WR/dLXZdU0GFW6ldQ8kXW7q','W6pIHRGThWLiWP4Rg8kL','WO7cH0VdPSoUW6G3WPNdGbu','WOLwv8obW5tcG8owamkInW','WQKdW6pcQw/dIrvkhSkR','fCoPj1ahWP1tWQNcVIy','4OcVW6KWxrZcJXdcQCo2iG','u8k0W4XmW4KAWQbeEq8','W79oW5tcKSoqbSoznCoSuW','W5O2WQHDfCkcFmo+W5yX','WQ0Ym8oXWRFdSYJdKKy+','WOb/WQXmoCorF8oWW5zY','WRGRimk0W7hdUI/dK08Y','W5r0WQPApSorACoTW4uX','WQGqW7hcOZ3dGbThcmkJ','pbTIWPZdHCosdbVcJmkg','WOBdR27dJJ52ASkvWONdLW','W7uqt8opWRFcHCoom8oJnG','WQfyBaOen8kslWxcTa','WO9RW6nbW73dLKO8','fCopWRRcT1tdSuT1W4OT','W4/cHL3dPSojW5qhW4RcHIu','W5dcTx7cG3fSuSo1WRxdISoFWRVcJq','W47dUokdQmkPqMKJW75zW4O','eIiXdNiXWP7cLCkakq','zKhdHZ/dNLm5WQBdUSkj','W64dW5HymSkpWQ0','WQddTmoXtuP7wNFcJaK','W7pdOmkyW4NdM8oXWRJcUepcGa','D09WW6ug','s8k7g1inWOKhW73cScW','bSkJW4Xo','W6hcQSktW7XQFXldQuRdKq','kb7cPYJdI0rxhCkYWPm','CmkXd2xcOh7dLwtcMCoa','WOPJW6boW6RdJaGWWOpdTG','WRn+pmkfWRDXWRVcOCkfWOu','W4dcSCkiW7OKEspdQeVcIW','W6tdPfTLdtec','WRXFfmoKW7SXW6xdG0mH','x8odWPCgA8k8W7RdM8orjq','WRj4mmkhWRK4WRpcR8oDWOm','W618WPhdSddcMCo7WRhcJY4','WOn1WRRcSmkBpwldOa3cIG','tIFdT8kIBKZcPmkCm8o8','btRdOfNdPSoEsSkRWPtdVq','WQnEELldGKrzhsSt','W5C74OcPbr9UWQ7dJvrP','W4BcQSoesSk/mHJdI8oJ4Ood','qgddVLFdRq','WRhdTfCoid8bWOhcL8kv','uuVdKIy','W71mWRFcQZVdSH9rcSkR','W6e6zCoJW7ldT3RdVhTx','W5pcSCkyW6HQEcpcU17dIW','WR0hW6xcQIddNXDibCkL','WQ1nz1JcJqfpfgaD','WQHRomkwWR40WQ7dQmksWOy','WQmoWQ/dT8oBW6ZcNCoxWQjC','WOv1WQxcRCkjjYBdRbBcIq','WQblErSv','WOSLWPirWO/cMokcHCkuWPKP','rfJdIZVdKX8OWQ/dR8oe','bSkyW4nbp8o/WRxcTCk4BmoNcmkfoW','WP9rW7fxW6VdLLXXWP7dTG','W44eW5nvpmomWQS6WPddOq','W79FdSo+WRm','W5/dPLf8cCkP','WOpcJq/cPCoLW6mXW4RcHtG','W6hdOmksW4xcJ8k2','WOH/gmktW7tcISkAi8ovaG','WPe2WQnakmkdEmoTW403','s1RdIYBdLHeKW6pdQ8kg','wSkoW50qW7XYW5/dPNCS','w8kBW50sWRr/W5JdO2a+','BCoxWP03W6acASkrxmk1','W5ZdOeX4f8k6','mdGHfCo0WQ/cN8oUWPuJ','b8oiWOa/sCkHW60','W53cK8obtmkXkXJdK8oJWQq','WP3cPXyMv8o5W4BdTSoYEdtdPmkddq','WP98sxOPAmkMW5vwFG','W69Bfmo5WPCQW63dLemS'];a1_0xa900=function(){return _0x4d6199;};return a1_0xa900();}import{z}from'zod';import{registerResolveTool}from'./tools/resolve.js';import{registerDocsTool}from'./tools/docs.js';import{registerBestPracticesTool}from'./tools/best-practices.js';import{registerAutoScanTool}from'./tools/auto-scan.js';import{registerSearchTool}from'./tools/search.js';import{registerAuditTool}from'./tools/audit.js';import{registerChangelogTool}from'./tools/changelog.js';import{registerCompatTool}from'./tools/compat.js';import{registerCompareTool}from'./tools/compare.js';import{registerExamplesTool}from'./tools/examples.js';const server=new McpServer({'name':SERVER_NAME,'version':SERVER_VERSION},{'instructions':a1_0x42d9bd(0x242,'hMPb')+a1_0x42d9bd(0x251,'^B)F')+a1_0x42d9bd(0x18f,'HjYu')+a1_0x42d9bd(0x26a,'hYbD')+a1_0x42d9bd(0x140,'ywhG')+a1_0x42d9bd(0x188,'4U7P')+a1_0x42d9bd(0x149,'^B)F')+a1_0x42d9bd(0x243,'uFA)')+a1_0x42d9bd(0x159,'sNmO')+a1_0x42d9bd(0x20a,'f8T@')+a1_0x42d9bd(0x24d,'AMLM')+a1_0x42d9bd(0x1bc,'xUmL')+a1_0x42d9bd(0x1f3,'pU8*')+a1_0x42d9bd(0x1b7,'@uuc')+a1_0x42d9bd(0x169,'Dkzp')+'\x20(WCAG),\x20p'+a1_0x42d9bd(0x230,'aZOM')+a1_0x42d9bd(0x203,'oISg')+a1_0x42d9bd(0x1e1,'AMLM')+a1_0x42d9bd(0x195,'Fm4E')+'atabases,\x20'+a1_0x42d9bd(0x21f,'Y3Nl')+'ture,\x20and\x20'+a1_0x42d9bd(0x192,'AMLM')+a1_0x42d9bd(0x146,'8R8Y')+a1_0x42d9bd(0x1c6,'ahKw')+a1_0x42d9bd(0x25f,'4kW!')+a1_0x42d9bd(0x172,'iJxz')+a1_0x42d9bd(0x234,'u@@0')+a1_0x42d9bd(0x1f1,'pU8*')+a1_0x42d9bd(0x224,'CGb4')+a1_0x42d9bd(0x225,'sNmO')+a1_0x42d9bd(0x24c,'BIae')+a1_0x42d9bd(0x145,'58eH')+a1_0x42d9bd(0x1ea,'hYbD')+a1_0x42d9bd(0x15f,'AMLM')+a1_0x42d9bd(0x226,'aZOM')+a1_0x42d9bd(0x23d,'sIjt')+a1_0x42d9bd(0x1b5,'YKSx')+a1_0x42d9bd(0x21c,'f8T@')+a1_0x42d9bd(0x13f,'@uuc')+a1_0x42d9bd(0x1c0,'aZOM')+a1_0x42d9bd(0x151,'slFg')+a1_0x42d9bd(0x23a,'bMw(')+a1_0x42d9bd(0x20b,'4!*N')+a1_0x42d9bd(0x12b,'58eH')+'ry.\x0a4.\x20gt_'+a1_0x42d9bd(0x191,'bMw(')+a1_0x42d9bd(0x228,'Pa8(')+a1_0x42d9bd(0x18d,'aZOM')+a1_0x42d9bd(0x1f5,'58eH')+a1_0x42d9bd(0x1a3,')$2#')+a1_0x42d9bd(0x137,'ywhG')+a1_0x42d9bd(0x135,'ihdT')+a1_0x42d9bd(0x18e,'GrO7')+a1_0x42d9bd(0x22b,'4U7P')+a1_0x42d9bd(0x239,'hMPb')+a1_0x42d9bd(0x1a6,'sIjt')+a1_0x42d9bd(0x1cf,'CGb4')+a1_0x42d9bd(0x178,'rHrx')+a1_0x42d9bd(0x1e7,'ihdT')+a1_0x42d9bd(0x1a0,'BIae')+a1_0x42d9bd(0x249,'rHrx')+a1_0x42d9bd(0x233,'sNmO')+a1_0x42d9bd(0x147,'CGb4')+a1_0x42d9bd(0x13d,'4!*N')+a1_0x42d9bd(0x24e,'xUmL')+a1_0x42d9bd(0x20d,'4U7P')+a1_0x42d9bd(0x1b0,'[9F5')+'e\x20fixes\x20fr'+a1_0x42d9bd(0x157,'58eH')+a1_0x42d9bd(0x179,'mj#e')+a1_0x42d9bd(0x132,'^B)F')+a1_0x42d9bd(0x1cc,'[9F5')+a1_0x42d9bd(0x17e,'ahKw')+a1_0x42d9bd(0x1f7,'io0P')+a1_0x42d9bd(0x1c3,'4U7P')+a1_0x42d9bd(0x1dd,'7zdE')+a1_0x42d9bd(0x1c2,'7zdE')+a1_0x42d9bd(0x252,'iJxz')+a1_0x42d9bd(0x20e,'C7II')+a1_0x42d9bd(0x17a,'8R8Y')+a1_0x42d9bd(0x163,'hR&c')+a1_0x42d9bd(0x1f8,'^B)F')+a1_0x42d9bd(0x257,'ahKw')+a1_0x42d9bd(0x237,'CGb4')+a1_0x42d9bd(0x20f,'^B)F')+a1_0x42d9bd(0x207,'BIae')+a1_0x42d9bd(0x1c1,'HjYu')+'\x202–3\x20libra'+a1_0x42d9bd(0x176,'Dkzp')+a1_0x42d9bd(0x217,'7zdE')+a1_0x42d9bd(0x256,'aZOM')+a1_0x42d9bd(0x138,'slFg')+a1_0x42d9bd(0x1ff,'hYbD')+a1_0x42d9bd(0x266,'CGb4')+a1_0x42d9bd(0x184,'[9F5')+a1_0x42d9bd(0x14c,'xUmL')+a1_0x42d9bd(0x214,'4U7P')+a1_0x42d9bd(0x1e5,'AMLM')+(a1_0x42d9bd(0x1da,'^B)F')+a1_0x42d9bd(0x194,'fXq4')+a1_0x42d9bd(0x16b,'rHrx')+a1_0x42d9bd(0x153,'Ozbq')+a1_0x42d9bd(0x232,'8R8Y')+a1_0x42d9bd(0x183,'rHrx')+a1_0x42d9bd(0x24a,'GitB')+a1_0x42d9bd(0x164,'hYbD')+a1_0x42d9bd(0x1fc,'sNmO')+a1_0x42d9bd(0x223,'u@@0')+a1_0x42d9bd(0x1a1,'hMPb')+a1_0x42d9bd(0x1ed,'4U7P')+a1_0x42d9bd(0x1be,'xUmL')+a1_0x42d9bd(0x189,'8R8Y')+a1_0x42d9bd(0x262,'7zdE')+a1_0x42d9bd(0x19a,'PTsH')+a1_0x42d9bd(0x1b2,']J*M')+a1_0x42d9bd(0x205,'[9F5')+'pic]\x22\x20→\x20gt'+a1_0x42d9bd(0x139,'ywhG')+a1_0x42d9bd(0x1b9,'mT16')+a1_0x42d9bd(0x12e,'Fm4E')+a1_0x42d9bd(0x162,'ahKw')+a1_0x42d9bd(0x25b,'Y3Nl')+'\x20[library]'+a1_0x42d9bd(0x1eb,'YKSx')+a1_0x42d9bd(0x1ac,'C7II')+a1_0x42d9bd(0x1e3,'Pa8(')+a1_0x42d9bd(0x15d,'ihdT')+a1_0x42d9bd(0x22c,'ahKw')+a1_0x42d9bd(0x130,'iJxz')+a1_0x42d9bd(0x21a,'AMLM')+a1_0x42d9bd(0x1d4,'hMPb')+a1_0x42d9bd(0x23e,']J*M')+'a.')});registerResolveTool(server),registerDocsTool(server),registerBestPracticesTool(server),registerAutoScanTool(server),registerSearchTool(server),registerAuditTool(server),registerChangelogTool(server),registerCompatTool(server),registerCompareTool(server),registerExamplesTool(server),server[a1_0x42d9bd(0x201,'mj#e')](a1_0x42d9bd(0x199,'GrO7')+a1_0x42d9bd(0x215,'XU]I'),'Scan\x20this\x20'+a1_0x42d9bd(0x240,'Pa8(')+a1_0x42d9bd(0x16e,'io0P')+a1_0x42d9bd(0x209,'GrO7')+'tch\x20live\x20b'+a1_0x42d9bd(0x1cd,'uFA)')+a1_0x42d9bd(0x158,'PTsH')+'rom\x20offici'+a1_0x42d9bd(0x15e,'hYbD'),()=>({'messages':[{'role':a1_0x42d9bd(0x160,'io0P'),'content':{'type':a1_0x42d9bd(0x174,'7zdE'),'text':a1_0x42d9bd(0x1bb,'BIae')+a1_0x42d9bd(0x196,'CGb4')+a1_0x42d9bd(0x136,'sNmO')+a1_0x42d9bd(0x13e,'8R8Y')+a1_0x42d9bd(0x1d1,'mj#e')+a1_0x42d9bd(0x168,'mT16')+a1_0x42d9bd(0x24f,')$2#')+a1_0x42d9bd(0x259,'aZOM')+a1_0x42d9bd(0x175,'mT16')+a1_0x42d9bd(0x1f9,'4U7P')+a1_0x42d9bd(0x177,'^B)F')+a1_0x42d9bd(0x1db,'@uuc')+a1_0x42d9bd(0x211,'sNmO')+a1_0x42d9bd(0x244,'Ozbq')+a1_0x42d9bd(0x161,'NDxr')+a1_0x42d9bd(0x14a,'pU8*')+'ch\x20issue\x20t'+a1_0x42d9bd(0x22e,'ahKw')+a1_0x42d9bd(0x1aa,'AMLM')+'e\x20best-pra'+a1_0x42d9bd(0x246,'Y3Nl')+a1_0x42d9bd(0x1f4,'rHrx')+a1_0x42d9bd(0x182,'BIae')+a1_0x42d9bd(0x17d,'sNmO')+a1_0x42d9bd(0x1de,'ahKw')+a1_0x42d9bd(0x21e,')$2#')+a1_0x42d9bd(0x1c7,'hR&c')}}]})),server[a1_0x42d9bd(0x12d,'HjYu')](a1_0x42d9bd(0x1fb,'ywhG')+a1_0x42d9bd(0x1a8,'pU8*'),a1_0x42d9bd(0x263,'pU8*')+a1_0x42d9bd(0x16d,'io0P')+a1_0x42d9bd(0x173,'ihdT')+a1_0x42d9bd(0x26b,'58eH')+'\x20before\x20up'+a1_0x42d9bd(0x15c,'slFg')+a1_0x42d9bd(0x13b,'8R8Y'),{'library':z['string']()[a1_0x42d9bd(0x1c5,'YKSx')](a1_0x42d9bd(0x200,'BIae')+'\x20check,\x20e.'+a1_0x42d9bd(0x1ce,'[9F5')+a1_0x42d9bd(0x1b3,'GrO7')+',\x20\x27prisma\x27')},({library:_0xf34389})=>({'messages':[{'role':a1_0x42d9bd(0x241,'C7II'),'content':{'type':a1_0x42d9bd(0x1a9,'f8T@'),'text':a1_0x42d9bd(0x1e9,')$2#')+a1_0x42d9bd(0x187,'ywhG')+a1_0x42d9bd(0x13a,'sNmO')+a1_0x42d9bd(0x1a5,'ywhG')+a1_0x42d9bd(0x231,'slFg')+a1_0x42d9bd(0x1e4,'uFA)')+_0xf34389+(a1_0x42d9bd(0x16f,'bMw(')+'e\x20what\x20cha'+a1_0x42d9bd(0x14d,'GitB')+'light\x20any\x20'+a1_0x42d9bd(0x24b,'Y3Nl')+a1_0x42d9bd(0x236,'YKSx')+a1_0x42d9bd(0x25d,'AMLM')+a1_0x42d9bd(0x1d2,'hMPb')+a1_0x42d9bd(0x1ae,'hMPb')+a1_0x42d9bd(0x154,'GitB'))}}]})),server[a1_0x42d9bd(0x16a,'8R8Y')](a1_0x42d9bd(0x1ec,'[9F5')+a1_0x42d9bd(0x167,'f8T@'),'Get\x20curren'+a1_0x42d9bd(0x1bd,'GitB')+a1_0x42d9bd(0x222,'mT16')+a1_0x42d9bd(0x1d0,'8R8Y')+a1_0x42d9bd(0x166,'4!*N')+'is\x20project',()=>({'messages':[{'role':a1_0x42d9bd(0x1d3,'XU]I'),'content':{'type':a1_0x42d9bd(0x221,'PTsH'),'text':a1_0x42d9bd(0x1ef,'hR&c')+a1_0x42d9bd(0x204,'YKSx')+a1_0x42d9bd(0x1b1,'mj#e')+a1_0x42d9bd(0x229,'C7II')+a1_0x42d9bd(0x1d8,'XU]I')+a1_0x42d9bd(0x1ad,'ihdT')+a1_0x42d9bd(0x1a4,'bMw(')+a1_0x42d9bd(0x17c,'7zdE')+a1_0x42d9bd(0x1cb,'HjYu')+a1_0x42d9bd(0x22d,'4U7P')+'each\x20one.\x20'+a1_0x42d9bd(0x1e6,'NDxr')+a1_0x42d9bd(0x16c,'hYbD')+a1_0x42d9bd(0x20c,'uFA)')+a1_0x42d9bd(0x1bf,'uFA)')}}]})),server['prompt'](a1_0x42d9bd(0x1ba,'mj#e')+a1_0x42d9bd(0x14f,'Y3Nl'),a1_0x42d9bd(0x185,'NDxr')+a1_0x42d9bd(0x1ca,'bMw(')+a1_0x42d9bd(0x1d7,'mT16')+a1_0x42d9bd(0x1a7,'4U7P')+a1_0x42d9bd(0x1dc,'BIae')+a1_0x42d9bd(0x15a,'ihdT')+a1_0x42d9bd(0x19e,'AMLM'),{'libraries':z[a1_0x42d9bd(0x265,'HjYu')]()[a1_0x42d9bd(0x144,']J*M')](a1_0x42d9bd(0x23b,'hYbD')+a1_0x42d9bd(0x18c,')$2#')+a1_0x42d9bd(0x254,'GrO7')+a1_0x42d9bd(0x1fa,'slFg')+a1_0x42d9bd(0x152,'ywhG')+a1_0x42d9bd(0x1d5,'xUmL')+a1_0x42d9bd(0x17b,')$2#')+a1_0x42d9bd(0x206,'Fm4E'))},({libraries:_0x59dfc8})=>({'messages':[{'role':a1_0x42d9bd(0x219,'CGb4'),'content':{'type':a1_0x42d9bd(0x255,'hYbD'),'text':a1_0x42d9bd(0x1f6,'HjYu')+a1_0x42d9bd(0x213,'4kW!')+a1_0x42d9bd(0x19c,'ihdT')+a1_0x42d9bd(0x269,'4U7P')+'s\x20side-by-'+a1_0x42d9bd(0x267,']J*M')+_0x59dfc8+(a1_0x42d9bd(0x227,'Pa8(')+a1_0x42d9bd(0x1fd,'Y3Nl')+a1_0x42d9bd(0x1b4,'pU8*')+a1_0x42d9bd(0x170,']J*M')+a1_0x42d9bd(0x212,'xUmL')+a1_0x42d9bd(0x1e0,'xUmL')+a1_0x42d9bd(0x14b,'iJxz')+a1_0x42d9bd(0x247,'hMPb'))}}]})),server[a1_0x42d9bd(0x1f0,'iJxz')](a1_0x42d9bd(0x210,'slFg')+'heck',a1_0x42d9bd(0x268,'sNmO')+'SP\x20and\x20sec'+a1_0x42d9bd(0x18a,'Ozbq')+'\x20for\x20guida'+a1_0x42d9bd(0x21b,'YKSx')+a1_0x42d9bd(0x19b,'sIjt')+a1_0x42d9bd(0x1a2,'ahKw')+a1_0x42d9bd(0x143,'hMPb'),{'topic':z[a1_0x42d9bd(0x198,'YKSx')]()[a1_0x42d9bd(0x235,'7zdE')](a1_0x42d9bd(0x142,'mT16')+a1_0x42d9bd(0x250,'4!*N')+'\x20\x27SQL\x20inje'+a1_0x42d9bd(0x1af,'58eH')+a1_0x42d9bd(0x181,'mj#e')+a1_0x42d9bd(0x25a,'4!*N')+a1_0x42d9bd(0x150,'PTsH')+a1_0x42d9bd(0x1b8,'ahKw'))},({topic:_0x2b8085})=>({'messages':[{'role':a1_0x42d9bd(0x1c4,'GitB'),'content':{'type':a1_0x42d9bd(0x19d,'BIae'),'text':a1_0x42d9bd(0x1c9,'iJxz')+a1_0x42d9bd(0x15b,'CGb4')+a1_0x42d9bd(0x171,'@uuc')+a1_0x42d9bd(0x22a,'ywhG')+a1_0x42d9bd(0x258,'hMPb')+a1_0x42d9bd(0x193,'PTsH')+a1_0x42d9bd(0x22f,'4U7P')+a1_0x42d9bd(0x216,'mj#e')+'\x20'+_0x2b8085+(a1_0x42d9bd(0x156,'slFg')+a1_0x42d9bd(0x14e,'bMw(')+a1_0x42d9bd(0x202,'XU]I')+a1_0x42d9bd(0x1df,'sNmO')+a1_0x42d9bd(0x245,'7zdE')+a1_0x42d9bd(0x260,'hYbD')+a1_0x42d9bd(0x186,'7zdE')+a1_0x42d9bd(0x12c,'oISg')+a1_0x42d9bd(0x25c,'XU]I')+'\x20reference'+'s.')}}]}));async function main(){const _0x4b4ab7=a1_0x42d9bd,_0x4884c9=new StdioServerTransport();await server[_0x4b4ab7(0x23c,'pU8*')](_0x4884c9),console[_0x4b4ab7(0x18b,'58eH')](SERVER_NAME+'\x20v'+SERVER_VERSION+(_0x4b4ab7(0x190,'58eH')+_0x4b4ab7(0x165,'bMw('))+getInstallId()+']'),checkForUpdate()[_0x4b4ab7(0x141,'BIae')](_0x1ba5fc=>{const _0x57b3c2=_0x4b4ab7;if(_0x1ba5fc){setPendingUpdate(_0x1ba5fc);const _0x141c27=formatUpdateNotice(_0x1ba5fc);console[_0x57b3c2(0x23f,'io0P')](_0x141c27),server[_0x57b3c2(0x180,'rHrx')][_0x57b3c2(0x133,'rHrx')+_0x57b3c2(0x21d,'4!*N')]({'level':_0x57b3c2(0x208,'NDxr'),'data':_0x141c27})[_0x57b3c2(0x19f,'7zdE')](()=>{});}})[_0x4b4ab7(0x264,'rHrx')](()=>{});}main()[a1_0x42d9bd(0x25e,'u@@0')](_0x388c94=>{const _0x20026c=a1_0x42d9bd;console[_0x20026c(0x253,')$2#')](_0x20026c(0x134,'NDxr')+'r:',_0x388c94),process[_0x20026c(0x218,'u@@0')](0x1);});