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
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./B7gZokg82.js","./BBrRELH32.js","./CWKEp1wx2.js","./BFjGV-RV2.js","./RYFtK4qZ2.js","./BGkumHZ32.js"])))=>i.map(i=>d[i]);
2
+ import{$ as e,C as t,Ht as n,P as r,R as i,S as a,Ut as o,V as s,Vt as c,W as l,_t as u,at as d,b as f,ct as p,d as m,dt as h,f as g,ft as _,h as v,ht as y,i as b,j as ee,m as x,nt as S,p as te,pt as C,rt as w,tt as T,ut as E,v as ne,xt as D,y as O,yt as k}from"./CSkxz2NX.js";import{c as A,d as re,f as ie,l as j,t as ae,u as oe}from"./D6uzXueg.js";import{t as se}from"./HclGiUj8.js";import{n as ce}from"./KZQX7xoM.js";import{t as M}from"./CWoJjWmZ.js";import{t as le}from"./DIaZ2PTo2.js";import{t as ue}from"./aLLjF2K-2.js";import{t as N}from"./BDNMzG2s2.js";import{t as de}from"./BBrRELH32.js";import{C as fe,L as pe,N as P,O as me,St as F,_ as he,b as ge,c as _e,dt as ve,et as ye,v as be,y as xe,z as I}from"./BFjGV-RV2.js";import{t as Se}from"./Cc_9VzD42.js";import{t as L}from"./D0ZBQrN_2.js";import{n as Ce,t as we}from"./BNT8gYU92.js";import{t as Te}from"./36oeS8_R2.js";import{r as Ee,t as De}from"./D1YDxZpZ.js";import{t as Oe}from"./D20Yamr4.js";import{t as ke}from"./C3J6FYKa.js";import{n as R}from"./DeYsUzhr.js";var Ae=`__characterAssets`;function je(e){return{id:e.id,name:e.name,file:e.file,frames:e.sheet?.frames??4,frameWidth:e.sheet?.frameWidth??48,frameHeight:e.sheet?.frameHeight??88,kind:e.kind===`glb`?`glb`:e.kind===`dev`?`dev`:`sheet`,builtin:e.author===`system`,applied:(e.appliedTo?.length??0)>0}}function z(){let e=[],t=[{id:`knight`,name:`灰羽骑士`,file:`/assets/game/character/knight.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`mage`,name:`紫晶法师`,file:`/assets/game/character/mage.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`bot`,name:`青枢机械`,file:`/assets/game/character/bot.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`hero-3d`,name:`标准员工模型`,file:`/assets/game/character/hero-3d.glb`,frames:1,frameWidth:0,frameHeight:0,kind:`glb`,builtin:!0,applied:!1,hint:`默认员工 3D 模型`},{id:`yangyang-walk`,name:`杨杨(走路)`,file:`/assets/game/character/yangyang-walk.glb`,frames:1,frameWidth:0,frameHeight:0,kind:`glb`,builtin:!0,applied:!1,hint:`自定义角色:骨骼走路动画(剪辑 WALK;文件较大,建议少量绑定)`},{id:`device-3d`,name:`工业泵设备`,file:`/assets/game/character/device-3d.glb`,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`数字孪生实体模型(拖入场景生成设备)`}],n=[];try{let e=Object.assign({});for(let[t,r]of Object.entries(e)){let e=t.split(`/`).pop()??``,i=`dev-folder-`+e.replace(/\.glb$/i,``),a=r.replace(/^\/public\//,`/`);n.push({id:i,name:e.replace(/\.glb$/i,``).replace(/[-_]/g,` `),file:a,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`})}}catch{}let r=(e=!0)=>{let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={},r=t||``;return r&&(n.authorization=`Bearer ${decodeURIComponent(r)}`),e&&(n[`content-type`]=`application/json`),n},i=h({models:e,loaded:!1,loading:!1,error:``,async load(){if(!(i.loading||i.loaded)){i.loading=!0;try{let[e,a]=await Promise.allSettled([fetch(`/api/workshop/assets/character`,{headers:r()}),fetch(`/api/workshop/assets/devices`,{headers:r()})]),o=e.status===`fulfilled`?await e.value.json().catch(()=>({})):{},s=a.status===`fulfilled`?await a.value.json().catch(()=>({})):{},c=o?.data?.assets??[],l=(s?.data?.devices??[]).map(e=>({id:e.id,name:e.name,file:e.file,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`,hFactor:typeof e.defaultScale==`number`&&e.defaultScale>0?e.defaultScale:1})),u=new Set(t.map(e=>e.file)),d=(s?.data?.characters??[]).filter(e=>!u.has(e.file)).map(e=>({id:e.id,name:e.name,file:e.file,frames:1,frameWidth:0,frameHeight:0,kind:`glb`,builtin:!0,applied:!1,hint:`角色 3D 模型(在频道成员管理中设置)`})),f=[],p=new Set;for(let e of c)f.push(je(e)),p.add(e.id);for(let e of l)p.has(e.id)||(f.push(e),p.add(e.id));for(let e of d)p.has(e.id)||(f.push(e),p.add(e.id));for(let e of t)p.has(e.id)||f.push(e);for(let e of n)p.has(e.id)||f.push(e);i.models.splice(0,i.models.length,...f),i.loaded=!0,i.error=``}catch(e){i.loaded=!1,i.error=L(e)}finally{i.loading=!1}}},byId(t){return e.find(e=>e.id===t)},async upload(e,t){let n=new FormData;n.append(`file`,e),n.append(`name`,t.name??e.name.replace(/\.[^.]+$/,``)),n.append(`workspaceId`,t.workspaceId??``),n.append(`kind`,t.kind??`sheet`),n.append(`frameWidth`,String(t.frameWidth??48)),n.append(`frameHeight`,String(t.frameHeight??88)),n.append(`frames`,String(t.frames??4));let a=await fetch(`/api/workshop/assets/character`,{method:`POST`,headers:r(!1),body:n}),o=await a.json().catch(()=>({}));if(!a.ok||!o?.data?.asset)throw Error(o?.message??`上传失败`);return i.loaded=!1,await i.load(),je(o.data.asset)},async remove(e){let t=await fetch(`/api/workshop/assets/character/${e}`,{method:`DELETE`,headers:r()}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n?.message??`删除失败`);return i.loaded=!1,await i.load(),{used:n?.data?.used??0}},async uploadDevice(e,t){let n=new FormData;n.append(`file`,e),t&&n.append(`name`,t);let a=await fetch(`/api/workshop/assets/devices`,{method:`POST`,headers:r(!1),body:n}),o=await a.json().catch(()=>({}));if(!a.ok||!o?.data?.asset)throw Error(o?.message??`设备模型上传失败`);i.loaded=!1,await i.load();let s=o.data.asset;return{id:s.id,name:s.name,file:s.file,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!1,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`}},async removeDevice(e){let t=e.replace(/^dev-folder-/,``),n=await fetch(`/api/workshop/assets/devices/${encodeURIComponent(t)}`,{method:`DELETE`,headers:r()}),a=await n.json().catch(()=>({}));if(!n.ok)throw Error(a?.message??`设备模型删除失败`);i.loaded=!1,await i.load()},async bind(e,t,n){let i=await fetch(`/api/workshop/channels/${e}/agents/${t}/model`,{method:`PATCH`,headers:r(),body:JSON.stringify({modelRef:n})}),a=await i.json().catch(()=>({}));if(!i.ok)throw Error(a?.message??`绑定失败`)}});return i}function Me(){let e=globalThis;e[Ae]||(e[Ae]=z());let t=e[Ae];return t.load(),t}var Ne={key:0,class:`mp-loading`},B={key:1,class:`mp-failed`},Pe=Object.assign(N(a({__name:`ModelPreview3D`,props:{file:{default:``},localFile:{default:null},height:{default:64}},setup(t){let a=t,o=C(null),c=C(!1),l=C(!1),u=globalThis,d=``;function f(){if(u.__modelPreviewRig)return u.__modelPreviewRig;let e=new ge({alpha:!0,antialias:!1,powerPreference:`low-power`});e.setPixelRatio(Math.min(window.devicePixelRatio,1.5)),e.toneMapping=4,e.toneMappingExposure=1.15;let t={renderer:e,slots:new Set,raf:0,clock:new me},n=0,r=()=>{t.raf=requestAnimationFrame(r);let e=t.clock.getDelta();if(n+=e*1e3,n<1e3/30)return;let i=n/1e3;n=0;for(let e of t.slots)!e.canvas.isConnected||!e.visible||(e.group&&(e.group.rotation.y+=i*e.speed),t.renderer.setSize(e.w,e.h,!1),t.renderer.render(e.scene,e.camera),e.ctx.clearRect(0,0,e.w,e.h),e.ctx.drawImage(t.renderer.domElement,0,0,e.w,e.h))};return r(),u.__modelPreviewRig=t,t}function p(){let e=u.__modelPreviewRig;!e||e.slots.size>0||(cancelAnimationFrame(e.raf),e.renderer.dispose(),e.renderer.domElement.remove(),delete u.__modelPreviewRig)}function m(e){try{let t=new xe(u.__modelPreviewRig.renderer);e.environment=t.fromScene(new he,.04).texture,e.environmentIntensity=.55,t.dispose()}catch{}e.add(new I(14674431,3813157,1.3));let t=new P(16773855,2.2);t.position.set(3,4,2),e.add(t);let n=new P(4311284,1);n.position.set(-3,1,-2.5),e.add(n)}function h(e){let t=new fe().setFromObject(e),n=new F;t.getSize(n);let r=t.getCenter(new F),i=2/(Math.max(n.x,Math.max(n.y,n.z))||1);e.scale.setScalar(i),e.position.set(-r.x*i,-r.y*i,-r.z*i)}let _=null;function y(e){if(!o.value||c.value)return;let t=o.value,n=t.clientWidth||120,r=a.height||64,i=f(),s=document.createElement(`canvas`);s.style.width=`100%`,s.style.height=`${r}px`,s.width=Math.max(2,Math.round(n*Math.min(window.devicePixelRatio,1.5))),s.height=Math.max(2,Math.round(r*Math.min(window.devicePixelRatio,1.5)));let u=s.getContext(`2d`);if(!u){c.value=!0;return}t.appendChild(s);let d=new ve;m(d);let p=new ye(38,n/r,.1,100);p.position.set(2.4,1.8,3.1),p.lookAt(0,0,0);let g=new pe;d.add(g),_={canvas:s,ctx:u,scene:d,camera:p,group:g,w:s.width,h:s.height,speed:.6,visible:!1,io:null},typeof IntersectionObserver<`u`?(_.io=new IntersectionObserver(e=>{for(let t of e)_&&(_.visible=t.isIntersecting)}),_.io.observe(s)):_.visible=!0,i.slots.add(_),l.value=!0,new be().load(e,e=>{let t=e.scene;_&&(t.traverse(e=>{let t=e;t.isMesh&&(t.castShadow=!1,t.receiveShadow=!1)}),h(t),_.group.add(t),l.value=!1)},void 0,()=>{l.value=!1,c.value=!0})}function b(){if(d&&URL.revokeObjectURL(d),d=``,_){let e=u.__modelPreviewRig;_.io?.disconnect(),e?.slots.delete(_),_.scene.traverse(e=>{let t=e;if(t.isMesh){t.geometry?.dispose();let e=Array.isArray(t.material)?t.material:[t.material];for(let t of e){for(let e of Object.keys(t)){let n=t[e];n&&n.isTexture&&n.dispose()}t?.dispose()}}}),_.canvas.remove(),_=null,p()}}function S(){if(c.value=!1,a.localFile){d=URL.createObjectURL(a.localFile),y(d);return}a.file&&y(a.file)}return i(S),e(()=>[a.file,a.localFile],()=>{b(),(a.localFile??(a.file?a.file:null))&&ee(()=>S())}),r(b),(e,r)=>(s(),v(`div`,{ref_key:`hostRef`,ref:o,class:`model-preview-3d`,style:n({height:`${t.height}px`})},[D(l)?(s(),v(`div`,Ne,[...r[0]||=[g(`span`,{class:`mp-spin`},null,-1)]])):D(c)?(s(),v(`div`,B,` PREVIEW NA `)):x(``,!0)],4))}}),[[`__scopeId`,`data-v-9d114165`]]),{__name:`WorkshopTownModelPreview3D`}),Fe={class:`asset-lib`},Ie={class:`lib-head`},Le={class:`head-title`},Re={class:`head-hint`},ze={class:`upload-row`},Be={class:`upload-name`},Ve={key:0,class:`drop-hint`},He={key:1,class:`upload-file-tag`},Ue={class:`upload-actions`},We=[`disabled`],Ge=[`disabled`],V={key:2,class:`mini-err`},H={key:3,class:`mini-err`},Ke={class:`lib-grid`},qe=[`data-model-id`,`title`,`onDragstart`],Je={key:1,class:`model-img glb dev`},Ye={class:`model-name`},Xe={class:`model-badge`},Ze={class:`card-actions`},Qe=[`disabled`,`onClick`],$e={key:0,class:`lib-note`},et={key:1,class:`lib-note`},tt={key:0,class:`mini-msg`},nt=Object.assign(N(a({__name:`AssetLibrary`,setup(e){let{t}=ce(),n=Me(),r=m(()=>n.models.filter(e=>e.kind===`dev`)),i=e=>/\.(glb|gltf)$/i.test(e);function a(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-model`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}let u=C(!1),d=C(``),f=C(null),p=C(!1),h=e=>{let t=e.target;y(t.files?.[0]??null)},_=e=>{p.value=!1,y(e.dataTransfer?.files?.[0]??null)},y=e=>{if(e&&!/\.(glb|gltf|obj|fbx)$/i.test(e.name)){d.value=`仅支持 .glb/.gltf/.obj/.fbx 模型文件`;return}f.value=e,d.value=``},ee=()=>{f.value=null};async function S(){let e=f.value;if(!e){d.value=t(`assetLibrary.kcjqcaw012`);return}u.value=!0,d.value=``;try{let r=await n.uploadDevice(e);f.value=null,d.value=t(`assetLibrary.k8nv3or016`,{p0:r.name})}catch(e){d.value=L(e)}finally{u.value=!1}}let w=C(``),T=C(``);async function E(e){w.value=e,T.value=``;try{await n.removeDevice(e),T.value=t(`assetLibrary.k8n918k013`)}catch(e){T.value=L(e)}finally{w.value=``}}return(e,t)=>(s(),v(`aside`,Fe,[g(`div`,Ie,[g(`span`,Le,o(e.$t(`assetLibrary.k7la4x5001`)),1),g(`span`,Re,o(e.$t(`assetLibrary.kulif5b002`)),1)]),g(`div`,{class:c([`upload-box`,{drop:D(p)}]),onDragover:t[0]||=ie(e=>p.value=!0,[`prevent`]),onDragleave:t[1]||=e=>p.value=!1,onDrop:ie(_,[`prevent`])},[g(`label`,ze,[g(`input`,{type:`file`,accept:`.glb,.gltf,.obj,.fbx`,class:`file-input`,onChange:h},null,32),g(`span`,Be,[t[2]||=g(`span`,{class:`i-tabler-plus upload-ico`},null,-1),O(` `+o(D(f)?.name||e.$t(`assetLibrary.k1iiort6010`)),1)])]),D(p)?(s(),v(`span`,Ve,[t[3]||=g(`span`,{class:`i-tabler-download`},null,-1),O(` `+o(e.$t(`assetLibrary.k5hg6jq003`)),1)])):x(``,!0),D(f)?(s(),v(b,{key:1},[i(D(f).name)?(s(),te(Pe,{key:0,"local-file":D(f),height:92},null,8,[`local-file`])):(s(),v(`span`,He,o(D(f).name)+` (`+o(e.$t(`assetLibrary.k1xz5wvk009`)),1)),g(`div`,Ue,[g(`button`,{class:`upload-btn go`,disabled:D(u),onClick:S},o(D(u)?e.$t(`assetLibrary.k1ar7n8i005`):e.$t(`assetLibrary.k1hhga4h014`)),9,We),g(`button`,{class:`upload-btn`,disabled:D(u),onClick:ee},o(e.$t(`assetLibrary.k3xdnn004`)),9,Ge)])],64)):D(u)?(s(),v(`span`,V,o(e.$t(`assetLibrary.k1ar7n8i005`)),1)):x(``,!0),D(d)&&!D(f)?(s(),v(`span`,H,o(D(d)),1)):x(``,!0)],34),g(`div`,Ke,[(s(!0),v(b,null,l(D(r),n=>(s(),v(`div`,{key:n.id,class:`model-card`,"data-model-id":n.id,draggable:`true`,title:n.hint||e.$t(`assetLibrary.katn7lo015`,{p0:n.name}),onDragstart:e=>a(e,n.id)},[i(n.file)?(s(),te(Pe,{key:0,file:n.file,height:76},null,8,[`file`])):(s(),v(`span`,Je,[...t[4]||=[g(`span`,{class:`i-tabler-cpu glb-cube`,"aria-hidden":`true`},null,-1)]])),g(`span`,Ye,o(n.name),1),g(`span`,Xe,o(e.$t(`assetLibrary.k1n32zs0006`)),1),g(`div`,Ze,[n.file.includes(`/assets/game/devices/`)?(s(),v(`button`,{key:0,class:`card-btn danger`,disabled:D(w)===n.id,onClick:e=>E(n.id)},o(D(w)===n.id?`…`:e.$t(`assetLibrary.k498l011`)),9,Qe)):x(``,!0)])],40,qe))),128)),D(n).loaded?D(r).length===0?(s(),v(`div`,et,o(e.$t(`assetLibrary.k15527e1008`)),1)):x(``,!0):(s(),v(`div`,$e,[t[5]||=g(`span`,{class:`loading-dot`},null,-1),O(` `+o(e.$t(`assetLibrary.k1kq2tmi007`)),1)]))]),D(T)?(s(),v(`span`,tt,o(D(T)),1)):x(``,!0)]))}}),[[`__scopeId`,`data-v-effff4e2`]]),{__name:`WorkshopAssetLibrary`}),U={class:`twin-panel`},W={class:`twin-head`},rt={class:`twin-kicker`},it={class:`twin-count`},at={key:0,class:`twin-error`},ot={key:1,class:`twin-empty`},st={key:2,class:`twin-empty`},ct={class:`twin-empty-frame`},lt={class:`twin-empty-title`},ut={class:`twin-empty-sub`},dt={key:3,class:`twin-list`},ft=[`onClick`],pt={class:`twin-row`},mt={class:`twin-model-tag`},ht={class:`twin-idbar`},gt={class:`twin-name`},_t={class:`twin-code`},vt=[`disabled`,`title`,`onClick`],yt={key:0,class:`twin-tele`},bt={key:1,class:`twin-daq`},xt={key:2,class:`twin-dcw`},St={class:`dcw-head`},G={key:0,class:`dcw-src`},Ct={class:`dcw-set`},wt=[`title`],Tt={key:0,class:`dcw-act-at`},Et={class:`dcw-win`},Dt=[`title`],Ot={class:`dcw-ctrl`},kt=[`onUpdate:modelValue`,`step`,`min`,`max`,`placeholder`,`onKeydown`],At=[`disabled`,`title`,`onClick`],jt={key:1,class:`dcw-err`},Mt={key:4,class:`twin-err`},Nt=Object.assign(N(a({__name:`DeviceTwinPanel`,props:{daqLive:{},dcwLive:{}},emits:[`focus-device`],setup(e){let{t}=ce(),a=ke(),u=Oe(),d=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),f=null;i(()=>{a.load(),f=M(()=>void a.load(),2e3)}),r(()=>{f&&clearInterval(f)});let p=C(``),m=C(``),_=C(``),y=null;async function ee(e){if(_.value!==e.id){_.value=e.id,y&&clearTimeout(y),y=setTimeout(()=>{_.value=``},3e3);return}y&&clearTimeout(y),_.value=``,p.value=e.id,m.value=``;try{await a.remove(e.id)}catch(e){m.value=L(e)}finally{p.value=``}}let te={idle:`var(--hud-amber)`,running:`var(--hud-ok)`,alarm:`var(--hud-danger)`,offline:`var(--hud-dim)`},w={idle:`STANDBY`,running:`RUNNING`,alarm:`ALARM`,offline:`OFFLINE`},T=e=>e.replace(/[^A-Za-z0-9]/g,``).slice(0,4).toUpperCase()||`DEV`,E=e=>e.replace(/^dev-/,``).replace(/[^a-z0-9]/gi,``).slice(-6).toUpperCase(),ne=e=>typeof e==`number`?(Math.round(e*100)/100).toString():String(e),k=e=>`${Number.isFinite(e.lo)?e.lo:`-∞`} ~ ${Number.isFinite(e.hi)?e.hi:`+∞`} ${e.unit}`,A=h({}),ae=h({}),oe=C(``);function se(e){let n=A[e.id];if(n==null||n===``)return;let r=Number(n);if(r<e.lo||r>e.hi){ae[e.id]=t(`deviceTwinPanel.kxddket010`,{p0:e.src===`recipe`?t(`deviceTwinPanel.kq2jssk008`):t(`deviceTwinPanel.k1iwj796009`),p1:k(e)});return}ae[e.id]=``,oe.value=e.id,u.write(e.id,r).then(t=>{t.ok||(ae[e.id]=t.message)}).catch(t=>{ae[e.id]=L(t)}).finally(()=>{oe.value=``})}return(t,r)=>(s(),v(`aside`,U,[g(`div`,W,[g(`span`,rt,o(t.$t(`deviceTwinPanel.k7k6evr002`)),1),g(`span`,it,o(D(a).twins.length),1)]),D(a).error?(s(),v(`div`,at,o(D(a).error),1)):x(``,!0),D(a).loaded?D(a).twins.length===0?(s(),v(`div`,st,[g(`div`,ct,[g(`div`,lt,o(t.$t(`deviceTwinPanel.k13y2qmg004`)),1),g(`div`,ut,o(t.$t(`deviceTwinPanel.kotf23l005`)),1)])])):(s(),v(`div`,dt,[(s(!0),v(b,null,l(D(a).twins,i=>(s(),v(`button`,{key:i.id,class:c([`twin-card`,{daq:d(i)}]),type:`button`,onClick:e=>t.$emit(`focus-device`,i)},[g(`div`,pt,[g(`span`,mt,o(T(i.modelRef||i.name)),1),g(`div`,ht,[g(`span`,gt,o(i.name),1),g(`span`,_t,o(d(i)?`DAQ`:E(i.id)),1)]),g(`button`,{class:c([`twin-del`,{armed:D(_)===i.id}]),disabled:D(p)===i.id,title:D(_)===i.id?`再次点击确认删除该设备实例`:`删除该设备实例`,onClick:ie(e=>ee(i),[`stop`])},o(D(_)===i.id?t.$t(`deviceTwinPanel.k44653007`):`✕`),11,vt),g(`span`,{class:c([`twin-state`,`s-${i.state}`])},[g(`i`,{class:`twin-state-dot`,style:n({background:te[i.state]||`var(--hud-dim)`})},null,4),O(` `+o(w[i.state]||i.state),1)],2)]),Object.keys(i.telemetry).length?(s(),v(`div`,yt,[(s(!0),v(b,null,l(i.telemetry,(e,t)=>(s(),v(`span`,{key:t,class:`tele-item`},[g(`em`,null,o(t),1),g(`b`,null,o(ne(e)),1)]))),128))])):x(``,!0),e.daqLive?.[i.id]?.length?(s(),v(`div`,bt,[(s(!0),v(b,null,l(e.daqLive[i.id],(e,t)=>(s(),v(`span`,{key:`${e.ch}-${t}`,class:c([`daq-item`,{alarm:e.alarm}])},[g(`em`,null,o(e.ch),1),g(`b`,null,[O(o(e.value),1),g(`i`,null,o(e.unit),1)])],2))),128))])):x(``,!0),e.dcwLive?.[i.id]?.length?(s(),v(`div`,xt,[(s(!0),v(b,null,l(e.dcwLive[i.id],e=>(s(),v(`div`,{key:e.id,class:`dcw-item`},[g(`div`,St,[g(`em`,null,[O(o(e.ch),1),e.src===`recipe`?(s(),v(`i`,G,o(t.$t(`deviceTwinPanel.k48grv006`)),1)):x(``,!0)]),g(`b`,Ct,[O(o(e.value==null?`--`:e.value.toFixed(e.decimals)),1),g(`i`,null,o(e.unit),1)])]),e.readValue!=null||e.lastReadAt?(s(),v(`div`,{key:0,class:`dcw-act`,title:t.$t(`deviceTwinPanel.k9r7d4e030`)},[r[0]||=g(`em`,null,`ACT`,-1),g(`b`,null,[O(o(e.readValue==null?`--`:e.readValue.toFixed(e.decimals)),1),g(`i`,null,o(e.unit),1)]),e.lastReadAt?(s(),v(`i`,Tt,o(e.lastReadAt.slice(11,19)),1)):x(``,!0)],8,wt)):x(``,!0),g(`div`,Et,[g(`span`,{title:e.src===`recipe`?`当前运行配方工艺窗口`:`节点全局量程`},o(k(e)),9,Dt)]),g(`div`,Ot,[S(g(`input`,{"onUpdate:modelValue":t=>D(A)[e.id]=t,type:`number`,class:`ctrl-input`,step:10**-e.decimals,min:Number.isFinite(e.lo)?e.lo:void 0,max:Number.isFinite(e.hi)?e.hi:void 0,placeholder:`${Number.isFinite(e.lo)?e.lo:``} ~ ${Number.isFinite(e.hi)?e.hi:``}`,onKeydown:re(t=>se(e),[`enter`])},null,40,kt),[[j,D(A)[e.id],void 0,{number:!0}]]),g(`button`,{class:`ctrl-btn dcw-send`,disabled:D(A)[e.id]==null||D(A)[e.id]===``||D(oe)===e.id,title:t.$t(`deviceTwinPanel.k1j04u8001`),onClick:ie(t=>se(e),[`stop`])},o(D(oe)===e.id?`···`:`SET`),9,At)]),D(ae)[e.id]?(s(),v(`small`,jt,o(D(ae)[e.id]),1)):x(``,!0)]))),128))])):x(``,!0)],10,ft))),128))])):(s(),v(`div`,ot,o(t.$t(`deviceTwinPanel.kkw7sn5003`)),1)),D(m)?(s(),v(`span`,Mt,o(D(m)),1)):x(``,!0)]))}}),[[`__scopeId`,`data-v-2eb2660e`]]),{__name:`WorkshopDeviceTwinPanel`}),Pt=`__sceneLayouts`;function K(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}function Ft(){let e=null,t=e=>new Promise(t=>setTimeout(t,e)),n=h({layouts:{},loaded:!1,loading:!1,error:``,rev:0,async load(){return e||=r().finally(()=>{e=null}),e},byChannel(e){return n.layouts[e]},async save(e,r){n.layouts[e]={channelId:e,x:r.x,z:r.z,radiusX:r.radiusX,radiusZ:r.radiusZ,shape:r.shape??`ellipse`,rotationY:r.rotationY??0,updatedAt:R()},n.rev++;let i=null;for(let a=0;a<3;a++)try{let t=await fetch(`/api/workshop/scene/layouts/${e}`,{method:`PUT`,headers:K(),body:JSON.stringify(r)}),i=await t.json().catch(()=>({}));if(!t.ok||!i?.data?.layout)throw Error(i?.message??`保存频道布局失败`);return n.layouts[e]=i.data.layout,i.data.layout}catch(e){i=e instanceof Error?e:Error(String(e)),a<2&&await t(500*(a+1))}throw i??Error(`保存频道布局失败`)},async remove(e){let t=await fetch(`/api/workshop/scene/layouts/${e}`,{method:`DELETE`,headers:K()}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.message??`移除频道放置失败`);let i=Object.fromEntries(Object.entries(n.layouts).filter(([t])=>t!==e));n.layouts=i,n.rev++}});async function r(){n.loading=!0;let e=``;try{for(let r=0;r<3;r++)try{let e=await fetch(`/api/workshop/scene/layouts`,{headers:K()});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=(await e.json().catch(()=>({})))?.data?.layouts??[],r={};for(let e of t)r[e.channelId]=e;n.layouts=r,n.loaded=!0,n.error=``,n.rev++;return}catch(n){e=L(n),r<2&&await t(400*(r+1))}n.loaded=!1,n.error=e}finally{n.loading=!1}}return n}function It(){let e=globalThis;e[Pt]||(e[Pt]=Ft());let t=e[Pt];return t.load(),t}function Lt(e){return d()?(E(e),!0):!1}var Rt=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var zt=Object.prototype.toString,Bt=e=>zt.call(e)===`[object Object]`,Vt=()=>{};function Ht(...e){if(e.length!==1)return u(...e);let t=e[0];return typeof t==`function`?_(w(()=>({get:t,set:Vt}))):C(t)}function Ut(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}var Wt=e=>e();function Gt(e=Wt,t={}){let{initialState:n=`active`}=t,r=Ht(n===`active`);function i(){r.value=!1}function a(){r.value=!0}return{isActive:_(r),pause:i,resume:a,eventFilter:(...t)=>{r.value&&e(...t)}}}function Kt(e){return Array.isArray(e)?e:[e]}function qt(e){return e||t()}function Jt(t,n,r={}){let{eventFilter:i=Wt,...a}=r;return e(t,Ut(i,n),a)}function Yt(e,t,n={}){let{eventFilter:r,initialState:i=`active`,...a}=n,{eventFilter:o,pause:s,resume:c,isActive:l}=Gt(r,{initialState:i});return{stop:Jt(e,t,{...a,eventFilter:o}),pause:s,resume:c,isActive:l}}function Xt(e,t=!0,n){qt(n)?i(e,n):t?e():ee(e)}function Zt(t,n,r){return e(t,n,{...r,immediate:!0})}var Qt=Rt?window:void 0;Rt&&window.document,Rt&&window.navigator,Rt&&window.location;function $t(e){let t=k(e);return t?.$el??t}function q(...e){let t=[],n=()=>{t.forEach(e=>e()),t.length=0},r=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),i=m(()=>{let t=Kt(k(e[0])).filter(e=>e!=null);return t.every(e=>typeof e!=`string`)?t:void 0}),a=Zt(()=>[i.value?.map(e=>$t(e))??[Qt].filter(e=>e!=null),Kt(k(i.value?e[1]:e[0])),Kt(D(i.value?e[2]:e[1])),k(i.value?e[3]:e[2])],([e,i,a,o])=>{if(n(),!e?.length||!i?.length||!a?.length)return;let s=Bt(o)?{...o}:o;t.push(...e.flatMap(e=>i.flatMap(t=>a.map(n=>r(e,t,n,s)))))},{flush:`post`});return Lt(n),()=>{a(),n()}}var en=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{},tn=`__vueuse_ssr_handlers__`,nn=rn();function rn(){return tn in en||(en[tn]=en[tn]||{}),en[tn]}function an(e,t){return nn[e]||t}function on(e){return e==null?`any`:e instanceof Set?`set`:e instanceof Map?`map`:e instanceof Date?`date`:typeof e==`boolean`?`boolean`:typeof e==`string`?`string`:typeof e==`object`?`object`:Number.isNaN(e)?`any`:`number`}var sn={boolean:{read:e=>e===`true`,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},cn=`vueuse-storage`;function ln(t,n,r,i={}){let{flush:a=`pre`,deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:l=!1,shallow:u,window:d=Qt,eventFilter:f,onError:p=e=>{console.error(e)},initOnMounted:h}=i,g=(u?y:C)(typeof n==`function`?n():n),_=m(()=>k(t));if(!r)try{r=an(`getDefaultStorage`,()=>Qt?.localStorage)()}catch(e){p(e)}if(!r)return g;let v=k(n),b=on(v),x=i.serializer??sn[b],{pause:S,resume:te}=Yt(g,e=>E(e),{flush:a,deep:o,eventFilter:f});e(_,()=>D(),{flush:a});let w=!1;d&&s&&(r instanceof Storage?q(d,`storage`,e=>{h&&!w||D(e)},{passive:!0}):q(d,cn,e=>{h&&!w||O(e)})),h?Xt(()=>{w=!0,D()}):D();function T(e,t){if(d){let n={key:_.value,oldValue:e,newValue:t,storageArea:r};d.dispatchEvent(r instanceof Storage?new StorageEvent(`storage`,n):new CustomEvent(cn,{detail:n}))}}function E(e){try{let t=r.getItem(_.value);if(e==null)T(t,null),r.removeItem(_.value);else{let n=x.write(e);t!==n&&(r.setItem(_.value,n),T(t,n))}}catch(e){p(e)}}function ne(e){let t=e?e.newValue:r.getItem(_.value);if(t==null)return c&&v!=null&&r.setItem(_.value,x.write(v)),v;if(!e&&l){let e=x.read(t);return typeof l==`function`?l(e,v):b===`object`&&!Array.isArray(e)?{...v,...e}:e}return typeof t==`string`?x.read(t):t}function D(e){if(!(e&&e.storageArea!==r)){if(e&&e.key==null){g.value=v;return}if(!(e&&e.key!==_.value)){S();try{let t=x.write(g.value);(e===void 0||e?.newValue!==t)&&(g.value=ne(e))}catch(e){p(e)}finally{e?ee(te):te()}}}}function O(e){D(e.detail)}return g}var un={class:`town-view`},dn={class:`topnav`},fn={class:`brand`},pn={class:`brand-sub`},mn=[`aria-label`],hn={class:`seg`},gn=[`disabled`,`title`],_n={class:`nav-right`},vn=[`title`],yn={class:`nav-chip mono`},bn=[`title`],xn={class:`avatar-fallback`},Sn={class:`app`},Cn={class:`rail rail-left`},wn={class:`panel`},Tn={class:`panel-hd`},En={class:`panel-tag`},Dn={class:`panel`},On={class:`panel-hd`},kn={class:`panel-tag`},An={class:`daq-ctrl`},jn=[`title`],Mn=[`title`],Nn=[`value`],Pn={class:`daq-list`},Fn=[`title`,`onClick`,`onKeydown`],In={class:`daq-ico`},Ln=[`innerHTML`],Rn={class:`daq-meta`},zn={class:`daq-name`},Bn={class:`daq-code`},Vn=[`title`,`onClick`],Hn={class:`daq-count`},Un={key:0,class:`daq-children`},Wn=[`draggable`,`title`,`onDragstart`,`onClick`],Gn={class:`daq-meta`},Kn={class:`daq-name`},qn={class:`daq-node-sub`},Jn={class:`node-val mono`},Yn={class:`node-dev`},Xn={key:0,class:`scene-cur`},Zn={key:0,class:`daq-empty-hint`},Qn={class:`panel`},$n={class:`panel-hd`},er={class:`panel-tag`},tr={class:`daq-list`},nr=[`title`,`onClick`,`onKeydown`],rr={class:`daq-ico`},ir=[`innerHTML`],ar={class:`daq-meta`},or={class:`daq-name`},sr={class:`daq-code`},cr=[`title`,`onClick`],lr={class:`daq-count`},ur={key:0,class:`daq-children`},dr=[`draggable`,`title`,`onDragstart`,`onClick`],fr={class:`daq-meta`},pr={class:`daq-name`},mr={class:`daq-node-sub`},hr={class:`node-val mono`},gr={class:`node-dev`},_r={key:0,class:`scene-cur`},vr={key:0,class:`daq-empty-hint`},yr={class:`panel`},br={class:`panel-hd`},xr={class:`panel-tag`},Sr={class:`scene-list`},Cr=[`draggable`,`data-channel-id`,`title`,`onDragstart`,`onClick`],wr={class:`scene-meta-wrap`},Tr={class:`scene-name`},Er={class:`scene-meta`},Dr={key:0,class:`scene-cur`},Or={key:1,class:`scene-add`},kr={key:0,class:`scene-hint`},Ar={class:`stage-col`},jr={class:`stage-top`},Mr={class:`vp-title`},Nr={class:`vp-id`},Pr={class:`vp-tools`},Fr=[`title`],Ir=[`title`],Lr=[`title`],Rr=[`title`],zr={class:`angle-chip`},Br=[`value`,`aria-label`],Vr={value:`std`},Hr={class:`leaders`},Ur=[`d`,`stroke`],Wr=[`cx`,`cy`,`fill`],Gr={class:`callout-layer`},Kr=[`title`,`onClick`],qr={class:`co-label`},Jr={class:`co-val`},Yr={class:`co-range`},Xr={class:`kpi-strip`},Zr={class:`kpi`},Qr={class:`kpi-meta`},$r={class:`kpi-label`},ei={class:`kpi-val`},ti={class:`kpi`},ni={class:`kpi-meta`},ri={class:`kpi-label`},ii={class:`kpi-val`},ai={class:`kpi`},oi={class:`kpi-meta`},si={class:`kpi-label`},ci={class:`kpi-val`},li={class:`kpi`},ui={class:`kpi-meta`},di={class:`kpi-label`},fi={class:`kpi-val`},pi={class:`kpi`},mi={class:`kpi-meta`},hi={class:`kpi-label`},gi={class:`kpi-val`},_i={key:1,class:`empty-hint`},vi=[`title`],yi={class:`bp-name`},bi={class:`bp-sub`},xi={class:`bp-tabs`},Si={class:`bp-row`},Ci={class:`bp-label`},wi={class:`bp-seg`},Ti={class:`bp-row`},Ei={class:`bp-label`},Di={class:`bp-val`},Oi={class:`bp-row`},ki={class:`bp-label`},Ai={class:`bp-val`},ji={class:`bp-row`},Mi={class:`bp-label`},Ni={class:`bp-val`},Pi={class:`bp-hint`},Fi={class:`member-list`},Ii={class:`member-info`},Li={class:`member-name`},Ri=[`value`,`onChange`],zi=[`value`],Bi={key:0,class:`bp-hint`},Vi={class:`bp-actions`},Hi={key:3,class:`drop-chip`},Ui={key:4,class:`error-chip`},Wi={key:5,"data-hud":`town-loading`,class:`loading-mask`},Gi={class:`loading-text`},Ki={class:`dock`},qi={class:`dock-card`},Ji={class:`dock-hd`},Yi={class:`dock-mode`},Xi={class:`ctl-sec`},Zi={class:`ctl-row`},Qi=[`title`],$i={class:`fps-seg`},ea=[`onClick`],ta={class:`ctl-row`},na=[`title`],ra={class:`fps-seg`},ia=[`onClick`],aa={class:`ctl-sec`},oa={class:`ctl-row`},sa={class:`ctl-name`},ca=[`value`],la={class:`ctl-val`},ua={class:`ctl-row`},da={class:`ctl-name`},fa=[`value`],pa={class:`ctl-val`},ma={class:`ctl-row`},ha={class:`ctl-name`},ga=[`value`],_a={class:`ctl-val`},va={class:`ctl-row`},ya=[`title`],ba=[`value`],xa={class:`ctl-val`},Sa={class:`ctl-sec`},Ca={class:`ctl-row`},wa={class:`ctl-name`},Ta={class:`ctl-btns`},Ea=[`disabled`,`title`],Da={class:`dock-card`},Oa={class:`dock-hd`},ka={class:`dock-count mono`},Aa=[`onClick`],ja=[`title`],Ma={class:`trend-wrap`},Na={key:0,class:`trend-empty`},Pa={class:`rail rail-right`},Fa={key:0,class:`panel inspector`},Ia={class:`panel-hd`},La=[`title`],Ra={class:`ins-chip-row`},za={class:`ins-chip mono`},Ba={key:0,class:`ins-chip accent`},Va={key:1,class:`ins-chip accent`},Ha={key:0,class:`daq-info`},Ua={class:`daq-info-row`},Wa={class:`cy`},Ga={class:`daq-info-row`},Ka={class:`daq-info-row`},qa={class:`daq-bind-bar`},Ja=[`step`,`placeholder`],Ya=[`disabled`],Xa={key:0,class:`dcw-err`},Za={key:1,class:`daq-bind-bar`},Qa={value:``},$a=[`value`],eo=[`disabled`],to={key:1,class:`daq-info`},no={class:`daq-info-row`},ro={class:`cy`},io={class:`daq-info-row`},ao={class:`daq-info-row`},oo={key:0,class:`daq-bind-bar`},so={value:``},co=[`value`],lo=[`disabled`],uo={key:1,class:`daq-node-ctl`},fo={class:`daq-info-row`},po={class:`daq-th-inputs`},mo={class:`daq-info-row`},ho={class:`daq-th-inputs`},go=[`value`],_o=[`value`],vo={class:`daq-info-row`},yo={class:`daq-th-inputs`},bo=[`value`],xo=[`value`],So={class:`daq-info-row`},Co={class:`daq-info-row`},wo=[`title`],To={key:2,class:`ins-empty`},Eo={class:`obj-row`},Do={class:`obj-label`},Oo=[`placeholder`,`disabled`,`title`],ko={class:`obj-row`},Ao={class:`obj-label`},jo=[`value`,`disabled`],Mo=[`value`],No={class:`sect-hd`},Po={class:`bind-ico`},Fo=[`innerHTML`],Io={class:`bind-meta`},Lo={class:`bind-label`},Ro={class:`bind-val`},zo=[`title`,`onClick`],Bo={key:0,class:`ins-empty`},Vo={key:1,class:`bind-add-wrap`},Ho={key:0,class:`bp-group`},Uo={class:`bp-tpl`},Wo=[`data-node-id`,`title`,`onClick`],Go=[`innerHTML`],Ko={key:0,class:`bp-cur`},qo={key:1,class:`bp-cur`},Jo={key:0,class:`bp-empty`},Yo={class:`sect-hd`},Xo={class:`dcw-top`},Zo={class:`bind-ico`},Qo=[`innerHTML`],$o={class:`dcw-id`},es={class:`bind-label`},ts={key:0,class:`dcw-tag`},ns={class:`dcw-name`},rs={class:`dcw-cur`},is=[`title`,`onClick`],as={class:`dcw-win-num`},os={class:`dcw-win-track`},ss={class:`dcw-win-num`},cs={class:`dcw-write`},ls=[`onUpdate:modelValue`,`step`,`placeholder`,`onKeydown`],us=[`disabled`,`title`,`onClick`],ds={key:0,class:`dcw-err`},fs={key:2,class:`ins-empty`},ps={key:3,class:`bind-add-wrap`},ms={key:0,class:`bp-group`},hs={class:`bp-tpl`},gs=[`data-node-id`,`title`,`onClick`],_s=[`innerHTML`],vs={key:0,class:`bp-cur`},ys={key:1,class:`bp-cur`},bs={key:0,class:`bp-empty`},xs={class:`xz-seg`},Ss={class:`scale-row`},Cs=[`value`],ws={class:`scale-val`},Ts={class:`ins-foot`},Es={key:5,class:`ins-empty`},Ds={class:`chat-id-row`},Os={class:`chat-nameplate`},ks={class:`chat-name`},As={class:`chat-meta`},js={key:0,class:`chat-harness`},Ms={class:`chat-count`},Ns={class:`obj-row`},Ps={class:`obj-label`},Fs=[`value`,`disabled`],Is=[`value`],Ls={class:`obj-row`},Rs={class:`obj-label`},zs={class:`range-status`},Bs=[`title`],Vs={class:`sect-hd`},Hs={class:`bind-meta`},Us={class:`bind-label`},Ws=[`value`,`title`,`onChange`],Gs={value:`auto`},Ks={value:`manual`},qs=[`title`,`onClick`],Js={key:0,class:`ins-empty`},Ys={key:1,class:`daq-bind-bar`,style:{"margin-bottom":`8px`}},Xs={value:`dcw`},Zs={value:`daq`},Qs={value:``},$s=[`value`],ec=[`value`],tc={value:`auto`},nc={value:`manual`},rc=[`disabled`],ic={class:`sect-hd`,style:{color:`var(--hud-amber)`}},ac={class:`approval-detail`},oc=[`onUpdate:modelValue`,`placeholder`],sc={class:`daq-bind-bar`,style:{"margin-top":`5px`}},cc=[`onClick`],lc=[`onClick`],uc={class:`obj-row`},dc={class:`obj-label`},fc={class:`bp-seg`},pc={class:`obj-row`},mc={class:`obj-label`},hc={class:`bp-val`},gc={class:`obj-row`},_c={class:`obj-label`},vc={class:`bp-val`},yc={key:4,class:`ins-empty`},bc={class:`sect-hd chat-sect`},xc=[`title`],Sc={key:0,class:`rpg-note`},Cc={class:`rpg-divider`},wc={class:`rpg-time`},Tc={class:`rpg-bubble`},Ec={class:`rpg-text`},Dc={key:2,class:`rpg-divider live`},Oc={class:`rpg-time`},kc={class:`rpg-bubble`},Ac={class:`rpg-text`},jc={key:3,class:`rpg-typing`},Mc={class:`ty-label`},Nc={key:4,class:`rpg-note`},Pc={class:`panel`},Fc={class:`panel-hd`},Ic={class:`health-body`},Lc={class:`donut-wrap`},Rc={class:`donut-center`},zc={class:`health-legend`},Bc={class:`hl-row`},Vc={class:`n`},Hc={class:`hl-row`},Uc={class:`n`},Wc={class:`hl-row`},Gc={class:`n`},Kc={class:`hl-row`},qc={class:`n`},Jc={class:`panel`},Yc={class:`panel-hd`},Xc={class:`panel-tag`},Zc={class:`panel`},Qc={class:`panel-hd`},$c={class:`panel-tag`},el=[`title`],tl={class:`alarm-list`},nl={class:`al-body`},rl={class:`al-txt`},il={class:`al-src`},al=[`onClick`],ol={key:0,class:`rail-empty`},sl={class:`panel`},cl={class:`panel-hd`},ll={class:`panel-tag`},ul={class:`event-list`},dl={class:`ev-time`},fl=[`title`],pl=[`title`],ml={key:0,class:`rail-empty`},hl={class:`panel`},gl={class:`panel-hd`},_l={class:`mm-body`},vl=[`title`],yl={class:`mm-col`},bl=[`title`],xl=[`title`],Sl=[`title`],Cl={class:`mm-meta mono`},wl={class:`statusbar`},Tl={class:`sb-stats`},El={class:`sb-lat mono`},Dl={class:`copy`},Ol={key:0,"data-hud":`town-loading`,class:`loading-mask`},kl={class:`loading-text`},Al=`aw-town-panel-pos`,jl=3200,Ml=2400,Nl=3e4,Pl=80,Fl=120,Il=104,Ll=8,Rl=1600,zl=Object.assign(N(a({__name:`TownView`,props:{channelId:{},allChannels:{type:Boolean}},setup(t){let{t:a}=ce(),u=t,d=Ce(),_=Se(),{conn:te}=we(),w=Te(),E=Me(),k=ke(),N=It(),fe=ue(),pe=C(null),P=y(null),me=y(null),F=y(null),he=typeof window<`u`?new URLSearchParams(location.search).get(`render`)!==`2d`:!0,ge=C(!1),ve=C(0),ye=C(0),be=C(0),xe=C(null),I=C(null),R=C(``),Ae=m(()=>te.state===`connecting`),je=m(()=>d.channels[u.channelId]?.name??``),z=C(`browse`),Ne=C(!0),B=C(null),Pe=m(()=>{switch(B.value?.state){case`dirty`:return a(`townView.k3oo50k155`);case`saving`:return a(`townView.k1b38d59156`);case`saved`:return a(`townView.k3n51yk157`);case`error`:return a(`townView.k1b3ayhc158`);default:return``}});function Fe(){z.value=z.value===`browse`?`edit`:`browse`,F.value?.setMode(z.value),z.value===`browse`&&(Ge(),Ke(null)),W.value=!1}let Ie=C(`translate`);function Le(e){Ie.value=e,F.value?.setTransformMode(e)}e(()=>[I.value,z.value],([e,t])=>{t===`edit`&&e?.kind===`device`&&F.value?.setTransformMode(Ie.value)});function Re(e){let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`SELECT`||t.tagName===`TEXTAREA`||t.isContentEditable))return;let n=e.key.toLowerCase();if(e.key===`Escape`){Ge();return}z.value===`edit`&&I.value?.kind===`device`&&(n===`g`?Le(`translate`):n===`r`?Le(`rotate`):n===`s`?Le(`scale`):(e.key===`Delete`||e.key===`Backspace`)&&ft())}function ze(){Ne.value=!Ne.value,F.value?.setSnap(Ne.value)}function Be(e,t,n,r){let i=t||u.channelId;return i?fe.request({method:`PATCH`,url:`/workshop/channels/${i}/agents/${e}/position`,data:{x:n,z:r}}).catch(()=>null):Promise.resolve()}function Ve(e,t,n){let r=t||u.channelId;return r?fe.request({method:`PATCH`,url:`/workshop/channels/${r}/agents/${e}/range`,data:{range:n}}).catch(()=>null):Promise.resolve()}function He(){if(z.value!==`edit`){Mt();return}F.value?.persistAllDevices()}function Ue(e){I.value&&F.value?.setModelScale(I.value.id,e,I.value.kind)}function We(e){I.value&&F.value?.persistScale(I.value.kind,I.value.id)}function Ge(){I.value=null}let V=C(null),H=C(null);function Ke(e){V.value=e,H.value=e?F.value?.getChannelLayout(e)??null:null}async function qe(){if(!V.value||!H.value)return;let e=H.value,t={x:e.x,z:e.z,radiusX:e.radiusX,radiusZ:e.radiusZ,shape:e.shape??`ellipse`,rotationY:e.rotationY??0};try{await N.save(V.value,t),B.value={state:`saved`,at:Date.now()}}catch(e){B.value={state:`error`,at:Date.now()},R.value=L(e)}}async function Je(){if(V.value)try{await N.remove(V.value),F.value?.removeChannel(V.value),Ke(null)}catch(e){R.value=L(e)}}function Ye(){!V.value||!H.value||(F.value?.updateChannelLayout(V.value,H.value),B.value={state:`dirty`,at:Date.now()})}let Xe=C(``);function Ze(e){let t=F.value;if(t){if(e.placed){t.focusChannel(e.channelId),Ke(e.channelId);return}Xe.value=a(`townView.k7rvbts159`),window.setTimeout(()=>{Xe.value=``},2600)}}function Qe(e,t,n){let r=F.value;if(!r)return!1;let i=G().find(t=>t.channelId===e),o=i?.channelName??d.channels[e]?.name??e.slice(0,8),s=i?.agents.length??d.agents[e]?.length??0;return r.getChannelLayout(e)?(Xe.value=a(`townView.kcyn0191`,{p0:o}),window.setTimeout(()=>{Xe.value=``},2600),r.focusChannel(e),Ke(e),!1):(r.dropChannelOnWorld(t,n,e,o,s),N.save(e,{x:t,z:n,radiusX:Math.max(120,110+s*18),radiusZ:Math.max(80,70+s*14),shape:`ellipse`,rotationY:0}).then(()=>{B.value={state:`saved`,at:Date.now()}}).catch(()=>{B.value={state:`error`,at:Date.now()}}),r.focusChannel(e),!0)}let $e=m(()=>E.models.filter(e=>e.kind===`glb`)),et=m(()=>E.models.filter(e=>e.kind===`dev`)),tt=C(``),U=C(null),W=C(!1);e(()=>I.value,e=>{if(tt.value=e?.kind===`device`?F.value?.getDeviceName?.(e.id)??``:``,U.value=null,e?.kind===`agent`){let t=F.value?.getAgentRange?.(e.id);U.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null,W.value=F.value?.isRangeDrawing(e.id)??!1}else W.value=!1});let rt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return``;let t=F.value?.getAgentRange?.(e.id);return t?`${t.shape===`rect`?a(`townView.k43u0g050`):a(`townView.k414bc049`)} ${Math.round(t.radiusX)} × ${Math.round(t.radiusZ)}`:a(`townView.k1v1icf6160`)});function it(){let e=I.value;if(!(!e||e.kind!==`agent`)){if(W.value){F.value?.cancelRangeDraw(),W.value=!1;return}F.value?.startRangeDraw(e.id),W.value=!0}}function at(){!I.value||I.value.kind!==`agent`||!U.value||(F.value?.setAgentRangeScene(I.value.id,U.value),B.value={state:`dirty`,at:Date.now()})}function ot(){!I.value||I.value.kind!==`agent`||F.value?.commitAgentRange(I.value.id)}function st(){let e=I.value;!e||e.kind!==`agent`||(F.value?.clearAgentRange(e.id),U.value=null,W.value=!1)}function ct(){if(!I.value||I.value.kind!==`device`)return;let e=I.value.id,t=tt.value.trim();t&&(F.value?.renameDevice(e,t),k.update(e,{name:t}).catch(e=>{R.value=L(e)}))}async function lt(e){let t=I.value;if(!t||t.kind!==`agent`)return;let n=t.id,r=d.agents?Object.keys(d.agents).find(e=>(d.agents[e]??[]).some(e=>e.agentId===n)):void 0;if(!r){R.value=a(`townView.kpplr16161`);return}try{await E.bind(r,n,e),F.value?.swapAgentModel(n,e)}catch(e){R.value=L(e)}}async function ut(e){let t=I.value;if(!(!t||t.kind!==`device`)){F.value?.swapDeviceModel(t.id,e);try{await k.update(t.id,{modelRef:e})}catch(e){R.value=L(e)}}}let dt=C(``);function ft(){let e=I.value;if(!(!e||e.kind!==`device`)){if(dt.value!==e.id){dt.value=e.id,window.setTimeout(()=>{dt.value===e.id&&(dt.value=``)},3e3);return}dt.value=``,F.value?.removeDevice(e.id).then(()=>Ge()).catch(e=>{R.value=L(e)})}}let pt=C(`boundary`),mt=m(()=>V.value?G().find(e=>e.channelId===V.value)?.agents??[]:[]);async function ht(e,t){if(V.value)try{await E.bind(V.value,e,t),F.value?.swapAgentModel(e,t)}catch(e){R.value=L(e)}}function gt(e){pt.value=e}let _t=C(0),vt=m(()=>(_t.value,yt().map(e=>({channelId:e,name:d.channels[e]?.name??e.slice(0,8),agentCount:(d.agents[e]??[]).length,placed:F.value?.hasChannel(e)??!1,color:xt(e)}))));function yt(){let e=[];for(let t of bt()??[])for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e.includes(u.channelId)||e.push(u.channelId),e}function bt(){return _.workspaces}function xt(e){return _e(e)}function St(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-channel`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}function G(){let e=[];for(let[t,n]of Object.entries(d.channels)){let r=(d.agents[t]??[]).map(e=>{let n=e.currentTaskId?(d.tasks[t]??[]).find(t=>t.id===e.currentTaskId):void 0;return{agentId:e.agentId,name:e.name,role:e.role,harness:e.harness,state:e.state,currentTaskId:e.currentTaskId??null,currentTaskTitle:n?.title??null,currentTaskProgress:e.currentTaskProgress??n?.progress??null,modelRef:e.modelRef??null,homeX:e.config?.homeX??null,homeZ:e.config?.homeZ??null,range:e.config?.range??null}});e.push({channelId:t,channelName:n.name,agents:r})}return e}function Ct(e){!e||!(`registerModelsFromList`in e)||(`screenToWorld`in e?e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name,kind:e.kind,hFactor:e.hFactor??1}))):e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name}))))}e(()=>E.models.map(e=>`${e.id}:${e.file}`).join(`|`),()=>Ct(P.value));async function wt(){P.value||!pe.value||(he?await Tt():await Et())}async function Tt(){let e=pe.value;if(!e)return;let[{TownScene3D:t}]=await Promise.all([se(()=>import(`./B7gZokg82.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)]),n=new t(G(),e);n.resolveTaskAssignee=e=>d.tasks[u.channelId]?.find(t=>t.id===e)?.assigneeId??null,n.devices={async create(e){return{id:(await k.create({name:e.name,modelRef:e.modelRef,kind:e.kind,controls:e.controls,posX:e.posX,posZ:e.posZ,scale:e.scale})).id}},async update(e,t){if(J.nodeById(e)){await J.saveTransform(e,t.posX,t.posZ);return}await k.update(e,t)},async remove(e){if(J.nodeById(e)){await J.removeNode(e);return}await k.remove(e)},async control(e,t,n){return k.control(e,t,n)}},n.agentApi={async updateHome(e,t,n,r){return Be(e,t,n,r)},async updateRange(e,t,n){return Ve(e,t,n)}},n.channelApi={async save(e,t){return N.save(e,t)}},P.value=n,Ct(n),F.value=n,n.setFpsCap(Number(mf.value)),n.setQualityMode(_f.value),Dt(n),n.on(`select`,e=>{I.value=e}),n.on(`saveState`,e=>{B.value=e}),n.on(`selectChannel`,e=>{Ke(e)}),n.on(`channelResized`,e=>{e&&V.value===e.channelId&&(H.value=e.layout)}),n.on(`agentRangeChanged`,e=>{if(e&&I.value?.kind===`agent`&&I.value.id===e.agentId){let t=F.value?.getAgentRange?.(e.agentId);U.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null}}),ge.value=!0,Ot(n),Vf=Jl(n),N.load().then(()=>{n.hydrate(G(),Object.values(N.layouts),Gl.value),Lt()}).catch(e=>{R.value=a(`townView.k1hmf2ut192`,{p0:L(e)}),window.setTimeout(()=>{N.load()},2500)})}async function Et(){let e=pe.value;if(!e)return;let[t,{TownScene:n}]=await Promise.all([se(()=>import(`./BGkumHZ32.js`),[],import.meta.url),se(()=>import(`./RYFtK4qZ2.js`),__vite__mapDeps([4,5,1,2]),import.meta.url)]),r=new n(G());P.value=r,Ct(r),r.resolveTaskAssignee=e=>d.tasks[u.channelId]?.find(t=>t.id===e)?.assigneeId??null;let i=new t.Game({type:t.AUTO,parent:e.id||`town-host`,width:1100,height:700,backgroundColor:`#eceae4`,pixelArt:!0,antialias:!1,roundPixels:!0,powerPreference:`high-performance`,physics:{default:`arcade`,arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:t.Scale.FIT,autoCenter:t.Scale.CENTER_BOTH},scene:r});me.value=i,Dt(r),r.on(`ready`,()=>{ge.value=!0,Ot(r)})}function Dt(e){let t=e;t.on(`fps`,e=>{ve.value=e}),t.on(`agentCount`,e=>{ye.value=e}),t.on(`blockCount`,e=>{be.value=e,_t.value++}),t.on(`lastActivity`,e=>{xe.value=e});let n=w.subscribe(t=>{try{if(t.type===`channel.snapshot`){e.rebuild(G()),P.value&&K(P.value),u.channelId&&e.focusChannel(u.channelId);return}if(t.type===`device.updated`){k.applyRemote(t.payload),P.value&&K(P.value);return}if(t.type===`device.created`){k.load().then(()=>{P.value&&K(P.value)});return}if(t.type===`device.deleted`){k.removeRemote(t.payload.id),P.value&&K(P.value);return}if(t.type===`scene.layout.saved`||t.type===`scene.layout.removed`){N.load().then(()=>{Ft(P.value),Lt()});return}let n=de(t)?.bubble;n?.agentId&&an(n.agentId,n.kind,n.text,t.at,t.seq),e.handleTownEvent(t)}catch(e){R.value=L(e)}});P._off=n,window.__town={get scene(){return P.value},get game(){return me.value},buildInput:G,get characterAssets(){return E}}}function Ot(e){if(`screenToWorld`in e){Pt(e);return}At(e)}let kt=[];function At(e){let t=e.game.canvas;if(!t)return;let n=(n,r)=>{let i=e.cameras.main,a=t.getBoundingClientRect(),o=(n-a.left)/a.width,s=(r-a.top)/a.height;return{x:i.worldView.x+o*i.worldView.width,y:i.worldView.y+s*i.worldView.height}},r=!1,i=0,a=0;t.addEventListener(`pointerdown`,e=>{e.button===0&&(r=!0,i=e.clientX,a=e.clientY)});let o=n=>{if(!r)return;let o=e.cameras.main,s=t.getBoundingClientRect(),c=e.game.scale.width/s.width,l=(n.clientX-i)*c/o.zoom,u=(n.clientY-a)*c/o.zoom;o.scrollX-=l,o.scrollY-=u,i=n.clientX,a=n.clientY},s=()=>{r=!1};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s),kt.push(()=>window.removeEventListener(`pointermove`,o)),kt.push(()=>window.removeEventListener(`pointerup`,s)),t.addEventListener(`wheel`,t=>{t.preventDefault();let n=e.cameras.main,r=n.zoom+(t.deltaY<0?.08:-.08);n.setZoom(Math.min(2.4,Math.max(.6,r)))},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let r=t.dataTransfer?.getData(`application/x-aw-model`)||t.dataTransfer?.getData(`text/plain`);if(!r)return;let i=n(t.clientX,t.clientY),a=e.dropModelOnWorld(i.x,i.y,r);Kt.value=a})}let jt=null;function Mt(){R.value=a(`townView.kt6xb5p162`),jt&&clearTimeout(jt),jt=setTimeout(()=>{R.value=``},2600)}function Pt(e){let t=e.canvas;if(!t)return;let n=0,r=0,i=0;t.addEventListener(`contextmenu`,e=>e.preventDefault()),t.addEventListener(`mousedown`,e=>{e.button===1&&e.preventDefault()}),t.addEventListener(`pointerdown`,t=>{if(!e.isGizmoBusy?.()){if(t.button===1||t.button===2||t.shiftKey){t.preventDefault(),n=2,r=t.clientX,i=t.clientY;return}t.button===0&&(e.tryStartPointerDrag(t.clientX,t.clientY)||(n=1,r=t.clientX,i=t.clientY))}});let a=t=>{if(e.isGizmoBusy?.())return;if(e.isPointerDragging()){e.movePointerDrag(t.clientX,t.clientY);return}if(!n)return;let a=t.clientX-r,o=t.clientY-i;r=t.clientX,i=t.clientY,n===1?e.orbitBy(a,o):e.panByScreen(a,o)},o=()=>{if(e.isPointerDragging()){e.endPointerDrag();return}n=0};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o),kt.push(()=>window.removeEventListener(`pointermove`,a)),kt.push(()=>window.removeEventListener(`pointerup`,o)),t.addEventListener(`wheel`,t=>{t.preventDefault(),e.zoomBy(t.deltaY>0?.12:-.11)},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let n=t.dataTransfer;if(!n)return;if(z.value!==`edit`){Mt();return}let r=n.getData(`application/x-aw-channel`)||n.getData(`text/plain`);if(r&&vt.value.some(e=>e.channelId===r)){let n=e.screenToWorld(t.clientX,t.clientY);Qe(r,n.x,n.z);return}let i=n.getData(`application/x-aw-daq-node`);if(i){let n=J.nodeById(i);if(n){let r=e.screenToWorld(t.clientX,t.clientY);J.patchNode(i,{posX:Math.round(r.x),posZ:Math.round(r.z)}).then(()=>{if(!n.deviceBindingId){let e=Gu(r.x,r.z,95);e&&Vu(i,e.id)}}).catch(e=>{R.value=L(e)})}return}let a=n.getData(`application/x-aw-dcw-node`);if(a){let n=Y.nodes.find(e=>e.id===a);if(n){let r=e.screenToWorld(t.clientX,t.clientY);Y.patchNode(a,{posX:Math.round(r.x),posZ:Math.round(r.z)}).then(()=>{if(!n.deviceBindingId){let e=Gu(r.x,r.z,95);e&&Y.bindNode(a,e.id).catch(e=>{R.value=L(e)})}P.value&&K(P.value)}).catch(e=>{R.value=L(e)})}return}let o=n.getData(`application/x-aw-model`)||n.getData(`text/plain`);if(o){let n=e.screenToWorld(t.clientX,t.clientY),r=e.dropModelOnWorld(n.x,n.z,o);Kt.value=r}})}function K(e){`syncDevices`in e&&e.syncDevices(Gl.value)}e(()=>N.rev,e=>{let t=F.value;!t||!N.loaded||e===0||(t.hydrate(G(),Object.values(N.layouts),Gl.value),Lt())});function Ft(e){if(!e||!(`applySceneLayouts`in e))return;let t=e;t.applySceneLayouts(Object.values(N.layouts)),t.rebuild(G())}function Lt(){N.load().finally(()=>{})}function Rt(e){let t=F.value;t&&(typeof e.posX==`number`&&typeof e.posZ==`number`&&t.focusTo(e.posX,e.posZ),t.setSelected?.({kind:`device`,id:e.id}))}let zt=h({});function Bt(){if(!(typeof localStorage>`u`))try{let e=JSON.parse(localStorage.getItem(Al)||`{}`);for(let t of Object.keys(e))e[t]&&Number.isFinite(e[t].x)&&(zt[t]=e[t])}catch{}}function Vt(){try{localStorage.setItem(Al,JSON.stringify(zt))}catch{}}let Ht=null;function Ut(e,t){let n=e.currentTarget,r=n.closest(`.drag-panel`),i=n.closest(`.town-frame`);if(!r||!i)return;e.preventDefault();let a=r.getBoundingClientRect(),o=i.getBoundingClientRect();r.style.left=`${a.left-o.left}px`,r.style.top=`${a.top-o.top}px`,r.style.bottom=`auto`,r.style.transform=`none`,zt[t]={x:a.left-o.left,y:a.top-o.top},Ht={frame:i,panel:r,offX:e.clientX-a.left,offY:e.clientY-a.top},document.body.style.userSelect=`none`,document.body.style.cursor=`grabbing`;let s=e=>{let n=Ht;if(!n)return;let r=n.frame.getBoundingClientRect(),i=e.clientX-n.offX-r.left,a=e.clientY-n.offY-r.top,o=n.panel.offsetWidth,s=Math.max(-o+90,Math.min(i,r.width-30)),c=Math.max(4,Math.min(a,r.height-34));n.panel.style.left=`${s}px`,n.panel.style.top=`${c}px`,zt[t]={x:s,y:c}},c=()=>{Ht=null,document.body.style.userSelect=``,document.body.style.cursor=``,window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),Vt()};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c)}Bt();let Wt=y(null),Gt=e=>`#${e.toString(16).padStart(6,`0`)}`,Kt=y(null),qt=m(()=>{let e=Kt.value;return e?e.mode===`rebind`?a(`townView.kgz2nej193`,{p0:e.agentId?.slice(0,8)??a(`townView.k479op189`),p1:e.textureKey}):a(`townView.k5e2460194`,{p0:e.textureKey}):``}),Jt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return[];let t=rn.get(e.id);if(!t||t.length===0)return[];let n=q.value.length?q.value[q.value.length-1]?.at??0:0;return t.filter(e=>e.at>n)}),Yt=m(()=>!I.value||I.value.kind!==`agent`?``:F.value?.getAgentName?.(I.value.id)??a(`townView.k3xdvm125`)),Xt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return null;for(let t of Object.values(d.agents)){let n=(t??[]).find(t=>t.agentId===e.id);if(n)return n}return null}),Zt=m(()=>Xt.value?.role===`lead`?`Leader`:`Worker`),Qt=m(()=>Xt.value?.role===`lead`?`LEADER`:`WORKER`),$t=m(()=>{let e=Xt.value?.state;return a(e===`busy`?`townView.k3n4l5f163`:e===`stopped`?`townView.k3n58d1164`:`townView.k3zcvb115`)}),q=C([]),en=C(!1),tn=new Map,nn=C(null),rn=h(new Map);function an(e,t,n,r,i){let a=typeof r==`number`?r:r?Date.parse(String(r)):Date.now();if(!Number.isFinite(a)||a<=0)return;let o=rn.get(e);o||(o=[],rn.set(e,o));let s=o[o.length-1];s&&s.text===n&&Math.abs(a-s.at)<1500||(o.push({id:`live-${i??a}-${o.length}`,agentId:e,text:n,kind:t,at:a,live:!0}),o.length>Pl&&o.splice(0,o.length-Pl))}function on(){return typeof document>`u`?``:document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``}function sn(e){for(let t of Object.keys(d.agents))if((d.agents[t]??[]).some(t=>t.agentId===e))return t}async function cn(e,t,n=!1){let r=tn.get(e);if(!n&&r&&Date.now()-r.at<Nl){q.value=r.rows;return}en.value=!0;try{let n=on(),r=`/api/workshop/channels/${t}/events?limit=500&excludeTypes=agent.delta`,i=await(await fetch(r,{headers:n?{authorization:`Bearer ${decodeURIComponent(n)}`}:{}})).json().catch(()=>null),a=i?.data?.items??(Array.isArray(i?.data)?i.data:[]),o=[];for(let t of a){let n=de(t)?.bubble;if(!n||n.agentId!==e)continue;let r=t.at,i=typeof r==`number`?r:r?Date.parse(String(r)):0;o.push({id:`${String(t.seq??o.length)}-${o.length}`,agentId:n.agentId,text:n.text,kind:n.kind,at:i,live:!1})}o.sort((e,t)=>e.at-t.at),tn.set(e,{rows:o,at:Date.now()}),q.value=o}catch{q.value=[]}finally{en.value=!1}}function zl(){let e=I.value;if(!e||e.kind!==`agent`)return;let t=sn(e.id);t&&cn(e.id,t,!0)}e(()=>I.value,e=>{if(!e||e.kind!==`agent`){q.value=[];return}let t=sn(e.id);t?cn(e.id,t):q.value=[]},{immediate:!0});let Bl=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return`#35e0a0`;let t=sn(e.id);return t?_e(t)??`#35e0a0`:`#35e0a0`});function Vl(e){switch(e){case`artifact`:return a(`townView.k3w9q9165`);case`delta`:return`……`;case`info`:return a(`townView.k44xa7166`);case`error`:return a(`townView.k3zbgf167`);default:return``}}function Hl(e){if(!e||!Number.isFinite(e)||e<=0)return`--:--:--`;let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}e(()=>q.value.length+Jt.value.length,async()=>{await ee();let e=nn.value;e&&(e.scrollTop=e.scrollHeight)});let Ul=e=>Y.lines.find(t=>t.id===e)?.color,Wl=m(()=>Y.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`dcw-${e.templateRef.startsWith(`dcw-`)?e.templateRef.slice(4):e.templateRef}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:e.enabled?e.state===`error`?`alarm`:`running`:`offline`,posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?Ul(e.lineId):void 0,updatedAt:e.lastWriteAt??e.createdAt}))),Gl=m(()=>[...k.twins.filter(e=>!du(e)),...X.value,...Wl.value]),Kl=e=>Gl.value.find(t=>t.id===e),ql=m(()=>ge.value&&be.value===0&&!Gl.value.some(e=>typeof e.posX==`number`&&typeof e.posZ==`number`));function Jl(e){return M(()=>{k.load().then(()=>{if(P.value===e){e.syncDevices(Gl.value);for(let t of e.getDeviceNodes()){let n=Kl(t.twinId);n&&e.updateDeviceNode(t.twinId,n.state,n.telemetry)}}})},5e3)}let Yl=y([]),J=De(),Y=Oe(),Xl=h(Y.templates.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));e(()=>Y.templates,e=>{e?.length&&Xl.splice(0,Xl.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let Zl=ln(`aw.twin.treeOpen`,{});function Ql(e){Zl.value[e]=!Zl.value[e]}let $l=m(()=>{let e=new Map;for(let t of J.nodes){let n=t.templateRef.startsWith(`daq-`)?t.templateRef.slice(4):t.templateRef,r=e.get(n)??[];r.push(t),e.set(n,r)}for(let t of e.values())t.sort((e,t)=>e.name.localeCompare(t.name,void 0,{numeric:!0}));return e}),eu=m(()=>{let e=new Map;for(let t of Y.nodes){let n=t.templateRef.startsWith(`dcw-`)?t.templateRef.slice(4):t.templateRef,r=e.get(n)??[];r.push(t),e.set(n,r)}for(let t of e.values())t.sort((e,t)=>e.name.localeCompare(t.name,void 0,{numeric:!0}));return e});async function tu(e){try{let t=($l.value.get(e.id)?.length??0)+1;await J.createFromTemplate(`daq-${e.id}`,{name:`${e.name} ${String(t).padStart(2,`0`)}`}),Zl.value[`daq:${e.id}`]=!0}catch(e){R.value=L(e)}}async function nu(e){try{await Y.createFromTemplate(`dcw-${e.id}`,{}),Zl.value[`dcw:${e.id}`]=!0}catch(e){R.value=L(e)}}function ru(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-daq-node`,t.id),e.dataTransfer.setData(`text/plain`,t.id),e.dataTransfer.effectAllowed=`copy`)}function iu(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-dcw-node`,t.id),e.dataTransfer.setData(`text/plain`,t.id),e.dataTransfer.effectAllowed=`copy`)}function au(e){return!J.controller.running||!e.enabled||e.state===`offline`?`offline`:e.state===`alarm`?`alarm`:e.state===`warn`?`warn`:`running`}function ou(e){return!e.enabled||e.state===`error`?`offline`:`running`}let su=h(Ee.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));e(()=>J.templates,e=>{e?.length&&su.splice(0,su.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let cu=e=>{let t=e.startsWith(`daq-`)?e.slice(4):e;return su.find(e=>e.id===t)},lu=e=>cu(e.templateRef);function uu(e){return!J.controller.running||!e.enabled?`offline`:e.state===`alarm`?`alarm`:`running`}let du=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),X=m(()=>J.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`daq-${lu(e)?.id??`unknown`}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:uu(e),posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?Ul(e.lineId):void 0,updatedAt:e.lastAt??e.createdAt}))),fu=C(0),pu=new Map,mu=new Map,hu=null,gu=!1;function _u(){gu||(gu=!0,setTimeout(()=>{gu=!1,fu.value++},200))}function vu(e){if(!e.nodeId||typeof e.value!=`number`||!Number.isFinite(e.value))return;let t=e.state??`ok`;pu.set(e.nodeId,{value:e.value,state:t,atMs:Date.parse(e.at??``)||Date.now()});let n=mu.get(e.nodeId);n||(n=[],mu.set(e.nodeId,n)),n.push(e.value),n.length>Fl&&n.shift();let r=xu.get(e.nodeId);r&&r!==t&&Su(e.nodeId,r,t,e.value),r!==t&&xu.set(e.nodeId,t),_u()}let yu=m(()=>{fu.value;let e=new Map;for(let t of J.nodes){let n=lu(t);if(!n)continue;let r=pu.get(t.id),i=r&&(!t.lastAt||r.atMs>=Date.parse(t.lastAt)),a=i?r.value:t.value;if(a==null)continue;let o=i?r.state:t.state;e.set(t.id,{value:a,hist:mu.get(t.id)??t.hist,phase:0,tpl:n,alarm:o===`alarm`})}return e}),bu=e=>e.value.toFixed(e.tpl.decimals),xu=new Map;function Su(e,t,n,r){let i=J.nodeById(e),o=i?lu(i):null,s=i?.deviceIds??(i?.deviceBindingId?[i.deviceBindingId]:[]),c=(s.length?s.map(e=>k.byId(e)?.name??e.slice(0,8)).join(` / `):null)??i?.name??e.slice(0,8),l=`${r?.toFixed(o?.decimals??2)??`--`} ${o?.unit??``}`;n===`alarm`?lf(a(`townView.k113fir9195`,{p0:c,p1:o?.ch??``,p2:l}),`crit`,c):n===`warn`?lf(a(`townView.k1knv89d196`,{p0:c,p1:o?.ch??``,p2:l}),`warn`,c):t!==`ok`&&n===`ok`&&lf(a(`townView.ksjancw197`,{p0:c,p1:o?.ch??``}),`info`,c)}e(()=>J.nodes.map(e=>`${e.id}:${e.state}`).join(`|`),()=>{for(let e of J.nodes){let t=xu.get(e.id);xu.set(e.id,e.state),!(!t||t===e.state)&&Su(e.id,t,e.state,e.value)}});function Cu(e){return Math.max(0,Math.ceil((Date.parse(e.expiresAt)-Date.now())/1e3))}let wu=()=>{let e=document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``;return{"content-type":`application/json`,authorization:`Bearer ${decodeURIComponent(e)}`}},Tu=C([]),Eu=C(`dcw`),Du=C(``),Ou=C(`auto`),ku=C([]),Au=h({}),ju=null;async function Mu(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/bindings?agentId=${encodeURIComponent(e)}`,{headers:wu()}).then(e=>e.json());Tu.value=t.data?.bindings??[]}catch{}}async function Nu(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/approvals?agentId=${encodeURIComponent(e)}`,{headers:wu()}).then(e=>e.json());ku.value=t.data?.approvals??[]}catch{}}async function Pu(){!I.value?.id||!Du.value||(await fetch(`/api/workshop/agent-tools/bindings`,{method:`POST`,headers:wu(),body:JSON.stringify({agentId:I.value.id,nodeId:Du.value,kind:Eu.value,mode:Ou.value})}),Du.value=``,await Mu())}async function Fu(e){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`DELETE`,headers:wu()}),await Mu()}async function Iu(e,t){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`PATCH`,headers:wu(),body:JSON.stringify({mode:t})}),await Mu()}async function Lu(e,t){await fetch(`/api/workshop/agent-tools/approvals/${e}/decide`,{method:`POST`,headers:wu(),body:JSON.stringify({approved:t,comment:Au[e]??``})}),Reflect.deleteProperty(Au,e),await Nu()}e(()=>I.value?.id,e=>{ju&&=(clearInterval(ju),null),I.value?.kind===`agent`&&e&&(Mu(),Nu(),ju=M(()=>{Nu()},1e3))},{immediate:!0}),r(()=>{ju&&clearInterval(ju)});function Ru(e){return e.kind===`dcw`?Y.nodeById(e.nodeId)?.name??e.nodeId:J.nodeById(e.nodeId)?.name??e.nodeId}let zu=e=>J.nodeById(e)?.deviceIds?.[0]??J.nodeById(e)?.deviceBindingId??null,Bu=e=>e?J.nodes.filter(t=>(t.deviceIds??(t.deviceBindingId?[t.deviceBindingId]:[])).includes(e)).map(e=>e.id):[];function Vu(e,t){J.bindNode(e,t).catch(e=>{R.value=L(e)})}function Hu(e){J.bindNode(e,null).catch(e=>{R.value=L(e)})}let Uu={thermo:`<path d="M10 4a2 2 0 0 1 4 0v9a4 4 0 1 1-4 0V4Z"/><circle cx="12" cy="16.5" r="1.6"/>`,pressure:`<circle cx="12" cy="12" r="8"/><path d="m12 12 3.5-3.5"/><circle cx="12" cy="12" r="1.2"/>`,tension:`<circle cx="12" cy="10" r="4"/><path d="M4 18.5h16M8 18.5V14M16 18.5V14"/><path d="M2.5 10H8M16 10h5.5"/>`,encoder:`<circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2"/><path d="M12 4v3M12 17v3M4 12h3M17 12h3"/>`,camera:`<rect x="3" y="7" width="13" height="10" rx="2"/><path d="m16 11 5-3v8l-5-3"/><circle cx="8" cy="12" r="2.5"/>`,gateway:`<rect x="8" y="11" width="8" height="10" rx="1.5"/><circle cx="12" cy="5.5" r="1.5"/><path d="M12 10V7M8.5 8.5a5 5 0 0 1 7 0M6 6a8.5 8.5 0 0 1 12 0"/>`},Wu=e=>Uu[e]??Uu.gateway;function Gu(e,t,n){let r=null,i=n;for(let n of k.twins){if(du(n)||typeof n.posX!=`number`||typeof n.posZ!=`number`)continue;let a=Math.hypot(n.posX-e,n.posZ-t);a<i&&(i=a,r=n)}return r}let Ku=C(!1),qu=C(!1),Ju=C(420);function Yu(e,t){let n=t.currentTarget,r=n?.closest(`.panel`);if(n&&r){let e=n.getBoundingClientRect().top-r.getBoundingClientRect().top-12;Ju.value=Math.max(160,Math.round(e))}e===`daq`?Ku.value=!Ku.value:qu.value=!qu.value}let Xu=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of J.nodes){if(n.deviceBindingId===e)continue;let r=lu(n);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?k.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),Zu=m(()=>Object.values(Xu.value).reduce((e,t)=>e+t.length,0));function Qu(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Vu(e,t),Ku.value=!1)}let $u=new Map;function ed(e,t){let n=t;n?$u.set(e,n):$u.delete(e)}function td(){for(let[e,t]of $u){let n=yu.value.get(e),r=t.getContext(`2d`);if(!n||!r)continue;let i=t.width,a=t.height;r.clearRect(0,0,i,a);let o=n.hist;if(o.length<2)continue;let s=o[0],c=o[0];for(let e of o)e<s&&(s=e),e>c&&(c=e);let l=Math.max(1e-6,c-s);r.strokeStyle=Nf(e),r.lineWidth=1.4,r.beginPath(),o.forEach((e,t)=>{let n=t/(o.length-1)*(i-2)+1,c=a-2-(e-s)/l*(a-4);t?r.lineTo(n,c):r.moveTo(n,c)}),r.stroke()}}e(()=>J.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.state}:${e.deviceBindingId??``}`).join(`|`),()=>{P.value&&K(P.value)}),e(()=>Y.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.deviceBindingId??``}:${e.value??``}`).join(`|`),()=>{P.value&&K(P.value)}),e(()=>J.nodes.map(e=>`${e.id}:${e.deviceBindingId??``}`).join(`|`),()=>{let e=F.value;!e||!(`syncDaqLinks`in e)||e.syncDaqLinks(J.nodes.filter(e=>e.deviceBindingId).map(e=>({daqId:e.id,deviceId:e.deviceBindingId})))});let nd=m(()=>I.value?.kind===`device`&&(rd.value?.modelRef||``).startsWith(`daq-`)),rd=m(()=>I.value?.kind===`device`?Kl(I.value?.id)??null:null),id=m(()=>{let e=I.value?.id;return e?yu.value.get(e)??null:null}),ad=C(``),od=m(()=>{let e=I.value?.id;return e?Bu(e).map(e=>{let t=Kl(e),n=yu.value.get(e),r=n?.tpl??cu(t?.modelRef??``);return{daqId:e,name:t?.name??e,ch:r?.ch??t(`townView.k1ef3cls168`),icon:r?.icon??`gateway`,value:n?bu(n):`--`,unit:n?.tpl.unit??r?.unit??``,color:Nf(e)}}):[]}),sd=m(()=>{let e=I.value?.id;if(!e)return``;let t=zu(e);return t?k.twins.find(e=>e.id===t)?.name??t.slice(0,8):``}),cd=e=>e?Y.nodes.filter(t=>t.deviceBindingId===e):[];function ld(e){let t=Y.nodeById(e);if(!t||!t.lineId)return null;let n=Y.lineStateOf(t.lineId);if(!n.active||!n.recipeId)return null;let r=Y.recipes.find(e=>e.id===n.recipeId);return r?r.params.find(t=>t.nodeId===e)??null:null}let ud=m(()=>{let e=I.value?.id;return e?cd(e).map(e=>{let t=e.templateRef.startsWith(`dcw-`)?e.templateRef.slice(4):e.templateRef,n=Y.templates.find(e=>e.key===t),r=ld(e.id);return{dcwId:e.id,name:e.name,ch:n?.ch??t,unit:e.unit,icon:n?.icon??`gateway`,value:e.value,state:e.state,decimals:e.decimals,gMin:e.min,gMax:e.max,rMin:r?.min??null,rMax:r?.max??null}}):[]});function dd(e){let t=ld(e.id);return t&&(t.min!=null||t.max!=null)?{lo:t.min??-1/0,hi:t.max??1/0,src:`recipe`}:{lo:e.min,hi:e.max,src:`global`}}function fd(e){let t=e.rMin??e.gMin,n=e.rMax??e.gMax;return!Number.isFinite(t)||!Number.isFinite(n)||n<=t||e.value==null?50:Math.min(100,Math.max(0,(e.value-t)/(n-t)*100))}let pd=h({}),md=h({});function hd(e){let t=pd[e.id];if(t==null||t===``)return;let n=dd(e);if(Number(t)<n.lo||Number(t)>n.hi){md[e.id]=a(`townView.kbuyve5198`,{p0:n.src===`recipe`?a(`townView.kb251ac190`):a(`townView.k1iwj796179`),p1:Number.isFinite(n.lo)?n.lo:`-∞`,p2:Number.isFinite(n.hi)?n.hi:`+∞`});return}md[e.id]=``,Y.write(e.id,Number(t)).then(t=>{t.ok||(md[e.id]=t.message)}).catch(t=>{md[e.id]=L(t)})}let gd=e=>{let t=e.startsWith(`dcw-`)?e.slice(4):e;return Xl.find(e=>e.id===t)},_d=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of Y.nodes){if(n.deviceBindingId===e)continue;let r=gd(n.templateRef);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?k.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),vd=m(()=>Object.values(_d.value).reduce((e,t)=>e+t.length,0));function yd(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Y.bindNode(e,t).catch(e=>{R.value=L(e)}),qu.value=!1)}function bd(e){Y.bindNode(e,null).catch(e=>{R.value=L(e)})}let xd=m(()=>I.value?.kind===`device`&&(Kl(I.value?.id)?.modelRef??``).startsWith(`dcw-`)),Z=m(()=>{let e=I.value?.id;return e?Y.nodeById(e)??null:null}),Sd=m(()=>{let e=Z.value;return e?dd(e):null}),Cd=m(()=>{let e=Z.value;return e?.deviceBindingId?k.twins.find(t=>t.id===e.deviceBindingId)?.name??e.deviceBindingId.slice(0,8):``}),wd=C(``);function Td(){let e=Z.value;!e||!wd.value||(Y.bindNode(e.id,wd.value).catch(e=>{R.value=L(e)}),wd.value=``)}function Ed(){let e=Z.value;e&&Y.bindNode(e.id,null).catch(e=>{R.value=L(e)})}function Dd(){let e=Z.value;e&&hd(e)}function Od(e){if(!e)return`--`;let t=dd(e);return`${Number.isFinite(t.lo)?t.lo:`-∞`} ~ ${Number.isFinite(t.hi)?t.hi:`+∞`} ${e.unit}`}function kd(e){if(!e)return``;let t=dd(e);return`${Number.isFinite(t.lo)?t.lo:``} ~ ${Number.isFinite(t.hi)?t.hi:``}`}let Q=m(()=>{let e=I.value?.id;return e?J.nodeById(e)??null:null}),Ad=C(null);e(Q,e=>{Ad.value=e?e.intervalMs??J.controller.defaultIntervalMs:null},{immediate:!0});function jd(){let e=Q.value;!e||Ad.value==null||J.patchNode(e.id,{intervalMs:Math.max(120,Math.min(6e4,Math.round(Ad.value)))}).catch(e=>{R.value=L(e)})}function Md(e,t){let n=Number(t);Number.isFinite(n)&&J.patchNode(Q.value.id,{[e]:(e.startsWith(`warn`),n)}).catch(e=>{R.value=L(e)})}let Nd=C(!0);function Pd(e){let t=zu(e)??e,n=Kl(t);n&&(I.value={kind:`device`,id:t,scale:I.value?.scale??1,rotation:I.value?.rotation??0},tt.value=n.name)}let Fd=C(!1);function Id(){Fd.value=!Fd.value,F.value?.setAutoOrbit(Fd.value)}function Ld(){let e=F.value,t=I.value;if(e){if(!t){R.value=a(`townView.k15tn2fh169`);return}if(t.kind===`device`){let n=e.getDeviceNodes().find(e=>e.twinId===t.id);n&&e.focusTo(n.x,n.z)}else{let n=e.getAgent(t.id);n&&e.focusTo(n.root.position.x,n.root.position.z)}}}let Rd=C({}),zd=ln(`aw.twin.calloutNear`,1150),Bd=m(()=>{let e={};for(let t of X.value){let n=yu.value.get(t.id);if(!n)continue;let r={ch:n.tpl.ch,value:bu(n),unit:n.tpl.unit,alarm:n.alarm??!1};(e[t.id]??=[]).push(r);let i=zu(t.id);i&&(e[i]??=[]).push(r)}return e}),Vd=m(()=>{let e={};for(let t of Y.nodes){if(!t.deviceBindingId)continue;let n=t.templateRef.startsWith(`dcw-`)?t.templateRef.slice(4):t.templateRef,r=Y.templates.find(e=>e.key===n),i=dd(t);(e[t.deviceBindingId]??=[]).push({id:t.id,ch:r?.ch??n,name:t.name,unit:t.unit,value:t.value,readValue:t.readValue,lastReadAt:t.lastReadAt,decimals:t.decimals,lo:i.lo,hi:i.hi,src:i.src})}return e}),Hd=C({pos:{x:0,y:0,z:0},target:{x:0,z:0},yaw:0,dolly:1}),Ud=m(()=>{if(!Nd.value)return[];let e=F.value;if(!e)return[];let t=e.getDeviceNodes(),n=Jd.value?.clientWidth??1600,r=[];for(let e of X.value){let n=yu.value.get(e.id);if(!n)continue;let i=zu(e.id),a=i?t.find(e=>e.twinId===i):t.find(t=>t.twinId===e.id);if(!a)continue;let o=Rd.value[e.id];o&&r.push({t:e,st:n,anchor:a,pos:o})}let i=new Map(r.map(e=>[e.anchor.twinId,e.anchor.topY])),a=new Map;for(let e of r){let t=a.get(e.anchor.twinId)??[];t.push(e),a.set(e.anchor.twinId,t)}let o=[];for(let e of a.values()){e.sort((e,t)=>e.t.id<t.t.id?-1:1);let t=e[0],r=Math.hypot(Hd.value.pos.x-t.anchor.x,Hd.value.pos.y-(i.get(t.anchor.twinId)??60),Hd.value.pos.z-t.anchor.z)<zd.value,a=Math.min(n-96,Math.max(96,t.pos.x));e.forEach((e,n)=>{let{lo:i,hi:s}=bf(e.st.tpl.min,e.st.tpl.max);o.push({id:e.t.id,x:a,y:t.pos.y-n*Il,label:`${e.st.tpl.ch} · ${e.anchor.name||e.t.name}`,value:bu(e.st),unit:e.st.tpl.unit,lo:i,hi:s,warn:e.st.alarm??!1,near:r,leader:n===0})})}return o}),Wd=null,Gd=m(()=>k.twins.length),Kd=m(()=>k.twins.filter(e=>e.state===`running`).length),qd=le(),Jd=C(null),Yd=C(`std`);function Xd(e){Yd.value=e.target.value,F.value?.setViewPreset(Yd.value)}function Zd(){document.fullscreenElement?document.exitFullscreen():Jd.value?.requestFullscreen?.()}let Qd=m(()=>k.twins.filter(e=>e.state===`idle`).length),$d=m(()=>k.twins.filter(e=>e.state===`alarm`).length),ef=m(()=>k.twins.filter(e=>e.state===`offline`).length),tf=m(()=>{let e=k.twins.length;if(!e)return 100;let t=Kd.value+Qd.value;return Math.round(t/e*100)}),nf=m(()=>tf.value>=90?`#35e0a0`:tf.value>=60?`#f6c453`:`#ff6b6b`),rf=C(null);function af(){let e=rf.value;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let n=k.twins.length||1,r=[{n:Kd.value,color:`#35e0a0`},{n:Qd.value,color:`#f6c453`},{n:$d.value,color:`#ff6b6b`},{n:ef.value,color:`#3a4a63`}];t.clearRect(0,0,118,118),t.lineWidth=12;let i=-Math.PI/2;for(let e of r){if(!e.n)continue;let r=e.n/n*Math.PI*2;t.beginPath(),t.strokeStyle=e.color,t.arc(59,59,48,i,i+r),t.stroke(),i+=r}}e(tf,()=>af()),e(()=>k.twins.length,()=>af()),i(()=>af());let of=C([]),sf=0,cf=[a(`townView.k3ng94k170`),a(`townView.k3mi2n0171`),a(`townView.k3ncnxl172`)];function lf(e,t=`warn`,n=`SYSTEM`){let r=new Date,i=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,`0`)).join(`:`);of.value.unshift({id:++sf,txt:e,src:n,time:i,state:0,level:t}),of.value.length>30&&of.value.pop()}let uf=m(()=>of.value.filter(e=>e.state<2).length);function df(e){let t=of.value.find(t=>t.id===e);t&&(t.state=Math.min(2,t.state+1))}function ff(){of.value=of.value.map(e=>({...e,state:2}))}let pf=C(100),mf=ln(`aw.twin.fpsCap`,`60`),hf=[{v:`60`,label:`60`},{v:`120`,label:`120`},{v:`0`,label:`∞`}];function gf(e){mf.value=e,F.value?.setFpsCap(Number(e))}let _f=ln(`aw.twin.quality`,`auto`),vf=[{v:`auto`,label:`townView.qualityAuto`},{v:`normal`,label:`townView.qualityNormal`},{v:`hd`,label:`townView.qualityHD`},{v:`ultra`,label:`townView.qualityUltra`}];function yf(e){_f.value=e,F.value?.setQualityMode(e)}function bf(e,t){let n=pf.value/100,r=(e+t)/2;return{lo:r-(r-e)*n,hi:r+(t-r)*n}}let xf=C(!1);function Sf(){xf.value=!xf.value,lf(xf.value?a(`townView.kb157zk173`):a(`townView.k1s9qzr9174`),xf.value?`crit`:`info`,`SYSTEM`)}let Cf=C(1.12),wf=C(1);function Tf(e,t,n){return`${Math.min(100,Math.max(0,(e-t)/(n-t)*100)).toFixed(1)}%`}function Ef(e){Cf.value=Number(e.target.value)/100,F.value?.setExposure(Cf.value)}function Df(e){wf.value=Number(e.target.value)/100,F.value?.setTerritoryOpacity(wf.value)}function Of(){F.value?.resetView(),Cf.value=1.12,wf.value=1,F.value?.setExposure(1.12),F.value?.setTerritoryOpacity(1)}function kf(e){jf.value={...jf.value,[e]:!jf.value[e]}}let Af=C(null),jf=C({}),Mf=[`#35e0a0`,`#41c8f4`,`#f6c453`,`#a78bfa`,`#ff6b6b`,`#4dd0e1`],Nf=e=>Mf[Math.abs(e.split(``).reduce((e,t)=>e*31+t.charCodeAt(0),7))%Mf.length]??`#35e0a0`;function Pf(e,t){let n=jf.value[e];return n==null?(t??X.value.findIndex(t=>t.id===e))<Ll:!n}let Ff=C(!1),If=m(()=>Math.max(X.value.length-Ll,0)),Lf=m(()=>Ff.value?X.value:X.value.slice(0,Ll));function Rf(){let e=Af.value;if(!e)return;let t=Math.min(window.devicePixelRatio,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(i){i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r),i.strokeStyle=`rgba(29, 42, 66, 0.6)`,i.lineWidth=1;for(let e=1;e<4;e++){let t=r/4*e;i.beginPath(),i.moveTo(0,t),i.lineTo(n,t),i.stroke()}X.value.forEach((e,t)=>{if(!Pf(e.id,t))return;let a=yu.value.get(e.id);if(!a)return;let o=mu.get(e.id)??a.hist;if(o.length<2)return;let s=a.tpl.min,c=a.tpl.max;i.strokeStyle=Nf(e.id),i.lineWidth=1.6,i.beginPath(),o.forEach((e,t)=>{let a=t/119*n,o=r-(e-s)/(c-s)*(r-8)-4;t===0?i.moveTo(a,o):i.lineTo(a,o)}),i.stroke()})}}let zf=null,Bf=null,Vf=null,Hf=null,Uf=C(null),Wf=m(()=>Math.min(5,Math.max(.4,Hd.value.dolly))),$=null;function Gf(e){let t=e.clientWidth||220,n=e.clientHeight||148;return{s:t/(Rl*Wf.value),w:t,h:n}}function Kf(){let e=Uf.value,t=Wt.value,n=F.value;if(!e)return;let r=Math.min(window.devicePixelRatio||1,2),i=Gf(e);(e.width!==Math.round(i.w*r)||e.height!==Math.round(i.h*r))&&(e.width=Math.round(i.w*r),e.height=Math.round(i.h*r));let a=e.getContext(`2d`);if(!a)return;a.setTransform(r,0,0,r,0,0),a.fillStyle=`#060b13`,a.fillRect(0,0,i.w,i.h);let o=n?.getCameraPose(),s=o?o.target.x:jl/2,c=o?o.target.z:Ml/2,l=i.w/2/i.s,u=i.h/2/i.s,d=(e,t)=>({x:i.w/2+(e-s)*i.s,y:i.h/2+(t-c)*i.s}),f=(e,t,n=60)=>e>s-l-n&&e<s+l+n&&t>c-u-n&&t<c+u+n;a.fillStyle=`rgba(65,200,244,.10)`;for(let e=Math.floor((s-l)/250)*250;e<=s+l;e+=250)for(let t=Math.floor((c-u)/250)*250;t<=c+u;t+=250){let n=d(e,t);a.fillRect(n.x-1,n.y-1,1.6,1.6)}let p=d(0,0),m=d(jl,Ml);a.strokeStyle=`rgba(53,224,160,.35)`,a.lineWidth=1,a.strokeRect(p.x,p.y,m.x-p.x,m.y-p.y);for(let e of t?.blocks??[]){let t=e.x*jl,n=e.y*Ml;if(!f(t,n,400))continue;let r=d(t,n),o=Math.max(4,(e.rx??.03)*jl*i.s),s=Math.max(3,(e.rz??.03)*Ml*i.s);a.strokeStyle=Gt(e.color),a.globalAlpha=.6,a.lineWidth=1,a.beginPath(),a.ellipse(r.x,r.y,o,s,0,0,Math.PI*2),a.stroke(),a.globalAlpha=.08,a.fillStyle=Gt(e.color),a.fill(),a.globalAlpha=1}a.strokeStyle=`rgba(65,200,244,.28)`;let h=new Set(J.nodes.filter(e=>e.deviceBindingId).map(e=>e.id));for(let[e,n]of J.nodes.filter(e=>e.deviceBindingId).map(e=>[e.id,e.deviceBindingId])){let r=(t?.devices??[]).find(t=>t.twinId===e),i=(t?.devices??[]).find(e=>e.twinId===n);if(!r||!i)continue;let o=d(r.x*jl,r.y*Ml),s=d(i.x*jl,i.y*Ml);a.beginPath(),a.moveTo(o.x,o.y),a.lineTo(s.x,s.y),a.stroke()}let g=e=>e.x>=7&&e.x<=i.w-7&&e.y>=7&&e.y<=i.h-7?{...e,edge:!1}:{x:Math.min(i.w-7,Math.max(7,e.x)),y:Math.min(i.h-7,Math.max(7,e.y)),edge:!0};for(let e of t?.devices??[]){let t=g(d(e.x*jl,e.y*Ml));if(e.daq)a.globalAlpha=t.edge?.4:1,a.fillStyle=`#35e0a0`,a.beginPath(),a.arc(t.x,t.y,t.edge?1.8:2.4,0,7),a.fill(),!t.edge&&e.twinId&&h.has(e.twinId)&&(a.strokeStyle=`rgba(53,224,160,.5)`,a.beginPath(),a.arc(t.x,t.y,4.4,0,7),a.stroke());else{a.globalAlpha=t.edge?.4:1,a.fillStyle=Gt(e.color);let n=t.edge?3.6:5.2;a.fillRect(t.x-n/2,t.y-n/2,n,n)}a.globalAlpha=1}for(let e of t?.agents??[]){let t=g(d(e.x*jl,e.y*Ml));a.globalAlpha=t.edge?.35:1,a.fillStyle=Gt(e.color),a.beginPath(),a.arc(t.x,t.y,t.edge?1.6:2.2,0,7),a.fill(),a.globalAlpha=1}if(o){let e=Math.atan2(-Math.cos(o.yaw),-Math.sin(o.yaw)),t=Math.min(i.w,i.h)*.36;a.fillStyle=`rgba(65,200,244,.14)`,a.strokeStyle=`rgba(65,200,244,.5)`,a.lineWidth=1,a.beginPath(),a.moveTo(i.w/2,i.h/2),a.arc(i.w/2,i.h/2,t,e-.4,e+.4),a.closePath(),a.fill(),a.stroke();let n=d(o.pos.x,o.pos.z);n.x>4&&n.x<i.w-4&&n.y>4&&n.y<i.h-4&&(a.fillStyle=`rgba(255,255,255,.85)`,a.beginPath(),a.arc(n.x,n.y,2.4,0,7),a.fill())}a.fillStyle=`#fff`,a.beginPath(),a.arc(i.w/2,i.h/2,3,0,7),a.fill(),a.strokeStyle=`rgba(255,255,255,.4)`,a.beginPath(),a.arc(i.w/2,i.h/2,5.5,0,7),a.stroke()}function qf(e){F.value?.zoomBy(e.deltaY>0?.14:-.12)}function Jf(e){$={lx:e.clientX,ly:e.clientY,moved:!1};try{e.target.setPointerCapture?.(e.pointerId)}catch{}}function Yf(e){let t=Uf.value,n=F.value;if(!$||!t||!n)return;let r=Gf(t),i=e.clientX-$.lx,a=e.clientY-$.ly;Math.abs(i)+Math.abs(a)>3&&($.moved=!0);let o=i/r.s,s=a/r.s;$.lx=e.clientX,$.ly=e.clientY,n.panWorldBy(o,s)}function Xf(e){let t=Uf.value,n=F.value;if($&&!$.moved&&t&&n){let r=t.getBoundingClientRect(),i=Gf(t),a=n.getCameraPose(),o=a.target.x+(e.clientX-r.left-r.width/2)/i.s,s=a.target.z+(e.clientY-r.top-r.height/2)/i.s;n.focusTo(o,s)}$=null}function Zf(){let e=P.value;e?.getMinimapState&&(Wt.value=e.getMinimapState()),Kf();let t=F.value;if(t&&(Hd.value=t.getCameraPose(),Nd.value)){let e=t.getDeviceNodes(),n=Jd.value?.getBoundingClientRect(),r={};for(let i of X.value){let a=zu(i.id),o=a?e.find(e=>e.twinId===a):e.find(e=>e.twinId===i.id);if(!o)continue;let s=t.worldToScreen(o.x,(o.topY??92)+26,o.z);s&&n&&(r[i.id]={x:s.x-n.left,y:s.y-n.top})}Rd.value=r}}function Qf(){if(document.hidden){zf&&=(clearInterval(zf),null),Hf&&=(clearInterval(Hf),null),Bf&&=(clearInterval(Bf),null);return}zf||=M(Zf,150),Hf||=M(()=>{J.nodes.length&&(Rf(),td())},200),Bf||=M(()=>{let e=P.value;e?.getRecentActivity&&(Yl.value=e.getRecentActivity())},400)}return i(()=>{window.addEventListener(`keydown`,Re),document.addEventListener(`visibilitychange`,Qf),J.ensureWsFeed(),J.load(),hu=Te().subscribe(e=>{e.type===`daq.reading`&&vu(e.payload)}),Y.ensureWsFeed(),Y.load(),zf=M(Zf,150),Hf=M(()=>{J.nodes.length&&(Rf(),td())},200),Bf=M(()=>{let e=P.value;e?.getRecentActivity&&(Yl.value=e.getRecentActivity())},400)}),r(()=>{window.removeEventListener(`keydown`,Re);for(let e of kt)try{e()}catch{}kt.length=0,document.removeEventListener(`visibilitychange`,Qf),zf&&clearInterval(zf),Hf&&clearInterval(Hf),Bf&&clearInterval(Bf),Vf&&clearInterval(Vf),Wd&&clearInterval(Wd),zf=null,Hf=null,Bf=null,Vf=null,Wd=null}),i(()=>{wt();let e=G();e.length>0&&P.value&&P.value.rebuild(e)}),r(()=>{hu?.();let e=P._off;e?.(),F.value?.dispose(),F.value=null,me.value?.destroy(!0),me.value=null,P.value=null}),(e,t)=>{let r=nt,i=Nt;return s(),v(`div`,un,[g(`header`,dn,[g(`div`,fn,[t[52]||=ne(`<svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-5660e131><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-5660e131></path><path d="M16 8.2 22.5 12v8L16 23.8 9.5 20v-8L16 8.2Z" stroke="#41c8f4" stroke-width="1.3" opacity=".85" data-v-5660e131></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-5660e131></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-5660e131></circle></svg>`,1),g(`div`,null,[t[51]||=g(`div`,{class:`brand-name`},[O(` DIGITAL `),g(`em`,null,`TWIN`)],-1),g(`div`,pn,` AGENTWORKSHOP · `+o(e.$t(`townView.klyi8yg127`)),1)])]),g(`nav`,{class:`nav-tabs`,"aria-label":e.$t(`townView.k1c9jyta001`)},[g(`div`,hn,[g(`button`,{class:c({on:D(z)===`browse`}),onClick:t[0]||=e=>D(z)===`edit`&&Fe()},o(e.$t(`townView.k48dwh027`)),3),g(`button`,{class:c({on:D(z)===`edit`}),onClick:t[1]||=e=>D(z)===`browse`&&Fe()},o(e.$t(`townView.k45eb0028`)),3)]),g(`button`,{class:`nav-action`,disabled:D(z)!==`edit`,title:D(z)===`edit`?`把全部设备的位置/朝向/缩放写入数据库`:`运行模式只读`,onClick:He},o(e.$t(`townView.k1b3bk8t029`)),9,gn),D(B)&&D(B).state!==`idle`?(s(),v(`span`,{key:0,class:c([`save-chip`,`s-${D(B).state}`])},o(D(Pe)),3)):x(``,!0)],8,mn),g(`div`,_n,[g(`span`,{class:c([`nav-chip mono`,{"nav-bell-warn":D(uf)>0}]),title:e.$t(`townView.k1fsi3ir002`)},`◉ `+o(D(uf)),11,vn),g(`span`,yn,o(D(ve))+` FPS`,1),g(`div`,{class:`avatar-chip`,title:e.$t(`townView.k1demf38003`)},[g(`div`,xn,o((D(qd).user?.name??`OP`).slice(0,2).toUpperCase()),1),g(`span`,null,o(D(qd).user?.name||e.$t(`townView.k1pub99m139`)),1)],8,bn)])]),g(`div`,Sn,[g(`aside`,Cn,[g(`section`,wn,[g(`div`,Tn,[g(`h3`,null,o(e.$t(`townView.k1k75lzy030`)),1),g(`span`,En,o(D(et).length),1)]),f(r,{class:`lib-embed`})]),g(`section`,Dn,[g(`div`,On,[g(`h3`,null,o(e.$t(`townView.k2gwyas031`)),1),g(`span`,kn,o(D(X).length),1)]),g(`div`,An,[g(`button`,{class:c([`daq-ctl-btn`,{on:D(J).controller.running}]),title:D(J).controller.running?`暂停全部采集:停止所有启用节点的采样(节点级启停独立)`:`恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)`,onClick:t[2]||=e=>D(J).controllerAction(D(J).controller.running?`pause`:`resume`)},o(D(J).controller.running?e.$t(`townView.k3w3j8f140`):e.$t(`townView.k3n93ed175`)),11,jn),g(`label`,{class:`daq-ctl-cycle mono`,title:e.$t(`townView.khzlyf5004`)},[O(o(e.$t(`townView.k3xg3w032`))+` `,1),g(`input`,{type:`number`,min:`200`,max:`60000`,step:`100`,value:D(J).controller.defaultIntervalMs,onChange:t[3]||=e=>D(J).controllerAction(`config`,Number(e.target.value))},null,40,Nn),t[53]||=O(`ms `,-1)],8,Mn)]),g(`div`,Pn,[(s(!0),v(b,null,l(D(su),n=>(s(),v(`div`,{key:n.id,class:`daq-group`},[g(`div`,{class:c([`daq-card tpl`,{open:!!D(Zl)[`daq:${n.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:n.name,p1:n.ch,p2:n.min,p3:n.max,p4:n.unit}),onClick:e=>Ql(`daq:${n.id}`),onKeydown:re(ie(e=>Ql(`daq:${n.id}`),[`prevent`]),[`enter`])},[t[54]||=g(`span`,{class:`daq-caret`},`▶`,-1),g(`span`,In,[(s(),v(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(n.icon)},null,8,Ln))]),g(`div`,Rn,[g(`span`,zn,o(n.name),1),g(`span`,Bn,o(n.code),1)]),D(z)===`edit`?(s(),v(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:n.name}),onClick:ie(e=>tu(n),[`stop`])},` + `,8,Vn)):x(``,!0),g(`span`,Hn,`×`+o(D($l).get(n.id)?.length??0),1)],42,Fn),D(Zl)[`daq:${n.id}`]?(s(),v(`div`,Un,[(s(!0),v(b,null,l(D($l).get(n.id)??[],t=>(s(),v(`div`,{key:t.id,class:c([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:D(z)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>ru(e,t),onClick:e=>typeof t.posX==`number`&&Rt({id:t.id,posX:t.posX,posZ:t.posZ})},[g(`span`,{class:c([`node-dot`,au(t)])},null,2),g(`div`,Gn,[g(`span`,Kn,o(t.name),1),g(`span`,qn,[g(`span`,Jn,o(t.value==null?`--`:`${t.value.toFixed(n.decimals)} ${n.unit}`),1),g(`span`,Yn,o(t.deviceBindingId?D(k).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(s(),v(`span`,Xn,`✓`)):x(``,!0)],42,Wn))),128)),D($l).get(n.id)?.length?x(``,!0):(s(),v(`div`,Zn,o(e.$t(`townView.k2tplxp0003`)),1))])):x(``,!0)]))),128))])]),g(`section`,Qn,[g(`div`,$n,[g(`h3`,null,o(e.$t(`townView.km7ayhi033`)),1),g(`span`,er,o(D(Y).nodes.length),1)]),g(`div`,tr,[(s(!0),v(b,null,l(D(Xl),n=>(s(),v(`div`,{key:n.id,class:`daq-group`},[g(`div`,{class:c([`daq-card tpl`,{open:!!D(Zl)[`dcw:${n.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:n.name,p1:n.ch,p2:n.min,p3:n.max,p4:n.unit}),onClick:e=>Ql(`dcw:${n.id}`),onKeydown:re(ie(e=>Ql(`dcw:${n.id}`),[`prevent`]),[`enter`])},[t[55]||=g(`span`,{class:`daq-caret`},`▶`,-1),g(`span`,rr,[(s(),v(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(n.icon)},null,8,ir))]),g(`div`,ar,[g(`span`,or,o(n.name),1),g(`span`,sr,o(n.code),1)]),D(z)===`edit`?(s(),v(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:n.name}),onClick:ie(e=>nu(n),[`stop`])},` + `,8,cr)):x(``,!0),g(`span`,lr,`×`+o(D(eu).get(n.id)?.length??0),1)],42,nr),D(Zl)[`dcw:${n.id}`]?(s(),v(`div`,ur,[(s(!0),v(b,null,l(D(eu).get(n.id)??[],t=>(s(),v(`div`,{key:t.id,class:c([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:D(z)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>iu(e,t),onClick:e=>typeof t.posX==`number`&&Rt({id:t.id,posX:t.posX,posZ:t.posZ})},[g(`span`,{class:c([`node-dot`,ou(t)])},null,2),g(`div`,fr,[g(`span`,pr,o(t.name),1),g(`span`,mr,[g(`span`,hr,o(t.value==null?`--`:`${t.value.toFixed(n.decimals)} ${n.unit}`),1),g(`span`,gr,o(t.deviceBindingId?D(k).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(s(),v(`span`,_r,`✓`)):x(``,!0)],42,dr))),128)),D(eu).get(n.id)?.length?x(``,!0):(s(),v(`div`,vr,o(e.$t(`townView.k2tplxp0003`)),1))])):x(``,!0)]))),128))])]),g(`section`,yr,[g(`div`,br,[g(`h3`,null,o(e.$t(`townView.k1c9n911034`)),1),g(`span`,xr,o(D(vt).length),1)]),g(`div`,Sr,[(s(!0),v(b,null,l(D(vt),t=>(s(),v(`div`,{key:t.channelId,class:c([`scene-row`,{active:t.placed}]),draggable:!t.placed&&D(z)===`edit`,"data-channel-id":t.channelId,title:t.placed?`已在场景中,点击定位`:`拖拽到场景放置`,onDragstart:e=>t.placed?void 0:St(e,t.channelId),onClick:e=>Ze(t)},[g(`span`,{class:`scene-ico`,style:n({"--ch":t.color})},null,4),g(`div`,wr,[g(`span`,Tr,o(t.name),1),g(`span`,Er,o(t.agentCount)+` `+o(e.$t(`townView.k1brss7t128`))+` `+o(t.placed?e.$t(`townView.k3n94g3141`):e.$t(`townView.k3os7i3176`)),1)]),t.placed?(s(),v(`span`,Dr,`✓`)):(s(),v(`span`,Or,`+`))],42,Cr))),128)),D(Xe)?(s(),v(`div`,kr,o(D(Xe)),1)):x(``,!0)])])]),g(`main`,Ar,[g(`div`,{ref_key:`stageRef`,ref:Jd,class:`stage`},[g(`div`,{id:`town-host`,ref_key:`hostRef`,ref:pe,class:`town-host`},null,512),t[71]||=g(`div`,{class:`stage-vignette`},null,-1),g(`div`,jr,[g(`div`,Mr,[g(`h2`,null,o(e.$t(`townView.k1b0z4vr035`)),1),g(`span`,Nr,`CH · `+o(D(je)||e.$t(`townView.k3lkuz3142`)),1)]),g(`div`,Pr,[g(`button`,{class:`vp-tool`,title:e.$t(`townView.k18d6wnb005`),onClick:Ld},[...t[56]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`circle`,{cx:`12`,cy:`12`,r:`7`}),g(`path`,{d:`M12 2v4M12 18v4M2 12h4M18 12h4`})],-1)]],8,Fr),g(`button`,{class:c([`vp-tool`,{on:D(Fd)}]),title:e.$t(`townView.k1io51dn006`),onClick:Id},[...t[57]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`circle`,{cx:`12`,cy:`12`,r:`3.2`}),g(`path`,{d:`M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5`})],-1)]],10,Ir),g(`button`,{class:c([`vp-tool`,{on:D(Nd)}]),title:e.$t(`townView.k1sgjlq8007`),onClick:t[4]||=e=>Nd.value=!D(Nd)},[...t[58]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M4 8h12l4 4-4 4H4z`}),g(`circle`,{cx:`8.5`,cy:`12`,r:`1.4`})],-1)]],10,Lr),g(`button`,{class:`vp-tool`,title:e.$t(`townView.k3wuf0008`),onClick:Zd},[...t[59]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})],-1)]],8,Rr)])]),g(`div`,zr,[g(`select`,{value:D(Yd),"aria-label":e.$t(`townView.k1k4j5i7009`),onChange:t[5]||=e=>Xd(e)},[g(`option`,Vr,o(e.$t(`townView.kv72860036`)),1),t[60]||=g(`option`,{value:`top`},` 俯视 · TOP `,-1),t[61]||=g(`option`,{value:`front`},` 前视 · FRONT `,-1),t[62]||=g(`option`,{value:`side`},` 侧视 · SIDE `,-1)],40,Br)]),D(Nd)?(s(),v(b,{key:0},[(s(),v(`svg`,Hr,[(s(!0),v(b,null,l(D(Ud),e=>S((s(),v(`g`,{key:`ld-${e.id}`,class:c({near:e.near})},[g(`path`,{d:`M ${e.x} ${e.y-8} L ${e.x} ${e.y-2}`,stroke:e.warn?`rgba(246,196,83,.8)`:`rgba(65,200,244,.55)`,"stroke-width":`1.3`,fill:`none`},null,8,Ur),g(`circle`,{cx:e.x,cy:e.y,r:`2.6`,fill:e.warn?`#f6c453`:`#41c8f4`},null,8,Wr)],2)),[[oe,e.leader]])),128))])),g(`div`,Gr,[(s(!0),v(b,null,l(D(Ud),r=>(s(),v(`div`,{key:r.id,class:c([`callout`,{warn:r.warn,near:r.near}]),style:n({left:r.x+`px`,top:r.y+`px`}),title:e.$t(`townView.k1ejxiwp010`),onClick:e=>Pd(r.id)},[g(`div`,qr,[t[63]||=g(`span`,{class:`co-dot`},null,-1),O(o(r.label),1)]),g(`div`,Jr,[O(o(r.value),1),g(`small`,null,o(r.unit),1)]),g(`div`,Yr,o(e.$t(`townView.k1faqmjb073`))+` `+o(r.lo.toFixed(Math.min(2,(String(r.lo).split(`.`)[1]??``).length+1)))+` – `+o(r.hi.toFixed(Math.min(2,(String(r.hi).split(`.`)[1]??``).length+1))),1)],14,Kr))),128))])],64)):x(``,!0),g(`div`,Xr,[g(`div`,Zr,[t[64]||=g(`span`,{class:`kpi-ico c1`},[g(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z`}),g(`path`,{d:`M4 8.5l8 4.5 8-4.5M12 13v7`})])],-1),g(`div`,Qr,[g(`div`,$r,o(e.$t(`townView.k1k6xemt037`)),1),g(`div`,ei,[O(o(D(Gd)),1),g(`small`,null,o(e.$t(`townView.k49lh038`)),1)])])]),g(`div`,ti,[t[65]||=g(`span`,{class:`kpi-ico c2`},[g(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`m5 12.5 4.5 4.5L19 7.5`})])],-1),g(`div`,ni,[g(`div`,ri,o(e.$t(`townView.k1l1a9t2039`)),1),g(`div`,ii,[O(o(D(Kd)),1),g(`small`,null,o(e.$t(`townView.k49lh038`)),1)])])]),g(`div`,ai,[t[66]||=g(`span`,{class:`kpi-ico c3`},[g(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M12 3 22 20H2L12 3Z`}),g(`path`,{d:`M12 10v4M12 17v.2`})])],-1),g(`div`,oi,[g(`div`,si,o(e.$t(`townView.k1fsi3ir002`)),1),g(`div`,ci,[O(o(D(uf)),1),g(`small`,null,o(e.$t(`townView.k4dfq040`)),1)])])]),g(`div`,li,[t[67]||=ne(`<span class="kpi-ico c4" data-v-5660e131><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5660e131><path d="M9.5 14.5 14.5 9.5" data-v-5660e131></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-5660e131></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-5660e131></path></svg></span>`,1),g(`div`,ui,[g(`div`,di,o(e.$t(`townView.k1emsai1041`)),1),g(`div`,fi,[O(o(D(X).length),1),g(`small`,null,o(e.$t(`townView.k4l1w042`)),1)])])]),g(`div`,pi,[t[69]||=ne(`<span class="kpi-ico c5" data-v-5660e131><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5660e131><path d="M5 19a9 9 0 1 1 14 0" data-v-5660e131></path><path d="M12 13l3.5-3.5" data-v-5660e131></path><circle cx="12" cy="13" r="1.4" data-v-5660e131></circle></svg></span>`,1),g(`div`,mi,[g(`div`,hi,o(e.$t(`townView.kbrxdq1043`)),1),g(`div`,gi,[O(o(D(tf)),1),t[68]||=g(`small`,null,`%`,-1)])])])]),D(ql)?(s(),v(`div`,_i,[g(`b`,null,o(e.$t(`townView.k3rwxjc044`)),1),g(`span`,null,o(e.$t(`townView.k1sa1eaj045`)),1)])):x(``,!0),D(V)&&D(H)?(s(),v(`div`,{key:2,class:`boundary-panel drag-panel`,style:n(D(zt).boundary?{left:D(zt).boundary.x+`px`,top:D(zt).boundary.y+`px`,bottom:`auto`,transform:`none`}:void 0)},[g(`div`,{class:`bp-title drag-grip`,title:e.$t(`townView.k1d0rl5z011`),onPointerdown:t[8]||=e=>Ut(e,`boundary`)},[g(`span`,yi,o(D(d).channels[D(V)]?.name??D(V).slice(0,8)),1),g(`span`,bi,o(e.$t(`townView.k1mehlxs046`)),1),g(`div`,xi,[g(`button`,{class:c([`bp-tab`,{on:D(pt)===`boundary`}]),onClick:t[6]||=e=>gt(`boundary`)},o(e.$t(`townView.k489ka047`)),3),g(`button`,{class:c([`bp-tab`,{on:D(pt)===`members`}]),onClick:t[7]||=e=>gt(`members`)},o(e.$t(`townView.k3ztf1129`))+` `+o(D(mt).length),3)])],40,vi),D(pt)===`boundary`?(s(),v(b,{key:0},[g(`div`,Si,[g(`span`,Ci,o(e.$t(`townView.k3zhy5048`)),1),g(`div`,wi,[g(`button`,{class:c([`seg-btn`,{on:D(H).shape===`ellipse`}]),onClick:t[9]||=e=>{D(H).shape=`ellipse`,Ye()}},o(e.$t(`townView.k414bc049`)),3),g(`button`,{class:c([`seg-btn`,{on:D(H).shape===`rect`}]),onClick:t[10]||=e=>{D(H).shape=`rect`,Ye()}},o(e.$t(`townView.k43u0g050`)),3)])]),g(`div`,Ti,[g(`span`,Ei,o(e.$t(`townView.k1fbz4s1051`)),1),S(g(`input`,{"onUpdate:modelValue":t[11]||=e=>D(H).radiusX=e,class:`bp-range`,type:`range`,min:`80`,max:`4000`,step:`8`,style:n({"--fill":Tf(D(H).radiusX,80,4e3)}),onChange:Ye},null,36),[[j,D(H).radiusX,void 0,{number:!0}]]),g(`span`,Di,o(Math.round(D(H).radiusX)),1)]),g(`div`,Oi,[g(`span`,ki,o(e.$t(`townView.k1ighwgs052`)),1),S(g(`input`,{"onUpdate:modelValue":t[12]||=e=>D(H).radiusZ=e,class:`bp-range`,type:`range`,min:`60`,max:`4000`,step:`8`,style:n({"--fill":Tf(D(H).radiusZ,60,4e3)}),onChange:Ye},null,36),[[j,D(H).radiusZ,void 0,{number:!0}]]),g(`span`,Ai,o(Math.round(D(H).radiusZ)),1)]),g(`div`,ji,[g(`span`,Mi,o(e.$t(`townView.k40qab053`)),1),S(g(`input`,{"onUpdate:modelValue":t[13]||=e=>D(H).rotationY=e,class:`bp-range`,type:`range`,min:`0`,max:`360`,step:`5`,style:n({"--fill":Tf(D(H).rotationY??0,0,360)}),onChange:Ye},null,36),[[j,D(H).rotationY,void 0,{number:!0}]]),g(`span`,Ni,o(Math.round(D(H).rotationY??0))+`°`,1)])],64)):(s(),v(b,{key:1},[g(`div`,Pi,o(e.$t(`townView.kimxls2054`)),1),g(`div`,Fi,[(s(!0),v(b,null,l(D(mt),e=>(s(),v(`div`,{key:e.agentId,class:`member-row`},[g(`span`,{class:`member-ava`,style:n({color:xt(D(V))})},o(e.name.charAt(0).toUpperCase()),5),g(`div`,Ii,[g(`span`,Li,o(e.name),1),g(`span`,{class:c([`member-role`,e.role===`lead`?`r-lead`:`r-worker`])},o(e.role===`lead`?`Leader`:`Worker`),3)]),g(`select`,{class:`member-select`,value:(e.modelRef??``)||`hero-3d`,onChange:t=>ht(e.agentId,t.target.value)},[(s(!0),v(b,null,l(D($e),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,zi))),128))],40,Ri)]))),128)),D(mt).length===0?(s(),v(`div`,Bi,o(e.$t(`townView.k419rbs055`)),1)):x(``,!0)])],64)),g(`div`,Vi,[D(pt)===`boundary`?(s(),v(`button`,{key:0,class:`bp-btn save`,onClick:qe},o(e.$t(`townView.k1b3kp8f056`)),1)):x(``,!0),g(`button`,{class:`bp-btn danger`,onClick:Je},o(e.$t(`townView.k1hs45qg057`)),1),g(`button`,{class:`bp-btn`,onClick:t[14]||=e=>Ke(null)},o(e.$t(`townView.k3x62t058`)),1)])],4)):x(``,!0),D(qt)?(s(),v(`div`,Hi,o(D(qt)),1)):x(``,!0),D(R)?(s(),v(`div`,Ui,o(D(R)),1)):x(``,!0),D(ge)?x(``,!0):(s(),v(`div`,Wi,[t[70]||=g(`div`,{class:`loading-spinner`},null,-1),g(`span`,Gi,o(e.$t(`townView.kvjdqfg059`)),1)]))],512),g(`div`,Ki,[g(`section`,qi,[g(`div`,Ji,[g(`h3`,null,o(e.$t(`townView.k1c9iq23060`)),1),g(`span`,Yi,o(D(z)===`edit`?e.$t(`townView.k1iipfcs143`):e.$t(`townView.k1l147w1177`)),1)]),g(`p`,Xi,o(e.$t(`townView.secRender`)),1),g(`div`,Zi,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.qualityTip`)},o(e.$t(`townView.qualityLabel`)),9,Qi),g(`div`,$i,[(s(),v(b,null,l(vf,t=>g(`button`,{key:t.v,class:c({on:D(_f)===t.v}),onClick:e=>yf(t.v)},o(e.$t(t.label)),11,ea)),64))]),t[72]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`div`,ta,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.fpsCapTip`)},o(e.$t(`townView.fpsCapLabel`)),9,na),g(`div`,ra,[(s(),v(b,null,l(hf,e=>g(`button`,{key:e.v,class:c({on:D(mf)===e.v}),onClick:t=>gf(e.v)},o(e.label),11,ia)),64))]),t[73]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`p`,aa,o(e.$t(`townView.secEnv`)),1),g(`div`,oa,[g(`span`,sa,o(e.$t(`townView.k1gizopz061`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`30`,max:`220`,value:Math.round(D(Cf)*100),style:n({"--fill":Tf(Math.round(D(Cf)*100),30,220)}),onInput:t[15]||=e=>Ef(e)},null,44,ca),g(`span`,la,o(Math.round(D(Cf)*100))+`%`,1)]),g(`div`,ua,[g(`span`,da,o(e.$t(`townView.k1bcpqto062`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`10`,max:`100`,value:Math.round(D(wf)*100),style:n({"--fill":Tf(Math.round(D(wf)*100),10,100)}),onInput:t[16]||=e=>Df(e)},null,44,fa),g(`span`,pa,o(Math.round(D(wf)*100))+`%`,1)]),g(`div`,ma,[g(`span`,ha,o(e.$t(`townView.k1bztha1063`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`60`,max:`120`,value:D(pf),style:n({"--fill":Tf(D(pf),60,120)}),onInput:t[17]||=e=>pf.value=Number(e.target.value)},null,44,ga),g(`span`,_a,o(D(pf))+`%`,1)]),g(`div`,va,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.kz71l1f012`)},o(e.$t(`townView.ka4i1s9064`)),9,ya),g(`input`,{class:`ctl-range`,type:`range`,min:`0`,max:`3000`,step:`50`,value:D(zd),style:n({"--fill":Tf(D(zd),0,3e3)}),onInput:t[18]||=e=>zd.value=Number(e.target.value)},null,44,ba),g(`span`,xa,o(D(zd)===0?e.$t(`townView.k493s144`):`${D(zd)}`),1)]),g(`p`,Sa,o(e.$t(`townView.secOps`)),1),g(`div`,Ca,[g(`span`,wa,o(e.$t(`townView.k1idc6pa065`)),1),g(`button`,{class:c([`snap-toggle`,{on:D(Ne)}]),onClick:ze},o(D(Ne)?e.$t(`townView.k4bs5145`):e.$t(`townView.k493s144`)),3),t[74]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`div`,Ta,[g(`button`,{class:`btn btn-primary`,onClick:Of},o(e.$t(`townView.k1lap9bs024`)),1),g(`button`,{class:`btn btn-ghost`,disabled:D(z)!==`edit`,title:D(z)===`edit`?e.$t(`townView.ksavetip181`):e.$t(`townView.krotip182`),onClick:He},o(e.$t(`townView.k1b3bk8t029`)),9,Ea),g(`button`,{class:c([`btn btn-danger`,{armed:D(xf)}]),onClick:Sf},o(e.$t(`townView.k1i046wf066`)),3)])]),g(`section`,Da,[g(`div`,Oa,[g(`h3`,null,o(e.$t(`townView.k1kfoef9067`)),1),g(`span`,ka,o(D(X).length),1),g(`div`,{class:c([`trend-legend`,{expanded:D(Ff)}])},[(s(!0),v(b,null,l(D(Lf),e=>(s(),v(`button`,{key:e.id,class:c([`lg-chip`,{off:!Pf(e.id)}]),onClick:t=>kf(e.id)},[g(`span`,{class:`lg-dot`,style:n({background:Nf(e.id)})},null,4),O(o(e.name),1)],10,Aa))),128)),D(If)>0?(s(),v(`button`,{key:0,class:`lg-chip lg-more mono`,title:D(Ff)?e.$t(`townView.trendCollapse`):e.$t(`townView.trendExpandAll`,{p0:D(X).length}),onClick:t[19]||=e=>Ff.value=!D(Ff)},o(D(Ff)?e.$t(`townView.trendCollapse`):`+${D(If)}`),9,ja)):x(``,!0)],2)]),g(`div`,Ma,[g(`canvas`,{ref_key:`trendCanvas`,ref:Af,class:`trend-cv`},null,512),D(X).length?x(``,!0):(s(),v(`span`,Na,o(e.$t(`townView.k1uht2uv068`)),1))])])])]),g(`aside`,Pa,[f(ae,{name:`ins`},{default:T(()=>[D(I)?(s(),v(`section`,Fa,[g(`div`,Ia,[g(`h3`,null,o(D(I).kind===`device`?D(xd)?e.$t(`townView.k1ekqxlt146`):D(nd)?e.$t(`townView.k1empnnb178`):e.$t(`townView.k1k6wg8j185`):D(Zt)),1),g(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bsckft013`),onClick:Ge},` ✕ `,8,La)]),g(`div`,Ra,[g(`span`,za,o(D(I).id.slice(0,8)),1),D(I).kind===`device`&&D(nd)?(s(),v(`span`,Ba,`DAQ`)):D(I).kind===`device`&&D(xd)?(s(),v(`span`,Va,`DCW`)):x(``,!0)]),D(I).kind===`device`?(s(),v(b,{key:0},[D(xd)?(s(),v(`div`,Ha,[g(`div`,Ua,[g(`span`,null,o(e.$t(`townView.k1deqh0d069`)),1),g(`b`,Wa,o(D(Z)?.value==null?`--`:D(Z).value.toFixed(D(Z).decimals))+` `+o(D(Z)?.unit),1)]),g(`div`,Ga,[g(`span`,null,o(D(Sd)?.src===`recipe`?e.$t(`townView.kq2jssk147`):e.$t(`townView.k1iwj796179`)),1),g(`b`,{class:c({amber:D(Sd)?.src===`recipe`})},o(Od(D(Z))),3)]),g(`div`,Ka,[g(`span`,null,o(e.$t(`townView.k1i8rtqt070`)),1),g(`b`,null,o(D(Cd)||e.$t(`townView.k3own4q148`)),1)]),g(`div`,qa,[S(g(`input`,{"onUpdate:modelValue":t[20]||=e=>D(pd)[D(I).id]=e,type:`number`,class:`bind-select`,step:10**-(D(Z)?.decimals??2),placeholder:kd(D(Z)),onKeydown:re(Dd,[`enter`])},null,40,Ja),[[j,D(pd)[D(I).id],void 0,{number:!0}]]),g(`button`,{class:`bind-add-btn`,disabled:D(pd)[D(I).id]==null||D(pd)[D(I).id]===``,onClick:Dd},o(e.$t(`townView.kwrbtn180`)),9,Ya)]),D(md)[D(I).id]?(s(),v(`p`,Xa,o(D(md)[D(I).id]),1)):x(``,!0),D(z)===`edit`?(s(),v(`div`,Za,[S(g(`select`,{"onUpdate:modelValue":t[21]||=e=>p(wd)?wd.value=e:null,class:`bind-select`},[g(`option`,Qa,o(e.$t(`townView.kjo6ekr071`)),1),(s(!0),v(b,null,l(D(k).twins.filter(e=>!du(e)&&e.id!==(D(I)?.id??``)),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,$a))),128))],512),[[A,D(wd)]]),g(`button`,{class:`bind-add-btn`,disabled:!D(Cd)&&!D(wd),onClick:t[22]||=e=>D(Cd)?Ed():Td()},o(D(Cd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,eo)])):x(``,!0)])):D(nd)?(s(),v(`div`,to,[g(`div`,no,[g(`span`,null,o(e.$t(`townView.k3mv305072`)),1),g(`b`,ro,o(D(id)?bu(D(id)):`--`)+` `+o(D(id)?.tpl.unit),1)]),g(`div`,io,[g(`span`,null,o(e.$t(`townView.k1faqmjb073`)),1),g(`b`,null,o(D(id)?.tpl.min)+` ~ `+o(D(id)?.tpl.max),1)]),g(`div`,ao,[g(`span`,null,o(e.$t(`townView.k1i8rtqt070`)),1),g(`b`,null,o(D(sd)||e.$t(`townView.k3own4q148`)),1)]),D(z)===`edit`?(s(),v(`div`,oo,[S(g(`select`,{"onUpdate:modelValue":t[23]||=e=>p(ad)?ad.value=e:null,class:`bind-select`},[g(`option`,so,o(e.$t(`townView.kjo6ekr071`)),1),(s(!0),v(b,null,l(D(k).twins.filter(e=>!du(e)&&e.id!==(D(I)?.id??``)),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,co))),128))],512),[[A,D(ad)]]),g(`button`,{class:`bind-add-btn`,disabled:!D(sd)&&!D(ad),onClick:t[24]||=e=>{D(sd)?Hu(D(I).id):Vu(D(I).id,D(ad)),ad.value=``}},o(D(sd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,lo)])):x(``,!0),D(z)===`edit`&&D(Q)?(s(),v(`div`,uo,[g(`div`,fo,[g(`span`,null,o(e.$t(`townView.k1l6g2ga074`)),1),g(`span`,po,[S(g(`input`,{"onUpdate:modelValue":t[25]||=e=>p(Ad)?Ad.value=e:null,type:`number`,min:`200`,max:`60000`,step:`100`,class:`daq-num`,onChange:jd},null,544),[[j,D(Ad),void 0,{number:!0}]]),g(`small`,null,o(e.$t(`townView.k1or92b075`)),1)])]),g(`div`,mo,[g(`span`,null,o(e.$t(`townView.k3x5tpx076`)),1),g(`span`,ho,[g(`input`,{value:D(Q).warnLow,type:`number`,step:`any`,class:`daq-num`,onChange:t[26]||=e=>Md(`warnLow`,e.target.value)},null,40,go),t[75]||=O(` ~ `,-1),g(`input`,{value:D(Q).warnHigh,type:`number`,step:`any`,class:`daq-num`,onChange:t[27]||=e=>Md(`warnHigh`,e.target.value)},null,40,_o)])]),g(`div`,vo,[g(`span`,null,o(e.$t(`townView.k1hjj0jf077`)),1),g(`span`,yo,[g(`input`,{value:D(Q).min,type:`number`,step:`any`,class:`daq-num`,onChange:t[28]||=e=>Md(`min`,e.target.value)},null,40,bo),t[76]||=O(` ~ `,-1),g(`input`,{value:D(Q).max,type:`number`,step:`any`,class:`daq-num`,onChange:t[29]||=e=>Md(`max`,e.target.value)},null,40,xo)])]),g(`div`,So,[g(`span`,null,o(e.$t(`townView.k48tki078`)),1),g(`button`,{class:c([`bind-add-btn`,{warn:D(Q).enabled}]),onClick:t[30]||=e=>D(J).patchNode(D(I).id,{enabled:!D(Q).enabled})},o(D(Q).enabled?e.$t(`townView.k1wv0nyo150`):e.$t(`townView.kh1586b180`)),3)]),g(`div`,Co,[g(`span`,null,o(e.$t(`townView.k3xakp079`)),1),g(`button`,{class:`bind-add-btn danger`,title:e.$t(`townView.kpwutri014`),onClick:t[31]||=e=>ft()},o(e.$t(`townView.k1bpp30k080`)),9,wo)])])):(s(),v(`div`,To,o(e.$t(`townView.kzk5dfx081`)),1))])):(s(),v(b,{key:2},[g(`div`,Eo,[g(`span`,Do,o(e.$t(`townView.k3xhia082`)),1),S(g(`input`,{"onUpdate:modelValue":t[32]||=e=>p(tt)?tt.value=e:null,class:`obj-input`,placeholder:e.$t(`townView.k1k6vbaf015`),disabled:D(z)!==`edit`,title:D(z)===`edit`?`设备名称`:`运行模式只读`,onChange:ct,onKeydown:re(ct,[`enter`])},null,40,Oo),[[j,D(tt)]])]),g(`div`,ko,[g(`span`,Ao,o(e.$t(`townView.k41amp083`)),1),g(`select`,{class:`obj-select`,value:D(F)?.getDeviceModelRef?.(D(I).id)??``,disabled:D(z)!==`edit`,onChange:t[33]||=e=>ut(e.target.value)},[(s(!0),v(b,null,l(D(et),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,Mo))),128))],40,jo)]),g(`div`,No,o(e.$t(`townView.k1vtyk05130`))+` `+o(D(od).length)+` `+o(e.$t(`townView.k3vfpz5138`)),1),(s(!0),v(b,null,l(D(od),t=>(s(),v(`div`,{key:t.daqId,class:`bind-row`},[g(`span`,Po,[(s(),v(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(t.icon)},null,8,Fo))]),g(`span`,Io,[g(`span`,Lo,o(t.ch),1),g(`span`,Ro,[g(`b`,null,o(t.value),1),O(` `+o(t.unit)+` · `+o(t.name),1)])]),g(`canvas`,{ref_for:!0,ref:e=>ed(t.daqId,e),class:`bind-spark`,width:`56`,height:`20`},null,512),D(z)===`edit`?(s(),v(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Hu(t.daqId)},` ✕ `,8,zo)):x(``,!0)]))),128)),D(od).length?x(``,!0):(s(),v(`div`,Bo,o(e.$t(`townView.kgpuqhb084`)),1)),D(z)===`edit`?(s(),v(`div`,Vo,[g(`button`,{class:`bind-add`,onClick:t[34]||=e=>Yu(`daq`,e)},o(e.$t(`townView.kvm0lin085`)),1),D(Ku)?(s(),v(`div`,{key:0,class:`bind-pop`,style:n({maxHeight:`${D(Ju)}px`})},[(s(!0),v(b,null,l(D(su),t=>(s(),v(b,{key:t.id},[D(Xu)[t.id]?.length?(s(),v(`div`,Ho,[g(`span`,Uo,o(t.name)+` · `+o(t.ch),1),(s(!0),v(b,null,l(D(Xu)[t.id],t=>(s(),v(`button`,{key:t.id,"data-node-id":t.id,title:t.devName?e.$t(`townView.k2bindr0007`,{p0:t.devName}):e.$t(`townView.k2bindr0008`),onClick:e=>Qu(t.id)},[(s(),v(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(t.tpl.icon)},null,8,Go)),g(`span`,null,[O(o(t.name),1),t.devName?(s(),v(`i`,Ko,`→ `+o(t.devName),1)):t.placed?x(``,!0):(s(),v(`i`,qo,o(e.$t(`townView.k2bindr0009`)),1))])],8,Wo))),128))])):x(``,!0)],64))),128)),D(Zu)?x(``,!0):(s(),v(`div`,Jo,o(e.$t(`townView.k2bindr0010`)),1))],4)):x(``,!0)])):x(``,!0),g(`div`,Yo,o(e.$t(`townView.ktzir2t131`))+` `+o(D(ud).length)+` `+o(e.$t(`townView.k4l1w042`)),1),(s(!0),v(b,null,l(D(ud),t=>(s(),v(`div`,{key:t.dcwId,class:`dcw-row`},[g(`div`,Xo,[g(`span`,Zo,[(s(),v(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(t.icon)},null,8,Qo))]),g(`span`,$o,[g(`span`,es,[O(o(t.ch),1),t.rMin!=null||t.rMax!=null?(s(),v(`i`,ts,o(e.$t(`townView.k48grv086`)),1)):x(``,!0)]),g(`span`,ns,o(t.name),1)]),g(`span`,rs,[g(`b`,null,o(t.value==null?`--`:t.value.toFixed(t.decimals)),1),g(`i`,null,o(t.unit),1)]),D(z)===`edit`?(s(),v(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>bd(t.dcwId)},` ✕ `,8,is)):x(``,!0)]),g(`div`,{class:c([`dcw-win`,{recipe:t.rMin!=null||t.rMax!=null}])},[g(`em`,null,o(t.rMin!=null||t.rMax!=null?e.$t(`townView.k1l3m0hx151`):e.$t(`townView.k1bc6rqf181`)),1),g(`span`,as,o(t.rMin??`-∞`),1),g(`span`,os,[g(`i`,{style:n({left:`${fd(t)}%`})},null,4)]),g(`span`,ss,o(t.rMax??`+∞`),1)],2),g(`div`,cs,[S(g(`input`,{"onUpdate:modelValue":e=>D(pd)[t.dcwId]=e,type:`number`,step:10**-t.decimals,placeholder:`${t.rMin??t.gMin} ~ ${t.rMax??t.gMax}`,onKeydown:re(e=>hd(D(Y).nodeById(t.dcwId)),[`enter`])},null,40,ls),[[j,D(pd)[t.dcwId],void 0,{number:!0}]]),g(`button`,{class:`dcw-send`,disabled:D(pd)[t.dcwId]==null||D(pd)[t.dcwId]===``,title:e.$t(`townView.k15t7izc017`),onClick:e=>hd(D(Y).nodeById(t.dcwId))},` write `,8,us)]),D(md)[t.dcwId]?(s(),v(`small`,ds,o(D(md)[t.dcwId]),1)):x(``,!0)]))),128)),D(ud).length?x(``,!0):(s(),v(`div`,fs,o(e.$t(`townView.k10smf24087`)),1)),D(z)===`edit`?(s(),v(`div`,ps,[g(`button`,{class:`bind-add`,onClick:t[35]||=e=>Yu(`dcw`,e)},o(e.$t(`townView.kvk1vh5088`)),1),D(qu)?(s(),v(`div`,{key:0,class:`bind-pop`,style:n({maxHeight:`${D(Ju)}px`})},[(s(!0),v(b,null,l(D(Xl),t=>(s(),v(b,{key:t.id},[D(_d)[t.id]?.length?(s(),v(`div`,ms,[g(`span`,hs,o(t.name)+` · `+o(t.ch),1),(s(!0),v(b,null,l(D(_d)[t.id],t=>(s(),v(`button`,{key:t.id,"data-node-id":t.id,title:t.devName?e.$t(`townView.k2bindr0007`,{p0:t.devName}):e.$t(`townView.k2bindr0008`),onClick:e=>yd(t.id)},[(s(),v(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Wu(t.tpl.icon)},null,8,_s)),g(`span`,null,[O(o(t.name),1),t.devName?(s(),v(`i`,vs,`→ `+o(t.devName),1)):t.placed?x(``,!0):(s(),v(`i`,ys,o(e.$t(`townView.k2bindr0009`)),1))])],8,gs))),128))])):x(``,!0)],64))),128)),D(vd)?x(``,!0):(s(),v(`div`,bs,o(e.$t(`townView.k2bindr0010`)),1))],4)):x(``,!0)])):x(``,!0),D(z)===`edit`?(s(),v(b,{key:4},[t[79]||=g(`div`,{class:`sect-hd`},` 变换 · BLENDER `,-1),g(`div`,xs,[g(`button`,{class:c([`seg-btn`,{on:D(Ie)===`translate`}]),onClick:t[36]||=e=>Le(`translate`)},o(e.$t(`townView.k1hg3167089`)),3),g(`button`,{class:c([`seg-btn`,{on:D(Ie)===`rotate`}]),onClick:t[37]||=e=>Le(`rotate`)},o(e.$t(`townView.k1enlg7i090`)),3),g(`button`,{class:c([`seg-btn`,{on:D(Ie)===`scale`}]),onClick:t[38]||=e=>Le(`scale`)},o(e.$t(`townView.k1ibjg3j091`)),3)]),g(`div`,Ss,[t[77]||=g(`span`,{class:`scale-min`},`0.2×`,-1),g(`input`,{class:`scale-range`,type:`range`,min:`0.2`,max:`5`,step:`0.05`,value:D(I).scale,onInput:t[39]||=e=>Ue(Number(e.target.value)),onChange:t[40]||=e=>We(Number(e.target.value))},null,40,Cs),t[78]||=g(`span`,{class:`scale-max`},`5×`,-1)]),g(`div`,ws,o(Math.round(D(I).scale*100))+`% `,1),g(`div`,Ts,[g(`button`,{class:c([`btn btn-danger ins-del`,{armed:D(dt)===D(I).id}]),onClick:ft},o(D(dt)===D(I).id?e.$t(`townView.k1w10xa5152`):e.$t(`townView.k121kfef182`)),3)])],64)):(s(),v(`div`,Es,o(e.$t(`townView.kt0i3y2092`)),1))],64))],64)):D(I).kind===`agent`?(s(),v(b,{key:1},[g(`div`,Ds,[g(`span`,{class:`chat-badge`,style:n({"--p-acc":D(Bl)})},o(D(Yt).slice(0,1).toUpperCase()),5),g(`div`,Os,[g(`span`,ks,o(D(Yt)),1),g(`span`,As,[g(`span`,{class:c([`chat-role`,D(Xt)?.role===`lead`?`r-lead`:`r-worker`])},o(D(Qt)),3),g(`span`,{class:c([`chat-state`,`s-${D(Xt)?.state??`idle`}`])},o(D($t)),3),D(Xt)?.harness?(s(),v(`span`,js,o(D(Xt).harness.toUpperCase()),1)):x(``,!0),g(`span`,Ms,o(D(q).length+D(Jt).length)+` `+o(e.$t(`townView.k4dfq040`)),1)])])]),g(`div`,Ns,[g(`span`,Ps,o(e.$t(`townView.k41amp083`)),1),g(`select`,{class:`obj-select`,value:(D(F)?.getAgentModel?.(D(I).id)??``)||`hero-3d`,disabled:D(z)!==`edit`,onChange:t[41]||=e=>lt(e.target.value)},[(s(!0),v(b,null,l(D($e),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,Is))),128))],40,Fs)]),t[83]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,Ls,[g(`span`,Rs,o(e.$t(`townView.k1fix3hb093`)),1),g(`span`,zs,o(D(rt)),1),D(z)===`edit`?(s(),v(`button`,{key:0,class:c([`obj-mini`,{on:D(W)}]),title:e.$t(`townView.k13enoy3018`),onClick:it},o(D(W)?e.$t(`townView.k3slzhc153`):e.$t(`townView.k1f1xmci183`)),11,Bs)):x(``,!0)]),t[84]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,Vs,o(e.$t(`townView.k1p7nru2094`)),1),(s(!0),v(b,null,l(D(Tu),t=>(s(),v(`div`,{key:t.id,class:`bind-row`},[g(`span`,{class:c([`ins-chip`,t.kind===`dcw`?`accent`:``]),style:{flex:`none`}},o(t.kind===`dcw`?e.$t(`townView.k40ifw097`):e.$t(`townView.k40rjw098`)),3),g(`span`,Hs,[g(`span`,Us,o(Ru(t)),1),g(`select`,{class:`bind-select`,style:{"margin-top":`3px`},value:t.mode,title:e.$t(`townView.khqvwix019`),onChange:e=>Iu(t.id,e.target.value)},[g(`option`,Gs,o(e.$t(`townView.k1io1ylm095`)),1),g(`option`,Ks,o(e.$t(`townView.k1duyr8q096`)),1)],40,Ws)]),g(`button`,{class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Fu(t.id)},` ✕ `,8,qs)]))),128)),D(Tu).length?x(``,!0):(s(),v(`div`,Js,` 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 `)),D(z)===`edit`?(s(),v(`div`,Ys,[S(g(`select`,{"onUpdate:modelValue":t[42]||=e=>p(Eu)?Eu.value=e:null,class:`bind-select`,style:{flex:`none`,width:`62px`}},[g(`option`,Xs,o(e.$t(`townView.k40ifw097`)),1),g(`option`,Zs,o(e.$t(`townView.k40rjw098`)),1)],512),[[A,D(Eu)]]),S(g(`select`,{"onUpdate:modelValue":t[43]||=e=>p(Du)?Du.value=e:null,class:`bind-select`},[g(`option`,Qs,o(e.$t(`townView.kurjldk099`)),1),D(Eu)===`dcw`?(s(!0),v(b,{key:0},l(D(Y).nodes,e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,$s))),128)):(s(!0),v(b,{key:1},l(D(J).nodes,e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,ec))),128))],512),[[A,D(Du)]]),S(g(`select`,{"onUpdate:modelValue":t[44]||=e=>p(Ou)?Ou.value=e:null,class:`bind-select`,style:{flex:`none`,width:`76px`}},[g(`option`,tc,o(e.$t(`townView.k45kpj100`)),1),g(`option`,nc,o(e.$t(`townView.k3zul4101`)),1)],512),[[A,D(Ou)]]),g(`button`,{class:`bind-add-btn`,disabled:!D(Du),onClick:Pu},o(e.$t(`townView.k452a8102`)),9,rc)])):x(``,!0),D(ku).length?(s(),v(b,{key:2},[g(`div`,ic,o(e.$t(`townView.k1gk2jg7132`))+` `+o(D(ku).length),1),(s(!0),v(b,null,l(D(ku),t=>(s(),v(`div`,{key:t.id,class:`approval-card`},[g(`div`,ac,o(t.detail),1),g(`div`,{class:c([`approval-ttl`,{urgent:Cu(t)<=30}])},` ⏱ `+o(Cu(t))+`s `+o(e.$t(`townView.hitlAutoReject`)),3),S(g(`input`,{"onUpdate:modelValue":e=>D(Au)[t.id]=e,class:`dcw-write input-inline`,style:{width:`100%`,"margin-top":`5px`},placeholder:e.$t(`townView.keztqrn020`)},null,8,oc),[[j,D(Au)[t.id]]]),g(`div`,sc,[g(`button`,{class:`bind-add-btn`,onClick:e=>Lu(t.id,!0)},o(e.$t(`townView.kslcozu103`)),9,cc),g(`button`,{class:`bind-add-btn danger`,onClick:e=>Lu(t.id,!1)},o(e.$t(`townView.k14gu3rd104`)),9,lc)])]))),128))],64)):x(``,!0),D(U)&&D(z)===`edit`?(s(),v(b,{key:3},[g(`div`,uc,[g(`span`,dc,o(e.$t(`townView.k3zhy5048`)),1),g(`div`,fc,[g(`button`,{class:c([`seg-btn`,{on:D(U).shape===`ellipse`}]),onClick:t[45]||=e=>{D(U).shape=`ellipse`,at()}},o(e.$t(`townView.k414bc049`)),3),g(`button`,{class:c([`seg-btn`,{on:D(U).shape===`rect`}]),onClick:t[46]||=e=>{D(U).shape=`rect`,at()}},o(e.$t(`townView.k43u0g050`)),3)])]),g(`div`,pc,[g(`span`,mc,o(e.$t(`townView.k41lwj105`)),1),S(g(`input`,{"onUpdate:modelValue":t[47]||=e=>D(U).radiusX=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[j,D(U).radiusX,void 0,{number:!0}]]),g(`span`,hc,o(Math.round(D(U).radiusX)),1)]),g(`div`,gc,[g(`span`,_c,o(e.$t(`townView.k45bta106`)),1),S(g(`input`,{"onUpdate:modelValue":t[48]||=e=>D(U).radiusZ=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[j,D(U).radiusZ,void 0,{number:!0}]]),g(`span`,vc,o(Math.round(D(U).radiusZ)),1)]),g(`button`,{class:`obj-mini danger`,onClick:st},o(e.$t(`townView.k1w45mzc107`)),1)],64)):(s(),v(`div`,yc,o(e.$t(`townView.k14s8urm108`)),1)),t[85]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,bc,[O(o(e.$t(`townView.k1ghjbfc133`))+` `+o(D(Yt))+` `,1),g(`button`,{class:`mini-btn chat-refresh`,title:e.$t(`townView.k15avt7g021`),onClick:zl},o(D(en)?`…`:`↻`),9,xc)]),g(`div`,{ref_key:`chatScroll`,ref:nn,class:`rpg-lines chat-embed`},[D(en)?(s(),v(`div`,Sc,o(e.$t(`townView.kkhlx5h109`)),1)):x(``,!0),D(q).length?(s(),v(b,{key:1},[g(`div`,Cc,o(e.$t(`townView.k768cnt134`))+` `+o(D(q).length),1),(s(!0),v(b,null,l(D(q),e=>(s(),v(`div`,{key:e.id,class:`rpg-line hist`},[g(`span`,wc,o(Hl(e.at)),1),g(`div`,Tc,[Vl(e.kind)?(s(),v(`span`,{key:0,class:c([`rpg-kind`,`k-${e.kind}`])},o(Vl(e.kind)),3)):x(``,!0),g(`span`,Ec,o(e.text),1)])]))),128))],64)):x(``,!0),D(Jt).length?(s(),v(`div`,Dc,o(e.$t(`townView.k1cwz73k135`))+` `+o(D(Jt).length),1)):x(``,!0),(s(!0),v(b,null,l(D(Jt),e=>(s(),v(`div`,{key:e.id,class:`rpg-line live`},[g(`span`,Oc,o(Hl(e.at)),1),g(`div`,kc,[g(`span`,Ac,o(e.text),1)])]))),128)),D(Xt)?.state===`busy`?(s(),v(`div`,jc,[t[80]||=g(`span`,{class:`ty-dot`},null,-1),t[81]||=g(`span`,{class:`ty-dot`},null,-1),t[82]||=g(`span`,{class:`ty-dot`},null,-1),g(`span`,Mc,o(e.$t(`townView.k3o5tz9110`)),1)])):x(``,!0),!D(en)&&!D(q).length&&!D(Jt).length?(s(),v(`div`,Nc,o(e.$t(`townView.k1qkqld7111`)),1)):x(``,!0)],512)],64)):x(``,!0)])):x(``,!0)]),_:1}),g(`section`,Pc,[g(`div`,Fc,[g(`h3`,null,o(e.$t(`townView.k17dkhgd112`)),1)]),g(`div`,Ic,[g(`div`,Lc,[g(`canvas`,{ref_key:`donutCanvas`,ref:rf,width:`118`,height:`118`},null,512),g(`div`,Rc,[g(`b`,{style:n({color:D(nf)})},o(D(tf))+`%`,5),g(`span`,null,o(e.$t(`townView.k7h1nxo113`)),1)])]),g(`div`,zc,[g(`div`,Bc,[t[86]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-accent)`}},null,-1),O(` `+o(e.$t(`townView.k3vp67i114`))+` `,1),g(`span`,Vc,o(D(Kd)),1)]),g(`div`,Hc,[t[87]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-amber)`}},null,-1),O(` `+o(e.$t(`townView.k3zcvb115`))+` `,1),g(`span`,Uc,o(D(Qd)),1)]),g(`div`,Wc,[t[88]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-danger)`}},null,-1),O(` `+o(e.$t(`townView.k3xmid116`))+` `,1),g(`span`,Gc,o(D($d)),1)]),g(`div`,Kc,[t[89]||=g(`span`,{class:`hl-dot`,style:{background:`#3a4a63`}},null,-1),O(` `+o(e.$t(`townView.statesOffline`))+` `,1),g(`span`,qc,o(D(ef)),1)])])])]),g(`section`,Jc,[g(`div`,Yc,[g(`h3`,null,o(e.$t(`townView.k1q247fn117`)),1),g(`span`,Xc,o(D(k).twins.length),1)]),f(i,{class:`kd-embed`,"daq-live":D(Bd),"dcw-live":D(Vd),onFocusDevice:Rt},null,8,[`daq-live`,`dcw-live`])]),g(`section`,Zc,[g(`div`,Qc,[g(`h3`,null,o(e.$t(`townView.k1cxf749118`)),1),g(`span`,$c,o(D(uf))+` `+o(e.$t(`townView.k4dfq040`)),1),g(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bkswpz022`),onClick:ff},` ✓ `,8,el)]),g(`div`,tl,[(s(!0),v(b,null,l(D(of).slice(0,8),e=>(s(),v(`div`,{key:e.id,class:`al-row`},[g(`span`,{class:c([`al-ico`,e.state===2?`info`:e.state===1?`warn`:`crit`])},[...t[90]||=[g(`svg`,{class:`al-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M12 3 22 20H2L12 3Z`}),g(`path`,{d:`M12 10v4M12 17v.2`})],-1)]],2),g(`div`,nl,[g(`div`,rl,o(e.txt),1),g(`div`,il,o(e.src)+` · `+o(e.time),1)]),g(`button`,{class:c([`al-state`,`s${e.state}`]),onClick:t=>df(e.id)},o(cf[e.state]),11,al)]))),128)),D(of).length?x(``,!0):(s(),v(`div`,ol,[t[91]||=g(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[g(`path`,{d:`M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z`}),g(`path`,{d:`m9.2 12.2 2 2 3.6-4`})],-1),g(`span`,null,o(e.$t(`townView.kjz544r119`)),1)]))])]),g(`section`,sl,[g(`div`,cl,[g(`h3`,null,o(e.$t(`townView.k1cxdtq2120`)),1),g(`span`,ll,o(D(Yl).length),1)]),g(`div`,ul,[(s(!0),v(b,null,l([...D(Yl)].reverse(),(e,t)=>(s(),v(`div`,{key:`${e.at}-${t}`,class:`event-row`},[g(`span`,dl,o(Hl(e.at)),1),g(`span`,{class:`ev-name`,title:e.agentName},o(e.agentName),9,fl),g(`span`,{class:`ev-text`,title:e.text},o(e.text),9,pl)]))),128)),D(Yl).length?x(``,!0):(s(),v(`div`,ml,[t[92]||=g(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[g(`path`,{d:`M3 12h3l2.5-6 4 12L15 12h6`})],-1),g(`span`,null,o(e.$t(`townView.k2uk6ua121`)),1)]))])]),g(`section`,hl,[g(`div`,gl,[g(`h3`,null,o(e.$t(`townView.kjug2jq122`)),1)]),g(`div`,_l,[g(`div`,{class:`mm-wrap`,title:e.$t(`townView.klfwiqg023`)},[g(`canvas`,{ref_key:`navCanvas`,ref:Uf,class:`nav-cv`,onPointerdown:Jf,onPointermove:Yf,onPointerup:Xf,onPointercancel:Xf,onWheel:ie(qf,[`prevent`])},null,544)],8,vl),g(`div`,yl,[g(`button`,{class:`vp-tool`,title:e.$t(`townView.k1lap9bs024`),onClick:Of},[...t[93]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M3 12a9 9 0 1 0 3-6.7M3 4v5h5`})],-1)]],8,bl),g(`button`,{class:`vp-tool`,title:e.$t(`townView.kav8a8k025`),onClick:t[49]||=e=>D(F)?.zoomBy(.22)},[...t[94]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),g(`path`,{d:`m16 16 4.5 4.5M8.5 11h5`})],-1)]],8,xl),g(`button`,{class:`vp-tool`,title:e.$t(`townView.k1u7uce9026`),onClick:t[50]||=e=>D(F)?.zoomBy(-.18)},[...t[95]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),g(`path`,{d:`m16 16 4.5 4.5M8.5 11h5M11 8.5v5`})],-1)]],8,Sl)])]),g(`div`,Cl,o(e.$t(`townView.k1gaaodq136`))+o(D(Wf).toFixed(1))+` · `+o(D(Wt)?.devices?.length??0)+` `+o(e.$t(`townView.k47e16126`)),1)])])]),g(`footer`,wl,[g(`span`,null,[g(`span`,{class:c([`sb-dot`,{red:D(te).state!==`open`}])},null,2),O(o(e.$t(`townView.k1i4g246123`))+` `,1),g(`b`,null,o(D(te).state===`open`?e.$t(`townView.k41k5c154`):D(Ae)?e.$t(`townView.k3lmtk3184`):e.$t(`townView.k44c2n186`)),1)]),g(`span`,Tl,[O(o(e.$t(`townView.k4a0jt124`))+` `,1),g(`b`,null,o(D(be)),1),t[96]||=g(`i`,null,`·`,-1),O(o(e.$t(`townView.k3xdvm125`))+` `,1),g(`b`,null,o(D(ye)),1),t[97]||=g(`i`,null,`·`,-1),O(o(e.$t(`townView.k47e16126`))+` `,1),g(`b`,null,o(D(Gd)),1)]),g(`span`,El,o(D(ve))+` FPS `,1),g(`span`,Dl,` © 2026 ABO · DIGITAL TWIN · `+o(e.$t(`townView.k1h5gxpf137`)),1)]),D(ge)?x(``,!0):(s(),v(`div`,Ol,[t[98]||=g(`div`,{class:`loading-spinner`},null,-1),g(`span`,kl,o(e.$t(`townView.kvjdqfg059`)),1)]))])}}}),[[`__scopeId`,`data-v-5660e131`]]),{__name:`WorkshopTownView`});export{ln as n,zl as t};
@@ -0,0 +1 @@
1
+ .settings-page[data-v-f677a83e]{padding:4px}.settings-card[data-v-f677a83e]{overflow:hidden}.settings-layout[data-v-f677a83e]{min-height:420px;display:flex}.settings-nav[data-v-f677a83e]{border-right:1px solid var(--line);flex-direction:column;flex:0 0 180px;gap:2px;padding:14px;display:flex}.nav-item[data-v-f677a83e]{width:100%;font-family:var(--font-body);color:var(--ink-faint);text-align:left;cursor:pointer;border-radius:var(--radius-panel-sm);transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border:0;align-items:center;gap:9px;padding:8px 10px;font-size:13px;font-weight:500;display:flex}.nav-item[data-v-f677a83e]:hover{color:var(--ink);background:var(--paper-deep)}.nav-item.active[data-v-f677a83e]{color:var(--ink);background:var(--paper-deep);font-weight:600}.settings-body[data-v-f677a83e]{flex:1;min-width:0;padding:22px 26px}.section-title[data-v-f677a83e]{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);margin:0 0 4px;font-size:22px;font-weight:400}.section-desc[data-v-f677a83e]{color:var(--ink-faint);margin:0 0 18px;font-size:13px;line-height:1.6}.color-swatches[data-v-f677a83e]{flex-wrap:wrap;gap:10px;margin:12px 0 4px;display:flex}.swatch[data-v-f677a83e]{font-family:var(--font-body);color:var(--ink-soft);cursor:pointer;background:var(--paper-raised);border:1px solid var(--line-strong);border-radius:var(--radius-pill);transition:border-color var(--transition-fast), background var(--transition-fast);align-items:center;gap:8px;padding:8px 14px;font-size:12.5px;font-weight:500;display:inline-flex;position:relative}.swatch[data-v-f677a83e]:hover{background:var(--paper-deep)}.swatch.on[data-v-f677a83e]{color:var(--ink);border-color:var(--ink)}.swatch-dot[data-v-f677a83e]{background:var(--sw);border:1px solid #00000014;border-radius:50%;width:14px;height:14px}.swatch-check[data-v-f677a83e]{color:var(--ink);font-size:13px}.reset-btn[data-v-f677a83e]{margin:10px 0 4px}.set-row[data-v-f677a83e],.toggle-row[data-v-f677a83e]{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:20px;padding:18px 0;display:flex}.set-text[data-v-f677a83e]{min-width:0}.set-title[data-v-f677a83e]{color:var(--ink-soft);font-size:14px;font-weight:500}.set-sub[data-v-f677a83e]{max-width:52ch;color:var(--ink-faint);margin-top:3px;font-size:12.5px;line-height:1.5}.switch[data-v-f677a83e]{cursor:pointer;background:var(--line-strong);border-radius:var(--radius-pill);border:0;flex:none;width:42px;height:25px;padding:0;transition:background .18s cubic-bezier(.22,1,.36,1);position:relative}.switch .knob[data-v-f677a83e]{background:var(--paper-raised);border-radius:50%;width:19px;height:19px;transition:transform .18s cubic-bezier(.22,1,.36,1);position:absolute;top:3px;left:3px;box-shadow:0 1px 2px #0c0a0940}.switch.on[data-v-f677a83e]{background:var(--accent)}.switch.on .knob[data-v-f677a83e]{transform:translate(17px)}@media (prefers-reduced-motion:reduce){.switch[data-v-f677a83e],.switch .knob[data-v-f677a83e]{transition:none}}.identity-note[data-v-f677a83e]{color:var(--ink-faint);margin:14px 0 0;font-size:12px}.rt-notice[data-v-f677a83e]{margin:0 0 14px}.rt-groups-bar[data-v-f677a83e]{align-items:center;gap:8px;margin:12px 0 10px;display:flex}.rt-groups-count[data-v-f677a83e]{color:var(--ink-faint);font-size:11.5px}.rt-groups-add[data-v-f677a83e]{margin-left:auto}.rt-group-form[data-v-f677a83e]{background:var(--frost-bg);border:1px solid var(--glass-line);border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;padding:10px 12px;display:flex}.rt-group[data-v-f677a83e]{background:var(--surface-glass);border:1px solid var(--glass-line);border-radius:10px;margin:0 0 10px}.rt-group.grp-plugin[data-v-f677a83e]{border-left:3px solid color-mix(in srgb, var(--tone-info-dot) 55%, transparent)}.rt-group-head[data-v-f677a83e]{border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;display:flex}.rt-group.collapsed .rt-group-head[data-v-f677a83e]{border-radius:10px}.rt-group-head[role=button][data-v-f677a83e]{cursor:pointer}.rt-group-head[role=button][data-v-f677a83e]:hover{background:var(--hover-tint)}.rt-caret[data-v-f677a83e]{color:var(--ink-faint);flex:none;font-size:15px}.rt-group-icon[data-v-f677a83e]{color:var(--accent);flex:none;font-size:14px}.rt-rename[data-v-f677a83e]{width:200px;color:var(--ink);background:var(--paper-deep);border:1px solid var(--accent);border-radius:var(--radius-chip);padding:2px 8px;font-size:14px}.rt-group-badge[data-v-f677a83e]{color:var(--ink-faint);border:1px solid var(--glass-line);border-radius:99px;flex:none;padding:1px 7px;font-size:10px}.rt-group.grp-plugin .rt-group-badge[data-v-f677a83e]{color:var(--tone-info-dot);border-color:color-mix(in srgb, var(--tone-info-dot) 40%, transparent)}.rt-group-fields[data-v-f677a83e]{color:var(--ink-faint);flex:none;font-size:10.5px}.rt-group-desc[data-v-f677a83e]{min-width:0;color:var(--ink-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.rt-group-ops[data-v-f677a83e]{opacity:0;align-items:center;gap:2px;margin-left:auto;transition:opacity .15s;display:flex}.rt-group-head:hover .rt-group-ops[data-v-f677a83e],.rt-group-ops[data-v-f677a83e]:focus-within{opacity:1}.rt-group-body[data-v-f677a83e]{border-top:1px solid var(--line);padding:0 14px 6px}.rt-group-empty[data-v-f677a83e]{color:var(--ink-faint);margin:10px 0 4px;font-size:12px}.rt-group-title[data-v-f677a83e]{font-family:var(--font-display);letter-spacing:.01em;color:var(--ink-soft);margin:0;font-size:14.5px;font-weight:600}.rt-group-title.plugin-group-title[data-v-f677a83e]{margin:20px 0 2px;font-size:15px}.rt-row[data-v-f677a83e]{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;padding:11px 0;display:flex}.rt-main[data-v-f677a83e]{min-width:0}.rt-title[data-v-f677a83e]{color:var(--ink-soft);align-items:center;gap:8px;font-size:13.5px;font-weight:500;display:flex}.rt-sub[data-v-f677a83e]{max-width:46ch;color:var(--ink-faint);margin-top:3px;font-size:12px;line-height:1.5}.rt-tag[data-v-f677a83e]{font-family:var(--font-mono);color:var(--ink-faint);border:1px solid var(--line-strong);border-radius:var(--radius-pill);padding:1px 7px;font-size:10.5px;font-weight:500;line-height:1.5}.rt-tag.src-runtime[data-v-f677a83e]{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 45%, transparent)}.rt-tag.src-env[data-v-f677a83e]{color:#c9963f;border-color:#c9963f73}.rt-tag.live[data-v-f677a83e]{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 45%, transparent)}.rt-tag.restart[data-v-f677a83e]{color:#c9963f;border-color:#c9963f73}.rt-ctrl[data-v-f677a83e]{flex:none;align-items:center;gap:8px;display:flex}.rt-color[data-v-f677a83e]{align-items:center;gap:8px;display:inline-flex}.rt-color input[type=color][data-v-f677a83e]{cursor:pointer;background:var(--paper-raised);border:1px solid var(--line-strong);border-radius:6px;width:36px;height:32px;padding:2px}.rt-reset[data-v-f677a83e]{padding:4px 9px;font-size:12px}.rt-actions[data-v-f677a83e]{align-items:center;gap:10px;margin-top:18px;display:flex}.rt-path[data-v-f677a83e]{color:var(--ink-faint);margin-left:auto;font-size:11px}.plugin-group-title[data-v-f677a83e]{border-top:1px solid var(--line);margin-top:30px;padding-top:22px}.plugin-row[data-v-f677a83e]{border-bottom:1px solid var(--line);transition:opacity var(--transition-fast);justify-content:space-between;align-items:center;gap:18px;padding:13px 0;display:flex}.plugin-row.off[data-v-f677a83e]{opacity:.55}.plugin-main[data-v-f677a83e]{min-width:0}.plugin-health[data-v-f677a83e]{align-items:center;gap:5px;max-width:320px;font-size:12px;line-height:1.4;display:inline-flex}.plugin-health.ok[data-v-f677a83e]{color:#2e9e6b}.plugin-health.bad[data-v-f677a83e]{color:#c2554a}.plugin-health.faint[data-v-f677a83e]{color:var(--ink-faint)}.plugin-health .spin[data-v-f677a83e]{animation:.9s linear infinite plugin-spin-f677a83e}@keyframes plugin-spin-f677a83e{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.plugin-health .spin[data-v-f677a83e]{animation:none}}@media (width<=768px){.plugin-row[data-v-f677a83e],.rt-row[data-v-f677a83e]{flex-direction:column;align-items:flex-start;gap:10px}.rt-actions[data-v-f677a83e]{flex-wrap:wrap}.rt-path[data-v-f677a83e]{margin-left:0}}@media (prefers-reduced-motion:reduce){.settings-layout[data-v-f677a83e]{flex-direction:column}.settings-nav[data-v-f677a83e]{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;flex:none}}
@@ -0,0 +1 @@
1
+ .town-page[data-v-3bf37296]{background:var(--paper) url(../scene/background/cyber-town-background.svg) center / cover no-repeat fixed;width:100vw;height:100dvh;min-height:0;overflow:hidden}.pane-empty[data-v-3bf37296]{height:100%;color:var(--ink-faint);background:var(--frost-bg);-webkit-backdrop-filter:var(--frost-blur);backdrop-filter:var(--frost-blur);border:1px solid var(--glass-line);border-radius:var(--radius-panel);flex-direction:column;justify-content:center;align-items:center;gap:8px;display:flex}.pe-icon[data-v-3bf37296]{opacity:.6;font-size:30px}.pe-title[data-v-3bf37296]{color:var(--ink-soft);font-size:14px;font-weight:600}.pe-sub[data-v-3bf37296]{color:var(--ink-faint);font-size:12px}.pane-loading[data-v-3bf37296]{height:100%;color:var(--ink-faint);background:var(--frost-bg);-webkit-backdrop-filter:var(--frost-blur);backdrop-filter:var(--frost-blur);border:1px solid var(--glass-line);border-radius:var(--radius-panel);justify-content:center;align-items:center;font-size:12px;display:flex}
@@ -0,0 +1 @@
1
+ .page-wrap[data-v-6dd85a94]{max-width:1080px;margin:0 auto}.admin-tag[data-v-6dd85a94]{transform:translateY(-3px)}.sub[data-v-6dd85a94]{color:var(--ink-faint);margin:8px 0 0;font-size:12.5px}.gate-card[data-v-6dd85a94]{text-align:center;flex-direction:column;align-items:center;gap:6px;padding:56px 24px;display:flex}.gate-icon[data-v-6dd85a94]{color:var(--ink-faint);font-size:32px}.gate-title[data-v-6dd85a94]{margin:0;font-size:15px;font-weight:600}.gate-hint[data-v-6dd85a94]{font-family:var(--font-mono);color:var(--ink-faint);margin:0;font-size:11.5px}
@@ -0,0 +1 @@
1
+ import{D as e}from"./BU83-NnX.js";import{$ as t,C as n,D as r,H as i,P as a,S as o,d as s,pt as c}from"./CSkxz2NX.js";var l=Symbol(`ContextProps`),u=Symbol(`InternalContextProps`),d=function(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:s(()=>!0),a=c(new Map);n(),t([r,a],()=>{}),i(l,e),i(u,{addFormItemField:(e,t)=>{a.value.set(e,t),a.value=new Map(a.value)},removeFormItemField:e=>{a.value.delete(e),a.value=new Map(a.value)}})},f={id:s(()=>void 0),onFieldBlur:()=>{},onFieldChange:()=>{},clearValidate:()=>{}},p={addFormItemField:()=>{},removeFormItemField:()=>{}},m=()=>{let e=r(u,p),t=Symbol(`FormItemFieldKey`),o=n();return e.addFormItemField(t,o.type),a(()=>{e.removeFormItemField(t)}),i(u,p),i(l,f),r(l,f)},h=o({compatConfig:{MODE:3},name:`AFormItemRest`,setup(e,t){let{slots:n}=t;return i(u,p),i(l,f),()=>n.default?.call(n)}}),g=e({}),_=o({name:`NoFormStatus`,setup(e,t){let{slots:n}=t;return g.useProvide({}),()=>n.default?.call(n)}});export{d as a,m as i,g as n,_ as r,h as t};
@@ -0,0 +1 @@
1
+ .page[data-v-837d107a]{padding:4px}.auth-gate[data-v-837d107a]{justify-content:center;padding-top:8vh;display:flex}.auth-card[data-v-837d107a]{border-radius:var(--radius-panel);width:420px;max-width:92vw;box-shadow:var(--shadow-float);padding:26px 26px 18px;position:relative;border:1px solid var(--line-strong)!important}.auth-card[data-v-837d107a] h2{font-family:var(--font-display);margin:0 0 6px;font-size:26px}.sub[data-v-837d107a]{color:var(--ink-faint);margin:0 0 14px;font-size:12.5px}.hint[data-v-837d107a]{color:var(--ink-faint);margin:8px 0 0;font-size:11px}.head-acts[data-v-837d107a]{flex-direction:column;align-items:flex-end;gap:10px;display:flex}.lib-links[data-v-837d107a]{flex-wrap:wrap;justify-content:flex-end;gap:2px 14px;display:inline-flex}.lib-link[data-v-837d107a]{font-family:var(--font-body);color:var(--ink-faint);cursor:pointer;transition:color var(--transition-fast);background:0 0;border:0;padding:2px 0;font-size:12.5px}.lib-link[data-v-837d107a]:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.card-mark[data-v-837d107a]{width:30px;height:30px;color:var(--ink-soft);background:var(--paper-deep);border-radius:var(--radius-panel-sm);flex:none;justify-content:center;align-items:center;font-size:15px;display:inline-flex}.card-head .name[data-v-837d107a]{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);font-size:17px}.card-foot[data-v-837d107a]{justify-content:space-between;align-items:center;gap:8px;margin-top:auto;display:flex}.grid[data-v-837d107a]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.card[data-v-837d107a]{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius-panel);box-shadow:var(--shadow-card);flex-direction:column;gap:10px;padding:16px;transition:border-color .18s,box-shadow .18s,transform .18s;display:flex;position:relative}.card[data-v-837d107a]:hover{border-color:var(--line-strong);transform:translateY(-1px)}.card.placeholder[data-v-837d107a]{opacity:.55;cursor:pointer;border-style:dashed;justify-content:center;align-items:center;min-height:160px;font-size:13px}.ws-empty[data-v-837d107a]{text-align:center;cursor:pointer;border:1px dashed var(--line-strong);border-radius:var(--radius-panel);min-height:min(480px,100vh - 320px);transition:background var(--transition-fast), border-color var(--transition-fast);background:0 0;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;gap:12px;padding:40px 24px;display:flex}.ws-empty[data-v-837d107a]:hover{background:var(--hover-tint);border-color:var(--ink-fainter)}.ws-empty-ico[data-v-837d107a]{color:var(--ink-faint);font-size:34px}.aw-empty-title[data-v-837d107a]{color:var(--ink);font-size:16px;font-weight:600}.aw-empty-sub[data-v-837d107a]{max-width:420px;color:var(--ink-faint);font-size:12.5px;line-height:1.7}.ws-empty-cta[data-v-837d107a]{pointer-events:none;margin-top:6px}.big[data-v-837d107a]{font-size:28px}.card-head[data-v-837d107a]{align-items:center;gap:8px;font-size:15px;display:flex}.card-head[data-v-837d107a]>:first-child{color:var(--accent-cobalt)}.name[data-v-837d107a]{font-family:var(--font-display);flex:auto;font-size:17px;font-weight:600}.op[data-v-837d107a]{cursor:pointer;opacity:.4}.op[data-v-837d107a]:hover{opacity:1}.card-body[data-v-837d107a]{flex:auto;min-height:40px}.ch-row[data-v-837d107a]{cursor:pointer;border-radius:var(--radius-panel);align-items:center;gap:8px;margin:2px 0;padding:5px 7px;font-size:12px;transition:background .15s,transform .15s;display:flex}.ch-row[data-v-837d107a]:hover{background:color-mix(in srgb, var(--accent-cobalt) 7%, transparent);transform:translate(2px)}.dot[data-v-837d107a]{background:var(--line-strong);border-radius:50%;flex:none;width:7px;height:7px}.dot.live[data-v-837d107a]{background:var(--accent-moss);box-shadow:0 0 6px var(--accent-moss)}.ch-name[data-v-837d107a]{flex:none;font-weight:600}.ch-meta[data-v-837d107a]{font-family:var(--font-mono);opacity:.5;text-overflow:ellipsis;white-space:nowrap;flex:auto;font-size:11px;overflow:hidden}.empty[data-v-837d107a]{opacity:.4;padding:12px 6px;font-size:12px}