feat(app-builder): add Content Hub UI extension support (scaffold, UI patterns, deploy) - #372
Open
saksbhardwaj wants to merge 14 commits into
Open
saksbhardwaj wants to merge 14 commits into
saksbhardwaj wants to merge 14 commits into
Conversation
Removed redundant line break in SKILL.md for clarity.
…e#70) - card.getActionButtons(actionContext) now receives context ('assets' | 'collections'); selectionBar.getActionButtons() takes no args — were previously documented backwards - Constants.js template exports SourceType/ResourceType; ExtensionRegistration imports SourceType - Card/SelectionBar modals restyled Content Hub-like (Heading + Divider + labeled rows, right-aligned Cancel/Done, colorScheme light) to match the sample - Update ui-scaffolder eval to assert card getActionButtons(actionContext) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts: # plugins/app-builder/skills/appbuilder-project-init/SKILL.md # plugins/app-builder/skills/appbuilder-project-init/evals/evals.json
The main-merge combined the rewritten description with the re-inserted Content Hub sentence, pushing it to 1195 chars and failing `validate`. Condensed to 1007 chars while keeping the Content Hub scaffolding mention and key triggers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…rop hand-written templates Content Hub has no aio app init generator, so instead of maintaining a hand-written 1051-line template + a dedicated scaffolding workflow + a deploy reference (all duplicating the maintained sample), scaffold directly from the sample app — the official documented path: aio app init --repo adobe/aem-uix-examples/aem-assets-contenthub-sample --github-pat <pat> - Delete contenthub-templates.md, contenthub-scaffolding.md, contenthub-deploy.md - Add a "Content Hub extension" entry to the templates.md catalog (scaffold cmd + post-init: extensionId, allowedRepos, namespace pruning, UI edit map, test URL, panel-not-visible troubleshooting, post-scaffold sanity check) - Fold the Content Hub deploy delta into appbuilder-cicd-pipeline SKILL.md - Repoint project-init SKILL.md + README to the catalog entry - Rewrite the id:8 eval to assert the --repo scaffold flow Single source of truth is now the sample (aem-uix-examples), eliminating drift. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…MyExchange admin Earlier "no approval step for Content Hub" was wrong. UIX extensions (Content Hub included) DO require approval, and it's the SAME flow for all surfaces: local preview -> deploy Stage -> deploy Production -> Submit for approval in Adobe Developer Console (Production workspace) -> org admin approves in MyExchange (exchange.adobe.com) -> available to that org's Content Hub. Re-deploy after publish needs revoke + new request. It's via MyExchange, NOT Extension Manager. Since it's identical across surfaces, replace the Content-Hub-specific deploy section with a generic "Deploy & Approval (UI Extensions)" section in the cicd skill; quick-ref row and project-init pointer point to it. Also includes the --repo scaffold hardening (PAT prompt, clone/cp must wire .aio/.env, workspace + allowedRepos prompts, test URL). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-apply the &repo= fix (kept getting reset). The Content Hub local preview URL needs all four params — ext, devMode, repo (points at the delivery instance, needed even with allowedRepos=[]), and the #/assets/contenthub/ hash: https://experience.adobe.com/?devMode=true&ext=https://localhost:9080&repo=<delivery-repo>#/assets/contenthub/ Fixed in templates.md, cicd SKILL.md, aem-extensions.md; told the agent not to use the custom-apps or content-hub.html URLs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mohitar1
suggested changes
Sep 21, 2026
| }, | ||
| { | ||
| "id": 5, | ||
| "prompt": "Deploy my Content Hub extension to Stage and give me the test link.", |
There was a problem hiding this comment.
Which stage environment will it run in?
|
|
||
| ## Deploy & Approval (UI Extensions) | ||
|
|
||
| The manual promotion path for any UIX extension — **same for all surfaces** (Content Hub, aem-assets-view, cf-console-admin); see the official [UIX development flow](https://developer.adobe.com/uix/docs/guides/development-flow/): |
There was a problem hiding this comment.
Adding Content Hub specific step here in generic app builder ci/cd pipeline seems weird, please check with app builder team
This branch is waiting to be deployed
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.
Description
Adds first-class Content Hub UI extensibility support to the App Builder skills, so Claude Code can scaffold, build, and deploy a Content Hub extension for the unified
aem/assets/contenthub/1extension point from scratch. The work spans three skills:appbuilder-project-init— scaffolds a complete Content Hub extension end-to-end (Console setup → file generation →npm install→aio app use→ build → dev server → open in Content Hub). Adds:references/contenthub-scaffolding.md— the full interactive workflow (namespace selection, workspace/org resolution, cert page, auto-open).references/contenthub-templates.md— every generated file (package.json,ext.config.yaml,App.js,ExtensionRegistration.js,Constants.js, per-namespace components, modals, actions).appbuilder-ui-scaffolder—references/aem-extensions.mddocuments the three Content Hub namespaces and their exact host contracts, plus SKILL.md and evals.appbuilder-cicd-pipeline—references/contenthub-deploy.mdcovers workspace switch, deploy, Extension Manager approval, and troubleshooting.The three namespaces and their contracts (aligned with the host in
AEM-Assets-Adobe/contenthuband the reference sample inadobe/aem-uix-examplesPR #70):assetDetails— custom tab panels in the Asset Details Dialog.card— action buttons on asset cards and collection tiles.getActionButtons(actionContext)receivesactionContext.context('assets'|'collections');onActionClick(resourceType, buttonId, resourceId).selectionBar— bulk action buttons.getActionButtons()(no args);onActionClick(buttonId, assetIds).Constants export
SourceType/ResourceType(two-value model), and the card/selection-bar modals follow Content Hub dialog conventions (heading + divider + labeled rows + right-aligned actions).Related Issue
N/A — enhancement to the App Builder skill set for Content Hub extensibility.
Motivation and Context
Content Hub is a distinct App Builder extension point with contracts that differ from the other AEM surfaces (no
sharedContext;openDialogtakes a single config object;card/selectionBargated by theEXTENSIBILITY_AEM_CONTENTHUBflag). Without dedicated skill guidance, scaffolds used the wrong signatures. These references encode the verified contracts so generated extensions match the live host and the reference sample.How Has This Been Tested?
aio app buildsucceeds and the extension registers against the live Content Hub host.contenthubhost build.useExtensionCardActions/useExtensionBulkActionBar) and the reference sample (aem-uix-examples PR adobe-skills-issues-69 - updated package with Distributor #70).evals.jsonfor each skill updated and validated as parseable JSON.Types of changes
Checklist: