[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H48BNMYEJY6CCWPYHNQDAT":3,"skill-same:01M6H48BNMYEJY6CCWPYHNQDAT":108},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6H48BNMYEJY6CCWPYHNQDAT","dx-discover-repos",null,"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'.","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-hub\u002Fskills\u002Fdx-discover-repos\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"repos","dx","discover","dx discover repos","table","work","repo","router","hub","directive","simple","across","id","block","sonnet","which","2026-11-10 10:12:30",false,"---\nname: dx-discover-repos\ndescription: \"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'.\"\nargument-hint: \"\u003Cwork-item-id>\"\nmodel: sonnet\n---\n\n# dx-discover-repos\n\nResolve the set of repos a work item touches and emit a structured JSON array\nthe KAI-HUB router uses to fan a worker pipeline out — one run per repo.\n\nThis skill is the multi-repo brain of the hub model. Single-repo projects never\ncall it: their worker fires directly via its own webhook (dual-mode workers).\n\n## Inputs\n\n| Input | Source | Notes |\n|-------|--------|-------|\n| `workItemId` | skill argument | the ticket being routed |\n| trigger-comment text | `.ai\u002Frun-context\u002Ftrigger-comment.txt` if present, else fetch from the work item | the human comment that fired the hook (after `@kai-\u003Cagent>`) |\n| repo registry | `$DX_REPOS_REGISTRY` (default `.ai\u002Fautomation\u002Fregistries\u002Frepos.json`) | alias → metadata; see `dx-hub\u002Fshared\u002Fregistry-format.md` |\n\n## Output (StructuredOutput)\n\nA JSON array, constrained to known registry aliases — **never invent repos**:\n\n```json\n[\n  { \"alias\": \"brand-one\", \"repoId\": \"…\", \"adoProject\": \"Example Project\",\n    \"cloneUrl\": \"https:\u002F\u002F…\u002F_git\u002Fbrand-one\", \"branch\": \"development\",\n    \"reason\": \"explicit 'repos:' directive in trigger comment\" }\n]\n```\n\nOn ambiguity or no match the skill emits a structured error object instead of an\narray, which the hub turns into a clarification comment on the work item:\n\n```json\n{ \"error\": \"ambiguous\", \"code\": 3, \"message\": \"project spans 2 platforms — add 'platform:' …\" }\n{ \"error\": \"no-match\", \"code\": 8, \"message\": \"no candidate repo matched platform=… scope=… brand=…\" }\n```\n\n## The cascade\n\nFirst non-empty tier wins. Tiers 0–2 are deterministic (fully testable offline);\ntier 3 is the LLM fallback, constrained to registry aliases.\n\n```dot\ndigraph discover {\n    \"Start\" [shape=box];\n    \"Tier 0: explicit repos: directive?\" [shape=diamond];\n    \"Tier 1: simple block present?\" [shape=diamond];\n    \"Tier 1 route ok?\" [shape=diamond];\n    \"Tier 2: cross-repo table?\" [shape=diamond];\n    \"Tier 3: LLM choose from registry\" [shape=box];\n    \"Emit JSON array\" [shape=doublecircle];\n    \"Emit structured error\" [shape=doublecircle];\n\n    \"Start\" -> \"Tier 0: explicit repos: directive?\";\n    \"Tier 0: explicit repos: directive?\" -> \"Emit JSON array\" [label=\"non-empty\"];\n    \"Tier 0: explicit repos: directive?\" -> \"Tier 1: simple block present?\" [label=\"empty\"];\n\n    \"Tier 1: simple block present?\" -> \"Tier 1 route ok?\" [label=\"yes\"];\n    \"Tier 1: simple block present?\" -> \"Tier 2: cross-repo table?\" [label=\"no\"];\n    \"Tier 1 route ok?\" -> \"Emit JSON array\" [label=\"repos resolved\"];\n    \"Tier 1 route ok?\" -> \"Emit structured error\" [label=\"exit 3 \u002F exit 8\"];\n\n    \"Tier 2: cross-repo table?\" -> \"Emit JSON array\" [label=\"non-empty\"];\n    \"Tier 2: cross-repo table?\" -> \"Tier 3: LLM choose from registry\" [label=\"empty\"];\n\n    \"Tier 3: LLM choose from registry\" -> \"Emit JSON array\";\n}\n```\n\n## Node Details\n\n### Tier 0: explicit repos: directive?\n\nRun `scripts\u002Fparse-explicit-repos.sh \u003Ccomment-file> $DX_REPOS_REGISTRY`. It reads\na `repos: a, b` directive a human typed after the `@kai-\u003Cagent>` tag and maps\neach alias to its registry entry. Deterministic, no LLM. Unknown aliases are\nskipped with a warning. A non-empty array wins the cascade immediately.\n\n### Tier 1: simple block present?\n\nIf the story has a ` ```simple ` block, this is a `\u002Fdx-simple` ticket — route by\nits declared platform\u002Fbrand\u002Fscope:\n\n1. `dx-simple\u002Fscripts\u002Fparse-simple-block.sh \u003Craw-story.md> \u002Ftmp\u002Fblock.yaml`\n   (resolve via `$PLUGIN_BASE_DIR\u002Fdx-core\u002Fskills\u002Fdx-simple\u002Fscripts\u002F…` in the\n   pipeline; the worker keeps this script — only the routing brain moved here).\n2. **Bridge:** synthesize a `config.yaml`-shaped `repos:` block from the registry\n   so `route-targets.sh` (which reads YAML via `repos_table`, not JSON) can\n   consume it. `repos.json` stays the single source of truth:\n\n   ```bash\n   jq -r '\"repos:\", (to_entries[] | \"  - name: \\(.key)\\n    role: \\(.value.role)\" +\n          (if .value.platform then \"\\n    platform: \\(.value.platform)\" else \"\" end) +\n          (if .value.brand then \"\\n    brand: \\(.value.brand)\" else \"\" end) +\n          (if .value.adoProject then \"\\n    ado-project: \\(.value.adoProject)\" else \"\" end))' \\\n     \"$DX_REPOS_REGISTRY\" > \u002Ftmp\u002Fdiscover-repos.yaml\n   ```\n\n3. Build a reachability map (every alias → placeholder id; the real worker id\n   comes from `agents.json` at queue time, so the value is a filter-only stub):\n\n   ```bash\n   MAP=$(jq -c 'to_entries | map({(.key): \"x\"}) | add' \"$DX_REPOS_REGISTRY\")\n   ```\n\n4. `scripts\u002Froute-targets.sh \u002Ftmp\u002Fblock.yaml \u002Ftmp\u002Fdiscover-repos.yaml \"$MAP\"`.\n   - exit 0 → map the emitted `.repo` aliases back to full registry entries and\n     emit the JSON array.\n   - **exit 3** (ambiguous — missing platform\u002Fbrand) → emit the `ambiguous`\n     structured error with the script's stderr message.\n   - **exit 8** (no candidate matched) → emit the `no-match` structured error.\n\n### Tier 1 route ok?\n\nBranch on route-targets' exit code (handled above). Errors stop the cascade —\ndo not fall through to tier 2\u002F3; the hub needs the human to clarify.\n\n### Tier 2: cross-repo table?\n\nRun `scripts\u002Fparse-crossrepo-table.sh \u003Ctriage.md|research.md> $DX_REPOS_REGISTRY`.\nIt extracts repo aliases from the `## Cross-Repo Scope` markdown table that\ntriage\u002Fresearch emit (see `dx-core\u002Fshared\u002Frepo-discovery.md`). Non-matching rows\nare skipped. A non-empty array wins.\n\n### Tier 3: LLM choose from registry\n\nOnly if every deterministic tier was empty. Read the work item title +\ndescription and choose the touched repos **from the registry aliases only**.\nList the available aliases (`jq -r 'keys[]' $DX_REPOS_REGISTRY`) and pick the\nsubset the change clearly touches. Never emit an alias not in the registry. If\nnothing clearly matches, emit the `no-match` structured error rather than\nguessing.\n\n### Emit JSON array\n\nEach entry must carry `alias, repoId, adoProject, cloneUrl, branch, reason`.\nWrite to the run-context output file the hub reads, and return it as the\nStructuredOutput result.\n\n### Emit structured error\n\n`{ error, code, message }`. The hub posts the message to the work item as a\nclarification comment and queues nothing.\n","# dx-discover-repos\n\nResolve the set of repos a work item touches and emit a structured JSON array\nthe KAI-HUB router uses to fan a worker pipeline out — one run per repo.\n\nThis skill is the multi-repo brain of the hub model. Single-repo projects never\ncall it: their worker fires directly via its own webhook (dual-mode workers).\n\n## Inputs\n\n| Input | Source | Notes |\n|-------|--------|-------|\n| `workItemId` | skill argument | the ticket being routed |\n| trigger-comment text | `.ai\u002Frun-context\u002Ftrigger-comment.txt` if present, else fetch from the work item | the human comment that fired the hook (after `@kai-\u003Cagent>`) |\n| repo registry | `$DX_REPOS_REGISTRY` (default `.ai\u002Fautomation\u002Fregistries\u002Frepos.json`) | alias → metadata; see `dx-hub\u002Fshared\u002Fregistry-format.md` |\n\n## Output (StructuredOutput)\n\nA JSON array, constrained to known registry aliases — **never invent repos**:\n\n```json\n[\n  { \"alias\": \"brand-one\", \"repoId\": \"…\", \"adoProject\": \"Example Project\",\n    \"cloneUrl\": \"https:\u002F\u002F…\u002F_git\u002Fbrand-one\", \"branch\": \"development\",\n    \"reason\": \"explicit 'repos:' directive in trigger comment\" }\n]\n```\n\nOn ambiguity or no match the skill emits a structured error object instead of an\narray, which the hub turns into a clarification comment on the work item:\n\n```json\n{ \"error\": \"ambiguous\", \"code\": 3, \"message\": \"project spans 2 platforms — add 'platform:' …\" }\n{ \"error\": \"no-match\", \"code\": 8, \"message\": \"no candidate repo matched platform=… scope=… brand=…\" }\n```\n\n## The cascade\n\nFirst non-empty tier wins. Tiers 0–2 are deterministic (fully testable offline);\ntier 3 is the LLM fallback, constrained to registry aliases.\n\n```dot\ndigraph discover {\n    \"Start\" [shape=box];\n    \"Tier 0: explicit repos: directive?\" [shape=diamond];\n    \"Tier 1: simple block present?\" [shape=diamond];\n    \"Tier 1 route ok?\" [shape=diamond];\n    \"Tier 2: cross-repo table?\" [shape=diamond];\n    \"Tier 3: LLM choose from registry\" [shape=box];\n    \"Emit JSON array\" [shape=doublecircle];\n    \"Emit structured error\" [shape=doublecircle];\n\n    \"Start\" -> \"Tier 0: explicit repos: directive?\";\n    \"Tier 0: explicit repos: directive?\" -> \"Emit JSON array\" [label=\"non-empty\"];\n    \"Tier 0: explicit repos: directive?\" -> \"Tier 1: simple block present?\" [label=\"empty\"];\n\n    \"Tier 1: simple block present?\" -> \"Tier 1 route ok?\" [label=\"yes\"];\n    \"Tier 1: simple block present?\" -> \"Tier 2: cross-repo table?\" [label=\"no\"];\n    \"Tier 1 route ok?\" -> \"Emit JSON array\" [label=\"repos resolved\"];\n    \"Tier 1 route ok?\" -> \"Emit structured error\" [label=\"exit 3 \u002F exit 8\"];\n\n    \"Tier 2: cross-repo table?\" -> \"Emit JSON array\" [label=\"non-empty\"];\n    \"Tier 2: cross-repo table?\" -> \"Tier 3: LLM choose from registry\" [label=\"empty\"];\n\n    \"Tier 3: LLM choose from registry\" -> \"Emit JSON array\";\n}\n```\n\n## Node Details\n\n### Tier 0: explicit repos: directive?\n\nRun `scripts\u002Fparse-explicit-repos.sh \u003Ccomment-file> $DX_REPOS_REGISTRY`. It reads\na `repos: a, b` directive a human typed after the `@kai-\u003Cagent>` tag and maps\neach alias to its registry entry. Deterministic, no LLM. Unknown aliases are\nskipped with a warning. A non-empty array wins the cascade immediately.\n\n### Tier 1: simple block present?\n\nIf the story has a ` ```simple ` block, this is a `\u002Fdx-simple` ticket — route by\nits declared platform\u002Fbrand\u002Fscope:\n\n1. `dx-simple\u002Fscripts\u002Fparse-simple-block.sh \u003Craw-story.md> \u002Ftmp\u002Fblock.yaml`\n   (resolve via `$PLUGIN_BASE_DIR\u002Fdx-core\u002Fskills\u002Fdx-simple\u002Fscripts\u002F…` in the\n   pipeline; the worker keeps this script — only the routing brain moved here).\n2. **Bridge:** synthesize a `config.yaml`-shaped `repos:` block from the registry\n   so `route-targets.sh` (which reads YAML via `repos_table`, not JSON) can\n   consume it. `repos.json` stays the single source of truth:\n\n   ```bash\n   jq -r '\"repos:\", (to_entries[] | \"  - name: \\(.key)\\n    role: \\(.value.role)\" +\n          (if .value.platform then \"\\n    platform: \\(.value.platform)\" else \"\" end) +\n          (if .value.brand then \"\\n    brand: \\(.value.brand)\" else \"\" end) +\n          (if .value.adoProject then \"\\n    ado-project: \\(.value.adoProject)\" else \"\" end))' \\\n     \"$DX_REPOS_REGISTRY\" > \u002Ftmp\u002Fdiscover-repos.yaml\n   ```\n\n3. Build a reachability map (every alias → placeholder id; the real worker id\n   comes from `agents.json` at queue time, so the value is a filter-only stub):\n\n   ```bash\n   MAP=$(jq -c 'to_entries | map({(.key): \"x\"}) | add' \"$DX_REPOS_REGISTRY\")\n   ```\n\n4. `scripts\u002Froute-targets.sh \u002Ftmp\u002Fblock.yaml \u002Ftmp\u002Fdiscover-repos.yaml \"$MAP\"`.\n   - exit 0 → map the emitted `.repo` aliases back to full registry entries and\n     emit the JSON array.\n   - **exit 3** (ambiguous — missing platform\u002Fbrand) → emit the `ambiguous`\n     structured error with the script's stderr message.\n   - **exit 8** (no candidate matched) → emit the `no-match` structured error.\n\n### Tier 1 route ok?\n\nBranch on route-targets' exit code (handled above). Errors stop the cascade —\ndo not fall through to tier 2\u002F3; the hub needs the human to clarify.\n\n### Tier 2: cross-repo table?\n\nRun `scripts\u002Fparse-crossrepo-table.sh \u003Ctriage.md|research.md> $DX_REPOS_REGISTRY`.\nIt extracts repo aliases from the `## Cross-Repo Scope` markdown table that\ntriage\u002Fresearch emit (see `dx-core\u002Fshared\u002Frepo-discovery.md`). Non-matching rows\nare skipped. A non-empty array wins.\n\n### Tier 3: LLM choose from registry\n\nOnly if every deterministic tier was empty. Read the work item title +\ndescription and choose the touched repos **from the registry aliases only**.\nList the available aliases (`jq -r 'keys[]' $DX_REPOS_REGISTRY`) and pick the\nsubset the change clearly touches. Never emit an alias not in the registry. If\nnothing clearly matches, emit the `no-match` structured error rather than\nguessing.\n\n### Emit JSON array\n\nEach entry must carry `alias, repoId, adoProject, cloneUrl, branch, reason`.\nWrite to the run-context output file the hub reads, and return it as the\nStructuredOutput result.\n\n### Emit structured error\n\n`{ error, code, message }`. The hub posts the message to the work item as a\nclarification comment and queues nothing.\n",{"name":5,"model":33,"description":7,"argument-hint":40},"\u003Cwork-item-id>","main","a99cabc3f459fbeaa42b13a1604db1bccb6a364b","plugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos",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":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add easingthemes\u002Fdx-aem-flow --skill dx-discover-repos",{"tool":56,"command":57},"bunx","bunx skills add easingthemes\u002Fdx-aem-flow --skill dx-discover-repos",{"tool":59,"command":60},"pnpm","pnpm dlx skills add easingthemes\u002Fdx-aem-flow --skill dx-discover-repos","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002FSKILL.md",true,[64,70,74,78,84,88,92,96,100,104],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"scripts\u002Fparse-crossrepo-table.sh","SCRIPT","脚本",3472,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Fscripts\u002Fparse-crossrepo-table.sh",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"scripts\u002Fparse-explicit-repos.sh",3408,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Fscripts\u002Fparse-explicit-repos.sh",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"scripts\u002Froute-targets.sh",6212,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Fscripts\u002Froute-targets.sh",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"tests\u002Ffixtures\u002Fcomment-explicit.txt","REFERENCE","参考文档",84,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Fcomment-explicit.txt",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"tests\u002Ffixtures\u002Fcomment-no-repos.txt",48,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Fcomment-no-repos.txt",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"tests\u002Ffixtures\u002Fconfig-multi-platform.yaml",486,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Fconfig-multi-platform.yaml",{"path":93,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":94,"sourceHtmlUrl":95},"tests\u002Ffixtures\u002Fconfig-single-platform.yaml",98,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Fconfig-single-platform.yaml",{"path":97,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":98,"sourceHtmlUrl":99},"tests\u002Ffixtures\u002Frepos-registry.json",405,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Frepos-registry.json",{"path":101,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":102,"sourceHtmlUrl":103},"tests\u002Ffixtures\u002Fresearch-crossrepo.md",300,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Ffixtures\u002Fresearch-crossrepo.md",{"path":105,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":106,"sourceHtmlUrl":107},"tests\u002Frun-tests.sh",7251,"https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-hub\u002Fskills\u002Fdx-discover-repos\u002Ftests\u002Frun-tests.sh",[109,130,152,173,189,212],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":35},"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",[],[20,116,27,117,118,34,119,120,121,122,123,124,125,31,126,127,128,19,129],"dx hub status","status","hub status","show","for","ticket","clean","use","done","Bash","dispatch","read","write","grep",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":35},"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",[],[137,138,20,139,27,140,141,142,143,144,145,146,147,148,125,149,150,127,128,151],"init","hub init","dx hub init","SET","time","mode","default","up","repo setup","orchestration","configure","multi-repo","cli","directory","edit",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":163,"publishedAt":35},"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",[158],{"categoryNo":159,"categoryName":160,"taxonomyType":161,"taxonomyTypeDesc":162},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[20,164,126,27,165,120,25,166,167,121,168,169,123,170,125,171,172,30,31,24],"dx hub dispatch","ado","work on","session","open","MCP","URL","vscode","code",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":35},"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",[],[20,180,27,181,119,182,25,183,184,185,186,123,147,125,187,127,188,128,151,19],"dx hub config","config","view","manage","trigger","true","adjust","terminal","settings",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":196,"publishedAt":35},"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",[195],{"categoryNo":159,"categoryName":160,"taxonomyType":161,"taxonomyTypeDesc":162},[197,20,198,199,200,201,202,203,204,205,127,128,151,206,207,208,209,123,210,211],"upgrade","dx upgrade","project","actions","search","fix","files","auto","run","list","doctor","manual","missing","plugin","plugins",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":218,"publishedAt":35},"01M6H483MFY4W4TPMWJJPG9JZW","dx-ticket-analyze","Research an ADO\u002FJira ticket and list the source files and assets it involves. Use for 'analyze ticket', 'what files does this touch?', 'find files for this story'.","https:\u002F\u002Fgithub.com\u002Feasingthemes\u002Fdx-aem-flow\u002Fblob\u002Fmain\u002Fplugins\u002Fdx-core\u002Fskills\u002Fdx-ticket-analyze\u002FSKILL.md",[],[121,219,20,220,201,203,170,24,221,127,128,222,151,223,206,224,225,226,165,120],"analyze","dx ticket analyze","haiku","jira","issue","source","atlassian","jira ticket"]