[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6QX4JAVCMR4PXNP4NPEPWH1":3,"skill-same:01M6QX4JAVCMR4PXNP4NPEPWH1":124},{"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":44,"commitSha":45,"skillDirectory":46,"forksCount":14,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6QX4JAVCMR4PXNP4NPEPWH1","drawio-shapes",null,"Extract and catalog draw.io shape libraries from the jgraph\u002Fdrawio GitHub repo. Use when the user asks to refresh provider catalogs, inspect available AWS, Azure, or GCP icons, update the shape library, or prepare downstream shape artifacts for another skill.","mark-groves\u002Fskills-nexus","mark-groves","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F149283429?v=4","01M6QX3FM1KX52BHYNRHSV4PF1","Mark Groves","01M6QX3FRGD4WAGTQH8JK6T7JK",0,"MIT","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"drawio","drawio shapes","use","github","when","github repo","for","inspect","io","another skill","provider","azure","catalog","refresh","repo","gcp","artifacts","icons","update","libraries","2026-11-10 10:12:30",false,"---\nname: drawio-shapes\ndescription: Extract and catalog draw.io shape libraries from the jgraph\u002Fdrawio GitHub repo. Use when the user asks to refresh provider catalogs, inspect available AWS, Azure, or GCP icons, update the shape library, or prepare downstream shape artifacts for another skill.\n---\n\n# Instructions\n\nYou are a draw.io shape library extractor. Your job is to download\nsidebar JS files from the jgraph\u002Fdrawio GitHub repo, run the bundled\nextraction script to parse icon definitions, and produce structured\ncatalogs that other skills (like cloud-diagram) can consume.\n\nUse only bundled files from this skill's own directory plus user-\nprovided inputs. Do not probe user-level or project-level install\nroots at runtime, and do not write into sibling skills.\n\n## Step 1 — Identify the target library\n\nDetermine which draw.io shape library the user wants from their input:\n\n| User says | Library | Sidebar JS file |\n| --- | --- | --- |\n| GCP, Google Cloud | GCP2 + GCPIcons | `Sidebar-GCP2.js`, `Sidebar-GCPIcons.js` |\n| AWS, Amazon | AWS4 | `Sidebar-AWS4.js` |\n| Azure, Microsoft | Azure2 | `Sidebar-Azure2.js` |\n| all, everything | All of the above | All files |\n\nRead `references\u002Fsource-map.md` for the full mapping of libraries to\nfiles, download methods, and shape encoding formats.\n\n## Step 2 — Download the sidebar JS file\n\nThe sidebar basename is one of the fixed names in the table above.\nIt must match `^Sidebar-[A-Za-z0-9]+\\.js$`. Reject `$`, backticks,\nquotes, newlines, and `;`. Write `sidebar-request.json` with the Write\ntool. Do not build that file with a shell redirect, a heredoc, or\n`python -c`. The shell command is a fixed literal. Its `--input-file`\nargument matches `^[A-Za-z0-9._-]+\\.json$` and never comes from the\nrequest.\n\n```json\n{\"file\": \"Sidebar-AWS4.js\"}\n```\n\n```bash\nbash scripts\u002Ffetch_sidebar.sh --input-file sidebar-request.json\n```\n\nIt downloads that sidebar at draw.io commit\n`24b76c2cbd55d88e354042e8d329a2e4708972bc` through the `gh` git blob\nendpoint. It writes to the gitignored skill-local working directory.\nIt sends an empty `GH_TOKEN` so a broken local token cannot block\nanonymous reads.\n\nThe script fails closed. A `gh` error, an empty body, or a body whose\ngit blob hash differs from the pinned SHA exits non-zero. The existing\nfile in the skill-local working directory stays untouched in each case. Stop on a non-zero\nexit. Do not extract a stale or partial file.\n\n## Step 3 — Extract shapes\n\nWrite `extract-request.json` with the Write tool. `file` must match\n`^working\u002FSidebar-[A-Za-z0-9]+\\.js$`. `output` must match\n`^working\u002F[A-Za-z0-9._-]+\\.json$`. Both are relative basenames under\nthe skill-local working directory, with no `..` and no shell metacharacters. Then run only\nthis fixed command:\n\n```json\n{\"file\": \"working\u002FSidebar-AWS4.js\", \"output\": \"working\u002Faws4_extracted.json\"}\n```\n\n```bash\npython scripts\u002Fextract.py --input-file extract-request.json\n```\n\nThe script auto-detects the library type (GCPIcons, GCP2, AWS4,\nAzure2) and handles the currently supported encoding patterns:\nbase64 SVGs, stencil references, product\u002Fservice cards, composite\ntemplates, zones, edges, and Azure SVG image paths. It verifies all\nbase64 data decodes cleanly, prints a per-category summary, and emits\nnormalized `width`\u002F`height` fields that downstream catalog generation\nshould consume directly.\n\nTreat AWS4 as a first-class parsing path. AWS4 is not primarily a\nbase64 icon library; most entries are concatenated style expressions\nthat resolve to `shape=mxgraph.aws4.*` or\n`shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.*`.\n\nIf a category returns 0 results, the file format may have changed.\nSee \"Adapting to new encoding patterns\" below.\nIf the extractor returns 0 total entries for a known library, treat\nthat as a hard failure and update the patterns before proceeding.\nGCP3, AWS4b, and the legacy AWS3, AWS3D, Azure, and GCP sidebars are\nrecorded skips. A skip is not a parse failure. AWS4 prints a count of\nvertex calls it could not resolve.\n\n## Step 4 — Output the catalog\n\nIf the user only wants machine-readable data, the extracted JSON is the\noutput. If the user wants to refresh `cloud-diagram` or another\nconsumer, generate import-ready markdown fragments.\n\n### JSON (for programmatic use)\n\nThe extraction script already produces this. The JSON named by the\nextract request `output` field has this structure:\n\n```json\n{\n  \"source\": \"jgraph\u002Fdrawio \u003Cfile>\",\n  \"library\": \"GCP2\",\n  \"stencil_namespace\": \"mxgraph.gcp2\",\n  \"categories\": {\n    \"CategoryName\": [\n      {\n        \"name\": \"Service Name\",\n        \"type\": \"vertex_icon|stencil|svg_image|product_card|...\",\n        \"stencil_name\": \"mxgraph.gcp2.service_name\",\n        \"image_path\": \"img\u002Flib\u002Fazure2\u002Fcompute\u002FVirtual_Machine.svg\",\n        \"width_scale\": 0.5,\n        \"height_scale\": 0.5,\n        \"width\": 50,\n        \"height\": 50\n      }\n    ]\n  }\n}\n```\n\n### Markdown fragment (for downstream consumers)\n\nUse the committed generator at `scripts\u002Fgenerate_catalog.py` rather\nthan writing one ad hoc in the working directory. This keeps the\nrefresh workflow\nreproducible:\n\nWrite `catalog-request.json` with the Write tool. Each provider is\n`aws`, `gcp`, `azure`, or `all` and must match `^[A-Za-z0-9._-]+$`.\n`output_dir` is a relative directory whose components match\n`^[A-Za-z0-9._-]+$`. Then run only this fixed command:\n\n```json\n{\"providers\": [\"aws\"], \"output_dir\": \"catalog-out\"}\n```\n\n```bash\npython scripts\u002Fgenerate_catalog.py --input-file catalog-request.json\n```\n\nThe generator writes provider-specific fragments to the current working\ndirectory by default:\n\n- AWS → `aws4-shapes.generated.md`\n- GCP → `gcp-shapes.generated.md`\n- Azure → `azure-shapes.generated.md`\n\nEach fragment contains only the generated section content that belongs\nbelow the consumer marker. It does not include consumer-specific\nheaders and it does not mutate sibling files.\n\n#### Building style strings by entry type\n\nEach entry type needs a complete, usable style string. The style\nbase templates vary by provider — extract them from the source\nsidebar JS file rather than hardcoding them. Look for the variable\ndeclarations at the top of each palette function (e.g. `var s =`,\n`var n =`). Use the normalized `width`\u002F`height` from the extracted JSON\nrather than trying to infer dimensions again in the generator.\n\nCommon entry types across providers:\n\n- **Stencil shapes** (`type: \"stencil\"`, `\"service_card\"`,\n  `\"user_device_card\"`, `\"product_card_logo\"`): build style from\n  the base template variable + `shape=\u003Cstencil_name>`. Include\n  size from extracted width\u002Fheight scales.\n- **Base64 SVG shapes** (`type: \"vertex_icon\"`,\n  `\"product_card\"`): include the full base64 data in the style\n  string (`image=data:image\u002Fsvg+xml,\u003Cbase64>;`). This makes the\n  file large but the data is needed for rendering.\n- **SVG image-path shapes** (`type: \"svg_image\"`): build the style\n  string from the extracted `image_path`\n  (`image=img\u002Flib\u002Fazure2\u002F...;`). Use the extracted width\u002Fheight in\n  pixels; preserve non-square aspect ratios.\n- **Edge shapes** (`type: \"edge\"`): extract the edge base style\n  and per-entry suffixes (strokeColor, dashed, dashPattern) from\n  the source JS `createEdgeTemplateEntry` calls.\n- **Zone shapes** (`type: \"zone\"`): extract the zone base style\n  and per-entry fillColor from the source JS.\n- **Composite templates** (`type: \"composite_template\"`): these\n  are multi-cell templates that cannot be expressed as a single\n  style string. Document them by name and type.\n\nNew entry types may appear in future extractions or other\nproviders. When encountered, read the source JS to determine the\nstyle pattern and add it to the generation script.\n\n#### Deduplication and cleanup\n\nThe extraction produces entries from multiple sidebar library\nsections, so the same service often appears in several categories\nwith different sizes. Sizes are the sidebar's own pixel sizes. Each\nGCP palette scales its entries by its own `var s` (GCP2 uses 1,\nGCPIcons uses 100 or 200), and the extractor applies that value. The\ngeneration script must deduplicate and clean up:\n\n1. **Deduplicate within a library family.** When the same `### Entry`\n   name appears multiple times within the same family, keep one entry:\n   a Service Card glyph first, then a plain icon, then a\n   `product_card_logo` stencil, and the smallest area within a tier.\n   Do not merge away variants from different active families.\n2. **Keep native sizes.** Do not square or clamp sizes. Consumers fit\n   the native `WxH` into their own display box and keep its aspect.\n3. **Remove empty categories.** If all entries in a category were\n   removed as duplicates, remove the entire `## Category` section.\n4. **Remove double blank lines.** Collapse any consecutive blank\n   lines to a single blank line.\n\nFor GCP, treat `GCP2` and `GCPIcons` as separate current families and\nmerge both into the final catalog. If the same service label exists in\nboth families, keep both entries and suffix the `GCPIcons` variant as\n` (GCPIcons)` so each style remains addressable.\n\n#### Verifying completeness\n\nAfter generating and cleaning the fragment, report:\n\n- Total entries before and after deduplication\n- Number of entries removed as duplicates\n- Number of categories removed as empty\n- Final unique entry count\n\nIf the user asks for an end-to-end test, do not stop at catalog\nrefresh. Regenerate the fragments and verify that each requested\nprovider produces a non-empty, import-ready markdown fragment with the\nexpected category and entry structure. Do not invoke sibling-skill\nimporters or renderers from this skill. If the user wants downstream\nimport or rendering validation, state that it must be performed by the\nconsumer after artifact handoff.\n\n## Step 5 — Report results\n\nSummarize what was extracted:\n\n- Total number of shapes\u002Ficons\n- Breakdown by category\n- Any categories that returned 0 results (may indicate a new\n  encoding pattern that needs handling)\n- Extracted JSON paths\n- Generated fragment paths\n\n## Adapting to new encoding patterns\n\ndraw.io's sidebar files are not stable APIs. If the extraction script\nproduces fewer results than expected, the file format may have changed.\nDebug by:\n\n1. Checking how the style prefix variable is named in each palette\n   function (`n`, `s1`, or inlined).\n2. Looking at the `createVertexTemplateEntry` call signature — the\n   position of the name argument can shift.\n3. Checking for new helper functions (like `addGCP2UserProductCardSet`)\n   that wrap template creation.\n4. For AWS4, tracing string concatenation variables before assuming a\n   value is base64 data.\n\nUpdate the extraction patterns in `scripts\u002Fextract.py` and note\nchanges in `references\u002Fsource-map.md`.\n","# Instructions\n\nYou are a draw.io shape library extractor. Your job is to download\nsidebar JS files from the jgraph\u002Fdrawio GitHub repo, run the bundled\nextraction script to parse icon definitions, and produce structured\ncatalogs that other skills (like cloud-diagram) can consume.\n\nUse only bundled files from this skill's own directory plus user-\nprovided inputs. Do not probe user-level or project-level install\nroots at runtime, and do not write into sibling skills.\n\n## Step 1 — Identify the target library\n\nDetermine which draw.io shape library the user wants from their input:\n\n| User says | Library | Sidebar JS file |\n| --- | --- | --- |\n| GCP, Google Cloud | GCP2 + GCPIcons | `Sidebar-GCP2.js`, `Sidebar-GCPIcons.js` |\n| AWS, Amazon | AWS4 | `Sidebar-AWS4.js` |\n| Azure, Microsoft | Azure2 | `Sidebar-Azure2.js` |\n| all, everything | All of the above | All files |\n\nRead `references\u002Fsource-map.md` for the full mapping of libraries to\nfiles, download methods, and shape encoding formats.\n\n## Step 2 — Download the sidebar JS file\n\nThe sidebar basename is one of the fixed names in the table above.\nIt must match `^Sidebar-[A-Za-z0-9]+\\.js$`. Reject `$`, backticks,\nquotes, newlines, and `;`. Write `sidebar-request.json` with the Write\ntool. Do not build that file with a shell redirect, a heredoc, or\n`python -c`. The shell command is a fixed literal. Its `--input-file`\nargument matches `^[A-Za-z0-9._-]+\\.json$` and never comes from the\nrequest.\n\n```json\n{\"file\": \"Sidebar-AWS4.js\"}\n```\n\n```bash\nbash scripts\u002Ffetch_sidebar.sh --input-file sidebar-request.json\n```\n\nIt downloads that sidebar at draw.io commit\n`24b76c2cbd55d88e354042e8d329a2e4708972bc` through the `gh` git blob\nendpoint. It writes to the gitignored skill-local working directory.\nIt sends an empty `GH_TOKEN` so a broken local token cannot block\nanonymous reads.\n\nThe script fails closed. A `gh` error, an empty body, or a body whose\ngit blob hash differs from the pinned SHA exits non-zero. The existing\nfile in the skill-local working directory stays untouched in each case. Stop on a non-zero\nexit. Do not extract a stale or partial file.\n\n## Step 3 — Extract shapes\n\nWrite `extract-request.json` with the Write tool. `file` must match\n`^working\u002FSidebar-[A-Za-z0-9]+\\.js$`. `output` must match\n`^working\u002F[A-Za-z0-9._-]+\\.json$`. Both are relative basenames under\nthe skill-local working directory, with no `..` and no shell metacharacters. Then run only\nthis fixed command:\n\n```json\n{\"file\": \"working\u002FSidebar-AWS4.js\", \"output\": \"working\u002Faws4_extracted.json\"}\n```\n\n```bash\npython scripts\u002Fextract.py --input-file extract-request.json\n```\n\nThe script auto-detects the library type (GCPIcons, GCP2, AWS4,\nAzure2) and handles the currently supported encoding patterns:\nbase64 SVGs, stencil references, product\u002Fservice cards, composite\ntemplates, zones, edges, and Azure SVG image paths. It verifies all\nbase64 data decodes cleanly, prints a per-category summary, and emits\nnormalized `width`\u002F`height` fields that downstream catalog generation\nshould consume directly.\n\nTreat AWS4 as a first-class parsing path. AWS4 is not primarily a\nbase64 icon library; most entries are concatenated style expressions\nthat resolve to `shape=mxgraph.aws4.*` or\n`shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.*`.\n\nIf a category returns 0 results, the file format may have changed.\nSee \"Adapting to new encoding patterns\" below.\nIf the extractor returns 0 total entries for a known library, treat\nthat as a hard failure and update the patterns before proceeding.\nGCP3, AWS4b, and the legacy AWS3, AWS3D, Azure, and GCP sidebars are\nrecorded skips. A skip is not a parse failure. AWS4 prints a count of\nvertex calls it could not resolve.\n\n## Step 4 — Output the catalog\n\nIf the user only wants machine-readable data, the extracted JSON is the\noutput. If the user wants to refresh `cloud-diagram` or another\nconsumer, generate import-ready markdown fragments.\n\n### JSON (for programmatic use)\n\nThe extraction script already produces this. The JSON named by the\nextract request `output` field has this structure:\n\n```json\n{\n  \"source\": \"jgraph\u002Fdrawio \u003Cfile>\",\n  \"library\": \"GCP2\",\n  \"stencil_namespace\": \"mxgraph.gcp2\",\n  \"categories\": {\n    \"CategoryName\": [\n      {\n        \"name\": \"Service Name\",\n        \"type\": \"vertex_icon|stencil|svg_image|product_card|...\",\n        \"stencil_name\": \"mxgraph.gcp2.service_name\",\n        \"image_path\": \"img\u002Flib\u002Fazure2\u002Fcompute\u002FVirtual_Machine.svg\",\n        \"width_scale\": 0.5,\n        \"height_scale\": 0.5,\n        \"width\": 50,\n        \"height\": 50\n      }\n    ]\n  }\n}\n```\n\n### Markdown fragment (for downstream consumers)\n\nUse the committed generator at `scripts\u002Fgenerate_catalog.py` rather\nthan writing one ad hoc in the working directory. This keeps the\nrefresh workflow\nreproducible:\n\nWrite `catalog-request.json` with the Write tool. Each provider is\n`aws`, `gcp`, `azure`, or `all` and must match `^[A-Za-z0-9._-]+$`.\n`output_dir` is a relative directory whose components match\n`^[A-Za-z0-9._-]+$`. Then run only this fixed command:\n\n```json\n{\"providers\": [\"aws\"], \"output_dir\": \"catalog-out\"}\n```\n\n```bash\npython scripts\u002Fgenerate_catalog.py --input-file catalog-request.json\n```\n\nThe generator writes provider-specific fragments to the current working\ndirectory by default:\n\n- AWS → `aws4-shapes.generated.md`\n- GCP → `gcp-shapes.generated.md`\n- Azure → `azure-shapes.generated.md`\n\nEach fragment contains only the generated section content that belongs\nbelow the consumer marker. It does not include consumer-specific\nheaders and it does not mutate sibling files.\n\n#### Building style strings by entry type\n\nEach entry type needs a complete, usable style string. The style\nbase templates vary by provider — extract them from the source\nsidebar JS file rather than hardcoding them. Look for the variable\ndeclarations at the top of each palette function (e.g. `var s =`,\n`var n =`). Use the normalized `width`\u002F`height` from the extracted JSON\nrather than trying to infer dimensions again in the generator.\n\nCommon entry types across providers:\n\n- **Stencil shapes** (`type: \"stencil\"`, `\"service_card\"`,\n  `\"user_device_card\"`, `\"product_card_logo\"`): build style from\n  the base template variable + `shape=\u003Cstencil_name>`. Include\n  size from extracted width\u002Fheight scales.\n- **Base64 SVG shapes** (`type: \"vertex_icon\"`,\n  `\"product_card\"`): include the full base64 data in the style\n  string (`image=data:image\u002Fsvg+xml,\u003Cbase64>;`). This makes the\n  file large but the data is needed for rendering.\n- **SVG image-path shapes** (`type: \"svg_image\"`): build the style\n  string from the extracted `image_path`\n  (`image=img\u002Flib\u002Fazure2\u002F...;`). Use the extracted width\u002Fheight in\n  pixels; preserve non-square aspect ratios.\n- **Edge shapes** (`type: \"edge\"`): extract the edge base style\n  and per-entry suffixes (strokeColor, dashed, dashPattern) from\n  the source JS `createEdgeTemplateEntry` calls.\n- **Zone shapes** (`type: \"zone\"`): extract the zone base style\n  and per-entry fillColor from the source JS.\n- **Composite templates** (`type: \"composite_template\"`): these\n  are multi-cell templates that cannot be expressed as a single\n  style string. Document them by name and type.\n\nNew entry types may appear in future extractions or other\nproviders. When encountered, read the source JS to determine the\nstyle pattern and add it to the generation script.\n\n#### Deduplication and cleanup\n\nThe extraction produces entries from multiple sidebar library\nsections, so the same service often appears in several categories\nwith different sizes. Sizes are the sidebar's own pixel sizes. Each\nGCP palette scales its entries by its own `var s` (GCP2 uses 1,\nGCPIcons uses 100 or 200), and the extractor applies that value. The\ngeneration script must deduplicate and clean up:\n\n1. **Deduplicate within a library family.** When the same `### Entry`\n   name appears multiple times within the same family, keep one entry:\n   a Service Card glyph first, then a plain icon, then a\n   `product_card_logo` stencil, and the smallest area within a tier.\n   Do not merge away variants from different active families.\n2. **Keep native sizes.** Do not square or clamp sizes. Consumers fit\n   the native `WxH` into their own display box and keep its aspect.\n3. **Remove empty categories.** If all entries in a category were\n   removed as duplicates, remove the entire `## Category` section.\n4. **Remove double blank lines.** Collapse any consecutive blank\n   lines to a single blank line.\n\nFor GCP, treat `GCP2` and `GCPIcons` as separate current families and\nmerge both into the final catalog. If the same service label exists in\nboth families, keep both entries and suffix the `GCPIcons` variant as\n` (GCPIcons)` so each style remains addressable.\n\n#### Verifying completeness\n\nAfter generating and cleaning the fragment, report:\n\n- Total entries before and after deduplication\n- Number of entries removed as duplicates\n- Number of categories removed as empty\n- Final unique entry count\n\nIf the user asks for an end-to-end test, do not stop at catalog\nrefresh. Regenerate the fragments and verify that each requested\nprovider produces a non-empty, import-ready markdown fragment with the\nexpected category and entry structure. Do not invoke sibling-skill\nimporters or renderers from this skill. If the user wants downstream\nimport or rendering validation, state that it must be performed by the\nconsumer after artifact handoff.\n\n## Step 5 — Report results\n\nSummarize what was extracted:\n\n- Total number of shapes\u002Ficons\n- Breakdown by category\n- Any categories that returned 0 results (may indicate a new\n  encoding pattern that needs handling)\n- Extracted JSON paths\n- Generated fragment paths\n\n## Adapting to new encoding patterns\n\ndraw.io's sidebar files are not stable APIs. If the extraction script\nproduces fewer results than expected, the file format may have changed.\nDebug by:\n\n1. Checking how the style prefix variable is named in each palette\n   function (`n`, `s1`, or inlined).\n2. Looking at the `createVertexTemplateEntry` call signature — the\n   position of the name argument can shift.\n3. Checking for new helper functions (like `addGCP2UserProductCardSet`)\n   that wrap template creation.\n4. For AWS4, tracing string concatenation variables before assuming a\n   value is base64 data.\n\nUpdate the extraction patterns in `scripts\u002Fextract.py` and note\nchanges in `references\u002Fsource-map.md`.\n",{"name":5,"description":7},"main","da963f53fd9948346b7187ae520bf1ad026254d9","plugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus","https:\u002F\u002Fgithub.com\u002Fmark-groves","2026-11-11 06:28:31",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add mark-groves\u002Fskills-nexus --skill drawio-shapes",{"tool":56,"command":57},"bunx","bunx skills add mark-groves\u002Fskills-nexus --skill drawio-shapes",{"tool":59,"command":60},"pnpm","pnpm dlx skills add mark-groves\u002Fskills-nexus --skill drawio-shapes","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002FSKILL.md",true,[64,70,74,78,82,88,92,96,100,104,108,112,116,120],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"fixtures\u002Fextracted\u002FAWS4_extracted.json","REFERENCE","参考文档",637,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fextracted\u002FAWS4_extracted.json",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"fixtures\u002Fextracted\u002FAzure2_extracted.json",510,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fextracted\u002FAzure2_extracted.json",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"fixtures\u002Fextracted\u002FGCP2_extracted.json",450,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fextracted\u002FGCP2_extracted.json",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"fixtures\u002Fextracted\u002FGCPIcons_extracted.json",409,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fextracted\u002FGCPIcons_extracted.json",{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"fixtures\u002Fsidebars\u002Faws4-unresolved.js","SCRIPT","脚本",404,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fsidebars\u002Faws4-unresolved.js",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"fixtures\u002Fsidebars\u002Faws4b-skip.js",131,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fsidebars\u002Faws4b-skip.js",{"path":93,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":94,"sourceHtmlUrl":95},"fixtures\u002Fsidebars\u002Fgcp2-image-no-semicolon.js",620,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fsidebars\u002Fgcp2-image-no-semicolon.js",{"path":97,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":98,"sourceHtmlUrl":99},"fixtures\u002Fsidebars\u002Fgcp2-var-s.js",1041,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fsidebars\u002Fgcp2-var-s.js",{"path":101,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":102,"sourceHtmlUrl":103},"fixtures\u002Fsidebars\u002Fgcpicons-semicolon.js",335,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Ffixtures\u002Fsidebars\u002Fgcpicons-semicolon.js",{"path":105,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Fsource-map.md",8293,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Freferences\u002Fsource-map.md",{"path":109,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":110,"sourceHtmlUrl":111},"scripts\u002Fextract.py",26787,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Fscripts\u002Fextract.py",{"path":113,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":114,"sourceHtmlUrl":115},"scripts\u002Ffetch_sidebar.sh",1886,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Fscripts\u002Ffetch_sidebar.sh",{"path":117,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":118,"sourceHtmlUrl":119},"scripts\u002Fgenerate_catalog.py",20257,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Fscripts\u002Fgenerate_catalog.py",{"path":121,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":122,"sourceHtmlUrl":123},"scripts\u002Fsidebar_names.py",5473,"https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fdrawio-shapes\u002Fscripts\u002Fsidebar_names.py",[125,163,185,198,209,224],{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":144,"publishedAt":39},"01M6QX4VYYCRAN9CAVET42Y2AW","skill-architect","Design, create, audit, evaluate, package, and improve reusable agent skills and their target integrations. Use when turning workflows or runbooks into skills, refining skill triggering or instructions, adding skill evals, separating runtime packages from repository evidence, checking cross-client compatibility, or adapting a shared skill to a specific agent harness.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fskill-architect\u002Fskills\u002Fskill-architect\u002FSKILL.md",[131,136,139],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":137,"categoryName":138,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[145,146,147,148,149,150,151,152,153,154,155,156,21,157,158,159,160,161,162,23],"architect","skill architect","design","client compatibility","workflows","improve","packages","create","harness","package","integrations","agent harness","evidence","evals","reusable","shared","runtime","runbooks",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":39},"01M6QX4BR2FWG8V3QSGCSX80NC","cloud-diagram","Generate cloud architecture diagrams as `.drawio` files. Use when the user asks for an architecture diagram, infrastructure diagram, cloud diagram, or system design for AWS, Azure, GCP, or multi-cloud environments.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fplugins\u002Fdrawio\u002Fskills\u002Fcloud-diagram\u002FSKILL.md",[],[170,171,172,23,25,173,174,175,176,177,178,179,19,34,147,180,181,182,183,184],"diagram","cloud diagram","cloud","environments","as","cloud architecture","files","diagrams","system design","system","architecture","architecture diagrams","infrastructure","architecture diagram","generate",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":191,"publishedAt":39},"01M6QX484HE3Z461066PMAF152","example","Demonstrate this repository's shared runtime package and external eval conventions. Use when a task needs the example skill contract.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fevals\u002Fskill-architect\u002Ffixtures\u002Frepo-contract\u002Fskills\u002Fexample\u002FSKILL.md",[],[187,192,193,154,194,21,195,196,160,161,197,23],"eval","example skill","repository","task","conventions","contract",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":204,"publishedAt":39},"01M6QX46PRN4GF9TKZRPDP8HNB","release-notes","Helps with release notes.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fevals\u002Fskill-architect\u002Ffixtures\u002Frelease-notes-skill\u002Fskills\u002Frelease-notes\u002FSKILL.md",[],[205,206,207,208],"release","release notes","notes","with",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":218,"publishedAt":39},"01M6QX3PWVFVTCTWTZ2NK024FQ","pdf-processing","Helps with PDF files.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fevals\u002Fskill-architect\u002Ffixtures\u002Fpdf-skill\u002Fskills\u002Fpdf-processing\u002FSKILL.md",[215],{"categoryNo":216,"categoryName":217,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000002","文档处理",[219,220,221,222,223,176,208],"PDF","processing","pdf processing","Bash","read",{"skillNo":225,"name":226,"nameZh":6,"description":227,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":228,"categories":229,"keywords":230,"publishedAt":39},"01M6QX3JGZ91NTE8RA566GMX17","release-helper","Prepare and publish release notes for repository releases.","https:\u002F\u002Fgithub.com\u002Fmark-groves\u002Fskills-nexus\u002Fblob\u002Fmain\u002Fevals\u002Fskill-architect\u002Ffixtures\u002Fcapability-review\u002Fskills\u002Frelease-helper\u002FSKILL.md",[],[231,232,205,207,206,194,233,234,25,235],"release helper","helper","publish","releases","prepare"]