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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .changeset/tagged-adapter-asset-contract.md

This file was deleted.

8 changes: 4 additions & 4 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

178 changes: 155 additions & 23 deletions facets.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"lockfileVersion": 1,
"lockfileVersion": 0.2,
"facets": {
"@agentfacets/address-pr-feedback": {
"source": {
Expand All @@ -12,17 +12,35 @@
{
"scope": "project",
"type": "skill",
"name": "address-pr-feedback-rules"
"name": "address-pr-feedback-rules",
"files": [
{
"path": "skills/address-pr-feedback-rules/SKILL.md",
"integrity": "sha256:28f2b98176327d8fea6377f93ef1ed75e00ada1a6040a0fd192a3e0bcf1c3980"
}
]
},
{
"scope": "project",
"type": "agent",
"name": "address-pr-feedback"
"name": "address-pr-feedback",
"files": [
{
"path": "agents/address-pr-feedback.md",
"integrity": "sha256:8d13a6281e9ed9860d68d97beb76ed833bce6c9a12e38569780939db482b4c03"
}
]
},
{
"scope": "project",
"type": "command",
"name": "address-pr-feedback"
"name": "address-pr-feedback",
"files": [
{
"path": "commands/address-pr-feedback.md",
"integrity": "sha256:1bc6f00927594ea4dcc245ae8f5140fe1ebc304376bf53a524ec3e1f21cce203"
}
]
}
]
},
Expand All @@ -37,42 +55,90 @@
{
"scope": "project",
"type": "skill",
"name": "openspec-adversary-author"
"name": "openspec-adversary-author",
"files": [
{
"path": "skills/openspec-adversary-author/SKILL.md",
"integrity": "sha256:b292f75ec1c3e8d72c10552951a285e61212ca849d8d6ab122c5c68427916980"
}
]
},
{
"scope": "project",
"type": "skill",
"name": "openspec-adversary-compare"
"name": "openspec-adversary-compare",
"files": [
{
"path": "skills/openspec-adversary-compare/SKILL.md",
"integrity": "sha256:62cc709a34cf777fff7778036f2a1a264bdb7d129b6f3ab6c151eb0201d99ba1"
}
]
},
{
"scope": "project",
"type": "skill",
"name": "openspec-adversary-reconcile"
"name": "openspec-adversary-reconcile",
"files": [
{
"path": "skills/openspec-adversary-reconcile/SKILL.md",
"integrity": "sha256:d8c612e6a05e9e08be643de455d880631f12a84c64095c628bfb08b31a78c343"
}
]
},
{
"scope": "project",
"type": "skill",
"name": "openspec-adversary-run"
"name": "openspec-adversary-run",
"files": [
{
"path": "skills/openspec-adversary-run/SKILL.md",
"integrity": "sha256:67124c58eeda707a4e8deaabb4453cb034332b1f67a65111082121398ca8d063"
}
]
},
{
"scope": "project",
"type": "agent",
"name": "openspec-adversary"
"name": "openspec-adversary",
"files": [
{
"path": "agents/openspec-adversary.md",
"integrity": "sha256:e0cc15244e9303ade3b1c66047ca0cefe574ead40b77ee0c482efd61aac979d1"
}
]
},
{
"scope": "project",
"type": "command",
"name": "reconcile-adversary"
"name": "reconcile-adversary",
"files": [
{
"path": "commands/reconcile-adversary.md",
"integrity": "sha256:bb81dce97f2c2734cc5b2a460a1f4fd3358409157ff52d1df7cd4bb432784bbc"
}
]
},
{
"scope": "project",
"type": "command",
"name": "run-adversary"
"name": "run-adversary",
"files": [
{
"path": "commands/run-adversary.md",
"integrity": "sha256:405a35ab34f4e7126c09e2362c86f2f15301d5595a29cd7017083fdbdc53036c"
}
]
},
{
"scope": "project",
"type": "command",
"name": "run-inline-adversary"
"name": "run-inline-adversary",
"files": [
{
"path": "commands/run-inline-adversary.md",
"integrity": "sha256:fbfe404f9d45ca974bcce172fd877d15238e676a510978564e90aa2c1c5492a4"
}
]
}
]
},
Expand All @@ -87,12 +153,24 @@
{
"scope": "project",
"type": "skill",
"name": "openspec-design-review-rules"
"name": "openspec-design-review-rules",
"files": [
{
"path": "skills/openspec-design-review-rules/SKILL.md",
"integrity": "sha256:bcf817e5513782cedc32add43391fc7149e882639d28b6e4c33447197bee7de3"
}
]
},
{
"scope": "project",
"type": "command",
"name": "review-openspec-design"
"name": "review-openspec-design",
"files": [
{
"path": "commands/review-openspec-design.md",
"integrity": "sha256:09fd9332d8959c6c5f955083791478d6b2346f9610f20b09ebd6528704bd77ab"
}
]
}
]
},
Expand All @@ -107,22 +185,46 @@
{
"scope": "project",
"type": "skill",
"name": "cowsay-rules"
"name": "cowsay-rules",
"files": [
{
"path": "skills/cowsay-rules/SKILL.md",
"integrity": "sha256:1160ade3622a3d45114c3cf6d9fccb0e565b880ac9728886ae69e6766bde5092"
}
]
},
{
"scope": "project",
"type": "agent",
"name": "cowsay"
"name": "cowsay",
"files": [
{
"path": "agents/cowsay.md",
"integrity": "sha256:61190c64c8b6f925718c6d27fa21c2ee1af7299fb00eeb21c65201cb0fec0b6d"
}
]
},
{
"scope": "project",
"type": "command",
"name": "cowchat"
"name": "cowchat",
"files": [
{
"path": "commands/cowchat.md",
"integrity": "sha256:2cc1f8723c1ac12eabaeeb56ff0f95cc4d22d5cb687bfc40f7015244ffcc0231"
}
]
},
{
"scope": "project",
"type": "command",
"name": "cowsay"
"name": "cowsay",
"files": [
{
"path": "commands/cowsay.md",
"integrity": "sha256:dfb51935425ff8efade68abc246b35f366aa62ac44b242210035b88f397ec6fe"
}
]
}
]
},
Expand All @@ -137,27 +239,57 @@
{
"scope": "project",
"type": "skill",
"name": "viper-execution-rules"
"name": "viper-execution-rules",
"files": [
{
"path": "skills/viper-execution-rules/SKILL.md",
"integrity": "sha256:13cd22a370049d60e5b3b367c34797e2c3d00c64bd5110f6979740751667b4e3"
}
]
},
{
"scope": "project",
"type": "skill",
"name": "viper-planning"
"name": "viper-planning",
"files": [
{
"path": "skills/viper-planning/SKILL.md",
"integrity": "sha256:68dbfd63d3a1d058642fcfa8772e7bba7e8d43624784ecf1e64b52179761ec90"
}
]
},
{
"scope": "project",
"type": "command",
"name": "viper-continue"
"name": "viper-continue",
"files": [
{
"path": "commands/viper-continue.md",
"integrity": "sha256:c18e84a503bf98f8f153e9af33c1007ad01de46a9ff9b289a2b5f7072c9a51bf"
}
]
},
{
"scope": "project",
"type": "command",
"name": "viper-plan"
"name": "viper-plan",
"files": [
{
"path": "commands/viper-plan.md",
"integrity": "sha256:594a642ae65fa75d0881e6ace749a65706ef55aecbe72aba17c0f9fca7c7bc56"
}
]
},
{
"scope": "project",
"type": "command",
"name": "viper-run"
"name": "viper-run",
"files": [
{
"path": "commands/viper-run.md",
"integrity": "sha256:bfff09006b1e319e441ccc46c0b10d5079ee2c9e35231cf64e9931b606cde983"
}
]
}
]
}
Expand Down
11 changes: 11 additions & 0 deletions packages/adapter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# @agent-facets/adapter

## 0.28.0

### Minor Changes

- [#438](https://github.com/agent-facets/facets/pull/438) [`d20cdae`](https://github.com/agent-facets/facets/commit/d20cdaebeefaa365fcd1eb06da80db59b2c1201c) Thanks [@eXamadeus](https://github.com/eXamadeus)! - **BREAKING (pre-1.0 minor):** the adapter asset contract is now tagged request/result unions instead of positional parameters, and the adapter API identifier advances from `0.0` to `0.1`.
`installAsset`, `readAsset`, and `deleteAsset` each take a single request object tagged by `assetType` and return a discriminated result — expected failures (`not-found`, `invalid-companion-path`, `unsupported-scope`, `not-implemented`, `io-failed`) are structured values, never thrown errors. Skill requests carry a companion byte map plus the caller-verified owned companion path set for atomic multi-file skill bundles; agent and command requests structurally cannot carry companions. `defineAdapter` stubs for omitted methods now return `not-implemented` failures instead of throwing.
The SDK's canonical `ADAPTER_API_VERSION` is now `0.1`, identifying this tagged contract; `defineAdapter()` stamps it and first-party packages publish `"facetAdapterApiVersion": "0.1"`. `0.0` named the earlier positional contract: a CLI that supports only `0.1` classifies a `0.0` adapter as well-formed but unsupported and fails closed (before any contract method or project write) with reinstall guidance. There is no positional/tagged compatibility bridge — an adapter built against `0.0` must be rebuilt against a `0.1` SDK release and reinstalled.
New SDK helpers: `installSkillBundle` / `readSkillBundle` / `deleteSkillBundle` (staged all-or-nothing bundle replacement with rollback, ownership-set-based deletion, and empty-directory pruning), `installSingleFileAsset` / `readSingleFileAsset` / `deleteSingleFileAsset` (result-shaped single-file operations), and `validateContainedRelativePath` (pre-filesystem containment validation applied to every supplied companion path).
Every adapter implementing the previous positional contract must migrate. The first-party claude-code, opencode, and codex adapters are migrated in their matching minor releases; codex delete operations now prune emptied directories consistently with the other adapters.
Release ordering: this SDK release and the three first-party adapter releases publish `0.1` to npm **before** any `agent-facets` CLI release requires `0.1`. Until that CLI ships, existing `0.0` CLIs keep selecting the highest compatible `0.0` adapter release, so this changeset intentionally carries **no** `agent-facets` bump — the CLI change that makes `0.1` the supported set lands in a later release cycle gated on all three first-party adapters having published `facetAdapterApiVersion: 0.1`.

## 0.27.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/adapter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"url": "https://github.com/agent-facets/facets",
"directory": "packages/adapter"
},
"version": "0.27.0",
"version": "0.28.0",
"type": "module",
"files": [
"dist"
Expand Down
11 changes: 11 additions & 0 deletions packages/adapters/claude-code/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# @agent-facets/adapter-claude-code

## 0.9.0

### Minor Changes

- [#438](https://github.com/agent-facets/facets/pull/438) [`d20cdae`](https://github.com/agent-facets/facets/commit/d20cdaebeefaa365fcd1eb06da80db59b2c1201c) Thanks [@eXamadeus](https://github.com/eXamadeus)! - **BREAKING (pre-1.0 minor):** the adapter asset contract is now tagged request/result unions instead of positional parameters, and the adapter API identifier advances from `0.0` to `0.1`.
`installAsset`, `readAsset`, and `deleteAsset` each take a single request object tagged by `assetType` and return a discriminated result — expected failures (`not-found`, `invalid-companion-path`, `unsupported-scope`, `not-implemented`, `io-failed`) are structured values, never thrown errors. Skill requests carry a companion byte map plus the caller-verified owned companion path set for atomic multi-file skill bundles; agent and command requests structurally cannot carry companions. `defineAdapter` stubs for omitted methods now return `not-implemented` failures instead of throwing.
The SDK's canonical `ADAPTER_API_VERSION` is now `0.1`, identifying this tagged contract; `defineAdapter()` stamps it and first-party packages publish `"facetAdapterApiVersion": "0.1"`. `0.0` named the earlier positional contract: a CLI that supports only `0.1` classifies a `0.0` adapter as well-formed but unsupported and fails closed (before any contract method or project write) with reinstall guidance. There is no positional/tagged compatibility bridge — an adapter built against `0.0` must be rebuilt against a `0.1` SDK release and reinstalled.
New SDK helpers: `installSkillBundle` / `readSkillBundle` / `deleteSkillBundle` (staged all-or-nothing bundle replacement with rollback, ownership-set-based deletion, and empty-directory pruning), `installSingleFileAsset` / `readSingleFileAsset` / `deleteSingleFileAsset` (result-shaped single-file operations), and `validateContainedRelativePath` (pre-filesystem containment validation applied to every supplied companion path).
Every adapter implementing the previous positional contract must migrate. The first-party claude-code, opencode, and codex adapters are migrated in their matching minor releases; codex delete operations now prune emptied directories consistently with the other adapters.
Release ordering: this SDK release and the three first-party adapter releases publish `0.1` to npm **before** any `agent-facets` CLI release requires `0.1`. Until that CLI ships, existing `0.0` CLIs keep selecting the highest compatible `0.0` adapter release, so this changeset intentionally carries **no** `agent-facets` bump — the CLI change that makes `0.1` the supported set lands in a later release cycle gated on all three first-party adapters having published `facetAdapterApiVersion: 0.1`.

## 0.8.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/adapters/claude-code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"url": "https://github.com/agent-facets/facets",
"directory": "packages/adapters/claude-code"
},
"version": "0.8.0",
"version": "0.9.0",
"type": "module",
"files": [
"dist"
Expand Down
Loading