Skip to content

v3.0.4

Choose a tag to compare

@github-actions github-actions released this 04 Jun 20:23
· 5 commits to main since this release
dd7e250
Cli dx improvements (#932)

<!-- greptile_comment -->

<h3>Greptile Summary</h3>

This PR delivers a set of CLI developer-experience improvements: renames
`helix run` to `helix start` (keeping `run` as a backward-compatible
alias), removes the Dashboard command, adds a new `helix skills`
subcommand for managing agent skills, makes `helix chef` work without
Cloud auth in non-interactive / headless environments, and adds branded
help styling and a 24 h skills-update-check alongside the existing
binary update check.

- **`helix run` → `helix start`**: All internal call sites updated;
`#[command(alias = "run")]` preserves backward compatibility with
scripts and agent muscle memory.
- **`helix skills` command**: New install / update / list subcommands
wrapping `npx skills`; `helix update` and `helix init` / `chef`
automatically refresh skills after install, with a 24 h GitHub-SHA–based
staleness check surfaced on the welcome screen.
- **Go SDK conflict handling**: `ErrConflict` sentinel, `StatusCode` on
`HelixError`, and `IsConflict` helper added; empty `Returning()` now
serializes as `[]` instead of `null` (bug fix in `returningVars`).
- **Rust SDK**: Comprehensive rustdoc coverage added to all public types
and methods with no logic changes.

<details><summary><h3>Important Files Changed</h3></summary>




| Filename | Overview |
|----------|----------|
| helix-cli/src/main.rs | Major CLI DX overhaul: renames `run` to
`start` (with backward alias), removes Dashboard, adds Skills command,
adds branded help styling, adds hidden removed-command stubs with
friendly errors, and parallelizes update checks sequentially (minor
latency concern). |
| helix-cli/src/update.rs | New skills-update-check subsystem: GitHub
commits API polling with 24h cache, `HELIX_NO_UPDATE_CHECK` opt-out,
`skills_installed()` lockfile probe, and `record_skills_refreshed()`
cache reset — all mirroring the existing binary update-check pattern. |
| helix-cli/src/commands/chef.rs | Cloud auth is now optional in
non-interactive / `HELIX_SKIP_CLOUD_AUTH` environments; snapshot upload
is skipped gracefully when credentials are absent, unblocking headless
agent runs. |
| helix-cli/src/commands/skills.rs | New `helix skills` subcommand
(install / update / list) delegating to `npx skills`; checks for `npx`
presence and returns a helpful error when Node.js is absent. |
| sdks/go/client.go | Adds `ErrConflict` sentinel, `StatusCode` field on
`HelixError`, and `IsConflict` helper; operator precedence in
`IsConflict` is correct but explicit parentheses would improve
readability. |
| sdks/go/dsl.go | Extracts `returningVars` helper to ensure empty
`Returning()` calls serialize as `[]` instead of `null` — bug fix
confirmed by new test. |
| sdks/go/README.md | Adds conflict-retry guidance and parameter
documentation; the `ExecWithConflictRetry` example has a dead `return
nil` after the loop that is unreachable and potentially misleading. |
| sdks/rust/src/lib.rs | Comprehensive rustdoc coverage added to all
public types and methods; no logic changes. |
| helix-cli/src/lib.rs | Adds `SkillsAction` enum and
`--skills`/`--no-skills` flags to both `InitTarget` variants, with
`skills_override()` to resolve subcommand-level flags over parent-level
flags. |
| helix-cli/src/setup.rs | Adds `list_skills` / `skills_list_args` and
updates warning messages to reference `helix start`; well-tested with
new unit tests. |

</details>


</details>


<details><summary><h3>Flowchart</h3></summary>

```mermaid
%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[helix CLI invoked] --> B{top-level help?}
    B -- yes --> C[print_help / exit]
    B -- no --> D[check_for_updates]
    D --> E[check_skills_update]
    E --> F[Cli::parse]
    F --> G{command?}
    G -- none --> H[display_welcome\nupdate + skills notices]
    G -- start / run alias --> I[commands::start::run]
    G -- skills install/update/list --> J[commands::skills::run\nnpx skills ...]
    G -- init local/cloud --> K[commands::init::run\nmaybe_install_tooling]
    G -- chef --> L[commands::chef::run\nskip auth if non-interactive]
    G -- update --> M[commands::update::run\nrefresh_skills_if_installed]
    G -- compile/check/deploy --> N[friendly removed-command error]
    J --> O[crate::setup::install_skills\nor list_skills]
    O --> P[record_skills_refreshed\ndelete skills_cache.toml]
```
</details>


<!-- greptile_failed_comments -->
<details><summary><h3>Comments Outside Diff (1)</h3></summary>

1. `helix-cli/src/main.rs`, line 659-661
([link](https://github.com/helixdb/helix-db/blob/d4960a8a5fb471c2e2256cc099781336e728aed8/helix-cli/src/main.rs#L659-L661))

<a href="#"><img alt="P2"
src="https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=9"
align="top"></a> **Sequential network calls add latency to every
command**

`check_for_updates` and `check_skills_update` are awaited sequentially
before `Cli::parse()`. On a cache-miss day each can block up to 10 s
(the `reqwest` timeout), meaning any command — not just the welcome
screen — could stall for up to 20 s once every 24 h. These two
independent futures could be parallelized with `tokio::join!` to cap the
overhead at one network round-trip instead of two.

Note: If this suggestion doesn't match your team's coding style, reply
to this and let me know. I'll remember it for next time!

</details>

<!-- /greptile_failed_comments -->

<sub>Reviews (1): Last reviewed commit: ["Enhance Go SDK error handling
and query
..."](https://github.com/helixdb/helix-db/commit/d4960a8a5fb471c2e2256cc099781336e728aed8)
| [Re-trigger
Greptile](https://app.greptile.com/api/retrigger?id=35682745)</sub>

> Greptile also left **1 inline comment** on this PR.

<!-- /greptile_comment -->