Add Vox β hands-free voice canvas extension π€π€π€#2174
Add Vox β hands-free voice canvas extension π€π€π€#2174aasis21 wants to merge 2 commits into
Conversation
Vox is a hands-free voice panel for GitHub Copilot: speak your turn and hear the agent's reply, with a reactive listening orb. Voice in, voice out. Listed as an external canvas extension (own repo aasis21/vox), following the coffilot precedent in extensions/external.json. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds Vox as an external Copilot canvas extension entry so it can be surfaced by the repositoryβs extensions/website data pipeline, with a bundled preview image asset.
Changes:
- Added a new
voxentry toextensions/external.jsonwith metadata (author, keywords, screenshots, install/source URLs). - Added
extensions/external-assets/vox-preview.pngand wired it up as the icon/gallery image for the new entry.
Reviewed changes
Copilot reviewed 1 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
extensions/external.json |
Registers the new external extension listing and points to the preview image asset. |
extensions/external-assets/vox-preview.png |
Adds the preview image referenced by the new external listing. |
The validate-canvas-extensions workflow reduces changed paths under extensions/ to their first path segment, so extensions/external.json becomes ext_name=external.json. Only external-assets/ was skipped, so external.json fell through to the directory-name allowlist and failed on its dot, breaking every PR that registers an external extension via extensions/external.json (the documented external route, e.g. coffilot). Skip any top-level catalog file (identified by a dot in the name), mirroring the fix already applied to the local validator in github#2029. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Heads-up for reviewers: this PR includes a small, self-contained CI fix in addition to the Vox catalog entry. Why the workflow change is here: registering an external extension via The fix skips top-level catalog files (identified by a dot in the name), mirroring the same fix already applied to the local validator in #2029. Real extension directories (lowercase alnum + hyphens, no dot) still validate unchanged. Happy to split this into a separate PR if you'd prefer β it's just required for this contribution (and any external one) to go green. |
Add Vox β hands-free voice canvas extension
Vox gives any GitHub Copilot session a voice: speak your turn and hear the agent's reply read back, with a reactive listening orb. Voice in, voice out β no editor, no tab-juggling.
@github/copilot-sdk/extension), so it renders inline in the Copilot app and runs in the CLI.What this PR does
Adds a single external entry, following the existing Coffilot precedent β Vox stays hosted in its own repo. No in-repo runtime code is added.
extensions/external.jsonβ newvoxentry (author, keywords, screenshots, installUrl/sourceUrl βaasis21/vox)extensions/external-assets/vox-preview.pngβ preview imageIncluded CI fix (why this PR touches
.github/workflows/)This PR also carries a one-line fix to
.github/workflows/validate-canvas-extensions.yml, because the external route is currently broken by a very recent regression:extensions/to its first segment, then checks it against a directory-name allowlist^[a-z0-9][a-z0-9-]*$.extensions/external.json, that first segment isexternal.jsonβ which fails the allowlist on its dot and errors with "invalid extension directory name." The loop skips theexternal-assets/folder but not theexternal.jsonfile.extensions/external.json, so its own run took the "No canvas extension directories changed β skipping" branch and went green. It only fires when a PR actually editsexternal.jsonβ and this is the first such PR since Add canvas schema validation to extension submission workflowΒ #2161. (Coffilot predates the check entirely:external.jsonwas created back in Add canvas previews, external extension links, and release notes showcaseΒ #1987 on 2026-06-16, before the strict validator existed.)The fix skips any top-level catalog file (identified by a dot in the name), mirroring the same heuristic already applied to the local validator in #2029. Real extension directories (lowercase alnum + hyphens, no dot) validate unchanged. Happy to split this into a standalone PR if you'd prefer.
Notes for maintainers
external.jsonshape used for Coffilot. Happy to adjust to whatever intake you prefer.npm startwas run; it produced noREADME.mdormarketplace.jsondiff (external.json feeds website data only), so this stays minimal.π€ This PR was prepared with AI assistance.