Releases: tomplex/lgtm
Releases · tomplex/lgtm
Release list
v0.7.0
Added
- Host-delivered channel routing: when an embedding host identifies itself with the
X-LGTM-Host: periscopeheader, the comment, review-submit, and refresh-analysis endpoints return the channel payload ({content, meta}) in the REST response instead of pushing it over LGTM's own MCP channel — letting the host deliver events to Claude over its own reliable channel rather than LGTM's long-lived SSE stream. - When embedded in periscope, the frontend sends the
X-LGTM-Hostheader and forwards returned channel payloads to the embedding host.
Fixed
- The plugin is installable from the marketplace again — added
marketplace.jsonand corrected the README install commands. - Diff line highlighting now runs against the full file, so hunks that open mid-string (or mid-comment) keep correct syntax coloring.
v0.6.0
Added
- Walkthrough embed mode:
?view=walkthroughURL parameter deep-links into the walkthrough surface at boot, the iframepostMessages walkthrough availability ({type: 'lgtm-walkthrough-availability', has}) to its parent so the host can conditionally show/hide its walkthrough tab, and in-frame mode-switch UI (the "← Back to diff" button and the header's "Walkthrough" toggle) is hidden when embedded. Lets tools like Periscope present LGTM's diff and walkthrough as separate tabs sharing one session. - Vim-style line cursor in the walkthrough surface —
j/k,Ctrl-d/Ctrl-u,gg/G, andc(start comment) navigate within a stop. - Block-highlight on walkthrough artifact diff and whole-file views (#8) — the artifact's lines stand out in their surrounding context.
- ESC inside an embedded iframe forwards to the parent window so the host's modal can close from focus inside LGTM.
Changed
- Walkthrough-author agent (
agents/walkthrough-author/AGENT.md) gained explicit Hunk sizing and Narrative style sections, and its stop-count guidance was relaxed — count now scales with logical complexity rather than fitting a soft 3–8 cap. Addresses #10 by steering the agent toward tighter declared ranges and more (smaller) stops instead of list-shaped narratives. - Vite bundle filenames no longer include content hashes —
dist/assets/index.jsanddist/assets/index.cssare stable across builds, which keeps the build-sync pre-push hook honest and cuts noise ingit diffbetween branches.
v0.5.0
[0.5.0] - 2026-05-18
Added
/lgtm analyzeaccepts an optional focus area (as skill arguments or stated conversationally, e.g. "analyze, I only care about the migration"). The file-classifier gives in-scope files full attention and rubber-stamps the rest with an "Outside requested focus." note; the synthesizer leads the overview, strategy, and groups with the focused changes.- Commit panel has a filter input — narrows the commit list by substring match against sha, message, author, and date. "Select all" / "Select none" act on the filtered subset.
- Embedded mode:
?embedded=1hides project chrome for embedding in iframes;?item=IDdeep-links to a specific file or document on load. - "Submit to GitHub PR" is now always visible in the submit dropdown — disabled with a tooltip when no PR is detected (or when on a non-diff view). The tooltip surfaces the specific
ghfailure reason ("gh CLI not installed", SAML enforcement error, etc.) when available, instead of a generic "no PR" message; the server logs the same reason under[pr-detect]. GET /open?path=<repo>redirects to the matching project review URL — lets external tools deep-link by repo path without knowing the project slug.
Changed
j/k(and arrow-key) navigation now scrolls the active row into view in the file sidebar, so paging through a long file list keeps the selection visible.- Phase group headers in the sidebar get more breathing room (top border + margin) instead of butting against the preceding file rows.
- "Asked Claude" comments are visually distinct from pending-review comments — accent-tinted background and a thicker accent left border.
- Symbol lookup requires ripgrep — the server fails loudly with an install hint if
rgis missing, instead of returning empty results. - Pre-commit hook runs prettier + eslint; pre-push hook verifies
dist/andfrontend/dist/are in sync with source.
Fixed
- New-file walkthrough stops now show distinct sections — pure-add hunks are sliced to their declared line span instead of bleeding into the next stop.
- LSP "go to definition" / "find references" results from
tsserverresolve correctly when the project lives under a symlinked path; location paths are canonicalized to match the session's repo root, and the underlying caught error is preserved for diagnostics. SessionManagercanonicalizes repoPath through symlinks before lookup, so projects opened via different but equivalent paths share a session.
Removed
- Dead
.group-header/.phase-headerCSS left over from the pre-tree sidebar.
v0.4.0
v0.4.0 - 2026-05-12
Added
- Iterative analysis refresh: the new
/lgtm refreshskill re-classifies only the files whose diff changed since the last analysis, and/lgtm analyzeautomatically delegates to it when a prior analysis exists. read_analysisMCP tool — returns the stored analysis as JSON plus re-rendered markdown, with per-file freshness metadata (stale / missing / removed files, stale synthesis).set_analysismerge mode — merges new file entries into the existing analysis, preserving untouched entries (with explicitremovedFilesfor drops) and blob-stamping each entry; broadcastsanalysis_changed.- Managed-Claude connection awareness: a per-project claim record that's cleaned up when the MCP transport closes,
GET /project/:slug/connection-statereporting claim + transport liveness, andPOST /project/:slug/refresh-analysiswhich pushes arefresh_analysis_requestedchannel notification to the claimed Claude session. The UI gains a header connection indicator and a refresh-analysis button. - Per-file staleness badges in the file sidebar and a stale-count chip in the analysis overview banner; the UI refetches freshness on
analysis_changed/git_changedSSE events. GET /project/:slug/analysis/freshnessREST endpoint.- GitHub Actions CI: lint, build, and test on push and pull request.
Changed
- Frontend source reformatted to Prettier defaults;
npm run format:checkis now enforced in CI.
v0.3.0
[0.3.0] - 2026-05-06
Added
- Keyboard shortcuts overlay: press
?from anywhere in the UI to see all shortcuts grouped by category (Navigation, Review, Search, Help).
Fixed
- Cmd-click symbol lookup ("peek") now resolves correctly when clicking on a usage of a symbol, not just on the declaration. The click offset was being computed inside the highlight.js token rather than across the whole line, so
ShortcutSection(and any other identifier rendered as its own highlighted span) only resolved when the line happened to contain a declaration TS could navigate to from column 0. /lgtmslash command no longer references the removedstartMCP tool; usesclaim_reviewsinstead.
v0.2.1
Fixed
walkthrough-authoragent now lives at the canonicalagents/walkthrough-author/AGENT.mdpath so Claude Code auto-discovers it. Previously at.claude-plugin/agents/, which is not a discovery path —/lgtm walkthroughand/lgtm preparewould fail to load the agent on marketplace installs.- Agent frontmatter uses the canonical
tools:field instead ofallowed-tools:(skill-only field). Thesynthesizerandfile-classifieragents previously inherited all tools because the wrong field name was silently ignored; they're now correctly restricted to their declared tool sets.
v0.2.0
[0.2.0] - 2026-05-06
Added
- Comments now surface a failed save with a retry affordance instead of silently swallowing the error (#2).
Fixed
- Server hardening: top-level error handlers, SSE keepalive, and
mkdirpon the review directory before write (#2). - Static file serving: corrected frontend
distpath and allowed dotfiles so installs under~/.claude/pluginswork (#1). - Hooks: symlink the data
node_modulesintoPLUGIN_ROOTso ESM resolution succeeds; added a marketplace smoke test.
v0.1.1
Fixed
- Marketplace install: rebuild
better-sqlite3afternpm install --ignore-scriptsso the native binding is actually built (#1).
Changed
- Plugin install/server output is captured to
${CLAUDE_PLUGIN_DATA}/install.logand${CLAUDE_PLUGIN_DATA}/server.loginstead of/dev/null, so failures surface.