agentworkshop 0.7.34 → 0.7.38

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 (985) 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/44b66249-54d0-4c8a-9057-9755a32329e2.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 +1657 -1162
  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-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.continue.json +1 -0
  345. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.json +1 -0
  346. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/054bb4bc4e4217a2ab0b0c6b663747214a9af464f5568ea60e784704e340bb0f.source +153 -0
  347. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/0554197c3d2bac203a1f5c48a5d52495d1336db1bd7aa4f4c19875810363e684.source +153 -0
  348. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/05c203d12a954fffba942e1d626e3f5fec05b18a5aef2bac003b7884a4b77406.source +431 -0
  349. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/145a6e6ba811af35aed31e0cc3211f53706a14980fa069ee9e3c1591139f96f0.source +180 -0
  350. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/1ae0fb281f97899c025e368ca73f41349b01fb5f85b19e08d7ebccff49095ed5.source +112 -0
  351. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/20ee9967aa0541c516db7575bdd4a1a745939bc7016bd10d7635903113edb8ec.source +227 -0
  352. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/233751843aeba9d4c5263f275b8102de00443c06f286918cbd23e0b6729e01aa.source +131 -0
  353. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/263c2e05b425e5c322e60c6475279f963bab3a873eb521b21df7fec935a46597.source +160 -0
  354. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/2ac5eaac28eaaee2178c4b32014df8e732f9dd432a285a872f5b7f31c1395fa4.source +157 -0
  355. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/33a0db0d2d95d2c11d0720090458e5fba1425376f5ceb5b422d1d3471be3226b.source +348 -0
  356. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/359e474ae83db35e4615d3728de6bf694b64d4dce9b536730a3b6518f9c0494a.source +296 -0
  357. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/37a4c3c31c4b70f6b719c53d1e9c4fcba603f31adfdd11bb6ef9f0d094923c56.source +285 -0
  358. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/461feca1c14a695eb8b0f17a6f95fe97eeceabc0510faaea4ba6d25bde147d8d.source +217 -0
  359. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/4cfadbda8591f29d5e1e230dc000e701b756e850441b3900fb596a4d2f6e98c2.source +301 -0
  360. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/50ca2810cf0b248c96948994c0c404531bbad6e553166b6816b3b03bfa0f75d2.source +151 -0
  361. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/52d9e8cb591a9ae86e238c3620a610cd386717bee222c0f37b25b2ac7e523dc4.source +135 -0
  362. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/6c87daafa4c006560a954636a97333f6123153c9d34d96203f7ee3a14e556357.source +156 -0
  363. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/77bc47854b577900621cacf1697f81fa2bc005af129d37614a97a3441c08f99f.source +72 -0
  364. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/7bbb789d3a527817118cf8399ed1861d6a962ade10878fd07223435d333a7089.source +469 -0
  365. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/86b7c1daafc8b60ba9982dde5bf1bcc74265709483c176e71f23ec6fc267451f.source +259 -0
  366. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/8df66d62bd41984d0970e8236882080c5085ac937d07a29779463d6a03b37c76.source +97 -0
  367. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/9962f2d1b3a85137bd40cc835725600b39f89ee02a27c06b2e0402e1eafde115.source +277 -0
  368. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a1090ea066b792cb201739f4994e37bf7c12f52e805239a1eab87f18a537f266.source +171 -0
  369. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a5241091650134d0919897e086a606a3846c8b2b54f8b4c84a8696c145ac3e9e.source +425 -0
  370. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/af19fa4c6e34d5540028be4b17600161283af3a2a2dfc61a3fdc0834436a0c14.source +99 -0
  371. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3713d78e2b2f93905ff6be8d58a8d0a2f42dea322eb67c987fda22ff6a084d5.source +325 -0
  372. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3849943c3aff102d1af815631fc843a2a52c17646a4b04696ece323e483bbec.source +332 -0
  373. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/bac735a3803a6650b7f1eb8f587e6dc5c68ea055000c3c99a11789438b78e837.source +43 -0
  374. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d32c24d61eb8b33c73e5a8fc7e4dc7ef437aed238ee4371c2b00617e6104090a.source +154 -0
  375. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d5170dc9a9879fda04fdf91d8a110d4efb6787ee38dda596d4da899883d36a72.source +531 -0
  376. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/dc59bcd7bb397be63ba2f2c3fec23f3782dcb17d2d75a9981eeced761f33eb32.source +439 -0
  377. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/eb5ff8cf66b92aec7bf6726781d8df74faa2b030c3aaac17d6b00c1fc04c9b32.source +323 -0
  378. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f10615a6fae18436e70d1201b2d44fdae3174a3aa7bb4db97dea1b3ed291d721.source +433 -0
  379. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f36d3e271668bc1260c2823542d22dbf1d0f7041ff16b1ac175bce2256e582ca.source +280 -0
  380. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f94449380af09f31ac352152007146a75cc80bae8d6411ffe57b2c56f933b0ff.source +117 -0
  381. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/fe4dfd81178fd6b648335f6405d9ede71319aebde796008e50db21f8adf44c99.source +160 -0
  382. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/ffb4e3aa548cfdadabaa44ab599f9b6a3ca6288176a2cc7a4b2fc2a12b5fb848.source +101 -0
  383. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +14 -0
  384. package/scripts/_audit/aml-layout-diag.mjs +83 -0
  385. package/scripts/_audit/bump-version.mjs +51 -0
  386. package/scripts/_audit/channel-inspect.mjs +49 -0
  387. package/scripts/_audit/cleanup-apply.mjs +89 -0
  388. package/scripts/_audit/cleanup-plan.mjs +82 -0
  389. package/scripts/_audit/contrast-check.mjs +43 -0
  390. package/scripts/_audit/dcw-unrecorded-write.ts +1 -1
  391. package/scripts/_audit/design-shots.mjs +145 -0
  392. package/scripts/_audit/docs-font-probe.mjs +68 -0
  393. package/scripts/_audit/docs-probe.mjs +107 -0
  394. package/scripts/_audit/docs-shots.mjs +171 -0
  395. package/scripts/_audit/docs-v3-verify.mjs +255 -0
  396. package/scripts/_audit/docs-vue-lint.mjs +81 -0
  397. package/scripts/_audit/docs-vue-lint2.mjs +91 -0
  398. package/scripts/_audit/exp-cost-scaling.mjs +4 -1
  399. package/scripts/_audit/exp-envelope-and-png.mjs +2 -1
  400. package/scripts/_audit/exp-sweep-fairness.mjs +4 -2
  401. package/scripts/_audit/fix-settings-count.mjs +57 -0
  402. package/scripts/_audit/glass-verify.mjs +155 -0
  403. package/scripts/_audit/hydration-diff.mjs +104 -0
  404. package/scripts/_audit/hydration-head.mjs +36 -0
  405. package/scripts/_audit/hydration-probe.mjs +59 -0
  406. package/scripts/_audit/lead-matrix-test.mjs +172 -0
  407. package/scripts/_audit/plc-agent-task.mjs +74 -0
  408. package/scripts/_audit/plc-clean-scenario.mjs +434 -0
  409. package/scripts/_audit/plc-clean-shots.mjs +161 -0
  410. package/scripts/_audit/plc-fc10-probe.mjs +30 -0
  411. package/scripts/_audit/probe-binding.mjs +114 -103
  412. package/scripts/_audit/review-fix-verify.mjs +158 -0
  413. package/scripts/_audit/seed-demo.mjs +165 -0
  414. package/scripts/_audit/town-focus-shot.mjs +129 -0
  415. package/scripts/_audit/town-reposition.mjs +85 -0
  416. package/scripts/_audit/ts-resolve-hook.mjs +57 -22
  417. package/scripts/_audit/verify-cleanup.mjs +67 -0
  418. package/scripts/_audit/verify-release-pack.mjs +82 -0
  419. package/scripts/_audit/watchdog-recovery-test.mjs +127 -0
  420. package/scripts/_dbg-audit-all-pages.mjs +43 -43
  421. package/scripts/_dbg-configroot-audit.mjs +84 -84
  422. package/scripts/_dbg-daq-intervals-func.mjs +94 -94
  423. package/scripts/_dbg-daq-rowstyle-verify.mjs +112 -112
  424. package/scripts/_dbg-groups-ui-verify.mjs +122 -122
  425. package/scripts/_dbg-harness-e2e.mjs +92 -92
  426. package/scripts/_dbg-harness-ui-e2e.py +97 -97
  427. package/scripts/_dbg-hitl-timeout-e2e.mjs +93 -93
  428. package/scripts/_dbg-multiharness-live-e2e.mjs +254 -254
  429. package/scripts/_dbg-opslog-agent-e2e.mjs +194 -194
  430. package/scripts/_dbg-opt-team-e2e.mjs +133 -133
  431. package/scripts/_dbg-recipe-e2e.mjs +176 -176
  432. package/scripts/_dbg-recipe-stale-e2e.mjs +135 -135
  433. package/scripts/_dbg-render-perf.mjs +142 -142
  434. package/scripts/_dbg-render-regression.mjs +130 -130
  435. package/scripts/_dbg-town-smoke.mjs +54 -54
  436. package/scripts/aw-start-smoke.mjs +27 -8
  437. package/scripts/check-docs-sync.mjs +367 -0
  438. package/scripts/e2e-full-closedloop.mjs +36 -18
  439. package/scripts/production-closed-loop-e2e.mjs +300 -303
  440. package/scripts/test-cli-exit.mjs +129 -21
  441. package/scripts/test-daq-frame-race.mjs +144 -96
  442. package/scripts/test-events-index.mjs +176 -0
  443. package/scripts/test-lru.mjs +34 -11
  444. package/scripts/test-memory-month-query.mjs +11 -3
  445. package/scripts/test-plugin-hardening.mjs +39 -2
  446. package/scripts/test-plugin-lifecycle.mjs +173 -0
  447. package/scripts/test-rollback-index.mjs +76 -18
  448. package/scripts/test-sdk-surface.mjs +6 -3
  449. package/sdk/client.mjs +16 -7
  450. package/sdk/context.mjs +21 -9
  451. package/sdk/examples/line-sentinel/client.mjs +13 -6
  452. package/sdk/examples/line-sentinel/index.mjs +5 -2
  453. package/sdk/examples/ops-notifier/client.mjs +3 -1
  454. package/sdk/examples/sample-insight/client.mjs +4 -2
  455. package/sdk/index.d.mts +133 -16
  456. package/sdk/index.mjs +3 -2
  457. package/sdk/lifecycle.mjs +8 -3
  458. package/server/api/workshop/agent-tools/bindings/index.post.ts +22 -7
  459. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -0
  460. package/server/api/workshop/aml/datasets/[id].get.ts +31 -9
  461. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -0
  462. package/server/api/workshop/aml/entities/index.get.ts +13 -0
  463. package/server/api/workshop/aml/entities/prune.post.ts +28 -0
  464. package/server/api/workshop/aml/env/index.get.ts +13 -0
  465. package/server/api/workshop/aml/env/recheck.post.ts +14 -0
  466. package/server/api/workshop/aml/env/uv.post.ts +21 -0
  467. package/server/api/workshop/aml/env/venv.post.ts +24 -0
  468. package/server/api/workshop/aml/index.get.ts +14 -1
  469. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -0
  470. package/server/api/workshop/aml/models/[id].delete.ts +35 -0
  471. package/server/api/workshop/aml/models/[id].patch.ts +30 -0
  472. package/server/plugins/dev-stability-guard.ts +40 -63
  473. package/server/services/workshop/agents/agent-interface.ts +3 -0
  474. package/server/services/workshop/agents/codex-agent.ts +4 -7
  475. package/server/services/workshop/agents/dsh-agent.ts +4 -7
  476. package/server/services/workshop/agents/opencode-agent.ts +5 -7
  477. package/server/services/workshop/aml/aml.repo.ts +18 -0
  478. package/server/services/workshop/aml/dataset-builder.ts +4 -0
  479. package/server/services/workshop/aml/entity.ts +365 -0
  480. package/server/services/workshop/aml/env-manager.ts +242 -0
  481. package/server/services/workshop/aml/job-orchestrator.ts +4 -15
  482. package/server/services/workshop/aml/model-registry.ts +6 -0
  483. package/server/services/workshop/aml/python-runtime.ts +396 -62
  484. package/server/services/workshop/aml/runtime.ts +95 -4
  485. package/server/services/workshop/daq/bus/mqtt.adapter.ts +3 -1
  486. package/server/services/workshop/daq/daq-controller.ts +95 -47
  487. package/server/services/workshop/daq/daq-node.repo.ts +0 -10
  488. package/server/services/workshop/daq/daq-runtime.ts +0 -5
  489. package/server/services/workshop/json-store.mjs +35 -2
  490. package/server/services/workshop/plugins/host.mjs +14 -5
  491. package/server/services/workshop/runtime/manager.ts +28 -1
  492. package/server/services/workshop/runtime/scheduler-loop.ts +10 -1
  493. package/server/services/workshop/settings.ts +2 -0
  494. package/server/utils/stability-severity.ts +66 -0
  495. package/shared/config/home.mjs +58 -0
  496. package/shared/config/schema.json +2 -1
  497. package/shared/lru.mjs +4 -1
  498. package/.output/public/_nuxt/-6OnbLFb.js +0 -1
  499. package/.output/public/_nuxt/-nb2uqVg.js +0 -1
  500. package/.output/public/_nuxt/4bHdIqEg.js +0 -18
  501. package/.output/public/_nuxt/6PZPfFcO.js +0 -17
  502. package/.output/public/_nuxt/BBBtwOpo.js +0 -9
  503. package/.output/public/_nuxt/BBwMH_hG.js +0 -7
  504. package/.output/public/_nuxt/BDUjyaF4.js +0 -42
  505. package/.output/public/_nuxt/BNXfwXpE.js +0 -1
  506. package/.output/public/_nuxt/BN_PdN3J.js +0 -24
  507. package/.output/public/_nuxt/BSSUlJnx2.js +0 -1
  508. package/.output/public/_nuxt/BWSE6hR6.js +0 -1
  509. package/.output/public/_nuxt/BZGNTgTQ2.js +0 -1
  510. package/.output/public/_nuxt/BZv4RFYN.js +0 -1
  511. package/.output/public/_nuxt/BcmbLh2z2.js +0 -1
  512. package/.output/public/_nuxt/BfGc7TJp.js +0 -1
  513. package/.output/public/_nuxt/BgTB6h_q.js +0 -2
  514. package/.output/public/_nuxt/BkLJA9J5.js +0 -1
  515. package/.output/public/_nuxt/Bp5luxkg2.js +0 -1
  516. package/.output/public/_nuxt/BuCHayqN.js +0 -1
  517. package/.output/public/_nuxt/BuvcLKh1.js +0 -19
  518. package/.output/public/_nuxt/C3tCneTM.js +0 -1
  519. package/.output/public/_nuxt/C77oC8yC2.js +0 -7
  520. package/.output/public/_nuxt/C9f8QMp12.js +0 -1
  521. package/.output/public/_nuxt/CKfhtOt7.js +0 -13
  522. package/.output/public/_nuxt/CQvmN-Mi.js +0 -1
  523. package/.output/public/_nuxt/CUDrOuW7.js +0 -1
  524. package/.output/public/_nuxt/CZcC-gpk.js +0 -1
  525. package/.output/public/_nuxt/CbzsPO5H.js +0 -1
  526. package/.output/public/_nuxt/CdSOrh2c.js +0 -1
  527. package/.output/public/_nuxt/Cgx818r-.js +0 -1
  528. package/.output/public/_nuxt/Cjm7VogC.js +0 -1
  529. package/.output/public/_nuxt/Cm5mDxzH.js +0 -1
  530. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  531. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  532. package/.output/public/_nuxt/Cno6kYiO2.js +0 -1
  533. package/.output/public/_nuxt/Cp6z0RN7.js +0 -1
  534. package/.output/public/_nuxt/CwqIxJGj.js +0 -2
  535. package/.output/public/_nuxt/D-Ca4BGY.js +0 -70
  536. package/.output/public/_nuxt/D0fhp-Ga.js +0 -75
  537. package/.output/public/_nuxt/D1z7i2UP.js +0 -31
  538. package/.output/public/_nuxt/DIaTPH1M.js +0 -1
  539. package/.output/public/_nuxt/DTYBfjRY.js +0 -1
  540. package/.output/public/_nuxt/DXRZPxGs.js +0 -1
  541. package/.output/public/_nuxt/DZzGarBE2.js +0 -13
  542. package/.output/public/_nuxt/DaMCzQhv.js +0 -1
  543. package/.output/public/_nuxt/DoLasgPj2.js +0 -1
  544. package/.output/public/_nuxt/DpojD719.js +0 -1
  545. package/.output/public/_nuxt/DsVcWfyR.js +0 -1
  546. package/.output/public/_nuxt/DtBu71ev.js +0 -32
  547. package/.output/public/_nuxt/Dy-mxvXY2.js +0 -1
  548. package/.output/public/_nuxt/DzuC31-i.js +0 -2
  549. package/.output/public/_nuxt/FQri3dV3.js +0 -1
  550. package/.output/public/_nuxt/ORt9oDIy2.js +0 -1
  551. package/.output/public/_nuxt/TownView.CtskuMXS.css +0 -1
  552. package/.output/public/_nuxt/VLI2Zy4t.js +0 -5
  553. package/.output/public/_nuxt/_id_.MbzdFygI.css +0 -1
  554. package/.output/public/_nuxt/_id_.hRYo-EAB.css +0 -1
  555. package/.output/public/_nuxt/_wsId_.gXMEOYgX.css +0 -1
  556. package/.output/public/_nuxt/aml.WU_bh87J.css +0 -1
  557. package/.output/public/_nuxt/arUY5dyq2.js +0 -4
  558. package/.output/public/_nuxt/builds/meta/adc365b6-f636-4a2b-9527-79819c1e874b.json +0 -1
  559. package/.output/public/_nuxt/daq.Bb6l44-O.css +0 -1
  560. package/.output/public/_nuxt/dcw.rXH2fc2Z.css +0 -1
  561. package/.output/public/_nuxt/default.jNT73_hq.css +0 -1
  562. package/.output/public/_nuxt/ekuGmQ7R.js +0 -1
  563. package/.output/public/_nuxt/entry.jFrFAWuA.css +0 -1
  564. package/.output/public/_nuxt/logs.DMOM-iHe.css +0 -1
  565. package/.output/public/_nuxt/niDwBOZW.js +0 -3
  566. package/.output/public/_nuxt/pMoIO6rr.js +0 -14
  567. package/.output/public/_nuxt/pages.Cc8GX9T1.css +0 -1
  568. package/.output/public/_nuxt/plugins.wIPyfPn-.css +0 -1
  569. package/.output/public/_nuxt/rqZ-1SoP.js +0 -2
  570. package/.output/public/_nuxt/settings.BCm4NZIc.css +0 -1
  571. package/.output/public/_nuxt/town.C_DsNW0J.css +0 -1
  572. package/.output/public/_nuxt/users.DuAt_Zwf.css +0 -1
  573. package/.output/public/_nuxt/vJ4FPb-_.js +0 -1
  574. package/.output/public/_nuxt/workshop.BJg84pOK.css +0 -1
  575. package/.output/server/chunks/build/aml-uBNIppIf.mjs +0 -508
  576. package/.output/server/chunks/build/aml-uBNIppIf.mjs.map +0 -1
  577. package/.output/server/chunks/build/daq-BvihjQyW.mjs.map +0 -1
  578. package/.output/server/chunks/build/pages-C-6BRtv8.mjs.map +0 -1
  579. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -28
  580. package/scripts/_audit/.tmp/dcw-writes.json +0 -15650
  581. package/scripts/_audit/.tmp/dcws.json +0 -9033
  582. package/scripts/_audit/.tmp/pollution-backup/dcw-rollback.polluted.json +0 -470006
  583. package/scripts/_audit/.tmp/pollution-backup/dcws.polluted.json +0 -9085
  584. package/scripts/_audit/.tmp/probe-cwd.txt +0 -1
  585. package/scripts/_audit/awhome/commands/README.md +0 -3
  586. package/scripts/_audit/awhome/commands/hello.mjs +0 -12
  587. package/scripts/_audit/diag-cwd.ts +0 -20
  588. package/scripts/_audit/diag-cwd2.ts +0 -19
  589. package/scripts/_audit/hello.mjs +0 -12
  590. package/scripts/_audit/ndjson-partial-line-repro.mjs +0 -77
  591. package/scripts/_audit/opencode-await-ternary-repro.mjs +0 -20
  592. package/scripts/_audit/part-frag.txt +0 -84
  593. package/scripts/_audit/part-head.txt +0 -45
  594. package/scripts/_audit/probe-child.mjs +0 -17
  595. package/scripts/_audit/probe-envelope.mjs +0 -49
  596. package/scripts/_audit/probe-packlist.mjs +0 -67
  597. package/scripts/_audit/probe-routes.mjs +0 -47
  598. package/scripts/_audit/probe-routes2.mjs +0 -38
  599. package/scripts/_audit/probe.ts +0 -9
  600. package/scripts/_audit/probe2.ts +0 -6
  601. package/scripts/_audit/probe3.ts +0 -3
  602. package/scripts/_audit/probe4.ts +0 -3
  603. package/scripts/_audit/proj/.AgentWorkShop/commands/echoargs.mjs +0 -13
  604. package/scripts/_audit/proj/config.yml +0 -1
  605. package/scripts/_audit/run.mjs +0 -30
  606. package/scripts/_audit/tsconfig.probe.json +0 -24
  607. package/scripts/_audit/typecheck-out.txt +0 -466
  608. package/scripts/_daq-realtime-probe.mjs +0 -68
  609. package/scripts/_daq-warn-probe.mjs +0 -50
  610. package/scripts/_dbg-acc-1-setup.mjs +0 -57
  611. package/scripts/_dbg-acc-2-diag.mjs +0 -14
  612. package/scripts/_dbg-acc-2-intervals.mjs +0 -81
  613. package/scripts/_dbg-acc-3-daq.mjs +0 -48
  614. package/scripts/_dbg-acc-4-team.mjs +0 -92
  615. package/scripts/_dbg-acc-5-visual.mjs +0 -63
  616. package/scripts/_dbg-acc-5b-ws-town.mjs +0 -18
  617. package/scripts/_dbg-acc-5c-town.mjs +0 -12
  618. package/scripts/_dbg-acc-6-i18n.mjs +0 -19
  619. package/scripts/_dbg-agent-tools-audit.mjs +0 -154
  620. package/scripts/_dbg-agent-workflow-audit.mjs +0 -177
  621. package/scripts/_dbg-agents-dropdown-shot.py +0 -33
  622. package/scripts/_dbg-anim-verify.mjs +0 -81
  623. package/scripts/_dbg-app-shot.mjs +0 -48
  624. package/scripts/_dbg-autoframe.mjs +0 -103
  625. package/scripts/_dbg-availability-probe.ts +0 -11
  626. package/scripts/_dbg-beacon-final.mjs +0 -181
  627. package/scripts/_dbg-bind-bidi-e2e.mjs +0 -239
  628. package/scripts/_dbg-callout-near.mjs +0 -108
  629. package/scripts/_dbg-catalog-smoke.ts +0 -20
  630. package/scripts/_dbg-cf-line-shot.mjs +0 -18
  631. package/scripts/_dbg-chan-focus.mjs +0 -49
  632. package/scripts/_dbg-channel-plugin-ui.mjs +0 -94
  633. package/scripts/_dbg-cleanup.mjs +0 -31
  634. package/scripts/_dbg-closedloop-ui-shot.mjs +0 -61
  635. package/scripts/_dbg-codex-handshake.ts +0 -30
  636. package/scripts/_dbg-codex-probe.mjs +0 -58
  637. package/scripts/_dbg-codex-sandbox.ts +0 -58
  638. package/scripts/_dbg-codex-turn.ts +0 -65
  639. package/scripts/_dbg-collab-scenario-e2e.mjs +0 -185
  640. package/scripts/_dbg-config-smoke.ts +0 -28
  641. package/scripts/_dbg-console-audit.mjs +0 -61
  642. package/scripts/_dbg-console-probe.mjs +0 -23
  643. package/scripts/_dbg-context-inject-audit.mjs +0 -231
  644. package/scripts/_dbg-cpu-profile.mjs +0 -53
  645. package/scripts/_dbg-crash-recovery.mjs +0 -143
  646. package/scripts/_dbg-crop-shot.mjs +0 -16
  647. package/scripts/_dbg-cross-channel-e2e.mjs +0 -157
  648. package/scripts/_dbg-cross-team-visibility-e2e.mjs +0 -129
  649. package/scripts/_dbg-crush-probe.sh +0 -21
  650. package/scripts/_dbg-crush-spawn-probe.ts +0 -22
  651. package/scripts/_dbg-daq-acc-probe.mjs +0 -24
  652. package/scripts/_dbg-daq-attrib.mjs +0 -34
  653. package/scripts/_dbg-daq-bind-audit.mjs +0 -119
  654. package/scripts/_dbg-daq-cadence.mjs +0 -104
  655. package/scripts/_dbg-daq-debug.mjs +0 -22
  656. package/scripts/_dbg-daq-diag.mjs +0 -33
  657. package/scripts/_dbg-daq-e2e.mjs +0 -171
  658. package/scripts/_dbg-daq-film.mjs +0 -136
  659. package/scripts/_dbg-daq-filter-e2e.mjs +0 -109
  660. package/scripts/_dbg-daq-filter-e2e2.mjs +0 -62
  661. package/scripts/_dbg-daq-final-regression.mjs +0 -78
  662. package/scripts/_dbg-daq-frame-alarm.mjs +0 -49
  663. package/scripts/_dbg-daq-frame-ui.mjs +0 -62
  664. package/scripts/_dbg-daq-frame-ws.mjs +0 -72
  665. package/scripts/_dbg-daq-full-check.mjs +0 -179
  666. package/scripts/_dbg-daq-line-note-verify.mjs +0 -61
  667. package/scripts/_dbg-daq-linebanner-audit.mjs +0 -107
  668. package/scripts/_dbg-daq-pages-shot.mjs +0 -37
  669. package/scripts/_dbg-daq-perf.mjs +0 -61
  670. package/scripts/_dbg-daq-probe.mjs +0 -27
  671. package/scripts/_dbg-daq-recipe-e2e.mjs +0 -30
  672. package/scripts/_dbg-daq-redesign-shot.mjs +0 -88
  673. package/scripts/_dbg-daq-rows-probe.mjs +0 -26
  674. package/scripts/_dbg-daq-rowstate-e2e.mjs +0 -152
  675. package/scripts/_dbg-daq-rowstate-shot.mjs +0 -45
  676. package/scripts/_dbg-daq-rowstate-shot2.mjs +0 -38
  677. package/scripts/_dbg-daq-tpl.mjs +0 -144
  678. package/scripts/_dbg-dash-console-check.mjs +0 -49
  679. package/scripts/_dbg-dash-deep-probe.mjs +0 -61
  680. package/scripts/_dbg-dash-hitpoint.mjs +0 -44
  681. package/scripts/_dbg-dash-live-shot.mjs +0 -36
  682. package/scripts/_dbg-dash-shot.mjs +0 -21
  683. package/scripts/_dbg-dashboard-shot.mjs +0 -35
  684. package/scripts/_dbg-dcw-audit.mjs +0 -126
  685. package/scripts/_dbg-dcw-card-e2e.mjs +0 -108
  686. package/scripts/_dbg-dcw-channel-ui.mjs +0 -144
  687. package/scripts/_dbg-dcw-examples.mjs +0 -81
  688. package/scripts/_dbg-dcw-light-shot.mjs +0 -19
  689. package/scripts/_dbg-dcw-line-audit.mjs +0 -107
  690. package/scripts/_dbg-dcw-pause-tpl-audit.mjs +0 -161
  691. package/scripts/_dbg-dcw-pause-ui.mjs +0 -175
  692. package/scripts/_dbg-dcw-read-toolface.ts +0 -13
  693. package/scripts/_dbg-dcw-read-ui.mjs +0 -74
  694. package/scripts/_dbg-dcw-scene.mjs +0 -72
  695. package/scripts/_dbg-dcw-shot2.mjs +0 -14
  696. package/scripts/_dbg-dcw-twin-e2e.mjs +0 -192
  697. package/scripts/_dbg-diag-mock-loop.mjs +0 -89
  698. package/scripts/_dbg-diag-watch.mjs +0 -95
  699. package/scripts/_dbg-docs-site-shot.mjs +0 -32
  700. package/scripts/_dbg-dsh-probe.mjs +0 -31
  701. package/scripts/_dbg-dt-interact.mjs +0 -193
  702. package/scripts/_dbg-error-probe.mjs +0 -54
  703. package/scripts/_dbg-filter-light-verify.mjs +0 -54
  704. package/scripts/_dbg-final-acceptance-2.mjs +0 -72
  705. package/scripts/_dbg-final-acceptance.mjs +0 -192
  706. package/scripts/_dbg-final-agent-e2e.mjs +0 -151
  707. package/scripts/_dbg-final-features.mjs +0 -155
  708. package/scripts/_dbg-final-fixups.mjs +0 -62
  709. package/scripts/_dbg-final-full-e2e.mjs +0 -218
  710. package/scripts/_dbg-final-line-e2e.mjs +0 -173
  711. package/scripts/_dbg-final-shots.mjs +0 -32
  712. package/scripts/_dbg-final-t6-hitl.mjs +0 -38
  713. package/scripts/_dbg-final-visual.mjs +0 -29
  714. package/scripts/_dbg-fix-unused-imports.py +0 -41
  715. package/scripts/_dbg-focus-range.mjs +0 -115
  716. package/scripts/_dbg-fresh-scene-e2e.mjs +0 -125
  717. package/scripts/_dbg-fullchain-e2e.mjs +0 -178
  718. package/scripts/_dbg-gate-debug.mjs +0 -37
  719. package/scripts/_dbg-gif-encode.mjs +0 -111
  720. package/scripts/_dbg-gizmo.mjs +0 -95
  721. package/scripts/_dbg-glass-probe.mjs +0 -57
  722. package/scripts/_dbg-glass-shot.mjs +0 -50
  723. package/scripts/_dbg-glass-sweep.mjs +0 -25
  724. package/scripts/_dbg-glb-probe.mjs +0 -43
  725. package/scripts/_dbg-goose-probe.mjs +0 -33
  726. package/scripts/_dbg-goose-probe.sh +0 -10
  727. package/scripts/_dbg-hardening-probe.mjs +0 -90
  728. package/scripts/_dbg-harness-cancel-repro.mjs +0 -81
  729. package/scripts/_dbg-harness-ui-dbg.py +0 -49
  730. package/scripts/_dbg-harness-ui-shot.py +0 -109
  731. package/scripts/_dbg-hero-btn-probe.mjs +0 -21
  732. package/scripts/_dbg-hidden-check.mjs +0 -21
  733. package/scripts/_dbg-hmi-audit.mjs +0 -164
  734. package/scripts/_dbg-home-repro.mjs +0 -24
  735. package/scripts/_dbg-home-stack.mjs +0 -13
  736. package/scripts/_dbg-host.mjs +0 -16
  737. package/scripts/_dbg-huashu-survey.mjs +0 -31
  738. package/scripts/_dbg-huashu-survey2.mjs +0 -35
  739. package/scripts/_dbg-huashu-verify.mjs +0 -25
  740. package/scripts/_dbg-huashu-verify2.mjs +0 -26
  741. package/scripts/_dbg-hydration-detail.mjs +0 -18
  742. package/scripts/_dbg-i18n-debug.mjs +0 -27
  743. package/scripts/_dbg-i18n-debug2.mjs +0 -26
  744. package/scripts/_dbg-i18n-final.mjs +0 -42
  745. package/scripts/_dbg-i18n-scan.mjs +0 -38
  746. package/scripts/_dbg-infra-lifecycle.mjs +0 -44
  747. package/scripts/_dbg-interval-config.mjs +0 -156
  748. package/scripts/_dbg-interval-scenario.mjs +0 -126
  749. package/scripts/_dbg-kicker-check.mjs +0 -11
  750. package/scripts/_dbg-line-aura-shots.mjs +0 -54
  751. package/scripts/_dbg-line-control-e2e.mjs +0 -120
  752. package/scripts/_dbg-line-gate-audit.mjs +0 -108
  753. package/scripts/_dbg-line-live-e2e.mjs +0 -144
  754. package/scripts/_dbg-line-repo-test.ts +0 -10
  755. package/scripts/_dbg-line-scenario-e2e.mjs +0 -256
  756. package/scripts/_dbg-line-spawn.ts +0 -31
  757. package/scripts/_dbg-live-engine-probe.mjs +0 -80
  758. package/scripts/_dbg-login-debug.py +0 -23
  759. package/scripts/_dbg-login-e2e.mjs +0 -26
  760. package/scripts/_dbg-logs-ui-e2e.py +0 -126
  761. package/scripts/_dbg-mcp-bridge-probe.mjs +0 -147
  762. package/scripts/_dbg-modbus-latency.mjs +0 -22
  763. package/scripts/_dbg-mqtt-chain-e2e.mjs +0 -90
  764. package/scripts/_dbg-mqtt-publisher.mjs +0 -17
  765. package/scripts/_dbg-nav-rpg.mjs +0 -84
  766. package/scripts/_dbg-nav-shot.mjs +0 -28
  767. package/scripts/_dbg-nav.mjs +0 -27
  768. package/scripts/_dbg-oneshot-impl-probe.ts +0 -67
  769. package/scripts/_dbg-opencode-sse.mjs +0 -101
  770. package/scripts/_dbg-opencode-start.ts +0 -57
  771. package/scripts/_dbg-opslog-e2e.mjs +0 -121
  772. package/scripts/_dbg-opslog-shots.mjs +0 -62
  773. package/scripts/_dbg-optimization-e2e.mjs +0 -94
  774. package/scripts/_dbg-orbit.mjs +0 -58
  775. package/scripts/_dbg-overview-probe.sh +0 -31
  776. package/scripts/_dbg-panesplitter-fix-check.mjs +0 -62
  777. package/scripts/_dbg-perms-visual.mjs +0 -36
  778. package/scripts/_dbg-pg-tcp-probe.cjs +0 -27
  779. package/scripts/_dbg-phase-e3-monitor.mjs +0 -25
  780. package/scripts/_dbg-pi-spawn-probe.ts +0 -33
  781. package/scripts/_dbg-plc-agent-loop.ts +0 -102
  782. package/scripts/_dbg-plc-e2e.mjs +0 -171
  783. package/scripts/_dbg-plugin-agent-read.ts +0 -56
  784. package/scripts/_dbg-plugin-config-ui.mjs +0 -111
  785. package/scripts/_dbg-plugin-matrix.mjs +0 -212
  786. package/scripts/_dbg-plugin-panels-ui.mjs +0 -54
  787. package/scripts/_dbg-plugin-sink-rest.mjs +0 -70
  788. package/scripts/_dbg-plugin-sink-ui.mjs +0 -81
  789. package/scripts/_dbg-plugin-tools-inject.ts +0 -80
  790. package/scripts/_dbg-plugin-ui-wizard.mjs +0 -125
  791. package/scripts/_dbg-plugin-verify-e2e.mjs +0 -123
  792. package/scripts/_dbg-plugins-e2e.mjs +0 -101
  793. package/scripts/_dbg-pop-clamp-verify.mjs +0 -77
  794. package/scripts/_dbg-preset-e2e.mjs +0 -116
  795. package/scripts/_dbg-preview-console.mjs +0 -28
  796. package/scripts/_dbg-preview-minrepro.mjs +0 -156
  797. package/scripts/_dbg-preview-pixels.mjs +0 -93
  798. package/scripts/_dbg-prompts-hotreload-test.ts +0 -76
  799. package/scripts/_dbg-prompts-resolve-test.ts +0 -39
  800. package/scripts/_dbg-quality-pages-e2e.mjs +0 -84
  801. package/scripts/_dbg-query-cancel.ts +0 -12
  802. package/scripts/_dbg-qwen-acp-probe.mjs +0 -30
  803. package/scripts/_dbg-qwen-capture.mjs +0 -21
  804. package/scripts/_dbg-rail-tree-e2e.mjs +0 -183
  805. package/scripts/_dbg-real-driver-e2e.mjs +0 -55
  806. package/scripts/_dbg-redesign-shots.mjs +0 -34
  807. package/scripts/_dbg-registry-smoke.ts +0 -14
  808. package/scripts/_dbg-release-smoke.mjs +0 -104
  809. package/scripts/_dbg-repo-setup-verify.mjs +0 -31
  810. package/scripts/_dbg-resolve-probe.ts +0 -6
  811. package/scripts/_dbg-restart-persist.mjs +0 -41
  812. package/scripts/_dbg-retention-test.ts +0 -25
  813. package/scripts/_dbg-rollback-mgr-audit.mjs +0 -169
  814. package/scripts/_dbg-rpg.mjs +0 -71
  815. package/scripts/_dbg-sc001-dispatch.mjs +0 -63
  816. package/scripts/_dbg-scenario-final-shot.mjs +0 -24
  817. package/scripts/_dbg-scenario-phase-e2.mjs +0 -75
  818. package/scripts/_dbg-scenario-phase-e3.mjs +0 -96
  819. package/scripts/_dbg-scenario-phase1.mjs +0 -90
  820. package/scripts/_dbg-scenario-phase2.mjs +0 -105
  821. package/scripts/_dbg-scenario-phase3-monitor.mjs +0 -48
  822. package/scripts/_dbg-scenario-phase3.mjs +0 -111
  823. package/scripts/_dbg-scene-polish-shot.mjs +0 -118
  824. package/scripts/_dbg-selring-probe.mjs +0 -47
  825. package/scripts/_dbg-settings-draft-probe.mjs +0 -39
  826. package/scripts/_dbg-settings-probe.mjs +0 -33
  827. package/scripts/_dbg-setup-e2e.mjs +0 -88
  828. package/scripts/_dbg-sideinfo.mjs +0 -101
  829. package/scripts/_dbg-sim-keeper.mjs +0 -100
  830. package/scripts/_dbg-splitter.mjs +0 -88
  831. package/scripts/_dbg-swatch-check.mjs +0 -10
  832. package/scripts/_dbg-task-cancel-probe.mjs +0 -66
  833. package/scripts/_dbg-team-drill.mjs +0 -173
  834. package/scripts/_dbg-town-alarm-e2e.mjs +0 -40
  835. package/scripts/_dbg-town-beauty-shots.mjs +0 -54
  836. package/scripts/_dbg-town-daq-shot.mjs +0 -26
  837. package/scripts/_dbg-town-full-e2e.mjs +0 -104
  838. package/scripts/_dbg-town-gate.mjs +0 -44
  839. package/scripts/_dbg-town-ins-probe.mjs +0 -37
  840. package/scripts/_dbg-town-perf.mjs +0 -50
  841. package/scripts/_dbg-town-polish-shots.mjs +0 -82
  842. package/scripts/_dbg-town-realtime.mjs +0 -42
  843. package/scripts/_dbg-town-shot.py +0 -25
  844. package/scripts/_dbg-town-shot3.mjs +0 -17
  845. package/scripts/_dbg-town-truth.mjs +0 -37
  846. package/scripts/_dbg-town-truth2.mjs +0 -27
  847. package/scripts/_dbg-transform-audit.mjs +0 -98
  848. package/scripts/_dbg-trend-expand-test.mjs +0 -38
  849. package/scripts/_dbg-twindaq-focus.mjs +0 -81
  850. package/scripts/_dbg-ui-polish-shot.mjs +0 -43
  851. package/scripts/_dbg-ui-polish-verify1.mjs +0 -92
  852. package/scripts/_dbg-ui-polish-verify2.mjs +0 -50
  853. package/scripts/_dbg-ui-polish-verify3.mjs +0 -51
  854. package/scripts/_dbg-ui-polish-verify4.mjs +0 -50
  855. package/scripts/_dbg-ui-shot.mjs +0 -26
  856. package/scripts/_dbg-ui-shots.mjs +0 -28
  857. package/scripts/_dbg-ui-survey.py +0 -52
  858. package/scripts/_dbg-unify-shot.mjs +0 -43
  859. package/scripts/_dbg-uplink-probe.mjs +0 -36
  860. package/scripts/_dbg-wizard-preview-shot.mjs +0 -58
  861. package/scripts/_dbg-wizard-ui-e2e.mjs +0 -93
  862. package/scripts/_dbg-ws-probe.mjs +0 -86
  863. package/scripts/_dbg-ws-shot2.mjs +0 -23
  864. package/scripts/_dbg-wsdot-sanity.mjs +0 -25
  865. package/scripts/_dev-stack.mjs +0 -46
  866. package/scripts/_http-driver-probe.mjs +0 -30
  867. package/scripts/_mqtt-driver-probe.mjs +0 -30
  868. package/scripts/_newdriver-rest-probe.mjs +0 -100
  869. package/scripts/_node-state-probe.mjs +0 -5
  870. package/scripts/_opcua-driver-probe.mjs +0 -31
  871. package/scripts/_rtu-debug.mjs +0 -41
  872. package/scripts/_rtu-direct.mjs +0 -6
  873. package/scripts/_rtu-driver-probe.mjs +0 -53
  874. package/scripts/_spike-pitui.mjs +0 -116
  875. package/scripts/_tmp-args-probe.mjs +0 -20
  876. package/scripts/_tmp-cyc-entry.mjs +0 -8
  877. package/scripts/_tmp-cyc-main.mjs +0 -5
  878. package/scripts/_tmp-cyc-mod.mjs +0 -2
  879. package/scripts/_tmp-cycle-a.mjs +0 -6
  880. package/scripts/_tmp-cycle-b.mjs +0 -2
  881. package/scripts/_tmp-cycle-probe.mjs +0 -4
  882. package/scripts/_tmp-entry-variant.mjs +0 -2
  883. package/scripts/_tmp-help-probe.mjs +0 -19
  884. package/scripts/_tmp-help-probe2.mjs +0 -2
  885. package/scripts/_tmp-trace-preload.mjs +0 -1
  886. package/scripts/_wizard-shots.mjs +0 -90
  887. package/scripts/acceptance-suite.py +0 -207
  888. package/scripts/aml-agent-bridge.ts +0 -230
  889. package/scripts/aml-industrial-loop.ts +0 -232
  890. package/scripts/build-film-devices.mjs +0 -227
  891. package/scripts/collab-live-test.py +0 -177
  892. package/scripts/debug-mcp-http.ts +0 -64
  893. package/scripts/demo-lead-worker.ts +0 -256
  894. package/scripts/demo-modes.ts +0 -415
  895. package/scripts/demo-omp-channel.ts +0 -135
  896. package/scripts/design-preflight.mjs +0 -223
  897. package/scripts/design-verify-templates.mjs +0 -110
  898. package/scripts/design-verify.mjs +0 -170
  899. package/scripts/dev-window.cmd +0 -6
  900. package/scripts/device-line-restore.mjs +0 -34
  901. package/scripts/diag-lead-status.ts +0 -101
  902. package/scripts/e2e-a2a-steer-live.mjs +0 -193
  903. package/scripts/e2e-dual-drive-comm.ts +0 -259
  904. package/scripts/e2e-full-scenario.ts +0 -321
  905. package/scripts/e2e-harness-consistency.ts +0 -204
  906. package/scripts/e2e-harness-provider-task.mjs +0 -126
  907. package/scripts/e2e-line-live.mjs +0 -144
  908. package/scripts/e2e-memory-persistence.ts +0 -320
  909. package/scripts/e2e-omp-modes.ts +0 -274
  910. package/scripts/e2e-omp-realtime.ts +0 -258
  911. package/scripts/e2e-plc-scenario.mjs +0 -292
  912. package/scripts/e2e-real-scenario.mjs +0 -466
  913. package/scripts/e2e-tab-close.mjs +0 -136
  914. package/scripts/e2e-token-ui.mjs +0 -149
  915. package/scripts/final-soup-run.py +0 -192
  916. package/scripts/final-soup-watch.py +0 -83
  917. package/scripts/i18n-codemod.mjs +0 -173
  918. package/scripts/i18n-fix-en.py +0 -28
  919. package/scripts/i18n-fix-en2.py +0 -31
  920. package/scripts/i18n-merge.mjs +0 -191
  921. package/scripts/migrate-local-time.mjs +0 -123
  922. package/scripts/omp-real-test.py +0 -328
  923. package/scripts/team-plugins-api-smoke.mjs +0 -149
  924. package/scripts/test-a2a-relay.mjs +0 -222
  925. package/scripts/test-aml-integration.ts +0 -159
  926. package/scripts/test-aml-job.ts +0 -174
  927. package/scripts/test-aml-unit.ts +0 -184
  928. package/scripts/test-api-client.ts +0 -108
  929. package/scripts/test-api-suite.mjs +0 -271
  930. package/scripts/test-block-consumption.mjs +0 -194
  931. package/scripts/test-cmd-render.mjs +0 -218
  932. package/scripts/test-collab-omp.mjs +0 -192
  933. package/scripts/test-config-precedence.ts +0 -124
  934. package/scripts/test-context-governor.ts +0 -176
  935. package/scripts/test-daq-frames.ts +0 -180
  936. package/scripts/test-daq-minio.ts +0 -77
  937. package/scripts/test-dedup-logic.ts +0 -132
  938. package/scripts/test-e2e-collaboration.ts +0 -262
  939. package/scripts/test-e2e-monitor.ts +0 -192
  940. package/scripts/test-event-history.ts +0 -112
  941. package/scripts/test-exec-modes.ts +0 -316
  942. package/scripts/test-fifo-realtime.mjs +0 -193
  943. package/scripts/test-final-e2e.mjs +0 -290
  944. package/scripts/test-goal-summary.ts +0 -202
  945. package/scripts/test-harness-liveness.ts +0 -109
  946. package/scripts/test-harness-terminal.ts +0 -164
  947. package/scripts/test-header-trail.mjs +0 -95
  948. package/scripts/test-hitl.ts +0 -360
  949. package/scripts/test-koda-restyle.mjs +0 -105
  950. package/scripts/test-lane-raw.ts +0 -67
  951. package/scripts/test-lanes-history-render.mjs +0 -138
  952. package/scripts/test-loop-omp.mjs +0 -154
  953. package/scripts/test-mdlite.ts +0 -53
  954. package/scripts/test-memory-brief-chronicle.ts +0 -180
  955. package/scripts/test-memory-rrf-mmr.ts +0 -114
  956. package/scripts/test-mock-collab.mjs +0 -226
  957. package/scripts/test-modern-render.mjs +0 -174
  958. package/scripts/test-omp-terminal.mjs +0 -187
  959. package/scripts/test-plugin-ext.ts +0 -173
  960. package/scripts/test-prompts-loader.ts +0 -56
  961. package/scripts/test-real-scenario.mjs +0 -290
  962. package/scripts/test-stream-render.ts +0 -37
  963. package/scripts/test-task-drawer.mjs +0 -204
  964. package/scripts/test-task-invariants.mjs +0 -169
  965. package/scripts/test-town-3d.mjs +0 -121
  966. package/scripts/test-town-layout.mjs +0 -200
  967. package/scripts/test-town-page.mjs +0 -136
  968. package/scripts/test-town-scene-math.ts +0 -169
  969. package/scripts/test-town-twin.mjs +0 -121
  970. package/scripts/test-town-upload.mjs +0 -89
  971. package/scripts/test-town-user-flow.mjs +0 -619
  972. package/scripts/test-town-world.mjs +0 -76
  973. package/scripts/test-town-wuwa.mjs +0 -198
  974. package/scripts/test-user-isolation.mjs +0 -193
  975. package/scripts/test-workshop-entries.ts +0 -370
  976. package/scripts/test-workspace-api.ts +0 -329
  977. package/scripts/test-ws-aep.mjs +0 -187
  978. package/scripts/test-ws-protocol.ts +0 -134
  979. package/scripts/town-demo-seed.mjs +0 -75
  980. package/scripts/town-scene-clear.mjs +0 -56
  981. package/scripts/verify-exec-modes-report.ts +0 -248
  982. package/scripts/verify-lead-mail.ts +0 -188
  983. package/scripts/verify-page-smoke.mjs +0 -87
  984. package/scripts/ws-test.mjs +0 -176
  985. 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": "adc365b6-f636-4a2b-9527-79819c1e874b",
5110
+ "buildId": "44b66249-54d0-4c8a-9057-9755a32329e2",
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.34",
5140
+ "version": "0.7.38",
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 = [];
@@ -7804,6 +7831,30 @@ function defineApiHandler(handler) {
7804
7831
  });
7805
7832
  }
7806
7833
 
7834
+ const SOCKET_NOISE = /ECONNRESET|EPIPE|ECONNABORTED|ETIMEDOUT|ERR_STREAM_PREMATURE_CLOSE|ERR_STREAM_WRITE_AFTER_END/;
7835
+ const UPSTREAM_UNREACHABLE = /ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|ENETUNREACH|ERR_SOCKET_CONNECTION_TIMEOUT|UND_ERR_CONNECT_TIMEOUT/;
7836
+ const SQLITE_BUSY = /SQLITE_BUSY|SQLITE_LOCKED|database is locked/i;
7837
+ const ENGINE_BOUNDARY = /\b(opencode|omp|codex|dsh) API\b/i;
7838
+ function describeReason(reason) {
7839
+ var _a, _b;
7840
+ return reason instanceof Error ? `${reason.message}
7841
+ ${(_b = (_a = reason.stack) == null ? void 0 : _a.slice(0, 600)) != null ? _b : ""}` : String(reason);
7842
+ }
7843
+ function classifyFatalCandidate(reason) {
7844
+ var _a;
7845
+ if (reason == null) return "fatal";
7846
+ const err = reason;
7847
+ const code = typeof err.code === "string" ? err.code : "";
7848
+ const text = `${code}
7849
+ ${describeReason(reason)}`;
7850
+ if (SOCKET_NOISE.test(text)) return "socket";
7851
+ if (SQLITE_BUSY.test(text)) return "db-busy";
7852
+ if (UPSTREAM_UNREACHABLE.test(text)) return "upstream";
7853
+ const head = (_a = describeReason(reason).split("\n")[0]) != null ? _a : "";
7854
+ if (ENGINE_BOUNDARY.test(head)) return "engine";
7855
+ return "fatal";
7856
+ }
7857
+
7807
7858
  function zValidator(schema) {
7808
7859
  return (data) => {
7809
7860
  const result = schema.safeParse(data);
@@ -8098,6 +8149,61 @@ function ensureDataDir(cwd = process.cwd(), env = process.env) {
8098
8149
  }
8099
8150
  catch { /* 迁移失败不阻断 */ }
8100
8151
  return dir
8152
+ }
8153
+
8154
+ /**
8155
+ * AML 平台数据根(<amlRoot>):**项目目录下的 ./aml**,与配置根(.AgentWorkShop)分离。
8156
+ *
8157
+ * 为什么单独一个根、而不是挂在 <configRoot>/data/aml 下:
8158
+ * - AML 的产物是「可移植的资产」——数据集数组、训练作业工作区、ONNX 模型工件。
8159
+ * 这些需要能被 git/rsync/打包带走、被外部 Python 工具直接读取、被人在资源管理器里
8160
+ * 打开查看;埋在 .AgentWorkShop/data 里(那是运行时状态目录,常被 GC/清理)不合适。
8161
+ * - uv 虚拟环境固定在 <amlRoot>/.venv,与数据集/模型同级,整个 ./aml 可以整体删除重建。
8162
+ *
8163
+ * 解析优先级:
8164
+ * ① AW_AML_DIR 环境变量(显式覆盖;测试隔离与自定义部署用)
8165
+ * ② repo 模式 → <检出根>/aml (cwd 向上找 config.yml + nuxt.config.ts)
8166
+ * ③ home 模式(全局安装) → <配置根>/aml (~/.AgentWorkShop/aml)
8167
+ * ④ 兜底 → <cwd>/aml
8168
+ *
8169
+ * @returns {{ dir: string, mode: 'env'|'repo'|'home'|'cwd', projectRoot: string|null }}
8170
+ */
8171
+ function resolveAmlRoot({ cwd = process.cwd(), env = process.env } = {}) {
8172
+ if (env.AW_AML_DIR && String(env.AW_AML_DIR).trim()) {
8173
+ return { dir: resolve$1(String(env.AW_AML_DIR).trim()), mode: 'env', projectRoot: null }
8174
+ }
8175
+ if (env.AW_MODE !== 'home') {
8176
+ const repoRoot = findRepoRoot(cwd);
8177
+ if (repoRoot) return { dir: join(repoRoot, 'aml'), mode: 'repo', projectRoot: repoRoot }
8178
+ }
8179
+ const forceHome = env.AW_MODE === 'home';
8180
+ if (forceHome) return { dir: join(awHome(env), 'aml'), mode: 'home', projectRoot: null }
8181
+ // 非检出目录(既无 config.yml+nuxt.config.ts):配置根优先,最后才落 cwd
8182
+ const localRoot = findLocalConfigRoot(cwd);
8183
+ if (localRoot) return { dir: join(localRoot, 'aml'), mode: 'home', projectRoot: null }
8184
+ return { dir: join(resolve$1(cwd), 'aml'), mode: 'cwd', projectRoot: null }
8185
+ }
8186
+
8187
+ /** AML 数据根绝对路径(仅解析,不创建) */
8188
+ function amlDirFor(cwd = process.cwd(), env = process.env) {
8189
+ return resolveAmlRoot({ cwd, env }).dir
8190
+ }
8191
+
8192
+ /**
8193
+ * 确保 AML 数据根存在并落标准子目录骨架:
8194
+ * .venv/ uv 创建的解释器环境
8195
+ * datasets/<id>/ 数据集快照(spec.json/manifest.json/report.json/arrays/)
8196
+ * jobs/<id>/ 训练作业(workspace/run.log/artifacts/)
8197
+ * models/<id>/ 模型工件(model.onnx/io_spec.json)
8198
+ * runtime/ 运行时状态(uv 安装记录/环境探针缓存)
8199
+ * tools/ 项目本地自动安装的 uv 二进制(免管理员、不污染 PATH)
8200
+ */
8201
+ function ensureAmlDir(cwd = process.cwd(), env = process.env) {
8202
+ const dir = amlDirFor(cwd, env);
8203
+ for (const sub of ['datasets', 'jobs', 'models', 'runtime', 'tools']) {
8204
+ mkdirSync(join(dir, sub), { recursive: true });
8205
+ }
8206
+ return dir
8101
8207
  }
8102
8208
 
8103
8209
  // ============================================================
@@ -8598,7 +8704,10 @@ class LruMap {
8598
8704
  has(key) { return this.map.has(key) }
8599
8705
 
8600
8706
  get(key) {
8601
- if (!this.map.has(key)) { this.misses += 1; return undefined }
8707
+ if (!this.map.has(key)) {
8708
+ this.misses += 1;
8709
+ return undefined
8710
+ }
8602
8711
  // 访问即提升:删了重插(值不变),维持「尾部最新」
8603
8712
  const v = this.map.get(key);
8604
8713
  this.map.delete(key);
@@ -11631,16 +11740,49 @@ function loadJsonFile(filePath, fallback) {
11631
11740
  }
11632
11741
  }
11633
11742
 
11743
+ /**
11744
+ * 紧凑 vs 缩进的切换阈值(顶层元素数)。
11745
+ *
11746
+ * 为什么需要:`null, 2` 缩进对**小文件**是净收益(人可读、diff 友好、成本可忽略),
11747
+ * 但对**大库**是纯税:实测 DCW 回退账本 20000 锚 + 2000 记录 — 缩进 8.57 MB / 23.2 ms,
11748
+ * 紧凑 5.82 MB / 13.2 ms(体积 -32%、CPU -43%)。而它每个 1.5s 防抖窗就要整库重写一次,
11749
+ * 与 PLC 写 sweep 跑在同一个事件循环上 —— 缩进在这里换来的是几十毫秒的阻塞。
11750
+ *
11751
+ * 所以按规模自动选择:小库保持缩进(可读性),大库走紧凑(性能)。
11752
+ * 2000 是实测拐点量级:低于此的库序列化都在亚毫秒,缩进白拿。
11753
+ */
11754
+ const PRETTY_MAX_ENTRIES = 2000;
11755
+
11756
+ /** 顶层元素数估算(数组取长度;对象取各数组属性长度之和)——用于选择序列化形态 */
11757
+ function entryCount(data) {
11758
+ if (Array.isArray(data)) return data.length
11759
+ if (data && typeof data === 'object') {
11760
+ let n = 0;
11761
+ for (const v of Object.values(data)) if (Array.isArray(v)) n += v.length;
11762
+ return n
11763
+ }
11764
+ return 0
11765
+ }
11766
+
11767
+ /** 按规模选择缩进(小库可读、大库省 CPU/IO) */
11768
+ function serializeJson(data) {
11769
+ return entryCount(data) > PRETTY_MAX_ENTRIES
11770
+ ? JSON.stringify(data)
11771
+ : JSON.stringify(data, null, 2)
11772
+ }
11773
+
11634
11774
  /**
11635
11775
  * 原子落盘:写临时文件 → rename 替换;失败退回直写。
11776
+ * 序列化形态按库规模自动选择(见 serializeJson)。
11636
11777
  * @param {string} filePath
11637
11778
  * @param {unknown} data
11638
11779
  */
11639
11780
  function saveJsonFileAtomic(filePath, data) {
11640
11781
  mkdirSync(dirname$1(filePath), { recursive: true });
11641
11782
  const tmp = `${filePath}.tmp-${process.pid}`;
11783
+ const payload = serializeJson(data);
11642
11784
  try {
11643
- writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf-8');
11785
+ writeFileSync(tmp, payload, 'utf-8');
11644
11786
  try {
11645
11787
  renameSync(tmp, filePath);
11646
11788
  return
@@ -11652,7 +11794,7 @@ function saveJsonFileAtomic(filePath, data) {
11652
11794
  catch (tmpErr) {
11653
11795
  console.error(`[json-store] 临时文件写入失败(${tmpErr.message}),退回直写`);
11654
11796
  }
11655
- writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
11797
+ writeFileSync(filePath, payload, 'utf-8');
11656
11798
  }
11657
11799
 
11658
11800
  var __defProp$C = Object.defineProperty;
@@ -12076,10 +12218,6 @@ class DaqNodeRuntime {
12076
12218
  this.lastPublishAt = 0;
12077
12219
  this.lastIngestAt = 0;
12078
12220
  }
12079
- /** 仅重置下发游标(全局下发间隔变更时,让新缺省立刻可观测) */
12080
- republish() {
12081
- this.lastPublishAt = 0;
12082
- }
12083
12221
  /**
12084
12222
  * 是否已到采样时点(网关调度用)。
12085
12223
  * 网关每拍派发额度有限,先判到期再占用额度:未到期的节点零成本跳过,
@@ -12250,16 +12388,6 @@ class DaqNodeRepo {
12250
12388
  log$u.error("[daq] \u5FEB\u7167\u843D\u76D8\u5931\u8D25:", err);
12251
12389
  }
12252
12390
  }
12253
- /** 读数落盘防抖(采样循环每帧调用;5s 合并一次磁盘写) */
12254
- flushDebounced(ms = 5e3) {
12255
- var _a, _b;
12256
- if (this.flushTimer) return;
12257
- this.flushTimer = setTimeout(() => {
12258
- this.flushTimer = null;
12259
- this.flushNow();
12260
- }, ms);
12261
- (_b = (_a = this.flushTimer).unref) == null ? void 0 : _b.call(_a);
12262
- }
12263
12391
  }
12264
12392
  const g$n = globalThis;
12265
12393
  function getDaqNodeRepo() {
@@ -12666,6 +12794,21 @@ class DaqController {
12666
12794
  __publicField$y(this, "siblingsCache", new LruMap(500));
12667
12795
  /** 遥测 WS 推送(1s/设备节流):孪生状态/遥测事件化直推,前端全量轮询降级为断线兜底 */
12668
12796
  __publicField$y(this, "twinPushAt", /* @__PURE__ */ new Map());
12797
+ /**
12798
+ * 帧查询的「内存读穿透」索引 —— 帧先入 frameBuffer 再广播 thumbUrl(contentUrl),
12799
+ * TSDB 为 500ms 防抖异步刷盘,收到 WS 立刻回查会在落库前 404,故查询侧先看 buffer。
12800
+ *
12801
+ * 为什么要有索引:早先 frameContent 直接线性扫 frameBuffer,而 frames() 更糟 ——
12802
+ * 它对每个 pending 行都调一次 framesFromBuffer(),即**在 O(n) 的外层里再套 O(n) 的全扫**
12803
+ * (n = FRAME_BUFFER_CAP = 2000):突发写入后缓冲全满时,单次 REST 查询 ≈ 4×10⁶ 次迭代
12804
+ * + 2000 次多余对象构造,而它和 250ms 采样 sweep 跑在同一个事件循环上。
12805
+ *
12806
+ * 现在:byNode 按节点分桶(范围查询只扫该节点的行),byKey 给出 (nodeId, tsMs) 的 O(1) 命中。
12807
+ * 两个索引与 frameBuffer 严格同生命周期 —— 所有 push/淘汰/flush 都必须经下面的私有方法,
12808
+ * 不允许直接操作 frameBuffer,否则索引会与缓冲漂移(表现为"刚采到的帧查不到")。
12809
+ */
12810
+ __publicField$y(this, "frameByNode", /* @__PURE__ */ new Map());
12811
+ __publicField$y(this, "frameByKey", /* @__PURE__ */ new Map());
12669
12812
  }
12670
12813
  // ---------- 生命周期 ----------
12671
12814
  ensureLoop() {
@@ -12854,7 +12997,7 @@ class DaqController {
12854
12997
  const lineRun = (_b = (_a = getDaqHostPorts()) == null ? void 0 : _a.lineRun.activeRun(node.lineId)) != null ? _b : null;
12855
12998
  if (lineRun) (_c = getDaqHostPorts()) == null ? void 0 : _c.lineRun.bumpTaggedSamples(node.lineId);
12856
12999
  const metrics = (_d = f.metrics) != null ? _d : {};
12857
- this.frameBuffer.push({
13000
+ this.pushFrame({
12858
13001
  nodeId: node.id,
12859
13002
  tsMs,
12860
13003
  kind: f.kind,
@@ -12869,8 +13012,7 @@ class DaqController {
12869
13012
  metrics
12870
13013
  });
12871
13014
  if (this.frameBuffer.length > FRAME_BUFFER_CAP) {
12872
- this.frameBuffer.splice(0, this.frameBuffer.length - FRAME_BUFFER_CAP);
12873
- this.tsdbDropped += 1;
13015
+ if (this.evictFrames(FRAME_BUFFER_CAP) > 0) this.tsdbDropped += 1;
12874
13016
  }
12875
13017
  this.scheduleTsdbFlush();
12876
13018
  this.evaluateMetricAlarms(node, tpl, metrics);
@@ -12960,13 +13102,6 @@ class DaqController {
12960
13102
  }
12961
13103
  this.emitController();
12962
13104
  }
12963
- /** 网关停止:全部节点置 offline */
12964
- markAllOffline() {
12965
- for (const n of this.repo.all()) {
12966
- if (n.enabled) n.state = "offline";
12967
- }
12968
- this.emitController();
12969
- }
12970
13105
  /** 运行时注册表对账(仓库为权威:增删节点/启动即对齐;返回新建的运行时) */
12971
13106
  syncRuntimes() {
12972
13107
  const live = /* @__PURE__ */ new Set();
@@ -13097,8 +13232,9 @@ class DaqController {
13097
13232
  }
13098
13233
  }
13099
13234
  }
13100
- while (this.frameBuffer.length > 0) {
13101
- const batch = this.frameBuffer.splice(0, this.frameBuffer.length);
13235
+ let pendingFrames = this.drainFrames();
13236
+ while (pendingFrames.length > 0) {
13237
+ const batch = pendingFrames;
13102
13238
  let ok = false;
13103
13239
  for (let attempt = 0; attempt < TSDB_WRITE_RETRIES && !ok; attempt++) {
13104
13240
  try {
@@ -13114,6 +13250,7 @@ class DaqController {
13114
13250
  }
13115
13251
  }
13116
13252
  }
13253
+ pendingFrames = this.drainFrames();
13117
13254
  }
13118
13255
  } finally {
13119
13256
  this.tsdbWriting = false;
@@ -13173,10 +13310,6 @@ class DaqController {
13173
13310
  setBroadcast(fn) {
13174
13311
  this.broadcast = fn;
13175
13312
  }
13176
- onlineCount() {
13177
- if (!this.running) return 0;
13178
- return this.repo.all().filter((n) => n.enabled).length;
13179
- }
13180
13313
  controllerState() {
13181
13314
  const queueLost = g_queueLost();
13182
13315
  const nodes = this.repo.all();
@@ -13224,30 +13357,62 @@ class DaqController {
13224
13357
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13225
13358
  return getTsdb().query(id, opts);
13226
13359
  }
13227
- /** 帧查询的「内存读穿透」:帧先入 frameBuffer 再广播 thumbUrl(contentUrl),
13228
- * TSDB 为 500ms 防抖异步刷盘 —— 收到 WS 立刻回查会在落库前 404。
13229
- * 故查询侧按 (nodeId, tsMs) 先看 buffer 命中;与 TSDB 返回形态逐字段对齐
13230
- * (points 从 meta.points 还原,规则同 tsdb adapter 的 pointsFromMeta)。
13231
- * 注:刷盘 splice 与查询同一 JS 线程,不存在「既不在 buffer 又没落库」的空窗。 */
13232
- framesFromBuffer(id, tsMs) {
13360
+ /** 帧索引键((nodeId, tsMs) 唯一:同一节点同一毫秒只会有一帧) */
13361
+ static frameKey(nodeId, tsMs) {
13362
+ return `${nodeId}@${tsMs}`;
13363
+ }
13364
+ /** 入缓冲 + 同步三处索引 */
13365
+ pushFrame(row) {
13366
+ this.frameBuffer.push(row);
13367
+ const key = DaqController.frameKey(row.nodeId, row.tsMs);
13368
+ this.frameByKey.set(key, row);
13369
+ const bucket = this.frameByNode.get(row.nodeId);
13370
+ if (bucket) bucket.push(row);
13371
+ else this.frameByNode.set(row.nodeId, [row]);
13372
+ }
13373
+ /** 淘汰最旧若干行,并同步清理索引(避免索引持有已淘汰行的强引用 → 内存泄漏) */
13374
+ evictFrames(keepLast) {
13375
+ const excess = this.frameBuffer.length - keepLast;
13376
+ if (excess <= 0) return 0;
13377
+ const dropped = this.frameBuffer.splice(0, excess);
13378
+ for (const row of dropped) {
13379
+ const key = DaqController.frameKey(row.nodeId, row.tsMs);
13380
+ if (this.frameByKey.get(key) === row) this.frameByKey.delete(key);
13381
+ const bucket = this.frameByNode.get(row.nodeId);
13382
+ if (!bucket) continue;
13383
+ const idx = bucket.indexOf(row);
13384
+ if (idx >= 0) bucket.splice(idx, 1);
13385
+ if (bucket.length === 0) this.frameByNode.delete(row.nodeId);
13386
+ }
13387
+ return dropped.length;
13388
+ }
13389
+ /** 取走全部帧(刷盘用)并清空索引 */
13390
+ drainFrames() {
13391
+ if (this.frameBuffer.length === 0) return [];
13392
+ const batch = this.frameBuffer.splice(0, this.frameBuffer.length);
13393
+ this.frameByNode.clear();
13394
+ this.frameByKey.clear();
13395
+ return batch;
13396
+ }
13397
+ /** 单行 → 对外记录(纯映射,不做任何扫描) */
13398
+ static toFrameRecord(r) {
13233
13399
  var _a, _b, _c, _d, _e;
13234
- const out = [];
13235
- for (const r of this.frameBuffer) {
13236
- if (r.nodeId !== id || r.tsMs !== tsMs) continue;
13237
- out.push({
13238
- at: r.tsMs,
13239
- kind: r.kind,
13240
- points: r.kind === "vector" ? DaqController.pointsFromMeta(r.meta) : void 0,
13241
- metrics: r.metrics,
13242
- meta: r.meta,
13243
- deviceBindingId: (_a = r.deviceBindingId) != null ? _a : null,
13244
- lineId: (_b = r.lineId) != null ? _b : null,
13245
- productId: (_c = r.productId) != null ? _c : null,
13246
- recipeId: (_d = r.recipeId) != null ? _d : null,
13247
- runId: (_e = r.runId) != null ? _e : null
13248
- });
13249
- }
13250
- return out;
13400
+ return {
13401
+ at: r.tsMs,
13402
+ kind: r.kind,
13403
+ points: r.kind === "vector" ? DaqController.pointsFromMeta(r.meta) : void 0,
13404
+ metrics: r.metrics,
13405
+ meta: r.meta,
13406
+ deviceBindingId: (_a = r.deviceBindingId) != null ? _a : null,
13407
+ lineId: (_b = r.lineId) != null ? _b : null,
13408
+ productId: (_c = r.productId) != null ? _c : null,
13409
+ recipeId: (_d = r.recipeId) != null ? _d : null,
13410
+ runId: (_e = r.runId) != null ? _e : null
13411
+ };
13412
+ }
13413
+ /** (nodeId, tsMs) 精确命中未刷盘帧;O(1) */
13414
+ bufferedFrameAt(id, tsMs) {
13415
+ return this.frameByKey.get(DaqController.frameKey(id, tsMs));
13251
13416
  }
13252
13417
  /** 向量点列从 meta.points 还原(与 TSDB adapter 同规则:非数组/空/越界/非数值 → undefined) */
13253
13418
  static pointsFromMeta(meta) {
@@ -13257,21 +13422,17 @@ class DaqController {
13257
13422
  }
13258
13423
  /** 节点帧历史(v2:向量/图像元数据;像素按需经 frameContent 从对象存储取) */
13259
13424
  async frames(id, opts) {
13260
- var _a;
13425
+ var _a, _b, _c, _d;
13261
13426
  this.ensureLoop();
13262
13427
  await tsdbReady;
13263
13428
  const node = this.repo.byId(id);
13264
13429
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13265
13430
  const rows = await getTsdb().queryFrames(id, opts);
13266
13431
  const seen = new Set(rows.map((r) => r.at));
13267
- const pending = this.frameBuffer.filter((r) => {
13268
- var _a2, _b;
13269
- 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());
13270
- }).filter((r) => !seen.has(r.tsMs)).sort((a, b) => b.tsMs - a.tsMs).map((r) => {
13271
- var _a2;
13272
- return (_a2 = this.framesFromBuffer(id, r.tsMs)[0]) != null ? _a2 : null;
13273
- }).filter((r) => r != null);
13274
- return [...rows, ...pending].slice(0, Math.min(Math.max((_a = opts.limit) != null ? _a : 100, 1), 1e3));
13432
+ const toMs = (_a = opts.toMs) != null ? _a : Date.now();
13433
+ const fromMs = (_b = opts.fromMs) != null ? _b : 0;
13434
+ 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);
13435
+ return [...rows, ...pending].slice(0, Math.min(Math.max((_d = opts.limit) != null ? _d : 100, 1), 1e3));
13275
13436
  }
13276
13437
  /** 帧内容(图像主图/缩略图;从对象存储读取后由 REST 流式返回) */
13277
13438
  async frameContent(id, tsMs, thumb) {
@@ -13279,7 +13440,8 @@ class DaqController {
13279
13440
  await tsdbReady;
13280
13441
  const node = this.repo.byId(id);
13281
13442
  if (!node) throw Object.assign(new Error(`\u6570\u91C7\u8282\u70B9\u4E0D\u5B58\u5728: ${id}`), { status: 404 });
13282
- const rows = this.framesFromBuffer(id, tsMs);
13443
+ const buffered = this.bufferedFrameAt(id, tsMs);
13444
+ const rows = buffered ? [DaqController.toFrameRecord(buffered)] : await getTsdb().queryFrames(id, { fromMs: tsMs - 1, toMs: tsMs + 1, limit: 5 });
13283
13445
  if (rows.length === 0) rows.push(...await getTsdb().queryFrames(id, { fromMs: tsMs - 1, toMs: tsMs + 1, limit: 5 }));
13284
13446
  const row = rows.find((r) => r.at === tsMs);
13285
13447
  if (!row || row.kind !== "image") throw Object.assign(new Error(`\u5E27\u4E0D\u5B58\u5728: ${id}@${tsMs}`), { status: 404 });
@@ -13637,44 +13799,19 @@ async function daqPlugin() {
13637
13799
  globalThis.__daqApplyInfra = applyInfra;
13638
13800
  }
13639
13801
 
13640
- const SOCKET_NOISE = /ECONNRESET|EPIPE|ECONNABORTED|ETIMEDOUT|ERR_STREAM_PREMATURE_CLOSE|ERR_STREAM_WRITE_AFTER_END/;
13641
- const SQLITE_BUSY = /SQLITE_BUSY|SQLITE_LOCKED|database is locked/i;
13642
- const ENGINE_BOUNDARY = /\b(opencode|omp|codex|dsh) API\b/i;
13643
- function isSocketNoise(reason) {
13644
- if (reason == null) return false;
13645
- const err = reason;
13646
- if (typeof err.code === "string" && SOCKET_NOISE.test(err.code)) return true;
13647
- return SOCKET_NOISE.test(describe(reason));
13648
- }
13649
- function describe(reason) {
13650
- var _a, _b;
13651
- return reason instanceof Error ? `${reason.message}
13652
- ${(_b = (_a = reason.stack) == null ? void 0 : _a.slice(0, 600)) != null ? _b : ""}` : String(reason);
13653
- }
13654
13802
  const _9rWWtg7mpR7rd_q4k5tNoCs9rdC0OMIn8qtCMfjFnYg = defineNitroPlugin(() => {
13655
- const isTransientDbBusy = (reason) => SQLITE_BUSY.test(describe(reason));
13656
- const isEngineBoundary = (reason) => {
13657
- var _a;
13658
- return ENGINE_BOUNDARY.test((_a = describe(reason).split("\n")[0]) != null ? _a : "");
13659
- };
13660
- let engineFaults = 0;
13803
+ const counts = { "socket": 0, "db-busy": 0, "upstream": 0, "engine": 0 };
13661
13804
  const onFatalCandidate = (kind, reason) => {
13662
- if (isSocketNoise(reason)) {
13663
- console.warn(`[stability-guard] socket noise suppressed: ${describe(reason).slice(0, 120)}`);
13664
- return;
13665
- }
13666
- if (isTransientDbBusy(reason)) {
13667
- console.warn(`[stability-guard] sqlite busy(\u77AC\u6001,\u4E0D\u9000\u51FA): ${describe(reason).slice(0, 120)}`);
13668
- return;
13669
- }
13670
- if (isEngineBoundary(reason)) {
13671
- engineFaults += 1;
13672
- console.error(`[stability-guard] \u5F15\u64CE\u8FB9\u754C\u9519\u8BEF(\u7D2F\u8BA1 ${engineFaults},\u4E0D\u9000\u51FA): ${describe(reason).slice(0, 400)}`);
13673
- return;
13805
+ const severity = classifyFatalCandidate(reason);
13806
+ if (severity === "fatal") {
13807
+ console.error(`[stability-guard] fatal ${kind}, exiting:
13808
+ ${describeReason(reason)}`);
13809
+ process.exit(1);
13674
13810
  }
13675
- console.error(`[stability-guard] fatal ${kind}, exiting:
13676
- ${describe(reason)}`);
13677
- process.exit(1);
13811
+ counts[severity] += 1;
13812
+ const line = `[stability-guard] ${severity}(\u7D2F\u8BA1 ${counts[severity]},\u4E0D\u9000\u51FA): ${describeReason(reason).slice(0, 200).replace(/\n/g, " ")}`;
13813
+ if (severity === "upstream" || severity === "engine") console.error(line);
13814
+ else console.warn(line);
13678
13815
  };
13679
13816
  process.on("unhandledRejection", (reason) => {
13680
13817
  onFatalCandidate("unhandledRejection", reason);
@@ -13682,7 +13819,7 @@ ${describe(reason)}`);
13682
13819
  process.on("uncaughtException", (err) => {
13683
13820
  onFatalCandidate("uncaughtException", err);
13684
13821
  });
13685
- console.warn("[stability-guard] armed (socket \u65AD\u8FDE/sqlite \u77AC\u6001\u5FD9/\u5F15\u64CE\u8FB9\u754C\u9519\u8BEF \u2192 \u8BB0\u5F55\u7EE7\u7EED;\u5176\u4F59\u771F\u5B9E\u9519\u8BEF \u2192 exit 1)");
13822
+ console.warn("[stability-guard] armed (socket \u65AD\u8FDE/sqlite \u77AC\u6001\u5FD9/\u5916\u90E8\u8BBE\u5907\u4E0D\u53EF\u8FBE/\u5F15\u64CE\u8FB9\u754C\u9519\u8BEF \u2192 \u8BB0\u5F55\u7EE7\u7EED;\u5176\u4F59\u771F\u5B9E\u9519\u8BEF \u2192 exit 1)");
13686
13823
  });
13687
13824
 
13688
13825
  const DAY_MS$1 = 864e5;
@@ -22092,6 +22229,10 @@ function createAmlRepo(db) {
22092
22229
  },
22093
22230
  remove(id) {
22094
22231
  db.prepare("DELETE FROM aml_datasets WHERE id = ?").run(id);
22232
+ },
22233
+ /** 元数据局部更新(备注;CRUD 的 U) */
22234
+ updateNote(id, note) {
22235
+ db.prepare("UPDATE aml_datasets SET note = ? WHERE id = ?").run(note, id);
22095
22236
  }
22096
22237
  },
22097
22238
  // ----- jobs -----
@@ -22142,6 +22283,14 @@ function createAmlRepo(db) {
22142
22283
  },
22143
22284
  requeue(id) {
22144
22285
  jobRetryBump.run(id);
22286
+ },
22287
+ remove(id) {
22288
+ db.prepare("DELETE FROM aml_jobs WHERE id = ?").run(id);
22289
+ },
22290
+ /** 删除作业时级联清实验谱系(否则实验行成为悬挂元数据) */
22291
+ removeExperimentsOf(jobId) {
22292
+ const r = db.prepare("DELETE FROM aml_experiments WHERE job_id = ?").run(jobId);
22293
+ return Number(r.changes);
22145
22294
  }
22146
22295
  },
22147
22296
  // ----- experiments -----
@@ -22235,23 +22384,75 @@ function createAmlRepo(db) {
22235
22384
  },
22236
22385
  markPruned(id) {
22237
22386
  modelPrune.run(id);
22387
+ },
22388
+ remove(id) {
22389
+ db.prepare("DELETE FROM aml_models WHERE id = ?").run(id);
22390
+ },
22391
+ updateNote(id, note) {
22392
+ db.prepare("UPDATE aml_models SET note = ? WHERE id = ?").run(note, id);
22238
22393
  }
22239
22394
  }
22240
22395
  };
22241
22396
  }
22242
22397
 
22243
22398
  const g$5 = globalThis;
22244
- function configureAmlRuntime(db, dataDir) {
22399
+ const README = `# AML \u5E73\u53F0\u6570\u636E\u76EE\u5F55
22400
+
22401
+ \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
22402
+
22403
+ ## \u76EE\u5F55\u7EA6\u5B9A
22404
+
22405
+ | \u8DEF\u5F84 | \u5185\u5BB9 | \u53EF\u5426\u624B\u5220 |
22406
+ | --- | --- | --- |
22407
+ | \`.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 |
22408
+ | \`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 |
22409
+ | \`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 |
22410
+ | \`models/<id>/\` | \u6A21\u578B\u5B9E\u4F53:\`model.onnx\` + \`io_spec.json\`(\u8F93\u5165\u8F93\u51FA\u5951\u7EA6,\u4E0D\u53EF\u53D8) | \u540C\u4E0A |
22411
+ | \`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 |
22412
+ | \`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 |
22413
+
22414
+ ## \u5143\u6570\u636E\u4E0E\u5B9E\u4F53\u7684\u5173\u7CFB
22415
+
22416
+ \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
22417
+ \u4E24\u8005\u4EE5 id \u4E00\u4E00\u5BF9\u5E94;REST \u7684 \`/api/workshop/aml/*\` \u63D0\u4F9B\u5143\u6570\u636E CRUD,
22418
+ \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
22419
+
22420
+ ## \u8FC1\u79FB\u5230\u522B\u7684\u673A\u5668
22421
+
22422
+ \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,
22423
+ \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
22424
+ `;
22425
+ const GITIGNORE = `# AML \u8FD0\u884C\u65F6\u8D44\u4EA7:\u4F53\u79EF\u5927\u4E14\u4E0E\u673A\u5668\u7ED1\u5B9A,\u4E0D\u5165\u5E93
22426
+ .venv/
22427
+ tools/
22428
+ runtime/
22429
+ datasets/
22430
+ jobs/
22431
+ models/
22432
+ `;
22433
+ function configureAmlRuntime(db, _dataDir) {
22245
22434
  if (g$5.__amlRuntime) return g$5.__amlRuntime;
22246
- const root = join(dataDir, "aml");
22435
+ const resolved = resolveAmlRoot({});
22436
+ const root = ensureAmlDir();
22247
22437
  const rt = {
22248
22438
  db,
22249
22439
  root,
22440
+ rootMode: resolved.mode,
22441
+ projectRoot: resolved.projectRoot,
22250
22442
  repo: createAmlRepo(db),
22251
22443
  datasetsDir: join(root, "datasets"),
22252
22444
  jobsDir: join(root, "jobs"),
22253
- modelsDir: join(root, "models")
22445
+ modelsDir: join(root, "models"),
22446
+ venvDir: join(root, ".venv"),
22447
+ toolsDir: join(root, "tools"),
22448
+ runtimeDir: join(root, "runtime")
22254
22449
  };
22450
+ mkdirSync(rt.venvDir, { recursive: true });
22451
+ try {
22452
+ if (!existsSync(join(root, "README.md"))) writeFileSync(join(root, "README.md"), README);
22453
+ if (!existsSync(join(root, ".gitignore"))) writeFileSync(join(root, ".gitignore"), GITIGNORE);
22454
+ } catch {
22455
+ }
22255
22456
  g$5.__amlRuntime = rt;
22256
22457
  return rt;
22257
22458
  }
@@ -22261,6 +22462,24 @@ function getAmlRuntime() {
22261
22462
  }
22262
22463
  return g$5.__amlRuntime;
22263
22464
  }
22465
+ function amlRootSourceLabel(mode) {
22466
+ switch (mode) {
22467
+ case "env":
22468
+ return "\u73AF\u5883\u53D8\u91CF AW_AML_DIR \u6307\u5B9A";
22469
+ case "repo":
22470
+ return "\u9879\u76EE\u68C0\u51FA\u6839(./aml)";
22471
+ case "home":
22472
+ return "\u7528\u6237\u914D\u7F6E\u6839(~/.AgentWorkShop/aml)";
22473
+ default:
22474
+ return "\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55(./aml)";
22475
+ }
22476
+ }
22477
+ function isInsideAmlRoot(rt, p) {
22478
+ const norm = (s) => s.replace(/\\/g, "/").replace(/\/+$/, "");
22479
+ const root = norm(rt.root);
22480
+ const target = norm(p);
22481
+ return target === root || target.startsWith(`${root}/`);
22482
+ }
22264
22483
 
22265
22484
  const amlDatasetSpecSchema = z.object({
22266
22485
  lineId: z.string().min(1),
@@ -22799,6 +23018,7 @@ async function buildDataset(spec, by) {
22799
23018
  beatMs: beat
22800
23019
  };
22801
23020
  writeFileSync(join(dir, "manifest.json"), JSON.stringify(manifest, null, 2));
23021
+ writeFileSync(join(dir, "spec.json"), JSON.stringify(spec, null, 2));
22802
23022
  const nodeSummaries = [];
22803
23023
  for (const n of order) {
22804
23024
  bucketsPart.train.flatMap(() => []);
@@ -23056,8 +23276,11 @@ function killHarnessProcess(pid) {
23056
23276
  }
23057
23277
 
23058
23278
  const log$l = createLogger("aml.py");
23279
+ const UV_INSTALL_TIMEOUT_MS = 10 * 6e4;
23280
+ const VENV_CREATE_TIMEOUT_MS = 5 * 6e4;
23281
+ const PIP_INSTALL_TIMEOUT_MS = 20 * 6e4;
23059
23282
  const g$4 = globalThis;
23060
- function runCapture(cmd, args, timeoutMs) {
23283
+ function runCapture(cmd, args, timeoutMs, onData) {
23061
23284
  return new Promise((resolve) => {
23062
23285
  var _a, _b;
23063
23286
  const child = spawnLineProcess(cmd, args);
@@ -23070,10 +23293,14 @@ function runCapture(cmd, args, timeoutMs) {
23070
23293
  [timeout ${timeoutMs}ms]` });
23071
23294
  }, timeoutMs);
23072
23295
  (_a = child.stdout) == null ? void 0 : _a.on("data", (d) => {
23073
- out += String(d);
23296
+ const s = String(d);
23297
+ out += s;
23298
+ onData == null ? void 0 : onData(s);
23074
23299
  });
23075
23300
  (_b = child.stderr) == null ? void 0 : _b.on("data", (d) => {
23076
- err += String(d);
23301
+ const s = String(d);
23302
+ err += s;
23303
+ onData == null ? void 0 : onData(s);
23077
23304
  });
23078
23305
  child.on("error", (e) => {
23079
23306
  clearTimeout(timer);
@@ -23085,21 +23312,152 @@ function runCapture(cmd, args, timeoutMs) {
23085
23312
  });
23086
23313
  });
23087
23314
  }
23315
+ function uvBinName() {
23316
+ return process.platform === "win32" ? "uv.exe" : "uv";
23317
+ }
23318
+ function looksLikePath(name) {
23319
+ return name.includes("/") || name.includes("\\") || /^[A-Za-z]:/.test(name);
23320
+ }
23321
+ function readUvRecord(rt) {
23322
+ try {
23323
+ const p = join(rt.runtimeDir, "uv.json");
23324
+ if (!existsSync(p)) return null;
23325
+ const parsed = JSON.parse(readFileSync(p, "utf8"));
23326
+ return parsed && typeof parsed.uvPath === "string" ? parsed : null;
23327
+ } catch {
23328
+ return null;
23329
+ }
23330
+ }
23331
+ function writeUvRecord(rt, rec) {
23332
+ try {
23333
+ mkdirSync(rt.runtimeDir, { recursive: true });
23334
+ writeFileSync(join(rt.runtimeDir, "uv.json"), JSON.stringify(rec, null, 2));
23335
+ } catch (err) {
23336
+ log$l.warn("[aml-uv] \u5B89\u88C5\u8BB0\u5F55\u843D\u76D8\u5931\u8D25:", err == null ? void 0 : err.message);
23337
+ }
23338
+ }
23339
+ function findUvInDir(dir, depth = 3) {
23340
+ if (depth < 0 || !existsSync(dir)) return null;
23341
+ let entries;
23342
+ try {
23343
+ entries = readdirSync(dir);
23344
+ } catch {
23345
+ return null;
23346
+ }
23347
+ const want = uvBinName();
23348
+ for (const e of entries) {
23349
+ if (e === want) {
23350
+ const p = join(dir, e);
23351
+ try {
23352
+ if (statSync(p).isFile()) return p;
23353
+ } catch {
23354
+ }
23355
+ }
23356
+ }
23357
+ for (const e of entries) {
23358
+ if (e === "bin" || e === "Scripts" || e === "tools") {
23359
+ const p = join(dir, e, want);
23360
+ try {
23361
+ if (existsSync(p) && statSync(p).isFile()) return p;
23362
+ } catch {
23363
+ }
23364
+ }
23365
+ }
23366
+ for (const e of entries) {
23367
+ const p = join(dir, e);
23368
+ try {
23369
+ if (!statSync(p).isDirectory()) continue;
23370
+ } catch {
23371
+ continue;
23372
+ }
23373
+ const hit = findUvInDir(p, depth - 1);
23374
+ if (hit) return hit;
23375
+ }
23376
+ return null;
23377
+ }
23378
+ function platformPythonDir() {
23379
+ var _a, _b, _c;
23380
+ const rel = join("server", "services", "workshop", "aml", "python");
23381
+ const fallback = join(process.cwd(), rel);
23382
+ const candidates = [
23383
+ (_a = process.env.AML_PYHOME) != null ? _a : "",
23384
+ fallback,
23385
+ join(process.cwd(), ".output", ".AgentWorkShop", "aml-python"),
23386
+ join((_b = process.env.AW_PACKAGE_ROOT) != null ? _b : process.cwd(), rel),
23387
+ join((_c = process.env.AW_PACKAGE_ROOT) != null ? _c : process.cwd(), ".output", ".AgentWorkShop", "aml-python")
23388
+ ];
23389
+ for (const c of candidates) {
23390
+ if (c && existsSync(join(c, "amlkit.py"))) return c;
23391
+ }
23392
+ return fallback;
23393
+ }
23394
+ function venvDir(rt) {
23395
+ return rt.venvDir || join(rt.root, ".venv");
23396
+ }
23397
+ function venvPythonPath(rt) {
23398
+ return process.platform === "win32" ? join(venvDir(rt), "Scripts", "python.exe") : join(venvDir(rt), "bin", "python");
23399
+ }
23400
+ function resetProbeCache() {
23401
+ g$4.__amlPyProbe = void 0;
23402
+ g$4.__amlUvProbe = void 0;
23403
+ g$4.__amlVenvPromise = void 0;
23404
+ }
23405
+ async function probeUvBinary(candidate, source) {
23406
+ var _a;
23407
+ const resolved = (_a = resolveOnPath(candidate)) != null ? _a : looksLikePath(candidate) || existsSync(candidate) ? candidate : void 0;
23408
+ if (!resolved) return null;
23409
+ if (!existsSync(resolved)) return null;
23410
+ const r = await runCapture(resolved, ["--version"], 15e3);
23411
+ if (r.code !== 0) return null;
23412
+ return { ok: true, path: resolved, version: (r.out || r.err).trim().split("\n")[0], source };
23413
+ }
23414
+ async function probeUv(rt) {
23415
+ if (g$4.__amlUvProbe) return g$4.__amlUvProbe;
23416
+ const s = amlSettings();
23417
+ const attempts = [];
23418
+ if (s.python.uvBin) attempts.push([s.python.uvBin, "config"]);
23419
+ const record = rt ? readUvRecord(rt) : null;
23420
+ if (rt) {
23421
+ const projectHit = findUvInDir(rt.toolsDir);
23422
+ if (projectHit) attempts.push([projectHit, "project"]);
23423
+ }
23424
+ if (record == null ? void 0 : record.uvPath) attempts.push([record.uvPath, "state"]);
23425
+ if (!s.python.uvBin) attempts.push(["uv", "path"]);
23426
+ for (const [candidate, source] of attempts) {
23427
+ const hit = await probeUvBinary(candidate, source);
23428
+ if (hit) {
23429
+ g$4.__amlUvProbe = hit;
23430
+ log$l.info(`[aml-uv] \u63A2\u6D4B\u5230 uv ${hit.version} @ ${hit.path} (\u6765\u6E90=${source})`);
23431
+ return hit;
23432
+ }
23433
+ }
23434
+ if (process.platform !== "win32" && !s.python.uvBin) {
23435
+ const r = await runCapture("which", ["uv"], 5e3);
23436
+ const p = r.out.trim().split("\n")[0];
23437
+ if (r.code === 0 && p) {
23438
+ const hit = await probeUvBinary(p, "path");
23439
+ if (hit) {
23440
+ g$4.__amlUvProbe = hit;
23441
+ return hit;
23442
+ }
23443
+ }
23444
+ }
23445
+ const miss = {
23446
+ ok: false,
23447
+ 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"
23448
+ };
23449
+ g$4.__amlUvProbe = miss;
23450
+ return miss;
23451
+ }
23088
23452
  async function probePython() {
23089
23453
  var _a;
23090
23454
  if (g$4.__amlPyProbe) return g$4.__amlPyProbe;
23091
23455
  const s = amlSettings();
23456
+ const rt = safeRuntime();
23457
+ const uv = rt ? await probeUv(rt) : void 0;
23092
23458
  const candidates = s.python.pythonBin ? [s.python.pythonBin] : process.platform === "win32" ? ["python", "py"] : ["python3", "python"];
23093
- let uvPath;
23094
- const uvName = s.python.uvBin || "uv";
23095
- const uvResolved = resolveOnPath(uvName);
23096
- if (uvResolved) uvPath = uvResolved;
23097
- else if (!s.python.uvBin && process.platform !== "win32") {
23098
- const r = await runCapture("which", [uvName], 5e3);
23099
- if (r.code === 0 && r.out.trim()) uvPath = r.out.trim().split("\n")[0];
23100
- }
23101
23459
  for (const name of candidates) {
23102
- const resolved = (_a = resolveOnPath(name)) != null ? _a : name.includes("/") || name.includes("\\") || /^[A-Za-z]:/.test(name) ? name : void 0;
23460
+ const resolved = (_a = resolveOnPath(name)) != null ? _a : looksLikePath(name) ? name : void 0;
23103
23461
  if (!resolved || !existsSync(resolved)) continue;
23104
23462
  const probe = await runCapture(resolved, ["--version"], 1e4);
23105
23463
  if (probe.code === 0) {
@@ -23108,83 +23466,180 @@ async function probePython() {
23108
23466
  ok: true,
23109
23467
  pythonPath: resolved,
23110
23468
  version,
23111
- uvPath
23469
+ uvPath: (uv == null ? void 0 : uv.ok) ? uv.path : void 0
23112
23470
  };
23113
23471
  g$4.__amlPyProbe = result2;
23114
- log$l.info(`[aml-python] \u63A2\u6D4B\u6210\u529F:${version} @ ${resolved}${uvPath ? ` (uv: ${uvPath})` : ""}`);
23472
+ 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)"}`);
23115
23473
  return result2;
23116
23474
  }
23117
23475
  }
23118
23476
  const result = {
23119
23477
  ok: false,
23120
- uvPath,
23478
+ uvPath: (uv == null ? void 0 : uv.ok) ? uv.path : void 0,
23121
23479
  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"
23122
23480
  };
23123
23481
  g$4.__amlPyProbe = result;
23124
23482
  return result;
23125
23483
  }
23484
+ function safeRuntime() {
23485
+ var _a;
23486
+ try {
23487
+ return (_a = g$4.__amlRuntime) != null ? _a : null;
23488
+ } catch {
23489
+ return null;
23490
+ }
23491
+ }
23492
+ async function installUv(rt, onLog) {
23493
+ var _a;
23494
+ const lines = [];
23495
+ const emit = (s) => {
23496
+ const t = s.trimEnd();
23497
+ if (t) {
23498
+ lines.push(t);
23499
+ onLog == null ? void 0 : onLog(t);
23500
+ }
23501
+ };
23502
+ const existing = await probeUvBinary((_a = findUvInDir(rt.toolsDir)) != null ? _a : "", "project");
23503
+ if ((existing == null ? void 0 : existing.ok) && existing.path) {
23504
+ emit(`\u5DF2\u5B58\u5728\u53EF\u7528 uv:${existing.version} @ ${existing.path}`);
23505
+ return { ok: true, uvPath: existing.path, version: existing.version, method: "existing", log: lines.join("\n") };
23506
+ }
23507
+ mkdirSync(rt.toolsDir, { recursive: true });
23508
+ const errors = [];
23509
+ emit(`[1/2] \u4F7F\u7528\u5B98\u65B9\u5B89\u88C5\u811A\u672C\u5B89\u88C5 uv \u5230 ${rt.toolsDir} \u2026`);
23510
+ const script = await runOfficialInstaller(rt, emit);
23511
+ if (script.ok) {
23512
+ const hit = findUvInDir(rt.toolsDir);
23513
+ if (hit) {
23514
+ const v = await runCapture(hit, ["--version"], 15e3);
23515
+ const version = (v.out || v.err).trim().split("\n")[0];
23516
+ writeUvRecord(rt, { uvPath: hit, version, installedAt: (/* @__PURE__ */ new Date()).toISOString(), installDir: rt.toolsDir, method: "official-script" });
23517
+ resetProbeCache();
23518
+ emit(`\u5B89\u88C5\u6210\u529F:${version} @ ${hit}`);
23519
+ return { ok: true, uvPath: hit, version, method: "official-script", log: lines.join("\n") };
23520
+ }
23521
+ errors.push("\u5B98\u65B9\u811A\u672C\u6267\u884C\u5B8C\u6210\u4F46\u672A\u5728 tools \u76EE\u5F55\u627E\u5230 uv \u53EF\u6267\u884C\u6587\u4EF6");
23522
+ } else {
23523
+ errors.push(script.err);
23524
+ }
23525
+ emit("[2/2] \u56DE\u9000\u65B9\u6848:python -m pip install --target tools uv");
23526
+ const probe = await probePython();
23527
+ if (probe.ok && probe.pythonPath) {
23528
+ const pipArgs = ["-m", "pip", "install", "--upgrade", "--target", rt.toolsDir, "uv"];
23529
+ const idx = amlSettings().python.indexUrl;
23530
+ if (idx) pipArgs.push("--index-url", idx);
23531
+ const r = await runCapture(probe.pythonPath, pipArgs, UV_INSTALL_TIMEOUT_MS, emit);
23532
+ if (r.code === 0) {
23533
+ const hit = findUvInDir(rt.toolsDir);
23534
+ if (hit) {
23535
+ try {
23536
+ chmodSync(hit, 493);
23537
+ } catch {
23538
+ }
23539
+ const v = await runCapture(hit, ["--version"], 15e3);
23540
+ const version = (v.out || v.err).trim().split("\n")[0];
23541
+ writeUvRecord(rt, { uvPath: hit, version, installedAt: (/* @__PURE__ */ new Date()).toISOString(), installDir: rt.toolsDir, method: "pip-target" });
23542
+ resetProbeCache();
23543
+ emit(`\u5B89\u88C5\u6210\u529F:${version} @ ${hit}`);
23544
+ return { ok: true, uvPath: hit, version, method: "pip-target", log: lines.join("\n") };
23545
+ }
23546
+ errors.push("pip \u5B89\u88C5\u6210\u529F\u4F46\u672A\u627E\u5230 uv \u53EF\u6267\u884C\u6587\u4EF6");
23547
+ } else {
23548
+ errors.push(`pip \u5B89\u88C5\u5931\u8D25:${(r.err || r.out).slice(-400)}`);
23549
+ }
23550
+ } else {
23551
+ errors.push(`\u65E0\u53EF\u7528 Python \u89E3\u91CA\u5668:${probe.reason}`);
23552
+ }
23553
+ emit("\u5B89\u88C5\u5931\u8D25\u3002");
23554
+ return { ok: false, method: "none", log: `${lines.join("\n")}
23555
+
23556
+ --- \u5931\u8D25\u539F\u56E0 ---
23557
+ ${errors.join("\n")}` };
23558
+ }
23559
+ const PS_QUOTE_ESC = "''";
23560
+ async function runOfficialInstaller(rt, emit) {
23561
+ if (process.platform === "win32") {
23562
+ const ps = [
23563
+ `$env:UV_INSTALL_DIR='${rt.toolsDir.replace(/'/g, PS_QUOTE_ESC)}'`,
23564
+ `$env:UV_NO_MODIFY_PATH='1'`,
23565
+ "irm https://astral.sh/uv/install.ps1 | iex"
23566
+ ].join("; ");
23567
+ const r2 = await runCapture("powershell", ["-ExecutionPolicy", "Bypass", "-NoProfile", "-NonInteractive", "-Command", ps], UV_INSTALL_TIMEOUT_MS, emit);
23568
+ return { ok: r2.code === 0, err: `\u5B98\u65B9\u811A\u672C\u5931\u8D25(exit=${r2.code}):${(r2.err || r2.out).slice(-400)}` };
23569
+ }
23570
+ const sh = `curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR='${rt.toolsDir.replace(/'/g, `'\\''`)}' UV_NO_MODIFY_PATH=1 sh`;
23571
+ const r = await runCapture("sh", ["-c", sh], UV_INSTALL_TIMEOUT_MS, emit);
23572
+ return { ok: r.code === 0, err: `\u5B98\u65B9\u811A\u672C\u5931\u8D25(exit=${r.code}):${(r.err || r.out).slice(-400)}` };
23573
+ }
23126
23574
  function requirementsHash() {
23127
23575
  const reqPath = join(platformPythonDir(), "requirements.txt");
23128
23576
  const content = existsSync(reqPath) ? readFileSync(reqPath, "utf8") : "";
23129
23577
  const idx = amlSettings().python.indexUrl;
23130
23578
  return createHash("sha256").update(content).update(idx).digest("hex").slice(0, 12);
23131
23579
  }
23132
- function platformPythonDir() {
23133
- var _a, _b;
23134
- const fallback = join(process.cwd(), "server", "services", "workshop", "aml", "python");
23135
- const candidates = [
23136
- (_a = process.env.AML_PYHOME) != null ? _a : "",
23137
- fallback,
23138
- join((_b = process.env.AW_PACKAGE_ROOT) != null ? _b : process.cwd(), "server", "services", "workshop", "aml", "python")
23139
- ];
23140
- for (const c of candidates) {
23141
- if (c && existsSync(join(c, "amlkit.py"))) return c;
23142
- }
23143
- return fallback;
23144
- }
23145
- function venvDir(rt) {
23146
- return join(rt.root, "runtime", "venv");
23580
+ function venvMarkerPath(rt) {
23581
+ return join(venvDir(rt), `.aml-ok-${requirementsHash()}`);
23147
23582
  }
23148
- function venvPythonPath(rt) {
23149
- return process.platform === "win32" ? join(venvDir(rt), "Scripts", "python.exe") : join(venvDir(rt), "bin", "python");
23583
+ function isVenvReady(rt) {
23584
+ return existsSync(venvMarkerPath(rt)) && existsSync(venvPythonPath(rt));
23150
23585
  }
23151
- async function ensureVenv(rt) {
23152
- if (g$4.__amlVenvPromise) return g$4.__amlVenvPromise;
23153
- g$4.__amlVenvPromise = (async () => {
23586
+ async function ensureVenv(rt, opts = {}) {
23587
+ if (opts.force) {
23588
+ try {
23589
+ rmSync(venvDir(rt), { recursive: true, force: true });
23590
+ emitLog(opts.onLog, `\u5DF2\u6E05\u7406\u65E7\u73AF\u5883:${venvDir(rt)}`);
23591
+ } catch (err) {
23592
+ throw new AppError(500, "AML_VENV_FAILED", `\u6E05\u7406\u65E7\u73AF\u5883\u5931\u8D25(\u53EF\u80FD\u4ECD\u88AB\u8FDB\u7A0B\u5360\u7528):${err.message}`);
23593
+ }
23594
+ g$4.__amlVenvPromise = void 0;
23595
+ }
23596
+ if (g$4.__amlVenvPromise && !opts.force) return g$4.__amlVenvPromise;
23597
+ const task = (async () => {
23598
+ const vdir = venvDir(rt);
23599
+ const vpy = venvPythonPath(rt);
23600
+ if (isVenvReady(rt)) {
23601
+ emitLog(opts.onLog, `\u73AF\u5883\u5DF2\u5C31\u7EEA(\u6807\u8BB0 ${requirementsHash()}):${vdir}`);
23602
+ return vpy;
23603
+ }
23154
23604
  const probe = await probePython();
23155
23605
  if (!probe.ok || !probe.pythonPath) {
23156
23606
  throw new AppError(503, "AML_PYTHON_MISSING", `\u8BAD\u7EC3\u8FD0\u884C\u65F6\u4E0D\u53EF\u7528:${probe.reason}`);
23157
23607
  }
23158
- const vdir = venvDir(rt);
23159
- const vpy = venvPythonPath(rt);
23160
- const marker = join(vdir, `.aml-ok-${requirementsHash()}`);
23161
- if (existsSync(marker) && existsSync(vpy)) return vpy;
23162
23608
  const s = amlSettings();
23163
23609
  const idxArgs = s.python.indexUrl ? ["--index-url", s.python.indexUrl] : [];
23164
23610
  const reqPath = join(platformPythonDir(), "requirements.txt");
23165
- log$l.info("[aml-python] \u5F00\u59CB venv \u4F9B\u7ED9(\u9996\u6B21\u53EF\u80FD\u9700\u6570\u5206\u949F\u4E0B\u8F7D\u4F9D\u8D56)\u2026");
23611
+ mkdirSync(rt.root, { recursive: true });
23612
+ emitLog(opts.onLog, `\u5F00\u59CB\u4F9B\u7ED9 Python \u73AF\u5883(\u9996\u6B21\u53EF\u80FD\u9700\u6570\u5206\u949F\u4E0B\u8F7D\u4F9D\u8D56)\u2026`);
23166
23613
  if (probe.uvPath) {
23167
- const mk = await runCapture(probe.uvPath, ["venv", vdir, "--python", probe.pythonPath], 12e4);
23614
+ emitLog(opts.onLog, `uv venv ${vdir} --python ${probe.pythonPath}`);
23615
+ const mk = await runCapture(probe.uvPath, ["venv", vdir, "--python", probe.pythonPath], VENV_CREATE_TIMEOUT_MS, opts.onLog);
23168
23616
  if (mk.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `uv venv \u5931\u8D25:${mk.err.slice(-400)}`);
23169
- const inst = await runCapture(probe.uvPath, ["pip", "install", "--python", vpy, "-r", reqPath, ...idxArgs], 20 * 6e4);
23617
+ emitLog(opts.onLog, `uv pip install -r requirements.txt`);
23618
+ const inst = await runCapture(probe.uvPath, ["pip", "install", "--python", vpy, "-r", reqPath, ...idxArgs], PIP_INSTALL_TIMEOUT_MS, opts.onLog);
23170
23619
  if (inst.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25:${(inst.err || inst.out).slice(-400)}`);
23171
23620
  } else {
23172
- const mk = await runCapture(probe.pythonPath, ["-m", "venv", vdir], 12e4);
23621
+ emitLog(opts.onLog, `\u672A\u68C0\u6D4B\u5230 uv,\u56DE\u9000 python -m venv(\u8F83\u6162)`);
23622
+ const mk = await runCapture(probe.pythonPath, ["-m", "venv", vdir], VENV_CREATE_TIMEOUT_MS, opts.onLog);
23173
23623
  if (mk.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `python -m venv \u5931\u8D25:${mk.err.slice(-400)}`);
23174
- const inst = await runCapture(vpy, ["-m", "pip", "install", "-r", reqPath, ...idxArgs], 20 * 6e4);
23624
+ const inst = await runCapture(vpy, ["-m", "pip", "install", "-r", reqPath, ...idxArgs], PIP_INSTALL_TIMEOUT_MS, opts.onLog);
23175
23625
  if (inst.code !== 0) throw new AppError(500, "AML_VENV_FAILED", `pip install \u5931\u8D25:${(inst.err || inst.out).slice(-400)}`);
23176
23626
  }
23177
- writeFileSync(marker, (/* @__PURE__ */ new Date()).toISOString());
23627
+ writeFileSync(venvMarkerPath(rt), (/* @__PURE__ */ new Date()).toISOString());
23628
+ emitLog(opts.onLog, "\u73AF\u5883\u4F9B\u7ED9\u5B8C\u6210\u3002");
23178
23629
  log$l.info("[aml-python] venv \u4F9B\u7ED9\u5B8C\u6210");
23179
23630
  return vpy;
23180
23631
  })();
23632
+ g$4.__amlVenvPromise = task;
23181
23633
  try {
23182
- return await g$4.__amlVenvPromise;
23634
+ return await task;
23183
23635
  } catch (err) {
23184
23636
  g$4.__amlVenvPromise = void 0;
23185
23637
  throw err;
23186
23638
  }
23187
23639
  }
23640
+ function emitLog(onLog, line) {
23641
+ onLog == null ? void 0 : onLog(line);
23642
+ }
23188
23643
  function jobEnv(rt, jobDir) {
23189
23644
  const platformPyDir = platformPythonDir();
23190
23645
  const pick = (k) => process.env[k] ? `${k}=${process.env[k]}` : "";
@@ -23196,6 +23651,8 @@ function jobEnv(rt, jobDir) {
23196
23651
  return {
23197
23652
  ...sysEnv,
23198
23653
  AML_JOB_DIR: jobDir,
23654
+ // 资产根暴露给训练脚本:模型/数据集实体都在 ./aml 下,脚本按相对路径读取
23655
+ AML_ROOT: rt.root,
23199
23656
  PYTHONPATH: platformPyDir,
23200
23657
  PYTHONUNBUFFERED: "1",
23201
23658
  PYTHONDONTWRITEBYTECODE: "1",
@@ -23317,6 +23774,10 @@ function registerModelFromJob(jobId, gates, metricsJson) {
23317
23774
  writeFileSync(join(modelDir, "REGISTERED"), now);
23318
23775
  }
23319
23776
  const ioSpec = buildIoSpec(dataset.path, job.purpose);
23777
+ try {
23778
+ writeFileSync(join(modelDir, "io_spec.json"), JSON.stringify(ioSpec, null, 2));
23779
+ } catch {
23780
+ }
23320
23781
  rt.repo.model.insert({
23321
23782
  id: modelId,
23322
23783
  experimentId: expId,
@@ -23939,21 +24400,12 @@ async function runtimeStatus() {
23939
24400
  const st = state$1();
23940
24401
  return {
23941
24402
  python: { ok: probe.ok, version: probe.version, reason: probe.reason },
23942
- venvReady: probe.ok ? existsSync(join(venvDirOf(rt), `.aml-ok-${requirementsHashOf()}`)) : false,
24403
+ venvReady: probe.ok ? isVenvReady(rt) : false,
24404
+ amlRoot: rt.root,
23943
24405
  queued: st.queue.length + rt.repo.job.list({ status: "queued" }).length,
23944
24406
  running: st.running.size
23945
24407
  };
23946
24408
  }
23947
- function venvDirOf(rt) {
23948
- return join(rt.root, "runtime", "venv");
23949
- }
23950
- function requirementsHashOf() {
23951
- try {
23952
- return requirementsHash();
23953
- } catch {
23954
- return "";
23955
- }
23956
- }
23957
24409
 
23958
24410
  const log$j = createLogger("aml.predict");
23959
24411
  const g$2 = globalThis;
@@ -28866,12 +29318,11 @@ class OpenCodeAgentImpl extends BaseAgentImpl {
28866
29318
  });
28867
29319
  __publicField$c(this, "config");
28868
29320
  __publicField$c(this, "agentInfo", null);
28869
- __publicField$c(this, "bridgeCtx", {
28870
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
28871
- state: this.toolState,
28872
- getWorkspace: () => this.workspace
28873
- });
28874
- __publicField$c(this, "agentRole", "worker");
29321
+ // 注意:不要在本类重新声明 bridgeCtx / agentRole —— 它们由 BaseAgentImpl 持有。
29322
+ // 子类字段初始化器在 super() **之后**执行,会用一个空的 identity 覆盖基类已装配好的
29323
+ // bridgeCtx(class field 遮蔽),导致 host tool 桥拿到的 agentId 恒为 '' ——
29324
+ // 所有按 agentId 的鉴权(节点绑定/工业工具)都会误判为"未绑定"。
29325
+ // 同理 agentRole 被重置为 'worker',lead 身份传不到桥里。
28875
29326
  // 服务进程与 API 面
28876
29327
  __publicField$c(this, "child", null);
28877
29328
  __publicField$c(this, "baseUrl", "");
@@ -29889,12 +30340,10 @@ class CodexAgentImpl extends BaseAgentImpl {
29889
30340
  });
29890
30341
  __publicField$a(this, "config");
29891
30342
  __publicField$a(this, "agentInfo", null);
29892
- __publicField$a(this, "bridgeCtx", {
29893
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
29894
- state: this.toolState,
29895
- getWorkspace: () => this.workspace
29896
- });
29897
- __publicField$a(this, "agentRole", "worker");
30343
+ // 不要重新声明 bridgeCtx / agentRole(由 BaseAgentImpl 持有)。
30344
+ // 子类字段初始化器在 super() 之后执行,会用空 identity 遮蔽基类已装配好的 bridgeCtx,
30345
+ // 使 host tool 桥的 agentId 恒为 '' → 按 agentId 的鉴权全部误判(节点绑定/工业工具)。
30346
+ // 同理 agentRole 会被重置为 'worker',lead 身份丢失。
29898
30347
  __publicField$a(this, "client", null);
29899
30348
  __publicField$a(this, "clientStarting", null);
29900
30349
  __publicField$a(this, "threadId", null);
@@ -30502,12 +30951,10 @@ class DshAgentImpl extends BaseAgentImpl {
30502
30951
  });
30503
30952
  __publicField$9(this, "config");
30504
30953
  __publicField$9(this, "agentInfo", null);
30505
- __publicField$9(this, "bridgeCtx", {
30506
- identity: { agentId: "", channelId: "", role: "worker", name: "agent" },
30507
- state: this.toolState,
30508
- getWorkspace: () => this.workspace
30509
- });
30510
- __publicField$9(this, "agentRole", "worker");
30954
+ // 不要重新声明 bridgeCtx / agentRole(由 BaseAgentImpl 持有)。
30955
+ // 子类字段初始化器在 super() 之后执行,会用空 identity 遮蔽基类已装配好的 bridgeCtx,
30956
+ // 使 host tool 桥的 agentId 恒为 '' → 按 agentId 的鉴权全部误判(节点绑定/工业工具)。
30957
+ // 同理 agentRole 会被重置为 'worker',lead 身份丢失。
30511
30958
  __publicField$9(this, "client", null);
30512
30959
  __publicField$9(this, "clientStarting", null);
30513
30960
  __publicField$9(this, "sessionId", null);
@@ -33965,7 +34412,7 @@ class SchedulerLoop {
33965
34412
  }
33966
34413
  /** 内置规则引擎兜底(harness 无关) */
33967
34414
  ruleEngine(snapshot) {
33968
- var _a, _b;
34415
+ var _a, _b, _c;
33969
34416
  const decisions = [];
33970
34417
  const { tasks, members, now } = snapshot;
33971
34418
  this.refreshIdle(members, now);
@@ -34058,7 +34505,11 @@ class SchedulerLoop {
34058
34505
  } else {
34059
34506
  this.notified.delete(task.id);
34060
34507
  this.lastProgress.delete(task.id);
34061
- decisions.push({ kind: "cancel", taskId: task.id });
34508
+ const didWork = task.progress > 0 || ((_c = task.artifacts) != null ? _c : []).some((a) => {
34509
+ var _a2;
34510
+ return a.name !== "input" && ((_a2 = a.parts) != null ? _a2 : []).length > 0;
34511
+ });
34512
+ decisions.push(didWork ? { kind: "complete", taskId: task.id } : { kind: "cancel", taskId: task.id });
34062
34513
  }
34063
34514
  }
34064
34515
  for (const task of tasks) {
@@ -35395,6 +35846,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
35395
35846
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
35396
35847
  const log$1 = createLogger("workshop.manager");
35397
35848
  function instanceToAgentInfo(m) {
35849
+ var _a;
35398
35850
  return {
35399
35851
  id: m.id,
35400
35852
  channelId: m.channelId,
@@ -35403,7 +35855,11 @@ function instanceToAgentInfo(m) {
35403
35855
  role: m.role,
35404
35856
  config: parseJson(m.configJson, {}),
35405
35857
  token: m.token,
35406
- enabled: m.enabled
35858
+ enabled: m.enabled,
35859
+ /** 来源 Agent 模板 id(手工成员为 null)。
35860
+ * 外部调用方需要它把「模板 → 已部署实例」对上 —— Agent↔节点绑定必须落到实例 id,
35861
+ * 而绑定接口只回一个实例 id;不暴露这个字段时调用方只能靠名字猜(实测踩过)。 */
35862
+ templateId: (_a = m.templateId) != null ? _a : null
35407
35863
  };
35408
35864
  }
35409
35865
  function rowToTask(row) {
@@ -35814,6 +36270,10 @@ class AgentChannelManager {
35814
36270
  const lead = this.ensureAgentRuntime(channelId, channel.leadAgentId);
35815
36271
  if (!lead) return;
35816
36272
  const loop = new SchedulerLoop(cr, lead, {
36273
+ // 停滞窗口默认取 workshop.stall_ms(默认 5 分钟,可经设置调整):
36274
+ // 它决定"多久算停滞"以及"多久之后收口",是运维最需要按现场调的一个值;
36275
+ // 以前写死在 SchedulerLoop 构造默认值里,mock/规则引擎路径上最长要 10 分钟才可见。
36276
+ ...Number.isFinite(workshopSettings().stall_ms) ? { stallMs: workshopSettings().stall_ms } : {},
35817
36277
  ...options,
35818
36278
  // 停滞看门狗活性源:agent 最近一次工具 invoke 时刻(工具调用即健康推进)
35819
36279
  toolActivityOf: (agentId) => {
@@ -37330,6 +37790,26 @@ class AgentChannelManager {
37330
37790
  }
37331
37791
  return message;
37332
37792
  }
37793
+ /**
37794
+ * 按主键查 Channel 成员实例(跨频道)。
37795
+ * 用途:校验「Agent ↔ 工业节点绑定」的主体 —— 运行时持绑定做鉴权的是**成员实例**,
37796
+ * 不是 Agent 模板;绑到模板 id 上会得到一条永远不生效的静默绑定(实测踩过)。
37797
+ */
37798
+ findChannelAgentById(channelAgentId) {
37799
+ const row = this.deps.repos.channelAgents.findById(channelAgentId);
37800
+ return row ? { id: row.id, channelId: row.channelId, templateId: row.templateId } : void 0;
37801
+ }
37802
+ /** 某 Agent 模板已部署到哪些频道(用于把"绑错主体"的报错变成可执行提示) */
37803
+ listChannelAgentInstances(templateId) {
37804
+ return this.deps.repos.channelAgents.listByTemplate(templateId).map((r) => {
37805
+ var _a, _b;
37806
+ return {
37807
+ id: r.id,
37808
+ channelId: r.channelId,
37809
+ name: (_b = (_a = this.deps.repos.channels.findById(r.channelId)) == null ? void 0 : _a.name) != null ? _b : r.channelId
37810
+ };
37811
+ });
37812
+ }
37333
37813
  /**
37334
37814
  * 实时消息(外部/系统注入):priority=immediate → busy 时 steer 注入运行中的 omp 会话。
37335
37815
  * 触发器 requireReply=true → 接收方须回执(执行结果+所需内容,in_reply_to 关联)。
@@ -37851,7 +38331,7 @@ function workshopPlugin(nitroApp) {
37851
38331
  approvalRequests: createApprovalRequestRepo(db)
37852
38332
  });
37853
38333
  const deps = { repos, implFactory: createAgentImpl, db };
37854
- configureAmlRuntime(db, dataDir);
38334
+ configureAmlRuntime(db);
37855
38335
  recoverInterruptedJobs();
37856
38336
  startAmlRetentionTimer();
37857
38337
  const manager = createAgentChannelManager(deps);
@@ -37903,6 +38383,13 @@ workshopPlugin
37903
38383
  ];
37904
38384
 
37905
38385
  const assets = {
38386
+ "/_nuxt/36oeS8_R2.js": {
38387
+ "type": "text/javascript; charset=utf-8",
38388
+ "etag": "\"d6-9W7EHt23WjRGOYCN8bz9Yy0aMhg\"",
38389
+ "mtime": "2026-09-12T05:06:47.048Z",
38390
+ "size": 214,
38391
+ "path": "../public/_nuxt/36oeS8_R2.js"
38392
+ },
37906
38393
  "/favicon.svg": {
37907
38394
  "type": "image/svg+xml",
37908
38395
  "etag": "\"333-aFlSVm0gS1OwJAKmnnSly7X0FJ0\"",
@@ -37910,1314 +38397,1307 @@ const assets = {
37910
38397
  "size": 819,
37911
38398
  "path": "../public/favicon.svg"
37912
38399
  },
37913
- "/_nuxt/-6OnbLFb.js": {
38400
+ "/_nuxt/8NMOXZOV.js": {
37914
38401
  "type": "text/javascript; charset=utf-8",
37915
- "etag": "\"1343-vdAf4w0aJYo+a7mW3u5aS6nVAXY\"",
37916
- "mtime": "2026-09-11T13:02:27.870Z",
37917
- "size": 4931,
37918
- "path": "../public/_nuxt/-6OnbLFb.js"
38402
+ "etag": "\"c0a1-nxEv13/TZOSwXE1Uh5g6ynV5Bao\"",
38403
+ "mtime": "2026-09-12T05:06:47.049Z",
38404
+ "size": 49313,
38405
+ "path": "../public/_nuxt/8NMOXZOV.js"
37919
38406
  },
37920
- "/_nuxt/36oeS8_R2.js": {
38407
+ "/_nuxt/4sIEbgcl.js": {
37921
38408
  "type": "text/javascript; charset=utf-8",
37922
- "etag": "\"d6-9W7EHt23WjRGOYCN8bz9Yy0aMhg\"",
37923
- "mtime": "2026-09-11T13:02:27.870Z",
37924
- "size": 214,
37925
- "path": "../public/_nuxt/36oeS8_R2.js"
38409
+ "etag": "\"12211-x+AgGtu1FHNowDE8TFro0dX68yU\"",
38410
+ "mtime": "2026-09-12T05:06:47.049Z",
38411
+ "size": 74257,
38412
+ "path": "../public/_nuxt/4sIEbgcl.js"
37926
38413
  },
37927
- "/_nuxt/-nb2uqVg.js": {
38414
+ "/_nuxt/45zuyAso.js": {
37928
38415
  "type": "text/javascript; charset=utf-8",
37929
- "etag": "\"1d2b-jLwuC0KKuwuubw09IH7Tm1lfqoE\"",
37930
- "mtime": "2026-09-11T13:02:27.870Z",
37931
- "size": 7467,
37932
- "path": "../public/_nuxt/-nb2uqVg.js"
38416
+ "etag": "\"e475-il2QNg4Ih8pW97JlDDn074j4h40\"",
38417
+ "mtime": "2026-09-12T05:06:47.049Z",
38418
+ "size": 58485,
38419
+ "path": "../public/_nuxt/45zuyAso.js"
37933
38420
  },
37934
- "/_nuxt/6PZPfFcO.js": {
37935
- "type": "text/javascript; charset=utf-8",
37936
- "etag": "\"469c-Fu/GyOZbOvzzzrId7NUg9WJshE8\"",
37937
- "mtime": "2026-09-11T13:02:27.870Z",
37938
- "size": 18076,
37939
- "path": "../public/_nuxt/6PZPfFcO.js"
37940
- },
37941
- "/_nuxt/arUY5dyq2.js": {
37942
- "type": "text/javascript; charset=utf-8",
37943
- "etag": "\"59f6-d7NzfWgWT2fTR2MXV0/3pKn7pms\"",
37944
- "mtime": "2026-09-11T13:02:27.897Z",
37945
- "size": 23030,
37946
- "path": "../public/_nuxt/arUY5dyq2.js"
38421
+ "/_nuxt/agents.BV70ioCv.css": {
38422
+ "type": "text/css; charset=utf-8",
38423
+ "etag": "\"864-vWJ7ST00xR5cH47IGfSMfZZYzFk\"",
38424
+ "mtime": "2026-09-12T05:06:47.072Z",
38425
+ "size": 2148,
38426
+ "path": "../public/_nuxt/agents.BV70ioCv.css"
37947
38427
  },
37948
- "/_nuxt/4bHdIqEg.js": {
38428
+ "/_nuxt/aLLjF2K-2.js": {
37949
38429
  "type": "text/javascript; charset=utf-8",
37950
- "etag": "\"26b8e-SPbSRGs9UJ2OPJmLu810GYYm8+s\"",
37951
- "mtime": "2026-09-11T13:02:27.870Z",
37952
- "size": 158606,
37953
- "path": "../public/_nuxt/4bHdIqEg.js"
38430
+ "etag": "\"53-W7A73tjZk8gL0O4HA2ZRkaTaF64\"",
38431
+ "mtime": "2026-09-12T05:06:47.068Z",
38432
+ "size": 83,
38433
+ "path": "../public/_nuxt/aLLjF2K-2.js"
37954
38434
  },
37955
- "/_nuxt/aml.WU_bh87J.css": {
38435
+ "/_nuxt/aml.COEKNNqK.css": {
37956
38436
  "type": "text/css; charset=utf-8",
37957
- "etag": "\"2ba6-KFAbaZ9MCLBfgaOBN48bAVLUIkI\"",
37958
- "mtime": "2026-09-11T13:02:27.899Z",
37959
- "size": 11174,
37960
- "path": "../public/_nuxt/aml.WU_bh87J.css"
38437
+ "etag": "\"370f-qgRKdQJo512yCFP+pajQDl5GKi0\"",
38438
+ "mtime": "2026-09-12T05:06:47.073Z",
38439
+ "size": 14095,
38440
+ "path": "../public/_nuxt/aml.COEKNNqK.css"
37961
38441
  },
37962
- "/_nuxt/B7wL3pDk.js": {
38442
+ "/_nuxt/BBrRELH32.js": {
37963
38443
  "type": "text/javascript; charset=utf-8",
37964
- "etag": "\"3d5-itnLaBVfNThToG43nVPq3jMDhq0\"",
37965
- "mtime": "2026-09-11T13:02:27.880Z",
37966
- "size": 981,
37967
- "path": "../public/_nuxt/B7wL3pDk.js"
38444
+ "etag": "\"5bc-jGs6+2LpPidhbmCHZyKfmEWQxCI\"",
38445
+ "mtime": "2026-09-12T05:06:47.049Z",
38446
+ "size": 1468,
38447
+ "path": "../public/_nuxt/BBrRELH32.js"
37968
38448
  },
37969
- "/_nuxt/agents.BV70ioCv.css": {
37970
- "type": "text/css; charset=utf-8",
37971
- "etag": "\"864-vWJ7ST00xR5cH47IGfSMfZZYzFk\"",
37972
- "mtime": "2026-09-11T13:02:27.899Z",
37973
- "size": 2148,
37974
- "path": "../public/_nuxt/agents.BV70ioCv.css"
38449
+ "/_nuxt/aWWIh8YL.js": {
38450
+ "type": "text/javascript; charset=utf-8",
38451
+ "etag": "\"10b83-nv1ZsQJBS5EehASgX2SOiI/mBpw\"",
38452
+ "mtime": "2026-09-12T05:06:47.068Z",
38453
+ "size": 68483,
38454
+ "path": "../public/_nuxt/aWWIh8YL.js"
37975
38455
  },
37976
- "/_nuxt/B5S_UyaC.js": {
38456
+ "/_nuxt/BCGafdXT.js": {
37977
38457
  "type": "text/javascript; charset=utf-8",
37978
- "etag": "\"2435-cVXb4Ze0vEZbXwWSHOgo7NJ59ME\"",
37979
- "mtime": "2026-09-11T13:02:27.880Z",
37980
- "size": 9269,
37981
- "path": "../public/_nuxt/B5S_UyaC.js"
38458
+ "etag": "\"3ff0-kMClwjRpzrLcxzcqbcd8Q/cCnJg\"",
38459
+ "mtime": "2026-09-12T05:06:47.050Z",
38460
+ "size": 16368,
38461
+ "path": "../public/_nuxt/BCGafdXT.js"
37982
38462
  },
37983
- "/_nuxt/BBBtwOpo.js": {
38463
+ "/_nuxt/ahgEJu2R.js": {
37984
38464
  "type": "text/javascript; charset=utf-8",
37985
- "etag": "\"3348-eQ058KWqHVmCOxYVHS5yTvcfcSA\"",
37986
- "mtime": "2026-09-11T13:02:27.881Z",
37987
- "size": 13128,
37988
- "path": "../public/_nuxt/BBBtwOpo.js"
38465
+ "etag": "\"680-U+6Xyxt5ZpTg6vsMybB7bBYMY/M\"",
38466
+ "mtime": "2026-09-12T05:06:47.068Z",
38467
+ "size": 1664,
38468
+ "path": "../public/_nuxt/ahgEJu2R.js"
37989
38469
  },
37990
- "/_nuxt/BASN8nZ0.js": {
38470
+ "/_nuxt/BDNMzG2s2.js": {
37991
38471
  "type": "text/javascript; charset=utf-8",
37992
- "etag": "\"623-b/qA8sA7MNxRVKvVBaEUH75JU5M\"",
37993
- "mtime": "2026-09-11T13:02:27.881Z",
37994
- "size": 1571,
37995
- "path": "../public/_nuxt/BASN8nZ0.js"
38472
+ "etag": "\"54-MasMfSk/A98C3Gn9uIOxtFxkWNw\"",
38473
+ "mtime": "2026-09-12T05:06:47.050Z",
38474
+ "size": 84,
38475
+ "path": "../public/_nuxt/BDNMzG2s2.js"
37996
38476
  },
37997
- "/_nuxt/BBrRELH32.js": {
38477
+ "/_nuxt/BDmh31hl.js": {
37998
38478
  "type": "text/javascript; charset=utf-8",
37999
- "etag": "\"5bc-jGs6+2LpPidhbmCHZyKfmEWQxCI\"",
38000
- "mtime": "2026-09-11T13:02:27.881Z",
38001
- "size": 1468,
38002
- "path": "../public/_nuxt/BBrRELH32.js"
38479
+ "etag": "\"5d4-nK1q0f/en9CHIE67KnsUTLT2CQI\"",
38480
+ "mtime": "2026-09-12T05:06:47.050Z",
38481
+ "size": 1492,
38482
+ "path": "../public/_nuxt/BDmh31hl.js"
38003
38483
  },
38004
38484
  "/_nuxt/B7gZokg82.js": {
38005
38485
  "type": "text/javascript; charset=utf-8",
38006
38486
  "etag": "\"1d5d9-7v10FhVDuY8RpWcfSCPKziAj8s8\"",
38007
- "mtime": "2026-09-11T13:02:27.880Z",
38487
+ "mtime": "2026-09-12T05:06:47.049Z",
38008
38488
  "size": 120281,
38009
38489
  "path": "../public/_nuxt/B7gZokg82.js"
38010
38490
  },
38011
- "/_nuxt/Bc0AmjfT.js": {
38491
+ "/_nuxt/BFkgkW8u.js": {
38012
38492
  "type": "text/javascript; charset=utf-8",
38013
- "etag": "\"34e0-7APKITyvdbxSvgbdPKa6ySfVAuI\"",
38014
- "mtime": "2026-09-11T13:02:27.885Z",
38015
- "size": 13536,
38016
- "path": "../public/_nuxt/Bc0AmjfT.js"
38493
+ "etag": "\"a0d1-NSV9xOdq2+TkNG3z1okARkbt/Ew\"",
38494
+ "mtime": "2026-09-12T05:06:47.051Z",
38495
+ "size": 41169,
38496
+ "path": "../public/_nuxt/BFkgkW8u.js"
38017
38497
  },
38018
- "/_nuxt/BBwMH_hG.js": {
38498
+ "/_nuxt/BHA40aHa.js": {
38019
38499
  "type": "text/javascript; charset=utf-8",
38020
- "etag": "\"587d-zV1IOugR08gc0LlOGMSClQfdApQ\"",
38021
- "mtime": "2026-09-11T13:02:27.882Z",
38022
- "size": 22653,
38023
- "path": "../public/_nuxt/BBwMH_hG.js"
38500
+ "etag": "\"1dae-TNCHUupkSTNB3L7XCdP+v3qPTYQ\"",
38501
+ "mtime": "2026-09-12T05:06:47.052Z",
38502
+ "size": 7598,
38503
+ "path": "../public/_nuxt/BHA40aHa.js"
38024
38504
  },
38025
- "/_nuxt/BcrN7QEl2.js": {
38505
+ "/_nuxt/BJHKLJJU.js": {
38026
38506
  "type": "text/javascript; charset=utf-8",
38027
- "etag": "\"b14-CLdyddO7m6guAKfIeyReGHA6Jwg\"",
38028
- "mtime": "2026-09-11T13:02:27.885Z",
38029
- "size": 2836,
38030
- "path": "../public/_nuxt/BcrN7QEl2.js"
38507
+ "etag": "\"1339-QAcPV/AbfgGywBnf88Wg49sAL0M\"",
38508
+ "mtime": "2026-09-12T05:06:47.052Z",
38509
+ "size": 4921,
38510
+ "path": "../public/_nuxt/BJHKLJJU.js"
38031
38511
  },
38032
- "/_nuxt/BcmbLh2z2.js": {
38512
+ "/_nuxt/BN6iuJEg2.js": {
38033
38513
  "type": "text/javascript; charset=utf-8",
38034
- "etag": "\"5ae1-zOifodCJHWNEI9qfUw2kxn+QT9k\"",
38035
- "mtime": "2026-09-11T13:02:27.885Z",
38036
- "size": 23265,
38037
- "path": "../public/_nuxt/BcmbLh2z2.js"
38514
+ "etag": "\"d01-vLMADOVcZ1D0Movw5mYesca16fQ\"",
38515
+ "mtime": "2026-09-12T05:06:47.052Z",
38516
+ "size": 3329,
38517
+ "path": "../public/_nuxt/BN6iuJEg2.js"
38038
38518
  },
38039
- "/_nuxt/BDUjyaF4.js": {
38519
+ "/_nuxt/BNT8gYU92.js": {
38040
38520
  "type": "text/javascript; charset=utf-8",
38041
- "etag": "\"12149-hpS4uBcTVyjMF/ahBrfPvWSV6dM\"",
38042
- "mtime": "2026-09-11T13:02:27.882Z",
38043
- "size": 74057,
38044
- "path": "../public/_nuxt/BDUjyaF4.js"
38521
+ "etag": "\"5d7c-uoVe6NWOOg3c8AvXRdXBJ9QJC2k\"",
38522
+ "mtime": "2026-09-12T05:06:47.052Z",
38523
+ "size": 23932,
38524
+ "path": "../public/_nuxt/BNT8gYU92.js"
38045
38525
  },
38046
- "/_nuxt/BfGc7TJp.js": {
38526
+ "/_nuxt/BG8sCcwx.js": {
38047
38527
  "type": "text/javascript; charset=utf-8",
38048
- "etag": "\"f5-ynAHqm+XhchZ1co7YynIGiIextg\"",
38049
- "mtime": "2026-09-11T13:02:27.885Z",
38050
- "size": 245,
38051
- "path": "../public/_nuxt/BfGc7TJp.js"
38528
+ "etag": "\"4190d-RfweN32GXq6RZeMfyyTy4wIr35U\"",
38529
+ "mtime": "2026-09-12T05:06:47.048Z",
38530
+ "size": 268557,
38531
+ "path": "../public/_nuxt/BG8sCcwx.js"
38052
38532
  },
38053
- "/_nuxt/BeIfu4N3.js": {
38533
+ "/_nuxt/BU83-NnX.js": {
38054
38534
  "type": "text/javascript; charset=utf-8",
38055
- "etag": "\"bc89-neyoILuYLlrhO8n1ehz7UmvocMs\"",
38056
- "mtime": "2026-09-11T13:02:27.885Z",
38057
- "size": 48265,
38058
- "path": "../public/_nuxt/BeIfu4N3.js"
38535
+ "etag": "\"1bca7-QTUYnyzS2tyJukMLZN6kXIjjcw8\"",
38536
+ "mtime": "2026-09-12T05:06:47.052Z",
38537
+ "size": 113831,
38538
+ "path": "../public/_nuxt/BU83-NnX.js"
38059
38539
  },
38060
- "/_nuxt/B9nXmjSB.js": {
38540
+ "/_nuxt/BrIJiJSN.js": {
38061
38541
  "type": "text/javascript; charset=utf-8",
38062
- "etag": "\"9084e-vFP7MXmHyEXKhn5m7L9MCHswQPg\"",
38063
- "mtime": "2026-09-11T13:02:27.881Z",
38064
- "size": 591950,
38065
- "path": "../public/_nuxt/B9nXmjSB.js"
38542
+ "etag": "\"50eba-EQGueVrdlEzHO7oTVt2LPxnHgRo\"",
38543
+ "mtime": "2026-09-12T05:06:47.053Z",
38544
+ "size": 331450,
38545
+ "path": "../public/_nuxt/BrIJiJSN.js"
38066
38546
  },
38067
38547
  "/_nuxt/BFjGV-RV2.js": {
38068
38548
  "type": "text/javascript; charset=utf-8",
38069
38549
  "etag": "\"a0340-NzvTqyczSJgnuw9pjPQnLX42sAE\"",
38070
- "mtime": "2026-09-11T13:02:27.882Z",
38550
+ "mtime": "2026-09-12T05:06:47.050Z",
38071
38551
  "size": 656192,
38072
38552
  "path": "../public/_nuxt/BFjGV-RV2.js"
38073
38553
  },
38074
38554
  "/_nuxt/BGkumHZ32.js": {
38075
38555
  "type": "text/javascript; charset=utf-8",
38076
38556
  "etag": "\"14a0a8-FkCiOKvl5+p8em/4UNCrmbDN4qY\"",
38077
- "mtime": "2026-09-11T13:02:27.883Z",
38557
+ "mtime": "2026-09-12T05:06:47.051Z",
38078
38558
  "size": 1351848,
38079
38559
  "path": "../public/_nuxt/BGkumHZ32.js"
38080
38560
  },
38081
- "/_nuxt/BkLJA9J5.js": {
38561
+ "/_nuxt/BYhEUx8t.js": {
38082
38562
  "type": "text/javascript; charset=utf-8",
38083
- "etag": "\"28d3-MQaEd967hxGnatCbff3bUnWV5K8\"",
38084
- "mtime": "2026-09-11T13:02:27.886Z",
38085
- "size": 10451,
38086
- "path": "../public/_nuxt/BkLJA9J5.js"
38563
+ "etag": "\"4683-VUVLNcxEYcNaMSm1Cbz/wmeM604\"",
38564
+ "mtime": "2026-09-12T05:06:47.053Z",
38565
+ "size": 18051,
38566
+ "path": "../public/_nuxt/BYhEUx8t.js"
38087
38567
  },
38088
- "/_nuxt/BNXfwXpE.js": {
38568
+ "/_nuxt/BzHEilTt.js": {
38089
38569
  "type": "text/javascript; charset=utf-8",
38090
- "etag": "\"30a-SKr3Bmmq+lyC2EG7XQ/M7P1jWog\"",
38091
- "mtime": "2026-09-11T13:02:27.883Z",
38092
- "size": 778,
38093
- "path": "../public/_nuxt/BNXfwXpE.js"
38570
+ "etag": "\"4fa9-va7l3h5q8x+aE2yvqoL1csBP9KI\"",
38571
+ "mtime": "2026-09-12T05:06:47.053Z",
38572
+ "size": 20393,
38573
+ "path": "../public/_nuxt/BzHEilTt.js"
38094
38574
  },
38095
- "/_nuxt/BgTB6h_q.js": {
38575
+ "/_nuxt/C3gwHTz0.js": {
38096
38576
  "type": "text/javascript; charset=utf-8",
38097
- "etag": "\"1caca-lfjDD3kJRleNsch+Mu9vFBCUum0\"",
38098
- "mtime": "2026-09-11T13:02:27.886Z",
38099
- "size": 117450,
38100
- "path": "../public/_nuxt/BgTB6h_q.js"
38577
+ "etag": "\"c83-Qsb8eOw0ptJIE9g9mNDkYaOA4VM\"",
38578
+ "mtime": "2026-09-12T05:06:47.053Z",
38579
+ "size": 3203,
38580
+ "path": "../public/_nuxt/C3gwHTz0.js"
38101
38581
  },
38102
- "/_nuxt/Bp5luxkg2.js": {
38582
+ "/_nuxt/C4DWUZ6d2.js": {
38103
38583
  "type": "text/javascript; charset=utf-8",
38104
- "etag": "\"3a06-wE6nRVKQRjsGzClNYT0f+LE6/Lg\"",
38105
- "mtime": "2026-09-11T13:02:27.886Z",
38106
- "size": 14854,
38107
- "path": "../public/_nuxt/Bp5luxkg2.js"
38108
- },
38109
- "/_nuxt/BN_PdN3J.js": {
38110
- "type": "text/javascript; charset=utf-8",
38111
- "etag": "\"10b9b-D693oquQMdJ9uX8C5GEOl79xXOE\"",
38112
- "mtime": "2026-09-11T13:02:27.883Z",
38113
- "size": 68507,
38114
- "path": "../public/_nuxt/BN_PdN3J.js"
38584
+ "etag": "\"92-SI4m48ydIbJ1X/2oxc8lcVNlouc\"",
38585
+ "mtime": "2026-09-12T05:06:47.054Z",
38586
+ "size": 146,
38587
+ "path": "../public/_nuxt/C4DWUZ6d2.js"
38115
38588
  },
38116
- "/_nuxt/BSCpFtzG.js": {
38589
+ "/_nuxt/C3J6FYKa.js": {
38117
38590
  "type": "text/javascript; charset=utf-8",
38118
- "etag": "\"13398-3vxX1fQrPyVWKnXsEX5bmCpF/Eg\"",
38119
- "mtime": "2026-09-11T13:02:27.884Z",
38120
- "size": 78744,
38121
- "path": "../public/_nuxt/BSCpFtzG.js"
38591
+ "etag": "\"626-QRtMC3g1WIOYAvpDGdpR8kmZ7ps\"",
38592
+ "mtime": "2026-09-12T05:06:47.053Z",
38593
+ "size": 1574,
38594
+ "path": "../public/_nuxt/C3J6FYKa.js"
38122
38595
  },
38123
- "/_nuxt/BuCHayqN.js": {
38596
+ "/_nuxt/C5gUkRwn.js": {
38124
38597
  "type": "text/javascript; charset=utf-8",
38125
- "etag": "\"1993-fimQ9A15eP2RbuUsEPv6CdPni84\"",
38126
- "mtime": "2026-09-11T13:02:27.887Z",
38127
- "size": 6547,
38128
- "path": "../public/_nuxt/BuCHayqN.js"
38598
+ "etag": "\"4d54-4zd4iq14kAxdjxf8PVzJ8SMRDlU\"",
38599
+ "mtime": "2026-09-12T05:06:47.054Z",
38600
+ "size": 19796,
38601
+ "path": "../public/_nuxt/C5gUkRwn.js"
38129
38602
  },
38130
- "/_nuxt/BSSUlJnx2.js": {
38603
+ "/_nuxt/Cbq-mryP.js": {
38131
38604
  "type": "text/javascript; charset=utf-8",
38132
- "etag": "\"5f5-t0OMayeEXY7fEaFUOlppJZZQvtM\"",
38133
- "mtime": "2026-09-11T13:02:27.884Z",
38134
- "size": 1525,
38135
- "path": "../public/_nuxt/BSSUlJnx2.js"
38605
+ "etag": "\"28a9-MWirBiv3ouIxepoJqTpjvo0d20Q\"",
38606
+ "mtime": "2026-09-12T05:06:47.056Z",
38607
+ "size": 10409,
38608
+ "path": "../public/_nuxt/Cbq-mryP.js"
38136
38609
  },
38137
- "/_nuxt/BrIJiJSN.js": {
38610
+ "/_nuxt/CdPzkOMV.js": {
38138
38611
  "type": "text/javascript; charset=utf-8",
38139
- "etag": "\"50eba-EQGueVrdlEzHO7oTVt2LPxnHgRo\"",
38140
- "mtime": "2026-09-11T13:02:27.886Z",
38141
- "size": 331450,
38142
- "path": "../public/_nuxt/BrIJiJSN.js"
38612
+ "etag": "\"623-/ooRHZ1cBLnY/mPYTYuLzxenEjw\"",
38613
+ "mtime": "2026-09-12T05:06:47.057Z",
38614
+ "size": 1571,
38615
+ "path": "../public/_nuxt/CdPzkOMV.js"
38143
38616
  },
38144
- "/_nuxt/BZGNTgTQ2.js": {
38617
+ "/_nuxt/CClOy-Hz2.js": {
38145
38618
  "type": "text/javascript; charset=utf-8",
38146
- "etag": "\"53-pfqlZiZJEbPiLoDxP0PLfz2Ucmw\"",
38147
- "mtime": "2026-09-11T13:02:27.884Z",
38148
- "size": 83,
38149
- "path": "../public/_nuxt/BZGNTgTQ2.js"
38619
+ "etag": "\"20d4-RN9mqBdS6ZEpvrVM2lHCRuY3nZY\"",
38620
+ "mtime": "2026-09-12T05:06:47.054Z",
38621
+ "size": 8404,
38622
+ "path": "../public/_nuxt/CClOy-Hz2.js"
38150
38623
  },
38151
- "/_nuxt/BuvcLKh1.js": {
38624
+ "/_nuxt/Cec0Ua3F.js": {
38152
38625
  "type": "text/javascript; charset=utf-8",
38153
- "etag": "\"10d39-bh25fEPU4z899iPX6fFfY8ACYFU\"",
38154
- "mtime": "2026-09-11T13:02:27.887Z",
38155
- "size": 68921,
38156
- "path": "../public/_nuxt/BuvcLKh1.js"
38626
+ "etag": "\"1993-GdUyzzzMcfvjHxm7UFrX9akkoI0\"",
38627
+ "mtime": "2026-09-12T05:06:47.057Z",
38628
+ "size": 6547,
38629
+ "path": "../public/_nuxt/Cec0Ua3F.js"
38157
38630
  },
38158
- "/_nuxt/BZv4RFYN.js": {
38631
+ "/_nuxt/Cc_9VzD42.js": {
38159
38632
  "type": "text/javascript; charset=utf-8",
38160
- "etag": "\"11c1-qeANOKi92R4/pBn9CknPlaxrFXA\"",
38161
- "mtime": "2026-09-11T13:02:27.884Z",
38162
- "size": 4545,
38163
- "path": "../public/_nuxt/BZv4RFYN.js"
38633
+ "etag": "\"89e-avARWlfoAeMZaTQr0sXFqaRVGk4\"",
38634
+ "mtime": "2026-09-12T05:06:47.056Z",
38635
+ "size": 2206,
38636
+ "path": "../public/_nuxt/Cc_9VzD42.js"
38164
38637
  },
38165
- "/_nuxt/BWSE6hR6.js": {
38638
+ "/_nuxt/CM12FuB42.js": {
38166
38639
  "type": "text/javascript; charset=utf-8",
38167
- "etag": "\"c087-g1yKsIayBt0P5WN6ZxAy5qs1RiY\"",
38168
- "mtime": "2026-09-11T13:02:27.884Z",
38169
- "size": 49287,
38170
- "path": "../public/_nuxt/BWSE6hR6.js"
38640
+ "etag": "\"18b-zv5adDS5UoLhJMpSccvf5MniJLA\"",
38641
+ "mtime": "2026-09-12T05:06:47.054Z",
38642
+ "size": 395,
38643
+ "path": "../public/_nuxt/CM12FuB42.js"
38171
38644
  },
38172
- "/_nuxt/C-mDhyEd.js": {
38173
- "type": "text/javascript; charset=utf-8",
38174
- "etag": "\"5d4-njKM5SbFu3E502L7rwfpNRMYw0c\"",
38175
- "mtime": "2026-09-11T13:02:27.887Z",
38176
- "size": 1492,
38177
- "path": "../public/_nuxt/C-mDhyEd.js"
38645
+ "/_nuxt/channel-templates.C-M5nKcC.css": {
38646
+ "type": "text/css; charset=utf-8",
38647
+ "etag": "\"846-tzs5DYP5eAKLaZTF1ToNjvfm6T8\"",
38648
+ "mtime": "2026-09-12T05:06:47.073Z",
38649
+ "size": 2118,
38650
+ "path": "../public/_nuxt/channel-templates.C-M5nKcC.css"
38178
38651
  },
38179
- "/_nuxt/C3tCneTM.js": {
38652
+ "/_nuxt/CojCTLKD.js": {
38180
38653
  "type": "text/javascript; charset=utf-8",
38181
- "etag": "\"56ab-/6Cr6erEwmZtrhutqEU3O5P+s0A\"",
38182
- "mtime": "2026-09-11T13:02:27.887Z",
38183
- "size": 22187,
38184
- "path": "../public/_nuxt/C3tCneTM.js"
38654
+ "etag": "\"11c5-6b4j7sZqh+T5P+aLRZ6XhkyJGyo\"",
38655
+ "mtime": "2026-09-12T05:06:47.058Z",
38656
+ "size": 4549,
38657
+ "path": "../public/_nuxt/CojCTLKD.js"
38185
38658
  },
38186
- "/_nuxt/C4OAdbVK2.js": {
38659
+ "/_nuxt/CNs_Ozdc2.js": {
38187
38660
  "type": "text/javascript; charset=utf-8",
38188
- "etag": "\"89e-AQFf/aV6YnDPM3edZWc1ASPluno\"",
38189
- "mtime": "2026-09-11T13:02:27.888Z",
38190
- "size": 2206,
38191
- "path": "../public/_nuxt/C4OAdbVK2.js"
38661
+ "etag": "\"1b-1MHUJYdBtOvbvPMaiQxDXp3lHyw\"",
38662
+ "mtime": "2026-09-12T05:06:47.054Z",
38663
+ "size": 27,
38664
+ "path": "../public/_nuxt/CNs_Ozdc2.js"
38192
38665
  },
38193
- "/_nuxt/C9f8QMp12.js": {
38666
+ "/_nuxt/CoNpEq5X.js": {
38194
38667
  "type": "text/javascript; charset=utf-8",
38195
- "etag": "\"1896-VcRRXhZEm21djPt3FTvlq+iUccI\"",
38196
- "mtime": "2026-09-11T13:02:27.888Z",
38197
- "size": 6294,
38198
- "path": "../public/_nuxt/C9f8QMp12.js"
38668
+ "etag": "\"2f1-FZU8z3/vTyhXK2ZmBtITplcBXmY\"",
38669
+ "mtime": "2026-09-12T05:06:47.057Z",
38670
+ "size": 753,
38671
+ "path": "../public/_nuxt/CoNpEq5X.js"
38199
38672
  },
38200
- "/_nuxt/CbzsPO5H.js": {
38673
+ "/_nuxt/Crod5z2f.js": {
38201
38674
  "type": "text/javascript; charset=utf-8",
38202
- "etag": "\"4faa-iHCfQHTkIFacZfkKJ7cK5xg2CH4\"",
38203
- "mtime": "2026-09-11T13:02:27.890Z",
38204
- "size": 20394,
38205
- "path": "../public/_nuxt/CbzsPO5H.js"
38675
+ "etag": "\"3d5-mS8/hK4dwayfb1YZWtzMVEWPF6g\"",
38676
+ "mtime": "2026-09-12T05:06:47.058Z",
38677
+ "size": 981,
38678
+ "path": "../public/_nuxt/Crod5z2f.js"
38206
38679
  },
38207
- "/_nuxt/C77oC8yC2.js": {
38680
+ "/_nuxt/CWKEp1wx2.js": {
38208
38681
  "type": "text/javascript; charset=utf-8",
38209
- "etag": "\"1fe0-jrc/2TM/ugXrG5/wGhO+1RqpL/c\"",
38210
- "mtime": "2026-09-11T13:02:27.888Z",
38211
- "size": 8160,
38212
- "path": "../public/_nuxt/C77oC8yC2.js"
38682
+ "etag": "\"555-ED/tuOi0Qdk4aSGksbI58QY+vQ8\"",
38683
+ "mtime": "2026-09-12T05:06:47.055Z",
38684
+ "size": 1365,
38685
+ "path": "../public/_nuxt/CWKEp1wx2.js"
38213
38686
  },
38214
- "/_nuxt/CdSOrh2c.js": {
38687
+ "/_nuxt/CWoJjWmZ.js": {
38215
38688
  "type": "text/javascript; charset=utf-8",
38216
- "etag": "\"4d23-IVQZm+9xTR9dCzd0Jzm7drmlleQ\"",
38217
- "mtime": "2026-09-11T13:02:27.890Z",
38218
- "size": 19747,
38219
- "path": "../public/_nuxt/CdSOrh2c.js"
38689
+ "etag": "\"42-7Ccac6Eptzx/VGBNDzFAvw0P6lU\"",
38690
+ "mtime": "2026-09-12T05:06:47.055Z",
38691
+ "size": 66,
38692
+ "path": "../public/_nuxt/CWoJjWmZ.js"
38220
38693
  },
38221
- "/_nuxt/Cgx818r-.js": {
38694
+ "/_nuxt/CY9LbPCI.js": {
38222
38695
  "type": "text/javascript; charset=utf-8",
38223
- "etag": "\"3d8b-XQZ5oPQBXIXwiWAKaw52HXTCnfM\"",
38224
- "mtime": "2026-09-11T13:02:27.890Z",
38225
- "size": 15755,
38226
- "path": "../public/_nuxt/Cgx818r-.js"
38696
+ "etag": "\"3dab-L0ihOqle9YGGkDIZ1n27qT21mAo\"",
38697
+ "mtime": "2026-09-12T05:06:47.055Z",
38698
+ "size": 15787,
38699
+ "path": "../public/_nuxt/CY9LbPCI.js"
38227
38700
  },
38228
- "/_nuxt/channel-templates.C-M5nKcC.css": {
38229
- "type": "text/css; charset=utf-8",
38230
- "etag": "\"846-tzs5DYP5eAKLaZTF1ToNjvfm6T8\"",
38231
- "mtime": "2026-09-11T13:02:27.899Z",
38232
- "size": 2118,
38233
- "path": "../public/_nuxt/channel-templates.C-M5nKcC.css"
38234
- },
38235
- "/_nuxt/Cjm7VogC.js": {
38701
+ "/_nuxt/CSkxz2NX.js": {
38236
38702
  "type": "text/javascript; charset=utf-8",
38237
- "etag": "\"2136-k43Vk0bwBsy88uOpb0ftVj0pdhI\"",
38238
- "mtime": "2026-09-11T13:02:27.890Z",
38239
- "size": 8502,
38240
- "path": "../public/_nuxt/Cjm7VogC.js"
38703
+ "etag": "\"1334d-Ivbd7+iw6XuJ8M1ljfz5AEuDZrs\"",
38704
+ "mtime": "2026-09-12T05:06:47.055Z",
38705
+ "size": 78669,
38706
+ "path": "../public/_nuxt/CSkxz2NX.js"
38241
38707
  },
38242
- "/_nuxt/CKfhtOt7.js": {
38708
+ "/_nuxt/CYWVXZTS.js": {
38243
38709
  "type": "text/javascript; charset=utf-8",
38244
- "etag": "\"9141-NLArDp1lZISfBmTeNNW/SqVqPrc\"",
38245
- "mtime": "2026-09-11T13:02:27.888Z",
38246
- "size": 37185,
38247
- "path": "../public/_nuxt/CKfhtOt7.js"
38710
+ "etag": "\"1fdf-2SN2fQIRzi888CZqLLWMShlF9mc\"",
38711
+ "mtime": "2026-09-12T05:06:47.055Z",
38712
+ "size": 8159,
38713
+ "path": "../public/_nuxt/CYWVXZTS.js"
38248
38714
  },
38249
- "/_nuxt/Cm5mDxzH.js": {
38715
+ "/_nuxt/CZiw7sEV.js": {
38250
38716
  "type": "text/javascript; charset=utf-8",
38251
- "etag": "\"13a0-pJimmU3QmHusvl3UTWPQL7TTnJY\"",
38252
- "mtime": "2026-09-11T13:02:27.891Z",
38253
- "size": 5024,
38254
- "path": "../public/_nuxt/Cm5mDxzH.js"
38717
+ "etag": "\"2d3b-ltYRPZ6fvOybrmOvkmkMnVB1IhA\"",
38718
+ "mtime": "2026-09-12T05:06:47.056Z",
38719
+ "size": 11579,
38720
+ "path": "../public/_nuxt/CZiw7sEV.js"
38255
38721
  },
38256
- "/_nuxt/Cno6kYiO2.js": {
38722
+ "/_nuxt/CzlMDL5H.js": {
38257
38723
  "type": "text/javascript; charset=utf-8",
38258
- "etag": "\"f2-SIBAvqBfq2ENmoMT2zz03X9uJTg\"",
38259
- "mtime": "2026-09-11T13:02:27.891Z",
38260
- "size": 242,
38261
- "path": "../public/_nuxt/Cno6kYiO2.js"
38724
+ "etag": "\"9125-dP1WUSElrGrzZB2/J46sGS1t4MM\"",
38725
+ "mtime": "2026-09-12T05:06:47.058Z",
38726
+ "size": 37157,
38727
+ "path": "../public/_nuxt/CzlMDL5H.js"
38262
38728
  },
38263
- "/_nuxt/CmHzfVc5.js": {
38729
+ "/_nuxt/C_OLzD09.js": {
38264
38730
  "type": "text/javascript; charset=utf-8",
38265
- "etag": "\"7ec3-tUpCnS/mT7jwFKjKxxLd9XTbgFU\"",
38266
- "mtime": "2026-09-11T13:02:27.891Z",
38267
- "size": 32451,
38268
- "path": "../public/_nuxt/CmHzfVc5.js"
38731
+ "etag": "\"210b-10X0chnaT8E+32rHtx6ZB643xnQ\"",
38732
+ "mtime": "2026-09-12T05:06:47.056Z",
38733
+ "size": 8459,
38734
+ "path": "../public/_nuxt/C_OLzD09.js"
38269
38735
  },
38270
- "/_nuxt/Cn3J3NXR.js": {
38736
+ "/_nuxt/C__m4EhR.js": {
38271
38737
  "type": "text/javascript; charset=utf-8",
38272
- "etag": "\"a6ef-rxc5AWy7cZY4nez30ZVJeXrMlc4\"",
38273
- "mtime": "2026-09-11T13:02:27.891Z",
38274
- "size": 42735,
38275
- "path": "../public/_nuxt/Cn3J3NXR.js"
38738
+ "etag": "\"496d-b/ZPXL6opL07ctddnDSvbWv3crU\"",
38739
+ "mtime": "2026-09-12T05:06:47.056Z",
38740
+ "size": 18797,
38741
+ "path": "../public/_nuxt/C__m4EhR.js"
38276
38742
  },
38277
- "/_nuxt/CNs_Ozdc2.js": {
38743
+ "/_nuxt/D1YDxZpZ.js": {
38278
38744
  "type": "text/javascript; charset=utf-8",
38279
- "etag": "\"1b-1MHUJYdBtOvbvPMaiQxDXp3lHyw\"",
38280
- "mtime": "2026-09-11T13:02:27.888Z",
38281
- "size": 27,
38282
- "path": "../public/_nuxt/CNs_Ozdc2.js"
38745
+ "etag": "\"373d-vQBJMgqXZqjiLL5JDkPtggsr7/A\"",
38746
+ "mtime": "2026-09-12T05:06:47.059Z",
38747
+ "size": 14141,
38748
+ "path": "../public/_nuxt/D1YDxZpZ.js"
38283
38749
  },
38284
- "/_nuxt/Cp6z0RN7.js": {
38750
+ "/_nuxt/D0ZBQrN_2.js": {
38285
38751
  "type": "text/javascript; charset=utf-8",
38286
- "etag": "\"2d59-Ffu3oT6YF362zP5H8NMBdVE8ywE\"",
38287
- "mtime": "2026-09-11T13:02:27.892Z",
38288
- "size": 11609,
38289
- "path": "../public/_nuxt/Cp6z0RN7.js"
38752
+ "etag": "\"462-0ouITDqojxoQrlHfAjgz9yuwtnk\"",
38753
+ "mtime": "2026-09-12T05:06:47.059Z",
38754
+ "size": 1122,
38755
+ "path": "../public/_nuxt/D0ZBQrN_2.js"
38290
38756
  },
38291
- "/_nuxt/CQvmN-Mi.js": {
38757
+ "/_nuxt/D20Yamr4.js": {
38292
38758
  "type": "text/javascript; charset=utf-8",
38293
- "etag": "\"25a7-4TY1NAMk4ozmnusisb7TYpoAnz0\"",
38294
- "mtime": "2026-09-11T13:02:27.889Z",
38295
- "size": 9639,
38296
- "path": "../public/_nuxt/CQvmN-Mi.js"
38759
+ "etag": "\"34e0-kHxgtavu/TqtFkh5WIroNe+fqeA\"",
38760
+ "mtime": "2026-09-12T05:06:47.059Z",
38761
+ "size": 13536,
38762
+ "path": "../public/_nuxt/D20Yamr4.js"
38297
38763
  },
38298
- "/_nuxt/Ct-WOVr4.js": {
38764
+ "/_nuxt/D9Oidm5I.js": {
38299
38765
  "type": "text/javascript; charset=utf-8",
38300
- "etag": "\"626-K2orno3teepJe9id2hVir0LyA/U\"",
38301
- "mtime": "2026-09-11T13:02:27.892Z",
38302
- "size": 1574,
38303
- "path": "../public/_nuxt/Ct-WOVr4.js"
38766
+ "etag": "\"29d-vUjiOrV6RvvMjy8bqbIIKVpv2qg\"",
38767
+ "mtime": "2026-09-12T05:06:47.060Z",
38768
+ "size": 669,
38769
+ "path": "../public/_nuxt/D9Oidm5I.js"
38304
38770
  },
38305
- "/_nuxt/CUDrOuW7.js": {
38771
+ "/_nuxt/D6uzXueg.js": {
38306
38772
  "type": "text/javascript; charset=utf-8",
38307
- "etag": "\"24a7-HgYZ2dzhJGptonSe5tyATIi16h8\"",
38308
- "mtime": "2026-09-11T13:02:27.889Z",
38309
- "size": 9383,
38310
- "path": "../public/_nuxt/CUDrOuW7.js"
38773
+ "etag": "\"3f2d-Qvezt1XBT/ai/Ii96P6PEqxX730\"",
38774
+ "mtime": "2026-09-12T05:06:47.059Z",
38775
+ "size": 16173,
38776
+ "path": "../public/_nuxt/D6uzXueg.js"
38311
38777
  },
38312
- "/_nuxt/CUXCQXjG.js": {
38778
+ "/_nuxt/DAe0h2MB.js": {
38313
38779
  "type": "text/javascript; charset=utf-8",
38314
- "etag": "\"18b-4es6+sDUaYZ89sbvxGRBaXHox64\"",
38315
- "mtime": "2026-09-11T13:02:27.889Z",
38316
- "size": 395,
38317
- "path": "../public/_nuxt/CUXCQXjG.js"
38780
+ "etag": "\"472d-sNSO3lgXFkiAXskOa0EXqG2y91Y\"",
38781
+ "mtime": "2026-09-12T05:06:47.060Z",
38782
+ "size": 18221,
38783
+ "path": "../public/_nuxt/DAe0h2MB.js"
38318
38784
  },
38319
- "/_nuxt/CWKEp1wx2.js": {
38785
+ "/_nuxt/DBHNsT1Y.js": {
38320
38786
  "type": "text/javascript; charset=utf-8",
38321
- "etag": "\"555-ED/tuOi0Qdk4aSGksbI58QY+vQ8\"",
38322
- "mtime": "2026-09-11T13:02:27.889Z",
38323
- "size": 1365,
38324
- "path": "../public/_nuxt/CWKEp1wx2.js"
38787
+ "etag": "\"a6ea-PNGgN6dJ9yAlkTn986443/cv5Bg\"",
38788
+ "mtime": "2026-09-12T05:06:47.060Z",
38789
+ "size": 42730,
38790
+ "path": "../public/_nuxt/DBHNsT1Y.js"
38325
38791
  },
38326
- "/_nuxt/CZcC-gpk.js": {
38327
- "type": "text/javascript; charset=utf-8",
38328
- "etag": "\"665-LBR4N1TO8YjwC5eGVloYG3Mi+6s\"",
38329
- "mtime": "2026-09-11T13:02:27.889Z",
38330
- "size": 1637,
38331
- "path": "../public/_nuxt/CZcC-gpk.js"
38792
+ "/_nuxt/dcw.DLYZqEhT.css": {
38793
+ "type": "text/css; charset=utf-8",
38794
+ "etag": "\"226e-H/BNammWITMmwjVcDe3temawvWY\"",
38795
+ "mtime": "2026-09-12T05:06:47.074Z",
38796
+ "size": 8814,
38797
+ "path": "../public/_nuxt/dcw.DLYZqEhT.css"
38332
38798
  },
38333
- "/_nuxt/CwqIxJGj.js": {
38334
- "type": "text/javascript; charset=utf-8",
38335
- "etag": "\"7945-E3BzeXrQwh3/2vvo6cNmHiKdCR0\"",
38336
- "mtime": "2026-09-11T13:02:27.892Z",
38337
- "size": 31045,
38338
- "path": "../public/_nuxt/CwqIxJGj.js"
38799
+ "/_nuxt/daq.B3265ZDn.css": {
38800
+ "type": "text/css; charset=utf-8",
38801
+ "etag": "\"5716-d66zshbHGr48GGRyBvY2sfoJdQ0\"",
38802
+ "mtime": "2026-09-12T05:06:47.074Z",
38803
+ "size": 22294,
38804
+ "path": "../public/_nuxt/daq.B3265ZDn.css"
38339
38805
  },
38340
- "/_nuxt/D-Ca4BGY.js": {
38806
+ "/_nuxt/DdD9mCHM.js": {
38341
38807
  "type": "text/javascript; charset=utf-8",
38342
- "etag": "\"d322-Ji+xNrf2m+xWgNVNTGDuV7nAR7w\"",
38343
- "mtime": "2026-09-11T13:02:27.892Z",
38344
- "size": 54050,
38345
- "path": "../public/_nuxt/D-Ca4BGY.js"
38808
+ "etag": "\"367e-omWo6yki7BAYCZUeWqjXVB4D12g\"",
38809
+ "mtime": "2026-09-12T05:06:47.064Z",
38810
+ "size": 13950,
38811
+ "path": "../public/_nuxt/DdD9mCHM.js"
38346
38812
  },
38347
- "/_nuxt/D1z7i2UP.js": {
38813
+ "/_nuxt/DDgJcSET.js": {
38348
38814
  "type": "text/javascript; charset=utf-8",
38349
- "etag": "\"3488-96j3CtrX45ueUXO7o7l3+3rcKWk\"",
38350
- "mtime": "2026-09-11T13:02:27.892Z",
38351
- "size": 13448,
38352
- "path": "../public/_nuxt/D1z7i2UP.js"
38815
+ "etag": "\"10d2d-J5i2Bh5KGpWiMbirWVsqUXnECEM\"",
38816
+ "mtime": "2026-09-12T05:06:47.060Z",
38817
+ "size": 68909,
38818
+ "path": "../public/_nuxt/DDgJcSET.js"
38353
38819
  },
38354
- "/_nuxt/DaMCzQhv.js": {
38820
+ "/_nuxt/DDShH71m.js": {
38355
38821
  "type": "text/javascript; charset=utf-8",
38356
- "etag": "\"20a6-HojFmGuhMgGaSuNKpUe6ww1mc2c\"",
38357
- "mtime": "2026-09-11T13:02:27.894Z",
38358
- "size": 8358,
38359
- "path": "../public/_nuxt/DaMCzQhv.js"
38822
+ "etag": "\"208b-0HsRaWwHxTBF3c2qeOvAD47ZMqc\"",
38823
+ "mtime": "2026-09-12T05:06:47.060Z",
38824
+ "size": 8331,
38825
+ "path": "../public/_nuxt/DDShH71m.js"
38360
38826
  },
38361
- "/_nuxt/D0fhp-Ga.js": {
38827
+ "/_nuxt/DeJykBFf.js": {
38362
38828
  "type": "text/javascript; charset=utf-8",
38363
- "etag": "\"28a2e-fOJar5XXcm6BPJ0B5LUbSoZ5f7I\"",
38364
- "mtime": "2026-09-11T13:02:27.892Z",
38365
- "size": 166446,
38366
- "path": "../public/_nuxt/D0fhp-Ga.js"
38829
+ "etag": "\"334a-u9bmdQK8w/dApegtnDfx3UMudy0\"",
38830
+ "mtime": "2026-09-12T05:06:47.064Z",
38831
+ "size": 13130,
38832
+ "path": "../public/_nuxt/DeJykBFf.js"
38367
38833
  },
38368
- "/_nuxt/D8CqF0yy.js": {
38369
- "type": "text/javascript; charset=utf-8",
38370
- "etag": "\"1dae-DlKVVV+fkbaFtolHiRzBO1Gjw4s\"",
38371
- "mtime": "2026-09-11T13:02:27.893Z",
38372
- "size": 7598,
38373
- "path": "../public/_nuxt/D8CqF0yy.js"
38374
- },
38375
- "/_nuxt/daq.Bb6l44-O.css": {
38834
+ "/_nuxt/default.DE_vT238.css": {
38376
38835
  "type": "text/css; charset=utf-8",
38377
- "etag": "\"566b-xIfGRXMPjOr3Vjd3F9p2MkDmMgE\"",
38378
- "mtime": "2026-09-11T13:02:27.899Z",
38379
- "size": 22123,
38380
- "path": "../public/_nuxt/daq.Bb6l44-O.css"
38836
+ "etag": "\"3383-KOL7cduQcGPwgDzvdpujb8cbadk\"",
38837
+ "mtime": "2026-09-12T05:06:47.074Z",
38838
+ "size": 13187,
38839
+ "path": "../public/_nuxt/default.DE_vT238.css"
38381
38840
  },
38382
- "/_nuxt/dcw.rXH2fc2Z.css": {
38383
- "type": "text/css; charset=utf-8",
38384
- "etag": "\"21ff-eCEj1LjsZGqaWA3e7HmSw6eii6c\"",
38385
- "mtime": "2026-09-11T13:02:27.900Z",
38386
- "size": 8703,
38387
- "path": "../public/_nuxt/dcw.rXH2fc2Z.css"
38841
+ "/_nuxt/DeyBFhKH2.js": {
38842
+ "type": "text/javascript; charset=utf-8",
38843
+ "etag": "\"de0-Yj9kKk3gjPDsLBddu+/SWVIcWAs\"",
38844
+ "mtime": "2026-09-12T05:06:47.064Z",
38845
+ "size": 3552,
38846
+ "path": "../public/_nuxt/DeyBFhKH2.js"
38388
38847
  },
38389
38848
  "/_nuxt/DeYsUzhr.js": {
38390
38849
  "type": "text/javascript; charset=utf-8",
38391
38850
  "etag": "\"287-ALaKQkZWM37K7ru31bg511e8ikI\"",
38392
- "mtime": "2026-09-11T13:02:27.894Z",
38851
+ "mtime": "2026-09-12T05:06:47.064Z",
38393
38852
  "size": 647,
38394
38853
  "path": "../public/_nuxt/DeYsUzhr.js"
38395
38854
  },
38396
- "/_nuxt/default.jNT73_hq.css": {
38397
- "type": "text/css; charset=utf-8",
38398
- "etag": "\"331a-6TD0bVL9oBl7zJbTtH5EEbyOPMc\"",
38399
- "mtime": "2026-09-11T13:02:27.900Z",
38400
- "size": 13082,
38401
- "path": "../public/_nuxt/default.jNT73_hq.css"
38402
- },
38403
- "/_nuxt/DIaTPH1M.js": {
38855
+ "/_nuxt/DIaZ2PTo2.js": {
38404
38856
  "type": "text/javascript; charset=utf-8",
38405
- "etag": "\"4714-V+kh9wViUtPwdxd+aFTZmN0tkYg\"",
38406
- "mtime": "2026-09-11T13:02:27.893Z",
38407
- "size": 18196,
38408
- "path": "../public/_nuxt/DIaTPH1M.js"
38409
- },
38410
- "/_nuxt/DLljr7g0.js": {
38411
- "type": "text/javascript; charset=utf-8",
38412
- "etag": "\"e476-VQA4IJLzQzu/XZWihB2Sdw3aL+M\"",
38413
- "mtime": "2026-09-11T13:02:27.893Z",
38414
- "size": 58486,
38415
- "path": "../public/_nuxt/DLljr7g0.js"
38857
+ "etag": "\"b14-0G25NjaOjPL8pUTCqFfHo9IuyOU\"",
38858
+ "mtime": "2026-09-12T05:06:47.061Z",
38859
+ "size": 2836,
38860
+ "path": "../public/_nuxt/DIaZ2PTo2.js"
38416
38861
  },
38417
38862
  "/_nuxt/DIOBYJe3.js": {
38418
38863
  "type": "text/javascript; charset=utf-8",
38419
38864
  "etag": "\"4b5-DdWaiyBS+/JejqhLG4Q7/JprP2Q\"",
38420
- "mtime": "2026-09-11T13:02:27.893Z",
38865
+ "mtime": "2026-09-12T05:06:47.061Z",
38421
38866
  "size": 1205,
38422
38867
  "path": "../public/_nuxt/DIOBYJe3.js"
38423
38868
  },
38424
- "/_nuxt/DoLasgPj2.js": {
38869
+ "/_nuxt/DHFrCUxA2.js": {
38425
38870
  "type": "text/javascript; charset=utf-8",
38426
- "etag": "\"20cf-AD2OXvXYmQR29f4gV1ADJLRnCEA\"",
38427
- "mtime": "2026-09-11T13:02:27.894Z",
38428
- "size": 8399,
38429
- "path": "../public/_nuxt/DoLasgPj2.js"
38871
+ "etag": "\"6a25-yH+Kt/gXrDj++gPlxRCMxjita4o\"",
38872
+ "mtime": "2026-09-12T05:06:47.061Z",
38873
+ "size": 27173,
38874
+ "path": "../public/_nuxt/DHFrCUxA2.js"
38430
38875
  },
38431
- "/_nuxt/DpojD719.js": {
38876
+ "/_nuxt/DkGQ7lnb2.js": {
38432
38877
  "type": "text/javascript; charset=utf-8",
38433
- "etag": "\"29d-Fu+XH+dfF6wIVeD5drBDJvCFiPE\"",
38434
- "mtime": "2026-09-11T13:02:27.895Z",
38435
- "size": 669,
38436
- "path": "../public/_nuxt/DpojD719.js"
38878
+ "etag": "\"10e-BEf1fw3Luoou0jWXn/VjweK3eFg\"",
38879
+ "mtime": "2026-09-12T05:06:47.064Z",
38880
+ "size": 270,
38881
+ "path": "../public/_nuxt/DkGQ7lnb2.js"
38437
38882
  },
38438
- "/_nuxt/DoTdlVVe2.js": {
38883
+ "/_nuxt/DnUuIR83.js": {
38439
38884
  "type": "text/javascript; charset=utf-8",
38440
- "etag": "\"d01-26/uhfF7fV7RMTXxvtsI8byutLw\"",
38441
- "mtime": "2026-09-11T13:02:27.894Z",
38442
- "size": 3329,
38443
- "path": "../public/_nuxt/DoTdlVVe2.js"
38885
+ "etag": "\"25e9-8nbC9HSsBhQz/JBDCkuVLAvVelM\"",
38886
+ "mtime": "2026-09-12T05:06:47.065Z",
38887
+ "size": 9705,
38888
+ "path": "../public/_nuxt/DnUuIR83.js"
38444
38889
  },
38445
- "/_nuxt/DoMxCWN52.js": {
38890
+ "/_nuxt/DmqknNvV.js": {
38446
38891
  "type": "text/javascript; charset=utf-8",
38447
- "etag": "\"de0-GL8srJkfz017TYpBE3cZJpSs9GM\"",
38448
- "mtime": "2026-09-11T13:02:27.894Z",
38449
- "size": 3552,
38450
- "path": "../public/_nuxt/DoMxCWN52.js"
38892
+ "etag": "\"26be4-2hzvX3cIxgA2eSHJiw0fjKz7dsY\"",
38893
+ "mtime": "2026-09-12T05:06:47.065Z",
38894
+ "size": 158692,
38895
+ "path": "../public/_nuxt/DmqknNvV.js"
38451
38896
  },
38452
- "/_nuxt/DsVcWfyR.js": {
38897
+ "/_nuxt/DPnwL14Y.js": {
38453
38898
  "type": "text/javascript; charset=utf-8",
38454
- "etag": "\"c9e-yZ3JcodwmRc/Ei+FK82PuQ/5agI\"",
38455
- "mtime": "2026-09-11T13:02:27.895Z",
38456
- "size": 3230,
38457
- "path": "../public/_nuxt/DsVcWfyR.js"
38899
+ "etag": "\"1d26-XSq9sA2ArdeEv8EAehmtwVgJuzE\"",
38900
+ "mtime": "2026-09-12T05:06:47.062Z",
38901
+ "size": 7462,
38902
+ "path": "../public/_nuxt/DPnwL14Y.js"
38458
38903
  },
38459
- "/_nuxt/DtBu71ev.js": {
38904
+ "/_nuxt/DR12_WCA.js": {
38460
38905
  "type": "text/javascript; charset=utf-8",
38461
- "etag": "\"156bf-YTCvoAR5ZNk1ZGVhmY/Bceo/GjQ\"",
38462
- "mtime": "2026-09-11T13:02:27.895Z",
38463
- "size": 87743,
38464
- "path": "../public/_nuxt/DtBu71ev.js"
38906
+ "etag": "\"7e8c-cnN52Tex5ueiXHiBbehql11WL2w\"",
38907
+ "mtime": "2026-09-12T05:06:47.062Z",
38908
+ "size": 32396,
38909
+ "path": "../public/_nuxt/DR12_WCA.js"
38465
38910
  },
38466
- "/_nuxt/DTYBfjRY.js": {
38911
+ "/_nuxt/DrYV5i68.js": {
38467
38912
  "type": "text/javascript; charset=utf-8",
38468
- "etag": "\"1a89-9gPrj/bgllCi+f9Gl6ze+k5zkcw\"",
38469
- "mtime": "2026-09-11T13:02:27.893Z",
38470
- "size": 6793,
38471
- "path": "../public/_nuxt/DTYBfjRY.js"
38913
+ "etag": "\"247c-c3SMdj/FgJdc1JQtOVxTE/w+KWc\"",
38914
+ "mtime": "2026-09-12T05:06:47.065Z",
38915
+ "size": 9340,
38916
+ "path": "../public/_nuxt/DrYV5i68.js"
38472
38917
  },
38473
- "/_nuxt/DXRZPxGs.js": {
38918
+ "/_nuxt/DVsjtsvZ2.js": {
38474
38919
  "type": "text/javascript; charset=utf-8",
38475
- "etag": "\"42-LgXLXdo9BGzBlyxqolWDOt/Ezyg\"",
38476
- "mtime": "2026-09-11T13:02:27.893Z",
38477
- "size": 66,
38478
- "path": "../public/_nuxt/DXRZPxGs.js"
38920
+ "etag": "\"5ad7-SJw11mAwm8ecvvMfEtiG2ti53z8\"",
38921
+ "mtime": "2026-09-12T05:06:47.063Z",
38922
+ "size": 23255,
38923
+ "path": "../public/_nuxt/DVsjtsvZ2.js"
38479
38924
  },
38480
- "/_nuxt/Dy-mxvXY2.js": {
38925
+ "/_nuxt/DYr1VMiQ.js": {
38481
38926
  "type": "text/javascript; charset=utf-8",
38482
- "etag": "\"92-oLgwL98kjyuEcvL717na1ap9Tks\"",
38483
- "mtime": "2026-09-11T13:02:27.895Z",
38484
- "size": 146,
38485
- "path": "../public/_nuxt/Dy-mxvXY2.js"
38927
+ "etag": "\"14128-u+iLJm1OCFSZy6SZdZC9SpDNZKM\"",
38928
+ "mtime": "2026-09-12T05:06:47.063Z",
38929
+ "size": 82216,
38930
+ "path": "../public/_nuxt/DYr1VMiQ.js"
38486
38931
  },
38487
- "/_nuxt/DYKVPzN-.js": {
38932
+ "/_nuxt/DtYHUi5Z.js": {
38488
38933
  "type": "text/javascript; charset=utf-8",
38489
- "etag": "\"2f1-2SqdcwA9pq7Hk89eLtL9kizQDVw\"",
38490
- "mtime": "2026-09-11T13:02:27.894Z",
38491
- "size": 753,
38492
- "path": "../public/_nuxt/DYKVPzN-.js"
38934
+ "etag": "\"2435-K8RPT3nu03HotXRj2dJy+ny1j2A\"",
38935
+ "mtime": "2026-09-12T05:06:47.065Z",
38936
+ "size": 9269,
38937
+ "path": "../public/_nuxt/DtYHUi5Z.js"
38493
38938
  },
38494
- "/_nuxt/DZzGarBE2.js": {
38939
+ "/_nuxt/DzbFpZRk.js": {
38495
38940
  "type": "text/javascript; charset=utf-8",
38496
- "etag": "\"6a1e-ugf89JrIJQnC30eHwV4G/TERkwI\"",
38497
- "mtime": "2026-09-11T13:02:27.894Z",
38498
- "size": 27166,
38499
- "path": "../public/_nuxt/DZzGarBE2.js"
38941
+ "etag": "\"12d7-yzX3bY+yjWI2Ir8cswaDbLtltvQ\"",
38942
+ "mtime": "2026-09-12T05:06:47.066Z",
38943
+ "size": 4823,
38944
+ "path": "../public/_nuxt/DzbFpZRk.js"
38500
38945
  },
38501
- "/_nuxt/DzuC31-i.js": {
38946
+ "/_nuxt/DZtm4l-P2.js": {
38502
38947
  "type": "text/javascript; charset=utf-8",
38503
- "etag": "\"3fee-uHvx7EEJFuaMuP4BvDnqgIafaNw\"",
38504
- "mtime": "2026-09-11T13:02:27.895Z",
38505
- "size": 16366,
38506
- "path": "../public/_nuxt/DzuC31-i.js"
38948
+ "etag": "\"1876-xVj/E45RroZBjWvEiBrZZOcvgoI\"",
38949
+ "mtime": "2026-09-12T05:06:47.063Z",
38950
+ "size": 6262,
38951
+ "path": "../public/_nuxt/DZtm4l-P2.js"
38952
+ },
38953
+ "/_nuxt/Dz_Q3Lpw2.js": {
38954
+ "type": "text/javascript; charset=utf-8",
38955
+ "etag": "\"39d2-I7HGf3BtAL6slz4WB2XKvH99HmQ\"",
38956
+ "mtime": "2026-09-12T05:06:47.066Z",
38957
+ "size": 14802,
38958
+ "path": "../public/_nuxt/Dz_Q3Lpw2.js"
38507
38959
  },
38508
38960
  "/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff": {
38509
38961
  "type": "font/woff",
38510
38962
  "etag": "\"3f04-1MKyFKXvChwQTK9MnbAM3SwAP/w\"",
38511
- "mtime": "2026-09-11T13:02:27.900Z",
38963
+ "mtime": "2026-09-12T05:06:47.075Z",
38512
38964
  "size": 16132,
38513
38965
  "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff"
38514
38966
  },
38515
38967
  "/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2": {
38516
38968
  "type": "font/woff2",
38517
38969
  "etag": "\"3504-t17DeaJZ5CiTr/7PdWXcRgN9/Yc\"",
38518
- "mtime": "2026-09-11T13:02:27.900Z",
38970
+ "mtime": "2026-09-12T05:06:47.075Z",
38519
38971
  "size": 13572,
38520
38972
  "path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2"
38521
38973
  },
38522
- "/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff": {
38523
- "type": "font/woff",
38524
- "etag": "\"3c88-Q5XoFKe1rGp1UkdvSR6MtPcFfgQ\"",
38525
- "mtime": "2026-09-11T13:02:27.901Z",
38526
- "size": 15496,
38527
- "path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff"
38528
- },
38529
38974
  "/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2": {
38530
38975
  "type": "font/woff2",
38531
38976
  "etag": "\"33d4-lVrdxXudnaWAAL0JfU6b+yZGpK0\"",
38532
- "mtime": "2026-09-11T13:02:27.901Z",
38977
+ "mtime": "2026-09-12T05:06:47.075Z",
38533
38978
  "size": 13268,
38534
38979
  "path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2"
38535
38980
  },
38536
- "/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff": {
38981
+ "/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff": {
38537
38982
  "type": "font/woff",
38538
- "etag": "\"5698-6bgErOYTElI0Z3Untp+h0Xi0FGs\"",
38539
- "mtime": "2026-09-11T13:02:27.901Z",
38540
- "size": 22168,
38541
- "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff"
38983
+ "etag": "\"3c88-Q5XoFKe1rGp1UkdvSR6MtPcFfgQ\"",
38984
+ "mtime": "2026-09-12T05:06:47.075Z",
38985
+ "size": 15496,
38986
+ "path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff"
38542
38987
  },
38543
38988
  "/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2": {
38544
38989
  "type": "font/woff2",
38545
38990
  "etag": "\"4620-AEmSjSDDFDLAiok0BdjqqFs2mx4\"",
38546
- "mtime": "2026-09-11T13:02:27.901Z",
38991
+ "mtime": "2026-09-12T05:06:47.075Z",
38547
38992
  "size": 17952,
38548
38993
  "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2"
38549
38994
  },
38550
38995
  "/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff": {
38551
38996
  "type": "font/woff",
38552
38997
  "etag": "\"4fcc-Wt58DNvJEH8PhhsEwR/fAuZLZf0\"",
38553
- "mtime": "2026-09-11T13:02:27.901Z",
38998
+ "mtime": "2026-09-12T05:06:47.076Z",
38554
38999
  "size": 20428,
38555
39000
  "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff"
38556
39001
  },
39002
+ "/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff": {
39003
+ "type": "font/woff",
39004
+ "etag": "\"5698-6bgErOYTElI0Z3Untp+h0Xi0FGs\"",
39005
+ "mtime": "2026-09-12T05:06:47.076Z",
39006
+ "size": 22168,
39007
+ "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff"
39008
+ },
38557
39009
  "/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2": {
38558
39010
  "type": "font/woff2",
38559
39011
  "etag": "\"419c-BgVrkDzxBAskhVuAe8ZPKrVJ2vk\"",
38560
- "mtime": "2026-09-11T13:02:27.901Z",
39012
+ "mtime": "2026-09-12T05:06:47.076Z",
38561
39013
  "size": 16796,
38562
39014
  "path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2"
38563
39015
  },
38564
- "/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff": {
38565
- "type": "font/woff",
38566
- "etag": "\"307c-Fmorq8T0Tyl1FByuAGfnIMJMsU0\"",
38567
- "mtime": "2026-09-11T13:02:27.902Z",
38568
- "size": 12412,
38569
- "path": "../public/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff"
38570
- },
38571
39016
  "/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2": {
38572
39017
  "type": "font/woff2",
38573
39018
  "etag": "\"2904-BXAeLh8O+jrT8ujKrV7WtU2zP1c\"",
38574
- "mtime": "2026-09-11T13:02:27.902Z",
39019
+ "mtime": "2026-09-12T05:06:47.076Z",
38575
39020
  "size": 10500,
38576
39021
  "path": "../public/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2"
38577
39022
  },
39023
+ "/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff": {
39024
+ "type": "font/woff",
39025
+ "etag": "\"307c-Fmorq8T0Tyl1FByuAGfnIMJMsU0\"",
39026
+ "mtime": "2026-09-12T05:06:47.076Z",
39027
+ "size": 12412,
39028
+ "path": "../public/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff"
39029
+ },
38578
39030
  "/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2": {
38579
39031
  "type": "font/woff2",
38580
39032
  "etag": "\"2a00-ZNzj8SIiN3t2N23u++WhC6jE8gk\"",
38581
- "mtime": "2026-09-11T13:02:27.902Z",
39033
+ "mtime": "2026-09-12T05:06:47.077Z",
38582
39034
  "size": 10752,
38583
39035
  "path": "../public/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2"
38584
39036
  },
38585
39037
  "/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff": {
38586
39038
  "type": "font/woff",
38587
39039
  "etag": "\"3108-ggShwQ6kE+MAR7EEQafdmWunxHg\"",
38588
- "mtime": "2026-09-11T13:02:27.902Z",
39040
+ "mtime": "2026-09-12T05:06:47.077Z",
38589
39041
  "size": 12552,
38590
39042
  "path": "../public/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff"
38591
39043
  },
38592
39044
  "/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff": {
38593
39045
  "type": "font/woff",
38594
39046
  "etag": "\"2304-q8ppn7qePqLys53UrEKMrGT8e6E\"",
38595
- "mtime": "2026-09-11T13:02:27.902Z",
39047
+ "mtime": "2026-09-12T05:06:47.077Z",
38596
39048
  "size": 8964,
38597
39049
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff"
38598
39050
  },
38599
39051
  "/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2": {
38600
39052
  "type": "font/woff2",
38601
39053
  "etag": "\"19d0-ppOK6AfNTXYuDEeeEMQQhOypGW8\"",
38602
- "mtime": "2026-09-11T13:02:27.903Z",
39054
+ "mtime": "2026-09-12T05:06:47.078Z",
38603
39055
  "size": 6608,
38604
39056
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2"
38605
39057
  },
38606
39058
  "/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff": {
38607
39059
  "type": "font/woff",
38608
39060
  "etag": "\"20b0-FNV/ZgjupejIrGOsz4+8EYVUXHo\"",
38609
- "mtime": "2026-09-11T13:02:27.903Z",
39061
+ "mtime": "2026-09-12T05:06:47.078Z",
38610
39062
  "size": 8368,
38611
39063
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff"
38612
39064
  },
39065
+ "/_nuxt/DUrecWPx.js": {
39066
+ "type": "text/javascript; charset=utf-8",
39067
+ "etag": "\"9095e-l1Y5uaqwCSwzDmMZvMC0IgZ+OHM\"",
39068
+ "mtime": "2026-09-12T05:06:47.062Z",
39069
+ "size": 592222,
39070
+ "path": "../public/_nuxt/DUrecWPx.js"
39071
+ },
38613
39072
  "/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2": {
38614
39073
  "type": "font/woff2",
38615
39074
  "etag": "\"1940-Y3hsqG2RXMGI9hHTiI+Nv2Q4msM\"",
38616
- "mtime": "2026-09-11T13:02:27.903Z",
39075
+ "mtime": "2026-09-12T05:06:47.078Z",
38617
39076
  "size": 6464,
38618
39077
  "path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2"
38619
39078
  },
38620
39079
  "/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff": {
38621
39080
  "type": "font/woff",
38622
39081
  "etag": "\"7890-VX8YYh09367bg28IWSUybEXrsDQ\"",
38623
- "mtime": "2026-09-11T13:02:27.903Z",
39082
+ "mtime": "2026-09-12T05:06:47.078Z",
38624
39083
  "size": 30864,
38625
39084
  "path": "../public/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff"
38626
39085
  },
38627
- "/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff": {
38628
- "type": "font/woff",
38629
- "etag": "\"6fc0-tKFcVMt7ocp7dmWyG6/kxtP5mKY\"",
38630
- "mtime": "2026-09-11T13:02:27.904Z",
38631
- "size": 28608,
38632
- "path": "../public/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff"
38633
- },
38634
39086
  "/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2": {
38635
39087
  "type": "font/woff2",
38636
39088
  "etag": "\"632c-iB8RNlBCm9D0APLcMJ/hIPATx+0\"",
38637
- "mtime": "2026-09-11T13:02:27.903Z",
39089
+ "mtime": "2026-09-12T05:06:47.078Z",
38638
39090
  "size": 25388,
38639
39091
  "path": "../public/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2"
38640
39092
  },
38641
39093
  "/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2": {
38642
39094
  "type": "font/woff2",
38643
39095
  "etag": "\"5d0c-w7FmIa34l5RBoJYmvp9lwadEvW4\"",
38644
- "mtime": "2026-09-11T13:02:27.903Z",
39096
+ "mtime": "2026-09-12T05:06:47.079Z",
38645
39097
  "size": 23820,
38646
39098
  "path": "../public/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2"
38647
39099
  },
38648
39100
  "/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff": {
38649
39101
  "type": "font/woff",
38650
39102
  "etag": "\"f5b8-o98RIl4uKzIPJHZZpEI+mI17K3c\"",
38651
- "mtime": "2026-09-11T13:02:27.904Z",
39103
+ "mtime": "2026-09-12T05:06:47.079Z",
38652
39104
  "size": 62904,
38653
39105
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff"
38654
39106
  },
39107
+ "/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff": {
39108
+ "type": "font/woff",
39109
+ "etag": "\"6fc0-tKFcVMt7ocp7dmWyG6/kxtP5mKY\"",
39110
+ "mtime": "2026-09-12T05:06:47.079Z",
39111
+ "size": 28608,
39112
+ "path": "../public/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff"
39113
+ },
38655
39114
  "/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2": {
38656
39115
  "type": "font/woff2",
38657
39116
  "etag": "\"b19c-7qms9anmdJJsBixQTHSocgV31Qk\"",
38658
- "mtime": "2026-09-11T13:02:27.904Z",
39117
+ "mtime": "2026-09-12T05:06:47.079Z",
38659
39118
  "size": 45468,
38660
39119
  "path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2"
38661
39120
  },
38662
- "/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff": {
38663
- "type": "font/woff",
38664
- "etag": "\"12b44-jg/K3aZca4XOngCAf1Jh47/0cj8\"",
38665
- "mtime": "2026-09-11T13:02:27.904Z",
38666
- "size": 76612,
38667
- "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff"
39121
+ "/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2": {
39122
+ "type": "font/woff2",
39123
+ "etag": "\"de84-qKZ/sgxlZLRv1TmEnWR30Cc4wfw\"",
39124
+ "mtime": "2026-09-12T05:06:47.080Z",
39125
+ "size": 56964,
39126
+ "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2"
38668
39127
  },
38669
39128
  "/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2": {
38670
39129
  "type": "font/woff2",
38671
39130
  "etag": "\"187c-Wj36AOh9OjwDZT5W3eeao1D/NT4\"",
38672
- "mtime": "2026-09-11T13:02:27.904Z",
39131
+ "mtime": "2026-09-12T05:06:47.080Z",
38673
39132
  "size": 6268,
38674
39133
  "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2"
38675
39134
  },
38676
- "/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2": {
38677
- "type": "font/woff2",
38678
- "etag": "\"de84-qKZ/sgxlZLRv1TmEnWR30Cc4wfw\"",
38679
- "mtime": "2026-09-11T13:02:27.904Z",
38680
- "size": 56964,
38681
- "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2"
39135
+ "/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff": {
39136
+ "type": "font/woff",
39137
+ "etag": "\"12b44-jg/K3aZca4XOngCAf1Jh47/0cj8\"",
39138
+ "mtime": "2026-09-12T05:06:47.080Z",
39139
+ "size": 76612,
39140
+ "path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff"
38682
39141
  },
38683
39142
  "/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff": {
38684
39143
  "type": "font/woff",
38685
39144
  "etag": "\"1edc-XUugZ4qMSSF4m+TQLER2LLza1t0\"",
38686
- "mtime": "2026-09-11T13:02:27.904Z",
39145
+ "mtime": "2026-09-12T05:06:47.080Z",
38687
39146
  "size": 7900,
38688
39147
  "path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff"
38689
39148
  },
38690
- "/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2": {
38691
- "type": "font/woff2",
38692
- "etag": "\"183c-arAHcc3MmJQ6+OtYVThlERUqDQQ\"",
38693
- "mtime": "2026-09-11T13:02:27.904Z",
38694
- "size": 6204,
38695
- "path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2"
38696
- },
38697
39149
  "/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff": {
38698
39150
  "type": "font/woff",
38699
39151
  "etag": "\"1e50-PGVIQbsmhTvI1h5aIhavpIQl8z4\"",
38700
- "mtime": "2026-09-11T13:02:27.904Z",
39152
+ "mtime": "2026-09-12T05:06:47.081Z",
38701
39153
  "size": 7760,
38702
39154
  "path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff"
38703
39155
  },
38704
- "/_nuxt/ekuGmQ7R.js": {
38705
- "type": "text/javascript; charset=utf-8",
38706
- "etag": "\"5f2-QOjCRpxYZho41W5eoXY4CpvV16I\"",
38707
- "mtime": "2026-09-11T13:02:27.897Z",
38708
- "size": 1522,
38709
- "path": "../public/_nuxt/ekuGmQ7R.js"
38710
- },
38711
- "/_nuxt/FQri3dV3.js": {
38712
- "type": "text/javascript; charset=utf-8",
38713
- "etag": "\"9d28-A1mhFeEq6JXP9WiU/lzgX6qqGnM\"",
38714
- "mtime": "2026-09-11T13:02:27.895Z",
38715
- "size": 40232,
38716
- "path": "../public/_nuxt/FQri3dV3.js"
39156
+ "/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2": {
39157
+ "type": "font/woff2",
39158
+ "etag": "\"183c-arAHcc3MmJQ6+OtYVThlERUqDQQ\"",
39159
+ "mtime": "2026-09-12T05:06:47.081Z",
39160
+ "size": 6204,
39161
+ "path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2"
38717
39162
  },
38718
39163
  "/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2": {
38719
39164
  "type": "font/woff2",
38720
39165
  "etag": "\"1cfc-yYSDXNlt/tTRaj6rJo8ZMqvY7pQ\"",
38721
- "mtime": "2026-09-11T13:02:27.906Z",
39166
+ "mtime": "2026-09-12T05:06:47.081Z",
38722
39167
  "size": 7420,
38723
39168
  "path": "../public/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2"
38724
39169
  },
38725
- "/_nuxt/G0qIw7Gq2.js": {
38726
- "type": "text/javascript; charset=utf-8",
38727
- "etag": "\"462-s/N+VoJiDplj3GORHgaIwAR+Uqk\"",
38728
- "mtime": "2026-09-11T13:02:27.896Z",
38729
- "size": 1122,
38730
- "path": "../public/_nuxt/G0qIw7Gq2.js"
38731
- },
38732
- "/_nuxt/entry.jFrFAWuA.css": {
38733
- "type": "text/css; charset=utf-8",
38734
- "etag": "\"2149f-XybaaWT8IIh+ycY/8Br++oA4uGU\"",
38735
- "mtime": "2026-09-11T13:02:27.905Z",
38736
- "size": 136351,
38737
- "path": "../public/_nuxt/entry.jFrFAWuA.css"
38738
- },
38739
39170
  "/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2": {
38740
39171
  "type": "font/woff2",
38741
39172
  "etag": "\"3aec-5kpQSZEtAzzU5kdiuro3Zr2YR54\"",
38742
- "mtime": "2026-09-11T13:02:27.906Z",
39173
+ "mtime": "2026-09-12T05:06:47.081Z",
38743
39174
  "size": 15084,
38744
39175
  "path": "../public/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2"
38745
39176
  },
39177
+ "/_nuxt/entry.BB-Eeh-J.css": {
39178
+ "type": "text/css; charset=utf-8",
39179
+ "etag": "\"22c96-XxnjyI/eCOm4bHchDmRm07nGUdw\"",
39180
+ "mtime": "2026-09-12T05:06:47.081Z",
39181
+ "size": 142486,
39182
+ "path": "../public/_nuxt/entry.BB-Eeh-J.css"
39183
+ },
38746
39184
  "/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2": {
38747
39185
  "type": "font/woff2",
38748
39186
  "etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
38749
- "mtime": "2026-09-11T13:02:27.906Z",
39187
+ "mtime": "2026-09-12T05:06:47.082Z",
38750
39188
  "size": 16512,
38751
39189
  "path": "../public/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2"
38752
39190
  },
38753
39191
  "/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2": {
38754
39192
  "type": "font/woff2",
38755
39193
  "etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
38756
- "mtime": "2026-09-11T13:02:27.907Z",
39194
+ "mtime": "2026-09-12T05:06:47.082Z",
38757
39195
  "size": 29400,
38758
39196
  "path": "../public/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2"
38759
39197
  },
38760
- "/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2": {
38761
- "type": "font/woff2",
38762
- "etag": "\"328c-3kQUs7xjzfvJdLvI58iU6DHlynA\"",
38763
- "mtime": "2026-09-11T13:02:27.907Z",
38764
- "size": 12940,
38765
- "path": "../public/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2"
38766
- },
38767
39198
  "/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2": {
38768
39199
  "type": "font/woff2",
38769
39200
  "etag": "\"1820-nQACIwCsmkduQK2CSMidMhmLR9U\"",
38770
- "mtime": "2026-09-11T13:02:27.907Z",
39201
+ "mtime": "2026-09-12T05:06:47.082Z",
38771
39202
  "size": 6176,
38772
39203
  "path": "../public/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2"
38773
39204
  },
38774
39205
  "/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2": {
38775
39206
  "type": "font/woff2",
38776
39207
  "etag": "\"3968-BV9ZbqWHVAcipAKX5y8la3JkUQs\"",
38777
- "mtime": "2026-09-11T13:02:27.907Z",
39208
+ "mtime": "2026-09-12T05:06:47.083Z",
38778
39209
  "size": 14696,
38779
39210
  "path": "../public/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2"
38780
39211
  },
39212
+ "/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2": {
39213
+ "type": "font/woff2",
39214
+ "etag": "\"328c-3kQUs7xjzfvJdLvI58iU6DHlynA\"",
39215
+ "mtime": "2026-09-12T05:06:47.082Z",
39216
+ "size": 12940,
39217
+ "path": "../public/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2"
39218
+ },
38781
39219
  "/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2": {
38782
39220
  "type": "font/woff2",
38783
39221
  "etag": "\"5a58-jDy+14PX7OhwqFZsiKzuRax9xZ8\"",
38784
- "mtime": "2026-09-11T13:02:27.908Z",
39222
+ "mtime": "2026-09-12T05:06:47.083Z",
38785
39223
  "size": 23128,
38786
39224
  "path": "../public/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2"
38787
39225
  },
38788
39226
  "/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2": {
38789
39227
  "type": "font/woff2",
38790
39228
  "etag": "\"16b4-aZoLOGWoEYW7gmwZamfz5kTfFco\"",
38791
- "mtime": "2026-09-11T13:02:27.908Z",
39229
+ "mtime": "2026-09-12T05:06:47.083Z",
38792
39230
  "size": 5812,
38793
39231
  "path": "../public/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2"
38794
39232
  },
38795
39233
  "/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2": {
38796
39234
  "type": "font/woff2",
38797
39235
  "etag": "\"1e10-mpU2OlFk4DakDO4paRfgJ2LHDsM\"",
38798
- "mtime": "2026-09-11T13:02:27.908Z",
39236
+ "mtime": "2026-09-12T05:06:47.083Z",
38799
39237
  "size": 7696,
38800
39238
  "path": "../public/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2"
38801
39239
  },
38802
39240
  "/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2": {
38803
39241
  "type": "font/woff2",
38804
39242
  "etag": "\"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8\"",
38805
- "mtime": "2026-09-11T13:02:27.908Z",
39243
+ "mtime": "2026-09-12T05:06:47.083Z",
38806
39244
  "size": 8004,
38807
39245
  "path": "../public/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2"
38808
39246
  },
39247
+ "/_nuxt/HBLJ-wei.js": {
39248
+ "type": "text/javascript; charset=utf-8",
39249
+ "etag": "\"13a1-fzEUxRt3em5vbto3D3QQ5+jkREo\"",
39250
+ "mtime": "2026-09-12T05:06:47.066Z",
39251
+ "size": 5025,
39252
+ "path": "../public/_nuxt/HBLJ-wei.js"
39253
+ },
38809
39254
  "/_nuxt/HclGiUj8.js": {
38810
39255
  "type": "text/javascript; charset=utf-8",
38811
39256
  "etag": "\"4bb-OjUbx7m0dPDFUkNfZ4BuUs+1sHI\"",
38812
- "mtime": "2026-09-11T13:02:27.896Z",
39257
+ "mtime": "2026-09-12T05:06:47.066Z",
38813
39258
  "size": 1211,
38814
39259
  "path": "../public/_nuxt/HclGiUj8.js"
38815
39260
  },
38816
- "/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff": {
38817
- "type": "font/woff",
38818
- "etag": "\"1c24-wpeoT2YBcqJ4hbipsoiB1m58w98\"",
38819
- "mtime": "2026-09-11T13:02:27.909Z",
38820
- "size": 7204,
38821
- "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff"
39261
+ "/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2": {
39262
+ "type": "font/woff2",
39263
+ "etag": "\"20a4-mDbzFbXDuciYuRDdYbcJkcocaWU\"",
39264
+ "mtime": "2026-09-12T05:06:47.084Z",
39265
+ "size": 8356,
39266
+ "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2"
38822
39267
  },
38823
39268
  "/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff": {
38824
39269
  "type": "font/woff",
38825
39270
  "etag": "\"1c28-50yap58S0sLYRB2B8AEk2dq82kg\"",
38826
- "mtime": "2026-09-11T13:02:27.909Z",
39271
+ "mtime": "2026-09-12T05:06:47.084Z",
38827
39272
  "size": 7208,
38828
39273
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff"
38829
39274
  },
38830
- "/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2": {
38831
- "type": "font/woff2",
38832
- "etag": "\"20a4-mDbzFbXDuciYuRDdYbcJkcocaWU\"",
38833
- "mtime": "2026-09-11T13:02:27.909Z",
38834
- "size": 8356,
38835
- "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2"
39275
+ "/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff": {
39276
+ "type": "font/woff",
39277
+ "etag": "\"1c24-wpeoT2YBcqJ4hbipsoiB1m58w98\"",
39278
+ "mtime": "2026-09-12T05:06:47.084Z",
39279
+ "size": 7204,
39280
+ "path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff"
38836
39281
  },
38837
39282
  "/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2": {
38838
39283
  "type": "font/woff2",
38839
39284
  "etag": "\"210c-yqAnW+098RkHUvQzwj27Jo9sIUc\"",
38840
- "mtime": "2026-09-11T13:02:27.909Z",
39285
+ "mtime": "2026-09-12T05:06:47.084Z",
38841
39286
  "size": 8460,
38842
39287
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2"
38843
39288
  },
38844
39289
  "/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff": {
38845
39290
  "type": "font/woff",
38846
39291
  "etag": "\"1c64-t3eBraFEv1B6D+DIfK23+8/F2mA\"",
38847
- "mtime": "2026-09-11T13:02:27.909Z",
39292
+ "mtime": "2026-09-12T05:06:47.085Z",
38848
39293
  "size": 7268,
38849
39294
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff"
38850
39295
  },
38851
39296
  "/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2": {
38852
39297
  "type": "font/woff2",
38853
39298
  "etag": "\"2488-WHfw+ZaOHy8HhYaV0AzfKZ8dozA\"",
38854
- "mtime": "2026-09-11T13:02:27.909Z",
39299
+ "mtime": "2026-09-12T05:06:47.084Z",
38855
39300
  "size": 9352,
38856
39301
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2"
38857
39302
  },
38858
39303
  "/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff": {
38859
39304
  "type": "font/woff",
38860
39305
  "etag": "\"16bc-GBHBT1lClOFRLkxzjkkoZV1QN+Y\"",
38861
- "mtime": "2026-09-11T13:02:27.909Z",
39306
+ "mtime": "2026-09-12T05:06:47.085Z",
38862
39307
  "size": 5820,
38863
39308
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff"
38864
39309
  },
38865
39310
  "/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2": {
38866
39311
  "type": "font/woff2",
38867
39312
  "etag": "\"1b00-w57wcK5m30ZZ4sBwsaWzlcI3F7c\"",
38868
- "mtime": "2026-09-11T13:02:27.910Z",
39313
+ "mtime": "2026-09-12T05:06:47.085Z",
38869
39314
  "size": 6912,
38870
39315
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2"
38871
39316
  },
38872
39317
  "/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff": {
38873
39318
  "type": "font/woff",
38874
39319
  "etag": "\"168c-gvDCX7ATl9g9LbPEKlQjJSXhRPw\"",
38875
- "mtime": "2026-09-11T13:02:27.910Z",
39320
+ "mtime": "2026-09-12T05:06:47.085Z",
38876
39321
  "size": 5772,
38877
39322
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff"
38878
39323
  },
38879
39324
  "/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2": {
38880
39325
  "type": "font/woff2",
38881
39326
  "etag": "\"1b3c-pFin0Xk9XlGLhqdo1+npFJkyQ5Y\"",
38882
- "mtime": "2026-09-11T13:02:27.910Z",
39327
+ "mtime": "2026-09-12T05:06:47.085Z",
38883
39328
  "size": 6972,
38884
39329
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2"
38885
39330
  },
38886
- "/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff": {
38887
- "type": "font/woff",
38888
- "etag": "\"16a0-8RgtlGopOkBt2P4jKMMd7hk+D74\"",
38889
- "mtime": "2026-09-11T13:02:27.910Z",
38890
- "size": 5792,
38891
- "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff"
38892
- },
38893
39331
  "/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2": {
38894
39332
  "type": "font/woff2",
38895
39333
  "etag": "\"1e0c-R9/TBUX2qLWGlHeC55LoggyLdII\"",
38896
- "mtime": "2026-09-11T13:02:27.910Z",
39334
+ "mtime": "2026-09-12T05:06:47.086Z",
38897
39335
  "size": 7692,
38898
39336
  "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2"
38899
39337
  },
38900
- "/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff": {
39338
+ "/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff": {
38901
39339
  "type": "font/woff",
38902
- "etag": "\"3358-rWMSbc9cch7FBErQpfnWcshAYFM\"",
38903
- "mtime": "2026-09-11T13:02:27.911Z",
38904
- "size": 13144,
38905
- "path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff"
39340
+ "etag": "\"16a0-8RgtlGopOkBt2P4jKMMd7hk+D74\"",
39341
+ "mtime": "2026-09-12T05:06:47.086Z",
39342
+ "size": 5792,
39343
+ "path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff"
38906
39344
  },
38907
39345
  "/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2": {
38908
39346
  "type": "font/woff2",
38909
39347
  "etag": "\"3974-u4dQDjIEo6fGXWYzx5xchAw76NM\"",
38910
- "mtime": "2026-09-11T13:02:27.911Z",
39348
+ "mtime": "2026-09-12T05:06:47.086Z",
38911
39349
  "size": 14708,
38912
39350
  "path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2"
38913
39351
  },
39352
+ "/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff": {
39353
+ "type": "font/woff",
39354
+ "etag": "\"3358-rWMSbc9cch7FBErQpfnWcshAYFM\"",
39355
+ "mtime": "2026-09-12T05:06:47.086Z",
39356
+ "size": 13144,
39357
+ "path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff"
39358
+ },
38914
39359
  "/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff": {
38915
39360
  "type": "font/woff",
38916
39361
  "etag": "\"3364-S8wip5no4QO46BFh3FPzQKpIOec\"",
38917
- "mtime": "2026-09-11T13:02:27.911Z",
39362
+ "mtime": "2026-09-12T05:06:47.086Z",
38918
39363
  "size": 13156,
38919
39364
  "path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff"
38920
39365
  },
39366
+ "/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff": {
39367
+ "type": "font/woff",
39368
+ "etag": "\"3398-D/GHpHo4zls8HLHH2boKeigB6S4\"",
39369
+ "mtime": "2026-09-12T05:06:47.087Z",
39370
+ "size": 13208,
39371
+ "path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff"
39372
+ },
38921
39373
  "/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2": {
38922
39374
  "type": "font/woff2",
38923
39375
  "etag": "\"3a28-0y8OBwGsYgQ4QBMagAznF6huTuI\"",
38924
- "mtime": "2026-09-11T13:02:27.911Z",
39376
+ "mtime": "2026-09-12T05:06:47.086Z",
38925
39377
  "size": 14888,
38926
39378
  "path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2"
38927
39379
  },
38928
39380
  "/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2": {
38929
39381
  "type": "font/woff2",
38930
39382
  "etag": "\"3d04-zppco6h02pIBwmMMXLe/qpaIwFI\"",
38931
- "mtime": "2026-09-11T13:02:27.911Z",
39383
+ "mtime": "2026-09-12T05:06:47.086Z",
38932
39384
  "size": 15620,
38933
39385
  "path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2"
38934
39386
  },
38935
- "/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff": {
38936
- "type": "font/woff",
38937
- "etag": "\"3398-D/GHpHo4zls8HLHH2boKeigB6S4\"",
38938
- "mtime": "2026-09-11T13:02:27.911Z",
38939
- "size": 13208,
38940
- "path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff"
38941
- },
38942
39387
  "/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2": {
38943
39388
  "type": "font/woff2",
38944
39389
  "etag": "\"3424-SvjO9SK9iRLLL61B4GuQJWQP62I\"",
38945
- "mtime": "2026-09-11T13:02:27.911Z",
39390
+ "mtime": "2026-09-12T05:06:47.087Z",
38946
39391
  "size": 13348,
38947
39392
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2"
38948
39393
  },
38949
39394
  "/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff": {
38950
39395
  "type": "font/woff",
38951
39396
  "etag": "\"2df8-dfJwTWMZxHyGnUuJDGfpU4w2dLs\"",
38952
- "mtime": "2026-09-11T13:02:27.912Z",
39397
+ "mtime": "2026-09-12T05:06:47.088Z",
38953
39398
  "size": 11768,
38954
39399
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff"
38955
39400
  },
38956
- "/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2": {
38957
- "type": "font/woff2",
38958
- "etag": "\"3478-PpQvQo59iHxPLcEUBhJfmFmCPuA\"",
38959
- "mtime": "2026-09-11T13:02:27.912Z",
38960
- "size": 13432,
38961
- "path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2"
38962
- },
38963
39401
  "/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff": {
38964
39402
  "type": "font/woff",
38965
39403
  "etag": "\"2df8-73sb1BUyjMsq70ppsdZBHEqWrtE\"",
38966
- "mtime": "2026-09-11T13:02:27.912Z",
39404
+ "mtime": "2026-09-12T05:06:47.088Z",
38967
39405
  "size": 11768,
38968
39406
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff"
38969
39407
  },
38970
- "/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff": {
38971
- "type": "font/woff",
38972
- "etag": "\"2e38-fOmVENNzEJaYqxODn6K5NAbrEJk\"",
38973
- "mtime": "2026-09-11T13:02:27.912Z",
38974
- "size": 11832,
38975
- "path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff"
39408
+ "/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2": {
39409
+ "type": "font/woff2",
39410
+ "etag": "\"3478-PpQvQo59iHxPLcEUBhJfmFmCPuA\"",
39411
+ "mtime": "2026-09-12T05:06:47.088Z",
39412
+ "size": 13432,
39413
+ "path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2"
38976
39414
  },
38977
39415
  "/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2": {
38978
39416
  "type": "font/woff2",
38979
39417
  "etag": "\"37f8-5XYRqKuMO2rN5QZqfj4VW8r2jSQ\"",
38980
- "mtime": "2026-09-11T13:02:27.912Z",
39418
+ "mtime": "2026-09-12T05:06:47.088Z",
38981
39419
  "size": 14328,
38982
39420
  "path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2"
38983
39421
  },
38984
- "/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff": {
39422
+ "/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff": {
38985
39423
  "type": "font/woff",
38986
- "etag": "\"15f0-mGuZIt/ndQFiw5uxmCOkhhWSxi4\"",
38987
- "mtime": "2026-09-11T13:02:27.913Z",
38988
- "size": 5616,
38989
- "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff"
39424
+ "etag": "\"2e38-fOmVENNzEJaYqxODn6K5NAbrEJk\"",
39425
+ "mtime": "2026-09-12T05:06:47.089Z",
39426
+ "size": 11832,
39427
+ "path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff"
38990
39428
  },
38991
39429
  "/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2": {
38992
39430
  "type": "font/woff2",
38993
39431
  "etag": "\"16ec-bIkS18/YaTiWdOzfzp4pFXvLmqQ\"",
38994
- "mtime": "2026-09-11T13:02:27.913Z",
39432
+ "mtime": "2026-09-12T05:06:47.089Z",
38995
39433
  "size": 5868,
38996
39434
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2"
38997
39435
  },
38998
39436
  "/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff": {
38999
39437
  "type": "font/woff",
39000
39438
  "etag": "\"15f4-LdRX2sBB3T5WDAsZLCwBlsMYXPw\"",
39001
- "mtime": "2026-09-11T13:02:27.913Z",
39439
+ "mtime": "2026-09-12T05:06:47.089Z",
39002
39440
  "size": 5620,
39003
39441
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff"
39004
39442
  },
39005
39443
  "/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2": {
39006
39444
  "type": "font/woff2",
39007
39445
  "etag": "\"1798-7VDjg0E2ggd9c0kJDHNRh+Fu5E0\"",
39008
- "mtime": "2026-09-11T13:02:27.913Z",
39446
+ "mtime": "2026-09-12T05:06:47.090Z",
39009
39447
  "size": 6040,
39010
39448
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2"
39011
39449
  },
39450
+ "/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff": {
39451
+ "type": "font/woff",
39452
+ "etag": "\"15f0-mGuZIt/ndQFiw5uxmCOkhhWSxi4\"",
39453
+ "mtime": "2026-09-12T05:06:47.090Z",
39454
+ "size": 5616,
39455
+ "path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff"
39456
+ },
39012
39457
  "/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2": {
39013
39458
  "type": "font/woff2",
39014
39459
  "etag": "\"1b14-ylPjcMKGVc4RbTi2G25N0MSlVNo\"",
39015
- "mtime": "2026-09-11T13:02:27.913Z",
39460
+ "mtime": "2026-09-12T05:06:47.090Z",
39016
39461
  "size": 6932,
39017
39462
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2"
39018
39463
  },
39019
39464
  "/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff": {
39020
39465
  "type": "font/woff",
39021
39466
  "etag": "\"1650-9Pko0qRZ+EoISmnDaTRQ8KRGy/s\"",
39022
- "mtime": "2026-09-11T13:02:27.914Z",
39467
+ "mtime": "2026-09-12T05:06:47.090Z",
39023
39468
  "size": 5712,
39024
39469
  "path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff"
39025
39470
  },
39471
+ "/_nuxt/JCoYF4IJ.js": {
39472
+ "type": "text/javascript; charset=utf-8",
39473
+ "etag": "\"3455-37tXgWnbnb3znRa47oi8vjuTdqc\"",
39474
+ "mtime": "2026-09-12T05:06:47.067Z",
39475
+ "size": 13397,
39476
+ "path": "../public/_nuxt/JCoYF4IJ.js"
39477
+ },
39478
+ "/_nuxt/JTLM-kqr2.js": {
39479
+ "type": "text/javascript; charset=utf-8",
39480
+ "etag": "\"5f5-SCePszT8yZWllH2E7nvCS+dPYsk\"",
39481
+ "mtime": "2026-09-12T05:06:47.067Z",
39482
+ "size": 1525,
39483
+ "path": "../public/_nuxt/JTLM-kqr2.js"
39484
+ },
39026
39485
  "/_nuxt/kZl6yT-12.js": {
39027
39486
  "type": "text/javascript; charset=utf-8",
39028
39487
  "etag": "\"e9-t0VKevMurw+ruGbCV/EgmcM2dww\"",
39029
- "mtime": "2026-09-11T13:02:27.897Z",
39488
+ "mtime": "2026-09-12T05:06:47.069Z",
39030
39489
  "size": 233,
39031
39490
  "path": "../public/_nuxt/kZl6yT-12.js"
39032
39491
  },
39033
- "/_nuxt/logs.DMOM-iHe.css": {
39034
- "type": "text/css; charset=utf-8",
39035
- "etag": "\"1410-UAOJXMAmlE9Bn2Xj1iFk0CXWguY\"",
39036
- "mtime": "2026-09-11T13:02:27.914Z",
39037
- "size": 5136,
39038
- "path": "../public/_nuxt/logs.DMOM-iHe.css"
39492
+ "/_nuxt/jZsY8yYz.js": {
39493
+ "type": "text/javascript; charset=utf-8",
39494
+ "etag": "\"7c7-PL0IO2vGe5m8kLiMxnsrBNzHDKA\"",
39495
+ "mtime": "2026-09-12T05:06:47.069Z",
39496
+ "size": 1991,
39497
+ "path": "../public/_nuxt/jZsY8yYz.js"
39039
39498
  },
39040
39499
  "/_nuxt/lO5tpDZ5.js": {
39041
39500
  "type": "text/javascript; charset=utf-8",
39042
39501
  "etag": "\"3b-z4jypkmUW9c9v+AALQ28pDyJ80A\"",
39043
- "mtime": "2026-09-11T13:02:27.897Z",
39502
+ "mtime": "2026-09-12T05:06:47.069Z",
39044
39503
  "size": 59,
39045
39504
  "path": "../public/_nuxt/lO5tpDZ5.js"
39046
39505
  },
39047
- "/_nuxt/Lp7Ll94I.js": {
39506
+ "/_nuxt/KZQX7xoM.js": {
39048
39507
  "type": "text/javascript; charset=utf-8",
39049
- "etag": "\"373d-P1v4qPVNCWsXAF8ecwFvPmdvFmE\"",
39050
- "mtime": "2026-09-11T13:02:27.896Z",
39051
- "size": 14141,
39052
- "path": "../public/_nuxt/Lp7Ll94I.js"
39508
+ "etag": "\"bc8d-NE8BmFk1U6Qr8oLUgb9logVLDHA\"",
39509
+ "mtime": "2026-09-12T05:06:47.067Z",
39510
+ "size": 48269,
39511
+ "path": "../public/_nuxt/KZQX7xoM.js"
39512
+ },
39513
+ "/_nuxt/logs.CqFyMrJw.css": {
39514
+ "type": "text/css; charset=utf-8",
39515
+ "etag": "\"14c3-80Yys++VF02i9m0dmRGSlXNvsdM\"",
39516
+ "mtime": "2026-09-12T05:06:47.090Z",
39517
+ "size": 5315,
39518
+ "path": "../public/_nuxt/logs.CqFyMrJw.css"
39053
39519
  },
39054
39520
  "/_nuxt/monitor.B--1dPzs.css": {
39055
39521
  "type": "text/css; charset=utf-8",
39056
39522
  "etag": "\"578-FjYyH+T9goSVwJOLXNhMi2Hm95Y\"",
39057
- "mtime": "2026-09-11T13:02:27.914Z",
39523
+ "mtime": "2026-09-12T05:06:47.091Z",
39058
39524
  "size": 1400,
39059
39525
  "path": "../public/_nuxt/monitor.B--1dPzs.css"
39060
39526
  },
39061
- "/_nuxt/niDwBOZW.js": {
39527
+ "/_nuxt/pages.ooEzrMm9.css": {
39528
+ "type": "text/css; charset=utf-8",
39529
+ "etag": "\"1f8f-b9J2EkJ46q6pDMK7XHEZEMw/z3s\"",
39530
+ "mtime": "2026-09-12T05:06:47.091Z",
39531
+ "size": 8079,
39532
+ "path": "../public/_nuxt/pages.ooEzrMm9.css"
39533
+ },
39534
+ "/_nuxt/pdk8jLGT.js": {
39062
39535
  "type": "text/javascript; charset=utf-8",
39063
- "etag": "\"12f1-JlgzqHJQENBszEGLuO9fMyRYm/E\"",
39064
- "mtime": "2026-09-11T13:02:27.897Z",
39065
- "size": 4849,
39066
- "path": "../public/_nuxt/niDwBOZW.js"
39536
+ "etag": "\"1a39-SiPMzso8YXbn1yBHlZHYwIyR4Cw\"",
39537
+ "mtime": "2026-09-12T05:06:47.069Z",
39538
+ "size": 6713,
39539
+ "path": "../public/_nuxt/pdk8jLGT.js"
39067
39540
  },
39068
39541
  "/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css": {
39069
39542
  "type": "text/css; charset=utf-8",
39070
39543
  "etag": "\"10d0-uLyus3YRLFfRIoYhlKCERpGIwVE\"",
39071
- "mtime": "2026-09-11T13:02:27.898Z",
39544
+ "mtime": "2026-09-12T05:06:47.071Z",
39072
39545
  "size": 4304,
39073
39546
  "path": "../public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css"
39074
39547
  },
39075
- "/_nuxt/ORt9oDIy2.js": {
39076
- "type": "text/javascript; charset=utf-8",
39077
- "etag": "\"c42-g+2xQOk5SmNd8dk4LSqx7FrSVE0\"",
39078
- "mtime": "2026-09-11T13:02:27.896Z",
39079
- "size": 3138,
39080
- "path": "../public/_nuxt/ORt9oDIy2.js"
39081
- },
39082
- "/_nuxt/pages.Cc8GX9T1.css": {
39083
- "type": "text/css; charset=utf-8",
39084
- "etag": "\"1f93-vaNeomRLLvT7nDlnsXdpp4S2TFo\"",
39085
- "mtime": "2026-09-11T13:02:27.914Z",
39086
- "size": 8083,
39087
- "path": "../public/_nuxt/pages.Cc8GX9T1.css"
39088
- },
39089
39548
  "/_nuxt/permissions.B1pjGChZ.css": {
39090
39549
  "type": "text/css; charset=utf-8",
39091
39550
  "etag": "\"439-4fFWPs3Fv7K/AFrSalCd0HFO3pI\"",
39092
- "mtime": "2026-09-11T13:02:27.914Z",
39551
+ "mtime": "2026-09-12T05:06:47.091Z",
39093
39552
  "size": 1081,
39094
39553
  "path": "../public/_nuxt/permissions.B1pjGChZ.css"
39095
39554
  },
39096
- "/_nuxt/plugins.wIPyfPn-.css": {
39555
+ "/_nuxt/plugins.5e5chZ67.css": {
39097
39556
  "type": "text/css; charset=utf-8",
39098
- "etag": "\"ab4-v3do8OYxniGhizT0UMHsXehCvL0\"",
39099
- "mtime": "2026-09-11T13:02:27.914Z",
39100
- "size": 2740,
39101
- "path": "../public/_nuxt/plugins.wIPyfPn-.css"
39557
+ "etag": "\"ab2-6+VhPmyRC3rpgUGjFUB63S7ymbc\"",
39558
+ "mtime": "2026-09-12T05:06:47.091Z",
39559
+ "size": 2738,
39560
+ "path": "../public/_nuxt/plugins.5e5chZ67.css"
39102
39561
  },
39103
39562
  "/_nuxt/PluginSlot.DmjNbrcX.css": {
39104
39563
  "type": "text/css; charset=utf-8",
39105
39564
  "etag": "\"1b1-ASM0+zql/trZXZZxT6JL/MDdPtY\"",
39106
- "mtime": "2026-09-11T13:02:27.898Z",
39565
+ "mtime": "2026-09-12T05:06:47.071Z",
39107
39566
  "size": 433,
39108
39567
  "path": "../public/_nuxt/PluginSlot.DmjNbrcX.css"
39109
39568
  },
39110
- "/_nuxt/pMoIO6rr.js": {
39111
- "type": "text/javascript; charset=utf-8",
39112
- "etag": "\"40a01-FsPk7CX8Frlia6p0EwogkGlLllI\"",
39113
- "mtime": "2026-09-11T13:02:27.869Z",
39114
- "size": 264705,
39115
- "path": "../public/_nuxt/pMoIO6rr.js"
39116
- },
39117
- "/_nuxt/rqZ-1SoP.js": {
39569
+ "/_nuxt/pz2JDAM7.js": {
39118
39570
  "type": "text/javascript; charset=utf-8",
39119
- "etag": "\"761d-n3nYYQYIxdnAu9GaImKE7k1Xy7Y\"",
39120
- "mtime": "2026-09-11T13:02:27.897Z",
39121
- "size": 30237,
39122
- "path": "../public/_nuxt/rqZ-1SoP.js"
39571
+ "etag": "\"1caea-Rsju6Xu8UELInbAAC8iS80XsDQo\"",
39572
+ "mtime": "2026-09-12T05:06:47.070Z",
39573
+ "size": 117482,
39574
+ "path": "../public/_nuxt/pz2JDAM7.js"
39123
39575
  },
39124
39576
  "/_nuxt/RYFtK4qZ2.js": {
39125
39577
  "type": "text/javascript; charset=utf-8",
39126
39578
  "etag": "\"594c-ZHrAodAyz6fWAruZCqluWn052zA\"",
39127
- "mtime": "2026-09-11T13:02:27.896Z",
39579
+ "mtime": "2026-09-12T05:06:47.067Z",
39128
39580
  "size": 22860,
39129
39581
  "path": "../public/_nuxt/RYFtK4qZ2.js"
39130
39582
  },
39131
- "/_nuxt/settings.BCm4NZIc.css": {
39583
+ "/_nuxt/settings.Dm3M0RLy.css": {
39132
39584
  "type": "text/css; charset=utf-8",
39133
- "etag": "\"2179-FOkixrOAI+eUOlSN6Gyy1BpNt8Q\"",
39134
- "mtime": "2026-09-11T13:02:27.915Z",
39135
- "size": 8569,
39136
- "path": "../public/_nuxt/settings.BCm4NZIc.css"
39585
+ "etag": "\"2175-Bfu2f0XoqMS7xPh3BapUEUv/fps\"",
39586
+ "mtime": "2026-09-12T05:06:47.091Z",
39587
+ "size": 8565,
39588
+ "path": "../public/_nuxt/settings.Dm3M0RLy.css"
39589
+ },
39590
+ "/_nuxt/S_fVQwJK.js": {
39591
+ "type": "text/javascript; charset=utf-8",
39592
+ "etag": "\"9dc0-3l6Kc/MTmlDr92xcFaiueO5zXl8\"",
39593
+ "mtime": "2026-09-12T05:06:47.068Z",
39594
+ "size": 40384,
39595
+ "path": "../public/_nuxt/S_fVQwJK.js"
39596
+ },
39597
+ "/_nuxt/teams.BC75EGnR.css": {
39598
+ "type": "text/css; charset=utf-8",
39599
+ "etag": "\"a49-L5ibM+Ztp1to2Um0i9mSYODdZw4\"",
39600
+ "mtime": "2026-09-12T05:06:47.092Z",
39601
+ "size": 2633,
39602
+ "path": "../public/_nuxt/teams.BC75EGnR.css"
39137
39603
  },
39138
39604
  "/_nuxt/tokens.xRb1fSPU.css": {
39139
39605
  "type": "text/css; charset=utf-8",
39140
39606
  "etag": "\"991-sd4TNmcKczQa4a+DM+FOOSKkG9A\"",
39141
- "mtime": "2026-09-11T13:02:27.915Z",
39607
+ "mtime": "2026-09-12T05:06:47.092Z",
39142
39608
  "size": 2449,
39143
39609
  "path": "../public/_nuxt/tokens.xRb1fSPU.css"
39144
39610
  },
39145
39611
  "/_nuxt/town.BLrD9-WH.css": {
39146
39612
  "type": "text/css; charset=utf-8",
39147
39613
  "etag": "\"64-INqlNEwsg1I+Dzc8LaEkJCLno5o\"",
39148
- "mtime": "2026-09-11T13:02:27.915Z",
39614
+ "mtime": "2026-09-12T05:06:47.092Z",
39149
39615
  "size": 100,
39150
39616
  "path": "../public/_nuxt/town.BLrD9-WH.css"
39151
39617
  },
39152
- "/_nuxt/teams.BC75EGnR.css": {
39618
+ "/_nuxt/TownView.0oLiQgTC.css": {
39153
39619
  "type": "text/css; charset=utf-8",
39154
- "etag": "\"a49-L5ibM+Ztp1to2Um0i9mSYODdZw4\"",
39155
- "mtime": "2026-09-11T13:02:27.915Z",
39156
- "size": 2633,
39157
- "path": "../public/_nuxt/teams.BC75EGnR.css"
39620
+ "etag": "\"11be0-jasT+CDSVlHGDB2IL1ee1/4PS20\"",
39621
+ "mtime": "2026-09-12T05:06:47.071Z",
39622
+ "size": 72672,
39623
+ "path": "../public/_nuxt/TownView.0oLiQgTC.css"
39158
39624
  },
39159
- "/_nuxt/town.C_DsNW0J.css": {
39625
+ "/_nuxt/town.DKIAhKnx.css": {
39160
39626
  "type": "text/css; charset=utf-8",
39161
- "etag": "\"3b2-lx8uIK7y3f1Nkj2gMcTuak3mB/I\"",
39162
- "mtime": "2026-09-11T13:02:27.915Z",
39163
- "size": 946,
39164
- "path": "../public/_nuxt/town.C_DsNW0J.css"
39627
+ "etag": "\"3f6-2stsCbObPrmCagrbI7L30H9657A\"",
39628
+ "mtime": "2026-09-12T05:06:47.092Z",
39629
+ "size": 1014,
39630
+ "path": "../public/_nuxt/town.DKIAhKnx.css"
39165
39631
  },
39166
- "/_nuxt/TownView.CtskuMXS.css": {
39632
+ "/_nuxt/vRTjoWqd.js": {
39633
+ "type": "text/javascript; charset=utf-8",
39634
+ "etag": "\"3ee-AsfUZSgw/F0W9cFRTAEVXcLJZiA\"",
39635
+ "mtime": "2026-09-12T05:06:47.070Z",
39636
+ "size": 1006,
39637
+ "path": "../public/_nuxt/vRTjoWqd.js"
39638
+ },
39639
+ "/_nuxt/users.CXnP2E08.css": {
39167
39640
  "type": "text/css; charset=utf-8",
39168
- "etag": "\"11b2a-ZaXpy2M4q0qAxOvVuhL9xs66Xrw\"",
39169
- "mtime": "2026-09-11T13:02:27.898Z",
39170
- "size": 72490,
39171
- "path": "../public/_nuxt/TownView.CtskuMXS.css"
39641
+ "etag": "\"22f-AZpbJXPsElnWYRHZbAWTKPG8Rxw\"",
39642
+ "mtime": "2026-09-12T05:06:47.092Z",
39643
+ "size": 559,
39644
+ "path": "../public/_nuxt/users.CXnP2E08.css"
39172
39645
  },
39173
- "/_nuxt/users.DuAt_Zwf.css": {
39646
+ "/_nuxt/workshop.Jk5HxWPE.css": {
39174
39647
  "type": "text/css; charset=utf-8",
39175
- "etag": "\"231-nHKEbLMGMLnneAGueIAZ3cR9UH0\"",
39176
- "mtime": "2026-09-11T13:02:27.915Z",
39177
- "size": 561,
39178
- "path": "../public/_nuxt/users.DuAt_Zwf.css"
39648
+ "etag": "\"1038-1Xveua8xDfO+3AbczDYlptdvcWQ\"",
39649
+ "mtime": "2026-09-12T05:06:47.093Z",
39650
+ "size": 4152,
39651
+ "path": "../public/_nuxt/workshop.Jk5HxWPE.css"
39179
39652
  },
39180
- "/_nuxt/vJ4FPb-_.js": {
39653
+ "/_nuxt/zIGh7R49.js": {
39181
39654
  "type": "text/javascript; charset=utf-8",
39182
- "etag": "\"496e-HYp1zkNZ5UP5CkmOCjjlTOlpRAA\"",
39183
- "mtime": "2026-09-11T13:02:27.898Z",
39184
- "size": 18798,
39185
- "path": "../public/_nuxt/vJ4FPb-_.js"
39655
+ "etag": "\"28a11-UMQ9kZ/56LLLr7SzoahyJK4kF+8\"",
39656
+ "mtime": "2026-09-12T05:06:47.070Z",
39657
+ "size": 166417,
39658
+ "path": "../public/_nuxt/zIGh7R49.js"
39186
39659
  },
39187
- "/_nuxt/VLI2Zy4t.js": {
39660
+ "/_nuxt/YnQxK3eG.js": {
39188
39661
  "type": "text/javascript; charset=utf-8",
39189
- "etag": "\"79db-1zvdkTTeWhTS0A+KbRz0/ud/ntw\"",
39190
- "mtime": "2026-09-11T13:02:27.897Z",
39191
- "size": 31195,
39192
- "path": "../public/_nuxt/VLI2Zy4t.js"
39662
+ "etag": "\"56aa-34p36rIty4zhPYsHZGMJ3m4YxOQ\"",
39663
+ "mtime": "2026-09-12T05:06:47.068Z",
39664
+ "size": 22186,
39665
+ "path": "../public/_nuxt/YnQxK3eG.js"
39193
39666
  },
39194
- "/_nuxt/_id_.hRYo-EAB.css": {
39667
+ "/_nuxt/_id_.hma_BU6T.css": {
39195
39668
  "type": "text/css; charset=utf-8",
39196
- "etag": "\"1613-tO0SYd89Anr8faV5QNbS0IANCsY\"",
39197
- "mtime": "2026-09-11T13:02:27.898Z",
39198
- "size": 5651,
39199
- "path": "../public/_nuxt/_id_.hRYo-EAB.css"
39669
+ "etag": "\"1611-u2wYUO+6Mf0kDeG7LtcojlL7Wbo\"",
39670
+ "mtime": "2026-09-12T05:06:47.071Z",
39671
+ "size": 5649,
39672
+ "path": "../public/_nuxt/_id_.hma_BU6T.css"
39200
39673
  },
39201
- "/_nuxt/workshop.BJg84pOK.css": {
39674
+ "/_nuxt/_id_.D-SYuyZb.css": {
39202
39675
  "type": "text/css; charset=utf-8",
39203
- "etag": "\"103c-a5w4eTEpLUvJ9/PHO/G3obwFdMs\"",
39204
- "mtime": "2026-09-11T13:02:27.915Z",
39205
- "size": 4156,
39206
- "path": "../public/_nuxt/workshop.BJg84pOK.css"
39676
+ "etag": "\"3d10-ns70o4Kj3LWHCLTavrVybVSFwYM\"",
39677
+ "mtime": "2026-09-12T05:06:47.071Z",
39678
+ "size": 15632,
39679
+ "path": "../public/_nuxt/_id_.D-SYuyZb.css"
39207
39680
  },
39208
- "/_nuxt/_id_.MbzdFygI.css": {
39209
- "type": "text/css; charset=utf-8",
39210
- "etag": "\"3cef-ZJad4sf/g5mPJTNPHQLObrXEoEk\"",
39211
- "mtime": "2026-09-11T13:02:27.898Z",
39212
- "size": 15599,
39213
- "path": "../public/_nuxt/_id_.MbzdFygI.css"
39681
+ "/_nuxt/zq5t1vyX.js": {
39682
+ "type": "text/javascript; charset=utf-8",
39683
+ "etag": "\"60d-NnE9dj7Q2Llc8RcygvdWR36sHQs\"",
39684
+ "mtime": "2026-09-12T05:06:47.070Z",
39685
+ "size": 1549,
39686
+ "path": "../public/_nuxt/zq5t1vyX.js"
39687
+ },
39688
+ "/assets/game/player-sheet.png": {
39689
+ "type": "image/png",
39690
+ "etag": "\"2742-xHFqZq17XtbQVhapFMWJpVb0W5o\"",
39691
+ "mtime": "2026-08-25T12:20:54.514Z",
39692
+ "size": 10050,
39693
+ "path": "../public/assets/game/player-sheet.png"
39214
39694
  },
39215
- "/_nuxt/_wsId_.gXMEOYgX.css": {
39695
+ "/_nuxt/_wsId_.B12v3PhY.css": {
39216
39696
  "type": "text/css; charset=utf-8",
39217
- "etag": "\"11063-Q3Z+6KTHMRvqKnEygj3e1fWXboE\"",
39218
- "mtime": "2026-09-11T13:02:27.899Z",
39219
- "size": 69731,
39220
- "path": "../public/_nuxt/_wsId_.gXMEOYgX.css"
39697
+ "etag": "\"11002-wG5qYFNHpNeZ8Npb7NaYMOlUJQ0\"",
39698
+ "mtime": "2026-09-12T05:06:47.072Z",
39699
+ "size": 69634,
39700
+ "path": "../public/_nuxt/_wsId_.B12v3PhY.css"
39221
39701
  },
39222
39702
  "/assets/game/coin.png": {
39223
39703
  "type": "image/png",
@@ -39226,6 +39706,13 @@ const assets = {
39226
39706
  "size": 6733,
39227
39707
  "path": "../public/assets/game/coin.png"
39228
39708
  },
39709
+ "/scene/background/cyber-town-background.svg": {
39710
+ "type": "image/svg+xml",
39711
+ "etag": "\"1656-Q8xWIs77K5i5HJYRdMCDYSQhkvs\"",
39712
+ "mtime": "2026-08-25T12:20:54.529Z",
39713
+ "size": 5718,
39714
+ "path": "../public/scene/background/cyber-town-background.svg"
39715
+ },
39229
39716
  "/assets/game/tuxemon-town.json": {
39230
39717
  "type": "application/json",
39231
39718
  "etag": "\"fec5-uB5TWkwSxd0G5Tiupl3I0+u94XM\"",
@@ -39233,202 +39720,13 @@ const assets = {
39233
39720
  "size": 65221,
39234
39721
  "path": "../public/assets/game/tuxemon-town.json"
39235
39722
  },
39236
- "/assets/game/player-sheet.png": {
39237
- "type": "image/png",
39238
- "etag": "\"2742-xHFqZq17XtbQVhapFMWJpVb0W5o\"",
39239
- "mtime": "2026-08-25T12:20:54.514Z",
39240
- "size": 10050,
39241
- "path": "../public/assets/game/player-sheet.png"
39242
- },
39243
39723
  "/_nuxt/builds/latest.json": {
39244
39724
  "type": "application/json",
39245
- "etag": "\"47-i2ssFthlpKbFtUaGATFeF6cccto\"",
39246
- "mtime": "2026-09-11T13:02:32.535Z",
39725
+ "etag": "\"47-YESfqC+i/0msjSXjQIwEcTL75j8\"",
39726
+ "mtime": "2026-09-12T05:06:53.148Z",
39247
39727
  "size": 71,
39248
39728
  "path": "../public/_nuxt/builds/latest.json"
39249
39729
  },
39250
- "/scene/background/cyber-town-background.svg": {
39251
- "type": "image/svg+xml",
39252
- "etag": "\"1656-Q8xWIs77K5i5HJYRdMCDYSQhkvs\"",
39253
- "mtime": "2026-08-25T12:20:54.529Z",
39254
- "size": 5718,
39255
- "path": "../public/scene/background/cyber-town-background.svg"
39256
- },
39257
- "/assets/game/character/bot.png": {
39258
- "type": "image/png",
39259
- "etag": "\"36fe-Ke8vj83Dinp8fFaRQQBfBsTGI/8\"",
39260
- "mtime": "2026-08-25T12:20:54.510Z",
39261
- "size": 14078,
39262
- "path": "../public/assets/game/character/bot.png"
39263
- },
39264
- "/assets/game/character/device-3d.glb": {
39265
- "type": "model/gltf-binary",
39266
- "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39267
- "mtime": "2026-08-25T12:20:54.511Z",
39268
- "size": 19400,
39269
- "path": "../public/assets/game/character/device-3d.glb"
39270
- },
39271
- "/assets/game/character/hero-3d.glb": {
39272
- "type": "model/gltf-binary",
39273
- "etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
39274
- "mtime": "2026-08-25T12:20:54.511Z",
39275
- "size": 33940,
39276
- "path": "../public/assets/game/character/hero-3d.glb"
39277
- },
39278
- "/assets/game/tuxmon-sample-32px-extruded.png": {
39279
- "type": "image/png",
39280
- "etag": "\"2ee08-3yTsAqzTx0djGCGVAEgUGQ1/MEg\"",
39281
- "mtime": "2026-08-25T12:20:54.518Z",
39282
- "size": 192008,
39283
- "path": "../public/assets/game/tuxmon-sample-32px-extruded.png"
39284
- },
39285
- "/assets/game/character/hero-anime-1.glb": {
39286
- "type": "model/gltf-binary",
39287
- "etag": "\"1044c-AUMAdrW4S6OKEsUeAcR5c50fyKs\"",
39288
- "mtime": "2026-08-26T05:23:14.557Z",
39289
- "size": 66636,
39290
- "path": "../public/assets/game/character/hero-anime-1.glb"
39291
- },
39292
- "/assets/game/character/hero-anime-2.glb": {
39293
- "type": "model/gltf-binary",
39294
- "etag": "\"1058c-J91UapGlsJg/5ODN8k8c7rSNpzw\"",
39295
- "mtime": "2026-08-26T05:23:14.558Z",
39296
- "size": 66956,
39297
- "path": "../public/assets/game/character/hero-anime-2.glb"
39298
- },
39299
- "/assets/game/character/hero-anime-3.glb": {
39300
- "type": "model/gltf-binary",
39301
- "etag": "\"1057c-jREeKLYoS8AFWzuIOgOSr6CzehU\"",
39302
- "mtime": "2026-08-26T05:23:14.558Z",
39303
- "size": 66940,
39304
- "path": "../public/assets/game/character/hero-anime-3.glb"
39305
- },
39306
- "/assets/game/character/hero-anime-4.glb": {
39307
- "type": "model/gltf-binary",
39308
- "etag": "\"10544-H4WjfazfTQ6hfF2SkK2BfHU27i8\"",
39309
- "mtime": "2026-08-26T05:23:14.558Z",
39310
- "size": 66884,
39311
- "path": "../public/assets/game/character/hero-anime-4.glb"
39312
- },
39313
- "/assets/game/character/knight.png": {
39314
- "type": "image/png",
39315
- "etag": "\"3b37-Wyixufl/LcqKO/AeTLuGvzi4goQ\"",
39316
- "mtime": "2026-08-25T12:20:54.511Z",
39317
- "size": 15159,
39318
- "path": "../public/assets/game/character/knight.png"
39319
- },
39320
- "/assets/game/character/mage.png": {
39321
- "type": "image/png",
39322
- "etag": "\"3832-juipuJuMJceZrarvR4w7OKgQejA\"",
39323
- "mtime": "2026-08-25T12:20:54.512Z",
39324
- "size": 14386,
39325
- "path": "../public/assets/game/character/mage.png"
39326
- },
39327
- "/assets/game/npc/boltnu-sheet.png": {
39328
- "type": "image/png",
39329
- "etag": "\"a14-8xg90l10OuRoiEEgFXx9PTGJ9rA\"",
39330
- "mtime": "2026-08-25T12:20:54.513Z",
39331
- "size": 2580,
39332
- "path": "../public/assets/game/npc/boltnu-sheet.png"
39333
- },
39334
- "/assets/game/npc/fluttaflap-sheet.png": {
39335
- "type": "image/png",
39336
- "etag": "\"f65-ivBz79RSNtXu3px7cWEzCwMXdkg\"",
39337
- "mtime": "2026-08-25T12:20:54.513Z",
39338
- "size": 3941,
39339
- "path": "../public/assets/game/npc/fluttaflap-sheet.png"
39340
- },
39341
- "/assets/game/npc/tux-sheet.png": {
39342
- "type": "image/png",
39343
- "etag": "\"912-kf4+Q7EukO60VT6vlziy5RrzuUo\"",
39344
- "mtime": "2026-08-25T12:20:54.513Z",
39345
- "size": 2322,
39346
- "path": "../public/assets/game/npc/tux-sheet.png"
39347
- },
39348
- "/assets/game/npc/rockitten-sheet.png": {
39349
- "type": "image/png",
39350
- "etag": "\"786-IY4LCl37+SB6pnPynapoUxsxvOM\"",
39351
- "mtime": "2026-08-25T12:20:54.513Z",
39352
- "size": 1926,
39353
- "path": "../public/assets/game/npc/rockitten-sheet.png"
39354
- },
39355
- "/assets/game/devices/agv.glb": {
39356
- "type": "model/gltf-binary",
39357
- "etag": "\"b0ec-SGRGNfFN89F7v1GROXKGve7pQqs\"",
39358
- "mtime": "2026-08-27T07:03:12.531Z",
39359
- "size": 45292,
39360
- "path": "../public/assets/game/devices/agv.glb"
39361
- },
39362
- "/assets/game/devices/caster.glb": {
39363
- "type": "model/gltf-binary",
39364
- "etag": "\"5874-Qd988sa7u1y3lgH8K/zhzRLbRbs\"",
39365
- "mtime": "2026-08-27T07:03:12.510Z",
39366
- "size": 22644,
39367
- "path": "../public/assets/game/devices/caster.glb"
39368
- },
39369
- "/assets/game/devices/device-console.glb": {
39370
- "type": "model/gltf-binary",
39371
- "etag": "\"3984-GibNFJHAqtYWIxLy79rzU1HZAds\"",
39372
- "mtime": "2026-08-26T05:23:14.559Z",
39373
- "size": 14724,
39374
- "path": "../public/assets/game/devices/device-console.glb"
39375
- },
39376
- "/assets/game/devices/device-scanner.glb": {
39377
- "type": "model/gltf-binary",
39378
- "etag": "\"28e0-uKYZaLiZiCedMMozKBOFU14HUSE\"",
39379
- "mtime": "2026-08-26T05:23:14.560Z",
39380
- "size": 10464,
39381
- "path": "../public/assets/game/devices/device-scanner.glb"
39382
- },
39383
- "/assets/game/devices/device-robot-arm.glb": {
39384
- "type": "model/gltf-binary",
39385
- "etag": "\"37fc-uBxMDklo0SfaA6KXZIylh/S2p+c\"",
39386
- "mtime": "2026-08-26T05:23:14.560Z",
39387
- "size": 14332,
39388
- "path": "../public/assets/game/devices/device-robot-arm.glb"
39389
- },
39390
- "/assets/game/devices/power-cabinet.glb": {
39391
- "type": "model/gltf-binary",
39392
- "etag": "\"54f0-KsrAxig9JTAY5SGKK3jbdJXB6fk\"",
39393
- "mtime": "2026-08-27T07:03:12.534Z",
39394
- "size": 21744,
39395
- "path": "../public/assets/game/devices/power-cabinet.glb"
39396
- },
39397
- "/assets/game/devices/extruder.glb": {
39398
- "type": "model/gltf-binary",
39399
- "etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
39400
- "mtime": "2026-08-27T07:03:12.506Z",
39401
- "size": 98596,
39402
- "path": "../public/assets/game/devices/extruder.glb"
39403
- },
39404
- "/assets/game/devices/mdo.glb": {
39405
- "type": "model/gltf-binary",
39406
- "etag": "\"132e4-EDslgF5+17dSukguA0eZzN4I0+o\"",
39407
- "mtime": "2026-08-27T07:03:12.518Z",
39408
- "size": 78564,
39409
- "path": "../public/assets/game/devices/mdo.glb"
39410
- },
39411
- "/assets/game/devices/tdo.glb": {
39412
- "type": "model/gltf-binary",
39413
- "etag": "\"e10c-GdMX+mG/KrSVBzy4EeAPPjFoTqM\"",
39414
- "mtime": "2026-08-27T07:03:12.523Z",
39415
- "size": 57612,
39416
- "path": "../public/assets/game/devices/tdo.glb"
39417
- },
39418
- "/assets/game/devices/pump.glb": {
39419
- "type": "model/gltf-binary",
39420
- "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39421
- "mtime": "2026-08-25T12:20:54.512Z",
39422
- "size": 19400,
39423
- "path": "../public/assets/game/devices/pump.glb"
39424
- },
39425
- "/assets/game/devices/thickness-scanner.glb": {
39426
- "type": "model/gltf-binary",
39427
- "etag": "\"3480-WMTbMzRrl/6AJPzEIPhRW9xPugA\"",
39428
- "mtime": "2026-08-27T07:03:12.527Z",
39429
- "size": 13440,
39430
- "path": "../public/assets/game/devices/thickness-scanner.glb"
39431
- },
39432
39730
  "/assets/game/player/misa-back-walk.000.png": {
39433
39731
  "type": "image/png",
39434
39732
  "etag": "\"157-/Sm0qrBJSHEFTGYwuSqnzRaX3Jk\"",
@@ -39436,13 +39734,6 @@ const assets = {
39436
39734
  "size": 343,
39437
39735
  "path": "../public/assets/game/player/misa-back-walk.000.png"
39438
39736
  },
39439
- "/assets/game/devices/winder.glb": {
39440
- "type": "model/gltf-binary",
39441
- "etag": "\"9084-N9S2enupsA8WyhEHtkIgQ+RBDV4\"",
39442
- "mtime": "2026-08-27T07:03:12.526Z",
39443
- "size": 36996,
39444
- "path": "../public/assets/game/devices/winder.glb"
39445
- },
39446
39737
  "/assets/game/player/misa-back-walk.001.png": {
39447
39738
  "type": "image/png",
39448
39739
  "etag": "\"15c-PoeNPtRrfApGTf0GzJcdNP59kts\"",
@@ -39450,6 +39741,13 @@ const assets = {
39450
39741
  "size": 348,
39451
39742
  "path": "../public/assets/game/player/misa-back-walk.001.png"
39452
39743
  },
39744
+ "/assets/game/tuxmon-sample-32px-extruded.png": {
39745
+ "type": "image/png",
39746
+ "etag": "\"2ee08-3yTsAqzTx0djGCGVAEgUGQ1/MEg\"",
39747
+ "mtime": "2026-08-25T12:20:54.518Z",
39748
+ "size": 192008,
39749
+ "path": "../public/assets/game/tuxmon-sample-32px-extruded.png"
39750
+ },
39453
39751
  "/assets/game/player/misa-back-walk.002.png": {
39454
39752
  "type": "image/png",
39455
39753
  "etag": "\"157-/PPQEWo58n/RNDDq2aia6nAWOQw\"",
@@ -39478,19 +39776,19 @@ const assets = {
39478
39776
  "size": 338,
39479
39777
  "path": "../public/assets/game/player/misa-front-walk.000.png"
39480
39778
  },
39481
- "/assets/game/player/misa-front-walk.002.png": {
39779
+ "/assets/game/player/misa-front-walk.001.png": {
39482
39780
  "type": "image/png",
39483
- "etag": "\"155-UzIsnRRYoGpmHf5w9T7CLy/0ubw\"",
39781
+ "etag": "\"155-r/wKRG+amQ/2TvYolFC2UPXHdC4\"",
39484
39782
  "mtime": "2026-08-25T12:20:54.515Z",
39485
39783
  "size": 341,
39486
- "path": "../public/assets/game/player/misa-front-walk.002.png"
39784
+ "path": "../public/assets/game/player/misa-front-walk.001.png"
39487
39785
  },
39488
- "/assets/game/player/misa-front-walk.001.png": {
39786
+ "/assets/game/player/misa-front-walk.002.png": {
39489
39787
  "type": "image/png",
39490
- "etag": "\"155-r/wKRG+amQ/2TvYolFC2UPXHdC4\"",
39788
+ "etag": "\"155-UzIsnRRYoGpmHf5w9T7CLy/0ubw\"",
39491
39789
  "mtime": "2026-08-25T12:20:54.515Z",
39492
39790
  "size": 341,
39493
- "path": "../public/assets/game/player/misa-front-walk.001.png"
39791
+ "path": "../public/assets/game/player/misa-front-walk.002.png"
39494
39792
  },
39495
39793
  "/assets/game/player/misa-front-walk.003.png": {
39496
39794
  "type": "image/png",
@@ -39499,13 +39797,6 @@ const assets = {
39499
39797
  "size": 341,
39500
39798
  "path": "../public/assets/game/player/misa-front-walk.003.png"
39501
39799
  },
39502
- "/assets/game/player/misa-front.png": {
39503
- "type": "image/png",
39504
- "etag": "\"155-5X/+kju2mVH43N4/093cbqbcr+I\"",
39505
- "mtime": "2026-08-25T12:20:54.516Z",
39506
- "size": 341,
39507
- "path": "../public/assets/game/player/misa-front.png"
39508
- },
39509
39800
  "/assets/game/player/misa-left-walk.000.png": {
39510
39801
  "type": "image/png",
39511
39802
  "etag": "\"13f-Hlll+U+bluQUD8w3klFf7vww08M\"",
@@ -39513,6 +39804,13 @@ const assets = {
39513
39804
  "size": 319,
39514
39805
  "path": "../public/assets/game/player/misa-left-walk.000.png"
39515
39806
  },
39807
+ "/assets/game/player/misa-front.png": {
39808
+ "type": "image/png",
39809
+ "etag": "\"155-5X/+kju2mVH43N4/093cbqbcr+I\"",
39810
+ "mtime": "2026-08-25T12:20:54.516Z",
39811
+ "size": 341,
39812
+ "path": "../public/assets/game/player/misa-front.png"
39813
+ },
39516
39814
  "/assets/game/player/misa-left-walk.001.png": {
39517
39815
  "type": "image/png",
39518
39816
  "etag": "\"13f-kvFuR3pXnfcL/C63pYoL58iuFOk\"",
@@ -39534,13 +39832,6 @@ const assets = {
39534
39832
  "size": 319,
39535
39833
  "path": "../public/assets/game/player/misa-left-walk.003.png"
39536
39834
  },
39537
- "/assets/game/player/misa-left.png": {
39538
- "type": "image/png",
39539
- "etag": "\"13f-U80SqejQLrLmFSm4ifHPjYI/r5Q\"",
39540
- "mtime": "2026-08-25T12:20:54.516Z",
39541
- "size": 319,
39542
- "path": "../public/assets/game/player/misa-left.png"
39543
- },
39544
39835
  "/assets/game/player/misa-right-walk.000.png": {
39545
39836
  "type": "image/png",
39546
39837
  "etag": "\"12d-LFv0nkkwwOzytOb66XkVjd6tkHE\"",
@@ -39548,6 +39839,13 @@ const assets = {
39548
39839
  "size": 301,
39549
39840
  "path": "../public/assets/game/player/misa-right-walk.000.png"
39550
39841
  },
39842
+ "/assets/game/player/misa-left.png": {
39843
+ "type": "image/png",
39844
+ "etag": "\"13f-U80SqejQLrLmFSm4ifHPjYI/r5Q\"",
39845
+ "mtime": "2026-08-25T12:20:54.516Z",
39846
+ "size": 319,
39847
+ "path": "../public/assets/game/player/misa-left.png"
39848
+ },
39551
39849
  "/assets/game/player/misa-right-walk.001.png": {
39552
39850
  "type": "image/png",
39553
39851
  "etag": "\"12e-DPDndNK7hnSQCpyHmbRm1ttAM1s\"",
@@ -39576,6 +39874,181 @@ const assets = {
39576
39874
  "size": 302,
39577
39875
  "path": "../public/assets/game/player/misa-right.png"
39578
39876
  },
39877
+ "/assets/game/devices/agv.glb": {
39878
+ "type": "model/gltf-binary",
39879
+ "etag": "\"b0ec-SGRGNfFN89F7v1GROXKGve7pQqs\"",
39880
+ "mtime": "2026-08-27T07:03:12.531Z",
39881
+ "size": 45292,
39882
+ "path": "../public/assets/game/devices/agv.glb"
39883
+ },
39884
+ "/assets/game/devices/device-console.glb": {
39885
+ "type": "model/gltf-binary",
39886
+ "etag": "\"3984-GibNFJHAqtYWIxLy79rzU1HZAds\"",
39887
+ "mtime": "2026-08-26T05:23:14.559Z",
39888
+ "size": 14724,
39889
+ "path": "../public/assets/game/devices/device-console.glb"
39890
+ },
39891
+ "/assets/game/devices/caster.glb": {
39892
+ "type": "model/gltf-binary",
39893
+ "etag": "\"5874-Qd988sa7u1y3lgH8K/zhzRLbRbs\"",
39894
+ "mtime": "2026-08-27T07:03:12.510Z",
39895
+ "size": 22644,
39896
+ "path": "../public/assets/game/devices/caster.glb"
39897
+ },
39898
+ "/assets/game/devices/device-robot-arm.glb": {
39899
+ "type": "model/gltf-binary",
39900
+ "etag": "\"37fc-uBxMDklo0SfaA6KXZIylh/S2p+c\"",
39901
+ "mtime": "2026-08-26T05:23:14.560Z",
39902
+ "size": 14332,
39903
+ "path": "../public/assets/game/devices/device-robot-arm.glb"
39904
+ },
39905
+ "/assets/game/devices/device-scanner.glb": {
39906
+ "type": "model/gltf-binary",
39907
+ "etag": "\"28e0-uKYZaLiZiCedMMozKBOFU14HUSE\"",
39908
+ "mtime": "2026-08-26T05:23:14.560Z",
39909
+ "size": 10464,
39910
+ "path": "../public/assets/game/devices/device-scanner.glb"
39911
+ },
39912
+ "/assets/game/devices/extruder.glb": {
39913
+ "type": "model/gltf-binary",
39914
+ "etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
39915
+ "mtime": "2026-08-27T07:03:12.506Z",
39916
+ "size": 98596,
39917
+ "path": "../public/assets/game/devices/extruder.glb"
39918
+ },
39919
+ "/assets/game/devices/mdo.glb": {
39920
+ "type": "model/gltf-binary",
39921
+ "etag": "\"132e4-EDslgF5+17dSukguA0eZzN4I0+o\"",
39922
+ "mtime": "2026-08-27T07:03:12.518Z",
39923
+ "size": 78564,
39924
+ "path": "../public/assets/game/devices/mdo.glb"
39925
+ },
39926
+ "/assets/game/devices/power-cabinet.glb": {
39927
+ "type": "model/gltf-binary",
39928
+ "etag": "\"54f0-KsrAxig9JTAY5SGKK3jbdJXB6fk\"",
39929
+ "mtime": "2026-08-27T07:03:12.534Z",
39930
+ "size": 21744,
39931
+ "path": "../public/assets/game/devices/power-cabinet.glb"
39932
+ },
39933
+ "/assets/game/devices/pump.glb": {
39934
+ "type": "model/gltf-binary",
39935
+ "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39936
+ "mtime": "2026-08-25T12:20:54.512Z",
39937
+ "size": 19400,
39938
+ "path": "../public/assets/game/devices/pump.glb"
39939
+ },
39940
+ "/assets/game/devices/thickness-scanner.glb": {
39941
+ "type": "model/gltf-binary",
39942
+ "etag": "\"3480-WMTbMzRrl/6AJPzEIPhRW9xPugA\"",
39943
+ "mtime": "2026-08-27T07:03:12.527Z",
39944
+ "size": 13440,
39945
+ "path": "../public/assets/game/devices/thickness-scanner.glb"
39946
+ },
39947
+ "/assets/game/devices/tdo.glb": {
39948
+ "type": "model/gltf-binary",
39949
+ "etag": "\"e10c-GdMX+mG/KrSVBzy4EeAPPjFoTqM\"",
39950
+ "mtime": "2026-08-27T07:03:12.523Z",
39951
+ "size": 57612,
39952
+ "path": "../public/assets/game/devices/tdo.glb"
39953
+ },
39954
+ "/assets/game/devices/winder.glb": {
39955
+ "type": "model/gltf-binary",
39956
+ "etag": "\"9084-N9S2enupsA8WyhEHtkIgQ+RBDV4\"",
39957
+ "mtime": "2026-08-27T07:03:12.526Z",
39958
+ "size": 36996,
39959
+ "path": "../public/assets/game/devices/winder.glb"
39960
+ },
39961
+ "/assets/game/character/bot.png": {
39962
+ "type": "image/png",
39963
+ "etag": "\"36fe-Ke8vj83Dinp8fFaRQQBfBsTGI/8\"",
39964
+ "mtime": "2026-08-25T12:20:54.510Z",
39965
+ "size": 14078,
39966
+ "path": "../public/assets/game/character/bot.png"
39967
+ },
39968
+ "/assets/game/character/device-3d.glb": {
39969
+ "type": "model/gltf-binary",
39970
+ "etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
39971
+ "mtime": "2026-08-25T12:20:54.511Z",
39972
+ "size": 19400,
39973
+ "path": "../public/assets/game/character/device-3d.glb"
39974
+ },
39975
+ "/assets/game/character/hero-3d.glb": {
39976
+ "type": "model/gltf-binary",
39977
+ "etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
39978
+ "mtime": "2026-08-25T12:20:54.511Z",
39979
+ "size": 33940,
39980
+ "path": "../public/assets/game/character/hero-3d.glb"
39981
+ },
39982
+ "/assets/game/character/hero-anime-1.glb": {
39983
+ "type": "model/gltf-binary",
39984
+ "etag": "\"1044c-AUMAdrW4S6OKEsUeAcR5c50fyKs\"",
39985
+ "mtime": "2026-08-26T05:23:14.557Z",
39986
+ "size": 66636,
39987
+ "path": "../public/assets/game/character/hero-anime-1.glb"
39988
+ },
39989
+ "/assets/game/character/hero-anime-3.glb": {
39990
+ "type": "model/gltf-binary",
39991
+ "etag": "\"1057c-jREeKLYoS8AFWzuIOgOSr6CzehU\"",
39992
+ "mtime": "2026-08-26T05:23:14.558Z",
39993
+ "size": 66940,
39994
+ "path": "../public/assets/game/character/hero-anime-3.glb"
39995
+ },
39996
+ "/assets/game/character/knight.png": {
39997
+ "type": "image/png",
39998
+ "etag": "\"3b37-Wyixufl/LcqKO/AeTLuGvzi4goQ\"",
39999
+ "mtime": "2026-08-25T12:20:54.511Z",
40000
+ "size": 15159,
40001
+ "path": "../public/assets/game/character/knight.png"
40002
+ },
40003
+ "/assets/game/character/hero-anime-2.glb": {
40004
+ "type": "model/gltf-binary",
40005
+ "etag": "\"1058c-J91UapGlsJg/5ODN8k8c7rSNpzw\"",
40006
+ "mtime": "2026-08-26T05:23:14.558Z",
40007
+ "size": 66956,
40008
+ "path": "../public/assets/game/character/hero-anime-2.glb"
40009
+ },
40010
+ "/assets/game/character/hero-anime-4.glb": {
40011
+ "type": "model/gltf-binary",
40012
+ "etag": "\"10544-H4WjfazfTQ6hfF2SkK2BfHU27i8\"",
40013
+ "mtime": "2026-08-26T05:23:14.558Z",
40014
+ "size": 66884,
40015
+ "path": "../public/assets/game/character/hero-anime-4.glb"
40016
+ },
40017
+ "/assets/game/character/mage.png": {
40018
+ "type": "image/png",
40019
+ "etag": "\"3832-juipuJuMJceZrarvR4w7OKgQejA\"",
40020
+ "mtime": "2026-08-25T12:20:54.512Z",
40021
+ "size": 14386,
40022
+ "path": "../public/assets/game/character/mage.png"
40023
+ },
40024
+ "/assets/game/npc/boltnu-sheet.png": {
40025
+ "type": "image/png",
40026
+ "etag": "\"a14-8xg90l10OuRoiEEgFXx9PTGJ9rA\"",
40027
+ "mtime": "2026-08-25T12:20:54.513Z",
40028
+ "size": 2580,
40029
+ "path": "../public/assets/game/npc/boltnu-sheet.png"
40030
+ },
40031
+ "/assets/game/npc/fluttaflap-sheet.png": {
40032
+ "type": "image/png",
40033
+ "etag": "\"f65-ivBz79RSNtXu3px7cWEzCwMXdkg\"",
40034
+ "mtime": "2026-08-25T12:20:54.513Z",
40035
+ "size": 3941,
40036
+ "path": "../public/assets/game/npc/fluttaflap-sheet.png"
40037
+ },
40038
+ "/assets/game/npc/rockitten-sheet.png": {
40039
+ "type": "image/png",
40040
+ "etag": "\"786-IY4LCl37+SB6pnPynapoUxsxvOM\"",
40041
+ "mtime": "2026-08-25T12:20:54.513Z",
40042
+ "size": 1926,
40043
+ "path": "../public/assets/game/npc/rockitten-sheet.png"
40044
+ },
40045
+ "/assets/game/npc/tux-sheet.png": {
40046
+ "type": "image/png",
40047
+ "etag": "\"912-kf4+Q7EukO60VT6vlziy5RrzuUo\"",
40048
+ "mtime": "2026-08-25T12:20:54.513Z",
40049
+ "size": 2322,
40050
+ "path": "../public/assets/game/npc/tux-sheet.png"
40051
+ },
39579
40052
  "/assets/game/wuwa/world-middle.png": {
39580
40053
  "type": "image/png",
39581
40054
  "etag": "\"16164-Dxu+NdXPnqoPFfWHwQi1oefgNvU\"",
@@ -39590,13 +40063,6 @@ const assets = {
39590
40063
  "size": 8277,
39591
40064
  "path": "../public/assets/game/wuwa/wu-aura.png"
39592
40065
  },
39593
- "/assets/game/wuwa/wu-lead.png": {
39594
- "type": "image/png",
39595
- "etag": "\"3b04-agK45Y3g7QDPns/kmkhTGYSTPDM\"",
39596
- "mtime": "2026-08-25T12:20:54.527Z",
39597
- "size": 15108,
39598
- "path": "../public/assets/game/wuwa/wu-lead.png"
39599
- },
39600
40066
  "/assets/game/wuwa/scene-map.png": {
39601
40067
  "type": "image/png",
39602
40068
  "etag": "\"682db-bU8mh8SeHPotvuaCc6PZzrWoT+A\"",
@@ -39604,19 +40070,19 @@ const assets = {
39604
40070
  "size": 426715,
39605
40071
  "path": "../public/assets/game/wuwa/scene-map.png"
39606
40072
  },
39607
- "/assets/game/wuwa/world-far.png": {
40073
+ "/assets/game/wuwa/wu-lead.png": {
39608
40074
  "type": "image/png",
39609
- "etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
39610
- "mtime": "2026-08-25T12:20:54.522Z",
39611
- "size": 439185,
39612
- "path": "../public/assets/game/wuwa/world-far.png"
40075
+ "etag": "\"3b04-agK45Y3g7QDPns/kmkhTGYSTPDM\"",
40076
+ "mtime": "2026-08-25T12:20:54.527Z",
40077
+ "size": 15108,
40078
+ "path": "../public/assets/game/wuwa/wu-lead.png"
39613
40079
  },
39614
- "/assets/game/wuwa/world-near.png": {
40080
+ "/assets/game/wuwa/wu-ring.png": {
39615
40081
  "type": "image/png",
39616
- "etag": "\"bbcd8-BrybeZP/ZGdD0v5NVC8T/Y4AXyM\"",
40082
+ "etag": "\"65ac-/iIjlPgFNpD98zDsyCJYA8021E4\"",
39617
40083
  "mtime": "2026-08-25T12:20:54.527Z",
39618
- "size": 769240,
39619
- "path": "../public/assets/game/wuwa/world-near.png"
40084
+ "size": 26028,
40085
+ "path": "../public/assets/game/wuwa/wu-ring.png"
39620
40086
  },
39621
40087
  "/assets/game/wuwa/wu-slash.png": {
39622
40088
  "type": "image/png",
@@ -39625,12 +40091,12 @@ const assets = {
39625
40091
  "size": 389,
39626
40092
  "path": "../public/assets/game/wuwa/wu-slash.png"
39627
40093
  },
39628
- "/assets/game/wuwa/wu-ring.png": {
40094
+ "/assets/game/wuwa/world-far.png": {
39629
40095
  "type": "image/png",
39630
- "etag": "\"65ac-/iIjlPgFNpD98zDsyCJYA8021E4\"",
39631
- "mtime": "2026-08-25T12:20:54.527Z",
39632
- "size": 26028,
39633
- "path": "../public/assets/game/wuwa/wu-ring.png"
40096
+ "etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
40097
+ "mtime": "2026-08-25T12:20:54.522Z",
40098
+ "size": 439185,
40099
+ "path": "../public/assets/game/wuwa/world-far.png"
39634
40100
  },
39635
40101
  "/assets/game/wuwa/wu-worker-0.png": {
39636
40102
  "type": "image/png",
@@ -39646,6 +40112,13 @@ const assets = {
39646
40112
  "size": 15560,
39647
40113
  "path": "../public/assets/game/wuwa/wu-worker-1.png"
39648
40114
  },
40115
+ "/assets/game/wuwa/world-near.png": {
40116
+ "type": "image/png",
40117
+ "etag": "\"bbcd8-BrybeZP/ZGdD0v5NVC8T/Y4AXyM\"",
40118
+ "mtime": "2026-08-25T12:20:54.527Z",
40119
+ "size": 769240,
40120
+ "path": "../public/assets/game/wuwa/world-near.png"
40121
+ },
39649
40122
  "/assets/game/wuwa/wu-worker-2.png": {
39650
40123
  "type": "image/png",
39651
40124
  "etag": "\"3c81-6qd4LQS0v2L4rTa0XAmekluER7c\"",
@@ -39653,12 +40126,12 @@ const assets = {
39653
40126
  "size": 15489,
39654
40127
  "path": "../public/assets/game/wuwa/wu-worker-2.png"
39655
40128
  },
39656
- "/_nuxt/builds/meta/adc365b6-f636-4a2b-9527-79819c1e874b.json": {
40129
+ "/_nuxt/builds/meta/44b66249-54d0-4c8a-9057-9755a32329e2.json": {
39657
40130
  "type": "application/json",
39658
- "etag": "\"58-cvbyKB3Xqgg0binYeKeJx/9SmAw\"",
39659
- "mtime": "2026-09-11T13:02:32.536Z",
40131
+ "etag": "\"58-uywREEkkIKIGIvN70lXX4bfuokI\"",
40132
+ "mtime": "2026-09-12T05:06:53.148Z",
39660
40133
  "size": 88,
39661
- "path": "../public/_nuxt/builds/meta/adc365b6-f636-4a2b-9527-79819c1e874b.json"
40134
+ "path": "../public/_nuxt/builds/meta/44b66249-54d0-4c8a-9057-9755a32329e2.json"
39662
40135
  },
39663
40136
  "/assets/game/character/yangyang-walk.glb": {
39664
40137
  "type": "model/gltf-binary",
@@ -39955,21 +40428,32 @@ const _lazy_OK7iTh = () => import('../routes/api/workshop/agents/_id_.patch.mjs'
39955
40428
  const _lazy_Ib89Gv = () => import('../routes/api/workshop/index.get.mjs');
39956
40429
  const _lazy_jGcf0C = () => import('../routes/api/workshop/index.post.mjs');
39957
40430
  const _lazy_fESV0_ = () => import('../routes/api/workshop/agents/subscribe.post.mjs');
40431
+ const _lazy_nO_s5_ = () => import('../routes/api/workshop/aml/datasets/_id_.delete.mjs');
39958
40432
  const _lazy_tV0TAv = () => import('../routes/api/workshop/aml/datasets/_id_.get.mjs');
40433
+ const _lazy_L8VYQ_ = () => import('../routes/api/workshop/aml/datasets/_id_.patch.mjs');
39959
40434
  const _lazy_X7krQs = () => import('../routes/api/workshop/aml/datasets/_id/preview.get.mjs');
39960
40435
  const _lazy_3J0Xcs = () => import('../routes/api/workshop/aml/index.get.mjs');
39961
40436
  const _lazy_fxhSeB = () => import('../routes/api/workshop/aml/index.post.mjs');
39962
- const _lazy_OhQ1TJ = () => import('../routes/api/workshop/aml/index2.get.mjs');
40437
+ const _lazy_KqY6Ut = () => import('../routes/api/workshop/aml/index2.get.mjs');
40438
+ const _lazy_DuVwH7 = () => import('../routes/api/workshop/aml/entities/prune.post.mjs');
40439
+ const _lazy_sTjAeo = () => import('../routes/api/workshop/aml/index3.get.mjs');
40440
+ const _lazy_qhdgDb = () => import('../routes/api/workshop/aml/env/recheck.post.mjs');
40441
+ const _lazy_p9v5He = () => import('../routes/api/workshop/aml/env/uv.post.mjs');
40442
+ const _lazy_pPdn3t = () => import('../routes/api/workshop/aml/env/venv.post.mjs');
40443
+ const _lazy_OhQ1TJ = () => import('../routes/api/workshop/aml/index4.get.mjs');
39963
40444
  const _lazy_fEDefo = () => import('../routes/api/workshop/index2.get.mjs');
40445
+ const _lazy_w4VKE0 = () => import('../routes/api/workshop/aml/jobs/_id_.delete.mjs');
39964
40446
  const _lazy_wnp00i = () => import('../routes/api/workshop/aml/jobs/_id_.get.mjs');
39965
40447
  const _lazy_i_nokq = () => import('../routes/api/workshop/aml/jobs/_id/cancel.post.mjs');
39966
40448
  const _lazy_sKQYLY = () => import('../routes/api/workshop/aml/jobs/_id/logs.get.mjs');
39967
40449
  const _lazy_dJdojE = () => import('../routes/api/workshop/aml/jobs/_id/retry.post.mjs');
39968
- const _lazy_giSCA5 = () => import('../routes/api/workshop/aml/index3.get.mjs');
40450
+ const _lazy_giSCA5 = () => import('../routes/api/workshop/aml/index5.get.mjs');
39969
40451
  const _lazy_FDpvz_ = () => import('../routes/api/workshop/aml/index2.post.mjs');
40452
+ const _lazy_MCHjBO = () => import('../routes/api/workshop/aml/models/_id_.delete.mjs');
40453
+ const _lazy_FFXs4U = () => import('../routes/api/workshop/aml/models/_id_.patch.mjs');
39970
40454
  const _lazy_gykCLA = () => import('../routes/api/workshop/aml/models/_id/predict.post.mjs');
39971
40455
  const _lazy_iC7aQp = () => import('../routes/api/workshop/aml/models/_id/promote.post.mjs');
39972
- const _lazy_rROxR2 = () => import('../routes/api/workshop/aml/index4.get.mjs');
40456
+ const _lazy_rROxR2 = () => import('../routes/api/workshop/aml/index6.get.mjs');
39973
40457
  const _lazy_oKzzOL = () => import('../routes/api/workshop/approvals/_id/decide.post.mjs');
39974
40458
  const _lazy_N57pWC = () => import('../routes/api/workshop/index3.get.mjs');
39975
40459
  const _lazy_N7zTgE = () => import('../routes/api/workshop/assets/character/_id_.delete.mjs');
@@ -40191,18 +40675,29 @@ const handlers = [
40191
40675
  { route: '/api/workshop/agents', handler: _lazy_Ib89Gv, lazy: true, middleware: false, method: "get" },
40192
40676
  { route: '/api/workshop/agents', handler: _lazy_jGcf0C, lazy: true, middleware: false, method: "post" },
40193
40677
  { route: '/api/workshop/agents/subscribe', handler: _lazy_fESV0_, lazy: true, middleware: false, method: "post" },
40678
+ { route: '/api/workshop/aml/datasets/:id', handler: _lazy_nO_s5_, lazy: true, middleware: false, method: "delete" },
40194
40679
  { route: '/api/workshop/aml/datasets/:id', handler: _lazy_tV0TAv, lazy: true, middleware: false, method: "get" },
40680
+ { route: '/api/workshop/aml/datasets/:id', handler: _lazy_L8VYQ_, lazy: true, middleware: false, method: "patch" },
40195
40681
  { route: '/api/workshop/aml/datasets/:id/preview', handler: _lazy_X7krQs, lazy: true, middleware: false, method: "get" },
40196
40682
  { route: '/api/workshop/aml/datasets', handler: _lazy_3J0Xcs, lazy: true, middleware: false, method: "get" },
40197
40683
  { route: '/api/workshop/aml/datasets', handler: _lazy_fxhSeB, lazy: true, middleware: false, method: "post" },
40684
+ { route: '/api/workshop/aml/entities', handler: _lazy_KqY6Ut, lazy: true, middleware: false, method: "get" },
40685
+ { route: '/api/workshop/aml/entities/prune', handler: _lazy_DuVwH7, lazy: true, middleware: false, method: "post" },
40686
+ { route: '/api/workshop/aml/env', handler: _lazy_sTjAeo, lazy: true, middleware: false, method: "get" },
40687
+ { route: '/api/workshop/aml/env/recheck', handler: _lazy_qhdgDb, lazy: true, middleware: false, method: "post" },
40688
+ { route: '/api/workshop/aml/env/uv', handler: _lazy_p9v5He, lazy: true, middleware: false, method: "post" },
40689
+ { route: '/api/workshop/aml/env/venv', handler: _lazy_pPdn3t, lazy: true, middleware: false, method: "post" },
40198
40690
  { route: '/api/workshop/aml/experiments', handler: _lazy_OhQ1TJ, lazy: true, middleware: false, method: "get" },
40199
40691
  { route: '/api/workshop/aml', handler: _lazy_fEDefo, lazy: true, middleware: false, method: "get" },
40692
+ { route: '/api/workshop/aml/jobs/:id', handler: _lazy_w4VKE0, lazy: true, middleware: false, method: "delete" },
40200
40693
  { route: '/api/workshop/aml/jobs/:id', handler: _lazy_wnp00i, lazy: true, middleware: false, method: "get" },
40201
40694
  { route: '/api/workshop/aml/jobs/:id/cancel', handler: _lazy_i_nokq, lazy: true, middleware: false, method: "post" },
40202
40695
  { route: '/api/workshop/aml/jobs/:id/logs', handler: _lazy_sKQYLY, lazy: true, middleware: false, method: "get" },
40203
40696
  { route: '/api/workshop/aml/jobs/:id/retry', handler: _lazy_dJdojE, lazy: true, middleware: false, method: "post" },
40204
40697
  { route: '/api/workshop/aml/jobs', handler: _lazy_giSCA5, lazy: true, middleware: false, method: "get" },
40205
40698
  { route: '/api/workshop/aml/jobs', handler: _lazy_FDpvz_, lazy: true, middleware: false, method: "post" },
40699
+ { route: '/api/workshop/aml/models/:id', handler: _lazy_MCHjBO, lazy: true, middleware: false, method: "delete" },
40700
+ { route: '/api/workshop/aml/models/:id', handler: _lazy_FFXs4U, lazy: true, middleware: false, method: "patch" },
40206
40701
  { route: '/api/workshop/aml/models/:id/predict', handler: _lazy_gykCLA, lazy: true, middleware: false, method: "post" },
40207
40702
  { route: '/api/workshop/aml/models/:id/promote', handler: _lazy_iC7aQp, lazy: true, middleware: false, method: "post" },
40208
40703
  { route: '/api/workshop/aml/models', handler: _lazy_rROxR2, lazy: true, middleware: false, method: "get" },
@@ -40764,5 +41259,5 @@ function setupGracefulShutdown(listener, nitroApp) {
40764
41259
  });
40765
41260
  }
40766
41261
 
40767
- 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 };
41262
+ 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 };
40768
41263
  //# sourceMappingURL=nitro.mjs.map