agentworkshop 0.7.33 → 0.7.37

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 (945) hide show
  1. package/.output/.AgentWorkShop/aml-python/aml_eval.py +171 -0
  2. package/.output/.AgentWorkShop/aml-python/amlkit.py +120 -0
  3. package/.output/.AgentWorkShop/aml-python/requirements.txt +7 -0
  4. package/.output/.AgentWorkShop/aml-python/train-example.py +92 -0
  5. package/.output/.AgentWorkShop/schema.json +2 -1
  6. package/.output/nitro.json +1 -1
  7. package/.output/public/_nuxt/{DLljr7g0.js → 45zuyAso.js} +1 -1
  8. package/.output/public/_nuxt/4sIEbgcl.js +42 -0
  9. package/.output/public/_nuxt/8NMOXZOV.js +1 -0
  10. package/.output/public/_nuxt/BCGafdXT.js +2 -0
  11. package/.output/public/_nuxt/BDNMzG2s2.js +1 -0
  12. package/.output/public/_nuxt/{C-mDhyEd.js → BDmh31hl.js} +1 -1
  13. package/.output/public/_nuxt/BFkgkW8u.js +4 -0
  14. package/.output/public/_nuxt/BG8sCcwx.js +14 -0
  15. package/.output/public/_nuxt/{D8CqF0yy.js → BHA40aHa.js} +1 -1
  16. package/.output/public/_nuxt/BJHKLJJU.js +1 -0
  17. package/.output/public/_nuxt/{DoTdlVVe2.js → BN6iuJEg2.js} +1 -1
  18. package/.output/public/_nuxt/BNT8gYU92.js +4 -0
  19. package/.output/public/_nuxt/BU83-NnX.js +106 -0
  20. package/.output/public/_nuxt/BYhEUx8t.js +17 -0
  21. package/.output/public/_nuxt/BzHEilTt.js +1 -0
  22. package/.output/public/_nuxt/{Ct-WOVr4.js → C3J6FYKa.js} +1 -1
  23. package/.output/public/_nuxt/C3gwHTz0.js +1 -0
  24. package/.output/public/_nuxt/C4DWUZ6d2.js +1 -0
  25. package/.output/public/_nuxt/C5gUkRwn.js +1 -0
  26. package/.output/public/_nuxt/CClOy-Hz2.js +1 -0
  27. package/.output/public/_nuxt/{CUXCQXjG.js → CM12FuB42.js} +1 -1
  28. package/.output/public/_nuxt/{BSCpFtzG.js → CSkxz2NX.js} +1 -1
  29. package/.output/public/_nuxt/CWoJjWmZ.js +1 -0
  30. package/.output/public/_nuxt/CY9LbPCI.js +1 -0
  31. package/.output/public/_nuxt/CYWVXZTS.js +7 -0
  32. package/.output/public/_nuxt/CZiw7sEV.js +1 -0
  33. package/.output/public/_nuxt/C_OLzD09.js +1 -0
  34. package/.output/public/_nuxt/C__m4EhR.js +1 -0
  35. package/.output/public/_nuxt/Cbq-mryP.js +1 -0
  36. package/.output/public/_nuxt/{C4OAdbVK2.js → Cc_9VzD42.js} +1 -1
  37. package/.output/public/_nuxt/{BASN8nZ0.js → CdPzkOMV.js} +1 -1
  38. package/.output/public/_nuxt/Cec0Ua3F.js +1 -0
  39. package/.output/public/_nuxt/{DYKVPzN-.js → CoNpEq5X.js} +1 -1
  40. package/.output/public/_nuxt/CojCTLKD.js +1 -0
  41. package/.output/public/_nuxt/{B7wL3pDk.js → Crod5z2f.js} +1 -1
  42. package/.output/public/_nuxt/CzlMDL5H.js +13 -0
  43. package/.output/public/_nuxt/{G0qIw7Gq2.js → D0ZBQrN_2.js} +1 -1
  44. package/.output/public/_nuxt/{Lp7Ll94I.js → D1YDxZpZ.js} +1 -1
  45. package/.output/public/_nuxt/{Bc0AmjfT.js → D20Yamr4.js} +1 -1
  46. package/.output/public/_nuxt/D6uzXueg.js +2 -0
  47. package/.output/public/_nuxt/D9Oidm5I.js +1 -0
  48. package/.output/public/_nuxt/DAe0h2MB.js +1 -0
  49. package/.output/public/_nuxt/DBHNsT1Y.js +23 -0
  50. package/.output/public/_nuxt/DDShH71m.js +1 -0
  51. package/.output/public/_nuxt/DDgJcSET.js +19 -0
  52. package/.output/public/_nuxt/DHFrCUxA2.js +13 -0
  53. package/.output/public/_nuxt/{BcrN7QEl2.js → DIaZ2PTo2.js} +1 -1
  54. package/.output/public/_nuxt/DPnwL14Y.js +1 -0
  55. package/.output/public/_nuxt/DR12_WCA.js +3 -0
  56. package/.output/public/_nuxt/{B9nXmjSB.js → DUrecWPx.js} +4 -4
  57. package/.output/public/_nuxt/DVsjtsvZ2.js +1 -0
  58. package/.output/public/_nuxt/DYr1VMiQ.js +6 -0
  59. package/.output/public/_nuxt/DZtm4l-P2.js +1 -0
  60. package/.output/public/_nuxt/DdD9mCHM.js +1 -0
  61. package/.output/public/_nuxt/DeJykBFf.js +9 -0
  62. package/.output/public/_nuxt/{DoMxCWN52.js → DeyBFhKH2.js} +1 -1
  63. package/.output/public/_nuxt/DkGQ7lnb2.js +1 -0
  64. package/.output/public/_nuxt/DmqknNvV.js +18 -0
  65. package/.output/public/_nuxt/DnUuIR83.js +1 -0
  66. package/.output/public/_nuxt/DrYV5i68.js +1 -0
  67. package/.output/public/_nuxt/{B5S_UyaC.js → DtYHUi5Z.js} +1 -1
  68. package/.output/public/_nuxt/Dz_Q3Lpw2.js +1 -0
  69. package/.output/public/_nuxt/DzbFpZRk.js +3 -0
  70. package/.output/public/_nuxt/HBLJ-wei.js +1 -0
  71. package/.output/public/_nuxt/JCoYF4IJ.js +31 -0
  72. package/.output/public/_nuxt/JTLM-kqr2.js +1 -0
  73. package/.output/public/_nuxt/{BeIfu4N3.js → KZQX7xoM.js} +2 -2
  74. package/.output/public/_nuxt/S_fVQwJK.js +1 -0
  75. package/.output/public/_nuxt/TownView.0oLiQgTC.css +1 -0
  76. package/.output/public/_nuxt/YnQxK3eG.js +1 -0
  77. package/.output/public/_nuxt/_id_.D-SYuyZb.css +1 -0
  78. package/.output/public/_nuxt/_id_.hma_BU6T.css +1 -0
  79. package/.output/public/_nuxt/_wsId_.B12v3PhY.css +1 -0
  80. package/.output/public/_nuxt/aLLjF2K-2.js +1 -0
  81. package/.output/public/_nuxt/aWWIh8YL.js +24 -0
  82. package/.output/public/_nuxt/ahgEJu2R.js +1 -0
  83. package/.output/public/_nuxt/aml.COEKNNqK.css +1 -0
  84. package/.output/public/_nuxt/builds/latest.json +1 -1
  85. package/.output/public/_nuxt/builds/meta/a66fdef7-dcfd-453b-b1f6-543c7dfd98d5.json +1 -0
  86. package/.output/public/_nuxt/daq.B3265ZDn.css +1 -0
  87. package/.output/public/_nuxt/dcw.DLYZqEhT.css +1 -0
  88. package/.output/public/_nuxt/default.DE_vT238.css +1 -0
  89. package/.output/public/_nuxt/entry.BB-Eeh-J.css +1 -0
  90. package/.output/public/_nuxt/jZsY8yYz.js +1 -0
  91. package/.output/public/_nuxt/logs.CqFyMrJw.css +1 -0
  92. package/.output/public/_nuxt/pages.ooEzrMm9.css +1 -0
  93. package/.output/public/_nuxt/pdk8jLGT.js +1 -0
  94. package/.output/public/_nuxt/plugins.5e5chZ67.css +1 -0
  95. package/.output/public/_nuxt/pz2JDAM7.js +2 -0
  96. package/.output/public/_nuxt/settings.Dm3M0RLy.css +1 -0
  97. package/.output/public/_nuxt/town.DKIAhKnx.css +1 -0
  98. package/.output/public/_nuxt/users.CXnP2E08.css +1 -0
  99. package/.output/public/_nuxt/vRTjoWqd.js +1 -0
  100. package/.output/public/_nuxt/workshop.Jk5HxWPE.css +1 -0
  101. package/.output/public/_nuxt/zIGh7R49.js +75 -0
  102. package/.output/public/_nuxt/zq5t1vyX.js +1 -0
  103. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  104. package/.output/server/chunks/_/entity.mjs +174 -0
  105. package/.output/server/chunks/_/entity.mjs.map +1 -0
  106. package/.output/server/chunks/_/env-manager.mjs +162 -0
  107. package/.output/server/chunks/_/env-manager.mjs.map +1 -0
  108. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  109. package/.output/server/chunks/_/nitro.mjs +1568 -1043
  110. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  111. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  112. package/.output/server/chunks/build/{TownView-BdHnAilw.mjs → TownView-jVazYOjN.mjs} +141 -141
  113. package/.output/server/chunks/build/{TownView-BdHnAilw.mjs.map → TownView-jVazYOjN.mjs.map} +1 -1
  114. package/.output/server/chunks/build/{_id_-Cb845FHR.mjs → _id_-CfVosNg3.mjs} +136 -136
  115. package/.output/server/chunks/build/{_id_-Cb845FHR.mjs.map → _id_-CfVosNg3.mjs.map} +1 -1
  116. package/.output/server/chunks/build/{_id_-fadFPl2i.mjs → _id_-Hwr4rZpr.mjs} +32 -32
  117. package/.output/server/chunks/build/{_id_-fadFPl2i.mjs.map → _id_-Hwr4rZpr.mjs.map} +1 -1
  118. package/.output/server/chunks/build/{_wsId_-CTZswnm5.mjs → _wsId_-BVg3bB77.mjs} +175 -165
  119. package/.output/server/chunks/build/{_wsId_-CTZswnm5.mjs.map → _wsId_-BVg3bB77.mjs.map} +1 -1
  120. package/.output/server/chunks/build/aml-BCSJCdX7.mjs +588 -0
  121. package/.output/server/chunks/build/aml-BCSJCdX7.mjs.map +1 -0
  122. package/.output/server/chunks/build/{daq-BvihjQyW.mjs → daq-C03Uu5UE.mjs} +108 -106
  123. package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +1 -0
  124. package/.output/server/chunks/build/{dcw-Ks2vJ4PF.mjs → dcw-6vEYVeje.mjs} +44 -44
  125. package/.output/server/chunks/build/{dcw-Ks2vJ4PF.mjs.map → dcw-6vEYVeje.mjs.map} +1 -1
  126. package/.output/server/chunks/build/{default-GgHt4O2R.mjs → default-hseyOqBT.mjs} +30 -27
  127. package/.output/server/chunks/build/{default-GgHt4O2R.mjs.map → default-hseyOqBT.mjs.map} +1 -1
  128. package/.output/server/chunks/build/{logs-CYBhkQwh.mjs → logs-B-xhuqln.mjs} +35 -35
  129. package/.output/server/chunks/build/{logs-CYBhkQwh.mjs.map → logs-B-xhuqln.mjs.map} +1 -1
  130. package/.output/server/chunks/build/{pages-C-6BRtv8.mjs → pages-BO7yZsXA.mjs} +18 -27
  131. package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +1 -0
  132. package/.output/server/chunks/build/{plugins-dZRegC7m.mjs → plugins-CUWmMdyt.mjs} +17 -17
  133. package/.output/server/chunks/build/{plugins-dZRegC7m.mjs.map → plugins-CUWmMdyt.mjs.map} +1 -1
  134. package/.output/server/chunks/build/{settings-CgDLkP3s.mjs → settings-DoQ2Oq3P.mjs} +43 -43
  135. package/.output/server/chunks/build/{settings-CgDLkP3s.mjs.map → settings-DoQ2Oq3P.mjs.map} +1 -1
  136. package/.output/server/chunks/build/{town-DJ-V5G9U.mjs → town-BOl6hs9B.mjs} +7 -7
  137. package/.output/server/chunks/build/{town-DJ-V5G9U.mjs.map → town-BOl6hs9B.mjs.map} +1 -1
  138. package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs +1 -1
  139. package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs +1 -1
  140. package/.output/server/chunks/build/{useWorkshopWs-CprkZEdq.mjs → useWorkshopWs-C_I7q9As.mjs} +110 -32
  141. package/.output/server/chunks/build/{useWorkshopWs-CprkZEdq.mjs.map → useWorkshopWs-C_I7q9As.mjs.map} +1 -1
  142. package/.output/server/chunks/build/{users-4nzxTjFT.mjs → users-fohSmF-J.mjs} +6 -6
  143. package/.output/server/chunks/build/{users-4nzxTjFT.mjs.map → users-fohSmF-J.mjs.map} +1 -1
  144. package/.output/server/chunks/build/{workshop-81xhz368.mjs → workshop-DX5-ldc4.mjs} +15 -15
  145. package/.output/server/chunks/build/{workshop-81xhz368.mjs.map → workshop-DX5-ldc4.mjs.map} +1 -1
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +21 -8
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  148. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
  149. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +58 -0
  150. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -0
  151. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +27 -6
  152. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +49 -0
  154. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -0
  155. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +45 -0
  156. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -0
  157. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +30 -0
  158. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -0
  159. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +40 -0
  160. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -0
  161. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +42 -0
  162. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -0
  163. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
  164. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
  165. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +4 -22
  166. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +4 -16
  169. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  170. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +19 -34
  171. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  172. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +41 -0
  173. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -0
  174. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +62 -0
  175. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -0
  176. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
  177. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
  178. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
  179. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +63 -0
  180. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -0
  181. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
  182. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
  183. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +54 -0
  184. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -0
  185. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +46 -0
  186. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -0
  187. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  188. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  189. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
  190. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  191. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
  192. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
  193. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  194. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  195. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
  196. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +4 -4
  197. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  198. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  199. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
  200. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  201. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  202. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
  203. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  204. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  205. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  206. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  208. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  209. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  211. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  213. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
  226. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  229. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
  230. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  232. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  233. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  235. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  237. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  238. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  239. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  240. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  241. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  242. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  243. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  244. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  245. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  246. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  247. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  248. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  249. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  250. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
  251. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  253. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  254. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  256. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +12 -1
  257. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  258. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  259. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  260. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  261. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
  262. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  265. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  269. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
  270. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
  271. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  272. package/.output/server/chunks/routes/renderer.mjs +2 -2
  273. package/.output/server/chunks/virtual/entry.mjs +103 -17
  274. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  275. package/.output/server/package.json +1 -1
  276. package/README-zh.md +578 -507
  277. package/README.md +125 -51
  278. package/app/assets/css/main.css +329 -22
  279. package/app/components/AppHeader.vue +5 -4
  280. package/app/components/AppSidebar.vue +5 -4
  281. package/app/components/AwChart.vue +17 -0
  282. package/app/components/workshop/AgentLanesView.vue +2 -2
  283. package/app/components/workshop/ChannelSessionList.vue +3 -3
  284. package/app/components/workshop/CommandPalette.vue +1 -2
  285. package/app/components/workshop/Composer.vue +4 -4
  286. package/app/components/workshop/DaqNodeRow.vue +20 -1
  287. package/app/components/workshop/EventBlock.vue +3 -3
  288. package/app/components/workshop/MentionHoverCard.vue +1 -1
  289. package/app/components/workshop/MultiChannelView.vue +1 -1
  290. package/app/components/workshop/TaskBoardView.vue +5 -5
  291. package/app/components/workshop/TranscriptTimeline.vue +3 -3
  292. package/app/components/workshop/blocks/ClusterRoute.vue +3 -3
  293. package/app/components/workshop/blocks/ClusterStream.vue +1 -1
  294. package/app/components/workshop/blocks/ClusterTool.vue +1 -1
  295. package/app/components/workshop/lanes/LaneBlocks.vue +5 -2
  296. package/app/components/workshop/town/TownView.vue +0 -7
  297. package/app/composables/workshop/useClusteredBlocks.ts +22 -3
  298. package/app/composables/workshop/useEscClose.ts +44 -0
  299. package/app/config/index.ts +2 -1
  300. package/app/layouts/default.vue +25 -8
  301. package/app/pages/aml/index.vue +626 -4
  302. package/app/pages/daq/[id].vue +1 -1
  303. package/app/pages/daq/index.vue +10 -12
  304. package/app/pages/dcw/[id].vue +2 -2
  305. package/app/pages/dcw/index.vue +7 -11
  306. package/app/pages/index.vue +24 -6
  307. package/app/pages/logs/index.vue +2 -6
  308. package/app/pages/plugins/index.vue +1 -1
  309. package/app/pages/settings.vue +2 -2
  310. package/app/pages/town.vue +0 -2
  311. package/app/pages/users.vue +1 -1
  312. package/app/pages/workshop/index.vue +2 -2
  313. package/app/plugins/esc-close.client.ts +31 -0
  314. package/app/stores/workshop/events.ts +186 -36
  315. package/bin/aw.mjs +7 -2
  316. package/cli/aw.mjs +19 -34
  317. package/cli/commands/build.mjs +18 -1
  318. package/cli/commands/config.mjs +2 -0
  319. package/cli/commands/plugin.mjs +45 -18
  320. package/cli/commands/register.mjs +6 -2
  321. package/cli/commands/status.mjs +2 -1
  322. package/cli/commands/update.mjs +1 -1
  323. package/cli/commands/version.mjs +1 -1
  324. package/cli/core/args.mjs +76 -4
  325. package/cli/core/help.mjs +3 -1
  326. package/cli/core/meta.mjs +38 -0
  327. package/cli/core/post-build.mjs +96 -0
  328. package/cli/core/registry.mjs +6 -3
  329. package/config.yml +28 -26
  330. package/docs/aml.md +99 -0
  331. package/docs/cli.en.md +445 -0
  332. package/docs/cli.md +410 -220
  333. package/docs/full-test-plan.md +174 -0
  334. package/docs/multi-harness-architecture.md +248 -0
  335. package/docs/plugins.en.md +534 -0
  336. package/docs/plugins.md +531 -179
  337. package/docs/sdk.en.md +922 -0
  338. package/docs/sdk.md +725 -129
  339. package/i18n/dicts/aml.json +43 -1
  340. package/i18n/locales/en.ts +1928 -1885
  341. package/i18n/locales/zh-CN.ts +1928 -1885
  342. package/nuxt.config.ts +27 -2
  343. package/package.json +164 -153
  344. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +14 -0
  345. package/scripts/_audit/aml-layout-diag.mjs +83 -0
  346. package/scripts/_audit/bump-version.mjs +51 -0
  347. package/scripts/_audit/channel-inspect.mjs +49 -0
  348. package/scripts/_audit/cleanup-apply.mjs +89 -0
  349. package/scripts/_audit/cleanup-plan.mjs +82 -0
  350. package/scripts/_audit/contrast-check.mjs +43 -0
  351. package/scripts/_audit/dcw-unrecorded-write.ts +1 -1
  352. package/scripts/_audit/design-shots.mjs +145 -0
  353. package/scripts/_audit/docs-font-probe.mjs +68 -0
  354. package/scripts/_audit/docs-probe.mjs +107 -0
  355. package/scripts/_audit/docs-shots.mjs +171 -0
  356. package/scripts/_audit/docs-v3-verify.mjs +255 -0
  357. package/scripts/_audit/docs-vue-lint.mjs +81 -0
  358. package/scripts/_audit/docs-vue-lint2.mjs +91 -0
  359. package/scripts/_audit/exp-cost-scaling.mjs +4 -1
  360. package/scripts/_audit/exp-envelope-and-png.mjs +2 -1
  361. package/scripts/_audit/exp-sweep-fairness.mjs +4 -2
  362. package/scripts/_audit/fix-settings-count.mjs +57 -0
  363. package/scripts/_audit/glass-verify.mjs +155 -0
  364. package/scripts/_audit/hydration-diff.mjs +104 -0
  365. package/scripts/_audit/hydration-head.mjs +36 -0
  366. package/scripts/_audit/hydration-probe.mjs +59 -0
  367. package/scripts/_audit/lead-matrix-test.mjs +172 -0
  368. package/scripts/_audit/plc-agent-task.mjs +74 -0
  369. package/scripts/_audit/plc-clean-scenario.mjs +434 -0
  370. package/scripts/_audit/plc-clean-shots.mjs +161 -0
  371. package/scripts/_audit/plc-fc10-probe.mjs +30 -0
  372. package/scripts/_audit/probe-binding.mjs +114 -103
  373. package/scripts/_audit/review-fix-verify.mjs +158 -0
  374. package/scripts/_audit/seed-demo.mjs +165 -0
  375. package/scripts/_audit/town-focus-shot.mjs +129 -0
  376. package/scripts/_audit/town-reposition.mjs +85 -0
  377. package/scripts/_audit/ts-resolve-hook.mjs +57 -22
  378. package/scripts/_audit/verify-cleanup.mjs +67 -0
  379. package/scripts/_audit/verify-release-pack.mjs +82 -0
  380. package/scripts/_audit/watchdog-recovery-test.mjs +127 -0
  381. package/scripts/_dbg-audit-all-pages.mjs +43 -43
  382. package/scripts/_dbg-configroot-audit.mjs +84 -84
  383. package/scripts/_dbg-daq-intervals-func.mjs +94 -94
  384. package/scripts/_dbg-daq-rowstyle-verify.mjs +112 -112
  385. package/scripts/_dbg-groups-ui-verify.mjs +122 -122
  386. package/scripts/_dbg-harness-e2e.mjs +92 -92
  387. package/scripts/_dbg-harness-ui-e2e.py +97 -97
  388. package/scripts/_dbg-hitl-timeout-e2e.mjs +93 -93
  389. package/scripts/_dbg-multiharness-live-e2e.mjs +254 -254
  390. package/scripts/_dbg-opslog-agent-e2e.mjs +194 -191
  391. package/scripts/_dbg-opt-team-e2e.mjs +133 -133
  392. package/scripts/_dbg-recipe-e2e.mjs +176 -176
  393. package/scripts/_dbg-recipe-stale-e2e.mjs +135 -135
  394. package/scripts/_dbg-render-perf.mjs +142 -142
  395. package/scripts/_dbg-render-regression.mjs +130 -130
  396. package/scripts/_dbg-town-smoke.mjs +54 -54
  397. package/scripts/aw-start-smoke.mjs +27 -8
  398. package/scripts/check-docs-sync.mjs +367 -0
  399. package/scripts/e2e-full-closedloop.mjs +36 -18
  400. package/scripts/production-closed-loop-e2e.mjs +300 -300
  401. package/scripts/test-cli-exit.mjs +129 -21
  402. package/scripts/test-daq-frame-race.mjs +144 -96
  403. package/scripts/test-events-index.mjs +176 -0
  404. package/scripts/test-lru.mjs +34 -11
  405. package/scripts/test-memory-month-query.mjs +11 -3
  406. package/scripts/test-plugin-hardening.mjs +7 -2
  407. package/scripts/test-plugin-lifecycle.mjs +173 -0
  408. package/scripts/test-rollback-index.mjs +76 -18
  409. package/scripts/test-sdk-surface.mjs +6 -3
  410. package/sdk/client.mjs +16 -7
  411. package/sdk/context.mjs +21 -9
  412. package/sdk/examples/line-sentinel/client.mjs +13 -6
  413. package/sdk/examples/line-sentinel/index.mjs +5 -2
  414. package/sdk/examples/ops-notifier/client.mjs +3 -1
  415. package/sdk/examples/sample-insight/client.mjs +4 -2
  416. package/sdk/index.d.mts +133 -16
  417. package/sdk/index.mjs +3 -2
  418. package/sdk/lifecycle.mjs +8 -3
  419. package/server/api/workshop/agent-tools/bindings/index.post.ts +22 -7
  420. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -0
  421. package/server/api/workshop/aml/datasets/[id].get.ts +31 -9
  422. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -0
  423. package/server/api/workshop/aml/entities/index.get.ts +13 -0
  424. package/server/api/workshop/aml/entities/prune.post.ts +28 -0
  425. package/server/api/workshop/aml/env/index.get.ts +13 -0
  426. package/server/api/workshop/aml/env/recheck.post.ts +14 -0
  427. package/server/api/workshop/aml/env/uv.post.ts +21 -0
  428. package/server/api/workshop/aml/env/venv.post.ts +24 -0
  429. package/server/api/workshop/aml/index.get.ts +14 -1
  430. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -0
  431. package/server/api/workshop/aml/models/[id].delete.ts +35 -0
  432. package/server/api/workshop/aml/models/[id].patch.ts +30 -0
  433. package/server/services/workshop/agents/agent-interface.ts +3 -0
  434. package/server/services/workshop/agents/base-agent.ts +9 -0
  435. package/server/services/workshop/agents/codex-agent.ts +743 -729
  436. package/server/services/workshop/agents/dsh-agent.ts +4 -7
  437. package/server/services/workshop/agents/opencode-agent.ts +5 -7
  438. package/server/services/workshop/aml/aml.repo.ts +18 -0
  439. package/server/services/workshop/aml/dataset-builder.ts +4 -0
  440. package/server/services/workshop/aml/entity.ts +365 -0
  441. package/server/services/workshop/aml/env-manager.ts +242 -0
  442. package/server/services/workshop/aml/job-orchestrator.ts +4 -15
  443. package/server/services/workshop/aml/model-registry.ts +6 -0
  444. package/server/services/workshop/aml/python-runtime.ts +396 -62
  445. package/server/services/workshop/aml/runtime.ts +95 -4
  446. package/server/services/workshop/daq/bus/mqtt.adapter.ts +3 -1
  447. package/server/services/workshop/daq/daq-controller.ts +95 -47
  448. package/server/services/workshop/daq/daq-node.repo.ts +0 -10
  449. package/server/services/workshop/daq/daq-runtime.ts +0 -5
  450. package/server/services/workshop/json-store.mjs +35 -2
  451. package/server/services/workshop/plugins/host.mjs +18 -12
  452. package/server/services/workshop/runtime/agent-runtime.ts +32 -3
  453. package/server/services/workshop/runtime/manager.ts +28 -1
  454. package/server/services/workshop/runtime/scheduler-loop.ts +10 -1
  455. package/server/services/workshop/settings.ts +2 -0
  456. package/shared/config/home.mjs +58 -0
  457. package/shared/config/schema.json +2 -1
  458. package/shared/lru.mjs +4 -1
  459. package/.output/public/_nuxt/-6OnbLFb.js +0 -1
  460. package/.output/public/_nuxt/-nb2uqVg.js +0 -1
  461. package/.output/public/_nuxt/4bHdIqEg.js +0 -18
  462. package/.output/public/_nuxt/6PZPfFcO.js +0 -17
  463. package/.output/public/_nuxt/BBBtwOpo.js +0 -9
  464. package/.output/public/_nuxt/BBwMH_hG.js +0 -7
  465. package/.output/public/_nuxt/BDUjyaF4.js +0 -42
  466. package/.output/public/_nuxt/BNXfwXpE.js +0 -1
  467. package/.output/public/_nuxt/BN_PdN3J.js +0 -24
  468. package/.output/public/_nuxt/BSSUlJnx2.js +0 -1
  469. package/.output/public/_nuxt/BWSE6hR6.js +0 -1
  470. package/.output/public/_nuxt/BZGNTgTQ2.js +0 -1
  471. package/.output/public/_nuxt/BZv4RFYN.js +0 -1
  472. package/.output/public/_nuxt/BcmbLh2z2.js +0 -1
  473. package/.output/public/_nuxt/BfGc7TJp.js +0 -1
  474. package/.output/public/_nuxt/BgTB6h_q.js +0 -2
  475. package/.output/public/_nuxt/BkLJA9J5.js +0 -1
  476. package/.output/public/_nuxt/Bp5luxkg2.js +0 -1
  477. package/.output/public/_nuxt/BuCHayqN.js +0 -1
  478. package/.output/public/_nuxt/BuvcLKh1.js +0 -19
  479. package/.output/public/_nuxt/C3tCneTM.js +0 -1
  480. package/.output/public/_nuxt/C77oC8yC2.js +0 -7
  481. package/.output/public/_nuxt/C9f8QMp12.js +0 -1
  482. package/.output/public/_nuxt/CKfhtOt7.js +0 -13
  483. package/.output/public/_nuxt/CQvmN-Mi.js +0 -1
  484. package/.output/public/_nuxt/CUDrOuW7.js +0 -1
  485. package/.output/public/_nuxt/CZcC-gpk.js +0 -1
  486. package/.output/public/_nuxt/CbzsPO5H.js +0 -1
  487. package/.output/public/_nuxt/CdSOrh2c.js +0 -1
  488. package/.output/public/_nuxt/Cgx818r-.js +0 -1
  489. package/.output/public/_nuxt/Cjm7VogC.js +0 -1
  490. package/.output/public/_nuxt/Cm5mDxzH.js +0 -1
  491. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  492. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  493. package/.output/public/_nuxt/Cno6kYiO2.js +0 -1
  494. package/.output/public/_nuxt/Cp6z0RN7.js +0 -1
  495. package/.output/public/_nuxt/CwqIxJGj.js +0 -2
  496. package/.output/public/_nuxt/D-Ca4BGY.js +0 -70
  497. package/.output/public/_nuxt/D0fhp-Ga.js +0 -75
  498. package/.output/public/_nuxt/D1z7i2UP.js +0 -31
  499. package/.output/public/_nuxt/DIaTPH1M.js +0 -1
  500. package/.output/public/_nuxt/DTYBfjRY.js +0 -1
  501. package/.output/public/_nuxt/DXRZPxGs.js +0 -1
  502. package/.output/public/_nuxt/DZzGarBE2.js +0 -13
  503. package/.output/public/_nuxt/DaMCzQhv.js +0 -1
  504. package/.output/public/_nuxt/DoLasgPj2.js +0 -1
  505. package/.output/public/_nuxt/DpojD719.js +0 -1
  506. package/.output/public/_nuxt/DsVcWfyR.js +0 -1
  507. package/.output/public/_nuxt/DtBu71ev.js +0 -32
  508. package/.output/public/_nuxt/Dy-mxvXY2.js +0 -1
  509. package/.output/public/_nuxt/DzuC31-i.js +0 -2
  510. package/.output/public/_nuxt/FQri3dV3.js +0 -1
  511. package/.output/public/_nuxt/ORt9oDIy2.js +0 -1
  512. package/.output/public/_nuxt/TownView.CtskuMXS.css +0 -1
  513. package/.output/public/_nuxt/VLI2Zy4t.js +0 -5
  514. package/.output/public/_nuxt/_id_.MbzdFygI.css +0 -1
  515. package/.output/public/_nuxt/_id_.hRYo-EAB.css +0 -1
  516. package/.output/public/_nuxt/_wsId_.gXMEOYgX.css +0 -1
  517. package/.output/public/_nuxt/aml.WU_bh87J.css +0 -1
  518. package/.output/public/_nuxt/arUY5dyq2.js +0 -4
  519. package/.output/public/_nuxt/builds/meta/291ef3e6-fa6a-4dee-8f46-05da1aeab815.json +0 -1
  520. package/.output/public/_nuxt/daq.Bb6l44-O.css +0 -1
  521. package/.output/public/_nuxt/dcw.rXH2fc2Z.css +0 -1
  522. package/.output/public/_nuxt/default.jNT73_hq.css +0 -1
  523. package/.output/public/_nuxt/ekuGmQ7R.js +0 -1
  524. package/.output/public/_nuxt/entry.jFrFAWuA.css +0 -1
  525. package/.output/public/_nuxt/logs.DMOM-iHe.css +0 -1
  526. package/.output/public/_nuxt/niDwBOZW.js +0 -3
  527. package/.output/public/_nuxt/pMoIO6rr.js +0 -14
  528. package/.output/public/_nuxt/pages.Cc8GX9T1.css +0 -1
  529. package/.output/public/_nuxt/plugins.wIPyfPn-.css +0 -1
  530. package/.output/public/_nuxt/rqZ-1SoP.js +0 -2
  531. package/.output/public/_nuxt/settings.BCm4NZIc.css +0 -1
  532. package/.output/public/_nuxt/town.C_DsNW0J.css +0 -1
  533. package/.output/public/_nuxt/users.DuAt_Zwf.css +0 -1
  534. package/.output/public/_nuxt/vJ4FPb-_.js +0 -1
  535. package/.output/public/_nuxt/workshop.BJg84pOK.css +0 -1
  536. package/.output/server/chunks/build/aml-uBNIppIf.mjs +0 -508
  537. package/.output/server/chunks/build/aml-uBNIppIf.mjs.map +0 -1
  538. package/.output/server/chunks/build/daq-BvihjQyW.mjs.map +0 -1
  539. package/.output/server/chunks/build/pages-C-6BRtv8.mjs.map +0 -1
  540. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -28
  541. package/scripts/_audit/.tmp/dcw-writes.json +0 -15650
  542. package/scripts/_audit/.tmp/dcws.json +0 -9033
  543. package/scripts/_audit/.tmp/pollution-backup/dcw-rollback.polluted.json +0 -470006
  544. package/scripts/_audit/.tmp/pollution-backup/dcws.polluted.json +0 -9085
  545. package/scripts/_audit/.tmp/probe-cwd.txt +0 -1
  546. package/scripts/_audit/awhome/commands/README.md +0 -3
  547. package/scripts/_audit/awhome/commands/hello.mjs +0 -12
  548. package/scripts/_audit/diag-cwd.ts +0 -20
  549. package/scripts/_audit/diag-cwd2.ts +0 -19
  550. package/scripts/_audit/hello.mjs +0 -12
  551. package/scripts/_audit/ndjson-partial-line-repro.mjs +0 -77
  552. package/scripts/_audit/opencode-await-ternary-repro.mjs +0 -20
  553. package/scripts/_audit/part-frag.txt +0 -84
  554. package/scripts/_audit/part-head.txt +0 -45
  555. package/scripts/_audit/probe-child.mjs +0 -17
  556. package/scripts/_audit/probe-envelope.mjs +0 -49
  557. package/scripts/_audit/probe-packlist.mjs +0 -67
  558. package/scripts/_audit/probe-routes.mjs +0 -47
  559. package/scripts/_audit/probe-routes2.mjs +0 -38
  560. package/scripts/_audit/probe.ts +0 -9
  561. package/scripts/_audit/probe2.ts +0 -6
  562. package/scripts/_audit/probe3.ts +0 -3
  563. package/scripts/_audit/probe4.ts +0 -3
  564. package/scripts/_audit/proj/.AgentWorkShop/commands/echoargs.mjs +0 -13
  565. package/scripts/_audit/proj/config.yml +0 -1
  566. package/scripts/_audit/run.mjs +0 -30
  567. package/scripts/_audit/tsconfig.probe.json +0 -24
  568. package/scripts/_audit/typecheck-out.txt +0 -466
  569. package/scripts/_daq-realtime-probe.mjs +0 -68
  570. package/scripts/_daq-warn-probe.mjs +0 -50
  571. package/scripts/_dbg-acc-1-setup.mjs +0 -57
  572. package/scripts/_dbg-acc-2-diag.mjs +0 -14
  573. package/scripts/_dbg-acc-2-intervals.mjs +0 -81
  574. package/scripts/_dbg-acc-3-daq.mjs +0 -48
  575. package/scripts/_dbg-acc-4-team.mjs +0 -92
  576. package/scripts/_dbg-acc-5-visual.mjs +0 -63
  577. package/scripts/_dbg-acc-5b-ws-town.mjs +0 -18
  578. package/scripts/_dbg-acc-5c-town.mjs +0 -12
  579. package/scripts/_dbg-acc-6-i18n.mjs +0 -19
  580. package/scripts/_dbg-agent-tools-audit.mjs +0 -154
  581. package/scripts/_dbg-agent-workflow-audit.mjs +0 -177
  582. package/scripts/_dbg-agents-dropdown-shot.py +0 -33
  583. package/scripts/_dbg-anim-verify.mjs +0 -81
  584. package/scripts/_dbg-app-shot.mjs +0 -48
  585. package/scripts/_dbg-autoframe.mjs +0 -103
  586. package/scripts/_dbg-availability-probe.ts +0 -11
  587. package/scripts/_dbg-beacon-final.mjs +0 -181
  588. package/scripts/_dbg-bind-bidi-e2e.mjs +0 -239
  589. package/scripts/_dbg-callout-near.mjs +0 -108
  590. package/scripts/_dbg-catalog-smoke.ts +0 -20
  591. package/scripts/_dbg-cf-line-shot.mjs +0 -18
  592. package/scripts/_dbg-chan-focus.mjs +0 -49
  593. package/scripts/_dbg-channel-plugin-ui.mjs +0 -94
  594. package/scripts/_dbg-cleanup.mjs +0 -31
  595. package/scripts/_dbg-closedloop-ui-shot.mjs +0 -61
  596. package/scripts/_dbg-codex-handshake.ts +0 -30
  597. package/scripts/_dbg-codex-probe.mjs +0 -58
  598. package/scripts/_dbg-codex-sandbox.ts +0 -58
  599. package/scripts/_dbg-codex-turn.ts +0 -65
  600. package/scripts/_dbg-collab-scenario-e2e.mjs +0 -185
  601. package/scripts/_dbg-config-smoke.ts +0 -28
  602. package/scripts/_dbg-console-audit.mjs +0 -61
  603. package/scripts/_dbg-console-probe.mjs +0 -23
  604. package/scripts/_dbg-context-inject-audit.mjs +0 -231
  605. package/scripts/_dbg-cpu-profile.mjs +0 -53
  606. package/scripts/_dbg-crash-recovery.mjs +0 -143
  607. package/scripts/_dbg-crop-shot.mjs +0 -16
  608. package/scripts/_dbg-cross-channel-e2e.mjs +0 -157
  609. package/scripts/_dbg-cross-team-visibility-e2e.mjs +0 -129
  610. package/scripts/_dbg-crush-probe.sh +0 -21
  611. package/scripts/_dbg-crush-spawn-probe.ts +0 -22
  612. package/scripts/_dbg-daq-acc-probe.mjs +0 -24
  613. package/scripts/_dbg-daq-attrib.mjs +0 -34
  614. package/scripts/_dbg-daq-bind-audit.mjs +0 -119
  615. package/scripts/_dbg-daq-cadence.mjs +0 -104
  616. package/scripts/_dbg-daq-debug.mjs +0 -22
  617. package/scripts/_dbg-daq-diag.mjs +0 -33
  618. package/scripts/_dbg-daq-e2e.mjs +0 -171
  619. package/scripts/_dbg-daq-film.mjs +0 -136
  620. package/scripts/_dbg-daq-filter-e2e.mjs +0 -109
  621. package/scripts/_dbg-daq-filter-e2e2.mjs +0 -62
  622. package/scripts/_dbg-daq-final-regression.mjs +0 -78
  623. package/scripts/_dbg-daq-frame-alarm.mjs +0 -49
  624. package/scripts/_dbg-daq-frame-ui.mjs +0 -62
  625. package/scripts/_dbg-daq-frame-ws.mjs +0 -72
  626. package/scripts/_dbg-daq-full-check.mjs +0 -179
  627. package/scripts/_dbg-daq-line-note-verify.mjs +0 -61
  628. package/scripts/_dbg-daq-linebanner-audit.mjs +0 -107
  629. package/scripts/_dbg-daq-pages-shot.mjs +0 -37
  630. package/scripts/_dbg-daq-perf.mjs +0 -61
  631. package/scripts/_dbg-daq-probe.mjs +0 -27
  632. package/scripts/_dbg-daq-recipe-e2e.mjs +0 -30
  633. package/scripts/_dbg-daq-redesign-shot.mjs +0 -88
  634. package/scripts/_dbg-daq-rows-probe.mjs +0 -26
  635. package/scripts/_dbg-daq-rowstate-e2e.mjs +0 -152
  636. package/scripts/_dbg-daq-rowstate-shot.mjs +0 -45
  637. package/scripts/_dbg-daq-rowstate-shot2.mjs +0 -38
  638. package/scripts/_dbg-daq-tpl.mjs +0 -144
  639. package/scripts/_dbg-dash-console-check.mjs +0 -49
  640. package/scripts/_dbg-dash-deep-probe.mjs +0 -61
  641. package/scripts/_dbg-dash-hitpoint.mjs +0 -44
  642. package/scripts/_dbg-dash-live-shot.mjs +0 -36
  643. package/scripts/_dbg-dash-shot.mjs +0 -21
  644. package/scripts/_dbg-dashboard-shot.mjs +0 -35
  645. package/scripts/_dbg-dcw-audit.mjs +0 -126
  646. package/scripts/_dbg-dcw-card-e2e.mjs +0 -108
  647. package/scripts/_dbg-dcw-channel-ui.mjs +0 -144
  648. package/scripts/_dbg-dcw-examples.mjs +0 -81
  649. package/scripts/_dbg-dcw-light-shot.mjs +0 -19
  650. package/scripts/_dbg-dcw-line-audit.mjs +0 -107
  651. package/scripts/_dbg-dcw-pause-tpl-audit.mjs +0 -161
  652. package/scripts/_dbg-dcw-pause-ui.mjs +0 -175
  653. package/scripts/_dbg-dcw-read-toolface.ts +0 -13
  654. package/scripts/_dbg-dcw-read-ui.mjs +0 -74
  655. package/scripts/_dbg-dcw-scene.mjs +0 -72
  656. package/scripts/_dbg-dcw-shot2.mjs +0 -14
  657. package/scripts/_dbg-dcw-twin-e2e.mjs +0 -192
  658. package/scripts/_dbg-diag-mock-loop.mjs +0 -89
  659. package/scripts/_dbg-diag-watch.mjs +0 -95
  660. package/scripts/_dbg-docs-site-shot.mjs +0 -32
  661. package/scripts/_dbg-dsh-probe.mjs +0 -31
  662. package/scripts/_dbg-dt-interact.mjs +0 -193
  663. package/scripts/_dbg-error-probe.mjs +0 -54
  664. package/scripts/_dbg-filter-light-verify.mjs +0 -54
  665. package/scripts/_dbg-final-acceptance-2.mjs +0 -72
  666. package/scripts/_dbg-final-acceptance.mjs +0 -192
  667. package/scripts/_dbg-final-agent-e2e.mjs +0 -151
  668. package/scripts/_dbg-final-features.mjs +0 -155
  669. package/scripts/_dbg-final-fixups.mjs +0 -62
  670. package/scripts/_dbg-final-full-e2e.mjs +0 -218
  671. package/scripts/_dbg-final-line-e2e.mjs +0 -173
  672. package/scripts/_dbg-final-shots.mjs +0 -32
  673. package/scripts/_dbg-final-t6-hitl.mjs +0 -38
  674. package/scripts/_dbg-final-visual.mjs +0 -29
  675. package/scripts/_dbg-fix-unused-imports.py +0 -41
  676. package/scripts/_dbg-focus-range.mjs +0 -115
  677. package/scripts/_dbg-fresh-scene-e2e.mjs +0 -125
  678. package/scripts/_dbg-fullchain-e2e.mjs +0 -178
  679. package/scripts/_dbg-gate-debug.mjs +0 -37
  680. package/scripts/_dbg-gif-encode.mjs +0 -111
  681. package/scripts/_dbg-gizmo.mjs +0 -95
  682. package/scripts/_dbg-glass-probe.mjs +0 -57
  683. package/scripts/_dbg-glass-shot.mjs +0 -50
  684. package/scripts/_dbg-glass-sweep.mjs +0 -25
  685. package/scripts/_dbg-glb-probe.mjs +0 -43
  686. package/scripts/_dbg-goose-probe.mjs +0 -33
  687. package/scripts/_dbg-goose-probe.sh +0 -10
  688. package/scripts/_dbg-hardening-probe.mjs +0 -90
  689. package/scripts/_dbg-harness-ui-dbg.py +0 -49
  690. package/scripts/_dbg-harness-ui-shot.py +0 -109
  691. package/scripts/_dbg-hero-btn-probe.mjs +0 -21
  692. package/scripts/_dbg-hidden-check.mjs +0 -21
  693. package/scripts/_dbg-hmi-audit.mjs +0 -164
  694. package/scripts/_dbg-home-repro.mjs +0 -24
  695. package/scripts/_dbg-home-stack.mjs +0 -13
  696. package/scripts/_dbg-host.mjs +0 -16
  697. package/scripts/_dbg-huashu-survey.mjs +0 -31
  698. package/scripts/_dbg-huashu-survey2.mjs +0 -35
  699. package/scripts/_dbg-huashu-verify.mjs +0 -25
  700. package/scripts/_dbg-huashu-verify2.mjs +0 -26
  701. package/scripts/_dbg-hydration-detail.mjs +0 -18
  702. package/scripts/_dbg-i18n-debug.mjs +0 -27
  703. package/scripts/_dbg-i18n-debug2.mjs +0 -26
  704. package/scripts/_dbg-i18n-final.mjs +0 -42
  705. package/scripts/_dbg-i18n-scan.mjs +0 -38
  706. package/scripts/_dbg-infra-lifecycle.mjs +0 -44
  707. package/scripts/_dbg-interval-config.mjs +0 -156
  708. package/scripts/_dbg-interval-scenario.mjs +0 -126
  709. package/scripts/_dbg-kicker-check.mjs +0 -11
  710. package/scripts/_dbg-line-aura-shots.mjs +0 -54
  711. package/scripts/_dbg-line-control-e2e.mjs +0 -120
  712. package/scripts/_dbg-line-gate-audit.mjs +0 -108
  713. package/scripts/_dbg-line-live-e2e.mjs +0 -144
  714. package/scripts/_dbg-line-repo-test.ts +0 -10
  715. package/scripts/_dbg-line-scenario-e2e.mjs +0 -256
  716. package/scripts/_dbg-line-spawn.ts +0 -31
  717. package/scripts/_dbg-live-engine-probe.mjs +0 -80
  718. package/scripts/_dbg-login-debug.py +0 -23
  719. package/scripts/_dbg-login-e2e.mjs +0 -26
  720. package/scripts/_dbg-logs-ui-e2e.py +0 -126
  721. package/scripts/_dbg-mcp-bridge-probe.mjs +0 -147
  722. package/scripts/_dbg-modbus-latency.mjs +0 -22
  723. package/scripts/_dbg-mqtt-chain-e2e.mjs +0 -90
  724. package/scripts/_dbg-mqtt-publisher.mjs +0 -17
  725. package/scripts/_dbg-nav-rpg.mjs +0 -84
  726. package/scripts/_dbg-nav-shot.mjs +0 -28
  727. package/scripts/_dbg-nav.mjs +0 -27
  728. package/scripts/_dbg-oneshot-impl-probe.ts +0 -67
  729. package/scripts/_dbg-opencode-sse.mjs +0 -101
  730. package/scripts/_dbg-opencode-start.ts +0 -57
  731. package/scripts/_dbg-opslog-e2e.mjs +0 -121
  732. package/scripts/_dbg-opslog-shots.mjs +0 -62
  733. package/scripts/_dbg-optimization-e2e.mjs +0 -94
  734. package/scripts/_dbg-orbit.mjs +0 -58
  735. package/scripts/_dbg-overview-probe.sh +0 -31
  736. package/scripts/_dbg-panesplitter-fix-check.mjs +0 -62
  737. package/scripts/_dbg-perms-visual.mjs +0 -36
  738. package/scripts/_dbg-pg-tcp-probe.cjs +0 -27
  739. package/scripts/_dbg-phase-e3-monitor.mjs +0 -25
  740. package/scripts/_dbg-pi-spawn-probe.ts +0 -33
  741. package/scripts/_dbg-plc-agent-loop.ts +0 -102
  742. package/scripts/_dbg-plc-e2e.mjs +0 -171
  743. package/scripts/_dbg-plugin-agent-read.ts +0 -56
  744. package/scripts/_dbg-plugin-config-ui.mjs +0 -111
  745. package/scripts/_dbg-plugin-matrix.mjs +0 -212
  746. package/scripts/_dbg-plugin-panels-ui.mjs +0 -54
  747. package/scripts/_dbg-plugin-sink-rest.mjs +0 -70
  748. package/scripts/_dbg-plugin-sink-ui.mjs +0 -81
  749. package/scripts/_dbg-plugin-tools-inject.ts +0 -80
  750. package/scripts/_dbg-plugin-ui-wizard.mjs +0 -125
  751. package/scripts/_dbg-plugin-verify-e2e.mjs +0 -123
  752. package/scripts/_dbg-plugins-e2e.mjs +0 -101
  753. package/scripts/_dbg-pop-clamp-verify.mjs +0 -77
  754. package/scripts/_dbg-preset-e2e.mjs +0 -116
  755. package/scripts/_dbg-preview-console.mjs +0 -28
  756. package/scripts/_dbg-preview-minrepro.mjs +0 -156
  757. package/scripts/_dbg-preview-pixels.mjs +0 -93
  758. package/scripts/_dbg-prompts-hotreload-test.ts +0 -76
  759. package/scripts/_dbg-prompts-resolve-test.ts +0 -39
  760. package/scripts/_dbg-quality-pages-e2e.mjs +0 -84
  761. package/scripts/_dbg-query-cancel.ts +0 -12
  762. package/scripts/_dbg-qwen-acp-probe.mjs +0 -30
  763. package/scripts/_dbg-qwen-capture.mjs +0 -21
  764. package/scripts/_dbg-rail-tree-e2e.mjs +0 -183
  765. package/scripts/_dbg-real-driver-e2e.mjs +0 -55
  766. package/scripts/_dbg-redesign-shots.mjs +0 -34
  767. package/scripts/_dbg-registry-smoke.ts +0 -14
  768. package/scripts/_dbg-release-smoke.mjs +0 -104
  769. package/scripts/_dbg-repo-setup-verify.mjs +0 -31
  770. package/scripts/_dbg-resolve-probe.ts +0 -6
  771. package/scripts/_dbg-restart-persist.mjs +0 -41
  772. package/scripts/_dbg-retention-test.ts +0 -25
  773. package/scripts/_dbg-rollback-mgr-audit.mjs +0 -169
  774. package/scripts/_dbg-rpg.mjs +0 -71
  775. package/scripts/_dbg-sc001-dispatch.mjs +0 -63
  776. package/scripts/_dbg-scenario-final-shot.mjs +0 -24
  777. package/scripts/_dbg-scenario-phase-e2.mjs +0 -75
  778. package/scripts/_dbg-scenario-phase-e3.mjs +0 -96
  779. package/scripts/_dbg-scenario-phase1.mjs +0 -90
  780. package/scripts/_dbg-scenario-phase2.mjs +0 -105
  781. package/scripts/_dbg-scenario-phase3-monitor.mjs +0 -48
  782. package/scripts/_dbg-scenario-phase3.mjs +0 -111
  783. package/scripts/_dbg-scene-polish-shot.mjs +0 -118
  784. package/scripts/_dbg-selring-probe.mjs +0 -47
  785. package/scripts/_dbg-settings-draft-probe.mjs +0 -39
  786. package/scripts/_dbg-settings-probe.mjs +0 -33
  787. package/scripts/_dbg-setup-e2e.mjs +0 -88
  788. package/scripts/_dbg-sideinfo.mjs +0 -101
  789. package/scripts/_dbg-sim-keeper.mjs +0 -100
  790. package/scripts/_dbg-splitter.mjs +0 -88
  791. package/scripts/_dbg-swatch-check.mjs +0 -10
  792. package/scripts/_dbg-task-cancel-probe.mjs +0 -66
  793. package/scripts/_dbg-team-drill.mjs +0 -173
  794. package/scripts/_dbg-town-alarm-e2e.mjs +0 -40
  795. package/scripts/_dbg-town-beauty-shots.mjs +0 -54
  796. package/scripts/_dbg-town-daq-shot.mjs +0 -26
  797. package/scripts/_dbg-town-full-e2e.mjs +0 -104
  798. package/scripts/_dbg-town-gate.mjs +0 -44
  799. package/scripts/_dbg-town-ins-probe.mjs +0 -37
  800. package/scripts/_dbg-town-perf.mjs +0 -50
  801. package/scripts/_dbg-town-polish-shots.mjs +0 -82
  802. package/scripts/_dbg-town-realtime.mjs +0 -42
  803. package/scripts/_dbg-town-shot.py +0 -25
  804. package/scripts/_dbg-town-shot3.mjs +0 -17
  805. package/scripts/_dbg-town-truth.mjs +0 -37
  806. package/scripts/_dbg-town-truth2.mjs +0 -27
  807. package/scripts/_dbg-transform-audit.mjs +0 -98
  808. package/scripts/_dbg-trend-expand-test.mjs +0 -38
  809. package/scripts/_dbg-twindaq-focus.mjs +0 -81
  810. package/scripts/_dbg-ui-polish-shot.mjs +0 -43
  811. package/scripts/_dbg-ui-polish-verify1.mjs +0 -92
  812. package/scripts/_dbg-ui-polish-verify2.mjs +0 -50
  813. package/scripts/_dbg-ui-polish-verify3.mjs +0 -51
  814. package/scripts/_dbg-ui-polish-verify4.mjs +0 -50
  815. package/scripts/_dbg-ui-shot.mjs +0 -26
  816. package/scripts/_dbg-ui-shots.mjs +0 -28
  817. package/scripts/_dbg-ui-survey.py +0 -52
  818. package/scripts/_dbg-unify-shot.mjs +0 -43
  819. package/scripts/_dbg-uplink-probe.mjs +0 -36
  820. package/scripts/_dbg-wizard-preview-shot.mjs +0 -58
  821. package/scripts/_dbg-wizard-ui-e2e.mjs +0 -93
  822. package/scripts/_dbg-ws-probe.mjs +0 -86
  823. package/scripts/_dbg-ws-shot2.mjs +0 -23
  824. package/scripts/_dbg-wsdot-sanity.mjs +0 -25
  825. package/scripts/_dev-stack.mjs +0 -46
  826. package/scripts/_http-driver-probe.mjs +0 -30
  827. package/scripts/_mqtt-driver-probe.mjs +0 -30
  828. package/scripts/_newdriver-rest-probe.mjs +0 -100
  829. package/scripts/_node-state-probe.mjs +0 -5
  830. package/scripts/_opcua-driver-probe.mjs +0 -31
  831. package/scripts/_rtu-debug.mjs +0 -41
  832. package/scripts/_rtu-direct.mjs +0 -6
  833. package/scripts/_rtu-driver-probe.mjs +0 -53
  834. package/scripts/_spike-pitui.mjs +0 -116
  835. package/scripts/_tmp-args-probe.mjs +0 -20
  836. package/scripts/_tmp-cyc-entry.mjs +0 -8
  837. package/scripts/_tmp-cyc-main.mjs +0 -5
  838. package/scripts/_tmp-cyc-mod.mjs +0 -2
  839. package/scripts/_tmp-cycle-a.mjs +0 -6
  840. package/scripts/_tmp-cycle-b.mjs +0 -2
  841. package/scripts/_tmp-cycle-probe.mjs +0 -4
  842. package/scripts/_tmp-entry-variant.mjs +0 -2
  843. package/scripts/_tmp-help-probe.mjs +0 -19
  844. package/scripts/_tmp-help-probe2.mjs +0 -2
  845. package/scripts/_tmp-trace-preload.mjs +0 -1
  846. package/scripts/_wizard-shots.mjs +0 -90
  847. package/scripts/acceptance-suite.py +0 -207
  848. package/scripts/aml-agent-bridge.ts +0 -230
  849. package/scripts/aml-industrial-loop.ts +0 -232
  850. package/scripts/build-film-devices.mjs +0 -227
  851. package/scripts/collab-live-test.py +0 -177
  852. package/scripts/debug-mcp-http.ts +0 -64
  853. package/scripts/demo-lead-worker.ts +0 -256
  854. package/scripts/demo-modes.ts +0 -415
  855. package/scripts/demo-omp-channel.ts +0 -135
  856. package/scripts/design-preflight.mjs +0 -223
  857. package/scripts/design-verify-templates.mjs +0 -110
  858. package/scripts/design-verify.mjs +0 -170
  859. package/scripts/dev-window.cmd +0 -6
  860. package/scripts/device-line-restore.mjs +0 -34
  861. package/scripts/diag-lead-status.ts +0 -101
  862. package/scripts/e2e-a2a-steer-live.mjs +0 -193
  863. package/scripts/e2e-dual-drive-comm.ts +0 -259
  864. package/scripts/e2e-full-scenario.ts +0 -321
  865. package/scripts/e2e-harness-consistency.ts +0 -204
  866. package/scripts/e2e-harness-provider-task.mjs +0 -126
  867. package/scripts/e2e-line-live.mjs +0 -144
  868. package/scripts/e2e-memory-persistence.ts +0 -320
  869. package/scripts/e2e-omp-modes.ts +0 -274
  870. package/scripts/e2e-omp-realtime.ts +0 -258
  871. package/scripts/e2e-plc-scenario.mjs +0 -292
  872. package/scripts/e2e-real-scenario.mjs +0 -466
  873. package/scripts/e2e-tab-close.mjs +0 -136
  874. package/scripts/e2e-token-ui.mjs +0 -149
  875. package/scripts/final-soup-run.py +0 -192
  876. package/scripts/final-soup-watch.py +0 -83
  877. package/scripts/i18n-codemod.mjs +0 -173
  878. package/scripts/i18n-fix-en.py +0 -28
  879. package/scripts/i18n-fix-en2.py +0 -31
  880. package/scripts/i18n-merge.mjs +0 -191
  881. package/scripts/migrate-local-time.mjs +0 -123
  882. package/scripts/omp-real-test.py +0 -328
  883. package/scripts/team-plugins-api-smoke.mjs +0 -149
  884. package/scripts/test-a2a-relay.mjs +0 -222
  885. package/scripts/test-aml-integration.ts +0 -159
  886. package/scripts/test-aml-job.ts +0 -174
  887. package/scripts/test-aml-unit.ts +0 -184
  888. package/scripts/test-api-client.ts +0 -108
  889. package/scripts/test-api-suite.mjs +0 -271
  890. package/scripts/test-block-consumption.mjs +0 -194
  891. package/scripts/test-cmd-render.mjs +0 -218
  892. package/scripts/test-collab-omp.mjs +0 -192
  893. package/scripts/test-config-precedence.ts +0 -124
  894. package/scripts/test-context-governor.ts +0 -176
  895. package/scripts/test-daq-frames.ts +0 -180
  896. package/scripts/test-daq-minio.ts +0 -77
  897. package/scripts/test-dedup-logic.ts +0 -132
  898. package/scripts/test-e2e-collaboration.ts +0 -262
  899. package/scripts/test-e2e-monitor.ts +0 -192
  900. package/scripts/test-event-history.ts +0 -112
  901. package/scripts/test-exec-modes.ts +0 -316
  902. package/scripts/test-fifo-realtime.mjs +0 -193
  903. package/scripts/test-final-e2e.mjs +0 -290
  904. package/scripts/test-goal-summary.ts +0 -202
  905. package/scripts/test-harness-liveness.ts +0 -109
  906. package/scripts/test-harness-terminal.ts +0 -164
  907. package/scripts/test-header-trail.mjs +0 -95
  908. package/scripts/test-hitl.ts +0 -360
  909. package/scripts/test-koda-restyle.mjs +0 -105
  910. package/scripts/test-lane-raw.ts +0 -67
  911. package/scripts/test-lanes-history-render.mjs +0 -138
  912. package/scripts/test-loop-omp.mjs +0 -154
  913. package/scripts/test-mdlite.ts +0 -53
  914. package/scripts/test-memory-brief-chronicle.ts +0 -180
  915. package/scripts/test-memory-rrf-mmr.ts +0 -114
  916. package/scripts/test-mock-collab.mjs +0 -226
  917. package/scripts/test-modern-render.mjs +0 -174
  918. package/scripts/test-omp-terminal.mjs +0 -187
  919. package/scripts/test-plugin-ext.ts +0 -173
  920. package/scripts/test-prompts-loader.ts +0 -56
  921. package/scripts/test-real-scenario.mjs +0 -290
  922. package/scripts/test-stream-render.ts +0 -37
  923. package/scripts/test-task-drawer.mjs +0 -204
  924. package/scripts/test-task-invariants.mjs +0 -169
  925. package/scripts/test-town-3d.mjs +0 -121
  926. package/scripts/test-town-layout.mjs +0 -200
  927. package/scripts/test-town-page.mjs +0 -136
  928. package/scripts/test-town-scene-math.ts +0 -169
  929. package/scripts/test-town-twin.mjs +0 -121
  930. package/scripts/test-town-upload.mjs +0 -89
  931. package/scripts/test-town-user-flow.mjs +0 -619
  932. package/scripts/test-town-world.mjs +0 -76
  933. package/scripts/test-town-wuwa.mjs +0 -198
  934. package/scripts/test-user-isolation.mjs +0 -193
  935. package/scripts/test-workshop-entries.ts +0 -370
  936. package/scripts/test-workspace-api.ts +0 -329
  937. package/scripts/test-ws-aep.mjs +0 -187
  938. package/scripts/test-ws-protocol.ts +0 -134
  939. package/scripts/town-demo-seed.mjs +0 -75
  940. package/scripts/town-scene-clear.mjs +0 -56
  941. package/scripts/verify-exec-modes-report.ts +0 -248
  942. package/scripts/verify-lead-mail.ts +0 -188
  943. package/scripts/verify-page-smoke.mjs +0 -87
  944. package/scripts/ws-test.mjs +0 -176
  945. package/scripts/ws-test.py +0 -4
@@ -3,7 +3,7 @@ import http from 'node:http';
3
3
  import https from 'node:https';
4
4
  import { EventEmitter } from 'node:events';
5
5
  import { Buffer as Buffer$1 } from 'node:buffer';
6
- import { promises, existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, readdirSync, statSync, watch as watch$1, copyFileSync, rmSync, cpSync, appendFileSync, accessSync, constants } from 'node:fs';
6
+ import { promises, existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, readdirSync, statSync, watch as watch$1, copyFileSync, rmSync, chmodSync, cpSync, appendFileSync, accessSync, constants } from 'node:fs';
7
7
  import { resolve as resolve$1, dirname as dirname$1, join, relative as relative$1, isAbsolute as isAbsolute$1, sep } from 'node:path';
8
8
  import { pathToFileURL, fileURLToPath } from 'node:url';
9
9
  import { copyFile, mkdir, writeFile as writeFile$1, readFile as readFile$2, rm } from 'node:fs/promises';
@@ -5107,7 +5107,7 @@ function _expandFromEnv(value) {
5107
5107
  const _inlineRuntimeConfig = {
5108
5108
  "app": {
5109
5109
  "baseURL": "/",
5110
- "buildId": "291ef3e6-fa6a-4dee-8f46-05da1aeab815",
5110
+ "buildId": "a66fdef7-dcfd-453b-b1f6-543c7dfd98d5",
5111
5111
  "buildAssetsDir": "/_nuxt/",
5112
5112
  "cdnURL": ""
5113
5113
  },
@@ -5137,7 +5137,7 @@ const _inlineRuntimeConfig = {
5137
5137
  "public": {
5138
5138
  "appName": "AgentWorkShop",
5139
5139
  "appTitle": "AgentWorkShop",
5140
- "version": "0.7.33",
5140
+ "version": "0.7.37",
5141
5141
  "description": "基于 Nuxt 4 的配置驱动运行范式",
5142
5142
  "mode": "dev",
5143
5143
  "apiBase": "/api",
@@ -6363,14 +6363,16 @@ function toQuery(query) {
6363
6363
  // AgentWorkShop SDK — 服务端插件上下文工厂(宿主调用;插件经 setup(ctx) 获得)
6364
6364
  // ------------------------------------------------------------
6365
6365
  // ctx 形态(运行时完整变量面):
6366
- // 身份 ctx.name / ctx.scope('home'|'project') / ctx.dir / ctx.sdkVersion
6367
- // 钩子 ctx.hooks HookBus(生命周期 + event:*) [SDK]
6366
+ // 身份 ctx.name / ctx.scope('builtin'|'project'|'user') / ctx.dir / ctx.sdkVersion
6367
+ // 钩子 ctx.hooks HookBus 门面(生命周期 + event:*) [SDK]
6368
6368
  // 日志 ctx.logger { debug, info, warn, error } 插件名前缀 [SDK]
6369
- // 配置 ctx.config { get(key), all(), onChange(fn) } [SDK]
6369
+ // 配置 ctx.config { get,all,onChange,defineGroup,defineField,
6370
+ // removeGroup,removeField,groups,fields } [SDK]
6370
6371
  // 存储 ctx.kv { get,set,all,bump } 内存态+防抖落盘 [SDK]
6371
6372
  // 定时 ctx.timer { setInterval, setTimeout } 服务关闭自动回收 [SDK]
6372
6373
  // 清理 ctx.onDispose(fn) / ctx.subscriptions [SDK]
6373
- // 路由 ctx.route(method, path, handler) → /api/plugins/<name>… [SDK]
6374
+ // 路由 ctx.route(method, path, handler) → boolean [SDK]
6375
+ // /api/plugins/<name><path>;鉴权由插件入口 auth 字段声明
6374
6376
  // 平台 ctx.api 平台 REST 客户端(lines/daq/dcw/twins/teams…) [SDK]
6375
6377
  // 网络 ctx.http { get, post } 带超时 fetch(仅 http/https) [SDK]
6376
6378
  // 事件 ctx.events { on(type,fn), off } scene 实时事件 [SDK]
@@ -6393,6 +6395,10 @@ function safeUrl(raw, timeoutMs = 8000) {
6393
6395
  */
6394
6396
  function createPluginContext(opts) {
6395
6397
  const { name, scope, dir, hooks, config, paths, emitter } = opts;
6398
+ // 宿主回收登记口(host.mjs perPluginDisposables)。**必须转发**:此前这里漏接
6399
+ // opts.onDispose,导致 ctx.onDispose / ctx.timer.* / ctx.subscriptions.add 登记的
6400
+ // 清理永不执行 —— 定时器泄漏 + 退出前 200ms 的 kv 写入丢失,而文档承诺"自动回收"。
6401
+ const hostOnDispose = typeof opts.onDispose === 'function' ? opts.onDispose : null;
6396
6402
  // 规范化 logger:宿主实现缺级时兜底 no-op(插件可用全套 debug/info/warn/error)
6397
6403
  const logger = {
6398
6404
  debug: () => {},
@@ -6402,6 +6408,8 @@ function createPluginContext(opts) {
6402
6408
  ...(opts.logger ?? {}),
6403
6409
  };
6404
6410
  const onDispose = (fn) => {
6411
+ if (typeof fn !== 'function') return fn
6412
+ if (hostOnDispose) hostOnDispose(fn);
6405
6413
  return fn
6406
6414
  };
6407
6415
 
@@ -6410,11 +6418,13 @@ function createPluginContext(opts) {
6410
6418
  setInterval: (fn, ms, ...rest) => {
6411
6419
  const id = setInterval(fn, ms, ...rest);
6412
6420
  if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
6421
+ onDispose(() => clearInterval(id));
6413
6422
  return id
6414
6423
  },
6415
6424
  setTimeout: (fn, ms, ...rest) => {
6416
6425
  const id = setTimeout(fn, ms, ...rest);
6417
6426
  if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
6427
+ onDispose(() => clearTimeout(id));
6418
6428
  return id
6419
6429
  },
6420
6430
  };
@@ -6448,6 +6458,11 @@ function createPluginContext(opts) {
6448
6458
  clearTimeout(kvFlushTimer);
6449
6459
  kvFlushTimer = setTimeout(flushKvNow, 200);
6450
6460
  };
6461
+ // 关停兜底:取消挂起防抖并同步落盘(否则进程退出前 200ms 内的 kv.set 全部丢失)
6462
+ onDispose(() => {
6463
+ clearTimeout(kvFlushTimer);
6464
+ flushKvNow();
6465
+ });
6451
6466
 
6452
6467
  const ctx = {
6453
6468
  name,
@@ -6503,16 +6518,19 @@ function createPluginContext(opts) {
6503
6518
  * visibleLineIds(user) → Set<lineId>|null(全量)
6504
6519
  * listGrants(userId) → [{lineId,mode,grantedBy,grantedAt}]
6505
6520
  * setGrants(userId, [{lineId,mode}]) → 写授权(需 admin 上下文)
6506
- * 变更事件: hooks.on('permissions:changed', { userId }) */
6521
+ * 变更事件:ctx.events.on('permissions:changed', fn)
6522
+ * ——宿主把平台事件统一加 `event:` 前缀,故订阅要走 ctx.events(它会补前缀),
6523
+ * 直接 ctx.hooks.on('permissions:changed') 永远不触发。 */
6507
6524
  permissions: opts.permissions ?? {
6508
6525
  lineMode: () => 'none',
6509
6526
  visibleLineIds: () => new Set(),
6510
6527
  listGrants: () => [],
6511
6528
  setGrants: () => { throw new Error('[sdk] ctx.permissions 未由宿主注入') },
6512
6529
  },
6513
- /** 订阅式清理对象({ dispose(){} })集中登记 */
6530
+ /** 订阅式清理对象({ dispose(){} })集中登记(与 ctx.onDispose 同一回收队列) */
6514
6531
  subscriptions: {
6515
6532
  add: (d) => {
6533
+ onDispose(typeof d === 'function' ? d : (...a) => d.dispose?.(...a));
6516
6534
  return d
6517
6535
  },
6518
6536
  },
@@ -6733,7 +6751,10 @@ function validatePluginSettings(pluginName, defs, { defaultGroup } = {}) {
6733
6751
  // client?: './client.mjs', routes?: [{method,path,handler}] }
6734
6752
  // —— ctx 由宿主注入,插件运行时零导入依赖(sdk/ 供类型与显式糖)。
6735
6753
  //
6736
- // 启停状态机:配置根 plugins-state.json { version, updatedAt, disabled: string[] }
6754
+ // 启停状态机:<home>/plugins-state.json { version, updatedAt, disabled: string[] }
6755
+ // ⚠️ home = $AW_HOME 或 ~/.AgentWorkShop —— **不是**配置根。源码检出下两者不同:
6756
+ // configRoot=<repo>/.AgentWorkShop(数据/kv 在这里),home=~/.AgentWorkShop(状态在这里)。
6757
+ // 全局安装两者重合,所以旧注释写"配置根"时看不出问题。
6737
6758
  // · 装载时跳过 disabled 插件(manifest 仍可见,enabled:false)
6738
6759
  // · 状态文件变化(fs.watch)→ 热重载:全部 dispose/解绑 → 重新装载
6739
6760
  // · CLI(aw plugin enable/disable) 与 Web 设置页均只写状态文件,服务自感知
@@ -6880,7 +6901,8 @@ async function seedRuntimeServices() {
6880
6901
  servicesExt.register('plugins', async () => pluginManifest());
6881
6902
  }
6882
6903
 
6883
- // ---- 启停状态(单一事实源:<配置根>/plugins-state.json;CLI/Web/宿主三方读写) ----
6904
+ // ---- 启停状态(单一事实源:<home>/plugins-state.json;CLI/Web/宿主三方读写) ----
6905
+ // 入参 homeDir 由 modePaths().homeDir 给出($AW_HOME 优先),**不是配置根**。
6884
6906
  function statePathFor(homeDir) {
6885
6907
  return join(homeDir, 'plugins-state.json')
6886
6908
  }
@@ -6903,7 +6925,10 @@ function writeDisabledSet(homeDir, disabled) {
6903
6925
  renameSync(tmp, p);
6904
6926
  }
6905
6927
 
6906
- /** 发现插件入口,三作用域(builtin 同名被 project 覆盖,project 同名被 user 覆盖) */
6928
+ /** 发现插件入口,三作用域。**同名 builtin 优先**(先扫先占,`seen` 去重),
6929
+ * 即优先级 builtin > project > user —— 与 CLI 指令注册表(cli/core/registry.mjs,
6930
+ * 后扫覆盖 → project > user > builtin)方向相反,勿照搬。
6931
+ * 实现见下方循环顺序 [builtin, project, user] + `if (seen.has(name)) continue`。 */
6907
6932
  function discoverPluginDirs(cwd = process.cwd()) {
6908
6933
  const { builtinDir, projectDir, userDir } = modePaths(cwd);
6909
6934
  const out = [];
@@ -7102,9 +7127,11 @@ async function loadAllPlugins(host, { config, paths }) {
7102
7127
  for (const e of groupsCheck.errors) host.logger.warn(`[${def.name}] 分组声明已跳过: ${e}`);
7103
7128
 
7104
7129
  const emitter = {
7130
+ /** @returns {boolean} 注册结果(SDK 契约 `ctx.route(...) → boolean`,勿丢返回值) */
7105
7131
  registerRoute: (n, m, p, h) => {
7106
- host.routes.register(n, m, p, h);
7107
- rec.routes.push({ method: String(m).toUpperCase(), path: p });
7132
+ const ok = host.routes.register(n, m, p, h);
7133
+ if (ok) rec.routes.push({ method: String(m).toUpperCase(), path: p });
7134
+ return ok
7108
7135
  },
7109
7136
  };
7110
7137
  const perPluginDisposables = [];
@@ -7409,14 +7436,11 @@ async function doReload(host) {
7409
7436
  }
7410
7437
  }
7411
7438
  const prevNames = [...host.plugins.keys()];
7412
- // 卸载即注销其注册的全部 agent 工具(否则停用插件后工具仍残留在注册表、可被继续调用)
7439
+ // 工具注销延后:先装载新集、后清「本轮未再装载」的旧插件工具。
7440
+ // 原先在装载前就全部注销 → 重载窗口内(秒级~数十秒)所有插件工具"未知工具",
7441
+ // 期间到达的 Agent 工具调用(daq:sample 自动诊断/kb_store 等)被误拒
7442
+ // (实测生产闭环 Stage D 撞窗失败)。同名工具装载时按"后注册者胜"覆盖,无残留。
7413
7443
  const ompTools = await Promise.resolve().then(function () { return pluginTools; }).catch(() => null);
7414
- for (const prev of prevNames) {
7415
- try {
7416
- ompTools?.unregisterPluginTools(prev);
7417
- }
7418
- catch { /* 注销失败不阻断重载 */ }
7419
- }
7420
7444
  host.plugins.clear();
7421
7445
  host.routes = createRouteTable();
7422
7446
  host.failures = [];
@@ -8101,6 +8125,61 @@ function ensureDataDir(cwd = process.cwd(), env = process.env) {
8101
8125
  }
8102
8126
  catch { /* 迁移失败不阻断 */ }
8103
8127
  return dir
8128
+ }
8129
+
8130
+ /**
8131
+ * AML 平台数据根(<amlRoot>):**项目目录下的 ./aml**,与配置根(.AgentWorkShop)分离。
8132
+ *
8133
+ * 为什么单独一个根、而不是挂在 <configRoot>/data/aml 下:
8134
+ * - AML 的产物是「可移植的资产」——数据集数组、训练作业工作区、ONNX 模型工件。
8135
+ * 这些需要能被 git/rsync/打包带走、被外部 Python 工具直接读取、被人在资源管理器里
8136
+ * 打开查看;埋在 .AgentWorkShop/data 里(那是运行时状态目录,常被 GC/清理)不合适。
8137
+ * - uv 虚拟环境固定在 <amlRoot>/.venv,与数据集/模型同级,整个 ./aml 可以整体删除重建。
8138
+ *
8139
+ * 解析优先级:
8140
+ * ① AW_AML_DIR 环境变量(显式覆盖;测试隔离与自定义部署用)
8141
+ * ② repo 模式 → <检出根>/aml (cwd 向上找 config.yml + nuxt.config.ts)
8142
+ * ③ home 模式(全局安装) → <配置根>/aml (~/.AgentWorkShop/aml)
8143
+ * ④ 兜底 → <cwd>/aml
8144
+ *
8145
+ * @returns {{ dir: string, mode: 'env'|'repo'|'home'|'cwd', projectRoot: string|null }}
8146
+ */
8147
+ function resolveAmlRoot({ cwd = process.cwd(), env = process.env } = {}) {
8148
+ if (env.AW_AML_DIR && String(env.AW_AML_DIR).trim()) {
8149
+ return { dir: resolve$1(String(env.AW_AML_DIR).trim()), mode: 'env', projectRoot: null }
8150
+ }
8151
+ if (env.AW_MODE !== 'home') {
8152
+ const repoRoot = findRepoRoot(cwd);
8153
+ if (repoRoot) return { dir: join(repoRoot, 'aml'), mode: 'repo', projectRoot: repoRoot }
8154
+ }
8155
+ const forceHome = env.AW_MODE === 'home';
8156
+ if (forceHome) return { dir: join(awHome(env), 'aml'), mode: 'home', projectRoot: null }
8157
+ // 非检出目录(既无 config.yml+nuxt.config.ts):配置根优先,最后才落 cwd
8158
+ const localRoot = findLocalConfigRoot(cwd);
8159
+ if (localRoot) return { dir: join(localRoot, 'aml'), mode: 'home', projectRoot: null }
8160
+ return { dir: join(resolve$1(cwd), 'aml'), mode: 'cwd', projectRoot: null }
8161
+ }
8162
+
8163
+ /** AML 数据根绝对路径(仅解析,不创建) */
8164
+ function amlDirFor(cwd = process.cwd(), env = process.env) {
8165
+ return resolveAmlRoot({ cwd, env }).dir
8166
+ }
8167
+
8168
+ /**
8169
+ * 确保 AML 数据根存在并落标准子目录骨架:
8170
+ * .venv/ uv 创建的解释器环境
8171
+ * datasets/<id>/ 数据集快照(spec.json/manifest.json/report.json/arrays/)
8172
+ * jobs/<id>/ 训练作业(workspace/run.log/artifacts/)
8173
+ * models/<id>/ 模型工件(model.onnx/io_spec.json)
8174
+ * runtime/ 运行时状态(uv 安装记录/环境探针缓存)
8175
+ * tools/ 项目本地自动安装的 uv 二进制(免管理员、不污染 PATH)
8176
+ */
8177
+ function ensureAmlDir(cwd = process.cwd(), env = process.env) {
8178
+ const dir = amlDirFor(cwd, env);
8179
+ for (const sub of ['datasets', 'jobs', 'models', 'runtime', 'tools']) {
8180
+ mkdirSync(join(dir, sub), { recursive: true });
8181
+ }
8182
+ return dir
8104
8183
  }
8105
8184
 
8106
8185
  // ============================================================
@@ -8601,7 +8680,10 @@ class LruMap {
8601
8680
  has(key) { return this.map.has(key) }
8602
8681
 
8603
8682
  get(key) {
8604
- if (!this.map.has(key)) { this.misses += 1; return undefined }
8683
+ if (!this.map.has(key)) {
8684
+ this.misses += 1;
8685
+ return undefined
8686
+ }
8605
8687
  // 访问即提升:删了重插(值不变),维持「尾部最新」
8606
8688
  const v = this.map.get(key);
8607
8689
  this.map.delete(key);
@@ -11634,16 +11716,49 @@ function loadJsonFile(filePath, fallback) {
11634
11716
  }
11635
11717
  }
11636
11718
 
11719
+ /**
11720
+ * 紧凑 vs 缩进的切换阈值(顶层元素数)。
11721
+ *
11722
+ * 为什么需要:`null, 2` 缩进对**小文件**是净收益(人可读、diff 友好、成本可忽略),
11723
+ * 但对**大库**是纯税:实测 DCW 回退账本 20000 锚 + 2000 记录 — 缩进 8.57 MB / 23.2 ms,
11724
+ * 紧凑 5.82 MB / 13.2 ms(体积 -32%、CPU -43%)。而它每个 1.5s 防抖窗就要整库重写一次,
11725
+ * 与 PLC 写 sweep 跑在同一个事件循环上 —— 缩进在这里换来的是几十毫秒的阻塞。
11726
+ *
11727
+ * 所以按规模自动选择:小库保持缩进(可读性),大库走紧凑(性能)。
11728
+ * 2000 是实测拐点量级:低于此的库序列化都在亚毫秒,缩进白拿。
11729
+ */
11730
+ const PRETTY_MAX_ENTRIES = 2000;
11731
+
11732
+ /** 顶层元素数估算(数组取长度;对象取各数组属性长度之和)——用于选择序列化形态 */
11733
+ function entryCount(data) {
11734
+ if (Array.isArray(data)) return data.length
11735
+ if (data && typeof data === 'object') {
11736
+ let n = 0;
11737
+ for (const v of Object.values(data)) if (Array.isArray(v)) n += v.length;
11738
+ return n
11739
+ }
11740
+ return 0
11741
+ }
11742
+
11743
+ /** 按规模选择缩进(小库可读、大库省 CPU/IO) */
11744
+ function serializeJson(data) {
11745
+ return entryCount(data) > PRETTY_MAX_ENTRIES
11746
+ ? JSON.stringify(data)
11747
+ : JSON.stringify(data, null, 2)
11748
+ }
11749
+
11637
11750
  /**
11638
11751
  * 原子落盘:写临时文件 → rename 替换;失败退回直写。
11752
+ * 序列化形态按库规模自动选择(见 serializeJson)。
11639
11753
  * @param {string} filePath
11640
11754
  * @param {unknown} data
11641
11755
  */
11642
11756
  function saveJsonFileAtomic(filePath, data) {
11643
11757
  mkdirSync(dirname$1(filePath), { recursive: true });
11644
11758
  const tmp = `${filePath}.tmp-${process.pid}`;
11759
+ const payload = serializeJson(data);
11645
11760
  try {
11646
- writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf-8');
11761
+ writeFileSync(tmp, payload, 'utf-8');
11647
11762
  try {
11648
11763
  renameSync(tmp, filePath);
11649
11764
  return
@@ -11655,7 +11770,7 @@ function saveJsonFileAtomic(filePath, data) {
11655
11770
  catch (tmpErr) {
11656
11771
  console.error(`[json-store] 临时文件写入失败(${tmpErr.message}),退回直写`);
11657
11772
  }
11658
- writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
11773
+ writeFileSync(filePath, payload, 'utf-8');
11659
11774
  }
11660
11775
 
11661
11776
  var __defProp$C = Object.defineProperty;
@@ -12079,10 +12194,6 @@ class DaqNodeRuntime {
12079
12194
  this.lastPublishAt = 0;
12080
12195
  this.lastIngestAt = 0;
12081
12196
  }
12082
- /** 仅重置下发游标(全局下发间隔变更时,让新缺省立刻可观测) */
12083
- republish() {
12084
- this.lastPublishAt = 0;
12085
- }
12086
12197
  /**
12087
12198
  * 是否已到采样时点(网关调度用)。
12088
12199
  * 网关每拍派发额度有限,先判到期再占用额度:未到期的节点零成本跳过,
@@ -12253,16 +12364,6 @@ class DaqNodeRepo {
12253
12364
  log$u.error("[daq] \u5FEB\u7167\u843D\u76D8\u5931\u8D25:", err);
12254
12365
  }
12255
12366
  }
12256
- /** 读数落盘防抖(采样循环每帧调用;5s 合并一次磁盘写) */
12257
- flushDebounced(ms = 5e3) {
12258
- var _a, _b;
12259
- if (this.flushTimer) return;
12260
- this.flushTimer = setTimeout(() => {
12261
- this.flushTimer = null;
12262
- this.flushNow();
12263
- }, ms);
12264
- (_b = (_a = this.flushTimer).unref) == null ? void 0 : _b.call(_a);
12265
- }
12266
12367
  }
12267
12368
  const g$n = globalThis;
12268
12369
  function getDaqNodeRepo() {
@@ -12669,6 +12770,21 @@ class DaqController {
12669
12770
  __publicField$y(this, "siblingsCache", new LruMap(500));
12670
12771
  /** 遥测 WS 推送(1s/设备节流):孪生状态/遥测事件化直推,前端全量轮询降级为断线兜底 */
12671
12772
  __publicField$y(this, "twinPushAt", /* @__PURE__ */ new Map());
12773
+ /**
12774
+ * 帧查询的「内存读穿透」索引 —— 帧先入 frameBuffer 再广播 thumbUrl(contentUrl),
12775
+ * TSDB 为 500ms 防抖异步刷盘,收到 WS 立刻回查会在落库前 404,故查询侧先看 buffer。
12776
+ *
12777
+ * 为什么要有索引:早先 frameContent 直接线性扫 frameBuffer,而 frames() 更糟 ——
12778
+ * 它对每个 pending 行都调一次 framesFromBuffer(),即**在 O(n) 的外层里再套 O(n) 的全扫**
12779
+ * (n = FRAME_BUFFER_CAP = 2000):突发写入后缓冲全满时,单次 REST 查询 ≈ 4×10⁶ 次迭代
12780
+ * + 2000 次多余对象构造,而它和 250ms 采样 sweep 跑在同一个事件循环上。
12781
+ *
12782
+ * 现在:byNode 按节点分桶(范围查询只扫该节点的行),byKey 给出 (nodeId, tsMs) 的 O(1) 命中。
12783
+ * 两个索引与 frameBuffer 严格同生命周期 —— 所有 push/淘汰/flush 都必须经下面的私有方法,
12784
+ * 不允许直接操作 frameBuffer,否则索引会与缓冲漂移(表现为"刚采到的帧查不到")。
12785
+ */
12786
+ __publicField$y(this, "frameByNode", /* @__PURE__ */ new Map());
12787
+ __publicField$y(this, "frameByKey", /* @__PURE__ */ new Map());
12672
12788
  }
12673
12789
  // ---------- 生命周期 ----------
12674
12790
  ensureLoop() {
@@ -12857,7 +12973,7 @@ class DaqController {
12857
12973
  const lineRun = (_b = (_a = getDaqHostPorts()) == null ? void 0 : _a.lineRun.activeRun(node.lineId)) != null ? _b : null;
12858
12974
  if (lineRun) (_c = getDaqHostPorts()) == null ? void 0 : _c.lineRun.bumpTaggedSamples(node.lineId);
12859
12975
  const metrics = (_d = f.metrics) != null ? _d : {};
12860
- this.frameBuffer.push({
12976
+ this.pushFrame({
12861
12977
  nodeId: node.id,
12862
12978
  tsMs,
12863
12979
  kind: f.kind,
@@ -12872,8 +12988,7 @@ class DaqController {
12872
12988
  metrics
12873
12989
  });
12874
12990
  if (this.frameBuffer.length > FRAME_BUFFER_CAP) {
12875
- this.frameBuffer.splice(0, this.frameBuffer.length - FRAME_BUFFER_CAP);
12876
- this.tsdbDropped += 1;
12991
+ if (this.evictFrames(FRAME_BUFFER_CAP) > 0) this.tsdbDropped += 1;
12877
12992
  }
12878
12993
  this.scheduleTsdbFlush();
12879
12994
  this.evaluateMetricAlarms(node, tpl, metrics);
@@ -12963,13 +13078,6 @@ class DaqController {
12963
13078
  }
12964
13079
  this.emitController();
12965
13080
  }
12966
- /** 网关停止:全部节点置 offline */
12967
- markAllOffline() {
12968
- for (const n of this.repo.all()) {
12969
- if (n.enabled) n.state = "offline";
12970
- }
12971
- this.emitController();
12972
- }
12973
13081
  /** 运行时注册表对账(仓库为权威:增删节点/启动即对齐;返回新建的运行时) */
12974
13082
  syncRuntimes() {
12975
13083
  const live = /* @__PURE__ */ new Set();
@@ -13100,8 +13208,9 @@ class DaqController {
13100
13208
  }
13101
13209
  }
13102
13210
  }
13103
- while (this.frameBuffer.length > 0) {
13104
- const batch = this.frameBuffer.splice(0, this.frameBuffer.length);
13211
+ let pendingFrames = this.drainFrames();
13212
+ while (pendingFrames.length > 0) {
13213
+ const batch = pendingFrames;
13105
13214
  let ok = false;
13106
13215
  for (let attempt = 0; attempt < TSDB_WRITE_RETRIES && !ok; attempt++) {
13107
13216
  try {
@@ -13117,6 +13226,7 @@ class DaqController {
13117
13226
  }
13118
13227
  }
13119
13228
  }
13229
+ pendingFrames = this.drainFrames();
13120
13230
  }
13121
13231
  } finally {
13122
13232
  this.tsdbWriting = false;
@@ -13176,10 +13286,6 @@ class DaqController {
13176
13286
  setBroadcast(fn) {
13177
13287
  this.broadcast = fn;
13178
13288
  }
13179
- onlineCount() {
13180
- if (!this.running) return 0;
13181
- return this.repo.all().filter((n) => n.enabled).length;
13182
- }
13183
13289
  controllerState() {
13184
13290
  const queueLost = g_queueLost();
13185
13291
  const nodes = this.repo.all();
@@ -13227,30 +13333,62 @@ class DaqController {
13227
13333
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13228
13334
  return getTsdb().query(id, opts);
13229
13335
  }
13230
- /** 帧查询的「内存读穿透」:帧先入 frameBuffer 再广播 thumbUrl(contentUrl),
13231
- * TSDB 为 500ms 防抖异步刷盘 —— 收到 WS 立刻回查会在落库前 404。
13232
- * 故查询侧按 (nodeId, tsMs) 先看 buffer 命中;与 TSDB 返回形态逐字段对齐
13233
- * (points 从 meta.points 还原,规则同 tsdb adapter 的 pointsFromMeta)。
13234
- * 注:刷盘 splice 与查询同一 JS 线程,不存在「既不在 buffer 又没落库」的空窗。 */
13235
- framesFromBuffer(id, tsMs) {
13336
+ /** 帧索引键((nodeId, tsMs) 唯一:同一节点同一毫秒只会有一帧) */
13337
+ static frameKey(nodeId, tsMs) {
13338
+ return `${nodeId}@${tsMs}`;
13339
+ }
13340
+ /** 入缓冲 + 同步三处索引 */
13341
+ pushFrame(row) {
13342
+ this.frameBuffer.push(row);
13343
+ const key = DaqController.frameKey(row.nodeId, row.tsMs);
13344
+ this.frameByKey.set(key, row);
13345
+ const bucket = this.frameByNode.get(row.nodeId);
13346
+ if (bucket) bucket.push(row);
13347
+ else this.frameByNode.set(row.nodeId, [row]);
13348
+ }
13349
+ /** 淘汰最旧若干行,并同步清理索引(避免索引持有已淘汰行的强引用 → 内存泄漏) */
13350
+ evictFrames(keepLast) {
13351
+ const excess = this.frameBuffer.length - keepLast;
13352
+ if (excess <= 0) return 0;
13353
+ const dropped = this.frameBuffer.splice(0, excess);
13354
+ for (const row of dropped) {
13355
+ const key = DaqController.frameKey(row.nodeId, row.tsMs);
13356
+ if (this.frameByKey.get(key) === row) this.frameByKey.delete(key);
13357
+ const bucket = this.frameByNode.get(row.nodeId);
13358
+ if (!bucket) continue;
13359
+ const idx = bucket.indexOf(row);
13360
+ if (idx >= 0) bucket.splice(idx, 1);
13361
+ if (bucket.length === 0) this.frameByNode.delete(row.nodeId);
13362
+ }
13363
+ return dropped.length;
13364
+ }
13365
+ /** 取走全部帧(刷盘用)并清空索引 */
13366
+ drainFrames() {
13367
+ if (this.frameBuffer.length === 0) return [];
13368
+ const batch = this.frameBuffer.splice(0, this.frameBuffer.length);
13369
+ this.frameByNode.clear();
13370
+ this.frameByKey.clear();
13371
+ return batch;
13372
+ }
13373
+ /** 单行 → 对外记录(纯映射,不做任何扫描) */
13374
+ static toFrameRecord(r) {
13236
13375
  var _a, _b, _c, _d, _e;
13237
- const out = [];
13238
- for (const r of this.frameBuffer) {
13239
- if (r.nodeId !== id || r.tsMs !== tsMs) continue;
13240
- out.push({
13241
- at: r.tsMs,
13242
- kind: r.kind,
13243
- points: r.kind === "vector" ? DaqController.pointsFromMeta(r.meta) : void 0,
13244
- metrics: r.metrics,
13245
- meta: r.meta,
13246
- deviceBindingId: (_a = r.deviceBindingId) != null ? _a : null,
13247
- lineId: (_b = r.lineId) != null ? _b : null,
13248
- productId: (_c = r.productId) != null ? _c : null,
13249
- recipeId: (_d = r.recipeId) != null ? _d : null,
13250
- runId: (_e = r.runId) != null ? _e : null
13251
- });
13252
- }
13253
- return out;
13376
+ return {
13377
+ at: r.tsMs,
13378
+ kind: r.kind,
13379
+ points: r.kind === "vector" ? DaqController.pointsFromMeta(r.meta) : void 0,
13380
+ metrics: r.metrics,
13381
+ meta: r.meta,
13382
+ deviceBindingId: (_a = r.deviceBindingId) != null ? _a : null,
13383
+ lineId: (_b = r.lineId) != null ? _b : null,
13384
+ productId: (_c = r.productId) != null ? _c : null,
13385
+ recipeId: (_d = r.recipeId) != null ? _d : null,
13386
+ runId: (_e = r.runId) != null ? _e : null
13387
+ };
13388
+ }
13389
+ /** (nodeId, tsMs) 精确命中未刷盘帧;O(1) */
13390
+ bufferedFrameAt(id, tsMs) {
13391
+ return this.frameByKey.get(DaqController.frameKey(id, tsMs));
13254
13392
  }
13255
13393
  /** 向量点列从 meta.points 还原(与 TSDB adapter 同规则:非数组/空/越界/非数值 → undefined) */
13256
13394
  static pointsFromMeta(meta) {
@@ -13260,21 +13398,17 @@ class DaqController {
13260
13398
  }
13261
13399
  /** 节点帧历史(v2:向量/图像元数据;像素按需经 frameContent 从对象存储取) */
13262
13400
  async frames(id, opts) {
13263
- var _a;
13401
+ var _a, _b, _c, _d;
13264
13402
  this.ensureLoop();
13265
13403
  await tsdbReady;
13266
13404
  const node = this.repo.byId(id);
13267
13405
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13268
13406
  const rows = await getTsdb().queryFrames(id, opts);
13269
13407
  const seen = new Set(rows.map((r) => r.at));
13270
- const pending = this.frameBuffer.filter((r) => {
13271
- var _a2, _b;
13272
- return r.nodeId === id && (opts.kind == null || r.kind === opts.kind) && r.tsMs >= ((_a2 = opts.fromMs) != null ? _a2 : 0) && r.tsMs <= ((_b = opts.toMs) != null ? _b : Date.now());
13273
- }).filter((r) => !seen.has(r.tsMs)).sort((a, b) => b.tsMs - a.tsMs).map((r) => {
13274
- var _a2;
13275
- return (_a2 = this.framesFromBuffer(id, r.tsMs)[0]) != null ? _a2 : null;
13276
- }).filter((r) => r != null);
13277
- return [...rows, ...pending].slice(0, Math.min(Math.max((_a = opts.limit) != null ? _a : 100, 1), 1e3));
13408
+ const toMs = (_a = opts.toMs) != null ? _a : Date.now();
13409
+ const fromMs = (_b = opts.fromMs) != null ? _b : 0;
13410
+ const pending = ((_c = this.frameByNode.get(id)) != null ? _c : []).filter((r) => (opts.kind == null || r.kind === opts.kind) && r.tsMs >= fromMs && r.tsMs <= toMs && !seen.has(r.tsMs)).sort((a, b) => b.tsMs - a.tsMs).map(DaqController.toFrameRecord);
13411
+ return [...rows, ...pending].slice(0, Math.min(Math.max((_d = opts.limit) != null ? _d : 100, 1), 1e3));
13278
13412
  }
13279
13413
  /** 帧内容(图像主图/缩略图;从对象存储读取后由 REST 流式返回) */
13280
13414
  async frameContent(id, tsMs, thumb) {
@@ -13282,7 +13416,8 @@ class DaqController {
13282
13416
  await tsdbReady;
13283
13417
  const node = this.repo.byId(id);
13284
13418
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13285
- const rows = this.framesFromBuffer(id, tsMs);
13419
+ const buffered = this.bufferedFrameAt(id, tsMs);
13420
+ const rows = buffered ? [DaqController.toFrameRecord(buffered)] : await getTsdb().queryFrames(id, { fromMs: tsMs - 1, toMs: tsMs + 1, limit: 5 });
13286
13421
  if (rows.length === 0) rows.push(...await getTsdb().queryFrames(id, { fromMs: tsMs - 1, toMs: tsMs + 1, limit: 5 }));
13287
13422
  const row = rows.find((r) => r.at === tsMs);
13288
13423
  if (!row || row.kind !== "image") throw Object.assign(new Error(`\u5E27\u4E0D\u5B58\u5728: ${id}@${tsMs}`), { status: 404 });
@@ -22095,6 +22230,10 @@ function createAmlRepo(db) {
22095
22230
  },
22096
22231
  remove(id) {
22097
22232
  db.prepare("DELETE FROM aml_datasets WHERE id = ?").run(id);
22233
+ },
22234
+ /** 元数据局部更新(备注;CRUD 的 U) */
22235
+ updateNote(id, note) {
22236
+ db.prepare("UPDATE aml_datasets SET note = ? WHERE id = ?").run(note, id);
22098
22237
  }
22099
22238
  },
22100
22239
  // ----- jobs -----
@@ -22145,6 +22284,14 @@ function createAmlRepo(db) {
22145
22284
  },
22146
22285
  requeue(id) {
22147
22286
  jobRetryBump.run(id);
22287
+ },
22288
+ remove(id) {
22289
+ db.prepare("DELETE FROM aml_jobs WHERE id = ?").run(id);
22290
+ },
22291
+ /** 删除作业时级联清实验谱系(否则实验行成为悬挂元数据) */
22292
+ removeExperimentsOf(jobId) {
22293
+ const r = db.prepare("DELETE FROM aml_experiments WHERE job_id = ?").run(jobId);
22294
+ return Number(r.changes);
22148
22295
  }
22149
22296
  },
22150
22297
  // ----- experiments -----
@@ -22238,23 +22385,75 @@ function createAmlRepo(db) {
22238
22385
  },
22239
22386
  markPruned(id) {
22240
22387
  modelPrune.run(id);
22388
+ },
22389
+ remove(id) {
22390
+ db.prepare("DELETE FROM aml_models WHERE id = ?").run(id);
22391
+ },
22392
+ updateNote(id, note) {
22393
+ db.prepare("UPDATE aml_models SET note = ? WHERE id = ?").run(note, id);
22241
22394
  }
22242
22395
  }
22243
22396
  };
22244
22397
  }
22245
22398
 
22246
22399
  const g$5 = globalThis;
22247
- function configureAmlRuntime(db, dataDir) {
22400
+ const README = `# AML \u5E73\u53F0\u6570\u636E\u76EE\u5F55
22401
+
22402
+ \u672C\u76EE\u5F55\u662F AgentWorkShop \u81EA\u52A8\u5EFA\u6A21(AML)\u5E73\u53F0\u7684**\u5168\u90E8\u8D44\u4EA7\u6839**,\u7531\u670D\u52A1\u81EA\u52A8\u521B\u5EFA\u4E0E\u7EF4\u62A4\u3002
22403
+
22404
+ ## \u76EE\u5F55\u7EA6\u5B9A
22405
+
22406
+ | \u8DEF\u5F84 | \u5185\u5BB9 | \u53EF\u5426\u624B\u5220 |
22407
+ | --- | --- | --- |
22408
+ | \`.venv/\` | uv \u521B\u5EFA/\u7BA1\u7406\u7684 Python \u73AF\u5883(\u4F9D\u8D56\u9501\u5B9A\u5728\u5E73\u53F0\u7684 requirements.txt) | \u53EF\u5220,\u4E0B\u6B21\u4F9B\u7ED9\u81EA\u52A8\u91CD\u5EFA |
22409
+ | \`datasets/<id>/\` | \u6570\u636E\u96C6\u5B9E\u4F53:\`spec.json\` \u53D6\u6570\u89C4\u683C\u3001\`manifest.json\` \u5217\u5B9A\u4E49\u3001\`report.json\` \u8D28\u91CF\u62A5\u544A\u3001\`arrays/*.f32\` \u5217\u5F0F\u6570\u7EC4 | \u5148\u5220\u5143\u6570\u636E\u884C,\u518D\u5220\u76EE\u5F55 |
22410
+ | \`jobs/<id>/\` | \u8BAD\u7EC3\u4F5C\u4E1A\u5B9E\u4F53:\`job.json\` \u63D0\u4EA4\u5951\u7EA6\u3001\`workspace/\`(train.py + amlkit.py)\u3001\`run.log\`\u3001\`artifacts/\`(\u4EA7\u51FA\u6A21\u578B) | \u540C\u4E0A |
22411
+ | \`models/<id>/\` | \u6A21\u578B\u5B9E\u4F53:\`model.onnx\` + \`io_spec.json\`(\u8F93\u5165\u8F93\u51FA\u5951\u7EA6,\u4E0D\u53EF\u53D8) | \u540C\u4E0A |
22412
+ | \`runtime/\` | \u5E73\u53F0\u8FD0\u884C\u65F6\u72B6\u6001:uv \u5B89\u88C5\u8BB0\u5F55(\`uv.json\`)\u3001\u73AF\u5883\u63A2\u9488\u5FEB\u7167(\`env.json\`) | \u53EF\u5220,\u81EA\u52A8\u91CD\u5EFA |
22413
+ | \`tools/\` | \u5E73\u53F0\u81EA\u52A8\u5B89\u88C5\u7684 uv \u4E8C\u8FDB\u5236(\u514D\u7BA1\u7406\u5458\u3001\u4E0D\u6539\u7CFB\u7EDF PATH) | \u53EF\u5220,\u53EF\u91CD\u65B0\u4E00\u952E\u5B89\u88C5 |
22414
+
22415
+ ## \u5143\u6570\u636E\u4E0E\u5B9E\u4F53\u7684\u5173\u7CFB
22416
+
22417
+ \u5E73\u53F0\u7528 SQLite \u56DB\u8868\u4FDD\u5B58**\u5143\u6570\u636E**(\u6570\u636E\u96C6/\u4F5C\u4E1A/\u5B9E\u9A8C/\u6A21\u578B),\u7528\u672C\u76EE\u5F55\u4FDD\u5B58**\u5B9E\u4F53**\u3002
22418
+ \u4E24\u8005\u4EE5 id \u4E00\u4E00\u5BF9\u5E94;REST \u7684 \`/api/workshop/aml/*\` \u63D0\u4F9B\u5143\u6570\u636E CRUD,
22419
+ \u5220\u9664\u5143\u6570\u636E\u65F6\u540C\u6B65\u6E05\u7406\u5BF9\u5E94\u5B9E\u4F53\u76EE\u5F55(\u6709\u5F15\u7528\u7684\u6570\u636E\u96C6\u4F1A\u88AB\u62D2\u7EDD\u5220\u9664)\u3002
22420
+
22421
+ ## \u8FC1\u79FB\u5230\u522B\u7684\u673A\u5668
22422
+
22423
+ \u6574\u4E2A \`aml/\` \u76EE\u5F55\u53EF\u76F4\u63A5\u62F7\u8D1D(\u542B \`.venv\` \u4E0E\u6A21\u578B\u5DE5\u4EF6);\u76EE\u6807\u673A\u82E5\u65E0\u540C\u7248\u672C Python,
22424
+ \u5220\u6389 \`.venv/\` \u8BA9\u5E73\u53F0\u6309\u672C\u673A\u89E3\u91CA\u5668\u91CD\u5EFA\u5373\u53EF \u2014\u2014 \u6570\u636E\u96C6\u4E0E\u6A21\u578B\u5DE5\u4EF6\u4E0D\u53D7\u5F71\u54CD\u3002
22425
+ `;
22426
+ const GITIGNORE = `# AML \u8FD0\u884C\u65F6\u8D44\u4EA7:\u4F53\u79EF\u5927\u4E14\u4E0E\u673A\u5668\u7ED1\u5B9A,\u4E0D\u5165\u5E93
22427
+ .venv/
22428
+ tools/
22429
+ runtime/
22430
+ datasets/
22431
+ jobs/
22432
+ models/
22433
+ `;
22434
+ function configureAmlRuntime(db, _dataDir) {
22248
22435
  if (g$5.__amlRuntime) return g$5.__amlRuntime;
22249
- const root = join(dataDir, "aml");
22436
+ const resolved = resolveAmlRoot({});
22437
+ const root = ensureAmlDir();
22250
22438
  const rt = {
22251
22439
  db,
22252
22440
  root,
22441
+ rootMode: resolved.mode,
22442
+ projectRoot: resolved.projectRoot,
22253
22443
  repo: createAmlRepo(db),
22254
22444
  datasetsDir: join(root, "datasets"),
22255
22445
  jobsDir: join(root, "jobs"),
22256
- modelsDir: join(root, "models")
22446
+ modelsDir: join(root, "models"),
22447
+ venvDir: join(root, ".venv"),
22448
+ toolsDir: join(root, "tools"),
22449
+ runtimeDir: join(root, "runtime")
22257
22450
  };
22451
+ mkdirSync(rt.venvDir, { recursive: true });
22452
+ try {
22453
+ if (!existsSync(join(root, "README.md"))) writeFileSync(join(root, "README.md"), README);
22454
+ if (!existsSync(join(root, ".gitignore"))) writeFileSync(join(root, ".gitignore"), GITIGNORE);
22455
+ } catch {
22456
+ }
22258
22457
  g$5.__amlRuntime = rt;
22259
22458
  return rt;
22260
22459
  }
@@ -22264,6 +22463,24 @@ function getAmlRuntime() {
22264
22463
  }
22265
22464
  return g$5.__amlRuntime;
22266
22465
  }
22466
+ function amlRootSourceLabel(mode) {
22467
+ switch (mode) {
22468
+ case "env":
22469
+ return "\u73AF\u5883\u53D8\u91CF AW_AML_DIR \u6307\u5B9A";
22470
+ case "repo":
22471
+ return "\u9879\u76EE\u68C0\u51FA\u6839(./aml)";
22472
+ case "home":
22473
+ return "\u7528\u6237\u914D\u7F6E\u6839(~/.AgentWorkShop/aml)";
22474
+ default:
22475
+ return "\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55(./aml)";
22476
+ }
22477
+ }
22478
+ function isInsideAmlRoot(rt, p) {
22479
+ const norm = (s) => s.replace(/\\/g, "/").replace(/\/+$/, "");
22480
+ const root = norm(rt.root);
22481
+ const target = norm(p);
22482
+ return target === root || target.startsWith(`${root}/`);
22483
+ }
22267
22484
 
22268
22485
  const amlDatasetSpecSchema = z.object({
22269
22486
  lineId: z.string().min(1),
@@ -22802,6 +23019,7 @@ async function buildDataset(spec, by) {
22802
23019
  beatMs: beat
22803
23020
  };
22804
23021
  writeFileSync(join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
23022
+ writeFileSync(join(dir, "spec.json"), JSON.stringify(spec, null, 2));
22805
23023
  const nodeSummaries = [];
22806
23024
  for (const n of order) {
22807
23025
  bucketsPart.train.flatMap(() => []);
@@ -23059,8 +23277,11 @@ function killHarnessProcess(pid) {
23059
23277
  }
23060
23278
 
23061
23279
  const log$l = createLogger("aml.py");
23280
+ const UV_INSTALL_TIMEOUT_MS = 10 * 6e4;
23281
+ const VENV_CREATE_TIMEOUT_MS = 5 * 6e4;
23282
+ const PIP_INSTALL_TIMEOUT_MS = 20 * 6e4;
23062
23283
  const g$4 = globalThis;
23063
- function runCapture(cmd, args, timeoutMs) {
23284
+ function runCapture(cmd, args, timeoutMs, onData) {
23064
23285
  return new Promise((resolve) => {
23065
23286
  var _a, _b;
23066
23287
  const child = spawnLineProcess(cmd, args);
@@ -23073,10 +23294,14 @@ function runCapture(cmd, args, timeoutMs) {
23073
23294
  [timeout ${timeoutMs}ms]` });
23074
23295
  }, timeoutMs);
23075
23296
  (_a = child.stdout) == null ? void 0 : _a.on("data", (d) => {
23076
- out += String(d);
23297
+ const s = String(d);
23298
+ out += s;
23299
+ onData == null ? void 0 : onData(s);
23077
23300
  });
23078
23301
  (_b = child.stderr) == null ? void 0 : _b.on("data", (d) => {
23079
- err += String(d);
23302
+ const s = String(d);
23303
+ err += s;
23304
+ onData == null ? void 0 : onData(s);
23080
23305
  });
23081
23306
  child.on("error", (e) => {
23082
23307
  clearTimeout(timer);
@@ -23088,21 +23313,152 @@ function runCapture(cmd, args, timeoutMs) {
23088
23313
  });
23089
23314
  });
23090
23315
  }
23316
+ function uvBinName() {
23317
+ return process.platform === "win32" ? "uv.exe" : "uv";
23318
+ }
23319
+ function looksLikePath(name) {
23320
+ return name.includes("/") || name.includes("\\") || /^[A-Za-z]:/.test(name);
23321
+ }
23322
+ function readUvRecord(rt) {
23323
+ try {
23324
+ const p = join(rt.runtimeDir, "uv.json");
23325
+ if (!existsSync(p)) return null;
23326
+ const parsed = JSON.parse(readFileSync(p, "utf8"));
23327
+ return parsed && typeof parsed.uvPath === "string" ? parsed : null;
23328
+ } catch {
23329
+ return null;
23330
+ }
23331
+ }
23332
+ function writeUvRecord(rt, rec) {
23333
+ try {
23334
+ mkdirSync(rt.runtimeDir, { recursive: true });
23335
+ writeFileSync(join(rt.runtimeDir, "uv.json"), JSON.stringify(rec, null, 2));
23336
+ } catch (err) {
23337
+ log$l.warn("[aml-uv] \u5B89\u88C5\u8BB0\u5F55\u843D\u76D8\u5931\u8D25:", err == null ? void 0 : err.message);
23338
+ }
23339
+ }
23340
+ function findUvInDir(dir, depth = 3) {
23341
+ if (depth < 0 || !existsSync(dir)) return null;
23342
+ let entries;
23343
+ try {
23344
+ entries = readdirSync(dir);
23345
+ } catch {
23346
+ return null;
23347
+ }
23348
+ const want = uvBinName();
23349
+ for (const e of entries) {
23350
+ if (e === want) {
23351
+ const p = join(dir, e);
23352
+ try {
23353
+ if (statSync(p).isFile()) return p;
23354
+ } catch {
23355
+ }
23356
+ }
23357
+ }
23358
+ for (const e of entries) {
23359
+ if (e === "bin" || e === "Scripts" || e === "tools") {
23360
+ const p = join(dir, e, want);
23361
+ try {
23362
+ if (existsSync(p) && statSync(p).isFile()) return p;
23363
+ } catch {
23364
+ }
23365
+ }
23366
+ }
23367
+ for (const e of entries) {
23368
+ const p = join(dir, e);
23369
+ try {
23370
+ if (!statSync(p).isDirectory()) continue;
23371
+ } catch {
23372
+ continue;
23373
+ }
23374
+ const hit = findUvInDir(p, depth - 1);
23375
+ if (hit) return hit;
23376
+ }
23377
+ return null;
23378
+ }
23379
+ function platformPythonDir() {
23380
+ var _a, _b, _c;
23381
+ const rel = join("server", "services", "workshop", "aml", "python");
23382
+ const fallback = join(process.cwd(), rel);
23383
+ const candidates = [
23384
+ (_a = process.env.AML_PYHOME) != null ? _a : "",
23385
+ fallback,
23386
+ join(process.cwd(), ".output", ".AgentWorkShop", "aml-python"),
23387
+ join((_b = process.env.AW_PACKAGE_ROOT) != null ? _b : process.cwd(), rel),
23388
+ join((_c = process.env.AW_PACKAGE_ROOT) != null ? _c : process.cwd(), ".output", ".AgentWorkShop", "aml-python")
23389
+ ];
23390
+ for (const c of candidates) {
23391
+ if (c && existsSync(join(c, "amlkit.py"))) return c;
23392
+ }
23393
+ return fallback;
23394
+ }
23395
+ function venvDir(rt) {
23396
+ return rt.venvDir || join(rt.root, ".venv");
23397
+ }
23398
+ function venvPythonPath(rt) {
23399
+ return process.platform === "win32" ? join(venvDir(rt), "Scripts", "python.exe") : join(venvDir(rt), "bin", "python");
23400
+ }
23401
+ function resetProbeCache() {
23402
+ g$4.__amlPyProbe = void 0;
23403
+ g$4.__amlUvProbe = void 0;
23404
+ g$4.__amlVenvPromise = void 0;
23405
+ }
23406
+ async function probeUvBinary(candidate, source) {
23407
+ var _a;
23408
+ const resolved = (_a = resolveOnPath(candidate)) != null ? _a : looksLikePath(candidate) || existsSync(candidate) ? candidate : void 0;
23409
+ if (!resolved) return null;
23410
+ if (!existsSync(resolved)) return null;
23411
+ const r = await runCapture(resolved, ["--version"], 15e3);
23412
+ if (r.code !== 0) return null;
23413
+ return { ok: true, path: resolved, version: (r.out || r.err).trim().split("\n")[0], source };
23414
+ }
23415
+ async function probeUv(rt) {
23416
+ if (g$4.__amlUvProbe) return g$4.__amlUvProbe;
23417
+ const s = amlSettings();
23418
+ const attempts = [];
23419
+ if (s.python.uvBin) attempts.push([s.python.uvBin, "config"]);
23420
+ const record = rt ? readUvRecord(rt) : null;
23421
+ if (rt) {
23422
+ const projectHit = findUvInDir(rt.toolsDir);
23423
+ if (projectHit) attempts.push([projectHit, "project"]);
23424
+ }
23425
+ if (record == null ? void 0 : record.uvPath) attempts.push([record.uvPath, "state"]);
23426
+ if (!s.python.uvBin) attempts.push(["uv", "path"]);
23427
+ for (const [candidate, source] of attempts) {
23428
+ const hit = await probeUvBinary(candidate, source);
23429
+ if (hit) {
23430
+ g$4.__amlUvProbe = hit;
23431
+ log$l.info(`[aml-uv] \u63A2\u6D4B\u5230 uv ${hit.version} @ ${hit.path} (\u6765\u6E90=${source})`);
23432
+ return hit;
23433
+ }
23434
+ }
23435
+ if (process.platform !== "win32" && !s.python.uvBin) {
23436
+ const r = await runCapture("which", ["uv"], 5e3);
23437
+ const p = r.out.trim().split("\n")[0];
23438
+ if (r.code === 0 && p) {
23439
+ const hit = await probeUvBinary(p, "path");
23440
+ if (hit) {
23441
+ g$4.__amlUvProbe = hit;
23442
+ return hit;
23443
+ }
23444
+ }
23445
+ }
23446
+ const miss = {
23447
+ ok: false,
23448
+ reason: "\u672A\u68C0\u6D4B\u5230 uv\u3002\u53EF\u70B9\u51FB\u300C\u4E00\u952E\u5B89\u88C5 uv\u300D\u7531\u5E73\u53F0\u81EA\u52A8\u5B89\u88C5\u5230 ./aml/tools(\u514D\u7BA1\u7406\u5458\u3001\u4E0D\u6539\u7CFB\u7EDF PATH),\u6216\u5728\u8BBE\u7F6E\u4E2D\u6307\u5B9A aml.python.uvBin\u3002"
23449
+ };
23450
+ g$4.__amlUvProbe = miss;
23451
+ return miss;
23452
+ }
23091
23453
  async function probePython() {
23092
23454
  var _a;
23093
23455
  if (g$4.__amlPyProbe) return g$4.__amlPyProbe;
23094
23456
  const s = amlSettings();
23457
+ const rt = safeRuntime();
23458
+ const uv = rt ? await probeUv(rt) : void 0;
23095
23459
  const candidates = s.python.pythonBin ? [s.python.pythonBin] : process.platform === "win32" ? ["python", "py"] : ["python3", "python"];
23096
- let uvPath;
23097
- const uvName = s.python.uvBin || "uv";
23098
- const uvResolved = resolveOnPath(uvName);
23099
- if (uvResolved) uvPath = uvResolved;
23100
- else if (!s.python.uvBin && process.platform !== "win32") {
23101
- const r = await runCapture("which", [uvName], 5e3);
23102
- if (r.code === 0 && r.out.trim()) uvPath = r.out.trim().split("\n")[0];
23103
- }
23104
23460
  for (const name of candidates) {
23105
- const resolved = (_a = resolveOnPath(name)) != null ? _a : name.includes("/") || name.includes("\\") || /^[A-Za-z]:/.test(name) ? name : void 0;
23461
+ const resolved = (_a = resolveOnPath(name)) != null ? _a : looksLikePath(name) ? name : void 0;
23106
23462
  if (!resolved || !existsSync(resolved)) continue;
23107
23463
  const probe = await runCapture(resolved, ["--version"], 1e4);
23108
23464
  if (probe.code === 0) {
@@ -23111,83 +23467,180 @@ async function probePython() {
23111
23467
  ok: true,
23112
23468
  pythonPath: resolved,
23113
23469
  version,
23114
- uvPath
23470
+ uvPath: (uv == null ? void 0 : uv.ok) ? uv.path : void 0
23115
23471
  };
23116
23472
  g$4.__amlPyProbe = result2;
23117
- log$l.info(`[aml-python] \u63A2\u6D4B\u6210\u529F:${version} @ ${resolved}${uvPath ? ` (uv: ${uvPath})` : ""}`);
23473
+ log$l.info(`[aml-python] \u63A2\u6D4B\u6210\u529F:${version} @ ${resolved}${(uv == null ? void 0 : uv.ok) ? ` (uv: ${uv.path})` : " (\u65E0 uv,\u5C06\u7528 python -m venv \u515C\u5E95)"}`);
23118
23474
  return result2;
23119
23475
  }
23120
23476
  }
23121
23477
  const result = {
23122
23478
  ok: false,
23123
- uvPath,
23479
+ uvPath: (uv == null ? void 0 : uv.ok) ? uv.path : void 0,
23124
23480
  reason: "\u672A\u627E\u5230\u53EF\u7528\u7684 Python 3 \u89E3\u91CA\u5668:\u5B89\u88C5 Python 3.10+ \u6216 uv,\u6216\u8BBE\u7F6E aml.python.pythonBin \u6307\u5411\u89E3\u91CA\u5668\u7EDD\u5BF9\u8DEF\u5F84"
23125
23481
  };
23126
23482
  g$4.__amlPyProbe = result;
23127
23483
  return result;
23128
23484
  }
23485
+ function safeRuntime() {
23486
+ var _a;
23487
+ try {
23488
+ return (_a = g$4.__amlRuntime) != null ? _a : null;
23489
+ } catch {
23490
+ return null;
23491
+ }
23492
+ }
23493
+ async function installUv(rt, onLog) {
23494
+ var _a;
23495
+ const lines = [];
23496
+ const emit = (s) => {
23497
+ const t = s.trimEnd();
23498
+ if (t) {
23499
+ lines.push(t);
23500
+ onLog == null ? void 0 : onLog(t);
23501
+ }
23502
+ };
23503
+ const existing = await probeUvBinary((_a = findUvInDir(rt.toolsDir)) != null ? _a : "", "project");
23504
+ if ((existing == null ? void 0 : existing.ok) && existing.path) {
23505
+ emit(`\u5DF2\u5B58\u5728\u53EF\u7528 uv:${existing.version} @ ${existing.path}`);
23506
+ return { ok: true, uvPath: existing.path, version: existing.version, method: "existing", log: lines.join("\n") };
23507
+ }
23508
+ mkdirSync(rt.toolsDir, { recursive: true });
23509
+ const errors = [];
23510
+ emit(`[1/2] \u4F7F\u7528\u5B98\u65B9\u5B89\u88C5\u811A\u672C\u5B89\u88C5 uv \u5230 ${rt.toolsDir} \u2026`);
23511
+ const script = await runOfficialInstaller(rt, emit);
23512
+ if (script.ok) {
23513
+ const hit = findUvInDir(rt.toolsDir);
23514
+ if (hit) {
23515
+ const v = await runCapture(hit, ["--version"], 15e3);
23516
+ const version = (v.out || v.err).trim().split("\n")[0];
23517
+ writeUvRecord(rt, { uvPath: hit, version, installedAt: (/* @__PURE__ */ new Date()).toISOString(), installDir: rt.toolsDir, method: "official-script" });
23518
+ resetProbeCache();
23519
+ emit(`\u5B89\u88C5\u6210\u529F:${version} @ ${hit}`);
23520
+ return { ok: true, uvPath: hit, version, method: "official-script", log: lines.join("\n") };
23521
+ }
23522
+ errors.push("\u5B98\u65B9\u811A\u672C\u6267\u884C\u5B8C\u6210\u4F46\u672A\u5728 tools \u76EE\u5F55\u627E\u5230 uv \u53EF\u6267\u884C\u6587\u4EF6");
23523
+ } else {
23524
+ errors.push(script.err);
23525
+ }
23526
+ emit("[2/2] \u56DE\u9000\u65B9\u6848:python -m pip install --target tools uv");
23527
+ const probe = await probePython();
23528
+ if (probe.ok && probe.pythonPath) {
23529
+ const pipArgs = ["-m", "pip", "install", "--upgrade", "--target", rt.toolsDir, "uv"];
23530
+ const idx = amlSettings().python.indexUrl;
23531
+ if (idx) pipArgs.push("--index-url", idx);
23532
+ const r = await runCapture(probe.pythonPath, pipArgs, UV_INSTALL_TIMEOUT_MS, emit);
23533
+ if (r.code === 0) {
23534
+ const hit = findUvInDir(rt.toolsDir);
23535
+ if (hit) {
23536
+ try {
23537
+ chmodSync(hit, 493);
23538
+ } catch {
23539
+ }
23540
+ const v = await runCapture(hit, ["--version"], 15e3);
23541
+ const version = (v.out || v.err).trim().split("\n")[0];
23542
+ writeUvRecord(rt, { uvPath: hit, version, installedAt: (/* @__PURE__ */ new Date()).toISOString(), installDir: rt.toolsDir, method: "pip-target" });
23543
+ resetProbeCache();
23544
+ emit(`\u5B89\u88C5\u6210\u529F:${version} @ ${hit}`);
23545
+ return { ok: true, uvPath: hit, version, method: "pip-target", log: lines.join("\n") };
23546
+ }
23547
+ errors.push("pip \u5B89\u88C5\u6210\u529F\u4F46\u672A\u627E\u5230 uv \u53EF\u6267\u884C\u6587\u4EF6");
23548
+ } else {
23549
+ errors.push(`pip \u5B89\u88C5\u5931\u8D25:${(r.err || r.out).slice(-400)}`);
23550
+ }
23551
+ } else {
23552
+ errors.push(`\u65E0\u53EF\u7528 Python \u89E3\u91CA\u5668:${probe.reason}`);
23553
+ }
23554
+ emit("\u5B89\u88C5\u5931\u8D25\u3002");
23555
+ return { ok: false, method: "none", log: `${lines.join("\n")}
23556
+
23557
+ --- \u5931\u8D25\u539F\u56E0 ---
23558
+ ${errors.join("\n")}` };
23559
+ }
23560
+ const PS_QUOTE_ESC = "''";
23561
+ async function runOfficialInstaller(rt, emit) {
23562
+ if (process.platform === "win32") {
23563
+ const ps = [
23564
+ `$env:UV_INSTALL_DIR='${rt.toolsDir.replace(/'/g, PS_QUOTE_ESC)}'`,
23565
+ `$env:UV_NO_MODIFY_PATH='1'`,
23566
+ "irm https://astral.sh/uv/install.ps1 | iex"
23567
+ ].join("; ");
23568
+ const r2 = await runCapture("powershell", ["-ExecutionPolicy", "Bypass", "-NoProfile", "-NonInteractive", "-Command", ps], UV_INSTALL_TIMEOUT_MS, emit);
23569
+ return { ok: r2.code === 0, err: `\u5B98\u65B9\u811A\u672C\u5931\u8D25(exit=${r2.code}):${(r2.err || r2.out).slice(-400)}` };
23570
+ }
23571
+ const sh = `curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR='${rt.toolsDir.replace(/'/g, `'\\''`)}' UV_NO_MODIFY_PATH=1 sh`;
23572
+ const r = await runCapture("sh", ["-c", sh], UV_INSTALL_TIMEOUT_MS, emit);
23573
+ return { ok: r.code === 0, err: `\u5B98\u65B9\u811A\u672C\u5931\u8D25(exit=${r.code}):${(r.err || r.out).slice(-400)}` };
23574
+ }
23129
23575
  function requirementsHash() {
23130
23576
  const reqPath = join(platformPythonDir(), "requirements.txt");
23131
23577
  const content = existsSync(reqPath) ? readFileSync(reqPath, "utf8") : "";
23132
23578
  const idx = amlSettings().python.indexUrl;
23133
23579
  return createHash("sha256").update(content).update(idx).digest("hex").slice(0, 12);
23134
23580
  }
23135
- function platformPythonDir() {
23136
- var _a, _b;
23137
- const fallback = join(process.cwd(), "server", "services", "workshop", "aml", "python");
23138
- const candidates = [
23139
- (_a = process.env.AML_PYHOME) != null ? _a : "",
23140
- fallback,
23141
- join((_b = process.env.AW_PACKAGE_ROOT) != null ? _b : process.cwd(), "server", "services", "workshop", "aml", "python")
23142
- ];
23143
- for (const c of candidates) {
23144
- if (c && existsSync(join(c, "amlkit.py"))) return c;
23145
- }
23146
- return fallback;
23581
+ function venvMarkerPath(rt) {
23582
+ return join(venvDir(rt), `.aml-ok-${requirementsHash()}`);
23147
23583
  }
23148
- function venvDir(rt) {
23149
- return join(rt.root, "runtime", "venv");
23584
+ function isVenvReady(rt) {
23585
+ return existsSync(venvMarkerPath(rt)) && existsSync(venvPythonPath(rt));
23150
23586
  }
23151
- function venvPythonPath(rt) {
23152
- return process.platform === "win32" ? join(venvDir(rt), "Scripts", "python.exe") : join(venvDir(rt), "bin", "python");
23153
- }
23154
- async function ensureVenv(rt) {
23155
- if (g$4.__amlVenvPromise) return g$4.__amlVenvPromise;
23156
- g$4.__amlVenvPromise = (async () => {
23587
+ async function ensureVenv(rt, opts = {}) {
23588
+ if (opts.force) {
23589
+ try {
23590
+ rmSync(venvDir(rt), { recursive: true, force: true });
23591
+ emitLog(opts.onLog, `\u5DF2\u6E05\u7406\u65E7\u73AF\u5883:${venvDir(rt)}`);
23592
+ } catch (err) {
23593
+ throw new AppError(500, "AML_VENV_FAILED", `\u6E05\u7406\u65E7\u73AF\u5883\u5931\u8D25(\u53EF\u80FD\u4ECD\u88AB\u8FDB\u7A0B\u5360\u7528):${err.message}`);
23594
+ }
23595
+ g$4.__amlVenvPromise = void 0;
23596
+ }
23597
+ if (g$4.__amlVenvPromise && !opts.force) return g$4.__amlVenvPromise;
23598
+ const task = (async () => {
23599
+ const vdir = venvDir(rt);
23600
+ const vpy = venvPythonPath(rt);
23601
+ if (isVenvReady(rt)) {
23602
+ emitLog(opts.onLog, `\u73AF\u5883\u5DF2\u5C31\u7EEA(\u6807\u8BB0 ${requirementsHash()}):${vdir}`);
23603
+ return vpy;
23604
+ }
23157
23605
  const probe = await probePython();
23158
23606
  if (!probe.ok || !probe.pythonPath) {
23159
23607
  throw new AppError(503, "AML_PYTHON_MISSING", `\u8BAD\u7EC3\u8FD0\u884C\u65F6\u4E0D\u53EF\u7528:${probe.reason}`);
23160
23608
  }
23161
- const vdir = venvDir(rt);
23162
- const vpy = venvPythonPath(rt);
23163
- const marker = join(vdir, `.aml-ok-${requirementsHash()}`);
23164
- if (existsSync(marker) && existsSync(vpy)) return vpy;
23165
23609
  const s = amlSettings();
23166
23610
  const idxArgs = s.python.indexUrl ? ["--index-url", s.python.indexUrl] : [];
23167
23611
  const reqPath = join(platformPythonDir(), "requirements.txt");
23168
- log$l.info("[aml-python] \u5F00\u59CB venv \u4F9B\u7ED9(\u9996\u6B21\u53EF\u80FD\u9700\u6570\u5206\u949F\u4E0B\u8F7D\u4F9D\u8D56)\u2026");
23612
+ mkdirSync(rt.root, { recursive: true });
23613
+ emitLog(opts.onLog, `\u5F00\u59CB\u4F9B\u7ED9 Python \u73AF\u5883(\u9996\u6B21\u53EF\u80FD\u9700\u6570\u5206\u949F\u4E0B\u8F7D\u4F9D\u8D56)\u2026`);
23169
23614
  if (probe.uvPath) {
23170
- const mk = await runCapture(probe.uvPath, ["venv", vdir, "--python", probe.pythonPath], 12e4);
23615
+ emitLog(opts.onLog, `uv venv ${vdir} --python ${probe.pythonPath}`);
23616
+ const mk = await runCapture(probe.uvPath, ["venv", vdir, "--python", probe.pythonPath], VENV_CREATE_TIMEOUT_MS, opts.onLog);
23171
23617
  if (mk.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `uv venv \u5931\u8D25:${mk.err.slice(-400)}`);
23172
- const inst = await runCapture(probe.uvPath, ["pip", "install", "--python", vpy, "-r", reqPath, ...idxArgs], 20 * 6e4);
23618
+ emitLog(opts.onLog, `uv pip install -r requirements.txt`);
23619
+ const inst = await runCapture(probe.uvPath, ["pip", "install", "--python", vpy, "-r", reqPath, ...idxArgs], PIP_INSTALL_TIMEOUT_MS, opts.onLog);
23173
23620
  if (inst.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25:${(inst.err || inst.out).slice(-400)}`);
23174
23621
  } else {
23175
- const mk = await runCapture(probe.pythonPath, ["-m", "venv", vdir], 12e4);
23622
+ emitLog(opts.onLog, `\u672A\u68C0\u6D4B\u5230 uv,\u56DE\u9000 python -m venv(\u8F83\u6162)`);
23623
+ const mk = await runCapture(probe.pythonPath, ["-m", "venv", vdir], VENV_CREATE_TIMEOUT_MS, opts.onLog);
23176
23624
  if (mk.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `python -m venv \u5931\u8D25:${mk.err.slice(-400)}`);
23177
- const inst = await runCapture(vpy, ["-m", "pip", "install", "-r", reqPath, ...idxArgs], 20 * 6e4);
23625
+ const inst = await runCapture(vpy, ["-m", "pip", "install", "-r", reqPath, ...idxArgs], PIP_INSTALL_TIMEOUT_MS, opts.onLog);
23178
23626
  if (inst.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `pip install \u5931\u8D25:${(inst.err || inst.out).slice(-400)}`);
23179
23627
  }
23180
- writeFileSync(marker, (/* @__PURE__ */ new Date()).toISOString());
23628
+ writeFileSync(venvMarkerPath(rt), (/* @__PURE__ */ new Date()).toISOString());
23629
+ emitLog(opts.onLog, "\u73AF\u5883\u4F9B\u7ED9\u5B8C\u6210\u3002");
23181
23630
  log$l.info("[aml-python] venv \u4F9B\u7ED9\u5B8C\u6210");
23182
23631
  return vpy;
23183
23632
  })();
23633
+ g$4.__amlVenvPromise = task;
23184
23634
  try {
23185
- return await g$4.__amlVenvPromise;
23635
+ return await task;
23186
23636
  } catch (err) {
23187
23637
  g$4.__amlVenvPromise = void 0;
23188
23638
  throw err;
23189
23639
  }
23190
23640
  }
23641
+ function emitLog(onLog, line) {
23642
+ onLog == null ? void 0 : onLog(line);
23643
+ }
23191
23644
  function jobEnv(rt, jobDir) {
23192
23645
  const platformPyDir = platformPythonDir();
23193
23646
  const pick = (k) => process.env[k] ? `${k}=${process.env[k]}` : "";
@@ -23199,6 +23652,8 @@ function jobEnv(rt, jobDir) {
23199
23652
  return {
23200
23653
  ...sysEnv,
23201
23654
  AML_JOB_DIR: jobDir,
23655
+ // 资产根暴露给训练脚本:模型/数据集实体都在 ./aml 下,脚本按相对路径读取
23656
+ AML_ROOT: rt.root,
23202
23657
  PYTHONPATH: platformPyDir,
23203
23658
  PYTHONUNBUFFERED: "1",
23204
23659
  PYTHONDONTWRITEBYTECODE: "1",
@@ -23320,6 +23775,10 @@ function registerModelFromJob(jobId, gates, metricsJson) {
23320
23775
  writeFileSync(join(modelDir, "REGISTERED"), now);
23321
23776
  }
23322
23777
  const ioSpec = buildIoSpec(dataset.path, job.purpose);
23778
+ try {
23779
+ writeFileSync(join(modelDir, "io_spec.json"), JSON.stringify(ioSpec, null, 2));
23780
+ } catch {
23781
+ }
23323
23782
  rt.repo.model.insert({
23324
23783
  id: modelId,
23325
23784
  experimentId: expId,
@@ -23942,21 +24401,12 @@ async function runtimeStatus() {
23942
24401
  const st = state$1();
23943
24402
  return {
23944
24403
  python: { ok: probe.ok, version: probe.version, reason: probe.reason },
23945
- venvReady: probe.ok ? existsSync(join(venvDirOf(rt), `.aml-ok-${requirementsHashOf()}`)) : false,
24404
+ venvReady: probe.ok ? isVenvReady(rt) : false,
24405
+ amlRoot: rt.root,
23946
24406
  queued: st.queue.length + rt.repo.job.list({ status: "queued" }).length,
23947
24407
  running: st.running.size
23948
24408
  };
23949
24409
  }
23950
- function venvDirOf(rt) {
23951
- return join(rt.root, "runtime", "venv");
23952
- }
23953
- function requirementsHashOf() {
23954
- try {
23955
- return requirementsHash();
23956
- } catch {
23957
- return "";
23958
- }
23959
- }
23960
24410
 
23961
24411
  const log$j = createLogger("aml.predict");
23962
24412
  const g$2 = globalThis;
@@ -26533,6 +26983,14 @@ class BaseAgentImpl {
26533
26983
  throw new Error(`${this.harnessId} \u65E0 HITL \u5E94\u7B54\u9762(${kind})`);
26534
26984
  }
26535
26985
  // ===== run:消息分流(平台语义,全引擎一致) =====
26986
+ /**
26987
+ * 装配期注入工作区(AgentRuntime 构造时调用):使 host 工具在首个 run() 之前
26988
+ * 即可直调 —— 否则 REST agent-tools/invoke 在实例未处理过任何消息时会得到
26989
+ * 「workspace 未就绪」(实测生产闭环 Stage D 的 kb_store 偶发因此失败)。
26990
+ */
26991
+ attachWorkspace(ws) {
26992
+ if (ws && !this.workspace) this.workspace = ws;
26993
+ }
26536
26994
  async *run(request, ctx) {
26537
26995
  var _a, _b;
26538
26996
  if (!this.workspace) this.workspace = ctx.workspace;
@@ -28861,12 +29319,11 @@ class OpenCodeAgentImpl extends BaseAgentImpl {
28861
29319
  });
28862
29320
  __publicField$c(this, "config");
28863
29321
  __publicField$c(this, "agentInfo", null);
28864
- __publicField$c(this, "bridgeCtx", {
28865
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
28866
- state: this.toolState,
28867
- getWorkspace: () => this.workspace
28868
- });
28869
- __publicField$c(this, "agentRole", "worker");
29322
+ // 注意:不要在本类重新声明 bridgeCtx / agentRole —— 它们由 BaseAgentImpl 持有。
29323
+ // 子类字段初始化器在 super() **之后**执行,会用一个空的 identity 覆盖基类已装配好的
29324
+ // bridgeCtx(class field 遮蔽),导致 host tool 桥拿到的 agentId 恒为 '' ——
29325
+ // 所有按 agentId 的鉴权(节点绑定/工业工具)都会误判为"未绑定"。
29326
+ // 同理 agentRole 被重置为 'worker',lead 身份传不到桥里。
28870
29327
  // 服务进程与 API 面
28871
29328
  __publicField$c(this, "child", null);
28872
29329
  __publicField$c(this, "baseUrl", "");
@@ -29873,6 +30330,7 @@ var __defProp$a = Object.defineProperty;
29873
30330
  var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
29874
30331
  var __publicField$a = (obj, key, value) => __defNormalProp$a(obj, typeof key !== "symbol" ? key + "" : key, value);
29875
30332
  const log$d = createLogger("workshop.codex");
30333
+ const CODEX_TURN_STALL_MS = 18e5;
29876
30334
  class CodexAgentImpl extends BaseAgentImpl {
29877
30335
  constructor(config = {}) {
29878
30336
  super({
@@ -29883,12 +30341,10 @@ class CodexAgentImpl extends BaseAgentImpl {
29883
30341
  });
29884
30342
  __publicField$a(this, "config");
29885
30343
  __publicField$a(this, "agentInfo", null);
29886
- __publicField$a(this, "bridgeCtx", {
29887
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
29888
- state: this.toolState,
29889
- getWorkspace: () => this.workspace
29890
- });
29891
- __publicField$a(this, "agentRole", "worker");
30344
+ // 不要重新声明 bridgeCtx / agentRole(由 BaseAgentImpl 持有)。
30345
+ // 子类字段初始化器在 super() 之后执行,会用空 identity 遮蔽基类已装配好的 bridgeCtx,
30346
+ // 使 host tool 桥的 agentId 恒为 '' → 按 agentId 的鉴权全部误判(节点绑定/工业工具)。
30347
+ // 同理 agentRole 会被重置为 'worker',lead 身份丢失。
29892
30348
  __publicField$a(this, "client", null);
29893
30349
  __publicField$a(this, "clientStarting", null);
29894
30350
  __publicField$a(this, "threadId", null);
@@ -30022,7 +30478,7 @@ class CodexAgentImpl extends BaseAgentImpl {
30022
30478
  ctxPrefix: await this.contextPrefix(),
30023
30479
  manual: systemManual()
30024
30480
  });
30025
- yield* this.streamTurn(prompt, taskId, (_c = this.config.promptTimeoutMs) != null ? _c : 6e5, ctx.signal);
30481
+ yield* this.streamTurn(prompt, taskId, (_c = this.config.promptTimeoutMs) != null ? _c : CODEX_TURN_STALL_MS, ctx.signal);
30026
30482
  } finally {
30027
30483
  this.toolState.currentTaskId = null;
30028
30484
  }
@@ -30057,7 +30513,7 @@ class CodexAgentImpl extends BaseAgentImpl {
30057
30513
  fromChannel: typeof ((_g = msg.metadata) == null ? void 0 : _g["x-aw-from-channel"]) === "string" ? String(msg.metadata["x-aw-from-channel"]) : "",
30058
30514
  msgText
30059
30515
  });
30060
- yield* this.streamTurn(prompt, void 0, (_h = this.config.promptTimeoutMs) != null ? _h : 6e5, ctx.signal);
30516
+ yield* this.streamTurn(prompt, void 0, (_h = this.config.promptTimeoutMs) != null ? _h : CODEX_TURN_STALL_MS, ctx.signal);
30061
30517
  }
30062
30518
  // ===== 回合执行 =====
30063
30519
  /**
@@ -30417,11 +30873,16 @@ class CodexAgentImpl extends BaseAgentImpl {
30417
30873
  * per-agent CODEX_HOME config.toml:注册 MCP 桥(required=true,桥挂了宁可失败)。
30418
30874
  * 已有 config.toml(从全局目录种子化复制)→ 追加本段(保留用户的 provider/model
30419
30875
  * 配置,自定义网关/密钥不丢失);全新目录 → 独立写入。
30876
+ *
30877
+ * 无条件种子化(不再仅当 effort 配置时才挂桥):MCP 桥是 codex worker 的 host
30878
+ * 工具面(complete_task/ops_log/…)唯一入口;不挂桥的实例模型只能拿自带 shell
30879
+ * 乱翻工作区,永远调不到 complete_task → 任务停滞被看门狗回收
30880
+ * (实测 codex 任务终态 CANCELED、交付物却只落在频道消息里的根因)。
30420
30881
  */
30421
30882
  writeCodexHomeConfig() {
30422
30883
  var _a, _b, _c;
30423
30884
  let home = this.config.codexHome;
30424
- if (!home && this.config.effort) {
30885
+ if (!home) {
30425
30886
  home = join(tmpdir(), `aw-codex-${this.selfAgentId.slice(0, 8)}`);
30426
30887
  this.config.codexHome = home;
30427
30888
  for (const f of ["auth.json", "config.toml", "cc-switch-model-catalog.json"]) {
@@ -30432,7 +30893,6 @@ class CodexAgentImpl extends BaseAgentImpl {
30432
30893
  }
30433
30894
  }
30434
30895
  }
30435
- if (!home) return;
30436
30896
  try {
30437
30897
  mkdirSync(home, { recursive: true });
30438
30898
  const configFile = join(home, "config.toml");
@@ -30492,12 +30952,10 @@ class DshAgentImpl extends BaseAgentImpl {
30492
30952
  });
30493
30953
  __publicField$9(this, "config");
30494
30954
  __publicField$9(this, "agentInfo", null);
30495
- __publicField$9(this, "bridgeCtx", {
30496
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
30497
- state: this.toolState,
30498
- getWorkspace: () => this.workspace
30499
- });
30500
- __publicField$9(this, "agentRole", "worker");
30955
+ // 不要重新声明 bridgeCtx / agentRole(由 BaseAgentImpl 持有)。
30956
+ // 子类字段初始化器在 super() 之后执行,会用空 identity 遮蔽基类已装配好的 bridgeCtx,
30957
+ // 使 host tool 桥的 agentId 恒为 '' → 按 agentId 的鉴权全部误判(节点绑定/工业工具)。
30958
+ // 同理 agentRole 会被重置为 'worker',lead 身份丢失。
30501
30959
  __publicField$9(this, "client", null);
30502
30960
  __publicField$9(this, "clientStarting", null);
30503
30961
  __publicField$9(this, "sessionId", null);
@@ -33016,6 +33474,8 @@ class AgentRuntime {
33016
33474
  this.role = agent.role;
33017
33475
  this.channelId = agent.channelId;
33018
33476
  this.name = agent.name;
33477
+ const attach = this.impl.attachWorkspace;
33478
+ if (typeof attach === "function") attach.call(this.impl, deps.workspace);
33019
33479
  }
33020
33480
  /** 投递消息;idle 时立即唤醒消费 */
33021
33481
  enqueue(message) {
@@ -33334,6 +33794,10 @@ class AgentRuntime {
33334
33794
  this.deps.bus.emit(event, enrichedSource);
33335
33795
  if (event.kind === "delta") continue;
33336
33796
  if (event.kind === "error") sawRunError = true;
33797
+ if (event.kind === "error" && taskId && replyText.trim().length >= 40) {
33798
+ const cur = this.deps.taskEngine.get(taskId);
33799
+ if (cur && cur.state === "WORKING") continue;
33800
+ }
33337
33801
  if (taskId) await this.deps.taskEngine.applyEvent(taskId, event);
33338
33802
  if (event.kind === "message") cap(partsToText(event.message.parts));
33339
33803
  else if (event.kind === "status" && event.status.message) cap(partsToText(event.status.message.parts));
@@ -33363,7 +33827,20 @@ class AgentRuntime {
33363
33827
  const after = this.deps.taskEngine.get(taskId);
33364
33828
  if (after && after.assigneeId === this.agentId && after.state === "WORKING") {
33365
33829
  const deliverable = after.artifacts.find((a) => a.name !== "input" && a.parts.some((p) => ("text" in p ? p.text.trim().length : 1) > 0));
33366
- if (deliverable) {
33830
+ const fallbackText = deliverable ? "" : replyText.trim();
33831
+ if (deliverable || fallbackText) {
33832
+ if (!deliverable) {
33833
+ await this.deps.taskEngine.applyEvent(taskId, {
33834
+ kind: "artifact",
33835
+ artifact: {
33836
+ artifactId: randomUUID$1(),
33837
+ name: "deliverable",
33838
+ parts: [{ text: fallbackText.slice(0, 2e4) }]
33839
+ },
33840
+ lastChunk: true,
33841
+ totalChunks: 1
33842
+ });
33843
+ }
33367
33844
  const completed = await this.deps.taskEngine.complete(taskId);
33368
33845
  this.emitExternal({
33369
33846
  kind: "status",
@@ -33373,7 +33850,7 @@ class AgentRuntime {
33373
33850
  messageId: randomUUID$1(),
33374
33851
  contextId: this.channelId,
33375
33852
  role: "ROLE_AGENT",
33376
- parts: [{ text: `\u4EFB\u52A1 ${taskId} \u56DE\u5408\u5DF2\u4EA7\u51FA\u4EA4\u4ED8\u7269\u4F46\u672A\u8C03\u7528\u5B8C\u6210\u5DE5\u5177,\u5E73\u53F0\u9690\u5F0F\u6536\u53E3\u4E3A COMPLETED` }]
33853
+ parts: [{ text: `\u4EFB\u52A1 ${taskId} \u56DE\u5408\u5DF2\u4EA7\u51FA\u4EA4\u4ED8\u7269\u4F46\u672A\u8C03\u7528\u5B8C\u6210\u5DE5\u5177,\u5E73\u53F0\u9690\u5F0F\u6536\u53E3\u4E3A COMPLETED${deliverable ? "" : "(\u4EA4\u4ED8\u7269\u53D6\u81EA\u56DE\u5408\u6700\u7EC8\u8F93\u51FA)"}` }]
33377
33854
  },
33378
33855
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
33379
33856
  }
@@ -33936,7 +34413,7 @@ class SchedulerLoop {
33936
34413
  }
33937
34414
  /** 内置规则引擎兜底(harness 无关) */
33938
34415
  ruleEngine(snapshot) {
33939
- var _a, _b;
34416
+ var _a, _b, _c;
33940
34417
  const decisions = [];
33941
34418
  const { tasks, members, now } = snapshot;
33942
34419
  this.refreshIdle(members, now);
@@ -34029,7 +34506,11 @@ class SchedulerLoop {
34029
34506
  } else {
34030
34507
  this.notified.delete(task.id);
34031
34508
  this.lastProgress.delete(task.id);
34032
- decisions.push({ kind: "cancel", taskId: task.id });
34509
+ const didWork = task.progress > 0 || ((_c = task.artifacts) != null ? _c : []).some((a) => {
34510
+ var _a2;
34511
+ return a.name !== "input" && ((_a2 = a.parts) != null ? _a2 : []).length > 0;
34512
+ });
34513
+ decisions.push(didWork ? { kind: "complete", taskId: task.id } : { kind: "cancel", taskId: task.id });
34033
34514
  }
34034
34515
  }
34035
34516
  for (const task of tasks) {
@@ -35366,6 +35847,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
35366
35847
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
35367
35848
  const log$1 = createLogger("workshop.manager");
35368
35849
  function instanceToAgentInfo(m) {
35850
+ var _a;
35369
35851
  return {
35370
35852
  id: m.id,
35371
35853
  channelId: m.channelId,
@@ -35374,7 +35856,11 @@ function instanceToAgentInfo(m) {
35374
35856
  role: m.role,
35375
35857
  config: parseJson(m.configJson, {}),
35376
35858
  token: m.token,
35377
- enabled: m.enabled
35859
+ enabled: m.enabled,
35860
+ /** 来源 Agent 模板 id(手工成员为 null)。
35861
+ * 外部调用方需要它把「模板 → 已部署实例」对上 —— Agent↔节点绑定必须落到实例 id,
35862
+ * 而绑定接口只回一个实例 id;不暴露这个字段时调用方只能靠名字猜(实测踩过)。 */
35863
+ templateId: (_a = m.templateId) != null ? _a : null
35378
35864
  };
35379
35865
  }
35380
35866
  function rowToTask(row) {
@@ -35785,6 +36271,10 @@ class AgentChannelManager {
35785
36271
  const lead = this.ensureAgentRuntime(channelId, channel.leadAgentId);
35786
36272
  if (!lead) return;
35787
36273
  const loop = new SchedulerLoop(cr, lead, {
36274
+ // 停滞窗口默认取 workshop.stall_ms(默认 5 分钟,可经设置调整):
36275
+ // 它决定"多久算停滞"以及"多久之后收口",是运维最需要按现场调的一个值;
36276
+ // 以前写死在 SchedulerLoop 构造默认值里,mock/规则引擎路径上最长要 10 分钟才可见。
36277
+ ...Number.isFinite(workshopSettings().stall_ms) ? { stallMs: workshopSettings().stall_ms } : {},
35788
36278
  ...options,
35789
36279
  // 停滞看门狗活性源:agent 最近一次工具 invoke 时刻(工具调用即健康推进)
35790
36280
  toolActivityOf: (agentId) => {
@@ -37301,6 +37791,26 @@ class AgentChannelManager {
37301
37791
  }
37302
37792
  return message;
37303
37793
  }
37794
+ /**
37795
+ * 按主键查 Channel 成员实例(跨频道)。
37796
+ * 用途:校验「Agent ↔ 工业节点绑定」的主体 —— 运行时持绑定做鉴权的是**成员实例**,
37797
+ * 不是 Agent 模板;绑到模板 id 上会得到一条永远不生效的静默绑定(实测踩过)。
37798
+ */
37799
+ findChannelAgentById(channelAgentId) {
37800
+ const row = this.deps.repos.channelAgents.findById(channelAgentId);
37801
+ return row ? { id: row.id, channelId: row.channelId, templateId: row.templateId } : void 0;
37802
+ }
37803
+ /** 某 Agent 模板已部署到哪些频道(用于把"绑错主体"的报错变成可执行提示) */
37804
+ listChannelAgentInstances(templateId) {
37805
+ return this.deps.repos.channelAgents.listByTemplate(templateId).map((r) => {
37806
+ var _a, _b;
37807
+ return {
37808
+ id: r.id,
37809
+ channelId: r.channelId,
37810
+ name: (_b = (_a = this.deps.repos.channels.findById(r.channelId)) == null ? void 0 : _a.name) != null ? _b : r.channelId
37811
+ };
37812
+ });
37813
+ }
37304
37814
  /**
37305
37815
  * 实时消息(外部/系统注入):priority=immediate → busy 时 steer 注入运行中的 omp 会话。
37306
37816
  * 触发器 requireReply=true → 接收方须回执(执行结果+所需内容,in_reply_to 关联)。
@@ -37822,7 +38332,7 @@ function workshopPlugin(nitroApp) {
37822
38332
  approvalRequests: createApprovalRequestRepo(db)
37823
38333
  });
37824
38334
  const deps = { repos, implFactory: createAgentImpl, db };
37825
- configureAmlRuntime(db, dataDir);
38335
+ configureAmlRuntime(db);
37826
38336
  recoverInterruptedJobs();
37827
38337
  startAmlRetentionTimer();
37828
38338
  const manager = createAgentChannelManager(deps);
@@ -37874,1314 +38384,1307 @@ workshopPlugin
37874
38384
  ];
37875
38385
 
37876
38386
  const assets = {
37877
- "/favicon.svg": {
37878
- "type": "image/svg+xml",
37879
- "etag": "\"333-aFlSVm0gS1OwJAKmnnSly7X0FJ0\"",
37880
- "mtime": "2026-08-30T11:59:05.964Z",
37881
- "size": 819,
37882
- "path": "../public/favicon.svg"
37883
- },
37884
- "/_nuxt/-6OnbLFb.js": {
37885
- "type": "text/javascript; charset=utf-8",
37886
- "etag": "\"1343-vdAf4w0aJYo+a7mW3u5aS6nVAXY\"",
37887
- "mtime": "2026-09-11T08:35:24.374Z",
37888
- "size": 4931,
37889
- "path": "../public/_nuxt/-6OnbLFb.js"
37890
- },
37891
38387
  "/_nuxt/36oeS8_R2.js": {
37892
38388
  "type": "text/javascript; charset=utf-8",
37893
38389
  "etag": "\"d6-9W7EHt23WjRGOYCN8bz9Yy0aMhg\"",
37894
- "mtime": "2026-09-11T08:35:24.375Z",
38390
+ "mtime": "2026-09-12T03:59:43.216Z",
37895
38391
  "size": 214,
37896
38392
  "path": "../public/_nuxt/36oeS8_R2.js"
37897
38393
  },
37898
- "/_nuxt/-nb2uqVg.js": {
37899
- "type": "text/javascript; charset=utf-8",
37900
- "etag": "\"1d2b-jLwuC0KKuwuubw09IH7Tm1lfqoE\"",
37901
- "mtime": "2026-09-11T08:35:24.375Z",
37902
- "size": 7467,
37903
- "path": "../public/_nuxt/-nb2uqVg.js"
38394
+ "/favicon.svg": {
38395
+ "type": "image/svg+xml",
38396
+ "etag": "\"333-aFlSVm0gS1OwJAKmnnSly7X0FJ0\"",
38397
+ "mtime": "2026-08-30T11:59:05.964Z",
38398
+ "size": 819,
38399
+ "path": "../public/favicon.svg"
37904
38400
  },
37905
- "/_nuxt/6PZPfFcO.js": {
38401
+ "/_nuxt/45zuyAso.js": {
37906
38402
  "type": "text/javascript; charset=utf-8",
37907
- "etag": "\"469c-Fu/GyOZbOvzzzrId7NUg9WJshE8\"",
37908
- "mtime": "2026-09-11T08:35:24.375Z",
37909
- "size": 18076,
37910
- "path": "../public/_nuxt/6PZPfFcO.js"
38403
+ "etag": "\"e475-il2QNg4Ih8pW97JlDDn074j4h40\"",
38404
+ "mtime": "2026-09-12T03:59:43.216Z",
38405
+ "size": 58485,
38406
+ "path": "../public/_nuxt/45zuyAso.js"
37911
38407
  },
37912
- "/_nuxt/4bHdIqEg.js": {
38408
+ "/_nuxt/4sIEbgcl.js": {
37913
38409
  "type": "text/javascript; charset=utf-8",
37914
- "etag": "\"26b8e-SPbSRGs9UJ2OPJmLu810GYYm8+s\"",
37915
- "mtime": "2026-09-11T08:35:24.375Z",
37916
- "size": 158606,
37917
- "path": "../public/_nuxt/4bHdIqEg.js"
38410
+ "etag": "\"12211-x+AgGtu1FHNowDE8TFro0dX68yU\"",
38411
+ "mtime": "2026-09-12T03:59:43.216Z",
38412
+ "size": 74257,
38413
+ "path": "../public/_nuxt/4sIEbgcl.js"
37918
38414
  },
37919
- "/_nuxt/arUY5dyq2.js": {
38415
+ "/_nuxt/ahgEJu2R.js": {
37920
38416
  "type": "text/javascript; charset=utf-8",
37921
- "etag": "\"59f6-d7NzfWgWT2fTR2MXV0/3pKn7pms\"",
37922
- "mtime": "2026-09-11T08:35:24.392Z",
37923
- "size": 23030,
37924
- "path": "../public/_nuxt/arUY5dyq2.js"
37925
- },
37926
- "/_nuxt/aml.WU_bh87J.css": {
37927
- "type": "text/css; charset=utf-8",
37928
- "etag": "\"2ba6-KFAbaZ9MCLBfgaOBN48bAVLUIkI\"",
37929
- "mtime": "2026-09-11T08:35:24.396Z",
37930
- "size": 11174,
37931
- "path": "../public/_nuxt/aml.WU_bh87J.css"
38417
+ "etag": "\"680-U+6Xyxt5ZpTg6vsMybB7bBYMY/M\"",
38418
+ "mtime": "2026-09-12T03:59:43.238Z",
38419
+ "size": 1664,
38420
+ "path": "../public/_nuxt/ahgEJu2R.js"
37932
38421
  },
37933
38422
  "/_nuxt/agents.BV70ioCv.css": {
37934
38423
  "type": "text/css; charset=utf-8",
37935
38424
  "etag": "\"864-vWJ7ST00xR5cH47IGfSMfZZYzFk\"",
37936
- "mtime": "2026-09-11T08:35:24.396Z",
38425
+ "mtime": "2026-09-12T03:59:43.242Z",
37937
38426
  "size": 2148,
37938
38427
  "path": "../public/_nuxt/agents.BV70ioCv.css"
37939
38428
  },
37940
- "/_nuxt/B7wL3pDk.js": {
37941
- "type": "text/javascript; charset=utf-8",
37942
- "etag": "\"3d5-itnLaBVfNThToG43nVPq3jMDhq0\"",
37943
- "mtime": "2026-09-11T08:35:24.376Z",
37944
- "size": 981,
37945
- "path": "../public/_nuxt/B7wL3pDk.js"
37946
- },
37947
- "/_nuxt/B5S_UyaC.js": {
38429
+ "/_nuxt/aLLjF2K-2.js": {
37948
38430
  "type": "text/javascript; charset=utf-8",
37949
- "etag": "\"2435-cVXb4Ze0vEZbXwWSHOgo7NJ59ME\"",
37950
- "mtime": "2026-09-11T08:35:24.376Z",
37951
- "size": 9269,
37952
- "path": "../public/_nuxt/B5S_UyaC.js"
38431
+ "etag": "\"53-W7A73tjZk8gL0O4HA2ZRkaTaF64\"",
38432
+ "mtime": "2026-09-12T03:59:43.237Z",
38433
+ "size": 83,
38434
+ "path": "../public/_nuxt/aLLjF2K-2.js"
37953
38435
  },
37954
- "/_nuxt/BASN8nZ0.js": {
38436
+ "/_nuxt/8NMOXZOV.js": {
37955
38437
  "type": "text/javascript; charset=utf-8",
37956
- "etag": "\"623-b/qA8sA7MNxRVKvVBaEUH75JU5M\"",
37957
- "mtime": "2026-09-11T08:35:24.376Z",
37958
- "size": 1571,
37959
- "path": "../public/_nuxt/BASN8nZ0.js"
38438
+ "etag": "\"c0a1-nxEv13/TZOSwXE1Uh5g6ynV5Bao\"",
38439
+ "mtime": "2026-09-12T03:59:43.216Z",
38440
+ "size": 49313,
38441
+ "path": "../public/_nuxt/8NMOXZOV.js"
37960
38442
  },
37961
38443
  "/_nuxt/BBrRELH32.js": {
37962
38444
  "type": "text/javascript; charset=utf-8",
37963
38445
  "etag": "\"5bc-jGs6+2LpPidhbmCHZyKfmEWQxCI\"",
37964
- "mtime": "2026-09-11T08:35:24.377Z",
38446
+ "mtime": "2026-09-12T03:59:43.217Z",
37965
38447
  "size": 1468,
37966
38448
  "path": "../public/_nuxt/BBrRELH32.js"
37967
38449
  },
37968
- "/_nuxt/BBBtwOpo.js": {
38450
+ "/_nuxt/aml.COEKNNqK.css": {
38451
+ "type": "text/css; charset=utf-8",
38452
+ "etag": "\"370f-qgRKdQJo512yCFP+pajQDl5GKi0\"",
38453
+ "mtime": "2026-09-12T03:59:43.242Z",
38454
+ "size": 14095,
38455
+ "path": "../public/_nuxt/aml.COEKNNqK.css"
38456
+ },
38457
+ "/_nuxt/aWWIh8YL.js": {
37969
38458
  "type": "text/javascript; charset=utf-8",
37970
- "etag": "\"3348-eQ058KWqHVmCOxYVHS5yTvcfcSA\"",
37971
- "mtime": "2026-09-11T08:35:24.377Z",
37972
- "size": 13128,
37973
- "path": "../public/_nuxt/BBBtwOpo.js"
38459
+ "etag": "\"10b83-nv1ZsQJBS5EehASgX2SOiI/mBpw\"",
38460
+ "mtime": "2026-09-12T03:59:43.238Z",
38461
+ "size": 68483,
38462
+ "path": "../public/_nuxt/aWWIh8YL.js"
37974
38463
  },
37975
- "/_nuxt/Bc0AmjfT.js": {
38464
+ "/_nuxt/BDmh31hl.js": {
37976
38465
  "type": "text/javascript; charset=utf-8",
37977
- "etag": "\"34e0-7APKITyvdbxSvgbdPKa6ySfVAuI\"",
37978
- "mtime": "2026-09-11T08:35:24.380Z",
37979
- "size": 13536,
37980
- "path": "../public/_nuxt/Bc0AmjfT.js"
38466
+ "etag": "\"5d4-nK1q0f/en9CHIE67KnsUTLT2CQI\"",
38467
+ "mtime": "2026-09-12T03:59:43.218Z",
38468
+ "size": 1492,
38469
+ "path": "../public/_nuxt/BDmh31hl.js"
38470
+ },
38471
+ "/_nuxt/BCGafdXT.js": {
38472
+ "type": "text/javascript; charset=utf-8",
38473
+ "etag": "\"3ff0-kMClwjRpzrLcxzcqbcd8Q/cCnJg\"",
38474
+ "mtime": "2026-09-12T03:59:43.217Z",
38475
+ "size": 16368,
38476
+ "path": "../public/_nuxt/BCGafdXT.js"
37981
38477
  },
37982
38478
  "/_nuxt/B7gZokg82.js": {
37983
38479
  "type": "text/javascript; charset=utf-8",
37984
38480
  "etag": "\"1d5d9-7v10FhVDuY8RpWcfSCPKziAj8s8\"",
37985
- "mtime": "2026-09-11T08:35:24.376Z",
38481
+ "mtime": "2026-09-12T03:59:43.217Z",
37986
38482
  "size": 120281,
37987
38483
  "path": "../public/_nuxt/B7gZokg82.js"
37988
38484
  },
37989
- "/_nuxt/BBwMH_hG.js": {
38485
+ "/_nuxt/BDNMzG2s2.js": {
37990
38486
  "type": "text/javascript; charset=utf-8",
37991
- "etag": "\"587d-zV1IOugR08gc0LlOGMSClQfdApQ\"",
37992
- "mtime": "2026-09-11T08:35:24.377Z",
37993
- "size": 22653,
37994
- "path": "../public/_nuxt/BBwMH_hG.js"
38487
+ "etag": "\"54-MasMfSk/A98C3Gn9uIOxtFxkWNw\"",
38488
+ "mtime": "2026-09-12T03:59:43.217Z",
38489
+ "size": 84,
38490
+ "path": "../public/_nuxt/BDNMzG2s2.js"
37995
38491
  },
37996
- "/_nuxt/BcrN7QEl2.js": {
38492
+ "/_nuxt/BHA40aHa.js": {
37997
38493
  "type": "text/javascript; charset=utf-8",
37998
- "etag": "\"b14-CLdyddO7m6guAKfIeyReGHA6Jwg\"",
37999
- "mtime": "2026-09-11T08:35:24.380Z",
38000
- "size": 2836,
38001
- "path": "../public/_nuxt/BcrN7QEl2.js"
38494
+ "etag": "\"1dae-TNCHUupkSTNB3L7XCdP+v3qPTYQ\"",
38495
+ "mtime": "2026-09-12T03:59:43.220Z",
38496
+ "size": 7598,
38497
+ "path": "../public/_nuxt/BHA40aHa.js"
38002
38498
  },
38003
- "/_nuxt/BcmbLh2z2.js": {
38499
+ "/_nuxt/BFkgkW8u.js": {
38004
38500
  "type": "text/javascript; charset=utf-8",
38005
- "etag": "\"5ae1-zOifodCJHWNEI9qfUw2kxn+QT9k\"",
38006
- "mtime": "2026-09-11T08:35:24.380Z",
38007
- "size": 23265,
38008
- "path": "../public/_nuxt/BcmbLh2z2.js"
38501
+ "etag": "\"a0d1-NSV9xOdq2+TkNG3z1okARkbt/Ew\"",
38502
+ "mtime": "2026-09-12T03:59:43.219Z",
38503
+ "size": 41169,
38504
+ "path": "../public/_nuxt/BFkgkW8u.js"
38009
38505
  },
38010
- "/_nuxt/BDUjyaF4.js": {
38506
+ "/_nuxt/BJHKLJJU.js": {
38011
38507
  "type": "text/javascript; charset=utf-8",
38012
- "etag": "\"12149-hpS4uBcTVyjMF/ahBrfPvWSV6dM\"",
38013
- "mtime": "2026-09-11T08:35:24.377Z",
38014
- "size": 74057,
38015
- "path": "../public/_nuxt/BDUjyaF4.js"
38508
+ "etag": "\"1339-QAcPV/AbfgGywBnf88Wg49sAL0M\"",
38509
+ "mtime": "2026-09-12T03:59:43.220Z",
38510
+ "size": 4921,
38511
+ "path": "../public/_nuxt/BJHKLJJU.js"
38016
38512
  },
38017
- "/_nuxt/BfGc7TJp.js": {
38513
+ "/_nuxt/BG8sCcwx.js": {
38018
38514
  "type": "text/javascript; charset=utf-8",
38019
- "etag": "\"f5-ynAHqm+XhchZ1co7YynIGiIextg\"",
38020
- "mtime": "2026-09-11T08:35:24.381Z",
38021
- "size": 245,
38022
- "path": "../public/_nuxt/BfGc7TJp.js"
38515
+ "etag": "\"4190d-RfweN32GXq6RZeMfyyTy4wIr35U\"",
38516
+ "mtime": "2026-09-12T03:59:43.215Z",
38517
+ "size": 268557,
38518
+ "path": "../public/_nuxt/BG8sCcwx.js"
38023
38519
  },
38024
- "/_nuxt/BeIfu4N3.js": {
38520
+ "/_nuxt/BNT8gYU92.js": {
38025
38521
  "type": "text/javascript; charset=utf-8",
38026
- "etag": "\"bc89-neyoILuYLlrhO8n1ehz7UmvocMs\"",
38027
- "mtime": "2026-09-11T08:35:24.380Z",
38028
- "size": 48265,
38029
- "path": "../public/_nuxt/BeIfu4N3.js"
38522
+ "etag": "\"5d7c-uoVe6NWOOg3c8AvXRdXBJ9QJC2k\"",
38523
+ "mtime": "2026-09-12T03:59:43.221Z",
38524
+ "size": 23932,
38525
+ "path": "../public/_nuxt/BNT8gYU92.js"
38030
38526
  },
38031
- "/_nuxt/B9nXmjSB.js": {
38527
+ "/_nuxt/BN6iuJEg2.js": {
38032
38528
  "type": "text/javascript; charset=utf-8",
38033
- "etag": "\"9084e-vFP7MXmHyEXKhn5m7L9MCHswQPg\"",
38034
- "mtime": "2026-09-11T08:35:24.376Z",
38035
- "size": 591950,
38036
- "path": "../public/_nuxt/B9nXmjSB.js"
38529
+ "etag": "\"d01-vLMADOVcZ1D0Movw5mYesca16fQ\"",
38530
+ "mtime": "2026-09-12T03:59:43.220Z",
38531
+ "size": 3329,
38532
+ "path": "../public/_nuxt/BN6iuJEg2.js"
38533
+ },
38534
+ "/_nuxt/BU83-NnX.js": {
38535
+ "type": "text/javascript; charset=utf-8",
38536
+ "etag": "\"1bca7-QTUYnyzS2tyJukMLZN6kXIjjcw8\"",
38537
+ "mtime": "2026-09-12T03:59:43.221Z",
38538
+ "size": 113831,
38539
+ "path": "../public/_nuxt/BU83-NnX.js"
38540
+ },
38541
+ "/_nuxt/BrIJiJSN.js": {
38542
+ "type": "text/javascript; charset=utf-8",
38543
+ "etag": "\"50eba-EQGueVrdlEzHO7oTVt2LPxnHgRo\"",
38544
+ "mtime": "2026-09-12T03:59:43.221Z",
38545
+ "size": 331450,
38546
+ "path": "../public/_nuxt/BrIJiJSN.js"
38037
38547
  },
38038
38548
  "/_nuxt/BFjGV-RV2.js": {
38039
38549
  "type": "text/javascript; charset=utf-8",
38040
38550
  "etag": "\"a0340-NzvTqyczSJgnuw9pjPQnLX42sAE\"",
38041
- "mtime": "2026-09-11T08:35:24.377Z",
38551
+ "mtime": "2026-09-12T03:59:43.219Z",
38042
38552
  "size": 656192,
38043
38553
  "path": "../public/_nuxt/BFjGV-RV2.js"
38044
38554
  },
38045
38555
  "/_nuxt/BGkumHZ32.js": {
38046
38556
  "type": "text/javascript; charset=utf-8",
38047
38557
  "etag": "\"14a0a8-FkCiOKvl5+p8em/4UNCrmbDN4qY\"",
38048
- "mtime": "2026-09-11T08:35:24.378Z",
38558
+ "mtime": "2026-09-12T03:59:43.219Z",
38049
38559
  "size": 1351848,
38050
38560
  "path": "../public/_nuxt/BGkumHZ32.js"
38051
38561
  },
38052
- "/_nuxt/BkLJA9J5.js": {
38562
+ "/_nuxt/BYhEUx8t.js": {
38053
38563
  "type": "text/javascript; charset=utf-8",
38054
- "etag": "\"28d3-MQaEd967hxGnatCbff3bUnWV5K8\"",
38055
- "mtime": "2026-09-11T08:35:24.381Z",
38056
- "size": 10451,
38057
- "path": "../public/_nuxt/BkLJA9J5.js"
38564
+ "etag": "\"4683-VUVLNcxEYcNaMSm1Cbz/wmeM604\"",
38565
+ "mtime": "2026-09-12T03:59:43.221Z",
38566
+ "size": 18051,
38567
+ "path": "../public/_nuxt/BYhEUx8t.js"
38058
38568
  },
38059
- "/_nuxt/BNXfwXpE.js": {
38569
+ "/_nuxt/C3gwHTz0.js": {
38060
38570
  "type": "text/javascript; charset=utf-8",
38061
- "etag": "\"30a-SKr3Bmmq+lyC2EG7XQ/M7P1jWog\"",
38062
- "mtime": "2026-09-11T08:35:24.378Z",
38063
- "size": 778,
38064
- "path": "../public/_nuxt/BNXfwXpE.js"
38571
+ "etag": "\"c83-Qsb8eOw0ptJIE9g9mNDkYaOA4VM\"",
38572
+ "mtime": "2026-09-12T03:59:43.222Z",
38573
+ "size": 3203,
38574
+ "path": "../public/_nuxt/C3gwHTz0.js"
38065
38575
  },
38066
- "/_nuxt/BgTB6h_q.js": {
38576
+ "/_nuxt/C3J6FYKa.js": {
38067
38577
  "type": "text/javascript; charset=utf-8",
38068
- "etag": "\"1caca-lfjDD3kJRleNsch+Mu9vFBCUum0\"",
38069
- "mtime": "2026-09-11T08:35:24.381Z",
38070
- "size": 117450,
38071
- "path": "../public/_nuxt/BgTB6h_q.js"
38578
+ "etag": "\"626-QRtMC3g1WIOYAvpDGdpR8kmZ7ps\"",
38579
+ "mtime": "2026-09-12T03:59:43.222Z",
38580
+ "size": 1574,
38581
+ "path": "../public/_nuxt/C3J6FYKa.js"
38072
38582
  },
38073
- "/_nuxt/BN_PdN3J.js": {
38583
+ "/_nuxt/C4DWUZ6d2.js": {
38074
38584
  "type": "text/javascript; charset=utf-8",
38075
- "etag": "\"10b9b-D693oquQMdJ9uX8C5GEOl79xXOE\"",
38076
- "mtime": "2026-09-11T08:35:24.378Z",
38077
- "size": 68507,
38078
- "path": "../public/_nuxt/BN_PdN3J.js"
38585
+ "etag": "\"92-SI4m48ydIbJ1X/2oxc8lcVNlouc\"",
38586
+ "mtime": "2026-09-12T03:59:43.222Z",
38587
+ "size": 146,
38588
+ "path": "../public/_nuxt/C4DWUZ6d2.js"
38079
38589
  },
38080
- "/_nuxt/Bp5luxkg2.js": {
38590
+ "/_nuxt/BzHEilTt.js": {
38081
38591
  "type": "text/javascript; charset=utf-8",
38082
- "etag": "\"3a06-wE6nRVKQRjsGzClNYT0f+LE6/Lg\"",
38083
- "mtime": "2026-09-11T08:35:24.381Z",
38084
- "size": 14854,
38085
- "path": "../public/_nuxt/Bp5luxkg2.js"
38592
+ "etag": "\"4fa9-va7l3h5q8x+aE2yvqoL1csBP9KI\"",
38593
+ "mtime": "2026-09-12T03:59:43.222Z",
38594
+ "size": 20393,
38595
+ "path": "../public/_nuxt/BzHEilTt.js"
38086
38596
  },
38087
- "/_nuxt/BSSUlJnx2.js": {
38597
+ "/_nuxt/C5gUkRwn.js": {
38088
38598
  "type": "text/javascript; charset=utf-8",
38089
- "etag": "\"5f5-t0OMayeEXY7fEaFUOlppJZZQvtM\"",
38090
- "mtime": "2026-09-11T08:35:24.379Z",
38091
- "size": 1525,
38092
- "path": "../public/_nuxt/BSSUlJnx2.js"
38599
+ "etag": "\"4d54-4zd4iq14kAxdjxf8PVzJ8SMRDlU\"",
38600
+ "mtime": "2026-09-12T03:59:43.222Z",
38601
+ "size": 19796,
38602
+ "path": "../public/_nuxt/C5gUkRwn.js"
38093
38603
  },
38094
- "/_nuxt/BSCpFtzG.js": {
38604
+ "/_nuxt/CClOy-Hz2.js": {
38095
38605
  "type": "text/javascript; charset=utf-8",
38096
- "etag": "\"13398-3vxX1fQrPyVWKnXsEX5bmCpF/Eg\"",
38097
- "mtime": "2026-09-11T08:35:24.379Z",
38098
- "size": 78744,
38099
- "path": "../public/_nuxt/BSCpFtzG.js"
38606
+ "etag": "\"20d4-RN9mqBdS6ZEpvrVM2lHCRuY3nZY\"",
38607
+ "mtime": "2026-09-12T03:59:43.222Z",
38608
+ "size": 8404,
38609
+ "path": "../public/_nuxt/CClOy-Hz2.js"
38100
38610
  },
38101
- "/_nuxt/BuCHayqN.js": {
38611
+ "/_nuxt/Cc_9VzD42.js": {
38102
38612
  "type": "text/javascript; charset=utf-8",
38103
- "etag": "\"1993-fimQ9A15eP2RbuUsEPv6CdPni84\"",
38104
- "mtime": "2026-09-11T08:35:24.382Z",
38105
- "size": 6547,
38106
- "path": "../public/_nuxt/BuCHayqN.js"
38107
- },
38108
- "/_nuxt/BuvcLKh1.js": {
38109
- "type": "text/javascript; charset=utf-8",
38110
- "etag": "\"10d39-bh25fEPU4z899iPX6fFfY8ACYFU\"",
38111
- "mtime": "2026-09-11T08:35:24.382Z",
38112
- "size": 68921,
38113
- "path": "../public/_nuxt/BuvcLKh1.js"
38613
+ "etag": "\"89e-avARWlfoAeMZaTQr0sXFqaRVGk4\"",
38614
+ "mtime": "2026-09-12T03:59:43.225Z",
38615
+ "size": 2206,
38616
+ "path": "../public/_nuxt/Cc_9VzD42.js"
38114
38617
  },
38115
- "/_nuxt/BWSE6hR6.js": {
38618
+ "/_nuxt/Cbq-mryP.js": {
38116
38619
  "type": "text/javascript; charset=utf-8",
38117
- "etag": "\"c087-g1yKsIayBt0P5WN6ZxAy5qs1RiY\"",
38118
- "mtime": "2026-09-11T08:35:24.379Z",
38119
- "size": 49287,
38120
- "path": "../public/_nuxt/BWSE6hR6.js"
38620
+ "etag": "\"28a9-MWirBiv3ouIxepoJqTpjvo0d20Q\"",
38621
+ "mtime": "2026-09-12T03:59:43.225Z",
38622
+ "size": 10409,
38623
+ "path": "../public/_nuxt/Cbq-mryP.js"
38121
38624
  },
38122
- "/_nuxt/BZGNTgTQ2.js": {
38625
+ "/_nuxt/CdPzkOMV.js": {
38123
38626
  "type": "text/javascript; charset=utf-8",
38124
- "etag": "\"53-pfqlZiZJEbPiLoDxP0PLfz2Ucmw\"",
38125
- "mtime": "2026-09-11T08:35:24.379Z",
38126
- "size": 83,
38127
- "path": "../public/_nuxt/BZGNTgTQ2.js"
38627
+ "etag": "\"623-/ooRHZ1cBLnY/mPYTYuLzxenEjw\"",
38628
+ "mtime": "2026-09-12T03:59:43.225Z",
38629
+ "size": 1571,
38630
+ "path": "../public/_nuxt/CdPzkOMV.js"
38128
38631
  },
38129
- "/_nuxt/BrIJiJSN.js": {
38632
+ "/_nuxt/Cec0Ua3F.js": {
38130
38633
  "type": "text/javascript; charset=utf-8",
38131
- "etag": "\"50eba-EQGueVrdlEzHO7oTVt2LPxnHgRo\"",
38132
- "mtime": "2026-09-11T08:35:24.382Z",
38133
- "size": 331450,
38134
- "path": "../public/_nuxt/BrIJiJSN.js"
38634
+ "etag": "\"1993-GdUyzzzMcfvjHxm7UFrX9akkoI0\"",
38635
+ "mtime": "2026-09-12T03:59:43.226Z",
38636
+ "size": 6547,
38637
+ "path": "../public/_nuxt/Cec0Ua3F.js"
38135
38638
  },
38136
- "/_nuxt/C-mDhyEd.js": {
38137
- "type": "text/javascript; charset=utf-8",
38138
- "etag": "\"5d4-njKM5SbFu3E502L7rwfpNRMYw0c\"",
38139
- "mtime": "2026-09-11T08:35:24.382Z",
38140
- "size": 1492,
38141
- "path": "../public/_nuxt/C-mDhyEd.js"
38639
+ "/_nuxt/channel-templates.C-M5nKcC.css": {
38640
+ "type": "text/css; charset=utf-8",
38641
+ "etag": "\"846-tzs5DYP5eAKLaZTF1ToNjvfm6T8\"",
38642
+ "mtime": "2026-09-12T03:59:43.242Z",
38643
+ "size": 2118,
38644
+ "path": "../public/_nuxt/channel-templates.C-M5nKcC.css"
38142
38645
  },
38143
- "/_nuxt/BZv4RFYN.js": {
38646
+ "/_nuxt/CNs_Ozdc2.js": {
38144
38647
  "type": "text/javascript; charset=utf-8",
38145
- "etag": "\"11c1-qeANOKi92R4/pBn9CknPlaxrFXA\"",
38146
- "mtime": "2026-09-11T08:35:24.379Z",
38147
- "size": 4545,
38148
- "path": "../public/_nuxt/BZv4RFYN.js"
38648
+ "etag": "\"1b-1MHUJYdBtOvbvPMaiQxDXp3lHyw\"",
38649
+ "mtime": "2026-09-12T03:59:43.223Z",
38650
+ "size": 27,
38651
+ "path": "../public/_nuxt/CNs_Ozdc2.js"
38149
38652
  },
38150
- "/_nuxt/C4OAdbVK2.js": {
38653
+ "/_nuxt/CM12FuB42.js": {
38151
38654
  "type": "text/javascript; charset=utf-8",
38152
- "etag": "\"89e-AQFf/aV6YnDPM3edZWc1ASPluno\"",
38153
- "mtime": "2026-09-11T08:35:24.383Z",
38154
- "size": 2206,
38155
- "path": "../public/_nuxt/C4OAdbVK2.js"
38655
+ "etag": "\"18b-zv5adDS5UoLhJMpSccvf5MniJLA\"",
38656
+ "mtime": "2026-09-12T03:59:43.223Z",
38657
+ "size": 395,
38658
+ "path": "../public/_nuxt/CM12FuB42.js"
38156
38659
  },
38157
- "/_nuxt/C3tCneTM.js": {
38660
+ "/_nuxt/CojCTLKD.js": {
38158
38661
  "type": "text/javascript; charset=utf-8",
38159
- "etag": "\"56ab-/6Cr6erEwmZtrhutqEU3O5P+s0A\"",
38160
- "mtime": "2026-09-11T08:35:24.382Z",
38161
- "size": 22187,
38162
- "path": "../public/_nuxt/C3tCneTM.js"
38662
+ "etag": "\"11c5-6b4j7sZqh+T5P+aLRZ6XhkyJGyo\"",
38663
+ "mtime": "2026-09-12T03:59:43.227Z",
38664
+ "size": 4549,
38665
+ "path": "../public/_nuxt/CojCTLKD.js"
38163
38666
  },
38164
- "/_nuxt/C77oC8yC2.js": {
38667
+ "/_nuxt/CoNpEq5X.js": {
38165
38668
  "type": "text/javascript; charset=utf-8",
38166
- "etag": "\"1fe0-jrc/2TM/ugXrG5/wGhO+1RqpL/c\"",
38167
- "mtime": "2026-09-11T08:35:24.383Z",
38168
- "size": 8160,
38169
- "path": "../public/_nuxt/C77oC8yC2.js"
38669
+ "etag": "\"2f1-FZU8z3/vTyhXK2ZmBtITplcBXmY\"",
38670
+ "mtime": "2026-09-12T03:59:43.226Z",
38671
+ "size": 753,
38672
+ "path": "../public/_nuxt/CoNpEq5X.js"
38170
38673
  },
38171
- "/_nuxt/C9f8QMp12.js": {
38674
+ "/_nuxt/Crod5z2f.js": {
38172
38675
  "type": "text/javascript; charset=utf-8",
38173
- "etag": "\"1896-VcRRXhZEm21djPt3FTvlq+iUccI\"",
38174
- "mtime": "2026-09-11T08:35:24.383Z",
38175
- "size": 6294,
38176
- "path": "../public/_nuxt/C9f8QMp12.js"
38676
+ "etag": "\"3d5-mS8/hK4dwayfb1YZWtzMVEWPF6g\"",
38677
+ "mtime": "2026-09-12T03:59:43.227Z",
38678
+ "size": 981,
38679
+ "path": "../public/_nuxt/Crod5z2f.js"
38177
38680
  },
38178
- "/_nuxt/CbzsPO5H.js": {
38681
+ "/_nuxt/CSkxz2NX.js": {
38179
38682
  "type": "text/javascript; charset=utf-8",
38180
- "etag": "\"4faa-iHCfQHTkIFacZfkKJ7cK5xg2CH4\"",
38181
- "mtime": "2026-09-11T08:35:24.385Z",
38182
- "size": 20394,
38183
- "path": "../public/_nuxt/CbzsPO5H.js"
38683
+ "etag": "\"1334d-Ivbd7+iw6XuJ8M1ljfz5AEuDZrs\"",
38684
+ "mtime": "2026-09-12T03:59:43.223Z",
38685
+ "size": 78669,
38686
+ "path": "../public/_nuxt/CSkxz2NX.js"
38184
38687
  },
38185
- "/_nuxt/Cgx818r-.js": {
38688
+ "/_nuxt/CWKEp1wx2.js": {
38186
38689
  "type": "text/javascript; charset=utf-8",
38187
- "etag": "\"3d8b-XQZ5oPQBXIXwiWAKaw52HXTCnfM\"",
38188
- "mtime": "2026-09-11T08:35:24.385Z",
38189
- "size": 15755,
38190
- "path": "../public/_nuxt/Cgx818r-.js"
38690
+ "etag": "\"555-ED/tuOi0Qdk4aSGksbI58QY+vQ8\"",
38691
+ "mtime": "2026-09-12T03:59:43.223Z",
38692
+ "size": 1365,
38693
+ "path": "../public/_nuxt/CWKEp1wx2.js"
38191
38694
  },
38192
- "/_nuxt/CdSOrh2c.js": {
38695
+ "/_nuxt/CWoJjWmZ.js": {
38193
38696
  "type": "text/javascript; charset=utf-8",
38194
- "etag": "\"4d23-IVQZm+9xTR9dCzd0Jzm7drmlleQ\"",
38195
- "mtime": "2026-09-11T08:35:24.385Z",
38196
- "size": 19747,
38197
- "path": "../public/_nuxt/CdSOrh2c.js"
38198
- },
38199
- "/_nuxt/channel-templates.C-M5nKcC.css": {
38200
- "type": "text/css; charset=utf-8",
38201
- "etag": "\"846-tzs5DYP5eAKLaZTF1ToNjvfm6T8\"",
38202
- "mtime": "2026-09-11T08:35:24.396Z",
38203
- "size": 2118,
38204
- "path": "../public/_nuxt/channel-templates.C-M5nKcC.css"
38697
+ "etag": "\"42-7Ccac6Eptzx/VGBNDzFAvw0P6lU\"",
38698
+ "mtime": "2026-09-12T03:59:43.223Z",
38699
+ "size": 66,
38700
+ "path": "../public/_nuxt/CWoJjWmZ.js"
38205
38701
  },
38206
- "/_nuxt/Cjm7VogC.js": {
38702
+ "/_nuxt/CZiw7sEV.js": {
38207
38703
  "type": "text/javascript; charset=utf-8",
38208
- "etag": "\"2136-k43Vk0bwBsy88uOpb0ftVj0pdhI\"",
38209
- "mtime": "2026-09-11T08:35:24.385Z",
38210
- "size": 8502,
38211
- "path": "../public/_nuxt/Cjm7VogC.js"
38704
+ "etag": "\"2d3b-ltYRPZ6fvOybrmOvkmkMnVB1IhA\"",
38705
+ "mtime": "2026-09-12T03:59:43.224Z",
38706
+ "size": 11579,
38707
+ "path": "../public/_nuxt/CZiw7sEV.js"
38212
38708
  },
38213
- "/_nuxt/CKfhtOt7.js": {
38709
+ "/_nuxt/CY9LbPCI.js": {
38214
38710
  "type": "text/javascript; charset=utf-8",
38215
- "etag": "\"9141-NLArDp1lZISfBmTeNNW/SqVqPrc\"",
38216
- "mtime": "2026-09-11T08:35:24.383Z",
38217
- "size": 37185,
38218
- "path": "../public/_nuxt/CKfhtOt7.js"
38711
+ "etag": "\"3dab-L0ihOqle9YGGkDIZ1n27qT21mAo\"",
38712
+ "mtime": "2026-09-12T03:59:43.224Z",
38713
+ "size": 15787,
38714
+ "path": "../public/_nuxt/CY9LbPCI.js"
38219
38715
  },
38220
- "/_nuxt/Cm5mDxzH.js": {
38716
+ "/_nuxt/CYWVXZTS.js": {
38221
38717
  "type": "text/javascript; charset=utf-8",
38222
- "etag": "\"13a0-pJimmU3QmHusvl3UTWPQL7TTnJY\"",
38223
- "mtime": "2026-09-11T08:35:24.385Z",
38224
- "size": 5024,
38225
- "path": "../public/_nuxt/Cm5mDxzH.js"
38718
+ "etag": "\"1fdf-2SN2fQIRzi888CZqLLWMShlF9mc\"",
38719
+ "mtime": "2026-09-12T03:59:43.224Z",
38720
+ "size": 8159,
38721
+ "path": "../public/_nuxt/CYWVXZTS.js"
38226
38722
  },
38227
- "/_nuxt/CmHzfVc5.js": {
38723
+ "/_nuxt/CzlMDL5H.js": {
38228
38724
  "type": "text/javascript; charset=utf-8",
38229
- "etag": "\"7ec3-tUpCnS/mT7jwFKjKxxLd9XTbgFU\"",
38230
- "mtime": "2026-09-11T08:35:24.385Z",
38231
- "size": 32451,
38232
- "path": "../public/_nuxt/CmHzfVc5.js"
38725
+ "etag": "\"9125-dP1WUSElrGrzZB2/J46sGS1t4MM\"",
38726
+ "mtime": "2026-09-12T03:59:43.227Z",
38727
+ "size": 37157,
38728
+ "path": "../public/_nuxt/CzlMDL5H.js"
38233
38729
  },
38234
- "/_nuxt/Cno6kYiO2.js": {
38730
+ "/_nuxt/C_OLzD09.js": {
38235
38731
  "type": "text/javascript; charset=utf-8",
38236
- "etag": "\"f2-SIBAvqBfq2ENmoMT2zz03X9uJTg\"",
38237
- "mtime": "2026-09-11T08:35:24.386Z",
38238
- "size": 242,
38239
- "path": "../public/_nuxt/Cno6kYiO2.js"
38732
+ "etag": "\"210b-10X0chnaT8E+32rHtx6ZB643xnQ\"",
38733
+ "mtime": "2026-09-12T03:59:43.225Z",
38734
+ "size": 8459,
38735
+ "path": "../public/_nuxt/C_OLzD09.js"
38240
38736
  },
38241
- "/_nuxt/CNs_Ozdc2.js": {
38737
+ "/_nuxt/D0ZBQrN_2.js": {
38242
38738
  "type": "text/javascript; charset=utf-8",
38243
- "etag": "\"1b-1MHUJYdBtOvbvPMaiQxDXp3lHyw\"",
38244
- "mtime": "2026-09-11T08:35:24.383Z",
38245
- "size": 27,
38246
- "path": "../public/_nuxt/CNs_Ozdc2.js"
38739
+ "etag": "\"462-0ouITDqojxoQrlHfAjgz9yuwtnk\"",
38740
+ "mtime": "2026-09-12T03:59:43.227Z",
38741
+ "size": 1122,
38742
+ "path": "../public/_nuxt/D0ZBQrN_2.js"
38247
38743
  },
38248
- "/_nuxt/Cn3J3NXR.js": {
38744
+ "/_nuxt/C__m4EhR.js": {
38249
38745
  "type": "text/javascript; charset=utf-8",
38250
- "etag": "\"a6ef-rxc5AWy7cZY4nez30ZVJeXrMlc4\"",
38251
- "mtime": "2026-09-11T08:35:24.386Z",
38252
- "size": 42735,
38253
- "path": "../public/_nuxt/Cn3J3NXR.js"
38746
+ "etag": "\"496d-b/ZPXL6opL07ctddnDSvbWv3crU\"",
38747
+ "mtime": "2026-09-12T03:59:43.225Z",
38748
+ "size": 18797,
38749
+ "path": "../public/_nuxt/C__m4EhR.js"
38254
38750
  },
38255
- "/_nuxt/Cp6z0RN7.js": {
38751
+ "/_nuxt/D6uzXueg.js": {
38256
38752
  "type": "text/javascript; charset=utf-8",
38257
- "etag": "\"2d59-Ffu3oT6YF362zP5H8NMBdVE8ywE\"",
38258
- "mtime": "2026-09-11T08:35:24.386Z",
38259
- "size": 11609,
38260
- "path": "../public/_nuxt/Cp6z0RN7.js"
38753
+ "etag": "\"3f2d-Qvezt1XBT/ai/Ii96P6PEqxX730\"",
38754
+ "mtime": "2026-09-12T03:59:43.228Z",
38755
+ "size": 16173,
38756
+ "path": "../public/_nuxt/D6uzXueg.js"
38261
38757
  },
38262
- "/_nuxt/Ct-WOVr4.js": {
38758
+ "/_nuxt/D9Oidm5I.js": {
38263
38759
  "type": "text/javascript; charset=utf-8",
38264
- "etag": "\"626-K2orno3teepJe9id2hVir0LyA/U\"",
38265
- "mtime": "2026-09-11T08:35:24.387Z",
38266
- "size": 1574,
38267
- "path": "../public/_nuxt/Ct-WOVr4.js"
38760
+ "etag": "\"29d-vUjiOrV6RvvMjy8bqbIIKVpv2qg\"",
38761
+ "mtime": "2026-09-12T03:59:43.228Z",
38762
+ "size": 669,
38763
+ "path": "../public/_nuxt/D9Oidm5I.js"
38268
38764
  },
38269
- "/_nuxt/CQvmN-Mi.js": {
38765
+ "/_nuxt/D1YDxZpZ.js": {
38270
38766
  "type": "text/javascript; charset=utf-8",
38271
- "etag": "\"25a7-4TY1NAMk4ozmnusisb7TYpoAnz0\"",
38272
- "mtime": "2026-09-11T08:35:24.384Z",
38273
- "size": 9639,
38274
- "path": "../public/_nuxt/CQvmN-Mi.js"
38767
+ "etag": "\"373d-vQBJMgqXZqjiLL5JDkPtggsr7/A\"",
38768
+ "mtime": "2026-09-12T03:59:43.227Z",
38769
+ "size": 14141,
38770
+ "path": "../public/_nuxt/D1YDxZpZ.js"
38275
38771
  },
38276
- "/_nuxt/CUDrOuW7.js": {
38772
+ "/_nuxt/DAe0h2MB.js": {
38277
38773
  "type": "text/javascript; charset=utf-8",
38278
- "etag": "\"24a7-HgYZ2dzhJGptonSe5tyATIi16h8\"",
38279
- "mtime": "2026-09-11T08:35:24.384Z",
38280
- "size": 9383,
38281
- "path": "../public/_nuxt/CUDrOuW7.js"
38774
+ "etag": "\"472d-sNSO3lgXFkiAXskOa0EXqG2y91Y\"",
38775
+ "mtime": "2026-09-12T03:59:43.229Z",
38776
+ "size": 18221,
38777
+ "path": "../public/_nuxt/DAe0h2MB.js"
38282
38778
  },
38283
- "/_nuxt/CUXCQXjG.js": {
38779
+ "/_nuxt/D20Yamr4.js": {
38284
38780
  "type": "text/javascript; charset=utf-8",
38285
- "etag": "\"18b-4es6+sDUaYZ89sbvxGRBaXHox64\"",
38286
- "mtime": "2026-09-11T08:35:24.384Z",
38287
- "size": 395,
38288
- "path": "../public/_nuxt/CUXCQXjG.js"
38781
+ "etag": "\"34e0-kHxgtavu/TqtFkh5WIroNe+fqeA\"",
38782
+ "mtime": "2026-09-12T03:59:43.228Z",
38783
+ "size": 13536,
38784
+ "path": "../public/_nuxt/D20Yamr4.js"
38289
38785
  },
38290
- "/_nuxt/CWKEp1wx2.js": {
38291
- "type": "text/javascript; charset=utf-8",
38292
- "etag": "\"555-ED/tuOi0Qdk4aSGksbI58QY+vQ8\"",
38293
- "mtime": "2026-09-11T08:35:24.384Z",
38294
- "size": 1365,
38295
- "path": "../public/_nuxt/CWKEp1wx2.js"
38786
+ "/_nuxt/dcw.DLYZqEhT.css": {
38787
+ "type": "text/css; charset=utf-8",
38788
+ "etag": "\"226e-H/BNammWITMmwjVcDe3temawvWY\"",
38789
+ "mtime": "2026-09-12T03:59:43.242Z",
38790
+ "size": 8814,
38791
+ "path": "../public/_nuxt/dcw.DLYZqEhT.css"
38296
38792
  },
38297
- "/_nuxt/CwqIxJGj.js": {
38298
- "type": "text/javascript; charset=utf-8",
38299
- "etag": "\"7945-E3BzeXrQwh3/2vvo6cNmHiKdCR0\"",
38300
- "mtime": "2026-09-11T08:35:24.387Z",
38301
- "size": 31045,
38302
- "path": "../public/_nuxt/CwqIxJGj.js"
38793
+ "/_nuxt/daq.B3265ZDn.css": {
38794
+ "type": "text/css; charset=utf-8",
38795
+ "etag": "\"5716-d66zshbHGr48GGRyBvY2sfoJdQ0\"",
38796
+ "mtime": "2026-09-12T03:59:43.242Z",
38797
+ "size": 22294,
38798
+ "path": "../public/_nuxt/daq.B3265ZDn.css"
38303
38799
  },
38304
- "/_nuxt/CZcC-gpk.js": {
38800
+ "/_nuxt/DBHNsT1Y.js": {
38305
38801
  "type": "text/javascript; charset=utf-8",
38306
- "etag": "\"665-LBR4N1TO8YjwC5eGVloYG3Mi+6s\"",
38307
- "mtime": "2026-09-11T08:35:24.384Z",
38308
- "size": 1637,
38309
- "path": "../public/_nuxt/CZcC-gpk.js"
38802
+ "etag": "\"a6ea-PNGgN6dJ9yAlkTn986443/cv5Bg\"",
38803
+ "mtime": "2026-09-12T03:59:43.229Z",
38804
+ "size": 42730,
38805
+ "path": "../public/_nuxt/DBHNsT1Y.js"
38310
38806
  },
38311
- "/_nuxt/D1z7i2UP.js": {
38807
+ "/_nuxt/DdD9mCHM.js": {
38312
38808
  "type": "text/javascript; charset=utf-8",
38313
- "etag": "\"3488-96j3CtrX45ueUXO7o7l3+3rcKWk\"",
38314
- "mtime": "2026-09-11T08:35:24.388Z",
38315
- "size": 13448,
38316
- "path": "../public/_nuxt/D1z7i2UP.js"
38809
+ "etag": "\"367e-omWo6yki7BAYCZUeWqjXVB4D12g\"",
38810
+ "mtime": "2026-09-12T03:59:43.232Z",
38811
+ "size": 13950,
38812
+ "path": "../public/_nuxt/DdD9mCHM.js"
38317
38813
  },
38318
- "/_nuxt/D-Ca4BGY.js": {
38814
+ "/_nuxt/DDgJcSET.js": {
38319
38815
  "type": "text/javascript; charset=utf-8",
38320
- "etag": "\"d322-Ji+xNrf2m+xWgNVNTGDuV7nAR7w\"",
38321
- "mtime": "2026-09-11T08:35:24.387Z",
38322
- "size": 54050,
38323
- "path": "../public/_nuxt/D-Ca4BGY.js"
38816
+ "etag": "\"10d2d-J5i2Bh5KGpWiMbirWVsqUXnECEM\"",
38817
+ "mtime": "2026-09-12T03:59:43.230Z",
38818
+ "size": 68909,
38819
+ "path": "../public/_nuxt/DDgJcSET.js"
38324
38820
  },
38325
- "/_nuxt/D8CqF0yy.js": {
38821
+ "/_nuxt/DDShH71m.js": {
38326
38822
  "type": "text/javascript; charset=utf-8",
38327
- "etag": "\"1dae-DlKVVV+fkbaFtolHiRzBO1Gjw4s\"",
38328
- "mtime": "2026-09-11T08:35:24.388Z",
38329
- "size": 7598,
38330
- "path": "../public/_nuxt/D8CqF0yy.js"
38823
+ "etag": "\"208b-0HsRaWwHxTBF3c2qeOvAD47ZMqc\"",
38824
+ "mtime": "2026-09-12T03:59:43.229Z",
38825
+ "size": 8331,
38826
+ "path": "../public/_nuxt/DDShH71m.js"
38331
38827
  },
38332
- "/_nuxt/D0fhp-Ga.js": {
38828
+ "/_nuxt/DeyBFhKH2.js": {
38333
38829
  "type": "text/javascript; charset=utf-8",
38334
- "etag": "\"28a2e-fOJar5XXcm6BPJ0B5LUbSoZ5f7I\"",
38335
- "mtime": "2026-09-11T08:35:24.387Z",
38336
- "size": 166446,
38337
- "path": "../public/_nuxt/D0fhp-Ga.js"
38338
- },
38339
- "/_nuxt/dcw.rXH2fc2Z.css": {
38340
- "type": "text/css; charset=utf-8",
38341
- "etag": "\"21ff-eCEj1LjsZGqaWA3e7HmSw6eii6c\"",
38342
- "mtime": "2026-09-11T08:35:24.397Z",
38343
- "size": 8703,
38344
- "path": "../public/_nuxt/dcw.rXH2fc2Z.css"
38830
+ "etag": "\"de0-Yj9kKk3gjPDsLBddu+/SWVIcWAs\"",
38831
+ "mtime": "2026-09-12T03:59:43.233Z",
38832
+ "size": 3552,
38833
+ "path": "../public/_nuxt/DeyBFhKH2.js"
38345
38834
  },
38346
- "/_nuxt/DaMCzQhv.js": {
38835
+ "/_nuxt/DeJykBFf.js": {
38347
38836
  "type": "text/javascript; charset=utf-8",
38348
- "etag": "\"20a6-HojFmGuhMgGaSuNKpUe6ww1mc2c\"",
38349
- "mtime": "2026-09-11T08:35:24.389Z",
38350
- "size": 8358,
38351
- "path": "../public/_nuxt/DaMCzQhv.js"
38352
- },
38353
- "/_nuxt/daq.Bb6l44-O.css": {
38354
- "type": "text/css; charset=utf-8",
38355
- "etag": "\"566b-xIfGRXMPjOr3Vjd3F9p2MkDmMgE\"",
38356
- "mtime": "2026-09-11T08:35:24.397Z",
38357
- "size": 22123,
38358
- "path": "../public/_nuxt/daq.Bb6l44-O.css"
38837
+ "etag": "\"334a-u9bmdQK8w/dApegtnDfx3UMudy0\"",
38838
+ "mtime": "2026-09-12T03:59:43.232Z",
38839
+ "size": 13130,
38840
+ "path": "../public/_nuxt/DeJykBFf.js"
38359
38841
  },
38360
38842
  "/_nuxt/DeYsUzhr.js": {
38361
38843
  "type": "text/javascript; charset=utf-8",
38362
38844
  "etag": "\"287-ALaKQkZWM37K7ru31bg511e8ikI\"",
38363
- "mtime": "2026-09-11T08:35:24.390Z",
38845
+ "mtime": "2026-09-12T03:59:43.233Z",
38364
38846
  "size": 647,
38365
38847
  "path": "../public/_nuxt/DeYsUzhr.js"
38366
38848
  },
38367
- "/_nuxt/default.jNT73_hq.css": {
38849
+ "/_nuxt/default.DE_vT238.css": {
38368
38850
  "type": "text/css; charset=utf-8",
38369
- "etag": "\"331a-6TD0bVL9oBl7zJbTtH5EEbyOPMc\"",
38370
- "mtime": "2026-09-11T08:35:24.397Z",
38371
- "size": 13082,
38372
- "path": "../public/_nuxt/default.jNT73_hq.css"
38851
+ "etag": "\"3383-KOL7cduQcGPwgDzvdpujb8cbadk\"",
38852
+ "mtime": "2026-09-12T03:59:43.243Z",
38853
+ "size": 13187,
38854
+ "path": "../public/_nuxt/default.DE_vT238.css"
38373
38855
  },
38374
- "/_nuxt/DIaTPH1M.js": {
38856
+ "/_nuxt/DIaZ2PTo2.js": {
38375
38857
  "type": "text/javascript; charset=utf-8",
38376
- "etag": "\"4714-V+kh9wViUtPwdxd+aFTZmN0tkYg\"",
38377
- "mtime": "2026-09-11T08:35:24.388Z",
38378
- "size": 18196,
38379
- "path": "../public/_nuxt/DIaTPH1M.js"
38380
- },
38381
- "/_nuxt/DLljr7g0.js": {
38382
- "type": "text/javascript; charset=utf-8",
38383
- "etag": "\"e476-VQA4IJLzQzu/XZWihB2Sdw3aL+M\"",
38384
- "mtime": "2026-09-11T08:35:24.389Z",
38385
- "size": 58486,
38386
- "path": "../public/_nuxt/DLljr7g0.js"
38858
+ "etag": "\"b14-0G25NjaOjPL8pUTCqFfHo9IuyOU\"",
38859
+ "mtime": "2026-09-12T03:59:43.230Z",
38860
+ "size": 2836,
38861
+ "path": "../public/_nuxt/DIaZ2PTo2.js"
38387
38862
  },
38388
38863
  "/_nuxt/DIOBYJe3.js": {
38389
38864
  "type": "text/javascript; charset=utf-8",
38390
38865
  "etag": "\"4b5-DdWaiyBS+/JejqhLG4Q7/JprP2Q\"",
38391
- "mtime": "2026-09-11T08:35:24.388Z",
38866
+ "mtime": "2026-09-12T03:59:43.230Z",
38392
38867
  "size": 1205,
38393
38868
  "path": "../public/_nuxt/DIOBYJe3.js"
38394
38869
  },
38395
- "/_nuxt/DoLasgPj2.js": {
38870
+ "/_nuxt/DkGQ7lnb2.js": {
38396
38871
  "type": "text/javascript; charset=utf-8",
38397
- "etag": "\"20cf-AD2OXvXYmQR29f4gV1ADJLRnCEA\"",
38398
- "mtime": "2026-09-11T08:35:24.390Z",
38399
- "size": 8399,
38400
- "path": "../public/_nuxt/DoLasgPj2.js"
38872
+ "etag": "\"10e-BEf1fw3Luoou0jWXn/VjweK3eFg\"",
38873
+ "mtime": "2026-09-12T03:59:43.234Z",
38874
+ "size": 270,
38875
+ "path": "../public/_nuxt/DkGQ7lnb2.js"
38401
38876
  },
38402
- "/_nuxt/DoMxCWN52.js": {
38877
+ "/_nuxt/DHFrCUxA2.js": {
38403
38878
  "type": "text/javascript; charset=utf-8",
38404
- "etag": "\"de0-GL8srJkfz017TYpBE3cZJpSs9GM\"",
38405
- "mtime": "2026-09-11T08:35:24.390Z",
38406
- "size": 3552,
38407
- "path": "../public/_nuxt/DoMxCWN52.js"
38879
+ "etag": "\"6a25-yH+Kt/gXrDj++gPlxRCMxjita4o\"",
38880
+ "mtime": "2026-09-12T03:59:43.230Z",
38881
+ "size": 27173,
38882
+ "path": "../public/_nuxt/DHFrCUxA2.js"
38408
38883
  },
38409
- "/_nuxt/DoTdlVVe2.js": {
38884
+ "/_nuxt/DnUuIR83.js": {
38410
38885
  "type": "text/javascript; charset=utf-8",
38411
- "etag": "\"d01-26/uhfF7fV7RMTXxvtsI8byutLw\"",
38412
- "mtime": "2026-09-11T08:35:24.390Z",
38413
- "size": 3329,
38414
- "path": "../public/_nuxt/DoTdlVVe2.js"
38886
+ "etag": "\"25e9-8nbC9HSsBhQz/JBDCkuVLAvVelM\"",
38887
+ "mtime": "2026-09-12T03:59:43.234Z",
38888
+ "size": 9705,
38889
+ "path": "../public/_nuxt/DnUuIR83.js"
38415
38890
  },
38416
- "/_nuxt/DpojD719.js": {
38891
+ "/_nuxt/DmqknNvV.js": {
38417
38892
  "type": "text/javascript; charset=utf-8",
38418
- "etag": "\"29d-Fu+XH+dfF6wIVeD5drBDJvCFiPE\"",
38419
- "mtime": "2026-09-11T08:35:24.390Z",
38420
- "size": 669,
38421
- "path": "../public/_nuxt/DpojD719.js"
38893
+ "etag": "\"26be4-2hzvX3cIxgA2eSHJiw0fjKz7dsY\"",
38894
+ "mtime": "2026-09-12T03:59:43.234Z",
38895
+ "size": 158692,
38896
+ "path": "../public/_nuxt/DmqknNvV.js"
38422
38897
  },
38423
- "/_nuxt/DTYBfjRY.js": {
38898
+ "/_nuxt/DPnwL14Y.js": {
38424
38899
  "type": "text/javascript; charset=utf-8",
38425
- "etag": "\"1a89-9gPrj/bgllCi+f9Gl6ze+k5zkcw\"",
38426
- "mtime": "2026-09-11T08:35:24.389Z",
38427
- "size": 6793,
38428
- "path": "../public/_nuxt/DTYBfjRY.js"
38900
+ "etag": "\"1d26-XSq9sA2ArdeEv8EAehmtwVgJuzE\"",
38901
+ "mtime": "2026-09-12T03:59:43.231Z",
38902
+ "size": 7462,
38903
+ "path": "../public/_nuxt/DPnwL14Y.js"
38429
38904
  },
38430
- "/_nuxt/DsVcWfyR.js": {
38905
+ "/_nuxt/DR12_WCA.js": {
38431
38906
  "type": "text/javascript; charset=utf-8",
38432
- "etag": "\"c9e-yZ3JcodwmRc/Ei+FK82PuQ/5agI\"",
38433
- "mtime": "2026-09-11T08:35:24.391Z",
38434
- "size": 3230,
38435
- "path": "../public/_nuxt/DsVcWfyR.js"
38907
+ "etag": "\"7e8c-cnN52Tex5ueiXHiBbehql11WL2w\"",
38908
+ "mtime": "2026-09-12T03:59:43.231Z",
38909
+ "size": 32396,
38910
+ "path": "../public/_nuxt/DR12_WCA.js"
38436
38911
  },
38437
- "/_nuxt/DtBu71ev.js": {
38912
+ "/_nuxt/DrYV5i68.js": {
38438
38913
  "type": "text/javascript; charset=utf-8",
38439
- "etag": "\"156bf-YTCvoAR5ZNk1ZGVhmY/Bceo/GjQ\"",
38440
- "mtime": "2026-09-11T08:35:24.391Z",
38441
- "size": 87743,
38442
- "path": "../public/_nuxt/DtBu71ev.js"
38914
+ "etag": "\"247c-c3SMdj/FgJdc1JQtOVxTE/w+KWc\"",
38915
+ "mtime": "2026-09-12T03:59:43.235Z",
38916
+ "size": 9340,
38917
+ "path": "../public/_nuxt/DrYV5i68.js"
38443
38918
  },
38444
- "/_nuxt/DYKVPzN-.js": {
38919
+ "/_nuxt/DVsjtsvZ2.js": {
38445
38920
  "type": "text/javascript; charset=utf-8",
38446
- "etag": "\"2f1-2SqdcwA9pq7Hk89eLtL9kizQDVw\"",
38447
- "mtime": "2026-09-11T08:35:24.389Z",
38448
- "size": 753,
38449
- "path": "../public/_nuxt/DYKVPzN-.js"
38921
+ "etag": "\"5ad7-SJw11mAwm8ecvvMfEtiG2ti53z8\"",
38922
+ "mtime": "2026-09-12T03:59:43.231Z",
38923
+ "size": 23255,
38924
+ "path": "../public/_nuxt/DVsjtsvZ2.js"
38450
38925
  },
38451
- "/_nuxt/DXRZPxGs.js": {
38926
+ "/_nuxt/DtYHUi5Z.js": {
38452
38927
  "type": "text/javascript; charset=utf-8",
38453
- "etag": "\"42-LgXLXdo9BGzBlyxqolWDOt/Ezyg\"",
38454
- "mtime": "2026-09-11T08:35:24.389Z",
38455
- "size": 66,
38456
- "path": "../public/_nuxt/DXRZPxGs.js"
38928
+ "etag": "\"2435-K8RPT3nu03HotXRj2dJy+ny1j2A\"",
38929
+ "mtime": "2026-09-12T03:59:43.235Z",
38930
+ "size": 9269,
38931
+ "path": "../public/_nuxt/DtYHUi5Z.js"
38457
38932
  },
38458
- "/_nuxt/Dy-mxvXY2.js": {
38933
+ "/_nuxt/DZtm4l-P2.js": {
38459
38934
  "type": "text/javascript; charset=utf-8",
38460
- "etag": "\"92-oLgwL98kjyuEcvL717na1ap9Tks\"",
38461
- "mtime": "2026-09-11T08:35:24.391Z",
38462
- "size": 146,
38463
- "path": "../public/_nuxt/Dy-mxvXY2.js"
38935
+ "etag": "\"1876-xVj/E45RroZBjWvEiBrZZOcvgoI\"",
38936
+ "mtime": "2026-09-12T03:59:43.232Z",
38937
+ "size": 6262,
38938
+ "path": "../public/_nuxt/DZtm4l-P2.js"
38464
38939
  },
38465
- "/_nuxt/DzuC31-i.js": {
38940
+ "/_nuxt/DzbFpZRk.js": {
38466
38941
  "type": "text/javascript; charset=utf-8",
38467
- "etag": "\"3fee-uHvx7EEJFuaMuP4BvDnqgIafaNw\"",
38468
- "mtime": "2026-09-11T08:35:24.391Z",
38469
- "size": 16366,
38470
- "path": "../public/_nuxt/DzuC31-i.js"
38942
+ "etag": "\"12d7-yzX3bY+yjWI2Ir8cswaDbLtltvQ\"",
38943
+ "mtime": "2026-09-12T03:59:43.235Z",
38944
+ "size": 4823,
38945
+ "path": "../public/_nuxt/DzbFpZRk.js"
38471
38946
  },
38472
- "/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2": {
38473
- "type": "font/woff2",
38474
- "etag": "\"3504-t17DeaJZ5CiTr/7PdWXcRgN9/Yc\"",
38475
- "mtime": "2026-09-11T08:35:24.397Z",
38476
- "size": 13572,
38477
- "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2"
38947
+ "/_nuxt/Dz_Q3Lpw2.js": {
38948
+ "type": "text/javascript; charset=utf-8",
38949
+ "etag": "\"39d2-I7HGf3BtAL6slz4WB2XKvH99HmQ\"",
38950
+ "mtime": "2026-09-12T03:59:43.235Z",
38951
+ "size": 14802,
38952
+ "path": "../public/_nuxt/Dz_Q3Lpw2.js"
38953
+ },
38954
+ "/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff": {
38955
+ "type": "font/woff",
38956
+ "etag": "\"3f04-1MKyFKXvChwQTK9MnbAM3SwAP/w\"",
38957
+ "mtime": "2026-09-12T03:59:43.243Z",
38958
+ "size": 16132,
38959
+ "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff"
38478
38960
  },
38479
38961
  "/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff": {
38480
38962
  "type": "font/woff",
38481
38963
  "etag": "\"3c88-Q5XoFKe1rGp1UkdvSR6MtPcFfgQ\"",
38482
- "mtime": "2026-09-11T08:35:24.398Z",
38964
+ "mtime": "2026-09-12T03:59:43.243Z",
38483
38965
  "size": 15496,
38484
38966
  "path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff"
38485
38967
  },
38486
- "/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff": {
38487
- "type": "font/woff",
38488
- "etag": "\"3f04-1MKyFKXvChwQTK9MnbAM3SwAP/w\"",
38489
- "mtime": "2026-09-11T08:35:24.397Z",
38490
- "size": 16132,
38491
- "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff"
38968
+ "/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2": {
38969
+ "type": "font/woff2",
38970
+ "etag": "\"3504-t17DeaJZ5CiTr/7PdWXcRgN9/Yc\"",
38971
+ "mtime": "2026-09-12T03:59:43.243Z",
38972
+ "size": 13572,
38973
+ "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2"
38492
38974
  },
38493
38975
  "/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2": {
38494
38976
  "type": "font/woff2",
38495
38977
  "etag": "\"33d4-lVrdxXudnaWAAL0JfU6b+yZGpK0\"",
38496
- "mtime": "2026-09-11T08:35:24.398Z",
38978
+ "mtime": "2026-09-12T03:59:43.244Z",
38497
38979
  "size": 13268,
38498
38980
  "path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2"
38499
38981
  },
38500
- "/_nuxt/DZzGarBE2.js": {
38501
- "type": "text/javascript; charset=utf-8",
38502
- "etag": "\"6a1e-ugf89JrIJQnC30eHwV4G/TERkwI\"",
38503
- "mtime": "2026-09-11T08:35:24.389Z",
38504
- "size": 27166,
38505
- "path": "../public/_nuxt/DZzGarBE2.js"
38982
+ "/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2": {
38983
+ "type": "font/woff2",
38984
+ "etag": "\"4620-AEmSjSDDFDLAiok0BdjqqFs2mx4\"",
38985
+ "mtime": "2026-09-12T03:59:43.244Z",
38986
+ "size": 17952,
38987
+ "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2"
38506
38988
  },
38507
38989
  "/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff": {
38508
38990
  "type": "font/woff",
38509
38991
  "etag": "\"5698-6bgErOYTElI0Z3Untp+h0Xi0FGs\"",
38510
- "mtime": "2026-09-11T08:35:24.398Z",
38992
+ "mtime": "2026-09-12T03:59:43.244Z",
38511
38993
  "size": 22168,
38512
38994
  "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff"
38513
38995
  },
38514
- "/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2": {
38515
- "type": "font/woff2",
38516
- "etag": "\"4620-AEmSjSDDFDLAiok0BdjqqFs2mx4\"",
38517
- "mtime": "2026-09-11T08:35:24.398Z",
38518
- "size": 17952,
38519
- "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2"
38996
+ "/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff": {
38997
+ "type": "font/woff",
38998
+ "etag": "\"4fcc-Wt58DNvJEH8PhhsEwR/fAuZLZf0\"",
38999
+ "mtime": "2026-09-12T03:59:43.245Z",
39000
+ "size": 20428,
39001
+ "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff"
38520
39002
  },
38521
39003
  "/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2": {
38522
39004
  "type": "font/woff2",
38523
39005
  "etag": "\"419c-BgVrkDzxBAskhVuAe8ZPKrVJ2vk\"",
38524
- "mtime": "2026-09-11T08:35:24.398Z",
39006
+ "mtime": "2026-09-12T03:59:43.245Z",
38525
39007
  "size": 16796,
38526
39008
  "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2"
38527
39009
  },
38528
- "/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff": {
38529
- "type": "font/woff",
38530
- "etag": "\"4fcc-Wt58DNvJEH8PhhsEwR/fAuZLZf0\"",
38531
- "mtime": "2026-09-11T08:35:24.398Z",
38532
- "size": 20428,
38533
- "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff"
38534
- },
38535
39010
  "/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff": {
38536
39011
  "type": "font/woff",
38537
39012
  "etag": "\"307c-Fmorq8T0Tyl1FByuAGfnIMJMsU0\"",
38538
- "mtime": "2026-09-11T08:35:24.399Z",
39013
+ "mtime": "2026-09-12T03:59:43.245Z",
38539
39014
  "size": 12412,
38540
39015
  "path": "../public/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff"
38541
39016
  },
38542
39017
  "/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2": {
38543
39018
  "type": "font/woff2",
38544
39019
  "etag": "\"2904-BXAeLh8O+jrT8ujKrV7WtU2zP1c\"",
38545
- "mtime": "2026-09-11T08:35:24.399Z",
39020
+ "mtime": "2026-09-12T03:59:43.245Z",
38546
39021
  "size": 10500,
38547
39022
  "path": "../public/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2"
38548
39023
  },
38549
- "/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2": {
38550
- "type": "font/woff2",
38551
- "etag": "\"2a00-ZNzj8SIiN3t2N23u++WhC6jE8gk\"",
38552
- "mtime": "2026-09-11T08:35:24.399Z",
38553
- "size": 10752,
38554
- "path": "../public/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2"
38555
- },
38556
39024
  "/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff": {
38557
39025
  "type": "font/woff",
38558
39026
  "etag": "\"3108-ggShwQ6kE+MAR7EEQafdmWunxHg\"",
38559
- "mtime": "2026-09-11T08:35:24.399Z",
39027
+ "mtime": "2026-09-12T03:59:43.246Z",
38560
39028
  "size": 12552,
38561
39029
  "path": "../public/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff"
38562
39030
  },
39031
+ "/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2": {
39032
+ "type": "font/woff2",
39033
+ "etag": "\"2a00-ZNzj8SIiN3t2N23u++WhC6jE8gk\"",
39034
+ "mtime": "2026-09-12T03:59:43.245Z",
39035
+ "size": 10752,
39036
+ "path": "../public/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2"
39037
+ },
38563
39038
  "/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff": {
38564
39039
  "type": "font/woff",
38565
39040
  "etag": "\"2304-q8ppn7qePqLys53UrEKMrGT8e6E\"",
38566
- "mtime": "2026-09-11T08:35:24.399Z",
39041
+ "mtime": "2026-09-12T03:59:43.246Z",
38567
39042
  "size": 8964,
38568
39043
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff"
38569
39044
  },
39045
+ "/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff": {
39046
+ "type": "font/woff",
39047
+ "etag": "\"20b0-FNV/ZgjupejIrGOsz4+8EYVUXHo\"",
39048
+ "mtime": "2026-09-12T03:59:43.247Z",
39049
+ "size": 8368,
39050
+ "path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff"
39051
+ },
39052
+ "/_nuxt/DYr1VMiQ.js": {
39053
+ "type": "text/javascript; charset=utf-8",
39054
+ "etag": "\"14128-u+iLJm1OCFSZy6SZdZC9SpDNZKM\"",
39055
+ "mtime": "2026-09-12T03:59:43.232Z",
39056
+ "size": 82216,
39057
+ "path": "../public/_nuxt/DYr1VMiQ.js"
39058
+ },
38570
39059
  "/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2": {
38571
39060
  "type": "font/woff2",
38572
39061
  "etag": "\"19d0-ppOK6AfNTXYuDEeeEMQQhOypGW8\"",
38573
- "mtime": "2026-09-11T08:35:24.400Z",
39062
+ "mtime": "2026-09-12T03:59:43.246Z",
38574
39063
  "size": 6608,
38575
39064
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2"
38576
39065
  },
38577
- "/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff": {
38578
- "type": "font/woff",
38579
- "etag": "\"20b0-FNV/ZgjupejIrGOsz4+8EYVUXHo\"",
38580
- "mtime": "2026-09-11T08:35:24.400Z",
38581
- "size": 8368,
38582
- "path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff"
39066
+ "/_nuxt/DUrecWPx.js": {
39067
+ "type": "text/javascript; charset=utf-8",
39068
+ "etag": "\"9095e-l1Y5uaqwCSwzDmMZvMC0IgZ+OHM\"",
39069
+ "mtime": "2026-09-12T03:59:43.231Z",
39070
+ "size": 592222,
39071
+ "path": "../public/_nuxt/DUrecWPx.js"
38583
39072
  },
38584
39073
  "/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2": {
38585
39074
  "type": "font/woff2",
38586
39075
  "etag": "\"1940-Y3hsqG2RXMGI9hHTiI+Nv2Q4msM\"",
38587
- "mtime": "2026-09-11T08:35:24.400Z",
39076
+ "mtime": "2026-09-12T03:59:43.247Z",
38588
39077
  "size": 6464,
38589
39078
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2"
38590
39079
  },
38591
39080
  "/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff": {
38592
39081
  "type": "font/woff",
38593
39082
  "etag": "\"7890-VX8YYh09367bg28IWSUybEXrsDQ\"",
38594
- "mtime": "2026-09-11T08:35:24.400Z",
39083
+ "mtime": "2026-09-12T03:59:43.247Z",
38595
39084
  "size": 30864,
38596
39085
  "path": "../public/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff"
38597
39086
  },
38598
- "/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff": {
38599
- "type": "font/woff",
38600
- "etag": "\"6fc0-tKFcVMt7ocp7dmWyG6/kxtP5mKY\"",
38601
- "mtime": "2026-09-11T08:35:24.400Z",
38602
- "size": 28608,
38603
- "path": "../public/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff"
38604
- },
38605
39087
  "/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2": {
38606
39088
  "type": "font/woff2",
38607
39089
  "etag": "\"632c-iB8RNlBCm9D0APLcMJ/hIPATx+0\"",
38608
- "mtime": "2026-09-11T08:35:24.400Z",
39090
+ "mtime": "2026-09-12T03:59:43.247Z",
38609
39091
  "size": 25388,
38610
39092
  "path": "../public/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2"
38611
39093
  },
38612
39094
  "/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2": {
38613
39095
  "type": "font/woff2",
38614
39096
  "etag": "\"5d0c-w7FmIa34l5RBoJYmvp9lwadEvW4\"",
38615
- "mtime": "2026-09-11T08:35:24.400Z",
39097
+ "mtime": "2026-09-12T03:59:43.247Z",
38616
39098
  "size": 23820,
38617
39099
  "path": "../public/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2"
38618
39100
  },
39101
+ "/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff": {
39102
+ "type": "font/woff",
39103
+ "etag": "\"6fc0-tKFcVMt7ocp7dmWyG6/kxtP5mKY\"",
39104
+ "mtime": "2026-09-12T03:59:43.248Z",
39105
+ "size": 28608,
39106
+ "path": "../public/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff"
39107
+ },
38619
39108
  "/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff": {
38620
39109
  "type": "font/woff",
38621
39110
  "etag": "\"f5b8-o98RIl4uKzIPJHZZpEI+mI17K3c\"",
38622
- "mtime": "2026-09-11T08:35:24.401Z",
39111
+ "mtime": "2026-09-12T03:59:43.248Z",
38623
39112
  "size": 62904,
38624
39113
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff"
38625
39114
  },
38626
39115
  "/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2": {
38627
39116
  "type": "font/woff2",
38628
39117
  "etag": "\"b19c-7qms9anmdJJsBixQTHSocgV31Qk\"",
38629
- "mtime": "2026-09-11T08:35:24.401Z",
39118
+ "mtime": "2026-09-12T03:59:43.248Z",
38630
39119
  "size": 45468,
38631
39120
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2"
38632
39121
  },
38633
39122
  "/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff": {
38634
39123
  "type": "font/woff",
38635
39124
  "etag": "\"12b44-jg/K3aZca4XOngCAf1Jh47/0cj8\"",
38636
- "mtime": "2026-09-11T08:35:24.401Z",
39125
+ "mtime": "2026-09-12T03:59:43.248Z",
38637
39126
  "size": 76612,
38638
39127
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff"
38639
39128
  },
38640
- "/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff": {
38641
- "type": "font/woff",
38642
- "etag": "\"1edc-XUugZ4qMSSF4m+TQLER2LLza1t0\"",
38643
- "mtime": "2026-09-11T08:35:24.402Z",
38644
- "size": 7900,
38645
- "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff"
39129
+ "/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2": {
39130
+ "type": "font/woff2",
39131
+ "etag": "\"187c-Wj36AOh9OjwDZT5W3eeao1D/NT4\"",
39132
+ "mtime": "2026-09-12T03:59:43.249Z",
39133
+ "size": 6268,
39134
+ "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2"
38646
39135
  },
38647
39136
  "/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2": {
38648
39137
  "type": "font/woff2",
38649
39138
  "etag": "\"de84-qKZ/sgxlZLRv1TmEnWR30Cc4wfw\"",
38650
- "mtime": "2026-09-11T08:35:24.401Z",
39139
+ "mtime": "2026-09-12T03:59:43.249Z",
38651
39140
  "size": 56964,
38652
39141
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2"
38653
39142
  },
39143
+ "/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff": {
39144
+ "type": "font/woff",
39145
+ "etag": "\"1edc-XUugZ4qMSSF4m+TQLER2LLza1t0\"",
39146
+ "mtime": "2026-09-12T03:59:43.250Z",
39147
+ "size": 7900,
39148
+ "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff"
39149
+ },
38654
39150
  "/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2": {
38655
39151
  "type": "font/woff2",
38656
39152
  "etag": "\"183c-arAHcc3MmJQ6+OtYVThlERUqDQQ\"",
38657
- "mtime": "2026-09-11T08:35:24.402Z",
39153
+ "mtime": "2026-09-12T03:59:43.250Z",
38658
39154
  "size": 6204,
38659
39155
  "path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2"
38660
39156
  },
38661
- "/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2": {
38662
- "type": "font/woff2",
38663
- "etag": "\"187c-Wj36AOh9OjwDZT5W3eeao1D/NT4\"",
38664
- "mtime": "2026-09-11T08:35:24.402Z",
38665
- "size": 6268,
38666
- "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2"
39157
+ "/_nuxt/entry.BB-Eeh-J.css": {
39158
+ "type": "text/css; charset=utf-8",
39159
+ "etag": "\"22c96-XxnjyI/eCOm4bHchDmRm07nGUdw\"",
39160
+ "mtime": "2026-09-12T03:59:43.250Z",
39161
+ "size": 142486,
39162
+ "path": "../public/_nuxt/entry.BB-Eeh-J.css"
38667
39163
  },
38668
39164
  "/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff": {
38669
39165
  "type": "font/woff",
38670
39166
  "etag": "\"1e50-PGVIQbsmhTvI1h5aIhavpIQl8z4\"",
38671
- "mtime": "2026-09-11T08:35:24.402Z",
39167
+ "mtime": "2026-09-12T03:59:43.250Z",
38672
39168
  "size": 7760,
38673
39169
  "path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff"
38674
39170
  },
38675
- "/_nuxt/ekuGmQ7R.js": {
38676
- "type": "text/javascript; charset=utf-8",
38677
- "etag": "\"5f2-QOjCRpxYZho41W5eoXY4CpvV16I\"",
38678
- "mtime": "2026-09-11T08:35:24.393Z",
38679
- "size": 1522,
38680
- "path": "../public/_nuxt/ekuGmQ7R.js"
38681
- },
38682
- "/_nuxt/G0qIw7Gq2.js": {
38683
- "type": "text/javascript; charset=utf-8",
38684
- "etag": "\"462-s/N+VoJiDplj3GORHgaIwAR+Uqk\"",
38685
- "mtime": "2026-09-11T08:35:24.392Z",
38686
- "size": 1122,
38687
- "path": "../public/_nuxt/G0qIw7Gq2.js"
38688
- },
38689
- "/_nuxt/FQri3dV3.js": {
38690
- "type": "text/javascript; charset=utf-8",
38691
- "etag": "\"9d28-A1mhFeEq6JXP9WiU/lzgX6qqGnM\"",
38692
- "mtime": "2026-09-11T08:35:24.391Z",
38693
- "size": 40232,
38694
- "path": "../public/_nuxt/FQri3dV3.js"
38695
- },
38696
39171
  "/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2": {
38697
39172
  "type": "font/woff2",
38698
39173
  "etag": "\"1cfc-yYSDXNlt/tTRaj6rJo8ZMqvY7pQ\"",
38699
- "mtime": "2026-09-11T08:35:24.403Z",
39174
+ "mtime": "2026-09-12T03:59:43.250Z",
38700
39175
  "size": 7420,
38701
39176
  "path": "../public/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2"
38702
39177
  },
38703
39178
  "/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2": {
38704
39179
  "type": "font/woff2",
38705
39180
  "etag": "\"3aec-5kpQSZEtAzzU5kdiuro3Zr2YR54\"",
38706
- "mtime": "2026-09-11T08:35:24.403Z",
39181
+ "mtime": "2026-09-12T03:59:43.251Z",
38707
39182
  "size": 15084,
38708
39183
  "path": "../public/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2"
38709
39184
  },
38710
- "/_nuxt/entry.jFrFAWuA.css": {
38711
- "type": "text/css; charset=utf-8",
38712
- "etag": "\"2149f-XybaaWT8IIh+ycY/8Br++oA4uGU\"",
38713
- "mtime": "2026-09-11T08:35:24.403Z",
38714
- "size": 136351,
38715
- "path": "../public/_nuxt/entry.jFrFAWuA.css"
38716
- },
38717
39185
  "/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2": {
38718
39186
  "type": "font/woff2",
38719
39187
  "etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
38720
- "mtime": "2026-09-11T08:35:24.403Z",
39188
+ "mtime": "2026-09-12T03:59:43.251Z",
38721
39189
  "size": 16512,
38722
39190
  "path": "../public/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2"
38723
39191
  },
38724
- "/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2": {
38725
- "type": "font/woff2",
38726
- "etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
38727
- "mtime": "2026-09-11T08:35:24.403Z",
38728
- "size": 29400,
38729
- "path": "../public/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2"
38730
- },
38731
39192
  "/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2": {
38732
39193
  "type": "font/woff2",
38733
39194
  "etag": "\"1820-nQACIwCsmkduQK2CSMidMhmLR9U\"",
38734
- "mtime": "2026-09-11T08:35:24.404Z",
39195
+ "mtime": "2026-09-12T03:59:43.251Z",
38735
39196
  "size": 6176,
38736
39197
  "path": "../public/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2"
38737
39198
  },
39199
+ "/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2": {
39200
+ "type": "font/woff2",
39201
+ "etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
39202
+ "mtime": "2026-09-12T03:59:43.251Z",
39203
+ "size": 29400,
39204
+ "path": "../public/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2"
39205
+ },
38738
39206
  "/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2": {
38739
39207
  "type": "font/woff2",
38740
39208
  "etag": "\"328c-3kQUs7xjzfvJdLvI58iU6DHlynA\"",
38741
- "mtime": "2026-09-11T08:35:24.404Z",
39209
+ "mtime": "2026-09-12T03:59:43.252Z",
38742
39210
  "size": 12940,
38743
39211
  "path": "../public/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2"
38744
39212
  },
38745
39213
  "/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2": {
38746
39214
  "type": "font/woff2",
38747
39215
  "etag": "\"3968-BV9ZbqWHVAcipAKX5y8la3JkUQs\"",
38748
- "mtime": "2026-09-11T08:35:24.404Z",
39216
+ "mtime": "2026-09-12T03:59:43.252Z",
38749
39217
  "size": 14696,
38750
39218
  "path": "../public/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2"
38751
39219
  },
38752
39220
  "/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2": {
38753
39221
  "type": "font/woff2",
38754
39222
  "etag": "\"5a58-jDy+14PX7OhwqFZsiKzuRax9xZ8\"",
38755
- "mtime": "2026-09-11T08:35:24.404Z",
39223
+ "mtime": "2026-09-12T03:59:43.252Z",
38756
39224
  "size": 23128,
38757
39225
  "path": "../public/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2"
38758
39226
  },
38759
39227
  "/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2": {
38760
39228
  "type": "font/woff2",
38761
39229
  "etag": "\"16b4-aZoLOGWoEYW7gmwZamfz5kTfFco\"",
38762
- "mtime": "2026-09-11T08:35:24.404Z",
39230
+ "mtime": "2026-09-12T03:59:43.252Z",
38763
39231
  "size": 5812,
38764
39232
  "path": "../public/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2"
38765
39233
  },
38766
39234
  "/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2": {
38767
39235
  "type": "font/woff2",
38768
39236
  "etag": "\"1e10-mpU2OlFk4DakDO4paRfgJ2LHDsM\"",
38769
- "mtime": "2026-09-11T08:35:24.404Z",
39237
+ "mtime": "2026-09-12T03:59:43.253Z",
38770
39238
  "size": 7696,
38771
39239
  "path": "../public/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2"
38772
39240
  },
38773
- "/_nuxt/HclGiUj8.js": {
38774
- "type": "text/javascript; charset=utf-8",
38775
- "etag": "\"4bb-OjUbx7m0dPDFUkNfZ4BuUs+1sHI\"",
38776
- "mtime": "2026-09-11T08:35:24.392Z",
38777
- "size": 1211,
38778
- "path": "../public/_nuxt/HclGiUj8.js"
38779
- },
38780
39241
  "/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2": {
38781
39242
  "type": "font/woff2",
38782
39243
  "etag": "\"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8\"",
38783
- "mtime": "2026-09-11T08:35:24.405Z",
39244
+ "mtime": "2026-09-12T03:59:43.253Z",
38784
39245
  "size": 8004,
38785
39246
  "path": "../public/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2"
38786
39247
  },
39248
+ "/_nuxt/HBLJ-wei.js": {
39249
+ "type": "text/javascript; charset=utf-8",
39250
+ "etag": "\"13a1-fzEUxRt3em5vbto3D3QQ5+jkREo\"",
39251
+ "mtime": "2026-09-12T03:59:43.235Z",
39252
+ "size": 5025,
39253
+ "path": "../public/_nuxt/HBLJ-wei.js"
39254
+ },
39255
+ "/_nuxt/HclGiUj8.js": {
39256
+ "type": "text/javascript; charset=utf-8",
39257
+ "etag": "\"4bb-OjUbx7m0dPDFUkNfZ4BuUs+1sHI\"",
39258
+ "mtime": "2026-09-12T03:59:43.236Z",
39259
+ "size": 1211,
39260
+ "path": "../public/_nuxt/HclGiUj8.js"
39261
+ },
38787
39262
  "/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2": {
38788
39263
  "type": "font/woff2",
38789
39264
  "etag": "\"20a4-mDbzFbXDuciYuRDdYbcJkcocaWU\"",
38790
- "mtime": "2026-09-11T08:35:24.405Z",
39265
+ "mtime": "2026-09-12T03:59:43.253Z",
38791
39266
  "size": 8356,
38792
39267
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2"
38793
39268
  },
38794
39269
  "/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff": {
38795
39270
  "type": "font/woff",
38796
39271
  "etag": "\"1c24-wpeoT2YBcqJ4hbipsoiB1m58w98\"",
38797
- "mtime": "2026-09-11T08:35:24.405Z",
39272
+ "mtime": "2026-09-12T03:59:43.253Z",
38798
39273
  "size": 7204,
38799
39274
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff"
38800
39275
  },
38801
39276
  "/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff": {
38802
39277
  "type": "font/woff",
38803
39278
  "etag": "\"1c28-50yap58S0sLYRB2B8AEk2dq82kg\"",
38804
- "mtime": "2026-09-11T08:35:24.405Z",
39279
+ "mtime": "2026-09-12T03:59:43.253Z",
38805
39280
  "size": 7208,
38806
39281
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff"
38807
39282
  },
38808
39283
  "/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2": {
38809
39284
  "type": "font/woff2",
38810
39285
  "etag": "\"210c-yqAnW+098RkHUvQzwj27Jo9sIUc\"",
38811
- "mtime": "2026-09-11T08:35:24.405Z",
39286
+ "mtime": "2026-09-12T03:59:43.254Z",
38812
39287
  "size": 8460,
38813
39288
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2"
38814
39289
  },
38815
39290
  "/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2": {
38816
39291
  "type": "font/woff2",
38817
39292
  "etag": "\"2488-WHfw+ZaOHy8HhYaV0AzfKZ8dozA\"",
38818
- "mtime": "2026-09-11T08:35:24.405Z",
39293
+ "mtime": "2026-09-12T03:59:43.254Z",
38819
39294
  "size": 9352,
38820
39295
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2"
38821
39296
  },
38822
39297
  "/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff": {
38823
39298
  "type": "font/woff",
38824
39299
  "etag": "\"1c64-t3eBraFEv1B6D+DIfK23+8/F2mA\"",
38825
- "mtime": "2026-09-11T08:35:24.406Z",
39300
+ "mtime": "2026-09-12T03:59:43.254Z",
38826
39301
  "size": 7268,
38827
39302
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff"
38828
39303
  },
38829
39304
  "/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2": {
38830
39305
  "type": "font/woff2",
38831
39306
  "etag": "\"1b00-w57wcK5m30ZZ4sBwsaWzlcI3F7c\"",
38832
- "mtime": "2026-09-11T08:35:24.406Z",
39307
+ "mtime": "2026-09-12T03:59:43.255Z",
38833
39308
  "size": 6912,
38834
39309
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2"
38835
39310
  },
38836
39311
  "/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff": {
38837
39312
  "type": "font/woff",
38838
39313
  "etag": "\"16bc-GBHBT1lClOFRLkxzjkkoZV1QN+Y\"",
38839
- "mtime": "2026-09-11T08:35:24.406Z",
39314
+ "mtime": "2026-09-12T03:59:43.254Z",
38840
39315
  "size": 5820,
38841
39316
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff"
38842
39317
  },
38843
39318
  "/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2": {
38844
39319
  "type": "font/woff2",
38845
39320
  "etag": "\"1b3c-pFin0Xk9XlGLhqdo1+npFJkyQ5Y\"",
38846
- "mtime": "2026-09-11T08:35:24.406Z",
39321
+ "mtime": "2026-09-12T03:59:43.255Z",
38847
39322
  "size": 6972,
38848
39323
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2"
38849
39324
  },
38850
- "/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff": {
38851
- "type": "font/woff",
38852
- "etag": "\"168c-gvDCX7ATl9g9LbPEKlQjJSXhRPw\"",
38853
- "mtime": "2026-09-11T08:35:24.406Z",
38854
- "size": 5772,
38855
- "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff"
38856
- },
38857
39325
  "/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff": {
38858
39326
  "type": "font/woff",
38859
39327
  "etag": "\"16a0-8RgtlGopOkBt2P4jKMMd7hk+D74\"",
38860
- "mtime": "2026-09-11T08:35:24.406Z",
39328
+ "mtime": "2026-09-12T03:59:43.255Z",
38861
39329
  "size": 5792,
38862
39330
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff"
38863
39331
  },
39332
+ "/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff": {
39333
+ "type": "font/woff",
39334
+ "etag": "\"168c-gvDCX7ATl9g9LbPEKlQjJSXhRPw\"",
39335
+ "mtime": "2026-09-12T03:59:43.255Z",
39336
+ "size": 5772,
39337
+ "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff"
39338
+ },
38864
39339
  "/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2": {
38865
39340
  "type": "font/woff2",
38866
39341
  "etag": "\"1e0c-R9/TBUX2qLWGlHeC55LoggyLdII\"",
38867
- "mtime": "2026-09-11T08:35:24.407Z",
39342
+ "mtime": "2026-09-12T03:59:43.256Z",
38868
39343
  "size": 7692,
38869
39344
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2"
38870
39345
  },
38871
39346
  "/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff": {
38872
39347
  "type": "font/woff",
38873
39348
  "etag": "\"3358-rWMSbc9cch7FBErQpfnWcshAYFM\"",
38874
- "mtime": "2026-09-11T08:35:24.407Z",
39349
+ "mtime": "2026-09-12T03:59:43.256Z",
38875
39350
  "size": 13144,
38876
39351
  "path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff"
38877
39352
  },
38878
39353
  "/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2": {
38879
39354
  "type": "font/woff2",
38880
39355
  "etag": "\"3974-u4dQDjIEo6fGXWYzx5xchAw76NM\"",
38881
- "mtime": "2026-09-11T08:35:24.407Z",
39356
+ "mtime": "2026-09-12T03:59:43.256Z",
38882
39357
  "size": 14708,
38883
39358
  "path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2"
38884
39359
  },
38885
39360
  "/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff": {
38886
39361
  "type": "font/woff",
38887
39362
  "etag": "\"3364-S8wip5no4QO46BFh3FPzQKpIOec\"",
38888
- "mtime": "2026-09-11T08:35:24.407Z",
39363
+ "mtime": "2026-09-12T03:59:43.257Z",
38889
39364
  "size": 13156,
38890
39365
  "path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff"
38891
39366
  },
38892
39367
  "/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2": {
38893
39368
  "type": "font/woff2",
38894
39369
  "etag": "\"3a28-0y8OBwGsYgQ4QBMagAznF6huTuI\"",
38895
- "mtime": "2026-09-11T08:35:24.407Z",
39370
+ "mtime": "2026-09-12T03:59:43.257Z",
38896
39371
  "size": 14888,
38897
39372
  "path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2"
38898
39373
  },
38899
39374
  "/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2": {
38900
39375
  "type": "font/woff2",
38901
39376
  "etag": "\"3d04-zppco6h02pIBwmMMXLe/qpaIwFI\"",
38902
- "mtime": "2026-09-11T08:35:24.407Z",
39377
+ "mtime": "2026-09-12T03:59:43.257Z",
38903
39378
  "size": 15620,
38904
39379
  "path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2"
38905
39380
  },
38906
39381
  "/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff": {
38907
39382
  "type": "font/woff",
38908
39383
  "etag": "\"3398-D/GHpHo4zls8HLHH2boKeigB6S4\"",
38909
- "mtime": "2026-09-11T08:35:24.408Z",
39384
+ "mtime": "2026-09-12T03:59:43.257Z",
38910
39385
  "size": 13208,
38911
39386
  "path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff"
38912
39387
  },
38913
39388
  "/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2": {
38914
39389
  "type": "font/woff2",
38915
39390
  "etag": "\"3424-SvjO9SK9iRLLL61B4GuQJWQP62I\"",
38916
- "mtime": "2026-09-11T08:35:24.408Z",
39391
+ "mtime": "2026-09-12T03:59:43.258Z",
38917
39392
  "size": 13348,
38918
39393
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2"
38919
39394
  },
38920
39395
  "/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff": {
38921
39396
  "type": "font/woff",
38922
39397
  "etag": "\"2df8-dfJwTWMZxHyGnUuJDGfpU4w2dLs\"",
38923
- "mtime": "2026-09-11T08:35:24.408Z",
39398
+ "mtime": "2026-09-12T03:59:43.258Z",
38924
39399
  "size": 11768,
38925
39400
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff"
38926
39401
  },
38927
39402
  "/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2": {
38928
39403
  "type": "font/woff2",
38929
39404
  "etag": "\"3478-PpQvQo59iHxPLcEUBhJfmFmCPuA\"",
38930
- "mtime": "2026-09-11T08:35:24.408Z",
39405
+ "mtime": "2026-09-12T03:59:43.258Z",
38931
39406
  "size": 13432,
38932
39407
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2"
38933
39408
  },
38934
39409
  "/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff": {
38935
39410
  "type": "font/woff",
38936
39411
  "etag": "\"2df8-73sb1BUyjMsq70ppsdZBHEqWrtE\"",
38937
- "mtime": "2026-09-11T08:35:24.408Z",
39412
+ "mtime": "2026-09-12T03:59:43.258Z",
38938
39413
  "size": 11768,
38939
39414
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff"
38940
39415
  },
38941
39416
  "/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2": {
38942
39417
  "type": "font/woff2",
38943
39418
  "etag": "\"37f8-5XYRqKuMO2rN5QZqfj4VW8r2jSQ\"",
38944
- "mtime": "2026-09-11T08:35:24.408Z",
39419
+ "mtime": "2026-09-12T03:59:43.259Z",
38945
39420
  "size": 14328,
38946
39421
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2"
38947
39422
  },
38948
39423
  "/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff": {
38949
39424
  "type": "font/woff",
38950
39425
  "etag": "\"2e38-fOmVENNzEJaYqxODn6K5NAbrEJk\"",
38951
- "mtime": "2026-09-11T08:35:24.408Z",
39426
+ "mtime": "2026-09-12T03:59:43.259Z",
38952
39427
  "size": 11832,
38953
39428
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff"
38954
39429
  },
38955
39430
  "/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2": {
38956
39431
  "type": "font/woff2",
38957
39432
  "etag": "\"16ec-bIkS18/YaTiWdOzfzp4pFXvLmqQ\"",
38958
- "mtime": "2026-09-11T08:35:24.409Z",
39433
+ "mtime": "2026-09-12T03:59:43.259Z",
38959
39434
  "size": 5868,
38960
39435
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2"
38961
39436
  },
38962
39437
  "/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff": {
38963
39438
  "type": "font/woff",
38964
39439
  "etag": "\"15f4-LdRX2sBB3T5WDAsZLCwBlsMYXPw\"",
38965
- "mtime": "2026-09-11T08:35:24.409Z",
39440
+ "mtime": "2026-09-12T03:59:43.259Z",
38966
39441
  "size": 5620,
38967
39442
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff"
38968
39443
  },
38969
- "/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2": {
38970
- "type": "font/woff2",
38971
- "etag": "\"1798-7VDjg0E2ggd9c0kJDHNRh+Fu5E0\"",
38972
- "mtime": "2026-09-11T08:35:24.410Z",
38973
- "size": 6040,
38974
- "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2"
38975
- },
38976
39444
  "/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff": {
38977
39445
  "type": "font/woff",
38978
39446
  "etag": "\"15f0-mGuZIt/ndQFiw5uxmCOkhhWSxi4\"",
38979
- "mtime": "2026-09-11T08:35:24.409Z",
39447
+ "mtime": "2026-09-12T03:59:43.260Z",
38980
39448
  "size": 5616,
38981
39449
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff"
38982
39450
  },
39451
+ "/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2": {
39452
+ "type": "font/woff2",
39453
+ "etag": "\"1798-7VDjg0E2ggd9c0kJDHNRh+Fu5E0\"",
39454
+ "mtime": "2026-09-12T03:59:43.260Z",
39455
+ "size": 6040,
39456
+ "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2"
39457
+ },
38983
39458
  "/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2": {
38984
39459
  "type": "font/woff2",
38985
39460
  "etag": "\"1b14-ylPjcMKGVc4RbTi2G25N0MSlVNo\"",
38986
- "mtime": "2026-09-11T08:35:24.410Z",
39461
+ "mtime": "2026-09-12T03:59:43.260Z",
38987
39462
  "size": 6932,
38988
39463
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2"
38989
39464
  },
38990
39465
  "/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff": {
38991
39466
  "type": "font/woff",
38992
39467
  "etag": "\"1650-9Pko0qRZ+EoISmnDaTRQ8KRGy/s\"",
38993
- "mtime": "2026-09-11T08:35:24.410Z",
39468
+ "mtime": "2026-09-12T03:59:43.261Z",
38994
39469
  "size": 5712,
38995
39470
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff"
38996
39471
  },
39472
+ "/_nuxt/JCoYF4IJ.js": {
39473
+ "type": "text/javascript; charset=utf-8",
39474
+ "etag": "\"3455-37tXgWnbnb3znRa47oi8vjuTdqc\"",
39475
+ "mtime": "2026-09-12T03:59:43.236Z",
39476
+ "size": 13397,
39477
+ "path": "../public/_nuxt/JCoYF4IJ.js"
39478
+ },
39479
+ "/_nuxt/JTLM-kqr2.js": {
39480
+ "type": "text/javascript; charset=utf-8",
39481
+ "etag": "\"5f5-SCePszT8yZWllH2E7nvCS+dPYsk\"",
39482
+ "mtime": "2026-09-12T03:59:43.236Z",
39483
+ "size": 1525,
39484
+ "path": "../public/_nuxt/JTLM-kqr2.js"
39485
+ },
38997
39486
  "/_nuxt/kZl6yT-12.js": {
38998
39487
  "type": "text/javascript; charset=utf-8",
38999
39488
  "etag": "\"e9-t0VKevMurw+ruGbCV/EgmcM2dww\"",
39000
- "mtime": "2026-09-11T08:35:24.393Z",
39489
+ "mtime": "2026-09-12T03:59:43.238Z",
39001
39490
  "size": 233,
39002
39491
  "path": "../public/_nuxt/kZl6yT-12.js"
39003
39492
  },
39004
39493
  "/_nuxt/lO5tpDZ5.js": {
39005
39494
  "type": "text/javascript; charset=utf-8",
39006
39495
  "etag": "\"3b-z4jypkmUW9c9v+AALQ28pDyJ80A\"",
39007
- "mtime": "2026-09-11T08:35:24.393Z",
39496
+ "mtime": "2026-09-12T03:59:43.238Z",
39008
39497
  "size": 59,
39009
39498
  "path": "../public/_nuxt/lO5tpDZ5.js"
39010
39499
  },
39011
- "/_nuxt/logs.DMOM-iHe.css": {
39500
+ "/_nuxt/jZsY8yYz.js": {
39501
+ "type": "text/javascript; charset=utf-8",
39502
+ "etag": "\"7c7-PL0IO2vGe5m8kLiMxnsrBNzHDKA\"",
39503
+ "mtime": "2026-09-12T03:59:43.238Z",
39504
+ "size": 1991,
39505
+ "path": "../public/_nuxt/jZsY8yYz.js"
39506
+ },
39507
+ "/_nuxt/logs.CqFyMrJw.css": {
39012
39508
  "type": "text/css; charset=utf-8",
39013
- "etag": "\"1410-UAOJXMAmlE9Bn2Xj1iFk0CXWguY\"",
39014
- "mtime": "2026-09-11T08:35:24.410Z",
39015
- "size": 5136,
39016
- "path": "../public/_nuxt/logs.DMOM-iHe.css"
39509
+ "etag": "\"14c3-80Yys++VF02i9m0dmRGSlXNvsdM\"",
39510
+ "mtime": "2026-09-12T03:59:43.261Z",
39511
+ "size": 5315,
39512
+ "path": "../public/_nuxt/logs.CqFyMrJw.css"
39513
+ },
39514
+ "/_nuxt/KZQX7xoM.js": {
39515
+ "type": "text/javascript; charset=utf-8",
39516
+ "etag": "\"bc8d-NE8BmFk1U6Qr8oLUgb9logVLDHA\"",
39517
+ "mtime": "2026-09-12T03:59:43.237Z",
39518
+ "size": 48269,
39519
+ "path": "../public/_nuxt/KZQX7xoM.js"
39017
39520
  },
39018
39521
  "/_nuxt/monitor.B--1dPzs.css": {
39019
39522
  "type": "text/css; charset=utf-8",
39020
39523
  "etag": "\"578-FjYyH+T9goSVwJOLXNhMi2Hm95Y\"",
39021
- "mtime": "2026-09-11T08:35:24.410Z",
39524
+ "mtime": "2026-09-12T03:59:43.261Z",
39022
39525
  "size": 1400,
39023
39526
  "path": "../public/_nuxt/monitor.B--1dPzs.css"
39024
39527
  },
39025
- "/_nuxt/niDwBOZW.js": {
39026
- "type": "text/javascript; charset=utf-8",
39027
- "etag": "\"12f1-JlgzqHJQENBszEGLuO9fMyRYm/E\"",
39028
- "mtime": "2026-09-11T08:35:24.393Z",
39029
- "size": 4849,
39030
- "path": "../public/_nuxt/niDwBOZW.js"
39031
- },
39032
- "/_nuxt/Lp7Ll94I.js": {
39033
- "type": "text/javascript; charset=utf-8",
39034
- "etag": "\"373d-P1v4qPVNCWsXAF8ecwFvPmdvFmE\"",
39035
- "mtime": "2026-09-11T08:35:24.392Z",
39036
- "size": 14141,
39037
- "path": "../public/_nuxt/Lp7Ll94I.js"
39038
- },
39039
39528
  "/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css": {
39040
39529
  "type": "text/css; charset=utf-8",
39041
39530
  "etag": "\"10d0-uLyus3YRLFfRIoYhlKCERpGIwVE\"",
39042
- "mtime": "2026-09-11T08:35:24.394Z",
39531
+ "mtime": "2026-09-12T03:59:43.240Z",
39043
39532
  "size": 4304,
39044
39533
  "path": "../public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css"
39045
39534
  },
39046
- "/_nuxt/ORt9oDIy2.js": {
39047
- "type": "text/javascript; charset=utf-8",
39048
- "etag": "\"c42-g+2xQOk5SmNd8dk4LSqx7FrSVE0\"",
39049
- "mtime": "2026-09-11T08:35:24.392Z",
39050
- "size": 3138,
39051
- "path": "../public/_nuxt/ORt9oDIy2.js"
39052
- },
39053
- "/_nuxt/pages.Cc8GX9T1.css": {
39535
+ "/_nuxt/pages.ooEzrMm9.css": {
39054
39536
  "type": "text/css; charset=utf-8",
39055
- "etag": "\"1f93-vaNeomRLLvT7nDlnsXdpp4S2TFo\"",
39056
- "mtime": "2026-09-11T08:35:24.410Z",
39057
- "size": 8083,
39058
- "path": "../public/_nuxt/pages.Cc8GX9T1.css"
39059
- },
39060
- "/_nuxt/plugins.wIPyfPn-.css": {
39061
- "type": "text/css; charset=utf-8",
39062
- "etag": "\"ab4-v3do8OYxniGhizT0UMHsXehCvL0\"",
39063
- "mtime": "2026-09-11T08:35:24.411Z",
39064
- "size": 2740,
39065
- "path": "../public/_nuxt/plugins.wIPyfPn-.css"
39537
+ "etag": "\"1f8f-b9J2EkJ46q6pDMK7XHEZEMw/z3s\"",
39538
+ "mtime": "2026-09-12T03:59:43.261Z",
39539
+ "size": 8079,
39540
+ "path": "../public/_nuxt/pages.ooEzrMm9.css"
39066
39541
  },
39067
39542
  "/_nuxt/permissions.B1pjGChZ.css": {
39068
39543
  "type": "text/css; charset=utf-8",
39069
39544
  "etag": "\"439-4fFWPs3Fv7K/AFrSalCd0HFO3pI\"",
39070
- "mtime": "2026-09-11T08:35:24.411Z",
39545
+ "mtime": "2026-09-12T03:59:43.261Z",
39071
39546
  "size": 1081,
39072
39547
  "path": "../public/_nuxt/permissions.B1pjGChZ.css"
39073
39548
  },
39549
+ "/_nuxt/plugins.5e5chZ67.css": {
39550
+ "type": "text/css; charset=utf-8",
39551
+ "etag": "\"ab2-6+VhPmyRC3rpgUGjFUB63S7ymbc\"",
39552
+ "mtime": "2026-09-12T03:59:43.262Z",
39553
+ "size": 2738,
39554
+ "path": "../public/_nuxt/plugins.5e5chZ67.css"
39555
+ },
39556
+ "/_nuxt/pdk8jLGT.js": {
39557
+ "type": "text/javascript; charset=utf-8",
39558
+ "etag": "\"1a39-SiPMzso8YXbn1yBHlZHYwIyR4Cw\"",
39559
+ "mtime": "2026-09-12T03:59:43.239Z",
39560
+ "size": 6713,
39561
+ "path": "../public/_nuxt/pdk8jLGT.js"
39562
+ },
39074
39563
  "/_nuxt/PluginSlot.DmjNbrcX.css": {
39075
39564
  "type": "text/css; charset=utf-8",
39076
39565
  "etag": "\"1b1-ASM0+zql/trZXZZxT6JL/MDdPtY\"",
39077
- "mtime": "2026-09-11T08:35:24.395Z",
39566
+ "mtime": "2026-09-12T03:59:43.240Z",
39078
39567
  "size": 433,
39079
39568
  "path": "../public/_nuxt/PluginSlot.DmjNbrcX.css"
39080
39569
  },
39081
- "/_nuxt/rqZ-1SoP.js": {
39082
- "type": "text/javascript; charset=utf-8",
39083
- "etag": "\"761d-n3nYYQYIxdnAu9GaImKE7k1Xy7Y\"",
39084
- "mtime": "2026-09-11T08:35:24.394Z",
39085
- "size": 30237,
39086
- "path": "../public/_nuxt/rqZ-1SoP.js"
39087
- },
39088
- "/_nuxt/pMoIO6rr.js": {
39570
+ "/_nuxt/pz2JDAM7.js": {
39089
39571
  "type": "text/javascript; charset=utf-8",
39090
- "etag": "\"40a01-FsPk7CX8Frlia6p0EwogkGlLllI\"",
39091
- "mtime": "2026-09-11T08:35:24.374Z",
39092
- "size": 264705,
39093
- "path": "../public/_nuxt/pMoIO6rr.js"
39572
+ "etag": "\"1caea-Rsju6Xu8UELInbAAC8iS80XsDQo\"",
39573
+ "mtime": "2026-09-12T03:59:43.239Z",
39574
+ "size": 117482,
39575
+ "path": "../public/_nuxt/pz2JDAM7.js"
39094
39576
  },
39095
39577
  "/_nuxt/RYFtK4qZ2.js": {
39096
39578
  "type": "text/javascript; charset=utf-8",
39097
39579
  "etag": "\"594c-ZHrAodAyz6fWAruZCqluWn052zA\"",
39098
- "mtime": "2026-09-11T08:35:24.392Z",
39580
+ "mtime": "2026-09-12T03:59:43.237Z",
39099
39581
  "size": 22860,
39100
39582
  "path": "../public/_nuxt/RYFtK4qZ2.js"
39101
39583
  },
39102
- "/_nuxt/settings.BCm4NZIc.css": {
39584
+ "/_nuxt/settings.Dm3M0RLy.css": {
39103
39585
  "type": "text/css; charset=utf-8",
39104
- "etag": "\"2179-FOkixrOAI+eUOlSN6Gyy1BpNt8Q\"",
39105
- "mtime": "2026-09-11T08:35:24.411Z",
39106
- "size": 8569,
39107
- "path": "../public/_nuxt/settings.BCm4NZIc.css"
39586
+ "etag": "\"2175-Bfu2f0XoqMS7xPh3BapUEUv/fps\"",
39587
+ "mtime": "2026-09-12T03:59:43.262Z",
39588
+ "size": 8565,
39589
+ "path": "../public/_nuxt/settings.Dm3M0RLy.css"
39590
+ },
39591
+ "/_nuxt/S_fVQwJK.js": {
39592
+ "type": "text/javascript; charset=utf-8",
39593
+ "etag": "\"9dc0-3l6Kc/MTmlDr92xcFaiueO5zXl8\"",
39594
+ "mtime": "2026-09-12T03:59:43.237Z",
39595
+ "size": 40384,
39596
+ "path": "../public/_nuxt/S_fVQwJK.js"
39108
39597
  },
39109
39598
  "/_nuxt/teams.BC75EGnR.css": {
39110
39599
  "type": "text/css; charset=utf-8",
39111
39600
  "etag": "\"a49-L5ibM+Ztp1to2Um0i9mSYODdZw4\"",
39112
- "mtime": "2026-09-11T08:35:24.411Z",
39601
+ "mtime": "2026-09-12T03:59:43.262Z",
39113
39602
  "size": 2633,
39114
39603
  "path": "../public/_nuxt/teams.BC75EGnR.css"
39115
39604
  },
39116
39605
  "/_nuxt/tokens.xRb1fSPU.css": {
39117
39606
  "type": "text/css; charset=utf-8",
39118
39607
  "etag": "\"991-sd4TNmcKczQa4a+DM+FOOSKkG9A\"",
39119
- "mtime": "2026-09-11T08:35:24.411Z",
39608
+ "mtime": "2026-09-12T03:59:43.262Z",
39120
39609
  "size": 2449,
39121
39610
  "path": "../public/_nuxt/tokens.xRb1fSPU.css"
39122
39611
  },
39123
39612
  "/_nuxt/town.BLrD9-WH.css": {
39124
39613
  "type": "text/css; charset=utf-8",
39125
39614
  "etag": "\"64-INqlNEwsg1I+Dzc8LaEkJCLno5o\"",
39126
- "mtime": "2026-09-11T08:35:24.412Z",
39615
+ "mtime": "2026-09-12T03:59:43.263Z",
39127
39616
  "size": 100,
39128
39617
  "path": "../public/_nuxt/town.BLrD9-WH.css"
39129
39618
  },
39130
- "/_nuxt/town.C_DsNW0J.css": {
39619
+ "/_nuxt/town.DKIAhKnx.css": {
39131
39620
  "type": "text/css; charset=utf-8",
39132
- "etag": "\"3b2-lx8uIK7y3f1Nkj2gMcTuak3mB/I\"",
39133
- "mtime": "2026-09-11T08:35:24.412Z",
39134
- "size": 946,
39135
- "path": "../public/_nuxt/town.C_DsNW0J.css"
39621
+ "etag": "\"3f6-2stsCbObPrmCagrbI7L30H9657A\"",
39622
+ "mtime": "2026-09-12T03:59:43.263Z",
39623
+ "size": 1014,
39624
+ "path": "../public/_nuxt/town.DKIAhKnx.css"
39136
39625
  },
39137
- "/_nuxt/TownView.CtskuMXS.css": {
39626
+ "/_nuxt/TownView.0oLiQgTC.css": {
39138
39627
  "type": "text/css; charset=utf-8",
39139
- "etag": "\"11b2a-ZaXpy2M4q0qAxOvVuhL9xs66Xrw\"",
39140
- "mtime": "2026-09-11T08:35:24.395Z",
39141
- "size": 72490,
39142
- "path": "../public/_nuxt/TownView.CtskuMXS.css"
39628
+ "etag": "\"11be0-jasT+CDSVlHGDB2IL1ee1/4PS20\"",
39629
+ "mtime": "2026-09-12T03:59:43.240Z",
39630
+ "size": 72672,
39631
+ "path": "../public/_nuxt/TownView.0oLiQgTC.css"
39143
39632
  },
39144
- "/_nuxt/vJ4FPb-_.js": {
39633
+ "/_nuxt/users.CXnP2E08.css": {
39634
+ "type": "text/css; charset=utf-8",
39635
+ "etag": "\"22f-AZpbJXPsElnWYRHZbAWTKPG8Rxw\"",
39636
+ "mtime": "2026-09-12T03:59:43.263Z",
39637
+ "size": 559,
39638
+ "path": "../public/_nuxt/users.CXnP2E08.css"
39639
+ },
39640
+ "/_nuxt/vRTjoWqd.js": {
39145
39641
  "type": "text/javascript; charset=utf-8",
39146
- "etag": "\"496e-HYp1zkNZ5UP5CkmOCjjlTOlpRAA\"",
39147
- "mtime": "2026-09-11T08:35:24.394Z",
39148
- "size": 18798,
39149
- "path": "../public/_nuxt/vJ4FPb-_.js"
39642
+ "etag": "\"3ee-AsfUZSgw/F0W9cFRTAEVXcLJZiA\"",
39643
+ "mtime": "2026-09-12T03:59:43.239Z",
39644
+ "size": 1006,
39645
+ "path": "../public/_nuxt/vRTjoWqd.js"
39150
39646
  },
39151
- "/_nuxt/workshop.BJg84pOK.css": {
39647
+ "/_nuxt/workshop.Jk5HxWPE.css": {
39152
39648
  "type": "text/css; charset=utf-8",
39153
- "etag": "\"103c-a5w4eTEpLUvJ9/PHO/G3obwFdMs\"",
39154
- "mtime": "2026-09-11T08:35:24.412Z",
39155
- "size": 4156,
39156
- "path": "../public/_nuxt/workshop.BJg84pOK.css"
39649
+ "etag": "\"1038-1Xveua8xDfO+3AbczDYlptdvcWQ\"",
39650
+ "mtime": "2026-09-12T03:59:43.263Z",
39651
+ "size": 4152,
39652
+ "path": "../public/_nuxt/workshop.Jk5HxWPE.css"
39157
39653
  },
39158
- "/_nuxt/users.DuAt_Zwf.css": {
39159
- "type": "text/css; charset=utf-8",
39160
- "etag": "\"231-nHKEbLMGMLnneAGueIAZ3cR9UH0\"",
39161
- "mtime": "2026-09-11T08:35:24.412Z",
39162
- "size": 561,
39163
- "path": "../public/_nuxt/users.DuAt_Zwf.css"
39654
+ "/_nuxt/YnQxK3eG.js": {
39655
+ "type": "text/javascript; charset=utf-8",
39656
+ "etag": "\"56aa-34p36rIty4zhPYsHZGMJ3m4YxOQ\"",
39657
+ "mtime": "2026-09-12T03:59:43.237Z",
39658
+ "size": 22186,
39659
+ "path": "../public/_nuxt/YnQxK3eG.js"
39164
39660
  },
39165
- "/_nuxt/VLI2Zy4t.js": {
39661
+ "/_nuxt/zIGh7R49.js": {
39166
39662
  "type": "text/javascript; charset=utf-8",
39167
- "etag": "\"79db-1zvdkTTeWhTS0A+KbRz0/ud/ntw\"",
39168
- "mtime": "2026-09-11T08:35:24.392Z",
39169
- "size": 31195,
39170
- "path": "../public/_nuxt/VLI2Zy4t.js"
39663
+ "etag": "\"28a11-UMQ9kZ/56LLLr7SzoahyJK4kF+8\"",
39664
+ "mtime": "2026-09-12T03:59:43.240Z",
39665
+ "size": 166417,
39666
+ "path": "../public/_nuxt/zIGh7R49.js"
39171
39667
  },
39172
- "/_nuxt/_id_.hRYo-EAB.css": {
39668
+ "/_nuxt/zq5t1vyX.js": {
39669
+ "type": "text/javascript; charset=utf-8",
39670
+ "etag": "\"60d-NnE9dj7Q2Llc8RcygvdWR36sHQs\"",
39671
+ "mtime": "2026-09-12T03:59:43.240Z",
39672
+ "size": 1549,
39673
+ "path": "../public/_nuxt/zq5t1vyX.js"
39674
+ },
39675
+ "/_nuxt/_id_.D-SYuyZb.css": {
39173
39676
  "type": "text/css; charset=utf-8",
39174
- "etag": "\"1613-tO0SYd89Anr8faV5QNbS0IANCsY\"",
39175
- "mtime": "2026-09-11T08:35:24.395Z",
39176
- "size": 5651,
39177
- "path": "../public/_nuxt/_id_.hRYo-EAB.css"
39677
+ "etag": "\"3d10-ns70o4Kj3LWHCLTavrVybVSFwYM\"",
39678
+ "mtime": "2026-09-12T03:59:43.241Z",
39679
+ "size": 15632,
39680
+ "path": "../public/_nuxt/_id_.D-SYuyZb.css"
39178
39681
  },
39179
- "/_nuxt/_id_.MbzdFygI.css": {
39682
+ "/_nuxt/_id_.hma_BU6T.css": {
39180
39683
  "type": "text/css; charset=utf-8",
39181
- "etag": "\"3cef-ZJad4sf/g5mPJTNPHQLObrXEoEk\"",
39182
- "mtime": "2026-09-11T08:35:24.395Z",
39183
- "size": 15599,
39184
- "path": "../public/_nuxt/_id_.MbzdFygI.css"
39684
+ "etag": "\"1611-u2wYUO+6Mf0kDeG7LtcojlL7Wbo\"",
39685
+ "mtime": "2026-09-12T03:59:43.241Z",
39686
+ "size": 5649,
39687
+ "path": "../public/_nuxt/_id_.hma_BU6T.css"
39185
39688
  },
39186
39689
  "/assets/game/coin.png": {
39187
39690
  "type": "image/png",
@@ -39190,19 +39693,12 @@ const assets = {
39190
39693
  "size": 6733,
39191
39694
  "path": "../public/assets/game/coin.png"
39192
39695
  },
39193
- "/_nuxt/_wsId_.gXMEOYgX.css": {
39696
+ "/_nuxt/_wsId_.B12v3PhY.css": {
39194
39697
  "type": "text/css; charset=utf-8",
39195
- "etag": "\"11063-Q3Z+6KTHMRvqKnEygj3e1fWXboE\"",
39196
- "mtime": "2026-09-11T08:35:24.395Z",
39197
- "size": 69731,
39198
- "path": "../public/_nuxt/_wsId_.gXMEOYgX.css"
39199
- },
39200
- "/assets/game/player-sheet.png": {
39201
- "type": "image/png",
39202
- "etag": "\"2742-xHFqZq17XtbQVhapFMWJpVb0W5o\"",
39203
- "mtime": "2026-08-25T12:20:54.514Z",
39204
- "size": 10050,
39205
- "path": "../public/assets/game/player-sheet.png"
39698
+ "etag": "\"11002-wG5qYFNHpNeZ8Npb7NaYMOlUJQ0\"",
39699
+ "mtime": "2026-09-12T03:59:43.241Z",
39700
+ "size": 69634,
39701
+ "path": "../public/_nuxt/_wsId_.B12v3PhY.css"
39206
39702
  },
39207
39703
  "/assets/game/tuxemon-town.json": {
39208
39704
  "type": "application/json",
@@ -39211,6 +39707,13 @@ const assets = {
39211
39707
  "size": 65221,
39212
39708
  "path": "../public/assets/game/tuxemon-town.json"
39213
39709
  },
39710
+ "/assets/game/player-sheet.png": {
39711
+ "type": "image/png",
39712
+ "etag": "\"2742-xHFqZq17XtbQVhapFMWJpVb0W5o\"",
39713
+ "mtime": "2026-08-25T12:20:54.514Z",
39714
+ "size": 10050,
39715
+ "path": "../public/assets/game/player-sheet.png"
39716
+ },
39214
39717
  "/scene/background/cyber-town-background.svg": {
39215
39718
  "type": "image/svg+xml",
39216
39719
  "etag": "\"1656-Q8xWIs77K5i5HJYRdMCDYSQhkvs\"",
@@ -39218,13 +39721,6 @@ const assets = {
39218
39721
  "size": 5718,
39219
39722
  "path": "../public/scene/background/cyber-town-background.svg"
39220
39723
  },
39221
- "/_nuxt/builds/latest.json": {
39222
- "type": "application/json",
39223
- "etag": "\"47-Yw50J4RZv7aLI7iEew7AQO4Pnnw\"",
39224
- "mtime": "2026-09-11T08:35:29.461Z",
39225
- "size": 71,
39226
- "path": "../public/_nuxt/builds/latest.json"
39227
- },
39228
39724
  "/assets/game/tuxmon-sample-32px-extruded.png": {
39229
39725
  "type": "image/png",
39230
39726
  "etag": "\"2ee08-3yTsAqzTx0djGCGVAEgUGQ1/MEg\"",
@@ -39232,6 +39728,76 @@ const assets = {
39232
39728
  "size": 192008,
39233
39729
  "path": "../public/assets/game/tuxmon-sample-32px-extruded.png"
39234
39730
  },
39731
+ "/assets/game/character/bot.png": {
39732
+ "type": "image/png",
39733
+ "etag": "\"36fe-Ke8vj83Dinp8fFaRQQBfBsTGI/8\"",
39734
+ "mtime": "2026-08-25T12:20:54.510Z",
39735
+ "size": 14078,
39736
+ "path": "../public/assets/game/character/bot.png"
39737
+ },
39738
+ "/_nuxt/builds/latest.json": {
39739
+ "type": "application/json",
39740
+ "etag": "\"47-0tOzk3s80CkE6QyDmlCMFBquImg\"",
39741
+ "mtime": "2026-09-12T03:59:50.785Z",
39742
+ "size": 71,
39743
+ "path": "../public/_nuxt/builds/latest.json"
39744
+ },
39745
+ "/assets/game/character/device-3d.glb": {
39746
+ "type": "model/gltf-binary",
39747
+ "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39748
+ "mtime": "2026-08-25T12:20:54.511Z",
39749
+ "size": 19400,
39750
+ "path": "../public/assets/game/character/device-3d.glb"
39751
+ },
39752
+ "/assets/game/character/hero-3d.glb": {
39753
+ "type": "model/gltf-binary",
39754
+ "etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
39755
+ "mtime": "2026-08-25T12:20:54.511Z",
39756
+ "size": 33940,
39757
+ "path": "../public/assets/game/character/hero-3d.glb"
39758
+ },
39759
+ "/assets/game/character/hero-anime-1.glb": {
39760
+ "type": "model/gltf-binary",
39761
+ "etag": "\"1044c-AUMAdrW4S6OKEsUeAcR5c50fyKs\"",
39762
+ "mtime": "2026-08-26T05:23:14.557Z",
39763
+ "size": 66636,
39764
+ "path": "../public/assets/game/character/hero-anime-1.glb"
39765
+ },
39766
+ "/assets/game/character/hero-anime-2.glb": {
39767
+ "type": "model/gltf-binary",
39768
+ "etag": "\"1058c-J91UapGlsJg/5ODN8k8c7rSNpzw\"",
39769
+ "mtime": "2026-08-26T05:23:14.558Z",
39770
+ "size": 66956,
39771
+ "path": "../public/assets/game/character/hero-anime-2.glb"
39772
+ },
39773
+ "/assets/game/character/hero-anime-3.glb": {
39774
+ "type": "model/gltf-binary",
39775
+ "etag": "\"1057c-jREeKLYoS8AFWzuIOgOSr6CzehU\"",
39776
+ "mtime": "2026-08-26T05:23:14.558Z",
39777
+ "size": 66940,
39778
+ "path": "../public/assets/game/character/hero-anime-3.glb"
39779
+ },
39780
+ "/assets/game/character/hero-anime-4.glb": {
39781
+ "type": "model/gltf-binary",
39782
+ "etag": "\"10544-H4WjfazfTQ6hfF2SkK2BfHU27i8\"",
39783
+ "mtime": "2026-08-26T05:23:14.558Z",
39784
+ "size": 66884,
39785
+ "path": "../public/assets/game/character/hero-anime-4.glb"
39786
+ },
39787
+ "/assets/game/character/knight.png": {
39788
+ "type": "image/png",
39789
+ "etag": "\"3b37-Wyixufl/LcqKO/AeTLuGvzi4goQ\"",
39790
+ "mtime": "2026-08-25T12:20:54.511Z",
39791
+ "size": 15159,
39792
+ "path": "../public/assets/game/character/knight.png"
39793
+ },
39794
+ "/assets/game/character/mage.png": {
39795
+ "type": "image/png",
39796
+ "etag": "\"3832-juipuJuMJceZrarvR4w7OKgQejA\"",
39797
+ "mtime": "2026-08-25T12:20:54.512Z",
39798
+ "size": 14386,
39799
+ "path": "../public/assets/game/character/mage.png"
39800
+ },
39235
39801
  "/assets/game/devices/agv.glb": {
39236
39802
  "type": "model/gltf-binary",
39237
39803
  "etag": "\"b0ec-SGRGNfFN89F7v1GROXKGve7pQqs\"",
@@ -39267,12 +39833,12 @@ const assets = {
39267
39833
  "size": 10464,
39268
39834
  "path": "../public/assets/game/devices/device-scanner.glb"
39269
39835
  },
39270
- "/assets/game/devices/extruder.glb": {
39836
+ "/assets/game/devices/power-cabinet.glb": {
39271
39837
  "type": "model/gltf-binary",
39272
- "etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
39273
- "mtime": "2026-08-27T07:03:12.506Z",
39274
- "size": 98596,
39275
- "path": "../public/assets/game/devices/extruder.glb"
39838
+ "etag": "\"54f0-KsrAxig9JTAY5SGKK3jbdJXB6fk\"",
39839
+ "mtime": "2026-08-27T07:03:12.534Z",
39840
+ "size": 21744,
39841
+ "path": "../public/assets/game/devices/power-cabinet.glb"
39276
39842
  },
39277
39843
  "/assets/game/devices/mdo.glb": {
39278
39844
  "type": "model/gltf-binary",
@@ -39281,6 +39847,13 @@ const assets = {
39281
39847
  "size": 78564,
39282
39848
  "path": "../public/assets/game/devices/mdo.glb"
39283
39849
  },
39850
+ "/assets/game/devices/extruder.glb": {
39851
+ "type": "model/gltf-binary",
39852
+ "etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
39853
+ "mtime": "2026-08-27T07:03:12.506Z",
39854
+ "size": 98596,
39855
+ "path": "../public/assets/game/devices/extruder.glb"
39856
+ },
39284
39857
  "/assets/game/devices/pump.glb": {
39285
39858
  "type": "model/gltf-binary",
39286
39859
  "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
@@ -39288,13 +39861,6 @@ const assets = {
39288
39861
  "size": 19400,
39289
39862
  "path": "../public/assets/game/devices/pump.glb"
39290
39863
  },
39291
- "/assets/game/character/bot.png": {
39292
- "type": "image/png",
39293
- "etag": "\"36fe-Ke8vj83Dinp8fFaRQQBfBsTGI/8\"",
39294
- "mtime": "2026-08-25T12:20:54.510Z",
39295
- "size": 14078,
39296
- "path": "../public/assets/game/character/bot.png"
39297
- },
39298
39864
  "/assets/game/devices/thickness-scanner.glb": {
39299
39865
  "type": "model/gltf-binary",
39300
39866
  "etag": "\"3480-WMTbMzRrl/6AJPzEIPhRW9xPugA\"",
@@ -39302,13 +39868,6 @@ const assets = {
39302
39868
  "size": 13440,
39303
39869
  "path": "../public/assets/game/devices/thickness-scanner.glb"
39304
39870
  },
39305
- "/assets/game/devices/power-cabinet.glb": {
39306
- "type": "model/gltf-binary",
39307
- "etag": "\"54f0-KsrAxig9JTAY5SGKK3jbdJXB6fk\"",
39308
- "mtime": "2026-08-27T07:03:12.534Z",
39309
- "size": 21744,
39310
- "path": "../public/assets/game/devices/power-cabinet.glb"
39311
- },
39312
39871
  "/assets/game/devices/tdo.glb": {
39313
39872
  "type": "model/gltf-binary",
39314
39873
  "etag": "\"e10c-GdMX+mG/KrSVBzy4EeAPPjFoTqM\"",
@@ -39316,13 +39875,6 @@ const assets = {
39316
39875
  "size": 57612,
39317
39876
  "path": "../public/assets/game/devices/tdo.glb"
39318
39877
  },
39319
- "/assets/game/character/device-3d.glb": {
39320
- "type": "model/gltf-binary",
39321
- "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39322
- "mtime": "2026-08-25T12:20:54.511Z",
39323
- "size": 19400,
39324
- "path": "../public/assets/game/character/device-3d.glb"
39325
- },
39326
39878
  "/assets/game/devices/winder.glb": {
39327
39879
  "type": "model/gltf-binary",
39328
39880
  "etag": "\"9084-N9S2enupsA8WyhEHtkIgQ+RBDV4\"",
@@ -39330,61 +39882,19 @@ const assets = {
39330
39882
  "size": 36996,
39331
39883
  "path": "../public/assets/game/devices/winder.glb"
39332
39884
  },
39333
- "/assets/game/character/hero-3d.glb": {
39334
- "type": "model/gltf-binary",
39335
- "etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
39336
- "mtime": "2026-08-25T12:20:54.511Z",
39337
- "size": 33940,
39338
- "path": "../public/assets/game/character/hero-3d.glb"
39339
- },
39340
- "/assets/game/character/hero-anime-1.glb": {
39341
- "type": "model/gltf-binary",
39342
- "etag": "\"1044c-AUMAdrW4S6OKEsUeAcR5c50fyKs\"",
39343
- "mtime": "2026-08-26T05:23:14.557Z",
39344
- "size": 66636,
39345
- "path": "../public/assets/game/character/hero-anime-1.glb"
39346
- },
39347
- "/assets/game/character/mage.png": {
39348
- "type": "image/png",
39349
- "etag": "\"3832-juipuJuMJceZrarvR4w7OKgQejA\"",
39350
- "mtime": "2026-08-25T12:20:54.512Z",
39351
- "size": 14386,
39352
- "path": "../public/assets/game/character/mage.png"
39353
- },
39354
- "/assets/game/character/hero-anime-2.glb": {
39355
- "type": "model/gltf-binary",
39356
- "etag": "\"1058c-J91UapGlsJg/5ODN8k8c7rSNpzw\"",
39357
- "mtime": "2026-08-26T05:23:14.558Z",
39358
- "size": 66956,
39359
- "path": "../public/assets/game/character/hero-anime-2.glb"
39360
- },
39361
- "/assets/game/character/knight.png": {
39885
+ "/assets/game/wuwa/world-middle.png": {
39362
39886
  "type": "image/png",
39363
- "etag": "\"3b37-Wyixufl/LcqKO/AeTLuGvzi4goQ\"",
39364
- "mtime": "2026-08-25T12:20:54.511Z",
39365
- "size": 15159,
39366
- "path": "../public/assets/game/character/knight.png"
39367
- },
39368
- "/assets/game/character/hero-anime-4.glb": {
39369
- "type": "model/gltf-binary",
39370
- "etag": "\"10544-H4WjfazfTQ6hfF2SkK2BfHU27i8\"",
39371
- "mtime": "2026-08-26T05:23:14.558Z",
39372
- "size": 66884,
39373
- "path": "../public/assets/game/character/hero-anime-4.glb"
39374
- },
39375
- "/assets/game/character/hero-anime-3.glb": {
39376
- "type": "model/gltf-binary",
39377
- "etag": "\"1057c-jREeKLYoS8AFWzuIOgOSr6CzehU\"",
39378
- "mtime": "2026-08-26T05:23:14.558Z",
39379
- "size": 66940,
39380
- "path": "../public/assets/game/character/hero-anime-3.glb"
39887
+ "etag": "\"16164-Dxu+NdXPnqoPFfWHwQi1oefgNvU\"",
39888
+ "mtime": "2026-08-25T12:20:54.523Z",
39889
+ "size": 90468,
39890
+ "path": "../public/assets/game/wuwa/world-middle.png"
39381
39891
  },
39382
- "/assets/game/wuwa/world-far.png": {
39892
+ "/assets/game/wuwa/scene-map.png": {
39383
39893
  "type": "image/png",
39384
- "etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
39385
- "mtime": "2026-08-25T12:20:54.522Z",
39386
- "size": 439185,
39387
- "path": "../public/assets/game/wuwa/world-far.png"
39894
+ "etag": "\"682db-bU8mh8SeHPotvuaCc6PZzrWoT+A\"",
39895
+ "mtime": "2026-08-25T12:20:54.521Z",
39896
+ "size": 426715,
39897
+ "path": "../public/assets/game/wuwa/scene-map.png"
39388
39898
  },
39389
39899
  "/assets/game/wuwa/wu-aura.png": {
39390
39900
  "type": "image/png",
@@ -39393,13 +39903,6 @@ const assets = {
39393
39903
  "size": 8277,
39394
39904
  "path": "../public/assets/game/wuwa/wu-aura.png"
39395
39905
  },
39396
- "/assets/game/wuwa/world-middle.png": {
39397
- "type": "image/png",
39398
- "etag": "\"16164-Dxu+NdXPnqoPFfWHwQi1oefgNvU\"",
39399
- "mtime": "2026-08-25T12:20:54.523Z",
39400
- "size": 90468,
39401
- "path": "../public/assets/game/wuwa/world-middle.png"
39402
- },
39403
39906
  "/assets/game/wuwa/wu-lead.png": {
39404
39907
  "type": "image/png",
39405
39908
  "etag": "\"3b04-agK45Y3g7QDPns/kmkhTGYSTPDM\"",
@@ -39407,13 +39910,6 @@ const assets = {
39407
39910
  "size": 15108,
39408
39911
  "path": "../public/assets/game/wuwa/wu-lead.png"
39409
39912
  },
39410
- "/assets/game/wuwa/scene-map.png": {
39411
- "type": "image/png",
39412
- "etag": "\"682db-bU8mh8SeHPotvuaCc6PZzrWoT+A\"",
39413
- "mtime": "2026-08-25T12:20:54.521Z",
39414
- "size": 426715,
39415
- "path": "../public/assets/game/wuwa/scene-map.png"
39416
- },
39417
39913
  "/assets/game/wuwa/wu-ring.png": {
39418
39914
  "type": "image/png",
39419
39915
  "etag": "\"65ac-/iIjlPgFNpD98zDsyCJYA8021E4\"",
@@ -39421,6 +39917,13 @@ const assets = {
39421
39917
  "size": 26028,
39422
39918
  "path": "../public/assets/game/wuwa/wu-ring.png"
39423
39919
  },
39920
+ "/assets/game/wuwa/world-far.png": {
39921
+ "type": "image/png",
39922
+ "etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
39923
+ "mtime": "2026-08-25T12:20:54.522Z",
39924
+ "size": 439185,
39925
+ "path": "../public/assets/game/wuwa/world-far.png"
39926
+ },
39424
39927
  "/assets/game/wuwa/wu-slash.png": {
39425
39928
  "type": "image/png",
39426
39929
  "etag": "\"185-fVjcllSJOBMFcBWLIgBzTrzWGaY\"",
@@ -39428,6 +39931,13 @@ const assets = {
39428
39931
  "size": 389,
39429
39932
  "path": "../public/assets/game/wuwa/wu-slash.png"
39430
39933
  },
39934
+ "/assets/game/wuwa/wu-worker-0.png": {
39935
+ "type": "image/png",
39936
+ "etag": "\"3c59-fILvgyTv9TKRgrI9GQlRhaSR96U\"",
39937
+ "mtime": "2026-08-25T12:20:54.528Z",
39938
+ "size": 15449,
39939
+ "path": "../public/assets/game/wuwa/wu-worker-0.png"
39940
+ },
39431
39941
  "/assets/game/wuwa/world-near.png": {
39432
39942
  "type": "image/png",
39433
39943
  "etag": "\"bbcd8-BrybeZP/ZGdD0v5NVC8T/Y4AXyM\"",
@@ -39435,12 +39945,12 @@ const assets = {
39435
39945
  "size": 769240,
39436
39946
  "path": "../public/assets/game/wuwa/world-near.png"
39437
39947
  },
39438
- "/assets/game/wuwa/wu-worker-0.png": {
39948
+ "/assets/game/wuwa/wu-worker-1.png": {
39439
39949
  "type": "image/png",
39440
- "etag": "\"3c59-fILvgyTv9TKRgrI9GQlRhaSR96U\"",
39441
- "mtime": "2026-08-25T12:20:54.528Z",
39442
- "size": 15449,
39443
- "path": "../public/assets/game/wuwa/wu-worker-0.png"
39950
+ "etag": "\"3cc8-0XoRr5qFC7X+vEEX+XrX4cRX+D0\"",
39951
+ "mtime": "2026-08-25T12:20:54.529Z",
39952
+ "size": 15560,
39953
+ "path": "../public/assets/game/wuwa/wu-worker-1.png"
39444
39954
  },
39445
39955
  "/assets/game/wuwa/wu-worker-2.png": {
39446
39956
  "type": "image/png",
@@ -39449,12 +39959,33 @@ const assets = {
39449
39959
  "size": 15489,
39450
39960
  "path": "../public/assets/game/wuwa/wu-worker-2.png"
39451
39961
  },
39452
- "/assets/game/wuwa/wu-worker-1.png": {
39962
+ "/assets/game/npc/boltnu-sheet.png": {
39453
39963
  "type": "image/png",
39454
- "etag": "\"3cc8-0XoRr5qFC7X+vEEX+XrX4cRX+D0\"",
39455
- "mtime": "2026-08-25T12:20:54.529Z",
39456
- "size": 15560,
39457
- "path": "../public/assets/game/wuwa/wu-worker-1.png"
39964
+ "etag": "\"a14-8xg90l10OuRoiEEgFXx9PTGJ9rA\"",
39965
+ "mtime": "2026-08-25T12:20:54.513Z",
39966
+ "size": 2580,
39967
+ "path": "../public/assets/game/npc/boltnu-sheet.png"
39968
+ },
39969
+ "/assets/game/npc/fluttaflap-sheet.png": {
39970
+ "type": "image/png",
39971
+ "etag": "\"f65-ivBz79RSNtXu3px7cWEzCwMXdkg\"",
39972
+ "mtime": "2026-08-25T12:20:54.513Z",
39973
+ "size": 3941,
39974
+ "path": "../public/assets/game/npc/fluttaflap-sheet.png"
39975
+ },
39976
+ "/assets/game/npc/rockitten-sheet.png": {
39977
+ "type": "image/png",
39978
+ "etag": "\"786-IY4LCl37+SB6pnPynapoUxsxvOM\"",
39979
+ "mtime": "2026-08-25T12:20:54.513Z",
39980
+ "size": 1926,
39981
+ "path": "../public/assets/game/npc/rockitten-sheet.png"
39982
+ },
39983
+ "/assets/game/npc/tux-sheet.png": {
39984
+ "type": "image/png",
39985
+ "etag": "\"912-kf4+Q7EukO60VT6vlziy5RrzuUo\"",
39986
+ "mtime": "2026-08-25T12:20:54.513Z",
39987
+ "size": 2322,
39988
+ "path": "../public/assets/game/npc/tux-sheet.png"
39458
39989
  },
39459
39990
  "/assets/game/player/misa-back-walk.000.png": {
39460
39991
  "type": "image/png",
@@ -39477,6 +40008,13 @@ const assets = {
39477
40008
  "size": 343,
39478
40009
  "path": "../public/assets/game/player/misa-back-walk.002.png"
39479
40010
  },
40011
+ "/assets/game/player/misa-back-walk.003.png": {
40012
+ "type": "image/png",
40013
+ "etag": "\"15c-L+/hkHDyiQ9FJs5w93pxALzvWEg\"",
40014
+ "mtime": "2026-08-25T12:20:54.514Z",
40015
+ "size": 348,
40016
+ "path": "../public/assets/game/player/misa-back-walk.003.png"
40017
+ },
39480
40018
  "/assets/game/player/misa-back.png": {
39481
40019
  "type": "image/png",
39482
40020
  "etag": "\"15c-KwI7aIn2tc/RPUJViRtdOGKZre4\"",
@@ -39491,13 +40029,6 @@ const assets = {
39491
40029
  "size": 338,
39492
40030
  "path": "../public/assets/game/player/misa-front-walk.000.png"
39493
40031
  },
39494
- "/assets/game/player/misa-back-walk.003.png": {
39495
- "type": "image/png",
39496
- "etag": "\"15c-L+/hkHDyiQ9FJs5w93pxALzvWEg\"",
39497
- "mtime": "2026-08-25T12:20:54.514Z",
39498
- "size": 348,
39499
- "path": "../public/assets/game/player/misa-back-walk.003.png"
39500
- },
39501
40032
  "/assets/game/player/misa-front-walk.001.png": {
39502
40033
  "type": "image/png",
39503
40034
  "etag": "\"155-r/wKRG+amQ/2TvYolFC2UPXHdC4\"",
@@ -39526,13 +40057,6 @@ const assets = {
39526
40057
  "size": 341,
39527
40058
  "path": "../public/assets/game/player/misa-front.png"
39528
40059
  },
39529
- "/assets/game/player/misa-left-walk.001.png": {
39530
- "type": "image/png",
39531
- "etag": "\"13f-kvFuR3pXnfcL/C63pYoL58iuFOk\"",
39532
- "mtime": "2026-08-25T12:20:54.516Z",
39533
- "size": 319,
39534
- "path": "../public/assets/game/player/misa-left-walk.001.png"
39535
- },
39536
40060
  "/assets/game/player/misa-left-walk.002.png": {
39537
40061
  "type": "image/png",
39538
40062
  "etag": "\"13e-ZO/OghsjeAi+tGQq5r7slwZn0zg\"",
@@ -39547,6 +40071,13 @@ const assets = {
39547
40071
  "size": 319,
39548
40072
  "path": "../public/assets/game/player/misa-left-walk.000.png"
39549
40073
  },
40074
+ "/assets/game/player/misa-left-walk.001.png": {
40075
+ "type": "image/png",
40076
+ "etag": "\"13f-kvFuR3pXnfcL/C63pYoL58iuFOk\"",
40077
+ "mtime": "2026-08-25T12:20:54.516Z",
40078
+ "size": 319,
40079
+ "path": "../public/assets/game/player/misa-left-walk.001.png"
40080
+ },
39550
40081
  "/assets/game/player/misa-left-walk.003.png": {
39551
40082
  "type": "image/png",
39552
40083
  "etag": "\"13f-1/+5Oh6upY4V8FkyK62tdXeFc7o\"",
@@ -39596,40 +40127,12 @@ const assets = {
39596
40127
  "size": 302,
39597
40128
  "path": "../public/assets/game/player/misa-right.png"
39598
40129
  },
39599
- "/assets/game/npc/boltnu-sheet.png": {
39600
- "type": "image/png",
39601
- "etag": "\"a14-8xg90l10OuRoiEEgFXx9PTGJ9rA\"",
39602
- "mtime": "2026-08-25T12:20:54.513Z",
39603
- "size": 2580,
39604
- "path": "../public/assets/game/npc/boltnu-sheet.png"
39605
- },
39606
- "/assets/game/npc/fluttaflap-sheet.png": {
39607
- "type": "image/png",
39608
- "etag": "\"f65-ivBz79RSNtXu3px7cWEzCwMXdkg\"",
39609
- "mtime": "2026-08-25T12:20:54.513Z",
39610
- "size": 3941,
39611
- "path": "../public/assets/game/npc/fluttaflap-sheet.png"
39612
- },
39613
- "/assets/game/npc/rockitten-sheet.png": {
39614
- "type": "image/png",
39615
- "etag": "\"786-IY4LCl37+SB6pnPynapoUxsxvOM\"",
39616
- "mtime": "2026-08-25T12:20:54.513Z",
39617
- "size": 1926,
39618
- "path": "../public/assets/game/npc/rockitten-sheet.png"
39619
- },
39620
- "/_nuxt/builds/meta/291ef3e6-fa6a-4dee-8f46-05da1aeab815.json": {
40130
+ "/_nuxt/builds/meta/a66fdef7-dcfd-453b-b1f6-543c7dfd98d5.json": {
39621
40131
  "type": "application/json",
39622
- "etag": "\"58-Qx/6fQJnTk/9IGH7eDiJw3PsbL0\"",
39623
- "mtime": "2026-09-11T08:35:29.461Z",
40132
+ "etag": "\"58-QuM6hqsTD8xmSILeeMXx6uTHY5A\"",
40133
+ "mtime": "2026-09-12T03:59:50.786Z",
39624
40134
  "size": 88,
39625
- "path": "../public/_nuxt/builds/meta/291ef3e6-fa6a-4dee-8f46-05da1aeab815.json"
39626
- },
39627
- "/assets/game/npc/tux-sheet.png": {
39628
- "type": "image/png",
39629
- "etag": "\"912-kf4+Q7EukO60VT6vlziy5RrzuUo\"",
39630
- "mtime": "2026-08-25T12:20:54.513Z",
39631
- "size": 2322,
39632
- "path": "../public/assets/game/npc/tux-sheet.png"
40135
+ "path": "../public/_nuxt/builds/meta/a66fdef7-dcfd-453b-b1f6-543c7dfd98d5.json"
39633
40136
  },
39634
40137
  "/assets/game/character/yangyang-walk.glb": {
39635
40138
  "type": "model/gltf-binary",
@@ -39926,21 +40429,32 @@ const _lazy_OK7iTh = () => import('../routes/api/workshop/agents/_id_.patch.mjs'
39926
40429
  const _lazy_Ib89Gv = () => import('../routes/api/workshop/index.get.mjs');
39927
40430
  const _lazy_jGcf0C = () => import('../routes/api/workshop/index.post.mjs');
39928
40431
  const _lazy_fESV0_ = () => import('../routes/api/workshop/agents/subscribe.post.mjs');
40432
+ const _lazy_nO_s5_ = () => import('../routes/api/workshop/aml/datasets/_id_.delete.mjs');
39929
40433
  const _lazy_tV0TAv = () => import('../routes/api/workshop/aml/datasets/_id_.get.mjs');
40434
+ const _lazy_L8VYQ_ = () => import('../routes/api/workshop/aml/datasets/_id_.patch.mjs');
39930
40435
  const _lazy_X7krQs = () => import('../routes/api/workshop/aml/datasets/_id/preview.get.mjs');
39931
40436
  const _lazy_3J0Xcs = () => import('../routes/api/workshop/aml/index.get.mjs');
39932
40437
  const _lazy_fxhSeB = () => import('../routes/api/workshop/aml/index.post.mjs');
39933
- const _lazy_OhQ1TJ = () => import('../routes/api/workshop/aml/index2.get.mjs');
40438
+ const _lazy_KqY6Ut = () => import('../routes/api/workshop/aml/index2.get.mjs');
40439
+ const _lazy_DuVwH7 = () => import('../routes/api/workshop/aml/entities/prune.post.mjs');
40440
+ const _lazy_sTjAeo = () => import('../routes/api/workshop/aml/index3.get.mjs');
40441
+ const _lazy_qhdgDb = () => import('../routes/api/workshop/aml/env/recheck.post.mjs');
40442
+ const _lazy_p9v5He = () => import('../routes/api/workshop/aml/env/uv.post.mjs');
40443
+ const _lazy_pPdn3t = () => import('../routes/api/workshop/aml/env/venv.post.mjs');
40444
+ const _lazy_OhQ1TJ = () => import('../routes/api/workshop/aml/index4.get.mjs');
39934
40445
  const _lazy_fEDefo = () => import('../routes/api/workshop/index2.get.mjs');
40446
+ const _lazy_w4VKE0 = () => import('../routes/api/workshop/aml/jobs/_id_.delete.mjs');
39935
40447
  const _lazy_wnp00i = () => import('../routes/api/workshop/aml/jobs/_id_.get.mjs');
39936
40448
  const _lazy_i_nokq = () => import('../routes/api/workshop/aml/jobs/_id/cancel.post.mjs');
39937
40449
  const _lazy_sKQYLY = () => import('../routes/api/workshop/aml/jobs/_id/logs.get.mjs');
39938
40450
  const _lazy_dJdojE = () => import('../routes/api/workshop/aml/jobs/_id/retry.post.mjs');
39939
- const _lazy_giSCA5 = () => import('../routes/api/workshop/aml/index3.get.mjs');
40451
+ const _lazy_giSCA5 = () => import('../routes/api/workshop/aml/index5.get.mjs');
39940
40452
  const _lazy_FDpvz_ = () => import('../routes/api/workshop/aml/index2.post.mjs');
40453
+ const _lazy_MCHjBO = () => import('../routes/api/workshop/aml/models/_id_.delete.mjs');
40454
+ const _lazy_FFXs4U = () => import('../routes/api/workshop/aml/models/_id_.patch.mjs');
39941
40455
  const _lazy_gykCLA = () => import('../routes/api/workshop/aml/models/_id/predict.post.mjs');
39942
40456
  const _lazy_iC7aQp = () => import('../routes/api/workshop/aml/models/_id/promote.post.mjs');
39943
- const _lazy_rROxR2 = () => import('../routes/api/workshop/aml/index4.get.mjs');
40457
+ const _lazy_rROxR2 = () => import('../routes/api/workshop/aml/index6.get.mjs');
39944
40458
  const _lazy_oKzzOL = () => import('../routes/api/workshop/approvals/_id/decide.post.mjs');
39945
40459
  const _lazy_N57pWC = () => import('../routes/api/workshop/index3.get.mjs');
39946
40460
  const _lazy_N7zTgE = () => import('../routes/api/workshop/assets/character/_id_.delete.mjs');
@@ -40162,18 +40676,29 @@ const handlers = [
40162
40676
  { route: '/api/workshop/agents', handler: _lazy_Ib89Gv, lazy: true, middleware: false, method: "get" },
40163
40677
  { route: '/api/workshop/agents', handler: _lazy_jGcf0C, lazy: true, middleware: false, method: "post" },
40164
40678
  { route: '/api/workshop/agents/subscribe', handler: _lazy_fESV0_, lazy: true, middleware: false, method: "post" },
40679
+ { route: '/api/workshop/aml/datasets/:id', handler: _lazy_nO_s5_, lazy: true, middleware: false, method: "delete" },
40165
40680
  { route: '/api/workshop/aml/datasets/:id', handler: _lazy_tV0TAv, lazy: true, middleware: false, method: "get" },
40681
+ { route: '/api/workshop/aml/datasets/:id', handler: _lazy_L8VYQ_, lazy: true, middleware: false, method: "patch" },
40166
40682
  { route: '/api/workshop/aml/datasets/:id/preview', handler: _lazy_X7krQs, lazy: true, middleware: false, method: "get" },
40167
40683
  { route: '/api/workshop/aml/datasets', handler: _lazy_3J0Xcs, lazy: true, middleware: false, method: "get" },
40168
40684
  { route: '/api/workshop/aml/datasets', handler: _lazy_fxhSeB, lazy: true, middleware: false, method: "post" },
40685
+ { route: '/api/workshop/aml/entities', handler: _lazy_KqY6Ut, lazy: true, middleware: false, method: "get" },
40686
+ { route: '/api/workshop/aml/entities/prune', handler: _lazy_DuVwH7, lazy: true, middleware: false, method: "post" },
40687
+ { route: '/api/workshop/aml/env', handler: _lazy_sTjAeo, lazy: true, middleware: false, method: "get" },
40688
+ { route: '/api/workshop/aml/env/recheck', handler: _lazy_qhdgDb, lazy: true, middleware: false, method: "post" },
40689
+ { route: '/api/workshop/aml/env/uv', handler: _lazy_p9v5He, lazy: true, middleware: false, method: "post" },
40690
+ { route: '/api/workshop/aml/env/venv', handler: _lazy_pPdn3t, lazy: true, middleware: false, method: "post" },
40169
40691
  { route: '/api/workshop/aml/experiments', handler: _lazy_OhQ1TJ, lazy: true, middleware: false, method: "get" },
40170
40692
  { route: '/api/workshop/aml', handler: _lazy_fEDefo, lazy: true, middleware: false, method: "get" },
40693
+ { route: '/api/workshop/aml/jobs/:id', handler: _lazy_w4VKE0, lazy: true, middleware: false, method: "delete" },
40171
40694
  { route: '/api/workshop/aml/jobs/:id', handler: _lazy_wnp00i, lazy: true, middleware: false, method: "get" },
40172
40695
  { route: '/api/workshop/aml/jobs/:id/cancel', handler: _lazy_i_nokq, lazy: true, middleware: false, method: "post" },
40173
40696
  { route: '/api/workshop/aml/jobs/:id/logs', handler: _lazy_sKQYLY, lazy: true, middleware: false, method: "get" },
40174
40697
  { route: '/api/workshop/aml/jobs/:id/retry', handler: _lazy_dJdojE, lazy: true, middleware: false, method: "post" },
40175
40698
  { route: '/api/workshop/aml/jobs', handler: _lazy_giSCA5, lazy: true, middleware: false, method: "get" },
40176
40699
  { route: '/api/workshop/aml/jobs', handler: _lazy_FDpvz_, lazy: true, middleware: false, method: "post" },
40700
+ { route: '/api/workshop/aml/models/:id', handler: _lazy_MCHjBO, lazy: true, middleware: false, method: "delete" },
40701
+ { route: '/api/workshop/aml/models/:id', handler: _lazy_FFXs4U, lazy: true, middleware: false, method: "patch" },
40177
40702
  { route: '/api/workshop/aml/models/:id/predict', handler: _lazy_gykCLA, lazy: true, middleware: false, method: "post" },
40178
40703
  { route: '/api/workshop/aml/models/:id/promote', handler: _lazy_iC7aQp, lazy: true, middleware: false, method: "post" },
40179
40704
  { route: '/api/workshop/aml/models', handler: _lazy_rROxR2, lazy: true, middleware: false, method: "get" },
@@ -40735,5 +41260,5 @@ function setupGracefulShutdown(listener, nitroApp) {
40735
41260
  });
40736
41261
  }
40737
41262
 
40738
- export { getDcwController as $, getSystemConfigService as A, defineWebSocketHandler as B, respondTerminalUi as C, abortTerminal as D, sendTerminalInput as E, resolveUserByToken as F, findLiveTerminalPidByAgent as G, terminalSessionSnapshot as H, subscribeTerminal as I, listHarnessProcesses as J, AppError as K, createEventStream as L, userService as M, readValidatedBody as N, zValidator as O, getValidatedQuery as P, extractBearerToken as Q, userRepository as R, getRequestHeader as S, setResponseStatus as T, parseJson as U, getToolApprovals as V, audit as W, getAgentNodeBindingRepo as X, ErrorCodes as Y, lineMode as Z, getDaqController as _, trapUnhandledNodeErrors as a, relative as a$, visibleLineIds as a0, getHeader as a1, getAmlRuntime as a2, requireLineMode as a3, loadManifest as a4, filterByLine as a5, parseDatasetSpec as a6, buildDataset as a7, recordOps as a8, runtimeStatus as a9, getDaqQueue as aA, listDaqTemplates as aB, daqInfraStatus as aC, daqInfraConfig as aD, getDaqTemplateRegistry as aE, normalizeDriverKind as aF, bindDcwBroadcast as aG, gateDangerous as aH, getRecipeRollBackManager as aI, isPrivilegedRole as aJ, listDcwTemplates as aK, emitLineLifecycle as aL, getDcwTemplateRegistry as aM, checkAllHarnessAvailability as aN, harnessMetas as aO, StdioJsonRpcClient as aP, spawnLineProcess as aQ, getHitlRegistry as aR, notifyGrantsChanged as aS, setPluginEnabled as aT, reloadPluginHost as aU, publishSceneLayoutEvent as aV, encodePath as aW, buildAssetsURL as aX, publicAssetsURL as aY, defineRenderHandler as aZ, getRouteRules as a_, cancelJob as aa, jobLogsTail as ab, retryJob as ac, submitJob as ad, predictWithModel as ae, verifyModelArtifact as af, transitionModel as ag, loadJsonFile as ah, saveJsonFileAtomic as ai, ensureDataDir as aj, readMultipartFormData as ak, ensureLeadSchedulerLoop as al, getChannelPluginsRepo as am, notifyToolChange as an, listTerminalSessions as ao, broadcastSceneEvent as ap, bindDaqHostPorts as aq, bindDaqBroadcast as ar, bumpTaggedSamples as as, getDcwLineRepo as at, getDcwRecipeRepo as au, getAllActiveLineRuns as av, getActiveLineRun as aw, deviceScenePayload as ax, daqRuntimeSettings as ay, tsdbReady as az, useNitroApp as b, joinURL as b0, getResponseStatusText as b1, getResponseStatus as b2, createHooks as b3, sanitizeStatusCode as b4, klona as b5, isEqual as b6, setCookie as b7, getCookie as b8, deleteCookie as b9, $fetch as ba, baseURL as bb, defu as bc, getRequestProtocol as bd, appendResponseHeader as be, DAQ_TEMPLATES as bf, DCW_TEMPLATES as bg, daqKeyFromRef as bh, DAQ_DRIVERS as bi, DCW_DRIVERS as bj, DAQ_TEMPLATE_ICONS as bk, DCW_LINE_COLORS as bl, host as bm, ws$1 as bn, channelPlugins_repo as bo, defineApiHandler as c, destr as d, useServerConfig as e, getDeviceTwinRepo as f, getWorkshopManager as g, defineEventHandler as h, readRawBody as i, getRequestURL as j, getRequestHeaders as k, getOps as l, setResponseHeader as m, createError$1 as n, readBody as o, getPluginHost as p, getRouterParam as q, randomUUID as r, setupGracefulShutdown as s, toNodeListener as t, useRuntimeConfig as u, readClientScript as v, setHeader as w, pluginI18nBundle as x, pluginManifest as y, getQuery as z };
41263
+ export { getDcwController as $, getSystemConfigService as A, defineWebSocketHandler as B, respondTerminalUi as C, abortTerminal as D, sendTerminalInput as E, resolveUserByToken as F, findLiveTerminalPidByAgent as G, terminalSessionSnapshot as H, subscribeTerminal as I, listHarnessProcesses as J, AppError as K, createEventStream as L, userService as M, readValidatedBody as N, zValidator as O, getValidatedQuery as P, extractBearerToken as Q, userRepository as R, getRequestHeader as S, setResponseStatus as T, parseJson as U, getToolApprovals as V, audit as W, getAgentNodeBindingRepo as X, ErrorCodes as Y, lineMode as Z, getDaqController as _, trapUnhandledNodeErrors as a, harnessMetas as a$, visibleLineIds as a0, getHeader as a1, getAmlRuntime as a2, requireLineMode as a3, recordOps as a4, isInsideAmlRoot as a5, createLogger as a6, loadManifest as a7, filterByLine as a8, parseDatasetSpec as a9, notifyToolChange as aA, listTerminalSessions as aB, broadcastSceneEvent as aC, bindDaqHostPorts as aD, bindDaqBroadcast as aE, bumpTaggedSamples as aF, getDcwLineRepo as aG, getDcwRecipeRepo as aH, getAllActiveLineRuns as aI, getActiveLineRun as aJ, deviceScenePayload as aK, daqRuntimeSettings as aL, tsdbReady as aM, getDaqQueue as aN, listDaqTemplates as aO, daqInfraStatus as aP, daqInfraConfig as aQ, getDaqTemplateRegistry as aR, normalizeDriverKind as aS, bindDcwBroadcast as aT, gateDangerous as aU, getRecipeRollBackManager as aV, isPrivilegedRole as aW, listDcwTemplates as aX, emitLineLifecycle as aY, getDcwTemplateRegistry as aZ, checkAllHarnessAvailability as a_, buildDataset as aa, probeUv as ab, probePython as ac, isVenvReady as ad, venvDir as ae, requirementsHash as af, venvPythonPath as ag, amlRootSourceLabel as ah, resetProbeCache as ai, installUv as aj, ensureVenv as ak, amlSettings as al, runtimeStatus as am, cancelJob as an, jobLogsTail as ao, retryJob as ap, submitJob as aq, predictWithModel as ar, verifyModelArtifact as as, transitionModel as at, loadJsonFile as au, saveJsonFileAtomic as av, ensureDataDir as aw, readMultipartFormData as ax, ensureLeadSchedulerLoop as ay, getChannelPluginsRepo as az, useNitroApp as b, StdioJsonRpcClient as b0, spawnLineProcess as b1, getHitlRegistry as b2, notifyGrantsChanged as b3, setPluginEnabled as b4, reloadPluginHost as b5, publishSceneLayoutEvent as b6, encodePath as b7, buildAssetsURL as b8, publicAssetsURL as b9, ws$1 as bA, channelPlugins_repo as bB, defineRenderHandler as ba, getRouteRules as bb, relative as bc, joinURL as bd, getResponseStatusText as be, getResponseStatus as bf, createHooks as bg, sanitizeStatusCode as bh, klona as bi, isEqual as bj, setCookie as bk, getCookie as bl, deleteCookie as bm, $fetch as bn, baseURL as bo, defu as bp, getRequestProtocol as bq, appendResponseHeader as br, DAQ_TEMPLATES as bs, DCW_TEMPLATES as bt, daqKeyFromRef as bu, DAQ_DRIVERS as bv, DCW_DRIVERS as bw, DAQ_TEMPLATE_ICONS as bx, DCW_LINE_COLORS as by, host as bz, defineApiHandler as c, destr as d, useServerConfig as e, getDeviceTwinRepo as f, getWorkshopManager as g, defineEventHandler as h, readRawBody as i, getRequestURL as j, getRequestHeaders as k, getOps as l, setResponseHeader as m, createError$1 as n, readBody as o, getPluginHost as p, getRouterParam as q, randomUUID as r, setupGracefulShutdown as s, toNodeListener as t, useRuntimeConfig as u, readClientScript as v, setHeader as w, pluginI18nBundle as x, pluginManifest as y, getQuery as z };
40739
41264
  //# sourceMappingURL=nitro.mjs.map