codecortex 0.24.1__tar.gz → 0.25.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. {codecortex-0.24.1/src/codecortex.egg-info → codecortex-0.25.0}/PKG-INFO +3 -2
  2. {codecortex-0.24.1 → codecortex-0.25.0}/README.md +2 -1
  3. {codecortex-0.24.1 → codecortex-0.25.0/src/codecortex.egg-info}/PKG-INFO +3 -2
  4. {codecortex-0.24.1 → codecortex-0.25.0}/src/codecortex.egg-info/SOURCES.txt +7 -0
  5. codecortex-0.25.0/src/codeintel/__init__.py +1 -0
  6. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/__main__.py +15 -9
  7. codecortex-0.25.0/src/codeintel/changed_range.py +481 -0
  8. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/status.py +10 -0
  9. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/doctor.py +48 -2
  10. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_answer.py +220 -17
  11. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_backend.py +191 -25
  12. codecortex-0.25.0/src/codeintel/graph_changed.py +905 -0
  13. codecortex-0.25.0/src/codeintel/graph_confidence.py +325 -0
  14. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_edges.py +53 -0
  15. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_ops.py +135 -31
  16. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/provider.py +4 -0
  17. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/providers/graph.py +146 -102
  18. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/reindexer.py +7 -2
  19. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/server.py +32 -9
  20. codecortex-0.25.0/src/codeintel/symbol_diff.py +518 -0
  21. codecortex-0.25.0/tests/test_backend_failure_detail.py +449 -0
  22. codecortex-0.25.0/tests/test_changed_range.py +1352 -0
  23. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_doctor.py +179 -0
  24. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_edge_confidence.py +370 -0
  25. codecortex-0.25.0/tests/test_edge_endpoint_cap.py +253 -0
  26. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_graph_failure_population.py +5 -1
  27. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_graph_real.py +6 -2
  28. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_reindexer.py +3 -0
  29. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_summary_integrity.py +61 -0
  30. codecortex-0.25.0/tests/test_symbol_diff.py +335 -0
  31. codecortex-0.24.1/src/codeintel/__init__.py +0 -1
  32. codecortex-0.24.1/src/codeintel/graph_confidence.py +0 -155
  33. {codecortex-0.24.1 → codecortex-0.25.0}/LICENSE +0 -0
  34. {codecortex-0.24.1 → codecortex-0.25.0}/pyproject.toml +0 -0
  35. {codecortex-0.24.1 → codecortex-0.25.0}/setup.cfg +0 -0
  36. {codecortex-0.24.1 → codecortex-0.25.0}/src/codecortex.egg-info/dependency_links.txt +0 -0
  37. {codecortex-0.24.1 → codecortex-0.25.0}/src/codecortex.egg-info/entry_points.txt +0 -0
  38. {codecortex-0.24.1 → codecortex-0.25.0}/src/codecortex.egg-info/requires.txt +0 -0
  39. {codecortex-0.24.1 → codecortex-0.25.0}/src/codecortex.egg-info/top_level.txt +0 -0
  40. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/agent_prompt.py +0 -0
  41. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/auth.py +0 -0
  42. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/c4.py +0 -0
  43. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/c4_check.py +0 -0
  44. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/c4_layers.py +0 -0
  45. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/cache.py +0 -0
  46. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/__init__.py +0 -0
  47. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/_common.py +0 -0
  48. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/c4.py +0 -0
  49. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/doctor.py +0 -0
  50. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/gen_token.py +0 -0
  51. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/graph.py +0 -0
  52. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/index.py +0 -0
  53. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/install.py +0 -0
  54. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/map.py +0 -0
  55. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/prompt.py +0 -0
  56. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/query.py +0 -0
  57. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/reset.py +0 -0
  58. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/serve.py +0 -0
  59. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/serve_http.py +0 -0
  60. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/setup.py +0 -0
  61. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/commands/uninstall.py +0 -0
  62. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/config.py +0 -0
  63. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/containment.py +0 -0
  64. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/filelock.py +0 -0
  65. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/gateway.py +0 -0
  66. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_render.py +0 -0
  67. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_resolution.py +0 -0
  68. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/graph_targets.py +0 -0
  69. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/grapher.py +0 -0
  70. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/http_server.py +0 -0
  71. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/indexer.py +0 -0
  72. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/injector.py +0 -0
  73. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/installer.py +0 -0
  74. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/lang_config.py +0 -0
  75. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/loc.py +0 -0
  76. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/logconfig.py +0 -0
  77. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/mapper.py +0 -0
  78. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/metrics.py +0 -0
  79. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/onboarding.py +0 -0
  80. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/outcome.py +0 -0
  81. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/paths.py +0 -0
  82. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/per_thread.py +0 -0
  83. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/policy.py +0 -0
  84. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/progress.py +0 -0
  85. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/providers/__init__.py +0 -0
  86. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/providers/lsp.py +0 -0
  87. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/providers/none.py +0 -0
  88. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/providers/semantic.py +0 -0
  89. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/py.typed +0 -0
  90. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/query_ops.py +0 -0
  91. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/redact.py +0 -0
  92. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/reset.py +0 -0
  93. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/searcher.py +0 -0
  94. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/semantic_db.py +0 -0
  95. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/source_kind.py +0 -0
  96. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/term.py +0 -0
  97. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/verify.py +0 -0
  98. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/viewer/__init__.py +0 -0
  99. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/viewer/graph_template.html +0 -0
  100. {codecortex-0.24.1 → codecortex-0.25.0}/src/codeintel/wire_text.py +0 -0
  101. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_agent_prompt.py +0 -0
  102. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_backend_reaper.py +0 -0
  103. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_background_index_failure.py +0 -0
  104. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_bench_corpus_typed.py +0 -0
  105. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_bench_gate.py +0 -0
  106. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_bench_oracle.py +0 -0
  107. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_bench_oracle_ts.py +0 -0
  108. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_c4.py +0 -0
  109. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_c4_check.py +0 -0
  110. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_c4_layers.py +0 -0
  111. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_c4_model.py +0 -0
  112. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_c4_output.py +0 -0
  113. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cache.py +0 -0
  114. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_chunking.py +0 -0
  115. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cli_commands.py +0 -0
  116. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cli_help.py +0 -0
  117. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cli_install_dry_run.py +0 -0
  118. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cli_install_offer_injection.py +0 -0
  119. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_cold_process.py +0 -0
  120. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_config.py +0 -0
  121. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_corpus.py +0 -0
  122. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_could_not_ask_semantic.py +0 -0
  123. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_docs_ci_claims.py +0 -0
  124. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_docs_deadcode_withdrawal.py +0 -0
  125. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_docs_trust_claims.py +0 -0
  126. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_e2e.py +0 -0
  127. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_engine_adoption.py +0 -0
  128. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_enterprise.py +0 -0
  129. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_gateway.py +0 -0
  130. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_graph_provider.py +0 -0
  131. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_graph_stdin.py +0 -0
  132. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_grapher.py +0 -0
  133. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_hard_exit.py +0 -0
  134. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_hardening.py +0 -0
  135. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_http_auth.py +0 -0
  136. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_http_server.py +0 -0
  137. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_incompleteness.py +0 -0
  138. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_index_failure_reason.py +0 -0
  139. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_index_incompleteness.py +0 -0
  140. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_index_progress.py +0 -0
  141. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_indexer_binary.py +0 -0
  142. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_installer.py +0 -0
  143. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_integration.py +0 -0
  144. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_lang_config.py +0 -0
  145. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_loc_census.py +0 -0
  146. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_lsp_language_coverage.py +0 -0
  147. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_lsp_provider.py +0 -0
  148. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_lsp_real.py +0 -0
  149. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_mapper.py +0 -0
  150. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_mcp_handshake.py +0 -0
  151. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_mcp_server.py +0 -0
  152. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_missing_target.py +0 -0
  153. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_model_dimension.py +0 -0
  154. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_never_raise.py +0 -0
  155. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_null_reason_and_ripple.py +0 -0
  156. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_onboarding.py +0 -0
  157. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_per_thread.py +0 -0
  158. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_query_budget.py +0 -0
  159. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_rbac.py +0 -0
  160. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_redaction_boundary.py +0 -0
  161. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_reindex_lock.py +0 -0
  162. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_rerank.py +0 -0
  163. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_reset.py +0 -0
  164. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_semantic_provider.py +0 -0
  165. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_source_kind.py +0 -0
  166. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_staleness.py +0 -0
  167. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_symbol_context.py +0 -0
  168. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_term.py +0 -0
  169. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_treesitter.py +0 -0
  170. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_uninstall.py +0 -0
  171. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_upgrade_path.py +0 -0
  172. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_verify.py +0 -0
  173. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_verify_call.py +0 -0
  174. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_version_skew.py +0 -0
  175. {codecortex-0.24.1 → codecortex-0.25.0}/tests/test_wire_text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codecortex
3
- Version: 0.24.1
3
+ Version: 0.25.0
4
4
  Summary: Local-first, MCP-native code-intelligence server — graph, LSP, and semantic search behind one safe code.query tool for coding agents.
5
5
  Author: Shammai Hamilton
6
6
  License-Expression: MIT
@@ -247,6 +247,7 @@ It's one call: `code.query(op, target, engine="auto")`. In `auto` mode (the defa
247
247
  | Project shape at a glance | `overview` | graph → lsp | modules, node/edge counts, languages |
248
248
  | Everything about one symbol | `context` | graph + lsp | both views merged |
249
249
  | **Impact of your uncommitted edits** | `changed` | graph | changed files → impacted symbols |
250
+ | **What a branch changes, and who still calls it** | `changed` with `target="main"` | graph + git | each removed / re-signed / rewritten function → callers the branch did not touch |
250
251
  | Refactor-risk hotspots | `hotspots` | graph | highest complexity / fan-in symbols |
251
252
  | Unreferenced (dead) code | `deadcode` | graph | **withdrawn and now retired** — a labelled corpus measured its precision at 25%; safe-nulls with `reason: "op-withdrawn"`, and no flag brings it back — [the measurement, and what to use instead](#deadcode-is-retired) |
252
253
 
@@ -539,7 +540,7 @@ Register codeintel as an MCP server (`codeintel install`) and the agent gets fou
539
540
  | MCP tool | HTTP equivalent | Purpose |
540
541
  |---|---|---|
541
542
  | `code.query` | `POST /code/query` | The main call — search, trace, understand (the `op` table above) |
542
- | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits |
543
+ | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits, plus `degraded`: engines that are installed but not working — see [docs/doctor.md](docs/doctor.md) |
543
544
  | `code.doctor` | `POST /code/doctor` | Per-engine health + repo index status, with a fix for each gap |
544
545
  | `code.map` | — | Generate/refresh `CODE_INTEL.md`, a static orientation file for hosts without MCP |
545
546
 
@@ -206,6 +206,7 @@ It's one call: `code.query(op, target, engine="auto")`. In `auto` mode (the defa
206
206
  | Project shape at a glance | `overview` | graph → lsp | modules, node/edge counts, languages |
207
207
  | Everything about one symbol | `context` | graph + lsp | both views merged |
208
208
  | **Impact of your uncommitted edits** | `changed` | graph | changed files → impacted symbols |
209
+ | **What a branch changes, and who still calls it** | `changed` with `target="main"` | graph + git | each removed / re-signed / rewritten function → callers the branch did not touch |
209
210
  | Refactor-risk hotspots | `hotspots` | graph | highest complexity / fan-in symbols |
210
211
  | Unreferenced (dead) code | `deadcode` | graph | **withdrawn and now retired** — a labelled corpus measured its precision at 25%; safe-nulls with `reason: "op-withdrawn"`, and no flag brings it back — [the measurement, and what to use instead](#deadcode-is-retired) |
211
212
 
@@ -498,7 +499,7 @@ Register codeintel as an MCP server (`codeintel install`) and the agent gets fou
498
499
  | MCP tool | HTTP equivalent | Purpose |
499
500
  |---|---|---|
500
501
  | `code.query` | `POST /code/query` | The main call — search, trace, understand (the `op` table above) |
501
- | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits |
502
+ | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits, plus `degraded`: engines that are installed but not working — see [docs/doctor.md](docs/doctor.md) |
502
503
  | `code.doctor` | `POST /code/doctor` | Per-engine health + repo index status, with a fix for each gap |
503
504
  | `code.map` | — | Generate/refresh `CODE_INTEL.md`, a static orientation file for hosts without MCP |
504
505
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codecortex
3
- Version: 0.24.1
3
+ Version: 0.25.0
4
4
  Summary: Local-first, MCP-native code-intelligence server — graph, LSP, and semantic search behind one safe code.query tool for coding agents.
5
5
  Author: Shammai Hamilton
6
6
  License-Expression: MIT
@@ -247,6 +247,7 @@ It's one call: `code.query(op, target, engine="auto")`. In `auto` mode (the defa
247
247
  | Project shape at a glance | `overview` | graph → lsp | modules, node/edge counts, languages |
248
248
  | Everything about one symbol | `context` | graph + lsp | both views merged |
249
249
  | **Impact of your uncommitted edits** | `changed` | graph | changed files → impacted symbols |
250
+ | **What a branch changes, and who still calls it** | `changed` with `target="main"` | graph + git | each removed / re-signed / rewritten function → callers the branch did not touch |
250
251
  | Refactor-risk hotspots | `hotspots` | graph | highest complexity / fan-in symbols |
251
252
  | Unreferenced (dead) code | `deadcode` | graph | **withdrawn and now retired** — a labelled corpus measured its precision at 25%; safe-nulls with `reason: "op-withdrawn"`, and no flag brings it back — [the measurement, and what to use instead](#deadcode-is-retired) |
252
253
 
@@ -539,7 +540,7 @@ Register codeintel as an MCP server (`codeintel install`) and the agent gets fou
539
540
  | MCP tool | HTTP equivalent | Purpose |
540
541
  |---|---|---|
541
542
  | `code.query` | `POST /code/query` | The main call — search, trace, understand (the `op` table above) |
542
- | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits |
543
+ | `code.status` | `GET /code/status` | Per-engine `installed` / `runnable` / `repo_indexed` (plus `model_cached` for semantic), probed against the live engines a query actually hits, plus `degraded`: engines that are installed but not working — see [docs/doctor.md](docs/doctor.md) |
543
544
  | `code.doctor` | `POST /code/doctor` | Per-engine health + repo index status, with a fix for each gap |
544
545
  | `code.map` | — | Generate/refresh `CODE_INTEL.md`, a static orientation file for hosts without MCP |
545
546
 
@@ -15,6 +15,7 @@ src/codeintel/c4.py
15
15
  src/codeintel/c4_check.py
16
16
  src/codeintel/c4_layers.py
17
17
  src/codeintel/cache.py
18
+ src/codeintel/changed_range.py
18
19
  src/codeintel/config.py
19
20
  src/codeintel/containment.py
20
21
  src/codeintel/doctor.py
@@ -22,6 +23,7 @@ src/codeintel/filelock.py
22
23
  src/codeintel/gateway.py
23
24
  src/codeintel/graph_answer.py
24
25
  src/codeintel/graph_backend.py
26
+ src/codeintel/graph_changed.py
25
27
  src/codeintel/graph_confidence.py
26
28
  src/codeintel/graph_edges.py
27
29
  src/codeintel/graph_ops.py
@@ -54,6 +56,7 @@ src/codeintel/searcher.py
54
56
  src/codeintel/semantic_db.py
55
57
  src/codeintel/server.py
56
58
  src/codeintel/source_kind.py
59
+ src/codeintel/symbol_diff.py
57
60
  src/codeintel/term.py
58
61
  src/codeintel/verify.py
59
62
  src/codeintel/wire_text.py
@@ -82,6 +85,7 @@ src/codeintel/providers/semantic.py
82
85
  src/codeintel/viewer/__init__.py
83
86
  src/codeintel/viewer/graph_template.html
84
87
  tests/test_agent_prompt.py
88
+ tests/test_backend_failure_detail.py
85
89
  tests/test_backend_reaper.py
86
90
  tests/test_background_index_failure.py
87
91
  tests/test_bench_corpus_typed.py
@@ -94,6 +98,7 @@ tests/test_c4_layers.py
94
98
  tests/test_c4_model.py
95
99
  tests/test_c4_output.py
96
100
  tests/test_cache.py
101
+ tests/test_changed_range.py
97
102
  tests/test_chunking.py
98
103
  tests/test_cli_commands.py
99
104
  tests/test_cli_help.py
@@ -109,6 +114,7 @@ tests/test_docs_trust_claims.py
109
114
  tests/test_doctor.py
110
115
  tests/test_e2e.py
111
116
  tests/test_edge_confidence.py
117
+ tests/test_edge_endpoint_cap.py
112
118
  tests/test_engine_adoption.py
113
119
  tests/test_enterprise.py
114
120
  tests/test_gateway.py
@@ -154,6 +160,7 @@ tests/test_source_kind.py
154
160
  tests/test_staleness.py
155
161
  tests/test_summary_integrity.py
156
162
  tests/test_symbol_context.py
163
+ tests/test_symbol_diff.py
157
164
  tests/test_term.py
158
165
  tests/test_treesitter.py
159
166
  tests/test_uninstall.py
@@ -0,0 +1 @@
1
+ __version__ = "0.25.0"
@@ -96,7 +96,7 @@ _MODULES = {
96
96
  # here?" list end to end produced a working CLI and an agent that still greps. README's quickstart
97
97
  # is `setup --all` -> `install` -> `query`; `_START_HERE` now matches it.
98
98
  _EXAMPLES = [
99
- ('codeintel query --op changed --target ""', "what do my edits break?"),
99
+ ("codeintel query --op changed --target main", "what does this branch break?"),
100
100
  ("codeintel query --op callers --target foo", "who calls it?"),
101
101
  ("codeintel graph . --html", "open the call graph"),
102
102
  ("codeintel doctor", "why is a query empty?"),
@@ -263,12 +263,16 @@ Run this first, and again after big changes. `codeintel status` shows index
263
263
  age.""",
264
264
  "query": """examples:
265
265
  codeintel query --op changed
266
+ codeintel query --op changed --target main
266
267
  codeintel query --op callers --target build_parser
267
268
  codeintel query --op impact --target Gateway.query
268
269
  codeintel query --op search --target "where do we validate tokens"
269
270
  codeintel query --op hotspots --json
270
271
 
271
- `overview`, `changed` and `hotspots` ignore --target — omit it, or pass "".
272
+ `overview` and `hotspots` ignore --target — omit it, or pass "".
273
+ `changed` reads it as a base ref: omit it for your uncommitted edits, or pass
274
+ a ref (`main`, `HEAD~3`, a SHA) to see what a whole branch removed or
275
+ rewrote, and who still uses it.
272
276
  Prefer this over grep: results are ranked by graph importance, not by match
273
277
  order.
274
278
 
@@ -281,7 +285,7 @@ operations:
281
285
  chain how one symbol reaches another
282
286
  context search + symbol together
283
287
  pattern structural pattern match over the graph
284
- changed what your uncommitted edits ripple into --target ignored
288
+ changed what your edits break --target: optional base ref
285
289
  hotspots highest fan-in / complexity symbols --target ignored
286
290
  overview ranked architecture summary --target ignored
287
291
 
@@ -433,14 +437,16 @@ def build_parser() -> argparse.ArgumentParser:
433
437
  "--op", choices=QUERY_OPS, required=True,
434
438
  help="Which question to ask; see \"operations\" below",
435
439
  )
436
- # NOT required — `overview`/`changed`/`hotspots` ignore it, and every epilog example for those
437
- # ops used to show `--op changed` etc. with no `--target` at all, which the parser rejected
438
- # (`required=True` disagreeing with its own prose). A blank default lets those ops be run
439
- # exactly as documented, while `--target` stays available for the ops that read it.
440
+ # NOT required — `overview`/`changed`/`hotspots` need none (`changed` takes an optional base
441
+ # ref), and every epilog example for those ops used to show `--op changed` etc. with no
442
+ # `--target` at all, which the parser rejected (`required=True` disagreeing with its own
443
+ # prose). A blank default lets those ops be run exactly as documented, while `--target` stays
444
+ # available for the ops that read it.
440
445
  query_parser.add_argument(
441
446
  "--target", default="",
442
- help="Symbol name, or a natural-language query for `search`. Ignored (and safe to omit) "
443
- "by `overview`/`changed`/`hotspots`.",
447
+ help="Symbol name, or a natural-language query for `search`; for `changed`, an optional "
448
+ "base ref (`main`, `HEAD~3`) — empty means uncommitted edits only. Ignored (and "
449
+ "safe to omit) by `overview`/`hotspots`.",
444
450
  )
445
451
  query_parser.add_argument(
446
452
  "--engine", choices=QUERY_ENGINES, default="auto",