Skip to content

refactor: multi-crate workspace + mise-style CLI architecture - #60

Merged
getappz merged 6 commits into
masterfrom
feature/cli-refactor-mise
Jul 7, 2026
Merged

refactor: multi-crate workspace + mise-style CLI architecture#60
getappz merged 6 commits into
masterfrom
feature/cli-refactor-mise

Conversation

@getappz

@getappz getappz commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Summary

Refactors agentflare into mise-style multi-crate workspace with modular CLI. Each subcommand gets its own file under src/cli/. Independent modules extracted into workspace crates.

Closes #44

Changes

Phase 1: CLI modularization

  • src/cli/mod.rs — Cli struct, Commands enum, dispatch (global -y, -q flags)
  • 11 subcommand files — one per command with typed Args struct + run()
  • main.rs shrinks from 500 to ~30 lines
  • Follows mise's exact pattern: Self::Init(cmd) => cmd.run(yes)

Phase 2: Workspace extraction

  • crates/ponytail/ — standalone skill engine (19 tests)
  • crates/agent-registry/ — agent definitions + detection (22 tests)
  • Root Cargo.toml: [workspace] with both members
  • All imports updated: crate::ponytail -> ponytail, crate::agent_registry -> agent_registry

Test results

  • ponytail: 19/19
  • agent-registry: 22/22
  • agentflare: 40/40

Summary by CodeRabbit

  • New Features
    • Added a more structured command-line interface with dedicated subcommands for agent management, authentication, coaching, cost reporting, hooks, initialization, updates, uninstall, and MCP.
    • Introduced a multi-crate workspace layout that separates registry-related functionality from the main app.
  • Documentation
    • Added a planning document for the CLI/workspace refactor.
    • Added an end-to-end “CodeRabbit Fix Flow” skill guide for implementing minimal Rust fixes.
  • Refactor
    • Updated internal command dispatch and shared detection/utilities to align with the new workspace organization (no user-visible behavior changes expected).

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 16b9c0b0-ce82-4e69-bdd2-a26231f4329f

📥 Commits

Reviewing files that changed from the base of the PR and between 7540384 and 807a07f.

📒 Files selected for processing (1)
  • src/cli/ponytail.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cli/ponytail.rs

📝 Walkthrough

Walkthrough

The PR adds a Cargo workspace with new ponytail and agent-registry crates, moves registry/version-cache code into agent-registry, updates imports across the root crate and ponytail, extracts CLI parsing into src/cli/, and thins src/main.rs. It also adds planning and skill documentation.

Changes

Workspace extraction and CLI modularization

Layer / File(s) Summary
Workspace and crate manifests
Cargo.toml, crates/agent-registry/Cargo.toml, crates/ponytail/Cargo.toml
Root and crate manifests define the workspace members, local path dependencies, package metadata, dependencies, features, and lint settings.
agent-registry public API and VersionCacheEntry
crates/agent-registry/src/lib.rs, crates/agent-registry/src/detect.rs, src/state.rs
agent-registry exports its detect and registry modules, defines a local public VersionCacheEntry, makes PATH_LOCK always available, updates a test import, and State re-exports VersionCacheEntry from agent_registry.
ponytail crate internal import path fixes
crates/ponytail/src/instructions.rs, crates/ponytail/src/platform.rs, crates/ponytail/src/switcher.rs
ponytail source files update internal module references from crate::ponytail::* to crate-local paths.
Root crate consumers switch to agent_registry
src/agent_install.rs, src/agent_launch.rs, src/agents.rs, src/alias.rs, src/auth_runner.rs
Root crate code updates imports and calls to use agent_registry for agent metadata, binary lookup, detection, and lock access, including matching test imports.
Per-subcommand CLI modules
src/cli/mod.rs, src/cli/agents.rs, src/cli/alias.rs, src/cli/auth.rs, src/cli/coaching.rs, src/cli/cost.rs, src/cli/hook.rs, src/cli/init.rs, src/cli/mcp.rs, src/cli/ponytail.rs, src/cli/uninstall.rs, src/cli/update.rs
src/cli/mod.rs defines the top-level parser and command dispatch, and the new per-command modules parse arguments and forward them to existing handlers, including the ponytail hook and action flows.
main.rs thinned to entrypoint
src/main.rs
main.rs removes obsolete module declarations, adds mod cli, and delegates parsing and execution to cli::Cli::parse() and cli.command.run().

Estimated code review effort: 3 (Moderate) | ~30 minutes

Refactor plan and skill documentation

Layer / File(s) Summary
Multi-crate refactor plan
docs/superpowers/plans/2026-07-07-cli-refactor-mise.md
The new plan document describes the target workspace layout and the two implementation phases for CLI modularization and workspace extraction.
CodeRabbit fix skill
skills/coderabbit-fix/SKILL.md
The new skill document defines the review-comment fix workflow, Rust-specific guidance, validation commands, and prerequisites.

Sequence Diagram(s)

sequenceDiagram
  participant MainRs as main.rs
  participant CliMod as cli::Cli
  participant Commands as cli::Commands
  participant SubcommandArgs as Subcommand Args
  participant Handler as Existing Handler
  MainRs->>CliMod: Cli::parse()
  CliMod->>Commands: cli.command
  Commands->>SubcommandArgs: run()
  SubcommandArgs->>Handler: forward parsed args
  Handler-->>MainRs: result / exit code
Loading

Related issues: #44 — Refactor to multi-crate workspace + mise-style CLI

Suggested labels: refactor, cli, workspace

Suggested reviewers: maintainers familiar with the agentflare CLI dispatch and agent detection code

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The added docs and skills files are unrelated to the refactor and go beyond the linked issue scope. Move the plan and skill-document additions to a separate PR, or explain their necessity in the refactor scope.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the workspace refactor and mise-style CLI extraction.
Description check ✅ Passed The description covers the refactor, key changes, and test results, though it omits the template's test plan and reviewer notes sections.
Linked Issues check ✅ Passed The PR implements the requested modular CLI, workspace extraction, and import updates for #44.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/cli-refactor-mise

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (5)
skills/coderabbit-fix/SKILL.md (1)

73-79: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Avoid unwrap_or_default() in the parsing example.

This example silently turns malformed input into a default value, which teaches the workflow to mask failures instead of surfacing them. Propagate the error so the skill stays aligned with the root-cause-first guidance below.

Suggested fix
-let config = serde_json::from_str(&data).unwrap_or_default();
+let config = serde_json::from_str(&data)?;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/coderabbit-fix/SKILL.md` around lines 73 - 79, The parsing example in
the skill currently uses unwrap_or_default() on serde_json::from_str, which
hides malformed input by falling back to a default value. Update the example to
propagate the parsing failure instead of defaulting, and keep the guidance
aligned with the root-cause-first approach; use the serde_json::from_str example
in SKILL.md as the reference point.
crates/agent-registry/src/detect.rs (1)

18-24: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

PATH_LOCK is now permanent public API, only useful for tests.

Making PATH_LOCK unconditionally pub (vs. the previous #[cfg(test)] pub(crate)) is understandable — cfg(test) doesn't propagate across crate boundaries, so downstream test suites need real access to synchronize PATH env mutations. But this permanently exposes a test-only Mutex<()> in the crate's production public API/docs.

Consider gating it behind a dedicated feature (e.g., test-util) enabled only as a dev-dependency feature by consumer crates, instead of leaving it always-public with #[allow(dead_code)].

♻️ Sketch of a feature-gated alternative
+[features]
+test-util = []
+
 // detect.rs
-#[allow(dead_code)]
+#[cfg(any(test, feature = "test-util"))]
 pub static PATH_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());

Then consumer crates' [dev-dependencies] would enable agent-registry = { path = "...", features = ["test-util"] }.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/agent-registry/src/detect.rs` around lines 18 - 24, The public
PATH_LOCK exposed from detect.rs should not remain part of the دائم production
API since it is only needed for test synchronization. Update the detect module
to gate PATH_LOCK behind a dedicated test-only feature such as test-util, and
ensure any downstream access in tests is enabled only when that feature is
requested. Keep the symbol location in detect.rs and preserve its current use
for with_temp_path_dir, find_binary_tests, detect_all_tests, and
resolve_version_tests without exposing it unconditionally.
crates/ponytail/Cargo.toml (1)

10-14: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Consider budgeting an upgrade for ureq and sysinfo. ureq 3.x is a breaking rewrite, and sysinfo 0.39.x has API changes from 0.34, so this is a deferred maintenance bump rather than a blocker.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/ponytail/Cargo.toml` around lines 10 - 14, Plan a deferred dependency
maintenance update for the ponytail crate by reviewing the current ureq and
sysinfo usages before bumping versions. Check the code paths that depend on ureq
and sysinfo APIs, then adjust any affected call sites, feature flags, or type
imports so the crate remains compatible with the newer major/minor releases.
Keep the changes centered around the existing dependency declarations in
Cargo.toml and the corresponding call sites that use ureq and sysinfo.
src/cli/ponytail.rs (2)

91-125: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate logic between SessionStart and SubagentStart.

Both branches fetch the active/default mode, build instructions, detect platform, and format/print output almost identically (differing only in the hook name string and the off-mode handling). Consider extracting a shared helper to reduce duplication.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cli/ponytail.rs` around lines 91 - 125, Duplicate the repeated
hook-processing logic in PonytailAction::Hook by extracting a shared helper used
by both PonytailHookEvent::SessionStart and PonytailHookEvent::SubagentStart.
The helper should handle fetching active/default mode, the off-mode check,
building instructions, detecting the platform, and formatting/printing the hook
output, while allowing the hook name and any off-mode behavior differences to be
passed in as parameters.

63-66: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Inconsistent path used for clearing active state (ponytail::clear_active() vs ponytail::state::clear_active()).

Line 64 calls ponytail::clear_active() while line 96 calls ponytail::state::clear_active() for what appears to be the same operation. If these resolve to the same re-exported function this is just a style inconsistency; if not, please verify they have identical semantics.

Also applies to: 92-99

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cli/ponytail.rs` around lines 63 - 66, The active-state clearing call is
inconsistent between the PonytailAction::Off branch and the other path, so
update the CLI logic to use a single canonical entry point for clearing state.
In the ponytail command handling, make PonytailAction::Off and the code near the
second clear call both invoke the same function path, either
ponytail::clear_active or ponytail::state::clear_active, so the behavior is
identical and the implementation is consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/superpowers/plans/2026-07-07-cli-refactor-mise.md`:
- Line 16: The tree diagram fence in the plan document is missing a language
tag, which triggers markdownlint. Update the fenced block around the tree
diagram to use a readable tag like text so the diagram stays intact while
satisfying the linter; locate the affected fence in the markdown content near
the tree diagram and adjust only that fenced block.

In `@skills/coderabbit-fix/SKILL.md`:
- Around line 20-24: The current PR comment fetch uses gh pr view with --json
reviews, which only returns top-level review bodies and can miss inline
CodeRabbit comments. Update the comment-collection step in the workflow/docs to
use the pull request comments endpoint instead, and adjust the command or script
so it retrieves line-level review comments as well as general review text.
Reference the existing GitHub CLI usage in the SKILL.md instructions so the
replacement stays aligned with the current PR comment gathering flow.
- Around line 57-58: The test command in the ponytail guidance is using a name
filter instead of selecting the workspace package, so update the instruction to
use the correct package-targeted cargo test invocation in the relevant SKILL.md
entry and the duplicate example. Refer to the affected test guidance text around
the ponytail note and replace the existing cargo test form with the
package-based one so it actually runs the ponytail crate tests.

In `@src/cli/ponytail.rs`:
- Around line 46-54: The PonytailAction::Set branch in
ponytail::normalize_config_mode currently hides invalid modes by defaulting to
"full", which should instead fail like the other action handlers. Update the Set
match arm to treat a None from normalize_config_mode(&mode) as an error, print a
clear message with eprintln!, and exit non-zero rather than calling
ponytail::set_active with a fallback. Keep the existing error handling style
used in the Default and Update branches so invalid input is surfaced
consistently.
- Around line 55-62: The active mode is being saved from the raw CLI input in
PonytailAction::Default, so exact-string checks can see unnormalized values.
Update the Default branch in the ponytail::set_default_mode /
ponytail::set_active flow to normalize or canonicalize the mode first, then pass
the normalized value to set_active and print that same normalized value.

---

Nitpick comments:
In `@crates/agent-registry/src/detect.rs`:
- Around line 18-24: The public PATH_LOCK exposed from detect.rs should not
remain part of the دائم production API since it is only needed for test
synchronization. Update the detect module to gate PATH_LOCK behind a dedicated
test-only feature such as test-util, and ensure any downstream access in tests
is enabled only when that feature is requested. Keep the symbol location in
detect.rs and preserve its current use for with_temp_path_dir,
find_binary_tests, detect_all_tests, and resolve_version_tests without exposing
it unconditionally.

In `@crates/ponytail/Cargo.toml`:
- Around line 10-14: Plan a deferred dependency maintenance update for the
ponytail crate by reviewing the current ureq and sysinfo usages before bumping
versions. Check the code paths that depend on ureq and sysinfo APIs, then adjust
any affected call sites, feature flags, or type imports so the crate remains
compatible with the newer major/minor releases. Keep the changes centered around
the existing dependency declarations in Cargo.toml and the corresponding call
sites that use ureq and sysinfo.

In `@skills/coderabbit-fix/SKILL.md`:
- Around line 73-79: The parsing example in the skill currently uses
unwrap_or_default() on serde_json::from_str, which hides malformed input by
falling back to a default value. Update the example to propagate the parsing
failure instead of defaulting, and keep the guidance aligned with the
root-cause-first approach; use the serde_json::from_str example in SKILL.md as
the reference point.

In `@src/cli/ponytail.rs`:
- Around line 91-125: Duplicate the repeated hook-processing logic in
PonytailAction::Hook by extracting a shared helper used by both
PonytailHookEvent::SessionStart and PonytailHookEvent::SubagentStart. The helper
should handle fetching active/default mode, the off-mode check, building
instructions, detecting the platform, and formatting/printing the hook output,
while allowing the hook name and any off-mode behavior differences to be passed
in as parameters.
- Around line 63-66: The active-state clearing call is inconsistent between the
PonytailAction::Off branch and the other path, so update the CLI logic to use a
single canonical entry point for clearing state. In the ponytail command
handling, make PonytailAction::Off and the code near the second clear call both
invoke the same function path, either ponytail::clear_active or
ponytail::state::clear_active, so the behavior is identical and the
implementation is consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e3cdd2e2-fbe7-44c6-8af9-2a02e643d422

📥 Commits

Reviewing files that changed from the base of the PR and between 2ecc6f1 and 7540384.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (41)
  • Cargo.toml
  • crates/agent-registry/Cargo.toml
  • crates/agent-registry/src/detect.rs
  • crates/agent-registry/src/lib.rs
  • crates/agent-registry/src/registry.rs
  • crates/ponytail/Cargo.toml
  • crates/ponytail/src/config.rs
  • crates/ponytail/src/detect.rs
  • crates/ponytail/src/instructions.rs
  • crates/ponytail/src/lib.rs
  • crates/ponytail/src/platform.rs
  • crates/ponytail/src/skill-audit.md
  • crates/ponytail/src/skill-debt.md
  • crates/ponytail/src/skill-gain.md
  • crates/ponytail/src/skill-help.md
  • crates/ponytail/src/skill-review.md
  • crates/ponytail/src/skill.md
  • crates/ponytail/src/state.rs
  • crates/ponytail/src/sub_skills.rs
  • crates/ponytail/src/switcher.rs
  • docs/superpowers/plans/2026-07-07-cli-refactor-mise.md
  • skills/coderabbit-fix/SKILL.md
  • src/agent_install.rs
  • src/agent_launch.rs
  • src/agents.rs
  • src/alias.rs
  • src/auth_runner.rs
  • src/cli/agents.rs
  • src/cli/alias.rs
  • src/cli/auth.rs
  • src/cli/coaching.rs
  • src/cli/cost.rs
  • src/cli/hook.rs
  • src/cli/init.rs
  • src/cli/mcp.rs
  • src/cli/mod.rs
  • src/cli/ponytail.rs
  • src/cli/uninstall.rs
  • src/cli/update.rs
  • src/main.rs
  • src/state.rs


## Target workspace structure

```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language tag to the tree fence.

Markdownlint flags this fence; text keeps the diagram readable and avoids the lint failure.

Suggested fix
-```
+```text
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 16-16: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/superpowers/plans/2026-07-07-cli-refactor-mise.md` at line 16, The tree
diagram fence in the plan document is missing a language tag, which triggers
markdownlint. Update the fenced block around the tree diagram to use a readable
tag like text so the diagram stays intact while satisfying the linter; locate
the affected fence in the markdown content near the tree diagram and adjust only
that fenced block.

Source: Linters/SAST tools

Comment on lines +20 to +24
Use GitHub CLI to get all review comments on the PR:

```bash
gh pr view <PR_NUMBER> --repo getappz/agentflare --json reviews --jq '.reviews[].body'
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

git ls-files 'skills/coderabbit-fix/SKILL.md'
wc -l skills/coderabbit-fix/SKILL.md
cat -n skills/coderabbit-fix/SKILL.md | sed -n '1,120p'

Repository: getappz/agentflare

Length of output: 4559


🌐 Web query:

GitHub CLI gh pr view --json reviews inline review comments body reviews array comments endpoint

💡 Result:

The GitHub CLI command gh pr view does not provide first-class support for retrieving inline (line-specific) pull request review comments [1]. While the --json flag allows you to fetch various pull request details such as reviews, the reviews object returned contains only high-level information—such as the review body, state, and author—and does not include the associated inline discussion threads [2][3]. To access inline review comments for a pull request, you must use the gh api command to query the GitHub REST API directly [1]. The endpoint for retrieving all review comments on a pull request is [1]: GET /repos/{owner}/{repo}/pulls/{pull_number}/comments You can execute this via the CLI as follows [1]: gh api repos/{owner}/{repo}/pulls/{pull_number}/comments If you need to retrieve comments for a specific review, you can use the following endpoint [1]: GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments When using gh api, you can filter the output using the -q flag and a jq expression to extract the specific fields you need, such as the comment body, file path, and line number [1].

Citations:


Fetch inline review comments too. gh pr view --json reviews only returns review bodies, so this workflow can miss line-level CodeRabbit comments. Switch to the pull-request comments endpoint instead.

Suggested fix
- gh pr view <PR_NUMBER> --repo getappz/agentflare --json reviews --jq '.reviews[].body'
+ gh api repos/getappz/agentflare/pulls/<PR_NUMBER>/comments --jq '.[].body'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Use GitHub CLI to get all review comments on the PR:
```bash
gh pr view <PR_NUMBER> --repo getappz/agentflare --json reviews --jq '.reviews[].body'
```
Use GitHub CLI to get all review comments on the PR:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/coderabbit-fix/SKILL.md` around lines 20 - 24, The current PR comment
fetch uses gh pr view with --json reviews, which only returns top-level review
bodies and can miss inline CodeRabbit comments. Update the comment-collection
step in the workflow/docs to use the pull request comments endpoint instead, and
adjust the command or script so it retrieves line-level review comments as well
as general review text. Reference the existing GitHub CLI usage in the SKILL.md
instructions so the replacement stays aligned with the current PR comment
gathering flow.

Comment on lines +57 to +58
4. Run `cargo test ponytail` if touching ponytail code
5. Mark todo complete

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

git ls-files 'skills/coderabbit-fix/SKILL.md'
echo
wc -l skills/coderabbit-fix/SKILL.md
echo
cat -n skills/coderabbit-fix/SKILL.md | sed -n '45,115p'
echo
rg -n "cargo test ponytail|cargo test -p ponytail|ponytail" -S skills/coderabbit-fix/SKILL.md

Repository: getappz/agentflare

Length of output: 3110


🏁 Script executed:

#!/bin/bash
set -euo pipefail

fd -a 'Cargo.toml' .
echo
rg -n '^\s*name\s*=\s*"(ponytail|agentflare|.*)"|^\s*\[workspace\]|\bponytail\b' -S Cargo.toml **/Cargo.toml 2>/dev/null || true
echo
python3 - <<'PY'
from pathlib import Path
for p in Path('.').rglob('Cargo.toml'):
    txt = p.read_text(errors='ignore')
    if 'ponytail' in txt or '[workspace]' in txt:
        print(f'--- {p}')
        for i, line in enumerate(txt.splitlines(), 1):
            if 'ponytail' in line or '[workspace]' in line or 'name =' in line:
                print(f'{i}: {line}')
PY

Repository: getappz/agentflare

Length of output: 731


🏁 Script executed:

#!/bin/bash
set -euo pipefail

cargo test --help | sed -n '1,120p' | rg -n 'TESTNAME|--package|-p|name' -n -S

Repository: getappz/agentflare

Length of output: 403


Use cargo test -p ponytail here. cargo test ponytail filters test names instead of selecting the ponytail workspace package, so it can miss the crate under change. Same fix applies to the duplicate example below.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/coderabbit-fix/SKILL.md` around lines 57 - 58, The test command in the
ponytail guidance is using a name filter instead of selecting the workspace
package, so update the instruction to use the correct package-targeted cargo
test invocation in the relevant SKILL.md entry and the duplicate example. Refer
to the affected test guidance text around the ponytail note and replace the
existing cargo test form with the package-based one so it actually runs the
ponytail crate tests.

Comment thread src/cli/ponytail.rs
Comment thread src/cli/ponytail.rs
@getappz
getappz merged commit 7af46db into master Jul 7, 2026
10 checks passed
@getappz
getappz deleted the feature/cli-refactor-mise branch July 7, 2026 16:59
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 7, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor to multi-crate workspace + mise-style CLI

1 participant