codespine 1.0.9__tar.gz → 1.0.10__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.10}/PKG-INFO +28 -3
  2. {codespine-1.0.9 → codespine-1.0.10}/README.md +26 -2
  3. {codespine-1.0.9 → codespine-1.0.10}/codespine/__init__.py +1 -1
  4. {codespine-1.0.9 → codespine-1.0.10}/codespine/cli.py +441 -4
  5. {codespine-1.0.9 → codespine-1.0.10}/codespine/config.py +1 -0
  6. {codespine-1.0.9 → codespine-1.0.10}/codespine/db/_cypher_compat.py +65 -12
  7. {codespine-1.0.9 → codespine-1.0.10}/codespine/db/duckdb_store.py +21 -11
  8. codespine-1.0.10/codespine/health.py +123 -0
  9. {codespine-1.0.9 → codespine-1.0.10}/codespine/mcp/server.py +14 -0
  10. codespine-1.0.10/codespine/tasks.py +137 -0
  11. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/PKG-INFO +28 -3
  12. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/SOURCES.txt +5 -1
  13. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/requires.txt +2 -0
  14. {codespine-1.0.9 → codespine-1.0.10}/pyproject.toml +5 -1
  15. {codespine-1.0.9 → codespine-1.0.10}/tests/test_cypher_compat.py +25 -2
  16. codespine-1.0.10/tests/test_health.py +77 -0
  17. codespine-1.0.10/tests/test_tasks.py +34 -0
  18. {codespine-1.0.9 → codespine-1.0.10}/LICENSE +0 -0
  19. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/__init__.py +0 -0
  20. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/community.py +0 -0
  21. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/context.py +0 -0
  22. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/coupling.py +0 -0
  23. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/crossmodule.py +0 -0
  24. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/deadcode.py +0 -0
  25. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/flow.py +0 -0
  26. {codespine-1.0.9 → codespine-1.0.10}/codespine/analysis/impact.py +0 -0
  27. {codespine-1.0.9 → codespine-1.0.10}/codespine/cache/__init__.py +0 -0
  28. {codespine-1.0.9 → codespine-1.0.10}/codespine/cache/result_cache.py +0 -0
  29. {codespine-1.0.9 → codespine-1.0.10}/codespine/db/__init__.py +0 -0
  30. {codespine-1.0.9 → codespine-1.0.10}/codespine/db/schema.py +0 -0
  31. {codespine-1.0.9 → codespine-1.0.10}/codespine/db/store.py +0 -0
  32. {codespine-1.0.9 → codespine-1.0.10}/codespine/diff/__init__.py +0 -0
  33. {codespine-1.0.9 → codespine-1.0.10}/codespine/diff/branch_diff.py +0 -0
  34. {codespine-1.0.9 → codespine-1.0.10}/codespine/guide.py +0 -0
  35. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/__init__.py +0 -0
  36. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/call_resolver.py +0 -0
  37. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/di_resolver.py +0 -0
  38. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/engine.py +0 -0
  39. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/java_parser.py +0 -0
  40. {codespine-1.0.9 → codespine-1.0.10}/codespine/indexer/symbol_builder.py +0 -0
  41. {codespine-1.0.9 → codespine-1.0.10}/codespine/mcp/__init__.py +0 -0
  42. {codespine-1.0.9 → codespine-1.0.10}/codespine/noise/__init__.py +0 -0
  43. {codespine-1.0.9 → codespine-1.0.10}/codespine/noise/blocklist.py +0 -0
  44. {codespine-1.0.9 → codespine-1.0.10}/codespine/overlay/__init__.py +0 -0
  45. {codespine-1.0.9 → codespine-1.0.10}/codespine/overlay/git_state.py +0 -0
  46. {codespine-1.0.9 → codespine-1.0.10}/codespine/overlay/merge.py +0 -0
  47. {codespine-1.0.9 → codespine-1.0.10}/codespine/overlay/store.py +0 -0
  48. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/__init__.py +0 -0
  49. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/bm25.py +0 -0
  50. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/fuzzy.py +0 -0
  51. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/hybrid.py +0 -0
  52. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/rrf.py +0 -0
  53. {codespine-1.0.9 → codespine-1.0.10}/codespine/search/vector.py +0 -0
  54. {codespine-1.0.9 → codespine-1.0.10}/codespine/sharding/__init__.py +0 -0
  55. {codespine-1.0.9 → codespine-1.0.10}/codespine/sharding/router.py +0 -0
  56. {codespine-1.0.9 → codespine-1.0.10}/codespine/sharding/store.py +0 -0
  57. {codespine-1.0.9 → codespine-1.0.10}/codespine/watch/__init__.py +0 -0
  58. {codespine-1.0.9 → codespine-1.0.10}/codespine/watch/git_hook.py +0 -0
  59. {codespine-1.0.9 → codespine-1.0.10}/codespine/watch/watcher.py +0 -0
  60. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/dependency_links.txt +0 -0
  61. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/entry_points.txt +0 -0
  62. {codespine-1.0.9 → codespine-1.0.10}/codespine.egg-info/top_level.txt +0 -0
  63. {codespine-1.0.9 → codespine-1.0.10}/gindex.py +0 -0
  64. {codespine-1.0.9 → codespine-1.0.10}/setup.cfg +0 -0
  65. {codespine-1.0.9 → codespine-1.0.10}/tests/test_branch_diff_normalize.py +0 -0
  66. {codespine-1.0.9 → codespine-1.0.10}/tests/test_call_resolver.py +0 -0
  67. {codespine-1.0.9 → codespine-1.0.10}/tests/test_community_detection.py +0 -0
  68. {codespine-1.0.9 → codespine-1.0.10}/tests/test_deadcode.py +0 -0
  69. {codespine-1.0.9 → codespine-1.0.10}/tests/test_duckdb_store.py +0 -0
  70. {codespine-1.0.9 → codespine-1.0.10}/tests/test_index_and_hybrid.py +0 -0
  71. {codespine-1.0.9 → codespine-1.0.10}/tests/test_java_parser.py +0 -0
  72. {codespine-1.0.9 → codespine-1.0.10}/tests/test_multimodule_index.py +0 -0
  73. {codespine-1.0.9 → codespine-1.0.10}/tests/test_overlay.py +0 -0
  74. {codespine-1.0.9 → codespine-1.0.10}/tests/test_parse_resilience.py +0 -0
  75. {codespine-1.0.9 → codespine-1.0.10}/tests/test_result_cache.py +0 -0
  76. {codespine-1.0.9 → codespine-1.0.10}/tests/test_search_ranking.py +0 -0
  77. {codespine-1.0.9 → codespine-1.0.10}/tests/test_sharding.py +0 -0
  78. {codespine-1.0.9 → codespine-1.0.10}/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.10
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.10** — 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,22 @@ 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
+
104
115
  Everything at once (ml + community detection):
105
116
 
106
117
  ```bash
@@ -149,6 +160,8 @@ Detecting execution flows... 34 processes found
149
160
  Finding dead code... 12 unreachable symbols
150
161
  Analyzing git history... 18 coupled file pairs
151
162
  Generating embeddings... 623 vectors stored
163
+ Index self-test... passed
164
+ Index health... no anomalies
152
165
 
153
166
  Done in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows
154
167
  Publishing read replica... MCP will reload automatically
@@ -317,6 +330,12 @@ codespine analyse <path> --complete --deep # + communities, flows, dead code,
317
330
  codespine analyse <path> --complete --incremental-deep
318
331
  codespine analyse <path> --embed # + vector embeddings
319
332
 
333
+ # Background jobs and local UI
334
+ codespine background # background task progress
335
+ codespine tasks # running/recent background work
336
+ codespine ui # local read-only index explorer
337
+ codespine ui --open # open http://127.0.0.1:8765
338
+
320
339
  # Live watch
321
340
  codespine watch --path . # file-save-triggered direct-to-graph writes
322
341
  codespine watch --path . --install-hook # also install post-commit git hook
@@ -334,6 +353,8 @@ codespine diff main..feature # symbol-level branch diff
334
353
 
335
354
  # Status & Info
336
355
  codespine stats # per-project stats (--shards for shard layout)
356
+ codespine health # index coverage and anomaly dashboard
357
+ codespine self-test # smoke queries for schema/translator checks
337
358
  codespine list # indexed projects
338
359
  codespine status # service and database status
339
360
  codespine guide # tool catalog and workflows
@@ -360,7 +381,7 @@ codespine force-reset # emergency: delete all data files
360
381
 
361
382
  `analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
362
383
 
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.
384
+ `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 `codespine tasks` or `codespine ui` to watch that work. Use `--complete --deep` when you want those passes refreshed before the command returns.
364
385
 
365
386
  ---
366
387
 
@@ -548,6 +569,10 @@ The deep analysis phase covers four passes that are expensive but optional:
548
569
 
549
570
  **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`.
550
571
 
572
+ **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
+
574
+ **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`.
575
+
551
576
  **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
577
 
553
578
  ```bash
@@ -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.10** — 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,22 @@ 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
+
39
49
  Everything at once (ml + community detection):
40
50
 
41
51
  ```bash
@@ -84,6 +94,8 @@ Detecting execution flows... 34 processes found
84
94
  Finding dead code... 12 unreachable symbols
85
95
  Analyzing git history... 18 coupled file pairs
86
96
  Generating embeddings... 623 vectors stored
97
+ Index self-test... passed
98
+ Index health... no anomalies
87
99
 
88
100
  Done in 4.2s — 623 symbols, 1,847 edges, 8 clusters, 34 flows
89
101
  Publishing read replica... MCP will reload automatically
@@ -252,6 +264,12 @@ codespine analyse <path> --complete --deep # + communities, flows, dead code,
252
264
  codespine analyse <path> --complete --incremental-deep
253
265
  codespine analyse <path> --embed # + vector embeddings
254
266
 
267
+ # Background jobs and local UI
268
+ codespine background # background task progress
269
+ codespine tasks # running/recent background work
270
+ codespine ui # local read-only index explorer
271
+ codespine ui --open # open http://127.0.0.1:8765
272
+
255
273
  # Live watch
256
274
  codespine watch --path . # file-save-triggered direct-to-graph writes
257
275
  codespine watch --path . --install-hook # also install post-commit git hook
@@ -269,6 +287,8 @@ codespine diff main..feature # symbol-level branch diff
269
287
 
270
288
  # Status & Info
271
289
  codespine stats # per-project stats (--shards for shard layout)
290
+ codespine health # index coverage and anomaly dashboard
291
+ codespine self-test # smoke queries for schema/translator checks
272
292
  codespine list # indexed projects
273
293
  codespine status # service and database status
274
294
  codespine guide # tool catalog and workflows
@@ -295,7 +315,7 @@ codespine force-reset # emergency: delete all data files
295
315
 
296
316
  `analyse` defaults to incremental mode. Repeat runs only process changed files and are fast.
297
317
 
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.
318
+ `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 `codespine tasks` or `codespine ui` to watch that work. Use `--complete --deep` when you want those passes refreshed before the command returns.
299
319
 
300
320
  ---
301
321
 
@@ -483,6 +503,10 @@ The deep analysis phase covers four passes that are expensive but optional:
483
503
 
484
504
  **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`.
485
505
 
506
+ **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
+
508
+ **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`.
509
+
486
510
  **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
511
 
488
512
  ```bash
@@ -1,4 +1,4 @@
1
1
  """CodeSpine package."""
2
2
 
3
3
  __all__ = ["__version__"]
4
- __version__ = "1.0.9"
4
+ __version__ = "1.0.10"