Releases: stainless-code/codemap
v0.11.0
Minor Changes
-
#178
36106ffThanks @SutuSebastian! - Add structural duplicate detection:symbols.body_hashat index time (canonical function body AST) and bundledduplicatesrecipe. Schema version 39 — existing indexes rebuild on nextcodemaprun. Function-shaped symbols only; trivial one-line bodies skipped. Triage collisions withsnippet— shared control-flow skeletons can false-positive. -
#179
8595173Thanks @SutuSebastian! - Add churn × complexity hotspot ranking:file_churnrefreshed on every index from git history, withcodemap ingest-churn, MCP/HTTPingest_churn, and configchurn.filefor non-git repos. Schema version 40 — existing indexes rebuild on nextcodemaprun. Newchurn-complexity-hotspotsrecipe ranks files or symbols (by_symbol) by change frequency × complexity with normalized 0–100 scores andchurn_trend. Outcome aliashotspotsstill maps to fan-in. -
#173
d4982c4Thanks @SutuSebastian! - Add SonarSource cognitive complexity onsymbols(same function-shaped coverage as cyclomatic, including class methods). Schema version 38 — existing indexes rebuild on nextcodemaprun. New recipehigh-cognitive-complexity;high-complexity-untestedrows includecognitive_complexity.
Patch Changes
-
#177
bb8bae9Thanks @SutuSebastian! - Onaudit --base <ref>(CLI / MCP / HTTP), eachaddedrow carriesattribution: introduced | inherited(branch-new vs pre-existing at merge base).--summaryaddsadded_introduced/added_inheritedper delta. -
#172
cf7df2fThanks @SutuSebastian! - Addquery --format codeclimate(GitLab Code Quality JSON) andquery --format badge(markdown issue-count line orcodemap-badge/v1JSON via--badge-style json). Available on CLI, MCP, and HTTP query tools. -
#183
b509e4cThanks @SutuSebastian! - Add hash-stablemap_idandcodebase_maprouting hints tocontextresponses (CLI, MCP, HTTP). MCP initialize instructions now includemap_idand top hub paths. Opt out with--no-codebase-maporinclude_codebase_map: false; omitted whencompact. -
#176
16687a0Thanks @SutuSebastian! - Addcoverage-confirmed-deadrecipe: static dead exports withconfidence(highwhen ingested 0% coverage,mediumwhen unmeasured), plusreasonandcaller_count. -
#174
a11242eThanks @SutuSebastian! - Addreasonandevidence_jsoncolumns on high-judgment recipe rows (boundary-violations,deprecated-symbols,unimported-exports) so agents can cite detection path beforeapplyor manual edits. -
#175
af86d10Thanks @SutuSebastian! - Addhigh-crap-scorerecipe: CRAP ranking with measured coverage when ingested, or graph-estimated 85/40/0% tiers from test reachability otherwise.Extend
unimported-exportswithunresolved_import_blind_spotreason andevidence_json(unresolved import hop) so dead-export / high-CRAP triage does not over-trust the graph past alias blind spots. -
#181
aae172fThanks @SutuSebastian! - Scopecodemap impactand MCP/HTTPimpacthomonym symbols:--in/indisambiguates by defining file (same prefix/exact rules ascodemap show --in); unscoped homonyms union per-defining-file call graphs instead of merging by name only. Mismatched scope returns emptymatcheswithskipped_scope. -
#170
e74410cThanks @SutuSebastian! - MCPtools/listand HTTPGET /toolsexpose advisoryreadOnlyHint,destructiveHint, andidempotentHintper tool so clients can gate auto-approval. Apply tools carrydestructiveHint; read-only query tools carryreadOnlyHint. -
#180
a5caca8Thanks @SutuSebastian! - Harden read surfaces:codemap query --format …blocks index mutations via the same read-only guard as--json;codemap serverequires--tokenwhen--hostis not loopback (any127.0.0.0/8address counts as loopback, so--tokenstays optional on127.0.0.2and similar);codemap validate(and MCP/HTTPvalidate) can returnrejectedrows with optionalreason(path escapes project root|path escapes via symlink|path resolves outside project root) — outputpathkeys are always project-relative POSIX paths. -
#182
3568c5fThanks @SutuSebastian! -createCodemap()and the CLI now reject invalid project config at load time. A secondcreateCodemap()with a different project root in the same process throws (audit--baseworktree reindex is exempt). -
#184
fb73e0dThanks @SutuSebastian! -showandsnippetnow use fast equality lookup for exactnameand lonename:Tokenqueries (no wildcards); substring, multi-field, and FTS paths stay on the broader slow tier. CLI help, MCP tool descriptions, and bundled agent guidance document the two tiers.
v0.10.1
Patch Changes
-
#169
1632bddThanks @SutuSebastian! - Refresh runtime and toolchain dependencies (oxc-parser, oxc-resolver, oxfmt, oxlint, @clack/prompts, tinyglobby, and related dev tooling) to latest compatible releases. -
#166
4bfb067Thanks @SutuSebastian! - Addcodemap renameCLI alias for homonym-safe renames viaapply rename-preview(--define-in,--in-file,--kind). -
#167
231d6ccThanks @SutuSebastian! - Add MCP/HTTP transport parity for coverage ingest and query baselines: newingest_coveragetool (CLI twincodemap ingest-coverage --json) and optionalbaselineparam onquery/query_recipe(same diff envelope ascodemap query --baseline). Tool count 19 → 20.
v0.10.0
Minor Changes
-
#164
8c7064aThanks @SutuSebastian! - Add optional heuristic call edges (calls.provenance) for JSX parent→child composition. Schema rebuild to v37. Enable via.codemap/configsynthesis.heuristicCalls: true(default off). Bundled recipecalls-including-heuristic;call-pathexcludes heuristics by default. -
#162
6e50d77Thanks @SutuSebastian! - Add two-phase call resolution (unresolved_callsstaging,calls.callee_symbol_id/callee_resolution_kind). Schema version 36 — existing indexes rebuild on nextcodemaprun.
Patch Changes
7b0406aThanks @SutuSebastian! - Ship the apply substrate: recipe-drivencodemap applyfor stale imports, deprecated migrations, import-source moves, JSX prop renames, and scopedrename-preview(define_inhomonyms). Add--rows,--diff-input, fixpoint--until-empty, optional--commit,auto_fixable/--force, andapply.autoApplyRecipesallowlist. MCP/HTTP twins:apply,apply_rows,apply_diff_input.
v0.9.5
Patch Changes
- #160
b1e3d58Thanks @SutuSebastian! - Add CLI twins for MCP query composers and resources so shell-only consumers get the same JSON payloads:codemap query batch,trace,explore,node,file,schema,symbols, andcontext --include-snippets.
v0.9.4
Patch Changes
- #158
e8ea640Thanks @SutuSebastian! - Addcodemap agents init --targetsand--link-modefor non-interactive IDE wiring. Combine with--mcpto write MCP config only for selected integrations (e.g. Cursor + Copilot without Continue/Cline). Mutually exclusive with--interactive.
v0.9.3
Patch Changes
- #156
ae4a143Thanks @SutuSebastian! -codemap agents init --mcpnow includes--root ${workspaceFolder}in the VS Code / Copilot MCP config (.vscode/mcp.json), same as Cursor. Re-runcodemap agents init --mcpto upgrade an existing.vscode/mcp.jsonfrom older init output (or--interactiveand select Copilot only).
v0.9.2
Patch Changes
-
#152
150c6c6Thanks @SutuSebastian! - Adaptive snippet budgets fortrace,explore, andnodescale with indexed file count whenbudget_charsis omitted (explicit override unchanged).explorealso applies adaptive row limits internally (no transport override). -
#155
450ca2eThanks @SutuSebastian! -codemap agents initis safer on re-run: IDE mirrors sync bundled template paths only;--forceoverwrites IDE mirrors only when they carrycodemap-init:managedor match the legacy mirror heuristic (pre-marker bundled copies); invalid MCP JSON shapes are rejected instead of reset (even with--force). -
#149
41a4184Thanks @SutuSebastian! - Addindex_freshnessmetadata oncontext, MCP tool responses, HTTP headers, and boot stderr warnings so agents can detect commit drift, pending watcher sync, and disk-ahead-of-index states before trusting structural queries. -
#154
1bcca3aThanks @SutuSebastian! -codemap agents init --mcpwrites PM-aware MCP spawn commands (e.g.npx codemap,pnpm exec codemap,yarn exec codemap,bunx codemap, or dlx@stainless-code/codemap@latest) instead of assuming globalcodemapon PATH. -
#153
048278bThanks @SutuSebastian! - MCP session lifecycle hygiene: stdio disconnect detection (stdin EOF, stdout EPIPE, parent-PID poll) with graceful watcher shutdown on client exit; HTTPserve --watchrefcount-gates the watcher per request (5s release grace,/healthexcluded). No MCP idle shutdown. -
#151
e717652Thanks @SutuSebastian! - Richcontextbootstrap:start_herewith intent-ranked recipe cards, inline index summary, budget-capped hub leaders with export signatures (adaptive caps by repo size), debug-biased marker samples, and optionalinclude_snippetson MCP/HTTPcontext(no-op whencompact: true). Legacyhubskeeps the bundledfan-inrecipe default limit; preferstart_here.hub_leadersfor signatures.
v0.9.1
Patch Changes
- #146
7afc9ebThanks @SutuSebastian! - Fixcodemap --full(and other worker-pool parses) appearing to hang ~120s after stats print — clear parse timeout timers when workers respond instead of leaving orphanedsetTimeouthandles on the event loop.
v0.9.0
Minor Changes
-
#129
6648addThanks @SutuSebastian! - Add cross-process index lock withcodemap unlock, and append parse failures to<state-dir>/errors.log. -
#130
f5374b8Thanks @SutuSebastian! - Add per-file parse timeouts with worker recycle during full and incremental indexing; failures log to errors.log and appear in the index summary.
Patch Changes
-
#132
8a1de53Thanks @SutuSebastian! - Addaffected-testsrecipe andcodemap affectedCLI for reverse-dependency test selection from changed files. -
#135
c4b4b36Thanks @SutuSebastian! - Addcodemap agents init --mcp— project-level MCP config for Cursor, Claude Code, VS Code, Continue, Cline, Amazon Q (workspace.amazonq/default.json+ legacy.amazonq/mcp.json), and Gemini CLI (Windsurf when that integration is selected), with idempotent JSON merge and Claudemcp__codemap__*permissions. -
#138
829075cThanks @SutuSebastian! - Add field-qualified symbol discovery oncodemap show --queryand MCP/HTTPshow/snippetvia aqueryargument (kind:,name:,path:,in:+ optional free text). Includes parameterized SQL engine, optional FTS join,--print-sqlMoat-A transparency, and{matches, disambiguation?, warning?}envelope parity across CLI, MCP, and HTTP. -
#124
04c4aa7Thanks @SutuSebastian! - Honor--state-dirfor project recipes; populatefunction_params.owner_kind; register MCPfiles/symbolsresource templates with optional?in=filter; watcher fixes for custom state dirs. -
#133
386ffa6Thanks @SutuSebastian! - Add MCP/HTTPaffectedtool — same preprocessor ascodemap affected, composes theaffected-testsrecipe. RespectsCODEMAP_MCP_TOOLSallowlist. -
#126
ed4ca6bThanks @SutuSebastian! - Add MCP initialize server instructions (tool-selection playbook) andCODEMAP_MCP_TOOLSenv for subset tool registration. -
ee9f6b2Thanks @SutuSebastian! - Bumpoxc-parserto ^0.133.0 and@typescript/native-previewto the latest 7.0 dev build. -
9fa1e9dThanks @SutuSebastian! - Pin runtime and dev dependencies to exact versions inpackage.json(drop carets) and refreshbun.lock. Dev tooling:oxfmt0.52,oxlint1.67,@typescript/native-preview20260526. Oxlint 1.67 drops a redundant escape inshow-search-mode.tsglob regex (no behavior change). -
#131
a8cf25bThanks @SutuSebastian! - Addcall-pathandsymbol-neighborhoodquery recipes for cycle-safe call-graph tracing and bidirectional symbol exploration. -
#143
e475d20Thanks @SutuSebastian! - Fix type heritage resolve edge cases: default-import bases, re-export barrel incremental scope, homonym dedupe in ancestor walks, and(expression)complex extends handling. -
#142
a085ec6Thanks @SutuSebastian! - Addtype_heritagesubstrate and rewiretype-ancestors/type-descendantsrecipes to JOIN indexed heritage edges instead of parsingsymbols.signature. -
#141
bd5a1faThanks @SutuSebastian! - Addtype-ancestorsandtype-descendantsquery recipes for extends/implements hierarchy walks (backed by thetype_heritagesubstrate after #142). -
#127
4318cc4Thanks @SutuSebastian! - Add WSL watch policy (auto-disable on/mnt/*mounts) and opt-in git hooks for background incremental index when the watcher is off.
v0.8.0
Minor Changes
-
#107
f24f8b6Thanks @SutuSebastian! - Substrate tiers 1–6 remainder (excludes C.9 /files.is_entry). Schema bumpSCHEMA_VERSION27 → 34 — first run after upgrade auto-rebuilds.codemap/index.dbvia the existing version-mismatch path.Tier 1 — call + import precision
calls.{args_count,is_method_call,is_constructor_call,is_optional_chain}; constructor vs call dedup key fixsymbols.{return_type,is_async,is_generator}- Side-effect
import_specifiersrows (kind='side-effect') +import_idFK toimports
Tier 2 — bindings
bindings.resolution_kind='re-exported'when resolution walks a re-export chain
Tier 3 — JSX
- New tables
jsx_elements/jsx_attributes; extractor with per-file parent linking post-pass
Tier 5 — behavioral
- New tables
async_calls,try_catch,decorators,jsdoc_tags; context stack forin_loop/in_try
Tier 6 — module graph (no entry points)
dynamic_importstable + extractor- Post-pass
files.is_barreland parse-timefiles.has_side_effects
Recipes + goldens:
find-call-sites(extended),find-async-functions,find-dynamic-imports,find-barrel-files,find-side-effect-files,find-re-exported-bindings,find-side-effect-imports,find-jsx-usages,find-await-in-loop,find-swallowed-errors,find-decorator-usage,find-throws-jsdoc, plus golden coverage forfan-out-sample/fan-out-sample-jsonand substrate regression tests.Read-only CLI hardening:
printQueryResult(ad-hoccodemap query "<SQL>") now setsPRAGMA query_only = 1, closing the last gap vsqueryRows/executeQuery(#107).Out of scope: C.9 plugin layer (
files.is_entry, reachability-from-entry); tiers 7–13.Migration: No in-place DDL — rebuild on schema mismatch preserves user-data tables (
coverage,query_baselines,recipe_recency). Re-runcodemap --full(or any index) after upgrade.
Patch Changes
-
#118
665c19aThanks @SutuSebastian! - Reject apply targets that are symlinks so phase-2 rename cannot replace a link with a regular file. -
#117
5ee5f2eThanks @SutuSebastian! - Fail benchmark reindex runs when the spawned indexer exits non-zero instead of recording misleading timings. -
#109
02a628fThanks @SutuSebastian! - Validatecodemap index --filesoperands before indexing starts. -
#110
7767a97Thanks @SutuSebastian! - ValidateVERSIONoutput indetect-pmbefore writing GitHub Actions outputs. -
#112
ec31949Thanks @SutuSebastian! - Harden apply and diff-json path containment against traversal outside the project root. -
#123
54ad25aThanks @SutuSebastian! - Fix high-severity bugs (describe.each parent stack, git porcelain -z paths, CLI symlink entry, pr-comment TTY stdin), medium bugs (changed-since -z paths, perf baseline RUNS guard, qualified typeof, decorator args_text, for-of binding refs, HTTP body drain, benchmark regex validation, jsx INSERT RETURNING id, sqlite stmt cache on close), and low bugs (CLI parse guards, incremental delete transaction, apply summary.files, extension case, pnpm # paths, coverage db.transaction, impact walk delimiter, worker errors, pointer dedup, benchmark readAll visibility). -
#114
ae54ce0Thanks @SutuSebastian! - Fix diff preview deletions, config empty-array overrides, resolver path containment, impact call-site selection, and FTS cleanup on file delete. -
#122
4e191baThanks @SutuSebastian! - Run fullcheck(not build-only) inprepublishOnlyso npm publish cannot skip tests or typecheck. -
#113
126066dThanks @SutuSebastian! - Reject opaqueOrigin: nullincodemap serveCSRF checks. -
#120
17dcbd1Thanks @SutuSebastian! - Reject unexpected arguments oncodemap skillandcodemap ruleinstead of silently printing bundled content. -
#119
cf0532bThanks @SutuSebastian! - Print symbol signature incodemap snippetterminal output, matchingcodemap showand the documented contract. -
#116
a444c40Thanks @SutuSebastian! - Fix V8 coverage ingest so innermost-wins applies across all FunctionCoverage entries in a script, not per-function iteration order. -
#115
eb18750Thanks @SutuSebastian! - Fix watcher priming race, parse-worker stat errors, incremental rename cleanup, and several indexer extractor gaps (scopes, references, tests.each, process.env, CSS imports). -
#121
f5d013cThanks @SutuSebastian! - Reject malformedCODEMAP_PARSE_WORKERSvalues (e.g.2abc,1.5) instead of silently truncating withparseInt.