You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* chore(release): cut 0.12.0
Promotes [Unreleased] -> [0.12.0] - 2026-05-03 and bumps
pyproject.toml + uv.lock to 0.12.0.
Sanitization:
- Filled the residual (#PR_NUMBER) placeholder on the
local-bundle UnboundLocalError fix entry -> (#1108)
- Preserved an empty [Unreleased] section above 0.12.0 so the
next contributor PR can append entries without re-introducing
the heading
Version-bump rationale: 0.12.0 (minor bump) chosen over 0.11.1
because this release ships TWO BREAKING changes:
- 'apm pack' now produces a Claude Code plugin directory by
default; the legacy bundle layout requires --format apm (#1061)
- Dropped support for .collection.yml / .collection.yaml virtual
packages (#1097)
plus several net-new features (Windsurf target, Claude Code MCP
install target, --target agent-skills, apm install <local-bundle>,
apm compile -t copilot, marketplace add HTTPS/nested URLs,
slash-command argument hints in Claude). Strict semver in 0.x:
minor for features-with-break, patch only for bugfixes.
44 commits since v0.11.0.
Validation:
- ruff check src/ tests/ -- silent
- ruff format --check src/ tests/ -- silent
- uv lock -- regenerated cleanly
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(install): align local-bundle hash format with compute_file_hash
integrate_local_bundle() recorded bare hex hashes in
local_deployed_file_hashes, but cleanup.py provenance check compares
against compute_file_hash() which returns 'sha256:<hex>'. The mismatch
caused stale-cleanup of local-bundle files to skip every file as
'user-edited' instead of removing files no longer in the bundle.
- services.py: write 'sha256:<hex>' on real deploy and dry-run paths
- cleanup.py: defensively normalize both sides of the equality check
(handles legacy 0.12.0-rc lockfiles with bare hex)
- regression tests cover both the format consistency and the
cross-flow cleanup interaction
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* ci: wire pack/compile/transitive integration tests into CI
These three integration test files exist and pass locally but were not
enumerated in scripts/test-integration.sh, so CI silently skipped them
and could not catch regressions in:
- apm pack default format (0.12.0 flipped from 'apm' to 'plugin')
- apm compile --target copilot (.github/copilot-instructions.md)
- transitive local_path anchoring across multi-level local chains
Surfaced by the test-coverage review of PR #1112.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Daniel Meppiel <copilot-rework@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [0.12.0] - 2026-05-03
11
+
10
12
### Added
11
13
12
14
-**`--target agent-skills` deploys skills to `.agents/skills/` (cross-client shared directory).** The new target writes `SKILL.md` files to the [agentskills.io](https://agentskills.io) standard location without tying them to a single client. Excluded from `--target all` (explicit opt-in only); combine with `--target all,agent-skills` for both. Deduplicates with Codex when both targets resolve to the same path. User-scope (`-g`) deploys to `~/.agents/skills/`. (closes #737)
@@ -43,7 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
43
45
44
46
-**`apm install` now anchors transitive `local_path` deps on the declaring package's directory (npm/pip/cargo parity).** Sibling/monorepo layouts (e.g. `../base` declared inside `packages/specialized/apm.yml`) now resolve relative to the declaring package, not the consumer's project root. **Security tightening:** remote-cloned packages can no longer declare `local_path` deps -- both relative and absolute paths are rejected at `ERROR` severity at resolve time. (#1111, closes #857) Thanks @JahanzaibTayyab.
45
47
-`apm compile` no longer silently drops instructions without an `applyTo` pattern from generated `AGENTS.md` and `CLAUDE.md`; globals now render under a `## Global Instructions` section, matching the optimizer's existing `(global)` placement (#1088, closes #1072)
46
-
-`apm install` no longer masks local-bundle install failures with `UnboundLocalError`. (#PR_NUMBER)
48
+
-`apm install` no longer masks local-bundle install failures with `UnboundLocalError`. (#1108)
47
49
-**`apm install <pkg>@<marketplace>` no longer fails for all marketplace packages.** The install resolver now accepts both legacy and current marketplace key names: `repository`/`repo` for github sources, `url`/`repo` for git-subdir sources, and `type`/`source` as the source-type discriminator. A scheme guard rejects full URLs passed through the `url` fallback. (#1106, closes #1105)
48
50
-**`apm install --update` no longer fails for GHES/generic hosts** that rely on git credential helpers (e.g., `git-credential-manager`) for authentication. The preflight auth probe was blocking credential helpers by setting `GIT_CONFIG_GLOBAL=/dev/null`; it now uses the same relaxed environment as the clone fallback path for non-GitHub/non-ADO hosts. (#1082)
49
51
-`apm compile --dry-run -t copilot` now faithfully simulates the hand-authored file guard: a `.github/copilot-instructions.md` lacking the APM marker is reported as `skipped=1` (matching the real run) instead of as `generated=1`. Previously dry-run would claim a write that a real run would refuse, giving CI preview gates a false signal. (#1048)
0 commit comments