unspaghettit 0.2.0 → 0.3.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 (270) hide show
  1. package/build/client/_app/immutable/assets/0.DSctqr5I.css +1 -0
  2. package/build/client/_app/immutable/assets/0.DSctqr5I.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.DSctqr5I.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +1 -0
  5. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
  6. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
  7. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js +1 -0
  8. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/B439_FLv.js +1 -0
  11. package/build/client/_app/immutable/chunks/B439_FLv.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/B439_FLv.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/BCEY79Dw.js +1 -0
  14. package/build/client/_app/immutable/chunks/BCEY79Dw.js.br +2 -0
  15. package/build/client/_app/immutable/chunks/BCEY79Dw.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/{DBJWcC6Y.js → BYIrIC5L.js} +1 -1
  17. package/build/client/_app/immutable/chunks/BYIrIC5L.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BYIrIC5L.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/B_9TWPrx2.js +1 -0
  20. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/BvOhVtZg.js +1 -0
  23. package/build/client/_app/immutable/chunks/BvOhVtZg.js.br +1 -0
  24. package/build/client/_app/immutable/chunks/BvOhVtZg.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/CY3em1ma2.js +1 -0
  26. package/build/client/_app/immutable/chunks/CY3em1ma2.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/CY3em1ma2.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/CgdRZPgI.js +1 -0
  29. package/build/client/_app/immutable/chunks/CgdRZPgI.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/CgdRZPgI.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/D5speDV82.js +908 -0
  32. package/build/client/_app/immutable/chunks/D5speDV82.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js +1 -0
  35. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{DatGSObE.js → OJscNS3T.js} +1 -1
  38. package/build/client/_app/immutable/chunks/OJscNS3T.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/OJscNS3T.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/U9p9CtKG2.js +2 -0
  41. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.gz +0 -0
  43. package/build/client/_app/immutable/entry/app.Cd4S3giu.js +2 -0
  44. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.br +0 -0
  45. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.gz +0 -0
  46. package/build/client/_app/immutable/entry/start.C3xXQVkq.js +1 -0
  47. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.br +0 -0
  48. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js +4 -0
  50. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{1.KYdA6ppX.js → 1.Dyte3Ggf.js} +1 -1
  53. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.br +2 -0
  54. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/10.ivxAosDg.js +2 -0
  56. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{9.CMW6a2Lg.js → 11.wvMfJKC2.js} +1 -1
  59. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{2.DBz20KgG.js → 2.CmPPom9Z.js} +1 -1
  62. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js +1 -0
  65. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/{4.BvMzqBJj.js → 4.DbfAvO8Z.js} +1 -1
  68. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js +42 -0
  71. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js +1 -0
  74. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/{6.BOHISqs-.js → 7.Ejs18ZUc.js} +1 -1
  77. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/{7.CemgNJfw.js → 8.B-HweAc8.js} +1 -1
  80. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js +5 -0
  83. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.gz +0 -0
  85. package/build/client/_app/version.json +1 -1
  86. package/build/client/_app/version.json.br +0 -0
  87. package/build/client/_app/version.json.gz +0 -0
  88. package/build/client/lyriks_logo.svg +148 -0
  89. package/build/client/lyriks_logo.svg.br +0 -0
  90. package/build/client/lyriks_logo.svg.gz +0 -0
  91. package/build/server/chunks/{0-C_o0oz-N.js → 0-Co8kcANG.js} +4 -4
  92. package/build/server/chunks/{0-C_o0oz-N.js.map → 0-Co8kcANG.js.map} +1 -1
  93. package/build/server/chunks/1-BSUItTig.js +9 -0
  94. package/build/server/chunks/{1-DPpKAKXV.js.map → 1-BSUItTig.js.map} +1 -1
  95. package/build/server/chunks/10-BygvxrZp.js +9 -0
  96. package/build/server/chunks/10-BygvxrZp.js.map +1 -0
  97. package/build/server/chunks/11-DRx0tRx2.js +9 -0
  98. package/build/server/chunks/11-DRx0tRx2.js.map +1 -0
  99. package/build/server/chunks/{2-AlfFqtL1.js → 2-BQT3m1vc.js} +3 -3
  100. package/build/server/chunks/{2-AlfFqtL1.js.map → 2-BQT3m1vc.js.map} +1 -1
  101. package/build/server/chunks/{3-vbjUt_51.js → 3-DPZ9BquJ.js} +3 -3
  102. package/build/server/chunks/{3-vbjUt_51.js.map → 3-DPZ9BquJ.js.map} +1 -1
  103. package/build/server/chunks/{4-BNow4x6D.js → 4-DHo47YX6.js} +3 -3
  104. package/build/server/chunks/{4-BNow4x6D.js.map → 4-DHo47YX6.js.map} +1 -1
  105. package/build/server/chunks/5-Cp9evBAG.js +9 -0
  106. package/build/server/chunks/5-Cp9evBAG.js.map +1 -0
  107. package/build/server/chunks/6-DiBq3bOV.js +9 -0
  108. package/build/server/chunks/6-DiBq3bOV.js.map +1 -0
  109. package/build/server/chunks/{6-QQ7r8Rd5.js → 7-C4hmS0dG.js} +3 -3
  110. package/build/server/chunks/{6-QQ7r8Rd5.js.map → 7-C4hmS0dG.js.map} +1 -1
  111. package/build/server/chunks/{7-CbPLGaIG.js → 8-CFFuDzBC.js} +4 -4
  112. package/build/server/chunks/{7-CbPLGaIG.js.map → 8-CFFuDzBC.js.map} +1 -1
  113. package/build/server/chunks/9-nhhKZJrs.js +9 -0
  114. package/build/server/chunks/9-nhhKZJrs.js.map +1 -0
  115. package/build/server/chunks/BehaviorGraph-m5kYj5HH.js +757 -0
  116. package/build/server/chunks/BehaviorGraph-m5kYj5HH.js.map +1 -0
  117. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js → FeatureCard-CfbXNYe8.js} +2 -2
  118. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js.map → FeatureCard-CfbXNYe8.js.map} +1 -1
  119. package/build/server/chunks/{ProgressBar-CfhccQ83.js → ProgressBar-DDoQJ_C9.js} +2 -2
  120. package/build/server/chunks/ProgressBar-DDoQJ_C9.js.map +1 -0
  121. package/build/server/chunks/{ProjectsIndex-CoDrvRya.js → ProjectsIndex-DUVJ3hyL.js} +2 -2
  122. package/build/server/chunks/{ProjectsIndex-CoDrvRya.js.map → ProjectsIndex-DUVJ3hyL.js.map} +1 -1
  123. package/build/server/chunks/TransitionCatalog-B8zHs-2E.js +271 -0
  124. package/build/server/chunks/TransitionCatalog-B8zHs-2E.js.map +1 -0
  125. package/build/server/chunks/{_layout.svelte-BREws55o.js → _layout.svelte-CLTmk0xU.js} +66 -15
  126. package/build/server/chunks/_layout.svelte-CLTmk0xU.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-De508ek8.js → _page.svelte-B1nG3PKn.js} +4 -4
  128. package/build/server/chunks/{_page.svelte-De508ek8.js.map → _page.svelte-B1nG3PKn.js.map} +1 -1
  129. package/build/server/chunks/{_page.svelte-Zf9H4KOP.js → _page.svelte-BW_nbAAH.js} +11 -315
  130. package/build/server/chunks/_page.svelte-BW_nbAAH.js.map +1 -0
  131. package/build/server/chunks/{_page.svelte-BqSC-1vK.js → _page.svelte-Caq7J0jU.js} +91 -47
  132. package/build/server/chunks/_page.svelte-Caq7J0jU.js.map +1 -0
  133. package/build/server/chunks/{_page.svelte-B7hT3P8E.js → _page.svelte-Cham-dsM.js} +4 -4
  134. package/build/server/chunks/{_page.svelte-B7hT3P8E.js.map → _page.svelte-Cham-dsM.js.map} +1 -1
  135. package/build/server/chunks/_page.svelte-Dhwjwph_.js +41 -0
  136. package/build/server/chunks/_page.svelte-Dhwjwph_.js.map +1 -0
  137. package/build/server/chunks/{_page.svelte-BKKCa9H5.js → _page.svelte-DlFVT40-.js} +3 -3
  138. package/build/server/chunks/{_page.svelte-BKKCa9H5.js.map → _page.svelte-DlFVT40-.js.map} +1 -1
  139. package/build/server/chunks/{_page.svelte-BtI2zZ_Z.js → _page.svelte-NVT2dzpG.js} +176 -327
  140. package/build/server/chunks/_page.svelte-NVT2dzpG.js.map +1 -0
  141. package/build/server/chunks/{_page.svelte-BKTveFAj.js → _page.svelte-Oj-W7G5s.js} +5 -5
  142. package/build/server/chunks/{_page.svelte-BKTveFAj.js.map → _page.svelte-Oj-W7G5s.js.map} +1 -1
  143. package/build/server/chunks/_page.svelte-Z_kK2lHY.js +68 -0
  144. package/build/server/chunks/_page.svelte-Z_kK2lHY.js.map +1 -0
  145. package/build/server/chunks/{builderModeStore.svelte-ihupr-3p.js → builderModeStore.svelte-BpRIU_zP.js} +217 -6
  146. package/build/server/chunks/builderModeStore.svelte-BpRIU_zP.js.map +1 -0
  147. package/build/server/chunks/client-DeX3TC3s.js +51 -0
  148. package/build/server/chunks/{client-DfpLcAZ9.js.map → client-DeX3TC3s.js.map} +1 -1
  149. package/build/server/chunks/{error.svelte-C35KOpru.js → error.svelte-Cdjeq3L2.js} +4 -4
  150. package/build/server/chunks/{error.svelte-C35KOpru.js.map → error.svelte-Cdjeq3L2.js.map} +1 -1
  151. package/build/server/chunks/featureStore.svelte-DIYgPBVm.js +161 -0
  152. package/build/server/chunks/featureStore.svelte-DIYgPBVm.js.map +1 -0
  153. package/build/server/chunks/{hooks.server-Rv301GTB.js → hooks.server-y3jdg_sB.js} +6 -2
  154. package/build/server/chunks/hooks.server-y3jdg_sB.js.map +1 -0
  155. package/build/server/chunks/{internal-BPKrFkK1.js → internal-KYK0WpL7.js} +4 -4
  156. package/build/server/chunks/{internal-BPKrFkK1.js.map → internal-KYK0WpL7.js.map} +1 -1
  157. package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js +313 -0
  158. package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js.map +1 -0
  159. package/build/server/chunks/{reconcile-Dv7jS3C8.js → reconcile-B5xqb6-s.js} +3 -272
  160. package/build/server/chunks/reconcile-B5xqb6-s.js.map +1 -0
  161. package/build/server/chunks/registry-DqAn_hVE.js +21 -0
  162. package/build/server/chunks/registry-DqAn_hVE.js.map +1 -0
  163. package/build/server/chunks/{state-CpLVNZq7.js → state-DBjl9lhV.js} +2 -2
  164. package/build/server/chunks/{state-CpLVNZq7.js.map → state-DBjl9lhV.js.map} +1 -1
  165. package/build/server/index.js +1 -1
  166. package/build/server/index.js.map +1 -1
  167. package/build/server/manifest.js +33 -17
  168. package/build/server/manifest.js.map +1 -1
  169. package/cli/commands/dashboard.ts +14 -0
  170. package/cli/commands/init.ts +26 -0
  171. package/cli/commands/theme.ts +62 -0
  172. package/cli/unspa.ts +38 -2
  173. package/cli/util/context-files.ts +5 -0
  174. package/cli/util/theme.ts +34 -0
  175. package/mcp-server/sync-notifier.ts +88 -35
  176. package/package.json +2 -1
  177. package/src/app.css +187 -0
  178. package/src/app.html +15 -1
  179. package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +531 -0
  180. package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +492 -0
  181. package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +370 -0
  182. package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +13 -5
  183. package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +43 -0
  184. package/src/features/builder-mode/domain/BuilderModeDashboard.ts +7 -1
  185. package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +78 -16
  186. package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +25 -0
  187. package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +247 -3
  188. package/src/features/projects/presentation/components/ProjectEditor.svelte +7 -0
  189. package/src/features/simulator/application/use-cases/RunScenarios.ts +15 -1
  190. package/src/hooks.server.ts +11 -1
  191. package/src/lib/theme/registry.ts +77 -0
  192. package/src/lib/theme/themeStore.svelte.ts +64 -0
  193. package/src/routes/+layout.svelte +184 -30
  194. package/src/routes/features/[id]/graph/+page.svelte +34 -0
  195. package/src/routes/projects/[id]/graph/+page.svelte +79 -0
  196. package/src/shared/presentation/components/ProgressBar.svelte +1 -1
  197. package/src/shared/presentation/toast/SyncToast.svelte +14 -3
  198. package/src/shared/presentation/toast/viewLinkResolver.ts +32 -0
  199. package/static/lyriks_logo.svg +148 -0
  200. package/build/client/_app/immutable/assets/0.DFMDYAU9.css +0 -1
  201. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.br +0 -0
  202. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.gz +0 -0
  203. package/build/client/_app/immutable/chunks/BO66rBOa2.js +0 -1
  204. package/build/client/_app/immutable/chunks/BO66rBOa2.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/BO66rBOa2.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.br +0 -0
  207. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
  208. package/build/client/_app/immutable/chunks/DHoA038D.js +0 -1
  209. package/build/client/_app/immutable/chunks/DHoA038D.js.br +0 -2
  210. package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -0
  211. package/build/client/_app/immutable/chunks/DatGSObE.js.br +0 -0
  212. package/build/client/_app/immutable/chunks/DatGSObE.js.gz +0 -0
  213. package/build/client/_app/immutable/chunks/DjWKKtqp.js +0 -1
  214. package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +0 -1
  215. package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
  216. package/build/client/_app/immutable/chunks/Dq0DUAz1.js +0 -1
  217. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.br +0 -0
  218. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.gz +0 -0
  219. package/build/client/_app/immutable/chunks/iQu0D9Ux.js +0 -1
  220. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.br +0 -0
  221. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.gz +0 -0
  222. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js +0 -2
  223. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.br +0 -0
  224. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.gz +0 -0
  225. package/build/client/_app/immutable/entry/start.D5GPCQZD.js +0 -1
  226. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.br +0 -0
  227. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.gz +0 -0
  228. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js +0 -4
  229. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.br +0 -0
  230. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.gz +0 -0
  231. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.br +0 -2
  232. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -0
  233. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.br +0 -0
  234. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.gz +0 -0
  235. package/build/client/_app/immutable/nodes/3.19DIoFtw.js +0 -1
  236. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.br +0 -0
  237. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.gz +0 -0
  238. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.br +0 -0
  239. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
  240. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +0 -42
  241. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.br +0 -0
  242. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.gz +0 -0
  243. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.br +0 -0
  244. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -0
  245. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.br +0 -0
  246. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.gz +0 -0
  247. package/build/client/_app/immutable/nodes/8.DejSfIYh.js +0 -5
  248. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.br +0 -0
  249. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.gz +0 -0
  250. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.br +0 -0
  251. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
  252. package/build/server/chunks/1-DPpKAKXV.js +0 -9
  253. package/build/server/chunks/5-D7OCJpxD.js +0 -9
  254. package/build/server/chunks/5-D7OCJpxD.js.map +0 -1
  255. package/build/server/chunks/8-CVO-E-sf.js +0 -9
  256. package/build/server/chunks/8-CVO-E-sf.js.map +0 -1
  257. package/build/server/chunks/9-DxT1baO5.js +0 -9
  258. package/build/server/chunks/9-DxT1baO5.js.map +0 -1
  259. package/build/server/chunks/ProgressBar-CfhccQ83.js.map +0 -1
  260. package/build/server/chunks/_layout.svelte-BREws55o.js.map +0 -1
  261. package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +0 -1
  262. package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +0 -1
  263. package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +0 -1
  264. package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +0 -1
  265. package/build/server/chunks/client-DfpLcAZ9.js +0 -24
  266. package/build/server/chunks/hooks.server-Rv301GTB.js.map +0 -1
  267. package/build/server/chunks/reconcile-Dv7jS3C8.js.map +0 -1
  268. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css → 11.nv0I59TU.css} +0 -0
  269. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.br → 11.nv0I59TU.css.br} +0 -0
  270. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.gz → 11.nv0I59TU.css.gz} +0 -0
@@ -0,0 +1,161 @@
1
+ import { q as derived } from './index-server-7H0jzj0M.js';
2
+ import { h as getBrowserContainer, F as FeatureValidationError } from './browserContainer-CNX7ANld.js';
3
+ import { e as emit } from './eventBus-B9k-Vzso.js';
4
+ import { d as deepClonePlain, g as getRoomClient, r as reconcileInPlace } from './reconcile-B5xqb6-s.js';
5
+
6
+ //#region src/features/behavior-model/presentation/stores/featureStore.svelte.ts
7
+ var FeatureStore = class {
8
+ loading = true;
9
+ feature = null;
10
+ error = null;
11
+ saveError = null;
12
+ saving = false;
13
+ historyEntries = [];
14
+ historyCursor = -1;
15
+ #canUndo = derived(() => this.historyCursor > 0);
16
+ get canUndo() {
17
+ return this.#canUndo();
18
+ }
19
+ set canUndo($$value) {
20
+ return this.#canUndo($$value);
21
+ }
22
+ #canRedo = derived(() => this.historyCursor >= 0 && this.historyCursor < this.historyEntries.length - 1);
23
+ get canRedo() {
24
+ return this.#canRedo();
25
+ }
26
+ set canRedo($$value) {
27
+ return this.#canRedo($$value);
28
+ }
29
+ currentId = null;
30
+ client = null;
31
+ clientUnsubscribe = null;
32
+ historyUnsubscribe = null;
33
+ async load(id) {
34
+ try {
35
+ this.loading = true;
36
+ this.error = null;
37
+ this.currentId = id;
38
+ const fresh = await (await getBrowserContainer()).useCases.getFeature(id);
39
+ this.feature = fresh;
40
+ this.subscribeRoom(id);
41
+ } catch (e) {
42
+ this.error = e.message;
43
+ } finally {
44
+ this.loading = false;
45
+ }
46
+ }
47
+ async mutate(mutator) {
48
+ if (!this.feature || !this.currentId) return;
49
+ const currentSnapshot = this.feature;
50
+ const next = mutator(currentSnapshot);
51
+ const cleanNext = next === currentSnapshot ? currentSnapshot : deepClonePlain(next);
52
+ this.applyNext(cleanNext);
53
+ if (!this.client) return;
54
+ this.saving = true;
55
+ this.saveError = null;
56
+ try {
57
+ this.client.setSnapshot(cleanNext);
58
+ emit("feature.saved", {
59
+ id: String(cleanNext.id),
60
+ name: cleanNext.name
61
+ });
62
+ } catch (e) {
63
+ if (e instanceof FeatureValidationError && e.errors.length > 0) this.saveError = `${e.message}\n• ${e.errors.join("\n• ")}`;
64
+ else this.saveError = e.message;
65
+ } finally {
66
+ this.saving = false;
67
+ }
68
+ }
69
+ dismissSaveError() {
70
+ this.saveError = null;
71
+ }
72
+ reset() {
73
+ if (this.clientUnsubscribe) {
74
+ this.clientUnsubscribe();
75
+ this.clientUnsubscribe = null;
76
+ }
77
+ if (this.historyUnsubscribe) {
78
+ this.historyUnsubscribe();
79
+ this.historyUnsubscribe = null;
80
+ }
81
+ this.client = null;
82
+ this.currentId = null;
83
+ this.feature = null;
84
+ this.error = null;
85
+ this.saveError = null;
86
+ this.loading = true;
87
+ this.saving = false;
88
+ this.historyEntries = [];
89
+ this.historyCursor = -1;
90
+ }
91
+ /**
92
+ * Step the shared history cursor backward by one. The server applies the
93
+ * previous snapshot to the Y.Doc and broadcasts a fresh history_snapshot;
94
+ * the room observer below picks up the resulting remote map write and
95
+ * reconciles the live feature into the new state. No local replay, no
96
+ * new history entry.
97
+ */
98
+ undo() {
99
+ this.client?.undo();
100
+ }
101
+ redo() {
102
+ this.client?.redo();
103
+ }
104
+ /** Time-travel directly to a specific history entry. */
105
+ jumpToHistory(entryId) {
106
+ this.client?.jumpTo(entryId);
107
+ }
108
+ /**
109
+ * Wipe the feature's shared history. The server replies with a fresh
110
+ * snapshot containing a single "Cleared history" anchor — every peer
111
+ * sees the same wipe via the room's broadcast. The current state of
112
+ * the feature itself is untouched.
113
+ */
114
+ clearHistory() {
115
+ this.client?.clearHistory();
116
+ }
117
+ subscribeRoom(id) {
118
+ if (this.clientUnsubscribe) {
119
+ this.clientUnsubscribe();
120
+ this.clientUnsubscribe = null;
121
+ }
122
+ if (this.historyUnsubscribe) {
123
+ this.historyUnsubscribe();
124
+ this.historyUnsubscribe = null;
125
+ }
126
+ const client = getRoomClient("feature", id);
127
+ this.client = client;
128
+ this.clientUnsubscribe = client.observe((next, origin) => {
129
+ if (origin === "local") return;
130
+ if (!next) return;
131
+ if (this.currentId !== id) return;
132
+ this.applyNext(next);
133
+ });
134
+ this.historyEntries = client.history.entries;
135
+ this.historyCursor = client.history.cursor;
136
+ this.historyUnsubscribe = client.observeHistory((view) => {
137
+ if (this.currentId !== id) return;
138
+ this.historyEntries = view.entries;
139
+ this.historyCursor = view.cursor;
140
+ });
141
+ }
142
+ /**
143
+ * Bring the live $state proxy in step with `next` while preserving the
144
+ * identity of every unchanged sub-tree. Critical for reorders: a naive
145
+ * field-by-field replace (what fast-json-patch generates) creates a
146
+ * transient duplicate-id state that Svelte's keyed `{#each}` rejects with
147
+ * `each_key_duplicate`. The reconciler moves items via array splice so the
148
+ * each block sees a clean rearrangement.
149
+ */
150
+ applyNext(next) {
151
+ if (!this.feature) {
152
+ this.feature = next;
153
+ return;
154
+ }
155
+ reconcileInPlace(this.feature, next);
156
+ }
157
+ };
158
+ var featureStore = new FeatureStore();
159
+
160
+ export { featureStore as f };
161
+ //# sourceMappingURL=featureStore.svelte-DIYgPBVm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"featureStore.svelte-DIYgPBVm.js","sources":["../../../.svelte-kit/adapter-node/chunks/featureStore.svelte.js"],"sourcesContent":["import { l as derived } from \"./index-server.js\";\nimport { t as getBrowserContainer, u as FeatureValidationError } from \"./browserContainer.js\";\nimport { t as emit } from \"./eventBus.js\";\nimport { n as reconcileInPlace, r as getRoomClient, t as deepClonePlain } from \"./reconcile.js\";\n//#region src/features/behavior-model/presentation/stores/featureStore.svelte.ts\nvar FeatureStore = class {\n\tloading = true;\n\tfeature = null;\n\terror = null;\n\tsaveError = null;\n\tsaving = false;\n\thistoryEntries = [];\n\thistoryCursor = -1;\n\t#canUndo = derived(() => this.historyCursor > 0);\n\tget canUndo() {\n\t\treturn this.#canUndo();\n\t}\n\tset canUndo($$value) {\n\t\treturn this.#canUndo($$value);\n\t}\n\t#canRedo = derived(() => this.historyCursor >= 0 && this.historyCursor < this.historyEntries.length - 1);\n\tget canRedo() {\n\t\treturn this.#canRedo();\n\t}\n\tset canRedo($$value) {\n\t\treturn this.#canRedo($$value);\n\t}\n\tcurrentId = null;\n\tclient = null;\n\tclientUnsubscribe = null;\n\thistoryUnsubscribe = null;\n\tasync load(id) {\n\t\ttry {\n\t\t\tthis.loading = true;\n\t\t\tthis.error = null;\n\t\t\tthis.currentId = id;\n\t\t\tconst fresh = await (await getBrowserContainer()).useCases.getFeature(id);\n\t\t\tthis.feature = fresh;\n\t\t\tthis.subscribeRoom(id);\n\t\t} catch (e) {\n\t\t\tthis.error = e.message;\n\t\t} finally {\n\t\t\tthis.loading = false;\n\t\t}\n\t}\n\tasync mutate(mutator) {\n\t\tif (!this.feature || !this.currentId) return;\n\t\tconst currentSnapshot = this.feature;\n\t\tconst next = mutator(currentSnapshot);\n\t\tconst cleanNext = next === currentSnapshot ? currentSnapshot : deepClonePlain(next);\n\t\tthis.applyNext(cleanNext);\n\t\tif (!this.client) return;\n\t\tthis.saving = true;\n\t\tthis.saveError = null;\n\t\ttry {\n\t\t\tthis.client.setSnapshot(cleanNext);\n\t\t\temit(\"feature.saved\", {\n\t\t\t\tid: String(cleanNext.id),\n\t\t\t\tname: cleanNext.name\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tif (e instanceof FeatureValidationError && e.errors.length > 0) this.saveError = `${e.message}\\n• ${e.errors.join(\"\\n• \")}`;\n\t\t\telse this.saveError = e.message;\n\t\t} finally {\n\t\t\tthis.saving = false;\n\t\t}\n\t}\n\tdismissSaveError() {\n\t\tthis.saveError = null;\n\t}\n\treset() {\n\t\tif (this.clientUnsubscribe) {\n\t\t\tthis.clientUnsubscribe();\n\t\t\tthis.clientUnsubscribe = null;\n\t\t}\n\t\tif (this.historyUnsubscribe) {\n\t\t\tthis.historyUnsubscribe();\n\t\t\tthis.historyUnsubscribe = null;\n\t\t}\n\t\tthis.client = null;\n\t\tthis.currentId = null;\n\t\tthis.feature = null;\n\t\tthis.error = null;\n\t\tthis.saveError = null;\n\t\tthis.loading = true;\n\t\tthis.saving = false;\n\t\tthis.historyEntries = [];\n\t\tthis.historyCursor = -1;\n\t}\n\t/**\n\t* Step the shared history cursor backward by one. The server applies the\n\t* previous snapshot to the Y.Doc and broadcasts a fresh history_snapshot;\n\t* the room observer below picks up the resulting remote map write and\n\t* reconciles the live feature into the new state. No local replay, no\n\t* new history entry.\n\t*/\n\tundo() {\n\t\tthis.client?.undo();\n\t}\n\tredo() {\n\t\tthis.client?.redo();\n\t}\n\t/** Time-travel directly to a specific history entry. */\n\tjumpToHistory(entryId) {\n\t\tthis.client?.jumpTo(entryId);\n\t}\n\t/**\n\t* Wipe the feature's shared history. The server replies with a fresh\n\t* snapshot containing a single \"Cleared history\" anchor — every peer\n\t* sees the same wipe via the room's broadcast. The current state of\n\t* the feature itself is untouched.\n\t*/\n\tclearHistory() {\n\t\tthis.client?.clearHistory();\n\t}\n\tsubscribeRoom(id) {\n\t\tif (this.clientUnsubscribe) {\n\t\t\tthis.clientUnsubscribe();\n\t\t\tthis.clientUnsubscribe = null;\n\t\t}\n\t\tif (this.historyUnsubscribe) {\n\t\t\tthis.historyUnsubscribe();\n\t\t\tthis.historyUnsubscribe = null;\n\t\t}\n\t\tconst client = getRoomClient(\"feature\", id);\n\t\tthis.client = client;\n\t\tthis.clientUnsubscribe = client.observe((next, origin) => {\n\t\t\tif (origin === \"local\") return;\n\t\t\tif (!next) return;\n\t\t\tif (this.currentId !== id) return;\n\t\t\tthis.applyNext(next);\n\t\t});\n\t\tthis.historyEntries = client.history.entries;\n\t\tthis.historyCursor = client.history.cursor;\n\t\tthis.historyUnsubscribe = client.observeHistory((view) => {\n\t\t\tif (this.currentId !== id) return;\n\t\t\tthis.historyEntries = view.entries;\n\t\t\tthis.historyCursor = view.cursor;\n\t\t});\n\t}\n\t/**\n\t* Bring the live $state proxy in step with `next` while preserving the\n\t* identity of every unchanged sub-tree. Critical for reorders: a naive\n\t* field-by-field replace (what fast-json-patch generates) creates a\n\t* transient duplicate-id state that Svelte's keyed `{#each}` rejects with\n\t* `each_key_duplicate`. The reconciler moves items via array splice so the\n\t* each block sees a clean rearrangement.\n\t*/\n\tapplyNext(next) {\n\t\tif (!this.feature) {\n\t\t\tthis.feature = next;\n\t\t\treturn;\n\t\t}\n\t\treconcileInPlace(this.feature, next);\n\t}\n};\nvar featureStore = new FeatureStore();\n//#endregion\nexport { featureStore as t };\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ import { p as public_env } from './shared-server-CCs2CV3b.js';
2
+ import { p as parseThemeId } from './registry-DqAn_hVE.js';
3
+
1
4
  //#region src/lib/server/security/auth.ts
2
5
  /**
3
6
  * Optional shared-token auth for the dashboard's REST + WebSocket
@@ -142,8 +145,9 @@ var handle = async ({ event, resolve }) => {
142
145
  headers: { "WWW-Authenticate": "Bearer realm=\"unspa-dashboard\"" }
143
146
  });
144
147
  }
145
- return resolve(event);
148
+ const theme = parseThemeId(public_env.PUBLIC_UNSPA_THEME);
149
+ return resolve(event, { transformPageChunk: ({ html }) => html.replace("%unspa.theme%", theme) });
146
150
  };
147
151
 
148
152
  export { handle };
149
- //# sourceMappingURL=hooks.server-Rv301GTB.js.map
153
+ //# sourceMappingURL=hooks.server-y3jdg_sB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.server-y3jdg_sB.js","sources":["../../../.svelte-kit/adapter-node/chunks/auth.js","../../../.svelte-kit/adapter-node/entries/hooks.server.js"],"sourcesContent":["//#region src/lib/server/security/auth.ts\n/**\n* Optional shared-token auth for the dashboard's REST + WebSocket\n* surface, plus an Origin allowlist that complements it.\n*\n* Trust model (local-first by default):\n* - No env var set → no auth, no origin check. This is the right\n* stance for the default `unspa dashboard` install (loopback bind,\n* single human). Forcing auth here would be friction with zero\n* payoff.\n* - `UNSPA_AUTH_TOKEN` set → every API request and every WebSocket\n* upgrade must carry the token. REST honors `Authorization: Bearer\n* <token>`; the WebSocket carries it as a `?token=` query because\n* browsers can't set headers on WS upgrades. Server-to-server\n* callers (the MCP `notifySyncReload`) use the header.\n* - `UNSPA_ALLOWED_ORIGIN` set → cross-site browser requests are\n* rejected. Covers the \"malicious page in your other tab fetches\n* localhost:3000/api/projects from your logged-in browser\" CSRF\n* class. curl / server-to-server has no Origin header and passes\n* through (the threat model is browser-mediated, not arbitrary\n* HTTP).\n*\n* One env var, one check function per surface. No accounts, no roles,\n* no session store. The aim is \"an enterprise IT person can install\n* this on a VLAN without a heart attack\", not full enterprise IAM —\n* which is a separate tier on the roadmap.\n*\n* Constant-time comparison on the token check resists timing leaks\n* even though the realistic attack surface is small (loopback or LAN).\n*/\nvar tokenEnv = () => {\n\tconst raw = process.env.UNSPA_AUTH_TOKEN;\n\tif (typeof raw !== \"string\") return void 0;\n\tconst trimmed = raw.trim();\n\treturn trimmed.length > 0 ? trimmed : void 0;\n};\nvar originEnv = () => {\n\tconst raw = process.env.UNSPA_ALLOWED_ORIGIN;\n\tif (typeof raw !== \"string\") return void 0;\n\tconst trimmed = raw.trim().replace(/\\/$/, \"\");\n\treturn trimmed.length > 0 ? trimmed : void 0;\n};\nvar isAuthEnabled = () => tokenEnv() !== void 0;\nvar isOriginCheckEnabled = () => originEnv() !== void 0;\n/**\n* Length-independent constant-time compare. `crypto.timingSafeEqual`\n* requires equal-length buffers and an early `===` length check would\n* itself leak length; this normalises both inputs to the longer of the\n* two before comparing.\n*/\nvar constantTimeEqual = (a, b) => {\n\tconst len = Math.max(a.length, b.length);\n\tlet mismatch = a.length === b.length ? 0 : 1;\n\tfor (let i = 0; i < len; i += 1) {\n\t\tconst ai = i < a.length ? a.charCodeAt(i) : 0;\n\t\tconst bi = i < b.length ? b.charCodeAt(i) : 0;\n\t\tmismatch |= ai ^ bi;\n\t}\n\treturn mismatch === 0;\n};\nvar extractBearerToken = (headers) => {\n\tconst raw = headers.get(\"authorization\");\n\tif (!raw) return null;\n\tconst match = /^Bearer\\s+(.+)$/i.exec(raw);\n\treturn match ? match[1].trim() : null;\n};\n/**\n* Validate a Request's bearer token against UNSPA_AUTH_TOKEN. Returns\n* true when auth is disabled (env unset) so callers can wrap any\n* request without branching on `isAuthEnabled`.\n*/\nvar checkBearerAuth = (request) => {\n\tconst expected = tokenEnv();\n\tif (expected === void 0) return true;\n\tconst provided = extractBearerToken(request.headers);\n\tif (provided === null) return false;\n\treturn constantTimeEqual(provided, expected);\n};\n/**\n* Validate a token carried as `?token=...` on a URL. Used by the\n* WebSocket upgrade path (browsers can't set headers on WS) and by SSE\n* (EventSource can't set headers either).\n*/\nvar checkQueryAuth = (url) => {\n\tconst expected = tokenEnv();\n\tif (expected === void 0) return true;\n\tconst provided = (typeof url === \"string\" ? new URL(url, \"http://x\") : url).searchParams.get(\"token\");\n\tif (provided === null) return false;\n\treturn constantTimeEqual(provided, expected);\n};\n/**\n* Accepts either header OR query — the inclusive OR variant for\n* endpoints that need to serve both browsers (via header) and\n* EventSource (via query).\n*/\nvar checkRequestAuth = (request, url) => {\n\tif (!isAuthEnabled()) return true;\n\tif (checkBearerAuth(request)) return true;\n\tif (url && checkQueryAuth(url)) return true;\n\treturn false;\n};\n/**\n* Origin allowlist check. Returns true when:\n* - the check is disabled (env unset), OR\n* - the request has no Origin header (server-to-server callers like\n* curl / the MCP notify don't send Origin), OR\n* - the Origin matches the configured allowlist.\n* Callers should pair this with auth: a malicious server-to-server\n* caller would skip the origin check, which is fine because they're\n* still gated by the token.\n*/\nvar checkOrigin = (request) => {\n\tconst expected = originEnv();\n\tif (expected === void 0) return true;\n\tconst origin = request.headers.get(\"origin\");\n\tif (!origin) return true;\n\treturn origin.replace(/\\/$/, \"\") === expected;\n};\n//#endregion\nexport { isOriginCheckEnabled as i, checkRequestAuth as n, isAuthEnabled as r, checkOrigin as t };\n","import { t as public_env } from \"../chunks/shared-server.js\";\nimport { i as isOriginCheckEnabled, n as checkRequestAuth, r as isAuthEnabled, t as checkOrigin } from \"../chunks/auth.js\";\nimport { t as parseThemeId } from \"../chunks/registry.js\";\n//#region src/hooks.server.ts\n/**\n* Global request gate for the dashboard. When `UNSPA_AUTH_TOKEN` is\n* set, every /api/* request must carry the token (header for fetch,\n* `?token=` for SSE). When `UNSPA_ALLOWED_ORIGIN` is set, cross-site\n* browser requests with a mismatching Origin are rejected.\n*\n* Why /api/* specifically: page navigations (HTML routes) are safe to\n* leave unauthenticated — they don't expose data on their own, and a\n* page that can't fetch its data renders empty + triggers the\n* client-side token prompt. Gating only the data plane means an\n* incorrectly-configured client surfaces the auth failure clearly\n* instead of getting a vague 401 on every navigation.\n*\n* Default install (neither env set) is unchanged from before: no\n* checks fire and the handle pass-through is essentially free.\n*/\nvar handle = async ({ event, resolve }) => {\n\tif (event.url.pathname.startsWith(\"/api/\")) {\n\t\tif (isOriginCheckEnabled() && !checkOrigin(event.request)) return new Response(\"Forbidden: origin not allowed\", { status: 403 });\n\t\tif (isAuthEnabled() && !checkRequestAuth(event.request, event.url)) return new Response(\"Unauthorized: missing or invalid token\", {\n\t\t\tstatus: 401,\n\t\t\theaders: { \"WWW-Authenticate\": \"Bearer realm=\\\"unspa-dashboard\\\"\" }\n\t\t});\n\t}\n\tconst theme = parseThemeId(public_env.PUBLIC_UNSPA_THEME);\n\treturn resolve(event, { transformPageChunk: ({ html }) => html.replace(\"%unspa.theme%\", theme) });\n};\n//#endregion\nexport { handle };\n"],"names":[],"mappings":"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"}
@@ -1791,10 +1791,10 @@ var options = {
1791
1791
  service_worker_options: void 0,
1792
1792
  server_error_boundaries: false,
1793
1793
  templates: {
1794
- app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\" class=\"h-full\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"icon\" href=\"" + assets + "/unspaghettit_logo.png\" type=\"image/png\" />\n <meta name=\"description\" content=\"Executable specifications for AI-assisted software development. Local-first and MCP-native by Lyriks.io.\" />\n <meta property=\"og:title\" content=\"Unspaghettit\" />\n <meta property=\"og:description\" content=\"Executable specifications for AI-assisted software development. Local-first and MCP-native.\" />\n <meta property=\"og:image\" content=\"" + assets + "/unspaghettit_logo.png\" />\n <meta property=\"og:type\" content=\"website\" />\n <meta name=\"twitter:card\" content=\"summary\" />\n <meta name=\"twitter:title\" content=\"Unspaghettit\" />\n <meta name=\"twitter:description\" content=\"Executable specifications for AI-assisted software development.\" />\n <meta name=\"twitter:image\" content=\"" + assets + "/unspaghettit_logo.png\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Dancing+Script:wght@500;600;700&family=Space+Grotesk:wght@400;500;600&display=swap\"\n />\n <title>Unspaghettit</title>\n " + head + "\n </head>\n <body data-sveltekit-preload-data=\"hover\" class=\"h-full bg-neutral-50 text-neutral-900 antialiased\">\n <div id=\"app\" class=\"h-full\">" + body + "</div>\n </body>\n</html>\n",
1794
+ app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\" class=\"h-full\" data-theme=\"%unspa.theme%\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <!--\n Theme bootstrap. The server fills the data-theme placeholder above from\n PUBLIC_UNSPA_THEME (the CLI default) in hooks.server.ts. This runs before\n first paint and lets a saved in-app switcher choice (localStorage) win\n over that default, so the page never flashes the wrong colour skin. Kept\n tiny + guarded so a blocked storage API (private browsing) just leaves\n the server default.\n -->\n <script>\n try {\n var t = localStorage.getItem('unspa.theme');\n if (t) document.documentElement.dataset.theme = t;\n } catch (e) {}\n <\/script>\n <link rel=\"icon\" href=\"" + assets + "/unspaghettit_logo.png\" type=\"image/png\" />\n <meta name=\"description\" content=\"Executable specifications for AI-assisted software development. Local-first and MCP-native by Lyriks.io.\" />\n <meta property=\"og:title\" content=\"Unspaghettit\" />\n <meta property=\"og:description\" content=\"Executable specifications for AI-assisted software development. Local-first and MCP-native.\" />\n <meta property=\"og:image\" content=\"" + assets + "/unspaghettit_logo.png\" />\n <meta property=\"og:type\" content=\"website\" />\n <meta name=\"twitter:card\" content=\"summary\" />\n <meta name=\"twitter:title\" content=\"Unspaghettit\" />\n <meta name=\"twitter:description\" content=\"Executable specifications for AI-assisted software development.\" />\n <meta name=\"twitter:image\" content=\"" + assets + "/unspaghettit_logo.png\" />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Dancing+Script:wght@500;600;700&family=Space+Grotesk:wght@400;500;600&display=swap\"\n />\n <title>Unspaghettit</title>\n " + head + "\n </head>\n <body data-sveltekit-preload-data=\"hover\" class=\"h-full bg-neutral-50 text-neutral-900 antialiased\">\n <div id=\"app\" class=\"h-full\">" + body + "</div>\n </body>\n</html>\n",
1795
1795
  error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>" + message + "</title>\n\n <style>\n body {\n --bg: white;\n --fg: #222;\n --divider: #ccc;\n background: var(--bg);\n color: var(--fg);\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n 'Segoe UI',\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n 'Open Sans',\n 'Helvetica Neue',\n sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n margin: 0;\n }\n\n .error {\n display: flex;\n align-items: center;\n max-width: 32rem;\n margin: 0 1rem;\n }\n\n .status {\n font-weight: 200;\n font-size: 3rem;\n line-height: 1;\n position: relative;\n top: -0.05rem;\n }\n\n .message {\n border-left: 1px solid var(--divider);\n padding: 0 0 0 1rem;\n margin: 0 0 0 1rem;\n min-height: 2.5rem;\n display: flex;\n align-items: center;\n }\n\n .message h1 {\n font-weight: 400;\n font-size: 1em;\n margin: 0;\n }\n\n @media (prefers-color-scheme: dark) {\n body {\n --bg: #222;\n --fg: #ddd;\n --divider: #666;\n }\n }\n </style>\n </head>\n <body>\n <div class=\"error\">\n <span class=\"status\">" + status + "</span>\n <div class=\"message\">\n <h1>" + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
1796
1796
  },
1797
- version_hash: "644wac"
1797
+ version_hash: "1o6l84"
1798
1798
  };
1799
1799
  async function get_hooks() {
1800
1800
  let handle;
@@ -1802,7 +1802,7 @@ async function get_hooks() {
1802
1802
  let handleError;
1803
1803
  let handleValidationError;
1804
1804
  let init;
1805
- ({handle, handleFetch, handleError, handleValidationError, init} = await import('./hooks.server-Rv301GTB.js'));
1805
+ ({handle, handleFetch, handleError, handleValidationError, init} = await import('./hooks.server-y3jdg_sB.js'));
1806
1806
  let reroute;
1807
1807
  let transport;
1808
1808
  return {
@@ -1817,4 +1817,4 @@ async function get_hooks() {
1817
1817
  }
1818
1818
 
1819
1819
  export { resolve as A, set_read_implementation as B, split_remote_key as C, stringify as D, stringify$1 as E, strip_data_suffix as F, strip_resolution_suffix as G, text_encoder as H, INVALIDATED_PARAM as I, validate_layout_exports as J, validate_layout_server_exports as K, validate_page_exports as L, validate_page_server_exports as M, with_request_store as N, TRAILING_SLASH_PARAM as T, add_data_suffix as a, add_resolution_suffix as b, base64_encode as c, coalesce_to_error as d, compact as e, create_remote_key as f, decode_pathname as g, disable_search as h, find_route as i, get_hooks as j, get_message as k, get_relative_path as l, get_status as m, has_data_suffix as n, has_resolution_suffix as o, hash as p, make_trackable as q, noop as r, noop_span as s, normalize_error as t, normalize_path as u, once as v, options as w, parse as x, parse_remote_arg as y, read_implementation as z };
1820
- //# sourceMappingURL=internal-BPKrFkK1.js.map
1820
+ //# sourceMappingURL=internal-KYK0WpL7.js.map