unspaghettit 0.4.0 → 0.5.0

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 (934) hide show
  1. package/README.md +55 -424
  2. package/build/client/_app/immutable/assets/0.BsujoiMC.css +1 -0
  3. package/build/client/_app/immutable/assets/0.BsujoiMC.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.BsujoiMC.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/ProjectionViewer.CAJs9mSm.css +1 -0
  6. package/build/client/_app/immutable/assets/ProjectionViewer.CAJs9mSm.css.br +0 -0
  7. package/build/client/_app/immutable/assets/ProjectionViewer.CAJs9mSm.css.gz +0 -0
  8. package/build/client/_app/immutable/chunks/2CIJV9nc.js +1 -0
  9. package/build/client/_app/immutable/chunks/2CIJV9nc.js.br +3 -0
  10. package/build/client/_app/immutable/chunks/2CIJV9nc.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/2hLhZJjD2.js +1 -0
  12. package/build/client/_app/immutable/chunks/2hLhZJjD2.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/2hLhZJjD2.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/3UVfdb662.js +2 -0
  15. package/build/client/_app/immutable/chunks/3UVfdb662.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/3UVfdb662.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/B1n0bVhh2.js +1 -0
  18. package/build/client/_app/immutable/chunks/B1n0bVhh2.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/B1n0bVhh2.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/B3p5Prmp.js +1 -0
  21. package/build/client/_app/immutable/chunks/B3p5Prmp.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/B3p5Prmp.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/B4cX2Gb42.js +5 -0
  24. package/build/client/_app/immutable/chunks/B4cX2Gb42.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/B4cX2Gb42.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/B6MJfyJI.js +1 -0
  27. package/build/client/_app/immutable/chunks/B6MJfyJI.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/B6MJfyJI.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/B7Ld9uRE2.js +1 -0
  30. package/build/client/_app/immutable/chunks/B7Ld9uRE2.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/B7Ld9uRE2.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/B8_QNwhN.js +1 -0
  33. package/build/client/_app/immutable/chunks/B8_QNwhN.js.br +1 -0
  34. package/build/client/_app/immutable/chunks/B8_QNwhN.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/B8gBHxth.js +1 -0
  36. package/build/client/_app/immutable/chunks/B8gBHxth.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/B8gBHxth.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BDEjG0-V.js +1 -0
  39. package/build/client/_app/immutable/chunks/BDEjG0-V.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BDEjG0-V.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BDf3hVDY.js +7 -0
  42. package/build/client/_app/immutable/chunks/BDf3hVDY.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BDf3hVDY.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/BEZv2jK9.js +1 -0
  45. package/build/client/_app/immutable/chunks/BEZv2jK9.js.br +2 -0
  46. package/build/client/_app/immutable/chunks/BEZv2jK9.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BJYt9DEi.js +1 -0
  48. package/build/client/_app/immutable/chunks/BJYt9DEi.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BJYt9DEi.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BJZ3XYC12.js +1 -0
  51. package/build/client/_app/immutable/chunks/BJZ3XYC12.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BJZ3XYC12.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BK5md5Zs.js +89 -0
  54. package/build/client/_app/immutable/chunks/BK5md5Zs.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BK5md5Zs.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BNO8PXpM.js +1 -0
  57. package/build/client/_app/immutable/chunks/BNO8PXpM.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BNO8PXpM.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/BNtFSWSC.js +40 -0
  60. package/build/client/_app/immutable/chunks/BNtFSWSC.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/BNtFSWSC.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/BODMD6rJ.js +1 -0
  63. package/build/client/_app/immutable/chunks/BODMD6rJ.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/BODMD6rJ.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/BPLFAo0p2.js +1 -0
  66. package/build/client/_app/immutable/chunks/BPLFAo0p2.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/BPLFAo0p2.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/BQXcKXmZ2.js +41 -0
  69. package/build/client/_app/immutable/chunks/BQXcKXmZ2.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/BQXcKXmZ2.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/BSLn6m4D2.js +1 -0
  72. package/build/client/_app/immutable/chunks/BSLn6m4D2.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/BSLn6m4D2.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/BWPyau1x.js +1 -0
  75. package/build/client/_app/immutable/chunks/BWPyau1x.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/BWPyau1x.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/BWtptBB32.js +1 -0
  78. package/build/client/_app/immutable/chunks/BWtptBB32.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/BWtptBB32.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/BYVgaVQ1.js +1 -0
  81. package/build/client/_app/immutable/chunks/BYVgaVQ1.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/BYVgaVQ1.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/Basumi2t2.js +1 -0
  84. package/build/client/_app/immutable/chunks/Basumi2t2.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/Basumi2t2.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/BfCxGFh9.js +1 -0
  87. package/build/client/_app/immutable/chunks/BfCxGFh9.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/BfCxGFh9.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/BifhSqXX.js +1 -0
  90. package/build/client/_app/immutable/chunks/BifhSqXX.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/BifhSqXX.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/BjKsrp6D.js +1 -0
  93. package/build/client/_app/immutable/chunks/BjKsrp6D.js.br +6 -0
  94. package/build/client/_app/immutable/chunks/BjKsrp6D.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/BnXQbBnK.js +85 -0
  96. package/build/client/_app/immutable/chunks/BnXQbBnK.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/BnXQbBnK.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/BzsuqpLS2.js +8 -0
  99. package/build/client/_app/immutable/chunks/BzsuqpLS2.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/BzsuqpLS2.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/C0A-HG6d.js +1 -0
  102. package/build/client/_app/immutable/chunks/C0A-HG6d.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/C0A-HG6d.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/C0QpZqq7.js +1 -0
  105. package/build/client/_app/immutable/chunks/C0QpZqq7.js.br +3 -0
  106. package/build/client/_app/immutable/chunks/C0QpZqq7.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/C397Xuny.js +292 -0
  108. package/build/client/_app/immutable/chunks/C397Xuny.js.br +0 -0
  109. package/build/client/_app/immutable/chunks/C397Xuny.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/C8Fc0cco.js +1 -0
  111. package/build/client/_app/immutable/chunks/C8Fc0cco.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/C8Fc0cco.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/C9DakJMD.js +1 -0
  114. package/build/client/_app/immutable/chunks/C9DakJMD.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/C9DakJMD.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/CBm5AXdl.js +34 -0
  117. package/build/client/_app/immutable/chunks/CBm5AXdl.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/CBm5AXdl.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/CE2JlG_l.js +1 -0
  120. package/build/client/_app/immutable/chunks/CE2JlG_l.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/CE2JlG_l.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/CE4N3DsM.js +36 -0
  123. package/build/client/_app/immutable/chunks/CE4N3DsM.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/CE4N3DsM.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/CFX_rB4g2.js +3 -0
  126. package/build/client/_app/immutable/chunks/CFX_rB4g2.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/CFX_rB4g2.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/CGhzzHe4.js +1 -0
  129. package/build/client/_app/immutable/chunks/CGhzzHe4.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/CGhzzHe4.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/CGkvQl0v2.js +30 -0
  132. package/build/client/_app/immutable/chunks/CGkvQl0v2.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/CGkvQl0v2.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/CHdTS7qa.js +15 -0
  135. package/build/client/_app/immutable/chunks/CHdTS7qa.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/CHdTS7qa.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/CM9ya9R5.js +231 -0
  138. package/build/client/_app/immutable/chunks/CM9ya9R5.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/CM9ya9R5.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/CN4TM9z5.js +6 -0
  141. package/build/client/_app/immutable/chunks/CN4TM9z5.js.br +4 -0
  142. package/build/client/_app/immutable/chunks/CN4TM9z5.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/CQcPxj-M.js +11 -0
  144. package/build/client/_app/immutable/chunks/CQcPxj-M.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/CQcPxj-M.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/CSKSodPl2.js +1 -0
  147. package/build/client/_app/immutable/chunks/CSKSodPl2.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/CSKSodPl2.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/CTRD2R1y.js +70 -0
  150. package/build/client/_app/immutable/chunks/CTRD2R1y.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/CTRD2R1y.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/CTgm3pse2.js +1 -0
  153. package/build/client/_app/immutable/chunks/CTgm3pse2.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/CTgm3pse2.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/CU9-_wmX2.js +62 -0
  156. package/build/client/_app/immutable/chunks/CU9-_wmX2.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/CU9-_wmX2.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/CULY9yDS.js +1 -0
  159. package/build/client/_app/immutable/chunks/CULY9yDS.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/CULY9yDS.js.gz +0 -0
  161. package/build/client/_app/immutable/chunks/CUpSevj82.js +1 -0
  162. package/build/client/_app/immutable/chunks/CUpSevj82.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/CUpSevj82.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/CUvgMu97.js +1 -0
  165. package/build/client/_app/immutable/chunks/CUvgMu97.js.br +0 -0
  166. package/build/client/_app/immutable/chunks/CUvgMu97.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/CWiCMZki.js +1 -0
  168. package/build/client/_app/immutable/chunks/CWiCMZki.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/CWiCMZki.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/CWw-STqh2.js +1 -0
  171. package/build/client/_app/immutable/chunks/CWw-STqh2.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/CWw-STqh2.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/CZI9lQ5y.js +1 -0
  174. package/build/client/_app/immutable/chunks/CZI9lQ5y.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/CZI9lQ5y.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/CZNb0x60.js +8 -0
  177. package/build/client/_app/immutable/chunks/CZNb0x60.js.br +5 -0
  178. package/build/client/_app/immutable/chunks/CZNb0x60.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/CZjhCdkx.js +120 -0
  180. package/build/client/_app/immutable/chunks/CZjhCdkx.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/CZjhCdkx.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/C_BfkqQj2.js +1 -0
  183. package/build/client/_app/immutable/chunks/C_BfkqQj2.js.br +3 -0
  184. package/build/client/_app/immutable/chunks/C_BfkqQj2.js.gz +0 -0
  185. package/build/client/_app/immutable/chunks/CaXAkaVH.js +2 -0
  186. package/build/client/_app/immutable/chunks/CaXAkaVH.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/CaXAkaVH.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/Ce0G0NEU2.js +132 -0
  189. package/build/client/_app/immutable/chunks/Ce0G0NEU2.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/Ce0G0NEU2.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/Cio7Lne-.js +1 -0
  192. package/build/client/_app/immutable/chunks/Cio7Lne-.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/Cio7Lne-.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/Ck7fLxFH2.js +1 -0
  195. package/build/client/_app/immutable/chunks/Ck7fLxFH2.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/Ck7fLxFH2.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/CkgG2vj12.js +1 -0
  198. package/build/client/_app/immutable/chunks/CkgG2vj12.js.br +0 -0
  199. package/build/client/_app/immutable/chunks/CkgG2vj12.js.gz +0 -0
  200. package/build/client/_app/immutable/chunks/CkwYPeQK.js +1 -0
  201. package/build/client/_app/immutable/chunks/CkwYPeQK.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/CkwYPeQK.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/CltURiZ0.js +1 -0
  204. package/build/client/_app/immutable/chunks/CltURiZ0.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/CltURiZ0.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/CpJxgCib.js +1 -0
  207. package/build/client/_app/immutable/chunks/CpJxgCib.js.br +0 -0
  208. package/build/client/_app/immutable/chunks/CpJxgCib.js.gz +0 -0
  209. package/build/client/_app/immutable/chunks/CqAJyebb.js +1 -0
  210. package/build/client/_app/immutable/chunks/CqAJyebb.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/CqAJyebb.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/CrBRkqIf.js +4 -0
  213. package/build/client/_app/immutable/chunks/CrBRkqIf.js.br +0 -0
  214. package/build/client/_app/immutable/chunks/CrBRkqIf.js.gz +0 -0
  215. package/build/client/_app/immutable/chunks/CrYxhB9g.js +1 -0
  216. package/build/client/_app/immutable/chunks/CrYxhB9g.js.br +0 -0
  217. package/build/client/_app/immutable/chunks/CrYxhB9g.js.gz +0 -0
  218. package/build/client/_app/immutable/chunks/CtpR9Zsd.js +96 -0
  219. package/build/client/_app/immutable/chunks/CtpR9Zsd.js.br +0 -0
  220. package/build/client/_app/immutable/chunks/CtpR9Zsd.js.gz +0 -0
  221. package/build/client/_app/immutable/chunks/CtsLiFqq.js +1 -0
  222. package/build/client/_app/immutable/chunks/CtsLiFqq.js.br +0 -0
  223. package/build/client/_app/immutable/chunks/CtsLiFqq.js.gz +0 -0
  224. package/build/client/_app/immutable/chunks/CuIMKdpZ.js +1 -0
  225. package/build/client/_app/immutable/chunks/CuIMKdpZ.js.br +1 -0
  226. package/build/client/_app/immutable/chunks/CuIMKdpZ.js.gz +0 -0
  227. package/build/client/_app/immutable/chunks/CuRJVwEq.js +1 -0
  228. package/build/client/_app/immutable/chunks/CuRJVwEq.js.br +0 -0
  229. package/build/client/_app/immutable/chunks/CuRJVwEq.js.gz +0 -0
  230. package/build/client/_app/immutable/chunks/CuxYynFY.js +1 -0
  231. package/build/client/_app/immutable/chunks/CuxYynFY.js.br +0 -0
  232. package/build/client/_app/immutable/chunks/CuxYynFY.js.gz +0 -0
  233. package/build/client/_app/immutable/chunks/CvzmTz19.js +1 -0
  234. package/build/client/_app/immutable/chunks/CvzmTz19.js.br +0 -0
  235. package/build/client/_app/immutable/chunks/CvzmTz19.js.gz +0 -0
  236. package/build/client/_app/immutable/chunks/Cwlxg_jI2.js +1 -0
  237. package/build/client/_app/immutable/chunks/Cwlxg_jI2.js.br +0 -0
  238. package/build/client/_app/immutable/chunks/Cwlxg_jI2.js.gz +0 -0
  239. package/build/client/_app/immutable/chunks/CytoxYDC.js +1 -0
  240. package/build/client/_app/immutable/chunks/CytoxYDC.js.br +0 -0
  241. package/build/client/_app/immutable/chunks/CytoxYDC.js.gz +0 -0
  242. package/build/client/_app/immutable/chunks/D-bzr3Rt.js +1 -0
  243. package/build/client/_app/immutable/chunks/D-bzr3Rt.js.br +0 -0
  244. package/build/client/_app/immutable/chunks/D-bzr3Rt.js.gz +0 -0
  245. package/build/client/_app/immutable/chunks/D6jRqBbL.js +1 -0
  246. package/build/client/_app/immutable/chunks/D6jRqBbL.js.br +0 -0
  247. package/build/client/_app/immutable/chunks/D6jRqBbL.js.gz +0 -0
  248. package/build/client/_app/immutable/chunks/D8TtvFq5.js +32 -0
  249. package/build/client/_app/immutable/chunks/D8TtvFq5.js.br +0 -0
  250. package/build/client/_app/immutable/chunks/D8TtvFq5.js.gz +0 -0
  251. package/build/client/_app/immutable/chunks/D9MPVnoE2.js +206 -0
  252. package/build/client/_app/immutable/chunks/D9MPVnoE2.js.br +0 -0
  253. package/build/client/_app/immutable/chunks/D9MPVnoE2.js.gz +0 -0
  254. package/build/client/_app/immutable/chunks/DBCpiSCv.js +84 -0
  255. package/build/client/_app/immutable/chunks/DBCpiSCv.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/DBCpiSCv.js.gz +0 -0
  257. package/build/client/_app/immutable/chunks/DMSYSDo82.js +10 -0
  258. package/build/client/_app/immutable/chunks/DMSYSDo82.js.br +0 -0
  259. package/build/client/_app/immutable/chunks/DMSYSDo82.js.gz +0 -0
  260. package/build/client/_app/immutable/chunks/DNzq6p3w2.js +161 -0
  261. package/build/client/_app/immutable/chunks/DNzq6p3w2.js.br +0 -0
  262. package/build/client/_app/immutable/chunks/DNzq6p3w2.js.gz +0 -0
  263. package/build/client/_app/immutable/chunks/DQWKNctN2.js +7 -0
  264. package/build/client/_app/immutable/chunks/DQWKNctN2.js.br +0 -0
  265. package/build/client/_app/immutable/chunks/DQWKNctN2.js.gz +0 -0
  266. package/build/client/_app/immutable/chunks/DQuHIABk2.js +4 -0
  267. package/build/client/_app/immutable/chunks/DQuHIABk2.js.br +0 -0
  268. package/build/client/_app/immutable/chunks/DQuHIABk2.js.gz +0 -0
  269. package/build/client/_app/immutable/chunks/DT5F1-d-.js +1 -0
  270. package/build/client/_app/immutable/chunks/DT5F1-d-.js.br +0 -0
  271. package/build/client/_app/immutable/chunks/DT5F1-d-.js.gz +0 -0
  272. package/build/client/_app/immutable/chunks/DVrhERYX2.js +1 -0
  273. package/build/client/_app/immutable/chunks/DVrhERYX2.js.br +0 -0
  274. package/build/client/_app/immutable/chunks/DVrhERYX2.js.gz +0 -0
  275. package/build/client/_app/immutable/chunks/DWAgljeH.js +1 -0
  276. package/build/client/_app/immutable/chunks/DWAgljeH.js.br +0 -0
  277. package/build/client/_app/immutable/chunks/DWAgljeH.js.gz +0 -0
  278. package/build/client/_app/immutable/chunks/DWVg3pyI.js +139 -0
  279. package/build/client/_app/immutable/chunks/DWVg3pyI.js.br +0 -0
  280. package/build/client/_app/immutable/chunks/DWVg3pyI.js.gz +0 -0
  281. package/build/client/_app/immutable/chunks/DWeRzxcG2.js +1 -0
  282. package/build/client/_app/immutable/chunks/DWeRzxcG2.js.br +0 -0
  283. package/build/client/_app/immutable/chunks/DWeRzxcG2.js.gz +0 -0
  284. package/build/client/_app/immutable/chunks/DcvkBs962.js +1 -0
  285. package/build/client/_app/immutable/chunks/DcvkBs962.js.br +0 -0
  286. package/build/client/_app/immutable/chunks/DcvkBs962.js.gz +0 -0
  287. package/build/client/_app/immutable/chunks/DdKDVl0G2.js +1 -0
  288. package/build/client/_app/immutable/chunks/DdKDVl0G2.js.br +0 -0
  289. package/build/client/_app/immutable/chunks/DdKDVl0G2.js.gz +0 -0
  290. package/build/client/_app/immutable/chunks/Dg8gJSFX.js +106 -0
  291. package/build/client/_app/immutable/chunks/Dg8gJSFX.js.br +0 -0
  292. package/build/client/_app/immutable/chunks/Dg8gJSFX.js.gz +0 -0
  293. package/build/client/_app/immutable/chunks/Diyr50UO2.js +10 -0
  294. package/build/client/_app/immutable/chunks/Diyr50UO2.js.br +0 -0
  295. package/build/client/_app/immutable/chunks/Diyr50UO2.js.gz +0 -0
  296. package/build/client/_app/immutable/chunks/DlHVqE8I2.js +1 -0
  297. package/build/client/_app/immutable/chunks/DlHVqE8I2.js.br +0 -0
  298. package/build/client/_app/immutable/chunks/DlHVqE8I2.js.gz +0 -0
  299. package/build/client/_app/immutable/chunks/Dm68_Exu2.js +24 -0
  300. package/build/client/_app/immutable/chunks/Dm68_Exu2.js.br +0 -0
  301. package/build/client/_app/immutable/chunks/Dm68_Exu2.js.gz +0 -0
  302. package/build/client/_app/immutable/chunks/Dmt7ISOs.js +162 -0
  303. package/build/client/_app/immutable/chunks/Dmt7ISOs.js.br +0 -0
  304. package/build/client/_app/immutable/chunks/Dmt7ISOs.js.gz +0 -0
  305. package/build/client/_app/immutable/chunks/Ds6AU9Ow.js +156 -0
  306. package/build/client/_app/immutable/chunks/Ds6AU9Ow.js.br +0 -0
  307. package/build/client/_app/immutable/chunks/Ds6AU9Ow.js.gz +0 -0
  308. package/build/client/_app/immutable/chunks/DsF7k-Jl.js +1 -0
  309. package/build/client/_app/immutable/chunks/DsF7k-Jl.js.br +0 -0
  310. package/build/client/_app/immutable/chunks/DsF7k-Jl.js.gz +0 -0
  311. package/build/client/_app/immutable/chunks/DubrsqOt2.js +24 -0
  312. package/build/client/_app/immutable/chunks/DubrsqOt2.js.br +0 -0
  313. package/build/client/_app/immutable/chunks/DubrsqOt2.js.gz +0 -0
  314. package/build/client/_app/immutable/chunks/DwBIslDg.js +1 -0
  315. package/build/client/_app/immutable/chunks/DwBIslDg.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/DwBIslDg.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/DyQuOJWp.js +2 -0
  318. package/build/client/_app/immutable/chunks/DyQuOJWp.js.br +0 -0
  319. package/build/client/_app/immutable/chunks/DyQuOJWp.js.gz +0 -0
  320. package/build/client/_app/immutable/chunks/GozcEFao.js +2 -0
  321. package/build/client/_app/immutable/chunks/GozcEFao.js.br +0 -0
  322. package/build/client/_app/immutable/chunks/GozcEFao.js.gz +0 -0
  323. package/build/client/_app/immutable/chunks/KythIMN8.js +1 -0
  324. package/build/client/_app/immutable/chunks/KythIMN8.js.br +0 -0
  325. package/build/client/_app/immutable/chunks/KythIMN8.js.gz +0 -0
  326. package/build/client/_app/immutable/chunks/LZcM6IZR.js +127 -0
  327. package/build/client/_app/immutable/chunks/LZcM6IZR.js.br +0 -0
  328. package/build/client/_app/immutable/chunks/LZcM6IZR.js.gz +0 -0
  329. package/build/client/_app/immutable/chunks/N3JnnB0k.js +1 -0
  330. package/build/client/_app/immutable/chunks/N3JnnB0k.js.br +0 -0
  331. package/build/client/_app/immutable/chunks/N3JnnB0k.js.gz +0 -0
  332. package/build/client/_app/immutable/chunks/N4f8L7cR2.js +1 -0
  333. package/build/client/_app/immutable/chunks/N4f8L7cR2.js.br +0 -0
  334. package/build/client/_app/immutable/chunks/N4f8L7cR2.js.gz +0 -0
  335. package/build/client/_app/immutable/chunks/SxsLGZon.js +78 -0
  336. package/build/client/_app/immutable/chunks/SxsLGZon.js.br +0 -0
  337. package/build/client/_app/immutable/chunks/SxsLGZon.js.gz +0 -0
  338. package/build/client/_app/immutable/chunks/VMh3BEza.js +1 -0
  339. package/build/client/_app/immutable/chunks/VMh3BEza.js.br +0 -0
  340. package/build/client/_app/immutable/chunks/VMh3BEza.js.gz +0 -0
  341. package/build/client/_app/immutable/chunks/VcOjGHJJ.js +88 -0
  342. package/build/client/_app/immutable/chunks/VcOjGHJJ.js.br +0 -0
  343. package/build/client/_app/immutable/chunks/VcOjGHJJ.js.gz +0 -0
  344. package/build/client/_app/immutable/chunks/VesUvqet.js +1 -0
  345. package/build/client/_app/immutable/chunks/VesUvqet.js.br +0 -0
  346. package/build/client/_app/immutable/chunks/VesUvqet.js.gz +0 -0
  347. package/build/client/_app/immutable/chunks/Vhh-h91d.js +257 -0
  348. package/build/client/_app/immutable/chunks/Vhh-h91d.js.br +0 -0
  349. package/build/client/_app/immutable/chunks/Vhh-h91d.js.gz +0 -0
  350. package/build/client/_app/immutable/chunks/W3EvcI_R2.js +62 -0
  351. package/build/client/_app/immutable/chunks/W3EvcI_R2.js.br +0 -0
  352. package/build/client/_app/immutable/chunks/W3EvcI_R2.js.gz +0 -0
  353. package/build/client/_app/immutable/chunks/ZUdhP7i92.js +2 -0
  354. package/build/client/_app/immutable/chunks/ZUdhP7i92.js.br +0 -0
  355. package/build/client/_app/immutable/chunks/ZUdhP7i92.js.gz +0 -0
  356. package/build/client/_app/immutable/chunks/aLf9ves12.js +1 -0
  357. package/build/client/_app/immutable/chunks/aLf9ves12.js.br +0 -0
  358. package/build/client/_app/immutable/chunks/aLf9ves12.js.gz +0 -0
  359. package/build/client/_app/immutable/chunks/f-j1ldZh.js +1 -0
  360. package/build/client/_app/immutable/chunks/f-j1ldZh.js.br +0 -0
  361. package/build/client/_app/immutable/chunks/f-j1ldZh.js.gz +0 -0
  362. package/build/client/_app/immutable/chunks/gEtmlKTD2.js +2 -0
  363. package/build/client/_app/immutable/chunks/gEtmlKTD2.js.br +0 -0
  364. package/build/client/_app/immutable/chunks/gEtmlKTD2.js.gz +0 -0
  365. package/build/client/_app/immutable/chunks/glszpPm_.js +70 -0
  366. package/build/client/_app/immutable/chunks/glszpPm_.js.br +0 -0
  367. package/build/client/_app/immutable/chunks/glszpPm_.js.gz +0 -0
  368. package/build/client/_app/immutable/chunks/h6BdjjI9.js +321 -0
  369. package/build/client/_app/immutable/chunks/h6BdjjI9.js.br +0 -0
  370. package/build/client/_app/immutable/chunks/h6BdjjI9.js.gz +0 -0
  371. package/build/client/_app/immutable/chunks/hPrUzghv.js +1 -0
  372. package/build/client/_app/immutable/chunks/hPrUzghv.js.br +0 -0
  373. package/build/client/_app/immutable/chunks/hPrUzghv.js.gz +0 -0
  374. package/build/client/_app/immutable/chunks/hoxxCinl.js +1 -0
  375. package/build/client/_app/immutable/chunks/hoxxCinl.js.br +0 -0
  376. package/build/client/_app/immutable/chunks/hoxxCinl.js.gz +0 -0
  377. package/build/client/_app/immutable/chunks/i-CYVfXN.js +1 -0
  378. package/build/client/_app/immutable/chunks/i-CYVfXN.js.br +0 -0
  379. package/build/client/_app/immutable/chunks/i-CYVfXN.js.gz +0 -0
  380. package/build/client/_app/immutable/chunks/neNX6gRo.js +1 -0
  381. package/build/client/_app/immutable/chunks/neNX6gRo.js.br +0 -0
  382. package/build/client/_app/immutable/chunks/neNX6gRo.js.gz +0 -0
  383. package/build/client/_app/immutable/chunks/pHXL_F_g2.js +1 -0
  384. package/build/client/_app/immutable/chunks/pHXL_F_g2.js.br +0 -0
  385. package/build/client/_app/immutable/chunks/pHXL_F_g2.js.gz +0 -0
  386. package/build/client/_app/immutable/chunks/pW93EPUQ.js +7 -0
  387. package/build/client/_app/immutable/chunks/pW93EPUQ.js.br +0 -0
  388. package/build/client/_app/immutable/chunks/pW93EPUQ.js.gz +0 -0
  389. package/build/client/_app/immutable/chunks/qP818rgB2.js +1 -0
  390. package/build/client/_app/immutable/chunks/qP818rgB2.js.br +0 -0
  391. package/build/client/_app/immutable/chunks/qP818rgB2.js.gz +0 -0
  392. package/build/client/_app/immutable/chunks/sotTapaw.js +1 -0
  393. package/build/client/_app/immutable/chunks/sotTapaw.js.br +0 -0
  394. package/build/client/_app/immutable/chunks/sotTapaw.js.gz +0 -0
  395. package/build/client/_app/immutable/chunks/wKcgcnDr2.js +1 -0
  396. package/build/client/_app/immutable/chunks/wKcgcnDr2.js.br +0 -0
  397. package/build/client/_app/immutable/chunks/wKcgcnDr2.js.gz +0 -0
  398. package/build/client/_app/immutable/chunks/xj8Qu0id.js +39 -0
  399. package/build/client/_app/immutable/chunks/xj8Qu0id.js.br +0 -0
  400. package/build/client/_app/immutable/chunks/xj8Qu0id.js.gz +0 -0
  401. package/build/client/_app/immutable/chunks/y_FyOMsm.js +3 -0
  402. package/build/client/_app/immutable/chunks/y_FyOMsm.js.br +0 -0
  403. package/build/client/_app/immutable/chunks/y_FyOMsm.js.gz +0 -0
  404. package/build/client/_app/immutable/entry/app.BER7E6R_.js +2 -0
  405. package/build/client/_app/immutable/entry/app.BER7E6R_.js.br +0 -0
  406. package/build/client/_app/immutable/entry/app.BER7E6R_.js.gz +0 -0
  407. package/build/client/_app/immutable/entry/start.C8tjv31Y.js +1 -0
  408. package/build/client/_app/immutable/entry/start.C8tjv31Y.js.br +1 -0
  409. package/build/client/_app/immutable/entry/start.C8tjv31Y.js.gz +0 -0
  410. package/build/client/_app/immutable/nodes/0.CAeMhoMc.js +7 -0
  411. package/build/client/_app/immutable/nodes/0.CAeMhoMc.js.br +0 -0
  412. package/build/client/_app/immutable/nodes/0.CAeMhoMc.js.gz +0 -0
  413. package/build/client/_app/immutable/nodes/1.4LtDz-oA.js +1 -0
  414. package/build/client/_app/immutable/nodes/1.4LtDz-oA.js.br +0 -0
  415. package/build/client/_app/immutable/nodes/1.4LtDz-oA.js.gz +0 -0
  416. package/build/client/_app/immutable/nodes/10.CFgia70s.js +1 -0
  417. package/build/client/_app/immutable/nodes/10.CFgia70s.js.br +2 -0
  418. package/build/client/_app/immutable/nodes/10.CFgia70s.js.gz +0 -0
  419. package/build/client/_app/immutable/nodes/11.Ch-vozvS.js +1 -0
  420. package/build/client/_app/immutable/nodes/11.Ch-vozvS.js.br +0 -0
  421. package/build/client/_app/immutable/nodes/11.Ch-vozvS.js.gz +0 -0
  422. package/build/client/_app/immutable/nodes/12.B5VT8cKW.js +2 -0
  423. package/build/client/_app/immutable/nodes/12.B5VT8cKW.js.br +0 -0
  424. package/build/client/_app/immutable/nodes/12.B5VT8cKW.js.gz +0 -0
  425. package/build/client/_app/immutable/nodes/13.CuIA9vng.js +402 -0
  426. package/build/client/_app/immutable/nodes/13.CuIA9vng.js.br +0 -0
  427. package/build/client/_app/immutable/nodes/13.CuIA9vng.js.gz +0 -0
  428. package/build/client/_app/immutable/nodes/2.xI5MnJsL.js +1 -0
  429. package/build/client/_app/immutable/nodes/2.xI5MnJsL.js.br +0 -0
  430. package/build/client/_app/immutable/nodes/2.xI5MnJsL.js.gz +0 -0
  431. package/build/client/_app/immutable/nodes/3.CQ4bIhQ6.js +1 -0
  432. package/build/client/_app/immutable/nodes/3.CQ4bIhQ6.js.br +0 -0
  433. package/build/client/_app/immutable/nodes/3.CQ4bIhQ6.js.gz +0 -0
  434. package/build/client/_app/immutable/nodes/4.N8cjhzIv.js +3 -0
  435. package/build/client/_app/immutable/nodes/4.N8cjhzIv.js.br +0 -0
  436. package/build/client/_app/immutable/nodes/4.N8cjhzIv.js.gz +0 -0
  437. package/build/client/_app/immutable/nodes/5.DfR2h3P4.js +48 -0
  438. package/build/client/_app/immutable/nodes/5.DfR2h3P4.js.br +0 -0
  439. package/build/client/_app/immutable/nodes/5.DfR2h3P4.js.gz +0 -0
  440. package/build/client/_app/immutable/nodes/6.v43avk-a.js +1 -0
  441. package/build/client/_app/immutable/nodes/6.v43avk-a.js.br +0 -0
  442. package/build/client/_app/immutable/nodes/6.v43avk-a.js.gz +0 -0
  443. package/build/client/_app/immutable/nodes/7.DJGq7-fq.js +5 -0
  444. package/build/client/_app/immutable/nodes/7.DJGq7-fq.js.br +0 -0
  445. package/build/client/_app/immutable/nodes/7.DJGq7-fq.js.gz +0 -0
  446. package/build/client/_app/immutable/nodes/8.BYeGayrU.js +3 -0
  447. package/build/client/_app/immutable/nodes/8.BYeGayrU.js.br +0 -0
  448. package/build/client/_app/immutable/nodes/8.BYeGayrU.js.gz +0 -0
  449. package/build/client/_app/immutable/nodes/9.d7hEqsWN.js +5 -0
  450. package/build/client/_app/immutable/nodes/9.d7hEqsWN.js.br +0 -0
  451. package/build/client/_app/immutable/nodes/9.d7hEqsWN.js.gz +0 -0
  452. package/build/client/_app/version.json +1 -1
  453. package/build/client/_app/version.json.br +0 -0
  454. package/build/client/_app/version.json.gz +0 -0
  455. package/build/client/unspaghettit-demo.gif +0 -0
  456. package/build/server/chunks/0-B9lmqNZh.js +15 -0
  457. package/build/server/chunks/0-B9lmqNZh.js.map +1 -0
  458. package/build/server/chunks/1-BVxoYoy0.js +9 -0
  459. package/build/server/chunks/1-BVxoYoy0.js.map +1 -0
  460. package/build/server/chunks/10-DCxp8jT8.js +9 -0
  461. package/build/server/chunks/10-DCxp8jT8.js.map +1 -0
  462. package/build/server/chunks/11-BmTBBPbT.js +9 -0
  463. package/build/server/chunks/11-BmTBBPbT.js.map +1 -0
  464. package/build/server/chunks/12-CsbhRlL1.js +9 -0
  465. package/build/server/chunks/12-CsbhRlL1.js.map +1 -0
  466. package/build/server/chunks/13-0DWHZ1hi.js +9 -0
  467. package/build/server/chunks/13-0DWHZ1hi.js.map +1 -0
  468. package/build/server/chunks/2-e5usQqOM.js +9 -0
  469. package/build/server/chunks/2-e5usQqOM.js.map +1 -0
  470. package/build/server/chunks/3-DNXwTyoL.js +16 -0
  471. package/build/server/chunks/3-DNXwTyoL.js.map +1 -0
  472. package/build/server/chunks/4-CcbKZlu1.js +16 -0
  473. package/build/server/chunks/4-CcbKZlu1.js.map +1 -0
  474. package/build/server/chunks/5-D2sOEK0c.js +9 -0
  475. package/build/server/chunks/5-D2sOEK0c.js.map +1 -0
  476. package/build/server/chunks/6-BXhVICA0.js +9 -0
  477. package/build/server/chunks/6-BXhVICA0.js.map +1 -0
  478. package/build/server/chunks/7-11gAeU6R.js +9 -0
  479. package/build/server/chunks/7-11gAeU6R.js.map +1 -0
  480. package/build/server/chunks/8-_840pfm4.js +9 -0
  481. package/build/server/chunks/8-_840pfm4.js.map +1 -0
  482. package/build/server/chunks/9-9--rc8Zm.js +9 -0
  483. package/build/server/chunks/9-9--rc8Zm.js.map +1 -0
  484. package/build/server/chunks/FeatureCard-DMFAdOZD.js +73 -0
  485. package/build/server/chunks/FeatureCard-DMFAdOZD.js.map +1 -0
  486. package/build/server/chunks/ManageTagsDialog-rb6Nv8Rn.js +87 -0
  487. package/build/server/chunks/ManageTagsDialog-rb6Nv8Rn.js.map +1 -0
  488. package/build/server/chunks/ProgressBar-COGq-V1W.js +70 -0
  489. package/build/server/chunks/ProgressBar-COGq-V1W.js.map +1 -0
  490. package/build/server/chunks/ProjectionViewer-5lAckYHW.js +1276 -0
  491. package/build/server/chunks/ProjectionViewer-5lAckYHW.js.map +1 -0
  492. package/build/server/chunks/ProjectsIndex-BUAIKM29.js +307 -0
  493. package/build/server/chunks/ProjectsIndex-BUAIKM29.js.map +1 -0
  494. package/build/server/chunks/TagDotStrip-BeDG7Cqh.js +88 -0
  495. package/build/server/chunks/TagDotStrip-BeDG7Cqh.js.map +1 -0
  496. package/build/server/chunks/TagFilterSelect-CkbZdWK3.js +112 -0
  497. package/build/server/chunks/TagFilterSelect-CkbZdWK3.js.map +1 -0
  498. package/build/server/chunks/_layout.svelte-CgBWifc7.js +1342 -0
  499. package/build/server/chunks/_layout.svelte-CgBWifc7.js.map +1 -0
  500. package/build/server/chunks/_page.svelte-B-mdxSfs.js +37 -0
  501. package/build/server/chunks/_page.svelte-B-mdxSfs.js.map +1 -0
  502. package/build/server/chunks/_page.svelte-B6cpjvJE.js +37 -0
  503. package/build/server/chunks/_page.svelte-B6cpjvJE.js.map +1 -0
  504. package/build/server/chunks/_page.svelte-BXHSxkOq.js +10707 -0
  505. package/build/server/chunks/_page.svelte-BXHSxkOq.js.map +1 -0
  506. package/build/server/chunks/_page.svelte-CCfXJrLQ.js +454 -0
  507. package/build/server/chunks/_page.svelte-CCfXJrLQ.js.map +1 -0
  508. package/build/server/chunks/_page.svelte-CpNPTC27.js +99 -0
  509. package/build/server/chunks/_page.svelte-CpNPTC27.js.map +1 -0
  510. package/build/server/chunks/_page.svelte-D0MRtAqZ.js +735 -0
  511. package/build/server/chunks/_page.svelte-D0MRtAqZ.js.map +1 -0
  512. package/build/server/chunks/_page.svelte-DE_5ZkTk.js +49 -0
  513. package/build/server/chunks/_page.svelte-DE_5ZkTk.js.map +1 -0
  514. package/build/server/chunks/_page.svelte-cfUGFHhh.js +202 -0
  515. package/build/server/chunks/_page.svelte-cfUGFHhh.js.map +1 -0
  516. package/build/server/chunks/_page.svelte-epVS2H1-.js +368 -0
  517. package/build/server/chunks/_page.svelte-epVS2H1-.js.map +1 -0
  518. package/build/server/chunks/_page.svelte-j7WIQsUE.js +74 -0
  519. package/build/server/chunks/_page.svelte-j7WIQsUE.js.map +1 -0
  520. package/build/server/chunks/_page.svelte-sFsc403N.js +834 -0
  521. package/build/server/chunks/_page.svelte-sFsc403N.js.map +1 -0
  522. package/build/server/chunks/_page.svelte-zBBZNKzG.js +153 -0
  523. package/build/server/chunks/_page.svelte-zBBZNKzG.js.map +1 -0
  524. package/build/server/chunks/_server.ts-1lxF2NFW.js +146 -0
  525. package/build/server/chunks/_server.ts-1lxF2NFW.js.map +1 -0
  526. package/build/server/chunks/_server.ts-BP4OBqaD.js +21 -0
  527. package/build/server/chunks/_server.ts-BP4OBqaD.js.map +1 -0
  528. package/build/server/chunks/_server.ts-BVX4A2PU.js +69 -0
  529. package/build/server/chunks/_server.ts-BVX4A2PU.js.map +1 -0
  530. package/build/server/chunks/_server.ts-BaJa3Xt1.js +56 -0
  531. package/build/server/chunks/_server.ts-BaJa3Xt1.js.map +1 -0
  532. package/build/server/chunks/_server.ts-C5tp9sxp.js +23 -0
  533. package/build/server/chunks/_server.ts-C5tp9sxp.js.map +1 -0
  534. package/build/server/chunks/_server.ts-CeTvD5Mp.js +23 -0
  535. package/build/server/chunks/_server.ts-CeTvD5Mp.js.map +1 -0
  536. package/build/server/chunks/_server.ts-Cvu3XFUs.js +23 -0
  537. package/build/server/chunks/_server.ts-Cvu3XFUs.js.map +1 -0
  538. package/build/server/chunks/_server.ts-DFKEDp9D.js +46 -0
  539. package/build/server/chunks/_server.ts-DFKEDp9D.js.map +1 -0
  540. package/build/server/chunks/_server.ts-DG8DdQoB.js +961 -0
  541. package/build/server/chunks/_server.ts-DG8DdQoB.js.map +1 -0
  542. package/build/server/chunks/_server.ts-DN-6Y5lG.js +61 -0
  543. package/build/server/chunks/_server.ts-DN-6Y5lG.js.map +1 -0
  544. package/build/server/chunks/_server.ts-DSiY2IgM.js +106 -0
  545. package/build/server/chunks/_server.ts-DSiY2IgM.js.map +1 -0
  546. package/build/server/chunks/_server.ts-DapkfYPR.js +77 -0
  547. package/build/server/chunks/_server.ts-DapkfYPR.js.map +1 -0
  548. package/build/server/chunks/_server.ts-GHO81alX.js +50 -0
  549. package/build/server/chunks/_server.ts-GHO81alX.js.map +1 -0
  550. package/build/server/chunks/_server.ts-KPwcTd2q.js +56 -0
  551. package/build/server/chunks/_server.ts-KPwcTd2q.js.map +1 -0
  552. package/build/server/chunks/_server.ts-nBHIdesV.js +50 -0
  553. package/build/server/chunks/_server.ts-nBHIdesV.js.map +1 -0
  554. package/build/server/chunks/_server.ts-tonCHVx_.js +21 -0
  555. package/build/server/chunks/_server.ts-tonCHVx_.js.map +1 -0
  556. package/build/server/chunks/browserContainer-CnyD6-Fb.js +1577 -0
  557. package/build/server/chunks/browserContainer-CnyD6-Fb.js.map +1 -0
  558. package/build/server/chunks/builderModeStore.svelte-5gHGj8fb.js +893 -0
  559. package/build/server/chunks/builderModeStore.svelte-5gHGj8fb.js.map +1 -0
  560. package/build/server/chunks/client-BMtVEMju.js +51 -0
  561. package/build/server/chunks/client-BMtVEMju.js.map +1 -0
  562. package/build/server/chunks/error.svelte-x31ayNE1.js +15 -0
  563. package/build/server/chunks/error.svelte-x31ayNE1.js.map +1 -0
  564. package/build/server/chunks/featureQueueContext-BbgVWKQG.js +32 -0
  565. package/build/server/chunks/featureQueueContext-BbgVWKQG.js.map +1 -0
  566. package/build/server/chunks/featureStore.svelte-CNLEsBJy.js +162 -0
  567. package/build/server/chunks/featureStore.svelte-CNLEsBJy.js.map +1 -0
  568. package/build/server/chunks/featuresStore.svelte-CIFEpGD9.js +212 -0
  569. package/build/server/chunks/featuresStore.svelte-CIFEpGD9.js.map +1 -0
  570. package/build/server/chunks/index-server-Bzpc8zwf.js +4815 -0
  571. package/build/server/chunks/index-server-Bzpc8zwf.js.map +1 -0
  572. package/build/server/chunks/internal-CPpC8eDZ.js +1820 -0
  573. package/build/server/chunks/internal-CPpC8eDZ.js.map +1 -0
  574. package/build/server/chunks/projectBundleClient-BTd9AFu6.js +168 -0
  575. package/build/server/chunks/projectBundleClient-BTd9AFu6.js.map +1 -0
  576. package/build/server/chunks/projectContextStore.svelte-CFTa-2W7.js +141 -0
  577. package/build/server/chunks/projectContextStore.svelte-CFTa-2W7.js.map +1 -0
  578. package/build/server/chunks/projectFeaturesStore.svelte-BmMgsX-B.js +87 -0
  579. package/build/server/chunks/projectFeaturesStore.svelte-BmMgsX-B.js.map +1 -0
  580. package/build/server/chunks/projectStore.svelte-D47f2Ze4.js +230 -0
  581. package/build/server/chunks/projectStore.svelte-D47f2Ze4.js.map +1 -0
  582. package/build/server/chunks/reconcile-DWYiyWQW.js +393 -0
  583. package/build/server/chunks/reconcile-DWYiyWQW.js.map +1 -0
  584. package/build/server/chunks/snapshotRepository-DatB6XLT.js +1173 -0
  585. package/build/server/chunks/snapshotRepository-DatB6XLT.js.map +1 -0
  586. package/build/server/chunks/state-C8lQ-4Ip.js +61 -0
  587. package/build/server/chunks/state-C8lQ-4Ip.js.map +1 -0
  588. package/build/server/chunks/stores-C4apQGTo.js +35 -0
  589. package/build/server/chunks/stores-C4apQGTo.js.map +1 -0
  590. package/build/server/chunks/sync-Dorsvxhj.js +955 -0
  591. package/build/server/chunks/sync-Dorsvxhj.js.map +1 -0
  592. package/build/server/chunks/syncAwareRepositories-OJq78sW0.js +57 -0
  593. package/build/server/chunks/syncAwareRepositories-OJq78sW0.js.map +1 -0
  594. package/build/server/chunks/tagPaletteStore.svelte-CsI7lh_H.js +181 -0
  595. package/build/server/chunks/tagPaletteStore.svelte-CsI7lh_H.js.map +1 -0
  596. package/build/server/index.js +2 -2
  597. package/build/server/index.js.map +1 -1
  598. package/build/server/manifest.js +52 -37
  599. package/build/server/manifest.js.map +1 -1
  600. package/mcp-server/bin.ts +5 -0
  601. package/mcp-server/server.ts +7 -0
  602. package/mcp-server/tools/_shared.ts +2 -0
  603. package/mcp-server/tools/provenance.ts +217 -0
  604. package/package.json +5 -4
  605. package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +12 -13
  606. package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +8 -0
  607. package/src/features/diagram-projection/application/projectionComposition.ts +32 -0
  608. package/src/features/diagram-projection/application/projectionEvents.ts +26 -0
  609. package/src/features/diagram-projection/domain/DiagramSpec.ts +39 -0
  610. package/src/features/diagram-projection/domain/ports/DiagramExporter.ts +13 -0
  611. package/src/features/diagram-projection/domain/ports/ProjectionEvents.ts +21 -0
  612. package/src/features/diagram-projection/domain/ports/Projector.ts +26 -0
  613. package/src/features/diagram-projection/domain/services/ProjectorRegistry.ts +32 -0
  614. package/src/features/diagram-projection/domain/services/projections/erProjector.ts +37 -0
  615. package/src/features/diagram-projection/domain/services/projections/flowchartProjector.ts +57 -0
  616. package/src/features/diagram-projection/domain/services/projections/graphToDiagramSpec.ts +18 -0
  617. package/src/features/diagram-projection/domain/services/projections/mindmapProjector.ts +57 -0
  618. package/src/features/diagram-projection/domain/services/projections/sequenceProjector.ts +61 -0
  619. package/src/features/diagram-projection/domain/services/projections/statechartProjector.ts +70 -0
  620. package/src/features/diagram-projection/domain/services/sourceFacts.ts +32 -0
  621. package/src/features/diagram-projection/infrastructure/exporters/DotExporter.ts +33 -0
  622. package/src/features/diagram-projection/infrastructure/exporters/MermaidExporter.ts +117 -0
  623. package/src/features/diagram-projection/infrastructure/exporters/SvgExporter.ts +73 -0
  624. package/src/features/diagram-projection/infrastructure/render/mermaidLoader.ts +25 -0
  625. package/src/features/diagram-projection/presentation/components/ExportPanel.svelte +162 -0
  626. package/src/features/diagram-projection/presentation/components/MermaidDiagram.svelte +232 -0
  627. package/src/features/diagram-projection/presentation/components/ProjectionViewer.svelte +325 -0
  628. package/src/features/projects/presentation/components/ProjectFeaturesPanel.svelte +29 -0
  629. package/src/features/source-provenance/application/ports/ProvenanceRepository.ts +8 -0
  630. package/src/features/source-provenance/domain/FeatureElements.ts +50 -0
  631. package/src/features/source-provenance/domain/Highlighting.ts +91 -0
  632. package/src/features/source-provenance/domain/Provenance.ts +220 -0
  633. package/src/features/source-provenance/infrastructure/io/ProvenanceJson.ts +98 -0
  634. package/src/features/source-provenance/infrastructure/persistence/InMemoryProvenanceRepository.ts +19 -0
  635. package/src/features/source-provenance/infrastructure/persistence/JsonFolderProvenanceRepository.ts +71 -0
  636. package/src/features/source-provenance/presentation/components/SourceViewer.svelte +228 -0
  637. package/src/features/source-provenance/presentation/stores/provenanceStore.svelte.ts +70 -0
  638. package/src/lib/server/snapshotRepository.ts +5 -1
  639. package/src/routes/+layout.svelte +71 -111
  640. package/src/routes/api/snapshots/[id]/provenance/+server.ts +13 -0
  641. package/src/routes/features/[id]/graph/+page.svelte +3 -3
  642. package/src/routes/features/[id]/provenance/+page.svelte +54 -0
  643. package/src/routes/projects/[id]/graph/+page.svelte +3 -3
  644. package/src/shared/infrastructure/persistence/snapshotLayout.ts +12 -0
  645. package/static/unspaghettit-demo.gif +0 -0
  646. package/vite.config.ts +6 -0
  647. package/build/client/_app/immutable/assets/0.DCOD5ne_.css +0 -1
  648. package/build/client/_app/immutable/assets/0.DCOD5ne_.css.br +0 -0
  649. package/build/client/_app/immutable/assets/0.DCOD5ne_.css.gz +0 -0
  650. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +0 -1
  651. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
  652. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
  653. package/build/client/_app/immutable/chunks/B3vnQs252.js +0 -1
  654. package/build/client/_app/immutable/chunks/B3vnQs252.js.br +0 -0
  655. package/build/client/_app/immutable/chunks/B3vnQs252.js.gz +0 -0
  656. package/build/client/_app/immutable/chunks/BANF9BhQ2.js +0 -2
  657. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.br +0 -0
  658. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.gz +0 -0
  659. package/build/client/_app/immutable/chunks/BJdTO_n6.js +0 -1
  660. package/build/client/_app/immutable/chunks/BJdTO_n6.js.br +0 -0
  661. package/build/client/_app/immutable/chunks/BJdTO_n6.js.gz +0 -0
  662. package/build/client/_app/immutable/chunks/BPl9BITm.js +0 -3
  663. package/build/client/_app/immutable/chunks/BPl9BITm.js.br +0 -0
  664. package/build/client/_app/immutable/chunks/BPl9BITm.js.gz +0 -0
  665. package/build/client/_app/immutable/chunks/Bcyn5YUg.js +0 -4
  666. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.br +0 -0
  667. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.gz +0 -0
  668. package/build/client/_app/immutable/chunks/Bfc9rQXP.js +0 -1
  669. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.br +0 -0
  670. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.gz +0 -0
  671. package/build/client/_app/immutable/chunks/BjxqhpPG.js +0 -1
  672. package/build/client/_app/immutable/chunks/BjxqhpPG.js.br +0 -0
  673. package/build/client/_app/immutable/chunks/BjxqhpPG.js.gz +0 -0
  674. package/build/client/_app/immutable/chunks/ByaoVvNB.js +0 -1
  675. package/build/client/_app/immutable/chunks/ByaoVvNB.js.br +0 -0
  676. package/build/client/_app/immutable/chunks/ByaoVvNB.js.gz +0 -0
  677. package/build/client/_app/immutable/chunks/C8b3IMj8.js +0 -1
  678. package/build/client/_app/immutable/chunks/C8b3IMj8.js.br +0 -0
  679. package/build/client/_app/immutable/chunks/C8b3IMj8.js.gz +0 -0
  680. package/build/client/_app/immutable/chunks/ClC4qR7W2.js +0 -2
  681. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.br +0 -0
  682. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.gz +0 -0
  683. package/build/client/_app/immutable/chunks/CuGlh1c2.js +0 -1
  684. package/build/client/_app/immutable/chunks/CuGlh1c2.js.br +0 -0
  685. package/build/client/_app/immutable/chunks/CuGlh1c2.js.gz +0 -0
  686. package/build/client/_app/immutable/chunks/CwzIdrQR.js +0 -1
  687. package/build/client/_app/immutable/chunks/CwzIdrQR.js.br +0 -0
  688. package/build/client/_app/immutable/chunks/CwzIdrQR.js.gz +0 -0
  689. package/build/client/_app/immutable/chunks/D64sGJRN.js +0 -1
  690. package/build/client/_app/immutable/chunks/D64sGJRN.js.br +0 -0
  691. package/build/client/_app/immutable/chunks/D64sGJRN.js.gz +0 -0
  692. package/build/client/_app/immutable/chunks/DNaA4QRO2.js +0 -1
  693. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.br +0 -0
  694. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.gz +0 -0
  695. package/build/client/_app/immutable/chunks/Da59TXPe.js +0 -1
  696. package/build/client/_app/immutable/chunks/Da59TXPe.js.br +0 -2
  697. package/build/client/_app/immutable/chunks/Da59TXPe.js.gz +0 -0
  698. package/build/client/_app/immutable/chunks/DhTiE3j02.js +0 -2
  699. package/build/client/_app/immutable/chunks/DhTiE3j02.js.br +0 -0
  700. package/build/client/_app/immutable/chunks/DhTiE3j02.js.gz +0 -0
  701. package/build/client/_app/immutable/chunks/DmyaDy4d2.js +0 -1
  702. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.br +0 -0
  703. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.gz +0 -0
  704. package/build/client/_app/immutable/chunks/DryaQyjN2.js +0 -1
  705. package/build/client/_app/immutable/chunks/DryaQyjN2.js.br +0 -0
  706. package/build/client/_app/immutable/chunks/DryaQyjN2.js.gz +0 -0
  707. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js +0 -1
  708. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.br +0 -0
  709. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.gz +0 -0
  710. package/build/client/_app/immutable/chunks/DtblIi6X2.js +0 -1
  711. package/build/client/_app/immutable/chunks/DtblIi6X2.js.br +0 -1
  712. package/build/client/_app/immutable/chunks/DtblIi6X2.js.gz +0 -0
  713. package/build/client/_app/immutable/chunks/UkzDDeO42.js +0 -1
  714. package/build/client/_app/immutable/chunks/UkzDDeO42.js.br +0 -0
  715. package/build/client/_app/immutable/chunks/UkzDDeO42.js.gz +0 -0
  716. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js +0 -1
  717. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.br +0 -0
  718. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.gz +0 -0
  719. package/build/client/_app/immutable/chunks/_b612aVb.js +0 -1
  720. package/build/client/_app/immutable/chunks/_b612aVb.js.br +0 -0
  721. package/build/client/_app/immutable/chunks/_b612aVb.js.gz +0 -0
  722. package/build/client/_app/immutable/chunks/aNMRV4sP2.js +0 -5
  723. package/build/client/_app/immutable/chunks/aNMRV4sP2.js.br +0 -0
  724. package/build/client/_app/immutable/chunks/aNMRV4sP2.js.gz +0 -0
  725. package/build/client/_app/immutable/chunks/cMamJTsF.js +0 -1
  726. package/build/client/_app/immutable/chunks/cMamJTsF.js.br +0 -0
  727. package/build/client/_app/immutable/chunks/cMamJTsF.js.gz +0 -0
  728. package/build/client/_app/immutable/chunks/ib21i2T_.js +0 -6
  729. package/build/client/_app/immutable/chunks/ib21i2T_.js.br +0 -0
  730. package/build/client/_app/immutable/chunks/ib21i2T_.js.gz +0 -0
  731. package/build/client/_app/immutable/chunks/oVMDLirx.js +0 -1
  732. package/build/client/_app/immutable/chunks/oVMDLirx.js.br +0 -0
  733. package/build/client/_app/immutable/chunks/oVMDLirx.js.gz +0 -0
  734. package/build/client/_app/immutable/chunks/olAc024e.js +0 -1
  735. package/build/client/_app/immutable/chunks/olAc024e.js.br +0 -0
  736. package/build/client/_app/immutable/chunks/olAc024e.js.gz +0 -0
  737. package/build/client/_app/immutable/chunks/suTxxv1t.js +0 -1
  738. package/build/client/_app/immutable/chunks/suTxxv1t.js.br +0 -1
  739. package/build/client/_app/immutable/chunks/suTxxv1t.js.gz +0 -0
  740. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js +0 -1
  741. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.br +0 -0
  742. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.gz +0 -0
  743. package/build/client/_app/immutable/chunks/wrqalH0a.js +0 -1
  744. package/build/client/_app/immutable/chunks/wrqalH0a.js.br +0 -0
  745. package/build/client/_app/immutable/chunks/wrqalH0a.js.gz +0 -0
  746. package/build/client/_app/immutable/chunks/x60Tn5kT.js +0 -1
  747. package/build/client/_app/immutable/chunks/x60Tn5kT.js.br +0 -0
  748. package/build/client/_app/immutable/chunks/x60Tn5kT.js.gz +0 -0
  749. package/build/client/_app/immutable/chunks/yShDxCNj.js +0 -1
  750. package/build/client/_app/immutable/chunks/yShDxCNj.js.br +0 -2
  751. package/build/client/_app/immutable/chunks/yShDxCNj.js.gz +0 -0
  752. package/build/client/_app/immutable/entry/app.Etd-exTb.js +0 -2
  753. package/build/client/_app/immutable/entry/app.Etd-exTb.js.br +0 -0
  754. package/build/client/_app/immutable/entry/app.Etd-exTb.js.gz +0 -0
  755. package/build/client/_app/immutable/entry/start.DY2B3u4g.js +0 -1
  756. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.br +0 -0
  757. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.gz +0 -0
  758. package/build/client/_app/immutable/nodes/0.tKfYV3__.js +0 -8
  759. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.br +0 -0
  760. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.gz +0 -0
  761. package/build/client/_app/immutable/nodes/1.CER5ICKt.js +0 -1
  762. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.br +0 -1
  763. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.gz +0 -0
  764. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js +0 -1
  765. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.br +0 -0
  766. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.gz +0 -0
  767. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js +0 -2
  768. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.br +0 -0
  769. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.gz +0 -0
  770. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js +0 -402
  771. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.br +0 -0
  772. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.gz +0 -0
  773. package/build/client/_app/immutable/nodes/2.CF488WWF.js +0 -1
  774. package/build/client/_app/immutable/nodes/2.CF488WWF.js.br +0 -0
  775. package/build/client/_app/immutable/nodes/2.CF488WWF.js.gz +0 -0
  776. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js +0 -1
  777. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.br +0 -0
  778. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.gz +0 -0
  779. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js +0 -3
  780. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.br +0 -0
  781. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.gz +0 -0
  782. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js +0 -48
  783. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.br +0 -0
  784. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.gz +0 -0
  785. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js +0 -1
  786. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.br +0 -0
  787. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.gz +0 -0
  788. package/build/client/_app/immutable/nodes/7.pajo8MfM.js +0 -3
  789. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.br +0 -0
  790. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.gz +0 -0
  791. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js +0 -5
  792. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.br +0 -0
  793. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.gz +0 -0
  794. package/build/client/_app/immutable/nodes/9.D72NaL3l.js +0 -1
  795. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.br +0 -1
  796. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.gz +0 -0
  797. package/build/server/chunks/0-8YZc572z.js +0 -15
  798. package/build/server/chunks/0-8YZc572z.js.map +0 -1
  799. package/build/server/chunks/1-DxkfSJLu.js +0 -9
  800. package/build/server/chunks/1-DxkfSJLu.js.map +0 -1
  801. package/build/server/chunks/10-DkObdGtU.js +0 -9
  802. package/build/server/chunks/10-DkObdGtU.js.map +0 -1
  803. package/build/server/chunks/11-DL94HxpZ.js +0 -9
  804. package/build/server/chunks/11-DL94HxpZ.js.map +0 -1
  805. package/build/server/chunks/12-CI74sCkt.js +0 -9
  806. package/build/server/chunks/12-CI74sCkt.js.map +0 -1
  807. package/build/server/chunks/2-qhWwQ4eL.js +0 -9
  808. package/build/server/chunks/2-qhWwQ4eL.js.map +0 -1
  809. package/build/server/chunks/3-CzoZtSTp.js +0 -16
  810. package/build/server/chunks/3-CzoZtSTp.js.map +0 -1
  811. package/build/server/chunks/4-CDa9DBsh.js +0 -16
  812. package/build/server/chunks/4-CDa9DBsh.js.map +0 -1
  813. package/build/server/chunks/5-qD2xxOrq.js +0 -9
  814. package/build/server/chunks/5-qD2xxOrq.js.map +0 -1
  815. package/build/server/chunks/6-B4mWzvDn.js +0 -9
  816. package/build/server/chunks/6-B4mWzvDn.js.map +0 -1
  817. package/build/server/chunks/7-zExv-fTN.js +0 -9
  818. package/build/server/chunks/7-zExv-fTN.js.map +0 -1
  819. package/build/server/chunks/8-BVrGdQg4.js +0 -9
  820. package/build/server/chunks/8-BVrGdQg4.js.map +0 -1
  821. package/build/server/chunks/9-BnZLRMYA.js +0 -9
  822. package/build/server/chunks/9-BnZLRMYA.js.map +0 -1
  823. package/build/server/chunks/BehaviorGraph-C-9z37Sm.js +0 -788
  824. package/build/server/chunks/BehaviorGraph-C-9z37Sm.js.map +0 -1
  825. package/build/server/chunks/FeatureCard-Bb50FEfp.js +0 -73
  826. package/build/server/chunks/FeatureCard-Bb50FEfp.js.map +0 -1
  827. package/build/server/chunks/ManageTagsDialog-D5xbAVNB.js +0 -87
  828. package/build/server/chunks/ManageTagsDialog-D5xbAVNB.js.map +0 -1
  829. package/build/server/chunks/ProgressBar-CUC2EZqG.js +0 -70
  830. package/build/server/chunks/ProgressBar-CUC2EZqG.js.map +0 -1
  831. package/build/server/chunks/ProjectsIndex-FgIu9dBp.js +0 -307
  832. package/build/server/chunks/ProjectsIndex-FgIu9dBp.js.map +0 -1
  833. package/build/server/chunks/TagDotStrip-0rn-IJVE.js +0 -88
  834. package/build/server/chunks/TagDotStrip-0rn-IJVE.js.map +0 -1
  835. package/build/server/chunks/TagFilterSelect-Dbu-7Dg4.js +0 -112
  836. package/build/server/chunks/TagFilterSelect-Dbu-7Dg4.js.map +0 -1
  837. package/build/server/chunks/_layout.svelte-pSSG85WT.js +0 -1342
  838. package/build/server/chunks/_layout.svelte-pSSG85WT.js.map +0 -1
  839. package/build/server/chunks/_page.svelte-BNH3szkk.js +0 -202
  840. package/build/server/chunks/_page.svelte-BNH3szkk.js.map +0 -1
  841. package/build/server/chunks/_page.svelte-BcuGvUt1.js +0 -37
  842. package/build/server/chunks/_page.svelte-BcuGvUt1.js.map +0 -1
  843. package/build/server/chunks/_page.svelte-BoOMG5Y0.js +0 -37
  844. package/build/server/chunks/_page.svelte-BoOMG5Y0.js.map +0 -1
  845. package/build/server/chunks/_page.svelte-C4PRh_wP.js +0 -454
  846. package/build/server/chunks/_page.svelte-C4PRh_wP.js.map +0 -1
  847. package/build/server/chunks/_page.svelte-Cqn34NXy.js +0 -74
  848. package/build/server/chunks/_page.svelte-Cqn34NXy.js.map +0 -1
  849. package/build/server/chunks/_page.svelte-DSCeOGv7.js +0 -99
  850. package/build/server/chunks/_page.svelte-DSCeOGv7.js.map +0 -1
  851. package/build/server/chunks/_page.svelte-DqWdGt48.js +0 -182
  852. package/build/server/chunks/_page.svelte-DqWdGt48.js.map +0 -1
  853. package/build/server/chunks/_page.svelte-DsQHSEl4.js +0 -49
  854. package/build/server/chunks/_page.svelte-DsQHSEl4.js.map +0 -1
  855. package/build/server/chunks/_page.svelte-Uioz8hsG.js +0 -834
  856. package/build/server/chunks/_page.svelte-Uioz8hsG.js.map +0 -1
  857. package/build/server/chunks/_page.svelte-p38jot9e.js +0 -735
  858. package/build/server/chunks/_page.svelte-p38jot9e.js.map +0 -1
  859. package/build/server/chunks/_page.svelte-yN5kzgJ9.js +0 -10707
  860. package/build/server/chunks/_page.svelte-yN5kzgJ9.js.map +0 -1
  861. package/build/server/chunks/_server.ts-1CtrHhte.js +0 -23
  862. package/build/server/chunks/_server.ts-1CtrHhte.js.map +0 -1
  863. package/build/server/chunks/_server.ts-71Qx1lQb.js +0 -21
  864. package/build/server/chunks/_server.ts-71Qx1lQb.js.map +0 -1
  865. package/build/server/chunks/_server.ts-BAyekGHB.js +0 -961
  866. package/build/server/chunks/_server.ts-BAyekGHB.js.map +0 -1
  867. package/build/server/chunks/_server.ts-BLWhU22T.js +0 -23
  868. package/build/server/chunks/_server.ts-BLWhU22T.js.map +0 -1
  869. package/build/server/chunks/_server.ts-C7EVZVxv.js +0 -61
  870. package/build/server/chunks/_server.ts-C7EVZVxv.js.map +0 -1
  871. package/build/server/chunks/_server.ts-CGjYuLmo.js +0 -50
  872. package/build/server/chunks/_server.ts-CGjYuLmo.js.map +0 -1
  873. package/build/server/chunks/_server.ts-CX6H8fSE.js +0 -56
  874. package/build/server/chunks/_server.ts-CX6H8fSE.js.map +0 -1
  875. package/build/server/chunks/_server.ts-CyEdTCLr.js +0 -50
  876. package/build/server/chunks/_server.ts-CyEdTCLr.js.map +0 -1
  877. package/build/server/chunks/_server.ts-DKVTM9Pj.js +0 -77
  878. package/build/server/chunks/_server.ts-DKVTM9Pj.js.map +0 -1
  879. package/build/server/chunks/_server.ts-Dip65hLJ.js +0 -56
  880. package/build/server/chunks/_server.ts-Dip65hLJ.js.map +0 -1
  881. package/build/server/chunks/_server.ts-Dm0tCs2i.js +0 -106
  882. package/build/server/chunks/_server.ts-Dm0tCs2i.js.map +0 -1
  883. package/build/server/chunks/_server.ts-DsYwK_uW.js +0 -46
  884. package/build/server/chunks/_server.ts-DsYwK_uW.js.map +0 -1
  885. package/build/server/chunks/_server.ts-RCEgegYU.js +0 -23
  886. package/build/server/chunks/_server.ts-RCEgegYU.js.map +0 -1
  887. package/build/server/chunks/_server.ts-XOLAT4dd.js +0 -146
  888. package/build/server/chunks/_server.ts-XOLAT4dd.js.map +0 -1
  889. package/build/server/chunks/_server.ts-afh_zLVi.js +0 -69
  890. package/build/server/chunks/_server.ts-afh_zLVi.js.map +0 -1
  891. package/build/server/chunks/browserContainer-BdldtueJ.js +0 -1577
  892. package/build/server/chunks/browserContainer-BdldtueJ.js.map +0 -1
  893. package/build/server/chunks/builderModeStore.svelte-BEZMQEqn.js +0 -893
  894. package/build/server/chunks/builderModeStore.svelte-BEZMQEqn.js.map +0 -1
  895. package/build/server/chunks/client-C9Cat4DK.js +0 -51
  896. package/build/server/chunks/client-C9Cat4DK.js.map +0 -1
  897. package/build/server/chunks/error.svelte-CzVR_A6P.js +0 -15
  898. package/build/server/chunks/error.svelte-CzVR_A6P.js.map +0 -1
  899. package/build/server/chunks/featureQueueContext-DuXpyTdC.js +0 -32
  900. package/build/server/chunks/featureQueueContext-DuXpyTdC.js.map +0 -1
  901. package/build/server/chunks/featureStore.svelte-DHZf88gu.js +0 -162
  902. package/build/server/chunks/featureStore.svelte-DHZf88gu.js.map +0 -1
  903. package/build/server/chunks/featuresStore.svelte-bUyQBg1-.js +0 -212
  904. package/build/server/chunks/featuresStore.svelte-bUyQBg1-.js.map +0 -1
  905. package/build/server/chunks/index-server-DvBux_Gf.js +0 -4815
  906. package/build/server/chunks/index-server-DvBux_Gf.js.map +0 -1
  907. package/build/server/chunks/internal-BFt8yDlf.js +0 -1820
  908. package/build/server/chunks/internal-BFt8yDlf.js.map +0 -1
  909. package/build/server/chunks/projectBundleClient-BtvWPh87.js +0 -168
  910. package/build/server/chunks/projectBundleClient-BtvWPh87.js.map +0 -1
  911. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js +0 -141
  912. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js.map +0 -1
  913. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js +0 -87
  914. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js.map +0 -1
  915. package/build/server/chunks/projectStore.svelte-BNuLNxk_.js +0 -230
  916. package/build/server/chunks/projectStore.svelte-BNuLNxk_.js.map +0 -1
  917. package/build/server/chunks/reconcile-CVG2LSlW.js +0 -393
  918. package/build/server/chunks/reconcile-CVG2LSlW.js.map +0 -1
  919. package/build/server/chunks/snapshotRepository-8f-2wTrb.js +0 -1024
  920. package/build/server/chunks/snapshotRepository-8f-2wTrb.js.map +0 -1
  921. package/build/server/chunks/state-CZZtjXLE.js +0 -61
  922. package/build/server/chunks/state-CZZtjXLE.js.map +0 -1
  923. package/build/server/chunks/sync-Bn6eSUhC.js +0 -955
  924. package/build/server/chunks/sync-Bn6eSUhC.js.map +0 -1
  925. package/build/server/chunks/syncAwareRepositories-DvUjq5Q6.js +0 -57
  926. package/build/server/chunks/syncAwareRepositories-DvUjq5Q6.js.map +0 -1
  927. package/build/server/chunks/tagPaletteStore.svelte-C71bdzDl.js +0 -181
  928. package/build/server/chunks/tagPaletteStore.svelte-C71bdzDl.js.map +0 -1
  929. /package/build/client/_app/immutable/assets/{12.nv0I59TU.css → 13.nv0I59TU.css} +0 -0
  930. /package/build/client/_app/immutable/assets/{12.nv0I59TU.css.br → 13.nv0I59TU.css.br} +0 -0
  931. /package/build/client/_app/immutable/assets/{12.nv0I59TU.css.gz → 13.nv0I59TU.css.gz} +0 -0
  932. /package/build/client/_app/immutable/chunks/{D5speDV82.js → D5speDV8.js} +0 -0
  933. /package/build/client/_app/immutable/chunks/{D5speDV82.js.br → D5speDV8.js.br} +0 -0
  934. /package/build/client/_app/immutable/chunks/{D5speDV82.js.gz → D5speDV8.js.gz} +0 -0
package/README.md CHANGED
@@ -1,483 +1,114 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/lyriks-io/unspaghettit/main/static/unspaghettit_logo.png" alt="Unspaghettit" width="120" />
2
+ <img src="https://raw.githubusercontent.com/lyriks-io/unspaghettit/main/static/unspaghettit_logo.png" alt="Unspaghettit" width="180" />
3
3
  </p>
4
4
 
5
5
  <h1 align="center">Unspaghettit</h1>
6
6
 
7
- <p align="center">
8
- <em>Executable specifications for AI-assisted software development.</em>
9
- </p>
7
+ <p align="center"><em>Your specs shouldn't be markdown. They should pass or fail.</em></p>
10
8
 
11
9
  <p align="center">
12
- <a href="https://github.com/lyriks-io/unspaghettit/actions/workflows/ci.yml">
13
- <img src="https://github.com/lyriks-io/unspaghettit/actions/workflows/ci.yml/badge.svg" alt="CI" />
14
- </a>
15
- <a href="https://www.gnu.org/licenses/agpl-3.0.html">
16
- <img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="License: AGPL-3.0" />
17
- </a>
18
- <a href="https://nodejs.org/">
19
- <img src="https://img.shields.io/badge/node-%E2%89%A520.10-43853d.svg" alt="Node ≥ 20.10" />
20
- </a>
10
+ <a href="https://github.com/lyriks-io/unspaghettit/actions/workflows/ci.yml"><img src="https://github.com/lyriks-io/unspaghettit/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
11
+ <a href="https://www.gnu.org/licenses/agpl-3.0.html"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="License: AGPL-3.0" /></a>
12
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%E2%89%A520.10-43853d.svg" alt="Node >= 20.10" /></a>
13
+ <a href="https://www.npmjs.com/package/unspaghettit"><img src="https://img.shields.io/npm/v/unspaghettit.svg" alt="npm" /></a>
21
14
  </p>
22
15
 
23
- <p align="center">
24
- Local-first &nbsp;·&nbsp; MCP-native &nbsp;·&nbsp; AGPL-3.0
25
- </p>
16
+ <p align="center"><strong>Local-first</strong> &nbsp;·&nbsp; <strong>MCP-native</strong> &nbsp;·&nbsp; <strong>AGPL-3.0</strong></p>
26
17
 
27
18
  <p align="center">
28
- <em>An open-source project by <a href="https://lyriks.io">Lyriks.io</a>.</em>
19
+ <img src="https://raw.githubusercontent.com/lyriks-io/unspaghettit/main/static/unspaghettit-demo.gif" alt="Unspaghettit demo: prompt in your AI agent, the runtime builds, the simulator's red line" width="820" />
29
20
  </p>
30
21
 
31
22
  ---
32
23
 
33
- ## Why Unspaghettit?
34
-
35
- AI coding works best when the human and the LLM share a stable model of the product. Without one, specs drift, prompts pile up, generated systems lose coherence, and important assumptions live only in chat history.
36
-
37
- In one line: **a way to keep AI-assisted software aligned with what you actually meant.**
38
-
39
- ## What it does
40
-
41
- Unspaghettit gives humans and LLMs a shared, **executable specification** for the systems they build together: a local, machine-checkable software design document that agents can read and update through MCP (the [Model Context Protocol](https://modelcontextprotocol.io) — how AI tools like Claude, Cursor, and Gemini talk to local programs).
42
-
43
- Instead of keeping product intent in long prompts or markdown that slowly goes stale, you model the behavior as structured pieces: features, surfaces, actions, state, rules, effects, events, invariants, and scenarios. The MCP server exposes that specification to your AI coding tool, so the LLM can inspect, simulate, edit, and audit the model through typed tool calls instead of guessing from prose.
44
-
45
- You can use it in both directions: start from an idea and drive **spec → code**, or point an LLM at an existing codebase and build a **code → spec** map that makes the current behavior explicit.
46
-
47
- The specification becomes the source of truth; prompts become disposable again.
48
-
49
- ## Who it's for
50
-
51
- - **Solo developers** shipping with an AI assistant who want product intent to survive between chat sessions.
52
- - **Small teams** where multiple humans and agents touch the same codebase and need a shared, versioned model of "what the product does".
53
- - **Technical founders / product-minded engineers** who want a machine-readable spec they can hand to an LLM and get an honest report back.
54
- - **Anyone with an existing codebase** that's drifted from its docs and wants the LLM to rebuild the spec from the code itself.
55
-
56
- ## Benefits
57
-
58
- - **Less drift between intent and code**: scenarios, generated types, and implementation coverage all point back to the same spec.
59
- - **Existing code becomes legible**: ask an LLM to reverse-map a codebase into features, actions, scenarios, and implementation coverage.
60
- - **AI agents get structured context**: the LLM reads focused entities and actions instead of a giant prompt blob.
61
- - **Specs become testable**: every scenario can run through the simulator before implementation exists.
62
- - **Implementation stays auditable**: `.unspa.json` records where each spec entity is implemented and reports gaps.
63
- - **Teams keep local ownership**: snapshots are plain JSON in your repo or local hub, with no hosted service required.
64
-
65
- ## Quickstart
66
-
67
- From nothing to a running Unspaghettit workspace:
68
-
69
- ```bash
70
- npm install -g unspaghettit
71
- cd path/to/your-app
72
- unspa init
73
- unspa dashboard
74
- ```
75
-
76
- `unspa init` wires the MCP server into the AI clients you choose. If your client supports skills or custom instructions, it can install the Unspaghettit guidance there too.
77
-
78
- Restart your IDE or AI client. When it comes back up, accept the MCP server and the guidance if your client asks. Then ask your LLM something like:
79
-
80
- ```text
81
- Using the Unspaghettit MCP, create a new project.
82
- Model the first feature and make it implementation-ready.
83
- ```
84
-
85
- The dashboard opens at `http://localhost:3000`, so you can watch the spec take shape while the LLM works.
86
-
87
- New to this? Hit `/tutorial` in the dashboard for a guided walkthrough (Project → Feature → Surface → Action → Parameter → Rule → Simulator, step by step).
88
-
89
- For the full list of supported AI clients, the `unspa init` flags, and the shared-hub layout for multi-repo setups, jump to [Installation](#installation-clients-flags-advanced-setup).
90
-
91
- ## Scenarios as executable spec tests
92
-
93
- The strongest idea in here, surfaced up front:
94
-
95
- > Every scenario you author is an **executable assertion** about behavior. `run_all_scenarios` runs them through the deterministic simulator and reports pass/fail per assertion — a unit test suite for the spec itself, before the implementation exists.
96
-
97
- Two complementary uses of the same scenarios:
98
-
99
- - **Spec self-test (always on).** `run_all_scenarios` checks that the spec is internally consistent: every scenario's expected outcome matches what the simulator computes from the rules. Catches contradictions in product logic before a line of code is written.
100
- - **Code-vs-spec test (preview).** `unspa scenarios export <featureId>` generates a Vitest file from those same scenarios, using the simulator's predictions as the oracle. You write one thin adapter (`UnspaAdapter` from `unspaghettit/cli/scenarios`) that calls your real implementation; the generated tests drive every scenario through it and assert state path-by-path. `unspa scenarios adapter <featureId>` **scaffolds that adapter for you** — a `case` per scenario-bearing action, pre-seeded with the implementation location from `.unspa.json` — so closing the loop is filling in TODOs, not writing the bridge from scratch. Experimental — adapter contract may shift between minor versions.
101
- - **Verified coverage (preview).** Run that spec (`vitest run --reporter=json`) and `unspa coverage ingest <report>` stamps each action whose scenarios all passed as **verified** in `.unspa.json` — promoting it from *"claimed implemented"* to *"proven against the spec"* (and clearing the stamp on a regression). `unspa check --min-verified <pct>` then gates the build on the share of a feature that's proven. The full loop: `scenarios adapter` → fill → `scenarios export` → `vitest --reporter=json` → `coverage ingest` → `check --min-verified`.
24
+ When you build with AI, the model never sees your system. It sees a fragment of context and guesses the rest from patterns. It doesn't understand. It infers.
102
25
 
103
- Scenarios can be **multi-step**: a scenario's `steps[]` replays preceding actions (each through the simulator, threading state forward) before the action under test, so `run_all_scenarios` verifies whole flows add to cart apply coupon checkout not just single transitions.
26
+ Unspaghettit replaces the guessing with a runtime: a structured, executable model of what your product is supposed to do, that humans and AI agents read and edit through MCP. Every scenario you write runs through a deterministic simulator and reports pass or fail, **before a line of code exists**.
104
27
 
105
- Specs stop being documentation. They become a runtime contract you can break loudly.
28
+ Prompts become disposable. The specification stays.
106
29
 
107
- ## Core capabilities
30
+ ## See it work
108
31
 
109
- - **Structured behavior specification**, features, surfaces, actions, states, rules, invariants, transitions, scenarios, personas, resources, entities, events.
110
- - **Code → spec mapping**, an LLM can read an existing repo, model its behavior into an Unspaghettit runtime, and wire the spec back to source files through the behavioral index.
111
- - **MCP-native**, every entity is created, read, edited, and validated through MCP tool calls. Works with any MCP-compatible IDE (Claude Code, Claude Desktop, Cursor, Gemini, Windsurf, Kiro, Codex).
112
- - **Deterministic simulator & bounded model checking**, `dry_run_simulate` runs an action against a state snapshot. `run_all_scenarios` runs every scenario as a deterministic spec test, with pass/fail per assertion. `model_check` exhaustively explores the reachable state space (bounded) to find what example flows can't: invariant counterexamples with the **shortest action path** that reaches them, dead actions, deadlocks, and unreachable/terminal surfaces.
113
- - **Safety + liveness properties**, invariants assert "nothing bad ever happens" — per-surface, feature-wide, or **cross-feature at the project level** (`projectInvariants`, e.g. "the orders feature's open count equals the billing feature's unpaid count", which a feature invariant can't reference). **Reachability goals** are the liveness complement: "something good stays reachable" — `reachable` (a target state is achievable) and `always_reachable` (it stays reachable from everywhere, with a counterexample path to any trap). All checked over the reachable state space.
114
- - **One-command verification gate**, `unspa check` runs the whole spine headlessly and **exits non-zero on failure** — scenarios + maturity + reachability + model checking + spec→code drift + cross-feature event coherence + verified coverage — so the spec becomes a CI gate, not a document (`--json` for dashboards). `unspa ci` scaffolds a GitHub Actions workflow that runs it on every push/PR. `verify` and `get_drift` are the in-chat MCP forms; the dashboard's **Verify** tab renders the verdict with navigable counterexample traces that deep-link to the violating action.
115
- - **Maturity scoring**, `score_feature` returns a per-area score with critical/recommended issues; surfaces the worst surfaces and biggest gaps.
116
- - **Generated TypeScript contracts**, `generate_types` writes types for state shapes, event names, and action parameters. Your implementation imports them, so TypeScript catches drift when the spec changes.
117
- - **Implementation audit**, record each implementation in a `.unspa.json` behavioral index (`{ file, line, signature }` per entity); the MCP reconciles it against the spec and reports coverage + gaps.
118
- - **Implementation queue**, per-project "implement next" list (Feature / Surface / Action items). Drag-and-drop reorder in the dashboard, `mcp__unspa__get_next_queued` so a dev says "implement the next thing" without naming it. Auto-prunes items the behavioral index marks done.
119
- - **Local-first**, everything lives in your repo. No telemetry, no hosted servers, no cloud dependency. Snapshots are plain JSON.
120
- - **Multi-agent ready**, built-in Yjs WebSocket server lets multiple humans and/or LLMs edit the same runtime in real time. History entries carry `AI · for John` attribution so MCP-driven changes are distinguishable from direct human edits.
121
- - **Encrypted backup / share**, the project page's **Export .unspa** button bundles project + features + status sidecars into a single passphrase-encrypted file. Passphrase never leaves the browser; envelope carries no identifier of contents. See [Security tiers](#security-tiers).
32
+ You, in your AI agent (Claude Code, Cursor, Gemini, Windsurf, Codex):
122
33
 
123
- ## Workflows — recipes by scenario
124
-
125
- The LLM does the reading and writing through the MCP in every direction; Unspaghettit gives it a structured target, a deterministic simulator, and a verification gate. Pick the recipe that matches where you're starting. Copy-paste prompts for each are in [Working with the MCP in chat](#working-with-the-mcp-in-chat).
126
-
127
- ### Scenario 1 — From scratch: a new product (spec → code)
128
-
129
- You have an idea and an AI assistant, and you want a spec you can trust *before and while* you build.
130
-
131
- 1. **Set up.** `unspa init` wires the MCP into your AI client; `unspa dashboard` lets you watch the model take shape at `http://localhost:3000`.
132
- 2. **Model it.** Tell the assistant what you're building and to use the Unspaghettit MCP at 100% maturity. It calls `create_project`, then `create_feature` / `apply_batch` to build surfaces, actions, state, rules, effects, events, invariants, and scenarios. Validation errors come back inline, so the model converges instead of drifting.
133
- 3. **Prove the spec is sound — before a line of code.** `run_all_scenarios` runs every scenario as a deterministic test; `model_check` explores the reachable state space for invariant counterexamples, dead actions, and soft-locks; `score_feature` / `get_spec_gaps` flag shallow modelling. Or one call: **`verify`**.
134
- 4. **Generate contracts.** `generate_types` writes TypeScript types for state shapes, event names, and parameters. Your code imports them, so TypeScript catches drift the moment the spec changes.
135
- 5. **Implement.** The assistant writes the code against those types, using the scenario results as the oracle, and records each entity's location in `.unspa.json` (`{file, line, signature}`) — never annotating source.
136
- 6. **Prove the code matches the spec.** `unspa scenarios adapter <id>` + `unspa scenarios export <id>` generate a Vitest suite from the scenarios; run it (`vitest --reporter=json`) and `unspa coverage ingest` marks each passing action **verified** (proven, not just claimed).
137
- 7. **Gate it.** `unspa ci` drops a GitHub Actions workflow running `unspa check --model-check --min-verified 80` on every push.
138
-
139
- ### Scenario 2 — Just one feature
140
-
141
- You have a project (yours, or one of the samples) and want to add one capability without boiling the ocean.
142
-
143
- 1. Ask for the feature by name, scoped tight and implementation-ready — e.g. *"add a refund-approval flow for the support agent; reuse existing billing concepts; 100% maturity."* A Feature is one LLM-sized slice (1–15 surfaces); keep it that size and split if it grows.
144
- 2. The assistant adds it with `add_feature_to_project` + `apply_batch`, reusing existing events / entities / resources where they fit.
145
- 3. `verify <featureId>` (or the dashboard's **Verify** tab) confirms scenarios pass, invariants hold, and nothing's unreachable. Implement, then `coverage ingest` to prove it.
146
-
147
- ### Scenario 3 — From an existing codebase (code → spec)
148
-
149
- You have a product whose behavior lives only in the code (and stale docs), and you want it made explicit and machine-checkable.
150
-
151
- 1. Point the assistant at the repo: *"read this repository and model the behavior already implemented; start with the most important user-facing flows."*
152
- 2. It reads the code and builds the model batch by batch — one Feature per coherent flow.
153
- 3. **Map it back.** For each spec entity it writes a `.unspa.json` entry pointing at the implementing `{file, line, signature}`, then `sync_from_index` reconciles the two and reports coverage + gaps.
154
- 4. **Find what's shallow or missing.** `score_feature`, `get_spec_gaps`, and `get_implementation_gaps` show where the model under-describes the code (or the code is unindexed). Iterate until it audits clean.
155
- 5. You now have a legible, machine-checkable map of what your product does, wired to the source — so future drift is visible.
156
-
157
- ### Scenario 4 — Keep spec and code in sync (audit & drift)
158
-
159
- The model exists and the code exists; you want to know, at any moment, whether they still agree.
160
-
161
- 1. **Did the spec change under the code?** `get_drift` lists every implementation audited against an older spec than the one now on disk — re-audit those.
162
- 2. **Does the code still do what the spec says?** Re-run the scenario suite and `unspa coverage ingest`; a regression clears the `verifiedAt` stamp, so the proven share drops and the gate notices.
163
- 3. **One verdict.** `verify` (or `unspa check` in CI) folds scenarios + maturity + reachability + model checking + drift + cross-feature event coherence + verified coverage into a single pass/warn/fail.
164
-
165
- ### Scenario 5 — Gate it in CI
166
-
167
- Make the spec a build gate, not a document that quietly rots.
168
-
169
- ```bash
170
- unspa init --local # so the model travels with the repo in git
171
- unspa ci # writes .github/workflows/unspaghettit.yml
172
- # …or hand-roll the gate with the thresholds you care about:
173
- unspa check --model-check --min-maturity 80 --min-verified 80 --fail-on-drift
174
34
  ```
175
-
176
- `unspa check` exits non-zero on failure (`--json` for CI dashboards). The MCP exposes the same as `verify` / `get_drift` for the in-chat flow, so chat and CI verify identically.
177
-
178
- ## Working with the MCP in chat
179
-
180
- Ready-to-paste prompt patterns for the common tasks: starting a new project, choosing a maturity level, asking questions about an existing spec, editing it, and moving from spec to implementation. Skim the subheadings and jump to the one you need.
181
-
182
- Once `unspa init` has registered the MCP server and your AI client has restarted, you do not need to speak in Unspaghettit internals. Start with the product you want. Mention the Unspaghettit or Unspa MCP, the scope, and the level of completeness you want. For a first prompt, asking for 100% maturity usually gives a much better result because it pushes the agent to create complete scenarios, rules, and checks instead of a shallow outline.
183
-
184
- ### Start with a prompt
185
-
186
- For a new product, this is usually enough:
187
-
188
- ```text
189
- Using the Unspaghettit MCP, create a new project.
190
- It is a mobile app that lets a user get one coupon each day for a shop near them.
35
+ Using the Unspaghettit MCP, create a project for a daily-coupon app.
36
+ A user gets one coupon per day for a shop near them.
191
37
  Make each feature reach 100% maturity.
192
38
  ```
193
39
 
194
- If you want a smaller first pass:
40
+ Unspaghettit builds a structured runtime instead of a wall of prose:
195
41
 
196
- ```text
197
- Using the Unspa MCP, create a new project for a B2B invoicing app.
198
- Start with three features only: customers, invoices, and payment follow-up.
199
- Make it a solid first draft, not necessarily 100% maturity yet.
200
- Ask me if a business rule is unclear.
201
42
  ```
202
-
203
- For one feature:
204
-
205
- ```text
206
- Using the Unspaghettit MCP, add a feature for approving refunds.
207
- Keep it focused on the support agent workflow.
208
- Make it implementation-ready and bring it to 100% maturity.
43
+ features · surfaces · actions · state · rules · invariants · scenarios
209
44
  ```
210
45
 
211
- For an existing codebase:
46
+ Then runs every scenario through the simulator:
212
47
 
213
- ```text
214
- Using the Unspaghettit MCP, read this repository and create a spec that describes the behavior already implemented.
215
- Start with the most important user-facing flows.
216
- Map each spec entity back to the files that implement it, then report what is unclear or missing.
217
48
  ```
218
-
219
- ### Choose the maturity level
220
-
221
- 100% maturity is the recommended default for a first serious prompt. It helps the agent produce a richer spec on the first pass. Lower the target only when you explicitly want brainstorming, discovery, or a partial draft.
222
-
223
- ```text
224
- Make this a rough product draft. Do not force 100% maturity yet.
225
- I want enough structure to discuss the flow and discover missing business rules.
226
- ```
227
-
228
- ```text
229
- Make this implementation-ready. Aim for 100% maturity.
230
- If anything prevents 100%, explain the missing product decision instead of inventing it.
49
+ ✓ user receives one coupon per day
50
+ ✓ coupon expires at midnight
51
+ ✗ second claim same day → blocked by invariant: DailyLimit
231
52
  ```
232
53
 
233
- ```text
234
- Do not chase the score blindly. Prefer a clear product spec.
235
- If a maturity check feels artificial for this feature, tell me why.
236
- ```
54
+ No code has been written yet. The spec already fails loudly exactly where it should. That red line is a contradiction caught at design time instead of in production.
237
55
 
238
- ### Ask questions about the spec
56
+ ## The problem it kills
239
57
 
240
- The MCP is also useful as a query layer. Ask the agent to inspect the current model instead of relying on memory or screenshots.
58
+ AI coding workflows go sideways fast. Specs drift. Prompts pile up. Generated systems lose coherence as they grow. Most tools answer this with markdown specs: documents the AI reads to generate code.
241
59
 
242
- ```text
243
- Using the Unspaghettit MCP, explain the Cart & checkout feature.
244
- Explain what the user can do, what can block them, and what happens after each important action.
245
- ```
60
+ A document can't tell you it contradicts itself. Markdown drifts in silence. You find out when the code breaks.
246
61
 
247
- ```text
248
- What can block Place order?
249
- Explain each blocker in product language and tell me which cases are already covered by scenarios.
250
- ```
251
-
252
- ```text
253
- Where is email verification used in this project?
254
- Tell me what depends on it and what would change if we removed that requirement.
255
- ```
256
-
257
- ```text
258
- Using the Unspaghettit MCP, make a report of the current implementation of the specs in this codebase.
259
- Tell me what is implemented, what is missing, and what looks stale.
260
- ```
261
-
262
- ### Change or extend the spec
263
-
264
- You can ask for changes in normal product language. Add constraints when they matter.
265
-
266
- ```text
267
- Using the Unspaghettit MCP, add a "Cancel subscription" flow.
268
- Reuse the existing billing concepts when possible.
269
- After the edit, tell me whether the maturity score changed and why.
270
- ```
271
-
272
- ```text
273
- Before changing the spec, propose the change in plain English.
274
- Once I approve, update the Unspaghettit project and run the relevant scenarios.
275
- ```
276
-
277
- ### Move from spec to implementation
278
-
279
- If you want code, say so in the same prompt. Include design, stack, and implementation constraints if they matter.
280
-
281
- ```text
282
- Using the Unspaghettit MCP, implement the next queued feature.
283
- Use the existing SvelteKit style and keep the UI quiet and mobile-friendly.
284
- After implementation, update the implementation report for the spec.
285
- ```
286
-
287
- ```text
288
- Using the Unspa MCP, implement the coupon discovery feature.
289
- Use the current app stack. If the spec is missing something needed for implementation,
290
- update the spec first, then write the code.
291
- ```
292
-
293
- Good first prompt pattern: mention the Unspaghettit MCP, describe the product, set the maturity level, and say whether you want spec only or spec plus implementation.
62
+ Unspaghettit takes the other path. Your spec isn't a document. It runs.
294
63
 
295
64
  ## What makes it different
296
65
 
297
- Unspaghettit is a local, executable specification layer for AI-assisted development. It gives the LLM durable project memory that can be validated, simulated, scored, and mapped back to source code.
298
-
299
- That makes it different from:
300
-
301
- - markdown prompt workflows, which are easy to write but cannot execute or report drift,
302
- - autonomous agent frameworks, which decide how work gets done but usually do not model product behavior as a contract,
303
- - hosted AI wrappers, which add a service boundary instead of keeping the source of truth in your repo,
304
- - no-code platforms, which own the implementation path,
305
- - code generators, because Unspaghettit generates contracts and audit data while your LLM or team writes the actual code.
66
+ Unspaghettit is a local, executable specification layer. It gives the LLM durable project memory that can be validated, simulated, scored, and mapped back to source code. That sets it apart from:
306
67
 
307
- ## Philosophy
68
+ - **Markdown prompt workflows**, which are easy to write but cannot execute or report drift.
69
+ - **Autonomous agent frameworks**, which decide how work gets done but rarely model product behavior as a contract.
70
+ - **Hosted AI wrappers**, which add a service boundary instead of keeping the source of truth in your repo.
71
+ - **No-code platforms**, which own the implementation path.
72
+ - **Code generators**, because Unspaghettit produces contracts and audit data while your LLM or team writes the actual code.
308
73
 
309
- - **Local-first.** Your repo holds the truth. No accounts, no telemetry, no hosted service.
310
- - **Simulation before implementation.** Prove the spec is internally consistent before writing the code that implements it.
311
- - **Explicit structure over prompt heuristics.** Humans and LLMs collaborate on the model, not on free-form prose.
312
- - **Deterministic logic in the spec; judgment in the humans.** The runtime owns the gates and consequences. Humans (and LLMs as humans' agents) own taste, scope, and the parts that don't compress.
74
+ It works in both directions. Start from an idea and drive spec → code, or point an LLM at an existing codebase and build a code → spec map that makes current behavior explicit.
313
75
 
314
- ## Installation (clients, flags, advanced setup)
315
-
316
- > The 30-second path is in [Quickstart](#quickstart) above. This section covers which AI clients are supported, the flags `unspa init` accepts, and the shared-hub layout for multi-repo setups.
317
- >
318
- > Developing on the CLI itself? Clone the repo, then `npm install && npm run build && npm link`. See [cli/README.md](cli/README.md) for the dev setup.
319
-
320
- ### Supported AI clients
321
-
322
- `unspa init` registers the MCP server with the AI clients you pick. Supported out of the box:
323
-
324
- | Client | Project config | Global config |
325
- | ------------------------ | ------------------------------- | -------------------------------------- |
326
- | Claude Code (CLI + VSC) | `.mcp.json` | `~/.claude.json` |
327
- | Claude Desktop | n/a (no project scope) | `%APPDATA%\Claude\claude_desktop_config.json` (Windows) / `~/Library/Application Support/Claude/...` (macOS) |
328
- | Cursor | `.cursor/mcp.json` | `~/.cursor/mcp.json` |
329
- | Gemini Code Assist / CLI | `.gemini/settings.json` | `~/.gemini/settings.json` |
330
- | Windsurf | n/a | `~/.codeium/windsurf/mcp_config.json` |
331
- | Kiro | `.kiro/settings/mcp.json` | `~/.kiro/settings/mcp.json` |
332
- | Codex (VS Code) | prints snippet to paste manually | (manual paste) |
333
-
334
- For Codex (and any other client without an automated config write), `unspa init` prints the MCP JSON snippet to copy into the client's settings.
335
-
336
- Re-running `unspa init` is safe, every step is idempotent. Existing entries are preserved; managed blocks refresh in place.
337
-
338
- You normally don't run the MCP server manually — your AI client spawns `unspa-mcp` on demand. `unspa serve` exists as a debugging hatch if you ever need to test the stdio interface yourself.
339
-
340
- ### Where the model lives (shared hub by default)
341
-
342
- `unspa init` needs no decision about storage: the behavior model lives in a **shared hub** at `~/.unspa-hub/unspa`, and both the MCP server and `unspa dashboard` discover it automatically on the first run — no `UNSPA_SNAPSHOTS`, no special launch directory. One source of truth across every repo and every client (including **Claude Desktop**, which has no project scope), and one `unspa dashboard` run from anywhere serves it.
343
-
344
- Want the model versioned **inside a specific repo** instead — travelling in git and PRs? Opt into a per-repo install:
76
+ ## Quickstart
345
77
 
346
78
  ```bash
347
- unspa init --local # scaffold this repo's unspa/ folder (found by walk-up)
348
- unspa init --custom # interactive: hub vs per-repo vs custom path
349
- unspa init --hub /custom/path # a non-default hub location (pins UNSPA_SNAPSHOTS)
79
+ npm install -g unspaghettit
350
80
  ```
351
81
 
352
- Discovery order, used by both the MCP and the dashboard: explicit `UNSPA_SNAPSHOTS` / `--snapshots` → a per-repo `unspa/` found by walking up from the launch directory → the shared hub. So a per-repo `unspa/` always wins when present, and everything else falls back to the hub.
353
-
354
- Switching later is just a re-run: `unspa init` for the hub, `unspa init --local` for per-repo, or `unspa dashboard --snapshots <path>` for a one-off look at any folder. All loopback / single-machine; the hub is not a network service.
355
-
356
- For the CLI details (commands, flags, troubleshooting), see [cli/README.md](cli/README.md).
357
-
358
- ## Example
359
-
360
- Boot `unspa dashboard` and click **Load samples** to install the bundled **eShop** project. It includes 4 features — Account & auth, Catalog & reviews, Cart & checkout, and Order fulfillment — each small enough for an agent to reason about end to end.
361
-
362
- The sample is intentionally complete: scenarios, rules, invariants, events, personas, entities, resources, and implementation mapping are all represented. Every feature scores 100% maturity, so it works as a clean reference model. To see maturity gaps, create a tiny scratch feature with an empty surface or an action without effects/scenarios; the dashboard will show the missing pieces.
363
-
364
- If you'd rather follow a guided tour than poke at the sample, the dashboard's `/tutorial` page also has a 14-section written walkthrough and a **Run interactive tutorial** button that drives a spotlight tour through Project → Feature → Surface → Action → Parameter → Rule → Simulator, prefilling fields along the way.
365
-
366
- ## Views
367
-
368
- The dashboard ships two views over the same model:
369
-
370
- - **Expert** (default) — the full control surface: projects, features, surfaces, actions, the simulator, maturity, and implementation coverage.
371
- - **Builder** (opt-in) — a simpler, guided view: browse projects → core features → features with Maturity / Built dials, accept AI-proposed improvements, and fill a per-project build queue where each item carries its own maturity / implementation goal.
372
-
373
- Expert is always on. Builder is opt-in — enable it whenever you want:
374
-
375
82
  ```bash
376
- unspa init --with builder # at setup (or just answer the init prompt)
377
- unspa view add builder # anytime; persists for every `unspa dashboard`
378
- unspa dashboard --view builder # one-off, no persistence
379
- unspa view remove builder # turn it back off
380
- unspa view list # show which views are enabled
381
- ```
382
-
383
- With one view enabled the header shows no switcher; enabling Builder adds an **Expert | Builder** toggle. Enabled views are persisted next to the model (`<snapshots>/views.json`).
384
-
385
- ## Collaboration
386
-
387
- Multiple humans + AI agents can edit the same runtime live:
388
-
389
- - **Real-time sync**, every dashboard tab subscribes to a per-room Yjs WebSocket. Out-of-band changes (MCP writes, other tabs) flow in without a reload, with an activity toast for each change carrying a breadcrumb path (`Project › Feature › Surface › Action`) and a "View" button.
390
- - **Identity**, click the round avatar in the header to set your display name. Every history entry you create is tagged with it. Stored in browser localStorage, never sent off-machine. First visit prompts once; the avatar dropdown is the explicit way to change or reset later.
391
- - **Attribution**, MCP-driven changes carry an `AI · for John` label, so the history shows both the agent and the human it is working with.
392
- - **Project history**, read-only timeline tab on the project page lists every change (rename, feature add/remove, queue mutation, …) with author + timestamp. The shared per-project room feeds it, so MCP edits and human edits land in the same audit log.
393
- - **Implementation queue**, drag-and-drop "implement next" list per project. The LLM uses `mcp__unspa__get_next_queued` so you can say "implement the next thing" without naming it. Items auto-prune as `.unspa.json` flips them to `implemented`.
394
- - **Backup / share**, the project page's **Export .unspa** button produces an encrypted bundle (project + features + status). The matching **Import .unspa** on the projects index restores it. Passphrase is required on both ends; the file itself reveals nothing about its contents.
395
-
396
- ## Security tiers
397
-
398
- Unspaghettit is local-first by default. Three tiers, all opt-in beyond the default:
399
-
400
- | Tier | Setup | What it covers |
401
- |---|---|---|
402
- | **Default** | `unspa dashboard` | Loopback bind (`127.0.0.1:3000`). No auth, no telemetry, no callhome. Single-machine trust boundary. |
403
- | **LAN-share** | `UNSPA_AUTH_TOKEN=<secret>`, optionally `UNSPA_ALLOWED_ORIGIN=http://host:3000`, then `unspa dashboard --host 0.0.0.0` | Every REST + WebSocket request requires the token. Origin allowlist closes browser-side CSRF. Set the **same** `UNSPA_AUTH_TOKEN` on the MCP server's env so its notify calls authenticate. The dashboard prints the auth posture in its startup banner. |
404
- | **Backup / share** (orthogonal to live sharing) | Click **Export .unspa** on a project, enter a passphrase ≥ 8 chars | AES-GCM-256 + PBKDF2-SHA256 (600k iterations). Passphrase never leaves the browser. Envelope carries no project name or metadata. |
405
-
406
- Full threat model + mitigations in [SECURITY.md](SECURITY.md).
407
-
408
- ## Architecture
409
-
410
- How the pieces fit at runtime:
411
-
412
- ```
413
- ┌──────────────────────────┐
414
- AI client │ MCP server (stdio) │
415
- (Claude / Cursor / ───→│ - typed tool surface │←─── your code
416
- Gemini / ...) │ - validation + simulator│ (via .unspa.json
417
- └────────────┬─────────────┘ behavioral
418
- │ index)
419
-
420
- ┌──────────────────────────┐
421
- │ unspa/ (or hub) │
422
- │ feature JSON snapshots │←──→ Yjs WebSocket
423
- │ = your runtime │ (live multi-agent)
424
- └────────────┬─────────────┘
425
-
426
-
427
- ┌──────────────────────────┐
428
- │ SvelteKit dashboard │
429
- │ (you, browsing the spec)│
430
- └──────────────────────────┘
431
- ```
432
-
433
- The spec is just JSON on disk. The MCP server, the dashboard, your AI client, and your application code all read and write through it. Nothing is hosted; everything is in your repo (or in a local hub you control).
434
-
435
- Where the code lives:
436
-
437
- ```
438
- unspaghettit/
439
- ├── unspa/ ← feature JSON snapshots (your runtime; empty on a fresh clone)
440
- ├── samples/ ← bundled sample projects (one folder per project, e.g. eshop/)
441
- ├── mcp-server/ ← MCP server (stdio)
442
- ├── src/ ← SvelteKit dashboard + domain
443
- │ ├── features/behavior-model/ ← Feature/Surface/Action entities + transforms
444
- │ ├── features/simulator/ ← deterministic simulator + bounded model checker
445
- │ ├── features/verification/ ← verification spine (drift, liveness, gated verdict)
446
- │ └── features/mcp-tools/ ← read-side tool implementations
447
- ├── cli/ ← `unspa` command (init / serve / dashboard)
448
- └── build/ ← SvelteKit production build (npm run build)
83
+ cd path/to/your-app
84
+ unspa init # scaffold + register the MCP with your AI clients
85
+ unspa dashboard # http://localhost:3000
449
86
  ```
450
87
 
451
- ## Where this came from
452
-
453
- Built internally at Lyriks because existing AI workflows were becoming increasingly hard to reason about as systems grew. The runtime became useful enough that we released it as standalone OSS — AGPL-licensed and separate from other Lyriks research work.
88
+ Restart your IDE. Your LLM now has the full runtime as typed MCP tools. Open the dashboard and click **Load samples** to explore a complete eShop project, or **Run interactive tutorial** for a guided tour.
454
89
 
455
- Early but functional. Used internally to model products, generate typed scaffolding, audit implementation against spec, run multi-agent editing sessions, and recursively refine the runtime itself.
90
+ Full setup, client config, and shared-hub mode: [docs/getting-started.md](docs/getting-started.md).
456
91
 
457
- ## Definitely Do Not Use This For Fun
92
+ ## Documentation
458
93
 
459
- *(RPG quests, interactive fiction, narrative worlds, tabletop campaign logic — for the avoidance of doubt.)*
94
+ | | |
95
+ | --- | --- |
96
+ | [Getting started](docs/getting-started.md) | Install, `unspa init`, client setup, hub mode, dashboard |
97
+ | [Core concepts](docs/concepts.md) | The model, scenarios as tests, maturity, model checking, the audit index |
98
+ | [Working with AI](docs/prompting.md) | Prompt patterns for spec, query, edit, and implementation |
99
+ | [Collaboration](docs/collaboration.md) | Multi-agent editing, real-time sync, attribution, history |
100
+ | [Security](docs/security.md) | Trust tiers, LAN sharing, encrypted backup |
101
+ | [Architecture](docs/architecture.md) | Repo layout, how the pieces fit, project status |
102
+ | [Worlds & quests](docs/worldbuilding.md) | Modeling interactive fiction and narrative state (for the brave) |
460
103
 
461
- If you have read this far, one final piece of very serious advice.
104
+ ## Status
462
105
 
463
- Under no circumstances should you try using Unspaghettit to model RPG quests, branching stories, interactive fiction, tabletop campaign logic, NPC behavior, faction states, mystery plots, puzzle chains, or alternate endings any narrative system where choices, rules, consequences, and world state need to stay coherent.
106
+ Early but functional. Used internally at [Lyriks.io](https://lyriks.io) to model products, generate typed scaffolding, audit implementation against spec, run multi-agent editing sessions, and recursively refine the runtime itself. We released it because existing AI workflows became hard to reason about as systems grew, and this fixed it.
464
107
 
465
- You might discover that executable specs are suspiciously good at checking whether a dragon deal can be broken, whether a locked door can be opened before the key exists, whether two endings contradict each other, or whether your "simple little side quest" has quietly become a state machine with twelve emotional failure modes.
466
-
467
- There are two halves. **Building** the world maps locations to surfaces, world state to shared state, NPC schedules to time-driven rules, and "what the player can do here" to actions with preconditions. **Playing** the world is the dangerous part: a chat reads a saved game file on every turn, maps the player's intent to a modeled action, asks the deterministic simulator to resolve it, applies the diff back to disk, and narrates the result. The save file is canonical — your inventory, time of day, and current location survive the LLM forgetting the conversation.
468
-
469
- It will probably not become the fastest game ever made, but it may become a strangely coherent one. Unspaghettit holds the deterministic logic: the rules, the gates, the consequences, the world state. The LLM gets all the room it needs to invent everything that should stay human-shaped: emotion, atmosphere, dialogue, visual design, awkward silences, suspicious taverns, bad decisions, and the exact kind of rain that falls before a betrayal.
470
-
471
- Unspaghettit does not know how to be human. That is not its job. But for deterministic logic, it is a menace.
472
-
473
- The two skills that make this possible (`unspa-worldbuild` and `unspa-worldplay`) are experimental and opt-in. The `unspa init` flow asks before installing them, or you can pass `--fun` to pre-check the box. (You may also notice the package publishes a longer bin alias — `unspaghettit` instead of `unspa`. Try invoking that name. Just don't tell anyone.)
108
+ ## License
474
109
 
475
- This would be extremely dangerous, because you may have fun.
110
+ AGPL-3.0. Free to use, study, modify, and self-host. Improvements and derivative networked versions stay open under the same license. For SSO, RBAC, audit trails, and encryption at rest, see the enterprise build (`hello@lyriks.io`).
476
111
 
477
112
  ---
478
113
 
479
- ## License
480
-
481
- AGPL-3.0. You're free to use, study, modify, and self-host. Improvements and derivative networked versions stay open under the same license. See [LICENSE](LICENSE).
482
-
483
- Enterprise-grade support and private commercial setups are available via `hello@lyriks.io`. Everything in this repo stays open under AGPL.
114
+ <p align="center">If Unspaghettit resonates, a ⭐ helps other people find it. An open-source project by <a href="https://lyriks.io">Lyriks.io</a>.</p>