codecortex 0.20.0__tar.gz → 0.22.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.
- {codecortex-0.20.0/src/codecortex.egg-info → codecortex-0.22.0}/PKG-INFO +2 -2
- {codecortex-0.20.0 → codecortex-0.22.0}/README.md +1 -1
- {codecortex-0.20.0 → codecortex-0.22.0/src/codecortex.egg-info}/PKG-INFO +2 -2
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codecortex.egg-info/SOURCES.txt +3 -1
- codecortex-0.22.0/src/codeintel/__init__.py +1 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/graph_backend.py +29 -17
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/providers/graph.py +338 -72
- codecortex-0.22.0/src/codeintel/wire_text.py +376 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_edge_confidence.py +11 -6
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_graph_failure_population.py +3 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_graph_provider.py +33 -5
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_graph_real.py +18 -5
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_null_reason_and_ripple.py +153 -1
- codecortex-0.22.0/tests/test_wire_text.py +233 -0
- codecortex-0.20.0/src/codeintel/__init__.py +0 -1
- {codecortex-0.20.0 → codecortex-0.22.0}/LICENSE +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/pyproject.toml +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/setup.cfg +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codecortex.egg-info/dependency_links.txt +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codecortex.egg-info/entry_points.txt +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codecortex.egg-info/requires.txt +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codecortex.egg-info/top_level.txt +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/__main__.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/agent_prompt.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/auth.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/c4.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/cache.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/__init__.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/_common.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/c4.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/doctor.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/gen_token.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/graph.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/index.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/install.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/map.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/prompt.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/query.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/reset.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/serve.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/serve_http.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/setup.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/commands/status.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/config.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/containment.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/doctor.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/gateway.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/graph_render.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/graph_resolution.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/grapher.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/http_server.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/indexer.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/injector.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/installer.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/loc.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/logconfig.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/mapper.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/metrics.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/onboarding.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/outcome.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/paths.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/policy.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/progress.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/provider.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/providers/__init__.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/providers/lsp.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/providers/none.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/providers/semantic.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/py.typed +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/query_ops.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/redact.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/reindexer.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/reset.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/searcher.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/semantic_db.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/server.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/source_kind.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/term.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/verify.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/viewer/__init__.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/src/codeintel/viewer/graph_template.html +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_agent_prompt.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_backend_reaper.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_c4.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_c4_model.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_c4_output.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cache.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_chunking.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cli_commands.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cli_help.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cli_install_dry_run.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cli_install_offer_injection.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_cold_process.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_config.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_corpus.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_docs_ci_claims.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_docs_deadcode_withdrawal.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_doctor.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_e2e.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_engine_adoption.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_enterprise.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_gateway.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_graph_stdin.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_grapher.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_hardening.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_http_auth.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_http_server.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_incompleteness.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_index_progress.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_indexer_binary.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_installer.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_integration.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_loc_census.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_lsp_language_coverage.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_lsp_provider.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_lsp_real.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_mapper.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_mcp_handshake.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_mcp_server.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_model_dimension.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_never_raise.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_onboarding.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_rbac.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_redaction_boundary.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_reindexer.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_rerank.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_reset.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_semantic_provider.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_source_kind.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_staleness.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_symbol_context.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_term.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_treesitter.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_verify.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_verify_call.py +0 -0
- {codecortex-0.20.0 → codecortex-0.22.0}/tests/test_version_skew.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codecortex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.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
|
|
@@ -281,7 +281,7 @@ Then it launches the exact command it registered and drives a real MCP handshake
|
|
|
281
281
|
```text
|
|
282
282
|
v claude: registered at /Users/you/.claude.json
|
|
283
283
|
|
|
284
|
-
v verified: codeintel 0.
|
|
284
|
+
v verified: codeintel 0.22.0 — 4 tools (code.query, code.status, code.doctor, code.map)
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
If the command is not on `PATH`, or the server fails to start, install says so and exits non-zero
|
|
@@ -244,7 +244,7 @@ Then it launches the exact command it registered and drives a real MCP handshake
|
|
|
244
244
|
```text
|
|
245
245
|
v claude: registered at /Users/you/.claude.json
|
|
246
246
|
|
|
247
|
-
v verified: codeintel 0.
|
|
247
|
+
v verified: codeintel 0.22.0 — 4 tools (code.query, code.status, code.doctor, code.map)
|
|
248
248
|
```
|
|
249
249
|
|
|
250
250
|
If the command is not on `PATH`, or the server fails to start, install says so and exits non-zero
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codecortex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.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
|
|
@@ -281,7 +281,7 @@ Then it launches the exact command it registered and drives a real MCP handshake
|
|
|
281
281
|
```text
|
|
282
282
|
v claude: registered at /Users/you/.claude.json
|
|
283
283
|
|
|
284
|
-
v verified: codeintel 0.
|
|
284
|
+
v verified: codeintel 0.22.0 — 4 tools (code.query, code.status, code.doctor, code.map)
|
|
285
285
|
```
|
|
286
286
|
|
|
287
287
|
If the command is not on `PATH`, or the server fails to start, install says so and exits non-zero
|
|
@@ -46,6 +46,7 @@ src/codeintel/server.py
|
|
|
46
46
|
src/codeintel/source_kind.py
|
|
47
47
|
src/codeintel/term.py
|
|
48
48
|
src/codeintel/verify.py
|
|
49
|
+
src/codeintel/wire_text.py
|
|
49
50
|
src/codeintel/commands/__init__.py
|
|
50
51
|
src/codeintel/commands/_common.py
|
|
51
52
|
src/codeintel/commands/c4.py
|
|
@@ -128,4 +129,5 @@ tests/test_term.py
|
|
|
128
129
|
tests/test_treesitter.py
|
|
129
130
|
tests/test_verify.py
|
|
130
131
|
tests/test_verify_call.py
|
|
131
|
-
tests/test_version_skew.py
|
|
132
|
+
tests/test_version_skew.py
|
|
133
|
+
tests/test_wire_text.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.22.0"
|
|
@@ -27,6 +27,7 @@ import threading
|
|
|
27
27
|
import time
|
|
28
28
|
from typing import Any
|
|
29
29
|
|
|
30
|
+
from codeintel import wire_text
|
|
30
31
|
from codeintel.outcome import Missing
|
|
31
32
|
|
|
32
33
|
|
|
@@ -162,18 +163,7 @@ class BackendClient:
|
|
|
162
163
|
)
|
|
163
164
|
if result.returncode != 0:
|
|
164
165
|
return self._FAIL # unsupported / error → let the raw-JSON fallback try
|
|
165
|
-
|
|
166
|
-
return json.loads(result.stdout)
|
|
167
|
-
except ValueError:
|
|
168
|
-
# The backend RAN and exited 0 — it simply did not answer in JSON. That is a
|
|
169
|
-
# dialect mismatch, not a failure, and it must not be folded into the same `None`
|
|
170
|
-
# as a crash: `codebase-memory-mcp` 0.10.x replaced the `{columns, rows}` payload
|
|
171
|
-
# this provider parses with a compact human-readable text format, so every op that
|
|
172
|
-
# is not `list_projects` (still JSON) silently returned "not in graph index" — on a
|
|
173
|
-
# repository that was fully indexed. Distinguishing it is what lets the caller say
|
|
174
|
-
# so instead of sending the user to re-index for the third time.
|
|
175
|
-
self._saw_unparsable = True
|
|
176
|
-
return self._UNPARSABLE
|
|
166
|
+
return self._decode(method, result.stdout)
|
|
177
167
|
except Exception:
|
|
178
168
|
return self._FAIL
|
|
179
169
|
|
|
@@ -190,14 +180,36 @@ class BackendClient:
|
|
|
190
180
|
)
|
|
191
181
|
if result.returncode != 0:
|
|
192
182
|
return self._FAIL
|
|
193
|
-
|
|
194
|
-
return json.loads(result.stdout)
|
|
195
|
-
except ValueError:
|
|
196
|
-
self._saw_unparsable = True
|
|
197
|
-
return self._UNPARSABLE
|
|
183
|
+
return self._decode(method, result.stdout)
|
|
198
184
|
except Exception:
|
|
199
185
|
return self._FAIL
|
|
200
186
|
|
|
187
|
+
def _decode(self, method: str, stdout: bytes) -> Any:
|
|
188
|
+
"""One backend reply, in whichever dialect the installed backend speaks.
|
|
189
|
+
|
|
190
|
+
Two are supported. 0.9.x answers in JSON. 0.10.x answers all but `list_projects` in a
|
|
191
|
+
compact human-readable text layout — passing `--json` does not undo that, it only wraps the
|
|
192
|
+
same text in an MCP envelope — and `wire_text` translates it back into the 0.9.x-shaped
|
|
193
|
+
dict every caller above this line already parses. Neither the ops nor the renderers learn
|
|
194
|
+
that a second dialect exists.
|
|
195
|
+
|
|
196
|
+
The ordering matters: JSON is tried first, so a 0.9.x backend never pays for the text path
|
|
197
|
+
and never risks a misparse. And the text path must still be able to FAIL — a reply that is
|
|
198
|
+
no longer in a shape this release understands has to reach `_UNPARSABLE`, because the
|
|
199
|
+
"your backend and this release do not agree on a wire format" answer is the only thing that
|
|
200
|
+
made the 0.9→0.10 break diagnosable instead of looking like an unindexed repository. A
|
|
201
|
+
parser that guessed rather than refused would take that away.
|
|
202
|
+
"""
|
|
203
|
+
try:
|
|
204
|
+
return json.loads(stdout)
|
|
205
|
+
except ValueError:
|
|
206
|
+
pass
|
|
207
|
+
parsed = wire_text.parse(method, stdout.decode("utf-8", "replace"))
|
|
208
|
+
if parsed is not None:
|
|
209
|
+
return parsed
|
|
210
|
+
self._saw_unparsable = True
|
|
211
|
+
return self._UNPARSABLE
|
|
212
|
+
|
|
201
213
|
def _clear_failure(self) -> None:
|
|
202
214
|
"""Reset the per-query failure record.
|
|
203
215
|
|