ragx-cli 0.5.0__tar.gz → 0.5.1__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 (100) hide show
  1. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/PKG-INFO +2 -1
  2. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/README.md +1 -0
  3. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/pyproject.toml +1 -1
  4. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/app.py +54 -0
  5. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_cli.py +36 -1
  6. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/SKILL.md +0 -0
  7. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/api-cheatsheet.md +0 -0
  8. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/collection-management/python.md +0 -0
  9. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/collection-management/typescript.md +0 -0
  10. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/configuration.md +0 -0
  11. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/data-model.md +0 -0
  12. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/data-operations/python.md +0 -0
  13. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/data-operations/typescript.md +0 -0
  14. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/embedding.md +0 -0
  15. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/hybrid-search/python.md +0 -0
  16. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/hybrid-search/typescript.md +0 -0
  17. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/multimodal-search/python.md +0 -0
  18. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/multimodal-search/typescript.md +0 -0
  19. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/quick-start/python.md +0 -0
  20. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/quick-start/typescript.md +0 -0
  21. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/rag-system/python.md +0 -0
  22. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/rag-system/typescript.md +0 -0
  23. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/reranker.md +0 -0
  24. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/troubleshooting.md +0 -0
  25. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/vector-search/python.md +0 -0
  26. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.agents/skills/zvec/vector-search/typescript.md +0 -0
  27. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.github/workflows/publish.yml +0 -0
  28. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/.gitignore +0 -0
  29. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/AGENTS.md +0 -0
  30. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/CHANGELOG.md +0 -0
  31. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/CLAUDE.md +0 -0
  32. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/CONTRACTS-PHASE23.md +0 -0
  33. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/CONTRACTS.md +0 -0
  34. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/LICENSE +0 -0
  35. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/docs/feature-temporal-weighting.md +0 -0
  36. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/ragx-cli-plan.md +0 -0
  37. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/bge-m3-colbert-multi-vector-late-interaction-for-ragx-rerank-alternative-and-token-level-graph-edges.md +0 -0
  38. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/bge-m3-dense-embeddings-as-ragx-provider-multilingual-quality-and-threshold-calibration.md +0 -0
  39. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/bge-m3-dense-q8-vs-nomic-q4-benchmark-2026-07-12-worktree-eval-results.md +0 -0
  40. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/bge-m3-sparse-lexical-weights-hybrid-retrieval-leg-for-ragx-vs-sqlite-fts5-bm25.md +0 -0
  41. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/bge-m3-subchunk-edge-ablation-2026-07-13-ties-again-and-beta-zero-shortlist-mechanism.md +0 -0
  42. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/fine-grained-sub-chunk-edges-with-coarse-chunk-nodes-multi-granularity-graph-rag-literature-validation.md +0 -0
  43. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/lm-studio-model-download-api-and-curated-embedding-reranker-catalog-for-ragx-models-command.md +0 -0
  44. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/research/subchunk-edge-ablation-2026-07-12-two-round-experiment-protocol-results-and-verdict.md +0 -0
  45. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/skills/ragx-cli/SKILL.md +0 -0
  46. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/skills-lock.json +0 -0
  47. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/__init__.py +0 -0
  48. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/__init__.py +0 -0
  49. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/detect.py +0 -0
  50. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/eval_cmd.py +0 -0
  51. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/init_prompt.py +0 -0
  52. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/inspect_cmd.py +0 -0
  53. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/models_cmd.py +0 -0
  54. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/output.py +0 -0
  55. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/cli/pipeline.py +0 -0
  56. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/__init__.py +0 -0
  57. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/catalog.py +0 -0
  58. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/chunking.py +0 -0
  59. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/communities.py +0 -0
  60. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/config.py +0 -0
  61. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/discovery.py +0 -0
  62. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/errors.py +0 -0
  63. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/eval.py +0 -0
  64. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/expansion.py +0 -0
  65. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/fusion.py +0 -0
  66. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/graph.py +0 -0
  67. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/indexer.py +0 -0
  68. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/lmstudio.py +0 -0
  69. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/models.py +0 -0
  70. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/query.py +0 -0
  71. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/scoring.py +0 -0
  72. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/store.py +0 -0
  73. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/traversal.py +0 -0
  74. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/core/vectors.py +0 -0
  75. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/__init__.py +0 -0
  76. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/base.py +0 -0
  77. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/llama_embedder.py +0 -0
  78. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/llama_process.py +0 -0
  79. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/llama_server.py +0 -0
  80. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/openai_compat.py +0 -0
  81. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/registry.py +0 -0
  82. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/src/ragx/providers/st_reranker.py +0 -0
  83. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/__init__.py +0 -0
  84. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/conftest.py +0 -0
  85. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_chunking.py +0 -0
  86. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_communities.py +0 -0
  87. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_config_rc.py +0 -0
  88. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_discovery.py +0 -0
  89. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_eval.py +0 -0
  90. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_expansion.py +0 -0
  91. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_fusion.py +0 -0
  92. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_graph.py +0 -0
  93. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_inspect.py +0 -0
  94. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_integration.py +0 -0
  95. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_llama_server.py +0 -0
  96. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_models.py +0 -0
  97. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_providers.py +0 -0
  98. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_store.py +0 -0
  99. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_traversal.py +0 -0
  100. {ragx_cli-0.5.0 → ragx_cli-0.5.1}/tests/test_vectors.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ragx-cli
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: Similarity-graph RAG CLI: index a corpus into a chunk-level embedding graph and query it
5
5
  Project-URL: Repository, https://github.com/alber70g/ragx-cli
6
6
  Project-URL: Issues, https://github.com/alber70g/ragx-cli/issues
@@ -53,6 +53,7 @@ ragx-cli index # chunk -> embed -> HNSW + kNN similarity graph (
53
53
  ragx-cli query "why did we switch build tools?" --json --files-only
54
54
  ragx-cli index --full # full rebuild: re-chunk + re-embed everything
55
55
  ragx-cli models # recommend + download an embedding/reranker combo via LM Studio
56
+ ragx-cli --version # version, repo, and the effective models (corpus config + ~/.ragxrc overrides)
56
57
  ```
57
58
 
58
59
  Runs against any OpenAI-compatible embedding endpoint (LM Studio, Ollama, OpenAI). Reranking
@@ -25,6 +25,7 @@ ragx-cli index # chunk -> embed -> HNSW + kNN similarity graph (
25
25
  ragx-cli query "why did we switch build tools?" --json --files-only
26
26
  ragx-cli index --full # full rebuild: re-chunk + re-embed everything
27
27
  ragx-cli models # recommend + download an embedding/reranker combo via LM Studio
28
+ ragx-cli --version # version, repo, and the effective models (corpus config + ~/.ragxrc overrides)
28
29
  ```
29
30
 
30
31
  Runs against any OpenAI-compatible embedding endpoint (LM Studio, Ollama, OpenAI). Reranking
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ragx-cli"
3
- version = "0.5.0"
3
+ version = "0.5.1"
4
4
  description = "Similarity-graph RAG CLI: index a corpus into a chunk-level embedding graph and query it"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import logging
6
6
  import sys
7
+ from importlib import metadata
7
8
  from pathlib import Path
8
9
 
9
10
  import typer
@@ -16,6 +17,8 @@ from ragx.core.config import (
16
17
  CONFIG_FILE,
17
18
  config_path,
18
19
  db_path,
20
+ find_root,
21
+ load_rc,
19
22
  rc_path,
20
23
  require_root,
21
24
  write_default_config,
@@ -23,6 +26,8 @@ from ragx.core.config import (
23
26
  )
24
27
  from ragx.core.errors import RagxError
25
28
 
29
+ REPO_URL = "https://github.com/alber70g/ragx-cli"
30
+
26
31
  app = typer.Typer(add_completion=False, no_args_is_help=True)
27
32
  config_app = typer.Typer(add_completion=False, no_args_is_help=True)
28
33
  app.add_typer(config_app, name="config")
@@ -35,6 +40,55 @@ eval_cmd.register(app)
35
40
  models_cmd.register(app)
36
41
 
37
42
 
43
+ def _print_version() -> None:
44
+ try:
45
+ version = metadata.version("ragx-cli")
46
+ except metadata.PackageNotFoundError:
47
+ version = "unknown"
48
+ typer.echo(f"ragx-cli {version}")
49
+ typer.echo(REPO_URL)
50
+ root = find_root()
51
+ if root is not None:
52
+ try:
53
+ cfg = Config.load(root, confirm=migrate_confirm())
54
+ typer.echo(f"config: {config_path(root)}")
55
+ for section in ("embeddings", "expansion", "rerank"):
56
+ line = f" {section}: {cfg.get(f'{section}.provider')}/{cfg.get(f'{section}.model')}"
57
+ if cfg.data[section].get("enabled") is False:
58
+ line += " (disabled)"
59
+ typer.echo(line)
60
+ except RagxError as exc:
61
+ typer.echo(f"config: unreadable ({exc})")
62
+ rc = rc_path()
63
+ if rc.exists():
64
+ typer.echo(f"global: {rc}")
65
+ try:
66
+ for section, values in load_rc().items():
67
+ for key, value in values.items():
68
+ typer.echo(f" {section}.{key} = {value}")
69
+ except RagxError as exc:
70
+ typer.echo(f" unreadable ({exc})")
71
+
72
+
73
+ def _version_option(value: bool) -> None:
74
+ if value:
75
+ _print_version()
76
+ raise typer.Exit()
77
+
78
+
79
+ @app.callback()
80
+ def _main(
81
+ version: bool = typer.Option(
82
+ False,
83
+ "--version",
84
+ callback=_version_option,
85
+ is_eager=True,
86
+ help="show version, repo, and configured models (local + ~/.ragxrc)",
87
+ ),
88
+ ) -> None:
89
+ """Similarity-graph RAG for your files."""
90
+
91
+
38
92
  def _require_root() -> Path:
39
93
  try:
40
94
  return require_root()
@@ -2,12 +2,14 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import tomllib
5
+ from importlib import metadata
6
+ from pathlib import Path
5
7
 
6
8
  import httpx
7
9
  import respx
8
10
  from typer.testing import CliRunner
9
11
 
10
- from ragx.cli.app import app
12
+ from ragx.cli.app import REPO_URL, app
11
13
  from ragx.cli.output import migrate_confirm
12
14
  from ragx.core.config import CONFIG_FILE, Config
13
15
 
@@ -103,6 +105,39 @@ def test_init_yes_skips_prompts(tmp_path):
103
105
  assert data["embeddings"]["provider"] == "openai"
104
106
 
105
107
 
108
+ def test_version_outside_corpus(tmp_path, monkeypatch):
109
+ monkeypatch.chdir(tmp_path)
110
+ result = runner.invoke(app, ["--version"])
111
+ assert result.exit_code == 0
112
+ assert f"ragx-cli {metadata.version('ragx-cli')}" in result.stdout
113
+ assert REPO_URL in result.stdout
114
+ assert "config:" not in result.stdout
115
+ assert "global:" not in result.stdout
116
+
117
+
118
+ def test_version_shows_local_models_and_rc(tmp_path, monkeypatch):
119
+ runner.invoke(app, ["init", str(tmp_path)])
120
+ monkeypatch.chdir(tmp_path)
121
+ (Path.home() / ".ragxrc").write_text('[embeddings]\nmodel = "rc-model"\n')
122
+
123
+ result = runner.invoke(app, ["--version"])
124
+ assert result.exit_code == 0
125
+ assert str(tmp_path / CONFIG_FILE) in result.stdout
126
+ # effective view: the rc override wins over the corpus value
127
+ assert "embeddings: openai/rc-model" in result.stdout
128
+ assert "rerank: sentence-transformers/BAAI/bge-reranker-v2-m3" in result.stdout
129
+ assert "embeddings.model = rc-model" in result.stdout
130
+
131
+
132
+ def test_version_marks_disabled_stages(tmp_path, monkeypatch):
133
+ runner.invoke(app, ["init", str(tmp_path)])
134
+ monkeypatch.chdir(tmp_path)
135
+ runner.invoke(app, ["config", "set", "expansion.enabled", "false"])
136
+
137
+ result = runner.invoke(app, ["--version"])
138
+ assert "expansion: openai/qwen3.5-9b (disabled)" in result.stdout
139
+
140
+
106
141
  def test_config_get_set_roundtrip(tmp_path, monkeypatch):
107
142
  runner.invoke(app, ["init", str(tmp_path)])
108
143
  monkeypatch.chdir(tmp_path)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes