Skip to content

Releases: eralpozcan/vision-squeezer

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 22 Jul 01:49

Added

  • OpenCode, Gemini CLI, and Kimi CLI installer support. npx vision-squeezer install --client <opencode|gemini|kimi> now covers three more MCP clients:
    • OpenCodeopencode mcp add is interactive-only (no flags), so the installer writes the MCP entry directly into opencode.json (global ~/.config/opencode/opencode.json or project-root). No local scope.
    • Gemini CLIgemini mcp add --scope X vision-squeezer -- npx -y vision-squeezer@<version>. No local scope (user/project only, writes settings.json).
    • Kimi CLIkimi mcp add vision-squeezer -- npx -y vision-squeezer@<version>. No scope flag at all — always writes the single global ~/.kimi/mcp.json.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 21:49

Added

  • PyPI distribution. The Python bindings (pip install vision-squeezer) now publish to PyPI on every v* tag via python.yml, using GitHub Trusted Publishing (OIDC) — no API token. Wheels for linux x86_64/aarch64, macOS arm64, Windows x64, plus an sdist.

Changed

  • MCP registry publish is now automated. release.yml submits server.json to registry.modelcontextprotocol.io via mcp-publisher + GitHub OIDC, replacing the manual step that previously left the manifest stale.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 20:59

Added

  • optimize_image_batch MCP tool — optimize up to 64 images in a single tool call. Each entry takes the same arguments as optimize_image; the response is a per-image results array. A failing image yields an { "ok": false, "error": ... } entry without aborting the batch. Eliminates per-image round-trips when an agent processes galleries or document sets.

Security

  • Bounded image decode (decompression-bomb / OOM guard). decode_base64_image now caps base64 input length and decodes through image::Limits (max 16384px per dimension, 100 MP, RGBA allocation ceiling). A crafted, tiny-on-disk image declaring enormous dimensions can no longer exhaust memory on the MCP server. Covers both optimize_image and sandbox_execute, which share this decode path. (OWASP A03/A05.)

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 02:58

Added

  • Three new provider targets for token estimation and dimension snapping: llama, qwen, deepseek (CLI --model, MCP target_model).
    • Llama 3.2 / 3.3 Vision (Mllama) — 560×560 tiles, aspect-ratio canvas capped at 4 tiles, ~1601 tokens/tile. Source: transformers MllamaVisionConfig. (Llama 4's native-multimodal vision encoder is a different scheme and is not modeled.)
    • Qwen2-VL / 2.5-VL / 3-VL — 28px effective grid (14px patch × 2×2 merge), tokens = (W/28)·(H/28) bounded to [4, 16384]. Source: qwen_vl_utils.smart_resize.
    • DeepSeek-VL2 — SigLIP-SO400M-384 + 2× pixel-shuffle (14×14 = 196 tokens/tile), anyres (m·384, n·384) canvas with m·n ≤ 9; exact token layout 210 (global) + 1 (separator) + (nh·14)·(nw·14 + 1). Source: DeepSeek-VL2 paper §2 (arXiv:2412.10302, 13 Dec 2024) + reference processor. Open-weights; the win is local-inference context, not API billing.
  • Documentation site rebuilt on Nuxt UI + Nuxt Content (multi-page, auto sitemap / llms.txt / OG images). New per-provider pages with exact formulas, cited primary sources, verification dates, and proportional savings tables.

Notes

  • Formula constants were verified against primary sources (model configs, reference tokenizer code, technical reports) on 2026-06-11. Hosted-API per-tile billing can differ from a model's own token footprint — treat absolute numbers as indicative and the tile/patch counts as authoritative.

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 26 May 00:13

Fixed

  • postinstall.js no longer overwrites skills with stale inline content. Pre-0.3.5 versions hardcoded the SKILL.md text as JS string literals inside installSkills(), so every npm install / npx -y vision-squeezer clobbered ~/.claude/skills/vision-*/SKILL.md with the v0.3.0-era wording — including the false "Status: ✅ Using npx — always latest, no action needed" line that masked broken installs across the entire 0.3.x debugging session. The function now reads from the bundled plugins/vision-squeezer-mcp/skills/<name>/SKILL.md files shipped in the npm tarball, so both install paths (npm + Claude Code plugin marketplace) share one on-disk source of truth.
  • plugins/vision-squeezer-mcp/.mcp.json is now version-pinned. The plugin marketplace registration was npx -y vision-squeezer (unpinned), so users who installed via /plugin install vision-squeezer-mcp@vision-squeezer got the same npx cache-freeze bug the installer was already protecting against on its own path. Now reads ["-y", "vision-squeezer@<VERSION>"]. The release invariants in CLAUDE.md require this file to be bumped in lockstep with package.json.
  • vision-doctor + vision-upgrade MCP probes now run with cwd=$HOME. When the probe ran from the user's current shell cwd and the user happened to be inside the vision-squeezer project directory (whose package.json is name: vision-squeezer), npx detected the local package, skipped the install step, and the probe false-negatived with sh: vision-squeezer: command not found. Pinning the subprocess cwd to $HOME guarantees a neutral resolution context.

Changed

  • CLAUDE.md release invariants expanded to document the .mcp.json pinning rule (with a grep invariant for verification), the probe-cwd requirement, and the prohibition on inline SKILL.md content in postinstall.js. These all come from concrete bugs hit in 0.3.0–0.3.4.

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 25 May 19:49

Changed

  • Plugin marketplace consolidated to a single plugin. Previously the marketplace listed four separate plugins: vision-squeezer-mcp for the MCP server and three standalone plugins (vision-doctor, vision-upgrade, vision-stats) for the skills. End users had to run four /plugin install commands to get the full experience, and most stopped after the first — they then saw stale skill output (the marketplace cache was fresh, but the un-installed skills were shadowed by older user-level copies). The four plugin entries are now collapsed into one vision-squeezer-mcp plugin that bundles the MCP server and all three skills. /plugin install vision-squeezer-mcp@vision-squeezer is now the complete install.
  • The three skill directories moved from skills/<name>/ (repo root) to plugins/vision-squeezer-mcp/skills/<name>/ so they ship inside the plugin's source directory.

Breaking

  • Users who previously installed any of vision-doctor@vision-squeezer, vision-upgrade@vision-squeezer, or vision-stats@vision-squeezer as standalone plugins will see them disappear from the marketplace after /plugin marketplace update vision-squeezer. The same skills are now reachable by installing (or updating) vision-squeezer-mcp@vision-squeezer. Cleanup:
    /plugin remove vision-doctor@vision-squeezer
    /plugin remove vision-upgrade@vision-squeezer
    /plugin remove vision-stats@vision-squeezer
    /plugin update vision-squeezer-mcp@vision-squeezer
    
  • Older user-level skill copies at ~/.claude/skills/vision-{doctor,upgrade,stats}/ will shadow the bundled versions. Delete them after upgrading: rm -rf ~/.claude/skills/vision-doctor ~/.claude/skills/vision-upgrade ~/.claude/skills/vision-stats.

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 25 May 16:41

Fixed

  • npm tarball trimmed from 29 MB → 16 kB. The consolidated publish job in 0.3.2 downloaded GitHub Release artifacts into artifacts/ and dist/ before invoking npm publish, so npm packed the platform binaries (and a stale bundled macOS binary) into the npm tarball. .gitignore is not always honored by npm pack — add an explicit files allowlist in package.json listing only bin/install.js, bin/run.js, and postinstall.js. The runtime binary is still downloaded by postinstall.js from the GitHub Release on install.
  • vision-squeezer install now pins the MCP version. Old: claude mcp add vision-squeezer -- npx -y vision-squeezer. New: claude mcp add vision-squeezer -- npx -y vision-squeezer@<PKG_VERSION>. Without the @version suffix, npm's ~/.npm/_npx cache freezes users on whatever tarball was first resolved — multiple "MCP failed to connect" reports trace back to this. The pinned version busts the cache on every upgrade.

Changed

  • vision-upgrade skill rewritten for self-healing recovery. Now flushes ~/.npm/_npx, re-registers the MCP with the latest pinned version, and runs a real initialize probe against the registered command. --force mode wipes the cache and re-registers across all scopes. Replaces the previous version which falsely claimed npx users were "always on latest" (true before pinning, no longer true after).
  • vision-doctor skill rewritten for accurate, actionable diagnostics. Distinguishes cargo / npm-global / npx-pinned / npx-unpinned install modes, parses the pinned version out of the MCP registration, and actively probes the registered command via a JSON-RPC initialize request (portable python3 timeout — macOS has no GNU timeout). Failures surface the captured stderr verbatim and end with a one-line fix: vision-upgrade or vision-upgrade --force.
  • CLAUDE.md restructured: behavioral guidelines (Think Before Coding / Simplicity / Surgical Changes / Goal-Driven Execution) up top, project context (commands, architecture, release invariants, installer contract) below.

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 25 May 15:10

Fixed

  • Release pipeline: cargo publish no longer trips on the dirty working tree — when the three publish jobs were collapsed into one runner in 0.3.1, the download-artifact step left artifacts/ and dist/ as untracked files in the checkout. cargo publish refuses to run against a dirty git tree, so the crates.io step failed and the subsequent npm publish step never ran (both registries stayed pinned at 0.3.0 even though the GitHub Release for v0.3.1 was created). Reordered the steps so cargo publish runs first against a clean tree, then artifacts are downloaded for the GitHub Release + npm publish. Also added /artifacts/ and /dist/ to .gitignore as belt-and-suspenders in case the step order is ever shuffled.

Note

  • crates.io and npm have a 0.3.1 gap; both go from 0.3.0 → 0.3.2. The GitHub Release for v0.3.1 (binaries only) remains. No functional changes between 0.3.1 and 0.3.2 — this is purely a release-pipeline fix.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 25 May 14:07

Changed

  • release.yml collapsed three jobs into onerelease, publish-crates, and publish-npm previously ran on three separate runners. Each step is sub-minute work, so two of those runners were paying the ~30s boot cost for nothing. They're now sequential steps in a single publish job (saves ~1 minute of wall-clock per tag and avoids the multi-runner artifact-download dance).
  • python.yml no longer auto-builds on tags — PyPI publishing is still commented out in this file, so every tag was producing five sets of wheels that nothing consumed. Switched the trigger to workflow_dispatch only; re-enable the tag trigger once PyPI publishing is wired up.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 25 May 13:56

Fixed

  • MCP: notifications no longer get a responsenotifications/initialized (and any other JSON-RPC notification) is now correctly handled as a notification per the spec. Previously the server required an id field on every request, which caused notifications to fail parsing and emit a spurious parse error reply. Some clients interpreted that as a protocol failure, leading to ~30s connect timeouts on cold start.

Added

  • npx vision-squeezer install — interactive installer that prompts for the target CLI (Claude Code / Codex / Qwen), install method (plugin / mcp-add), and install scope (user / local / project), then runs the matching command. Use --client / --method / --scope / --yes flags for non-interactive setups.
  • vision-squeezer-mcp Claude Code plugin — bundles the MCP server config so users can install everything in one shot via /plugin install vision-squeezer-mcp@vision-squeezer. No manual claude mcp add required. Lives under plugins/vision-squeezer-mcp/ and is listed in .claude-plugin/marketplace.json.

Changed

  • README install section — leads with the plugin marketplace one-liner; documents the three mcp add scopes (user, local, project) explicitly instead of defaulting silently to local.
  • Plugin marketplace versions synced to crate/npm version (0.1.9 → 0.3.0).
  • CI cost reductions
    • ci.yml merged test + lint into a single check job (saves one runner spin-up per push), added paths-ignore for docs/markdown changes, and added concurrency.cancel-in-progress so superseded PR pushes are killed.
    • release.yml and python.yml got the same concurrency block to cancel re-tagged builds. Artifact retention dropped from the 90-day default to 7–14 days.
    • python.yml trimmed Python interpreters from 3.8..3.13 to 3.10..3.13 (3.8/3.9 are EOL) and dropped the Intel-macOS target (macos-latest is arm64 only — Intel would be billed at 10× the Linux rate).