jumpstart-mode 1.1.13 → 1.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2375) hide show
  1. package/.agents/rules/jumpstart-framework.md +28 -0
  2. package/.cursor/rules/jumpstart-framework.mdc +31 -0
  3. package/.cursorrules +29 -23
  4. package/.github/ISSUE_TEMPLATE/agent-task.yml +66 -0
  5. package/.github/ISSUE_TEMPLATE/bug-report.yml +29 -0
  6. package/.github/ISSUE_TEMPLATE/feature-request.yml +34 -0
  7. package/.github/agents/jumpstart-adversary.agent.md +10 -0
  8. package/.github/agents/jumpstart-analyst.agent.md +40 -1
  9. package/.github/agents/jumpstart-architect.agent.md +53 -1
  10. package/.github/agents/jumpstart-autonav.agent.md +76 -0
  11. package/.github/agents/jumpstart-challenger.agent.md +34 -1
  12. package/.github/agents/jumpstart-developer.agent.md +48 -1
  13. package/.github/agents/jumpstart-devops.agent.md +11 -0
  14. package/.github/agents/jumpstart-diagram-verifier.agent.md +2 -0
  15. package/.github/agents/jumpstart-maintenance.agent.md +10 -0
  16. package/.github/agents/jumpstart-performance.agent.md +10 -0
  17. package/.github/agents/jumpstart-pitcrew.agent.md +2 -0
  18. package/.github/agents/jumpstart-pm.agent.md +41 -1
  19. package/.github/agents/jumpstart-qa.agent.md +10 -0
  20. package/.github/agents/jumpstart-quick-dev.agent.md +12 -0
  21. package/.github/agents/jumpstart-refactor.agent.md +9 -0
  22. package/.github/agents/jumpstart-requirements-extractor.agent.md +10 -0
  23. package/.github/agents/jumpstart-researcher.agent.md +9 -0
  24. package/.github/agents/jumpstart-retrospective.agent.md +10 -0
  25. package/.github/agents/jumpstart-reviewer.agent.md +9 -0
  26. package/.github/agents/jumpstart-scout.agent.md +32 -0
  27. package/.github/agents/jumpstart-scrum-master.agent.md +11 -0
  28. package/.github/agents/jumpstart-security.agent.md +10 -0
  29. package/.github/agents/jumpstart-tech-writer.agent.md +9 -0
  30. package/.github/agents/jumpstart-uiux-designer.agent.md +13 -1
  31. package/.github/agents/test agent.agent.md +0 -0
  32. package/.github/copilot-instructions.md +41 -0
  33. package/.github/hooks/README.md +90 -0
  34. package/.github/hooks/ambiguity-detector.js +84 -0
  35. package/.github/hooks/autonav.json +148 -0
  36. package/.github/hooks/block-agent-self-modification.js +72 -0
  37. package/.github/hooks/capture-plan.js +97 -0
  38. package/.github/hooks/dangerous-operation-escalator.js +92 -0
  39. package/.github/hooks/dependency-risk-precheck.js +53 -0
  40. package/.github/hooks/draft-changelog.js +137 -0
  41. package/.github/hooks/enforce-test-cochange.js +112 -0
  42. package/.github/hooks/inject-adr-context.js +136 -0
  43. package/.github/hooks/lib/common.js +293 -0
  44. package/.github/hooks/phase-boundary-guard.js +135 -0
  45. package/.github/hooks/phase-gate-status.js +91 -0
  46. package/.github/hooks/pre-compact.js +135 -0
  47. package/.github/hooks/prompt-classifier.js +66 -0
  48. package/.github/hooks/qa-log-capture.js +170 -0
  49. package/.github/hooks/retry-escalation.js +93 -0
  50. package/.github/hooks/schema-on-write-validator.js +105 -0
  51. package/.github/hooks/secrets-path-blocker.js +63 -0
  52. package/.github/hooks/session-analytics.js +159 -0
  53. package/.github/hooks/session-start.js +93 -0
  54. package/.github/hooks/simplicity-gate-guard.js +77 -0
  55. package/.github/hooks/skill-context-injector.js +185 -0
  56. package/.github/hooks/spec-drift-guard.js +97 -0
  57. package/.github/hooks/spec-graph-updater.js +94 -0
  58. package/.github/hooks/spec-traceability-validator.js +178 -0
  59. package/.github/hooks/timeline-warmup.js +86 -0
  60. package/.github/hooks/upstream-spec-guard.js +120 -0
  61. package/.github/hooks/workspace-fingerprint.js +95 -0
  62. package/.github/instructions/agents-spec-interaction.instructions.md +64 -0
  63. package/.github/instructions/agents.instructions.md +14 -0
  64. package/.github/instructions/hooks.instructions.md +14 -0
  65. package/.github/instructions/source.instructions.md +15 -0
  66. package/.github/instructions/specs.instructions.md +19 -0
  67. package/.github/instructions/testing.instructions.md +15 -0
  68. package/.github/prompts/jumpstart-autonav.prompt.md +19 -0
  69. package/.github/skills/acceptance-test-author/SKILL.md +246 -0
  70. package/.github/skills/acceptance-test-author/evals/evals.json +114 -0
  71. package/.github/skills/acceptance-test-author/references/ai-test-patterns.md +276 -0
  72. package/.github/skills/acceptance-test-author/references/gherkin-style-guide.md +285 -0
  73. package/.github/skills/acceptance-test-author/references/scenario-design-patterns.md +245 -0
  74. package/.github/skills/acceptance-test-author/references/traceability-template.md +73 -0
  75. package/.github/skills/acquire-codebase-knowledge/SKILL.md +174 -0
  76. package/.github/skills/acquire-codebase-knowledge/assets/templates/ARCHITECTURE.md +49 -0
  77. package/.github/skills/acquire-codebase-knowledge/assets/templates/CONCERNS.md +56 -0
  78. package/.github/skills/acquire-codebase-knowledge/assets/templates/CONVENTIONS.md +52 -0
  79. package/.github/skills/acquire-codebase-knowledge/assets/templates/INTEGRATIONS.md +48 -0
  80. package/.github/skills/acquire-codebase-knowledge/assets/templates/STACK.md +56 -0
  81. package/.github/skills/acquire-codebase-knowledge/assets/templates/STRUCTURE.md +44 -0
  82. package/.github/skills/acquire-codebase-knowledge/assets/templates/TESTING.md +57 -0
  83. package/.github/skills/acquire-codebase-knowledge/references/inquiry-checkpoints.md +70 -0
  84. package/.github/skills/acquire-codebase-knowledge/references/stack-detection.md +131 -0
  85. package/.github/skills/acquire-codebase-knowledge/scripts/scan.py +712 -0
  86. package/.github/skills/agent-approval-policy-spec/README.md +27 -0
  87. package/.github/skills/agent-approval-policy-spec/SKILL.md +138 -0
  88. package/.github/skills/agent-approval-policy-spec/evals/evals.json +29 -0
  89. package/.github/skills/agent-approval-policy-spec/examples/operations-approval-policy-example.md +21 -0
  90. package/.github/skills/agent-approval-policy-spec/examples/support-approval-policy-example.md +21 -0
  91. package/.github/skills/agent-approval-policy-spec/references/approval-policy-patterns.md +31 -0
  92. package/.github/skills/agent-approval-policy-spec/references/audit-field-minimum.md +20 -0
  93. package/.github/skills/agent-approval-policy-spec/references/decision-class-taxonomy.md +29 -0
  94. package/.github/skills/agent-approval-policy-spec/references/override-governance.md +23 -0
  95. package/.github/skills/agent-approval-policy-spec/templates/approval-policy.example.yaml +39 -0
  96. package/.github/skills/agent-approval-policy-spec/templates/approval-policy.schema.json +60 -0
  97. package/.github/skills/agent-approval-policy-spec/templates/decision-class-matrix.csv +4 -0
  98. package/.github/skills/agent-customization/SKILL.md +78 -0
  99. package/.github/skills/agent-customization/references/agents.md +111 -0
  100. package/.github/skills/agent-customization/references/hooks.md +96 -0
  101. package/.github/skills/agent-customization/references/instructions.md +71 -0
  102. package/.github/skills/agent-customization/references/prompts.md +80 -0
  103. package/.github/skills/agent-customization/references/skills.md +100 -0
  104. package/.github/skills/agent-customization/references/workspace-instructions.md +66 -0
  105. package/.github/skills/agent-prd-writer/SKILL.md +85 -0
  106. package/.github/skills/agent-prd-writer/evals/evals.json +17 -0
  107. package/.github/skills/agent-prd-writer/references/prd-pattern.md +21 -0
  108. package/.github/skills/agent-tool-catalog-designer/SKILL.md +107 -0
  109. package/.github/skills/agent-tool-catalog-designer/evals/evals.json +32 -0
  110. package/.github/skills/agent-tool-catalog-designer/examples/example-it-helpdesk-agent.md +57 -0
  111. package/.github/skills/agent-tool-catalog-designer/references/tool-design-patterns.md +60 -0
  112. package/.github/skills/agent-tool-catalog-designer/templates/tool-catalog.md +43 -0
  113. package/.github/skills/agent-tool-catalog-designer/templates/tool-spec.md +68 -0
  114. package/.github/skills/agent-workflow-state-machine/SKILL.md +172 -0
  115. package/.github/skills/agent-workflow-state-machine/evals/evals.json +44 -0
  116. package/.github/skills/agent-workflow-state-machine/examples/jumpstart-client-recap-example.md +55 -0
  117. package/.github/skills/agent-workflow-state-machine/references/guardrails-retries-approvals.md +75 -0
  118. package/.github/skills/agent-workflow-state-machine/references/state-machine-design-guide.md +77 -0
  119. package/.github/skills/agent-workflow-state-machine/templates/agent-workflow-state-machine.mmd +42 -0
  120. package/.github/skills/agent-workflow-state-machine/templates/agent-workflow-state-machine.yaml +113 -0
  121. package/.github/skills/agent-workflow-state-machine/templates/human-approval-matrix.md +15 -0
  122. package/.github/skills/agent-workflow-state-machine/templates/state-transition-table.csv +9 -0
  123. package/.github/skills/ai-cost-model-designer/SKILL.md +100 -0
  124. package/.github/skills/ai-cost-model-designer/evals/evals.json +31 -0
  125. package/.github/skills/ai-cost-model-designer/examples/example-support-copilot-cost-model.md +51 -0
  126. package/.github/skills/ai-cost-model-designer/references/cost-components.md +94 -0
  127. package/.github/skills/ai-cost-model-designer/references/cost-lever-catalog.md +44 -0
  128. package/.github/skills/ai-cost-model-designer/templates/cost-model.md +60 -0
  129. package/.github/skills/ai-team-orchestration/SKILL.md +148 -0
  130. package/.github/skills/ai-team-orchestration/references/anti-patterns.md +48 -0
  131. package/.github/skills/ai-team-orchestration/references/brainstorm-format.md +94 -0
  132. package/.github/skills/ai-team-orchestration/references/project-brief-template.md +147 -0
  133. package/.github/skills/ai-team-orchestration/references/sprint-plan-template.md +140 -0
  134. package/.github/skills/ai-use-case-readiness-assessor/SKILL.md +112 -0
  135. package/.github/skills/ai-use-case-readiness-assessor/evals/evals.json +47 -0
  136. package/.github/skills/ai-use-case-readiness-assessor/evals/files/readiness-board-strategy-agent.md +27 -0
  137. package/.github/skills/ai-use-case-readiness-assessor/evals/files/readiness-maintenance-copilot.md +32 -0
  138. package/.github/skills/ai-use-case-readiness-assessor/evals/files/readiness-prior-auth-triage.md +29 -0
  139. package/.github/skills/ai-use-case-readiness-assessor/examples/ai-readiness-examples.md +40 -0
  140. package/.github/skills/ai-use-case-readiness-assessor/references/output-template.md +65 -0
  141. package/.github/skills/ai-use-case-readiness-assessor/references/readiness-model.md +92 -0
  142. package/.github/skills/api-contract-test-generator/SKILL.md +76 -0
  143. package/.github/skills/api-contract-test-generator/evals/evals.json +74 -0
  144. package/.github/skills/api-contract-test-generator/examples/openapi-to-pytest-example.md +17 -0
  145. package/.github/skills/api-contract-test-generator/references/ci-gating.md +27 -0
  146. package/.github/skills/api-contract-test-generator/references/contract-test-strategy.md +26 -0
  147. package/.github/skills/api-contract-test-generator/references/test-case-taxonomy.md +29 -0
  148. package/.github/skills/api-contract-test-generator/scripts/assertion_runner.py +27 -0
  149. package/.github/skills/api-contract-test-generator/templates/contract-test-matrix.md +7 -0
  150. package/.github/skills/api-contract-test-generator/templates/dotnet-xunit-contract-suite.cs +54 -0
  151. package/.github/skills/api-contract-test-generator/templates/node-jest-contract-suite.ts +36 -0
  152. package/.github/skills/api-contract-test-generator/templates/pytest-contract-suite.py +33 -0
  153. package/.github/skills/api-contract-test-generator/templates/python-contract-suite.py +32 -0
  154. package/.github/skills/api-creator/SKILL.md +246 -0
  155. package/.github/skills/api-creator/evals/evals.json +97 -0
  156. package/.github/skills/api-creator/examples/agent-tool-api.md +38 -0
  157. package/.github/skills/api-creator/examples/multi-tenant-saas-api.md +30 -0
  158. package/.github/skills/api-creator/examples/restaurant-deals-api.md +40 -0
  159. package/.github/skills/api-creator/examples/square-integration-api.md +34 -0
  160. package/.github/skills/api-creator/examples/webhook-receiver-api.md +38 -0
  161. package/.github/skills/api-creator/references/agent-friendly-api-guide.md +53 -0
  162. package/.github/skills/api-creator/references/auth-guide.md +69 -0
  163. package/.github/skills/api-creator/references/error-model-guide.md +64 -0
  164. package/.github/skills/api-creator/references/fastapi-patterns.md +58 -0
  165. package/.github/skills/api-creator/references/openapi-guide.md +75 -0
  166. package/.github/skills/api-creator/references/pagination-guide.md +63 -0
  167. package/.github/skills/api-creator/references/production-readiness.md +53 -0
  168. package/.github/skills/api-creator/references/rest-design-guide.md +98 -0
  169. package/.github/skills/api-creator/references/webhook-guide.md +63 -0
  170. package/.github/skills/api-creator/scripts/assertion_runner.py +30 -0
  171. package/.github/skills/api-creator/templates/alembic-env.py +42 -0
  172. package/.github/skills/api-creator/templates/docker-compose.yml +26 -0
  173. package/.github/skills/api-creator/templates/fastapi-main.py +43 -0
  174. package/.github/skills/api-creator/templates/fastapi-repository.py +24 -0
  175. package/.github/skills/api-creator/templates/fastapi-route.py +30 -0
  176. package/.github/skills/api-creator/templates/fastapi-service.py +20 -0
  177. package/.github/skills/api-creator/templates/openapi-template.yaml +140 -0
  178. package/.github/skills/api-creator/templates/pydantic-schema.py +30 -0
  179. package/.github/skills/api-creator/templates/pytest-api-test.py +27 -0
  180. package/.github/skills/api-creator/templates/sqlmodel-model.py +27 -0
  181. package/.github/skills/api-reviewer/SKILL.md +76 -0
  182. package/.github/skills/api-reviewer/evals/evals.json +74 -0
  183. package/.github/skills/api-reviewer/examples/sample-review-output.md +22 -0
  184. package/.github/skills/api-reviewer/references/compatibility-checks.md +31 -0
  185. package/.github/skills/api-reviewer/references/review-checklist.md +41 -0
  186. package/.github/skills/api-reviewer/references/severity-model.md +23 -0
  187. package/.github/skills/api-reviewer/scripts/assertion_runner.py +27 -0
  188. package/.github/skills/api-reviewer/templates/api-review-report-template.md +28 -0
  189. package/.github/skills/api-version-migration/SKILL.md +80 -0
  190. package/.github/skills/api-version-migration/evals/evals.json +74 -0
  191. package/.github/skills/api-version-migration/examples/v1-to-v2-migration-example.md +24 -0
  192. package/.github/skills/api-version-migration/references/change-classification.md +29 -0
  193. package/.github/skills/api-version-migration/references/deprecation-policy.md +23 -0
  194. package/.github/skills/api-version-migration/references/migration-strategies.md +25 -0
  195. package/.github/skills/api-version-migration/scripts/assertion_runner.py +27 -0
  196. package/.github/skills/api-version-migration/templates/client-compatibility-matrix.md +4 -0
  197. package/.github/skills/api-version-migration/templates/migration-plan-template.md +26 -0
  198. package/.github/skills/architecture-blueprint-generator/SKILL.md +121 -0
  199. package/.github/skills/architecture-blueprint-generator/evals/evals.json +42 -0
  200. package/.github/skills/architecture-blueprint-generator/examples/blueprint-outline-example.md +25 -0
  201. package/.github/skills/architecture-blueprint-generator/examples/finding-style-example.md +29 -0
  202. package/.github/skills/architecture-blueprint-generator/references/analysis-checkpoints.md +61 -0
  203. package/.github/skills/architecture-blueprint-generator/references/decision-records.md +41 -0
  204. package/.github/skills/architecture-blueprint-generator/references/diagram-guidance.md +57 -0
  205. package/.github/skills/architecture-blueprint-generator/references/technology-patterns.md +83 -0
  206. package/.github/skills/architecture-blueprint-generator/references/workflow.md +81 -0
  207. package/.github/skills/architecture-blueprint-generator/templates/adr-template.md +31 -0
  208. package/.github/skills/architecture-blueprint-generator/templates/project-architecture-blueprint-template.md +114 -0
  209. package/.github/skills/atlassian-capture-tasks-from-meeting-notes/SKILL.md +679 -0
  210. package/.github/skills/atlassian-capture-tasks-from-meeting-notes/references/action-item-patterns.md +445 -0
  211. package/.github/skills/atlassian-generate-status-report/SKILL.md +335 -0
  212. package/.github/skills/atlassian-generate-status-report/references/jql-patterns.md +82 -0
  213. package/.github/skills/atlassian-generate-status-report/references/report-templates.md +120 -0
  214. package/.github/skills/atlassian-generate-status-report/scripts/jql_builder.py +225 -0
  215. package/.github/skills/atlassian-search-company-knowledge/SKILL.md +575 -0
  216. package/.github/skills/atlassian-spec-to-backlog/SKILL.md +543 -0
  217. package/.github/skills/atlassian-spec-to-backlog/references/breakdown-examples.md +327 -0
  218. package/.github/skills/atlassian-spec-to-backlog/references/epic-templates.md +401 -0
  219. package/.github/skills/atlassian-spec-to-backlog/references/ticket-writing-guide.md +354 -0
  220. package/.github/skills/atlassian-triage-issue/SKILL.md +700 -0
  221. package/.github/skills/atlassian-triage-issue/references/bug-report-templates.md +451 -0
  222. package/.github/skills/atlassian-triage-issue/references/search-patterns.md +261 -0
  223. package/.github/skills/automate-this/SKILL.md +309 -0
  224. package/.github/skills/automate-this/evals/evals.json +73 -0
  225. package/.github/skills/automate-this/examples/automation-examples.md +311 -0
  226. package/.github/skills/automate-this/references/automation-patterns.md +476 -0
  227. package/.github/skills/automate-this/references/environment-detection.md +170 -0
  228. package/.github/skills/automate-this/references/security-credentials.md +280 -0
  229. package/.github/skills/automate-this/references/video-extraction.md +160 -0
  230. package/.github/skills/automate-this/templates/automation-proposal.md +99 -0
  231. package/.github/skills/automate-this/templates/environment-fingerprint.md +63 -0
  232. package/.github/skills/automate-this/templates/process-reconstruction.md +59 -0
  233. package/.github/skills/azure-architecture-autopilot/README.md +188 -0
  234. package/.github/skills/azure-architecture-autopilot/SKILL.md +170 -0
  235. package/.github/skills/azure-architecture-autopilot/assets/06-architecture-diagram.png +0 -0
  236. package/.github/skills/azure-architecture-autopilot/assets/07-azure-portal-resources.png +0 -0
  237. package/.github/skills/azure-architecture-autopilot/assets/08-deployment-succeeded.png +0 -0
  238. package/.github/skills/azure-architecture-autopilot/references/ai-data.md +254 -0
  239. package/.github/skills/azure-architecture-autopilot/references/architecture-guidance-sources.md +117 -0
  240. package/.github/skills/azure-architecture-autopilot/references/azure-common-patterns.md +170 -0
  241. package/.github/skills/azure-architecture-autopilot/references/azure-dynamic-sources.md +93 -0
  242. package/.github/skills/azure-architecture-autopilot/references/bicep-generator.md +421 -0
  243. package/.github/skills/azure-architecture-autopilot/references/bicep-reviewer.md +144 -0
  244. package/.github/skills/azure-architecture-autopilot/references/phase0-scanner.md +475 -0
  245. package/.github/skills/azure-architecture-autopilot/references/phase1-advisor.md +922 -0
  246. package/.github/skills/azure-architecture-autopilot/references/phase4-deployer.md +318 -0
  247. package/.github/skills/azure-architecture-autopilot/references/service-gotchas.md +113 -0
  248. package/.github/skills/azure-architecture-autopilot/scripts/cli.py +153 -0
  249. package/.github/skills/azure-architecture-autopilot/scripts/generator.py +2038 -0
  250. package/.github/skills/azure-architecture-autopilot/scripts/icons.py +3200 -0
  251. package/.github/skills/azure-devops-delivery-builder/README.md +36 -0
  252. package/.github/skills/azure-devops-delivery-builder/SKILL.md +197 -0
  253. package/.github/skills/azure-devops-delivery-builder/evals/evals.json +64 -0
  254. package/.github/skills/azure-devops-delivery-builder/examples/fixtures/backlog-items-smoke.json +35 -0
  255. package/.github/skills/azure-devops-delivery-builder/examples/jumpstart-to-ado-backlog-example.md +59 -0
  256. package/.github/skills/azure-devops-delivery-builder/references/acceptance-criteria-and-quality.md +54 -0
  257. package/.github/skills/azure-devops-delivery-builder/references/ado-traceability-and-pipelines.md +37 -0
  258. package/.github/skills/azure-devops-delivery-builder/references/ai-work-item-patterns.md +43 -0
  259. package/.github/skills/azure-devops-delivery-builder/references/backlog-decomposition.md +47 -0
  260. package/.github/skills/azure-devops-delivery-builder/references/jumpstart-and-pod-alignment.md +41 -0
  261. package/.github/skills/azure-devops-delivery-builder/references/process-templates.md +61 -0
  262. package/.github/skills/azure-devops-delivery-builder/references/wiql-and-reporting.md +80 -0
  263. package/.github/skills/azure-devops-delivery-builder/scripts/generate_azure_devops_csv.py +138 -0
  264. package/.github/skills/azure-devops-delivery-builder/scripts/smoke_test_csv_tools.py +56 -0
  265. package/.github/skills/azure-devops-delivery-builder/scripts/validate_azure_boards_backlog.py +105 -0
  266. package/.github/skills/azure-devops-delivery-builder/templates/ado-import-template.csv +5 -0
  267. package/.github/skills/azure-devops-delivery-builder/templates/backlog-items-template.json +48 -0
  268. package/.github/skills/azure-devops-delivery-builder/templates/bug-template.md +27 -0
  269. package/.github/skills/azure-devops-delivery-builder/templates/epic-template.md +36 -0
  270. package/.github/skills/azure-devops-delivery-builder/templates/feature-template.md +33 -0
  271. package/.github/skills/azure-devops-delivery-builder/templates/spike-template.md +26 -0
  272. package/.github/skills/azure-devops-delivery-builder/templates/story-pbi-template.md +35 -0
  273. package/.github/skills/azure-devops-delivery-builder/templates/task-template.md +18 -0
  274. package/.github/skills/azure-devops-execution/README.md +22 -0
  275. package/.github/skills/azure-devops-execution/SKILL.md +48 -0
  276. package/.github/skills/azure-devops-execution/scripts/import_csv_to_ado.py +144 -0
  277. package/.github/skills/azure-devops-execution/scripts/run_wiql.py +59 -0
  278. package/.github/skills/azure-pricing/SKILL.md +189 -0
  279. package/.github/skills/azure-pricing/references/COPILOT-STUDIO-RATES.md +135 -0
  280. package/.github/skills/azure-pricing/references/COST-ESTIMATOR.md +142 -0
  281. package/.github/skills/azure-pricing/references/REGIONS.md +84 -0
  282. package/.github/skills/azure-pricing/references/SERVICE-NAMES.md +106 -0
  283. package/.github/skills/bias-and-anti-pattern-checker/SKILL.md +89 -0
  284. package/.github/skills/bias-and-anti-pattern-checker/evals/evals.json +17 -0
  285. package/.github/skills/bias-and-anti-pattern-checker/references/anti-pattern-catalog.md +79 -0
  286. package/.github/skills/bottom-up-estimation/SKILL.md +182 -0
  287. package/.github/skills/bottom-up-estimation/evals/evals.json +41 -0
  288. package/.github/skills/bottom-up-estimation/references/ai-pod-adjustment-guide.md +46 -0
  289. package/.github/skills/bottom-up-estimation/references/estimation-methodology.md +132 -0
  290. package/.github/skills/bottom-up-estimation/references/output-package-guide.md +45 -0
  291. package/.github/skills/bottom-up-estimation/references/pod-tier-mapping.md +30 -0
  292. package/.github/skills/bottom-up-estimation/references/pricing-conversion-guide.md +27 -0
  293. package/.github/skills/bottom-up-estimation/templates/estimate-package-template.md +117 -0
  294. package/.github/skills/bottom-up-estimation/templates/estimation-worksheet-template.csv +16 -0
  295. package/.github/skills/business-logic-extractor/SKILL.md +79 -0
  296. package/.github/skills/business-logic-extractor/evals/evals.json +33 -0
  297. package/.github/skills/business-logic-extractor/evals/files/intake-workflow-notes.md +30 -0
  298. package/.github/skills/business-logic-extractor/evals/files/process-narrative.md +3 -0
  299. package/.github/skills/business-logic-extractor/references/logic-pattern.md +46 -0
  300. package/.github/skills/change-management-readiness/SKILL.md +80 -0
  301. package/.github/skills/change-management-readiness/evals/evals.json +30 -0
  302. package/.github/skills/change-management-readiness/references/adoption-risk-rubric.md +86 -0
  303. package/.github/skills/change-management-readiness/templates/change-readiness-scorecard-template.md +58 -0
  304. package/.github/skills/cloud-design-patterns/SKILL.md +62 -0
  305. package/.github/skills/cloud-design-patterns/references/architecture-design.md +127 -0
  306. package/.github/skills/cloud-design-patterns/references/azure-service-mappings.md +13 -0
  307. package/.github/skills/cloud-design-patterns/references/best-practices.md +34 -0
  308. package/.github/skills/cloud-design-patterns/references/deployment-operational.md +91 -0
  309. package/.github/skills/cloud-design-patterns/references/event-driven.md +21 -0
  310. package/.github/skills/cloud-design-patterns/references/messaging-integration.md +127 -0
  311. package/.github/skills/cloud-design-patterns/references/performance.md +180 -0
  312. package/.github/skills/cloud-design-patterns/references/reliability-resilience.md +156 -0
  313. package/.github/skills/cloud-design-patterns/references/security.md +55 -0
  314. package/.github/skills/code-tour/SKILL.md +433 -0
  315. package/.github/skills/code-tour/references/codetour-schema.json +115 -0
  316. package/.github/skills/code-tour/references/examples.md +195 -0
  317. package/.github/skills/code-tour/scripts/generate_from_docs.py +286 -0
  318. package/.github/skills/code-tour/scripts/validate_tour.py +346 -0
  319. package/.github/skills/company-research/SKILL.md +228 -0
  320. package/.github/skills/company-research/evals/evals.json +23 -0
  321. package/.github/skills/company-research/examples/sample.md +98 -0
  322. package/.github/skills/company-research/references/jumpstart-company-research-workflow.md +65 -0
  323. package/.github/skills/company-research/templates/template.md +121 -0
  324. package/.github/skills/copilot-sdk/SKILL.md +102 -0
  325. package/.github/skills/copilot-sdk/evals/evals.json +29 -0
  326. package/.github/skills/copilot-sdk/examples/copilot-sdk-recipes.md +73 -0
  327. package/.github/skills/copilot-sdk/references/architecture-and-runtime.md +73 -0
  328. package/.github/skills/copilot-sdk/references/session-patterns.md +90 -0
  329. package/.github/skills/copilot-sdk/references/tools-and-mcp.md +79 -0
  330. package/.github/skills/copilot-sdk/references/troubleshooting.md +99 -0
  331. package/.github/skills/copilot-sdk/templates/copilot-sdk-design-template.md +51 -0
  332. package/.github/skills/copilot-sdk/templates/python-starter.py +42 -0
  333. package/.github/skills/copilot-sdk/templates/typescript-starter.ts +35 -0
  334. package/.github/skills/crafting-effective-readmes/README.md +180 -0
  335. package/.github/skills/crafting-effective-readmes/SKILL.md +78 -0
  336. package/.github/skills/crafting-effective-readmes/references/art-of-readme.md +536 -0
  337. package/.github/skills/crafting-effective-readmes/references/make-a-readme.md +119 -0
  338. package/.github/skills/crafting-effective-readmes/references/standard-readme-example-maximal.md +68 -0
  339. package/.github/skills/crafting-effective-readmes/references/standard-readme-example-minimal.md +21 -0
  340. package/.github/skills/crafting-effective-readmes/references/standard-readme-spec.md +242 -0
  341. package/.github/skills/crafting-effective-readmes/section-checklist.md +17 -0
  342. package/.github/skills/crafting-effective-readmes/style-guide.md +13 -0
  343. package/.github/skills/crafting-effective-readmes/templates/internal.md +106 -0
  344. package/.github/skills/crafting-effective-readmes/templates/oss.md +77 -0
  345. package/.github/skills/crafting-effective-readmes/templates/personal.md +51 -0
  346. package/.github/skills/crafting-effective-readmes/templates/xdg-config.md +71 -0
  347. package/.github/skills/crafting-effective-readmes/using-references.md +35 -0
  348. package/.github/skills/current-state-process-miner/SKILL.md +78 -0
  349. package/.github/skills/current-state-process-miner/evals/evals.json +42 -0
  350. package/.github/skills/current-state-process-miner/references/process-mining-workflow.md +73 -0
  351. package/.github/skills/current-state-process-miner/templates/as-is-process-map-template.md +81 -0
  352. package/.github/skills/data-readiness-assessor/SKILL.md +130 -0
  353. package/.github/skills/data-readiness-assessor/evals/evals.json +37 -0
  354. package/.github/skills/data-readiness-assessor/evals/files/data-readiness-fieldservice-copilot.md +40 -0
  355. package/.github/skills/data-readiness-assessor/evals/files/data-readiness-public-sector-permit-triage.md +40 -0
  356. package/.github/skills/data-readiness-assessor/examples/example-claims-rag-readiness.md +74 -0
  357. package/.github/skills/data-readiness-assessor/references/scoring-rubric.md +87 -0
  358. package/.github/skills/data-readiness-assessor/references/sensitivity-classification.md +44 -0
  359. package/.github/skills/data-readiness-assessor/templates/data-source-inventory.md +44 -0
  360. package/.github/skills/database-schema-designer/README.md +212 -0
  361. package/.github/skills/database-schema-designer/SKILL.md +687 -0
  362. package/.github/skills/database-schema-designer/assets/templates/migration-template.sql +60 -0
  363. package/.github/skills/database-schema-designer/references/schema-design-checklist.md +118 -0
  364. package/.github/skills/dependency-bottleneck-detector/README.md +77 -0
  365. package/.github/skills/dependency-bottleneck-detector/SKILL.md +307 -0
  366. package/.github/skills/dependency-bottleneck-detector/evals/evals.json +60 -0
  367. package/.github/skills/dependency-bottleneck-detector/references/dependency-taxonomy.md +351 -0
  368. package/.github/skills/dependency-bottleneck-detector/references/escalation-patterns.md +220 -0
  369. package/.github/skills/dependency-bottleneck-detector/references/proactive-detection.md +155 -0
  370. package/.github/skills/dependency-bottleneck-detector/references/unblock-strategies.md +274 -0
  371. package/.github/skills/dependency-bottleneck-detector/scripts/dependency_scan.py +175 -0
  372. package/.github/skills/dependency-bottleneck-detector/scripts/dependency_tracker.py +291 -0
  373. package/.github/skills/dependency-bottleneck-detector/scripts/escalation_timer.py +116 -0
  374. package/.github/skills/dependency-bottleneck-detector/templates/client-dependency-summary.md +71 -0
  375. package/.github/skills/dependency-bottleneck-detector/templates/dependency-bottleneck-report.md +143 -0
  376. package/.github/skills/dependency-bottleneck-detector/templates/dependency-inventory.md +88 -0
  377. package/.github/skills/dependency-bottleneck-detector/templates/escalation-email.md +155 -0
  378. package/.github/skills/dependency-bottleneck-detector/templates/unblock-action-plan.md +106 -0
  379. package/.github/skills/design-md-auditor/README.md +19 -0
  380. package/.github/skills/design-md-auditor/SKILL.md +68 -0
  381. package/.github/skills/design-md-auditor/evals/evals.json +23 -0
  382. package/.github/skills/design-md-auditor/references/ai-workflow-checks.md +23 -0
  383. package/.github/skills/design-md-auditor/references/audit-rubric.md +40 -0
  384. package/.github/skills/design-md-auditor/references/severity-model.md +33 -0
  385. package/.github/skills/design-md-auditor/templates/compliance-report-template.md +23 -0
  386. package/.github/skills/design-md-creator/README.md +49 -0
  387. package/.github/skills/design-md-creator/SKILL.md +146 -0
  388. package/.github/skills/design-md-creator/evals/evals.json +23 -0
  389. package/.github/skills/design-md-creator/evals/rubric.md +27 -0
  390. package/.github/skills/design-md-creator/examples/prompts.md +23 -0
  391. package/.github/skills/design-md-creator/references/accessibility-rules.md +35 -0
  392. package/.github/skills/design-md-creator/references/ai-ui-patterns.md +36 -0
  393. package/.github/skills/design-md-creator/references/anti-patterns.md +34 -0
  394. package/.github/skills/design-md-creator/references/component-standards.md +39 -0
  395. package/.github/skills/design-md-creator/references/design-md-structure.md +69 -0
  396. package/.github/skills/design-md-creator/references/design-review-checklist.md +32 -0
  397. package/.github/skills/design-md-creator/references/framework-implementation-notes.md +42 -0
  398. package/.github/skills/design-md-creator/references/responsive-design.md +32 -0
  399. package/.github/skills/design-md-creator/references/stitch-design-md-notes.md +36 -0
  400. package/.github/skills/design-md-creator/references/visual-language-guide.md +40 -0
  401. package/.github/skills/design-md-creator/scripts/generate_design_review.py +68 -0
  402. package/.github/skills/design-md-creator/scripts/inspect_design_md.py +63 -0
  403. package/.github/skills/design-md-creator/templates/DESIGN.enterprise-ai.md +92 -0
  404. package/.github/skills/design-md-creator/templates/DESIGN.power-platform.md +17 -0
  405. package/.github/skills/design-md-creator/templates/DESIGN.rag-chat.md +42 -0
  406. package/.github/skills/design-md-creator/templates/DESIGN.react.md +18 -0
  407. package/.github/skills/design-md-creator/templates/DESIGN.review-queue.md +41 -0
  408. package/.github/skills/design-md-creator/templates/DESIGN.vue.md +19 -0
  409. package/.github/skills/design-token-sync/README.md +20 -0
  410. package/.github/skills/design-token-sync/SKILL.md +54 -0
  411. package/.github/skills/design-token-sync/evals/evals.json +23 -0
  412. package/.github/skills/design-token-sync/references/framework-mappings.md +30 -0
  413. package/.github/skills/design-token-sync/references/token-taxonomy.md +42 -0
  414. package/.github/skills/design-token-sync/scripts/extract_design_tokens.py +52 -0
  415. package/.github/skills/design-token-sync/templates/tokens.css.md +16 -0
  416. package/.github/skills/design-token-sync/templates/tokens.design-system.json +48 -0
  417. package/.github/skills/devops-rollout-plan/SKILL.md +206 -0
  418. package/.github/skills/devops-rollout-plan/evals/evals.json +119 -0
  419. package/.github/skills/devops-rollout-plan/examples/azure-openai-agent-rollout.md +237 -0
  420. package/.github/skills/devops-rollout-plan/references/ai-agent-deployment.md +250 -0
  421. package/.github/skills/devops-rollout-plan/references/azure-safe-deployment.md +206 -0
  422. package/.github/skills/devops-rollout-plan/references/pod-delivery-context.md +206 -0
  423. package/.github/skills/devops-rollout-plan/templates/ai-agent-rollout-plan.md +326 -0
  424. package/.github/skills/devops-rollout-plan/templates/lightweight-rollout-plan.md +67 -0
  425. package/.github/skills/devops-rollout-plan/templates/standard-rollout-plan.md +340 -0
  426. package/.github/skills/discovery-depth-scorecard/SKILL.md +88 -0
  427. package/.github/skills/discovery-depth-scorecard/references/scoring-model.md +45 -0
  428. package/.github/skills/docx/LICENSE.txt +30 -0
  429. package/.github/skills/docx/SKILL.md +590 -0
  430. package/.github/skills/docx/scripts/__init__.py +1 -0
  431. package/.github/skills/docx/scripts/accept_changes.py +135 -0
  432. package/.github/skills/docx/scripts/comment.py +318 -0
  433. package/.github/skills/docx/scripts/office/helpers/__init__.py +0 -0
  434. package/.github/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  435. package/.github/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  436. package/.github/skills/docx/scripts/office/pack.py +159 -0
  437. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  438. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  439. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  440. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  441. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  442. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  443. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  444. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  445. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  446. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  447. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  448. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  449. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  450. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  451. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  452. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  453. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  454. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  455. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  456. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  457. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  458. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  459. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  460. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  461. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  462. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  463. package/.github/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  464. package/.github/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  465. package/.github/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  466. package/.github/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  467. package/.github/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  468. package/.github/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  469. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  470. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  471. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  472. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  473. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  474. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  475. package/.github/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  476. package/.github/skills/docx/scripts/office/soffice.py +183 -0
  477. package/.github/skills/docx/scripts/office/unpack.py +132 -0
  478. package/.github/skills/docx/scripts/office/validate.py +111 -0
  479. package/.github/skills/docx/scripts/office/validators/__init__.py +15 -0
  480. package/.github/skills/docx/scripts/office/validators/base.py +847 -0
  481. package/.github/skills/docx/scripts/office/validators/docx.py +446 -0
  482. package/.github/skills/docx/scripts/office/validators/pptx.py +275 -0
  483. package/.github/skills/docx/scripts/office/validators/redlining.py +247 -0
  484. package/.github/skills/docx/scripts/templates/comments.xml +3 -0
  485. package/.github/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  486. package/.github/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  487. package/.github/skills/docx/scripts/templates/commentsIds.xml +3 -0
  488. package/.github/skills/docx/scripts/templates/people.xml +3 -0
  489. package/.github/skills/dora-evaluation-report/README.md +49 -0
  490. package/.github/skills/dora-evaluation-report/SKILL.md +235 -0
  491. package/.github/skills/dora-evaluation-report/evals/evals.json +33 -0
  492. package/.github/skills/dora-evaluation-report/evals/files/sample-input.md +35 -0
  493. package/.github/skills/dora-evaluation-report/examples/product-team-dora-evaluation-example.md +36 -0
  494. package/.github/skills/dora-evaluation-report/references/dora-ai-capabilities-model.md +84 -0
  495. package/.github/skills/dora-evaluation-report/references/dora-assessment-method.md +99 -0
  496. package/.github/skills/dora-evaluation-report/references/dora-metrics-and-evidence.md +94 -0
  497. package/.github/skills/dora-evaluation-report/references/platform-and-team-health-guide.md +67 -0
  498. package/.github/skills/dora-evaluation-report/references/scoring-and-prioritization-model.md +71 -0
  499. package/.github/skills/dora-evaluation-report/templates/dora-30-60-90-roadmap-template.md +55 -0
  500. package/.github/skills/dora-evaluation-report/templates/dora-capability-scorecard-template.md +38 -0
  501. package/.github/skills/dora-evaluation-report/templates/dora-evaluation-report-template.md +150 -0
  502. package/.github/skills/dora-evaluation-report/templates/dora-evidence-register-template.csv +4 -0
  503. package/.github/skills/dora-evaluation-report/templates/dora-intake-questionnaire.md +49 -0
  504. package/.github/skills/dotnet-developer/SKILL.md +347 -0
  505. package/.github/skills/dotnet-developer/references/ai-integration-patterns.md +375 -0
  506. package/.github/skills/dotnet-developer/references/aspnet-core-api-patterns.md +380 -0
  507. package/.github/skills/dotnet-developer/references/authentication-authorization.md +296 -0
  508. package/.github/skills/dotnet-developer/references/azure-native-patterns.md +353 -0
  509. package/.github/skills/dotnet-developer/references/background-workers.md +342 -0
  510. package/.github/skills/dotnet-developer/references/ef-core-patterns.md +350 -0
  511. package/.github/skills/dotnet-developer/references/legacy-modernization.md +202 -0
  512. package/.github/skills/dotnet-developer/references/modern-dotnet-standards.md +235 -0
  513. package/.github/skills/dotnet-developer/references/observability.md +283 -0
  514. package/.github/skills/dotnet-developer/references/production-readiness.md +143 -0
  515. package/.github/skills/dotnet-developer/references/rag-document-workflows.md +372 -0
  516. package/.github/skills/dotnet-developer/references/security-checklist.md +262 -0
  517. package/.github/skills/dotnet-developer/references/testing-guide.md +354 -0
  518. package/.github/skills/dotnet-developer/scripts/inspect_dotnet_solution.py +353 -0
  519. package/.github/skills/dotnet-developer/templates/Dockerfile +55 -0
  520. package/.github/skills/dotnet-developer/templates/Program.controller-api.cs +141 -0
  521. package/.github/skills/dotnet-developer/templates/Program.minimal-api.cs +154 -0
  522. package/.github/skills/dotnet-developer/templates/ai-client-abstraction.cs +161 -0
  523. package/.github/skills/dotnet-developer/templates/appsettings.template.json +58 -0
  524. package/.github/skills/dotnet-developer/templates/azure-pipelines-dotnet.yml +164 -0
  525. package/.github/skills/dotnet-developer/templates/background-service.cs +151 -0
  526. package/.github/skills/dotnet-developer/templates/docker-compose.dotnet.yml +85 -0
  527. package/.github/skills/dotnet-developer/templates/entity-framework-dbcontext.cs +133 -0
  528. package/.github/skills/dotnet-developer/templates/fluentvalidation-validator.cs +107 -0
  529. package/.github/skills/dotnet-developer/templates/github-actions-dotnet.yml +140 -0
  530. package/.github/skills/dotnet-developer/templates/minimal-api-endpoints.cs +136 -0
  531. package/.github/skills/dotnet-developer/templates/options-pattern.cs +101 -0
  532. package/.github/skills/dotnet-developer/templates/service.cs +155 -0
  533. package/.github/skills/dotnet-developer/templates/xunit-api-test.cs +221 -0
  534. package/.github/skills/grill-me/SKILL.md +212 -0
  535. package/.github/skills/grill-me/evals/manual-eval-checklist.md +50 -0
  536. package/.github/skills/grill-me/examples/document-review-example.md +45 -0
  537. package/.github/skills/grill-me/references/decision-tree.md +165 -0
  538. package/.github/skills/grill-me/references/quality-bar.md +27 -0
  539. package/.github/skills/grill-me/references/question-pattern.md +39 -0
  540. package/.github/skills/grill-me/templates/grill-summary-template.md +39 -0
  541. package/.github/skills/grill-summary-to-proposal/SKILL.md +93 -0
  542. package/.github/skills/grill-summary-to-proposal/evals/manual-eval-checklist.md +39 -0
  543. package/.github/skills/grill-summary-to-proposal/examples/from-grill-summary-example.md +28 -0
  544. package/.github/skills/grill-summary-to-proposal/references/normalization-pattern.md +40 -0
  545. package/.github/skills/grill-summary-to-proposal/references/redline-patterns.md +53 -0
  546. package/.github/skills/grill-summary-to-proposal/templates/proposal-hardening-template.md +39 -0
  547. package/.github/skills/gtm-ai-gtm/SKILL.md +324 -0
  548. package/.github/skills/gtm-ai-gtm/evals/evals.json +42 -0
  549. package/.github/skills/gtm-ai-gtm/examples/enterprise-ai-teammate-positioning.md +31 -0
  550. package/.github/skills/gtm-ai-gtm/examples/jumpstart-to-pod-recommendation.md +33 -0
  551. package/.github/skills/gtm-ai-gtm/references/enterprise-ai-objections.md +80 -0
  552. package/.github/skills/gtm-ai-gtm/references/jumpstart-and-pod-alignment.md +72 -0
  553. package/.github/skills/gtm-ai-gtm/references/pricing-and-packaging.md +41 -0
  554. package/.github/skills/gtm-ai-gtm/templates/client-gtm-brief.md +40 -0
  555. package/.github/skills/gtm-ai-gtm/templates/jumpstart-to-pod-recommendation-matrix.md +36 -0
  556. package/.github/skills/gtm-enterprise-account-planning/SKILL.md +169 -0
  557. package/.github/skills/gtm-enterprise-account-planning/evals/evals.json +39 -0
  558. package/.github/skills/gtm-enterprise-account-planning/examples/example-account-plan.md +92 -0
  559. package/.github/skills/gtm-enterprise-account-planning/references/jumpstart-account-planning-guide.md +156 -0
  560. package/.github/skills/gtm-enterprise-account-planning/templates/account-plan-template.md +97 -0
  561. package/.github/skills/gtm-enterprise-account-planning/templates/mutual-action-plan-template.md +36 -0
  562. package/.github/skills/gtm-positioning-strategy/SKILL.md +164 -0
  563. package/.github/skills/gtm-positioning-strategy/evals/evals.json +38 -0
  564. package/.github/skills/gtm-positioning-strategy/examples/gtm-positioning-examples.md +60 -0
  565. package/.github/skills/gtm-positioning-strategy/references/jumpstart-pod-positioning.md +69 -0
  566. package/.github/skills/gtm-positioning-strategy/references/positioning-tests.md +65 -0
  567. package/.github/skills/gtm-positioning-strategy/references/word-choice-and-framing.md +65 -0
  568. package/.github/skills/gtm-positioning-strategy/references/workflow.md +92 -0
  569. package/.github/skills/gtm-positioning-strategy/templates/message-house-template.md +36 -0
  570. package/.github/skills/gtm-positioning-strategy/templates/positioning-recommendation-template.md +28 -0
  571. package/.github/skills/impediment-prioritization/SKILL.md +173 -0
  572. package/.github/skills/impediment-prioritization/evals/evals.json +23 -0
  573. package/.github/skills/impediment-prioritization/examples/impediment-prioritization-examples.md +53 -0
  574. package/.github/skills/impediment-prioritization/references/jumpstart-pod-mapping.md +74 -0
  575. package/.github/skills/impediment-prioritization/references/scoring-rubric.md +79 -0
  576. package/.github/skills/impediment-prioritization/references/workflow.md +95 -0
  577. package/.github/skills/impediment-prioritization/templates/jumpstart-pod-remediation-template.md +31 -0
  578. package/.github/skills/impediment-prioritization/templates/prioritized-impediments-template.md +18 -0
  579. package/.github/skills/integration-surface-mapper/SKILL.md +73 -0
  580. package/.github/skills/integration-surface-mapper/evals/evals.json +30 -0
  581. package/.github/skills/integration-surface-mapper/references/integration-pattern-catalog.md +74 -0
  582. package/.github/skills/integration-surface-mapper/templates/integration-surface-template.md +66 -0
  583. package/.github/skills/jira-delivery-builder/README.md +28 -0
  584. package/.github/skills/jira-delivery-builder/SKILL.md +184 -0
  585. package/.github/skills/jira-delivery-builder/evals/README.md +27 -0
  586. package/.github/skills/jira-delivery-builder/evals/eval-cases.md +65 -0
  587. package/.github/skills/jira-delivery-builder/references/acceptance-criteria-guide.md +32 -0
  588. package/.github/skills/jira-delivery-builder/references/ai-ticket-patterns.md +30 -0
  589. package/.github/skills/jira-delivery-builder/references/backlog-decomposition.md +30 -0
  590. package/.github/skills/jira-delivery-builder/references/csv-import-guide.md +36 -0
  591. package/.github/skills/jira-delivery-builder/references/definition-of-done.md +20 -0
  592. package/.github/skills/jira-delivery-builder/references/definition-of-ready.md +12 -0
  593. package/.github/skills/jira-delivery-builder/references/dependency-mapping.md +27 -0
  594. package/.github/skills/jira-delivery-builder/references/jira-issue-types.md +29 -0
  595. package/.github/skills/jira-delivery-builder/references/jira-reporting.md +28 -0
  596. package/.github/skills/jira-delivery-builder/references/jql-cheatsheet.md +25 -0
  597. package/.github/skills/jira-delivery-builder/references/source-traceability.md +27 -0
  598. package/.github/skills/jira-delivery-builder/references/story-writing-standards.md +30 -0
  599. package/.github/skills/jira-delivery-builder/scripts/convert_markdown_to_jira_csv.py +94 -0
  600. package/.github/skills/jira-delivery-builder/scripts/create_dependency_register.py +51 -0
  601. package/.github/skills/jira-delivery-builder/scripts/fixtures/README.md +39 -0
  602. package/.github/skills/jira-delivery-builder/scripts/fixtures/backlog.csv +5 -0
  603. package/.github/skills/jira-delivery-builder/scripts/fixtures/issues.json +26 -0
  604. package/.github/skills/jira-delivery-builder/scripts/fixtures/issues.md +23 -0
  605. package/.github/skills/jira-delivery-builder/scripts/generate_jira_csv.py +75 -0
  606. package/.github/skills/jira-delivery-builder/scripts/generate_jql_filters.py +43 -0
  607. package/.github/skills/jira-delivery-builder/scripts/split_large_stories.py +66 -0
  608. package/.github/skills/jira-delivery-builder/scripts/validate_jira_backlog.py +66 -0
  609. package/.github/skills/jira-delivery-builder/templates/ai-agent-story-template.md +32 -0
  610. package/.github/skills/jira-delivery-builder/templates/ai-rag-story-template.md +32 -0
  611. package/.github/skills/jira-delivery-builder/templates/backlog-quality-report.md +35 -0
  612. package/.github/skills/jira-delivery-builder/templates/bug-template.md +33 -0
  613. package/.github/skills/jira-delivery-builder/templates/dependency-register.md +5 -0
  614. package/.github/skills/jira-delivery-builder/templates/epic-template.md +31 -0
  615. package/.github/skills/jira-delivery-builder/templates/jira-csv-import-template.csv +5 -0
  616. package/.github/skills/jira-delivery-builder/templates/mvp-backlog-template.md +39 -0
  617. package/.github/skills/jira-delivery-builder/templates/review-queue-story-template.md +22 -0
  618. package/.github/skills/jira-delivery-builder/templates/spike-template.md +29 -0
  619. package/.github/skills/jira-delivery-builder/templates/sprint-readiness-report.md +26 -0
  620. package/.github/skills/jira-delivery-builder/templates/technical-task-template.md +34 -0
  621. package/.github/skills/jira-delivery-builder/templates/user-story-template.md +33 -0
  622. package/.github/skills/jira-delivery-operations/README.md +10 -0
  623. package/.github/skills/jira-delivery-operations/SKILL.md +70 -0
  624. package/.github/skills/jira-delivery-operations/evals/README.md +3 -0
  625. package/.github/skills/jira-delivery-operations/evals/eval-cases.md +13 -0
  626. package/.github/skills/jira-delivery-operations/references/operating-playbook.md +21 -0
  627. package/.github/skills/jira-delivery-operations/references/routing-matrix.md +9 -0
  628. package/.github/skills/jira-delivery-operations/templates/phase-checklist.md +25 -0
  629. package/.github/skills/jira-delivery-operations/templates/weekly-operations-cadence.md +7 -0
  630. package/.github/skills/jira-innovation-unit-normalizer/README.md +10 -0
  631. package/.github/skills/jira-innovation-unit-normalizer/SKILL.md +64 -0
  632. package/.github/skills/jira-innovation-unit-normalizer/evals/README.md +3 -0
  633. package/.github/skills/jira-innovation-unit-normalizer/evals/eval-cases.md +16 -0
  634. package/.github/skills/jira-innovation-unit-normalizer/references/complexity-mapping.md +21 -0
  635. package/.github/skills/jira-innovation-unit-normalizer/references/normalization-rules.md +13 -0
  636. package/.github/skills/jira-innovation-unit-normalizer/scripts/fixtures/README.md +7 -0
  637. package/.github/skills/jira-innovation-unit-normalizer/scripts/fixtures/sample-jira-backlog.csv +5 -0
  638. package/.github/skills/jira-innovation-unit-normalizer/scripts/normalize_jira_to_iu.py +48 -0
  639. package/.github/skills/jira-innovation-unit-normalizer/templates/jira-iu-backlog.csv +2 -0
  640. package/.github/skills/jira-innovation-unit-normalizer/templates/jira-iu-estimate.md +17 -0
  641. package/.github/skills/jira-pod-status-reporter/README.md +18 -0
  642. package/.github/skills/jira-pod-status-reporter/SKILL.md +82 -0
  643. package/.github/skills/jira-pod-status-reporter/evals/README.md +3 -0
  644. package/.github/skills/jira-pod-status-reporter/evals/eval-cases.md +21 -0
  645. package/.github/skills/jira-pod-status-reporter/references/pod-metrics.md +17 -0
  646. package/.github/skills/jira-pod-status-reporter/references/report-structure.md +24 -0
  647. package/.github/skills/jira-pod-status-reporter/references/risk-and-dependency-signals.md +13 -0
  648. package/.github/skills/jira-pod-status-reporter/scripts/fixtures/README.md +7 -0
  649. package/.github/skills/jira-pod-status-reporter/scripts/fixtures/sample-jira-status.csv +5 -0
  650. package/.github/skills/jira-pod-status-reporter/scripts/summarize_jira_backlog.py +39 -0
  651. package/.github/skills/jira-pod-status-reporter/templates/sprint-readiness-summary.md +24 -0
  652. package/.github/skills/jira-pod-status-reporter/templates/weekly-status-report.md +29 -0
  653. package/.github/skills/langfuse/SKILL.md +128 -0
  654. package/.github/skills/langfuse/references/cli.md +51 -0
  655. package/.github/skills/langfuse/references/instrumentation.md +140 -0
  656. package/.github/skills/langfuse/references/prompt-migration.md +234 -0
  657. package/.github/skills/langfuse/references/sdk-upgrade.md +181 -0
  658. package/.github/skills/langfuse/references/skill-feedback.md +52 -0
  659. package/.github/skills/langfuse/references/user-feedback.md +88 -0
  660. package/.github/skills/mcp-server-designer/SKILL.md +91 -0
  661. package/.github/skills/mcp-server-designer/evals/evals.json +29 -0
  662. package/.github/skills/mcp-server-designer/examples/example-finance-domain-mcp.md +63 -0
  663. package/.github/skills/mcp-server-designer/references/mcp-design-guide.md +95 -0
  664. package/.github/skills/mcp-server-designer/templates/mcp-server-design-template.md +115 -0
  665. package/.github/skills/memory-architecture-designer/SKILL.md +88 -0
  666. package/.github/skills/memory-architecture-designer/evals/evals.json +32 -0
  667. package/.github/skills/memory-architecture-designer/examples/example-multi-tenant-copilot-memory.md +46 -0
  668. package/.github/skills/memory-architecture-designer/references/memory-pattern-library.md +60 -0
  669. package/.github/skills/memory-architecture-designer/templates/memory-architecture-spec.md +55 -0
  670. package/.github/skills/migration-strategy-legacy-to-ai/SKILL.md +78 -0
  671. package/.github/skills/migration-strategy-legacy-to-ai/evals/evals.json +31 -0
  672. package/.github/skills/migration-strategy-legacy-to-ai/examples/example-ticket-routing-migration.md +51 -0
  673. package/.github/skills/migration-strategy-legacy-to-ai/references/migration-patterns-catalog.md +77 -0
  674. package/.github/skills/migration-strategy-legacy-to-ai/references/migration-patterns.md +54 -0
  675. package/.github/skills/migration-strategy-legacy-to-ai/templates/migration-plan.md +48 -0
  676. package/.github/skills/migration-strategy-legacy-to-ai/templates/migration-strategy-template.md +94 -0
  677. package/.github/skills/non-functional-requirements-elicitor/SKILL.md +79 -0
  678. package/.github/skills/non-functional-requirements-elicitor/evals/evals.json +31 -0
  679. package/.github/skills/non-functional-requirements-elicitor/references/nfr-catalog.md +97 -0
  680. package/.github/skills/non-functional-requirements-elicitor/templates/nfr-register-template.md +51 -0
  681. package/.github/skills/observability-design-for-ai/SKILL.md +93 -0
  682. package/.github/skills/observability-design-for-ai/evals/evals.json +32 -0
  683. package/.github/skills/observability-design-for-ai/examples/example-grounded-assistant-observability.md +53 -0
  684. package/.github/skills/observability-design-for-ai/references/telemetry-catalog.md +62 -0
  685. package/.github/skills/observability-design-for-ai/templates/observability-spec.md +50 -0
  686. package/.github/skills/observability-design-for-ai/templates/trace-schema.md +40 -0
  687. package/.github/skills/persona-empathy-map/SKILL.md +93 -0
  688. package/.github/skills/persona-empathy-map/evals/evals.json +17 -0
  689. package/.github/skills/persona-empathy-map/references/empathy-map-pattern.md +48 -0
  690. package/.github/skills/persona-journey-map-companion/README.md +11 -0
  691. package/.github/skills/persona-journey-map-companion/SKILL.md +55 -0
  692. package/.github/skills/persona-journey-map-companion/evals/evals.json +17 -0
  693. package/.github/skills/persona-journey-map-companion/examples/operations-journey-example.md +29 -0
  694. package/.github/skills/persona-journey-map-companion/templates/journey-map-template.md +29 -0
  695. package/.github/skills/php-developer/README.md +46 -0
  696. package/.github/skills/php-developer/SKILL.md +192 -0
  697. package/.github/skills/php-developer/evals/eval-rubric.md +27 -0
  698. package/.github/skills/php-developer/evals/evals.json +82 -0
  699. package/.github/skills/php-developer/references/ai-integration-patterns.md +38 -0
  700. package/.github/skills/php-developer/references/api-development.md +38 -0
  701. package/.github/skills/php-developer/references/ci-cd.md +29 -0
  702. package/.github/skills/php-developer/references/composer-dependency-management.md +49 -0
  703. package/.github/skills/php-developer/references/docker-local-dev.md +36 -0
  704. package/.github/skills/php-developer/references/laravel-patterns.md +46 -0
  705. package/.github/skills/php-developer/references/legacy-modernization.md +47 -0
  706. package/.github/skills/php-developer/references/php-modern-standards.md +43 -0
  707. package/.github/skills/php-developer/references/production-readiness.md +37 -0
  708. package/.github/skills/php-developer/references/security-checklist.md +48 -0
  709. package/.github/skills/php-developer/references/static-analysis.md +41 -0
  710. package/.github/skills/php-developer/references/symfony-patterns.md +42 -0
  711. package/.github/skills/php-developer/references/testing-guide.md +41 -0
  712. package/.github/skills/php-developer/scripts/__pycache__/composer_audit_summary.cpython-313.pyc +0 -0
  713. package/.github/skills/php-developer/scripts/__pycache__/detect_php_framework.cpython-313.pyc +0 -0
  714. package/.github/skills/php-developer/scripts/__pycache__/generate_refactor_backlog.cpython-313.pyc +0 -0
  715. package/.github/skills/php-developer/scripts/__pycache__/inspect_php_project.cpython-313.pyc +0 -0
  716. package/.github/skills/php-developer/scripts/__pycache__/legacy_risk_scan.cpython-313.pyc +0 -0
  717. package/.github/skills/php-developer/scripts/composer_audit_summary.py +50 -0
  718. package/.github/skills/php-developer/scripts/detect_php_framework.py +35 -0
  719. package/.github/skills/php-developer/scripts/generate_refactor_backlog.py +75 -0
  720. package/.github/skills/php-developer/scripts/inspect_php_project.py +102 -0
  721. package/.github/skills/php-developer/scripts/legacy_risk_scan.py +56 -0
  722. package/.github/skills/php-developer/templates/Dockerfile.php-fpm +22 -0
  723. package/.github/skills/php-developer/templates/composer.legacy-modernization.json +26 -0
  724. package/.github/skills/php-developer/templates/composer.modern.json +27 -0
  725. package/.github/skills/php-developer/templates/docker-compose.laravel.yml +40 -0
  726. package/.github/skills/php-developer/templates/docker-compose.symfony.yml +34 -0
  727. package/.github/skills/php-developer/templates/github-actions-php.yml +26 -0
  728. package/.github/skills/php-developer/templates/laravel-controller.php +30 -0
  729. package/.github/skills/php-developer/templates/laravel-form-request.php +26 -0
  730. package/.github/skills/php-developer/templates/laravel-service.php +26 -0
  731. package/.github/skills/php-developer/templates/legacy-characterization-test.php +18 -0
  732. package/.github/skills/php-developer/templates/pdo-repository.php +29 -0
  733. package/.github/skills/php-developer/templates/pest.php +6 -0
  734. package/.github/skills/php-developer/templates/phpstan.neon +11 -0
  735. package/.github/skills/php-developer/templates/phpunit.xml +17 -0
  736. package/.github/skills/php-developer/templates/symfony-controller.php +27 -0
  737. package/.github/skills/php-developer/templates/symfony-service.php +35 -0
  738. package/.github/skills/pilot-to-production-gate/SKILL.md +87 -0
  739. package/.github/skills/pilot-to-production-gate/evals/evals.json +30 -0
  740. package/.github/skills/pilot-to-production-gate/references/gate-criteria-rubric.md +116 -0
  741. package/.github/skills/pilot-to-production-gate/templates/pilot-to-production-gate-template.md +63 -0
  742. package/.github/skills/postgresql-pgvector/README.md +135 -0
  743. package/.github/skills/postgresql-pgvector/SKILL.md +298 -0
  744. package/.github/skills/postgresql-pgvector/evals/evals.json +106 -0
  745. package/.github/skills/postgresql-pgvector/references/fastapi-sqlmodel-patterns.md +255 -0
  746. package/.github/skills/postgresql-pgvector/references/hybrid-search.md +195 -0
  747. package/.github/skills/postgresql-pgvector/references/indexing-guide.md +204 -0
  748. package/.github/skills/postgresql-pgvector/references/multi-tenant-security.md +213 -0
  749. package/.github/skills/postgresql-pgvector/references/performance-tuning.md +249 -0
  750. package/.github/skills/postgresql-pgvector/references/production-checklist.md +125 -0
  751. package/.github/skills/postgresql-pgvector/references/rag-evaluation.md +180 -0
  752. package/.github/skills/postgresql-pgvector/references/retrieval-patterns.md +235 -0
  753. package/.github/skills/postgresql-pgvector/references/schema-patterns.md +217 -0
  754. package/.github/skills/postgresql-pgvector/scripts/benchmark_retrieval.py +149 -0
  755. package/.github/skills/postgresql-pgvector/scripts/check_embedding_dimensions.py +140 -0
  756. package/.github/skills/postgresql-pgvector/scripts/explain_query_plan.py +138 -0
  757. package/.github/skills/postgresql-pgvector/scripts/seed_sample_chunks.py +162 -0
  758. package/.github/skills/postgresql-pgvector/scripts/validate_pgvector.py +69 -0
  759. package/.github/skills/postgresql-pgvector/templates/alembic_pgvector_migration.py +170 -0
  760. package/.github/skills/postgresql-pgvector/templates/docker-compose.pgvector.yml +20 -0
  761. package/.github/skills/postgresql-pgvector/templates/eval_schema.sql +105 -0
  762. package/.github/skills/postgresql-pgvector/templates/fastapi_routes.py +223 -0
  763. package/.github/skills/postgresql-pgvector/templates/indexes.hnsw.sql +66 -0
  764. package/.github/skills/postgresql-pgvector/templates/indexes.hybrid-search.sql +71 -0
  765. package/.github/skills/postgresql-pgvector/templates/retrieval_service.py +258 -0
  766. package/.github/skills/postgresql-pgvector/templates/schema.basic-rag.sql +145 -0
  767. package/.github/skills/postgresql-pgvector/templates/schema.multi-tenant-rag.sql +186 -0
  768. package/.github/skills/postgresql-pgvector/templates/schema.rfp-retrieval.sql +139 -0
  769. package/.github/skills/postgresql-pgvector/templates/sqlmodel_models.py +207 -0
  770. package/.github/skills/pre-deployment-gotcha-review/README.md +84 -0
  771. package/.github/skills/pre-deployment-gotcha-review/SKILL.md +233 -0
  772. package/.github/skills/pre-deployment-gotcha-review/evals/evals.json +59 -0
  773. package/.github/skills/pre-deployment-gotcha-review/references/ai-agent-risk.md +104 -0
  774. package/.github/skills/pre-deployment-gotcha-review/references/api-gateway.md +81 -0
  775. package/.github/skills/pre-deployment-gotcha-review/references/authorization-access-control.md +77 -0
  776. package/.github/skills/pre-deployment-gotcha-review/references/data-readiness.md +103 -0
  777. package/.github/skills/pre-deployment-gotcha-review/references/delivery-commercial-risk.md +119 -0
  778. package/.github/skills/pre-deployment-gotcha-review/references/gotcha-taxonomy.md +292 -0
  779. package/.github/skills/pre-deployment-gotcha-review/references/identity-auth-mfa.md +94 -0
  780. package/.github/skills/pre-deployment-gotcha-review/references/legacy-onprem-access.md +92 -0
  781. package/.github/skills/pre-deployment-gotcha-review/references/mcp-extension-guide.md +102 -0
  782. package/.github/skills/pre-deployment-gotcha-review/references/operational-readiness.md +102 -0
  783. package/.github/skills/pre-deployment-gotcha-review/references/rag-document-identity-acl.md +117 -0
  784. package/.github/skills/pre-deployment-gotcha-review/references/review-methodology.md +159 -0
  785. package/.github/skills/pre-deployment-gotcha-review/references/security-compliance.md +108 -0
  786. package/.github/skills/pre-deployment-gotcha-review/scripts/build_citation_matrix.py +153 -0
  787. package/.github/skills/pre-deployment-gotcha-review/scripts/classify_gotchas.py +201 -0
  788. package/.github/skills/pre-deployment-gotcha-review/scripts/extract_document_claims.py +156 -0
  789. package/.github/skills/pre-deployment-gotcha-review/scripts/generate_question_backlog.py +213 -0
  790. package/.github/skills/pre-deployment-gotcha-review/scripts/validate_report_completeness.py +209 -0
  791. package/.github/skills/pre-deployment-gotcha-review/templates/assumption-register.md +38 -0
  792. package/.github/skills/pre-deployment-gotcha-review/templates/clarifying-questions.md +61 -0
  793. package/.github/skills/pre-deployment-gotcha-review/templates/gotcha-review-report.md +162 -0
  794. package/.github/skills/pre-deployment-gotcha-review/templates/mitigation-backlog.md +47 -0
  795. package/.github/skills/pre-deployment-gotcha-review/templates/readiness-rating.md +79 -0
  796. package/.github/skills/pre-deployment-gotcha-review/templates/source-citation-matrix.md +39 -0
  797. package/.github/skills/pre-deployment-gotcha-review/templates/unknown-unknowns-register.md +29 -0
  798. package/.github/skills/privacy-by-design-for-ai/SKILL.md +84 -0
  799. package/.github/skills/privacy-by-design-for-ai/evals/evals.json +32 -0
  800. package/.github/skills/privacy-by-design-for-ai/examples/example-eu-employee-assistant.md +53 -0
  801. package/.github/skills/privacy-by-design-for-ai/references/privacy-by-design-guide.md +95 -0
  802. package/.github/skills/privacy-by-design-for-ai/references/privacy-control-catalog.md +53 -0
  803. package/.github/skills/privacy-by-design-for-ai/templates/dpia-template.md +66 -0
  804. package/.github/skills/privacy-by-design-for-ai/templates/privacy-by-design-template.md +89 -0
  805. package/.github/skills/python-developer/SKILL.md +246 -0
  806. package/.github/skills/python-developer/evals/evals.json +162 -0
  807. package/.github/skills/python-developer/references/ai-integration-patterns.md +261 -0
  808. package/.github/skills/python-developer/references/background-jobs.md +199 -0
  809. package/.github/skills/python-developer/references/ci-cd.md +248 -0
  810. package/.github/skills/python-developer/references/cli-tools.md +185 -0
  811. package/.github/skills/python-developer/references/database-patterns.md +278 -0
  812. package/.github/skills/python-developer/references/docker-local-dev.md +241 -0
  813. package/.github/skills/python-developer/references/fastapi-patterns.md +311 -0
  814. package/.github/skills/python-developer/references/modern-python-standards.md +187 -0
  815. package/.github/skills/python-developer/references/observability.md +214 -0
  816. package/.github/skills/python-developer/references/production-readiness.md +103 -0
  817. package/.github/skills/python-developer/references/pydantic-settings.md +227 -0
  818. package/.github/skills/python-developer/references/rag-pipeline-patterns.md +307 -0
  819. package/.github/skills/python-developer/references/refactoring-guide.md +206 -0
  820. package/.github/skills/python-developer/references/security-checklist.md +195 -0
  821. package/.github/skills/python-developer/references/testing-guide.md +272 -0
  822. package/.github/skills/python-developer/scripts/check_security_basics.py +159 -0
  823. package/.github/skills/python-developer/scripts/inspect_python_project.py +181 -0
  824. package/.github/skills/python-developer/templates/Dockerfile +44 -0
  825. package/.github/skills/python-developer/templates/Makefile +62 -0
  826. package/.github/skills/python-developer/templates/docker-compose.fastapi.yml +70 -0
  827. package/.github/skills/python-developer/templates/github-actions-python.yml +134 -0
  828. package/.github/skills/python-developer/templates/health_routes.py +27 -0
  829. package/.github/skills/python-developer/templates/llm_client_protocol.py +114 -0
  830. package/.github/skills/python-developer/templates/main.fastapi.py +59 -0
  831. package/.github/skills/python-developer/templates/pyproject.cli.toml +40 -0
  832. package/.github/skills/python-developer/templates/pyproject.fastapi.toml +79 -0
  833. package/.github/skills/python-developer/templates/pyproject.package.toml +40 -0
  834. package/.github/skills/python-developer/templates/pytest_api_test.py +86 -0
  835. package/.github/skills/python-developer/templates/pytest_service_test.py +98 -0
  836. package/.github/skills/python-developer/templates/repository.py +43 -0
  837. package/.github/skills/python-developer/templates/service.py +48 -0
  838. package/.github/skills/python-developer/templates/settings.py +71 -0
  839. package/.github/skills/python-developer/templates/sqlmodel_model.py +40 -0
  840. package/.github/skills/python-developer/templates/typer_cli.py +93 -0
  841. package/.github/skills/quality-gates/SKILL.md +126 -0
  842. package/.github/skills/rag-architecture-designer/SKILL.md +104 -0
  843. package/.github/skills/rag-architecture-designer/evals/evals.json +32 -0
  844. package/.github/skills/rag-architecture-designer/examples/example-policy-copilot.md +75 -0
  845. package/.github/skills/rag-architecture-designer/references/pattern-catalog.md +82 -0
  846. package/.github/skills/rag-architecture-designer/templates/rag-architecture-spec.md +93 -0
  847. package/.github/skills/rag-architecture-designer/templates/rag-eval-plan.md +38 -0
  848. package/.github/skills/react-design-md-auditor/README.md +39 -0
  849. package/.github/skills/react-design-md-auditor/SKILL.md +96 -0
  850. package/.github/skills/react-design-md-auditor/evals/eval-cases.md +61 -0
  851. package/.github/skills/react-design-md-auditor/references/audit-rubric.md +46 -0
  852. package/.github/skills/react-design-md-auditor/references/react-specific-checks.md +48 -0
  853. package/.github/skills/react-design-md-auditor/references/severity-model.md +24 -0
  854. package/.github/skills/react-design-md-auditor/templates/compliance-report-template.md +59 -0
  855. package/.github/skills/react-developer/README.md +63 -0
  856. package/.github/skills/react-developer/SKILL.md +226 -0
  857. package/.github/skills/react-developer/evals/eval-rubric.md +62 -0
  858. package/.github/skills/react-developer/references/accessibility.md +20 -0
  859. package/.github/skills/react-developer/references/ai-ui-patterns.md +36 -0
  860. package/.github/skills/react-developer/references/api-integration.md +28 -0
  861. package/.github/skills/react-developer/references/ci-cd.md +24 -0
  862. package/.github/skills/react-developer/references/component-architecture.md +25 -0
  863. package/.github/skills/react-developer/references/deployment.md +17 -0
  864. package/.github/skills/react-developer/references/forms-validation.md +25 -0
  865. package/.github/skills/react-developer/references/nextjs-patterns.md +23 -0
  866. package/.github/skills/react-developer/references/performance.md +20 -0
  867. package/.github/skills/react-developer/references/project-structure.md +68 -0
  868. package/.github/skills/react-developer/references/react-modern-standards.md +33 -0
  869. package/.github/skills/react-developer/references/react-router-patterns.md +24 -0
  870. package/.github/skills/react-developer/references/review-queue-patterns.md +37 -0
  871. package/.github/skills/react-developer/references/security.md +18 -0
  872. package/.github/skills/react-developer/references/state-management.md +44 -0
  873. package/.github/skills/react-developer/references/styling-design-system.md +25 -0
  874. package/.github/skills/react-developer/references/tanstack-query.md +27 -0
  875. package/.github/skills/react-developer/references/testing.md +19 -0
  876. package/.github/skills/react-developer/scripts/__pycache__/check_accessibility_patterns.cpython-313.pyc +0 -0
  877. package/.github/skills/react-developer/scripts/__pycache__/detect_react_stack.cpython-313.pyc +0 -0
  878. package/.github/skills/react-developer/scripts/__pycache__/generate_component_map.cpython-313.pyc +0 -0
  879. package/.github/skills/react-developer/scripts/__pycache__/generate_frontend_backlog.cpython-313.pyc +0 -0
  880. package/.github/skills/react-developer/scripts/__pycache__/inspect_react_project.cpython-313.pyc +0 -0
  881. package/.github/skills/react-developer/scripts/check_accessibility_patterns.py +35 -0
  882. package/.github/skills/react-developer/scripts/detect_react_stack.py +50 -0
  883. package/.github/skills/react-developer/scripts/generate_component_map.py +33 -0
  884. package/.github/skills/react-developer/scripts/generate_frontend_backlog.py +53 -0
  885. package/.github/skills/react-developer/scripts/inspect_react_project.py +88 -0
  886. package/.github/skills/react-developer/templates/.env.example +2 -0
  887. package/.github/skills/react-developer/templates/.env.local.example +2 -0
  888. package/.github/skills/react-developer/templates/Dockerfile +12 -0
  889. package/.github/skills/react-developer/templates/agent-trace-viewer.tsx +27 -0
  890. package/.github/skills/react-developer/templates/api-client.ts +24 -0
  891. package/.github/skills/react-developer/templates/app-shell.css +9 -0
  892. package/.github/skills/react-developer/templates/app-shell.tsx +21 -0
  893. package/.github/skills/react-developer/templates/citation-panel.tsx +29 -0
  894. package/.github/skills/react-developer/templates/document-upload-page.tsx +11 -0
  895. package/.github/skills/react-developer/templates/evaluation-dashboard.tsx +27 -0
  896. package/.github/skills/react-developer/templates/github-actions-react.yml +34 -0
  897. package/.github/skills/react-developer/templates/main.tsx +13 -0
  898. package/.github/skills/react-developer/templates/nginx.conf +11 -0
  899. package/.github/skills/react-developer/templates/package.nextjs-ts.json +32 -0
  900. package/.github/skills/react-developer/templates/package.react-vite-ts.json +39 -0
  901. package/.github/skills/react-developer/templates/playwright.config.ts +15 -0
  902. package/.github/skills/react-developer/templates/rag-chat-view.tsx +34 -0
  903. package/.github/skills/react-developer/templates/react-hook-form-zod.tsx +51 -0
  904. package/.github/skills/react-developer/templates/retrieval-result-card.tsx +28 -0
  905. package/.github/skills/react-developer/templates/review-queue-page.tsx +39 -0
  906. package/.github/skills/react-developer/templates/router.tsx +20 -0
  907. package/.github/skills/react-developer/templates/tanstack-query-provider.tsx +8 -0
  908. package/.github/skills/react-developer/templates/tsconfig.json +16 -0
  909. package/.github/skills/react-developer/templates/vite.config.ts +12 -0
  910. package/.github/skills/react-developer/templates/vitest.config.ts +13 -0
  911. package/.github/skills/red-team-playbook-builder/SKILL.md +79 -0
  912. package/.github/skills/red-team-playbook-builder/evals/evals.json +32 -0
  913. package/.github/skills/red-team-playbook-builder/examples/example-sales-ops-redteam.md +34 -0
  914. package/.github/skills/red-team-playbook-builder/references/adversarial-pattern-library.md +63 -0
  915. package/.github/skills/red-team-playbook-builder/references/red-team-attack-catalog.md +98 -0
  916. package/.github/skills/red-team-playbook-builder/templates/red-team-playbook-template.md +64 -0
  917. package/.github/skills/red-team-playbook-builder/templates/red-team-playbook.md +45 -0
  918. package/.github/skills/reference-architecture-snapshotter/SKILL.md +53 -0
  919. package/.github/skills/reference-architecture-snapshotter/evals/evals.json +17 -0
  920. package/.github/skills/reference-architecture-snapshotter/examples/reference-architecture-example.md +17 -0
  921. package/.github/skills/reference-architecture-snapshotter/references/redaction-and-variant-rules.md +26 -0
  922. package/.github/skills/reference-architecture-snapshotter/scripts/snapshot_qa_check.py +30 -0
  923. package/.github/skills/reference-architecture-snapshotter/templates/reference-architecture-template.md +19 -0
  924. package/.github/skills/reference-story-matcher/SKILL.md +145 -0
  925. package/.github/skills/reference-story-matcher/evals/evals.json +41 -0
  926. package/.github/skills/reference-story-matcher/examples/example-reference-story-one-pager.md +61 -0
  927. package/.github/skills/reference-story-matcher/examples/prospect-profile-example.json +21 -0
  928. package/.github/skills/reference-story-matcher/references/case-study-catalog.json +281 -0
  929. package/.github/skills/reference-story-matcher/references/matching-workflow.md +82 -0
  930. package/.github/skills/reference-story-matcher/scripts/match_case_study.py +182 -0
  931. package/.github/skills/reference-story-matcher/templates/reference-story-one-pager-template.md +59 -0
  932. package/.github/skills/requirements/SKILL.md +96 -0
  933. package/.github/skills/roi-calculator-builder/SKILL.md +177 -0
  934. package/.github/skills/roi-calculator-builder/evals/evals.json +50 -0
  935. package/.github/skills/roi-calculator-builder/examples/example-knowledge-assistant-roi.md +142 -0
  936. package/.github/skills/roi-calculator-builder/references/ai-benefit-categories.md +101 -0
  937. package/.github/skills/roi-calculator-builder/references/ai-cost-categories.md +112 -0
  938. package/.github/skills/roi-calculator-builder/references/risk-adjusted-roi.md +76 -0
  939. package/.github/skills/roi-calculator-builder/references/roi-methodology.md +93 -0
  940. package/.github/skills/roi-calculator-builder/references/sensitivity-analysis-guide.md +72 -0
  941. package/.github/skills/roi-calculator-builder/templates/roi-model-template.md +132 -0
  942. package/.github/skills/roi-calculator-builder/templates/roi-worksheet-template.csv +31 -0
  943. package/.github/skills/scope-creep-detector/SKILL.md +75 -0
  944. package/.github/skills/scope-creep-detector/evals/evals.json +30 -0
  945. package/.github/skills/scope-creep-detector/references/scope-creep-patterns.md +85 -0
  946. package/.github/skills/scope-creep-detector/templates/scope-audit-template.md +43 -0
  947. package/.github/skills/scripts/README.md +93 -0
  948. package/.github/skills/scripts/__pycache__/assertion_core.cpython-312.pyc +0 -0
  949. package/.github/skills/scripts/assertion_core.py +55 -0
  950. package/.github/skills/skill-creator/LICENSE.txt +202 -0
  951. package/.github/skills/skill-creator/SKILL.md +506 -0
  952. package/.github/skills/skill-creator/agents/analyzer.md +274 -0
  953. package/.github/skills/skill-creator/agents/comparator.md +202 -0
  954. package/.github/skills/skill-creator/agents/grader.md +223 -0
  955. package/.github/skills/skill-creator/assets/eval_review.html +146 -0
  956. package/.github/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  957. package/.github/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  958. package/.github/skills/skill-creator/examples/copilot-sdk-wrapper/README.md +35 -0
  959. package/.github/skills/skill-creator/examples/copilot-sdk-wrapper/copilot_sdk_wrapper.mjs +93 -0
  960. package/.github/skills/skill-creator/examples/copilot-sdk-wrapper/package.json +8 -0
  961. package/.github/skills/skill-creator/references/schemas.md +430 -0
  962. package/.github/skills/skill-creator/scripts/__init__.py +0 -0
  963. package/.github/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  964. package/.github/skills/skill-creator/scripts/generate_report.py +326 -0
  965. package/.github/skills/skill-creator/scripts/improve_description.py +256 -0
  966. package/.github/skills/skill-creator/scripts/package_skill.py +136 -0
  967. package/.github/skills/skill-creator/scripts/prompt_backend.py +145 -0
  968. package/.github/skills/skill-creator/scripts/quick_validate.py +103 -0
  969. package/.github/skills/skill-creator/scripts/run_eval.py +364 -0
  970. package/.github/skills/skill-creator/scripts/run_loop.py +339 -0
  971. package/.github/skills/skill-creator/scripts/utils.py +47 -0
  972. package/.github/skills/stitch-screen-to-design-md/README.md +17 -0
  973. package/.github/skills/stitch-screen-to-design-md/SKILL.md +50 -0
  974. package/.github/skills/stitch-screen-to-design-md/evals/evals.json +23 -0
  975. package/.github/skills/stitch-screen-to-design-md/references/stitch-mcp-flow.md +38 -0
  976. package/.github/skills/stitch-screen-to-design-md/references/synthesis-guide.md +34 -0
  977. package/.github/skills/stitch-screen-to-design-md/templates/design-from-stitch-template.md +49 -0
  978. package/.github/skills/success-metrics-designer/SKILL.md +84 -0
  979. package/.github/skills/success-metrics-designer/evals/evals.json +30 -0
  980. package/.github/skills/success-metrics-designer/references/kpi-pattern-library.md +79 -0
  981. package/.github/skills/success-metrics-designer/templates/success-metrics-template.md +65 -0
  982. package/.github/skills/task-clarifier/SKILL.md +85 -0
  983. package/.github/skills/task-clarifier/evals/evals.json +33 -0
  984. package/.github/skills/task-clarifier/evals/files/conflicting-next-step-notes.md +24 -0
  985. package/.github/skills/task-clarifier/evals/files/vague-seller-ask.md +18 -0
  986. package/.github/skills/task-clarifier/references/clarification-pattern.md +67 -0
  987. package/.github/skills/tool-differentiation/SKILL.md +81 -0
  988. package/.github/skills/tool-differentiation/evals/evals.json +17 -0
  989. package/.github/skills/tool-differentiation/references/comparison-matrix.md +50 -0
  990. package/.github/skills/ui-ux-pro-max/SKILL.md +266 -0
  991. package/.github/skills/ui-ux-pro-max/data/charts.csv +26 -0
  992. package/.github/skills/ui-ux-pro-max/data/colors.csv +97 -0
  993. package/.github/skills/ui-ux-pro-max/data/icons.csv +101 -0
  994. package/.github/skills/ui-ux-pro-max/data/landing.csv +31 -0
  995. package/.github/skills/ui-ux-pro-max/data/products.csv +97 -0
  996. package/.github/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  997. package/.github/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  998. package/.github/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  999. package/.github/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  1000. package/.github/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  1001. package/.github/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  1002. package/.github/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  1003. package/.github/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  1004. package/.github/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  1005. package/.github/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  1006. package/.github/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  1007. package/.github/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  1008. package/.github/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  1009. package/.github/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  1010. package/.github/skills/ui-ux-pro-max/data/styles.csv +68 -0
  1011. package/.github/skills/ui-ux-pro-max/data/typography.csv +58 -0
  1012. package/.github/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  1013. package/.github/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  1014. package/.github/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  1015. package/.github/skills/ui-ux-pro-max/scripts/core.py +253 -0
  1016. package/.github/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  1017. package/.github/skills/ui-ux-pro-max/scripts/search.py +114 -0
  1018. package/.github/skills/use-case-canvas-builder/SKILL.md +95 -0
  1019. package/.github/skills/use-case-canvas-builder/references/canvas-pattern.md +106 -0
  1020. package/.github/skills/use-case-dependency-mapper/SKILL.md +153 -0
  1021. package/.github/skills/use-case-dependency-mapper/evals/evals.json +23 -0
  1022. package/.github/skills/use-case-dependency-mapper/references/dependency-categories.md +201 -0
  1023. package/.github/skills/use-case-prioritization/SKILL.md +79 -0
  1024. package/.github/skills/use-case-prioritization/evals/evals.json +34 -0
  1025. package/.github/skills/use-case-prioritization/evals/files/candidate-use-cases.md +43 -0
  1026. package/.github/skills/use-case-prioritization/evals/files/workshop-output-notes.md +8 -0
  1027. package/.github/skills/use-case-prioritization/references/matrix-pattern.md +52 -0
  1028. package/.github/skills/user-persona-development/README.md +44 -0
  1029. package/.github/skills/user-persona-development/SKILL.md +155 -0
  1030. package/.github/skills/user-persona-development/evals/evals.json +23 -0
  1031. package/.github/skills/user-persona-development/examples/approver-persona-example.md +26 -0
  1032. package/.github/skills/user-persona-development/examples/executive-sponsor-persona-example.md +26 -0
  1033. package/.github/skills/user-persona-development/examples/operations-persona-example.md +26 -0
  1034. package/.github/skills/user-persona-development/examples/technical-operator-persona-example.md +26 -0
  1035. package/.github/skills/user-persona-development/references/ai-solution-persona-considerations.md +46 -0
  1036. package/.github/skills/user-persona-development/references/persona-field-guide.md +90 -0
  1037. package/.github/skills/user-persona-development/references/persona-quality-checklist.md +38 -0
  1038. package/.github/skills/user-persona-development/references/policy-defaults.md +37 -0
  1039. package/.github/skills/user-persona-development/references/source-grounding-rules.md +37 -0
  1040. package/.github/skills/user-persona-development/references/stakeholder-to-persona-rules.md +49 -0
  1041. package/.github/skills/user-persona-development/scripts/validate_persona_fields.py +70 -0
  1042. package/.github/skills/user-persona-development/templates/backlog-implications-template.md +12 -0
  1043. package/.github/skills/user-persona-development/templates/change-management-implications-template.md +11 -0
  1044. package/.github/skills/user-persona-development/templates/design-implications-template.md +12 -0
  1045. package/.github/skills/user-persona-development/templates/persona-gap-analysis.md +20 -0
  1046. package/.github/skills/user-persona-development/templates/persona-summary-table.md +13 -0
  1047. package/.github/skills/user-persona-development/templates/persona-template.md +38 -0
  1048. package/.github/skills/user-persona-quality-evaluator/README.md +12 -0
  1049. package/.github/skills/user-persona-quality-evaluator/SKILL.md +58 -0
  1050. package/.github/skills/user-persona-quality-evaluator/evals/evals.json +17 -0
  1051. package/.github/skills/user-persona-quality-evaluator/references/scoring-rubric.md +42 -0
  1052. package/.github/skills/vscode-github-custom-agent-builder/README.md +24 -0
  1053. package/.github/skills/vscode-github-custom-agent-builder/SKILL.md +162 -0
  1054. package/.github/skills/vscode-github-custom-agent-builder/evals/evals.json +57 -0
  1055. package/.github/skills/vscode-github-custom-agent-builder/examples/broken-reviewer.agent.md +14 -0
  1056. package/.github/skills/vscode-github-custom-agent-builder/examples/legacy-planner.chatmode.md +11 -0
  1057. package/.github/skills/vscode-github-custom-agent-builder/references/agents.md +108 -0
  1058. package/.github/skills/vscode-github-custom-agent-builder/references/claude-agent-format.md +33 -0
  1059. package/.github/skills/vscode-github-custom-agent-builder/references/custom-agent-schema.md +43 -0
  1060. package/.github/skills/vscode-github-custom-agent-builder/references/frontmatter-standard.md +53 -0
  1061. package/.github/skills/vscode-github-custom-agent-builder/references/hooks.md +96 -0
  1062. package/.github/skills/vscode-github-custom-agent-builder/references/instructions.md +71 -0
  1063. package/.github/skills/vscode-github-custom-agent-builder/references/jumpstart-agent-patterns.md +44 -0
  1064. package/.github/skills/vscode-github-custom-agent-builder/references/prompts.md +80 -0
  1065. package/.github/skills/vscode-github-custom-agent-builder/references/schema-drift-policy.md +43 -0
  1066. package/.github/skills/vscode-github-custom-agent-builder/references/skills.md +100 -0
  1067. package/.github/skills/vscode-github-custom-agent-builder/references/validation-rules.md +40 -0
  1068. package/.github/skills/vscode-github-custom-agent-builder/references/workspace-instructions.md +66 -0
  1069. package/.github/skills/vscode-github-custom-agent-builder/scripts/_agent_frontmatter.py +117 -0
  1070. package/.github/skills/vscode-github-custom-agent-builder/scripts/check_custom_agent_schema.py +149 -0
  1071. package/.github/skills/vscode-github-custom-agent-builder/scripts/migrate_chatmode_to_agent.py +36 -0
  1072. package/.github/skills/vscode-github-custom-agent-builder/scripts/normalize_agent_frontmatter.py +39 -0
  1073. package/.github/skills/vscode-github-custom-agent-builder/scripts/validate_agents.py +125 -0
  1074. package/.github/skills/vscode-github-custom-agent-builder/templates/agent-validation-report.md +35 -0
  1075. package/.github/skills/vscode-github-custom-agent-builder/templates/claude-agent-template.md +10 -0
  1076. package/.github/skills/vscode-github-custom-agent-builder/templates/github-copilot-agent-template.agent.md +35 -0
  1077. package/.github/skills/vscode-github-custom-agent-builder/templates/implementer.agent.md +48 -0
  1078. package/.github/skills/vscode-github-custom-agent-builder/templates/jumpstart-solution-design.agent.md +48 -0
  1079. package/.github/skills/vscode-github-custom-agent-builder/templates/jumpstart-workbench.agent.md +50 -0
  1080. package/.github/skills/vscode-github-custom-agent-builder/templates/orchestrator.agent.md +46 -0
  1081. package/.github/skills/vscode-github-custom-agent-builder/templates/planner.agent.md +54 -0
  1082. package/.github/skills/vscode-github-custom-agent-builder/templates/reviewer.agent.md +53 -0
  1083. package/.github/skills/vscode-github-custom-agent-builder/templates/schema-drift-report.md +41 -0
  1084. package/.github/skills/vscode-github-custom-agent-builder/templates/vscode-agent-frontmatter.yaml +13 -0
  1085. package/.github/skills/vscode-github-custom-agent-builder/templates/vscode-agent-template.agent.md +43 -0
  1086. package/.github/skills/vuejs-developer/README.md +17 -0
  1087. package/.github/skills/vuejs-developer/SKILL.md +189 -0
  1088. package/.github/skills/vuejs-developer/evals/eval-cases.md +31 -0
  1089. package/.github/skills/vuejs-developer/evals/eval-plan.md +20 -0
  1090. package/.github/skills/vuejs-developer/evals/eval-rubric.md +44 -0
  1091. package/.github/skills/vuejs-developer/references/accessibility.md +23 -0
  1092. package/.github/skills/vuejs-developer/references/ai-ui-patterns.md +27 -0
  1093. package/.github/skills/vuejs-developer/references/api-integration.md +43 -0
  1094. package/.github/skills/vuejs-developer/references/ci-cd.md +28 -0
  1095. package/.github/skills/vuejs-developer/references/component-architecture.md +34 -0
  1096. package/.github/skills/vuejs-developer/references/deployment.md +34 -0
  1097. package/.github/skills/vuejs-developer/references/forms-validation.md +24 -0
  1098. package/.github/skills/vuejs-developer/references/nuxt-patterns.md +21 -0
  1099. package/.github/skills/vuejs-developer/references/performance.md +22 -0
  1100. package/.github/skills/vuejs-developer/references/pinia-state-management.md +44 -0
  1101. package/.github/skills/vuejs-developer/references/project-structure.md +46 -0
  1102. package/.github/skills/vuejs-developer/references/review-queue-patterns.md +27 -0
  1103. package/.github/skills/vuejs-developer/references/security.md +23 -0
  1104. package/.github/skills/vuejs-developer/references/styling-design-system.md +25 -0
  1105. package/.github/skills/vuejs-developer/references/testing.md +42 -0
  1106. package/.github/skills/vuejs-developer/references/vue-router-patterns.md +45 -0
  1107. package/.github/skills/vuejs-developer/references/vue3-modern-standards.md +55 -0
  1108. package/.github/skills/vuejs-developer/scripts/check_accessibility_patterns.py +19 -0
  1109. package/.github/skills/vuejs-developer/scripts/detect_vue_stack.py +28 -0
  1110. package/.github/skills/vuejs-developer/scripts/generate_component_map.py +19 -0
  1111. package/.github/skills/vuejs-developer/scripts/generate_frontend_backlog.py +18 -0
  1112. package/.github/skills/vuejs-developer/scripts/inspect_vue_project.py +32 -0
  1113. package/.github/skills/vuejs-developer/templates/.env.example +8 -0
  1114. package/.github/skills/vuejs-developer/templates/.env.local.example +8 -0
  1115. package/.github/skills/vuejs-developer/templates/Dockerfile +12 -0
  1116. package/.github/skills/vuejs-developer/templates/api-client.ts +32 -0
  1117. package/.github/skills/vuejs-developer/templates/base-button.vue +42 -0
  1118. package/.github/skills/vuejs-developer/templates/base-modal.vue +59 -0
  1119. package/.github/skills/vuejs-developer/templates/citation-panel.vue +25 -0
  1120. package/.github/skills/vuejs-developer/templates/document-upload-view.vue +35 -0
  1121. package/.github/skills/vuejs-developer/templates/github-actions-vue.yml +36 -0
  1122. package/.github/skills/vuejs-developer/templates/main.ts +12 -0
  1123. package/.github/skills/vuejs-developer/templates/nginx.conf +16 -0
  1124. package/.github/skills/vuejs-developer/templates/package.vue-vite-ts.json +34 -0
  1125. package/.github/skills/vuejs-developer/templates/pinia-store.ts +26 -0
  1126. package/.github/skills/vuejs-developer/templates/playwright.config.ts +16 -0
  1127. package/.github/skills/vuejs-developer/templates/rag-chat-view.vue +43 -0
  1128. package/.github/skills/vuejs-developer/templates/retrieval-result-card.vue +36 -0
  1129. package/.github/skills/vuejs-developer/templates/review-queue-view.vue +62 -0
  1130. package/.github/skills/vuejs-developer/templates/router.ts +39 -0
  1131. package/.github/skills/vuejs-developer/templates/tsconfig.json +19 -0
  1132. package/.github/skills/vuejs-developer/templates/vite.config.ts +15 -0
  1133. package/.github/skills/vuejs-developer/templates/vitest.config.ts +11 -0
  1134. package/.github/skills/win-theme-extractor/SKILL.md +125 -0
  1135. package/.github/skills/win-theme-extractor/evals/evals.json +37 -0
  1136. package/.github/skills/win-theme-extractor/references/battlecard-to-theme-patterns.md +93 -0
  1137. package/.github/skills/win-theme-extractor/references/proof-mapping-matrix.md +34 -0
  1138. package/.github/skills/win-theme-extractor/references/win-theme-scorecard.md +45 -0
  1139. package/.github/skills/work-breakdown-builder/SKILL.md +117 -0
  1140. package/.github/skills/work-breakdown-builder/evals/evals.json +44 -0
  1141. package/.github/skills/work-breakdown-builder/references/Cloud Infrastructure WBS Template.xlsx +0 -0
  1142. package/.github/skills/work-breakdown-builder/references/mock-wbs-data.json +258 -0
  1143. package/.github/skills/work-breakdown-builder/references/wbs-structure.md +67 -0
  1144. package/.github/skills/work-breakdown-builder/scripts/create_wbs_workbook.py +242 -0
  1145. package/.github/skills/xlsx/LICENSE.txt +30 -0
  1146. package/.github/skills/xlsx/SKILL.md +292 -0
  1147. package/.github/skills/xlsx/scripts/office/__pycache__/soffice.cpython-312.pyc +0 -0
  1148. package/.github/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  1149. package/.github/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  1150. package/.github/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  1151. package/.github/skills/xlsx/scripts/office/pack.py +159 -0
  1152. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  1153. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  1154. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  1155. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  1156. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  1157. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  1158. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  1159. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  1160. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  1161. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  1162. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  1163. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  1164. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  1165. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  1166. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  1167. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  1168. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  1169. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  1170. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  1171. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  1172. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  1173. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  1174. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  1175. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  1176. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  1177. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  1178. package/.github/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  1179. package/.github/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  1180. package/.github/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  1181. package/.github/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  1182. package/.github/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  1183. package/.github/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  1184. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  1185. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  1186. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  1187. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  1188. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  1189. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  1190. package/.github/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  1191. package/.github/skills/xlsx/scripts/office/soffice.py +183 -0
  1192. package/.github/skills/xlsx/scripts/office/unpack.py +132 -0
  1193. package/.github/skills/xlsx/scripts/office/validate.py +111 -0
  1194. package/.github/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  1195. package/.github/skills/xlsx/scripts/office/validators/base.py +847 -0
  1196. package/.github/skills/xlsx/scripts/office/validators/docx.py +446 -0
  1197. package/.github/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  1198. package/.github/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  1199. package/.github/skills/xlsx/scripts/recalc.py +184 -0
  1200. package/.github/workflows/quality.yml +6 -4
  1201. package/.github/workflows/release-readiness.yml +41 -0
  1202. package/.github/workflows/security.yml +38 -0
  1203. package/.github/workflows/spec-validation.yml +35 -0
  1204. package/.github/workflows/traceability.yml +38 -0
  1205. package/.jumpstart/agents/autonav.md +194 -0
  1206. package/.jumpstart/agents/qa.md +1 -1
  1207. package/.jumpstart/agents/scout.md +4 -0
  1208. package/.jumpstart/compat/assistant-mapping.md +35 -14
  1209. package/.jumpstart/config.yaml +13 -0
  1210. package/.jumpstart/plugin/README.md +97 -0
  1211. package/.jumpstart/plugin/plugin.json +36 -0
  1212. package/.jumpstart/skills/acceptance-test-author/SKILL.md +246 -0
  1213. package/.jumpstart/skills/acceptance-test-author/evals/evals.json +114 -0
  1214. package/.jumpstart/skills/acceptance-test-author/references/ai-test-patterns.md +276 -0
  1215. package/.jumpstart/skills/acceptance-test-author/references/gherkin-style-guide.md +285 -0
  1216. package/.jumpstart/skills/acceptance-test-author/references/scenario-design-patterns.md +245 -0
  1217. package/.jumpstart/skills/acceptance-test-author/references/traceability-template.md +73 -0
  1218. package/.jumpstart/skills/acquire-codebase-knowledge/SKILL.md +174 -0
  1219. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/ARCHITECTURE.md +49 -0
  1220. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/CONCERNS.md +56 -0
  1221. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/CONVENTIONS.md +52 -0
  1222. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/INTEGRATIONS.md +48 -0
  1223. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/STACK.md +56 -0
  1224. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/STRUCTURE.md +44 -0
  1225. package/.jumpstart/skills/acquire-codebase-knowledge/assets/templates/TESTING.md +57 -0
  1226. package/.jumpstart/skills/acquire-codebase-knowledge/references/inquiry-checkpoints.md +70 -0
  1227. package/.jumpstart/skills/acquire-codebase-knowledge/references/stack-detection.md +131 -0
  1228. package/.jumpstart/skills/acquire-codebase-knowledge/scripts/scan.py +712 -0
  1229. package/.jumpstart/skills/agent-approval-policy-spec/README.md +27 -0
  1230. package/.jumpstart/skills/agent-approval-policy-spec/SKILL.md +138 -0
  1231. package/.jumpstart/skills/agent-approval-policy-spec/evals/evals.json +29 -0
  1232. package/.jumpstart/skills/agent-approval-policy-spec/examples/operations-approval-policy-example.md +21 -0
  1233. package/.jumpstart/skills/agent-approval-policy-spec/examples/support-approval-policy-example.md +21 -0
  1234. package/.jumpstart/skills/agent-approval-policy-spec/references/approval-policy-patterns.md +31 -0
  1235. package/.jumpstart/skills/agent-approval-policy-spec/references/audit-field-minimum.md +20 -0
  1236. package/.jumpstart/skills/agent-approval-policy-spec/references/decision-class-taxonomy.md +29 -0
  1237. package/.jumpstart/skills/agent-approval-policy-spec/references/override-governance.md +23 -0
  1238. package/.jumpstart/skills/agent-approval-policy-spec/templates/approval-policy.example.yaml +39 -0
  1239. package/.jumpstart/skills/agent-approval-policy-spec/templates/approval-policy.schema.json +60 -0
  1240. package/.jumpstart/skills/agent-approval-policy-spec/templates/decision-class-matrix.csv +4 -0
  1241. package/.jumpstart/skills/agent-customization/SKILL.md +78 -0
  1242. package/.jumpstart/skills/agent-customization/references/agents.md +111 -0
  1243. package/.jumpstart/skills/agent-customization/references/hooks.md +96 -0
  1244. package/.jumpstart/skills/agent-customization/references/instructions.md +71 -0
  1245. package/.jumpstart/skills/agent-customization/references/prompts.md +80 -0
  1246. package/.jumpstart/skills/agent-customization/references/skills.md +100 -0
  1247. package/.jumpstart/skills/agent-customization/references/workspace-instructions.md +66 -0
  1248. package/.jumpstart/skills/agent-prd-writer/SKILL.md +85 -0
  1249. package/.jumpstart/skills/agent-prd-writer/evals/evals.json +17 -0
  1250. package/.jumpstart/skills/agent-prd-writer/references/prd-pattern.md +21 -0
  1251. package/.jumpstart/skills/agent-tool-catalog-designer/SKILL.md +107 -0
  1252. package/.jumpstart/skills/agent-tool-catalog-designer/evals/evals.json +32 -0
  1253. package/.jumpstart/skills/agent-tool-catalog-designer/examples/example-it-helpdesk-agent.md +57 -0
  1254. package/.jumpstart/skills/agent-tool-catalog-designer/references/tool-design-patterns.md +60 -0
  1255. package/.jumpstart/skills/agent-tool-catalog-designer/templates/tool-catalog.md +43 -0
  1256. package/.jumpstart/skills/agent-tool-catalog-designer/templates/tool-spec.md +68 -0
  1257. package/.jumpstart/skills/agent-workflow-state-machine/SKILL.md +172 -0
  1258. package/.jumpstart/skills/agent-workflow-state-machine/evals/evals.json +44 -0
  1259. package/.jumpstart/skills/agent-workflow-state-machine/examples/jumpstart-client-recap-example.md +55 -0
  1260. package/.jumpstart/skills/agent-workflow-state-machine/references/guardrails-retries-approvals.md +75 -0
  1261. package/.jumpstart/skills/agent-workflow-state-machine/references/state-machine-design-guide.md +77 -0
  1262. package/.jumpstart/skills/agent-workflow-state-machine/templates/agent-workflow-state-machine.mmd +42 -0
  1263. package/.jumpstart/skills/agent-workflow-state-machine/templates/agent-workflow-state-machine.yaml +113 -0
  1264. package/.jumpstart/skills/agent-workflow-state-machine/templates/human-approval-matrix.md +15 -0
  1265. package/.jumpstart/skills/agent-workflow-state-machine/templates/state-transition-table.csv +9 -0
  1266. package/.jumpstart/skills/ai-cost-model-designer/SKILL.md +100 -0
  1267. package/.jumpstart/skills/ai-cost-model-designer/evals/evals.json +31 -0
  1268. package/.jumpstart/skills/ai-cost-model-designer/examples/example-support-copilot-cost-model.md +51 -0
  1269. package/.jumpstart/skills/ai-cost-model-designer/references/cost-components.md +94 -0
  1270. package/.jumpstart/skills/ai-cost-model-designer/references/cost-lever-catalog.md +44 -0
  1271. package/.jumpstart/skills/ai-cost-model-designer/templates/cost-model.md +60 -0
  1272. package/.jumpstart/skills/ai-team-orchestration/SKILL.md +148 -0
  1273. package/.jumpstart/skills/ai-team-orchestration/references/anti-patterns.md +48 -0
  1274. package/.jumpstart/skills/ai-team-orchestration/references/brainstorm-format.md +94 -0
  1275. package/.jumpstart/skills/ai-team-orchestration/references/project-brief-template.md +147 -0
  1276. package/.jumpstart/skills/ai-team-orchestration/references/sprint-plan-template.md +140 -0
  1277. package/.jumpstart/skills/ai-use-case-readiness-assessor/SKILL.md +112 -0
  1278. package/.jumpstart/skills/ai-use-case-readiness-assessor/evals/evals.json +47 -0
  1279. package/.jumpstart/skills/ai-use-case-readiness-assessor/evals/files/readiness-board-strategy-agent.md +27 -0
  1280. package/.jumpstart/skills/ai-use-case-readiness-assessor/evals/files/readiness-maintenance-copilot.md +32 -0
  1281. package/.jumpstart/skills/ai-use-case-readiness-assessor/evals/files/readiness-prior-auth-triage.md +29 -0
  1282. package/.jumpstart/skills/ai-use-case-readiness-assessor/examples/ai-readiness-examples.md +40 -0
  1283. package/.jumpstart/skills/ai-use-case-readiness-assessor/references/output-template.md +65 -0
  1284. package/.jumpstart/skills/ai-use-case-readiness-assessor/references/readiness-model.md +92 -0
  1285. package/.jumpstart/skills/api-contract-test-generator/SKILL.md +76 -0
  1286. package/.jumpstart/skills/api-contract-test-generator/evals/evals.json +74 -0
  1287. package/.jumpstart/skills/api-contract-test-generator/examples/openapi-to-pytest-example.md +17 -0
  1288. package/.jumpstart/skills/api-contract-test-generator/references/ci-gating.md +27 -0
  1289. package/.jumpstart/skills/api-contract-test-generator/references/contract-test-strategy.md +26 -0
  1290. package/.jumpstart/skills/api-contract-test-generator/references/test-case-taxonomy.md +29 -0
  1291. package/.jumpstart/skills/api-contract-test-generator/scripts/assertion_runner.py +27 -0
  1292. package/.jumpstart/skills/api-contract-test-generator/templates/contract-test-matrix.md +7 -0
  1293. package/.jumpstart/skills/api-contract-test-generator/templates/dotnet-xunit-contract-suite.cs +54 -0
  1294. package/.jumpstart/skills/api-contract-test-generator/templates/node-jest-contract-suite.ts +36 -0
  1295. package/.jumpstart/skills/api-contract-test-generator/templates/pytest-contract-suite.py +33 -0
  1296. package/.jumpstart/skills/api-contract-test-generator/templates/python-contract-suite.py +32 -0
  1297. package/.jumpstart/skills/api-creator/SKILL.md +246 -0
  1298. package/.jumpstart/skills/api-creator/evals/evals.json +97 -0
  1299. package/.jumpstart/skills/api-creator/examples/agent-tool-api.md +38 -0
  1300. package/.jumpstart/skills/api-creator/examples/multi-tenant-saas-api.md +30 -0
  1301. package/.jumpstart/skills/api-creator/examples/restaurant-deals-api.md +40 -0
  1302. package/.jumpstart/skills/api-creator/examples/square-integration-api.md +34 -0
  1303. package/.jumpstart/skills/api-creator/examples/webhook-receiver-api.md +38 -0
  1304. package/.jumpstart/skills/api-creator/references/agent-friendly-api-guide.md +53 -0
  1305. package/.jumpstart/skills/api-creator/references/auth-guide.md +69 -0
  1306. package/.jumpstart/skills/api-creator/references/error-model-guide.md +64 -0
  1307. package/.jumpstart/skills/api-creator/references/fastapi-patterns.md +58 -0
  1308. package/.jumpstart/skills/api-creator/references/openapi-guide.md +75 -0
  1309. package/.jumpstart/skills/api-creator/references/pagination-guide.md +63 -0
  1310. package/.jumpstart/skills/api-creator/references/production-readiness.md +53 -0
  1311. package/.jumpstart/skills/api-creator/references/rest-design-guide.md +98 -0
  1312. package/.jumpstart/skills/api-creator/references/webhook-guide.md +63 -0
  1313. package/.jumpstart/skills/api-creator/scripts/assertion_runner.py +30 -0
  1314. package/.jumpstart/skills/api-creator/templates/alembic-env.py +42 -0
  1315. package/.jumpstart/skills/api-creator/templates/docker-compose.yml +26 -0
  1316. package/.jumpstart/skills/api-creator/templates/fastapi-main.py +43 -0
  1317. package/.jumpstart/skills/api-creator/templates/fastapi-repository.py +24 -0
  1318. package/.jumpstart/skills/api-creator/templates/fastapi-route.py +30 -0
  1319. package/.jumpstart/skills/api-creator/templates/fastapi-service.py +20 -0
  1320. package/.jumpstart/skills/api-creator/templates/openapi-template.yaml +140 -0
  1321. package/.jumpstart/skills/api-creator/templates/pydantic-schema.py +30 -0
  1322. package/.jumpstart/skills/api-creator/templates/pytest-api-test.py +27 -0
  1323. package/.jumpstart/skills/api-creator/templates/sqlmodel-model.py +27 -0
  1324. package/.jumpstart/skills/api-design-principles/SKILL.md +528 -0
  1325. package/.jumpstart/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  1326. package/.jumpstart/skills/api-design-principles/assets/rest-api-template.py +182 -0
  1327. package/.jumpstart/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  1328. package/.jumpstart/skills/api-design-principles/references/rest-best-practices.md +408 -0
  1329. package/.jumpstart/skills/api-reviewer/SKILL.md +76 -0
  1330. package/.jumpstart/skills/api-reviewer/evals/evals.json +74 -0
  1331. package/.jumpstart/skills/api-reviewer/examples/sample-review-output.md +22 -0
  1332. package/.jumpstart/skills/api-reviewer/references/compatibility-checks.md +31 -0
  1333. package/.jumpstart/skills/api-reviewer/references/review-checklist.md +41 -0
  1334. package/.jumpstart/skills/api-reviewer/references/severity-model.md +23 -0
  1335. package/.jumpstart/skills/api-reviewer/scripts/assertion_runner.py +27 -0
  1336. package/.jumpstart/skills/api-reviewer/templates/api-review-report-template.md +28 -0
  1337. package/.jumpstart/skills/api-version-migration/SKILL.md +80 -0
  1338. package/.jumpstart/skills/api-version-migration/evals/evals.json +74 -0
  1339. package/.jumpstart/skills/api-version-migration/examples/v1-to-v2-migration-example.md +24 -0
  1340. package/.jumpstart/skills/api-version-migration/references/change-classification.md +29 -0
  1341. package/.jumpstart/skills/api-version-migration/references/deprecation-policy.md +23 -0
  1342. package/.jumpstart/skills/api-version-migration/references/migration-strategies.md +25 -0
  1343. package/.jumpstart/skills/api-version-migration/scripts/assertion_runner.py +27 -0
  1344. package/.jumpstart/skills/api-version-migration/templates/client-compatibility-matrix.md +4 -0
  1345. package/.jumpstart/skills/api-version-migration/templates/migration-plan-template.md +26 -0
  1346. package/.jumpstart/skills/architecture-blueprint-generator/SKILL.md +121 -0
  1347. package/.jumpstart/skills/architecture-blueprint-generator/evals/evals.json +42 -0
  1348. package/.jumpstart/skills/architecture-blueprint-generator/examples/blueprint-outline-example.md +25 -0
  1349. package/.jumpstart/skills/architecture-blueprint-generator/examples/finding-style-example.md +29 -0
  1350. package/.jumpstart/skills/architecture-blueprint-generator/references/analysis-checkpoints.md +61 -0
  1351. package/.jumpstart/skills/architecture-blueprint-generator/references/decision-records.md +41 -0
  1352. package/.jumpstart/skills/architecture-blueprint-generator/references/diagram-guidance.md +57 -0
  1353. package/.jumpstart/skills/architecture-blueprint-generator/references/technology-patterns.md +83 -0
  1354. package/.jumpstart/skills/architecture-blueprint-generator/references/workflow.md +81 -0
  1355. package/.jumpstart/skills/architecture-blueprint-generator/templates/adr-template.md +31 -0
  1356. package/.jumpstart/skills/architecture-blueprint-generator/templates/project-architecture-blueprint-template.md +114 -0
  1357. package/.jumpstart/skills/architecture-patterns/SKILL.md +494 -0
  1358. package/.jumpstart/skills/atlassian-capture-tasks-from-meeting-notes/SKILL.md +679 -0
  1359. package/.jumpstart/skills/atlassian-capture-tasks-from-meeting-notes/references/action-item-patterns.md +445 -0
  1360. package/.jumpstart/skills/atlassian-generate-status-report/SKILL.md +335 -0
  1361. package/.jumpstart/skills/atlassian-generate-status-report/references/jql-patterns.md +82 -0
  1362. package/.jumpstart/skills/atlassian-generate-status-report/references/report-templates.md +120 -0
  1363. package/.jumpstart/skills/atlassian-generate-status-report/scripts/jql_builder.py +225 -0
  1364. package/.jumpstart/skills/atlassian-search-company-knowledge/SKILL.md +575 -0
  1365. package/.jumpstart/skills/atlassian-spec-to-backlog/SKILL.md +543 -0
  1366. package/.jumpstart/skills/atlassian-spec-to-backlog/references/breakdown-examples.md +327 -0
  1367. package/.jumpstart/skills/atlassian-spec-to-backlog/references/epic-templates.md +401 -0
  1368. package/.jumpstart/skills/atlassian-spec-to-backlog/references/ticket-writing-guide.md +354 -0
  1369. package/.jumpstart/skills/atlassian-triage-issue/SKILL.md +700 -0
  1370. package/.jumpstart/skills/atlassian-triage-issue/references/bug-report-templates.md +451 -0
  1371. package/.jumpstart/skills/atlassian-triage-issue/references/search-patterns.md +261 -0
  1372. package/.jumpstart/skills/automate-this/SKILL.md +309 -0
  1373. package/.jumpstart/skills/automate-this/evals/evals.json +73 -0
  1374. package/.jumpstart/skills/automate-this/examples/automation-examples.md +311 -0
  1375. package/.jumpstart/skills/automate-this/references/automation-patterns.md +476 -0
  1376. package/.jumpstart/skills/automate-this/references/environment-detection.md +170 -0
  1377. package/.jumpstart/skills/automate-this/references/security-credentials.md +280 -0
  1378. package/.jumpstart/skills/automate-this/references/video-extraction.md +160 -0
  1379. package/.jumpstart/skills/automate-this/templates/automation-proposal.md +99 -0
  1380. package/.jumpstart/skills/automate-this/templates/environment-fingerprint.md +63 -0
  1381. package/.jumpstart/skills/automate-this/templates/process-reconstruction.md +59 -0
  1382. package/.jumpstart/skills/azure-architecture-autopilot/README.md +188 -0
  1383. package/.jumpstart/skills/azure-architecture-autopilot/SKILL.md +170 -0
  1384. package/.jumpstart/skills/azure-architecture-autopilot/assets/06-architecture-diagram.png +0 -0
  1385. package/.jumpstart/skills/azure-architecture-autopilot/assets/07-azure-portal-resources.png +0 -0
  1386. package/.jumpstart/skills/azure-architecture-autopilot/assets/08-deployment-succeeded.png +0 -0
  1387. package/.jumpstart/skills/azure-architecture-autopilot/references/ai-data.md +254 -0
  1388. package/.jumpstart/skills/azure-architecture-autopilot/references/architecture-guidance-sources.md +117 -0
  1389. package/.jumpstart/skills/azure-architecture-autopilot/references/azure-common-patterns.md +170 -0
  1390. package/.jumpstart/skills/azure-architecture-autopilot/references/azure-dynamic-sources.md +93 -0
  1391. package/.jumpstart/skills/azure-architecture-autopilot/references/bicep-generator.md +421 -0
  1392. package/.jumpstart/skills/azure-architecture-autopilot/references/bicep-reviewer.md +144 -0
  1393. package/.jumpstart/skills/azure-architecture-autopilot/references/phase0-scanner.md +475 -0
  1394. package/.jumpstart/skills/azure-architecture-autopilot/references/phase1-advisor.md +922 -0
  1395. package/.jumpstart/skills/azure-architecture-autopilot/references/phase4-deployer.md +318 -0
  1396. package/.jumpstart/skills/azure-architecture-autopilot/references/service-gotchas.md +113 -0
  1397. package/.jumpstart/skills/azure-architecture-autopilot/scripts/cli.py +153 -0
  1398. package/.jumpstart/skills/azure-architecture-autopilot/scripts/generator.py +2038 -0
  1399. package/.jumpstart/skills/azure-architecture-autopilot/scripts/icons.py +3200 -0
  1400. package/.jumpstart/skills/azure-devops-delivery-builder/README.md +36 -0
  1401. package/.jumpstart/skills/azure-devops-delivery-builder/SKILL.md +197 -0
  1402. package/.jumpstart/skills/azure-devops-delivery-builder/evals/evals.json +64 -0
  1403. package/.jumpstart/skills/azure-devops-delivery-builder/examples/fixtures/backlog-items-smoke.json +35 -0
  1404. package/.jumpstart/skills/azure-devops-delivery-builder/examples/jumpstart-to-ado-backlog-example.md +59 -0
  1405. package/.jumpstart/skills/azure-devops-delivery-builder/references/acceptance-criteria-and-quality.md +54 -0
  1406. package/.jumpstart/skills/azure-devops-delivery-builder/references/ado-traceability-and-pipelines.md +37 -0
  1407. package/.jumpstart/skills/azure-devops-delivery-builder/references/ai-work-item-patterns.md +43 -0
  1408. package/.jumpstart/skills/azure-devops-delivery-builder/references/backlog-decomposition.md +47 -0
  1409. package/.jumpstart/skills/azure-devops-delivery-builder/references/jumpstart-and-pod-alignment.md +41 -0
  1410. package/.jumpstart/skills/azure-devops-delivery-builder/references/process-templates.md +61 -0
  1411. package/.jumpstart/skills/azure-devops-delivery-builder/references/wiql-and-reporting.md +80 -0
  1412. package/.jumpstart/skills/azure-devops-delivery-builder/scripts/generate_azure_devops_csv.py +138 -0
  1413. package/.jumpstart/skills/azure-devops-delivery-builder/scripts/smoke_test_csv_tools.py +56 -0
  1414. package/.jumpstart/skills/azure-devops-delivery-builder/scripts/validate_azure_boards_backlog.py +105 -0
  1415. package/.jumpstart/skills/azure-devops-delivery-builder/templates/ado-import-template.csv +5 -0
  1416. package/.jumpstart/skills/azure-devops-delivery-builder/templates/backlog-items-template.json +48 -0
  1417. package/.jumpstart/skills/azure-devops-delivery-builder/templates/bug-template.md +27 -0
  1418. package/.jumpstart/skills/azure-devops-delivery-builder/templates/epic-template.md +36 -0
  1419. package/.jumpstart/skills/azure-devops-delivery-builder/templates/feature-template.md +33 -0
  1420. package/.jumpstart/skills/azure-devops-delivery-builder/templates/spike-template.md +26 -0
  1421. package/.jumpstart/skills/azure-devops-delivery-builder/templates/story-pbi-template.md +35 -0
  1422. package/.jumpstart/skills/azure-devops-delivery-builder/templates/task-template.md +18 -0
  1423. package/.jumpstart/skills/azure-devops-execution/README.md +22 -0
  1424. package/.jumpstart/skills/azure-devops-execution/SKILL.md +48 -0
  1425. package/.jumpstart/skills/azure-devops-execution/scripts/import_csv_to_ado.py +144 -0
  1426. package/.jumpstart/skills/azure-devops-execution/scripts/run_wiql.py +59 -0
  1427. package/.jumpstart/skills/azure-pricing/SKILL.md +189 -0
  1428. package/.jumpstart/skills/azure-pricing/references/COPILOT-STUDIO-RATES.md +135 -0
  1429. package/.jumpstart/skills/azure-pricing/references/COST-ESTIMATOR.md +142 -0
  1430. package/.jumpstart/skills/azure-pricing/references/REGIONS.md +84 -0
  1431. package/.jumpstart/skills/azure-pricing/references/SERVICE-NAMES.md +106 -0
  1432. package/.jumpstart/skills/bias-and-anti-pattern-checker/SKILL.md +89 -0
  1433. package/.jumpstart/skills/bias-and-anti-pattern-checker/evals/evals.json +17 -0
  1434. package/.jumpstart/skills/bias-and-anti-pattern-checker/references/anti-pattern-catalog.md +79 -0
  1435. package/.jumpstart/skills/bottom-up-estimation/SKILL.md +182 -0
  1436. package/.jumpstart/skills/bottom-up-estimation/evals/evals.json +41 -0
  1437. package/.jumpstart/skills/bottom-up-estimation/references/ai-pod-adjustment-guide.md +46 -0
  1438. package/.jumpstart/skills/bottom-up-estimation/references/estimation-methodology.md +132 -0
  1439. package/.jumpstart/skills/bottom-up-estimation/references/output-package-guide.md +45 -0
  1440. package/.jumpstart/skills/bottom-up-estimation/references/pod-tier-mapping.md +30 -0
  1441. package/.jumpstart/skills/bottom-up-estimation/references/pricing-conversion-guide.md +27 -0
  1442. package/.jumpstart/skills/bottom-up-estimation/templates/estimate-package-template.md +117 -0
  1443. package/.jumpstart/skills/bottom-up-estimation/templates/estimation-worksheet-template.csv +16 -0
  1444. package/.jumpstart/skills/business-logic-extractor/SKILL.md +79 -0
  1445. package/.jumpstart/skills/business-logic-extractor/evals/evals.json +33 -0
  1446. package/.jumpstart/skills/business-logic-extractor/evals/files/intake-workflow-notes.md +30 -0
  1447. package/.jumpstart/skills/business-logic-extractor/evals/files/process-narrative.md +3 -0
  1448. package/.jumpstart/skills/business-logic-extractor/references/logic-pattern.md +46 -0
  1449. package/.jumpstart/skills/change-management-readiness/SKILL.md +80 -0
  1450. package/.jumpstart/skills/change-management-readiness/evals/evals.json +30 -0
  1451. package/.jumpstart/skills/change-management-readiness/references/adoption-risk-rubric.md +86 -0
  1452. package/.jumpstart/skills/change-management-readiness/templates/change-readiness-scorecard-template.md +58 -0
  1453. package/.jumpstart/skills/cloud-design-patterns/SKILL.md +62 -0
  1454. package/.jumpstart/skills/cloud-design-patterns/references/architecture-design.md +127 -0
  1455. package/.jumpstart/skills/cloud-design-patterns/references/azure-service-mappings.md +13 -0
  1456. package/.jumpstart/skills/cloud-design-patterns/references/best-practices.md +34 -0
  1457. package/.jumpstart/skills/cloud-design-patterns/references/deployment-operational.md +91 -0
  1458. package/.jumpstart/skills/cloud-design-patterns/references/event-driven.md +21 -0
  1459. package/.jumpstart/skills/cloud-design-patterns/references/messaging-integration.md +127 -0
  1460. package/.jumpstart/skills/cloud-design-patterns/references/performance.md +180 -0
  1461. package/.jumpstart/skills/cloud-design-patterns/references/reliability-resilience.md +156 -0
  1462. package/.jumpstart/skills/cloud-design-patterns/references/security.md +55 -0
  1463. package/.jumpstart/skills/code-tour/SKILL.md +433 -0
  1464. package/.jumpstart/skills/code-tour/references/codetour-schema.json +115 -0
  1465. package/.jumpstart/skills/code-tour/references/examples.md +195 -0
  1466. package/.jumpstart/skills/code-tour/scripts/generate_from_docs.py +286 -0
  1467. package/.jumpstart/skills/code-tour/scripts/validate_tour.py +346 -0
  1468. package/.jumpstart/skills/company-research/SKILL.md +228 -0
  1469. package/.jumpstart/skills/company-research/evals/evals.json +23 -0
  1470. package/.jumpstart/skills/company-research/examples/sample.md +98 -0
  1471. package/.jumpstart/skills/company-research/references/jumpstart-company-research-workflow.md +65 -0
  1472. package/.jumpstart/skills/company-research/templates/template.md +121 -0
  1473. package/.jumpstart/skills/copilot-sdk/SKILL.md +102 -0
  1474. package/.jumpstart/skills/copilot-sdk/evals/evals.json +29 -0
  1475. package/.jumpstart/skills/copilot-sdk/examples/copilot-sdk-recipes.md +73 -0
  1476. package/.jumpstart/skills/copilot-sdk/references/architecture-and-runtime.md +73 -0
  1477. package/.jumpstart/skills/copilot-sdk/references/session-patterns.md +90 -0
  1478. package/.jumpstart/skills/copilot-sdk/references/tools-and-mcp.md +79 -0
  1479. package/.jumpstart/skills/copilot-sdk/references/troubleshooting.md +99 -0
  1480. package/.jumpstart/skills/copilot-sdk/templates/copilot-sdk-design-template.md +51 -0
  1481. package/.jumpstart/skills/copilot-sdk/templates/python-starter.py +42 -0
  1482. package/.jumpstart/skills/copilot-sdk/templates/typescript-starter.ts +35 -0
  1483. package/.jumpstart/skills/cost-optimization/SKILL.md +295 -0
  1484. package/.jumpstart/skills/cqrs-implementation/SKILL.md +554 -0
  1485. package/.jumpstart/skills/crafting-effective-readmes/README.md +180 -0
  1486. package/.jumpstart/skills/crafting-effective-readmes/SKILL.md +78 -0
  1487. package/.jumpstart/skills/crafting-effective-readmes/references/art-of-readme.md +536 -0
  1488. package/.jumpstart/skills/crafting-effective-readmes/references/make-a-readme.md +119 -0
  1489. package/.jumpstart/skills/crafting-effective-readmes/references/standard-readme-example-maximal.md +68 -0
  1490. package/.jumpstart/skills/crafting-effective-readmes/references/standard-readme-example-minimal.md +21 -0
  1491. package/.jumpstart/skills/crafting-effective-readmes/references/standard-readme-spec.md +242 -0
  1492. package/.jumpstart/skills/crafting-effective-readmes/section-checklist.md +17 -0
  1493. package/.jumpstart/skills/crafting-effective-readmes/style-guide.md +13 -0
  1494. package/.jumpstart/skills/crafting-effective-readmes/templates/internal.md +106 -0
  1495. package/.jumpstart/skills/crafting-effective-readmes/templates/oss.md +77 -0
  1496. package/.jumpstart/skills/crafting-effective-readmes/templates/personal.md +51 -0
  1497. package/.jumpstart/skills/crafting-effective-readmes/templates/xdg-config.md +71 -0
  1498. package/.jumpstart/skills/crafting-effective-readmes/using-references.md +35 -0
  1499. package/.jumpstart/skills/current-state-process-miner/SKILL.md +78 -0
  1500. package/.jumpstart/skills/current-state-process-miner/evals/evals.json +42 -0
  1501. package/.jumpstart/skills/current-state-process-miner/references/process-mining-workflow.md +73 -0
  1502. package/.jumpstart/skills/current-state-process-miner/templates/as-is-process-map-template.md +81 -0
  1503. package/.jumpstart/skills/data-readiness-assessor/SKILL.md +130 -0
  1504. package/.jumpstart/skills/data-readiness-assessor/evals/evals.json +37 -0
  1505. package/.jumpstart/skills/data-readiness-assessor/evals/files/data-readiness-fieldservice-copilot.md +40 -0
  1506. package/.jumpstart/skills/data-readiness-assessor/evals/files/data-readiness-public-sector-permit-triage.md +40 -0
  1507. package/.jumpstart/skills/data-readiness-assessor/examples/example-claims-rag-readiness.md +74 -0
  1508. package/.jumpstart/skills/data-readiness-assessor/references/scoring-rubric.md +87 -0
  1509. package/.jumpstart/skills/data-readiness-assessor/references/sensitivity-classification.md +44 -0
  1510. package/.jumpstart/skills/data-readiness-assessor/templates/data-source-inventory.md +44 -0
  1511. package/.jumpstart/skills/database-schema-designer/README.md +212 -0
  1512. package/.jumpstart/skills/database-schema-designer/SKILL.md +687 -0
  1513. package/.jumpstart/skills/database-schema-designer/assets/templates/migration-template.sql +60 -0
  1514. package/.jumpstart/skills/database-schema-designer/references/schema-design-checklist.md +118 -0
  1515. package/.jumpstart/skills/dependency-bottleneck-detector/README.md +77 -0
  1516. package/.jumpstart/skills/dependency-bottleneck-detector/SKILL.md +307 -0
  1517. package/.jumpstart/skills/dependency-bottleneck-detector/evals/evals.json +60 -0
  1518. package/.jumpstart/skills/dependency-bottleneck-detector/references/dependency-taxonomy.md +351 -0
  1519. package/.jumpstart/skills/dependency-bottleneck-detector/references/escalation-patterns.md +220 -0
  1520. package/.jumpstart/skills/dependency-bottleneck-detector/references/proactive-detection.md +155 -0
  1521. package/.jumpstart/skills/dependency-bottleneck-detector/references/unblock-strategies.md +274 -0
  1522. package/.jumpstart/skills/dependency-bottleneck-detector/scripts/dependency_scan.py +175 -0
  1523. package/.jumpstart/skills/dependency-bottleneck-detector/scripts/dependency_tracker.py +291 -0
  1524. package/.jumpstart/skills/dependency-bottleneck-detector/scripts/escalation_timer.py +116 -0
  1525. package/.jumpstart/skills/dependency-bottleneck-detector/templates/client-dependency-summary.md +71 -0
  1526. package/.jumpstart/skills/dependency-bottleneck-detector/templates/dependency-bottleneck-report.md +143 -0
  1527. package/.jumpstart/skills/dependency-bottleneck-detector/templates/dependency-inventory.md +88 -0
  1528. package/.jumpstart/skills/dependency-bottleneck-detector/templates/escalation-email.md +155 -0
  1529. package/.jumpstart/skills/dependency-bottleneck-detector/templates/unblock-action-plan.md +106 -0
  1530. package/.jumpstart/skills/design-md-auditor/README.md +19 -0
  1531. package/.jumpstart/skills/design-md-auditor/SKILL.md +68 -0
  1532. package/.jumpstart/skills/design-md-auditor/evals/evals.json +23 -0
  1533. package/.jumpstart/skills/design-md-auditor/references/ai-workflow-checks.md +23 -0
  1534. package/.jumpstart/skills/design-md-auditor/references/audit-rubric.md +40 -0
  1535. package/.jumpstart/skills/design-md-auditor/references/severity-model.md +33 -0
  1536. package/.jumpstart/skills/design-md-auditor/templates/compliance-report-template.md +23 -0
  1537. package/.jumpstart/skills/design-md-creator/README.md +49 -0
  1538. package/.jumpstart/skills/design-md-creator/SKILL.md +146 -0
  1539. package/.jumpstart/skills/design-md-creator/evals/evals.json +23 -0
  1540. package/.jumpstart/skills/design-md-creator/evals/rubric.md +27 -0
  1541. package/.jumpstart/skills/design-md-creator/examples/prompts.md +23 -0
  1542. package/.jumpstart/skills/design-md-creator/references/accessibility-rules.md +35 -0
  1543. package/.jumpstart/skills/design-md-creator/references/ai-ui-patterns.md +36 -0
  1544. package/.jumpstart/skills/design-md-creator/references/anti-patterns.md +34 -0
  1545. package/.jumpstart/skills/design-md-creator/references/component-standards.md +39 -0
  1546. package/.jumpstart/skills/design-md-creator/references/design-md-structure.md +69 -0
  1547. package/.jumpstart/skills/design-md-creator/references/design-review-checklist.md +32 -0
  1548. package/.jumpstart/skills/design-md-creator/references/framework-implementation-notes.md +42 -0
  1549. package/.jumpstart/skills/design-md-creator/references/responsive-design.md +32 -0
  1550. package/.jumpstart/skills/design-md-creator/references/stitch-design-md-notes.md +36 -0
  1551. package/.jumpstart/skills/design-md-creator/references/visual-language-guide.md +40 -0
  1552. package/.jumpstart/skills/design-md-creator/scripts/generate_design_review.py +68 -0
  1553. package/.jumpstart/skills/design-md-creator/scripts/inspect_design_md.py +63 -0
  1554. package/.jumpstart/skills/design-md-creator/templates/DESIGN.enterprise-ai.md +92 -0
  1555. package/.jumpstart/skills/design-md-creator/templates/DESIGN.power-platform.md +17 -0
  1556. package/.jumpstart/skills/design-md-creator/templates/DESIGN.rag-chat.md +42 -0
  1557. package/.jumpstart/skills/design-md-creator/templates/DESIGN.react.md +18 -0
  1558. package/.jumpstart/skills/design-md-creator/templates/DESIGN.review-queue.md +41 -0
  1559. package/.jumpstart/skills/design-md-creator/templates/DESIGN.vue.md +19 -0
  1560. package/.jumpstart/skills/design-token-sync/README.md +20 -0
  1561. package/.jumpstart/skills/design-token-sync/SKILL.md +54 -0
  1562. package/.jumpstart/skills/design-token-sync/evals/evals.json +23 -0
  1563. package/.jumpstart/skills/design-token-sync/references/framework-mappings.md +30 -0
  1564. package/.jumpstart/skills/design-token-sync/references/token-taxonomy.md +42 -0
  1565. package/.jumpstart/skills/design-token-sync/scripts/extract_design_tokens.py +52 -0
  1566. package/.jumpstart/skills/design-token-sync/templates/tokens.css.md +16 -0
  1567. package/.jumpstart/skills/design-token-sync/templates/tokens.design-system.json +48 -0
  1568. package/.jumpstart/skills/devops-rollout-plan/SKILL.md +206 -0
  1569. package/.jumpstart/skills/devops-rollout-plan/evals/evals.json +119 -0
  1570. package/.jumpstart/skills/devops-rollout-plan/examples/azure-openai-agent-rollout.md +237 -0
  1571. package/.jumpstart/skills/devops-rollout-plan/references/ai-agent-deployment.md +250 -0
  1572. package/.jumpstart/skills/devops-rollout-plan/references/azure-safe-deployment.md +206 -0
  1573. package/.jumpstart/skills/devops-rollout-plan/references/pod-delivery-context.md +206 -0
  1574. package/.jumpstart/skills/devops-rollout-plan/templates/ai-agent-rollout-plan.md +326 -0
  1575. package/.jumpstart/skills/devops-rollout-plan/templates/lightweight-rollout-plan.md +67 -0
  1576. package/.jumpstart/skills/devops-rollout-plan/templates/standard-rollout-plan.md +340 -0
  1577. package/.jumpstart/skills/discovery-depth-scorecard/SKILL.md +88 -0
  1578. package/.jumpstart/skills/discovery-depth-scorecard/references/scoring-model.md +45 -0
  1579. package/.jumpstart/skills/docx/LICENSE.txt +30 -0
  1580. package/.jumpstart/skills/docx/SKILL.md +590 -0
  1581. package/.jumpstart/skills/docx/scripts/__init__.py +1 -0
  1582. package/.jumpstart/skills/docx/scripts/accept_changes.py +135 -0
  1583. package/.jumpstart/skills/docx/scripts/comment.py +318 -0
  1584. package/.jumpstart/skills/docx/scripts/office/helpers/__init__.py +0 -0
  1585. package/.jumpstart/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  1586. package/.jumpstart/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  1587. package/.jumpstart/skills/docx/scripts/office/pack.py +159 -0
  1588. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  1589. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  1590. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  1591. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  1592. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  1593. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  1594. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  1595. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  1596. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  1597. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  1598. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  1599. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  1600. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  1601. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  1602. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  1603. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  1604. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  1605. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  1606. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  1607. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  1608. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  1609. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  1610. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  1611. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  1612. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  1613. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  1614. package/.jumpstart/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  1615. package/.jumpstart/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  1616. package/.jumpstart/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  1617. package/.jumpstart/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  1618. package/.jumpstart/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  1619. package/.jumpstart/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  1620. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  1621. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  1622. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  1623. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  1624. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  1625. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  1626. package/.jumpstart/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  1627. package/.jumpstart/skills/docx/scripts/office/soffice.py +183 -0
  1628. package/.jumpstart/skills/docx/scripts/office/unpack.py +132 -0
  1629. package/.jumpstart/skills/docx/scripts/office/validate.py +111 -0
  1630. package/.jumpstart/skills/docx/scripts/office/validators/__init__.py +15 -0
  1631. package/.jumpstart/skills/docx/scripts/office/validators/base.py +847 -0
  1632. package/.jumpstart/skills/docx/scripts/office/validators/docx.py +446 -0
  1633. package/.jumpstart/skills/docx/scripts/office/validators/pptx.py +275 -0
  1634. package/.jumpstart/skills/docx/scripts/office/validators/redlining.py +247 -0
  1635. package/.jumpstart/skills/docx/scripts/templates/comments.xml +3 -0
  1636. package/.jumpstart/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  1637. package/.jumpstart/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  1638. package/.jumpstart/skills/docx/scripts/templates/commentsIds.xml +3 -0
  1639. package/.jumpstart/skills/docx/scripts/templates/people.xml +3 -0
  1640. package/.jumpstart/skills/dora-evaluation-report/README.md +49 -0
  1641. package/.jumpstart/skills/dora-evaluation-report/SKILL.md +235 -0
  1642. package/.jumpstart/skills/dora-evaluation-report/evals/evals.json +33 -0
  1643. package/.jumpstart/skills/dora-evaluation-report/evals/files/sample-input.md +35 -0
  1644. package/.jumpstart/skills/dora-evaluation-report/examples/product-team-dora-evaluation-example.md +36 -0
  1645. package/.jumpstart/skills/dora-evaluation-report/references/dora-ai-capabilities-model.md +84 -0
  1646. package/.jumpstart/skills/dora-evaluation-report/references/dora-assessment-method.md +99 -0
  1647. package/.jumpstart/skills/dora-evaluation-report/references/dora-metrics-and-evidence.md +94 -0
  1648. package/.jumpstart/skills/dora-evaluation-report/references/platform-and-team-health-guide.md +67 -0
  1649. package/.jumpstart/skills/dora-evaluation-report/references/scoring-and-prioritization-model.md +71 -0
  1650. package/.jumpstart/skills/dora-evaluation-report/templates/dora-30-60-90-roadmap-template.md +55 -0
  1651. package/.jumpstart/skills/dora-evaluation-report/templates/dora-capability-scorecard-template.md +38 -0
  1652. package/.jumpstart/skills/dora-evaluation-report/templates/dora-evaluation-report-template.md +150 -0
  1653. package/.jumpstart/skills/dora-evaluation-report/templates/dora-evidence-register-template.csv +4 -0
  1654. package/.jumpstart/skills/dora-evaluation-report/templates/dora-intake-questionnaire.md +49 -0
  1655. package/.jumpstart/skills/dotnet-developer/SKILL.md +347 -0
  1656. package/.jumpstart/skills/dotnet-developer/references/ai-integration-patterns.md +375 -0
  1657. package/.jumpstart/skills/dotnet-developer/references/aspnet-core-api-patterns.md +380 -0
  1658. package/.jumpstart/skills/dotnet-developer/references/authentication-authorization.md +296 -0
  1659. package/.jumpstart/skills/dotnet-developer/references/azure-native-patterns.md +353 -0
  1660. package/.jumpstart/skills/dotnet-developer/references/background-workers.md +342 -0
  1661. package/.jumpstart/skills/dotnet-developer/references/ef-core-patterns.md +350 -0
  1662. package/.jumpstart/skills/dotnet-developer/references/legacy-modernization.md +202 -0
  1663. package/.jumpstart/skills/dotnet-developer/references/modern-dotnet-standards.md +235 -0
  1664. package/.jumpstart/skills/dotnet-developer/references/observability.md +283 -0
  1665. package/.jumpstart/skills/dotnet-developer/references/production-readiness.md +143 -0
  1666. package/.jumpstart/skills/dotnet-developer/references/rag-document-workflows.md +372 -0
  1667. package/.jumpstart/skills/dotnet-developer/references/security-checklist.md +262 -0
  1668. package/.jumpstart/skills/dotnet-developer/references/testing-guide.md +354 -0
  1669. package/.jumpstart/skills/dotnet-developer/scripts/inspect_dotnet_solution.py +353 -0
  1670. package/.jumpstart/skills/dotnet-developer/templates/Dockerfile +55 -0
  1671. package/.jumpstart/skills/dotnet-developer/templates/Program.controller-api.cs +141 -0
  1672. package/.jumpstart/skills/dotnet-developer/templates/Program.minimal-api.cs +154 -0
  1673. package/.jumpstart/skills/dotnet-developer/templates/ai-client-abstraction.cs +161 -0
  1674. package/.jumpstart/skills/dotnet-developer/templates/appsettings.template.json +58 -0
  1675. package/.jumpstart/skills/dotnet-developer/templates/azure-pipelines-dotnet.yml +164 -0
  1676. package/.jumpstart/skills/dotnet-developer/templates/background-service.cs +151 -0
  1677. package/.jumpstart/skills/dotnet-developer/templates/docker-compose.dotnet.yml +85 -0
  1678. package/.jumpstart/skills/dotnet-developer/templates/entity-framework-dbcontext.cs +133 -0
  1679. package/.jumpstart/skills/dotnet-developer/templates/fluentvalidation-validator.cs +107 -0
  1680. package/.jumpstart/skills/dotnet-developer/templates/github-actions-dotnet.yml +140 -0
  1681. package/.jumpstart/skills/dotnet-developer/templates/minimal-api-endpoints.cs +136 -0
  1682. package/.jumpstart/skills/dotnet-developer/templates/options-pattern.cs +101 -0
  1683. package/.jumpstart/skills/dotnet-developer/templates/service.cs +155 -0
  1684. package/.jumpstart/skills/dotnet-developer/templates/xunit-api-test.cs +221 -0
  1685. package/.jumpstart/skills/event-store-design/SKILL.md +437 -0
  1686. package/.jumpstart/skills/grill-me/SKILL.md +212 -0
  1687. package/.jumpstart/skills/grill-me/evals/manual-eval-checklist.md +50 -0
  1688. package/.jumpstart/skills/grill-me/examples/document-review-example.md +45 -0
  1689. package/.jumpstart/skills/grill-me/references/decision-tree.md +165 -0
  1690. package/.jumpstart/skills/grill-me/references/quality-bar.md +27 -0
  1691. package/.jumpstart/skills/grill-me/references/question-pattern.md +39 -0
  1692. package/.jumpstart/skills/grill-me/templates/grill-summary-template.md +39 -0
  1693. package/.jumpstart/skills/grill-summary-to-proposal/SKILL.md +93 -0
  1694. package/.jumpstart/skills/grill-summary-to-proposal/evals/manual-eval-checklist.md +39 -0
  1695. package/.jumpstart/skills/grill-summary-to-proposal/examples/from-grill-summary-example.md +28 -0
  1696. package/.jumpstart/skills/grill-summary-to-proposal/references/normalization-pattern.md +40 -0
  1697. package/.jumpstart/skills/grill-summary-to-proposal/references/redline-patterns.md +53 -0
  1698. package/.jumpstart/skills/grill-summary-to-proposal/templates/proposal-hardening-template.md +39 -0
  1699. package/.jumpstart/skills/gtm-ai-gtm/SKILL.md +324 -0
  1700. package/.jumpstart/skills/gtm-ai-gtm/evals/evals.json +42 -0
  1701. package/.jumpstart/skills/gtm-ai-gtm/examples/enterprise-ai-teammate-positioning.md +31 -0
  1702. package/.jumpstart/skills/gtm-ai-gtm/examples/jumpstart-to-pod-recommendation.md +33 -0
  1703. package/.jumpstart/skills/gtm-ai-gtm/references/enterprise-ai-objections.md +80 -0
  1704. package/.jumpstart/skills/gtm-ai-gtm/references/jumpstart-and-pod-alignment.md +72 -0
  1705. package/.jumpstart/skills/gtm-ai-gtm/references/pricing-and-packaging.md +41 -0
  1706. package/.jumpstart/skills/gtm-ai-gtm/templates/client-gtm-brief.md +40 -0
  1707. package/.jumpstart/skills/gtm-ai-gtm/templates/jumpstart-to-pod-recommendation-matrix.md +36 -0
  1708. package/.jumpstart/skills/gtm-enterprise-account-planning/SKILL.md +169 -0
  1709. package/.jumpstart/skills/gtm-enterprise-account-planning/evals/evals.json +39 -0
  1710. package/.jumpstart/skills/gtm-enterprise-account-planning/examples/example-account-plan.md +92 -0
  1711. package/.jumpstart/skills/gtm-enterprise-account-planning/references/jumpstart-account-planning-guide.md +156 -0
  1712. package/.jumpstart/skills/gtm-enterprise-account-planning/templates/account-plan-template.md +97 -0
  1713. package/.jumpstart/skills/gtm-enterprise-account-planning/templates/mutual-action-plan-template.md +36 -0
  1714. package/.jumpstart/skills/gtm-positioning-strategy/SKILL.md +164 -0
  1715. package/.jumpstart/skills/gtm-positioning-strategy/evals/evals.json +38 -0
  1716. package/.jumpstart/skills/gtm-positioning-strategy/examples/gtm-positioning-examples.md +60 -0
  1717. package/.jumpstart/skills/gtm-positioning-strategy/references/jumpstart-pod-positioning.md +69 -0
  1718. package/.jumpstart/skills/gtm-positioning-strategy/references/positioning-tests.md +65 -0
  1719. package/.jumpstart/skills/gtm-positioning-strategy/references/word-choice-and-framing.md +65 -0
  1720. package/.jumpstart/skills/gtm-positioning-strategy/references/workflow.md +92 -0
  1721. package/.jumpstart/skills/gtm-positioning-strategy/templates/message-house-template.md +36 -0
  1722. package/.jumpstart/skills/gtm-positioning-strategy/templates/positioning-recommendation-template.md +28 -0
  1723. package/.jumpstart/skills/hybrid-cloud-networking/SKILL.md +241 -0
  1724. package/.jumpstart/skills/impediment-prioritization/SKILL.md +173 -0
  1725. package/.jumpstart/skills/impediment-prioritization/evals/evals.json +23 -0
  1726. package/.jumpstart/skills/impediment-prioritization/examples/impediment-prioritization-examples.md +53 -0
  1727. package/.jumpstart/skills/impediment-prioritization/references/jumpstart-pod-mapping.md +74 -0
  1728. package/.jumpstart/skills/impediment-prioritization/references/scoring-rubric.md +79 -0
  1729. package/.jumpstart/skills/impediment-prioritization/references/workflow.md +95 -0
  1730. package/.jumpstart/skills/impediment-prioritization/templates/jumpstart-pod-remediation-template.md +31 -0
  1731. package/.jumpstart/skills/impediment-prioritization/templates/prioritized-impediments-template.md +18 -0
  1732. package/.jumpstart/skills/integration-surface-mapper/SKILL.md +73 -0
  1733. package/.jumpstart/skills/integration-surface-mapper/evals/evals.json +30 -0
  1734. package/.jumpstart/skills/integration-surface-mapper/references/integration-pattern-catalog.md +74 -0
  1735. package/.jumpstart/skills/integration-surface-mapper/templates/integration-surface-template.md +66 -0
  1736. package/.jumpstart/skills/istio-traffic-management/SKILL.md +327 -0
  1737. package/.jumpstart/skills/jira-delivery-builder/README.md +28 -0
  1738. package/.jumpstart/skills/jira-delivery-builder/SKILL.md +184 -0
  1739. package/.jumpstart/skills/jira-delivery-builder/evals/README.md +27 -0
  1740. package/.jumpstart/skills/jira-delivery-builder/evals/eval-cases.md +65 -0
  1741. package/.jumpstart/skills/jira-delivery-builder/references/acceptance-criteria-guide.md +32 -0
  1742. package/.jumpstart/skills/jira-delivery-builder/references/ai-ticket-patterns.md +30 -0
  1743. package/.jumpstart/skills/jira-delivery-builder/references/backlog-decomposition.md +30 -0
  1744. package/.jumpstart/skills/jira-delivery-builder/references/csv-import-guide.md +36 -0
  1745. package/.jumpstart/skills/jira-delivery-builder/references/definition-of-done.md +20 -0
  1746. package/.jumpstart/skills/jira-delivery-builder/references/definition-of-ready.md +12 -0
  1747. package/.jumpstart/skills/jira-delivery-builder/references/dependency-mapping.md +27 -0
  1748. package/.jumpstart/skills/jira-delivery-builder/references/jira-issue-types.md +29 -0
  1749. package/.jumpstart/skills/jira-delivery-builder/references/jira-reporting.md +28 -0
  1750. package/.jumpstart/skills/jira-delivery-builder/references/jql-cheatsheet.md +25 -0
  1751. package/.jumpstart/skills/jira-delivery-builder/references/source-traceability.md +27 -0
  1752. package/.jumpstart/skills/jira-delivery-builder/references/story-writing-standards.md +30 -0
  1753. package/.jumpstart/skills/jira-delivery-builder/scripts/convert_markdown_to_jira_csv.py +94 -0
  1754. package/.jumpstart/skills/jira-delivery-builder/scripts/create_dependency_register.py +51 -0
  1755. package/.jumpstart/skills/jira-delivery-builder/scripts/fixtures/README.md +39 -0
  1756. package/.jumpstart/skills/jira-delivery-builder/scripts/fixtures/backlog.csv +5 -0
  1757. package/.jumpstart/skills/jira-delivery-builder/scripts/fixtures/issues.json +26 -0
  1758. package/.jumpstart/skills/jira-delivery-builder/scripts/fixtures/issues.md +23 -0
  1759. package/.jumpstart/skills/jira-delivery-builder/scripts/generate_jira_csv.py +75 -0
  1760. package/.jumpstart/skills/jira-delivery-builder/scripts/generate_jql_filters.py +43 -0
  1761. package/.jumpstart/skills/jira-delivery-builder/scripts/split_large_stories.py +66 -0
  1762. package/.jumpstart/skills/jira-delivery-builder/scripts/validate_jira_backlog.py +66 -0
  1763. package/.jumpstart/skills/jira-delivery-builder/templates/ai-agent-story-template.md +32 -0
  1764. package/.jumpstart/skills/jira-delivery-builder/templates/ai-rag-story-template.md +32 -0
  1765. package/.jumpstart/skills/jira-delivery-builder/templates/backlog-quality-report.md +35 -0
  1766. package/.jumpstart/skills/jira-delivery-builder/templates/bug-template.md +33 -0
  1767. package/.jumpstart/skills/jira-delivery-builder/templates/dependency-register.md +5 -0
  1768. package/.jumpstart/skills/jira-delivery-builder/templates/epic-template.md +31 -0
  1769. package/.jumpstart/skills/jira-delivery-builder/templates/jira-csv-import-template.csv +5 -0
  1770. package/.jumpstart/skills/jira-delivery-builder/templates/mvp-backlog-template.md +39 -0
  1771. package/.jumpstart/skills/jira-delivery-builder/templates/review-queue-story-template.md +22 -0
  1772. package/.jumpstart/skills/jira-delivery-builder/templates/spike-template.md +29 -0
  1773. package/.jumpstart/skills/jira-delivery-builder/templates/sprint-readiness-report.md +26 -0
  1774. package/.jumpstart/skills/jira-delivery-builder/templates/technical-task-template.md +34 -0
  1775. package/.jumpstart/skills/jira-delivery-builder/templates/user-story-template.md +33 -0
  1776. package/.jumpstart/skills/jira-delivery-operations/README.md +10 -0
  1777. package/.jumpstart/skills/jira-delivery-operations/SKILL.md +70 -0
  1778. package/.jumpstart/skills/jira-delivery-operations/evals/README.md +3 -0
  1779. package/.jumpstart/skills/jira-delivery-operations/evals/eval-cases.md +13 -0
  1780. package/.jumpstart/skills/jira-delivery-operations/references/operating-playbook.md +21 -0
  1781. package/.jumpstart/skills/jira-delivery-operations/references/routing-matrix.md +9 -0
  1782. package/.jumpstart/skills/jira-delivery-operations/templates/phase-checklist.md +25 -0
  1783. package/.jumpstart/skills/jira-delivery-operations/templates/weekly-operations-cadence.md +7 -0
  1784. package/.jumpstart/skills/jira-innovation-unit-normalizer/README.md +10 -0
  1785. package/.jumpstart/skills/jira-innovation-unit-normalizer/SKILL.md +64 -0
  1786. package/.jumpstart/skills/jira-innovation-unit-normalizer/evals/README.md +3 -0
  1787. package/.jumpstart/skills/jira-innovation-unit-normalizer/evals/eval-cases.md +16 -0
  1788. package/.jumpstart/skills/jira-innovation-unit-normalizer/references/complexity-mapping.md +21 -0
  1789. package/.jumpstart/skills/jira-innovation-unit-normalizer/references/normalization-rules.md +13 -0
  1790. package/.jumpstart/skills/jira-innovation-unit-normalizer/scripts/fixtures/README.md +7 -0
  1791. package/.jumpstart/skills/jira-innovation-unit-normalizer/scripts/fixtures/sample-jira-backlog.csv +5 -0
  1792. package/.jumpstart/skills/jira-innovation-unit-normalizer/scripts/normalize_jira_to_iu.py +48 -0
  1793. package/.jumpstart/skills/jira-innovation-unit-normalizer/templates/jira-iu-backlog.csv +2 -0
  1794. package/.jumpstart/skills/jira-innovation-unit-normalizer/templates/jira-iu-estimate.md +17 -0
  1795. package/.jumpstart/skills/jira-pod-status-reporter/README.md +18 -0
  1796. package/.jumpstart/skills/jira-pod-status-reporter/SKILL.md +82 -0
  1797. package/.jumpstart/skills/jira-pod-status-reporter/evals/README.md +3 -0
  1798. package/.jumpstart/skills/jira-pod-status-reporter/evals/eval-cases.md +21 -0
  1799. package/.jumpstart/skills/jira-pod-status-reporter/references/pod-metrics.md +17 -0
  1800. package/.jumpstart/skills/jira-pod-status-reporter/references/report-structure.md +24 -0
  1801. package/.jumpstart/skills/jira-pod-status-reporter/references/risk-and-dependency-signals.md +13 -0
  1802. package/.jumpstart/skills/jira-pod-status-reporter/scripts/fixtures/README.md +7 -0
  1803. package/.jumpstart/skills/jira-pod-status-reporter/scripts/fixtures/sample-jira-status.csv +5 -0
  1804. package/.jumpstart/skills/jira-pod-status-reporter/scripts/summarize_jira_backlog.py +39 -0
  1805. package/.jumpstart/skills/jira-pod-status-reporter/templates/sprint-readiness-summary.md +24 -0
  1806. package/.jumpstart/skills/jira-pod-status-reporter/templates/weekly-status-report.md +29 -0
  1807. package/.jumpstart/skills/langfuse/SKILL.md +128 -0
  1808. package/.jumpstart/skills/langfuse/references/cli.md +51 -0
  1809. package/.jumpstart/skills/langfuse/references/instrumentation.md +140 -0
  1810. package/.jumpstart/skills/langfuse/references/prompt-migration.md +234 -0
  1811. package/.jumpstart/skills/langfuse/references/sdk-upgrade.md +181 -0
  1812. package/.jumpstart/skills/langfuse/references/skill-feedback.md +52 -0
  1813. package/.jumpstart/skills/langfuse/references/user-feedback.md +88 -0
  1814. package/.jumpstart/skills/linkerd-patterns/SKILL.md +311 -0
  1815. package/.jumpstart/skills/mcp-server-designer/SKILL.md +91 -0
  1816. package/.jumpstart/skills/mcp-server-designer/evals/evals.json +29 -0
  1817. package/.jumpstart/skills/mcp-server-designer/examples/example-finance-domain-mcp.md +63 -0
  1818. package/.jumpstart/skills/mcp-server-designer/references/mcp-design-guide.md +95 -0
  1819. package/.jumpstart/skills/mcp-server-designer/templates/mcp-server-design-template.md +115 -0
  1820. package/.jumpstart/skills/memory-architecture-designer/SKILL.md +88 -0
  1821. package/.jumpstart/skills/memory-architecture-designer/evals/evals.json +32 -0
  1822. package/.jumpstart/skills/memory-architecture-designer/examples/example-multi-tenant-copilot-memory.md +46 -0
  1823. package/.jumpstart/skills/memory-architecture-designer/references/memory-pattern-library.md +60 -0
  1824. package/.jumpstart/skills/memory-architecture-designer/templates/memory-architecture-spec.md +55 -0
  1825. package/.jumpstart/skills/microservices-patterns/SKILL.md +595 -0
  1826. package/.jumpstart/skills/migration-strategy-legacy-to-ai/SKILL.md +78 -0
  1827. package/.jumpstart/skills/migration-strategy-legacy-to-ai/evals/evals.json +31 -0
  1828. package/.jumpstart/skills/migration-strategy-legacy-to-ai/examples/example-ticket-routing-migration.md +51 -0
  1829. package/.jumpstart/skills/migration-strategy-legacy-to-ai/references/migration-patterns-catalog.md +77 -0
  1830. package/.jumpstart/skills/migration-strategy-legacy-to-ai/references/migration-patterns.md +54 -0
  1831. package/.jumpstart/skills/migration-strategy-legacy-to-ai/templates/migration-plan.md +48 -0
  1832. package/.jumpstart/skills/migration-strategy-legacy-to-ai/templates/migration-strategy-template.md +94 -0
  1833. package/.jumpstart/skills/mtls-configuration/SKILL.md +349 -0
  1834. package/.jumpstart/skills/multi-cloud-architecture/SKILL.md +181 -0
  1835. package/.jumpstart/skills/non-functional-requirements-elicitor/SKILL.md +79 -0
  1836. package/.jumpstart/skills/non-functional-requirements-elicitor/evals/evals.json +31 -0
  1837. package/.jumpstart/skills/non-functional-requirements-elicitor/references/nfr-catalog.md +97 -0
  1838. package/.jumpstart/skills/non-functional-requirements-elicitor/templates/nfr-register-template.md +51 -0
  1839. package/.jumpstart/skills/observability-design-for-ai/SKILL.md +93 -0
  1840. package/.jumpstart/skills/observability-design-for-ai/evals/evals.json +32 -0
  1841. package/.jumpstart/skills/observability-design-for-ai/examples/example-grounded-assistant-observability.md +53 -0
  1842. package/.jumpstart/skills/observability-design-for-ai/references/telemetry-catalog.md +62 -0
  1843. package/.jumpstart/skills/observability-design-for-ai/templates/observability-spec.md +50 -0
  1844. package/.jumpstart/skills/observability-design-for-ai/templates/trace-schema.md +40 -0
  1845. package/.jumpstart/skills/persona-empathy-map/SKILL.md +93 -0
  1846. package/.jumpstart/skills/persona-empathy-map/evals/evals.json +17 -0
  1847. package/.jumpstart/skills/persona-empathy-map/references/empathy-map-pattern.md +48 -0
  1848. package/.jumpstart/skills/persona-journey-map-companion/README.md +11 -0
  1849. package/.jumpstart/skills/persona-journey-map-companion/SKILL.md +55 -0
  1850. package/.jumpstart/skills/persona-journey-map-companion/evals/evals.json +17 -0
  1851. package/.jumpstart/skills/persona-journey-map-companion/examples/operations-journey-example.md +29 -0
  1852. package/.jumpstart/skills/persona-journey-map-companion/templates/journey-map-template.md +29 -0
  1853. package/.jumpstart/skills/php-developer/README.md +46 -0
  1854. package/.jumpstart/skills/php-developer/SKILL.md +192 -0
  1855. package/.jumpstart/skills/php-developer/evals/eval-rubric.md +27 -0
  1856. package/.jumpstart/skills/php-developer/evals/evals.json +82 -0
  1857. package/.jumpstart/skills/php-developer/references/ai-integration-patterns.md +38 -0
  1858. package/.jumpstart/skills/php-developer/references/api-development.md +38 -0
  1859. package/.jumpstart/skills/php-developer/references/ci-cd.md +29 -0
  1860. package/.jumpstart/skills/php-developer/references/composer-dependency-management.md +49 -0
  1861. package/.jumpstart/skills/php-developer/references/docker-local-dev.md +36 -0
  1862. package/.jumpstart/skills/php-developer/references/laravel-patterns.md +46 -0
  1863. package/.jumpstart/skills/php-developer/references/legacy-modernization.md +47 -0
  1864. package/.jumpstart/skills/php-developer/references/php-modern-standards.md +43 -0
  1865. package/.jumpstart/skills/php-developer/references/production-readiness.md +37 -0
  1866. package/.jumpstart/skills/php-developer/references/security-checklist.md +48 -0
  1867. package/.jumpstart/skills/php-developer/references/static-analysis.md +41 -0
  1868. package/.jumpstart/skills/php-developer/references/symfony-patterns.md +42 -0
  1869. package/.jumpstart/skills/php-developer/references/testing-guide.md +41 -0
  1870. package/.jumpstart/skills/php-developer/scripts/composer_audit_summary.py +50 -0
  1871. package/.jumpstart/skills/php-developer/scripts/detect_php_framework.py +35 -0
  1872. package/.jumpstart/skills/php-developer/scripts/generate_refactor_backlog.py +75 -0
  1873. package/.jumpstart/skills/php-developer/scripts/inspect_php_project.py +102 -0
  1874. package/.jumpstart/skills/php-developer/scripts/legacy_risk_scan.py +56 -0
  1875. package/.jumpstart/skills/php-developer/templates/Dockerfile.php-fpm +22 -0
  1876. package/.jumpstart/skills/php-developer/templates/composer.legacy-modernization.json +26 -0
  1877. package/.jumpstart/skills/php-developer/templates/composer.modern.json +27 -0
  1878. package/.jumpstart/skills/php-developer/templates/docker-compose.laravel.yml +40 -0
  1879. package/.jumpstart/skills/php-developer/templates/docker-compose.symfony.yml +34 -0
  1880. package/.jumpstart/skills/php-developer/templates/github-actions-php.yml +26 -0
  1881. package/.jumpstart/skills/php-developer/templates/laravel-controller.php +30 -0
  1882. package/.jumpstart/skills/php-developer/templates/laravel-form-request.php +26 -0
  1883. package/.jumpstart/skills/php-developer/templates/laravel-service.php +26 -0
  1884. package/.jumpstart/skills/php-developer/templates/legacy-characterization-test.php +18 -0
  1885. package/.jumpstart/skills/php-developer/templates/pdo-repository.php +29 -0
  1886. package/.jumpstart/skills/php-developer/templates/pest.php +6 -0
  1887. package/.jumpstart/skills/php-developer/templates/phpstan.neon +11 -0
  1888. package/.jumpstart/skills/php-developer/templates/phpunit.xml +17 -0
  1889. package/.jumpstart/skills/php-developer/templates/symfony-controller.php +27 -0
  1890. package/.jumpstart/skills/php-developer/templates/symfony-service.php +35 -0
  1891. package/.jumpstart/skills/pilot-to-production-gate/SKILL.md +87 -0
  1892. package/.jumpstart/skills/pilot-to-production-gate/evals/evals.json +30 -0
  1893. package/.jumpstart/skills/pilot-to-production-gate/references/gate-criteria-rubric.md +116 -0
  1894. package/.jumpstart/skills/pilot-to-production-gate/templates/pilot-to-production-gate-template.md +63 -0
  1895. package/.jumpstart/skills/postgresql-pgvector/README.md +135 -0
  1896. package/.jumpstart/skills/postgresql-pgvector/SKILL.md +298 -0
  1897. package/.jumpstart/skills/postgresql-pgvector/evals/evals.json +106 -0
  1898. package/.jumpstart/skills/postgresql-pgvector/references/fastapi-sqlmodel-patterns.md +255 -0
  1899. package/.jumpstart/skills/postgresql-pgvector/references/hybrid-search.md +195 -0
  1900. package/.jumpstart/skills/postgresql-pgvector/references/indexing-guide.md +204 -0
  1901. package/.jumpstart/skills/postgresql-pgvector/references/multi-tenant-security.md +213 -0
  1902. package/.jumpstart/skills/postgresql-pgvector/references/performance-tuning.md +249 -0
  1903. package/.jumpstart/skills/postgresql-pgvector/references/production-checklist.md +125 -0
  1904. package/.jumpstart/skills/postgresql-pgvector/references/rag-evaluation.md +180 -0
  1905. package/.jumpstart/skills/postgresql-pgvector/references/retrieval-patterns.md +235 -0
  1906. package/.jumpstart/skills/postgresql-pgvector/references/schema-patterns.md +217 -0
  1907. package/.jumpstart/skills/postgresql-pgvector/scripts/benchmark_retrieval.py +149 -0
  1908. package/.jumpstart/skills/postgresql-pgvector/scripts/check_embedding_dimensions.py +140 -0
  1909. package/.jumpstart/skills/postgresql-pgvector/scripts/explain_query_plan.py +138 -0
  1910. package/.jumpstart/skills/postgresql-pgvector/scripts/seed_sample_chunks.py +162 -0
  1911. package/.jumpstart/skills/postgresql-pgvector/scripts/validate_pgvector.py +69 -0
  1912. package/.jumpstart/skills/postgresql-pgvector/templates/alembic_pgvector_migration.py +170 -0
  1913. package/.jumpstart/skills/postgresql-pgvector/templates/docker-compose.pgvector.yml +20 -0
  1914. package/.jumpstart/skills/postgresql-pgvector/templates/eval_schema.sql +105 -0
  1915. package/.jumpstart/skills/postgresql-pgvector/templates/fastapi_routes.py +223 -0
  1916. package/.jumpstart/skills/postgresql-pgvector/templates/indexes.hnsw.sql +66 -0
  1917. package/.jumpstart/skills/postgresql-pgvector/templates/indexes.hybrid-search.sql +71 -0
  1918. package/.jumpstart/skills/postgresql-pgvector/templates/retrieval_service.py +258 -0
  1919. package/.jumpstart/skills/postgresql-pgvector/templates/schema.basic-rag.sql +145 -0
  1920. package/.jumpstart/skills/postgresql-pgvector/templates/schema.multi-tenant-rag.sql +186 -0
  1921. package/.jumpstart/skills/postgresql-pgvector/templates/schema.rfp-retrieval.sql +139 -0
  1922. package/.jumpstart/skills/postgresql-pgvector/templates/sqlmodel_models.py +207 -0
  1923. package/.jumpstart/skills/pre-deployment-gotcha-review/README.md +84 -0
  1924. package/.jumpstart/skills/pre-deployment-gotcha-review/SKILL.md +233 -0
  1925. package/.jumpstart/skills/pre-deployment-gotcha-review/evals/evals.json +59 -0
  1926. package/.jumpstart/skills/pre-deployment-gotcha-review/references/ai-agent-risk.md +104 -0
  1927. package/.jumpstart/skills/pre-deployment-gotcha-review/references/api-gateway.md +81 -0
  1928. package/.jumpstart/skills/pre-deployment-gotcha-review/references/authorization-access-control.md +77 -0
  1929. package/.jumpstart/skills/pre-deployment-gotcha-review/references/data-readiness.md +103 -0
  1930. package/.jumpstart/skills/pre-deployment-gotcha-review/references/delivery-commercial-risk.md +119 -0
  1931. package/.jumpstart/skills/pre-deployment-gotcha-review/references/gotcha-taxonomy.md +292 -0
  1932. package/.jumpstart/skills/pre-deployment-gotcha-review/references/identity-auth-mfa.md +94 -0
  1933. package/.jumpstart/skills/pre-deployment-gotcha-review/references/legacy-onprem-access.md +92 -0
  1934. package/.jumpstart/skills/pre-deployment-gotcha-review/references/mcp-extension-guide.md +102 -0
  1935. package/.jumpstart/skills/pre-deployment-gotcha-review/references/operational-readiness.md +102 -0
  1936. package/.jumpstart/skills/pre-deployment-gotcha-review/references/rag-document-identity-acl.md +117 -0
  1937. package/.jumpstart/skills/pre-deployment-gotcha-review/references/review-methodology.md +159 -0
  1938. package/.jumpstart/skills/pre-deployment-gotcha-review/references/security-compliance.md +108 -0
  1939. package/.jumpstart/skills/pre-deployment-gotcha-review/scripts/build_citation_matrix.py +153 -0
  1940. package/.jumpstart/skills/pre-deployment-gotcha-review/scripts/classify_gotchas.py +201 -0
  1941. package/.jumpstart/skills/pre-deployment-gotcha-review/scripts/extract_document_claims.py +156 -0
  1942. package/.jumpstart/skills/pre-deployment-gotcha-review/scripts/generate_question_backlog.py +213 -0
  1943. package/.jumpstart/skills/pre-deployment-gotcha-review/scripts/validate_report_completeness.py +209 -0
  1944. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/assumption-register.md +38 -0
  1945. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/clarifying-questions.md +61 -0
  1946. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/gotcha-review-report.md +162 -0
  1947. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/mitigation-backlog.md +47 -0
  1948. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/readiness-rating.md +79 -0
  1949. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/source-citation-matrix.md +39 -0
  1950. package/.jumpstart/skills/pre-deployment-gotcha-review/templates/unknown-unknowns-register.md +29 -0
  1951. package/.jumpstart/skills/privacy-by-design-for-ai/SKILL.md +84 -0
  1952. package/.jumpstart/skills/privacy-by-design-for-ai/evals/evals.json +32 -0
  1953. package/.jumpstart/skills/privacy-by-design-for-ai/examples/example-eu-employee-assistant.md +53 -0
  1954. package/.jumpstart/skills/privacy-by-design-for-ai/references/privacy-by-design-guide.md +95 -0
  1955. package/.jumpstart/skills/privacy-by-design-for-ai/references/privacy-control-catalog.md +53 -0
  1956. package/.jumpstart/skills/privacy-by-design-for-ai/templates/dpia-template.md +66 -0
  1957. package/.jumpstart/skills/privacy-by-design-for-ai/templates/privacy-by-design-template.md +89 -0
  1958. package/.jumpstart/skills/projection-patterns/SKILL.md +490 -0
  1959. package/.jumpstart/skills/python-developer/SKILL.md +246 -0
  1960. package/.jumpstart/skills/python-developer/evals/evals.json +162 -0
  1961. package/.jumpstart/skills/python-developer/references/ai-integration-patterns.md +261 -0
  1962. package/.jumpstart/skills/python-developer/references/background-jobs.md +199 -0
  1963. package/.jumpstart/skills/python-developer/references/ci-cd.md +248 -0
  1964. package/.jumpstart/skills/python-developer/references/cli-tools.md +185 -0
  1965. package/.jumpstart/skills/python-developer/references/database-patterns.md +278 -0
  1966. package/.jumpstart/skills/python-developer/references/docker-local-dev.md +241 -0
  1967. package/.jumpstart/skills/python-developer/references/fastapi-patterns.md +311 -0
  1968. package/.jumpstart/skills/python-developer/references/modern-python-standards.md +187 -0
  1969. package/.jumpstart/skills/python-developer/references/observability.md +214 -0
  1970. package/.jumpstart/skills/python-developer/references/production-readiness.md +103 -0
  1971. package/.jumpstart/skills/python-developer/references/pydantic-settings.md +227 -0
  1972. package/.jumpstart/skills/python-developer/references/rag-pipeline-patterns.md +307 -0
  1973. package/.jumpstart/skills/python-developer/references/refactoring-guide.md +206 -0
  1974. package/.jumpstart/skills/python-developer/references/security-checklist.md +195 -0
  1975. package/.jumpstart/skills/python-developer/references/testing-guide.md +272 -0
  1976. package/.jumpstart/skills/python-developer/scripts/check_security_basics.py +159 -0
  1977. package/.jumpstart/skills/python-developer/scripts/inspect_python_project.py +181 -0
  1978. package/.jumpstart/skills/python-developer/templates/Dockerfile +44 -0
  1979. package/.jumpstart/skills/python-developer/templates/Makefile +62 -0
  1980. package/.jumpstart/skills/python-developer/templates/docker-compose.fastapi.yml +70 -0
  1981. package/.jumpstart/skills/python-developer/templates/github-actions-python.yml +134 -0
  1982. package/.jumpstart/skills/python-developer/templates/health_routes.py +27 -0
  1983. package/.jumpstart/skills/python-developer/templates/llm_client_protocol.py +114 -0
  1984. package/.jumpstart/skills/python-developer/templates/main.fastapi.py +59 -0
  1985. package/.jumpstart/skills/python-developer/templates/pyproject.cli.toml +40 -0
  1986. package/.jumpstart/skills/python-developer/templates/pyproject.fastapi.toml +79 -0
  1987. package/.jumpstart/skills/python-developer/templates/pyproject.package.toml +40 -0
  1988. package/.jumpstart/skills/python-developer/templates/pytest_api_test.py +86 -0
  1989. package/.jumpstart/skills/python-developer/templates/pytest_service_test.py +98 -0
  1990. package/.jumpstart/skills/python-developer/templates/repository.py +43 -0
  1991. package/.jumpstart/skills/python-developer/templates/service.py +48 -0
  1992. package/.jumpstart/skills/python-developer/templates/settings.py +71 -0
  1993. package/.jumpstart/skills/python-developer/templates/sqlmodel_model.py +40 -0
  1994. package/.jumpstart/skills/python-developer/templates/typer_cli.py +93 -0
  1995. package/.jumpstart/skills/rag-architecture-designer/SKILL.md +104 -0
  1996. package/.jumpstart/skills/rag-architecture-designer/evals/evals.json +32 -0
  1997. package/.jumpstart/skills/rag-architecture-designer/examples/example-policy-copilot.md +75 -0
  1998. package/.jumpstart/skills/rag-architecture-designer/references/pattern-catalog.md +82 -0
  1999. package/.jumpstart/skills/rag-architecture-designer/templates/rag-architecture-spec.md +93 -0
  2000. package/.jumpstart/skills/rag-architecture-designer/templates/rag-eval-plan.md +38 -0
  2001. package/.jumpstart/skills/react-design-md-auditor/README.md +39 -0
  2002. package/.jumpstart/skills/react-design-md-auditor/SKILL.md +96 -0
  2003. package/.jumpstart/skills/react-design-md-auditor/evals/eval-cases.md +61 -0
  2004. package/.jumpstart/skills/react-design-md-auditor/references/audit-rubric.md +46 -0
  2005. package/.jumpstart/skills/react-design-md-auditor/references/react-specific-checks.md +48 -0
  2006. package/.jumpstart/skills/react-design-md-auditor/references/severity-model.md +24 -0
  2007. package/.jumpstart/skills/react-design-md-auditor/templates/compliance-report-template.md +59 -0
  2008. package/.jumpstart/skills/react-developer/README.md +63 -0
  2009. package/.jumpstart/skills/react-developer/SKILL.md +226 -0
  2010. package/.jumpstart/skills/react-developer/evals/eval-rubric.md +62 -0
  2011. package/.jumpstart/skills/react-developer/references/accessibility.md +20 -0
  2012. package/.jumpstart/skills/react-developer/references/ai-ui-patterns.md +36 -0
  2013. package/.jumpstart/skills/react-developer/references/api-integration.md +28 -0
  2014. package/.jumpstart/skills/react-developer/references/ci-cd.md +24 -0
  2015. package/.jumpstart/skills/react-developer/references/component-architecture.md +25 -0
  2016. package/.jumpstart/skills/react-developer/references/deployment.md +17 -0
  2017. package/.jumpstart/skills/react-developer/references/forms-validation.md +25 -0
  2018. package/.jumpstart/skills/react-developer/references/nextjs-patterns.md +23 -0
  2019. package/.jumpstart/skills/react-developer/references/performance.md +20 -0
  2020. package/.jumpstart/skills/react-developer/references/project-structure.md +68 -0
  2021. package/.jumpstart/skills/react-developer/references/react-modern-standards.md +33 -0
  2022. package/.jumpstart/skills/react-developer/references/react-router-patterns.md +24 -0
  2023. package/.jumpstart/skills/react-developer/references/review-queue-patterns.md +37 -0
  2024. package/.jumpstart/skills/react-developer/references/security.md +18 -0
  2025. package/.jumpstart/skills/react-developer/references/state-management.md +44 -0
  2026. package/.jumpstart/skills/react-developer/references/styling-design-system.md +25 -0
  2027. package/.jumpstart/skills/react-developer/references/tanstack-query.md +27 -0
  2028. package/.jumpstart/skills/react-developer/references/testing.md +19 -0
  2029. package/.jumpstart/skills/react-developer/scripts/check_accessibility_patterns.py +35 -0
  2030. package/.jumpstart/skills/react-developer/scripts/detect_react_stack.py +50 -0
  2031. package/.jumpstart/skills/react-developer/scripts/generate_component_map.py +33 -0
  2032. package/.jumpstart/skills/react-developer/scripts/generate_frontend_backlog.py +53 -0
  2033. package/.jumpstart/skills/react-developer/scripts/inspect_react_project.py +88 -0
  2034. package/.jumpstart/skills/react-developer/templates/.env.example +2 -0
  2035. package/.jumpstart/skills/react-developer/templates/.env.local.example +2 -0
  2036. package/.jumpstart/skills/react-developer/templates/Dockerfile +12 -0
  2037. package/.jumpstart/skills/react-developer/templates/agent-trace-viewer.tsx +27 -0
  2038. package/.jumpstart/skills/react-developer/templates/api-client.ts +24 -0
  2039. package/.jumpstart/skills/react-developer/templates/app-shell.css +9 -0
  2040. package/.jumpstart/skills/react-developer/templates/app-shell.tsx +21 -0
  2041. package/.jumpstart/skills/react-developer/templates/citation-panel.tsx +29 -0
  2042. package/.jumpstart/skills/react-developer/templates/document-upload-page.tsx +11 -0
  2043. package/.jumpstart/skills/react-developer/templates/evaluation-dashboard.tsx +27 -0
  2044. package/.jumpstart/skills/react-developer/templates/github-actions-react.yml +34 -0
  2045. package/.jumpstart/skills/react-developer/templates/main.tsx +13 -0
  2046. package/.jumpstart/skills/react-developer/templates/nginx.conf +11 -0
  2047. package/.jumpstart/skills/react-developer/templates/package.nextjs-ts.json +32 -0
  2048. package/.jumpstart/skills/react-developer/templates/package.react-vite-ts.json +39 -0
  2049. package/.jumpstart/skills/react-developer/templates/playwright.config.ts +15 -0
  2050. package/.jumpstart/skills/react-developer/templates/rag-chat-view.tsx +34 -0
  2051. package/.jumpstart/skills/react-developer/templates/react-hook-form-zod.tsx +51 -0
  2052. package/.jumpstart/skills/react-developer/templates/retrieval-result-card.tsx +28 -0
  2053. package/.jumpstart/skills/react-developer/templates/review-queue-page.tsx +39 -0
  2054. package/.jumpstart/skills/react-developer/templates/router.tsx +20 -0
  2055. package/.jumpstart/skills/react-developer/templates/tanstack-query-provider.tsx +8 -0
  2056. package/.jumpstart/skills/react-developer/templates/tsconfig.json +16 -0
  2057. package/.jumpstart/skills/react-developer/templates/vite.config.ts +12 -0
  2058. package/.jumpstart/skills/react-developer/templates/vitest.config.ts +13 -0
  2059. package/.jumpstart/skills/red-team-playbook-builder/SKILL.md +79 -0
  2060. package/.jumpstart/skills/red-team-playbook-builder/evals/evals.json +32 -0
  2061. package/.jumpstart/skills/red-team-playbook-builder/examples/example-sales-ops-redteam.md +34 -0
  2062. package/.jumpstart/skills/red-team-playbook-builder/references/adversarial-pattern-library.md +63 -0
  2063. package/.jumpstart/skills/red-team-playbook-builder/references/red-team-attack-catalog.md +98 -0
  2064. package/.jumpstart/skills/red-team-playbook-builder/templates/red-team-playbook-template.md +64 -0
  2065. package/.jumpstart/skills/red-team-playbook-builder/templates/red-team-playbook.md +45 -0
  2066. package/.jumpstart/skills/reference-architecture-snapshotter/SKILL.md +53 -0
  2067. package/.jumpstart/skills/reference-architecture-snapshotter/evals/evals.json +17 -0
  2068. package/.jumpstart/skills/reference-architecture-snapshotter/examples/reference-architecture-example.md +17 -0
  2069. package/.jumpstart/skills/reference-architecture-snapshotter/references/redaction-and-variant-rules.md +26 -0
  2070. package/.jumpstart/skills/reference-architecture-snapshotter/scripts/snapshot_qa_check.py +30 -0
  2071. package/.jumpstart/skills/reference-architecture-snapshotter/templates/reference-architecture-template.md +19 -0
  2072. package/.jumpstart/skills/reference-story-matcher/SKILL.md +145 -0
  2073. package/.jumpstart/skills/reference-story-matcher/evals/evals.json +41 -0
  2074. package/.jumpstart/skills/reference-story-matcher/examples/example-reference-story-one-pager.md +61 -0
  2075. package/.jumpstart/skills/reference-story-matcher/examples/prospect-profile-example.json +21 -0
  2076. package/.jumpstart/skills/reference-story-matcher/references/case-study-catalog.json +281 -0
  2077. package/.jumpstart/skills/reference-story-matcher/references/matching-workflow.md +82 -0
  2078. package/.jumpstart/skills/reference-story-matcher/scripts/match_case_study.py +182 -0
  2079. package/.jumpstart/skills/reference-story-matcher/templates/reference-story-one-pager-template.md +59 -0
  2080. package/.jumpstart/skills/roi-calculator-builder/SKILL.md +177 -0
  2081. package/.jumpstart/skills/roi-calculator-builder/evals/evals.json +50 -0
  2082. package/.jumpstart/skills/roi-calculator-builder/examples/example-knowledge-assistant-roi.md +142 -0
  2083. package/.jumpstart/skills/roi-calculator-builder/references/ai-benefit-categories.md +101 -0
  2084. package/.jumpstart/skills/roi-calculator-builder/references/ai-cost-categories.md +112 -0
  2085. package/.jumpstart/skills/roi-calculator-builder/references/risk-adjusted-roi.md +76 -0
  2086. package/.jumpstart/skills/roi-calculator-builder/references/roi-methodology.md +93 -0
  2087. package/.jumpstart/skills/roi-calculator-builder/references/sensitivity-analysis-guide.md +72 -0
  2088. package/.jumpstart/skills/roi-calculator-builder/templates/roi-model-template.md +132 -0
  2089. package/.jumpstart/skills/roi-calculator-builder/templates/roi-worksheet-template.csv +31 -0
  2090. package/.jumpstart/skills/saga-orchestration/SKILL.md +484 -0
  2091. package/.jumpstart/skills/scope-creep-detector/SKILL.md +75 -0
  2092. package/.jumpstart/skills/scope-creep-detector/evals/evals.json +30 -0
  2093. package/.jumpstart/skills/scope-creep-detector/references/scope-creep-patterns.md +85 -0
  2094. package/.jumpstart/skills/scope-creep-detector/templates/scope-audit-template.md +43 -0
  2095. package/.jumpstart/skills/scripts/README.md +93 -0
  2096. package/.jumpstart/skills/scripts/assertion_core.py +55 -0
  2097. package/.jumpstart/skills/service-mesh-observability/SKILL.md +385 -0
  2098. package/.jumpstart/skills/skill-creator/SKILL.md +28 -7
  2099. package/.jumpstart/skills/skill-creator/examples/copilot-sdk-wrapper/README.md +35 -0
  2100. package/.jumpstart/skills/skill-creator/examples/copilot-sdk-wrapper/copilot_sdk_wrapper.mjs +93 -0
  2101. package/.jumpstart/skills/skill-creator/examples/copilot-sdk-wrapper/package.json +8 -0
  2102. package/.jumpstart/skills/skill-creator/scripts/improve_description.py +41 -32
  2103. package/.jumpstart/skills/skill-creator/scripts/prompt_backend.py +145 -0
  2104. package/.jumpstart/skills/skill-creator/scripts/run_eval.py +169 -115
  2105. package/.jumpstart/skills/skill-creator/scripts/run_loop.py +11 -0
  2106. package/.jumpstart/skills/stitch-screen-to-design-md/README.md +17 -0
  2107. package/.jumpstart/skills/stitch-screen-to-design-md/SKILL.md +50 -0
  2108. package/.jumpstart/skills/stitch-screen-to-design-md/evals/evals.json +23 -0
  2109. package/.jumpstart/skills/stitch-screen-to-design-md/references/stitch-mcp-flow.md +38 -0
  2110. package/.jumpstart/skills/stitch-screen-to-design-md/references/synthesis-guide.md +34 -0
  2111. package/.jumpstart/skills/stitch-screen-to-design-md/templates/design-from-stitch-template.md +49 -0
  2112. package/.jumpstart/skills/success-metrics-designer/SKILL.md +84 -0
  2113. package/.jumpstart/skills/success-metrics-designer/evals/evals.json +30 -0
  2114. package/.jumpstart/skills/success-metrics-designer/references/kpi-pattern-library.md +79 -0
  2115. package/.jumpstart/skills/success-metrics-designer/templates/success-metrics-template.md +65 -0
  2116. package/.jumpstart/skills/task-clarifier/SKILL.md +85 -0
  2117. package/.jumpstart/skills/task-clarifier/evals/evals.json +33 -0
  2118. package/.jumpstart/skills/task-clarifier/evals/files/conflicting-next-step-notes.md +24 -0
  2119. package/.jumpstart/skills/task-clarifier/evals/files/vague-seller-ask.md +18 -0
  2120. package/.jumpstart/skills/task-clarifier/references/clarification-pattern.md +67 -0
  2121. package/.jumpstart/skills/temporal-python-testing/SKILL.md +158 -0
  2122. package/.jumpstart/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  2123. package/.jumpstart/skills/temporal-python-testing/resources/local-setup.md +553 -0
  2124. package/.jumpstart/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  2125. package/.jumpstart/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  2126. package/.jumpstart/skills/terraform-module-library/SKILL.md +252 -0
  2127. package/.jumpstart/skills/terraform-module-library/references/aws-modules.md +70 -0
  2128. package/.jumpstart/skills/tool-differentiation/SKILL.md +81 -0
  2129. package/.jumpstart/skills/tool-differentiation/evals/evals.json +17 -0
  2130. package/.jumpstart/skills/tool-differentiation/references/comparison-matrix.md +50 -0
  2131. package/.jumpstart/skills/use-case-canvas-builder/SKILL.md +95 -0
  2132. package/.jumpstart/skills/use-case-canvas-builder/references/canvas-pattern.md +106 -0
  2133. package/.jumpstart/skills/use-case-dependency-mapper/SKILL.md +153 -0
  2134. package/.jumpstart/skills/use-case-dependency-mapper/evals/evals.json +23 -0
  2135. package/.jumpstart/skills/use-case-dependency-mapper/references/dependency-categories.md +201 -0
  2136. package/.jumpstart/skills/use-case-prioritization/SKILL.md +79 -0
  2137. package/.jumpstart/skills/use-case-prioritization/evals/evals.json +34 -0
  2138. package/.jumpstart/skills/use-case-prioritization/evals/files/candidate-use-cases.md +43 -0
  2139. package/.jumpstart/skills/use-case-prioritization/evals/files/workshop-output-notes.md +8 -0
  2140. package/.jumpstart/skills/use-case-prioritization/references/matrix-pattern.md +52 -0
  2141. package/.jumpstart/skills/user-persona-development/README.md +44 -0
  2142. package/.jumpstart/skills/user-persona-development/SKILL.md +155 -0
  2143. package/.jumpstart/skills/user-persona-development/evals/evals.json +23 -0
  2144. package/.jumpstart/skills/user-persona-development/examples/approver-persona-example.md +26 -0
  2145. package/.jumpstart/skills/user-persona-development/examples/executive-sponsor-persona-example.md +26 -0
  2146. package/.jumpstart/skills/user-persona-development/examples/operations-persona-example.md +26 -0
  2147. package/.jumpstart/skills/user-persona-development/examples/technical-operator-persona-example.md +26 -0
  2148. package/.jumpstart/skills/user-persona-development/references/ai-solution-persona-considerations.md +46 -0
  2149. package/.jumpstart/skills/user-persona-development/references/persona-field-guide.md +90 -0
  2150. package/.jumpstart/skills/user-persona-development/references/persona-quality-checklist.md +38 -0
  2151. package/.jumpstart/skills/user-persona-development/references/policy-defaults.md +37 -0
  2152. package/.jumpstart/skills/user-persona-development/references/source-grounding-rules.md +37 -0
  2153. package/.jumpstart/skills/user-persona-development/references/stakeholder-to-persona-rules.md +49 -0
  2154. package/.jumpstart/skills/user-persona-development/scripts/validate_persona_fields.py +70 -0
  2155. package/.jumpstart/skills/user-persona-development/templates/backlog-implications-template.md +12 -0
  2156. package/.jumpstart/skills/user-persona-development/templates/change-management-implications-template.md +11 -0
  2157. package/.jumpstart/skills/user-persona-development/templates/design-implications-template.md +12 -0
  2158. package/.jumpstart/skills/user-persona-development/templates/persona-gap-analysis.md +20 -0
  2159. package/.jumpstart/skills/user-persona-development/templates/persona-summary-table.md +13 -0
  2160. package/.jumpstart/skills/user-persona-development/templates/persona-template.md +38 -0
  2161. package/.jumpstart/skills/user-persona-quality-evaluator/README.md +12 -0
  2162. package/.jumpstart/skills/user-persona-quality-evaluator/SKILL.md +58 -0
  2163. package/.jumpstart/skills/user-persona-quality-evaluator/evals/evals.json +17 -0
  2164. package/.jumpstart/skills/user-persona-quality-evaluator/references/scoring-rubric.md +42 -0
  2165. package/.jumpstart/skills/vscode-github-custom-agent-builder/README.md +24 -0
  2166. package/.jumpstart/skills/vscode-github-custom-agent-builder/SKILL.md +162 -0
  2167. package/.jumpstart/skills/vscode-github-custom-agent-builder/evals/evals.json +57 -0
  2168. package/.jumpstart/skills/vscode-github-custom-agent-builder/examples/broken-reviewer.agent.md +14 -0
  2169. package/.jumpstart/skills/vscode-github-custom-agent-builder/examples/legacy-planner.chatmode.md +11 -0
  2170. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/agents.md +108 -0
  2171. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/claude-agent-format.md +33 -0
  2172. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/custom-agent-schema.md +43 -0
  2173. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/frontmatter-standard.md +53 -0
  2174. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/hooks.md +96 -0
  2175. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/instructions.md +71 -0
  2176. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/jumpstart-agent-patterns.md +44 -0
  2177. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/prompts.md +80 -0
  2178. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/schema-drift-policy.md +43 -0
  2179. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/skills.md +100 -0
  2180. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/validation-rules.md +40 -0
  2181. package/.jumpstart/skills/vscode-github-custom-agent-builder/references/workspace-instructions.md +66 -0
  2182. package/.jumpstart/skills/vscode-github-custom-agent-builder/scripts/_agent_frontmatter.py +117 -0
  2183. package/.jumpstart/skills/vscode-github-custom-agent-builder/scripts/check_custom_agent_schema.py +149 -0
  2184. package/.jumpstart/skills/vscode-github-custom-agent-builder/scripts/migrate_chatmode_to_agent.py +36 -0
  2185. package/.jumpstart/skills/vscode-github-custom-agent-builder/scripts/normalize_agent_frontmatter.py +39 -0
  2186. package/.jumpstart/skills/vscode-github-custom-agent-builder/scripts/validate_agents.py +125 -0
  2187. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/agent-validation-report.md +35 -0
  2188. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/claude-agent-template.md +10 -0
  2189. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/github-copilot-agent-template.agent.md +35 -0
  2190. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/implementer.agent.md +48 -0
  2191. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/jumpstart-solution-design.agent.md +48 -0
  2192. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/jumpstart-workbench.agent.md +50 -0
  2193. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/orchestrator.agent.md +46 -0
  2194. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/planner.agent.md +54 -0
  2195. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/reviewer.agent.md +53 -0
  2196. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/schema-drift-report.md +41 -0
  2197. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/vscode-agent-frontmatter.yaml +13 -0
  2198. package/.jumpstart/skills/vscode-github-custom-agent-builder/templates/vscode-agent-template.agent.md +43 -0
  2199. package/.jumpstart/skills/vuejs-developer/README.md +17 -0
  2200. package/.jumpstart/skills/vuejs-developer/SKILL.md +189 -0
  2201. package/.jumpstart/skills/vuejs-developer/evals/eval-cases.md +31 -0
  2202. package/.jumpstart/skills/vuejs-developer/evals/eval-plan.md +20 -0
  2203. package/.jumpstart/skills/vuejs-developer/evals/eval-rubric.md +44 -0
  2204. package/.jumpstart/skills/vuejs-developer/references/accessibility.md +23 -0
  2205. package/.jumpstart/skills/vuejs-developer/references/ai-ui-patterns.md +27 -0
  2206. package/.jumpstart/skills/vuejs-developer/references/api-integration.md +43 -0
  2207. package/.jumpstart/skills/vuejs-developer/references/ci-cd.md +28 -0
  2208. package/.jumpstart/skills/vuejs-developer/references/component-architecture.md +34 -0
  2209. package/.jumpstart/skills/vuejs-developer/references/deployment.md +34 -0
  2210. package/.jumpstart/skills/vuejs-developer/references/forms-validation.md +24 -0
  2211. package/.jumpstart/skills/vuejs-developer/references/nuxt-patterns.md +21 -0
  2212. package/.jumpstart/skills/vuejs-developer/references/performance.md +22 -0
  2213. package/.jumpstart/skills/vuejs-developer/references/pinia-state-management.md +44 -0
  2214. package/.jumpstart/skills/vuejs-developer/references/project-structure.md +46 -0
  2215. package/.jumpstart/skills/vuejs-developer/references/review-queue-patterns.md +27 -0
  2216. package/.jumpstart/skills/vuejs-developer/references/security.md +23 -0
  2217. package/.jumpstart/skills/vuejs-developer/references/styling-design-system.md +25 -0
  2218. package/.jumpstart/skills/vuejs-developer/references/testing.md +42 -0
  2219. package/.jumpstart/skills/vuejs-developer/references/vue-router-patterns.md +45 -0
  2220. package/.jumpstart/skills/vuejs-developer/references/vue3-modern-standards.md +55 -0
  2221. package/.jumpstart/skills/vuejs-developer/scripts/check_accessibility_patterns.py +19 -0
  2222. package/.jumpstart/skills/vuejs-developer/scripts/detect_vue_stack.py +28 -0
  2223. package/.jumpstart/skills/vuejs-developer/scripts/generate_component_map.py +19 -0
  2224. package/.jumpstart/skills/vuejs-developer/scripts/generate_frontend_backlog.py +18 -0
  2225. package/.jumpstart/skills/vuejs-developer/scripts/inspect_vue_project.py +32 -0
  2226. package/.jumpstart/skills/vuejs-developer/templates/.env.example +8 -0
  2227. package/.jumpstart/skills/vuejs-developer/templates/.env.local.example +8 -0
  2228. package/.jumpstart/skills/vuejs-developer/templates/Dockerfile +12 -0
  2229. package/.jumpstart/skills/vuejs-developer/templates/api-client.ts +32 -0
  2230. package/.jumpstart/skills/vuejs-developer/templates/base-button.vue +42 -0
  2231. package/.jumpstart/skills/vuejs-developer/templates/base-modal.vue +59 -0
  2232. package/.jumpstart/skills/vuejs-developer/templates/citation-panel.vue +25 -0
  2233. package/.jumpstart/skills/vuejs-developer/templates/document-upload-view.vue +35 -0
  2234. package/.jumpstart/skills/vuejs-developer/templates/github-actions-vue.yml +36 -0
  2235. package/.jumpstart/skills/vuejs-developer/templates/main.ts +12 -0
  2236. package/.jumpstart/skills/vuejs-developer/templates/nginx.conf +16 -0
  2237. package/.jumpstart/skills/vuejs-developer/templates/package.vue-vite-ts.json +34 -0
  2238. package/.jumpstart/skills/vuejs-developer/templates/pinia-store.ts +26 -0
  2239. package/.jumpstart/skills/vuejs-developer/templates/playwright.config.ts +16 -0
  2240. package/.jumpstart/skills/vuejs-developer/templates/rag-chat-view.vue +43 -0
  2241. package/.jumpstart/skills/vuejs-developer/templates/retrieval-result-card.vue +36 -0
  2242. package/.jumpstart/skills/vuejs-developer/templates/review-queue-view.vue +62 -0
  2243. package/.jumpstart/skills/vuejs-developer/templates/router.ts +39 -0
  2244. package/.jumpstart/skills/vuejs-developer/templates/tsconfig.json +19 -0
  2245. package/.jumpstart/skills/vuejs-developer/templates/vite.config.ts +15 -0
  2246. package/.jumpstart/skills/vuejs-developer/templates/vitest.config.ts +11 -0
  2247. package/.jumpstart/skills/win-theme-extractor/SKILL.md +125 -0
  2248. package/.jumpstart/skills/win-theme-extractor/evals/evals.json +37 -0
  2249. package/.jumpstart/skills/win-theme-extractor/references/battlecard-to-theme-patterns.md +93 -0
  2250. package/.jumpstart/skills/win-theme-extractor/references/proof-mapping-matrix.md +34 -0
  2251. package/.jumpstart/skills/win-theme-extractor/references/win-theme-scorecard.md +45 -0
  2252. package/.jumpstart/skills/work-breakdown-builder/SKILL.md +117 -0
  2253. package/.jumpstart/skills/work-breakdown-builder/evals/evals.json +44 -0
  2254. package/.jumpstart/skills/work-breakdown-builder/references/Cloud Infrastructure WBS Template.xlsx +0 -0
  2255. package/.jumpstart/skills/work-breakdown-builder/references/mock-wbs-data.json +258 -0
  2256. package/.jumpstart/skills/work-breakdown-builder/references/wbs-structure.md +67 -0
  2257. package/.jumpstart/skills/work-breakdown-builder/scripts/create_wbs_workbook.py +242 -0
  2258. package/.jumpstart/skills/workflow-orchestration-patterns/SKILL.md +316 -0
  2259. package/.jumpstart/skills/xlsx/LICENSE.txt +30 -0
  2260. package/.jumpstart/skills/xlsx/SKILL.md +292 -0
  2261. package/.jumpstart/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  2262. package/.jumpstart/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  2263. package/.jumpstart/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  2264. package/.jumpstart/skills/xlsx/scripts/office/pack.py +159 -0
  2265. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  2266. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  2267. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  2268. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  2269. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  2270. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  2271. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  2272. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  2273. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  2274. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  2275. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  2276. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  2277. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  2278. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  2279. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  2280. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  2281. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  2282. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  2283. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  2284. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  2285. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  2286. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  2287. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  2288. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  2289. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  2290. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  2291. package/.jumpstart/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  2292. package/.jumpstart/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  2293. package/.jumpstart/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  2294. package/.jumpstart/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  2295. package/.jumpstart/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  2296. package/.jumpstart/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  2297. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  2298. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  2299. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  2300. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  2301. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  2302. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  2303. package/.jumpstart/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  2304. package/.jumpstart/skills/xlsx/scripts/office/soffice.py +183 -0
  2305. package/.jumpstart/skills/xlsx/scripts/office/unpack.py +132 -0
  2306. package/.jumpstart/skills/xlsx/scripts/office/validate.py +111 -0
  2307. package/.jumpstart/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  2308. package/.jumpstart/skills/xlsx/scripts/office/validators/base.py +847 -0
  2309. package/.jumpstart/skills/xlsx/scripts/office/validators/docx.py +446 -0
  2310. package/.jumpstart/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  2311. package/.jumpstart/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  2312. package/.jumpstart/skills/xlsx/scripts/recalc.py +184 -0
  2313. package/.jumpstart/templates/codebase-context.md +1 -1
  2314. package/.kiro/steering/jumpstart-framework.md +33 -0
  2315. package/.windsurfrules +48 -0
  2316. package/AGENTS.md +45 -0
  2317. package/CLAUDE.md +40 -0
  2318. package/README.md +77 -1059
  2319. package/bin/cli.js +84 -4
  2320. package/bin/copilot-observability-setup.js +270 -0
  2321. package/bin/lib/context-chunker.js +4 -1
  2322. package/bin/lib/framework-manifest.js +20 -1
  2323. package/bin/lib/integrate.js +261 -0
  2324. package/bin/lib/quickstart.js +2 -0
  2325. package/copilot-observability/README.md +226 -0
  2326. package/copilot-observability/config/redaction-rules.yml +19 -0
  2327. package/copilot-observability/dashboard/app.py +246 -0
  2328. package/copilot-observability/dashboard/queries.py +48 -0
  2329. package/copilot-observability/data/processed/.gitkeep +0 -0
  2330. package/copilot-observability/data/raw/.gitkeep +0 -0
  2331. package/copilot-observability/docs/images/executive-summary.png +0 -0
  2332. package/copilot-observability/docs/images/prompt-explorer.png +0 -0
  2333. package/copilot-observability/docs/images/quality-tracking.png +0 -0
  2334. package/copilot-observability/exports/.gitkeep +0 -0
  2335. package/copilot-observability/requirements.txt +4 -0
  2336. package/copilot-observability/scripts/apply_retention.py +35 -0
  2337. package/copilot-observability/scripts/export_csv.py +42 -0
  2338. package/copilot-observability/scripts/ingest_otel.py +394 -0
  2339. package/copilot-observability/scripts/rate_session.py +52 -0
  2340. package/copilot-observability/scripts/rebuild_daily_usage.py +75 -0
  2341. package/copilot-observability/scripts/redact.py +102 -0
  2342. package/copilot-observability/sql/schema.sql +94 -0
  2343. package/copilot-observability/tests/fixtures/sample-copilot-otel.jsonl +1 -0
  2344. package/copilot-observability/tests/test_ingest.py +121 -0
  2345. package/package.json +7 -2
  2346. package/.jumpstart/skills/linkedin/SKILL.md +0 -69
  2347. package/.jumpstart/skills/skill-creator/references/output-patterns.md +0 -82
  2348. package/.jumpstart/skills/skill-creator/references/workflows.md +0 -28
  2349. package/.jumpstart/skills/skill-creator/scripts/init_skill.py +0 -303
  2350. /package/{.jumpstart/skills/backend → .github/skills}/api-design-principles/SKILL.md +0 -0
  2351. /package/{.jumpstart/skills/backend → .github/skills}/api-design-principles/assets/api-design-checklist.md +0 -0
  2352. /package/{.jumpstart/skills/backend → .github/skills}/api-design-principles/assets/rest-api-template.py +0 -0
  2353. /package/{.jumpstart/skills/backend → .github/skills}/api-design-principles/references/graphql-schema-design.md +0 -0
  2354. /package/{.jumpstart/skills/backend → .github/skills}/api-design-principles/references/rest-best-practices.md +0 -0
  2355. /package/{.jumpstart/skills/backend → .github/skills}/architecture-patterns/SKILL.md +0 -0
  2356. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/cost-optimization/SKILL.md +0 -0
  2357. /package/{.jumpstart/skills/backend → .github/skills}/cqrs-implementation/SKILL.md +0 -0
  2358. /package/{.jumpstart/skills/backend → .github/skills}/event-store-design/SKILL.md +0 -0
  2359. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/hybrid-cloud-networking/SKILL.md +0 -0
  2360. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/istio-traffic-management/SKILL.md +0 -0
  2361. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/linkerd-patterns/SKILL.md +0 -0
  2362. /package/{.jumpstart/skills/backend → .github/skills}/microservices-patterns/SKILL.md +0 -0
  2363. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/mtls-configuration/SKILL.md +0 -0
  2364. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/multi-cloud-architecture/SKILL.md +0 -0
  2365. /package/{.jumpstart/skills/backend → .github/skills}/projection-patterns/SKILL.md +0 -0
  2366. /package/{.jumpstart/skills/backend → .github/skills}/saga-orchestration/SKILL.md +0 -0
  2367. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/service-mesh-observability/SKILL.md +0 -0
  2368. /package/{.jumpstart/skills/backend → .github/skills}/temporal-python-testing/SKILL.md +0 -0
  2369. /package/{.jumpstart/skills/backend → .github/skills}/temporal-python-testing/resources/integration-testing.md +0 -0
  2370. /package/{.jumpstart/skills/backend → .github/skills}/temporal-python-testing/resources/local-setup.md +0 -0
  2371. /package/{.jumpstart/skills/backend → .github/skills}/temporal-python-testing/resources/replay-testing.md +0 -0
  2372. /package/{.jumpstart/skills/backend → .github/skills}/temporal-python-testing/resources/unit-testing.md +0 -0
  2373. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/terraform-module-library/SKILL.md +0 -0
  2374. /package/{.jumpstart/skills/cloud-infrastructure → .github/skills}/terraform-module-library/references/aws-modules.md +0 -0
  2375. /package/{.jumpstart/skills/backend → .github/skills}/workflow-orchestration-patterns/SKILL.md +0 -0
@@ -0,0 +1,2038 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Azure Interactive Architecture Diagram Generator v3
4
+ Generates interactive HTML diagrams with Azure official icons (Base64 inline).
5
+ """
6
+
7
+ import json
8
+ from datetime import datetime
9
+
10
+ from icons import get_icon_data_uri
11
+
12
+ _HAS_OFFICIAL_ICONS = True
13
+ # Azure service icons: SVG, colors + official icon key mapping
14
+ # icon: 48x48 viewBox SVG path (fallback)
15
+ # azure_icon_key: key in icons.py (official Azure icon)
16
+ SERVICE_ICONS = {
17
+ "openai": {
18
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><text x="24" y="30" text-anchor="middle" font-size="18" fill="white" font-weight="700">AI</text>',
19
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
20
+ "azure_icon_key": "azure_openai"
21
+ },
22
+ "ai_foundry": {
23
+ "icon_svg": '<rect x="6" y="10" width="36" height="28" rx="4" fill="#0078D4"/><rect x="12" y="16" width="10" height="8" rx="2" fill="white" opacity="0.9"/><rect x="26" y="16" width="10" height="8" rx="2" fill="white" opacity="0.9"/><rect x="12" y="27" width="24" height="5" rx="2" fill="white" opacity="0.6"/>',
24
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
25
+ "azure_icon_key": "ai_foundry"
26
+ },
27
+ "ai_hub": {
28
+ "icon_svg": '<rect x="6" y="10" width="36" height="28" rx="4" fill="#0078D4"/><circle cx="24" cy="24" r="8" fill="white" opacity="0.9"/><circle cx="24" cy="24" r="4" fill="#0078D4"/>',
29
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
30
+ "azure_icon_key": "machine_learning"
31
+ },
32
+ "search": {
33
+ "icon_svg": '<circle cx="20" cy="20" r="12" fill="none" stroke="#0078D4" stroke-width="3.5"/><line x1="29" y1="29" x2="40" y2="40" stroke="#0078D4" stroke-width="3.5" stroke-linecap="round"/><circle cx="20" cy="20" r="5" fill="#0078D4" opacity="0.3"/>',
34
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
35
+ "azure_icon_key": "cognitive_search"
36
+ },
37
+ "ai_search": {
38
+ "icon_svg": '<circle cx="20" cy="20" r="12" fill="none" stroke="#0078D4" stroke-width="3.5"/><line x1="29" y1="29" x2="40" y2="40" stroke="#0078D4" stroke-width="3.5" stroke-linecap="round"/><circle cx="20" cy="20" r="5" fill="#0078D4" opacity="0.3"/>',
39
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
40
+ "azure_icon_key": "cognitive_search"
41
+ },
42
+ "aml": {
43
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M14 32 L20 18 L26 26 L32 14" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
44
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
45
+ "azure_icon_key": "machine_learning"
46
+ },
47
+ "storage": {
48
+ "icon_svg": '<rect x="8" y="8" width="32" height="8" rx="3" fill="#0078D4"/><rect x="8" y="20" width="32" height="8" rx="3" fill="#0078D4" opacity="0.7"/><rect x="8" y="32" width="32" height="8" rx="3" fill="#0078D4" opacity="0.4"/>',
49
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
50
+ "azure_icon_key": "storage_accounts"
51
+ },
52
+ "adls": {
53
+ "icon_svg": '<rect x="8" y="8" width="32" height="8" rx="3" fill="#0078D4"/><rect x="8" y="20" width="32" height="8" rx="3" fill="#0078D4" opacity="0.7"/><rect x="8" y="32" width="32" height="8" rx="3" fill="#0078D4" opacity="0.4"/>',
54
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
55
+ "azure_icon_key": "data_lake_storage_gen1"
56
+ },
57
+ "fabric": {
58
+ "icon_svg": '<polygon points="24,6 42,18 42,34 24,46 6,34 6,18" fill="#E8740C" opacity="0.9"/><text x="24" y="30" text-anchor="middle" font-size="14" fill="white" font-weight="700">F</text>',
59
+ "color": "#E8740C", "bg": "#FEF3E8", "category": "Data",
60
+ "azure_icon_key": "microsoft_fabric"
61
+ },
62
+ "synapse": {
63
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><path d="M15 24 L24 15 L33 24 L24 33 Z" fill="white" opacity="0.9"/>',
64
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
65
+ "azure_icon_key": "azure_synapse_analytics"
66
+ },
67
+ "adf": {
68
+ "icon_svg": '<rect x="6" y="12" width="36" height="24" rx="4" fill="#0078D4"/><path d="M16 24 L28 24 M24 18 L30 24 L24 30" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
69
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
70
+ "azure_icon_key": "data_factory"
71
+ },
72
+ "data_factory": {
73
+ "icon_svg": '<rect x="6" y="12" width="36" height="24" rx="4" fill="#0078D4"/><path d="M16 24 L28 24 M24 18 L30 24 L24 30" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
74
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
75
+ "azure_icon_key": "data_factory"
76
+ },
77
+ "keyvault": {
78
+ "icon_svg": '<rect x="10" y="6" width="28" height="36" rx="4" fill="#E8A000"/><circle cx="24" cy="22" r="6" fill="white"/><rect x="22" y="26" width="4" height="10" rx="1" fill="white"/>',
79
+ "color": "#E8A000", "bg": "#FEF7E0", "category": "Security",
80
+ "azure_icon_key": "key_vaults"
81
+ },
82
+ "kv": {
83
+ "icon_svg": '<rect x="10" y="6" width="28" height="36" rx="4" fill="#E8A000"/><circle cx="24" cy="22" r="6" fill="white"/><rect x="22" y="26" width="4" height="10" rx="1" fill="white"/>',
84
+ "color": "#E8A000", "bg": "#FEF7E0", "category": "Security",
85
+ "azure_icon_key": "key_vaults"
86
+ },
87
+ "vnet": {
88
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="none" stroke="#5C2D91" stroke-width="2.5"/><circle cx="16" cy="18" r="4" fill="#5C2D91"/><circle cx="32" cy="18" r="4" fill="#5C2D91"/><circle cx="24" cy="32" r="4" fill="#5C2D91"/><line x1="16" y1="18" x2="32" y2="18" stroke="#5C2D91" stroke-width="1.5"/><line x1="16" y1="18" x2="24" y2="32" stroke="#5C2D91" stroke-width="1.5"/><line x1="32" y1="18" x2="24" y2="32" stroke="#5C2D91" stroke-width="1.5"/>',
89
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
90
+ "azure_icon_key": "virtual_networks"
91
+ },
92
+ "pe": {
93
+ "icon_svg": '<circle cx="24" cy="24" r="14" fill="none" stroke="#5C2D91" stroke-width="2"/><circle cx="24" cy="24" r="6" fill="#5C2D91"/><line x1="24" y1="10" x2="24" y2="4" stroke="#5C2D91" stroke-width="2"/><line x1="24" y1="38" x2="24" y2="44" stroke="#5C2D91" stroke-width="2"/>',
94
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
95
+ "azure_icon_key": "private_endpoints"
96
+ },
97
+ "nsg": {
98
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="4" fill="#5C2D91"/><path d="M18 20 L24 14 L30 20 M18 28 L24 34 L30 28" stroke="white" stroke-width="2" fill="none"/>',
99
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
100
+ "azure_icon_key": "network_security_groups"
101
+ },
102
+ "acr": {
103
+ "icon_svg": '<rect x="8" y="10" width="32" height="28" rx="4" fill="#0078D4"/><rect x="14" y="16" width="20" height="16" rx="2" fill="white" opacity="0.3"/><text x="24" y="30" text-anchor="middle" font-size="12" fill="white" font-weight="600">ACR</text>',
104
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute"
105
+ },
106
+ "aks": {
107
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#326CE5"/><text x="24" y="30" text-anchor="middle" font-size="16" fill="white" font-weight="700">K</text>',
108
+ "color": "#326CE5", "bg": "#EBF0FC", "category": "Compute",
109
+ "azure_icon_key": "kubernetes_services"
110
+ },
111
+ "appservice": {
112
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="6" fill="#0078D4"/><polygon points="24,14 34,34 14,34" fill="white" opacity="0.9"/>',
113
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
114
+ "azure_icon_key": "app_services"
115
+ },
116
+ "appinsights": {
117
+ "icon_svg": '<circle cx="24" cy="24" r="16" fill="#773ADC"/><path d="M16 28 L20 20 L24 24 L28 16 L32 22" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>',
118
+ "color": "#773ADC", "bg": "#F0EAFA", "category": "Monitor",
119
+ "azure_icon_key": "application_insights"
120
+ },
121
+ "monitor": {
122
+ "icon_svg": '<rect x="6" y="10" width="36" height="24" rx="4" fill="#773ADC"/><path d="M14 28 L20 20 L26 24 L34 16" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/><rect x="14" y="36" width="20" height="3" rx="1" fill="#773ADC" opacity="0.5"/>',
123
+ "color": "#773ADC", "bg": "#F0EAFA", "category": "Monitor",
124
+ "azure_icon_key": "monitor"
125
+ },
126
+ "vm": {
127
+ "icon_svg": '<rect x="6" y="8" width="36" height="26" rx="3" fill="#0078D4"/><rect x="10" y="12" width="28" height="18" rx="1" fill="white" opacity="0.2"/><rect x="16" y="36" width="16" height="4" rx="1" fill="#0078D4"/>',
128
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
129
+ "azure_icon_key": "virtual_machine"
130
+ },
131
+ "bastion": {
132
+ "icon_svg": '<rect x="8" y="6" width="32" height="36" rx="4" fill="#5C2D91"/><rect x="14" y="12" width="20" height="14" rx="2" fill="white" opacity="0.3"/><circle cx="24" cy="34" r="4" fill="white" opacity="0.7"/>',
133
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
134
+ "azure_icon_key": "bastions"
135
+ },
136
+ "jumpbox": {
137
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="4" fill="#5C2D91"/><text x="24" y="30" text-anchor="middle" font-size="14" fill="white" font-weight="600">JB</text>',
138
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
139
+ "azure_icon_key": "virtual_machine"
140
+ },
141
+ "vpn": {
142
+ "icon_svg": '<rect x="6" y="12" width="36" height="24" rx="4" fill="#5C2D91"/><path d="M16 24 L24 16 L32 24 L24 32 Z" fill="white" opacity="0.8"/>',
143
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
144
+ "azure_icon_key": "virtual_network_gateways"
145
+ },
146
+ "user": {
147
+ "icon_svg": '<circle cx="24" cy="16" r="8" fill="#0078D4"/><path d="M10 42 Q10 30 24 30 Q38 30 38 42" fill="#0078D4"/>',
148
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "External"
149
+ },
150
+ "app": {
151
+ "icon_svg": '<rect x="8" y="6" width="32" height="36" rx="6" fill="#666"/><rect x="14" y="12" width="20" height="20" rx="2" fill="white" opacity="0.3"/><circle cx="24" cy="40" r="2" fill="white" opacity="0.7"/>',
152
+ "color": "#666666", "bg": "#F5F5F5", "category": "External"
153
+ },
154
+ "default": {
155
+ "icon_svg": '<circle cx="24" cy="24" r="16" fill="#0078D4"/><text x="24" y="30" text-anchor="middle" font-size="14" fill="white" font-weight="600">?</text>',
156
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Azure"
157
+ },
158
+ "cdn": {
159
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">CDN</text>',
160
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Network",
161
+ "azure_icon_key": "cdn_profiles"
162
+ },
163
+ "event_hub": {
164
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="8" fill="white" font-weight="700">Event</text><text x="24" y="33" text-anchor="middle" font-size="8" fill="white">Hub</text>',
165
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
166
+ "azure_icon_key": "event_hubs"
167
+ },
168
+ "redis": {
169
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#D83B01"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">Redis</text>',
170
+ "color": "#D83B01", "bg": "#FEF0E8", "category": "Data",
171
+ "azure_icon_key": "cache_redis"
172
+ },
173
+ "devops": {
174
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="8" fill="white" font-weight="700">Dev</text><text x="24" y="33" text-anchor="middle" font-size="8" fill="white">Ops</text>',
175
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "DevOps",
176
+ "azure_icon_key": "azure_devops"
177
+ },
178
+ "acr": {
179
+ "icon_svg": '<rect x="8" y="10" width="32" height="28" rx="4" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">ACR</text>',
180
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
181
+ "azure_icon_key": "container_registries"
182
+ },
183
+ "container_registry": {
184
+ "icon_svg": '<rect x="8" y="10" width="32" height="28" rx="4" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">ACR</text>',
185
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
186
+ "azure_icon_key": "container_registries"
187
+ },
188
+ "app_gateway": {
189
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="8" fill="white" font-weight="700">App</text><text x="24" y="33" text-anchor="middle" font-size="8" fill="white">GW</text>',
190
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Network",
191
+ "azure_icon_key": "application_gateways"
192
+ },
193
+ "iot_hub": {
194
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="8" fill="white" font-weight="700">IoT</text><text x="24" y="33" text-anchor="middle" font-size="8" fill="white">Hub</text>',
195
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "IoT",
196
+ "azure_icon_key": "iot_hub"
197
+ },
198
+ "stream_analytics": {
199
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="7" fill="white" font-weight="700">Stream</text><text x="24" y="33" text-anchor="middle" font-size="7" fill="white">Analytics</text>',
200
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
201
+ "azure_icon_key": "stream_analytics_jobs"
202
+ },
203
+ "vpn_gateway": {
204
+ "icon_svg": '<rect x="6" y="12" width="36" height="24" rx="4" fill="#5C2D91"/><path d="M16 24 L24 16 L32 24 L24 32 Z" fill="white" opacity="0.8"/>',
205
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
206
+ "azure_icon_key": "virtual_network_gateways"
207
+ },
208
+ "front_door": {
209
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="7" fill="white" font-weight="700">Front</text><text x="24" y="33" text-anchor="middle" font-size="7" fill="white">Door</text>',
210
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Network",
211
+ "azure_icon_key": "front_door_and_cdn_profiles"
212
+ },
213
+ "ai_hub": {
214
+ "icon_svg": '<rect x="6" y="10" width="36" height="28" rx="4" fill="#0078D4"/><circle cx="24" cy="24" r="8" fill="white" opacity="0.9"/><circle cx="24" cy="24" r="4" fill="#0078D4"/>',
215
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
216
+ "azure_icon_key": "ai_studio"
217
+ },
218
+ "firewall": {
219
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#E8A000"/><text x="24" y="22" text-anchor="middle" font-size="7" fill="white" font-weight="700">Fire</text><text x="24" y="33" text-anchor="middle" font-size="7" fill="white">wall</text>',
220
+ "color": "#E8A000", "bg": "#FFF8E1", "category": "Network",
221
+ "azure_icon_key": "firewalls"
222
+ },
223
+ "document_intelligence": {
224
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="9" fill="white" font-weight="700">Doc</text><text x="24" y="33" text-anchor="middle" font-size="9" fill="white">Intel</text>',
225
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
226
+ "azure_icon_key": "form_recognizer"
227
+ },
228
+ "form_recognizer": {
229
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="9" fill="white" font-weight="700">Doc</text><text x="24" y="33" text-anchor="middle" font-size="9" fill="white">Intel</text>',
230
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "AI",
231
+ "azure_icon_key": "form_recognizer"
232
+ },
233
+ "databricks": {
234
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="6" fill="#FF3621"/><text x="24" y="30" text-anchor="middle" font-size="16" fill="white" font-weight="700">DB</text>',
235
+ "color": "#FF3621", "bg": "#FFF0EE", "category": "Data",
236
+ "azure_icon_key": "azure_databricks"
237
+ },
238
+ "sql_server": {
239
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="11" fill="white" font-weight="700">SQL</text><rect x="12" y="28" width="24" height="8" rx="2" fill="white" opacity="0.3"/>',
240
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
241
+ "azure_icon_key": "sql_server"
242
+ },
243
+ "sql_database": {
244
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="11" fill="white" font-weight="700">SQL</text><rect x="12" y="28" width="24" height="8" rx="2" fill="white" opacity="0.3"/>',
245
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
246
+ "azure_icon_key": "sql_database"
247
+ },
248
+ "cosmos_db": {
249
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="9" fill="white" font-weight="700">Cosmos</text><text x="24" y="33" text-anchor="middle" font-size="9" fill="white">DB</text>',
250
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
251
+ "azure_icon_key": "azure_cosmos_db"
252
+ },
253
+ "app_service": {
254
+ "icon_svg": '<rect x="6" y="10" width="36" height="28" rx="6" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="11" fill="white" font-weight="700">App</text>',
255
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
256
+ "azure_icon_key": "app_services"
257
+ },
258
+ "aks": {
259
+ "icon_svg": '<polygon points="24,4 44,20 38,44 10,44 4,20" fill="#326CE5" stroke="#fff" stroke-width="1"/><text x="24" y="30" text-anchor="middle" font-size="11" fill="white" font-weight="700">K8s</text>',
260
+ "color": "#326CE5", "bg": "#EBF0FA", "category": "Compute",
261
+ "azure_icon_key": "kubernetes_services"
262
+ },
263
+ "function_app": {
264
+ "icon_svg": '<polygon points="24,6 42,42 6,42" fill="#F0AD4E"/><text x="24" y="36" text-anchor="middle" font-size="14" fill="white" font-weight="700">ƒ</text>',
265
+ "color": "#F0AD4E", "bg": "#FFF8ED", "category": "Compute",
266
+ "azure_icon_key": "function_apps"
267
+ },
268
+ "synapse": {
269
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><text x="24" y="22" text-anchor="middle" font-size="8" fill="white" font-weight="700">Syn</text><text x="24" y="32" text-anchor="middle" font-size="8" fill="white">apse</text>',
270
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
271
+ "azure_icon_key": "azure_synapse_analytics"
272
+ },
273
+ "log_analytics": {
274
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#5C2D91"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">Log</text>',
275
+ "color": "#5C2D91", "bg": "#F3EDF7", "category": "Monitoring",
276
+ "azure_icon_key": "log_analytics_workspaces"
277
+ },
278
+ "app_insights": {
279
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#5C2D91"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">AI</text>',
280
+ "color": "#5C2D91", "bg": "#F3EDF7", "category": "Monitoring",
281
+ "azure_icon_key": "application_insights"
282
+ },
283
+ "nsg": {
284
+ "icon_svg": '<rect x="6" y="6" width="36" height="36" rx="4" fill="#E8A000"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">NSG</text>',
285
+ "color": "#E8A000", "bg": "#FFF8E1", "category": "Network",
286
+ "azure_icon_key": "network_security_groups"
287
+ },
288
+ "apim": {
289
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M16 20 L32 20 M16 28 L32 28 M24 14 L24 34" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>',
290
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
291
+ "azure_icon_key": "api_management_services"
292
+ },
293
+ "api_management": {
294
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M16 20 L32 20 M16 28 L32 28 M24 14 L24 34" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>',
295
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
296
+ "azure_icon_key": "api_management_services"
297
+ },
298
+ "service_bus": {
299
+ "icon_svg": '<rect x="6" y="10" width="36" height="28" rx="4" fill="#0078D4"/><path d="M14 24 L22 24 M26 24 L34 24" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round"/><circle cx="24" cy="24" r="4" fill="white"/>',
300
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
301
+ "azure_icon_key": "azure_service_bus"
302
+ },
303
+ "logic_apps": {
304
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M14 18 L24 28 L34 18" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
305
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
306
+ "azure_icon_key": "logic_apps"
307
+ },
308
+ "logic_app": {
309
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M14 18 L24 28 L34 18" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
310
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
311
+ "azure_icon_key": "logic_apps"
312
+ },
313
+ "event_grid": {
314
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><circle cx="16" cy="18" r="3" fill="white"/><circle cx="32" cy="18" r="3" fill="white"/><circle cx="16" cy="30" r="3" fill="white"/><circle cx="32" cy="30" r="3" fill="white"/><line x1="16" y1="18" x2="32" y2="30" stroke="white" stroke-width="1.5"/><line x1="32" y1="18" x2="16" y2="30" stroke="white" stroke-width="1.5"/>',
315
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
316
+ "azure_icon_key": "event_grid_topics"
317
+ },
318
+ "container_apps": {
319
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><rect x="12" y="14" width="10" height="10" rx="2" fill="white" opacity="0.9"/><rect x="26" y="14" width="10" height="10" rx="2" fill="white" opacity="0.9"/><rect x="12" y="28" width="24" height="6" rx="2" fill="white" opacity="0.6"/>',
320
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
321
+ "azure_icon_key": "container_apps_environments"
322
+ },
323
+ "container_app": {
324
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><rect x="12" y="14" width="10" height="10" rx="2" fill="white" opacity="0.9"/><rect x="26" y="14" width="10" height="10" rx="2" fill="white" opacity="0.9"/><rect x="12" y="28" width="24" height="6" rx="2" fill="white" opacity="0.6"/>',
325
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
326
+ "azure_icon_key": "container_apps_environments"
327
+ },
328
+ "postgresql": {
329
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="4" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">PG</text>',
330
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
331
+ "azure_icon_key": "azure_database_postgresql_server"
332
+ },
333
+ "mysql": {
334
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="4" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">My</text>',
335
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
336
+ "azure_icon_key": "azure_database_mysql_server"
337
+ },
338
+ "load_balancer": {
339
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#5C2D91"/><path d="M16 18 L32 18 M16 24 L32 24 M16 30 L32 30" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>',
340
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
341
+ "azure_icon_key": "load_balancers"
342
+ },
343
+ "nat_gateway": {
344
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#5C2D91"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">NAT</text>',
345
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
346
+ "azure_icon_key": "nat"
347
+ },
348
+ "expressroute": {
349
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#5C2D91"/><path d="M14 24 L34 24" stroke="white" stroke-width="3" fill="none" stroke-linecap="round"/><circle cx="14" cy="24" r="4" fill="white"/><circle cx="34" cy="24" r="4" fill="white"/>',
350
+ "color": "#5C2D91", "bg": "#F3EEF9", "category": "Network",
351
+ "azure_icon_key": "expressroute_circuits"
352
+ },
353
+ "sentinel": {
354
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><path d="M24 12 L24 24 L32 28" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/><circle cx="24" cy="24" r="3" fill="white"/>',
355
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Security",
356
+ "azure_icon_key": "azure_sentinel"
357
+ },
358
+ "data_explorer": {
359
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M14 30 L20 18 L26 26 L34 14" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
360
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
361
+ "azure_icon_key": "azure_data_explorer_clusters"
362
+ },
363
+ "kusto": {
364
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M14 30 L20 18 L26 26 L34 14" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>',
365
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Data",
366
+ "azure_icon_key": "azure_data_explorer_clusters"
367
+ },
368
+ "signalr": {
369
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#0078D4"/><path d="M16 20 Q24 12 32 20 M16 28 Q24 36 32 28" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>',
370
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
371
+ "azure_icon_key": "signalr"
372
+ },
373
+ "notification_hub": {
374
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><path d="M18 16 L24 12 L30 16 L30 28 L18 28 Z" stroke="white" stroke-width="2" fill="white" opacity="0.9"/><circle cx="24" cy="32" r="3" fill="white"/>',
375
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Integration",
376
+ "azure_icon_key": "notification_hubs"
377
+ },
378
+ "spring_apps": {
379
+ "icon_svg": '<circle cx="24" cy="24" r="18" fill="#6DB33F"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">🌱</text>',
380
+ "color": "#6DB33F", "bg": "#EFF8E8", "category": "Compute",
381
+ "azure_icon_key": "azure_spring_apps"
382
+ },
383
+ "static_web_app": {
384
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><text x="24" y="28" text-anchor="middle" font-size="10" fill="white" font-weight="700">SWA</text>',
385
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Compute",
386
+ "azure_icon_key": "static_apps"
387
+ },
388
+ "digital_twins": {
389
+ "icon_svg": '<rect x="6" y="8" width="36" height="32" rx="4" fill="#0078D4"/><circle cx="18" cy="20" r="5" fill="white" opacity="0.9"/><circle cx="30" cy="20" r="5" fill="white" opacity="0.9"/><line x1="18" y1="25" x2="18" y2="34" stroke="white" stroke-width="2"/><line x1="30" y1="25" x2="30" y2="34" stroke="white" stroke-width="2"/>',
390
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "IoT",
391
+ "azure_icon_key": "digital_twins"
392
+ },
393
+ "backup": {
394
+ "icon_svg": '<rect x="8" y="8" width="32" height="32" rx="4" fill="#0078D4"/><path d="M16 28 L24 16 L32 28 Z" stroke="white" stroke-width="2" fill="white" opacity="0.8"/>',
395
+ "color": "#0078D4", "bg": "#E8F4FD", "category": "Management",
396
+ "azure_icon_key": "backup_vault"
397
+ },
398
+ }
399
+
400
+ CONNECTION_STYLES = {
401
+ "api": {"color": "#0078D4", "dash": "0"},
402
+ "data": {"color": "#0F9D58", "dash": "0"},
403
+ "security": {"color": "#E8A000", "dash": "5,5"},
404
+ "private": {"color": "#5C2D91", "dash": "3,3"},
405
+ "network": {"color": "#5C2D91", "dash": "5,5"},
406
+ "default": {"color": "#999999", "dash": "0"},
407
+ }
408
+
409
+
410
+ _TYPE_ALIASES = {
411
+ # Azure ARM resource names → canonical diagram type
412
+ # Network
413
+ "private_endpoints": "pe", "private_endpoint": "pe",
414
+ "virtual_networks": "vnet", "virtual_network": "vnet",
415
+ "network_security_groups": "nsg", "network_security_group": "nsg",
416
+ "bastion_hosts": "bastion", "bastion_host": "bastion",
417
+ "application_gateways": "app_gateway", "application_gateway": "app_gateway",
418
+ "front_doors": "front_door", "front_door_and_cdn_profiles": "front_door",
419
+ "virtual_network_gateways": "vpn", "vpn_gateways": "vpn",
420
+ "load_balancers": "load_balancer",
421
+ "nat_gateways": "nat_gateway",
422
+ "expressroute_circuits": "expressroute",
423
+ "firewalls": "firewall",
424
+ "cdn_profiles": "cdn",
425
+ # Data
426
+ "data_factories": "adf", "data_factory": "adf",
427
+ "storage_accounts": "storage", "storage_account": "storage",
428
+ "data_lake": "adls", "adls_gen2": "adls", "data_lake_storage": "adls",
429
+ "fabric_capacities": "fabric", "fabric_capacity": "fabric", "microsoft_fabric": "fabric",
430
+ "synapse_workspaces": "synapse", "synapse_workspace": "synapse", "synapse_analytics": "synapse",
431
+ "cosmos": "cosmos_db", "cosmosdb": "cosmos_db", "documentdb": "cosmos_db",
432
+ "sql_databases": "sql_database", "sql_db": "sql_database",
433
+ "sql_servers": "sql_server",
434
+ "redis_caches": "redis", "redis_cache": "redis", "cache_redis": "redis",
435
+ "stream_analytics_jobs": "stream_analytics",
436
+ "databricks_workspaces": "databricks",
437
+ "data_explorer_clusters": "data_explorer", "azure_data_explorer": "data_explorer",
438
+ "postgresql_server": "postgresql", "postgresql_servers": "postgresql",
439
+ "mysql_server": "mysql", "mysql_servers": "mysql",
440
+ # AI
441
+ "cognitive_services": "ai_foundry", "ai_services": "ai_foundry", "foundry": "ai_foundry",
442
+ "azure_openai": "openai",
443
+ "cognitive_search": "search", "search_services": "search", "search_service": "search",
444
+ "machine_learning": "aml", "ml": "aml", "machine_learning_workspaces": "aml",
445
+ "form_recognizers": "document_intelligence",
446
+ "ai_studio": "ai_hub", "foundry_project": "ai_hub",
447
+ # Security
448
+ "key_vault": "keyvault", "key_vaults": "keyvault",
449
+ "sentinel": "sentinel", "azure_sentinel": "sentinel",
450
+ # Compute
451
+ "virtual_machines": "vm", "virtual_machine": "vm",
452
+ "app_services": "appservice", "web_apps": "appservice", "web_app": "appservice",
453
+ "function_apps": "function_app", "functions": "function_app",
454
+ "kubernetes_services": "aks", "managed_clusters": "aks", "kubernetes": "aks",
455
+ "container_registries": "acr",
456
+ "container_apps_environments": "container_apps",
457
+ "spring_apps": "spring_apps", "azure_spring_apps": "spring_apps",
458
+ "static_apps": "static_web_app", "static_web_apps": "static_web_app",
459
+ # Integration
460
+ "event_hubs": "event_hub",
461
+ "event_grid_topics": "event_grid", "event_grid_domains": "event_grid",
462
+ "api_management_services": "apim",
463
+ "service_bus_namespaces": "service_bus",
464
+ "logic_app": "logic_apps",
465
+ "notification_hubs": "notification_hub",
466
+ # Monitoring
467
+ "log_analytics_workspaces": "log_analytics",
468
+ "application_insights": "appinsights", "app_insight": "appinsights",
469
+ # IoT
470
+ "iot_hubs": "iot_hub",
471
+ # Management
472
+ "backup_vaults": "backup", "backup_vault": "backup",
473
+ }
474
+
475
+ def get_service_info(svc_type: str) -> dict:
476
+ t = svc_type.lower().replace("-", "_").replace(" ", "_")
477
+ t = _TYPE_ALIASES.get(t, t)
478
+ info = SERVICE_ICONS.get(t, SERVICE_ICONS["default"]).copy()
479
+ # Add official Azure icon data URI if available
480
+ azure_key = info.get("azure_icon_key", t)
481
+ icon_uri = get_icon_data_uri(azure_key)
482
+ info["icon_data_uri"] = icon_uri
483
+ return info
484
+
485
+
486
+ def generate_html(services: list, connections: list, title: str, vnet_info: str = "", hierarchy: list = None) -> str:
487
+ def _norm(t):
488
+ t = t.lower().replace("-", "_").replace(" ", "_")
489
+ return _TYPE_ALIASES.get(t, t)
490
+
491
+ nodes_js = json.dumps([{
492
+ "id": svc["id"],
493
+ "name": svc["name"],
494
+ "type": _norm(svc.get("type", "default")),
495
+ "sku": svc.get("sku", ""),
496
+ "private": svc.get("private", False),
497
+ "details": svc.get("details", []),
498
+ "subscription": svc.get("subscription", ""),
499
+ "resourceGroup": svc.get("resourceGroup", ""),
500
+ "icon_svg": get_service_info(svc.get("type", "default"))["icon_svg"],
501
+ "icon_data_uri": get_service_info(svc.get("type", "default")).get("icon_data_uri", ""),
502
+ "color": get_service_info(svc.get("type", "default"))["color"],
503
+ "bg": get_service_info(svc.get("type", "default"))["bg"],
504
+ "category": get_service_info(svc.get("type", "default"))["category"],
505
+ } for svc in services], ensure_ascii=False)
506
+
507
+ hierarchy_js = json.dumps(hierarchy or [], ensure_ascii=False)
508
+
509
+ edges_js = json.dumps([{
510
+ "from": conn["from"],
511
+ "to": conn["to"],
512
+ "label": conn.get("label", ""),
513
+ "type": conn.get("type", "default"),
514
+ "color": CONNECTION_STYLES.get(conn.get("type", "default"), CONNECTION_STYLES["default"])["color"],
515
+ "dash": CONNECTION_STYLES.get(conn.get("type", "default"), CONNECTION_STYLES["default"])["dash"],
516
+ } for conn in connections], ensure_ascii=False)
517
+
518
+ pe_count = sum(1 for s in services if _norm(s.get("type", "default")) == "pe")
519
+ svc_count = len(services) - pe_count
520
+ generated_at = datetime.now().strftime("%Y-%m-%d %H:%M")
521
+ vnet_info_js = json.dumps(vnet_info, ensure_ascii=False)
522
+
523
+ html = f"""<!DOCTYPE html>
524
+ <html lang="ko">
525
+ <head>
526
+ <meta charset="UTF-8">
527
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
528
+ <title>{title}</title>
529
+ <style>
530
+ @import url('https://fonts.googleapis.com/css2?family=Segoe+UI:wght@400;600;700&family=Inter:wght@400;500;600&display=swap');
531
+ * {{ box-sizing: border-box; margin: 0; padding: 0; }}
532
+ body {{ font-family: 'Segoe UI', 'Inter', -apple-system, sans-serif; background: #f3f2f1; color: #323130; }}
533
+
534
+ .header {{
535
+ background: white; border-bottom: 1px solid #edebe9;
536
+ padding: 12px 24px; display: flex; align-items: center; gap: 14px;
537
+ box-shadow: 0 1px 4px rgba(0,0,0,0.06);
538
+ }}
539
+ .header-icon {{
540
+ width: 32px; height: 32px; border-radius: 4px;
541
+ background: linear-gradient(135deg, #0078D4, #00BCF2);
542
+ display: flex; align-items: center; justify-content: center;
543
+ }}
544
+ .header-icon svg {{ width: 20px; height: 20px; }}
545
+ .header h1 {{ font-size: 15px; font-weight: 600; color: #201f1e; }}
546
+ .header .meta {{ font-size: 11px; color: #a19f9d; }}
547
+ .header-right {{ margin-left: auto; display: flex; gap: 16px; align-items: center; }}
548
+ .stat {{ font-size: 11px; color: #605e5c; }}
549
+ .stat b {{ color: #323130; }}
550
+
551
+ .container {{ display: flex; height: calc(100vh - 56px); }}
552
+
553
+ .canvas-area {{
554
+ flex: 1; position: relative; overflow: hidden;
555
+ background: white;
556
+ background-image:
557
+ linear-gradient(#faf9f8 1px, transparent 1px),
558
+ linear-gradient(90deg, #faf9f8 1px, transparent 1px);
559
+ background-size: 24px 24px;
560
+ }}
561
+ #canvas {{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; }}
562
+
563
+ .toolbar {{
564
+ position: absolute; top: 10px; left: 10px;
565
+ display: flex; gap: 1px; z-index: 10;
566
+ background: white; border: 1px solid #edebe9; border-radius: 6px;
567
+ padding: 2px; box-shadow: 0 2px 8px rgba(0,0,0,0.08);
568
+ }}
569
+ .tool-btn {{
570
+ background: transparent; border: none; border-radius: 4px;
571
+ padding: 5px 10px; font-size: 11px; cursor: pointer; color: #605e5c;
572
+ font-family: inherit; transition: all 0.1s;
573
+ }}
574
+ .tool-btn:hover {{ background: #f3f2f1; color: #323130; }}
575
+ .tool-sep {{ width: 1px; background: #edebe9; margin: 3px 1px; }}
576
+
577
+ .zoom-indicator {{
578
+ position: absolute; top: 10px; right: 286px;
579
+ background: white; border: 1px solid #edebe9; border-radius: 4px;
580
+ padding: 3px 8px; font-size: 10px; color: #a19f9d; z-index: 10;
581
+ }}
582
+
583
+ /* ── Sidebar ── */
584
+ .sidebar {{
585
+ width: 272px; background: #faf9f8; border-left: 1px solid #edebe9;
586
+ overflow-y: auto; display: flex; flex-direction: column;
587
+ }}
588
+ .sidebar::-webkit-scrollbar {{ width: 3px; }}
589
+ .sidebar::-webkit-scrollbar-thumb {{ background: #c8c6c4; border-radius: 3px; }}
590
+
591
+ .sidebar-header {{
592
+ padding: 12px 14px; border-bottom: 1px solid #edebe9;
593
+ font-weight: 600; font-size: 12px; color: #605e5c;
594
+ position: sticky; top: 0; background: #faf9f8; z-index: 1;
595
+ }}
596
+ .cat-label {{
597
+ padding: 10px 14px 4px; font-size: 10px; color: #a19f9d;
598
+ font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px;
599
+ }}
600
+ .service-card {{
601
+ margin: 2px 6px; border: 1px solid #edebe9; border-radius: 6px;
602
+ overflow: hidden; cursor: pointer; transition: all 0.1s;
603
+ background: white;
604
+ }}
605
+ .service-card:hover {{ border-color: #c8c6c4; box-shadow: 0 1px 4px rgba(0,0,0,0.06); }}
606
+ .service-card.selected {{ border-color: #0078D4; box-shadow: 0 0 0 1px #0078D4; }}
607
+ .service-card-header {{
608
+ padding: 7px 10px; display: flex; align-items: center; gap: 8px;
609
+ }}
610
+ .sc-icon {{ width: 28px; height: 28px; flex-shrink: 0; }}
611
+ .sc-icon svg {{ width: 28px; height: 28px; }}
612
+ .service-name {{ font-size: 12px; font-weight: 600; color: #323130; }}
613
+ .service-sku {{ font-size: 10px; color: #a19f9d; }}
614
+ .service-card-body {{ padding: 2px 10px 6px; }}
615
+ .service-detail {{ font-size: 10px; color: #605e5c; padding: 1px 0; }}
616
+ .service-detail::before {{ content: "› "; color: #a19f9d; }}
617
+ .private-badge {{
618
+ font-size: 9px; background: #f3eef9; color: #5C2D91;
619
+ border-radius: 3px; padding: 1px 5px; margin-left: auto;
620
+ border: 1px solid #e0d4f5;
621
+ }}
622
+
623
+ .legend {{
624
+ padding: 10px 14px; border-top: 1px solid #edebe9; margin-top: auto;
625
+ }}
626
+ .legend-title {{ font-size: 10px; font-weight: 600; color: #a19f9d; margin-bottom: 5px; }}
627
+ .legend-item {{ display: flex; align-items: center; gap: 6px; font-size: 10px; color: #605e5c; margin-bottom: 2px; }}
628
+ .legend-line {{ width: 18px; height: 2px; border-radius: 1px; }}
629
+ .legend-line-dash {{ width: 18px; height: 0; border-top: 2px dashed; }}
630
+
631
+ /* ── SVG styles ── */
632
+ .node {{ cursor: grab; pointer-events: all; }}
633
+ .node:active {{ cursor: grabbing; }}
634
+ .node .node-bg {{ pointer-events: all; }}
635
+ .node.selected .node-bg {{ stroke: #0078D4; stroke-width: 2.5; }}
636
+ .node.selected {{ filter: drop-shadow(0 0 6px rgba(0,120,212,0.4)); }}
637
+
638
+ /* ── Edge highlight on node select ── */
639
+ .edge-path {{ transition: opacity 0.2s, stroke-width 0.2s; }}
640
+ .edge-label {{ transition: opacity 0.2s; }}
641
+ .edge-path.highlight {{ opacity: 1 !important; stroke-width: 2.5 !important; filter: drop-shadow(0 0 4px rgba(0,120,212,0.5)); }}
642
+ .edge-path.dimmed {{ opacity: 0.1 !important; }}
643
+ .edge-label.highlight {{ opacity: 1 !important; font-weight: 700; }}
644
+ .edge-label.dimmed {{ opacity: 0.15 !important; }}
645
+ .edge-label-bg.highlight {{ stroke: #0078D4 !important; stroke-width: 1.5 !important; }}
646
+ .edge-label-bg.dimmed {{ opacity: 0.15 !important; }}
647
+ .node.dimmed {{ opacity: 0.25; transition: opacity 0.2s; }}
648
+
649
+ .subnet-rect {{
650
+ rx: 6; ry: 6;
651
+ }}
652
+ .subnet-label {{
653
+ font-size: 11px; font-weight: 600; font-family: 'Segoe UI', sans-serif;
654
+ }}
655
+
656
+ .status-bar {{
657
+ position: absolute; bottom: 10px; left: 10px;
658
+ background: white; border: 1px solid #edebe9; border-radius: 4px;
659
+ padding: 4px 10px; font-size: 10px; color: #a19f9d;
660
+ box-shadow: 0 1px 4px rgba(0,0,0,0.06);
661
+ }}
662
+
663
+ .tooltip {{
664
+ position: absolute; background: white; color: #323130;
665
+ border: 1px solid #edebe9; padding: 8px 12px;
666
+ border-radius: 6px; font-size: 11px; pointer-events: none;
667
+ white-space: nowrap; z-index: 100; display: none;
668
+ box-shadow: 0 4px 16px rgba(0,0,0,0.12);
669
+ }}
670
+ .tooltip strong {{ color: #201f1e; }}
671
+ .tooltip-detail {{ color: #605e5c; margin-top: 1px; font-size: 10px; }}
672
+ </style>
673
+ </head>
674
+ <body>
675
+
676
+ <div class="header">
677
+ <div class="header-icon">
678
+ <svg viewBox="0 0 24 24"><path d="M12 2L2 7v10l10 5 10-5V7L12 2z" fill="white" opacity="0.9"/></svg>
679
+ </div>
680
+ <div>
681
+ <h1>{title}</h1>
682
+ <div class="meta">Azure Architecture &middot; {generated_at}</div>
683
+ </div>
684
+ <div class="header-right">
685
+ <div class="stat"><b>{svc_count}</b> Services</div>
686
+ <div class="stat"><b>{pe_count}</b> Private Endpoints</div>
687
+ <div class="stat"><b>{len(connections)}</b> Connections</div>
688
+ </div>
689
+ </div>
690
+
691
+ <div class="container">
692
+ <div class="canvas-area">
693
+ <div class="toolbar">
694
+ <button class="tool-btn" onclick="fitToScreen()">Fit</button>
695
+ <div class="tool-sep"></div>
696
+ <button class="tool-btn" onclick="zoomIn()">+</button>
697
+ <button class="tool-btn" onclick="zoomOut()">&minus;</button>
698
+ <div class="tool-sep"></div>
699
+ <button class="tool-btn" onclick="resetZoom()">Reset</button>
700
+ <div class="tool-sep"></div>
701
+ <button class="tool-btn" onclick="downloadPNG()" title="Download PNG">&#128247; PNG</button>
702
+ </div>
703
+ <div class="zoom-indicator" id="zoom-level">100%</div>
704
+ <svg id="canvas">
705
+ <defs>
706
+ <marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse">
707
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#0078D4" opacity="0.5"/>
708
+ </marker>
709
+ <marker id="arr-data" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse">
710
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#0F9D58" opacity="0.5"/>
711
+ </marker>
712
+ <marker id="arr-sec" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse">
713
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#E8A000" opacity="0.5"/>
714
+ </marker>
715
+ <marker id="arr-pe" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse">
716
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="#5C2D91" opacity="0.5"/>
717
+ </marker>
718
+ <filter id="shadow">
719
+ <feDropShadow dx="0" dy="1" stdDeviation="2" flood-opacity="0.08"/>
720
+ </filter>
721
+ </defs>
722
+ <g id="diagram-root"></g>
723
+ </svg>
724
+ <div id="tooltip" class="tooltip"></div>
725
+ <div class="status-bar">Drag nodes &middot; Scroll to zoom &middot; Drag empty space to pan</div>
726
+ </div>
727
+
728
+ <div class="sidebar">
729
+ <div class="sidebar-header">Resources</div>
730
+ <div id="service-list"></div>
731
+ <div class="legend">
732
+ <div class="legend-title">Connection Types</div>
733
+ <div class="legend-item"><div class="legend-line" style="background:#0078D4;"></div> API</div>
734
+ <div class="legend-item"><div class="legend-line" style="background:#0F9D58;"></div> Data</div>
735
+ <div class="legend-item"><div class="legend-line-dash" style="border-color:#E8A000;"></div> Security</div>
736
+ <div class="legend-item"><div class="legend-line-dash" style="border-color:#5C2D91;"></div> Private Endpoint</div>
737
+ </div>
738
+ </div>
739
+ </div>
740
+
741
+ <script>
742
+ const NODES = {nodes_js};
743
+ const EDGES = {edges_js};
744
+ const VNET_INFO = {vnet_info_js};
745
+ const HIERARCHY = {hierarchy_js};
746
+
747
+ // ── Node sizing ──
748
+ const SVC_W = 150, SVC_H = 100; // service node (icon above, name below)
749
+ const PE_W = 100, PE_H = 70; // pe node (smaller)
750
+ const GAP = 40;
751
+
752
+ // ── Layout: Category Group Box style ──
753
+ // Each category gets a labeled box, services arranged in a grid inside.
754
+ // Groups arranged in 2D: main service groups on top, bottom groups below.
755
+ // PE nodes in a separate PE subnet group.
756
+
757
+ const positions = {{}};
758
+ const useRgLayout = HIERARCHY.length > 0 && NODES.some(n => n.resourceGroup);
759
+ const peNodes = useRgLayout ? [] : NODES.filter(n => n.type === 'pe'); // RG mode: PE included in mainNodes
760
+ const mainNodes = useRgLayout ? NODES : NODES.filter(n => n.type !== 'pe');
761
+
762
+ // Group box layout parameters
763
+ const GROUP_PAD = 24;
764
+ const GROUP_TITLE_H = 28;
765
+ const GROUP_GAP = 50;
766
+ const COLS_PER_GROUP = 3;
767
+ const CELL_W = SVC_W + 70;
768
+ const CELL_H = SVC_H + 70;
769
+
770
+ function groupDimensions(nodeCount) {{
771
+ const cols = Math.min(nodeCount, COLS_PER_GROUP);
772
+ const rows = Math.ceil(nodeCount / COLS_PER_GROUP);
773
+ const w = cols * CELL_W + GROUP_PAD * 2;
774
+ const h = rows * CELL_H + GROUP_PAD + GROUP_TITLE_H;
775
+ return {{ w, h, cols, rows }};
776
+ }}
777
+
778
+ const groupBoxes = [];
779
+
780
+ // ── Layout strategy: RG-based (if HIERARCHY) or Category-based (default) ──
781
+
782
+ if (useRgLayout) {{
783
+ // ── RG-based layout: group by Subscription > ResourceGroup ──
784
+ let gx = 60, gy = 140;
785
+ let subStartX = 60;
786
+ const SUB_GAP = 80;
787
+ const RG_GAP = 60;
788
+
789
+ HIERARCHY.forEach((sub, subIdx) => {{
790
+ let rgX = gx;
791
+ let rgMaxH = 0;
792
+
793
+ const subRGs = sub.resourceGroups || [];
794
+ subRGs.forEach((rgName, rgIdx) => {{
795
+ const rgNodes = mainNodes.filter(n => n.subscription === sub.subscription && n.resourceGroup === rgName);
796
+ if (rgNodes.length === 0) return;
797
+
798
+ const dim = groupDimensions(rgNodes.length);
799
+
800
+ rgNodes.forEach((n, i) => {{
801
+ const col = i % dim.cols;
802
+ const row = Math.floor(i / dim.cols);
803
+ positions[n.id] = {{
804
+ x: rgX + GROUP_PAD + col * CELL_W + (CELL_W - SVC_W) / 2,
805
+ y: gy + GROUP_TITLE_H + row * CELL_H + (CELL_H - SVC_H) / 2
806
+ }};
807
+ }});
808
+
809
+ groupBoxes.push({{
810
+ cat: rgName, x: rgX, y: gy, w: dim.w, h: dim.h,
811
+ color: rgNodes[0]?.color || '#0078D4',
812
+ isRG: true, subscription: sub.subscription
813
+ }});
814
+
815
+ rgX += dim.w + RG_GAP;
816
+ rgMaxH = Math.max(rgMaxH, dim.h);
817
+ }});
818
+
819
+ // Next subscription row
820
+ if (subIdx < HIERARCHY.length - 1) {{
821
+ gy += rgMaxH + SUB_GAP;
822
+ gx = subStartX;
823
+ }}
824
+ }});
825
+
826
+ // Place unassigned main nodes (no subscription/RG) in a generic group
827
+ const unassigned = mainNodes.filter(n => !positions[n.id]);
828
+ if (unassigned.length > 0) {{
829
+ const allY = Object.values(positions).map(p => p.y);
830
+ const bottomY = allY.length > 0 ? Math.max(...allY) + SVC_H + GROUP_GAP : 140;
831
+ const dim = groupDimensions(unassigned.length);
832
+ unassigned.forEach((n, i) => {{
833
+ const col = i % dim.cols;
834
+ const row = Math.floor(i / dim.cols);
835
+ positions[n.id] = {{
836
+ x: 60 + GROUP_PAD + col * CELL_W + (CELL_W - SVC_W) / 2,
837
+ y: bottomY + GROUP_TITLE_H + row * CELL_H + (CELL_H - SVC_H) / 2
838
+ }};
839
+ }});
840
+ groupBoxes.push({{
841
+ cat: 'Other', x: 60, y: bottomY, w: dim.w, h: dim.h,
842
+ color: '#666'
843
+ }});
844
+ }}
845
+
846
+ }} else {{
847
+ // ── Category-based layout (original) ──
848
+ const bottomCategories = ['Network', 'External', 'Monitor', 'Monitoring'];
849
+ const catOrder = ['AI', 'Data', 'Security', 'Compute', 'Integration', 'DevOps', 'IoT', 'Azure'];
850
+
851
+ const catGroups = {{}};
852
+ mainNodes.forEach(n => {{
853
+ const cat = n.category || 'Azure';
854
+ if (!catGroups[cat]) catGroups[cat] = [];
855
+ catGroups[cat].push(n);
856
+ }});
857
+
858
+ // Dynamically include any categories not in catOrder or bottomCategories
859
+ const extraCats = Object.keys(catGroups).filter(cat => !catOrder.includes(cat) && !bottomCategories.includes(cat));
860
+ const fullCatOrder = [...catOrder, ...extraCats];
861
+
862
+ // ── Place main service groups in a flowing grid ──
863
+ const serviceGroups = fullCatOrder.filter(cat => catGroups[cat] && catGroups[cat].length > 0
864
+ && !bottomCategories.includes(cat));
865
+
866
+ let gx = 60, gy = 140; // starting position for service groups
867
+ let rowMaxH = 0;
868
+ let rowStartX = 60;
869
+ const MAX_ROW_W = Math.max(1600, serviceGroups.length * 400); // wider to keep Security alongside AI/Data
870
+
871
+ serviceGroups.forEach(cat => {{
872
+ const nodes = catGroups[cat];
873
+ const dim = groupDimensions(nodes.length);
874
+
875
+ // Wrap to next row if too wide
876
+ if (gx + dim.w > rowStartX + MAX_ROW_W && gx > rowStartX) {{
877
+ gx = rowStartX;
878
+ gy += rowMaxH + GROUP_GAP;
879
+ rowMaxH = 0;
880
+ }}
881
+
882
+ // Place nodes inside group grid
883
+ nodes.forEach((n, i) => {{
884
+ const col = i % dim.cols;
885
+ const row = Math.floor(i / dim.cols);
886
+ positions[n.id] = {{
887
+ x: gx + GROUP_PAD + col * CELL_W + (CELL_W - SVC_W) / 2,
888
+ y: gy + GROUP_TITLE_H + row * CELL_H + (CELL_H - SVC_H) / 2
889
+ }};
890
+ }});
891
+
892
+ groupBoxes.push({{
893
+ cat, x: gx, y: gy, w: dim.w, h: dim.h,
894
+ color: nodes[0]?.color || '#0078D4'
895
+ }});
896
+
897
+ gx += dim.w + GROUP_GAP;
898
+ rowMaxH = Math.max(rowMaxH, dim.h);
899
+ }});
900
+
901
+ // ── Place bottom groups (Network, External, Monitor) ──
902
+ const bottomGroupY = gy + rowMaxH + GROUP_GAP + 20;
903
+ let bgx = 60;
904
+ bottomCategories.forEach(cat => {{
905
+ const nodes = catGroups[cat];
906
+ if (!nodes || nodes.length === 0) return;
907
+ const dim = groupDimensions(nodes.length);
908
+
909
+ nodes.forEach((n, i) => {{
910
+ const col = i % dim.cols;
911
+ const row = Math.floor(i / dim.cols);
912
+ positions[n.id] = {{
913
+ x: bgx + GROUP_PAD + col * CELL_W + (CELL_W - SVC_W) / 2,
914
+ y: bottomGroupY + GROUP_TITLE_H + row * CELL_H + (CELL_H - SVC_H) / 2
915
+ }};
916
+ }});
917
+
918
+ groupBoxes.push({{
919
+ cat, x: bgx, y: bottomGroupY, w: dim.w, h: dim.h,
920
+ color: nodes[0]?.color || '#666',
921
+ isBottom: true
922
+ }});
923
+
924
+ bgx += dim.w + GROUP_GAP;
925
+ }});
926
+
927
+ }} // end of else (category-based layout)
928
+
929
+ // ── PE nodes placement ──
930
+ if (useRgLayout) {{
931
+ // RG mode: PE nodes go inside their respective RG boxes
932
+ // PE positions are already set by the RG layout if they have subscription/resourceGroup
933
+ // For PEs without RG assignment, place them in a separate group
934
+ const unplacedPEs = peNodes.filter(pe => !positions[pe.id]);
935
+ if (unplacedPEs.length > 0) {{
936
+ // Find the rightmost RG box position
937
+ const allGbRight = groupBoxes.length > 0 ? Math.max(...groupBoxes.map(gb => gb.x + gb.w)) : 0;
938
+ const peStartX = allGbRight + GROUP_GAP;
939
+ const peStartY = 140;
940
+ const peCols = Math.min(unplacedPEs.length, 4);
941
+ const peCellW = PE_W + 50;
942
+ const peCellH = PE_H + 30;
943
+ const peBoxW = peCols * peCellW + GROUP_PAD * 2;
944
+ const peRows = Math.ceil(unplacedPEs.length / peCols);
945
+ const peBoxH = peRows * peCellH + GROUP_PAD + GROUP_TITLE_H;
946
+
947
+ unplacedPEs.forEach((pe, i) => {{
948
+ const col = i % peCols;
949
+ const row = Math.floor(i / peCols);
950
+ positions[pe.id] = {{
951
+ x: peStartX + GROUP_PAD + col * peCellW + (peCellW - PE_W) / 2,
952
+ y: peStartY + GROUP_TITLE_H + row * peCellH + (peCellH - PE_H) / 2
953
+ }};
954
+ }});
955
+ groupBoxes.push({{
956
+ cat: 'Private Endpoints', x: peStartX, y: peStartY, w: peBoxW, h: peBoxH,
957
+ color: '#5C2D91', isPE: true
958
+ }});
959
+ }}
960
+ }} else {{
961
+ // Category mode: PE nodes in separate group above service groups
962
+ const PE_Y = 40;
963
+ if (peNodes.length > 0) {{
964
+ const peCols = Math.min(peNodes.length, 6);
965
+ const peRows = Math.ceil(peNodes.length / peCols);
966
+ const peCellW = PE_W + 50;
967
+ const peCellH = PE_H + 30;
968
+ const peBoxW = peCols * peCellW + GROUP_PAD * 2;
969
+ const peBoxH = peRows * peCellH + GROUP_PAD + GROUP_TITLE_H;
970
+
971
+ peNodes.forEach((pe, i) => {{
972
+ const col = i % peCols;
973
+ const row = Math.floor(i / peCols);
974
+ positions[pe.id] = {{
975
+ x: 60 + GROUP_PAD + col * peCellW + (peCellW - PE_W) / 2,
976
+ y: PE_Y + GROUP_TITLE_H + row * peCellH + (peCellH - PE_H) / 2
977
+ }};
978
+ }});
979
+
980
+ groupBoxes.push({{
981
+ cat: 'Private Endpoints', x: 60, y: PE_Y, w: peBoxW, h: peBoxH,
982
+ color: '#5C2D91', isPE: true
983
+ }});
984
+
985
+ const peBottom = PE_Y + peBoxH + GROUP_GAP;
986
+ if (peBottom > 140) {{
987
+ const shift = peBottom - 140;
988
+ NODES.forEach(n => {{
989
+ if (n.type !== 'pe' && positions[n.id]) {{
990
+ positions[n.id].y += shift;
991
+ }}
992
+ }});
993
+ groupBoxes.forEach(gb => {{
994
+ if (!gb.isPE) gb.y += shift;
995
+ }});
996
+ }}
997
+ }}
998
+ }}
999
+
1000
+ // ── Node → Group mapping (for edge routing) ──
1001
+ const nodeGroupMap = {{}};
1002
+ groupBoxes.forEach((gb, idx) => {{
1003
+ NODES.forEach(n => {{
1004
+ const pos = positions[n.id];
1005
+ if (!pos) return;
1006
+ const nw = n.type === 'pe' ? PE_W : SVC_W;
1007
+ const nh = n.type === 'pe' ? PE_H : SVC_H;
1008
+ const ncx = pos.x + nw / 2;
1009
+ const ncy = pos.y + nh / 2;
1010
+ if (ncx >= gb.x && ncx <= gb.x + gb.w && ncy >= gb.y && ncy <= gb.y + gb.h) {{
1011
+ nodeGroupMap[n.id] = idx;
1012
+ }}
1013
+ }});
1014
+ }});
1015
+ // Routing corridor margins (outside all group boxes)
1016
+ const _rightMarginBase = groupBoxes.length > 0 ? Math.max(...groupBoxes.map(g => g.x + g.w)) + 40 : 800;
1017
+ const _leftMarginBase = groupBoxes.length > 0 ? Math.min(...groupBoxes.map(g => g.x)) - 40 : -40;
1018
+
1019
+ // ── State ──
1020
+ let dragging = null, dragOffX = 0, dragOffY = 0;
1021
+ let draggingGroup = null, groupDragNodes = []; // for RG/group box dragging
1022
+ let viewTransform = {{ x: 0, y: 0, scale: 1 }};
1023
+ let isPanning = false, panSX = 0, panSY = 0, panSTx = 0, panSTy = 0;
1024
+ let _routeCounter = 0;
1025
+
1026
+ // ── Bidirectional highlight ──
1027
+ let _selectedNodeId = null;
1028
+
1029
+ function selectNode(nodeId) {{
1030
+ const wasSelected = _selectedNodeId === nodeId;
1031
+
1032
+ // Clear all selections
1033
+ clearSelection();
1034
+
1035
+ // Toggle off if clicking same node
1036
+ if (wasSelected) {{ _selectedNodeId = null; return; }}
1037
+
1038
+ _selectedNodeId = nodeId;
1039
+
1040
+ // Highlight diagram node
1041
+ const svgNode = document.querySelector(`.node[data-id="${{nodeId}}"]`);
1042
+ if (svgNode) svgNode.classList.add('selected');
1043
+ // Highlight sidebar card
1044
+ const card = document.getElementById('card-' + nodeId);
1045
+ if (card) {{ card.classList.add('selected'); card.scrollIntoView({{ behavior: 'smooth', block: 'nearest' }}); }}
1046
+
1047
+ // Find connected edges (where this node is from or to)
1048
+ const connectedNodeIds = new Set([nodeId]);
1049
+ document.querySelectorAll('.edge-path').forEach(p => {{
1050
+ const f = p.getAttribute('data-from'), t = p.getAttribute('data-to');
1051
+ if (f === nodeId || t === nodeId) {{
1052
+ p.classList.add('highlight');
1053
+ connectedNodeIds.add(f);
1054
+ connectedNodeIds.add(t);
1055
+ }} else {{
1056
+ p.classList.add('dimmed');
1057
+ }}
1058
+ }});
1059
+ document.querySelectorAll('.edge-label').forEach(g => {{
1060
+ const f = g.getAttribute('data-from'), t = g.getAttribute('data-to');
1061
+ if (f === nodeId || t === nodeId) {{
1062
+ g.classList.add('highlight');
1063
+ g.querySelector('.edge-label-bg')?.classList.add('highlight');
1064
+ }} else {{
1065
+ g.classList.add('dimmed');
1066
+ g.querySelector('.edge-label-bg')?.classList.add('dimmed');
1067
+ }}
1068
+ }});
1069
+ // Dim unconnected nodes
1070
+ document.querySelectorAll('.node').forEach(n => {{
1071
+ const nid = n.getAttribute('data-id');
1072
+ if (!connectedNodeIds.has(nid)) n.classList.add('dimmed');
1073
+ }});
1074
+ }}
1075
+
1076
+ function clearSelection() {{
1077
+ _selectedNodeId = null;
1078
+ document.querySelectorAll('.node').forEach(n => {{ n.classList.remove('selected', 'dimmed'); }});
1079
+ document.querySelectorAll('.service-card').forEach(c => c.classList.remove('selected'));
1080
+ document.querySelectorAll('.edge-path').forEach(p => {{ p.classList.remove('highlight', 'dimmed'); }});
1081
+ document.querySelectorAll('.edge-label').forEach(g => {{ g.classList.remove('highlight', 'dimmed'); }});
1082
+ document.querySelectorAll('.edge-label-bg').forEach(r => {{ r.classList.remove('highlight', 'dimmed'); }});
1083
+ }}
1084
+
1085
+ function markerFor(type) {{
1086
+ if (type === 'data') return 'arr-data';
1087
+ if (type === 'security') return 'arr-sec';
1088
+ if (type === 'private') return 'arr-pe';
1089
+ return 'arr';
1090
+ }}
1091
+
1092
+ function renderDiagram() {{
1093
+ const root = document.getElementById('diagram-root');
1094
+ root.innerHTML = '';
1095
+ _routeCounter = 0; // reset stagger counter each render
1096
+
1097
+ // ── Draw VNet boundary (only in category-based layout, not RG layout) ──
1098
+ if (!useRgLayout) {{
1099
+ const privateGroups = groupBoxes.filter(gb => !gb.isBottom);
1100
+ const hasPrivateNodes = NODES.some(n => n.private && n.type !== 'pe');
1101
+ const hasVNetInfo = VNET_INFO && VNET_INFO.length > 0;
1102
+ const hasPeNodes = NODES.some(n => n.type === 'pe');
1103
+ const showVNet = hasPrivateNodes || hasVNetInfo || hasPeNodes;
1104
+
1105
+ if (privateGroups.length > 0 && showVNet) {{
1106
+ const vx = Math.min(...privateGroups.map(g => g.x)) - 16;
1107
+ const vy = Math.min(...privateGroups.map(g => g.y)) - 36;
1108
+ const vRight = Math.max(...privateGroups.map(g => g.x + g.w)) + 16;
1109
+ const vBottom = Math.max(...privateGroups.map(g => g.y + g.h)) + 16;
1110
+
1111
+ const vr = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1112
+ vr.setAttribute('x', vx); vr.setAttribute('y', vy);
1113
+ vr.setAttribute('width', vRight - vx); vr.setAttribute('height', vBottom - vy);
1114
+ vr.setAttribute('fill', '#f8f7ff'); vr.setAttribute('stroke', '#5C2D91');
1115
+ vr.setAttribute('stroke-width', '2'); vr.setAttribute('stroke-dasharray', '8,4');
1116
+ vr.setAttribute('rx', '12');
1117
+ root.appendChild(vr);
1118
+
1119
+ const vnetLabel = VNET_INFO ? `Virtual Network (${{VNET_INFO}})` : 'Virtual Network';
1120
+ const vl = document.createElementNS('http://www.w3.org/2000/svg', 'g');
1121
+ vl.setAttribute('class', 'vnet-boundary-label');
1122
+ vl.setAttribute('style', 'cursor: pointer;');
1123
+ vl.innerHTML = `<svg x="${{vx + 10}}" y="${{vy + 6}}" width="20" height="20" viewBox="0 0 48 48">
1124
+ <rect x="6" y="6" width="36" height="36" rx="4" fill="none" stroke="#5C2D91" stroke-width="3"/>
1125
+ <circle cx="16" cy="18" r="3" fill="#5C2D91"/><circle cx="32" cy="18" r="3" fill="#5C2D91"/><circle cx="24" cy="32" r="3" fill="#5C2D91"/>
1126
+ </svg>
1127
+ <text x="${{vx + 34}}" y="${{vy + 20}}" font-size="12" font-weight="600" fill="#5C2D91" font-family="Segoe UI, sans-serif">${{vnetLabel}}</text>`;
1128
+ root.appendChild(vl);
1129
+
1130
+ // Store VNet rect reference for highlight
1131
+ vr.setAttribute('id', 'vnet-rect');
1132
+ vl.addEventListener('click', () => {{ toggleVNetHighlight(); }});
1133
+ root.appendChild(vl);
1134
+ }}
1135
+ }} // end if(!useRgLayout) for VNet boundary
1136
+
1137
+ // ── Draw group boxes (category or RG — depends on layout mode) ──
1138
+ groupBoxes.forEach(gb => {{
1139
+ if (gb.isPE) {{
1140
+ // PE group — always draw with dashed style
1141
+ const gr = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1142
+ gr.setAttribute('x', gb.x); gr.setAttribute('y', gb.y);
1143
+ gr.setAttribute('width', gb.w); gr.setAttribute('height', gb.h);
1144
+ gr.setAttribute('rx', '8'); gr.setAttribute('fill', '#f3eef9');
1145
+ gr.setAttribute('stroke', '#d4b8ff'); gr.setAttribute('stroke-width', '1');
1146
+ gr.setAttribute('stroke-dasharray', '4,4');
1147
+ root.appendChild(gr);
1148
+ }} else {{
1149
+ // Service group (category or RG)
1150
+ const gr = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1151
+ gr.setAttribute('x', gb.x); gr.setAttribute('y', gb.y);
1152
+ gr.setAttribute('width', gb.w); gr.setAttribute('height', gb.h);
1153
+ gr.setAttribute('rx', '8');
1154
+ gr.setAttribute('fill', gb.isRG ? '#fafafa' : 'white');
1155
+ gr.setAttribute('stroke', gb.isRG ? gb.color : '#e1dfdd');
1156
+ gr.setAttribute('stroke-width', gb.isRG ? '1.5' : '1');
1157
+ if (gb.isRG) gr.setAttribute('stroke-dasharray', '6,3');
1158
+ root.appendChild(gr);
1159
+ }}
1160
+
1161
+ // Title bar
1162
+ const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1163
+ titleBar.setAttribute('x', gb.x); titleBar.setAttribute('y', gb.y);
1164
+ titleBar.setAttribute('width', gb.w); titleBar.setAttribute('height', GROUP_TITLE_H);
1165
+ titleBar.setAttribute('rx', '8');
1166
+ titleBar.setAttribute('fill', gb.color);
1167
+ titleBar.setAttribute('opacity', '0.1');
1168
+ root.appendChild(titleBar);
1169
+ const titleFill = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1170
+ titleFill.setAttribute('x', gb.x); titleFill.setAttribute('y', gb.y + GROUP_TITLE_H - 8);
1171
+ titleFill.setAttribute('width', gb.w); titleFill.setAttribute('height', '8');
1172
+ titleFill.setAttribute('fill', gb.color); titleFill.setAttribute('opacity', '0.1');
1173
+ root.appendChild(titleFill);
1174
+
1175
+ // Color accent line
1176
+ const accent = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1177
+ accent.setAttribute('x', gb.x); accent.setAttribute('y', gb.y);
1178
+ accent.setAttribute('width', gb.w); accent.setAttribute('height', '3');
1179
+ accent.setAttribute('rx', '8'); accent.setAttribute('fill', gb.color);
1180
+ root.appendChild(accent);
1181
+
1182
+ // Group label — RG uses 📁, PE uses "Private Endpoints", category uses category name
1183
+ const label = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1184
+ label.setAttribute('x', gb.x + 12); label.setAttribute('y', gb.y + 18);
1185
+ label.setAttribute('font-size', '11'); label.setAttribute('font-weight', '600');
1186
+ label.setAttribute('fill', gb.color); label.setAttribute('font-family', 'Segoe UI, sans-serif');
1187
+ label.textContent = gb.isRG ? `📁 ${{gb.cat}}` : gb.cat;
1188
+ root.appendChild(label);
1189
+
1190
+ // Make title bar draggable — drags all nodes inside
1191
+ titleBar.style.cursor = 'grab';
1192
+ const gbIdx = groupBoxes.indexOf(gb);
1193
+ titleBar.addEventListener('mousedown', e => {{
1194
+ if (e.button !== 0) return;
1195
+ e.stopPropagation(); e.preventDefault();
1196
+ draggingGroup = gbIdx;
1197
+ const svgPt = getSVGPoint(e);
1198
+ dragOffX = svgPt.x; dragOffY = svgPt.y;
1199
+ // Find all nodes inside this group box
1200
+ groupDragNodes = NODES.filter(n => {{
1201
+ const pos = positions[n.id];
1202
+ if (!pos) return false;
1203
+ const nw = n.type === 'pe' ? PE_W : SVC_W;
1204
+ const nh = n.type === 'pe' ? PE_H : SVC_H;
1205
+ const cx = pos.x + nw/2, cy = pos.y + nh/2;
1206
+ return cx >= gb.x && cx <= gb.x + gb.w && cy >= gb.y && cy <= gb.y + gb.h;
1207
+ }}).map(n => n.id);
1208
+ }});
1209
+ }});
1210
+
1211
+ // ── Draw Subscription boundaries (only if multiple subscriptions, rendered AFTER group boxes) ──
1212
+ if (HIERARCHY.length > 1 && useRgLayout) {{
1213
+ HIERARCHY.forEach((sub, subIdx) => {{
1214
+ // Find all RG boxes belonging to this subscription
1215
+ const subRgBoxes = groupBoxes.filter(gb => gb.isRG && gb.subscription === sub.subscription);
1216
+ if (subRgBoxes.length === 0) return;
1217
+
1218
+ const sx = Math.min(...subRgBoxes.map(gb => gb.x)) - 20;
1219
+ const sy = Math.min(...subRgBoxes.map(gb => gb.y)) - 40;
1220
+ const sRight = Math.max(...subRgBoxes.map(gb => gb.x + gb.w)) + 20;
1221
+ const sBottom = Math.max(...subRgBoxes.map(gb => gb.y + gb.h)) + 20;
1222
+
1223
+ const sr = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1224
+ sr.setAttribute('x', sx); sr.setAttribute('y', sy);
1225
+ sr.setAttribute('width', sRight - sx); sr.setAttribute('height', sBottom - sy);
1226
+ sr.setAttribute('fill', 'none'); sr.setAttribute('stroke', '#0078D4');
1227
+ sr.setAttribute('stroke-width', '2.5'); sr.setAttribute('stroke-dasharray', '12,4');
1228
+ sr.setAttribute('rx', '16'); sr.setAttribute('opacity', '0.7');
1229
+ root.appendChild(sr);
1230
+
1231
+ const sl = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1232
+ sl.setAttribute('x', sx + 12); sl.setAttribute('y', sy + 16);
1233
+ sl.setAttribute('font-size', '12'); sl.setAttribute('font-weight', '700');
1234
+ sl.setAttribute('fill', '#0078D4'); sl.setAttribute('font-family', 'Segoe UI, sans-serif');
1235
+ sl.textContent = `📦 ${{sub.subscription}}`;
1236
+ root.appendChild(sl);
1237
+ }});
1238
+ }}
1239
+
1240
+ // ── Edge routing (obstacle-free) ──
1241
+ // Compute global bounds: the absolute bottom of ALL nodes
1242
+ function getGlobalBounds() {{
1243
+ let minY = Infinity, maxY = -Infinity;
1244
+ NODES.forEach(n => {{
1245
+ const pos = positions[n.id];
1246
+ if (!pos) return;
1247
+ const h = n.type === 'pe' ? PE_H : SVC_H;
1248
+ if (pos.y < minY) minY = pos.y;
1249
+ if (pos.y + h > maxY) maxY = pos.y + h;
1250
+ }});
1251
+ return {{ minY, maxY }};
1252
+ }}
1253
+
1254
+ function getNodeBox(node) {{
1255
+ const pos = positions[node.id];
1256
+ if (!pos) return null;
1257
+ const w = node.type === 'pe' ? PE_W : SVC_W;
1258
+ const h = node.type === 'pe' ? PE_H : SVC_H;
1259
+ return {{ x: pos.x, y: pos.y, w, h, cx: pos.x + w/2, cy: pos.y + h/2 }};
1260
+ }}
1261
+
1262
+ // Check if direct line between two nodes crosses ANY other node
1263
+ function hasObstacle(fromId, toId, x1, y1, x2, y2) {{
1264
+ for (const n of NODES) {{
1265
+ if (n.id === fromId || n.id === toId) continue;
1266
+ const pos = positions[n.id];
1267
+ if (!pos) continue;
1268
+ const w = n.type === 'pe' ? PE_W : SVC_W;
1269
+ const h = n.type === 'pe' ? PE_H : SVC_H;
1270
+ const pad = 6;
1271
+ const left = pos.x - pad, right = pos.x + w + pad;
1272
+ const top = pos.y - pad, bottom = pos.y + h + pad;
1273
+ // Liang-Barsky line clipping
1274
+ const dx = x2 - x1, dy = y2 - y1;
1275
+ let tmin = 0, tmax = 1;
1276
+ const edges = [[-dx, x1 - left], [dx, right - x1], [-dy, y1 - top], [dy, bottom - y1]];
1277
+ let hit = true;
1278
+ for (const [p, q] of edges) {{
1279
+ if (Math.abs(p) < 0.001) {{ if (q < 0) {{ hit = false; break; }} }}
1280
+ else {{
1281
+ const t = q / p;
1282
+ if (p < 0) {{ if (t > tmin) tmin = t; }}
1283
+ else {{ if (t < tmax) tmax = t; }}
1284
+ if (tmin > tmax) {{ hit = false; break; }}
1285
+ }}
1286
+ }}
1287
+ if (hit && tmin < tmax) return true;
1288
+ }}
1289
+ return false;
1290
+ }}
1291
+
1292
+ // Border point: exit/enter at edge of rectangle
1293
+ function borderExit(box, side) {{
1294
+ // side: 'top', 'bottom', 'left', 'right'
1295
+ if (side === 'top') return {{ x: box.cx, y: box.y }};
1296
+ if (side === 'bottom') return {{ x: box.cx, y: box.y + box.h }};
1297
+ if (side === 'left') return {{ x: box.x, y: box.cy }};
1298
+ if (side === 'right') return {{ x: box.x + box.w, y: box.cy }};
1299
+ }}
1300
+
1301
+ // Check if a line segment hits any group box (for edge routing)
1302
+ function hitsGroupBox(x1, y1, x2, y2, skipGroupIndices) {{
1303
+ for (let gi = 0; gi < groupBoxes.length; gi++) {{
1304
+ if (skipGroupIndices.includes(gi)) continue;
1305
+ const gb = groupBoxes[gi];
1306
+ const pad = 4;
1307
+ const left = gb.x - pad, right = gb.x + gb.w + pad;
1308
+ const top = gb.y - pad, bottom = gb.y + gb.h + pad;
1309
+ const dx = x2 - x1, dy = y2 - y1;
1310
+ let tmin = 0, tmax = 1;
1311
+ const edges = [[-dx, x1 - left], [dx, right - x1], [-dy, y1 - top], [dy, bottom - y1]];
1312
+ let hit = true;
1313
+ for (const [p, q] of edges) {{
1314
+ if (Math.abs(p) < 0.001) {{ if (q < 0) {{ hit = false; break; }} }}
1315
+ else {{
1316
+ const t = q / p;
1317
+ if (p < 0) {{ if (t > tmin) tmin = t; }}
1318
+ else {{ if (t < tmax) tmax = t; }}
1319
+ if (tmin > tmax) {{ hit = false; break; }}
1320
+ }}
1321
+ }}
1322
+ if (hit && tmin < tmax) return true;
1323
+ }}
1324
+ return false;
1325
+ }}
1326
+
1327
+ // Find gap between adjacent groups (same row)
1328
+ function findGapBetween(gi1, gi2) {{
1329
+ if (gi1 < 0 || gi2 < 0) return null;
1330
+ const g1 = groupBoxes[gi1], g2 = groupBoxes[gi2];
1331
+ // Same row: Y ranges overlap
1332
+ const yOverlap = g1.y < g2.y + g2.h && g2.y < g1.y + g1.h;
1333
+ if (!yOverlap) return null;
1334
+ // Gap between them
1335
+ if (g1.x + g1.w < g2.x) return {{ x: (g1.x + g1.w + g2.x) / 2 }};
1336
+ if (g2.x + g2.w < g1.x) return {{ x: (g2.x + g2.w + g1.x) / 2 }};
1337
+ return null;
1338
+ }}
1339
+
1340
+ // Build orthogonal path with rounded corners
1341
+ function buildOrthoPath(pts) {{
1342
+ let d = `M ${{pts[0].x}} ${{pts[0].y}}`;
1343
+ const radius = 6;
1344
+ for (let i = 1; i < pts.length - 1; i++) {{
1345
+ const prev = pts[i-1], curr = pts[i], next = pts[i+1];
1346
+ const dx1 = curr.x - prev.x, dy1 = curr.y - prev.y;
1347
+ const dx2 = next.x - curr.x, dy2 = next.y - curr.y;
1348
+ const len1 = Math.sqrt(dx1*dx1 + dy1*dy1);
1349
+ const len2 = Math.sqrt(dx2*dx2 + dy2*dy2);
1350
+ if (len1 < 1 || len2 < 1) {{ d += ` L ${{curr.x}} ${{curr.y}}`; continue; }}
1351
+ const r = Math.min(radius, len1/2, len2/2);
1352
+ const bx = curr.x - (dx1/len1)*r, by = curr.y - (dy1/len1)*r;
1353
+ const ax = curr.x + (dx2/len2)*r, ay = curr.y + (dy2/len2)*r;
1354
+ d += ` L ${{bx}} ${{by}} Q ${{curr.x}} ${{curr.y}} ${{ax}} ${{ay}}`;
1355
+ }}
1356
+ d += ` L ${{pts[pts.length-1].x}} ${{pts[pts.length-1].y}}`;
1357
+ return d;
1358
+ }}
1359
+
1360
+ // ── Obstacle avoidance: route edges around nodes ──
1361
+ function segHitsNode(x1, y1, x2, y2, pos, nw, nh, margin) {{
1362
+ const nx1 = pos.x - margin, ny1 = pos.y - margin;
1363
+ const nx2 = pos.x + nw + margin, ny2 = pos.y + nh + margin;
1364
+ if (Math.abs(x1 - x2) < 1) {{
1365
+ // Vertical segment
1366
+ const x = x1;
1367
+ const minY = Math.min(y1, y2), maxY = Math.max(y1, y2);
1368
+ return x > nx1 && x < nx2 && maxY > ny1 && minY < ny2;
1369
+ }} else {{
1370
+ // Horizontal segment
1371
+ const y = y1;
1372
+ const minX = Math.min(x1, x2), maxX = Math.max(x1, x2);
1373
+ return y > ny1 && y < ny2 && maxX > nx1 && minX < nx2;
1374
+ }}
1375
+ }}
1376
+
1377
+ function avoidNodes(pts, fromId, toId) {{
1378
+ const MARGIN = 25;
1379
+ let points = pts.map(p => ({{...p}}));
1380
+ // Save original anchors — these must NEVER move (they attach to nodes)
1381
+ const startAnchor = {{...points[0]}};
1382
+ const endAnchor = {{...points[points.length - 1]}};
1383
+
1384
+ for (let iter = 0; iter < 8; iter++) {{
1385
+ let found = false;
1386
+
1387
+ for (let i = 0; i < points.length - 1 && !found; i++) {{
1388
+ const p1 = points[i], p2 = points[i+1];
1389
+
1390
+ for (const node of NODES) {{
1391
+ if (node.id === fromId || node.id === toId) continue;
1392
+ const pos = positions[node.id];
1393
+ if (!pos) continue;
1394
+ const nw = node.type === 'pe' ? PE_W : SVC_W;
1395
+ const nh = node.type === 'pe' ? PE_H : SVC_H;
1396
+
1397
+ if (!segHitsNode(p1.x, p1.y, p2.x, p2.y, pos, nw, nh, MARGIN)) continue;
1398
+
1399
+ found = true;
1400
+ const isVert = Math.abs(p1.x - p2.x) < 1;
1401
+ const isFirst = (i === 0);
1402
+ const isLast = (i + 1 === points.length - 1);
1403
+
1404
+ if (points.length <= 2) {{
1405
+ // Straight line hitting a node: convert to 4-point detour (anchors preserved)
1406
+ if (isVert) {{
1407
+ const leftX = pos.x - MARGIN;
1408
+ const rightX = pos.x + nw + MARGIN;
1409
+ const detourX = Math.abs(p1.x - leftX) <= Math.abs(p1.x - rightX) ? leftX : rightX;
1410
+ points = [points[0], {{x: detourX, y: p1.y}}, {{x: detourX, y: p2.y}}, points[points.length-1]];
1411
+ }} else {{
1412
+ const topY = pos.y - MARGIN;
1413
+ const bottomY = pos.y + nh + MARGIN;
1414
+ const detourY = Math.abs(p1.y - topY) <= Math.abs(p1.y - bottomY) ? topY : bottomY;
1415
+ points = [points[0], {{x: p1.x, y: detourY}}, {{x: p2.x, y: detourY}}, points[points.length-1]];
1416
+ }}
1417
+ }} else if (isFirst) {{
1418
+ // First segment collides — keep points[0] (anchor), insert detour after it
1419
+ if (isVert) {{
1420
+ const leftX = pos.x - MARGIN;
1421
+ const rightX = pos.x + nw + MARGIN;
1422
+ const detourX = Math.abs(p1.x - leftX) <= Math.abs(p1.x - rightX) ? leftX : rightX;
1423
+ points.splice(1, 0, {{x: p1.x, y: p1.y}}, {{x: detourX, y: p1.y}});
1424
+ points[3] = {{x: detourX, y: p2.y}};
1425
+ }} else {{
1426
+ const topY = pos.y - MARGIN;
1427
+ const bottomY = pos.y + nh + MARGIN;
1428
+ const detourY = Math.abs(p1.y - topY) <= Math.abs(p1.y - bottomY) ? topY : bottomY;
1429
+ points.splice(1, 0, {{x: p1.x, y: detourY}});
1430
+ points[2] = {{x: p2.x, y: detourY}};
1431
+ }}
1432
+ }} else if (isLast) {{
1433
+ // Last segment collides — keep last point (anchor), insert detour before it
1434
+ if (isVert) {{
1435
+ const leftX = pos.x - MARGIN;
1436
+ const rightX = pos.x + nw + MARGIN;
1437
+ const detourX = Math.abs(p1.x - leftX) <= Math.abs(p1.x - rightX) ? leftX : rightX;
1438
+ points[i] = {{x: detourX, y: p1.y}};
1439
+ points.splice(i + 1, 0, {{x: detourX, y: p2.y}}, {{x: p2.x, y: p2.y}});
1440
+ }} else {{
1441
+ const topY = pos.y - MARGIN;
1442
+ const bottomY = pos.y + nh + MARGIN;
1443
+ const detourY = Math.abs(p1.y - topY) <= Math.abs(p1.y - bottomY) ? topY : bottomY;
1444
+ points[i] = {{x: p1.x, y: detourY}};
1445
+ points.splice(i + 1, 0, {{x: p2.x, y: detourY}});
1446
+ }}
1447
+ }} else {{
1448
+ // Middle segment: safe to push both endpoints
1449
+ if (isVert) {{
1450
+ const leftX = pos.x - MARGIN;
1451
+ const rightX = pos.x + nw + MARGIN;
1452
+ const newX = Math.abs(p1.x - leftX) <= Math.abs(p1.x - rightX) ? leftX : rightX;
1453
+ points[i] = {{ x: newX, y: p1.y }};
1454
+ points[i+1] = {{ x: newX, y: p2.y }};
1455
+ }} else {{
1456
+ const topY = pos.y - MARGIN;
1457
+ const bottomY = pos.y + nh + MARGIN;
1458
+ const newY = Math.abs(p1.y - topY) <= Math.abs(p1.y - bottomY) ? topY : bottomY;
1459
+ points[i] = {{ x: p1.x, y: newY }};
1460
+ points[i+1] = {{ x: p2.x, y: newY }};
1461
+ }}
1462
+ }}
1463
+ break;
1464
+ }}
1465
+ }}
1466
+
1467
+ if (!found) break;
1468
+ }}
1469
+
1470
+ // Restore anchors — guarantee lines always touch source/target nodes
1471
+ points[0] = startAnchor;
1472
+ points[points.length - 1] = endAnchor;
1473
+
1474
+ return points;
1475
+ }}
1476
+
1477
+ // ── Edges (rendered FIRST — nodes render on top, covering crossings) ──
1478
+ // Edge labels are collected and rendered AFTER nodes so they stay visible.
1479
+ // Orthogonal routing only: horizontal/vertical segments with right-angle turns.
1480
+ const _edgeLabels = [];
1481
+ EDGES.forEach(edge => {{
1482
+ const fn = NODES.find(n => n.id === edge.from);
1483
+ const tn = NODES.find(n => n.id === edge.to);
1484
+ if (!fn || !tn) return;
1485
+ const fromBox = getNodeBox(fn);
1486
+ const toBox = getNodeBox(tn);
1487
+ if (!fromBox || !toBox) return;
1488
+
1489
+ const isPeEdge = edge.type === 'private';
1490
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
1491
+ let pts;
1492
+
1493
+ if (isPeEdge) {{
1494
+ // PE → orthogonal routing (also avoids nodes)
1495
+ const sx = fromBox.cx, sy = fromBox.y + fromBox.h;
1496
+ const ex = toBox.cx, ey = toBox.y;
1497
+ if (Math.abs(sx - ex) < 8) {{
1498
+ pts = [{{x: sx, y: sy}}, {{x: ex, y: ey}}];
1499
+ }} else {{
1500
+ const midY = (sy + ey) / 2;
1501
+ pts = [{{x: sx, y: sy}}, {{x: sx, y: midY}}, {{x: ex, y: midY}}, {{x: ex, y: ey}}];
1502
+ }}
1503
+ pts = avoidNodes(pts, edge.from, edge.to);
1504
+ }} else {{
1505
+ // Orthogonal routing: determine exit/entry sides
1506
+ const dx = toBox.cx - fromBox.cx;
1507
+ const dy = toBox.cy - fromBox.cy;
1508
+ let exitSide, entrySide;
1509
+
1510
+ if (Math.abs(dx) >= Math.abs(dy)) {{
1511
+ exitSide = dx >= 0 ? 'right' : 'left';
1512
+ entrySide = dx >= 0 ? 'left' : 'right';
1513
+ }} else {{
1514
+ exitSide = dy >= 0 ? 'bottom' : 'top';
1515
+ entrySide = dy >= 0 ? 'top' : 'bottom';
1516
+ }}
1517
+
1518
+ const sp = borderExit(fromBox, exitSide);
1519
+ const ep = borderExit(toBox, entrySide);
1520
+ const stagger = (_routeCounter % 5 - 2) * 6;
1521
+ _routeCounter++;
1522
+
1523
+ if (exitSide === 'right' || exitSide === 'left') {{
1524
+ if (Math.abs(sp.y - ep.y) < 8) {{
1525
+ pts = [sp, ep]; // straight horizontal
1526
+ }} else {{
1527
+ const midX = (sp.x + ep.x) / 2 + stagger;
1528
+ pts = [sp, {{x: midX, y: sp.y}}, {{x: midX, y: ep.y}}, ep];
1529
+ }}
1530
+ }} else {{
1531
+ if (Math.abs(sp.x - ep.x) < 8) {{
1532
+ pts = [sp, ep]; // straight vertical
1533
+ }} else {{
1534
+ const midY = (sp.y + ep.y) / 2 + stagger;
1535
+ pts = [sp, {{x: sp.x, y: midY}}, {{x: ep.x, y: midY}}, ep];
1536
+ }}
1537
+ }}
1538
+
1539
+ // Avoid intermediate nodes
1540
+ pts = avoidNodes(pts, edge.from, edge.to);
1541
+ }}
1542
+
1543
+ // Render path
1544
+ path.setAttribute('d', pts.length <= 2
1545
+ ? `M ${{pts[0].x}} ${{pts[0].y}} L ${{pts[pts.length-1].x}} ${{pts[pts.length-1].y}}`
1546
+ : buildOrthoPath(pts));
1547
+ path.setAttribute('fill', 'none');
1548
+ path.setAttribute('stroke', isPeEdge ? '#5C2D91' : '#8a8886');
1549
+ path.setAttribute('stroke-width', isPeEdge ? '1' : '1.2');
1550
+ path.setAttribute('stroke-dasharray', edge.dash || '0');
1551
+ path.setAttribute('marker-end', `url(#${{markerFor(edge.type)}})`);
1552
+ path.setAttribute('opacity', isPeEdge ? '0.5' : '0.65');
1553
+ path.classList.add('edge-path');
1554
+ path.setAttribute('data-from', edge.from);
1555
+ path.setAttribute('data-to', edge.to);
1556
+ root.appendChild(path);
1557
+
1558
+ // Store label position for deferred rendering (after nodes)
1559
+ // Collision-aware: try each segment's midpoint, pick the first that doesn't overlap a node.
1560
+ if (edge.label) {{
1561
+ const bw = edge.label.length * 5.5 + 10;
1562
+ const bh = 14;
1563
+
1564
+ function labelHitsNode(lx, ly) {{
1565
+ return NODES.some(n => {{
1566
+ const p = positions[n.id];
1567
+ if (!p) return false;
1568
+ const nw = n.type === 'pe' ? PE_W : SVC_W;
1569
+ const nh = n.type === 'pe' ? PE_H : SVC_H;
1570
+ return lx + bw/2 > p.x && lx - bw/2 < p.x + nw
1571
+ && ly + bh/2 > p.y && ly - bh/2 < p.y + nh;
1572
+ }});
1573
+ }}
1574
+
1575
+ // Collect candidate positions: midpoint of each segment
1576
+ const candidates = [];
1577
+ for (let s = 0; s < pts.length - 1; s++) {{
1578
+ const cx = (pts[s].x + pts[s+1].x) / 2;
1579
+ const cy = (pts[s].y + pts[s+1].y) / 2;
1580
+ // Prefer middle segments first, then outer ones
1581
+ const priority = Math.abs(s - (pts.length-2)/2);
1582
+ candidates.push({{ x: cx, y: cy, priority }});
1583
+ }}
1584
+ candidates.sort((a, b) => a.priority - b.priority);
1585
+
1586
+ // Pick first candidate that doesn't hit a node
1587
+ let chosen = candidates[0];
1588
+ for (const c of candidates) {{
1589
+ if (!labelHitsNode(c.x, c.y)) {{ chosen = c; break; }}
1590
+ }}
1591
+
1592
+ // If all candidates hit, offset the best one perpendicular to segment
1593
+ if (labelHitsNode(chosen.x, chosen.y)) {{
1594
+ // Try shifting up/down/left/right by 20px
1595
+ const offsets = [{{x:0,y:-20}},{{x:0,y:20}},{{x:-20,y:0}},{{x:20,y:0}}];
1596
+ for (const off of offsets) {{
1597
+ if (!labelHitsNode(chosen.x+off.x, chosen.y+off.y)) {{
1598
+ chosen = {{ x: chosen.x+off.x, y: chosen.y+off.y }};
1599
+ break;
1600
+ }}
1601
+ }}
1602
+ }}
1603
+
1604
+ _edgeLabels.push({{ label: edge.label, x: chosen.x, y: chosen.y, from: edge.from, to: edge.to }});
1605
+ }}
1606
+ }});
1607
+
1608
+ // ── Nodes (rendered LAST — on top of edges, covering crossing points) ──
1609
+ NODES.forEach(node => {{
1610
+ const pos = positions[node.id];
1611
+ if (!pos) return;
1612
+ const isPe = node.type === 'pe';
1613
+ const nw = isPe ? PE_W : SVC_W;
1614
+ const nh = isPe ? PE_H : SVC_H;
1615
+ const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
1616
+ g.setAttribute('class', 'node');
1617
+ g.setAttribute('data-id', node.id);
1618
+ g.setAttribute('transform', `translate(${{pos.x}},${{pos.y}})`);
1619
+
1620
+ // Card background — full clickable area
1621
+ const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1622
+ rect.setAttribute('class', 'node-bg');
1623
+ rect.setAttribute('width', nw); rect.setAttribute('height', nh);
1624
+ rect.setAttribute('rx', '8'); rect.setAttribute('fill', 'white');
1625
+ rect.setAttribute('stroke', '#edebe9'); rect.setAttribute('stroke-width', '1');
1626
+ rect.setAttribute('filter', 'url(#shadow)');
1627
+ g.appendChild(rect);
1628
+
1629
+ // Color accent bar at top
1630
+ const accent = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1631
+ accent.setAttribute('width', nw); accent.setAttribute('height', '3');
1632
+ accent.setAttribute('rx', '8'); accent.setAttribute('fill', node.color);
1633
+ accent.setAttribute('opacity', '0.7');
1634
+ g.appendChild(accent);
1635
+
1636
+ // Icon — official Azure icon (data URI) preferred, fallback to SVG
1637
+ const iconSize = isPe ? 28 : 36;
1638
+ const iconX = (nw - iconSize) / 2;
1639
+ const iconY = isPe ? 10 : 12;
1640
+ if (node.icon_data_uri) {{
1641
+ // Official Azure icon (Base64 image)
1642
+ const iconImg = document.createElementNS('http://www.w3.org/2000/svg', 'image');
1643
+ iconImg.setAttribute('x', iconX); iconImg.setAttribute('y', iconY);
1644
+ iconImg.setAttribute('width', iconSize); iconImg.setAttribute('height', iconSize);
1645
+ iconImg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', node.icon_data_uri);
1646
+ g.appendChild(iconImg);
1647
+ }} else {{
1648
+ // Fallback: built-in SVG text icon
1649
+ const iconG = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
1650
+ iconG.setAttribute('x', iconX); iconG.setAttribute('y', iconY);
1651
+ iconG.setAttribute('width', iconSize); iconG.setAttribute('height', iconSize);
1652
+ iconG.setAttribute('viewBox', '0 0 48 48');
1653
+ iconG.innerHTML = node.icon_svg;
1654
+ g.appendChild(iconG);
1655
+ }}
1656
+
1657
+ // Name
1658
+ const name = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1659
+ name.setAttribute('x', nw/2); name.setAttribute('y', isPe ? 52 : 60);
1660
+ name.setAttribute('text-anchor', 'middle');
1661
+ name.setAttribute('font-size', isPe ? '9' : '10');
1662
+ name.setAttribute('font-weight', '600'); name.setAttribute('fill', '#323130');
1663
+ name.setAttribute('font-family', 'Segoe UI, sans-serif');
1664
+ const maxC = isPe ? 14 : 20;
1665
+ name.textContent = node.name.length > maxC ? node.name.substring(0, maxC-1) + '..' : node.name;
1666
+ g.appendChild(name);
1667
+
1668
+ // SKU label
1669
+ if (!isPe && node.sku) {{
1670
+ const sku = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1671
+ sku.setAttribute('x', nw/2); sku.setAttribute('y', 72);
1672
+ sku.setAttribute('text-anchor', 'middle');
1673
+ sku.setAttribute('font-size', '9'); sku.setAttribute('fill', '#a19f9d');
1674
+ sku.setAttribute('font-family', 'Segoe UI, sans-serif');
1675
+ sku.textContent = node.sku;
1676
+ g.appendChild(sku);
1677
+ }}
1678
+
1679
+ if (isPe && node.details.length > 0) {{
1680
+ const det = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1681
+ det.setAttribute('x', nw/2); det.setAttribute('y', 63);
1682
+ det.setAttribute('text-anchor', 'middle');
1683
+ det.setAttribute('font-size', '8'); det.setAttribute('fill', '#a19f9d');
1684
+ det.setAttribute('font-family', 'Segoe UI, sans-serif');
1685
+ det.textContent = node.details[0];
1686
+ g.appendChild(det);
1687
+ }}
1688
+
1689
+ // Service type label below (not category — show actual service type name)
1690
+ if (!isPe) {{
1691
+ const TYPE_LABELS = {{
1692
+ 'ai_foundry': 'AI Foundry', 'openai': 'Azure OpenAI', 'search': 'AI Search', 'ai_search': 'AI Search',
1693
+ 'storage': 'Storage', 'adls': 'ADLS Gen2', 'keyvault': 'Key Vault', 'kv': 'Key Vault',
1694
+ 'fabric': 'Fabric', 'databricks': 'Databricks', 'adf': 'Data Factory', 'data_factory': 'Data Factory',
1695
+ 'sql_server': 'SQL Server', 'sql_database': 'SQL Database', 'cosmos_db': 'Cosmos DB',
1696
+ 'vm': 'Virtual Machine', 'aks': 'AKS', 'app_service': 'App Service',
1697
+ 'function_app': 'Function App', 'synapse': 'Synapse', 'vnet': 'VNet',
1698
+ 'nsg': 'NSG', 'bastion': 'Bastion', 'pe': 'Private Endpoint',
1699
+ 'log_analytics': 'Log Analytics', 'app_insights': 'App Insights',
1700
+ 'monitor': 'Monitor', 'acr': 'Container Registry', 'container_registry': 'Container Registry',
1701
+ 'document_intelligence': 'Doc Intelligence', 'form_recognizer': 'Doc Intelligence',
1702
+ 'cdn': 'CDN', 'event_hub': 'Event Hub', 'redis': 'Redis Cache',
1703
+ 'devops': 'Azure DevOps', 'app_gateway': 'App Gateway',
1704
+ 'iot_hub': 'IoT Hub', 'stream_analytics': 'Stream Analytics',
1705
+ 'vpn_gateway': 'VPN Gateway', 'front_door': 'Front Door',
1706
+ 'ai_hub': 'AI Hub', 'firewall': 'Firewall',
1707
+ }};
1708
+ const typeLabel = TYPE_LABELS[node.type] || node.type;
1709
+ const cat = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1710
+ cat.setAttribute('x', nw/2); cat.setAttribute('y', nh + 14);
1711
+ cat.setAttribute('text-anchor', 'middle');
1712
+ cat.setAttribute('font-size', '9'); cat.setAttribute('fill', node.color);
1713
+ cat.setAttribute('font-weight', '600');
1714
+ cat.setAttribute('font-family', 'Segoe UI, sans-serif');
1715
+ cat.textContent = typeLabel;
1716
+ g.appendChild(cat);
1717
+ }}
1718
+
1719
+ // Private badge on card
1720
+ if (node.private && !isPe) {{
1721
+ const badge = document.createElementNS('http://www.w3.org/2000/svg', 'g');
1722
+ const br = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1723
+ br.setAttribute('x', nw - 8); br.setAttribute('y', '4');
1724
+ br.setAttribute('width', '6'); br.setAttribute('height', '6');
1725
+ br.setAttribute('rx', '3'); br.setAttribute('fill', '#5C2D91');
1726
+ br.setAttribute('opacity', '0.6');
1727
+ badge.appendChild(br);
1728
+ g.appendChild(badge);
1729
+ }}
1730
+
1731
+ // ── Events: drag vs click separation ──
1732
+ let _dragStartX = 0, _dragStartY = 0, _didDrag = false;
1733
+ g.addEventListener('mousedown', e => {{
1734
+ if (e.button !== 0) return;
1735
+ dragging = node.id;
1736
+ _didDrag = false;
1737
+ _dragStartX = e.clientX; _dragStartY = e.clientY;
1738
+ const svgPt = getSVGPoint(e);
1739
+ dragOffX = svgPt.x - pos.x; dragOffY = svgPt.y - pos.y;
1740
+ e.stopPropagation(); e.preventDefault();
1741
+ }});
1742
+ g.addEventListener('mousemove', e => {{
1743
+ if (dragging === node.id) {{
1744
+ const dx = Math.abs(e.clientX - _dragStartX);
1745
+ const dy = Math.abs(e.clientY - _dragStartY);
1746
+ if (dx > 3 || dy > 3) _didDrag = true;
1747
+ }}
1748
+ }});
1749
+ g.addEventListener('mouseup', e => {{
1750
+ if (!_didDrag && dragging === node.id) {{
1751
+ selectNode(node.id);
1752
+ }}
1753
+ }});
1754
+ g.addEventListener('mouseenter', e => {{
1755
+ const tt = document.getElementById('tooltip');
1756
+ const dets = node.details.map(d => `<div class="tooltip-detail">› ${{d}}</div>`).join('');
1757
+ tt.style.display = 'block';
1758
+ tt.innerHTML = `<strong>${{node.name}}</strong>${{node.sku ? `<div class="tooltip-detail">SKU: ${{node.sku}}</div>` : ''}}${{dets}}`;
1759
+ }});
1760
+ g.addEventListener('mousemove', e => {{
1761
+ const tt = document.getElementById('tooltip');
1762
+ tt.style.left = (e.clientX+12)+'px'; tt.style.top = (e.clientY-8)+'px';
1763
+ }});
1764
+ g.addEventListener('mouseleave', () => {{ document.getElementById('tooltip').style.display = 'none'; }});
1765
+
1766
+ root.appendChild(g);
1767
+ }});
1768
+
1769
+ // ── Edge labels (rendered AFTER nodes — always visible on top) ──
1770
+ _edgeLabels.forEach(el => {{
1771
+ const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
1772
+ g.classList.add('edge-label');
1773
+ g.setAttribute('data-from', el.from);
1774
+ g.setAttribute('data-to', el.to);
1775
+ const r = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
1776
+ r.classList.add('edge-label-bg');
1777
+ const t = document.createElementNS('http://www.w3.org/2000/svg', 'text');
1778
+ const bw = el.label.length * 5.5 + 10;
1779
+ r.setAttribute('x', el.x-bw/2); r.setAttribute('y', el.y-7);
1780
+ r.setAttribute('width', bw); r.setAttribute('height', 14);
1781
+ r.setAttribute('rx', '3'); r.setAttribute('fill', 'white');
1782
+ r.setAttribute('stroke', '#d2d0ce'); r.setAttribute('stroke-width', '0.5');
1783
+ r.setAttribute('opacity', '0.95');
1784
+ t.setAttribute('x', el.x); t.setAttribute('y', el.y+3);
1785
+ t.setAttribute('text-anchor', 'middle'); t.setAttribute('font-size', '8');
1786
+ t.setAttribute('fill', '#605e5c'); t.setAttribute('font-family', 'Segoe UI, sans-serif');
1787
+ t.textContent = el.label;
1788
+ g.appendChild(r); g.appendChild(t);
1789
+ root.appendChild(g);
1790
+ }});
1791
+
1792
+ }}
1793
+
1794
+ function getSVGPoint(e) {{
1795
+ const svg = document.getElementById('canvas');
1796
+ const pt = svg.createSVGPoint();
1797
+ pt.x = e.clientX; pt.y = e.clientY;
1798
+ return pt.matrixTransform(document.getElementById('diagram-root').getScreenCTM().inverse());
1799
+ }}
1800
+
1801
+ document.getElementById('canvas').addEventListener('mousemove', e => {{
1802
+ if (dragging) {{
1803
+ const p = getSVGPoint(e);
1804
+ positions[dragging].x = p.x - dragOffX;
1805
+ positions[dragging].y = p.y - dragOffY;
1806
+ renderDiagram();
1807
+ }} else if (draggingGroup !== null) {{
1808
+ const p = getSVGPoint(e);
1809
+ const dx = p.x - dragOffX;
1810
+ const dy = p.y - dragOffY;
1811
+ dragOffX = p.x; dragOffY = p.y;
1812
+ // Move all nodes in the group
1813
+ groupDragNodes.forEach(nid => {{
1814
+ if (positions[nid]) {{
1815
+ positions[nid].x += dx;
1816
+ positions[nid].y += dy;
1817
+ }}
1818
+ }});
1819
+ // Also move the group box itself
1820
+ const gb = groupBoxes[draggingGroup];
1821
+ if (gb) {{ gb.x += dx; gb.y += dy; }}
1822
+ renderDiagram();
1823
+ }}
1824
+ }});
1825
+ document.addEventListener('mouseup', () => {{ dragging = null; draggingGroup = null; groupDragNodes = []; }});
1826
+
1827
+ // ── Pan & Zoom ──
1828
+ function applyTransform() {{
1829
+ document.getElementById('diagram-root').setAttribute('transform',
1830
+ `translate(${{viewTransform.x}},${{viewTransform.y}}) scale(${{viewTransform.scale}})`);
1831
+ document.getElementById('zoom-level').textContent = Math.round(viewTransform.scale * 100) + '%';
1832
+ }}
1833
+ function fitToScreen() {{
1834
+ const svg = document.getElementById('canvas');
1835
+ const root = document.getElementById('diagram-root');
1836
+ root.setAttribute('transform', '');
1837
+ const bbox = root.getBBox();
1838
+ if (!bbox.width || !bbox.height) return;
1839
+ const w = svg.clientWidth, h = svg.clientHeight;
1840
+ const s = Math.min((w-60)/bbox.width, (h-60)/bbox.height, 1.5);
1841
+ if (s <= 0) return;
1842
+ viewTransform.scale = s;
1843
+ viewTransform.x = (w - bbox.width*s)/2 - bbox.x*s;
1844
+ viewTransform.y = (h - bbox.height*s)/2 - bbox.y*s;
1845
+ applyTransform();
1846
+ }}
1847
+ function zoomIn() {{ viewTransform.scale *= 1.25; applyTransform(); }}
1848
+ function zoomOut() {{ viewTransform.scale *= 0.8; applyTransform(); }}
1849
+ function resetZoom() {{ viewTransform = {{x:0,y:0,scale:1}}; applyTransform(); }}
1850
+
1851
+ function downloadPNG() {{
1852
+ const svg = document.getElementById('canvas');
1853
+ const bbox = svg.getBBox();
1854
+ const pad = 40;
1855
+ const w = Math.ceil(bbox.width + bbox.x + pad * 2);
1856
+ const h = Math.ceil(bbox.height + bbox.y + pad * 2);
1857
+
1858
+ const clone = svg.cloneNode(true);
1859
+ clone.setAttribute('width', w);
1860
+ clone.setAttribute('height', h);
1861
+ clone.setAttribute('viewBox', `${{-pad}} ${{-pad}} ${{w}} ${{h}}`);
1862
+ clone.querySelector('#viewport')?.removeAttribute('transform');
1863
+
1864
+ // Inline all computed styles
1865
+ const allEls = clone.querySelectorAll('*');
1866
+ const origEls = svg.querySelectorAll('*');
1867
+ allEls.forEach((el, i) => {{
1868
+ if (origEls[i]) {{
1869
+ const cs = window.getComputedStyle(origEls[i]);
1870
+ ['fill','stroke','stroke-width','font-size','font-family','font-weight',
1871
+ 'text-anchor','opacity','fill-opacity','stroke-opacity','stroke-dasharray'].forEach(p => {{
1872
+ const v = cs.getPropertyValue(p);
1873
+ if (v) el.style.setProperty(p, v);
1874
+ }});
1875
+ }}
1876
+ }});
1877
+
1878
+ const serializer = new XMLSerializer();
1879
+ const svgStr = serializer.serializeToString(clone);
1880
+ const svgBlob = new Blob([svgStr], {{type: 'image/svg+xml;charset=utf-8'}});
1881
+ const url = URL.createObjectURL(svgBlob);
1882
+
1883
+ const img = new Image();
1884
+ img.onload = () => {{
1885
+ const canvas = document.createElement('canvas');
1886
+ const scale = 2;
1887
+ canvas.width = w * scale;
1888
+ canvas.height = h * scale;
1889
+ const ctx = canvas.getContext('2d');
1890
+ ctx.scale(scale, scale);
1891
+ ctx.fillStyle = '#ffffff';
1892
+ ctx.fillRect(0, 0, w, h);
1893
+ ctx.drawImage(img, 0, 0, w, h);
1894
+ URL.revokeObjectURL(url);
1895
+
1896
+ canvas.toBlob(blob => {{
1897
+ const a = document.createElement('a');
1898
+ a.href = URL.createObjectURL(blob);
1899
+ a.download = (document.title || 'azure-architecture') + '.png';
1900
+ a.click();
1901
+ URL.revokeObjectURL(a.href);
1902
+ }}, 'image/png');
1903
+ }};
1904
+ img.src = url;
1905
+ }}
1906
+
1907
+ document.getElementById('canvas').addEventListener('wheel', e => {{
1908
+ e.preventDefault();
1909
+ const f = e.deltaY < 0 ? 1.1 : 0.9;
1910
+ const rect = document.getElementById('canvas').getBoundingClientRect();
1911
+ const mx = e.clientX - rect.left, my = e.clientY - rect.top;
1912
+ const os = viewTransform.scale, ns = os * f;
1913
+ viewTransform.x = mx - (mx - viewTransform.x) * (ns/os);
1914
+ viewTransform.y = my - (my - viewTransform.y) * (ns/os);
1915
+ viewTransform.scale = ns;
1916
+ applyTransform();
1917
+ }}, {{ passive: false }});
1918
+
1919
+ document.getElementById('canvas').addEventListener('mousedown', e => {{
1920
+ if (e.target.closest('.node')) return;
1921
+ // Clear selection when clicking on empty canvas area
1922
+ if (_selectedNodeId && !e.target.closest('.node')) clearSelection();
1923
+ isPanning = true;
1924
+ panSX = e.clientX; panSY = e.clientY;
1925
+ panSTx = viewTransform.x; panSTy = viewTransform.y;
1926
+ document.getElementById('canvas').style.cursor = 'grabbing';
1927
+ e.preventDefault();
1928
+ }});
1929
+ document.addEventListener('mousemove', e => {{
1930
+ if (isPanning) {{
1931
+ viewTransform.x = panSTx + (e.clientX - panSX);
1932
+ viewTransform.y = panSTy + (e.clientY - panSY);
1933
+ applyTransform();
1934
+ }}
1935
+ }});
1936
+ document.addEventListener('mouseup', () => {{
1937
+ if (isPanning) {{ isPanning = false; document.getElementById('canvas').style.cursor = ''; }}
1938
+ }});
1939
+
1940
+ // ── Sidebar ──
1941
+ function buildSidebar() {{
1942
+ const list = document.getElementById('service-list');
1943
+ const byCat = {{}};
1944
+ NODES.forEach(n => {{ if (!byCat[n.category]) byCat[n.category] = []; byCat[n.category].push(n); }});
1945
+ Object.entries(byCat).forEach(([cat, nodes]) => {{
1946
+ const cd = document.createElement('div');
1947
+ cd.className = 'cat-label'; cd.textContent = cat;
1948
+ list.appendChild(cd);
1949
+ nodes.forEach(node => {{
1950
+ const card = document.createElement('div');
1951
+ card.className = 'service-card'; card.id = 'card-' + node.id;
1952
+ card.innerHTML = `
1953
+ <div class="service-card-header">
1954
+ <div class="sc-icon">${{node.icon_data_uri ? `<img src="${{node.icon_data_uri}}" width="28" height="28" style="object-fit:contain;">` : `<svg viewBox="0 0 48 48">${{node.icon_svg}}</svg>`}}</div>
1955
+ <div>
1956
+ <div class="service-name">${{node.name}}</div>
1957
+ <div class="service-sku">${{node.sku || node.type}}</div>
1958
+ </div>
1959
+ ${{node.private ? '<span class="private-badge">Private</span>' : ''}}
1960
+ </div>
1961
+ ${{node.details.length > 0 ? `<div class="service-card-body">${{node.details.map(d => `<div class="service-detail">${{d}}</div>`).join('')}}</div>` : ''}}
1962
+ `;
1963
+ card.addEventListener('click', () => {{
1964
+ selectNode(node.id);
1965
+ }});
1966
+ list.appendChild(card);
1967
+ }});
1968
+ }});
1969
+ }}
1970
+
1971
+ // ── VNet highlight toggle ──
1972
+ let _vnetHighlighted = false;
1973
+ function toggleVNetHighlight() {{
1974
+ _vnetHighlighted = !_vnetHighlighted;
1975
+ const vr = document.getElementById('vnet-rect');
1976
+ if (!vr) return;
1977
+ if (_vnetHighlighted) {{
1978
+ vr.setAttribute('stroke-width', '4');
1979
+ vr.setAttribute('stroke', '#5C2D91');
1980
+ vr.setAttribute('fill', '#f0eaf8');
1981
+ }} else {{
1982
+ vr.setAttribute('stroke-width', '2');
1983
+ vr.setAttribute('stroke', '#5C2D91');
1984
+ vr.setAttribute('fill', '#f8f7ff');
1985
+ }}
1986
+ // Also toggle sidebar card
1987
+ const card = document.getElementById('card-vnet-boundary');
1988
+ if (card) card.classList.toggle('selected', _vnetHighlighted);
1989
+ }}
1990
+
1991
+ renderDiagram();
1992
+ buildSidebar();
1993
+
1994
+ // ── VNet sidebar card (added dynamically if VNet boundary exists) ──
1995
+ if (VNET_INFO || NODES.some(n => n.private && n.type !== 'pe') || NODES.some(n => n.type === 'pe')) {{
1996
+ const list = document.getElementById('service-list');
1997
+ // Insert at the top
1998
+ const catLabel = document.createElement('div');
1999
+ catLabel.className = 'cat-label'; catLabel.textContent = 'NETWORK';
2000
+ const card = document.createElement('div');
2001
+ card.className = 'service-card'; card.id = 'card-vnet-boundary';
2002
+ const vnetIcon = '<rect x="6" y="6" width="36" height="36" rx="4" fill="none" stroke="#5C2D91" stroke-width="3"/><circle cx="16" cy="18" r="3" fill="#5C2D91"/><circle cx="32" cy="18" r="3" fill="#5C2D91"/><circle cx="24" cy="32" r="3" fill="#5C2D91"/>';
2003
+ const vnetDetails = VNET_INFO ? VNET_INFO.split('|').map(s => s.trim()) : [];
2004
+ card.innerHTML = `
2005
+ <div class="service-card-header">
2006
+ <div class="sc-icon"><svg viewBox="0 0 48 48">${{vnetIcon}}</svg></div>
2007
+ <div>
2008
+ <div class="service-name">Virtual Network</div>
2009
+ <div class="service-sku">vnet</div>
2010
+ </div>
2011
+ <span class="private-badge">Private</span>
2012
+ </div>
2013
+ ${{vnetDetails.length > 0 ? `<div class="service-card-body">${{vnetDetails.map(d => `<div class="service-detail">${{d}}</div>`).join('')}}</div>` : ''}}
2014
+ `;
2015
+ card.addEventListener('click', () => {{ toggleVNetHighlight(); }});
2016
+ list.insertBefore(card, list.firstChild);
2017
+ list.insertBefore(catLabel, list.firstChild);
2018
+ }}
2019
+ setTimeout(fitToScreen, 100);
2020
+ </script>
2021
+ </body>
2022
+ </html>"""
2023
+ return html
2024
+
2025
+ def generate_diagram(services, connections, title="Azure Architecture", vnet_info="", hierarchy=None):
2026
+ """Generate an interactive Azure architecture diagram as an HTML string.
2027
+
2028
+ Args:
2029
+ services: list of dicts with keys id, name, type, sku, private, details, etc.
2030
+ connections: list of dicts with keys from, to, label, type.
2031
+ title: diagram title string.
2032
+ vnet_info: VNet CIDR info string.
2033
+ hierarchy: optional subscription/RG hierarchy list.
2034
+
2035
+ Returns:
2036
+ HTML string containing the interactive diagram.
2037
+ """
2038
+ return generate_html(services, connections, title, vnet_info=vnet_info, hierarchy=hierarchy)