agentworkshop 0.7.41 → 0.7.44

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 (265) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/B8uy9iRW.js +1 -0
  3. package/.output/public/_nuxt/BGTYYQH-.js +1 -0
  4. package/.output/public/_nuxt/BUmHEJ77.js +2 -0
  5. package/.output/public/_nuxt/BY7YrV_D.js +1 -0
  6. package/.output/public/_nuxt/Bqcgz95s.js +18 -0
  7. package/.output/public/_nuxt/C7UlqPeD.js +1 -0
  8. package/.output/public/_nuxt/CTmDn-YP.js +1 -0
  9. package/.output/public/_nuxt/Cs8pVeVG.js +1 -0
  10. package/.output/public/_nuxt/DKySmNPI.js +14 -0
  11. package/.output/public/_nuxt/Di0NY_ht.js +1 -0
  12. package/.output/public/_nuxt/Du9v6qGB.js +1 -0
  13. package/.output/public/_nuxt/{DGbd-UiG.js → EHlEMRii.js} +1 -1
  14. package/.output/public/_nuxt/Eke1fs-U.js +1 -0
  15. package/.output/public/_nuxt/{DeJykBFf.js → H0BcqZtT.js} +1 -1
  16. package/.output/public/_nuxt/{C4oW1HsE.js → HSYEkkce.js} +1 -1
  17. package/.output/public/_nuxt/{D_OTvQza.js → J9oU00D1.js} +1 -1
  18. package/.output/public/_nuxt/OmpTerminalPanel.BxR5-lvi.css +1 -0
  19. package/.output/public/_nuxt/SSyAPaHc.js +1 -0
  20. package/.output/public/_nuxt/TownView.li4EMQxK.css +1 -0
  21. package/.output/public/_nuxt/VdLk4jLE2.js +1 -0
  22. package/.output/public/_nuxt/_id_.BhsXoEuk.css +1 -0
  23. package/.output/public/_nuxt/_id_.DQyj-WKN.css +1 -0
  24. package/.output/public/_nuxt/{_wsId_.B4WiqkIS.css → _wsId_.CTx-BlfF.css} +1 -1
  25. package/.output/public/_nuxt/aShsv_rG.js +19 -0
  26. package/.output/public/_nuxt/{yF0aYMF1.js → aesgXKSr.js} +3 -3
  27. package/.output/public/_nuxt/agents.B21nUEUX.css +1 -0
  28. package/.output/public/_nuxt/aml.ekTjxFkf.css +1 -0
  29. package/.output/public/_nuxt/builds/latest.json +1 -1
  30. package/.output/public/_nuxt/builds/meta/b5506ef0-f48e-4f14-a6c0-d65e505d0b09.json +1 -0
  31. package/.output/public/_nuxt/channel-templates.DplM1pJ3.css +1 -0
  32. package/.output/public/_nuxt/daq.BdVmoIfe.css +1 -0
  33. package/.output/public/_nuxt/dcw.DCgyzpWV.css +1 -0
  34. package/.output/public/_nuxt/{default.J32SgqFY.css → default.Bh3L2HU8.css} +1 -1
  35. package/.output/public/_nuxt/lHAxdSsj.js +1 -0
  36. package/.output/public/_nuxt/pages.j9rzRocr.css +1 -0
  37. package/.output/public/_nuxt/plugins.DhiZbHU8.css +1 -0
  38. package/.output/public/_nuxt/settings.BRx9rIDg.css +1 -0
  39. package/.output/public/_nuxt/teams.BLlOPB_Z.css +1 -0
  40. package/.output/public/_nuxt/tokens.De8xzszn.css +1 -0
  41. package/.output/public/_nuxt/workshop.D1jFNkrn.css +1 -0
  42. package/.output/server/chunks/_/nitro.mjs +748 -733
  43. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs → OmpTerminalPanel-CVvxpsF7.mjs} +15 -15
  44. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs.map → OmpTerminalPanel-CVvxpsF7.mjs.map} +1 -1
  45. package/.output/server/chunks/build/{TownView--otsnr_7.mjs → TownView-CJ6IsDCc.mjs} +226 -225
  46. package/.output/server/chunks/build/{TownView--otsnr_7.mjs.map → TownView-CJ6IsDCc.mjs.map} +1 -1
  47. package/.output/server/chunks/build/{_id_-Brv-JSvr.mjs → _id_-CVD_H0ir.mjs} +143 -142
  48. package/.output/server/chunks/build/_id_-CVD_H0ir.mjs.map +1 -0
  49. package/.output/server/chunks/build/{_id_-D9pl1OZy.mjs → _id_-CtxMb3qp.mjs} +41 -41
  50. package/.output/server/chunks/build/_id_-CtxMb3qp.mjs.map +1 -0
  51. package/.output/server/chunks/build/{_wsId_-BASfDf0s.mjs → _wsId_-DpY3T-md.mjs} +514 -444
  52. package/.output/server/chunks/build/{_wsId_-BASfDf0s.mjs.map → _wsId_-DpY3T-md.mjs.map} +1 -1
  53. package/.output/server/chunks/build/{agents-CLQqJF2y.mjs → agents-DsCkuXDV.mjs} +49 -46
  54. package/.output/server/chunks/build/agents-DsCkuXDV.mjs.map +1 -0
  55. package/.output/server/chunks/build/{aml-_7FdFL2p.mjs → aml-CT0xKGKI.mjs} +122 -105
  56. package/.output/server/chunks/build/aml-CT0xKGKI.mjs.map +1 -0
  57. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +117 -0
  58. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -0
  59. package/.output/server/chunks/build/{channel-templates-p6SZNjlM.mjs → channel-templates-Dla9FbYa.mjs} +49 -37
  60. package/.output/server/chunks/build/channel-templates-Dla9FbYa.mjs.map +1 -0
  61. package/.output/server/chunks/build/{daq-DkMvD8sg.mjs → daq-DWWSKGAV.mjs} +89 -88
  62. package/.output/server/chunks/build/daq-DWWSKGAV.mjs.map +1 -0
  63. package/.output/server/chunks/build/{dcw-C1jgVJkO.mjs → dcw-CT8k17_E.mjs} +44 -43
  64. package/.output/server/chunks/build/dcw-CT8k17_E.mjs.map +1 -0
  65. package/.output/server/chunks/build/{default-BE4r0FZN.mjs → default-D3525UFX.mjs} +16 -15
  66. package/.output/server/chunks/build/{default-BE4r0FZN.mjs.map → default-D3525UFX.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs → monitor-Dh2Kvaq5.mjs} +2 -2
  68. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs.map → monitor-Dh2Kvaq5.mjs.map} +1 -1
  69. package/.output/server/chunks/build/{pages-B0bUWnC6.mjs → pages-BHcSBM2D.mjs} +24 -18
  70. package/.output/server/chunks/build/pages-BHcSBM2D.mjs.map +1 -0
  71. package/.output/server/chunks/build/{plugins-lGlUr1lj.mjs → plugins-BNgIi61W.mjs} +23 -17
  72. package/.output/server/chunks/build/plugins-BNgIi61W.mjs.map +1 -0
  73. package/.output/server/chunks/build/{settings-Ddd1qx2Z.mjs → settings-ipYBDWdn.mjs} +45 -44
  74. package/.output/server/chunks/build/settings-ipYBDWdn.mjs.map +1 -0
  75. package/.output/server/chunks/build/{teams-MEDLZdMn.mjs → teams-5lx-CwFa.mjs} +47 -44
  76. package/.output/server/chunks/build/teams-5lx-CwFa.mjs.map +1 -0
  77. package/.output/server/chunks/build/{tokens-C7fTM5C2.mjs → tokens-q-IDT8Io.mjs} +73 -53
  78. package/.output/server/chunks/build/tokens-q-IDT8Io.mjs.map +1 -0
  79. package/.output/server/chunks/build/{town-CoQdblbZ.mjs → town-QJWB5wng.mjs} +3 -2
  80. package/.output/server/chunks/build/town-QJWB5wng.mjs.map +1 -0
  81. package/.output/server/chunks/build/{workshop-BL5bhfs0.mjs → workshop-BIlCj_ZP.mjs} +45 -45
  82. package/.output/server/chunks/build/workshop-BIlCj_ZP.mjs.map +1 -0
  83. package/.output/server/chunks/routes/renderer.mjs +1 -1
  84. package/.output/server/chunks/virtual/entry.mjs +637 -86
  85. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  86. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  87. package/.output/server/package.json +1 -1
  88. package/README-zh.md +13 -3
  89. package/README.md +13 -3
  90. package/app/components/AppHeader.vue +961 -959
  91. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  92. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  93. package/app/components/workshop/AgentLanesView.vue +998 -998
  94. package/app/components/workshop/ArtifactCard.vue +120 -120
  95. package/app/components/workshop/AssetLibrary.vue +452 -452
  96. package/app/components/workshop/ChannelSessionList.vue +812 -804
  97. package/app/components/workshop/CommandPalette.vue +269 -269
  98. package/app/components/workshop/Composer.vue +827 -827
  99. package/app/components/workshop/DeviceTwinPanel.vue +643 -643
  100. package/app/components/workshop/EventBlock.vue +602 -602
  101. package/app/components/workshop/FileSelectorModal.vue +188 -188
  102. package/app/components/workshop/InspectorPanel.vue +301 -301
  103. package/app/components/workshop/MemoryPanel.vue +364 -364
  104. package/app/components/workshop/MultiChannelView.vue +189 -189
  105. package/app/components/workshop/TaskBoardView.vue +686 -686
  106. package/app/components/workshop/TaskInspectorDrawer.vue +390 -390
  107. package/app/components/workshop/TranscriptTimeline.vue +601 -601
  108. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  109. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  110. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  111. package/app/components/workshop/blocks/ClusterMember.vue +95 -93
  112. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  113. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  114. package/app/components/workshop/blocks/ClusterStatus.vue +149 -147
  115. package/app/components/workshop/blocks/ClusterTool.vue +158 -158
  116. package/app/components/workshop/terminal/OmpTerminalPanel.vue +1011 -1011
  117. package/app/components/workshop/town/TownView.vue +56 -56
  118. package/app/middleware/locale-cookie.global.ts +22 -0
  119. package/app/pages/aml/index.vue +24 -2
  120. package/app/pages/daq/[id].vue +11 -11
  121. package/app/pages/daq/index.vue +2316 -2316
  122. package/app/pages/dcw/[id].vue +18 -19
  123. package/app/pages/dcw/index.vue +3 -3
  124. package/app/pages/index.vue +987 -981
  125. package/app/pages/plugins/index.vue +317 -311
  126. package/app/pages/settings.vue +1564 -1562
  127. package/app/pages/tokens.vue +15 -15
  128. package/app/pages/workshop/agents.vue +612 -609
  129. package/app/pages/workshop/channel-templates.vue +18 -11
  130. package/app/pages/workshop/index.vue +668 -668
  131. package/app/pages/workshop/teams.vue +743 -740
  132. package/app/pages/workshop/w/[wsId].vue +704 -704
  133. package/app/plugins/locale-restore.client.ts +16 -1
  134. package/app/utils/builtin-catalog.ts +104 -0
  135. package/config.yml +170 -170
  136. package/docs/full-test-plan.md +2 -3
  137. package/i18n/locales/en.ts +293 -35
  138. package/i18n/locales/zh-CN.ts +265 -7
  139. package/package.json +2 -2
  140. package/scripts/_dbg-perms-e2e.mjs +132 -109
  141. package/scripts/_demo-agentteam-capture.mjs +278 -0
  142. package/scripts/_e2e-ui-functional.mjs +371 -0
  143. package/scripts/_i18n-en-cjk-scan.mjs +28 -0
  144. package/scripts/_i18n-en-verify.mjs +107 -0
  145. package/scripts/_i18n-extra-checks.mjs +53 -0
  146. package/scripts/_i18n-scan-hardcoded.mjs +180 -0
  147. package/scripts/_i18n-verify-keys.mjs +50 -0
  148. package/scripts/_loop-biax-campaign.mjs +15 -9
  149. package/scripts/_sweep-button-contrast.mjs +87 -0
  150. package/scripts/ui/record-demo.mjs +557 -0
  151. package/server/plugins-builtin/diag-bridge/index.mjs +608 -661
  152. package/server/plugins-builtin/rag-bridge/index.mjs +57 -133
  153. package/server/services/workshop/daq/drivers.ts +11 -0
  154. package/.output/public/_nuxt/88GOowgO2.js +0 -1
  155. package/.output/public/_nuxt/BN16aRdQ.js +0 -1
  156. package/.output/public/_nuxt/BWVhZntO.js +0 -1
  157. package/.output/public/_nuxt/BXxH0UQE.js +0 -1
  158. package/.output/public/_nuxt/BsROmY89.js +0 -1
  159. package/.output/public/_nuxt/C0ZrS1KL.js +0 -19
  160. package/.output/public/_nuxt/C4s_niy-.js +0 -14
  161. package/.output/public/_nuxt/D6mbFA-a.js +0 -1
  162. package/.output/public/_nuxt/DS8qj8EL.js +0 -1
  163. package/.output/public/_nuxt/DUjW5Yq5.js +0 -1
  164. package/.output/public/_nuxt/Dap5PmTL.js +0 -2
  165. package/.output/public/_nuxt/Dqw1lpr-.js +0 -1
  166. package/.output/public/_nuxt/DvLxILQP.js +0 -1
  167. package/.output/public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css +0 -1
  168. package/.output/public/_nuxt/TownView.f-YOdXRs.css +0 -1
  169. package/.output/public/_nuxt/_id_.D9ymtHB5.css +0 -1
  170. package/.output/public/_nuxt/_id_.jf-_8E_c.css +0 -1
  171. package/.output/public/_nuxt/agents.ZD0rVdHE.css +0 -1
  172. package/.output/public/_nuxt/aml.BN8ZEW4h.css +0 -1
  173. package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +0 -1
  174. package/.output/public/_nuxt/channel-templates.BOtahzPi.css +0 -1
  175. package/.output/public/_nuxt/daq.DjSgY94l.css +0 -1
  176. package/.output/public/_nuxt/dcw.8Y7FqCVN.css +0 -1
  177. package/.output/public/_nuxt/eqq3wWQF.js +0 -18
  178. package/.output/public/_nuxt/pages.D7aSDlUI.css +0 -1
  179. package/.output/public/_nuxt/plugins.sb4nDGqr.css +0 -1
  180. package/.output/public/_nuxt/qr6R6Ha1.js +0 -1
  181. package/.output/public/_nuxt/settings.BTgR-NiE.css +0 -1
  182. package/.output/public/_nuxt/teams.CxnxKVVs.css +0 -1
  183. package/.output/public/_nuxt/tokens.BFY7qv4f.css +0 -1
  184. package/.output/public/_nuxt/workshop.CR_QzeAN.css +0 -1
  185. package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +0 -1
  186. package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +0 -1
  187. package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +0 -1
  188. package/.output/server/chunks/build/aml-_7FdFL2p.mjs.map +0 -1
  189. package/.output/server/chunks/build/channel-templates-p6SZNjlM.mjs.map +0 -1
  190. package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +0 -1
  191. package/.output/server/chunks/build/dcw-C1jgVJkO.mjs.map +0 -1
  192. package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +0 -1
  193. package/.output/server/chunks/build/plugins-lGlUr1lj.mjs.map +0 -1
  194. package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +0 -1
  195. package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +0 -1
  196. package/.output/server/chunks/build/tokens-C7fTM5C2.mjs.map +0 -1
  197. package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +0 -1
  198. package/.output/server/chunks/build/workshop-BL5bhfs0.mjs.map +0 -1
  199. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.continue.json +0 -1
  200. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.json +0 -1
  201. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/054bb4bc4e4217a2ab0b0c6b663747214a9af464f5568ea60e784704e340bb0f.source +0 -153
  202. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/0554197c3d2bac203a1f5c48a5d52495d1336db1bd7aa4f4c19875810363e684.source +0 -153
  203. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/05c203d12a954fffba942e1d626e3f5fec05b18a5aef2bac003b7884a4b77406.source +0 -431
  204. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/145a6e6ba811af35aed31e0cc3211f53706a14980fa069ee9e3c1591139f96f0.source +0 -180
  205. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/1ae0fb281f97899c025e368ca73f41349b01fb5f85b19e08d7ebccff49095ed5.source +0 -112
  206. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/20ee9967aa0541c516db7575bdd4a1a745939bc7016bd10d7635903113edb8ec.source +0 -227
  207. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/233751843aeba9d4c5263f275b8102de00443c06f286918cbd23e0b6729e01aa.source +0 -131
  208. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/263c2e05b425e5c322e60c6475279f963bab3a873eb521b21df7fec935a46597.source +0 -160
  209. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/2ac5eaac28eaaee2178c4b32014df8e732f9dd432a285a872f5b7f31c1395fa4.source +0 -157
  210. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/33a0db0d2d95d2c11d0720090458e5fba1425376f5ceb5b422d1d3471be3226b.source +0 -348
  211. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/359e474ae83db35e4615d3728de6bf694b64d4dce9b536730a3b6518f9c0494a.source +0 -296
  212. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/37a4c3c31c4b70f6b719c53d1e9c4fcba603f31adfdd11bb6ef9f0d094923c56.source +0 -285
  213. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/461feca1c14a695eb8b0f17a6f95fe97eeceabc0510faaea4ba6d25bde147d8d.source +0 -217
  214. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/4cfadbda8591f29d5e1e230dc000e701b756e850441b3900fb596a4d2f6e98c2.source +0 -301
  215. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/50ca2810cf0b248c96948994c0c404531bbad6e553166b6816b3b03bfa0f75d2.source +0 -151
  216. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/52d9e8cb591a9ae86e238c3620a610cd386717bee222c0f37b25b2ac7e523dc4.source +0 -135
  217. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/6c87daafa4c006560a954636a97333f6123153c9d34d96203f7ee3a14e556357.source +0 -156
  218. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/77bc47854b577900621cacf1697f81fa2bc005af129d37614a97a3441c08f99f.source +0 -72
  219. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/7bbb789d3a527817118cf8399ed1861d6a962ade10878fd07223435d333a7089.source +0 -469
  220. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/86b7c1daafc8b60ba9982dde5bf1bcc74265709483c176e71f23ec6fc267451f.source +0 -259
  221. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/8df66d62bd41984d0970e8236882080c5085ac937d07a29779463d6a03b37c76.source +0 -97
  222. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/9962f2d1b3a85137bd40cc835725600b39f89ee02a27c06b2e0402e1eafde115.source +0 -277
  223. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a1090ea066b792cb201739f4994e37bf7c12f52e805239a1eab87f18a537f266.source +0 -171
  224. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a5241091650134d0919897e086a606a3846c8b2b54f8b4c84a8696c145ac3e9e.source +0 -425
  225. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/af19fa4c6e34d5540028be4b17600161283af3a2a2dfc61a3fdc0834436a0c14.source +0 -99
  226. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3713d78e2b2f93905ff6be8d58a8d0a2f42dea322eb67c987fda22ff6a084d5.source +0 -325
  227. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3849943c3aff102d1af815631fc843a2a52c17646a4b04696ece323e483bbec.source +0 -332
  228. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/bac735a3803a6650b7f1eb8f587e6dc5c68ea055000c3c99a11789438b78e837.source +0 -43
  229. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d32c24d61eb8b33c73e5a8fc7e4dc7ef437aed238ee4371c2b00617e6104090a.source +0 -154
  230. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d5170dc9a9879fda04fdf91d8a110d4efb6787ee38dda596d4da899883d36a72.source +0 -531
  231. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/dc59bcd7bb397be63ba2f2c3fec23f3782dcb17d2d75a9981eeced761f33eb32.source +0 -439
  232. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/eb5ff8cf66b92aec7bf6726781d8df74faa2b030c3aaac17d6b00c1fc04c9b32.source +0 -323
  233. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f10615a6fae18436e70d1201b2d44fdae3174a3aa7bb4db97dea1b3ed291d721.source +0 -433
  234. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f36d3e271668bc1260c2823542d22dbf1d0f7041ff16b1ac175bce2256e582ca.source +0 -280
  235. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f94449380af09f31ac352152007146a75cc80bae8d6411ffe57b2c56f933b0ff.source +0 -117
  236. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/fe4dfd81178fd6b648335f6405d9ede71319aebde796008e50db21f8adf44c99.source +0 -160
  237. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/ffb4e3aa548cfdadabaa44ab599f9b6a3ca6288176a2cc7a4b2fc2a12b5fb848.source +0 -101
  238. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +0 -14
  239. package/scripts/_dbg-audit-all-pages.mjs +0 -43
  240. package/scripts/_dbg-daq-frames-e2e.mjs +0 -118
  241. package/scripts/_dbg-daq-rowstyle-verify.mjs +0 -112
  242. package/scripts/_dbg-hitl-timeout-e2e.mjs +0 -93
  243. package/scripts/_dbg-live-line-e2e.mjs +0 -279
  244. package/scripts/_dbg-minimal-omp.mjs +0 -77
  245. package/scripts/_dbg-mode-nav.mjs +0 -173
  246. package/scripts/_dbg-real-scenario-timeline.log +0 -55
  247. package/scripts/_dbg-team-repro.mjs +0 -76
  248. package/scripts/_dbg-town-agents-probe.mjs +0 -60
  249. package/scripts/_dbg-visual-acceptance.mjs +0 -63
  250. package/scripts/_townview_style.css +0 -1185
  251. package/scripts/_townview_template.html +0 -1215
  252. package/server/data/agent-node-bindings.json +0 -554
  253. package/server/data/daq-templates.json +0 -16
  254. package/server/data/daqs.json +0 -7464
  255. package/server/data/dcw-lines.json +0 -1787
  256. package/server/data/dcw-products.json +0 -1626
  257. package/server/data/dcw-recipes.json +0 -4672
  258. package/server/data/dcw-rollback.json +0 -20754
  259. package/server/data/dcw-runs.json +0 -6354
  260. package/server/data/dcw-templates.json +0 -146
  261. package/server/data/dcw-writes.json +0 -15650
  262. package/server/data/dcws.json +0 -9033
  263. package/server/data/device-twins.json +0 -133
  264. package/server/data/line-runs.json +0 -322
  265. package/server/data/scene-layouts.json +0 -277
@@ -1,5 +1,5 @@
1
1
  {
2
- "date": "2026-09-19T04:48:47.133Z",
2
+ "date": "2026-09-20T12:47:55.928Z",
3
3
  "preset": "node-server",
4
4
  "framework": {
5
5
  "name": "nuxt",
@@ -0,0 +1 @@
1
+ import{a as e,c as t,n}from"./BU83-NnX.js";import{S as r,Ut as i,V as a,Vt as ee,W as o,b as s,ct as c,d as l,dt as te,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,xt as _,y as v}from"./CSkxz2NX.js";import{d as ne}from"./BJHKLJJU.js";import{n as y}from"./DtYHUi5Z.js";import{n as re}from"./KZQX7xoM.js";import{n as ie,r as ae,t as oe}from"./DDgJcSET.js";import{t as se}from"./aWWIh8YL.js";import{t as ce}from"./DBHNsT1Y.js";import{i as le,n as ue,t as de}from"./BCGafdXT.js";import{r as fe,t as pe}from"./CzlMDL5H.js";import{t as me}from"./jZsY8yYz.js";import{n as he,t as ge}from"./CYWVXZTS2.js";import{t as _e}from"./C4DWUZ6d2.js";import{t as ve}from"./DZtm4l-P2.js";import{t as ye}from"./CClOy-Hz2.js";import{t as b}from"./DIaZ2PTo2.js";import{t as x}from"./BDNMzG2s2.js";import{t as S}from"./D0ZBQrN_2.js";import{t as C}from"./BN6iuJEg2.js";import{t as w}from"./CNs_Ozdc2.js";import{i as T}from"./Du9v6qGB.js";var be={class:`page`},xe={class:`head`},Se={class:`sub`},Ce={class:`toolbar`},we={key:0,class:`admin-note`},Te={class:`grid`},Ee={class:`card-head`},De={class:`name`},Oe={class:`owner`},ke={class:`members`},Ae={class:`member-name`},je={class:`member-harness`},Me=[`onClick`],Ne={class:`aw-mono`},Pe={key:0,class:`plug-builtin-tag`},Fe={class:`plug-hint`},Ie={class:`plug-source`},Le={class:`plug-text`},Re={class:`plug-name`},ze={class:`aw-mono`},Be={key:0,class:`plug-builtin-tag`},Ve={class:`plug-desc`},He={key:0,class:`plug-hint`},E=x(r({__name:`teams`,setup(r){let{t:x}=re(),E=e=>T(x,e);w({layout:`default`});let D=C(),O=b(),k=h([]),A=h([]),Ue=h([]),We=h(!1),j=async()=>{We.value=!0;try{let[e,t,n]=await Promise.all([D.listTeams(),D.listTemplates(),D.listChannels()]);k.value=e?.data??[],A.value=t?.data??[],Ue.value=n?.data??[]}finally{We.value=!1}};j();let Ge=h({});(async()=>{try{let e=(await D.listHarnesses())?.data?.harnesses;if(Array.isArray(e)){let t={};for(let n of e)t[n.id]=n.available!==!1;Ge.value=t}}catch{}})();let M=e=>Ge.value[e.harness]===!1,Ke=l(()=>A.value.map(e=>{let t=M(e);return{value:e.id,label:t?`${e.name}(${e.harness} · ${x(`agents.notInstalled`)})`:`${e.name}(${e.harness})`,disabled:t}})),N=h(`all`),qe=l(()=>{let e=O.user?.id;switch(N.value){case`mine`:return k.value.filter(t=>t.ownerUserId===e);case`public`:return k.value.filter(e=>e.visibility===`public`);case`builtin`:return k.value.filter(e=>e.isBuiltin);default:return k.value}}),P=e=>!e.isBuiltin&&(e.ownerUserId===O.user?.id||O.isAdmin),F=e=>e.isBuiltin?{text:x(`teams.k3x23c018`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:x(`teams.k3wv1t019`),color:`green`}:{text:x(`teams.k447jj020`),color:`default`},I=h(!1),L=te({name:``,description:``,visibility:`private`}),R=h([]),z=h({});(async()=>{try{let e=await D.listPlugins(),t=e?.plugins??e?.data?.plugins??[],n=(Array.isArray(t)?t:[]).filter(e=>e.enabled!==!1);R.value=n;let r={};for(let e of n)r[e.name]=!0;z.value=r}catch{}})();let Je=l({get:()=>Object.entries(z.value).filter(([,e])=>e).map(([e])=>e),set:e=>{let t={};for(let n of R.value)t[n.name]=e.includes(n.name);z.value=t}}),Ye=async()=>{if(!L.name.trim()){e.warning(x(`teams.k1bvcdo2021`));return}let t=Object.entries(z.value).map(([e,t])=>({name:e,enabled:t}));await D.createTeam({name:L.name.trim(),description:L.description||void 0,visibility:L.visibility,plugins:t}),e.success(x(`teams.k3n5hak022`)),I.value=!1,L.name=``,L.description=``,L.visibility=`private`,z.value=Object.fromEntries(Object.entries(z.value).map(([e])=>[e,!0])),j()},Xe=async(t,n)=>{try{await D.updateTeam(t.id,{visibility:n?`public`:`private`}),e.success(x(n?`teams.k1globhp023`:`teams.k1xxabaf024`)),j()}catch(t){e.error(S(t))}},B=h(!1),V=h(null),H=h(``),U=h(`worker`),Ze=e=>{V.value=e,H.value=``,U.value=`worker`,B.value=!0},Qe=async()=>{if(!V.value||!H.value){e.warning(x(`teams.k1kw4rtj025`));return}try{await D.addTeamMember(V.value.id,{agentId:H.value,role:U.value}),e.success(x(`teams.k3n5hzw026`)),B.value=!1,j()}catch(t){e.error(S(t))}},$e=async(e,t)=>{await D.removeTeamMember(e.id,t),j()},W=h(!1),G=h(null),K=h(``),et=h(!1),tt=e=>{G.value=e,K.value=``,W.value=!0},nt=async()=>{if(!G.value||!K.value){e.warning(x(`teams.selectChannel`));return}et.value=!0;try{let t=(await D.deployTeam(G.value.id,K.value))?.data?.agents?.length??0;e.success(x(`teams.kh90glh031`,{p0:t})),W.value=!1}catch(t){e.error(S(t))}finally{et.value=!1}},rt=async t=>{await D.deleteTeam(t.id),e.success(x(`teams.k1oxjrxx027`)),j()},q=h(!1),J=h(null),Y=h([]),X=h(`default`),Z=h(!1),Q=h(null),it=e=>{J.value=e,Y.value=[],X.value=`default`,q.value=!0,$(e)},$=async t=>{Z.value=!0;try{let e=(await D.listTeamPlugins(t.id))?.data??{};Y.value=e.plugins??[],X.value=e.source===`explicit`?`explicit`:`default`}catch(t){e.error(S(t))}finally{Z.value=!1}},at=async(t,n)=>{if(!J.value||Q.value)return;let r=J.value.id;Q.value=t.name;try{let i=Y.value.map(e=>({name:e.name,enabled:e.name===t.name?n:e.enabled})),a=(await D.putTeamPlugins(r,{plugins:i}))?.data??{};Y.value=a.plugins??i.map(e=>({...e})),X.value=a.source===`explicit`?`explicit`:`default`,e.success(x(`teams.k1plugon043`))}catch(t){e.error(S(t))}finally{Q.value=null}};return y({title:()=>x(`titles.teams`)}),(e,r)=>{let l=t,te=me,h=oe,y=de,re=ye,b=fe,x=pe,S=_e,C=ve,w=ce,T=ae,D=ue,A=le,j=ge,Ge=he,M=ie,z=n,$=se;return a(),d(`div`,be,[u(`div`,xe,[u(`div`,null,[u(`h2`,null,`AgentTeam `+i(e.$t(`teams.k3svl8y028`)),1),u(`p`,Se,i(e.$t(`teams.k12gl4wn008`)),1)]),s(te,null,{default:g(()=>[s(l,{onClick:r[0]||=t=>(`navigateTo`in e?e.navigateTo:_(ne))(`/workshop`)},{default:g(()=>[v(i(e.$t(`teams.krpx6qa009`)),1)]),_:1}),s(l,{type:`primary`,onClick:r[1]||=e=>I.value=!0},{default:g(()=>[v(i(e.$t(`teams.k1efmuyx002`)),1)]),_:1})]),_:1})]),u(`div`,Ce,[s(h,{value:_(N),"onUpdate:value":r[2]||=e=>c(N)?N.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:_(k).length})},{value:`mine`,label:e.$t(`chips.mine`)},{value:`public`,label:e.$t(`chips.public`)},{value:`builtin`,label:e.$t(`chips.builtin`)}]},null,8,[`value`,`options`]),_(O).isAdmin?(a(),d(`span`,we,[r[15]||=u(`span`,{class:`i-tabler-shield-check`},null,-1),v(` `+i(e.$t(`teams.k1bpgi8h010`)),1)])):p(``,!0)]),s(C,{spinning:_(We)},{default:g(()=>[u(`div`,Te,[(a(!0),d(f,null,o(_(qe),t=>(a(),d(`div`,{key:t.id,class:`card`},[u(`div`,Ee,[u(`span`,De,i(E(t)),1),s(y,{color:F(t).color,class:`vis-tag`},{default:g(()=>[F(t).icon?(a(),d(`span`,{key:0,class:ee(F(t).icon)},null,2)):p(``,!0),v(i(F(t).text),1)]),_:2},1032,[`color`]),!t.isBuiltin&&P(t)?(a(),m(re,{key:0,checked:t.visibility===`public`,size:`small`,title:t.visibility===`public`?e.$t(`teams.toPrivate`):e.$t(`teams.toPublic`),onChange:e=>Xe(t,e===!0)},null,8,[`checked`,`title`,`onChange`])):p(``,!0),u(`span`,Oe,i(t.ownerName??`-`),1),P(t)?(a(),m(S,{key:1},{overlay:g(()=>[s(x,null,{default:g(()=>[s(b,{onClick:e=>tt(t)},{default:g(()=>[v(i(e.$t(`teams.deployToChannel`)),1)]),_:1},8,[`onClick`]),s(b,{onClick:e=>it(t)},{default:g(()=>[v(i(e.$t(`teams.k1plugon047`)),1)]),_:1},8,[`onClick`]),s(b,{danger:``,onClick:e=>rt(t)},{default:g(()=>[v(i(e.$t(`teams.k1bpojhf011`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),default:g(()=>[r[16]||=u(`span`,{class:`i-tabler-dots op`},null,-1)]),_:2},1024)):(a(),m(l,{key:2,class:`deploy-btn`,size:`small`,type:`default`,title:e.$t(`teams.kxheuf1001`),onClick:e=>tt(t)},{default:g(()=>[v(i(e.$t(`teams.k48ja7012`)),1)]),_:1},8,[`title`,`onClick`]))]),u(`div`,ke,[(a(!0),d(f,null,o(t.members,e=>(a(),d(`div`,{key:e.templateId,class:`member`},[s(y,{color:e.role===`lead`?`gold`:`blue`,class:`role`},{default:g(()=>[v(i(e.role),1)]),_:2},1032,[`color`]),u(`span`,Ae,i(E(e)),1),u(`span`,je,i(e.harness),1),P(t)?(a(),d(`span`,{key:0,class:`i-tabler-x rm`,onClick:n=>$e(t,e.templateId)},null,8,Me)):p(``,!0)]))),128)),P(t)?(a(),m(l,{key:0,size:`small`,type:`dashed`,block:``,onClick:e=>Ze(t)},{default:g(()=>[v(i(e.$t(`teams.krt2oib013`)),1)]),_:1},8,[`onClick`])):p(``,!0)])]))),128)),_(qe).length===0?(a(),d(`div`,{key:0,class:`card placeholder`,onClick:r[3]||=e=>I.value=!0},[r[17]||=u(`span`,{class:`i-tabler-plus big`},null,-1),u(`span`,null,i(e.$t(`teams.k6cbbgf014`)),1)])):p(``,!0)])]),_:1},8,[`spinning`]),s(z,{open:_(I),"onUpdate:open":r[8]||=e=>c(I)?I.value=e:null,title:e.$t(`teams.k1efmuyx002`),"ok-text":e.$t(`common.create`),"cancel-text":e.$t(`common.cancel`),onOk:Ye},{default:g(()=>[s(M,{layout:`vertical`},{default:g(()=>[s(T,{label:e.$t(`teams.k3xhia003`)},{default:g(()=>[s(w,{value:_(L).name,"onUpdate:value":r[4]||=e=>_(L).name=e},null,8,[`value`])]),_:1},8,[`label`]),s(T,{label:e.$t(`teams.k40gkk004`)},{default:g(()=>[s(w,{value:_(L).description,"onUpdate:value":r[5]||=e=>_(L).description=e},null,8,[`value`])]),_:1},8,[`label`]),s(T,{label:e.$t(`teams.k3lrqn0005`)},{default:g(()=>[s(A,{value:_(L).visibility,"onUpdate:value":r[6]||=e=>_(L).visibility=e},{default:g(()=>[s(D,{value:`private`},{default:g(()=>[v(i(e.$t(`teams.k17jfge3015`)),1)]),_:1}),s(D,{value:`public`},{default:g(()=>[v(i(e.$t(`teams.k1h2lq0o016`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`]),_(R).length?(a(),m(T,{key:0,label:e.$t(`teams.k1plugon041`)},{default:g(()=>[s(Ge,{value:_(Je),"onUpdate:value":r[7]||=e=>c(Je)?Je.value=e:null,class:`plug-create-group`},{default:g(()=>[(a(!0),d(f,null,o(_(R),t=>(a(),m(j,{key:t.name,value:t.name},{default:g(()=>[u(`span`,Ne,i(t.name),1),t.builtin?(a(),d(`span`,Pe,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),_:2},1032,[`value`]))),128))]),_:1},8,[`value`]),u(`div`,Fe,i(e.$t(`teams.k1plugon042`)),1)]),_:1},8,[`label`])):p(``,!0)]),_:1})]),_:1},8,[`open`,`title`,`ok-text`,`cancel-text`]),s(z,{open:_(B),"onUpdate:open":r[11]||=e=>c(B)?B.value=e:null,title:e.$t(`teams.k6ljhyv029`,{p0:_(V)?.name??``}),"ok-text":e.$t(`teams.joinOk`),"cancel-text":e.$t(`common.cancel`),onOk:Qe},{default:g(()=>[s(M,{layout:`vertical`},{default:g(()=>[s(T,{label:e.$t(`teams.k41ds5006`)},{default:g(()=>[s($,{value:_(H),"onUpdate:value":r[9]||=e=>c(H)?H.value=e:null,options:_(Ke)},null,8,[`value`,`options`])]),_:1},8,[`label`]),s(T,{label:e.$t(`teams.k479op007`)},{default:g(()=>[s(A,{value:_(U),"onUpdate:value":r[10]||=e=>c(U)?U.value=e:null},{default:g(()=>[s(D,{value:`worker`},{default:g(()=>[...r[18]||=[v(` worker `,-1)]]),_:1}),s(D,{value:`lead`},{default:g(()=>[v(i(e.$t(`teams.keowzlv017`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`,`ok-text`,`cancel-text`]),s(z,{open:_(W),"onUpdate:open":r[13]||=e=>c(W)?W.value=e:null,title:e.$t(`teams.k1c0o6oe030`,{p0:_(G)?.name??``}),"confirm-loading":_(et),"ok-text":e.$t(`teams.deployOk`),"cancel-text":e.$t(`common.cancel`),onOk:nt},{default:g(()=>[s(M,{layout:`vertical`},{default:g(()=>[s(T,{label:e.$t(`teams.targetChannelLabel`)},{default:g(()=>[s($,{value:_(K),"onUpdate:value":r[12]||=e=>c(K)?K.value=e:null,options:_(Ue).map(e=>({value:e.id,label:e.name}))},null,8,[`value`,`options`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`,`confirm-loading`,`ok-text`,`cancel-text`]),s(z,{open:_(q),"onUpdate:open":r[14]||=e=>c(q)?q.value=e:null,title:e.$t(`teams.k1plugon040`,{p0:_(J)?.name??``}),footer:null},{default:g(()=>[s(C,{spinning:_(Z)},{default:g(()=>[u(`p`,Ie,[_(X)===`explicit`?(a(),d(f,{key:0},[v(i(e.$t(`teams.k1plugon045`)),1)],64)):(a(),d(f,{key:1},[v(i(e.$t(`teams.k1plugon044`)),1)],64))]),(a(!0),d(f,null,o(_(Y),t=>(a(),d(`div`,{key:t.name,class:`plug-row`},[u(`div`,Le,[u(`div`,Re,[u(`span`,ze,i(t.name),1),t.builtin?(a(),d(`span`,Be,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),u(`div`,Ve,i(t.description||`—`),1)]),s(re,{checked:t.enabled,size:`small`,loading:_(Q)===t.name,onChange:e=>at(t,e===!0)},null,8,[`checked`,`loading`,`onChange`])]))),128)),_(Y).length===0&&!_(Z)?(a(),d(`div`,He,i(e.$t(`teams.k1plugon046`)),1)):p(``,!0)]),_:1},8,[`spinning`])]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-ce9bd2cc`]]);export{E as default};
@@ -0,0 +1 @@
1
+ import{Ht as e,S as t,Ut as n,V as r,Vt as i,W as a,b as o,d as s,dt as c,f as l,h as u,i as d,m as f,nt as p,pt as m,tt as h,xt as g,y as _}from"./CSkxz2NX.js";import{c as v,f as y,l as b,o as ee,t as x}from"./D6uzXueg.js";import{t as te}from"./BHA40aHa.js";import{n as ne}from"./KZQX7xoM.js";import{t as S}from"./BDNMzG2s2.js";import{t as C}from"./D0ZBQrN_2.js";import{r as w,t as re}from"./ca4TJ3Op.js";import{r as ie}from"./Du9v6qGB.js";var ae={class:`page`},oe={class:`aw-page-head`},se={class:`sub`},ce={class:`badges mono`},le=[`title`],ue={class:`badge`},de={key:0,class:`banner bad`},fe={class:`fleet-filter`},pe={class:`aw-seg`},me=[`placeholder`],he={class:`line-grid aw-stagger`},ge={class:`lc-head`},_e={class:`lc-name`},ve=[`title`,`onClick`],ye=[`title`,`onClick`],be={key:0,class:`lc-run mono`},xe={class:`lc-stats mono`},Se={class:`lc-ctl`},Ce=[`onUpdate:modelValue`,`disabled`,`title`],we={value:``},Te=[`value`,`disabled`],Ee=[`disabled`,`onClick`],De=[`disabled`,`onClick`],Oe={key:1,class:`banner`},ke={key:2,class:`banner`},Ae={class:`modal`},je={class:`m-title`},Me={class:`f`},Ne=[`placeholder`],Pe={class:`f`},Fe=[`placeholder`],Ie={class:`f`},Le={class:`color-row`},Re=[`onClick`],ze={class:`dim`},Be={key:0,class:`m-err`},Ve={class:`m-actions`},He=[`disabled`],Ue={class:`modal`},We={class:`m-title`},Ge={class:`f`},Ke=[`placeholder`],qe={class:`f`},Je=[`placeholder`],Ye={class:`f`},Xe={class:`color-row`},Ze=[`onClick`],Qe={class:`dim`},$e={key:0,class:`m-err`},et={class:`m-actions`},tt=[`disabled`],nt={class:`modal`},rt={class:`m-title danger-title`},it={class:`del-summary`},at={class:`del-purge`},ot={key:0,class:`m-err`},st={class:`m-actions`},ct=[`disabled`],lt={class:`modal wide`},ut={class:`m-title`},dt={class:`dim mono`},ft={class:`dim tpl-hint`},pt={class:`tpl-list`},mt=[`title`],ht={class:`mono dim`},gt={key:0,class:`tpl-sem`},_t=[`onClick`],vt={class:`sec-label`},yt={class:`tpl-form`},bt={class:`f`},xt=[`placeholder`],St={class:`f`},Ct=[`placeholder`],wt={class:`f`},Tt=[`placeholder`],Et={class:`f`},Dt=[`placeholder`],Ot={class:`f`},kt={class:`f`},At={class:`f`},jt={class:`f`},Mt=[`value`],Nt={class:`f`},Pt=[`placeholder`],Ft={key:0,class:`m-err`},It={class:`m-actions`},Lt=[`disabled`],Rt={key:3,class:`banner bad`},T=S(t({__name:`index`,setup(t){let{t:S}=ne(),T=re();T.load();let E=s(()=>T.lines.map(e=>({line:e,nodes:T.nodes.filter(t=>t.lineId===e.id).length,products:T.products.filter(t=>t.lineId===e.id).length,recipes:T.recipes.filter(t=>t.lineId===e.id).length}))),D=s(()=>T.nodes.filter(e=>!e.lineId).length+T.products.filter(e=>!e.lineId).length),O=m(`all`),k=m(``),A=s(()=>E.value.filter(e=>T.lineStateOf(e.line.id).active).length),j=s(()=>E.value.filter(e=>{let t=T.lineStateOf(e.line.id).active;if(O.value===`running`&&!t||O.value===`idle`&&t)return!1;let n=k.value.trim().toLowerCase();return!(n&&!e.line.name.toLowerCase().includes(n)&&!(e.line.description??``).toLowerCase().includes(n))})),M=m(!1),N=m(!1),P=m(``),F=c({name:``,description:``,color:``}),I=s(()=>w[T.lines.length%w.length]??`#3aa0ff`);function zt(){F.name=``,F.description=``,F.color=``,P.value=``,M.value=!0}async function Bt(){N.value=!0,P.value=``;try{await T.createLine({name:F.name.trim(),description:F.description.trim(),color:F.color||void 0}),M.value=!1}catch(e){P.value=C(e)}finally{N.value=!1}}let L=m(``),R=m(``),z=c({});async function Vt(e){L.value=e.line.id,R.value=``;try{let t=z[e.line.id]??``;if(!t)throw Error(S(`dcw.k188cswn039`));await T.startLine(e.line.id,t)}catch(e){R.value=C(e)}finally{L.value=``}}async function Ht(e){L.value=e.line.id,R.value=``;try{await T.stopLine(e.line.id)}catch(e){R.value=C(e)}finally{L.value=``}}function B(e){return T.recipes.filter(t=>t.lineId===e)}let V=m(!1),H=m(!1),U=m(``),W=m(!0),G=m(null);function Ut(e){G.value=e,W.value=!0,U.value=``,V.value=!0}async function Wt(){if(G.value){H.value=!0,U.value=``;try{await T.removeLine(G.value.line.id,W.value),V.value=!1}catch(e){U.value=C(e)}finally{H.value=!1}}}let K=m(!1),q=m(!1),J=m(``),Y=c({id:``,name:``,description:``,color:``});function Gt(e){Y.id=e.line.id,Y.name=e.line.name,Y.description=e.line.description,Y.color=e.line.color,J.value=``,K.value=!0}async function Kt(){q.value=!0,J.value=``;try{await T.updateLine(Y.id,{name:Y.name.trim(),description:Y.description.trim(),color:Y.color||void 0}),K.value=!1}catch(e){J.value=C(e)}finally{q.value=!1}}let X=m(!1),Z=m(``),Q=c({name:``,ch:``,code:``,unit:``,min:``,max:``,decimals:1,icon:`gateway`,semantics:``}),qt=[{key:`thermo`,label:S(`dcw.k422b8040`)},{key:`pressure`,label:S(`dcw.k3x6ff041`)},{key:`tension`,label:S(`dcw.k3z9xc042`)},{key:`encoder`,label:S(`dcw.kjb3vhs043`)},{key:`camera`,label:S(`dcw.k47atw044`)},{key:`gateway`,label:S(`dcw.k48c07045`)}];async function Jt(){Z.value=``;try{if(!Q.name.trim())throw Error(S(`dcw.k6ugbw2046`));if(Q.min===``||Q.max===``)throw Error(S(`dcw.k13awowo047`));await T.createTemplate({name:Q.name.trim(),ch:Q.ch.trim()||Q.name.trim(),code:Q.code.trim()||`CUSTOM`,unit:Q.unit.trim()||`-`,min:Number(Q.min),max:Number(Q.max),decimals:Number(Q.decimals)||0,icon:Q.icon,semantics:Q.semantics.trim()||void 0}),Q.name=``,Q.ch=``,Q.code=``,Q.unit=``,Q.min=``,Q.max=``}catch(e){Z.value=C(e)}}async function Yt(e){Z.value=``;try{await fetch(`/api/workshop/dcw/templates/${e}`,{method:`DELETE`,headers:{authorization:`Bearer ${document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``}`}}).then(async e=>{let t=await e.json().catch(()=>({}));if(t?.code!==0)throw Error(t?.message??S(`dcw.k1bphrb3048`))});let t=T.templates.findIndex(t=>t.key===e);t>=0&&T.templates.splice(t,1)}catch(e){Z.value=C(e)}}let $=s(()=>T.templates.filter(e=>e.builtin).length);return(t,s)=>{let c=te;return r(),u(`div`,ae,[l(`div`,oe,[l(`div`,null,[s[27]||=l(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / LINE OPERATIONS `,-1),l(`h1`,null,n(t.$t(`dcw.k1b2tk5c009`)),1),l(`p`,se,n(t.$t(`dcw.k5q0aqi010`)),1)]),l(`div`,ce,[D.value?(r(),u(`span`,{key:0,class:`badge warn-badge`,title:t.$t(`dcw.k1i5a9vw001`)},n(t.$t(`dcw.k3ootr6049`))+` `+n(D.value),9,le)):f(``,!0),l(`span`,ue,n(t.$t(`dcw.k3wj9n050`))+` `+n(g(T).lines.length),1),l(`button`,{class:`badge tpl-btn`,onClick:s[0]||=e=>X.value=!0},n(t.$t(`dcw.k11nndsp051`))+` `+n(g(T).templates.length),1)])]),R.value?(r(),u(`p`,de,n(R.value),1)):f(``,!0),l(`div`,fe,[l(`div`,pe,[l(`button`,{class:i({on:O.value===`all`}),onClick:s[1]||=e=>O.value=`all`},n(t.$t(`common.all`))+` `+n(E.value.length),3),l(`button`,{class:i({on:O.value===`running`}),onClick:s[2]||=e=>O.value=`running`},n(t.$t(`dcw.k1eox1el055`))+` `+n(A.value),3),l(`button`,{class:i({on:O.value===`idle`}),onClick:s[3]||=e=>O.value=`idle`},n(t.$t(`dcw.k149r6y7059`))+` `+n(E.value.length-A.value),3)]),p(l(`input`,{"onUpdate:modelValue":s[4]||=e=>k.value=e,class:`inp fleet-search`,type:`search`,placeholder:t.$t(`dcw.filterSearchPh`)},null,8,me),[[b,k.value]])]),l(`div`,he,[(r(!0),u(d,null,a(j.value,f=>(r(),u(`div`,{key:f.line.id,class:i([`line-card aw-liftable`,{idle:!g(T).lineStateOf(f.line.id).active}]),style:e({"--lc":f.line.color})},[l(`div`,ge,[s[30]||=l(`span`,{class:`lc-dot`},null,-1),l(`b`,_e,n(f.line.name),1),l(`span`,{class:i([`lc-state`,{on:g(T).lineStateOf(f.line.id).active}])},n(g(T).lineStateOf(f.line.id).active?t.$t(`dcw.k1eox1el055`):t.$t(`dcw.k149r6y7059`)),3),l(`button`,{class:`lc-act`,title:t.$t(`common.edit`),onClick:e=>Gt(f)},[...s[28]||=[l(`span`,{class:`i-tabler-pencil`},null,-1)]],8,ve),l(`button`,{class:`lc-act danger`,title:t.$t(`dcw.k3xakp026`),onClick:e=>Ut(f)},[...s[29]||=[l(`span`,{class:`i-tabler-trash`},null,-1)]],8,ye)]),g(T).lineStateOf(f.line.id).active?(r(),u(`small`,be,n(g(T).lineStateOf(f.line.id).productName)+` · `+n(g(T).lineStateOf(f.line.id).recipeName)+` · `+n(t.$t(`dcw.k3zz0f052`))+` `+n(g(T).lineStateOf(f.line.id).taggedSamples),1)):(r(),u(`small`,{key:1,class:i([`lc-run dim`,{ph:!f.line.description}])},n(f.line.description||t.$t(`dcw.k18moyq1056`)),3)),l(`div`,xe,[l(`span`,null,[_(n(t.$t(`dcw.k45uio011`))+` `,1),l(`b`,null,n(f.nodes),1)]),l(`span`,null,[_(n(t.$t(`dcw.k3waz1012`))+` `,1),l(`b`,null,n(f.products),1)]),l(`span`,null,[_(n(t.$t(`dcw.k48grv013`))+` `,1),l(`b`,null,n(f.recipes),1)])]),l(`div`,Se,[g(T).lineStateOf(f.line.id).active?(r(),u(`button`,{key:1,class:`pill-btn stop`,disabled:L.value===f.line.id,onClick:e=>Ht(f)},n(t.$t(`dcw.k148rclf015`)),9,De)):(r(),u(d,{key:0},[p(l(`select`,{"onUpdate:modelValue":e=>z[f.line.id]=e,class:`inp`,disabled:B(f.line.id).length===0,title:t.$t(`dcw.k1dhaby4003`)},[l(`option`,we,n(B(f.line.id).length?t.$t(`dcw.kutxzsz057`):t.$t(`dcw.k1elczt9060`)),1),(r(!0),u(d,null,a(B(f.line.id),e=>(r(),u(`option`,{key:e.id,value:e.id,disabled:e.params.length===0},n(e.name)+`(`+n(e.params.length)+`) `,9,Te))),128))],8,Ce),[[v,z[f.line.id]]]),l(`button`,{class:`pill-btn`,disabled:L.value===f.line.id||!z[f.line.id],onClick:e=>Vt(f)},n(t.$t(`dcw.k149b4vg014`)),9,Ee)],64))]),o(c,{class:`lc-manage`,to:`/dcw/${f.line.id}`},{default:h(()=>[_(n(t.$t(`dcw.k1fwqw5g016`)),1)]),_:1},8,[`to`])],6))),128)),l(`button`,{class:`line-card new-card`,onClick:zt},[s[31]||=l(`span`,{class:`i-tabler-plus`},null,-1),_(` `+n(t.$t(`dcw.k1efe391017`))+` `,1),l(`small`,null,n(t.$t(`dcw.k19dlbli053`)),1)])]),g(T).loaded&&g(T).lines.length===0?(r(),u(`p`,Oe,n(t.$t(`dcw.k1sk85vs018`)),1)):g(T).loaded&&j.value.length===0?(r(),u(`p`,ke,n(t.$t(`dcw.filterEmpty`)),1)):f(``,!0),o(x,{name:`modal`},{default:h(()=>[M.value?(r(),u(`div`,{key:0,class:`modal-mask`,onClick:s[8]||=y(e=>M.value=!1,[`self`])},[l(`div`,Ae,[l(`h3`,je,n(t.$t(`dcw.k1efe391017`)),1),l(`label`,Me,[l(`span`,null,[_(n(t.$t(`dcw.k1b2ioko019`)),1),s[32]||=l(`em`,null,`*`,-1)]),p(l(`input`,{"onUpdate:modelValue":s[5]||=e=>F.name=e,class:`inp`,placeholder:t.$t(`dcw.kru37i3004`)},null,8,Ne),[[b,F.name]])]),l(`label`,Pe,[l(`span`,null,n(t.$t(`dcw.k24dxcd020`)),1),p(l(`input`,{"onUpdate:modelValue":s[6]||=e=>F.description=e,class:`inp`,placeholder:t.$t(`dcw.k1f2nwsp005`)},null,8,Fe),[[b,F.description]])]),l(`div`,Ie,[l(`span`,null,n(t.$t(`dcw.k1x7nubr021`)),1),l(`div`,Le,[(r(!0),u(d,null,a(g(w),t=>(r(),u(`button`,{key:t,class:i([`color-dot`,{on:F.color===t}]),style:e({background:t}),onClick:e=>F.color=F.color===t?``:t},null,14,Re))),128)),l(`small`,ze,n(F.color||t.$t(`dcw.k1qidbpy061`,{p0:I.value})),1)])]),P.value?(r(),u(`p`,Be,n(P.value),1)):f(``,!0),l(`div`,Ve,[l(`button`,{class:`mini-btn`,onClick:s[7]||=e=>M.value=!1},n(t.$t(`dcw.k3xdnn022`)),1),l(`button`,{class:`pill-btn`,disabled:N.value||!F.name.trim(),onClick:Bt},n(t.$t(`dcw.k3wzi2023`)),9,He)])])])):f(``,!0)]),_:1}),o(x,{name:`modal`},{default:h(()=>[K.value?(r(),u(`div`,{key:0,class:`modal-mask`,onClick:s[12]||=y(e=>K.value=!1,[`self`])},[l(`div`,Ue,[l(`h3`,We,n(t.$t(`dcw.k5tq8wc071`)),1),l(`label`,Ge,[l(`span`,null,[_(n(t.$t(`dcw.k1b2ioko019`)),1),s[33]||=l(`em`,null,`*`,-1)]),p(l(`input`,{"onUpdate:modelValue":s[9]||=e=>Y.name=e,class:`inp`,placeholder:t.$t(`dcw.kru37i3004`)},null,8,Ke),[[b,Y.name]])]),l(`label`,qe,[l(`span`,null,n(t.$t(`dcw.k24dxcd020`)),1),p(l(`input`,{"onUpdate:modelValue":s[10]||=e=>Y.description=e,class:`inp`,placeholder:t.$t(`dcw.k1f2nwsp005`)},null,8,Je),[[b,Y.description]])]),l(`div`,Ye,[l(`span`,null,n(t.$t(`dcw.k1x7nubr021`)),1),l(`div`,Xe,[(r(!0),u(d,null,a(g(w),t=>(r(),u(`button`,{key:t,class:i([`color-dot`,{on:Y.color===t}]),style:e({background:t}),onClick:e=>Y.color=Y.color===t?``:t},null,14,Ze))),128)),l(`small`,Qe,n(Y.color||t.$t(`dcw.k1qidbpy061`,{p0:I.value})),1)])]),J.value?(r(),u(`p`,$e,n(J.value),1)):f(``,!0),l(`div`,et,[l(`button`,{class:`mini-btn`,onClick:s[11]||=e=>K.value=!1},n(t.$t(`dcw.k3xdnn022`)),1),l(`button`,{class:`pill-btn`,disabled:q.value||!Y.name.trim(),onClick:Kt},n(t.$t(`common.save`)),9,tt)])])])):f(``,!0)]),_:1}),o(x,{name:`modal`},{default:h(()=>[V.value&&G.value?(r(),u(`div`,{key:0,class:`modal-mask`,onClick:s[15]||=y(e=>V.value=!1,[`self`])},[l(`div`,nt,[l(`h3`,rt,[s[34]||=l(`span`,{class:`i-tabler-alert-triangle`},null,-1),_(` `+n(t.$t(`dcw.k7xq2mfd063`,{p0:G.value.line.name})),1)]),l(`p`,it,n(W.value?t.$t(`dcw.k4r7nbd073`,{p0:G.value.line.name,p1:G.value.nodes,p2:G.value.products,p3:G.value.recipes}):t.$t(`dcw.k1gp649b062`,{p0:G.value.line.name,p1:G.value.nodes,p2:G.value.products,p3:G.value.recipes})),1),l(`label`,at,[p(l(`input`,{"onUpdate:modelValue":s[13]||=e=>W.value=e,type:`checkbox`},null,512),[[ee,W.value]]),l(`span`,null,n(t.$t(`dcw.k9m2vxa072`)),1)]),U.value?(r(),u(`p`,ot,n(U.value),1)):f(``,!0),l(`div`,st,[l(`button`,{class:`mini-btn`,onClick:s[14]||=e=>V.value=!1},n(t.$t(`dcw.k3xdnn022`)),1),l(`button`,{class:`pill-btn danger`,disabled:H.value,onClick:Wt},n(t.$t(`dcw.k3xakp026`)),9,ct)])])])):f(``,!0)]),_:1}),o(x,{name:`modal`},{default:h(()=>[X.value?(r(),u(`div`,{key:0,class:`modal-mask`,onClick:s[26]||=y(e=>X.value=!1,[`self`])},[l(`div`,lt,[l(`h3`,ut,[_(n(t.$t(`dcw.k11oadmx024`))+` `,1),l(`small`,dt,n(t.$t(`dcw.k3x23c054`))+` `+n($.value)+` · `+n(t.$t(`dcw.k3t616a058`))+` `+n(g(T).templates.length-$.value),1)]),l(`p`,ft,n(t.$t(`dcw.k2hlav5025`)),1),l(`div`,pt,[(r(!0),u(d,null,a(g(T).templates,e=>(r(),u(`div`,{key:e.key,class:`tpl-row`,title:e.semantics??``},[l(`b`,null,n((`catalogTplName`in t?t.catalogTplName:g(ie))(g(S),e)),1),l(`small`,ht,n(e.code)+` · `+n(e.min)+`~`+n(e.max)+` `+n(e.unit),1),e.semantics?(r(),u(`small`,gt,n(e.semantics.slice(0,40))+n(e.semantics.length>40?`…`:``),1)):f(``,!0),l(`span`,{class:i([`tpl-tag`,{builtin:e.builtin}])},n(e.builtin?t.$t(`dcw.k3x23c054`):t.$t(`dcw.k3t616a058`)),3),e.builtin?f(``,!0):(r(),u(`button`,{key:1,class:`mini-btn danger`,onClick:t=>Yt(e.key)},n(t.$t(`dcw.k3xakp026`)),9,_t))],8,mt))),128))]),l(`p`,vt,n(t.$t(`dcw.k169eb4s027`)),1),l(`div`,yt,[l(`label`,bt,[l(`span`,null,[_(n(t.$t(`dcw.k3xhia028`)),1),s[35]||=l(`em`,null,`*`,-1)]),p(l(`input`,{"onUpdate:modelValue":s[16]||=e=>Q.name=e,class:`inp`,placeholder:t.$t(`dcw.k1tooi3o006`)},null,8,xt),[[b,Q.name]])]),l(`label`,St,[l(`span`,null,n(t.$t(`dcw.k1bqk219029`)),1),p(l(`input`,{"onUpdate:modelValue":s[17]||=e=>Q.ch=e,class:`inp`,placeholder:t.$t(`dcw.k698qz0007`)},null,8,Ct),[[b,Q.ch]])]),l(`label`,wt,[l(`span`,null,n(t.$t(`dcw.k1ayxrqb030`)),1),p(l(`input`,{"onUpdate:modelValue":s[18]||=e=>Q.code=e,class:`inp`,placeholder:t.$t(`dcw.codePh`)},null,8,Tt),[[b,Q.code]])]),l(`label`,Et,[l(`span`,null,n(t.$t(`dcw.k3x4ef031`)),1),p(l(`input`,{"onUpdate:modelValue":s[19]||=e=>Q.unit=e,class:`inp`,placeholder:t.$t(`dcw.unitPh`)},null,8,Dt),[[b,Q.unit]])]),l(`label`,Ot,[l(`span`,null,[_(n(t.$t(`dcw.k1l9jv5m032`)),1),s[36]||=l(`em`,null,`*`,-1)]),p(l(`input`,{"onUpdate:modelValue":s[20]||=e=>Q.min=e,type:`number`,class:`inp`},null,512),[[b,Q.min,void 0,{number:!0}]])]),l(`label`,kt,[l(`span`,null,[_(n(t.$t(`dcw.k1l9jv4p033`)),1),s[37]||=l(`em`,null,`*`,-1)]),p(l(`input`,{"onUpdate:modelValue":s[21]||=e=>Q.max=e,type:`number`,class:`inp`},null,512),[[b,Q.max,void 0,{number:!0}]])]),l(`label`,At,[l(`span`,null,n(t.$t(`dcw.k3mxmcx034`)),1),p(l(`input`,{"onUpdate:modelValue":s[22]||=e=>Q.decimals=e,type:`number`,class:`inp`},null,512),[[b,Q.decimals,void 0,{number:!0}]])]),l(`label`,jt,[l(`span`,null,n(t.$t(`dcw.k3xx56035`)),1),p(l(`select`,{"onUpdate:modelValue":s[23]||=e=>Q.icon=e,class:`inp`},[(r(),u(d,null,a(qt,e=>l(`option`,{key:e.key,value:e.key},n(e.label),9,Mt)),64))],512),[[v,Q.icon]])])]),l(`label`,Nt,[l(`span`,null,n(t.$t(`dcw.k1b6qorg036`)),1),p(l(`textarea`,{"onUpdate:modelValue":s[24]||=e=>Q.semantics=e,class:`inp`,rows:`3`,placeholder:t.$t(`dcw.k1qdnfzc008`)},null,8,Pt),[[b,Q.semantics]])]),Z.value?(r(),u(`p`,Ft,n(Z.value),1)):f(``,!0),l(`div`,It,[l(`button`,{class:`mini-btn`,onClick:s[25]||=e=>X.value=!1},n(t.$t(`dcw.k3x62t037`)),1),l(`button`,{class:`pill-btn`,disabled:!Q.name.trim()||Q.min===``||Q.max===``,onClick:Jt},n(t.$t(`dcw.k1bg9nga038`)),9,Lt)])])])):f(``,!0)]),_:1}),g(T).error?(r(),u(`p`,Rt,n(g(T).error),1)):f(``,!0)])}}}),[[`__scopeId`,`data-v-13f2a5a8`]]);export{T as default};
@@ -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 ne,ut as T,v as re,xt as E,y as D,yt as O}from"./CSkxz2NX.js";import{c as k,d as ie,f as ae,l as A,t as oe,u as se}from"./D6uzXueg.js";import{t as ce}from"./HclGiUj8.js";import{n as le}from"./KZQX7xoM.js";import{t as j}from"./CWoJjWmZ.js";import{t as ue}from"./36oeS8_R.js";import{t as de}from"./DIaZ2PTo2.js";import{t as fe}from"./aLLjF2K-2.js";import{t as M}from"./BDNMzG2s2.js";import{t as pe}from"./BBrRELH32.js";import{C as me,L as he,N,O as ge,St as _e,_ as ve,b as ye,c as be,dt as xe,et as P,v as Se,y as F,z as Ce}from"./BFjGV-RV2.js";import{t as we}from"./DGIuvyRN2.js";import{t as Te}from"./CssgYAAL2.js";import{t as I}from"./D0ZBQrN_2.js";import{n as Ee,t as De}from"./BC9wjTJK2.js";import{r as Oe,t as ke}from"./D98NH8kG.js";import{t as Ae}from"./ca4TJ3Op.js";import{t as je}from"./C3J6FYKa.js";import{a as Me,o as Ne,r as Pe}from"./Du9v6qGB.js";import{n as Fe}from"./DeYsUzhr.js";var Ie=`__characterAssets`;function Le(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 Re(){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(Le(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=I(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(),Le(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 ze(){let e=globalThis;e[Ie]||(e[Ie]=Re());let t=e[Ie];return t.load(),t}var L={key:0,class:`mp-loading`},R={key:1,class:`mp-failed`},Be=Object.assign(M(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 ye({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 ge},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 F(u.__modelPreviewRig.renderer);e.environment=t.fromScene(new ve,.04).texture,e.environmentIntensity=.55,t.dispose()}catch{}e.add(new Ce(14674431,3813157,1.3));let t=new N(16773855,2.2);t.position.set(3,4,2),e.add(t);let n=new N(4311284,1);n.position.set(-3,1,-2.5),e.add(n)}function h(e){let t=new me().setFromObject(e),n=new _e;t.getSize(n);let r=t.getCenter(new _e),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 xe;m(d);let p=new P(38,n/r,.1,100);p.position.set(2.4,1.8,3.1),p.lookAt(0,0,0);let g=new he;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 Se().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`})},[E(l)?(s(),v(`div`,L,[...r[0]||=[g(`span`,{class:`mp-spin`},null,-1)]])):E(c)?(s(),v(`div`,R,` PREVIEW NA `)):x(``,!0)],4))}}),[[`__scopeId`,`data-v-ed056b0a`]]),{__name:`WorkshopTownModelPreview3D`}),Ve={class:`asset-lib`},z={class:`lib-head`},He={class:`head-title`},B={class:`head-hint`},Ue={class:`upload-row`},We={class:`upload-name`},Ge={key:0,class:`drop-hint`},Ke={key:1,class:`upload-file-tag`},qe={class:`upload-actions`},Je=[`disabled`],Ye=[`disabled`],Xe={key:2,class:`mini-err`},Ze={key:3,class:`mini-err`},Qe={class:`lib-grid`},$e=[`data-model-id`,`title`,`onDragstart`],et={key:1,class:`model-img glb dev`},V={class:`model-name`},H={class:`model-badge`},tt={class:`card-actions`},nt=[`disabled`,`onClick`],rt={key:0,class:`lib-note`},it={key:1,class:`lib-note`},at={key:0,class:`mini-msg`},ot=Object.assign(M(a({__name:`AssetLibrary`,setup(e){let{t}=le(),n=ze(),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=t(`assetLibrary.badModelFile`);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=I(e)}finally{u.value=!1}}let w=C(``),ne=C(``);async function T(e){w.value=e,ne.value=``;try{await n.removeDevice(e),ne.value=t(`assetLibrary.k8n918k013`)}catch(e){ne.value=I(e)}finally{w.value=``}}return(e,m)=>(s(),v(`aside`,Ve,[g(`div`,z,[g(`span`,He,o(e.$t(`assetLibrary.k7la4x5001`)),1),g(`span`,B,o(e.$t(`assetLibrary.kulif5b002`)),1)]),g(`div`,{class:c([`upload-box`,{drop:E(p)}]),onDragover:m[0]||=ae(e=>p.value=!0,[`prevent`]),onDragleave:m[1]||=e=>p.value=!1,onDrop:ae(_,[`prevent`])},[g(`label`,Ue,[g(`input`,{type:`file`,accept:`.glb,.gltf,.obj,.fbx`,class:`file-input`,onChange:h},null,32),g(`span`,We,[m[2]||=g(`span`,{class:`i-tabler-plus upload-ico`},null,-1),D(` `+o(E(f)?.name||e.$t(`assetLibrary.k1iiort6010`)),1)])]),E(p)?(s(),v(`span`,Ge,[m[3]||=g(`span`,{class:`i-tabler-download`},null,-1),D(` `+o(e.$t(`assetLibrary.k5hg6jq003`)),1)])):x(``,!0),E(f)?(s(),v(b,{key:1},[i(E(f).name)?(s(),te(Be,{key:0,"local-file":E(f),height:92},null,8,[`local-file`])):(s(),v(`span`,Ke,o(E(f).name)+` (`+o(e.$t(`assetLibrary.k1xz5wvk009`)),1)),g(`div`,qe,[g(`button`,{class:`upload-btn go`,disabled:E(u),onClick:S},o(E(u)?e.$t(`assetLibrary.k1ar7n8i005`):e.$t(`assetLibrary.k1hhga4h014`)),9,Je),g(`button`,{class:`upload-btn`,disabled:E(u),onClick:ee},o(e.$t(`assetLibrary.k3xdnn004`)),9,Ye)])],64)):E(u)?(s(),v(`span`,Xe,o(e.$t(`assetLibrary.k1ar7n8i005`)),1)):x(``,!0),E(d)&&!E(f)?(s(),v(`span`,Ze,o(E(d)),1)):x(``,!0)],34),g(`div`,Qe,[(s(!0),v(b,null,l(E(r),n=>(s(),v(`div`,{key:n.id,class:`model-card`,"data-model-id":n.id,draggable:`true`,title:(`townModelHint`in e?e.townModelHint:E(Me))(E(t),n)||e.$t(`assetLibrary.katn7lo015`,{p0:(`townModelName`in e?e.townModelName:E(Ne))(E(t),n)}),onDragstart:e=>a(e,n.id)},[i(n.file)?(s(),te(Be,{key:0,file:n.file,height:76},null,8,[`file`])):(s(),v(`span`,et,[...m[4]||=[g(`span`,{class:`i-tabler-cpu glb-cube`,"aria-hidden":`true`},null,-1)]])),g(`span`,V,o((`townModelName`in e?e.townModelName:E(Ne))(E(t),n)),1),g(`span`,H,o(e.$t(`assetLibrary.k1n32zs0006`)),1),g(`div`,tt,[n.file.includes(`/assets/game/devices/`)?(s(),v(`button`,{key:0,class:`card-btn danger`,disabled:E(w)===n.id,onClick:e=>T(n.id)},o(E(w)===n.id?`…`:e.$t(`assetLibrary.k498l011`)),9,nt)):x(``,!0)])],40,$e))),128)),E(n).loaded?E(r).length===0?(s(),v(`div`,it,o(e.$t(`assetLibrary.k15527e1008`)),1)):x(``,!0):(s(),v(`div`,rt,[m[5]||=g(`span`,{class:`loading-dot`},null,-1),D(` `+o(e.$t(`assetLibrary.k1kq2tmi007`)),1)]))]),E(ne)?(s(),v(`span`,at,o(E(ne)),1)):x(``,!0)]))}}),[[`__scopeId`,`data-v-f9b68f56`]]),{__name:`WorkshopAssetLibrary`}),st=[`innerHTML`],ct=Object.assign(a({__name:`DaqTemplateIcon`,props:{icon:{}},setup(e){let t=e,n={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"/>`},r=m(()=>n[t.icon]??n.gateway);return(e,t)=>(s(),v(`svg`,{viewBox:`0 0 24 24`,innerHTML:E(r)},null,8,st))}}),{__name:`WorkshopDaqTemplateIcon`}),lt={class:`twin-panel`},ut={class:`twin-head`},dt={class:`twin-kicker`},ft={class:`twin-count`},U={key:0,class:`twin-error`},W={key:1,class:`twin-empty`},pt={key:2,class:`twin-empty`},mt={class:`twin-empty-frame`},ht={class:`twin-empty-title`},gt={class:`twin-empty-sub`},_t={key:3,class:`twin-list`},vt=[`onClick`],yt={class:`twin-row`},bt={class:`twin-model-tag`},xt={class:`twin-idbar`},St={class:`twin-name`},Ct={class:`twin-code`},wt=[`disabled`,`title`,`onClick`],Tt={key:0,class:`twin-tele`},Et={key:1,class:`twin-daq`},Dt={key:2,class:`twin-dcw`},Ot={class:`dcw-head`},kt={key:0,class:`dcw-src`},At={class:`dcw-set`},jt=[`title`],Mt={key:0,class:`dcw-act-at`},G={class:`dcw-win`},Nt=[`title`],Pt={class:`dcw-ctrl`},Ft=[`onUpdate:modelValue`,`step`,`min`,`max`,`placeholder`,`onKeydown`],It=[`disabled`,`title`,`onClick`],Lt={key:1,class:`dcw-err`},Rt={key:4,class:`twin-err`},zt=Object.assign(M(a({__name:`DeviceTwinPanel`,props:{daqLive:{},dcwLive:{}},emits:[`focus-device`],setup(e){let{t}=le(),a=je(),u=Ae(),d=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),f=null;i(()=>{a.load(),f=j(()=>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=I(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`},ne=e=>e.replace(/[^A-Za-z0-9]/g,``).slice(0,4).toUpperCase()||`DEV`,T=e=>e.replace(/^dev-/,``).replace(/[^a-z0-9]/gi,``).slice(-6).toUpperCase(),re=e=>typeof e==`number`?(Math.round(e*100)/100).toString():String(e),O=e=>`${Number.isFinite(e.lo)?e.lo:`-∞`} ~ ${Number.isFinite(e.hi)?e.hi:`+∞`} ${e.unit}`,k=h({}),oe=h({}),se=C(``);function ce(e){let n=k[e.id];if(n==null||n===``)return;let r=Number(n);if(r<e.lo||r>e.hi){oe[e.id]=t(`deviceTwinPanel.kxddket010`,{p0:e.src===`recipe`?t(`deviceTwinPanel.kq2jssk008`):t(`deviceTwinPanel.k1iwj796009`),p1:O(e)});return}oe[e.id]=``,se.value=e.id,u.write(e.id,r).then(t=>{t.ok||(oe[e.id]=t.message)}).catch(t=>{oe[e.id]=I(t)}).finally(()=>{se.value=``})}return(t,r)=>(s(),v(`aside`,lt,[g(`div`,ut,[g(`span`,dt,o(t.$t(`deviceTwinPanel.k7k6evr002`)),1),g(`span`,ft,o(E(a).twins.length),1)]),E(a).error?(s(),v(`div`,U,o(E(a).error),1)):x(``,!0),E(a).loaded?E(a).twins.length===0?(s(),v(`div`,pt,[g(`div`,mt,[g(`div`,ht,o(t.$t(`deviceTwinPanel.k13y2qmg004`)),1),g(`div`,gt,o(t.$t(`deviceTwinPanel.kotf23l005`)),1)])])):(s(),v(`div`,_t,[(s(!0),v(b,null,l(E(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`,yt,[g(`span`,bt,o(ne(i.modelRef||i.name)),1),g(`div`,xt,[g(`span`,St,o(i.name),1),g(`span`,Ct,o(d(i)?`DAQ`:T(i.id)),1)]),g(`button`,{class:c([`twin-del`,{armed:E(_)===i.id}]),disabled:E(p)===i.id,title:E(_)===i.id?t.$t(`deviceTwinPanel.armDelete`):t.$t(`deviceTwinPanel.delDevice`),onClick:ae(e=>ee(i),[`stop`])},o(E(_)===i.id?t.$t(`deviceTwinPanel.k44653007`):`✕`),11,wt),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),D(` `+o(w[i.state]||i.state),1)],2)]),Object.keys(i.telemetry).length?(s(),v(`div`,Tt,[(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(re(e)),1)]))),128))])):x(``,!0),e.daqLive?.[i.id]?.length?(s(),v(`div`,Et,[(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,[D(o(e.value),1),g(`i`,null,o(e.unit),1)])],2))),128))])):x(``,!0),e.dcwLive?.[i.id]?.length?(s(),v(`div`,Dt,[(s(!0),v(b,null,l(e.dcwLive[i.id],e=>(s(),v(`div`,{key:e.id,class:`dcw-item`},[g(`div`,Ot,[g(`em`,null,[D(o(e.ch),1),e.src===`recipe`?(s(),v(`i`,kt,o(t.$t(`deviceTwinPanel.k48grv006`)),1)):x(``,!0)]),g(`b`,At,[D(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,[D(o(e.readValue==null?`--`:e.readValue.toFixed(e.decimals)),1),g(`i`,null,o(e.unit),1)]),e.lastReadAt?(s(),v(`i`,Mt,o(e.lastReadAt.slice(11,19)),1)):x(``,!0)],8,jt)):x(``,!0),g(`div`,G,[g(`span`,{title:e.src===`recipe`?t.$t(`deviceTwinPanel.winRecipe`):t.$t(`deviceTwinPanel.winRange`)},o(O(e)),9,Nt)]),g(`div`,Pt,[S(g(`input`,{"onUpdate:modelValue":t=>E(k)[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:ie(t=>ce(e),[`enter`])},null,40,Ft),[[A,E(k)[e.id],void 0,{number:!0}]]),g(`button`,{class:`ctrl-btn dcw-send`,disabled:E(k)[e.id]==null||E(k)[e.id]===``||E(se)===e.id,title:t.$t(`deviceTwinPanel.k1j04u8001`),onClick:ae(t=>ce(e),[`stop`])},o(E(se)===e.id?`···`:`SET`),9,It)]),E(oe)[e.id]?(s(),v(`small`,Lt,o(E(oe)[e.id]),1)):x(``,!0)]))),128))])):x(``,!0)],10,vt))),128))])):(s(),v(`div`,W,o(t.$t(`deviceTwinPanel.kkw7sn5003`)),1)),E(m)?(s(),v(`span`,Rt,o(E(m)),1)):x(``,!0)]))}}),[[`__scopeId`,`data-v-4878cdde`]]),{__name:`WorkshopDeviceTwinPanel`}),Bt=`__sceneLayouts`;function Vt(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 Ht(){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:Fe()},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:Vt(),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:Vt()}),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:Vt()});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=I(n),r<2&&await t(400*(r+1))}n.loaded=!1,n.error=e}finally{n.loading=!1}}return n}function Ut(){let e=globalThis;e[Bt]||(e[Bt]=Ht());let t=e[Bt];return t.load(),t}function Wt(e){return d()?(T(e),!0):!1}var Gt=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var Kt=Object.prototype.toString,qt=e=>Kt.call(e)===`[object Object]`,Jt=()=>{};function Yt(...e){if(e.length!==1)return u(...e);let t=e[0];return typeof t==`function`?_(w(()=>({get:t,set:Jt}))):C(t)}function Xt(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 Zt=e=>e();function Qt(e=Zt,t={}){let{initialState:n=`active`}=t,r=Yt(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 $t(e){return Array.isArray(e)?e:[e]}function en(e){return e||t()}function tn(t,n,r={}){let{eventFilter:i=Zt,...a}=r;return e(t,Xt(i,n),a)}function nn(e,t,n={}){let{eventFilter:r,initialState:i=`active`,...a}=n,{eventFilter:o,pause:s,resume:c,isActive:l}=Qt(r,{initialState:i});return{stop:tn(e,t,{...a,eventFilter:o}),pause:s,resume:c,isActive:l}}function rn(e,t=!0,n){en(n)?i(e,n):t?e():ee(e)}function an(t,n,r){return e(t,n,{...r,immediate:!0})}var on=Gt?window:void 0;Gt&&window.document,Gt&&window.navigator,Gt&&window.location;function sn(e){let t=O(e);return t?.$el??t}function K(...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=$t(O(e[0])).filter(e=>e!=null);return t.every(e=>typeof e!=`string`)?t:void 0}),a=an(()=>[i.value?.map(e=>sn(e))??[on].filter(e=>e!=null),$t(O(i.value?e[1]:e[0])),$t(E(i.value?e[2]:e[1])),O(i.value?e[3]:e[2])],([e,i,a,o])=>{if(n(),!e?.length||!i?.length||!a?.length)return;let s=qt(o)?{...o}:o;t.push(...e.flatMap(e=>i.flatMap(t=>a.map(n=>r(e,t,n,s)))))},{flush:`post`});return Wt(n),()=>{a(),n()}}var cn=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{},ln=`__vueuse_ssr_handlers__`,un=q();function q(){return ln in cn||(cn[ln]=cn[ln]||{}),cn[ln]}function dn(e,t){return un[e]||t}function fn(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 pn={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()}},mn=`vueuse-storage`;function hn(t,n,r,i={}){let{flush:a=`pre`,deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:l=!1,shallow:u,window:d=on,eventFilter:f,onError:p=e=>{console.error(e)},initOnMounted:h}=i,g=(u?y:C)(typeof n==`function`?n():n),_=m(()=>O(t));if(!r)try{r=dn(`getDefaultStorage`,()=>on?.localStorage)()}catch(e){p(e)}if(!r)return g;let v=O(n),b=fn(v),x=i.serializer??pn[b],{pause:S,resume:te}=nn(g,e=>T(e),{flush:a,deep:o,eventFilter:f});e(_,()=>E(),{flush:a});let w=!1;d&&s&&(r instanceof Storage?K(d,`storage`,e=>{h&&!w||E(e)},{passive:!0}):K(d,mn,e=>{h&&!w||D(e)})),h?rn(()=>{w=!0,E()}):E();function ne(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(mn,{detail:n}))}}function T(e){try{let t=r.getItem(_.value);if(e==null)ne(t,null),r.removeItem(_.value);else{let n=x.write(e);t!==n&&(r.setItem(_.value,n),ne(t,n))}}catch(e){p(e)}}function re(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 E(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=re(e))}catch(e){p(e)}finally{e?ee(te):te()}}}}function D(e){E(e.detail)}return g}var gn={class:`town-view`},_n={class:`brand`},vn={class:`brand-sub`},yn=[`aria-label`],bn={class:`seg`},xn=[`disabled`,`title`],Sn={class:`nav-right`},Cn=[`title`],wn={class:`nav-chip mono nav-fps`},Tn=[`title`],En={class:`avatar-fallback`},Dn=[`aria-expanded`,`title`],On={class:`sheet-btn-t`},kn=[`aria-expanded`,`title`],An={class:`sheet-btn-t`},jn={class:`app`},Mn={class:`sheet-hd`},Nn={class:`sheet-hd-t`},Pn=[`aria-label`],Fn={class:`panel`},In={class:`panel-hd`},Ln={class:`panel-tag`},Rn={class:`panel`},zn={class:`panel-hd`},Bn={class:`panel-tag`},Vn={class:`daq-ctrl`},Hn=[`title`],Un=[`title`],Wn=[`value`],Gn={class:`daq-list`},Kn=[`title`,`onClick`,`onKeydown`],qn={class:`daq-ico`},Jn={class:`daq-meta`},Yn={class:`daq-name`},Xn={class:`daq-code`},Zn=[`title`,`onClick`],Qn={class:`daq-count`},$n={key:0,class:`daq-children`},er=[`draggable`,`title`,`onDragstart`,`onClick`],tr={class:`daq-meta`},nr={class:`daq-name`},rr={class:`daq-node-sub`},ir={class:`node-val mono`},ar={class:`node-dev`},or={key:0,class:`scene-cur`},sr={key:0,class:`daq-empty-hint`},cr={class:`panel`},lr={class:`panel-hd`},ur={class:`panel-tag`},dr={class:`daq-list`},fr=[`title`,`onClick`,`onKeydown`],pr={class:`daq-ico`},mr={class:`daq-meta`},hr={class:`daq-name`},gr={class:`daq-code`},_r=[`title`,`onClick`],vr={class:`daq-count`},yr={key:0,class:`daq-children`},br=[`draggable`,`title`,`onDragstart`,`onClick`],xr={class:`daq-meta`},Sr={class:`daq-name`},Cr={class:`daq-node-sub`},wr={class:`node-val mono`},Tr={class:`node-dev`},Er={key:0,class:`scene-cur`},Dr={key:0,class:`daq-empty-hint`},Or={class:`panel`},kr={class:`panel-hd`},Ar={class:`panel-tag`},jr={class:`scene-list`},Mr=[`draggable`,`data-channel-id`,`title`,`onDragstart`,`onClick`],Nr={class:`scene-meta-wrap`},Pr={class:`scene-name`},Fr={class:`scene-meta`},Ir={key:0,class:`scene-cur`},Lr={key:1,class:`scene-add`},Rr={key:0,class:`scene-hint`},zr={class:`stage-col`},Br={class:`stage-top`},Vr={class:`vp-title`},Hr={class:`vp-id`},Ur={class:`vp-tools`},Wr=[`title`],Gr=[`title`],Kr=[`title`],qr=[`title`],Jr={class:`angle-chip`},Yr=[`value`,`aria-label`],Xr={value:`std`},Zr={value:`top`},Qr={value:`front`},$r={value:`side`},ei={class:`leaders`},ti=[`d`,`stroke`],ni=[`cx`,`cy`,`fill`],ri={class:`callout-layer`},ii=[`title`,`onClick`],ai={class:`co-label`},oi={class:`co-val`},si={class:`co-range`},ci={class:`kpi-strip`},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={class:`kpi`},vi={class:`kpi-meta`},yi={class:`kpi-label`},bi={class:`kpi-val`},xi={class:`kpi`},Si={class:`kpi-meta`},Ci={class:`kpi-label`},wi={class:`kpi-val`},Ti={class:`kpi`},Ei={class:`kpi-meta`},Di={class:`kpi-label`},Oi={class:`kpi-val`},ki={key:1,class:`empty-hint`},Ai=[`title`],ji={class:`bp-name`},Mi={class:`bp-sub`},Ni={class:`bp-tabs`},Pi={class:`bp-row`},Fi={class:`bp-label`},Ii={class:`bp-seg`},Li={class:`bp-row`},Ri={class:`bp-label`},zi={class:`bp-val`},Bi={class:`bp-row`},Vi={class:`bp-label`},Hi={class:`bp-val`},Ui={class:`bp-row`},Wi={class:`bp-label`},Gi={class:`bp-val`},Ki={class:`bp-hint`},qi={class:`member-list`},Ji={class:`member-info`},Yi={class:`member-name`},Xi=[`value`,`onChange`],Zi=[`value`],Qi={key:0,class:`bp-hint`},$i={class:`bp-actions`},ea={key:3,class:`drop-chip`},ta={key:4,class:`error-chip`},na={key:5,"data-hud":`town-loading`,class:`loading-mask`},ra={class:`loading-text`},ia=[`aria-expanded`],aa={class:`dock-toggle-t`},oa={class:`dock-toggle-hint mono`},sa={id:`town-dock-controls`,class:`dock-card`},ca={class:`dock-hd`},la={class:`dock-mode`},ua={class:`ctl-sec`},da={class:`ctl-row`},fa=[`title`],pa={class:`fps-seg`},ma=[`onClick`],ha={class:`ctl-row`},ga=[`title`],_a={class:`fps-seg`},va=[`onClick`],ya={class:`ctl-sec`},ba={class:`ctl-row`},xa={class:`ctl-name`},Sa=[`value`],Ca={class:`ctl-val`},wa={class:`ctl-row`},Ta={class:`ctl-name`},Ea=[`value`],Da={class:`ctl-val`},Oa={class:`ctl-row`},ka={class:`ctl-name`},Aa=[`value`],ja={class:`ctl-val`},Ma={class:`ctl-row`},Na=[`title`],Pa=[`value`],Fa={class:`ctl-val`},Ia={class:`ctl-sec`},La={class:`ctl-row`},Ra={class:`ctl-name`},za={class:`ctl-btns`},Ba=[`disabled`,`title`],Va={class:`dock-card`},Ha={class:`dock-hd`},Ua={class:`dock-count mono`},Wa=[`onClick`],Ga=[`title`],Ka={class:`trend-wrap`},qa={key:0,class:`trend-empty`},Ja={class:`sheet-hd`},Ya={class:`sheet-hd-t`},Xa=[`aria-label`],Za={key:0,class:`panel inspector`},Qa={class:`panel-hd`},$a=[`title`],eo={class:`ins-chip-row`},to={class:`ins-chip mono`},no={key:0,class:`ins-chip accent`},ro={key:1,class:`ins-chip accent`},io={key:0,class:`daq-info`},ao={class:`daq-info-row`},oo={class:`cy`},so={class:`daq-info-row`},co={class:`daq-info-row`},lo={class:`daq-bind-bar`},uo=[`step`,`placeholder`],fo=[`disabled`],po={key:0,class:`dcw-err`},mo={key:1,class:`daq-bind-bar`},ho={value:``},go=[`value`],_o=[`disabled`],vo={key:1,class:`daq-info`},yo={class:`daq-info-row`},bo={class:`cy`},xo={class:`daq-info-row`},So={class:`daq-info-row`},Co={key:0,class:`daq-bind-bar`},wo={value:``},To=[`value`],Eo=[`disabled`],Do={key:1,class:`daq-node-ctl`},Oo={class:`daq-info-row`},ko={class:`daq-th-inputs`},Ao={class:`daq-info-row`},jo={class:`daq-th-inputs`},Mo=[`value`],No=[`value`],Po={class:`daq-info-row`},Fo={class:`daq-th-inputs`},Io=[`value`],Lo=[`value`],Ro={class:`daq-info-row`},zo={class:`daq-info-row`},Bo=[`title`],Vo={key:2,class:`ins-empty`},Ho={class:`obj-row`},Uo={class:`obj-label`},Wo=[`placeholder`,`disabled`,`title`],Go={class:`obj-row`},Ko={class:`obj-label`},qo=[`value`,`disabled`],Jo=[`value`],Yo={class:`sect-hd`},Xo={class:`bind-ico`},Zo={class:`bind-meta`},Qo={class:`bind-label`},$o={class:`bind-val`},es=[`title`,`onClick`],ts={key:0,class:`ins-empty`},ns={key:1,class:`bind-add-wrap`},rs={key:0,class:`bp-group`},is={class:`bp-tpl`},as=[`data-node-id`,`title`,`onClick`],os={key:0,class:`bp-cur`},ss={key:1,class:`bp-cur`},cs={key:0,class:`bp-empty`},ls={class:`sect-hd`},us={class:`dcw-top`},ds={class:`bind-ico`},fs={class:`dcw-id`},ps={class:`bind-label`},ms={key:0,class:`dcw-tag`},hs={class:`dcw-name`},gs={class:`dcw-cur`},_s=[`title`,`onClick`],vs={class:`dcw-win-num`},ys={class:`dcw-win-track`},bs={class:`dcw-win-num`},xs={class:`dcw-write`},Ss=[`onUpdate:modelValue`,`step`,`placeholder`,`onKeydown`],Cs=[`disabled`,`title`,`onClick`],ws={key:0,class:`dcw-err`},Ts={key:2,class:`ins-empty`},Es={key:3,class:`bind-add-wrap`},Ds={key:0,class:`bp-group`},Os={class:`bp-tpl`},ks=[`data-node-id`,`title`,`onClick`],As={key:0,class:`bp-cur`},js={key:1,class:`bp-cur`},Ms={key:0,class:`bp-empty`},Ns={class:`sect-hd`},Ps={class:`xz-seg`},Fs={class:`scale-row`},Is=[`value`],Ls={class:`scale-val`},Rs={class:`ins-foot`},zs={key:5,class:`ins-empty`},Bs={class:`chat-id-row`},Vs={class:`chat-nameplate`},Hs={class:`chat-name`},Us={class:`chat-meta`},Ws={key:0,class:`chat-harness`},Gs={class:`chat-count`},Ks={class:`obj-row`},qs={class:`obj-label`},Js=[`value`,`disabled`],Ys=[`value`],Xs={class:`obj-row`},Zs={class:`obj-label`},Qs={class:`range-status`},$s=[`title`],ec={class:`sect-hd`},tc={class:`bind-meta`},nc={class:`bind-label`},rc=[`value`,`title`,`onChange`],ic={value:`auto`},ac={value:`manual`},oc=[`title`,`onClick`],sc={key:0,class:`ins-empty`},cc={key:1,class:`daq-bind-bar`,style:{"margin-bottom":`8px`}},lc={value:`dcw`},uc={value:`daq`},dc={value:``},fc=[`value`],pc=[`value`],mc={value:`auto`},hc={value:`manual`},gc=[`disabled`],_c={class:`sect-hd`,style:{color:`var(--hud-amber)`}},vc={class:`approval-detail`},yc=[`onUpdate:modelValue`,`placeholder`],bc={class:`daq-bind-bar`,style:{"margin-top":`5px`}},xc=[`onClick`],Sc=[`onClick`],Cc={class:`obj-row`},wc={class:`obj-label`},Tc={class:`bp-seg`},Ec={class:`obj-row`},Dc={class:`obj-label`},Oc={class:`bp-val`},kc={class:`obj-row`},Ac={class:`obj-label`},jc={class:`bp-val`},Mc={key:4,class:`ins-empty`},Nc={class:`sect-hd chat-sect`},Pc=[`title`],Fc={key:0,class:`rpg-note`},Ic={class:`rpg-divider`},Lc={class:`rpg-time`},Rc={class:`rpg-bubble`},zc={class:`rpg-text`},Bc={key:2,class:`rpg-divider live`},Vc={class:`rpg-time`},Hc={class:`rpg-bubble`},Uc={class:`rpg-text`},Wc={key:3,class:`rpg-typing`},Gc={class:`ty-label`},Kc={key:4,class:`rpg-note`},qc={class:`panel`},Jc={class:`panel-hd`},Yc={class:`health-body`},Xc={class:`donut-wrap`},Zc={class:`donut-center`},Qc={class:`health-legend`},$c={class:`hl-row`},el={class:`n`},tl={class:`hl-row`},nl={class:`n`},rl={class:`hl-row`},il={class:`n`},al={class:`hl-row`},ol={class:`n`},sl={class:`panel`},cl={class:`panel-hd`},ll={class:`panel-tag`},ul={class:`panel`},dl={class:`panel-hd`},fl={class:`panel-tag`},pl=[`title`],ml={class:`alarm-list`},hl={class:`al-body`},gl={class:`al-txt`},_l={class:`al-src`},vl=[`onClick`],yl={key:0,class:`rail-empty`},bl={class:`panel`},xl={class:`panel-hd`},Sl={class:`panel-tag`},Cl={class:`event-list`},wl={class:`ev-time`},Tl=[`title`],El=[`title`],Dl={key:0,class:`rail-empty`},Ol={class:`panel`},kl={class:`panel-hd`},Al={class:`mm-body`},jl=[`title`],Ml={class:`mm-col`},Nl=[`title`],Pl=[`title`],Fl=[`title`],Il={class:`mm-meta mono`},Ll={class:`statusbar`},Rl={class:`sb-stats`},zl={class:`sb-lat mono`},Bl={class:`copy`},Vl={key:1,"data-hud":`town-loading`,class:`loading-mask`},Hl={class:`loading-text`},Ul=`aw-town-panel-pos`,Wl=3200,Gl=2400,Kl=3e4,ql=80,Jl=120,Yl=104,Xl=8,Zl=1600,Ql=Object.assign(M(a({__name:`TownView`,props:{channelId:{},allChannels:{type:Boolean}},setup(t){let{t:a}=le(),u=t,d=Ee(),_=Te(),{conn:te}=De(),w=ue(),T=ze(),O=je(),M=Ut(),me=fe(),{isDesktop:he}=we(),N=C(null),ge=C(!1);function _e(e){N.value=N.value===e?null:e}function ve(){N.value=null}function ye(e){e.key===`Escape`&&N.value&&ve()}i(()=>window.addEventListener(`keydown`,ye)),r(()=>window.removeEventListener(`keydown`,ye)),e(he,e=>{e&&(N.value=null,ge.value=!1)});let xe=C(null),P=y(null),Se=y(null),F=y(null),Ce=typeof window<`u`?new URLSearchParams(location.search).get(`render`)!==`2d`:!0,Me=C(!1),Fe=C(0),Ie=C(0),Le=C(0),Re=C(null),L=C(null),R=C(``),Be=m(()=>te.state===`connecting`),Ve=m(()=>d.channels[u.channelId]?.name??``),z=C(`browse`),He=C(!0),B=C(null),Ue=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 We(){z.value=z.value===`browse`?`edit`:`browse`,F.value?.setMode(z.value),z.value===`browse`&&(et(),tt(null)),W.value=!1}let Ge=C(`translate`);function Ke(e){Ge.value=e,F.value?.setTransformMode(e)}e(()=>[L.value,z.value],([e,t])=>{t===`edit`&&e?.kind===`device`&&F.value?.setTransformMode(Ge.value)});function qe(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`){et();return}z.value===`edit`&&L.value?.kind===`device`&&(n===`g`?Ke(`translate`):n===`r`?Ke(`rotate`):n===`s`?Ke(`scale`):(e.key===`Delete`||e.key===`Backspace`)&&St())}function Je(){He.value=!He.value,F.value?.setSnap(He.value)}function Ye(e,t,n,r){let i=t||u.channelId;return i?me.request({method:`PATCH`,url:`/workshop/channels/${i}/agents/${e}/position`,data:{x:n,z:r}}).catch(()=>null):Promise.resolve()}function Xe(e,t,n){let r=t||u.channelId;return r?me.request({method:`PATCH`,url:`/workshop/channels/${r}/agents/${e}/range`,data:{range:n}}).catch(()=>null):Promise.resolve()}function Ze(){if(z.value!==`edit`){Wt();return}F.value?.persistAllDevices()}function Qe(e){L.value&&F.value?.setModelScale(L.value.id,e,L.value.kind)}function $e(e){L.value&&F.value?.persistScale(L.value.kind,L.value.id)}function et(){L.value=null}let V=C(null),H=C(null);function tt(e){V.value=e,H.value=e?F.value?.getChannelLayout(e)??null:null}async function nt(){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 M.save(V.value,t),B.value={state:`saved`,at:Date.now()}}catch(e){B.value={state:`error`,at:Date.now()},R.value=I(e)}}async function rt(){if(V.value)try{await M.remove(V.value),F.value?.removeChannel(V.value),tt(null)}catch(e){R.value=I(e)}}function it(){!V.value||!H.value||(F.value?.updateChannelLayout(V.value,H.value),B.value={state:`dirty`,at:Date.now()})}let at=C(``);function st(e){let t=F.value;if(t){if(e.placed){t.focusChannel(e.channelId),tt(e.channelId);return}at.value=a(`townView.k7rvbts159`),window.setTimeout(()=>{at.value=``},2600)}}function lt(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)?(at.value=a(`townView.kcyn0191`,{p0:o}),window.setTimeout(()=>{at.value=``},2600),r.focusChannel(e),tt(e),!1):(r.dropChannelOnWorld(t,n,e,o,s),M.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 ut=m(()=>T.models.filter(e=>e.kind===`glb`)),dt=m(()=>T.models.filter(e=>e.kind===`dev`)),ft=C(``),U=C(null),W=C(!1);e(()=>L.value,e=>{if(ft.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 pt=m(()=>{let e=L.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 mt(){let e=L.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 ht(){!L.value||L.value.kind!==`agent`||!U.value||(F.value?.setAgentRangeScene(L.value.id,U.value),B.value={state:`dirty`,at:Date.now()})}function gt(){!L.value||L.value.kind!==`agent`||F.value?.commitAgentRange(L.value.id)}function _t(){let e=L.value;!e||e.kind!==`agent`||(F.value?.clearAgentRange(e.id),U.value=null,W.value=!1)}function vt(){if(!L.value||L.value.kind!==`device`)return;let e=L.value.id,t=ft.value.trim();t&&(F.value?.renameDevice(e,t),O.update(e,{name:t}).catch(e=>{R.value=I(e)}))}async function yt(e){let t=L.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 T.bind(r,n,e),F.value?.swapAgentModel(n,e)}catch(e){R.value=I(e)}}async function bt(e){let t=L.value;if(!(!t||t.kind!==`device`)){F.value?.swapDeviceModel(t.id,e);try{await O.update(t.id,{modelRef:e})}catch(e){R.value=I(e)}}}let xt=C(``);function St(){let e=L.value;if(!(!e||e.kind!==`device`)){if(xt.value!==e.id){xt.value=e.id,window.setTimeout(()=>{xt.value===e.id&&(xt.value=``)},3e3);return}xt.value=``,F.value?.removeDevice(e.id).then(()=>et()).catch(e=>{R.value=I(e)})}}let Ct=C(`boundary`),wt=m(()=>V.value?G().find(e=>e.channelId===V.value)?.agents??[]:[]);async function Tt(e,t){if(V.value)try{await T.bind(V.value,e,t),F.value?.swapAgentModel(e,t)}catch(e){R.value=I(e)}}function Et(e){Ct.value=e}let Dt=C(0),Ot=m(()=>(Dt.value,kt().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:jt(e)}))));function kt(){let e=[];for(let t of At()??[])for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e.includes(u.channelId)||e.push(u.channelId),e}function At(){return _.workspaces}function jt(e){return be(e)}function Mt(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 Nt(e){!e||!(`registerModelsFromList`in e)||(`screenToWorld`in e?e.registerModelsFromList(T.models.map(e=>({id:e.id,file:e.file,name:e.name,kind:e.kind,hFactor:e.hFactor??1}))):e.registerModelsFromList(T.models.map(e=>({id:e.id,file:e.file,name:e.name}))))}e(()=>T.models.map(e=>`${e.id}:${e.file}`).join(`|`),()=>Nt(P.value));async function Pt(){P.value||!xe.value||(Ce?await Ft():await It())}async function Ft(){let e=xe.value;if(!e)return;let[{TownScene3D:t}]=await Promise.all([ce(()=>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 O.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 O.update(e,t)},async remove(e){if(J.nodeById(e)){await J.removeNode(e);return}await O.remove(e)},async control(e,t,n){return O.control(e,t,n)}},n.agentApi={async updateHome(e,t,n,r){return Ye(e,t,n,r)},async updateRange(e,t,n){return Xe(e,t,n)}},n.channelApi={async save(e,t){return M.save(e,t)}},P.value=n,Nt(n),F.value=n,n.setFpsCap(Number(kf.value)),n.setQualityMode(Mf.value),Lt(n),n.on(`select`,e=>{L.value=e}),n.on(`saveState`,e=>{B.value=e}),n.on(`selectChannel`,e=>{tt(e)}),n.on(`channelResized`,e=>{e&&V.value===e.channelId&&(H.value=e.layout)}),n.on(`agentRangeChanged`,e=>{if(e&&L.value?.kind===`agent`&&L.value.id===e.agentId){let t=F.value?.getAgentRange?.(e.agentId);U.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null}}),Me.value=!0,Rt(n),np=du(n),M.load().then(()=>{n.hydrate(G(),Object.values(M.layouts),cu.value),Jt()}).catch(e=>{R.value=a(`townView.k1hmf2ut192`,{p0:I(e)}),window.setTimeout(()=>{M.load()},2500)})}async function It(){let e=xe.value;if(!e)return;let[t,{TownScene:n}]=await Promise.all([ce(()=>import(`./BGkumHZ32.js`),[],import.meta.url),ce(()=>import(`./RYFtK4qZ2.js`),__vite__mapDeps([4,5,1,2]),import.meta.url)]),r=new n(G());P.value=r,Nt(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});Se.value=i,Lt(r),r.on(`ready`,()=>{Me.value=!0,Rt(r)})}function Lt(e){let t=e;t.on(`fps`,e=>{Fe.value=e}),t.on(`agentCount`,e=>{Ie.value=e}),t.on(`blockCount`,e=>{Le.value=e,Dt.value++}),t.on(`lastActivity`,e=>{Re.value=e});let n=w.subscribe(t=>{try{if(t.type===`channel.snapshot`){e.rebuild(G()),P.value&&Kt(P.value),u.channelId&&e.focusChannel(u.channelId);return}if(t.type===`device.updated`){O.applyRemote(t.payload),P.value&&Kt(P.value);return}if(t.type===`device.created`){O.load().then(()=>{P.value&&Kt(P.value)});return}if(t.type===`device.deleted`){O.removeRemote(t.payload.id),P.value&&Kt(P.value);return}if(t.type===`scene.layout.saved`||t.type===`scene.layout.removed`){M.load().then(()=>{qt(P.value),Jt()});return}let n=pe(t)?.bubble;n?.agentId&&Ql(n.agentId,n.kind,n.text,t.at,t.seq),e.handleTownEvent(t)}catch(e){R.value=I(e)}});P._off=n,window.__town={get scene(){return P.value},get game(){return Se.value},buildInput:G,get characterAssets(){return T}}}function Rt(e){if(`screenToWorld`in e){Gt(e);return}Vt(e)}let Bt=[];function Vt(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),Bt.push(()=>window.removeEventListener(`pointermove`,o)),Bt.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);rn.value=a})}let Ht=null;function Wt(){R.value=a(`townView.kt6xb5p162`),Ht&&clearTimeout(Ht),Ht=setTimeout(()=>{R.value=``},2600)}function Gt(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),Bt.push(()=>window.removeEventListener(`pointermove`,a)),Bt.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`){Wt();return}let r=n.getData(`application/x-aw-channel`)||n.getData(`text/plain`);if(r&&Ot.value.some(e=>e.channelId===r)){let n=e.screenToWorld(t.clientX,t.clientY);lt(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=od(r.x,r.z,95);e&&id(i,e.id)}}).catch(e=>{R.value=I(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=od(r.x,r.z,95);e&&Y.bindNode(a,e.id).catch(e=>{R.value=I(e)})}P.value&&Kt(P.value)}).catch(e=>{R.value=I(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);rn.value=r}})}function Kt(e){`syncDevices`in e&&e.syncDevices(cu.value)}e(()=>M.rev,e=>{let t=F.value;!t||!M.loaded||e===0||(t.hydrate(G(),Object.values(M.layouts),cu.value),Jt())});function qt(e){if(!e||!(`applySceneLayouts`in e))return;let t=e;t.applySceneLayouts(Object.values(M.layouts)),t.rebuild(G())}function Jt(){M.load().finally(()=>{})}function Yt(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 Xt=h({});function Zt(){if(!(typeof localStorage>`u`))try{let e=JSON.parse(localStorage.getItem(Ul)||`{}`);for(let t of Object.keys(e))e[t]&&Number.isFinite(e[t].x)&&(Xt[t]=e[t])}catch{}}function Qt(){try{localStorage.setItem(Ul,JSON.stringify(Xt))}catch{}}let $t=null;function en(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`,Xt[t]={x:a.left-o.left,y:a.top-o.top},$t={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=$t;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`,Xt[t]={x:s,y:c}},c=()=>{$t=null,document.body.style.userSelect=``,document.body.style.cursor=``,window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),Qt()};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c)}Zt();let tn=y(null),nn=e=>`#${e.toString(16).padStart(6,`0`)}`,rn=y(null),an=m(()=>{let e=rn.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}):``}),on=m(()=>{let e=L.value;if(!e||e.kind!==`agent`)return[];let t=mn.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)}),sn=m(()=>!L.value||L.value.kind!==`agent`?``:F.value?.getAgentName?.(L.value.id)??a(`townView.k3xdvm125`)),K=m(()=>{let e=L.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}),cn=m(()=>K.value?.role===`lead`?`Leader`:`Worker`),ln=m(()=>K.value?.role===`lead`?`LEADER`:`WORKER`),un=m(()=>{let e=K.value?.state;return a(e===`busy`?`townView.k3n4l5f163`:e===`stopped`?`townView.k3n58d1164`:`townView.k3zcvb115`)}),q=C([]),dn=C(!1),fn=new Map,pn=C(null),mn=h(new Map);function Ql(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=mn.get(e);o||(o=[],mn.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>ql&&o.splice(0,o.length-ql))}function $l(){return typeof document>`u`?``:document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``}function eu(e){for(let t of Object.keys(d.agents))if((d.agents[t]??[]).some(t=>t.agentId===e))return t}async function tu(e,t,n=!1){let r=fn.get(e);if(!n&&r&&Date.now()-r.at<Kl){q.value=r.rows;return}dn.value=!0;try{let n=$l(),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=pe(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),fn.set(e,{rows:o,at:Date.now()}),q.value=o}catch{q.value=[]}finally{dn.value=!1}}function nu(){let e=L.value;if(!e||e.kind!==`agent`)return;let t=eu(e.id);t&&tu(e.id,t,!0)}e(()=>L.value,e=>{if(!e||e.kind!==`agent`){q.value=[];return}let t=eu(e.id);t?tu(e.id,t):q.value=[]},{immediate:!0});let ru=m(()=>{let e=L.value;if(!e||e.kind!==`agent`)return`#35e0a0`;let t=eu(e.id);return t?be(t)??`#35e0a0`:`#35e0a0`});function iu(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 au(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+on.value.length,async()=>{await ee();let e=pn.value;e&&(e.scrollTop=e.scrollHeight)});let ou=e=>Y.lines.find(t=>t.id===e)?.color,su=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?ou(e.lineId):void 0,updatedAt:e.lastWriteAt??e.createdAt}))),cu=m(()=>[...O.twins.filter(e=>!Ou(e)),...X.value,...su.value]),lu=e=>cu.value.find(t=>t.id===e),uu=m(()=>Me.value&&Le.value===0&&!cu.value.some(e=>typeof e.posX==`number`&&typeof e.posZ==`number`));function du(e){return j(()=>{O.load().then(()=>{if(P.value===e){e.syncDevices(cu.value);for(let t of e.getDeviceNodes()){let n=lu(t.twinId);n&&e.updateDeviceNode(t.twinId,n.state,n.telemetry)}}})},5e3)}let fu=y([]),J=ke(),Y=Ae(),pu=h(Y.templates.map(e=>({id:e.key,name:Pe(a,e),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&&pu.splice(0,pu.length,...e.map(e=>({id:e.key,name:Pe(a,e),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 mu=hn(`aw.twin.treeOpen`,{});function hu(e){mu.value[e]=!mu.value[e]}let gu=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}),_u=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 vu(e){try{let t=(gu.value.get(e.id)?.length??0)+1;await J.createFromTemplate(`daq-${e.id}`,{name:`${e.name} ${String(t).padStart(2,`0`)}`}),mu.value[`daq:${e.id}`]=!0}catch(e){R.value=I(e)}}async function yu(e){try{await Y.createFromTemplate(`dcw-${e.id}`,{}),mu.value[`dcw:${e.id}`]=!0}catch(e){R.value=I(e)}}function bu(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 xu(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 Su(e){return!J.controller.running||!e.enabled||e.state===`offline`?`offline`:e.state===`alarm`?`alarm`:e.state===`warn`?`warn`:`running`}function Cu(e){return!e.enabled||e.state===`error`?`offline`:`running`}let wu=h(Oe.map(e=>({id:e.key,name:Pe(a,e),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&&wu.splice(0,wu.length,...e.map(e=>({id:e.key,name:Pe(a,e),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 Tu=e=>{let t=e.startsWith(`daq-`)?e.slice(4):e;return wu.find(e=>e.id===t)},Eu=e=>Tu(e.templateRef);function Du(e){return!J.controller.running||!e.enabled?`offline`:e.state===`alarm`?`alarm`:`running`}let Ou=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),X=m(()=>J.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`daq-${Eu(e)?.id??`unknown`}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:Du(e),posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?ou(e.lineId):void 0,updatedAt:e.lastAt??e.createdAt}))),ku=C(0),Au=new Map,ju=new Map,Mu=null,Nu=!1;function Pu(){Nu||(Nu=!0,setTimeout(()=>{Nu=!1,ku.value++},200))}function Fu(e){if(!e.nodeId||typeof e.value!=`number`||!Number.isFinite(e.value))return;let t=e.state??`ok`;Au.set(e.nodeId,{value:e.value,state:t,atMs:Date.parse(e.at??``)||Date.now()});let n=ju.get(e.nodeId);n||(n=[],ju.set(e.nodeId,n)),n.push(e.value),n.length>Jl&&n.shift();let r=Ru.get(e.nodeId);r&&r!==t&&zu(e.nodeId,r,t,e.value),r!==t&&Ru.set(e.nodeId,t),Pu()}let Iu=m(()=>{ku.value;let e=new Map;for(let t of J.nodes){let n=Eu(t);if(!n)continue;let r=Au.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:ju.get(t.id)??t.hist,phase:0,tpl:n,alarm:o===`alarm`})}return e}),Lu=e=>e.value.toFixed(e.tpl.decimals),Ru=new Map;function zu(e,t,n,r){let i=J.nodeById(e),o=i?Eu(i):null,s=i?.deviceIds??(i?.deviceBindingId?[i.deviceBindingId]:[]),c=(s.length?s.map(e=>O.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`?wf(a(`townView.k113fir9195`,{p0:c,p1:o?.ch??``,p2:l}),`crit`,c):n===`warn`?wf(a(`townView.k1knv89d196`,{p0:c,p1:o?.ch??``,p2:l}),`warn`,c):t!==`ok`&&n===`ok`&&wf(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=Ru.get(e.id);Ru.set(e.id,e.state),!(!t||t===e.state)&&zu(e.id,t,e.state,e.value)}});function Bu(e){return Math.max(0,Math.ceil((Date.parse(e.expiresAt)-Date.now())/1e3))}let Vu=()=>{let e=document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``;return{"content-type":`application/json`,authorization:`Bearer ${decodeURIComponent(e)}`}},Hu=C([]),Uu=C(`dcw`),Wu=C(``),Gu=C(`auto`),Ku=C([]),qu=h({}),Ju=null;async function Yu(){let e=L.value?.id;if(!(L.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/bindings?agentId=${encodeURIComponent(e)}`,{headers:Vu()}).then(e=>e.json());Hu.value=t.data?.bindings??[]}catch{}}async function Xu(){let e=L.value?.id;if(!(L.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/approvals?agentId=${encodeURIComponent(e)}`,{headers:Vu()}).then(e=>e.json());Ku.value=t.data?.approvals??[]}catch{}}async function Zu(){!L.value?.id||!Wu.value||(await fetch(`/api/workshop/agent-tools/bindings`,{method:`POST`,headers:Vu(),body:JSON.stringify({agentId:L.value.id,nodeId:Wu.value,kind:Uu.value,mode:Gu.value})}),Wu.value=``,await Yu())}async function Qu(e){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`DELETE`,headers:Vu()}),await Yu()}async function $u(e,t){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`PATCH`,headers:Vu(),body:JSON.stringify({mode:t})}),await Yu()}async function ed(e,t){await fetch(`/api/workshop/agent-tools/approvals/${e}/decide`,{method:`POST`,headers:Vu(),body:JSON.stringify({approved:t,comment:qu[e]??``})}),Reflect.deleteProperty(qu,e),await Xu()}e(()=>L.value?.id,e=>{Ju&&=(clearInterval(Ju),null),L.value?.kind===`agent`&&e&&(Yu(),Xu(),Ju=j(()=>{Xu()},1e3))},{immediate:!0}),r(()=>{Ju&&clearInterval(Ju)});function td(e){return e.kind===`dcw`?Y.nodeById(e.nodeId)?.name??e.nodeId:J.nodeById(e.nodeId)?.name??e.nodeId}let nd=e=>J.nodeById(e)?.deviceIds?.[0]??J.nodeById(e)?.deviceBindingId??null,rd=e=>e?J.nodes.filter(t=>(t.deviceIds??(t.deviceBindingId?[t.deviceBindingId]:[])).includes(e)).map(e=>e.id):[];function id(e,t){J.bindNode(e,t).catch(e=>{R.value=I(e)})}function ad(e){J.bindNode(e,null).catch(e=>{R.value=I(e)})}function od(e,t,n){let r=null,i=n;for(let n of O.twins){if(Ou(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 sd=C(!1),cd=C(!1),ld=C(420);function ud(e,t){let n=t.currentTarget,r=n?.closest(`.panel`);if(n&&r){let e=n.getBoundingClientRect().top-r.getBoundingClientRect().top-12;ld.value=Math.max(160,Math.round(e))}e===`daq`?sd.value=!sd.value:cd.value=!cd.value}let dd=m(()=>{let e=L.value?.kind===`device`?L.value.id:``,t={};if(!e)return t;for(let n of J.nodes){if(n.deviceBindingId===e)continue;let r=Eu(n);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?O.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),fd=m(()=>Object.values(dd.value).reduce((e,t)=>e+t.length,0));function pd(e){let t=L.value?.kind===`device`?L.value.id:``;t&&(id(e,t),sd.value=!1)}let md=new Map;function hd(e,t){let n=t;n?md.set(e,n):md.delete(e)}function gd(){for(let[e,t]of md){let n=Iu.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=Jf(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&&Kt(P.value)}),e(()=>Y.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.deviceBindingId??``}:${e.value??``}`).join(`|`),()=>{P.value&&Kt(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 _d=m(()=>L.value?.kind===`device`&&(vd.value?.modelRef||``).startsWith(`daq-`)),vd=m(()=>L.value?.kind===`device`?lu(L.value?.id)??null:null),yd=m(()=>{let e=L.value?.id;return e?Iu.value.get(e)??null:null}),bd=C(``),xd=m(()=>{let e=L.value?.id;return e?rd(e).map(e=>{let t=lu(e),n=Iu.value.get(e),r=n?.tpl??Tu(t?.modelRef??``);return{daqId:e,name:t?.name??e,ch:r?.ch??a(`townView.k1ef3cls168`),icon:r?.icon??`gateway`,value:n?Lu(n):`--`,unit:n?.tpl.unit??r?.unit??``,color:Jf(e)}}):[]}),Sd=m(()=>{let e=L.value?.id;if(!e)return``;let t=nd(e);return t?O.twins.find(e=>e.id===t)?.name??t.slice(0,8):``}),Cd=e=>e?Y.nodes.filter(t=>t.deviceBindingId===e):[];function wd(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 Td=m(()=>{let e=L.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=wd(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 Ed(e){let t=wd(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 Dd(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 Od=h({}),kd=h({});function Ad(e){let t=Od[e.id];if(t==null||t===``)return;let n=Ed(e);if(Number(t)<n.lo||Number(t)>n.hi){kd[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}kd[e.id]=``,Y.write(e.id,Number(t)).then(t=>{t.ok||(kd[e.id]=t.message)}).catch(t=>{kd[e.id]=I(t)})}let jd=e=>{let t=e.startsWith(`dcw-`)?e.slice(4):e;return pu.find(e=>e.id===t)},Md=m(()=>{let e=L.value?.kind===`device`?L.value.id:``,t={};if(!e)return t;for(let n of Y.nodes){if(n.deviceBindingId===e)continue;let r=jd(n.templateRef);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?O.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),Nd=m(()=>Object.values(Md.value).reduce((e,t)=>e+t.length,0));function Pd(e){let t=L.value?.kind===`device`?L.value.id:``;t&&(Y.bindNode(e,t).catch(e=>{R.value=I(e)}),cd.value=!1)}function Fd(e){Y.bindNode(e,null).catch(e=>{R.value=I(e)})}let Id=m(()=>L.value?.kind===`device`&&(lu(L.value?.id)?.modelRef??``).startsWith(`dcw-`)),Z=m(()=>{let e=L.value?.id;return e?Y.nodeById(e)??null:null}),Ld=m(()=>{let e=Z.value;return e?Ed(e):null}),Rd=m(()=>{let e=Z.value;return e?.deviceBindingId?O.twins.find(t=>t.id===e.deviceBindingId)?.name??e.deviceBindingId.slice(0,8):``}),zd=C(``);function Bd(){let e=Z.value;!e||!zd.value||(Y.bindNode(e.id,zd.value).catch(e=>{R.value=I(e)}),zd.value=``)}function Vd(){let e=Z.value;e&&Y.bindNode(e.id,null).catch(e=>{R.value=I(e)})}function Hd(){let e=Z.value;e&&Ad(e)}function Ud(e){if(!e)return`--`;let t=Ed(e);return`${Number.isFinite(t.lo)?t.lo:`-∞`} ~ ${Number.isFinite(t.hi)?t.hi:`+∞`} ${e.unit}`}function Wd(e){if(!e)return``;let t=Ed(e);return`${Number.isFinite(t.lo)?t.lo:``} ~ ${Number.isFinite(t.hi)?t.hi:``}`}let Q=m(()=>{let e=L.value?.id;return e?J.nodeById(e)??null:null}),Gd=C(null);e(Q,e=>{Gd.value=e?e.intervalMs??J.controller.defaultIntervalMs:null},{immediate:!0});function Kd(){let e=Q.value;!e||Gd.value==null||J.patchNode(e.id,{intervalMs:Math.max(120,Math.min(6e4,Math.round(Gd.value)))}).catch(e=>{R.value=I(e)})}function qd(e,t){let n=Number(t);Number.isFinite(n)&&J.patchNode(Q.value.id,{[e]:(e.startsWith(`warn`),n)}).catch(e=>{R.value=I(e)})}let Jd=C(!0);function Yd(e){let t=nd(e)??e,n=lu(t);n&&(L.value={kind:`device`,id:t,scale:L.value?.scale??1,rotation:L.value?.rotation??0},ft.value=n.name)}let Xd=C(!1);function Zd(){Xd.value=!Xd.value,F.value?.setAutoOrbit(Xd.value)}function Qd(){let e=F.value,t=L.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 $d=C({}),ef=hn(`aw.twin.calloutNear`,1150),tf=m(()=>{let e={};for(let t of X.value){let n=Iu.value.get(t.id);if(!n)continue;let r={ch:n.tpl.ch,value:Lu(n),unit:n.tpl.unit,alarm:n.alarm??!1};(e[t.id]??=[]).push(r);let i=nd(t.id);i&&(e[i]??=[]).push(r)}return e}),nf=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=Ed(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}),rf=C({pos:{x:0,y:0,z:0},target:{x:0,z:0},yaw:0,dolly:1}),af=m(()=>{if(!Jd.value)return[];let e=F.value;if(!e)return[];let t=e.getDeviceNodes(),n=uf.value?.clientWidth??1600,r=[];for(let e of X.value){let n=Iu.value.get(e.id);if(!n)continue;let i=nd(e.id),a=i?t.find(e=>e.twinId===i):t.find(t=>t.twinId===e.id);if(!a)continue;let o=$d.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(rf.value.pos.x-t.anchor.x,rf.value.pos.y-(i.get(t.anchor.twinId)??60),rf.value.pos.z-t.anchor.z)<ef.value,a=Math.min(n-96,Math.max(96,t.pos.x));e.forEach((e,n)=>{let{lo:i,hi:s}=Ff(e.st.tpl.min,e.st.tpl.max);o.push({id:e.t.id,x:a,y:t.pos.y-n*Yl,label:`${e.st.tpl.ch} · ${e.anchor.name||e.t.name}`,value:Lu(e.st),unit:e.st.tpl.unit,lo:i,hi:s,warn:e.st.alarm??!1,near:r,leader:n===0})})}return o}),of=null,sf=m(()=>O.twins.length),cf=m(()=>O.twins.filter(e=>e.state===`running`).length),lf=de(),uf=C(null),df=C(`std`);function ff(e){df.value=e.target.value,F.value?.setViewPreset(df.value)}function pf(){document.fullscreenElement?document.exitFullscreen():uf.value?.requestFullscreen?.()}let mf=m(()=>O.twins.filter(e=>e.state===`idle`).length),hf=m(()=>O.twins.filter(e=>e.state===`alarm`).length),gf=m(()=>O.twins.filter(e=>e.state===`offline`).length),_f=m(()=>{let e=O.twins.length;if(!e)return 100;let t=cf.value+mf.value;return Math.round(t/e*100)}),vf=m(()=>_f.value>=90?`#35e0a0`:_f.value>=60?`#f6c453`:`#ff6b6b`),yf=C(null);function bf(){let e=yf.value;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let n=O.twins.length||1,r=[{n:cf.value,color:`#35e0a0`},{n:mf.value,color:`#f6c453`},{n:hf.value,color:`#ff6b6b`},{n:gf.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(_f,()=>bf()),e(()=>O.twins.length,()=>bf()),i(()=>bf());let xf=C([]),Sf=0,Cf=[a(`townView.k3ng94k170`),a(`townView.k3mi2n0171`),a(`townView.k3ncnxl172`)];function wf(e,t=`warn`,n=`SYSTEM`){let r=new Date,i=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,`0`)).join(`:`);xf.value.unshift({id:++Sf,txt:e,src:n,time:i,state:0,level:t}),xf.value.length>30&&xf.value.pop()}let Tf=m(()=>xf.value.filter(e=>e.state<2).length);function Ef(e){let t=xf.value.find(t=>t.id===e);t&&(t.state=Math.min(2,t.state+1))}function Df(){xf.value=xf.value.map(e=>({...e,state:2}))}let Of=C(100),kf=hn(`aw.twin.fpsCap`,`60`),Af=[{v:`60`,label:`60`},{v:`120`,label:`120`},{v:`0`,label:`∞`}];function jf(e){kf.value=e,F.value?.setFpsCap(Number(e))}let Mf=hn(`aw.twin.quality`,`auto`),Nf=[{v:`auto`,label:`townView.qualityAuto`},{v:`normal`,label:`townView.qualityNormal`},{v:`hd`,label:`townView.qualityHD`},{v:`ultra`,label:`townView.qualityUltra`}];function Pf(e){Mf.value=e,F.value?.setQualityMode(e)}function Ff(e,t){let n=Of.value/100,r=(e+t)/2;return{lo:r-(r-e)*n,hi:r+(t-r)*n}}let If=C(!1);function Lf(){If.value=!If.value,wf(If.value?a(`townView.kb157zk173`):a(`townView.k1s9qzr9174`),If.value?`crit`:`info`,`SYSTEM`)}let Rf=C(1.12),zf=C(1);function Bf(e,t,n){return`${Math.min(100,Math.max(0,(e-t)/(n-t)*100)).toFixed(1)}%`}function Vf(e){Rf.value=Number(e.target.value)/100,F.value?.setExposure(Rf.value)}function Hf(e){zf.value=Number(e.target.value)/100,F.value?.setTerritoryOpacity(zf.value)}function Uf(){F.value?.resetView(),Rf.value=1.12,zf.value=1,F.value?.setExposure(1.12),F.value?.setTerritoryOpacity(1)}function Wf(e){Kf.value={...Kf.value,[e]:!Kf.value[e]}}let Gf=C(null),Kf=C({}),qf=[`#35e0a0`,`#41c8f4`,`#f6c453`,`#a78bfa`,`#ff6b6b`,`#4dd0e1`],Jf=e=>qf[Math.abs(e.split(``).reduce((e,t)=>e*31+t.charCodeAt(0),7))%qf.length]??`#35e0a0`;function Yf(e,t){let n=Kf.value[e];return n==null?(t??X.value.findIndex(t=>t.id===e))<Xl:!n}let Xf=C(!1),Zf=m(()=>Math.max(X.value.length-Xl,0)),Qf=m(()=>Xf.value?X.value:X.value.slice(0,Xl));function $f(){let e=Gf.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(!Yf(e.id,t))return;let a=Iu.value.get(e.id);if(!a)return;let o=ju.get(e.id)??a.hist;if(o.length<2)return;let s=a.tpl.min,c=a.tpl.max;i.strokeStyle=Jf(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 ep=null,tp=null,np=null,rp=null,ip=C(null),ap=m(()=>Math.min(5,Math.max(.4,rf.value.dolly))),$=null;function op(e){let t=e.clientWidth||220,n=e.clientHeight||148;return{s:t/(Zl*ap.value),w:t,h:n}}function sp(){let e=ip.value,t=tn.value,n=F.value;if(!e)return;let r=Math.min(window.devicePixelRatio||1,2),i=op(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:Wl/2,c=o?o.target.z:Gl/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(Wl,Gl);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*Wl,n=e.y*Gl;if(!f(t,n,400))continue;let r=d(t,n),o=Math.max(4,(e.rx??.03)*Wl*i.s),s=Math.max(3,(e.rz??.03)*Gl*i.s);a.strokeStyle=nn(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=nn(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*Wl,r.y*Gl),s=d(i.x*Wl,i.y*Gl);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*Wl,e.y*Gl));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=nn(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*Wl,e.y*Gl));a.globalAlpha=t.edge?.35:1,a.fillStyle=nn(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 cp(e){F.value?.zoomBy(e.deltaY>0?.14:-.12)}function lp(e){$={lx:e.clientX,ly:e.clientY,moved:!1};try{e.target.setPointerCapture?.(e.pointerId)}catch{}}function up(e){let t=ip.value,n=F.value;if(!$||!t||!n)return;let r=op(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 dp(e){let t=ip.value,n=F.value;if($&&!$.moved&&t&&n){let r=t.getBoundingClientRect(),i=op(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 fp(){let e=P.value;e?.getMinimapState&&(tn.value=e.getMinimapState()),sp();let t=F.value;if(t&&(rf.value=t.getCameraPose(),Jd.value)){let e=t.getDeviceNodes(),n=uf.value?.getBoundingClientRect(),r={};for(let i of X.value){let a=nd(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})}$d.value=r}}function pp(){if(document.hidden){ep&&=(clearInterval(ep),null),rp&&=(clearInterval(rp),null),tp&&=(clearInterval(tp),null);return}ep||=j(fp,150),rp||=j(()=>{J.nodes.length&&($f(),gd())},200),tp||=j(()=>{let e=P.value;e?.getRecentActivity&&(fu.value=e.getRecentActivity())},400)}return i(()=>{window.addEventListener(`keydown`,qe),document.addEventListener(`visibilitychange`,pp),J.ensureWsFeed(),J.load(),Mu=ue().subscribe(e=>{e.type===`daq.reading`&&Fu(e.payload)}),Y.ensureWsFeed(),Y.load(),ep=j(fp,150),rp=j(()=>{J.nodes.length&&($f(),gd())},200),tp=j(()=>{let e=P.value;e?.getRecentActivity&&(fu.value=e.getRecentActivity())},400)}),r(()=>{window.removeEventListener(`keydown`,qe);for(let e of Bt)try{e()}catch{}Bt.length=0,document.removeEventListener(`visibilitychange`,pp),ep&&clearInterval(ep),rp&&clearInterval(rp),tp&&clearInterval(tp),np&&clearInterval(np),of&&clearInterval(of),ep=null,rp=null,tp=null,np=null,of=null}),i(()=>{Pt();let e=G();e.length>0&&P.value&&P.value.rebuild(e)}),r(()=>{Mu?.();let e=P._off;e?.(),F.value?.dispose(),F.value=null,Se.value?.destroy(!0),Se.value=null,P.value=null}),(e,t)=>{let r=ot,i=ct,u=zt;return s(),v(`div`,gn,[g(`header`,{class:c([`topnav`,{"sheet-on":E(N)}])},[g(`div`,_n,[t[55]||=re(`<svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-7027783b><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-7027783b></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-7027783b></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-7027783b></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-7027783b></circle></svg>`,1),g(`div`,null,[t[54]||=g(`div`,{class:`brand-name`},[D(` DIGITAL `),g(`em`,null,`TWIN`)],-1),g(`div`,vn,` AGENTWORKSHOP · `+o(e.$t(`townView.klyi8yg127`)),1)])]),g(`nav`,{class:`nav-tabs`,"aria-label":e.$t(`townView.k1c9jyta001`)},[g(`div`,bn,[g(`button`,{class:c({on:E(z)===`browse`}),onClick:t[0]||=e=>E(z)===`edit`&&We()},o(e.$t(`townView.k48dwh027`)),3),g(`button`,{class:c({on:E(z)===`edit`}),onClick:t[1]||=e=>E(z)===`browse`&&We()},o(e.$t(`townView.k45eb0028`)),3)]),g(`button`,{class:`nav-action`,disabled:E(z)!==`edit`,title:E(z)===`edit`?e.$t(`townView.saveLayoutTip`):e.$t(`townView.readonlyTip`),onClick:Ze},o(e.$t(`townView.k1b3bk8t029`)),9,xn),E(B)&&E(B).state!==`idle`?(s(),v(`span`,{key:0,class:c([`save-chip`,`s-${E(B).state}`])},o(E(Ue)),3)):x(``,!0)],8,yn),g(`div`,Sn,[g(`span`,{class:c([`nav-chip mono`,{"nav-bell-warn":E(Tf)>0}]),title:e.$t(`townView.k1fsi3ir002`)},`◉ `+o(E(Tf)),11,Cn),g(`span`,wn,o(E(Fe))+` FPS`,1),g(`div`,{class:`avatar-chip nav-user`,title:e.$t(`townView.k1demf38003`)},[g(`div`,En,o((E(lf).user?.name??`OP`).slice(0,2).toUpperCase()),1),g(`span`,null,o(E(lf).user?.name||e.$t(`townView.k1pub99m139`)),1)],8,Tn),g(`button`,{type:`button`,class:c([`sheet-btn`,{on:E(N)===`left`}]),"aria-controls":`town-rail-left`,"aria-expanded":E(N)===`left`?`true`:`false`,title:e.$t(`townView.k1k75lzy030`),onClick:t[2]||=e=>_e(`left`)},[t[56]||=g(`svg`,{class:`sheet-ico`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[g(`path`,{d:`M4 6h16M4 12h11M4 18h16`})],-1),g(`span`,On,o(e.$t(`townView.k1k75lzy030`)),1)],10,Dn),g(`button`,{type:`button`,class:c([`sheet-btn`,{on:E(N)===`right`}]),"aria-controls":`town-rail-right`,"aria-expanded":E(N)===`right`?`true`:`false`,title:e.$t(`townView.k17dkhgd112`),onClick:t[3]||=e=>_e(`right`)},[t[57]||=g(`svg`,{class:`sheet-ico`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[g(`path`,{d:`M20 6H4M20 12H9M20 18H4`})],-1),g(`span`,An,o(e.$t(`townView.k17dkhgd112`)),1)],10,kn)])],2),g(`div`,jn,[g(`aside`,{id:`town-rail-left`,class:c([`rail rail-left`,{"sheet-open":E(N)===`left`}])},[g(`div`,Mn,[t[58]||=g(`span`,{class:`sheet-grip`,"aria-hidden":`true`},null,-1),g(`span`,Nn,o(e.$t(`townView.k1k75lzy030`)),1),g(`button`,{type:`button`,class:`sheet-x`,"aria-label":e.$t(`common.close`),onClick:ve},` ✕ `,8,Pn)]),g(`section`,Fn,[g(`div`,In,[g(`h3`,null,o(e.$t(`townView.k1k75lzy030`)),1),g(`span`,Ln,o(E(dt).length),1)]),f(r,{class:`lib-embed`})]),g(`section`,Rn,[g(`div`,zn,[g(`h3`,null,o(e.$t(`townView.k2gwyas031`)),1),g(`span`,Bn,o(E(X).length),1)]),g(`div`,Vn,[g(`button`,{class:c([`daq-ctl-btn`,{on:E(J).controller.running}]),title:E(J).controller.running?e.$t(`townView.daqPauseTip`):e.$t(`townView.daqResumeTip`),onClick:t[4]||=e=>E(J).controllerAction(E(J).controller.running?`pause`:`resume`)},o(E(J).controller.running?e.$t(`townView.k3w3j8f140`):e.$t(`townView.k3n93ed175`)),11,Hn),g(`label`,{class:`daq-ctl-cycle mono`,title:e.$t(`townView.khzlyf5004`)},[D(o(e.$t(`townView.k3xg3w032`))+` `,1),g(`input`,{type:`number`,min:`200`,max:`60000`,step:`100`,value:E(J).controller.defaultIntervalMs,onChange:t[5]||=e=>E(J).controllerAction(`config`,Number(e.target.value))},null,40,Wn),t[59]||=D(`ms `,-1)],8,Un)]),g(`div`,Gn,[(s(!0),v(b,null,l(E(wu),n=>(s(),v(`div`,{key:n.id,class:`daq-group`},[g(`div`,{class:c([`daq-card tpl`,{open:!!E(mu)[`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=>hu(`daq:${n.id}`),onKeydown:ie(ae(e=>hu(`daq:${n.id}`),[`prevent`]),[`enter`])},[t[60]||=g(`span`,{class:`daq-caret`},`▶`,-1),g(`span`,qn,[f(i,{class:`daq-svg`,icon:n.icon},null,8,[`icon`])]),g(`div`,Jn,[g(`span`,Yn,o(n.name),1),g(`span`,Xn,o(n.code),1)]),E(z)===`edit`?(s(),v(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:n.name}),onClick:ae(e=>vu(n),[`stop`])},` + `,8,Zn)):x(``,!0),g(`span`,Qn,`×`+o(E(gu).get(n.id)?.length??0),1)],42,Kn),E(mu)[`daq:${n.id}`]?(s(),v(`div`,$n,[(s(!0),v(b,null,l(E(gu).get(n.id)??[],t=>(s(),v(`div`,{key:t.id,class:c([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:E(z)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>bu(e,t),onClick:e=>typeof t.posX==`number`&&Yt({id:t.id,posX:t.posX,posZ:t.posZ})},[g(`span`,{class:c([`node-dot`,Su(t)])},null,2),g(`div`,tr,[g(`span`,nr,o(t.name),1),g(`span`,rr,[g(`span`,ir,o(t.value==null?`--`:`${t.value.toFixed(n.decimals)} ${n.unit}`),1),g(`span`,ar,o(t.deviceBindingId?E(O).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(s(),v(`span`,or,`✓`)):x(``,!0)],42,er))),128)),E(gu).get(n.id)?.length?x(``,!0):(s(),v(`div`,sr,o(e.$t(`townView.k2tplxp0003`)),1))])):x(``,!0)]))),128))])]),g(`section`,cr,[g(`div`,lr,[g(`h3`,null,o(e.$t(`townView.km7ayhi033`)),1),g(`span`,ur,o(E(Y).nodes.length),1)]),g(`div`,dr,[(s(!0),v(b,null,l(E(pu),n=>(s(),v(`div`,{key:n.id,class:`daq-group`},[g(`div`,{class:c([`daq-card tpl`,{open:!!E(mu)[`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=>hu(`dcw:${n.id}`),onKeydown:ie(ae(e=>hu(`dcw:${n.id}`),[`prevent`]),[`enter`])},[t[61]||=g(`span`,{class:`daq-caret`},`▶`,-1),g(`span`,pr,[f(i,{class:`daq-svg`,icon:n.icon},null,8,[`icon`])]),g(`div`,mr,[g(`span`,hr,o(n.name),1),g(`span`,gr,o(n.code),1)]),E(z)===`edit`?(s(),v(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:n.name}),onClick:ae(e=>yu(n),[`stop`])},` + `,8,_r)):x(``,!0),g(`span`,vr,`×`+o(E(_u).get(n.id)?.length??0),1)],42,fr),E(mu)[`dcw:${n.id}`]?(s(),v(`div`,yr,[(s(!0),v(b,null,l(E(_u).get(n.id)??[],t=>(s(),v(`div`,{key:t.id,class:c([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:E(z)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>xu(e,t),onClick:e=>typeof t.posX==`number`&&Yt({id:t.id,posX:t.posX,posZ:t.posZ})},[g(`span`,{class:c([`node-dot`,Cu(t)])},null,2),g(`div`,xr,[g(`span`,Sr,o(t.name),1),g(`span`,Cr,[g(`span`,wr,o(t.value==null?`--`:`${t.value.toFixed(n.decimals)} ${n.unit}`),1),g(`span`,Tr,o(t.deviceBindingId?E(O).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(s(),v(`span`,Er,`✓`)):x(``,!0)],42,br))),128)),E(_u).get(n.id)?.length?x(``,!0):(s(),v(`div`,Dr,o(e.$t(`townView.k2tplxp0003`)),1))])):x(``,!0)]))),128))])]),g(`section`,Or,[g(`div`,kr,[g(`h3`,null,o(e.$t(`townView.k1c9n911034`)),1),g(`span`,Ar,o(E(Ot).length),1)]),g(`div`,jr,[(s(!0),v(b,null,l(E(Ot),t=>(s(),v(`div`,{key:t.channelId,class:c([`scene-row`,{active:t.placed}]),draggable:!t.placed&&E(z)===`edit`,"data-channel-id":t.channelId,title:t.placed?e.$t(`townView.chPlaced`):e.$t(`townView.chDragHint`),onDragstart:e=>t.placed?void 0:Mt(e,t.channelId),onClick:e=>st(t)},[g(`span`,{class:`scene-ico`,style:n({"--ch":t.color})},null,4),g(`div`,Nr,[g(`span`,Pr,o(t.name),1),g(`span`,Fr,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`,Ir,`✓`)):(s(),v(`span`,Lr,`+`))],42,Mr))),128)),E(at)?(s(),v(`div`,Rr,o(E(at)),1)):x(``,!0)])])],2),g(`main`,zr,[g(`div`,{ref_key:`stageRef`,ref:uf,class:`stage`},[g(`div`,{id:`town-host`,ref_key:`hostRef`,ref:xe,class:`town-host`},null,512),t[74]||=g(`div`,{class:`stage-vignette`},null,-1),g(`div`,Br,[g(`div`,Vr,[g(`h2`,null,o(e.$t(`townView.k1b0z4vr035`)),1),g(`span`,Hr,`CH · `+o(E(Ve)||e.$t(`townView.k3lkuz3142`)),1)]),g(`div`,Ur,[g(`button`,{class:`vp-tool`,title:e.$t(`townView.k18d6wnb005`),onClick:Qd},[...t[62]||=[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,Wr),g(`button`,{class:c([`vp-tool`,{on:E(Xd)}]),title:e.$t(`townView.k1io51dn006`),onClick:Zd},[...t[63]||=[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,Gr),g(`button`,{class:c([`vp-tool`,{on:E(Jd)}]),title:e.$t(`townView.k1sgjlq8007`),onClick:t[6]||=e=>Jd.value=!E(Jd)},[...t[64]||=[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,Kr),g(`button`,{class:`vp-tool`,title:e.$t(`townView.k3wuf0008`),onClick:pf},[...t[65]||=[g(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[g(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})],-1)]],8,qr)])]),g(`div`,Jr,[g(`select`,{value:E(df),"aria-label":e.$t(`townView.k1k4j5i7009`),onChange:t[7]||=e=>ff(e)},[g(`option`,Xr,o(e.$t(`townView.kv72860036`)),1),g(`option`,Zr,o(e.$t(`townView.viewTop`)),1),g(`option`,Qr,o(e.$t(`townView.viewFront`)),1),g(`option`,$r,o(e.$t(`townView.viewSide`)),1)],40,Yr)]),E(Jd)?(s(),v(b,{key:0},[(s(),v(`svg`,ei,[(s(!0),v(b,null,l(E(af),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,ti),g(`circle`,{cx:e.x,cy:e.y,r:`2.6`,fill:e.warn?`#f6c453`:`#41c8f4`},null,8,ni)],2)),[[se,e.leader]])),128))])),g(`div`,ri,[(s(!0),v(b,null,l(E(af),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=>Yd(r.id)},[g(`div`,ai,[t[66]||=g(`span`,{class:`co-dot`},null,-1),D(o(r.label),1)]),g(`div`,oi,[D(o(r.value),1),g(`small`,null,o(r.unit),1)]),g(`div`,si,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,ii))),128))])],64)):x(``,!0),g(`div`,ci,[g(`div`,li,[t[67]||=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`,ui,[g(`div`,di,o(e.$t(`townView.k1k6xemt037`)),1),g(`div`,fi,[D(o(E(sf)),1),g(`small`,null,o(e.$t(`townView.k49lh038`)),1)])])]),g(`div`,pi,[t[68]||=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`,mi,[g(`div`,hi,o(e.$t(`townView.k1l1a9t2039`)),1),g(`div`,gi,[D(o(E(cf)),1),g(`small`,null,o(e.$t(`townView.k49lh038`)),1)])])]),g(`div`,_i,[t[69]||=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`,vi,[g(`div`,yi,o(e.$t(`townView.k1fsi3ir002`)),1),g(`div`,bi,[D(o(E(Tf)),1),g(`small`,null,o(e.$t(`townView.k4dfq040`)),1)])])]),g(`div`,xi,[t[70]||=re(`<span class="kpi-ico c4" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M9.5 14.5 14.5 9.5" data-v-7027783b></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-7027783b></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-7027783b></path></svg></span>`,1),g(`div`,Si,[g(`div`,Ci,o(e.$t(`townView.k1emsai1041`)),1),g(`div`,wi,[D(o(E(X).length),1),g(`small`,null,o(e.$t(`townView.k4l1w042`)),1)])])]),g(`div`,Ti,[t[72]||=re(`<span class="kpi-ico c5" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M5 19a9 9 0 1 1 14 0" data-v-7027783b></path><path d="M12 13l3.5-3.5" data-v-7027783b></path><circle cx="12" cy="13" r="1.4" data-v-7027783b></circle></svg></span>`,1),g(`div`,Ei,[g(`div`,Di,o(e.$t(`townView.kbrxdq1043`)),1),g(`div`,Oi,[D(o(E(_f)),1),t[71]||=g(`small`,null,`%`,-1)])])])]),E(uu)?(s(),v(`div`,ki,[g(`b`,null,o(e.$t(`townView.k3rwxjc044`)),1),g(`span`,null,o(e.$t(`townView.k1sa1eaj045`)),1)])):x(``,!0),E(V)&&E(H)?(s(),v(`div`,{key:2,class:`boundary-panel drag-panel`,style:n(E(Xt).boundary?{left:E(Xt).boundary.x+`px`,top:E(Xt).boundary.y+`px`,bottom:`auto`,transform:`none`}:void 0)},[g(`div`,{class:`bp-title drag-grip`,title:e.$t(`townView.k1d0rl5z011`),onPointerdown:t[10]||=e=>en(e,`boundary`)},[g(`span`,ji,o(E(d).channels[E(V)]?.name??E(V).slice(0,8)),1),g(`span`,Mi,o(e.$t(`townView.k1mehlxs046`)),1),g(`div`,Ni,[g(`button`,{class:c([`bp-tab`,{on:E(Ct)===`boundary`}]),onClick:t[8]||=e=>Et(`boundary`)},o(e.$t(`townView.k489ka047`)),3),g(`button`,{class:c([`bp-tab`,{on:E(Ct)===`members`}]),onClick:t[9]||=e=>Et(`members`)},o(e.$t(`townView.k3ztf1129`))+` `+o(E(wt).length),3)])],40,Ai),E(Ct)===`boundary`?(s(),v(b,{key:0},[g(`div`,Pi,[g(`span`,Fi,o(e.$t(`townView.k3zhy5048`)),1),g(`div`,Ii,[g(`button`,{class:c([`seg-btn`,{on:E(H).shape===`ellipse`}]),onClick:t[11]||=e=>{E(H).shape=`ellipse`,it()}},o(e.$t(`townView.k414bc049`)),3),g(`button`,{class:c([`seg-btn`,{on:E(H).shape===`rect`}]),onClick:t[12]||=e=>{E(H).shape=`rect`,it()}},o(e.$t(`townView.k43u0g050`)),3)])]),g(`div`,Li,[g(`span`,Ri,o(e.$t(`townView.k1fbz4s1051`)),1),S(g(`input`,{"onUpdate:modelValue":t[13]||=e=>E(H).radiusX=e,class:`bp-range`,type:`range`,min:`80`,max:`4000`,step:`8`,style:n({"--fill":Bf(E(H).radiusX,80,4e3)}),onChange:it},null,36),[[A,E(H).radiusX,void 0,{number:!0}]]),g(`span`,zi,o(Math.round(E(H).radiusX)),1)]),g(`div`,Bi,[g(`span`,Vi,o(e.$t(`townView.k1ighwgs052`)),1),S(g(`input`,{"onUpdate:modelValue":t[14]||=e=>E(H).radiusZ=e,class:`bp-range`,type:`range`,min:`60`,max:`4000`,step:`8`,style:n({"--fill":Bf(E(H).radiusZ,60,4e3)}),onChange:it},null,36),[[A,E(H).radiusZ,void 0,{number:!0}]]),g(`span`,Hi,o(Math.round(E(H).radiusZ)),1)]),g(`div`,Ui,[g(`span`,Wi,o(e.$t(`townView.k40qab053`)),1),S(g(`input`,{"onUpdate:modelValue":t[15]||=e=>E(H).rotationY=e,class:`bp-range`,type:`range`,min:`0`,max:`360`,step:`5`,style:n({"--fill":Bf(E(H).rotationY??0,0,360)}),onChange:it},null,36),[[A,E(H).rotationY,void 0,{number:!0}]]),g(`span`,Gi,o(Math.round(E(H).rotationY??0))+`°`,1)])],64)):(s(),v(b,{key:1},[g(`div`,Ki,o(e.$t(`townView.kimxls2054`)),1),g(`div`,qi,[(s(!0),v(b,null,l(E(wt),e=>(s(),v(`div`,{key:e.agentId,class:`member-row`},[g(`span`,{class:`member-ava`,style:n({color:jt(E(V))})},o(e.name.charAt(0).toUpperCase()),5),g(`div`,Ji,[g(`span`,Yi,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=>Tt(e.agentId,t.target.value)},[(s(!0),v(b,null,l(E(ut),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,Zi))),128))],40,Xi)]))),128)),E(wt).length===0?(s(),v(`div`,Qi,o(e.$t(`townView.k419rbs055`)),1)):x(``,!0)])],64)),g(`div`,$i,[E(Ct)===`boundary`?(s(),v(`button`,{key:0,class:`bp-btn save`,onClick:nt},o(e.$t(`townView.k1b3kp8f056`)),1)):x(``,!0),g(`button`,{class:`bp-btn danger`,onClick:rt},o(e.$t(`townView.k1hs45qg057`)),1),g(`button`,{class:`bp-btn`,onClick:t[16]||=e=>tt(null)},o(e.$t(`townView.k3x62t058`)),1)])],4)):x(``,!0),E(an)?(s(),v(`div`,ea,o(E(an)),1)):x(``,!0),E(R)?(s(),v(`div`,ta,o(E(R)),1)):x(``,!0),E(Me)?x(``,!0):(s(),v(`div`,na,[t[73]||=g(`div`,{class:`loading-spinner`},null,-1),g(`span`,ra,o(e.$t(`townView.kvjdqfg059`)),1)]))],512),g(`div`,{class:c([`dock`,{"dock-open":E(ge)}])},[g(`button`,{type:`button`,class:`dock-toggle`,"aria-controls":`town-dock-controls`,"aria-expanded":E(ge)?`true`:`false`,onClick:t[17]||=e=>ge.value=!E(ge)},[g(`span`,aa,o(e.$t(`townView.k1c9iq23060`)),1),g(`span`,oa,o(E(z)===`edit`?e.$t(`townView.k1iipfcs143`):e.$t(`townView.k1l147w1177`)),1),t[75]||=g(`span`,{class:`dock-caret`,"aria-hidden":`true`},`▾`,-1)],8,ia),g(`section`,sa,[g(`div`,ca,[g(`h3`,null,o(e.$t(`townView.k1c9iq23060`)),1),g(`span`,la,o(E(z)===`edit`?e.$t(`townView.k1iipfcs143`):e.$t(`townView.k1l147w1177`)),1)]),g(`p`,ua,o(e.$t(`townView.secRender`)),1),g(`div`,da,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.qualityTip`)},o(e.$t(`townView.qualityLabel`)),9,fa),g(`div`,pa,[(s(),v(b,null,l(Nf,t=>g(`button`,{key:t.v,class:c({on:E(Mf)===t.v}),onClick:e=>Pf(t.v)},o(e.$t(t.label)),11,ma)),64))]),t[76]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`div`,ha,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.fpsCapTip`)},o(e.$t(`townView.fpsCapLabel`)),9,ga),g(`div`,_a,[(s(),v(b,null,l(Af,e=>g(`button`,{key:e.v,class:c({on:E(kf)===e.v}),onClick:t=>jf(e.v)},o(e.label),11,va)),64))]),t[77]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`p`,ya,o(e.$t(`townView.secEnv`)),1),g(`div`,ba,[g(`span`,xa,o(e.$t(`townView.k1gizopz061`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`30`,max:`220`,value:Math.round(E(Rf)*100),style:n({"--fill":Bf(Math.round(E(Rf)*100),30,220)}),onInput:t[18]||=e=>Vf(e)},null,44,Sa),g(`span`,Ca,o(Math.round(E(Rf)*100))+`%`,1)]),g(`div`,wa,[g(`span`,Ta,o(e.$t(`townView.k1bcpqto062`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`10`,max:`100`,value:Math.round(E(zf)*100),style:n({"--fill":Bf(Math.round(E(zf)*100),10,100)}),onInput:t[19]||=e=>Hf(e)},null,44,Ea),g(`span`,Da,o(Math.round(E(zf)*100))+`%`,1)]),g(`div`,Oa,[g(`span`,ka,o(e.$t(`townView.k1bztha1063`)),1),g(`input`,{class:`ctl-range`,type:`range`,min:`60`,max:`120`,value:E(Of),style:n({"--fill":Bf(E(Of),60,120)}),onInput:t[20]||=e=>Of.value=Number(e.target.value)},null,44,Aa),g(`span`,ja,o(E(Of))+`%`,1)]),g(`div`,Ma,[g(`span`,{class:`ctl-name`,title:e.$t(`townView.kz71l1f012`)},o(e.$t(`townView.ka4i1s9064`)),9,Na),g(`input`,{class:`ctl-range`,type:`range`,min:`0`,max:`3000`,step:`50`,value:E(ef),style:n({"--fill":Bf(E(ef),0,3e3)}),onInput:t[21]||=e=>ef.value=Number(e.target.value)},null,44,Pa),g(`span`,Fa,o(E(ef)===0?e.$t(`townView.k493s144`):`${E(ef)}`),1)]),g(`p`,Ia,o(e.$t(`townView.secOps`)),1),g(`div`,La,[g(`span`,Ra,o(e.$t(`townView.k1idc6pa065`)),1),g(`button`,{class:c([`snap-toggle`,{on:E(He)}]),onClick:Je},o(E(He)?e.$t(`townView.k4bs5145`):e.$t(`townView.k493s144`)),3),t[78]||=g(`span`,{class:`ctl-val`},null,-1)]),g(`div`,za,[g(`button`,{class:`btn btn-primary`,onClick:Uf},o(e.$t(`townView.k1lap9bs024`)),1),g(`button`,{class:`btn btn-ghost`,disabled:E(z)!==`edit`,title:E(z)===`edit`?e.$t(`townView.ksavetip181`):e.$t(`townView.krotip182`),onClick:Ze},o(e.$t(`townView.k1b3bk8t029`)),9,Ba),g(`button`,{class:c([`btn btn-danger`,{armed:E(If)}]),onClick:Lf},o(e.$t(`townView.k1i046wf066`)),3)])]),g(`section`,Va,[g(`div`,Ha,[g(`h3`,null,o(e.$t(`townView.k1kfoef9067`)),1),g(`span`,Ua,o(E(X).length),1),g(`div`,{class:c([`trend-legend`,{expanded:E(Xf)}])},[(s(!0),v(b,null,l(E(Qf),e=>(s(),v(`button`,{key:e.id,class:c([`lg-chip`,{off:!Yf(e.id)}]),onClick:t=>Wf(e.id)},[g(`span`,{class:`lg-dot`,style:n({background:Jf(e.id)})},null,4),D(o(e.name),1)],10,Wa))),128)),E(Zf)>0?(s(),v(`button`,{key:0,class:`lg-chip lg-more mono`,title:E(Xf)?e.$t(`townView.trendCollapse`):e.$t(`townView.trendExpandAll`,{p0:E(X).length}),onClick:t[22]||=e=>Xf.value=!E(Xf)},o(E(Xf)?e.$t(`townView.trendCollapse`):`+${E(Zf)}`),9,Ga)):x(``,!0)],2)]),g(`div`,Ka,[g(`canvas`,{ref_key:`trendCanvas`,ref:Gf,class:`trend-cv`},null,512),E(X).length?x(``,!0):(s(),v(`span`,qa,o(e.$t(`townView.k1uht2uv068`)),1))])])],2)]),g(`aside`,{id:`town-rail-right`,class:c([`rail rail-right`,{"sheet-open":E(N)===`right`}])},[g(`div`,Ja,[t[79]||=g(`span`,{class:`sheet-grip`,"aria-hidden":`true`},null,-1),g(`span`,Ya,o(e.$t(`townView.k17dkhgd112`)),1),g(`button`,{type:`button`,class:`sheet-x`,"aria-label":e.$t(`common.close`),onClick:ve},` ✕ `,8,Xa)]),f(oe,{name:`ins`},{default:ne(()=>[E(L)?(s(),v(`section`,Za,[g(`div`,Qa,[g(`h3`,null,o(E(L).kind===`device`?E(Id)?e.$t(`townView.k1ekqxlt146`):E(_d)?e.$t(`townView.k1empnnb178`):e.$t(`townView.k1k6wg8j185`):E(cn)),1),g(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bsckft013`),onClick:et},` ✕ `,8,$a)]),g(`div`,eo,[g(`span`,to,o(E(L).id.slice(0,8)),1),E(L).kind===`device`&&E(_d)?(s(),v(`span`,no,`DAQ`)):E(L).kind===`device`&&E(Id)?(s(),v(`span`,ro,`DCW`)):x(``,!0)]),E(L).kind===`device`?(s(),v(b,{key:0},[E(Id)?(s(),v(`div`,io,[g(`div`,ao,[g(`span`,null,o(e.$t(`townView.k1deqh0d069`)),1),g(`b`,oo,o(E(Z)?.value==null?`--`:E(Z).value.toFixed(E(Z).decimals))+` `+o(E(Z)?.unit),1)]),g(`div`,so,[g(`span`,null,o(E(Ld)?.src===`recipe`?e.$t(`townView.kq2jssk147`):e.$t(`townView.k1iwj796179`)),1),g(`b`,{class:c({amber:E(Ld)?.src===`recipe`})},o(Ud(E(Z))),3)]),g(`div`,co,[g(`span`,null,o(e.$t(`townView.k1i8rtqt070`)),1),g(`b`,null,o(E(Rd)||e.$t(`townView.k3own4q148`)),1)]),g(`div`,lo,[S(g(`input`,{"onUpdate:modelValue":t[23]||=e=>E(Od)[E(L).id]=e,type:`number`,class:`bind-select`,step:10**-(E(Z)?.decimals??2),placeholder:Wd(E(Z)),onKeydown:ie(Hd,[`enter`])},null,40,uo),[[A,E(Od)[E(L).id],void 0,{number:!0}]]),g(`button`,{class:`bind-add-btn`,disabled:E(Od)[E(L).id]==null||E(Od)[E(L).id]===``,onClick:Hd},o(e.$t(`townView.kwrbtn180`)),9,fo)]),E(kd)[E(L).id]?(s(),v(`p`,po,o(E(kd)[E(L).id]),1)):x(``,!0),E(z)===`edit`?(s(),v(`div`,mo,[S(g(`select`,{"onUpdate:modelValue":t[24]||=e=>p(zd)?zd.value=e:null,class:`bind-select`},[g(`option`,ho,o(e.$t(`townView.kjo6ekr071`)),1),(s(!0),v(b,null,l(E(O).twins.filter(e=>!Ou(e)&&e.id!==(E(L)?.id??``)),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,go))),128))],512),[[k,E(zd)]]),g(`button`,{class:`bind-add-btn`,disabled:!E(Rd)&&!E(zd),onClick:t[25]||=e=>E(Rd)?Vd():Bd()},o(E(Rd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,_o)])):x(``,!0)])):E(_d)?(s(),v(`div`,vo,[g(`div`,yo,[g(`span`,null,o(e.$t(`townView.k3mv305072`)),1),g(`b`,bo,o(E(yd)?Lu(E(yd)):`--`)+` `+o(E(yd)?.tpl.unit),1)]),g(`div`,xo,[g(`span`,null,o(e.$t(`townView.k1faqmjb073`)),1),g(`b`,null,o(E(yd)?.tpl.min)+` ~ `+o(E(yd)?.tpl.max),1)]),g(`div`,So,[g(`span`,null,o(e.$t(`townView.k1i8rtqt070`)),1),g(`b`,null,o(E(Sd)||e.$t(`townView.k3own4q148`)),1)]),E(z)===`edit`?(s(),v(`div`,Co,[S(g(`select`,{"onUpdate:modelValue":t[26]||=e=>p(bd)?bd.value=e:null,class:`bind-select`},[g(`option`,wo,o(e.$t(`townView.kjo6ekr071`)),1),(s(!0),v(b,null,l(E(O).twins.filter(e=>!Ou(e)&&e.id!==(E(L)?.id??``)),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,To))),128))],512),[[k,E(bd)]]),g(`button`,{class:`bind-add-btn`,disabled:!E(Sd)&&!E(bd),onClick:t[27]||=e=>{E(Sd)?ad(E(L).id):id(E(L).id,E(bd)),bd.value=``}},o(E(Sd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,Eo)])):x(``,!0),E(z)===`edit`&&E(Q)?(s(),v(`div`,Do,[g(`div`,Oo,[g(`span`,null,o(e.$t(`townView.k1l6g2ga074`)),1),g(`span`,ko,[S(g(`input`,{"onUpdate:modelValue":t[28]||=e=>p(Gd)?Gd.value=e:null,type:`number`,min:`200`,max:`60000`,step:`100`,class:`daq-num`,onChange:Kd},null,544),[[A,E(Gd),void 0,{number:!0}]]),g(`small`,null,o(e.$t(`townView.k1or92b075`)),1)])]),g(`div`,Ao,[g(`span`,null,o(e.$t(`townView.k3x5tpx076`)),1),g(`span`,jo,[g(`input`,{value:E(Q).warnLow,type:`number`,step:`any`,class:`daq-num`,onChange:t[29]||=e=>qd(`warnLow`,e.target.value)},null,40,Mo),t[80]||=D(` ~ `,-1),g(`input`,{value:E(Q).warnHigh,type:`number`,step:`any`,class:`daq-num`,onChange:t[30]||=e=>qd(`warnHigh`,e.target.value)},null,40,No)])]),g(`div`,Po,[g(`span`,null,o(e.$t(`townView.k1hjj0jf077`)),1),g(`span`,Fo,[g(`input`,{value:E(Q).min,type:`number`,step:`any`,class:`daq-num`,onChange:t[31]||=e=>qd(`min`,e.target.value)},null,40,Io),t[81]||=D(` ~ `,-1),g(`input`,{value:E(Q).max,type:`number`,step:`any`,class:`daq-num`,onChange:t[32]||=e=>qd(`max`,e.target.value)},null,40,Lo)])]),g(`div`,Ro,[g(`span`,null,o(e.$t(`townView.k48tki078`)),1),g(`button`,{class:c([`bind-add-btn`,{warn:E(Q).enabled}]),onClick:t[33]||=e=>E(J).patchNode(E(L).id,{enabled:!E(Q).enabled})},o(E(Q).enabled?e.$t(`townView.k1wv0nyo150`):e.$t(`townView.kh1586b180`)),3)]),g(`div`,zo,[g(`span`,null,o(e.$t(`townView.k3xakp079`)),1),g(`button`,{class:`bind-add-btn danger`,title:e.$t(`townView.kpwutri014`),onClick:t[34]||=e=>St()},o(e.$t(`townView.k1bpp30k080`)),9,Bo)])])):(s(),v(`div`,Vo,o(e.$t(`townView.kzk5dfx081`)),1))])):(s(),v(b,{key:2},[g(`div`,Ho,[g(`span`,Uo,o(e.$t(`townView.k3xhia082`)),1),S(g(`input`,{"onUpdate:modelValue":t[35]||=e=>p(ft)?ft.value=e:null,class:`obj-input`,placeholder:e.$t(`townView.k1k6vbaf015`),disabled:E(z)!==`edit`,title:E(z)===`edit`?e.$t(`townView.deviceName`):e.$t(`townView.readonlyTip`),onChange:vt,onKeydown:ie(vt,[`enter`])},null,40,Wo),[[A,E(ft)]])]),g(`div`,Go,[g(`span`,Ko,o(e.$t(`townView.k41amp083`)),1),g(`select`,{class:`obj-select`,value:E(F)?.getDeviceModelRef?.(E(L).id)??``,disabled:E(z)!==`edit`,onChange:t[36]||=e=>bt(e.target.value)},[(s(!0),v(b,null,l(E(dt),t=>(s(),v(`option`,{key:t.id,value:t.id},o((`townModelName`in e?e.townModelName:E(Ne))(E(a),t)),9,Jo))),128))],40,qo)]),g(`div`,Yo,o(e.$t(`townView.k1vtyk05130`))+` `+o(E(xd).length)+` `+o(e.$t(`townView.k3vfpz5138`)),1),(s(!0),v(b,null,l(E(xd),t=>(s(),v(`div`,{key:t.daqId,class:`bind-row`},[g(`span`,Xo,[f(i,{class:`bind-svg`,icon:t.icon},null,8,[`icon`])]),g(`span`,Zo,[g(`span`,Qo,o(t.ch),1),g(`span`,$o,[g(`b`,null,o(t.value),1),D(` `+o(t.unit)+` · `+o(t.name),1)])]),g(`canvas`,{ref_for:!0,ref:e=>hd(t.daqId,e),class:`bind-spark`,width:`56`,height:`20`},null,512),E(z)===`edit`?(s(),v(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>ad(t.daqId)},` ✕ `,8,es)):x(``,!0)]))),128)),E(xd).length?x(``,!0):(s(),v(`div`,ts,o(e.$t(`townView.kgpuqhb084`)),1)),E(z)===`edit`?(s(),v(`div`,ns,[g(`button`,{class:`bind-add`,onClick:t[37]||=e=>ud(`daq`,e)},o(e.$t(`townView.kvm0lin085`)),1),E(sd)?(s(),v(`div`,{key:0,class:`bind-pop`,style:n({maxHeight:`${E(ld)}px`})},[(s(!0),v(b,null,l(E(wu),t=>(s(),v(b,{key:t.id},[E(dd)[t.id]?.length?(s(),v(`div`,rs,[g(`span`,is,o(t.name)+` · `+o(t.ch),1),(s(!0),v(b,null,l(E(dd)[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=>pd(t.id)},[f(i,{class:`bind-svg`,icon:t.tpl.icon},null,8,[`icon`]),g(`span`,null,[D(o(t.name),1),t.devName?(s(),v(`i`,os,`→ `+o(t.devName),1)):t.placed?x(``,!0):(s(),v(`i`,ss,o(e.$t(`townView.k2bindr0009`)),1))])],8,as))),128))])):x(``,!0)],64))),128)),E(fd)?x(``,!0):(s(),v(`div`,cs,o(e.$t(`townView.k2bindr0010`)),1))],4)):x(``,!0)])):x(``,!0),g(`div`,ls,o(e.$t(`townView.ktzir2t131`))+` `+o(E(Td).length)+` `+o(e.$t(`townView.k4l1w042`)),1),(s(!0),v(b,null,l(E(Td),t=>(s(),v(`div`,{key:t.dcwId,class:`dcw-row`},[g(`div`,us,[g(`span`,ds,[f(i,{class:`bind-svg`,icon:t.icon},null,8,[`icon`])]),g(`span`,fs,[g(`span`,ps,[D(o(t.ch),1),t.rMin!=null||t.rMax!=null?(s(),v(`i`,ms,o(e.$t(`townView.k48grv086`)),1)):x(``,!0)]),g(`span`,hs,o(t.name),1)]),g(`span`,gs,[g(`b`,null,o(t.value==null?`--`:t.value.toFixed(t.decimals)),1),g(`i`,null,o(t.unit),1)]),E(z)===`edit`?(s(),v(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Fd(t.dcwId)},` ✕ `,8,_s)):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`,vs,o(t.rMin??`-∞`),1),g(`span`,ys,[g(`i`,{style:n({left:`${Dd(t)}%`})},null,4)]),g(`span`,bs,o(t.rMax??`+∞`),1)],2),g(`div`,xs,[S(g(`input`,{"onUpdate:modelValue":e=>E(Od)[t.dcwId]=e,type:`number`,step:10**-t.decimals,placeholder:`${t.rMin??t.gMin} ~ ${t.rMax??t.gMax}`,onKeydown:ie(e=>Ad(E(Y).nodeById(t.dcwId)),[`enter`])},null,40,Ss),[[A,E(Od)[t.dcwId],void 0,{number:!0}]]),g(`button`,{class:`dcw-send`,disabled:E(Od)[t.dcwId]==null||E(Od)[t.dcwId]===``,title:e.$t(`townView.k15t7izc017`),onClick:e=>Ad(E(Y).nodeById(t.dcwId))},` write `,8,Cs)]),E(kd)[t.dcwId]?(s(),v(`small`,ws,o(E(kd)[t.dcwId]),1)):x(``,!0)]))),128)),E(Td).length?x(``,!0):(s(),v(`div`,Ts,o(e.$t(`townView.k10smf24087`)),1)),E(z)===`edit`?(s(),v(`div`,Es,[g(`button`,{class:`bind-add`,onClick:t[38]||=e=>ud(`dcw`,e)},o(e.$t(`townView.kvk1vh5088`)),1),E(cd)?(s(),v(`div`,{key:0,class:`bind-pop`,style:n({maxHeight:`${E(ld)}px`})},[(s(!0),v(b,null,l(E(pu),t=>(s(),v(b,{key:t.id},[E(Md)[t.id]?.length?(s(),v(`div`,Ds,[g(`span`,Os,o(t.name)+` · `+o(t.ch),1),(s(!0),v(b,null,l(E(Md)[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=>Pd(t.id)},[f(i,{class:`bind-svg`,icon:t.tpl.icon},null,8,[`icon`]),g(`span`,null,[D(o(t.name),1),t.devName?(s(),v(`i`,As,`→ `+o(t.devName),1)):t.placed?x(``,!0):(s(),v(`i`,js,o(e.$t(`townView.k2bindr0009`)),1))])],8,ks))),128))])):x(``,!0)],64))),128)),E(Nd)?x(``,!0):(s(),v(`div`,Ms,o(e.$t(`townView.k2bindr0010`)),1))],4)):x(``,!0)])):x(``,!0),E(z)===`edit`?(s(),v(b,{key:4},[g(`div`,Ns,o(e.$t(`townView.transformBlender`)),1),g(`div`,Ps,[g(`button`,{class:c([`seg-btn`,{on:E(Ge)===`translate`}]),onClick:t[39]||=e=>Ke(`translate`)},o(e.$t(`townView.k1hg3167089`)),3),g(`button`,{class:c([`seg-btn`,{on:E(Ge)===`rotate`}]),onClick:t[40]||=e=>Ke(`rotate`)},o(e.$t(`townView.k1enlg7i090`)),3),g(`button`,{class:c([`seg-btn`,{on:E(Ge)===`scale`}]),onClick:t[41]||=e=>Ke(`scale`)},o(e.$t(`townView.k1ibjg3j091`)),3)]),g(`div`,Fs,[t[82]||=g(`span`,{class:`scale-min`},`0.2×`,-1),g(`input`,{class:`scale-range`,type:`range`,min:`0.2`,max:`5`,step:`0.05`,value:E(L).scale,onInput:t[42]||=e=>Qe(Number(e.target.value)),onChange:t[43]||=e=>$e(Number(e.target.value))},null,40,Is),t[83]||=g(`span`,{class:`scale-max`},`5×`,-1)]),g(`div`,Ls,o(Math.round(E(L).scale*100))+`% `,1),g(`div`,Rs,[g(`button`,{class:c([`btn btn-danger ins-del`,{armed:E(xt)===E(L).id}]),onClick:St},o(E(xt)===E(L).id?e.$t(`townView.k1w10xa5152`):e.$t(`townView.k121kfef182`)),3)])],64)):(s(),v(`div`,zs,o(e.$t(`townView.kt0i3y2092`)),1))],64))],64)):E(L).kind===`agent`?(s(),v(b,{key:1},[g(`div`,Bs,[g(`span`,{class:`chat-badge`,style:n({"--p-acc":E(ru)})},o(E(sn).slice(0,1).toUpperCase()),5),g(`div`,Vs,[g(`span`,Hs,o(E(sn)),1),g(`span`,Us,[g(`span`,{class:c([`chat-role`,E(K)?.role===`lead`?`r-lead`:`r-worker`])},o(E(ln)),3),g(`span`,{class:c([`chat-state`,`s-${E(K)?.state??`idle`}`])},o(E(un)),3),E(K)?.harness?(s(),v(`span`,Ws,o(E(K).harness.toUpperCase()),1)):x(``,!0),g(`span`,Gs,o(E(q).length+E(on).length)+` `+o(e.$t(`townView.k4dfq040`)),1)])])]),g(`div`,Ks,[g(`span`,qs,o(e.$t(`townView.k41amp083`)),1),g(`select`,{class:`obj-select`,value:(E(F)?.getAgentModel?.(E(L).id)??``)||`hero-3d`,disabled:E(z)!==`edit`,onChange:t[44]||=e=>yt(e.target.value)},[(s(!0),v(b,null,l(E(ut),e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,Ys))),128))],40,Js)]),t[87]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,Xs,[g(`span`,Zs,o(e.$t(`townView.k1fix3hb093`)),1),g(`span`,Qs,o(E(pt)),1),E(z)===`edit`?(s(),v(`button`,{key:0,class:c([`obj-mini`,{on:E(W)}]),title:e.$t(`townView.k13enoy3018`),onClick:mt},o(E(W)?e.$t(`townView.k3slzhc153`):e.$t(`townView.k1f1xmci183`)),11,$s)):x(``,!0)]),t[88]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,ec,o(e.$t(`townView.k1p7nru2094`)),1),(s(!0),v(b,null,l(E(Hu),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`,tc,[g(`span`,nc,o(td(t)),1),g(`select`,{class:`bind-select`,style:{"margin-top":`3px`},value:t.mode,title:e.$t(`townView.khqvwix019`),onChange:e=>$u(t.id,e.target.value)},[g(`option`,ic,o(e.$t(`townView.k1io1ylm095`)),1),g(`option`,ac,o(e.$t(`townView.k1duyr8q096`)),1)],40,rc)]),g(`button`,{class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Qu(t.id)},` ✕ `,8,oc)]))),128)),E(Hu).length?x(``,!0):(s(),v(`div`,sc,o(e.$t(`townView.unboundTip`)),1)),E(z)===`edit`?(s(),v(`div`,cc,[S(g(`select`,{"onUpdate:modelValue":t[45]||=e=>p(Uu)?Uu.value=e:null,class:`bind-select`,style:{flex:`none`,width:`62px`}},[g(`option`,lc,o(e.$t(`townView.k40ifw097`)),1),g(`option`,uc,o(e.$t(`townView.k40rjw098`)),1)],512),[[k,E(Uu)]]),S(g(`select`,{"onUpdate:modelValue":t[46]||=e=>p(Wu)?Wu.value=e:null,class:`bind-select`},[g(`option`,dc,o(e.$t(`townView.kurjldk099`)),1),E(Uu)===`dcw`?(s(!0),v(b,{key:0},l(E(Y).nodes,e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,fc))),128)):(s(!0),v(b,{key:1},l(E(J).nodes,e=>(s(),v(`option`,{key:e.id,value:e.id},o(e.name),9,pc))),128))],512),[[k,E(Wu)]]),S(g(`select`,{"onUpdate:modelValue":t[47]||=e=>p(Gu)?Gu.value=e:null,class:`bind-select`,style:{flex:`none`,width:`76px`}},[g(`option`,mc,o(e.$t(`townView.k45kpj100`)),1),g(`option`,hc,o(e.$t(`townView.k3zul4101`)),1)],512),[[k,E(Gu)]]),g(`button`,{class:`bind-add-btn`,disabled:!E(Wu),onClick:Zu},o(e.$t(`townView.k452a8102`)),9,gc)])):x(``,!0),E(Ku).length?(s(),v(b,{key:2},[g(`div`,_c,o(e.$t(`townView.k1gk2jg7132`))+` `+o(E(Ku).length),1),(s(!0),v(b,null,l(E(Ku),t=>(s(),v(`div`,{key:t.id,class:`approval-card`},[g(`div`,vc,o(t.detail),1),g(`div`,{class:c([`approval-ttl`,{urgent:Bu(t)<=30}])},` ⏱ `+o(Bu(t))+`s `+o(e.$t(`townView.hitlAutoReject`)),3),S(g(`input`,{"onUpdate:modelValue":e=>E(qu)[t.id]=e,class:`dcw-write input-inline`,style:{width:`100%`,"margin-top":`5px`},placeholder:e.$t(`townView.keztqrn020`)},null,8,yc),[[A,E(qu)[t.id]]]),g(`div`,bc,[g(`button`,{class:`bind-add-btn`,onClick:e=>ed(t.id,!0)},o(e.$t(`townView.kslcozu103`)),9,xc),g(`button`,{class:`bind-add-btn danger`,onClick:e=>ed(t.id,!1)},o(e.$t(`townView.k14gu3rd104`)),9,Sc)])]))),128))],64)):x(``,!0),E(U)&&E(z)===`edit`?(s(),v(b,{key:3},[g(`div`,Cc,[g(`span`,wc,o(e.$t(`townView.k3zhy5048`)),1),g(`div`,Tc,[g(`button`,{class:c([`seg-btn`,{on:E(U).shape===`ellipse`}]),onClick:t[48]||=e=>{E(U).shape=`ellipse`,ht()}},o(e.$t(`townView.k414bc049`)),3),g(`button`,{class:c([`seg-btn`,{on:E(U).shape===`rect`}]),onClick:t[49]||=e=>{E(U).shape=`rect`,ht()}},o(e.$t(`townView.k43u0g050`)),3)])]),g(`div`,Ec,[g(`span`,Dc,o(e.$t(`townView.k41lwj105`)),1),S(g(`input`,{"onUpdate:modelValue":t[50]||=e=>E(U).radiusX=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:ht,onChange:gt},null,544),[[A,E(U).radiusX,void 0,{number:!0}]]),g(`span`,Oc,o(Math.round(E(U).radiusX)),1)]),g(`div`,kc,[g(`span`,Ac,o(e.$t(`townView.k45bta106`)),1),S(g(`input`,{"onUpdate:modelValue":t[51]||=e=>E(U).radiusZ=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:ht,onChange:gt},null,544),[[A,E(U).radiusZ,void 0,{number:!0}]]),g(`span`,jc,o(Math.round(E(U).radiusZ)),1)]),g(`button`,{class:`obj-mini danger`,onClick:_t},o(e.$t(`townView.k1w45mzc107`)),1)],64)):(s(),v(`div`,Mc,o(e.$t(`townView.k14s8urm108`)),1)),t[89]||=g(`div`,{class:`obj-sep`},null,-1),g(`div`,Nc,[D(o(e.$t(`townView.k1ghjbfc133`))+` `+o(E(sn))+` `,1),g(`button`,{class:`mini-btn chat-refresh`,title:e.$t(`townView.k15avt7g021`),onClick:nu},o(E(dn)?`…`:`↻`),9,Pc)]),g(`div`,{ref_key:`chatScroll`,ref:pn,class:`rpg-lines chat-embed`},[E(dn)?(s(),v(`div`,Fc,o(e.$t(`townView.kkhlx5h109`)),1)):x(``,!0),E(q).length?(s(),v(b,{key:1},[g(`div`,Ic,o(e.$t(`townView.k768cnt134`))+` `+o(E(q).length),1),(s(!0),v(b,null,l(E(q),e=>(s(),v(`div`,{key:e.id,class:`rpg-line hist`},[g(`span`,Lc,o(au(e.at)),1),g(`div`,Rc,[iu(e.kind)?(s(),v(`span`,{key:0,class:c([`rpg-kind`,`k-${e.kind}`])},o(iu(e.kind)),3)):x(``,!0),g(`span`,zc,o(e.text),1)])]))),128))],64)):x(``,!0),E(on).length?(s(),v(`div`,Bc,o(e.$t(`townView.k1cwz73k135`))+` `+o(E(on).length),1)):x(``,!0),(s(!0),v(b,null,l(E(on),e=>(s(),v(`div`,{key:e.id,class:`rpg-line live`},[g(`span`,Vc,o(au(e.at)),1),g(`div`,Hc,[g(`span`,Uc,o(e.text),1)])]))),128)),E(K)?.state===`busy`?(s(),v(`div`,Wc,[t[84]||=g(`span`,{class:`ty-dot`},null,-1),t[85]||=g(`span`,{class:`ty-dot`},null,-1),t[86]||=g(`span`,{class:`ty-dot`},null,-1),g(`span`,Gc,o(e.$t(`townView.k3o5tz9110`)),1)])):x(``,!0),!E(dn)&&!E(q).length&&!E(on).length?(s(),v(`div`,Kc,o(e.$t(`townView.k1qkqld7111`)),1)):x(``,!0)],512)],64)):x(``,!0)])):x(``,!0)]),_:1}),g(`section`,qc,[g(`div`,Jc,[g(`h3`,null,o(e.$t(`townView.k17dkhgd112`)),1)]),g(`div`,Yc,[g(`div`,Xc,[g(`canvas`,{ref_key:`donutCanvas`,ref:yf,width:`118`,height:`118`},null,512),g(`div`,Zc,[g(`b`,{style:n({color:E(vf)})},o(E(_f))+`%`,5),g(`span`,null,o(e.$t(`townView.k7h1nxo113`)),1)])]),g(`div`,Qc,[g(`div`,$c,[t[90]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-accent)`}},null,-1),D(` `+o(e.$t(`townView.k3vp67i114`))+` `,1),g(`span`,el,o(E(cf)),1)]),g(`div`,tl,[t[91]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-amber)`}},null,-1),D(` `+o(e.$t(`townView.k3zcvb115`))+` `,1),g(`span`,nl,o(E(mf)),1)]),g(`div`,rl,[t[92]||=g(`span`,{class:`hl-dot`,style:{background:`var(--hud-danger)`}},null,-1),D(` `+o(e.$t(`townView.k3xmid116`))+` `,1),g(`span`,il,o(E(hf)),1)]),g(`div`,al,[t[93]||=g(`span`,{class:`hl-dot`,style:{background:`#3a4a63`}},null,-1),D(` `+o(e.$t(`townView.statesOffline`))+` `,1),g(`span`,ol,o(E(gf)),1)])])])]),g(`section`,sl,[g(`div`,cl,[g(`h3`,null,o(e.$t(`townView.k1q247fn117`)),1),g(`span`,ll,o(E(O).twins.length),1)]),f(u,{class:`kd-embed`,"daq-live":E(tf),"dcw-live":E(nf),onFocusDevice:Yt},null,8,[`daq-live`,`dcw-live`])]),g(`section`,ul,[g(`div`,dl,[g(`h3`,null,o(e.$t(`townView.k1cxf749118`)),1),g(`span`,fl,o(E(Tf))+` `+o(e.$t(`townView.k4dfq040`)),1),g(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bkswpz022`),onClick:Df},` ✓ `,8,pl)]),g(`div`,ml,[(s(!0),v(b,null,l(E(xf).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[94]||=[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`,hl,[g(`div`,gl,o(e.txt),1),g(`div`,_l,o(e.src)+` · `+o(e.time),1)]),g(`button`,{class:c([`al-state`,`s${e.state}`]),onClick:t=>Ef(e.id)},o(Cf[e.state]),11,vl)]))),128)),E(xf).length?x(``,!0):(s(),v(`div`,yl,[t[95]||=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`,bl,[g(`div`,xl,[g(`h3`,null,o(e.$t(`townView.k1cxdtq2120`)),1),g(`span`,Sl,o(E(fu).length),1)]),g(`div`,Cl,[(s(!0),v(b,null,l([...E(fu)].reverse(),(e,t)=>(s(),v(`div`,{key:`${e.at}-${t}`,class:`event-row`},[g(`span`,wl,o(au(e.at)),1),g(`span`,{class:`ev-name`,title:e.agentName},o(e.agentName),9,Tl),g(`span`,{class:`ev-text`,title:e.text},o(e.text),9,El)]))),128)),E(fu).length?x(``,!0):(s(),v(`div`,Dl,[t[96]||=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`,Ol,[g(`div`,kl,[g(`h3`,null,o(e.$t(`townView.kjug2jq122`)),1)]),g(`div`,Al,[g(`div`,{class:`mm-wrap`,title:e.$t(`townView.klfwiqg023`)},[g(`canvas`,{ref_key:`navCanvas`,ref:ip,class:`nav-cv`,onPointerdown:lp,onPointermove:up,onPointerup:dp,onPointercancel:dp,onWheel:ae(cp,[`prevent`])},null,544)],8,jl),g(`div`,Ml,[g(`button`,{class:`vp-tool`,title:e.$t(`townView.k1lap9bs024`),onClick:Uf},[...t[97]||=[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,Nl),g(`button`,{class:`vp-tool`,title:e.$t(`townView.kav8a8k025`),onClick:t[52]||=e=>E(F)?.zoomBy(.22)},[...t[98]||=[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,Pl),g(`button`,{class:`vp-tool`,title:e.$t(`townView.k1u7uce9026`),onClick:t[53]||=e=>E(F)?.zoomBy(-.18)},[...t[99]||=[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,Fl)])]),g(`div`,Il,o(e.$t(`townView.k1gaaodq136`))+o(E(ap).toFixed(1))+` · `+o(E(tn)?.devices?.length??0)+` `+o(e.$t(`townView.k47e16126`)),1)])],2)]),g(`footer`,Ll,[g(`span`,null,[g(`span`,{class:c([`sb-dot`,{red:E(te).state!==`open`}])},null,2),D(o(e.$t(`townView.k1i4g246123`))+` `,1),g(`b`,null,o(E(te).state===`open`?e.$t(`townView.k41k5c154`):E(Be)?e.$t(`townView.k3lmtk3184`):e.$t(`townView.k44c2n186`)),1)]),g(`span`,Rl,[D(o(e.$t(`townView.k4a0jt124`))+` `,1),g(`b`,null,o(E(Le)),1),t[100]||=g(`i`,null,`·`,-1),D(o(e.$t(`townView.k3xdvm125`))+` `,1),g(`b`,null,o(E(Ie)),1),t[101]||=g(`i`,null,`·`,-1),D(o(e.$t(`townView.k47e16126`))+` `,1),g(`b`,null,o(E(sf)),1)]),g(`span`,zl,o(E(Fe))+` FPS `,1),g(`span`,Bl,` © 2026 ABO · DIGITAL TWIN · `+o(e.$t(`townView.k1h5gxpf137`)),1)]),E(N)?(s(),v(`div`,{key:0,class:`sheet-mask`,onClick:ve})):x(``,!0),E(Me)?x(``,!0):(s(),v(`div`,Vl,[t[102]||=g(`div`,{class:`loading-spinner`},null,-1),g(`span`,Hl,o(e.$t(`townView.kvjdqfg059`)),1)]))])}}}),[[`__scopeId`,`data-v-7027783b`]]),{__name:`WorkshopTownView`});export{hn as n,Ql as t};
@@ -0,0 +1 @@
1
+ import{a as e,c as t}from"./BU83-NnX.js";import{R as n,S as r,Ut as i,V as a,Vt as o,W as s,b as c,d as l,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,y as _}from"./CSkxz2NX.js";import{f as v}from"./D6uzXueg.js";import{s as y}from"./YnQxK3eG.js";import{n as b}from"./KZQX7xoM.js";import{t as ee}from"./DzbFpZRk.js";import{t as te}from"./Dz_Q3Lpw2.js";import{t as ne}from"./CClOy-Hz2.js";import{t as re}from"./DIaZ2PTo2.js";import{t as x}from"./BDNMzG2s2.js";import{t as S}from"./D0ZBQrN_2.js";import{t as C}from"./Du9v6qGB.js";import{t as w}from"./zq5t1vyX.js";var ie={class:`plugins-page`},ae={class:`aw-page-head`},oe={class:`pg-sub`},se={class:`pg-stats`},T={class:`stat`},E={class:`stat`},D={class:`stat`},O={key:1,class:`pg-empty`},k={class:`pg-empty-t`},A={class:`pg-grid aw-stagger`},j=[`onClick`],M={class:`card-head`},N={class:`card-name`},P={class:`card-ver`},F={class:`card-desc`},I={class:`card-tags`},L={key:0,class:`tag client`},R={key:0,class:`card-routes`},z={class:`detail`},B={class:`scope-hint`},ce={key:0},V={key:1,style:{color:`#ff6b6b`}},H={key:0,class:`dim`},U=x(r({__name:`index`,setup(r){let{t:x}=b(),U=e=>{let t=C[e.name];return t?x(t):e.description},W=re(),G=h([]),K=h([]),q=h(!1),J=h(``),Y=h(!1),X=h(null);function Z(){let e=W.token;return e?{authorization:`Bearer ${e}`}:{}}async function Q(){q.value=!0;try{let e=await y(`/api/workshop/plugins`,{headers:Z()});G.value=e.plugins??[],K.value=e.failures??[]}catch(t){e.error(S(t,x(`plugins.loadFail`)))}finally{q.value=!1}}async function le(t){J.value=t.name;try{let n=await y(`/api/workshop/plugins/${t.name}/${t.enabled?`disable`:`enable`}`,{method:`POST`,headers:Z()});if(n.code!==0||!n.data)throw Error(x(`plugins.enableFail`));t.enabled=n.data.enabled,e.success(`${t.name} · ${n.data.enabled?x(`plugins.enabled`):x(`plugins.disabled`)}`),setTimeout(Q,800)}catch(t){e.error(S(t,x(`plugins.enableFail`)))}finally{J.value=``}}let ue=l(()=>G.value.filter(e=>e.enabled).length),de=l(()=>G.value.filter(e=>e.hasClient).length);function $(e){return x(e===`project`?`plugins.scopeProject`:`plugins.scopeUser`)}function fe(e){X.value=e,Y.value=!0}return n(Q),(e,n)=>{let r=t,l=ee,h=w,y=ne,b=te;return a(),d(`div`,ie,[u(`header`,ae,[u(`div`,null,[n[2]||=u(`p`,{class:`aw-kicker`},` agentworkshop / plugins `,-1),u(`h1`,null,i(e.$t(`plugins.title`)),1),u(`p`,oe,i(e.$t(`plugins.subtitle`)),1)]),u(`div`,se,[u(`span`,T,[_(i(e.$t(`plugins.enabled`))+` `,1),u(`b`,null,i(ue.value),1)]),u(`span`,E,[_(i(e.$t(`plugins.hasClient`))+` `,1),u(`b`,null,i(de.value),1)]),u(`span`,D,[_(i(e.$t(`plugins.routes`))+` `,1),u(`b`,null,i(G.value.reduce((e,t)=>e+t.routes.length,0)),1)]),c(r,{size:`small`,loading:q.value,onClick:Q},{default:g(()=>[_(i(e.$t(`plugins.refresh`)),1)]),_:1},8,[`loading`])])]),K.value.length?(a(),m(l,{key:0,type:`error`,"show-icon":``,class:`pg-failures`,message:e.$t(`plugins.loadFailures`,{n:K.value.length})},{description:g(()=>[(a(!0),d(f,null,s(K.value,e=>(a(),d(`div`,{key:e.source,class:`fail-line`},i(e.source)+` — `+i(e.error),1))),128))]),_:1},8,[`message`])):p(``,!0),!G.value.length&&!q.value?(a(),d(`div`,O,[n[3]||=u(`span`,{class:`i-tabler-puzzle pg-empty-ico`},null,-1),u(`p`,k,i(e.$t(`plugins.empty`)),1)])):p(``,!0),G.value.length?(a(),m(h,{key:2,"slot-name":`plugins.page`})):p(``,!0),u(`div`,A,[(a(!0),d(f,null,s(G.value,t=>(a(),d(`article`,{key:`${t.scope}:${t.name}`,class:o([`pg-card aw-liftable`,{"is-off":!t.enabled}]),onClick:e=>fe(t)},[u(`div`,M,[u(`span`,N,i(t.name),1),u(`span`,P,i(t.version),1),c(y,{checked:t.enabled,loading:J.value===t.name,size:`small`,onClick:n[0]||=v(()=>{},[`stop`]),onChange:e=>le(t)},null,8,[`checked`,`loading`,`onChange`])]),u(`p`,F,i(U(t)||`—`),1),u(`div`,I,[u(`span`,{class:o([`tag`,t.scope])},i($(t.scope)),3),u(`span`,{class:o([`tag`,t.enabled?`on`:`off`])},i(t.enabled?e.$t(`plugins.enabled`):e.$t(`plugins.disabled`)),3),t.hasClient?(a(),d(`span`,L,i(e.$t(`plugins.hasClient`)),1)):p(``,!0)]),t.routes.length?(a(),d(`div`,R,[(a(!0),d(f,null,s(t.routes,e=>(a(),d(`code`,{key:e.method+e.path},i(e.method)+` `+i(e.path),1))),128))])):p(``,!0)],10,j))),128))]),c(b,{open:Y.value,"onUpdate:open":n[1]||=e=>Y.value=e,title:X.value?.name,width:`460`},{default:g(()=>[X.value?(a(),d(f,{key:0},[u(`dl`,z,[n[4]||=u(`dt`,null,`version`,-1),u(`dd`,null,i(X.value.version),1),n[5]||=u(`dt`,null,`scope`,-1),u(`dd`,null,i($(X.value.scope)),1),u(`dd`,B,i(X.value.scope===`project`?e.$t(`plugins.scopeBuiltinHint`):e.$t(`plugins.scopeUserHint`)),1),n[6]||=u(`dt`,null,`enabled`,-1),u(`dd`,null,i(X.value.enabled),1),n[7]||=u(`dt`,null,`client`,-1),u(`dd`,null,i(X.value.hasClient?`✓`:`—`),1),X.value.error?(a(),d(`dt`,ce,` error `)):p(``,!0),X.value.error?(a(),d(`dd`,V,i(X.value.error),1)):p(``,!0)]),u(`h4`,null,i(e.$t(`plugins.routes`)),1),(a(!0),d(f,null,s(X.value.routes,e=>(a(),d(`code`,{key:e.method+e.path,class:`detail-route`},i(e.method)+` /api/plugins/`+i(X.value.name)+i(e.path),1))),128)),X.value.routes.length?p(``,!0):(a(),d(`p`,H,` — `))],64)):p(``,!0)]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-ff6a645e`]]);export{U as default};