data-refinery-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.
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/tests.yml +12 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/CHANGELOG.md +10 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/PKG-INFO +1 -1
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/stack.py +50 -32
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/pyproject.toml +1 -1
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/uv.lock +1 -1
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/run-tests/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/think/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/think/scripts/think.sh +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/version-bump/SKILL.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills.local.yaml.example +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/current +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/current_plan +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/frames/data-refinery-cli-ships-the-storage-data-quality-i.json +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/plans/data-refinery-cli-ships-the-storage-data-quality-i.json +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.flake8 +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/publish-stack.yml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/publish.yml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.gitignore +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.markdownlint-cli2.yaml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/AGENTS.colleague.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/CLAUDE.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/LICENSE +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/README.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/culture.yaml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/__main__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/cli.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/doctor.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/explain.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/learn.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/overview.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/quality.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/store.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/whoami.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_errors.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_output.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/explain/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/explain/catalog.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/quality/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/quality/checks.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backend.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/files.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/mongo.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/neo4j.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/envelope.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docker-compose.yml +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/contract.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/plans/2026-06-20-data-refinery-cli-ships-the-storage-data-quality-i.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/skill-sources.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/specs/2026-06-20-data-refinery-cli-ships-the-storage-data-quality-i.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/stack-image.md +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/sonar-project.properties +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/__init__.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/conftest.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_cli.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_cli_introspection.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_live_stack.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_no_optional_top_import.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_quality.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_scope_no_leak.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_stack.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_adapters.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_api.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_backends.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_cli.py +0 -0
- {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_envelope.py +0 -0
|
@@ -31,11 +31,23 @@ jobs:
|
|
|
31
31
|
|
|
32
32
|
- run: uv run pytest -n auto --cov=data_refinery --cov-report=xml:coverage.xml --cov-report=term -v
|
|
33
33
|
|
|
34
|
+
# Stamp each analysis with the package version so SonarCloud's "Previous
|
|
35
|
+
# version" New Code period has a real boundary to diff against (the version
|
|
36
|
+
# is bumped every PR; see version-check below + the version-bump skill).
|
|
37
|
+
- name: Resolve project version
|
|
38
|
+
id: ver
|
|
39
|
+
run: |
|
|
40
|
+
VERSION=$(uv run python -c 'import tomllib; print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')
|
|
41
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
42
|
+
|
|
34
43
|
- name: SonarCloud Scan
|
|
35
44
|
if: env.SONAR_TOKEN != ''
|
|
36
45
|
uses: SonarSource/sonarqube-scan-action@fd88b7d7ccbaefd23d8f36f73b59db7a3d246602 # v6
|
|
37
46
|
env:
|
|
38
47
|
SONAR_HOST_URL: https://sonarcloud.io
|
|
48
|
+
with:
|
|
49
|
+
args: >
|
|
50
|
+
-Dsonar.projectVersion=${{ steps.ver.outputs.version }}
|
|
39
51
|
|
|
40
52
|
lint:
|
|
41
53
|
runs-on: ubuntu-latest
|
|
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/). This project
|
|
6
6
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.1] - 2026-06-21
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- CI stamps each SonarCloud analysis with `sonar.projectVersion` read from `pyproject.toml`, so the "Previous version" New Code period has a real per-release boundary to diff against (`.github/workflows/tests.yml`)
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Cleared 4 pre-existing SonarCloud smells in `data_refinery/cli/_commands/stack.py` (wave-1), behaviour-preserving: merged the implicitly concatenated `_DOCKER_HINT` literal (S5799), extracted `_load_ps_rows` to drop `_parse_ps` cognitive complexity (S3776), single-exit `cmd_stack_status` via a `_render_status_text` helper (S3516), and an `_add_json_flag` helper for the repeated `"Emit structured JSON."` literal (S1192)
|
|
17
|
+
|
|
8
18
|
## [0.5.0] - 2026-06-20
|
|
9
19
|
|
|
10
20
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-refinery-cli
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Agent and CLI for data quality in storage and retrieval — validating, deduplicating, and checking the integrity and freshness of data as it is stored and fetched. Split out of eidetic-cli so eidetic keeps agent-memory; sibling to daria, the Data Refinery Intelligent Agent.
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentculture/data-refinery-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/agentculture/data-refinery-cli/issues
|
|
@@ -27,13 +27,14 @@ import json
|
|
|
27
27
|
import shutil
|
|
28
28
|
import subprocess # nosec B404 - used with a fixed argv, never shell=True
|
|
29
29
|
from pathlib import Path
|
|
30
|
+
from typing import Any
|
|
30
31
|
|
|
31
32
|
from data_refinery.cli._errors import EXIT_ENV_ERROR, CliError
|
|
32
33
|
from data_refinery.cli._output import emit_diagnostic, emit_result
|
|
33
34
|
|
|
34
35
|
_COMPOSE_FILENAME = "docker-compose.yml"
|
|
35
36
|
_DOCKER_HINT = (
|
|
36
|
-
"install Docker and ensure 'docker compose' works
|
|
37
|
+
"install Docker and ensure 'docker compose' works (https://docs.docker.com/get-docker/)"
|
|
37
38
|
)
|
|
38
39
|
_COMPOSE_HINT = (
|
|
39
40
|
"run from the data-refinery-cli repo (it ships docker-compose.yml), or pull "
|
|
@@ -113,26 +114,37 @@ def _compose(compose: Path, *args: str) -> subprocess.CompletedProcess[str]:
|
|
|
113
114
|
return proc
|
|
114
115
|
|
|
115
116
|
|
|
117
|
+
def _load_ps_rows(text: str) -> list[Any]:
|
|
118
|
+
"""Decode compose ps output: a top-level JSON array, else one object per line.
|
|
119
|
+
|
|
120
|
+
Split out of :func:`_parse_ps` so the two-mode decoding (with its nested
|
|
121
|
+
error handling) doesn't push that function's cognitive complexity over the
|
|
122
|
+
limit. *text* is assumed already stripped and non-empty.
|
|
123
|
+
"""
|
|
124
|
+
try:
|
|
125
|
+
parsed = json.loads(text)
|
|
126
|
+
return parsed if isinstance(parsed, list) else [parsed]
|
|
127
|
+
except json.JSONDecodeError:
|
|
128
|
+
pass
|
|
129
|
+
rows: list[Any] = []
|
|
130
|
+
for line in text.splitlines():
|
|
131
|
+
line = line.strip()
|
|
132
|
+
if not line:
|
|
133
|
+
continue
|
|
134
|
+
try:
|
|
135
|
+
rows.append(json.loads(line))
|
|
136
|
+
except json.JSONDecodeError:
|
|
137
|
+
continue
|
|
138
|
+
return rows
|
|
139
|
+
|
|
140
|
+
|
|
116
141
|
def _parse_ps(stdout: str) -> list[dict[str, object]]:
|
|
117
142
|
"""Parse ``docker compose ps --format json`` (array OR one-object-per-line)."""
|
|
118
143
|
text = stdout.strip()
|
|
119
144
|
if not text:
|
|
120
145
|
return []
|
|
121
|
-
try:
|
|
122
|
-
parsed = json.loads(text)
|
|
123
|
-
rows = parsed if isinstance(parsed, list) else [parsed]
|
|
124
|
-
except json.JSONDecodeError:
|
|
125
|
-
rows = []
|
|
126
|
-
for line in text.splitlines():
|
|
127
|
-
line = line.strip()
|
|
128
|
-
if not line:
|
|
129
|
-
continue
|
|
130
|
-
try:
|
|
131
|
-
rows.append(json.loads(line))
|
|
132
|
-
except json.JSONDecodeError:
|
|
133
|
-
continue
|
|
134
146
|
services: list[dict[str, object]] = []
|
|
135
|
-
for row in
|
|
147
|
+
for row in _load_ps_rows(text):
|
|
136
148
|
if not isinstance(row, dict):
|
|
137
149
|
continue
|
|
138
150
|
services.append(
|
|
@@ -198,6 +210,18 @@ def cmd_stack_down(args: argparse.Namespace) -> int:
|
|
|
198
210
|
return 0
|
|
199
211
|
|
|
200
212
|
|
|
213
|
+
def _render_status_text(payload: dict[str, object]) -> str:
|
|
214
|
+
"""Render the human-readable ``stack status`` text from a status payload."""
|
|
215
|
+
services = payload["services"]
|
|
216
|
+
if not services:
|
|
217
|
+
return "stack status: no services running (try 'data-refinery stack up')"
|
|
218
|
+
lines = [f"compose: {payload['compose_file']}", f"healthy: {payload['healthy']}"]
|
|
219
|
+
for s in services: # type: ignore[attr-defined]
|
|
220
|
+
health = f" ({s['health']})" if s["health"] else ""
|
|
221
|
+
lines.append(f"- {s['name']}: {s['state']}{health}")
|
|
222
|
+
return "\n".join(lines)
|
|
223
|
+
|
|
224
|
+
|
|
201
225
|
def cmd_stack_status(args: argparse.Namespace) -> int:
|
|
202
226
|
_require_docker()
|
|
203
227
|
compose = _require_compose()
|
|
@@ -206,18 +230,8 @@ def cmd_stack_status(args: argparse.Namespace) -> int:
|
|
|
206
230
|
payload["command"] = "status"
|
|
207
231
|
if json_mode:
|
|
208
232
|
emit_result(payload, json_mode=True)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if not services:
|
|
212
|
-
emit_result(
|
|
213
|
-
"stack status: no services running (try 'data-refinery stack up')", json_mode=False
|
|
214
|
-
)
|
|
215
|
-
return 0
|
|
216
|
-
lines = [f"compose: {payload['compose_file']}", f"healthy: {payload['healthy']}"]
|
|
217
|
-
for s in services:
|
|
218
|
-
health = f" ({s['health']})" if s["health"] else ""
|
|
219
|
-
lines.append(f"- {s['name']}: {s['state']}{health}")
|
|
220
|
-
emit_result("\n".join(lines), json_mode=False)
|
|
233
|
+
else:
|
|
234
|
+
emit_result(_render_status_text(payload), json_mode=False)
|
|
221
235
|
return 0
|
|
222
236
|
|
|
223
237
|
|
|
@@ -254,28 +268,32 @@ def _stack_overview(args: argparse.Namespace) -> int:
|
|
|
254
268
|
return 0
|
|
255
269
|
|
|
256
270
|
|
|
271
|
+
def _add_json_flag(p: argparse.ArgumentParser) -> None:
|
|
272
|
+
p.add_argument("--json", action="store_true", help="Emit structured JSON.")
|
|
273
|
+
|
|
274
|
+
|
|
257
275
|
def register(sub: argparse._SubParsersAction) -> None:
|
|
258
276
|
p = sub.add_parser(
|
|
259
277
|
"stack",
|
|
260
278
|
help="Manage the storage substrate (mongo + neo4j) via docker compose.",
|
|
261
279
|
)
|
|
262
|
-
p
|
|
280
|
+
_add_json_flag(p)
|
|
263
281
|
p.set_defaults(func=_stack_overview, json=False)
|
|
264
282
|
# Propagate the structured-error parser_class to nested verbs.
|
|
265
283
|
verb = p.add_subparsers(dest="stack_command", parser_class=type(p))
|
|
266
284
|
|
|
267
285
|
up = verb.add_parser("up", help="Bring the stack up (docker compose up -d).")
|
|
268
|
-
up
|
|
286
|
+
_add_json_flag(up)
|
|
269
287
|
up.set_defaults(func=cmd_stack_up)
|
|
270
288
|
|
|
271
289
|
down = verb.add_parser("down", help="Stop the stack (docker compose down).")
|
|
272
|
-
down
|
|
290
|
+
_add_json_flag(down)
|
|
273
291
|
down.set_defaults(func=cmd_stack_down)
|
|
274
292
|
|
|
275
293
|
status = verb.add_parser("status", help="Report per-service state + health.")
|
|
276
|
-
status
|
|
294
|
+
_add_json_flag(status)
|
|
277
295
|
status.set_defaults(func=cmd_stack_status)
|
|
278
296
|
|
|
279
297
|
ov = verb.add_parser("overview", help="Describe the stack noun.")
|
|
280
|
-
ov
|
|
298
|
+
_add_json_flag(ov)
|
|
281
299
|
ov.set_defaults(func=_stack_overview)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "data-refinery-cli"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.1"
|
|
4
4
|
description = "Agent and CLI for data quality in storage and retrieval — validating, deduplicating, and checking the integrity and freshness of data as it is stored and fetched. Split out of eidetic-cli so eidetic keeps agent-memory; sibling to daria, the Data Refinery Intelligent Agent."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/scripts/show.sh
RENAMED
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/explore.md
RENAMED
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/review.md
RENAMED
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/write.md
RENAMED
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/assign-to-workforce/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/_resolve-nick.sh
RENAMED
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/portability-lint.sh
RENAMED
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/pr-status.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/post-issue.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/doc-test-alignment/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/run-tests/scripts/test.sh
RENAMED
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/sonarclaude/scripts/sonar.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/version-bump/scripts/bump.py
RENAMED
|
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
|
|
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
|
{data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/__init__.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|