Skip to content

v1.1.0 — CLI, i18n, cost rename, docs overhaul, CI#6

Merged
8bit64k merged 138 commits into
masterfrom
feat/cli-terminal-access
May 26, 2026
Merged

v1.1.0 — CLI, i18n, cost rename, docs overhaul, CI#6
8bit64k merged 138 commits into
masterfrom
feat/cli-terminal-access

Conversation

@8bit64k

@8bit64k 8bit64k commented May 25, 2026

Copy link
Copy Markdown
Owner

v1.1.0 — CLI, i18n, cost rename, docs overhaul, CI

What's new

  • CLI tool — standalone terminal data dump, shorthand invocation, --json output
  • i18n / Localization — Spanish (es), Chinese Simplified (zh-CN), Traditional Chinese (zh-TW) via multi-model consensus
  • Cost field rename — all cost fields renamed with estimated qualifier (full stack: DB, API, UI, CLI)
  • Responsive toolbar — labels hide on narrow viewports, icon-only Refresh
  • Documentation overhaul — DOCS.md contracts, FAQ (22 questions), community templates
  • CI pipeline — ruff + mypy + pytest (149 tests, all green)

PR Checklist

  • 149 pytest passing
  • ruff clean
  • mypy clean
  • README badges (Hermes Agent + CI)

Before release

  • Spanish (es) — first-pass AI translation; needs Gaby review before tag
  • CI badge — workflow runs on PR merge; verify after merge

Nick added 30 commits May 14, 2026 22:26
- Add --outcome and --mode flags to all data commands
- Show job names (from jobs.json) with [N] badge for no_agent
- Show avg duration in jobs table
- Show outcome ✓/✗ and job_mode [N] in runs table
- Sort models by cost descending (already correct in facts.py)
- Add 'all' command that chains health+summary+jobs+models+trends
- Fix _JOBS_PATH to use config.HERMES_HOME for correct path resolution
- Fix config.py to gracefully fallback when hermes_constants missing
- Add [project.scripts] cronalytics entry in pyproject.toml
- Extract constants (box-drawing chars, banner widths, column layouts)
- Add TypedDict shapes for all data payloads (SummaryData, JobData, etc.)
- Split fetch_* and render_* functions (data/presentation separation)
- Generic _build_table_header() and _build_separator() helpers
- _json_envelope() is now pure; _db_date_range() handles DB queries
- Fix argparse bug: subparser --db default=None was clobbering parent value
  -> changed to argparse.SUPPRESS so --db works before OR after subcommand
- Add explicit sqlite3.Error / OSError handling in main() (exit code 2)
- ruff clean, mypy clean (zero issues)
- 54 pytest tests: formatters, data functions, rendering, integration
When watermark.json contains last_ended_at=null (reset state), float(None)
crashed with TypeError. Change wm.get('last_ended_at', 0.0) to
wm.get('last_ended_at') or 0.0 so null values fall back to 0.0.

Add regression test: test_null_watermark_regression in test_scanner_run_sync.py
- skills/devops/cronalytics/SKILL.md: structured diagnostic workflow,
  assessment template (Snapshot/Anomalies/Impact/Remediations), key
  concepts, and data source mapping aligned with CLI JSON surfaces
- PLAN.md: mark skill authoring as underway; document V4 and V5 decisions
  with rationale
- Add Leader Board section to CLI summary output (_compute_leader_board,
  _job_label, _render_summary) with Top Runs/Cost/Tokens/Pace + % share
- Fix --json pace stripping: JSON path now mirrors rendered path with
  full projections (pace, drift_ratio, scheduled_runs_*, etc.)
- Add 9 CLI tests: TestJobLabel (5), TestComputeLeaderBoard (3), leader
  board layout constant, summary integration tests
- Bump version to 1.1.0 across plugin.yaml, pyproject.toml, API, skill,
  and all docs
- Docs sweep: README, USAGE, INSTALL, DESIGN, FEATURES, PLAN, UNINSTALL
- README: Three Ways to Use (Dashboard/CLI/Skill) with philosophy
- USAGE: Full CLI usage + Agent Skill sections with examples
- INSTALL: pip install + skill symlink instructions
- DESIGN: CLI architecture section with three-layer model
- ruff clean on modified files; 149 tests passing
- pyproject.toml: Added [build-system] + [tool.setuptools] py-modules so
   actually works (was broken due to flat-layout auto-discovery)
- docs/INSTALL.md: Rewrote with 3-tier hierarchy for plugin/CLI/skill.
  Primary = Hermes-native (dashboard UI, ,
  ). Tertiary = manual copy. Removed all
  symlink instructions from user-facing docs.
- README.md: Install section now shows  first,
  pip as optional, shell alias as fallback. Added skill install snippet.
- docs/USAGE.md: CLI section now mentions plugin path + pip + alias.
- SKILL.md: CLI install section updated to match 3-tier hierarchy.
  Removed 'pip install -e .' and 'symlinked into' claims.
- cli.py: Docstring updated with primary/secondary/tertiary labels.

All symlinks removed from user-facing install docs. Windows compatibility
preserved. Developer symlinks still documented in dev/DEV_SETUP.md only.

149 tests passing. ruff clean.
The flat module layout (cli.py, config.py, facts.py, etc. at repo root)
means  dumps generic-named files into site-packages, creating
namespace collision risk with other packages. This is a non-starter.

Changes:
- Reverted pyproject.toml: removed [build-system], [project.scripts],
  and [tool.setuptools] py-modules entries. pip install no longer works.
- Removed all  claims from user-facing docs:
  README.md, docs/INSTALL.md, docs/USAGE.md, dev/DESIGN.md,
  skills/devops/cronalytics/SKILL.md, cli.py docstring.
- Updated install hierarchy everywhere:
  Primary = plugin path (python ~/.hermes/plugins/cronalytics/cli.py)
  Secondary = shell alias
  No tertiary pip path.

149 tests passing. ruff clean.
Move all flat .py modules into cronalytics/ directory to enable
proper pip install with namespace isolation:

- Moved: cli.py, config.py, facts.py, ingester.py, logger.py,
  scanner.py, schedule.py -> cronalytics/
- Added: cronalytics/__init__.py
- Updated root __init__.py for absolute imports
- Updated dashboard/plugin_api.py _load_module() path
- Updated cronalytics/cli.py bootstrap and imports
- Updated cronalytics/config.py PLUGIN_DIR resolution
- Updated all test imports (9 files)
- All 149 tests passing
…\nPath(__file__).parent.parent resolves to site-packages/ when installed\nnon-editably, breaking FACT_DB, WATERMARK_FILE, and PENDING_FILE paths.\nUse HERMES_HOME / plugins / cronalytics so data files resolve correctly\nregardless of install mode (editable, non-editable, or symlinked plugin dir).
Three latent path-resolution bugs with the same root cause:

1. __init__.py:29 — _ensure_skill_linked() fallback used Path.home(), which
   resolves to /home/nick/.hermes/home in Hermes terminal env.

2. config.py:15 — _HERMES_HOME fallback used Path.home() with same trap.

3. cli.py:239 — _resolve_db() checked Path.home() / .hermes / plugins / ...
   which is now redundant (config.FACT_DB uses HERMES_HOME correctly) and
   wrong when HERMES_HOME points to a custom path. Removed the redundant
   fallback entirely.

All three now read HERMES_HOME env var first, only falling back to
Path.home() / .hermes when the env var is unset.

See prior commits 515ab28 (relative imports) and b59f342 (PLUGIN_DIR fix)
for related path-resolution issues in the same release.
-  backfills cron sessions from state.db → facts.db
- Returns agent/script inserted/skipped counts + elapsed time
- Supports --json flag like all other subcommands
- Skill updated with 'When Data Is Stale — Agent Self-Healing' workflow:
  agent detects stale sync, runs sync, re-queries, continues assessment
- Adds sync to CLI reference table in SKILL.md
Add argcomplete>=3.0 dependency. Completion is auto-enabled when installed
via pip/uv; gracefully degrades to no-op when argcomplete is absent
(e.g., running cli.py directly without pip install).
Skipped counts for script sessions only grow as output files accumulate,
providing no actionable signal. Show total inserted only, with agent/script
breakdown when non-zero. Simpler, less alarming output.
Track query, agent ingest, and script scan phases separately.
Helps identify where the 4s vs <1s discrepancy comes from.
Timings exposed in return dict under 'timings_ms' key.
Remove per-phase timings_ms dict that was added for debugging.
Keep time.perf_counter() fix — replaces time.time() which was
causing incorrect 4s elapsed reports on wall-clock skewed systems.
- Fix stale CLI paths post-restructure (python ~/.hermes/plugins/cronalytics/cli.py → cronalytics via pip or python -m cronalytics.cli)
- Remove 'standalone' branding; CLI is an optional pip add-on, not a standalone product
- Update all file layouts to show cronalytics/ package directory
- Add pip install instructions with Arch footnote across README, INSTALL, USAGE
- Add pip uninstall step to UNINSTALL.md
- Clarify skill is manual install (not auto-enabled)
- Remove .gitignored internal docs from README index (LAUNCH_PLAN, AGENTS, PLAN)
- Add docs/TROUBLESHOOTING.md extracted from INSTALL.md
- Fix dev/DEV_SETUP.md to remove symlink advocacy
- Update FEATURES.md version header to 1.1.0, test count 83→149, shared flags
- Fix DESIGN.md terminology and file layout
- Remove duplicate CHECKPOINT.md from .gitignore
- Fix stale CLI paths post-restructure (python ~/.hermes/plugins/cronalytics/cli.py → cronalytics via pip or python -m cronalytics.cli)
- Remove 'standalone' branding; CLI is an optional pip add-on, not a standalone product
- Update all file layouts to show cronalytics/ package directory
- Add pip install instructions with Arch footnote across README, INSTALL, USAGE
- Add pip uninstall step to UNINSTALL.md
- Clarify skill is manual install (not auto-enabled)
- Remove .gitignored internal docs from README index (LAUNCH_PLAN, AGENTS, PLAN)
- Add docs/TROUBLESHOOTING.md extracted from INSTALL.md
- Fix dev/DEV_SETUP.md to remove symlink advocacy
- Update FEATURES.md version header to 1.1.0, test count 83→149, shared flags
- Fix DESIGN.md terminology and file layout
- Remove duplicate CHECKPOINT.md from .gitignore
- Extract inline changelog from README into root CHANGELOG.md
- Add docs/RELEASE_NOTES.md with upgrade notes and v1.1.0 narrative
- Fix dashboard/manifest.json version: 0.1.0 → 1.1.0 (alignment with plugin.yaml and pyproject.toml)
- Keep inline changelog in README per user request
8bit64k added 29 commits May 24, 2026 20:03
…run limit, models breakdown, PATH, facts.db snapshot, entire history
…TRIBUTING, SUPPORT.md

- .github/ISSUE_TEMPLATE/bug_report.md: structured bug report form
- .github/ISSUE_TEMPLATE/feature_request.md: feature request template
- .github/PULL_REQUEST_TEMPLATE.md: checklist + type of change
- CONTRIBUTING.md: added fork/Pipeline, bug/PR guidance, review criteria
- SUPPORT.md: help guide pointing to FAQ, Usage, Troubleshooting, templates
- README: Support section now links to SUPPORT.md
@8bit64k 8bit64k merged commit 7735418 into master May 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant