rbtr 2026.6.2.dev0__tar.gz → 2026.9.0.dev0__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.
- rbtr-2026.9.0.dev0/PKG-INFO +79 -0
- rbtr-2026.9.0.dev0/pyproject.toml +160 -0
- rbtr-2026.9.0.dev0/pyproject.toml.orig +134 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/cli/__init__.py +65 -11
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/cli/output.py +146 -111
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/config.py +7 -1
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/client.py +24 -5
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/dto.py +18 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/handlers.py +66 -22
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/messages.py +45 -14
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/server.py +57 -27
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/watcher.py +19 -19
- rbtr-2026.9.0.dev0/src/rbtr/domain/__init__.py +5 -0
- {rbtr-2026.6.2.dev0/src/rbtr/index → rbtr-2026.9.0.dev0/src/rbtr/domain}/models.py +40 -36
- rbtr-2026.9.0.dev0/src/rbtr/errors.py +73 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/build.py +308 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/classify.py +3 -3
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/constants.py +2 -2
- rbtr-2026.9.0.dev0/src/rbtr/index/embed.py +84 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/embeddings.py +0 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/gc.py +36 -19
- rbtr-2026.9.0.dev0/src/rbtr/index/progress.py +16 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/reranker.py +1 -3
- rbtr-2026.9.0.dev0/src/rbtr/index/results.py +276 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/search.py +10 -14
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/blob_is_current.sql +24 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/count_chunks.sql +2 -2
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/count_edges.sql +3 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/count_file_snapshots.sql +3 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/count_gc_chunk_split.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/count_unembedded.sql +2 -2
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/data_size_bytes.sql +2 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_chunks_for_blobs.sql +1 -1
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_edges.sql +1 -1
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/delete_indexed_snapshots_for_repo.sql +2 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/delete_snapshots.sql +2 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/diff_symbols.sql +2 -2
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/distinct_chunk_languages.sql +8 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/drop_fts_index.sql +4 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/drop_snapshot.sql +3 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_chunks.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_edges.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_snapshot_language.sql +1 -1
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_unembedded_chunks.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/has_any_indexed.sql +1 -1
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/has_indexed.sql +3 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/inbound_degree.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/inbound_refs.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/insert_edges.sql +1 -1
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/list_indexed_commits.sql → rbtr-2026.9.0.dev0/src/rbtr/index/sql/list_indexed_snapshots.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/mark_indexed.sql +3 -3
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/orphan_repo_ids.sql +3 -3
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/prune_edges.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/schema.sql +20 -11
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/search_by_name.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/search_fulltext.sql +3 -3
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/search_similar.sql +2 -2
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/sweep_orphan_edges.sql +11 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/sweep_orphan_snapshots.sql +12 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/upsert_chunks.sql +2 -2
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/upsert_snapshots.sql +1 -1
- rbtr-2026.9.0.dev0/src/rbtr/index/sql/wipe_schema.sql +14 -0
- rbtr-2026.9.0.dev0/src/rbtr/index/staging.py +162 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/store.py +297 -219
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/writer.py +149 -38
- rbtr-2026.9.0.dev0/src/rbtr/languages/__init__.py +12 -0
- rbtr-2026.9.0.dev0/src/rbtr/languages/_resolvers.py +104 -0
- {rbtr-2026.6.2.dev0/src/rbtr/index → rbtr-2026.9.0.dev0/src/rbtr/languages}/chunks.py +26 -2
- {rbtr-2026.6.2.dev0/src/rbtr/index → rbtr-2026.9.0.dev0/src/rbtr/languages}/edges.py +11 -197
- rbtr-2026.9.0.dev0/src/rbtr/languages/extract.py +213 -0
- rbtr-2026.9.0.dev0/src/rbtr/languages/manager.py +227 -0
- rbtr-2026.9.0.dev0/src/rbtr/languages/registration.py +512 -0
- rbtr-2026.9.0.dev0/src/rbtr/languages/treesitter.py +469 -0
- rbtr-2026.9.0.dev0/src/rbtr/testing.py +79 -0
- rbtr-2026.6.2.dev0/PKG-INFO +0 -41
- rbtr-2026.6.2.dev0/pyproject.toml +0 -70
- rbtr-2026.6.2.dev0/src/rbtr/errors.py +0 -32
- rbtr-2026.6.2.dev0/src/rbtr/index/_llama_cpp_compat.py +0 -50
- rbtr-2026.6.2.dev0/src/rbtr/index/frames.py +0 -406
- rbtr-2026.6.2.dev0/src/rbtr/index/orchestrator.py +0 -418
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/count_edges_for_commit.sql +0 -3
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/count_snapshots_for_commit.sql +0 -3
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/delete_indexed_commits_for_repo.sql +0 -2
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/delete_snapshots.sql +0 -2
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/drop_commit.sql +0 -3
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/has_blob.sql +0 -10
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/has_indexed.sql +0 -3
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/sweep_orphan_edges.sql +0 -11
- rbtr-2026.6.2.dev0/src/rbtr/index/sql/sweep_orphan_snapshots.sql +0 -12
- rbtr-2026.6.2.dev0/src/rbtr/index/treesitter.py +0 -494
- rbtr-2026.6.2.dev0/src/rbtr/languages/__init__.py +0 -326
- rbtr-2026.6.2.dev0/src/rbtr/languages/bash.py +0 -76
- rbtr-2026.6.2.dev0/src/rbtr/languages/c.py +0 -73
- rbtr-2026.6.2.dev0/src/rbtr/languages/cpp.py +0 -85
- rbtr-2026.6.2.dev0/src/rbtr/languages/css.py +0 -51
- rbtr-2026.6.2.dev0/src/rbtr/languages/go.py +0 -90
- rbtr-2026.6.2.dev0/src/rbtr/languages/hcl.py +0 -88
- rbtr-2026.6.2.dev0/src/rbtr/languages/hookspec.py +0 -471
- rbtr-2026.6.2.dev0/src/rbtr/languages/html.py +0 -226
- rbtr-2026.6.2.dev0/src/rbtr/languages/java.py +0 -66
- rbtr-2026.6.2.dev0/src/rbtr/languages/javascript.py +0 -251
- rbtr-2026.6.2.dev0/src/rbtr/languages/json.py +0 -38
- rbtr-2026.6.2.dev0/src/rbtr/languages/markdown.py +0 -253
- rbtr-2026.6.2.dev0/src/rbtr/languages/python.py +0 -178
- rbtr-2026.6.2.dev0/src/rbtr/languages/rst.py +0 -350
- rbtr-2026.6.2.dev0/src/rbtr/languages/ruby.py +0 -120
- rbtr-2026.6.2.dev0/src/rbtr/languages/rust.py +0 -177
- rbtr-2026.6.2.dev0/src/rbtr/languages/sql.py +0 -141
- rbtr-2026.6.2.dev0/src/rbtr/languages/toml.py +0 -85
- rbtr-2026.6.2.dev0/src/rbtr/languages/yaml.py +0 -107
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/__init__.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/__main__.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/__init__.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/pidfile.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/daemon/status.py +0 -0
- {rbtr-2026.6.2.dev0/src/rbtr/index → rbtr-2026.9.0.dev0/src/rbtr/domain}/identity.py +0 -0
- {rbtr-2026.6.2.dev0/src/rbtr/index → rbtr-2026.9.0.dev0/src/rbtr/domain}/tokenise.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/git.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/__init__.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/_gpu_model.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/clear_all_embeddings.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/count_embeddings.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/count_orphan_chunks.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/create_fts_index.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_edges_for_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_snapshots_for_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_watched_refs.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/delete_watched_refs_for_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_chunk_paths.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_embedding_meta.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/get_schema_version.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/has_fts_index.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/insert_watched_refs.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/list_repos.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/list_watched_refs.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/neutralise_fts_idf.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/prune_chunks.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/register_repo.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/set_embedding_model.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/set_embedding_version.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/set_schema_version.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/sweep_orphan_chunks.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/index/sql/update_embeddings.sql +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/logging.py +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/py.typed +0 -0
- {rbtr-2026.6.2.dev0 → rbtr-2026.9.0.dev0}/src/rbtr/rbtrignore.py +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rbtr
|
|
3
|
+
Version: 2026.9.0.dev0
|
|
4
|
+
Summary: rbtr — structural code index
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Requires-Dist: duckdb>=1.0
|
|
7
|
+
Requires-Dist: dataframely>=2.9.1
|
|
8
|
+
Requires-Dist: huggingface-hub
|
|
9
|
+
Requires-Dist: llama-cpp-python>=0.3.24
|
|
10
|
+
Requires-Dist: pathspec>=1.0.4
|
|
11
|
+
Requires-Dist: platformdirs>=4.0
|
|
12
|
+
Requires-Dist: pyarrow>=17.0
|
|
13
|
+
Requires-Dist: pydantic>=2.12
|
|
14
|
+
Requires-Dist: pydantic-settings[toml]>=2.12
|
|
15
|
+
Requires-Dist: pygit2
|
|
16
|
+
Requires-Dist: pyzmq>=27.1.0
|
|
17
|
+
Requires-Dist: rich>=13.0
|
|
18
|
+
Requires-Dist: rich-argparse>=1.7.2
|
|
19
|
+
Requires-Dist: structlog>=24.1
|
|
20
|
+
Requires-Dist: rbtr-lang-bash
|
|
21
|
+
Requires-Dist: rbtr-lang-c
|
|
22
|
+
Requires-Dist: rbtr-lang-cpp
|
|
23
|
+
Requires-Dist: rbtr-lang-html
|
|
24
|
+
Requires-Dist: rbtr-lang-javascript
|
|
25
|
+
Requires-Dist: rbtr-lang-markdown
|
|
26
|
+
Requires-Dist: rbtr-lang-python
|
|
27
|
+
Requires-Dist: rbtr-lang-rst
|
|
28
|
+
Requires-Dist: tree-sitter>=0.24
|
|
29
|
+
Requires-Dist: rbtr-lang-css ; extra == 'all'
|
|
30
|
+
Requires-Dist: rbtr-lang-scss ; extra == 'all'
|
|
31
|
+
Requires-Dist: rbtr-lang-less ; extra == 'all'
|
|
32
|
+
Requires-Dist: rbtr-lang-json ; extra == 'all'
|
|
33
|
+
Requires-Dist: rbtr-lang-toml ; extra == 'all'
|
|
34
|
+
Requires-Dist: rbtr-lang-yaml ; extra == 'all'
|
|
35
|
+
Requires-Dist: rbtr-lang-hcl ; extra == 'all'
|
|
36
|
+
Requires-Dist: rbtr-lang-go ; extra == 'all'
|
|
37
|
+
Requires-Dist: rbtr-lang-java ; extra == 'all'
|
|
38
|
+
Requires-Dist: rbtr-lang-ruby ; extra == 'all'
|
|
39
|
+
Requires-Dist: rbtr-lang-rust ; extra == 'all'
|
|
40
|
+
Requires-Dist: rbtr-lang-sql ; extra == 'all'
|
|
41
|
+
Requires-Dist: rbtr-lang-tree-sitter-query ; extra == 'all'
|
|
42
|
+
Requires-Dist: rbtr-lang-svelte ; extra == 'all'
|
|
43
|
+
Requires-Dist: rbtr-lang-vue ; extra == 'all'
|
|
44
|
+
Requires-Dist: rbtr-lang-css ; extra == 'css'
|
|
45
|
+
Requires-Dist: rbtr-lang-go ; extra == 'go'
|
|
46
|
+
Requires-Dist: rbtr-lang-hcl ; extra == 'hcl'
|
|
47
|
+
Requires-Dist: rbtr-lang-java ; extra == 'java'
|
|
48
|
+
Requires-Dist: rbtr-lang-json ; extra == 'json'
|
|
49
|
+
Requires-Dist: rbtr-lang-less ; extra == 'less'
|
|
50
|
+
Requires-Dist: rbtr-lang-ruby ; extra == 'ruby'
|
|
51
|
+
Requires-Dist: rbtr-lang-rust ; extra == 'rust'
|
|
52
|
+
Requires-Dist: rbtr-lang-scss ; extra == 'scss'
|
|
53
|
+
Requires-Dist: rbtr-lang-sql ; extra == 'sql'
|
|
54
|
+
Requires-Dist: rbtr-lang-svelte ; extra == 'svelte'
|
|
55
|
+
Requires-Dist: pytest<9.1 ; extra == 'test'
|
|
56
|
+
Requires-Dist: pytest-cases>=3.10.1 ; extra == 'test'
|
|
57
|
+
Requires-Dist: syrupy>=5.3.4 ; extra == 'test'
|
|
58
|
+
Requires-Dist: rbtr-lang-toml ; extra == 'toml'
|
|
59
|
+
Requires-Dist: rbtr-lang-tree-sitter-query ; extra == 'tree-sitter-query'
|
|
60
|
+
Requires-Dist: rbtr-lang-vue ; extra == 'vue'
|
|
61
|
+
Requires-Dist: rbtr-lang-yaml ; extra == 'yaml'
|
|
62
|
+
Requires-Python: >=3.13
|
|
63
|
+
Provides-Extra: all
|
|
64
|
+
Provides-Extra: css
|
|
65
|
+
Provides-Extra: go
|
|
66
|
+
Provides-Extra: hcl
|
|
67
|
+
Provides-Extra: java
|
|
68
|
+
Provides-Extra: json
|
|
69
|
+
Provides-Extra: less
|
|
70
|
+
Provides-Extra: ruby
|
|
71
|
+
Provides-Extra: rust
|
|
72
|
+
Provides-Extra: scss
|
|
73
|
+
Provides-Extra: sql
|
|
74
|
+
Provides-Extra: svelte
|
|
75
|
+
Provides-Extra: test
|
|
76
|
+
Provides-Extra: toml
|
|
77
|
+
Provides-Extra: tree-sitter-query
|
|
78
|
+
Provides-Extra: vue
|
|
79
|
+
Provides-Extra: yaml
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build>=0.11.26,<1"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
[tool.uv.build-backend]
|
|
6
|
+
source-exclude = ["**/tests"]
|
|
7
|
+
|
|
8
|
+
[tool.uv.sources.rbtr-lang-bash]
|
|
9
|
+
workspace = true
|
|
10
|
+
|
|
11
|
+
[tool.uv.sources.rbtr-lang-c]
|
|
12
|
+
workspace = true
|
|
13
|
+
|
|
14
|
+
[tool.uv.sources.rbtr-lang-cpp]
|
|
15
|
+
workspace = true
|
|
16
|
+
|
|
17
|
+
[tool.uv.sources.rbtr-lang-css]
|
|
18
|
+
workspace = true
|
|
19
|
+
|
|
20
|
+
[tool.uv.sources.rbtr-lang-go]
|
|
21
|
+
workspace = true
|
|
22
|
+
|
|
23
|
+
[tool.uv.sources.rbtr-lang-hcl]
|
|
24
|
+
workspace = true
|
|
25
|
+
|
|
26
|
+
[tool.uv.sources.rbtr-lang-html]
|
|
27
|
+
workspace = true
|
|
28
|
+
|
|
29
|
+
[tool.uv.sources.rbtr-lang-java]
|
|
30
|
+
workspace = true
|
|
31
|
+
|
|
32
|
+
[tool.uv.sources.rbtr-lang-javascript]
|
|
33
|
+
workspace = true
|
|
34
|
+
|
|
35
|
+
[tool.uv.sources.rbtr-lang-json]
|
|
36
|
+
workspace = true
|
|
37
|
+
|
|
38
|
+
[tool.uv.sources.rbtr-lang-less]
|
|
39
|
+
workspace = true
|
|
40
|
+
|
|
41
|
+
[tool.uv.sources.rbtr-lang-markdown]
|
|
42
|
+
workspace = true
|
|
43
|
+
|
|
44
|
+
[tool.uv.sources.rbtr-lang-python]
|
|
45
|
+
workspace = true
|
|
46
|
+
|
|
47
|
+
[tool.uv.sources.rbtr-lang-rst]
|
|
48
|
+
workspace = true
|
|
49
|
+
|
|
50
|
+
[tool.uv.sources.rbtr-lang-ruby]
|
|
51
|
+
workspace = true
|
|
52
|
+
|
|
53
|
+
[tool.uv.sources.rbtr-lang-rust]
|
|
54
|
+
workspace = true
|
|
55
|
+
|
|
56
|
+
[tool.uv.sources.rbtr-lang-scss]
|
|
57
|
+
workspace = true
|
|
58
|
+
|
|
59
|
+
[tool.uv.sources.rbtr-lang-sql]
|
|
60
|
+
workspace = true
|
|
61
|
+
|
|
62
|
+
[tool.uv.sources.rbtr-lang-svelte]
|
|
63
|
+
workspace = true
|
|
64
|
+
|
|
65
|
+
[tool.uv.sources.rbtr-lang-toml]
|
|
66
|
+
workspace = true
|
|
67
|
+
|
|
68
|
+
[tool.uv.sources.rbtr-lang-tree-sitter-query]
|
|
69
|
+
workspace = true
|
|
70
|
+
|
|
71
|
+
[tool.uv.sources.rbtr-lang-vue]
|
|
72
|
+
workspace = true
|
|
73
|
+
|
|
74
|
+
[tool.uv.sources.rbtr-lang-yaml]
|
|
75
|
+
workspace = true
|
|
76
|
+
|
|
77
|
+
[project]
|
|
78
|
+
name = "rbtr"
|
|
79
|
+
version = "2026.9.0-dev0"
|
|
80
|
+
description = "rbtr — structural code index"
|
|
81
|
+
license = "MIT"
|
|
82
|
+
requires-python = ">=3.13"
|
|
83
|
+
dependencies = [
|
|
84
|
+
"duckdb>=1.0",
|
|
85
|
+
"dataframely>=2.9.1",
|
|
86
|
+
"huggingface-hub",
|
|
87
|
+
"llama-cpp-python>=0.3.24",
|
|
88
|
+
"pathspec>=1.0.4",
|
|
89
|
+
"platformdirs>=4.0",
|
|
90
|
+
"pyarrow>=17.0",
|
|
91
|
+
"pydantic>=2.12",
|
|
92
|
+
"pydantic-settings[toml]>=2.12",
|
|
93
|
+
"pygit2",
|
|
94
|
+
"pyzmq>=27.1.0",
|
|
95
|
+
"rich>=13.0",
|
|
96
|
+
"rich-argparse>=1.7.2",
|
|
97
|
+
"structlog>=24.1",
|
|
98
|
+
"rbtr-lang-bash",
|
|
99
|
+
"rbtr-lang-c",
|
|
100
|
+
"rbtr-lang-cpp",
|
|
101
|
+
"rbtr-lang-html",
|
|
102
|
+
"rbtr-lang-javascript",
|
|
103
|
+
"rbtr-lang-markdown",
|
|
104
|
+
"rbtr-lang-python",
|
|
105
|
+
"rbtr-lang-rst",
|
|
106
|
+
"tree-sitter>=0.24",
|
|
107
|
+
]
|
|
108
|
+
|
|
109
|
+
[project.scripts]
|
|
110
|
+
rbtr = "rbtr.cli:main"
|
|
111
|
+
|
|
112
|
+
[project.entry-points.pytest11]
|
|
113
|
+
rbtr = "rbtr.testing"
|
|
114
|
+
|
|
115
|
+
[project.optional-dependencies]
|
|
116
|
+
css = ["rbtr-lang-css"]
|
|
117
|
+
go = ["rbtr-lang-go"]
|
|
118
|
+
hcl = ["rbtr-lang-hcl"]
|
|
119
|
+
java = ["rbtr-lang-java"]
|
|
120
|
+
json = ["rbtr-lang-json"]
|
|
121
|
+
less = ["rbtr-lang-less"]
|
|
122
|
+
ruby = ["rbtr-lang-ruby"]
|
|
123
|
+
rust = ["rbtr-lang-rust"]
|
|
124
|
+
scss = ["rbtr-lang-scss"]
|
|
125
|
+
sql = ["rbtr-lang-sql"]
|
|
126
|
+
svelte = ["rbtr-lang-svelte"]
|
|
127
|
+
toml = ["rbtr-lang-toml"]
|
|
128
|
+
tree_sitter_query = ["rbtr-lang-tree-sitter-query"]
|
|
129
|
+
vue = ["rbtr-lang-vue"]
|
|
130
|
+
yaml = ["rbtr-lang-yaml"]
|
|
131
|
+
all = [
|
|
132
|
+
"rbtr-lang-css",
|
|
133
|
+
"rbtr-lang-scss",
|
|
134
|
+
"rbtr-lang-less",
|
|
135
|
+
"rbtr-lang-json",
|
|
136
|
+
"rbtr-lang-toml",
|
|
137
|
+
"rbtr-lang-yaml",
|
|
138
|
+
"rbtr-lang-hcl",
|
|
139
|
+
"rbtr-lang-go",
|
|
140
|
+
"rbtr-lang-java",
|
|
141
|
+
"rbtr-lang-ruby",
|
|
142
|
+
"rbtr-lang-rust",
|
|
143
|
+
"rbtr-lang-sql",
|
|
144
|
+
"rbtr-lang-tree-sitter-query",
|
|
145
|
+
"rbtr-lang-svelte",
|
|
146
|
+
"rbtr-lang-vue",
|
|
147
|
+
]
|
|
148
|
+
test = [
|
|
149
|
+
"pytest<9.1",
|
|
150
|
+
"pytest-cases>=3.10.1",
|
|
151
|
+
"syrupy>=5.3.4",
|
|
152
|
+
]
|
|
153
|
+
|
|
154
|
+
[dependency-groups]
|
|
155
|
+
dev = [
|
|
156
|
+
"pyinstrument>=5.0",
|
|
157
|
+
"pytest-mock",
|
|
158
|
+
"pytest-xdist>=3.8.0",
|
|
159
|
+
"rbtr[test]",
|
|
160
|
+
]
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build>=0.11.26,<1"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
[tool.uv.build-backend]
|
|
6
|
+
source-exclude = ["**/tests"]
|
|
7
|
+
|
|
8
|
+
[project]
|
|
9
|
+
name = "rbtr"
|
|
10
|
+
version = "2026.9.0-dev0"
|
|
11
|
+
description = "rbtr — structural code index"
|
|
12
|
+
license = "MIT"
|
|
13
|
+
requires-python = ">=3.13"
|
|
14
|
+
dependencies = [
|
|
15
|
+
"duckdb>=1.0",
|
|
16
|
+
"dataframely>=2.9.1",
|
|
17
|
+
"huggingface-hub",
|
|
18
|
+
"llama-cpp-python>=0.3.24",
|
|
19
|
+
"pathspec>=1.0.4",
|
|
20
|
+
"platformdirs>=4.0",
|
|
21
|
+
"pyarrow>=17.0",
|
|
22
|
+
"pydantic>=2.12",
|
|
23
|
+
"pydantic-settings[toml]>=2.12",
|
|
24
|
+
"pygit2",
|
|
25
|
+
"pyzmq>=27.1.0",
|
|
26
|
+
"rich>=13.0",
|
|
27
|
+
"rich-argparse>=1.7.2",
|
|
28
|
+
"structlog>=24.1",
|
|
29
|
+
|
|
30
|
+
# Default language plugins (required — ship with core).
|
|
31
|
+
"rbtr-lang-bash",
|
|
32
|
+
"rbtr-lang-c",
|
|
33
|
+
"rbtr-lang-cpp",
|
|
34
|
+
"rbtr-lang-html",
|
|
35
|
+
"rbtr-lang-javascript",
|
|
36
|
+
"rbtr-lang-markdown",
|
|
37
|
+
"rbtr-lang-python",
|
|
38
|
+
"rbtr-lang-rst",
|
|
39
|
+
|
|
40
|
+
# tree-sitter — one grammar per built-in (not-yet-packaged) language
|
|
41
|
+
"tree-sitter>=0.24",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
rbtr = "rbtr.cli:main"
|
|
46
|
+
|
|
47
|
+
# Ships the `snapshot_json` fixture (from the shared test harness) to every
|
|
48
|
+
# plugin test suite with no per-package conftest boilerplate.
|
|
49
|
+
[project.entry-points.pytest11]
|
|
50
|
+
rbtr = "rbtr.testing"
|
|
51
|
+
|
|
52
|
+
# Optional language plugins are wired here as extras during the
|
|
53
|
+
# language-plugin-packaging migration.
|
|
54
|
+
[project.optional-dependencies]
|
|
55
|
+
css = ["rbtr-lang-css"]
|
|
56
|
+
go = ["rbtr-lang-go"]
|
|
57
|
+
hcl = ["rbtr-lang-hcl"]
|
|
58
|
+
java = ["rbtr-lang-java"]
|
|
59
|
+
json = ["rbtr-lang-json"]
|
|
60
|
+
less = ["rbtr-lang-less"]
|
|
61
|
+
ruby = ["rbtr-lang-ruby"]
|
|
62
|
+
rust = ["rbtr-lang-rust"]
|
|
63
|
+
scss = ["rbtr-lang-scss"]
|
|
64
|
+
sql = ["rbtr-lang-sql"]
|
|
65
|
+
svelte = ["rbtr-lang-svelte"]
|
|
66
|
+
toml = ["rbtr-lang-toml"]
|
|
67
|
+
tree_sitter_query = ["rbtr-lang-tree-sitter-query"]
|
|
68
|
+
vue = ["rbtr-lang-vue"]
|
|
69
|
+
yaml = ["rbtr-lang-yaml"]
|
|
70
|
+
# Convenience aggregate: `all` pulls every optional plugin (the defaults are
|
|
71
|
+
# already required deps, so `rbtr[all]` installs every language). No `web`
|
|
72
|
+
# grouping — html and javascript are defaults, so it would only add css.
|
|
73
|
+
all = [
|
|
74
|
+
"rbtr-lang-css",
|
|
75
|
+
"rbtr-lang-scss",
|
|
76
|
+
"rbtr-lang-less",
|
|
77
|
+
"rbtr-lang-json",
|
|
78
|
+
"rbtr-lang-toml",
|
|
79
|
+
"rbtr-lang-yaml",
|
|
80
|
+
"rbtr-lang-hcl",
|
|
81
|
+
"rbtr-lang-go",
|
|
82
|
+
"rbtr-lang-java",
|
|
83
|
+
"rbtr-lang-ruby",
|
|
84
|
+
"rbtr-lang-rust",
|
|
85
|
+
"rbtr-lang-sql",
|
|
86
|
+
"rbtr-lang-tree-sitter-query",
|
|
87
|
+
"rbtr-lang-svelte",
|
|
88
|
+
"rbtr-lang-vue",
|
|
89
|
+
]
|
|
90
|
+
# Test-support extra for `rbtr.testing`: what a plugin package
|
|
91
|
+
# needs to run its extraction/snapshot tests against the shared harness.
|
|
92
|
+
# The pytest bound lives here (not just in `dev`) so that a plugin whose
|
|
93
|
+
# only test dep is `rbtr[test]` still gets it.
|
|
94
|
+
test = [
|
|
95
|
+
# Held below 9.1: pytest-cases 3.10.1 breaks on pytest 9.1's changed
|
|
96
|
+
# IdMaker signature. Drop the bound once pytest-cases is compatible.
|
|
97
|
+
"pytest<9.1",
|
|
98
|
+
"pytest-cases>=3.10.1",
|
|
99
|
+
"syrupy>=5.3.4",
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
# Language-plugin packages resolve to their workspace members.
|
|
103
|
+
[tool.uv.sources]
|
|
104
|
+
rbtr-lang-bash = { workspace = true }
|
|
105
|
+
rbtr-lang-c = { workspace = true }
|
|
106
|
+
rbtr-lang-cpp = { workspace = true }
|
|
107
|
+
rbtr-lang-css = { workspace = true }
|
|
108
|
+
rbtr-lang-go = { workspace = true }
|
|
109
|
+
rbtr-lang-hcl = { workspace = true }
|
|
110
|
+
rbtr-lang-html = { workspace = true }
|
|
111
|
+
rbtr-lang-java = { workspace = true }
|
|
112
|
+
rbtr-lang-javascript = { workspace = true }
|
|
113
|
+
rbtr-lang-json = { workspace = true }
|
|
114
|
+
rbtr-lang-less = { workspace = true }
|
|
115
|
+
rbtr-lang-markdown = { workspace = true }
|
|
116
|
+
rbtr-lang-python = { workspace = true }
|
|
117
|
+
rbtr-lang-rst = { workspace = true }
|
|
118
|
+
rbtr-lang-ruby = { workspace = true }
|
|
119
|
+
rbtr-lang-rust = { workspace = true }
|
|
120
|
+
rbtr-lang-scss = { workspace = true }
|
|
121
|
+
rbtr-lang-sql = { workspace = true }
|
|
122
|
+
rbtr-lang-svelte = { workspace = true }
|
|
123
|
+
rbtr-lang-toml = { workspace = true }
|
|
124
|
+
rbtr-lang-tree-sitter-query = { workspace = true }
|
|
125
|
+
rbtr-lang-vue = { workspace = true }
|
|
126
|
+
rbtr-lang-yaml = { workspace = true }
|
|
127
|
+
|
|
128
|
+
[dependency-groups]
|
|
129
|
+
dev = [
|
|
130
|
+
"pyinstrument>=5.0",
|
|
131
|
+
"pytest-mock",
|
|
132
|
+
"pytest-xdist>=3.8.0",
|
|
133
|
+
"rbtr[test]",
|
|
134
|
+
]
|
|
@@ -42,7 +42,6 @@ from rbtr.cli.output import (
|
|
|
42
42
|
print_err,
|
|
43
43
|
print_json_schema,
|
|
44
44
|
progress_reporter,
|
|
45
|
-
render_config,
|
|
46
45
|
)
|
|
47
46
|
from rbtr.config import Config, WeightTriple, config
|
|
48
47
|
from rbtr.daemon.client import (
|
|
@@ -54,6 +53,7 @@ from rbtr.daemon.client import (
|
|
|
54
53
|
)
|
|
55
54
|
from rbtr.daemon.handlers import (
|
|
56
55
|
handle_changed_symbols,
|
|
56
|
+
handle_daemon_config,
|
|
57
57
|
handle_find_refs,
|
|
58
58
|
handle_forget,
|
|
59
59
|
handle_gc,
|
|
@@ -67,12 +67,13 @@ from rbtr.daemon.messages import (
|
|
|
67
67
|
BuildIndexResponse,
|
|
68
68
|
ChangedSymbolsRequest,
|
|
69
69
|
ChangedSymbolsResponse,
|
|
70
|
+
DaemonConfigRequest,
|
|
71
|
+
DaemonConfigResponse,
|
|
70
72
|
ErrorResponse,
|
|
71
73
|
FindRefsRequest,
|
|
72
74
|
FindRefsResponse,
|
|
73
75
|
ForgetRequest,
|
|
74
76
|
ForgetResponse,
|
|
75
|
-
GcMode,
|
|
76
77
|
GcRequest,
|
|
77
78
|
GcResponse,
|
|
78
79
|
ListSymbolsRequest,
|
|
@@ -89,12 +90,15 @@ from rbtr.daemon.messages import (
|
|
|
89
90
|
)
|
|
90
91
|
from rbtr.daemon.server import DaemonServer
|
|
91
92
|
from rbtr.daemon.status import DaemonStatusReport, uptime_seconds as _uptime_seconds
|
|
93
|
+
from rbtr.domain.models import GcMode
|
|
92
94
|
from rbtr.errors import RbtrError
|
|
93
95
|
from rbtr.git import HEAD_REF, normalise_repo_path, resolve_ref
|
|
96
|
+
from rbtr.index.build import build_index
|
|
97
|
+
from rbtr.index.embed import embed_index
|
|
94
98
|
from rbtr.index.embeddings import Embedder
|
|
95
|
-
from rbtr.index.orchestrator import build_index, embed_index
|
|
96
99
|
from rbtr.index.reranker import Reranker
|
|
97
100
|
from rbtr.index.store import IndexStore
|
|
101
|
+
from rbtr.languages.manager import get_manager
|
|
98
102
|
from rbtr.logging import configure_logging
|
|
99
103
|
|
|
100
104
|
log = structlog.get_logger(__name__)
|
|
@@ -117,6 +121,11 @@ ScopeField = Annotated[Scope, BeforeValidator(_normalise_scope)]
|
|
|
117
121
|
class DaemonServe(BaseModel):
|
|
118
122
|
"""Internal: run the daemon server (spawned by `daemon start`)."""
|
|
119
123
|
|
|
124
|
+
allow_missing_plugins: bool = Field(
|
|
125
|
+
False,
|
|
126
|
+
description="Serve even if the index has languages this rbtr cannot load",
|
|
127
|
+
)
|
|
128
|
+
|
|
120
129
|
def cli_cmd(self) -> None:
|
|
121
130
|
# The daemon's sole log sink is the rotating JSON file; the
|
|
122
131
|
# parent no longer redirects the child's stderr here.
|
|
@@ -124,8 +133,17 @@ class DaemonServe(BaseModel):
|
|
|
124
133
|
|
|
125
134
|
config.runtime_dir.mkdir(parents=True, exist_ok=True)
|
|
126
135
|
print_banner()
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
try:
|
|
137
|
+
store = IndexStore.from_config(writable=True)
|
|
138
|
+
except RbtrError:
|
|
139
|
+
# The parent redirects our stderr to DEVNULL, so record why
|
|
140
|
+
# the daemon couldn't open the index (e.g. a schema refuse)
|
|
141
|
+
# in the log the parent points the user at.
|
|
142
|
+
log.exception("daemon_store_open_failed")
|
|
143
|
+
raise
|
|
144
|
+
server = DaemonServer(
|
|
145
|
+
config.runtime_dir, store, allow_missing_plugins=self.allow_missing_plugins
|
|
146
|
+
)
|
|
129
147
|
asyncio.run(server.serve())
|
|
130
148
|
|
|
131
149
|
|
|
@@ -135,6 +153,11 @@ class DaemonServe(BaseModel):
|
|
|
135
153
|
class DaemonStart(BaseModel):
|
|
136
154
|
"""Start the daemon in the background."""
|
|
137
155
|
|
|
156
|
+
allow_missing_plugins: bool = Field(
|
|
157
|
+
False,
|
|
158
|
+
description="Serve even if the index has languages this rbtr cannot load",
|
|
159
|
+
)
|
|
160
|
+
|
|
138
161
|
def cli_cmd(self) -> None:
|
|
139
162
|
if is_daemon_running():
|
|
140
163
|
s = _status()
|
|
@@ -142,7 +165,7 @@ class DaemonStart(BaseModel):
|
|
|
142
165
|
return
|
|
143
166
|
|
|
144
167
|
try:
|
|
145
|
-
start_daemon()
|
|
168
|
+
start_daemon(allow_missing_plugins=self.allow_missing_plugins)
|
|
146
169
|
except RbtrError as exc:
|
|
147
170
|
print_err(f"[red]error:[/] {exc}")
|
|
148
171
|
sys.exit(1)
|
|
@@ -231,6 +254,10 @@ class Index(BaseModel):
|
|
|
231
254
|
)
|
|
232
255
|
daemon: bool = Field(True, description="Use the daemon (disable with --no-daemon)")
|
|
233
256
|
embed: bool = Field(True, description="Compute embeddings (disable with --no-embed)")
|
|
257
|
+
allow_missing_plugins: bool = Field(
|
|
258
|
+
False,
|
|
259
|
+
description="Build even if the index has languages this rbtr cannot load",
|
|
260
|
+
)
|
|
234
261
|
|
|
235
262
|
def cli_cmd(self) -> None:
|
|
236
263
|
# Forgetting vanished repos needs no current repo — handle it before
|
|
@@ -438,6 +465,12 @@ class Index(BaseModel):
|
|
|
438
465
|
) -> None:
|
|
439
466
|
"""Run indexing inline (blocking)."""
|
|
440
467
|
store = IndexStore.from_config(writable=True)
|
|
468
|
+
# Refuse to rebuild languages whose plugin isn't loaded -- that
|
|
469
|
+
# would re-extract raw chunks and churn embeddings -- unless the
|
|
470
|
+
# caller overrides with --allow-missing-plugins.
|
|
471
|
+
get_manager().require_languages_loaded(
|
|
472
|
+
store.distinct_chunk_languages(), allow_missing=self.allow_missing_plugins
|
|
473
|
+
)
|
|
441
474
|
with store.session() as ws:
|
|
442
475
|
repo_id = ws.register_repo(resolved_repo)
|
|
443
476
|
embedder = Embedder(idle_timeout=config.embed_idle_timeout)
|
|
@@ -455,7 +488,6 @@ class Index(BaseModel):
|
|
|
455
488
|
resolved_repo,
|
|
456
489
|
resolved_refs[0],
|
|
457
490
|
store,
|
|
458
|
-
repo_id=repo_id,
|
|
459
491
|
on_progress=on_progress,
|
|
460
492
|
)
|
|
461
493
|
for ref in resolved_refs[1:]:
|
|
@@ -463,7 +495,6 @@ class Index(BaseModel):
|
|
|
463
495
|
resolved_repo,
|
|
464
496
|
ref,
|
|
465
497
|
store,
|
|
466
|
-
repo_id=repo_id,
|
|
467
498
|
on_progress=on_progress,
|
|
468
499
|
)
|
|
469
500
|
|
|
@@ -811,6 +842,10 @@ class Gc(BaseModel):
|
|
|
811
842
|
description="Sweep crashed-build residue only; no commits dropped",
|
|
812
843
|
)
|
|
813
844
|
dry_run: bool = Field(False, description="Report what would be removed without writing")
|
|
845
|
+
compact: bool = Field(
|
|
846
|
+
True,
|
|
847
|
+
description="Rewrite the index to reclaim freed disk space (--no-compact to skip)",
|
|
848
|
+
)
|
|
814
849
|
|
|
815
850
|
def cli_cmd(self) -> None:
|
|
816
851
|
mode, refs = self._resolve_mode()
|
|
@@ -829,6 +864,7 @@ class Gc(BaseModel):
|
|
|
829
864
|
mode=mode,
|
|
830
865
|
refs=refs,
|
|
831
866
|
dry_run=self.dry_run,
|
|
867
|
+
compact=self.compact,
|
|
832
868
|
)
|
|
833
869
|
|
|
834
870
|
match try_daemon(request):
|
|
@@ -838,10 +874,12 @@ class Gc(BaseModel):
|
|
|
838
874
|
print_err(f"[red]error:[/] {msg}")
|
|
839
875
|
sys.exit(1)
|
|
840
876
|
case None:
|
|
877
|
+
# No daemon: this process holds DuckDB's exclusive lock, so
|
|
878
|
+
# compaction's connection swap is safe here (allow_compact).
|
|
841
879
|
store = IndexStore.from_config(writable=True)
|
|
842
880
|
|
|
843
881
|
try:
|
|
844
|
-
emit(handle_gc(request, store))
|
|
882
|
+
emit(handle_gc(request, store, allow_compact=True))
|
|
845
883
|
except RbtrError as exc:
|
|
846
884
|
print_err(f"[red]error:[/] {exc}")
|
|
847
885
|
sys.exit(1)
|
|
@@ -875,10 +913,26 @@ class SchemaDump(BaseModel):
|
|
|
875
913
|
|
|
876
914
|
|
|
877
915
|
class ConfigCmd(BaseModel):
|
|
878
|
-
"""Show the
|
|
916
|
+
"""Show the rbtr configuration and loaded language plugins.
|
|
917
|
+
|
|
918
|
+
Reports the running daemon's live config when one is up; otherwise
|
|
919
|
+
the locally resolved config (what a daemon would load), noted on
|
|
920
|
+
stderr.
|
|
921
|
+
"""
|
|
879
922
|
|
|
880
923
|
def cli_cmd(self) -> None:
|
|
881
|
-
|
|
924
|
+
match try_daemon(DaemonConfigRequest()):
|
|
925
|
+
case DaemonConfigResponse() as resp:
|
|
926
|
+
emit(resp)
|
|
927
|
+
case None:
|
|
928
|
+
print_err("[dim]daemon not running — showing local config[/]")
|
|
929
|
+
emit(handle_daemon_config(DaemonConfigRequest()))
|
|
930
|
+
case ErrorResponse(message=msg):
|
|
931
|
+
print_err(f"[red]error:[/] {msg}")
|
|
932
|
+
sys.exit(1)
|
|
933
|
+
case resp:
|
|
934
|
+
print_err(f"[red]error:[/] unexpected response: {resp}")
|
|
935
|
+
sys.exit(1)
|
|
882
936
|
|
|
883
937
|
|
|
884
938
|
# ── Root command ─────────────────────────────────────────────────────
|