Repository navigation
Commit 9fcfef5
authored
feat!: rename Hawk to Rho; add Tau-style TUI and feature parity (#306)
* refactor!: rename Hawk to Rho
Rename the product, module, binary, config surface, and docs from Hawk to
Rho. The module path is now github.com/GrayCodeAI/rho, the binary and
command directory are rho, and the environment prefix is RHO_.
Compatibility shims keep existing installs working:
- internal/env.GetenvRho reads RHO_<suffix> then falls back to HAWK_<suffix>
- storage.ConfigDir/StateDir/CacheDir honor HAWK_*_DIR overrides and reuse
an existing ~/.hawk directory when ~/.rho does not exist
BREAKING CHANGE: module path, binary name, and default config directory
changed from hawk to rho.
* feat(tui): add Tau-style theme and frontend contract
- Add a 'tau' theme palette (near-black surface, single muted blue accent,
hairline separators) to the theme registry and picker.
- Minimal chrome: the tau theme renders the input with a single bottom
hairline instead of the default top+bottom box rules.
- Document the StreamEvent frontend contract and add a testaudit guard that
frontends (cmd/) never import engine internals (agent/code/prompt/async/
trajectory).
- Add a plan doc at docs/plans/rho-tau-alignment.md.
* feat(cli): add --cwd flag and transcript output format
- --cwd <dir>: run against another project directory (interactive, -p, exec)
- --output-format transcript: plain timestamped transcript, no ANSI
- Add docs/plans/tau-feature-parity.md tracking Tau feature parity
* feat(cli): add /login and .agents instruction resources
- /login [provider] routes to the config panel (Tau's auth entry point),
preselecting a provider when given.
- LoadAgentsMDFrom now also reads .agents/AGENTS.md, matching Tau's shared
resource layout alongside the root-level AGENTS.md.
* fix(cli): apply --cwd for subcommands and document transcript
--cwd only ran in the root RunE, so 'rho --cwd X <subcommand>' silently
ignored it (and an invalid path did not error). Move it to
PersistentPreRunE so every subcommand honors it and the path is validated
once. Also list 'transcript' in the --output-format help.
* test: regenerate golden help for --cwd and transcript
* fix(ci): generate workspace from checkout dir and de-hardcode fingerprint name
The product repo is still checked out as 'hawk' in CI while ecosystem.yaml
lists 'rho', so generate-workspace.sh failed with 'directory rho does not
exist'. Derive the self directory from the checkout and compare
case-insensitively so the workspace generates before and after the rename.
fingerprint_test asserted Name=='rho' but Generate derives the name from the
checkout directory, so it failed under the 'hawk' checkout. Compare against
the actual root basename instead.
* fix(test): restore theme globals in chrome tests
The chrome tests used ApplyTheme("dark") as cleanup, which writes the dark
palette's values (e.g. textPrimary #ECECEE) rather than the init-time defaults
(#F0F0F0). Depending on test order this leaked into
TestAdaptiveNeutralsPreserveDarkAppearance, which locks the init values. Use
the existing restoreThemeGlobals helper instead.
* fix(security): harden shell, git, path, and external-content boundaries
- TerminalCreate/TerminalSend now run the full Bash safety stack
(destructive/AST/obfuscation checks), scrub provider keys from the PTY
environment, and are classified as shell tools so they require approval.
- Extract the shared shell safety stack into validateShellCommand and reuse
it from BashTool and the terminal tools.
- Route model-facing git invocations through a new internal/gitcmd helper
that disables repo-controlled program execution (diff.external,
core.fsmonitor, core.pager, core.editor) and system config.
- Download refuses sensitive paths (e.g. .env, provider.json).
- Custom linter shell-quotes the file path to prevent command injection.
- Wrap WebFetch/WebSearch/Browser output as untrusted external content
before it enters the model context.
- URLScraper uses the SSRF guard and IP-pinned client.
- Token store rejects symlinks and repairs permissive modes.
* fix(concurrency): make tool events cancellable and close data races
- Tool event sends select on ctx.Done() so a consumer that stops draining
(TUI quit, daemon disconnect) no longer blocks tool goroutines forever.
- Background-task supervisor publishes cmd.Wait's error on a channel instead
of reading cmd.ProcessState concurrently with Wait.
- Guard the package-global lastAutoCommitHash with a mutex.
- Track daemon review subprocesses in a WaitGroup, release the concurrency
slot when the review finishes, and bound each run with a timeout.
- Add timeouts to spec tool exec (go test/find/grep) and git context.
* chore: remove dead packages and make the CI fuzz gate real
- Delete internal/jsonc and internal/providers: zero production importers.
- Drop their references from the Makefile test-new/cover-new targets.
- Add a non-mutating fmt-check target and use it in make ci.
- Fix the fuzz job: each target now names a single package (./cmd/... had
multiple, so the cmd target failed setup silently) and failures are no
longer swallowed by || true.1 parent 5e3fb1e commit 9fcfef5
1,288 files changed
Lines changed: 7945 additions & 8858 deletions
File tree
- .github
- ISSUE_TEMPLATE
- actions
- checkout-eyrie
- rho
- setup-deps
- workflows
- api
- cmd
- compat-test
- rho
- deploy/docker
- docs
- architecture
- adr
- design
- plans
- user-guide
- examples
- github
- internal
- acp
- appverify
- auth
- autoinit
- catalogtest
- circuitbreaker
- codegraph
- config
- context/repomap
- contracts
- agent
- events
- graph
- harness
- policy
- review
- types
- verify
- crash
- daemon
- diffsandbox
- engine
- agent
- branching
- compact
- compression
- control
- cost
- ctxmgr
- diff
- errs
- git
- history
- intelligence
- io
- lifecycle
- memory
- observability
- planning
- project
- review
- safety
- scaffold
- search
- token
- validation
- workflow
- env
- errhint
- eventlog
- executiongraph
- feature
- evalloop
- eval
- skills
- fingerprint
- shellmode
- taste
- flags
- fuzzyfind
- gitcmd
- gitworktree
- governance
- graphjournal
- harness
- hooks
- audit
- identity
- installtxn
- intelligence
- memory
- planner
- repomap
- skillcurator
- jsonc
- lint
- lsp
- mcp
- multiagent
- agents
- parallel
- notify
- observability
- otellog
- oteltrace
- onboarding
- permissions
- stableid
- planning
- platform/cloud
- plugin
- prompts
- templates
- prompt
- providers
- provider
- gateway
- routing
- recipe
- replaycache
- resilience/health
- rhoerr
- rules
- safewrite
- schedule
- securitylog
- sessionquery
- session
- snapshot
- spec
- status
- storage
- stt
- system/staleness
- taskruntime
- terminal
- tape
- testaudit
- testrunner
- testutil
- theme
- token
- tool
- trust
- tui
- types
- ui/icons
- update
- usage
- npm
- rho-darwin-arm64
- bin
- rho-darwin-x64
- bin
- rho-linux-arm64
- bin
- rho-linux-x64
- bin
- rho-win32-arm64
- bin
- rho-win32-x64
- bin
- rho
- bin
- scripts
- packaging/systemd
- scripts
- spec
- testdata
- golden
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
9 | | - | |
| 8 | + | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | | - | |
| 1 | + | |
| 2 | + | |
| 3 | + | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
47 | | - | |
| 47 | + | |
48 | 48 | | |
49 | | - | |
50 | | - | |
| 49 | + | |
| 50 | + | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
0 commit comments