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
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Filesystem containment for reads and writes under a selected workspace root.
3
+ *
4
+ * Shared by serve, the CLI domain, and the skill bundles. Every entry point
5
+ * takes the workspace root plus a path and refuses to touch anything that is
6
+ * not a plain file (or directory) reached through plain directories below the
7
+ * canonical root. Links above the root (a symlinked home directory, a
8
+ * canonicalized temp dir) are fine: only the components below it are walked.
9
+ *
10
+ * What this module guarantees and what it does not:
11
+ *
12
+ * - The component walk is `lstat`-based and therefore racy on its own: a link
13
+ * planted between the walk and the operation is not seen by the walk. Reads
14
+ * close that window with `O_NOFOLLOW` on the final open plus an `fstat` of
15
+ * the descriptor; writes close it with `O_EXCL` on the temp file (which never
16
+ * follows a link) and a re-check of the target immediately before `rename`.
17
+ * A pre-write `realpath` alone is never treated as evidence of containment.
18
+ * - Hard links are not detected and are out of scope.
19
+ * - On Windows `O_NOFOLLOW` is undefined, so the read path relies on the
20
+ * `lstat` walk plus a `dev`/`ino` comparison between the `lstat` result and
21
+ * the `fstat` of the opened descriptor. That narrows the race but does not
22
+ * eliminate it.
23
+ */
24
+ import * as fs from 'fs';
25
+ /** Why a path was refused. Callers map these to their own result unions. */
26
+ export type SafeFsErrorCode = 'invalid-path' | 'outside-root' | 'symlink' | 'not-found' | 'not-a-directory' | 'not-a-file' | 'too-large' | 'fs-error';
27
+ /** The failure shape every export returns; never thrown. */
28
+ export interface SafeFsError {
29
+ error: SafeFsErrorCode;
30
+ message: string;
31
+ }
32
+ export interface ResolveContainedOptions {
33
+ /** Accept a leaf that does not exist yet (its parents must still exist). */
34
+ allowMissingLeaf?: boolean;
35
+ /** Required kind of an existing leaf. Defaults to `file`. */
36
+ expect?: 'file' | 'directory';
37
+ }
38
+ export interface ContainedPath {
39
+ /** Canonical absolute path: the canonical root joined with the checked components. */
40
+ path: string;
41
+ /** Path relative to the canonical root, with platform separators. */
42
+ relative: string;
43
+ /** `false` only when `allowMissingLeaf` was set and the leaf is absent. */
44
+ exists: boolean;
45
+ /** `lstat` of the leaf when it exists. */
46
+ stats?: fs.Stats;
47
+ }
48
+ export interface ReadContainedOptions {
49
+ /** Maximum bytes accepted. Defaults to {@link DEFAULT_MAX_READ_BYTES}. */
50
+ maxBytes?: number;
51
+ }
52
+ export interface WriteFileAtomicOptions {
53
+ /** Refuse to create the file; it must already exist as a regular file. */
54
+ mustExist?: boolean;
55
+ /** Mode for the written file. Defaults to the existing file's mode, else 0o600. */
56
+ mode?: number;
57
+ }
58
+ export declare const DEFAULT_MAX_READ_BYTES: number;
59
+ /**
60
+ * Checks every component of `input` below `root` with `lstat` and returns the
61
+ * canonical path, or a typed error. Rejects any symbolic link below the root,
62
+ * any non-directory intermediate, and any existing leaf that is not of the
63
+ * expected kind (FIFOs, sockets, devices, and directories for `file`).
64
+ */
65
+ export declare const resolveContained: (root: string, input: string, options?: ResolveContainedOptions) => ContainedPath | SafeFsError;
66
+ /**
67
+ * Reads a contained regular file as UTF-8 with a size bound. Opens with
68
+ * `O_NOFOLLOW` where available and `O_NONBLOCK` so a FIFO cannot block the
69
+ * process, then requires the descriptor to be a regular file.
70
+ */
71
+ export declare const readContainedFile: (root: string, input: string, options?: ReadContainedOptions) => {
72
+ path: string;
73
+ content: string;
74
+ } | SafeFsError;
75
+ /**
76
+ * Writes `content` to a contained path atomically: an exclusive, randomly
77
+ * named temp file in the same directory is written, `fsync`ed, and renamed
78
+ * over the target. The temp file is removed on every failure path. With
79
+ * `mustExist` the target has to be a regular file already; otherwise a
80
+ * missing leaf is created with `mode` (default 0o600).
81
+ */
82
+ export declare const writeFileAtomic: (root: string, input: string, content: string | Buffer, options?: WriteFileAtomicOptions) => Promise<{
83
+ path: string;
84
+ } | SafeFsError>;
85
+ /** Synchronous {@link writeFileAtomic}, with the same guarantees, for callers that cannot await. */
86
+ export declare const writeFileAtomicSync: (root: string, input: string, content: string | Buffer, options?: WriteFileAtomicOptions) => {
87
+ path: string;
88
+ } | SafeFsError;
89
+ //# sourceMappingURL=safe-fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-fs.d.ts","sourceRoot":"","sources":["../../../src/skill-scripts/shared/safe-fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAIzB,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,cAAc,GACd,SAAS,GACT,WAAW,GACX,iBAAiB,GACjB,YAAY,GACZ,WAAW,GACX,UAAU,CAAC;AAEf,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,sBAAsB,QAAkB,CAAC;AAiBtD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,UAAS,uBAA4B,KACpC,aAAa,GAAG,WAgElB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,UAAS,oBAAyB,KACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,WA6CtC,CAAC;AAgDF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,SAAS,MAAM,GAAG,MAAM,EACxB,UAAS,sBAA2B,KACnC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CA4BxC,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,SAAS,MAAM,GAAG,MAAM,EACxB,UAAS,sBAA2B,KACnC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAuCrB,CAAC"}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ /**
3
+ * Filesystem containment for reads and writes under a selected workspace root.
4
+ *
5
+ * Shared by serve, the CLI domain, and the skill bundles. Every entry point
6
+ * takes the workspace root plus a path and refuses to touch anything that is
7
+ * not a plain file (or directory) reached through plain directories below the
8
+ * canonical root. Links above the root (a symlinked home directory, a
9
+ * canonicalized temp dir) are fine: only the components below it are walked.
10
+ *
11
+ * What this module guarantees and what it does not:
12
+ *
13
+ * - The component walk is `lstat`-based and therefore racy on its own: a link
14
+ * planted between the walk and the operation is not seen by the walk. Reads
15
+ * close that window with `O_NOFOLLOW` on the final open plus an `fstat` of
16
+ * the descriptor; writes close it with `O_EXCL` on the temp file (which never
17
+ * follows a link) and a re-check of the target immediately before `rename`.
18
+ * A pre-write `realpath` alone is never treated as evidence of containment.
19
+ * - Hard links are not detected and are out of scope.
20
+ * - On Windows `O_NOFOLLOW` is undefined, so the read path relies on the
21
+ * `lstat` walk plus a `dev`/`ino` comparison between the `lstat` result and
22
+ * the `fstat` of the opened descriptor. That narrows the race but does not
23
+ * eliminate it.
24
+ */
25
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ var desc = Object.getOwnPropertyDescriptor(m, k);
28
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
29
+ desc = { enumerable: true, get: function() { return m[k]; } };
30
+ }
31
+ Object.defineProperty(o, k2, desc);
32
+ }) : (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ o[k2] = m[k];
35
+ }));
36
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
37
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
38
+ }) : function(o, v) {
39
+ o["default"] = v;
40
+ });
41
+ var __importStar = (this && this.__importStar) || (function () {
42
+ var ownKeys = function(o) {
43
+ ownKeys = Object.getOwnPropertyNames || function (o) {
44
+ var ar = [];
45
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
46
+ return ar;
47
+ };
48
+ return ownKeys(o);
49
+ };
50
+ return function (mod) {
51
+ if (mod && mod.__esModule) return mod;
52
+ var result = {};
53
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
54
+ __setModuleDefault(result, mod);
55
+ return result;
56
+ };
57
+ })();
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.writeFileAtomicSync = exports.writeFileAtomic = exports.readContainedFile = exports.resolveContained = exports.DEFAULT_MAX_READ_BYTES = void 0;
60
+ const fs = __importStar(require("fs"));
61
+ const path = __importStar(require("path"));
62
+ const crypto_1 = require("crypto");
63
+ exports.DEFAULT_MAX_READ_BYTES = 8 * 1024 * 1024;
64
+ const fail = (error, message) => ({ error, message });
65
+ const errno = (err) => typeof err === 'object' && err !== null && 'code' in err
66
+ ? String(err.code)
67
+ : undefined;
68
+ const canonicalRootOf = (root) => {
69
+ try {
70
+ return fs.realpathSync.native(path.resolve(root));
71
+ }
72
+ catch {
73
+ return fail('not-found', 'Workspace root does not exist.');
74
+ }
75
+ };
76
+ /**
77
+ * Checks every component of `input` below `root` with `lstat` and returns the
78
+ * canonical path, or a typed error. Rejects any symbolic link below the root,
79
+ * any non-directory intermediate, and any existing leaf that is not of the
80
+ * expected kind (FIFOs, sockets, devices, and directories for `file`).
81
+ */
82
+ const resolveContained = (root, input, options = {}) => {
83
+ if (typeof input !== 'string' || input.includes('\0')) {
84
+ return fail('invalid-path', 'Path is not valid.');
85
+ }
86
+ const givenRoot = path.resolve(root);
87
+ const canonicalRoot = canonicalRootOf(givenRoot);
88
+ if (typeof canonicalRoot !== 'string')
89
+ return canonicalRoot;
90
+ // Absolute inputs are usually spelled through the root as the caller knows
91
+ // it, which may be a non-canonical alias; re-base them on the given root
92
+ // before joining onto the canonical one.
93
+ const rel = path.isAbsolute(input) ? path.relative(givenRoot, input) : input;
94
+ const target = path.resolve(canonicalRoot, rel);
95
+ const relative = path.relative(canonicalRoot, target);
96
+ if (path.isAbsolute(relative) ||
97
+ relative === '..' ||
98
+ relative.startsWith(`..${path.sep}`) ||
99
+ relative.includes('\0')) {
100
+ return fail('outside-root', 'Path is outside the workspace root.');
101
+ }
102
+ const kind = options.expect ?? 'file';
103
+ const parts = relative === '' ? [] : relative.split(path.sep);
104
+ let current = canonicalRoot;
105
+ // Seeded with the root so an empty `parts` (the root itself) has leaf stats.
106
+ let stats;
107
+ try {
108
+ stats = fs.lstatSync(canonicalRoot);
109
+ }
110
+ catch {
111
+ return fail('fs-error', 'Could not inspect path.');
112
+ }
113
+ for (let i = 0; i < parts.length; i += 1) {
114
+ const isLeaf = i === parts.length - 1;
115
+ current = path.join(current, parts[i]);
116
+ try {
117
+ stats = fs.lstatSync(current);
118
+ }
119
+ catch (err) {
120
+ const code = errno(err);
121
+ if (code === 'ENOENT' || code === 'ENOTDIR') {
122
+ if (isLeaf && options.allowMissingLeaf) {
123
+ return { path: current, relative, exists: false };
124
+ }
125
+ return fail('not-found', 'Path does not exist.');
126
+ }
127
+ return fail('fs-error', 'Could not inspect path.');
128
+ }
129
+ if (stats.isSymbolicLink()) {
130
+ return fail('symlink', 'Symbolic links inside the workspace are not allowed.');
131
+ }
132
+ if (!isLeaf && !stats.isDirectory()) {
133
+ return fail('not-a-directory', 'A path component is not a directory.');
134
+ }
135
+ }
136
+ if (kind === 'directory' && !stats.isDirectory()) {
137
+ return fail('not-a-directory', 'Path is not a directory.');
138
+ }
139
+ if (kind === 'file' && !stats.isFile()) {
140
+ return fail('not-a-file', 'Path is not a regular file.');
141
+ }
142
+ return { path: current, relative, exists: true, stats };
143
+ };
144
+ exports.resolveContained = resolveContained;
145
+ /**
146
+ * Reads a contained regular file as UTF-8 with a size bound. Opens with
147
+ * `O_NOFOLLOW` where available and `O_NONBLOCK` so a FIFO cannot block the
148
+ * process, then requires the descriptor to be a regular file.
149
+ */
150
+ const readContainedFile = (root, input, options = {}) => {
151
+ const resolved = (0, exports.resolveContained)(root, input);
152
+ if ('error' in resolved)
153
+ return resolved;
154
+ const maxBytes = options.maxBytes ?? exports.DEFAULT_MAX_READ_BYTES;
155
+ const { O_RDONLY, O_NOFOLLOW, O_NONBLOCK } = fs.constants;
156
+ const flags = (O_RDONLY ?? 0) | (O_NOFOLLOW ?? 0) | (O_NONBLOCK ?? 0);
157
+ let fd;
158
+ try {
159
+ fd = fs.openSync(resolved.path, flags);
160
+ }
161
+ catch (err) {
162
+ const code = errno(err);
163
+ if (code === 'ELOOP')
164
+ return fail('symlink', 'Symbolic links inside the workspace are not allowed.');
165
+ if (code === 'ENOENT')
166
+ return fail('not-found', 'Path does not exist.');
167
+ return fail('fs-error', 'Could not open file.');
168
+ }
169
+ try {
170
+ const opened = fs.fstatSync(fd);
171
+ if (!opened.isFile())
172
+ return fail('not-a-file', 'Path is not a regular file.');
173
+ if (O_NOFOLLOW === undefined && resolved.stats) {
174
+ // Windows: no O_NOFOLLOW, so require the opened file to be the one lstat saw.
175
+ if (opened.dev !== resolved.stats.dev || opened.ino !== resolved.stats.ino) {
176
+ return fail('symlink', 'Path changed between inspection and open.');
177
+ }
178
+ }
179
+ if (opened.size > maxBytes)
180
+ return fail('too-large', 'File exceeds the size limit.');
181
+ const chunks = [];
182
+ let total = 0;
183
+ const chunk = Buffer.alloc(64 * 1024);
184
+ for (;;) {
185
+ const read = fs.readSync(fd, chunk, 0, chunk.length, null);
186
+ if (read === 0)
187
+ break;
188
+ total += read;
189
+ if (total > maxBytes)
190
+ return fail('too-large', 'File exceeds the size limit.');
191
+ chunks.push(Buffer.from(chunk.subarray(0, read)));
192
+ }
193
+ return { path: resolved.path, content: Buffer.concat(chunks, total).toString('utf8') };
194
+ }
195
+ catch {
196
+ return fail('fs-error', 'Could not read file.');
197
+ }
198
+ finally {
199
+ fs.closeSync(fd);
200
+ }
201
+ };
202
+ exports.readContainedFile = readContainedFile;
203
+ /** Containment check plus the target mode and the random temp path, shared by both write variants. */
204
+ const planAtomicWrite = (root, input, options) => {
205
+ const mustExist = options.mustExist === true;
206
+ const resolved = (0, exports.resolveContained)(root, input, { allowMissingLeaf: !mustExist });
207
+ if ('error' in resolved)
208
+ return resolved;
209
+ if (mustExist && !resolved.exists)
210
+ return fail('not-found', 'Path does not exist.');
211
+ const target = resolved.path;
212
+ const mode = options.mode ?? (resolved.exists && resolved.stats ? resolved.stats.mode & 0o777 : 0o600);
213
+ const temp = path.join(path.dirname(target), `.${path.basename(target)}.${(0, crypto_1.randomBytes)(8).toString('hex')}.tmp`);
214
+ return { target, temp, mode, mustExist };
215
+ };
216
+ /**
217
+ * Re-check the target right before the rename; see the module comment for
218
+ * what this does and does not close.
219
+ */
220
+ const recheckTarget = (target, mustExist) => {
221
+ try {
222
+ const again = fs.lstatSync(target);
223
+ if (again.isSymbolicLink()) {
224
+ return fail('symlink', 'Symbolic links inside the workspace are not allowed.');
225
+ }
226
+ if (!again.isFile())
227
+ return fail('not-a-file', 'Path is not a regular file.');
228
+ }
229
+ catch (err) {
230
+ if (errno(err) !== 'ENOENT')
231
+ return fail('fs-error', 'Could not inspect path.');
232
+ if (mustExist)
233
+ return fail('not-found', 'Path does not exist.');
234
+ }
235
+ return undefined;
236
+ };
237
+ /**
238
+ * Writes `content` to a contained path atomically: an exclusive, randomly
239
+ * named temp file in the same directory is written, `fsync`ed, and renamed
240
+ * over the target. The temp file is removed on every failure path. With
241
+ * `mustExist` the target has to be a regular file already; otherwise a
242
+ * missing leaf is created with `mode` (default 0o600).
243
+ */
244
+ const writeFileAtomic = async (root, input, content, options = {}) => {
245
+ const plan = planAtomicWrite(root, input, options);
246
+ if ('error' in plan)
247
+ return plan;
248
+ const { target, temp, mode, mustExist } = plan;
249
+ let handle;
250
+ let renamed = false;
251
+ try {
252
+ // 'wx' is O_CREAT|O_EXCL: it fails rather than follow a link at `temp`.
253
+ handle = await fs.promises.open(temp, 'wx', 0o600);
254
+ await handle.writeFile(content);
255
+ await handle.sync();
256
+ if (mode !== 0o600)
257
+ await handle.chmod(mode);
258
+ await handle.close();
259
+ handle = undefined;
260
+ const refused = recheckTarget(target, mustExist);
261
+ if (refused)
262
+ return refused;
263
+ await fs.promises.rename(temp, target);
264
+ renamed = true;
265
+ return { path: target };
266
+ }
267
+ catch {
268
+ return fail('fs-error', 'Could not write file.');
269
+ }
270
+ finally {
271
+ if (handle)
272
+ await handle.close().catch(() => undefined);
273
+ if (!renamed)
274
+ await fs.promises.unlink(temp).catch(() => undefined);
275
+ }
276
+ };
277
+ exports.writeFileAtomic = writeFileAtomic;
278
+ /** Synchronous {@link writeFileAtomic}, with the same guarantees, for callers that cannot await. */
279
+ const writeFileAtomicSync = (root, input, content, options = {}) => {
280
+ const plan = planAtomicWrite(root, input, options);
281
+ if ('error' in plan)
282
+ return plan;
283
+ const { target, temp, mode, mustExist } = plan;
284
+ let fd;
285
+ let renamed = false;
286
+ try {
287
+ fd = fs.openSync(temp, 'wx', 0o600);
288
+ fs.writeFileSync(fd, content);
289
+ fs.fsyncSync(fd);
290
+ if (mode !== 0o600)
291
+ fs.fchmodSync(fd, mode);
292
+ fs.closeSync(fd);
293
+ fd = undefined;
294
+ const refused = recheckTarget(target, mustExist);
295
+ if (refused)
296
+ return refused;
297
+ fs.renameSync(temp, target);
298
+ renamed = true;
299
+ return { path: target };
300
+ }
301
+ catch {
302
+ return fail('fs-error', 'Could not write file.');
303
+ }
304
+ finally {
305
+ if (fd !== undefined) {
306
+ try {
307
+ fs.closeSync(fd);
308
+ }
309
+ catch {
310
+ // already closed or never opened
311
+ }
312
+ }
313
+ if (!renamed) {
314
+ try {
315
+ fs.unlinkSync(temp);
316
+ }
317
+ catch {
318
+ // nothing to clean up
319
+ }
320
+ }
321
+ }
322
+ };
323
+ exports.writeFileAtomicSync = writeFileAtomicSync;
324
+ //# sourceMappingURL=safe-fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-fs.js","sourceRoot":"","sources":["../../../src/skill-scripts/shared/safe-fs.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -332,6 +332,14 @@ export type ConflictResolution = 'keep' | 'overwrite' | 'keep-all' | 'overwrite-
332
332
  * Thrown before any workspace mutation so a failed import never leaves a
333
333
  * partially applied profile behind.
334
334
  */
335
+ /**
336
+ * A filesystem operation was refused because a path is not what the CLI
337
+ * expects on disk: a symbolic link where a regular file or directory must be,
338
+ * or a write that would leave its containment root.
339
+ */
340
+ export declare class FileSystemError extends Error {
341
+ constructor(message: string);
342
+ }
335
343
  export declare class ProfileError extends Error {
336
344
  /**
337
345
  * Underlying error that triggered this failure, when one exists
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * used throughout the Strikethroo CLI application
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ProfileError = exports.SUPPORTED_HARNESSES = void 0;
9
+ exports.ProfileError = exports.FileSystemError = exports.SUPPORTED_HARNESSES = void 0;
10
10
  /**
11
11
  * Supported AI harnesses for task management
12
12
  */
@@ -24,6 +24,18 @@ exports.SUPPORTED_HARNESSES = [
24
24
  * Thrown before any workspace mutation so a failed import never leaves a
25
25
  * partially applied profile behind.
26
26
  */
27
+ /**
28
+ * A filesystem operation was refused because a path is not what the CLI
29
+ * expects on disk: a symbolic link where a regular file or directory must be,
30
+ * or a write that would leave its containment root.
31
+ */
32
+ class FileSystemError extends Error {
33
+ constructor(message) {
34
+ super(message);
35
+ this.name = 'FileSystemError';
36
+ }
37
+ }
38
+ exports.FileSystemError = FileSystemError;
27
39
  class ProfileError extends Error {
28
40
  constructor(message, cause) {
29
41
  super(message);
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;CACF,CAAC;AAgVX;;;;;GAKG;AACH,MAAa,YAAa,SAAQ,KAAK;IAOrC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAZD,oCAYC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,UAAU;CACF,CAAC;AAgVX;;;;;GAKG;AACH;;;;GAIG;AACH,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,YAAa,SAAQ,KAAK;IAOrC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAZD,oCAYC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,2BAA2B,qJAQ9B,CAAC;AAEX,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,sBAAsB,sCAAuC,CAAC;AAE3E;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAUD,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCjG;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAyH1E"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,aAAa,EAAgB,aAAa,EAAE,MAAM,SAAS,CAAC;AAErE,oEAAoE;AACpE,eAAO,MAAM,2BAA2B,qJAQ9B,CAAC;AAEX,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,sBAAsB,sCAAuC,CAAC;AAE3E;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAUD,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCjG;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAsI1E"}
package/dist/update.js CHANGED
@@ -114,7 +114,21 @@ async function update(options) {
114
114
  const baseDir = options.destinationDirectory || '.';
115
115
  const resolvedBaseDir = resolvePath(baseDir);
116
116
  const metadataPath = resolvePath(baseDir, '.ai/strikethroo/.init-metadata.json');
117
- const existingMetadata = await (0, metadata_1.loadMetadata)(metadataPath);
117
+ let existingMetadata;
118
+ try {
119
+ existingMetadata = await (0, metadata_1.loadMetadata)(metadataPath);
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof Error ? error.message : 'Failed to read workspace metadata.';
123
+ console.error(chalk_1.default.red(`\n✗ Update failed: ${message}\n`));
124
+ return {
125
+ success: false,
126
+ workspaceSuccess: false,
127
+ skillsSuccess: false,
128
+ message,
129
+ error: error instanceof Error ? error : new Error(String(error)),
130
+ };
131
+ }
118
132
  if (!existingMetadata) {
119
133
  const message = 'Workspace is not initialized. Run `strikethroo init --harnesses <harnesses>` first.';
120
134
  console.error(chalk_1.default.red(`\n✗ Update failed: ${message}\n`));
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
@@ -18,20 +18,12 @@
18
18
  * `collectTaskReadinessIssues` — which is why naming the participating task ids
19
19
  * in the message is the point of the check, not a nicety.
20
20
  *
21
- * No blueprint parser is defined here. The repository already carries
22
- * `parseBlueprintPhases` twice (`src/serve/derivation.ts` and
23
- * `src/skill-scripts/shared/blueprint-parse.ts`), quietly diverging; a third
24
- * copy is the specific failure mode this file must not add. The serve copy is
25
- * reused because it is inside the CLI's `tsc` domain and already returns the
26
- * `Phase` shape. Deduplicating the existing two is out of scope.
27
- *
28
- * Known limitation, deliberately not fixed here: that parser's `TASK_REF_RE`
29
- * matches the first `Task NN` in *any* bulleted line, so ordinary prose in a
30
- * blueprint bullet is indistinguishable from a phase assignment and can yield a
31
- * phantom reference. Hardening it belongs to whoever deduplicates the two
32
- * parsers. The `blueprint/reference-unresolved` message therefore spells the
33
- * false-positive case out, so a human meets it as a known limitation instead of
34
- * a mystery.
21
+ * The blueprint parser is `parseBlueprintPhases` in
22
+ * `src/skill-scripts/shared/blueprint-parse.ts`, the one implementation the
23
+ * viewer and the readiness check also use. Its `TASK_REF_RE` matches the first
24
+ * `Task NN` in any bulleted line, so prose in a blueprint bullet can yield a
25
+ * phantom reference; the `blueprint/reference-unresolved` message spells that
26
+ * case out.
35
27
  *
36
28
  * `findStrikethrooRoot` is never imported: it terminates the process on a
37
29
  * schema-version mismatch. The root arrives already resolved.
@@ -1 +1 @@
1
- {"version":3,"file":"graph-checks.d.ts","sourceRoot":"","sources":["../../src/validation/graph-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAmUlC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAQnD"}
1
+ {"version":3,"file":"graph-checks.d.ts","sourceRoot":"","sources":["../../src/validation/graph-checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAQH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAmUlC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAQnD"}
@@ -19,20 +19,12 @@
19
19
  * `collectTaskReadinessIssues` — which is why naming the participating task ids
20
20
  * in the message is the point of the check, not a nicety.
21
21
  *
22
- * No blueprint parser is defined here. The repository already carries
23
- * `parseBlueprintPhases` twice (`src/serve/derivation.ts` and
24
- * `src/skill-scripts/shared/blueprint-parse.ts`), quietly diverging; a third
25
- * copy is the specific failure mode this file must not add. The serve copy is
26
- * reused because it is inside the CLI's `tsc` domain and already returns the
27
- * `Phase` shape. Deduplicating the existing two is out of scope.
28
- *
29
- * Known limitation, deliberately not fixed here: that parser's `TASK_REF_RE`
30
- * matches the first `Task NN` in *any* bulleted line, so ordinary prose in a
31
- * blueprint bullet is indistinguishable from a phase assignment and can yield a
32
- * phantom reference. Hardening it belongs to whoever deduplicates the two
33
- * parsers. The `blueprint/reference-unresolved` message therefore spells the
34
- * false-positive case out, so a human meets it as a known limitation instead of
35
- * a mystery.
22
+ * The blueprint parser is `parseBlueprintPhases` in
23
+ * `src/skill-scripts/shared/blueprint-parse.ts`, the one implementation the
24
+ * viewer and the readiness check also use. Its `TASK_REF_RE` matches the first
25
+ * `Task NN` in any bulleted line, so prose in a blueprint bullet can yield a
26
+ * phantom reference; the `blueprint/reference-unresolved` message spells that
27
+ * case out.
36
28
  *
37
29
  * `findStrikethrooRoot` is never imported: it terminates the process on a
38
30
  * schema-version mismatch. The root arrives already resolved.
@@ -76,6 +68,7 @@ const fs = __importStar(require("fs"));
76
68
  const path = __importStar(require("path"));
77
69
  const markdown_1 = require("../serve/markdown");
78
70
  const derivation_1 = require("../serve/derivation");
71
+ const blueprint_parse_1 = require("../skill-scripts/shared/blueprint-parse");
79
72
  const plan_scan_1 = require("../skill-scripts/shared/plan-scan");
80
73
  /** Leading `NN--` numeric prefix of a task filename — the id notion `findTaskFile` uses. */
81
74
  const FILENAME_PREFIX_RE = /^(\d+)--/;
@@ -269,7 +262,7 @@ const dependencyFindings = (plan) => {
269
262
  };
270
263
  /** Blueprint <-> task consistency, in both directions, for one plan. */
271
264
  const blueprintFindings = (plan) => {
272
- const phases = (0, derivation_1.parseBlueprintPhases)(plan.body);
265
+ const phases = (0, blueprint_parse_1.parseBlueprintPhases)(plan.body);
273
266
  // No blueprint section (or one with no phase headings) is a legitimate state
274
267
  // for a drafted plan, not a defect. Nothing to reconcile against.
275
268
  if (!phases || phases.length === 0)