From d50b9a4a7c1886ff207ed302dd5dd1004aedc79b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:19:21 +0000 Subject: [PATCH 1/2] Initial plan From ce18364a6108cd3c039978f8dd1d66bd52a0603b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Mar 2026 17:25:11 +0000 Subject: [PATCH 2/2] Fix CLI consistency issues: remove emojis from help strings, fix config group, update uninstall description, fix --yes trailing period - Add invoke_without_command=True to config group so bare `apm config` shows config - Remove emojis from command help strings (init, install, update, compile) - Remove emojis from compile option descriptions (5 options) - Remove emojis from deps subcommand help strings (list, tree, clean, update, info) - Fix trailing period on runtime remove --yes option - Update uninstall help to reflect full scope - Remove emojis from all docs/cli-reference.md section headings Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com> --- docs/cli-reference.md | 50 ++++++++++++++++++------------------ src/apm_cli/cli.py | 24 ++++++++--------- src/apm_cli/commands/deps.py | 10 ++++---- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/docs/cli-reference.md b/docs/cli-reference.md index 3f0658024..4f97220a0 100644 --- a/docs/cli-reference.md +++ b/docs/cli-reference.md @@ -60,7 +60,7 @@ apm [OPTIONS] COMMAND [ARGS]... ## Core Commands -### `apm init` - ๐Ÿš€ Initialize new APM project +### `apm init` - Initialize new APM project Initialize a new APM project with minimal `apm.yml` configuration (like `npm init`). @@ -104,7 +104,7 @@ apm init my-project --yes - `description` - Generated from project name - `version` - Defaults to "1.0.0" -### `apm install` - ๐Ÿ“ฆ Install APM and MCP dependencies +### `apm install` - Install APM and MCP dependencies 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. @@ -259,7 +259,7 @@ Skills are copied directly to target directories: This makes all package prompts available in VSCode, Claude Code, and compatible editors for immediate use with your coding agents. -### `apm uninstall` - ๐Ÿ—‘๏ธ Remove APM packages +### `apm uninstall` - Remove APM packages Remove installed APM packages and their integrated files. @@ -310,7 +310,7 @@ apm uninstall microsoft/apm-sample-package --dry-run - Cleans up empty parent directories - Safe operation: only removes files tracked in the `deployed_files` manifest -### `apm prune` - ๐Ÿงน Remove orphaned packages +### `apm prune` - Remove orphaned packages Remove APM packages from `apm_modules/` that are not listed in `apm.yml`, along with their deployed integration files (prompts, agents, hooks, etc.). @@ -335,7 +335,7 @@ apm prune --dry-run - Removes deployed integration files (prompts, agents, hooks, etc.) for pruned packages using the `deployed_files` manifest in `apm.lock` - Updates `apm.lock` to reflect the pruned state -### `apm update` - โฌ†๏ธ Update APM to the latest version +### `apm update` - Update APM to the latest version Update the APM CLI to the latest version available on GitHub releases. @@ -378,7 +378,7 @@ If the automatic update fails, you can always update manually: curl -sSL https://raw.githubusercontent.com/microsoft/apm/main/install.sh | sh ``` -### `apm deps` - ๐Ÿ”— Manage APM package dependencies +### `apm deps` - Manage APM package dependencies Manage APM package dependencies with installation status, tree visualization, and package information. @@ -386,7 +386,7 @@ Manage APM package dependencies with installation status, tree visualization, an apm deps COMMAND [OPTIONS] ``` -#### `apm deps list` - ๐Ÿ“‹ List installed APM dependencies +#### `apm deps list` - List installed APM dependencies Show all installed APM dependencies in a Rich table format with per-primitive counts. @@ -415,7 +415,7 @@ apm deps list - Source information - Per-primitive counts (prompts, instructions, agents, skills) -#### `apm deps tree` - ๐ŸŒณ Show dependency tree structure +#### `apm deps tree` - Show dependency tree structure Display dependencies in hierarchical tree format with primitive counts. @@ -447,7 +447,7 @@ company-website (local) - Version numbers from dependency package metadata - Version information for each dependency -#### `apm deps info` - โ„น๏ธ Show detailed package information +#### `apm deps info` - Show detailed package information Display comprehensive information about a specific installed package. @@ -474,7 +474,7 @@ apm deps info design-guidelines - Agent workflow descriptions and counts - Installation path and status -#### `apm deps clean` - ๐Ÿงน Remove all APM dependencies +#### `apm deps clean` - Remove all APM dependencies Remove the entire `apm_modules/` directory and all installed APM packages. @@ -494,7 +494,7 @@ apm deps clean - Displays count of packages that will be removed - Can be cancelled with Ctrl+C or 'n' response -#### `apm deps update` - ๐Ÿ”„ Update APM dependencies +#### `apm deps update` - Update APM dependencies Update installed APM dependencies to their latest versions. @@ -514,7 +514,7 @@ apm deps update apm deps update compliance-rules ``` -### `apm mcp` - ๐Ÿ”Œ Browse MCP server registry +### `apm mcp` - Browse MCP server registry Browse and discover MCP servers from the GitHub MCP Registry. @@ -522,7 +522,7 @@ Browse and discover MCP servers from the GitHub MCP Registry. apm mcp COMMAND [OPTIONS] ``` -#### `apm mcp list` - ๐Ÿ“‹ List MCP servers +#### `apm mcp list` - List MCP servers List all available MCP servers from the registry. @@ -542,7 +542,7 @@ apm mcp list apm mcp list --limit 20 ``` -#### `apm mcp search` - ๐Ÿ” Search MCP servers +#### `apm mcp search` - Search MCP servers Search for MCP servers in the GitHub MCP Registry. @@ -568,7 +568,7 @@ apm mcp search database --limit 5 apm mcp search github ``` -#### `apm mcp show` - ๐Ÿ“‹ Show MCP server details +#### `apm mcp show` - Show MCP server details Show detailed information about a specific MCP server from the registry. @@ -595,7 +595,7 @@ apm mcp show a5e8a7f0-d4e4-4a1d-b12f-2896a23fd4f1 - Available installation packages - Installation instructions -### `apm run` - ๐Ÿš€ Execute prompts +### `apm run` - Execute prompts Execute a script defined in your apm.yml with parameters and real-time output streaming. @@ -627,7 +627,7 @@ apm run llm --param service=api --param environment=prod - `0` - Success - `1` - Execution failed or error occurred -### `apm preview` - ๐Ÿ‘€ Preview compiled scripts +### `apm preview` - Preview compiled scripts Show the processed prompt content with parameters substituted, without executing. @@ -650,7 +650,7 @@ apm preview start --param name="" apm preview llm --param name="Alice" ``` -### `apm list` - ๐Ÿ“‹ List available scripts +### `apm list` - List available scripts Display all scripts defined in apm.yml. @@ -672,7 +672,7 @@ Available scripts: debug: RUST_LOG=debug codex hello-world.prompt.md ``` -### `apm compile` - ๐Ÿ“ Compile APM context into distributed AGENTS.md files +### `apm compile` - Compile APM context into distributed AGENTS.md files Compile APM context files (chatmodes, instructions, contexts) into distributed AGENTS.md files with conditional sections, markdown link resolution, and project setup auto-detection. @@ -822,7 +822,7 @@ The structure is entirely dictated by the instruction context found in `.apm/` a APM integrates seamlessly with [Spec-kit](https://github.com/github/spec-kit) for specification-driven development, automatically injecting Spec-kit `constitution` into the compiled context layer. -### `apm config` - โš™๏ธ Configure APM CLI +### `apm config` - Configure APM CLI Manage APM CLI configuration settings. Running `apm config` without subcommands displays the current configuration. @@ -914,7 +914,7 @@ apm config set auto-integrate 1 ## Runtime Management -### `apm runtime` - ๐Ÿค– Manage AI runtimes +### `apm runtime` - Manage AI runtimes APM manages AI runtime installation and configuration automatically. Currently supports three runtimes: `copilot`, `codex`, and `llm`. @@ -927,7 +927,7 @@ apm runtime COMMAND [OPTIONS] - **`codex`** - OpenAI Codex CLI with GitHub Models support - **`llm`** - Simon Willison's LLM library with multiple providers -#### `apm runtime setup` - โš™๏ธ Install AI runtime +#### `apm runtime setup` - Install AI runtime Download and configure an AI runtime from official sources. @@ -963,7 +963,7 @@ apm runtime setup llm - Uses runtime's native defaults (e.g., OpenAI for Codex) - No configuration files created by APM -#### `apm runtime list` - ๐Ÿ“‹ Show installed runtimes +#### `apm runtime list` - Show installed runtimes List all available runtimes and their installation status. @@ -977,7 +977,7 @@ apm runtime list - Installation path and version - Configuration details -#### `apm runtime remove` - ๐Ÿ—‘๏ธ Uninstall runtime +#### `apm runtime remove` - Uninstall runtime Remove an installed runtime and its configuration. @@ -991,7 +991,7 @@ apm runtime remove RUNTIME_NAME **Options:** - `--yes` - Confirm the action without prompting -#### `apm runtime status` - ๐Ÿ“Š Show runtime status +#### `apm runtime status` - Show runtime status Display which runtime APM will use for execution and runtime preference order. diff --git a/src/apm_cli/cli.py b/src/apm_cli/cli.py index 50f47e92f..763230b30 100644 --- a/src/apm_cli/cli.py +++ b/src/apm_cli/cli.py @@ -310,7 +310,7 @@ def cli(ctx): cli.add_command(deps) -@cli.command(help="๐Ÿš€ Initialize a new APM project") +@cli.command(help="Initialize a new APM project") @click.argument("project_name", required=False) @click.option( "--yes", "-y", is_flag=True, help="Skip interactive prompts and use auto-detected defaults" @@ -635,7 +635,7 @@ def _validate_package_exists(package): @cli.command( - help="๐Ÿ“ฆ Install APM and MCP dependencies (auto-creates apm.yml when installing packages)" + help="Install APM and MCP dependencies (auto-creates apm.yml when installing packages)" ) @click.argument("packages", nargs=-1) @click.option("--runtime", help="Target specific runtime only (copilot, codex, vscode)") @@ -972,7 +972,7 @@ def prune(ctx, dry_run): sys.exit(1) -@cli.command(help="โฌ†๏ธ Update APM to the latest version") +@cli.command(help="Update APM to the latest version") @click.option("--check", is_flag=True, help="Only check for updates without installing") def update(check): """Update APM CLI to the latest version (like npm update -g npm). @@ -1099,7 +1099,7 @@ def update(check): sys.exit(1) -@cli.command(help="Remove APM packages from apm.yml and apm_modules") +@cli.command(help="Remove APM packages, their integrated files, and apm.yml entries") @click.argument("packages", nargs=-1, required=True) @click.option( "--dry-run", is_flag=True, help="Show what would be removed without removing" @@ -3899,7 +3899,7 @@ def _recompile(self, changed_file): sys.exit(1) -@cli.command(help="๐Ÿš€ Compile APM context into distributed AGENTS.md files") +@cli.command(help="Compile APM context into distributed AGENTS.md files") @click.option( "--output", "-o", @@ -3916,7 +3916,7 @@ def _recompile(self, changed_file): @click.option( "--dry-run", is_flag=True, - help="๐Ÿ” Preview compilation without writing files (shows placement decisions)", + help="Preview compilation without writing files (shows placement decisions)", ) @click.option("--no-links", is_flag=True, help="Skip markdown link resolution") @click.option("--chatmode", help="Chatmode to prepend to AGENTS.md files") @@ -3932,23 +3932,23 @@ def _recompile(self, changed_file): @click.option( "--single-agents", is_flag=True, - help="๐Ÿ“„ Force single-file compilation (legacy mode)", + help="Force single-file compilation (legacy mode)", ) @click.option( "--verbose", "-v", is_flag=True, - help="๐Ÿ” Show detailed source attribution and optimizer analysis", + help="Show detailed source attribution and optimizer analysis", ) @click.option( "--local-only", is_flag=True, - help="๐Ÿ  Ignore dependencies, compile only local primitives", + help="Ignore dependencies, compile only local primitives", ) @click.option( "--clean", is_flag=True, - help="๐Ÿงน Remove orphaned AGENTS.md files that are no longer generated", + help="Remove orphaned AGENTS.md files that are no longer generated", ) @click.pass_context def compile( @@ -4398,7 +4398,7 @@ def compile( sys.exit(1) -@cli.group(help="Configure APM CLI") +@cli.group(help="Configure APM CLI", invoke_without_command=True) @click.pass_context def config(ctx): """Configure APM CLI settings.""" @@ -4683,7 +4683,7 @@ def list(): @runtime.command(help="Remove an installed runtime") @click.argument("runtime_name", type=click.Choice(["copilot", "codex", "llm"])) -@click.confirmation_option(prompt="Are you sure you want to remove this runtime?") +@click.confirmation_option(prompt="Are you sure you want to remove this runtime?", help="Confirm the action without prompting") def remove(runtime_name): """Remove an installed runtime from APM management.""" try: diff --git a/src/apm_cli/commands/deps.py b/src/apm_cli/commands/deps.py index 305a99ae0..4519bbca6 100644 --- a/src/apm_cli/commands/deps.py +++ b/src/apm_cli/commands/deps.py @@ -22,7 +22,7 @@ def deps(): pass -@deps.command(name="list", help="๐Ÿ“‹ List installed APM dependencies") +@deps.command(name="list", help="List installed APM dependencies") def list_packages(): """Show all installed APM dependencies with context files and agent workflows.""" try: @@ -229,7 +229,7 @@ def list_packages(): sys.exit(1) -@deps.command(help="๐ŸŒณ Show dependency tree structure") +@deps.command(help="Show dependency tree structure") def tree(): """Display dependencies in hierarchical tree format using lockfile.""" try: @@ -389,7 +389,7 @@ def _add_children(parent_branch, parent_repo_url, depth=0): sys.exit(1) -@deps.command(help="๐Ÿงน Remove all APM dependencies") +@deps.command(help="Remove all APM dependencies") def clean(): """Remove entire apm_modules/ directory.""" project_root = Path(".") @@ -423,7 +423,7 @@ def clean(): sys.exit(1) -@deps.command(help="๐Ÿ”„ Update APM dependencies") +@deps.command(help="Update APM dependencies") @click.argument('package', required=False) def update(package: Optional[str]): """Update specific package or all if no package specified.""" @@ -461,7 +461,7 @@ def update(package: Optional[str]): _update_all_packages(project_deps, apm_modules_path) -@deps.command(help="โ„น๏ธ Show detailed package information") +@deps.command(help="Show detailed package information") @click.argument('package', required=True) def info(package: str): """Show detailed information about a specific package including context files and workflows."""