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.
Files changed (104) hide show
  1. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/tests.yml +12 -0
  2. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/CHANGELOG.md +10 -0
  3. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/PKG-INFO +1 -1
  4. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/stack.py +50 -32
  5. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/pyproject.toml +1 -1
  6. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/uv.lock +1 -1
  7. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/SKILL.md +0 -0
  8. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  9. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
  10. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/SKILL.md +0 -0
  11. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  12. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  13. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  14. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  15. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  16. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  17. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/SKILL.md +0 -0
  18. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  19. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  20. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  21. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  22. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  23. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/SKILL.md +0 -0
  24. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  25. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  26. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  27. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  28. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  29. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  30. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  31. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  32. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  33. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  34. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/run-tests/SKILL.md +0 -0
  35. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
  36. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
  37. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  38. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  39. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  40. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/think/SKILL.md +0 -0
  41. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/think/scripts/think.sh +0 -0
  42. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/version-bump/SKILL.md +0 -0
  43. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
  44. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.claude/skills.local.yaml.example +0 -0
  45. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/current +0 -0
  46. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.devague/current_plan +0 -0
  47. {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
  48. {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
  49. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.flake8 +0 -0
  50. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/publish-stack.yml +0 -0
  51. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.github/workflows/publish.yml +0 -0
  52. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.gitignore +0 -0
  53. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/.markdownlint-cli2.yaml +0 -0
  54. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/AGENTS.colleague.md +0 -0
  55. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/CLAUDE.md +0 -0
  56. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/LICENSE +0 -0
  57. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/README.md +0 -0
  58. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/culture.yaml +0 -0
  59. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/__init__.py +0 -0
  60. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/__main__.py +0 -0
  61. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/__init__.py +0 -0
  62. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/__init__.py +0 -0
  63. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/cli.py +0 -0
  64. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/doctor.py +0 -0
  65. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/explain.py +0 -0
  66. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/learn.py +0 -0
  67. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/overview.py +0 -0
  68. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/quality.py +0 -0
  69. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/store.py +0 -0
  70. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_commands/whoami.py +0 -0
  71. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_errors.py +0 -0
  72. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/cli/_output.py +0 -0
  73. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/explain/__init__.py +0 -0
  74. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/explain/catalog.py +0 -0
  75. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/quality/__init__.py +0 -0
  76. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/quality/checks.py +0 -0
  77. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/__init__.py +0 -0
  78. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backend.py +0 -0
  79. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/__init__.py +0 -0
  80. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/files.py +0 -0
  81. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/mongo.py +0 -0
  82. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/backends/neo4j.py +0 -0
  83. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/data_refinery/store/envelope.py +0 -0
  84. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docker-compose.yml +0 -0
  85. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/contract.md +0 -0
  86. {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
  87. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/skill-sources.md +0 -0
  88. {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
  89. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/docs/stack-image.md +0 -0
  90. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/sonar-project.properties +0 -0
  91. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/__init__.py +0 -0
  92. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/conftest.py +0 -0
  93. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_cli.py +0 -0
  94. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_cli_introspection.py +0 -0
  95. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_live_stack.py +0 -0
  96. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_no_optional_top_import.py +0 -0
  97. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_quality.py +0 -0
  98. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_scope_no_leak.py +0 -0
  99. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_stack.py +0 -0
  100. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_adapters.py +0 -0
  101. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_api.py +0 -0
  102. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_backends.py +0 -0
  103. {data_refinery_cli-0.5.0 → data_refinery_cli-0.5.1}/tests/test_store_cli.py +0 -0
  104. {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.0
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 " "(https://docs.docker.com/get-docker/)"
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 rows:
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
- return 0
210
- services = payload["services"]
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.add_argument("--json", action="store_true", help="Emit structured JSON.")
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.add_argument("--json", action="store_true", help="Emit structured JSON.")
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.add_argument("--json", action="store_true", help="Emit structured JSON.")
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.add_argument("--json", action="store_true", help="Emit structured JSON.")
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.add_argument("--json", action="store_true", help="Emit structured JSON.")
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.0"
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"
@@ -156,7 +156,7 @@ wheels = [
156
156
 
157
157
  [[package]]
158
158
  name = "data-refinery-cli"
159
- version = "0.5.0"
159
+ version = "0.5.1"
160
160
  source = { editable = "." }
161
161
 
162
162
  [package.optional-dependencies]