agentworkshop 0.7.5 → 0.7.7

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 (519) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +1 -1
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +1 -1
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/{rzGB_ojX.js → 3612gD2V.js} +2 -2
  5. package/.output/public/_nuxt/8eIQAVlb.js +1 -0
  6. package/.output/public/_nuxt/Ah9qOv1m.js +1 -0
  7. package/.output/public/_nuxt/{DdPeifHR.js → B4Fia4FB.js} +1 -1
  8. package/.output/public/_nuxt/B7aqqzkY.js +1 -0
  9. package/.output/public/_nuxt/BJ-fxrSw.js +1 -0
  10. package/.output/public/_nuxt/{DPDqAD1e.js → BSXx2vqR.js} +1 -1
  11. package/.output/public/_nuxt/{CdSgfcYR.js → BVZjSVs2.js} +1 -1
  12. package/.output/public/_nuxt/{DP6bdyIp.js → BVzDoF8t.js} +1 -1
  13. package/.output/public/_nuxt/BYL0Rjqj.js +7 -0
  14. package/.output/public/_nuxt/{CXmkVXS5.js → BjVLsC3M.js} +1 -1
  15. package/.output/public/_nuxt/{7ZABjMRh2.js → BkfchkK62.js} +1 -1
  16. package/.output/public/_nuxt/BnVoQ74r.js +1 -0
  17. package/.output/public/_nuxt/Bnp4vIAf.js +1 -0
  18. package/.output/public/_nuxt/BsMpJf7S.js +70 -0
  19. package/.output/public/_nuxt/{Z8k0uMSI.js → Bt_HDizI.js} +1 -1
  20. package/.output/public/_nuxt/Bu-P92Pe.js +18 -0
  21. package/.output/public/_nuxt/ButLXkjo.js +2 -0
  22. package/.output/public/_nuxt/C-GarxYC.js +1 -0
  23. package/.output/public/_nuxt/{D8DDDzV62.js → C2iWjzEC2.js} +1 -1
  24. package/.output/public/_nuxt/{HWXLx5Hz.js → C8dxXc6K.js} +5 -5
  25. package/.output/public/_nuxt/CGdPdJPP.js +1 -0
  26. package/.output/public/_nuxt/{CyygA0q4.js → CQiKcuoG.js} +4 -4
  27. package/.output/public/_nuxt/{CN7Zh8GQ.js → CRGlf1Gb.js} +1 -1
  28. package/.output/public/_nuxt/{DSBfvCi5.js → CblLEiCZ.js} +7 -7
  29. package/.output/public/_nuxt/Cd15nPnG2.js +1 -0
  30. package/.output/public/_nuxt/{OwJ1LJkF.js → CsCpu2Zh.js} +1 -1
  31. package/.output/public/_nuxt/CvbHIGQY2.js +1 -0
  32. package/.output/public/_nuxt/Cyk3du4K2.js +1 -0
  33. package/.output/public/_nuxt/{DVQAz9WI.js → D4qXvjuV.js} +2 -2
  34. package/.output/public/_nuxt/{CfIXY-ET.js → DCEyMaN-.js} +1 -1
  35. package/.output/public/_nuxt/{BFYNhG9S.js → DCXIGxzT.js} +1 -1
  36. package/.output/public/_nuxt/{B9aPoQvt.js → DM8DS9MA.js} +1 -1
  37. package/.output/public/_nuxt/{ChnfyQHz.js → DNzaswei.js} +1 -1
  38. package/.output/public/_nuxt/{CrFGZYVB2.js → DYZBdSSg2.js} +1 -1
  39. package/.output/public/_nuxt/{dObsRdSQ.js → DZk24ego.js} +1 -1
  40. package/.output/public/_nuxt/DeYsUzhr.js +1 -0
  41. package/.output/public/_nuxt/Dk6pq9JB2.js +1 -0
  42. package/.output/public/_nuxt/{ByGNWgAr.js → Do88WZG2.js} +3 -3
  43. package/.output/public/_nuxt/{R_WxTozV2.js → Du-eSpo2.js} +1 -1
  44. package/.output/public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css +1 -0
  45. package/.output/public/_nuxt/{Bsc69G4x.js → VnIWJ0ts.js} +3 -3
  46. package/.output/public/_nuxt/_id_.BzKMZnLe.css +1 -0
  47. package/.output/public/_nuxt/_id_.CbpDAWRh.css +1 -0
  48. package/.output/public/_nuxt/{_wsId_.DET_GinP.css → _wsId_.COUzMXpP.css} +1 -1
  49. package/.output/public/_nuxt/agents.BlejnOOC.css +1 -0
  50. package/.output/public/_nuxt/builds/latest.json +1 -1
  51. package/.output/public/_nuxt/builds/meta/14df171d-89cb-43ec-ad6f-9df72d6da7f5.json +1 -0
  52. package/.output/public/_nuxt/daq.zZ8GR433.css +1 -0
  53. package/.output/public/_nuxt/{default.D17kXlD6.css → default.V3_hUJq1.css} +1 -1
  54. package/.output/public/_nuxt/{B4GHHF6d2.js → fQUs58kX2.js} +1 -1
  55. package/.output/public/_nuxt/p7wSGMtc.js +1 -0
  56. package/.output/public/_nuxt/tRBT-plo.js +1 -0
  57. package/.output/server/chunks/_/SearchOutlined.mjs +4 -4
  58. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -1
  59. package/.output/server/chunks/_/character-asset.repo.mjs +3 -6
  60. package/.output/server/chunks/_/character-asset.repo.mjs.map +1 -1
  61. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  62. package/.output/server/chunks/_/nitro.mjs +4967 -2035
  63. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  64. package/.output/server/chunks/_/scene-layout.repo.mjs +4 -10
  65. package/.output/server/chunks/_/scene-layout.repo.mjs.map +1 -1
  66. package/.output/server/chunks/build/{Col-D7fjGDF6.mjs → Col-biaNnEPf.mjs} +2 -2
  67. package/.output/server/chunks/build/{Col-D7fjGDF6.mjs.map → Col-biaNnEPf.mjs.map} +1 -1
  68. package/.output/server/chunks/build/{OmpTerminalPanel-B_SYhmgb.mjs → OmpTerminalPanel-COphA1br.mjs} +20 -19
  69. package/.output/server/chunks/build/OmpTerminalPanel-COphA1br.mjs.map +1 -0
  70. package/.output/server/chunks/build/{TownView-Bl8Gkcxi.mjs → TownView-B5KifIaT.mjs} +4 -4
  71. package/.output/server/chunks/build/{TownView-Bl8Gkcxi.mjs.map → TownView-B5KifIaT.mjs.map} +1 -1
  72. package/.output/server/chunks/build/{_id_-GnRJPykX.mjs → _id_-C-ewLgfl.mjs} +119 -119
  73. package/.output/server/chunks/build/{_id_-GnRJPykX.mjs.map → _id_-C-ewLgfl.mjs.map} +1 -1
  74. package/.output/server/chunks/build/{_id_-CWLFGZjV.mjs → _id_-Ct4Jhvl1.mjs} +42 -38
  75. package/.output/server/chunks/build/_id_-Ct4Jhvl1.mjs.map +1 -0
  76. package/.output/server/chunks/build/{_wsId_-BhQMjyHG.mjs → _wsId_-CanI_6Su.mjs} +591 -53
  77. package/.output/server/chunks/build/{_wsId_-BhQMjyHG.mjs.map → _wsId_-CanI_6Su.mjs.map} +1 -1
  78. package/.output/server/chunks/build/{agents-D4l1icvn.mjs → agents-DSOptxXA.mjs} +146 -91
  79. package/.output/server/chunks/build/agents-DSOptxXA.mjs.map +1 -0
  80. package/.output/server/chunks/build/{alert-gH-s7yIh.mjs → alert-qJnjyRcP.mjs} +3 -3
  81. package/.output/server/chunks/build/{alert-gH-s7yIh.mjs.map → alert-qJnjyRcP.mjs.map} +1 -1
  82. package/.output/server/chunks/build/{button-BhbX5ACI.mjs → button-DEcZFcqN.mjs} +3 -3
  83. package/.output/server/chunks/build/{button-BhbX5ACI.mjs.map → button-DEcZFcqN.mjs.map} +1 -1
  84. package/.output/server/chunks/build/{card-l4BbX67w.mjs → card-Dipvaykh.mjs} +5 -5
  85. package/.output/server/chunks/build/{card-l4BbX67w.mjs.map → card-Dipvaykh.mjs.map} +1 -1
  86. package/.output/server/chunks/build/{channel-templates-DqjtC-R0.mjs → channel-templates-BK0KuPOd.mjs} +13 -12
  87. package/.output/server/chunks/build/channel-templates-BK0KuPOd.mjs.map +1 -0
  88. package/.output/server/chunks/build/{checkbox-BF11p3dH.mjs → checkbox-dzcpU_Cd.mjs} +4 -4
  89. package/.output/server/chunks/build/{checkbox-BF11p3dH.mjs.map → checkbox-dzcpU_Cd.mjs.map} +1 -1
  90. package/.output/server/chunks/build/{daq-BOgpn9sl.mjs → daq-D9RA_uze.mjs} +102 -102
  91. package/.output/server/chunks/build/{daq-BOgpn9sl.mjs.map → daq-D9RA_uze.mjs.map} +1 -1
  92. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs +1 -1
  93. package/.output/server/chunks/build/{default-CKJWhkot.mjs → default-BfWGTlbj.mjs} +81 -23
  94. package/.output/server/chunks/build/{default-CKJWhkot.mjs.map → default-BfWGTlbj.mjs.map} +1 -1
  95. package/.output/server/chunks/build/{drawer-CVValqoh.mjs → drawer-Cmh90erI.mjs} +3 -3
  96. package/.output/server/chunks/build/{drawer-CVValqoh.mjs.map → drawer-Cmh90erI.mjs.map} +1 -1
  97. package/.output/server/chunks/build/{dropdown-ByCsEWlQ.mjs → dropdown-CGQ0KAzA.mjs} +2 -2
  98. package/.output/server/chunks/build/{dropdown-ByCsEWlQ.mjs.map → dropdown-CGQ0KAzA.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{dropdown-Dex8PXu6.mjs → dropdown-vhn1NPFs.mjs} +4 -4
  100. package/.output/server/chunks/build/{dropdown-Dex8PXu6.mjs.map → dropdown-vhn1NPFs.mjs.map} +1 -1
  101. package/.output/server/chunks/build/{input-number-BBlRoAJ7.mjs → input-number-Bd55elNN.mjs} +5 -5
  102. package/.output/server/chunks/build/{input-number-BBlRoAJ7.mjs.map → input-number-Bd55elNN.mjs.map} +1 -1
  103. package/.output/server/chunks/build/{input--KMeLYqZ.mjs → input-sf_BT6o6.mjs} +3 -3
  104. package/.output/server/chunks/build/{input--KMeLYqZ.mjs.map → input-sf_BT6o6.mjs.map} +1 -1
  105. package/.output/server/chunks/build/logs-Dyk0I2I9.mjs +1 -1
  106. package/.output/server/chunks/build/{menu-xN-SXb9Q.mjs → menu-WCrlpYVh.mjs} +3 -3
  107. package/.output/server/chunks/build/{menu-xN-SXb9Q.mjs.map → menu-WCrlpYVh.mjs.map} +1 -1
  108. package/.output/server/chunks/build/{modal-DrCOcjrl.mjs → modal-yvUquPj5.mjs} +4 -4
  109. package/.output/server/chunks/build/{modal-DrCOcjrl.mjs.map → modal-yvUquPj5.mjs.map} +1 -1
  110. package/.output/server/chunks/build/{monitor-KW8WLOJd.mjs → monitor-MIOvsyLa.mjs} +21 -21
  111. package/.output/server/chunks/build/{monitor-KW8WLOJd.mjs.map → monitor-MIOvsyLa.mjs.map} +1 -1
  112. package/.output/server/chunks/build/pages-DR2bzczM.mjs +1 -1
  113. package/.output/server/chunks/build/{plugins-B-ZNey0Z.mjs → plugins-DnOBIWGg.mjs} +7 -7
  114. package/.output/server/chunks/build/{plugins-B-ZNey0Z.mjs.map → plugins-DnOBIWGg.mjs.map} +1 -1
  115. package/.output/server/chunks/build/{popconfirm-C5H1Qoh3.mjs → popconfirm-CRaHcz5O.mjs} +4 -4
  116. package/.output/server/chunks/build/{popconfirm-C5H1Qoh3.mjs.map → popconfirm-CRaHcz5O.mjs.map} +1 -1
  117. package/.output/server/chunks/build/{useWorkshopApi-Bh5VUHWu.mjs → segmented-DPe9ZzLO.mjs} +7 -78
  118. package/.output/server/chunks/build/segmented-DPe9ZzLO.mjs.map +1 -0
  119. package/.output/server/chunks/build/{select-D7H2ysgT.mjs → select-D-CeE5vY.mjs} +3 -3
  120. package/.output/server/chunks/build/{select-D7H2ysgT.mjs.map → select-D-CeE5vY.mjs.map} +1 -1
  121. package/.output/server/chunks/build/{settings-Cr06lbRy.mjs → settings-DA8IkGLo.mjs} +11 -11
  122. package/.output/server/chunks/build/{settings-Cr06lbRy.mjs.map → settings-DA8IkGLo.mjs.map} +1 -1
  123. package/.output/server/chunks/build/{space-DCwIlnkI.mjs → space-CCBYAkXt.mjs} +2 -2
  124. package/.output/server/chunks/build/{space-DCwIlnkI.mjs.map → space-CCBYAkXt.mjs.map} +1 -1
  125. package/.output/server/chunks/build/{switch-VC0m9ede.mjs → switch-CelRXpcy.mjs} +3 -3
  126. package/.output/server/chunks/build/{switch-VC0m9ede.mjs.map → switch-CelRXpcy.mjs.map} +1 -1
  127. package/.output/server/chunks/build/{table-BksLg3Q_.mjs → table-Cswq-l2r.mjs} +10 -10
  128. package/.output/server/chunks/build/{table-BksLg3Q_.mjs.map → table-Cswq-l2r.mjs.map} +1 -1
  129. package/.output/server/chunks/build/{tabs-CzUfD3iX.mjs → tabs-BM3tAh_J.mjs} +5 -5
  130. package/.output/server/chunks/build/{tabs-CzUfD3iX.mjs.map → tabs-BM3tAh_J.mjs.map} +1 -1
  131. package/.output/server/chunks/build/{tag-oQI3VtqM.mjs → tag-NO9jEqKy.mjs} +4 -4
  132. package/.output/server/chunks/build/{tag-oQI3VtqM.mjs.map → tag-NO9jEqKy.mjs.map} +1 -1
  133. package/.output/server/chunks/build/{teams-QR3BBF7A.mjs → teams-BhSKBBBM.mjs} +15 -14
  134. package/.output/server/chunks/build/teams-BhSKBBBM.mjs.map +1 -0
  135. package/.output/server/chunks/build/{tokens-DFvr_TLj.mjs → tokens-D_eyxmcv.mjs} +16 -16
  136. package/.output/server/chunks/build/{tokens-DFvr_TLj.mjs.map → tokens-D_eyxmcv.mjs.map} +1 -1
  137. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -1
  138. package/.output/server/chunks/build/{town-_4tEEEVW.mjs → town-DPtOPRRO.mjs} +4 -4
  139. package/.output/server/chunks/build/{town-_4tEEEVW.mjs.map → town-DPtOPRRO.mjs.map} +1 -1
  140. package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +42 -0
  141. package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs.map +1 -0
  142. package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs +81 -0
  143. package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs.map +1 -0
  144. package/.output/server/chunks/build/useWorkshopWs-B3j5wIAK.mjs +1 -1
  145. package/.output/server/chunks/build/user-Dk-ytEUV.mjs +1 -1
  146. package/.output/server/chunks/build/{users-4FZ0yFUO.mjs → users-CmVvb1oq.mjs} +16 -16
  147. package/.output/server/chunks/build/{users-4FZ0yFUO.mjs.map → users-CmVvb1oq.mjs.map} +1 -1
  148. package/.output/server/chunks/build/{workshop-k0XZTFKg.mjs → workshop-iCzNRifn.mjs} +9 -9
  149. package/.output/server/chunks/build/{workshop-k0XZTFKg.mjs.map → workshop-iCzNRifn.mjs.map} +1 -1
  150. package/.output/server/chunks/build/workspaces-IfORCDJE.mjs +1 -1
  151. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  152. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  153. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  154. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
  155. package/.output/server/chunks/routes/api/metrics.mjs +1 -1
  156. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  157. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
  158. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
  159. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
  160. package/.output/server/chunks/routes/api/system/index.get.mjs +3 -3
  161. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  162. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
  163. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  164. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  165. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
  166. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  167. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  169. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  170. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
  171. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  172. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  173. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
  174. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  175. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  176. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
  177. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  178. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  179. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  180. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
  181. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  182. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
  183. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  184. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  185. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  186. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  187. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  188. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -1
  189. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
  190. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -14
  191. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  192. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +39 -0
  193. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -0
  194. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
  195. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
  196. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
  197. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  198. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  199. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
  200. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
  201. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  202. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -2
  203. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
  204. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -2
  205. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  206. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
  208. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -2
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -2
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
  233. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
  235. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -2
  237. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +9 -2
  238. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
  240. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +2 -2
  241. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -2
  242. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +2 -2
  243. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +2 -2
  244. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +6 -4
  245. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  246. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -2
  247. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -2
  248. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -2
  249. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -2
  250. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -2
  251. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -2
  252. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -2
  253. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -2
  254. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
  255. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
  256. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
  257. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -2
  258. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -2
  259. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -2
  260. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -2
  261. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -2
  262. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -2
  263. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -2
  264. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -2
  265. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
  266. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -2
  267. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -2
  268. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -2
  269. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -2
  270. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -2
  271. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
  272. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -2
  273. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
  274. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -2
  275. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
  276. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -2
  277. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -2
  278. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -2
  279. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
  280. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -2
  281. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
  282. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
  283. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -2
  284. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -2
  285. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -2
  286. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -2
  287. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
  288. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -2
  289. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
  290. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -2
  291. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +2 -2
  292. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -2
  293. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -2
  294. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
  295. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
  296. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
  297. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -2
  298. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
  299. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
  300. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
  301. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
  302. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +247 -0
  304. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -0
  305. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +27 -0
  306. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -0
  307. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  308. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +19 -7
  309. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
  311. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
  312. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
  313. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
  315. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -2
  317. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +2 -2
  318. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -2
  319. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +2 -2
  320. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -2
  321. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  322. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -2
  323. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
  324. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
  325. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -1
  326. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
  327. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -1
  328. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
  329. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
  330. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
  331. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  332. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  333. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
  334. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
  335. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  336. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  337. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  339. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  340. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
  341. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  342. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
  345. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -2
  346. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
  347. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  348. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
  349. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
  350. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  352. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
  353. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  355. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
  356. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
  357. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
  358. package/.output/server/chunks/routes/renderer.mjs +1 -1
  359. package/.output/server/chunks/virtual/entry.mjs +123 -113
  360. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  361. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  362. package/.output/server/index.mjs +1 -1
  363. package/.output/server/package.json +1 -1
  364. package/app/components/AppHeader.vue +56 -2
  365. package/app/components/workshop/ChannelSessionList.vue +703 -593
  366. package/app/components/workshop/terminal/OmpTerminalPanel.vue +2 -1
  367. package/app/composables/workshop/useLocalTime.ts +16 -0
  368. package/app/composables/workshop/useSceneLayouts.ts +2 -1
  369. package/app/composables/workshop/useWorkshopApi.ts +249 -224
  370. package/app/pages/daq/[id].vue +7 -6
  371. package/app/pages/daq/index.vue +2 -2
  372. package/app/pages/dcw/[id].vue +3 -3
  373. package/app/pages/workshop/agents.vue +432 -382
  374. package/bin/aw.mjs +0 -0
  375. package/cli/aw.mjs +8 -1
  376. package/cli/commands/stop.mjs +111 -108
  377. package/cli/commands/tui.mjs +10 -1
  378. package/cli/core/registry.mjs +5 -3
  379. package/cli/infra.mjs +108 -109
  380. package/config.yml +134 -134
  381. package/docs/tui.md +1 -1
  382. package/i18n/locales/en.ts +5 -0
  383. package/i18n/locales/zh-CN.ts +5 -0
  384. package/package.json +148 -140
  385. package/scripts/_dbg-catalog-smoke.ts +20 -0
  386. package/scripts/_dbg-codex-probe.mjs +58 -0
  387. package/scripts/_dbg-dsh-probe.mjs +31 -0
  388. package/scripts/_dbg-interval-scenario.mjs +126 -0
  389. package/scripts/_dbg-line-spawn.ts +31 -0
  390. package/scripts/_dbg-live-engine-probe.mjs +80 -0
  391. package/scripts/_dbg-mcp-bridge-probe.mjs +147 -0
  392. package/scripts/_dbg-opencode-sse.mjs +101 -0
  393. package/scripts/_dbg-opencode-start.ts +57 -0
  394. package/scripts/_dbg-plugin-matrix.mjs +212 -0
  395. package/scripts/_dbg-protocol-matrix.mjs +425 -0
  396. package/scripts/_dbg-real-scenario-timeline.log +123 -0
  397. package/scripts/_dbg-registry-smoke.ts +14 -0
  398. package/scripts/_dbg-sim-keeper.mjs +100 -0
  399. package/scripts/_dbg-team-drill.mjs +173 -0
  400. package/scripts/dev-guard.mjs +11 -3
  401. package/scripts/dev-protocol-simulators.mjs +28 -1
  402. package/scripts/e2e-multi-harness.ts +374 -0
  403. package/scripts/e2e-multiharness-team.mjs +319 -0
  404. package/scripts/e2e-plc-scenario.mjs +292 -0
  405. package/scripts/e2e-real-scenario.mjs +452 -0
  406. package/scripts/migrate-local-time.mjs +123 -0
  407. package/scripts/start.mjs +60 -9
  408. package/server/api/system/settings/index.get.ts +3 -3
  409. package/server/api/workshop/agent-tools/invoke.post.ts +27 -41
  410. package/server/api/workshop/agent-tools/list.get.ts +25 -0
  411. package/server/api/workshop/channels/[id]/index.patch.ts +38 -30
  412. package/server/api/workshop/daq/[id]/samples.get.ts +6 -3
  413. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -0
  414. package/server/api/workshop/harnesses.get.ts +12 -0
  415. package/server/api/workshop/hitl/respond.post.ts +87 -67
  416. package/server/api/workshop/ws.ts +13 -0
  417. package/server/data/daqs.json +1366 -16
  418. package/server/data/dcw-lines.json +266 -0
  419. package/server/data/dcw-products.json +203 -0
  420. package/server/data/dcw-recipes.json +784 -0
  421. package/server/data/dcw-rollback.json +1144 -1
  422. package/server/data/dcw-runs.json +983 -791
  423. package/server/data/dcw-writes.json +1080 -0
  424. package/server/data/dcws.json +3278 -203
  425. package/server/data/line-runs.json +52 -2
  426. package/server/harness/aw-mcp-bridge.mjs +153 -0
  427. package/server/plugins/00-local-time.ts +10 -0
  428. package/server/plugins/aw-plugins.ts +3 -0
  429. package/server/plugins/backup.ts +116 -97
  430. package/server/plugins/dev-stability-guard.ts +24 -15
  431. package/server/plugins/retention.ts +1 -0
  432. package/server/plugins/security.ts +24 -3
  433. package/server/plugins/workshop.ts +156 -153
  434. package/server/repositories/user.repository.ts +414 -391
  435. package/server/services/system-config.ts +30 -6
  436. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +1 -0
  437. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +14 -0
  438. package/server/services/workshop/agents/adapters/line-spawn.ts +108 -0
  439. package/server/services/workshop/agents/adapters/stdio-jsonrpc.ts +316 -0
  440. package/server/services/workshop/agents/agent-interface.ts +17 -0
  441. package/server/services/workshop/agents/codex-agent.ts +822 -0
  442. package/server/services/workshop/agents/dsh-agent.ts +670 -0
  443. package/server/services/workshop/agents/factory.ts +4 -16
  444. package/server/services/workshop/agents/harness-env.ts +54 -0
  445. package/server/services/workshop/agents/harness-models.ts +270 -0
  446. package/server/services/workshop/agents/host-tool-bridge.ts +592 -0
  447. package/server/services/workshop/agents/industrial-tools.ts +5 -1
  448. package/server/services/workshop/agents/node-bindings.repo.ts +4 -5
  449. package/server/services/workshop/agents/omp-agent.ts +1178 -1957
  450. package/server/services/workshop/agents/opencode-agent.ts +987 -0
  451. package/server/services/workshop/agents/prompt-builder.ts +393 -0
  452. package/server/services/workshop/agents/registry.ts +125 -0
  453. package/server/services/workshop/assets/character-asset.repo.ts +3 -5
  454. package/server/services/workshop/assets/device-twin.repo.ts +3 -5
  455. package/server/services/workshop/daq/daq-controller.ts +8 -4
  456. package/server/services/workshop/daq/daq-node.repo.ts +3 -5
  457. package/server/services/workshop/daq/daq-node.ts +2 -2
  458. package/server/services/workshop/daq/daq-templates.ts +3 -5
  459. package/server/services/workshop/daq/drivers.ts +41 -12
  460. package/server/services/workshop/daq/storage/sqlite.adapter.ts +313 -309
  461. package/server/services/workshop/db/backup-registry.ts +33 -0
  462. package/server/services/workshop/db/channel.repo.ts +104 -101
  463. package/server/services/workshop/db/database.ts +956 -949
  464. package/server/services/workshop/dcw/dcw-controller.ts +3 -1
  465. package/server/services/workshop/dcw/dcw-line.repo.ts +4 -11
  466. package/server/services/workshop/dcw/dcw-node.repo.ts +3 -5
  467. package/server/services/workshop/dcw/dcw-node.ts +13 -1
  468. package/server/services/workshop/dcw/dcw-product.repo.ts +3 -4
  469. package/server/services/workshop/dcw/dcw-recipe.repo.ts +3 -19
  470. package/server/services/workshop/dcw/dcw-templates.ts +3 -5
  471. package/server/services/workshop/dcw/drivers.ts +37 -13
  472. package/server/services/workshop/dcw/line-run.ts +3 -5
  473. package/server/services/workshop/dcw/recipe-rollback.repo.ts +4 -10
  474. package/server/services/workshop/json-store.mjs +72 -0
  475. package/server/services/workshop/plugins/host.mjs +2 -1
  476. package/server/services/workshop/runtime/agent-runtime.ts +44 -0
  477. package/server/services/workshop/runtime/manager.ts +2953 -2868
  478. package/server/services/workshop/scene/scene-layout.repo.ts +4 -11
  479. package/server/services/workshop/settings.ts +7 -0
  480. package/shared/config/schema.json +5 -0
  481. package/shared/config/single-instance.mjs +133 -86
  482. package/shared/local-time.mjs +36 -0
  483. package/shared/workshop-protocol.ts +11 -5
  484. package/tui/aw-tui.mjs +28 -10
  485. package/tui/components/hitl-card.mjs +47 -36
  486. package/tui/lib/config.mjs +62 -58
  487. package/tui/lib/ws.mjs +2 -1
  488. package/.output/public/_nuxt/9X0fVBD7.js +0 -57
  489. package/.output/public/_nuxt/B6M2WJWm2.js +0 -1
  490. package/.output/public/_nuxt/B9Yie5HN.js +0 -2
  491. package/.output/public/_nuxt/BF9XPEuw.js +0 -1
  492. package/.output/public/_nuxt/BbQornXa.js +0 -1
  493. package/.output/public/_nuxt/Bxgaym6j.js +0 -1
  494. package/.output/public/_nuxt/Bxh5nf8j.js +0 -1
  495. package/.output/public/_nuxt/CXLI50Sq.js +0 -1
  496. package/.output/public/_nuxt/CdfAP_IH2.js +0 -1
  497. package/.output/public/_nuxt/Ce1zyNYu.js +0 -1
  498. package/.output/public/_nuxt/D-Ne4C9a.js +0 -1
  499. package/.output/public/_nuxt/DEHNjlTq2.js +0 -1
  500. package/.output/public/_nuxt/DFnGFEav.js +0 -18
  501. package/.output/public/_nuxt/DYWgGHNo.js +0 -7
  502. package/.output/public/_nuxt/OmpTerminalPanel.Bc9GjNU5.css +0 -1
  503. package/.output/public/_nuxt/W1E3-5ML.js +0 -14
  504. package/.output/public/_nuxt/XVB9_zwP.js +0 -1
  505. package/.output/public/_nuxt/Xaf_HIR3.js +0 -1
  506. package/.output/public/_nuxt/_id_.BeqSLvl_.css +0 -1
  507. package/.output/public/_nuxt/_id_.DN3U6EF9.css +0 -1
  508. package/.output/public/_nuxt/agents.BJwgTLFZ.css +0 -1
  509. package/.output/public/_nuxt/builds/meta/55c10854-ee0e-4be4-924b-a1b0e100fe11.json +0 -1
  510. package/.output/public/_nuxt/daq.BXsnevQv.css +0 -1
  511. package/.output/public/_nuxt/yIKY_V1P.js +0 -1
  512. package/.output/server/chunks/build/OmpTerminalPanel-B_SYhmgb.mjs.map +0 -1
  513. package/.output/server/chunks/build/_id_-CWLFGZjV.mjs.map +0 -1
  514. package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +0 -1
  515. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +0 -1
  516. package/.output/server/chunks/build/interval-WlxgjTzO.mjs +0 -9
  517. package/.output/server/chunks/build/interval-WlxgjTzO.mjs.map +0 -1
  518. package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +0 -1
  519. package/.output/server/chunks/build/useWorkshopApi-Bh5VUHWu.mjs.map +0 -1
@@ -1,58 +1,62 @@
1
- // ============================================================
2
- // TUI 认证/连接配置 —— 落配置根 .AgentWorkShop/tui-auth.json(0600)。
3
- // 解析口径与服务端一致:cwd 向上找 config.yml → <repo>/.AgentWorkShop,
4
- // 找不到(全局安装任意 cwd)→ ~/.AgentWorkShop。
5
- // ============================================================
6
- import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'node:fs'
7
- import { homedir } from 'node:os'
8
- import { join, resolve, dirname } from 'node:path'
9
-
10
- /** 向上查找文件(repo 模式判定) */
11
- function findUp(startDir, filename) {
12
- let dir = resolve(startDir)
13
- for (;;) {
14
- const candidate = join(dir, filename)
15
- if (existsSync(candidate)) return candidate
16
- const parent = dirname(dir)
17
- if (parent === dir) return null
18
- dir = parent
19
- }
20
- }
21
-
22
- /** 配置根(repo 内 cwd → <repo>/.AgentWorkShop;否则 ~/.AgentWorkShop) */
23
- export function configRoot(cwd = process.cwd()) {
24
- const marker = findUp(cwd, 'config.yml')
25
- if (marker) return join(dirname(marker), '.AgentWorkShop')
26
- return join(homedir(), '.AgentWorkShop')
27
- }
28
-
29
- const authPath = cwd => join(configRoot(cwd), 'tui-auth.json')
30
-
31
- /** 读取已存凭据({ baseUrl, token, email? } 或 null) */
32
- export function loadAuth(cwd = process.cwd()) {
33
- try {
34
- const raw = JSON.parse(readFileSync(authPath(cwd), 'utf8'))
35
- if (raw && typeof raw.token === 'string' && typeof raw.baseUrl === 'string') return raw
36
- }
37
- catch { /* 无凭据/损坏 → 重新登录 */ }
38
- return null
39
- }
40
-
41
- /** 持久化凭据(0600;路径加入 .gitignore) */
42
- export function saveAuth(auth, cwd = process.cwd()) {
43
- const file = authPath(cwd)
44
- mkdirSync(dirname(file), { recursive: true })
45
- writeFileSync(file, `${JSON.stringify(auth, null, 2)}\n`, 'utf8')
46
- try {
47
- chmodSync(file, 0o600)
48
- }
49
- catch { /* Windows FAT 卷 chmod 无效,忽略 */ }
50
- }
51
-
52
- /** 清除凭据(登出) */
53
- export function clearAuth(cwd = process.cwd()) {
54
- try {
55
- existsSync(authPath(cwd)) && (writeFileSync(authPath(cwd), '{}\n', 'utf8'), true)
56
- }
57
- catch { /* 尽力而为 */ }
58
- }
1
+ // ============================================================
2
+ // TUI 认证/连接配置 —— 落配置根 .AgentWorkShop/tui-auth.json(0600)。
3
+ // 解析口径与服务端一致:cwd 向上找 config.yml → <repo>/.AgentWorkShop,
4
+ // 找不到(全局安装任意 cwd)→ ~/.AgentWorkShop。
5
+ // ============================================================
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'node:fs'
7
+ import { homedir } from 'node:os'
8
+ import { join, resolve, dirname } from 'node:path'
9
+
10
+ /** 向上查找文件(repo 模式判定) */
11
+ function findUp(startDir, filename) {
12
+ let dir = resolve(startDir)
13
+ for (;;) {
14
+ const candidate = join(dir, filename)
15
+ if (existsSync(candidate)) return candidate
16
+ const parent = dirname(dir)
17
+ if (parent === dir) return null
18
+ dir = parent
19
+ }
20
+ }
21
+
22
+ /** 配置根(与服务端同策略):仅当用户自建了 <检出根>/.AgentWorkShop 时优先使用;
23
+ * 否则一律回落 ~/.AgentWorkShop(绝不在 pwd 下自动创建)。 */
24
+ export function configRoot(cwd = process.cwd()) {
25
+ const marker = findUp(cwd, 'config.yml')
26
+ if (marker) {
27
+ const candidate = join(dirname(marker), '.AgentWorkShop')
28
+ if (existsSync(candidate)) return candidate
29
+ }
30
+ return join(homedir(), '.AgentWorkShop')
31
+ }
32
+
33
+ const authPath = cwd => join(configRoot(cwd), 'tui-auth.json')
34
+
35
+ /** 读取已存凭据({ baseUrl, token, email? } 或 null) */
36
+ export function loadAuth(cwd = process.cwd()) {
37
+ try {
38
+ const raw = JSON.parse(readFileSync(authPath(cwd), 'utf8'))
39
+ if (raw && typeof raw.token === 'string' && typeof raw.baseUrl === 'string') return raw
40
+ }
41
+ catch { /* 无凭据/损坏 → 重新登录 */ }
42
+ return null
43
+ }
44
+
45
+ /** 持久化凭据(0600;路径加入 .gitignore) */
46
+ export function saveAuth(auth, cwd = process.cwd()) {
47
+ const file = authPath(cwd)
48
+ mkdirSync(dirname(file), { recursive: true })
49
+ writeFileSync(file, `${JSON.stringify(auth, null, 2)}\n`, 'utf8')
50
+ try {
51
+ chmodSync(file, 0o600)
52
+ }
53
+ catch { /* Windows FAT 卷 chmod 无效,忽略 */ }
54
+ }
55
+
56
+ /** 清除凭据(登出) */
57
+ export function clearAuth(cwd = process.cwd()) {
58
+ try {
59
+ existsSync(authPath(cwd)) && (writeFileSync(authPath(cwd), '{}\n', 'utf8'), true)
60
+ }
61
+ catch { /* 尽力而为 */ }
62
+ }
package/tui/lib/ws.mjs CHANGED
@@ -72,7 +72,8 @@ export function connectAep({ baseUrl, token, onEvent, onState }) {
72
72
  },
73
73
  unsubscribe(channelId) {
74
74
  subscribed.delete(channelId)
75
- ws?.send(JSON.stringify({ type: 'unsub', channelId }))
75
+ // CONNECTING 态 send() 会同步抛 InvalidStateError(重连窗口内切频道即触发)
76
+ if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify({ type: 'unsub', channelId }))
76
77
  },
77
78
  /** 游标推进(onEvent 内按信封 seq 调用;重连续传依据) */
78
79
  cursor(channelId, seq) {
@@ -1,57 +0,0 @@
1
- import{C as e,E as t,M as n,O as r,P as i,U as a,V as o,c as s,et as c,f as l,ft as u,mt as d,w as f,x as p,z as m}from"./BSCpFtzG.js";import{T as h,kt as g,nt as _,t as v,w as y}from"./BDUjyaF4.js";function b(e){let{prefixCls:t,animation:n,transitionName:r}=e;return n?{name:`${t}-${n}`}:r?{name:r}:{}}_(`bottomLeft`,`bottomRight`,`topLeft`,`topRight`);var x=e=>e!==void 0&&(e===`topLeft`||e===`topRight`)?`slide-down`:`slide-up`,ee=function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return g(e?{name:e,appear:!0,enterFromClass:`${e}-enter ${e}-enter-prepare ${e}-enter-start`,enterActiveClass:`${e}-enter ${e}-enter-prepare`,enterToClass:`${e}-enter ${e}-enter-active`,leaveFromClass:` ${e}-leave`,leaveActiveClass:`${e}-leave ${e}-leave-active`,leaveToClass:`${e}-leave ${e}-leave-active`}:{css:!1},t)},te=function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return g(e?{name:e,appear:!0,appearActiveClass:`${e}`,appearToClass:`${e}-appear ${e}-appear-active`,enterFromClass:`${e}-appear ${e}-enter ${e}-appear-prepare ${e}-enter-prepare`,enterActiveClass:`${e}`,enterToClass:`${e}-enter ${e}-appear ${e}-appear-active ${e}-enter-active`,leaveActiveClass:`${e} ${e}-leave`,leaveToClass:`${e}-leave-active`}:{css:!1},t)},ne=(e,t,n)=>n===void 0?`${e}-${t}`:n,S=Symbol(`PortalContextKey`),C=function(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};a(S,{inTriggerContext:t.inTriggerContext,shouldRender:l(()=>{let{sPopupVisible:t,popupRef:n,forceRender:r,autoDestroy:i}=e||{},a=!1;return(t||n||r)&&(a=!0),!t&&i&&(a=!1),a})})},re=()=>{C({},{inTriggerContext:!1});let e=r(S,{shouldRender:l(()=>!1),inTriggerContext:!1});return{shouldRender:l(()=>e.shouldRender.value||e.inTriggerContext===!1)}},ie=e({compatConfig:{MODE:3},name:`Portal`,inheritAttrs:!1,props:{getContainer:v.func.isRequired,didUpdate:Function},setup(e,t){let{slots:r}=t,a=!0,l,{shouldRender:u}=re();function d(){u.value&&(l=e.getContainer())}i(()=>{a=!1,d()}),m(()=>{l||d()});let f=c(u,()=>{u.value&&!l&&(l=e.getContainer()),l&&f()});return o(()=>{n(()=>{var t;u.value&&((t=e.didUpdate)==null||t.call(e,e))})}),()=>u.value?a?r.default?.call(r):l?p(s,{to:l},r):null:null}}),ae=Symbol(`iconContext`),w=function(){return r(ae,{prefixCls:d(`anticon`),rootClassName:d(``),csp:d()})};function T(){return!!(typeof window<`u`&&window.document&&window.document.createElement)}function oe(e,t){return e&&e.contains?e.contains(t):!1}var E=`data-vc-order`,se=`vc-icon-key`,D=new Map;function O(){var e=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).mark;return e?e.startsWith(`data-`)?e:`data-${e}`:se}function k(e){return e.attachTo?e.attachTo:document.querySelector(`head`)||document.body}function ce(e){return e===`queue`?`prependQueue`:e?`prepend`:`append`}function A(e){return Array.from((D.get(e)||e).children).filter(function(e){return e.tagName===`STYLE`})}function j(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!T())return null;var n=t.csp,r=t.prepend,i=document.createElement(`style`);i.setAttribute(E,ce(r)),n&&n.nonce&&(i.nonce=n.nonce),i.innerHTML=e;var a=k(t),o=a.firstChild;if(r){if(r===`queue`){var s=A(a).filter(function(e){return[`prepend`,`prependQueue`].includes(e.getAttribute(E))});if(s.length)return a.insertBefore(i,s[s.length-1].nextSibling),i}a.insertBefore(i,o)}else a.appendChild(i);return i}function le(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return A(k(t)).find(function(n){return n.getAttribute(O(t))===e})}function ue(e,t){var n=D.get(e);if(!n||!oe(document,n)){var r=j(``,t),i=r.parentNode;D.set(e,i),e.removeChild(r)}}function de(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};ue(k(n),n);var r=le(t,n);if(r)return n.csp&&n.csp.nonce&&r.nonce!==n.csp.nonce&&(r.nonce=n.csp.nonce),r.innerHTML!==e&&(r.innerHTML=e),r;var i=j(e,n);return i.setAttribute(O(n),t),i}function M(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){fe(e,t,n[t])})}return e}function fe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pe(e,t){`${t}`}function N(e){return typeof e==`object`&&typeof e.name==`string`&&typeof e.theme==`string`&&(typeof e.icon==`object`||typeof e.icon==`function`)}function P(e,n,r){return r?t(e.tag,M({key:n},r,e.attrs),(e.children||[]).map(function(t,r){return P(t,`${n}-${e.tag}-${r}`)})):t(e.tag,M({key:n},e.attrs),(e.children||[]).map(function(t,r){return P(t,`${n}-${e.tag}-${r}`)}))}function F(e){return h(e)[0]}function I(e){return e?Array.isArray(e)?e:[e]:[]}var me=`
2
- .anticon {
3
- display: inline-block;
4
- color: inherit;
5
- font-style: normal;
6
- line-height: 0;
7
- text-align: center;
8
- text-transform: none;
9
- vertical-align: -0.125em;
10
- text-rendering: optimizeLegibility;
11
- -webkit-font-smoothing: antialiased;
12
- -moz-osx-font-smoothing: grayscale;
13
- }
14
-
15
- .anticon > * {
16
- line-height: 1;
17
- }
18
-
19
- .anticon svg {
20
- display: inline-block;
21
- }
22
-
23
- .anticon::before {
24
- display: none;
25
- }
26
-
27
- .anticon .anticon-icon {
28
- display: block;
29
- }
30
-
31
- .anticon[tabindex] {
32
- cursor: pointer;
33
- }
34
-
35
- .anticon-spin::before,
36
- .anticon-spin {
37
- display: inline-block;
38
- -webkit-animation: loadingCircle 1s infinite linear;
39
- animation: loadingCircle 1s infinite linear;
40
- }
41
-
42
- @-webkit-keyframes loadingCircle {
43
- 100% {
44
- -webkit-transform: rotate(360deg);
45
- transform: rotate(360deg);
46
- }
47
- }
48
-
49
- @keyframes loadingCircle {
50
- 100% {
51
- -webkit-transform: rotate(360deg);
52
- transform: rotate(360deg);
53
- }
54
- }
55
- `;function L(e){return e&&e.getRootNode&&e.getRootNode()}function he(e){return T()?L(e)instanceof ShadowRoot:!1}function ge(e){return he(e)?L(e):null}var _e=function(){var e=w(),t=e.prefixCls,r=e.csp,i=f(),a=me;t&&(a=a.replace(/anticon/g,t.value)),n(function(){if(T()){var e=i.vnode.el,t=ge(e);de(a,`@ant-design-vue-icons`,{prepend:!0,csp:r.value,attachTo:t})}})},ve=[`icon`,`primaryColor`,`secondaryColor`];function ye(e,t){if(e==null)return{};var n=be(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function be(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}function R(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){xe(e,t,n[t])})}return e}function xe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var z=u({primaryColor:`#333`,secondaryColor:`#E6E6E6`,calculated:!1});function Se(e){var t=e.primaryColor,n=e.secondaryColor;z.primaryColor=t,z.secondaryColor=n||F(t),z.calculated=!!n}function Ce(){return R({},z)}var B=function(e,t){var n=R({},e,t.attrs),r=n.icon,i=n.primaryColor,a=n.secondaryColor,o=ye(n,ve),s=z;if(i&&(s={primaryColor:i,secondaryColor:a||F(i)}),pe(N(r),`icon should be icon definiton, but got ${r}`),!N(r))return null;var c=r;return c&&typeof c.icon==`function`&&(c=R({},c,{icon:c.icon(s.primaryColor,s.secondaryColor)})),P(c.icon,`svg-${c.name}`,R({},o,{"data-icon":c.name,width:`1em`,height:`1em`,fill:`currentColor`,"aria-hidden":`true`}))};B.props={icon:Object,primaryColor:String,secondaryColor:String,focusable:String},B.inheritAttrs=!1,B.displayName=`IconBase`,B.getTwoToneColors=Ce,B.setTwoToneColors=Se;function we(e,t){return Oe(e)||De(e,t)||Ee(e,t)||Te()}function Te(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
56
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Ee(e,t){if(e){if(typeof e==`string`)return V(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`)return Array.from(e);if(n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return V(e,t)}}function V(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function De(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r=[],i=!0,a=!1,o,s;try{for(n=n.call(e);!(i=(o=n.next()).done)&&(r.push(o.value),!(t&&r.length===t));i=!0);}catch(e){a=!0,s=e}finally{try{!i&&n.return!=null&&n.return()}finally{if(a)throw s}}return r}}function Oe(e){if(Array.isArray(e))return e}function H(e){var t=we(I(e),2),n=t[0],r=t[1];return B.setTwoToneColors({primaryColor:n,secondaryColor:r})}function ke(){var e=B.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor}var U=e({name:`InsertStyles`,setup:function(){return _e(),function(){return null}}}),Ae=[`class`,`icon`,`spin`,`rotate`,`tabindex`,`twoToneColor`,`onClick`];function je(e,t){return Fe(e)||Pe(e,t)||Ne(e,t)||Me()}function Me(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
57
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Ne(e,t){if(e){if(typeof e==`string`)return W(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`)return Array.from(e);if(n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return W(e,t)}}function W(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Pe(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r=[],i=!0,a=!1,o,s;try{for(n=n.call(e);!(i=(o=n.next()).done)&&(r.push(o.value),!(t&&r.length===t));i=!0);}catch(e){a=!0,s=e}finally{try{!i&&n.return!=null&&n.return()}finally{if(a)throw s}}return r}}function Fe(e){if(Array.isArray(e))return e}function G(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){K(e,t,n[t])})}return e}function K(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ie(e,t){if(e==null)return{};var n=Le(e,t),r,i;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Le(e,t){if(e==null)return{};var n={},r=Object.keys(e),i,a;for(a=0;a<r.length;a++)i=r[a],!(t.indexOf(i)>=0)&&(n[i]=e[i]);return n}H(y.primary);var q=function(e,t){var n,r=G({},e,t.attrs),i=r.class,a=r.icon,o=r.spin,s=r.rotate,c=r.tabindex,l=r.twoToneColor,u=r.onClick,d=Ie(r,Ae),f=w(),m=f.prefixCls,h=f.rootClassName,g=(n={},K(n,h.value,!!h.value),K(n,m.value,!0),K(n,`${m.value}-${a.name}`,!!a.name),K(n,`${m.value}-spin`,!!o||a.name===`loading`),n),_=c;_===void 0&&u&&(_=-1);var v=s?{msTransform:`rotate(${s}deg)`,transform:`rotate(${s}deg)`}:void 0,y=je(I(l),2),b=y[0],x=y[1];return p(`span`,G({role:`img`,"aria-label":a.name},d,{onClick:u,class:[g,i],tabindex:_}),[p(B,{icon:a,primaryColor:b,secondaryColor:x,style:v},null),p(U,null,null)])};q.props={spin:Boolean,rotate:Number,icon:Object,twoToneColor:[String,Array]},q.displayName=`AntdIcon`,q.inheritAttrs=!1,q.getTwoToneColor=ke,q.setTwoToneColor=H;var Re={icon:{tag:`svg`,attrs:{viewBox:`0 0 1024 1024`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z`}}]},name:`loading`,theme:`outlined`};function J(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){ze(e,t,n[t])})}return e}function ze(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Y=function(e,t){var n=J({},e,t.attrs);return p(q,J({},n,{icon:Re}),null)};Y.displayName=`LoadingOutlined`,Y.inheritAttrs=!1;var Be={icon:{tag:`svg`,attrs:{"fill-rule":`evenodd`,viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z`}}]},name:`close`,theme:`outlined`};function X(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Ve(e,t,n[t])})}return e}function Ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Z=function(e,t){var n=X({},e,t.attrs);return p(q,X({},n,{icon:Be}),null)};Z.displayName=`CloseOutlined`,Z.inheritAttrs=!1;var He={icon:{tag:`svg`,attrs:{"fill-rule":`evenodd`,viewBox:`64 64 896 896`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z`}}]},name:`close-circle`,theme:`filled`};function Q(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Ue(e,t,n[t])})}return e}function Ue(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $=function(e,t){var n=Q({},e,t.attrs);return p(q,Q({},n,{icon:He}),null)};$.displayName=`CloseCircleFilled`,$.inheritAttrs=!1;export{ie as a,te as c,b as d,q as i,ne as l,Z as n,C as o,Y as r,x as s,$ as t,ee as u};
@@ -1 +0,0 @@
1
- import{r as e,t}from"./OwJ1LJkF.js";t.Button=e,t.install=function(n){return n.component(t.name,t),n.component(e.name,e),n};var n=t;export{n as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BUcmySDa2.js","./BBrRELH32.js","./CWKEp1wx2.js","./BFjGV-RV2.js","./RYFtK4qZ2.js","./BGkumHZ32.js"])))=>i.map(i=>d[i]);
2
- import{C as e,F as t,G as n,H as r,Ht as i,M as a,St as o,Ut as s,Wt as c,a as l,b as u,bt as d,dt as f,et as p,f as m,ft as h,g,gt as _,h as v,it as y,lt as b,m as x,mt as S,nt as ee,ot as C,p as w,pt as te,rt as T,t as E,vt as D,w as O,x as k,y as A,z as ne}from"./BSCpFtzG.js";import{B as j,I as M,L as N,R as re,k as ie,z as ae}from"./2LwEn9gX.js";import{t as oe}from"./HclGiUj8.js";import{n as se}from"./BeIfu4N3.js";import{t as ce}from"./BJvGPTpC.js";import{t as le}from"./eHGLpQSg2.js";import{t as ue}from"./NIM0Wglj2.js";import{t as de}from"./BBrRELH32.js";import{C as fe,L as pe,N as P,O as me,St as F,_ as he,b as ge,c as _e,dt as ve,et as ye,v as be,y as xe,z as I}from"./BFjGV-RV2.js";import{t as Se}from"./C_gFA2H_2.js";import{n as Ce,t as we}from"./ZugRk0CM2.js";import{t as Te}from"./36oeS8_R2.js";import{t as Ee}from"./GP2wXyuY.js";import{r as De,t as Oe}from"./CS8R0_J3.js";import{t as ke}from"./CUxV8Bw_.js";var L=`__characterAssets`;function Ae(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 je(){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:`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(Ae(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=e instanceof Error?e.message:String(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(),Ae(o.data.asset)},async remove(e){let t=await fetch(`/api/workshop/assets/character/${e}`,{method:`DELETE`,headers:r()}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n?.message??`删除失败`);return i.loaded=!1,await i.load(),{used:n?.data?.used??0}},async uploadDevice(e,t){let n=new FormData;n.append(`file`,e),t&&n.append(`name`,t);let a=await fetch(`/api/workshop/assets/devices`,{method:`POST`,headers:r(!1),body:n}),o=await a.json().catch(()=>({}));if(!a.ok||!o?.data?.asset)throw Error(o?.message??`设备模型上传失败`);i.loaded=!1,await i.load();let s=o.data.asset;return{id:s.id,name:s.name,file:s.file,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!1,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`}},async removeDevice(e){let t=e.replace(/^dev-folder-/,``),n=await fetch(`/api/workshop/assets/devices/${encodeURIComponent(t)}`,{method:`DELETE`,headers:r()}),a=await n.json().catch(()=>({}));if(!n.ok)throw Error(a?.message??`设备模型删除失败`);i.loaded=!1,await i.load()},async bind(e,t,n){let i=await fetch(`/api/workshop/channels/${e}/agents/${t}/model`,{method:`PATCH`,headers:r(),body:JSON.stringify({modelRef:n})}),a=await i.json().catch(()=>({}));if(!i.ok)throw Error(a?.message??`绑定失败`)}});return i}function Me(){let e=globalThis;e[L]||(e[L]=je());let t=e[L];return t.load(),t}var R={key:0,class:`mp-loading`},Ne={key:1,class:`mp-failed`},z=Object.assign(E(e({__name:`ModelPreview3D`,props:{file:{default:``},localFile:{default:null},height:{default:64}},setup(e){let n=e,i=S(null),c=S(!1),l=S(!1),u=globalThis,d=``;function f(){if(u.__modelPreviewRig)return u.__modelPreviewRig;let e=new ge({alpha:!0,antialias:!1,powerPreference:`low-power`});e.setPixelRatio(Math.min(window.devicePixelRatio,1.5)),e.toneMapping=4,e.toneMappingExposure=1.15;let t={renderer:e,slots:new Set,raf:0,clock:new me},n=()=>{t.raf=requestAnimationFrame(n);let e=t.clock.getDelta();for(let n of t.slots)!n.canvas.isConnected&&n.canvas.width===0||(n.group&&(n.group.rotation.y+=e*n.speed),t.renderer.setSize(n.w,n.h,!1),t.renderer.render(n.scene,n.camera),n.ctx.clearRect(0,0,n.w,n.h),n.ctx.drawImage(t.renderer.domElement,0,0,n.w,n.h))};return n(),u.__modelPreviewRig=t,t}function m(){let e=u.__modelPreviewRig;!e||e.slots.size>0||(cancelAnimationFrame(e.raf),e.renderer.dispose(),e.renderer.domElement.remove(),delete u.__modelPreviewRig)}function h(e){try{let t=new xe(u.__modelPreviewRig.renderer);e.environment=t.fromScene(new he,.04).texture,e.environmentIntensity=.55,t.dispose()}catch{}e.add(new I(14674431,3813157,1.3));let t=new P(16773855,2.2);t.position.set(3,4,2),e.add(t);let n=new P(4311284,1);n.position.set(-3,1,-2.5),e.add(n)}function _(e){let t=new fe().setFromObject(e),n=new F;t.getSize(n);let r=t.getCenter(new F),i=2/(Math.max(n.x,Math.max(n.y,n.z))||1);e.scale.setScalar(i),e.position.set(-r.x*i,-r.y*i,-r.z*i)}let y=null;function b(e){if(!i.value||c.value)return;let t=i.value,r=t.clientWidth||120,a=n.height||64,o=f(),s=document.createElement(`canvas`);s.style.width=`100%`,s.style.height=`${a}px`,s.width=Math.max(2,Math.round(r*Math.min(window.devicePixelRatio,1.5))),s.height=Math.max(2,Math.round(a*Math.min(window.devicePixelRatio,1.5)));let u=s.getContext(`2d`);if(!u){c.value=!0;return}t.appendChild(s);let d=new ve;h(d);let p=new ye(38,r/a,.1,100);p.position.set(2.4,1.8,3.1),p.lookAt(0,0,0);let m=new pe;d.add(m),y={canvas:s,ctx:u,scene:d,camera:p,group:m,w:s.width,h:s.height,speed:.6},o.slots.add(y),l.value=!0,new be().load(e,e=>{let t=e.scene;y&&(t.traverse(e=>{let t=e;t.isMesh&&(t.castShadow=!1,t.receiveShadow=!1)}),_(t),y.group.add(t),l.value=!1)},void 0,()=>{l.value=!1,c.value=!0})}function x(){d&&URL.revokeObjectURL(d),d=``,y&&(u.__modelPreviewRig?.slots.delete(y),y.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()}}}),y.canvas.remove(),y=null,m())}function ee(){if(c.value=!1,n.localFile){d=URL.createObjectURL(n.localFile),b(d);return}n.file&&b(n.file)}return ne(ee),p(()=>[n.file,n.localFile],()=>{x(),(n.localFile??(n.file?n.file:null))&&a(()=>ee())}),t(x),(t,n)=>(r(),g(`div`,{ref_key:`hostRef`,ref:i,class:`model-preview-3d`,style:s({height:`${e.height}px`})},[o(l)?(r(),g(`div`,R,[...n[0]||=[w(`span`,{class:`mp-spin`},null,-1)]])):o(c)?(r(),g(`div`,Ne,` PREVIEW NA `)):v(``,!0)],4))}}),[[`__scopeId`,`data-v-b29ffdbe`]]),{__name:`WorkshopTownModelPreview3D`}),Pe={class:`asset-lib`},Fe={class:`lib-head`},Ie={class:`head-title`},Le={class:`head-hint`},Re={class:`upload-row`},ze={class:`upload-name`},Be={key:0,class:`drop-hint`},Ve={key:1,class:`upload-file-tag`},He={class:`upload-actions`},Ue=[`disabled`],We=[`disabled`],Ge={key:2,class:`mini-err`},B={key:3,class:`mini-err`},V={class:`lib-grid`},Ke=[`data-model-id`,`title`,`onDragstart`],qe={key:1,class:`model-img glb dev`},Je={class:`model-name`},Ye={class:`model-badge`},Xe={class:`card-actions`},Ze=[`disabled`,`onClick`],Qe={key:0,class:`lib-note`},$e={key:1,class:`lib-note`},et={key:0,class:`mini-msg`},tt=Object.assign(E(e({__name:`AssetLibrary`,setup(e){let{t}=se(),a=Me(),s=m(()=>a.models.filter(e=>e.kind===`dev`)),d=e=>/\.(glb|gltf)$/i.test(e);function f(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-model`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}let p=S(!1),h=S(``),_=S(null),y=S(!1),b=e=>{let t=e.target;C(t.files?.[0]??null)},ee=e=>{y.value=!1,C(e.dataTransfer?.files?.[0]??null)},C=e=>{if(e&&!/\.(glb|gltf|obj|fbx)$/i.test(e.name)){h.value=`仅支持 .glb/.gltf/.obj/.fbx 模型文件`;return}_.value=e,h.value=``},te=()=>{_.value=null};async function T(){let e=_.value;if(!e){h.value=t(`assetLibrary.kcjqcaw012`);return}p.value=!0,h.value=``;try{let n=await a.uploadDevice(e);_.value=null,h.value=t(`assetLibrary.k8nv3or016`,{p0:n.name})}catch(e){h.value=e instanceof Error?e.message:String(e)}finally{p.value=!1}}let E=S(``),D=S(``);async function O(e){E.value=e,D.value=``;try{await a.removeDevice(e),D.value=t(`assetLibrary.k8n918k013`)}catch(e){D.value=e instanceof Error?e.message:String(e)}finally{E.value=``}}return(e,t)=>(r(),g(`aside`,Pe,[w(`div`,Fe,[w(`span`,Ie,c(e.$t(`assetLibrary.k7la4x5001`)),1),w(`span`,Le,c(e.$t(`assetLibrary.kulif5b002`)),1)]),w(`div`,{class:i([`upload-box`,{drop:o(y)}]),onDragover:t[0]||=j(e=>y.value=!0,[`prevent`]),onDragleave:t[1]||=e=>y.value=!1,onDrop:j(ee,[`prevent`])},[w(`label`,Re,[w(`input`,{type:`file`,accept:`.glb,.gltf,.obj,.fbx`,class:`file-input`,onChange:b},null,32),w(`span`,ze,[t[2]||=w(`span`,{class:`i-tabler-plus upload-ico`},null,-1),u(` `+c(o(_)?.name||e.$t(`assetLibrary.k1iiort6010`)),1)])]),o(y)?(r(),g(`span`,Be,[t[3]||=w(`span`,{class:`i-tabler-download`},null,-1),u(` `+c(e.$t(`assetLibrary.k5hg6jq003`)),1)])):v(``,!0),o(_)?(r(),g(l,{key:1},[d(o(_).name)?(r(),x(z,{key:0,"local-file":o(_),height:92},null,8,[`local-file`])):(r(),g(`span`,Ve,c(o(_).name)+` (`+c(e.$t(`assetLibrary.k1xz5wvk009`)),1)),w(`div`,He,[w(`button`,{class:`upload-btn go`,disabled:o(p),onClick:T},c(o(p)?e.$t(`assetLibrary.k1ar7n8i005`):e.$t(`assetLibrary.k1hhga4h014`)),9,Ue),w(`button`,{class:`upload-btn`,disabled:o(p),onClick:te},c(e.$t(`assetLibrary.k3xdnn004`)),9,We)])],64)):o(p)?(r(),g(`span`,Ge,c(e.$t(`assetLibrary.k1ar7n8i005`)),1)):v(``,!0),o(h)&&!o(_)?(r(),g(`span`,B,c(o(h)),1)):v(``,!0)],34),w(`div`,V,[(r(!0),g(l,null,n(o(s),n=>(r(),g(`div`,{key:n.id,class:`model-card`,"data-model-id":n.id,draggable:`true`,title:n.hint||e.$t(`assetLibrary.katn7lo015`,{p0:n.name}),onDragstart:e=>f(e,n.id)},[d(n.file)?(r(),x(z,{key:0,file:n.file,height:76},null,8,[`file`])):(r(),g(`span`,qe,[...t[4]||=[w(`span`,{class:`i-tabler-cpu glb-cube`,"aria-hidden":`true`},null,-1)]])),w(`span`,Je,c(n.name),1),w(`span`,Ye,c(e.$t(`assetLibrary.k1n32zs0006`)),1),w(`div`,Xe,[n.file.includes(`/assets/game/devices/`)?(r(),g(`button`,{key:0,class:`card-btn danger`,disabled:o(E)===n.id,onClick:e=>O(n.id)},c(o(E)===n.id?`…`:e.$t(`assetLibrary.k498l011`)),9,Ze)):v(``,!0)])],40,Ke))),128)),o(a).loaded?o(s).length===0?(r(),g(`div`,$e,c(e.$t(`assetLibrary.k15527e1008`)),1)):v(``,!0):(r(),g(`div`,Qe,[t[5]||=w(`span`,{class:`loading-dot`},null,-1),u(` `+c(e.$t(`assetLibrary.k1kq2tmi007`)),1)]))]),o(D)?(r(),g(`span`,et,c(o(D)),1)):v(``,!0)]))}}),[[`__scopeId`,`data-v-c83e9503`]]),{__name:`WorkshopAssetLibrary`}),nt={class:`twin-panel`},H={class:`twin-head`},U={class:`twin-kicker`},rt={class:`twin-count`},it={key:0,class:`twin-error`},at={key:1,class:`twin-empty`},ot={key:2,class:`twin-empty`},st={class:`twin-empty-frame`},ct={class:`twin-empty-title`},lt={class:`twin-empty-sub`},ut={key:3,class:`twin-list`},dt=[`onClick`],ft={class:`twin-row`},pt={class:`twin-model-tag`},mt={class:`twin-idbar`},ht={class:`twin-name`},gt={class:`twin-code`},_t=[`disabled`,`title`,`onClick`],vt={key:0,class:`twin-tele`},yt={key:1,class:`twin-daq`},bt={key:2,class:`twin-dcw`},xt={class:`dcw-head`},St={key:0,class:`dcw-src`},W={class:`dcw-set`},Ct=[`title`],wt={key:0,class:`dcw-act-at`},Tt={class:`dcw-win`},Et=[`title`],Dt={class:`dcw-ctrl`},Ot=[`onUpdate:modelValue`,`step`,`min`,`max`,`placeholder`,`onKeydown`],kt=[`disabled`,`title`,`onClick`],At={key:1,class:`dcw-err`},jt={key:4,class:`twin-err`},Mt=Object.assign(E(e({__name:`DeviceTwinPanel`,props:{daqLive:{},dcwLive:{}},emits:[`focus-device`],setup(e){let{t:a}=se(),d=ke(),f=Ee(),p=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),m=null;ne(()=>{d.load(),m=ce(()=>void d.load(),2e3)}),t(()=>{m&&clearInterval(m)});let _=S(``),y=S(``),b=S(``),x=null;async function ee(e){if(b.value!==e.id){b.value=e.id,x&&clearTimeout(x),x=setTimeout(()=>{b.value=``},3e3);return}x&&clearTimeout(x),b.value=``,_.value=e.id,y.value=``;try{await d.remove(e.id)}catch(e){y.value=e instanceof Error?e.message:String(e)}finally{_.value=``}}let C={idle:`var(--hud-amber)`,running:`var(--hud-ok)`,alarm:`var(--hud-danger)`,offline:`var(--hud-dim)`},te={idle:`STANDBY`,running:`RUNNING`,alarm:`ALARM`,offline:`OFFLINE`},E=e=>e.replace(/[^A-Za-z0-9]/g,``).slice(0,4).toUpperCase()||`DEV`,D=e=>e.replace(/^dev-/,``).replace(/[^a-z0-9]/gi,``).slice(-6).toUpperCase(),O=e=>typeof e==`number`?(Math.round(e*100)/100).toString():String(e),k=e=>`${Number.isFinite(e.lo)?e.lo:`-∞`} ~ ${Number.isFinite(e.hi)?e.hi:`+∞`} ${e.unit}`,A=h({}),M=h({}),re=S(``);function ie(e){let t=A[e.id];if(t==null||t===``)return;let n=Number(t);if(n<e.lo||n>e.hi){M[e.id]=a(`deviceTwinPanel.kxddket010`,{p0:e.src===`recipe`?a(`deviceTwinPanel.kq2jssk008`):a(`deviceTwinPanel.k1iwj796009`),p1:k(e)});return}M[e.id]=``,re.value=e.id,f.write(e.id,n).then(t=>{t.ok||(M[e.id]=t.message)}).catch(t=>{M[e.id]=t instanceof Error?t.message:String(t)}).finally(()=>{re.value=``})}return(t,a)=>(r(),g(`aside`,nt,[w(`div`,H,[w(`span`,U,c(t.$t(`deviceTwinPanel.k7k6evr002`)),1),w(`span`,rt,c(o(d).twins.length),1)]),o(d).error?(r(),g(`div`,it,c(o(d).error),1)):v(``,!0),o(d).loaded?o(d).twins.length===0?(r(),g(`div`,ot,[w(`div`,st,[w(`div`,ct,c(t.$t(`deviceTwinPanel.k13y2qmg004`)),1),w(`div`,lt,c(t.$t(`deviceTwinPanel.kotf23l005`)),1)])])):(r(),g(`div`,ut,[(r(!0),g(l,null,n(o(d).twins,d=>(r(),g(`button`,{key:d.id,class:i([`twin-card`,{daq:p(d)}]),type:`button`,onClick:e=>t.$emit(`focus-device`,d)},[w(`div`,ft,[w(`span`,pt,c(E(d.modelRef||d.name)),1),w(`div`,mt,[w(`span`,ht,c(d.name),1),w(`span`,gt,c(p(d)?`DAQ`:D(d.id)),1)]),w(`button`,{class:i([`twin-del`,{armed:o(b)===d.id}]),disabled:o(_)===d.id,title:o(b)===d.id?`再次点击确认删除该设备实例`:`删除该设备实例`,onClick:j(e=>ee(d),[`stop`])},c(o(b)===d.id?t.$t(`deviceTwinPanel.k44653007`):`✕`),11,_t),w(`span`,{class:i([`twin-state`,`s-${d.state}`])},[w(`i`,{class:`twin-state-dot`,style:s({background:C[d.state]||`var(--hud-dim)`})},null,4),u(` `+c(te[d.state]||d.state),1)],2)]),Object.keys(d.telemetry).length?(r(),g(`div`,vt,[(r(!0),g(l,null,n(d.telemetry,(e,t)=>(r(),g(`span`,{key:t,class:`tele-item`},[w(`em`,null,c(t),1),w(`b`,null,c(O(e)),1)]))),128))])):v(``,!0),e.daqLive?.[d.id]?.length?(r(),g(`div`,yt,[(r(!0),g(l,null,n(e.daqLive[d.id],(e,t)=>(r(),g(`span`,{key:`${e.ch}-${t}`,class:i([`daq-item`,{alarm:e.alarm}])},[w(`em`,null,c(e.ch),1),w(`b`,null,[u(c(e.value),1),w(`i`,null,c(e.unit),1)])],2))),128))])):v(``,!0),e.dcwLive?.[d.id]?.length?(r(),g(`div`,bt,[(r(!0),g(l,null,n(e.dcwLive[d.id],e=>(r(),g(`div`,{key:e.id,class:`dcw-item`},[w(`div`,xt,[w(`em`,null,[u(c(e.ch),1),e.src===`recipe`?(r(),g(`i`,St,c(t.$t(`deviceTwinPanel.k48grv006`)),1)):v(``,!0)]),w(`b`,W,[u(c(e.value==null?`--`:e.value.toFixed(e.decimals)),1),w(`i`,null,c(e.unit),1)])]),e.readValue!=null||e.lastReadAt?(r(),g(`div`,{key:0,class:`dcw-act`,title:t.$t(`deviceTwinPanel.k9r7d4e030`)},[a[0]||=w(`em`,null,`ACT`,-1),w(`b`,null,[u(c(e.readValue==null?`--`:e.readValue.toFixed(e.decimals)),1),w(`i`,null,c(e.unit),1)]),e.lastReadAt?(r(),g(`i`,wt,c(e.lastReadAt.slice(11,19)),1)):v(``,!0)],8,Ct)):v(``,!0),w(`div`,Tt,[w(`span`,{title:e.src===`recipe`?`当前运行配方工艺窗口`:`节点全局量程`},c(k(e)),9,Et)]),w(`div`,Dt,[T(w(`input`,{"onUpdate:modelValue":t=>o(A)[e.id]=t,type:`number`,class:`ctrl-input`,step:10**-e.decimals,min:Number.isFinite(e.lo)?e.lo:void 0,max:Number.isFinite(e.hi)?e.hi:void 0,placeholder:`${Number.isFinite(e.lo)?e.lo:``} ~ ${Number.isFinite(e.hi)?e.hi:``}`,onKeydown:ae(t=>ie(e),[`enter`])},null,40,Ot),[[N,o(A)[e.id],void 0,{number:!0}]]),w(`button`,{class:`ctrl-btn dcw-send`,disabled:o(A)[e.id]==null||o(A)[e.id]===``||o(re)===e.id,title:t.$t(`deviceTwinPanel.k1j04u8001`),onClick:j(t=>ie(e),[`stop`])},c(o(re)===e.id?`···`:`SET`),9,kt)]),o(M)[e.id]?(r(),g(`small`,At,c(o(M)[e.id]),1)):v(``,!0)]))),128))])):v(``,!0)],10,dt))),128))])):(r(),g(`div`,at,c(t.$t(`deviceTwinPanel.kkw7sn5003`)),1)),o(y)?(r(),g(`span`,jt,c(o(y)),1)):v(``,!0)]))}}),[[`__scopeId`,`data-v-15ec18ea`]]),{__name:`WorkshopDeviceTwinPanel`}),Nt=`__sceneLayouts`;function Pt(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}function Ft(){let e=null,t=e=>new Promise(t=>setTimeout(t,e)),n=h({layouts:{},loaded:!1,loading:!1,error:``,rev:0,async load(){return e||=r().finally(()=>{e=null}),e},byChannel(e){return n.layouts[e]},async save(e,r){n.layouts[e]={channelId:e,x:r.x,z:r.z,radiusX:r.radiusX,radiusZ:r.radiusZ,shape:r.shape??`ellipse`,rotationY:r.rotationY??0,updatedAt:new Date().toISOString()},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:Pt(),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:Pt()}),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:Pt()});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=n instanceof Error?n.message:String(n),r<2&&await t(400*(r+1))}n.loaded=!1,n.error=e}finally{n.loading=!1}}return n}function It(){let e=globalThis;e[Nt]||(e[Nt]=Ft());let t=e[Nt];return t.load(),t}function Lt(e){return C()?(f(e),!0):!1}var Rt=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var zt=Object.prototype.toString,Bt=e=>zt.call(e)===`[object Object]`,Vt=()=>{};function Ht(...e){if(e.length!==1)return D(...e);let t=e[0];return typeof t==`function`?te(y(()=>({get:t,set:Vt}))):S(t)}function Ut(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}var Wt=e=>e();function Gt(e=Wt,t={}){let{initialState:n=`active`}=t,r=Ht(n===`active`);function i(){r.value=!1}function a(){r.value=!0}return{isActive:te(r),pause:i,resume:a,eventFilter:(...t)=>{r.value&&e(...t)}}}function Kt(e){return Array.isArray(e)?e:[e]}function qt(e){return e||O()}function Jt(e,t,n={}){let{eventFilter:r=Wt,...i}=n;return p(e,Ut(r,t),i)}function Yt(e,t,n={}){let{eventFilter:r,initialState:i=`active`,...a}=n,{eventFilter:o,pause:s,resume:c,isActive:l}=Gt(r,{initialState:i});return{stop:Jt(e,t,{...a,eventFilter:o}),pause:s,resume:c,isActive:l}}function Xt(e,t=!0,n){qt(n)?ne(e,n):t?e():a(e)}function G(e,t,n){return p(e,t,{...n,immediate:!0})}var Zt=Rt?window:void 0;Rt&&window.document,Rt&&window.navigator,Rt&&window.location;function Qt(e){let t=d(e);return t?.$el??t}function $t(...e){let t=[],n=()=>{t.forEach(e=>e()),t.length=0},r=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),i=m(()=>{let t=Kt(d(e[0])).filter(e=>e!=null);return t.every(e=>typeof e!=`string`)?t:void 0}),a=G(()=>[i.value?.map(e=>Qt(e))??[Zt].filter(e=>e!=null),Kt(d(i.value?e[1]:e[0])),Kt(o(i.value?e[2]:e[1])),d(i.value?e[3]:e[2])],([e,i,a,o])=>{if(n(),!e?.length||!i?.length||!a?.length)return;let s=Bt(o)?{...o}:o;t.push(...e.flatMap(e=>i.flatMap(t=>a.map(n=>r(e,t,n,s)))))},{flush:`post`});return Lt(n),()=>{a(),n()}}var K=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{},q=`__vueuse_ssr_handlers__`,en=tn();function tn(){return q in K||(K[q]=K[q]||{}),K[q]}function nn(e,t){return en[e]||t}function rn(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 an={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()}},on=`vueuse-storage`;function sn(e,t,n,r={}){let{flush:i=`pre`,deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:l=!1,shallow:u,window:f=Zt,eventFilter:h,onError:g=e=>{console.error(e)},initOnMounted:v}=r,y=(u?_:S)(typeof t==`function`?t():t),b=m(()=>d(e));if(!n)try{n=nn(`getDefaultStorage`,()=>Zt?.localStorage)()}catch(e){g(e)}if(!n)return y;let x=d(t),ee=rn(x),C=r.serializer??an[ee],{pause:w,resume:te}=Yt(y,e=>D(e),{flush:i,deep:o,eventFilter:h});p(b,()=>k(),{flush:i});let T=!1;f&&s&&(n instanceof Storage?$t(f,`storage`,e=>{v&&!T||k(e)},{passive:!0}):$t(f,on,e=>{v&&!T||A(e)})),v?Xt(()=>{T=!0,k()}):k();function E(e,t){if(f){let r={key:b.value,oldValue:e,newValue:t,storageArea:n};f.dispatchEvent(n instanceof Storage?new StorageEvent(`storage`,r):new CustomEvent(on,{detail:r}))}}function D(e){try{let t=n.getItem(b.value);if(e==null)E(t,null),n.removeItem(b.value);else{let r=C.write(e);t!==r&&(n.setItem(b.value,r),E(t,r))}}catch(e){g(e)}}function O(e){let t=e?e.newValue:n.getItem(b.value);if(t==null)return c&&x!=null&&n.setItem(b.value,C.write(x)),x;if(!e&&l){let e=C.read(t);return typeof l==`function`?l(e,x):ee===`object`&&!Array.isArray(e)?{...x,...e}:e}return typeof t==`string`?C.read(t):t}function k(e){if(!(e&&e.storageArea!==n)){if(e&&e.key==null){y.value=x;return}if(!(e&&e.key!==b.value)){w();try{let t=C.write(y.value);(e===void 0||e?.newValue!==t)&&(y.value=O(e))}catch(e){g(e)}finally{e?a(te):te()}}}}function A(e){k(e.detail)}return y}var cn={class:`town-view`},ln={class:`topnav`},un={class:`brand`},dn={class:`brand-sub`},fn=[`aria-label`],pn={class:`seg`},mn=[`disabled`,`title`],hn={class:`nav-right`},gn=[`title`],_n={class:`nav-chip mono`},vn=[`title`],yn={class:`avatar-fallback`},bn={class:`app`},xn={class:`rail rail-left`},Sn={class:`panel`},Cn={class:`panel-hd`},wn={class:`panel-tag`},Tn={class:`panel`},En={class:`panel-hd`},Dn={class:`panel-tag`},On={class:`daq-ctrl`},kn=[`title`],An=[`title`],jn=[`value`],Mn={class:`daq-list`},Nn=[`title`,`onClick`,`onKeydown`],Pn={class:`daq-ico`},Fn=[`innerHTML`],In={class:`daq-meta`},Ln={class:`daq-name`},Rn={class:`daq-code`},zn=[`title`,`onClick`],Bn={class:`daq-count`},Vn={key:0,class:`daq-children`},Hn=[`draggable`,`title`,`onDragstart`,`onClick`],Un={class:`daq-meta`},Wn={class:`daq-name`},Gn={class:`daq-node-sub`},Kn={class:`node-val mono`},qn={class:`node-dev`},Jn={key:0,class:`scene-cur`},Yn={key:0,class:`daq-empty-hint`},Xn={class:`panel`},Zn={class:`panel-hd`},Qn={class:`panel-tag`},$n={class:`daq-list`},er=[`title`,`onClick`,`onKeydown`],tr={class:`daq-ico`},nr=[`innerHTML`],rr={class:`daq-meta`},ir={class:`daq-name`},ar={class:`daq-code`},or=[`title`,`onClick`],sr={class:`daq-count`},cr={key:0,class:`daq-children`},lr=[`draggable`,`title`,`onDragstart`,`onClick`],ur={class:`daq-meta`},dr={class:`daq-name`},fr={class:`daq-node-sub`},pr={class:`node-val mono`},mr={class:`node-dev`},hr={key:0,class:`scene-cur`},gr={key:0,class:`daq-empty-hint`},_r={class:`panel`},vr={class:`panel-hd`},yr={class:`panel-tag`},br={class:`scene-list`},xr=[`draggable`,`data-channel-id`,`title`,`onDragstart`,`onClick`],Sr={class:`scene-meta-wrap`},Cr={class:`scene-name`},wr={class:`scene-meta`},Tr={key:0,class:`scene-cur`},Er={key:1,class:`scene-add`},Dr={key:0,class:`scene-hint`},Or={class:`stage-col`},kr={class:`stage-top`},Ar={class:`vp-title`},jr={class:`vp-id`},Mr={class:`vp-tools`},Nr=[`title`],Pr=[`title`],Fr=[`title`],Ir=[`title`],Lr={class:`angle-chip`},Rr=[`value`,`aria-label`],zr={value:`std`},Br={class:`leaders`},Vr=[`d`,`stroke`],Hr=[`cx`,`cy`,`fill`],Ur={class:`callout-layer`},Wr=[`title`,`onClick`],Gr={class:`co-label`},Kr={class:`co-val`},qr={class:`co-range`},Jr={class:`kpi-strip`},Yr={class:`kpi`},Xr={class:`kpi-meta`},Zr={class:`kpi-label`},Qr={class:`kpi-val`},$r={class:`kpi`},ei={class:`kpi-meta`},ti={class:`kpi-label`},ni={class:`kpi-val`},ri={class:`kpi`},ii={class:`kpi-meta`},ai={class:`kpi-label`},oi={class:`kpi-val`},si={class:`kpi`},ci={class:`kpi-meta`},li={class:`kpi-label`},ui={class:`kpi-val`},di={class:`kpi`},fi={class:`kpi-meta`},pi={class:`kpi-label`},mi={class:`kpi-val`},hi={key:1,class:`empty-hint`},gi=[`title`],_i={class:`bp-name`},vi={class:`bp-sub`},yi={class:`bp-tabs`},bi={class:`bp-row`},xi={class:`bp-label`},Si={class:`bp-seg`},Ci={class:`bp-row`},wi={class:`bp-label`},Ti={class:`bp-val`},Ei={class:`bp-row`},Di={class:`bp-label`},Oi={class:`bp-val`},ki={class:`bp-row`},Ai={class:`bp-label`},ji={class:`bp-val`},Mi={class:`bp-hint`},Ni={class:`member-list`},Pi={class:`member-info`},Fi={class:`member-name`},Ii=[`value`,`onChange`],Li=[`value`],Ri={key:0,class:`bp-hint`},zi={class:`bp-actions`},Bi={key:3,class:`drop-chip`},Vi={key:4,class:`error-chip`},Hi={key:5,"data-hud":`town-loading`,class:`loading-mask`},Ui={class:`loading-text`},Wi={class:`dock`},Gi={class:`dock-card`},Ki={class:`dock-hd`},qi={class:`dock-mode`},Ji={class:`ctl-sec`},Yi={class:`ctl-row`},Xi=[`title`],Zi={class:`fps-seg`},Qi=[`onClick`],$i={class:`ctl-row`},ea=[`title`],ta={class:`fps-seg`},na=[`onClick`],ra={class:`ctl-sec`},ia={class:`ctl-row`},aa={class:`ctl-name`},oa=[`value`],sa={class:`ctl-val`},ca={class:`ctl-row`},la={class:`ctl-name`},ua=[`value`],da={class:`ctl-val`},fa={class:`ctl-row`},pa={class:`ctl-name`},ma=[`value`],ha={class:`ctl-val`},ga={class:`ctl-row`},_a=[`title`],va=[`value`],ya={class:`ctl-val`},ba={class:`ctl-sec`},xa={class:`ctl-row`},Sa={class:`ctl-name`},Ca={class:`ctl-btns`},wa=[`disabled`,`title`],Ta={class:`dock-card`},Ea={class:`dock-hd`},Da={class:`dock-count mono`},Oa=[`onClick`],ka=[`title`],Aa={class:`trend-wrap`},ja={key:0,class:`trend-empty`},Ma={class:`rail rail-right`},Na={key:0,class:`panel inspector`},Pa={class:`panel-hd`},Fa=[`title`],Ia={class:`ins-chip-row`},La={class:`ins-chip mono`},Ra={key:0,class:`ins-chip accent`},za={key:1,class:`ins-chip accent`},Ba={key:0,class:`daq-info`},Va={class:`daq-info-row`},Ha={class:`cy`},Ua={class:`daq-info-row`},Wa={class:`daq-info-row`},Ga={class:`daq-bind-bar`},Ka=[`step`,`placeholder`],qa=[`disabled`],Ja={key:0,class:`dcw-err`},Ya={key:1,class:`daq-bind-bar`},Xa={value:``},Za=[`value`],Qa=[`disabled`],$a={key:1,class:`daq-info`},eo={class:`daq-info-row`},to={class:`cy`},no={class:`daq-info-row`},ro={class:`daq-info-row`},io={key:0,class:`daq-bind-bar`},ao={value:``},oo=[`value`],so=[`disabled`],co={key:1,class:`daq-node-ctl`},lo={class:`daq-info-row`},uo={class:`daq-th-inputs`},fo={class:`daq-info-row`},po={class:`daq-th-inputs`},mo=[`value`],ho=[`value`],go={class:`daq-info-row`},_o={class:`daq-th-inputs`},vo=[`value`],yo=[`value`],bo={class:`daq-info-row`},xo={class:`daq-info-row`},So=[`title`],Co={key:2,class:`ins-empty`},wo={class:`obj-row`},To={class:`obj-label`},Eo=[`placeholder`,`disabled`,`title`],Do={class:`obj-row`},Oo={class:`obj-label`},ko=[`value`,`disabled`],Ao=[`value`],jo={class:`sect-hd`},Mo={class:`bind-ico`},No=[`innerHTML`],Po={class:`bind-meta`},Fo={class:`bind-label`},Io={class:`bind-val`},Lo=[`title`,`onClick`],Ro={key:0,class:`ins-empty`},zo={key:1,class:`bind-add-wrap`},Bo={key:0,class:`bp-group`},Vo={class:`bp-tpl`},Ho=[`data-node-id`,`title`,`onClick`],Uo=[`innerHTML`],Wo={key:0,class:`bp-cur`},Go={key:1,class:`bp-cur`},Ko={key:0,class:`bp-empty`},qo={class:`sect-hd`},Jo={class:`dcw-top`},Yo={class:`bind-ico`},Xo=[`innerHTML`],Zo={class:`dcw-id`},Qo={class:`bind-label`},$o={key:0,class:`dcw-tag`},es={class:`dcw-name`},ts={class:`dcw-cur`},ns=[`title`,`onClick`],rs={class:`dcw-win-num`},is={class:`dcw-win-track`},as={class:`dcw-win-num`},os={class:`dcw-write`},ss=[`onUpdate:modelValue`,`step`,`placeholder`,`onKeydown`],cs=[`disabled`,`title`,`onClick`],ls={key:0,class:`dcw-err`},us={key:2,class:`ins-empty`},ds={key:3,class:`bind-add-wrap`},fs={key:0,class:`bp-group`},ps={class:`bp-tpl`},ms=[`data-node-id`,`title`,`onClick`],hs=[`innerHTML`],gs={key:0,class:`bp-cur`},_s={key:1,class:`bp-cur`},vs={key:0,class:`bp-empty`},ys={class:`xz-seg`},bs={class:`scale-row`},xs=[`value`],Ss={class:`scale-val`},Cs={class:`ins-foot`},ws={key:5,class:`ins-empty`},Ts={class:`chat-id-row`},Es={class:`chat-nameplate`},Ds={class:`chat-name`},Os={class:`chat-meta`},ks={key:0,class:`chat-harness`},As={class:`chat-count`},js={class:`obj-row`},Ms={class:`obj-label`},Ns=[`value`,`disabled`],Ps=[`value`],Fs={class:`obj-row`},Is={class:`obj-label`},Ls={class:`range-status`},Rs=[`title`],zs={class:`sect-hd`},Bs={class:`bind-meta`},Vs={class:`bind-label`},Hs=[`value`,`title`,`onChange`],Us={value:`auto`},Ws={value:`manual`},Gs=[`title`,`onClick`],Ks={key:0,class:`ins-empty`},qs={key:1,class:`daq-bind-bar`,style:{"margin-bottom":`8px`}},Js={value:`dcw`},Ys={value:`daq`},Xs={value:``},Zs=[`value`],Qs=[`value`],$s={value:`auto`},ec={value:`manual`},tc=[`disabled`],nc={class:`sect-hd`,style:{color:`var(--hud-amber)`}},rc={class:`approval-detail`},ic=[`onUpdate:modelValue`,`placeholder`],ac={class:`daq-bind-bar`,style:{"margin-top":`5px`}},oc=[`onClick`],sc=[`onClick`],cc={class:`obj-row`},lc={class:`obj-label`},uc={class:`bp-seg`},dc={class:`obj-row`},fc={class:`obj-label`},pc={class:`bp-val`},mc={class:`obj-row`},hc={class:`obj-label`},gc={class:`bp-val`},_c={key:4,class:`ins-empty`},vc={class:`sect-hd chat-sect`},yc=[`title`],bc={key:0,class:`rpg-note`},xc={class:`rpg-divider`},Sc={class:`rpg-time`},Cc={class:`rpg-bubble`},wc={class:`rpg-text`},Tc={key:2,class:`rpg-divider live`},Ec={class:`rpg-time`},Dc={class:`rpg-bubble`},Oc={class:`rpg-text`},kc={key:3,class:`rpg-typing`},Ac={class:`ty-label`},jc={key:4,class:`rpg-note`},Mc={class:`panel`},Nc={class:`panel-hd`},Pc={class:`health-body`},Fc={class:`donut-wrap`},Ic={class:`donut-center`},Lc={class:`health-legend`},Rc={class:`hl-row`},zc={class:`n`},Bc={class:`hl-row`},Vc={class:`n`},Hc={class:`hl-row`},Uc={class:`n`},Wc={class:`hl-row`},Gc={class:`n`},Kc={class:`panel`},qc={class:`panel-hd`},Jc={class:`panel-tag`},Yc={class:`panel`},Xc={class:`panel-hd`},Zc={class:`panel-tag`},Qc=[`title`],$c={class:`alarm-list`},el={class:`al-body`},tl={class:`al-txt`},nl={class:`al-src`},rl=[`onClick`],il={key:0,class:`rail-empty`},al={class:`panel`},ol={class:`panel-hd`},sl={class:`panel-tag`},cl={class:`event-list`},ll={class:`ev-time`},ul=[`title`],dl=[`title`],fl={key:0,class:`rail-empty`},pl={class:`panel`},ml={class:`panel-hd`},hl={class:`mm-body`},gl=[`title`],_l={class:`mm-col`},vl=[`title`],yl=[`title`],bl=[`title`],xl={class:`mm-meta mono`},Sl={class:`statusbar`},Cl={class:`sb-stats`},wl={class:`sb-lat mono`},Tl={class:`copy`},El={key:0,"data-hud":`town-loading`,class:`loading-mask`},Dl={class:`loading-text`},Ol=`aw-town-panel-pos`,kl=3200,Al=2400,jl=3e4,Ml=80,Nl=120,Pl=104,Fl=8,Il=1600,Ll=Object.assign(E(e({__name:`TownView`,props:{channelId:{},allChannels:{type:Boolean}},setup(e){let{t:d}=se(),f=e,y=Ce(),x=Se(),{conn:C}=we(),te=Te(),E=Me(),D=ke(),O=It(),fe=le(),pe=S(null),P=_(null),me=_(null),F=_(null),he=typeof window<`u`?new URLSearchParams(location.search).get(`render`)!==`2d`:!0,ge=S(!1),ve=S(0),ye=S(0),be=S(0),xe=S(null),I=S(null),L=S(``),Ae=m(()=>C.state===`connecting`),je=m(()=>y.channels[f.channelId]?.name??``),R=S(`browse`),Ne=S(!0),z=S(null),Pe=m(()=>{switch(z.value?.state){case`dirty`:return d(`townView.k3oo50k155`);case`saving`:return d(`townView.k1b38d59156`);case`saved`:return d(`townView.k3n51yk157`);case`error`:return d(`townView.k1b3ayhc158`);default:return``}});function Fe(){R.value=R.value===`browse`?`edit`:`browse`,F.value?.setMode(R.value),R.value===`browse`&&(Ge(),Ke(null)),U.value=!1}let Ie=S(`translate`);function Le(e){Ie.value=e,F.value?.setTransformMode(e)}p(()=>[I.value,R.value],([e,t])=>{t===`edit`&&e?.kind===`device`&&F.value?.setTransformMode(Ie.value)});function Re(e){let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`SELECT`||t.tagName===`TEXTAREA`||t.isContentEditable))return;let n=e.key.toLowerCase();if(e.key===`Escape`){Ge();return}R.value===`edit`&&I.value?.kind===`device`&&(n===`g`?Le(`translate`):n===`r`?Le(`rotate`):n===`s`?Le(`scale`):(e.key===`Delete`||e.key===`Backspace`)&&ft())}function ze(){Ne.value=!Ne.value,F.value?.setSnap(Ne.value)}function Be(e,t,n,r){let i=t||f.channelId;return i?fe.request({method:`PATCH`,url:`/workshop/channels/${i}/agents/${e}/position`,data:{x:n,z:r}}).catch(()=>null):Promise.resolve()}function Ve(e,t,n){let r=t||f.channelId;return r?fe.request({method:`PATCH`,url:`/workshop/channels/${r}/agents/${e}/range`,data:{range:n}}).catch(()=>null):Promise.resolve()}function He(){if(R.value!==`edit`){Nt();return}F.value?.persistAllDevices()}function Ue(e){I.value&&F.value?.setModelScale(I.value.id,e,I.value.kind)}function We(e){I.value&&F.value?.persistScale(I.value.kind,I.value.id)}function Ge(){I.value=null}let B=S(null),V=S(null);function Ke(e){B.value=e,V.value=e?F.value?.getChannelLayout(e)??null:null}async function qe(){if(!B.value||!V.value)return;let e=V.value,t={x:e.x,z:e.z,radiusX:e.radiusX,radiusZ:e.radiusZ,shape:e.shape??`ellipse`,rotationY:e.rotationY??0};try{await O.save(B.value,t),z.value={state:`saved`,at:Date.now()}}catch(e){z.value={state:`error`,at:Date.now()},L.value=e instanceof Error?e.message:String(e)}}async function Je(){if(B.value)try{await O.remove(B.value),F.value?.removeChannel(B.value),Ke(null)}catch(e){L.value=e instanceof Error?e.message:String(e)}}function Ye(){!B.value||!V.value||(F.value?.updateChannelLayout(B.value,V.value),z.value={state:`dirty`,at:Date.now()})}let Xe=S(``);function Ze(e){let t=F.value;if(t){if(e.placed){t.focusChannel(e.channelId),Ke(e.channelId);return}Xe.value=d(`townView.k7rvbts159`),window.setTimeout(()=>{Xe.value=``},2600)}}function Qe(e,t,n){let r=F.value;if(!r)return!1;let i=W().find(t=>t.channelId===e),a=i?.channelName??y.channels[e]?.name??e.slice(0,8),o=i?.agents.length??y.agents[e]?.length??0;return r.getChannelLayout(e)?(Xe.value=d(`townView.kcyn0191`,{p0:a}),window.setTimeout(()=>{Xe.value=``},2600),r.focusChannel(e),Ke(e),!1):(r.dropChannelOnWorld(t,n,e,a,o),O.save(e,{x:t,z:n,radiusX:Math.max(120,110+o*18),radiusZ:Math.max(80,70+o*14),shape:`ellipse`,rotationY:0}).then(()=>{z.value={state:`saved`,at:Date.now()}}).catch(()=>{z.value={state:`error`,at:Date.now()}}),r.focusChannel(e),!0)}let $e=m(()=>E.models.filter(e=>e.kind===`glb`)),et=m(()=>E.models.filter(e=>e.kind===`dev`)),nt=S(``),H=S(null),U=S(!1);p(()=>I.value,e=>{if(nt.value=e?.kind===`device`?F.value?.getDeviceName?.(e.id)??``:``,H.value=null,e?.kind===`agent`){let t=F.value?.getAgentRange?.(e.id);H.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null,U.value=F.value?.isRangeDrawing(e.id)??!1}else U.value=!1});let rt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return``;let t=F.value?.getAgentRange?.(e.id);return t?`${t.shape===`rect`?d(`townView.k43u0g050`):d(`townView.k414bc049`)} ${Math.round(t.radiusX)} × ${Math.round(t.radiusZ)}`:d(`townView.k1v1icf6160`)});function it(){let e=I.value;if(!(!e||e.kind!==`agent`)){if(U.value){F.value?.cancelRangeDraw(),U.value=!1;return}F.value?.startRangeDraw(e.id),U.value=!0}}function at(){!I.value||I.value.kind!==`agent`||!H.value||(F.value?.setAgentRangeScene(I.value.id,H.value),z.value={state:`dirty`,at:Date.now()})}function ot(){!I.value||I.value.kind!==`agent`||F.value?.commitAgentRange(I.value.id)}function st(){let e=I.value;!e||e.kind!==`agent`||(F.value?.clearAgentRange(e.id),H.value=null,U.value=!1)}function ct(){if(!I.value||I.value.kind!==`device`)return;let e=I.value.id,t=nt.value.trim();t&&(F.value?.renameDevice(e,t),D.update(e,{name:t}).catch(e=>{L.value=e instanceof Error?e.message:String(e)}))}async function lt(e){let t=I.value;if(!t||t.kind!==`agent`)return;let n=t.id,r=y.agents?Object.keys(y.agents).find(e=>(y.agents[e]??[]).some(e=>e.agentId===n)):void 0;if(!r){L.value=d(`townView.kpplr16161`);return}try{await E.bind(r,n,e),F.value?.swapAgentModel(n,e)}catch(e){L.value=e instanceof Error?e.message:String(e)}}async function ut(e){let t=I.value;if(!(!t||t.kind!==`device`)){F.value?.swapDeviceModel(t.id,e);try{await D.update(t.id,{modelRef:e})}catch(e){L.value=e instanceof Error?e.message:String(e)}}}let dt=S(``);function ft(){let e=I.value;if(!(!e||e.kind!==`device`)){if(dt.value!==e.id){dt.value=e.id,window.setTimeout(()=>{dt.value===e.id&&(dt.value=``)},3e3);return}dt.value=``,F.value?.removeDevice(e.id).then(()=>Ge()).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}}let pt=S(`boundary`),mt=m(()=>B.value?W().find(e=>e.channelId===B.value)?.agents??[]:[]);async function ht(e,t){if(B.value)try{await E.bind(B.value,e,t),F.value?.swapAgentModel(e,t)}catch(e){L.value=e instanceof Error?e.message:String(e)}}function gt(e){pt.value=e}let _t=S(0),vt=m(()=>(_t.value,yt().map(e=>({channelId:e,name:y.channels[e]?.name??e.slice(0,8),agentCount:(y.agents[e]??[]).length,placed:F.value?.hasChannel(e)??!1,color:xt(e)}))));function yt(){let e=[];for(let t of bt()??[])for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e.includes(f.channelId)||e.push(f.channelId),e}function bt(){return x.workspaces}function xt(e){return _e(e)}function St(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-channel`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}function W(){let e=[];for(let[t,n]of Object.entries(y.channels)){let r=(y.agents[t]??[]).map(e=>{let n=e.currentTaskId?(y.tasks[t]??[]).find(t=>t.id===e.currentTaskId):void 0;return{agentId:e.agentId,name:e.name,role:e.role,harness:e.harness,state:e.state,currentTaskId:e.currentTaskId??null,currentTaskTitle:n?.title??null,currentTaskProgress:e.currentTaskProgress??n?.progress??null,modelRef:e.modelRef??null,homeX:e.config?.homeX??null,homeZ:e.config?.homeZ??null,range:e.config?.range??null}});e.push({channelId:t,channelName:n.name,agents:r})}return e}function Ct(e){!e||!(`registerModelsFromList`in e)||(`screenToWorld`in e?e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name,kind:e.kind,hFactor:e.hFactor??1}))):e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name}))))}p(()=>E.models.map(e=>`${e.id}:${e.file}`).join(`|`),()=>Ct(P.value));async function wt(){P.value||!pe.value||(he?await Tt():await Et())}async function Tt(){let e=pe.value;if(!e)return;let[{TownScene3D:t}]=await Promise.all([oe(()=>import(`./BUcmySDa2.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)]),n=new t(W(),e);n.resolveTaskAssignee=e=>y.tasks[f.channelId]?.find(t=>t.id===e)?.assigneeId??null,n.devices={async create(e){return{id:(await D.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 D.update(e,t)},async remove(e){if(J.nodeById(e)){await J.removeNode(e);return}await D.remove(e)},async control(e,t,n){return D.control(e,t,n)}},n.agentApi={async updateHome(e,t,n,r){return Be(e,t,n,r)},async updateRange(e,t,n){return Ve(e,t,n)}},n.channelApi={async save(e,t){return O.save(e,t)}},P.value=n,Ct(n),F.value=n,n.setFpsCap(Number(pf.value)),n.setQualityMode(gf.value),Dt(n),n.on(`select`,e=>{I.value=e}),n.on(`saveState`,e=>{z.value=e}),n.on(`selectChannel`,e=>{Ke(e)}),n.on(`channelResized`,e=>{e&&B.value===e.channelId&&(V.value=e.layout)}),n.on(`agentRangeChanged`,e=>{if(e&&I.value?.kind===`agent`&&I.value.id===e.agentId){let t=F.value?.getAgentRange?.(e.agentId);H.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null}}),ge.value=!0,Ot(n),Bf=ql(n),O.load().then(()=>{n.hydrate(W(),Object.values(O.layouts),Wl.value),Rt()}).catch(e=>{L.value=d(`townView.k1hmf2ut192`,{p0:e instanceof Error?e.message:String(e)}),window.setTimeout(()=>{O.load()},2500)})}async function Et(){let e=pe.value;if(!e)return;let[t,{TownScene:n}]=await Promise.all([oe(()=>import(`./BGkumHZ32.js`),[],import.meta.url),oe(()=>import(`./RYFtK4qZ2.js`),__vite__mapDeps([4,5,1,2]),import.meta.url)]),r=new n(W());P.value=r,Ct(r),r.resolveTaskAssignee=e=>y.tasks[f.channelId]?.find(t=>t.id===e)?.assigneeId??null;let i=new t.Game({type:t.AUTO,parent:e.id||`town-host`,width:1100,height:700,backgroundColor:`#eceae4`,pixelArt:!0,antialias:!1,roundPixels:!0,powerPreference:`high-performance`,physics:{default:`arcade`,arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:t.Scale.FIT,autoCenter:t.Scale.CENTER_BOTH},scene:r});me.value=i,Dt(r),r.on(`ready`,()=>{ge.value=!0,Ot(r)})}function Dt(e){let t=e;t.on(`fps`,e=>{ve.value=e}),t.on(`agentCount`,e=>{ye.value=e}),t.on(`blockCount`,e=>{be.value=e,_t.value++}),t.on(`lastActivity`,e=>{xe.value=e});let n=te.subscribe(t=>{try{if(t.type===`channel.snapshot`){e.rebuild(W()),P.value&&Ft(P.value),f.channelId&&e.focusChannel(f.channelId);return}if(t.type===`device.updated`){D.applyRemote(t.payload),P.value&&Ft(P.value);return}if(t.type===`device.created`){D.load().then(()=>{P.value&&Ft(P.value)});return}if(t.type===`device.deleted`){D.removeRemote(t.payload.id),P.value&&Ft(P.value);return}if(t.type===`scene.layout.saved`||t.type===`scene.layout.removed`){O.load().then(()=>{Lt(P.value),Rt()});return}let n=de(t)?.bubble;n?.agentId&&rn(n.agentId,n.kind,n.text,t.at,t.seq),e.handleTownEvent(t)}catch(e){L.value=e instanceof Error?e.message:String(e)}});P._off=n,window.__town={get scene(){return P.value},get game(){return me.value},buildInput:W,get characterAssets(){return E}}}function Ot(e){if(`screenToWorld`in e){Pt(e);return}At(e)}let kt=[];function At(e){let t=e.game.canvas;if(!t)return;let n=(n,r)=>{let i=e.cameras.main,a=t.getBoundingClientRect(),o=(n-a.left)/a.width,s=(r-a.top)/a.height;return{x:i.worldView.x+o*i.worldView.width,y:i.worldView.y+s*i.worldView.height}},r=!1,i=0,a=0;t.addEventListener(`pointerdown`,e=>{e.button===0&&(r=!0,i=e.clientX,a=e.clientY)});let o=n=>{if(!r)return;let o=e.cameras.main,s=t.getBoundingClientRect(),c=e.game.scale.width/s.width,l=(n.clientX-i)*c/o.zoom,u=(n.clientY-a)*c/o.zoom;o.scrollX-=l,o.scrollY-=u,i=n.clientX,a=n.clientY},s=()=>{r=!1};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s),kt.push(()=>window.removeEventListener(`pointermove`,o)),kt.push(()=>window.removeEventListener(`pointerup`,s)),t.addEventListener(`wheel`,t=>{t.preventDefault();let n=e.cameras.main,r=n.zoom+(t.deltaY<0?.08:-.08);n.setZoom(Math.min(2.4,Math.max(.6,r)))},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let r=t.dataTransfer?.getData(`application/x-aw-model`)||t.dataTransfer?.getData(`text/plain`);if(!r)return;let i=n(t.clientX,t.clientY),a=e.dropModelOnWorld(i.x,i.y,r);qt.value=a})}let jt=null;function Nt(){L.value=d(`townView.kt6xb5p162`),jt&&clearTimeout(jt),jt=setTimeout(()=>{L.value=``},2600)}function Pt(e){let t=e.canvas;if(!t)return;let n=0,r=0,i=0;t.addEventListener(`contextmenu`,e=>e.preventDefault()),t.addEventListener(`mousedown`,e=>{e.button===1&&e.preventDefault()}),t.addEventListener(`pointerdown`,t=>{if(!e.isGizmoBusy?.()){if(t.button===1||t.button===2||t.shiftKey){t.preventDefault(),n=2,r=t.clientX,i=t.clientY;return}t.button===0&&(e.tryStartPointerDrag(t.clientX,t.clientY)||(n=1,r=t.clientX,i=t.clientY))}});let a=t=>{if(e.isGizmoBusy?.())return;if(e.isPointerDragging()){e.movePointerDrag(t.clientX,t.clientY);return}if(!n)return;let a=t.clientX-r,o=t.clientY-i;r=t.clientX,i=t.clientY,n===1?e.orbitBy(a,o):e.panByScreen(a,o)},o=()=>{if(e.isPointerDragging()){e.endPointerDrag();return}n=0};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o),kt.push(()=>window.removeEventListener(`pointermove`,a)),kt.push(()=>window.removeEventListener(`pointerup`,o)),t.addEventListener(`wheel`,t=>{t.preventDefault(),e.zoomBy(t.deltaY>0?.12:-.11)},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let n=t.dataTransfer;if(!n)return;if(R.value!==`edit`){Nt();return}let r=n.getData(`application/x-aw-channel`)||n.getData(`text/plain`);if(r&&vt.value.some(e=>e.channelId===r)){let n=e.screenToWorld(t.clientX,t.clientY);Qe(r,n.x,n.z);return}let i=n.getData(`application/x-aw-daq-node`);if(i){let n=J.nodeById(i);if(n){let r=e.screenToWorld(t.clientX,t.clientY);J.patchNode(i,{posX:Math.round(r.x),posZ:Math.round(r.z)}).then(()=>{if(!n.deviceBindingId){let e=Wu(r.x,r.z,95);e&&Bu(i,e.id)}}).catch(e=>{L.value=e instanceof Error?e.message:String(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=Wu(r.x,r.z,95);e&&Y.bindNode(a,e.id).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}P.value&&Ft(P.value)}).catch(e=>{L.value=e instanceof Error?e.message:String(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);qt.value=r}})}function Ft(e){`syncDevices`in e&&e.syncDevices(Wl.value)}p(()=>O.rev,e=>{let t=F.value;!t||!O.loaded||e===0||(t.hydrate(W(),Object.values(O.layouts),Wl.value),Rt())});function Lt(e){if(!e||!(`applySceneLayouts`in e))return;let t=e;t.applySceneLayouts(Object.values(O.layouts)),t.rebuild(W())}function Rt(){O.load().finally(()=>{})}function zt(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 Bt=h({});function Vt(){if(!(typeof localStorage>`u`))try{let e=JSON.parse(localStorage.getItem(Ol)||`{}`);for(let t of Object.keys(e))e[t]&&Number.isFinite(e[t].x)&&(Bt[t]=e[t])}catch{}}function Ht(){try{localStorage.setItem(Ol,JSON.stringify(Bt))}catch{}}let Ut=null;function Wt(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`,Bt[t]={x:a.left-o.left,y:a.top-o.top},Ut={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=Ut;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`,Bt[t]={x:s,y:c}},c=()=>{Ut=null,document.body.style.userSelect=``,document.body.style.cursor=``,window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),Ht()};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c)}Vt();let Gt=_(null),Kt=e=>`#${e.toString(16).padStart(6,`0`)}`,qt=_(null),Jt=m(()=>{let e=qt.value;return e?e.mode===`rebind`?d(`townView.kgz2nej193`,{p0:e.agentId?.slice(0,8)??d(`townView.k479op189`),p1:e.textureKey}):d(`townView.k5e2460194`,{p0:e.textureKey}):``}),Yt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return[];let t=nn.get(e.id);if(!t||t.length===0)return[];let n=K.value.length?K.value[K.value.length-1]?.at??0:0;return t.filter(e=>e.at>n)}),Xt=m(()=>!I.value||I.value.kind!==`agent`?``:F.value?.getAgentName?.(I.value.id)??d(`townView.k3xdvm125`)),G=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return null;for(let t of Object.values(y.agents)){let n=(t??[]).find(t=>t.agentId===e.id);if(n)return n}return null}),Zt=m(()=>G.value?.role===`lead`?`Leader`:`Worker`),Qt=m(()=>G.value?.role===`lead`?`LEADER`:`WORKER`),$t=m(()=>{let e=G.value?.state;return d(e===`busy`?`townView.k3n4l5f163`:e===`stopped`?`townView.k3n58d1164`:`townView.k3zcvb115`)}),K=S([]),q=S(!1),en=new Map,tn=S(null),nn=h(new Map);function rn(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=nn.get(e);o||(o=[],nn.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>Ml&&o.splice(0,o.length-Ml))}function an(){return typeof document>`u`?``:document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``}function on(e){for(let t of Object.keys(y.agents))if((y.agents[t]??[]).some(t=>t.agentId===e))return t}async function Ll(e,t,n=!1){let r=en.get(e);if(!n&&r&&Date.now()-r.at<jl){K.value=r.rows;return}q.value=!0;try{let n=an(),r=`/api/workshop/channels/${t}/events?limit=500&excludeTypes=agent.delta`,i=await(await fetch(r,{headers:n?{authorization:`Bearer ${decodeURIComponent(n)}`}:{}})).json().catch(()=>null),a=i?.data?.items??(Array.isArray(i?.data)?i.data:[]),o=[];for(let t of a){let n=de(t)?.bubble;if(!n||n.agentId!==e)continue;let r=t.at,i=typeof r==`number`?r:r?Date.parse(String(r)):0;o.push({id:`${String(t.seq??o.length)}-${o.length}`,agentId:n.agentId,text:n.text,kind:n.kind,at:i,live:!1})}o.sort((e,t)=>e.at-t.at),en.set(e,{rows:o,at:Date.now()}),K.value=o}catch{K.value=[]}finally{q.value=!1}}function Rl(){let e=I.value;if(!e||e.kind!==`agent`)return;let t=on(e.id);t&&Ll(e.id,t,!0)}p(()=>I.value,e=>{if(!e||e.kind!==`agent`){K.value=[];return}let t=on(e.id);t?Ll(e.id,t):K.value=[]},{immediate:!0});let zl=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return`#35e0a0`;let t=on(e.id);return t?_e(t)??`#35e0a0`:`#35e0a0`});function Bl(e){switch(e){case`artifact`:return d(`townView.k3w9q9165`);case`delta`:return`……`;case`info`:return d(`townView.k44xa7166`);case`error`:return d(`townView.k3zbgf167`);default:return``}}function Vl(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`)}`}p(()=>K.value.length+Yt.value.length,async()=>{await a();let e=tn.value;e&&(e.scrollTop=e.scrollHeight)});let Hl=e=>Y.lines.find(t=>t.id===e)?.color,Ul=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?Hl(e.lineId):void 0,updatedAt:e.lastWriteAt??e.createdAt}))),Wl=m(()=>[...D.twins.filter(e=>!uu(e)),...X.value,...Ul.value]),Gl=e=>Wl.value.find(t=>t.id===e),Kl=m(()=>ge.value&&be.value===0&&!Wl.value.some(e=>typeof e.posX==`number`&&typeof e.posZ==`number`));function ql(e){return ce(()=>{D.load().then(()=>{if(P.value===e){e.syncDevices(Wl.value);for(let t of e.getDeviceNodes()){let n=Gl(t.twinId);n&&e.updateDeviceNode(t.twinId,n.state,n.telemetry)}}})},5e3)}let Jl=_([]),J=Oe(),Y=Ee(),Yl=h(Y.templates.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));p(()=>Y.templates,e=>{e?.length&&Yl.splice(0,Yl.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let Xl=sn(`aw.twin.treeOpen`,{});function Zl(e){Xl.value[e]=!Xl.value[e]}let Ql=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}),$l=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 eu(e){try{let t=(Ql.value.get(e.id)?.length??0)+1;await J.createFromTemplate(`daq-${e.id}`,{name:`${e.name} ${String(t).padStart(2,`0`)}`}),Xl.value[`daq:${e.id}`]=!0}catch(e){L.value=e instanceof Error?e.message:String(e)}}async function tu(e){try{await Y.createFromTemplate(`dcw-${e.id}`,{}),Xl.value[`dcw:${e.id}`]=!0}catch(e){L.value=e instanceof Error?e.message:String(e)}}function nu(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 ru(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 iu(e){return!J.controller.running||!e.enabled||e.state===`offline`?`offline`:e.state===`alarm`?`alarm`:e.state===`warn`?`warn`:`running`}function au(e){return!e.enabled||e.state===`error`?`offline`:`running`}let ou=h(De.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));p(()=>J.templates,e=>{e?.length&&ou.splice(0,ou.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let su=e=>{let t=e.startsWith(`daq-`)?e.slice(4):e;return ou.find(e=>e.id===t)},cu=e=>su(e.templateRef);function lu(e){return!J.controller.running||!e.enabled?`offline`:e.state===`alarm`?`alarm`:`running`}let uu=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),X=m(()=>J.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`daq-${cu(e)?.id??`unknown`}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:lu(e),posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?Hl(e.lineId):void 0,updatedAt:e.lastAt??e.createdAt}))),du=S(0),fu=new Map,pu=new Map,mu=null,hu=!1;function gu(){hu||(hu=!0,requestAnimationFrame(()=>{hu=!1,du.value++}))}function _u(e){if(!e.nodeId||typeof e.value!=`number`||!Number.isFinite(e.value))return;let t=e.state??`ok`;fu.set(e.nodeId,{value:e.value,state:t,atMs:Date.parse(e.at??``)||Date.now()});let n=pu.get(e.nodeId);n||(n=[],pu.set(e.nodeId,n)),n.push(e.value),n.length>Nl&&n.shift();let r=bu.get(e.nodeId);r&&r!==t&&xu(e.nodeId,r,t,e.value),r!==t&&bu.set(e.nodeId,t),gu()}let vu=m(()=>{du.value;let e=new Map;for(let t of J.nodes){let n=cu(t);if(!n)continue;let r=fu.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:pu.get(t.id)??t.hist,phase:0,tpl:n,alarm:o===`alarm`})}return e}),yu=e=>e.value.toFixed(e.tpl.decimals),bu=new Map;function xu(e,t,n,r){let i=J.nodeById(e),a=i?cu(i):null,o=(i?.deviceBindingId?D.byId(i.deviceBindingId)?.name:null)??i?.name??e.slice(0,8),s=`${r?.toFixed(a?.decimals??2)??`--`} ${a?.unit??``}`;n===`alarm`?cf(d(`townView.k113fir9195`,{p0:o,p1:a?.ch??``,p2:s}),`crit`,o):n===`warn`?cf(d(`townView.k1knv89d196`,{p0:o,p1:a?.ch??``,p2:s}),`warn`,o):t!==`ok`&&n===`ok`&&cf(d(`townView.ksjancw197`,{p0:o,p1:a?.ch??``}),`info`,o)}p(()=>J.nodes.map(e=>`${e.id}:${e.state}`).join(`|`),()=>{for(let e of J.nodes){let t=bu.get(e.id);bu.set(e.id,e.state),!(!t||t===e.state)&&xu(e.id,t,e.state,e.value)}});function Su(e){return Math.max(0,Math.ceil((Date.parse(e.expiresAt)-Date.now())/1e3))}let Cu=()=>{let e=document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``;return{"content-type":`application/json`,authorization:`Bearer ${decodeURIComponent(e)}`}},wu=S([]),Tu=S(`dcw`),Eu=S(``),Du=S(`auto`),Ou=S([]),ku=h({}),Au=null;async function ju(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/bindings?agentId=${encodeURIComponent(e)}`,{headers:Cu()}).then(e=>e.json());wu.value=t.data?.bindings??[]}catch{}}async function Mu(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/approvals?agentId=${encodeURIComponent(e)}`,{headers:Cu()}).then(e=>e.json());Ou.value=t.data?.approvals??[]}catch{}}async function Nu(){!I.value?.id||!Eu.value||(await fetch(`/api/workshop/agent-tools/bindings`,{method:`POST`,headers:Cu(),body:JSON.stringify({agentId:I.value.id,nodeId:Eu.value,kind:Tu.value,mode:Du.value})}),Eu.value=``,await ju())}async function Pu(e){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`DELETE`,headers:Cu()}),await ju()}async function Fu(e,t){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`PATCH`,headers:Cu(),body:JSON.stringify({mode:t})}),await ju()}async function Iu(e,t){await fetch(`/api/workshop/agent-tools/approvals/${e}/decide`,{method:`POST`,headers:Cu(),body:JSON.stringify({approved:t,comment:ku[e]??``})}),Reflect.deleteProperty(ku,e),await Mu()}p(()=>I.value?.id,e=>{Au&&=(clearInterval(Au),null),I.value?.kind===`agent`&&e&&(ju(),Mu(),Au=ce(()=>{Mu()},1e3))},{immediate:!0}),t(()=>{Au&&clearInterval(Au)});function Lu(e){return e.kind===`dcw`?Y.nodeById(e.nodeId)?.name??e.nodeId:J.nodeById(e.nodeId)?.name??e.nodeId}let Ru=e=>J.nodeById(e)?.deviceBindingId??null,zu=e=>e?J.nodes.filter(t=>t.deviceBindingId===e).map(e=>e.id):[];function Bu(e,t){J.bindNode(e,t).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function Vu(e){J.bindNode(e,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let Hu={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"/>`},Uu=e=>Hu[e]??Hu.gateway;function Wu(e,t,n){let r=null,i=n;for(let n of D.twins){if(uu(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 Gu=S(!1),Ku=S(!1),qu=S(420);function Ju(e,t){let n=t.currentTarget,r=n?.closest(`.panel`);if(n&&r){let e=n.getBoundingClientRect().top-r.getBoundingClientRect().top-12;qu.value=Math.max(160,Math.round(e))}e===`daq`?Gu.value=!Gu.value:Ku.value=!Ku.value}let Yu=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of J.nodes){if(n.deviceBindingId===e)continue;let r=cu(n);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?D.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),Xu=m(()=>Object.values(Yu.value).reduce((e,t)=>e+t.length,0));function Zu(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Bu(e,t),Gu.value=!1)}let Qu=new Map;function $u(e,t){let n=t;n?Qu.set(e,n):Qu.delete(e)}function ed(){for(let[e,t]of Qu){let n=vu.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=Mf(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()}}p(()=>J.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.state}:${e.deviceBindingId??``}`).join(`|`),()=>{P.value&&Ft(P.value)}),p(()=>Y.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.deviceBindingId??``}:${e.value??``}`).join(`|`),()=>{P.value&&Ft(P.value)}),p(()=>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 td=m(()=>I.value?.kind===`device`&&(nd.value?.modelRef||``).startsWith(`daq-`)),nd=m(()=>I.value?.kind===`device`?Gl(I.value?.id)??null:null),rd=m(()=>{let e=I.value?.id;return e?vu.value.get(e)??null:null}),id=S(``),ad=m(()=>{let e=I.value?.id;return e?zu(e).map(e=>{let t=Gl(e),n=vu.value.get(e),r=n?.tpl??su(t?.modelRef??``);return{daqId:e,name:t?.name??e,ch:r?.ch??t(`townView.k1ef3cls168`),icon:r?.icon??`gateway`,value:n?yu(n):`--`,unit:n?.tpl.unit??r?.unit??``,color:Mf(e)}}):[]}),od=m(()=>{let e=I.value?.id;if(!e)return``;let t=Ru(e);return t?D.twins.find(e=>e.id===t)?.name??t.slice(0,8):``}),sd=e=>e?Y.nodes.filter(t=>t.deviceBindingId===e):[];function cd(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 ld=m(()=>{let e=I.value?.id;return e?sd(e).map(e=>{let t=e.templateRef.startsWith(`dcw-`)?e.templateRef.slice(4):e.templateRef,n=Y.templates.find(e=>e.key===t),r=cd(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 ud(e){let t=cd(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 fd=h({}),pd=h({});function md(e){let t=fd[e.id];if(t==null||t===``)return;let n=ud(e);if(Number(t)<n.lo||Number(t)>n.hi){pd[e.id]=d(`townView.kbuyve5198`,{p0:n.src===`recipe`?d(`townView.kb251ac190`):d(`townView.k1iwj796179`),p1:Number.isFinite(n.lo)?n.lo:`-∞`,p2:Number.isFinite(n.hi)?n.hi:`+∞`});return}pd[e.id]=``,Y.write(e.id,Number(t)).then(t=>{t.ok||(pd[e.id]=t.message)}).catch(t=>{pd[e.id]=t instanceof Error?t.message:String(t)})}let hd=e=>{let t=e.startsWith(`dcw-`)?e.slice(4):e;return Yl.find(e=>e.id===t)},gd=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of Y.nodes){if(n.deviceBindingId===e)continue;let r=hd(n.templateRef);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?D.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),_d=m(()=>Object.values(gd.value).reduce((e,t)=>e+t.length,0));function vd(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Y.bindNode(e,t).catch(e=>{L.value=e instanceof Error?e.message:String(e)}),Ku.value=!1)}function yd(e){Y.bindNode(e,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let bd=m(()=>I.value?.kind===`device`&&(Gl(I.value?.id)?.modelRef??``).startsWith(`dcw-`)),Z=m(()=>{let e=I.value?.id;return e?Y.nodeById(e)??null:null}),xd=m(()=>{let e=Z.value;return e?ud(e):null}),Sd=m(()=>{let e=Z.value;return e?.deviceBindingId?D.twins.find(t=>t.id===e.deviceBindingId)?.name??e.deviceBindingId.slice(0,8):``}),Cd=S(``);function wd(){let e=Z.value;!e||!Cd.value||(Y.bindNode(e.id,Cd.value).catch(e=>{L.value=e instanceof Error?e.message:String(e)}),Cd.value=``)}function Td(){let e=Z.value;e&&Y.bindNode(e.id,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function Ed(){let e=Z.value;e&&md(e)}function Dd(e){if(!e)return`--`;let t=ud(e);return`${Number.isFinite(t.lo)?t.lo:`-∞`} ~ ${Number.isFinite(t.hi)?t.hi:`+∞`} ${e.unit}`}function Od(e){if(!e)return``;let t=ud(e);return`${Number.isFinite(t.lo)?t.lo:``} ~ ${Number.isFinite(t.hi)?t.hi:``}`}let Q=m(()=>{let e=I.value?.id;return e?J.nodeById(e)??null:null}),kd=S(null);p(Q,e=>{kd.value=e?e.intervalMs??J.controller.defaultIntervalMs:null},{immediate:!0});function Ad(){let e=Q.value;!e||kd.value==null||J.patchNode(e.id,{intervalMs:Math.max(120,Math.min(6e4,Math.round(kd.value)))}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function jd(e,t){let n=Number(t);Number.isFinite(n)&&J.patchNode(Q.value.id,{[e]:(e.startsWith(`warn`),n)}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let Md=S(!0);function Nd(e){let t=Ru(e)??e,n=Gl(t);n&&(I.value={kind:`device`,id:t,scale:I.value?.scale??1,rotation:I.value?.rotation??0},nt.value=n.name)}let Pd=S(!1);function Fd(){Pd.value=!Pd.value,F.value?.setAutoOrbit(Pd.value)}function Id(){let e=F.value,t=I.value;if(e){if(!t){L.value=d(`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 Ld=S({}),Rd=sn(`aw.twin.calloutNear`,1150),zd=m(()=>{let e={};for(let t of X.value){let n=vu.value.get(t.id);if(!n)continue;let r={ch:n.tpl.ch,value:yu(n),unit:n.tpl.unit,alarm:n.alarm??!1};(e[t.id]??=[]).push(r);let i=Ru(t.id);i&&(e[i]??=[]).push(r)}return e}),Bd=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=ud(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}),Vd=S({pos:{x:0,y:0,z:0},target:{x:0,z:0},yaw:0,dolly:1}),Hd=m(()=>{if(!Md.value)return[];let e=F.value;if(!e)return[];let t=e.getDeviceNodes(),n=qd.value?.clientWidth??1600,r=[];for(let e of X.value){let n=vu.value.get(e.id);if(!n)continue;let i=Ru(e.id),a=i?t.find(e=>e.twinId===i):t.find(t=>t.twinId===e.id);if(!a)continue;let o=Ld.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(Vd.value.pos.x-t.anchor.x,Vd.value.pos.y-(i.get(t.anchor.twinId)??60),Vd.value.pos.z-t.anchor.z)<Rd.value,a=Math.min(n-96,Math.max(96,t.pos.x));e.forEach((e,n)=>{let{lo:i,hi:s}=yf(e.st.tpl.min,e.st.tpl.max);o.push({id:e.t.id,x:a,y:t.pos.y-n*Pl,label:`${e.st.tpl.ch} · ${e.anchor.name||e.t.name}`,value:yu(e.st),unit:e.st.tpl.unit,lo:i,hi:s,warn:e.st.alarm??!1,near:r,leader:n===0})})}return o}),Ud=null,Wd=m(()=>D.twins.length),Gd=m(()=>D.twins.filter(e=>e.state===`running`).length),Kd=ue(),qd=S(null),Jd=S(`std`);function Yd(e){Jd.value=e.target.value,F.value?.setViewPreset(Jd.value)}function Xd(){document.fullscreenElement?document.exitFullscreen():qd.value?.requestFullscreen?.()}let Zd=m(()=>D.twins.filter(e=>e.state===`idle`).length),Qd=m(()=>D.twins.filter(e=>e.state===`alarm`).length),$d=m(()=>D.twins.filter(e=>e.state===`offline`).length),ef=m(()=>{let e=D.twins.length;if(!e)return 100;let t=Gd.value+Zd.value;return Math.round(t/e*100)}),tf=m(()=>ef.value>=90?`#35e0a0`:ef.value>=60?`#f6c453`:`#ff6b6b`),nf=S(null);function rf(){let e=nf.value;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let n=D.twins.length||1,r=[{n:Gd.value,color:`#35e0a0`},{n:Zd.value,color:`#f6c453`},{n:Qd.value,color:`#ff6b6b`},{n:$d.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}}p(ef,()=>rf()),p(()=>D.twins.length,()=>rf()),ne(()=>rf());let af=S([]),of=0,sf=[d(`townView.k3ng94k170`),d(`townView.k3mi2n0171`),d(`townView.k3ncnxl172`)];function cf(e,t=`warn`,n=`SYSTEM`){let r=new Date,i=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,`0`)).join(`:`);af.value.unshift({id:++of,txt:e,src:n,time:i,state:0,level:t}),af.value.length>30&&af.value.pop()}let lf=m(()=>af.value.filter(e=>e.state<2).length);function uf(e){let t=af.value.find(t=>t.id===e);t&&(t.state=Math.min(2,t.state+1))}function df(){af.value=af.value.map(e=>({...e,state:2}))}let ff=S(100),pf=sn(`aw.twin.fpsCap`,`60`),mf=[{v:`60`,label:`60`},{v:`120`,label:`120`},{v:`0`,label:`∞`}];function hf(e){pf.value=e,F.value?.setFpsCap(Number(e))}let gf=sn(`aw.twin.quality`,`auto`),_f=[{v:`auto`,label:`townView.qualityAuto`},{v:`normal`,label:`townView.qualityNormal`},{v:`hd`,label:`townView.qualityHD`},{v:`ultra`,label:`townView.qualityUltra`}];function vf(e){gf.value=e,F.value?.setQualityMode(e)}function yf(e,t){let n=ff.value/100,r=(e+t)/2;return{lo:r-(r-e)*n,hi:r+(t-r)*n}}let bf=S(!1);function xf(){bf.value=!bf.value,cf(bf.value?d(`townView.kb157zk173`):d(`townView.k1s9qzr9174`),bf.value?`crit`:`info`,`SYSTEM`)}let Sf=S(1.12),Cf=S(1);function wf(e,t,n){return`${Math.min(100,Math.max(0,(e-t)/(n-t)*100)).toFixed(1)}%`}function Tf(e){Sf.value=Number(e.target.value)/100,F.value?.setExposure(Sf.value)}function Ef(e){Cf.value=Number(e.target.value)/100,F.value?.setTerritoryOpacity(Cf.value)}function Df(){F.value?.resetView(),Sf.value=1.12,Cf.value=1,F.value?.setExposure(1.12),F.value?.setTerritoryOpacity(1)}function Of(e){Af.value={...Af.value,[e]:!Af.value[e]}}let kf=S(null),Af=S({}),jf=[`#35e0a0`,`#41c8f4`,`#f6c453`,`#a78bfa`,`#ff6b6b`,`#4dd0e1`],Mf=e=>jf[Math.abs(e.split(``).reduce((e,t)=>e*31+t.charCodeAt(0),7))%jf.length]??`#35e0a0`;function Nf(e,t){let n=Af.value[e];return n==null?(t??X.value.findIndex(t=>t.id===e))<Fl:!n}let Pf=S(!1),Ff=m(()=>Math.max(X.value.length-Fl,0)),If=m(()=>Pf.value?X.value:X.value.slice(0,Fl));function Lf(){let e=kf.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(!Nf(e.id,t))return;let a=vu.value.get(e.id);if(!a)return;let o=pu.get(e.id)??a.hist;if(o.length<2)return;let s=a.tpl.min,c=a.tpl.max;i.strokeStyle=Mf(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 Rf=null,zf=null,Bf=null,Vf=null,Hf=S(null),Uf=m(()=>Math.min(5,Math.max(.4,Vd.value.dolly))),$=null;function Wf(e){let t=e.clientWidth||220,n=e.clientHeight||148;return{s:t/(Il*Uf.value),w:t,h:n}}function Gf(){let e=Hf.value,t=Gt.value,n=F.value;if(!e)return;let r=Math.min(window.devicePixelRatio||1,2),i=Wf(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:kl/2,c=o?o.target.z:Al/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(kl,Al);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*kl,n=e.y*Al;if(!f(t,n,400))continue;let r=d(t,n),o=Math.max(4,(e.rx??.03)*kl*i.s),s=Math.max(3,(e.rz??.03)*Al*i.s);a.strokeStyle=Kt(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=Kt(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*kl,r.y*Al),s=d(i.x*kl,i.y*Al);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*kl,e.y*Al));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=Kt(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*kl,e.y*Al));a.globalAlpha=t.edge?.35:1,a.fillStyle=Kt(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 Kf(e){F.value?.zoomBy(e.deltaY>0?.14:-.12)}function qf(e){$={lx:e.clientX,ly:e.clientY,moved:!1};try{e.target.setPointerCapture?.(e.pointerId)}catch{}}function Jf(e){let t=Hf.value,n=F.value;if(!$||!t||!n)return;let r=Wf(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 Yf(e){let t=Hf.value,n=F.value;if($&&!$.moved&&t&&n){let r=t.getBoundingClientRect(),i=Wf(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 Xf(){let e=P.value;e?.getMinimapState&&(Gt.value=e.getMinimapState()),Gf();let t=F.value;if(t&&(Vd.value=t.getCameraPose(),Md.value)){let e=t.getDeviceNodes(),n=qd.value?.getBoundingClientRect(),r={};for(let i of X.value){let a=Ru(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})}Ld.value=r}}function Zf(){if(document.hidden){Rf&&=(clearInterval(Rf),null),Vf&&=(clearInterval(Vf),null),zf&&=(clearInterval(zf),null);return}Rf||=ce(Xf,150),Vf||=ce(()=>{J.nodes.length&&(Lf(),ed())},200),zf||=ce(()=>{let e=P.value;e?.getRecentActivity&&(Jl.value=e.getRecentActivity())},400)}return ne(()=>{window.addEventListener(`keydown`,Re),document.addEventListener(`visibilitychange`,Zf),J.ensureWsFeed(),J.load(),mu=Te().subscribe(e=>{e.type===`daq.reading`&&_u(e.payload)}),Y.ensureWsFeed(),Y.load(),Rf=ce(Xf,150),Vf=ce(()=>{J.nodes.length&&(Lf(),ed())},200),zf=ce(()=>{let e=P.value;e?.getRecentActivity&&(Jl.value=e.getRecentActivity())},400)}),t(()=>{window.removeEventListener(`keydown`,Re);for(let e of kt)try{e()}catch{}kt.length=0,document.removeEventListener(`visibilitychange`,Zf),Rf&&clearInterval(Rf),Vf&&clearInterval(Vf),zf&&clearInterval(zf),Bf&&clearInterval(Bf),Ud&&clearInterval(Ud),Rf=null,Vf=null,zf=null,Bf=null,Ud=null}),ne(()=>{wt();let e=W();e.length>0&&P.value&&P.value.rebuild(e)}),t(()=>{mu?.();let e=P._off;e?.(),F.value?.dispose(),F.value=null,me.value?.destroy(!0),me.value=null,P.value=null}),(e,t)=>{let a=tt,d=Mt;return r(),g(`div`,cn,[w(`header`,ln,[w(`div`,un,[t[52]||=A(`<svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-ee250387><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-ee250387></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-ee250387></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-ee250387></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-ee250387></circle></svg>`,1),w(`div`,null,[t[51]||=w(`div`,{class:`brand-name`},[u(` DIGITAL `),w(`em`,null,`TWIN`)],-1),w(`div`,dn,` AGENTWORKSHOP · `+c(e.$t(`townView.klyi8yg127`)),1)])]),w(`nav`,{class:`nav-tabs`,"aria-label":e.$t(`townView.k1c9jyta001`)},[w(`div`,pn,[w(`button`,{class:i({on:o(R)===`browse`}),onClick:t[0]||=e=>o(R)===`edit`&&Fe()},c(e.$t(`townView.k48dwh027`)),3),w(`button`,{class:i({on:o(R)===`edit`}),onClick:t[1]||=e=>o(R)===`browse`&&Fe()},c(e.$t(`townView.k45eb0028`)),3)]),w(`button`,{class:`nav-action`,disabled:o(R)!==`edit`,title:o(R)===`edit`?`把全部设备的位置/朝向/缩放写入数据库`:`运行模式只读`,onClick:He},c(e.$t(`townView.k1b3bk8t029`)),9,mn),o(z)&&o(z).state!==`idle`?(r(),g(`span`,{key:0,class:i([`save-chip`,`s-${o(z).state}`])},c(o(Pe)),3)):v(``,!0)],8,fn),w(`div`,hn,[w(`span`,{class:i([`nav-chip mono`,{"nav-bell-warn":o(lf)>0}]),title:e.$t(`townView.k1fsi3ir002`)},`◉ `+c(o(lf)),11,gn),w(`span`,_n,c(o(ve))+` FPS`,1),w(`div`,{class:`avatar-chip`,title:e.$t(`townView.k1demf38003`)},[w(`div`,yn,c((o(Kd).user?.name??`OP`).slice(0,2).toUpperCase()),1),w(`span`,null,c(o(Kd).user?.name||e.$t(`townView.k1pub99m139`)),1)],8,vn)])]),w(`div`,bn,[w(`aside`,xn,[w(`section`,Sn,[w(`div`,Cn,[w(`h3`,null,c(e.$t(`townView.k1k75lzy030`)),1),w(`span`,wn,c(o(et).length),1)]),k(a,{class:`lib-embed`})]),w(`section`,Tn,[w(`div`,En,[w(`h3`,null,c(e.$t(`townView.k2gwyas031`)),1),w(`span`,Dn,c(o(X).length),1)]),w(`div`,On,[w(`button`,{class:i([`daq-ctl-btn`,{on:o(J).controller.running}]),title:o(J).controller.running?`暂停全部采集:停止所有启用节点的采样(节点级启停独立)`:`恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)`,onClick:t[2]||=e=>o(J).controllerAction(o(J).controller.running?`pause`:`resume`)},c(o(J).controller.running?e.$t(`townView.k3w3j8f140`):e.$t(`townView.k3n93ed175`)),11,kn),w(`label`,{class:`daq-ctl-cycle mono`,title:e.$t(`townView.khzlyf5004`)},[u(c(e.$t(`townView.k3xg3w032`))+` `,1),w(`input`,{type:`number`,min:`200`,max:`60000`,step:`100`,value:o(J).controller.defaultIntervalMs,onChange:t[3]||=e=>o(J).controllerAction(`config`,Number(e.target.value))},null,40,jn),t[53]||=u(`ms `,-1)],8,An)]),w(`div`,Mn,[(r(!0),g(l,null,n(o(ou),a=>(r(),g(`div`,{key:a.id,class:`daq-group`},[w(`div`,{class:i([`daq-card tpl`,{open:!!o(Xl)[`daq:${a.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:a.name,p1:a.ch,p2:a.min,p3:a.max,p4:a.unit}),onClick:e=>Zl(`daq:${a.id}`),onKeydown:ae(j(e=>Zl(`daq:${a.id}`),[`prevent`]),[`enter`])},[t[54]||=w(`span`,{class:`daq-caret`},`▶`,-1),w(`span`,Pn,[(r(),g(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(a.icon)},null,8,Fn))]),w(`div`,In,[w(`span`,Ln,c(a.name),1),w(`span`,Rn,c(a.code),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:a.name}),onClick:j(e=>eu(a),[`stop`])},` + `,8,zn)):v(``,!0),w(`span`,Bn,`×`+c(o(Ql).get(a.id)?.length??0),1)],42,Nn),o(Xl)[`daq:${a.id}`]?(r(),g(`div`,Vn,[(r(!0),g(l,null,n(o(Ql).get(a.id)??[],t=>(r(),g(`div`,{key:t.id,class:i([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:o(R)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>nu(e,t),onClick:e=>typeof t.posX==`number`&&zt({id:t.id,posX:t.posX,posZ:t.posZ})},[w(`span`,{class:i([`node-dot`,iu(t)])},null,2),w(`div`,Un,[w(`span`,Wn,c(t.name),1),w(`span`,Gn,[w(`span`,Kn,c(t.value==null?`--`:`${t.value.toFixed(a.decimals)} ${a.unit}`),1),w(`span`,qn,c(t.deviceBindingId?o(D).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(r(),g(`span`,Jn,`✓`)):v(``,!0)],42,Hn))),128)),o(Ql).get(a.id)?.length?v(``,!0):(r(),g(`div`,Yn,c(e.$t(`townView.k2tplxp0003`)),1))])):v(``,!0)]))),128))])]),w(`section`,Xn,[w(`div`,Zn,[w(`h3`,null,c(e.$t(`townView.km7ayhi033`)),1),w(`span`,Qn,c(o(Y).nodes.length),1)]),w(`div`,$n,[(r(!0),g(l,null,n(o(Yl),a=>(r(),g(`div`,{key:a.id,class:`daq-group`},[w(`div`,{class:i([`daq-card tpl`,{open:!!o(Xl)[`dcw:${a.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:a.name,p1:a.ch,p2:a.min,p3:a.max,p4:a.unit}),onClick:e=>Zl(`dcw:${a.id}`),onKeydown:ae(j(e=>Zl(`dcw:${a.id}`),[`prevent`]),[`enter`])},[t[55]||=w(`span`,{class:`daq-caret`},`▶`,-1),w(`span`,tr,[(r(),g(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(a.icon)},null,8,nr))]),w(`div`,rr,[w(`span`,ir,c(a.name),1),w(`span`,ar,c(a.code),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:a.name}),onClick:j(e=>tu(a),[`stop`])},` + `,8,or)):v(``,!0),w(`span`,sr,`×`+c(o($l).get(a.id)?.length??0),1)],42,er),o(Xl)[`dcw:${a.id}`]?(r(),g(`div`,cr,[(r(!0),g(l,null,n(o($l).get(a.id)??[],t=>(r(),g(`div`,{key:t.id,class:i([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:o(R)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>ru(e,t),onClick:e=>typeof t.posX==`number`&&zt({id:t.id,posX:t.posX,posZ:t.posZ})},[w(`span`,{class:i([`node-dot`,au(t)])},null,2),w(`div`,ur,[w(`span`,dr,c(t.name),1),w(`span`,fr,[w(`span`,pr,c(t.value==null?`--`:`${t.value.toFixed(a.decimals)} ${a.unit}`),1),w(`span`,mr,c(t.deviceBindingId?o(D).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(r(),g(`span`,hr,`✓`)):v(``,!0)],42,lr))),128)),o($l).get(a.id)?.length?v(``,!0):(r(),g(`div`,gr,c(e.$t(`townView.k2tplxp0003`)),1))])):v(``,!0)]))),128))])]),w(`section`,_r,[w(`div`,vr,[w(`h3`,null,c(e.$t(`townView.k1c9n911034`)),1),w(`span`,yr,c(o(vt).length),1)]),w(`div`,br,[(r(!0),g(l,null,n(o(vt),t=>(r(),g(`div`,{key:t.channelId,class:i([`scene-row`,{active:t.placed}]),draggable:!t.placed&&o(R)===`edit`,"data-channel-id":t.channelId,title:t.placed?`已在场景中,点击定位`:`拖拽到场景放置`,onDragstart:e=>t.placed?void 0:St(e,t.channelId),onClick:e=>Ze(t)},[w(`span`,{class:`scene-ico`,style:s({"--ch":t.color})},null,4),w(`div`,Sr,[w(`span`,Cr,c(t.name),1),w(`span`,wr,c(t.agentCount)+` `+c(e.$t(`townView.k1brss7t128`))+` `+c(t.placed?e.$t(`townView.k3n94g3141`):e.$t(`townView.k3os7i3176`)),1)]),t.placed?(r(),g(`span`,Tr,`✓`)):(r(),g(`span`,Er,`+`))],42,xr))),128)),o(Xe)?(r(),g(`div`,Dr,c(o(Xe)),1)):v(``,!0)])])]),w(`main`,Or,[w(`div`,{ref_key:`stageRef`,ref:qd,class:`stage`},[w(`div`,{id:`town-host`,ref_key:`hostRef`,ref:pe,class:`town-host`},null,512),t[71]||=w(`div`,{class:`stage-vignette`},null,-1),w(`div`,kr,[w(`div`,Ar,[w(`h2`,null,c(e.$t(`townView.k1b0z4vr035`)),1),w(`span`,jr,`CH · `+c(o(je)||e.$t(`townView.k3lkuz3142`)),1)]),w(`div`,Mr,[w(`button`,{class:`vp-tool`,title:e.$t(`townView.k18d6wnb005`),onClick:Id},[...t[56]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`12`,cy:`12`,r:`7`}),w(`path`,{d:`M12 2v4M12 18v4M2 12h4M18 12h4`})],-1)]],8,Nr),w(`button`,{class:i([`vp-tool`,{on:o(Pd)}]),title:e.$t(`townView.k1io51dn006`),onClick:Fd},[...t[57]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`12`,cy:`12`,r:`3.2`}),w(`path`,{d:`M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5`})],-1)]],10,Pr),w(`button`,{class:i([`vp-tool`,{on:o(Md)}]),title:e.$t(`townView.k1sgjlq8007`),onClick:t[4]||=e=>Md.value=!o(Md)},[...t[58]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 8h12l4 4-4 4H4z`}),w(`circle`,{cx:`8.5`,cy:`12`,r:`1.4`})],-1)]],10,Fr),w(`button`,{class:`vp-tool`,title:e.$t(`townView.k3wuf0008`),onClick:Xd},[...t[59]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})],-1)]],8,Ir)])]),w(`div`,Lr,[w(`select`,{value:o(Jd),"aria-label":e.$t(`townView.k1k4j5i7009`),onChange:t[5]||=e=>Yd(e)},[w(`option`,zr,c(e.$t(`townView.kv72860036`)),1),t[60]||=w(`option`,{value:`top`},` 俯视 · TOP `,-1),t[61]||=w(`option`,{value:`front`},` 前视 · FRONT `,-1),t[62]||=w(`option`,{value:`side`},` 侧视 · SIDE `,-1)],40,Rr)]),o(Md)?(r(),g(l,{key:0},[(r(),g(`svg`,Br,[(r(!0),g(l,null,n(o(Hd),e=>T((r(),g(`g`,{key:`ld-${e.id}`,class:i({near:e.near})},[w(`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,Vr),w(`circle`,{cx:e.x,cy:e.y,r:`2.6`,fill:e.warn?`#f6c453`:`#41c8f4`},null,8,Hr)],2)),[[re,e.leader]])),128))])),w(`div`,Ur,[(r(!0),g(l,null,n(o(Hd),n=>(r(),g(`div`,{key:n.id,class:i([`callout`,{warn:n.warn,near:n.near}]),style:s({left:n.x+`px`,top:n.y+`px`}),title:e.$t(`townView.k1ejxiwp010`),onClick:e=>Nd(n.id)},[w(`div`,Gr,[t[63]||=w(`span`,{class:`co-dot`},null,-1),u(c(n.label),1)]),w(`div`,Kr,[u(c(n.value),1),w(`small`,null,c(n.unit),1)]),w(`div`,qr,c(e.$t(`townView.k1faqmjb073`))+` `+c(n.lo.toFixed(Math.min(2,(String(n.lo).split(`.`)[1]??``).length+1)))+` – `+c(n.hi.toFixed(Math.min(2,(String(n.hi).split(`.`)[1]??``).length+1))),1)],14,Wr))),128))])],64)):v(``,!0),w(`div`,Jr,[w(`div`,Yr,[t[64]||=w(`span`,{class:`kpi-ico c1`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z`}),w(`path`,{d:`M4 8.5l8 4.5 8-4.5M12 13v7`})])],-1),w(`div`,Xr,[w(`div`,Zr,c(e.$t(`townView.k1k6xemt037`)),1),w(`div`,Qr,[u(c(o(Wd)),1),w(`small`,null,c(e.$t(`townView.k49lh038`)),1)])])]),w(`div`,$r,[t[65]||=w(`span`,{class:`kpi-ico c2`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`m5 12.5 4.5 4.5L19 7.5`})])],-1),w(`div`,ei,[w(`div`,ti,c(e.$t(`townView.k1l1a9t2039`)),1),w(`div`,ni,[u(c(o(Gd)),1),w(`small`,null,c(e.$t(`townView.k49lh038`)),1)])])]),w(`div`,ri,[t[66]||=w(`span`,{class:`kpi-ico c3`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3 22 20H2L12 3Z`}),w(`path`,{d:`M12 10v4M12 17v.2`})])],-1),w(`div`,ii,[w(`div`,ai,c(e.$t(`townView.k1fsi3ir002`)),1),w(`div`,oi,[u(c(o(lf)),1),w(`small`,null,c(e.$t(`townView.k4dfq040`)),1)])])]),w(`div`,si,[t[67]||=A(`<span class="kpi-ico c4" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M9.5 14.5 14.5 9.5" data-v-ee250387></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-ee250387></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-ee250387></path></svg></span>`,1),w(`div`,ci,[w(`div`,li,c(e.$t(`townView.k1emsai1041`)),1),w(`div`,ui,[u(c(o(X).length),1),w(`small`,null,c(e.$t(`townView.k4l1w042`)),1)])])]),w(`div`,di,[t[69]||=A(`<span class="kpi-ico c5" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M5 19a9 9 0 1 1 14 0" data-v-ee250387></path><path d="M12 13l3.5-3.5" data-v-ee250387></path><circle cx="12" cy="13" r="1.4" data-v-ee250387></circle></svg></span>`,1),w(`div`,fi,[w(`div`,pi,c(e.$t(`townView.kbrxdq1043`)),1),w(`div`,mi,[u(c(o(ef)),1),t[68]||=w(`small`,null,`%`,-1)])])])]),o(Kl)?(r(),g(`div`,hi,[w(`b`,null,c(e.$t(`townView.k3rwxjc044`)),1),w(`span`,null,c(e.$t(`townView.k1sa1eaj045`)),1)])):v(``,!0),o(B)&&o(V)?(r(),g(`div`,{key:2,class:`boundary-panel drag-panel`,style:s(o(Bt).boundary?{left:o(Bt).boundary.x+`px`,top:o(Bt).boundary.y+`px`,bottom:`auto`,transform:`none`}:void 0)},[w(`div`,{class:`bp-title drag-grip`,title:e.$t(`townView.k1d0rl5z011`),onPointerdown:t[8]||=e=>Wt(e,`boundary`)},[w(`span`,_i,c(o(y).channels[o(B)]?.name??o(B).slice(0,8)),1),w(`span`,vi,c(e.$t(`townView.k1mehlxs046`)),1),w(`div`,yi,[w(`button`,{class:i([`bp-tab`,{on:o(pt)===`boundary`}]),onClick:t[6]||=e=>gt(`boundary`)},c(e.$t(`townView.k489ka047`)),3),w(`button`,{class:i([`bp-tab`,{on:o(pt)===`members`}]),onClick:t[7]||=e=>gt(`members`)},c(e.$t(`townView.k3ztf1129`))+` `+c(o(mt).length),3)])],40,gi),o(pt)===`boundary`?(r(),g(l,{key:0},[w(`div`,bi,[w(`span`,xi,c(e.$t(`townView.k3zhy5048`)),1),w(`div`,Si,[w(`button`,{class:i([`seg-btn`,{on:o(V).shape===`ellipse`}]),onClick:t[9]||=e=>{o(V).shape=`ellipse`,Ye()}},c(e.$t(`townView.k414bc049`)),3),w(`button`,{class:i([`seg-btn`,{on:o(V).shape===`rect`}]),onClick:t[10]||=e=>{o(V).shape=`rect`,Ye()}},c(e.$t(`townView.k43u0g050`)),3)])]),w(`div`,Ci,[w(`span`,wi,c(e.$t(`townView.k1fbz4s1051`)),1),T(w(`input`,{"onUpdate:modelValue":t[11]||=e=>o(V).radiusX=e,class:`bp-range`,type:`range`,min:`80`,max:`4000`,step:`8`,style:s({"--fill":wf(o(V).radiusX,80,4e3)}),onChange:Ye},null,36),[[N,o(V).radiusX,void 0,{number:!0}]]),w(`span`,Ti,c(Math.round(o(V).radiusX)),1)]),w(`div`,Ei,[w(`span`,Di,c(e.$t(`townView.k1ighwgs052`)),1),T(w(`input`,{"onUpdate:modelValue":t[12]||=e=>o(V).radiusZ=e,class:`bp-range`,type:`range`,min:`60`,max:`4000`,step:`8`,style:s({"--fill":wf(o(V).radiusZ,60,4e3)}),onChange:Ye},null,36),[[N,o(V).radiusZ,void 0,{number:!0}]]),w(`span`,Oi,c(Math.round(o(V).radiusZ)),1)]),w(`div`,ki,[w(`span`,Ai,c(e.$t(`townView.k40qab053`)),1),T(w(`input`,{"onUpdate:modelValue":t[13]||=e=>o(V).rotationY=e,class:`bp-range`,type:`range`,min:`0`,max:`360`,step:`5`,style:s({"--fill":wf(o(V).rotationY??0,0,360)}),onChange:Ye},null,36),[[N,o(V).rotationY,void 0,{number:!0}]]),w(`span`,ji,c(Math.round(o(V).rotationY??0))+`°`,1)])],64)):(r(),g(l,{key:1},[w(`div`,Mi,c(e.$t(`townView.kimxls2054`)),1),w(`div`,Ni,[(r(!0),g(l,null,n(o(mt),e=>(r(),g(`div`,{key:e.agentId,class:`member-row`},[w(`span`,{class:`member-ava`,style:s({color:xt(o(B))})},c(e.name.charAt(0).toUpperCase()),5),w(`div`,Pi,[w(`span`,Fi,c(e.name),1),w(`span`,{class:i([`member-role`,e.role===`lead`?`r-lead`:`r-worker`])},c(e.role===`lead`?`Leader`:`Worker`),3)]),w(`select`,{class:`member-select`,value:(e.modelRef??``)||`hero-3d`,onChange:t=>ht(e.agentId,t.target.value)},[(r(!0),g(l,null,n(o($e),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Li))),128))],40,Ii)]))),128)),o(mt).length===0?(r(),g(`div`,Ri,c(e.$t(`townView.k419rbs055`)),1)):v(``,!0)])],64)),w(`div`,zi,[o(pt)===`boundary`?(r(),g(`button`,{key:0,class:`bp-btn save`,onClick:qe},c(e.$t(`townView.k1b3kp8f056`)),1)):v(``,!0),w(`button`,{class:`bp-btn danger`,onClick:Je},c(e.$t(`townView.k1hs45qg057`)),1),w(`button`,{class:`bp-btn`,onClick:t[14]||=e=>Ke(null)},c(e.$t(`townView.k3x62t058`)),1)])],4)):v(``,!0),o(Jt)?(r(),g(`div`,Bi,c(o(Jt)),1)):v(``,!0),o(L)?(r(),g(`div`,Vi,c(o(L)),1)):v(``,!0),o(ge)?v(``,!0):(r(),g(`div`,Hi,[t[70]||=w(`div`,{class:`loading-spinner`},null,-1),w(`span`,Ui,c(e.$t(`townView.kvjdqfg059`)),1)]))],512),w(`div`,Wi,[w(`section`,Gi,[w(`div`,Ki,[w(`h3`,null,c(e.$t(`townView.k1c9iq23060`)),1),w(`span`,qi,c(o(R)===`edit`?e.$t(`townView.k1iipfcs143`):e.$t(`townView.k1l147w1177`)),1)]),w(`p`,Ji,c(e.$t(`townView.secRender`)),1),w(`div`,Yi,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.qualityTip`)},c(e.$t(`townView.qualityLabel`)),9,Xi),w(`div`,Zi,[(r(),g(l,null,n(_f,t=>w(`button`,{key:t.v,class:i({on:o(gf)===t.v}),onClick:e=>vf(t.v)},c(e.$t(t.label)),11,Qi)),64))]),t[72]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`div`,$i,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.fpsCapTip`)},c(e.$t(`townView.fpsCapLabel`)),9,ea),w(`div`,ta,[(r(),g(l,null,n(mf,e=>w(`button`,{key:e.v,class:i({on:o(pf)===e.v}),onClick:t=>hf(e.v)},c(e.label),11,na)),64))]),t[73]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`p`,ra,c(e.$t(`townView.secEnv`)),1),w(`div`,ia,[w(`span`,aa,c(e.$t(`townView.k1gizopz061`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`30`,max:`220`,value:Math.round(o(Sf)*100),style:s({"--fill":wf(Math.round(o(Sf)*100),30,220)}),onInput:t[15]||=e=>Tf(e)},null,44,oa),w(`span`,sa,c(Math.round(o(Sf)*100))+`%`,1)]),w(`div`,ca,[w(`span`,la,c(e.$t(`townView.k1bcpqto062`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`10`,max:`100`,value:Math.round(o(Cf)*100),style:s({"--fill":wf(Math.round(o(Cf)*100),10,100)}),onInput:t[16]||=e=>Ef(e)},null,44,ua),w(`span`,da,c(Math.round(o(Cf)*100))+`%`,1)]),w(`div`,fa,[w(`span`,pa,c(e.$t(`townView.k1bztha1063`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`60`,max:`120`,value:o(ff),style:s({"--fill":wf(o(ff),60,120)}),onInput:t[17]||=e=>ff.value=Number(e.target.value)},null,44,ma),w(`span`,ha,c(o(ff))+`%`,1)]),w(`div`,ga,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.kz71l1f012`)},c(e.$t(`townView.ka4i1s9064`)),9,_a),w(`input`,{class:`ctl-range`,type:`range`,min:`0`,max:`3000`,step:`50`,value:o(Rd),style:s({"--fill":wf(o(Rd),0,3e3)}),onInput:t[18]||=e=>Rd.value=Number(e.target.value)},null,44,va),w(`span`,ya,c(o(Rd)===0?e.$t(`townView.k493s144`):`${o(Rd)}`),1)]),w(`p`,ba,c(e.$t(`townView.secOps`)),1),w(`div`,xa,[w(`span`,Sa,c(e.$t(`townView.k1idc6pa065`)),1),w(`button`,{class:i([`snap-toggle`,{on:o(Ne)}]),onClick:ze},c(o(Ne)?e.$t(`townView.k4bs5145`):e.$t(`townView.k493s144`)),3),t[74]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`div`,Ca,[w(`button`,{class:`btn btn-primary`,onClick:Df},c(e.$t(`townView.k1lap9bs024`)),1),w(`button`,{class:`btn btn-ghost`,disabled:o(R)!==`edit`,title:o(R)===`edit`?e.$t(`townView.ksavetip181`):e.$t(`townView.krotip182`),onClick:He},c(e.$t(`townView.k1b3bk8t029`)),9,wa),w(`button`,{class:i([`btn btn-danger`,{armed:o(bf)}]),onClick:xf},c(e.$t(`townView.k1i046wf066`)),3)])]),w(`section`,Ta,[w(`div`,Ea,[w(`h3`,null,c(e.$t(`townView.k1kfoef9067`)),1),w(`span`,Da,c(o(X).length),1),w(`div`,{class:i([`trend-legend`,{expanded:o(Pf)}])},[(r(!0),g(l,null,n(o(If),e=>(r(),g(`button`,{key:e.id,class:i([`lg-chip`,{off:!Nf(e.id)}]),onClick:t=>Of(e.id)},[w(`span`,{class:`lg-dot`,style:s({background:Mf(e.id)})},null,4),u(c(e.name),1)],10,Oa))),128)),o(Ff)>0?(r(),g(`button`,{key:0,class:`lg-chip lg-more mono`,title:o(Pf)?e.$t(`townView.trendCollapse`):e.$t(`townView.trendExpandAll`,{p0:o(X).length}),onClick:t[19]||=e=>Pf.value=!o(Pf)},c(o(Pf)?e.$t(`townView.trendCollapse`):`+${o(Ff)}`),9,ka)):v(``,!0)],2)]),w(`div`,Aa,[w(`canvas`,{ref_key:`trendCanvas`,ref:kf,class:`trend-cv`},null,512),o(X).length?v(``,!0):(r(),g(`span`,ja,c(e.$t(`townView.k1uht2uv068`)),1))])])])]),w(`aside`,Ma,[k(ie,{name:`ins`},{default:ee(()=>[o(I)?(r(),g(`section`,Na,[w(`div`,Pa,[w(`h3`,null,c(o(I).kind===`device`?o(bd)?e.$t(`townView.k1ekqxlt146`):o(td)?e.$t(`townView.k1empnnb178`):e.$t(`townView.k1k6wg8j185`):o(Zt)),1),w(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bsckft013`),onClick:Ge},` ✕ `,8,Fa)]),w(`div`,Ia,[w(`span`,La,c(o(I).id.slice(0,8)),1),o(I).kind===`device`&&o(td)?(r(),g(`span`,Ra,`DAQ`)):o(I).kind===`device`&&o(bd)?(r(),g(`span`,za,`DCW`)):v(``,!0)]),o(I).kind===`device`?(r(),g(l,{key:0},[o(bd)?(r(),g(`div`,Ba,[w(`div`,Va,[w(`span`,null,c(e.$t(`townView.k1deqh0d069`)),1),w(`b`,Ha,c(o(Z)?.value==null?`--`:o(Z).value.toFixed(o(Z).decimals))+` `+c(o(Z)?.unit),1)]),w(`div`,Ua,[w(`span`,null,c(o(xd)?.src===`recipe`?e.$t(`townView.kq2jssk147`):e.$t(`townView.k1iwj796179`)),1),w(`b`,{class:i({amber:o(xd)?.src===`recipe`})},c(Dd(o(Z))),3)]),w(`div`,Wa,[w(`span`,null,c(e.$t(`townView.k1i8rtqt070`)),1),w(`b`,null,c(o(Sd)||e.$t(`townView.k3own4q148`)),1)]),w(`div`,Ga,[T(w(`input`,{"onUpdate:modelValue":t[20]||=e=>o(fd)[o(I).id]=e,type:`number`,class:`bind-select`,step:10**-(o(Z)?.decimals??2),placeholder:Od(o(Z)),onKeydown:ae(Ed,[`enter`])},null,40,Ka),[[N,o(fd)[o(I).id],void 0,{number:!0}]]),w(`button`,{class:`bind-add-btn`,disabled:o(fd)[o(I).id]==null||o(fd)[o(I).id]===``,onClick:Ed},c(e.$t(`townView.kwrbtn180`)),9,qa)]),o(pd)[o(I).id]?(r(),g(`p`,Ja,c(o(pd)[o(I).id]),1)):v(``,!0),o(R)===`edit`?(r(),g(`div`,Ya,[T(w(`select`,{"onUpdate:modelValue":t[21]||=e=>b(Cd)?Cd.value=e:null,class:`bind-select`},[w(`option`,Xa,c(e.$t(`townView.kjo6ekr071`)),1),(r(!0),g(l,null,n(o(D).twins.filter(e=>!uu(e)&&e.id!==(o(I)?.id??``)),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Za))),128))],512),[[M,o(Cd)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(Sd)&&!o(Cd),onClick:t[22]||=e=>o(Sd)?Td():wd()},c(o(Sd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,Qa)])):v(``,!0)])):o(td)?(r(),g(`div`,$a,[w(`div`,eo,[w(`span`,null,c(e.$t(`townView.k3mv305072`)),1),w(`b`,to,c(o(rd)?yu(o(rd)):`--`)+` `+c(o(rd)?.tpl.unit),1)]),w(`div`,no,[w(`span`,null,c(e.$t(`townView.k1faqmjb073`)),1),w(`b`,null,c(o(rd)?.tpl.min)+` ~ `+c(o(rd)?.tpl.max),1)]),w(`div`,ro,[w(`span`,null,c(e.$t(`townView.k1i8rtqt070`)),1),w(`b`,null,c(o(od)||e.$t(`townView.k3own4q148`)),1)]),o(R)===`edit`?(r(),g(`div`,io,[T(w(`select`,{"onUpdate:modelValue":t[23]||=e=>b(id)?id.value=e:null,class:`bind-select`},[w(`option`,ao,c(e.$t(`townView.kjo6ekr071`)),1),(r(!0),g(l,null,n(o(D).twins.filter(e=>!uu(e)&&e.id!==(o(I)?.id??``)),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,oo))),128))],512),[[M,o(id)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(od)&&!o(id),onClick:t[24]||=e=>{o(od)?Vu(o(I).id):Bu(o(I).id,o(id)),id.value=``}},c(o(od)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,so)])):v(``,!0),o(R)===`edit`&&o(Q)?(r(),g(`div`,co,[w(`div`,lo,[w(`span`,null,c(e.$t(`townView.k1l6g2ga074`)),1),w(`span`,uo,[T(w(`input`,{"onUpdate:modelValue":t[25]||=e=>b(kd)?kd.value=e:null,type:`number`,min:`200`,max:`60000`,step:`100`,class:`daq-num`,onChange:Ad},null,544),[[N,o(kd),void 0,{number:!0}]]),w(`small`,null,c(e.$t(`townView.k1or92b075`)),1)])]),w(`div`,fo,[w(`span`,null,c(e.$t(`townView.k3x5tpx076`)),1),w(`span`,po,[w(`input`,{value:o(Q).warnLow,type:`number`,step:`any`,class:`daq-num`,onChange:t[26]||=e=>jd(`warnLow`,e.target.value)},null,40,mo),t[75]||=u(` ~ `,-1),w(`input`,{value:o(Q).warnHigh,type:`number`,step:`any`,class:`daq-num`,onChange:t[27]||=e=>jd(`warnHigh`,e.target.value)},null,40,ho)])]),w(`div`,go,[w(`span`,null,c(e.$t(`townView.k1hjj0jf077`)),1),w(`span`,_o,[w(`input`,{value:o(Q).min,type:`number`,step:`any`,class:`daq-num`,onChange:t[28]||=e=>jd(`min`,e.target.value)},null,40,vo),t[76]||=u(` ~ `,-1),w(`input`,{value:o(Q).max,type:`number`,step:`any`,class:`daq-num`,onChange:t[29]||=e=>jd(`max`,e.target.value)},null,40,yo)])]),w(`div`,bo,[w(`span`,null,c(e.$t(`townView.k48tki078`)),1),w(`button`,{class:i([`bind-add-btn`,{warn:o(Q).enabled}]),onClick:t[30]||=e=>o(J).patchNode(o(I).id,{enabled:!o(Q).enabled})},c(o(Q).enabled?e.$t(`townView.k1wv0nyo150`):e.$t(`townView.kh1586b180`)),3)]),w(`div`,xo,[w(`span`,null,c(e.$t(`townView.k3xakp079`)),1),w(`button`,{class:`bind-add-btn danger`,title:e.$t(`townView.kpwutri014`),onClick:t[31]||=e=>ft()},c(e.$t(`townView.k1bpp30k080`)),9,So)])])):(r(),g(`div`,Co,c(e.$t(`townView.kzk5dfx081`)),1))])):(r(),g(l,{key:2},[w(`div`,wo,[w(`span`,To,c(e.$t(`townView.k3xhia082`)),1),T(w(`input`,{"onUpdate:modelValue":t[32]||=e=>b(nt)?nt.value=e:null,class:`obj-input`,placeholder:e.$t(`townView.k1k6vbaf015`),disabled:o(R)!==`edit`,title:o(R)===`edit`?`设备名称`:`运行模式只读`,onChange:ct,onKeydown:ae(ct,[`enter`])},null,40,Eo),[[N,o(nt)]])]),w(`div`,Do,[w(`span`,Oo,c(e.$t(`townView.k41amp083`)),1),w(`select`,{class:`obj-select`,value:o(F)?.getDeviceModelRef?.(o(I).id)??``,disabled:o(R)!==`edit`,onChange:t[33]||=e=>ut(e.target.value)},[(r(!0),g(l,null,n(o(et),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Ao))),128))],40,ko)]),w(`div`,jo,c(e.$t(`townView.k1vtyk05130`))+` `+c(o(ad).length)+` `+c(e.$t(`townView.k3vfpz5138`)),1),(r(!0),g(l,null,n(o(ad),t=>(r(),g(`div`,{key:t.daqId,class:`bind-row`},[w(`span`,Mo,[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.icon)},null,8,No))]),w(`span`,Po,[w(`span`,Fo,c(t.ch),1),w(`span`,Io,[w(`b`,null,c(t.value),1),u(` `+c(t.unit)+` · `+c(t.name),1)])]),w(`canvas`,{ref_for:!0,ref:e=>$u(t.daqId,e),class:`bind-spark`,width:`56`,height:`20`},null,512),o(R)===`edit`?(r(),g(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Vu(t.daqId)},` ✕ `,8,Lo)):v(``,!0)]))),128)),o(ad).length?v(``,!0):(r(),g(`div`,Ro,c(e.$t(`townView.kgpuqhb084`)),1)),o(R)===`edit`?(r(),g(`div`,zo,[w(`button`,{class:`bind-add`,onClick:t[34]||=e=>Ju(`daq`,e)},c(e.$t(`townView.kvm0lin085`)),1),o(Gu)?(r(),g(`div`,{key:0,class:`bind-pop`,style:s({maxHeight:`${o(qu)}px`})},[(r(!0),g(l,null,n(o(ou),t=>(r(),g(l,{key:t.id},[o(Yu)[t.id]?.length?(r(),g(`div`,Bo,[w(`span`,Vo,c(t.name)+` · `+c(t.ch),1),(r(!0),g(l,null,n(o(Yu)[t.id],t=>(r(),g(`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=>Zu(t.id)},[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.tpl.icon)},null,8,Uo)),w(`span`,null,[u(c(t.name),1),t.devName?(r(),g(`i`,Wo,`→ `+c(t.devName),1)):t.placed?v(``,!0):(r(),g(`i`,Go,c(e.$t(`townView.k2bindr0009`)),1))])],8,Ho))),128))])):v(``,!0)],64))),128)),o(Xu)?v(``,!0):(r(),g(`div`,Ko,c(e.$t(`townView.k2bindr0010`)),1))],4)):v(``,!0)])):v(``,!0),w(`div`,qo,c(e.$t(`townView.ktzir2t131`))+` `+c(o(ld).length)+` `+c(e.$t(`townView.k4l1w042`)),1),(r(!0),g(l,null,n(o(ld),t=>(r(),g(`div`,{key:t.dcwId,class:`dcw-row`},[w(`div`,Jo,[w(`span`,Yo,[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.icon)},null,8,Xo))]),w(`span`,Zo,[w(`span`,Qo,[u(c(t.ch),1),t.rMin!=null||t.rMax!=null?(r(),g(`i`,$o,c(e.$t(`townView.k48grv086`)),1)):v(``,!0)]),w(`span`,es,c(t.name),1)]),w(`span`,ts,[w(`b`,null,c(t.value==null?`--`:t.value.toFixed(t.decimals)),1),w(`i`,null,c(t.unit),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>yd(t.dcwId)},` ✕ `,8,ns)):v(``,!0)]),w(`div`,{class:i([`dcw-win`,{recipe:t.rMin!=null||t.rMax!=null}])},[w(`em`,null,c(t.rMin!=null||t.rMax!=null?e.$t(`townView.k1l3m0hx151`):e.$t(`townView.k1bc6rqf181`)),1),w(`span`,rs,c(t.rMin??`-∞`),1),w(`span`,is,[w(`i`,{style:s({left:`${dd(t)}%`})},null,4)]),w(`span`,as,c(t.rMax??`+∞`),1)],2),w(`div`,os,[T(w(`input`,{"onUpdate:modelValue":e=>o(fd)[t.dcwId]=e,type:`number`,step:10**-t.decimals,placeholder:`${t.rMin??t.gMin} ~ ${t.rMax??t.gMax}`,onKeydown:ae(e=>md(o(Y).nodeById(t.dcwId)),[`enter`])},null,40,ss),[[N,o(fd)[t.dcwId],void 0,{number:!0}]]),w(`button`,{class:`dcw-send`,disabled:o(fd)[t.dcwId]==null||o(fd)[t.dcwId]===``,title:e.$t(`townView.k15t7izc017`),onClick:e=>md(o(Y).nodeById(t.dcwId))},` write `,8,cs)]),o(pd)[t.dcwId]?(r(),g(`small`,ls,c(o(pd)[t.dcwId]),1)):v(``,!0)]))),128)),o(ld).length?v(``,!0):(r(),g(`div`,us,c(e.$t(`townView.k10smf24087`)),1)),o(R)===`edit`?(r(),g(`div`,ds,[w(`button`,{class:`bind-add`,onClick:t[35]||=e=>Ju(`dcw`,e)},c(e.$t(`townView.kvk1vh5088`)),1),o(Ku)?(r(),g(`div`,{key:0,class:`bind-pop`,style:s({maxHeight:`${o(qu)}px`})},[(r(!0),g(l,null,n(o(Yl),t=>(r(),g(l,{key:t.id},[o(gd)[t.id]?.length?(r(),g(`div`,fs,[w(`span`,ps,c(t.name)+` · `+c(t.ch),1),(r(!0),g(l,null,n(o(gd)[t.id],t=>(r(),g(`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=>vd(t.id)},[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.tpl.icon)},null,8,hs)),w(`span`,null,[u(c(t.name),1),t.devName?(r(),g(`i`,gs,`→ `+c(t.devName),1)):t.placed?v(``,!0):(r(),g(`i`,_s,c(e.$t(`townView.k2bindr0009`)),1))])],8,ms))),128))])):v(``,!0)],64))),128)),o(_d)?v(``,!0):(r(),g(`div`,vs,c(e.$t(`townView.k2bindr0010`)),1))],4)):v(``,!0)])):v(``,!0),o(R)===`edit`?(r(),g(l,{key:4},[t[79]||=w(`div`,{class:`sect-hd`},` 变换 · BLENDER `,-1),w(`div`,ys,[w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`translate`}]),onClick:t[36]||=e=>Le(`translate`)},c(e.$t(`townView.k1hg3167089`)),3),w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`rotate`}]),onClick:t[37]||=e=>Le(`rotate`)},c(e.$t(`townView.k1enlg7i090`)),3),w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`scale`}]),onClick:t[38]||=e=>Le(`scale`)},c(e.$t(`townView.k1ibjg3j091`)),3)]),w(`div`,bs,[t[77]||=w(`span`,{class:`scale-min`},`0.2×`,-1),w(`input`,{class:`scale-range`,type:`range`,min:`0.2`,max:`5`,step:`0.05`,value:o(I).scale,onInput:t[39]||=e=>Ue(Number(e.target.value)),onChange:t[40]||=e=>We(Number(e.target.value))},null,40,xs),t[78]||=w(`span`,{class:`scale-max`},`5×`,-1)]),w(`div`,Ss,c(Math.round(o(I).scale*100))+`% `,1),w(`div`,Cs,[w(`button`,{class:i([`btn btn-danger ins-del`,{armed:o(dt)===o(I).id}]),onClick:ft},c(o(dt)===o(I).id?e.$t(`townView.k1w10xa5152`):e.$t(`townView.k121kfef182`)),3)])],64)):(r(),g(`div`,ws,c(e.$t(`townView.kt0i3y2092`)),1))],64))],64)):o(I).kind===`agent`?(r(),g(l,{key:1},[w(`div`,Ts,[w(`span`,{class:`chat-badge`,style:s({"--p-acc":o(zl)})},c(o(Xt).slice(0,1).toUpperCase()),5),w(`div`,Es,[w(`span`,Ds,c(o(Xt)),1),w(`span`,Os,[w(`span`,{class:i([`chat-role`,o(G)?.role===`lead`?`r-lead`:`r-worker`])},c(o(Qt)),3),w(`span`,{class:i([`chat-state`,`s-${o(G)?.state??`idle`}`])},c(o($t)),3),o(G)?.harness?(r(),g(`span`,ks,c(o(G).harness.toUpperCase()),1)):v(``,!0),w(`span`,As,c(o(K).length+o(Yt).length)+` `+c(e.$t(`townView.k4dfq040`)),1)])])]),w(`div`,js,[w(`span`,Ms,c(e.$t(`townView.k41amp083`)),1),w(`select`,{class:`obj-select`,value:(o(F)?.getAgentModel?.(o(I).id)??``)||`hero-3d`,disabled:o(R)!==`edit`,onChange:t[41]||=e=>lt(e.target.value)},[(r(!0),g(l,null,n(o($e),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Ps))),128))],40,Ns)]),t[83]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,Fs,[w(`span`,Is,c(e.$t(`townView.k1fix3hb093`)),1),w(`span`,Ls,c(o(rt)),1),o(R)===`edit`?(r(),g(`button`,{key:0,class:i([`obj-mini`,{on:o(U)}]),title:e.$t(`townView.k13enoy3018`),onClick:it},c(o(U)?e.$t(`townView.k3slzhc153`):e.$t(`townView.k1f1xmci183`)),11,Rs)):v(``,!0)]),t[84]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,zs,c(e.$t(`townView.k1p7nru2094`)),1),(r(!0),g(l,null,n(o(wu),t=>(r(),g(`div`,{key:t.id,class:`bind-row`},[w(`span`,{class:i([`ins-chip`,t.kind===`dcw`?`accent`:``]),style:{flex:`none`}},c(t.kind===`dcw`?e.$t(`townView.k40ifw097`):e.$t(`townView.k40rjw098`)),3),w(`span`,Bs,[w(`span`,Vs,c(Lu(t)),1),w(`select`,{class:`bind-select`,style:{"margin-top":`3px`},value:t.mode,title:e.$t(`townView.khqvwix019`),onChange:e=>Fu(t.id,e.target.value)},[w(`option`,Us,c(e.$t(`townView.k1io1ylm095`)),1),w(`option`,Ws,c(e.$t(`townView.k1duyr8q096`)),1)],40,Hs)]),w(`button`,{class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Pu(t.id)},` ✕ `,8,Gs)]))),128)),o(wu).length?v(``,!0):(r(),g(`div`,Ks,` 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 `)),o(R)===`edit`?(r(),g(`div`,qs,[T(w(`select`,{"onUpdate:modelValue":t[42]||=e=>b(Tu)?Tu.value=e:null,class:`bind-select`,style:{flex:`none`,width:`62px`}},[w(`option`,Js,c(e.$t(`townView.k40ifw097`)),1),w(`option`,Ys,c(e.$t(`townView.k40rjw098`)),1)],512),[[M,o(Tu)]]),T(w(`select`,{"onUpdate:modelValue":t[43]||=e=>b(Eu)?Eu.value=e:null,class:`bind-select`},[w(`option`,Xs,c(e.$t(`townView.kurjldk099`)),1),o(Tu)===`dcw`?(r(!0),g(l,{key:0},n(o(Y).nodes,e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Zs))),128)):(r(!0),g(l,{key:1},n(o(J).nodes,e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Qs))),128))],512),[[M,o(Eu)]]),T(w(`select`,{"onUpdate:modelValue":t[44]||=e=>b(Du)?Du.value=e:null,class:`bind-select`,style:{flex:`none`,width:`76px`}},[w(`option`,$s,c(e.$t(`townView.k45kpj100`)),1),w(`option`,ec,c(e.$t(`townView.k3zul4101`)),1)],512),[[M,o(Du)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(Eu),onClick:Nu},c(e.$t(`townView.k452a8102`)),9,tc)])):v(``,!0),o(Ou).length?(r(),g(l,{key:2},[w(`div`,nc,c(e.$t(`townView.k1gk2jg7132`))+` `+c(o(Ou).length),1),(r(!0),g(l,null,n(o(Ou),t=>(r(),g(`div`,{key:t.id,class:`approval-card`},[w(`div`,rc,c(t.detail),1),w(`div`,{class:i([`approval-ttl`,{urgent:Su(t)<=30}])},` ⏱ `+c(Su(t))+`s `+c(e.$t(`townView.hitlAutoReject`)),3),T(w(`input`,{"onUpdate:modelValue":e=>o(ku)[t.id]=e,class:`dcw-write input-inline`,style:{width:`100%`,"margin-top":`5px`},placeholder:e.$t(`townView.keztqrn020`)},null,8,ic),[[N,o(ku)[t.id]]]),w(`div`,ac,[w(`button`,{class:`bind-add-btn`,onClick:e=>Iu(t.id,!0)},c(e.$t(`townView.kslcozu103`)),9,oc),w(`button`,{class:`bind-add-btn danger`,onClick:e=>Iu(t.id,!1)},c(e.$t(`townView.k14gu3rd104`)),9,sc)])]))),128))],64)):v(``,!0),o(H)&&o(R)===`edit`?(r(),g(l,{key:3},[w(`div`,cc,[w(`span`,lc,c(e.$t(`townView.k3zhy5048`)),1),w(`div`,uc,[w(`button`,{class:i([`seg-btn`,{on:o(H).shape===`ellipse`}]),onClick:t[45]||=e=>{o(H).shape=`ellipse`,at()}},c(e.$t(`townView.k414bc049`)),3),w(`button`,{class:i([`seg-btn`,{on:o(H).shape===`rect`}]),onClick:t[46]||=e=>{o(H).shape=`rect`,at()}},c(e.$t(`townView.k43u0g050`)),3)])]),w(`div`,dc,[w(`span`,fc,c(e.$t(`townView.k41lwj105`)),1),T(w(`input`,{"onUpdate:modelValue":t[47]||=e=>o(H).radiusX=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[N,o(H).radiusX,void 0,{number:!0}]]),w(`span`,pc,c(Math.round(o(H).radiusX)),1)]),w(`div`,mc,[w(`span`,hc,c(e.$t(`townView.k45bta106`)),1),T(w(`input`,{"onUpdate:modelValue":t[48]||=e=>o(H).radiusZ=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[N,o(H).radiusZ,void 0,{number:!0}]]),w(`span`,gc,c(Math.round(o(H).radiusZ)),1)]),w(`button`,{class:`obj-mini danger`,onClick:st},c(e.$t(`townView.k1w45mzc107`)),1)],64)):(r(),g(`div`,_c,c(e.$t(`townView.k14s8urm108`)),1)),t[85]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,vc,[u(c(e.$t(`townView.k1ghjbfc133`))+` `+c(o(Xt))+` `,1),w(`button`,{class:`mini-btn chat-refresh`,title:e.$t(`townView.k15avt7g021`),onClick:Rl},c(o(q)?`…`:`↻`),9,yc)]),w(`div`,{ref_key:`chatScroll`,ref:tn,class:`rpg-lines chat-embed`},[o(q)?(r(),g(`div`,bc,c(e.$t(`townView.kkhlx5h109`)),1)):v(``,!0),o(K).length?(r(),g(l,{key:1},[w(`div`,xc,c(e.$t(`townView.k768cnt134`))+` `+c(o(K).length),1),(r(!0),g(l,null,n(o(K),e=>(r(),g(`div`,{key:e.id,class:`rpg-line hist`},[w(`span`,Sc,c(Vl(e.at)),1),w(`div`,Cc,[Bl(e.kind)?(r(),g(`span`,{key:0,class:i([`rpg-kind`,`k-${e.kind}`])},c(Bl(e.kind)),3)):v(``,!0),w(`span`,wc,c(e.text),1)])]))),128))],64)):v(``,!0),o(Yt).length?(r(),g(`div`,Tc,c(e.$t(`townView.k1cwz73k135`))+` `+c(o(Yt).length),1)):v(``,!0),(r(!0),g(l,null,n(o(Yt),e=>(r(),g(`div`,{key:e.id,class:`rpg-line live`},[w(`span`,Ec,c(Vl(e.at)),1),w(`div`,Dc,[w(`span`,Oc,c(e.text),1)])]))),128)),o(G)?.state===`busy`?(r(),g(`div`,kc,[t[80]||=w(`span`,{class:`ty-dot`},null,-1),t[81]||=w(`span`,{class:`ty-dot`},null,-1),t[82]||=w(`span`,{class:`ty-dot`},null,-1),w(`span`,Ac,c(e.$t(`townView.k3o5tz9110`)),1)])):v(``,!0),!o(q)&&!o(K).length&&!o(Yt).length?(r(),g(`div`,jc,c(e.$t(`townView.k1qkqld7111`)),1)):v(``,!0)],512)],64)):v(``,!0)])):v(``,!0)]),_:1}),w(`section`,Mc,[w(`div`,Nc,[w(`h3`,null,c(e.$t(`townView.k17dkhgd112`)),1)]),w(`div`,Pc,[w(`div`,Fc,[w(`canvas`,{ref_key:`donutCanvas`,ref:nf,width:`118`,height:`118`},null,512),w(`div`,Ic,[w(`b`,{style:s({color:o(tf)})},c(o(ef))+`%`,5),w(`span`,null,c(e.$t(`townView.k7h1nxo113`)),1)])]),w(`div`,Lc,[w(`div`,Rc,[t[86]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-accent)`}},null,-1),u(` `+c(e.$t(`townView.k3vp67i114`))+` `,1),w(`span`,zc,c(o(Gd)),1)]),w(`div`,Bc,[t[87]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-amber)`}},null,-1),u(` `+c(e.$t(`townView.k3zcvb115`))+` `,1),w(`span`,Vc,c(o(Zd)),1)]),w(`div`,Hc,[t[88]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-danger)`}},null,-1),u(` `+c(e.$t(`townView.k3xmid116`))+` `,1),w(`span`,Uc,c(o(Qd)),1)]),w(`div`,Wc,[t[89]||=w(`span`,{class:`hl-dot`,style:{background:`#3a4a63`}},null,-1),u(` `+c(e.$t(`townView.statesOffline`))+` `,1),w(`span`,Gc,c(o($d)),1)])])])]),w(`section`,Kc,[w(`div`,qc,[w(`h3`,null,c(e.$t(`townView.k1q247fn117`)),1),w(`span`,Jc,c(o(D).twins.length),1)]),k(d,{class:`kd-embed`,"daq-live":o(zd),"dcw-live":o(Bd),onFocusDevice:zt},null,8,[`daq-live`,`dcw-live`])]),w(`section`,Yc,[w(`div`,Xc,[w(`h3`,null,c(e.$t(`townView.k1cxf749118`)),1),w(`span`,Zc,c(o(lf))+` `+c(e.$t(`townView.k4dfq040`)),1),w(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bkswpz022`),onClick:df},` ✓ `,8,Qc)]),w(`div`,$c,[(r(!0),g(l,null,n(o(af).slice(0,8),e=>(r(),g(`div`,{key:e.id,class:`al-row`},[w(`span`,{class:i([`al-ico`,e.state===2?`info`:e.state===1?`warn`:`crit`])},[...t[90]||=[w(`svg`,{class:`al-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3 22 20H2L12 3Z`}),w(`path`,{d:`M12 10v4M12 17v.2`})],-1)]],2),w(`div`,el,[w(`div`,tl,c(e.txt),1),w(`div`,nl,c(e.src)+` · `+c(e.time),1)]),w(`button`,{class:i([`al-state`,`s${e.state}`]),onClick:t=>uf(e.id)},c(sf[e.state]),11,rl)]))),128)),o(af).length?v(``,!0):(r(),g(`div`,il,[t[91]||=w(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z`}),w(`path`,{d:`m9.2 12.2 2 2 3.6-4`})],-1),w(`span`,null,c(e.$t(`townView.kjz544r119`)),1)]))])]),w(`section`,al,[w(`div`,ol,[w(`h3`,null,c(e.$t(`townView.k1cxdtq2120`)),1),w(`span`,sl,c(o(Jl).length),1)]),w(`div`,cl,[(r(!0),g(l,null,n([...o(Jl)].reverse(),(e,t)=>(r(),g(`div`,{key:`${e.at}-${t}`,class:`event-row`},[w(`span`,ll,c(Vl(e.at)),1),w(`span`,{class:`ev-name`,title:e.agentName},c(e.agentName),9,ul),w(`span`,{class:`ev-text`,title:e.text},c(e.text),9,dl)]))),128)),o(Jl).length?v(``,!0):(r(),g(`div`,fl,[t[92]||=w(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[w(`path`,{d:`M3 12h3l2.5-6 4 12L15 12h6`})],-1),w(`span`,null,c(e.$t(`townView.k2uk6ua121`)),1)]))])]),w(`section`,pl,[w(`div`,ml,[w(`h3`,null,c(e.$t(`townView.kjug2jq122`)),1)]),w(`div`,hl,[w(`div`,{class:`mm-wrap`,title:e.$t(`townView.klfwiqg023`)},[w(`canvas`,{ref_key:`navCanvas`,ref:Hf,class:`nav-cv`,onPointerdown:qf,onPointermove:Jf,onPointerup:Yf,onPointercancel:Yf,onWheel:j(Kf,[`prevent`])},null,544)],8,gl),w(`div`,_l,[w(`button`,{class:`vp-tool`,title:e.$t(`townView.k1lap9bs024`),onClick:Df},[...t[93]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M3 12a9 9 0 1 0 3-6.7M3 4v5h5`})],-1)]],8,vl),w(`button`,{class:`vp-tool`,title:e.$t(`townView.kav8a8k025`),onClick:t[49]||=e=>o(F)?.zoomBy(.22)},[...t[94]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),w(`path`,{d:`m16 16 4.5 4.5M8.5 11h5`})],-1)]],8,yl),w(`button`,{class:`vp-tool`,title:e.$t(`townView.k1u7uce9026`),onClick:t[50]||=e=>o(F)?.zoomBy(-.18)},[...t[95]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),w(`path`,{d:`m16 16 4.5 4.5M8.5 11h5M11 8.5v5`})],-1)]],8,bl)])]),w(`div`,xl,c(e.$t(`townView.k1gaaodq136`))+c(o(Uf).toFixed(1))+` · `+c(o(Gt)?.devices?.length??0)+` `+c(e.$t(`townView.k47e16126`)),1)])])]),w(`footer`,Sl,[w(`span`,null,[w(`span`,{class:i([`sb-dot`,{red:o(C).state!==`open`}])},null,2),u(c(e.$t(`townView.k1i4g246123`))+` `,1),w(`b`,null,c(o(C).state===`open`?e.$t(`townView.k41k5c154`):o(Ae)?e.$t(`townView.k3lmtk3184`):e.$t(`townView.k44c2n186`)),1)]),w(`span`,Cl,[u(c(e.$t(`townView.k4a0jt124`))+` `,1),w(`b`,null,c(o(be)),1),t[96]||=w(`i`,null,`·`,-1),u(c(e.$t(`townView.k3xdvm125`))+` `,1),w(`b`,null,c(o(ye)),1),t[97]||=w(`i`,null,`·`,-1),u(c(e.$t(`townView.k47e16126`))+` `,1),w(`b`,null,c(o(Wd)),1)]),w(`span`,wl,c(o(ve))+` FPS `,1),w(`span`,Tl,` © 2026 ABO · DIGITAL TWIN · `+c(e.$t(`townView.k1h5gxpf137`)),1)]),o(ge)?v(``,!0):(r(),g(`div`,El,[t[98]||=w(`div`,{class:`loading-spinner`},null,-1),w(`span`,Dl,c(e.$t(`townView.kvjdqfg059`)),1)]))])}}}),[[`__scopeId`,`data-v-ee250387`]]),{__name:`WorkshopTownView`});export{sn as n,Ll as t};
@@ -1 +0,0 @@
1
- import{C as e,H as t,Ht as n,St as r,Wt as i,a,b as o,et as s,f as c,g as l,h as u,lt as d,m as f,mt as p,nt as m,p as h,t as g,x as _}from"./BSCpFtzG.js";import{z as v}from"./2LwEn9gX.js";import{d as ee}from"./PQLnLxYe.js";import{n as y}from"./uBbDCfTz.js";import{n as b}from"./BeIfu4N3.js";import{t as x}from"./Z8k0uMSI.js";import{t as te}from"./CfIXY-ET.js";import{t as ne}from"./ByGNWgAr.js";import{t as re}from"./DPDqAD1e.js";import{t as ie}from"./DYWgGHNo.js";import{r as S}from"./W1E3-5ML.js";import{t as ae}from"./Ce1zyNYu.js";import{t as oe}from"./B9aPoQvt.js";import{t as se}from"./R_WxTozV2.js";import{t as ce}from"./C9f8QMp12.js";import{t as C}from"./NIM0Wglj2.js";import{t as w}from"./CNs_Ozdc2.js";var le={class:`page`},T={key:0,class:`auth-gate`},ue={class:`sub`},E={class:`head`},D={class:`sub`},O={class:`font-medium`},k={key:1,class:`tok-cell`},de=[`title`],fe={class:`once-banner`},pe={class:`raw-row`},me={class:`raw`},he=[`title`],ge=[`title`],_e={class:`once-meta`},A=g(e({__name:`tokens`,setup(e){let{t:g}=b();w({layout:`default`});let A=C(),j=p([]),M=p(!1),N=p(!1),P=p(``),F=p(!1),I=p(``),L=p(``),R=p(!1),z=p(``),B=p(``),V=p(!1),H=async()=>{if(A.isLoggedIn){M.value=!0;try{j.value=await A.listTokens()}catch(e){S.error(e instanceof Error?e.message:g(`tokens.k19jvk54013`))}finally{M.value=!1}}};s(()=>A.isLoggedIn,e=>{e?H():j.value=[]},{immediate:!0});let U=async()=>{F.value=!0;try{let e=await A.createToken(P.value);I.value=e.token,L.value=P.value,N.value=!1,P.value=``,await H()}catch(e){S.error(e instanceof Error?e.message:String(e))}finally{F.value=!1}},W=async()=>{if(!B.value.trim()){S.warning(g(`tokens.k169z26g014`));return}V.value=!0;try{await A.renameToken(z.value,B.value),R.value=!1,await H(),S.success(g(`tokens.k3n9aij015`))}catch(e){S.error(e instanceof Error?e.message:String(e))}finally{V.value=!1}},ve=e=>{let t=e.id;if(!t)return;let n=t===A.user?.tokenId;(async()=>{try{if(await A.revokeToken(t),S.success(g(`tokens.k3n64kh016`)),n)return;await H()}catch(e){S.error(e instanceof Error?e.message:String(e))}})()},G=p(!1),K=p(!1),ye=c(()=>{let e=I.value;return e?`${e.slice(0,6)}${`•`.repeat(Math.max(12,e.length-10))}${e.slice(-4)}`:``}),be=()=>{G.value=!G.value},q=async e=>{try{return await navigator.clipboard.writeText(e),!0}catch{try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}},xe=async()=>{await q(I.value)?(K.value=!0,setTimeout(()=>{K.value=!1},1600)):S.error(g(`tokens.kjtcn2h017`))},J=()=>{I.value=``,G.value=!1,K.value=!1},Y=p({}),X=p(``),Z=p(``),Q=e=>e in Y.value,Se=e=>Q(e.id)?Y.value[e.id]:e.preview??`ut-${`•`.repeat(14)}`,Ce=async e=>{if(Q(e.id)){Reflect.deleteProperty(Y.value,e.id);return}if(!e.hasPlain){S.warning(g(`tokens.kkpgzo8018`));return}X.value=e.id;try{let t=await A.revealToken(e.id);t&&(Y.value[e.id]=t)}catch(e){S.error(e instanceof Error?e.message:g(`tokens.k1gj9ls019`))}finally{X.value=``}},we=async e=>{let t=Y.value[e.id]??null;if(!t){if(!e.hasPlain){S.warning(g(`tokens.kr5ovor020`));return}X.value=e.id;try{t=await A.revealToken(e.id)}catch(e){S.error(e instanceof Error?e.message:g(`tokens.kubtby5021`));return}finally{X.value=``}}t&&await q(t)?(Z.value=e.id,setTimeout(()=>{Z.value=``},1600)):S.error(g(`tokens.kgkfcr0022`))},$=e=>e?e.replace(`T`,` `).slice(0,19):`-`,Te=e=>{z.value=e.id??``,B.value=e.label??``,R.value=!0},Ee=[{title:g(`tokens.k41416002`),key:`label`,dataIndex:`label`},{title:`Token`,key:`token`,width:360},{title:g(`tokens.k1bg95gk023`),key:`createdAt`,dataIndex:`createdAt`,width:170},{title:g(`tokens.k1euotul024`),key:`lastUsedAt`,dataIndex:`lastUsedAt`,width:200},{title:g(`tokens.k40aa6025`),key:`action`,width:170}];return y({title:()=>g(`titles.tokens`)}),(e,s)=>{let c=x,p=oe,g=re,y=se,b=ae,S=te,C=ce,w=ne,z=ie;return t(),l(`div`,le,[r(A).isLoggedIn?(t(),l(a,{key:1},[h(`div`,E,[h(`div`,null,[s[6]||=h(`h2`,null,`API Token`,-1),h(`p`,D,i(r(A).user?.name)+` · `+i(e.$t(`tokens.k1upppaw026`)),1)]),_(y,null,{default:m(()=>[r(A).user?.tokenId?(t(),f(g,{key:0,color:`green`},{default:m(()=>[o(i(e.$t(`tokens.khcxmsc006`)),1)]),_:1})):u(``,!0),_(c,{type:`primary`,onClick:s[1]||=e=>N.value=!0},{default:m(()=>[s[7]||=h(`span`,{class:`i-tabler-plus`},null,-1),o(` `+i(e.$t(`chips.issue`)),1)]),_:1})]),_:1})]),_(C,{spinning:r(M)},{default:m(()=>[_(S,{columns:Ee,"data-source":r(j),pagination:!1,"row-key":`id`},{bodyCell:m(({column:d,record:p})=>[d.key===`label`?(t(),f(y,{key:0},{default:m(()=>[s[8]||=h(`span`,{class:`i-tabler-key text-primary`},null,-1),h(`span`,O,i(p.label||e.$t(`tokens.kj3mklm028`)),1),p.id===r(A).user?.tokenId?(t(),f(g,{key:0,color:`green`},{default:m(()=>[o(i(e.$t(`tokens.k1defr98007`)),1)]),_:1})):u(``,!0)]),_:2},1024)):d.key===`token`?(t(),l(`div`,k,[h(`code`,{class:n([`tok-val`,{revealed:Q(p.id)}]),title:Q(p.id)?`已显示明文,点击眼睛遮回`:`掩码预览,点击眼睛查看明文`},i(Se(p)),11,de),_(c,{type:`text`,size:`small`,class:`tok-op`,loading:r(X)===p.id,disabled:!p.hasPlain,title:p.hasPlain?Q(p.id)?`遮回`:`查看明文`:`旧版本 token 未存档明文,不可查看`,onClick:e=>Ce(p)},{default:m(()=>[h(`span`,{class:n(Q(p.id)?`i-tabler-eye-off`:`i-tabler-eye`)},null,2)]),_:2},1032,[`loading`,`disabled`,`title`,`onClick`]),_(c,{type:`text`,size:`small`,class:n([`tok-op`,{ok:r(Z)===p.id}]),disabled:!p.hasPlain,title:r(Z)===p.id?`已复制`:`复制明文`,onClick:e=>we(p)},{default:m(()=>[h(`span`,{class:n(r(Z)===p.id?`i-tabler-check`:`i-tabler-copy`)},null,2)]),_:2},1032,[`class`,`disabled`,`title`,`onClick`]),p.hasPlain?u(``,!0):(t(),f(g,{key:0,class:`legacy-tag`,color:`orange`},{default:m(()=>[o(i(e.$t(`tokens.kyelqk1008`)),1)]),_:1}))])):d.key===`createdAt`?(t(),l(a,{key:2},[o(i($(p.createdAt)),1)],64)):d.key===`lastUsedAt`?(t(),l(a,{key:3},[o(i($(p.lastUsedAt)),1)],64)):d.key===`action`?(t(),f(y,{key:4},{default:m(()=>[_(c,{type:`link`,size:`small`,onClick:e=>Te(p)},{default:m(()=>[s[9]||=h(`span`,{class:`i-tabler-edit`},null,-1),o(` `+i(e.$t(`tokens.k3vrpcs009`)),1)]),_:1},8,[`onClick`]),_(b,{title:p.id===r(A).user?.tokenId?`吊销当前会话 token 将退出登录`:`吊销后立即失效`,"ok-text":`吊销`,"cancel-text":`取消`,onConfirm:e=>ve(p)},{default:m(()=>[_(c,{type:`link`,size:`small`,danger:``},{default:m(()=>[s[10]||=h(`span`,{class:`i-tabler-trash`},null,-1),o(` `+i(e.$t(`tokens.k3xmrz010`)),1)]),_:1})]),_:1},8,[`title`,`onConfirm`])]),_:2},1024)):u(``,!0)]),_:1},8,[`data-source`])]),_:1},8,[`spinning`]),_(z,{open:r(N),"onUpdate:open":s[3]||=e=>d(N)?N.value=e:null,title:e.$t(`chips.issueTitle`),"confirm-loading":r(F),"ok-text":`创建`,"cancel-text":`取消`,onOk:U},{default:m(()=>[_(w,{value:r(P),"onUpdate:value":s[2]||=e=>d(P)?P.value=e:null,placeholder:e.$t(`tokens.k1hlqknl001`),onKeydown:v(U,[`enter`])},null,8,[`value`,`placeholder`])]),_:1},8,[`open`,`title`,`confirm-loading`]),_(z,{open:r(I)!==``,title:`Token 已创建`,footer:null,"mask-closable":!1,onCancel:J,onAfterClose:J},{default:m(()=>[h(`div`,fe,[s[11]||=h(`span`,{class:`i-tabler-circle-check`},null,-1),h(`span`,null,i(e.$t(`tokens.k12149oy011`)),1)]),h(`div`,pe,[h(`code`,me,i(r(G)?r(I):r(ye)),1),h(`button`,{class:`raw-op`,title:r(G)?`隐藏明文`:`显示明文`,onClick:be},[h(`span`,{class:n(r(G)?`i-tabler-eye-off`:`i-tabler-eye`)},null,2)],8,he),h(`button`,{class:n([`raw-op`,{ok:r(K)}]),title:r(K)?`已复制`:`复制`,onClick:xe},[h(`span`,{class:n(r(K)?`i-tabler-check`:`i-tabler-copy`)},null,2)],10,ge)]),h(`div`,_e,[h(`span`,null,i(e.$t(`tokens.k3p0p44027`))+i(r(L)||e.$t(`tokens.kj3mklm028`)),1),s[12]||=h(`span`,null,`用法:Authorization: Bearer <token>`,-1)]),_(c,{type:`primary`,block:``,onClick:J},{default:m(()=>[o(i(e.$t(`tokens.k1s5f5zd012`)),1)]),_:1})]),_:1},8,[`open`]),_(z,{open:r(R),"onUpdate:open":s[5]||=e=>d(R)?R.value=e:null,title:`重命名 Token`,"confirm-loading":r(V),"ok-text":`保存`,"cancel-text":`取消`,onOk:W},{default:m(()=>[_(w,{value:r(B),"onUpdate:value":s[4]||=e=>d(B)?B.value=e:null,placeholder:e.$t(`tokens.k41416002`),onKeydown:v(W,[`enter`])},null,8,[`value`,`placeholder`])]),_:1},8,[`open`,`confirm-loading`])],64)):(t(),l(`div`,T,[_(p,{class:`auth-card`},{default:m(()=>[h(`h2`,null,i(e.$t(`tokens.k1k6z0r8003`)),1),h(`p`,ue,i(e.$t(`tokens.k1gjnree004`)),1),_(c,{type:`primary`,block:``,onClick:s[0]||=t=>(`navigateTo`in e?e.navigateTo:r(ee))(`/workshop`)},{default:m(()=>[o(i(e.$t(`tokens.k1bhhheq005`)),1)]),_:1})]),_:1})]))])}}}),[[`__scopeId`,`data-v-2eba0f0e`]]);export{A as default};
@@ -1 +0,0 @@
1
- import{C as e,G as t,H as n,Ht as ee,St as r,Wt as i,a,b as o,f as s,ft as c,g as l,h as u,lt as d,m as f,mt as p,nt as m,p as h,t as g,x as _}from"./BSCpFtzG.js";import{d as te}from"./PQLnLxYe.js";import{n as v}from"./uBbDCfTz.js";import{n as y}from"./BeIfu4N3.js";import{t as ne}from"./Z8k0uMSI.js";import{i as re,n as ie,r as b,t as x}from"./DSBfvCi5.js";import{t as ae}from"./Bsc69G4x.js";import{t as oe}from"./ByGNWgAr.js";import{i as se,n as ce,t as le}from"./DPDqAD1e.js";import{r as ue,t as de}from"./BFYNhG9S.js";import{t as fe}from"./DYWgGHNo.js";import{r as S}from"./W1E3-5ML.js";import{t as pe}from"./R_WxTozV2.js";import{t as me}from"./B6M2WJWm2.js";import{t as he}from"./C9f8QMp12.js";import{t as ge}from"./D8DDDzV62.js";import{t as C}from"./NIM0Wglj2.js";import{t as w}from"./CNs_Ozdc2.js";var _e={class:`page`},ve={class:`head`},ye={class:`sub`},be={class:`toolbar`},xe={key:0,class:`admin-note`},Se={class:`grid`},Ce={class:`card-head`},we={class:`name`},Te={class:`owner`},Ee={class:`members`},De={class:`member-name`},T={class:`member-harness`},E=[`onClick`],D=g(e({__name:`teams`,setup(e){let{t:g}=y();w({layout:`default`});let D=x(),O=C(),k=p([]),A=p([]),j=p([]),M=p(!1),N=async()=>{M.value=!0;try{let[e,t,n]=await Promise.all([D.listTeams(),D.listTemplates(),D.listChannels()]);k.value=e?.data??[],A.value=t?.data??[],j.value=n?.data??[]}finally{M.value=!1}};N();let P=p(`all`),F=s(()=>{let e=O.user?.id;switch(P.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}}),I=e=>!e.isBuiltin&&(e.ownerUserId===O.user?.id||O.isAdmin),L=e=>e.isBuiltin?{text:g(`teams.k3x23c018`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:g(`teams.k3wv1t019`),color:`green`}:{text:g(`teams.k447jj020`),color:`default`},R=p(!1),z=c({name:``,description:``,visibility:`private`}),Oe=async()=>{if(!z.name.trim()){S.warning(g(`teams.k1bvcdo2021`));return}await D.createTeam({name:z.name.trim(),description:z.description||void 0,visibility:z.visibility}),S.success(g(`teams.k3n5hak022`)),R.value=!1,z.name=``,z.description=``,z.visibility=`private`,N()},ke=async(e,t)=>{try{await D.updateTeam(e.id,{visibility:t?`public`:`private`}),S.success(g(t?`teams.k1globhp023`:`teams.k1xxabaf024`)),N()}catch(e){S.error(e instanceof Error?e.message:String(e))}},B=p(!1),V=p(null),H=p(``),U=p(`worker`),Ae=e=>{V.value=e,H.value=``,U.value=`worker`,B.value=!0},je=async()=>{if(!V.value||!H.value){S.warning(g(`teams.k1kw4rtj025`));return}try{await D.addTeamMember(V.value.id,{agentId:H.value,role:U.value}),S.success(g(`teams.k3n5hzw026`)),B.value=!1,N()}catch(e){S.error(e instanceof Error?e.message:String(e))}},Me=async(e,t)=>{await D.removeTeamMember(e.id,t),N()},W=p(!1),G=p(null),K=p(``),q=p(!1),J=e=>{G.value=e,K.value=``,W.value=!0},Ne=async()=>{if(!G.value||!K.value){S.warning(`选择目标 Channel`);return}q.value=!0;try{let e=(await D.deployTeam(G.value.id,K.value))?.data?.agents?.length??0;S.success(g(`teams.kh90glh031`,{p0:e})),W.value=!1}catch(e){S.error(e instanceof Error?e.message:String(e))}finally{q.value=!1}},Pe=async e=>{await D.deleteTeam(e.id),S.success(g(`teams.k1oxjrxx027`)),N()};return v({title:()=>g(`titles.teams`)}),(e,s)=>{let c=ne,p=pe,g=ie,v=le,y=ge,x=ue,S=de,C=me,w=he,D=oe,N=re,Y=ce,X=se,Z=b,Q=fe,$=ae;return n(),l(`div`,_e,[h(`div`,ve,[h(`div`,null,[h(`h2`,null,`AgentTeam `+i(e.$t(`teams.k3svl8y028`)),1),h(`p`,ye,i(e.$t(`teams.k12gl4wn008`)),1)]),_(p,null,{default:m(()=>[_(c,{onClick:s[0]||=t=>(`navigateTo`in e?e.navigateTo:r(te))(`/workshop`)},{default:m(()=>[o(i(e.$t(`teams.krpx6qa009`)),1)]),_:1}),_(c,{type:`primary`,onClick:s[1]||=e=>R.value=!0},{default:m(()=>[o(i(e.$t(`teams.k1efmuyx002`)),1)]),_:1})]),_:1})]),h(`div`,be,[_(g,{value:r(P),"onUpdate:value":s[2]||=e=>d(P)?P.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:r(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`]),r(O).isAdmin?(n(),l(`span`,xe,[s[13]||=h(`span`,{class:`i-tabler-shield-check`},null,-1),o(` `+i(e.$t(`teams.k1bpgi8h010`)),1)])):u(``,!0)]),_(w,{spinning:r(M)},{default:m(()=>[h(`div`,Se,[(n(!0),l(a,null,t(r(F),r=>(n(),l(`div`,{key:r.id,class:`card`},[h(`div`,Ce,[h(`span`,we,i(r.name),1),_(v,{color:L(r).color,class:`vis-tag`},{default:m(()=>[L(r).icon?(n(),l(`span`,{key:0,class:ee(L(r).icon)},null,2)):u(``,!0),o(i(L(r).text),1)]),_:2},1032,[`color`]),!r.isBuiltin&&I(r)?(n(),f(y,{key:0,checked:r.visibility===`public`,size:`small`,"checked-children":`公开`,"un-checked-children":`私有`,onChange:e=>ke(r,e===!0)},null,8,[`checked`,`onChange`])):u(``,!0),h(`span`,Te,i(r.ownerName??`-`),1),I(r)?(n(),f(C,{key:1},{overlay:m(()=>[_(S,null,{default:m(()=>[_(x,{onClick:e=>J(r)},{default:m(()=>[...s[14]||=[o(` 部署到 Channel… `,-1)]]),_:1},8,[`onClick`]),_(x,{danger:``,onClick:e=>Pe(r)},{default:m(()=>[o(i(e.$t(`teams.k1bpojhf011`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),default:m(()=>[s[15]||=h(`span`,{class:`i-tabler-dots op`},null,-1)]),_:2},1024)):(n(),f(c,{key:2,size:`small`,type:`text`,title:e.$t(`teams.kxheuf1001`),onClick:e=>J(r)},{default:m(()=>[o(i(e.$t(`teams.k48ja7012`)),1)]),_:1},8,[`title`,`onClick`]))]),h(`div`,Ee,[(n(!0),l(a,null,t(r.members,e=>(n(),l(`div`,{key:e.templateId,class:`member`},[_(v,{color:e.role===`lead`?`gold`:`blue`,class:`role`},{default:m(()=>[o(i(e.role),1)]),_:2},1032,[`color`]),h(`span`,De,i(e.name),1),h(`span`,T,i(e.harness),1),I(r)?(n(),l(`span`,{key:0,class:`i-tabler-x rm`,onClick:t=>Me(r,e.templateId)},null,8,E)):u(``,!0)]))),128)),I(r)?(n(),f(c,{key:0,size:`small`,type:`dashed`,block:``,onClick:e=>Ae(r)},{default:m(()=>[o(i(e.$t(`teams.krt2oib013`)),1)]),_:1},8,[`onClick`])):u(``,!0)])]))),128)),r(F).length===0?(n(),l(`div`,{key:0,class:`card placeholder`,onClick:s[3]||=e=>R.value=!0},[s[16]||=h(`span`,{class:`i-tabler-plus big`},null,-1),h(`span`,null,i(e.$t(`teams.k6cbbgf014`)),1)])):u(``,!0)])]),_:1},8,[`spinning`]),_(Q,{open:r(R),"onUpdate:open":s[7]||=e=>d(R)?R.value=e:null,title:e.$t(`teams.k1efmuyx002`),"ok-text":`创建`,"cancel-text":`取消`,onOk:Oe},{default:m(()=>[_(Z,{layout:`vertical`},{default:m(()=>[_(N,{label:e.$t(`teams.k3xhia003`)},{default:m(()=>[_(D,{value:r(z).name,"onUpdate:value":s[4]||=e=>r(z).name=e},null,8,[`value`])]),_:1},8,[`label`]),_(N,{label:e.$t(`teams.k40gkk004`)},{default:m(()=>[_(D,{value:r(z).description,"onUpdate:value":s[5]||=e=>r(z).description=e},null,8,[`value`])]),_:1},8,[`label`]),_(N,{label:e.$t(`teams.k3lrqn0005`)},{default:m(()=>[_(X,{value:r(z).visibility,"onUpdate:value":s[6]||=e=>r(z).visibility=e},{default:m(()=>[_(Y,{value:`private`},{default:m(()=>[o(i(e.$t(`teams.k17jfge3015`)),1)]),_:1}),_(Y,{value:`public`},{default:m(()=>[o(i(e.$t(`teams.k1h2lq0o016`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`]),_(Q,{open:r(B),"onUpdate:open":s[10]||=e=>d(B)?B.value=e:null,title:e.$t(`teams.k6ljhyv029`,{p0:r(V)?.name??``}),"ok-text":`加入`,"cancel-text":`取消`,onOk:je},{default:m(()=>[_(Z,{layout:`vertical`},{default:m(()=>[_(N,{label:e.$t(`teams.k41ds5006`)},{default:m(()=>[_($,{value:r(H),"onUpdate:value":s[8]||=e=>d(H)?H.value=e:null,options:r(A).map(e=>({value:e.id,label:`${e.name}(${e.harness})`}))},null,8,[`value`,`options`])]),_:1},8,[`label`]),_(N,{label:e.$t(`teams.k479op007`)},{default:m(()=>[_(X,{value:r(U),"onUpdate:value":s[9]||=e=>d(U)?U.value=e:null},{default:m(()=>[_(Y,{value:`worker`},{default:m(()=>[...s[17]||=[o(` worker `,-1)]]),_:1}),_(Y,{value:`lead`},{default:m(()=>[o(i(e.$t(`teams.keowzlv017`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`]),_(Q,{open:r(W),"onUpdate:open":s[12]||=e=>d(W)?W.value=e:null,title:e.$t(`teams.k1c0o6oe030`,{p0:r(G)?.name??``}),"confirm-loading":r(q),"ok-text":`部署`,"cancel-text":`取消`,onOk:Ne},{default:m(()=>[_(Z,{layout:`vertical`},{default:m(()=>[_(N,{label:`目标 Channel(须无 lead 冲突)`},{default:m(()=>[_($,{value:r(K),"onUpdate:value":s[11]||=e=>d(K)?K.value=e:null,options:r(j).map(e=>({value:e.id,label:e.name}))},null,8,[`value`,`options`])]),_:1})]),_:1})]),_:1},8,[`open`,`title`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-4d91350d`]]);export{D as default};