codespine 1.0.9__tar.gz → 1.0.11__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 (78) hide show
  1. {codespine-1.0.9 → codespine-1.0.11}/PKG-INFO +30 -4
  2. {codespine-1.0.9 → codespine-1.0.11}/README.md +28 -3
  3. {codespine-1.0.9 → codespine-1.0.11}/codespine/__init__.py +1 -1
  4. {codespine-1.0.9 → codespine-1.0.11}/codespine/cli.py +540 -5
  5. {codespine-1.0.9 → codespine-1.0.11}/codespine/config.py +4 -3
  6. {codespine-1.0.9 → codespine-1.0.11}/codespine/db/_cypher_compat.py +65 -12
  7. {codespine-1.0.9 → codespine-1.0.11}/codespine/db/duckdb_store.py +21 -11
  8. codespine-1.0.11/codespine/health.py +123 -0
  9. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/engine.py +40 -18
  10. {codespine-1.0.9 → codespine-1.0.11}/codespine/mcp/server.py +14 -0
  11. codespine-1.0.11/codespine/tasks.py +137 -0
  12. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/PKG-INFO +30 -4
  13. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/SOURCES.txt +5 -1
  14. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/requires.txt +2 -0
  15. {codespine-1.0.9 → codespine-1.0.11}/pyproject.toml +5 -1
  16. {codespine-1.0.9 → codespine-1.0.11}/tests/test_cypher_compat.py +25 -2
  17. codespine-1.0.11/tests/test_health.py +77 -0
  18. codespine-1.0.11/tests/test_tasks.py +46 -0
  19. {codespine-1.0.9 → codespine-1.0.11}/LICENSE +0 -0
  20. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/__init__.py +0 -0
  21. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/community.py +0 -0
  22. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/context.py +0 -0
  23. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/coupling.py +0 -0
  24. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/crossmodule.py +0 -0
  25. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/deadcode.py +0 -0
  26. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/flow.py +0 -0
  27. {codespine-1.0.9 → codespine-1.0.11}/codespine/analysis/impact.py +0 -0
  28. {codespine-1.0.9 → codespine-1.0.11}/codespine/cache/__init__.py +0 -0
  29. {codespine-1.0.9 → codespine-1.0.11}/codespine/cache/result_cache.py +0 -0
  30. {codespine-1.0.9 → codespine-1.0.11}/codespine/db/__init__.py +0 -0
  31. {codespine-1.0.9 → codespine-1.0.11}/codespine/db/schema.py +0 -0
  32. {codespine-1.0.9 → codespine-1.0.11}/codespine/db/store.py +0 -0
  33. {codespine-1.0.9 → codespine-1.0.11}/codespine/diff/__init__.py +0 -0
  34. {codespine-1.0.9 → codespine-1.0.11}/codespine/diff/branch_diff.py +0 -0
  35. {codespine-1.0.9 → codespine-1.0.11}/codespine/guide.py +0 -0
  36. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/__init__.py +0 -0
  37. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/call_resolver.py +0 -0
  38. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/di_resolver.py +0 -0
  39. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/java_parser.py +0 -0
  40. {codespine-1.0.9 → codespine-1.0.11}/codespine/indexer/symbol_builder.py +0 -0
  41. {codespine-1.0.9 → codespine-1.0.11}/codespine/mcp/__init__.py +0 -0
  42. {codespine-1.0.9 → codespine-1.0.11}/codespine/noise/__init__.py +0 -0
  43. {codespine-1.0.9 → codespine-1.0.11}/codespine/noise/blocklist.py +0 -0
  44. {codespine-1.0.9 → codespine-1.0.11}/codespine/overlay/__init__.py +0 -0
  45. {codespine-1.0.9 → codespine-1.0.11}/codespine/overlay/git_state.py +0 -0
  46. {codespine-1.0.9 → codespine-1.0.11}/codespine/overlay/merge.py +0 -0
  47. {codespine-1.0.9 → codespine-1.0.11}/codespine/overlay/store.py +0 -0
  48. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/__init__.py +0 -0
  49. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/bm25.py +0 -0
  50. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/fuzzy.py +0 -0
  51. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/hybrid.py +0 -0
  52. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/rrf.py +0 -0
  53. {codespine-1.0.9 → codespine-1.0.11}/codespine/search/vector.py +0 -0
  54. {codespine-1.0.9 → codespine-1.0.11}/codespine/sharding/__init__.py +0 -0
  55. {codespine-1.0.9 → codespine-1.0.11}/codespine/sharding/router.py +0 -0
  56. {codespine-1.0.9 → codespine-1.0.11}/codespine/sharding/store.py +0 -0
  57. {codespine-1.0.9 → codespine-1.0.11}/codespine/watch/__init__.py +0 -0
  58. {codespine-1.0.9 → codespine-1.0.11}/codespine/watch/git_hook.py +0 -0
  59. {codespine-1.0.9 → codespine-1.0.11}/codespine/watch/watcher.py +0 -0
  60. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/dependency_links.txt +0 -0
  61. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/entry_points.txt +0 -0
  62. {codespine-1.0.9 → codespine-1.0.11}/codespine.egg-info/top_level.txt +0 -0
  63. {codespine-1.0.9 → codespine-1.0.11}/gindex.py +0 -0
  64. {codespine-1.0.9 → codespine-1.0.11}/setup.cfg +0 -0
  65. {codespine-1.0.9 → codespine-1.0.11}/tests/test_branch_diff_normalize.py +0 -0
  66. {codespine-1.0.9 → codespine-1.0.11}/tests/test_call_resolver.py +0 -0
  67. {codespine-1.0.9 → codespine-1.0.11}/tests/test_community_detection.py +0 -0
  68. {codespine-1.0.9 → codespine-1.0.11}/tests/test_deadcode.py +0 -0
  69. {codespine-1.0.9 → codespine-1.0.11}/tests/test_duckdb_store.py +0 -0
  70. {codespine-1.0.9 → codespine-1.0.11}/tests/test_index_and_hybrid.py +0 -0
  71. {codespine-1.0.9 → codespine-1.0.11}/tests/test_java_parser.py +0 -0
  72. {codespine-1.0.9 → codespine-1.0.11}/tests/test_multimodule_index.py +0 -0
  73. {codespine-1.0.9 → codespine-1.0.11}/tests/test_overlay.py +0 -0
  74. {codespine-1.0.9 → codespine-1.0.11}/tests/test_parse_resilience.py +0 -0
  75. {codespine-1.0.9 → codespine-1.0.11}/tests/test_result_cache.py +0 -0
  76. {codespine-1.0.9 → codespine-1.0.11}/tests/test_search_ranking.py +0 -0
  77. {codespine-1.0.9 → codespine-1.0.11}/tests/test_sharding.py +0 -0
  78. {codespine-1.0.9 → codespine-1.0.11}/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.9
3
+ Version: 1.0.11
4
4
  Summary: Local Java code intelligence indexer backed by a graph database
5
5
  Author: CodeSpine contributors
6
6
  License: MIT License
@@ -56,6 +56,7 @@ Requires-Dist: numpy; extra == "ml"
56
56
  Provides-Extra: community
57
57
  Requires-Dist: igraph; extra == "community"
58
58
  Requires-Dist: leidenalg; extra == "community"
59
+ Provides-Extra: ui
59
60
  Provides-Extra: full
60
61
  Requires-Dist: sentence-transformers; extra == "full"
61
62
  Requires-Dist: numpy; extra == "full"
@@ -65,7 +66,7 @@ Dynamic: license-file
65
66
 
66
67
  # CodeSpine
67
68
 
68
- **v1.0.0** — Local Java code intelligence for coding agents, backed by a graph database.
69
+ **v1.0.11** — Local Java code intelligence for coding agents, backed by a graph database.
69
70
 
70
71
  CodeSpine cuts token burn for coding agents working on Java codebases.
71
72
 
@@ -95,12 +96,23 @@ File changes are written directly to the graph and are immediately queryable —
95
96
  pip install codespine
96
97
  ```
97
98
 
99
+ Default install includes the CLI, MCP server, Java indexer, watch mode, health checks, background task tracking, and graph/search commands.
100
+
98
101
  Optional semantic search (sentence-transformers):
99
102
 
100
103
  ```bash
101
104
  pip install "codespine[ml]"
102
105
  ```
103
106
 
107
+ Add the local index explorer UI:
108
+
109
+ ```bash
110
+ pip install "codespine[ui]"
111
+ ```
112
+
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]`.
115
+
104
116
  Everything at once (ml + community detection):
105
117
 
106
118
  ```bash
@@ -149,6 +161,8 @@ Detecting execution flows... 34 processes found
149
161
  Finding dead code... 12 unreachable symbols
150
162
  Analyzing git history... 18 coupled file pairs
151
163
  Generating embeddings... 623 vectors stored
164
+ Index self-test... passed
165
+ Index health... no anomalies
152
166
 
153
167
  Done in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows
154
168
  Publishing read replica... MCP will reload automatically
@@ -317,6 +331,12 @@ codespine analyse <path> --complete --deep # + communities, flows, dead code,
317
331
  codespine analyse <path> --complete --incremental-deep
318
332
  codespine analyse <path> --embed # + vector embeddings
319
333
 
334
+ # Background jobs and local UI
335
+ codespine background # background task progress
336
+ codespine tasks # running/recent background work
337
+ codespine ui # local read-only index explorer
338
+ codespine ui --open # open http://127.0.0.1:8765
339
+
320
340
  # Live watch
321
341
  codespine watch --path . # file-save-triggered direct-to-graph writes
322
342
  codespine watch --path . --install-hook # also install post-commit git hook
@@ -334,6 +354,8 @@ codespine diff main..feature # symbol-level branch diff
334
354
 
335
355
  # Status & Info
336
356
  codespine stats # per-project stats (--shards for shard layout)
357
+ codespine health # index coverage and anomaly dashboard
358
+ codespine self-test # smoke queries for schema/translator checks
337
359
  codespine list # indexed projects
338
360
  codespine status # service and database status
339
361
  codespine guide # tool catalog and workflows
@@ -360,7 +382,7 @@ codespine force-reset # emergency: delete all data files
360
382
 
361
383
  `analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
362
384
 
363
- `analyse` runs in fast mode by default: it indexes the core graph, publishes that read replica from a detached process, then continues communities, flows, dead code, coupling, and cross-module enrichment in the background. Use `--complete --deep` when you want those passes refreshed before the command returns.
385
+ `analyse` runs in fast mode by default: it indexes the core graph, honors the foreground time budget, publishes a read replica, then continues unfinished core indexing or enrichment in the background. Use `codespine background` or `codespine ui` to watch that work. Use `--complete --deep` when you want those passes refreshed before the command returns.
364
386
 
365
387
  ---
366
388
 
@@ -546,7 +568,11 @@ The deep analysis phase covers four passes that are expensive but optional:
546
568
  | Dead code | Finds methods with no callers (Java-aware exemptions) | Cleanup audits |
547
569
  | Change coupling | Analyses git history for co-changed file pairs | `get_change_coupling`, `related` |
548
570
 
549
- **Fast default:** `codespine analyse` prioritizes a queryable core index. Communities, flows, dead-code, git coupling, and cross-module links are queued in a detached background enrichment job unless you use `--complete`.
571
+ **Fast default:** `codespine analyse` prioritizes a queryable core index and keeps the foreground run inside the configured budget. If core indexing or call/type resolution cannot finish in time, the partial index is published and a background continuation finishes the core graph. Communities, flows, dead-code, git coupling, and cross-module links are queued in a detached background enrichment job unless you use `--complete`.
572
+
573
+ **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.
574
+
575
+ **Background visibility:** `codespine background` shows running background job progress in the terminal, and `codespine tasks` remains available as the shorter registry view. `codespine ui` serves a local read-only index explorer with project counts, index health, and the same background task state at `http://127.0.0.1:8765`.
550
576
 
551
577
  **Complete deep:** `--complete --deep` runs the expensive enrichment passes before returning. `--complete --incremental-deep` combines incremental file indexing with a forced full deep pass.
552
578
 
@@ -1,6 +1,6 @@
1
1
  # CodeSpine
2
2
 
3
- **v1.0.0** — Local Java code intelligence for coding agents, backed by a graph database.
3
+ **v1.0.11** — 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
 
@@ -30,12 +30,23 @@ File changes are written directly to the graph and are immediately queryable —
30
30
  pip install codespine
31
31
  ```
32
32
 
33
+ Default install includes the CLI, MCP server, Java indexer, watch mode, health checks, background task tracking, and graph/search commands.
34
+
33
35
  Optional semantic search (sentence-transformers):
34
36
 
35
37
  ```bash
36
38
  pip install "codespine[ml]"
37
39
  ```
38
40
 
41
+ Add the local index explorer UI:
42
+
43
+ ```bash
44
+ pip install "codespine[ui]"
45
+ ```
46
+
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]`.
49
+
39
50
  Everything at once (ml + community detection):
40
51
 
41
52
  ```bash
@@ -84,6 +95,8 @@ Detecting execution flows... 34 processes found
84
95
  Finding dead code... 12 unreachable symbols
85
96
  Analyzing git history... 18 coupled file pairs
86
97
  Generating embeddings... 623 vectors stored
98
+ Index self-test... passed
99
+ Index health... no anomalies
87
100
 
88
101
  Done in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows
89
102
  Publishing read replica... MCP will reload automatically
@@ -252,6 +265,12 @@ codespine analyse <path> --complete --deep # + communities, flows, dead code,
252
265
  codespine analyse <path> --complete --incremental-deep
253
266
  codespine analyse <path> --embed # + vector embeddings
254
267
 
268
+ # Background jobs and local UI
269
+ codespine background # background task progress
270
+ codespine tasks # running/recent background work
271
+ codespine ui # local read-only index explorer
272
+ codespine ui --open # open http://127.0.0.1:8765
273
+
255
274
  # Live watch
256
275
  codespine watch --path . # file-save-triggered direct-to-graph writes
257
276
  codespine watch --path . --install-hook # also install post-commit git hook
@@ -269,6 +288,8 @@ codespine diff main..feature # symbol-level branch diff
269
288
 
270
289
  # Status & Info
271
290
  codespine stats # per-project stats (--shards for shard layout)
291
+ codespine health # index coverage and anomaly dashboard
292
+ codespine self-test # smoke queries for schema/translator checks
272
293
  codespine list # indexed projects
273
294
  codespine status # service and database status
274
295
  codespine guide # tool catalog and workflows
@@ -295,7 +316,7 @@ codespine force-reset # emergency: delete all data files
295
316
 
296
317
  `analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
297
318
 
298
- `analyse` runs in fast mode by default: it indexes the core graph, publishes that read replica from a detached process, then continues communities, flows, dead code, coupling, and cross-module enrichment in the background. Use `--complete --deep` when you want those passes refreshed before the command returns.
319
+ `analyse` runs in fast mode by default: it indexes the core graph, honors the foreground time budget, publishes a read replica, then continues unfinished core indexing or enrichment in the background. Use `codespine background` or `codespine ui` to watch that work. Use `--complete --deep` when you want those passes refreshed before the command returns.
299
320
 
300
321
  ---
301
322
 
@@ -481,7 +502,11 @@ The deep analysis phase covers four passes that are expensive but optional:
481
502
  | Dead code | Finds methods with no callers (Java-aware exemptions) | Cleanup audits |
482
503
  | Change coupling | Analyses git history for co-changed file pairs | `get_change_coupling`, `related` |
483
504
 
484
- **Fast default:** `codespine analyse` prioritizes a queryable core index. Communities, flows, dead-code, git coupling, and cross-module links are queued in a detached background enrichment job unless you use `--complete`.
505
+ **Fast default:** `codespine analyse` prioritizes a queryable core index and keeps the foreground run inside the configured budget. If core indexing or call/type resolution cannot finish in time, the partial index is published and a background continuation finishes the core graph. Communities, flows, dead-code, git coupling, and cross-module links are queued in a detached background enrichment job unless you use `--complete`.
506
+
507
+ **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.
508
+
509
+ **Background visibility:** `codespine background` shows running background job progress in the terminal, and `codespine tasks` remains available as the shorter registry view. `codespine ui` serves a local read-only index explorer with project counts, index health, and the same background task state at `http://127.0.0.1:8765`.
485
510
 
486
511
  **Complete deep:** `--complete --deep` runs the expensive enrichment passes before returning. `--complete --incremental-deep` combines incremental file indexing with a forced full deep pass.
487
512
 
@@ -1,4 +1,4 @@
1
1
  """CodeSpine package."""
2
2
 
3
3
  __all__ = ["__version__"]
4
- __version__ = "1.0.9"
4
+ __version__ = "1.0.11"