Add Java Modernization Studio canvas extension#2156
Open
ayangupt wants to merge 4 commits into
Open
Conversation
Contributor
✅ External plugin PR checks passed
Per-plugin quality summary
No changed external plugin entries were detected in this PR. |
A canvas extension that drives the GitHub Copilot App Modernization for Java workflow from an interactive dashboard: environment readiness checks, repo assessment, prioritized plan/progress, validation gates (CVE scan, test generation), and one-click predefined-task runs — all grounded in the repo's real artifacts (.appmod/assessment.json, plan.md, progress.md). Includes a node:test suite (109 tests) for the grounding logic. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Ayan Gupta <74832088+ayangupt@users.noreply.github.com>
a4419f8 to
03b2fe6
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a new Canvas Extensions surface area to the repo (both content under extensions/ and a corresponding website listing page), including the new Java Modernization Studio canvas extension intended to provide an interactive dashboard for the Copilot App Modernization for Java workflow. In addition, the PR contains a broad set of repo-wide updates across website rendering, docs, hooks, skills, plugins, and GitHub Actions workflows.
Changes:
- Add a new
extensions/catalog (multiple canvas extensions + external extension manifest) and a new/extensions/website listing page. - Refactor website listing-card HTML generation to use shared render helpers (
card-render.ts) across multiple resource pages. - Update various repo automation and content areas (new PR risk scan workflows, hook additions, docs refresh, plugin/skill updates, dependency bumps, and removal of
plugins/modernize-java).
Show a summary per file
| File | Description |
|---|---|
| website/src/scripts/pages/workflows-render.ts | Switch workflows listing to shared empty-state + shared card rendering. |
| website/src/scripts/pages/select-utils.ts | Add shared helpers for multi-select get/set/clear logic. |
| website/src/scripts/pages/plugins-render.ts | Switch plugins listing to shared empty-state + shared card rendering. |
| website/src/scripts/pages/instructions-render.ts | Switch instructions listing to shared empty-state + shared card rendering. |
| website/src/scripts/pages/index.ts | Add extensions to homepage manifest count keys. |
| website/src/scripts/pages/card-render.ts | New shared HTML helpers for listing cards + empty state. |
| website/src/scripts/pages/agents-render.ts | Switch agents listing to shared empty-state + shared card rendering. |
| website/src/pages/workflows.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/pages/skills.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/pages/plugins.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/pages/instructions.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/pages/index.astro | Add homepage “View repo on GitHub” link and Canvas Extensions category card. |
| website/src/pages/hooks.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/pages/extensions.astro | New Canvas Extensions listing page (sort/filter UI + listing scaffold). |
| website/src/pages/agents.astro | Add listing-page wrapper class + small import ordering tweaks. |
| website/src/content/docs/learning-hub/understanding-mcp-servers.md | Refresh CLI guidance and add deferTools field docs. |
| website/src/content/docs/learning-hub/index.md | Add “Getting Started” section and reorganize links. |
| website/src/content/docs/learning-hub/creating-effective-skills.md | Add optional argument-hint field docs. |
| website/src/content/docs/learning-hub/cli-for-beginners/06-mcp-servers.md | Update MCP config locations and deprecate .vscode/mcp.json. |
| website/src/content/docs/learning-hub/cli-for-beginners/04-agents-and-custom-instructions.md | Add user-level instructions path entry. |
| website/src/content/docs/learning-hub/cli-for-beginners/01-setup-and-first-steps.md | Add /settings and /app CLI command docs. |
| website/src/content/docs/learning-hub/automating-with-hooks.md | Document matcher pipe-pattern fix and version notes. |
| website/src/content/docs/learning-hub/agents-and-subagents.md | Update rubber-duck agent section and /subagents note. |
| website/README.md | Add website-specific local dev + social preview documentation. |
| website/data/tools.yml | Add “Ivy Tendril” tool entry. |
| website/astro.config.mjs | Add OG image dimensions tags + reorder sidebar to include Canvas Extensions. |
| skills/x-twitter-scraper/SKILL.md | Update references and add TweetClaw/OpenClaw guidance. |
| skills/tiny-stepping/SKILL.md | Add new “tiny stepping” incremental workflow skill. |
| skills/setup-my-iq/assets/templates/tools-systems-and-config.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/team.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/role-and-responsibilities.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/preferences-and-constraints.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/identity.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/communication-style.md | Add new context template file. |
| skills/setup-my-iq/assets/templates/AGENTS.md | Add new canonical AGENTS template for personal context routing. |
| skills/rhino3d-scripts/SKILL.md | Add additional Rhino 8 compatibility notes and troubleshooting entries. |
| skills/rhino3d-scripts/references/macros-and-loading.md | Add rhinocode CLI guidance and argument passing workarounds. |
| skills/react-container-presentation-component/SKILL.md | Add new user-invocable React scaffolding skill. |
| skills/react-container-presentation-component/references/typescript-and-scss-rules.md | Add new rules reference document for the React skill. |
| skills/md-to-docx/scripts/md-to-docx.mjs | Adjust HTML entity decoding order. |
| skills/lsp-setup/references/lsp-servers.md | Add Windows entry for SourceKit-LSP and formatting fix. |
| skills/github-actions-runtime-upgrade-conventions/SKILL.md | Add new skill documenting action runtime upgrade conventions. |
| skills/github-actions-hardening/references/triggers-and-privilege.md | Add hardening reference on trigger privilege model. |
| skills/github-actions-hardening/references/supply-chain.md | Add hardening reference on action pinning and supply-chain risks. |
| skills/github-actions-hardening/references/report-format.md | Add reference report format for workflow hardening reviews. |
| skills/github-actions-hardening/references/permissions-and-tokens.md | Add reference on least-privilege token permissions. |
| skills/github-actions-hardening/references/injection.md | Add reference on script injection patterns and mitigations. |
| skills/from-the-other-side-wiggins/SKILL.md | Add new Ember “From the Other Side” skill profile. |
| skills/from-the-other-side-quinn/SKILL.md | Add new Ember “From the Other Side” skill profile. |
| skills/from-the-other-side-anitta/SKILL.md | Add new Ember “From the Other Side” skill profile. |
| skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py | Ensure UTF-8 stdout on Windows when supported. |
| skills/excalidraw-diagram-generator/scripts/add-arrow.py | Ensure UTF-8 stdout on Windows when supported. |
| skills/dependabot/SKILL.md | Split uv into its own ecosystem mapping and add notes. |
| skills/cli-mastery/references/module-5-skills.md | Add alternate personal skills directory path. |
| plugins/project-documenter/skills/md-to-docx/scripts/md-to-docx.mjs | Mirror HTML entity decoding order change in bundled copy. |
| plugins/modernize-java/README.md | Remove modernize-java plugin README (plugin removed). |
| plugins/modernize-java/.github/plugin/plugin.json | Remove modernize-java plugin manifest (plugin removed). |
| plugins/gem-team/.github/plugin/plugin.json | Bump gem-team plugin version. |
| plugins/ember/skills/from-the-other-side-wiggins/SKILL.md | Add plugin-bundled copy of new Wiggins skill. |
| plugins/ember/skills/from-the-other-side-quinn/SKILL.md | Add plugin-bundled copy of new Quinn skill. |
| plugins/ember/skills/from-the-other-side-anitta/SKILL.md | Add plugin-bundled copy of new Anitta skill. |
| plugins/ember/README.md | Update Ember plugin README to list added skills. |
| plugins/ember/.github/plugin/plugin.json | Update Ember plugin manifest to include new skills. |
| plugins/aws-cloud-development/README.md | Add new AWS Cloud Development plugin README. |
| plugins/aws-cloud-development/agents/terraform-aws-planning.md | Add plugin-scoped AWS Terraform planning agent. |
| plugins/aws-cloud-development/agents/aws-serverless-architect.md | Add plugin-scoped AWS serverless architect agent. |
| plugins/aws-cloud-development/agents/aws-principal-architect.md | Add plugin-scoped AWS principal architect agent. |
| plugins/aws-cloud-development/.github/plugin/plugin.json | Add AWS Cloud Development plugin manifest. |
| package.json | Bump js-yaml dependency. |
| package-lock.json | Update lockfile for js-yaml bump (and transitive yaml). |
| instructions/use-cliche-data-in-docs.instructions.md | Add guidance for context-appropriate placeholders. |
| instructions/springboot-4-migration.instructions.md | Add Spring Boot 4 trailing-slash matching migration guidance. |
| instructions/powershell-pester-5.instructions.md | Clarify Set-ItResult skip/inconclusive control flow. |
| instructions/dotnet-framework.instructions.md | Clarify legacy vs SDK-style .NET Framework project guidance. |
| instructions/agent-skills.instructions.md | Update recommended personal skill directory paths. |
| hooks/secrets-scanner/scan-secrets.sh | Broaden GitHub App token regex pattern. |
| hooks/fix-broken-links/hooks.json | Add new hook configuration for broken-link fixer. |
| extensions/where-was-i/package.json | Add Where Was I extension package metadata. |
| extensions/where-was-i/canvas.json | Add Where Was I extension website/gallery metadata. |
| extensions/release-notes-showcase/README.md | Add Release Notes Showcase extension README. |
| extensions/release-notes-showcase/package.json | Add Release Notes Showcase extension package metadata. |
| extensions/release-notes-showcase/extension.mjs | Add Release Notes Showcase extension entrypoint. |
| extensions/release-notes-showcase/canvas.json | Add Release Notes Showcase extension website/gallery metadata. |
| extensions/java-modernization-studio/package.json | Add Java Modernization Studio extension package metadata. |
| extensions/java-modernization-studio/.gitignore | Add Java Modernization Studio extension ignore rules. |
| extensions/gesture-review/package.json | Add Gesture PR Review extension package metadata. |
| extensions/gesture-review/canvas.json | Add Gesture PR Review extension website/gallery metadata. |
| extensions/feedback-themes/package.json | Add Feedback Themes extension package metadata. |
| extensions/feedback-themes/canvas.json | Add Feedback Themes extension website/gallery metadata. |
| extensions/external.json | Add external extensions manifest (e.g., Coffilot). |
| extensions/diagram-viewer/package.json | Add Diagram Explorer extension package metadata. |
| extensions/diagram-viewer/canvas.json | Add Diagram Explorer extension website/gallery metadata. |
| extensions/color-orb/package.json | Add Color Orb extension package metadata. |
| extensions/color-orb/canvas.json | Add Color Orb extension website/gallery metadata. |
| extensions/chromium-control-canvas/README.md | Add Chromium Control Canvas README. |
| extensions/chromium-control-canvas/package.json | Add Chromium Control Canvas extension package metadata. |
| extensions/chromium-control-canvas/copilot-extension.json | Add Copilot extension metadata. |
| extensions/chromium-control-canvas/canvas.json | Add Chromium Control Canvas website/gallery metadata. |
| extensions/backlog-swipe-triage/README.md | Add Backlog Swipe Triage README. |
| extensions/backlog-swipe-triage/package.json | Add Backlog Swipe Triage extension package metadata. |
| extensions/backlog-swipe-triage/canvas.json | Add Backlog Swipe Triage website/gallery metadata. |
| extensions/arcade-canvas/README.md | Add Agent Arcade Canvas README. |
| extensions/arcade-canvas/package.json | Add Agent Arcade Canvas extension package metadata. |
| extensions/arcade-canvas/copilot-extension.json | Add Copilot extension metadata. |
| extensions/arcade-canvas/canvas.json | Add Agent Arcade website/gallery metadata. |
| extensions/arcade-canvas/assets/asset-.md | Add asset source link list for arcade assets. |
| extensions/accessibility-kanban/package.json | Add Accessibility Kanban extension package metadata. |
| extensions/accessibility-kanban/canvas.json | Add Accessibility Kanban website/gallery metadata. |
| eng/update-readme.mjs | Split raw base URL for “source vs published” and adjust sort locale. |
| eng/external-plugin-validation.mjs | Update candidate manifest paths and add sync note with quality gates. |
| eng/external-plugin-intake-state.mjs | Add new intake label state + adjust label application behavior. |
| eng/constants.mjs | Add extension constants and separate “source” vs “published” raw URLs. |
| docs/README.hooks.md | Add Fix Broken Links hook entry to hooks documentation index. |
| cookbook/copilot-sdk/dotnet/recipe/ralph-loop.cs | Update .NET namespace usage for Copilot SDK recipes. |
| cookbook/copilot-sdk/dotnet/recipe/pr-visualization.cs | Update namespace + API changes for Copilot SDK recipe. |
| cookbook/copilot-sdk/dotnet/recipe/persisting-sessions.cs | Update namespace usage for Copilot SDK recipe. |
| cookbook/copilot-sdk/dotnet/recipe/multiple-sessions.cs | Update namespace usage for Copilot SDK recipe. |
| cookbook/copilot-sdk/dotnet/recipe/managing-local-files.cs | Update namespace usage for Copilot SDK recipe. |
| cookbook/copilot-sdk/dotnet/recipe/error-handling.cs | Update namespace usage and StopAsync error handling guidance. |
| cookbook/copilot-sdk/dotnet/recipe/accessibility-report.cs | Update namespace + MCP server config types for recipe. |
| cookbook/copilot-sdk/dotnet/ralph-loop.md | Update recipe docs for new namespace. |
| cookbook/copilot-sdk/dotnet/pr-visualization.md | Update recipe docs for new namespace/API patterns. |
| cookbook/copilot-sdk/dotnet/persisting-sessions.md | Update session history guidance to event stream. |
| cookbook/copilot-sdk/dotnet/multiple-sessions.md | Update recipe docs for new namespace. |
| cookbook/copilot-sdk/dotnet/managing-local-files.md | Update recipe docs for new namespace. |
| cookbook/copilot-sdk/dotnet/error-handling.md | Update StopAsync behavior documentation and guidance. |
| cookbook/copilot-sdk/dotnet/accessibility-report.md | Update recipe docs for MCP stdio config details. |
| agents/terraform-aws-planning.agent.md | Add new top-level Terraform planning agent. |
| agents/aws-serverless-architect.agent.md | Add new top-level AWS serverless architect agent. |
| agents/aws-principal-architect.agent.md | Add new top-level AWS principal architect agent. |
| AGENTS.md | Update external plugin intake/re-review process description. |
| .github/workflows/skill-check-comment.yml | Remove label auto-creation and adjust comment formatting join. |
| .github/workflows/publish.yml | Add published-branch sync check between legacy and marketplace branches. |
| .github/workflows/pr-risk-scan.yml | Add PR risk scan gate workflow (artifact upload). |
| .github/workflows/pr-risk-scan-comment.yml | Add workflow_run commenter for PR risk scan artifact. |
| .github/workflows/learning-hub-updater.md | Add explicit permissions block. |
| .github/workflows/label-pr-intent.yml | Add canvas-extension label detection and remove label auto-creation. |
| .github/workflows/external-plugin-rereview.yml | Remove label auto-creation and adjust string join behavior. |
| .github/workflows/external-plugin-rereview-command.yml | Rename workflow/job, add concurrency, and add reactions. |
| .github/workflows/external-plugin-quality-gates.yml | Add reusable workflow for external plugin quality checks. |
| .github/workflows/copilot-setup-steps.yml | Bump gh-aw setup action version/SHA. |
| .github/workflows/codespell.yml | Remove trailing whitespace. |
| .github/workflows/check-pr-target.yml | Expand trigger types + add concurrency + make review state idempotent. |
| .github/skills/agentic-workflows/SKILL.md | Add in-repo agentic-workflows router skill definition. |
| .github/pull_request_template.md | Update template to include canvas extensions as a contribution type. |
| .github/extensions/external-plugins-board/package.json | Add .github extension package metadata. |
| .github/extensions/external-plugins-board/package-lock.json | Add lockfile for external-plugins-board extension. |
| .github/aw/actions-lock.json | Update locked action versions/SHAs. |
| .codespellrc | Add ans ignore and skip a bundled JS asset in extensions. |
Review details
- Files reviewed: 12/12 changed files
- Comments generated: 1
- Review effort level: Low
Address Copilot review feedback on the Java Modernization Studio canvas: - Mint a per-instance secret in createInstanceServer, embed it in the iframe URL, and validate it on every loopback request (/, /state, /events, /action). Other local processes can no longer read repo state or dispatch agent actions just by guessing the random port. Mirrors the existing diagram-viewer token pattern; the client echoes the token from its boot payload. The guard is a no-op when no token is set, so direct makeHandler unit tests are unaffected. - Handle async request-handler rejections in createServer with a .catch that returns 500 and logs, instead of leaking an unhandled rejection that could destabilize the extension process. - Tests: token guard 403s unauthenticated /, /state, /events and /action and allows valid-token requests; the end-to-end test asserts the tokenized URL and a tokenless 403. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add the required assets/preview.png screenshot for the canvas-extension validator, and resolve two codespell findings in the cockpit: rename the planSim helper's `nd` variable to `notDone` and reword a catalog comment to avoid the `invokable`/`invocable` flag. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Address the second-round Copilot review comments on the loopback server:
- broadcast(): drop an SSE client whose write() throws instead of keeping
it in the Set, so a uncleanly-disconnected client can't cause repeated
exceptions or leak dead entries on every subsequent broadcast.
- POST /action: treat a malformed JSON body or a missing/invalid "kind"
as a 400 client error (with an application/json body) instead of a 200
carrying { ok:false, error:"Unknown action: undefined" }.
- Handler catch: set Content-Type: application/json on the 500 error
response so it is consistent with the other JSON routes.
Adds four tests covering dead-client eviction, the two 400 paths, and the
JSON-typed 500. Full suite: 115 passing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Ayan Gupta <74832088+ayangupt@users.noreply.github.com>
aaronpowell
approved these changes
Jun 29, 2026
aaronpowell
requested changes
Jun 29, 2026
aaronpowell
left a comment
Contributor
There was a problem hiding this comment.
can you add a canvas.json file for the website to use
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
extensions/java-modernization-studio/— a canvas extension that turns the GitHub Copilot App Modernization for Java workflow into an interactive, steerable dashboard. The Copilot App Modernization tooling stays the engine; the canvas is the cockpit that reads what the workflow produces and turns each step into an agent-driving button.What it does
./mvnw, Git, Docker, Azure CLI on PATH.appmod/assessment.json(severity-ordered)plan.md/progress.mdas live checklistsGrounding
Renders real repo state only. Root
plan.md/progress.md/summary.mdare trusted only when.appmod/exists or the file begins with the provenance marker<!-- appmod-cockpit -->, so an unrelated repo'splan.mdis never mistaken for modernization output.Quality
extensions/convention (package.json+extension.mjs+README.md).node:testsuite (109 tests):node --test test/cockpit.test.mjs.@github/copilot-sdkpinned to1.0.4.