feat(manifest): add optional icon field supporting emoji, octicon, and SVG resources - #58047
Conversation
… and documentation Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
Invalid emoji values pass validation, local icons are dropped, generated content is inconsistent, and two executable workflows are deleted.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds optional package-manifest icons with emoji, Octicon, and SVG resource support.
Changes:
- Extends manifest schema, models, validation, and resolution.
- Adds tests and documentation.
- Updates generated assets, including unintended workflow deletions.
File summaries
| File | Description |
|---|---|
pkg/parser/schemas/aw_manifest_schema.json |
Adds the icon property. |
pkg/cli/data/agentic_workflows_fallback_aw_files.json |
Adds compat.md fallback. |
pkg/cli/add_package_manifest.go |
Adds resolved icon metadata. |
pkg/cli/add_package_manifest_test.go |
Tests icon parsing and validation. |
pkg/cli/add_package_manifest_resolve.go |
Propagates remote package icons. |
pkg/cli/add_package_manifest_parse.go |
Parses and validates icons. |
docs/src/content/docs/specs/repository-package-manifest-specification.md |
Specifies icon formats. |
docs/src/content/docs/reference/aw-yml-package-manifest.md |
Documents the icon field. |
.github/workflows/firewall.lock.yml |
Deletes the compiled firewall workflow. |
.github/workflows/example-permissions-warning.lock.yml |
Deletes the compiled example workflow. |
.github/skills/agentic-workflows/SKILL.md |
Removes the compat.md entry. |
Review details
Suppressed comments (2)
.github/workflows/firewall.lock.yml:1
- This removes the compiled GitHub Actions workflow while the unchanged
.github/workflows/firewall.mdsource remains. The.lock.ymlfile is the executable workflow, so deleting it disables the Firewall Test Agent and is unrelated to the manifest-icon feature. Restore or regenerate this lock file before merging.
.github/workflows/example-permissions-warning.lock.yml:1 - This removes the compiled GitHub Actions workflow while the unchanged
.github/workflows/example-permissions-warning.mdsource remains. The.lock.ymlfile is the executable workflow, so deleting it disables the example workflow (and breaks its status link) despite this PR being scoped to manifest icons. Restore or regenerate this lock file before merging.
- Files reviewed: 6/307 changed files
- Comments generated: 4
- Review effort level: Balanced
| @@ -52,6 +52,7 @@ type resolvedRepositoryPackage struct { | |||
| ResolvedRef string | |||
| Name string | |||
| Emoji string | |||
| Icon string | |||
| if !isStr { | ||
| return fmt.Errorf("invalid Agentic Workflow manifest %q: icon must be a string", manifestPath) | ||
| } | ||
| manifest.Icon = icon |
| if unicode.Is(unicode.So, r) || (r >= 0x1F300 && r <= 0x1F9FF) || (r >= 0x2600 && r <= 0x27BF) || (r >= 0x1F1E6 && r <= 0x1F1FF) || r == 0x200D || r == 0xFE0F || (r >= 0x1F3FB && r <= 0x1F3FF) || r == 0x20E3 { | ||
| hasSymbol = true | ||
| } else if !unicode.Is(unicode.M, r) && r != '#' && r != '*' && (r < '0' || r > '9') { |
|
@copilot merge main and recompile |
|
@copilot Please address the current blocking feedback on this manifest icon PR before handing back to maintainers.
|
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Implemented and pushed in the latest commit: merged current main, regenerated workflow outputs, restored executable lock files, preserved local icons, canonicalized icon values, and tightened emoji validation with regression tests. Focused CLI tests pass; the custom linter still reports pre-existing function-length/path-concatenation findings in add_workflow_resolution.go. CI needs a maintainer re-trigger. |
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Investigated run 33696373964, job 100466381530. The failure was |
There was a problem hiding this comment.
Warning
Firewall blocked 2 domains
The following domains were blocked by the firewall during workflow execution:
clients2.google.commtalk.google.com
To allow these domains, add them to the network.allowed list in your workflow frontmatter:
network:
allowed:
- defaults
- "clients2.google.com"
- "mtalk.google.com"See Network Configuration for more information.
💥 [THE END] — Illustrated by Smoke Claude · claude · sonnet46 · 70.1 AIC · ⌖ 18.7 AIC · ⊞ 7.8K
Comment /smoke-claude to run again
| | `min-version` | string | No | Minimum compatible `gh aw` version in `vMAJOR.minor.patch` form, such as `v0.38.0`. | | ||
| | `name` | string | Yes | Human-readable package name. Must be non-empty after trimming whitespace. | | ||
| | `emoji` | string | No | Optional package emoji for display in package metadata. | | ||
| | `icon` | string | No | Optional package icon: an emoji, a GitHub primer octicon name in `:name:` format (e.g. `:check-circle:`), or a package resource path to an SVG file. | |
There was a problem hiding this comment.
✅ Good addition! Consider adding an example value to make the icon format clearer for end users. Something like: emoji: "🚀" or octicon: ":rocket:" or svg: "assets/icon.svg".
| | `min-version` | string | No | Minimum supported `gh-aw` version. | | ||
| | `name` | string | Yes | Human-readable package name. | | ||
| | `emoji` | string | No | Optional package emoji for display in package metadata. | | ||
| | `icon` | string | No | Optional package icon: an emoji, a GitHub primer octicon name (`:...:`), or an SVG resource path. | |
There was a problem hiding this comment.
📝 The icon field specification looks good! It would be helpful to mention validation rules — for example, does the SVG path need to be relative to the package root? Clarifying constraints in the spec would prevent implementation ambiguity.
|
🎉 This pull request is included in a new release. Release: |
Adds support for an optional
iconfield inaw.ymlpackage manifests. Icons accept a Unicode emoji, a GitHub Primer Octicon name using:name:syntax, or a path to an SVG file declared in the packageresourceslist.Manifest Example
Schema & Data Models
pkg/parser/schemas/aw_manifest_schema.json): Added optionaliconstring property.pkg/cli/): AddedIcon stringfield torepositoryPackageManifestandresolvedRepositoryPackage.Validation & Resolution
pkg/cli/add_package_manifest_parse.go): AddedvalidateRepositoryPackageManifestIconto validate the three permitted icon types::a-z0-9-:syntax..svgfile paths matching a declared package resourcesrcordst.pkg/cli/add_package_manifest_resolve.go): PropagatedIconto resolved repository package output.Specifications & Reference
docs/src/content/docs/): Updated reference tables and specification details inaw-yml-package-manifest.mdandrepository-package-manifest-specification.md.✨ PR Review Safe Output Test - Run 33698951158
Warning
Firewall blocked 2 domains
The following domains were blocked by the firewall during workflow execution:
clients2.google.commtalk.google.comTo allow these domains, add them to the
network.allowedlist in your workflow frontmatter:See Network Configuration for more information.