Conversation
…m-cli commands - Added license information to package-lock.json. - Updated pyproject.toml to ignore additional unused argument warnings. - Improved type hints in various aam-cli command functions and adapters for better clarity and type safety. - Refactored function signatures to specify return types and argument types more accurately across multiple files.
- Modified expected command list in `test_main.py` to include new commands and remove outdated ones. - Updated assertions in `test_mcp_integration.py` to reflect the correct number of tools (29) based on the latest specifications. - Adjusted assertions in `test_mcp_server.py` to verify the correct number of tools (17 for read-only and 29 for writable) in accordance with updated specifications.
… assertions - Included `types-PyYAML` version 6.0.0 in the development dependencies of `pyproject.toml`. - Updated the assertion in `test_main.py` to check for the existence of the archive file on disk instead of checking the output directly.
… and default sources changes - Added detailed documentation for the built-in Model Context Protocol (MCP) server, including usage instructions and available tools. - Updated the README and CLI documentation to reflect the removal of the `cursor/community-skills` source, now listing 4 curated community repositories. - Enhanced user guidance on package name validation and error messaging in the CLI commands. - Adjusted test cases to ensure consistency with the updated default sources and MCP functionalities.
- Changed the expected status from "pass" to "warn" for the scenario where the project config does not exist. - Added a check to ensure the warning message includes "not found, using defaults" for clarity in test feedback.
…rt discrete agent and instruction files. Update deployment mappings, configuration options, and examples to reflect new file structures. Remove marker-based merging for agents and instructions, ensuring clear separation of user content and AAM-managed content. Enhance clarity and organization throughout the documentation.
There was a problem hiding this comment.
Pull request overview
This PR expands AAM’s documentation and CLI capabilities around cross-platform workflows (MCP + conversion), updates default community sources, and adjusts Copilot/Claude deployment behavior to use discrete agent/instruction files where applicable.
Changes:
- Add the
aam convertCLI command, conversion utilities, and unit tests/spec documenting conversion behavior. - Update platform docs (Copilot/Claude) and user docs navigation; add MCP Interface documentation.
- Update curated default sources (now 4) and propagate those source-name changes across docs and tests; improve package-name validation messaging.
Reviewed changes
Copilot reviewed 73 out of 75 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| package-lock.json | Adds root license metadata. |
| docs/user_docs/mkdocs.yml | Adds new tutorial/CLI/MCP nav entries. |
| docs/user_docs/docs/tutorials/skill-consolidation.md | New tutorial covering multi-source skill consolidation into a package. |
| docs/user_docs/docs/tutorials/install-from-sources.md | New tutorial for initializing sources and installing skills from sources. |
| docs/user_docs/docs/tutorials/index.md | Updates tutorial landing page to include new tutorials. |
| docs/user_docs/docs/troubleshooting/migration.md | Documents migration via aam convert and updates Cursor→Claude steps. |
| docs/user_docs/docs/platforms/index.md | Adds section describing aam convert for platform migration. |
| docs/user_docs/docs/platforms/copilot.md | Updates Copilot platform behavior/docs to discrete agents/instructions layout. |
| docs/user_docs/docs/platforms/claude.md | Updates Claude platform behavior/docs: agents as files, instructions merged into CLAUDE.md. |
| docs/user_docs/docs/mcp/index.md | New MCP Interface documentation (server, tools, resources, safety model). |
| docs/user_docs/docs/index.md | Adds MCP entry point and expands homepage sections (tools/prereqs, MCP overview). |
| docs/user_docs/docs/concepts/platform-adapters.md | Updates adapter concept docs to reflect discrete files for Copilot/Claude agents. |
| docs/user_docs/docs/concepts/git-sources.md | Updates the list of default git sources. |
| docs/user_docs/docs/cli/source-enable-defaults.md | Updates default-source docs from 5→4 and new source names/paths. |
| docs/user_docs/docs/cli/list.md | Updates example output to reflect new source naming. |
| docs/user_docs/docs/cli/index.md | Adds aam convert under Utilities. |
| docs/user_docs/docs/cli/convert.md | New CLI reference for aam convert. |
| docs/specs/SPEC-convert-command.md | New detailed spec for conversion feature. |
| docs/USER_GUIDE.md | Adds a new section for aam convert and updates MCP tool counts/examples. |
| docs/DESIGN.md | Documents convert and updates platform mappings/tool lists/detection notes. |
| apps/aam-cli/tests/unit/test_unit_upgrade.py | Removes unused imports (test cleanup). |
| apps/aam-cli/tests/unit/test_unit_outdated.py | Cleans imports. |
| apps/aam-cli/tests/unit/test_unit_mcp_init_tools.py | Updates expected default source names in tests. |
| apps/aam-cli/tests/unit/test_unit_install_from_source.py | Cleans imports. |
| apps/aam-cli/tests/unit/test_unit_default_sources.py | Updates expectations from 5→4 default sources. |
| apps/aam-cli/tests/unit/test_unit_client_init.py | Updates expected registered sources in init tests. |
| apps/aam-cli/tests/unit/test_services_search.py | Updates source names in tests and cleans imports. |
| apps/aam-cli/tests/unit/test_services_recommend.py | Cleans imports. |
| apps/aam-cli/tests/unit/test_services_package.py | Typing improvements + patch structure cleanup. |
| apps/aam-cli/tests/unit/test_services_doctor.py | Updates expected statuses/messages for missing project config. |
| apps/aam-cli/tests/unit/test_services_config.py | Cleans imports and simplifies patch nesting. |
| apps/aam-cli/tests/unit/test_mcp_tools_write.py | Import ordering + patch nesting cleanup. |
| apps/aam-cli/tests/unit/test_mcp_server.py | Updates expected tool counts (read-only/write-enabled). |
| apps/aam-cli/tests/unit/test_mcp_resources.py | Import ordering cleanup. |
| apps/aam-cli/tests/unit/test_convert.py | New unit tests covering conversion and CLI behavior. |
| apps/aam-cli/tests/unit/test_commands_search.py | Import cleanup and ordering. |
| apps/aam-cli/tests/unit/test_adapters_factory.py | Updates adapter tests for discrete file deployment behavior. |
| apps/aam-cli/tests/test_main.py | Updates command registration expectations and adds naming suggestion tests. |
| apps/aam-cli/tests/integration/test_mcp_integration.py | Updates expected MCP tool counts. |
| apps/aam-cli/src/aam_cli/utils/naming.py | Adds suggestion + improved invalid-name error formatting. |
| apps/aam-cli/src/aam_cli/services/source_service.py | Updates DEFAULT_SOURCES (4, canonical URLs) + typing improvements. |
| apps/aam-cli/src/aam_cli/services/recommend_service.py | Minor loop var cleanup. |
| apps/aam-cli/src/aam_cli/services/install_service.py | Import refactor/cleanup. |
| apps/aam-cli/src/aam_cli/services/init_service.py | Improves invalid package-name error message. |
| apps/aam-cli/src/aam_cli/services/doctor_service.py | Adjusts config-file check severity + adds suggestion when registries missing. |
| apps/aam-cli/src/aam_cli/services/client_init_service.py | Minor typing cleanup. |
| apps/aam-cli/src/aam_cli/mcp/tools_read.py | Minor typing cleanup and import ordering. |
| apps/aam-cli/src/aam_cli/mcp/resources.py | Minor typing cleanup for returned values. |
| apps/aam-cli/src/aam_cli/main.py | Registers convert command + typing improvements. |
| apps/aam-cli/src/aam_cli/core/workspace.py | Adds explicit __all__ export list. |
| apps/aam-cli/src/aam_cli/converters/mappings.py | New conversion mapping/constants module. |
| apps/aam-cli/src/aam_cli/converters/frontmatter.py | New YAML frontmatter parse/generate utilities. |
| apps/aam-cli/src/aam_cli/converters/init.py | New converters package init. |
| apps/aam-cli/src/aam_cli/commands/verify.py | Improves typing of result dicts. |
| apps/aam-cli/src/aam_cli/commands/upgrade.py | Typing improvements for upgrade flow. |
| apps/aam-cli/src/aam_cli/commands/uninstall.py | Removes unused import. |
| apps/aam-cli/src/aam_cli/commands/source.py | Typing improvements + docs string update (5→4). |
| apps/aam-cli/src/aam_cli/commands/show_package.py | Tightens typing around frontmatter parsing. |
| apps/aam-cli/src/aam_cli/commands/pkg/create.py | Improves help text for package name option. |
| apps/aam-cli/src/aam_cli/commands/outdated.py | Typing improvements for outdated flow. |
| apps/aam-cli/src/aam_cli/commands/list_packages.py | Typing and TYPE_CHECKING cleanup. |
| apps/aam-cli/src/aam_cli/commands/install.py | Typing improvements and import ordering adjustments. |
| apps/aam-cli/src/aam_cli/commands/init_package.py | Improves interactive prompts + better invalid-name messaging/typing. |
| apps/aam-cli/src/aam_cli/commands/diff.py | Tightens typing for diff result structures. |
| apps/aam-cli/src/aam_cli/commands/create_package.py | Improves invalid-name messaging + typing improvements. |
| apps/aam-cli/src/aam_cli/commands/convert.py | New aam convert command implementation and output formatting. |
| apps/aam-cli/src/aam_cli/adapters/copilot.py | Switches Copilot agent/instruction deployment to discrete files under .github/. |
| apps/aam-cli/src/aam_cli/adapters/codex.py | Minor typing improvement for prompt_file. |
| apps/aam-cli/src/aam_cli/adapters/claude.py | Switches Claude agent deployment to .claude/agents/; keeps instruction merging into CLAUDE.md. |
| apps/aam-cli/pyproject.toml | Adds types-PyYAML and ruff ARG ignores. |
| apps/aam-cli/README.md | Adds MCP server documentation and tool/resource lists. |
| README.md | Updates default sources list (4) + adds MCP server section and updated deployment mapping. |
| .github/workflows/publish-pypi-test.yml | Adds --verbose to Nx lint/test run for aam-cli. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| warning_lower = warning.lower() | ||
|
|
||
| for key, workaround in VERBOSE_WORKAROUNDS.items(): | ||
| if key.replace("_", " ").replace("removed", "").strip() in warning_lower: |
There was a problem hiding this comment.
_print_verbose_workaround() matches warning strings case-sensitively, but warnings are lowercased (e.g. 'alwaysApply field dropped...'), so verbose workarounds won't print. Consider normalizing both sides (e.g. compare lowercased keys, or map warning categories explicitly) so --verbose consistently shows the intended workaround text.
| if key.replace("_", " ").replace("removed", "").strip() in warning_lower: | |
| normalized_key = ( | |
| key.replace("_", " ") | |
| .replace("removed", "") | |
| .strip() | |
| .lower() | |
| ) | |
| if normalized_key and normalized_key in warning_lower: |
| # Find the closing --- | ||
| end_idx = stripped.find("---", 3) | ||
| if end_idx == -1: | ||
| return {}, text | ||
|
|
||
| yaml_block = stripped[3:end_idx].strip() | ||
| body = stripped[end_idx + 3:].lstrip("\n") | ||
|
|
There was a problem hiding this comment.
parse_frontmatter() finds the closing '---' delimiter via stripped.find('---', 3), which can terminate early if '---' appears inside YAML values or body text. This can mis-parse frontmatter for otherwise valid files. Consider parsing by lines and treating only a line that equals '---' as the closing delimiter (or use a small state machine) to avoid false matches.
| # Find the closing --- | |
| end_idx = stripped.find("---", 3) | |
| if end_idx == -1: | |
| return {}, text | |
| yaml_block = stripped[3:end_idx].strip() | |
| body = stripped[end_idx + 3:].lstrip("\n") | |
| # Split into lines and find the closing '---' on its own line | |
| lines = stripped.splitlines(keepends=True) | |
| if not lines: | |
| return {}, text | |
| closing_idx: int | None = None | |
| for i, line in enumerate(lines[1:], start=1): | |
| if line.strip() == "---": | |
| closing_idx = i | |
| break | |
| if closing_idx is None: | |
| return {}, text | |
| # YAML block is everything between the opening and closing delimiters | |
| yaml_block = "".join(lines[1:closing_idx]).strip() | |
| # Body is everything after the closing delimiter | |
| body = "".join(lines[closing_idx + 1 :]).lstrip("\n") |
| AAM -->|reads/writes| Config["~/.aam/config.yaml"] | ||
| AAM -->|manages| Packages["~/.aam/packages/"] | ||
| AAM -->|clones/fetches| Sources["~/.aam/sources-cache/"] | ||
|
|
There was a problem hiding this comment.
The MCP overview diagram says sources are stored in ~/.aam/sources-cache/, but other docs (and the CLI output examples) refer to ~/.aam/cache/git/.... This mismatch is likely to confuse users configuring MCP workflows; please align the path in this doc with the actual cache directory name used by AAM.
| Instructions: | ||
| ─ instructions/*.md (AAM convention) | ||
| ─ .cursor/rules/*.mdc (Cursor rules, excluding agent-* rules) | ||
| ─ CLAUDE.md (Claude instructions) | ||
| ─ .github/copilot-instructions.md (Copilot instructions) | ||
| ─ .github/instructions/*.instructions.md (Copilot instructions) | ||
| ─ AGENTS.md (Codex instructions) | ||
| ``` |
There was a problem hiding this comment.
DESIGN.md updates the Copilot detection pattern to only .github/instructions/*.instructions.md, but the current scanner still detects .github/copilot-instructions.md as a Copilot instruction file. Either include both patterns here for backward compatibility, or update the scanner accordingly, so the design doc matches actual behavior.
| **Deployed to** `.github/instructions/python-standards.instructions.md`: | ||
|
|
||
| ```markdown | ||
| <!-- BEGIN AAM: python-standards instruction --> | ||
| --- | ||
| name: python-standards | ||
| description: "Python coding standards" | ||
| scope: project | ||
| --- | ||
|
|
||
| # Python Coding Standards |
There was a problem hiding this comment.
In the Copilot instruction example, the frontmatter uses scope: project, but elsewhere in this PR (SPEC-convert-command and convert docs) Copilot instruction metadata is described in terms of applyTo (glob-based conditional scoping). If scope isn't actually consumed by Copilot, consider switching this example to applyTo (or clarify how/why AAM emits scope for Copilot instruction files) to avoid misleading users.
|
@copilot open a new pull request to apply changes based on the comments in this thread |
…c paths and patterns Co-authored-by: spazyCZ <22116740+spazyCZ@users.noreply.github.com>
Fix frontmatter parsing, verbose workaround matching, and doc alignment
No description provided.