From 85a4e599f8ec752a591734bb598ac0dc034ce8ed Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 00:55:03 +0100 Subject: [PATCH 01/18] feat: implement plugin exporter and apm pack --format plugin - Add plugin_exporter.py: transforms .apm/ layout to plugin-native directories (agents, skills, commands, instructions, contexts) with collision handling, hooks/MCP merging, devDependencies filtering, and security scanning - Add synthesize_plugin_json_from_apm_yml() to plugin_parser.py for generating plugin.json from apm.yml identity fields - Wire fmt='plugin' delegation in packer.py to export_plugin_bundle() - Add --force flag to pack CLI for last-writer-wins collision override - Export export_plugin_bundle from bundle __init__.py - Add 73 unit tests covering export engine, synthesis, and packer integration - Document --format plugin in pack-distribute guide with mapping table Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../content/docs/guides/pack-distribute.md | 54 ++ src/apm_cli/bundle/__init__.py | 9 +- src/apm_cli/bundle/packer.py | 16 + src/apm_cli/bundle/plugin_exporter.py | 559 +++++++++++++ src/apm_cli/commands/pack.py | 4 +- src/apm_cli/deps/plugin_parser.py | 44 + tests/unit/test_plugin_exporter.py | 771 ++++++++++++++++++ tests/unit/test_plugin_synthesis.py | 167 ++++ 8 files changed, 1622 insertions(+), 2 deletions(-) create mode 100644 src/apm_cli/bundle/plugin_exporter.py create mode 100644 tests/unit/test_plugin_exporter.py create mode 100644 tests/unit/test_plugin_synthesis.py diff --git a/docs/src/content/docs/guides/pack-distribute.md b/docs/src/content/docs/guides/pack-distribute.md index 90c856b5..e95fbb2c 100644 --- a/docs/src/content/docs/guides/pack-distribute.md +++ b/docs/src/content/docs/guides/pack-distribute.md @@ -66,6 +66,7 @@ apm pack --dry-run | `--archive` | off | Produce `.tar.gz` instead of directory | | `-o, --output` | `./build` | Output directory | | `--dry-run` | off | List files without writing | +| `--force` | off | On collision (plugin format), last writer wins | ### Target filtering @@ -145,6 +146,59 @@ build/my-project-1.0.0/ The bundle is self-describing: its `apm.lock.yaml` lists every file it contains and the dependency graph that produced them. +## Plugin format + +`apm pack --format plugin` transforms your project into a standalone plugin directory consumable by Copilot CLI, Claude Code, or other plugin hosts. The output contains no APM-specific files — no `apm.yml`, `apm_modules/`, `.apm/`, or `apm.lock.yaml`. + +Use this when you want to distribute your APM package as a standalone plugin that works without APM. + +```bash +apm pack --format plugin +``` + +### Output mapping + +The exporter remaps `.apm/` content into plugin-native paths: + +| APM source | Plugin output | +|---|---| +| `.apm/agents/*.agent.md` | `agents/*.agent.md` | +| `.apm/skills/*/SKILL.md` | `skills/*/SKILL.md` | +| `.apm/prompts/*.prompt.md` | `commands/*.md` | +| `.apm/prompts/*.md` | `commands/*.md` | +| `.apm/instructions/*.instructions.md` | `instructions/*.instructions.md` | +| `.apm/context/*.context.md` | `contexts/*.context.md` | +| `.apm/memory/*.memory.md` | `contexts/*.memory.md` | +| `.apm/hooks/*.json` | `hooks.json` (merged) | +| `.apm/commands/*.md` | `commands/*.md` | + +Prompt files are renamed: `review.prompt.md` becomes `review.md` in `commands/`. + +### plugin.json generation + +The bundle includes a `plugin.json`. If one already exists in the project (at the root, `.github/plugin/`, `.claude-plugin/`, or `.cursor-plugin/`), it is used and updated with component paths reflecting the output layout. Otherwise, APM synthesizes one from `apm.yml` metadata. + +### devDependencies exclusion + +Dependencies listed under [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) in `apm.yml` are excluded from the plugin bundle. This keeps development-only packages out of distributed plugins. + +### Example output + +``` +build/my-plugin-1.0.0/ + agents/ + architect.agent.md + skills/ + security-scan/ + SKILL.md + commands/ + review.md + instructions/ + coding-standards.instructions.md + hooks.json + plugin.json +``` + ## Lockfile enrichment The bundle includes a copy of `apm.lock.yaml` enriched with a `pack:` section. The project's own `apm.lock.yaml` is never modified. diff --git a/src/apm_cli/bundle/__init__.py b/src/apm_cli/bundle/__init__.py index 31dc0988..8cba3e1f 100644 --- a/src/apm_cli/bundle/__init__.py +++ b/src/apm_cli/bundle/__init__.py @@ -1,6 +1,13 @@ """Bundle creation and consumption for APM packages.""" from .packer import pack_bundle, PackResult +from .plugin_exporter import export_plugin_bundle from .unpacker import unpack_bundle, UnpackResult -__all__ = ["pack_bundle", "PackResult", "unpack_bundle", "UnpackResult"] +__all__ = [ + "pack_bundle", + "PackResult", + "export_plugin_bundle", + "unpack_bundle", + "UnpackResult", +] diff --git a/src/apm_cli/bundle/packer.py b/src/apm_cli/bundle/packer.py index d1860cb4..ff7d75f9 100644 --- a/src/apm_cli/bundle/packer.py +++ b/src/apm_cli/bundle/packer.py @@ -46,6 +46,7 @@ def pack_bundle( target: Optional[str] = None, archive: bool = False, dry_run: bool = False, + force: bool = False, ) -> PackResult: """Create a self-contained bundle from installed APM dependencies. @@ -57,6 +58,7 @@ def pack_bundle( (auto-detect from apm.yml / project structure). archive: If *True*, produce a ``.tar.gz`` and remove the directory. dry_run: If *True*, resolve the file list but write nothing to disk. + force: On collision (plugin format), last writer wins. Returns: :class:`PackResult` describing what was (or would be) produced. @@ -67,6 +69,20 @@ def pack_bundle( """ # 1. Read lockfile (migrate legacy apm.lock → apm.lock.yaml if needed) migrate_lockfile_if_needed(project_root) + + # Plugin format: delegate to dedicated exporter + if fmt == "plugin": + from .plugin_exporter import export_plugin_bundle + + return export_plugin_bundle( + project_root=project_root, + output_dir=output_dir, + target=target, + archive=archive, + dry_run=dry_run, + force=force, + ) + lockfile_path = get_lockfile_path(project_root) lockfile = LockFile.read(lockfile_path) if lockfile is None: diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py new file mode 100644 index 00000000..74304b01 --- /dev/null +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -0,0 +1,559 @@ +"""Plugin exporter -- transforms APM packages into plugin-native directories. + +Produces a standalone plugin directory that Copilot CLI, Claude Code, or other +plugin hosts can consume directly. The output contains no APM-specific files +(no ``apm.yml``, ``apm_modules/``, ``.apm/``, or ``apm.lock.yaml``). +""" + +import json +import os +import shutil +import tarfile +from pathlib import Path +from typing import Dict, List, Optional, Set, Tuple + +import yaml + +from ..deps.lockfile import ( + LockFile, + LockedDependency, + get_lockfile_path, + migrate_lockfile_if_needed, +) +from ..models.apm_package import APMPackage, DependencyReference +from ..utils.console import _rich_info, _rich_warning +from .packer import PackResult + +# --------------------------------------------------------------------------- +# Path helpers +# --------------------------------------------------------------------------- + + +def _validate_output_rel(rel: str) -> bool: + """Return True when *rel* is safe to write inside the output directory.""" + p = Path(rel) + return not p.is_absolute() and ".." not in p.parts + + +def _rename_prompt(name: str) -> str: + """Strip the ``.prompt`` infix so ``foo.prompt.md`` becomes ``foo.md``.""" + if name.endswith(".prompt.md"): + return name[: -len(".prompt.md")] + ".md" + return name + + +# --------------------------------------------------------------------------- +# Component collectors +# --------------------------------------------------------------------------- + + +def _collect_apm_components(apm_dir: Path) -> List[Tuple[Path, str]]: + """Collect all components from a package's ``.apm/`` directory. + + Returns a list of ``(source_abs, output_rel_posix)`` tuples using the + APM → plugin mapping table. + """ + components: List[Tuple[Path, str]] = [] + if not apm_dir.is_dir(): + return components + + # agents/ -> agents/ + _collect_flat(apm_dir / "agents", "agents", components) + + # skills/ -> skills/ (preserve sub-directory structure) + _collect_recursive(apm_dir / "skills", "skills", components) + + # prompts/ -> commands/ (rename .prompt.md -> .md) + _collect_recursive( + apm_dir / "prompts", "commands", components, rename=_rename_prompt + ) + + # instructions/ -> instructions/ + _collect_recursive(apm_dir / "instructions", "instructions", components) + + # context/ -> contexts/ (pluralised) + _collect_recursive(apm_dir / "context", "contexts", components) + + # memory/ -> contexts/ (merged into contexts) + _collect_recursive(apm_dir / "memory", "contexts", components) + + # commands/ -> commands/ + _collect_recursive(apm_dir / "commands", "commands", components) + + return components + + +def _collect_root_plugin_components(project_root: Path) -> List[Tuple[Path, str]]: + """Collect plugin-native components authored at root level. + + Packages that already follow the plugin directory convention (``agents/``, + ``skills/``, etc. at the repo root) have their files picked up here. + """ + components: List[Tuple[Path, str]] = [] + for dir_name in ("agents", "skills", "commands", "instructions", "contexts"): + _collect_recursive(project_root / dir_name, dir_name, components) + return components + + +# -- low-level walkers ------------------------------------------------------- + + +def _collect_flat( + src_dir: Path, + output_prefix: str, + out: List[Tuple[Path, str]], + *, + rename=None, +) -> None: + """Add every regular non-symlink file directly inside *src_dir*.""" + if not src_dir.is_dir(): + return + for f in sorted(src_dir.iterdir()): + if f.is_file() and not f.is_symlink(): + name = rename(f.name) if rename else f.name + out.append((f, f"{output_prefix}/{name}")) + + +def _collect_recursive( + src_dir: Path, + output_prefix: str, + out: List[Tuple[Path, str]], + *, + rename=None, +) -> None: + """Add every regular non-symlink file under *src_dir*, preserving hierarchy.""" + if not src_dir.is_dir(): + return + for f in sorted(src_dir.rglob("*")): + if not f.is_file() or f.is_symlink(): + continue + rel = f.relative_to(src_dir) + name = rename(rel.name) if rename else rel.name + out_rel = (rel.parent / name).as_posix() + out.append((f, f"{output_prefix}/{out_rel}")) + + +# --------------------------------------------------------------------------- +# Hooks / MCP merging +# --------------------------------------------------------------------------- + + +def _deep_merge(base: dict, overlay: dict, *, overwrite: bool = False) -> None: + """Recursively merge *overlay* into *base*. + + When *overwrite* is False (default), existing base keys win. + When *overwrite* is True, overlay keys overwrite base keys. + """ + for key, value in overlay.items(): + if key not in base: + base[key] = value + elif overwrite: + if isinstance(base[key], dict) and isinstance(value, dict): + _deep_merge(base[key], value, overwrite=True) + else: + base[key] = value + else: + if isinstance(base[key], dict) and isinstance(value, dict): + _deep_merge(base[key], value, overwrite=False) + + +def _collect_hooks_from_apm(apm_dir: Path) -> dict: + """Return merged hooks from ``.apm/hooks/*.json``.""" + hooks: dict = {} + hooks_dir = apm_dir / "hooks" + if not hooks_dir.is_dir(): + return hooks + for f in sorted(hooks_dir.iterdir()): + if f.is_file() and f.suffix == ".json" and not f.is_symlink(): + try: + data = json.loads(f.read_text(encoding="utf-8")) + if isinstance(data, dict): + _deep_merge(hooks, data, overwrite=False) + except (json.JSONDecodeError, OSError): + pass + return hooks + + +def _collect_hooks_from_root(package_root: Path) -> dict: + """Return hooks from a root-level ``hooks.json`` or ``hooks/`` directory.""" + hooks: dict = {} + # Single file + hooks_file = package_root / "hooks.json" + if hooks_file.is_file() and not hooks_file.is_symlink(): + try: + data = json.loads(hooks_file.read_text(encoding="utf-8")) + if isinstance(data, dict): + _deep_merge(hooks, data, overwrite=False) + except (json.JSONDecodeError, OSError): + pass + # Directory + hooks_dir = package_root / "hooks" + if hooks_dir.is_dir(): + for f in sorted(hooks_dir.iterdir()): + if f.is_file() and f.suffix == ".json" and not f.is_symlink(): + try: + data = json.loads(f.read_text(encoding="utf-8")) + if isinstance(data, dict): + _deep_merge(hooks, data, overwrite=False) + except (json.JSONDecodeError, OSError): + pass + return hooks + + +def _collect_mcp(package_root: Path) -> dict: + """Return ``mcpServers`` dict from ``.mcp.json``.""" + mcp_file = package_root / ".mcp.json" + if not mcp_file.is_file() or mcp_file.is_symlink(): + return {} + try: + data = json.loads(mcp_file.read_text(encoding="utf-8")) + if isinstance(data, dict): + servers = data.get("mcpServers", {}) + return dict(servers) if isinstance(servers, dict) else {} + except (json.JSONDecodeError, OSError): + pass + return {} + + +# --------------------------------------------------------------------------- +# devDependencies filtering +# --------------------------------------------------------------------------- + + +def _get_dev_dependency_urls(apm_yml_path: Path) -> Set[str]: + """Read ``devDependencies.apm`` from raw YAML and return a repo_url set. + + This is a read-only check on the YAML file — the APMPackage model is not + modified. + """ + try: + data = yaml.safe_load(apm_yml_path.read_text(encoding="utf-8")) + except (yaml.YAMLError, OSError, ValueError): + return set() + if not isinstance(data, dict): + return set() + dev_deps = data.get("devDependencies", {}) + if not isinstance(dev_deps, dict): + return set() + apm_dev = dev_deps.get("apm", []) + if not isinstance(apm_dev, list): + return set() + urls: Set[str] = set() + for dep in apm_dev: + if isinstance(dep, str): + try: + ref = DependencyReference.parse(dep) + urls.add(ref.repo_url) + except ValueError: + urls.add(dep) + elif isinstance(dep, dict): + try: + ref = DependencyReference.parse_from_dict(dep) + urls.add(ref.repo_url) + except ValueError: + pass + return urls + + +# --------------------------------------------------------------------------- +# Plugin.json helpers +# --------------------------------------------------------------------------- + + +def _find_or_synthesize_plugin_json( + project_root: Path, apm_yml_path: Path +) -> dict: + """Locate an existing ``plugin.json`` or synthesise one from ``apm.yml``.""" + from ..deps.plugin_parser import synthesize_plugin_json_from_apm_yml + from ..utils.helpers import find_plugin_json + + plugin_json_path = find_plugin_json(project_root) + if plugin_json_path is not None: + try: + return json.loads(plugin_json_path.read_text(encoding="utf-8")) + except (json.JSONDecodeError, OSError): + pass + + _rich_warning( + "No plugin.json found. Synthesizing from apm.yml. " + "Consider running 'apm init --plugin'." + ) + return synthesize_plugin_json_from_apm_yml(apm_yml_path) + + +def _update_plugin_json_paths(plugin_json: dict, output_files: List[str]) -> dict: + """Update component paths in ``plugin.json`` to reflect the output layout.""" + result = dict(plugin_json) + + # Detect which top-level directories actually exist in the output + top_dirs: Set[str] = set() + for f in output_files: + parts = Path(f).parts + if parts: + top_dirs.add(parts[0]) + + # Map component keys to their output directories + component_dirs = { + "agents": "agents", + "skills": "skills", + "commands": "commands", + "instructions": "instructions", + "contexts": "contexts", + } + for key, dirname in component_dirs.items(): + if dirname in top_dirs: + result[key] = [f"{dirname}/"] + else: + result.pop(key, None) + + return result + + +# --------------------------------------------------------------------------- +# Dep → filesystem helpers +# --------------------------------------------------------------------------- + + +def _dep_install_path(dep: LockedDependency, apm_modules_dir: Path) -> Path: + """Compute the filesystem install path for a locked dependency.""" + dep_ref = DependencyReference( + repo_url=dep.repo_url, + host=dep.host, + virtual_path=dep.virtual_path, + is_virtual=dep.is_virtual, + is_local=(dep.source == "local"), + local_path=dep.local_path, + ) + return dep_ref.get_install_path(apm_modules_dir) + + +# --------------------------------------------------------------------------- +# Main exporter +# --------------------------------------------------------------------------- + + +def export_plugin_bundle( + project_root: Path, + output_dir: Path, + target: Optional[str] = None, + archive: bool = False, + dry_run: bool = False, + force: bool = False, +) -> PackResult: + """Export the project as a plugin-native directory. + + The output contains only plugin-spec artefacts (``agents/``, ``skills/``, + ``commands/``, ``plugin.json``, …) with no APM-specific files. + + Args: + project_root: Root of the project containing ``apm.yml``. + output_dir: Parent directory for the generated bundle. + target: Unused for plugin format (reserved for future use). + archive: If True, produce a ``.tar.gz`` and remove the directory. + dry_run: If True, resolve the file list without writing to disk. + force: On collision, last writer wins instead of first. + + Returns: + :class:`PackResult` describing what was produced. + """ + # 1. Read lockfile + migrate_lockfile_if_needed(project_root) + lockfile_path = get_lockfile_path(project_root) + lockfile = LockFile.read(lockfile_path) + + # 2. Read apm.yml + apm_yml_path = project_root / "apm.yml" + package = APMPackage.from_apm_yml(apm_yml_path) + pkg_name = package.name + pkg_version = package.version or "0.0.0" + + # Guard: reject local-path dependencies (non-portable) + for dep_ref in package.get_apm_dependencies(): + if dep_ref.is_local: + raise ValueError( + f"Cannot pack — apm.yml contains local path dependency: " + f"{dep_ref.local_path}\n" + f"Local dependencies are for development only. Replace them with " + f"remote references (e.g., 'owner/repo') before packing." + ) + + # 3. Find or synthesize plugin.json + plugin_json = _find_or_synthesize_plugin_json(project_root, apm_yml_path) + + # 4. devDependencies filtering + dev_dep_urls = _get_dev_dependency_urls(apm_yml_path) + + # 5. Collect components -- deps first (lockfile order), then root package + # file_map: output_rel_posix -> (source_abs, owner_name) + file_map: Dict[str, Tuple[Path, str]] = {} + collisions: List[str] = [] + merged_hooks: dict = {} + merged_mcp: dict = {} + + apm_modules_dir = project_root / "apm_modules" + + if lockfile: + for dep in lockfile.get_all_dependencies(): + if dep.repo_url in dev_dep_urls: + continue + + install_path = _dep_install_path(dep, apm_modules_dir) + if not install_path.is_dir(): + continue + + dep_name = dep.repo_url + + # Collect from .apm/ + dep_apm_dir = install_path / ".apm" + dep_components = _collect_apm_components(dep_apm_dir) + + # Also collect root-level plugin-native dirs from the dep + dep_components.extend(_collect_root_plugin_components(install_path)) + + _merge_file_map( + file_map, dep_components, dep_name, force, collisions + ) + + # Hooks -- deps merge (first wins among deps) + dep_hooks = _collect_hooks_from_apm(dep_apm_dir) + dep_hooks_root = _collect_hooks_from_root(install_path) + _deep_merge(dep_hooks, dep_hooks_root, overwrite=False) + _deep_merge(merged_hooks, dep_hooks, overwrite=False) + + # MCP -- deps merge (first wins among deps) + dep_mcp = _collect_mcp(install_path) + _deep_merge(merged_mcp, dep_mcp, overwrite=False) + + # 6. Collect own components (.apm/ and root-level) + own_apm_dir = project_root / ".apm" + own_components = _collect_apm_components(own_apm_dir) + own_components.extend(_collect_root_plugin_components(project_root)) + _merge_file_map(file_map, own_components, pkg_name, force, collisions) + + # Hooks -- root package wins on key collision + root_hooks = _collect_hooks_from_apm(own_apm_dir) + root_hooks_top = _collect_hooks_from_root(project_root) + _deep_merge(root_hooks, root_hooks_top, overwrite=False) + _deep_merge(merged_hooks, root_hooks, overwrite=True) + + # MCP -- root package wins on server-name collision + root_mcp = _collect_mcp(project_root) + _deep_merge(merged_mcp, root_mcp, overwrite=True) + + # 7. Emit collision warnings + for msg in collisions: + _rich_warning(msg) + + # 8. Build output file list (sorted for determinism) + output_files = sorted(file_map.keys()) + + # Add generated files to the list + if merged_hooks: + output_files.append("hooks.json") + if merged_mcp: + output_files.append(".mcp.json") + output_files.append("plugin.json") + + # 9. Dry run -- return file list without writing + bundle_dir = output_dir / f"{pkg_name}-{pkg_version}" + if dry_run: + return PackResult(bundle_path=bundle_dir, files=output_files) + + # 10. Security scan (warn-only, never blocks) + from ..security.gate import WARN_POLICY, SecurityGate + + scan_findings_total = 0 + for _rel, (src, _owner) in file_map.items(): + if src.is_symlink(): + continue + if src.is_dir(): + verdict = SecurityGate.scan_files(src, policy=WARN_POLICY) + scan_findings_total += len(verdict.all_findings) + elif src.is_file(): + try: + text = src.read_text(encoding="utf-8", errors="replace") + except OSError: + continue + verdict = SecurityGate.scan_text(text, str(src), policy=WARN_POLICY) + scan_findings_total += len(verdict.all_findings) + if scan_findings_total: + _rich_warning( + f"Bundle contains {scan_findings_total} hidden character(s) across " + f"source files — run 'apm audit' to inspect before publishing" + ) + + # 11. Write files to output directory + bundle_dir.mkdir(parents=True, exist_ok=True) + + for output_rel, (source_abs, _owner) in file_map.items(): + if not _validate_output_rel(output_rel): + continue + dest = bundle_dir / output_rel + if source_abs.is_symlink(): + continue + dest.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source_abs, dest, follow_symlinks=False) + + # 12. Write merged hooks.json + if merged_hooks: + (bundle_dir / "hooks.json").write_text( + json.dumps(merged_hooks, indent=2, sort_keys=True), encoding="utf-8" + ) + + # 13. Write merged .mcp.json + if merged_mcp: + (bundle_dir / ".mcp.json").write_text( + json.dumps({"mcpServers": merged_mcp}, indent=2, sort_keys=True), + encoding="utf-8", + ) + + # 14. Write plugin.json with updated component paths + plugin_json = _update_plugin_json_paths(plugin_json, output_files) + (bundle_dir / "plugin.json").write_text( + json.dumps(plugin_json, indent=2, sort_keys=False), encoding="utf-8" + ) + + result = PackResult(bundle_path=bundle_dir, files=output_files) + + # 15. Archive if requested + if archive: + archive_path = output_dir / f"{pkg_name}-{pkg_version}.tar.gz" + with tarfile.open(archive_path, "w:gz") as tar: + tar.add(bundle_dir, arcname=bundle_dir.name) + shutil.rmtree(bundle_dir) + result.bundle_path = archive_path + + return result + + +# --------------------------------------------------------------------------- +# Collision handling +# --------------------------------------------------------------------------- + + +def _merge_file_map( + file_map: Dict[str, Tuple[Path, str]], + components: List[Tuple[Path, str]], + owner: str, + force: bool, + collisions: List[str], +) -> None: + """Merge *components* into *file_map* with collision handling. + + Without ``--force``: first writer wins (skip with warning). + With ``--force``: last writer wins (overwrite with warning). + """ + for source, output_rel in components: + if not _validate_output_rel(output_rel): + continue + if output_rel in file_map: + existing_owner = file_map[output_rel][1] + collisions.append( + f"{output_rel} — collision between '{existing_owner}' and " + f"'{owner}' ({'last writer wins' if force else 'first writer wins'})" + ) + if force: + file_map[output_rel] = (source, owner) + # else: first writer wins, skip + else: + file_map[output_rel] = (source, owner) diff --git a/src/apm_cli/commands/pack.py b/src/apm_cli/commands/pack.py index c9112759..b0610e2c 100644 --- a/src/apm_cli/commands/pack.py +++ b/src/apm_cli/commands/pack.py @@ -34,8 +34,9 @@ help="Output directory (default: ./build).", ) @click.option("--dry-run", is_flag=True, default=False, help="Show what would be packed without writing.") +@click.option("--force", is_flag=True, default=False, help="On collision, last writer wins.") @click.pass_context -def pack_cmd(ctx, fmt, target, archive, output, dry_run): +def pack_cmd(ctx, fmt, target, archive, output, dry_run, force): """Create a self-contained APM bundle.""" try: result = pack_bundle( @@ -45,6 +46,7 @@ def pack_cmd(ctx, fmt, target, archive, output, dry_run): target=target, archive=archive, dry_run=dry_run, + force=force, ) if dry_run: diff --git a/src/apm_cli/deps/plugin_parser.py b/src/apm_cli/deps/plugin_parser.py index 9f66d678..5cc2fbca 100644 --- a/src/apm_cli/deps/plugin_parser.py +++ b/src/apm_cli/deps/plugin_parser.py @@ -500,6 +500,50 @@ def _generate_apm_yml(manifest: Dict[str, Any]) -> str: return yaml.dump(apm_package, default_flow_style=False, sort_keys=False) +def synthesize_plugin_json_from_apm_yml(apm_yml_path: Path) -> dict: + """Create a minimal ``plugin.json`` dict from ``apm.yml`` identity fields. + + Reads ``apm.yml`` and extracts ``name``, ``version``, ``description``, + ``author``, and ``license``. The ``author`` string is mapped to the plugin + spec's ``{"name": author}`` object format. + + Args: + apm_yml_path: Path to the ``apm.yml`` file. + + Returns: + dict suitable for writing as ``plugin.json``. + + Raises: + ValueError: If ``name`` is missing from ``apm.yml``. + FileNotFoundError: If the file does not exist. + """ + if not apm_yml_path.exists(): + raise FileNotFoundError(f"apm.yml not found: {apm_yml_path}") + + try: + data = yaml.safe_load(apm_yml_path.read_text(encoding="utf-8")) + except yaml.YAMLError as exc: + raise ValueError(f"Invalid YAML in {apm_yml_path}: {exc}") from exc + + if not isinstance(data, dict) or not data.get("name"): + raise ValueError( + "apm.yml must contain at least a 'name' field to synthesize plugin.json" + ) + + result: Dict[str, Any] = {"name": data["name"]} + + if data.get("version"): + result["version"] = data["version"] + if data.get("description"): + result["description"] = data["description"] + if data.get("author"): + result["author"] = {"name": str(data["author"])} + if data.get("license"): + result["license"] = data["license"] + + return result + + def validate_plugin_package(plugin_path: Path) -> bool: """Check whether a directory looks like a Claude plugin. diff --git a/tests/unit/test_plugin_exporter.py b/tests/unit/test_plugin_exporter.py new file mode 100644 index 00000000..4b82a02a --- /dev/null +++ b/tests/unit/test_plugin_exporter.py @@ -0,0 +1,771 @@ +"""Unit tests for apm_cli.bundle.plugin_exporter.""" + +import json +import os +import tarfile +from pathlib import Path +from unittest.mock import patch + +import pytest +import yaml + +from apm_cli.bundle.plugin_exporter import ( + PackResult, + _collect_apm_components, + _collect_hooks_from_apm, + _collect_hooks_from_root, + _collect_mcp, + _collect_root_plugin_components, + _deep_merge, + _get_dev_dependency_urls, + _merge_file_map, + _rename_prompt, + _update_plugin_json_paths, + _validate_output_rel, + export_plugin_bundle, +) +from apm_cli.deps.lockfile import LockFile, LockedDependency +from apm_cli.deps.plugin_parser import synthesize_plugin_json_from_apm_yml + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _write_apm_yml( + project: Path, + *, + name: str = "test-pkg", + version: str = "1.0.0", + extra: dict | None = None, +) -> Path: + """Write a minimal apm.yml and return its path.""" + data = {"name": name, "version": version} + if extra: + data.update(extra) + path = project / "apm.yml" + path.write_text(yaml.dump(data), encoding="utf-8") + return path + + +def _write_lockfile( + project: Path, + deps: list[LockedDependency] | None = None, +) -> Path: + lockfile = LockFile() + for d in deps or []: + lockfile.add_dependency(d) + lockfile.write(project / "apm.lock.yaml") + return project / "apm.lock.yaml" + + +def _make_apm_dir( + base: Path, + *, + agents: list[str] | None = None, + skills: dict[str, list[str]] | None = None, + prompts: list[str] | None = None, + instructions: list[str] | None = None, + contexts: list[str] | None = None, + memory: list[str] | None = None, + commands: list[str] | None = None, +) -> Path: + """Create a .apm/ directory tree under *base* with given component files.""" + apm = base / ".apm" + apm.mkdir(parents=True, exist_ok=True) + + def _write_files(subdir, names): + d = apm / subdir + d.mkdir(parents=True, exist_ok=True) + for n in names: + (d / n).write_text(f"content of {n}", encoding="utf-8") + + if agents: + _write_files("agents", agents) + if skills: + for skill_name, files in skills.items(): + skill_dir = apm / "skills" / skill_name + skill_dir.mkdir(parents=True, exist_ok=True) + for fn in files: + (skill_dir / fn).write_text(f"content of {fn}", encoding="utf-8") + if prompts: + _write_files("prompts", prompts) + if instructions: + _write_files("instructions", instructions) + if contexts: + _write_files("context", contexts) + if memory: + _write_files("memory", memory) + if commands: + _write_files("commands", commands) + return apm + + +def _setup_plugin_project( + tmp_path: Path, + *, + deps: list[LockedDependency] | None = None, + agents: list[str] | None = None, + skills: dict[str, list[str]] | None = None, + prompts: list[str] | None = None, + instructions: list[str] | None = None, + contexts: list[str] | None = None, + memory: list[str] | None = None, + commands: list[str] | None = None, + apm_yml_extra: dict | None = None, + plugin_json: dict | None = None, +) -> Path: + project = tmp_path / "project" + project.mkdir() + _write_apm_yml(project, extra=apm_yml_extra) + _write_lockfile(project, deps) + _make_apm_dir( + project, + agents=agents, + skills=skills, + prompts=prompts, + instructions=instructions, + contexts=contexts, + memory=memory, + commands=commands, + ) + if plugin_json is not None: + (project / "plugin.json").write_text( + json.dumps(plugin_json), encoding="utf-8" + ) + return project + + +# --------------------------------------------------------------------------- +# Unit tests: helpers +# --------------------------------------------------------------------------- + + +class TestValidateOutputRel: + def test_valid_paths(self): + assert _validate_output_rel("agents/a.md") is True + assert _validate_output_rel("commands/deep/b.md") is True + + def test_rejects_traversal(self): + assert _validate_output_rel("../escape.md") is False + assert _validate_output_rel("agents/../../etc/passwd") is False + + def test_rejects_absolute(self): + assert _validate_output_rel("/etc/passwd") is False + + +class TestRenamePrompt: + def test_strips_prompt_infix(self): + assert _rename_prompt("foo.prompt.md") == "foo.md" + + def test_preserves_plain_md(self): + assert _rename_prompt("foo.md") == "foo.md" + + def test_preserves_non_md(self): + assert _rename_prompt("foo.txt") == "foo.txt" + + +class TestDeepMerge: + def test_first_wins_by_default(self): + base = {"a": 1, "b": 2} + _deep_merge(base, {"a": 99, "c": 3}) + assert base == {"a": 1, "b": 2, "c": 3} + + def test_overwrite_mode(self): + base = {"a": 1, "b": 2} + _deep_merge(base, {"a": 99, "c": 3}, overwrite=True) + assert base == {"a": 99, "b": 2, "c": 3} + + def test_nested_first_wins(self): + base = {"hooks": {"preCommit": "old"}} + _deep_merge(base, {"hooks": {"preCommit": "new", "postCommit": "added"}}) + assert base == {"hooks": {"preCommit": "old", "postCommit": "added"}} + + def test_nested_overwrite(self): + base = {"hooks": {"preCommit": "old"}} + _deep_merge( + base, + {"hooks": {"preCommit": "new", "postCommit": "added"}}, + overwrite=True, + ) + assert base == {"hooks": {"preCommit": "new", "postCommit": "added"}} + + +# --------------------------------------------------------------------------- +# Unit tests: component collectors +# --------------------------------------------------------------------------- + + +class TestCollectApmComponents: + def test_agents(self, tmp_path): + _make_apm_dir(tmp_path, agents=["helper.agent.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + assert any(r == "agents/helper.agent.md" for _, r in comps) + + def test_skills_preserve_structure(self, tmp_path): + _make_apm_dir(tmp_path, skills={"my-skill": ["SKILL.md", "lib.py"]}) + comps = _collect_apm_components(tmp_path / ".apm") + rels = {r for _, r in comps} + assert "skills/my-skill/SKILL.md" in rels + assert "skills/my-skill/lib.py" in rels + + def test_prompts_rename(self, tmp_path): + _make_apm_dir(tmp_path, prompts=["task.prompt.md", "plain.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + rels = {r for _, r in comps} + assert "commands/task.md" in rels + assert "commands/plain.md" in rels + + def test_context_pluralised(self, tmp_path): + _make_apm_dir(tmp_path, contexts=["repo.context.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + assert any(r == "contexts/repo.context.md" for _, r in comps) + + def test_memory_merged_into_contexts(self, tmp_path): + _make_apm_dir(tmp_path, memory=["notes.memory.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + assert any(r == "contexts/notes.memory.md" for _, r in comps) + + def test_instructions(self, tmp_path): + _make_apm_dir(tmp_path, instructions=["rules.instructions.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + assert any(r == "instructions/rules.instructions.md" for _, r in comps) + + def test_commands_passthrough(self, tmp_path): + _make_apm_dir(tmp_path, commands=["deploy.md"]) + comps = _collect_apm_components(tmp_path / ".apm") + assert any(r == "commands/deploy.md" for _, r in comps) + + def test_empty_apm_dir(self, tmp_path): + (tmp_path / ".apm").mkdir() + comps = _collect_apm_components(tmp_path / ".apm") + assert comps == [] + + def test_missing_apm_dir(self, tmp_path): + comps = _collect_apm_components(tmp_path / ".apm") + assert comps == [] + + def test_skips_symlinks(self, tmp_path): + apm = _make_apm_dir(tmp_path, agents=["real.agent.md"]) + link = apm / "agents" / "link.agent.md" + target = apm / "agents" / "real.agent.md" + try: + os.symlink(target, link) + except OSError: + pytest.skip("symlinks not supported") + comps = _collect_apm_components(tmp_path / ".apm") + rels = {r for _, r in comps} + assert "agents/link.agent.md" not in rels + assert "agents/real.agent.md" in rels + + +class TestCollectRootPluginComponents: + def test_root_agents(self, tmp_path): + (tmp_path / "agents").mkdir() + (tmp_path / "agents" / "bot.agent.md").write_text("x") + comps = _collect_root_plugin_components(tmp_path) + assert any(r == "agents/bot.agent.md" for _, r in comps) + + def test_ignores_nonexistent(self, tmp_path): + comps = _collect_root_plugin_components(tmp_path) + assert comps == [] + + +# --------------------------------------------------------------------------- +# Unit tests: hooks / MCP collection +# --------------------------------------------------------------------------- + + +class TestCollectHooks: + def test_from_apm_hooks_dir(self, tmp_path): + apm = tmp_path / ".apm" + hooks_dir = apm / "hooks" + hooks_dir.mkdir(parents=True) + (hooks_dir / "a.json").write_text(json.dumps({"preCommit": ["lint"]})) + result = _collect_hooks_from_apm(apm) + assert result == {"preCommit": ["lint"]} + + def test_from_root_hooks_json(self, tmp_path): + (tmp_path / "hooks.json").write_text(json.dumps({"postPush": ["deploy"]})) + result = _collect_hooks_from_root(tmp_path) + assert result == {"postPush": ["deploy"]} + + def test_invalid_json_skipped(self, tmp_path): + apm = tmp_path / ".apm" + hooks_dir = apm / "hooks" + hooks_dir.mkdir(parents=True) + (hooks_dir / "bad.json").write_text("not json") + result = _collect_hooks_from_apm(apm) + assert result == {} + + +class TestCollectMcp: + def test_reads_mcp_servers(self, tmp_path): + (tmp_path / ".mcp.json").write_text( + json.dumps({"mcpServers": {"db": {"command": "db-server"}}}) + ) + result = _collect_mcp(tmp_path) + assert result == {"db": {"command": "db-server"}} + + def test_missing_file(self, tmp_path): + assert _collect_mcp(tmp_path) == {} + + +# --------------------------------------------------------------------------- +# Unit tests: devDependencies filtering +# --------------------------------------------------------------------------- + + +class TestDevDependencyUrls: + def test_simple_list(self, tmp_path): + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump({ + "name": "test", + "version": "1.0.0", + "devDependencies": {"apm": ["owner/dev-tool", "other/helper"]}, + }) + ) + urls = _get_dev_dependency_urls(apm_yml) + assert "owner/dev-tool" in urls + assert "other/helper" in urls + + def test_no_dev_deps(self, tmp_path): + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text(yaml.dump({"name": "test", "version": "1.0.0"})) + assert _get_dev_dependency_urls(apm_yml) == set() + + def test_missing_file(self, tmp_path): + assert _get_dev_dependency_urls(tmp_path / "missing.yml") == set() + + +# --------------------------------------------------------------------------- +# Unit tests: collision handling +# --------------------------------------------------------------------------- + + +class TestMergeFileMap: + def test_first_writer_wins_by_default(self, tmp_path): + f1 = tmp_path / "a.md" + f2 = tmp_path / "b.md" + f1.write_text("first") + f2.write_text("second") + file_map: dict = {} + collisions: list = [] + _merge_file_map(file_map, [(f1, "agents/a.md")], "pkg-a", False, collisions) + _merge_file_map(file_map, [(f2, "agents/a.md")], "pkg-b", False, collisions) + assert file_map["agents/a.md"][0] == f1 + assert len(collisions) == 1 + assert "first writer wins" in collisions[0] + + def test_force_last_writer_wins(self, tmp_path): + f1 = tmp_path / "a.md" + f2 = tmp_path / "b.md" + f1.write_text("first") + f2.write_text("second") + file_map: dict = {} + collisions: list = [] + _merge_file_map(file_map, [(f1, "agents/a.md")], "pkg-a", True, collisions) + _merge_file_map(file_map, [(f2, "agents/a.md")], "pkg-b", True, collisions) + assert file_map["agents/a.md"][0] == f2 + assert len(collisions) == 1 + assert "last writer wins" in collisions[0] + + +# --------------------------------------------------------------------------- +# Unit tests: plugin.json synthesis +# --------------------------------------------------------------------------- + + +class TestSynthesizePluginJson: + def test_basic_synthesis(self, tmp_path): + _write_apm_yml(tmp_path, extra={"description": "A tool", "author": "Alice"}) + result = synthesize_plugin_json_from_apm_yml(tmp_path / "apm.yml") + assert result["name"] == "test-pkg" + assert result["version"] == "1.0.0" + assert result["description"] == "A tool" + assert result["author"] == {"name": "Alice"} + + def test_missing_name_raises(self, tmp_path): + (tmp_path / "apm.yml").write_text(yaml.dump({"version": "1.0.0"})) + with pytest.raises(ValueError, match="name"): + synthesize_plugin_json_from_apm_yml(tmp_path / "apm.yml") + + def test_missing_file_raises(self, tmp_path): + with pytest.raises(FileNotFoundError): + synthesize_plugin_json_from_apm_yml(tmp_path / "nope.yml") + + def test_license_included(self, tmp_path): + _write_apm_yml(tmp_path, extra={"license": "MIT"}) + result = synthesize_plugin_json_from_apm_yml(tmp_path / "apm.yml") + assert result["license"] == "MIT" + + +# --------------------------------------------------------------------------- +# Unit tests: plugin.json path updating +# --------------------------------------------------------------------------- + + +class TestUpdatePluginJsonPaths: + def test_adds_present_directories(self): + pj = {"name": "test"} + files = ["agents/a.md", "commands/b.md"] + result = _update_plugin_json_paths(pj, files) + assert result["agents"] == ["agents/"] + assert result["commands"] == ["commands/"] + assert "skills" not in result + + def test_removes_absent_directories(self): + pj = {"name": "test", "skills": ["skills/"]} + files = ["agents/a.md"] + result = _update_plugin_json_paths(pj, files) + assert "skills" not in result + + +# --------------------------------------------------------------------------- +# Integration tests: export_plugin_bundle +# --------------------------------------------------------------------------- + + +class TestExportPluginBundle: + def test_basic_export(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + agents=["helper.agent.md"], + prompts=["task.prompt.md"], + ) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + assert result.bundle_path == out / "test-pkg-1.0.0" + assert result.bundle_path.exists() + assert (result.bundle_path / "agents" / "helper.agent.md").exists() + assert (result.bundle_path / "commands" / "task.md").exists() + assert (result.bundle_path / "plugin.json").exists() + # No APM artifacts in output + assert not (result.bundle_path / "apm.yml").exists() + assert not (result.bundle_path / "apm.lock.yaml").exists() + assert not (result.bundle_path / ".apm").exists() + assert not (result.bundle_path / "apm_modules").exists() + + def test_uses_existing_plugin_json(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + agents=["a.agent.md"], + plugin_json={"name": "custom-name", "version": "2.0.0"}, + ) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + pj = json.loads((result.bundle_path / "plugin.json").read_text()) + assert pj["name"] == "custom-name" + assert pj["version"] == "2.0.0" + + def test_synthesizes_plugin_json_when_absent(self, tmp_path): + project = _setup_plugin_project(tmp_path, agents=["a.agent.md"]) + out = tmp_path / "build" + + with patch("apm_cli.bundle.plugin_exporter._rich_warning") as mock_warn: + result = export_plugin_bundle(project, out) + + pj = json.loads((result.bundle_path / "plugin.json").read_text()) + assert pj["name"] == "test-pkg" + # Warning emitted about synthesis + assert any("plugin.json" in str(c) for c in mock_warn.call_args_list) + + def test_prompt_md_rename(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + prompts=["do-thing.prompt.md", "plain.md"], + ) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + assert (result.bundle_path / "commands" / "do-thing.md").exists() + assert (result.bundle_path / "commands" / "plain.md").exists() + # The .prompt.md variant should NOT exist + assert not (result.bundle_path / "commands" / "do-thing.prompt.md").exists() + + def test_context_pluralised(self, tmp_path): + project = _setup_plugin_project(tmp_path, contexts=["repo.context.md"]) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + assert (result.bundle_path / "contexts" / "repo.context.md").exists() + + def test_memory_merged_into_contexts(self, tmp_path): + project = _setup_plugin_project(tmp_path, memory=["notes.memory.md"]) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + assert (result.bundle_path / "contexts" / "notes.memory.md").exists() + + def test_skills_structure_preserved(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + skills={"my-skill": ["SKILL.md"]}, + ) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + assert (result.bundle_path / "skills" / "my-skill" / "SKILL.md").exists() + + def test_dry_run_no_output(self, tmp_path): + project = _setup_plugin_project(tmp_path, agents=["a.agent.md"]) + out = tmp_path / "build" + + result = export_plugin_bundle(project, out, dry_run=True) + + assert not out.exists() + assert len(result.files) > 0 + assert "plugin.json" in result.files + + def test_archive(self, tmp_path): + project = _setup_plugin_project(tmp_path, agents=["a.agent.md"]) + out = tmp_path / "build" + + result = export_plugin_bundle(project, out, archive=True) + + assert result.bundle_path.name == "test-pkg-1.0.0.tar.gz" + assert result.bundle_path.exists() + assert not (out / "test-pkg-1.0.0").exists() + with tarfile.open(result.bundle_path, "r:gz") as tar: + names = tar.getnames() + assert any("agent.md" in n for n in names) + + def test_dependency_components_included(self, tmp_path): + project = _setup_plugin_project(tmp_path, agents=["own.agent.md"]) + + # Set up a dependency in apm_modules + dep = LockedDependency(repo_url="acme/tools", depth=1) + _write_lockfile(project, [dep]) + dep_path = project / "apm_modules" / "acme" / "tools" + _make_apm_dir(dep_path, agents=["dep-agent.agent.md"]) + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + assert (result.bundle_path / "agents" / "dep-agent.agent.md").exists() + assert (result.bundle_path / "agents" / "own.agent.md").exists() + + def test_dev_dependency_excluded(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + agents=["own.agent.md"], + apm_yml_extra={"devDependencies": {"apm": ["acme/dev-only"]}}, + ) + + dep = LockedDependency(repo_url="acme/dev-only", depth=1) + _write_lockfile(project, [dep]) + dep_path = project / "apm_modules" / "acme" / "dev-only" + _make_apm_dir(dep_path, agents=["dev-agent.agent.md"]) + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + assert (result.bundle_path / "agents" / "own.agent.md").exists() + assert not (result.bundle_path / "agents" / "dev-agent.agent.md").exists() + + def test_collision_first_wins(self, tmp_path): + project = _setup_plugin_project(tmp_path) + + # Two deps with the same agent file + dep1 = LockedDependency(repo_url="acme/first", depth=1) + dep2 = LockedDependency(repo_url="acme/second", depth=1) + _write_lockfile(project, [dep1, dep2]) + + dep1_path = project / "apm_modules" / "acme" / "first" + _make_apm_dir(dep1_path, agents=["shared.agent.md"]) + dep2_path = project / "apm_modules" / "acme" / "second" + _make_apm_dir(dep2_path, agents=["shared.agent.md"]) + + out = tmp_path / "build" + with patch("apm_cli.bundle.plugin_exporter._rich_warning"): + result = export_plugin_bundle(project, out) + + content = (result.bundle_path / "agents" / "shared.agent.md").read_text() + assert "shared.agent.md" in content # From dep1 + + def test_collision_force_last_wins(self, tmp_path): + project = _setup_plugin_project(tmp_path) + + dep1 = LockedDependency(repo_url="acme/first", depth=1) + dep2 = LockedDependency(repo_url="acme/second", depth=1) + _write_lockfile(project, [dep1, dep2]) + + dep1_path = project / "apm_modules" / "acme" / "first" + agents1 = dep1_path / ".apm" / "agents" + agents1.mkdir(parents=True) + (agents1 / "shared.agent.md").write_text("from-first") + + dep2_path = project / "apm_modules" / "acme" / "second" + agents2 = dep2_path / ".apm" / "agents" + agents2.mkdir(parents=True) + (agents2 / "shared.agent.md").write_text("from-second") + + out = tmp_path / "build" + with patch("apm_cli.bundle.plugin_exporter._rich_warning"): + result = export_plugin_bundle(project, out, force=True) + + content = (result.bundle_path / "agents" / "shared.agent.md").read_text() + assert content == "from-second" + + def test_hooks_merged(self, tmp_path): + project = _setup_plugin_project(tmp_path) + + # Root hooks + root_hooks_dir = project / ".apm" / "hooks" + root_hooks_dir.mkdir(parents=True, exist_ok=True) + (root_hooks_dir / "hooks.json").write_text( + json.dumps({"preCommit": ["root-lint"]}) + ) + + # Dep hooks + dep = LockedDependency(repo_url="acme/hooks-pkg", depth=1) + _write_lockfile(project, [dep]) + dep_path = project / "apm_modules" / "acme" / "hooks-pkg" + dep_hooks_dir = dep_path / ".apm" / "hooks" + dep_hooks_dir.mkdir(parents=True) + (dep_hooks_dir / "hooks.json").write_text( + json.dumps({"preCommit": ["dep-lint"], "postPush": ["deploy"]}) + ) + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + hooks = json.loads((result.bundle_path / "hooks.json").read_text()) + # Root wins on key collision + assert hooks["preCommit"] == ["root-lint"] + # Dep-only key preserved + assert hooks["postPush"] == ["deploy"] + + def test_mcp_merged(self, tmp_path): + project = _setup_plugin_project(tmp_path) + + # Root MCP + (project / ".mcp.json").write_text( + json.dumps({"mcpServers": {"root-db": {"command": "root-server"}}}) + ) + + # Dep MCP + dep = LockedDependency(repo_url="acme/mcp-pkg", depth=1) + _write_lockfile(project, [dep]) + dep_path = project / "apm_modules" / "acme" / "mcp-pkg" + dep_path.mkdir(parents=True) + (dep_path / ".mcp.json").write_text( + json.dumps( + { + "mcpServers": { + "root-db": {"command": "dep-server"}, + "dep-only": {"command": "extra"}, + } + } + ) + ) + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + mcp = json.loads((result.bundle_path / ".mcp.json").read_text()) + # Root wins on name collision + assert mcp["mcpServers"]["root-db"]["command"] == "root-server" + # Dep-only server preserved + assert mcp["mcpServers"]["dep-only"]["command"] == "extra" + + def test_empty_project(self, tmp_path): + project = _setup_plugin_project(tmp_path) + out = tmp_path / "build" + + result = export_plugin_bundle(project, out) + + assert result.bundle_path.exists() + assert (result.bundle_path / "plugin.json").exists() + + def test_no_lockfile_still_exports(self, tmp_path): + project = tmp_path / "project" + project.mkdir() + _write_apm_yml(project) + (project / ".apm").mkdir() + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + assert result.bundle_path.exists() + assert (result.bundle_path / "plugin.json").exists() + + def test_security_scan_warns(self, tmp_path): + project = _setup_plugin_project(tmp_path, agents=["sneaky.agent.md"]) + # Inject hidden Unicode + sneaky = project / ".apm" / "agents" / "sneaky.agent.md" + sneaky.write_text(f"Hello \U000E0001 world", encoding="utf-8") + + out = tmp_path / "build" + with patch("apm_cli.bundle.plugin_exporter._rich_warning") as mock_warn: + result = export_plugin_bundle(project, out) + + assert result.bundle_path.exists() + assert any("hidden character" in str(c) for c in mock_warn.call_args_list) + + def test_plugin_json_updated_with_component_dirs(self, tmp_path): + project = _setup_plugin_project( + tmp_path, + agents=["a.agent.md"], + skills={"s1": ["SKILL.md"]}, + plugin_json={"name": "custom"}, + ) + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + + pj = json.loads((result.bundle_path / "plugin.json").read_text()) + assert pj["agents"] == ["agents/"] + assert pj["skills"] == ["skills/"] + + def test_root_level_plugin_dirs_collected(self, tmp_path): + """Root-level agents/ commands/ etc. are picked up for plugin-native repos.""" + project = _setup_plugin_project(tmp_path) + # Create root-level agents dir (no .apm/) + root_agents = project / "agents" + root_agents.mkdir() + (root_agents / "root-bot.agent.md").write_text("root bot") + + out = tmp_path / "build" + result = export_plugin_bundle(project, out) + assert (result.bundle_path / "agents" / "root-bot.agent.md").exists() + + +class TestExportPluginBundleViaPackBundle: + """Verify pack_bundle(fmt='plugin') delegates correctly.""" + + def test_fmt_plugin_delegates(self, tmp_path): + from apm_cli.bundle.packer import pack_bundle + + project = _setup_plugin_project(tmp_path, agents=["a.agent.md"]) + out = tmp_path / "build" + + result = pack_bundle(project, out, fmt="plugin") + + assert (result.bundle_path / "plugin.json").exists() + assert (result.bundle_path / "agents" / "a.agent.md").exists() + + def test_force_flag_passed_through(self, tmp_path): + from apm_cli.bundle.packer import pack_bundle + + project = _setup_plugin_project(tmp_path) + dep1 = LockedDependency(repo_url="acme/first", depth=1) + dep2 = LockedDependency(repo_url="acme/second", depth=1) + _write_lockfile(project, [dep1, dep2]) + + dep1_path = project / "apm_modules" / "acme" / "first" + a1 = dep1_path / ".apm" / "agents" + a1.mkdir(parents=True) + (a1 / "shared.agent.md").write_text("from-first") + + dep2_path = project / "apm_modules" / "acme" / "second" + a2 = dep2_path / ".apm" / "agents" + a2.mkdir(parents=True) + (a2 / "shared.agent.md").write_text("from-second") + + out = tmp_path / "build" + with patch("apm_cli.bundle.plugin_exporter._rich_warning"): + result = pack_bundle(project, out, fmt="plugin", force=True) + + content = (result.bundle_path / "agents" / "shared.agent.md").read_text() + assert content == "from-second" diff --git a/tests/unit/test_plugin_synthesis.py b/tests/unit/test_plugin_synthesis.py new file mode 100644 index 00000000..b4f5207b --- /dev/null +++ b/tests/unit/test_plugin_synthesis.py @@ -0,0 +1,167 @@ +"""Unit tests for synthesize_plugin_json_from_apm_yml. + +Focused test suite for the plugin.json synthesis from apm.yml identity fields. +""" + +from pathlib import Path + +import pytest +import yaml + +from apm_cli.deps.plugin_parser import synthesize_plugin_json_from_apm_yml + + +def _write_apm_yml(tmp_path: Path, data: dict) -> Path: + """Write an apm.yml file and return its path.""" + path = tmp_path / "apm.yml" + path.write_text(yaml.dump(data), encoding="utf-8") + return path + + +class TestPluginJsonSynthesis: + """Tests for synthesize_plugin_json_from_apm_yml.""" + + def test_basic_synthesis(self, tmp_path): + """Synthesizes plugin.json with mapped fields.""" + yml = _write_apm_yml(tmp_path, { + "name": "my-plugin", + "version": "1.0.0", + "description": "A cool plugin", + "author": "Jane Doe", + "license": "MIT", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["name"] == "my-plugin" + assert result["version"] == "1.0.0" + assert result["description"] == "A cool plugin" + assert result["author"] == {"name": "Jane Doe"} + assert result["license"] == "MIT" + + def test_author_string_to_object(self, tmp_path): + """Author string maps to {name: string} object.""" + yml = _write_apm_yml(tmp_path, { + "name": "test", + "version": "1.0.0", + "author": "John Smith", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["author"] == {"name": "John Smith"} + assert isinstance(result["author"], dict) + + def test_author_numeric_coerced_to_string(self, tmp_path): + """Numeric author values are coerced to strings.""" + yml = _write_apm_yml(tmp_path, { + "name": "test", + "version": "1.0.0", + "author": 42, + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["author"] == {"name": "42"} + + def test_missing_name_raises(self, tmp_path): + """Missing name in apm.yml raises ValueError.""" + yml = _write_apm_yml(tmp_path, {"version": "1.0.0"}) + + with pytest.raises(ValueError, match="name"): + synthesize_plugin_json_from_apm_yml(yml) + + def test_empty_name_raises(self, tmp_path): + """Empty string name raises ValueError.""" + yml = _write_apm_yml(tmp_path, {"name": "", "version": "1.0.0"}) + + with pytest.raises(ValueError, match="name"): + synthesize_plugin_json_from_apm_yml(yml) + + def test_optional_fields_omitted_if_missing(self, tmp_path): + """Optional fields (description, license, author) not in output if missing from apm.yml.""" + yml = _write_apm_yml(tmp_path, { + "name": "minimal-pkg", + "version": "1.0.0", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["name"] == "minimal-pkg" + assert result["version"] == "1.0.0" + assert "description" not in result + assert "author" not in result + assert "license" not in result + + def test_version_omitted_if_missing(self, tmp_path): + """Version is optional in output when absent from apm.yml.""" + yml = _write_apm_yml(tmp_path, {"name": "no-version"}) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["name"] == "no-version" + assert "version" not in result + + def test_file_not_found_raises(self, tmp_path): + """Non-existent file raises FileNotFoundError.""" + with pytest.raises(FileNotFoundError): + synthesize_plugin_json_from_apm_yml(tmp_path / "nonexistent.yml") + + def test_invalid_yaml_raises(self, tmp_path): + """Invalid YAML raises ValueError.""" + bad = tmp_path / "apm.yml" + bad.write_text("{{invalid: yaml: [", encoding="utf-8") + + with pytest.raises(ValueError, match="Invalid YAML"): + synthesize_plugin_json_from_apm_yml(bad) + + def test_non_dict_yaml_raises(self, tmp_path): + """YAML that is a list instead of dict raises ValueError.""" + bad = tmp_path / "apm.yml" + bad.write_text("- item1\n- item2\n", encoding="utf-8") + + with pytest.raises(ValueError, match="name"): + synthesize_plugin_json_from_apm_yml(bad) + + def test_license_without_author(self, tmp_path): + """License can be present without author.""" + yml = _write_apm_yml(tmp_path, { + "name": "test", + "version": "1.0.0", + "license": "Apache-2.0", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert result["license"] == "Apache-2.0" + assert "author" not in result + + def test_all_fields_present(self, tmp_path): + """All supported fields are mapped correctly.""" + yml = _write_apm_yml(tmp_path, { + "name": "full-pkg", + "version": "2.1.0", + "description": "Full package", + "author": "Acme Corp", + "license": "ISC", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert set(result.keys()) == {"name", "version", "description", "author", "license"} + + def test_extra_apm_fields_ignored(self, tmp_path): + """Fields not part of plugin spec (dependencies, scripts) are not in output.""" + yml = _write_apm_yml(tmp_path, { + "name": "test", + "version": "1.0.0", + "dependencies": {"apm": ["owner/repo"]}, + "scripts": {"build": "echo hi"}, + "target": "vscode", + }) + + result = synthesize_plugin_json_from_apm_yml(yml) + + assert "dependencies" not in result + assert "scripts" not in result + assert "target" not in result From a0521cb1b7901642fd1cbdddeac5f1d1ae60e19d Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 00:55:13 +0100 Subject: [PATCH 02/18] feat: add apm init --plugin and devDependencies model - Add --plugin flag to init: creates plugin.json + apm.yml with devDependencies - Add _validate_plugin_name() for kebab-case validation (max 64 chars) - Add _create_plugin_json() helper for plugin.json generation - Extend _create_minimal_apm_yml() with plugin= parameter - Add dev_dependencies field to APMPackage dataclass - Parse devDependencies in from_apm_yml() (same logic as dependencies) - Add get_dev_apm_dependencies() and get_dev_mcp_dependencies() accessors - Add 32 unit tests for init --plugin and devDependencies model Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/commands/_helpers.py | 45 ++++- src/apm_cli/commands/init.py | 52 +++++- src/apm_cli/models/apm_package.py | 49 +++++ tests/unit/test_apm_package.py | 233 +++++++++++++++++++++++ tests/unit/test_init_command.py | 246 ++++++++++++++++++++++++ tests/unit/test_init_plugin.py | 301 ++++++++++++++++++++++++++++++ 6 files changed, 914 insertions(+), 12 deletions(-) create mode 100644 tests/unit/test_apm_package.py create mode 100644 tests/unit/test_init_plugin.py diff --git a/src/apm_cli/commands/_helpers.py b/src/apm_cli/commands/_helpers.py index 54fd26a6..bc0c886a 100644 --- a/src/apm_cli/commands/_helpers.py +++ b/src/apm_cli/commands/_helpers.py @@ -394,8 +394,43 @@ def _get_default_config(project_name): } -def _create_minimal_apm_yml(config): - """Create minimal apm.yml file with auto-detected metadata.""" +def _validate_plugin_name(name): + """Validate plugin name is kebab-case (lowercase, numbers, hyphens). + + Returns True if valid, False otherwise. + """ + import re + + return bool(re.match(r"^[a-z][a-z0-9-]{0,63}$", name)) + + +def _create_plugin_json(config): + """Create plugin.json file with package metadata. + + Args: + config: dict with name, version, description, author keys. + """ + import json + + plugin_data = { + "name": config["name"], + "version": config.get("version", "0.1.0"), + "description": config.get("description", ""), + "author": {"name": config.get("author", "")}, + "license": "MIT", + } + + with open("plugin.json", "w", encoding="utf-8") as f: + f.write(json.dumps(plugin_data, indent=2) + "\n") + + +def _create_minimal_apm_yml(config, plugin=False): + """Create minimal apm.yml file with auto-detected metadata. + + Args: + config: dict with name, version, description, author keys. + plugin: if True, include a devDependencies section. + """ yaml = _lazy_yaml() # Create minimal apm.yml structure @@ -405,9 +440,13 @@ def _create_minimal_apm_yml(config): "description": config["description"], "author": config["author"], "dependencies": {"apm": [], "mcp": []}, - "scripts": {}, } + if plugin: + apm_yml_data["devDependencies"] = {"apm": []} + + apm_yml_data["scripts"] = {} + # Write apm.yml with open(APM_YML_FILENAME, "w") as f: yaml.safe_dump(apm_yml_data, f, default_flow_style=False, sort_keys=False) diff --git a/src/apm_cli/commands/init.py b/src/apm_cli/commands/init.py index e54021c9..74bee697 100644 --- a/src/apm_cli/commands/init.py +++ b/src/apm_cli/commands/init.py @@ -20,10 +20,12 @@ INFO, RESET, _create_minimal_apm_yml, + _create_plugin_json, _get_console, _get_default_config, _lazy_confirm, _rich_blank_line, + _validate_plugin_name, ) @@ -32,11 +34,15 @@ @click.option( "--yes", "-y", is_flag=True, help="Skip interactive prompts and use auto-detected defaults" ) +@click.option( + "--plugin", is_flag=True, help="Initialize as plugin author (creates plugin.json + apm.yml)" +) @click.pass_context -def init(ctx, project_name, yes): +def init(ctx, project_name, yes, plugin): """Initialize a new APM project (like npm init). Creates a minimal apm.yml with auto-detected metadata. + With --plugin, also creates plugin.json for plugin authors. """ try: # Handle explicit current directory @@ -54,6 +60,15 @@ def init(ctx, project_name, yes): project_dir = Path.cwd() final_project_name = project_dir.name + # Validate plugin name early + if plugin and not _validate_plugin_name(final_project_name): + _rich_error( + f"Invalid plugin name '{final_project_name}'. " + "Must be kebab-case (lowercase letters, numbers, hyphens), " + "start with a letter, and be at most 64 characters." + ) + sys.exit(1) + # Check for existing apm.yml apm_yml_exists = Path(APM_YML_FILENAME).exists() @@ -84,10 +99,18 @@ def init(ctx, project_name, yes): # Use auto-detected defaults config = _get_default_config(final_project_name) + # Plugin mode uses 0.1.0 as default version + if plugin and yes: + config["version"] = "0.1.0" + _rich_success(f"Initializing APM project: {config['name']}", symbol="rocket") - # Create minimal apm.yml - _create_minimal_apm_yml(config) + # Create apm.yml (with devDependencies for plugin mode) + _create_minimal_apm_yml(config, plugin=plugin) + + # Create plugin.json for plugin mode + if plugin: + _create_plugin_json(config) _rich_success("APM project initialized successfully!", symbol="sparkles") @@ -98,21 +121,32 @@ def init(ctx, project_name, yes): files_data = [ ("*", APM_YML_FILENAME, "Project configuration"), ] + if plugin: + files_data.append(("*", "plugin.json", "Plugin metadata")) table = _create_files_table(files_data, title="Created Files") console.print(table) except (ImportError, NameError): _rich_info("Created:") _rich_echo(" * apm.yml - Project configuration", style="muted") + if plugin: + _rich_echo(" * plugin.json - Plugin metadata", style="muted") _rich_blank_line() # Next steps - actionable commands matching README workflow - next_steps = [ - "Install a runtime: apm runtime setup copilot", - "Add APM dependencies: apm install /", - "Compile agent context: apm compile", - "Run your first workflow: apm run start", - ] + if plugin: + next_steps = [ + "Add dev dependencies: apm install --dev /", + "Compile agent context: apm compile", + "Pack as plugin: apm pack --format plugin", + ] + else: + next_steps = [ + "Install a runtime: apm runtime setup copilot", + "Add APM dependencies: apm install /", + "Compile agent context: apm compile", + "Run your first workflow: apm run start", + ] try: _rich_panel( diff --git a/src/apm_cli/models/apm_package.py b/src/apm_cli/models/apm_package.py index a7e20eb4..8058b34a 100644 --- a/src/apm_cli/models/apm_package.py +++ b/src/apm_cli/models/apm_package.py @@ -68,6 +68,7 @@ class APMPackage: source: Optional[str] = None # Source location (for dependencies) resolved_commit: Optional[str] = None # Resolved commit SHA (for dependencies) dependencies: Optional[Dict[str, List[Union[DependencyReference, str, dict]]]] = None # Mixed types for APM/MCP/inline + dev_dependencies: Optional[Dict[str, List[Union[DependencyReference, str, dict]]]] = None scripts: Optional[Dict[str, str]] = None package_path: Optional[Path] = None # Local path to package target: Optional[str] = None # Target agent: vscode, claude, or all (applies to compile and install) @@ -148,6 +149,40 @@ def from_apm_yml(cls, apm_yml_path: Path) -> "APMPackage": # Other dependency types: keep as-is dependencies[dep_type] = [dep for dep in dep_list if isinstance(dep, (str, dict))] + # Parse devDependencies (same structure as dependencies) + dev_dependencies = None + if 'devDependencies' in data and isinstance(data['devDependencies'], dict): + dev_dependencies = {} + for dep_type, dep_list in data['devDependencies'].items(): + if isinstance(dep_list, list): + if dep_type == 'apm': + parsed_deps = [] + for dep_entry in dep_list: + if isinstance(dep_entry, str): + try: + parsed_deps.append(DependencyReference.parse(dep_entry)) + except ValueError as e: + raise ValueError(f"Invalid dev APM dependency '{dep_entry}': {e}") + elif isinstance(dep_entry, dict): + try: + parsed_deps.append(DependencyReference.parse_from_dict(dep_entry)) + except ValueError as e: + raise ValueError(f"Invalid dev APM dependency {dep_entry}: {e}") + dev_dependencies[dep_type] = parsed_deps + elif dep_type == 'mcp': + parsed_mcp = [] + for dep in dep_list: + if isinstance(dep, str): + parsed_mcp.append(MCPDependency.from_string(dep)) + elif isinstance(dep, dict): + try: + parsed_mcp.append(MCPDependency.from_dict(dep)) + except ValueError as e: + raise ValueError(f"Invalid dev MCP dependency: {e}") + dev_dependencies[dep_type] = parsed_mcp + else: + dev_dependencies[dep_type] = [dep for dep in dep_list if isinstance(dep, (str, dict))] + # Parse package content type pkg_type = None if 'type' in data and data['type'] is not None: @@ -166,6 +201,7 @@ def from_apm_yml(cls, apm_yml_path: Path) -> "APMPackage": author=data.get('author'), license=data.get('license'), dependencies=dependencies, + dev_dependencies=dev_dependencies, scripts=data.get('scripts'), package_path=apm_yml_path.parent, target=data.get('target'), @@ -192,6 +228,19 @@ def has_apm_dependencies(self) -> bool: """Check if this package has APM dependencies.""" return bool(self.get_apm_dependencies()) + def get_dev_apm_dependencies(self) -> List[DependencyReference]: + """Get list of dev APM dependencies.""" + if not self.dev_dependencies or 'apm' not in self.dev_dependencies: + return [] + return [dep for dep in self.dev_dependencies['apm'] if isinstance(dep, DependencyReference)] + + def get_dev_mcp_dependencies(self) -> List["MCPDependency"]: + """Get list of dev MCP dependencies.""" + if not self.dev_dependencies or 'mcp' not in self.dev_dependencies: + return [] + return [dep for dep in (self.dev_dependencies.get('mcp') or []) + if isinstance(dep, MCPDependency)] + @dataclass class PackageInfo: diff --git a/tests/unit/test_apm_package.py b/tests/unit/test_apm_package.py new file mode 100644 index 00000000..037357e8 --- /dev/null +++ b/tests/unit/test_apm_package.py @@ -0,0 +1,233 @@ +"""Unit tests for APMPackage devDependencies support.""" + +from pathlib import Path + +import pytest +import yaml + +from apm_cli.models.apm_package import ( + APMPackage, + DependencyReference, + MCPDependency, + clear_apm_yml_cache, +) + + +def _write_apm_yml(tmp_path: Path, data: dict) -> Path: + """Write an apm.yml file and return its path.""" + clear_apm_yml_cache() + path = tmp_path / "apm.yml" + path.write_text(yaml.dump(data), encoding="utf-8") + return path + + +class TestDevDependencies: + """Tests for devDependencies support in APMPackage.""" + + def test_parse_dev_dependencies(self, tmp_path): + """devDependencies section is parsed from apm.yml.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "apm": ["owner/dev-tool"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + + assert pkg.dev_dependencies is not None + assert "apm" in pkg.dev_dependencies + + def test_get_dev_apm_dependencies(self, tmp_path): + """get_dev_apm_dependencies returns DependencyReference objects.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "apm": ["owner/dev-tool", "org/test-helper"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + dev_deps = pkg.get_dev_apm_dependencies() + + assert len(dev_deps) == 2 + assert all(isinstance(d, DependencyReference) for d in dev_deps) + urls = {d.repo_url for d in dev_deps} + assert "owner/dev-tool" in urls + assert "org/test-helper" in urls + + def test_get_dev_mcp_dependencies(self, tmp_path): + """get_dev_mcp_dependencies returns MCPDependency objects.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "mcp": [ + {"name": "io.github.test/mcp-server", "transport": "stdio"}, + ], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + dev_mcp = pkg.get_dev_mcp_dependencies() + + assert len(dev_mcp) == 1 + assert isinstance(dev_mcp[0], MCPDependency) + assert dev_mcp[0].name == "io.github.test/mcp-server" + assert dev_mcp[0].transport == "stdio" + + def test_get_dev_mcp_from_string(self, tmp_path): + """MCP dev dependencies can be specified as plain strings.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "mcp": ["io.github.test/mcp-server"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + dev_mcp = pkg.get_dev_mcp_dependencies() + + assert len(dev_mcp) == 1 + assert dev_mcp[0].name == "io.github.test/mcp-server" + + def test_missing_dev_dependencies_returns_empty(self, tmp_path): + """No devDependencies section returns empty lists.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + }) + + pkg = APMPackage.from_apm_yml(yml) + + assert pkg.dev_dependencies is None + assert pkg.get_dev_apm_dependencies() == [] + assert pkg.get_dev_mcp_dependencies() == [] + + def test_empty_dev_dependencies_returns_empty(self, tmp_path): + """Empty devDependencies.apm list returns empty.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": {"apm": []}, + }) + + pkg = APMPackage.from_apm_yml(yml) + + assert pkg.dev_dependencies is not None + assert pkg.get_dev_apm_dependencies() == [] + + def test_dev_and_prod_dependencies_independent(self, tmp_path): + """devDeps and deps are independent — changing one doesn't affect other.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "dependencies": { + "apm": ["owner/prod-dep"], + }, + "devDependencies": { + "apm": ["owner/dev-dep"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + + prod_deps = pkg.get_apm_dependencies() + dev_deps = pkg.get_dev_apm_dependencies() + + assert len(prod_deps) == 1 + assert len(dev_deps) == 1 + assert prod_deps[0].repo_url == "owner/prod-dep" + assert dev_deps[0].repo_url == "owner/dev-dep" + + def test_dev_dependencies_do_not_pollute_prod(self, tmp_path): + """Dev dependencies don't appear in get_apm_dependencies().""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "dependencies": {"apm": []}, + "devDependencies": { + "apm": ["owner/dev-only"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + + prod_urls = {d.repo_url for d in pkg.get_apm_dependencies()} + assert "owner/dev-only" not in prod_urls + + def test_dev_dependencies_dict_format(self, tmp_path): + """devDependencies support dict-format entries (Cargo-style git objects).""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "apm": [ + {"git": "https://github.com/owner/complex-dep.git", "ref": "main"}, + ], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + dev_deps = pkg.get_dev_apm_dependencies() + + assert len(dev_deps) == 1 + assert isinstance(dev_deps[0], DependencyReference) + + def test_mixed_dev_dependency_types(self, tmp_path): + """devDependencies can have both apm and mcp types.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "apm": ["owner/dev-apm"], + "mcp": ["io.github.test/mcp-debug"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + + assert len(pkg.get_dev_apm_dependencies()) == 1 + assert len(pkg.get_dev_mcp_dependencies()) == 1 + + def test_dev_apm_no_mcp_key(self, tmp_path): + """get_dev_mcp_dependencies returns empty when only apm devDeps exist.""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + "devDependencies": { + "apm": ["owner/dev-tool"], + }, + }) + + pkg = APMPackage.from_apm_yml(yml) + + assert pkg.get_dev_mcp_dependencies() == [] + + +class TestClearCache: + """Tests for clear_apm_yml_cache.""" + + def test_clear_forces_reparse(self, tmp_path): + """After clear, the same file is re-parsed (not cached).""" + yml = _write_apm_yml(tmp_path, { + "name": "test-pkg", + "version": "1.0.0", + }) + + pkg1 = APMPackage.from_apm_yml(yml) + + # Overwrite with different data + clear_apm_yml_cache() + yml.write_text(yaml.dump({ + "name": "changed-pkg", + "version": "2.0.0", + }), encoding="utf-8") + + pkg2 = APMPackage.from_apm_yml(yml) + + assert pkg1.name == "test-pkg" + assert pkg2.name == "changed-pkg" diff --git a/tests/unit/test_init_command.py b/tests/unit/test_init_command.py index 9ead69f6..9975a342 100644 --- a/tests/unit/test_init_command.py +++ b/tests/unit/test_init_command.py @@ -1,5 +1,6 @@ """Tests for the apm init command.""" +import json import pytest import tempfile import os @@ -294,3 +295,248 @@ def test_init_does_not_create_skill_md(self): assert not Path("SKILL.md").exists() finally: os.chdir(self.original_dir) # restore CWD before TemporaryDirectory cleanup + + +class TestInitPluginFlag: + """Test cases for apm init --plugin.""" + + def setup_method(self): + self.runner = CliRunner() + try: + self.original_dir = os.getcwd() + except FileNotFoundError: + self.original_dir = str(Path(__file__).parent.parent.parent) + os.chdir(self.original_dir) + + def teardown_method(self): + try: + os.chdir(self.original_dir) + except (FileNotFoundError, OSError): + repo_root = Path(__file__).parent.parent.parent + os.chdir(str(repo_root)) + + def test_plugin_creates_both_files(self): + """Test --plugin creates plugin.json and apm.yml, nothing else.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code == 0, result.output + assert Path("apm.yml").exists() + assert Path("plugin.json").exists() + assert not Path("SKILL.md").exists() + finally: + os.chdir(self.original_dir) + + def test_plugin_json_structure(self): + """Test plugin.json has correct schema.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + + with open("plugin.json") as f: + data = json.load(f) + + assert data["name"] == "my-plugin" + assert data["version"] == "0.1.0" + assert isinstance(data["description"], str) + assert isinstance(data["author"], dict) + assert "name" in data["author"] + assert data["license"] == "MIT" + finally: + os.chdir(self.original_dir) + + def test_plugin_json_trailing_newline(self): + """Test plugin.json ends with a newline.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + raw = Path("plugin.json").read_text() + assert raw.endswith("\n") + finally: + os.chdir(self.original_dir) + + def test_plugin_apm_yml_has_dev_dependencies(self): + """Test apm.yml includes devDependencies when --plugin.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + + with open("apm.yml") as f: + config = yaml.safe_load(f) + + assert "devDependencies" in config + assert config["devDependencies"] == {"apm": []} + assert config["dependencies"] == {"apm": [], "mcp": []} + assert config["scripts"] == {} + finally: + os.chdir(self.original_dir) + + def test_plugin_with_project_name_arg(self): + """Test --plugin with explicit project_name argument.""" + with tempfile.TemporaryDirectory() as tmp_dir: + os.chdir(tmp_dir) + try: + result = self.runner.invoke(cli, ["init", "cool-plugin", "--plugin", "--yes"]) + + assert result.exit_code == 0, result.output + project_path = Path(tmp_dir) / "cool-plugin" + assert (project_path / "apm.yml").exists() + assert (project_path / "plugin.json").exists() + + with open(project_path / "plugin.json") as f: + data = json.load(f) + assert data["name"] == "cool-plugin" + finally: + os.chdir(self.original_dir) + + def test_plugin_name_validation_rejects_uppercase(self): + """Test that uppercase names are rejected for plugins.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "MyPlugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code != 0 + assert "Invalid plugin name" in result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_name_validation_rejects_underscores(self): + """Test that underscores are rejected for plugins.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my_plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code != 0 + assert "Invalid plugin name" in result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_name_validation_rejects_start_with_number(self): + """Test names starting with numbers are rejected.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "1plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code != 0 + assert "Invalid plugin name" in result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_name_validation_accepts_valid_kebab(self): + """Test valid kebab-case names are accepted.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-cool-plugin-v2" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_shows_plugin_next_steps(self): + """Test --plugin shows plugin-specific next steps.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + assert "apm pack" in result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_does_not_create_empty_dirs(self): + """Test --plugin creates only files, no empty directories.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + entries = list(project_dir.iterdir()) + file_names = {e.name for e in entries} + assert file_names == {"apm.yml", "plugin.json"} + finally: + os.chdir(self.original_dir) + + def test_regular_init_no_dev_dependencies(self): + """Test that regular init (no --plugin) does NOT add devDependencies.""" + with tempfile.TemporaryDirectory() as tmp_dir: + os.chdir(tmp_dir) + try: + result = self.runner.invoke(cli, ["init", "--yes"]) + assert result.exit_code == 0 + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert "devDependencies" not in config + finally: + os.chdir(self.original_dir) + + def test_plugin_version_is_0_1_0(self): + """Test --plugin --yes uses 0.1.0 as default version.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert config["version"] == "0.1.0" + + with open("plugin.json") as f: + data = json.load(f) + assert data["version"] == "0.1.0" + finally: + os.chdir(self.original_dir) + + +class TestPluginNameValidation: + """Unit tests for _validate_plugin_name helper.""" + + def test_valid_names(self): + from apm_cli.commands._helpers import _validate_plugin_name + + assert _validate_plugin_name("a") is True + assert _validate_plugin_name("my-plugin") is True + assert _validate_plugin_name("plugin2") is True + assert _validate_plugin_name("a" * 64) is True + + def test_invalid_names(self): + from apm_cli.commands._helpers import _validate_plugin_name + + assert _validate_plugin_name("") is False + assert _validate_plugin_name("A") is False + assert _validate_plugin_name("my_plugin") is False + assert _validate_plugin_name("1plugin") is False + assert _validate_plugin_name("-plugin") is False + assert _validate_plugin_name("a" * 65) is False + assert _validate_plugin_name("My-Plugin") is False diff --git a/tests/unit/test_init_plugin.py b/tests/unit/test_init_plugin.py new file mode 100644 index 00000000..1b27237e --- /dev/null +++ b/tests/unit/test_init_plugin.py @@ -0,0 +1,301 @@ +"""Tests for apm init --plugin flag. + +Focused test suite for the plugin author initialization workflow. +Complements the broader ``TestInitCommand`` tests in ``test_init_command.py``. +""" + +import json +import os +import tempfile +from pathlib import Path + +import pytest +import yaml +from click.testing import CliRunner + +from apm_cli.cli import cli +from apm_cli.commands._helpers import _validate_plugin_name + + +# --------------------------------------------------------------------------- +# CLI integration tests +# --------------------------------------------------------------------------- + + +class TestInitPlugin: + """Tests for apm init --plugin.""" + + def setup_method(self): + self.runner = CliRunner() + try: + self.original_dir = os.getcwd() + except FileNotFoundError: + self.original_dir = str(Path(__file__).parent.parent.parent) + os.chdir(self.original_dir) + + def teardown_method(self): + try: + os.chdir(self.original_dir) + except (FileNotFoundError, OSError): + repo_root = Path(__file__).parent.parent.parent + os.chdir(str(repo_root)) + + def test_plugin_creates_two_files(self): + """--plugin creates exactly plugin.json and apm.yml.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code == 0, result.output + created = {e.name for e in project_dir.iterdir()} + assert "apm.yml" in created + assert "plugin.json" in created + # Only these two files, nothing else + assert created == {"apm.yml", "plugin.json"} + finally: + os.chdir(self.original_dir) + + def test_plugin_json_structure(self): + """plugin.json has required fields: name, version, description, author, license.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + + with open("plugin.json") as f: + data = json.load(f) + + assert data["name"] == "my-plugin" + assert "version" in data + assert isinstance(data["description"], str) + assert isinstance(data["author"], dict) + assert "name" in data["author"] + assert data["license"] == "MIT" + finally: + os.chdir(self.original_dir) + + def test_apm_yml_has_dev_dependencies(self): + """apm.yml includes devDependencies section when --plugin.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + + with open("apm.yml") as f: + config = yaml.safe_load(f) + + assert "devDependencies" in config + assert config["devDependencies"] == {"apm": []} + finally: + os.chdir(self.original_dir) + + def test_no_skill_md_created(self): + """SKILL.md is NOT created (not mandatory per spec).""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert not Path("SKILL.md").exists() + finally: + os.chdir(self.original_dir) + + def test_no_empty_directories_created(self): + """No empty agents/, skills/ dirs (only files).""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + entries = list(project_dir.iterdir()) + dirs = [e for e in entries if e.is_dir()] + assert dirs == [], f"Unexpected directories: {dirs}" + finally: + os.chdir(self.original_dir) + + def test_name_validation_rejects_uppercase(self): + """Plugin names must be lowercase kebab-case.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "MyPlugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code != 0 + assert "Invalid plugin name" in result.output + finally: + os.chdir(self.original_dir) + + def test_name_validation_rejects_too_long(self): + """Plugin names max 64 chars.""" + assert _validate_plugin_name("a" * 65) is False + assert _validate_plugin_name("a" * 64) is True + + def test_name_validation_accepts_valid(self): + """Valid kebab-case names pass.""" + assert _validate_plugin_name("my-plugin") is True + assert _validate_plugin_name("plugin2") is True + assert _validate_plugin_name("a") is True + assert _validate_plugin_name("cool-plugin-v3") is True + + def test_name_validation_rejects_underscores(self): + """Underscores are not valid in plugin names.""" + assert _validate_plugin_name("my_plugin") is False + + def test_name_validation_rejects_start_with_number(self): + """Names starting with numbers are invalid.""" + assert _validate_plugin_name("1plugin") is False + + def test_name_validation_rejects_start_with_hyphen(self): + """Names starting with hyphens are invalid.""" + assert _validate_plugin_name("-plugin") is False + + def test_name_validation_rejects_empty(self): + """Empty name is invalid.""" + assert _validate_plugin_name("") is False + + def test_yes_mode_works_with_plugin(self): + """--yes and --plugin together work without interaction.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "auto-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + assert result.exit_code == 0, result.output + assert Path("apm.yml").exists() + assert Path("plugin.json").exists() + + with open("apm.yml") as f: + config = yaml.safe_load(f) + # --yes + --plugin uses 0.1.0 version + assert config["version"] == "0.1.0" + finally: + os.chdir(self.original_dir) + + def test_plugin_flag_without_plugin(self): + """Regular init (no --plugin) still works unchanged.""" + with tempfile.TemporaryDirectory() as tmp_dir: + os.chdir(tmp_dir) + try: + result = self.runner.invoke(cli, ["init", "--yes"]) + + assert result.exit_code == 0, result.output + assert Path("apm.yml").exists() + assert not Path("plugin.json").exists() + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert "devDependencies" not in config + finally: + os.chdir(self.original_dir) + + def test_plugin_version_defaults_to_0_1_0(self): + """--plugin --yes defaults version to 0.1.0 (not 1.0.0).""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + with open("plugin.json") as f: + data = json.load(f) + assert data["version"] == "0.1.0" + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert config["version"] == "0.1.0" + finally: + os.chdir(self.original_dir) + + def test_plugin_author_is_object(self): + """Author in plugin.json is an object with 'name' key.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + with open("plugin.json") as f: + data = json.load(f) + assert isinstance(data["author"], dict) + assert "name" in data["author"] + finally: + os.chdir(self.original_dir) + + def test_plugin_shows_next_steps(self): + """Plugin init shows plugin-specific next steps.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + assert result.exit_code == 0, result.output + assert "apm pack" in result.output + finally: + os.chdir(self.original_dir) + + def test_plugin_with_project_name_argument(self): + """--plugin with explicit project_name creates directory.""" + with tempfile.TemporaryDirectory() as tmp_dir: + os.chdir(tmp_dir) + try: + result = self.runner.invoke( + cli, ["init", "cool-plugin", "--plugin", "--yes"] + ) + assert result.exit_code == 0, result.output + + project_path = Path(tmp_dir) / "cool-plugin" + assert (project_path / "apm.yml").exists() + assert (project_path / "plugin.json").exists() + + with open(project_path / "plugin.json") as f: + data = json.load(f) + assert data["name"] == "cool-plugin" + finally: + os.chdir(self.original_dir) + + def test_plugin_json_ends_with_newline(self): + """plugin.json ends with a trailing newline.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + raw = Path("plugin.json").read_text() + assert raw.endswith("\n") + finally: + os.chdir(self.original_dir) + + def test_plugin_apm_yml_has_dependencies(self): + """apm.yml created with --plugin still has regular dependencies section.""" + with tempfile.TemporaryDirectory() as tmp_dir: + project_dir = Path(tmp_dir) / "my-plugin" + project_dir.mkdir() + os.chdir(project_dir) + try: + self.runner.invoke(cli, ["init", "--plugin", "--yes"]) + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert "dependencies" in config + assert config["dependencies"] == {"apm": [], "mcp": []} + finally: + os.chdir(self.original_dir) From a100ff5dc1634b4569ba9b0c7411aa62214cba1b Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 00:55:20 +0100 Subject: [PATCH 03/18] docs: update documentation for plugin coexistence features MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 'Exporting APM packages as plugins' section to plugins guide - Document --plugin flag on init and --format plugin on pack in CLI reference - Add devDependencies section (§5) to manifest schema reference - Add cross-references between guides and reference pages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/src/content/docs/guides/plugins.md | 25 ++++++++++ .../content/docs/reference/cli-commands.md | 17 ++++++- .../content/docs/reference/manifest-schema.md | 48 +++++++++++++++---- 3 files changed, 81 insertions(+), 9 deletions(-) diff --git a/docs/src/content/docs/guides/plugins.md b/docs/src/content/docs/guides/plugins.md index 03e641fd..8c77871c 100644 --- a/docs/src/content/docs/guides/plugins.md +++ b/docs/src/content/docs/guides/plugins.md @@ -306,6 +306,31 @@ This: - Integrates skills into the runtime - Includes prompt primitives +## Exporting APM packages as plugins + +APM packages can be exported as standalone plugin directories using [`apm pack --format plugin`](../../guides/pack-distribute/#plugin-format). This enables a dual-manifest workflow: author with `apm.yml` for dependency management, distribute as a `plugin.json` plugin for consumption without APM. + +### Plugin authoring setup + +Initialize a plugin project with both manifests: + +```bash +apm init my-plugin --plugin +``` + +This creates `plugin.json` and `apm.yml` (with a `devDependencies` section). Plugin names must be kebab-case, max 64 characters. + +### Building the plugin + +```bash +apm install # resolve dependencies +apm pack --format plugin # export as plugin directory +``` + +The exporter remaps `.apm/` content into plugin-native paths (e.g., `.apm/prompts/*.prompt.md` → `commands/*.md`) and generates a `plugin.json` with updated component paths. Dependencies listed under [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) are excluded from the output. + +See [Pack & Distribute — Plugin format](../../guides/pack-distribute/#plugin-format) for the full mapping table and output structure. + ## Finding Plugins Plugins can be found through: diff --git a/docs/src/content/docs/reference/cli-commands.md b/docs/src/content/docs/reference/cli-commands.md index f5a0a66c..68186d07 100644 --- a/docs/src/content/docs/reference/cli-commands.md +++ b/docs/src/content/docs/reference/cli-commands.md @@ -35,6 +35,7 @@ apm init [PROJECT_NAME] [OPTIONS] **Options:** - `-y, --yes` - Skip interactive prompts and use auto-detected defaults +- `--plugin` - Initialize as a plugin authoring project (creates `plugin.json` + `apm.yml` with `devDependencies`) **Examples:** ```bash @@ -49,6 +50,9 @@ apm init my-hello-world # Create project with auto-detected defaults apm init my-project --yes + +# Initialize a plugin authoring project +apm init my-plugin --plugin ``` **Behavior:** @@ -56,9 +60,11 @@ apm init my-project --yes - **Interactive mode**: Prompts for project details unless `--yes` specified - **Auto-detection**: Automatically detects author from `git config user.name` and description from project context - **Brownfield friendly**: Works cleanly in existing projects without file pollution +- **Plugin mode** (`--plugin`): Creates both `plugin.json` and `apm.yml` with an empty `devDependencies` section. Plugin names must be kebab-case (`^[a-z][a-z0-9-]{0,63}$`), max 64 characters **Creates:** - `apm.yml` - Minimal project configuration with empty dependencies and scripts sections +- `plugin.json` - Plugin manifest (only with `--plugin`) **Auto-detected fields:** - `name` - From project directory name @@ -88,6 +94,10 @@ apm install [PACKAGES...] [OPTIONS] - `--verbose` - Show individual file paths and full error details in the diagnostic summary - `--trust-transitive-mcp` - Trust self-defined MCP servers from transitive packages (skip re-declaration requirement) +:::note[Planned] +`--dev` — Add packages to `devDependencies` instead of `dependencies`. Development dependencies are installed locally but excluded from `apm pack --format plugin` bundles. +::: + **Behavior:** - `apm install` (no args): Installs **all** packages from `apm.yml` - `apm install `: Installs **only** the specified package (adds to `apm.yml` if not present) @@ -407,7 +417,8 @@ apm pack [OPTIONS] - `-t, --target [copilot|vscode|claude|cursor|opencode|all]` - Filter files by target. Auto-detects from `apm.yml` if not specified. `vscode` is an alias for `copilot` - `--archive` - Produce a `.tar.gz` archive instead of a directory - `--dry-run` - List files that would be packed without writing anything -- `--format [apm|plugin]` - Bundle format (default: `apm`) +- `--format [apm|plugin]` - Bundle format (default: `apm`). `plugin` produces a standalone plugin directory with `plugin.json` +- `--force` - On collision (plugin format), last writer wins instead of first **Examples:** ```bash @@ -420,6 +431,9 @@ apm pack --archive # Pack only VS Code / Copilot files apm pack --target vscode +# Export as a standalone plugin directory +apm pack --format plugin + # Preview what would be packed apm pack --dry-run @@ -432,6 +446,7 @@ apm pack -o dist/ - Scans files for hidden Unicode characters before bundling — warns if findings are detected (non-blocking; consumers are protected by `apm install`/`apm unpack` which block on critical) - Copies files preserving directory structure - Writes an enriched `apm.lock.yaml` inside the bundle with a `pack:` metadata section (the project's own `apm.lock.yaml` is never modified) +- **Plugin format** (`--format plugin`): Remaps `.apm/` content into plugin-native paths (`agents/`, `skills/`, `commands/`, etc.), generates or updates `plugin.json`, merges hooks into a single `hooks.json`, and excludes `devDependencies`. See [Pack & Distribute](../../guides/pack-distribute/#plugin-format) for the full mapping table **Target filtering:** diff --git a/docs/src/content/docs/reference/manifest-schema.md b/docs/src/content/docs/reference/manifest-schema.md index 78d37f98..e9ff5726 100644 --- a/docs/src/content/docs/reference/manifest-schema.md +++ b/docs/src/content/docs/reference/manifest-schema.md @@ -51,6 +51,9 @@ scripts: > dependencies: apm: > mcp: > +devDependencies: + apm: > + mcp: > compilation: ``` @@ -319,7 +322,32 @@ dependencies: --- -## 5. Compilation +## 5. devDependencies + +| | | +|---|---| +| **Type** | `object` | +| **Required** | OPTIONAL | +| **Known keys** | `apm`, `mcp` | + +Development-only dependencies installed locally but excluded from plugin bundles (`apm pack --format plugin`). Uses the same structure as [`dependencies`](#4-dependencies). + +```yaml +devDependencies: + apm: + - owner/test-helpers + - owner/lint-rules#v2.0.0 +``` + +Created automatically by `apm init --plugin`. + +:::note[Planned] +`apm install --dev ` will add packages directly to `devDependencies`. Until then, add entries manually to `apm.yml`. +::: + +--- + +## 6. Compilation The `compilation` key is OPTIONAL. It controls `apm compile` behaviour. All fields have sensible defaults; omitting the entire section is valid. @@ -333,9 +361,9 @@ The `compilation` key is OPTIONAL. It controls `apm compile` behaviour. All fiel | `resolve_links` | `bool` | `true` | | Resolve relative Markdown links in primitives. | | `source_attribution` | `bool` | `true` | | Include source-file origin comments in compiled output. | | `exclude` | `list` or `string` | `[]` | Glob patterns | Directories to skip during compilation (e.g. `apm_modules/**`). | -| `placement` | `object` | — | | Placement tuning. See §5.1. | +| `placement` | `object` | — | | Placement tuning. See §6.1. | -### 5.1. `compilation.placement` +### 6.1. `compilation.placement` | Field | Type | Default | Description | |---|---|---|---| @@ -355,11 +383,11 @@ compilation: --- -## 6. Lockfile (`apm.lock.yaml`) +## 7. Lockfile (`apm.lock.yaml`) After successful dependency resolution, a conforming resolver MUST write a lockfile capturing the exact resolved state. The lockfile MUST be a YAML file named `apm.lock.yaml` at the project root. It SHOULD be committed to version control. -### 6.1. Structure +### 7.1. Structure ```yaml lockfile_version: "1" @@ -380,7 +408,7 @@ dependencies: # YAML list (not a map) mcp_servers: > # MCP dependency references managed by APM (OPTIONAL, e.g. "io.github.github/github-mcp-server") ``` -### 6.2. Resolver Behaviour +### 7.2. Resolver Behaviour 1. **First install** — Resolve all dependencies, write `apm.lock.yaml`. 2. **Subsequent installs** — Read `apm.lock.yaml`, use locked commit SHAs. A resolver SHOULD skip download if local checkout already matches. @@ -388,7 +416,7 @@ mcp_servers: > # MCP dependency references managed b --- -## 7. Integrator Contract +## 8. Integrator Contract Any runtime adopting this format (e.g. GitHub Agentic Workflows, CI systems, IDEs) MUST implement these steps: @@ -396,7 +424,7 @@ Any runtime adopting this format (e.g. GitHub Agentic Workflows, CI systems, IDE 2. **Resolve `dependencies.apm`** — For each entry, clone/fetch the git repo (respecting `ref`), locate the `.apm/` directory (or virtual path), and extract primitives. 3. **Resolve `dependencies.mcp`** — For each entry, resolve from the MCP registry or validate self-defined transport config per §4.2.3. 4. **Transitive resolution** — Resolved packages MAY contain their own `apm.yml` with further dependencies, forming a dependency tree. Resolvers MUST resolve transitively. Conflicts are merged at instruction level (by `applyTo` pattern), not file level. -5. **Write lockfile** — Record exact commit SHAs and deployed file paths in `apm.lock.yaml` per §6. +5. **Write lockfile** — Record exact commit SHAs and deployed file paths in `apm.lock.yaml` per §7. --- @@ -431,6 +459,10 @@ dependencies: env: API_KEY: ${{ secrets.KEY }} +devDependencies: + apm: + - owner/test-helpers + compilation: target: all strategy: distributed From ca6e6de4a3dabb28dcb4992da4ffe525dc73dab3 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:07:26 +0100 Subject: [PATCH 04/18] fix: address security and DX review findings in plugin exporter - Add recursion depth limit (_MAX_MERGE_DEPTH=20) to _deep_merge to prevent stack overflow from maliciously crafted hooks/MCP configs - Filter symlinks in tar archive creation (TOCTOU mitigation) - Add plugin format info message after successful pack - Add test for depth limit enforcement Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/bundle/plugin_exporter.py | 25 +++++++++++++++++++++---- src/apm_cli/commands/pack.py | 6 ++++++ tests/unit/test_plugin_exporter.py | 18 ++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 74304b01..31d420a7 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -138,23 +138,34 @@ def _collect_recursive( # --------------------------------------------------------------------------- -def _deep_merge(base: dict, overlay: dict, *, overwrite: bool = False) -> None: +_MAX_MERGE_DEPTH = 20 + + +def _deep_merge( + base: dict, overlay: dict, *, overwrite: bool = False, _depth: int = 0 +) -> None: """Recursively merge *overlay* into *base*. When *overwrite* is False (default), existing base keys win. When *overwrite* is True, overlay keys overwrite base keys. + + Raises ``ValueError`` if nesting exceeds ``_MAX_MERGE_DEPTH``. """ + if _depth > _MAX_MERGE_DEPTH: + raise ValueError( + f"Hooks/MCP config exceeds maximum nesting depth ({_MAX_MERGE_DEPTH})" + ) for key, value in overlay.items(): if key not in base: base[key] = value elif overwrite: if isinstance(base[key], dict) and isinstance(value, dict): - _deep_merge(base[key], value, overwrite=True) + _deep_merge(base[key], value, overwrite=True, _depth=_depth + 1) else: base[key] = value else: if isinstance(base[key], dict) and isinstance(value, dict): - _deep_merge(base[key], value, overwrite=False) + _deep_merge(base[key], value, overwrite=False, _depth=_depth + 1) def _collect_hooks_from_apm(apm_dir: Path) -> dict: @@ -519,7 +530,13 @@ def export_plugin_bundle( if archive: archive_path = output_dir / f"{pkg_name}-{pkg_version}.tar.gz" with tarfile.open(archive_path, "w:gz") as tar: - tar.add(bundle_dir, arcname=bundle_dir.name) + + def _tar_filter(info: tarfile.TarInfo) -> Optional[tarfile.TarInfo]: + if info.issym() or info.islnk(): + return None # reject symlinks injected after write + return info + + tar.add(bundle_dir, arcname=bundle_dir.name, filter=_tar_filter) shutil.rmtree(bundle_dir) result.bundle_path = archive_path diff --git a/src/apm_cli/commands/pack.py b/src/apm_cli/commands/pack.py index b0610e2c..ca5e6ab6 100644 --- a/src/apm_cli/commands/pack.py +++ b/src/apm_cli/commands/pack.py @@ -63,6 +63,12 @@ def pack_cmd(ctx, fmt, target, archive, output, dry_run, force): _rich_warning("No deployed files found -- empty bundle created") else: _rich_success(f"Packed {len(result.files)} file(s) -> {result.bundle_path}") + if fmt == "plugin": + _rich_info( + "Plugin bundle ready — contains plugin.json and " + "plugin-native directories (agents/, skills/, commands/, …). " + "No APM-specific files included." + ) except (FileNotFoundError, ValueError) as exc: _rich_error(str(exc)) diff --git a/tests/unit/test_plugin_exporter.py b/tests/unit/test_plugin_exporter.py index 4b82a02a..eb2a8b3e 100644 --- a/tests/unit/test_plugin_exporter.py +++ b/tests/unit/test_plugin_exporter.py @@ -191,6 +191,24 @@ def test_nested_overwrite(self): ) assert base == {"hooks": {"preCommit": "new", "postCommit": "added"}} + def test_depth_limit_raises(self): + """Deeply nested dicts beyond _MAX_MERGE_DEPTH raise ValueError.""" + from apm_cli.bundle.plugin_exporter import _MAX_MERGE_DEPTH + + # Build two dicts nested deeper than the limit with overlapping keys + # so _deep_merge actually recurses on every level + def _nested(depth: int) -> dict: + d = {"leaf": True} + for _ in range(depth): + d = {"k": d} + return d + + base = _nested(_MAX_MERGE_DEPTH + 5) + overlay = _nested(_MAX_MERGE_DEPTH + 5) + + with pytest.raises(ValueError, match="maximum nesting depth"): + _deep_merge(base, overlay) + # --------------------------------------------------------------------------- # Unit tests: component collectors From 18ef8448df877f235b9e1ca501d7aee6f22c7d5b Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:07:49 +0100 Subject: [PATCH 05/18] docs: add plugin coexistence entries to changelog Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06a341e8..328eb269 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- `apm pack --format plugin` — export APM packages as standalone plugin directories consumable by Copilot CLI, Claude Code, and other plugin hosts. Transforms `.apm/` layout to plugin-native directories (agents, skills, commands, instructions, contexts) with hooks/MCP merging, collision handling, and security scanning (#378) +- `apm init --plugin` — initialize a plugin authoring project with both `plugin.json` and `apm.yml` (includes `devDependencies` section). Validates kebab-case plugin names per plugin spec (#378) +- `devDependencies` support in `apm.yml` and `APMPackage` model — same syntax as `dependencies`, parsed with `get_dev_apm_dependencies()`/`get_dev_mcp_dependencies()` accessors. Dev deps are excluded from plugin bundles (#378) +- `apm pack --force` flag — on collision, last writer wins instead of first (#378) +- `synthesize_plugin_json_from_apm_yml()` — generates `plugin.json` from `apm.yml` identity fields when no plugin manifest exists (#378) + ### Fixed - CLI docs now document the `apm compile --target opencode` option, align `apm audit --dry-run` wording with actual behavior, and mark planned `apm audit --drift` examples as not yet available (#366) From a882a82d34dce17a426e68f88b23263cc2feee84 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:20:51 +0100 Subject: [PATCH 06/18] feat: add SHA-256 content integrity hashing in lockfile (#315) - Add content_hash.py utility with deterministic package hashing (sorted paths, POSIX format, skips .git/__pycache__/symlinks) - Add content_hash field to LockedDependency with backward compat - Compute hash after download during lockfile generation - Verify hash on cached packages; re-download on mismatch - 22 tests covering hashing, verification, and lockfile roundtrip Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/commands/install.py | 93 +++++++++--- src/apm_cli/deps/lockfile.py | 22 ++- src/apm_cli/utils/content_hash.py | 72 +++++++++ tests/unit/test_content_hash.py | 236 ++++++++++++++++++++++++++++++ 4 files changed, 402 insertions(+), 21 deletions(-) create mode 100644 src/apm_cli/utils/content_hash.py create mode 100644 tests/unit/test_content_hash.py diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index f4de155b..6757f644 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -56,12 +56,17 @@ # --------------------------------------------------------------------------- -def _validate_and_add_packages_to_apm_yml(packages, dry_run=False): +def _validate_and_add_packages_to_apm_yml(packages, dry_run=False, dev=False): """Validate packages exist and can be accessed, then add to apm.yml dependencies section. Implements normalize-on-write: any input form (HTTPS URL, SSH URL, FQDN, shorthand) is canonicalized before storage. Default host (github.com) is stripped; non-default hosts are preserved. Duplicates are detected by identity. + + Args: + packages: Package specifiers to validate and add. + dry_run: If True, only show what would be added. + dev: If True, write to devDependencies instead of dependencies. """ import subprocess import tempfile @@ -80,12 +85,13 @@ def _validate_and_add_packages_to_apm_yml(packages, dry_run=False): sys.exit(1) # Ensure dependencies structure exists - if "dependencies" not in data: - data["dependencies"] = {} - if "apm" not in data["dependencies"]: - data["dependencies"]["apm"] = [] + dep_section = "devDependencies" if dev else "dependencies" + if dep_section not in data: + data[dep_section] = {} + if "apm" not in data[dep_section]: + data[dep_section]["apm"] = [] - current_deps = data["dependencies"]["apm"] or [] + current_deps = data[dep_section]["apm"] or [] validated_packages = [] # Build identity set from existing deps for duplicate detection @@ -151,12 +157,13 @@ def _validate_and_add_packages_to_apm_yml(packages, dry_run=False): return validated_packages # Add validated packages to dependencies (already canonical) + dep_label = "devDependencies" if dev else "apm.yml" for package in validated_packages: current_deps.append(package) - _rich_info(f"Added {package} to apm.yml") + _rich_info(f"Added {package} to {dep_label}") # Update dependencies - data["dependencies"]["apm"] = current_deps + data[dep_section]["apm"] = current_deps # Write back to apm.yml try: @@ -324,8 +331,14 @@ def _validate_package_exists(package): show_default=True, help="Max concurrent package downloads (0 to disable parallelism)", ) +@click.option( + "--dev", + is_flag=True, + default=False, + help="Install as development dependency (devDependencies)", +) @click.pass_context -def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbose, trust_transitive_mcp, parallel_downloads): +def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbose, trust_transitive_mcp, parallel_downloads, dev): """Install APM and MCP dependencies from apm.yml (like npm install). This command automatically detects AI runtimes from your apm.yml scripts and installs @@ -367,7 +380,7 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo # If packages are specified, validate and add them to apm.yml first if packages: validated_packages = _validate_and_add_packages_to_apm_yml( - packages, dry_run + packages, dry_run, dev=dev ) # Note: Empty validated_packages is OK if packages are already in apm.yml # We'll proceed with installation from apm.yml to ensure everything is synced @@ -383,6 +396,8 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo # Get APM and MCP dependencies apm_deps = apm_package.get_apm_dependencies() + dev_apm_deps = apm_package.get_dev_apm_dependencies() + has_any_apm_deps = bool(apm_deps) or bool(dev_apm_deps) mcp_deps = apm_package.get_mcp_dependencies() # Convert --only string to InstallMode enum @@ -412,7 +427,7 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo for dep in mcp_deps: _rich_info(f" - {dep}") - if not apm_deps and not mcp_deps: + if not apm_deps and not dev_apm_deps and not mcp_deps: _rich_warning("No dependencies found in apm.yml") _rich_success("Dry run complete - no changes made") @@ -439,7 +454,7 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo old_mcp_configs = builtins.dict(_existing_lock.mcp_configs) apm_diagnostics = None - if should_install_apm and apm_deps: + if should_install_apm and has_any_apm_deps: if not APM_DEPS_AVAILABLE: _rich_error("APM dependency system not available") _rich_info(f"Import error: {_APM_IMPORT_ERROR}") @@ -460,7 +475,7 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo except Exception as e: _rich_error(f"Failed to install APM dependencies: {e}") sys.exit(1) - elif should_install_apm and not apm_deps: + elif should_install_apm and not has_any_apm_deps: _rich_info("No APM dependencies found in apm.yml") # When --update is used, package files on disk may have changed. @@ -795,6 +810,23 @@ def _integrate_package_primitives( return result +def _dep_install_path(locked_dep, apm_modules_dir): + """Derive the install path for a LockedDependency under apm_modules/.""" + try: + from ..models.apm_package import DependencyReference + dep_ref = DependencyReference( + repo_url=locked_dep.repo_url, + host=locked_dep.host, + virtual_path=locked_dep.virtual_path, + is_virtual=locked_dep.is_virtual, + is_local=(locked_dep.source == "local"), + local_path=locked_dep.local_path, + ) + return dep_ref.get_install_path(apm_modules_dir) + except Exception: + return None + + def _copy_local_package(dep_ref, install_path, project_root): """Copy a local package to apm_modules/. @@ -857,10 +889,12 @@ def _install_apm_dependencies( raise RuntimeError("APM dependency system not available") apm_deps = apm_package.get_apm_dependencies() - if not apm_deps: + dev_apm_deps = apm_package.get_dev_apm_dependencies() + all_apm_deps = apm_deps + dev_apm_deps + if not all_apm_deps: return InstallResult() - _rich_info(f"Installing APM dependencies ({len(apm_deps)})...") + _rich_info(f"Installing APM dependencies ({len(all_apm_deps)})...") project_root = Path.cwd() @@ -1077,7 +1111,7 @@ def _collect_descendants(node, visited=None): # Collect installed packages for lockfile generation from apm_cli.deps.lockfile import LockFile, LockedDependency, get_lockfile_path - installed_packages: List[tuple] = [] # List of (dep_ref, resolved_commit, depth, resolved_by) + installed_packages: List[tuple] = [] # List of (dep_ref, resolved_commit, depth, resolved_by, is_dev) package_deployed_files: builtins.dict = {} # dep_key → list of relative deployed paths package_types: builtins.dict = {} # dep_key → package type string @@ -1279,7 +1313,8 @@ def _collect_descendants(node, visited=None): node = dependency_graph.dependency_tree.get_node(dep_ref.get_unique_key()) depth = node.depth if node else 1 resolved_by = node.parent.dependency_ref.repo_url if node and node.parent else None - installed_packages.append((dep_ref, None, depth, resolved_by)) + _is_dev = node.is_dev if node else False + installed_packages.append((dep_ref, None, depth, resolved_by, _is_dev)) dep_key = dep_ref.get_unique_key() dep_deployed_files: builtins.list = [] @@ -1380,6 +1415,18 @@ def _collect_descendants(node, visited=None): (is_cacheable and not update_refs) or already_resolved or lockfile_match ) + # Verify content integrity when lockfile has a hash + if skip_download and _dep_locked_chk and _dep_locked_chk.content_hash: + from ..utils.content_hash import verify_package_hash + if not verify_package_hash(install_path, _dep_locked_chk.content_hash): + import shutil as _shutil_hash + _rich_warning( + f"Content hash mismatch for " + f"{dep_ref.get_unique_key()} — re-downloading" + ) + safe_rmtree(install_path, apm_modules_dir) + skip_download = False + if skip_download: display_name = ( str(dep_ref) if dep_ref.is_virtual else dep_ref.repo_url @@ -1466,6 +1513,7 @@ def _collect_descendants(node, visited=None): node = dependency_graph.dependency_tree.get_node(dep_ref.get_unique_key()) depth = node.depth if node else 1 resolved_by = node.parent.dependency_ref.repo_url if node and node.parent else None + _is_dev = node.is_dev if node else False # Get commit SHA: callback capture > existing lockfile > explicit reference dep_key = dep_ref.get_unique_key() cached_commit = callback_downloaded.get(dep_key) @@ -1475,7 +1523,7 @@ def _collect_descendants(node, visited=None): cached_commit = locked_dep.resolved_commit if not cached_commit: cached_commit = dep_ref.reference - installed_packages.append((dep_ref, cached_commit, depth, resolved_by)) + installed_packages.append((dep_ref, cached_commit, depth, resolved_by, _is_dev)) # Track package type for lockfile if hasattr(cached_package_info, 'package_type') and cached_package_info.package_type: @@ -1582,7 +1630,8 @@ def _collect_descendants(node, visited=None): node = dependency_graph.dependency_tree.get_node(dep_ref.get_unique_key()) depth = node.depth if node else 1 resolved_by = node.parent.dependency_ref.repo_url if node and node.parent else None - installed_packages.append((dep_ref, resolved_commit, depth, resolved_by)) + _is_dev = node.is_dev if node else False + installed_packages.append((dep_ref, resolved_commit, depth, resolved_by, _is_dev)) # Track package type for lockfile if hasattr(package_info, 'package_type') and package_info.package_type: @@ -1719,6 +1768,12 @@ def _collect_descendants(node, visited=None): for dep_key, pkg_type in package_types.items(): if dep_key in lockfile.dependencies: lockfile.dependencies[dep_key].package_type = pkg_type + # Compute content hashes for integrity verification + from ..utils.content_hash import compute_package_hash as _compute_hash + for dep_key, locked_dep in lockfile.dependencies.items(): + _hash_path = _dep_install_path(locked_dep, apm_modules_dir) + if _hash_path and _hash_path.is_dir(): + locked_dep.content_hash = _compute_hash(_hash_path) # Selectively merge entries from the existing lockfile: # - For partial installs (only_packages): preserve all old entries # (sequential install — only the specified package was processed). diff --git a/src/apm_cli/deps/lockfile.py b/src/apm_cli/deps/lockfile.py index cda16fb1..01046bca 100644 --- a/src/apm_cli/deps/lockfile.py +++ b/src/apm_cli/deps/lockfile.py @@ -33,6 +33,8 @@ class LockedDependency: deployed_files: List[str] = field(default_factory=list) source: Optional[str] = None # "local" for local deps, None/absent for remote local_path: Optional[str] = None # Original local path (relative to project root) + content_hash: Optional[str] = None # SHA-256 of package file tree + is_dev: bool = False # True for devDependencies def get_unique_key(self) -> str: """Returns unique key for this dependency.""" @@ -69,6 +71,10 @@ def to_dict(self) -> Dict[str, Any]: result["source"] = self.source if self.local_path: result["local_path"] = self.local_path + if self.content_hash: + result["content_hash"] = self.content_hash + if self.is_dev: + result["is_dev"] = True return result @classmethod @@ -102,6 +108,8 @@ def from_dict(cls, data: Dict[str, Any]) -> "LockedDependency": deployed_files=deployed_files, source=data.get("source"), local_path=data.get("local_path"), + content_hash=data.get("content_hash"), + is_dev=data.get("is_dev", False), ) @classmethod @@ -111,6 +119,7 @@ def from_dependency_ref( resolved_commit: Optional[str], depth: int, resolved_by: Optional[str], + is_dev: bool = False, ) -> "LockedDependency": """Create from a DependencyReference with resolution info.""" return cls( @@ -124,6 +133,7 @@ def from_dependency_ref( resolved_by=resolved_by, source="local" if dep_ref.is_local else None, local_path=dep_ref.local_path if dep_ref.is_local else None, + is_dev=is_dev, ) @@ -222,7 +232,9 @@ def from_installed_packages( """Create a lock file from installed packages. Args: - installed_packages: List of (dep_ref, resolved_commit, depth, resolved_by) tuples + installed_packages: List of (dep_ref, resolved_commit, depth, resolved_by) + or (dep_ref, resolved_commit, depth, resolved_by, is_dev) tuples. + The 5th element is optional for backward compatibility. dependency_graph: The resolved DependencyGraph for additional metadata """ # Get APM version @@ -234,12 +246,18 @@ def from_installed_packages( lock = cls(apm_version=apm_version) - for dep_ref, resolved_commit, depth, resolved_by in installed_packages: + for entry in installed_packages: + if len(entry) >= 5: + dep_ref, resolved_commit, depth, resolved_by, is_dev = entry[:5] + else: + dep_ref, resolved_commit, depth, resolved_by = entry[:4] + is_dev = False locked_dep = LockedDependency.from_dependency_ref( dep_ref=dep_ref, resolved_commit=resolved_commit, depth=depth, resolved_by=resolved_by, + is_dev=is_dev, ) lock.add_dependency(locked_dep) diff --git a/src/apm_cli/utils/content_hash.py b/src/apm_cli/utils/content_hash.py new file mode 100644 index 00000000..0fb2eace --- /dev/null +++ b/src/apm_cli/utils/content_hash.py @@ -0,0 +1,72 @@ +"""Deterministic SHA-256 content hashing for package integrity verification.""" + +import hashlib +from pathlib import Path +from typing import Optional + +# Directories excluded from hashing (not relevant to package content) +_EXCLUDED_DIRS = {".git", "__pycache__"} + +# Well-known hash for empty/missing packages +_EMPTY_HASH = "sha256:" + hashlib.sha256(b"").hexdigest() + + +def compute_package_hash(package_path: Path) -> str: + """Compute a deterministic SHA-256 hash of a package's file tree. + + The hash is computed over sorted file paths and their contents, + making it independent of filesystem ordering and metadata (timestamps, + permissions). + + Args: + package_path: Root directory of the installed package. + + Returns: + Hash string in format ``"sha256:"``. + """ + if not package_path.is_dir(): + return _EMPTY_HASH + + hasher = hashlib.sha256() + file_count = 0 + + # Collect all regular files, skipping excluded dirs and symlinks + regular_files: list[Path] = [] + for item in package_path.rglob("*"): + # Skip symlinks + if item.is_symlink(): + continue + # Skip excluded directories and their contents + rel = item.relative_to(package_path) + if any(part in _EXCLUDED_DIRS for part in rel.parts): + continue + if item.is_file(): + regular_files.append(rel) + + # Sort lexicographically by POSIX path for determinism + regular_files.sort(key=lambda p: p.as_posix()) + + for rel_path in regular_files: + # Hash the relative path then the file contents + hasher.update(rel_path.as_posix().encode("utf-8")) + hasher.update((package_path / rel_path).read_bytes()) + file_count += 1 + + if file_count == 0: + return _EMPTY_HASH + + return f"sha256:{hasher.hexdigest()}" + + +def verify_package_hash(package_path: Path, expected_hash: str) -> bool: + """Verify a package's content matches the expected hash. + + Args: + package_path: Root directory of the installed package. + expected_hash: Expected hash string (e.g., ``"sha256:abc123..."``). + + Returns: + True if hash matches, False if mismatch. + """ + actual = compute_package_hash(package_path) + return actual == expected_hash diff --git a/tests/unit/test_content_hash.py b/tests/unit/test_content_hash.py new file mode 100644 index 00000000..c5433f63 --- /dev/null +++ b/tests/unit/test_content_hash.py @@ -0,0 +1,236 @@ +"""Tests for SHA-256 content integrity hashing.""" + +import os +from pathlib import Path + +import pytest + +from apm_cli.utils.content_hash import compute_package_hash, verify_package_hash + + +# --------------------------------------------------------------------------- +# compute_package_hash +# --------------------------------------------------------------------------- + +class TestComputePackageHash: + def test_basic_hash(self, tmp_path): + """Computes deterministic hash for a package directory.""" + (tmp_path / "file.txt").write_text("hello") + result = compute_package_hash(tmp_path) + assert result.startswith("sha256:") + assert len(result) == len("sha256:") + 64 # SHA-256 hex digest is 64 chars + + def test_deterministic_across_calls(self, tmp_path): + """Same content produces same hash.""" + (tmp_path / "a.txt").write_text("content") + assert compute_package_hash(tmp_path) == compute_package_hash(tmp_path) + + def test_different_content_different_hash(self, tmp_path): + """Different file content produces different hash.""" + (tmp_path / "a.txt").write_text("version1") + hash1 = compute_package_hash(tmp_path) + (tmp_path / "a.txt").write_text("version2") + hash2 = compute_package_hash(tmp_path) + assert hash1 != hash2 + + def test_file_order_independent(self, tmp_path): + """Hash is the same regardless of filesystem ordering.""" + # Create files in two different orders, hash should be the same + d1 = tmp_path / "dir1" + d1.mkdir() + (d1 / "b.txt").write_text("B") + (d1 / "a.txt").write_text("A") + + d2 = tmp_path / "dir2" + d2.mkdir() + (d2 / "a.txt").write_text("A") + (d2 / "b.txt").write_text("B") + + assert compute_package_hash(d1) == compute_package_hash(d2) + + def test_skips_git_directory(self, tmp_path): + """The .git directory is excluded from hashing.""" + (tmp_path / "code.py").write_text("print('hi')") + hash_before = compute_package_hash(tmp_path) + + git_dir = tmp_path / ".git" + git_dir.mkdir() + (git_dir / "HEAD").write_text("ref: refs/heads/main") + hash_after = compute_package_hash(tmp_path) + + assert hash_before == hash_after + + def test_skips_pycache(self, tmp_path): + """__pycache__ directories are excluded from hashing.""" + (tmp_path / "module.py").write_text("x = 1") + hash_before = compute_package_hash(tmp_path) + + cache_dir = tmp_path / "__pycache__" + cache_dir.mkdir() + (cache_dir / "module.cpython-312.pyc").write_bytes(b"\x00\x01\x02") + hash_after = compute_package_hash(tmp_path) + + assert hash_before == hash_after + + def test_empty_directory(self, tmp_path): + """Empty directory returns a well-known hash.""" + empty = tmp_path / "empty" + empty.mkdir() + result = compute_package_hash(empty) + assert result.startswith("sha256:") + # Empty hash is the SHA-256 of an empty bytestring + import hashlib + expected = "sha256:" + hashlib.sha256(b"").hexdigest() + assert result == expected + + def test_nonexistent_directory(self, tmp_path): + """Non-existent path returns the empty hash.""" + import hashlib + expected = "sha256:" + hashlib.sha256(b"").hexdigest() + assert compute_package_hash(tmp_path / "nope") == expected + + def test_binary_files_handled(self, tmp_path): + """Binary files are hashed correctly.""" + (tmp_path / "data.bin").write_bytes(bytes(range(256))) + result = compute_package_hash(tmp_path) + assert result.startswith("sha256:") + # Verify it doesn't raise and produces a valid digest + assert len(result) == len("sha256:") + 64 + + def test_symlinks_skipped(self, tmp_path): + """Symlinks are not followed during hashing.""" + (tmp_path / "real.txt").write_text("real") + hash_before = compute_package_hash(tmp_path) + + # Create a symlink + link = tmp_path / "link.txt" + try: + link.symlink_to(tmp_path / "real.txt") + except OSError: + pytest.skip("Cannot create symlinks on this platform") + hash_after = compute_package_hash(tmp_path) + assert hash_before == hash_after + + def test_hash_format(self, tmp_path): + """Hash starts with 'sha256:' prefix.""" + (tmp_path / "f.txt").write_text("x") + result = compute_package_hash(tmp_path) + assert result.startswith("sha256:") + hex_part = result[len("sha256:"):] + # Validate it's a valid hex string + int(hex_part, 16) + + def test_nested_directories(self, tmp_path): + """Nested directory structure is hashed correctly.""" + sub = tmp_path / "sub" / "deep" + sub.mkdir(parents=True) + (sub / "nested.txt").write_text("deep content") + (tmp_path / "top.txt").write_text("top content") + result = compute_package_hash(tmp_path) + assert result.startswith("sha256:") + + def test_path_uses_posix_format(self, tmp_path): + """File paths use POSIX separators for cross-platform determinism.""" + sub = tmp_path / "dir" + sub.mkdir() + (sub / "file.txt").write_text("content") + # Hash should be the same on any platform (POSIX paths used internally) + hash1 = compute_package_hash(tmp_path) + hash2 = compute_package_hash(tmp_path) + assert hash1 == hash2 + + +# --------------------------------------------------------------------------- +# verify_package_hash +# --------------------------------------------------------------------------- + +class TestVerifyPackageHash: + def test_matching_hash(self, tmp_path): + """Verification passes when content matches.""" + (tmp_path / "a.txt").write_text("hello") + expected = compute_package_hash(tmp_path) + assert verify_package_hash(tmp_path, expected) is True + + def test_mismatched_hash(self, tmp_path): + """Verification fails when content changed.""" + (tmp_path / "a.txt").write_text("original") + expected = compute_package_hash(tmp_path) + (tmp_path / "a.txt").write_text("tampered") + assert verify_package_hash(tmp_path, expected) is False + + def test_missing_file_fails(self, tmp_path): + """Verification fails when file is deleted.""" + (tmp_path / "a.txt").write_text("data") + (tmp_path / "b.txt").write_text("more") + expected = compute_package_hash(tmp_path) + (tmp_path / "b.txt").unlink() + assert verify_package_hash(tmp_path, expected) is False + + def test_added_file_fails(self, tmp_path): + """Verification fails when an extra file is added.""" + (tmp_path / "a.txt").write_text("data") + expected = compute_package_hash(tmp_path) + (tmp_path / "extra.txt").write_text("injected") + assert verify_package_hash(tmp_path, expected) is False + + +# --------------------------------------------------------------------------- +# Lockfile integration +# --------------------------------------------------------------------------- + +class TestLockfileContentHash: + def test_content_hash_serialized(self): + """content_hash appears in lockfile YAML output.""" + from apm_cli.deps.lockfile import LockedDependency + dep = LockedDependency( + repo_url="owner/repo", + content_hash="sha256:abc123", + ) + d = dep.to_dict() + assert d["content_hash"] == "sha256:abc123" + + def test_content_hash_deserialized(self): + """content_hash is read back from lockfile.""" + from apm_cli.deps.lockfile import LockedDependency + dep = LockedDependency.from_dict({ + "repo_url": "owner/repo", + "content_hash": "sha256:abc123", + }) + assert dep.content_hash == "sha256:abc123" + + def test_missing_content_hash_backward_compat(self): + """Old lockfiles without content_hash parse fine (None).""" + from apm_cli.deps.lockfile import LockedDependency + dep = LockedDependency.from_dict({ + "repo_url": "owner/repo", + }) + assert dep.content_hash is None + + def test_content_hash_none_not_emitted(self): + """content_hash=None is not written to YAML.""" + from apm_cli.deps.lockfile import LockedDependency + dep = LockedDependency( + repo_url="owner/repo", + content_hash=None, + ) + d = dep.to_dict() + assert "content_hash" not in d + + def test_content_hash_roundtrip_yaml(self, tmp_path): + """content_hash survives a full write/read YAML cycle.""" + from apm_cli.deps.lockfile import LockFile, LockedDependency + lockfile = LockFile(apm_version="test") + dep = LockedDependency( + repo_url="owner/repo", + resolved_commit="abc123", + content_hash="sha256:deadbeef", + ) + lockfile.add_dependency(dep) + path = tmp_path / "apm.lock.yaml" + lockfile.save(path) + + loaded = LockFile.read(path) + assert loaded is not None + loaded_dep = loaded.get_dependency("owner/repo") + assert loaded_dep is not None + assert loaded_dep.content_hash == "sha256:deadbeef" From d5663b280e3a519d4c6fe1e0be4c53ed4945f064 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:25:56 +0100 Subject: [PATCH 07/18] feat: resolver devDependencies awareness and is_dev tracking - Add is_dev field to DependencyNode for dev/prod distinction - Resolver now loads root devDependencies into BFS queue with is_dev=True - Transitive deps of dev deps inherit is_dev from parent - Prod wins: if a dep appears in both dependencies and devDependencies, it is marked is_dev=False (prod takes precedence) - Add comprehensive tests for lockfile is_dev round-trip, resolver dev dep marking, prod-wins semantics, and install --dev flag behavior Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/deps/apm_resolver.py | 26 +- src/apm_cli/deps/dependency_graph.py | 1 + tests/unit/test_dev_dependencies.py | 448 +++++++++++++++++++++++++++ 3 files changed, 469 insertions(+), 6 deletions(-) create mode 100644 tests/unit/test_dev_dependencies.py diff --git a/src/apm_cli/deps/apm_resolver.py b/src/apm_cli/deps/apm_resolver.py index 717a4905..43f1f77b 100644 --- a/src/apm_cli/deps/apm_resolver.py +++ b/src/apm_cli/deps/apm_resolver.py @@ -127,8 +127,8 @@ def build_dependency_tree(self, root_apm_yml: Path) -> DependencyTree: # Initialize the tree tree = DependencyTree(root_package=root_package) - # Queue for breadth-first traversal: (dependency_ref, depth, parent_node) - processing_queue: deque[Tuple[DependencyReference, int, Optional[DependencyNode]]] = deque() + # Queue for breadth-first traversal: (dependency_ref, depth, parent_node, is_dev) + processing_queue: deque[Tuple[DependencyReference, int, Optional[DependencyNode], bool]] = deque() # Set to track queued unique keys for O(1) lookup instead of O(n) list comprehension queued_keys: Set[str] = set() @@ -136,12 +136,21 @@ def build_dependency_tree(self, root_apm_yml: Path) -> DependencyTree: # Add root dependencies to queue root_deps = root_package.get_apm_dependencies() for dep_ref in root_deps: - processing_queue.append((dep_ref, 1, None)) + processing_queue.append((dep_ref, 1, None, False)) queued_keys.add(dep_ref.get_unique_key()) + + # Add root devDependencies to queue (marked is_dev=True) + root_dev_deps = root_package.get_dev_apm_dependencies() + for dep_ref in root_dev_deps: + key = dep_ref.get_unique_key() + if key not in queued_keys: + processing_queue.append((dep_ref, 1, None, True)) + queued_keys.add(key) + # If already queued as prod, prod wins — skip # Process dependencies breadth-first while processing_queue: - dep_ref, depth, parent_node = processing_queue.popleft() + dep_ref, depth, parent_node, is_dev = processing_queue.popleft() # Remove from queued set since we're now processing this dependency queued_keys.discard(dep_ref.get_unique_key()) @@ -153,6 +162,9 @@ def build_dependency_tree(self, root_apm_yml: Path) -> DependencyTree: # Check if we already processed this dependency at this level or higher existing_node = tree.get_node(dep_ref.get_unique_key()) if existing_node and existing_node.depth <= depth: + # Prod wins over dev: if existing was dev and this is prod, promote it + if existing_node.is_dev and not is_dev: + existing_node.is_dev = False # We've already processed this dependency at a shallower or equal depth # Create parent-child relationship if parent exists if parent_node and existing_node not in parent_node.children: @@ -172,7 +184,8 @@ def build_dependency_tree(self, root_apm_yml: Path) -> DependencyTree: package=placeholder_package, dependency_ref=dep_ref, depth=depth, - parent=parent_node + parent=parent_node, + is_dev=is_dev, ) # Add to tree @@ -194,12 +207,13 @@ def build_dependency_tree(self, root_apm_yml: Path) -> DependencyTree: node.package = loaded_package # Get sub-dependencies and add them to the processing queue + # Transitive deps inherit is_dev from parent sub_dependencies = loaded_package.get_apm_dependencies() for sub_dep in sub_dependencies: # Avoid infinite recursion by checking if we're already processing this dep # Use O(1) set lookup instead of O(n) list comprehension if sub_dep.get_unique_key() not in queued_keys: - processing_queue.append((sub_dep, depth + 1, node)) + processing_queue.append((sub_dep, depth + 1, node, is_dev)) queued_keys.add(sub_dep.get_unique_key()) except (ValueError, FileNotFoundError) as e: # Could not load dependency package - this is expected for remote dependencies diff --git a/src/apm_cli/deps/dependency_graph.py b/src/apm_cli/deps/dependency_graph.py index 42ddb43d..1a59b016 100644 --- a/src/apm_cli/deps/dependency_graph.py +++ b/src/apm_cli/deps/dependency_graph.py @@ -15,6 +15,7 @@ class DependencyNode: depth: int = 0 children: List['DependencyNode'] = field(default_factory=list) parent: Optional['DependencyNode'] = None + is_dev: bool = False # True when reached exclusively through devDependencies def get_id(self) -> str: """Get unique identifier for this node.""" diff --git a/tests/unit/test_dev_dependencies.py b/tests/unit/test_dev_dependencies.py new file mode 100644 index 00000000..825e9b6d --- /dev/null +++ b/tests/unit/test_dev_dependencies.py @@ -0,0 +1,448 @@ +"""Tests for devDependencies support: --dev flag, resolver awareness, lockfile is_dev.""" + +import contextlib +import os +import tempfile +from pathlib import Path +from unittest.mock import MagicMock, Mock, patch + +import pytest +import yaml +from click.testing import CliRunner + +from apm_cli.deps.dependency_graph import DependencyNode +from apm_cli.deps.lockfile import LockedDependency, LockFile +from apm_cli.models.apm_package import APMPackage, DependencyReference +from apm_cli.models.results import InstallResult + + +# --------------------------------------------------------------------------- +# Part 3d: LockedDependency.is_dev field +# --------------------------------------------------------------------------- + + +class TestLockedDependencyIsDev: + """Tests for the is_dev field on LockedDependency.""" + + def test_is_dev_defaults_to_false(self): + dep = LockedDependency(repo_url="owner/repo") + assert dep.is_dev is False + + def test_is_dev_can_be_set_true(self): + dep = LockedDependency(repo_url="owner/repo", is_dev=True) + assert dep.is_dev is True + + def test_to_dict_omits_is_dev_when_false(self): + dep = LockedDependency(repo_url="owner/repo", is_dev=False) + result = dep.to_dict() + assert "is_dev" not in result + + def test_to_dict_includes_is_dev_when_true(self): + dep = LockedDependency(repo_url="owner/repo", is_dev=True) + result = dep.to_dict() + assert result["is_dev"] is True + + def test_from_dict_reads_is_dev_true(self): + data = {"repo_url": "owner/repo", "is_dev": True} + dep = LockedDependency.from_dict(data) + assert dep.is_dev is True + + def test_from_dict_defaults_missing_is_dev(self): + data = {"repo_url": "owner/repo"} + dep = LockedDependency.from_dict(data) + assert dep.is_dev is False + + def test_from_dependency_ref_passes_is_dev(self): + dep_ref = DependencyReference(repo_url="owner/repo", host="github.com") + locked = LockedDependency.from_dependency_ref( + dep_ref, "abc123", 1, None, is_dev=True + ) + assert locked.is_dev is True + + def test_from_dependency_ref_defaults_is_dev_false(self): + dep_ref = DependencyReference(repo_url="owner/repo", host="github.com") + locked = LockedDependency.from_dependency_ref(dep_ref, "abc123", 1, None) + assert locked.is_dev is False + + def test_is_dev_round_trip_yaml(self, tmp_path): + """is_dev survives a write/read YAML cycle.""" + lock = LockFile() + lock.add_dependency(LockedDependency(repo_url="prod/dep")) + lock.add_dependency(LockedDependency(repo_url="dev/dep", is_dev=True)) + lock_path = tmp_path / "apm.lock.yaml" + lock.write(lock_path) + + loaded = LockFile.read(lock_path) + assert loaded is not None + assert loaded.dependencies["prod/dep"].is_dev is False + assert loaded.dependencies["dev/dep"].is_dev is True + + def test_backward_compat_old_lockfile_no_is_dev(self): + """Old lockfiles without is_dev deserialize with is_dev=False.""" + yaml_str = ( + 'lockfile_version: "1"\n' + "dependencies:\n" + " - repo_url: legacy/dep\n" + " resolved_commit: abc123\n" + ) + lock = LockFile.from_yaml(yaml_str) + assert lock.dependencies["legacy/dep"].is_dev is False + + +class TestFromInstalledPackagesIsDev: + """Tests for LockFile.from_installed_packages with 5-element tuples.""" + + def _mock_dep_ref(self, repo_url): + ref = Mock() + ref.repo_url = repo_url + ref.host = None + ref.reference = "main" + ref.virtual_path = None + ref.is_virtual = False + ref.is_local = False + ref.local_path = None + return ref + + def test_5_element_tuple_with_is_dev_true(self): + dep_ref = self._mock_dep_ref("dev/pkg") + installed = [(dep_ref, "sha1", 1, None, True)] + lock = LockFile.from_installed_packages(installed, Mock()) + assert lock.dependencies["dev/pkg"].is_dev is True + + def test_5_element_tuple_with_is_dev_false(self): + dep_ref = self._mock_dep_ref("prod/pkg") + installed = [(dep_ref, "sha1", 1, None, False)] + lock = LockFile.from_installed_packages(installed, Mock()) + assert lock.dependencies["prod/pkg"].is_dev is False + + def test_4_element_tuple_backward_compat(self): + """Old callers passing 4-element tuples still work (is_dev defaults False).""" + dep_ref = self._mock_dep_ref("old/pkg") + installed = [(dep_ref, "sha1", 1, None)] + lock = LockFile.from_installed_packages(installed, Mock()) + assert lock.dependencies["old/pkg"].is_dev is False + + def test_mixed_prod_and_dev(self): + prod = self._mock_dep_ref("prod/pkg") + dev = self._mock_dep_ref("dev/pkg") + installed = [ + (prod, "sha1", 1, None, False), + (dev, "sha2", 1, None, True), + ] + lock = LockFile.from_installed_packages(installed, Mock()) + assert lock.dependencies["prod/pkg"].is_dev is False + assert lock.dependencies["dev/pkg"].is_dev is True + + +# --------------------------------------------------------------------------- +# Part 3c: Resolver devDependencies awareness +# --------------------------------------------------------------------------- + + +class TestDependencyNodeIsDev: + """Tests for DependencyNode.is_dev field.""" + + def test_is_dev_defaults_false(self): + pkg = APMPackage(name="test", version="1.0.0") + ref = DependencyReference(repo_url="owner/repo") + node = DependencyNode(package=pkg, dependency_ref=ref, depth=1) + assert node.is_dev is False + + def test_is_dev_can_be_set(self): + pkg = APMPackage(name="test", version="1.0.0") + ref = DependencyReference(repo_url="owner/repo") + node = DependencyNode(package=pkg, dependency_ref=ref, depth=1, is_dev=True) + assert node.is_dev is True + + +class TestResolverDevDeps: + """Tests for APMDependencyResolver handling devDependencies.""" + + def test_resolver_includes_dev_deps(self, tmp_path): + """Dev dependencies should appear in the resolved tree.""" + from apm_cli.deps.apm_resolver import APMDependencyResolver + + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test-project", + "version": "1.0.0", + "dependencies": {"apm": ["prod/pkg"]}, + "devDependencies": {"apm": ["dev/pkg"]}, + } + ) + ) + + resolver = APMDependencyResolver(apm_modules_dir=tmp_path / "apm_modules") + graph = resolver.resolve_dependencies(tmp_path) + + tree = graph.dependency_tree + # Both prod and dev deps should be in the tree + assert tree.has_dependency("prod/pkg") + assert tree.has_dependency("dev/pkg") + + def test_resolver_marks_dev_deps(self, tmp_path): + """Dev-only dependencies should have is_dev=True in the tree.""" + from apm_cli.deps.apm_resolver import APMDependencyResolver + + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test-project", + "version": "1.0.0", + "dependencies": {"apm": ["prod/pkg"]}, + "devDependencies": {"apm": ["dev/pkg"]}, + } + ) + ) + + resolver = APMDependencyResolver(apm_modules_dir=tmp_path / "apm_modules") + graph = resolver.resolve_dependencies(tmp_path) + + tree = graph.dependency_tree + prod_node = tree.get_node("prod/pkg") + dev_node = tree.get_node("dev/pkg") + assert prod_node is not None + assert dev_node is not None + assert prod_node.is_dev is False + assert dev_node.is_dev is True + + def test_resolver_prod_wins_over_dev(self, tmp_path): + """A dep in both dependencies and devDependencies should be is_dev=False.""" + from apm_cli.deps.apm_resolver import APMDependencyResolver + + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test-project", + "version": "1.0.0", + "dependencies": {"apm": ["shared/pkg"]}, + "devDependencies": {"apm": ["shared/pkg"]}, + } + ) + ) + + resolver = APMDependencyResolver(apm_modules_dir=tmp_path / "apm_modules") + graph = resolver.resolve_dependencies(tmp_path) + + tree = graph.dependency_tree + node = tree.get_node("shared/pkg") + assert node is not None + # Prod takes precedence + assert node.is_dev is False + + def test_resolver_only_dev_deps(self, tmp_path): + """When only devDependencies exist, they resolve correctly.""" + from apm_cli.deps.apm_resolver import APMDependencyResolver + + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test-project", + "version": "1.0.0", + "devDependencies": {"apm": ["dev/only"]}, + } + ) + ) + + resolver = APMDependencyResolver(apm_modules_dir=tmp_path / "apm_modules") + graph = resolver.resolve_dependencies(tmp_path) + tree = graph.dependency_tree + node = tree.get_node("dev/only") + assert node is not None + assert node.is_dev is True + + +# --------------------------------------------------------------------------- +# Part 3b: apm install --dev flag +# --------------------------------------------------------------------------- + + +class TestInstallDevFlag: + """Tests for the --dev flag on apm install.""" + + def setup_method(self): + self.runner = CliRunner() + try: + self.original_dir = os.getcwd() + except FileNotFoundError: + self.original_dir = str(Path(__file__).parent.parent.parent) + os.chdir(self.original_dir) + + def teardown_method(self): + try: + os.chdir(self.original_dir) + except (FileNotFoundError, OSError): + repo_root = Path(__file__).parent.parent.parent + os.chdir(str(repo_root)) + + @contextlib.contextmanager + def _chdir_tmp(self): + with tempfile.TemporaryDirectory() as tmp_dir: + try: + os.chdir(tmp_dir) + yield Path(tmp_dir) + finally: + os.chdir(self.original_dir) + + @patch("apm_cli.commands.install._validate_package_exists") + @patch("apm_cli.commands.install.APM_DEPS_AVAILABLE", True) + @patch("apm_cli.commands.install.APMPackage") + @patch("apm_cli.commands.install._install_apm_dependencies") + def test_dev_flag_writes_to_dev_dependencies( + self, mock_install_apm, mock_apm_package, mock_validate + ): + """--dev should add packages to devDependencies.apm.""" + from apm_cli.cli import cli + + with self._chdir_tmp(): + # Create minimal apm.yml + apm_yml = { + "name": "test-project", + "version": "1.0.0", + "dependencies": {"apm": [], "mcp": []}, + } + with open("apm.yml", "w") as f: + yaml.dump(apm_yml, f) + + mock_validate.return_value = True + + mock_pkg = MagicMock() + mock_pkg.get_apm_dependencies.return_value = [] + mock_pkg.get_dev_apm_dependencies.return_value = [ + MagicMock(repo_url="test/dev-pkg", reference="main") + ] + mock_pkg.get_mcp_dependencies.return_value = [] + mock_pkg.target = None + mock_apm_package.from_apm_yml.return_value = mock_pkg + + mock_install_apm.return_value = InstallResult( + diagnostics=MagicMock(has_diagnostics=False, has_critical_security=False) + ) + + result = self.runner.invoke(cli, ["install", "--dev", "test/dev-pkg"]) + assert result.exit_code == 0 + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert "devDependencies" in config + assert "test/dev-pkg" in config["devDependencies"]["apm"] + # Prod dependencies should be untouched + assert config["dependencies"]["apm"] == [] + + @patch("apm_cli.commands.install._validate_package_exists") + @patch("apm_cli.commands.install.APM_DEPS_AVAILABLE", True) + @patch("apm_cli.commands.install.APMPackage") + @patch("apm_cli.commands.install._install_apm_dependencies") + def test_no_dev_flag_writes_to_dependencies( + self, mock_install_apm, mock_apm_package, mock_validate + ): + """Without --dev, packages go to dependencies.apm.""" + from apm_cli.cli import cli + + with self._chdir_tmp(): + apm_yml = { + "name": "test-project", + "version": "1.0.0", + "dependencies": {"apm": [], "mcp": []}, + } + with open("apm.yml", "w") as f: + yaml.dump(apm_yml, f) + + mock_validate.return_value = True + + mock_pkg = MagicMock() + mock_pkg.get_apm_dependencies.return_value = [ + MagicMock(repo_url="test/prod-pkg", reference="main") + ] + mock_pkg.get_dev_apm_dependencies.return_value = [] + mock_pkg.get_mcp_dependencies.return_value = [] + mock_pkg.target = None + mock_apm_package.from_apm_yml.return_value = mock_pkg + + mock_install_apm.return_value = InstallResult( + diagnostics=MagicMock(has_diagnostics=False, has_critical_security=False) + ) + + result = self.runner.invoke(cli, ["install", "test/prod-pkg"]) + assert result.exit_code == 0 + + with open("apm.yml") as f: + config = yaml.safe_load(f) + assert "test/prod-pkg" in config["dependencies"]["apm"] + assert "devDependencies" not in config + + +class TestValidateAndAddDevDeps: + """Tests for _validate_and_add_packages_to_apm_yml with dev=True.""" + + def setup_method(self): + try: + self.original_dir = os.getcwd() + except FileNotFoundError: + self.original_dir = str(Path(__file__).parent.parent.parent) + os.chdir(self.original_dir) + + def teardown_method(self): + try: + os.chdir(self.original_dir) + except (FileNotFoundError, OSError): + repo_root = Path(__file__).parent.parent.parent + os.chdir(str(repo_root)) + + @patch("apm_cli.commands.install._validate_package_exists") + def test_dev_creates_dev_dependencies_section(self, mock_validate, tmp_path): + """dev=True creates devDependencies.apm if missing.""" + from apm_cli.commands.install import _validate_and_add_packages_to_apm_yml + + os.chdir(tmp_path) + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test", + "version": "1.0.0", + "dependencies": {"apm": [], "mcp": []}, + } + ) + ) + + mock_validate.return_value = True + result = _validate_and_add_packages_to_apm_yml(["org/dev-pkg"], dev=True) + assert "org/dev-pkg" in result + + with open(apm_yml) as f: + data = yaml.safe_load(f) + assert "devDependencies" in data + assert "org/dev-pkg" in data["devDependencies"]["apm"] + # Prod deps untouched + assert data["dependencies"]["apm"] == [] + + @patch("apm_cli.commands.install._validate_package_exists") + def test_dev_false_writes_to_dependencies(self, mock_validate, tmp_path): + """dev=False (default) writes to dependencies.apm.""" + from apm_cli.commands.install import _validate_and_add_packages_to_apm_yml + + os.chdir(tmp_path) + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump( + { + "name": "test", + "version": "1.0.0", + "dependencies": {"apm": [], "mcp": []}, + } + ) + ) + + mock_validate.return_value = True + _validate_and_add_packages_to_apm_yml(["org/prod-pkg"], dev=False) + + with open(apm_yml) as f: + data = yaml.safe_load(f) + assert "org/prod-pkg" in data["dependencies"]["apm"] + assert "devDependencies" not in data From 50bab522084e59a50043cd3c3bb39eebd3a1af22 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:37:36 +0100 Subject: [PATCH 08/18] fix: eliminate TOCTOU in content hash verification Capture SHA-256 hashes at download/verify time (3 append points) and use the cached dict when enriching the lockfile, instead of re-computing later. Prevents an attacker with filesystem access from modifying package content between verification and lockfile write. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/commands/install.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index 6757f644..d082d76e 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -1111,9 +1111,11 @@ def _collect_descendants(node, visited=None): # Collect installed packages for lockfile generation from apm_cli.deps.lockfile import LockFile, LockedDependency, get_lockfile_path + from ..utils.content_hash import compute_package_hash as _compute_hash installed_packages: List[tuple] = [] # List of (dep_ref, resolved_commit, depth, resolved_by, is_dev) package_deployed_files: builtins.dict = {} # dep_key → list of relative deployed paths package_types: builtins.dict = {} # dep_key → package type string + _package_hashes: builtins.dict = {} # dep_key → sha256 hash (captured at download/verify time) # Build managed_files from existing lockfile for collision detection managed_files = builtins.set() @@ -1316,6 +1318,8 @@ def _collect_descendants(node, visited=None): _is_dev = node.is_dev if node else False installed_packages.append((dep_ref, None, depth, resolved_by, _is_dev)) dep_key = dep_ref.get_unique_key() + if install_path.is_dir(): + _package_hashes[dep_key] = _compute_hash(install_path) dep_deployed_files: builtins.list = [] if hasattr(local_info, 'package_type') and local_info.package_type: @@ -1524,7 +1528,8 @@ def _collect_descendants(node, visited=None): if not cached_commit: cached_commit = dep_ref.reference installed_packages.append((dep_ref, cached_commit, depth, resolved_by, _is_dev)) - + if install_path.is_dir(): + _package_hashes[dep_key] = _compute_hash(install_path) # Track package type for lockfile if hasattr(cached_package_info, 'package_type') and cached_package_info.package_type: package_types[dep_key] = cached_package_info.package_type.value @@ -1632,6 +1637,8 @@ def _collect_descendants(node, visited=None): resolved_by = node.parent.dependency_ref.repo_url if node and node.parent else None _is_dev = node.is_dev if node else False installed_packages.append((dep_ref, resolved_commit, depth, resolved_by, _is_dev)) + if install_path.is_dir(): + _package_hashes[dep_ref.get_unique_key()] = _compute_hash(install_path) # Track package type for lockfile if hasattr(package_info, 'package_type') and package_info.package_type: @@ -1768,12 +1775,10 @@ def _collect_descendants(node, visited=None): for dep_key, pkg_type in package_types.items(): if dep_key in lockfile.dependencies: lockfile.dependencies[dep_key].package_type = pkg_type - # Compute content hashes for integrity verification - from ..utils.content_hash import compute_package_hash as _compute_hash + # Attach content hashes captured at download/verify time for dep_key, locked_dep in lockfile.dependencies.items(): - _hash_path = _dep_install_path(locked_dep, apm_modules_dir) - if _hash_path and _hash_path.is_dir(): - locked_dep.content_hash = _compute_hash(_hash_path) + if dep_key in _package_hashes: + locked_dep.content_hash = _package_hashes[dep_key] # Selectively merge entries from the existing lockfile: # - For partial installs (only_packages): preserve all old entries # (sequential install — only the specified package was processed). From fdc6aa0f2b460f010d57a35cd541aec525f1f464 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:37:59 +0100 Subject: [PATCH 09/18] docs: update changelog with install --dev and content hashing entries Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 328eb269..c92949f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,9 +13,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `apm pack --format plugin` — export APM packages as standalone plugin directories consumable by Copilot CLI, Claude Code, and other plugin hosts. Transforms `.apm/` layout to plugin-native directories (agents, skills, commands, instructions, contexts) with hooks/MCP merging, collision handling, and security scanning (#378) - `apm init --plugin` — initialize a plugin authoring project with both `plugin.json` and `apm.yml` (includes `devDependencies` section). Validates kebab-case plugin names per plugin spec (#378) - `devDependencies` support in `apm.yml` and `APMPackage` model — same syntax as `dependencies`, parsed with `get_dev_apm_dependencies()`/`get_dev_mcp_dependencies()` accessors. Dev deps are excluded from plugin bundles (#378) +- `apm install --dev` — install packages as development dependencies, writing to `devDependencies` instead of `dependencies` (#378) - `apm pack --force` flag — on collision, last writer wins instead of first (#378) - `synthesize_plugin_json_from_apm_yml()` — generates `plugin.json` from `apm.yml` identity fields when no plugin manifest exists (#378) +### Security + +- Content integrity hashing — SHA-256 checksums of package file trees are stored in `apm.lock.yaml` (`content_hash` field) and verified on subsequent installs. Detects tampering, MITM modifications, or force-pushed commits (#315, #378) +- Lockfile `is_dev` tracking — dev dependencies are explicitly marked in the lockfile for auditability (#378) + ### Fixed - CLI docs now document the `apm compile --target opencode` option, align `apm audit --dry-run` wording with actual behavior, and mark planned `apm audit --drift` examples as not yet available (#366) From 79d81518f562e7691a20f4f775a94da4c0624ad9 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:42:09 +0100 Subject: [PATCH 10/18] docs: document install --dev flag and content integrity hashing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - cli-commands: promote --dev from planned to implemented, add example - manifest-schema: update devDependencies and lockfile structure sections - lockfile-spec: add content_hash and is_dev fields, new §4.4 Content Integrity - pack-distribute: update devDependencies exclusion with --dev example - security: promote content integrity from planned to implemented Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/src/content/docs/enterprise/security.md | 21 ++++++++++++++-- .../content/docs/guides/pack-distribute.md | 8 ++++++- .../content/docs/reference/cli-commands.md | 8 +++---- .../content/docs/reference/lockfile-spec.md | 24 +++++++++++++++++++ .../content/docs/reference/manifest-schema.md | 10 ++++---- 5 files changed, 60 insertions(+), 11 deletions(-) diff --git a/docs/src/content/docs/enterprise/security.md b/docs/src/content/docs/enterprise/security.md index ba5ea0f1..c63278cd 100644 --- a/docs/src/content/docs/enterprise/security.md +++ b/docs/src/content/docs/enterprise/security.md @@ -139,9 +139,26 @@ Content scanning detects hidden Unicode characters. It does not detect: ### Planned hardening -- **Content integrity hashing** — SHA-256 checksums stored in `apm.lock.yaml` to verify downloaded content hasn't been tampered with. - **Hook transparency** — display hook script contents during install so developers can review what will execute. +## Content integrity hashing + +APM computes a SHA-256 hash of each downloaded package's file tree and stores it in `apm.lock.yaml` as `content_hash`. On subsequent installs, cached packages are verified against the lockfile hash. A mismatch triggers a warning and re-download. + +```yaml +# apm.lock.yaml +dependencies: + - repo_url: https://github.com/acme-corp/security-baseline + resolved_commit: a1b2c3d4e5f6... + content_hash: "sha256:9f86d081884c7d659a2feaa0c55ad015..." +``` + +The hash is deterministic — computed over sorted file paths and contents, independent of filesystem metadata (timestamps, permissions). `.git/` and `__pycache__/` directories are excluded. + +Lock files generated before this feature omit `content_hash`. APM handles this gracefully — verification is skipped and the hash is populated on the next install. + +See the [Lock File Specification](../../reference/lockfile-spec/#44-content-integrity) for field details. + ## Path security APM deploys files only to controlled subdirectories within the project root. @@ -211,7 +228,7 @@ For GitHub, a fine-grained PAT with read-only `Contents` permission on the repos | Vector | Traditional package manager | APM | |---|---|---| | Registry compromise | Attacker poisons central registry | No registry exists | -| Version substitution | Malicious version replaces legitimate one | Lock file pins exact commit SHA | +| Version substitution | Malicious version replaces legitimate one | Lock file pins exact commit SHA; content hash detects post-download tampering | | Post-install scripts | Arbitrary code runs after install | No code execution | | Typosquatting | Similar package names on registry | Dependencies are full git URLs | | Build-time injection | Malicious build steps execute | No build step — files are copied | diff --git a/docs/src/content/docs/guides/pack-distribute.md b/docs/src/content/docs/guides/pack-distribute.md index e95fbb2c..987b80e5 100644 --- a/docs/src/content/docs/guides/pack-distribute.md +++ b/docs/src/content/docs/guides/pack-distribute.md @@ -180,7 +180,13 @@ The bundle includes a `plugin.json`. If one already exists in the project (at th ### devDependencies exclusion -Dependencies listed under [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) in `apm.yml` are excluded from the plugin bundle. This keeps development-only packages out of distributed plugins. +Dependencies listed under [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) in `apm.yml` are excluded from the plugin bundle. Use [`apm install --dev`](../../reference/cli-commands/#apm-install---install-apm-and-mcp-dependencies) to add dev deps: + +```bash +apm install --dev owner/test-helpers +``` + +This keeps development-only packages (test helpers, lint rules) out of distributed plugins. ### Example output diff --git a/docs/src/content/docs/reference/cli-commands.md b/docs/src/content/docs/reference/cli-commands.md index 68186d07..74f81baa 100644 --- a/docs/src/content/docs/reference/cli-commands.md +++ b/docs/src/content/docs/reference/cli-commands.md @@ -93,10 +93,7 @@ apm install [PACKAGES...] [OPTIONS] - `--parallel-downloads INTEGER` - Max concurrent package downloads (default: 4, 0 to disable) - `--verbose` - Show individual file paths and full error details in the diagnostic summary - `--trust-transitive-mcp` - Trust self-defined MCP servers from transitive packages (skip re-declaration requirement) - -:::note[Planned] -`--dev` — Add packages to `devDependencies` instead of `dependencies`. Development dependencies are installed locally but excluded from `apm pack --format plugin` bundles. -::: +- `--dev` - Add packages to [`devDependencies`](../manifest-schema/#5-devdependencies) instead of `dependencies`. Dev deps are installed locally but excluded from `apm pack --format plugin` bundles **Behavior:** - `apm install` (no args): Installs **all** packages from `apm.yml` @@ -147,6 +144,9 @@ apm install --exclude codex # Trust self-defined MCP servers from transitive packages apm install --trust-transitive-mcp +# Install as a dev dependency (excluded from plugin bundles) +apm install --dev owner/test-helpers + # Install from a local path (copies to apm_modules/_local/) apm install ./packages/my-shared-skills apm install /home/user/repos/my-ai-package diff --git a/docs/src/content/docs/reference/lockfile-spec.md b/docs/src/content/docs/reference/lockfile-spec.md index 987cf76b..be359faa 100644 --- a/docs/src/content/docs/reference/lockfile-spec.md +++ b/docs/src/content/docs/reference/lockfile-spec.md @@ -121,6 +121,8 @@ fields: | `depth` | integer | MUST | Dependency depth. `1` = direct dependency, `2`+ = transitive. | | `resolved_by` | string | MAY | `repo_url` of the parent that introduced this transitive dependency. Present only when `depth >= 2`. | | `package_type` | string | MUST | Package type: `apm_package`, `plugin`, `virtual`, or other registered types. | +| `content_hash` | string | MAY | SHA-256 hash of the package file tree, in the format `"sha256:"`. Used to verify cached packages on subsequent installs. Omitted for local path dependencies. See [section 4.4](#44-content-integrity). | +| `is_dev` | boolean | MAY | `true` if the dependency was resolved through [`devDependencies`](../manifest-schema/#5-devdependencies). Omitted when `false`. Dev deps are excluded from `apm pack --format plugin` bundles. | | `deployed_files` | array of strings | MUST | Every file path APM deployed for this dependency, relative to project root. | | `source` | string | MAY | Dependency source. `"local"` for local path dependencies. Omitted for remote (git) dependencies. | | `local_path` | string | MAY | Filesystem path (relative or absolute) to the local package. Present only when `source` is `"local"`. | @@ -136,6 +138,26 @@ For local path dependencies (`source: "local"`), the unique key is the `local_path` value. A conforming lock file MUST NOT contain duplicate entries for the same key. +### 4.4 Content Integrity + +APM computes a SHA-256 hash of each package's file tree after download and stores +it as `content_hash` in the lock file. On subsequent installs, cached packages are +verified against this hash. A mismatch triggers a warning and re-download. + +The hash covers all regular files sorted by POSIX path (deterministic regardless of +filesystem ordering). `.git/` and `__pycache__/` directories are excluded. + +```yaml +dependencies: + - repo_url: https://github.com/acme-corp/security-baseline + resolved_commit: a1b2c3d4e5f6789012345678901234567890abcd + content_hash: "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + # ... +``` + +Lock files generated before this feature omit `content_hash`. APM handles this +gracefully — verification is skipped and the hash is populated on the next install. + ## 5. Path Conventions All paths in `deployed_files` MUST use forward slashes (POSIX format), @@ -247,6 +269,7 @@ dependencies: version: "2.1.0" depth: 1 package_type: apm_package + content_hash: "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" deployed_files: - .github/instructions/security.instructions.md - .github/agents/security-auditor.agent.md @@ -258,6 +281,7 @@ dependencies: depth: 2 resolved_by: https://github.com/acme-corp/security-baseline package_type: apm_package + content_hash: "sha256:d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592" deployed_files: - .github/instructions/common-guidelines.instructions.md diff --git a/docs/src/content/docs/reference/manifest-schema.md b/docs/src/content/docs/reference/manifest-schema.md index e9ff5726..5a46c6ce 100644 --- a/docs/src/content/docs/reference/manifest-schema.md +++ b/docs/src/content/docs/reference/manifest-schema.md @@ -339,11 +339,11 @@ devDependencies: - owner/lint-rules#v2.0.0 ``` -Created automatically by `apm init --plugin`. +Created automatically by `apm init --plugin`. Use [`apm install --dev`](../cli-commands/#apm-install---install-apm-and-mcp-dependencies) to add packages: -:::note[Planned] -`apm install --dev ` will add packages directly to `devDependencies`. Until then, add entries manually to `apm.yml`. -::: +```bash +apm install --dev owner/test-helpers +``` --- @@ -404,6 +404,8 @@ dependencies: # YAML list (not a map) depth: # 1 = direct, 2+ = transitive resolved_by: # Parent dependency (transitive only) package_type: # Package type (e.g. "apm_package", "marketplace_plugin") + content_hash: # SHA-256 of package file tree (e.g. "sha256:a1b2c3...") + is_dev: # True for devDependencies deployed_files: > # Workspace-relative paths of installed files mcp_servers: > # MCP dependency references managed by APM (OPTIONAL, e.g. "io.github.github/github-mcp-server") ``` From 90f6a48143c2c11fae7f25e74fb36c0137c174b8 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:47:59 +0100 Subject: [PATCH 11/18] fix: remove nonexistent context/memory primitives from plugin export .apm/context/ and .apm/memory/ are APM-internal conventions, not plugin primitives. Remove their mapping to contexts/ in plugin export output, the corresponding tests, and documentation references. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../content/docs/guides/pack-distribute.md | 2 -- src/apm_cli/bundle/plugin_exporter.py | 9 +----- tests/unit/test_plugin_exporter.py | 32 ------------------- 3 files changed, 1 insertion(+), 42 deletions(-) diff --git a/docs/src/content/docs/guides/pack-distribute.md b/docs/src/content/docs/guides/pack-distribute.md index 987b80e5..aba4c0f1 100644 --- a/docs/src/content/docs/guides/pack-distribute.md +++ b/docs/src/content/docs/guides/pack-distribute.md @@ -167,8 +167,6 @@ The exporter remaps `.apm/` content into plugin-native paths: | `.apm/prompts/*.prompt.md` | `commands/*.md` | | `.apm/prompts/*.md` | `commands/*.md` | | `.apm/instructions/*.instructions.md` | `instructions/*.instructions.md` | -| `.apm/context/*.context.md` | `contexts/*.context.md` | -| `.apm/memory/*.memory.md` | `contexts/*.memory.md` | | `.apm/hooks/*.json` | `hooks.json` (merged) | | `.apm/commands/*.md` | `commands/*.md` | diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 31d420a7..3334571d 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -71,12 +71,6 @@ def _collect_apm_components(apm_dir: Path) -> List[Tuple[Path, str]]: # instructions/ -> instructions/ _collect_recursive(apm_dir / "instructions", "instructions", components) - # context/ -> contexts/ (pluralised) - _collect_recursive(apm_dir / "context", "contexts", components) - - # memory/ -> contexts/ (merged into contexts) - _collect_recursive(apm_dir / "memory", "contexts", components) - # commands/ -> commands/ _collect_recursive(apm_dir / "commands", "commands", components) @@ -90,7 +84,7 @@ def _collect_root_plugin_components(project_root: Path) -> List[Tuple[Path, str] ``skills/``, etc. at the repo root) have their files picked up here. """ components: List[Tuple[Path, str]] = [] - for dir_name in ("agents", "skills", "commands", "instructions", "contexts"): + for dir_name in ("agents", "skills", "commands", "instructions"): _collect_recursive(project_root / dir_name, dir_name, components) return components @@ -309,7 +303,6 @@ def _update_plugin_json_paths(plugin_json: dict, output_files: List[str]) -> dic "skills": "skills", "commands": "commands", "instructions": "instructions", - "contexts": "contexts", } for key, dirname in component_dirs.items(): if dirname in top_dirs: diff --git a/tests/unit/test_plugin_exporter.py b/tests/unit/test_plugin_exporter.py index eb2a8b3e..fcdb3a6c 100644 --- a/tests/unit/test_plugin_exporter.py +++ b/tests/unit/test_plugin_exporter.py @@ -67,8 +67,6 @@ def _make_apm_dir( skills: dict[str, list[str]] | None = None, prompts: list[str] | None = None, instructions: list[str] | None = None, - contexts: list[str] | None = None, - memory: list[str] | None = None, commands: list[str] | None = None, ) -> Path: """Create a .apm/ directory tree under *base* with given component files.""" @@ -93,10 +91,6 @@ def _write_files(subdir, names): _write_files("prompts", prompts) if instructions: _write_files("instructions", instructions) - if contexts: - _write_files("context", contexts) - if memory: - _write_files("memory", memory) if commands: _write_files("commands", commands) return apm @@ -110,8 +104,6 @@ def _setup_plugin_project( skills: dict[str, list[str]] | None = None, prompts: list[str] | None = None, instructions: list[str] | None = None, - contexts: list[str] | None = None, - memory: list[str] | None = None, commands: list[str] | None = None, apm_yml_extra: dict | None = None, plugin_json: dict | None = None, @@ -126,8 +118,6 @@ def _setup_plugin_project( skills=skills, prompts=prompts, instructions=instructions, - contexts=contexts, - memory=memory, commands=commands, ) if plugin_json is not None: @@ -235,16 +225,6 @@ def test_prompts_rename(self, tmp_path): assert "commands/task.md" in rels assert "commands/plain.md" in rels - def test_context_pluralised(self, tmp_path): - _make_apm_dir(tmp_path, contexts=["repo.context.md"]) - comps = _collect_apm_components(tmp_path / ".apm") - assert any(r == "contexts/repo.context.md" for _, r in comps) - - def test_memory_merged_into_contexts(self, tmp_path): - _make_apm_dir(tmp_path, memory=["notes.memory.md"]) - comps = _collect_apm_components(tmp_path / ".apm") - assert any(r == "contexts/notes.memory.md" for _, r in comps) - def test_instructions(self, tmp_path): _make_apm_dir(tmp_path, instructions=["rules.instructions.md"]) comps = _collect_apm_components(tmp_path / ".apm") @@ -505,18 +485,6 @@ def test_prompt_md_rename(self, tmp_path): # The .prompt.md variant should NOT exist assert not (result.bundle_path / "commands" / "do-thing.prompt.md").exists() - def test_context_pluralised(self, tmp_path): - project = _setup_plugin_project(tmp_path, contexts=["repo.context.md"]) - out = tmp_path / "build" - result = export_plugin_bundle(project, out) - assert (result.bundle_path / "contexts" / "repo.context.md").exists() - - def test_memory_merged_into_contexts(self, tmp_path): - project = _setup_plugin_project(tmp_path, memory=["notes.memory.md"]) - out = tmp_path / "build" - result = export_plugin_bundle(project, out) - assert (result.bundle_path / "contexts" / "notes.memory.md").exists() - def test_skills_structure_preserved(self, tmp_path): project = _setup_plugin_project( tmp_path, From cda3978c7d85b7a53bb00c9e5e277764a6dcd2b7 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 01:57:01 +0100 Subject: [PATCH 12/18] =?UTF-8?q?fix:=20address=20PR=20review=20=E2=80=94?= =?UTF-8?q?=20path=20traversal,=20symlink=20guard,=20error=20messaging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sanitize pkg_name/pkg_version in bundle_dir to prevent path traversal - Clean-slate bundle_dir creation + resolve-check on each dest path - Distinguish invalid plugin.json from missing plugin.json in warnings - Remove deprecated 'apm compile' from init --plugin next steps Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/bundle/plugin_exporter.py | 45 ++++++++++++++++++++++----- src/apm_cli/commands/init.py | 1 - 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 3334571d..1fd76c6a 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -14,6 +14,8 @@ import yaml +import re + from ..deps.lockfile import ( LockFile, LockedDependency, @@ -35,6 +37,21 @@ def _validate_output_rel(rel: str) -> bool: return not p.is_absolute() and ".." not in p.parts +_SAFE_BUNDLE_NAME_RE = re.compile(r"[^a-zA-Z0-9._-]") + + +def _sanitize_bundle_name(name: str) -> str: + """Sanitize a package name/version for use as a directory component. + + Replaces path separators and traversal characters with hyphens, then + validates the result is a single safe path component. + """ + sanitized = _SAFE_BUNDLE_NAME_RE.sub("-", name).strip("-") or "unnamed" + if ".." in sanitized or "/" in sanitized or "\\" in sanitized: + sanitized = "unnamed" + return sanitized + + def _rename_prompt(name: str) -> str: """Strip the ``.prompt`` infix so ``foo.prompt.md`` becomes ``foo.md``.""" if name.endswith(".prompt.md"): @@ -276,13 +293,17 @@ def _find_or_synthesize_plugin_json( if plugin_json_path is not None: try: return json.loads(plugin_json_path.read_text(encoding="utf-8")) - except (json.JSONDecodeError, OSError): - pass + except (json.JSONDecodeError, OSError) as exc: + _rich_warning( + f"Found plugin.json at {plugin_json_path} but could not parse it: {exc}. " + "Falling back to synthesis from apm.yml." + ) - _rich_warning( - "No plugin.json found. Synthesizing from apm.yml. " - "Consider running 'apm init --plugin'." - ) + else: + _rich_warning( + "No plugin.json found. Synthesizing from apm.yml. " + "Consider running 'apm init --plugin'." + ) return synthesize_plugin_json_from_apm_yml(apm_yml_path) @@ -459,7 +480,9 @@ def export_plugin_bundle( output_files.append("plugin.json") # 9. Dry run -- return file list without writing - bundle_dir = output_dir / f"{pkg_name}-{pkg_version}" + safe_name = _sanitize_bundle_name(pkg_name) + safe_version = _sanitize_bundle_name(pkg_version) + bundle_dir = output_dir / f"{safe_name}-{safe_version}" if dry_run: return PackResult(bundle_path=bundle_dir, files=output_files) @@ -486,16 +509,22 @@ def export_plugin_bundle( f"source files — run 'apm audit' to inspect before publishing" ) - # 11. Write files to output directory + # 11. Write files to output directory (clean slate to prevent symlink attacks) + if bundle_dir.exists(): + shutil.rmtree(bundle_dir) bundle_dir.mkdir(parents=True, exist_ok=True) + bundle_dir_resolved = bundle_dir.resolve() for output_rel, (source_abs, _owner) in file_map.items(): if not _validate_output_rel(output_rel): continue dest = bundle_dir / output_rel if source_abs.is_symlink(): continue + # Verify resolved destination stays within bundle directory dest.parent.mkdir(parents=True, exist_ok=True) + if not dest.resolve().is_relative_to(bundle_dir_resolved): + continue shutil.copy2(source_abs, dest, follow_symlinks=False) # 12. Write merged hooks.json diff --git a/src/apm_cli/commands/init.py b/src/apm_cli/commands/init.py index 74bee697..e0394f76 100644 --- a/src/apm_cli/commands/init.py +++ b/src/apm_cli/commands/init.py @@ -137,7 +137,6 @@ def init(ctx, project_name, yes, plugin): if plugin: next_steps = [ "Add dev dependencies: apm install --dev /", - "Compile agent context: apm compile", "Pack as plugin: apm pack --format plugin", ] else: From 1ae08edb5d6df88317cf07ed968d72a5119d36e5 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 02:01:56 +0100 Subject: [PATCH 13/18] refactor: use path_security utils instead of ad-hoc traversal checks Replace inline is_relative_to checks and raw shutil.rmtree with ensure_path_within, safe_rmtree, and PathTraversalError from the existing path_security module. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/bundle/plugin_exporter.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 1fd76c6a..4a5b0892 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -24,6 +24,7 @@ ) from ..models.apm_package import APMPackage, DependencyReference from ..utils.console import _rich_info, _rich_warning +from ..utils.path_security import PathTraversalError, ensure_path_within, safe_rmtree from .packer import PackResult # --------------------------------------------------------------------------- @@ -483,6 +484,7 @@ def export_plugin_bundle( safe_name = _sanitize_bundle_name(pkg_name) safe_version = _sanitize_bundle_name(pkg_version) bundle_dir = output_dir / f"{safe_name}-{safe_version}" + ensure_path_within(bundle_dir, output_dir) if dry_run: return PackResult(bundle_path=bundle_dir, files=output_files) @@ -511,19 +513,19 @@ def export_plugin_bundle( # 11. Write files to output directory (clean slate to prevent symlink attacks) if bundle_dir.exists(): - shutil.rmtree(bundle_dir) + safe_rmtree(bundle_dir, output_dir) bundle_dir.mkdir(parents=True, exist_ok=True) - bundle_dir_resolved = bundle_dir.resolve() for output_rel, (source_abs, _owner) in file_map.items(): if not _validate_output_rel(output_rel): continue dest = bundle_dir / output_rel if source_abs.is_symlink(): continue - # Verify resolved destination stays within bundle directory dest.parent.mkdir(parents=True, exist_ok=True) - if not dest.resolve().is_relative_to(bundle_dir_resolved): + try: + ensure_path_within(dest, bundle_dir) + except PathTraversalError: continue shutil.copy2(source_abs, dest, follow_symlinks=False) From a980c9fe040a3f80c52966f468543426bd87c5ce Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 02:12:04 +0100 Subject: [PATCH 14/18] =?UTF-8?q?fix:=20address=20round-2=20PR=20review=20?= =?UTF-8?q?=E2=80=94=20dead=20code,=20local=20hash=20skip,=20dev=20filteri?= =?UTF-8?q?ng?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use sanitized bundle_dir.name for archive path + ensure_path_within - Remove dead _dep_install_path() from install.py - Skip content hash computation for local path dependencies - Remove unused 'import shutil as _shutil_hash' - Remove duplicate TestInitPluginFlag class (covered by test_init_plugin.py) - Use lockfile is_dev flag for dev dep filtering in plugin exporter, with apm.yml URL fallback for older lockfiles Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/bundle/plugin_exporter.py | 7 +- src/apm_cli/commands/install.py | 19 +-- tests/unit/test_init_command.py | 221 -------------------------- 3 files changed, 6 insertions(+), 241 deletions(-) diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 4a5b0892..52219994 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -420,7 +420,9 @@ def export_plugin_bundle( if lockfile: for dep in lockfile.get_all_dependencies(): - if dep.repo_url in dev_dep_urls: + # Prefer lockfile is_dev flag (covers transitive deps); + # fall back to apm.yml URL matching for older lockfiles + if getattr(dep, "is_dev", False) or dep.repo_url in dev_dep_urls: continue install_path = _dep_install_path(dep, apm_modules_dir) @@ -552,7 +554,8 @@ def export_plugin_bundle( # 15. Archive if requested if archive: - archive_path = output_dir / f"{pkg_name}-{pkg_version}.tar.gz" + archive_path = output_dir / f"{bundle_dir.name}.tar.gz" + ensure_path_within(archive_path, output_dir) with tarfile.open(archive_path, "w:gz") as tar: def _tar_filter(info: tarfile.TarInfo) -> Optional[tarfile.TarInfo]: diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index d082d76e..2aa47895 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -810,22 +810,6 @@ def _integrate_package_primitives( return result -def _dep_install_path(locked_dep, apm_modules_dir): - """Derive the install path for a LockedDependency under apm_modules/.""" - try: - from ..models.apm_package import DependencyReference - dep_ref = DependencyReference( - repo_url=locked_dep.repo_url, - host=locked_dep.host, - virtual_path=locked_dep.virtual_path, - is_virtual=locked_dep.is_virtual, - is_local=(locked_dep.source == "local"), - local_path=locked_dep.local_path, - ) - return dep_ref.get_install_path(apm_modules_dir) - except Exception: - return None - def _copy_local_package(dep_ref, install_path, project_root): """Copy a local package to apm_modules/. @@ -1318,7 +1302,7 @@ def _collect_descendants(node, visited=None): _is_dev = node.is_dev if node else False installed_packages.append((dep_ref, None, depth, resolved_by, _is_dev)) dep_key = dep_ref.get_unique_key() - if install_path.is_dir(): + if install_path.is_dir() and not dep_ref.is_local: _package_hashes[dep_key] = _compute_hash(install_path) dep_deployed_files: builtins.list = [] @@ -1423,7 +1407,6 @@ def _collect_descendants(node, visited=None): if skip_download and _dep_locked_chk and _dep_locked_chk.content_hash: from ..utils.content_hash import verify_package_hash if not verify_package_hash(install_path, _dep_locked_chk.content_hash): - import shutil as _shutil_hash _rich_warning( f"Content hash mismatch for " f"{dep_ref.get_unique_key()} — re-downloading" diff --git a/tests/unit/test_init_command.py b/tests/unit/test_init_command.py index 9975a342..af21b9e7 100644 --- a/tests/unit/test_init_command.py +++ b/tests/unit/test_init_command.py @@ -297,227 +297,6 @@ def test_init_does_not_create_skill_md(self): os.chdir(self.original_dir) # restore CWD before TemporaryDirectory cleanup -class TestInitPluginFlag: - """Test cases for apm init --plugin.""" - - def setup_method(self): - self.runner = CliRunner() - try: - self.original_dir = os.getcwd() - except FileNotFoundError: - self.original_dir = str(Path(__file__).parent.parent.parent) - os.chdir(self.original_dir) - - def teardown_method(self): - try: - os.chdir(self.original_dir) - except (FileNotFoundError, OSError): - repo_root = Path(__file__).parent.parent.parent - os.chdir(str(repo_root)) - - def test_plugin_creates_both_files(self): - """Test --plugin creates plugin.json and apm.yml, nothing else.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - - assert result.exit_code == 0, result.output - assert Path("apm.yml").exists() - assert Path("plugin.json").exists() - assert not Path("SKILL.md").exists() - finally: - os.chdir(self.original_dir) - - def test_plugin_json_structure(self): - """Test plugin.json has correct schema.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - assert result.exit_code == 0, result.output - - with open("plugin.json") as f: - data = json.load(f) - - assert data["name"] == "my-plugin" - assert data["version"] == "0.1.0" - assert isinstance(data["description"], str) - assert isinstance(data["author"], dict) - assert "name" in data["author"] - assert data["license"] == "MIT" - finally: - os.chdir(self.original_dir) - - def test_plugin_json_trailing_newline(self): - """Test plugin.json ends with a newline.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - raw = Path("plugin.json").read_text() - assert raw.endswith("\n") - finally: - os.chdir(self.original_dir) - - def test_plugin_apm_yml_has_dev_dependencies(self): - """Test apm.yml includes devDependencies when --plugin.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - assert result.exit_code == 0, result.output - - with open("apm.yml") as f: - config = yaml.safe_load(f) - - assert "devDependencies" in config - assert config["devDependencies"] == {"apm": []} - assert config["dependencies"] == {"apm": [], "mcp": []} - assert config["scripts"] == {} - finally: - os.chdir(self.original_dir) - - def test_plugin_with_project_name_arg(self): - """Test --plugin with explicit project_name argument.""" - with tempfile.TemporaryDirectory() as tmp_dir: - os.chdir(tmp_dir) - try: - result = self.runner.invoke(cli, ["init", "cool-plugin", "--plugin", "--yes"]) - - assert result.exit_code == 0, result.output - project_path = Path(tmp_dir) / "cool-plugin" - assert (project_path / "apm.yml").exists() - assert (project_path / "plugin.json").exists() - - with open(project_path / "plugin.json") as f: - data = json.load(f) - assert data["name"] == "cool-plugin" - finally: - os.chdir(self.original_dir) - - def test_plugin_name_validation_rejects_uppercase(self): - """Test that uppercase names are rejected for plugins.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "MyPlugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - - assert result.exit_code != 0 - assert "Invalid plugin name" in result.output - finally: - os.chdir(self.original_dir) - - def test_plugin_name_validation_rejects_underscores(self): - """Test that underscores are rejected for plugins.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my_plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - - assert result.exit_code != 0 - assert "Invalid plugin name" in result.output - finally: - os.chdir(self.original_dir) - - def test_plugin_name_validation_rejects_start_with_number(self): - """Test names starting with numbers are rejected.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "1plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - - assert result.exit_code != 0 - assert "Invalid plugin name" in result.output - finally: - os.chdir(self.original_dir) - - def test_plugin_name_validation_accepts_valid_kebab(self): - """Test valid kebab-case names are accepted.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-cool-plugin-v2" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - assert result.exit_code == 0, result.output - finally: - os.chdir(self.original_dir) - - def test_plugin_shows_plugin_next_steps(self): - """Test --plugin shows plugin-specific next steps.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - result = self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - assert result.exit_code == 0, result.output - assert "apm pack" in result.output - finally: - os.chdir(self.original_dir) - - def test_plugin_does_not_create_empty_dirs(self): - """Test --plugin creates only files, no empty directories.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - entries = list(project_dir.iterdir()) - file_names = {e.name for e in entries} - assert file_names == {"apm.yml", "plugin.json"} - finally: - os.chdir(self.original_dir) - - def test_regular_init_no_dev_dependencies(self): - """Test that regular init (no --plugin) does NOT add devDependencies.""" - with tempfile.TemporaryDirectory() as tmp_dir: - os.chdir(tmp_dir) - try: - result = self.runner.invoke(cli, ["init", "--yes"]) - assert result.exit_code == 0 - - with open("apm.yml") as f: - config = yaml.safe_load(f) - assert "devDependencies" not in config - finally: - os.chdir(self.original_dir) - - def test_plugin_version_is_0_1_0(self): - """Test --plugin --yes uses 0.1.0 as default version.""" - with tempfile.TemporaryDirectory() as tmp_dir: - project_dir = Path(tmp_dir) / "my-plugin" - project_dir.mkdir() - os.chdir(project_dir) - try: - self.runner.invoke(cli, ["init", "--plugin", "--yes"]) - - with open("apm.yml") as f: - config = yaml.safe_load(f) - assert config["version"] == "0.1.0" - - with open("plugin.json") as f: - data = json.load(f) - assert data["version"] == "0.1.0" - finally: - os.chdir(self.original_dir) - class TestPluginNameValidation: """Unit tests for _validate_plugin_name helper.""" From 7b423ec0ab59648fc16d320592b7035495339219 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 09:05:24 +0100 Subject: [PATCH 15/18] docs: comprehensive documentation audit fixes (15 files) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 'Plugin authoring' section to plugins.md explaining APM as supply-chain layer with three modes (APM-only, Plugin-only, Hybrid) - Add devDependencies section to dependencies.md guide - Add dev dependency isolation + symlink tar filtering to security.md - Add is_dev prose and example to lockfile-spec.md - Add plugin exclusion note to pack-distribute.md and cli-commands.md - Add plugin CI/CD example to ci-cd.md - Add plugin authoring cross-references to first-package.md, key-concepts.md, ide-tool-integration.md - Fix broken table in dependencies.md (3 rows concatenated on 1 line) - Fix duplicate code fence in integration-testing.md - Fix broken link in migration.md (quickstart → quick-start) - Fix CHANGELOG date typo (0.7.0: 2025-12-19 → 2024-12-19) - Fix dead WIP file reference in dependencies.md - Fix duplicate sidebar order in private-packages.md (8 → 9) - Fix gh-aw.md contradiction (claimed install && compile) - Standardize apm.yaml → apm.yml in security.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 2 +- .../docs/contributing/integration-testing.md | 2 - docs/src/content/docs/enterprise/security.md | 18 +++++-- .../docs/getting-started/first-package.md | 1 + .../content/docs/getting-started/migration.md | 2 +- docs/src/content/docs/guides/dependencies.md | 25 ++++++++-- .../content/docs/guides/pack-distribute.md | 2 + docs/src/content/docs/guides/plugins.md | 50 +++++++++++-------- .../content/docs/guides/private-packages.md | 2 +- docs/src/content/docs/integrations/ci-cd.md | 11 ++++ docs/src/content/docs/integrations/gh-aw.md | 2 +- .../docs/integrations/ide-tool-integration.md | 2 +- .../content/docs/introduction/key-concepts.md | 2 +- .../content/docs/reference/cli-commands.md | 2 +- .../content/docs/reference/lockfile-spec.md | 12 +++++ 15 files changed, 97 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c92949f5..8c1d2f09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -260,7 +260,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **SKILL.md Parsing**: Parse SKILL.md directly without requiring apm.yml generation - **Git Host Errors**: Actionable error messages for unsupported Git hosts -## [0.7.0] - 2025-12-19 +## [0.7.0] - 2024-12-19 ### Changed diff --git a/docs/src/content/docs/contributing/integration-testing.md b/docs/src/content/docs/contributing/integration-testing.md index 755c833f..57e9eac5 100644 --- a/docs/src/content/docs/contributing/integration-testing.md +++ b/docs/src/content/docs/contributing/integration-testing.md @@ -48,11 +48,9 @@ pytest tests/integration/test_runtime_smoke.py::TestRuntimeSmoke::test_codex_run #### Option 1: Complete CI Process Simulation (Recommended) ```bash -```bash export GITHUB_TOKEN=your_token_here ./scripts/test-integration.sh ``` -``` This script (`scripts/test-integration.sh`) is a unified script that automatically adapts to your environment: diff --git a/docs/src/content/docs/enterprise/security.md b/docs/src/content/docs/enterprise/security.md index c63278cd..73406942 100644 --- a/docs/src/content/docs/enterprise/security.md +++ b/docs/src/content/docs/enterprise/security.md @@ -59,7 +59,7 @@ The `resolved_commit` field is a full 40-character SHA, not a branch name or tag ### No registry -APM does not use a package registry. Dependencies are specified as git repository URLs in `apm.yaml`. This eliminates the registry compromise vector entirely — there is no centralized service that can be poisoned to redirect installs. +APM does not use a package registry. Dependencies are specified as git repository URLs in `apm.yml`. This eliminates the registry compromise vector entirely — there is no centralized service that can be poisoned to redirect installs. ## Content scanning @@ -180,6 +180,7 @@ Symlinks are never followed during artifact operations: - **Tree copy operations** skip symlinks entirely — they are excluded from the copy via an ignore filter. - **MCP configuration files** that are symlinks are rejected with a warning and not parsed. - **Manifest parsing** requires files to pass both `.is_file()` and `not .is_symlink()` checks. +- **Archive creation** — `apm pack` excludes symlinks from bundled archives. Packaged artifacts contain no symbolic links, preventing symlink-based escape attacks in distributed bundles. This prevents symlink-based attacks that could escape allowed directories or cause APM to read or write outside the project root. @@ -191,13 +192,22 @@ When APM deploys a file, it checks whether a file already exists at the target p - If the file is **not tracked** (user-authored or created by another tool), APM skips it and prints a warning. - The `--force` flag overrides collision detection, allowing APM to overwrite untracked files. +### Development dependency isolation + +APM separates production and development dependencies: + +- **Production dependencies** (`dependencies.apm`) are included in plugin bundles and shared packages. +- **Development dependencies** (`devDependencies.apm`, installed via `apm install --dev`) are resolved and cached locally but **excluded** from `apm pack --format plugin` output. + +This prevents transitive inclusion of development-only packages (test fixtures, linting rules, internal helpers) in distributed artifacts. The lockfile marks dev dependencies with `is_dev: true` for explicit tracking. See the [Lock File Specification](../../reference/lockfile-spec/#42-dependency-entries) for field details. + ## MCP server trust model APM integrates MCP (Model Context Protocol) server configurations from packages. Trust is explicit and scoped by dependency depth. ### Direct dependencies -MCP servers declared by your direct dependencies (packages listed in your `apm.yaml`) are auto-trusted. You explicitly chose to depend on these packages, so their MCP server declarations are accepted. +MCP servers declared by your direct dependencies (packages listed in your `apm.yml`) are auto-trusted. You explicitly chose to depend on these packages, so their MCP server declarations are accepted. ### Transitive dependencies @@ -205,7 +215,7 @@ MCP servers declared by transitive dependencies (dependencies of your dependenci To allow transitive MCP servers, you must either: -- **Re-declare the dependency** in your own `apm.yaml`, promoting it to a direct dependency. +- **Re-declare the dependency** in your own `apm.yml`, promoting it to a direct dependency. - **Pass `--trust-transitive-mcp`** to explicitly opt in to transitive MCP servers for that install. ## Token handling @@ -217,7 +227,7 @@ APM authenticates to git hosts using personal access tokens (PATs) read from env | GitHub packages | `GITHUB_APM_PAT`, `GITHUB_TOKEN`, `GH_TOKEN` | | Azure DevOps packages | `ADO_APM_PAT` | -- **Never stored in files.** Tokens are read from the environment at runtime. They are never written to `apm.yaml`, `apm.lock.yaml`, or any generated file. +- **Never stored in files.** Tokens are read from the environment at runtime. They are never written to `apm.yml`, `apm.lock.yaml`, or any generated file. - **Never logged.** Token values are not included in console output, error messages, or debug logs. - **Scoped to their git host.** A GitHub token is only sent to GitHub. An Azure DevOps token is only sent to Azure DevOps. Tokens are never transmitted to any other endpoint. diff --git a/docs/src/content/docs/getting-started/first-package.md b/docs/src/content/docs/getting-started/first-package.md index 336a7d30..a4b44eaa 100644 --- a/docs/src/content/docs/getting-started/first-package.md +++ b/docs/src/content/docs/getting-started/first-package.md @@ -117,4 +117,5 @@ This produces `AGENTS.md` (for Codex, Gemini) and `CLAUDE.md` for tools that nee - Add [skills](/apm/guides/skills/) to your package - Set up [dependencies](/apm/guides/dependencies/) on other packages +- Distribute as a standalone plugin — see [Plugin authoring](../../guides/plugins/#plugin-authoring) and [Pack & Distribute](../../guides/pack-distribute/) - Explore the [CLI reference](/apm/reference/cli-commands/) for more commands diff --git a/docs/src/content/docs/getting-started/migration.md b/docs/src/content/docs/getting-started/migration.md index 948e0f86..78a06b93 100644 --- a/docs/src/content/docs/getting-started/migration.md +++ b/docs/src/content/docs/getting-started/migration.md @@ -56,7 +56,7 @@ No uninstall script, no cleanup command. Zero risk. ## Next steps -- [Quick start](../quickstart/) — first-time setup walkthrough +- [Quick start](../quick-start/) — first-time setup walkthrough - [Dependencies](../../guides/dependencies/) — managing external packages - [Manifest schema](../../reference/manifest-schema/) — full `apm.yml` reference - [CLI commands](../../reference/cli-commands/) — complete command reference diff --git a/docs/src/content/docs/guides/dependencies.md b/docs/src/content/docs/guides/dependencies.md index 4b8a5702..d9777762 100644 --- a/docs/src/content/docs/guides/dependencies.md +++ b/docs/src/content/docs/guides/dependencies.md @@ -25,7 +25,9 @@ APM supports multiple dependency types: |------|-----------|---------| | **APM Package** | Has `apm.yml` | `microsoft/apm-sample-package` | | **Marketplace Plugin** | Has `plugin.json` (no `apm.yml`) | `github/awesome-copilot/plugins/context-engineering` | -| **Claude Skill** | Has `SKILL.md` (no `apm.yml`) | `ComposioHQ/awesome-claude-skills/brand-guidelines` || **Hook Package** | Has `hooks/*.json` (no `apm.yml` or `SKILL.md`) | `anthropics/claude-plugins-official/plugins/hookify` || **Virtual Subdirectory Package** | Folder path in monorepo | `ComposioHQ/awesome-claude-skills/mcp-builder` | +| **Claude Skill** | Has `SKILL.md` (no `apm.yml`) | `ComposioHQ/awesome-claude-skills/brand-guidelines` | +| **Hook Package** | Has `hooks/*.json` (no `apm.yml` or `SKILL.md`) | `anthropics/claude-plugins-official/plugins/hookify` | +| **Virtual Subdirectory Package** | Folder path in monorepo | `ComposioHQ/awesome-claude-skills/mcp-builder` | | **Virtual Subdirectory Package** | Folder path in repo | `github/awesome-copilot/skills/review-and-refactor` | | **Local Path Package** | Path starts with `./`, `../`, or `/` | `./packages/my-shared-skills` | | **ADO Package** | Azure DevOps repo | `dev.azure.com/org/project/_git/repo` | @@ -221,11 +223,28 @@ apm deps info apm-sample-package # Compile with dependencies apm compile -# The compilation process generates distributed AGENTS.md files across the project +# Compilation generates distributed files across the project # Instructions with matching applyTo patterns are merged from all sources -# See docs/wip/distributed-agents-compilation-strategy.md for detailed compilation logic ``` +## Development Dependencies + +Some packages are only needed during authoring — test fixtures, linting rules, internal helpers. Install them as dev dependencies so they stay out of distributed bundles: + +```bash +apm install --dev owner/test-helpers +``` + +Or declare them directly: + +```yaml +devDependencies: + apm: + - source: owner/test-helpers +``` + +Dev dependencies install to `apm_modules/` like production deps but are excluded from `apm pack --format plugin` output. See [Pack & Distribute](../pack-distribute/) for details. + ## Local Path Dependencies Install packages from the local filesystem for fast iteration during development. diff --git a/docs/src/content/docs/guides/pack-distribute.md b/docs/src/content/docs/guides/pack-distribute.md index aba4c0f1..4c1125ad 100644 --- a/docs/src/content/docs/guides/pack-distribute.md +++ b/docs/src/content/docs/guides/pack-distribute.md @@ -172,6 +172,8 @@ The exporter remaps `.apm/` content into plugin-native paths: Prompt files are renamed: `review.prompt.md` becomes `review.md` in `commands/`. +**Excluded from plugin output:** `.apm/context/` and `.apm/memory/` directories are APM-internal and are not exported to plugin bundles. `devDependencies` are also excluded — see [devDependencies](../../reference/manifest-schema/#5-devdependencies). + ### plugin.json generation The bundle includes a `plugin.json`. If one already exists in the project (at the root, `.github/plugin/`, `.claude-plugin/`, or `.cursor-plugin/`), it is used and updated with component paths reflecting the output layout. Otherwise, APM synthesizes one from `apm.yml` metadata. diff --git a/docs/src/content/docs/guides/plugins.md b/docs/src/content/docs/guides/plugins.md index 8c77871c..ec133d9f 100644 --- a/docs/src/content/docs/guides/plugins.md +++ b/docs/src/content/docs/guides/plugins.md @@ -6,6 +6,33 @@ sidebar: APM supports plugins through the `plugin.json` format. Plugins are automatically detected and integrated into your project as standard APM dependencies. +## Plugin authoring + +Plugin ecosystems handle distribution but lack dependency management, security scanning, version locking, and dev/prod separation. As plugins depend on shared primitives, these gaps compound. + +APM is the supply-chain layer. Author packages with full tooling — transitive dependencies, lockfile pinning, [security scanning](../../enterprise/security/), [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) — then export as standard plugins. Consumers never need APM installed. + +### Three modes + +| Mode | Manifests | Use when | +|------|-----------|----------| +| **APM-only** | `apm.yml` | Full APM workflow — deploy to `.github/`, `.claude/`, `.cursor/`, `.opencode/` | +| **Plugin-only** | `plugin.json` | Standard plugin consumed by APM via `apm install` — metadata synthesized automatically | +| **Hybrid** | `apm.yml` + `plugin.json` | Author with dependency management + security, export as standalone plugins | + +**APM-only** is the default for teams using APM end-to-end. **Plugin-only** requires no changes to existing plugins — APM consumes them as-is. **Hybrid** is for plugin authors who want APM's supply-chain features during development while distributing standard plugins. + +### Hybrid authoring workflow + +```bash +apm init my-plugin --plugin # Creates both apm.yml and plugin.json +apm install --dev owner/helpers # Dev-only dependency (excluded from export) +apm install owner/core-rules # Production dependency +apm pack --format plugin # Export — dev deps excluded, security scanned +``` + +The exported plugin directory contains no APM-specific files. See [Pack & Distribute — Plugin format](../../guides/pack-distribute/#plugin-format) for the output mapping. + ## Overview Plugins are packages that contain: @@ -308,28 +335,7 @@ This: ## Exporting APM packages as plugins -APM packages can be exported as standalone plugin directories using [`apm pack --format plugin`](../../guides/pack-distribute/#plugin-format). This enables a dual-manifest workflow: author with `apm.yml` for dependency management, distribute as a `plugin.json` plugin for consumption without APM. - -### Plugin authoring setup - -Initialize a plugin project with both manifests: - -```bash -apm init my-plugin --plugin -``` - -This creates `plugin.json` and `apm.yml` (with a `devDependencies` section). Plugin names must be kebab-case, max 64 characters. - -### Building the plugin - -```bash -apm install # resolve dependencies -apm pack --format plugin # export as plugin directory -``` - -The exporter remaps `.apm/` content into plugin-native paths (e.g., `.apm/prompts/*.prompt.md` → `commands/*.md`) and generates a `plugin.json` with updated component paths. Dependencies listed under [`devDependencies`](../../reference/manifest-schema/#5-devdependencies) are excluded from the output. - -See [Pack & Distribute — Plugin format](../../guides/pack-distribute/#plugin-format) for the full mapping table and output structure. +Use the [hybrid authoring workflow](#hybrid-authoring-workflow) to develop plugins with APM's full tooling and export them as standalone plugin directories. See [Pack & Distribute — Plugin format](../../guides/pack-distribute/#plugin-format) for the output mapping and structure. ## Finding Plugins diff --git a/docs/src/content/docs/guides/private-packages.md b/docs/src/content/docs/guides/private-packages.md index f75173f5..ae20ad59 100644 --- a/docs/src/content/docs/guides/private-packages.md +++ b/docs/src/content/docs/guides/private-packages.md @@ -2,7 +2,7 @@ title: "Private Packages" description: "Create and distribute private APM packages within your team or organization." sidebar: - order: 8 + order: 9 --- A private APM package is just a private git repository with an `apm.yml`. There is no registry and no publish step — make the repo private, grant read access, and `apm install` handles the rest. diff --git a/docs/src/content/docs/integrations/ci-cd.md b/docs/src/content/docs/integrations/ci-cd.md index e5da790b..d9c411ff 100644 --- a/docs/src/content/docs/integrations/ci-cd.md +++ b/docs/src/content/docs/integrations/ci-cd.md @@ -151,6 +151,17 @@ Use `apm pack` in CI to build a distributable bundle once, then consume it in do path: build/*.tar.gz ``` +### Pack as standalone plugin + +```yaml +# Export as standalone plugin +- run: apm pack --format plugin +- uses: actions/upload-artifact@v4 + with: + name: plugin-bundle + path: build/*.tar.gz +``` + ### Consume in another job (no APM needed) ```yaml diff --git a/docs/src/content/docs/integrations/gh-aw.md b/docs/src/content/docs/integrations/gh-aw.md index 8d676c65..8c950de9 100644 --- a/docs/src/content/docs/integrations/gh-aw.md +++ b/docs/src/content/docs/integrations/gh-aw.md @@ -74,7 +74,7 @@ The APM compilation target is automatically inferred from the configured `engine ### apm-action Pre-Step -For more control over the installation process, use [`microsoft/apm-action@v1`](https://github.com/microsoft/apm-action) as an explicit workflow step. This approach runs `apm install && apm compile` directly, giving you access to the full APM CLI. +For more control over the installation process, use [`microsoft/apm-action@v1`](https://github.com/microsoft/apm-action) as an explicit workflow step. This approach runs `apm install` directly, giving you access to the full APM CLI. To also compile, add `compile: true` to the action configuration. ```yaml --- diff --git a/docs/src/content/docs/integrations/ide-tool-integration.md b/docs/src/content/docs/integrations/ide-tool-integration.md index a730e4b1..f382ae59 100644 --- a/docs/src/content/docs/integrations/ide-tool-integration.md +++ b/docs/src/content/docs/integrations/ide-tool-integration.md @@ -420,7 +420,7 @@ APM provides first-class support for MCP servers, including registry-based serve APM auto-discovers MCP server declarations from packages during `apm install`: - **apm.yml dependencies**: MCP servers listed under `dependencies.mcp` in a package's `apm.yml` are collected automatically. -- **plugin.json**: Packages with a `plugin.json` (at the root, `.github/plugin/`, or `.claude-plugin/`) are recognized as marketplace plugins. APM synthesizes an `apm.yml` from `plugin.json` metadata when no `apm.yml` exists. +- **plugin.json**: Packages with a `plugin.json` (at the root, `.github/plugin/`, or `.claude-plugin/`) are recognized as marketplace plugins. APM synthesizes an `apm.yml` from `plugin.json` metadata when no `apm.yml` exists. When both files are present (hybrid mode), APM uses `apm.yml` for dependency management while preserving `plugin.json` for plugin ecosystem compatibility. See [Plugin authoring](../../guides/plugins/#plugin-authoring). - **Transitive collection**: APM walks the dependency tree and collects MCP servers from all transitive packages. ### Trust Model diff --git a/docs/src/content/docs/introduction/key-concepts.md b/docs/src/content/docs/introduction/key-concepts.md index c0261291..72af915f 100644 --- a/docs/src/content/docs/introduction/key-concepts.md +++ b/docs/src/content/docs/introduction/key-concepts.md @@ -79,7 +79,7 @@ The APM CLI supports the following types of primitives: - **Skills** (`SKILL.md`) - Package meta-guides that help AI agents understand what a package does - **Context** (`.context.md`, `.memory.md`) - Supply background information and project context - **Hooks** (`.json` in `.apm/hooks/` or `hooks/`) - Define lifecycle event handlers with script references -- **Plugins** (`plugin.json`) - Pre-packaged agent bundles auto-normalized into APM packages +- **Plugins** (`plugin.json`) - Pre-packaged agent bundles auto-normalized into APM packages. Projects may use `apm.yml` only, `plugin.json` only, or both. See [Plugin authoring](../../guides/plugins/#plugin-authoring) > **Note**: Both `.agent.md` (new format) and `.chatmode.md` (legacy format) are fully supported. VSCode provides Quick Fix actions to help migrate from `.chatmode.md` to `.agent.md`. diff --git a/docs/src/content/docs/reference/cli-commands.md b/docs/src/content/docs/reference/cli-commands.md index 74f81baa..21c4e62b 100644 --- a/docs/src/content/docs/reference/cli-commands.md +++ b/docs/src/content/docs/reference/cli-commands.md @@ -446,7 +446,7 @@ apm pack -o dist/ - Scans files for hidden Unicode characters before bundling — warns if findings are detected (non-blocking; consumers are protected by `apm install`/`apm unpack` which block on critical) - Copies files preserving directory structure - Writes an enriched `apm.lock.yaml` inside the bundle with a `pack:` metadata section (the project's own `apm.lock.yaml` is never modified) -- **Plugin format** (`--format plugin`): Remaps `.apm/` content into plugin-native paths (`agents/`, `skills/`, `commands/`, etc.), generates or updates `plugin.json`, merges hooks into a single `hooks.json`, and excludes `devDependencies`. See [Pack & Distribute](../../guides/pack-distribute/#plugin-format) for the full mapping table +- **Plugin format** (`--format plugin`): Remaps `.apm/` content into plugin-native paths (`agents/`, `skills/`, `commands/`, etc.), generates or updates `plugin.json`, merges hooks into a single `hooks.json`. `.apm/context/` and `.apm/memory/` directories are excluded (APM-internal only). `devDependencies` are also excluded from plugin bundles. See [Pack & Distribute](../../guides/pack-distribute/#plugin-format) for the full mapping table **Target filtering:** diff --git a/docs/src/content/docs/reference/lockfile-spec.md b/docs/src/content/docs/reference/lockfile-spec.md index be359faa..4a54f697 100644 --- a/docs/src/content/docs/reference/lockfile-spec.md +++ b/docs/src/content/docs/reference/lockfile-spec.md @@ -130,6 +130,8 @@ fields: Fields with empty or default values (empty strings, `false` booleans, empty lists) SHOULD be omitted from the serialized output to keep the file concise. +**Dev dependency tracking:** Packages installed via `apm install --dev` are marked with `is_dev: true`. When building plugin bundles (`apm pack --format plugin`), dev dependencies are excluded from the output. Resolvers and CI tools should respect this flag when producing distributable artifacts. + ### 4.3 Unique Key Each dependency is uniquely identified by its `repo_url`, or by the @@ -297,6 +299,16 @@ dependencies: deployed_files: - .github/instructions/linter.instructions.md + - repo_url: https://github.com/acme-corp/test-helpers + resolved_commit: abcdef1234567890abcdef1234567890abcdef12 + resolved_ref: main + depth: 1 + package_type: apm_package + is_dev: true + content_hash: "sha256:4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5" + deployed_files: + - .github/instructions/test-helpers.instructions.md + mcp_servers: - security-scanner From 716943baedf2a8acd9c1081bc75194eff87f9e6d Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 09:34:40 +0100 Subject: [PATCH 16/18] fix: devDep filtering uses composite key + local plugin.json install Two bugs found during hero scenario E2E testing: 1. DevDependencies URL matching used only repo_url, causing ALL packages from the same repo to be excluded when any one was a devDep (e.g., marking one github/awesome-copilot sub-package as dev excluded all context-engineering skills too). Fix: use (repo_url, virtual_path) composite key for precise matching. 2. Local path dependencies with plugin.json (but no apm.yml or SKILL.md) were rejected as 'not a valid APM package'. Fix: also check for plugin.json via find_plugin_json() in both validation and install gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/bundle/plugin_exporter.py | 24 ++++++++++++++---------- src/apm_cli/commands/install.py | 16 ++++++++++++---- tests/unit/test_plugin_exporter.py | 21 +++++++++++++++++++-- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 52219994..17b40799 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -243,11 +243,13 @@ def _collect_mcp(package_root: Path) -> dict: # --------------------------------------------------------------------------- -def _get_dev_dependency_urls(apm_yml_path: Path) -> Set[str]: - """Read ``devDependencies.apm`` from raw YAML and return a repo_url set. +def _get_dev_dependency_urls(apm_yml_path: Path) -> Set[Tuple[str, str]]: + """Read ``devDependencies.apm`` from raw YAML and return a set of + ``(repo_url, virtual_path)`` tuples for matching against lockfile entries. - This is a read-only check on the YAML file — the APMPackage model is not - modified. + Using the composite key avoids false positives when multiple virtual + packages share the same base repo (e.g. different sub-paths under + ``github/awesome-copilot``). """ try: data = yaml.safe_load(apm_yml_path.read_text(encoding="utf-8")) @@ -261,21 +263,21 @@ def _get_dev_dependency_urls(apm_yml_path: Path) -> Set[str]: apm_dev = dev_deps.get("apm", []) if not isinstance(apm_dev, list): return set() - urls: Set[str] = set() + keys: Set[Tuple[str, str]] = set() for dep in apm_dev: if isinstance(dep, str): try: ref = DependencyReference.parse(dep) - urls.add(ref.repo_url) + keys.add((ref.repo_url, ref.virtual_path or "")) except ValueError: - urls.add(dep) + keys.add((dep, "")) elif isinstance(dep, dict): try: ref = DependencyReference.parse_from_dict(dep) - urls.add(ref.repo_url) + keys.add((ref.repo_url, ref.virtual_path or "")) except ValueError: pass - return urls + return keys # --------------------------------------------------------------------------- @@ -422,7 +424,9 @@ def export_plugin_bundle( for dep in lockfile.get_all_dependencies(): # Prefer lockfile is_dev flag (covers transitive deps); # fall back to apm.yml URL matching for older lockfiles - if getattr(dep, "is_dev", False) or dep.repo_url in dev_dep_urls: + if getattr(dep, "is_dev", False) or ( + dep.repo_url, getattr(dep, "virtual_path", "") or "" + ) in dev_dep_urls: continue install_path = _dep_install_path(dep, apm_modules_dir) diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index 2aa47895..983f5659 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -198,8 +198,11 @@ def _validate_package_exists(package): local = local.resolve() if not local.is_dir(): return False - # Must contain apm.yml or SKILL.md - return (local / "apm.yml").exists() or (local / "SKILL.md").exists() + # Must contain apm.yml, SKILL.md, or plugin.json + if (local / "apm.yml").exists() or (local / "SKILL.md").exists(): + return True + from apm_cli.utils.helpers import find_plugin_json + return find_plugin_json(local) is not None # For virtual packages, use the downloader's validation method if dep_ref.is_virtual: @@ -833,9 +836,14 @@ def _copy_local_package(dep_ref, install_path, project_root): if not local.is_dir(): _rich_error(f"Local package path does not exist: {dep_ref.local_path}") return None - if not (local / "apm.yml").exists() and not (local / "SKILL.md").exists(): + from apm_cli.utils.helpers import find_plugin_json + if ( + not (local / "apm.yml").exists() + and not (local / "SKILL.md").exists() + and find_plugin_json(local) is None + ): _rich_error( - f"Local package is not a valid APM package (no apm.yml or SKILL.md): {dep_ref.local_path}" + f"Local package is not a valid APM package (no apm.yml, SKILL.md, or plugin.json): {dep_ref.local_path}" ) return None diff --git a/tests/unit/test_plugin_exporter.py b/tests/unit/test_plugin_exporter.py index fcdb3a6c..e120728c 100644 --- a/tests/unit/test_plugin_exporter.py +++ b/tests/unit/test_plugin_exporter.py @@ -326,8 +326,25 @@ def test_simple_list(self, tmp_path): }) ) urls = _get_dev_dependency_urls(apm_yml) - assert "owner/dev-tool" in urls - assert "other/helper" in urls + assert ("owner/dev-tool", "") in urls + assert ("other/helper", "") in urls + + def test_virtual_path_preserved(self, tmp_path): + """Deps from the same repo but different virtual paths are distinct.""" + apm_yml = tmp_path / "apm.yml" + apm_yml.write_text( + yaml.dump({ + "name": "test", + "version": "1.0.0", + "devDependencies": { + "apm": ["owner/repo/sub/dev-tool"] + }, + }) + ) + keys = _get_dev_dependency_urls(apm_yml) + assert ("owner/repo", "sub/dev-tool") in keys + # The bare repo should NOT match + assert ("owner/repo", "") not in keys def test_no_dev_deps(self, tmp_path): apm_yml = tmp_path / "apm.yml" From f70e49feb90287d7ec7a9f351e663b6784326bee Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 09:53:51 +0100 Subject: [PATCH 17/18] fix: bare skill export, local plugin normalization, remove context/memory docs - Add _collect_bare_skill() to plugin exporter for SKILL.md-only packages - Call normalize_plugin_directory() for local marketplace_plugin deps - Remove all .apm/context/ and .apm/memory/ references from docs (6 files) - Add 5 unit tests for bare skill detection (63 total plugin exporter tests) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- copilot-banner.png | Bin 0 -> 330261 bytes copilot-cli-screenshot.png | Bin 0 -> 330261 bytes .../content/docs/guides/pack-distribute.md | 2 +- .../content/docs/introduction/how-it-works.md | 13 --- .../content/docs/introduction/key-concepts.md | 90 ++---------------- .../content/docs/reference/cli-commands.md | 3 +- docs/src/content/docs/reference/examples.md | 6 +- dummy | 0 src/apm_cli/bundle/plugin_exporter.py | 33 +++++++ src/apm_cli/commands/install.py | 7 +- tests/unit/test_plugin_exporter.py | 82 ++++++++++++++++ 11 files changed, 134 insertions(+), 102 deletions(-) create mode 100644 copilot-banner.png create mode 100644 copilot-cli-screenshot.png create mode 100644 dummy diff --git a/copilot-banner.png b/copilot-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..c495353fd9afb0d8d40f5faa9d0bf80770d77a5a GIT binary patch literal 330261 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 z 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%0DFR@R%LJ8ct-eLT}(nF*T!A z?Q7_esU#S|jXVeg|82U7`UFAeq@x9dtv8`O_j!(gxiK!F%(Ck0>Hz($)q3;gFt+VR znysxutP`B=^I zcmE?k01U9Ifw&1or9=Wh;45dtVS+k0?td94{KT_V3rVT;YC z$7R#<9`}xZj{DIc5?ke*-h1NXg=2jg0_G`~E{H|gvi)7De^j(~w+*Vb+UuC{3z#tA z=$uo(1~E)%%A*F0{+)Z0jtEQBwyU-pg%}){4%f$Fj+!-QrhinVuYviDHV)Wz2|GK7 z+lEr+SDLV8I{hM=X!ZUMc=M62CzWLe3)4-;Z~X&_lp#coj`@j=Fs3j;fA9K}NMufI zixoG|L};K|hCVS;zB(Vn*kj@q+(et=>ER{@=IckFi1xlMH6zu4C?I%J^ExOqD)VcC zx|kH@xs5-s>G`C#b%zm4?DBjHpjU4&nKCcQYIeUng2Z$CrUWlht=ofV1s}5w2xgC> z7a?#UzXAZ8&O_9NsJ}bvy;nFqUO%HCQu+fS5dz54^`Eh8h0UPS>s&518qWZL@_U~V z@+B~$;N#VH7$ac|)0~`{Gd)w?J))-HcVIFxFaV(*kzFp}eC+vJQ1DYxic5{cBQ(qG zs{bv2SG$4n_ATjM*W6b5v%Ful1+kkX4U}#EC~1-&l2ran0WZ|znDYcvnnAcMP?X$s z3Bm-IAe}-U`8=>N2603X>(3)ejPfJn>#~xi1%Ukb^_jFEF+pXn4KL=4ga5|;DnVl9 zAl9Pp$#A6KOD+l~l9{fT9K)}d$6{FjGn5G--TcyPj%s|{>|JT7Y0Di;2jLBcPe%)r z3MALN013vAF#c83y*3ME0u`FhYk_MvK(KxG-%$+2f8POyKHu&@9uGEvWBc`fH`GyX zZCm?0naJ4XYU_jc>z1}<(`9{T2C+27vZl*ryW6`3IDh-Gyznf?Q>@!y8H@vZ(BwS; zPMfOZaoTw|&3Rtg0O-PRfz>6NTKb40Y(MZULLt}wG>`Y6s5NF)!?8pVA4-t!OJ7&> z%?IryCWf;5{A)Y@+{ORYUo2O4I~e;>jCsqDzOHY_VuAsh^q$zG-oN2APQ*ZdL{@U` zH~Ag2!SAO_xDL`o=&BMT1~p|xE!7|s+xZaJY)?SX)XOgIGJ!g(R96A9Px(B-u$JS9 z+!D#fzT>7IDWTIZcNA+7FV-Em>G5F2BxJT}SOldJA(+Smp0Z#$-9R(MlVTenp8g`3 zA(+iiq55cj#Gy1e*{5R&TTBFOjFpDg_JwGEr6zFCme7aWWikm)J(T|qUOPae(GQPc zyG;hAVNU~jsd!b@{(m#u!TQt*R;!ik_*kz40DOa#ynXWhddk%UYBfGJJ!;SEK1lvl zKli>I3P~WZ5sdI}yaRmDen>k^%caWyiaNOg07JFu`Eb$KG&!`pzn!4v1$6YsnU2%I zi~F%BBJelYdMEt9V~#UuY9~vc(u|lB%YKyhaK2n{{rU0s^l$UG?85Le5T*Q}`tS0^ z&8pl|b{oJzCGb&(0DL~km6?Twg@@;J&9VlU!>N?9m+Vsr&MmR${gBpPlwRn}iyVq8 zXibj#6A-F@(@Br#aS$IEaL;L)ot-U+;ee(Vs(8Fu4TNY-j!7D^564M~r&lZu;bN6m zKmB$~AE7N4bTh(@aXMwvWR+ZY8Wkc4?;omYN*aU8qmC8wQ(+9&i8vh1wKS}W zMef#ruFI#b3FU*aE1i0+yyS)BRf}2hU5l6vwa1FTue#IBG?Er{Z3YtU<52A zvbih=Lh_%u6bv$dBJ*V)-B4*@ttfCde|tapgoX%M#PXek*_2#I$vUV0igLjm{B-)` z$o9W}`5vxTsr!)HwrwW>rWec4x9#m;2S57H!|&reLm0YA2@MIPB(usEFhs*tCUXpq zex~0G?zf)0F}PrUWaWI`m-NS0>U6yVM}B}`juL_E`kRl$l%Cx++fMA(>rxAJGN{fG zM$hw5tnd4N7N_f8_@o9T!sj8aulxB@RjxMQ)DC*7FR<$;6anAoqHg39FbOza?)hW} z8j35Qrw)0-G@=dEmfqiMKr*Pp+X#j;Sm@Fze<4J^Y*C{W{hyr^8De@HRfYcCO(;(>7pV%==a&>J)9QJlj z2F`D}3+n@Q@wDSpVA-NmU~J;9D36y@cSPam(-ws&R`B`QVrG1R1~sKnSx`lp^n0D( zoMib&Ij&q5tAR7C{j8|el<|dtwaDw<9%DI4!K<_U-0d?3<#Y;Rm>C^Zmee5?0UN!M zVm1jZ?s;63KI*W@slsu^TriGZ9YaYHrMN%X0aGCZ8Gm`XIDe@c#_3YMllVB*mD#~a zwH@E&RK1mWrO6B%qHf<2DkCEWu)75KsDbItBg2B9AlTu=@_x3q@-(qOGbSK&WRX8UFu_E*fQK{du&8E_sZGGR? z`|$mP`%G&YbKW+NS!}ncUOIE}b_8mL4Gj%}hGPJmQTDeT6HpB?_{2m-Rcf}tOSiuq zW!!{JZHU;s0-Xsm+Fo%hx)dUGpwjF6F>fr3@1><~Vy#dswDK;E8B2N)%q$BI*Uccx zjZ^D`YR~JUIp__QrQ2nRL;0;n9D>W)99$b1qca2)KPtuf-UOZz@9~Xvh6ev#C3!)r zoFR8aWgzc@k*koBK(xX@{&sM`4klIf4x)pAbXAm8-TqBTaY#xTkqXmsIFpP(Fx$uP zLK4|e+6r)s!ib#9g6b4PqlS-~|%LyC=jr63H{&Y%6hia4xN=v?ENS9qZa!CM$s8++OyH7HP67! z(f_V7l4*)(%IlFiZ1jy%tH$q3b3pI`zg`qBS~+&h7XLD@m;q4dIEY;|dN#%bl~ z|IOy^aJl4o+Hhp`49i12A+y6byM&?b^aI&j1>4*AzVgHuL*$yU26Eij$5V}V$0Kl) zJf1qXKVn=v_g77Gyq|YN6>q^M8Al1|D0aN@JWdE_Sf6Xn=ZhPrIbgt`rvtXzF6t+M zga<-%D$4tcG>W?ceu2P7aKqUkk}pFivHd*E+6xVMrkmqG_d?p8Pn-62Z2<##Jl73- zv&a96I>48~FR?#9lD7LNYx`CA+l<5597z&NDL&KN5)OCV#G8pdDBG!8{`7IDB{FXo|*onh81 z_@WY5wP{{Sqp4CH&SoY>M40v(%+WC&Z-|j?@iA|Nn@L3!6g!Pqkv$T+X-Oq9!)2eY z#6Be2T6}UnUmbI?Mut2)h_Z=bgpjg+GlV?vF1bCgx9=asBV66*dO{68Ug@{4Z1|IO4*>>--S= zbxomX0eC?{-u`fHd)o4}Z9gpr28nQxE!OKU$62n`I$a)DTV0RC*SjyrIT-1u4zbLZ zOO4zxTa0W3jo)40Q+;1jv29wvyMB)iDFM9##XAH1UBI)zwj{7ZZd-@`E9&t-uS0kl)&7gHnvJ45jtM-{LLl&VyPQk8)aC)BKj3q1xzLPfEc?X zUo6RDlh<*d8a&mXVn=0`au(B(X|kK|A^7#jPh)we@dTIzu3dXK(REB{6*uO~N^2xy ziGJ(Sd<3`>sk%-TltUcw8O~9GC1ys5=7)ToIHn4Aqer$OJ^S7(zPlkI045t2@l7gZ z%D!#3z;ouR_AdLSvIA3M8K4dUXgB_{>;Tn+-}+*`1wktME}#!!2+_3efFRQEDDrvv z(eq*Pq&H89{{q0(9wj97VL*hRiDZzFR-?E#Zlq^Ux=rmgBbBBMS%NCmiDhsYc|X z0I?J$WJK7G51VHa-8qE+!vfagnX#9x%w}fBXD3wCdm&#xl>N{s^%MP(sEu@6k0$ZbJ)}g z8Zl~}V>KhDqV8@mfVKg}b?;E7!#IT~zBkia6auj5QqS7uaxJ(d4pwo8|9W>2MfSbr z>v6jn$%60ohj|lVnbjQpQ#lWLftJvm*s)Ff2mFr(gy&RAnl>ZAZVSktY;HN1>n*%@ zlZ*-C<#$Cz%#GifP_X3PML@fk^ z4RLQ``$=GYakBEz8Rwhq*pX->atUG5s0~xPETXwRn2sy;qHx zn0bC`^Ns5DxyW`TJEB@6VTfl3p4)GDJi1P^!ax(i^J26Rdn*fE%vhiM0-zK*25?N9 z;crtxB6|ZsFQAC^Lz=_wIydbr7j|gID~hEALBXRnYMe6POu z^Jf|U0S{_o^=h-rW*_~t=GZ^E2Y%!dg>w#5D8N|BV{8zUh2x1Q`XnX44bL ziWWKZTHyUQ|D6)Datc^Y>UdUGvNsAuE5KXxenyZ$aS%~tBOTzec|C2qZrcsO0bo_4 zrLYR(8wSqBJrSrj2v*U#xBdUe(^W=QwRLTpLw9#K(%mH`-Q6wHf`D{)x1`e2DN@o6 zB8_yTlp>PfI`_Tz+dp6o9q3{2wdb1isdc{oq#RlXag^n<{2s;iDlN zF(CA~R|cw~tCOb*yzex#O2s3?9?L1sc%Pv4IW3LePpNJv+pOG`D!ri>+|cb}(S)LF z7Za*C^vl(uwZ_yw^o@z?1m6_~NNYKV;V^c$4H5z{zlqfZkYLzPC=hgDD^3o^zxsxs zl9mG1)!Y2Sk|IA{>$pk~{Eq!jreqp&qKPK9NH@`;#zj3X`E(EJvj4Je*5}`~uMjB! zD3d!(6-53#JQrt&RBU8_GH>>6y%^A%`JnvaUJfjmIGMjgf%)4AWQWkCGi$25rD4g( zi?3>;Khm|;{JDiZ+1o>I#dzJLsj1V@7`kAGt}H~=`V{sotw~DQhK46S^Fs35H##0}mMz)_ zqc533*_Ge^glXMTy+o>nbLJm7A6uri*PMMSR?oznNZ~@l^-)HzPKZY{OMWL(+_{n7 zSTc6j&fM)ztZkY6{6xwA%Zp)g&rhq;5EzAy{6HOC)U(?5 z3Y#SZ=u0V*C{5YTY&KLDrIJLU2qy9waNWZj*23xh44nzR8E%|WVG$v1V5BgYD zkx~P_O?%ic8zc$fzbe9@&t)XCv<#+b4-6e6cv8*^uqA%@S{2DrAK9VT;X8HYG*VM8 zj=d~>-OO)Yq%O$_C;9u#Az+zi#4%0IDWPO4Rklo zwijcO(v(qTdCBjE_kO8!|HQ=k_&;j>7TzG+4D@%#t{sSCQ_$mX-#-gP5$jJ=mk<^Z zXtkRp=$D6Ii6<^Q|v^$(bbVqwru_Uuf$lXdYpbxIoEI z-Q6xyOcdTHJ{JXA!)~xHdvEIZvrg&rw2D?h*YXJM@njKJARJlt(ht5O_b~?<7Nh;x zBu8}lICr~-?JS&q2kuz&VbwG5oIiHh0nEk!`n1ou^Zs&tg9e5><^R{V0- zPP)C#FNh(zc_!D#0rd>|ZM407`B82rOwYal(a;Y`|Prv+8rK6y6cRU!Q|6(uj* zmO)K8r5|33pFhh;To%3ZFkX8XFE8`KBNLak*D#tTD47;EEn4O}jGs$4uxtR`ZT~^> z<+V5I3~M}3OLAPR=Y<*hMCbrt`8iE{4I;GH1_#E$CF8Vxe{%vxoQGnpz{7&G047KQ zbQD1r23kw0?xNnhpaauKh&BDvs(6gC;;aZjv>VV0i$j z;`4#{+22iMN#6xSd-1!|rlPkqNcED#6tCC5U`YmmaV%_1=_EgNQu?k>D)8~D@Hxh` z_#bjb!ud#hSmW?0=%_>)_)F6fW+g1F@b84Z8+l8}D9EtHgHUiOZ}#WEuI&V9 z@Ar8i{6)}sZxCZ7hQ3XFW72ltG1(D==b7!mRBEXe)|cSqPr+Nia$3>p@XkQj;AM~~ zN?#vm_)>1}n{i|Oe8+SpX3@{4fdeIZjWpmNSym9lM$ zZ^C)eVuzqjS;FTg{E7YTzrd8uC>+XV?W@3(7BHQFaWrr{hRH18VsKj>VSgLwGvU{% z^WkE*n%bYdYA4sSba+0%Q>x`q&pW2r?)N@d%-+Hv6WH{?Rt2C&W0_~;*lbtO<3Z5S zh03$f_*ihXLw+BRXNqN^eRLR>1T%N)9_|bq^D}85Min%~?*~BQjr;;$?*xF1?h>8Y zfE)q$I!f}M#+SjLd`7Um@NK6JEZ(bU$vh6M4%F8%6_kFvIQek!zt_*+z77Z=*C84U zo0Nt>w>s-Q`AGF}_?)`D%&&sb9Qim1Omo%ISn@P=YTa=2jQfh5V7yqs4ttP6^d5U; zA4l?*CB4$0TO#Ycz$swhF5EeEdO{a;= zfv_B2j(uzo=!!Fp@RW1qMvZO$w`cwvvLxry)b+a$JNTS(c~MbOg@M=0z(7K!^OR3e zNdUK;`Z8tN-iDp*=HaSwOnIntTuojq=k$hlacGrb-Ty(BiwR@qs4rZrmYS@0y@hYt~{Mw2Q#F5JH2c?HJ2yOx`*_+E$B zwDhk_`wGhoPAV(buLpGc`-YO3SEg+>Ero-5GJrs=AwF0h)eC7P7c8-rlKb4+*y!w3 zTBqYT8n|94tnO)Ff0=&eokVcJ@@3#+;pDz|^hZ5Ni<8^~6@S-InnB(GS5Mw(p<;RD+Ckbe+32g^$&2FLcCYWbNgZBn#04JqnQ~Ba z_7*iebI_4levDBy(9gc>`;^K)-Vb@}-4{l(Z^XQNoamB7R)zVsuxdufrWeGzuf#vS zxnrv4dRBlI($1FMP$Mlt&e>7onpxODF4d8T!kI&J@PMgfHtfioXfN^SU3C3QWr*Llw8aSU zqxyWnb#fpVaLyZmA1^GrmSmp`b$FwsUosyh>ygOIu&7;?>*Ehe9D*l7OH|$ag(x#a zPK5E@B-bS0d2qlo_Nz4Q?8kO-X+N(|9(ujP&to{$%WOvj*iCnXTXL~Qk$L0C4G2fH zUBImbHYp{$n{}0Cr@{Vbg+;0Mmu@1PpK9mp9CR1sfxrSiUPKQp!Ouk)Ox7pz4Eky zfepByMKs9;5vA(S3%IInaK3Q#C#uM#pb1wCPpx)Q6}VUBx|N;a^ujeJM=UpY@DS0;<=fh&E3Zz=|6{`y&CzsuY7q{RFdxyPen<} z7N-YsNnJO#L)(8OrzTt`zSY|!!=arUu&|#MQcxZe5~(@P7g6dU{x;-Twp#=dQ3)&M z)-{aDpTT7CVV)DG5sJc==aa9a%c}Jt!~v>GI)u_ez^qMs8Pys;K1x zUPeuxDU`Iz!)4)Bxau{zdlXH4rOW}alEwJVC1Gsea!zkNNqSGaMj+iemN_rJHJfA> z*f<^M;|al$D)>DmnyIo+3$YY8ab4<<1QWZ-aV(O4%fd`?nPiZ+B^k~wd5jQZn~{%7 zmw#gKWLD|I6fq^*vJI*b8e-x*nbo^y{?vOrBU;VGU{hK35di64S?Bm|XoIltSB}cg zvP@$~14k!oyY{SS27%A2I!eO#_b{fb&PllyUMO#;h`7-64-k{iw#3rC{&HNBLYQp2 zzKLeFAg-1Hr_JVx2_%~zJZ>SGZt2k_h#<@})o?-X4n=E$k7R~?TSwU1@r$%~KQ8i^ z%`TE?N8)num(el(rfv7jrP}&?Uvg=#QIq8q+?*_|gNA;Nk0(jy9g&=)Co?Sm7aE0S~o;LV9hvY~bUt zBTRDTL9^Hf2cw?XVcJ`HYAwSDSTBd1tu7(;$YkxBt`~Vqu+KMK9=`PrxfNL1?s*z? zx!ilrv3}Fa@-zH#4Rt&J!c$z|=G~9K$Ap$Q9whu(8O920r#S6-a&EpB--KcJ`Kd!8 z-CKjeQrty<5Ap&@Tps2D0(_zrw=j!oUhx>bs;S-Iw6xm74-oDYI^I0(t#mE3Aw;{V zdHTd}6rc8CZCsLa<`ET!mT1T_%N8UoADIItY86Tq8DpS#BK~_=HY&u~#D>vIqDXm@ z19fo(P4Az=RTRRJUq8prkY(v_{<}Z9!GJT`jHIuO=^}ZqU4+yos*Lh|%={`{HVT49 zm)g_(%I9~&f&D@sTymOxM|9LSLPg`p(i+m<;pj235Zsg5ilw<~^5i|3keQN+H{v>X z`j%>_EIfn$&V;D=dzE6}rf~4P(nj6Q>Y#tdgM_!youM6!K2=hnlvlK>R*4&`2c|U$F%1cwj;0Zc`c$ z>bgAb_g5uM@BYVxWIYJ%5z4CfW1}k08#KmyzxZ)wiB)(AqO-A;qSAVWjwuKp=xrz3Mw>;dlt}VO zn~Y6M;B%Logz5Xps%C@>7=3~ML{{_HAbYrknOlQcXPf!d)mrzjO;-M!Qv@o-m%9;y zg8oJDcM@G|y-j{mwhRxMs`(64|NH`m#Z>oLsIlA$XtduRLIshIqUeVd(2HmHjq`;( z<#u2?;wM^UOIbX%Y?W~%$R?2Zdy?W26?I4&%s*(%Rcwd6A=N zeAJKVV{lC^7Srz&fR{gE9@4%3B0Bl}d0$c8GX*9ifH&kOkO^uHe-wPtjU{m_7AKIF(qFIG@WMn2tZrIP9Q5V z_k~mB8wE?~YlY(^96ul@BZ_^VrkP`#lol;Qz9wcs>#d<$U`tw#k2SWu@+tdyscEf-=0Qkmlx(@*G@{>= zepG^x`rz~GX!5*P-?-OXJVlO-%C!pa#VfnoM`qVWu^w!V2EL0g*Jso}xnlQ422 zIqFVUc%n7d%4&8f-gks=l4&BZZEodV%sx){JdrPN@(KWmKzQ_0lq?#Y&S}%QlLpK1 z=XBWr9Fu)H) z8UC`8h7YSA=fn^9UG(n&w1>CGDTLbpmrnAz_HLxrjo@;|VycyIny;E>e{VfYSZ?ST z!=hvAC9x>e&$B4D5zYc{)SaprmA|O^;EC`OL#_xtf5p0x>5sMJ4$q7@6{YE=8|>4A zen?B!YMqW(o?p1N%0f7MJ~ot9Me@L*Qa2(dCI&k2Vu}BnaiOTRbMArf2YIBI{XB#a zmcI6M12c3*y(45y798HTx@SR0BqXpp(8v&CgPtCH?mqRbf)i`{M|Wik zPS-#E`KE8~t%8i&$CqA8^U6T`M{U&Upwc16dL~w%$I{0{HNDhSv8DY12Qto>NIcKO zc{2`2wd!S+VLv-lIUpvpu$Ygh zBqR^PBqSw?2?^roz3}oa4QpmX2+>E;2Qp1D=l!vnQN|*NC(%;~mB!K{b%;@D_N#w& zL^VBoW(sb8?L|-vIeo$VEb7!v?uimM^US!J4Gyd%>SV4`!k>|)zY`>TRrw_qDaN@A zG88^m`5C!GT*)C66eAMZeh~kOH3yyWdUdOo0a?7-f|cY(eI2zd(teDU#eAM7@himl zCbS*$84Z4;9FunF%Xv9)@W0sE;L(;EtnG_(#iu>wNXuSUEoPT*qs#A+OSQlnggDMU z*fz?2{;Z(1{FR!n6q#!)XsZ8yKJwa<$-i=^>t?r4mu_6oP-n|yHznf>Dy!+QMXo~D z*r-rTb<bA5NfV50}3iD9?_t7nN?yIN+poCNY(2iu2xhZ}WE4 zRFk(buSRMpG{ml8AY@fSeYU|dlX1e)p19^L@Vc(yRA&U46!+IuOOl;945q!~$}0h}*H%F*zX8>S_EQYRG%{Pi-Nu3Wgns5=e&!fAshODXf6j>oXJCtbb~yx&6YID66o}~ z%iUj}y1a}%Klcfw_A1ffTV~Y%r`#wEO(bV*#S2^Lt=nzg8vOhW{7gs`X0@zas;~uE zMh5TmGWeTZCbZU*1F#k>-hCx8&cF$4?jiRJbo+Pw|Mf@UdubE|%rV!9rnSF9 zl9ui3E)#Ly3rQ|7h_uOfLq?;QpARU_={VYLc$F7Uq=iu|wjCc-AMSmA8k9@S;H`k% z#||W z^aZ*EGOI$^h6d@5f^1P|5dvyn=|%E#<63qq|M~RFe^>xi5y-otq?q0rn~5Z$XI>qChm!GY8|QNB4=t^z0fqp3 zY6cohxmC0Wclp*P9!U&o`4@pLKhyK664Ix*9_3dV+IpLOjEyRFlmA=%|NEMaMX!X> z^gf+uP)(LdB{okZm_I|eCL~RYOmE0Jh>)K@plq{tPw>>=AuX)|3=UHsQpCI>a-}a5 z3b7}wrmQlDHTG)U$MN74M|C)j-_HmpC|E8Z>DAyQ-jwg7u>Swbv<}(4I?$swLT{0E zZ4>&Fi`0i0i>CW2V19>?Ni#;cjIhqF@3&0u5LH2{^p?qneOvdhg|<1v5ort zQ+UvEpEV)7ScE*HeprtCr@~%KvHzd7p(aHutDlu`+Zr`xP;x z{z_0N4S6FK8lRN(${lGIl{4nUmvg+X{uLuCNO|l7914U zeF?Ndfp@DLuAg?cOULj`bjV*AX3A@dTemcECKC(NxFxcB(ELh>=#2q~5aqZn^`DkW z`w(thde-C*%7I@OrJr3PwK_3AeOAhlGGx$w?4oKfQ5Dgtn5d$N)lip!VHio+S>V#v zCC6i4^ZCQ~vxo0ccR}FYb=}+F)z~;D|Gq;*%7_E~U`}`on&{8FsVd+xoin9hLl32M zHosd*&E}Fy2%7f)?g?@%0#A%LprXyx%KYVRK&A+vbzMnCLk%H-c8jPuv%>hocyaI-EtOiAPP0j0Xhw?#CJuY_u7Igd?D1v?+O_4q>J~o8E7`-osq4OV((wjOH0KWq&N%Lb4@ER{(dAQy6<>SD z5h$Nu?-fLFVyY&T)wmNL@ok04AfgF+T_&4|fp#%RYUrhi4j!6FE0=!FQO&*OgPf&V z(F*@5?Yi~@g3_sHT3TGUVRL>7wX9Ufc|Y35?~ku7D|@xPc1LjjQC&bi-i@&G6e5yB z=|Iota0XSgdO5bqVZ%c`2V|?SIIS~b;4hEVgGfz?ckg>{;(7r4aX?-{4w(SB|Lt$E zWRBiv<<=4sV?(BcuI+Te`aa6elfbd_tyAijTsd-8j46KEd$x0exq;b&@#LEg^Y3n{-<^R#{Fn z@!zY>P3>~J(L?1is~&Xw6=(t;7N2g-)x|F4+PFTF@FK9R@yIU~>2fFW$%N)nEqpXZ z6F~6K-0YVM-CXtZgp=EY%0a1aXQHUNHh}g7kfLkgKt4z}5Gn>+=6H&_|5*Kg-3qh> ze=5u0t+c)*gA~a8#`Gf~6Ldw032U;51N1G%jMh@9I9QJLi2j?sA$hKyC|G-TSjigT zV+??)@*1$?znj0R89Su~wAQULy}QKJb5vh6(IG|o*5T0cMM0{etdf?&b)F;+54k4d z4NTTQ1(qkwR|T<+bwNtVGCXQW;(G^0vMnuAA59)bMXuBXpO(iK1wRq>gr7M~9gHY? zcAxZUQbNKy5N{eV*|6}uHevT&itqPI@lBnJx0n$;-}8^^|1MPS87}F5#c&1jk;MwanvAKzgg zIZWRfm`MNj6LrH(!Ff}9PH?+kOTklf^*sD|)dOnw>mMt>Tj~OTbl?39Yi6N61hw<} z=laP$>d1SGTAja~l&!$8dSPGWNGY%0jb`TghZ*&nDKY~!|e zqx0c<6->)JvJ?3I%sQiF>N>Mp>%7zkA9(rO_pZ+^`_mv1%4b@La>OU_?&lp<$b zPhLdVwc#|JeJSJAAVv1gwuGiixjkLS1t@7M^KBvCtyrc+4;h!rbS#8Ily=p04g_Bx&|0^S>ePV5$XZkct9_G4UXkZlzjAM_rE!Z z!Vy5!1A7!!4dn4TWUsn#B&S7A*j+R%as~>a!reJr??9pyl%*DUv}Fut z_W|NlfLM%7spB_-z5y%4@R6|=3!1uivBm!PS z0rsf&QZE#~yK(bJ9?Gpzrb18}c^l3`kdl&;BriwkDh`gy3k8aiRj645p6)i1_zC=< zIUr@K&KLth1lxBkz4k7cf0`H@b}T7BiSZrq|A$$?1l}lNo&IXZ;Z7szk6uA{gk8A- z|8@WnGDtgxx?-j5fY18|$d`P6uCe4Pq~4J5Ai4el$w@MyJai5aQ=sm_v>{$2ZA|!Z zRN=ziOHm}Y0>FpZ{(ffX7R2q;h*+3f{iLQqiEqT3fuJTd4;p?(vnJbhnbuZVJ;6N%~(LUj@;moote>|i-cEFt~njUvBX#1XMty*9&b-HGc<{BVrq+^ zEdqE?vgRXGvBe&*f*z+e`k#*L9+eMK(&bd%KK%)zx*U3X+;}1jc(He2o{6m}@o=Or z`zGbI1lyx1YR8i-1AZB6n`Ac=oZ7p-`Fwy6-eU@y+a&~b#WWH0_O468h1>j|dfoli zZviIt8`vHqAH+`6iYFWI5V?;wp6-IM_Ndx=%}9w6)`%7*fZ1Z>eqS)?BF;RR4m%Z1 z)DwC@Z!lfZ1yK-9o*Rr}l;mxxWIytVMG@{m@&WM3M6N}@LZFgM9NfeHQ9m2K2zH`* zlw5R-;2Ja>Owq)pzn-3<*;i8Jh>n-%U$9h|t-448o?!<8L zV+Q!3Q}PR4dHbogOgrY4t(em6^jrkBh{(&vl+6b*K3g!Xk*S_gGeTq2tVLYWf;R+2 zOX+tbfrJ_X?HIHp5Z2+Y1e-I6WP{1Wsl6opMu~1YY^>aKqT#0@b>no5PZ&t6-#Gkf1`gyN;c?x^>y$i2($=3 z@o#Ux7D|9BTZB%nTmW>(*z^O8i>P0{R{gNi-9XADw8O_Hpnf5p4C4$Rvdd=vcMK?z zY`&i)^HDc9bMx#oxqj!qxd$dm1df3gpf97N7fHqe${Gd)0nd(9wBnGb>sL<#1I3^} zBxRt16f-2hq~0ykb-+dF%3(XGz^2_ed;EE3m4;O|2h@U?mxvxj(N)g^w$OZemzey4 z=;%HDcN!sxOT0MP0G@7=o**el{Xn1zw&SOBtS9VOSdE2{@Z@fA=D7jRj+)**BBqGC z{4&l+gRc$5cPaLZVCc9s@z$5fzMubL0Y6{LjW(M{i9cf<)>{LI=SpL%R(MKGUAD6f zSd4s5=D3KYvEP=LUO+?%eMW>!*Zrphu_h(m;AUu+z*aV$DFzZVoKht0o3qp;7u5Ty zf8hgtL;p#toKCW}bd zPc47McT|1L4!@MwF9TtLef{?@2;$qJdLrJFUaR@D)E#&i_-8%pQ`lwjNa%Z_6IfKK z6&R&(ECYS10s}}}bl>L`mB%H- zoI~ zfHOSt2T$~CUnj9wQ|Ca!2QKdRV0Ic(35olMjVJLNA_y^d2(?GBXs``RXk&OS;1PVNHIa+gX)CF@BPDofKm3E+cvj`p7KD&{1*2eTq+l{*xJK_@hf?(zUwml zVCJ~*p&vqVzDO{1%VAq?vdtE1qSK0tSlW9rnPB!~){u9LnutD0sWe61=oAOFwx>U9 z8>5&w`h?xX`tWJn(_oZh@&zYT=kIt#Rmpb^I#93$i6JFvPwIEr!-&2J)A{FP)gwuj z{DNcTg->>AOy<9DAr7>@cp4lAruCPWcEct~dxUqqAmK4>sm3Z4X&TNIuDS+7a=Jqz z+tu4*;LP1aCTn>`p{zV$9z%;B`~hs}gGiFL#xR5Lu7U@s)mE6p0^tKBK(knXZ5;$t z8|nt*YP<3)2OCl!nEsL00sfFU+OSod<`c5PWzruh75cj!piLiyLC)HVsc#QG>2qRY zBUg)Y=OGlpmlCHAqxQ2XMLB8ULw|-%u$@i-?18mQ zf0;ksE*81Wxf~{&LETbr>R^XLDbK(16FWbxW$&mFvN+BSI1^aBP3tC72Zl?b# z1wSB#VlHP)Ose>I!c|b94@(t+d!iwSuL-mhsxa|;4;*3jQ`ocRS|r(F9GRzDH~sJ+dSOR_KLjg#Gig&tMLb z9ttr9GpU3Zkgta_^>dyA6BZ(O`w3b0xl}~z&o3M}_dbn3Dn(JY*vq?U5})urzsWJN zUP~trmWL`e=?O3J2~ETiUh?57#6<%KuyM9h;z_g{-WuaeR%(v2(Q4)?OzuTfx5kpt z$}KFSNBbV%Wed9=u;WRmTWEFw8%;xQY}A##o7KpLX7k1!_vJJOQDr;P0XS9g8ekz%`7*hI|_DMpy}cV6HJx z(|5P@(}1yOaL<65jMT7AVv*iC7dVHL-WH+?$GXJMg$+^l*_BHTRt>ffUy9n(NOi)1 z`SR~XItv?v;tL+7tWoeShcL-XIF+DEv^d(l%ZLoru)T|_gNd^Zkg$yC5z~mmW~G-c z(iQO4a3RW?XrEBakX)mTRpu=nI}}-j5=p69q<=)|Tt@}nM5QWyW^<$2 z?d^HG>xs&T-@@*vbbv#{j7D`o$ufUS5{f+_Jfd&cfkE%Ei(!%uD}0M4!j@@P5|O2ht;P$HD! zuE4xg@zC$^lahNLP+ozZm%hXnp%_D#+0816Y{ zmpG)Gd`8Cb#(Ck+hvoiYb=5axA>u;Cl5bvi@Zq$-i$rGSGC=`S)IdZLsB>}cw{{s=6| z`}%C+Qr2dKi7A`5u<)=dYPe!_U*>4>mx8#`ig0UXiAF-0G2`foZYTqqqtdfJpIRqn z7ID7dWI(5JkdrnC8lXPtX5RDLxF;ePOqeW>V3HybP0>;nI6j{@rIIT_h5%ITPsnLI z5R<$8s6ggSKZBcwJj&-D+aWFE42%!>ONla2GPolDB_Vs?^RU{3@e_Sx1;B!0?FiV| z)l@2v-%$97d0JiUU00e>#HPF#O_49ij619fT?r(BgKKmD{HA>uQ~;9QCl=h!oe!z} zgS2*>C^q<3Zg0r)WxgEfyfJjEsF-hYu)q`CuTDZ7{1Wpcu`X-1|DdeiXd8zvG_-T+ zyPBGBse_n>WQC8v8d=V)3h4BOWhNQe(F&x7>KN-i-%FYs9kTOasifktNt>Qy@pk9# z{XT-oozQUKUr9dkW{SiZ$A>|a?E!?w!9}roYKw>D$w$bGU!Q=Ff)#JO1LXD3{jyw8 zCv7MX-mpJ_?Vb?Bck$Er2wQl6jV0a?K6nKbA-<;vhjE7^@j?LQ<*&+bb~pU zw({DpXw3FqDv*~#zZ3SgCPD3U5C>6kv@4-$-AP{afs@KLOKP90)x-ZF44YrP1MK>8 z5IV#CuJ*WQx7(xgpugkhNZRM6K&NmZ`6Nt_7j2x(0G$b;IR-vx3(0&hf4F;pA$KgU zR$)|Q$eFSaY4!wfo79AJ6H~w8X_V5`Y0u+H&%4|)Y3^iv?C;^l*bU_`=_YeU22c7U zw4d)b*dH~^hfW|}c!Nv>Xg4EN0Q_ATvXh{^`?hNX8G53t=aJfYc;w?q!S_ zr|O67VC%WRv{x<6ficAiz;+sX#|GgacmGasnXq{PMvPwo1j7B)3LU~bsYXceu4h@r z7|lQuCbYay+}7avnsu42k$#5QX7V*5BTB|>+U}W4)|Oa>;WAeGVaCBGwyT9t7sJFE zm8T>!`1#eJH<;o5`XrMOD6@gtqN4Ne&8BXx7_Q(PW5V(dI8(0PM>t`>Pfyl^!`O)< zVJ%lT-VhunI*uoRzJyeS$g6Lzgpnkx>Y^Rusc@(>(Sla&lYZ`g#WQZA0lCBE{Ng|= z2IJs=e?OPi?KQ?yzF81lKYYy0(pFH|{tOgLFtA|X!B`3H?9&Wy%5d>RlX(z{OoB6Z zz<%@xEUP4pG|{szPvBhicwQ5bdK9qoshNOTTx8s0Ftr7*(A;m207dguq&0BhjiQ8g zM#kp7o>YF?1>7JW*`1_;GDAkNO2R zpqrSzTCEONWF%yEgxA0=L%ODrR*5M{v6<=wsSCY&QVSWTod@syr(R$#s9Ivbm_?6v zYhU=zd&3@QhA=f^mVWhjR{Ej{CKuQ@FzdxKMNC&BDU_2bWR|nJVz6+Rk?U+-VZ+=B zd`Yl%eGh#79d(W>3vseGUykTgbEG5p`2%;N#C2v{*B(IfBmhVWa;TCv#VvSSoOukJ z$?w;J7l%!=Br|p_#nh8WmZ()@E%^#-3@7Um_bW+V6=G6+<5co(`-n@+(aQnP@xk;YOgI&9VX ziqw=KzX4)m4)6pjkV?=nwKY=P_C1zCIMtcrPVEYIC7uIPQ|TKEO)g0;oO{4)kjS`^ z@IlEu;GGu3leFdjvK_UK4k5P)t&iR|VvqGzG5A)m56_BR53y zWH1VG8`S{^O*0;j8mDN;I&4hYDhLw}#i=(kKU%8-dr+hJrAD!U%b+;G7ldwF+dlvJ z`01yUXJ*^{z7PFgnMj`mBj)!Zut3p0Q0b$yJw|HPMULoCpF+5lQP3bN?V^;(2$@3Z zO0ll+pCh+qf5F}cdB?hZrG)GutX$wwj zMX1#fR{-%8MWX9wJB}H;@Ad3ZoCTlLiDB;IMblahTJwdwkuTZ7$04-BEh>9u0|_K? z2Hj{3bq~~-*a5_qG_}&hNV6~m6cI{W0q6K!LPe&%uQzeRC;Rp+2xnl57&d@9isR4>^ZKMG-fJ68Dm#6D9d9i7Bi= zo}o43Xg)%@ChEM3=D}xuB)`VPB;py|bcCQM05LW_k{x^-ppMrv4M-Hg+!Y1=N7(vZ znJY*XXP2U1Ude?)V&4TnvpSe606NGJUta1miN}kio$8PpHgif1_t4;szw5o)+I#APv-XD}SJbBz!5U ze1HA25v5Kn(KtZkgFV!SVdyv$LJ?}mz+D;oK(Xpl=OYp_?5@OD+b5G}SmzQLoY$Kg zJc&KA0AjEGvw*la2SL8N$qf=uf2U>p zzcgZOp^OU*@F;Tm_I4Of|EpN}1uw_gw~yg~m`qWmStKI~@=UO!pn6!-Tj;?hU_q|@ z3P^@yhF{*_j(hg_`swF}G#ip-h!yayC(*D5FNauR6>mdv6(<-r8h0~leRA)4O_n?u z={>-|^e(Fh9&5Kh`x#mdwHR|>amOH9p$M!($9@e;>TGJ0kVmP>Of&7+7?8SI+XjWG z?*JqmCtd~G7D`++1R5Poqusiv+qyxDm`@Q$N8vZ8l0a_>ZM6}lA$+m*TtyW#NL-@6 zuN?iFkzFty;KbOYVMbJ#(Gw@S(&&qE50PfX0jVx-!x|muKxQK^);Qxd$I3^hgL%Cq zr5fDSYm7MV2I7S__aKY=c1b!28Pkq(@;?<7oy?`nH^(G`F(E_&fz;V=|GW;;$IX}B z99Rq&kS+O1y6Vn|eTjBPt}88}&g&z5)`WBkc}4sT_5t~IAC4E7*m^#RUWT=_*QQJV@MqgQGNRc+ImFv#HqCPtWwy!%p zd$-L0c@xiyO(6>moLrv14=Nw-#5jP@p3c$=@9CGw6=8gcOxV!O#&(J(4ZcuUSeh#~ zk_Ed!30N9hso=EX0Raj~5tIU@{XW{#j(tZAHA&;iyjQw5hc`(Mtvrwg0DT<%v13?Lo09?$2N&}J=B(58hiYXN}px}^%MG%BO zS{Kr{bGPyI2uR~8$)|uBzT}p7f!Bu32ex*0eaG(HE=~mEgK-GZssi?ig)a3)ay%-1_?v2Z`?(&M)3n- z8NmmB0!O)I0tz)1!O97LnBf`;cKG6op0Cnw?O#ma+a%}erlNEuz6XUyK5R6(u7?+i!4+sSf zarZwThdW#%97azgqas^fC0y^_uFh}1&%H=aWA;)Z-VfyLy$TI{g7ylENSh{)P(8FdEkO|?#pauPn{(@q+K=s;Ff7emZ?J7zjIl&_tZJY94?3R0T|`Vm zA`BW@YDq;8_-OJOf0}D4{WBv?cR(PZy*7mBY7ypf4f7VZc5jR`HKeL}OTB zXc)lFWJ3@d!Lapav$vMk+dfZyZO zX@O%s|DfN-r)gUp(JpEqGhdv$L>QWxZbLn#5u=hat50J-=>bYw@3H=F2B>LeU{%r+ z=;t?D4`)`hXQYoT;9_Uu|3HGp&D$inyKOv!Yan)4KahNw_*EdvD_&k+Za?WcQX8yNS0G+lKd-2eaAJ>7k$JExiM;dIY5lc!@$O>>%II85hsPM?lx7H({& zHaU##_rC9MAAk7Ao%iege!bqWcs{DNGzmuV%6$3h-jhlMw3<#dQ8<8)>NGlbPb7&A zcf1@sLq+<+W(<52OaAT2eO+Xn)3?FjL4O-PbU5O5%RU4ht)qJqYe&6O>ekoIqB>j?b+$2y<#r3c*^V;! z|9;?|J-fMS>#gv0ndWua#mzV708`Jx0GX*`$vs4*rJfQjy?v&eWY$kTsUw(dh9dUPZbIZ`(s!`Ctx|$YozF5~dg&r(>0r)u(Q^?q|-ZlNb z930)VvdQ_v%v|djlho8YVycjQsu#GOhkZy@9rlw{1{hDJB17diSK9}(-=4kHZ#wHU zeyvhJm5`+@S3RmD^4bTQ_F_Bk&|vSb>hDF#PrKjc02YiAOdx8H@^WE<-Owd-6$B(N z0eAlFjN;WMqcR@Ik&yM|ZoAAFE@Xb49n>)sFiqTY6Hv!yviZ?AP03WMb-Y@`P>T@6 z;c)gIN`ML>UiEBbzyFCJPyT1SQ&=C zcNS;-)Ga6L*`#N15eU%V_sv!n8E{nS^f=9a%}v|uJt$$*^_F>R*${?t`6RW$&i!>z zPxM+Hs>1$j!-a)k>F`vi<9S#q`<8(GMov%oZ-D-GMFT+ontIj`FW1!797LTcj6GTv z=GleAi=AGnvMC51m3+Rz)caq6K?@2-4_i>eRjN7%EKZf% zg$7o0uQjV#y(JvwjcwK2w&6MvXOtk|-ZlBQJcn4n&g)?}H(w86uTS+eGgOyBNSZ8- zYZ|xpRoDf_zpK>EW32mF72OCGTaZYNGufKZe%_5wqnTJv*!_A}dUjXsiDM$Ym7!ed zpx->L-}fH56wIc2#n)(09Cufu^JkBhFLnO6O|paw2sr%weHzd7k`{0wDMOubP}mRO zz^}Yyb7Y_6P$8}w9;#KLKY`6<1i*!wNP-YUkzqnh$xDRGAsdM<12)RZ5))GK6Y$?; zJ5Hj{=M4(Q!Nz+YMoFExH!pb_ina98W~j#pT$)3R_~kBGtn4FKSiQ+30G1%i{J=63 z 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­Cb}HU7CVMNoyl5 zkew!q@mQGXMlQMyCpp}2i^J`~L>rm{dQRVO0^Yt0Mo(d)wGW46;g9&j*VVsHmpw-Z zj(C)t42`j-w4M7$Z!PyNGf29d6wtM?4JrHF_6@Mk&f8(>iUcv46b+Cx`XKlh@6I4_g0y3xKKR4T8zNXa5BTR_+D> literal 0 HcmV?d00001 diff --git a/copilot-cli-screenshot.png b/copilot-cli-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c495353fd9afb0d8d40f5faa9d0bf80770d77a5a GIT binary patch literal 330261 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 z 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%0DFR@R%LJ8ct-eLT}(nF*T!A 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 z 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­Cb}HU7CVMNoyl5 zkew!q@mQGXMlQMyCpp}2i^J`~L>rm{dQRVO0^Yt0Mo(d)wGW46;g9&j*VVsHmpw-Z zj(C)t42`j-w4M7$Z!PyNGf29d6wtM?4JrHF_6@Mk&f8(>iUcv46b+Cx`XKlh@6I4_g0y3xKKR4T8zNXa5BTR_+D> literal 0 HcmV?d00001 diff --git a/docs/src/content/docs/guides/pack-distribute.md b/docs/src/content/docs/guides/pack-distribute.md index 4c1125ad..530691b6 100644 --- a/docs/src/content/docs/guides/pack-distribute.md +++ b/docs/src/content/docs/guides/pack-distribute.md @@ -172,7 +172,7 @@ The exporter remaps `.apm/` content into plugin-native paths: Prompt files are renamed: `review.prompt.md` becomes `review.md` in `commands/`. -**Excluded from plugin output:** `.apm/context/` and `.apm/memory/` directories are APM-internal and are not exported to plugin bundles. `devDependencies` are also excluded — see [devDependencies](../../reference/manifest-schema/#5-devdependencies). +**Excluded from plugin output:** `devDependencies` are excluded from plugin bundles — see [devDependencies](../../reference/manifest-schema/#5-devdependencies). ### plugin.json generation diff --git a/docs/src/content/docs/introduction/how-it-works.md b/docs/src/content/docs/introduction/how-it-works.md index f4baa746..dbe642b1 100644 --- a/docs/src/content/docs/introduction/how-it-works.md +++ b/docs/src/content/docs/introduction/how-it-works.md @@ -160,7 +160,6 @@ Package your prompt engineering into reusable, configurable components: - **Prompts** (.prompt.md) - Executable AI workflows - **Agents** (.agent.md) - AI assistant personalities - **Skills** (SKILL.md) - Package meta-guides for AI agents -- **Context** (.context.md) - Project knowledge base - **Hooks** (.json) - Lifecycle event handlers ### Layer 3: Context Engineering @@ -227,18 +226,6 @@ Apply these colors and typography standards... Skills provide AI agents with a quick summary of package purpose and usage. -### Context (.context.md) -Optimized project knowledge for AI consumption: - -```markdown -# Project Architecture - -## Core Patterns -- Repository pattern for data access -- Clean architecture with domain separation -- Event-driven communication between services -``` - ### Hooks (.json) Lifecycle event handlers that run scripts at specific points during AI operations: diff --git a/docs/src/content/docs/introduction/key-concepts.md b/docs/src/content/docs/introduction/key-concepts.md index 72af915f..a60857d4 100644 --- a/docs/src/content/docs/introduction/key-concepts.md +++ b/docs/src/content/docs/introduction/key-concepts.md @@ -29,11 +29,9 @@ my-project/ ├── instructions/ # Targeted guidance by file type and domain │ ├── security.instructions.md # applyTo: "auth/**" │ └── testing.instructions.md # applyTo: "**/*test*" - ├── prompts/ # Reusable agent workflows - │ ├── code-review.prompt.md # Systematic review process - │ └── feature-spec.prompt.md # Spec-first development - └── context/ # Optimized information retrieval - └── architecture.context.md # Project patterns and decisions + └── prompts/ # Reusable agent workflows + ├── code-review.prompt.md # Systematic review process + └── feature-spec.prompt.md # Spec-first development ``` ### Intelligent Compilation @@ -77,7 +75,6 @@ The APM CLI supports the following types of primitives: - **Agents** (`.agent.md`) - Define AI assistant personalities and behaviors (legacy: `.chatmode.md`) - **Instructions** (`.instructions.md`) - Provide coding standards and guidelines for specific file types - **Skills** (`SKILL.md`) - Package meta-guides that help AI agents understand what a package does -- **Context** (`.context.md`, `.memory.md`) - Supply background information and project context - **Hooks** (`.json` in `.apm/hooks/` or `hooks/`) - Define lifecycle event handlers with script references - **Plugins** (`plugin.json`) - Pre-packaged agent bundles auto-normalized into APM packages. Projects may use `apm.yml` only, `plugin.json` only, or both. See [Plugin authoring](../../guides/plugins/#plugin-authoring) @@ -98,10 +95,6 @@ APM discovers primitives in these locations: │ └── *.chatmode.md ├── instructions/ # Coding standards and guidelines │ └── *.instructions.md -├── context/ # Project context files -│ └── *.context.md -├── memory/ # Team info, contacts, etc. -│ └── *.memory.md └── hooks/ # Lifecycle event handlers ├── *.json # Hook definitions (JSON) └── scripts/ # Referenced scripts @@ -120,8 +113,6 @@ APM discovers primitives in these locations: *.agent.md *.chatmode.md *.instructions.md -*.context.md -*.memory.md ``` ## Component Types Overview @@ -198,19 +189,6 @@ When asked about branding, apply these standards... → [Complete Skills Guide](../../guides/skills/) -### Context (.context.md) -**Knowledge Management Layer** - Optimized project information for AI consumption - -Context files package project knowledge, architectural decisions, and team standards in formats optimized for LLM consumption and token efficiency. - -```markdown -# Project Architecture -## Core Patterns -- Repository pattern for data access -- Clean architecture with domain separation -- Event-driven communication between services -``` - ## Primitive Types ### Agents @@ -297,58 +275,6 @@ def calculate_metrics(data: List[Dict], threshold: float = 0.5) -> Dict[str, flo """ ``` -### Context Files - -Context files provide background information, project details, and other relevant context that AI assistants should be aware of. - -**Format:** `.context.md` or `.memory.md` files - -**Frontmatter:** -- `description` (optional) - Brief description of the context -- `author` (optional) - Creator information -- `version` (optional) - Version string - -**Examples:** - -Project context (`.apm/context/project-info.context.md`): -```markdown ---- -description: Project overview and architecture ---- - -# APM CLI Project - -## Overview -Command-line tool for AI-powered development workflows. - -## Key Technologies -- Python 3.10+ with Click framework -- YAML frontmatter for configuration -- Rich library for terminal output - -## Architecture -- Modular runtime system -- Plugin-based workflow engine -- Extensible primitive system -``` - -Team information (`.apm/memory/team-contacts.memory.md`): -```markdown -# Team Contacts - -## Development Team -- Lead Developer: Alice Johnson (alice@company.com) -- Backend Engineer: Bob Smith (bob@company.com) - -## Emergency Contacts -- On-call: +1-555-0123 -- Incidents: incidents@company.com - -## Meeting Schedule -- Daily standup: 9:00 AM PST -- Sprint planning: Mondays 2:00 PM PST -``` - ### Hooks Hooks define lifecycle event handlers that run scripts at specific points during AI agent operations (e.g., before/after tool use). @@ -391,7 +317,6 @@ All primitives are automatically validated during discovery: - **Agents**: Must have description and content (supports both `.agent.md` and `.chatmode.md`) - **Instructions**: Must have description, applyTo pattern, and content -- **Context**: Must have content (description optional) Invalid files are skipped with warning messages, allowing valid primitives to continue loading. @@ -475,12 +400,9 @@ Use the structured `.apm/` directories for better organization: ├── agents/ │ ├── code-reviewer.agent.md │ └── documentation-writer.agent.md -├── instructions/ -│ ├── python-style.instructions.md -│ └── typescript-conventions.instructions.md -└── context/ - ├── project-info.context.md - └── architecture-overview.context.md +└── instructions/ + ├── python-style.instructions.md + └── typescript-conventions.instructions.md ``` ### 5. Team Collaboration diff --git a/docs/src/content/docs/reference/cli-commands.md b/docs/src/content/docs/reference/cli-commands.md index 21c4e62b..466ea137 100644 --- a/docs/src/content/docs/reference/cli-commands.md +++ b/docs/src/content/docs/reference/cli-commands.md @@ -446,7 +446,7 @@ apm pack -o dist/ - Scans files for hidden Unicode characters before bundling — warns if findings are detected (non-blocking; consumers are protected by `apm install`/`apm unpack` which block on critical) - Copies files preserving directory structure - Writes an enriched `apm.lock.yaml` inside the bundle with a `pack:` metadata section (the project's own `apm.lock.yaml` is never modified) -- **Plugin format** (`--format plugin`): Remaps `.apm/` content into plugin-native paths (`agents/`, `skills/`, `commands/`, etc.), generates or updates `plugin.json`, merges hooks into a single `hooks.json`. `.apm/context/` and `.apm/memory/` directories are excluded (APM-internal only). `devDependencies` are also excluded from plugin bundles. See [Pack & Distribute](../../guides/pack-distribute/#plugin-format) for the full mapping table +- **Plugin format** (`--format plugin`): Remaps `.apm/` content into plugin-native paths (`agents/`, `skills/`, `commands/`, etc.), generates or updates `plugin.json`, merges hooks into a single `hooks.json`. `devDependencies` are also excluded from plugin bundles. See [Pack & Distribute](../../guides/pack-distribute/#plugin-format) for the full mapping table **Target filtering:** @@ -1009,7 +1009,6 @@ The structure is entirely dictated by the instruction context found in `.apm/` a **Primitive Discovery:** - **Chatmodes**: `.chatmode.md` files in `.apm/chatmodes/`, `.github/chatmodes/` - **Instructions**: `.instructions.md` files in `.apm/instructions/`, `.github/instructions/` -- **Contexts**: `.context.md`, `.memory.md` files in `.apm/context/`, `.github/context/` - **Workflows**: `.prompt.md` files in project and `.github/prompts/` 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. diff --git a/docs/src/content/docs/reference/examples.md b/docs/src/content/docs/reference/examples.md index bda59bbd..43faa6d6 100644 --- a/docs/src/content/docs/reference/examples.md +++ b/docs/src/content/docs/reference/examples.md @@ -291,7 +291,11 @@ apm run feature-review --param feature="user-dashboard" **Scenario**: Quickly get new developers productive with company standards ```yaml -# .apm/context/company-standards.context.md +# .apm/instructions/company-standards.instructions.md +--- +description: Development standards for all AcmeCorp projects +applyTo: "**/*" +--- # Development Standards at AcmeCorp diff --git a/dummy b/dummy new file mode 100644 index 00000000..e69de29b diff --git a/src/apm_cli/bundle/plugin_exporter.py b/src/apm_cli/bundle/plugin_exporter.py index 17b40799..8d1c9ee2 100644 --- a/src/apm_cli/bundle/plugin_exporter.py +++ b/src/apm_cli/bundle/plugin_exporter.py @@ -107,6 +107,36 @@ def _collect_root_plugin_components(project_root: Path) -> List[Tuple[Path, str] return components +def _collect_bare_skill( + install_path: Path, + dep: "LockedDependency", + out: List[Tuple[Path, str]], +) -> None: + """Detect a bare Claude skill (SKILL.md at dep root, no skills/ subdir). + + Bare skills are packages consisting of just ``SKILL.md`` + supporting files + at the package root. They have no ``.apm/`` directory or ``skills/`` + subdirectory, so the normal collectors miss them. Map the entire package + into ``skills/{name}/`` so the plugin host can discover it. + """ + skill_md = install_path / "SKILL.md" + if not skill_md.is_file(): + return + # Already collected via .apm/skills/ or root skills/ — skip + if any(rel.startswith("skills/") for _, rel in out): + return + # Derive a slug: prefer virtual_path (e.g. "frontend-design"), else last + # segment of repo_url (e.g. "my-skill" from "owner/my-skill") + slug = (getattr(dep, "virtual_path", "") or "").strip("/") + if not slug: + slug = dep.repo_url.rsplit("/", 1)[-1] if dep.repo_url else "skill" + for f in sorted(install_path.iterdir()): + if f.is_file() and not f.is_symlink() and f.name not in ( + "apm.yml", "apm.lock.yaml", "plugin.json", + ): + out.append((f, f"skills/{slug}/{f.name}")) + + # -- low-level walkers ------------------------------------------------------- @@ -442,6 +472,9 @@ def export_plugin_bundle( # Also collect root-level plugin-native dirs from the dep dep_components.extend(_collect_root_plugin_components(install_path)) + # Bare Claude skills: SKILL.md at dep root with no skills/ subdir + _collect_bare_skill(install_path, dep, dep_components) + _merge_file_map( file_map, dep_components, dep_name, force, collisions ) diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index 983f5659..17a50b08 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -1293,9 +1293,14 @@ def _collect_descendants(node, visited=None): has_skill = (install_path / "SKILL.md").exists() has_apm = (install_path / "apm.yml").exists() from apm_cli.utils.helpers import find_plugin_json - has_plugin = find_plugin_json(install_path) is not None + plugin_json_path = find_plugin_json(install_path) + has_plugin = plugin_json_path is not None if has_plugin and not has_apm: local_info.package_type = PackageType.MARKETPLACE_PLUGIN + # Normalize: synthesize .apm/ from plugin.json so + # integration can discover and deploy primitives + from apm_cli.deps.plugin_parser import normalize_plugin_directory + normalize_plugin_directory(install_path, plugin_json_path) elif has_skill and has_apm: local_info.package_type = PackageType.HYBRID elif has_skill: diff --git a/tests/unit/test_plugin_exporter.py b/tests/unit/test_plugin_exporter.py index e120728c..46d9be90 100644 --- a/tests/unit/test_plugin_exporter.py +++ b/tests/unit/test_plugin_exporter.py @@ -12,6 +12,7 @@ from apm_cli.bundle.plugin_exporter import ( PackResult, _collect_apm_components, + _collect_bare_skill, _collect_hooks_from_apm, _collect_hooks_from_root, _collect_mcp, @@ -270,6 +271,87 @@ def test_ignores_nonexistent(self, tmp_path): assert comps == [] +class TestCollectBareSkill: + """Tests for _collect_bare_skill — bare SKILL.md at dep root.""" + + def test_bare_skill_detected(self, tmp_path): + """A SKILL.md at root with no skills/ subdir is collected.""" + from apm_cli.bundle.plugin_exporter import _collect_bare_skill + + (tmp_path / "SKILL.md").write_text("# My Skill") + (tmp_path / "LICENSE.txt").write_text("MIT") + dep = LockedDependency( + repo_url="owner/my-skill", + resolved_commit="abc123", + depth=1, + ) + out: list = [] + _collect_bare_skill(tmp_path, dep, out) + rel_paths = [r for _, r in out] + assert "skills/my-skill/SKILL.md" in rel_paths + assert "skills/my-skill/LICENSE.txt" in rel_paths + + def test_virtual_path_used_as_slug(self, tmp_path): + """virtual_path is preferred over repo_url for the skill slug.""" + from apm_cli.bundle.plugin_exporter import _collect_bare_skill + + (tmp_path / "SKILL.md").write_text("# Frontend") + dep = LockedDependency( + repo_url="github/awesome-copilot", + resolved_commit="abc123", + depth=1, + virtual_path="frontend-design", + is_virtual=True, + ) + out: list = [] + _collect_bare_skill(tmp_path, dep, out) + assert any(r.startswith("skills/frontend-design/") for _, r in out) + + def test_skips_when_no_skill_md(self, tmp_path): + """No SKILL.md at root means nothing collected.""" + from apm_cli.bundle.plugin_exporter import _collect_bare_skill + + (tmp_path / "README.md").write_text("hello") + dep = LockedDependency( + repo_url="owner/pkg", resolved_commit="abc", depth=1, + ) + out: list = [] + _collect_bare_skill(tmp_path, dep, out) + assert out == [] + + def test_skips_when_skills_already_collected(self, tmp_path): + """If skills/ was already collected via normal paths, bare skill is skipped.""" + from apm_cli.bundle.plugin_exporter import _collect_bare_skill + + (tmp_path / "SKILL.md").write_text("# Root skill") + dep = LockedDependency( + repo_url="owner/pkg", resolved_commit="abc", depth=1, + ) + out = [(tmp_path / "skills" / "sub" / "SKILL.md", "skills/sub/SKILL.md")] + _collect_bare_skill(tmp_path, dep, out) + # Should not add another entry + assert len(out) == 1 + + def test_excludes_apm_files(self, tmp_path): + """apm.yml, apm.lock.yaml, plugin.json are excluded from bare skill output.""" + from apm_cli.bundle.plugin_exporter import _collect_bare_skill + + (tmp_path / "SKILL.md").write_text("# Skill") + (tmp_path / "apm.yml").write_text("name: x") + (tmp_path / "plugin.json").write_text("{}") + (tmp_path / "apm.lock.yaml").write_text("deps: []") + dep = LockedDependency( + repo_url="owner/pkg", resolved_commit="abc", depth=1, + ) + out: list = [] + _collect_bare_skill(tmp_path, dep, out) + rel_paths = [r for _, r in out] + assert "skills/pkg/SKILL.md" in rel_paths + assert not any("apm.yml" in r for r in rel_paths) + assert not any("plugin.json" in r for r in rel_paths) + assert not any("apm.lock.yaml" in r for r in rel_paths) + + # --------------------------------------------------------------------------- # Unit tests: hooks / MCP collection # --------------------------------------------------------------------------- From e9fd8caceb518fad4cf3ff67cda11a4a2d72f411 Mon Sep 17 00:00:00 2001 From: danielmeppiel Date: Fri, 20 Mar 2026 10:39:22 +0100 Subject: [PATCH 18/18] refactor: centralize package type detection into detect_package_type() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extract the if/elif cascade that maps disk contents → PackageType into a single pure function in validation.py. Replace 3 duplicate sites: - validation.py: validate_apm_package() inline cascade - install.py:1292: fresh local install detection (missed HOOK_PACKAGE) - install.py:1497: cached package detection (missed HOOK_PACKAGE) The two install.py copies were incomplete — they lacked HOOK_PACKAGE and plugin evidence (agents/skills/commands dirs) fallback. A hooks-only package installed locally would have been silently misclassified. Add 11 unit tests covering all 6 PackageType variants + precedence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/apm_cli/commands/install.py | 32 +++--------- src/apm_cli/models/__init__.py | 2 + src/apm_cli/models/validation.py | 85 ++++++++++++++++++-------------- tests/test_apm_package_models.py | 83 ++++++++++++++++++++++++++++++- 4 files changed, 139 insertions(+), 63 deletions(-) diff --git a/src/apm_cli/commands/install.py b/src/apm_cli/commands/install.py index 17a50b08..501377c6 100644 --- a/src/apm_cli/commands/install.py +++ b/src/apm_cli/commands/install.py @@ -1290,23 +1290,14 @@ def _collect_descendants(node, visited=None): ) # Detect package type - has_skill = (install_path / "SKILL.md").exists() - has_apm = (install_path / "apm.yml").exists() - from apm_cli.utils.helpers import find_plugin_json - plugin_json_path = find_plugin_json(install_path) - has_plugin = plugin_json_path is not None - if has_plugin and not has_apm: - local_info.package_type = PackageType.MARKETPLACE_PLUGIN + from apm_cli.models.validation import detect_package_type + pkg_type, plugin_json_path = detect_package_type(install_path) + local_info.package_type = pkg_type + if pkg_type == PackageType.MARKETPLACE_PLUGIN: # Normalize: synthesize .apm/ from plugin.json so # integration can discover and deploy primitives from apm_cli.deps.plugin_parser import normalize_plugin_directory normalize_plugin_directory(install_path, plugin_json_path) - elif has_skill and has_apm: - local_info.package_type = PackageType.HYBRID - elif has_skill: - local_info.package_type = PackageType.CLAUDE_SKILL - elif has_apm: - local_info.package_type = PackageType.APM_PACKAGE # Record for lockfile node = dependency_graph.dependency_tree.get_node(dep_ref.get_unique_key()) @@ -1496,18 +1487,9 @@ def _collect_descendants(node, visited=None): # Detect package_type from disk contents so # skill integration is not silently skipped - skill_md_exists = (install_path / SKILL_MD_FILENAME).exists() - apm_yml_exists = (install_path / APM_YML_FILENAME).exists() - from apm_cli.utils.helpers import find_plugin_json - plugin_json_exists = find_plugin_json(install_path) is not None - if plugin_json_exists and not apm_yml_exists: - cached_package_info.package_type = PackageType.MARKETPLACE_PLUGIN - elif skill_md_exists and apm_yml_exists: - cached_package_info.package_type = PackageType.HYBRID - elif skill_md_exists: - cached_package_info.package_type = PackageType.CLAUDE_SKILL - elif apm_yml_exists: - cached_package_info.package_type = PackageType.APM_PACKAGE + from apm_cli.models.validation import detect_package_type + pkg_type, _ = detect_package_type(install_path) + cached_package_info.package_type = pkg_type # Collect for lockfile (cached packages still need to be tracked) node = dependency_graph.dependency_tree.get_node(dep_ref.get_unique_key()) diff --git a/src/apm_cli/models/__init__.py b/src/apm_cli/models/__init__.py index 31b3cb64..05d9a2c0 100644 --- a/src/apm_cli/models/__init__.py +++ b/src/apm_cli/models/__init__.py @@ -14,6 +14,7 @@ PackageType, ValidationError, ValidationResult, + detect_package_type, validate_apm_package, ) from .results import InstallResult, PrimitiveCounts @@ -35,6 +36,7 @@ "PackageType", "ValidationError", "ValidationResult", + "detect_package_type", "validate_apm_package", # Results "InstallResult", diff --git a/src/apm_cli/models/validation.py b/src/apm_cli/models/validation.py index 419f85c8..8cccdbd6 100644 --- a/src/apm_cli/models/validation.py +++ b/src/apm_cli/models/validation.py @@ -6,7 +6,7 @@ from dataclasses import dataclass from enum import Enum from pathlib import Path -from typing import TYPE_CHECKING, List, Optional +from typing import TYPE_CHECKING, List, Optional, Tuple from ..constants import APM_DIR, APM_YML_FILENAME, SKILL_MD_FILENAME @@ -135,6 +135,45 @@ def _has_hook_json(package_path: Path) -> bool: return False +def detect_package_type( + package_path: Path, +) -> Tuple[PackageType, Optional[Path]]: + """Classify a package directory into a ``PackageType``. + + This is the **single source of truth** for the detection cascade. + The function is pure — no side-effects, no file mutations. + + Returns: + A ``(package_type, plugin_json_path)`` tuple. + *plugin_json_path* is non-None only for ``MARKETPLACE_PLUGIN``. + """ + from ..utils.helpers import find_plugin_json + + has_apm_yml = (package_path / APM_YML_FILENAME).exists() + has_skill_md = (package_path / SKILL_MD_FILENAME).exists() + + if has_apm_yml and has_skill_md: + return PackageType.HYBRID, None + if has_apm_yml: + return PackageType.APM_PACKAGE, None + if has_skill_md: + return PackageType.CLAUDE_SKILL, None + if _has_hook_json(package_path): + return PackageType.HOOK_PACKAGE, None + + plugin_json_path = find_plugin_json(package_path) + has_plugin_evidence = ( + plugin_json_path is not None + or (package_path / "agents").is_dir() + or (package_path / "skills").is_dir() + or (package_path / "commands").is_dir() + ) + if has_plugin_evidence: + return PackageType.MARKETPLACE_PLUGIN, plugin_json_path + + return PackageType.INVALID, None + + def validate_apm_package(package_path: Path) -> ValidationResult: """Validate that a directory contains a valid APM package or Claude Skill. @@ -163,49 +202,22 @@ def validate_apm_package(package_path: Path) -> ValidationResult: return result # Detect package type - apm_yml_path = package_path / APM_YML_FILENAME - skill_md_path = package_path / SKILL_MD_FILENAME - - # Check for plugin.json -- optional metadata, not a detection gate - from ..utils.helpers import find_plugin_json - plugin_json_path = find_plugin_json(package_path) + pkg_type, plugin_json_path = detect_package_type(package_path) + result.package_type = pkg_type - has_apm_yml = apm_yml_path.exists() - has_skill_md = skill_md_path.exists() - has_hooks = _has_hook_json(package_path) - - # Determine package type. apm.yml / SKILL.md take precedence; everything - # else (hooks-only or bare plugin directories) normalizes as a Claude plugin. - if has_apm_yml and has_skill_md: - result.package_type = PackageType.HYBRID - elif has_apm_yml: - result.package_type = PackageType.APM_PACKAGE - elif has_skill_md: - result.package_type = PackageType.CLAUDE_SKILL - elif has_hooks: - result.package_type = PackageType.HOOK_PACKAGE - else: - # Require plugin.json or at least one standard component directory - has_plugin_evidence = ( - plugin_json_path is not None - or (package_path / "agents").is_dir() - or (package_path / "skills").is_dir() - or (package_path / "commands").is_dir() + if pkg_type == PackageType.INVALID: + result.add_error( + f"Not a valid APM package: no apm.yml, SKILL.md, hooks, or " + f"plugin structure found in {package_path.name}" ) - if has_plugin_evidence: - result.package_type = PackageType.MARKETPLACE_PLUGIN - else: - result.add_error( - f"Not a valid APM package: no apm.yml, SKILL.md, hooks, or " - f"plugin structure found in {package_path.name}" - ) - return result + return result # Handle hook-only packages (no apm.yml or SKILL.md) if result.package_type == PackageType.HOOK_PACKAGE: return _validate_hook_package(package_path, result) # Handle Claude Skills (no apm.yml) - auto-generate minimal apm.yml + skill_md_path = package_path / SKILL_MD_FILENAME if result.package_type == PackageType.CLAUDE_SKILL: return _validate_claude_skill(package_path, skill_md_path, result) @@ -214,6 +226,7 @@ def validate_apm_package(package_path: Path) -> ValidationResult: return _validate_marketplace_plugin(package_path, plugin_json_path, result) # Standard APM package validation (has apm.yml) + apm_yml_path = package_path / APM_YML_FILENAME return _validate_apm_package_with_yml(package_path, apm_yml_path, result) diff --git a/tests/test_apm_package_models.py b/tests/test_apm_package_models.py index d3e3893b..34d8b03d 100644 --- a/tests/test_apm_package_models.py +++ b/tests/test_apm_package_models.py @@ -651,7 +651,7 @@ def test_validate_missing_apm_yml(self): result = validate_apm_package(Path(tmpdir)) # Empty directories without plugin.json or component dirs are not valid assert not result.is_valid - assert result.package_type is None + assert result.package_type == PackageType.INVALID def test_validate_invalid_apm_yml(self): """Test validating directory with invalid apm.yml.""" @@ -926,7 +926,86 @@ def test_validate_empty_dir_is_invalid(self): result = validate_apm_package(Path(tmpdir)) # Empty directories without plugin.json or component dirs are not valid assert not result.is_valid - assert result.package_type is None + assert result.package_type == PackageType.INVALID + + +from src.apm_cli.models.validation import detect_package_type + + +class TestDetectPackageType: + """Tests for the centralized detect_package_type() function.""" + + def test_hybrid_when_both_apm_yml_and_skill_md(self, tmp_path): + (tmp_path / "apm.yml").write_text("name: test") + (tmp_path / "SKILL.md").write_text("# Skill") + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.HYBRID + assert pj_path is None + + def test_apm_package_when_only_apm_yml(self, tmp_path): + (tmp_path / "apm.yml").write_text("name: test") + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.APM_PACKAGE + assert pj_path is None + + def test_claude_skill_when_only_skill_md(self, tmp_path): + (tmp_path / "SKILL.md").write_text("# Skill") + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.CLAUDE_SKILL + assert pj_path is None + + def test_hook_package_when_hooks_json(self, tmp_path): + hooks_dir = tmp_path / "hooks" + hooks_dir.mkdir() + (hooks_dir / "pre-commit.json").write_text("{}") + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.HOOK_PACKAGE + assert pj_path is None + + def test_marketplace_plugin_with_plugin_json(self, tmp_path): + (tmp_path / "plugin.json").write_text('{"name": "test"}') + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.MARKETPLACE_PLUGIN + assert pj_path is not None + assert pj_path.name == "plugin.json" + + def test_marketplace_plugin_with_agents_dir(self, tmp_path): + (tmp_path / "agents").mkdir() + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.MARKETPLACE_PLUGIN + assert pj_path is None + + def test_marketplace_plugin_with_skills_dir(self, tmp_path): + (tmp_path / "skills").mkdir() + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.MARKETPLACE_PLUGIN + assert pj_path is None + + def test_marketplace_plugin_with_commands_dir(self, tmp_path): + (tmp_path / "commands").mkdir() + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.MARKETPLACE_PLUGIN + assert pj_path is None + + def test_invalid_when_empty_dir(self, tmp_path): + pkg_type, pj_path = detect_package_type(tmp_path) + assert pkg_type == PackageType.INVALID + assert pj_path is None + + def test_apm_yml_takes_precedence_over_plugin_json(self, tmp_path): + (tmp_path / "apm.yml").write_text("name: test") + (tmp_path / "plugin.json").write_text('{"name": "test"}') + pkg_type, _ = detect_package_type(tmp_path) + assert pkg_type == PackageType.APM_PACKAGE + + def test_hook_package_apm_yml_precedence(self, tmp_path): + """apm.yml takes precedence even when hooks exist.""" + (tmp_path / "apm.yml").write_text("name: test") + hooks_dir = tmp_path / "hooks" + hooks_dir.mkdir() + (hooks_dir / "pre-commit.json").write_text("{}") + pkg_type, _ = detect_package_type(tmp_path) + assert pkg_type == PackageType.APM_PACKAGE class TestGitReferenceUtils: