You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
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 -->