create-yss-spec 2.2.10 → 3.0.1

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 (1721) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/cli.js +0 -1
  4. package/template/.agents/skills/.strategic-design-skills-manifest.json +35 -0
  5. package/template/.agents/skills/.yss-skills-manifest.json +0 -2
  6. package/template/.agents/skills/ask-matt/SKILL.md +1 -1
  7. package/template/.agents/skills/code-review/SKILL.md +1 -1
  8. package/template/.agents/skills/code-review/references/yss-review-standards.md +1 -1
  9. package/template/.agents/skills/lombok/SKILL.md +1 -1
  10. package/template/.agents/skills/mapstruct/SKILL.md +1 -1
  11. package/template/.agents/skills/prototype-review/SKILL.md +7 -6
  12. package/template/.agents/skills/wayfinder/SKILL.md +2 -2
  13. package/template/.agents/skills/yss-antd-design/SKILL.md +8 -7
  14. package/template/.agents/skills/yss-antd-design/references/evidence.md +11 -6
  15. package/template/.agents/skills/yss-api-integration/SKILL.md +2 -2
  16. package/template/.agents/skills/yss-application/SKILL.md +2 -2
  17. package/template/.agents/skills/yss-audit-log/SKILL.md +2 -2
  18. package/template/.agents/skills/yss-audit-log/references/source-index.md +1 -1
  19. package/template/.agents/skills/yss-cache/SKILL.md +2 -2
  20. package/template/.agents/skills/yss-cache/references/source-index.md +1 -1
  21. package/template/.agents/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  22. package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  23. package/template/.agents/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  24. package/template/.agents/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  25. package/template/.agents/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  26. package/template/.agents/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  27. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  28. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  29. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  30. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  31. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  32. package/template/.agents/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  33. package/template/.agents/skills/yss-design-system/SKILL.md +6 -6
  34. package/template/.agents/skills/yss-distributed-id/SKILL.md +2 -2
  35. package/template/.agents/skills/yss-distributed-id/references/source-index.md +1 -1
  36. package/template/.agents/skills/yss-domain/SKILL.md +3 -2
  37. package/template/.agents/skills/yss-domain/agents/openai.yaml +2 -2
  38. package/template/.agents/skills/yss-domain/references/domain-layer-guide.md +2 -0
  39. package/template/.agents/skills/yss-dto/SKILL.md +8 -2
  40. package/template/.agents/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  41. package/template/.agents/skills/yss-dto/references/source-index.md +1 -1
  42. package/template/.agents/skills/yss-excel-mvc/SKILL.md +2 -2
  43. package/template/.agents/skills/yss-excel-mvc/references/source-index.md +1 -1
  44. package/template/.agents/skills/yss-exception/SKILL.md +1 -1
  45. package/template/.agents/skills/yss-exception/references/source-index.md +1 -1
  46. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  47. package/template/.agents/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  48. package/template/.agents/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  49. package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  50. package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  51. package/template/.agents/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  52. package/template/.agents/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  53. package/template/.agents/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  54. package/template/.agents/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  55. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  56. package/template/.agents/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  57. package/template/.agents/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  58. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  59. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  60. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  61. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  62. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  63. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  64. package/template/.agents/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  65. package/template/.agents/skills/yss-mybatis/SKILL.md +2 -2
  66. package/template/.agents/skills/yss-mybatis/references/source-index.md +1 -1
  67. package/template/.agents/skills/yss-page-module-development/SKILL.md +1 -1
  68. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +7 -7
  69. package/template/.agents/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  70. package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  71. package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  72. package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +1 -1
  73. package/template/.agents/skills/yss-prototype-stage/SKILL.md +34 -24
  74. package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  75. package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  76. package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  77. package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  78. package/template/.agents/skills/yss-repository/SKILL.md +16 -14
  79. package/template/.agents/skills/yss-repository/agents/openai.yaml +2 -2
  80. package/template/.agents/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  81. package/template/.agents/skills/yss-research/SKILL.md +73 -0
  82. package/template/.agents/skills/yss-research/agents/openai.yaml +3 -0
  83. package/template/.agents/skills/yss-research/assets/evidence-template.yaml +68 -0
  84. package/template/.agents/skills/yss-research/assets/research-brief-template.md +36 -0
  85. package/template/.agents/skills/yss-research/references/evidence-contract.md +42 -0
  86. package/template/.agents/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  87. package/template/.agents/skills/yss-research/tests/run-scenarios.mjs +81 -0
  88. package/template/.agents/skills/yss-resilience4j/SKILL.md +1 -1
  89. package/template/.agents/skills/yss-resilience4j/references/source-index.md +1 -1
  90. package/template/.agents/skills/yss-security-algorithm/SKILL.md +1 -1
  91. package/template/.agents/skills/yss-security-algorithm/references/source-index.md +1 -1
  92. package/template/.agents/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  93. package/template/.agents/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  94. package/template/.agents/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  95. package/template/.agents/skills/yss-stage-decision/SKILL.md +2 -1
  96. package/template/.agents/skills/yss-ui/SKILL.md +2 -1
  97. package/template/.agents/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  98. package/template/.agents/skills/yss-up-springboot3/SKILL.md +1 -1
  99. package/template/.agents/skills/yss-userinfo/SKILL.md +1 -1
  100. package/template/.agents/skills/yss-userinfo/references/source-index.md +1 -1
  101. package/template/.agents/skills/yss-validation/SKILL.md +1 -1
  102. package/template/.agents/skills/yss-validation/references/source-index.md +1 -1
  103. package/template/.agents/skills/yss-web-controller/SKILL.md +17 -11
  104. package/template/.agents/skills/yss-web-controller/agents/openai.yaml +2 -2
  105. package/template/.agents/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  106. package/template/.agents/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  107. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  108. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  109. package/template/.agents/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  110. package/template/.agents/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  111. package/template/.agents/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  112. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  113. package/template/.agents/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  114. package/template/.claude/skills/ask-matt/SKILL.md +1 -1
  115. package/template/.claude/skills/code-review/SKILL.md +1 -1
  116. package/template/.claude/skills/code-review/references/yss-review-standards.md +1 -1
  117. package/template/.claude/skills/lombok/SKILL.md +1 -1
  118. package/template/.claude/skills/mapstruct/SKILL.md +1 -1
  119. package/template/.claude/skills/prototype-review/SKILL.md +7 -6
  120. package/template/.claude/skills/wayfinder/SKILL.md +2 -2
  121. package/template/.claude/skills/yss-antd-design/SKILL.md +8 -7
  122. package/template/.claude/skills/yss-antd-design/references/evidence.md +11 -6
  123. package/template/.claude/skills/yss-api-integration/SKILL.md +2 -2
  124. package/template/.claude/skills/yss-application/SKILL.md +2 -2
  125. package/template/.claude/skills/yss-audit-log/SKILL.md +2 -2
  126. package/template/.claude/skills/yss-audit-log/references/source-index.md +1 -1
  127. package/template/.claude/skills/yss-cache/SKILL.md +2 -2
  128. package/template/.claude/skills/yss-cache/references/source-index.md +1 -1
  129. package/template/.claude/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  130. package/template/.claude/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  131. package/template/.claude/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  132. package/template/.claude/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  133. package/template/.claude/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  134. package/template/.claude/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  135. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  136. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  137. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  138. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  139. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  140. package/template/.claude/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  141. package/template/.claude/skills/yss-design-system/SKILL.md +6 -6
  142. package/template/.claude/skills/yss-distributed-id/SKILL.md +2 -2
  143. package/template/.claude/skills/yss-distributed-id/references/source-index.md +1 -1
  144. package/template/.claude/skills/yss-domain/SKILL.md +3 -2
  145. package/template/.claude/skills/yss-domain/agents/openai.yaml +2 -2
  146. package/template/.claude/skills/yss-domain/references/domain-layer-guide.md +2 -0
  147. package/template/.claude/skills/yss-dto/SKILL.md +8 -2
  148. package/template/.claude/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  149. package/template/.claude/skills/yss-dto/references/source-index.md +1 -1
  150. package/template/.claude/skills/yss-excel-mvc/SKILL.md +2 -2
  151. package/template/.claude/skills/yss-excel-mvc/references/source-index.md +1 -1
  152. package/template/.claude/skills/yss-exception/SKILL.md +1 -1
  153. package/template/.claude/skills/yss-exception/references/source-index.md +1 -1
  154. package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  155. package/template/.claude/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  156. package/template/.claude/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  157. package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  158. package/template/.claude/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  159. package/template/.claude/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  160. package/template/.claude/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  161. package/template/.claude/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  162. package/template/.claude/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  163. package/template/.claude/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  164. package/template/.claude/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  165. package/template/.claude/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  166. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  167. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  168. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  169. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  170. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  171. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  172. package/template/.claude/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  173. package/template/.claude/skills/yss-mybatis/SKILL.md +2 -2
  174. package/template/.claude/skills/yss-mybatis/references/source-index.md +1 -1
  175. package/template/.claude/skills/yss-page-module-development/SKILL.md +1 -1
  176. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +7 -7
  177. package/template/.claude/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  178. package/template/.claude/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  179. package/template/.claude/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  180. package/template/.claude/skills/yss-product-lifecycle/references/state-model.md +1 -1
  181. package/template/.claude/skills/yss-prototype-stage/SKILL.md +34 -24
  182. package/template/.claude/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  183. package/template/.claude/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  184. package/template/.claude/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  185. package/template/.claude/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  186. package/template/.claude/skills/yss-repository/SKILL.md +16 -14
  187. package/template/.claude/skills/yss-repository/agents/openai.yaml +2 -2
  188. package/template/.claude/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  189. package/template/.claude/skills/yss-research/SKILL.md +73 -0
  190. package/template/.claude/skills/yss-research/agents/openai.yaml +3 -0
  191. package/template/.claude/skills/yss-research/assets/evidence-template.yaml +68 -0
  192. package/template/.claude/skills/yss-research/assets/research-brief-template.md +36 -0
  193. package/template/.claude/skills/yss-research/references/evidence-contract.md +42 -0
  194. package/template/.claude/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  195. package/template/.claude/skills/yss-research/tests/run-scenarios.mjs +81 -0
  196. package/template/.claude/skills/yss-resilience4j/SKILL.md +1 -1
  197. package/template/.claude/skills/yss-resilience4j/references/source-index.md +1 -1
  198. package/template/.claude/skills/yss-security-algorithm/SKILL.md +1 -1
  199. package/template/.claude/skills/yss-security-algorithm/references/source-index.md +1 -1
  200. package/template/.claude/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  201. package/template/.claude/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  202. package/template/.claude/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  203. package/template/.claude/skills/yss-stage-decision/SKILL.md +2 -1
  204. package/template/.claude/skills/yss-ui/SKILL.md +2 -1
  205. package/template/.claude/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  206. package/template/.claude/skills/yss-up-springboot3/SKILL.md +1 -1
  207. package/template/.claude/skills/yss-userinfo/SKILL.md +1 -1
  208. package/template/.claude/skills/yss-userinfo/references/source-index.md +1 -1
  209. package/template/.claude/skills/yss-validation/SKILL.md +1 -1
  210. package/template/.claude/skills/yss-validation/references/source-index.md +1 -1
  211. package/template/.claude/skills/yss-web-controller/SKILL.md +17 -11
  212. package/template/.claude/skills/yss-web-controller/agents/openai.yaml +2 -2
  213. package/template/.claude/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  214. package/template/.claude/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  215. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  216. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  217. package/template/.claude/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  218. package/template/.claude/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  219. package/template/.claude/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  220. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  221. package/template/.claude/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  222. package/template/.codex/skills/ask-matt/SKILL.md +1 -1
  223. package/template/.codex/skills/code-review/SKILL.md +1 -1
  224. package/template/.codex/skills/code-review/references/yss-review-standards.md +1 -1
  225. package/template/.codex/skills/lombok/SKILL.md +1 -1
  226. package/template/.codex/skills/mapstruct/SKILL.md +1 -1
  227. package/template/.codex/skills/product-design/package.json +4 -2
  228. package/template/.codex/skills/product-design/skills/research/SKILL.md +22 -0
  229. package/template/.codex/skills/product-design/skills/research/assets/evidence-template.yaml +65 -0
  230. package/template/.codex/skills/product-design/skills/research/assets/research-brief-template.md +33 -0
  231. package/template/.codex/skills/product-design/skills/research/references/evidence-audited.md +80 -0
  232. package/template/.codex/skills/product-design/skills/research/scripts/validate-research-package.mjs +149 -0
  233. package/template/.codex/skills/product-design/skills/research/tests/run-scenarios.mjs +72 -0
  234. package/template/.codex/skills/prototype-review/SKILL.md +7 -6
  235. package/template/.codex/skills/wayfinder/SKILL.md +2 -2
  236. package/template/.codex/skills/yss-antd-design/SKILL.md +8 -7
  237. package/template/.codex/skills/yss-antd-design/references/evidence.md +11 -6
  238. package/template/.codex/skills/yss-api-integration/SKILL.md +2 -2
  239. package/template/.codex/skills/yss-application/SKILL.md +2 -2
  240. package/template/.codex/skills/yss-audit-log/SKILL.md +2 -2
  241. package/template/.codex/skills/yss-audit-log/references/source-index.md +1 -1
  242. package/template/.codex/skills/yss-cache/SKILL.md +2 -2
  243. package/template/.codex/skills/yss-cache/references/source-index.md +1 -1
  244. package/template/.codex/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  245. package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  246. package/template/.codex/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  247. package/template/.codex/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  248. package/template/.codex/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  249. package/template/.codex/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  250. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  251. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  252. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  253. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  254. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  255. package/template/.codex/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  256. package/template/.codex/skills/yss-design-system/SKILL.md +6 -6
  257. package/template/.codex/skills/yss-distributed-id/SKILL.md +2 -2
  258. package/template/.codex/skills/yss-distributed-id/references/source-index.md +1 -1
  259. package/template/.codex/skills/yss-domain/SKILL.md +3 -2
  260. package/template/.codex/skills/yss-domain/agents/openai.yaml +2 -2
  261. package/template/.codex/skills/yss-domain/references/domain-layer-guide.md +2 -0
  262. package/template/.codex/skills/yss-dto/SKILL.md +8 -2
  263. package/template/.codex/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  264. package/template/.codex/skills/yss-dto/references/source-index.md +1 -1
  265. package/template/.codex/skills/yss-excel-mvc/SKILL.md +2 -2
  266. package/template/.codex/skills/yss-excel-mvc/references/source-index.md +1 -1
  267. package/template/.codex/skills/yss-exception/SKILL.md +1 -1
  268. package/template/.codex/skills/yss-exception/references/source-index.md +1 -1
  269. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  270. package/template/.codex/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  271. package/template/.codex/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  272. package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  273. package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  274. package/template/.codex/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  275. package/template/.codex/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  276. package/template/.codex/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  277. package/template/.codex/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  278. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  279. package/template/.codex/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  280. package/template/.codex/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  281. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  282. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  283. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  284. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  285. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  286. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  287. package/template/.codex/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  288. package/template/.codex/skills/yss-mybatis/SKILL.md +2 -2
  289. package/template/.codex/skills/yss-mybatis/references/source-index.md +1 -1
  290. package/template/.codex/skills/yss-page-module-development/SKILL.md +1 -1
  291. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +7 -7
  292. package/template/.codex/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  293. package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  294. package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  295. package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +1 -1
  296. package/template/.codex/skills/yss-prototype-stage/SKILL.md +34 -24
  297. package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  298. package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  299. package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  300. package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  301. package/template/.codex/skills/yss-repository/SKILL.md +16 -14
  302. package/template/.codex/skills/yss-repository/agents/openai.yaml +2 -2
  303. package/template/.codex/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  304. package/template/.codex/skills/yss-research/SKILL.md +73 -0
  305. package/template/.codex/skills/yss-research/agents/openai.yaml +3 -0
  306. package/template/.codex/skills/yss-research/assets/evidence-template.yaml +68 -0
  307. package/template/.codex/skills/yss-research/assets/research-brief-template.md +36 -0
  308. package/template/.codex/skills/yss-research/references/evidence-contract.md +42 -0
  309. package/template/.codex/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  310. package/template/.codex/skills/yss-research/tests/run-scenarios.mjs +81 -0
  311. package/template/.codex/skills/yss-resilience4j/SKILL.md +1 -1
  312. package/template/.codex/skills/yss-resilience4j/references/source-index.md +1 -1
  313. package/template/.codex/skills/yss-security-algorithm/SKILL.md +1 -1
  314. package/template/.codex/skills/yss-security-algorithm/references/source-index.md +1 -1
  315. package/template/.codex/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  316. package/template/.codex/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  317. package/template/.codex/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  318. package/template/.codex/skills/yss-stage-decision/SKILL.md +2 -1
  319. package/template/.codex/skills/yss-ui/SKILL.md +2 -1
  320. package/template/.codex/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  321. package/template/.codex/skills/yss-up-springboot3/SKILL.md +1 -1
  322. package/template/.codex/skills/yss-userinfo/SKILL.md +1 -1
  323. package/template/.codex/skills/yss-userinfo/references/source-index.md +1 -1
  324. package/template/.codex/skills/yss-validation/SKILL.md +1 -1
  325. package/template/.codex/skills/yss-validation/references/source-index.md +1 -1
  326. package/template/.codex/skills/yss-web-controller/SKILL.md +17 -11
  327. package/template/.codex/skills/yss-web-controller/agents/openai.yaml +2 -2
  328. package/template/.codex/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  329. package/template/.codex/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  330. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  331. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  332. package/template/.codex/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  333. package/template/.codex/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  334. package/template/.codex/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  335. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  336. package/template/.codex/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  337. package/template/.cursor/skills/ask-matt/SKILL.md +1 -1
  338. package/template/.cursor/skills/code-review/SKILL.md +1 -1
  339. package/template/.cursor/skills/code-review/references/yss-review-standards.md +1 -1
  340. package/template/.cursor/skills/lombok/SKILL.md +1 -1
  341. package/template/.cursor/skills/mapstruct/SKILL.md +1 -1
  342. package/template/.cursor/skills/prototype-review/SKILL.md +7 -6
  343. package/template/.cursor/skills/wayfinder/SKILL.md +2 -2
  344. package/template/.cursor/skills/yss-antd-design/SKILL.md +8 -7
  345. package/template/.cursor/skills/yss-antd-design/references/evidence.md +11 -6
  346. package/template/.cursor/skills/yss-api-integration/SKILL.md +2 -2
  347. package/template/.cursor/skills/yss-application/SKILL.md +2 -2
  348. package/template/.cursor/skills/yss-audit-log/SKILL.md +2 -2
  349. package/template/.cursor/skills/yss-audit-log/references/source-index.md +1 -1
  350. package/template/.cursor/skills/yss-cache/SKILL.md +2 -2
  351. package/template/.cursor/skills/yss-cache/references/source-index.md +1 -1
  352. package/template/.cursor/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  353. package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  354. package/template/.cursor/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  355. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  356. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  357. package/template/.cursor/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  358. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  359. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  360. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  361. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  362. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  363. package/template/.cursor/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  364. package/template/.cursor/skills/yss-design-system/SKILL.md +6 -6
  365. package/template/.cursor/skills/yss-distributed-id/SKILL.md +2 -2
  366. package/template/.cursor/skills/yss-distributed-id/references/source-index.md +1 -1
  367. package/template/.cursor/skills/yss-domain/SKILL.md +3 -2
  368. package/template/.cursor/skills/yss-domain/agents/openai.yaml +2 -2
  369. package/template/.cursor/skills/yss-domain/references/domain-layer-guide.md +2 -0
  370. package/template/.cursor/skills/yss-dto/SKILL.md +8 -2
  371. package/template/.cursor/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  372. package/template/.cursor/skills/yss-dto/references/source-index.md +1 -1
  373. package/template/.cursor/skills/yss-excel-mvc/SKILL.md +2 -2
  374. package/template/.cursor/skills/yss-excel-mvc/references/source-index.md +1 -1
  375. package/template/.cursor/skills/yss-exception/SKILL.md +1 -1
  376. package/template/.cursor/skills/yss-exception/references/source-index.md +1 -1
  377. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  378. package/template/.cursor/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  379. package/template/.cursor/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  380. package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  381. package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  382. package/template/.cursor/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  383. package/template/.cursor/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  384. package/template/.cursor/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  385. package/template/.cursor/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  386. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  387. package/template/.cursor/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  388. package/template/.cursor/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  389. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  390. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  391. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  392. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  393. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  394. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  395. package/template/.cursor/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  396. package/template/.cursor/skills/yss-mybatis/SKILL.md +2 -2
  397. package/template/.cursor/skills/yss-mybatis/references/source-index.md +1 -1
  398. package/template/.cursor/skills/yss-page-module-development/SKILL.md +1 -1
  399. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +7 -7
  400. package/template/.cursor/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  401. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  402. package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  403. package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +1 -1
  404. package/template/.cursor/skills/yss-prototype-stage/SKILL.md +34 -24
  405. package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  406. package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  407. package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  408. package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  409. package/template/.cursor/skills/yss-repository/SKILL.md +16 -14
  410. package/template/.cursor/skills/yss-repository/agents/openai.yaml +2 -2
  411. package/template/.cursor/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  412. package/template/.cursor/skills/yss-research/SKILL.md +73 -0
  413. package/template/.cursor/skills/yss-research/agents/openai.yaml +3 -0
  414. package/template/.cursor/skills/yss-research/assets/evidence-template.yaml +68 -0
  415. package/template/.cursor/skills/yss-research/assets/research-brief-template.md +36 -0
  416. package/template/.cursor/skills/yss-research/references/evidence-contract.md +42 -0
  417. package/template/.cursor/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  418. package/template/.cursor/skills/yss-research/tests/run-scenarios.mjs +81 -0
  419. package/template/.cursor/skills/yss-resilience4j/SKILL.md +1 -1
  420. package/template/.cursor/skills/yss-resilience4j/references/source-index.md +1 -1
  421. package/template/.cursor/skills/yss-security-algorithm/SKILL.md +1 -1
  422. package/template/.cursor/skills/yss-security-algorithm/references/source-index.md +1 -1
  423. package/template/.cursor/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  424. package/template/.cursor/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  425. package/template/.cursor/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  426. package/template/.cursor/skills/yss-stage-decision/SKILL.md +2 -1
  427. package/template/.cursor/skills/yss-ui/SKILL.md +2 -1
  428. package/template/.cursor/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  429. package/template/.cursor/skills/yss-up-springboot3/SKILL.md +1 -1
  430. package/template/.cursor/skills/yss-userinfo/SKILL.md +1 -1
  431. package/template/.cursor/skills/yss-userinfo/references/source-index.md +1 -1
  432. package/template/.cursor/skills/yss-validation/SKILL.md +1 -1
  433. package/template/.cursor/skills/yss-validation/references/source-index.md +1 -1
  434. package/template/.cursor/skills/yss-web-controller/SKILL.md +17 -11
  435. package/template/.cursor/skills/yss-web-controller/agents/openai.yaml +2 -2
  436. package/template/.cursor/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  437. package/template/.cursor/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  438. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  439. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  440. package/template/.cursor/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  441. package/template/.cursor/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  442. package/template/.cursor/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  443. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  444. package/template/.cursor/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  445. package/template/.pi/skills/ask-matt/SKILL.md +1 -1
  446. package/template/.pi/skills/code-review/SKILL.md +1 -1
  447. package/template/.pi/skills/code-review/references/yss-review-standards.md +1 -1
  448. package/template/.pi/skills/lombok/SKILL.md +1 -1
  449. package/template/.pi/skills/mapstruct/SKILL.md +1 -1
  450. package/template/.pi/skills/prototype-review/SKILL.md +7 -6
  451. package/template/.pi/skills/wayfinder/SKILL.md +2 -2
  452. package/template/.pi/skills/yss-antd-design/SKILL.md +8 -7
  453. package/template/.pi/skills/yss-antd-design/references/evidence.md +11 -6
  454. package/template/.pi/skills/yss-api-integration/SKILL.md +2 -2
  455. package/template/.pi/skills/yss-application/SKILL.md +2 -2
  456. package/template/.pi/skills/yss-audit-log/SKILL.md +2 -2
  457. package/template/.pi/skills/yss-audit-log/references/source-index.md +1 -1
  458. package/template/.pi/skills/yss-cache/SKILL.md +2 -2
  459. package/template/.pi/skills/yss-cache/references/source-index.md +1 -1
  460. package/template/.pi/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  461. package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  462. package/template/.pi/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  463. package/template/.pi/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  464. package/template/.pi/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  465. package/template/.pi/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  466. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  467. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  468. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  469. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  470. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  471. package/template/.pi/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  472. package/template/.pi/skills/yss-design-system/SKILL.md +6 -6
  473. package/template/.pi/skills/yss-distributed-id/SKILL.md +2 -2
  474. package/template/.pi/skills/yss-distributed-id/references/source-index.md +1 -1
  475. package/template/.pi/skills/yss-domain/SKILL.md +3 -2
  476. package/template/.pi/skills/yss-domain/agents/openai.yaml +2 -2
  477. package/template/.pi/skills/yss-domain/references/domain-layer-guide.md +2 -0
  478. package/template/.pi/skills/yss-dto/SKILL.md +8 -2
  479. package/template/.pi/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  480. package/template/.pi/skills/yss-dto/references/source-index.md +1 -1
  481. package/template/.pi/skills/yss-excel-mvc/SKILL.md +2 -2
  482. package/template/.pi/skills/yss-excel-mvc/references/source-index.md +1 -1
  483. package/template/.pi/skills/yss-exception/SKILL.md +1 -1
  484. package/template/.pi/skills/yss-exception/references/source-index.md +1 -1
  485. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  486. package/template/.pi/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  487. package/template/.pi/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  488. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  489. package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  490. package/template/.pi/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  491. package/template/.pi/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  492. package/template/.pi/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  493. package/template/.pi/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  494. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  495. package/template/.pi/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  496. package/template/.pi/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  497. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  498. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  499. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  500. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  501. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  502. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  503. package/template/.pi/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  504. package/template/.pi/skills/yss-mybatis/SKILL.md +2 -2
  505. package/template/.pi/skills/yss-mybatis/references/source-index.md +1 -1
  506. package/template/.pi/skills/yss-page-module-development/SKILL.md +1 -1
  507. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +7 -7
  508. package/template/.pi/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  509. package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  510. package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  511. package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +1 -1
  512. package/template/.pi/skills/yss-prototype-stage/SKILL.md +34 -24
  513. package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  514. package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  515. package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  516. package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  517. package/template/.pi/skills/yss-repository/SKILL.md +16 -14
  518. package/template/.pi/skills/yss-repository/agents/openai.yaml +2 -2
  519. package/template/.pi/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  520. package/template/.pi/skills/yss-research/SKILL.md +73 -0
  521. package/template/.pi/skills/yss-research/agents/openai.yaml +3 -0
  522. package/template/.pi/skills/yss-research/assets/evidence-template.yaml +68 -0
  523. package/template/.pi/skills/yss-research/assets/research-brief-template.md +36 -0
  524. package/template/.pi/skills/yss-research/references/evidence-contract.md +42 -0
  525. package/template/.pi/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  526. package/template/.pi/skills/yss-research/tests/run-scenarios.mjs +81 -0
  527. package/template/.pi/skills/yss-resilience4j/SKILL.md +1 -1
  528. package/template/.pi/skills/yss-resilience4j/references/source-index.md +1 -1
  529. package/template/.pi/skills/yss-security-algorithm/SKILL.md +1 -1
  530. package/template/.pi/skills/yss-security-algorithm/references/source-index.md +1 -1
  531. package/template/.pi/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  532. package/template/.pi/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  533. package/template/.pi/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  534. package/template/.pi/skills/yss-stage-decision/SKILL.md +2 -1
  535. package/template/.pi/skills/yss-ui/SKILL.md +2 -1
  536. package/template/.pi/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  537. package/template/.pi/skills/yss-up-springboot3/SKILL.md +1 -1
  538. package/template/.pi/skills/yss-userinfo/SKILL.md +1 -1
  539. package/template/.pi/skills/yss-userinfo/references/source-index.md +1 -1
  540. package/template/.pi/skills/yss-validation/SKILL.md +1 -1
  541. package/template/.pi/skills/yss-validation/references/source-index.md +1 -1
  542. package/template/.pi/skills/yss-web-controller/SKILL.md +17 -11
  543. package/template/.pi/skills/yss-web-controller/agents/openai.yaml +2 -2
  544. package/template/.pi/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  545. package/template/.pi/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  546. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  547. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  548. package/template/.pi/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  549. package/template/.pi/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  550. package/template/.pi/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  551. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  552. package/template/.pi/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  553. package/template/.qoder/skills/ask-matt/SKILL.md +1 -1
  554. package/template/.qoder/skills/code-review/SKILL.md +1 -1
  555. package/template/.qoder/skills/code-review/references/yss-review-standards.md +1 -1
  556. package/template/.qoder/skills/lombok/SKILL.md +1 -1
  557. package/template/.qoder/skills/mapstruct/SKILL.md +1 -1
  558. package/template/.qoder/skills/prototype-review/SKILL.md +7 -6
  559. package/template/.qoder/skills/wayfinder/SKILL.md +2 -2
  560. package/template/.qoder/skills/yss-antd-design/SKILL.md +8 -7
  561. package/template/.qoder/skills/yss-antd-design/references/evidence.md +11 -6
  562. package/template/.qoder/skills/yss-api-integration/SKILL.md +2 -2
  563. package/template/.qoder/skills/yss-application/SKILL.md +2 -2
  564. package/template/.qoder/skills/yss-audit-log/SKILL.md +2 -2
  565. package/template/.qoder/skills/yss-audit-log/references/source-index.md +1 -1
  566. package/template/.qoder/skills/yss-cache/SKILL.md +2 -2
  567. package/template/.qoder/skills/yss-cache/references/source-index.md +1 -1
  568. package/template/.qoder/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  569. package/template/.qoder/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  570. package/template/.qoder/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  571. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  572. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  573. package/template/.qoder/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  574. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  575. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  576. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  577. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  578. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  579. package/template/.qoder/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  580. package/template/.qoder/skills/yss-design-system/SKILL.md +6 -6
  581. package/template/.qoder/skills/yss-distributed-id/SKILL.md +2 -2
  582. package/template/.qoder/skills/yss-distributed-id/references/source-index.md +1 -1
  583. package/template/.qoder/skills/yss-domain/SKILL.md +3 -2
  584. package/template/.qoder/skills/yss-domain/agents/openai.yaml +2 -2
  585. package/template/.qoder/skills/yss-domain/references/domain-layer-guide.md +2 -0
  586. package/template/.qoder/skills/yss-dto/SKILL.md +8 -2
  587. package/template/.qoder/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  588. package/template/.qoder/skills/yss-dto/references/source-index.md +1 -1
  589. package/template/.qoder/skills/yss-excel-mvc/SKILL.md +2 -2
  590. package/template/.qoder/skills/yss-excel-mvc/references/source-index.md +1 -1
  591. package/template/.qoder/skills/yss-exception/SKILL.md +1 -1
  592. package/template/.qoder/skills/yss-exception/references/source-index.md +1 -1
  593. package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  594. package/template/.qoder/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  595. package/template/.qoder/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  596. package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  597. package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  598. package/template/.qoder/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  599. package/template/.qoder/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  600. package/template/.qoder/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  601. package/template/.qoder/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  602. package/template/.qoder/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  603. package/template/.qoder/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  604. package/template/.qoder/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  605. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  606. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  607. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  608. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  609. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  610. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  611. package/template/.qoder/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  612. package/template/.qoder/skills/yss-mybatis/SKILL.md +2 -2
  613. package/template/.qoder/skills/yss-mybatis/references/source-index.md +1 -1
  614. package/template/.qoder/skills/yss-page-module-development/SKILL.md +1 -1
  615. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +7 -7
  616. package/template/.qoder/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  617. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  618. package/template/.qoder/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  619. package/template/.qoder/skills/yss-product-lifecycle/references/state-model.md +1 -1
  620. package/template/.qoder/skills/yss-prototype-stage/SKILL.md +34 -24
  621. package/template/.qoder/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  622. package/template/.qoder/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  623. package/template/.qoder/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  624. package/template/.qoder/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  625. package/template/.qoder/skills/yss-repository/SKILL.md +16 -14
  626. package/template/.qoder/skills/yss-repository/agents/openai.yaml +2 -2
  627. package/template/.qoder/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  628. package/template/.qoder/skills/yss-research/SKILL.md +73 -0
  629. package/template/.qoder/skills/yss-research/agents/openai.yaml +3 -0
  630. package/template/.qoder/skills/yss-research/assets/evidence-template.yaml +68 -0
  631. package/template/.qoder/skills/yss-research/assets/research-brief-template.md +36 -0
  632. package/template/.qoder/skills/yss-research/references/evidence-contract.md +42 -0
  633. package/template/.qoder/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  634. package/template/.qoder/skills/yss-research/tests/run-scenarios.mjs +81 -0
  635. package/template/.qoder/skills/yss-resilience4j/SKILL.md +1 -1
  636. package/template/.qoder/skills/yss-resilience4j/references/source-index.md +1 -1
  637. package/template/.qoder/skills/yss-security-algorithm/SKILL.md +1 -1
  638. package/template/.qoder/skills/yss-security-algorithm/references/source-index.md +1 -1
  639. package/template/.qoder/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  640. package/template/.qoder/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  641. package/template/.qoder/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  642. package/template/.qoder/skills/yss-stage-decision/SKILL.md +2 -1
  643. package/template/.qoder/skills/yss-ui/SKILL.md +2 -1
  644. package/template/.qoder/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  645. package/template/.qoder/skills/yss-up-springboot3/SKILL.md +1 -1
  646. package/template/.qoder/skills/yss-userinfo/SKILL.md +1 -1
  647. package/template/.qoder/skills/yss-userinfo/references/source-index.md +1 -1
  648. package/template/.qoder/skills/yss-validation/SKILL.md +1 -1
  649. package/template/.qoder/skills/yss-validation/references/source-index.md +1 -1
  650. package/template/.qoder/skills/yss-web-controller/SKILL.md +17 -11
  651. package/template/.qoder/skills/yss-web-controller/agents/openai.yaml +2 -2
  652. package/template/.qoder/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  653. package/template/.qoder/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  654. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  655. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  656. package/template/.qoder/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  657. package/template/.qoder/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  658. package/template/.qoder/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  659. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  660. package/template/.qoder/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  661. package/template/.trae/skills/ask-matt/SKILL.md +1 -1
  662. package/template/.trae/skills/code-review/SKILL.md +1 -1
  663. package/template/.trae/skills/code-review/references/yss-review-standards.md +1 -1
  664. package/template/.trae/skills/lombok/SKILL.md +1 -1
  665. package/template/.trae/skills/mapstruct/SKILL.md +1 -1
  666. package/template/.trae/skills/prototype-review/SKILL.md +7 -6
  667. package/template/.trae/skills/wayfinder/SKILL.md +2 -2
  668. package/template/.trae/skills/yss-antd-design/SKILL.md +8 -7
  669. package/template/.trae/skills/yss-antd-design/references/evidence.md +11 -6
  670. package/template/.trae/skills/yss-api-integration/SKILL.md +2 -2
  671. package/template/.trae/skills/yss-application/SKILL.md +2 -2
  672. package/template/.trae/skills/yss-audit-log/SKILL.md +2 -2
  673. package/template/.trae/skills/yss-audit-log/references/source-index.md +1 -1
  674. package/template/.trae/skills/yss-cache/SKILL.md +2 -2
  675. package/template/.trae/skills/yss-cache/references/source-index.md +1 -1
  676. package/template/.trae/skills/yss-cache/scripts/check-skill-freshness.sh +1 -1
  677. package/template/.trae/skills/yss-ddd-scaffold-generator/SKILL.md +18 -7
  678. package/template/.trae/skills/yss-ddd-scaffold-generator/agents/openai.yaml +1 -1
  679. package/template/.trae/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +3 -3
  680. package/template/.trae/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +14 -3
  681. package/template/.trae/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +3 -2
  682. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +48 -14
  683. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/first-slice-verification.test.mjs +164 -0
  684. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +24 -10
  685. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_first_slice_verification.mjs +172 -0
  686. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +1 -1
  687. package/template/.trae/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +21 -8
  688. package/template/.trae/skills/yss-design-system/SKILL.md +6 -6
  689. package/template/.trae/skills/yss-distributed-id/SKILL.md +2 -2
  690. package/template/.trae/skills/yss-distributed-id/references/source-index.md +1 -1
  691. package/template/.trae/skills/yss-domain/SKILL.md +3 -2
  692. package/template/.trae/skills/yss-domain/agents/openai.yaml +2 -2
  693. package/template/.trae/skills/yss-domain/references/domain-layer-guide.md +2 -0
  694. package/template/.trae/skills/yss-dto/SKILL.md +8 -2
  695. package/template/.trae/skills/yss-dto/references/openapi-wire-profile.yaml +6 -0
  696. package/template/.trae/skills/yss-dto/references/source-index.md +1 -1
  697. package/template/.trae/skills/yss-excel-mvc/SKILL.md +2 -2
  698. package/template/.trae/skills/yss-excel-mvc/references/source-index.md +1 -1
  699. package/template/.trae/skills/yss-exception/SKILL.md +1 -1
  700. package/template/.trae/skills/yss-exception/references/source-index.md +1 -1
  701. package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +55 -0
  702. package/template/.trae/skills/yss-implementation-contract-compiler/agents/openai.yaml +4 -0
  703. package/template/.trae/skills/yss-implementation-contract-compiler/references/boundaries.md +134 -0
  704. package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +314 -0
  705. package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +197 -0
  706. package/template/.trae/skills/yss-implementation-contract-compiler/references/yss-skill-execution-result.md +69 -0
  707. package/template/.trae/skills/yss-implementation-contract-compiler/tests/compiler-scenarios.test.mjs +89 -0
  708. package/template/.trae/skills/yss-mvc-scaffold-generator/SKILL.md +87 -0
  709. package/template/.trae/skills/yss-mvc-scaffold-generator/agents/openai.yaml +4 -0
  710. package/template/.trae/skills/yss-mvc-scaffold-generator/assets/logback-spring.xml.template +50 -0
  711. package/template/.trae/skills/yss-mvc-scaffold-generator/assets/smart-doc.json.template +42 -0
  712. package/template/.trae/skills/yss-mvc-scaffold-generator/references/architecture.md +28 -0
  713. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.mjs +136 -0
  714. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/generate_project.test.mjs +337 -0
  715. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/envelope.mjs +66 -0
  716. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/runtime.mjs +115 -0
  717. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/storage.mjs +90 -0
  718. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/lib/templates.mjs +54 -0
  719. package/template/.trae/skills/yss-mvc-scaffold-generator/scripts/verify_project.mjs +103 -0
  720. package/template/.trae/skills/yss-mybatis/SKILL.md +2 -2
  721. package/template/.trae/skills/yss-mybatis/references/source-index.md +1 -1
  722. package/template/.trae/skills/yss-page-module-development/SKILL.md +1 -1
  723. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +7 -7
  724. package/template/.trae/skills/yss-product-lifecycle/references/matt-yss-adapter.md +7 -7
  725. package/template/.trae/skills/yss-product-lifecycle/references/orchestration-contract.yaml +37 -27
  726. package/template/.trae/skills/yss-product-lifecycle/references/orchestration.md +7 -7
  727. package/template/.trae/skills/yss-product-lifecycle/references/state-model.md +1 -1
  728. package/template/.trae/skills/yss-prototype-stage/SKILL.md +34 -24
  729. package/template/.trae/skills/yss-prototype-stage/references/product-design-adapter.md +43 -38
  730. package/template/.trae/skills/yss-prototype-stage/references/prototype-profile-routing.md +67 -0
  731. package/template/.trae/skills/yss-prototype-stage/scripts/prototype-contract.mjs +192 -103
  732. package/template/.trae/skills/yss-prototype-stage/tests/run-scenarios.mjs +87 -134
  733. package/template/.trae/skills/yss-repository/SKILL.md +16 -14
  734. package/template/.trae/skills/yss-repository/agents/openai.yaml +2 -2
  735. package/template/.trae/skills/yss-repository/references/infrastructure-layer-guide.md +1 -1
  736. package/template/.trae/skills/yss-research/SKILL.md +73 -0
  737. package/template/.trae/skills/yss-research/agents/openai.yaml +3 -0
  738. package/template/.trae/skills/yss-research/assets/evidence-template.yaml +68 -0
  739. package/template/.trae/skills/yss-research/assets/research-brief-template.md +36 -0
  740. package/template/.trae/skills/yss-research/references/evidence-contract.md +42 -0
  741. package/template/.trae/skills/yss-research/scripts/validate-research-package.mjs +128 -0
  742. package/template/.trae/skills/yss-research/tests/run-scenarios.mjs +81 -0
  743. package/template/.trae/skills/yss-resilience4j/SKILL.md +1 -1
  744. package/template/.trae/skills/yss-resilience4j/references/source-index.md +1 -1
  745. package/template/.trae/skills/yss-security-algorithm/SKILL.md +1 -1
  746. package/template/.trae/skills/yss-security-algorithm/references/source-index.md +1 -1
  747. package/template/.trae/skills/yss-skill-source-index-refresh/SKILL.md +63 -0
  748. package/template/.trae/skills/yss-skill-source-index-refresh/agents/openai.yaml +4 -0
  749. package/template/.trae/skills/yss-skill-source-index-refresh/scripts/refresh-yss-skill-index.mjs +24 -0
  750. package/template/.trae/skills/yss-stage-decision/SKILL.md +2 -1
  751. package/template/.trae/skills/yss-ui/SKILL.md +2 -1
  752. package/template/.trae/skills/yss-ui/assets/docs/guide/llms.md +0 -61
  753. package/template/.trae/skills/yss-up-springboot3/SKILL.md +1 -1
  754. package/template/.trae/skills/yss-userinfo/SKILL.md +1 -1
  755. package/template/.trae/skills/yss-userinfo/references/source-index.md +1 -1
  756. package/template/.trae/skills/yss-validation/SKILL.md +1 -1
  757. package/template/.trae/skills/yss-validation/references/source-index.md +1 -1
  758. package/template/.trae/skills/yss-web-controller/SKILL.md +17 -11
  759. package/template/.trae/skills/yss-web-controller/agents/openai.yaml +2 -2
  760. package/template/.trae/skills/yss-web-controller/assets/templates/Controller.java.template +11 -11
  761. package/template/.trae/skills/yss-web-controller/assets/templates/WebConvertor.java.template +4 -7
  762. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +2 -2
  763. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +4 -7
  764. package/template/.trae/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +2 -2
  765. package/template/.trae/skills/yss-web-controller/references/web-adapter-layer-guide.md +6 -4
  766. package/template/.trae/skills/yss-web-controller/references/web-generation-contract.schema.json +97 -0
  767. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.mjs +141 -20
  768. package/template/.trae/skills/yss-web-controller/scripts/generate_controller.test.mjs +131 -35
  769. package/template/AGENTS.md +13 -13
  770. package/template/CONTEXT.md +9 -8
  771. package/template/README.md +0 -1
  772. package/template/docs/agents/digital-human-roles.md +3 -3
  773. package/template/docs/agents/digital-human-roles.yaml +5 -5
  774. package/template/docs/agents/skill-migrations.md +18 -5
  775. package/template/docs/agents/skills-maintenance.md +3 -3
  776. package/template/docs/agents/strategic-design-skills-integration.md +41 -0
  777. package/template/docs/agents/yss-skill-registry.yaml +137 -16
  778. package/template/docs/api/templates/openapi-draft-review-checklist.md +3 -3
  779. package/template/docs/architecture/templates/engineering-baseline-review-template.md +3 -3
  780. package/template/docs/design/README.md +7 -7
  781. package/template/docs/design/design.md +25 -17
  782. package/template/docs/design/templates/interaction-spec-template.md +4 -4
  783. package/template/docs/design/templates/prototype-confirmation-template.md +13 -15
  784. package/template/docs/design/templates/prototype-evidence-template.yaml +99 -75
  785. package/template/docs/design/templates/prototype-review-checklist.md +5 -4
  786. package/template/docs/design/templates/state-matrix-template.md +11 -0
  787. package/template/docs/discovery/reports/agent-governance-options.md +8 -8
  788. package/template/docs/process/MATT-POCOCK-ENGINEERING-SKILLS.md +2 -1
  789. package/template/docs/process/implementation-repo-integration.md +1 -1
  790. package/template/docs/process/lifecycle-artifact-map.md +4 -2
  791. package/template/docs/process/lifecycle-registry-baseline.json +4 -1
  792. package/template/docs/process/lifecycle-registry.yaml +15 -9
  793. package/template/docs/process/template-engineering-overview.md +2 -2
  794. package/template/docs/process/template-verification-profiles.yaml +27 -6
  795. package/template/docs/templates/build-architecture-checklist-template.md +6 -6
  796. package/template/docs/templates/implementation-routing-template.md +8 -8
  797. package/template/docs/templates/requirement-freeze-template.md +2 -2
  798. package/template/docs/templates/review-report-template.md +4 -4
  799. package/template/docs/templates/spec-template.md +1 -1
  800. package/template/docs/templates/vertical-slice-ticket-template.md +4 -4
  801. package/template/docs/user-guide/yss-ui-mcp.md +0 -2
  802. package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +2 -2
  803. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +5 -5
  804. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +4 -4
  805. package/template/scripts/audit-yss-backend-skills +56 -0
  806. package/template/scripts/generate-yss-skill-boundaries +67 -0
  807. package/template/scripts/lib/export-skills.mjs +4 -4
  808. package/template/scripts/lib/implementation-contract-compiler.mjs +194 -0
  809. package/template/scripts/lib/scenario-checks.mjs +17 -10
  810. package/template/scripts/lib/skill-governance.mjs +27 -5
  811. package/template/scripts/lib/skill-registry.mjs +129 -41
  812. package/template/scripts/lib/skill-supply-chain.mjs +47 -6
  813. package/template/scripts/verify-repository-scope-scenarios +2 -2
  814. package/template/scripts/verify-retired-skill-ids +37 -0
  815. package/template/scripts/verify-scaffold-generator-scenarios +18 -18
  816. package/template/scripts/verify-template-verification-scenarios +4 -1
  817. package/template/scripts/verify-yss-dto-openapi-profile +8 -0
  818. package/template/scripts/verify-yss-implementation-contract-compiler-scenarios +14 -0
  819. package/template/skills-lock.json +101 -171
  820. package/template/yss-public-skills.json +4 -4
  821. package/template.manifest.json +0 -3
  822. package/template.snapshot.json +5 -5
  823. package/template/.agents/skills/research/SKILL.md +0 -12
  824. package/template/.agents/skills/research/agents/openai.yaml +0 -3
  825. package/template/.agents/skills/yss-router/SKILL.md +0 -51
  826. package/template/.agents/skills/yss-router/agents/openai.yaml +0 -4
  827. package/template/.agents/skills/yss-router/references/boundaries.md +0 -50
  828. package/template/.agents/skills/yss-router/references/router-contract.yaml +0 -345
  829. package/template/.agents/skills/yss-router/references/slice-implementation-contract.md +0 -185
  830. package/template/.agents/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  831. package/template/.agents/skills/yss-source-index/SKILL.md +0 -63
  832. package/template/.agents/skills/yss-source-index/agents/openai.yaml +0 -4
  833. package/template/.agents/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  834. package/template/.claude/skills/research/SKILL.md +0 -12
  835. package/template/.claude/skills/research/agents/openai.yaml +0 -3
  836. package/template/.claude/skills/yss-router/SKILL.md +0 -51
  837. package/template/.claude/skills/yss-router/agents/openai.yaml +0 -4
  838. package/template/.claude/skills/yss-router/references/boundaries.md +0 -50
  839. package/template/.claude/skills/yss-router/references/router-contract.yaml +0 -345
  840. package/template/.claude/skills/yss-router/references/slice-implementation-contract.md +0 -185
  841. package/template/.claude/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  842. package/template/.claude/skills/yss-source-index/SKILL.md +0 -63
  843. package/template/.claude/skills/yss-source-index/agents/openai.yaml +0 -4
  844. package/template/.claude/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  845. package/template/.codex/skills/research/SKILL.md +0 -12
  846. package/template/.codex/skills/research/agents/openai.yaml +0 -3
  847. package/template/.codex/skills/yss-router/SKILL.md +0 -51
  848. package/template/.codex/skills/yss-router/agents/openai.yaml +0 -4
  849. package/template/.codex/skills/yss-router/references/boundaries.md +0 -50
  850. package/template/.codex/skills/yss-router/references/router-contract.yaml +0 -345
  851. package/template/.codex/skills/yss-router/references/slice-implementation-contract.md +0 -185
  852. package/template/.codex/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  853. package/template/.codex/skills/yss-source-index/SKILL.md +0 -63
  854. package/template/.codex/skills/yss-source-index/agents/openai.yaml +0 -4
  855. package/template/.codex/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  856. package/template/.cursor/skills/research/SKILL.md +0 -12
  857. package/template/.cursor/skills/research/agents/openai.yaml +0 -3
  858. package/template/.cursor/skills/yss-router/SKILL.md +0 -51
  859. package/template/.cursor/skills/yss-router/agents/openai.yaml +0 -4
  860. package/template/.cursor/skills/yss-router/references/boundaries.md +0 -50
  861. package/template/.cursor/skills/yss-router/references/router-contract.yaml +0 -345
  862. package/template/.cursor/skills/yss-router/references/slice-implementation-contract.md +0 -185
  863. package/template/.cursor/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  864. package/template/.cursor/skills/yss-source-index/SKILL.md +0 -63
  865. package/template/.cursor/skills/yss-source-index/agents/openai.yaml +0 -4
  866. package/template/.cursor/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  867. package/template/.gemini/settings.json +0 -8
  868. package/template/.hermes/skills/alibaba-java-code-style/SKILL.md +0 -51
  869. package/template/.hermes/skills/alibaba-java-code-style/agents/openai.yaml +0 -4
  870. package/template/.hermes/skills/alibaba-java-code-style/references/database-engineering-design.md +0 -147
  871. package/template/.hermes/skills/alibaba-java-code-style/references/java-programming.md +0 -178
  872. package/template/.hermes/skills/alibaba-java-code-style/references/reliability-test-security.md +0 -89
  873. package/template/.hermes/skills/archify/LICENSE +0 -22
  874. package/template/.hermes/skills/archify/SKILL.md +0 -156
  875. package/template/.hermes/skills/archify/assets/template.html +0 -14787
  876. package/template/.hermes/skills/archify/bin/archify.mjs +0 -1990
  877. package/template/.hermes/skills/archify/bin/open-artifact.mjs +0 -86
  878. package/template/.hermes/skills/archify/bin/preview.mjs +0 -648
  879. package/template/.hermes/skills/archify/bin/visual-check.mjs +0 -829
  880. package/template/.hermes/skills/archify/brand-marks/README.md +0 -31
  881. package/template/.hermes/skills/archify/brand-marks/catalog.json +0 -131
  882. package/template/.hermes/skills/archify/delta/architecture-delta.mjs +0 -1214
  883. package/template/.hermes/skills/archify/examples/agent-run.lifecycle.json +0 -71
  884. package/template/.hermes/skills/archify/examples/agent-tool-call.workflow.json +0 -94
  885. package/template/.hermes/skills/archify/examples/async-job-roundtrip.sequence.json +0 -61
  886. package/template/.hermes/skills/archify/examples/brand-aware-delivery.architecture.json +0 -47
  887. package/template/.hermes/skills/archify/examples/cache-miss-request.sequence.json +0 -81
  888. package/template/.hermes/skills/archify/examples/checkout-platform.base.architecture.json +0 -31
  889. package/template/.hermes/skills/archify/examples/checkout-platform.head.architecture.json +0 -31
  890. package/template/.hermes/skills/archify/examples/dataflow-product-analytics.html +0 -14898
  891. package/template/.hermes/skills/archify/examples/deployment-release.lifecycle.json +0 -49
  892. package/template/.hermes/skills/archify/examples/event-stream.dataflow.json +0 -57
  893. package/template/.hermes/skills/archify/examples/incident-response.workflow.json +0 -64
  894. package/template/.hermes/skills/archify/examples/lifecycle-agent-run.html +0 -14847
  895. package/template/.hermes/skills/archify/examples/product-analytics.dataflow.json +0 -76
  896. package/template/.hermes/skills/archify/examples/production-deployment.architecture.json +0 -71
  897. package/template/.hermes/skills/archify/examples/release-delivery.workflow.json +0 -62
  898. package/template/.hermes/skills/archify/examples/sequence-cache-miss-request.html +0 -14913
  899. package/template/.hermes/skills/archify/examples/web-app-rendered.html +0 -14862
  900. package/template/.hermes/skills/archify/examples/web-app.architecture.json +0 -46
  901. package/template/.hermes/skills/archify/examples/workflow-agent-tool-call-rendered.html +0 -14904
  902. package/template/.hermes/skills/archify/migrations/workflow-v2.mjs +0 -279
  903. package/template/.hermes/skills/archify/package-lock.json +0 -149
  904. package/template/.hermes/skills/archify/package.json +0 -37
  905. package/template/.hermes/skills/archify/recipes/scenarios.mjs +0 -391
  906. package/template/.hermes/skills/archify/references/authoring-contract.md +0 -191
  907. package/template/.hermes/skills/archify/references/brand-marks.md +0 -65
  908. package/template/.hermes/skills/archify/references/delivery-contract.md +0 -112
  909. package/template/.hermes/skills/archify/references/viewer-runtime.md +0 -45
  910. package/template/.hermes/skills/archify/renderers/architecture/grid.mjs +0 -62
  911. package/template/.hermes/skills/archify/renderers/architecture/render-architecture.mjs +0 -1078
  912. package/template/.hermes/skills/archify/renderers/dataflow/README.md +0 -104
  913. package/template/.hermes/skills/archify/renderers/dataflow/render-dataflow.mjs +0 -483
  914. package/template/.hermes/skills/archify/renderers/lifecycle/README.md +0 -115
  915. package/template/.hermes/skills/archify/renderers/lifecycle/render-lifecycle.mjs +0 -561
  916. package/template/.hermes/skills/archify/renderers/sequence/README.md +0 -114
  917. package/template/.hermes/skills/archify/renderers/sequence/render-sequence.mjs +0 -453
  918. package/template/.hermes/skills/archify/renderers/shared/brand-marks.mjs +0 -563
  919. package/template/.hermes/skills/archify/renderers/shared/cli.mjs +0 -218
  920. package/template/.hermes/skills/archify/renderers/shared/desktop-readability.mjs +0 -26
  921. package/template/.hermes/skills/archify/renderers/shared/diagnostics.mjs +0 -127
  922. package/template/.hermes/skills/archify/renderers/shared/engineering-profiles.mjs +0 -157
  923. package/template/.hermes/skills/archify/renderers/shared/generated-brand-marks.mjs +0 -2003
  924. package/template/.hermes/skills/archify/renderers/shared/generated-validators.mjs +0 -13
  925. package/template/.hermes/skills/archify/renderers/shared/geometry.mjs +0 -1423
  926. package/template/.hermes/skills/archify/renderers/shared/i18n.mjs +0 -594
  927. package/template/.hermes/skills/archify/renderers/shared/layout-report.mjs +0 -40
  928. package/template/.hermes/skills/archify/renderers/shared/legend.mjs +0 -217
  929. package/template/.hermes/skills/archify/renderers/shared/output-path.mjs +0 -321
  930. package/template/.hermes/skills/archify/renderers/shared/repository-evidence.mjs +0 -235
  931. package/template/.hermes/skills/archify/renderers/shared/text-fit.mjs +0 -49
  932. package/template/.hermes/skills/archify/renderers/shared/utils.mjs +0 -232
  933. package/template/.hermes/skills/archify/renderers/shared/validator.mjs +0 -86
  934. package/template/.hermes/skills/archify/renderers/workflow/README.md +0 -223
  935. package/template/.hermes/skills/archify/renderers/workflow/render-workflow.mjs +0 -35
  936. package/template/.hermes/skills/archify/renderers/workflow/workflow-compiler.mjs +0 -4400
  937. package/template/.hermes/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +0 -144
  938. package/template/.hermes/skills/archify/schemas/README.md +0 -211
  939. package/template/.hermes/skills/archify/schemas/architecture.schema.json +0 -176
  940. package/template/.hermes/skills/archify/schemas/common.schema.json +0 -115
  941. package/template/.hermes/skills/archify/schemas/dataflow.schema.json +0 -243
  942. package/template/.hermes/skills/archify/schemas/lifecycle.schema.json +0 -266
  943. package/template/.hermes/skills/archify/schemas/sequence.schema.json +0 -223
  944. package/template/.hermes/skills/archify/schemas/workflow.schema.json +0 -428
  945. package/template/.hermes/skills/archify/scripts/check-render-output.mjs +0 -835
  946. package/template/.hermes/skills/archify/scripts/check-update.mjs +0 -1667
  947. package/template/.hermes/skills/archify/scripts/generate-brand-marks.mjs +0 -141
  948. package/template/.hermes/skills/archify/scripts/generate-validators.mjs +0 -66
  949. package/template/.hermes/skills/archify/scripts/render-examples.mjs +0 -26
  950. package/template/.hermes/skills/archify/scripts/update-contract.mjs +0 -182
  951. package/template/.hermes/skills/archify/scripts/yss-safe-deliver.mjs +0 -214
  952. package/template/.hermes/skills/archify/skill-release.json +0 -10
  953. package/template/.hermes/skills/archify/test/adaptive-reader-layout.test.mjs +0 -86
  954. package/template/.hermes/skills/archify/test/animation.test.mjs +0 -179
  955. package/template/.hermes/skills/archify/test/architecture-delta.test.mjs +0 -518
  956. package/template/.hermes/skills/archify/test/authored-reachability.test.mjs +0 -95
  957. package/template/.hermes/skills/archify/test/authoring-safety-contract.test.mjs +0 -54
  958. package/template/.hermes/skills/archify/test/automatic-port-spread.test.mjs +0 -376
  959. package/template/.hermes/skills/archify/test/base-input-compatibility.test.mjs +0 -42
  960. package/template/.hermes/skills/archify/test/brand-marks.test.mjs +0 -654
  961. package/template/.hermes/skills/archify/test/chapter-delta-preview.test.mjs +0 -157
  962. package/template/.hermes/skills/archify/test/chapter-handoff.test.mjs +0 -97
  963. package/template/.hermes/skills/archify/test/chapter-rail.test.mjs +0 -86
  964. package/template/.hermes/skills/archify/test/checkout-line-endings.test.mjs +0 -72
  965. package/template/.hermes/skills/archify/test/clean-skill-staging.test.mjs +0 -244
  966. package/template/.hermes/skills/archify/test/cli.test.mjs +0 -809
  967. package/template/.hermes/skills/archify/test/community-proof-intake.test.mjs +0 -104
  968. package/template/.hermes/skills/archify/test/cursor-onboarding.test.mjs +0 -74
  969. package/template/.hermes/skills/archify/test/degraded.test.mjs +0 -161
  970. package/template/.hermes/skills/archify/test/delivery-contract.test.mjs +0 -52
  971. package/template/.hermes/skills/archify/test/desktop-reader-browser.test.mjs +0 -58
  972. package/template/.hermes/skills/archify/test/diagram-guide.test.mjs +0 -92
  973. package/template/.hermes/skills/archify/test/engineering-profile.test.mjs +0 -209
  974. package/template/.hermes/skills/archify/test/finder.test.mjs +0 -104
  975. package/template/.hermes/skills/archify/test/fixtures/automatic-routing-node-border-clearance.workflow.json +0 -40
  976. package/template/.hermes/skills/archify/test/fixtures/fail-migration-cleanup.mjs +0 -17
  977. package/template/.hermes/skills/archify/test/fixtures/issue-126/custom-widths.workflow.json +0 -18
  978. package/template/.hermes/skills/archify/test/fixtures/issue-126/explicit-route.workflow.json +0 -28
  979. package/template/.hermes/skills/archify/test/fixtures/issue-126/explicit-viewbox.workflow.json +0 -19
  980. package/template/.hermes/skills/archify/test/fixtures/issue-126/labels.workflow.json +0 -18
  981. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/agent-run.lifecycle.json +0 -64
  982. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/agent-tool-call.workflow.json +0 -88
  983. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/cache-miss-request.sequence.json +0 -75
  984. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/event-stream.dataflow.json +0 -57
  985. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/product-analytics.dataflow.json +0 -70
  986. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/production-deployment.architecture.json +0 -71
  987. package/template/.hermes/skills/archify/test/fixtures/v1-baseline/web-app.architecture.json +0 -41
  988. package/template/.hermes/skills/archify/test/fixtures/v1-workflow-700x400.workflow.json +0 -22
  989. package/template/.hermes/skills/archify/test/fixtures/v1-workflow-explicit-coordinates.workflow.json +0 -47
  990. package/template/.hermes/skills/archify/test/gallery.test.mjs +0 -130
  991. package/template/.hermes/skills/archify/test/generate-validators.test.mjs +0 -59
  992. package/template/.hermes/skills/archify/test/generated-artifact-xml.test.mjs +0 -88
  993. package/template/.hermes/skills/archify/test/geometry.test.mjs +0 -739
  994. package/template/.hermes/skills/archify/test/golden.mjs +0 -207
  995. package/template/.hermes/skills/archify/test/grid.test.mjs +0 -47
  996. package/template/.hermes/skills/archify/test/guide-page.test.mjs +0 -59
  997. package/template/.hermes/skills/archify/test/guide.test.mjs +0 -81
  998. package/template/.hermes/skills/archify/test/guided-views.test.mjs +0 -144
  999. package/template/.hermes/skills/archify/test/helpers/xml.mjs +0 -37
  1000. package/template/.hermes/skills/archify/test/i18n.test.mjs +0 -422
  1001. package/template/.hermes/skills/archify/test/intent-trace.test.mjs +0 -111
  1002. package/template/.hermes/skills/archify/test/landing.test.mjs +0 -97
  1003. package/template/.hermes/skills/archify/test/layout-rules.test.mjs +0 -1449
  1004. package/template/.hermes/skills/archify/test/legend-contract.test.mjs +0 -404
  1005. package/template/.hermes/skills/archify/test/motion-governor.test.mjs +0 -111
  1006. package/template/.hermes/skills/archify/test/open-artifact.test.mjs +0 -118
  1007. package/template/.hermes/skills/archify/test/ordinary-model-floor.test.mjs +0 -1024
  1008. package/template/.hermes/skills/archify/test/output-path.test.mjs +0 -587
  1009. package/template/.hermes/skills/archify/test/presentation.test.mjs +0 -71
  1010. package/template/.hermes/skills/archify/test/preset-tryon.test.mjs +0 -113
  1011. package/template/.hermes/skills/archify/test/preview-contract.test.mjs +0 -40
  1012. package/template/.hermes/skills/archify/test/preview.test.mjs +0 -499
  1013. package/template/.hermes/skills/archify/test/proof-aperture.test.mjs +0 -78
  1014. package/template/.hermes/skills/archify/test/reach-share-card.test.mjs +0 -149
  1015. package/template/.hermes/skills/archify/test/readme-showcase.test.mjs +0 -318
  1016. package/template/.hermes/skills/archify/test/real-repository-proof.test.mjs +0 -209
  1017. package/template/.hermes/skills/archify/test/relationship-direct-explorer.test.mjs +0 -115
  1018. package/template/.hermes/skills/archify/test/relationship-lens.test.mjs +0 -128
  1019. package/template/.hermes/skills/archify/test/relationship-permalink.test.mjs +0 -130
  1020. package/template/.hermes/skills/archify/test/relationship-pulse.test.mjs +0 -122
  1021. package/template/.hermes/skills/archify/test/release-identity.test.mjs +0 -504
  1022. package/template/.hermes/skills/archify/test/release-package-gates.test.mjs +0 -508
  1023. package/template/.hermes/skills/archify/test/render-output-checks.test.mjs +0 -435
  1024. package/template/.hermes/skills/archify/test/repair-receipt.test.mjs +0 -181
  1025. package/template/.hermes/skills/archify/test/repository-evidence.test.mjs +0 -217
  1026. package/template/.hermes/skills/archify/test/repository-language-metadata.test.mjs +0 -52
  1027. package/template/.hermes/skills/archify/test/route-journey.test.mjs +0 -123
  1028. package/template/.hermes/skills/archify/test/route-probe.test.mjs +0 -114
  1029. package/template/.hermes/skills/archify/test/route-share-card.test.mjs +0 -163
  1030. package/template/.hermes/skills/archify/test/semantic-camera.test.mjs +0 -88
  1031. package/template/.hermes/skills/archify/test/semantic-flow.test.mjs +0 -90
  1032. package/template/.hermes/skills/archify/test/semantic-legend-gateway.test.mjs +0 -156
  1033. package/template/.hermes/skills/archify/test/semantic-lens.test.mjs +0 -103
  1034. package/template/.hermes/skills/archify/test/semantic-passport.test.mjs +0 -99
  1035. package/template/.hermes/skills/archify/test/semantic-radar.test.mjs +0 -575
  1036. package/template/.hermes/skills/archify/test/semantic-zoom.test.mjs +0 -86
  1037. package/template/.hermes/skills/archify/test/sequence-column-fit.test.mjs +0 -137
  1038. package/template/.hermes/skills/archify/test/settled-flow.test.mjs +0 -97
  1039. package/template/.hermes/skills/archify/test/share-card-export.test.mjs +0 -132
  1040. package/template/.hermes/skills/archify/test/site-language-continuity.test.mjs +0 -562
  1041. package/template/.hermes/skills/archify/test/site-language-integration.mjs +0 -9
  1042. package/template/.hermes/skills/archify/test/skill-metadata.test.mjs +0 -84
  1043. package/template/.hermes/skills/archify/test/stable-update-manifest.test.mjs +0 -167
  1044. package/template/.hermes/skills/archify/test/start-page.test.mjs +0 -312
  1045. package/template/.hermes/skills/archify/test/story-beat-navigator.test.mjs +0 -103
  1046. package/template/.hermes/skills/archify/test/story-carrier.test.mjs +0 -90
  1047. package/template/.hermes/skills/archify/test/story-director-strip.test.mjs +0 -91
  1048. package/template/.hermes/skills/archify/test/story-follow-camera.test.mjs +0 -103
  1049. package/template/.hermes/skills/archify/test/story-horizon.test.mjs +0 -89
  1050. package/template/.hermes/skills/archify/test/story-moment-link.test.mjs +0 -93
  1051. package/template/.hermes/skills/archify/test/story-shelf.test.mjs +0 -84
  1052. package/template/.hermes/skills/archify/test/story-trail.test.mjs +0 -81
  1053. package/template/.hermes/skills/archify/test/toolbar-polish.test.mjs +0 -57
  1054. package/template/.hermes/skills/archify/test/update-contract.test.mjs +0 -133
  1055. package/template/.hermes/skills/archify/test/update-notifier.test.mjs +0 -3317
  1056. package/template/.hermes/skills/archify/test/v1-compatibility.test.mjs +0 -329
  1057. package/template/.hermes/skills/archify/test/vertical-edge.test.mjs +0 -68
  1058. package/template/.hermes/skills/archify/test/viewer-chrome-layout.test.mjs +0 -872
  1059. package/template/.hermes/skills/archify/test/visual-check.test.mjs +0 -400
  1060. package/template/.hermes/skills/archify/test/webm-artifact.smoke.mjs +0 -1840
  1061. package/template/.hermes/skills/archify/test/workflow-compiler-hard-contract.test.mjs +0 -2135
  1062. package/template/.hermes/skills/archify/test/workflow-compiler.test.mjs +0 -1163
  1063. package/template/.hermes/skills/archify/test/workflow-migration.test.mjs +0 -620
  1064. package/template/.hermes/skills/archify/test/workflow-semantic-contract.test.mjs +0 -131
  1065. package/template/.hermes/skills/archify/test/yss-safe-deliver.test.mjs +0 -153
  1066. package/template/.hermes/skills/ask-matt/PHASE-BOUNDARIES.md +0 -55
  1067. package/template/.hermes/skills/ask-matt/SKILL.md +0 -95
  1068. package/template/.hermes/skills/ask-matt/agents/openai.yaml +0 -5
  1069. package/template/.hermes/skills/code-review/SKILL.md +0 -122
  1070. package/template/.hermes/skills/code-review/agents/openai.yaml +0 -3
  1071. package/template/.hermes/skills/code-review/references/yss-review-standards.md +0 -54
  1072. package/template/.hermes/skills/codebase-design/DEEPENING.md +0 -37
  1073. package/template/.hermes/skills/codebase-design/DESIGN-IT-TWICE.md +0 -44
  1074. package/template/.hermes/skills/codebase-design/SKILL.md +0 -118
  1075. package/template/.hermes/skills/codebase-design/agents/openai.yaml +0 -3
  1076. package/template/.hermes/skills/competitive-intelligence/SKILL.md +0 -94
  1077. package/template/.hermes/skills/component-selection-imports/SKILL.md +0 -64
  1078. package/template/.hermes/skills/cross-repo-implementation-routing/SKILL.md +0 -51
  1079. package/template/.hermes/skills/diagnosing-bugs/SKILL.md +0 -138
  1080. package/template/.hermes/skills/diagnosing-bugs/agents/openai.yaml +0 -3
  1081. package/template/.hermes/skills/diagnosing-bugs/scripts/hitl-loop.template.sh +0 -44
  1082. package/template/.hermes/skills/dispatching-parallel-agents/SKILL.md +0 -185
  1083. package/template/.hermes/skills/domain-modeling/ADR-FORMAT.md +0 -47
  1084. package/template/.hermes/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  1085. package/template/.hermes/skills/domain-modeling/SKILL.md +0 -74
  1086. package/template/.hermes/skills/domain-modeling/agents/openai.yaml +0 -3
  1087. package/template/.hermes/skills/file-export-download/SKILL.md +0 -160
  1088. package/template/.hermes/skills/file-export-download/agents/openai.yaml +0 -4
  1089. package/template/.hermes/skills/formily-foundation/SKILL.md +0 -176
  1090. package/template/.hermes/skills/formily-foundation/references/examples.md +0 -486
  1091. package/template/.hermes/skills/formily-linkage-effects/SKILL.md +0 -167
  1092. package/template/.hermes/skills/formily-mode-slot-detail/SKILL.md +0 -137
  1093. package/template/.hermes/skills/formily-step-flow/SKILL.md +0 -194
  1094. package/template/.hermes/skills/frontend-commit/SKILL.md +0 -118
  1095. package/template/.hermes/skills/frontend-commit/agents/openai.yaml +0 -7
  1096. package/template/.hermes/skills/frontend-commit/references/scope-and-examples.md +0 -111
  1097. package/template/.hermes/skills/grill-me/SKILL.md +0 -7
  1098. package/template/.hermes/skills/grill-me/agents/openai.yaml +0 -5
  1099. package/template/.hermes/skills/grill-with-docs/SKILL.md +0 -19
  1100. package/template/.hermes/skills/grill-with-docs/agents/openai.yaml +0 -5
  1101. package/template/.hermes/skills/grilling/SKILL.md +0 -28
  1102. package/template/.hermes/skills/grilling/agents/openai.yaml +0 -3
  1103. package/template/.hermes/skills/handoff/SKILL.md +0 -16
  1104. package/template/.hermes/skills/handoff/agents/openai.yaml +0 -5
  1105. package/template/.hermes/skills/implement/SKILL.md +0 -15
  1106. package/template/.hermes/skills/implement/agents/openai.yaml +0 -5
  1107. package/template/.hermes/skills/implementation-repo-onboarding/SKILL.md +0 -50
  1108. package/template/.hermes/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
  1109. package/template/.hermes/skills/improve-codebase-architecture/SKILL.md +0 -71
  1110. package/template/.hermes/skills/improve-codebase-architecture/agents/openai.yaml +0 -5
  1111. package/template/.hermes/skills/java-backend-commit/SKILL.md +0 -121
  1112. package/template/.hermes/skills/java-backend-commit/agents/openai.yaml +0 -7
  1113. package/template/.hermes/skills/java-backend-commit/references/scope-and-examples.md +0 -118
  1114. package/template/.hermes/skills/llm-wiki/SKILL.md +0 -60
  1115. package/template/.hermes/skills/llm-wiki/assets/CLAUDE.md.template +0 -26
  1116. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/CLAUDE.md +0 -3
  1117. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/index.md +0 -5
  1118. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki/log.md +0 -1
  1119. package/template/.hermes/skills/llm-wiki/assets/fixtures/broken-wiki/wiki//345/255/230/345/234/250/347/232/204/351/241/265.md +0 -7
  1120. package/template/.hermes/skills/llm-wiki/references/compile.md +0 -126
  1121. package/template/.hermes/skills/llm-wiki/references/discover.md +0 -42
  1122. package/template/.hermes/skills/llm-wiki/references/ingest.md +0 -36
  1123. package/template/.hermes/skills/llm-wiki/references/lint.md +0 -54
  1124. package/template/.hermes/skills/llm-wiki/references/query.md +0 -21
  1125. package/template/.hermes/skills/llm-wiki/references/schema.md +0 -45
  1126. package/template/.hermes/skills/llm-wiki/references/writing.md +0 -35
  1127. package/template/.hermes/skills/llm-wiki/scripts/advise.mjs +0 -196
  1128. package/template/.hermes/skills/llm-wiki/scripts/advise.test.mjs +0 -91
  1129. package/template/.hermes/skills/llm-wiki/scripts/extract.mjs +0 -55
  1130. package/template/.hermes/skills/llm-wiki/scripts/extract.test.mjs +0 -34
  1131. package/template/.hermes/skills/llm-wiki/scripts/inventory.mjs +0 -174
  1132. package/template/.hermes/skills/llm-wiki/scripts/inventory.test.mjs +0 -98
  1133. package/template/.hermes/skills/llm-wiki/scripts/lint-wikilinks.mjs +0 -177
  1134. package/template/.hermes/skills/llm-wiki/scripts/lint-wikilinks.test.mjs +0 -212
  1135. package/template/.hermes/skills/lombok/SKILL.md +0 -351
  1136. package/template/.hermes/skills/loop-me/SKILL.md +0 -32
  1137. package/template/.hermes/skills/loop-me/agents/openai.yaml +0 -5
  1138. package/template/.hermes/skills/maintaining-skills/SKILL.md +0 -27
  1139. package/template/.hermes/skills/mapstruct/SKILL.md +0 -334
  1140. package/template/.hermes/skills/migrate-to-shoehorn/SKILL.md +0 -118
  1141. package/template/.hermes/skills/migrate-to-shoehorn/agents/openai.yaml +0 -3
  1142. package/template/.hermes/skills/page-form-module/SKILL.md +0 -168
  1143. package/template/.hermes/skills/page-list-module/SKILL.md +0 -137
  1144. package/template/.hermes/skills/page-skeleton/SKILL.md +0 -76
  1145. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/constant.ts +0 -34
  1146. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -75
  1147. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/index.vue +0 -107
  1148. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  1149. package/template/.hermes/skills/page-skeleton/examples/AdvancedFormPage/style.less +0 -30
  1150. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/constant.ts +0 -28
  1151. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -58
  1152. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/hooks/useRuleActions.ts +0 -65
  1153. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/index.vue +0 -91
  1154. package/template/.hermes/skills/page-skeleton/examples/StandardListPage/style.less +0 -49
  1155. package/template/.hermes/skills/prototype/LOGIC.md +0 -67
  1156. package/template/.hermes/skills/prototype/SKILL.md +0 -26
  1157. package/template/.hermes/skills/prototype/UI.md +0 -112
  1158. package/template/.hermes/skills/prototype/agents/openai.yaml +0 -3
  1159. package/template/.hermes/skills/prototype-page-acceptance/SKILL.md +0 -62
  1160. package/template/.hermes/skills/prototype-review/SKILL.md +0 -74
  1161. package/template/.hermes/skills/prototype-review/agents/openai.yaml +0 -4
  1162. package/template/.hermes/skills/research/SKILL.md +0 -12
  1163. package/template/.hermes/skills/research/agents/openai.yaml +0 -3
  1164. package/template/.hermes/skills/resolving-merge-conflicts/SKILL.md +0 -14
  1165. package/template/.hermes/skills/resolving-merge-conflicts/agents/openai.yaml +0 -3
  1166. package/template/.hermes/skills/scaffold-exercises/SKILL.md +0 -106
  1167. package/template/.hermes/skills/scaffold-exercises/agents/openai.yaml +0 -3
  1168. package/template/.hermes/skills/setup-matt-pocock-skills/SKILL.md +0 -125
  1169. package/template/.hermes/skills/setup-matt-pocock-skills/agents/openai.yaml +0 -5
  1170. package/template/.hermes/skills/setup-matt-pocock-skills/domain.md +0 -51
  1171. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -45
  1172. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -46
  1173. package/template/.hermes/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -66
  1174. package/template/.hermes/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
  1175. package/template/.hermes/skills/setup-pre-commit/SKILL.md +0 -91
  1176. package/template/.hermes/skills/setup-pre-commit/agents/openai.yaml +0 -3
  1177. package/template/.hermes/skills/setup-ts-deep-modules/SKILL.md +0 -102
  1178. package/template/.hermes/skills/setup-ts-deep-modules/agents/openai.yaml +0 -5
  1179. package/template/.hermes/skills/setup-ts-deep-modules/dependency-cruiser.config.cjs +0 -95
  1180. package/template/.hermes/skills/tdd/SKILL.md +0 -38
  1181. package/template/.hermes/skills/tdd/agents/openai.yaml +0 -3
  1182. package/template/.hermes/skills/tdd/mocking.md +0 -59
  1183. package/template/.hermes/skills/tdd/tests.md +0 -77
  1184. package/template/.hermes/skills/teach/GLOSSARY-FORMAT.md +0 -35
  1185. package/template/.hermes/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
  1186. package/template/.hermes/skills/teach/MISSION-FORMAT.md +0 -31
  1187. package/template/.hermes/skills/teach/RESOURCES-FORMAT.md +0 -32
  1188. package/template/.hermes/skills/teach/SKILL.md +0 -140
  1189. package/template/.hermes/skills/teach/agents/openai.yaml +0 -5
  1190. package/template/.hermes/skills/theme-token-usage/SKILL.md +0 -123
  1191. package/template/.hermes/skills/theme-token-usage/agents/openai.yaml +0 -4
  1192. package/template/.hermes/skills/to-questionnaire/SKILL.md +0 -53
  1193. package/template/.hermes/skills/to-questionnaire/agents/openai.yaml +0 -5
  1194. package/template/.hermes/skills/to-spec/SKILL.md +0 -75
  1195. package/template/.hermes/skills/to-spec/agents/openai.yaml +0 -5
  1196. package/template/.hermes/skills/to-tickets/SKILL.md +0 -105
  1197. package/template/.hermes/skills/to-tickets/agents/openai.yaml +0 -5
  1198. package/template/.hermes/skills/triage/AGENT-BRIEF.md +0 -207
  1199. package/template/.hermes/skills/triage/OUT-OF-SCOPE.md +0 -105
  1200. package/template/.hermes/skills/triage/SKILL.md +0 -112
  1201. package/template/.hermes/skills/triage/agents/openai.yaml +0 -5
  1202. package/template/.hermes/skills/using-git-worktrees/SKILL.md +0 -202
  1203. package/template/.hermes/skills/vue3-best-practices/SKILL.md +0 -68
  1204. package/template/.hermes/skills/wait-what/SKILL.md +0 -7
  1205. package/template/.hermes/skills/wait-what/agents/openai.yaml +0 -5
  1206. package/template/.hermes/skills/wayfinder/SKILL.md +0 -128
  1207. package/template/.hermes/skills/wayfinder/agents/openai.yaml +0 -5
  1208. package/template/.hermes/skills/writing-beats/SKILL.md +0 -67
  1209. package/template/.hermes/skills/writing-beats/agents/openai.yaml +0 -5
  1210. package/template/.hermes/skills/writing-for-agents/SKILL-MECHANICS.md +0 -22
  1211. package/template/.hermes/skills/writing-for-agents/SKILL.md +0 -81
  1212. package/template/.hermes/skills/writing-for-agents/agents/openai.yaml +0 -3
  1213. package/template/.hermes/skills/writing-fragments/SKILL.md +0 -79
  1214. package/template/.hermes/skills/writing-fragments/agents/openai.yaml +0 -5
  1215. package/template/.hermes/skills/writing-shape/SKILL.md +0 -79
  1216. package/template/.hermes/skills/writing-shape/agents/openai.yaml +0 -5
  1217. package/template/.hermes/skills/yedit-table-usage/SKILL.md +0 -227
  1218. package/template/.hermes/skills/yss-antd-design/SKILL.md +0 -34
  1219. package/template/.hermes/skills/yss-antd-design/references/boundaries.md +0 -30
  1220. package/template/.hermes/skills/yss-antd-design/references/cli-matrix.md +0 -38
  1221. package/template/.hermes/skills/yss-antd-design/references/evidence.md +0 -30
  1222. package/template/.hermes/skills/yss-antd-design/scripts/validate-frontmatter.mjs +0 -46
  1223. package/template/.hermes/skills/yss-antd-design/scripts/validate-frontmatter.test.mjs +0 -27
  1224. package/template/.hermes/skills/yss-api-integration/SKILL.md +0 -185
  1225. package/template/.hermes/skills/yss-api-integration/agents/openai.yaml +0 -5
  1226. package/template/.hermes/skills/yss-application/SKILL.md +0 -54
  1227. package/template/.hermes/skills/yss-application/agents/openai.yaml +0 -5
  1228. package/template/.hermes/skills/yss-application/references/application-layer-guide.md +0 -87
  1229. package/template/.hermes/skills/yss-audit-log/SKILL.md +0 -67
  1230. package/template/.hermes/skills/yss-audit-log/agents/openai.yaml +0 -5
  1231. package/template/.hermes/skills/yss-audit-log/assets/AuditLogAspect.java +0 -262
  1232. package/template/.hermes/skills/yss-audit-log/assets/YssAuditLogPrintSubscriberImpl.java +0 -37
  1233. package/template/.hermes/skills/yss-audit-log/assets/YssAuditLogSysManagerSubscriberImpl.java +0 -18
  1234. package/template/.hermes/skills/yss-audit-log/assets/YssAuditPublishService.java +0 -69
  1235. package/template/.hermes/skills/yss-audit-log/references/README.md +0 -69
  1236. package/template/.hermes/skills/yss-audit-log/references/source-index.md +0 -43
  1237. package/template/.hermes/skills/yss-cache/SKILL.md +0 -44
  1238. package/template/.hermes/skills/yss-cache/agents/openai.yaml +0 -5
  1239. package/template/.hermes/skills/yss-cache/references/annotations.md +0 -39
  1240. package/template/.hermes/skills/yss-cache/references/architecture.md +0 -25
  1241. package/template/.hermes/skills/yss-cache/references/configuration.md +0 -34
  1242. package/template/.hermes/skills/yss-cache/references/redis-fallback.md +0 -23
  1243. package/template/.hermes/skills/yss-cache/references/redis-topology.md +0 -62
  1244. package/template/.hermes/skills/yss-cache/references/serialization.md +0 -17
  1245. package/template/.hermes/skills/yss-cache/references/source-index.md +0 -67
  1246. package/template/.hermes/skills/yss-cache/references/troubleshooting.md +0 -33
  1247. package/template/.hermes/skills/yss-cache/references/verification.md +0 -34
  1248. package/template/.hermes/skills/yss-cache/scripts/check-skill-freshness.sh +0 -84
  1249. package/template/.hermes/skills/yss-cache/scripts/inspect-cache-usage.sh +0 -96
  1250. package/template/.hermes/skills/yss-cache/scripts/verify-cache-component.sh +0 -101
  1251. package/template/.hermes/skills/yss-components/SKILL.md +0 -386
  1252. package/template/.hermes/skills/yss-components/agents/openai.yaml +0 -5
  1253. package/template/.hermes/skills/yss-components/references/frontend-docs.md +0 -9
  1254. package/template/.hermes/skills/yss-ddd-scaffold-generator/SKILL.md +0 -110
  1255. package/template/.hermes/skills/yss-ddd-scaffold-generator/agents/openai.yaml +0 -5
  1256. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application-local.yml.template +0 -8
  1257. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/application.yml.template +0 -36
  1258. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/config/logback-spring.xml.template +0 -15
  1259. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/architecture-rules-test.java.template +0 -36
  1260. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/java/bootstrap-application.java.template +0 -15
  1261. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/adapter-pom.xml.template +0 -19
  1262. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/application-pom.xml.template +0 -52
  1263. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/bootstrap-pom.xml.template +0 -70
  1264. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/domain-pom.xml.template +0 -22
  1265. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/infrastructure-pom.xml.template +0 -54
  1266. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/parent-pom.xml.template +0 -155
  1267. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/templates/pom/web-pom.xml.template +0 -58
  1268. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/jvm.config +0 -1
  1269. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/maven.config +0 -2
  1270. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/settings.xml +0 -41
  1271. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  1272. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.jar +0 -0
  1273. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/.mvn/wrapper/maven-wrapper.properties +0 -20
  1274. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/mvnw +0 -316
  1275. package/template/.hermes/skills/yss-ddd-scaffold-generator/assets/wrapper/mvnw.cmd +0 -188
  1276. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/ARCHITECTURE.md +0 -116
  1277. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/USAGE_EXAMPLES.md +0 -114
  1278. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/SKILL.md +0 -31
  1279. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-adapter/agents/openai.yaml +0 -5
  1280. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/SKILL.md +0 -8
  1281. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-application/agents/openai.yaml +0 -5
  1282. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/SKILL.md +0 -8
  1283. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-domain/agents/openai.yaml +0 -5
  1284. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/SKILL.md +0 -8
  1285. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-infrastructure/agents/openai.yaml +0 -5
  1286. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/SKILL.md +0 -57
  1287. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-parent/agents/openai.yaml +0 -5
  1288. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/SKILL.md +0 -8
  1289. package/template/.hermes/skills/yss-ddd-scaffold-generator/references/yss-backend-scaffold-web/agents/openai.yaml +0 -5
  1290. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/first-slice-compatibility.test.mjs +0 -191
  1291. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_and_verify_scaffold.mjs +0 -126
  1292. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/generate_scaffold.mjs +0 -349
  1293. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/run_scaffold_verification.mjs +0 -112
  1294. package/template/.hermes/skills/yss-ddd-scaffold-generator/scripts/scaffold-generator.test.mjs +0 -388
  1295. package/template/.hermes/skills/yss-design-system/SKILL.md +0 -105
  1296. package/template/.hermes/skills/yss-design-system/agents/openai.yaml +0 -5
  1297. package/template/.hermes/skills/yss-design-system/references/design-qa-theme.md +0 -64
  1298. package/template/.hermes/skills/yss-design-system/references/design-system.md +0 -245
  1299. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.mjs +0 -36
  1300. package/template/.hermes/skills/yss-design-system/scripts/validate-frontmatter.test.mjs +0 -12
  1301. package/template/.hermes/skills/yss-distributed-id/SKILL.md +0 -69
  1302. package/template/.hermes/skills/yss-distributed-id/agents/openai.yaml +0 -5
  1303. package/template/.hermes/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
  1304. package/template/.hermes/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
  1305. package/template/.hermes/skills/yss-distributed-id/assets/LeafConf.java +0 -36
  1306. package/template/.hermes/skills/yss-distributed-id/references/README.md +0 -51
  1307. package/template/.hermes/skills/yss-distributed-id/references/source-index.md +0 -86
  1308. package/template/.hermes/skills/yss-domain/SKILL.md +0 -69
  1309. package/template/.hermes/skills/yss-domain/agents/openai.yaml +0 -5
  1310. package/template/.hermes/skills/yss-domain/references/domain-layer-guide.md +0 -99
  1311. package/template/.hermes/skills/yss-dto/SKILL.md +0 -86
  1312. package/template/.hermes/skills/yss-dto/agents/openai.yaml +0 -5
  1313. package/template/.hermes/skills/yss-dto/assets/CommandDTO.java +0 -8
  1314. package/template/.hermes/skills/yss-dto/assets/PageQuery.java +0 -133
  1315. package/template/.hermes/skills/yss-dto/assets/QueryDTO.java +0 -6
  1316. package/template/.hermes/skills/yss-dto/assets/Result.java +0 -105
  1317. package/template/.hermes/skills/yss-dto/references/README.md +0 -67
  1318. package/template/.hermes/skills/yss-dto/references/openapi-wire-profile.yaml +0 -181
  1319. package/template/.hermes/skills/yss-dto/references/source-index.md +0 -55
  1320. package/template/.hermes/skills/yss-excel-mvc/SKILL.md +0 -66
  1321. package/template/.hermes/skills/yss-excel-mvc/agents/openai.yaml +0 -5
  1322. package/template/.hermes/skills/yss-excel-mvc/assets/ExcelDynamicData.java +0 -66
  1323. package/template/.hermes/skills/yss-excel-mvc/assets/RequestExcel.java +0 -33
  1324. package/template/.hermes/skills/yss-excel-mvc/assets/RequestFastExcelArgumentResolver.java +0 -272
  1325. package/template/.hermes/skills/yss-excel-mvc/assets/ResponseExcel.java +0 -46
  1326. package/template/.hermes/skills/yss-excel-mvc/assets/ResponseFastExcelReturnValueHandler.java +0 -154
  1327. package/template/.hermes/skills/yss-excel-mvc/references/README.md +0 -5
  1328. package/template/.hermes/skills/yss-excel-mvc/references/source-index.md +0 -74
  1329. package/template/.hermes/skills/yss-exception/SKILL.md +0 -57
  1330. package/template/.hermes/skills/yss-exception/agents/openai.yaml +0 -4
  1331. package/template/.hermes/skills/yss-exception/references/source-index.md +0 -35
  1332. package/template/.hermes/skills/yss-formily/SKILL.md +0 -272
  1333. package/template/.hermes/skills/yss-formily-schema-generator/SKILL.md +0 -189
  1334. package/template/.hermes/skills/yss-formily-schema-generator/agents/openai.yaml +0 -5
  1335. package/template/.hermes/skills/yss-formily-schema-generator/assets/java-sdk/ExampleUsage.java +0 -111
  1336. package/template/.hermes/skills/yss-formily-schema-generator/assets/java-sdk/YssFormilyDsl.java +0 -1219
  1337. package/template/.hermes/skills/yss-formily-schema-generator/references/workflow.md +0 -240
  1338. package/template/.hermes/skills/yss-frontend-scaffold-generator/SKILL.md +0 -76
  1339. package/template/.hermes/skills/yss-hook/SKILL.md +0 -200
  1340. package/template/.hermes/skills/yss-hook/agents/openai.yaml +0 -5
  1341. package/template/.hermes/skills/yss-hook/references/frontend-docs.md +0 -10
  1342. package/template/.hermes/skills/yss-microapp-commit/SKILL.md +0 -201
  1343. package/template/.hermes/skills/yss-microapp-commit/agents/openai.yaml +0 -5
  1344. package/template/.hermes/skills/yss-microapp-commit/references/scope-mapping.md +0 -204
  1345. package/template/.hermes/skills/yss-mybatis/SKILL.md +0 -77
  1346. package/template/.hermes/skills/yss-mybatis/agents/openai.yaml +0 -5
  1347. package/template/.hermes/skills/yss-mybatis/assets/BaseRepository.java +0 -112
  1348. package/template/.hermes/skills/yss-mybatis/assets/EntityQueryAspect.java +0 -37
  1349. package/template/.hermes/skills/yss-mybatis/assets/MybatisBaseConfiguration.java +0 -18
  1350. package/template/.hermes/skills/yss-mybatis/assets/PageQueryEntityConfigration.java +0 -18
  1351. package/template/.hermes/skills/yss-mybatis/references/README.md +0 -57
  1352. package/template/.hermes/skills/yss-mybatis/references/source-index.md +0 -93
  1353. package/template/.hermes/skills/yss-openapi-draft-review/SKILL.md +0 -82
  1354. package/template/.hermes/skills/yss-openapi-governance/SKILL.md +0 -130
  1355. package/template/.hermes/skills/yss-openapi-governance/agents/openai.yaml +0 -4
  1356. package/template/.hermes/skills/yss-page-module-development/SKILL.md +0 -165
  1357. package/template/.hermes/skills/yss-page-module-development/agents/openai.yaml +0 -5
  1358. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/constant.ts +0 -32
  1359. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/hooks/useRuleConfig.ts +0 -158
  1360. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/index.vue +0 -188
  1361. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/schemas/ruleConfigSchema.ts +0 -256
  1362. package/template/.hermes/skills/yss-page-module-development/examples/AdvancedFormPage/style.less +0 -76
  1363. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/constant.ts +0 -128
  1364. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/hooks/useQualityRuleList.ts +0 -144
  1365. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/hooks/useRuleActions.ts +0 -141
  1366. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/index.vue +0 -175
  1367. package/template/.hermes/skills/yss-page-module-development/examples/StandardListPage/style.less +0 -83
  1368. package/template/.hermes/skills/yss-page-module-development/references/component-map.md +0 -34
  1369. package/template/.hermes/skills/yss-page-module-development/references/frontend-docs.md +0 -11
  1370. package/template/.hermes/skills/yss-page-module-development/references/hooks-map.md +0 -11
  1371. package/template/.hermes/skills/yss-page-module-development/references/utils-map.md +0 -14
  1372. package/template/.hermes/skills/yss-product-lifecycle/SKILL.md +0 -52
  1373. package/template/.hermes/skills/yss-product-lifecycle/agents/openai.yaml +0 -4
  1374. package/template/.hermes/skills/yss-product-lifecycle/references/artifact-dependencies.md +0 -36
  1375. package/template/.hermes/skills/yss-product-lifecycle/references/matt-yss-adapter.md +0 -122
  1376. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration-contract.yaml +0 -863
  1377. package/template/.hermes/skills/yss-product-lifecycle/references/orchestration.md +0 -116
  1378. package/template/.hermes/skills/yss-product-lifecycle/references/state-model.md +0 -112
  1379. package/template/.hermes/skills/yss-prototype-stage/SKILL.md +0 -47
  1380. package/template/.hermes/skills/yss-prototype-stage/references/product-design-adapter.md +0 -54
  1381. package/template/.hermes/skills/yss-prototype-stage/scripts/prototype-contract.mjs +0 -207
  1382. package/template/.hermes/skills/yss-prototype-stage/tests/run-scenarios.mjs +0 -154
  1383. package/template/.hermes/skills/yss-repository/SKILL.md +0 -78
  1384. package/template/.hermes/skills/yss-repository/agents/openai.yaml +0 -5
  1385. package/template/.hermes/skills/yss-repository/references/infrastructure-layer-guide.md +0 -107
  1386. package/template/.hermes/skills/yss-resilience4j/SKILL.md +0 -46
  1387. package/template/.hermes/skills/yss-resilience4j/agents/openai.yaml +0 -4
  1388. package/template/.hermes/skills/yss-resilience4j/references/source-index.md +0 -33
  1389. package/template/.hermes/skills/yss-router/SKILL.md +0 -51
  1390. package/template/.hermes/skills/yss-router/agents/openai.yaml +0 -4
  1391. package/template/.hermes/skills/yss-router/references/boundaries.md +0 -50
  1392. package/template/.hermes/skills/yss-router/references/router-contract.yaml +0 -345
  1393. package/template/.hermes/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1394. package/template/.hermes/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1395. package/template/.hermes/skills/yss-security-algorithm/SKILL.md +0 -52
  1396. package/template/.hermes/skills/yss-security-algorithm/agents/openai.yaml +0 -4
  1397. package/template/.hermes/skills/yss-security-algorithm/references/source-index.md +0 -35
  1398. package/template/.hermes/skills/yss-source-index/SKILL.md +0 -63
  1399. package/template/.hermes/skills/yss-source-index/agents/openai.yaml +0 -4
  1400. package/template/.hermes/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1401. package/template/.hermes/skills/yss-stage-decision/SKILL.md +0 -50
  1402. package/template/.hermes/skills/yss-stage-decision/references/domain-strategy-contract.md +0 -26
  1403. package/template/.hermes/skills/yss-stage-decision/references/domain-strategy.schema.json +0 -128
  1404. package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package-contract.md +0 -19
  1405. package/template/.hermes/skills/yss-stage-decision/references/stage-decision-package.schema.json +0 -86
  1406. package/template/.hermes/skills/yss-stage-decision/references/validation-rules.md +0 -18
  1407. package/template/.hermes/skills/yss-stage-decision/scripts/validate-domain-strategy.mjs +0 -169
  1408. package/template/.hermes/skills/yss-stage-decision/scripts/validate-stage-decision-package.mjs +0 -100
  1409. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/domain-strategy-approval.yaml +0 -15
  1410. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-direction.yaml +0 -58
  1411. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/invalid-stage-decision-blocker.yaml +0 -44
  1412. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/stage-decision-approval.yaml +0 -15
  1413. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-stage-decision-package.yaml +0 -49
  1414. package/template/.hermes/skills/yss-stage-decision/tests/fixtures/valid-supplier-domain.yaml +0 -108
  1415. package/template/.hermes/skills/yss-stage-decision/tests/run-scenarios.mjs +0 -68
  1416. package/template/.hermes/skills/yss-tactical-design/SKILL.md +0 -35
  1417. package/template/.hermes/skills/yss-tactical-design/agents/openai.yaml +0 -4
  1418. package/template/.hermes/skills/yss-tactical-design/references/output-template.md +0 -28
  1419. package/template/.hermes/skills/yss-tactical-design/references/tactical-design-contract.md +0 -41
  1420. package/template/.hermes/skills/yss-tactical-design/references/tactical-design.schema.json +0 -31
  1421. package/template/.hermes/skills/yss-tactical-design/references/validation-rules.md +0 -13
  1422. package/template/.hermes/skills/yss-tactical-design/scripts/validate-tactical-design.mjs +0 -213
  1423. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-api-leaks-aggregate.yaml +0 -21
  1424. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-consistency-policy.yaml +0 -21
  1425. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-missing-invariant.yaml +0 -21
  1426. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-stale-upstream-ref.yaml +0 -21
  1427. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/invalid-strategic-as-tactical.yaml +0 -21
  1428. package/template/.hermes/skills/yss-tactical-design/tests/fixtures/valid-tactical-design.yaml +0 -80
  1429. package/template/.hermes/skills/yss-tactical-design/tests/run-scenarios.mjs +0 -47
  1430. package/template/.hermes/skills/yss-ui/SKILL.md +0 -170
  1431. package/template/.hermes/skills/yss-ui/agents/openai.yaml +0 -5
  1432. package/template/.hermes/skills/yss-ui/assets/demos/button/auth-basic.vue +0 -24
  1433. package/template/.hermes/skills/yss-ui/assets/demos/button/auth-dropdown.vue +0 -29
  1434. package/template/.hermes/skills/yss-ui/assets/demos/button/permission.vue +0 -10
  1435. package/template/.hermes/skills/yss-ui/assets/demos/button/size.vue +0 -12
  1436. package/template/.hermes/skills/yss-ui/assets/demos/button/states.vue +0 -12
  1437. package/template/.hermes/skills/yss-ui/assets/demos/card/basic/index.vue +0 -54
  1438. package/template/.hermes/skills/yss-ui/assets/demos/card/basic/style.less +0 -41
  1439. package/template/.hermes/skills/yss-ui/assets/demos/card/cover/index.vue +0 -25
  1440. package/template/.hermes/skills/yss-ui/assets/demos/card/flexible-layout/index.vue +0 -122
  1441. package/template/.hermes/skills/yss-ui/assets/demos/card/flexible-layout/style.less +0 -191
  1442. package/template/.hermes/skills/yss-ui/assets/demos/card/header-extra/index.vue +0 -260
  1443. package/template/.hermes/skills/yss-ui/assets/demos/card/header-extra/style.less +0 -124
  1444. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/constants.ts +0 -61
  1445. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/index.vue +0 -72
  1446. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/metrics-cards.vue +0 -70
  1447. package/template/.hermes/skills/yss-ui/assets/demos/card/layout-metrics/style.less +0 -232
  1448. package/template/.hermes/skills/yss-ui/assets/demos/card/loading/index.vue +0 -19
  1449. package/template/.hermes/skills/yss-ui/assets/demos/card/meta/index.vue +0 -19
  1450. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/constants.ts +0 -44
  1451. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/hooks/useConditionBasic.ts +0 -18
  1452. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/basic/index.vue +0 -100
  1453. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/constants.ts +0 -51
  1454. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/hooks/useConditionLinked.ts +0 -29
  1455. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/linked/index.vue +0 -23
  1456. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/constants.ts +0 -35
  1457. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/hooks/useConditionNesting.ts +0 -25
  1458. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/nesting-between/index.vue +0 -24
  1459. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/constants.ts +0 -7
  1460. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/hooks/useConditionRemote.ts +0 -75
  1461. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/remote/index.vue +0 -23
  1462. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/constants.ts +0 -42
  1463. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/hooks/useConditionBasic.ts +0 -22
  1464. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation/index.vue +0 -138
  1465. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/constants.ts +0 -42
  1466. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/hooks/useConditionBasic.ts +0 -22
  1467. package/template/.hermes/skills/yss-ui/assets/demos/condition-builder/validation-custom/index.vue +0 -134
  1468. package/template/.hermes/skills/yss-ui/assets/demos/cron/basic/index.vue +0 -54
  1469. package/template/.hermes/skills/yss-ui/assets/demos/cron/select/index.vue +0 -145
  1470. package/template/.hermes/skills/yss-ui/assets/demos/echarts/basic.vue +0 -30
  1471. package/template/.hermes/skills/yss-ui/assets/demos/echarts/calendar-heatmap.vue +0 -49
  1472. package/template/.hermes/skills/yss-ui/assets/demos/echarts/candlestick.vue +0 -30
  1473. package/template/.hermes/skills/yss-ui/assets/demos/echarts/dark.vue +0 -40
  1474. package/template/.hermes/skills/yss-ui/assets/demos/echarts/expose-methods.vue +0 -97
  1475. package/template/.hermes/skills/yss-ui/assets/demos/echarts/funnel.vue +0 -42
  1476. package/template/.hermes/skills/yss-ui/assets/demos/echarts/gauge.vue +0 -25
  1477. package/template/.hermes/skills/yss-ui/assets/demos/echarts/line.vue +0 -24
  1478. package/template/.hermes/skills/yss-ui/assets/demos/echarts/mix.vue +0 -33
  1479. package/template/.hermes/skills/yss-ui/assets/demos/echarts/pie.vue +0 -34
  1480. package/template/.hermes/skills/yss-ui/assets/demos/echarts/radar.vue +0 -38
  1481. package/template/.hermes/skills/yss-ui/assets/demos/echarts/ring-segment.vue +0 -77
  1482. package/template/.hermes/skills/yss-ui/assets/demos/echarts/scatter.vue +0 -23
  1483. package/template/.hermes/skills/yss-ui/assets/demos/echarts/stacked-area.vue +0 -55
  1484. package/template/.hermes/skills/yss-ui/assets/demos/echarts/stacked-bar.vue +0 -52
  1485. package/template/.hermes/skills/yss-ui/assets/demos/echarts/treemap.vue +0 -30
  1486. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/all-types/hooks/useAllTypes.ts +0 -259
  1487. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/all-types/index.vue +0 -33
  1488. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/async-remote/hooks/useAsyncRemote.ts +0 -201
  1489. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/async-remote/index.vue +0 -45
  1490. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/basic/index.vue +0 -104
  1491. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/big-data/index.vue +0 -82
  1492. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/custom-rule/index.vue +0 -114
  1493. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/direct-editable/index.vue +0 -94
  1494. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/drag/index.vue +0 -125
  1495. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/filter/index.vue +0 -107
  1496. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/linkage/index.vue +0 -181
  1497. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/pagination-action/index.vue +0 -131
  1498. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/required/index.vue +0 -95
  1499. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/row-edit/index.vue +0 -220
  1500. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/row-options/index.vue +0 -165
  1501. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/slot-linkage/index.vue +0 -184
  1502. package/template/.hermes/skills/yss-ui/assets/demos/edit-table/submit-view/index.vue +0 -107
  1503. package/template/.hermes/skills/yss-ui/assets/demos/file-import/basic.vue +0 -54
  1504. package/template/.hermes/skills/yss-ui/assets/demos/file-import/formily.vue +0 -42
  1505. package/template/.hermes/skills/yss-ui/assets/demos/file-import/multiple.vue +0 -33
  1506. package/template/.hermes/skills/yss-ui/assets/demos/file-import/result-slot.vue +0 -30
  1507. package/template/.hermes/skills/yss-ui/assets/demos/formily/actions.vue +0 -61
  1508. package/template/.hermes/skills/yss-ui/assets/demos/formily/align.vue +0 -56
  1509. package/template/.hermes/skills/yss-ui/assets/demos/formily/async-validate.vue +0 -69
  1510. package/template/.hermes/skills/yss-ui/assets/demos/formily/basic.vue +0 -317
  1511. package/template/.hermes/skills/yss-ui/assets/demos/formily/collapse.vue +0 -104
  1512. package/template/.hermes/skills/yss-ui/assets/demos/formily/custom-component.vue +0 -75
  1513. package/template/.hermes/skills/yss-ui/assets/demos/formily/disabled.vue +0 -71
  1514. package/template/.hermes/skills/yss-ui/assets/demos/formily/dynamic-array.vue +0 -74
  1515. package/template/.hermes/skills/yss-ui/assets/demos/formily/dynamic.vue +0 -59
  1516. package/template/.hermes/skills/yss-ui/assets/demos/formily/effects.vue +0 -117
  1517. package/template/.hermes/skills/yss-ui/assets/demos/formily/events-inline.vue +0 -82
  1518. package/template/.hermes/skills/yss-ui/assets/demos/formily/events-scope.vue +0 -101
  1519. package/template/.hermes/skills/yss-ui/assets/demos/formily/grid.vue +0 -71
  1520. package/template/.hermes/skills/yss-ui/assets/demos/formily/group.vue +0 -102
  1521. package/template/.hermes/skills/yss-ui/assets/demos/formily/helper-slot.vue +0 -50
  1522. package/template/.hermes/skills/yss-ui/assets/demos/formily/label-tip.vue +0 -42
  1523. package/template/.hermes/skills/yss-ui/assets/demos/formily/linkage-multi.vue +0 -127
  1524. package/template/.hermes/skills/yss-ui/assets/demos/formily/linkage.vue +0 -78
  1525. package/template/.hermes/skills/yss-ui/assets/demos/formily/modes.vue +0 -72
  1526. package/template/.hermes/skills/yss-ui/assets/demos/formily/remote-enum.vue +0 -88
  1527. package/template/.hermes/skills/yss-ui/assets/demos/formily/slot.vue +0 -54
  1528. package/template/.hermes/skills/yss-ui/assets/demos/formily/steps.vue +0 -135
  1529. package/template/.hermes/skills/yss-ui/assets/demos/formily/submit-failed.vue +0 -72
  1530. package/template/.hermes/skills/yss-ui/assets/demos/monaco/basic.vue +0 -40
  1531. package/template/.hermes/skills/yss-ui/assets/demos/monaco/diff-basic.vue +0 -143
  1532. package/template/.hermes/skills/yss-ui/assets/demos/monaco/fullscreen.vue +0 -84
  1533. package/template/.hermes/skills/yss-ui/assets/demos/monaco/history-log-viewer.vue +0 -586
  1534. package/template/.hermes/skills/yss-ui/assets/demos/monaco/log-viewer.vue +0 -260
  1535. package/template/.hermes/skills/yss-ui/assets/demos/monaco/mock/mockLogApi.ts +0 -199
  1536. package/template/.hermes/skills/yss-ui/assets/demos/monaco/monaco.vue +0 -66
  1537. package/template/.hermes/skills/yss-ui/assets/demos/monaco/readonly.vue +0 -20
  1538. package/template/.hermes/skills/yss-ui/assets/demos/monaco/resizable.vue +0 -22
  1539. package/template/.hermes/skills/yss-ui/assets/demos/monaco/sql-schema.vue +0 -20
  1540. package/template/.hermes/skills/yss-ui/assets/demos/monaco/switch-lang-theme.vue +0 -48
  1541. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/constant.ts +0 -18
  1542. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/index.vue +0 -60
  1543. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table/style.less +0 -39
  1544. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/hooks/useTreeTable.ts +0 -158
  1545. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/index.vue +0 -88
  1546. package/template/.hermes/skills/yss-ui/assets/demos/split-pane/tree-table-layout/style.less +0 -73
  1547. package/template/.hermes/skills/yss-ui/assets/demos/table/action/index.vue +0 -83
  1548. package/template/.hermes/skills/yss-ui/assets/demos/table/action/style.less +0 -3
  1549. package/template/.hermes/skills/yss-ui/assets/demos/table/action-auth/index.vue +0 -41
  1550. package/template/.hermes/skills/yss-ui/assets/demos/table/action-slot/index.vue +0 -62
  1551. package/template/.hermes/skills/yss-ui/assets/demos/table/action-slot/style.less +0 -36
  1552. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/hooks/useBasicTable.ts +0 -205
  1553. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/index.vue +0 -89
  1554. package/template/.hermes/skills/yss-ui/assets/demos/table/basic/style.less +0 -28
  1555. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/hooks/useColumnCustomSearch.ts +0 -236
  1556. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/index.vue +0 -141
  1557. package/template/.hermes/skills/yss-ui/assets/demos/table/column-custom-search/style.less +0 -48
  1558. package/template/.hermes/skills/yss-ui/assets/demos/table/drag/index.vue +0 -42
  1559. package/template/.hermes/skills/yss-ui/assets/demos/table/expand/action-expand.vue +0 -142
  1560. package/template/.hermes/skills/yss-ui/assets/demos/table/expand/index.vue +0 -35
  1561. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-async/index.vue +0 -93
  1562. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-auto/index.vue +0 -99
  1563. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-custom/index.vue +0 -72
  1564. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-local/index.vue +0 -112
  1565. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-mixed/index.vue +0 -142
  1566. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/constant.ts +0 -129
  1567. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/hooks/useTableData.ts +0 -186
  1568. package/template/.hermes/skills/yss-ui/assets/demos/table/filter-remote/index.vue +0 -73
  1569. package/template/.hermes/skills/yss-ui/assets/demos/table/group-header/index.vue +0 -86
  1570. package/template/.hermes/skills/yss-ui/assets/demos/table/group-header/style.less +0 -3
  1571. package/template/.hermes/skills/yss-ui/assets/demos/table/header-height/index.vue +0 -29
  1572. package/template/.hermes/skills/yss-ui/assets/demos/table/header-height/style.less +0 -9
  1573. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/hooks/useMergeCells.ts +0 -183
  1574. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/index.vue +0 -17
  1575. package/template/.hermes/skills/yss-ui/assets/demos/table/merge-cells/style.less +0 -3
  1576. package/template/.hermes/skills/yss-ui/assets/demos/table/pagination-remote/hooks/usePaginationRemote.ts +0 -106
  1577. package/template/.hermes/skills/yss-ui/assets/demos/table/pagination-remote/index.vue +0 -24
  1578. package/template/.hermes/skills/yss-ui/assets/demos/table/renderers/index.vue +0 -64
  1579. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-checkbox/index.vue +0 -88
  1580. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-checkbox/style.less +0 -9
  1581. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-radio/index.vue +0 -57
  1582. package/template/.hermes/skills/yss-ui/assets/demos/table/selection-radio/style.less +0 -9
  1583. package/template/.hermes/skills/yss-ui/assets/demos/table/transform/index.vue +0 -32
  1584. package/template/.hermes/skills/yss-ui/assets/demos/tree/basic-left/index.vue +0 -124
  1585. package/template/.hermes/skills/yss-ui/assets/demos/tree/datasource-group/index.vue +0 -31
  1586. package/template/.hermes/skills/yss-ui/assets/demos/tree/multi-checkable/index.vue +0 -86
  1587. package/template/.hermes/skills/yss-ui/assets/demos/tree/multiple-select/index.vue +0 -76
  1588. package/template/.hermes/skills/yss-ui/assets/demos/tree/resource-list/index.vue +0 -41
  1589. package/template/.hermes/skills/yss-ui/assets/demos/tree/search-toolbar/index.vue +0 -156
  1590. package/template/.hermes/skills/yss-ui/assets/demos/tree/slot-icon/index.vue +0 -36
  1591. package/template/.hermes/skills/yss-ui/assets/demos/tree/slot-switcher-icon/index.vue +0 -34
  1592. package/template/.hermes/skills/yss-ui/assets/docs/components/button.md +0 -79
  1593. package/template/.hermes/skills/yss-ui/assets/docs/components/card.md +0 -162
  1594. package/template/.hermes/skills/yss-ui/assets/docs/components/conditionBuilder.md +0 -114
  1595. package/template/.hermes/skills/yss-ui/assets/docs/components/cron.md +0 -77
  1596. package/template/.hermes/skills/yss-ui/assets/docs/components/echarts.md +0 -110
  1597. package/template/.hermes/skills/yss-ui/assets/docs/components/editTable.md +0 -212
  1598. package/template/.hermes/skills/yss-ui/assets/docs/components/fileImport.md +0 -85
  1599. package/template/.hermes/skills/yss-ui/assets/docs/components/formily.md +0 -370
  1600. package/template/.hermes/skills/yss-ui/assets/docs/components/monaco.md +0 -369
  1601. package/template/.hermes/skills/yss-ui/assets/docs/components/sheet.md +0 -169
  1602. package/template/.hermes/skills/yss-ui/assets/docs/components/split-pane.md +0 -45
  1603. package/template/.hermes/skills/yss-ui/assets/docs/components/table.md +0 -398
  1604. package/template/.hermes/skills/yss-ui/assets/docs/components/tree.md +0 -102
  1605. package/template/.hermes/skills/yss-ui/assets/docs/guide/gitlab-ci-integration.md +0 -166
  1606. package/template/.hermes/skills/yss-ui/assets/docs/guide/index.md +0 -132
  1607. package/template/.hermes/skills/yss-ui/assets/docs/guide/installation.md +0 -97
  1608. package/template/.hermes/skills/yss-ui/assets/docs/guide/jsp.md +0 -227
  1609. package/template/.hermes/skills/yss-ui/assets/docs/guide/llms.md +0 -295
  1610. package/template/.hermes/skills/yss-ui/assets/docs/guide/monorepo-versioning.md +0 -149
  1611. package/template/.hermes/skills/yss-ui/assets/docs/guide/release-workflow.md +0 -251
  1612. package/template/.hermes/skills/yss-ui/assets/docs/hooks/use-table-height.md +0 -101
  1613. package/template/.hermes/skills/yss-ui/assets/docs/hooks/use-tree-height.md +0 -115
  1614. package/template/.hermes/skills/yss-ui/assets/docs/hooks/useFullscreen.md +0 -130
  1615. package/template/.hermes/skills/yss-ui/assets/docs/hooks/useLoading.md +0 -97
  1616. package/template/.hermes/skills/yss-ui/assets/docs/root/resources.md +0 -18
  1617. package/template/.hermes/skills/yss-ui/assets/keyword-index.json +0 -53
  1618. package/template/.hermes/skills/yss-ui/assets/keyword-index.md +0 -47
  1619. package/template/.hermes/skills/yss-ui/assets/reference-index.json +0 -55
  1620. package/template/.hermes/skills/yss-ui/assets/reference-index.md +0 -74
  1621. package/template/.hermes/skills/yss-ui/assets/scenario-index.json +0 -50
  1622. package/template/.hermes/skills/yss-ui/assets/scenario-index.md +0 -41
  1623. package/template/.hermes/skills/yss-ui/references/accessibility.md +0 -23
  1624. package/template/.hermes/skills/yss-ui/references/antdv-compatibility.md +0 -39
  1625. package/template/.hermes/skills/yss-ui/references/checklist.md +0 -110
  1626. package/template/.hermes/skills/yss-ui/references/component-routing.md +0 -31
  1627. package/template/.hermes/skills/yss-ui/references/frontend-docs.md +0 -11
  1628. package/template/.hermes/skills/yss-ui/references/migration-antdv-to-yss.md +0 -20
  1629. package/template/.hermes/skills/yss-ui/references/quick-recipes.md +0 -280
  1630. package/template/.hermes/skills/yss-ui/references/theme-locale-overlay.md +0 -25
  1631. package/template/.hermes/skills/yss-ui/references/verification.md +0 -20
  1632. package/template/.hermes/skills/yss-ui-business-page-generation/SKILL.md +0 -159
  1633. package/template/.hermes/skills/yss-ui-business-page-generation/references/component-map.md +0 -39
  1634. package/template/.hermes/skills/yss-ui-business-page-generation/references/hooks-map.md +0 -70
  1635. package/template/.hermes/skills/yss-ui-business-page-generation/references/utils-map.md +0 -51
  1636. package/template/.hermes/skills/yss-up-springboot3/SKILL.md +0 -40
  1637. package/template/.hermes/skills/yss-up-springboot3/agents/openai.yaml +0 -4
  1638. package/template/.hermes/skills/yss-use-table-height/SKILL.md +0 -130
  1639. package/template/.hermes/skills/yss-use-table-height/agents/openai.yaml +0 -5
  1640. package/template/.hermes/skills/yss-use-table-height/references/frontend-docs.md +0 -9
  1641. package/template/.hermes/skills/yss-use-tree-height/SKILL.md +0 -98
  1642. package/template/.hermes/skills/yss-use-tree-height/agents/openai.yaml +0 -5
  1643. package/template/.hermes/skills/yss-use-tree-height/references/frontend-docs.md +0 -9
  1644. package/template/.hermes/skills/yss-userinfo/SKILL.md +0 -49
  1645. package/template/.hermes/skills/yss-userinfo/agents/openai.yaml +0 -4
  1646. package/template/.hermes/skills/yss-userinfo/references/source-index.md +0 -34
  1647. package/template/.hermes/skills/yss-validation/SKILL.md +0 -56
  1648. package/template/.hermes/skills/yss-validation/agents/openai.yaml +0 -4
  1649. package/template/.hermes/skills/yss-validation/references/source-index.md +0 -33
  1650. package/template/.hermes/skills/yss-web-controller/SKILL.md +0 -79
  1651. package/template/.hermes/skills/yss-web-controller/agents/openai.yaml +0 -5
  1652. package/template/.hermes/skills/yss-web-controller/assets/templates/Controller.java.template +0 -72
  1653. package/template/.hermes/skills/yss-web-controller/assets/templates/WebConvertor.java.template +0 -33
  1654. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/CreateRequest.java.template +0 -19
  1655. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/PageRequest.java.template +0 -24
  1656. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/Response.java.template +0 -18
  1657. package/template/.hermes/skills/yss-web-controller/assets/templates/web/dto/UpdateRequest.java.template +0 -19
  1658. package/template/.hermes/skills/yss-web-controller/references/web-adapter-layer-guide.md +0 -84
  1659. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.mjs +0 -105
  1660. package/template/.hermes/skills/yss-web-controller/scripts/generate_controller.test.mjs +0 -60
  1661. package/template/.hermes/skills/ytable-usage/SKILL.md +0 -251
  1662. package/template/.hermes/skills/ytree-usage/SKILL.md +0 -132
  1663. package/template/.kiro/settings/mcp.json +0 -8
  1664. package/template/.pi/skills/research/SKILL.md +0 -12
  1665. package/template/.pi/skills/research/agents/openai.yaml +0 -3
  1666. package/template/.pi/skills/yss-router/SKILL.md +0 -51
  1667. package/template/.pi/skills/yss-router/agents/openai.yaml +0 -4
  1668. package/template/.pi/skills/yss-router/references/boundaries.md +0 -50
  1669. package/template/.pi/skills/yss-router/references/router-contract.yaml +0 -345
  1670. package/template/.pi/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1671. package/template/.pi/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1672. package/template/.pi/skills/yss-source-index/SKILL.md +0 -63
  1673. package/template/.pi/skills/yss-source-index/agents/openai.yaml +0 -4
  1674. package/template/.pi/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1675. package/template/.qoder/skills/research/SKILL.md +0 -12
  1676. package/template/.qoder/skills/research/agents/openai.yaml +0 -3
  1677. package/template/.qoder/skills/yss-router/SKILL.md +0 -51
  1678. package/template/.qoder/skills/yss-router/agents/openai.yaml +0 -4
  1679. package/template/.qoder/skills/yss-router/references/boundaries.md +0 -50
  1680. package/template/.qoder/skills/yss-router/references/router-contract.yaml +0 -345
  1681. package/template/.qoder/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1682. package/template/.qoder/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1683. package/template/.qoder/skills/yss-source-index/SKILL.md +0 -63
  1684. package/template/.qoder/skills/yss-source-index/agents/openai.yaml +0 -4
  1685. package/template/.qoder/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1686. package/template/.trae/skills/research/SKILL.md +0 -12
  1687. package/template/.trae/skills/research/agents/openai.yaml +0 -3
  1688. package/template/.trae/skills/yss-router/SKILL.md +0 -51
  1689. package/template/.trae/skills/yss-router/agents/openai.yaml +0 -4
  1690. package/template/.trae/skills/yss-router/references/boundaries.md +0 -50
  1691. package/template/.trae/skills/yss-router/references/router-contract.yaml +0 -345
  1692. package/template/.trae/skills/yss-router/references/slice-implementation-contract.md +0 -185
  1693. package/template/.trae/skills/yss-router/references/yss-skill-execution-result.md +0 -67
  1694. package/template/.trae/skills/yss-source-index/SKILL.md +0 -63
  1695. package/template/.trae/skills/yss-source-index/agents/openai.yaml +0 -4
  1696. package/template/.trae/skills/yss-source-index/references/source-location.md +0 -18
  1697. package/template/.trae/skills/yss-source-index/references/source-map-config.md +0 -30
  1698. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.mjs +0 -24
  1699. package/template/.trae/skills/yss-source-index/scripts/refresh-yss-skill-index.test.mjs +0 -15
  1700. package/template/scripts/verify-yss-router-scenarios +0 -3
  1701. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1702. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1703. /package/template/.agents/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1704. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1705. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1706. /package/template/.claude/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1707. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1708. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1709. /package/template/.codex/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1710. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1711. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1712. /package/template/.cursor/skills/{yss-source-index → yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1713. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1714. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1715. /package/template/{.hermes/skills/yss-source-index → .pi/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1716. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1717. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1718. /package/template/{.pi/skills/yss-source-index → .qoder/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
  1719. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/references/source-location.md +0 -0
  1720. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/references/source-map-config.md +0 -0
  1721. /package/template/{.qoder/skills/yss-source-index → .trae/skills/yss-skill-source-index-refresh}/scripts/refresh-yss-skill-index.test.mjs +0 -0
@@ -1,1667 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import crypto from 'node:crypto';
4
- import { constants as fsConstants } from 'node:fs';
5
- import fs from 'node:fs/promises';
6
- import os from 'node:os';
7
- import path from 'node:path';
8
- import { performance } from 'node:perf_hooks';
9
- import { fileURLToPath } from 'node:url';
10
-
11
- import {
12
- DEFAULT_MANIFEST_URL,
13
- SKILL_ID,
14
- UpdateContractError,
15
- compareSemver,
16
- isStableCoreVersion,
17
- parseSemver,
18
- validateLocalRelease,
19
- validateReleaseNotesUrl,
20
- validateStableUpdateManifest,
21
- } from './update-contract.mjs';
22
-
23
- const OPERATION_STATE_FILE = 'state.json';
24
- const OPERATION_OWNER_FILE = 'owner.json';
25
- const ACTIVE_CLAIM_DIRECTORY = 'active-claim';
26
- const OPERATION_NAME = /^(reserved|pending|committed|fenced|cancelled)-(\d{1,20})$/;
27
- const MAX_OPERATION_GENERATION = (10n ** 20n) - 1n;
28
- const CHECK_TTL_MS = 72 * 60 * 60 * 1_000;
29
- const MAX_CACHE_HORIZON_MS = Math.ceil(CHECK_TTL_MS * 1.2);
30
- const FIRST_FAILURE_DELAY_MS = 6 * 60 * 60 * 1_000;
31
- const LATER_FAILURE_DELAY_MS = 24 * 60 * 60 * 1_000;
32
- const DEFAULT_TIMEOUT_MS = 1_000;
33
- const MAX_RESPONSE_BYTES = 32 * 1_024;
34
- const MAX_LOCAL_RELEASE_BYTES = 4 * 1_024;
35
- const MAX_CACHE_STATE_BYTES = 64 * 1_024;
36
- const MAX_CLAIM_OWNER_BYTES = 1_024;
37
- const LONGEST_ISO_TIMESTAMP = '+275760-09-13T00:00:00.000Z';
38
- const LOCK_STALE_MS = 30_000;
39
- const ACK_LOCK_WAIT_MS = 1_200;
40
- const LOCK_RETRY_DELAY_MS = 20;
41
- const DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
42
- const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
43
- const defaultReleasePath = path.resolve(scriptDirectory, '..', 'skill-release.json');
44
-
45
- class FileIdentityChangedError extends Error {}
46
-
47
- function silent(reason) {
48
- return { status: 'silent', reason };
49
- }
50
-
51
- function isPlainObject(value) {
52
- return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
53
- }
54
-
55
- function hasOnlyKeys(value, allowed) {
56
- return Object.keys(value).every((key) => allowed.has(key));
57
- }
58
-
59
- function validateManifest(value) {
60
- const manifest = validateStableUpdateManifest(value);
61
- return {
62
- version: manifest.version,
63
- targetDigest: `sha256:${manifest.artifact.sha256}`,
64
- severity: manifest.severity,
65
- releaseNotes: manifest.releaseNotes,
66
- };
67
- }
68
-
69
- function validateCachedCandidate(value) {
70
- if (!isPlainObject(value)
71
- || !hasOnlyKeys(value, new Set([
72
- 'version', 'targetDigest', 'severity', 'releaseNotes',
73
- ]))) return null;
74
- try {
75
- if (!isStableCoreVersion(value.version)) return null;
76
- if (!DIGEST_PATTERN.test(value.targetDigest)
77
- || !['normal', 'security'].includes(value.severity)) return null;
78
- validateReleaseNotesUrl(value.releaseNotes, value.version);
79
- return { ...value };
80
- } catch {
81
- return null;
82
- }
83
- }
84
-
85
- function emptyState(installedVersion = null) {
86
- return {
87
- schemaVersion: 1,
88
- skillId: SKILL_ID,
89
- installedVersion,
90
- check: {
91
- nextCheckAt: null,
92
- consecutiveFailures: 0,
93
- },
94
- notification: {
95
- offeredDigests: [],
96
- acknowledgedDigests: [],
97
- },
98
- };
99
- }
100
-
101
- function encodeBoundedState(state) {
102
- const encoded = Buffer.from(`${JSON.stringify(state)}\n`, 'utf8');
103
- return encoded.length <= MAX_CACHE_STATE_BYTES ? encoded : null;
104
- }
105
-
106
- function stateAfterAcknowledgement(state, targetDigest) {
107
- const alreadyAcknowledged = state.notification.acknowledgedDigests.includes(targetDigest);
108
- return {
109
- ...state,
110
- notification: {
111
- offeredDigests: state.notification.offeredDigests
112
- .filter((digest) => digest !== targetDigest),
113
- acknowledgedDigests: alreadyAcknowledged
114
- ? [...state.notification.acknowledgedDigests]
115
- : [...state.notification.acknowledgedDigests, targetDigest],
116
- },
117
- };
118
- }
119
-
120
- function stateWithFailureCheck(state, nextCheckAt, consecutiveFailures, withdrawCandidate = false) {
121
- const failedState = {
122
- ...state,
123
- check: { nextCheckAt, consecutiveFailures },
124
- };
125
- if (withdrawCandidate) delete failedState.candidate;
126
- return failedState;
127
- }
128
-
129
- function encodeRecoverableState(state) {
130
- const encoded = encodeBoundedState(state);
131
- if (!encoded) return null;
132
- if (!encodeBoundedState(stateWithFailureCheck(state, LONGEST_ISO_TIMESTAMP, 2))) return null;
133
- let acknowledgementState = state;
134
- for (const targetDigest of state.notification.offeredDigests) {
135
- acknowledgementState = stateAfterAcknowledgement(acknowledgementState, targetDigest);
136
- if (!encodeBoundedState(acknowledgementState)
137
- || !encodeBoundedState(stateWithFailureCheck(
138
- acknowledgementState,
139
- LONGEST_ISO_TIMESTAMP,
140
- 2,
141
- ))) return null;
142
- }
143
- return encoded;
144
- }
145
-
146
- function versionCacheDirectory(cacheDirectory, installedVersion) {
147
- const partition = crypto.createHash('sha256').update(installedVersion).digest('hex').slice(0, 24);
148
- return path.join(cacheDirectory, `version-${partition}`);
149
- }
150
-
151
- function normalizeState(value, installedVersion) {
152
- const effectiveInstalledVersion = installedVersion ?? value?.installedVersion ?? null;
153
- if (!isPlainObject(value) || value.schemaVersion !== 1 || value.skillId !== SKILL_ID
154
- || (installedVersion !== null && value.installedVersion !== installedVersion)
155
- || (value.installedVersion !== null && typeof value.installedVersion !== 'string')
156
- || !isPlainObject(value.check)
157
- || !(value.check.nextCheckAt === null || typeof value.check.nextCheckAt === 'string')
158
- || !Number.isSafeInteger(value.check.consecutiveFailures)
159
- || value.check.consecutiveFailures < 0
160
- || !isPlainObject(value.notification)) return null;
161
- if (effectiveInstalledVersion !== null) {
162
- try {
163
- parseSemver(effectiveInstalledVersion);
164
- } catch {
165
- return null;
166
- }
167
- }
168
-
169
- const state = emptyState(effectiveInstalledVersion);
170
- state.check.nextCheckAt = value.check.nextCheckAt;
171
- state.check.consecutiveFailures = value.check.consecutiveFailures;
172
- const { offeredDigests, acknowledgedDigests } = value.notification;
173
- if (!Array.isArray(offeredDigests)
174
- || offeredDigests.some((digest) => typeof digest !== 'string' || !DIGEST_PATTERN.test(digest))) {
175
- return null;
176
- }
177
- state.notification.offeredDigests = [...new Set(offeredDigests)];
178
-
179
- if (!Array.isArray(acknowledgedDigests)
180
- || acknowledgedDigests.some((digest) => typeof digest !== 'string' || !DIGEST_PATTERN.test(digest))) {
181
- return null;
182
- }
183
- state.notification.acknowledgedDigests = [...new Set(acknowledgedDigests)];
184
- const hasCandidate = Object.hasOwn(value, 'candidate');
185
- const candidate = validateCachedCandidate(value.candidate);
186
- if (hasCandidate && !candidate) return null;
187
- if (candidate) {
188
- if (effectiveInstalledVersion !== null
189
- && compareSemver(candidate.version, effectiveInstalledVersion) > 0
190
- && !state.notification.offeredDigests.includes(candidate.targetDigest)
191
- && !state.notification.acknowledgedDigests.includes(candidate.targetDigest)) return null;
192
- state.candidate = candidate;
193
- }
194
- return encodeRecoverableState(state) ? state : null;
195
- }
196
-
197
- function isSameFile(left, right) {
198
- if (left.dev !== right.dev || left.ino !== right.ino) return false;
199
- if (left.ino !== 0n) return true;
200
- if (left.birthtimeNs === 0n || right.birthtimeNs === 0n) return false;
201
- return left.birthtimeNs === right.birthtimeNs
202
- && left.mode === right.mode;
203
- }
204
-
205
- function assertBoundedRegularFile(metadata, maxBytes) {
206
- if (!metadata.isFile()
207
- || metadata.isSymbolicLink()
208
- || metadata.size > BigInt(maxBytes)) {
209
- throw new Error('unsafe JSON file');
210
- }
211
- }
212
-
213
- async function readJsonFile(target, maxBytes, expectedMetadata = null) {
214
- const pathMetadata = await fs.lstat(target, { bigint: true });
215
- if (expectedMetadata && !isSameFile(expectedMetadata, pathMetadata)) {
216
- throw new FileIdentityChangedError('JSON file identity changed');
217
- }
218
- assertBoundedRegularFile(pathMetadata, maxBytes);
219
- const flags = fsConstants.O_RDONLY
220
- | (fsConstants.O_NOFOLLOW ?? 0)
221
- | (fsConstants.O_NONBLOCK ?? 0);
222
- const handle = await fs.open(target, flags);
223
- try {
224
- const handleMetadata = await handle.stat({ bigint: true });
225
- const currentPathMetadata = await fs.lstat(target, { bigint: true });
226
- assertBoundedRegularFile(handleMetadata, maxBytes);
227
- assertBoundedRegularFile(currentPathMetadata, maxBytes);
228
- if (!isSameFile(pathMetadata, handleMetadata)
229
- || !isSameFile(currentPathMetadata, handleMetadata)) {
230
- throw new FileIdentityChangedError('JSON file changed while opening');
231
- }
232
-
233
- const chunks = [];
234
- let size = 0;
235
- while (size <= maxBytes) {
236
- const chunk = Buffer.allocUnsafe(Math.min(8 * 1_024, (maxBytes + 1) - size));
237
- const { bytesRead } = await handle.read(chunk, 0, chunk.length, size);
238
- if (bytesRead === 0) break;
239
- chunks.push(chunk.subarray(0, bytesRead));
240
- size += bytesRead;
241
- }
242
- if (size > maxBytes) throw new Error('JSON file is too large');
243
- return JSON.parse(Buffer.concat(chunks, size).toString('utf8'));
244
- } finally {
245
- await handle.close();
246
- }
247
- }
248
-
249
- function isWithinDirectory(directory, target) {
250
- const relative = path.relative(directory, target);
251
- return relative === ''
252
- || (!path.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path.sep}`));
253
- }
254
-
255
- async function canonicalizeTrustedDirectoryPrefix(target) {
256
- const absoluteTarget = path.resolve(target);
257
- const trustedDirectories = [...new Set([os.homedir(), os.tmpdir()].map((directory) => (
258
- path.resolve(directory)
259
- )))].sort((left, right) => right.length - left.length);
260
- for (const trustedDirectory of trustedDirectories) {
261
- if (!isWithinDirectory(trustedDirectory, absoluteTarget)) continue;
262
- try {
263
- const canonicalDirectory = await fs.realpath(trustedDirectory);
264
- return path.resolve(canonicalDirectory, path.relative(trustedDirectory, absoluteTarget));
265
- } catch {
266
- // Fall back to validating the absolute path from its filesystem root.
267
- }
268
- }
269
- return target;
270
- }
271
-
272
- function assertSafeDirectory(metadata) {
273
- if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
274
- throw new Error('unsafe cache directory');
275
- }
276
- }
277
-
278
- class CachePathChangedError extends Error {}
279
- class CacheOperationRaceError extends Error {}
280
- class OperationFencedError extends Error {}
281
-
282
- const preparedCacheDirectories = new Map();
283
-
284
- function invalidateCacheToken(token, message, cause) {
285
- token.trusted = false;
286
- if (cause instanceof CachePathChangedError) return cause;
287
- const error = new CachePathChangedError(message);
288
- if (cause) error.cause = cause;
289
- return error;
290
- }
291
-
292
- async function verifyDirectorySnapshots(token, snapshots, description) {
293
- if (!token.trusted) throw new CachePathChangedError('cache directory is no longer trusted');
294
- try {
295
- for (const snapshot of snapshots) {
296
- const metadata = await fs.lstat(snapshot.directory, { bigint: true });
297
- assertSafeDirectory(metadata);
298
- if (!isSameFile(snapshot.metadata, metadata)) {
299
- throw new Error(`${description} changed`);
300
- }
301
- }
302
- } catch (error) {
303
- throw invalidateCacheToken(token, `${description} changed`, error);
304
- }
305
- }
306
-
307
- async function verifyCacheToken(token) {
308
- await verifyDirectorySnapshots(token, token.ancestorSnapshots, 'cache directory');
309
- }
310
-
311
- async function guardedCacheRead(token, read) {
312
- await verifyCacheToken(token);
313
- let result;
314
- try {
315
- result = await read();
316
- } catch (error) {
317
- await verifyCacheToken(token);
318
- throw error;
319
- }
320
- await verifyCacheToken(token);
321
- return result;
322
- }
323
-
324
- function cacheTokenFor(cacheDirectory) {
325
- const token = preparedCacheDirectories.get(path.resolve(cacheDirectory));
326
- if (!token || !token.trusted) {
327
- throw new CachePathChangedError('cache directory has not been prepared safely');
328
- }
329
- return token;
330
- }
331
-
332
- function resolveCacheTarget(token, target) {
333
- const resolved = path.resolve(target);
334
- if (resolved === token.directory || !isWithinDirectory(token.directory, resolved)) {
335
- throw invalidateCacheToken(token, 'cache mutation escaped its prepared directory');
336
- }
337
- return resolved;
338
- }
339
-
340
- async function captureMutationParentSnapshots(token, targets) {
341
- await verifyCacheToken(token);
342
- const snapshots = new Map();
343
- try {
344
- for (const target of targets) {
345
- const parent = path.dirname(resolveCacheTarget(token, target));
346
- const relative = path.relative(token.directory, parent);
347
- let current = token.directory;
348
- for (const component of relative.split(path.sep).filter(Boolean)) {
349
- current = path.join(current, component);
350
- if (snapshots.has(current)) continue;
351
- const metadata = await fs.lstat(current, { bigint: true });
352
- assertSafeDirectory(metadata);
353
- snapshots.set(current, { directory: current, metadata });
354
- }
355
- }
356
- } catch (error) {
357
- throw invalidateCacheToken(token, 'cache mutation parent changed', error);
358
- }
359
- const captured = [...snapshots.values()];
360
- await verifyMutationParentSnapshots(token, captured);
361
- await verifyCacheToken(token);
362
- return captured;
363
- }
364
-
365
- async function verifyMutationParentSnapshots(token, snapshots) {
366
- try {
367
- for (const snapshot of snapshots) {
368
- const metadata = await fs.lstat(snapshot.directory, { bigint: true });
369
- assertSafeDirectory(metadata);
370
- if (!isSameFile(snapshot.metadata, metadata)) {
371
- throw new Error('cache mutation parent changed');
372
- }
373
- }
374
- } catch (error) {
375
- const raced = new CacheOperationRaceError('cache mutation parent changed');
376
- raced.cause = error;
377
- throw raced;
378
- }
379
- }
380
-
381
- async function verifyMutationContext(token, parentSnapshots) {
382
- await verifyCacheToken(token);
383
- await verifyMutationParentSnapshots(token, parentSnapshots);
384
- await verifyCacheToken(token);
385
- }
386
-
387
- function assertSafeCacheEntry(metadata) {
388
- if (metadata.isSymbolicLink() || (!metadata.isDirectory() && !metadata.isFile())) {
389
- throw new Error('unsafe cache entry');
390
- }
391
- }
392
-
393
- function assertSafeRegularFile(metadata) {
394
- if (!metadata.isFile() || metadata.isSymbolicLink()) {
395
- throw new Error('unsafe cache file');
396
- }
397
- }
398
-
399
- function assertRenameableCacheEntry(metadata) {
400
- if (!metadata.isDirectory() && !metadata.isFile() && !metadata.isSymbolicLink()) {
401
- throw new Error('unsafe cache rename entry');
402
- }
403
- }
404
-
405
- async function stableCacheEntry(
406
- token,
407
- target,
408
- validate,
409
- expectedMetadata = null,
410
- missingIsOperationRace = false,
411
- ) {
412
- const resolved = resolveCacheTarget(token, target);
413
- try {
414
- const first = await fs.lstat(resolved, { bigint: true });
415
- validate(first);
416
- if (expectedMetadata && !isSameFile(expectedMetadata, first)) {
417
- throw new Error('cache entry identity changed');
418
- }
419
- await verifyCacheToken(token);
420
- const second = await fs.lstat(resolved, { bigint: true });
421
- validate(second);
422
- if (!isSameFile(first, second)
423
- || (expectedMetadata && !isSameFile(expectedMetadata, second))) {
424
- throw new Error('cache entry identity changed');
425
- }
426
- return second;
427
- } catch (error) {
428
- if (missingIsOperationRace && error?.code === 'ENOENT') {
429
- await verifyCacheToken(token);
430
- throw error;
431
- }
432
- throw invalidateCacheToken(token, 'cache mutation produced an untrusted object', error);
433
- }
434
- }
435
-
436
- async function guardedCacheEntryRead(
437
- token,
438
- target,
439
- validate,
440
- read,
441
- expectedMetadata = null,
442
- ) {
443
- const metadata = await stableCacheEntry(
444
- token,
445
- target,
446
- validate,
447
- expectedMetadata,
448
- true,
449
- );
450
- let result;
451
- try {
452
- result = await read(metadata);
453
- } catch (error) {
454
- await stableCacheEntry(token, target, validate, metadata, true);
455
- throw error;
456
- }
457
- await stableCacheEntry(token, target, validate, metadata, true);
458
- return result;
459
- }
460
-
461
- async function stablePreparedDirectory(token, target) {
462
- try {
463
- const first = await fs.lstat(target, { bigint: true });
464
- assertSafeDirectory(first);
465
- await verifyCacheToken(token);
466
- const second = await fs.lstat(target, { bigint: true });
467
- assertSafeDirectory(second);
468
- if (!isSameFile(first, second)) throw new Error('prepared directory identity changed');
469
- return second;
470
- } catch (error) {
471
- throw invalidateCacheToken(token, 'prepared directory could not be verified', error);
472
- }
473
- }
474
-
475
- async function assertCacheTargetAbsent(token, target) {
476
- const resolved = resolveCacheTarget(token, target);
477
- try {
478
- await fs.lstat(resolved, { bigint: true });
479
- } catch (error) {
480
- if (error?.code === 'ENOENT') return;
481
- throw invalidateCacheToken(token, 'cache mutation target could not be verified', error);
482
- }
483
- throw invalidateCacheToken(token, 'cache mutation left an unexpected object');
484
- }
485
-
486
- async function guardedCacheMutation(token, parentSnapshots, {
487
- mutate,
488
- verifyBefore = null,
489
- verifyAfter,
490
- }) {
491
- await verifyMutationContext(token, parentSnapshots);
492
- if (verifyBefore) await verifyBefore();
493
- let result;
494
- try {
495
- result = await mutate();
496
- } catch (error) {
497
- await verifyMutationContext(token, parentSnapshots);
498
- throw error;
499
- }
500
- try {
501
- await verifyMutationContext(token, parentSnapshots);
502
- const verified = await verifyAfter(result);
503
- await verifyMutationContext(token, parentSnapshots);
504
- return verified ?? result;
505
- } catch (error) {
506
- if (error instanceof CacheOperationRaceError) throw error;
507
- throw invalidateCacheToken(token, 'cache mutation could not be verified', error);
508
- }
509
- }
510
-
511
- async function cacheMkdirWithToken(token, target, options, parentSnapshots = null) {
512
- const resolved = path.resolve(target);
513
- const parents = parentSnapshots ?? await captureMutationParentSnapshots(token, [resolved]);
514
- return guardedCacheMutation(token, parents, {
515
- mutate: () => fs.mkdir(resolved, options),
516
- verifyAfter: () => (parentSnapshots === null
517
- ? stableCacheEntry(token, resolved, assertSafeDirectory)
518
- : stablePreparedDirectory(token, resolved)),
519
- });
520
- }
521
-
522
- async function cacheMkdir(cacheDirectory, target, options) {
523
- return cacheMkdirWithToken(cacheTokenFor(cacheDirectory), target, options);
524
- }
525
-
526
- async function cacheWriteFile(cacheDirectory, target, data, options) {
527
- if (options?.flag !== 'wx') {
528
- throw new Error('cache files must be created exclusively');
529
- }
530
- const token = cacheTokenFor(cacheDirectory);
531
- const resolved = resolveCacheTarget(token, target);
532
- const parents = await captureMutationParentSnapshots(token, [resolved]);
533
- return guardedCacheMutation(token, parents, {
534
- mutate: async () => {
535
- const flags = fsConstants.O_WRONLY
536
- | fsConstants.O_CREAT
537
- | fsConstants.O_EXCL
538
- | (fsConstants.O_NOFOLLOW ?? 0);
539
- const handle = await fs.open(resolved, flags, options.mode);
540
- try {
541
- const openedMetadata = await handle.stat({ bigint: true });
542
- if (!openedMetadata.isFile() || openedMetadata.isSymbolicLink()) {
543
- throw new Error('cache write did not open a regular file');
544
- }
545
- await handle.writeFile(data, options.encoding ? { encoding: options.encoding } : undefined);
546
- const writtenMetadata = await handle.stat({ bigint: true });
547
- const expectedBytes = Buffer.isBuffer(data)
548
- ? data.length
549
- : Buffer.byteLength(data, options.encoding || 'utf8');
550
- if (!isSameFile(openedMetadata, writtenMetadata)
551
- || writtenMetadata.size !== BigInt(expectedBytes)) {
552
- throw new Error('cache write did not preserve the opened file identity and size');
553
- }
554
- return writtenMetadata;
555
- } finally {
556
- await handle.close();
557
- }
558
- },
559
- verifyAfter: (writtenMetadata) => stableCacheEntry(token, resolved, (metadata) => {
560
- if (!metadata.isFile() || metadata.isSymbolicLink()) {
561
- throw new Error('cache write did not create a regular file');
562
- }
563
- }, writtenMetadata),
564
- });
565
- }
566
-
567
- async function cacheRename(
568
- cacheDirectory,
569
- source,
570
- destination,
571
- validate,
572
- expectedSourceMetadata = null,
573
- ) {
574
- if (typeof validate !== 'function') {
575
- throw new TypeError('cache rename requires an explicit entry validator');
576
- }
577
- const token = cacheTokenFor(cacheDirectory);
578
- const resolvedSource = resolveCacheTarget(token, source);
579
- const resolvedDestination = resolveCacheTarget(token, destination);
580
- const parents = await captureMutationParentSnapshots(
581
- token,
582
- [resolvedSource, resolvedDestination],
583
- );
584
- const sourceMetadata = await stableCacheEntry(
585
- token,
586
- resolvedSource,
587
- validate,
588
- expectedSourceMetadata,
589
- true,
590
- );
591
- return guardedCacheMutation(token, parents, {
592
- verifyBefore: () => stableCacheEntry(
593
- token,
594
- resolvedSource,
595
- validate,
596
- sourceMetadata,
597
- true,
598
- ),
599
- mutate: () => fs.rename(resolvedSource, resolvedDestination),
600
- verifyAfter: async () => {
601
- await assertCacheTargetAbsent(token, resolvedSource);
602
- return stableCacheEntry(
603
- token,
604
- resolvedDestination,
605
- validate,
606
- sourceMetadata,
607
- );
608
- },
609
- });
610
- }
611
-
612
- async function cacheRm(cacheDirectory, target, options) {
613
- if (options?.recursive) {
614
- throw new Error('recursive cache removal is not allowed');
615
- }
616
- const token = cacheTokenFor(cacheDirectory);
617
- const resolved = resolveCacheTarget(token, target);
618
- const parents = await captureMutationParentSnapshots(token, [resolved]);
619
- let initialMetadata;
620
- try {
621
- initialMetadata = await fs.lstat(resolved, { bigint: true });
622
- } catch (error) {
623
- if (error?.code === 'ENOENT' && options?.force) {
624
- await verifyMutationContext(token, parents);
625
- return;
626
- }
627
- throw error;
628
- }
629
- try {
630
- assertSafeCacheEntry(initialMetadata);
631
- } catch (error) {
632
- throw invalidateCacheToken(token, 'cache removal target is unsafe', error);
633
- }
634
- const targetMetadata = await stableCacheEntry(
635
- token,
636
- resolved,
637
- assertSafeCacheEntry,
638
- initialMetadata,
639
- );
640
- return guardedCacheMutation(token, parents, {
641
- verifyBefore: () => stableCacheEntry(
642
- token,
643
- resolved,
644
- assertSafeCacheEntry,
645
- targetMetadata,
646
- ),
647
- mutate: () => fs.rm(resolved, options),
648
- verifyAfter: () => assertCacheTargetAbsent(token, resolved),
649
- });
650
- }
651
-
652
- async function prepareCacheDirectory(cacheDirectory) {
653
- const absoluteTarget = path.resolve(cacheDirectory);
654
- const target = await canonicalizeTrustedDirectoryPrefix(absoluteTarget);
655
- const parsed = path.parse(target);
656
- const components = target.slice(parsed.root.length).split(path.sep).filter(Boolean);
657
- let current = parsed.root;
658
- const token = {
659
- directory: target,
660
- ancestorSnapshots: [],
661
- trusted: true,
662
- };
663
-
664
- for (const component of components) {
665
- current = path.join(current, component);
666
- let metadata;
667
- try {
668
- metadata = await fs.lstat(current, { bigint: true });
669
- } catch (error) {
670
- if (error?.code !== 'ENOENT') throw error;
671
- try {
672
- await cacheMkdirWithToken(token, current, { mode: 0o700 }, []);
673
- } catch (mkdirError) {
674
- if (mkdirError?.code !== 'EEXIST') throw mkdirError;
675
- }
676
- metadata = await fs.lstat(current, { bigint: true });
677
- }
678
- assertSafeDirectory(metadata);
679
- token.ancestorSnapshots.push({ directory: current, metadata });
680
- }
681
-
682
- await verifyCacheToken(token);
683
- preparedCacheDirectories.set(target, token);
684
- return target;
685
- }
686
-
687
- function operationName(kind, generation) {
688
- return `${kind}-${generation.toString().padStart(20, '0')}`;
689
- }
690
-
691
- function parseOperationName(name) {
692
- const match = OPERATION_NAME.exec(name);
693
- if (!match) return null;
694
- return { kind: match[1], generation: BigInt(match[2]) };
695
- }
696
-
697
- async function listOperations(cacheDirectory, token = cacheTokenFor(cacheDirectory)) {
698
- return guardedCacheRead(token, async () => {
699
- try {
700
- const entries = await fs.readdir(cacheDirectory, { withFileTypes: true });
701
- return entries.flatMap((entry) => {
702
- const parsed = parseOperationName(entry.name);
703
- if (!parsed) return [];
704
- if (!entry.isDirectory() || entry.isSymbolicLink()) {
705
- throw invalidateCacheToken(
706
- token,
707
- `cache operation ${entry.name} is not a safe directory`,
708
- );
709
- }
710
- return [{ ...parsed, name: entry.name, directory: path.join(cacheDirectory, entry.name) }];
711
- });
712
- } catch (error) {
713
- if (error?.code === 'ENOENT') return [];
714
- throw error;
715
- }
716
- });
717
- }
718
-
719
- async function readState(cacheDirectory, installedVersion = null) {
720
- const token = cacheTokenFor(cacheDirectory);
721
- return guardedCacheRead(token, async () => {
722
- const operations = (await listOperations(cacheDirectory, token))
723
- .filter((operation) => operation.kind === 'committed')
724
- .sort((left, right) => (left.generation > right.generation ? -1 : 1));
725
- for (const operation of operations) {
726
- try {
727
- const state = await guardedCacheEntryRead(
728
- token,
729
- operation.directory,
730
- assertSafeDirectory,
731
- async () => normalizeState(
732
- await readJsonFile(
733
- path.join(operation.directory, OPERATION_STATE_FILE),
734
- MAX_CACHE_STATE_BYTES,
735
- ),
736
- installedVersion,
737
- ),
738
- );
739
- if (state) return state;
740
- } catch (error) {
741
- if (error instanceof FileIdentityChangedError
742
- || error instanceof CachePathChangedError
743
- || error instanceof CacheOperationRaceError) throw error;
744
- // An incomplete or corrupt generation is ignored in favor of the previous commit.
745
- }
746
- }
747
- return emptyState(installedVersion);
748
- });
749
- }
750
-
751
- async function operationIsActive(
752
- cacheDirectory,
753
- operation,
754
- token = cacheTokenFor(cacheDirectory),
755
- ) {
756
- try {
757
- return await guardedCacheEntryRead(
758
- token,
759
- operation.directory,
760
- assertSafeDirectory,
761
- async (directoryMetadata) => {
762
- try {
763
- const ownerMetadata = await fs.lstat(
764
- path.join(operation.directory, OPERATION_OWNER_FILE),
765
- { bigint: true },
766
- );
767
- if (!ownerMetadata.isFile() || ownerMetadata.isSymbolicLink()) return false;
768
- return metadataIsWithinLease(ownerMetadata);
769
- } catch (error) {
770
- if (error?.code !== 'ENOENT') throw error;
771
- return metadataIsWithinLease(directoryMetadata);
772
- }
773
- },
774
- );
775
- } catch (error) {
776
- if (error?.code === 'ENOENT') return false;
777
- throw error;
778
- }
779
- }
780
-
781
- function validateClaimOwner(value) {
782
- if (!isPlainObject(value)
783
- || !hasOnlyKeys(value, new Set(['pid', 'token', 'generation']))
784
- || !Number.isSafeInteger(value.pid)
785
- || value.pid <= 0
786
- || typeof value.token !== 'string'
787
- || !/^[a-f0-9]{32}$/.test(value.token)
788
- || typeof value.generation !== 'string'
789
- || !/^[1-9]\d*$/.test(value.generation)) return null;
790
- return { ...value, generation: BigInt(value.generation) };
791
- }
792
-
793
- function metadataIsWithinLease(metadata) {
794
- if (typeof metadata.mtimeNs === 'bigint') {
795
- const ageNs = (BigInt(Date.now()) * 1_000_000n) - metadata.mtimeNs;
796
- const absoluteAgeNs = ageNs < 0n ? -ageNs : ageNs;
797
- return absoluteAgeNs <= BigInt(LOCK_STALE_MS) * 1_000_000n;
798
- }
799
- return Math.abs(Date.now() - metadata.mtimeMs) <= LOCK_STALE_MS;
800
- }
801
-
802
- function corruptClaimStatus(directory, directoryMetadata, ownerMetadata = directoryMetadata) {
803
- if (metadataIsWithinLease(ownerMetadata)) {
804
- return { state: 'busy', directory, metadata: directoryMetadata, owner: null };
805
- }
806
- const fingerprint = crypto.createHash('sha256')
807
- .update(JSON.stringify({
808
- directory: {
809
- dev: directoryMetadata.dev.toString(),
810
- ino: directoryMetadata.ino.toString(),
811
- mode: directoryMetadata.mode.toString(),
812
- birthtimeNs: directoryMetadata.birthtimeNs.toString(),
813
- },
814
- }))
815
- .digest('hex')
816
- .slice(0, 24);
817
- return {
818
- state: 'releasable',
819
- directory,
820
- metadata: directoryMetadata,
821
- key: `corrupt-${fingerprint}`,
822
- owner: null,
823
- };
824
- }
825
-
826
- async function inspectActiveClaim(cacheDirectory) {
827
- const token = cacheTokenFor(cacheDirectory);
828
- return guardedCacheRead(token, async () => {
829
- const directory = path.join(cacheDirectory, ACTIVE_CLAIM_DIRECTORY);
830
- let directoryMetadata;
831
- try {
832
- directoryMetadata = await fs.lstat(directory, { bigint: true });
833
- } catch (error) {
834
- if (error?.code === 'ENOENT') return { state: 'absent', directory };
835
- throw error;
836
- }
837
- if (!directoryMetadata.isDirectory() || directoryMetadata.isSymbolicLink()) {
838
- return corruptClaimStatus(directory, directoryMetadata);
839
- }
840
- return guardedCacheEntryRead(
841
- token,
842
- directory,
843
- assertSafeDirectory,
844
- async (stableDirectoryMetadata) => {
845
- const ownerPath = path.join(directory, OPERATION_OWNER_FILE);
846
- let ownerMetadata = stableDirectoryMetadata;
847
- let owner = null;
848
- try {
849
- ownerMetadata = await fs.lstat(ownerPath, { bigint: true });
850
- if (!ownerMetadata.isFile()
851
- || ownerMetadata.isSymbolicLink()
852
- || ownerMetadata.size > BigInt(MAX_CLAIM_OWNER_BYTES)) {
853
- return corruptClaimStatus(directory, stableDirectoryMetadata, ownerMetadata);
854
- }
855
- const ownerSource = await readJsonFile(
856
- ownerPath,
857
- MAX_CLAIM_OWNER_BYTES,
858
- ownerMetadata,
859
- );
860
- owner = validateClaimOwner(ownerSource);
861
- } catch (error) {
862
- if (error instanceof FileIdentityChangedError) throw error;
863
- // A malformed claim is recoverable only after the same hard lease as a crashed owner.
864
- }
865
-
866
- if (owner) {
867
- const operations = await listOperations(cacheDirectory, token);
868
- if (operations.some((operation) => operation.generation === owner.generation
869
- && ['committed', 'fenced', 'cancelled'].includes(operation.kind))) {
870
- return {
871
- state: 'releasable',
872
- directory,
873
- metadata: stableDirectoryMetadata,
874
- key: owner.generation.toString(),
875
- owner,
876
- };
877
- }
878
- const pending = operations.find((operation) => operation.kind === 'pending'
879
- && operation.generation === owner.generation);
880
- if (pending) {
881
- if (await operationIsActive(cacheDirectory, pending, token)) {
882
- return {
883
- state: 'busy',
884
- directory,
885
- metadata: stableDirectoryMetadata,
886
- owner,
887
- };
888
- }
889
- return {
890
- state: 'releasable',
891
- directory,
892
- metadata: stableDirectoryMetadata,
893
- key: owner.generation.toString(),
894
- owner,
895
- };
896
- }
897
- }
898
-
899
- return corruptClaimStatus(directory, stableDirectoryMetadata, ownerMetadata);
900
- },
901
- directoryMetadata,
902
- );
903
- });
904
- }
905
-
906
- async function retireActiveClaim(cacheDirectory, claim) {
907
- const retirement = path.join(cacheDirectory, `retired-claim-${claim.key}`);
908
- await cacheMkdir(cacheDirectory, retirement, { mode: 0o700 }).catch((error) => {
909
- if (error?.code !== 'EEXIST') throw error;
910
- });
911
- try {
912
- const retirementMetadata = await fs.lstat(retirement);
913
- if (!retirementMetadata.isDirectory() || retirementMetadata.isSymbolicLink()) return false;
914
- } catch (error) {
915
- if (error instanceof CacheOperationRaceError) return false;
916
- if (error?.code === 'ENOENT') return false;
917
- throw error;
918
- }
919
- try {
920
- const metadata = await fs.lstat(claim.directory);
921
- if (metadata.isDirectory() && !metadata.isSymbolicLink()) {
922
- await cacheWriteFile(
923
- cacheDirectory,
924
- path.join(claim.directory, '.retirement-guard'),
925
- `${claim.key}\n`,
926
- { encoding: 'utf8', flag: 'wx', mode: 0o600 },
927
- ).catch((error) => {
928
- if (error?.code !== 'EEXIST') throw error;
929
- });
930
- }
931
- } catch (error) {
932
- if (error instanceof CacheOperationRaceError) return false;
933
- if (error?.code === 'ENOENT') return false;
934
- throw error;
935
- }
936
- try {
937
- await cacheRename(
938
- cacheDirectory,
939
- claim.directory,
940
- path.join(retirement, 'active'),
941
- assertRenameableCacheEntry,
942
- claim.metadata,
943
- );
944
- return true;
945
- } catch (error) {
946
- if (error instanceof CacheOperationRaceError) return false;
947
- if (['ENOENT', 'EEXIST', 'ENOTEMPTY', 'EPERM'].includes(error?.code)) return false;
948
- throw error;
949
- }
950
- }
951
-
952
- async function prepareOperationClaim(cacheDirectory, operation) {
953
- const directory = path.join(cacheDirectory, operationName('claim', operation.generation));
954
- await cacheMkdir(cacheDirectory, directory, { mode: 0o700 });
955
- await cacheWriteFile(
956
- cacheDirectory,
957
- path.join(directory, OPERATION_OWNER_FILE),
958
- `${JSON.stringify({
959
- pid: process.pid,
960
- token: operation.token,
961
- generation: operation.generation.toString(),
962
- })}\n`,
963
- { encoding: 'utf8', flag: 'wx', mode: 0o600 },
964
- );
965
- operation.preparedClaimDirectory = directory;
966
- }
967
-
968
- async function discardPreparedClaim(cacheDirectory, operation) {
969
- if (!operation.preparedClaimDirectory) return;
970
- const discarded = path.join(
971
- cacheDirectory,
972
- `discarded-claim-${operation.generation.toString().padStart(20, '0')}-${operation.token}`,
973
- );
974
- try {
975
- await cacheRename(
976
- cacheDirectory,
977
- operation.preparedClaimDirectory,
978
- discarded,
979
- assertSafeDirectory,
980
- );
981
- } catch (error) {
982
- if (error?.code !== 'ENOENT') throw error;
983
- }
984
- delete operation.preparedClaimDirectory;
985
- }
986
-
987
- async function promoteOperationClaim(cacheDirectory, operation) {
988
- await prepareOperationClaim(cacheDirectory, operation);
989
- const activeDirectory = path.join(cacheDirectory, ACTIVE_CLAIM_DIRECTORY);
990
- for (let attempt = 0; attempt < 8; attempt += 1) {
991
- if (await operationIsSuperseded(cacheDirectory, operation)) {
992
- await discardPreparedClaim(cacheDirectory, operation);
993
- return false;
994
- }
995
- const active = await inspectActiveClaim(cacheDirectory);
996
- if (active.state === 'busy') {
997
- await discardPreparedClaim(cacheDirectory, operation);
998
- return false;
999
- }
1000
- if (active.state === 'releasable') {
1001
- if (active.owner?.generation > operation.generation) {
1002
- await discardPreparedClaim(cacheDirectory, operation);
1003
- return false;
1004
- }
1005
- await retireActiveClaim(cacheDirectory, active);
1006
- continue;
1007
- }
1008
- try {
1009
- await cacheRename(
1010
- cacheDirectory,
1011
- operation.preparedClaimDirectory,
1012
- activeDirectory,
1013
- assertSafeDirectory,
1014
- );
1015
- delete operation.preparedClaimDirectory;
1016
- if (!await operationIsActive(cacheDirectory, operation)) return false;
1017
- return true;
1018
- } catch (promotionError) {
1019
- const raced = await inspectActiveClaim(cacheDirectory);
1020
- if (raced.state === 'absent') {
1021
- if (['EEXIST', 'ENOTEMPTY', 'EPERM'].includes(promotionError?.code)) continue;
1022
- await discardPreparedClaim(cacheDirectory, operation);
1023
- throw promotionError;
1024
- }
1025
- continue;
1026
- }
1027
- }
1028
- await discardPreparedClaim(cacheDirectory, operation);
1029
- return false;
1030
- }
1031
-
1032
- async function operationOwnsActiveClaim(cacheDirectory, operation) {
1033
- const active = await inspectActiveClaim(cacheDirectory);
1034
- return active.state === 'busy'
1035
- && active.owner?.generation === operation.generation
1036
- && active.owner.token === operation.token;
1037
- }
1038
-
1039
- async function hasActivePendingOperation(cacheDirectory) {
1040
- const token = cacheTokenFor(cacheDirectory);
1041
- return guardedCacheRead(token, async () => {
1042
- const pending = (await listOperations(cacheDirectory, token))
1043
- .filter((operation) => operation.kind === 'pending');
1044
- return (await Promise.all(pending.map(
1045
- (operation) => operationIsActive(cacheDirectory, operation, token),
1046
- ))).some(Boolean);
1047
- });
1048
- }
1049
-
1050
- async function reserveOperation(cacheDirectory) {
1051
- cacheDirectory = await prepareCacheDirectory(cacheDirectory);
1052
- const operations = await listOperations(cacheDirectory);
1053
- const occupied = new Set(operations.map((operation) => operation.generation.toString()));
1054
- let generation = 1n;
1055
- while (true) {
1056
- while (occupied.has(generation.toString())) generation += 1n;
1057
- if (generation > MAX_OPERATION_GENERATION) throw new Error('operation generation space exhausted');
1058
- const reservation = path.join(cacheDirectory, operationName('reserved', generation));
1059
- try {
1060
- await cacheMkdir(cacheDirectory, reservation, { mode: 0o700 });
1061
- } catch (error) {
1062
- if (error?.code !== 'EEXIST') throw error;
1063
- occupied.add(generation.toString());
1064
- generation += 1n;
1065
- continue;
1066
- }
1067
- const directory = path.join(cacheDirectory, operationName('pending', generation));
1068
- try {
1069
- await cacheMkdir(cacheDirectory, directory, { mode: 0o700 });
1070
- const operation = {
1071
- generation,
1072
- token: crypto.randomBytes(16).toString('hex'),
1073
- directory,
1074
- };
1075
- try {
1076
- await cacheWriteFile(
1077
- cacheDirectory,
1078
- path.join(directory, OPERATION_OWNER_FILE),
1079
- `${JSON.stringify({ pid: process.pid, token: operation.token })}\n`,
1080
- { encoding: 'utf8', flag: 'wx', mode: 0o600 },
1081
- );
1082
- } catch (error) {
1083
- if (await operationWasFenced(cacheDirectory, operation)) {
1084
- const fencedError = new OperationFencedError('operation was fenced while reserving');
1085
- fencedError.cause = error;
1086
- throw fencedError;
1087
- }
1088
- await cacheRename(
1089
- cacheDirectory,
1090
- directory,
1091
- path.join(cacheDirectory, operationName('cancelled', generation)),
1092
- assertSafeDirectory,
1093
- ).catch(() => {});
1094
- throw error;
1095
- }
1096
- return operation;
1097
- } catch (error) {
1098
- if (error?.code !== 'EEXIST') throw error;
1099
- occupied.add(generation.toString());
1100
- generation += 1n;
1101
- }
1102
- }
1103
- }
1104
-
1105
- async function operationIsSuperseded(cacheDirectory, operation) {
1106
- return (await listOperations(cacheDirectory))
1107
- .some((candidate) => candidate.generation > operation.generation);
1108
- }
1109
-
1110
- async function operationWasFenced(cacheDirectory, operation) {
1111
- const token = cacheTokenFor(cacheDirectory);
1112
- return guardedCacheRead(token, async () => {
1113
- try {
1114
- await fs.lstat(operation.directory, { bigint: true });
1115
- return false;
1116
- } catch (error) {
1117
- if (error?.code !== 'ENOENT') throw error;
1118
- }
1119
- const fencedDirectory = path.join(
1120
- cacheDirectory,
1121
- operationName('fenced', operation.generation),
1122
- );
1123
- try {
1124
- await stableCacheEntry(
1125
- token,
1126
- fencedDirectory,
1127
- assertSafeDirectory,
1128
- null,
1129
- true,
1130
- );
1131
- return true;
1132
- } catch (error) {
1133
- if (error?.code === 'ENOENT') return false;
1134
- throw error;
1135
- }
1136
- });
1137
- }
1138
-
1139
- async function transitionOperation(cacheDirectory, operation, kind) {
1140
- const destination = path.join(cacheDirectory, operationName(kind, operation.generation));
1141
- await cacheRename(cacheDirectory, operation.directory, destination, assertSafeDirectory);
1142
- }
1143
-
1144
- async function cancelOperation(cacheDirectory, operation) {
1145
- try {
1146
- await transitionOperation(cacheDirectory, operation, 'cancelled');
1147
- } catch (error) {
1148
- // A higher generation may already have fenced this unique pending directory.
1149
- if (error?.code !== 'ENOENT') throw error;
1150
- }
1151
- }
1152
-
1153
- async function acquireOperation(cacheDirectory) {
1154
- cacheDirectory = await prepareCacheDirectory(cacheDirectory);
1155
- if ((await inspectActiveClaim(cacheDirectory)).state === 'busy') return null;
1156
- if (await hasActivePendingOperation(cacheDirectory)) return null;
1157
- let operation;
1158
- try {
1159
- operation = await reserveOperation(cacheDirectory);
1160
- } catch (error) {
1161
- if (error instanceof OperationFencedError) return null;
1162
- throw error;
1163
- }
1164
- if (!await operationIsSuperseded(cacheDirectory, operation)
1165
- && await promoteOperationClaim(cacheDirectory, operation)) return operation;
1166
- await cancelOperation(cacheDirectory, operation);
1167
- return null;
1168
- }
1169
-
1170
- async function fenceLowerOperations(cacheDirectory, operation) {
1171
- const lower = (await listOperations(cacheDirectory))
1172
- .filter((candidate) => candidate.kind === 'pending'
1173
- && candidate.generation < operation.generation)
1174
- .sort((left, right) => (left.generation < right.generation ? -1 : 1));
1175
- for (const candidate of lower) {
1176
- try {
1177
- await cacheRename(
1178
- cacheDirectory,
1179
- candidate.directory,
1180
- path.join(cacheDirectory, operationName('fenced', candidate.generation)),
1181
- assertSafeDirectory,
1182
- );
1183
- } catch (error) {
1184
- if (error?.code !== 'ENOENT') throw error;
1185
- }
1186
- }
1187
- }
1188
-
1189
- async function commitOperation(cacheDirectory, operation, installedVersion, mutate) {
1190
- if (!await operationOwnsActiveClaim(cacheDirectory, operation)) {
1191
- await cancelOperation(cacheDirectory, operation);
1192
- return { fenced: true, result: silent('check-in-progress') };
1193
- }
1194
- await fenceLowerOperations(cacheDirectory, operation);
1195
- if (!await operationOwnsActiveClaim(cacheDirectory, operation)) {
1196
- await cancelOperation(cacheDirectory, operation);
1197
- return { fenced: true, result: silent('check-in-progress') };
1198
- }
1199
- const state = await readState(cacheDirectory, installedVersion);
1200
- const decision = mutate(state);
1201
- if (!decision.state) {
1202
- await cancelOperation(cacheDirectory, operation);
1203
- return { fenced: false, result: decision.result };
1204
- }
1205
- let committedState = decision.state;
1206
- let committedResult = decision.result;
1207
- let encodedState = encodeRecoverableState(committedState);
1208
- if (!encodedState && decision.capacityFallback) {
1209
- committedState = decision.capacityFallback.state;
1210
- committedResult = decision.capacityFallback.result;
1211
- encodedState = encodeRecoverableState(committedState);
1212
- }
1213
- if (!encodedState) {
1214
- await cancelOperation(cacheDirectory, operation);
1215
- return { fenced: false, result: silent('cache-unavailable') };
1216
- }
1217
- const temporary = path.join(
1218
- operation.directory,
1219
- `.state.${process.pid}.${crypto.randomBytes(8).toString('hex')}.tmp`,
1220
- );
1221
- try {
1222
- await cacheWriteFile(cacheDirectory, temporary, encodedState, {
1223
- flag: 'wx',
1224
- mode: 0o600,
1225
- });
1226
- await cacheRename(
1227
- cacheDirectory,
1228
- temporary,
1229
- path.join(operation.directory, OPERATION_STATE_FILE),
1230
- assertSafeRegularFile,
1231
- );
1232
- await transitionOperation(cacheDirectory, operation, 'committed');
1233
- return { fenced: false, result: committedResult };
1234
- } catch (error) {
1235
- if (await operationWasFenced(cacheDirectory, operation)) {
1236
- return { fenced: true, result: silent('check-in-progress') };
1237
- }
1238
- await cacheRm(cacheDirectory, temporary, { force: true }).catch(() => {});
1239
- throw error;
1240
- }
1241
- }
1242
-
1243
- function nextSuccessfulCheck(nowMs, random) {
1244
- const boundedRandom = Math.min(1, Math.max(0, Number(random()) || 0));
1245
- const multiplier = 0.8 + (boundedRandom * 0.4);
1246
- return new Date(nowMs + Math.round(CHECK_TTL_MS * multiplier)).toISOString();
1247
- }
1248
-
1249
- function nextFailedCheck(nowMs, failures) {
1250
- const delay = failures <= 1 ? FIRST_FAILURE_DELAY_MS : LATER_FAILURE_DELAY_MS;
1251
- return new Date(nowMs + delay).toISOString();
1252
- }
1253
-
1254
- function stateAfterFailedCheck(state, nowMs, withdrawCandidate = false) {
1255
- const failures = Math.min(state.check.consecutiveFailures + 1, 2);
1256
- return stateWithFailureCheck(
1257
- state,
1258
- nextFailedCheck(nowMs, failures),
1259
- failures,
1260
- withdrawCandidate,
1261
- );
1262
- }
1263
-
1264
- function eventKeyForDigest(targetDigest) {
1265
- return `${SKILL_ID}@${targetDigest}`;
1266
- }
1267
-
1268
- function digestForEventKey(eventKey) {
1269
- const prefix = `${SKILL_ID}@`;
1270
- if (typeof eventKey !== 'string' || !eventKey.startsWith(prefix)) return null;
1271
- const digest = eventKey.slice(prefix.length);
1272
- return DIGEST_PATTERN.test(digest) ? digest : null;
1273
- }
1274
-
1275
- function notification(localRelease, candidate) {
1276
- return {
1277
- status: 'update_available',
1278
- eventKey: eventKeyForDigest(candidate.targetDigest),
1279
- installedVersion: localRelease.version,
1280
- latestVersion: candidate.version,
1281
- targetDigest: candidate.targetDigest,
1282
- severity: candidate.severity,
1283
- summary: `Archify ${candidate.version} is available; see the official release notes for details.`,
1284
- releaseNotes: candidate.releaseNotes,
1285
- };
1286
- }
1287
-
1288
- function resultForCandidate(localRelease, state) {
1289
- if (!state.candidate) return silent('cache-valid');
1290
- const comparison = compareSemver(state.candidate.version, localRelease.version);
1291
- if (comparison <= 0) return silent('current');
1292
- if (state.notification.acknowledgedDigests.includes(state.candidate.targetDigest)) {
1293
- return silent('already-notified');
1294
- }
1295
- return notification(localRelease, state.candidate);
1296
- }
1297
-
1298
- async function readBoundedBody(response) {
1299
- const contentLength = Number(response.headers.get('content-length'));
1300
- if (Number.isFinite(contentLength) && contentLength > MAX_RESPONSE_BYTES) {
1301
- await cancelResponseBody(response);
1302
- throw new UpdateContractError('manifest response is too large');
1303
- }
1304
- if (!response.body || typeof response.body.getReader !== 'function') {
1305
- throw new UpdateContractError('manifest response has no bounded stream');
1306
- }
1307
- const reader = response.body.getReader();
1308
- const chunks = [];
1309
- let size = 0;
1310
- try {
1311
- while (true) {
1312
- const { done, value } = await reader.read();
1313
- if (done) break;
1314
- size += value.byteLength;
1315
- if (size > MAX_RESPONSE_BYTES) {
1316
- await reader.cancel().catch(() => {});
1317
- throw new UpdateContractError('manifest response is too large');
1318
- }
1319
- chunks.push(value);
1320
- }
1321
- } finally {
1322
- reader.releaseLock();
1323
- }
1324
- const joined = new Uint8Array(size);
1325
- let offset = 0;
1326
- for (const chunk of chunks) {
1327
- joined.set(chunk, offset);
1328
- offset += chunk.byteLength;
1329
- }
1330
- try {
1331
- return new TextDecoder('utf-8', { fatal: true }).decode(joined);
1332
- } catch {
1333
- throw new UpdateContractError('manifest is not valid UTF-8');
1334
- }
1335
- }
1336
-
1337
- async function cancelResponseBody(response) {
1338
- try {
1339
- if (response.body && typeof response.body.cancel === 'function') {
1340
- await response.body.cancel();
1341
- }
1342
- } catch {
1343
- // Network cleanup is best-effort; the original response classification wins.
1344
- }
1345
- }
1346
-
1347
- async function fetchCandidate({ fetchImpl, manifestUrl, timeoutMs }) {
1348
- if (manifestUrl !== DEFAULT_MANIFEST_URL) throw new UpdateContractError('unexpected manifest URL');
1349
- const controller = new AbortController();
1350
- let timer;
1351
- const timeout = new Promise((_resolve, reject) => {
1352
- timer = setTimeout(() => {
1353
- controller.abort();
1354
- reject(new Error('update check timed out'));
1355
- }, timeoutMs);
1356
- });
1357
- const request = (async () => {
1358
- const headers = { accept: 'application/json' };
1359
- const response = await fetchImpl(manifestUrl, {
1360
- method: 'GET',
1361
- headers,
1362
- redirect: 'error',
1363
- signal: controller.signal,
1364
- });
1365
- if (response.status !== 200) {
1366
- await cancelResponseBody(response);
1367
- throw new Error(`manifest returned HTTP ${response.status}`);
1368
- }
1369
- const mediaType = response.headers.get('content-type')?.split(';', 1)[0].trim().toLowerCase();
1370
- if (mediaType !== 'application/json') {
1371
- await cancelResponseBody(response);
1372
- throw new UpdateContractError('manifest is not JSON');
1373
- }
1374
- const source = await readBoundedBody(response);
1375
- let decoded;
1376
- try {
1377
- decoded = JSON.parse(source);
1378
- } catch {
1379
- throw new UpdateContractError('manifest is not valid bounded JSON');
1380
- }
1381
- return { candidate: validateManifest(decoded) };
1382
- })();
1383
- try {
1384
- return await Promise.race([request, timeout]);
1385
- } finally {
1386
- clearTimeout(timer);
1387
- }
1388
- }
1389
-
1390
- function defaultCacheDirectory() {
1391
- const homeDirectory = os.homedir();
1392
- if (process.platform === 'win32') {
1393
- const localData = process.env.LOCALAPPDATA;
1394
- return path.join(localData && path.isAbsolute(localData) ? localData : path.join(homeDirectory, 'AppData', 'Local'), 'archify-skill');
1395
- }
1396
- if (process.platform === 'darwin') return path.join(homeDirectory, 'Library', 'Caches', 'archify-skill');
1397
- const xdgCache = process.env.XDG_CACHE_HOME;
1398
- return path.join(xdgCache && path.isAbsolute(xdgCache) ? xdgCache : path.join(homeDirectory, '.cache'), 'archify-skill');
1399
- }
1400
-
1401
- function freshStateResult(localRelease, state, nowMs) {
1402
- const nextCheckAt = Date.parse(state.check.nextCheckAt || '');
1403
- if (Number.isFinite(nextCheckAt) && nextCheckAt > nowMs
1404
- && nextCheckAt <= nowMs + MAX_CACHE_HORIZON_MS) {
1405
- return resultForCandidate(localRelease, state);
1406
- }
1407
- return null;
1408
- }
1409
-
1410
- async function resultAfterLosingOperation(cacheDirectory, operation, localRelease) {
1411
- await cancelOperation(cacheDirectory, operation);
1412
- const cached = await readState(cacheDirectory, localRelease.version);
1413
- if (cached.candidate
1414
- && cached.notification.offeredDigests.includes(cached.candidate.targetDigest)) {
1415
- return resultForCandidate(localRelease, cached);
1416
- }
1417
- return silent('check-in-progress');
1418
- }
1419
-
1420
- async function waitUntilRetry(deadline, monotonicNow) {
1421
- let remaining;
1422
- try {
1423
- remaining = deadline - Number(monotonicNow());
1424
- } catch {
1425
- return false;
1426
- }
1427
- if (!Number.isFinite(remaining) || remaining <= 0) return false;
1428
- await new Promise((resolve) => setTimeout(
1429
- resolve,
1430
- Math.min(LOCK_RETRY_DELAY_MS, remaining),
1431
- ));
1432
- return true;
1433
- }
1434
-
1435
- export async function checkForUpdate({
1436
- releasePath = defaultReleasePath,
1437
- cacheDirectory = defaultCacheDirectory(),
1438
- fetchImpl = globalThis.fetch,
1439
- now = Date.now,
1440
- random = Math.random,
1441
- timeoutMs = DEFAULT_TIMEOUT_MS,
1442
- } = {}) {
1443
- if (typeof fetchImpl !== 'function') return silent('runtime-unavailable');
1444
- let localRelease;
1445
- try {
1446
- localRelease = validateLocalRelease(await readJsonFile(releasePath, MAX_LOCAL_RELEASE_BYTES));
1447
- } catch {
1448
- return silent('invalid-local-release');
1449
- }
1450
-
1451
- const nowMs = Number(now());
1452
- if (!Number.isFinite(nowMs)) return silent('invalid-clock');
1453
- let stateDirectory = versionCacheDirectory(cacheDirectory, localRelease.version);
1454
- let state;
1455
- try {
1456
- stateDirectory = await prepareCacheDirectory(stateDirectory);
1457
- state = await readState(stateDirectory, localRelease.version);
1458
- } catch {
1459
- return silent('cache-unavailable');
1460
- }
1461
- const cachedResult = freshStateResult(localRelease, state, nowMs);
1462
- if (cachedResult) return cachedResult;
1463
-
1464
- let operation;
1465
- try {
1466
- operation = await acquireOperation(stateDirectory);
1467
- } catch {
1468
- return silent('cache-unavailable');
1469
- }
1470
- if (!operation) {
1471
- try {
1472
- const cached = await readState(stateDirectory, localRelease.version);
1473
- if (cached.candidate
1474
- && cached.notification.offeredDigests.includes(cached.candidate.targetDigest)) {
1475
- return resultForCandidate(localRelease, cached);
1476
- }
1477
- } catch {
1478
- return silent('cache-unavailable');
1479
- }
1480
- return silent('check-in-progress');
1481
- }
1482
-
1483
- try {
1484
- state = await readState(stateDirectory, localRelease.version);
1485
- const racedResult = freshStateResult(localRelease, state, nowMs);
1486
- if (racedResult) {
1487
- await cancelOperation(stateDirectory, operation);
1488
- return racedResult;
1489
- }
1490
-
1491
- if (!await operationOwnsActiveClaim(stateDirectory, operation)) {
1492
- return await resultAfterLosingOperation(stateDirectory, operation, localRelease);
1493
- }
1494
-
1495
- await verifyCacheToken(cacheTokenFor(stateDirectory));
1496
- if (!await operationOwnsActiveClaim(stateDirectory, operation)) {
1497
- return await resultAfterLosingOperation(stateDirectory, operation, localRelease);
1498
- }
1499
- let fetched;
1500
- try {
1501
- fetched = await fetchCandidate({
1502
- fetchImpl,
1503
- manifestUrl: localRelease.updateManifestUrl,
1504
- timeoutMs,
1505
- });
1506
- } catch (error) {
1507
- const reason = error instanceof UpdateContractError ? 'invalid-manifest' : 'check-failed';
1508
- try {
1509
- const committed = await commitOperation(
1510
- stateDirectory,
1511
- operation,
1512
- localRelease.version,
1513
- (current) => ({
1514
- state: stateAfterFailedCheck(current, nowMs),
1515
- result: silent(reason),
1516
- }),
1517
- );
1518
- return committed.result;
1519
- } catch {
1520
- await cancelOperation(stateDirectory, operation).catch(() => {});
1521
- return silent('cache-unavailable');
1522
- }
1523
- }
1524
-
1525
- try {
1526
- const committed = await commitOperation(
1527
- stateDirectory,
1528
- operation,
1529
- localRelease.version,
1530
- (current) => {
1531
- const next = {
1532
- ...current,
1533
- candidate: fetched.candidate,
1534
- check: {
1535
- nextCheckAt: nextSuccessfulCheck(nowMs, random),
1536
- consecutiveFailures: 0,
1537
- },
1538
- notification: {
1539
- offeredDigests: [...current.notification.offeredDigests],
1540
- acknowledgedDigests: [...current.notification.acknowledgedDigests],
1541
- },
1542
- };
1543
- const result = resultForCandidate(localRelease, next);
1544
- if (result.status === 'update_available') {
1545
- if (!next.notification.offeredDigests.includes(next.candidate.targetDigest)) {
1546
- next.notification.offeredDigests.push(next.candidate.targetDigest);
1547
- }
1548
- }
1549
- return {
1550
- state: next,
1551
- result,
1552
- capacityFallback: {
1553
- state: stateAfterFailedCheck(current, nowMs, true),
1554
- result: silent('cache-unavailable'),
1555
- },
1556
- };
1557
- },
1558
- );
1559
- return committed.result;
1560
- } catch {
1561
- await cancelOperation(stateDirectory, operation).catch(() => {});
1562
- return silent('cache-unavailable');
1563
- }
1564
- } catch {
1565
- await cancelOperation(stateDirectory, operation).catch(() => {});
1566
- return silent('cache-unavailable');
1567
- }
1568
- }
1569
-
1570
- export async function acknowledgeUpdate({
1571
- releasePath = defaultReleasePath,
1572
- cacheDirectory = defaultCacheDirectory(),
1573
- eventKey,
1574
- monotonicNow = () => performance.now(),
1575
- } = {}) {
1576
- const targetDigest = digestForEventKey(eventKey);
1577
- if (!targetDigest || typeof monotonicNow !== 'function') {
1578
- return silent('invalid-acknowledgement');
1579
- }
1580
- let localRelease;
1581
- try {
1582
- localRelease = validateLocalRelease(await readJsonFile(releasePath, MAX_LOCAL_RELEASE_BYTES));
1583
- } catch {
1584
- return silent('invalid-local-release');
1585
- }
1586
- let stateDirectory = versionCacheDirectory(cacheDirectory, localRelease.version);
1587
- try {
1588
- stateDirectory = await prepareCacheDirectory(stateDirectory);
1589
- } catch {
1590
- return silent('cache-unavailable');
1591
- }
1592
- let deadline;
1593
- try {
1594
- deadline = Number(monotonicNow()) + ACK_LOCK_WAIT_MS;
1595
- } catch {
1596
- return silent('invalid-acknowledgement');
1597
- }
1598
- if (!Number.isFinite(deadline)) return silent('invalid-acknowledgement');
1599
- while (true) {
1600
- let operation;
1601
- try {
1602
- operation = await acquireOperation(stateDirectory);
1603
- } catch {
1604
- return silent('cache-unavailable');
1605
- }
1606
- if (!operation) {
1607
- if (!await waitUntilRetry(deadline, monotonicNow)) return silent('check-in-progress');
1608
- continue;
1609
- }
1610
- try {
1611
- const committed = await commitOperation(
1612
- stateDirectory,
1613
- operation,
1614
- localRelease.version,
1615
- (state) => {
1616
- const wasOffered = state.notification.offeredDigests.includes(targetDigest);
1617
- const wasAcknowledged = state.notification.acknowledgedDigests.includes(targetDigest);
1618
- if (!wasOffered && !wasAcknowledged) {
1619
- return { state: null, result: silent('invalid-acknowledgement') };
1620
- }
1621
- return {
1622
- state: stateAfterAcknowledgement(state, targetDigest),
1623
- result: { status: 'acknowledged', eventKey },
1624
- };
1625
- },
1626
- );
1627
- if (!committed.fenced) return committed.result;
1628
- if (!await waitUntilRetry(deadline, monotonicNow)) return silent('check-in-progress');
1629
- } catch {
1630
- await cancelOperation(stateDirectory, operation).catch(() => {});
1631
- return silent('cache-unavailable');
1632
- }
1633
- }
1634
- }
1635
-
1636
- async function runCli() {
1637
- if (process.env.ARCHIFY_UPDATE_CHECK_DISABLED === '1') return silent('disabled');
1638
- const argumentsList = process.argv.slice(2);
1639
- if (argumentsList.length === 0) return checkForUpdate();
1640
- if (argumentsList.length === 2 && argumentsList[0] === '--ack') {
1641
- return acknowledgeUpdate({ eventKey: argumentsList[1] });
1642
- }
1643
- return silent('invalid-arguments');
1644
- }
1645
-
1646
- async function isMainModule() {
1647
- if (!process.argv[1]) return false;
1648
- try {
1649
- const [entryPath, modulePath] = await Promise.all([
1650
- fs.realpath(path.resolve(process.argv[1])),
1651
- fs.realpath(fileURLToPath(import.meta.url)),
1652
- ]);
1653
- return entryPath === modulePath;
1654
- } catch {
1655
- return path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url));
1656
- }
1657
- }
1658
-
1659
- if (await isMainModule()) {
1660
- let result;
1661
- try {
1662
- result = await runCli();
1663
- } catch {
1664
- result = silent('check-failed');
1665
- }
1666
- process.stdout.write(`${JSON.stringify(result)}\n`);
1667
- }