Releases: hkcanan/katmer-code
0.5.2 — Review hygiene + refreshed screenshot
Cleans up the warnings flagged by the Obsidian community plugin automated review. The plugin already passed in 0.5.1; this just clears the warning list.
Changes
- Removed
builtin-modulespackage — replaced with Node'smodule.builtinModules. - Pinned all dependency versions exactly (no
^/~ranges). - Committed
package-lock.jsonso the automated review can verify the bundle. - Replaced 7 of 8
!importantCSS rules with.claude-native-rootspecificity. - Dropped the
:has()selector for the diff line-border indicator (perf warning). - Refreshed the top README screenshot showing the new Modern Sharp picker with multi-provider tabs and reasoning-effort selector.
No functional changes.
0.5.1 — Community plugin compliance
Fixes the automated plugin-check errors so the community directory check passes.
Changes
- minAppVersion: 1.4.0 → 1.8.7 — plugin uses APIs introduced after 1.4.0 (
Workspace.revealLeaffrom 1.7.2,Notice.noticeElfrom 1.8.7). The previous minimum was incorrect. - codemirror deps declared —
@codemirror/stateand@codemirror/viewwere used transitively; now independencies. - Removed unused imports (
rejectAllChanges,type InlineChange). - Replaced Element.innerHTML with textContent in CodeMirror hover widgets — addresses Obsidian's XSS guidance.
No functional changes for users — same multi-provider sidebar as v0.5.0, just plumbing fixes.
See CHANGELOG.md for the full v0.5.0 multi-provider feature list.
0.5.0 — Multi-provider: Claude + Gemini + Codex + Antigravity
Plugin is no longer Claude-only. Pick a provider per tab, run them side-by-side, and consult any model from another model's reply — all in the same conversation.
Why this rebuild
Anthropic's June 15 billing change moved Agent SDK and programmatic use off the Pro/Max subscription pool onto separately metered credits at full API rates. The plugin (which uses the SDK) effectively became a metered API client overnight. Rebuilt so it can drive your ChatGPT Plus and Google AI Pro plans too — three subscriptions you may already pay for, one sidebar.
What's in it
Four providers, per-tab routing
- Claude Code — Anthropic SDK + Pro/Max subscription
- Gemini —
geminiCLI + Google AI Pro / One OAuth - Codex —
codex exec --json+ ChatGPT Plus/Pro OAuth, reasoning effort wired throughmodel_reasoning_effort - Antigravity —
agy --print(chat only, until agy exposes structured output)
Each chat tab pins its own provider and model independently. New tabs inherit the active tab's provider. Tab strip shows a small provider-colored dot per tab.
Same-tab consult
Every assistant reply gets a small Consult button. Pick a provider (and optionally a specific model from the inline submenu) → that provider runs in the background → its response renders as a consultation card → active model synthesizes the two views — all without leaving the conversation.
In-plugin login
Provider chips with three states: ✓ ready / ⚠ login required / ✗ not installed. Click an amber chip:
- Claude / Codex: plugin spawns
claude auth login/codex loginitself, polls auth status until completion - Gemini / Antigravity: plugin opens Terminal.app with the right command (these are interactive TUIs)
CLAUDE.md auto-mirror
Toggle in settings. Mirrors both global (~/CLAUDE.md → ~/.gemini/GEMINI.md + ~/.codex/AGENTS.md) and vault scope (<vault>/CLAUDE.md → vault GEMINI.md + AGENTS.md). Watched with fs.watch. Only files written by the plugin (tagged with a header) are overwritten — your hand-written ones are left alone.
Mid-conversation switch markers
Horizontal divider when you flip provider or model. Provider switches add a warning that prior conversation context isn't carried across CLIs.
Per-model context tracking
Real input tokens against the model's actual window: Claude 200K–1M, Gemini 2.5/3.x ≈1M, Codex GPT-5.x 400K (mini 128K), Antigravity 1M. Catalog-driven, not a generic 200K fallback.
Skills run on every provider
/peer-review, /cite-verify, /lit-search etc. Native on Claude via ~/.claude/commands/; on other providers the plugin reads the skill markdown and prepends it to your prompt as system context.
Modern Sharp UI redesign
Mono brand header, segmented tab control, brand-color rails on tool calls and trigger, Raycast-style picker with sliding underline indicator, compact message footer (Copy + Consult), bottom-anchored "is thinking…" placeholder.
Bug fixes
- Tab switch was re-pushing already-accepted diffs to the editor — fixed by suppressing inline-diff replay during re-render.
changeRegistryStateField now also dedupes by id as defense-in-depth. - Gemini's
[Thought: true]reasoning markers stripped from text. - Tool calls that never receive a result event no longer hang on "Running" — marked as stalled when turn completes.
- 429 / capacity-exhausted responses surface a friendly hint instead of a Gaxios stack trace.
- Antigravity no longer hangs in "Thinking" — stdin closed immediately +
TERM=dumbso output flushes. - Codex flag corrections:
--json(not--experimental-json),--config web_search="live"(not--search),--sandbox workspace-writeso edits actually apply. - Codex auth detection falls back to
auth.jsonwhencodex login statusreturns empty stdout in Electron's non-TTY context. - Provider switch no longer rewrites the global default.
Known limitations
- Antigravity is text chat only until
agyadds structured output. No tool calls, no inline diff. - Gemini 3.x has
thinking_levelin the API but Gemini CLI hasn't exposed the flag yet (see google-gemini/gemini-cli#25122). Effort slider hidden on Gemini. - Gemini 3.x preview models hit Google capacity limits frequently — fallback to 2.5 Pro is one click in the picker.
- Switching provider mid-conversation works but loses context (each CLI has its own session state). The divider warns you about this.
- xhigh effort on Codex is only reachable by editing
~/.codex/config.tomldirectly; plugin maps "max" → "high" for broad model compatibility.
Install
- Install at least one provider CLI:
- `npm install -g @anthropic-ai/claude-code && claude`
- `npm install -g @google/gemini-cli && gemini`
- `npm install -g @openai/codex && codex login`
- `curl -fsSL https://antigravity.google/cli/install.sh | bash && agy`
- Download `main.js`, `manifest.json`, `styles.css` from this release.
- Copy them into `/.obsidian/plugins/katmer-code/`.
- Enable KatmerCode in Obsidian → Settings → Community Plugins.
- (Optional) Settings → KatmerCode → toggle Auto-mirror CLAUDE.md to other providers.
See CHANGELOG.md for the full list.
0.3.0 — SDK Compatibility & Stability Fixes
What's New
SDK Type Compatibility (fixes #2)
- Removed unsafe type casts for
BetaUsage— direct property access instead ofRecord<string, number>cast - Added intermediate
unknowncast forstream_eventto satisfy stricter TypeScript definitions - Upgraded
@anthropic-ai/claude-agent-sdkto^0.2.86
Permission Handling
- MCP tools now auto-allowed without permission prompt
- Abort signal support in
canUseTool— prevents dangling permission promises - Permission prompts dismissed automatically on session abort
Editor Stability
- Fixed decoration ordering in
RangeSetBuilder(collect-sort-build pattern) - Inline diffs suppressed during session resume replay — no ghost diffs on reopen
- Button placement improved: appears after last visual change, not end of range
Full Changelog
0.2.0 — Semantic Diff & Multi-Change Tracking
What's New
1M Context Window Fix
- Opus 4.6 now correctly gets 1M context (was stuck at 200K)
- CLI handles
[1m]suffix natively — removed unnecessary beta flag splitting
Semantic Diff (diff-match-patch)
- Word-level diffing instead of prefix/suffix — only actually changed words are highlighted
- Unchanged words in a rewritten paragraph stay normal (no more wall of red/green)
Multi-Change Tracking
- Multiple edits in one turn now all persist and can be individually accepted/rejected
- Content-based re-anchoring — changes survive external file reloads
Diff Bar
- Navigation bar above input:
◀ 1/3 ▶to jump between changes - Per-change Accept/Undo + bulk "✓ All" from one place
- Auto-hides when no pending changes
UI Improvements
- Always-visible colored ✓/✕ buttons on each change in the editor
- Compact chat cards (navigation moved to diff bar)
- Stable click handlers via CM6 widget
eq() - Yellow left-border on lines with pending changes