Skip to content

feat(manifest): add optional icon field supporting emoji, octicon, and SVG resources - #58047

Merged
pelikhan merged 9 commits into
mainfrom
copilot/add-icon-field-to-aw-manifest
Sep 3, 2026
Merged

feat(manifest): add optional icon field supporting emoji, octicon, and SVG resources#58047
pelikhan merged 9 commits into
mainfrom
copilot/add-icon-field-to-aw-manifest

Conversation

Copilot AI commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Adds support for an optional icon field in aw.yml package manifests. Icons accept a Unicode emoji, a GitHub Primer Octicon name using :name: syntax, or a path to an SVG file declared in the package resources list.

Manifest Example

manifest-version: "1"
name: "my-package"
icon: ":check-circle:" # or "📦" or "assets/logo.svg"
resources:
  - src: "assets/logo.svg"

Schema & Data Models

  • JSON Schema (pkg/parser/schemas/aw_manifest_schema.json): Added optional icon string property.
  • Structs (pkg/cli/): Added Icon string field to repositoryPackageManifest and resolvedRepositoryPackage.

Validation & Resolution

  • Icon Parsing (pkg/cli/add_package_manifest_parse.go): Added validateRepositoryPackageManifestIcon to validate the three permitted icon types:
    • Unicode emoji character sequences.
    • Primer Octicon identifiers matching :a-z0-9-: syntax.
    • Case-insensitive .svg file paths matching a declared package resource src or dst.
  • Package Resolution (pkg/cli/add_package_manifest_resolve.go): Propagated Icon to resolved repository package output.

Specifications & Reference

  • Documentation (docs/src/content/docs/): Updated reference tables and specification details in aw-yml-package-manifest.md and repository-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.com
  • mtalk.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

… and documentation

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title feat(manifest): add optional icon field supporting emoji, octicon, or SVG resource feat(manifest): add optional icon field supporting emoji, octicon, and SVG resources Sep 2, 2026
Copilot AI requested a review from pelikhan September 2, 2026 22:57
@pelikhan
pelikhan marked this pull request as ready for review September 2, 2026 22:59
Copilot AI balanced review requested due to automatic review settings September 2, 2026 22:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.md source remains. The .lock.yml file 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.md source remains. The .lock.yml file 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

Comment thread .github/skills/agentic-workflows/SKILL.md
@@ -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
Comment thread pkg/cli/add_package_manifest_parse.go Outdated
Comment on lines +346 to +348
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') {
@pelikhan

pelikhan commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

@copilot merge main and recompile

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Please address the current blocking feedback on this manifest icon PR before handing back to maintainers.

  • The branch is currently conflicting/dirty; please run make merge-main first to resolve it cleanly and then make recompile if workflow outputs changed.
  • The current review says invalid emoji values still pass validation; tighten validation and add/update tests so unsupported emoji/icon formats are rejected clearly.
  • Local icons are reportedly dropped during resolution/generated output; preserve them end-to-end and cover that path with regression tests.
  • Restore/regenerate the deleted executable workflow lock files (.github/workflows/firewall.lock.yml and .github/workflows/example-permissions-warning.lock.yml) unless their source workflows changed intentionally.
  • The generated content / fallback AW file changes should match the repo state exactly; remove unrelated drift and keep the PR scoped to manifest icon support.
  • After the fix, run the pr-finisher skill and leave a concise maintainer-facing summary of what changed and which checks to re-run.

Generated by PR Sous Chef

Generated by 👨‍🍳 PR Sous Chef · pi · gpt54 · 45.8 AIC · ⌖ 8.69 AIC · ⊞ 9.2K ·
Comment /souschef to run again

Copilot AI and others added 2 commits September 2, 2026 23:36
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
@pelikhan

pelikhan commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Please address the current blocking feedback on this manifest icon PR before handing back to maintainers.

  • The branch is currently conflicting/dirty; please run make merge-main first to r...

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>

Copilot AI commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

@copilot fix https://github.com/github/gh-aw/actions/runs/33696373964/job/100466381530?pr=58047

Investigated run 33696373964, job 100466381530. The failure was TestCheckedInAgenticWorkflowsSkillMatchesGeneratedContent on the previous head; the synchronized skill content now passes. Also corrected the direct github.com/rivo/uniseg dependency metadata in commit 5fee0ec. Impacted tests pass; please re-trigger CI.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning

Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • clients2.google.com
  • mtalk.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. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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. |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 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.

@pelikhan
pelikhan merged commit b4fadaa into main Sep 3, 2026
36 checks passed
@pelikhan
pelikhan deleted the copilot/add-icon-field-to-aw-manifest branch September 3, 2026 01:38
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🎉 This pull request is included in a new release.

Release: v0.88.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants