diff --git a/DELEGATE-PLAN.md b/DELEGATE-PLAN.md
new file mode 100644
index 0000000..9ddfc06
--- /dev/null
+++ b/DELEGATE-PLAN.md
@@ -0,0 +1,82 @@
+# DELEGATE-PLAN — v0.5.7 QA green
+
+**Repo:** `/Users/macbookair/Documents/Visual Studio Code/MCP/gate-mcp`
+**Done when:** `npm test` exit 0 AND `node dist/main.js doctor --strict` pass
+**No commit** unless user asks.
+
+## Repro (2026-10-12)
+
+| Command | Result |
+|---------|--------|
+| `npm test` | 47 passed, 2 failed |
+
+### Failures
+
+1. **Test 34 — AlgoTrading SMC** — `handleGraphQuery` with `projectRoot: algoSmc` while `GATE_PROJECT_ROOT` = gate-mcp → boundary error.
+2. **Test 42 — cachePartition** — `mkdtemp` `/var/...` vs canonical `/private/var/...`.
+
+## Tasks
+
+| ID | Owner | Scope | Fix | Status |
+|----|-------|-------|-----|--------|
+| T1 | implementer (`b8ab98b6`) | `src/test.ts` | Temp set `GATE_PROJECT_ROOT=algoSmc` for Test 34, restore in `finally` | [x] verified |
+| T2 | implementer (`b8ab98b6`) | `src/test.ts`, `scripts/qa-multi-repo-proof.mjs` | Compare `cachePartition` to `canonicalizePath` / `realpathSync.native`; qa assert added as regression guard | [x] verified |
+| T3 | parent (orchestrator) | — | `npm run build`, `npm run test:unit`, `npm test`, `doctor --strict` | [x] verified |
+
+## Verification (orchestrator, 2026-10-12 08:12, Node 22.21.1)
+
+| Command | Exit | Result |
+|---------|------|--------|
+| `npm run build` | 0 | tsc clean |
+| `npm run test:unit` | 0 | 49 passed, 0 failed |
+| `npm test` | 0 | unit 49/0 + qa-multi-repo pass + adversarial `failedCount: 0` |
+| `node dist/main.js doctor --strict` | 0 | 10/10 PASS, `ok: true` |
+
+Re-verified after moving fixes onto branch `fix/qa-057` from `origin/main` (8547e2e): build 0, `npm test` 0, same counts.
+
+Review notes: Test 34 fix is test-side (product boundary refusal is intended security behavior). Test 34 only runs on machines with the AlgoTrading SMC checkout; skips elsewhere.
+
+## Acceptance
+
+```bash
+npm run build
+npm run test:unit
+npm test
+node dist/main.js doctor --strict
+```
+
+## Out of scope
+
+- graphify node-count drift warnings
+- EPIPE on MCP stdio after test suite (non-failing noise)
+
+---
+
+# Next — end-user docs (done) + React demo (plan only)
+
+Constraints: Gate stays standalone; graphify is a separate tool, no bundling.
+Ask the user before any graphify integration or caveman-in-code change.
+
+## D1 — README end-user docs [x]
+
+- `What Gate compresses — and what it does not` (tool results only; not prompts, built-in Read, or model output; meaning of `Savings: n/a`).
+- `Reading gate_session_stats` — persistent-cache fields vs process-wide fields, `measurement_scope`, `billingScope`, honest example.
+- `Pin Node in mcp.json` — absolute `node` + `dist/main.js` paths; `NODE_MODULE_VERSION` symptom; verify with `doctor --strict`.
+- Known limitations: code generation, native SQLite rows.
+
+## P1 — React demo script: full read vs compress (PLAN ONLY — do not build until user says)
+
+Goal: reproducible, honest before/after numbers for marketing, from one command.
+
+| Step | Detail |
+|------|--------|
+| Fixture | Pin a public React repo at a fixed commit (e.g. a mid-size Vite + React app), cloned to a temp dir — not vendored |
+| Task | Fixed "work loop": 8–12 files a real agent touches for one feature (component, hook, context, API client, test) |
+| Baseline | Raw file bytes + BPE tokens (same counter as `tokenCounter.ts`) for each file |
+| Gate | Spawn `dist/main.js` over MCP stdio; call `gate_compress_file` `signature` per file, then a second pass to show dedup hits; finish with `gate_session_stats` |
+| Output | `demo/react-demo-result.json` + Markdown table: file, raw tokens, Gate tokens, %, `expanded` flag |
+| Honesty | Label `billingScope: tool_payload_only`; include files where Gate expands or saves ~0; show that edits still need a `full` read |
+
+Files: `scripts/demo-react-compare.mjs` (new), `package.json` script `demo:react`, README "Benchmarks" link.
+Acceptance: deterministic numbers on two runs; no network after clone; runs on Node 20 and 22.
+Risks: picking a repo that flatters Gate — choose before seeing numbers; signature-only views are not enough to edit code, so the demo must say so.
diff --git a/README.md b/README.md
index 7a3a741..87778e1 100644
--- a/README.md
+++ b/README.md
@@ -134,6 +134,31 @@ Architecture detail: [`ARCHITECTURE.md`](ARCHITECTURE.md).
`gate_help` with `tool: "recommended_stack"` is the agent-facing playbook.
+
+
+### What Gate compresses — and what it does not
+
+Gate only shrinks **results of Gate tool calls**. It is a tool your agent
+chooses to call, not a filter on the whole conversation.
+
+| Gate reduces | Gate does **not** touch |
+|---|---|
+| `tools/list` schema size (catalog mode) | Your prompts and chat history |
+| File views returned by `gate_compress_file` | The editor's built-in `Read` / `Grep` / terminal output |
+| Graph answers from `gate_graph_query` | Rules, system prompt, attached files |
+| Re-reads of unchanged files (SQLite dedup) | Model output — generated code and replies |
+| JSON passed to `gate_clean_response` | Other MCP servers (unless routed through the opt-in proxy) |
+| Images passed to `gate_optimize_image` | Your provider bill — see `billingScope` below |
+
+What this means in practice:
+
+- If the agent never calls a Gate tool, savings are **zero**. Add a rule
+ telling your agent to use `gate_compress_file` before full reads.
+- An agent footer such as `Savings: n/a` means no Gate compression ran that
+ turn. It does not mean Gate is broken. Run `gate_init` to confirm health.
+- Gate cannot shrink code generation. Smaller input context leaves more room
+ for output, but the output itself is the model's.
+
---
@@ -157,10 +182,10 @@ npm exec --yes --strict-allow-scripts \
--package=@gatemcp/cli -- gatemcp
```
-Package: `@gatemcp/cli` · binary: `gatemcp` · current: **0.5.7**.
+Package: `@gatemcp/cli` · binary: `gatemcp` · current: **0.5.8**.
Then wire your IDE (Cursor snippet below). Run **`gate_init`** once per workspace.
-Doctor: `npx --package=@gatemcp/cli@0.5.7 gatemcp doctor /abs/path/to/repo --strict`.
+Doctor: `npx --package=@gatemcp/cli@0.5.8 gatemcp doctor /abs/path/to/repo --strict`.
Install from source
@@ -201,6 +226,54 @@ narrow (never widen).
+
+
+
+Pin Node in mcp.json — fixes SQLite NODE_MODULE_VERSION errors
+
+`better-sqlite3` is a native module. It is compiled for the Node version that
+ran `npm install`. Your IDE may launch MCP servers with a **different** Node
+(nvm, Homebrew, Volta, or a GUI app `PATH` without your shell profile).
+
+Symptoms:
+
+- Server fails to start, or `gate_init` / `gate_session_stats` shows `persistentCache: false`
+- Log line like `was compiled against a different Node.js version using NODE_MODULE_VERSION 127. This version of Node.js requires NODE_MODULE_VERSION 137`
+
+Fix: point the IDE at the **same** Node binary that installed Gate. In the
+terminal where you installed it:
+
+```bash
+which node # e.g. /Users/you/.nvm/versions/node/v22.21.1/bin/node
+echo "$(npm root -g)/@gatemcp/cli/dist/main.js"
+```
+
+Then use both absolute paths:
+
+```json
+{
+ "mcpServers": {
+ "gatemcp": {
+ "command": "/Users/you/.nvm/versions/node/v22.21.1/bin/node",
+ "args": ["/Users/you/.nvm/versions/node/v22.21.1/lib/node_modules/@gatemcp/cli/dist/main.js"],
+ "env": {
+ "GATE_PROJECT_ROOT": "/absolute/path/to/your/repo"
+ }
+ }
+ }
+}
+```
+
+Verify with the same Node:
+`/path/to/node /path/to/dist/main.js doctor /absolute/path/to/your/repo --strict` —
+`cache_access` must say `SQLite write/reopen probe passed`.
+
+If you switch Node versions later, reinstall Gate under the new version (or
+keep the pin). Avoid `GATE_ALLOW_MEMORY_CACHE=1` as a fix — it hides the
+problem and turns off persistent dedup.
+
+
+
Claude Code / Windsurf / Antigravity / VS Code / Codex
@@ -218,7 +291,7 @@ narrow (never widen).
codex plugin marketplace add Dukeabaddon/Gate-MCP && codex plugin add gatemcp@dukeabaddon-gate-mcp
```
-Restart the thread after install. Plugin pins `@gatemcp/cli@0.5.7`.
+Restart the thread after install. Plugin pins `@gatemcp/cli@0.5.8`.
@@ -257,12 +330,46 @@ savings stay `0`.
| `billingScope` | `"tool_payload_only"` — **not** Cursor billed tokens |
| `expanded: true` | Output grew; `savingsPercent` forced to `0` |
-`gate_session_stats` mixes path-filtered persistent cache totals with
-process-wide counters for the MCP instance. See prior release notes for the
-exact field split.
-
+
+
+### Reading `gate_session_stats`
+
+The result has two groups of numbers with **different scopes**. Do not add
+them together.
+
+**Persistent cache** — stored in SQLite, survives IDE restarts, filtered by `projectRoot`:
+
+| Field | Meaning |
+|---|---|
+| `persistentCache` | `true` = SQLite. `false` = in-memory fallback; run `gatemcp doctor --strict` (often a [Node pin](#pin-node-for-sqlite) issue) |
+| `cachePartition` | Canonical `GATE_PROJECT_ROOT` the DB belongs to (macOS shows `/private/var` for `/var`) |
+| `projectRoot` | Path filter applied to the totals below |
+| `totalEntries` | Files cached under that path |
+| `totalHits` | Times an unchanged file was served from cache |
+| `totalTokensSaved` | Cumulative raw-file tokens minus cached-view tokens on those hits |
+| `topEntries` | Top 10 files by activity |
+
+**This MCP process** — reset when the server restarts, counts every repo the process served:
+
+| Field | Meaning |
+|---|---|
+| `files_considered` / `files_compressed` | Files Gate read / returned a smaller view for |
+| `input_bytes` / `output_bytes` | Raw file bytes in vs tool-result bytes out |
+| `estimated_tokens_before` / `estimated_tokens_after` | Same, as BPE token estimates |
+| `cache_hits` | Dedup hits in this process |
+| `elapsed_ms` / `session_elapsed_ms` | Gate processing time / server uptime |
+
+Labels on every result:
+
+- `measurement_scope: "serialized_tool_result_excluding_mcp_envelope"` — what was measured.
+- `billingScope: "tool_payload_only"` — **not** your Cursor / provider bill. Your bill also includes prompts, history, rules, other tools, and model output.
+
+Example from one real session: `estimated_tokens_before: 6622`,
+`estimated_tokens_after: 666` → Gate tool results were ~90% smaller than the
+raw files. That is the honest claim; it is not "90% off your bill".
+
Multi-repo / one global MCP
@@ -385,7 +492,7 @@ With gatemcp (agent actually calls Gate):
## By the numbers
-- **`@gatemcp/cli@0.5.7`** on npm — binary `gatemcp`
+- **`@gatemcp/cli@0.5.8`** on npm — binary `gatemcp`
- **Catalog-first** tool surface (schema anti-bloat)
- **12** tools (6 hot-path in catalog + long tail via `gate_invoke`)
- **20+** languages via tree-sitter / regex fallback
@@ -454,7 +561,9 @@ Codex: remove the plugin from the Codex UI / plugin list. Source installs: `npm
| Area | Behavior |
|------|----------|
-| **Opt-in only** | Zero savings if the agent never calls Gate |
+| **Opt-in only** | Zero savings if the agent never calls Gate — see [what Gate compresses](#what-gate-compresses) |
+| **Code generation** | Model output is never compressed; Gate only shrinks tool results |
+| **Native SQLite** | IDE must run the same Node that installed Gate — see [Pin Node](#pin-node-for-sqlite) |
| **gate graph vs graphify** | Different graphs; use `graphify_*` for communities |
| **Graph savings %** | Symbol queries use a modeled baseline; `graphify_map` baselines the report file |
| **Cursor MCP name** | May appear as `user-gatemcp` |
@@ -491,6 +600,22 @@ Node **20** and **22–26** (Node 21 unsupported by required better-sqlite3).
## Changelog
+v0.5.8 — dependency security fixes, end-user docs
+
+**Security.** `sharp` 0.35.3 → 0.35.5 (libheif / librsvg advisories). Lockfile
+refresh clears transitive advisories in `proxy-addr`, `ip-address`, `fast-uri`,
+`hono`, and `qs`. `npm audit --omit=dev` reports 0.
+
+**Docs.** [What Gate compresses](#what-gate-compresses),
+[reading `gate_session_stats`](#reading-gate-session-stats), and
+[pinning Node for SQLite](#pin-node-for-sqlite).
+
+**QA.** macOS `/var` vs `/private/var` canonical-path fixes in test scripts.
+No tool behavior changes.
+
+
+
+
v0.5.7 — catalog mode, required SQLite, symbol HTML
**Schema budget.** Default `GATE_TOOL_MODE=catalog` lists six core tools plus
diff --git a/docs/AGENT-HARNESS.md b/docs/AGENT-HARNESS.md
new file mode 100644
index 0000000..a3316ca
--- /dev/null
+++ b/docs/AGENT-HARNESS.md
@@ -0,0 +1,141 @@
+# Gate MCP — agent harness (proof-based loops)
+
+**Audience:** Cursor/Codex agent working **in this repo** with an **orchestrator** parent.
+**Rule:** Do not claim “done” until **commands below pass** or you document a **blocked** external dependency with evidence.
+
+---
+
+## 1. North-star goal
+
+Make Gate MCP **measurably** reduce agent context cost **without** fake savings, broken cache partitions, or silent SQLite fallback — while staying honest in `gate_session_stats` (`measurement_scope`).
+
+Success = green `npm run qa` (or agreed subset) + `gatemcp doctor --strict` + MCP acceptance + reproducible demo (React `ReactFiberWorkLoop.js` compress vs full read).
+
+---
+
+## 2. Orchestrator responsibilities (parent chat)
+
+The **orchestrator** does **not** implement large diffs inline when 3+ files or failing QA.
+
+| Step | Action |
+|------|--------|
+| Plan | Write `DELEGATE-PLAN.md` at repo root with tasks, owners, acceptance commands |
+| Spawn | `delegate-implementer` (Composer 2.5 standard) for code; `delegate-explore` for read-only; `delegate-research` (Grok) max 1× per goal |
+| Brief | Every subagent prompt includes: repo path, files in scope, **do not touch**, AC command output required |
+| Verify | Reject worker if no command output, no diff, or “done” without test line |
+| Integrate | Parent runs `npm test` / `test:mcp` after each merge slice |
+| Stop | Only when AC green or user accepts **blocked** with issue link |
+
+**Forbidden:** marking todos complete before tests run; inventing `savingsPercent`; shipping with `expanded: true` reported as win.
+
+---
+
+## 3. Worker proof requirements
+
+Every implementation task must return:
+
+```markdown
+## Result
+- Status: pass | fail | blocked
+- Changed files: …
+- Commands: (copy/paste exit code + last 20 lines)
+- Tests: which script proved it
+- Blockers: …
+```
+
+### Minimum proof ladder (run in order)
+
+| Level | Command | When |
+|-------|---------|------|
+| L1 | `npm run build` | After any TS change |
+| L2 | `npm run test:unit` | Default per PR slice |
+| L3 | `npm test` | Before “feature complete” (includes qa-multi-repo + adversarial) |
+| L4 | `npm run test:mcp` | Catalog mode / `gate_invoke` / tool list changes |
+| L5 | `npm run test:doctor` | Cache / `GATE_PROJECT_ROOT` / SQLite changes |
+| L6 | `npm run qa` | Release candidate only |
+
+Use **Jest/Playwright/Selenium** only if you add them to this repo; today proof is **Node regression scripts** in `scripts/` and `dist/*-regression.js` — prefer extending those over new frameworks unless orchestrator approves.
+
+---
+
+## 4. QA status (v0.5.7)
+
+**2026-10-12:** `npm test` → **49 passed, 0 failed**; `doctor --strict` → PASS.
+
+Fixed (test/QA only — production already canonicalized roots):
+
+- `src/test.ts` — Test 34 temp `GATE_PROJECT_ROOT` for AlgoTrading SMC; Test 42 canonical partition paths.
+- `scripts/qa-multi-repo-proof.mjs` — `cachePartition` compared via `fs.realpathSync.native`.
+
+Committed on branch `fix/qa-057` (based on `origin/main` 8547e2e, which already contains v0.5.7). Re-verified on that base: build 0, `npm test` 0 (49/0, multi-repo QA pass, adversarial `failedCount: 0`), `doctor --strict` PASS. Not published — npm still `0.5.7`. See `DELEGATE-PLAN.md`.
+
+---
+
+## 5. Session scan (what users actually hit)
+
+From Cursor transcripts under `Users-macbookair-Documents-Visual-Studio-Code-MCP-gate-mcp`:
+
+| Session theme | User need | Harness task |
+|---------------|-----------|--------------|
+| `90aaa126` (large) | Ship repo, graphify, multi-language, demo, docs | Keep `qa` green; demo script in README |
+| `7a7b7a61`, `9278e3be` | **Before/after** token demo on React work loop | Automate `scripts/` compare full read vs `gate_compress_file signature` |
+| `79c7d291` | GitHub badges, license, demo prompts | Docs only — no fake metrics |
+| **elite-kommo-bots** (this chat) | `Savings: n/a`, `persistentCache: false`, skipped stack | Docs: footer semantics; example `mcp.json` env block |
+
+Cross-project usage (not Gate repo): AlgoTrading, n8n-voice-memo, Drawbridge — use **per-repo** `GATE_PROJECT_ROOT`, not `~`.
+
+---
+
+## 6. Dogfood config (Aaron’s machine)
+
+After upgrade, **restart Cursor** so MCP reloads.
+
+Recommended `mcpServers.gatemcp.env` (per machine):
+
+```json
+{
+ "GATE_PROJECT_ROOT": "/Users/macbookair/Documents/Visual Studio Code/MCP/gate-mcp",
+ "GATE_CACHE_DB": "/Users/macbookair/Documents/Visual Studio Code/MCP/gate-mcp/.gate-mcp/cache.db"
+}
+```
+
+Switch `GATE_PROJECT_ROOT` when opening **elite-kommo-bots** or **elite-translations-tracker** (or pass `projectRoot` on every `gate_init`).
+
+**v0.5.7:** `toolMode=catalog` — long-tail tools via `gate_invoke`; acceptance in `npm run test:mcp`.
+
+**Cursor Node ABI:** If MCP errors with `NODE_MODULE_VERSION 127` vs `137`, pin MCP to the same Node that built `better-sqlite3` (e.g. nvm `node` + `dist/main.js` in `mcp.json`, not bare `gatemcp` under Cursor’s bundled Node). Restart Cursor after upgrade.
+
+---
+
+## 7. Agent loop template (paste into orchestrator chat)
+
+```text
+Goal:
+Repo: /Users/macbookair/Documents/Visual Studio Code/MCP/gate-mcp
+Done when: npm test exits 0 AND gatemcp doctor --strict passes
+Plan: DELEGATE-PLAN.md
+Workers: delegate-implementer only unless research blocked twice
+After each worker: parent runs npm run test:unit
+Do not commit unless user asks
+```
+
+---
+
+## 8. What “no other way” means
+
+Stop only if:
+
+- Upstream dependency broken (npm, native SQLite) — show `doctor --json` failure
+- User explicitly cancels
+- Issue requires design decision — list options, default recommendation, **no code**
+
+Otherwise: shrink scope, add test, loop.
+
+---
+
+## 9. Related docs
+
+- `ARCHITECTURE.md` — compression pipeline
+- `README.md` — install + changelog
+- Cursor skill: `~/.cursor/skills/gatemcp-workflow/SKILL.md`
+- Cursor skill: `~/.cursor/skills/delegate/SKILL.md`
diff --git a/package-lock.json b/package-lock.json
index 5b1d0c7..a0f1c2b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,19 +1,19 @@
{
"name": "@gatemcp/cli",
- "version": "0.5.7",
+ "version": "0.5.8",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@gatemcp/cli",
- "version": "0.5.7",
+ "version": "0.5.8",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.12.1",
"better-sqlite3": "12.10.0",
"gpt-tokenizer": "^2.8.1",
"jimp": "^1.6.0",
- "sharp": "0.35.3",
+ "sharp": "0.35.5",
"tesseract.js": "5.1.1",
"tree-sitter": "0.21.1",
"tree-sitter-javascript": "0.23.1",
@@ -30,7 +30,7 @@
"typescript": "^5.7.0"
},
"engines": {
- "node": ">=20.0.0 <27"
+ "node": "^20.0.0 || >=22.0.0 <27"
},
"optionalDependencies": {
"tree-sitter-bash": "0.23.3",
@@ -95,9 +95,9 @@
}
},
"node_modules/@img/sharp-darwin-arm64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz",
- "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.5.tgz",
+ "integrity": "sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==",
"cpu": [
"arm64"
],
@@ -113,13 +113,13 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.3.2"
+ "@img/sharp-libvips-darwin-arm64": "1.3.4"
}
},
"node_modules/@img/sharp-darwin-x64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz",
- "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.5.tgz",
+ "integrity": "sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==",
"cpu": [
"x64"
],
@@ -135,20 +135,20 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.3.2"
+ "@img/sharp-libvips-darwin-x64": "1.3.4"
}
},
"node_modules/@img/sharp-freebsd-wasm32": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz",
- "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.5.tgz",
+ "integrity": "sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==",
"license": "Apache-2.0",
"optional": true,
"os": [
"freebsd"
],
"dependencies": {
- "@img/sharp-wasm32": "0.35.3"
+ "@img/sharp-wasm32": "0.35.5"
},
"engines": {
"node": ">=20.9.0"
@@ -158,9 +158,9 @@
}
},
"node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz",
- "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.4.tgz",
+ "integrity": "sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==",
"cpu": [
"arm64"
],
@@ -174,9 +174,9 @@
}
},
"node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz",
- "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.4.tgz",
+ "integrity": "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==",
"cpu": [
"x64"
],
@@ -190,15 +190,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz",
- "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.4.tgz",
+ "integrity": "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==",
"cpu": [
"arm"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -209,15 +206,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz",
- "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.4.tgz",
+ "integrity": "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==",
"cpu": [
"arm64"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -228,15 +222,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz",
- "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.4.tgz",
+ "integrity": "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==",
"cpu": [
"ppc64"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -247,15 +238,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-riscv64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz",
- "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.4.tgz",
+ "integrity": "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==",
"cpu": [
"riscv64"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -266,15 +254,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz",
- "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.4.tgz",
+ "integrity": "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==",
"cpu": [
"s390x"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -285,15 +270,12 @@
}
},
"node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz",
- "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.4.tgz",
+ "integrity": "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==",
"cpu": [
"x64"
],
- "libc": [
- "glibc"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -304,15 +286,12 @@
}
},
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz",
- "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.4.tgz",
+ "integrity": "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==",
"cpu": [
"arm64"
],
- "libc": [
- "musl"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -323,15 +302,12 @@
}
},
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz",
- "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.4.tgz",
+ "integrity": "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==",
"cpu": [
"x64"
],
- "libc": [
- "musl"
- ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -342,15 +318,12 @@
}
},
"node_modules/@img/sharp-linux-arm": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz",
- "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.5.tgz",
+ "integrity": "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==",
"cpu": [
"arm"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -363,19 +336,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.3.2"
+ "@img/sharp-libvips-linux-arm": "1.3.4"
}
},
"node_modules/@img/sharp-linux-arm64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz",
- "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.5.tgz",
+ "integrity": "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==",
"cpu": [
"arm64"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -388,19 +358,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.3.2"
+ "@img/sharp-libvips-linux-arm64": "1.3.4"
}
},
"node_modules/@img/sharp-linux-ppc64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz",
- "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.5.tgz",
+ "integrity": "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==",
"cpu": [
"ppc64"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -413,19 +380,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.3.2"
+ "@img/sharp-libvips-linux-ppc64": "1.3.4"
}
},
"node_modules/@img/sharp-linux-riscv64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz",
- "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.5.tgz",
+ "integrity": "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==",
"cpu": [
"riscv64"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -438,19 +402,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-riscv64": "1.3.2"
+ "@img/sharp-libvips-linux-riscv64": "1.3.4"
}
},
"node_modules/@img/sharp-linux-s390x": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz",
- "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.5.tgz",
+ "integrity": "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==",
"cpu": [
"s390x"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -463,19 +424,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.3.2"
+ "@img/sharp-libvips-linux-s390x": "1.3.4"
}
},
"node_modules/@img/sharp-linux-x64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz",
- "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.5.tgz",
+ "integrity": "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==",
"cpu": [
"x64"
],
- "libc": [
- "glibc"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -488,19 +446,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.3.2"
+ "@img/sharp-libvips-linux-x64": "1.3.4"
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz",
- "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.5.tgz",
+ "integrity": "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==",
"cpu": [
"arm64"
],
- "libc": [
- "musl"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -513,19 +468,16 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.3.2"
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.4"
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz",
- "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.5.tgz",
+ "integrity": "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==",
"cpu": [
"x64"
],
- "libc": [
- "musl"
- ],
"license": "Apache-2.0",
"optional": true,
"os": [
@@ -538,17 +490,17 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.3.2"
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.4"
}
},
"node_modules/@img/sharp-wasm32": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz",
- "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.5.tgz",
+ "integrity": "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==",
"license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
"optional": true,
"dependencies": {
- "@emnapi/runtime": "^1.11.1"
+ "@emnapi/runtime": "^1.11.3"
},
"engines": {
"node": ">=20.9.0"
@@ -558,16 +510,16 @@
}
},
"node_modules/@img/sharp-webcontainers-wasm32": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz",
- "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.5.tgz",
+ "integrity": "sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==",
"cpu": [
"wasm32"
],
"license": "Apache-2.0",
"optional": true,
"dependencies": {
- "@img/sharp-wasm32": "0.35.3"
+ "@img/sharp-wasm32": "0.35.5"
},
"engines": {
"node": ">=20.9.0"
@@ -577,9 +529,9 @@
}
},
"node_modules/@img/sharp-win32-arm64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz",
- "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.5.tgz",
+ "integrity": "sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==",
"cpu": [
"arm64"
],
@@ -596,9 +548,9 @@
}
},
"node_modules/@img/sharp-win32-ia32": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz",
- "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.5.tgz",
+ "integrity": "sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==",
"cpu": [
"ia32"
],
@@ -615,9 +567,9 @@
}
},
"node_modules/@img/sharp-win32-x64": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz",
- "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.5.tgz",
+ "integrity": "sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==",
"cpu": [
"x64"
],
@@ -1046,12 +998,12 @@
}
},
"node_modules/@modelcontextprotocol/sdk": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
- "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
+ "version": "1.32.1",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz",
+ "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==",
"license": "MIT",
"dependencies": {
- "@hono/node-server": "^1.19.9",
+ "@hono/node-server": "^1.19.9 || ^2.0.5",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"content-type": "^1.0.5",
@@ -1361,9 +1313,9 @@
"license": "ISC"
},
"node_modules/content-disposition": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz",
- "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-2.0.1.tgz",
+ "integrity": "sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -1609,15 +1561,15 @@
}
},
"node_modules/express": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
- "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.3.0.tgz",
+ "integrity": "sha512-qCqy1xSoaugxOD4IVHb1ZWdkvCF2W3aE2okKouWj8VwJ+ztskSiXoBnCSJqfKT+cVPJhuJqe9YLbY425+Zh00g==",
"license": "MIT",
"dependencies": {
"accepts": "^2.0.0",
- "body-parser": "^2.2.1",
- "content-disposition": "^1.0.0",
- "content-type": "^1.0.5",
+ "body-parser": "^2.3.0",
+ "content-disposition": "^2.0.1",
+ "content-type": "^2.0.0",
"cookie": "^0.7.1",
"cookie-signature": "^1.2.1",
"debug": "^4.4.0",
@@ -1633,14 +1585,14 @@
"on-finished": "^2.4.1",
"once": "^1.4.0",
"parseurl": "^1.3.3",
- "proxy-addr": "^2.0.7",
- "qs": "^6.14.0",
+ "proxy-addr": "^2.0.8",
+ "qs": "^6.16.0",
"range-parser": "^1.2.1",
"router": "^2.2.0",
"send": "^1.1.0",
"serve-static": "^2.2.0",
"statuses": "^2.0.1",
- "type-is": "^2.0.1",
+ "type-is": "^2.1.0",
"vary": "^1.1.2"
},
"engines": {
@@ -1669,6 +1621,19 @@
"express": ">= 4.11"
}
},
+ "node_modules/express/node_modules/content-type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",
+ "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -1676,9 +1641,9 @@
"license": "MIT"
},
"node_modules/fast-uri": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz",
- "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==",
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
+ "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
"funding": [
{
"type": "github",
@@ -1865,9 +1830,9 @@
}
},
"node_modules/hono": {
- "version": "4.12.30",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.30.tgz",
- "integrity": "sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==",
+ "version": "4.13.13",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",
+ "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",
"license": "MIT",
"engines": {
"node": ">=16.9.0"
@@ -1963,9 +1928,9 @@
"license": "ISC"
},
"node_modules/ip-address": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
- "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
+ "version": "10.7.4",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.4.tgz",
+ "integrity": "sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg==",
"license": "MIT",
"engines": {
"node": ">= 12"
@@ -2423,9 +2388,9 @@
}
},
"node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
+ "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
"license": "MIT",
"dependencies": {
"forwarded": "0.2.0",
@@ -2433,6 +2398,10 @@
},
"engines": {
"node": ">= 0.10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/pump": {
@@ -2446,9 +2415,9 @@
}
},
"node_modules/qs": {
- "version": "6.15.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
- "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
+ "version": "6.16.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz",
+ "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==",
"license": "BSD-3-Clause",
"dependencies": {
"es-define-property": "^1.0.1",
@@ -2644,9 +2613,9 @@
"license": "ISC"
},
"node_modules/sharp": {
- "version": "0.35.3",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz",
- "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==",
+ "version": "0.35.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.5.tgz",
+ "integrity": "sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==",
"license": "Apache-2.0",
"dependencies": {
"@img/colour": "^1.1.0",
@@ -2660,31 +2629,31 @@
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.35.3",
- "@img/sharp-darwin-x64": "0.35.3",
- "@img/sharp-freebsd-wasm32": "0.35.3",
- "@img/sharp-libvips-darwin-arm64": "1.3.2",
- "@img/sharp-libvips-darwin-x64": "1.3.2",
- "@img/sharp-libvips-linux-arm": "1.3.2",
- "@img/sharp-libvips-linux-arm64": "1.3.2",
- "@img/sharp-libvips-linux-ppc64": "1.3.2",
- "@img/sharp-libvips-linux-riscv64": "1.3.2",
- "@img/sharp-libvips-linux-s390x": "1.3.2",
- "@img/sharp-libvips-linux-x64": "1.3.2",
- "@img/sharp-libvips-linuxmusl-arm64": "1.3.2",
- "@img/sharp-libvips-linuxmusl-x64": "1.3.2",
- "@img/sharp-linux-arm": "0.35.3",
- "@img/sharp-linux-arm64": "0.35.3",
- "@img/sharp-linux-ppc64": "0.35.3",
- "@img/sharp-linux-riscv64": "0.35.3",
- "@img/sharp-linux-s390x": "0.35.3",
- "@img/sharp-linux-x64": "0.35.3",
- "@img/sharp-linuxmusl-arm64": "0.35.3",
- "@img/sharp-linuxmusl-x64": "0.35.3",
- "@img/sharp-webcontainers-wasm32": "0.35.3",
- "@img/sharp-win32-arm64": "0.35.3",
- "@img/sharp-win32-ia32": "0.35.3",
- "@img/sharp-win32-x64": "0.35.3"
+ "@img/sharp-darwin-arm64": "0.35.5",
+ "@img/sharp-darwin-x64": "0.35.5",
+ "@img/sharp-freebsd-wasm32": "0.35.5",
+ "@img/sharp-libvips-darwin-arm64": "1.3.4",
+ "@img/sharp-libvips-darwin-x64": "1.3.4",
+ "@img/sharp-libvips-linux-arm": "1.3.4",
+ "@img/sharp-libvips-linux-arm64": "1.3.4",
+ "@img/sharp-libvips-linux-ppc64": "1.3.4",
+ "@img/sharp-libvips-linux-riscv64": "1.3.4",
+ "@img/sharp-libvips-linux-s390x": "1.3.4",
+ "@img/sharp-libvips-linux-x64": "1.3.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.4",
+ "@img/sharp-linux-arm": "0.35.5",
+ "@img/sharp-linux-arm64": "0.35.5",
+ "@img/sharp-linux-ppc64": "0.35.5",
+ "@img/sharp-linux-riscv64": "0.35.5",
+ "@img/sharp-linux-s390x": "0.35.5",
+ "@img/sharp-linux-x64": "0.35.5",
+ "@img/sharp-linuxmusl-arm64": "0.35.5",
+ "@img/sharp-linuxmusl-x64": "0.35.5",
+ "@img/sharp-webcontainers-wasm32": "0.35.5",
+ "@img/sharp-win32-arm64": "0.35.5",
+ "@img/sharp-win32-ia32": "0.35.5",
+ "@img/sharp-win32-x64": "0.35.5"
},
"peerDependenciesMeta": {
"@types/node": {
diff --git a/package.json b/package.json
index 9fd0796..f6be72d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@gatemcp/cli",
- "version": "0.5.7",
+ "version": "0.5.8",
"description": "Local context compression and repository navigation for MCP clients, with per-result measurements, multi-language AST views, graphs, TOON, and OCR.",
"type": "module",
"main": "dist/main.js",
@@ -85,7 +85,7 @@
"@modelcontextprotocol/sdk": "^1.12.1",
"gpt-tokenizer": "^2.8.1",
"jimp": "^1.6.0",
- "sharp": "0.35.3",
+ "sharp": "0.35.5",
"tesseract.js": "5.1.1",
"tree-sitter": "0.21.1",
"tree-sitter-javascript": "0.23.1",
@@ -144,11 +144,11 @@
"tree-sitter-yaml@0.5.0": true,
"tree-sitter-cli@0.23.2": true,
"tree-sitter-c@0.23.2": true,
- "sharp@0.35.3": true
+ "sharp@0.35.5": true
},
"overrides": {
- "hono": "4.12.30",
- "qs": "6.15.3",
+ "hono": "4.13.13",
+ "qs": "6.16.0",
"tree-sitter-c": "0.23.2",
"tree-sitter-cli": "0.23.2",
"@hono/node-server": "2.0.11"
diff --git a/plugins/gatemcp/.codex-plugin/plugin.json b/plugins/gatemcp/.codex-plugin/plugin.json
index e3b7314..5a30bc4 100644
--- a/plugins/gatemcp/.codex-plugin/plugin.json
+++ b/plugins/gatemcp/.codex-plugin/plugin.json
@@ -1,6 +1,6 @@
{
"name": "gatemcp",
- "version": "0.5.7+codex.20260725095358",
+ "version": "0.5.8+codex.20261012002917",
"description": "Local MCP context compression, repository graph navigation, and measurable token savings for Codex.",
"author": {
"name": "Gate MCP contributors",
diff --git a/plugins/gatemcp/.mcp.json b/plugins/gatemcp/.mcp.json
index 3ec20d7..4da8e79 100644
--- a/plugins/gatemcp/.mcp.json
+++ b/plugins/gatemcp/.mcp.json
@@ -7,7 +7,7 @@
"--yes",
"--strict-allow-scripts",
"--allow-scripts=better-sqlite3,sharp,tesseract.js,tree-sitter,tree-sitter-bash,tree-sitter-c,tree-sitter-c-sharp,tree-sitter-cli,tree-sitter-cpp,tree-sitter-css,tree-sitter-go,tree-sitter-html,tree-sitter-java,tree-sitter-javascript,tree-sitter-json,tree-sitter-kotlin,tree-sitter-php,tree-sitter-python,tree-sitter-ruby,tree-sitter-rust,tree-sitter-svelte,tree-sitter-swift,tree-sitter-typescript,tree-sitter-vue,tree-sitter-yaml",
- "--package=@gatemcp/cli@0.5.7",
+ "--package=@gatemcp/cli@0.5.8",
"--",
"gatemcp"
]
diff --git a/scripts/qa-consumer-html-install.mjs b/scripts/qa-consumer-html-install.mjs
index 1dd66fe..75558e4 100644
--- a/scripts/qa-consumer-html-install.mjs
+++ b/scripts/qa-consumer-html-install.mjs
@@ -1,12 +1,12 @@
#!/usr/bin/env node
/**
- * Consumer install proof: pack (or fetch) @gatemcp/cli@0.5.7 and exercise it
+ * Consumer install proof: pack (or fetch) @gatemcp/cli@0.5.8 and exercise it
* against the HTML/CSS/JS fixture as a fresh project — not the Gate source tree.
*
* Usage:
* node scripts/qa-consumer-html-install.mjs
- * GATE_CONSUMER_PACKAGE=@gatemcp/cli@0.5.7 node scripts/qa-consumer-html-install.mjs
- * GATE_CONSUMER_PACKAGE=file:./gatemcp-cli-0.5.7.tgz node ...
+ * GATE_CONSUMER_PACKAGE=@gatemcp/cli@0.5.8 node scripts/qa-consumer-html-install.mjs
+ * GATE_CONSUMER_PACKAGE=file:./gatemcp-cli-0.5.8.tgz node ...
*/
import assert from "node:assert/strict";
@@ -29,7 +29,7 @@ fs.cpSync(fixtureSrc, projectRoot, { recursive: true });
const cacheDb = path.join(projectRoot, ".gate-mcp", "cache.db");
fs.mkdirSync(path.dirname(cacheDb), { recursive: true });
-const expectedVersion = "0.5.7";
+const expectedVersion = "0.5.8";
let packageSpec = process.env.GATE_CONSUMER_PACKAGE?.trim();
function run(cmd, args, opts = {}) {
diff --git a/scripts/qa-multi-repo-proof.mjs b/scripts/qa-multi-repo-proof.mjs
index 46fc162..e305b99 100644
--- a/scripts/qa-multi-repo-proof.mjs
+++ b/scripts/qa-multi-repo-proof.mjs
@@ -218,6 +218,11 @@ try {
);
assert.equal(statsOk.billingScope, "tool_payload_only");
assert.ok(statsOk.cachePartition, "missing cachePartition");
+ assert.equal(
+ statsOk.cachePartition,
+ fs.realpathSync.native(parent),
+ "cachePartition must match canonical GATE_PROJECT_ROOT (/var vs /private/var)"
+ );
const statsEmpty = toolBody(
await send("tools/call", {
diff --git a/scripts/test-mcp-acceptance.mjs b/scripts/test-mcp-acceptance.mjs
index 7c48076..a2d9068 100644
--- a/scripts/test-mcp-acceptance.mjs
+++ b/scripts/test-mcp-acceptance.mjs
@@ -11,7 +11,9 @@ const repositoryRoot = path.resolve(import.meta.dirname, "..");
const { countTextTokens } = await import(
path.join(repositoryRoot, "dist/lib/tokenCounter.js")
);
-const fixtureRoot = fs.mkdtempSync(path.join(os.tmpdir(), "gatemcp-acceptance-"));
+const fixtureRoot = fs.realpathSync.native(
+ fs.mkdtempSync(path.join(os.tmpdir(), "gatemcp-acceptance-")),
+);
const cachePath = path.join(fixtureRoot, ".gate-mcp", "acceptance-cache.db");
fs.mkdirSync(path.dirname(cachePath), { recursive: true });
diff --git a/src/test.ts b/src/test.ts
index ca88dac..c4c7ed5 100644
--- a/src/test.ts
+++ b/src/test.ts
@@ -32,6 +32,7 @@ import {
isMemoryPersistent,
_resetMemoryDbForTests,
} from "./lib/memoryDb.js";
+import { canonicalizePath } from "./lib/pathGuard.js";
const DIVIDER = "═".repeat(60);
const PASS = "✅";
@@ -1091,7 +1092,9 @@ async function runTests(): Promise {
const algoSmc = "/Users/macbookair/Documents/Visual Studio Code/Python/AlgoTrading/crypto/strategies/active/smc";
if (fs.existsSync(path.join(algoSmc, "graphify-out/GRAPH_REPORT.md"))) {
console.error(`\n${INFO} Test 34: AlgoTrading SMC graphify_search OrderManager`);
+ const prevAlgoRoot = process.env.GATE_PROJECT_ROOT;
try {
+ process.env.GATE_PROJECT_ROOT = algoSmc;
const result = await handleGraphQuery({
projectRoot: algoSmc,
query: "OrderManager",
@@ -1107,6 +1110,9 @@ async function runTests(): Promise {
} catch (err) {
console.error(` ${FAIL} Error: ${err}`);
failed++;
+ } finally {
+ if (prevAlgoRoot === undefined) delete process.env.GATE_PROJECT_ROOT;
+ else process.env.GATE_PROJECT_ROOT = prevAlgoRoot;
}
} else {
console.error(`\n${INFO} Test 34: skipped (AlgoTrading SMC graph not on this machine)`);
@@ -1280,7 +1286,7 @@ async function runTests(): Promise {
!config.args
.find((arg) => arg.startsWith("--allow-scripts="))
?.includes("better-sqlite3") ||
- !config.args.includes("--package=@gatemcp/cli@0.5.7") ||
+ !config.args.includes("--package=@gatemcp/cli@0.5.8") ||
config.args.slice(-2).join(" ") !== "-- gatemcp"
) {
throw new Error("plugin server command is not an explicit pinned npm exec");
@@ -1406,9 +1412,10 @@ async function runTests(): Promise {
if (statsScoped.billingScope !== "tool_payload_only") {
throw new Error("session_stats missing billingScope");
}
- if (statsScoped.cachePartition !== tmpParent) {
+ const expectedPartition = canonicalizePath(tmpParent);
+ if (statsScoped.cachePartition !== expectedPartition) {
throw new Error(
- `cachePartition should be GATE_PROJECT_ROOT (${tmpParent}), got ${statsScoped.cachePartition}`
+ `cachePartition should be GATE_PROJECT_ROOT (${expectedPartition}), got ${statsScoped.cachePartition}`
);
}
const statsWrong = await handleSessionStats({ projectRoot: lockedRoot });
@@ -1710,8 +1717,8 @@ async function runTests(): Promise {
if (init.toolMode !== "catalog" && init.toolMode !== "full") {
throw new Error(`unexpected toolMode ${init.toolMode}`);
}
- if (init.version !== "0.5.7") {
- throw new Error(`expected version 0.5.7 got ${init.version}`);
+ if (init.version !== "0.5.8") {
+ throw new Error(`expected version 0.5.8 got ${init.version}`);
}
console.error(` ${PASS} toolMode=${init.toolMode} version=${init.version}`);
passed++;
diff --git a/src/tools/help.ts b/src/tools/help.ts
index 0785a0e..b9c37ed 100644
--- a/src/tools/help.ts
+++ b/src/tools/help.ts
@@ -359,7 +359,7 @@ export async function handleHelp(args: HelpInput): Promise {
// Directory mode — list all tools with one-line descriptions
if (!tool || tool === "all" || tool === "directory") {
const directory = [
- "# gatemcp Tool Directory (v0.5.7)",
+ "# gatemcp Tool Directory (v0.5.8)",
"",
"| Tool | Purpose |",
"|---|---|",
diff --git a/src/version.ts b/src/version.ts
index 7d66752..5f0396e 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1,2 +1,2 @@
/** Single source for gatemcp release version (MCP server + tools). */
-export const GATEMCP_VERSION = "0.5.7";
+export const GATEMCP_VERSION = "0.5.8";