Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions docs/cli-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ apm init my-project --yes
Install APM package and MCP server dependencies from `apm.yml` (like `npm install`). Auto-creates minimal `apm.yml` when packages are specified but no manifest exists.

```bash
apm install [PACKAGES...] [OPTIONS]
apm install [OPTIONS] [PACKAGES...]
```

**Arguments:**
Expand All @@ -120,11 +120,11 @@ apm install [PACKAGES...] [OPTIONS]
- `--exclude TEXT` - Exclude specific runtime from installation
- `--only [apm|mcp]` - Install only specific dependency type
- `--update` - Update dependencies to latest Git references
- `--force` - Overwrite locally-authored files on collision
- `--dry-run` - Show what would be installed without installing
- `--parallel-downloads INT` - Max concurrent package downloads (default: 4, 0 to disable)
- `--force` - Overwrite locally-authored files on collision
- `--verbose` - Show detailed installation information
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

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

apm install now supports the -v short alias, but the CLI reference still documents only --verbose. Update this option entry to reflect -v, --verbose so the docs match the actual CLI flags.

Suggested change
- `--verbose` - Show detailed installation information
- `-v, --verbose` - Show detailed installation information

Copilot uses AI. Check for mistakes.
- `--trust-transitive-mcp` - Trust self-defined MCP servers from transitive packages (skip re-declaration requirement)
- `--parallel-downloads INT` - Max concurrent package downloads (default: 4, 0 to disable)

**Behavior:**
- `apm install` (no args): Installs **all** packages from `apm.yml`
Expand Down Expand Up @@ -548,11 +548,11 @@ company-website (local)
Display comprehensive information about a specific installed package.

```bash
apm deps info PACKAGE_NAME
apm deps info PACKAGE
```

**Arguments:**
- `PACKAGE_NAME` - Name of the package to show information about
- `PACKAGE` - Name of the package to show information about

**Examples:**
```bash
Expand Down Expand Up @@ -595,11 +595,11 @@ apm deps clean
Update installed APM dependencies to their latest versions.

```bash
apm deps update [PACKAGE_NAME]
apm deps update [PACKAGE]
```

**Arguments:**
- `PACKAGE_NAME` - Optional. Update specific package only
- `PACKAGE` - Optional. Update specific package only

**Examples:**
```bash
Expand Down Expand Up @@ -627,7 +627,7 @@ apm mcp list [OPTIONS]
```

**Options:**
- `--limit INTEGER` - Number of results to show
- `--limit INTEGER` - Number of results to show (default: 20)

**Examples:**
```bash
Expand Down Expand Up @@ -1087,7 +1087,7 @@ apm runtime remove RUNTIME_NAME
**Options:**
- `--yes` - Confirm the action without prompting

#### `apm runtime status` - Show runtime status
#### `apm runtime status` - Check which runtime will be used

Display which runtime APM will use for execution and runtime preference order.

Expand Down
2 changes: 1 addition & 1 deletion src/apm_cli/commands/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def config(ctx):
console = _get_console()
# Create configuration display
config_table = Table(
title="⚙️ Current APM Configuration",
title="Current APM Configuration",
show_header=True,
header_style="bold cyan",
)
Expand Down
22 changes: 11 additions & 11 deletions src/apm_cli/commands/deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ def list_packages():
# Check if apm_modules exists
if not apm_modules_path.exists():
if has_rich:
console.print("💡 No APM dependencies installed yet", style="cyan")
console.print("No APM dependencies installed yet", style="cyan")
console.print("Run 'apm install' to install dependencies from apm.yml", style="dim")
else:
click.echo("💡 No APM dependencies installed yet")
click.echo("No APM dependencies installed yet")
click.echo("Run 'apm install' to install dependencies from apm.yml")
return

Expand Down Expand Up @@ -157,18 +157,18 @@ def list_packages():
'is_orphaned': is_orphaned
})
except Exception as e:
click.echo(f"⚠️ Warning: Failed to read package {org_repo_name}: {e}")
click.echo(f"Warning: Failed to read package {org_repo_name}: {e}")

if not installed_packages:
if has_rich:
console.print("💡 apm_modules/ directory exists but contains no valid packages", style="cyan")
console.print("apm_modules/ directory exists but contains no valid packages", style="cyan")
else:
click.echo("💡 apm_modules/ directory exists but contains no valid packages")
click.echo("apm_modules/ directory exists but contains no valid packages")
return

# Display packages in table format
if has_rich:
table = Table(title="📋 APM Dependencies", show_header=True, header_style="bold cyan")
table = Table(title="APM Dependencies", show_header=True, header_style="bold cyan")
table.add_column("Package", style="bold white")
table.add_column("Version", style="yellow")
Comment on lines 169 to 173
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

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

deps.py still contains emoji output in other code paths (e.g., update flows print ✅/⚠️/❌ later in the file). Given the PR description says emojis were stripped from "all runtime messages" in this module, consider removing/replacing those remaining emoji strings too to fully comply with the no-emoji policy.

Copilot uses AI. Check for mistakes.
table.add_column("Source", style="blue")
Expand All @@ -195,13 +195,13 @@ def list_packages():

# Show orphaned packages warning
if orphaned_packages:
console.print(f"\n⚠️ {len(orphaned_packages)} orphaned package(s) found (not in apm.yml):", style="yellow")
console.print(f"\n{len(orphaned_packages)} orphaned package(s) found (not in apm.yml):", style="yellow")
for pkg in orphaned_packages:
console.print(f" • {pkg}", style="dim yellow")
console.print("\n💡 Run 'apm prune' to remove orphaned packages", style="cyan")
console.print("\nRun 'apm prune' to remove orphaned packages", style="cyan")
else:
# Fallback text table
click.echo("📋 APM Dependencies:")
click.echo("APM Dependencies:")
click.echo(f"{'Package':<30} {'Version':<10} {'Source':<12} {'Prompts':>7} {'Instr':>7} {'Agents':>7} {'Skills':>7} {'Hooks':>7}")
click.echo("-" * 98)

Expand All @@ -219,10 +219,10 @@ def list_packages():

# Show orphaned packages warning
if orphaned_packages:
click.echo(f"\n⚠️ {len(orphaned_packages)} orphaned package(s) found (not in apm.yml):")
click.echo(f"\n{len(orphaned_packages)} orphaned package(s) found (not in apm.yml):")
for pkg in orphaned_packages:
click.echo(f" • {pkg}")
click.echo("\n💡 Run 'apm prune' to remove orphaned packages")
click.echo("\nRun 'apm prune' to remove orphaned packages")

except Exception as e:
_rich_error(f"Error listing dependencies: {e}")
Expand Down
2 changes: 1 addition & 1 deletion src/apm_cli/commands/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ def _validate_package_exists(package):
"--dry-run", is_flag=True, help="Show what would be installed without installing"
)
@click.option("--force", is_flag=True, help="Overwrite locally-authored files on collision")
@click.option("--verbose", is_flag=True, help="Show detailed installation information")
@click.option("-v", "--verbose", is_flag=True, help="Show detailed installation information")
@click.option(
Comment on lines +290 to 291
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

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

Adding -v is a new user-facing CLI behavior. There are existing unit/integration tests for apm install, but none appear to cover the -v alias specifically. Please add a small test asserting apm install -v ... is accepted (i.e., does not error with "No such option: -v").

Copilot generated this review using guidance from repository custom instructions.
"--trust-transitive-mcp",
is_flag=True,
Expand Down
4 changes: 2 additions & 2 deletions src/apm_cli/commands/mcp.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def mcp():

@mcp.command(help="Search MCP servers in registry")
@click.argument("query", required=True)
@click.option("--limit", default=10, help="Number of results to show")
@click.option("--limit", default=10, show_default=True, help="Number of results to show")
@click.pass_context
def search(ctx, query, limit):
Comment on lines 21 to 25
Copy link

Copilot AI Mar 11, 2026

Choose a reason for hiding this comment

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

This module still prints emoji characters in runtime output (e.g., the Rich path prints "⚠" and "💡" in search() output). If this PR is intended to enforce the "no emojis in any output" policy, those remaining emoji strings should be replaced with plain-text indicators.

Copilot uses AI. Check for mistakes.
"""Search for MCP servers in the registry."""
Expand Down Expand Up @@ -288,7 +288,7 @@ def show(ctx, server_name):


@mcp.command(help="List all available MCP servers")
@click.option("--limit", default=20, help="Number of results to show")
@click.option("--limit", default=20, show_default=True, help="Number of results to show")
@click.pass_context
def list(ctx, limit):
"""List all available MCP servers in the registry."""
Expand Down
Loading