codespine 1.0.10__tar.gz → 1.0.12__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.
- {codespine-1.0.10 → codespine-1.0.12}/PKG-INFO +14 -7
- {codespine-1.0.10 → codespine-1.0.12}/README.md +13 -6
- {codespine-1.0.10 → codespine-1.0.12}/codespine/__init__.py +1 -1
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/deadcode.py +4 -4
- {codespine-1.0.10 → codespine-1.0.12}/codespine/cli.py +733 -223
- {codespine-1.0.10 → codespine-1.0.12}/codespine/config.py +3 -3
- {codespine-1.0.10 → codespine-1.0.12}/codespine/db/_cypher_compat.py +2 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/db/duckdb_store.py +38 -9
- {codespine-1.0.10 → codespine-1.0.12}/codespine/health.py +66 -9
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/engine.py +40 -18
- {codespine-1.0.10 → codespine-1.0.12}/codespine/mcp/server.py +64 -44
- codespine-1.0.12/codespine/project_state.py +225 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/tasks.py +36 -5
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/PKG-INFO +14 -7
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/SOURCES.txt +1 -0
- {codespine-1.0.10 → codespine-1.0.12}/pyproject.toml +1 -1
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_cypher_compat.py +16 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_deadcode.py +52 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_duckdb_store.py +36 -4
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_health.py +6 -2
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_tasks.py +27 -0
- {codespine-1.0.10 → codespine-1.0.12}/LICENSE +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/community.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/context.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/coupling.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/crossmodule.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/flow.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/analysis/impact.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/cache/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/cache/result_cache.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/db/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/db/schema.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/db/store.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/diff/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/diff/branch_diff.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/guide.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/call_resolver.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/di_resolver.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/java_parser.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/indexer/symbol_builder.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/mcp/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/noise/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/noise/blocklist.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/overlay/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/overlay/git_state.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/overlay/merge.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/overlay/store.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/bm25.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/fuzzy.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/hybrid.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/rrf.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/search/vector.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/sharding/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/sharding/router.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/sharding/store.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/watch/__init__.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/watch/git_hook.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine/watch/watcher.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/dependency_links.txt +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/entry_points.txt +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/requires.txt +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/codespine.egg-info/top_level.txt +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/gindex.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/setup.cfg +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_branch_diff_normalize.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_call_resolver.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_community_detection.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_index_and_hybrid.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_java_parser.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_multimodule_index.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_overlay.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_parse_resilience.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_result_cache.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_search_ranking.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_sharding.py +0 -0
- {codespine-1.0.10 → codespine-1.0.12}/tests/test_store_recovery.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codespine
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.12
|
|
4
4
|
Summary: Local Java code intelligence indexer backed by a graph database
|
|
5
5
|
Author: CodeSpine contributors
|
|
6
6
|
License: MIT License
|
|
@@ -66,7 +66,7 @@ Dynamic: license-file
|
|
|
66
66
|
|
|
67
67
|
# CodeSpine
|
|
68
68
|
|
|
69
|
-
**v1.0.
|
|
69
|
+
**v1.0.12** — Local Java code intelligence for coding agents, backed by a graph database.
|
|
70
70
|
|
|
71
71
|
CodeSpine cuts token burn for coding agents working on Java codebases.
|
|
72
72
|
|
|
@@ -111,6 +111,7 @@ pip install "codespine[ui]"
|
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
The current lite UI is dependency-free and served locally by CodeSpine; the `ui` extra is the stable add-on install target for the browser explorer.
|
|
114
|
+
Quotes are required in zsh: use `pip install "codespine[ui]"`, not `pip install codespine[ui]`.
|
|
114
115
|
|
|
115
116
|
Everything at once (ml + community detection):
|
|
116
117
|
|
|
@@ -323,12 +324,14 @@ Higher-level tools designed to answer full agent questions in a single call, wit
|
|
|
323
324
|
|
|
324
325
|
```bash
|
|
325
326
|
# Indexing
|
|
326
|
-
codespine analyse <path> # incremental index (default)
|
|
327
|
+
codespine analyse <path> # trust-first incremental index (default)
|
|
327
328
|
codespine analyse <path> --full # full re-index from scratch
|
|
328
|
-
codespine analyse <path> --budget 90
|
|
329
|
+
codespine analyse <path> --fast --budget 90 # budgeted partial core index
|
|
329
330
|
codespine analyse <path> --complete --deep # + communities, flows, dead code, coupling
|
|
330
331
|
codespine analyse <path> --complete --incremental-deep
|
|
331
332
|
codespine analyse <path> --embed # + vector embeddings
|
|
333
|
+
codespine repair <project-id-or-path> # retry failed or incomplete phase
|
|
334
|
+
codespine repair <project-id-or-path> --full # force full core rebuild
|
|
332
335
|
|
|
333
336
|
# Background jobs and local UI
|
|
334
337
|
codespine background # background task progress
|
|
@@ -381,7 +384,7 @@ codespine force-reset # emergency: delete all data files
|
|
|
381
384
|
|
|
382
385
|
`analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
|
|
383
386
|
|
|
384
|
-
`analyse`
|
|
387
|
+
`analyse` is trust-first by default: it completes the core graph in the foreground, validates and publishes the read replica, then keeps deep enrichment moving in the background. Use `--fast` only when you want a budgeted partial core index. Use `codespine background`, `codespine ui`, or `codespine repair` to inspect and recover incomplete or degraded work.
|
|
385
388
|
|
|
386
389
|
---
|
|
387
390
|
|
|
@@ -567,11 +570,15 @@ The deep analysis phase covers four passes that are expensive but optional:
|
|
|
567
570
|
| Dead code | Finds methods with no callers (Java-aware exemptions) | Cleanup audits |
|
|
568
571
|
| Change coupling | Analyses git history for co-changed file pairs | `get_change_coupling`, `related` |
|
|
569
572
|
|
|
570
|
-
**
|
|
573
|
+
**Trust-first default:** `codespine analyse` now treats success as “the core graph is complete, validated, and queryable.” The default foreground path finishes parse, DB writes, call resolution, type resolution, DI resolution, and snapshot publish before it returns. Deep enrichment still continues in the background unless you use `--complete --deep`.
|
|
574
|
+
|
|
575
|
+
**Fast mode:** `codespine analyse --fast` keeps the old budgeted behavior for large repos. If the budget expires before the core graph is complete, CodeSpine publishes a partial snapshot, marks the project as partial, and tracks the background continuation until the core graph is repaired.
|
|
571
576
|
|
|
572
577
|
**Health checks:** every analyse run now performs a small self-test query suite and reports index anomalies such as large projects with zero call edges. Use `codespine health` for the terminal dashboard or `codespine self-test --json` in CI.
|
|
573
578
|
|
|
574
|
-
**Background visibility:** `codespine background` shows
|
|
579
|
+
**Background visibility:** `codespine background` shows status, result, last phase, progress, and repair hints in the terminal, and `codespine tasks` remains available as the shorter registry view. `codespine ui` serves a local explorer with project state (`ready`, `enriching`, `partial`, `degraded`, `repair_required`), background tasks, and one-click Repair/Reindex actions at `http://127.0.0.1:8765`.
|
|
580
|
+
|
|
581
|
+
**Repair flows:** `codespine repair <project-id-or-path>` retries the failed or incomplete phase first. Use `--full` when the project needs a full core rebuild.
|
|
575
582
|
|
|
576
583
|
**Complete deep:** `--complete --deep` runs the expensive enrichment passes before returning. `--complete --incremental-deep` combines incremental file indexing with a forced full deep pass.
|
|
577
584
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CodeSpine
|
|
2
2
|
|
|
3
|
-
**v1.0.
|
|
3
|
+
**v1.0.12** — Local Java code intelligence for coding agents, backed by a graph database.
|
|
4
4
|
|
|
5
5
|
CodeSpine cuts token burn for coding agents working on Java codebases.
|
|
6
6
|
|
|
@@ -45,6 +45,7 @@ pip install "codespine[ui]"
|
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
The current lite UI is dependency-free and served locally by CodeSpine; the `ui` extra is the stable add-on install target for the browser explorer.
|
|
48
|
+
Quotes are required in zsh: use `pip install "codespine[ui]"`, not `pip install codespine[ui]`.
|
|
48
49
|
|
|
49
50
|
Everything at once (ml + community detection):
|
|
50
51
|
|
|
@@ -257,12 +258,14 @@ Higher-level tools designed to answer full agent questions in a single call, wit
|
|
|
257
258
|
|
|
258
259
|
```bash
|
|
259
260
|
# Indexing
|
|
260
|
-
codespine analyse <path> # incremental index (default)
|
|
261
|
+
codespine analyse <path> # trust-first incremental index (default)
|
|
261
262
|
codespine analyse <path> --full # full re-index from scratch
|
|
262
|
-
codespine analyse <path> --budget 90
|
|
263
|
+
codespine analyse <path> --fast --budget 90 # budgeted partial core index
|
|
263
264
|
codespine analyse <path> --complete --deep # + communities, flows, dead code, coupling
|
|
264
265
|
codespine analyse <path> --complete --incremental-deep
|
|
265
266
|
codespine analyse <path> --embed # + vector embeddings
|
|
267
|
+
codespine repair <project-id-or-path> # retry failed or incomplete phase
|
|
268
|
+
codespine repair <project-id-or-path> --full # force full core rebuild
|
|
266
269
|
|
|
267
270
|
# Background jobs and local UI
|
|
268
271
|
codespine background # background task progress
|
|
@@ -315,7 +318,7 @@ codespine force-reset # emergency: delete all data files
|
|
|
315
318
|
|
|
316
319
|
`analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
|
|
317
320
|
|
|
318
|
-
`analyse`
|
|
321
|
+
`analyse` is trust-first by default: it completes the core graph in the foreground, validates and publishes the read replica, then keeps deep enrichment moving in the background. Use `--fast` only when you want a budgeted partial core index. Use `codespine background`, `codespine ui`, or `codespine repair` to inspect and recover incomplete or degraded work.
|
|
319
322
|
|
|
320
323
|
---
|
|
321
324
|
|
|
@@ -501,11 +504,15 @@ The deep analysis phase covers four passes that are expensive but optional:
|
|
|
501
504
|
| Dead code | Finds methods with no callers (Java-aware exemptions) | Cleanup audits |
|
|
502
505
|
| Change coupling | Analyses git history for co-changed file pairs | `get_change_coupling`, `related` |
|
|
503
506
|
|
|
504
|
-
**
|
|
507
|
+
**Trust-first default:** `codespine analyse` now treats success as “the core graph is complete, validated, and queryable.” The default foreground path finishes parse, DB writes, call resolution, type resolution, DI resolution, and snapshot publish before it returns. Deep enrichment still continues in the background unless you use `--complete --deep`.
|
|
508
|
+
|
|
509
|
+
**Fast mode:** `codespine analyse --fast` keeps the old budgeted behavior for large repos. If the budget expires before the core graph is complete, CodeSpine publishes a partial snapshot, marks the project as partial, and tracks the background continuation until the core graph is repaired.
|
|
505
510
|
|
|
506
511
|
**Health checks:** every analyse run now performs a small self-test query suite and reports index anomalies such as large projects with zero call edges. Use `codespine health` for the terminal dashboard or `codespine self-test --json` in CI.
|
|
507
512
|
|
|
508
|
-
**Background visibility:** `codespine background` shows
|
|
513
|
+
**Background visibility:** `codespine background` shows status, result, last phase, progress, and repair hints in the terminal, and `codespine tasks` remains available as the shorter registry view. `codespine ui` serves a local explorer with project state (`ready`, `enriching`, `partial`, `degraded`, `repair_required`), background tasks, and one-click Repair/Reindex actions at `http://127.0.0.1:8765`.
|
|
514
|
+
|
|
515
|
+
**Repair flows:** `codespine repair <project-id-or-path>` retries the failed or incomplete phase first. Use `--full` when the project needs a full core rebuild.
|
|
509
516
|
|
|
510
517
|
**Complete deep:** `--complete --deep` runs the expensive enrichment passes before returning. `--complete --incremental-deep` combines incremental file indexing with a forced full deep pass.
|
|
511
518
|
|
|
@@ -197,9 +197,9 @@ def detect_dead_code(store, limit: int = 200, project: str | None = None, strict
|
|
|
197
197
|
m.is_constructor as is_constructor,
|
|
198
198
|
m.is_test as is_test,
|
|
199
199
|
f.path as file_path
|
|
200
|
-
LIMIT $
|
|
200
|
+
LIMIT $lim
|
|
201
201
|
""",
|
|
202
|
-
{"
|
|
202
|
+
{"lim": int(limit * 5), "proj": project},
|
|
203
203
|
)
|
|
204
204
|
else:
|
|
205
205
|
candidates = store.query_records(
|
|
@@ -215,9 +215,9 @@ def detect_dead_code(store, limit: int = 200, project: str | None = None, strict
|
|
|
215
215
|
m.is_constructor as is_constructor,
|
|
216
216
|
m.is_test as is_test,
|
|
217
217
|
f.path as file_path
|
|
218
|
-
LIMIT $
|
|
218
|
+
LIMIT $lim
|
|
219
219
|
""",
|
|
220
|
-
{"
|
|
220
|
+
{"lim": int(limit * 5)},
|
|
221
221
|
)
|
|
222
222
|
|
|
223
223
|
if not candidates:
|