Skip to content

Commit e19e3e6

Browse files
committed
feat: Add SkillMapper display overlay for skill ID, description, and tags, and remove the unused _build_extensions() method and its documentation.
1 parent 3d384a5 commit e19e3e6

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.3.0] - 2026-03-23
9+
10+
### Added
11+
12+
- **Display overlay in `SkillMapper`** (§5.13) — `to_skill()` reads `metadata["display"]["a2a"]` for skill id, description, and tags when present.
13+
- Skill id: `metadata["display"]["a2a"]["alias"]``metadata["display"]["alias"]``module_id`.
14+
- Description: `metadata["display"]["a2a"]["description"]``metadata["display"]["description"]``module.description`.
15+
- Tags: `metadata["display"]["tags"]``module.tags`.
16+
- Updated feature spec: `docs/features/adapters.md` — SkillMapper field mapping table updated, `_build_extensions` noted as removed.
17+
18+
### Removed
19+
20+
- **`_build_extensions()` dead code**`AgentSkill` has no `extensions` field in the A2A SDK; this method could never be wired in. Deleted along with its 3 tests.
21+
22+
### Changed
23+
24+
- Dependency bump: requires `apcore-toolkit >= 0.4.0` for `DisplayResolver`.
25+
26+
### Tests
27+
28+
- `TestSkillMapperDisplayOverlay` (6 tests): A2A alias used as skill id, A2A description used, tags from display overlay, surface-specific override wins, fallback to scanner values when no overlay.
29+
- Removed 3 `test__build_extensions_*` tests (dead code).
30+
31+
---
32+
833
## [0.2.1] - 2026-03-22
934

1035
### Changed

docs/features/adapters.md

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,20 @@ class SkillMapper:
100100
def _compute_input_modes(self, descriptor: object) -> list[str]: ...
101101
def _compute_output_modes(self, descriptor: object) -> list[str]: ...
102102
def _build_examples(self, descriptor: object) -> list[str]: ... # max 10, title strings only
103-
def _build_extensions(self, annotations: object | None) -> dict | None: ...
103+
# Note: _build_extensions() was removed — AgentSkill has no `extensions` field in a2a-sdk
104104
```
105105

106106
**Field mapping:**
107107

108108
| apcore field | A2A Skill field | Notes |
109109
|---|---|---|
110-
| `module_id` | `id` | Verbatim |
111-
| humanize(`module_id`) | `name` | Dots/underscores → spaces, title case |
112-
| `description` | `description` | Verbatim. Empty/None → return `None` |
113-
| `tags` | `tags` | Verbatim |
110+
| `metadata["display"]["a2a"]["alias"]` or `metadata["display"]["alias"]` or `module_id` | `id` | Display overlay alias takes priority |
111+
| `metadata["display"]["a2a"]["description"]` or `metadata["display"]["description"]` or `description` | `description` | Display overlay description takes priority. Empty/None → return `None` |
112+
| `metadata["display"]["tags"]` or `tags` | `tags` | Display overlay tags take priority |
114113
| `examples[:10]` | `examples` | `title``name`, `inputs` → JSON string in TextPart |
115114
| computed | `inputModes` | See mode logic below |
116115
| computed | `outputModes` | See mode logic below |
117-
| `annotations` | *(not mapped)* | `_build_extensions()` exists but `a2a.types.AgentSkill` has no `extensions` field; annotations are available via the Explorer UI's `_inputSchemas` enrichment instead |
116+
| `annotations` | *(not mapped)* | See note below |
118117

119118
**Input/output mode logic:**
120119

@@ -126,17 +125,7 @@ class SkillMapper:
126125
| `output_schema` defined | | `["application/json"]` |
127126
| No `output_schema` | | `["text/plain"]` |
128127

129-
**Extensions structure (when annotations is not None):**
130-
```json
131-
{
132-
"apcore": {
133-
"annotations": {
134-
"readonly": false, "destructive": false, "idempotent": false,
135-
"requires_approval": false, "open_world": true
136-
}
137-
}
138-
}
139-
```
128+
**Note on annotations:** `_build_extensions()` has been removed. `a2a.types.AgentSkill` has no `extensions` field in the A2A SDK; apcore annotations are available via the Explorer UI's `_inputSchemas` enrichment instead.
140129

141130
---
142131

0 commit comments

Comments
 (0)