Skip to content

Add Java Modernization Studio canvas extension#2156

Open
ayangupt wants to merge 4 commits into
github:mainfrom
ayangupt:add-java-modernization-studio-canvas
Open

Add Java Modernization Studio canvas extension#2156
ayangupt wants to merge 4 commits into
github:mainfrom
ayangupt:add-java-modernization-studio-canvas

Conversation

@ayangupt

Copy link
Copy Markdown
Contributor

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

  • Readiness (Environment Doctor) — checks JDK, Maven/./mvnw, Git, Docker, Azure CLI on PATH
  • Assessment — renders structured findings from .appmod/assessment.json (severity-ordered)
  • Plan & Progress — renders plan.md / progress.md as live checklists
  • Validation — CVE validation + test-generation gates
  • Tasks — dispatches Microsoft predefined modernization tasks relevant to the detected stack
  • Autopilot — optional phase-ordered, hands-free run

Grounding

Renders real repo state only. Root plan.md/progress.md/summary.md are trusted only when .appmod/ exists or the file begins with the provenance marker <!-- appmod-cockpit -->, so an unrelated repo's plan.md is never mistaken for modernization output.

Quality

  • Folder-only addition; follows the existing extensions/ convention (package.json + extension.mjs + README.md).
  • Grounding/parsing logic covered by a node:test suite (109 tests): node --test test/cockpit.test.mjs.
  • @github/copilot-sdk pinned to 1.0.4.

Copilot AI review requested due to automatic review settings June 29, 2026 19:23
@github-actions github-actions Bot added agent PR touches agents canvas-extension PR touches canvas extensions external-plugin PR updates plugins/external.json hooks PR touches hooks instructions PR touches instructions new-submission PR adds at least one new contribution plugin PR touches plugins skills PR touches skills website-update PR touches website content or code workflow PR touches workflow automation ready-for-review Submission passed intake validation and is ready for maintainer review labels Jun 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ External plugin PR checks passed

  • Changed entries detected: 0
  • Workflow state label: ready-for-review

Per-plugin quality summary

Plugin skill-validator install smoke test overall source tree
none not_run not_run not_run n/a

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>
@ayangupt ayangupt force-pushed the add-java-modernization-studio-canvas branch from a4419f8 to 03b2fe6 Compare June 29, 2026 19:27
@github-actions github-actions Bot removed skills PR touches skills agent PR touches agents plugin PR touches plugins instructions PR touches instructions workflow PR touches workflow automation external-plugin PR updates plugins/external.json website-update PR touches website content or code hooks PR touches hooks labels Jun 29, 2026

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.

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

Comment thread extensions/java-modernization-studio/package.json
Copilot AI review requested due to automatic review settings June 29, 2026 19:32

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.

Review details

  • Files reviewed: 12/12 changed files
  • Comments generated: 3
  • Review effort level: Low

Comment thread extensions/java-modernization-studio/server.mjs
Comment thread extensions/java-modernization-studio/server.mjs
Comment thread extensions/java-modernization-studio/server.mjs
ayangupt and others added 2 commits June 29, 2026 12:49
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>
Copilot AI review requested due to automatic review settings June 29, 2026 20:08

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.

Review details

  • Files reviewed: 12/13 changed files
  • Comments generated: 3
  • Review effort level: Low

Comment thread extensions/java-modernization-studio/server.mjs
Comment thread extensions/java-modernization-studio/server.mjs
Comment thread extensions/java-modernization-studio/server.mjs
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 aaronpowell 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.

can you add a canvas.json file for the website to use

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

Labels

canvas-extension PR touches canvas extensions new-submission PR adds at least one new contribution ready-for-review Submission passed intake validation and is ready for maintainer review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants