strikethroo 4.0.0 → 4.1.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 (479) hide show
  1. package/README.md +16 -2
  2. package/dist/__tests__/fixtures/blueprint-trailing-summary.d.ts +14 -0
  3. package/dist/__tests__/fixtures/blueprint-trailing-summary.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/blueprint-trailing-summary.js +54 -0
  5. package/dist/__tests__/fixtures/blueprint-trailing-summary.js.map +1 -0
  6. package/dist/cli.js +23 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/conflict-detector.d.ts +28 -12
  9. package/dist/conflict-detector.d.ts.map +1 -1
  10. package/dist/conflict-detector.js +45 -53
  11. package/dist/conflict-detector.js.map +1 -1
  12. package/dist/export-profile.d.ts +6 -0
  13. package/dist/export-profile.d.ts.map +1 -1
  14. package/dist/export-profile.js +46 -4
  15. package/dist/export-profile.js.map +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +97 -86
  18. package/dist/index.js.map +1 -1
  19. package/dist/metadata.d.ts +12 -1
  20. package/dist/metadata.d.ts.map +1 -1
  21. package/dist/metadata.js +76 -11
  22. package/dist/metadata.js.map +1 -1
  23. package/dist/profiles.d.ts.map +1 -1
  24. package/dist/profiles.js +52 -7
  25. package/dist/profiles.js.map +1 -1
  26. package/dist/prompts.d.ts +6 -0
  27. package/dist/prompts.d.ts.map +1 -1
  28. package/dist/prompts.js +47 -3
  29. package/dist/prompts.js.map +1 -1
  30. package/dist/serve/config-write.d.ts +6 -3
  31. package/dist/serve/config-write.d.ts.map +1 -1
  32. package/dist/serve/config-write.js +20 -21
  33. package/dist/serve/config-write.js.map +1 -1
  34. package/dist/serve/derivation.d.ts +17 -19
  35. package/dist/serve/derivation.d.ts.map +1 -1
  36. package/dist/serve/derivation.js +43 -82
  37. package/dist/serve/derivation.js.map +1 -1
  38. package/dist/serve/events.d.ts +37 -8
  39. package/dist/serve/events.d.ts.map +1 -1
  40. package/dist/serve/events.js +114 -28
  41. package/dist/serve/events.js.map +1 -1
  42. package/dist/serve/self-review.d.ts +37 -7
  43. package/dist/serve/self-review.d.ts.map +1 -1
  44. package/dist/serve/self-review.js +93 -33
  45. package/dist/serve/self-review.js.map +1 -1
  46. package/dist/serve/server.d.ts +107 -0
  47. package/dist/serve/server.d.ts.map +1 -1
  48. package/dist/serve/server.js +502 -135
  49. package/dist/serve/server.js.map +1 -1
  50. package/dist/serve/workspace-model.d.ts +11 -17
  51. package/dist/serve/workspace-model.d.ts.map +1 -1
  52. package/dist/serve/workspace-model.js +84 -83
  53. package/dist/serve/workspace-model.js.map +1 -1
  54. package/dist/skill-scripts/shared/blueprint-parse.d.ts +16 -0
  55. package/dist/skill-scripts/shared/blueprint-parse.d.ts.map +1 -0
  56. package/dist/skill-scripts/shared/blueprint-parse.js +66 -0
  57. package/dist/skill-scripts/shared/blueprint-parse.js.map +1 -0
  58. package/dist/skill-scripts/shared/root.d.ts +6 -0
  59. package/dist/skill-scripts/shared/root.d.ts.map +1 -1
  60. package/dist/skill-scripts/shared/root.js +10 -4
  61. package/dist/skill-scripts/shared/root.js.map +1 -1
  62. package/dist/skill-scripts/shared/safe-fs.d.ts +89 -0
  63. package/dist/skill-scripts/shared/safe-fs.d.ts.map +1 -0
  64. package/dist/skill-scripts/shared/safe-fs.js +324 -0
  65. package/dist/skill-scripts/shared/safe-fs.js.map +1 -0
  66. package/dist/types.d.ts +8 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/types.js +13 -1
  69. package/dist/types.js.map +1 -1
  70. package/dist/update.d.ts.map +1 -1
  71. package/dist/update.js +15 -1
  72. package/dist/update.js.map +1 -1
  73. package/dist/validation/graph-checks.d.ts +6 -14
  74. package/dist/validation/graph-checks.d.ts.map +1 -1
  75. package/dist/validation/graph-checks.js +8 -15
  76. package/dist/validation/graph-checks.js.map +1 -1
  77. package/dist/validation/metadata-gate.d.ts +2 -6
  78. package/dist/validation/metadata-gate.d.ts.map +1 -1
  79. package/dist/validation/metadata-gate.js +17 -6
  80. package/dist/validation/metadata-gate.js.map +1 -1
  81. package/dist/validation/strict-pass.d.ts.map +1 -1
  82. package/dist/validation/strict-pass.js +50 -6
  83. package/dist/validation/strict-pass.js.map +1 -1
  84. package/dist-web/assets/abnfDiagram-VCTEODGH-CY8QEBrj.js +1 -0
  85. package/dist-web/assets/apl-gfMMiTNf.js +1 -0
  86. package/dist-web/assets/arc-Pry-7G1_.js +1 -0
  87. package/dist-web/assets/architecture-7GRP2DOG-drIky86B.js +1 -0
  88. package/dist-web/assets/architectureDiagram-5GKGNRK7-YZUSf-Fx.js +36 -0
  89. package/dist-web/assets/array-BifhSqXX.js +1 -0
  90. package/dist-web/assets/asciiarmor-C_eisQCp.js +1 -0
  91. package/dist-web/assets/asn1-DCl_8MCW.js +1 -0
  92. package/dist-web/assets/asterisk-BEn0Cwpx.js +1 -0
  93. package/dist-web/assets/blockDiagram-I7D4REHJ-ByyeaYP7.js +129 -0
  94. package/dist-web/assets/brainfuck-D5EjA2JK.js +1 -0
  95. package/dist-web/assets/c4Diagram-7LVT6UL2-YSA0IA7A.js +38 -0
  96. package/dist-web/assets/channel-DEeX8XvW.js +1 -0
  97. package/dist-web/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  98. package/dist-web/assets/chunk-4HAMMTFA-8VzDhfwy.js +62 -0
  99. package/dist-web/assets/{chunk-FMBD7UC4-zW3dYoIJ.js → chunk-5VM5RSS4-ZNzvKenW.js} +2 -2
  100. package/dist-web/assets/chunk-75Z2AOVW-D3fZto5-.js +2 -0
  101. package/dist-web/assets/chunk-DU6HZSFF-vtUmBAxv.js +125 -0
  102. package/dist-web/assets/chunk-F27PBJKO-BMcZVmbf.js +1 -0
  103. package/dist-web/assets/chunk-FOHPRMQF-DzxwRta7.js +161 -0
  104. package/dist-web/assets/chunk-GMAD6QVW-C5gwfNkR.js +72 -0
  105. package/dist-web/assets/chunk-GVQU2GXP-CqFZMp6I.js +1 -0
  106. package/dist-web/assets/chunk-IMKFNOWR-CJDfPbiX.js +231 -0
  107. package/dist-web/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  108. package/dist-web/assets/chunk-L3NEJ4N5-CHeJ2XSW.js +1 -0
  109. package/dist-web/assets/chunk-OSK3NFVY-CXOClbf5.js +10 -0
  110. package/dist-web/assets/chunk-P2QGCYS3-C9Wc2Z2I.js +1 -0
  111. package/dist-web/assets/chunk-POPQ4Y6H-CfiiGKfO.js +1 -0
  112. package/dist-web/assets/chunk-PWAF6VOD-CtZ4gx65.js +1 -0
  113. package/dist-web/assets/chunk-SHT3W25Y-C50-QCrR.js +168 -0
  114. package/dist-web/assets/chunk-SVP7TREG-EIHQbPfX.js +88 -0
  115. package/dist-web/assets/chunk-TICWLB2K-DOB5NZ4R.js +206 -0
  116. package/dist-web/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
  117. package/dist-web/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  118. package/dist-web/assets/classDiagram-ZZMXUADV-H5H_txsg.js +1 -0
  119. package/dist-web/assets/classDiagram-v2-VYDZK3BY-H5H_txsg.js +1 -0
  120. package/dist-web/assets/clike-D_6L3tnO.js +1 -0
  121. package/dist-web/assets/clojure-BflJGmDX.js +1 -0
  122. package/dist-web/assets/cmake-84nbDH0I.js +1 -0
  123. package/dist-web/assets/cobol-DHLQUbN7.js +1 -0
  124. package/dist-web/assets/coffeescript-De_zI4J0.js +1 -0
  125. package/dist-web/assets/commonlisp-DgAKBe0r.js +1 -0
  126. package/dist-web/assets/cose-bilkent-JH36ORCC-BEpcWcmK.js +1 -0
  127. package/dist-web/assets/crystal-Bsdphhtm.js +1 -0
  128. package/dist-web/assets/css-CnaYoQib.js +1 -0
  129. package/dist-web/assets/cynefin-OW5HDTMX-mR6pfDSH.js +1 -0
  130. package/dist-web/assets/cynefinDiagram-5FMLGOSQ-6-2oQdEg.js +62 -0
  131. package/dist-web/assets/cypher-p9eYesGn.js +1 -0
  132. package/dist-web/assets/cytoscape.esm-Yq6u8L66.js +321 -0
  133. package/dist-web/assets/d-DWkQyNnU.js +1 -0
  134. package/dist-web/assets/dagre-C-rnJpZF.js +1 -0
  135. package/dist-web/assets/dagre-GXQ25YYZ-Cm1zvIWj.js +4 -0
  136. package/dist-web/assets/defaultLocale-BFoDCU3G.js +1 -0
  137. package/dist-web/assets/diagram-S7CK7UJ4-D6mECnyP.js +30 -0
  138. package/dist-web/assets/diagram-UQ7AKVKN-CzmXABVS.js +41 -0
  139. package/dist-web/assets/diagram-VSXAHHWV-CpEauecU.js +3 -0
  140. package/dist-web/assets/diagram-VX7I27RA-CXPYrCgX.js +24 -0
  141. package/dist-web/assets/diagram-Z3DM3KII-RcMIMVWZ.js +24 -0
  142. package/dist-web/assets/diff-ChtP43wD.js +1 -0
  143. package/dist-web/assets/dist--eYrBgi0.js +2 -0
  144. package/dist-web/assets/dist-B-O4eZD_.js +1 -0
  145. package/dist-web/assets/dist-B27L6oW0.js +1 -0
  146. package/dist-web/assets/dist-BKXbBuAc.js +1 -0
  147. package/dist-web/assets/dist-BPcC0hnc.js +9 -0
  148. package/dist-web/assets/dist-BgwxV8e_.js +1 -0
  149. package/dist-web/assets/dist-BlG40nRw.js +1 -0
  150. package/dist-web/assets/dist-Bqc6e86z.js +1 -0
  151. package/dist-web/assets/dist-BsvASXHG.js +1 -0
  152. package/dist-web/assets/dist-C15GN054.js +1 -0
  153. package/dist-web/assets/dist-C4QRmcTO.js +1 -0
  154. package/dist-web/assets/dist-C4lZy0XG.js +6 -0
  155. package/dist-web/assets/dist-CFLbFzpB.js +23 -0
  156. package/dist-web/assets/dist-CP6AUVtv.js +1 -0
  157. package/dist-web/assets/dist-CpYnHHz6.js +1 -0
  158. package/dist-web/assets/dist-DHnGmK79.js +1 -0
  159. package/dist-web/assets/dist-DYmIHv0n.js +13 -0
  160. package/dist-web/assets/dist-DauRO0RO.js +1 -0
  161. package/dist-web/assets/dist-Day7i26p.js +1 -0
  162. package/dist-web/assets/dist-Do_t70vA.js +1 -0
  163. package/dist-web/assets/dist-G8nWWSie.js +11 -0
  164. package/dist-web/assets/dist-QfYLz_N1.js +1 -0
  165. package/dist-web/assets/dist-TZhb2tj2.js +1 -0
  166. package/dist-web/assets/dist-Wr2Wo_KE.js +1 -0
  167. package/dist-web/assets/dist-kYRo7Db1.js +1 -0
  168. package/dist-web/assets/dist-kfqV1Lu-.js +2 -0
  169. package/dist-web/assets/dist-v5Q1xZ2K.js +1 -0
  170. package/dist-web/assets/dockerfile-DJkHQgkl.js +1 -0
  171. package/dist-web/assets/dtd-DTF72YNO.js +1 -0
  172. package/dist-web/assets/dylan-BCDoL_-p.js +1 -0
  173. package/dist-web/assets/ebnf-D4c0_ac3.js +1 -0
  174. package/dist-web/assets/ebnfDiagram-PWID7BFC-MZpZ_VnU.js +1 -0
  175. package/dist-web/assets/ecl-BVIeWmwY.js +1 -0
  176. package/dist-web/assets/eiffel-BEjRio4Q.js +1 -0
  177. package/dist-web/assets/elm-Cshzl8qu.js +1 -0
  178. package/dist-web/assets/erDiagram-RLTQ6QDP-BcZ7Ctxy.js +99 -0
  179. package/dist-web/assets/erlang-BV0c4Hdn.js +1 -0
  180. package/dist-web/assets/esm-CQW0DO89.js +2 -0
  181. package/dist-web/assets/eventmodeling-NTZA5JFV-BwLlQZcI.js +1 -0
  182. package/dist-web/assets/factor-LKH5gN8L.js +1 -0
  183. package/dist-web/assets/fcl-ClOhbFR7.js +1 -0
  184. package/dist-web/assets/flowDiagram-HODETNUW-DGqUYaRC.js +1 -0
  185. package/dist-web/assets/forth-D6RzAl64.js +1 -0
  186. package/dist-web/assets/fortran-Bt6PBEDR.js +1 -0
  187. package/dist-web/assets/ganttDiagram-EL5Y4UJY-CcJ72sCU.js +292 -0
  188. package/dist-web/assets/gas-BHEdbvp9.js +1 -0
  189. package/dist-web/assets/gherkin-oBAE_ms0.js +1 -0
  190. package/dist-web/assets/gitGraph-4MIJSDKK-BheSjO6S.js +1 -0
  191. package/dist-web/assets/gitGraphDiagram-WWUBYQGX-Qv13SyYh.js +106 -0
  192. package/dist-web/assets/graphlib-DS17s2tU.js +1 -0
  193. package/dist-web/assets/groovy-CUpZ7dEl.js +1 -0
  194. package/dist-web/assets/haskell-BRsoo5mP.js +1 -0
  195. package/dist-web/assets/haxe-DjVOVvNP.js +1 -0
  196. package/dist-web/assets/http-CLVgA2GD.js +1 -0
  197. package/dist-web/assets/idl-BUZw3wgd.js +1 -0
  198. package/dist-web/assets/index-D0npIBvI.css +2 -0
  199. package/dist-web/assets/index-DsQxKERJ.js +103 -0
  200. package/dist-web/assets/info-A6RAGUB7-BemnwZ_B.js +1 -0
  201. package/dist-web/assets/infoDiagram-27XIBGKW-otpjj8PV.js +2 -0
  202. package/dist-web/assets/init-C-OQMol4.js +1 -0
  203. package/dist-web/assets/ishikawaDiagram-5VMMS53U-BuZBZkYN.js +70 -0
  204. package/dist-web/assets/javascript-Bu8mWwtz.js +1 -0
  205. package/dist-web/assets/journeyDiagram-3NMN7TZE-D-uflaQS.js +139 -0
  206. package/dist-web/assets/julia-CQfgDRfP.js +1 -0
  207. package/dist-web/assets/kanban-definition-UXKFOSKX-BI643rxH.js +89 -0
  208. package/dist-web/assets/katex-ZlcWpGUi.js +257 -0
  209. package/dist-web/assets/line-fay7lQM4.js +1 -0
  210. package/dist-web/assets/linear-SzVmGSw4.js +1 -0
  211. package/dist-web/assets/livescript-BXxG0Yva.js +1 -0
  212. package/dist-web/assets/lua-DPCEkfD_.js +1 -0
  213. package/dist-web/assets/mathematica-u8YMmbU0.js +1 -0
  214. package/dist-web/assets/mbox-BEMVcqjs.js +1 -0
  215. package/dist-web/assets/mermaid-parser.core-CI9Bt8lf.js +7 -0
  216. package/dist-web/assets/mermaid.core-CpvTzp9Q.js +44 -0
  217. package/dist-web/assets/mindmap-definition-YA3MSWOX-Dw-DFKfU.js +96 -0
  218. package/dist-web/assets/{mirc-CjQqDB4T.js → mirc-C9zpzAZU.js} +1 -1
  219. package/dist-web/assets/mllike-B45xgp2S.js +1 -0
  220. package/dist-web/assets/modelica-CqHI_q-D.js +1 -0
  221. package/dist-web/assets/mscgen-qgSLujhx.js +1 -0
  222. package/dist-web/assets/mumps-BSzj6Xyz.js +1 -0
  223. package/dist-web/assets/{nginx-DdIZxoE0.js → nginx-8H7HVH4w.js} +1 -1
  224. package/dist-web/assets/nsis-CfSuhXs5.js +1 -0
  225. package/dist-web/assets/ntriples-B9h1VB_g.js +1 -0
  226. package/dist-web/assets/octave-D2Q8cUp1.js +1 -0
  227. package/dist-web/assets/ordinal-BDEzSJ7C.js +1 -0
  228. package/dist-web/assets/oz-BwTct_5T.js +1 -0
  229. package/dist-web/assets/packet-AYTQ26CC-CsBrScsn.js +1 -0
  230. package/dist-web/assets/pascal-Dp_KdFgX.js +1 -0
  231. package/dist-web/assets/path-fybaL0A-.js +1 -0
  232. package/dist-web/assets/pegDiagram-XKGWAZYB-BVal7Apj.js +1 -0
  233. package/dist-web/assets/perl-BkSkiI9m.js +1 -0
  234. package/dist-web/assets/pie-WAS4IAKB-DZFMDceO.js +1 -0
  235. package/dist-web/assets/pieDiagram-E7YTZNPT-B3QEKixf.js +39 -0
  236. package/dist-web/assets/pig-AF4Hwhju.js +1 -0
  237. package/dist-web/assets/powershell-BcIto6Sf.js +1 -0
  238. package/dist-web/assets/properties-C357ku5U.js +1 -0
  239. package/dist-web/assets/protobuf-D1ij_kNL.js +1 -0
  240. package/dist-web/assets/pug-3K-JMW4g.js +1 -0
  241. package/dist-web/assets/puppet-BZyAS7I4.js +1 -0
  242. package/dist-web/assets/python-B_1Jd8HM.js +1 -0
  243. package/dist-web/assets/q-B9NhS7L_.js +1 -0
  244. package/dist-web/assets/quadrantDiagram-AXDQQJYC-CRgAf_p-.js +7 -0
  245. package/dist-web/assets/r-CxDmU1I4.js +1 -0
  246. package/dist-web/assets/radar-RG4KPBEZ-BkOoPAbJ.js +1 -0
  247. package/dist-web/assets/railroad-74A4TZTK-BgIna4sT.js +1 -0
  248. package/dist-web/assets/railroad-abnf-HS5TGJTU-CVlFeN1b.js +1 -0
  249. package/dist-web/assets/railroad-ebnf-LZEXJU2U-DCEa0WVT.js +1 -0
  250. package/dist-web/assets/railroad-peg-WCYAUIDC-BHX1T-4x.js +1 -0
  251. package/dist-web/assets/railroadDiagram-O6MQD6OU-BZwRaQM3.js +1 -0
  252. package/dist-web/assets/requirementDiagram-BXWQKSXE-BN3nmFpY.js +84 -0
  253. package/dist-web/assets/rolldown-runtime-hePW80VL.js +1 -0
  254. package/dist-web/assets/rough.esm-Dy-Kn_BL.js +1 -0
  255. package/dist-web/assets/rpm-gpDK5sbt.js +1 -0
  256. package/dist-web/assets/ruby-BjXV7-Qa.js +1 -0
  257. package/dist-web/assets/sankeyDiagram-P5KCCOFB-DBhFOKcq.js +40 -0
  258. package/dist-web/assets/{sas-B4kiWyti.js → sas-C2OyD2Y6.js} +1 -1
  259. package/dist-web/assets/scheme-D9qYN0V5.js +1 -0
  260. package/dist-web/assets/sequenceDiagram-WJ2MYXX4-CBc9y9xq.js +162 -0
  261. package/dist-web/assets/shell-DwuoZtxw.js +1 -0
  262. package/dist-web/assets/sieve-tLWDfEkZ.js +1 -0
  263. package/dist-web/assets/simple-mode-DXiLM1-G.js +1 -0
  264. package/dist-web/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  265. package/dist-web/assets/smalltalk-BLp5-jwC.js +1 -0
  266. package/dist-web/assets/solr-B78wSQJQ.js +1 -0
  267. package/dist-web/assets/sparql-Dz-mlCAC.js +1 -0
  268. package/dist-web/assets/spreadsheet-CTIncYxj.js +1 -0
  269. package/dist-web/assets/sql-DuQMFDvy.js +1 -0
  270. package/dist-web/assets/src-B6xuSHsQ.js +1 -0
  271. package/dist-web/assets/stateDiagram-D77RDMKH-BDdsXTTr.js +1 -0
  272. package/dist-web/assets/stateDiagram-v2-MP3YSRHH-C04o4SeT.js +1 -0
  273. package/dist-web/assets/stex-DNzd62Q_.js +1 -0
  274. package/dist-web/assets/stylus-BOVgKnng.js +1 -0
  275. package/dist-web/assets/swift-DKB6_1j6.js +1 -0
  276. package/dist-web/assets/swimlanes-42K2YHIH-1QXV5L5H.js +1 -0
  277. package/dist-web/assets/swimlanesDiagram-VR7AAH4N-CQ46EU90.js +8 -0
  278. package/dist-web/assets/tcl-BGfruO1u.js +1 -0
  279. package/dist-web/assets/textile-C4jVoHG1.js +1 -0
  280. package/dist-web/assets/tiddlywiki-VlUiK86J.js +1 -0
  281. package/dist-web/assets/tiki-AK6FwT8q.js +1 -0
  282. package/dist-web/assets/timeline-definition-24CTP7MA-D9CdAGEV.js +120 -0
  283. package/dist-web/assets/toml-BPTmHmyx.js +1 -0
  284. package/dist-web/assets/treeView-Q6P3EWNA-CxKfpZsz.js +1 -0
  285. package/dist-web/assets/treemap-WGGIJYW6-Bg5-PJ6G.js +1 -0
  286. package/dist-web/assets/troff-C2dAgh7P.js +1 -0
  287. package/dist-web/assets/ttcn-PPSTk1ow.js +1 -0
  288. package/dist-web/assets/ttcn-cfg-2b4Gb5sE.js +1 -0
  289. package/dist-web/assets/turtle-Cx3rYX2g.js +1 -0
  290. package/dist-web/assets/vb-BthdM_4N.js +1 -0
  291. package/dist-web/assets/vbscript-D9f6rSsU.js +1 -0
  292. package/dist-web/assets/velocity-CqftRsjg.js +1 -0
  293. package/dist-web/assets/vennDiagram-4TSXK5OY-DIlZEQm_.js +34 -0
  294. package/dist-web/assets/verilog-CjI9Y6RI.js +1 -0
  295. package/dist-web/assets/vhdl-kS471soi.js +1 -0
  296. package/dist-web/assets/wardley-WFR3VGLG-DCKFxH5V.js +1 -0
  297. package/dist-web/assets/wardleyDiagram-VM6X3IG4-D8O8WtAP.js +78 -0
  298. package/dist-web/assets/webidl-D5jiJvOU.js +1 -0
  299. package/dist-web/assets/xquery-BKJx4mf9.js +1 -0
  300. package/dist-web/assets/xychartDiagram-S5SC5T6Z-Dz9bYgtE.js +7 -0
  301. package/dist-web/assets/yacas-CXXgtw0p.js +1 -0
  302. package/dist-web/assets/z80-Co3PbHdE.js +1 -0
  303. package/dist-web/index.html +6 -18
  304. package/dist-web/theme-guard.js +21 -0
  305. package/package.json +34 -26
  306. package/templates/strikethroo/config/config.yaml +2 -2
  307. package/templates/strikethroo/config/templates/TASK_TEMPLATE.md +1 -1
  308. package/dist-web/assets/apl-B4CMkyY2.js +0 -1
  309. package/dist-web/assets/arc-DA6tr0lU.js +0 -1
  310. package/dist-web/assets/architectureDiagram-3BPJPVTR-BEH2YihV.js +0 -36
  311. package/dist-web/assets/asciiarmor-Df11BRmG.js +0 -1
  312. package/dist-web/assets/asn1-EdZsLKOL.js +0 -1
  313. package/dist-web/assets/asterisk-B-8jnY81.js +0 -1
  314. package/dist-web/assets/blockDiagram-GPEHLZMM-jgUyFGxx.js +0 -132
  315. package/dist-web/assets/brainfuck-C4LP7Hcl.js +0 -1
  316. package/dist-web/assets/c4Diagram-AAUBKEIU-Do-n7I5O.js +0 -10
  317. package/dist-web/assets/channel-DJ33z8Wx.js +0 -1
  318. package/dist-web/assets/chunk-2J33WTMH-CgMvCn22.js +0 -1
  319. package/dist-web/assets/chunk-4BX2VUAB-FO8RQkkL.js +0 -1
  320. package/dist-web/assets/chunk-55IACEB6-DL_6pZjw.js +0 -1
  321. package/dist-web/assets/chunk-727SXJPM-DW7J3hiD.js +0 -206
  322. package/dist-web/assets/chunk-AQP2D5EJ-TPWnvFSC.js +0 -231
  323. package/dist-web/assets/chunk-ND2GUHAM-D0Nmkz3P.js +0 -1
  324. package/dist-web/assets/chunk-QZHKN3VN-BxgxRNWB.js +0 -1
  325. package/dist-web/assets/classDiagram-4FO5ZUOK--tqQjy0s.js +0 -1
  326. package/dist-web/assets/classDiagram-v2-Q7XG4LA2--tqQjy0s.js +0 -1
  327. package/dist-web/assets/clike-B9uivgTg.js +0 -1
  328. package/dist-web/assets/clojure-BMjYHr_A.js +0 -1
  329. package/dist-web/assets/cmake-BQqOBYOt.js +0 -1
  330. package/dist-web/assets/cobol-CWcv1MsR.js +0 -1
  331. package/dist-web/assets/coffeescript-S37ZYGWr.js +0 -1
  332. package/dist-web/assets/commonlisp-DBKNyK5s.js +0 -1
  333. package/dist-web/assets/cose-bilkent-S5V4N54A-ysHXC5GT.js +0 -1
  334. package/dist-web/assets/crystal-SjHAIU92.js +0 -1
  335. package/dist-web/assets/css-BnMrqG3P.js +0 -1
  336. package/dist-web/assets/cypher-C_CwsFkJ.js +0 -1
  337. package/dist-web/assets/cytoscape.esm-BHYC38rz.js +0 -331
  338. package/dist-web/assets/d-pRatUO7H.js +0 -1
  339. package/dist-web/assets/dagre-BM42HDAG-G_XIk8Dj.js +0 -4
  340. package/dist-web/assets/defaultLocale-CrowFXzY.js +0 -1
  341. package/dist-web/assets/diagram-2AECGRRQ-7HG2PLhr.js +0 -43
  342. package/dist-web/assets/diagram-5GNKFQAL-BdS1bF_R.js +0 -10
  343. package/dist-web/assets/diagram-KO2AKTUF-AFaiXGZQ.js +0 -3
  344. package/dist-web/assets/diagram-LMA3HP47-CTWrauj7.js +0 -24
  345. package/dist-web/assets/diagram-OG6HWLK6-BmBckGLa.js +0 -24
  346. package/dist-web/assets/diff-DbItnlRl.js +0 -1
  347. package/dist-web/assets/dockerfile-BKs6k2Af.js +0 -1
  348. package/dist-web/assets/dtd-DF_7sFjM.js +0 -1
  349. package/dist-web/assets/dylan-DwRh75JA.js +0 -1
  350. package/dist-web/assets/ebnf-CDyGwa7X.js +0 -1
  351. package/dist-web/assets/ecl-Cabwm37j.js +0 -1
  352. package/dist-web/assets/eiffel-CnydiIhH.js +0 -1
  353. package/dist-web/assets/elm-vLlmbW-K.js +0 -1
  354. package/dist-web/assets/erDiagram-TEJ5UH35-C0B2cXE-.js +0 -85
  355. package/dist-web/assets/erlang-BNw1qcRV.js +0 -1
  356. package/dist-web/assets/factor-kuTfRLto.js +0 -1
  357. package/dist-web/assets/fcl-Kvtd6kyn.js +0 -1
  358. package/dist-web/assets/flowDiagram-I6XJVG4X-CZ70tn_Q.js +0 -162
  359. package/dist-web/assets/forth-Ffai-XNe.js +0 -1
  360. package/dist-web/assets/fortran-DYz_wnZ1.js +0 -1
  361. package/dist-web/assets/ganttDiagram-6RSMTGT7-h7O-Xh-D.js +0 -292
  362. package/dist-web/assets/gas-Bneqetm1.js +0 -1
  363. package/dist-web/assets/gherkin-heZmZLOM.js +0 -1
  364. package/dist-web/assets/gitGraphDiagram-PVQCEYII-BDZixURw.js +0 -106
  365. package/dist-web/assets/graph-Dqkl27Ch.js +0 -1
  366. package/dist-web/assets/groovy-D9Dt4D0W.js +0 -1
  367. package/dist-web/assets/haskell-BWDZoCOh.js +0 -1
  368. package/dist-web/assets/haxe-H-WmDvRZ.js +0 -1
  369. package/dist-web/assets/http-DBlCnlav.js +0 -1
  370. package/dist-web/assets/idl-BEugSyMb.js +0 -1
  371. package/dist-web/assets/index-B-KlYMEI.js +0 -1
  372. package/dist-web/assets/index-B0a4C4Lb.js +0 -1
  373. package/dist-web/assets/index-B90tvIxG.js +0 -3
  374. package/dist-web/assets/index-BLXIwDvb.js +0 -1
  375. package/dist-web/assets/index-BjZYUODU.js +0 -1
  376. package/dist-web/assets/index-BmsczLPZ.js +0 -1
  377. package/dist-web/assets/index-BpU7RpGz.js +0 -1
  378. package/dist-web/assets/index-BwFIiA6J.js +0 -2
  379. package/dist-web/assets/index-C53NKwQ5.js +0 -1
  380. package/dist-web/assets/index-C73riuQN.js +0 -1
  381. package/dist-web/assets/index-C9RcHSPW.js +0 -1
  382. package/dist-web/assets/index-CEBV-m_B.js +0 -1
  383. package/dist-web/assets/index-CG1O2Vjg.js +0 -1
  384. package/dist-web/assets/index-CRL66wiY.js +0 -169
  385. package/dist-web/assets/index-CddJufqj.js +0 -1
  386. package/dist-web/assets/index-CrzBaw1K.css +0 -1
  387. package/dist-web/assets/index-CuBsNWzH.js +0 -13
  388. package/dist-web/assets/index-CuCAyRTw.js +0 -7
  389. package/dist-web/assets/index-CuUh3dvS.js +0 -1
  390. package/dist-web/assets/index-CwPWc9jQ.js +0 -1
  391. package/dist-web/assets/index-DHBbud_j.js +0 -1
  392. package/dist-web/assets/index-LLaxWDbg.js +0 -1
  393. package/dist-web/assets/index-XOpAvr0E.js +0 -13
  394. package/dist-web/assets/index-aX67gnlS.js +0 -2
  395. package/dist-web/assets/index-lkaAPBmM.js +0 -6
  396. package/dist-web/assets/index-pUkuW0EP.js +0 -1
  397. package/dist-web/assets/index-sbfqG9cy.js +0 -1
  398. package/dist-web/assets/index-udFbjSlZ.js +0 -2
  399. package/dist-web/assets/index-yjEPVwyN.js +0 -1
  400. package/dist-web/assets/infoDiagram-5YYISTIA-CKXHxMh_.js +0 -2
  401. package/dist-web/assets/init-Gi6I4Gst.js +0 -1
  402. package/dist-web/assets/ishikawaDiagram-YF4QCWOH-DGancylI.js +0 -70
  403. package/dist-web/assets/javascript-qCveANmP.js +0 -1
  404. package/dist-web/assets/journeyDiagram-JHISSGLW-DifvKy-w.js +0 -139
  405. package/dist-web/assets/julia-DuME0IfC.js +0 -1
  406. package/dist-web/assets/kanban-definition-UN3LZRKU-ByC-4YyY.js +0 -89
  407. package/dist-web/assets/katex-C5jXJg4s.js +0 -257
  408. package/dist-web/assets/layout-DO9UvE1P.js +0 -1
  409. package/dist-web/assets/linear-Cm0Y2OWD.js +0 -1
  410. package/dist-web/assets/livescript-BwQOo05w.js +0 -1
  411. package/dist-web/assets/lua-VAEuO923.js +0 -1
  412. package/dist-web/assets/mathematica-DTrFuWx2.js +0 -1
  413. package/dist-web/assets/mbox-CNhZ1qSd.js +0 -1
  414. package/dist-web/assets/mermaid.core-DBlLt9sa.js +0 -307
  415. package/dist-web/assets/mindmap-definition-RKZ34NQL-tkThiQWd.js +0 -96
  416. package/dist-web/assets/mllike-CXdrOF99.js +0 -1
  417. package/dist-web/assets/modelica-Dc1JOy9r.js +0 -1
  418. package/dist-web/assets/mscgen-BA5vi2Kp.js +0 -1
  419. package/dist-web/assets/mumps-BT43cFF4.js +0 -1
  420. package/dist-web/assets/nsis-LdVXkNf5.js +0 -1
  421. package/dist-web/assets/ntriples-BfvgReVJ.js +0 -1
  422. package/dist-web/assets/octave-Ck1zUtKM.js +0 -1
  423. package/dist-web/assets/ordinal-Cboi1Yqb.js +0 -1
  424. package/dist-web/assets/oz-BzwKVEFT.js +0 -1
  425. package/dist-web/assets/pascal--L3eBynH.js +0 -1
  426. package/dist-web/assets/perl-CdXCOZ3F.js +0 -1
  427. package/dist-web/assets/pieDiagram-4H26LBE5-BXGBVjcj.js +0 -30
  428. package/dist-web/assets/pig-CevX1Tat.js +0 -1
  429. package/dist-web/assets/powershell-CFHJl5sT.js +0 -1
  430. package/dist-web/assets/properties-C78fOPTZ.js +0 -1
  431. package/dist-web/assets/protobuf-ChK-085T.js +0 -1
  432. package/dist-web/assets/pug-DukmZTjD.js +0 -1
  433. package/dist-web/assets/puppet-DMA9R1ak.js +0 -1
  434. package/dist-web/assets/python-BuPzkPfP.js +0 -1
  435. package/dist-web/assets/q-pXgVlZs6.js +0 -1
  436. package/dist-web/assets/quadrantDiagram-W4KKPZXB-DnF0iEBo.js +0 -7
  437. package/dist-web/assets/r-DUYO_cvP.js +0 -1
  438. package/dist-web/assets/requirementDiagram-4Y6WPE33-BooGjmPb.js +0 -84
  439. package/dist-web/assets/rpm-CTu-6PCP.js +0 -1
  440. package/dist-web/assets/ruby-B2Rjki9n.js +0 -1
  441. package/dist-web/assets/sankeyDiagram-5OEKKPKP-7le5uaC7.js +0 -40
  442. package/dist-web/assets/scheme-C41bIUwD.js +0 -1
  443. package/dist-web/assets/sequenceDiagram-3UESZ5HK-B9GCKMDd.js +0 -162
  444. package/dist-web/assets/shell-CjFT_Tl9.js +0 -1
  445. package/dist-web/assets/sieve-C3Gn_uJK.js +0 -1
  446. package/dist-web/assets/simple-mode-GW_nhZxv.js +0 -1
  447. package/dist-web/assets/smalltalk-CnHTOXQT.js +0 -1
  448. package/dist-web/assets/solr-DehyRSwq.js +0 -1
  449. package/dist-web/assets/sparql-DkYu6x3z.js +0 -1
  450. package/dist-web/assets/spreadsheet-BCZA_wO0.js +0 -1
  451. package/dist-web/assets/sql-D0XecflT.js +0 -1
  452. package/dist-web/assets/stateDiagram-AJRCARHV-CO2qL8R6.js +0 -1
  453. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-DUkgqBTd.js +0 -1
  454. package/dist-web/assets/stex-C3f8Ysf7.js +0 -1
  455. package/dist-web/assets/stylus-B533Al4x.js +0 -1
  456. package/dist-web/assets/swift-BzpIVaGY.js +0 -1
  457. package/dist-web/assets/tcl-DVfN8rqt.js +0 -1
  458. package/dist-web/assets/textile-CnDTJFAw.js +0 -1
  459. package/dist-web/assets/tiddlywiki-DO-Gjzrf.js +0 -1
  460. package/dist-web/assets/tiki-DGYXhP31.js +0 -1
  461. package/dist-web/assets/timeline-definition-PNZ67QCA-FLzWM85F.js +0 -120
  462. package/dist-web/assets/toml-Bm5Em-hy.js +0 -1
  463. package/dist-web/assets/troff-wAsdV37c.js +0 -1
  464. package/dist-web/assets/ttcn-CfJYG6tj.js +0 -1
  465. package/dist-web/assets/ttcn-cfg-B9xdYoR4.js +0 -1
  466. package/dist-web/assets/turtle-B1tBg_DP.js +0 -1
  467. package/dist-web/assets/vb-CmGdzxic.js +0 -1
  468. package/dist-web/assets/vbscript-BuJXcnF6.js +0 -1
  469. package/dist-web/assets/velocity-D8B20fx6.js +0 -1
  470. package/dist-web/assets/vennDiagram-CIIHVFJN-Dt6p6Ib1.js +0 -34
  471. package/dist-web/assets/verilog-C6RDOZhf.js +0 -1
  472. package/dist-web/assets/vhdl-lSbBsy5d.js +0 -1
  473. package/dist-web/assets/wardley-L42UT6IY-D6k_B5It.js +0 -173
  474. package/dist-web/assets/wardleyDiagram-YWT4CUSO-jT3ItNLi.js +0 -78
  475. package/dist-web/assets/webidl-ZXfAyPTL.js +0 -1
  476. package/dist-web/assets/xquery-CQfU5ijd.js +0 -1
  477. package/dist-web/assets/xychartDiagram-2RQKCTM6-CpM6UhUO.js +0 -7
  478. package/dist-web/assets/yacas-BJ4BC0dw.js +0 -1
  479. package/dist-web/assets/z80-Hz9HOZM7.js +0 -1
package/dist/index.js CHANGED
@@ -299,56 +299,113 @@ async function recordHarnessSelection(metadataPath, harnesses) {
299
299
  /**
300
300
  * Copy common template files to .ai/strikethroo directory with conflict detection
301
301
  *
302
+ * Each incoming `config/` path gets its own outcome, so one conflict never stops
303
+ * another path from being installed, refreshed, or restored. Missing or
304
+ * unusable metadata is not a first install: every existing destination is then
305
+ * untracked, and each one that differs from its incoming file needs a decision
306
+ * before anything is written. An empty or byte-identical tree needs none, and
307
+ * `force` is the only route that skips the question. The tracked tree is
308
+ * written first and the metadata last; a failed copy throws before
309
+ * `saveMetadata` runs, leaving the previous metadata in place.
310
+ *
302
311
  * @param sourceDir - Source template tree; defaults to the shipped
303
312
  * `templates/strikethroo/` path, overridden by a profile staging tree
304
313
  */
305
314
  async function copyCommonTemplates(baseDir, force, sourceDir = getTemplatePath('strikethroo')) {
306
315
  const destDir = resolvePath(baseDir, '.ai/strikethroo');
307
316
  const metadataPath = resolvePath(destDir, '.init-metadata.json');
308
- // Check if source template directory exists
309
317
  if (!(await exists(sourceDir))) {
310
318
  throw new Error(`Template directory not found: ${sourceDir}`);
311
319
  }
312
- // Load existing metadata if present
313
320
  const existingMetadata = await (0, metadata_1.loadMetadata)(metadataPath);
314
- // The ignore file is copied separately, under its final name
315
- const copyOptions = {
316
- overwrite: true,
317
- filter: (src) => path.relative(sourceDir, src) !== WORKSPACE_IGNORE_TEMPLATE,
318
- };
319
- // Scenario 1: First-time init (no metadata) - copy all files
320
- if (!existingMetadata) {
321
- await fs.copy(sourceDir, destDir, copyOptions);
322
- await copyWorkspaceIgnoreFile(sourceDir, destDir);
323
- // Create initial metadata
324
- await createMetadata(sourceDir, destDir, metadataPath);
325
- return;
321
+ const baseline = existingMetadata?.files ?? {};
322
+ let resolutions = new Map();
323
+ if (!force) {
324
+ const conflicts = await (0, conflict_detector_1.detectConflicts)(destDir, sourceDir, baseline);
325
+ if (conflicts.length > 0) {
326
+ if (!existingMetadata) {
327
+ console.log(chalk_1.default.yellow('\n⚠ .init-metadata.json is missing or unusable, so nothing under config/ has a trusted baseline.'));
328
+ }
329
+ console.log(chalk_1.default.yellow(`\n⚠ ${conflicts.length} file(s) differ from the incoming version and need a decision.\n`));
330
+ resolutions = await (0, prompts_1.promptForConflicts)(conflicts);
331
+ }
326
332
  }
327
- // Scenario 2: Force flag - overwrite all files
328
- if (force) {
329
- await fs.copy(sourceDir, destDir, copyOptions);
330
- await copyWorkspaceIgnoreFile(sourceDir, destDir);
331
- // Update metadata
332
- await createMetadata(sourceDir, destDir, metadataPath);
333
- return;
333
+ const outcomes = await refreshConfigTree(sourceDir, destDir, baseline, resolutions, force);
334
+ await copyUntrackedTemplateFiles(sourceDir, destDir);
335
+ await copyWorkspaceIgnoreFile(sourceDir, destDir);
336
+ await createMetadata(metadataPath, existingMetadata, recordBaselines(baseline, outcomes));
337
+ }
338
+ /**
339
+ * Decide and apply one outcome per incoming `config/` path.
340
+ */
341
+ async function refreshConfigTree(sourceDir, destDir, baseline, resolutions, force) {
342
+ const outcomes = [];
343
+ for (const relativePath of await (0, conflict_detector_1.getConfigFiles)(sourceDir)) {
344
+ const sourcePath = path.join(sourceDir, relativePath);
345
+ const destPath = path.join(destDir, relativePath);
346
+ const outcome = await decideRefreshOutcome(destPath, await (0, metadata_1.calculateFileHash)(sourcePath), baseline[relativePath], resolutions.get(relativePath), force);
347
+ if (outcome.kind !== 'kept' && outcome.kind !== 'unchanged') {
348
+ await fs.copy(sourcePath, destPath, { overwrite: true });
349
+ }
350
+ outcomes.push({ relativePath, ...outcome });
334
351
  }
335
- // Scenario 3: Conflict detection - check for user modifications
336
- const conflicts = await (0, conflict_detector_1.detectConflicts)(destDir, sourceDir, existingMetadata);
337
- if (conflicts.length === 0) {
338
- await fs.copy(sourceDir, destDir, copyOptions);
339
- await copyWorkspaceIgnoreFile(sourceDir, destDir);
340
- // Update metadata
341
- await createMetadata(sourceDir, destDir, metadataPath);
342
- return;
352
+ return outcomes;
353
+ }
354
+ /**
355
+ * Classify one destination against its incoming file and recorded baseline.
356
+ *
357
+ * A destination that diverged from its baseline, or that has no baseline, is
358
+ * replaced only by `force` or an explicit `overwrite` answer; with no answer it
359
+ * is kept, because only the prompt may authorize destroying a file this refresh
360
+ * did not write. A kept destination with no baseline records none.
361
+ */
362
+ async function decideRefreshOutcome(destPath, incomingHash, recordedHash, resolution, force) {
363
+ if (!(await exists(destPath))) {
364
+ return { kind: 'installed', hash: incomingHash };
343
365
  }
344
- // Conflicts detected - prompt user for resolution
345
- console.log(chalk_1.default.yellow(`\n⚠ Detected ${conflicts.length} modified file(s). Prompting for resolution...\n`));
346
- const resolutions = await (0, prompts_1.promptForConflicts)(conflicts);
347
- // Apply resolutions
348
- await applyResolutions(sourceDir, destDir, resolutions);
349
- await copyWorkspaceIgnoreFile(sourceDir, destDir);
350
- // Update metadata for all files (including resolved conflicts)
351
- await createMetadata(sourceDir, destDir, metadataPath);
366
+ const currentHash = await (0, metadata_1.calculateFileHash)(destPath);
367
+ if (currentHash === incomingHash) {
368
+ return { kind: 'unchanged', hash: incomingHash };
369
+ }
370
+ if (recordedHash !== undefined && currentHash === recordedHash) {
371
+ return { kind: 'refreshed', hash: incomingHash };
372
+ }
373
+ if (force || resolution === 'overwrite' || resolution === 'overwrite-all') {
374
+ return { kind: 'overwritten', hash: incomingHash };
375
+ }
376
+ return { kind: 'kept', hash: recordedHash };
377
+ }
378
+ /**
379
+ * Build the `files` map from the refresh outcomes.
380
+ *
381
+ * A recorded path the incoming tree no longer ships keeps its recorded hash:
382
+ * the refresh learned nothing new about it, and dropping one that is also gone
383
+ * from disk would erase the deletion `validate` reports. An outcome with no
384
+ * hash records nothing.
385
+ */
386
+ function recordBaselines(baseline, outcomes) {
387
+ const files = { ...baseline };
388
+ for (const { relativePath, hash } of outcomes) {
389
+ if (hash !== undefined) {
390
+ files[relativePath] = hash;
391
+ }
392
+ }
393
+ return files;
394
+ }
395
+ /**
396
+ * Copy the template entries outside `config/`, such as `README.md`, verbatim.
397
+ *
398
+ * Only `config/` is hash-tracked, so these refresh on every run. The ignore
399
+ * template is excluded here because it lands under a different name.
400
+ */
401
+ async function copyUntrackedTemplateFiles(sourceDir, destDir) {
402
+ await fs.copy(sourceDir, destDir, {
403
+ overwrite: true,
404
+ filter: src => {
405
+ const [first] = path.relative(sourceDir, src).split(path.sep);
406
+ return first !== 'config' && first !== WORKSPACE_IGNORE_TEMPLATE;
407
+ },
408
+ });
352
409
  }
353
410
  /**
354
411
  * Copy the workspace ignore template to its final `.gitignore` name.
@@ -368,42 +425,10 @@ async function copyWorkspaceIgnoreFile(sourceDir, destDir) {
368
425
  await fs.copy(source, path.join(destDir, WORKSPACE_IGNORE_FILE), { overwrite: true });
369
426
  }
370
427
  /**
371
- * Create or update metadata file with current file hashes
428
+ * Write the metadata for a completed refresh, carrying provenance and the
429
+ * harness selection forward from the previous metadata.
372
430
  */
373
- async function createMetadata(sourceDir, destDir, metadataPath) {
374
- const existingMetadata = await (0, metadata_1.loadMetadata)(metadataPath);
375
- const files = {};
376
- async function walkDir(dir, relativeTo) {
377
- const entries = await fs.readdir(dir, { withFileTypes: true });
378
- for (const entry of entries) {
379
- const fullPath = path.join(dir, entry.name);
380
- const relativePath = path.relative(relativeTo, fullPath);
381
- // Skip README.md (always overwrite on init/re-init)
382
- if (relativePath === 'README.md') {
383
- continue;
384
- }
385
- // Skip metadata file itself
386
- if (relativePath === '.init-metadata.json') {
387
- continue;
388
- }
389
- if (entry.isDirectory()) {
390
- await walkDir(fullPath, relativeTo);
391
- }
392
- else if (entry.isFile()) {
393
- // Calculate hash of the destination file (what we just copied)
394
- const destFilePath = path.join(destDir, relativePath);
395
- if (await exists(destFilePath)) {
396
- const hash = await (0, metadata_1.calculateFileHash)(destFilePath);
397
- files[relativePath] = hash;
398
- }
399
- }
400
- }
401
- }
402
- const configDir = path.join(destDir, 'config');
403
- if (await exists(configDir)) {
404
- await walkDir(configDir, destDir);
405
- }
406
- // Create metadata object
431
+ async function createMetadata(metadataPath, existingMetadata, files) {
407
432
  const metadata = {
408
433
  version: (0, metadata_1.getPackageVersion)(),
409
434
  workspaceSchemaVersion: metadata_1.CURRENT_WORKSPACE_SCHEMA_VERSION,
@@ -416,22 +441,8 @@ async function createMetadata(sourceDir, destDir, metadataPath) {
416
441
  if (existingMetadata?.harnesses) {
417
442
  metadata.harnesses = existingMetadata.harnesses;
418
443
  }
419
- // Save metadata
420
444
  await (0, metadata_1.saveMetadata)(metadataPath, metadata);
421
445
  }
422
- /**
423
- * Apply user resolutions to file conflicts
424
- */
425
- async function applyResolutions(sourceDir, destDir, resolutions) {
426
- for (const [relativePath, resolution] of resolutions) {
427
- const sourcePath = path.join(sourceDir, relativePath);
428
- const destPath = path.join(destDir, relativePath);
429
- if (resolution === 'overwrite') {
430
- await fs.copy(sourcePath, destPath, { overwrite: true });
431
- }
432
- // If 'keep', do nothing - keep user's file
433
- }
434
- }
435
446
  /**
436
447
  * Check if a directory already has Strikethroo initialized
437
448
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -23,13 +23,24 @@ export declare function calculateFileHash(filePath: string): Promise<string>;
23
23
  /**
24
24
  * Load metadata from .init-metadata.json file
25
25
  * @param metadataPath - Absolute path to metadata file
26
- * @returns InitMetadata object or null if file doesn't exist or is invalid
26
+ * @returns InitMetadata object, or null when the file is absent or its JSON is
27
+ * not usable metadata. The caller decides what null means: a first install
28
+ * when the workspace holds nothing, an untrusted baseline when it does
29
+ * @throws FileSystemError when the file or a workspace parent is a symbolic
30
+ * link or otherwise not a regular entry; this is never treated as first-time
31
+ * init, so a link cannot bypass conflict protection
27
32
  */
28
33
  export declare function loadMetadata(metadataPath: string): Promise<InitMetadata | null>;
29
34
  /**
30
35
  * Save metadata to .init-metadata.json file
36
+ *
37
+ * Writes atomically through the containment helper with the workspace
38
+ * directory as the root: an exclusive random temp file renamed over the
39
+ * target, never through a link.
40
+ *
31
41
  * @param metadataPath - Absolute path to metadata file
32
42
  * @param metadata - InitMetadata object to save
43
+ * @throws FileSystemError when the path is a link or the write is refused
33
44
  */
34
45
  export declare function saveMetadata(metadataPath: string, metadata: InitMetadata): Promise<void>;
35
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0BrF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAmB,YAAY,EAAE,MAAM,SAAS,CAAC;AAGxD;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAsDD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA2BrF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
package/dist/metadata.js CHANGED
@@ -47,6 +47,8 @@ exports.getPackageVersion = getPackageVersion;
47
47
  const crypto = __importStar(require("crypto"));
48
48
  const fs = __importStar(require("fs-extra"));
49
49
  const path = __importStar(require("path"));
50
+ const types_1 = require("./types");
51
+ const safe_fs_1 = require("./skill-scripts/shared/safe-fs");
50
52
  /**
51
53
  * Current workspace schema version baked into this CLI build.
52
54
  *
@@ -70,19 +72,72 @@ async function calculateFileHash(filePath) {
70
72
  stream.on('error', err => reject(err));
71
73
  });
72
74
  }
75
+ /**
76
+ * Refuse a metadata path whose file, or either parent below the project
77
+ * (`.ai/strikethroo` and `.ai`), is a symbolic link.
78
+ *
79
+ * The containment helper canonicalizes its root, so a link at or above the
80
+ * root would be followed silently; those two parents are checked here. The
81
+ * check runs before any read or write so a linked workspace fails before a
82
+ * single template is copied through it. Missing entries are fine: they are
83
+ * what a first-time init looks like.
84
+ */
85
+ async function assertMetadataPathUnlinked(metadataPath) {
86
+ const workspaceDir = path.dirname(metadataPath);
87
+ const candidates = [
88
+ [path.dirname(workspaceDir), 'directory'],
89
+ [workspaceDir, 'directory'],
90
+ [metadataPath, 'file'],
91
+ ];
92
+ for (const [candidate, kind] of candidates) {
93
+ let stats;
94
+ try {
95
+ stats = await fs.lstat(candidate);
96
+ }
97
+ catch (error) {
98
+ const code = error.code;
99
+ if (code === 'ENOENT' || code === 'ENOTDIR')
100
+ return;
101
+ throw new types_1.FileSystemError(`Cannot inspect ${candidate}: ${error instanceof Error ? error.message : String(error)}`);
102
+ }
103
+ if (stats.isSymbolicLink()) {
104
+ throw new types_1.FileSystemError(`${candidate} is a symbolic link. Strikethroo reads and writes workspace metadata only ` +
105
+ `through regular directories and files, so a link here cannot be trusted. Replace the ` +
106
+ `symbolic link with a regular ${kind} (or remove it) and re-run the command.`);
107
+ }
108
+ }
109
+ }
110
+ function describeRefusal(metadataPath, refusal) {
111
+ switch (refusal.error) {
112
+ case 'symlink':
113
+ return (`${metadataPath} is a symbolic link. Replace it with a regular file (or remove it) ` +
114
+ `and re-run the command.`);
115
+ case 'not-a-file':
116
+ return `${metadataPath} is not a regular file. Remove it and re-run the command.`;
117
+ default:
118
+ return `Cannot access ${metadataPath}: ${refusal.message}`;
119
+ }
120
+ }
73
121
  /**
74
122
  * Load metadata from .init-metadata.json file
75
123
  * @param metadataPath - Absolute path to metadata file
76
- * @returns InitMetadata object or null if file doesn't exist or is invalid
124
+ * @returns InitMetadata object, or null when the file is absent or its JSON is
125
+ * not usable metadata. The caller decides what null means: a first install
126
+ * when the workspace holds nothing, an untrusted baseline when it does
127
+ * @throws FileSystemError when the file or a workspace parent is a symbolic
128
+ * link or otherwise not a regular entry; this is never treated as first-time
129
+ * init, so a link cannot bypass conflict protection
77
130
  */
78
131
  async function loadMetadata(metadataPath) {
79
- try {
80
- const exists = await fs.pathExists(metadataPath);
81
- if (!exists) {
132
+ await assertMetadataPathUnlinked(metadataPath);
133
+ const read = (0, safe_fs_1.readContainedFile)(path.dirname(metadataPath), path.basename(metadataPath));
134
+ if ('error' in read) {
135
+ if (read.error === 'not-found')
82
136
  return null;
83
- }
84
- const content = await fs.readFile(metadataPath, 'utf-8');
85
- const metadata = JSON.parse(content);
137
+ throw new types_1.FileSystemError(describeRefusal(metadataPath, read));
138
+ }
139
+ try {
140
+ const metadata = JSON.parse(read.content);
86
141
  // Validate metadata structure
87
142
  if (!metadata.version || !metadata.timestamp || !metadata.files) {
88
143
  return null;
@@ -94,19 +149,29 @@ async function loadMetadata(metadataPath) {
94
149
  return metadata;
95
150
  }
96
151
  catch {
97
- // If metadata is corrupted or invalid, return null
98
- // This treats the situation as first-time init
152
+ // Corrupted or invalid JSON is unusable metadata; the caller decides what that means
99
153
  return null;
100
154
  }
101
155
  }
102
156
  /**
103
157
  * Save metadata to .init-metadata.json file
158
+ *
159
+ * Writes atomically through the containment helper with the workspace
160
+ * directory as the root: an exclusive random temp file renamed over the
161
+ * target, never through a link.
162
+ *
104
163
  * @param metadataPath - Absolute path to metadata file
105
164
  * @param metadata - InitMetadata object to save
165
+ * @throws FileSystemError when the path is a link or the write is refused
106
166
  */
107
167
  async function saveMetadata(metadataPath, metadata) {
108
- await fs.ensureDir(path.dirname(metadataPath));
109
- await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
168
+ await assertMetadataPathUnlinked(metadataPath);
169
+ const workspaceDir = path.dirname(metadataPath);
170
+ await fs.ensureDir(workspaceDir);
171
+ const written = await (0, safe_fs_1.writeFileAtomic)(workspaceDir, path.basename(metadataPath), JSON.stringify(metadata, null, 2));
172
+ if ('error' in written) {
173
+ throw new types_1.FileSystemError(describeRefusal(metadataPath, written));
174
+ }
110
175
  }
111
176
  /**
112
177
  * Get the current package version from package.json
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,8CASC;AAOD,oCA0BC;AAOD,oCAGC;AAMD,8CAKC;AAnFD,+CAAiC;AACjC,6CAA+B;AAC/B,2CAA6B;AAG7B;;;;;;;GAOG;AACU,QAAA,gCAAgC,GAAG,CAAC,CAAC;AAElD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,YAAoB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;QAErD,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yEAAyE;QACzE,IAAI,OAAO,QAAQ,CAAC,sBAAsB,KAAK,QAAQ,EAAE,CAAC;YACxD,QAAQ,CAAC,sBAAsB,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,YAAoB,EAAE,QAAsB;IAC7E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,oEAAoE;IACpE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAIzF;AAaD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6BxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAsBhC"}
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAIzF;AAaD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuCxF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAsBhC"}
package/dist/profiles.js CHANGED
@@ -139,6 +139,13 @@ async function resolveProfileSource(value) {
139
139
  }
140
140
  return { kind: 'local', location: localPath };
141
141
  }
142
+ // Anything else reaches `git clone` as an argument, so refuse values git
143
+ // would read as an option even though the clone passes `--` as well.
144
+ if (value.startsWith('-')) {
145
+ throw new types_1.ProfileError(`Profile source must not start with "-": '${value}' is not an existing directory and ` +
146
+ `would be handed to git as an option. Use a package folder path, a <user>/<repo> ` +
147
+ `GitHub shorthand, or a git URL.`);
148
+ }
142
149
  if (GITHUB_SHORTHAND_PATTERN.test(value)) {
143
150
  return { kind: 'git', location: `https://github.com/${value}.git` };
144
151
  }
@@ -197,8 +204,9 @@ async function cloneRemoteProfile(url, tempDirs) {
197
204
  const cloneDir = await makeTempDir();
198
205
  tempDirs.push(cloneDir);
199
206
  try {
200
- // git clones into an existing empty directory without complaint.
201
- await execFileAsync('git', ['clone', '--depth', '1', url, cloneDir]);
207
+ // git clones into an existing empty directory without complaint. `--`
208
+ // ends option parsing so the source can never be read as a git option.
209
+ await execFileAsync('git', ['clone', '--depth', '1', '--', url, cloneDir]);
202
210
  }
203
211
  catch (error) {
204
212
  if (isEnoentError(error)) {
@@ -279,8 +287,22 @@ function isEnoentError(error) {
279
287
  */
280
288
  async function readManifest(profileDir) {
281
289
  const manifestPath = path.join(profileDir, 'profile.yaml');
282
- if (!(await fs.pathExists(manifestPath))) {
283
- throw new types_1.ProfileError(`Profile manifest not found: expected profile.yaml at the package root (${profileDir})`);
290
+ let manifestStat;
291
+ try {
292
+ manifestStat = await fs.lstat(manifestPath);
293
+ }
294
+ catch (error) {
295
+ if (isEnoentError(error)) {
296
+ throw new types_1.ProfileError(`Profile manifest not found: expected profile.yaml at the package root (${profileDir})`);
297
+ }
298
+ throw new types_1.ProfileError(`Failed to read profile.yaml in ${profileDir}: ${formatCause(error)}`, error);
299
+ }
300
+ if (manifestStat.isSymbolicLink()) {
301
+ throw new types_1.ProfileError(`Profile package entry profile.yaml is a symbolic link (${manifestPath}). ` +
302
+ `Replace it with a regular file; a package must carry its own manifest.`);
303
+ }
304
+ if (!manifestStat.isFile()) {
305
+ throw new types_1.ProfileError(`Profile package entry profile.yaml must be a regular file (${manifestPath})`);
284
306
  }
285
307
  let rawContent;
286
308
  try {
@@ -443,16 +465,27 @@ function validateRequirementList(data, field) {
443
465
  */
444
466
  async function validateConfigSurface(profileDir) {
445
467
  const configDir = path.join(profileDir, 'config');
446
- if (!(await fs.pathExists(configDir))) {
447
- throw new types_1.ProfileError(`Profile package is missing its config/ directory: expected ${configDir}`);
468
+ let configStat;
469
+ try {
470
+ configStat = await fs.lstat(configDir);
471
+ }
472
+ catch (error) {
473
+ if (isEnoentError(error)) {
474
+ throw new types_1.ProfileError(`Profile package is missing its config/ directory: expected ${configDir}`);
475
+ }
476
+ throw new types_1.ProfileError(`Failed to inspect profile package config/ at ${configDir}: ${formatCause(error)}`, error);
477
+ }
478
+ if (configStat.isSymbolicLink()) {
479
+ throw new types_1.ProfileError(`Profile package entry config/ is a symbolic link (${configDir}). Replace it with a ` +
480
+ `regular directory; a package must carry its own copies of every file.`);
448
481
  }
449
- const configStat = await fs.stat(configDir);
450
482
  if (!configStat.isDirectory()) {
451
483
  throw new types_1.ProfileError(`Profile package config/ must be a directory: ${configDir}`);
452
484
  }
453
485
  const rootEntries = await readEntries(configDir);
454
486
  for (const entry of rootEntries) {
455
487
  rejectUnsafeSegment(entry.name, entry.name);
488
+ rejectSymbolicLink(entry, entry.name);
456
489
  if (entry.isFile()) {
457
490
  if (!ALLOWED_CONFIG_ROOT_FILES.includes(entry.name)) {
458
491
  throw new types_1.ProfileError(`Profile package contains a file outside the allowed config surface: ` +
@@ -484,6 +517,7 @@ async function validateMarkdownOnlyDir(dirPath, relDir) {
484
517
  for (const entry of entries) {
485
518
  const relPath = `${relDir}/${entry.name}`;
486
519
  rejectUnsafeSegment(entry.name, relPath);
520
+ rejectSymbolicLink(entry, relPath);
487
521
  if (entry.isDirectory()) {
488
522
  throw new types_1.ProfileError(`Profile package contains a nested directory outside the allowed config surface: ` +
489
523
  `config/${relPath}/ (config/${relDir}/ may only contain .md files)`);
@@ -507,6 +541,17 @@ async function readEntries(dirPath) {
507
541
  throw new types_1.ProfileError(`Failed to read profile package directory ${dirPath}: ${formatCause(error)}`, error);
508
542
  }
509
543
  }
544
+ /**
545
+ * Reject a symbolic link anywhere in the config surface, naming the entry
546
+ * @param entry - Directory entry read with file types
547
+ * @param relPath - Path relative to `config/` for error reporting
548
+ */
549
+ function rejectSymbolicLink(entry, relPath) {
550
+ if (entry.isSymbolicLink()) {
551
+ throw new types_1.ProfileError(`Profile package entry config/${relPath} is a symbolic link. Replace it with a regular ` +
552
+ `file or directory; a package must carry its own copies of every file.`);
553
+ }
554
+ }
510
555
  /**
511
556
  * Reject dotfile, traversal, and separator-bearing entry names
512
557
  * @param segment - Single directory entry name