[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H4801HYC6GHF3FD7PZT4V9":3,"skill-same:01M6H4801HYC6GHF3FD7PZT4V9":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":58,"ownerDescription":59,"updatedAt":60,"install":61,"resources":73},"01M6H4801HYC6GHF3FD7PZT4V9","dx-sync",null,"Sync plugin updates to consumer repos — runs sync-consumers.sh with selected repos and options. Use when you say \"sync plugins\", \"update consumers\", \"push to all repos\".","easingthemes\u002Fdx-aem-flow","easingthemes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2750284?v=4","01M6H3XYGJY8QCX9ES36P2WF4H","Dragan Filipović","01M6H3XYMN1XVSGKN7N79SW3RH",7,"MIT","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-sync\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"dx sync","sync","dx","update","run","options","plugin","say","with","dry","you","updates","use","true","trigger","search","repo","push","projects","parallel","2026-11-10 10:12:30",false,"---\nname: dx-sync\ndescription: Sync plugin updates to consumer repos — runs sync-consumers.sh with selected repos and options. Use when you say \"sync plugins\", \"update consumers\", \"push to all repos\".\nwhen_to_use: \"Use when syncing plugin updates to consumer repos. Trigger on 'sync plugins', 'update consumers', 'push to all repos', 'dx-sync', or when a plugin update needs to propagate to downstream projects.\"\nargument-hint: \"[--dry-run] [--parallel] [repo1 repo2 ...] — repo names from .ai\u002Fconfig.yaml repos:\"\ndisable-model-invocation: true\nallowed-tools: [\"read\", \"edit\", \"search\", \"write\", \"agent\"]\n---\n\nYou sync plugin updates to consumer AEM repos using the `sync-consumers.sh` script. Any consumer repo can run this skill — there is no hub. Repos are listed in `.ai\u002Fconfig.yaml` under `repos:`.\n\n## 1. Locate Sync Script\n\nThe sync script lives in this skill's scripts directory:\n\n```bash\nSYNC_SCRIPT=\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fsync-consumers.sh\"\n```\n\nIf it doesn't exist, try the repo root fallback:\n```bash\nSYNC_SCRIPT=\"$(git rev-parse --show-toplevel)\u002Finternal\u002Fsync-consumers.sh\"\n```\n\nIf neither exists, STOP: \"sync-consumers.sh not found.\"\n\n## 2. Show Consumer Repo Table\n\nRead `repos:` from `.ai\u002Fconfig.yaml`. Present the available repos and their capabilities:\n\n```markdown\n| Repo | Path | Base Branch | Work Branch | FE | BE |\n|------|------|-------------|-------------|:--:|:--:|\n| brand-a | ..\u002FBrand-A-Project | development | feature\u002Fai-sync | Yes | No |\n| backend | ..\u002FAEM-Backend | develop | feature\u002Fai-sync | Yes | Yes |\n| brand-b | ..\u002FBrand-B-Project | development | feature\u002Fai-sync | Yes | No |\n```\n\n> All repos come from the `repos:` section in `.ai\u002Fconfig.yaml`. The current repo is excluded (you don't sync to yourself).\n\n## 3. Parse Arguments\n\nFrom `$ARGUMENTS`, extract:\n- **Flags:** `--dry-run`, `--parallel`, `--no-git`, `--no-pr`\n- **Repos:** Repo names from `.ai\u002Fconfig.yaml` `repos:` section\n- If no repos specified, defaults to all configured repos\n\nIf no arguments at all, ask: \"Sync all repos? Or specify which ones (e.g., `brand-a backend`). Add `--dry-run` to preview.\"\n\n## 4. Run Sync\n\n```bash\nbash \"$SYNC_SCRIPT\" $ARGUMENTS\n```\n\nThe script handles:\n1. Merge `origin\u002F\u003Cbase-branch>` into work branch\n2. Copy utility scripts to `.ai\u002Flib\u002F`\n3. Copy output templates to `.ai\u002Ftemplates\u002F`\n4. Generate Copilot agents (with dual tool names for Copilot CLI + VS Code Chat)\n5. Config migration (runs versioned migrations on the consumer's `.ai\u002Fconfig.yaml`; updates `dx.version` to match the plugin version)\n6. Sync Claude rules (`.claude\u002Frules\u002F`)\n7. Sync AI rules (`.ai\u002Frules\u002F`) — `pr-review.md` \u002F `pr-answer.md` keep the AEM sections `aem-init` appended (only the part before the first `## AEM` \u002F `## Sling` heading is replaced)\n8. Sync instructions (`.github\u002Finstructions\u002F`)\n9. Sync VS Code MCP config (`.vscode\u002Fmcp.json` — mirrors ADO\u002FAtlassian from root `.mcp.json`)\n10. Sync VS Code Chat settings (`.vscode\u002Fsettings.json` — `chat.instructionsFilesLocations`, `chat.agentSkillsLocations`)\n11. Cleanup (remove rules not applicable to repo capabilities)\n12. Commit and push\n13. Create\u002Fupdate PR\n\n## 5. Report Results\n\nAfter the script completes, present:\n\n```markdown\n## Sync Complete\n\n| Repo | Status | PR |\n|------|--------|-----|\n| brand-a | synced | PR #\u003Cid> |\n| backend | synced | PR #\u003Cid> |\n| brand-b | synced | PR #\u003Cid> |\n```\n\nIf `--dry-run` was used, note: \"Dry run — no changes were made.\"\n\n## Rules\n\n- **Never run without user confirmation** — always show the repo table and confirm before syncing\n- **Use --no-pr when needed** — pass `--no-pr` to skip PR creation for specific runs\n- **Dry-run first on uncertainty** — if unsure about scope, suggest `--dry-run` first\n- **Read script output** — the script reports per-step status; relay any errors to the user\n- **Runs from any consumer repo** — reads repos from `.ai\u002Fconfig.yaml`, syncs to sibling repos via relative paths\n","You sync plugin updates to consumer AEM repos using the `sync-consumers.sh` script. Any consumer repo can run this skill — there is no hub. Repos are listed in `.ai\u002Fconfig.yaml` under `repos:`.\n\n## 1. Locate Sync Script\n\nThe sync script lives in this skill's scripts directory:\n\n```bash\nSYNC_SCRIPT=\"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fsync-consumers.sh\"\n```\n\nIf it doesn't exist, try the repo root fallback:\n```bash\nSYNC_SCRIPT=\"$(git rev-parse --show-toplevel)\u002Finternal\u002Fsync-consumers.sh\"\n```\n\nIf neither exists, STOP: \"sync-consumers.sh not found.\"\n\n## 2. Show Consumer Repo Table\n\nRead `repos:` from `.ai\u002Fconfig.yaml`. Present the available repos and their capabilities:\n\n```markdown\n| Repo | Path | Base Branch | Work Branch | FE | BE |\n|------|------|-------------|-------------|:--:|:--:|\n| brand-a | ..\u002FBrand-A-Project | development | feature\u002Fai-sync | Yes | No |\n| backend | ..\u002FAEM-Backend | develop | feature\u002Fai-sync | Yes | Yes |\n| brand-b | ..\u002FBrand-B-Project | development | feature\u002Fai-sync | Yes | No |\n```\n\n> All repos come from the `repos:` section in `.ai\u002Fconfig.yaml`. The current repo is excluded (you don't sync to yourself).\n\n## 3. Parse Arguments\n\nFrom `$ARGUMENTS`, extract:\n- **Flags:** `--dry-run`, `--parallel`, `--no-git`, `--no-pr`\n- **Repos:** Repo names from `.ai\u002Fconfig.yaml` `repos:` section\n- If no repos specified, defaults to all configured repos\n\nIf no arguments at all, ask: \"Sync all repos? Or specify which ones (e.g., `brand-a backend`). Add `--dry-run` to preview.\"\n\n## 4. Run Sync\n\n```bash\nbash \"$SYNC_SCRIPT\" $ARGUMENTS\n```\n\nThe script handles:\n1. Merge `origin\u002F\u003Cbase-branch>` into work branch\n2. Copy utility scripts to `.ai\u002Flib\u002F`\n3. Copy output templates to `.ai\u002Ftemplates\u002F`\n4. Generate Copilot agents (with dual tool names for Copilot CLI + VS Code Chat)\n5. Config migration (runs versioned migrations on the consumer's `.ai\u002Fconfig.yaml`; updates `dx.version` to match the plugin version)\n6. Sync Claude rules (`.claude\u002Frules\u002F`)\n7. Sync AI rules (`.ai\u002Frules\u002F`) — `pr-review.md` \u002F `pr-answer.md` keep the AEM sections `aem-init` appended (only the part before the first `## AEM` \u002F `## Sling` heading is replaced)\n8. Sync instructions (`.github\u002Finstructions\u002F`)\n9. Sync VS Code MCP config (`.vscode\u002Fmcp.json` — mirrors ADO\u002FAtlassian from root `.mcp.json`)\n10. Sync VS Code Chat settings (`.vscode\u002Fsettings.json` — `chat.instructionsFilesLocations`, `chat.agentSkillsLocations`)\n11. Cleanup (remove rules not applicable to repo capabilities)\n12. Commit and push\n13. Create\u002Fupdate PR\n\n## 5. Report Results\n\nAfter the script completes, present:\n\n```markdown\n## Sync Complete\n\n| Repo | Status | PR |\n|------|--------|-----|\n| brand-a | synced | PR #\u003Cid> |\n| backend | synced | PR #\u003Cid> |\n| brand-b | synced | PR #\u003Cid> |\n```\n\nIf `--dry-run` was used, note: \"Dry run — no changes were made.\"\n\n## Rules\n\n- **Never run without user confirmation** — always show the repo table and confirm before syncing\n- **Use --no-pr when needed** — pass `--no-pr` to skip PR creation for specific runs\n- **Dry-run first on uncertainty** — if unsure about scope, suggest `--dry-run` first\n- **Read script output** — the script reports per-step status; relay any errors to the user\n- **Runs from any consumer repo** — reads repos from `.ai\u002Fconfig.yaml`, syncs to sibling repos via relative paths\n",{"name":5,"description":7,"when_to_use":44,"allowed-tools":45,"argument-hint":50,"disable-model-invocation":51},"Use when syncing plugin updates to consumer repos. Trigger on 'sync plugins', 'update consumers', 'push to all repos', 'dx-sync', or when a plugin update needs to propagate to downstream projects.",[46,47,34,48,49],"read","edit","write","agent","[--dry-run] [--parallel] [repo1 repo2 ...] — repo names from .ai\u002Fconfig.yaml repos:",true,"main","5c642842a92100dc7561ae0682a152a74846e186","plugins\u002Fdx-core\u002Fskills\u002Fdx-sync",3,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow","https:\u002F\u002Fgithub.com\u002Feasingthemes","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fdraganfilipovic\u002F","Agentic SDLC platform in production. I build agent-ready codebases. AEM MCP Server author.","2026-11-11 09:59:48",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":51},[63,66,69],{"tool":64,"command":65},"npx","npx skills add easingthemes\u002Fdx-aem-flow --skill dx-sync",{"tool":67,"command":68},"bunx","bunx skills add easingthemes\u002Fdx-aem-flow --skill dx-sync",{"tool":70,"command":71},"pnpm","pnpm dlx skills add easingthemes\u002Fdx-aem-flow --skill dx-sync","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-sync\u002FSKILL.md",[74,80,84],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"scripts\u002Fmigrate-config.sh","SCRIPT","脚本",13097,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-sync\u002Fscripts\u002Fmigrate-config.sh",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Fsync-ai-rules.test.sh",3281,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-sync\u002Fscripts\u002Fsync-ai-rules.test.sh",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"scripts\u002Fsync-consumers.sh",33731,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-sync\u002Fscripts\u002Fsync-consumers.sh",[89,111,132,155,169,184],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":39},"01M6H48W19F46A7B7TSSQAMYRW","dx-hub-status","Show hub dispatch status — which repos are running, done, blocked or failed. Use for 'hub status', 'what's running'.","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-hub-status\u002FSKILL.md",[],[21,96,97,98,99,100,101,102,103,104,31,105,106,107,108,46,48,109,110],"dx hub status","hub","status","hub status","which","show","for","ticket","clean","done","Bash","id","dispatch","repos","grep",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":39},"01M6H48R6ZH7YMVPMVWMMWT3RA","dx-hub-init","Initialize a hub directory for multi-repo orchestration. Discovers sibling repos, merges configs, validates CLI compatibility. Use when setting up hub mode for the first time. Trigger on \"init hub\", \"set up hub\", \"multi-repo setup\".","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-hub-init\u002FSKILL.md",[],[118,119,21,120,97,121,122,123,124,125,126,127,128,129,106,130,131,46,48,47],"init","hub init","dx hub init","SET","time","mode","default","up","repo setup","orchestration","configure","multi-repo","cli","directory",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":143,"publishedAt":39},"01M6H48K267CWEF8YNN3Y49BVT","dx-hub-dispatch","Dispatch a ticket to several repos — open an independent Claude session per repo in VS Code terminals. Use for 'hub dispatch', 'work on ticket across repos'.","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-hub-dispatch\u002FSKILL.md",[138],{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[21,144,108,97,145,102,35,146,147,103,148,149,31,150,106,151,152,153,107,154],"dx hub dispatch","ado","work on","session","open","MCP","URL","vscode","code","across","work",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":39},"01M6H48FAWKTT6AAWT3H80ZKE0","dx-hub-config","View and edit hub configuration — add repos, adjust terminal delay. Use to manage hub settings. Trigger on \"hub config\", \"add repo to hub\", \"terminal delay\".","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-hub-config\u002FSKILL.md",[],[21,162,97,163,101,164,35,165,33,32,166,31,128,106,167,46,168,48,47,109],"dx hub config","config","view","manage","adjust","terminal","settings",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":39},"01M6H48BNMYEJY6CCWPYHNQDAT","dx-discover-repos","Resolve which repos a work item touches (explicit directive → simple block → cross-repo table → LLM). Used by the KAI-HUB router to fan an agent out across repos; 'which repos'.","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002FSKILL.md",[],[176,21,177,109,100,35,153,178,107,179,154,180,97,181,182,183],"discover","dx discover repos","router","directive","simple","block","sonnet","table",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":191,"publishedAt":39},"01M6H487QA1FDSBT1HTZGW4HAQ","dx-upgrade","Upgrade a consumer project to the installed plugin versions — run dx-doctor, fix stale and missing files, list manual actions. Use after upgrading plugins.","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-upgrade\u002FSKILL.md",[190],{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},[192,21,193,194,195,34,196,197,198,23,46,48,47,199,200,201,202,31,25,203],"upgrade","dx upgrade","project","actions","fix","files","auto","list","doctor","manual","missing","plugins"]