create-yss-spec 2.1.5 → 2.1.6

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 (3257) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/template/.agents/skills/yss-audit-log/references/source-index.md +4 -3
  4. package/template/.agents/skills/yss-cache/references/source-index.md +4 -3
  5. package/template/.agents/skills/yss-components/references/frontend-docs.md +1 -1
  6. package/template/.agents/skills/yss-db2mybatis/SKILL.md +6 -5
  7. package/template/.agents/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  8. package/template/.agents/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  9. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  10. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  11. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  12. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  13. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  14. package/template/.agents/skills/yss-design-system/SKILL.md +2 -2
  15. package/template/.agents/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  16. package/template/.agents/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  17. package/template/.agents/skills/yss-dictionary/references/source-index.md +25 -25
  18. package/template/.agents/skills/yss-distributed-id/references/source-index.md +6 -6
  19. package/template/.agents/skills/yss-dto/references/source-index.md +7 -4
  20. package/template/.agents/skills/yss-excel-mvc/references/source-index.md +3 -3
  21. package/template/.agents/skills/yss-exception/references/source-index.md +3 -3
  22. package/template/.agents/skills/yss-hook/references/frontend-docs.md +1 -1
  23. package/template/.agents/skills/yss-jdbc/references/source-index.md +3 -3
  24. package/template/.agents/skills/yss-log/references/source-index.md +3 -3
  25. package/template/.agents/skills/yss-mybatis/references/source-index.md +3 -3
  26. package/template/.agents/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  27. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +2 -0
  28. package/template/.agents/skills/yss-resilience4j/references/source-index.md +3 -3
  29. package/template/.agents/skills/yss-security-algorithm/references/source-index.md +3 -3
  30. package/template/.agents/skills/yss-source-index/SKILL.md +3 -3
  31. package/template/.agents/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  32. package/template/.agents/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  33. package/template/.agents/skills/yss-taskflow/references/source-index.md +3 -3
  34. package/template/.agents/skills/yss-ui/references/frontend-docs.md +1 -1
  35. package/template/.agents/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  36. package/template/.agents/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  37. package/template/.agents/skills/yss-userinfo/references/source-index.md +3 -3
  38. package/template/.agents/skills/yss-validation/references/source-index.md +5 -24
  39. package/template/.agents/skills/yss-valuation/references/source-index.md +3 -3
  40. package/template/.agents/skills/yss-variable/references/source-index.md +6 -34
  41. package/template/.agents/skills/yss-web-controller/SKILL.md +4 -4
  42. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  43. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  44. package/template/.claude/skills/yss-audit-log/references/source-index.md +4 -3
  45. package/template/.claude/skills/yss-cache/references/source-index.md +4 -3
  46. package/template/.claude/skills/yss-components/references/frontend-docs.md +1 -1
  47. package/template/.claude/skills/yss-db2mybatis/SKILL.md +6 -5
  48. package/template/.claude/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  49. package/template/.claude/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  50. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  51. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  52. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  53. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  54. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  55. package/template/.claude/skills/yss-design-system/SKILL.md +2 -2
  56. package/template/.claude/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  57. package/template/.claude/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  58. package/template/.claude/skills/yss-dictionary/references/source-index.md +25 -25
  59. package/template/.claude/skills/yss-distributed-id/references/source-index.md +6 -6
  60. package/template/.claude/skills/yss-dto/references/source-index.md +7 -4
  61. package/template/.claude/skills/yss-excel-mvc/references/source-index.md +3 -3
  62. package/template/.claude/skills/yss-exception/references/source-index.md +3 -3
  63. package/template/.claude/skills/yss-hook/references/frontend-docs.md +1 -1
  64. package/template/.claude/skills/yss-jdbc/references/source-index.md +3 -3
  65. package/template/.claude/skills/yss-log/references/source-index.md +3 -3
  66. package/template/.claude/skills/yss-mybatis/references/source-index.md +3 -3
  67. package/template/.claude/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  68. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +2 -0
  69. package/template/.claude/skills/yss-resilience4j/references/source-index.md +3 -3
  70. package/template/.claude/skills/yss-security-algorithm/references/source-index.md +3 -3
  71. package/template/.claude/skills/yss-source-index/SKILL.md +3 -3
  72. package/template/.claude/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  73. package/template/.claude/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  74. package/template/.claude/skills/yss-taskflow/references/source-index.md +3 -3
  75. package/template/.claude/skills/yss-ui/references/frontend-docs.md +1 -1
  76. package/template/.claude/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  77. package/template/.claude/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  78. package/template/.claude/skills/yss-userinfo/references/source-index.md +3 -3
  79. package/template/.claude/skills/yss-validation/references/source-index.md +5 -24
  80. package/template/.claude/skills/yss-valuation/references/source-index.md +3 -3
  81. package/template/.claude/skills/yss-variable/references/source-index.md +6 -34
  82. package/template/.claude/skills/yss-web-controller/SKILL.md +4 -4
  83. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  84. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  85. package/template/.codex/skills/yss-audit-log/references/source-index.md +4 -3
  86. package/template/.codex/skills/yss-cache/references/source-index.md +4 -3
  87. package/template/.codex/skills/yss-components/references/frontend-docs.md +1 -1
  88. package/template/.codex/skills/yss-db2mybatis/SKILL.md +6 -5
  89. package/template/.codex/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  90. package/template/.codex/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  91. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  92. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  93. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  94. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  95. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  96. package/template/.codex/skills/yss-design-system/SKILL.md +2 -2
  97. package/template/.codex/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  98. package/template/.codex/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  99. package/template/.codex/skills/yss-dictionary/references/source-index.md +25 -25
  100. package/template/.codex/skills/yss-distributed-id/references/source-index.md +6 -6
  101. package/template/.codex/skills/yss-dto/references/source-index.md +7 -4
  102. package/template/.codex/skills/yss-excel-mvc/references/source-index.md +3 -3
  103. package/template/.codex/skills/yss-exception/references/source-index.md +3 -3
  104. package/template/.codex/skills/yss-hook/references/frontend-docs.md +1 -1
  105. package/template/.codex/skills/yss-jdbc/references/source-index.md +3 -3
  106. package/template/.codex/skills/yss-log/references/source-index.md +3 -3
  107. package/template/.codex/skills/yss-mybatis/references/source-index.md +3 -3
  108. package/template/.codex/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  109. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +2 -0
  110. package/template/.codex/skills/yss-resilience4j/references/source-index.md +3 -3
  111. package/template/.codex/skills/yss-security-algorithm/references/source-index.md +3 -3
  112. package/template/.codex/skills/yss-source-index/SKILL.md +3 -3
  113. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  114. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  115. package/template/.codex/skills/yss-taskflow/references/source-index.md +3 -3
  116. package/template/.codex/skills/yss-ui/references/frontend-docs.md +1 -1
  117. package/template/.codex/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  118. package/template/.codex/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  119. package/template/.codex/skills/yss-userinfo/references/source-index.md +3 -3
  120. package/template/.codex/skills/yss-validation/references/source-index.md +5 -24
  121. package/template/.codex/skills/yss-valuation/references/source-index.md +3 -3
  122. package/template/.codex/skills/yss-variable/references/source-index.md +6 -34
  123. package/template/.codex/skills/yss-web-controller/SKILL.md +4 -4
  124. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  125. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  126. package/template/.github/workflows/template-node-tooling.yml +59 -0
  127. package/template/.hermes/skills/yss-audit-log/references/source-index.md +4 -3
  128. package/template/.hermes/skills/yss-cache/references/source-index.md +4 -3
  129. package/template/.hermes/skills/yss-components/references/frontend-docs.md +1 -1
  130. package/template/.hermes/skills/yss-db2mybatis/SKILL.md +6 -5
  131. package/template/.hermes/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  132. package/template/.hermes/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  133. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  134. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  135. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  136. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  137. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  138. package/template/.hermes/skills/yss-design-system/SKILL.md +2 -2
  139. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  140. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  141. package/template/.hermes/skills/yss-dictionary/references/source-index.md +25 -25
  142. package/template/.hermes/skills/yss-distributed-id/references/source-index.md +6 -6
  143. package/template/.hermes/skills/yss-dto/references/source-index.md +7 -4
  144. package/template/.hermes/skills/yss-excel-mvc/references/source-index.md +3 -3
  145. package/template/.hermes/skills/yss-exception/references/source-index.md +3 -3
  146. package/template/.hermes/skills/yss-hook/references/frontend-docs.md +1 -1
  147. package/template/.hermes/skills/yss-jdbc/references/source-index.md +3 -3
  148. package/template/.hermes/skills/yss-log/references/source-index.md +3 -3
  149. package/template/.hermes/skills/yss-mybatis/references/source-index.md +3 -3
  150. package/template/.hermes/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  151. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +2 -0
  152. package/template/.hermes/skills/yss-resilience4j/references/source-index.md +3 -3
  153. package/template/.hermes/skills/yss-security-algorithm/references/source-index.md +3 -3
  154. package/template/.hermes/skills/yss-source-index/SKILL.md +3 -3
  155. package/template/.hermes/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  156. package/template/.hermes/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  157. package/template/.hermes/skills/yss-taskflow/references/source-index.md +3 -3
  158. package/template/.hermes/skills/yss-ui/references/frontend-docs.md +1 -1
  159. package/template/.hermes/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  160. package/template/.hermes/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  161. package/template/.hermes/skills/yss-userinfo/references/source-index.md +3 -3
  162. package/template/.hermes/skills/yss-validation/references/source-index.md +5 -24
  163. package/template/.hermes/skills/yss-valuation/references/source-index.md +3 -3
  164. package/template/.hermes/skills/yss-variable/references/source-index.md +6 -34
  165. package/template/.hermes/skills/yss-web-controller/SKILL.md +4 -4
  166. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  167. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  168. package/template/.nvmrc +1 -0
  169. package/template/.pi/skills/yss-audit-log/references/source-index.md +4 -3
  170. package/template/.pi/skills/yss-cache/references/source-index.md +4 -3
  171. package/template/.pi/skills/yss-components/references/frontend-docs.md +1 -1
  172. package/template/.pi/skills/yss-db2mybatis/SKILL.md +6 -5
  173. package/template/.pi/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  174. package/template/.pi/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  175. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  176. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  177. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  178. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  179. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  180. package/template/.pi/skills/yss-design-system/SKILL.md +2 -2
  181. package/template/.pi/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  182. package/template/.pi/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  183. package/template/.pi/skills/yss-dictionary/references/source-index.md +25 -25
  184. package/template/.pi/skills/yss-distributed-id/references/source-index.md +6 -6
  185. package/template/.pi/skills/yss-dto/references/source-index.md +7 -4
  186. package/template/.pi/skills/yss-excel-mvc/references/source-index.md +3 -3
  187. package/template/.pi/skills/yss-exception/references/source-index.md +3 -3
  188. package/template/.pi/skills/yss-hook/references/frontend-docs.md +1 -1
  189. package/template/.pi/skills/yss-jdbc/references/source-index.md +3 -3
  190. package/template/.pi/skills/yss-log/references/source-index.md +3 -3
  191. package/template/.pi/skills/yss-mybatis/references/source-index.md +3 -3
  192. package/template/.pi/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  193. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +2 -0
  194. package/template/.pi/skills/yss-resilience4j/references/source-index.md +3 -3
  195. package/template/.pi/skills/yss-security-algorithm/references/source-index.md +3 -3
  196. package/template/.pi/skills/yss-source-index/SKILL.md +3 -3
  197. package/template/.pi/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  198. package/template/.pi/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  199. package/template/.pi/skills/yss-taskflow/references/source-index.md +3 -3
  200. package/template/.pi/skills/yss-ui/references/frontend-docs.md +1 -1
  201. package/template/.pi/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  202. package/template/.pi/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  203. package/template/.pi/skills/yss-userinfo/references/source-index.md +3 -3
  204. package/template/.pi/skills/yss-validation/references/source-index.md +5 -24
  205. package/template/.pi/skills/yss-valuation/references/source-index.md +3 -3
  206. package/template/.pi/skills/yss-variable/references/source-index.md +6 -34
  207. package/template/.pi/skills/yss-web-controller/SKILL.md +4 -4
  208. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  209. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  210. package/template/.qoder/skills/yss-audit-log/references/source-index.md +4 -3
  211. package/template/.qoder/skills/yss-cache/references/source-index.md +4 -3
  212. package/template/.qoder/skills/yss-components/references/frontend-docs.md +1 -1
  213. package/template/.qoder/skills/yss-db2mybatis/SKILL.md +6 -5
  214. package/template/.qoder/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  215. package/template/.qoder/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  216. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  217. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  218. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  219. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  220. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  221. package/template/.qoder/skills/yss-design-system/SKILL.md +2 -2
  222. package/template/.qoder/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  223. package/template/.qoder/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  224. package/template/.qoder/skills/yss-dictionary/references/source-index.md +25 -25
  225. package/template/.qoder/skills/yss-distributed-id/references/source-index.md +6 -6
  226. package/template/.qoder/skills/yss-dto/references/source-index.md +7 -4
  227. package/template/.qoder/skills/yss-excel-mvc/references/source-index.md +3 -3
  228. package/template/.qoder/skills/yss-exception/references/source-index.md +3 -3
  229. package/template/.qoder/skills/yss-hook/references/frontend-docs.md +1 -1
  230. package/template/.qoder/skills/yss-jdbc/references/source-index.md +3 -3
  231. package/template/.qoder/skills/yss-log/references/source-index.md +3 -3
  232. package/template/.qoder/skills/yss-mybatis/references/source-index.md +3 -3
  233. package/template/.qoder/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  234. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +2 -0
  235. package/template/.qoder/skills/yss-resilience4j/references/source-index.md +3 -3
  236. package/template/.qoder/skills/yss-security-algorithm/references/source-index.md +3 -3
  237. package/template/.qoder/skills/yss-source-index/SKILL.md +3 -3
  238. package/template/.qoder/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  239. package/template/.qoder/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  240. package/template/.qoder/skills/yss-taskflow/references/source-index.md +3 -3
  241. package/template/.qoder/skills/yss-ui/references/frontend-docs.md +1 -1
  242. package/template/.qoder/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  243. package/template/.qoder/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  244. package/template/.qoder/skills/yss-userinfo/references/source-index.md +3 -3
  245. package/template/.qoder/skills/yss-validation/references/source-index.md +5 -24
  246. package/template/.qoder/skills/yss-valuation/references/source-index.md +3 -3
  247. package/template/.qoder/skills/yss-variable/references/source-index.md +6 -34
  248. package/template/.qoder/skills/yss-web-controller/SKILL.md +4 -4
  249. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  250. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  251. package/template/.trae/skills/yss-audit-log/references/source-index.md +4 -3
  252. package/template/.trae/skills/yss-cache/references/source-index.md +4 -3
  253. package/template/.trae/skills/yss-components/references/frontend-docs.md +1 -1
  254. package/template/.trae/skills/yss-db2mybatis/SKILL.md +6 -5
  255. package/template/.trae/skills/yss-db2mybatis/scripts/db2mybatis.mjs +145 -0
  256. package/template/.trae/skills/yss-db2mybatis/scripts/db2mybatis.test.mjs +32 -0
  257. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +5 -5
  258. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +2 -2
  259. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +225 -0
  260. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +32 -0
  261. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +26 -0
  262. package/template/.trae/skills/yss-design-system/SKILL.md +2 -2
  263. package/template/.trae/skills/yss-design-system/scripts/validate-frontmatter.mjs +36 -0
  264. package/template/.trae/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +12 -0
  265. package/template/.trae/skills/yss-dictionary/references/source-index.md +25 -25
  266. package/template/.trae/skills/yss-distributed-id/references/source-index.md +6 -6
  267. package/template/.trae/skills/yss-dto/references/source-index.md +7 -4
  268. package/template/.trae/skills/yss-excel-mvc/references/source-index.md +3 -3
  269. package/template/.trae/skills/yss-exception/references/source-index.md +3 -3
  270. package/template/.trae/skills/yss-hook/references/frontend-docs.md +1 -1
  271. package/template/.trae/skills/yss-jdbc/references/source-index.md +3 -3
  272. package/template/.trae/skills/yss-log/references/source-index.md +3 -3
  273. package/template/.trae/skills/yss-mybatis/references/source-index.md +3 -3
  274. package/template/.trae/skills/yss-page-module-development/references/frontend-docs.md +1 -1
  275. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +2 -0
  276. package/template/.trae/skills/yss-resilience4j/references/source-index.md +3 -3
  277. package/template/.trae/skills/yss-security-algorithm/references/source-index.md +3 -3
  278. package/template/.trae/skills/yss-source-index/SKILL.md +3 -3
  279. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +24 -0
  280. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +15 -0
  281. package/template/.trae/skills/yss-taskflow/references/source-index.md +3 -3
  282. package/template/.trae/skills/yss-ui/references/frontend-docs.md +1 -1
  283. package/template/.trae/skills/yss-use-table-height/references/frontend-docs.md +1 -1
  284. package/template/.trae/skills/yss-use-tree-height/references/frontend-docs.md +1 -1
  285. package/template/.trae/skills/yss-userinfo/references/source-index.md +3 -3
  286. package/template/.trae/skills/yss-validation/references/source-index.md +5 -24
  287. package/template/.trae/skills/yss-valuation/references/source-index.md +3 -3
  288. package/template/.trae/skills/yss-variable/references/source-index.md +6 -34
  289. package/template/.trae/skills/yss-web-controller/SKILL.md +4 -4
  290. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.mjs +77 -0
  291. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.test.mjs +19 -0
  292. package/template/CONTEXT.md +2 -0
  293. package/template/README.md +0 -2
  294. package/template/__yss_dotfile__.gitignore +2 -17
  295. package/template/docs/agents/skills-maintenance.md +2 -0
  296. package/template/docs/architecture/README.md +1 -18
  297. package/template/docs/design/README.md +1 -2
  298. package/template/docs/user-guide//345/244/226/351/203/250/345/221/275/344/273/244/350/241/214/345/267/245/345/205/267/345/256/236/350/267/265/346/214/207/345/215/227.md +1 -1
  299. package/template/docs/user-guide//350/247/204/346/240/274/344/270/216/344/273/273/345/212/241/350/277/201/347/247/273/346/214/207/345/215/227.md +4 -0
  300. package/template/scripts/export-yss-skills +3 -385
  301. package/template/scripts/generate-lifecycle-artifacts +2 -26
  302. package/template/scripts/implementation-path-policy +6 -0
  303. package/template/scripts/lib/export-skills.mjs +186 -0
  304. package/template/scripts/lib/implementation-path-policy.mjs +32 -0
  305. package/template/scripts/lib/lifecycle-registry.mjs +175 -0
  306. package/template/scripts/lib/repository-mode.mjs +39 -0
  307. package/template/scripts/lib/scenario-checks.mjs +54 -0
  308. package/template/scripts/lib/skill-supply-chain.mjs +124 -0
  309. package/template/scripts/node-generate-lifecycle-artifacts.mjs +33 -0
  310. package/template/scripts/node-verify-lifecycle-registry.mjs +61 -0
  311. package/template/scripts/repository-mode +9 -0
  312. package/template/scripts/sync-skills +9 -154
  313. package/template/scripts/update-skill-lock +8 -254
  314. package/template/scripts/vendor/NOTICES.md +45 -0
  315. package/template/scripts/vendor/manifest.json +563 -0
  316. package/template/scripts/vendor/xml.mjs +4103 -0
  317. package/template/scripts/vendor/yaml.mjs +6311 -0
  318. package/template/scripts/verify-governance-release +37 -38
  319. package/template/scripts/verify-implementation-path-scenarios +36 -39
  320. package/template/scripts/verify-lifecycle-registry +2 -67
  321. package/template/scripts/verify-lifecycle-scenarios +4 -694
  322. package/template/scripts/verify-matt-yss-integration-scenarios +3 -801
  323. package/template/scripts/verify-openapi-json-handoff-scenarios +3 -270
  324. package/template/scripts/verify-openapi-yaml-first-scenarios +3 -120
  325. package/template/scripts/verify-prototype-backend-scaffold-scenarios +3 -261
  326. package/template/scripts/verify-scaffold-generator-scenarios +4 -4
  327. package/template/scripts/verify-template +18 -277
  328. package/template/scripts/verify-yss-router-scenarios +3 -942
  329. package/template/scripts/verify-yss-ui-scenarios +54 -65
  330. package/template/skills-lock.json +88 -163
  331. package/template/wiki/raw/README.md +0 -2
  332. package/template/wiki/raw/skills-lock.json +0 -75
  333. package/template.manifest.json +1 -0
  334. package/template.snapshot.json +5 -26
  335. package/template/.agents/skills/beautiful-article/README.md +0 -450
  336. package/template/.agents/skills/beautiful-article/README.zh-CN.md +0 -450
  337. package/template/.agents/skills/beautiful-article/SKILL.md +0 -466
  338. package/template/.agents/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  339. package/template/.agents/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  340. package/template/.agents/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  341. package/template/.agents/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  342. package/template/.agents/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  343. package/template/.agents/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  344. package/template/.agents/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  345. package/template/.agents/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  346. package/template/.agents/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  347. package/template/.agents/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  348. package/template/.agents/skills/beautiful-article/manifest.json +0 -15
  349. package/template/.agents/skills/beautiful-article/references/article-types/briefing.md +0 -32
  350. package/template/.agents/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  351. package/template/.agents/skills/beautiful-article/references/article-types/essay.md +0 -31
  352. package/template/.agents/skills/beautiful-article/references/article-types/explainer.md +0 -32
  353. package/template/.agents/skills/beautiful-article/references/article-types/full-report.md +0 -32
  354. package/template/.agents/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  355. package/template/.agents/skills/beautiful-article/references/article-types/longform.md +0 -32
  356. package/template/.agents/skills/beautiful-article/references/article-types/review.md +0 -32
  357. package/template/.agents/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  358. package/template/.agents/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  359. package/template/.agents/skills/beautiful-article/references/article-types.md +0 -42
  360. package/template/.agents/skills/beautiful-article/references/asset-policy.md +0 -71
  361. package/template/.agents/skills/beautiful-article/references/component-policy.md +0 -103
  362. package/template/.agents/skills/beautiful-article/references/cover.md +0 -208
  363. package/template/.agents/skills/beautiful-article/references/harness.md +0 -35
  364. package/template/.agents/skills/beautiful-article/references/html-output.md +0 -42
  365. package/template/.agents/skills/beautiful-article/references/information-density.md +0 -50
  366. package/template/.agents/skills/beautiful-article/references/layout.md +0 -46
  367. package/template/.agents/skills/beautiful-article/references/pdf-output.md +0 -208
  368. package/template/.agents/skills/beautiful-article/references/plan-template.md +0 -109
  369. package/template/.agents/skills/beautiful-article/references/raw-policy.md +0 -86
  370. package/template/.agents/skills/beautiful-article/references/repair-policy.md +0 -35
  371. package/template/.agents/skills/beautiful-article/references/review-checklist.md +0 -133
  372. package/template/.agents/skills/beautiful-article/references/scaffold.md +0 -77
  373. package/template/.agents/skills/beautiful-article/references/section-build.md +0 -100
  374. package/template/.agents/skills/beautiful-article/references/source-to-markdown.md +0 -118
  375. package/template/.agents/skills/beautiful-article/references/theme-selection.md +0 -48
  376. package/template/.agents/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  377. package/template/.agents/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  378. package/template/.agents/skills/beautiful-article/scripts/scaffold.sh +0 -172
  379. package/template/.agents/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  380. package/template/.agents/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  381. package/template/.agents/skills/beautiful-article/theme-profiles/andy.md +0 -57
  382. package/template/.agents/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  383. package/template/.agents/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  384. package/template/.agents/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  385. package/template/.agents/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  386. package/template/.agents/skills/beautiful-article/theme-profiles/index.json +0 -112
  387. package/template/.agents/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  388. package/template/.agents/skills/beautiful-article/theme-profiles/press.md +0 -61
  389. package/template/.agents/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  390. package/template/.agents/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  391. package/template/.agents/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  392. package/template/.agents/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  393. package/template/.agents/skills/drawio/.mcp.json +0 -8
  394. package/template/.agents/skills/drawio/CHANGELOG.md +0 -216
  395. package/template/.agents/skills/drawio/SKILL.md +0 -157
  396. package/template/.agents/skills/drawio/agents/interface.yaml +0 -26
  397. package/template/.agents/skills/drawio/agents/openai.yaml +0 -26
  398. package/template/.agents/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  399. package/template/.agents/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  400. package/template/.agents/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  401. package/template/.agents/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  402. package/template/.agents/skills/drawio/assets/examples/login-flow.drawio +0 -6
  403. package/template/.agents/skills/drawio/assets/examples/microservices.drawio +0 -6
  404. package/template/.agents/skills/drawio/assets/examples/neural-network.drawio +0 -6
  405. package/template/.agents/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  406. package/template/.agents/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  407. package/template/.agents/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  408. package/template/.agents/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  409. package/template/.agents/skills/drawio/assets/palettes/c4-blue.json +0 -29
  410. package/template/.agents/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  411. package/template/.agents/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  412. package/template/.agents/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  413. package/template/.agents/skills/drawio/assets/palettes/ieee-color.json +0 -17
  414. package/template/.agents/skills/drawio/assets/palettes/journal-jama.json +0 -20
  415. package/template/.agents/skills/drawio/assets/palettes/journal-npg.json +0 -23
  416. package/template/.agents/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  417. package/template/.agents/skills/drawio/assets/palettes/morandi.json +0 -21
  418. package/template/.agents/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  419. package/template/.agents/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  420. package/template/.agents/skills/drawio/assets/palettes/tol-bright.json +0 -20
  421. package/template/.agents/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  422. package/template/.agents/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  423. package/template/.agents/skills/drawio/assets/palettes/tol-muted.json +0 -22
  424. package/template/.agents/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  425. package/template/.agents/skills/drawio/assets/schemas/spec.schema.json +0 -620
  426. package/template/.agents/skills/drawio/assets/themes/academic-color.json +0 -299
  427. package/template/.agents/skills/drawio/assets/themes/academic.json +0 -245
  428. package/template/.agents/skills/drawio/assets/themes/arch-dark.json +0 -253
  429. package/template/.agents/skills/drawio/assets/themes/blueprint.json +0 -246
  430. package/template/.agents/skills/drawio/assets/themes/dark-luxury.json +0 -246
  431. package/template/.agents/skills/drawio/assets/themes/dark-terminal.json +0 -244
  432. package/template/.agents/skills/drawio/assets/themes/dark.json +0 -220
  433. package/template/.agents/skills/drawio/assets/themes/high-contrast.json +0 -220
  434. package/template/.agents/skills/drawio/assets/themes/nature.json +0 -220
  435. package/template/.agents/skills/drawio/assets/themes/notion-clean.json +0 -246
  436. package/template/.agents/skills/drawio/assets/themes/tech-blue.json +0 -220
  437. package/template/.agents/skills/drawio/evals/README.md +0 -17
  438. package/template/.agents/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  439. package/template/.agents/skills/drawio/evals/baseline-prompts.json +0 -122
  440. package/template/.agents/skills/drawio/evals/darwin-results.tsv +0 -4
  441. package/template/.agents/skills/drawio/evals/evals.json +0 -223
  442. package/template/.agents/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  443. package/template/.agents/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  444. package/template/.agents/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  445. package/template/.agents/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  446. package/template/.agents/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  447. package/template/.agents/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  448. package/template/.agents/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  449. package/template/.agents/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  450. package/template/.agents/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  451. package/template/.agents/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  452. package/template/.agents/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  453. package/template/.agents/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  454. package/template/.agents/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  455. package/template/.agents/skills/drawio/evals/upstream-integration-cases.json +0 -78
  456. package/template/.agents/skills/drawio/evals/vision-preview-cases.json +0 -147
  457. package/template/.agents/skills/drawio/references/docs/agent-diagrams.md +0 -164
  458. package/template/.agents/skills/drawio/references/docs/ah-format.md +0 -322
  459. package/template/.agents/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  460. package/template/.agents/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  461. package/template/.agents/skills/drawio/references/docs/code-importers.md +0 -53
  462. package/template/.agents/skills/drawio/references/docs/config-importers.md +0 -68
  463. package/template/.agents/skills/drawio/references/docs/design-system/README.md +0 -204
  464. package/template/.agents/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  465. package/template/.agents/skills/drawio/references/docs/design-system/connectors.md +0 -388
  466. package/template/.agents/skills/drawio/references/docs/design-system/formulas.md +0 -196
  467. package/template/.agents/skills/drawio/references/docs/design-system/icons.md +0 -332
  468. package/template/.agents/skills/drawio/references/docs/design-system/shapes.md +0 -269
  469. package/template/.agents/skills/drawio/references/docs/design-system/specification.md +0 -754
  470. package/template/.agents/skills/drawio/references/docs/design-system/themes.md +0 -441
  471. package/template/.agents/skills/drawio/references/docs/design-system/tokens.md +0 -232
  472. package/template/.agents/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  473. package/template/.agents/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  474. package/template/.agents/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  475. package/template/.agents/skills/drawio/references/docs/math-typesetting.md +0 -258
  476. package/template/.agents/skills/drawio/references/docs/mcp-tools.md +0 -85
  477. package/template/.agents/skills/drawio/references/docs/migration-readiness.md +0 -73
  478. package/template/.agents/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  479. package/template/.agents/skills/drawio/references/docs/style-extraction.md +0 -261
  480. package/template/.agents/skills/drawio/references/docs/style-presets.md +0 -126
  481. package/template/.agents/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  482. package/template/.agents/skills/drawio/references/docs/xml-format.md +0 -53
  483. package/template/.agents/skills/drawio/references/examples/README.md +0 -33
  484. package/template/.agents/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  485. package/template/.agents/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  486. package/template/.agents/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  487. package/template/.agents/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  488. package/template/.agents/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  489. package/template/.agents/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  490. package/template/.agents/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  491. package/template/.agents/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  492. package/template/.agents/skills/drawio/references/examples/e-commerce.yaml +0 -141
  493. package/template/.agents/skills/drawio/references/examples/importers/README.md +0 -10
  494. package/template/.agents/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  495. package/template/.agents/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  496. package/template/.agents/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  497. package/template/.agents/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  498. package/template/.agents/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  499. package/template/.agents/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  500. package/template/.agents/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  501. package/template/.agents/skills/drawio/references/examples/importers/schema.sql +0 -10
  502. package/template/.agents/skills/drawio/references/examples/importers/terraform.tf +0 -9
  503. package/template/.agents/skills/drawio/references/examples/login-flow.yaml +0 -65
  504. package/template/.agents/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  505. package/template/.agents/skills/drawio/references/examples/microservices.yaml +0 -58
  506. package/template/.agents/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  507. package/template/.agents/skills/drawio/references/examples/neural-network.yaml +0 -66
  508. package/template/.agents/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  509. package/template/.agents/skills/drawio/references/examples/palettes/README.md +0 -29
  510. package/template/.agents/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  511. package/template/.agents/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  512. package/template/.agents/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  513. package/template/.agents/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  514. package/template/.agents/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  515. package/template/.agents/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  516. package/template/.agents/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  517. package/template/.agents/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  518. package/template/.agents/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  519. package/template/.agents/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  520. package/template/.agents/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  521. package/template/.agents/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  522. package/template/.agents/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  523. package/template/.agents/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  524. package/template/.agents/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  525. package/template/.agents/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  526. package/template/.agents/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  527. package/template/.agents/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  528. package/template/.agents/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  529. package/template/.agents/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  530. package/template/.agents/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  531. package/template/.agents/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  532. package/template/.agents/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  533. package/template/.agents/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  534. package/template/.agents/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  535. package/template/.agents/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  536. package/template/.agents/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  537. package/template/.agents/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  538. package/template/.agents/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  539. package/template/.agents/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  540. package/template/.agents/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  541. package/template/.agents/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  542. package/template/.agents/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  543. package/template/.agents/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  544. package/template/.agents/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  545. package/template/.agents/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  546. package/template/.agents/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  547. package/template/.agents/skills/drawio/references/official/style-reference.md +0 -936
  548. package/template/.agents/skills/drawio/references/official/xml-reference.md +0 -262
  549. package/template/.agents/skills/drawio/references/palette.schema.json +0 -59
  550. package/template/.agents/skills/drawio/references/theme.schema.json +0 -249
  551. package/template/.agents/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  552. package/template/.agents/skills/drawio/references/workflows/create.md +0 -195
  553. package/template/.agents/skills/drawio/references/workflows/edit.md +0 -174
  554. package/template/.agents/skills/drawio/references/workflows/replicate.md +0 -239
  555. package/template/.agents/skills/drawio/references/workflows/visual-review.md +0 -108
  556. package/template/.agents/skills/drawio/reports/output_quality_scorecard.md +0 -106
  557. package/template/.agents/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  558. package/template/.agents/skills/drawio/scripts/adapters/ci.js +0 -139
  559. package/template/.agents/skills/drawio/scripts/adapters/ci.test.js +0 -41
  560. package/template/.agents/skills/drawio/scripts/adapters/code-common.js +0 -171
  561. package/template/.agents/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  562. package/template/.agents/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  563. package/template/.agents/skills/drawio/scripts/adapters/compose.js +0 -134
  564. package/template/.agents/skills/drawio/scripts/adapters/compose.test.js +0 -54
  565. package/template/.agents/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  566. package/template/.agents/skills/drawio/scripts/adapters/config-common.js +0 -131
  567. package/template/.agents/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  568. package/template/.agents/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  569. package/template/.agents/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  570. package/template/.agents/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  571. package/template/.agents/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  572. package/template/.agents/skills/drawio/scripts/adapters/go-code.js +0 -168
  573. package/template/.agents/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  574. package/template/.agents/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  575. package/template/.agents/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  576. package/template/.agents/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  577. package/template/.agents/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  578. package/template/.agents/skills/drawio/scripts/adapters/identity.js +0 -244
  579. package/template/.agents/skills/drawio/scripts/adapters/identity.test.js +0 -123
  580. package/template/.agents/skills/drawio/scripts/adapters/index.js +0 -489
  581. package/template/.agents/skills/drawio/scripts/adapters/index.test.js +0 -152
  582. package/template/.agents/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  583. package/template/.agents/skills/drawio/scripts/adapters/js-code.js +0 -141
  584. package/template/.agents/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  585. package/template/.agents/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  586. package/template/.agents/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  587. package/template/.agents/skills/drawio/scripts/adapters/openapi.js +0 -98
  588. package/template/.agents/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  589. package/template/.agents/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  590. package/template/.agents/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  591. package/template/.agents/skills/drawio/scripts/adapters/optional-python.js +0 -127
  592. package/template/.agents/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  593. package/template/.agents/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  594. package/template/.agents/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  595. package/template/.agents/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  596. package/template/.agents/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  597. package/template/.agents/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  598. package/template/.agents/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  599. package/template/.agents/skills/drawio/scripts/adapters/python-code.js +0 -246
  600. package/template/.agents/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  601. package/template/.agents/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  602. package/template/.agents/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  603. package/template/.agents/skills/drawio/scripts/adapters/rust-code.js +0 -207
  604. package/template/.agents/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  605. package/template/.agents/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  606. package/template/.agents/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  607. package/template/.agents/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  608. package/template/.agents/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  609. package/template/.agents/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  610. package/template/.agents/skills/drawio/scripts/cli.js +0 -700
  611. package/template/.agents/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  612. package/template/.agents/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  613. package/template/.agents/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  614. package/template/.agents/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  615. package/template/.agents/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  616. package/template/.agents/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  617. package/template/.agents/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  618. package/template/.agents/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  619. package/template/.agents/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  620. package/template/.agents/skills/drawio/scripts/dsl/document-spec.js +0 -256
  621. package/template/.agents/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  622. package/template/.agents/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  623. package/template/.agents/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  624. package/template/.agents/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  625. package/template/.agents/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  626. package/template/.agents/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  627. package/template/.agents/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  628. package/template/.agents/skills/drawio/scripts/dsl/multi-page.js +0 -224
  629. package/template/.agents/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  630. package/template/.agents/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  631. package/template/.agents/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  632. package/template/.agents/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  633. package/template/.agents/skills/drawio/scripts/dsl/palette.js +0 -302
  634. package/template/.agents/skills/drawio/scripts/dsl/palette.test.js +0 -197
  635. package/template/.agents/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  636. package/template/.agents/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  637. package/template/.agents/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  638. package/template/.agents/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  639. package/template/.agents/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  640. package/template/.agents/skills/drawio/scripts/install.bat +0 -64
  641. package/template/.agents/skills/drawio/scripts/install.sh +0 -44
  642. package/template/.agents/skills/drawio/scripts/math/index.js +0 -317
  643. package/template/.agents/skills/drawio/scripts/math/index.test.js +0 -62
  644. package/template/.agents/skills/drawio/scripts/package.json +0 -1
  645. package/template/.agents/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  646. package/template/.agents/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  647. package/template/.agents/skills/drawio/scripts/postprocess/cli.js +0 -228
  648. package/template/.agents/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  649. package/template/.agents/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  650. package/template/.agents/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  651. package/template/.agents/skills/drawio/scripts/postprocess/html.js +0 -197
  652. package/template/.agents/skills/drawio/scripts/postprocess/html.test.js +0 -50
  653. package/template/.agents/skills/drawio/scripts/postprocess/index.js +0 -5
  654. package/template/.agents/skills/drawio/scripts/postprocess/input.js +0 -112
  655. package/template/.agents/skills/drawio/scripts/postprocess/input.test.js +0 -73
  656. package/template/.agents/skills/drawio/scripts/postprocess/mutate.js +0 -584
  657. package/template/.agents/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  658. package/template/.agents/skills/drawio/scripts/postprocess/projection.js +0 -178
  659. package/template/.agents/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  660. package/template/.agents/skills/drawio/scripts/runtime/artifacts.js +0 -283
  661. package/template/.agents/skills/drawio/scripts/runtime/desktop.js +0 -204
  662. package/template/.agents/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  663. package/template/.agents/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  664. package/template/.agents/skills/drawio/scripts/runtime/export-stability.js +0 -75
  665. package/template/.agents/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  666. package/template/.agents/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  667. package/template/.agents/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  668. package/template/.agents/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  669. package/template/.agents/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  670. package/template/.agents/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  671. package/template/.agents/skills/drawio/scripts/shared/xml-utils.js +0 -241
  672. package/template/.agents/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  673. package/template/.agents/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  674. package/template/.agents/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  675. package/template/.agents/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  676. package/template/.agents/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  677. package/template/.agents/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  678. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  679. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  680. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  681. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  682. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  683. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  684. package/template/.agents/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  685. package/template/.agents/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  686. package/template/.agents/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  687. package/template/.agents/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  688. package/template/.agents/skills/drawio/styles/built-in/corporate.json +0 -49
  689. package/template/.agents/skills/drawio/styles/built-in/default.json +0 -49
  690. package/template/.agents/skills/drawio/styles/built-in/handdrawn.json +0 -49
  691. package/template/.agents/skills/drawio/styles/schema.json +0 -112
  692. package/template/.agents/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  693. package/template/.agents/skills/drawio-academic-skills/README.md +0 -103
  694. package/template/.agents/skills/drawio-academic-skills/README_CN.md +0 -103
  695. package/template/.agents/skills/drawio-academic-skills/SKILL.md +0 -161
  696. package/template/.agents/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  697. package/template/.agents/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  698. package/template/.agents/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  699. package/template/.agents/skills/drawio-academic-skills/evals/README.md +0 -13
  700. package/template/.agents/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  701. package/template/.agents/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  702. package/template/.agents/skills/drawio-academic-skills/evals/evals.json +0 -228
  703. package/template/.agents/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  704. package/template/.agents/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  705. package/template/.agents/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  706. package/template/.agents/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  707. package/template/.agents/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  708. package/template/.agents/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  709. package/template/.agents/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  710. package/template/.agents/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  711. package/template/.agents/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  712. package/template/.agents/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  713. package/template/.agents/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  714. package/template/.agents/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  715. package/template/.agents/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  716. package/template/.agents/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  717. package/template/.agents/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  718. package/template/.agents/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  719. package/template/.agents/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  720. package/template/.agents/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  721. package/template/.agents/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  722. package/template/.agents/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  723. package/template/.agents/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  724. package/template/.agents/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  725. package/template/.agents/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  726. package/template/.agents/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  727. package/template/.agents/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  728. package/template/.agents/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  729. package/template/.agents/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  730. package/template/.agents/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  731. package/template/.agents/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  732. package/template/.agents/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  733. package/template/.agents/skills/kb-retriever/README.md +0 -197
  734. package/template/.agents/skills/kb-retriever/README.zh-CN.md +0 -197
  735. package/template/.agents/skills/kb-retriever/SKILL.md +0 -250
  736. package/template/.agents/skills/kb-retriever/manifest.json +0 -15
  737. package/template/.agents/skills/kb-retriever/references/excel_analysis.md +0 -129
  738. package/template/.agents/skills/kb-retriever/references/excel_reading.md +0 -72
  739. package/template/.agents/skills/kb-retriever/references/pdf_reading.md +0 -362
  740. package/template/.agents/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  741. package/template/.agents/skills/yss-db2mybatis/requirements.txt +0 -4
  742. package/template/.agents/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  743. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  744. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  745. package/template/.agents/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  746. package/template/.agents/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  747. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  748. package/template/.agents/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  749. package/template/.claude/skills/beautiful-article/README.md +0 -450
  750. package/template/.claude/skills/beautiful-article/README.zh-CN.md +0 -450
  751. package/template/.claude/skills/beautiful-article/SKILL.md +0 -466
  752. package/template/.claude/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  753. package/template/.claude/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  754. package/template/.claude/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  755. package/template/.claude/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  756. package/template/.claude/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  757. package/template/.claude/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  758. package/template/.claude/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  759. package/template/.claude/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  760. package/template/.claude/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  761. package/template/.claude/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  762. package/template/.claude/skills/beautiful-article/manifest.json +0 -15
  763. package/template/.claude/skills/beautiful-article/references/article-types/briefing.md +0 -32
  764. package/template/.claude/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  765. package/template/.claude/skills/beautiful-article/references/article-types/essay.md +0 -31
  766. package/template/.claude/skills/beautiful-article/references/article-types/explainer.md +0 -32
  767. package/template/.claude/skills/beautiful-article/references/article-types/full-report.md +0 -32
  768. package/template/.claude/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  769. package/template/.claude/skills/beautiful-article/references/article-types/longform.md +0 -32
  770. package/template/.claude/skills/beautiful-article/references/article-types/review.md +0 -32
  771. package/template/.claude/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  772. package/template/.claude/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  773. package/template/.claude/skills/beautiful-article/references/article-types.md +0 -42
  774. package/template/.claude/skills/beautiful-article/references/asset-policy.md +0 -71
  775. package/template/.claude/skills/beautiful-article/references/component-policy.md +0 -103
  776. package/template/.claude/skills/beautiful-article/references/cover.md +0 -208
  777. package/template/.claude/skills/beautiful-article/references/harness.md +0 -35
  778. package/template/.claude/skills/beautiful-article/references/html-output.md +0 -42
  779. package/template/.claude/skills/beautiful-article/references/information-density.md +0 -50
  780. package/template/.claude/skills/beautiful-article/references/layout.md +0 -46
  781. package/template/.claude/skills/beautiful-article/references/pdf-output.md +0 -208
  782. package/template/.claude/skills/beautiful-article/references/plan-template.md +0 -109
  783. package/template/.claude/skills/beautiful-article/references/raw-policy.md +0 -86
  784. package/template/.claude/skills/beautiful-article/references/repair-policy.md +0 -35
  785. package/template/.claude/skills/beautiful-article/references/review-checklist.md +0 -133
  786. package/template/.claude/skills/beautiful-article/references/scaffold.md +0 -77
  787. package/template/.claude/skills/beautiful-article/references/section-build.md +0 -100
  788. package/template/.claude/skills/beautiful-article/references/source-to-markdown.md +0 -118
  789. package/template/.claude/skills/beautiful-article/references/theme-selection.md +0 -48
  790. package/template/.claude/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  791. package/template/.claude/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  792. package/template/.claude/skills/beautiful-article/scripts/scaffold.sh +0 -172
  793. package/template/.claude/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  794. package/template/.claude/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  795. package/template/.claude/skills/beautiful-article/theme-profiles/andy.md +0 -57
  796. package/template/.claude/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  797. package/template/.claude/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  798. package/template/.claude/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  799. package/template/.claude/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  800. package/template/.claude/skills/beautiful-article/theme-profiles/index.json +0 -112
  801. package/template/.claude/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  802. package/template/.claude/skills/beautiful-article/theme-profiles/press.md +0 -61
  803. package/template/.claude/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  804. package/template/.claude/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  805. package/template/.claude/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  806. package/template/.claude/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  807. package/template/.claude/skills/drawio/.mcp.json +0 -8
  808. package/template/.claude/skills/drawio/CHANGELOG.md +0 -216
  809. package/template/.claude/skills/drawio/SKILL.md +0 -157
  810. package/template/.claude/skills/drawio/agents/interface.yaml +0 -26
  811. package/template/.claude/skills/drawio/agents/openai.yaml +0 -26
  812. package/template/.claude/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  813. package/template/.claude/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  814. package/template/.claude/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  815. package/template/.claude/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  816. package/template/.claude/skills/drawio/assets/examples/login-flow.drawio +0 -6
  817. package/template/.claude/skills/drawio/assets/examples/microservices.drawio +0 -6
  818. package/template/.claude/skills/drawio/assets/examples/neural-network.drawio +0 -6
  819. package/template/.claude/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  820. package/template/.claude/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  821. package/template/.claude/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  822. package/template/.claude/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  823. package/template/.claude/skills/drawio/assets/palettes/c4-blue.json +0 -29
  824. package/template/.claude/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  825. package/template/.claude/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  826. package/template/.claude/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  827. package/template/.claude/skills/drawio/assets/palettes/ieee-color.json +0 -17
  828. package/template/.claude/skills/drawio/assets/palettes/journal-jama.json +0 -20
  829. package/template/.claude/skills/drawio/assets/palettes/journal-npg.json +0 -23
  830. package/template/.claude/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  831. package/template/.claude/skills/drawio/assets/palettes/morandi.json +0 -21
  832. package/template/.claude/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  833. package/template/.claude/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  834. package/template/.claude/skills/drawio/assets/palettes/tol-bright.json +0 -20
  835. package/template/.claude/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  836. package/template/.claude/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  837. package/template/.claude/skills/drawio/assets/palettes/tol-muted.json +0 -22
  838. package/template/.claude/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  839. package/template/.claude/skills/drawio/assets/schemas/spec.schema.json +0 -620
  840. package/template/.claude/skills/drawio/assets/themes/academic-color.json +0 -299
  841. package/template/.claude/skills/drawio/assets/themes/academic.json +0 -245
  842. package/template/.claude/skills/drawio/assets/themes/arch-dark.json +0 -253
  843. package/template/.claude/skills/drawio/assets/themes/blueprint.json +0 -246
  844. package/template/.claude/skills/drawio/assets/themes/dark-luxury.json +0 -246
  845. package/template/.claude/skills/drawio/assets/themes/dark-terminal.json +0 -244
  846. package/template/.claude/skills/drawio/assets/themes/dark.json +0 -220
  847. package/template/.claude/skills/drawio/assets/themes/high-contrast.json +0 -220
  848. package/template/.claude/skills/drawio/assets/themes/nature.json +0 -220
  849. package/template/.claude/skills/drawio/assets/themes/notion-clean.json +0 -246
  850. package/template/.claude/skills/drawio/assets/themes/tech-blue.json +0 -220
  851. package/template/.claude/skills/drawio/evals/README.md +0 -17
  852. package/template/.claude/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  853. package/template/.claude/skills/drawio/evals/baseline-prompts.json +0 -122
  854. package/template/.claude/skills/drawio/evals/darwin-results.tsv +0 -4
  855. package/template/.claude/skills/drawio/evals/evals.json +0 -223
  856. package/template/.claude/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  857. package/template/.claude/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  858. package/template/.claude/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  859. package/template/.claude/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  860. package/template/.claude/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  861. package/template/.claude/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  862. package/template/.claude/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  863. package/template/.claude/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  864. package/template/.claude/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  865. package/template/.claude/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  866. package/template/.claude/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  867. package/template/.claude/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  868. package/template/.claude/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  869. package/template/.claude/skills/drawio/evals/upstream-integration-cases.json +0 -78
  870. package/template/.claude/skills/drawio/evals/vision-preview-cases.json +0 -147
  871. package/template/.claude/skills/drawio/references/docs/agent-diagrams.md +0 -164
  872. package/template/.claude/skills/drawio/references/docs/ah-format.md +0 -322
  873. package/template/.claude/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  874. package/template/.claude/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  875. package/template/.claude/skills/drawio/references/docs/code-importers.md +0 -53
  876. package/template/.claude/skills/drawio/references/docs/config-importers.md +0 -68
  877. package/template/.claude/skills/drawio/references/docs/design-system/README.md +0 -204
  878. package/template/.claude/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  879. package/template/.claude/skills/drawio/references/docs/design-system/connectors.md +0 -388
  880. package/template/.claude/skills/drawio/references/docs/design-system/formulas.md +0 -196
  881. package/template/.claude/skills/drawio/references/docs/design-system/icons.md +0 -332
  882. package/template/.claude/skills/drawio/references/docs/design-system/shapes.md +0 -269
  883. package/template/.claude/skills/drawio/references/docs/design-system/specification.md +0 -754
  884. package/template/.claude/skills/drawio/references/docs/design-system/themes.md +0 -441
  885. package/template/.claude/skills/drawio/references/docs/design-system/tokens.md +0 -232
  886. package/template/.claude/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  887. package/template/.claude/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  888. package/template/.claude/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  889. package/template/.claude/skills/drawio/references/docs/math-typesetting.md +0 -258
  890. package/template/.claude/skills/drawio/references/docs/mcp-tools.md +0 -85
  891. package/template/.claude/skills/drawio/references/docs/migration-readiness.md +0 -73
  892. package/template/.claude/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  893. package/template/.claude/skills/drawio/references/docs/style-extraction.md +0 -261
  894. package/template/.claude/skills/drawio/references/docs/style-presets.md +0 -126
  895. package/template/.claude/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  896. package/template/.claude/skills/drawio/references/docs/xml-format.md +0 -53
  897. package/template/.claude/skills/drawio/references/examples/README.md +0 -33
  898. package/template/.claude/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  899. package/template/.claude/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  900. package/template/.claude/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  901. package/template/.claude/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  902. package/template/.claude/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  903. package/template/.claude/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  904. package/template/.claude/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  905. package/template/.claude/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  906. package/template/.claude/skills/drawio/references/examples/e-commerce.yaml +0 -141
  907. package/template/.claude/skills/drawio/references/examples/importers/README.md +0 -10
  908. package/template/.claude/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  909. package/template/.claude/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  910. package/template/.claude/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  911. package/template/.claude/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  912. package/template/.claude/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  913. package/template/.claude/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  914. package/template/.claude/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  915. package/template/.claude/skills/drawio/references/examples/importers/schema.sql +0 -10
  916. package/template/.claude/skills/drawio/references/examples/importers/terraform.tf +0 -9
  917. package/template/.claude/skills/drawio/references/examples/login-flow.yaml +0 -65
  918. package/template/.claude/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  919. package/template/.claude/skills/drawio/references/examples/microservices.yaml +0 -58
  920. package/template/.claude/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  921. package/template/.claude/skills/drawio/references/examples/neural-network.yaml +0 -66
  922. package/template/.claude/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  923. package/template/.claude/skills/drawio/references/examples/palettes/README.md +0 -29
  924. package/template/.claude/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  925. package/template/.claude/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  926. package/template/.claude/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  927. package/template/.claude/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  928. package/template/.claude/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  929. package/template/.claude/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  930. package/template/.claude/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  931. package/template/.claude/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  932. package/template/.claude/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  933. package/template/.claude/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  934. package/template/.claude/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  935. package/template/.claude/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  936. package/template/.claude/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  937. package/template/.claude/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  938. package/template/.claude/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  939. package/template/.claude/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  940. package/template/.claude/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  941. package/template/.claude/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  942. package/template/.claude/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  943. package/template/.claude/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  944. package/template/.claude/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  945. package/template/.claude/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  946. package/template/.claude/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  947. package/template/.claude/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  948. package/template/.claude/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  949. package/template/.claude/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  950. package/template/.claude/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  951. package/template/.claude/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  952. package/template/.claude/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  953. package/template/.claude/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  954. package/template/.claude/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  955. package/template/.claude/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  956. package/template/.claude/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  957. package/template/.claude/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  958. package/template/.claude/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  959. package/template/.claude/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  960. package/template/.claude/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  961. package/template/.claude/skills/drawio/references/official/style-reference.md +0 -936
  962. package/template/.claude/skills/drawio/references/official/xml-reference.md +0 -262
  963. package/template/.claude/skills/drawio/references/palette.schema.json +0 -59
  964. package/template/.claude/skills/drawio/references/theme.schema.json +0 -249
  965. package/template/.claude/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  966. package/template/.claude/skills/drawio/references/workflows/create.md +0 -195
  967. package/template/.claude/skills/drawio/references/workflows/edit.md +0 -174
  968. package/template/.claude/skills/drawio/references/workflows/replicate.md +0 -239
  969. package/template/.claude/skills/drawio/references/workflows/visual-review.md +0 -108
  970. package/template/.claude/skills/drawio/reports/output_quality_scorecard.md +0 -106
  971. package/template/.claude/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  972. package/template/.claude/skills/drawio/scripts/adapters/ci.js +0 -139
  973. package/template/.claude/skills/drawio/scripts/adapters/ci.test.js +0 -41
  974. package/template/.claude/skills/drawio/scripts/adapters/code-common.js +0 -171
  975. package/template/.claude/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  976. package/template/.claude/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  977. package/template/.claude/skills/drawio/scripts/adapters/compose.js +0 -134
  978. package/template/.claude/skills/drawio/scripts/adapters/compose.test.js +0 -54
  979. package/template/.claude/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  980. package/template/.claude/skills/drawio/scripts/adapters/config-common.js +0 -131
  981. package/template/.claude/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  982. package/template/.claude/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  983. package/template/.claude/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  984. package/template/.claude/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  985. package/template/.claude/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  986. package/template/.claude/skills/drawio/scripts/adapters/go-code.js +0 -168
  987. package/template/.claude/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  988. package/template/.claude/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  989. package/template/.claude/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  990. package/template/.claude/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  991. package/template/.claude/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  992. package/template/.claude/skills/drawio/scripts/adapters/identity.js +0 -244
  993. package/template/.claude/skills/drawio/scripts/adapters/identity.test.js +0 -123
  994. package/template/.claude/skills/drawio/scripts/adapters/index.js +0 -489
  995. package/template/.claude/skills/drawio/scripts/adapters/index.test.js +0 -152
  996. package/template/.claude/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  997. package/template/.claude/skills/drawio/scripts/adapters/js-code.js +0 -141
  998. package/template/.claude/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  999. package/template/.claude/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  1000. package/template/.claude/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  1001. package/template/.claude/skills/drawio/scripts/adapters/openapi.js +0 -98
  1002. package/template/.claude/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  1003. package/template/.claude/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  1004. package/template/.claude/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  1005. package/template/.claude/skills/drawio/scripts/adapters/optional-python.js +0 -127
  1006. package/template/.claude/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  1007. package/template/.claude/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  1008. package/template/.claude/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  1009. package/template/.claude/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  1010. package/template/.claude/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  1011. package/template/.claude/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  1012. package/template/.claude/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  1013. package/template/.claude/skills/drawio/scripts/adapters/python-code.js +0 -246
  1014. package/template/.claude/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  1015. package/template/.claude/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  1016. package/template/.claude/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  1017. package/template/.claude/skills/drawio/scripts/adapters/rust-code.js +0 -207
  1018. package/template/.claude/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  1019. package/template/.claude/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  1020. package/template/.claude/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  1021. package/template/.claude/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  1022. package/template/.claude/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  1023. package/template/.claude/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  1024. package/template/.claude/skills/drawio/scripts/cli.js +0 -700
  1025. package/template/.claude/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  1026. package/template/.claude/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  1027. package/template/.claude/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  1028. package/template/.claude/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  1029. package/template/.claude/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  1030. package/template/.claude/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  1031. package/template/.claude/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  1032. package/template/.claude/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  1033. package/template/.claude/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  1034. package/template/.claude/skills/drawio/scripts/dsl/document-spec.js +0 -256
  1035. package/template/.claude/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  1036. package/template/.claude/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  1037. package/template/.claude/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  1038. package/template/.claude/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  1039. package/template/.claude/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  1040. package/template/.claude/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  1041. package/template/.claude/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  1042. package/template/.claude/skills/drawio/scripts/dsl/multi-page.js +0 -224
  1043. package/template/.claude/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  1044. package/template/.claude/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  1045. package/template/.claude/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  1046. package/template/.claude/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  1047. package/template/.claude/skills/drawio/scripts/dsl/palette.js +0 -302
  1048. package/template/.claude/skills/drawio/scripts/dsl/palette.test.js +0 -197
  1049. package/template/.claude/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  1050. package/template/.claude/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  1051. package/template/.claude/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  1052. package/template/.claude/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  1053. package/template/.claude/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  1054. package/template/.claude/skills/drawio/scripts/install.bat +0 -64
  1055. package/template/.claude/skills/drawio/scripts/install.sh +0 -44
  1056. package/template/.claude/skills/drawio/scripts/math/index.js +0 -317
  1057. package/template/.claude/skills/drawio/scripts/math/index.test.js +0 -62
  1058. package/template/.claude/skills/drawio/scripts/package.json +0 -1
  1059. package/template/.claude/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  1060. package/template/.claude/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  1061. package/template/.claude/skills/drawio/scripts/postprocess/cli.js +0 -228
  1062. package/template/.claude/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  1063. package/template/.claude/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  1064. package/template/.claude/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  1065. package/template/.claude/skills/drawio/scripts/postprocess/html.js +0 -197
  1066. package/template/.claude/skills/drawio/scripts/postprocess/html.test.js +0 -50
  1067. package/template/.claude/skills/drawio/scripts/postprocess/index.js +0 -5
  1068. package/template/.claude/skills/drawio/scripts/postprocess/input.js +0 -112
  1069. package/template/.claude/skills/drawio/scripts/postprocess/input.test.js +0 -73
  1070. package/template/.claude/skills/drawio/scripts/postprocess/mutate.js +0 -584
  1071. package/template/.claude/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  1072. package/template/.claude/skills/drawio/scripts/postprocess/projection.js +0 -178
  1073. package/template/.claude/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  1074. package/template/.claude/skills/drawio/scripts/runtime/artifacts.js +0 -283
  1075. package/template/.claude/skills/drawio/scripts/runtime/desktop.js +0 -204
  1076. package/template/.claude/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  1077. package/template/.claude/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  1078. package/template/.claude/skills/drawio/scripts/runtime/export-stability.js +0 -75
  1079. package/template/.claude/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  1080. package/template/.claude/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  1081. package/template/.claude/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  1082. package/template/.claude/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  1083. package/template/.claude/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  1084. package/template/.claude/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  1085. package/template/.claude/skills/drawio/scripts/shared/xml-utils.js +0 -241
  1086. package/template/.claude/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  1087. package/template/.claude/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  1088. package/template/.claude/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  1089. package/template/.claude/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  1090. package/template/.claude/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  1091. package/template/.claude/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  1092. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  1093. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  1094. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  1095. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  1096. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  1097. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  1098. package/template/.claude/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  1099. package/template/.claude/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  1100. package/template/.claude/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  1101. package/template/.claude/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  1102. package/template/.claude/skills/drawio/styles/built-in/corporate.json +0 -49
  1103. package/template/.claude/skills/drawio/styles/built-in/default.json +0 -49
  1104. package/template/.claude/skills/drawio/styles/built-in/handdrawn.json +0 -49
  1105. package/template/.claude/skills/drawio/styles/schema.json +0 -112
  1106. package/template/.claude/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  1107. package/template/.claude/skills/drawio-academic-skills/README.md +0 -103
  1108. package/template/.claude/skills/drawio-academic-skills/README_CN.md +0 -103
  1109. package/template/.claude/skills/drawio-academic-skills/SKILL.md +0 -161
  1110. package/template/.claude/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  1111. package/template/.claude/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  1112. package/template/.claude/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  1113. package/template/.claude/skills/drawio-academic-skills/evals/README.md +0 -13
  1114. package/template/.claude/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  1115. package/template/.claude/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  1116. package/template/.claude/skills/drawio-academic-skills/evals/evals.json +0 -228
  1117. package/template/.claude/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  1118. package/template/.claude/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  1119. package/template/.claude/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  1120. package/template/.claude/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  1121. package/template/.claude/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  1122. package/template/.claude/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  1123. package/template/.claude/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  1124. package/template/.claude/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  1125. package/template/.claude/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  1126. package/template/.claude/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  1127. package/template/.claude/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  1128. package/template/.claude/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  1129. package/template/.claude/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  1130. package/template/.claude/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  1131. package/template/.claude/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  1132. package/template/.claude/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  1133. package/template/.claude/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  1134. package/template/.claude/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  1135. package/template/.claude/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  1136. package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  1137. package/template/.claude/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  1138. package/template/.claude/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  1139. package/template/.claude/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  1140. package/template/.claude/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  1141. package/template/.claude/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  1142. package/template/.claude/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  1143. package/template/.claude/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  1144. package/template/.claude/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  1145. package/template/.claude/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  1146. package/template/.claude/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  1147. package/template/.claude/skills/kb-retriever/README.md +0 -197
  1148. package/template/.claude/skills/kb-retriever/README.zh-CN.md +0 -197
  1149. package/template/.claude/skills/kb-retriever/SKILL.md +0 -250
  1150. package/template/.claude/skills/kb-retriever/manifest.json +0 -15
  1151. package/template/.claude/skills/kb-retriever/references/excel_analysis.md +0 -129
  1152. package/template/.claude/skills/kb-retriever/references/excel_reading.md +0 -72
  1153. package/template/.claude/skills/kb-retriever/references/pdf_reading.md +0 -362
  1154. package/template/.claude/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  1155. package/template/.claude/skills/yss-db2mybatis/requirements.txt +0 -4
  1156. package/template/.claude/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  1157. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  1158. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  1159. package/template/.claude/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  1160. package/template/.claude/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  1161. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  1162. package/template/.claude/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  1163. package/template/.codex/skills/beautiful-article/README.md +0 -450
  1164. package/template/.codex/skills/beautiful-article/README.zh-CN.md +0 -450
  1165. package/template/.codex/skills/beautiful-article/SKILL.md +0 -466
  1166. package/template/.codex/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  1167. package/template/.codex/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  1168. package/template/.codex/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  1169. package/template/.codex/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  1170. package/template/.codex/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  1171. package/template/.codex/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  1172. package/template/.codex/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  1173. package/template/.codex/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  1174. package/template/.codex/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  1175. package/template/.codex/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  1176. package/template/.codex/skills/beautiful-article/manifest.json +0 -15
  1177. package/template/.codex/skills/beautiful-article/references/article-types/briefing.md +0 -32
  1178. package/template/.codex/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  1179. package/template/.codex/skills/beautiful-article/references/article-types/essay.md +0 -31
  1180. package/template/.codex/skills/beautiful-article/references/article-types/explainer.md +0 -32
  1181. package/template/.codex/skills/beautiful-article/references/article-types/full-report.md +0 -32
  1182. package/template/.codex/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  1183. package/template/.codex/skills/beautiful-article/references/article-types/longform.md +0 -32
  1184. package/template/.codex/skills/beautiful-article/references/article-types/review.md +0 -32
  1185. package/template/.codex/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  1186. package/template/.codex/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  1187. package/template/.codex/skills/beautiful-article/references/article-types.md +0 -42
  1188. package/template/.codex/skills/beautiful-article/references/asset-policy.md +0 -71
  1189. package/template/.codex/skills/beautiful-article/references/component-policy.md +0 -103
  1190. package/template/.codex/skills/beautiful-article/references/cover.md +0 -208
  1191. package/template/.codex/skills/beautiful-article/references/harness.md +0 -35
  1192. package/template/.codex/skills/beautiful-article/references/html-output.md +0 -42
  1193. package/template/.codex/skills/beautiful-article/references/information-density.md +0 -50
  1194. package/template/.codex/skills/beautiful-article/references/layout.md +0 -46
  1195. package/template/.codex/skills/beautiful-article/references/pdf-output.md +0 -208
  1196. package/template/.codex/skills/beautiful-article/references/plan-template.md +0 -109
  1197. package/template/.codex/skills/beautiful-article/references/raw-policy.md +0 -86
  1198. package/template/.codex/skills/beautiful-article/references/repair-policy.md +0 -35
  1199. package/template/.codex/skills/beautiful-article/references/review-checklist.md +0 -133
  1200. package/template/.codex/skills/beautiful-article/references/scaffold.md +0 -77
  1201. package/template/.codex/skills/beautiful-article/references/section-build.md +0 -100
  1202. package/template/.codex/skills/beautiful-article/references/source-to-markdown.md +0 -118
  1203. package/template/.codex/skills/beautiful-article/references/theme-selection.md +0 -48
  1204. package/template/.codex/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  1205. package/template/.codex/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  1206. package/template/.codex/skills/beautiful-article/scripts/scaffold.sh +0 -172
  1207. package/template/.codex/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  1208. package/template/.codex/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  1209. package/template/.codex/skills/beautiful-article/theme-profiles/andy.md +0 -57
  1210. package/template/.codex/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  1211. package/template/.codex/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  1212. package/template/.codex/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  1213. package/template/.codex/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  1214. package/template/.codex/skills/beautiful-article/theme-profiles/index.json +0 -112
  1215. package/template/.codex/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  1216. package/template/.codex/skills/beautiful-article/theme-profiles/press.md +0 -61
  1217. package/template/.codex/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  1218. package/template/.codex/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  1219. package/template/.codex/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  1220. package/template/.codex/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  1221. package/template/.codex/skills/drawio/.mcp.json +0 -8
  1222. package/template/.codex/skills/drawio/CHANGELOG.md +0 -216
  1223. package/template/.codex/skills/drawio/SKILL.md +0 -157
  1224. package/template/.codex/skills/drawio/agents/interface.yaml +0 -26
  1225. package/template/.codex/skills/drawio/agents/openai.yaml +0 -26
  1226. package/template/.codex/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  1227. package/template/.codex/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  1228. package/template/.codex/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  1229. package/template/.codex/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  1230. package/template/.codex/skills/drawio/assets/examples/login-flow.drawio +0 -6
  1231. package/template/.codex/skills/drawio/assets/examples/microservices.drawio +0 -6
  1232. package/template/.codex/skills/drawio/assets/examples/neural-network.drawio +0 -6
  1233. package/template/.codex/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  1234. package/template/.codex/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  1235. package/template/.codex/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  1236. package/template/.codex/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  1237. package/template/.codex/skills/drawio/assets/palettes/c4-blue.json +0 -29
  1238. package/template/.codex/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  1239. package/template/.codex/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  1240. package/template/.codex/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  1241. package/template/.codex/skills/drawio/assets/palettes/ieee-color.json +0 -17
  1242. package/template/.codex/skills/drawio/assets/palettes/journal-jama.json +0 -20
  1243. package/template/.codex/skills/drawio/assets/palettes/journal-npg.json +0 -23
  1244. package/template/.codex/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  1245. package/template/.codex/skills/drawio/assets/palettes/morandi.json +0 -21
  1246. package/template/.codex/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  1247. package/template/.codex/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  1248. package/template/.codex/skills/drawio/assets/palettes/tol-bright.json +0 -20
  1249. package/template/.codex/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  1250. package/template/.codex/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  1251. package/template/.codex/skills/drawio/assets/palettes/tol-muted.json +0 -22
  1252. package/template/.codex/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  1253. package/template/.codex/skills/drawio/assets/schemas/spec.schema.json +0 -620
  1254. package/template/.codex/skills/drawio/assets/themes/academic-color.json +0 -299
  1255. package/template/.codex/skills/drawio/assets/themes/academic.json +0 -245
  1256. package/template/.codex/skills/drawio/assets/themes/arch-dark.json +0 -253
  1257. package/template/.codex/skills/drawio/assets/themes/blueprint.json +0 -246
  1258. package/template/.codex/skills/drawio/assets/themes/dark-luxury.json +0 -246
  1259. package/template/.codex/skills/drawio/assets/themes/dark-terminal.json +0 -244
  1260. package/template/.codex/skills/drawio/assets/themes/dark.json +0 -220
  1261. package/template/.codex/skills/drawio/assets/themes/high-contrast.json +0 -220
  1262. package/template/.codex/skills/drawio/assets/themes/nature.json +0 -220
  1263. package/template/.codex/skills/drawio/assets/themes/notion-clean.json +0 -246
  1264. package/template/.codex/skills/drawio/assets/themes/tech-blue.json +0 -220
  1265. package/template/.codex/skills/drawio/evals/README.md +0 -17
  1266. package/template/.codex/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  1267. package/template/.codex/skills/drawio/evals/baseline-prompts.json +0 -122
  1268. package/template/.codex/skills/drawio/evals/darwin-results.tsv +0 -4
  1269. package/template/.codex/skills/drawio/evals/evals.json +0 -223
  1270. package/template/.codex/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  1271. package/template/.codex/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  1272. package/template/.codex/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  1273. package/template/.codex/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  1274. package/template/.codex/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  1275. package/template/.codex/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  1276. package/template/.codex/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  1277. package/template/.codex/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  1278. package/template/.codex/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  1279. package/template/.codex/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  1280. package/template/.codex/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  1281. package/template/.codex/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  1282. package/template/.codex/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  1283. package/template/.codex/skills/drawio/evals/upstream-integration-cases.json +0 -78
  1284. package/template/.codex/skills/drawio/evals/vision-preview-cases.json +0 -147
  1285. package/template/.codex/skills/drawio/references/docs/agent-diagrams.md +0 -164
  1286. package/template/.codex/skills/drawio/references/docs/ah-format.md +0 -322
  1287. package/template/.codex/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  1288. package/template/.codex/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  1289. package/template/.codex/skills/drawio/references/docs/code-importers.md +0 -53
  1290. package/template/.codex/skills/drawio/references/docs/config-importers.md +0 -68
  1291. package/template/.codex/skills/drawio/references/docs/design-system/README.md +0 -204
  1292. package/template/.codex/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  1293. package/template/.codex/skills/drawio/references/docs/design-system/connectors.md +0 -388
  1294. package/template/.codex/skills/drawio/references/docs/design-system/formulas.md +0 -196
  1295. package/template/.codex/skills/drawio/references/docs/design-system/icons.md +0 -332
  1296. package/template/.codex/skills/drawio/references/docs/design-system/shapes.md +0 -269
  1297. package/template/.codex/skills/drawio/references/docs/design-system/specification.md +0 -754
  1298. package/template/.codex/skills/drawio/references/docs/design-system/themes.md +0 -441
  1299. package/template/.codex/skills/drawio/references/docs/design-system/tokens.md +0 -232
  1300. package/template/.codex/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  1301. package/template/.codex/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  1302. package/template/.codex/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  1303. package/template/.codex/skills/drawio/references/docs/math-typesetting.md +0 -258
  1304. package/template/.codex/skills/drawio/references/docs/mcp-tools.md +0 -85
  1305. package/template/.codex/skills/drawio/references/docs/migration-readiness.md +0 -73
  1306. package/template/.codex/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  1307. package/template/.codex/skills/drawio/references/docs/style-extraction.md +0 -261
  1308. package/template/.codex/skills/drawio/references/docs/style-presets.md +0 -126
  1309. package/template/.codex/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  1310. package/template/.codex/skills/drawio/references/docs/xml-format.md +0 -53
  1311. package/template/.codex/skills/drawio/references/examples/README.md +0 -33
  1312. package/template/.codex/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  1313. package/template/.codex/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  1314. package/template/.codex/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  1315. package/template/.codex/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  1316. package/template/.codex/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  1317. package/template/.codex/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  1318. package/template/.codex/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  1319. package/template/.codex/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  1320. package/template/.codex/skills/drawio/references/examples/e-commerce.yaml +0 -141
  1321. package/template/.codex/skills/drawio/references/examples/importers/README.md +0 -10
  1322. package/template/.codex/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  1323. package/template/.codex/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  1324. package/template/.codex/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  1325. package/template/.codex/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  1326. package/template/.codex/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  1327. package/template/.codex/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  1328. package/template/.codex/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  1329. package/template/.codex/skills/drawio/references/examples/importers/schema.sql +0 -10
  1330. package/template/.codex/skills/drawio/references/examples/importers/terraform.tf +0 -9
  1331. package/template/.codex/skills/drawio/references/examples/login-flow.yaml +0 -65
  1332. package/template/.codex/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  1333. package/template/.codex/skills/drawio/references/examples/microservices.yaml +0 -58
  1334. package/template/.codex/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  1335. package/template/.codex/skills/drawio/references/examples/neural-network.yaml +0 -66
  1336. package/template/.codex/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  1337. package/template/.codex/skills/drawio/references/examples/palettes/README.md +0 -29
  1338. package/template/.codex/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  1339. package/template/.codex/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  1340. package/template/.codex/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  1341. package/template/.codex/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  1342. package/template/.codex/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  1343. package/template/.codex/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  1344. package/template/.codex/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  1345. package/template/.codex/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  1346. package/template/.codex/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  1347. package/template/.codex/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  1348. package/template/.codex/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  1349. package/template/.codex/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  1350. package/template/.codex/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  1351. package/template/.codex/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  1352. package/template/.codex/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  1353. package/template/.codex/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  1354. package/template/.codex/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  1355. package/template/.codex/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  1356. package/template/.codex/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  1357. package/template/.codex/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  1358. package/template/.codex/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  1359. package/template/.codex/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  1360. package/template/.codex/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  1361. package/template/.codex/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  1362. package/template/.codex/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  1363. package/template/.codex/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  1364. package/template/.codex/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  1365. package/template/.codex/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  1366. package/template/.codex/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  1367. package/template/.codex/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  1368. package/template/.codex/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  1369. package/template/.codex/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  1370. package/template/.codex/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  1371. package/template/.codex/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  1372. package/template/.codex/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  1373. package/template/.codex/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  1374. package/template/.codex/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  1375. package/template/.codex/skills/drawio/references/official/style-reference.md +0 -936
  1376. package/template/.codex/skills/drawio/references/official/xml-reference.md +0 -262
  1377. package/template/.codex/skills/drawio/references/palette.schema.json +0 -59
  1378. package/template/.codex/skills/drawio/references/theme.schema.json +0 -249
  1379. package/template/.codex/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  1380. package/template/.codex/skills/drawio/references/workflows/create.md +0 -195
  1381. package/template/.codex/skills/drawio/references/workflows/edit.md +0 -174
  1382. package/template/.codex/skills/drawio/references/workflows/replicate.md +0 -239
  1383. package/template/.codex/skills/drawio/references/workflows/visual-review.md +0 -108
  1384. package/template/.codex/skills/drawio/reports/output_quality_scorecard.md +0 -106
  1385. package/template/.codex/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  1386. package/template/.codex/skills/drawio/scripts/adapters/ci.js +0 -139
  1387. package/template/.codex/skills/drawio/scripts/adapters/ci.test.js +0 -41
  1388. package/template/.codex/skills/drawio/scripts/adapters/code-common.js +0 -171
  1389. package/template/.codex/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  1390. package/template/.codex/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  1391. package/template/.codex/skills/drawio/scripts/adapters/compose.js +0 -134
  1392. package/template/.codex/skills/drawio/scripts/adapters/compose.test.js +0 -54
  1393. package/template/.codex/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  1394. package/template/.codex/skills/drawio/scripts/adapters/config-common.js +0 -131
  1395. package/template/.codex/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  1396. package/template/.codex/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  1397. package/template/.codex/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  1398. package/template/.codex/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  1399. package/template/.codex/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  1400. package/template/.codex/skills/drawio/scripts/adapters/go-code.js +0 -168
  1401. package/template/.codex/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  1402. package/template/.codex/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  1403. package/template/.codex/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  1404. package/template/.codex/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  1405. package/template/.codex/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  1406. package/template/.codex/skills/drawio/scripts/adapters/identity.js +0 -244
  1407. package/template/.codex/skills/drawio/scripts/adapters/identity.test.js +0 -123
  1408. package/template/.codex/skills/drawio/scripts/adapters/index.js +0 -489
  1409. package/template/.codex/skills/drawio/scripts/adapters/index.test.js +0 -152
  1410. package/template/.codex/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  1411. package/template/.codex/skills/drawio/scripts/adapters/js-code.js +0 -141
  1412. package/template/.codex/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  1413. package/template/.codex/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  1414. package/template/.codex/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  1415. package/template/.codex/skills/drawio/scripts/adapters/openapi.js +0 -98
  1416. package/template/.codex/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  1417. package/template/.codex/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  1418. package/template/.codex/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  1419. package/template/.codex/skills/drawio/scripts/adapters/optional-python.js +0 -127
  1420. package/template/.codex/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  1421. package/template/.codex/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  1422. package/template/.codex/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  1423. package/template/.codex/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  1424. package/template/.codex/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  1425. package/template/.codex/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  1426. package/template/.codex/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  1427. package/template/.codex/skills/drawio/scripts/adapters/python-code.js +0 -246
  1428. package/template/.codex/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  1429. package/template/.codex/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  1430. package/template/.codex/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  1431. package/template/.codex/skills/drawio/scripts/adapters/rust-code.js +0 -207
  1432. package/template/.codex/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  1433. package/template/.codex/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  1434. package/template/.codex/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  1435. package/template/.codex/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  1436. package/template/.codex/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  1437. package/template/.codex/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  1438. package/template/.codex/skills/drawio/scripts/cli.js +0 -700
  1439. package/template/.codex/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  1440. package/template/.codex/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  1441. package/template/.codex/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  1442. package/template/.codex/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  1443. package/template/.codex/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  1444. package/template/.codex/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  1445. package/template/.codex/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  1446. package/template/.codex/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  1447. package/template/.codex/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  1448. package/template/.codex/skills/drawio/scripts/dsl/document-spec.js +0 -256
  1449. package/template/.codex/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  1450. package/template/.codex/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  1451. package/template/.codex/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  1452. package/template/.codex/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  1453. package/template/.codex/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  1454. package/template/.codex/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  1455. package/template/.codex/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  1456. package/template/.codex/skills/drawio/scripts/dsl/multi-page.js +0 -224
  1457. package/template/.codex/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  1458. package/template/.codex/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  1459. package/template/.codex/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  1460. package/template/.codex/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  1461. package/template/.codex/skills/drawio/scripts/dsl/palette.js +0 -302
  1462. package/template/.codex/skills/drawio/scripts/dsl/palette.test.js +0 -197
  1463. package/template/.codex/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  1464. package/template/.codex/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  1465. package/template/.codex/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  1466. package/template/.codex/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  1467. package/template/.codex/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  1468. package/template/.codex/skills/drawio/scripts/install.bat +0 -64
  1469. package/template/.codex/skills/drawio/scripts/install.sh +0 -44
  1470. package/template/.codex/skills/drawio/scripts/math/index.js +0 -317
  1471. package/template/.codex/skills/drawio/scripts/math/index.test.js +0 -62
  1472. package/template/.codex/skills/drawio/scripts/package.json +0 -1
  1473. package/template/.codex/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  1474. package/template/.codex/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  1475. package/template/.codex/skills/drawio/scripts/postprocess/cli.js +0 -228
  1476. package/template/.codex/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  1477. package/template/.codex/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  1478. package/template/.codex/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  1479. package/template/.codex/skills/drawio/scripts/postprocess/html.js +0 -197
  1480. package/template/.codex/skills/drawio/scripts/postprocess/html.test.js +0 -50
  1481. package/template/.codex/skills/drawio/scripts/postprocess/index.js +0 -5
  1482. package/template/.codex/skills/drawio/scripts/postprocess/input.js +0 -112
  1483. package/template/.codex/skills/drawio/scripts/postprocess/input.test.js +0 -73
  1484. package/template/.codex/skills/drawio/scripts/postprocess/mutate.js +0 -584
  1485. package/template/.codex/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  1486. package/template/.codex/skills/drawio/scripts/postprocess/projection.js +0 -178
  1487. package/template/.codex/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  1488. package/template/.codex/skills/drawio/scripts/runtime/artifacts.js +0 -283
  1489. package/template/.codex/skills/drawio/scripts/runtime/desktop.js +0 -204
  1490. package/template/.codex/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  1491. package/template/.codex/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  1492. package/template/.codex/skills/drawio/scripts/runtime/export-stability.js +0 -75
  1493. package/template/.codex/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  1494. package/template/.codex/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  1495. package/template/.codex/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  1496. package/template/.codex/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  1497. package/template/.codex/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  1498. package/template/.codex/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  1499. package/template/.codex/skills/drawio/scripts/shared/xml-utils.js +0 -241
  1500. package/template/.codex/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  1501. package/template/.codex/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  1502. package/template/.codex/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  1503. package/template/.codex/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  1504. package/template/.codex/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  1505. package/template/.codex/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  1506. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  1507. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  1508. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  1509. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  1510. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  1511. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  1512. package/template/.codex/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  1513. package/template/.codex/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  1514. package/template/.codex/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  1515. package/template/.codex/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  1516. package/template/.codex/skills/drawio/styles/built-in/corporate.json +0 -49
  1517. package/template/.codex/skills/drawio/styles/built-in/default.json +0 -49
  1518. package/template/.codex/skills/drawio/styles/built-in/handdrawn.json +0 -49
  1519. package/template/.codex/skills/drawio/styles/schema.json +0 -112
  1520. package/template/.codex/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  1521. package/template/.codex/skills/drawio-academic-skills/README.md +0 -103
  1522. package/template/.codex/skills/drawio-academic-skills/README_CN.md +0 -103
  1523. package/template/.codex/skills/drawio-academic-skills/SKILL.md +0 -161
  1524. package/template/.codex/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  1525. package/template/.codex/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  1526. package/template/.codex/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  1527. package/template/.codex/skills/drawio-academic-skills/evals/README.md +0 -13
  1528. package/template/.codex/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  1529. package/template/.codex/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  1530. package/template/.codex/skills/drawio-academic-skills/evals/evals.json +0 -228
  1531. package/template/.codex/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  1532. package/template/.codex/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  1533. package/template/.codex/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  1534. package/template/.codex/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  1535. package/template/.codex/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  1536. package/template/.codex/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  1537. package/template/.codex/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  1538. package/template/.codex/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  1539. package/template/.codex/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  1540. package/template/.codex/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  1541. package/template/.codex/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  1542. package/template/.codex/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  1543. package/template/.codex/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  1544. package/template/.codex/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  1545. package/template/.codex/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  1546. package/template/.codex/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  1547. package/template/.codex/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  1548. package/template/.codex/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  1549. package/template/.codex/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  1550. package/template/.codex/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  1551. package/template/.codex/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  1552. package/template/.codex/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  1553. package/template/.codex/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  1554. package/template/.codex/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  1555. package/template/.codex/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  1556. package/template/.codex/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  1557. package/template/.codex/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  1558. package/template/.codex/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  1559. package/template/.codex/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  1560. package/template/.codex/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  1561. package/template/.codex/skills/kb-retriever/README.md +0 -197
  1562. package/template/.codex/skills/kb-retriever/README.zh-CN.md +0 -197
  1563. package/template/.codex/skills/kb-retriever/SKILL.md +0 -250
  1564. package/template/.codex/skills/kb-retriever/manifest.json +0 -15
  1565. package/template/.codex/skills/kb-retriever/references/excel_analysis.md +0 -129
  1566. package/template/.codex/skills/kb-retriever/references/excel_reading.md +0 -72
  1567. package/template/.codex/skills/kb-retriever/references/pdf_reading.md +0 -362
  1568. package/template/.codex/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  1569. package/template/.codex/skills/yss-db2mybatis/requirements.txt +0 -4
  1570. package/template/.codex/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  1571. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  1572. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  1573. package/template/.codex/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  1574. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  1575. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  1576. package/template/.codex/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  1577. package/template/.hermes/skills/beautiful-article/README.md +0 -450
  1578. package/template/.hermes/skills/beautiful-article/README.zh-CN.md +0 -450
  1579. package/template/.hermes/skills/beautiful-article/SKILL.md +0 -466
  1580. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  1581. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  1582. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  1583. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  1584. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  1585. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  1586. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  1587. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  1588. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  1589. package/template/.hermes/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  1590. package/template/.hermes/skills/beautiful-article/manifest.json +0 -15
  1591. package/template/.hermes/skills/beautiful-article/references/article-types/briefing.md +0 -32
  1592. package/template/.hermes/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  1593. package/template/.hermes/skills/beautiful-article/references/article-types/essay.md +0 -31
  1594. package/template/.hermes/skills/beautiful-article/references/article-types/explainer.md +0 -32
  1595. package/template/.hermes/skills/beautiful-article/references/article-types/full-report.md +0 -32
  1596. package/template/.hermes/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  1597. package/template/.hermes/skills/beautiful-article/references/article-types/longform.md +0 -32
  1598. package/template/.hermes/skills/beautiful-article/references/article-types/review.md +0 -32
  1599. package/template/.hermes/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  1600. package/template/.hermes/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  1601. package/template/.hermes/skills/beautiful-article/references/article-types.md +0 -42
  1602. package/template/.hermes/skills/beautiful-article/references/asset-policy.md +0 -71
  1603. package/template/.hermes/skills/beautiful-article/references/component-policy.md +0 -103
  1604. package/template/.hermes/skills/beautiful-article/references/cover.md +0 -208
  1605. package/template/.hermes/skills/beautiful-article/references/harness.md +0 -35
  1606. package/template/.hermes/skills/beautiful-article/references/html-output.md +0 -42
  1607. package/template/.hermes/skills/beautiful-article/references/information-density.md +0 -50
  1608. package/template/.hermes/skills/beautiful-article/references/layout.md +0 -46
  1609. package/template/.hermes/skills/beautiful-article/references/pdf-output.md +0 -208
  1610. package/template/.hermes/skills/beautiful-article/references/plan-template.md +0 -109
  1611. package/template/.hermes/skills/beautiful-article/references/raw-policy.md +0 -86
  1612. package/template/.hermes/skills/beautiful-article/references/repair-policy.md +0 -35
  1613. package/template/.hermes/skills/beautiful-article/references/review-checklist.md +0 -133
  1614. package/template/.hermes/skills/beautiful-article/references/scaffold.md +0 -77
  1615. package/template/.hermes/skills/beautiful-article/references/section-build.md +0 -100
  1616. package/template/.hermes/skills/beautiful-article/references/source-to-markdown.md +0 -118
  1617. package/template/.hermes/skills/beautiful-article/references/theme-selection.md +0 -48
  1618. package/template/.hermes/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  1619. package/template/.hermes/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  1620. package/template/.hermes/skills/beautiful-article/scripts/scaffold.sh +0 -172
  1621. package/template/.hermes/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  1622. package/template/.hermes/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  1623. package/template/.hermes/skills/beautiful-article/theme-profiles/andy.md +0 -57
  1624. package/template/.hermes/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  1625. package/template/.hermes/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  1626. package/template/.hermes/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  1627. package/template/.hermes/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  1628. package/template/.hermes/skills/beautiful-article/theme-profiles/index.json +0 -112
  1629. package/template/.hermes/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  1630. package/template/.hermes/skills/beautiful-article/theme-profiles/press.md +0 -61
  1631. package/template/.hermes/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  1632. package/template/.hermes/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  1633. package/template/.hermes/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  1634. package/template/.hermes/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  1635. package/template/.hermes/skills/drawio/.mcp.json +0 -8
  1636. package/template/.hermes/skills/drawio/CHANGELOG.md +0 -216
  1637. package/template/.hermes/skills/drawio/SKILL.md +0 -157
  1638. package/template/.hermes/skills/drawio/agents/interface.yaml +0 -26
  1639. package/template/.hermes/skills/drawio/agents/openai.yaml +0 -26
  1640. package/template/.hermes/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  1641. package/template/.hermes/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  1642. package/template/.hermes/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  1643. package/template/.hermes/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  1644. package/template/.hermes/skills/drawio/assets/examples/login-flow.drawio +0 -6
  1645. package/template/.hermes/skills/drawio/assets/examples/microservices.drawio +0 -6
  1646. package/template/.hermes/skills/drawio/assets/examples/neural-network.drawio +0 -6
  1647. package/template/.hermes/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  1648. package/template/.hermes/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  1649. package/template/.hermes/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  1650. package/template/.hermes/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  1651. package/template/.hermes/skills/drawio/assets/palettes/c4-blue.json +0 -29
  1652. package/template/.hermes/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  1653. package/template/.hermes/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  1654. package/template/.hermes/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  1655. package/template/.hermes/skills/drawio/assets/palettes/ieee-color.json +0 -17
  1656. package/template/.hermes/skills/drawio/assets/palettes/journal-jama.json +0 -20
  1657. package/template/.hermes/skills/drawio/assets/palettes/journal-npg.json +0 -23
  1658. package/template/.hermes/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  1659. package/template/.hermes/skills/drawio/assets/palettes/morandi.json +0 -21
  1660. package/template/.hermes/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  1661. package/template/.hermes/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  1662. package/template/.hermes/skills/drawio/assets/palettes/tol-bright.json +0 -20
  1663. package/template/.hermes/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  1664. package/template/.hermes/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  1665. package/template/.hermes/skills/drawio/assets/palettes/tol-muted.json +0 -22
  1666. package/template/.hermes/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  1667. package/template/.hermes/skills/drawio/assets/schemas/spec.schema.json +0 -620
  1668. package/template/.hermes/skills/drawio/assets/themes/academic-color.json +0 -299
  1669. package/template/.hermes/skills/drawio/assets/themes/academic.json +0 -245
  1670. package/template/.hermes/skills/drawio/assets/themes/arch-dark.json +0 -253
  1671. package/template/.hermes/skills/drawio/assets/themes/blueprint.json +0 -246
  1672. package/template/.hermes/skills/drawio/assets/themes/dark-luxury.json +0 -246
  1673. package/template/.hermes/skills/drawio/assets/themes/dark-terminal.json +0 -244
  1674. package/template/.hermes/skills/drawio/assets/themes/dark.json +0 -220
  1675. package/template/.hermes/skills/drawio/assets/themes/high-contrast.json +0 -220
  1676. package/template/.hermes/skills/drawio/assets/themes/nature.json +0 -220
  1677. package/template/.hermes/skills/drawio/assets/themes/notion-clean.json +0 -246
  1678. package/template/.hermes/skills/drawio/assets/themes/tech-blue.json +0 -220
  1679. package/template/.hermes/skills/drawio/evals/README.md +0 -17
  1680. package/template/.hermes/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  1681. package/template/.hermes/skills/drawio/evals/baseline-prompts.json +0 -122
  1682. package/template/.hermes/skills/drawio/evals/darwin-results.tsv +0 -4
  1683. package/template/.hermes/skills/drawio/evals/evals.json +0 -223
  1684. package/template/.hermes/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  1685. package/template/.hermes/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  1686. package/template/.hermes/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  1687. package/template/.hermes/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  1688. package/template/.hermes/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  1689. package/template/.hermes/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  1690. package/template/.hermes/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  1691. package/template/.hermes/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  1692. package/template/.hermes/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  1693. package/template/.hermes/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  1694. package/template/.hermes/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  1695. package/template/.hermes/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  1696. package/template/.hermes/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  1697. package/template/.hermes/skills/drawio/evals/upstream-integration-cases.json +0 -78
  1698. package/template/.hermes/skills/drawio/evals/vision-preview-cases.json +0 -147
  1699. package/template/.hermes/skills/drawio/references/docs/agent-diagrams.md +0 -164
  1700. package/template/.hermes/skills/drawio/references/docs/ah-format.md +0 -322
  1701. package/template/.hermes/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  1702. package/template/.hermes/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  1703. package/template/.hermes/skills/drawio/references/docs/code-importers.md +0 -53
  1704. package/template/.hermes/skills/drawio/references/docs/config-importers.md +0 -68
  1705. package/template/.hermes/skills/drawio/references/docs/design-system/README.md +0 -204
  1706. package/template/.hermes/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  1707. package/template/.hermes/skills/drawio/references/docs/design-system/connectors.md +0 -388
  1708. package/template/.hermes/skills/drawio/references/docs/design-system/formulas.md +0 -196
  1709. package/template/.hermes/skills/drawio/references/docs/design-system/icons.md +0 -332
  1710. package/template/.hermes/skills/drawio/references/docs/design-system/shapes.md +0 -269
  1711. package/template/.hermes/skills/drawio/references/docs/design-system/specification.md +0 -754
  1712. package/template/.hermes/skills/drawio/references/docs/design-system/themes.md +0 -441
  1713. package/template/.hermes/skills/drawio/references/docs/design-system/tokens.md +0 -232
  1714. package/template/.hermes/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  1715. package/template/.hermes/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  1716. package/template/.hermes/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  1717. package/template/.hermes/skills/drawio/references/docs/math-typesetting.md +0 -258
  1718. package/template/.hermes/skills/drawio/references/docs/mcp-tools.md +0 -85
  1719. package/template/.hermes/skills/drawio/references/docs/migration-readiness.md +0 -73
  1720. package/template/.hermes/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  1721. package/template/.hermes/skills/drawio/references/docs/style-extraction.md +0 -261
  1722. package/template/.hermes/skills/drawio/references/docs/style-presets.md +0 -126
  1723. package/template/.hermes/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  1724. package/template/.hermes/skills/drawio/references/docs/xml-format.md +0 -53
  1725. package/template/.hermes/skills/drawio/references/examples/README.md +0 -33
  1726. package/template/.hermes/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  1727. package/template/.hermes/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  1728. package/template/.hermes/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  1729. package/template/.hermes/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  1730. package/template/.hermes/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  1731. package/template/.hermes/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  1732. package/template/.hermes/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  1733. package/template/.hermes/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  1734. package/template/.hermes/skills/drawio/references/examples/e-commerce.yaml +0 -141
  1735. package/template/.hermes/skills/drawio/references/examples/importers/README.md +0 -10
  1736. package/template/.hermes/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  1737. package/template/.hermes/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  1738. package/template/.hermes/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  1739. package/template/.hermes/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  1740. package/template/.hermes/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  1741. package/template/.hermes/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  1742. package/template/.hermes/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  1743. package/template/.hermes/skills/drawio/references/examples/importers/schema.sql +0 -10
  1744. package/template/.hermes/skills/drawio/references/examples/importers/terraform.tf +0 -9
  1745. package/template/.hermes/skills/drawio/references/examples/login-flow.yaml +0 -65
  1746. package/template/.hermes/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  1747. package/template/.hermes/skills/drawio/references/examples/microservices.yaml +0 -58
  1748. package/template/.hermes/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  1749. package/template/.hermes/skills/drawio/references/examples/neural-network.yaml +0 -66
  1750. package/template/.hermes/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  1751. package/template/.hermes/skills/drawio/references/examples/palettes/README.md +0 -29
  1752. package/template/.hermes/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  1753. package/template/.hermes/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  1754. package/template/.hermes/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  1755. package/template/.hermes/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  1756. package/template/.hermes/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  1757. package/template/.hermes/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  1758. package/template/.hermes/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  1759. package/template/.hermes/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  1760. package/template/.hermes/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  1761. package/template/.hermes/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  1762. package/template/.hermes/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  1763. package/template/.hermes/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  1764. package/template/.hermes/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  1765. package/template/.hermes/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  1766. package/template/.hermes/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  1767. package/template/.hermes/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  1768. package/template/.hermes/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  1769. package/template/.hermes/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  1770. package/template/.hermes/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  1771. package/template/.hermes/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  1772. package/template/.hermes/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  1773. package/template/.hermes/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  1774. package/template/.hermes/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  1775. package/template/.hermes/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  1776. package/template/.hermes/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  1777. package/template/.hermes/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  1778. package/template/.hermes/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  1779. package/template/.hermes/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  1780. package/template/.hermes/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  1781. package/template/.hermes/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  1782. package/template/.hermes/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  1783. package/template/.hermes/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  1784. package/template/.hermes/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  1785. package/template/.hermes/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  1786. package/template/.hermes/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  1787. package/template/.hermes/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  1788. package/template/.hermes/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  1789. package/template/.hermes/skills/drawio/references/official/style-reference.md +0 -936
  1790. package/template/.hermes/skills/drawio/references/official/xml-reference.md +0 -262
  1791. package/template/.hermes/skills/drawio/references/palette.schema.json +0 -59
  1792. package/template/.hermes/skills/drawio/references/theme.schema.json +0 -249
  1793. package/template/.hermes/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  1794. package/template/.hermes/skills/drawio/references/workflows/create.md +0 -195
  1795. package/template/.hermes/skills/drawio/references/workflows/edit.md +0 -174
  1796. package/template/.hermes/skills/drawio/references/workflows/replicate.md +0 -239
  1797. package/template/.hermes/skills/drawio/references/workflows/visual-review.md +0 -108
  1798. package/template/.hermes/skills/drawio/reports/output_quality_scorecard.md +0 -106
  1799. package/template/.hermes/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  1800. package/template/.hermes/skills/drawio/scripts/adapters/ci.js +0 -139
  1801. package/template/.hermes/skills/drawio/scripts/adapters/ci.test.js +0 -41
  1802. package/template/.hermes/skills/drawio/scripts/adapters/code-common.js +0 -171
  1803. package/template/.hermes/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  1804. package/template/.hermes/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  1805. package/template/.hermes/skills/drawio/scripts/adapters/compose.js +0 -134
  1806. package/template/.hermes/skills/drawio/scripts/adapters/compose.test.js +0 -54
  1807. package/template/.hermes/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  1808. package/template/.hermes/skills/drawio/scripts/adapters/config-common.js +0 -131
  1809. package/template/.hermes/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  1810. package/template/.hermes/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  1811. package/template/.hermes/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  1812. package/template/.hermes/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  1813. package/template/.hermes/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  1814. package/template/.hermes/skills/drawio/scripts/adapters/go-code.js +0 -168
  1815. package/template/.hermes/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  1816. package/template/.hermes/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  1817. package/template/.hermes/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  1818. package/template/.hermes/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  1819. package/template/.hermes/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  1820. package/template/.hermes/skills/drawio/scripts/adapters/identity.js +0 -244
  1821. package/template/.hermes/skills/drawio/scripts/adapters/identity.test.js +0 -123
  1822. package/template/.hermes/skills/drawio/scripts/adapters/index.js +0 -489
  1823. package/template/.hermes/skills/drawio/scripts/adapters/index.test.js +0 -152
  1824. package/template/.hermes/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  1825. package/template/.hermes/skills/drawio/scripts/adapters/js-code.js +0 -141
  1826. package/template/.hermes/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  1827. package/template/.hermes/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  1828. package/template/.hermes/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  1829. package/template/.hermes/skills/drawio/scripts/adapters/openapi.js +0 -98
  1830. package/template/.hermes/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  1831. package/template/.hermes/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  1832. package/template/.hermes/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  1833. package/template/.hermes/skills/drawio/scripts/adapters/optional-python.js +0 -127
  1834. package/template/.hermes/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  1835. package/template/.hermes/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  1836. package/template/.hermes/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  1837. package/template/.hermes/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  1838. package/template/.hermes/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  1839. package/template/.hermes/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  1840. package/template/.hermes/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  1841. package/template/.hermes/skills/drawio/scripts/adapters/python-code.js +0 -246
  1842. package/template/.hermes/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  1843. package/template/.hermes/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  1844. package/template/.hermes/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  1845. package/template/.hermes/skills/drawio/scripts/adapters/rust-code.js +0 -207
  1846. package/template/.hermes/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  1847. package/template/.hermes/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  1848. package/template/.hermes/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  1849. package/template/.hermes/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  1850. package/template/.hermes/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  1851. package/template/.hermes/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  1852. package/template/.hermes/skills/drawio/scripts/cli.js +0 -700
  1853. package/template/.hermes/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  1854. package/template/.hermes/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  1855. package/template/.hermes/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  1856. package/template/.hermes/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  1857. package/template/.hermes/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  1858. package/template/.hermes/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  1859. package/template/.hermes/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  1860. package/template/.hermes/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  1861. package/template/.hermes/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  1862. package/template/.hermes/skills/drawio/scripts/dsl/document-spec.js +0 -256
  1863. package/template/.hermes/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  1864. package/template/.hermes/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  1865. package/template/.hermes/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  1866. package/template/.hermes/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  1867. package/template/.hermes/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  1868. package/template/.hermes/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  1869. package/template/.hermes/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  1870. package/template/.hermes/skills/drawio/scripts/dsl/multi-page.js +0 -224
  1871. package/template/.hermes/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  1872. package/template/.hermes/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  1873. package/template/.hermes/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  1874. package/template/.hermes/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  1875. package/template/.hermes/skills/drawio/scripts/dsl/palette.js +0 -302
  1876. package/template/.hermes/skills/drawio/scripts/dsl/palette.test.js +0 -197
  1877. package/template/.hermes/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  1878. package/template/.hermes/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  1879. package/template/.hermes/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  1880. package/template/.hermes/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  1881. package/template/.hermes/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  1882. package/template/.hermes/skills/drawio/scripts/install.bat +0 -64
  1883. package/template/.hermes/skills/drawio/scripts/install.sh +0 -44
  1884. package/template/.hermes/skills/drawio/scripts/math/index.js +0 -317
  1885. package/template/.hermes/skills/drawio/scripts/math/index.test.js +0 -62
  1886. package/template/.hermes/skills/drawio/scripts/package.json +0 -1
  1887. package/template/.hermes/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  1888. package/template/.hermes/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  1889. package/template/.hermes/skills/drawio/scripts/postprocess/cli.js +0 -228
  1890. package/template/.hermes/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  1891. package/template/.hermes/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  1892. package/template/.hermes/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  1893. package/template/.hermes/skills/drawio/scripts/postprocess/html.js +0 -197
  1894. package/template/.hermes/skills/drawio/scripts/postprocess/html.test.js +0 -50
  1895. package/template/.hermes/skills/drawio/scripts/postprocess/index.js +0 -5
  1896. package/template/.hermes/skills/drawio/scripts/postprocess/input.js +0 -112
  1897. package/template/.hermes/skills/drawio/scripts/postprocess/input.test.js +0 -73
  1898. package/template/.hermes/skills/drawio/scripts/postprocess/mutate.js +0 -584
  1899. package/template/.hermes/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  1900. package/template/.hermes/skills/drawio/scripts/postprocess/projection.js +0 -178
  1901. package/template/.hermes/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  1902. package/template/.hermes/skills/drawio/scripts/runtime/artifacts.js +0 -283
  1903. package/template/.hermes/skills/drawio/scripts/runtime/desktop.js +0 -204
  1904. package/template/.hermes/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  1905. package/template/.hermes/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  1906. package/template/.hermes/skills/drawio/scripts/runtime/export-stability.js +0 -75
  1907. package/template/.hermes/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  1908. package/template/.hermes/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  1909. package/template/.hermes/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  1910. package/template/.hermes/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  1911. package/template/.hermes/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  1912. package/template/.hermes/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  1913. package/template/.hermes/skills/drawio/scripts/shared/xml-utils.js +0 -241
  1914. package/template/.hermes/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  1915. package/template/.hermes/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  1916. package/template/.hermes/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  1917. package/template/.hermes/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  1918. package/template/.hermes/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  1919. package/template/.hermes/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  1920. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  1921. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  1922. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  1923. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  1924. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  1925. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  1926. package/template/.hermes/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  1927. package/template/.hermes/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  1928. package/template/.hermes/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  1929. package/template/.hermes/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  1930. package/template/.hermes/skills/drawio/styles/built-in/corporate.json +0 -49
  1931. package/template/.hermes/skills/drawio/styles/built-in/default.json +0 -49
  1932. package/template/.hermes/skills/drawio/styles/built-in/handdrawn.json +0 -49
  1933. package/template/.hermes/skills/drawio/styles/schema.json +0 -112
  1934. package/template/.hermes/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  1935. package/template/.hermes/skills/drawio-academic-skills/README.md +0 -103
  1936. package/template/.hermes/skills/drawio-academic-skills/README_CN.md +0 -103
  1937. package/template/.hermes/skills/drawio-academic-skills/SKILL.md +0 -161
  1938. package/template/.hermes/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  1939. package/template/.hermes/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  1940. package/template/.hermes/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  1941. package/template/.hermes/skills/drawio-academic-skills/evals/README.md +0 -13
  1942. package/template/.hermes/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  1943. package/template/.hermes/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  1944. package/template/.hermes/skills/drawio-academic-skills/evals/evals.json +0 -228
  1945. package/template/.hermes/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  1946. package/template/.hermes/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  1947. package/template/.hermes/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  1948. package/template/.hermes/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  1949. package/template/.hermes/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  1950. package/template/.hermes/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  1951. package/template/.hermes/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  1952. package/template/.hermes/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  1953. package/template/.hermes/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  1954. package/template/.hermes/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  1955. package/template/.hermes/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  1956. package/template/.hermes/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  1957. package/template/.hermes/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  1958. package/template/.hermes/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  1959. package/template/.hermes/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  1960. package/template/.hermes/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  1961. package/template/.hermes/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  1962. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  1963. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  1964. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  1965. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  1966. package/template/.hermes/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  1967. package/template/.hermes/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  1968. package/template/.hermes/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  1969. package/template/.hermes/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  1970. package/template/.hermes/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  1971. package/template/.hermes/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  1972. package/template/.hermes/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  1973. package/template/.hermes/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  1974. package/template/.hermes/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  1975. package/template/.hermes/skills/kb-retriever/README.md +0 -197
  1976. package/template/.hermes/skills/kb-retriever/README.zh-CN.md +0 -197
  1977. package/template/.hermes/skills/kb-retriever/SKILL.md +0 -250
  1978. package/template/.hermes/skills/kb-retriever/manifest.json +0 -15
  1979. package/template/.hermes/skills/kb-retriever/references/excel_analysis.md +0 -129
  1980. package/template/.hermes/skills/kb-retriever/references/excel_reading.md +0 -72
  1981. package/template/.hermes/skills/kb-retriever/references/pdf_reading.md +0 -362
  1982. package/template/.hermes/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  1983. package/template/.hermes/skills/yss-db2mybatis/requirements.txt +0 -4
  1984. package/template/.hermes/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  1985. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  1986. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  1987. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  1988. package/template/.hermes/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  1989. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  1990. package/template/.hermes/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  1991. package/template/.pi/skills/beautiful-article/README.md +0 -450
  1992. package/template/.pi/skills/beautiful-article/README.zh-CN.md +0 -450
  1993. package/template/.pi/skills/beautiful-article/SKILL.md +0 -466
  1994. package/template/.pi/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  1995. package/template/.pi/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  1996. package/template/.pi/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  1997. package/template/.pi/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  1998. package/template/.pi/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  1999. package/template/.pi/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  2000. package/template/.pi/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  2001. package/template/.pi/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  2002. package/template/.pi/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  2003. package/template/.pi/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  2004. package/template/.pi/skills/beautiful-article/manifest.json +0 -15
  2005. package/template/.pi/skills/beautiful-article/references/article-types/briefing.md +0 -32
  2006. package/template/.pi/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  2007. package/template/.pi/skills/beautiful-article/references/article-types/essay.md +0 -31
  2008. package/template/.pi/skills/beautiful-article/references/article-types/explainer.md +0 -32
  2009. package/template/.pi/skills/beautiful-article/references/article-types/full-report.md +0 -32
  2010. package/template/.pi/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  2011. package/template/.pi/skills/beautiful-article/references/article-types/longform.md +0 -32
  2012. package/template/.pi/skills/beautiful-article/references/article-types/review.md +0 -32
  2013. package/template/.pi/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  2014. package/template/.pi/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  2015. package/template/.pi/skills/beautiful-article/references/article-types.md +0 -42
  2016. package/template/.pi/skills/beautiful-article/references/asset-policy.md +0 -71
  2017. package/template/.pi/skills/beautiful-article/references/component-policy.md +0 -103
  2018. package/template/.pi/skills/beautiful-article/references/cover.md +0 -208
  2019. package/template/.pi/skills/beautiful-article/references/harness.md +0 -35
  2020. package/template/.pi/skills/beautiful-article/references/html-output.md +0 -42
  2021. package/template/.pi/skills/beautiful-article/references/information-density.md +0 -50
  2022. package/template/.pi/skills/beautiful-article/references/layout.md +0 -46
  2023. package/template/.pi/skills/beautiful-article/references/pdf-output.md +0 -208
  2024. package/template/.pi/skills/beautiful-article/references/plan-template.md +0 -109
  2025. package/template/.pi/skills/beautiful-article/references/raw-policy.md +0 -86
  2026. package/template/.pi/skills/beautiful-article/references/repair-policy.md +0 -35
  2027. package/template/.pi/skills/beautiful-article/references/review-checklist.md +0 -133
  2028. package/template/.pi/skills/beautiful-article/references/scaffold.md +0 -77
  2029. package/template/.pi/skills/beautiful-article/references/section-build.md +0 -100
  2030. package/template/.pi/skills/beautiful-article/references/source-to-markdown.md +0 -118
  2031. package/template/.pi/skills/beautiful-article/references/theme-selection.md +0 -48
  2032. package/template/.pi/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  2033. package/template/.pi/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  2034. package/template/.pi/skills/beautiful-article/scripts/scaffold.sh +0 -172
  2035. package/template/.pi/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  2036. package/template/.pi/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  2037. package/template/.pi/skills/beautiful-article/theme-profiles/andy.md +0 -57
  2038. package/template/.pi/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  2039. package/template/.pi/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  2040. package/template/.pi/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  2041. package/template/.pi/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  2042. package/template/.pi/skills/beautiful-article/theme-profiles/index.json +0 -112
  2043. package/template/.pi/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  2044. package/template/.pi/skills/beautiful-article/theme-profiles/press.md +0 -61
  2045. package/template/.pi/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  2046. package/template/.pi/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  2047. package/template/.pi/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  2048. package/template/.pi/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  2049. package/template/.pi/skills/drawio/.mcp.json +0 -8
  2050. package/template/.pi/skills/drawio/CHANGELOG.md +0 -216
  2051. package/template/.pi/skills/drawio/SKILL.md +0 -157
  2052. package/template/.pi/skills/drawio/agents/interface.yaml +0 -26
  2053. package/template/.pi/skills/drawio/agents/openai.yaml +0 -26
  2054. package/template/.pi/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  2055. package/template/.pi/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  2056. package/template/.pi/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  2057. package/template/.pi/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  2058. package/template/.pi/skills/drawio/assets/examples/login-flow.drawio +0 -6
  2059. package/template/.pi/skills/drawio/assets/examples/microservices.drawio +0 -6
  2060. package/template/.pi/skills/drawio/assets/examples/neural-network.drawio +0 -6
  2061. package/template/.pi/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  2062. package/template/.pi/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  2063. package/template/.pi/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  2064. package/template/.pi/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  2065. package/template/.pi/skills/drawio/assets/palettes/c4-blue.json +0 -29
  2066. package/template/.pi/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  2067. package/template/.pi/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  2068. package/template/.pi/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  2069. package/template/.pi/skills/drawio/assets/palettes/ieee-color.json +0 -17
  2070. package/template/.pi/skills/drawio/assets/palettes/journal-jama.json +0 -20
  2071. package/template/.pi/skills/drawio/assets/palettes/journal-npg.json +0 -23
  2072. package/template/.pi/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  2073. package/template/.pi/skills/drawio/assets/palettes/morandi.json +0 -21
  2074. package/template/.pi/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  2075. package/template/.pi/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  2076. package/template/.pi/skills/drawio/assets/palettes/tol-bright.json +0 -20
  2077. package/template/.pi/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  2078. package/template/.pi/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  2079. package/template/.pi/skills/drawio/assets/palettes/tol-muted.json +0 -22
  2080. package/template/.pi/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  2081. package/template/.pi/skills/drawio/assets/schemas/spec.schema.json +0 -620
  2082. package/template/.pi/skills/drawio/assets/themes/academic-color.json +0 -299
  2083. package/template/.pi/skills/drawio/assets/themes/academic.json +0 -245
  2084. package/template/.pi/skills/drawio/assets/themes/arch-dark.json +0 -253
  2085. package/template/.pi/skills/drawio/assets/themes/blueprint.json +0 -246
  2086. package/template/.pi/skills/drawio/assets/themes/dark-luxury.json +0 -246
  2087. package/template/.pi/skills/drawio/assets/themes/dark-terminal.json +0 -244
  2088. package/template/.pi/skills/drawio/assets/themes/dark.json +0 -220
  2089. package/template/.pi/skills/drawio/assets/themes/high-contrast.json +0 -220
  2090. package/template/.pi/skills/drawio/assets/themes/nature.json +0 -220
  2091. package/template/.pi/skills/drawio/assets/themes/notion-clean.json +0 -246
  2092. package/template/.pi/skills/drawio/assets/themes/tech-blue.json +0 -220
  2093. package/template/.pi/skills/drawio/evals/README.md +0 -17
  2094. package/template/.pi/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  2095. package/template/.pi/skills/drawio/evals/baseline-prompts.json +0 -122
  2096. package/template/.pi/skills/drawio/evals/darwin-results.tsv +0 -4
  2097. package/template/.pi/skills/drawio/evals/evals.json +0 -223
  2098. package/template/.pi/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  2099. package/template/.pi/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  2100. package/template/.pi/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  2101. package/template/.pi/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  2102. package/template/.pi/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  2103. package/template/.pi/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  2104. package/template/.pi/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  2105. package/template/.pi/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  2106. package/template/.pi/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  2107. package/template/.pi/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  2108. package/template/.pi/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  2109. package/template/.pi/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  2110. package/template/.pi/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  2111. package/template/.pi/skills/drawio/evals/upstream-integration-cases.json +0 -78
  2112. package/template/.pi/skills/drawio/evals/vision-preview-cases.json +0 -147
  2113. package/template/.pi/skills/drawio/references/docs/agent-diagrams.md +0 -164
  2114. package/template/.pi/skills/drawio/references/docs/ah-format.md +0 -322
  2115. package/template/.pi/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  2116. package/template/.pi/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  2117. package/template/.pi/skills/drawio/references/docs/code-importers.md +0 -53
  2118. package/template/.pi/skills/drawio/references/docs/config-importers.md +0 -68
  2119. package/template/.pi/skills/drawio/references/docs/design-system/README.md +0 -204
  2120. package/template/.pi/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  2121. package/template/.pi/skills/drawio/references/docs/design-system/connectors.md +0 -388
  2122. package/template/.pi/skills/drawio/references/docs/design-system/formulas.md +0 -196
  2123. package/template/.pi/skills/drawio/references/docs/design-system/icons.md +0 -332
  2124. package/template/.pi/skills/drawio/references/docs/design-system/shapes.md +0 -269
  2125. package/template/.pi/skills/drawio/references/docs/design-system/specification.md +0 -754
  2126. package/template/.pi/skills/drawio/references/docs/design-system/themes.md +0 -441
  2127. package/template/.pi/skills/drawio/references/docs/design-system/tokens.md +0 -232
  2128. package/template/.pi/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  2129. package/template/.pi/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  2130. package/template/.pi/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  2131. package/template/.pi/skills/drawio/references/docs/math-typesetting.md +0 -258
  2132. package/template/.pi/skills/drawio/references/docs/mcp-tools.md +0 -85
  2133. package/template/.pi/skills/drawio/references/docs/migration-readiness.md +0 -73
  2134. package/template/.pi/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  2135. package/template/.pi/skills/drawio/references/docs/style-extraction.md +0 -261
  2136. package/template/.pi/skills/drawio/references/docs/style-presets.md +0 -126
  2137. package/template/.pi/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  2138. package/template/.pi/skills/drawio/references/docs/xml-format.md +0 -53
  2139. package/template/.pi/skills/drawio/references/examples/README.md +0 -33
  2140. package/template/.pi/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  2141. package/template/.pi/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  2142. package/template/.pi/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  2143. package/template/.pi/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  2144. package/template/.pi/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  2145. package/template/.pi/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  2146. package/template/.pi/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  2147. package/template/.pi/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  2148. package/template/.pi/skills/drawio/references/examples/e-commerce.yaml +0 -141
  2149. package/template/.pi/skills/drawio/references/examples/importers/README.md +0 -10
  2150. package/template/.pi/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  2151. package/template/.pi/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  2152. package/template/.pi/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  2153. package/template/.pi/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  2154. package/template/.pi/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  2155. package/template/.pi/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  2156. package/template/.pi/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  2157. package/template/.pi/skills/drawio/references/examples/importers/schema.sql +0 -10
  2158. package/template/.pi/skills/drawio/references/examples/importers/terraform.tf +0 -9
  2159. package/template/.pi/skills/drawio/references/examples/login-flow.yaml +0 -65
  2160. package/template/.pi/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  2161. package/template/.pi/skills/drawio/references/examples/microservices.yaml +0 -58
  2162. package/template/.pi/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  2163. package/template/.pi/skills/drawio/references/examples/neural-network.yaml +0 -66
  2164. package/template/.pi/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  2165. package/template/.pi/skills/drawio/references/examples/palettes/README.md +0 -29
  2166. package/template/.pi/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  2167. package/template/.pi/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  2168. package/template/.pi/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  2169. package/template/.pi/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  2170. package/template/.pi/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  2171. package/template/.pi/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  2172. package/template/.pi/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  2173. package/template/.pi/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  2174. package/template/.pi/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  2175. package/template/.pi/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  2176. package/template/.pi/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  2177. package/template/.pi/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  2178. package/template/.pi/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  2179. package/template/.pi/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  2180. package/template/.pi/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  2181. package/template/.pi/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  2182. package/template/.pi/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  2183. package/template/.pi/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  2184. package/template/.pi/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  2185. package/template/.pi/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  2186. package/template/.pi/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  2187. package/template/.pi/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  2188. package/template/.pi/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  2189. package/template/.pi/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  2190. package/template/.pi/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  2191. package/template/.pi/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  2192. package/template/.pi/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  2193. package/template/.pi/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  2194. package/template/.pi/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  2195. package/template/.pi/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  2196. package/template/.pi/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  2197. package/template/.pi/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  2198. package/template/.pi/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  2199. package/template/.pi/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  2200. package/template/.pi/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  2201. package/template/.pi/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  2202. package/template/.pi/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  2203. package/template/.pi/skills/drawio/references/official/style-reference.md +0 -936
  2204. package/template/.pi/skills/drawio/references/official/xml-reference.md +0 -262
  2205. package/template/.pi/skills/drawio/references/palette.schema.json +0 -59
  2206. package/template/.pi/skills/drawio/references/theme.schema.json +0 -249
  2207. package/template/.pi/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  2208. package/template/.pi/skills/drawio/references/workflows/create.md +0 -195
  2209. package/template/.pi/skills/drawio/references/workflows/edit.md +0 -174
  2210. package/template/.pi/skills/drawio/references/workflows/replicate.md +0 -239
  2211. package/template/.pi/skills/drawio/references/workflows/visual-review.md +0 -108
  2212. package/template/.pi/skills/drawio/reports/output_quality_scorecard.md +0 -106
  2213. package/template/.pi/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  2214. package/template/.pi/skills/drawio/scripts/adapters/ci.js +0 -139
  2215. package/template/.pi/skills/drawio/scripts/adapters/ci.test.js +0 -41
  2216. package/template/.pi/skills/drawio/scripts/adapters/code-common.js +0 -171
  2217. package/template/.pi/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  2218. package/template/.pi/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  2219. package/template/.pi/skills/drawio/scripts/adapters/compose.js +0 -134
  2220. package/template/.pi/skills/drawio/scripts/adapters/compose.test.js +0 -54
  2221. package/template/.pi/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  2222. package/template/.pi/skills/drawio/scripts/adapters/config-common.js +0 -131
  2223. package/template/.pi/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  2224. package/template/.pi/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  2225. package/template/.pi/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  2226. package/template/.pi/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  2227. package/template/.pi/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  2228. package/template/.pi/skills/drawio/scripts/adapters/go-code.js +0 -168
  2229. package/template/.pi/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  2230. package/template/.pi/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  2231. package/template/.pi/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  2232. package/template/.pi/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  2233. package/template/.pi/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  2234. package/template/.pi/skills/drawio/scripts/adapters/identity.js +0 -244
  2235. package/template/.pi/skills/drawio/scripts/adapters/identity.test.js +0 -123
  2236. package/template/.pi/skills/drawio/scripts/adapters/index.js +0 -489
  2237. package/template/.pi/skills/drawio/scripts/adapters/index.test.js +0 -152
  2238. package/template/.pi/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  2239. package/template/.pi/skills/drawio/scripts/adapters/js-code.js +0 -141
  2240. package/template/.pi/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  2241. package/template/.pi/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  2242. package/template/.pi/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  2243. package/template/.pi/skills/drawio/scripts/adapters/openapi.js +0 -98
  2244. package/template/.pi/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  2245. package/template/.pi/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  2246. package/template/.pi/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  2247. package/template/.pi/skills/drawio/scripts/adapters/optional-python.js +0 -127
  2248. package/template/.pi/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  2249. package/template/.pi/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  2250. package/template/.pi/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  2251. package/template/.pi/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  2252. package/template/.pi/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  2253. package/template/.pi/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  2254. package/template/.pi/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  2255. package/template/.pi/skills/drawio/scripts/adapters/python-code.js +0 -246
  2256. package/template/.pi/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  2257. package/template/.pi/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  2258. package/template/.pi/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  2259. package/template/.pi/skills/drawio/scripts/adapters/rust-code.js +0 -207
  2260. package/template/.pi/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  2261. package/template/.pi/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  2262. package/template/.pi/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  2263. package/template/.pi/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  2264. package/template/.pi/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  2265. package/template/.pi/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  2266. package/template/.pi/skills/drawio/scripts/cli.js +0 -700
  2267. package/template/.pi/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  2268. package/template/.pi/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  2269. package/template/.pi/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  2270. package/template/.pi/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  2271. package/template/.pi/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  2272. package/template/.pi/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  2273. package/template/.pi/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  2274. package/template/.pi/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  2275. package/template/.pi/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  2276. package/template/.pi/skills/drawio/scripts/dsl/document-spec.js +0 -256
  2277. package/template/.pi/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  2278. package/template/.pi/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  2279. package/template/.pi/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  2280. package/template/.pi/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  2281. package/template/.pi/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  2282. package/template/.pi/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  2283. package/template/.pi/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  2284. package/template/.pi/skills/drawio/scripts/dsl/multi-page.js +0 -224
  2285. package/template/.pi/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  2286. package/template/.pi/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  2287. package/template/.pi/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  2288. package/template/.pi/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  2289. package/template/.pi/skills/drawio/scripts/dsl/palette.js +0 -302
  2290. package/template/.pi/skills/drawio/scripts/dsl/palette.test.js +0 -197
  2291. package/template/.pi/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  2292. package/template/.pi/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  2293. package/template/.pi/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  2294. package/template/.pi/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  2295. package/template/.pi/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  2296. package/template/.pi/skills/drawio/scripts/install.bat +0 -64
  2297. package/template/.pi/skills/drawio/scripts/install.sh +0 -44
  2298. package/template/.pi/skills/drawio/scripts/math/index.js +0 -317
  2299. package/template/.pi/skills/drawio/scripts/math/index.test.js +0 -62
  2300. package/template/.pi/skills/drawio/scripts/package.json +0 -1
  2301. package/template/.pi/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  2302. package/template/.pi/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  2303. package/template/.pi/skills/drawio/scripts/postprocess/cli.js +0 -228
  2304. package/template/.pi/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  2305. package/template/.pi/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  2306. package/template/.pi/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  2307. package/template/.pi/skills/drawio/scripts/postprocess/html.js +0 -197
  2308. package/template/.pi/skills/drawio/scripts/postprocess/html.test.js +0 -50
  2309. package/template/.pi/skills/drawio/scripts/postprocess/index.js +0 -5
  2310. package/template/.pi/skills/drawio/scripts/postprocess/input.js +0 -112
  2311. package/template/.pi/skills/drawio/scripts/postprocess/input.test.js +0 -73
  2312. package/template/.pi/skills/drawio/scripts/postprocess/mutate.js +0 -584
  2313. package/template/.pi/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  2314. package/template/.pi/skills/drawio/scripts/postprocess/projection.js +0 -178
  2315. package/template/.pi/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  2316. package/template/.pi/skills/drawio/scripts/runtime/artifacts.js +0 -283
  2317. package/template/.pi/skills/drawio/scripts/runtime/desktop.js +0 -204
  2318. package/template/.pi/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  2319. package/template/.pi/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  2320. package/template/.pi/skills/drawio/scripts/runtime/export-stability.js +0 -75
  2321. package/template/.pi/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  2322. package/template/.pi/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  2323. package/template/.pi/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  2324. package/template/.pi/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  2325. package/template/.pi/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  2326. package/template/.pi/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  2327. package/template/.pi/skills/drawio/scripts/shared/xml-utils.js +0 -241
  2328. package/template/.pi/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  2329. package/template/.pi/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  2330. package/template/.pi/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  2331. package/template/.pi/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  2332. package/template/.pi/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  2333. package/template/.pi/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  2334. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  2335. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  2336. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  2337. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  2338. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  2339. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  2340. package/template/.pi/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  2341. package/template/.pi/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  2342. package/template/.pi/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  2343. package/template/.pi/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  2344. package/template/.pi/skills/drawio/styles/built-in/corporate.json +0 -49
  2345. package/template/.pi/skills/drawio/styles/built-in/default.json +0 -49
  2346. package/template/.pi/skills/drawio/styles/built-in/handdrawn.json +0 -49
  2347. package/template/.pi/skills/drawio/styles/schema.json +0 -112
  2348. package/template/.pi/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  2349. package/template/.pi/skills/drawio-academic-skills/README.md +0 -103
  2350. package/template/.pi/skills/drawio-academic-skills/README_CN.md +0 -103
  2351. package/template/.pi/skills/drawio-academic-skills/SKILL.md +0 -161
  2352. package/template/.pi/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  2353. package/template/.pi/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  2354. package/template/.pi/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  2355. package/template/.pi/skills/drawio-academic-skills/evals/README.md +0 -13
  2356. package/template/.pi/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  2357. package/template/.pi/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  2358. package/template/.pi/skills/drawio-academic-skills/evals/evals.json +0 -228
  2359. package/template/.pi/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  2360. package/template/.pi/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  2361. package/template/.pi/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  2362. package/template/.pi/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  2363. package/template/.pi/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  2364. package/template/.pi/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  2365. package/template/.pi/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  2366. package/template/.pi/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  2367. package/template/.pi/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  2368. package/template/.pi/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  2369. package/template/.pi/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  2370. package/template/.pi/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  2371. package/template/.pi/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  2372. package/template/.pi/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  2373. package/template/.pi/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  2374. package/template/.pi/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  2375. package/template/.pi/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  2376. package/template/.pi/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  2377. package/template/.pi/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  2378. package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  2379. package/template/.pi/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  2380. package/template/.pi/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  2381. package/template/.pi/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  2382. package/template/.pi/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  2383. package/template/.pi/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  2384. package/template/.pi/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  2385. package/template/.pi/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  2386. package/template/.pi/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  2387. package/template/.pi/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  2388. package/template/.pi/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  2389. package/template/.pi/skills/kb-retriever/README.md +0 -197
  2390. package/template/.pi/skills/kb-retriever/README.zh-CN.md +0 -197
  2391. package/template/.pi/skills/kb-retriever/SKILL.md +0 -250
  2392. package/template/.pi/skills/kb-retriever/manifest.json +0 -15
  2393. package/template/.pi/skills/kb-retriever/references/excel_analysis.md +0 -129
  2394. package/template/.pi/skills/kb-retriever/references/excel_reading.md +0 -72
  2395. package/template/.pi/skills/kb-retriever/references/pdf_reading.md +0 -362
  2396. package/template/.pi/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  2397. package/template/.pi/skills/yss-db2mybatis/requirements.txt +0 -4
  2398. package/template/.pi/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  2399. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  2400. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  2401. package/template/.pi/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  2402. package/template/.pi/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  2403. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  2404. package/template/.pi/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  2405. package/template/.qoder/skills/beautiful-article/README.md +0 -450
  2406. package/template/.qoder/skills/beautiful-article/README.zh-CN.md +0 -450
  2407. package/template/.qoder/skills/beautiful-article/SKILL.md +0 -466
  2408. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  2409. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  2410. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  2411. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  2412. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  2413. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  2414. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  2415. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  2416. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  2417. package/template/.qoder/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  2418. package/template/.qoder/skills/beautiful-article/manifest.json +0 -15
  2419. package/template/.qoder/skills/beautiful-article/references/article-types/briefing.md +0 -32
  2420. package/template/.qoder/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  2421. package/template/.qoder/skills/beautiful-article/references/article-types/essay.md +0 -31
  2422. package/template/.qoder/skills/beautiful-article/references/article-types/explainer.md +0 -32
  2423. package/template/.qoder/skills/beautiful-article/references/article-types/full-report.md +0 -32
  2424. package/template/.qoder/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  2425. package/template/.qoder/skills/beautiful-article/references/article-types/longform.md +0 -32
  2426. package/template/.qoder/skills/beautiful-article/references/article-types/review.md +0 -32
  2427. package/template/.qoder/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  2428. package/template/.qoder/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  2429. package/template/.qoder/skills/beautiful-article/references/article-types.md +0 -42
  2430. package/template/.qoder/skills/beautiful-article/references/asset-policy.md +0 -71
  2431. package/template/.qoder/skills/beautiful-article/references/component-policy.md +0 -103
  2432. package/template/.qoder/skills/beautiful-article/references/cover.md +0 -208
  2433. package/template/.qoder/skills/beautiful-article/references/harness.md +0 -35
  2434. package/template/.qoder/skills/beautiful-article/references/html-output.md +0 -42
  2435. package/template/.qoder/skills/beautiful-article/references/information-density.md +0 -50
  2436. package/template/.qoder/skills/beautiful-article/references/layout.md +0 -46
  2437. package/template/.qoder/skills/beautiful-article/references/pdf-output.md +0 -208
  2438. package/template/.qoder/skills/beautiful-article/references/plan-template.md +0 -109
  2439. package/template/.qoder/skills/beautiful-article/references/raw-policy.md +0 -86
  2440. package/template/.qoder/skills/beautiful-article/references/repair-policy.md +0 -35
  2441. package/template/.qoder/skills/beautiful-article/references/review-checklist.md +0 -133
  2442. package/template/.qoder/skills/beautiful-article/references/scaffold.md +0 -77
  2443. package/template/.qoder/skills/beautiful-article/references/section-build.md +0 -100
  2444. package/template/.qoder/skills/beautiful-article/references/source-to-markdown.md +0 -118
  2445. package/template/.qoder/skills/beautiful-article/references/theme-selection.md +0 -48
  2446. package/template/.qoder/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  2447. package/template/.qoder/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  2448. package/template/.qoder/skills/beautiful-article/scripts/scaffold.sh +0 -172
  2449. package/template/.qoder/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  2450. package/template/.qoder/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  2451. package/template/.qoder/skills/beautiful-article/theme-profiles/andy.md +0 -57
  2452. package/template/.qoder/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  2453. package/template/.qoder/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  2454. package/template/.qoder/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  2455. package/template/.qoder/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  2456. package/template/.qoder/skills/beautiful-article/theme-profiles/index.json +0 -112
  2457. package/template/.qoder/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  2458. package/template/.qoder/skills/beautiful-article/theme-profiles/press.md +0 -61
  2459. package/template/.qoder/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  2460. package/template/.qoder/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  2461. package/template/.qoder/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  2462. package/template/.qoder/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  2463. package/template/.qoder/skills/drawio/.mcp.json +0 -8
  2464. package/template/.qoder/skills/drawio/CHANGELOG.md +0 -216
  2465. package/template/.qoder/skills/drawio/SKILL.md +0 -157
  2466. package/template/.qoder/skills/drawio/agents/interface.yaml +0 -26
  2467. package/template/.qoder/skills/drawio/agents/openai.yaml +0 -26
  2468. package/template/.qoder/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  2469. package/template/.qoder/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  2470. package/template/.qoder/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  2471. package/template/.qoder/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  2472. package/template/.qoder/skills/drawio/assets/examples/login-flow.drawio +0 -6
  2473. package/template/.qoder/skills/drawio/assets/examples/microservices.drawio +0 -6
  2474. package/template/.qoder/skills/drawio/assets/examples/neural-network.drawio +0 -6
  2475. package/template/.qoder/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  2476. package/template/.qoder/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  2477. package/template/.qoder/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  2478. package/template/.qoder/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  2479. package/template/.qoder/skills/drawio/assets/palettes/c4-blue.json +0 -29
  2480. package/template/.qoder/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  2481. package/template/.qoder/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  2482. package/template/.qoder/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  2483. package/template/.qoder/skills/drawio/assets/palettes/ieee-color.json +0 -17
  2484. package/template/.qoder/skills/drawio/assets/palettes/journal-jama.json +0 -20
  2485. package/template/.qoder/skills/drawio/assets/palettes/journal-npg.json +0 -23
  2486. package/template/.qoder/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  2487. package/template/.qoder/skills/drawio/assets/palettes/morandi.json +0 -21
  2488. package/template/.qoder/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  2489. package/template/.qoder/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  2490. package/template/.qoder/skills/drawio/assets/palettes/tol-bright.json +0 -20
  2491. package/template/.qoder/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  2492. package/template/.qoder/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  2493. package/template/.qoder/skills/drawio/assets/palettes/tol-muted.json +0 -22
  2494. package/template/.qoder/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  2495. package/template/.qoder/skills/drawio/assets/schemas/spec.schema.json +0 -620
  2496. package/template/.qoder/skills/drawio/assets/themes/academic-color.json +0 -299
  2497. package/template/.qoder/skills/drawio/assets/themes/academic.json +0 -245
  2498. package/template/.qoder/skills/drawio/assets/themes/arch-dark.json +0 -253
  2499. package/template/.qoder/skills/drawio/assets/themes/blueprint.json +0 -246
  2500. package/template/.qoder/skills/drawio/assets/themes/dark-luxury.json +0 -246
  2501. package/template/.qoder/skills/drawio/assets/themes/dark-terminal.json +0 -244
  2502. package/template/.qoder/skills/drawio/assets/themes/dark.json +0 -220
  2503. package/template/.qoder/skills/drawio/assets/themes/high-contrast.json +0 -220
  2504. package/template/.qoder/skills/drawio/assets/themes/nature.json +0 -220
  2505. package/template/.qoder/skills/drawio/assets/themes/notion-clean.json +0 -246
  2506. package/template/.qoder/skills/drawio/assets/themes/tech-blue.json +0 -220
  2507. package/template/.qoder/skills/drawio/evals/README.md +0 -17
  2508. package/template/.qoder/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  2509. package/template/.qoder/skills/drawio/evals/baseline-prompts.json +0 -122
  2510. package/template/.qoder/skills/drawio/evals/darwin-results.tsv +0 -4
  2511. package/template/.qoder/skills/drawio/evals/evals.json +0 -223
  2512. package/template/.qoder/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  2513. package/template/.qoder/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  2514. package/template/.qoder/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  2515. package/template/.qoder/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  2516. package/template/.qoder/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  2517. package/template/.qoder/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  2518. package/template/.qoder/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  2519. package/template/.qoder/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  2520. package/template/.qoder/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  2521. package/template/.qoder/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  2522. package/template/.qoder/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  2523. package/template/.qoder/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  2524. package/template/.qoder/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  2525. package/template/.qoder/skills/drawio/evals/upstream-integration-cases.json +0 -78
  2526. package/template/.qoder/skills/drawio/evals/vision-preview-cases.json +0 -147
  2527. package/template/.qoder/skills/drawio/references/docs/agent-diagrams.md +0 -164
  2528. package/template/.qoder/skills/drawio/references/docs/ah-format.md +0 -322
  2529. package/template/.qoder/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  2530. package/template/.qoder/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  2531. package/template/.qoder/skills/drawio/references/docs/code-importers.md +0 -53
  2532. package/template/.qoder/skills/drawio/references/docs/config-importers.md +0 -68
  2533. package/template/.qoder/skills/drawio/references/docs/design-system/README.md +0 -204
  2534. package/template/.qoder/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  2535. package/template/.qoder/skills/drawio/references/docs/design-system/connectors.md +0 -388
  2536. package/template/.qoder/skills/drawio/references/docs/design-system/formulas.md +0 -196
  2537. package/template/.qoder/skills/drawio/references/docs/design-system/icons.md +0 -332
  2538. package/template/.qoder/skills/drawio/references/docs/design-system/shapes.md +0 -269
  2539. package/template/.qoder/skills/drawio/references/docs/design-system/specification.md +0 -754
  2540. package/template/.qoder/skills/drawio/references/docs/design-system/themes.md +0 -441
  2541. package/template/.qoder/skills/drawio/references/docs/design-system/tokens.md +0 -232
  2542. package/template/.qoder/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  2543. package/template/.qoder/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  2544. package/template/.qoder/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  2545. package/template/.qoder/skills/drawio/references/docs/math-typesetting.md +0 -258
  2546. package/template/.qoder/skills/drawio/references/docs/mcp-tools.md +0 -85
  2547. package/template/.qoder/skills/drawio/references/docs/migration-readiness.md +0 -73
  2548. package/template/.qoder/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  2549. package/template/.qoder/skills/drawio/references/docs/style-extraction.md +0 -261
  2550. package/template/.qoder/skills/drawio/references/docs/style-presets.md +0 -126
  2551. package/template/.qoder/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  2552. package/template/.qoder/skills/drawio/references/docs/xml-format.md +0 -53
  2553. package/template/.qoder/skills/drawio/references/examples/README.md +0 -33
  2554. package/template/.qoder/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  2555. package/template/.qoder/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  2556. package/template/.qoder/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  2557. package/template/.qoder/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  2558. package/template/.qoder/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  2559. package/template/.qoder/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  2560. package/template/.qoder/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  2561. package/template/.qoder/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  2562. package/template/.qoder/skills/drawio/references/examples/e-commerce.yaml +0 -141
  2563. package/template/.qoder/skills/drawio/references/examples/importers/README.md +0 -10
  2564. package/template/.qoder/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  2565. package/template/.qoder/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  2566. package/template/.qoder/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  2567. package/template/.qoder/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  2568. package/template/.qoder/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  2569. package/template/.qoder/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  2570. package/template/.qoder/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  2571. package/template/.qoder/skills/drawio/references/examples/importers/schema.sql +0 -10
  2572. package/template/.qoder/skills/drawio/references/examples/importers/terraform.tf +0 -9
  2573. package/template/.qoder/skills/drawio/references/examples/login-flow.yaml +0 -65
  2574. package/template/.qoder/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  2575. package/template/.qoder/skills/drawio/references/examples/microservices.yaml +0 -58
  2576. package/template/.qoder/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  2577. package/template/.qoder/skills/drawio/references/examples/neural-network.yaml +0 -66
  2578. package/template/.qoder/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  2579. package/template/.qoder/skills/drawio/references/examples/palettes/README.md +0 -29
  2580. package/template/.qoder/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  2581. package/template/.qoder/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  2582. package/template/.qoder/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  2583. package/template/.qoder/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  2584. package/template/.qoder/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  2585. package/template/.qoder/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  2586. package/template/.qoder/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  2587. package/template/.qoder/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  2588. package/template/.qoder/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  2589. package/template/.qoder/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  2590. package/template/.qoder/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  2591. package/template/.qoder/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  2592. package/template/.qoder/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  2593. package/template/.qoder/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  2594. package/template/.qoder/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  2595. package/template/.qoder/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  2596. package/template/.qoder/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  2597. package/template/.qoder/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  2598. package/template/.qoder/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  2599. package/template/.qoder/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  2600. package/template/.qoder/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  2601. package/template/.qoder/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  2602. package/template/.qoder/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  2603. package/template/.qoder/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  2604. package/template/.qoder/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  2605. package/template/.qoder/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  2606. package/template/.qoder/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  2607. package/template/.qoder/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  2608. package/template/.qoder/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  2609. package/template/.qoder/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  2610. package/template/.qoder/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  2611. package/template/.qoder/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  2612. package/template/.qoder/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  2613. package/template/.qoder/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  2614. package/template/.qoder/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  2615. package/template/.qoder/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  2616. package/template/.qoder/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  2617. package/template/.qoder/skills/drawio/references/official/style-reference.md +0 -936
  2618. package/template/.qoder/skills/drawio/references/official/xml-reference.md +0 -262
  2619. package/template/.qoder/skills/drawio/references/palette.schema.json +0 -59
  2620. package/template/.qoder/skills/drawio/references/theme.schema.json +0 -249
  2621. package/template/.qoder/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  2622. package/template/.qoder/skills/drawio/references/workflows/create.md +0 -195
  2623. package/template/.qoder/skills/drawio/references/workflows/edit.md +0 -174
  2624. package/template/.qoder/skills/drawio/references/workflows/replicate.md +0 -239
  2625. package/template/.qoder/skills/drawio/references/workflows/visual-review.md +0 -108
  2626. package/template/.qoder/skills/drawio/reports/output_quality_scorecard.md +0 -106
  2627. package/template/.qoder/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  2628. package/template/.qoder/skills/drawio/scripts/adapters/ci.js +0 -139
  2629. package/template/.qoder/skills/drawio/scripts/adapters/ci.test.js +0 -41
  2630. package/template/.qoder/skills/drawio/scripts/adapters/code-common.js +0 -171
  2631. package/template/.qoder/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  2632. package/template/.qoder/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  2633. package/template/.qoder/skills/drawio/scripts/adapters/compose.js +0 -134
  2634. package/template/.qoder/skills/drawio/scripts/adapters/compose.test.js +0 -54
  2635. package/template/.qoder/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  2636. package/template/.qoder/skills/drawio/scripts/adapters/config-common.js +0 -131
  2637. package/template/.qoder/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  2638. package/template/.qoder/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  2639. package/template/.qoder/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  2640. package/template/.qoder/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  2641. package/template/.qoder/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  2642. package/template/.qoder/skills/drawio/scripts/adapters/go-code.js +0 -168
  2643. package/template/.qoder/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  2644. package/template/.qoder/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  2645. package/template/.qoder/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  2646. package/template/.qoder/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  2647. package/template/.qoder/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  2648. package/template/.qoder/skills/drawio/scripts/adapters/identity.js +0 -244
  2649. package/template/.qoder/skills/drawio/scripts/adapters/identity.test.js +0 -123
  2650. package/template/.qoder/skills/drawio/scripts/adapters/index.js +0 -489
  2651. package/template/.qoder/skills/drawio/scripts/adapters/index.test.js +0 -152
  2652. package/template/.qoder/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  2653. package/template/.qoder/skills/drawio/scripts/adapters/js-code.js +0 -141
  2654. package/template/.qoder/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  2655. package/template/.qoder/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  2656. package/template/.qoder/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  2657. package/template/.qoder/skills/drawio/scripts/adapters/openapi.js +0 -98
  2658. package/template/.qoder/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  2659. package/template/.qoder/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  2660. package/template/.qoder/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  2661. package/template/.qoder/skills/drawio/scripts/adapters/optional-python.js +0 -127
  2662. package/template/.qoder/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  2663. package/template/.qoder/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  2664. package/template/.qoder/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  2665. package/template/.qoder/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  2666. package/template/.qoder/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  2667. package/template/.qoder/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  2668. package/template/.qoder/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  2669. package/template/.qoder/skills/drawio/scripts/adapters/python-code.js +0 -246
  2670. package/template/.qoder/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  2671. package/template/.qoder/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  2672. package/template/.qoder/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  2673. package/template/.qoder/skills/drawio/scripts/adapters/rust-code.js +0 -207
  2674. package/template/.qoder/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  2675. package/template/.qoder/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  2676. package/template/.qoder/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  2677. package/template/.qoder/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  2678. package/template/.qoder/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  2679. package/template/.qoder/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  2680. package/template/.qoder/skills/drawio/scripts/cli.js +0 -700
  2681. package/template/.qoder/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  2682. package/template/.qoder/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  2683. package/template/.qoder/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  2684. package/template/.qoder/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  2685. package/template/.qoder/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  2686. package/template/.qoder/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  2687. package/template/.qoder/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  2688. package/template/.qoder/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  2689. package/template/.qoder/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  2690. package/template/.qoder/skills/drawio/scripts/dsl/document-spec.js +0 -256
  2691. package/template/.qoder/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  2692. package/template/.qoder/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  2693. package/template/.qoder/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  2694. package/template/.qoder/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  2695. package/template/.qoder/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  2696. package/template/.qoder/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  2697. package/template/.qoder/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  2698. package/template/.qoder/skills/drawio/scripts/dsl/multi-page.js +0 -224
  2699. package/template/.qoder/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  2700. package/template/.qoder/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  2701. package/template/.qoder/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  2702. package/template/.qoder/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  2703. package/template/.qoder/skills/drawio/scripts/dsl/palette.js +0 -302
  2704. package/template/.qoder/skills/drawio/scripts/dsl/palette.test.js +0 -197
  2705. package/template/.qoder/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  2706. package/template/.qoder/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  2707. package/template/.qoder/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  2708. package/template/.qoder/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  2709. package/template/.qoder/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  2710. package/template/.qoder/skills/drawio/scripts/install.bat +0 -64
  2711. package/template/.qoder/skills/drawio/scripts/install.sh +0 -44
  2712. package/template/.qoder/skills/drawio/scripts/math/index.js +0 -317
  2713. package/template/.qoder/skills/drawio/scripts/math/index.test.js +0 -62
  2714. package/template/.qoder/skills/drawio/scripts/package.json +0 -1
  2715. package/template/.qoder/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  2716. package/template/.qoder/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  2717. package/template/.qoder/skills/drawio/scripts/postprocess/cli.js +0 -228
  2718. package/template/.qoder/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  2719. package/template/.qoder/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  2720. package/template/.qoder/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  2721. package/template/.qoder/skills/drawio/scripts/postprocess/html.js +0 -197
  2722. package/template/.qoder/skills/drawio/scripts/postprocess/html.test.js +0 -50
  2723. package/template/.qoder/skills/drawio/scripts/postprocess/index.js +0 -5
  2724. package/template/.qoder/skills/drawio/scripts/postprocess/input.js +0 -112
  2725. package/template/.qoder/skills/drawio/scripts/postprocess/input.test.js +0 -73
  2726. package/template/.qoder/skills/drawio/scripts/postprocess/mutate.js +0 -584
  2727. package/template/.qoder/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  2728. package/template/.qoder/skills/drawio/scripts/postprocess/projection.js +0 -178
  2729. package/template/.qoder/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  2730. package/template/.qoder/skills/drawio/scripts/runtime/artifacts.js +0 -283
  2731. package/template/.qoder/skills/drawio/scripts/runtime/desktop.js +0 -204
  2732. package/template/.qoder/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  2733. package/template/.qoder/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  2734. package/template/.qoder/skills/drawio/scripts/runtime/export-stability.js +0 -75
  2735. package/template/.qoder/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  2736. package/template/.qoder/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  2737. package/template/.qoder/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  2738. package/template/.qoder/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  2739. package/template/.qoder/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  2740. package/template/.qoder/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  2741. package/template/.qoder/skills/drawio/scripts/shared/xml-utils.js +0 -241
  2742. package/template/.qoder/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  2743. package/template/.qoder/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  2744. package/template/.qoder/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  2745. package/template/.qoder/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  2746. package/template/.qoder/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  2747. package/template/.qoder/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  2748. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  2749. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  2750. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  2751. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  2752. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  2753. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  2754. package/template/.qoder/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  2755. package/template/.qoder/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  2756. package/template/.qoder/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  2757. package/template/.qoder/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  2758. package/template/.qoder/skills/drawio/styles/built-in/corporate.json +0 -49
  2759. package/template/.qoder/skills/drawio/styles/built-in/default.json +0 -49
  2760. package/template/.qoder/skills/drawio/styles/built-in/handdrawn.json +0 -49
  2761. package/template/.qoder/skills/drawio/styles/schema.json +0 -112
  2762. package/template/.qoder/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  2763. package/template/.qoder/skills/drawio-academic-skills/README.md +0 -103
  2764. package/template/.qoder/skills/drawio-academic-skills/README_CN.md +0 -103
  2765. package/template/.qoder/skills/drawio-academic-skills/SKILL.md +0 -161
  2766. package/template/.qoder/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  2767. package/template/.qoder/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  2768. package/template/.qoder/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  2769. package/template/.qoder/skills/drawio-academic-skills/evals/README.md +0 -13
  2770. package/template/.qoder/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  2771. package/template/.qoder/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  2772. package/template/.qoder/skills/drawio-academic-skills/evals/evals.json +0 -228
  2773. package/template/.qoder/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  2774. package/template/.qoder/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  2775. package/template/.qoder/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  2776. package/template/.qoder/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  2777. package/template/.qoder/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  2778. package/template/.qoder/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  2779. package/template/.qoder/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  2780. package/template/.qoder/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  2781. package/template/.qoder/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  2782. package/template/.qoder/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  2783. package/template/.qoder/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  2784. package/template/.qoder/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  2785. package/template/.qoder/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  2786. package/template/.qoder/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  2787. package/template/.qoder/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  2788. package/template/.qoder/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  2789. package/template/.qoder/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  2790. package/template/.qoder/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  2791. package/template/.qoder/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  2792. package/template/.qoder/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  2793. package/template/.qoder/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  2794. package/template/.qoder/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  2795. package/template/.qoder/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  2796. package/template/.qoder/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  2797. package/template/.qoder/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  2798. package/template/.qoder/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  2799. package/template/.qoder/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  2800. package/template/.qoder/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  2801. package/template/.qoder/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  2802. package/template/.qoder/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  2803. package/template/.qoder/skills/kb-retriever/README.md +0 -197
  2804. package/template/.qoder/skills/kb-retriever/README.zh-CN.md +0 -197
  2805. package/template/.qoder/skills/kb-retriever/SKILL.md +0 -250
  2806. package/template/.qoder/skills/kb-retriever/manifest.json +0 -15
  2807. package/template/.qoder/skills/kb-retriever/references/excel_analysis.md +0 -129
  2808. package/template/.qoder/skills/kb-retriever/references/excel_reading.md +0 -72
  2809. package/template/.qoder/skills/kb-retriever/references/pdf_reading.md +0 -362
  2810. package/template/.qoder/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  2811. package/template/.qoder/skills/yss-db2mybatis/requirements.txt +0 -4
  2812. package/template/.qoder/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  2813. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  2814. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  2815. package/template/.qoder/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  2816. package/template/.qoder/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  2817. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  2818. package/template/.qoder/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  2819. package/template/.trae/skills/beautiful-article/README.md +0 -450
  2820. package/template/.trae/skills/beautiful-article/README.zh-CN.md +0 -450
  2821. package/template/.trae/skills/beautiful-article/SKILL.md +0 -466
  2822. package/template/.trae/skills/beautiful-article/assets/scaffold-template/__yss_dotfile__.npmrc +0 -1
  2823. package/template/.trae/skills/beautiful-article/assets/scaffold-template/article/Article.tsx +0 -69
  2824. package/template/.trae/skills/beautiful-article/assets/scaffold-template/article/Cover.tsx +0 -172
  2825. package/template/.trae/skills/beautiful-article/assets/scaffold-template/article/main.tsx +0 -26
  2826. package/template/.trae/skills/beautiful-article/assets/scaffold-template/article/sections/01-opening.tsx +0 -30
  2827. package/template/.trae/skills/beautiful-article/assets/scaffold-template/index.html +0 -19
  2828. package/template/.trae/skills/beautiful-article/assets/scaffold-template/package.json +0 -26
  2829. package/template/.trae/skills/beautiful-article/assets/scaffold-template/tsconfig.json +0 -20
  2830. package/template/.trae/skills/beautiful-article/assets/scaffold-template/tsconfig.node.json +0 -11
  2831. package/template/.trae/skills/beautiful-article/assets/scaffold-template/vite.config.ts +0 -18
  2832. package/template/.trae/skills/beautiful-article/manifest.json +0 -15
  2833. package/template/.trae/skills/beautiful-article/references/article-types/briefing.md +0 -32
  2834. package/template/.trae/skills/beautiful-article/references/article-types/dialogue.md +0 -30
  2835. package/template/.trae/skills/beautiful-article/references/article-types/essay.md +0 -31
  2836. package/template/.trae/skills/beautiful-article/references/article-types/explainer.md +0 -32
  2837. package/template/.trae/skills/beautiful-article/references/article-types/full-report.md +0 -32
  2838. package/template/.trae/skills/beautiful-article/references/article-types/interactive-explainer.md +0 -66
  2839. package/template/.trae/skills/beautiful-article/references/article-types/longform.md +0 -32
  2840. package/template/.trae/skills/beautiful-article/references/article-types/review.md +0 -32
  2841. package/template/.trae/skills/beautiful-article/references/article-types/tutorial.md +0 -30
  2842. package/template/.trae/skills/beautiful-article/references/article-types/visual-essay.md +0 -33
  2843. package/template/.trae/skills/beautiful-article/references/article-types.md +0 -42
  2844. package/template/.trae/skills/beautiful-article/references/asset-policy.md +0 -71
  2845. package/template/.trae/skills/beautiful-article/references/component-policy.md +0 -103
  2846. package/template/.trae/skills/beautiful-article/references/cover.md +0 -208
  2847. package/template/.trae/skills/beautiful-article/references/harness.md +0 -35
  2848. package/template/.trae/skills/beautiful-article/references/html-output.md +0 -42
  2849. package/template/.trae/skills/beautiful-article/references/information-density.md +0 -50
  2850. package/template/.trae/skills/beautiful-article/references/layout.md +0 -46
  2851. package/template/.trae/skills/beautiful-article/references/pdf-output.md +0 -208
  2852. package/template/.trae/skills/beautiful-article/references/plan-template.md +0 -109
  2853. package/template/.trae/skills/beautiful-article/references/raw-policy.md +0 -86
  2854. package/template/.trae/skills/beautiful-article/references/repair-policy.md +0 -35
  2855. package/template/.trae/skills/beautiful-article/references/review-checklist.md +0 -133
  2856. package/template/.trae/skills/beautiful-article/references/scaffold.md +0 -77
  2857. package/template/.trae/skills/beautiful-article/references/section-build.md +0 -100
  2858. package/template/.trae/skills/beautiful-article/references/source-to-markdown.md +0 -118
  2859. package/template/.trae/skills/beautiful-article/references/theme-selection.md +0 -48
  2860. package/template/.trae/skills/beautiful-article/scripts/html-to-pdf.sh +0 -160
  2861. package/template/.trae/skills/beautiful-article/scripts/pdf-print-overrides.css +0 -192
  2862. package/template/.trae/skills/beautiful-article/scripts/scaffold.sh +0 -172
  2863. package/template/.trae/skills/beautiful-article/scripts/source-to-markdown-markitdown.py +0 -100
  2864. package/template/.trae/skills/beautiful-article/scripts/source-to-markdown.py +0 -174
  2865. package/template/.trae/skills/beautiful-article/theme-profiles/andy.md +0 -57
  2866. package/template/.trae/skills/beautiful-article/theme-profiles/bayer.md +0 -57
  2867. package/template/.trae/skills/beautiful-article/theme-profiles/bodoni.md +0 -57
  2868. package/template/.trae/skills/beautiful-article/theme-profiles/freddie.md +0 -57
  2869. package/template/.trae/skills/beautiful-article/theme-profiles/fuller.md +0 -56
  2870. package/template/.trae/skills/beautiful-article/theme-profiles/index.json +0 -112
  2871. package/template/.trae/skills/beautiful-article/theme-profiles/knuth.md +0 -60
  2872. package/template/.trae/skills/beautiful-article/theme-profiles/press.md +0 -61
  2873. package/template/.trae/skills/beautiful-article/theme-profiles/shannon.md +0 -64
  2874. package/template/.trae/skills/beautiful-article/theme-profiles/sottsass.md +0 -57
  2875. package/template/.trae/skills/beautiful-article/theme-profiles/tufte.md +0 -64
  2876. package/template/.trae/skills/beautiful-article/theme-profiles/vignelli.md +0 -63
  2877. package/template/.trae/skills/drawio/.mcp.json +0 -8
  2878. package/template/.trae/skills/drawio/CHANGELOG.md +0 -216
  2879. package/template/.trae/skills/drawio/SKILL.md +0 -157
  2880. package/template/.trae/skills/drawio/agents/interface.yaml +0 -26
  2881. package/template/.trae/skills/drawio/agents/openai.yaml +0 -26
  2882. package/template/.trae/skills/drawio/assets/catalog/ai-icons.json.gz +0 -0
  2883. package/template/.trae/skills/drawio/assets/catalog/shape-catalog.json.gz +0 -0
  2884. package/template/.trae/skills/drawio/assets/catalog/shape-index.json.gz +0 -0
  2885. package/template/.trae/skills/drawio/assets/examples/login-flow-test.drawio +0 -6
  2886. package/template/.trae/skills/drawio/assets/examples/login-flow.drawio +0 -6
  2887. package/template/.trae/skills/drawio/assets/examples/microservices.drawio +0 -6
  2888. package/template/.trae/skills/drawio/assets/examples/neural-network.drawio +0 -6
  2889. package/template/.trae/skills/drawio/assets/licenses/architecture-diagram-generator-MIT.txt +0 -26
  2890. package/template/.trae/skills/drawio/assets/licenses/drawio-mcp-shape-index-Apache-2.0.txt +0 -8
  2891. package/template/.trae/skills/drawio/assets/licenses/lobe-icons-MIT.txt +0 -26
  2892. package/template/.trae/skills/drawio/assets/licenses/lucide-ISC.txt +0 -41
  2893. package/template/.trae/skills/drawio/assets/palettes/c4-blue.json +0 -29
  2894. package/template/.trae/skills/drawio/assets/palettes/cloud-aws.json +0 -30
  2895. package/template/.trae/skills/drawio/assets/palettes/drawio-classic.json +0 -21
  2896. package/template/.trae/skills/drawio/assets/palettes/ieee-bw.json +0 -26
  2897. package/template/.trae/skills/drawio/assets/palettes/ieee-color.json +0 -17
  2898. package/template/.trae/skills/drawio/assets/palettes/journal-jama.json +0 -20
  2899. package/template/.trae/skills/drawio/assets/palettes/journal-npg.json +0 -23
  2900. package/template/.trae/skills/drawio/assets/palettes/matlab-lines.json +0 -20
  2901. package/template/.trae/skills/drawio/assets/palettes/morandi.json +0 -21
  2902. package/template/.trae/skills/drawio/assets/palettes/okabe-ito.json +0 -21
  2903. package/template/.trae/skills/drawio/assets/palettes/seaborn-colorblind.json +0 -23
  2904. package/template/.trae/skills/drawio/assets/palettes/tol-bright.json +0 -20
  2905. package/template/.trae/skills/drawio/assets/palettes/tol-high-contrast.json +0 -18
  2906. package/template/.trae/skills/drawio/assets/palettes/tol-light-fill.json +0 -22
  2907. package/template/.trae/skills/drawio/assets/palettes/tol-muted.json +0 -22
  2908. package/template/.trae/skills/drawio/assets/schemas/graph-projection.schema.json +0 -135
  2909. package/template/.trae/skills/drawio/assets/schemas/spec.schema.json +0 -620
  2910. package/template/.trae/skills/drawio/assets/themes/academic-color.json +0 -299
  2911. package/template/.trae/skills/drawio/assets/themes/academic.json +0 -245
  2912. package/template/.trae/skills/drawio/assets/themes/arch-dark.json +0 -253
  2913. package/template/.trae/skills/drawio/assets/themes/blueprint.json +0 -246
  2914. package/template/.trae/skills/drawio/assets/themes/dark-luxury.json +0 -246
  2915. package/template/.trae/skills/drawio/assets/themes/dark-terminal.json +0 -244
  2916. package/template/.trae/skills/drawio/assets/themes/dark.json +0 -220
  2917. package/template/.trae/skills/drawio/assets/themes/high-contrast.json +0 -220
  2918. package/template/.trae/skills/drawio/assets/themes/nature.json +0 -220
  2919. package/template/.trae/skills/drawio/assets/themes/notion-clean.json +0 -246
  2920. package/template/.trae/skills/drawio/assets/themes/tech-blue.json +0 -220
  2921. package/template/.trae/skills/drawio/evals/README.md +0 -17
  2922. package/template/.trae/skills/drawio/evals/ai-icon-catalog-cases.json +0 -89
  2923. package/template/.trae/skills/drawio/evals/baseline-prompts.json +0 -122
  2924. package/template/.trae/skills/drawio/evals/darwin-results.tsv +0 -4
  2925. package/template/.trae/skills/drawio/evals/evals.json +0 -223
  2926. package/template/.trae/skills/drawio/evals/evidence/ai-icon-catalog-desktop.json +0 -134
  2927. package/template/.trae/skills/drawio/evals/fixtures/ai-icons-advanced-svg.yaml +0 -25
  2928. package/template/.trae/skills/drawio/evals/fixtures/ai-icons-cjk-agent-rag.yaml +0 -55
  2929. package/template/.trae/skills/drawio/evals/fixtures/ai-icons-core-aliases.yaml +0 -50
  2930. package/template/.trae/skills/drawio/evals/fixtures/ai-icons-current-color.yaml +0 -25
  2931. package/template/.trae/skills/drawio/evals/fixtures/ai-icons-gradients.yaml +0 -25
  2932. package/template/.trae/skills/drawio/evals/fixtures/import-simple-compressed.drawio +0 -5
  2933. package/template/.trae/skills/drawio/evals/fixtures/import-simple.drawio +0 -28
  2934. package/template/.trae/skills/drawio/evals/fixtures/industrial-architecture.yaml +0 -239
  2935. package/template/.trae/skills/drawio/evals/fixtures/replicate-academic-highlight.svg +0 -13
  2936. package/template/.trae/skills/drawio/evals/fixtures/replicate-brand-architecture.svg +0 -14
  2937. package/template/.trae/skills/drawio/evals/fixtures/replicate-warm-approval.svg +0 -13
  2938. package/template/.trae/skills/drawio/evals/fixtures/vision-tall-workflow.yaml +0 -47
  2939. package/template/.trae/skills/drawio/evals/upstream-integration-cases.json +0 -78
  2940. package/template/.trae/skills/drawio/evals/vision-preview-cases.json +0 -147
  2941. package/template/.trae/skills/drawio/references/docs/agent-diagrams.md +0 -164
  2942. package/template/.trae/skills/drawio/references/docs/ah-format.md +0 -322
  2943. package/template/.trae/skills/drawio/references/docs/architecture-diagrams.md +0 -159
  2944. package/template/.trae/skills/drawio/references/docs/canonical-graph-projection.md +0 -54
  2945. package/template/.trae/skills/drawio/references/docs/code-importers.md +0 -53
  2946. package/template/.trae/skills/drawio/references/docs/config-importers.md +0 -68
  2947. package/template/.trae/skills/drawio/references/docs/design-system/README.md +0 -204
  2948. package/template/.trae/skills/drawio/references/docs/design-system/color-guide.md +0 -255
  2949. package/template/.trae/skills/drawio/references/docs/design-system/connectors.md +0 -388
  2950. package/template/.trae/skills/drawio/references/docs/design-system/formulas.md +0 -196
  2951. package/template/.trae/skills/drawio/references/docs/design-system/icons.md +0 -332
  2952. package/template/.trae/skills/drawio/references/docs/design-system/shapes.md +0 -269
  2953. package/template/.trae/skills/drawio/references/docs/design-system/specification.md +0 -754
  2954. package/template/.trae/skills/drawio/references/docs/design-system/themes.md +0 -441
  2955. package/template/.trae/skills/drawio/references/docs/design-system/tokens.md +0 -232
  2956. package/template/.trae/skills/drawio/references/docs/edge-quality-rules.md +0 -65
  2957. package/template/.trae/skills/drawio/references/docs/ieee-network-diagrams.md +0 -145
  2958. package/template/.trae/skills/drawio/references/docs/live-snapshots-drift.md +0 -72
  2959. package/template/.trae/skills/drawio/references/docs/math-typesetting.md +0 -258
  2960. package/template/.trae/skills/drawio/references/docs/mcp-tools.md +0 -85
  2961. package/template/.trae/skills/drawio/references/docs/migration-readiness.md +0 -73
  2962. package/template/.trae/skills/drawio/references/docs/stencil-library-guide.md +0 -97
  2963. package/template/.trae/skills/drawio/references/docs/style-extraction.md +0 -261
  2964. package/template/.trae/skills/drawio/references/docs/style-presets.md +0 -126
  2965. package/template/.trae/skills/drawio/references/docs/upstream-capability-compatibility.md +0 -61
  2966. package/template/.trae/skills/drawio/references/docs/xml-format.md +0 -53
  2967. package/template/.trae/skills/drawio/references/examples/README.md +0 -33
  2968. package/template/.trae/skills/drawio/references/examples/agentic-rag.yaml +0 -71
  2969. package/template/.trae/skills/drawio/references/examples/arch-dark-aws-serverless.yaml +0 -103
  2970. package/template/.trae/skills/drawio/references/examples/arch-dark-microservices.yaml +0 -146
  2971. package/template/.trae/skills/drawio/references/examples/arch-dark-web-app.yaml +0 -62
  2972. package/template/.trae/skills/drawio/references/examples/auto-layout-workflow.yaml +0 -81
  2973. package/template/.trae/skills/drawio/references/examples/aws-vpc-topology.yaml +0 -66
  2974. package/template/.trae/skills/drawio/references/examples/campus-lan-topology.yaml +0 -89
  2975. package/template/.trae/skills/drawio/references/examples/cloud-reference-architecture.yaml +0 -34
  2976. package/template/.trae/skills/drawio/references/examples/e-commerce.yaml +0 -141
  2977. package/template/.trae/skills/drawio/references/examples/importers/README.md +0 -10
  2978. package/template/.trae/skills/drawio/references/examples/importers/live/compose-drift-evidence.json +0 -49
  2979. package/template/.trae/skills/drawio/references/examples/importers/live/compose-drift-report.json +0 -300
  2980. package/template/.trae/skills/drawio/references/examples/importers/live/compose-drift.spec.yaml +0 -75
  2981. package/template/.trae/skills/drawio/references/examples/importers/live/docker-inspect.json +0 -55
  2982. package/template/.trae/skills/drawio/references/examples/importers/live/drift-declared-compose.yaml +0 -13
  2983. package/template/.trae/skills/drawio/references/examples/importers/live/kubernetes-live.json +0 -71
  2984. package/template/.trae/skills/drawio/references/examples/importers/live/terraform-state.json +0 -70
  2985. package/template/.trae/skills/drawio/references/examples/importers/schema.sql +0 -10
  2986. package/template/.trae/skills/drawio/references/examples/importers/terraform.tf +0 -9
  2987. package/template/.trae/skills/drawio/references/examples/login-flow.yaml +0 -65
  2988. package/template/.trae/skills/drawio/references/examples/mem0-memory-layer.yaml +0 -63
  2989. package/template/.trae/skills/drawio/references/examples/microservices.yaml +0 -58
  2990. package/template/.trae/skills/drawio/references/examples/multi-agent-orchestration.yaml +0 -67
  2991. package/template/.trae/skills/drawio/references/examples/neural-network.yaml +0 -66
  2992. package/template/.trae/skills/drawio/references/examples/onprem-dmz-topology.yaml +0 -62
  2993. package/template/.trae/skills/drawio/references/examples/palettes/README.md +0 -29
  2994. package/template/.trae/skills/drawio/references/examples/palettes/c4-blue.drawio +0 -6
  2995. package/template/.trae/skills/drawio/references/examples/palettes/c4-blue.svg +0 -36
  2996. package/template/.trae/skills/drawio/references/examples/palettes/cloud-aws.drawio +0 -6
  2997. package/template/.trae/skills/drawio/references/examples/palettes/cloud-aws.svg +0 -36
  2998. package/template/.trae/skills/drawio/references/examples/palettes/drawio-classic.drawio +0 -6
  2999. package/template/.trae/skills/drawio/references/examples/palettes/drawio-classic.svg +0 -36
  3000. package/template/.trae/skills/drawio/references/examples/palettes/ieee-bw.drawio +0 -6
  3001. package/template/.trae/skills/drawio/references/examples/palettes/ieee-bw.svg +0 -36
  3002. package/template/.trae/skills/drawio/references/examples/palettes/ieee-color.drawio +0 -6
  3003. package/template/.trae/skills/drawio/references/examples/palettes/ieee-color.svg +0 -36
  3004. package/template/.trae/skills/drawio/references/examples/palettes/journal-jama.drawio +0 -6
  3005. package/template/.trae/skills/drawio/references/examples/palettes/journal-jama.svg +0 -36
  3006. package/template/.trae/skills/drawio/references/examples/palettes/journal-npg.drawio +0 -6
  3007. package/template/.trae/skills/drawio/references/examples/palettes/journal-npg.svg +0 -36
  3008. package/template/.trae/skills/drawio/references/examples/palettes/matlab-lines.drawio +0 -6
  3009. package/template/.trae/skills/drawio/references/examples/palettes/matlab-lines.svg +0 -36
  3010. package/template/.trae/skills/drawio/references/examples/palettes/morandi.drawio +0 -6
  3011. package/template/.trae/skills/drawio/references/examples/palettes/morandi.svg +0 -36
  3012. package/template/.trae/skills/drawio/references/examples/palettes/okabe-ito.drawio +0 -6
  3013. package/template/.trae/skills/drawio/references/examples/palettes/okabe-ito.svg +0 -36
  3014. package/template/.trae/skills/drawio/references/examples/palettes/palette-swatch.template.yaml +0 -56
  3015. package/template/.trae/skills/drawio/references/examples/palettes/seaborn-colorblind.drawio +0 -6
  3016. package/template/.trae/skills/drawio/references/examples/palettes/seaborn-colorblind.svg +0 -36
  3017. package/template/.trae/skills/drawio/references/examples/palettes/tol-bright.drawio +0 -6
  3018. package/template/.trae/skills/drawio/references/examples/palettes/tol-bright.svg +0 -36
  3019. package/template/.trae/skills/drawio/references/examples/palettes/tol-high-contrast.drawio +0 -6
  3020. package/template/.trae/skills/drawio/references/examples/palettes/tol-high-contrast.svg +0 -36
  3021. package/template/.trae/skills/drawio/references/examples/palettes/tol-light-fill.drawio +0 -6
  3022. package/template/.trae/skills/drawio/references/examples/palettes/tol-light-fill.svg +0 -36
  3023. package/template/.trae/skills/drawio/references/examples/palettes/tol-muted.drawio +0 -6
  3024. package/template/.trae/skills/drawio/references/examples/palettes/tol-muted.svg +0 -36
  3025. package/template/.trae/skills/drawio/references/examples/rag-pipeline.yaml +0 -67
  3026. package/template/.trae/skills/drawio/references/examples/replicated-brand-flow.yaml +0 -89
  3027. package/template/.trae/skills/drawio/references/examples/swimlane-engineering-review.yaml +0 -44
  3028. package/template/.trae/skills/drawio/references/examples/tiered-network-topology.yaml +0 -59
  3029. package/template/.trae/skills/drawio/references/examples/tool-call-loop.yaml +0 -63
  3030. package/template/.trae/skills/drawio/references/examples/vendor-device-mapping.yaml +0 -46
  3031. package/template/.trae/skills/drawio/references/official/style-reference.md +0 -936
  3032. package/template/.trae/skills/drawio/references/official/xml-reference.md +0 -262
  3033. package/template/.trae/skills/drawio/references/palette.schema.json +0 -59
  3034. package/template/.trae/skills/drawio/references/theme.schema.json +0 -249
  3035. package/template/.trae/skills/drawio/references/upstream/pure-drawio-skill.md +0 -615
  3036. package/template/.trae/skills/drawio/references/workflows/create.md +0 -195
  3037. package/template/.trae/skills/drawio/references/workflows/edit.md +0 -174
  3038. package/template/.trae/skills/drawio/references/workflows/replicate.md +0 -239
  3039. package/template/.trae/skills/drawio/references/workflows/visual-review.md +0 -108
  3040. package/template/.trae/skills/drawio/reports/output_quality_scorecard.md +0 -106
  3041. package/template/.trae/skills/drawio/reports/upstream-port-release-evidence.md +0 -43
  3042. package/template/.trae/skills/drawio/scripts/adapters/ci.js +0 -139
  3043. package/template/.trae/skills/drawio/scripts/adapters/ci.test.js +0 -41
  3044. package/template/.trae/skills/drawio/scripts/adapters/code-common.js +0 -171
  3045. package/template/.trae/skills/drawio/scripts/adapters/code-imports.test.js +0 -80
  3046. package/template/.trae/skills/drawio/scripts/adapters/code-parsers.integration.test.js +0 -71
  3047. package/template/.trae/skills/drawio/scripts/adapters/compose.js +0 -134
  3048. package/template/.trae/skills/drawio/scripts/adapters/compose.test.js +0 -54
  3049. package/template/.trae/skills/drawio/scripts/adapters/config-adapters.integration.test.js +0 -58
  3050. package/template/.trae/skills/drawio/scripts/adapters/config-common.js +0 -131
  3051. package/template/.trae/skills/drawio/scripts/adapters/config-common.test.js +0 -32
  3052. package/template/.trae/skills/drawio/scripts/adapters/docker-inspect.js +0 -127
  3053. package/template/.trae/skills/drawio/scripts/adapters/docker-inspect.test.js +0 -62
  3054. package/template/.trae/skills/drawio/scripts/adapters/fixtures/raster-extraction.json +0 -31
  3055. package/template/.trae/skills/drawio/scripts/adapters/go-code-adapter.test.js +0 -59
  3056. package/template/.trae/skills/drawio/scripts/adapters/go-code.js +0 -168
  3057. package/template/.trae/skills/drawio/scripts/adapters/graph-drift.file.test.js +0 -67
  3058. package/template/.trae/skills/drawio/scripts/adapters/graph-drift.js +0 -358
  3059. package/template/.trae/skills/drawio/scripts/adapters/graph-drift.test.js +0 -272
  3060. package/template/.trae/skills/drawio/scripts/adapters/graph-projection.js +0 -335
  3061. package/template/.trae/skills/drawio/scripts/adapters/graph-projection.test.js +0 -141
  3062. package/template/.trae/skills/drawio/scripts/adapters/identity.js +0 -244
  3063. package/template/.trae/skills/drawio/scripts/adapters/identity.test.js +0 -123
  3064. package/template/.trae/skills/drawio/scripts/adapters/index.js +0 -489
  3065. package/template/.trae/skills/drawio/scripts/adapters/index.test.js +0 -152
  3066. package/template/.trae/skills/drawio/scripts/adapters/js-code-adapter.test.js +0 -42
  3067. package/template/.trae/skills/drawio/scripts/adapters/js-code.js +0 -141
  3068. package/template/.trae/skills/drawio/scripts/adapters/kubernetes-live.test.js +0 -46
  3069. package/template/.trae/skills/drawio/scripts/adapters/kubernetes.js +0 -258
  3070. package/template/.trae/skills/drawio/scripts/adapters/kubernetes.test.js +0 -81
  3071. package/template/.trae/skills/drawio/scripts/adapters/openapi.js +0 -98
  3072. package/template/.trae/skills/drawio/scripts/adapters/openapi.test.js +0 -46
  3073. package/template/.trae/skills/drawio/scripts/adapters/optional-python-code.js +0 -16
  3074. package/template/.trae/skills/drawio/scripts/adapters/optional-python.integration.test.js +0 -32
  3075. package/template/.trae/skills/drawio/scripts/adapters/optional-python.js +0 -127
  3076. package/template/.trae/skills/drawio/scripts/adapters/optional-python.test.js +0 -55
  3077. package/template/.trae/skills/drawio/scripts/adapters/projection-to-spec.js +0 -116
  3078. package/template/.trae/skills/drawio/scripts/adapters/projection-to-spec.test.js +0 -139
  3079. package/template/.trae/skills/drawio/scripts/adapters/python/code-parser-worker.py +0 -93
  3080. package/template/.trae/skills/drawio/scripts/adapters/python/config-parser-worker.py +0 -237
  3081. package/template/.trae/skills/drawio/scripts/adapters/python/requirements.txt +0 -2
  3082. package/template/.trae/skills/drawio/scripts/adapters/python-code-adapter.test.js +0 -127
  3083. package/template/.trae/skills/drawio/scripts/adapters/python-code.js +0 -246
  3084. package/template/.trae/skills/drawio/scripts/adapters/raster-extraction.js +0 -258
  3085. package/template/.trae/skills/drawio/scripts/adapters/raster-extraction.test.js +0 -308
  3086. package/template/.trae/skills/drawio/scripts/adapters/rust-code-adapter.test.js +0 -64
  3087. package/template/.trae/skills/drawio/scripts/adapters/rust-code.js +0 -207
  3088. package/template/.trae/skills/drawio/scripts/adapters/sql-ddl.js +0 -118
  3089. package/template/.trae/skills/drawio/scripts/adapters/sql-ddl.test.js +0 -56
  3090. package/template/.trae/skills/drawio/scripts/adapters/terraform-config.js +0 -141
  3091. package/template/.trae/skills/drawio/scripts/adapters/terraform-config.test.js +0 -67
  3092. package/template/.trae/skills/drawio/scripts/adapters/terraform-state.js +0 -157
  3093. package/template/.trae/skills/drawio/scripts/adapters/terraform-state.test.js +0 -69
  3094. package/template/.trae/skills/drawio/scripts/cli.js +0 -700
  3095. package/template/.trae/skills/drawio/scripts/dsl/ah-to-drawio.js +0 -276
  3096. package/template/.trae/skills/drawio/scripts/dsl/ah-to-drawio.test.js +0 -77
  3097. package/template/.trae/skills/drawio/scripts/dsl/ai-icon-catalog.js +0 -126
  3098. package/template/.trae/skills/drawio/scripts/dsl/ai-icon-catalog.test.js +0 -86
  3099. package/template/.trae/skills/drawio/scripts/dsl/auto-layout.js +0 -206
  3100. package/template/.trae/skills/drawio/scripts/dsl/auto-layout.test.js +0 -249
  3101. package/template/.trae/skills/drawio/scripts/dsl/catalog-ranking.js +0 -54
  3102. package/template/.trae/skills/drawio/scripts/dsl/catalog-search.js +0 -58
  3103. package/template/.trae/skills/drawio/scripts/dsl/catalog-search.test.js +0 -44
  3104. package/template/.trae/skills/drawio/scripts/dsl/document-spec.js +0 -256
  3105. package/template/.trae/skills/drawio/scripts/dsl/document-spec.test.js +0 -147
  3106. package/template/.trae/skills/drawio/scripts/dsl/drawio-to-spec.js +0 -497
  3107. package/template/.trae/skills/drawio/scripts/dsl/examples-baseline.test.js +0 -30
  3108. package/template/.trae/skills/drawio/scripts/dsl/icon-mappings.js +0 -65
  3109. package/template/.trae/skills/drawio/scripts/dsl/icon-mappings.test.js +0 -19
  3110. package/template/.trae/skills/drawio/scripts/dsl/icon-resolver.js +0 -153
  3111. package/template/.trae/skills/drawio/scripts/dsl/icon-resolver.test.js +0 -62
  3112. package/template/.trae/skills/drawio/scripts/dsl/multi-page.js +0 -224
  3113. package/template/.trae/skills/drawio/scripts/dsl/multi-page.test.js +0 -107
  3114. package/template/.trae/skills/drawio/scripts/dsl/palette-catalog.test.js +0 -138
  3115. package/template/.trae/skills/drawio/scripts/dsl/palette-integration.test.js +0 -182
  3116. package/template/.trae/skills/drawio/scripts/dsl/palette-validate.js +0 -91
  3117. package/template/.trae/skills/drawio/scripts/dsl/palette.js +0 -302
  3118. package/template/.trae/skills/drawio/scripts/dsl/palette.test.js +0 -197
  3119. package/template/.trae/skills/drawio/scripts/dsl/shape-catalog.js +0 -89
  3120. package/template/.trae/skills/drawio/scripts/dsl/shape-catalog.test.js +0 -21
  3121. package/template/.trae/skills/drawio/scripts/dsl/spec-to-drawio.js +0 -3739
  3122. package/template/.trae/skills/drawio/scripts/dsl/spec-to-drawio.test.js +0 -3022
  3123. package/template/.trae/skills/drawio/scripts/generate-palette-swatches.js +0 -87
  3124. package/template/.trae/skills/drawio/scripts/install.bat +0 -64
  3125. package/template/.trae/skills/drawio/scripts/install.sh +0 -44
  3126. package/template/.trae/skills/drawio/scripts/math/index.js +0 -317
  3127. package/template/.trae/skills/drawio/scripts/math/index.test.js +0 -62
  3128. package/template/.trae/skills/drawio/scripts/package.json +0 -1
  3129. package/template/.trae/skills/drawio/scripts/postprocess/artifacts.js +0 -142
  3130. package/template/.trae/skills/drawio/scripts/postprocess/artifacts.test.js +0 -86
  3131. package/template/.trae/skills/drawio/scripts/postprocess/cli.js +0 -228
  3132. package/template/.trae/skills/drawio/scripts/postprocess/cli.test.js +0 -129
  3133. package/template/.trae/skills/drawio/scripts/postprocess/fixtures/bundle.yaml +0 -75
  3134. package/template/.trae/skills/drawio/scripts/postprocess/fixtures/legacy.yaml +0 -21
  3135. package/template/.trae/skills/drawio/scripts/postprocess/html.js +0 -197
  3136. package/template/.trae/skills/drawio/scripts/postprocess/html.test.js +0 -50
  3137. package/template/.trae/skills/drawio/scripts/postprocess/index.js +0 -5
  3138. package/template/.trae/skills/drawio/scripts/postprocess/input.js +0 -112
  3139. package/template/.trae/skills/drawio/scripts/postprocess/input.test.js +0 -73
  3140. package/template/.trae/skills/drawio/scripts/postprocess/mutate.js +0 -584
  3141. package/template/.trae/skills/drawio/scripts/postprocess/mutate.test.js +0 -193
  3142. package/template/.trae/skills/drawio/scripts/postprocess/projection.js +0 -178
  3143. package/template/.trae/skills/drawio/scripts/postprocess/projection.test.js +0 -67
  3144. package/template/.trae/skills/drawio/scripts/runtime/artifacts.js +0 -283
  3145. package/template/.trae/skills/drawio/scripts/runtime/desktop.js +0 -204
  3146. package/template/.trae/skills/drawio/scripts/runtime/desktop.test.js +0 -121
  3147. package/template/.trae/skills/drawio/scripts/runtime/diagrams-net-url.js +0 -122
  3148. package/template/.trae/skills/drawio/scripts/runtime/export-stability.js +0 -75
  3149. package/template/.trae/skills/drawio/scripts/runtime/export-stability.test.js +0 -81
  3150. package/template/.trae/skills/drawio/scripts/runtime/png-inspection.js +0 -157
  3151. package/template/.trae/skills/drawio/scripts/runtime/png-inspection.test.js +0 -120
  3152. package/template/.trae/skills/drawio/scripts/runtime/vision-preview.js +0 -77
  3153. package/template/.trae/skills/drawio/scripts/runtime/vision-preview.test.js +0 -103
  3154. package/template/.trae/skills/drawio/scripts/shared/ai-icon-contract.js +0 -13
  3155. package/template/.trae/skills/drawio/scripts/shared/xml-utils.js +0 -241
  3156. package/template/.trae/skills/drawio/scripts/svg/drawio-to-svg.js +0 -918
  3157. package/template/.trae/skills/drawio/scripts/svg/drawio-to-svg.test.js +0 -763
  3158. package/template/.trae/skills/drawio/scripts/tools/build-ai-icon-catalog.js +0 -208
  3159. package/template/.trae/skills/drawio/scripts/tools/build-ai-icon-catalog.test.js +0 -107
  3160. package/template/.trae/skills/drawio/scripts/tools/build-shape-catalog.js +0 -84
  3161. package/template/.trae/skills/drawio/scripts/tools/build-shape-catalog.test.js +0 -43
  3162. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha-color.svg +0 -1
  3163. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/alpha.svg +0 -1
  3164. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta-brand-color.svg +0 -1
  3165. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/beta.svg +0 -1
  3166. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai-text-color.svg +0 -1
  3167. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/icons/civitai.svg +0 -1
  3168. package/template/.trae/skills/drawio/scripts/tools/fixtures/ai-icons-package/package.json +0 -5
  3169. package/template/.trae/skills/drawio/scripts/vendor/elkjs/LICENSE.md +0 -264
  3170. package/template/.trae/skills/drawio/scripts/vendor/elkjs/README.md +0 -18
  3171. package/template/.trae/skills/drawio/scripts/vendor/elkjs/elk.bundled.cjs +0 -6589
  3172. package/template/.trae/skills/drawio/styles/built-in/corporate.json +0 -49
  3173. package/template/.trae/skills/drawio/styles/built-in/default.json +0 -49
  3174. package/template/.trae/skills/drawio/styles/built-in/handdrawn.json +0 -49
  3175. package/template/.trae/skills/drawio/styles/schema.json +0 -112
  3176. package/template/.trae/skills/drawio-academic-skills/CHANGELOG.md +0 -67
  3177. package/template/.trae/skills/drawio-academic-skills/README.md +0 -103
  3178. package/template/.trae/skills/drawio-academic-skills/README_CN.md +0 -103
  3179. package/template/.trae/skills/drawio-academic-skills/SKILL.md +0 -161
  3180. package/template/.trae/skills/drawio-academic-skills/__yss_dotfile__.gitignore +0 -12
  3181. package/template/.trae/skills/drawio-academic-skills/agents/interface.yaml +0 -25
  3182. package/template/.trae/skills/drawio-academic-skills/agents/openai.yaml +0 -24
  3183. package/template/.trae/skills/drawio-academic-skills/evals/README.md +0 -13
  3184. package/template/.trae/skills/drawio-academic-skills/evals/baseline-prompts.json +0 -52
  3185. package/template/.trae/skills/drawio-academic-skills/evals/darwin-results.tsv +0 -3
  3186. package/template/.trae/skills/drawio-academic-skills/evals/evals.json +0 -228
  3187. package/template/.trae/skills/drawio-academic-skills/evals/test-prompts.json +0 -17
  3188. package/template/.trae/skills/drawio-academic-skills/references/docs/academic-export-checklist.md +0 -45
  3189. package/template/.trae/skills/drawio-academic-skills/references/docs/academic-figure-playbook.md +0 -349
  3190. package/template/.trae/skills/drawio-academic-skills/references/docs/publication-overlay.md +0 -206
  3191. package/template/.trae/skills/drawio-academic-skills/references/examples/ablation-study-pipeline.yaml +0 -39
  3192. package/template/.trae/skills/drawio-academic-skills/references/examples/ieee-network-paper.yaml +0 -44
  3193. package/template/.trae/skills/drawio-academic-skills/references/examples/industrial-architecture-cn-paper.yaml +0 -106
  3194. package/template/.trae/skills/drawio-academic-skills/references/examples/max-pooling-operation-paper.yaml +0 -75
  3195. package/template/.trae/skills/drawio-academic-skills/references/examples/research-pipeline.yaml +0 -54
  3196. package/template/.trae/skills/drawio-academic-skills/references/examples/system-architecture-paper.yaml +0 -45
  3197. package/template/.trae/skills/drawio-academic-skills/references/examples/technical-roadmap-paper.yaml +0 -54
  3198. package/template/.trae/skills/drawio-academic-skills/references/examples/yolo-model-architecture-paper.yaml +0 -118
  3199. package/template/.trae/skills/drawio-academic-skills/references/templates/multi-module-system-compact.yaml +0 -251
  3200. package/template/.trae/skills/drawio-academic-skills/references/templates/neural-network-architecture-compact.yaml +0 -267
  3201. package/template/.trae/skills/excalidraw-diagram-generator/SKILL.md +0 -634
  3202. package/template/.trae/skills/excalidraw-diagram-generator/references/element-types.md +0 -497
  3203. package/template/.trae/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +0 -350
  3204. package/template/.trae/skills/excalidraw-diagram-generator/scripts/README.md +0 -193
  3205. package/template/.trae/skills/excalidraw-diagram-generator/scripts/__yss_dotfile__.gitignore +0 -34
  3206. package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-arrow.py +0 -315
  3207. package/template/.trae/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +0 -406
  3208. package/template/.trae/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +0 -183
  3209. package/template/.trae/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +0 -334
  3210. package/template/.trae/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +0 -558
  3211. package/template/.trae/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +0 -279
  3212. package/template/.trae/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +0 -662
  3213. package/template/.trae/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +0 -179
  3214. package/template/.trae/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +0 -244
  3215. package/template/.trae/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +0 -145
  3216. package/template/.trae/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +0 -509
  3217. package/template/.trae/skills/kb-retriever/README.md +0 -197
  3218. package/template/.trae/skills/kb-retriever/README.zh-CN.md +0 -197
  3219. package/template/.trae/skills/kb-retriever/SKILL.md +0 -250
  3220. package/template/.trae/skills/kb-retriever/manifest.json +0 -15
  3221. package/template/.trae/skills/kb-retriever/references/excel_analysis.md +0 -129
  3222. package/template/.trae/skills/kb-retriever/references/excel_reading.md +0 -72
  3223. package/template/.trae/skills/kb-retriever/references/pdf_reading.md +0 -362
  3224. package/template/.trae/skills/kb-retriever/scripts/convert_pdf_to_images.py +0 -35
  3225. package/template/.trae/skills/yss-db2mybatis/requirements.txt +0 -4
  3226. package/template/.trae/skills/yss-db2mybatis/scripts/db2mybatis.py +0 -1494
  3227. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.py +0 -728
  3228. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.py +0 -155
  3229. package/template/.trae/skills/yss-design-system/scripts/validate-frontmatter.py +0 -50
  3230. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.py +0 -371
  3231. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.py +0 -293
  3232. package/template/.trae/skills/yss-web-controller/scripts/test_generate_controller.py +0 -68
  3233. package/template/docs/adr/0004-split-lifecycle-and-router-registry-domains.md +0 -5
  3234. package/template/docs/adr/0005-cross-repository-ecosystem-release-manifest.md +0 -5
  3235. package/template/docs/adr/0007-separate-skill-routing-registry-from-integrity-lock.md +0 -5
  3236. package/template/docs/implementation/create-yss-spec-repository-mode-contract.md +0 -90
  3237. package/template/docs/process/harness-optimization-backlog.md +0 -9
  3238. package/template/docs/process/harness-work-unit-map.md +0 -16
  3239. package/template/docs/releases/next-major-template-governance.md +0 -32
  3240. package/template/docs/reviews/lifecycle-registry-phase0-1-red-green-2026-08-17.md +0 -61
  3241. package/template/docs/reviews/matt-yss-p0-ticket-review-git-red-green-2026-08-17.md +0 -91
  3242. package/template/docs/reviews/openapi-skill-primary-source-research-2026-08-16.md +0 -76
  3243. package/template/docs/reviews/openapi-yaml-first-independent-review-2026-08-16.md +0 -121
  3244. package/template/docs/reviews/openapi-yaml-first-pressure-scenarios-2026-08-16.md +0 -191
  3245. package/template/docs/reviews/openapi-yaml-first-red-green-2026-08-16.md +0 -76
  3246. package/template/docs/reviews/openapi-yaml-json-output-independent-review-2026-08-16.md +0 -30
  3247. package/template/docs/reviews/openapi-yaml-json-output-scope-red-green-2026-08-16.md +0 -154
  3248. package/template/docs/reviews/research-create-yss-spec-2026-08-10.md +0 -141
  3249. package/template/docs/reviews/research-create-yss-spec-refresh-2026-08-16.md +0 -164
  3250. package/template/docs/reviews/security-permission-lifecycle-simplification-red-green-2026-08-16.md +0 -43
  3251. package/template/docs/reviews/template-release-review-remediation-red-green-2026-08-17.md +0 -41
  3252. package/template/docs/reviews/yss-local-tracker-red-green-2026-08-10.md +0 -50
  3253. package/template/docs/user-guide//345/233/276/347/244/272/347/224/237/346/210/220/345/231/250/344/275/277/347/224/250/346/214/207/345/215/227.md +0 -143
  3254. package/template/scripts/implementation-path-policy.rb +0 -50
  3255. package/template/scripts/lifecycle-registry.rb +0 -194
  3256. package/template/scripts/test-export-yss-skills.rb +0 -132
  3257. package/template/scripts/test-lifecycle-registry.rb +0 -74
@@ -1,3739 +0,0 @@
1
- /**
2
- * spec-to-drawio.js
3
- * Converts YAML/JSON specification to draw.io XML with Design System support
4
- */
5
-
6
- import { isLikelyStandaloneMathLabel, prepareMathLabel } from '../math/index.js'
7
- import { normalizeIdentity } from '../adapters/identity.js'
8
- import { resolveImageIconStyle } from './icon-resolver.js'
9
- import { resolveShapeNameKind } from './shape-catalog.js'
10
- import { resolveIconShape } from './icon-mappings.js'
11
- import { searchShapeCatalog } from './catalog-search.js'
12
- import { searchAiIcons } from './ai-icon-catalog.js'
13
- import { applyPalette, loadPalette, paletteTokenIndex, resolvePaletteToken } from './palette.js'
14
- import { validatePaletteUsage } from './palette-validate.js'
15
- import yaml from 'js-yaml'
16
- import { readFileSync } from 'node:fs'
17
- import { resolve, dirname } from 'node:path'
18
- import { fileURLToPath } from 'node:url'
19
- import { escapeXml } from '../shared/xml-utils.js'
20
-
21
- // ============================================================================
22
- // Theme Loading
23
- // ============================================================================
24
-
25
- const __filename = fileURLToPath(import.meta.url)
26
- const __dirname = dirname(__filename)
27
- const THEMES_DIR = resolve(__dirname, '../../assets/themes')
28
-
29
- let DEFAULT_THEME
30
- try {
31
- DEFAULT_THEME = JSON.parse(readFileSync(resolve(THEMES_DIR, 'tech-blue.json'), 'utf-8'))
32
- } catch {
33
- DEFAULT_THEME = {
34
- name: 'tech-blue',
35
- colors: {
36
- primary: '#2563EB',
37
- primaryLight: '#DBEAFE',
38
- secondary: '#059669',
39
- secondaryLight: '#D1FAE5',
40
- accent: '#7C3AED',
41
- accentLight: '#EDE9FE',
42
- background: '#FFFFFF',
43
- surface: '#F8FAFC',
44
- text: '#1E293B',
45
- textMuted: '#64748B',
46
- border: '#E2E8F0'
47
- },
48
- spacing: { unit: 8 },
49
- typography: {
50
- fontFamily: {
51
- primary: 'Inter, Roboto, system-ui, sans-serif',
52
- monospace: 'JetBrains Mono, Fira Code, Consolas, monospace'
53
- },
54
- fontSize: { md: 20, sm: 18 }
55
- },
56
- borderRadius: { md: 8, lg: 12 },
57
- node: {
58
- default: {
59
- fillColor: '#DBEAFE',
60
- strokeColor: '#2563EB',
61
- strokeWidth: 1.5,
62
- fontColor: '#1E293B',
63
- fontSize: 20,
64
- rounded: 8
65
- },
66
- service: { fillColor: '#DBEAFE', strokeColor: '#2563EB' },
67
- database: { fillColor: '#D1FAE5', strokeColor: '#059669' },
68
- decision: { fillColor: '#FEF3C7', strokeColor: '#D97706' },
69
- terminal: { fillColor: '#F1F5F9', strokeColor: '#64748B' },
70
- queue: { fillColor: '#EDE9FE', strokeColor: '#7C3AED' },
71
- user: { fillColor: '#E0F2FE', strokeColor: '#0284C7' },
72
- document: { fillColor: '#FFFFFF', strokeColor: '#CBD5E1' },
73
- formula: { fillColor: '#FFFFFF', strokeColor: '#2563EB', strokeWidth: 1 },
74
- input: { fillColor: '#FFCDD2', strokeColor: '#E57373' },
75
- output: { fillColor: '#CFD8DC', strokeColor: '#78909C' },
76
- loss: { fillColor: '#FFCCBC', strokeColor: '#FF7043' },
77
- feature: { fillColor: '#BBDEFB', strokeColor: '#42A5F5' },
78
- conv: { fillColor: '#BBDEFB', strokeColor: '#1E88E5' },
79
- pool: { fillColor: '#B3E5FC', strokeColor: '#039BE5' },
80
- embed: { fillColor: '#D1C4E9', strokeColor: '#7E57C2' },
81
- temporal: { fillColor: '#E1BEE7', strokeColor: '#AB47BC' },
82
- attention: { fillColor: '#C8E6C9', strokeColor: '#66BB6A' },
83
- gate: { fillColor: '#FFE0B2', strokeColor: '#FFA726' },
84
- norm: { fillColor: '#DCEDC8', strokeColor: '#8BC34A' },
85
- graph: { fillColor: '#B2EBF2', strokeColor: '#26C6DA' },
86
- matrix: { fillColor: '#E8EAF6', strokeColor: '#7986CB' },
87
- operator: { fillColor: '#FFFFFF', strokeColor: '#424242' },
88
- llm: { fillColor: '#EDE9FE', strokeColor: '#7C3AED' },
89
- agent: { fillColor: '#DBEAFE', strokeColor: '#2563EB' },
90
- vector_store: { fillColor: '#D1FAE5', strokeColor: '#059669' },
91
- memory: { fillColor: '#FEF9C3', strokeColor: '#CA8A04' },
92
- tool: { fillColor: '#F1F5F9', strokeColor: '#475569' },
93
- gateway: { fillColor: '#FFEDD5', strokeColor: '#EA580C' }
94
- },
95
- connector: {
96
- primary: { strokeColor: '#1E293B', strokeWidth: 2, dashed: false, endArrow: 'open', endFill: false },
97
- data: {
98
- strokeColor: '#1E293B',
99
- strokeWidth: 2,
100
- dashed: true,
101
- dashPattern: '6 4',
102
- endArrow: 'open',
103
- endFill: false
104
- },
105
- optional: {
106
- strokeColor: '#64748B',
107
- strokeWidth: 1,
108
- dashed: true,
109
- dashPattern: '2 2',
110
- endArrow: 'open',
111
- endFill: false
112
- },
113
- dependency: { strokeColor: '#1E293B', strokeWidth: 1, dashed: false, endArrow: 'diamond', endFill: true },
114
- bidirectional: { strokeColor: '#64748B', strokeWidth: 1.5, dashed: false, endArrow: 'none', endFill: false },
115
- control: { strokeColor: '#EA580C', strokeWidth: 1.5, dashed: false, endArrow: 'open', endFill: false },
116
- memory_read: { strokeColor: '#059669', strokeWidth: 1.5, dashed: false, endArrow: 'open', endFill: false },
117
- memory_write: {
118
- strokeColor: '#059669',
119
- strokeWidth: 1.5,
120
- dashed: true,
121
- dashPattern: '5 3',
122
- endArrow: 'open',
123
- endFill: false
124
- },
125
- async: {
126
- strokeColor: '#6B7280',
127
- strokeWidth: 1.5,
128
- dashed: true,
129
- dashPattern: '4 2',
130
- endArrow: 'open',
131
- endFill: false
132
- },
133
- feedback: { strokeColor: '#7C3AED', strokeWidth: 1.5, dashed: false, endArrow: 'open', endFill: false }
134
- },
135
- module: {
136
- fillColor: '#F8FAFC',
137
- strokeColor: '#E2E8F0',
138
- strokeWidth: 1,
139
- rounded: 12,
140
- padding: 24,
141
- labelFontSize: 14,
142
- labelFontWeight: 600,
143
- labelFontColor: '#1E293B',
144
- dashed: false,
145
- dashPattern: '8 4'
146
- },
147
- canvas: {
148
- background: '#FFFFFF',
149
- gridSize: 8
150
- }
151
- }
152
- }
153
-
154
- const _themeCache = new Map()
155
-
156
- /**
157
- * Load theme by name (returns default if not found)
158
- */
159
- export function loadTheme(themeName) {
160
- if (!themeName || themeName === 'tech-blue') return DEFAULT_THEME
161
- if (_themeCache.has(themeName)) return _themeCache.get(themeName)
162
-
163
- // Security: reject invalid theme names (path traversal prevention)
164
- if (!/^[a-z][a-z0-9-]*$/.test(themeName)) {
165
- console.warn(`[loadTheme] Invalid theme name '${themeName}'. Falling back to default.`)
166
- return DEFAULT_THEME
167
- }
168
-
169
- try {
170
- const themePath = resolve(THEMES_DIR, `${themeName}.json`)
171
- // Security: verify resolved path stays within THEMES_DIR
172
- if (!themePath.startsWith(THEMES_DIR)) {
173
- console.warn(`[loadTheme] Theme path escapes themes directory. Falling back to default.`)
174
- return DEFAULT_THEME
175
- }
176
- const raw = readFileSync(themePath, 'utf8')
177
- const theme = JSON.parse(raw)
178
- _themeCache.set(themeName, theme)
179
- return theme
180
- } catch (err) {
181
- console.warn(`[loadTheme] Could not load theme '${themeName}': ${err.message}. Falling back to default.`)
182
- return DEFAULT_THEME
183
- }
184
- }
185
-
186
- // ============================================================================
187
- // Semantic Shape Mapping
188
- // ============================================================================
189
-
190
- const SHAPE_KEYWORDS = {
191
- // Network topology
192
- router: ['router', 'core router', 'edge router', 'gateway router'],
193
- switch: ['core switch', 'distribution switch', 'access switch'],
194
- firewall: ['firewall', 'fw', 'security gateway', 'ngfw'],
195
- server: ['server', 'app server', 'web server', 'host', 'vm server'],
196
- load_balancer: ['load balancer', 'lb', 'alb', 'nlb', 'reverse proxy'],
197
- subnet: ['subnet', 'cidr', 'segment', 'lan segment', 'network segment'],
198
- internet: ['internet', 'wan', 'isp', 'public network'],
199
- ap: ['wireless ap', 'access point', 'wifi ap', 'wap'],
200
-
201
- // Traditional types (check first for backward compatibility)
202
- database: ['database', 'db', 'sql', 'storage', 'redis', 'mongo', 'postgresql', 'mysql', 'cache'],
203
- decision: ['decision', 'condition', 'branch', 'switch', 'route'],
204
- terminal: ['start', 'begin', 'end', 'finish', 'stop', 'terminate'],
205
- queue: ['queue', 'buffer', 'kafka', 'rabbitmq', 'stream', 'sqs', 'message'],
206
- user: ['user', 'user icon', 'client', 'person', 'customer', 'human'],
207
- document: ['document', 'doc', 'file', 'report', 'log'],
208
- formula: ['formula', 'equation', 'math', '$$'],
209
- text: ['standalone text', 'annotation', 'caption', 'legend note', 'title text'],
210
- cloud: ['cloud', 'internet', 'external', 'web'],
211
-
212
- // Deep learning - Input/Output
213
- input: ['input_', 'input layer', 'inputdata', 'x_train', 'x_test', 'sample batch', 'input data', 'input signal'],
214
- output: ['output_', 'output layer', 'prediction', 'y_hat', 'logits', 'probs', 'output data', 'reconstructed'],
215
- loss: ['loss', 'criterion', 'objective', 'mse loss', 'cross_entropy', 'bceloss', 'loss function', 'error'],
216
-
217
- // Deep learning - Feature extraction & Encoding/Decoding
218
- feature: ['feature extractor', 'backbone', 'encoder block', 'feature extraction'],
219
- conv: ['conv1d', 'conv2d', 'conv3d', 'convolution', 'convolutional', 'tcn', '1d conv', '2d conv', '3d conv'],
220
- pool: ['pooling', 'maxpool', 'avgpool', 'adaptive pool', 'max pooling', 'avg pooling', 'global pool'],
221
- embed: ['embedding', 'embeddings', 'lookup', 'token embed', 'word embed', 'positional'],
222
-
223
- // Deep learning - Decoder (separate from encoder for different colors if needed)
224
- // Using feature type for decoder as it's semantically similar
225
-
226
- // Deep learning - Temporal/Sequential
227
- temporal: ['lstm', 'rnn', 'gru', 'temporal', 'recurrent', 'sequence', 'seq2seq', 'bilstm', 'bigru', 'hidden state'],
228
-
229
- // Deep learning - Attention & Transformer
230
- attention: [
231
- 'attention',
232
- 'attn',
233
- 'softmax',
234
- 'transformer',
235
- 'self-attention',
236
- 'multi-head',
237
- 'mha',
238
- 'cross-attention',
239
- 'qkv'
240
- ],
241
-
242
- // Deep learning - Normalization & Regularization
243
- norm: ['batchnorm', 'layernorm', 'groupnorm', 'instancenorm', 'normalization', 'batch norm', 'layer norm', 'dropout'],
244
-
245
- // Deep learning - Gate & Activation
246
- gate: [
247
- 'gating',
248
- 'gate mechanism',
249
- 'multiply gate',
250
- 'sigmoid gate',
251
- 'tanh gate',
252
- 'forget gate',
253
- 'input gate',
254
- 'output gate'
255
- ],
256
-
257
- // Deep learning - Graph Neural Network
258
- graph: [
259
- 'graph conv',
260
- 'gcn',
261
- 'gnn',
262
- 'graph attention',
263
- 'adjacency',
264
- 'node feature',
265
- 'edge feature',
266
- 'message passing',
267
- 'aggregation'
268
- ],
269
-
270
- // Deep learning - Matrix operations & Linear layers
271
- matrix: [
272
- 'matmul',
273
- 'linear layer',
274
- 'fc layer',
275
- 'dense layer',
276
- 'mlp',
277
- 'weight matrix',
278
- 'fully connected',
279
- 'projection'
280
- ],
281
-
282
- // Deep learning - Operators (for small circular nodes)
283
- operator: ['⊕', '⊗', '⊙', 'concat', 'element-wise', 'hadamard', 'residual add', 'skip add', '⊞'],
284
-
285
- // Deep learning - 3D Feature Maps / Tensors (for CNN visualizations)
286
- tensor3d: [
287
- 'tensor',
288
- 'feature map',
289
- '3d feature',
290
- 'activation map',
291
- 'channel',
292
- 'h×w×c',
293
- 'hwc',
294
- 'chw',
295
- 'nchw',
296
- 'nhwc',
297
- 'cube',
298
- '3d block',
299
- 'volume'
300
- ]
301
- }
302
-
303
- export const SHAPE_STYLES = {
304
- // Traditional shapes
305
- service: 'rounded=1;arcSize=20',
306
- database: 'shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=15',
307
- decision: 'rhombus',
308
- terminal: 'rounded=1;arcSize=50',
309
- queue: 'shape=parallelogram;perimeter=parallelogramPerimeter;fixedSize=1',
310
- user: 'ellipse',
311
- document: 'shape=document;boundedLbl=1',
312
- formula: 'rounded=1',
313
- text: 'text',
314
- cloud: 'ellipse;shape=cloud',
315
- process: 'rounded=1;arcSize=20',
316
- router: 'ellipse',
317
- switch: 'shape=switch',
318
- firewall: 'shape=mxgraph.cisco.security.firewall;sketch=0',
319
- server: 'rounded=1;arcSize=12',
320
- load_balancer: 'shape=hexagon;perimeter=hexagonPerimeter2',
321
- subnet: 'swimlane;startSize=24',
322
- internet: 'ellipse;shape=cloud',
323
- ap: 'shape=mxgraph.cisco.misc.access_point;sketch=0',
324
-
325
- // Deep learning shapes
326
- input: 'rounded=1;arcSize=15',
327
- output: 'rounded=1;arcSize=15',
328
- loss: 'rounded=1;arcSize=15',
329
- feature: 'rounded=1;arcSize=15',
330
- conv: 'rounded=1;arcSize=10',
331
- pool: 'rounded=1;arcSize=10',
332
- embed: 'rounded=1;arcSize=15',
333
- temporal: 'rounded=1;arcSize=15',
334
- attention: 'rounded=1;arcSize=15',
335
- gate: 'rounded=1;arcSize=10',
336
- norm: 'rounded=1;arcSize=10',
337
- graph: 'rounded=1;arcSize=15',
338
- matrix: 'rounded=1;arcSize=5',
339
- operator: 'ellipse',
340
- tensor3d: 'shape=cube;size=10;direction=south',
341
-
342
- // Agentic / LLM system shapes (fireworks vocabulary) -- reuse existing
343
- // primitives, distinguished by theme color; no new drawing code paths.
344
- llm: 'rounded=1;arcSize=20',
345
- agent: 'shape=hexagon;perimeter=hexagonPerimeter2',
346
- vector_store: 'shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=15',
347
- memory: 'rounded=1;arcSize=20;dashed=1',
348
- tool: 'rounded=1;arcSize=20',
349
- gateway: 'shape=hexagon;perimeter=hexagonPerimeter2'
350
- }
351
-
352
- /**
353
- * Detect semantic type from label if not explicitly specified
354
- */
355
- export function detectSemanticType(label, explicitType, network = null) {
356
- if (explicitType && SHAPE_STYLES[explicitType]) {
357
- return explicitType
358
- }
359
-
360
- if (network?.device && SHAPE_STYLES[network.device]) {
361
- return network.device
362
- }
363
-
364
- const lowerLabel = label.toLowerCase()
365
-
366
- // Check for officially supported math delimiters first (highest priority)
367
- if (label.includes('$$') || label.includes('\\(') || /`[^`]+`/.test(label)) {
368
- return 'formula'
369
- }
370
-
371
- // Detect unlabeled standalone equations so they receive formula styling too.
372
- if (isLikelyStandaloneMathLabel(label)) {
373
- return 'formula'
374
- }
375
-
376
- // Check for decision patterns: questions ending with ? or containing check/if
377
- if (label.includes('?') || /\b(check|if|valid)\b/i.test(label)) {
378
- return 'decision'
379
- }
380
-
381
- // Check keywords by type
382
- for (const [type, keywords] of Object.entries(SHAPE_KEYWORDS)) {
383
- if (keywords.some((kw) => lowerLabel.includes(kw))) {
384
- return type
385
- }
386
- }
387
-
388
- return 'service' // Default
389
- }
390
-
391
- // ============================================================================
392
- // Size Presets
393
- // ============================================================================
394
-
395
- // Font-size ladder: create-flow defaults per text class. Labels should fill
396
- // their boxes (paper-readable) instead of floating in oversized containers.
397
- // Explicit style.fontSize always wins; explicit-bounds boxes (replicate flow)
398
- // shrink a class uniformly, never below FONT_SIZE_FLOOR.
399
- export const FONT_LADDER = {
400
- moduleTitle: 22,
401
- node: 20,
402
- edgeLabel: 18,
403
- text: 16
404
- }
405
- export const FONT_SIZE_FLOOR = 12
406
-
407
- // Shapes whose size encodes meaning (operators, 3D tensors) or whose label is
408
- // not plain text (formula) keep preset sizes instead of growing with content.
409
- const CONTENT_SIZE_EXEMPT_TYPES = new Set(['operator', 'tensor3d', 'formula'])
410
-
411
- const SIZE_PRESETS = {
412
- tiny: { width: 32, height: 32 }, // For operators (⊕⊗)
413
- small: { width: 80, height: 40 },
414
- medium: { width: 120, height: 60 },
415
- large: { width: 160, height: 80 },
416
- xl: { width: 200, height: 100 },
417
- // 3D Feature Map sizes (cube-like proportions)
418
- tensor_sm: { width: 40, height: 48 }, // Small feature map
419
- tensor_md: { width: 60, height: 72 }, // Medium feature map
420
- tensor_lg: { width: 80, height: 96 }, // Large feature map
421
- tensor_xl: { width: 100, height: 120 } // Extra large feature map
422
- }
423
-
424
- // Default sizes for specific node types
425
- const TYPE_DEFAULT_SIZES = {
426
- operator: 'tiny',
427
- decision: 'medium',
428
- terminal: 'small',
429
- user: 'small',
430
- text: 'medium',
431
- router: 'small',
432
- switch: 'small',
433
- firewall: 'small',
434
- server: 'medium',
435
- load_balancer: 'medium',
436
- subnet: 'large',
437
- internet: 'small',
438
- ap: 'small',
439
- tensor3d: 'tensor_md'
440
- }
441
-
442
- /**
443
- * Estimate a content-fitted size for a standalone text node so the box hugs the
444
- * text instead of stretching to a container width. Oversized text boxes overlap
445
- * neighbors and are hard to select and move, so we keep the box just wider than
446
- * the longest line. Latin glyphs are roughly 0.6em wide and CJK glyphs roughly
447
- * 1.05em; width adds horizontal padding and is clamped so an unusually long
448
- * label wraps via whiteSpace=wrap instead of overflowing the canvas.
449
- */
450
- function estimateTextSize(label, fontSize = FONT_LADDER.text) {
451
- const lines = String(label).split(/\n|<br\s*\/?>/i)
452
- let maxLineWidth = 0
453
- for (const line of lines) {
454
- let lineWidth = 0
455
- for (const ch of line) {
456
- lineWidth += /[\u3000-\u9fff\uff00-\uffef]/.test(ch) ? fontSize * 1.05 : fontSize * 0.6
457
- }
458
- maxLineWidth = Math.max(maxLineWidth, lineWidth)
459
- }
460
- const width = Math.min(Math.max(Math.ceil(maxLineWidth) + 20, 48), 320)
461
- const height = Math.max(Math.ceil(lines.length * fontSize * 1.4) + 12, 24)
462
- return { width, height }
463
- }
464
-
465
- /**
466
- * Raw text extent without the usability floors of estimateTextSize. Used by
467
- * lint passes that compare declared bounds or label boxes against content.
468
- */
469
- function measureLabelExtent(label, fontSize = FONT_LADDER.text, padding = 8) {
470
- const lines = String(label).split(/\n|<br\s*\/?>/i)
471
- let maxLineWidth = 0
472
- for (const line of lines) {
473
- let lineWidth = 0
474
- for (const ch of line) {
475
- lineWidth += /[\u3000-\u9fff\uff00-\uffef]/.test(ch) ? fontSize * 1.05 : fontSize * 0.6
476
- }
477
- maxLineWidth = Math.max(maxLineWidth, lineWidth)
478
- }
479
- return {
480
- width: Math.ceil(maxLineWidth) + padding,
481
- height: Math.ceil(lines.length * fontSize * 1.4) + padding
482
- }
483
- }
484
-
485
- /**
486
- * Get node dimensions based on size preset or node type
487
- */
488
- export function getNodeSize(size, nodeType = null, label = null, options = null) {
489
- // Text nodes without an explicit size fit their content so the box stays just
490
- // wider than the text and remains easy to select, move, and transform.
491
- if (!(size && SIZE_PRESETS[size]) && nodeType === 'text' && label) {
492
- return estimateTextSize(label, options?.fontSize ?? FONT_LADDER.text)
493
- }
494
-
495
- const preset =
496
- size && SIZE_PRESETS[size]
497
- ? SIZE_PRESETS[size]
498
- : nodeType && TYPE_DEFAULT_SIZES[nodeType]
499
- ? SIZE_PRESETS[TYPE_DEFAULT_SIZES[nodeType]]
500
- : SIZE_PRESETS.medium
501
-
502
- // Presets act as minimums once a label is present: the box grows so the
503
- // label never paints outside the shape. Icon labels render below the shape,
504
- // and size-coded shapes (operators, tensors, formulas) keep their preset.
505
- if (
506
- options?.contentAware &&
507
- label &&
508
- nodeType !== 'text' &&
509
- !CONTENT_SIZE_EXEMPT_TYPES.has(nodeType) &&
510
- !hasMathMarkers(label)
511
- ) {
512
- const extent = measureLabelExtent(label, options.fontSize ?? FONT_LADDER.node, 0)
513
- const snapUp = (value) => Math.ceil(value / 8) * 8
514
- return {
515
- width: Math.max(preset.width, snapUp(extent.width + 28)),
516
- height: Math.max(preset.height, snapUp(extent.height + 20))
517
- }
518
- }
519
-
520
- return preset
521
- }
522
-
523
- // ============================================================================
524
- // Grid Snapping
525
- // ============================================================================
526
-
527
- /**
528
- * Snap value to 8px grid
529
- */
530
- export function snapToGrid(value, gridSize = 8) {
531
- return Math.round(value / gridSize) * gridSize
532
- }
533
-
534
- function isFiniteNumber(value) {
535
- return typeof value === 'number' && Number.isFinite(value)
536
- }
537
-
538
- function parseCanvasSize(canvas) {
539
- if (canvas == null || canvas === 'auto') return null
540
- if (typeof canvas !== 'string') {
541
- throw new Error('Invalid meta.canvas: use "auto" or WIDTHxHEIGHT')
542
- }
543
-
544
- const match = /^(\d+)x(\d+)$/.exec(canvas)
545
- if (!match) {
546
- throw new Error(`Invalid meta.canvas "${canvas}": use "auto" or WIDTHxHEIGHT`)
547
- }
548
-
549
- const width = Number(match[1])
550
- const height = Number(match[2])
551
- if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || width <= 0 || height <= 0) {
552
- throw new Error(`Invalid meta.canvas "${canvas}": width and height must be positive integers`)
553
- }
554
-
555
- return { width, height }
556
- }
557
-
558
- function resolveCanvasSize(canvas, autoWidth, autoHeight) {
559
- const explicit = parseCanvasSize(canvas)
560
- if (!explicit) return { width: autoWidth, height: autoHeight }
561
- return {
562
- width: Math.max(autoWidth, explicit.width),
563
- height: Math.max(autoHeight, explicit.height)
564
- }
565
- }
566
-
567
- function normalizeNodeBounds(node) {
568
- const bounds = node?.bounds
569
- if (!bounds) return null
570
- if (
571
- !isFiniteNumber(bounds.x) ||
572
- !isFiniteNumber(bounds.y) ||
573
- !isFiniteNumber(bounds.width) ||
574
- !isFiniteNumber(bounds.height)
575
- ) {
576
- return null
577
- }
578
- return {
579
- x: bounds.x,
580
- y: bounds.y,
581
- width: bounds.width,
582
- height: bounds.height
583
- }
584
- }
585
-
586
- // ============================================================================
587
- // Layout Engine
588
- // ============================================================================
589
-
590
- // North-South tiers for layout: tiered — external systems on top, endpoints at
591
- // the bottom. Explicit node.network.tier wins, then role, then semantic type.
592
- const NETWORK_ROLE_TIERS = {
593
- internet: 0,
594
- wan: 0,
595
- isp: 0,
596
- external: 0,
597
- firewall: 1,
598
- dmz: 1,
599
- router: 1,
600
- core: 2,
601
- distribution: 3,
602
- aggregation: 3,
603
- access: 4,
604
- switch: 4,
605
- wireless: 4,
606
- server: 5,
607
- endpoint: 5,
608
- host: 5,
609
- storage: 5,
610
- database: 5
611
- }
612
-
613
- const NETWORK_TYPE_TIERS = {
614
- cloud: 0,
615
- internet: 0,
616
- firewall: 1,
617
- router: 1,
618
- load_balancer: 2,
619
- switch: 4,
620
- server: 5,
621
- database: 5,
622
- storage: 5,
623
- user: 5,
624
- terminal: 5
625
- }
626
-
627
- function resolveNetworkTier(node) {
628
- const explicit = node.network?.tier
629
- if (typeof explicit === 'number' && Number.isFinite(explicit)) return explicit
630
- const role = typeof node.network?.role === 'string' ? node.network.role.toLowerCase() : null
631
- if (role && NETWORK_ROLE_TIERS[role] !== undefined) return NETWORK_ROLE_TIERS[role]
632
- const semanticType = detectSemanticType(node.label, node.type, node.network)
633
- if (NETWORK_TYPE_TIERS[semanticType] !== undefined) return NETWORK_TYPE_TIERS[semanticType]
634
- return 2.5
635
- }
636
-
637
- /**
638
- * Calculate positions for nodes based on layout type
639
- */
640
- export function calculateLayout(spec, theme) {
641
- const layout = spec.meta?.layout || 'horizontal'
642
- const normalizedLayout = layout === 'star' || layout === 'mesh' ? 'hierarchical' : layout
643
- const gridSize = theme.canvas?.gridSize || 8
644
- const nodeMargin = 32 // Minimum space between nodes
645
- const containerPadding = theme.module?.padding || 24
646
- const moduleHeaderHeight = 40
647
-
648
- const nodes = spec.nodes || []
649
- const modules = spec.modules || []
650
- const positions = new Map()
651
-
652
- const sizeOptions = (node) => ({
653
- fontSize: node.style?.fontSize,
654
- contentAware: !(node.icon || deriveNodeIcon(node))
655
- })
656
-
657
- const placeNode = (node, x, y) => {
658
- const semanticType = detectSemanticType(node.label, node.type, node.network)
659
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
660
- positions.set(node.id, {
661
- x: snapToGrid(x, gridSize),
662
- y: snapToGrid(y, gridSize),
663
- width: size.width,
664
- height: size.height
665
- })
666
- return size
667
- }
668
-
669
- const getNodeMetrics = (node) => {
670
- const semanticType = detectSemanticType(node.label, node.type, node.network)
671
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
672
- return { semanticType, size }
673
- }
674
-
675
- // Handle manually positioned nodes first
676
- const manuallyPositioned = new Set()
677
- for (const node of nodes) {
678
- const explicitBounds = normalizeNodeBounds(node)
679
- if (explicitBounds) {
680
- positions.set(node.id, explicitBounds)
681
- manuallyPositioned.add(node.id)
682
- } else if (node.position && typeof node.position.x === 'number' && typeof node.position.y === 'number') {
683
- const semanticType = detectSemanticType(node.label, node.type, node.network)
684
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
685
- positions.set(node.id, {
686
- x: snapToGrid(node.position.x - size.width / 2, gridSize),
687
- y: snapToGrid(node.position.y - size.height / 2, gridSize),
688
- width: size.width,
689
- height: size.height
690
- })
691
- manuallyPositioned.add(node.id)
692
- }
693
- }
694
-
695
- // Group nodes by module
696
- const moduleGroups = new Map()
697
- moduleGroups.set('__default__', [])
698
-
699
- for (const mod of modules) {
700
- moduleGroups.set(mod.id, [])
701
- }
702
-
703
- for (const node of nodes) {
704
- const moduleId = node.module || '__default__'
705
- if (!moduleGroups.has(moduleId)) {
706
- moduleGroups.set(moduleId, [])
707
- }
708
- moduleGroups.get(moduleId).push(node)
709
- }
710
-
711
- let currentX = 40
712
- let currentY = 40
713
-
714
- if (normalizedLayout === 'horizontal') {
715
- // Horizontal: modules side by side, nodes stacked vertically
716
- for (const [moduleId, moduleNodes] of moduleGroups) {
717
- if (moduleNodes.length === 0) continue
718
-
719
- const moduleX = snapToGrid(currentX, gridSize)
720
- const moduleY = snapToGrid(40, gridSize)
721
- let maxWidth = 0
722
- let nodeY = moduleY + containerPadding + moduleHeaderHeight
723
-
724
- for (const node of moduleNodes) {
725
- if (manuallyPositioned.has(node.id)) continue
726
- const semanticType = detectSemanticType(node.label, node.type, node.network)
727
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
728
- const nodeX = snapToGrid(moduleX + containerPadding, gridSize)
729
- positions.set(node.id, {
730
- x: nodeX,
731
- y: snapToGrid(nodeY, gridSize),
732
- width: size.width,
733
- height: size.height
734
- })
735
- maxWidth = Math.max(maxWidth, size.width)
736
- nodeY += size.height + nodeMargin
737
- }
738
-
739
- currentX += maxWidth + containerPadding * 2 + nodeMargin
740
- }
741
- } else if (normalizedLayout === 'vertical') {
742
- // Vertical: modules stacked, nodes side by side
743
- for (const [moduleId, moduleNodes] of moduleGroups) {
744
- if (moduleNodes.length === 0) continue
745
-
746
- const moduleX = snapToGrid(40, gridSize)
747
- const moduleY = snapToGrid(currentY, gridSize)
748
- let nodeX = moduleX + containerPadding
749
- let maxHeight = 0
750
-
751
- for (const node of moduleNodes) {
752
- if (manuallyPositioned.has(node.id)) continue
753
- const semanticType = detectSemanticType(node.label, node.type, node.network)
754
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
755
- positions.set(node.id, {
756
- x: snapToGrid(nodeX, gridSize),
757
- y: snapToGrid(moduleY + containerPadding + moduleHeaderHeight, gridSize),
758
- width: size.width,
759
- height: size.height
760
- })
761
- maxHeight = Math.max(maxHeight, size.height)
762
- nodeX += size.width + nodeMargin
763
- }
764
-
765
- currentY += maxHeight + containerPadding * 2 + moduleHeaderHeight + nodeMargin
766
- }
767
- } else if (layout === 'star') {
768
- const autoNodes = nodes.filter((node) => !manuallyPositioned.has(node.id))
769
- if (autoNodes.length > 0) {
770
- const centerNode =
771
- autoNodes.find((node) => {
772
- const type = detectSemanticType(node.label, node.type, node.network)
773
- return ['router', 'switch', 'load_balancer', 'firewall'].includes(type)
774
- }) || autoNodes[0]
775
-
776
- const centerX = 360
777
- const centerY = 180
778
- placeNode(centerNode, centerX, centerY)
779
-
780
- const spokes = autoNodes.filter((node) => node.id !== centerNode.id)
781
- const radiusX = 220
782
- const radiusY = 140
783
- spokes.forEach((node, index) => {
784
- const angle = (Math.PI * 2 * index) / Math.max(spokes.length, 1) - Math.PI / 2
785
- const { size } = getNodeMetrics(node)
786
- placeNode(
787
- node,
788
- centerX + Math.cos(angle) * radiusX - size.width / 2,
789
- centerY + Math.sin(angle) * radiusY - size.height / 2
790
- )
791
- })
792
- }
793
- } else if (layout === 'mesh') {
794
- const autoNodes = nodes.filter((node) => !manuallyPositioned.has(node.id))
795
- const centerX = 340
796
- const centerY = 180
797
- const radius = Math.max(140, autoNodes.length * 18)
798
-
799
- autoNodes.forEach((node, index) => {
800
- const { size } = getNodeMetrics(node)
801
- const angle = (Math.PI * 2 * index) / Math.max(autoNodes.length, 1) - Math.PI / 2
802
- placeNode(
803
- node,
804
- centerX + Math.cos(angle) * radius - size.width / 2,
805
- centerY + Math.sin(angle) * radius - size.height / 2
806
- )
807
- })
808
- } else if (layout === 'tiered') {
809
- // North-South rows: sort tiers ascending, center each row horizontally.
810
- const autoNodes = nodes.filter((node) => !manuallyPositioned.has(node.id))
811
- const tierBuckets = new Map()
812
- for (const node of autoNodes) {
813
- const tier = resolveNetworkTier(node)
814
- if (!tierBuckets.has(tier)) tierBuckets.set(tier, [])
815
- tierBuckets.get(tier).push(node)
816
- }
817
- const rowGap = 96
818
- const nodeGap = 48
819
- const rowMetrics = [...tierBuckets.keys()]
820
- .sort((a, b) => a - b)
821
- .map((tier) => {
822
- const rowNodes = tierBuckets.get(tier)
823
- const moduleOrder = new Map()
824
- for (const node of rowNodes) {
825
- const key = node.module || ''
826
- if (!moduleOrder.has(key)) moduleOrder.set(key, moduleOrder.size)
827
- }
828
- rowNodes.sort((a, b) => moduleOrder.get(a.module || '') - moduleOrder.get(b.module || ''))
829
- const sizes = rowNodes.map((node) => getNodeMetrics(node).size)
830
- const width = sizes.reduce((sum, size) => sum + size.width, 0) + nodeGap * Math.max(rowNodes.length - 1, 0)
831
- const height = Math.max(...sizes.map((size) => size.height))
832
- return { rowNodes, sizes, width, height }
833
- })
834
- const maxRowWidth = rowMetrics.reduce((max, row) => Math.max(max, row.width), 0)
835
- let rowY = 40
836
- for (const row of rowMetrics) {
837
- let nodeX = 40 + (maxRowWidth - row.width) / 2
838
- row.rowNodes.forEach((node, index) => {
839
- placeNode(node, nodeX, rowY)
840
- nodeX += row.sizes[index].width + nodeGap
841
- })
842
- rowY += row.height + rowGap
843
- }
844
- } else {
845
- // Hierarchical or other: simple grid layout
846
- let row = 0
847
- let col = 0
848
- const maxCols = 4
849
-
850
- for (const node of nodes) {
851
- if (manuallyPositioned.has(node.id)) continue
852
- const semanticType = detectSemanticType(node.label, node.type, node.network)
853
- const size = getNodeSize(node.size, semanticType, node.label, sizeOptions(node))
854
- positions.set(node.id, {
855
- x: snapToGrid(40 + col * (size.width + nodeMargin), gridSize),
856
- y: snapToGrid(40 + row * (size.height + nodeMargin), gridSize),
857
- width: size.width,
858
- height: size.height
859
- })
860
- col++
861
- if (col >= maxCols) {
862
- col = 0
863
- row++
864
- }
865
- }
866
- }
867
-
868
- const snapDown = (value) => Math.floor(value / gridSize) * gridSize
869
- const snapUp = (value) => Math.ceil(value / gridSize) * gridSize
870
- const modulePositions = new Map()
871
-
872
- for (const [moduleId, moduleNodes] of moduleGroups) {
873
- if (moduleId === '__default__' || moduleNodes.length === 0) continue
874
-
875
- const nodePositions = moduleNodes.map((node) => positions.get(node.id)).filter(Boolean)
876
-
877
- if (nodePositions.length === 0) continue
878
-
879
- const minX = Math.min(...nodePositions.map((pos) => pos.x))
880
- const minY = Math.min(...nodePositions.map((pos) => pos.y))
881
- const maxX = Math.max(...nodePositions.map((pos) => pos.x + pos.width))
882
- const maxY = Math.max(...nodePositions.map((pos) => pos.y + pos.height))
883
-
884
- const x = snapDown(minX - containerPadding)
885
- const y = snapDown(minY - containerPadding - moduleHeaderHeight)
886
- const width = snapUp(maxX + containerPadding) - x
887
- const height = snapUp(maxY + containerPadding) - y
888
-
889
- modulePositions.set(moduleId, { x, y, width, height })
890
- }
891
-
892
- return { positions, modulePositions }
893
- }
894
-
895
- // ============================================================================
896
- // Icon Support
897
- // ============================================================================
898
-
899
- const NETWORK_VENDOR_DEVICE_ICONS = {
900
- aws: {
901
- internet: 'aws.internet_gateway',
902
- internet_gateway: 'aws.internet_gateway',
903
- load_balancer: 'aws.application_load_balancer',
904
- application_load_balancer: 'aws.application_load_balancer',
905
- // aws4 has no plain ec2_instance stencil; aws.ec2 resolves via the aws4 resourceIcon style
906
- server: 'aws.ec2',
907
- ec2: 'aws.ec2',
908
- ec2_instance: 'aws.ec2',
909
- // subnet intentionally unmapped: the subnet semantic type renders as a swimlane group box
910
- rds: 'aws.rds_instance',
911
- rds_instance: 'aws.rds_instance'
912
- },
913
- cisco: {
914
- firewall: 'mxgraph.cisco.security.firewall',
915
- ap: 'mxgraph.cisco.misc.access_point',
916
- access_point: 'mxgraph.cisco.misc.access_point'
917
- }
918
- }
919
-
920
- /**
921
- * Resolve a theme token (e.g. $primary) or return the original value.
922
- */
923
- function resolveThemeColor(value, theme, fallback) {
924
- if (!value) return fallback
925
- if (typeof value === 'string' && value.startsWith('$')) {
926
- // $paletteN tokens beyond the selected palette warn in color validation
927
- // and render with the theme primary fallback.
928
- const paletteFallback = theme.palette ? theme.colors?.primary || fallback : fallback
929
- const paletteColor = resolvePaletteToken(value, theme.palette, paletteFallback)
930
- if (paletteColor != null) return paletteColor
931
- const tokenName = value.slice(1)
932
- return theme.colors?.[tokenName] || fallback
933
- }
934
- return value
935
- }
936
-
937
- function safeStyleText(value, fallback) {
938
- if (typeof value !== 'string') return fallback
939
- const trimmed = value.trim()
940
- if (trimmed === '' || /[;<>"\r\n]/.test(trimmed)) return fallback
941
- return trimmed
942
- }
943
-
944
- function containsCjk(text) {
945
- return typeof text === 'string' && /[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/.test(text)
946
- }
947
-
948
- // Latin glyphs resolve from Times New Roman and CJK glyphs fall through to
949
- // SimSun (per-glyph CSS fallback), matching the thesis convention of Times New
950
- // Roman for Western text and SimSun for Chinese text inside one label.
951
- function getDefaultFontPolicy() {
952
- return {
953
- primary: 'Times New Roman',
954
- cjk: 'Times New Roman,SimSun',
955
- formula: 'Times New Roman'
956
- }
957
- }
958
-
959
- function resolveFontBucket({ text, semanticType, treatAsFormula = false }) {
960
- if (semanticType === 'formula' || treatAsFormula) return 'formula'
961
- if (containsCjk(text)) return 'cjk'
962
- return 'primary'
963
- }
964
-
965
- function resolveFontFamily(spec, theme, { text, semanticType, styleFontFamily = null, treatAsFormula = false }) {
966
- const bucket = resolveFontBucket({ text, semanticType, treatAsFormula })
967
- const forcedFontFamily = safeStyleText(spec.meta?.font?.[bucket], null)
968
- if (forcedFontFamily) return forcedFontFamily
969
-
970
- const themeFontFamily = safeStyleText(theme?.typography?.fontFamily?.[bucket], null)
971
- const fallbackFontFamily = themeFontFamily || safeStyleText(getDefaultFontPolicy()[bucket], 'Times New Roman')
972
- return safeStyleText(styleFontFamily, fallbackFontFamily)
973
- }
974
-
975
- function resolveFontStyle(style = {}) {
976
- let bits = Number.isInteger(style.fontStyle) ? style.fontStyle : 0
977
- if (style.bold || style.fontWeight >= 600) bits |= 1
978
- if (style.italic) bits |= 2
979
- return bits
980
- }
981
-
982
- function pushNumberStyle(parts, name, value) {
983
- if (isFiniteNumber(value)) parts.push(`${name}=${value}`)
984
- }
985
-
986
- function pushTextSpacing(parts, style = {}) {
987
- pushNumberStyle(parts, 'spacingLeft', style.spacingLeft)
988
- pushNumberStyle(parts, 'spacingRight', style.spacingRight)
989
- pushNumberStyle(parts, 'spacingTop', style.spacingTop)
990
- pushNumberStyle(parts, 'spacingBottom', style.spacingBottom)
991
- }
992
-
993
- /**
994
- * Apply a theme-declared corner radius to a SHAPE_STYLES base style.
995
- * Only rectangle-family styles (carrying a rounded= token) are affected, and
996
- * stadium shapes (arcSize>=50, e.g. terminal) keep their semantic rounding.
997
- * themeRounded=0 emits square corners (rounded=0, no arcSize).
998
- */
999
- function applyThemeRounding(shapeStyle, themeRounded) {
1000
- if (!isFiniteNumber(themeRounded)) return shapeStyle
1001
- if (!/(^|;)rounded=/.test(shapeStyle)) return shapeStyle
1002
- const arcMatch = /(?:^|;)arcSize=(\d+)/.exec(shapeStyle)
1003
- if (arcMatch && Number(arcMatch[1]) >= 50) return shapeStyle
1004
- const tokens = shapeStyle.split(';').filter((t) => t && !t.startsWith('rounded=') && !t.startsWith('arcSize='))
1005
- const rounding = themeRounded > 0 ? ['rounded=1', `arcSize=${Math.min(themeRounded, 50)}`] : ['rounded=0']
1006
- return [...rounding, ...tokens].join(';')
1007
- }
1008
-
1009
- export { resolveIconShape }
1010
-
1011
- export function deriveNodeIcon(node) {
1012
- if (node.icon) return node.icon
1013
-
1014
- const vendor = node.network?.vendor?.toLowerCase()
1015
- const device = node.network?.device?.toLowerCase()
1016
- if (!vendor || !device) return null
1017
-
1018
- return NETWORK_VENDOR_DEVICE_ICONS[vendor]?.[device] || null
1019
- }
1020
-
1021
- // ============================================================================
1022
- // Style Generation
1023
- // ============================================================================
1024
-
1025
- /**
1026
- * Generate mxCell style string for a node
1027
- */
1028
- export function generateNodeStyle(node, theme) {
1029
- return generateNodeStyleWithSpec(node, theme, { meta: {} })
1030
- }
1031
-
1032
- function generateNodeStyleWithSpec(node, theme, spec) {
1033
- const semanticType = detectSemanticType(node.label, node.type, node.network)
1034
- const shapeStyle = SHAPE_STYLES[semanticType] || SHAPE_STYLES.service
1035
-
1036
- // Get colors from theme
1037
- const nodeTheme = theme.node?.[semanticType] || theme.node?.default || {}
1038
- const defaultTheme = theme.node?.default || {}
1039
- const isTextNode = semanticType === 'text'
1040
-
1041
- // Plain text boxes always render transparent: captions, callouts, and
1042
- // vertical labels must never mask the grid or connectors behind them.
1043
- // Explicit fills on type "text" are ignored (use a shape node or formula
1044
- // type for a filled label); validateTextNodeStyles reports the override.
1045
- const fillColor = isTextNode
1046
- ? 'none'
1047
- : resolveThemeColor(node.style?.fillColor, theme, nodeTheme.fillColor || defaultTheme.fillColor || '#DBEAFE')
1048
- const strokeColor = isTextNode
1049
- ? 'none'
1050
- : resolveThemeColor(node.style?.strokeColor, theme, nodeTheme.strokeColor || defaultTheme.strokeColor || '#2563EB')
1051
- const strokeWidth =
1052
- node.style?.strokeWidth ?? (isTextNode ? 0 : (nodeTheme.strokeWidth ?? defaultTheme.strokeWidth ?? 1.5))
1053
- const fontColor = resolveThemeColor(
1054
- node.style?.fontColor,
1055
- theme,
1056
- nodeTheme.fontColor || defaultTheme.fontColor || '#1E293B'
1057
- )
1058
- const fontSize = node.style?.fontSize ?? nodeTheme.fontSize ?? defaultTheme.fontSize ?? FONT_LADDER.node
1059
- const fontFamily = resolveFontFamily(spec, theme, {
1060
- text: node.label,
1061
- semanticType,
1062
- styleFontFamily: node.style?.fontFamily
1063
- })
1064
- const align = safeStyleText(node.style?.align, isTextNode ? 'left' : 'center')
1065
- const verticalAlign = safeStyleText(node.style?.verticalAlign, isTextNode ? 'top' : 'middle')
1066
- const fontStyle = resolveFontStyle(node.style)
1067
-
1068
- if (isTextNode) {
1069
- const parts = [
1070
- shapeStyle,
1071
- 'html=1',
1072
- 'whiteSpace=wrap',
1073
- 'labelBackgroundColor=none',
1074
- `fillColor=${fillColor}`,
1075
- `strokeColor=${strokeColor}`,
1076
- `strokeWidth=${strokeWidth}`,
1077
- `fontColor=${fontColor}`,
1078
- `fontSize=${fontSize}`,
1079
- `fontFamily=${fontFamily}`,
1080
- `align=${align}`,
1081
- `verticalAlign=${verticalAlign}`
1082
- ]
1083
- if (fontStyle) parts.push(`fontStyle=${fontStyle}`)
1084
- pushTextSpacing(parts, node.style)
1085
- return parts.join(';')
1086
- }
1087
-
1088
- // If node has an icon, override shape to use the icon
1089
- const iconName = node.icon || deriveNodeIcon(node)
1090
- const imageIconStyle = resolveImageIconStyle(iconName)
1091
- const iconShape = imageIconStyle ? null : resolveIconShape(iconName)
1092
- let effectiveShapeStyle = applyThemeRounding(shapeStyle, nodeTheme.rounded ?? defaultTheme.rounded)
1093
- const parts = []
1094
- if (imageIconStyle) {
1095
- effectiveShapeStyle = imageIconStyle
1096
- parts.push(effectiveShapeStyle)
1097
- parts.push('whiteSpace=wrap')
1098
- parts.push(`fillColor=${fillColor}`)
1099
- parts.push(`strokeColor=${strokeColor}`)
1100
- parts.push(`strokeWidth=${strokeWidth}`)
1101
- parts.push(`fontColor=${fontColor}`)
1102
- parts.push(`fontSize=${fontSize}`)
1103
- parts.push(`fontFamily=${fontFamily}`)
1104
- parts.push('labelBackgroundColor=none')
1105
- parts.push(`align=${align}`)
1106
- } else if (iconShape) {
1107
- // aws4 service icons that only exist as resource icons need the compound style
1108
- const iconKind = resolveShapeNameKind(iconShape)
1109
- effectiveShapeStyle =
1110
- iconKind === 'aws4ResourceIcon'
1111
- ? `shape=mxgraph.aws4.resourceIcon;resIcon=${iconShape};aspect=fixed`
1112
- : iconKind === 'k8sParamIcon'
1113
- ? `shape=${iconShape.replace(/:prIcon=/, ';prIcon=')};aspect=fixed`
1114
- : `shape=${iconShape}`
1115
- parts.push(effectiveShapeStyle)
1116
- parts.push('html=1')
1117
- parts.push('whiteSpace=wrap')
1118
- parts.push(`fillColor=${fillColor}`)
1119
- parts.push(`strokeColor=${strokeColor}`)
1120
- parts.push(`strokeWidth=${strokeWidth}`)
1121
- parts.push(`fontColor=${fontColor}`)
1122
- parts.push(`fontSize=${fontSize}`)
1123
- parts.push(`fontFamily=${fontFamily}`)
1124
- parts.push('verticalLabelPosition=bottom')
1125
- parts.push('labelBackgroundColor=none')
1126
- parts.push(`align=${align}`)
1127
- } else {
1128
- parts.push(
1129
- effectiveShapeStyle,
1130
- 'html=1',
1131
- 'whiteSpace=wrap',
1132
- `fillColor=${fillColor}`,
1133
- `strokeColor=${strokeColor}`,
1134
- `strokeWidth=${strokeWidth}`,
1135
- `fontColor=${fontColor}`,
1136
- `fontSize=${fontSize}`,
1137
- `fontFamily=${fontFamily}`,
1138
- `verticalAlign=${verticalAlign}`,
1139
- `align=${align}`
1140
- )
1141
- }
1142
-
1143
- if (fontStyle) parts.push(`fontStyle=${fontStyle}`)
1144
- pushTextSpacing(parts, node.style)
1145
-
1146
- return parts.join(';')
1147
- }
1148
-
1149
- const DEFAULT_ARROW_HEAD_SIZE = 12
1150
- // Open/none arrowheads render unfilled; block/classic/diamond render filled by convention.
1151
- const UNFILLED_ARROWS = new Set(['open', 'openThin', 'none'])
1152
- const defaultArrowFill = (arrow) => !UNFILLED_ARROWS.has(arrow)
1153
-
1154
- /**
1155
- * Generate mxCell style string for a connector
1156
- */
1157
- export function generateConnectorStyle(edge, theme, routing = 'orthogonal') {
1158
- const connectorType = edge.type || 'primary'
1159
- const connectorTheme = theme.connector?.[connectorType] || theme.connector?.primary || {}
1160
-
1161
- const strokeColor = resolveThemeColor(edge.style?.strokeColor, theme, connectorTheme.strokeColor || '#1E293B')
1162
- const strokeWidth = edge.style?.strokeWidth ?? connectorTheme.strokeWidth ?? 2
1163
- const dashed = edge.style?.dashed ?? connectorTheme.dashed ?? false
1164
- const dashPattern = edge.style?.dashPattern || connectorTheme.dashPattern || '6 4'
1165
- const endArrow = edge.style?.endArrow || connectorTheme.endArrow || 'open'
1166
- const endFill =
1167
- edge.style?.endFill ??
1168
- (edge.style?.endArrow
1169
- ? defaultArrowFill(edge.style.endArrow)
1170
- : (connectorTheme.endFill ?? defaultArrowFill(endArrow)))
1171
- const startArrow = edge.style?.startArrow || connectorTheme.startArrow
1172
- const startFill =
1173
- edge.style?.startFill ??
1174
- (edge.style?.startArrow
1175
- ? defaultArrowFill(edge.style.startArrow)
1176
- : (connectorTheme.startFill ?? defaultArrowFill(startArrow)))
1177
-
1178
- const parts = [
1179
- 'edgeStyle=orthogonalEdgeStyle',
1180
- routing === 'rounded' ? 'rounded=1' : 'rounded=0',
1181
- 'orthogonalLoop=1',
1182
- 'jettySize=auto',
1183
- 'html=1',
1184
- `strokeColor=${strokeColor}`,
1185
- `strokeWidth=${strokeWidth}`,
1186
- `endArrow=${endArrow}`,
1187
- `endFill=${endFill ? 1 : 0}`
1188
- ]
1189
-
1190
- // Bold arrowheads by default (block, classic, open): small stock arrowheads read as
1191
- // afterthoughts on 2px architecture connectors.
1192
- const endSize =
1193
- edge.style?.endSize ??
1194
- connectorTheme.endSize ??
1195
- (endArrow === 'block' || endArrow === 'classic' || endArrow === 'open' ? DEFAULT_ARROW_HEAD_SIZE : undefined)
1196
- if (endSize !== undefined) parts.push(`endSize=${endSize}`)
1197
-
1198
- if (startArrow) {
1199
- parts.push(`startArrow=${startArrow}`)
1200
- parts.push(`startFill=${startFill ? 1 : 0}`)
1201
- const startSize =
1202
- edge.style?.startSize ??
1203
- connectorTheme.startSize ??
1204
- (startArrow === 'block' || startArrow === 'classic' || startArrow === 'open' ? DEFAULT_ARROW_HEAD_SIZE : undefined)
1205
- if (startSize !== undefined) parts.push(`startSize=${startSize}`)
1206
- }
1207
-
1208
- // Edge entry/exit routing
1209
- if (edge.style?.exitX !== undefined) parts.push(`exitX=${edge.style.exitX}`)
1210
- if (edge.style?.exitY !== undefined) parts.push(`exitY=${edge.style.exitY}`)
1211
- if (edge.style?.exitDx !== undefined) parts.push(`exitDx=${edge.style.exitDx}`)
1212
- if (edge.style?.exitDy !== undefined) parts.push(`exitDy=${edge.style.exitDy}`)
1213
- if (edge.style?.entryX !== undefined) parts.push(`entryX=${edge.style.entryX}`)
1214
- if (edge.style?.entryY !== undefined) parts.push(`entryY=${edge.style.entryY}`)
1215
- if (edge.style?.entryDx !== undefined) parts.push(`entryDx=${edge.style.entryDx}`)
1216
- if (edge.style?.entryDy !== undefined) parts.push(`entryDy=${edge.style.entryDy}`)
1217
-
1218
- if (dashed) {
1219
- parts.push('dashed=1')
1220
- parts.push(`dashPattern=${dashPattern}`)
1221
- }
1222
-
1223
- // Add jump style for crossings
1224
- parts.push('jumpStyle=arc')
1225
- parts.push('jumpSize=8')
1226
-
1227
- return parts.join(';')
1228
- }
1229
-
1230
- /**
1231
- * Generate mxCell style string for a module container
1232
- */
1233
- export function generateModuleStyle(module, theme) {
1234
- return generateModuleStyleWithSpec(module, theme, { meta: {} })
1235
- }
1236
-
1237
- function generateModuleStyleWithSpec(module, theme, spec) {
1238
- const moduleTheme = theme.module || {}
1239
-
1240
- const fillColor = resolveThemeColor(
1241
- module.style?.fillColor || module.color,
1242
- theme,
1243
- moduleTheme.fillColor || '#F8FAFC'
1244
- )
1245
- const strokeColor = resolveThemeColor(module.style?.strokeColor, theme, moduleTheme.strokeColor || '#E2E8F0')
1246
- const strokeWidth = moduleTheme.strokeWidth ?? 1
1247
- const rounded = moduleTheme.rounded ?? 12
1248
- const fontColor = resolveThemeColor(module.style?.fontColor, theme, moduleTheme.labelFontColor || '#1E293B')
1249
- const fontSize = moduleTheme.labelFontSize ?? FONT_LADDER.moduleTitle
1250
- const fontWeight = moduleTheme.labelFontWeight ?? 600
1251
- const fontFamily = resolveFontFamily(spec, theme, {
1252
- text: module.label,
1253
- semanticType: 'text',
1254
- styleFontFamily: module.style?.fontFamily
1255
- })
1256
-
1257
- // IEEE style dashed border support
1258
- const dashed = module.style?.dashed ?? moduleTheme.dashed ?? false
1259
- const dashPattern = module.style?.dashPattern || moduleTheme.dashPattern || '8 4'
1260
-
1261
- const parts = [
1262
- rounded > 0 ? `rounded=1` : `rounded=0`,
1263
- rounded > 0 ? `arcSize=${Math.min(rounded, 20)}` : '',
1264
- 'html=1',
1265
- 'whiteSpace=wrap',
1266
- `fillColor=${fillColor}`,
1267
- `strokeColor=${strokeColor}`,
1268
- `strokeWidth=${strokeWidth}`,
1269
- `fontColor=${fontColor}`,
1270
- `fontSize=${fontSize}`,
1271
- `fontFamily=${fontFamily}`,
1272
- fontWeight >= 600 ? 'fontStyle=1' : '',
1273
- 'verticalAlign=top',
1274
- 'align=left',
1275
- 'spacingLeft=12',
1276
- 'spacingTop=10',
1277
- dashed ? 'dashed=1' : '',
1278
- dashed ? `dashPattern=${dashPattern}` : ''
1279
- ].filter(Boolean)
1280
-
1281
- return parts.join(';')
1282
- }
1283
-
1284
- function resolveEdgeLabelFontSize(edge) {
1285
- return edge.style?.fontSize ?? FONT_LADDER.edgeLabel
1286
- }
1287
-
1288
- function formatNetworkEdgeLabel(edge) {
1289
- if (edge.label) return edge.label
1290
-
1291
- const parts = []
1292
- if (edge.srcInterface || edge.dstInterface) {
1293
- const src = edge.srcInterface || '?'
1294
- const dst = edge.dstInterface || '?'
1295
- parts.push(`${src} ↔ ${dst}`)
1296
- }
1297
- if (edge.ip) parts.push(edge.ip)
1298
- if (edge.vlan !== undefined) parts.push(`VLAN ${edge.vlan}`)
1299
- if (edge.bandwidth) parts.push(edge.bandwidth)
1300
- if (edge.linkType) parts.push(edge.linkType)
1301
-
1302
- return parts.join('\n')
1303
- }
1304
-
1305
- function defaultEdgeLabelOffset(edge) {
1306
- // draw.io centers an edge label on the offset point, so the offset must
1307
- // cover half the label extent plus clearance, or wide CJK labels will sit
1308
- // right on top of the connector they annotate. A bent fallback edge anchors
1309
- // its label on the middle segment, which runs perpendicular to the overall
1310
- // orientation, so the clearing axis flips.
1311
- const label = formatNetworkEdgeLabel(edge)
1312
- const extent = label ? measureLabelExtent(label, resolveEdgeLabelFontSize(edge), 2) : { width: 0, height: 0 }
1313
- const vertical = edge.__routing?.orientation === 'vertical'
1314
- const clearHorizontally = edge.__bent ? !vertical : vertical
1315
- if (clearHorizontally) {
1316
- return { x: 8 + Math.ceil(extent.width / 2), y: 0 }
1317
- }
1318
- return { x: 0, y: -(8 + Math.ceil(extent.height / 2)) }
1319
- }
1320
-
1321
- function resolveEdgeLabelOffset(edge) {
1322
- const explicit = edge.labelOffset
1323
- if (explicit && isFiniteNumber(explicit.x) && isFiniteNumber(explicit.y)) {
1324
- return explicit
1325
- }
1326
- return defaultEdgeLabelOffset(edge)
1327
- }
1328
-
1329
- // ============================================================================
1330
- // XML Generation
1331
- // ============================================================================
1332
-
1333
- const MATH_DELIMITER_PATTERN = /\$\$|\\\(|\\\[|`/
1334
-
1335
- /**
1336
- * XML attribute-value normalization folds literal newlines into spaces, so
1337
- * multi-line labels (including one-character-per-line vertical CJK labels)
1338
- * must travel as <br> tags, which html=1 labels render as real line breaks.
1339
- * Math labels keep their newlines: <br> inside $$...$$ breaks MathJax.
1340
- */
1341
- function toHtmlLineBreaks(escapedLabel, rawLabel) {
1342
- if (MATH_DELIMITER_PATTERN.test(String(rawLabel))) return escapedLabel
1343
- return escapedLabel.replace(/\n/g, '&lt;br&gt;')
1344
- }
1345
-
1346
- /**
1347
- * Build draw.io XML from specification
1348
- */
1349
- export function buildXml(spec, theme, layout, options = {}) {
1350
- const { positions, modulePositions } = layout
1351
- const routing = spec.meta?.routing || 'orthogonal'
1352
- const routedEdges = buildRoutedEdges(spec, layout)
1353
-
1354
- const cells = []
1355
- let nextId = 2
1356
- const allocId = () => String(nextId++)
1357
- const nodeIdMap = new Map() // logical id -> cell id
1358
- const canonical = options.canonicalMetadata
1359
- const canonicalCell = (cellXml, kind, objectId, link) => {
1360
- if (!canonical) return cellXml
1361
- const attrs = [
1362
- `label=""`,
1363
- `dataPageId="${escapeXml(String(canonical.pageId))}"`,
1364
- `dataObjectId="${escapeXml(String(objectId))}"`,
1365
- `dataObjectKind="${kind}"`
1366
- ]
1367
- if (link?.targetPageId) {
1368
- attrs.push(`link="${escapeXml(String(link.href))}"`)
1369
- if (link.targetObjectId) attrs.push(`dataTargetObjectId="${escapeXml(String(link.targetObjectId))}"`)
1370
- }
1371
- return `<UserObject ${attrs.join(' ')}>${cellXml}</UserObject>`
1372
- }
1373
-
1374
- // Calculate canvas size
1375
- let maxX = 0
1376
- let maxY = 0
1377
- for (const pos of positions.values()) {
1378
- maxX = Math.max(maxX, pos.x + pos.width)
1379
- maxY = Math.max(maxY, pos.y + pos.height)
1380
- }
1381
- for (const pos of modulePositions.values()) {
1382
- maxX = Math.max(maxX, pos.x + pos.width)
1383
- maxY = Math.max(maxY, pos.y + pos.height)
1384
- }
1385
-
1386
- const autoCanvasWidth = snapToGrid(maxX + 80, 8)
1387
- const autoCanvasHeight = snapToGrid(maxY + 80, 8)
1388
- const canvas = resolveCanvasSize(spec.meta?.canvas, autoCanvasWidth, autoCanvasHeight)
1389
-
1390
- // Generate module containers
1391
- const moduleIdMap = new Map()
1392
- for (const [moduleId, pos] of modulePositions) {
1393
- if (moduleId === '__default__') continue
1394
-
1395
- const module = spec.modules?.find((m) => m.id === moduleId)
1396
- if (!module) continue
1397
-
1398
- const cellId = allocId()
1399
- moduleIdMap.set(moduleId, cellId)
1400
-
1401
- const style = generateModuleStyleWithSpec(module, theme, spec)
1402
- const label = toHtmlLineBreaks(prepareMathLabel(module.label || moduleId), module.label || moduleId)
1403
-
1404
- cells.push(
1405
- canonicalCell(
1406
- `<mxCell id="${cellId}" value="${label}" style="${style}" vertex="1" parent="1">` +
1407
- `<mxGeometry x="${pos.x}" y="${pos.y}" width="${pos.width}" height="${pos.height}" as="geometry"/>` +
1408
- `</mxCell>`,
1409
- 'module',
1410
- module.id,
1411
- canonical?.links?.[module.id]
1412
- )
1413
- )
1414
- }
1415
-
1416
- // Generate nodes
1417
- for (const node of spec.nodes || []) {
1418
- const pos = positions.get(node.id)
1419
- if (!pos) continue
1420
-
1421
- const cellId = allocId()
1422
- nodeIdMap.set(node.id, cellId)
1423
-
1424
- const style = generateNodeStyleWithSpec(node, theme, spec)
1425
- const label = toHtmlLineBreaks(prepareMathLabel(node.label), node.label)
1426
- const parentId = node.module && moduleIdMap.has(node.module) ? moduleIdMap.get(node.module) : '1'
1427
-
1428
- // Adjust position relative to parent if in module
1429
- let x = pos.x
1430
- let y = pos.y
1431
- if (parentId !== '1') {
1432
- const modulePos = modulePositions.get(node.module)
1433
- if (modulePos) {
1434
- x = pos.x - modulePos.x
1435
- y = pos.y - modulePos.y
1436
- }
1437
- }
1438
-
1439
- cells.push(
1440
- canonicalCell(
1441
- `<mxCell id="${cellId}" value="${label}" style="${style}" vertex="1" parent="${parentId}">` +
1442
- `<mxGeometry x="${x}" y="${y}" width="${pos.width}" height="${pos.height}" as="geometry"/>` +
1443
- `</mxCell>`,
1444
- 'node',
1445
- node.id,
1446
- canonical?.links?.[node.id]
1447
- )
1448
- )
1449
- }
1450
-
1451
- // Generate edges
1452
- for (const edge of routedEdges) {
1453
- const sourceId = nodeIdMap.get(edge.from)
1454
- const targetId = nodeIdMap.get(edge.to)
1455
- if (!sourceId || !targetId) continue
1456
-
1457
- const cellId = allocId()
1458
- const style = generateConnectorStyle(edge, theme, routing)
1459
- const rawEdgeLabel = formatNetworkEdgeLabel(edge)
1460
- const edgeLabel = rawEdgeLabel ? toHtmlLineBreaks(prepareMathLabel(rawEdgeLabel), rawEdgeLabel) : ''
1461
-
1462
- const edgeCellValue = rawEdgeLabel ? '' : edgeLabel
1463
- let edgeXml = `<mxCell id="${cellId}" value="${edgeCellValue}" style="${style}" edge="1" parent="1" source="${sourceId}" target="${targetId}">`
1464
- edgeXml += `<mxGeometry relative="1" as="geometry">`
1465
- if (edge.waypoints?.length) {
1466
- edgeXml += '<Array as="points">'
1467
- for (const point of edge.waypoints) {
1468
- edgeXml += `<mxPoint x="${point.x}" y="${point.y}"/>`
1469
- }
1470
- edgeXml += '</Array>'
1471
- }
1472
- edgeXml += `</mxGeometry>`
1473
-
1474
- // Add label if present
1475
- if (rawEdgeLabel) {
1476
- const labelId = allocId()
1477
- const labelX = edge.labelPosition === 'start' ? '0.2' : edge.labelPosition === 'end' ? '0.8' : '0.5' // center (default)
1478
- const offset = resolveEdgeLabelOffset(edge)
1479
- const labelOffset = `<mxPoint x="${offset.x}" y="${offset.y}" as="offset"/>`
1480
- const labelFontSize = resolveEdgeLabelFontSize(edge)
1481
- const labelFontColor = resolveThemeColor(edge.style?.fontColor, theme, theme.colors?.textMuted || '#64748B')
1482
- const labelFontFamily = resolveFontFamily(spec, theme, {
1483
- text: rawEdgeLabel,
1484
- semanticType: 'text',
1485
- treatAsFormula: isLikelyStandaloneMathLabel(rawEdgeLabel)
1486
- })
1487
- edgeXml += `</mxCell>`
1488
- edgeXml += `<mxCell id="${labelId}" value="${edgeLabel}" style="edgeLabel;html=1;align=center;verticalAlign=middle;fontSize=${labelFontSize};fontColor=${labelFontColor};fontFamily=${labelFontFamily};" vertex="1" connectable="0" parent="${cellId}">`
1489
- edgeXml += `<mxGeometry x="${labelX}" relative="1" as="geometry">${labelOffset}</mxGeometry>`
1490
- edgeXml += `</mxCell>`
1491
- } else {
1492
- edgeXml += `</mxCell>`
1493
- }
1494
-
1495
- cells.push(canonicalCell(edgeXml, 'edge', edge.id, null))
1496
- }
1497
-
1498
- // Build final XML
1499
- const canvasBackground = resolveThemeColor(
1500
- spec.meta?.replication?.background,
1501
- theme,
1502
- theme.canvas?.background || '#FFFFFF'
1503
- )
1504
- const xml =
1505
- `<mxGraphModel dx="1120" dy="720" grid="1" gridSize="8" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="${canvas.width}" pageHeight="${canvas.height}" math="1" background="${canvasBackground}">` +
1506
- `<root>` +
1507
- `<mxCell id="0"/>` +
1508
- `<mxCell id="1" parent="0"/>` +
1509
- cells.join('') +
1510
- `</root>` +
1511
- `</mxGraphModel>`
1512
-
1513
- return xml
1514
- }
1515
-
1516
- // ============================================================================
1517
- // Spec Validation Functions
1518
- // ============================================================================
1519
-
1520
- const HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/
1521
- const ACADEMIC_FIGURE_TYPES = ['architecture', 'roadmap', 'workflow']
1522
-
1523
- function normalizeLabelText(label) {
1524
- return String(label || '')
1525
- .replace(/\s+/g, ' ')
1526
- .trim()
1527
- }
1528
-
1529
- /**
1530
- * Estimate the rendered length of a label: math delimiters vanish and each
1531
- * TeX command renders as roughly one glyph, so counting raw source length
1532
- * would flag legitimate tensor formulas as verbose.
1533
- */
1534
- function estimateVisibleLabelLength(label) {
1535
- return String(label || '')
1536
- .replace(/\$\$|\\\(|\\\)/g, '')
1537
- .replace(/\\[a-zA-Z]+/g, 'x')
1538
- .replace(/[{}^_]/g, '')
1539
- .replace(/\s+/g, ' ')
1540
- .trim().length
1541
- }
1542
-
1543
- function countManualLabelLines(label) {
1544
- return String(label || '').split(/\r?\n/).length
1545
- }
1546
-
1547
- function isHexColor(value) {
1548
- return typeof value === 'string' && HEX_COLOR_REGEX.test(value)
1549
- }
1550
-
1551
- function normalizeHexColor(value) {
1552
- if (!isHexColor(value)) return null
1553
- const hex = value.slice(1)
1554
- if (hex.length === 3) {
1555
- return `#${hex
1556
- .split('')
1557
- .map((char) => char + char)
1558
- .join('')
1559
- .toUpperCase()}`
1560
- }
1561
- return `#${hex.toUpperCase()}`
1562
- }
1563
-
1564
- function isGrayscaleHex(value) {
1565
- const hex = normalizeHexColor(value)
1566
- if (!hex) return false
1567
- return hex.slice(1, 3) === hex.slice(3, 5) && hex.slice(3, 5) === hex.slice(5, 7)
1568
- }
1569
-
1570
- function collectAcademicColorOverrideWarnings(spec, theme) {
1571
- const offenders = []
1572
-
1573
- const checkColor = (value, context) => {
1574
- if (!value) return
1575
- const resolved = resolveThemeColor(value, theme, value)
1576
- if (isHexColor(resolved) && !isGrayscaleHex(resolved)) {
1577
- offenders.push(`${context}=${normalizeHexColor(resolved)}`)
1578
- }
1579
- }
1580
-
1581
- spec.nodes?.forEach((node) => {
1582
- checkColor(node.style?.fillColor, `node "${node.id}" fill`)
1583
- checkColor(node.style?.strokeColor, `node "${node.id}" stroke`)
1584
- checkColor(node.style?.fontColor, `node "${node.id}" text`)
1585
- })
1586
-
1587
- spec.edges?.forEach((edge) => {
1588
- checkColor(edge.style?.strokeColor, `edge "${edge.from}->${edge.to}" stroke`)
1589
- })
1590
-
1591
- spec.modules?.forEach((module) => {
1592
- checkColor(module.color, `module "${module.id}" color`)
1593
- checkColor(module.style?.fillColor, `module "${module.id}" fill`)
1594
- checkColor(module.style?.strokeColor, `module "${module.id}" stroke`)
1595
- checkColor(module.style?.fontColor, `module "${module.id}" text`)
1596
- })
1597
-
1598
- return offenders
1599
- }
1600
-
1601
- /**
1602
- * Validate all color values in spec against theme tokens and hex format.
1603
- * Warns on invalid values; does not throw by default.
1604
- * @param {Object} spec - Parsed YAML spec
1605
- * @param {Object} theme - Loaded theme object
1606
- * @param {Object|null} palette - Materialized palette or null
1607
- * @returns {Array<string>} Array of validation warning messages
1608
- */
1609
- export function validateColorScheme(spec, theme, palette = null) {
1610
- const warnings = []
1611
- const validTokens = new Set(Object.keys(theme.colors || {}).map((k) => `$${k}`))
1612
- palette?.entries?.forEach((entry, index) => {
1613
- const prefix = `$palette${index + 1}`
1614
- validTokens.add(prefix)
1615
- for (const variant of ['fill', 'stroke', 'text']) validTokens.add(`${prefix}-${variant}`)
1616
- })
1617
-
1618
- const checkColor = (value, context) => {
1619
- if (!value) return
1620
- if (value === 'none' || value === 'transparent') return // explicit transparency
1621
- if (validTokens.has(value)) return // valid theme token
1622
- if (HEX_COLOR_REGEX.test(value)) return // valid hex color
1623
- const tokenSamples = [...validTokens].slice(0, 3).join(', ')
1624
- warnings.push(
1625
- `Invalid color "${value}" in ${context}. ` +
1626
- `Use a hex code (#RGB or #RRGGBB) or a theme token (${tokenSamples}...)`
1627
- )
1628
- }
1629
-
1630
- // Validate node style overrides
1631
- spec.nodes?.forEach((node) => {
1632
- const ctx = `node "${node.id}"`
1633
- checkColor(node.style?.fillColor, `${ctx}.style.fillColor`)
1634
- checkColor(node.style?.strokeColor, `${ctx}.style.strokeColor`)
1635
- checkColor(node.style?.fontColor, `${ctx}.style.fontColor`)
1636
- })
1637
-
1638
- // Validate edge style overrides
1639
- spec.edges?.forEach((edge) => {
1640
- const ctx = `edge "${edge.from}→${edge.to}"`
1641
- checkColor(edge.style?.strokeColor, `${ctx}.style.strokeColor`)
1642
- })
1643
-
1644
- // Validate module style overrides
1645
- spec.modules?.forEach((mod) => {
1646
- const ctx = `module "${mod.id}"`
1647
- checkColor(mod.color, `${ctx}.color`)
1648
- checkColor(mod.style?.fillColor, `${ctx}.style.fillColor`)
1649
- checkColor(mod.style?.strokeColor, `${ctx}.style.strokeColor`)
1650
- })
1651
-
1652
- checkColor(spec.meta?.replication?.background, 'meta.replication.background')
1653
- spec.meta?.replication?.palette?.forEach((entry, index) => {
1654
- if (!entry?.hex) return
1655
- if (HEX_COLOR_REGEX.test(entry.hex)) return
1656
- warnings.push(
1657
- `Invalid color "${entry.hex}" in meta.replication.palette[${index}].hex. ` +
1658
- 'Use a flat hex code (#RGB or #RRGGBB) for extracted source colors.'
1659
- )
1660
- })
1661
-
1662
- return warnings
1663
- }
1664
-
1665
- function collectPaletteTokenIndexes(spec) {
1666
- const indexes = new Set()
1667
- const add = (value) => {
1668
- const index = paletteTokenIndex(value)
1669
- if (index != null) indexes.add(index)
1670
- }
1671
-
1672
- spec.nodes?.forEach((node) => {
1673
- add(node.style?.fillColor)
1674
- add(node.style?.strokeColor)
1675
- add(node.style?.fontColor)
1676
- })
1677
- spec.edges?.forEach((edge) => {
1678
- add(edge.style?.strokeColor)
1679
- add(edge.style?.fontColor)
1680
- })
1681
- spec.modules?.forEach((module) => {
1682
- add(module.color)
1683
- add(module.style?.fillColor)
1684
- add(module.style?.strokeColor)
1685
- add(module.style?.fontColor)
1686
- })
1687
- add(spec.meta?.replication?.background)
1688
- return [...indexes]
1689
- }
1690
-
1691
- /**
1692
- * Detect conflicts between the declared layout direction and manual node
1693
- * position coordinates. Also checks for node overlap.
1694
- * @param {Object} spec - Parsed YAML spec
1695
- * @returns {Array<string>} Array of layout consistency warning messages
1696
- */
1697
- export function validateLayoutConsistency(spec) {
1698
- const warnings = []
1699
- const layout = spec.meta?.layout || 'horizontal'
1700
- const nodesWithPos = (spec.nodes || []).filter(
1701
- (n) => n.position && typeof n.position.x === 'number' && typeof n.position.y === 'number'
1702
- )
1703
-
1704
- if (nodesWithPos.length < 2) return warnings // not enough data
1705
-
1706
- const xs = nodesWithPos.map((n) => n.position.x)
1707
- const ys = nodesWithPos.map((n) => n.position.y)
1708
- const xRange = Math.max(...xs) - Math.min(...xs)
1709
- const yRange = Math.max(...ys) - Math.min(...ys)
1710
-
1711
- if (layout === 'horizontal' && yRange > xRange * 1.5) {
1712
- warnings.push(
1713
- `Layout is "horizontal" but nodes span ${yRange}px vertically vs ${xRange}px horizontally. ` +
1714
- `Consider switching meta.layout to "vertical", or recalculate node positions.`
1715
- )
1716
- }
1717
-
1718
- if (layout === 'vertical' && xRange > yRange * 1.5) {
1719
- warnings.push(
1720
- `Layout is "vertical" but nodes span ${xRange}px horizontally vs ${yRange}px vertically. ` +
1721
- `Consider switching meta.layout to "horizontal", or recalculate node positions.`
1722
- )
1723
- }
1724
-
1725
- // Check for potential node overlap (skip if too many nodes — O(n²) cost)
1726
- const MIN_CLEARANCE = 20
1727
- if (nodesWithPos.length <= 30) {
1728
- for (let i = 0; i < nodesWithPos.length; i++) {
1729
- for (let j = i + 1; j < nodesWithPos.length; j++) {
1730
- const a = nodesWithPos[i]
1731
- const b = nodesWithPos[j]
1732
- const dx = Math.abs(a.position.x - b.position.x)
1733
- const dy = Math.abs(a.position.y - b.position.y)
1734
- if (dx < MIN_CLEARANCE && dy < MIN_CLEARANCE) {
1735
- const dist = Math.round(Math.hypot(dx, dy))
1736
- warnings.push(
1737
- `Nodes "${a.id}" and "${b.id}" may overlap ` +
1738
- `(center distance ${dist}px < ${MIN_CLEARANCE}px minimum clearance)`
1739
- )
1740
- }
1741
- }
1742
- }
1743
- }
1744
-
1745
- return warnings
1746
- }
1747
-
1748
- const TRANSPARENT_STYLE_VALUES = new Set(['none', 'transparent'])
1749
-
1750
- /**
1751
- * Plain text nodes must stay transparent, and their declared bounds must be
1752
- * large enough for the content. The style generator already forces
1753
- * fillColor=none/strokeColor=none for type "text"; this pass surfaces ignored
1754
- * overrides and likely clipping so specs stay honest.
1755
- */
1756
- export function validateTextNodeStyles(spec) {
1757
- const warnings = []
1758
- for (const node of spec.nodes || []) {
1759
- const semanticType = detectSemanticType(node.label, node.type, node.network)
1760
- if (semanticType !== 'text') continue
1761
-
1762
- for (const field of ['fillColor', 'strokeColor']) {
1763
- const value = node.style?.[field]
1764
- if (value !== undefined && !TRANSPARENT_STYLE_VALUES.has(String(value).toLowerCase())) {
1765
- warnings.push(
1766
- `Text node "${node.id}" declares style.${field}="${value}", but plain text boxes always render transparent ` +
1767
- '(fillColor=none;strokeColor=none;labelBackgroundColor=none). Use a shape node or formula type for a filled label.'
1768
- )
1769
- }
1770
- }
1771
-
1772
- const bounds = node.bounds
1773
- if (bounds && isFiniteNumber(bounds.width) && isFiniteNumber(bounds.height) && node.label) {
1774
- const fontSize = node.style?.fontSize ?? FONT_LADDER.text
1775
- const extent = measureLabelExtent(node.label, fontSize, 8)
1776
- if (bounds.width + 2 < extent.width || bounds.height + 2 < extent.height) {
1777
- warnings.push(
1778
- `Text node "${node.id}" bounds ${bounds.width}x${bounds.height} are smaller than the estimated content size ` +
1779
- `${extent.width}x${extent.height}; the label may clip or wrap badly. Enlarge bounds or shorten the text.`
1780
- )
1781
- }
1782
- }
1783
- }
1784
- return warnings
1785
- }
1786
-
1787
- const FACE_SLOTS = [0.25, 0.5, 0.75, 0.33, 0.66, 0.2, 0.8]
1788
-
1789
- function resolveProfile(spec) {
1790
- if (spec.meta?.profile) return spec.meta.profile
1791
- const theme = spec.meta?.theme || ''
1792
- if (theme === 'academic' || theme === 'academic-color') return 'academic-paper'
1793
- return 'default'
1794
- }
1795
-
1796
- function detectEdgeFaces(sourcePos, targetPos) {
1797
- const sourceCenterX = sourcePos.x + sourcePos.width / 2
1798
- const sourceCenterY = sourcePos.y + sourcePos.height / 2
1799
- const targetCenterX = targetPos.x + targetPos.width / 2
1800
- const targetCenterY = targetPos.y + targetPos.height / 2
1801
- const dx = targetCenterX - sourceCenterX
1802
- const dy = targetCenterY - sourceCenterY
1803
- // Prefer the axis whose face-to-face gap is positive: a negative gap means
1804
- // the shapes overlap on that axis, so routing along it would immediately
1805
- // clash with the shapes themselves (wide bars above narrow boxes, etc.).
1806
- const horizontalGap = Math.abs(dx) - (sourcePos.width + targetPos.width) / 2
1807
- const verticalGap = Math.abs(dy) - (sourcePos.height + targetPos.height) / 2
1808
- let horizontal
1809
- if (verticalGap >= 0 && horizontalGap < 0) {
1810
- horizontal = false
1811
- } else if (horizontalGap >= 0 && verticalGap < 0) {
1812
- horizontal = true
1813
- } else {
1814
- horizontal = Math.abs(dx) >= Math.abs(dy)
1815
- }
1816
-
1817
- if (horizontal) {
1818
- return {
1819
- orientation: 'horizontal',
1820
- sourceFace: dx >= 0 ? 'right' : 'left',
1821
- targetFace: dx >= 0 ? 'left' : 'right'
1822
- }
1823
- }
1824
-
1825
- return {
1826
- orientation: 'vertical',
1827
- sourceFace: dy >= 0 ? 'bottom' : 'top',
1828
- targetFace: dy >= 0 ? 'top' : 'bottom'
1829
- }
1830
- }
1831
-
1832
- function applyFaceSlot(style, face, slot) {
1833
- if (face === 'left') {
1834
- style.exitX = style.exitX ?? 0
1835
- style.exitY = style.exitY ?? slot
1836
- } else if (face === 'right') {
1837
- style.exitX = style.exitX ?? 1
1838
- style.exitY = style.exitY ?? slot
1839
- } else if (face === 'top') {
1840
- style.exitX = style.exitX ?? slot
1841
- style.exitY = style.exitY ?? 0
1842
- } else if (face === 'bottom') {
1843
- style.exitX = style.exitX ?? slot
1844
- style.exitY = style.exitY ?? 1
1845
- }
1846
-
1847
- style.exitDx = style.exitDx ?? 0
1848
- style.exitDy = style.exitDy ?? 0
1849
- }
1850
-
1851
- function applyTargetFaceSlot(style, face, slot) {
1852
- if (face === 'left') {
1853
- style.entryX = style.entryX ?? 0
1854
- style.entryY = style.entryY ?? slot
1855
- } else if (face === 'right') {
1856
- style.entryX = style.entryX ?? 1
1857
- style.entryY = style.entryY ?? slot
1858
- } else if (face === 'top') {
1859
- style.entryX = style.entryX ?? slot
1860
- style.entryY = style.entryY ?? 0
1861
- } else if (face === 'bottom') {
1862
- style.entryX = style.entryX ?? slot
1863
- style.entryY = style.entryY ?? 1
1864
- }
1865
-
1866
- style.entryDx = style.entryDx ?? 0
1867
- style.entryDy = style.entryDy ?? 0
1868
- }
1869
-
1870
- function getSlot(index) {
1871
- return FACE_SLOTS[index % FACE_SLOTS.length]
1872
- }
1873
-
1874
- const CONNECTION_CORNER_MARGIN = 8
1875
- const CONNECTION_MIN_SEPARATION = 30
1876
-
1877
- /**
1878
- * Interval of absolute coordinates (X for vertical edges, Y for horizontal
1879
- * edges) where both faces can host the same connection coordinate, keeping the
1880
- * orthogonal edge a single straight segment. Null when the faces do not
1881
- * overlap on the shared axis and a bend is genuinely required.
1882
- */
1883
- function sharedAxisInterval(sourcePos, targetPos, orientation) {
1884
- const vertical = orientation === 'vertical'
1885
- const lo = vertical ? Math.max(sourcePos.x, targetPos.x) : Math.max(sourcePos.y, targetPos.y)
1886
- const hi = vertical
1887
- ? Math.min(sourcePos.x + sourcePos.width, targetPos.x + targetPos.width)
1888
- : Math.min(sourcePos.y + sourcePos.height, targetPos.y + targetPos.height)
1889
- const min = lo + CONNECTION_CORNER_MARGIN
1890
- const max = hi - CONNECTION_CORNER_MARGIN
1891
- return min <= max ? { lo: min, hi: max } : null
1892
- }
1893
-
1894
- /**
1895
- * Straight edges anchor on the center of the narrower face: a small box
1896
- * connects from its own center straight into the larger box, which is how
1897
- * hand-drawn architecture diagrams keep their vertical arrows straight.
1898
- */
1899
- function preferredSharedCoordinate(sourcePos, targetPos, orientation, interval) {
1900
- const vertical = orientation === 'vertical'
1901
- const sourceSpan = vertical ? sourcePos.width : sourcePos.height
1902
- const targetSpan = vertical ? targetPos.width : targetPos.height
1903
- const sourceCenter = vertical ? sourcePos.x + sourcePos.width / 2 : sourcePos.y + sourcePos.height / 2
1904
- const targetCenter = vertical ? targetPos.x + targetPos.width / 2 : targetPos.y + targetPos.height / 2
1905
- const preferred = sourceSpan <= targetSpan ? sourceCenter : targetCenter
1906
- return Math.min(interval.hi, Math.max(interval.lo, preferred))
1907
- }
1908
-
1909
- function roundFraction(value) {
1910
- return Math.round(value * 10000) / 10000
1911
- }
1912
-
1913
- /**
1914
- * Spread straight edges that landed within CONNECTION_MIN_SEPARATION of each
1915
- * other on the same physical face. Moving an edge moves both endpoints
1916
- * together, so collinearity is preserved; clamping keeps every edge inside its
1917
- * own shared interval.
1918
- */
1919
- function spreadSharedCoordinates(edges) {
1920
- const faceGroups = new Map()
1921
- for (const edge of edges) {
1922
- if (!edge.__shared) continue
1923
- const keys = [`${edge.from}:${edge.__routing.sourceFace}`, `${edge.to}:${edge.__routing.targetFace}`]
1924
- for (const key of keys) {
1925
- if (!faceGroups.has(key)) faceGroups.set(key, [])
1926
- faceGroups.get(key).push(edge)
1927
- }
1928
- }
1929
- const sortedKeys = [...faceGroups.keys()].sort()
1930
- for (const key of sortedKeys) {
1931
- const group = faceGroups
1932
- .get(key)
1933
- .slice()
1934
- .sort((a, b) => a.__shared.coord - b.__shared.coord)
1935
- let start = 0
1936
- while (start < group.length) {
1937
- let end = start
1938
- while (
1939
- end + 1 < group.length &&
1940
- group[end + 1].__shared.coord - group[end].__shared.coord < CONNECTION_MIN_SEPARATION
1941
- ) {
1942
- end++
1943
- }
1944
- if (end > start) {
1945
- const cluster = group.slice(start, end + 1)
1946
- const mean = cluster.reduce((sum, item) => sum + item.__shared.coord, 0) / cluster.length
1947
- cluster.forEach((item, index) => {
1948
- const desired = mean + (index - (cluster.length - 1) / 2) * CONNECTION_MIN_SEPARATION
1949
- item.__shared.coord = Math.min(item.__shared.interval.hi, Math.max(item.__shared.interval.lo, desired))
1950
- })
1951
- }
1952
- start = end + 1
1953
- }
1954
- }
1955
- }
1956
-
1957
- function buildRoutedEdges(spec, layout) {
1958
- const { positions } = layout
1959
- const declaredLayout = spec.meta?.layout || 'horizontal'
1960
- const edges = (spec.edges || []).map((edge) => ({
1961
- ...edge,
1962
- style: { ...(edge.style || {}) },
1963
- waypoints: edge.waypoints ? edge.waypoints.map((point) => ({ ...point })) : undefined
1964
- }))
1965
-
1966
- const sourceGroups = new Map()
1967
- const targetGroups = new Map()
1968
-
1969
- for (const edge of edges) {
1970
- const sourcePos = positions.get(edge.from)
1971
- const targetPos = positions.get(edge.to)
1972
- if (!sourcePos || !targetPos) continue
1973
-
1974
- const faces = detectEdgeFaces(sourcePos, targetPos)
1975
- edge.__routing = faces
1976
-
1977
- if (edge.waypoints?.length) continue
1978
-
1979
- if (declaredLayout === 'star' && edge.__routing.orientation === 'horizontal') {
1980
- const sourceCenterY = sourcePos.y + sourcePos.height / 2
1981
- const targetCenterY = targetPos.y + targetPos.height / 2
1982
- const midX = snapToGrid((sourcePos.x + sourcePos.width / 2 + targetPos.x + targetPos.width / 2) / 2, 8)
1983
- const waypointCandidates = [
1984
- { x: midX, y: snapToGrid(sourceCenterY, 8) },
1985
- { x: midX, y: snapToGrid(targetCenterY, 8) }
1986
- ]
1987
- const dedupedWaypoints = []
1988
- for (const point of waypointCandidates) {
1989
- const prev = dedupedWaypoints[dedupedWaypoints.length - 1]
1990
- if (!prev || Math.abs(prev.x - point.x) >= 1 || Math.abs(prev.y - point.y) >= 1) {
1991
- dedupedWaypoints.push(point)
1992
- }
1993
- }
1994
- edge.waypoints = dedupedWaypoints
1995
- if (edge.waypoints.length > 0) {
1996
- edge.__bent = true
1997
- continue
1998
- }
1999
- }
2000
-
2001
- if (declaredLayout === 'mesh') {
2002
- const sourceCenterX = sourcePos.x + sourcePos.width / 2
2003
- const sourceCenterY = sourcePos.y + sourcePos.height / 2
2004
- const targetCenterX = targetPos.x + targetPos.width / 2
2005
- const targetCenterY = targetPos.y + targetPos.height / 2
2006
- const midX = snapToGrid((sourceCenterX + targetCenterX) / 2, 8)
2007
- const midY = snapToGrid((sourceCenterY + targetCenterY) / 2, 8)
2008
- if (Math.abs(sourceCenterX - targetCenterX) > 80 && Math.abs(sourceCenterY - targetCenterY) > 80) {
2009
- const waypointCandidates = [
2010
- { x: midX, y: snapToGrid(sourceCenterY, 8) },
2011
- { x: midX, y: midY },
2012
- { x: midX, y: snapToGrid(targetCenterY, 8) }
2013
- ]
2014
- const dedupedWaypoints = []
2015
- for (const point of waypointCandidates) {
2016
- const prev = dedupedWaypoints[dedupedWaypoints.length - 1]
2017
- if (!prev || Math.abs(prev.x - point.x) >= 1 || Math.abs(prev.y - point.y) >= 1) {
2018
- dedupedWaypoints.push(point)
2019
- }
2020
- }
2021
- edge.waypoints = dedupedWaypoints
2022
- if (edge.waypoints.length > 0) {
2023
- edge.__bent = true
2024
- continue
2025
- }
2026
- }
2027
- }
2028
-
2029
- const hasManualPoints =
2030
- edge.style.exitX !== undefined ||
2031
- edge.style.exitY !== undefined ||
2032
- edge.style.entryX !== undefined ||
2033
- edge.style.entryY !== undefined
2034
- const interval = hasManualPoints ? null : sharedAxisInterval(sourcePos, targetPos, faces.orientation)
2035
- if (interval) {
2036
- edge.__shared = {
2037
- interval,
2038
- coord: preferredSharedCoordinate(sourcePos, targetPos, faces.orientation, interval)
2039
- }
2040
- continue
2041
- }
2042
- edge.__bent = !hasManualPoints
2043
-
2044
- const sourceKey = `${edge.from}:${faces.sourceFace}`
2045
- const targetKey = `${edge.to}:${faces.targetFace}`
2046
-
2047
- if (!sourceGroups.has(sourceKey)) sourceGroups.set(sourceKey, [])
2048
- if (!targetGroups.has(targetKey)) targetGroups.set(targetKey, [])
2049
- sourceGroups.get(sourceKey).push(edge)
2050
- targetGroups.get(targetKey).push(edge)
2051
- }
2052
-
2053
- spreadSharedCoordinates(edges)
2054
-
2055
- const usedFaceCoords = new Map()
2056
- const faceCoordsFor = (nodeId, face) => {
2057
- const key = `${nodeId}:${face}`
2058
- if (!usedFaceCoords.has(key)) usedFaceCoords.set(key, [])
2059
- return usedFaceCoords.get(key)
2060
- }
2061
-
2062
- for (const edge of edges) {
2063
- if (!edge.__shared) continue
2064
- const sourcePos = positions.get(edge.from)
2065
- const targetPos = positions.get(edge.to)
2066
- const { coord } = edge.__shared
2067
- const style = edge.style
2068
- if (edge.__routing.orientation === 'vertical') {
2069
- style.exitX = roundFraction((coord - sourcePos.x) / sourcePos.width)
2070
- style.exitY = edge.__routing.sourceFace === 'bottom' ? 1 : 0
2071
- style.entryX = roundFraction((coord - targetPos.x) / targetPos.width)
2072
- style.entryY = edge.__routing.targetFace === 'top' ? 0 : 1
2073
- } else {
2074
- style.exitX = edge.__routing.sourceFace === 'right' ? 1 : 0
2075
- style.exitY = roundFraction((coord - sourcePos.y) / sourcePos.height)
2076
- style.entryX = edge.__routing.targetFace === 'left' ? 0 : 1
2077
- style.entryY = roundFraction((coord - targetPos.y) / targetPos.height)
2078
- }
2079
- style.exitDx = 0
2080
- style.exitDy = 0
2081
- style.entryDx = 0
2082
- style.entryDy = 0
2083
- faceCoordsFor(edge.from, edge.__routing.sourceFace).push(coord)
2084
- faceCoordsFor(edge.to, edge.__routing.targetFace).push(coord)
2085
- delete edge.__shared
2086
- }
2087
-
2088
- assignFallbackFaceSlots(sourceGroups, positions, faceCoordsFor, true)
2089
- assignFallbackFaceSlots(targetGroups, positions, faceCoordsFor, false)
2090
-
2091
- return edges
2092
- }
2093
-
2094
- function faceGeometry(pos, face) {
2095
- const vertical = face === 'top' || face === 'bottom'
2096
- return { vertical, base: vertical ? pos.x : pos.y, span: vertical ? pos.width : pos.height }
2097
- }
2098
-
2099
- /**
2100
- * Legacy slot distribution for edges without a collinear interval. Slots now
2101
- * dodge coordinates already taken on the same physical face by straight edges
2102
- * or manual connection points, so mixed faces stay CONNECTION_MIN_SEPARATION
2103
- * apart instead of stacking at 0.5.
2104
- */
2105
- function assignFallbackFaceSlots(groups, positions, faceCoordsFor, isSource) {
2106
- for (const group of groups.values()) {
2107
- const manualEdges = new Set()
2108
-
2109
- for (const edge of group) {
2110
- const face = isSource ? edge.__routing.sourceFace : edge.__routing.targetFace
2111
- const nodeId = isSource ? edge.from : edge.to
2112
- const pos = positions.get(nodeId)
2113
- if (!pos) continue
2114
- const { vertical, base, span } = faceGeometry(pos, face)
2115
- const style = edge.style
2116
- const manual = isSource ? (vertical ? style.exitX : style.exitY) : (vertical ? style.entryX : style.entryY)
2117
- if (manual !== undefined) {
2118
- faceCoordsFor(nodeId, face).push(base + manual * span)
2119
- manualEdges.add(edge)
2120
- }
2121
- }
2122
-
2123
- group.forEach((edge, index) => {
2124
- const face = isSource ? edge.__routing.sourceFace : edge.__routing.targetFace
2125
- const nodeId = isSource ? edge.from : edge.to
2126
- const pos = positions.get(nodeId)
2127
- const fallbackSlot = group.length === 1 ? 0.5 : getSlot(index)
2128
- if (!pos || manualEdges.has(edge)) {
2129
- if (isSource) applyFaceSlot(edge.style, face, fallbackSlot)
2130
- else applyTargetFaceSlot(edge.style, face, fallbackSlot)
2131
- return
2132
- }
2133
- const { base, span } = faceGeometry(pos, face)
2134
- const used = faceCoordsFor(nodeId, face)
2135
- // Prefer the legacy slot for this position in the group; only dodge to
2136
- // another slot when a straight edge or manual point already occupies the
2137
- // coordinate. Small faces cannot honor the separation at all, so the
2138
- // exhausted case falls back to the legacy slot unchanged.
2139
- let chosen
2140
- for (const slot of [fallbackSlot, 0.5, ...FACE_SLOTS]) {
2141
- const coord = base + slot * span
2142
- if (used.every((taken) => Math.abs(taken - coord) >= CONNECTION_MIN_SEPARATION)) {
2143
- chosen = slot
2144
- break
2145
- }
2146
- }
2147
- if (chosen === undefined) {
2148
- // The face is too small to honor the separation; take the slot that
2149
- // keeps the largest distance to everything already connected instead
2150
- // of stacking exactly onto an occupied coordinate.
2151
- let bestDistance = -1
2152
- for (const slot of [fallbackSlot, 0.5, ...FACE_SLOTS]) {
2153
- const coord = base + slot * span
2154
- const minDistance = used.length ? Math.min(...used.map((taken) => Math.abs(taken - coord))) : Infinity
2155
- if (minDistance > bestDistance) {
2156
- bestDistance = minDistance
2157
- chosen = slot
2158
- }
2159
- }
2160
- }
2161
- used.push(base + chosen * span)
2162
- if (isSource) applyFaceSlot(edge.style, face, chosen)
2163
- else applyTargetFaceSlot(edge.style, face, chosen)
2164
- })
2165
- }
2166
- }
2167
-
2168
- export function validateConnectionPointPolicy(spec) {
2169
- const warnings = []
2170
- for (const edge of spec.edges || []) {
2171
- const style = edge.style || {}
2172
- const hasWaypoints = Array.isArray(edge.waypoints) && edge.waypoints.length > 0
2173
- const cpFields = ['exitX', 'exitY', 'entryX', 'entryY']
2174
- const dxdyFields = ['exitDx', 'exitDy', 'entryDx', 'entryDy']
2175
- const cpCount = cpFields.filter((field) => style[field] !== undefined).length
2176
- const dxdyCount = dxdyFields.filter((field) => style[field] !== undefined).length
2177
-
2178
- if (hasWaypoints && (cpCount > 0 || dxdyCount > 0)) {
2179
- warnings.push(
2180
- `Edge "${edge.from}->${edge.to}" mixes waypoints with explicit connection points. Remove exit/entry hints when waypoints are present.`
2181
- )
2182
- }
2183
- if (!hasWaypoints && cpCount > 0 && cpCount < cpFields.length) {
2184
- warnings.push(
2185
- `Edge "${edge.from}->${edge.to}" defines partial connection points. Non-waypoint edges should set exitX/exitY/entryX/entryY together.`
2186
- )
2187
- }
2188
- if (!hasWaypoints && dxdyCount > 0 && dxdyCount < dxdyFields.length) {
2189
- warnings.push(
2190
- `Edge "${edge.from}->${edge.to}" defines partial Dx/Dy offsets. Use all exitDx/exitDy/entryDx/entryDy fields or omit them.`
2191
- )
2192
- }
2193
- }
2194
- return warnings
2195
- }
2196
-
2197
- /**
2198
- * Warn when a node resolves to a shape name absent from the draw.io shape
2199
- * catalog: such names render as empty boxes in draw.io Desktop.
2200
- * @param {Object} spec
2201
- * @returns {{ errors: string[], warnings: string[] }}
2202
- */
2203
- export function validateShapeReferences(spec) {
2204
- const errors = []
2205
- const warnings = []
2206
- for (const node of spec.nodes || []) {
2207
- const iconName = node.icon || deriveNodeIcon(node)
2208
- if (resolveImageIconStyle(iconName)) continue
2209
- const aiIdentifier = /^(?:lobe|ai)\.([a-z][a-z0-9._-]*)$/i.exec(String(iconName || ''))
2210
- if (aiIdentifier) {
2211
- const suggestions = searchAiIcons(aiIdentifier[1].split(/[._-]/).filter(Boolean).join(' '), { limit: 3 })
2212
- .map((result) => result.spec)
2213
- .join(', ')
2214
- warnings.push(
2215
- `Node "${node.id}" resolves to unknown AI icon "${iconName}"; ` +
2216
- `it would render as an empty box in draw.io Desktop.${suggestions ? ` Did you mean: ${suggestions}?` : ''}`
2217
- )
2218
- continue
2219
- }
2220
- const iconShape = resolveIconShape(iconName)
2221
- if (!iconShape) continue
2222
- if (resolveShapeNameKind(iconShape) === 'unknown') {
2223
- const library = /^mxgraph\.([^.]+)\./.exec(iconShape)?.[1] || null
2224
- const paramValue = /:(?:prIcon|resIcon|grIcon)=([^;]+)$/.exec(iconShape)?.[1]
2225
- const stem = paramValue || (library ? iconShape.replace(/^mxgraph\.[^.]+\./, '') : iconName)
2226
- const query = stem.split(/[._-]/).filter(Boolean).join(' ')
2227
- const suggestions = searchShapeCatalog(query, { limit: 3, prefix: library })
2228
- .map((result) => result.spec || result.name)
2229
- .join(', ')
2230
- const message =
2231
- `Node "${node.id}" resolves to unknown shape "${iconShape}" (not in the draw.io shape catalog); ` +
2232
- `it would render as an empty box in draw.io Desktop.${suggestions ? ` Did you mean: ${suggestions}?` : ''}`
2233
- if (iconShape.startsWith('mxgraph.')) errors.push(message)
2234
- else warnings.push(message)
2235
- }
2236
- }
2237
- return { errors, warnings }
2238
- }
2239
-
2240
- // Print-width targets for the paper-readability gate: `effective pt` =
2241
- // fontSize x widthPt / canvas-width-px once the figure is scaled to the target
2242
- // column. cn-thesis uses an A4 text block (~155mm = 440pt) with the CN
2243
- // xiao-wu 9pt floor; IEEE columns follow the IEEE graphics guidelines (8pt).
2244
- const PRINT_TARGETS = {
2245
- 'cn-thesis': { widthPt: 440, minPt: 9, label: 'CN thesis text width (155mm = 440pt)' },
2246
- 'ieee-single': { widthPt: 252, minPt: 8, label: 'IEEE single-column width (3.5in = 252pt)' },
2247
- 'ieee-double': { widthPt: 516, minPt: 8, label: 'IEEE double-column width (7.16in = 516pt)' }
2248
- }
2249
- const DEFAULT_PRINT_TARGET = 'ieee-single'
2250
- const ACADEMIC_CANVAS_REVIEW_WIDTH = 1500
2251
-
2252
- function resolvePrintTarget(print) {
2253
- const base = PRINT_TARGETS[print?.target] || PRINT_TARGETS[DEFAULT_PRINT_TARGET]
2254
- const widthPt = isFiniteNumber(print?.widthPt) && print.widthPt > 0 ? print.widthPt : base.widthPt
2255
- const minPt = isFiniteNumber(print?.minPt) && print.minPt > 0 ? print.minPt : base.minPt
2256
- const label = widthPt === base.widthPt ? base.label : `custom print width (${widthPt}pt)`
2257
- return { widthPt, minPt, label }
2258
- }
2259
-
2260
- /**
2261
- * Warn when an academic canvas is so wide that labels drop below 8pt after
2262
- * the figure is scaled to IEEE single-column width (3.5in = 252pt).
2263
- * @param {Object} spec
2264
- * @returns {string[]} warnings
2265
- */
2266
- function collectAcademicLayoutSizeWarning(spec) {
2267
- let canvasWidth = null
2268
- try {
2269
- const explicit = parseCanvasSize(spec.meta?.canvas)
2270
- if (explicit) canvasWidth = explicit.width
2271
- } catch {
2272
- return []
2273
- }
2274
- if (canvasWidth == null) {
2275
- let maxX = 0
2276
- for (const node of spec.nodes || []) {
2277
- const bounds = normalizeNodeBounds(node)
2278
- if (bounds) maxX = Math.max(maxX, bounds.x + bounds.width)
2279
- }
2280
- if (maxX > 0) canvasWidth = maxX + 80
2281
- }
2282
- const print = spec.meta?.print
2283
- if (canvasWidth == null) return []
2284
- if (!print && canvasWidth <= ACADEMIC_CANVAS_REVIEW_WIDTH) return []
2285
- const target = resolvePrintTarget(print)
2286
-
2287
- let minFontSize = Infinity
2288
- for (const node of spec.nodes || []) {
2289
- const fontSize = node.style?.fontSize
2290
- if (typeof fontSize === 'number') minFontSize = Math.min(minFontSize, fontSize)
2291
- }
2292
- if (!Number.isFinite(minFontSize)) minFontSize = FONT_LADDER.node
2293
-
2294
- const effectivePt = (minFontSize * target.widthPt) / canvasWidth
2295
- if (effectivePt >= target.minPt) return []
2296
-
2297
- const requiredFontSize = Math.ceil((canvasWidth * target.minPt) / target.widthPt)
2298
- return [
2299
- `Academic figure canvas is ${canvasWidth}px wide. Scaled to ${target.label}, the smallest label font (${minFontSize}px) prints at ~${effectivePt.toFixed(1)}pt (fontSize x ${target.widthPt} / canvas width), below the ${target.minPt}pt floor. Raise label fontSize to >= ${requiredFontSize}, narrow the canvas, set meta.print to a wider target, or split the figure.`
2300
- ]
2301
- }
2302
-
2303
- const KNOWN_META_KEYS = new Set([
2304
- 'title',
2305
- 'description',
2306
- 'theme',
2307
- 'palette',
2308
- 'layout',
2309
- 'routing',
2310
- 'profile',
2311
- 'figureType',
2312
- 'source',
2313
- 'canvas',
2314
- 'font',
2315
- 'print',
2316
- 'legend',
2317
- 'replication',
2318
- 'adapter',
2319
- 'template'
2320
- ])
2321
-
2322
- const KNOWN_NODE_STYLE_KEYS = new Set([
2323
- 'fillColor',
2324
- 'strokeColor',
2325
- 'strokeWidth',
2326
- 'fontColor',
2327
- 'fontSize',
2328
- 'fontFamily',
2329
- 'fontStyle',
2330
- 'fontWeight',
2331
- 'bold',
2332
- 'italic',
2333
- 'align',
2334
- 'verticalAlign',
2335
- 'spacingLeft',
2336
- 'spacingRight',
2337
- 'spacingTop',
2338
- 'spacingBottom'
2339
- ])
2340
-
2341
- const KNOWN_MODULE_KEYS = new Set(['id', 'label', 'identity', 'color', 'style'])
2342
-
2343
- /**
2344
- * Warn about spec keys the renderer silently ignores (schema drift):
2345
- * unknown meta keys, unknown node.style keys, unknown module keys.
2346
- * @param {Object} spec
2347
- * @returns {string[]} warnings
2348
- */
2349
- export function validateSchemaDrift(spec) {
2350
- const warnings = []
2351
-
2352
- const metaUnknown = Object.keys(spec.meta || {}).filter((key) => !KNOWN_META_KEYS.has(key))
2353
- if (metaUnknown.length > 0) {
2354
- warnings.push(
2355
- `Unknown meta key(s) ${metaUnknown.map((key) => `"${key}"`).join(', ')} are ignored by the renderer. Supported keys: ${[...KNOWN_META_KEYS].join(', ')}.`
2356
- )
2357
- }
2358
-
2359
- for (const node of spec.nodes || []) {
2360
- const unknown = Object.keys(node.style || {}).filter((key) => !KNOWN_NODE_STYLE_KEYS.has(key))
2361
- if (unknown.length > 0) {
2362
- warnings.push(
2363
- `Node "${node.id}" style has unknown key(s) ${unknown.map((key) => `"${key}"`).join(', ')}; they are ignored. Use top-level node fields (e.g. type, icon) for shape selection.`
2364
- )
2365
- }
2366
- }
2367
-
2368
- for (const module of spec.modules || []) {
2369
- const unknown = Object.keys(module || {}).filter((key) => !KNOWN_MODULE_KEYS.has(key))
2370
- if (unknown.length > 0) {
2371
- warnings.push(
2372
- `Module "${module.id}" has unknown key(s) ${unknown.map((key) => `"${key}"`).join(', ')}; they are ignored (module bounds are computed from member nodes).`
2373
- )
2374
- }
2375
- }
2376
-
2377
- return warnings
2378
- }
2379
-
2380
- export function validateAcademicProfile(spec) {
2381
- const warnings = []
2382
- const profile = resolveProfile(spec)
2383
- if (profile !== 'academic-paper') return warnings
2384
-
2385
- const theme = spec.meta?.theme || 'academic'
2386
- if (!['academic', 'academic-color'].includes(theme)) {
2387
- warnings.push('Academic-paper profile should use academic or academic-color theme.')
2388
- }
2389
- if (!spec.meta?.figureType) {
2390
- warnings.push(`Academic-paper profile should set meta.figureType to one of ${ACADEMIC_FIGURE_TYPES.join(', ')}.`)
2391
- }
2392
- if (!spec.meta?.title) {
2393
- warnings.push('Academic-paper profile requires meta.title for figure captioning.')
2394
- }
2395
- if (!spec.meta?.description) {
2396
- warnings.push('Academic-paper profile should include meta.description for figure context.')
2397
- }
2398
-
2399
- const usesIcons = (spec.nodes || []).some((node) => node.icon)
2400
- const connectorTypes = new Set((spec.edges || []).map((edge) => edge.type || 'primary'))
2401
- if ((usesIcons || connectorTypes.size > 1) && !spec.meta?.legend) {
2402
- warnings.push('Academic-paper profile should include meta.legend when icons or multiple connector styles are used.')
2403
- }
2404
-
2405
- const verboseLabels = []
2406
- for (const node of spec.nodes || []) {
2407
- // Compact legends/callouts are single text nodes by design (see the
2408
- // playbook's node-efficient patterns); they are exempt from this rule.
2409
- if (node.type === 'text') continue
2410
- const visibleLength = estimateVisibleLabelLength(node.label)
2411
- const lineCount = countManualLabelLines(node.label)
2412
- if (visibleLength > 40 || lineCount > 3) {
2413
- verboseLabels.push(`node "${node.id}"`)
2414
- }
2415
- }
2416
- if (verboseLabels.length > 0) {
2417
- warnings.push(
2418
- `Academic-paper labels should stay concise. Labels longer than 40 visible characters or 3 manual lines were found on ${verboseLabels.join(', ')}.`
2419
- )
2420
- }
2421
-
2422
- if (theme === 'academic') {
2423
- const colorOverrides = collectAcademicColorOverrideWarnings(spec, loadTheme(theme))
2424
- if (colorOverrides.length > 0) {
2425
- warnings.push(
2426
- `Academic theme expects grayscale-safe explicit overrides. Non-grayscale color overrides found on ${colorOverrides.join(', ')}.`
2427
- )
2428
- }
2429
- }
2430
-
2431
- warnings.push(...collectAcademicLayoutSizeWarning(spec))
2432
-
2433
- return warnings
2434
- }
2435
-
2436
- export function validateEdgeQuality(spec, layout) {
2437
- const warnings = []
2438
- const routedEdges = buildRoutedEdges(spec, layout)
2439
- const corridorMap = new Map()
2440
-
2441
- for (const edge of routedEdges) {
2442
- const style = edge.style || {}
2443
- const sourcePos = layout.positions.get(edge.from)
2444
- const targetPos = layout.positions.get(edge.to)
2445
- if (!sourcePos || !targetPos) continue
2446
-
2447
- const hasWaypoints = edge.waypoints?.length > 0
2448
- const cpPairs = [
2449
- ['exitX', 'exitY'],
2450
- ['entryX', 'entryY']
2451
- ]
2452
- for (const [xKey, yKey] of cpPairs) {
2453
- const x = style[xKey]
2454
- const y = style[yKey]
2455
- if (x === undefined || y === undefined) continue
2456
- const corner = (x === 0 || x === 1) && (y === 0 || y === 1)
2457
- if (corner) {
2458
- warnings.push(
2459
- `Edge "${edge.from}->${edge.to}" uses corner connection point ${xKey}/${yKey}. Use face midpoints or distributed face slots.`
2460
- )
2461
- }
2462
- }
2463
-
2464
- if (!hasWaypoints && edge.__routing) {
2465
- const orientation = edge.__routing.orientation
2466
- const vertical = orientation === 'vertical'
2467
- const exitFrac = vertical ? style.exitX : style.exitY
2468
- const entryFrac = vertical ? style.entryX : style.entryY
2469
- if (exitFrac !== undefined && entryFrac !== undefined) {
2470
- const absExit = vertical
2471
- ? sourcePos.x + exitFrac * sourcePos.width
2472
- : sourcePos.y + exitFrac * sourcePos.height
2473
- const absEntry = vertical
2474
- ? targetPos.x + entryFrac * targetPos.width
2475
- : targetPos.y + entryFrac * targetPos.height
2476
- const delta = Math.abs(absExit - absEntry)
2477
- if (delta > 0.5 && sharedAxisInterval(sourcePos, targetPos, orientation)) {
2478
- warnings.push(
2479
- `Edge "${edge.from}->${edge.to}" bends ${Math.round(delta)}px off a straight ${orientation} line. ` +
2480
- 'A collinear connection exists on this axis; use the same absolute exit/entry coordinate.'
2481
- )
2482
- }
2483
- }
2484
- }
2485
-
2486
- if (!hasWaypoints) {
2487
- const sourceCenterX = sourcePos.x + sourcePos.width / 2
2488
- const sourceCenterY = sourcePos.y + sourcePos.height / 2
2489
- const targetCenterX = targetPos.x + targetPos.width / 2
2490
- const targetCenterY = targetPos.y + targetPos.height / 2
2491
- const horizontalGap = Math.abs(targetCenterX - sourceCenterX) - sourcePos.width / 2 - targetPos.width / 2
2492
- const verticalGap = Math.abs(targetCenterY - sourceCenterY) - sourcePos.height / 2 - targetPos.height / 2
2493
- const finalSegment = edge.__routing?.orientation === 'horizontal' ? horizontalGap : verticalGap
2494
- if (finalSegment < 30) {
2495
- warnings.push(
2496
- `Edge "${edge.from}->${edge.to}" has a short final segment (${Math.round(finalSegment)}px). Keep the last segment at least 30px.`
2497
- )
2498
- }
2499
- }
2500
-
2501
- if (hasWaypoints) {
2502
- for (let i = 1; i < edge.waypoints.length; i++) {
2503
- const prev = edge.waypoints[i - 1]
2504
- const curr = edge.waypoints[i]
2505
- if (Math.abs(prev.x - curr.x) < 1 && Math.abs(prev.y - curr.y) < 1) {
2506
- warnings.push(
2507
- `Edge "${edge.from}->${edge.to}" contains degenerate waypoint ${i}. Consecutive waypoints must differ by at least 1px.`
2508
- )
2509
- }
2510
- }
2511
- }
2512
-
2513
- if (edge.__routing) {
2514
- const faceAxis =
2515
- edge.__routing.orientation === 'horizontal'
2516
- ? `${edge.from}:${edge.__routing.sourceFace}:${style.exitY}`
2517
- : `${edge.from}:${edge.__routing.sourceFace}:${style.exitX}`
2518
- if (!corridorMap.has(faceAxis)) corridorMap.set(faceAxis, [])
2519
- corridorMap.get(faceAxis).push(edge)
2520
- }
2521
-
2522
- if (edge.label && !hasWaypoints) {
2523
- const gap =
2524
- edge.__routing?.orientation === 'horizontal'
2525
- ? Math.abs(targetPos.x + targetPos.width / 2 - (sourcePos.x + sourcePos.width / 2))
2526
- : Math.abs(targetPos.y + targetPos.height / 2 - (sourcePos.y + sourcePos.height / 2))
2527
- if (gap < 60) {
2528
- warnings.push(
2529
- `Edge "${edge.from}->${edge.to}" is short for a labeled connector. Increase spacing or offset the label further from the line.`
2530
- )
2531
- }
2532
- }
2533
- }
2534
-
2535
- for (const [corridor, group] of corridorMap.entries()) {
2536
- if (group.length < 2) continue
2537
- const slots = group.map((edge) =>
2538
- edge.__routing?.orientation === 'horizontal' ? edge.style.exitY : edge.style.exitX
2539
- )
2540
- const uniqueSlots = new Set(slots.map((slot) => Number(slot).toFixed(2)))
2541
- if (uniqueSlots.size !== group.length) {
2542
- warnings.push(
2543
- `Edges sharing corridor "${corridor}" overlap on the same face position. Distribute them across 0.25/0.5/0.75 slots.`
2544
- )
2545
- }
2546
- }
2547
-
2548
- return warnings
2549
- }
2550
-
2551
- const LABEL_COLLISION_WARNING_CAP = 12
2552
-
2553
- function rectsOverlap(a, b) {
2554
- return a.x < b.x + b.width && b.x < a.x + a.width && a.y < b.y + b.height && b.y < a.y + a.height
2555
- }
2556
-
2557
- function polylineIntersectsRect(points, rect) {
2558
- for (let i = 1; i < points.length; i++) {
2559
- if (segmentIntersectsRect(points[i - 1], points[i], rect)) return true
2560
- }
2561
- return false
2562
- }
2563
-
2564
- /**
2565
- * Approximate the rendered polyline of a routed edge: waypoints when present,
2566
- * otherwise the exit/entry points with the standard orthogonal mid-bend.
2567
- */
2568
- function edgePolyline(edge, sourcePos, targetPos) {
2569
- const style = edge.style || {}
2570
- if (edge.waypoints?.length) {
2571
- const first = edge.waypoints[0]
2572
- const last = edge.waypoints[edge.waypoints.length - 1]
2573
- return [
2574
- clipPointToRect(sourcePos, first),
2575
- ...edge.waypoints.map((point) => ({ x: point.x, y: point.y })),
2576
- clipPointToRect(targetPos, last)
2577
- ]
2578
- }
2579
- if (style.exitX === undefined || style.entryX === undefined) return null
2580
- const start = { x: sourcePos.x + style.exitX * sourcePos.width, y: sourcePos.y + style.exitY * sourcePos.height }
2581
- const end = { x: targetPos.x + style.entryX * targetPos.width, y: targetPos.y + style.entryY * targetPos.height }
2582
- const vertical = edge.__routing?.orientation === 'vertical'
2583
- const straight = vertical ? Math.abs(start.x - end.x) < 0.5 : Math.abs(start.y - end.y) < 0.5
2584
- if (straight) return [start, end]
2585
- if (vertical) {
2586
- const midY = (start.y + end.y) / 2
2587
- return [start, { x: start.x, y: midY }, { x: end.x, y: midY }, end]
2588
- }
2589
- const midX = (start.x + end.x) / 2
2590
- return [start, { x: midX, y: start.y }, { x: midX, y: end.y }, end]
2591
- }
2592
-
2593
- function pointAlongPolyline(points, fraction) {
2594
- let total = 0
2595
- for (let i = 1; i < points.length; i++) {
2596
- total += Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y)
2597
- }
2598
- let remaining = total * fraction
2599
- for (let i = 1; i < points.length; i++) {
2600
- const segment = Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y)
2601
- if (remaining <= segment) {
2602
- const t = segment === 0 ? 0 : remaining / segment
2603
- return {
2604
- x: points[i - 1].x + (points[i].x - points[i - 1].x) * t,
2605
- y: points[i - 1].y + (points[i].y - points[i - 1].y) * t
2606
- }
2607
- }
2608
- remaining -= segment
2609
- }
2610
- return points[points.length - 1]
2611
- }
2612
-
2613
- /**
2614
- * Heuristic lint for label clashes: edge labels on their own line, labels
2615
- * crossing other connectors, standalone text boxes crossed by connectors, and
2616
- * label/label overlap. Extents are estimated, so treat results as warnings.
2617
- */
2618
- export function validateLabelCollisions(spec, layout) {
2619
- const warnings = []
2620
- const routedEdges = buildRoutedEdges(spec, layout)
2621
- const lines = []
2622
- const labelRects = []
2623
-
2624
- for (const edge of routedEdges) {
2625
- const sourcePos = layout.positions.get(edge.from)
2626
- const targetPos = layout.positions.get(edge.to)
2627
- if (!sourcePos || !targetPos) continue
2628
- const points = edgePolyline(edge, sourcePos, targetPos)
2629
- if (!points) continue
2630
- const key = `${edge.from}->${edge.to}`
2631
- lines.push({ key, points })
2632
-
2633
- const label = formatNetworkEdgeLabel(edge)
2634
- if (!label) continue
2635
- const fraction = edge.labelPosition === 'start' ? 0.2 : edge.labelPosition === 'end' ? 0.8 : 0.5
2636
- const anchor = pointAlongPolyline(points, fraction)
2637
- const offset = resolveEdgeLabelOffset(edge)
2638
- const extent = measureLabelExtent(label, resolveEdgeLabelFontSize(edge), 2)
2639
- labelRects.push({
2640
- key,
2641
- isTextNode: false,
2642
- rect: {
2643
- x: anchor.x + offset.x - extent.width / 2,
2644
- y: anchor.y + offset.y - extent.height / 2,
2645
- width: extent.width,
2646
- height: extent.height
2647
- }
2648
- })
2649
- }
2650
-
2651
- for (const node of spec.nodes || []) {
2652
- if (detectSemanticType(node.label, node.type, node.network) !== 'text') continue
2653
- const pos = layout.positions.get(node.id)
2654
- if (!pos) continue
2655
- labelRects.push({ key: `text "${node.id}"`, isTextNode: true, rect: pos })
2656
- }
2657
-
2658
- for (const label of labelRects) {
2659
- for (const line of lines) {
2660
- if (!label.isTextNode && label.key === line.key) {
2661
- if (polylineIntersectsRect(line.points, label.rect)) {
2662
- warnings.push(
2663
- `Label of edge "${label.key}" sits on its own connector; offset it 12-20px away from the line via labelOffset.`
2664
- )
2665
- }
2666
- continue
2667
- }
2668
- if (polylineIntersectsRect(line.points, label.rect)) {
2669
- const subject = label.isTextNode ? `Text node ${label.key}` : `Label of edge "${label.key}"`
2670
- warnings.push(`${subject} overlaps connector "${line.key}"; move the label or reroute the edge.`)
2671
- }
2672
- }
2673
- }
2674
-
2675
- for (let i = 0; i < labelRects.length; i++) {
2676
- for (let j = i + 1; j < labelRects.length; j++) {
2677
- if (rectsOverlap(labelRects[i].rect, labelRects[j].rect)) {
2678
- warnings.push(
2679
- `Labels ${labelRects[i].key} and ${labelRects[j].key} overlap; separate them or shorten the text.`
2680
- )
2681
- }
2682
- }
2683
- }
2684
-
2685
- if (warnings.length > LABEL_COLLISION_WARNING_CAP) {
2686
- const extra = warnings.length - LABEL_COLLISION_WARNING_CAP
2687
- return warnings
2688
- .slice(0, LABEL_COLLISION_WARNING_CAP)
2689
- .concat([`(+${extra} more label-collision warnings truncated)`])
2690
- }
2691
- return warnings
2692
- }
2693
-
2694
- // ============================================================================
2695
- // Layout Quality Metrics
2696
- // ============================================================================
2697
-
2698
- function rectCenter(rect) {
2699
- return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 }
2700
- }
2701
-
2702
- function clipPointToRect(rect, toward) {
2703
- const center = rectCenter(rect)
2704
- const dx = toward.x - center.x
2705
- const dy = toward.y - center.y
2706
- if (dx === 0 && dy === 0) return center
2707
- const halfW = rect.width / 2
2708
- const halfH = rect.height / 2
2709
- const scaleX = dx !== 0 ? halfW / Math.abs(dx) : Infinity
2710
- const scaleY = dy !== 0 ? halfH / Math.abs(dy) : Infinity
2711
- const t = Math.min(scaleX, scaleY, 1)
2712
- return { x: center.x + dx * t, y: center.y + dy * t }
2713
- }
2714
-
2715
- function orientationOf(a, b, c) {
2716
- const value = (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)
2717
- if (Math.abs(value) < 1e-9) return 0
2718
- return value > 0 ? 1 : -1
2719
- }
2720
-
2721
- function segmentsProperlyIntersect(p1, p2, p3, p4) {
2722
- const o1 = orientationOf(p1, p2, p3)
2723
- const o2 = orientationOf(p1, p2, p4)
2724
- const o3 = orientationOf(p3, p4, p1)
2725
- const o4 = orientationOf(p3, p4, p2)
2726
- return o1 !== o2 && o3 !== o4 && o1 !== 0 && o2 !== 0 && o3 !== 0 && o4 !== 0
2727
- }
2728
-
2729
- function segmentIntersectsRect(p1, p2, rect) {
2730
- const inside = (p) => p.x > rect.x && p.x < rect.x + rect.width && p.y > rect.y && p.y < rect.y + rect.height
2731
- if (inside(p1) || inside(p2)) return true
2732
- const corners = [
2733
- { x: rect.x, y: rect.y },
2734
- { x: rect.x + rect.width, y: rect.y },
2735
- { x: rect.x + rect.width, y: rect.y + rect.height },
2736
- { x: rect.x, y: rect.y + rect.height }
2737
- ]
2738
- for (let i = 0; i < 4; i++) {
2739
- if (segmentsProperlyIntersect(p1, p2, corners[i], corners[(i + 1) % 4])) return true
2740
- }
2741
- return false
2742
- }
2743
-
2744
- /**
2745
- * Readability metrics over the routed layout: how many edges cut through
2746
- * unrelated nodes, how many edge pairs cross, and the total polyline length.
2747
- * Edge endpoints are approximated by center-to-boundary clipping; waypoints
2748
- * are honored, so orthogonal (elk) routes are measured on their real path.
2749
- */
2750
- export function computeLayoutQualityMetrics(spec, options = {}) {
2751
- const theme = options.theme || loadTheme(spec.meta?.theme || 'tech-blue')
2752
- const layout = options.layout || calculateLayout(planFontSizes(spec, theme).planned, theme)
2753
- const routedEdges = buildRoutedEdges(spec, layout)
2754
- const { positions } = layout
2755
-
2756
- let edgeNodeCrossings = 0
2757
- let edgeEdgeCrossings = 0
2758
- let totalEdgeLength = 0
2759
-
2760
- const polylines = []
2761
- for (const edge of routedEdges) {
2762
- const sourceRect = positions.get(edge.from)
2763
- const targetRect = positions.get(edge.to)
2764
- if (!sourceRect || !targetRect) continue
2765
- const waypoints = edge.waypoints || []
2766
- const firstToward = waypoints[0] || rectCenter(targetRect)
2767
- const lastToward = waypoints[waypoints.length - 1] || rectCenter(sourceRect)
2768
- const points = [clipPointToRect(sourceRect, firstToward), ...waypoints, clipPointToRect(targetRect, lastToward)]
2769
- polylines.push({ edge, points })
2770
- for (let i = 1; i < points.length; i++) {
2771
- totalEdgeLength += Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y)
2772
- }
2773
- }
2774
-
2775
- for (const { edge, points } of polylines) {
2776
- for (const node of spec.nodes || []) {
2777
- if (node.id === edge.from || node.id === edge.to) continue
2778
- const rect = positions.get(node.id)
2779
- if (!rect) continue
2780
- let crosses = false
2781
- for (let i = 1; i < points.length && !crosses; i++) {
2782
- crosses = segmentIntersectsRect(points[i - 1], points[i], rect)
2783
- }
2784
- if (crosses) edgeNodeCrossings++
2785
- }
2786
- }
2787
-
2788
- for (let i = 0; i < polylines.length; i++) {
2789
- for (let j = i + 1; j < polylines.length; j++) {
2790
- const a = polylines[i]
2791
- const b = polylines[j]
2792
- const shared =
2793
- a.edge.from === b.edge.from || a.edge.from === b.edge.to || a.edge.to === b.edge.from || a.edge.to === b.edge.to
2794
- if (shared) continue
2795
- let crosses = false
2796
- for (let si = 1; si < a.points.length && !crosses; si++) {
2797
- for (let sj = 1; sj < b.points.length && !crosses; sj++) {
2798
- crosses = segmentsProperlyIntersect(a.points[si - 1], a.points[si], b.points[sj - 1], b.points[sj])
2799
- }
2800
- }
2801
- if (crosses) edgeEdgeCrossings++
2802
- }
2803
- }
2804
-
2805
- return { edgeNodeCrossings, edgeEdgeCrossings, totalEdgeLength: Math.round(totalEdgeLength) }
2806
- }
2807
-
2808
- // ============================================================================
2809
- // Main Export Functions
2810
- // ============================================================================
2811
-
2812
- /**
2813
- * Convert specification to draw.io XML
2814
- * @param {Object} spec - Parsed specification object
2815
- * @param {Object} options - Optional settings
2816
- * @returns {string} draw.io XML
2817
- */
2818
- /**
2819
- * Materialize the font-size ladder into a cloned spec so layout, style
2820
- * assembly, and validators all see one consistent value per text surface.
2821
- * Only fills sizes the author left blank; explicit style.fontSize wins.
2822
- */
2823
- function planFontSizes(spec, theme) {
2824
- const planned = structuredClone(spec)
2825
- const autoNodes = new Set()
2826
- for (const node of planned.nodes || []) {
2827
- if (isFiniteNumber(node.style?.fontSize)) continue
2828
- const semanticType = detectSemanticType(node.label, node.type, node.network)
2829
- const nodeTheme = theme.node?.[semanticType] || theme.node?.default || {}
2830
- const fontSize =
2831
- semanticType === 'text'
2832
- ? (theme.node?.text?.fontSize ?? FONT_LADDER.text)
2833
- : (nodeTheme.fontSize ?? theme.node?.default?.fontSize ?? FONT_LADDER.node)
2834
- node.style = { ...(node.style || {}), fontSize }
2835
- autoNodes.add(node.id)
2836
- }
2837
- for (const edge of planned.edges || []) {
2838
- if (isFiniteNumber(edge.style?.fontSize)) continue
2839
- if (!formatNetworkEdgeLabel(edge)) continue
2840
- edge.style = { ...(edge.style || {}), fontSize: FONT_LADDER.edgeLabel }
2841
- }
2842
- return { planned, autoNodes }
2843
- }
2844
-
2845
- // MathJax renders delimited math much narrower than its LaTeX source text,
2846
- // so every per-glyph width estimate must skip math-bearing labels.
2847
- function hasMathMarkers(label) {
2848
- return /\$\$|\\\(|\\\)/.test(String(label || ''))
2849
- }
2850
-
2851
- /** Largest font size whose estimated label extent stays inside bounds. */
2852
- function maxFontSizeForBounds(label, bounds) {
2853
- const lines = String(label).split(/\n|<br\s*\/?>/i)
2854
- let maxUnits = 0
2855
- for (const line of lines) {
2856
- let units = 0
2857
- for (const ch of line) {
2858
- units += /[\u3000-\u9fff\uff00-\uffef]/.test(ch) ? 1.05 : 0.6
2859
- }
2860
- maxUnits = Math.max(maxUnits, units)
2861
- }
2862
- const widthFit = maxUnits > 0 ? (bounds.width - 8) / maxUnits : Infinity
2863
- const heightFit = (bounds.height - 4) / (lines.length * 1.4)
2864
- return Math.min(widthFit, heightFit)
2865
- }
2866
-
2867
- /**
2868
- * Uniformly shrink auto-assigned label fonts so explicit-bounds boxes
2869
- * (replicate flow) contain their labels: per class (node/text), take the
2870
- * largest size every box can hold, clamped to [FONT_SIZE_FLOOR, assigned].
2871
- * Author-set fontSize values are never touched; leftover overflows are
2872
- * reported by validateLabelFit.
2873
- */
2874
- function shrinkFontsToBounds(spec, autoNodes) {
2875
- const limits = { node: Infinity, text: Infinity }
2876
- const members = []
2877
- for (const node of spec.nodes || []) {
2878
- if (!autoNodes.has(node.id) || !node.label) continue
2879
- if (node.icon || deriveNodeIcon(node)) continue
2880
- const semanticType = detectSemanticType(node.label, node.type, node.network)
2881
- if (CONTENT_SIZE_EXEMPT_TYPES.has(semanticType)) continue
2882
- const cls = semanticType === 'text' ? 'text' : 'node'
2883
- members.push({ node, cls })
2884
- if (hasMathMarkers(node.label)) continue
2885
- const bounds = normalizeNodeBounds(node)
2886
- if (!bounds) continue
2887
- limits[cls] = Math.min(limits[cls], maxFontSizeForBounds(node.label, bounds))
2888
- }
2889
- for (const { node, cls } of members) {
2890
- const limit = limits[cls]
2891
- if (!Number.isFinite(limit) || limit >= node.style.fontSize) continue
2892
- node.style.fontSize = Math.max(FONT_SIZE_FLOOR, Math.floor(limit))
2893
- }
2894
- }
2895
-
2896
- /**
2897
- * Report labels that cannot fit their explicit bounds even after the class
2898
- * shrink bottomed out at FONT_SIZE_FLOOR, or whose author-set fontSize is too
2899
- * large for the declared box.
2900
- */
2901
- export function validateLabelFit(spec) {
2902
- const warnings = []
2903
- for (const node of spec.nodes || []) {
2904
- if (!node.label) continue
2905
- if (node.icon || deriveNodeIcon(node)) continue
2906
- const semanticType = detectSemanticType(node.label, node.type, node.network)
2907
- if (semanticType === 'text' || CONTENT_SIZE_EXEMPT_TYPES.has(semanticType)) continue
2908
- if (hasMathMarkers(node.label)) continue
2909
- const bounds = normalizeNodeBounds(node)
2910
- if (!bounds) continue
2911
- const fontSize = node.style?.fontSize ?? FONT_LADDER.node
2912
- const extent = measureLabelExtent(node.label, fontSize, 0)
2913
- const neededWidth = extent.width + 8
2914
- const neededHeight = extent.height + 4
2915
- if (neededWidth > bounds.width || neededHeight > bounds.height) {
2916
- warnings.push(
2917
- `Node "${node.id}" label needs ~${neededWidth}x${neededHeight}px at fontSize ${fontSize} but bounds are ` +
2918
- `${bounds.width}x${bounds.height}. Widen the box, shorten the label, or lower style.fontSize.`
2919
- )
2920
- }
2921
- }
2922
- return warnings
2923
- }
2924
-
2925
- export function specToDrawioXml(spec, options = {}) {
2926
- // Validate spec
2927
- if (!spec || typeof spec !== 'object') {
2928
- throw new TypeError('Specification must be a non-null object')
2929
- }
2930
- if (!spec.nodes || !Array.isArray(spec.nodes) || spec.nodes.length === 0) {
2931
- throw new Error('Specification must contain at least one node')
2932
- }
2933
-
2934
- // Check complexity
2935
- const warnings = checkComplexity(spec)
2936
-
2937
- // Direct sync conversion cannot run the async elk pre-pass; surface it.
2938
- if (
2939
- spec.meta?.layout === 'hierarchical' &&
2940
- (spec.nodes || []).some((node) => node.bounds == null && node.position == null)
2941
- ) {
2942
- warnings.push({
2943
- level: 'info',
2944
- message:
2945
- 'Layout "hierarchical" placed auto nodes with the legacy grid. Convert via the CLI (or run applyAutoLayout first) for edge-aware layered layout.'
2946
- })
2947
- }
2948
-
2949
- // Security: always throw on fatal-level warnings regardless of strict mode
2950
- const fatals = warnings.filter((w) => w.level === 'fatal')
2951
- if (fatals.length > 0) {
2952
- throw new Error('Safety limit exceeded: ' + fatals.map((e) => e.message).join('; '))
2953
- }
2954
-
2955
- // Strict mode: throw on error-level warnings
2956
- if (options.strict) {
2957
- const errors = warnings.filter((w) => w.level === 'error')
2958
- if (errors.length > 0) {
2959
- throw new Error('Complexity check failed: ' + errors.map((e) => e.message).join('; '))
2960
- }
2961
- }
2962
-
2963
- // Load theme
2964
- const themeName = spec.meta?.theme || 'tech-blue'
2965
- const baseTheme = options.theme || loadTheme(themeName)
2966
- const loadedPalette = loadPalette(spec.meta?.palette, {
2967
- theme: baseTheme,
2968
- userDir: options.paletteDir
2969
- })
2970
-
2971
- // Materialize font sizes on an internal clone (author YAML stays untouched)
2972
- // and shrink classes whose explicit-bounds boxes cannot hold the ladder, so
2973
- // layout sizes boxes with the final per-class font.
2974
- const { planned, autoNodes } = planFontSizes(spec, baseTheme)
2975
- spec = planned
2976
- shrinkFontsToBounds(spec, autoNodes)
2977
- // Content-neutral semantic types never join palette mapping: plain text
2978
- // boxes and formulas always inherit theme styling and must not consume or
2979
- // recolor palette entries.
2980
- const paletteNeutralTypes = new Set(['text', 'formula'])
2981
- const paletteApplication = applyPalette(baseTheme, loadedPalette.palette, {
2982
- semanticTypes: spec.nodes
2983
- .map((node) => detectSemanticType(node.label, node.type, node.network))
2984
- .filter((type) => !paletteNeutralTypes.has(type)),
2985
- tokenIndexes: collectPaletteTokenIndexes(spec)
2986
- })
2987
- const theme = paletteApplication.theme
2988
- const layout = calculateLayout(spec, theme)
2989
-
2990
- // Run validation passes
2991
- const colorWarnings = validateColorScheme(spec, theme, loadedPalette.palette)
2992
- const layoutWarnings = validateLayoutConsistency(spec)
2993
- const connectionPointWarnings = validateConnectionPointPolicy(spec)
2994
- const edgeWarnings = validateEdgeQuality(spec, layout)
2995
- const textNodeWarnings = validateTextNodeStyles(spec)
2996
- const labelFitWarnings = validateLabelFit(spec)
2997
- const labelCollisionWarnings = validateLabelCollisions(spec, layout)
2998
- const academicWarnings = validateAcademicProfile(spec)
2999
- const shapeValidation = validateShapeReferences(spec)
3000
- const schemaDriftWarnings = validateSchemaDrift(spec)
3001
- const legacyDiagnostics = [
3002
- ...colorWarnings,
3003
- ...layoutWarnings,
3004
- ...connectionPointWarnings,
3005
- ...edgeWarnings,
3006
- ...textNodeWarnings,
3007
- ...labelFitWarnings,
3008
- ...labelCollisionWarnings,
3009
- ...academicWarnings,
3010
- ...shapeValidation.warnings,
3011
- ...schemaDriftWarnings
3012
- ].map((message) => ({ level: 'warning', code: 'LEGACY', message }))
3013
-
3014
- if (shapeValidation.errors.length > 0 && !options.allowUnknownShapes) {
3015
- const error = new Error(
3016
- `Spec validation failed: ${shapeValidation.errors.length} unknown stencil reference(s):\n` +
3017
- shapeValidation.errors.map((message) => ` • ${message}`).join('\n') +
3018
- '\nRun `node scripts/cli.js search <keyword>` to find real stencil names, or pass --allow-unknown-shapes to downgrade.'
3019
- )
3020
- error.validationErrors = shapeValidation.errors
3021
- throw error
3022
- }
3023
-
3024
- if (shapeValidation.errors.length > 0) {
3025
- legacyDiagnostics.push(
3026
- ...shapeValidation.errors.map((message) => ({ level: 'warning', code: 'LEGACY', message }))
3027
- )
3028
- }
3029
-
3030
- const paletteDiagnostics = [
3031
- ...loadedPalette.diagnostics,
3032
- ...paletteApplication.diagnostics,
3033
- ...validatePaletteUsage(loadedPalette.palette, paletteApplication.usage, {
3034
- canvasBackground: theme.canvas?.background || theme.colors?.background || '#FFFFFF',
3035
- profile: spec.meta?.profile,
3036
- printTarget: spec.meta?.print?.target,
3037
- strict: Boolean(options.strict)
3038
- })
3039
- ]
3040
- const allDiagnostics = [...legacyDiagnostics, ...paletteDiagnostics]
3041
- const formatDiagnostic = (item) => `[${item.code}] ${item.message}`
3042
-
3043
- if (allDiagnostics.length > 0) {
3044
- if (!options.silent) {
3045
- console.warn('\n⚠️ drawio spec validation diagnostics:')
3046
- allDiagnostics.forEach((item) => console.warn(` • [${item.level}] ${formatDiagnostic(item)}`))
3047
- }
3048
- const errors = allDiagnostics.filter((item) => item.level === 'error')
3049
- const strictFailures = options.strict ? allDiagnostics.filter((item) => item.level !== 'info') : errors
3050
- if (strictFailures.length > 0) {
3051
- throw new Error(
3052
- `Spec validation failed with ${strictFailures.length} diagnostic(s):\n` +
3053
- strictFailures.map((item) => ` • ${formatDiagnostic(item)}`).join('\n')
3054
- )
3055
- }
3056
- }
3057
-
3058
- // Merge all warnings for callers that requested them
3059
- warnings.push(...allDiagnostics)
3060
-
3061
- // Build XML
3062
- const xml = buildXml(spec, theme, layout, options)
3063
-
3064
- // Return with warnings if requested
3065
- if (options.returnWarnings) {
3066
- return { xml, warnings }
3067
- }
3068
-
3069
- return xml
3070
- }
3071
-
3072
- /**
3073
- * Parse YAML string to specification object
3074
- * @param {string} yamlText - YAML specification text
3075
- * @returns {Object} Parsed specification
3076
- */
3077
- export function parseSpecYaml(yamlText) {
3078
- if (yamlText == null) {
3079
- throw new TypeError('yamlText must be a string')
3080
- }
3081
- if (yamlText.trim() === '') {
3082
- return { meta: {}, nodes: [], edges: [], modules: [] }
3083
- }
3084
- let parsed
3085
- try {
3086
- parsed = yaml.load(yamlText, { schema: yaml.DEFAULT_SCHEMA })
3087
- } catch (err) {
3088
- throw new Error(`Failed to parse YAML specification: ${err.message}`)
3089
- }
3090
- const spec = parsed || {}
3091
- spec.meta = spec.meta || {}
3092
- spec.nodes = spec.nodes || []
3093
- spec.edges = spec.edges || []
3094
- spec.modules = spec.modules || []
3095
- validateSpec(spec)
3096
- return spec
3097
- }
3098
-
3099
- /**
3100
- * Validate spec structure and values for safety and correctness.
3101
- * Throws descriptive error on first validation failure.
3102
- * @param {Object} spec - Parsed specification object
3103
- */
3104
- export function validateSpec(spec) {
3105
- const VALID_ID = /^[A-Za-z][A-Za-z0-9_-]*$/
3106
- const VALID_THEME = /^[a-z][a-z0-9-]*$/
3107
- const VALID_ICON = /^[a-zA-Z][a-zA-Z0-9._-]*$/
3108
- const VALID_LAYOUTS = ['horizontal', 'vertical', 'hierarchical', 'star', 'mesh', 'tiered']
3109
- const VALID_ROUTINGS = ['orthogonal', 'rounded']
3110
- const VALID_PROFILES = ['default', 'academic-paper', 'engineering-review']
3111
- const VALID_FIGURE_TYPES = ['architecture', 'roadmap', 'workflow']
3112
- const VALID_SOURCES = ['generated', 'replicated', 'edited']
3113
- const VALID_REPLICATION_MODES = ['preserve-original', 'theme-first']
3114
- const VALID_REPLICATION_TARGETS = ['canvas', 'nodes', 'edges', 'modules', 'mixed']
3115
- const VALID_CONFIDENCE_LEVELS = ['low', 'medium', 'high']
3116
- const VALID_LABEL_POSITIONS = ['start', 'center', 'end']
3117
- const VALID_ALIGN = ['left', 'center', 'right']
3118
- const VALID_VERTICAL_ALIGN = ['top', 'middle', 'bottom']
3119
- const SAFE_STYLE_TEXT = /^[^;<>"\r\n]{1,120}$/
3120
-
3121
- const validateIdentityMetadata = (identity, context) => {
3122
- if (identity == null) return null
3123
- try {
3124
- return normalizeIdentity(identity)
3125
- } catch (error) {
3126
- throw new Error(`${context} identity is invalid: ${error.message}`)
3127
- }
3128
- }
3129
-
3130
- const validateBounds = (bounds, context) => {
3131
- if (typeof bounds !== 'object' || bounds == null || Array.isArray(bounds)) {
3132
- throw new Error(`${context} bounds must be an object when provided`)
3133
- }
3134
- for (const field of ['x', 'y', 'width', 'height']) {
3135
- if (!isFiniteNumber(bounds[field])) {
3136
- throw new Error(`${context} bounds.${field} must be a finite number`)
3137
- }
3138
- }
3139
- if (bounds.width <= 0 || bounds.height <= 0) {
3140
- throw new Error(`${context} bounds width and height must be greater than 0`)
3141
- }
3142
- }
3143
-
3144
- const validateTextStyle = (style, context) => {
3145
- if (style == null) return
3146
- if (typeof style !== 'object' || Array.isArray(style)) {
3147
- throw new Error(`${context} style must be an object when provided`)
3148
- }
3149
- if (style.fontFamily != null && (typeof style.fontFamily !== 'string' || !SAFE_STYLE_TEXT.test(style.fontFamily))) {
3150
- throw new Error(`${context} style.fontFamily must be a safe font-family string`)
3151
- }
3152
- if (style.align != null && !VALID_ALIGN.includes(style.align)) {
3153
- throw new Error(`${context} style.align must be one of ${VALID_ALIGN.join(', ')}`)
3154
- }
3155
- if (style.verticalAlign != null && !VALID_VERTICAL_ALIGN.includes(style.verticalAlign)) {
3156
- throw new Error(`${context} style.verticalAlign must be one of ${VALID_VERTICAL_ALIGN.join(', ')}`)
3157
- }
3158
- if (style.fontStyle != null && (!Number.isInteger(style.fontStyle) || style.fontStyle < 0 || style.fontStyle > 7)) {
3159
- throw new Error(`${context} style.fontStyle must be an integer between 0 and 7`)
3160
- }
3161
- if (style.italic != null && typeof style.italic !== 'boolean') {
3162
- throw new Error(`${context} style.italic must be a boolean when provided`)
3163
- }
3164
- if (style.bold != null && typeof style.bold !== 'boolean') {
3165
- throw new Error(`${context} style.bold must be a boolean when provided`)
3166
- }
3167
- for (const field of ['spacingLeft', 'spacingRight', 'spacingTop', 'spacingBottom']) {
3168
- if (style[field] != null && !isFiniteNumber(style[field])) {
3169
- throw new Error(`${context} style.${field} must be a finite number`)
3170
- }
3171
- }
3172
- }
3173
-
3174
- // Hard limits
3175
- const MAX_NODES = 100
3176
- const MAX_EDGES = 200
3177
- const MAX_MODULES = 20
3178
-
3179
- // meta validation
3180
- if (spec.meta?.theme != null && !VALID_THEME.test(spec.meta.theme)) {
3181
- throw new Error(`Invalid meta.theme "${spec.meta.theme}": must match /^[a-z][a-z0-9-]*$/`)
3182
- }
3183
- if (spec.meta?.palette != null && !VALID_THEME.test(spec.meta.palette)) {
3184
- throw new Error(`Invalid meta.palette "${spec.meta.palette}": must match /^[a-z][a-z0-9-]*$/`)
3185
- }
3186
- if (spec.meta?.layout != null && !VALID_LAYOUTS.includes(spec.meta.layout)) {
3187
- throw new Error(`Invalid meta.layout "${spec.meta.layout}": must be one of ${VALID_LAYOUTS.join(', ')}`)
3188
- }
3189
- if (spec.meta?.routing != null && !VALID_ROUTINGS.includes(spec.meta.routing)) {
3190
- throw new Error(`Invalid meta.routing "${spec.meta.routing}": must be one of ${VALID_ROUTINGS.join(', ')}`)
3191
- }
3192
- if (spec.meta?.profile != null && !VALID_PROFILES.includes(spec.meta.profile)) {
3193
- throw new Error(`Invalid meta.profile "${spec.meta.profile}": must be one of ${VALID_PROFILES.join(', ')}`)
3194
- }
3195
- if (spec.meta?.figureType != null && !VALID_FIGURE_TYPES.includes(spec.meta.figureType)) {
3196
- throw new Error(
3197
- `Invalid meta.figureType "${spec.meta.figureType}": must be one of ${VALID_FIGURE_TYPES.join(', ')}`
3198
- )
3199
- }
3200
- if (spec.meta?.source != null && !VALID_SOURCES.includes(spec.meta.source)) {
3201
- throw new Error(`Invalid meta.source "${spec.meta.source}": must be one of ${VALID_SOURCES.join(', ')}`)
3202
- }
3203
- if (spec.meta?.adapter != null) {
3204
- const adapter = spec.meta.adapter
3205
- if (typeof adapter !== 'object' || adapter == null || Array.isArray(adapter)) {
3206
- throw new Error('meta.adapter must be an object when provided')
3207
- }
3208
- const allowed = new Set(['projectionVersion', 'name', 'domain', 'mode', 'locator'])
3209
- const unknown = Object.keys(adapter).filter((key) => !allowed.has(key))
3210
- if (unknown.length > 0) throw new Error(`meta.adapter has unknown field "${unknown[0]}"`)
3211
- if (adapter.projectionVersion !== 1) throw new Error('meta.adapter.projectionVersion must be 1')
3212
- for (const field of ['name', 'domain']) {
3213
- if (typeof adapter[field] !== 'string' || !/^[a-z][a-z0-9-]{0,63}$/.test(adapter[field])) {
3214
- throw new Error(`meta.adapter.${field} must match /^[a-z][a-z0-9-]{0,63}$/`)
3215
- }
3216
- }
3217
- if (!['code', 'declared', 'live', 'drift'].includes(adapter.mode)) {
3218
- throw new Error('meta.adapter.mode must be one of code, declared, live, drift')
3219
- }
3220
- const locatorParts = typeof adapter.locator === 'string' ? adapter.locator.replaceAll('\\', '/').split('/') : []
3221
- let locatorDepth = 0
3222
- let locatorEscapesRoot = false
3223
- for (const part of locatorParts) {
3224
- if (part === '' || part === '.') continue
3225
- if (part === '..') {
3226
- if (locatorDepth === 0) locatorEscapesRoot = true
3227
- else locatorDepth--
3228
- } else {
3229
- locatorDepth++
3230
- }
3231
- }
3232
- if (
3233
- typeof adapter.locator !== 'string' ||
3234
- adapter.locator.length === 0 ||
3235
- adapter.locator.length > 512 ||
3236
- /^[A-Za-z]:/.test(adapter.locator) ||
3237
- /^[\\/]/.test(adapter.locator) ||
3238
- /[\u0000-\u001f\u007f]/.test(adapter.locator) ||
3239
- locatorEscapesRoot
3240
- ) {
3241
- throw new Error('meta.adapter.locator must be a safe relative path')
3242
- }
3243
- }
3244
- if (spec.meta?.canvas != null) {
3245
- parseCanvasSize(spec.meta.canvas)
3246
- }
3247
- if (spec.meta?.font != null) {
3248
- if (typeof spec.meta.font !== 'object' || spec.meta.font == null || Array.isArray(spec.meta.font)) {
3249
- throw new Error('meta.font must be an object when provided')
3250
- }
3251
- for (const field of ['primary', 'cjk', 'formula']) {
3252
- if (typeof spec.meta.font[field] !== 'string' || !SAFE_STYLE_TEXT.test(spec.meta.font[field])) {
3253
- throw new Error(`meta.font.${field} must be a safe font-family string`)
3254
- }
3255
- }
3256
- }
3257
- if (spec.meta?.print != null) {
3258
- const print = spec.meta.print
3259
- if (typeof print !== 'object' || Array.isArray(print)) {
3260
- throw new Error('meta.print must be an object when provided')
3261
- }
3262
- if (print.target != null && !PRINT_TARGETS[print.target]) {
3263
- throw new Error(
3264
- `Invalid meta.print.target "${print.target}": must be one of ${Object.keys(PRINT_TARGETS).join(', ')}`
3265
- )
3266
- }
3267
- for (const field of ['widthPt', 'minPt']) {
3268
- if (print[field] != null && (!isFiniteNumber(print[field]) || print[field] <= 0)) {
3269
- throw new Error(`meta.print.${field} must be a positive number when provided`)
3270
- }
3271
- }
3272
- if (print.target == null && print.widthPt == null) {
3273
- throw new Error('meta.print requires target or widthPt')
3274
- }
3275
- }
3276
- if (spec.meta?.replication != null) {
3277
- if (typeof spec.meta.replication !== 'object' || Array.isArray(spec.meta.replication)) {
3278
- throw new Error('meta.replication must be an object when provided')
3279
- }
3280
- if (spec.meta.replication.colorMode != null && !VALID_REPLICATION_MODES.includes(spec.meta.replication.colorMode)) {
3281
- throw new Error(
3282
- `Invalid meta.replication.colorMode "${spec.meta.replication.colorMode}": ` +
3283
- `must be one of ${VALID_REPLICATION_MODES.join(', ')}`
3284
- )
3285
- }
3286
- if (spec.meta.replication.background != null && typeof spec.meta.replication.background !== 'string') {
3287
- throw new Error('meta.replication.background must be a string when provided')
3288
- }
3289
- if (spec.meta.replication.palette != null) {
3290
- if (!Array.isArray(spec.meta.replication.palette)) {
3291
- throw new Error('meta.replication.palette must be an array when provided')
3292
- }
3293
- spec.meta.replication.palette.forEach((entry, index) => {
3294
- if (typeof entry !== 'object' || entry == null || Array.isArray(entry)) {
3295
- throw new Error(`meta.replication.palette[${index}] must be an object`)
3296
- }
3297
- if (entry.hex != null && typeof entry.hex !== 'string') {
3298
- throw new Error(`meta.replication.palette[${index}].hex must be a string when provided`)
3299
- }
3300
- if (entry.role != null && typeof entry.role !== 'string') {
3301
- throw new Error(`meta.replication.palette[${index}].role must be a string when provided`)
3302
- }
3303
- if (entry.appliesTo != null && !VALID_REPLICATION_TARGETS.includes(entry.appliesTo)) {
3304
- throw new Error(
3305
- `Invalid meta.replication.palette[${index}].appliesTo "${entry.appliesTo}": ` +
3306
- `must be one of ${VALID_REPLICATION_TARGETS.join(', ')}`
3307
- )
3308
- }
3309
- if (entry.confidence != null && !VALID_CONFIDENCE_LEVELS.includes(entry.confidence)) {
3310
- throw new Error(
3311
- `Invalid meta.replication.palette[${index}].confidence "${entry.confidence}": ` +
3312
- `must be one of ${VALID_CONFIDENCE_LEVELS.join(', ')}`
3313
- )
3314
- }
3315
- if (entry.notes != null && typeof entry.notes !== 'string') {
3316
- throw new Error(`meta.replication.palette[${index}].notes must be a string when provided`)
3317
- }
3318
- })
3319
- }
3320
- if (spec.meta.replication.confidenceNotes != null) {
3321
- if (!Array.isArray(spec.meta.replication.confidenceNotes)) {
3322
- throw new Error('meta.replication.confidenceNotes must be an array when provided')
3323
- }
3324
- spec.meta.replication.confidenceNotes.forEach((note, index) => {
3325
- if (typeof note !== 'string') {
3326
- throw new Error(`meta.replication.confidenceNotes[${index}] must be a string`)
3327
- }
3328
- })
3329
- }
3330
- }
3331
-
3332
- // Hard limit checks
3333
- if (spec.nodes.length > MAX_NODES) {
3334
- throw new Error(`Too many nodes (${spec.nodes.length}): maximum is ${MAX_NODES}`)
3335
- }
3336
- if (spec.edges.length > MAX_EDGES) {
3337
- throw new Error(`Too many edges (${spec.edges.length}): maximum is ${MAX_EDGES}`)
3338
- }
3339
- if (spec.modules.length > MAX_MODULES) {
3340
- throw new Error(`Too many modules (${spec.modules.length}): maximum is ${MAX_MODULES}`)
3341
- }
3342
-
3343
- // Node validation
3344
- const nodeIdentityKeys = new Set()
3345
- for (const node of spec.nodes) {
3346
- if (!node.id || !VALID_ID.test(node.id)) {
3347
- throw new Error(`Invalid node id "${node.id}": must match /^[A-Za-z][A-Za-z0-9_-]*$/`)
3348
- }
3349
- if (!node.label || typeof node.label !== 'string') {
3350
- throw new Error(`Node "${node.id}" is missing a required string label`)
3351
- }
3352
- const nodeIdentity = validateIdentityMetadata(node.identity, `Node "${node.id}"`)
3353
- if (nodeIdentity) {
3354
- const key = `${nodeIdentity.scheme}\0${nodeIdentity.key}`
3355
- if (nodeIdentityKeys.has(key))
3356
- throw new Error(`Duplicate node identity "${nodeIdentity.scheme}:${nodeIdentity.key}"`)
3357
- nodeIdentityKeys.add(key)
3358
- } else if (spec.meta?.adapter) {
3359
- throw new Error(`Node "${node.id}" requires identity when meta.adapter is present`)
3360
- }
3361
- if (node.type != null && !SHAPE_STYLES[node.type]) {
3362
- throw new Error(
3363
- `Node "${node.id}" has unknown type "${node.type}": must be one of ${Object.keys(SHAPE_STYLES).join(', ')}`
3364
- )
3365
- }
3366
- if (node.icon != null && !VALID_ICON.test(node.icon)) {
3367
- throw new Error(`Node "${node.id}" has invalid icon "${node.icon}": must match /^[a-zA-Z][a-zA-Z0-9._-]*$/`)
3368
- }
3369
- if (node.network != null) {
3370
- if (typeof node.network !== 'object' || Array.isArray(node.network)) {
3371
- throw new Error(`Node "${node.id}" network must be an object when provided`)
3372
- }
3373
- const networkStringFields = ['device', 'role', 'vendor', 'zone', 'ip', 'cidr']
3374
- for (const field of networkStringFields) {
3375
- if (node.network[field] != null && typeof node.network[field] !== 'string') {
3376
- throw new Error(`Node "${node.id}" network.${field} must be a string when provided`)
3377
- }
3378
- }
3379
- if (node.network.device != null && !VALID_ICON.test(node.network.device)) {
3380
- throw new Error(
3381
- `Node "${node.id}" has invalid network.device "${node.network.device}": must match /^[a-zA-Z][a-zA-Z0-9._-]*$/`
3382
- )
3383
- }
3384
- }
3385
- if (node.position != null) {
3386
- if (typeof node.position.x !== 'number' || typeof node.position.y !== 'number') {
3387
- throw new Error(`Node "${node.id}" position must have numeric x and y`)
3388
- }
3389
- }
3390
- if (node.bounds != null) {
3391
- validateBounds(node.bounds, `Node "${node.id}"`)
3392
- }
3393
- validateTextStyle(node.style, `Node "${node.id}"`)
3394
- }
3395
-
3396
- // Edge validation
3397
- const edgeIds = new Set()
3398
- const edgeIdentityKeys = new Set()
3399
- for (const edge of spec.edges) {
3400
- if (edge.id != null) {
3401
- if (typeof edge.id !== 'string' || !VALID_ID.test(edge.id)) {
3402
- throw new Error(`Invalid edge.id "${edge.id}": must match node ID pattern`)
3403
- }
3404
- if (edgeIds.has(edge.id)) throw new Error(`Duplicate edge id "${edge.id}"`)
3405
- edgeIds.add(edge.id)
3406
- }
3407
- const edgeIdentity = validateIdentityMetadata(edge.identity, `Edge "${edge.from}->${edge.to}"`)
3408
- if (edgeIdentity) {
3409
- const key = `${edgeIdentity.scheme}\0${edgeIdentity.key}`
3410
- if (edgeIdentityKeys.has(key)) {
3411
- throw new Error(`Duplicate edge identity "${edgeIdentity.scheme}:${edgeIdentity.key}"`)
3412
- }
3413
- edgeIdentityKeys.add(key)
3414
- } else if (spec.meta?.adapter) {
3415
- throw new Error(`Edge "${edge.from}->${edge.to}" requires identity when meta.adapter is present`)
3416
- }
3417
- if (!edge.from || !VALID_ID.test(edge.from)) {
3418
- throw new Error(`Invalid edge.from "${edge.from}": must match node ID pattern`)
3419
- }
3420
- if (!edge.to || !VALID_ID.test(edge.to)) {
3421
- throw new Error(`Invalid edge.to "${edge.to}": must match node ID pattern`)
3422
- }
3423
- if (edge.label != null && typeof edge.label !== 'string') {
3424
- throw new Error(`Edge "${edge.from}->${edge.to}" label must be a string`)
3425
- }
3426
- if (edge.labelPosition != null && !VALID_LABEL_POSITIONS.includes(edge.labelPosition)) {
3427
- throw new Error(
3428
- `Invalid edge.labelPosition "${edge.labelPosition}": must be one of ${VALID_LABEL_POSITIONS.join(', ')}`
3429
- )
3430
- }
3431
- if (edge.labelOffset != null) {
3432
- if (typeof edge.labelOffset !== 'object' || Array.isArray(edge.labelOffset)) {
3433
- throw new Error(`Edge "${edge.from}->${edge.to}" labelOffset must be an object when provided`)
3434
- }
3435
- if (!isFiniteNumber(edge.labelOffset.x) || !isFiniteNumber(edge.labelOffset.y)) {
3436
- throw new Error(`Edge "${edge.from}->${edge.to}" labelOffset must have numeric x and y`)
3437
- }
3438
- }
3439
- if (edge.srcInterface != null && typeof edge.srcInterface !== 'string') {
3440
- throw new Error(`Edge "${edge.from}->${edge.to}" srcInterface must be a string`)
3441
- }
3442
- if (edge.dstInterface != null && typeof edge.dstInterface !== 'string') {
3443
- throw new Error(`Edge "${edge.from}->${edge.to}" dstInterface must be a string`)
3444
- }
3445
- if (edge.ip != null && typeof edge.ip !== 'string') {
3446
- throw new Error(`Edge "${edge.from}->${edge.to}" ip must be a string`)
3447
- }
3448
- if (edge.vlan != null && typeof edge.vlan !== 'string' && !Number.isInteger(edge.vlan)) {
3449
- throw new Error(`Edge "${edge.from}->${edge.to}" vlan must be a string or integer`)
3450
- }
3451
- if (edge.bandwidth != null && typeof edge.bandwidth !== 'string') {
3452
- throw new Error(`Edge "${edge.from}->${edge.to}" bandwidth must be a string`)
3453
- }
3454
- if (edge.linkType != null && typeof edge.linkType !== 'string') {
3455
- throw new Error(`Edge "${edge.from}->${edge.to}" linkType must be a string`)
3456
- }
3457
- if (edge.waypoints != null) {
3458
- if (!Array.isArray(edge.waypoints)) {
3459
- throw new Error(`Edge "${edge.from}->${edge.to}" waypoints must be an array`)
3460
- }
3461
- edge.waypoints.forEach((point, index) => {
3462
- if (typeof point?.x !== 'number' || typeof point?.y !== 'number') {
3463
- throw new Error(`Edge "${edge.from}->${edge.to}" waypoint ${index} must have numeric x and y`)
3464
- }
3465
- })
3466
- }
3467
- }
3468
-
3469
- // Module validation
3470
- const moduleIdentityKeys = new Set()
3471
- for (const mod of spec.modules) {
3472
- if (!mod.id || !VALID_ID.test(mod.id)) {
3473
- throw new Error(`Invalid module id "${mod.id}": must match /^[A-Za-z][A-Za-z0-9_-]*$/`)
3474
- }
3475
- if (!mod.label || typeof mod.label !== 'string') {
3476
- throw new Error(`Module "${mod.id}" is missing a required string label`)
3477
- }
3478
- const moduleIdentity = validateIdentityMetadata(mod.identity, `Module "${mod.id}"`)
3479
- if (moduleIdentity) {
3480
- const key = `${moduleIdentity.scheme}\0${moduleIdentity.key}`
3481
- if (moduleIdentityKeys.has(key)) {
3482
- throw new Error(`Duplicate module identity "${moduleIdentity.scheme}:${moduleIdentity.key}"`)
3483
- }
3484
- moduleIdentityKeys.add(key)
3485
- } else if (spec.meta?.adapter) {
3486
- throw new Error(`Module "${mod.id}" requires identity when meta.adapter is present`)
3487
- }
3488
- }
3489
- }
3490
-
3491
- function getXmlAttribute(tagText, name) {
3492
- const match = new RegExp(`\\b${name}="([^"]*)"`).exec(tagText)
3493
- return match ? match[1] : null
3494
- }
3495
-
3496
- function parseXmlNumber(value) {
3497
- if (value == null || value === '') return null
3498
- const number = Number(value)
3499
- return Number.isFinite(number) ? number : null
3500
- }
3501
-
3502
- function isImageCell(cellAttrs) {
3503
- const style = getXmlAttribute(cellAttrs, 'style') || ''
3504
- return /\bshape=image\b/.test(style) || /\bimage=/.test(style) || style.includes('data:image')
3505
- }
3506
-
3507
- function collectFullPageImageErrors(xml) {
3508
- const errors = []
3509
- const graphMatch = /<mxGraphModel\s([^>]*)>/.exec(xml)
3510
- if (!graphMatch) return errors
3511
-
3512
- const pageWidth = parseXmlNumber(getXmlAttribute(graphMatch[1], 'pageWidth'))
3513
- const pageHeight = parseXmlNumber(getXmlAttribute(graphMatch[1], 'pageHeight'))
3514
- if (!pageWidth || !pageHeight || pageWidth <= 0 || pageHeight <= 0) return errors
3515
-
3516
- const cellPattern = /<mxCell\s([^>]*?)(\/?)>/g
3517
- let match
3518
- while ((match = cellPattern.exec(xml)) !== null) {
3519
- const cellAttrs = match[1]
3520
- const isSelfClosing = match[2] === '/'
3521
- if (isSelfClosing) continue
3522
- if (!/\bvertex="1"/.test(cellAttrs) || !isImageCell(cellAttrs)) continue
3523
-
3524
- const closeIndex = xml.indexOf('</mxCell>', cellPattern.lastIndex)
3525
- if (closeIndex === -1) continue
3526
- const cellBody = xml.slice(cellPattern.lastIndex, closeIndex)
3527
- const geometryMatch = /<mxGeometry\s([^>]*)\/?>/.exec(cellBody)
3528
- if (!geometryMatch) continue
3529
-
3530
- const x = parseXmlNumber(getXmlAttribute(geometryMatch[1], 'x')) ?? 0
3531
- const y = parseXmlNumber(getXmlAttribute(geometryMatch[1], 'y')) ?? 0
3532
- const width = parseXmlNumber(getXmlAttribute(geometryMatch[1], 'width'))
3533
- const height = parseXmlNumber(getXmlAttribute(geometryMatch[1], 'height'))
3534
- if (!width || !height || width <= 0 || height <= 0) continue
3535
-
3536
- const coversWidth = width >= pageWidth * 0.9
3537
- const coversHeight = height >= pageHeight * 0.9
3538
- const coversArea = width * height >= pageWidth * pageHeight * 0.8
3539
- const nearOrigin = Math.abs(x) <= pageWidth * 0.05 && Math.abs(y) <= pageHeight * 0.05
3540
- if (coversWidth && coversHeight && coversArea && nearOrigin) {
3541
- const id = getXmlAttribute(cellAttrs, 'id') || '(unknown)'
3542
- errors.push(
3543
- `Cell "${id}" appears to be a full-page embedded image; rebuild the reference with native draw.io shapes instead.`
3544
- )
3545
- }
3546
- }
3547
-
3548
- return errors
3549
- }
3550
-
3551
- /**
3552
- * Validate draw.io XML structure
3553
- * @param {string} xml - draw.io XML string
3554
- * @returns {{ valid: boolean, errors: string[] }}
3555
- */
3556
- export function validateXml(xml) {
3557
- const errors = []
3558
- const warnings = []
3559
-
3560
- if (typeof xml !== 'string' || xml.trim() === '') {
3561
- return { valid: false, errors: ['XML must be a non-empty string'], warnings: [] }
3562
- }
3563
-
3564
- // Check root structure
3565
- if (!xml.includes('<mxGraphModel')) {
3566
- errors.push('Missing <mxGraphModel element')
3567
- }
3568
- if (!xml.includes('<root>')) {
3569
- errors.push('Missing <root> element')
3570
- }
3571
- if (!xml.includes('</root>')) {
3572
- errors.push('Missing </root> closing tag')
3573
- }
3574
- if (!xml.includes('</mxGraphModel>')) {
3575
- errors.push('Missing </mxGraphModel> closing tag')
3576
- }
3577
-
3578
- // Check required root cells
3579
- if (!xml.includes('<mxCell id="0"/>')) {
3580
- errors.push('Missing required <mxCell id="0"/>')
3581
- }
3582
- if (!xml.includes('<mxCell id="1" parent="0"/>')) {
3583
- errors.push('Missing required <mxCell id="1" parent="0"/>')
3584
- }
3585
-
3586
- // Extract all mxCell id values
3587
- const idPattern = /<mxCell\s[^>]*\bid="([^"]+)"/g
3588
- const allIds = []
3589
- let match
3590
- while ((match = idPattern.exec(xml)) !== null) {
3591
- allIds.push(match[1])
3592
- }
3593
-
3594
- // Check ID uniqueness
3595
- const seen = new Set()
3596
- const duplicates = new Set()
3597
- for (const id of allIds) {
3598
- if (seen.has(id)) {
3599
- duplicates.add(id)
3600
- }
3601
- seen.add(id)
3602
- }
3603
- for (const dup of duplicates) {
3604
- errors.push(`Duplicate cell ID: "${dup}"`)
3605
- }
3606
-
3607
- // Collect vertex cell IDs (cells with vertex="1")
3608
- const vertexPattern = /<mxCell\s[^>]*\bid="([^"]+)"[^>]*\bvertex="1"/g
3609
- const vertexIds = new Set()
3610
- while ((match = vertexPattern.exec(xml)) !== null) {
3611
- vertexIds.add(match[1])
3612
- }
3613
- // Also check alternate attribute order
3614
- const vertexPattern2 = /<mxCell\s[^>]*\bvertex="1"[^>]*\bid="([^"]+)"/g
3615
- while ((match = vertexPattern2.exec(xml)) !== null) {
3616
- vertexIds.add(match[1])
3617
- }
3618
-
3619
- // Check edge source/target references
3620
- const edgePattern = /<mxCell\s[^>]*\bedge="1"[^>]*/g
3621
- while ((match = edgePattern.exec(xml)) !== null) {
3622
- const edgeAttr = match[0]
3623
- const srcMatch = /\bsource="([^"]+)"/.exec(edgeAttr)
3624
- const tgtMatch = /\btarget="([^"]+)"/.exec(edgeAttr)
3625
- const idMatch = /\bid="([^"]+)"/.exec(edgeAttr)
3626
- const edgeId = idMatch ? idMatch[1] : '(unknown)'
3627
-
3628
- if (!srcMatch || !tgtMatch) {
3629
- const missing = !srcMatch && !tgtMatch ? 'source and target' : !srcMatch ? 'source' : 'target'
3630
- warnings.push(
3631
- `Edge "${edgeId}" is not bound to nodes (missing ${missing}). ` +
3632
- 'Connect modules with native bound edges (source/target node ids) instead of floating connectors.'
3633
- )
3634
- }
3635
- if (srcMatch && !vertexIds.has(srcMatch[1])) {
3636
- errors.push(`Edge "${edgeId}" references nonexistent source ID: "${srcMatch[1]}"`)
3637
- }
3638
- if (tgtMatch && !vertexIds.has(tgtMatch[1])) {
3639
- errors.push(`Edge "${edgeId}" references nonexistent target ID: "${tgtMatch[1]}"`)
3640
- }
3641
- }
3642
-
3643
- // Arrow-look-alike vertices and opaque plain text boxes
3644
- const cellTagPattern = /<mxCell\s[^>]*>/g
3645
- while ((match = cellTagPattern.exec(xml)) !== null) {
3646
- const tag = match[0]
3647
- if (!/\bvertex="1"/.test(tag)) continue
3648
- const styleMatch = /\bstyle="([^"]*)"/.exec(tag)
3649
- if (!styleMatch) continue
3650
- const style = styleMatch[1]
3651
- const idMatch = /\bid="([^"]+)"/.exec(tag)
3652
- const cellId = idMatch ? idMatch[1] : '(unknown)'
3653
-
3654
- const arrowShape = /(?:^|;)shape=(singleArrow|doubleArrow|triangle|mxgraph\.arrows2\.[^;"]*)/.exec(style)
3655
- if (arrowShape) {
3656
- warnings.push(
3657
- `Cell "${cellId}" uses arrow shape "${arrowShape[1]}" as a connector look-alike. ` +
3658
- 'Connect modules with a native bound edge (endArrow=open) instead of standalone arrow shapes.'
3659
- )
3660
- }
3661
-
3662
- if (/^text;/.test(style) && /fillColor=(#fff(fff)?|white)\b/i.test(style)) {
3663
- warnings.push(
3664
- `Cell "${cellId}" is a plain text box with a white background. ` +
3665
- 'Plain text boxes must stay transparent: fillColor=none;strokeColor=none;labelBackgroundColor=none.'
3666
- )
3667
- }
3668
- }
3669
-
3670
- errors.push(...collectFullPageImageErrors(xml))
3671
-
3672
- return { valid: errors.length === 0, errors, warnings }
3673
- }
3674
-
3675
- /**
3676
- * Complexity check - warn if diagram is too complex
3677
- */
3678
- export function checkComplexity(spec) {
3679
- const warnings = []
3680
-
3681
- const nodeCount = spec.nodes?.length || 0
3682
- const edgeCount = spec.edges?.length || 0
3683
- const moduleCount = spec.modules?.length || 0
3684
-
3685
- // Fatal hard caps (security limits — always enforced)
3686
- if (nodeCount > 100) {
3687
- warnings.push({ level: 'fatal', message: `Node count (${nodeCount}) exceeds safety limit of 100` })
3688
- } else if (nodeCount > 60) {
3689
- warnings.push({
3690
- level: 'error',
3691
- message: `Too many nodes (${nodeCount}). Consider splitting into sub-diagrams. For academic figures, aim for 40 nodes or fewer.`
3692
- })
3693
- } else if (nodeCount > 40) {
3694
- warnings.push({
3695
- level: 'warning',
3696
- message: `Many nodes (${nodeCount}). Consider splitting for clarity or using compact patterns (e.g., single-node legends).`
3697
- })
3698
- }
3699
-
3700
- if (edgeCount > 200) {
3701
- warnings.push({ level: 'fatal', message: `Edge count (${edgeCount}) exceeds safety limit of 200` })
3702
- } else if (edgeCount > 50) {
3703
- warnings.push({ level: 'error', message: `Too many edges (${edgeCount}). Consider hierarchical layout.` })
3704
- } else if (edgeCount > 30) {
3705
- warnings.push({ level: 'warning', message: `Many edges (${edgeCount}). Consider simplifying.` })
3706
- }
3707
-
3708
- if (moduleCount > 20) {
3709
- warnings.push({ level: 'fatal', message: `Module count (${moduleCount}) exceeds safety limit of 20` })
3710
- } else if (moduleCount > 5) {
3711
- warnings.push({ level: 'warning', message: `Many modules (${moduleCount}). Consider zoom layers.` })
3712
- }
3713
-
3714
- // Check label lengths
3715
- const longLabelIds = []
3716
- for (const node of spec.nodes || []) {
3717
- if (node.label && node.label.length > 200) {
3718
- warnings.push({
3719
- level: 'fatal',
3720
- message: `Node "${node.id}" label exceeds 200 characters (${node.label.length} chars)`
3721
- })
3722
- } else if (node.label && node.label.length > 14) {
3723
- longLabelIds.push(node.id)
3724
- }
3725
- }
3726
- if (longLabelIds.length > 0) {
3727
- const sample = longLabelIds
3728
- .slice(0, 3)
3729
- .map((id) => `"${id}"`)
3730
- .join(', ')
3731
- const suffix = longLabelIds.length > 3 ? ` +${longLabelIds.length - 3} more` : ''
3732
- warnings.push({
3733
- level: 'info',
3734
- message: `${longLabelIds.length} node label(s) exceed 14 characters (${sample}${suffix}). Consider abbreviation.`
3735
- })
3736
- }
3737
-
3738
- return warnings
3739
- }