agentworkshop 0.7.39 → 0.7.41

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 (405) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +55 -0
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +55 -0
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/88GOowgO2.js +1 -0
  5. package/.output/public/_nuxt/{BNT8gYU92.js → BC9wjTJK2.js} +2 -2
  6. package/.output/public/_nuxt/{CY9LbPCI.js → BN16aRdQ.js} +1 -1
  7. package/.output/public/_nuxt/BWVhZntO.js +1 -0
  8. package/.output/public/_nuxt/{HBLJ-wei.js → BXxH0UQE.js} +1 -1
  9. package/.output/public/_nuxt/{zIGh7R49.js → BneN7fbu.js} +1 -1
  10. package/.output/public/_nuxt/BsROmY89.js +1 -0
  11. package/.output/public/_nuxt/{DUrecWPx.js → C0ZrS1KL.js} +2 -2
  12. package/.output/public/_nuxt/{C_OLzD09.js → C4oW1HsE.js} +1 -1
  13. package/.output/public/_nuxt/{CUDwzgLV.js → C4s_niy-.js} +9 -9
  14. package/.output/public/_nuxt/CFxtLwjp.js +1 -0
  15. package/.output/public/_nuxt/{Cec0Ua3F.js → CS50LB_l.js} +1 -1
  16. package/.output/public/_nuxt/CssgYAAL2.js +1 -0
  17. package/.output/public/_nuxt/D6mbFA-a.js +1 -0
  18. package/.output/public/_nuxt/D98NH8kG.js +1 -0
  19. package/.output/public/_nuxt/DGIuvyRN2.js +1 -0
  20. package/.output/public/_nuxt/DGbd-UiG.js +1 -0
  21. package/.output/public/_nuxt/{CojCTLKD.js → DGj-WEBg.js} +1 -1
  22. package/.output/public/_nuxt/{DDShH71m.js → DS8qj8EL.js} +1 -1
  23. package/.output/public/_nuxt/DTFCy6h-.js +1 -0
  24. package/.output/public/_nuxt/{DrYV5i68.js → DUjW5Yq5.js} +1 -1
  25. package/.output/public/_nuxt/{45zuyAso.js → D_OTvQza.js} +1 -1
  26. package/.output/public/_nuxt/Dap5PmTL.js +2 -0
  27. package/.output/public/_nuxt/Dqw1lpr-.js +1 -0
  28. package/.output/public/_nuxt/DvLxILQP.js +1 -0
  29. package/.output/public/_nuxt/IREZ1eC2.js +1 -0
  30. package/.output/public/_nuxt/TownView.f-YOdXRs.css +1 -0
  31. package/.output/public/_nuxt/_id_.D9ymtHB5.css +1 -0
  32. package/.output/public/_nuxt/_id_.jf-_8E_c.css +1 -0
  33. package/.output/public/_nuxt/_wsId_.B4WiqkIS.css +1 -0
  34. package/.output/public/_nuxt/agents.ZD0rVdHE.css +1 -0
  35. package/.output/public/_nuxt/aml.BN8ZEW4h.css +1 -0
  36. package/.output/public/_nuxt/builds/latest.json +1 -1
  37. package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +1 -0
  38. package/.output/public/_nuxt/ca4TJ3Op.js +1 -0
  39. package/.output/public/_nuxt/channel-templates.BOtahzPi.css +1 -0
  40. package/.output/public/_nuxt/daq.DjSgY94l.css +1 -0
  41. package/.output/public/_nuxt/dcw.8Y7FqCVN.css +1 -0
  42. package/.output/public/_nuxt/default.J32SgqFY.css +1 -0
  43. package/.output/public/_nuxt/entry.bdm0tv6M.css +1 -0
  44. package/.output/public/_nuxt/eqq3wWQF.js +18 -0
  45. package/.output/public/_nuxt/logs.BpKzmKsh.css +1 -0
  46. package/.output/public/_nuxt/monitor.D9pe7qN6.css +1 -0
  47. package/.output/public/_nuxt/pages.D7aSDlUI.css +1 -0
  48. package/.output/public/_nuxt/permissions.DwTVlFe6.css +1 -0
  49. package/.output/public/_nuxt/plugins.sb4nDGqr.css +1 -0
  50. package/.output/public/_nuxt/{Cbq-mryP.js → qr6R6Ha1.js} +1 -1
  51. package/.output/public/_nuxt/settings.BTgR-NiE.css +1 -0
  52. package/.output/public/_nuxt/teams.CxnxKVVs.css +1 -0
  53. package/.output/public/_nuxt/tokens.BFY7qv4f.css +1 -0
  54. package/.output/public/_nuxt/{town.DKIAhKnx.css → town.BBXZmeoP.css} +1 -1
  55. package/.output/public/_nuxt/users.DLgZ1D0h.css +1 -0
  56. package/.output/public/_nuxt/workshop.CR_QzeAN.css +1 -0
  57. package/.output/public/_nuxt/{BzHEilTt.js → xh3_vYcu.js} +1 -1
  58. package/.output/public/_nuxt/yF0aYMF1.js +4 -0
  59. package/.output/server/chunks/_/entity.mjs.map +1 -1
  60. package/.output/server/chunks/_/nitro.mjs +2355 -1362
  61. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  62. package/.output/server/chunks/build/{TownView-jVazYOjN.mjs → TownView--otsnr_7.mjs} +290 -208
  63. package/.output/server/chunks/build/TownView--otsnr_7.mjs.map +1 -0
  64. package/.output/server/chunks/build/{_id_-CfVosNg3.mjs → _id_-Brv-JSvr.mjs} +142 -141
  65. package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +1 -0
  66. package/.output/server/chunks/build/{_id_-Hwr4rZpr.mjs → _id_-D9pl1OZy.mjs} +38 -36
  67. package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +1 -0
  68. package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs → _wsId_-BASfDf0s.mjs} +295 -261
  69. package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs.map → _wsId_-BASfDf0s.mjs.map} +1 -1
  70. package/.output/server/chunks/build/{agents-Bvin73QY.mjs → agents-CLQqJF2y.mjs} +21 -27
  71. package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +1 -0
  72. package/.output/server/chunks/build/{aml-BCSJCdX7.mjs → aml-_7FdFL2p.mjs} +109 -109
  73. package/.output/server/chunks/build/{aml-BCSJCdX7.mjs.map → aml-_7FdFL2p.mjs.map} +1 -1
  74. package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -1
  75. package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs → channel-templates-p6SZNjlM.mjs} +19 -19
  76. package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs.map → channel-templates-p6SZNjlM.mjs.map} +1 -1
  77. package/.output/server/chunks/build/{daq-C03Uu5UE.mjs → daq-DkMvD8sg.mjs} +193 -126
  78. package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +1 -0
  79. package/.output/server/chunks/build/{dcw-6vEYVeje.mjs → dcw-C1jgVJkO.mjs} +46 -46
  80. package/.output/server/chunks/build/{dcw-6vEYVeje.mjs.map → dcw-C1jgVJkO.mjs.map} +1 -1
  81. package/.output/server/chunks/build/{default-CZmZFpqH.mjs → default-BE4r0FZN.mjs} +152 -58
  82. package/.output/server/chunks/build/{default-CZmZFpqH.mjs.map → default-BE4r0FZN.mjs.map} +1 -1
  83. package/.output/server/chunks/build/{logs-B-xhuqln.mjs → logs--dByNyhw.mjs} +35 -35
  84. package/.output/server/chunks/build/{logs-B-xhuqln.mjs.map → logs--dByNyhw.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs → monitor-C0okQaXz.mjs} +33 -33
  86. package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs.map → monitor-C0okQaXz.mjs.map} +1 -1
  87. package/.output/server/chunks/build/{pages-BO7yZsXA.mjs → pages-B0bUWnC6.mjs} +35 -19
  88. package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +1 -0
  89. package/.output/server/chunks/build/{permissions-B52oOmaO.mjs → permissions-68SsNjex.mjs} +12 -12
  90. package/.output/server/chunks/build/{permissions-B52oOmaO.mjs.map → permissions-68SsNjex.mjs.map} +1 -1
  91. package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs → plugins-lGlUr1lj.mjs} +17 -17
  92. package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs.map → plugins-lGlUr1lj.mjs.map} +1 -1
  93. package/.output/server/chunks/build/{settings-DoQ2Oq3P.mjs → settings-Ddd1qx2Z.mjs} +50 -47
  94. package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +1 -0
  95. package/.output/server/chunks/build/{teams-2kz3CusY.mjs → teams-MEDLZdMn.mjs} +38 -34
  96. package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +1 -0
  97. package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs → tokens-C7fTM5C2.mjs} +14 -14
  98. package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs.map → tokens-C7fTM5C2.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{town-BOl6hs9B.mjs → town-CoQdblbZ.mjs} +38 -12
  100. package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +1 -0
  101. package/.output/server/chunks/build/{useDaqStream-CIBaiGAl.mjs → useDaqStream-DfCFpb3p.mjs} +9 -3
  102. package/.output/server/chunks/build/useDaqStream-DfCFpb3p.mjs.map +1 -0
  103. package/.output/server/chunks/build/{useDcwStream-CBbiYnWe.mjs → useDcwStream-UPiX-3iO.mjs} +11 -2
  104. package/.output/server/chunks/build/useDcwStream-UPiX-3iO.mjs.map +1 -0
  105. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +49 -0
  106. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
  107. package/.output/server/chunks/build/{users-fohSmF-J.mjs → users-Cfd5-l2-.mjs} +6 -6
  108. package/.output/server/chunks/build/{users-fohSmF-J.mjs.map → users-Cfd5-l2-.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs → workshop-BL5bhfs0.mjs} +15 -15
  110. package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs.map → workshop-BL5bhfs0.mjs.map} +1 -1
  111. package/.output/server/chunks/build/{workspaces-BuydxM-3.mjs → workspaces-Bgz5Ekwp.mjs} +18 -3
  112. package/.output/server/chunks/build/workspaces-Bgz5Ekwp.mjs.map +1 -0
  113. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  114. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  116. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -2
  118. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
  120. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  122. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
  123. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  124. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  126. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
  127. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  128. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
  129. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  130. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +8 -6
  131. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  132. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -5
  133. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  134. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +14 -4
  135. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  136. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +4 -4
  137. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  138. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -3
  139. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  140. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +31 -0
  141. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -0
  142. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +28 -0
  143. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -0
  144. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  145. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  146. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +32 -0
  148. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -0
  149. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +34 -0
  150. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -0
  151. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +33 -0
  152. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -0
  153. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +34 -0
  154. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -0
  155. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  156. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  157. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  158. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  159. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  160. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  161. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  162. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +3 -1
  163. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  164. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +5 -1
  165. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  166. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
  167. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  168. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  169. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  170. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  171. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  172. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  173. package/.output/server/chunks/routes/renderer.mjs +3 -3
  174. package/.output/server/chunks/virtual/entry.mjs +51 -25
  175. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  176. package/.output/server/package.json +1 -1
  177. package/README-zh.md +203 -39
  178. package/README.md +739 -591
  179. package/app/app.vue +9 -3
  180. package/app/assets/css/main.css +517 -7
  181. package/app/components/AppHeader.vue +98 -7
  182. package/app/components/AppSidebar.vue +117 -11
  183. package/app/components/AwChart.vue +2 -1
  184. package/app/components/workshop/AgentInspectorDrawer.vue +6 -6
  185. package/app/components/workshop/AgentLanesView.vue +52 -1
  186. package/app/components/workshop/AssetLibrary.vue +4 -2
  187. package/app/components/workshop/ChannelSessionList.vue +4 -2
  188. package/app/components/workshop/Composer.vue +96 -0
  189. package/app/components/workshop/DaqNodeRow.vue +19 -0
  190. package/app/components/workshop/DaqTemplateIcon.vue +33 -0
  191. package/app/components/workshop/DeviceTwinPanel.vue +37 -35
  192. package/app/components/workshop/EventBlock.vue +3 -3
  193. package/app/components/workshop/InspectorPanel.vue +47 -11
  194. package/app/components/workshop/LiveAgentBar.vue +34 -0
  195. package/app/components/workshop/TaskBoardView.vue +83 -33
  196. package/app/components/workshop/TranscriptTimeline.vue +56 -0
  197. package/app/components/workshop/blocks/ClusterError.vue +1 -1
  198. package/app/components/workshop/blocks/ClusterRoute.vue +3 -1
  199. package/app/components/workshop/blocks/ClusterStatus.vue +2 -2
  200. package/app/components/workshop/blocks/ClusterStream.vue +8 -2
  201. package/app/components/workshop/town/ModelPreview3D.vue +1 -1
  202. package/app/components/workshop/town/TownView.vue +507 -82
  203. package/app/composables/useResponsive.ts +88 -0
  204. package/app/composables/useRouteMeta.ts +3 -0
  205. package/app/composables/workshop/useDaqStream.ts +7 -4
  206. package/app/composables/workshop/useDcwStream.ts +8 -2
  207. package/app/composables/workshop/useVisibleInterval.ts +2 -2
  208. package/app/composables/workshop/useWorkshopApi.ts +1 -1
  209. package/app/layouts/default.vue +46 -2
  210. package/app/pages/aml/index.vue +712 -616
  211. package/app/pages/daq/[id].vue +12 -7
  212. package/app/pages/daq/index.vue +216 -13
  213. package/app/pages/dcw/[id].vue +117 -32
  214. package/app/pages/dcw/index.vue +83 -23
  215. package/app/pages/index.vue +35 -1
  216. package/app/pages/logs/index.vue +147 -13
  217. package/app/pages/monitor.vue +56 -12
  218. package/app/pages/permissions/index.vue +34 -0
  219. package/app/pages/plugins/index.vue +35 -4
  220. package/app/pages/settings.vue +90 -21
  221. package/app/pages/tokens.vue +23 -0
  222. package/app/pages/town.vue +50 -5
  223. package/app/pages/users.vue +23 -0
  224. package/app/pages/workshop/agents.vue +92 -2
  225. package/app/pages/workshop/channel-templates.vue +53 -0
  226. package/app/pages/workshop/index.vue +14 -0
  227. package/app/pages/workshop/teams.vue +66 -6
  228. package/app/pages/workshop/w/[wsId].vue +202 -14
  229. package/app/plugins/aw-plugins.client.ts +13 -8
  230. package/app/stores/app.ts +33 -1
  231. package/app/stores/workshop/user.ts +1 -1
  232. package/app/stores/workshop/workspaces.ts +18 -2
  233. package/app/utils/api-error.ts +1 -1
  234. package/cli/commands/build.mjs +8 -1
  235. package/docker-compose.yml +6 -0
  236. package/docs/cli.en.md +2 -2
  237. package/docs/cli.md +2 -2
  238. package/docs/plugins.en.md +33 -1
  239. package/docs/plugins.md +29 -1
  240. package/docs/sdk.en.md +1 -1
  241. package/docs/sdk.md +1 -1
  242. package/i18n/locales/en.ts +2 -0
  243. package/i18n/locales/zh-CN.ts +2 -0
  244. package/nuxt.config.ts +31 -0
  245. package/package.json +11 -2
  246. package/scripts/_dbg-param-map-e2e.ts +242 -0
  247. package/scripts/_dbg-param-map-rest-smoke.mjs +73 -0
  248. package/scripts/_dbg-param-real-scenario.mjs +153 -0
  249. package/scripts/_loop-biax-campaign.mjs +124 -0
  250. package/scripts/api-live-e2e.mjs +40 -8
  251. package/scripts/capture-walkthrough.mjs +232 -0
  252. package/scripts/render-walkthrough-figure.mjs +46 -0
  253. package/scripts/seed-walkthrough-fixture.mjs +143 -0
  254. package/scripts/test-plugin-hardening.mjs +8 -0
  255. package/scripts/test-serial-bridge.mjs +418 -0
  256. package/scripts/ui/admin-shots.mjs +46 -0
  257. package/scripts/ui/audit-layout.mjs +301 -0
  258. package/scripts/ui/bump-microfont.mjs +39 -0
  259. package/scripts/ui/e2e-interactive.mjs +328 -0
  260. package/scripts/ui/lib.mjs +198 -0
  261. package/scripts/ui/linkcheck2.mjs +37 -0
  262. package/scripts/ui/live-render-check.mjs +72 -0
  263. package/scripts/ui/md-lint.mjs +80 -0
  264. package/scripts/ui/perf-audit.mjs +132 -0
  265. package/scripts/ui/readme-assets.mjs +30 -0
  266. package/scripts/ui/readme-shots.mjs +42 -0
  267. package/scripts/ui/record.mjs +225 -0
  268. package/scripts/ui/seed-admin.mjs +68 -0
  269. package/scripts/ui/seed-demo.mjs +83 -0
  270. package/scripts/ui/seed-industrial-demo.mjs +171 -0
  271. package/scripts/ui/shot-hero.mjs +25 -0
  272. package/scripts/ui/shots.mjs +75 -0
  273. package/scripts/ui/sim-ui-shot.mjs +16 -0
  274. package/scripts/ui/verify-nav.mjs +51 -0
  275. package/scripts/ui/verify-responsive.mjs +285 -0
  276. package/server/api/system/config-groups/[id].patch.ts +1 -1
  277. package/server/api/system/config-groups/index.post.ts +1 -1
  278. package/server/api/system/settings/events.get.ts +1 -1
  279. package/server/api/system/settings/index.patch.ts +1 -1
  280. package/server/api/workshop/agent-tools/invoke.post.ts +16 -2
  281. package/server/api/workshop/aml/datasets/[id].get.ts +8 -1
  282. package/server/api/workshop/daq/index.get.ts +3 -1
  283. package/server/api/workshop/daq/infra/reconnect.post.ts +1 -1
  284. package/server/api/workshop/daq/templates/[key].delete.ts +1 -0
  285. package/server/api/workshop/daq/templates/[key].patch.ts +1 -0
  286. package/server/api/workshop/daq/templates/index.post.ts +1 -0
  287. package/server/api/workshop/dcw/[id]/write.post.ts +10 -2
  288. package/server/api/workshop/dcw/[id].delete.ts +5 -2
  289. package/server/api/workshop/dcw/index.get.ts +5 -0
  290. package/server/api/workshop/dcw/lines/[id].patch.ts +1 -1
  291. package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -0
  292. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -0
  293. package/server/api/workshop/dcw/params/[id].delete.ts +19 -0
  294. package/server/api/workshop/dcw/params/[id].patch.ts +23 -0
  295. package/server/api/workshop/dcw/params/index.get.ts +27 -0
  296. package/server/api/workshop/dcw/params/index.post.ts +25 -0
  297. package/server/api/workshop/permissions/index.get.ts +3 -1
  298. package/server/plugins/aw-plugins.ts +23 -10
  299. package/server/plugins/dev-stability-guard.ts +3 -1
  300. package/server/plugins/system-config.ts +6 -1
  301. package/server/plugins-builtin/serial-bridge/client.mjs +210 -0
  302. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -0
  303. package/server/plugins-builtin/serial-bridge/i18n.json +62 -0
  304. package/server/plugins-builtin/serial-bridge/index.mjs +247 -0
  305. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -0
  306. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -0
  307. package/server/services/system-config.ts +28 -9
  308. package/server/services/workshop/agents/adapters/one-shot-cli-agent.ts +2 -1
  309. package/server/services/workshop/agents/agent-interface.ts +8 -6
  310. package/server/services/workshop/agents/base-agent.ts +18 -4
  311. package/server/services/workshop/agents/claude-agent.ts +7 -3
  312. package/server/services/workshop/agents/codex-agent.ts +3 -3
  313. package/server/services/workshop/agents/dsh-agent.ts +3 -3
  314. package/server/services/workshop/agents/goose-agent.ts +0 -1
  315. package/server/services/workshop/agents/harness-terminal.ts +14 -1
  316. package/server/services/workshop/agents/hermes-agent.ts +4 -2
  317. package/server/services/workshop/agents/host-tool-bridge.ts +5 -1
  318. package/server/services/workshop/agents/industrial-context.ts +4 -1
  319. package/server/services/workshop/agents/industrial-tools.ts +164 -6
  320. package/server/services/workshop/agents/omp-agent.ts +15 -9
  321. package/server/services/workshop/agents/opencode-agent.ts +47 -21
  322. package/server/services/workshop/agents/qwen-agent.ts +10 -5
  323. package/server/services/workshop/aml/entity.ts +3 -1
  324. package/server/services/workshop/aml/python-runtime.ts +3 -2
  325. package/server/services/workshop/daq/bus/mqtt.adapter.ts +8 -4
  326. package/server/services/workshop/daq/daq-controller.ts +25 -5
  327. package/server/services/workshop/daq/daq-runtime.ts +5 -3
  328. package/server/services/workshop/daq/drivers.ts +141 -11
  329. package/server/services/workshop/daq/host-ports.ts +3 -2
  330. package/server/services/workshop/daq/storage/timescale.adapter.ts +3 -1
  331. package/server/services/workshop/db/channel.repo.ts +4 -0
  332. package/server/services/workshop/db/ops.repo.ts +5 -2
  333. package/server/services/workshop/db/retention.ts +8 -3
  334. package/server/services/workshop/dcw/dcw-controller.ts +147 -16
  335. package/server/services/workshop/dcw/dcw-product.repo.ts +38 -1
  336. package/server/services/workshop/dcw/dcw-runtime.ts +3 -2
  337. package/server/services/workshop/dcw/drivers.ts +90 -4
  338. package/server/services/workshop/dcw/param-conversion.ts +78 -0
  339. package/server/services/workshop/dcw/param-limits.ts +142 -0
  340. package/server/services/workshop/dcw/param-map.repo.ts +305 -0
  341. package/server/services/workshop/dcw/plugin-bridge.ts +45 -0
  342. package/server/services/workshop/dcw/recipe-rollback-manager.ts +13 -7
  343. package/server/services/workshop/plugins/host.mjs +30 -0
  344. package/server/services/workshop/runtime/agent-runtime.ts +4 -0
  345. package/server/services/workshop/runtime/manager.ts +9 -2
  346. package/server/services/workshop/settings.ts +4 -2
  347. package/server/types/pg.d.ts +49 -0
  348. package/server/utils/stability-severity.ts +13 -2
  349. package/shared/config/groups.mjs +22 -1
  350. package/shared/config/home.d.mts +28 -0
  351. package/shared/daq-protocol.ts +15 -0
  352. package/shared/dcw-protocol.ts +136 -0
  353. package/uno.config.ts +12 -1
  354. package/.output/public/_nuxt/8NMOXZOV.js +0 -1
  355. package/.output/public/_nuxt/BFkgkW8u.js +0 -4
  356. package/.output/public/_nuxt/C5gUkRwn.js +0 -1
  357. package/.output/public/_nuxt/CM12FuB42.js +0 -1
  358. package/.output/public/_nuxt/CZiw7sEV.js +0 -1
  359. package/.output/public/_nuxt/Cc_9VzD42.js +0 -1
  360. package/.output/public/_nuxt/CdPzkOMV.js +0 -1
  361. package/.output/public/_nuxt/CmsOtOAA2.js +0 -1
  362. package/.output/public/_nuxt/D1YDxZpZ.js +0 -1
  363. package/.output/public/_nuxt/D20Yamr4.js +0 -1
  364. package/.output/public/_nuxt/DAe0h2MB.js +0 -1
  365. package/.output/public/_nuxt/DmqknNvV.js +0 -18
  366. package/.output/public/_nuxt/DnUuIR83.js +0 -1
  367. package/.output/public/_nuxt/S_fVQwJK.js +0 -1
  368. package/.output/public/_nuxt/TownView.0oLiQgTC.css +0 -1
  369. package/.output/public/_nuxt/_id_.D-SYuyZb.css +0 -1
  370. package/.output/public/_nuxt/_id_.hma_BU6T.css +0 -1
  371. package/.output/public/_nuxt/_wsId_.B12v3PhY.css +0 -1
  372. package/.output/public/_nuxt/agents.BV70ioCv.css +0 -1
  373. package/.output/public/_nuxt/ahgEJu2R.js +0 -1
  374. package/.output/public/_nuxt/aml.COEKNNqK.css +0 -1
  375. package/.output/public/_nuxt/builds/meta/4457d63f-0866-4cea-b320-04a321f24795.json +0 -1
  376. package/.output/public/_nuxt/channel-templates.C-M5nKcC.css +0 -1
  377. package/.output/public/_nuxt/daq.B3265ZDn.css +0 -1
  378. package/.output/public/_nuxt/dcw.DLYZqEhT.css +0 -1
  379. package/.output/public/_nuxt/default.BXI_fZUi.css +0 -1
  380. package/.output/public/_nuxt/entry.BB-Eeh-J.css +0 -1
  381. package/.output/public/_nuxt/logs.CqFyMrJw.css +0 -1
  382. package/.output/public/_nuxt/monitor.B--1dPzs.css +0 -1
  383. package/.output/public/_nuxt/pages.ooEzrMm9.css +0 -1
  384. package/.output/public/_nuxt/permissions.B1pjGChZ.css +0 -1
  385. package/.output/public/_nuxt/plugins.5e5chZ67.css +0 -1
  386. package/.output/public/_nuxt/pz2JDAM7.js +0 -2
  387. package/.output/public/_nuxt/settings.Dm3M0RLy.css +0 -1
  388. package/.output/public/_nuxt/teams.BC75EGnR.css +0 -1
  389. package/.output/public/_nuxt/tokens.xRb1fSPU.css +0 -1
  390. package/.output/public/_nuxt/users.CXnP2E08.css +0 -1
  391. package/.output/public/_nuxt/workshop.Jk5HxWPE.css +0 -1
  392. package/.output/server/chunks/build/TownView-jVazYOjN.mjs.map +0 -1
  393. package/.output/server/chunks/build/_id_-CfVosNg3.mjs.map +0 -1
  394. package/.output/server/chunks/build/_id_-Hwr4rZpr.mjs.map +0 -1
  395. package/.output/server/chunks/build/agents-Bvin73QY.mjs.map +0 -1
  396. package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +0 -1
  397. package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +0 -1
  398. package/.output/server/chunks/build/settings-DoQ2Oq3P.mjs.map +0 -1
  399. package/.output/server/chunks/build/teams-2kz3CusY.mjs.map +0 -1
  400. package/.output/server/chunks/build/town-BOl6hs9B.mjs.map +0 -1
  401. package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs.map +0 -1
  402. package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs.map +0 -1
  403. package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +0 -1
  404. /package/.output/public/_nuxt/{36oeS8_R2.js → 36oeS8_R.js} +0 -0
  405. /package/.output/public/_nuxt/{CYWVXZTS.js → CYWVXZTS2.js} +0 -0
@@ -0,0 +1 @@
1
+ import{dt as e}from"./CSkxz2NX.js";import{t}from"./36oeS8_R.js";import{t as n}from"./D0ZBQrN_2.js";import{t as r}from"./BDmh31hl.js";var i=40,a=(e,t)=>r({base:`/api/workshop/ops-logs`,path:e,init:t});function o(e){return{id:0,actor:e.actor,actorName:e.actorName||e.actor,actorKind:e.actorKind,action:e.action,targetKind:e.targetKind,targetId:e.targetId,detailJson:``,at:e.at,lineId:e.lineId,productId:e.productId,recipeId:e.recipeId,kind:e.kind,summary:e.summary}}var s=()=>{let r=e([]),s=e([]),c=e({list:!1,posting:!1}),l=e({list:``,post:``}),u=0,d=null;function f(){u++,u===1&&(m(),d=t().subscribe(p));let e=!1;return()=>{e||(e=!0,--u===0&&(d?.(),d=null))}}function p(e){if(e.type===`ops.log`){let t=o(e.payload);r.some(e=>e.at===t.at&&e.actor===t.actor&&e.action===t.action)||(r.unshift(t),r.length>i&&r.splice(i))}}async function m(){try{let e=await a(`?limit=15`);for(let t of(e.logs??[]).reverse())r.some(e=>e.at===t.at&&e.actor===t.actor&&e.action===t.action)||r.unshift(t)}catch{}}async function h(e={}){c.list=!0,l.list=``;try{let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!=null&&r!==``&&t.set(n,String(r));let n=await a(`?${t.toString()}`);s.splice(0,s.length,...n.logs??[])}catch(e){l.list=n(e)}finally{c.list=!1}}async function g(e){c.posting=!0,l.post=``;try{await a(``,{method:`POST`,body:JSON.stringify(e)})}catch(e){throw l.post=n(e),e}finally{c.posting=!1}}return e({recent:r,results:s,loading:c,error:l,ensureLive:f,fetchLogs:h,postManual:g})},c=`__opsLogStream`;function l(){let e=globalThis;return e[c]||(e[c]=s()),e[c]}export{l as t};
@@ -1 +1 @@
1
- import{a as e,c as t}from"./BU83-NnX.js";import{$ as n,R as r,S as i,Ut as a,V as o,W as s,b as c,d as l,dt as u,f as d,h as f,i as p,m,p as h,pt as g,tt as _,y as v}from"./CSkxz2NX.js";import{f as y}from"./D6uzXueg.js";import{d as b}from"./BJHKLJJU.js";import{s as x}from"./YnQxK3eG.js";import{n as S}from"./KZQX7xoM.js";import{n as C,t as w}from"./zIGh7R49.js";import{i as ee}from"./DBHNsT1Y.js";import{i as te,r as ne,t as re}from"./BCGafdXT.js";import{t as T}from"./BYhEUx8t.js";import{t as E}from"./Dz_Q3Lpw2.js";import{t as D}from"./DIaZ2PTo2.js";import{t as O}from"./BDNMzG2s2.js";import{t as k}from"./D0ZBQrN_2.js";var A={class:`perm-page`},j={class:`aw-page-head`},ie={class:`pg-sub`},ae=[`onClick`],M={key:0,class:`dim`},N={class:`sec`},P={class:`detail`},F={class:`sec`},I={key:0,class:`ch-list`},L={key:1,class:`dim`},R={class:`sec`},z={class:`hint`},B={class:`matrix`},V=[`title`],H=O(i({__name:`index`,setup(i){let{t:O}=S(),H=D(),U=g([]),W=g([]),G=g(!1),K=g(``),q=g(!1),J=g(null),Y=u({}),X=g(!1);function Z(){let e=H.token;return e?{authorization:`Bearer ${e}`}:{}}async function oe(){G.value=!0;try{let e=await x(`/api/workshop/permissions`,{headers:Z()});if(e.code!==0||!e.data)throw Error(`load fail`);U.value=e.data.lines??[],W.value=e.data.users??[]}catch(t){e.error(k(t,O(`permissions.loadFail`)))}finally{G.value=!1}}let se=l(()=>{let e=K.value.trim().toLowerCase();return e?W.value.filter(t=>`${t.name} ${t.email}`.toLowerCase().includes(e)):W.value});function Q(e){J.value=e,ce(e),q.value=!0}function ce(e){for(let e of Object.keys(Y))Reflect.deleteProperty(Y,e);for(let t of U.value){let n=e.grants.find(e=>e.lineId===t.id);Y[t.id]=n?.mode===`readonly`||n?.mode===`operate`?n.mode:`none`}}let $=l(()=>{if(!J.value)return 0;let e=0;for(let t of U.value){let n=J.value.grants.find(e=>e.lineId===t.id),r=n?.mode===`readonly`||n?.mode===`operate`?n.mode:`none`;(Y[t.id]??`none`)!==r&&e++}return e});async function le(){if(J.value){X.value=!0;try{let t=U.value.filter(e=>(Y[e.id]??`none`)!==`none`).map(e=>({lineId:e.id,mode:Y[e.id]})),n=U.value.filter(e=>(Y[e.id]??`none`)===`none`&&J.value.grants.some(t=>t.lineId===e.id)).map(e=>({lineId:e.id,mode:null})),r=await x(`/api/workshop/permissions`,{method:`PUT`,headers:Z(),body:{userId:J.value.id,grants:[...t,...n]}});if(r.code!==0||!r.data)throw Error(`save fail`);J.value.grants=r.data.grants;let i=W.value.find(e=>e.id===J.value?.id);i&&(i.grants=r.data.grants),e.success(O(`permissions.saved`,{n:t.length+n.length}))}catch(t){e.error(k(t,O(`permissions.saveFail`)))}finally{X.value=!1}}}function ue(e){return O(e===`operate`?`permissions.operate`:e===`readonly`?`permissions.readonly`:`permissions.none`)}return n(()=>H.isLoggedIn,e=>{e&&!H.isAdmin&&b(`/`)},{immediate:!0}),r(oe),(e,n)=>{let r=ee,i=C,l=re,u=t,g=w,b=T,x=ne,S=te,D=E;return o(),f(`div`,A,[d(`header`,j,[d(`div`,null,[n[2]||=d(`p`,{class:`aw-kicker`},` agentworkshop / permissions `,-1),d(`h1`,null,a(e.$t(`permissions.title`)),1),d(`p`,ie,a(e.$t(`permissions.subtitle`)),1)]),c(r,{value:K.value,"onUpdate:value":n[0]||=e=>K.value=e,placeholder:e.$t(`permissions.search`),style:{"max-width":`260px`},"allow-clear":``},null,8,[`value`,`placeholder`])]),c(b,{bordered:!1,class:`table-card`},{default:_(()=>[c(g,{"data-source":se.value,loading:G.value,"row-key":`id`,size:`middle`,pagination:{pageSize:12,showSizeChanger:!1}},{default:_(()=>[c(i,{title:e.$t(`permissions.colUser`),"data-index":`name`},{default:_(({record:e})=>[d(`a`,{onClick:y(t=>Q(e),[`prevent`])},a(e.name),9,ae)]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colEmail`),"data-index":`email`},null,8,[`title`]),c(i,{title:e.$t(`permissions.colRole`),"data-index":`role`},{default:_(({record:e})=>[c(l,{color:e.role===`admin`?`green`:e.role===`editor`?`blue`:`default`},{default:_(()=>[v(a(e.role),1)]),_:2},1032,[`color`])]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colStatus`),"data-index":`status`},{default:_(({record:t})=>[c(l,{color:t.status===`active`?`cyan`:`red`},{default:_(()=>[v(a(t.status===`active`?e.$t(`permissions.active`):t.status),1)]),_:2},1032,[`color`])]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colChannels`),"data-index":`channels`},{default:_(({record:e})=>[v(a(e.channels.length),1)]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colGrants`),"data-index":`grants`},{default:_(({record:e})=>[(o(!0),f(p,null,s(e.grants,e=>(o(),h(l,{key:e.lineId,style:{"margin-bottom":`2px`}},{default:_(()=>[v(a((U.value.find(t=>t.id===e.lineId)?.name??e.lineId).slice(0,14))+` · `+a(ue(e.mode)),1)]),_:2},1024))),128)),e.grants.length?m(``,!0):(o(),f(`span`,M,`—`))]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colOps`),width:90},{default:_(({record:t})=>[c(u,{size:`small`,onClick:e=>Q(t)},{default:_(()=>[v(a(e.$t(`permissions.manage`)),1)]),_:1},8,[`onClick`])]),_:1},8,[`title`])]),_:1},8,[`data-source`,`loading`])]),_:1}),c(D,{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e,title:J.value?`${J.value.name} · ${e.$t(`permissions.detail`)}`:``,width:`560`},{default:_(()=>[J.value?(o(),f(p,{key:0},[d(`h4`,N,a(e.$t(`permissions.secProfile`)),1),d(`dl`,P,[n[3]||=d(`dt`,null,`email`,-1),d(`dd`,null,a(J.value.email),1),n[4]||=d(`dt`,null,`role`,-1),d(`dd`,null,a(J.value.role),1),n[5]||=d(`dt`,null,`status`,-1),d(`dd`,null,a(J.value.status),1),n[6]||=d(`dt`,null,`created`,-1),d(`dd`,null,a(J.value.createdAt),1)]),d(`h4`,F,a(e.$t(`permissions.secChannels`))+`(`+a(J.value.channels.length)+`) `,1),J.value.channels.length?(o(),f(`div`,I,[(o(!0),f(p,null,s(J.value.channels,e=>(o(),f(`code`,{key:e.id},a(e.name||e.id.slice(0,8)),1))),128))])):(o(),f(`p`,L,a(e.$t(`permissions.noChannels`)),1)),d(`h4`,R,[v(a(e.$t(`permissions.secMatrix`))+` `,1),c(u,{type:`primary`,size:`small`,loading:X.value,disabled:$.value===0,style:{"margin-left":`12px`},onClick:le},{default:_(()=>[v(a(e.$t(`permissions.save`,{n:$.value})),1)]),_:1},8,[`loading`,`disabled`])]),d(`p`,z,a(e.$t(`permissions.matrixHint`)),1),d(`div`,B,[(o(!0),f(p,null,s(U.value,t=>(o(),f(`div`,{key:t.id,class:`row`},[d(`span`,{class:`line-name`,title:t.id},a(t.name),9,V),c(S,{value:Y[t.id],"onUpdate:value":e=>Y[t.id]=e,size:`small`},{default:_(()=>[c(x,{value:`none`},{default:_(()=>[v(a(e.$t(`permissions.none`)),1)]),_:1}),c(x,{value:`readonly`},{default:_(()=>[v(a(e.$t(`permissions.readonly`)),1)]),_:1}),c(x,{value:`operate`},{default:_(()=>[v(a(e.$t(`permissions.operate`)),1)]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]))),128))])],64)):m(``,!0)]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-96694c07`]]);export{H as default};
1
+ import{a as e,c as t}from"./BU83-NnX.js";import{$ as n,R as r,S as i,Ut as a,V as o,W as s,b as c,d as l,dt as u,f as d,h as f,i as p,m,p as h,pt as g,tt as _,y as v}from"./CSkxz2NX.js";import{f as y}from"./D6uzXueg.js";import{d as b}from"./BJHKLJJU.js";import{s as x}from"./YnQxK3eG.js";import{n as S}from"./KZQX7xoM.js";import{n as C,t as w}from"./BneN7fbu.js";import{i as ee}from"./DBHNsT1Y.js";import{i as te,r as ne,t as re}from"./BCGafdXT.js";import{t as T}from"./BYhEUx8t.js";import{t as E}from"./Dz_Q3Lpw2.js";import{t as D}from"./DIaZ2PTo2.js";import{t as O}from"./BDNMzG2s2.js";import{t as k}from"./D0ZBQrN_2.js";var A={class:`perm-page`},j={class:`aw-page-head`},ie={class:`pg-sub`},ae=[`onClick`],M={key:0,class:`dim`},N={class:`sec`},P={class:`detail`},F={class:`sec`},I={key:0,class:`ch-list`},L={key:1,class:`dim`},R={class:`sec`},z={class:`hint`},B={class:`matrix`},V=[`title`],H=O(i({__name:`index`,setup(i){let{t:O}=S(),H=D(),U=g([]),W=g([]),G=g(!1),K=g(``),q=g(!1),J=g(null),Y=u({}),X=g(!1);function Z(){let e=H.token;return e?{authorization:`Bearer ${e}`}:{}}async function oe(){G.value=!0;try{let e=await x(`/api/workshop/permissions`,{headers:Z()});if(e.code!==0||!e.data)throw Error(`load fail`);U.value=e.data.lines??[],W.value=e.data.users??[]}catch(t){e.error(k(t,O(`permissions.loadFail`)))}finally{G.value=!1}}let se=l(()=>{let e=K.value.trim().toLowerCase();return e?W.value.filter(t=>`${t.name} ${t.email}`.toLowerCase().includes(e)):W.value});function Q(e){J.value=e,ce(e),q.value=!0}function ce(e){for(let e of Object.keys(Y))Reflect.deleteProperty(Y,e);for(let t of U.value){let n=e.grants.find(e=>e.lineId===t.id);Y[t.id]=n?.mode===`readonly`||n?.mode===`operate`?n.mode:`none`}}let $=l(()=>{if(!J.value)return 0;let e=0;for(let t of U.value){let n=J.value.grants.find(e=>e.lineId===t.id),r=n?.mode===`readonly`||n?.mode===`operate`?n.mode:`none`;(Y[t.id]??`none`)!==r&&e++}return e});async function le(){if(J.value){X.value=!0;try{let t=U.value.filter(e=>(Y[e.id]??`none`)!==`none`).map(e=>({lineId:e.id,mode:Y[e.id]})),n=U.value.filter(e=>(Y[e.id]??`none`)===`none`&&J.value.grants.some(t=>t.lineId===e.id)).map(e=>({lineId:e.id,mode:null})),r=await x(`/api/workshop/permissions`,{method:`PUT`,headers:Z(),body:{userId:J.value.id,grants:[...t,...n]}});if(r.code!==0||!r.data)throw Error(`save fail`);J.value.grants=r.data.grants;let i=W.value.find(e=>e.id===J.value?.id);i&&(i.grants=r.data.grants),e.success(O(`permissions.saved`,{n:t.length+n.length}))}catch(t){e.error(k(t,O(`permissions.saveFail`)))}finally{X.value=!1}}}function ue(e){return O(e===`operate`?`permissions.operate`:e===`readonly`?`permissions.readonly`:`permissions.none`)}return n(()=>H.isLoggedIn,e=>{e&&!H.isAdmin&&b(`/`)},{immediate:!0}),r(oe),(e,n)=>{let r=ee,i=C,l=re,u=t,g=w,b=T,x=ne,S=te,D=E;return o(),f(`div`,A,[d(`header`,j,[d(`div`,null,[n[2]||=d(`p`,{class:`aw-kicker`},` agentworkshop / permissions `,-1),d(`h1`,null,a(e.$t(`permissions.title`)),1),d(`p`,ie,a(e.$t(`permissions.subtitle`)),1)]),c(r,{value:K.value,"onUpdate:value":n[0]||=e=>K.value=e,placeholder:e.$t(`permissions.search`),style:{"max-width":`260px`},"allow-clear":``},null,8,[`value`,`placeholder`])]),c(b,{bordered:!1,class:`table-card`},{default:_(()=>[c(g,{"data-source":se.value,loading:G.value,"row-key":`id`,size:`middle`,pagination:{pageSize:12,showSizeChanger:!1}},{default:_(()=>[c(i,{title:e.$t(`permissions.colUser`),"data-index":`name`},{default:_(({record:e})=>[d(`a`,{onClick:y(t=>Q(e),[`prevent`])},a(e.name),9,ae)]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colEmail`),"data-index":`email`},null,8,[`title`]),c(i,{title:e.$t(`permissions.colRole`),"data-index":`role`},{default:_(({record:e})=>[c(l,{color:e.role===`admin`?`green`:e.role===`editor`?`blue`:`default`},{default:_(()=>[v(a(e.role),1)]),_:2},1032,[`color`])]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colStatus`),"data-index":`status`},{default:_(({record:t})=>[c(l,{color:t.status===`active`?`cyan`:`red`},{default:_(()=>[v(a(t.status===`active`?e.$t(`permissions.active`):t.status),1)]),_:2},1032,[`color`])]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colChannels`),"data-index":`channels`},{default:_(({record:e})=>[v(a(e.channels.length),1)]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colGrants`),"data-index":`grants`},{default:_(({record:e})=>[(o(!0),f(p,null,s(e.grants,e=>(o(),h(l,{key:e.lineId,style:{"margin-bottom":`2px`}},{default:_(()=>[v(a((U.value.find(t=>t.id===e.lineId)?.name??e.lineId).slice(0,14))+` · `+a(ue(e.mode)),1)]),_:2},1024))),128)),e.grants.length?m(``,!0):(o(),f(`span`,M,`—`))]),_:1},8,[`title`]),c(i,{title:e.$t(`permissions.colOps`),width:90},{default:_(({record:t})=>[c(u,{size:`small`,onClick:e=>Q(t)},{default:_(()=>[v(a(e.$t(`permissions.manage`)),1)]),_:1},8,[`onClick`])]),_:1},8,[`title`])]),_:1},8,[`data-source`,`loading`])]),_:1}),c(D,{open:q.value,"onUpdate:open":n[1]||=e=>q.value=e,title:J.value?`${J.value.name} · ${e.$t(`permissions.detail`)}`:``,width:`560`},{default:_(()=>[J.value?(o(),f(p,{key:0},[d(`h4`,N,a(e.$t(`permissions.secProfile`)),1),d(`dl`,P,[n[3]||=d(`dt`,null,`email`,-1),d(`dd`,null,a(J.value.email),1),n[4]||=d(`dt`,null,`role`,-1),d(`dd`,null,a(J.value.role),1),n[5]||=d(`dt`,null,`status`,-1),d(`dd`,null,a(J.value.status),1),n[6]||=d(`dt`,null,`created`,-1),d(`dd`,null,a(J.value.createdAt),1)]),d(`h4`,F,a(e.$t(`permissions.secChannels`))+`(`+a(J.value.channels.length)+`) `,1),J.value.channels.length?(o(),f(`div`,I,[(o(!0),f(p,null,s(J.value.channels,e=>(o(),f(`code`,{key:e.id},a(e.name||e.id.slice(0,8)),1))),128))])):(o(),f(`p`,L,a(e.$t(`permissions.noChannels`)),1)),d(`h4`,R,[v(a(e.$t(`permissions.secMatrix`))+` `,1),c(u,{type:`primary`,size:`small`,loading:X.value,disabled:$.value===0,style:{"margin-left":`12px`},onClick:le},{default:_(()=>[v(a(e.$t(`permissions.save`,{n:$.value})),1)]),_:1},8,[`loading`,`disabled`])]),d(`p`,z,a(e.$t(`permissions.matrixHint`)),1),d(`div`,B,[(o(!0),f(p,null,s(U.value,t=>(o(),f(`div`,{key:t.id,class:`row`},[d(`span`,{class:`line-name`,title:t.id},a(t.name),9,V),c(S,{value:Y[t.id],"onUpdate:value":e=>Y[t.id]=e,size:`small`},{default:_(()=>[c(x,{value:`none`},{default:_(()=>[v(a(e.$t(`permissions.none`)),1)]),_:1}),c(x,{value:`readonly`},{default:_(()=>[v(a(e.$t(`permissions.readonly`)),1)]),_:1}),c(x,{value:`operate`},{default:_(()=>[v(a(e.$t(`permissions.operate`)),1)]),_:1})]),_:1},8,[`value`,`onUpdate:value`])]))),128))])],64)):m(``,!0)]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-0e401f84`]]);export{H as default};
@@ -0,0 +1 @@
1
+ import{i as e,s as t}from"./YnQxK3eG.js";import{t as n}from"./DIaZ2PTo2.js";async function r(e,r={}){let i=n().token;return await t(e,{...r,headers:{authorization:`Bearer ${i}`,...r.headers}})}var i=`workshop.activeChannel`,a=`workshop.activeWorkspace`,o=()=>typeof localStorage<`u`;function s(){if(!o())return{};try{return JSON.parse(localStorage.getItem(i)??`{}`)}catch{return{}}}function c(e){o()&&localStorage.setItem(i,JSON.stringify(e))}var l=e(`workshop.workspaces`,{state:()=>({workspaces:[],loaded:!1}),getters:{activeWorkspaceId(e){return o()?localStorage.getItem(a)??e.workspaces[0]?.id??null:e.workspaces[0]?.id??null}},actions:{setActiveWorkspaceId(e){o()&&localStorage.setItem(a,e??``)},async load(){let e=await r(`/api/workshop/workspaces`);if(e.code!==0)throw Error(e.message??`加载失败`);let t=s();this.workspaces=(e.data??[]).map(e=>{let n=e.channelIds??[],r=t[e.id],i=r&&n.includes(r)?r:void 0;return r!==i&&(i?t[e.id]=i:Reflect.deleteProperty(t,e.id)),{id:e.id,name:e.name,channelIds:n,activeChannelId:i}}),c(t),this.loaded=!0},async create(e){let t=await r(`/api/workshop/workspaces`,{method:`POST`,body:{name:e}});if(t.code!==0||!t.data)throw Error(t.message??`创建失败`);let n={id:t.data.id,name:t.data.name,channelIds:[]};return this.workspaces.push(n),n},async remove(e){await r(`/api/workshop/workspaces/${e}`,{method:`DELETE`}),this.workspaces=this.workspaces.filter(t=>t.id!==e)},async rename(e,t){let n=this.workspaces.find(t=>t.id===e);n&&(n.name=t)},async mountChannel(e,t){let n=this.workspaces.find(t=>t.id===e);!n||n.channelIds.includes(t)||(await r(`/api/workshop/workspaces/${e}/channels/${t}`,{method:`POST`}),n.channelIds.push(t),n.activeChannelId||(n.activeChannelId=t,this.persistActive(n)))},async unmountChannel(e,t){let n=this.workspaces.find(t=>t.id===e);n&&(await r(`/api/workshop/workspaces/${e}/channels/${t}`,{method:`DELETE`}),n.channelIds=n.channelIds.filter(e=>e!==t),n.activeChannelId===t&&(n.activeChannelId=n.channelIds[0]),this.persistActive(n))},setActiveChannel(e,t){let n=this.workspaces.find(t=>t.id===e);n&&n.channelIds.includes(t)&&(n.activeChannelId=t,this.persistActive(n))},persistActive(e){let t=s();e.activeChannelId?t[e.id]=e.activeChannelId:Reflect.deleteProperty(t,e.id),c(t)}}});export{l as t};
@@ -0,0 +1 @@
1
+ import{Ht as e,S as t,Ut as n,V as r,Vt as i,W as a,b as ee,d as o,dt as s,f as c,h as l,i as u,m as d,nt as f,pt as p,tt as te,xt as m,y as h,z as ne}from"./CSkxz2NX.js";import{c as g,f as _,l as v,s as re}from"./D6uzXueg.js";import{a as ie}from"./C__m4EhR.js";import{t as ae}from"./BHA40aHa.js";import{n as oe}from"./KZQX7xoM.js";import{t as se}from"./DZtm4l-P2.js";import{t as y}from"./BDNMzG2s2.js";import{t as b}from"./D0ZBQrN_2.js";import{t as ce}from"./D98NH8kG.js";import{n as le,t as ue}from"./ca4TJ3Op.js";import{t as de}from"./C3J6FYKa.js";var fe={key:0,class:`page`},pe={class:`banner bad`},me={key:1,class:`page`},he={class:`aw-page-head`},ge={class:`aw-kicker`},_e={class:`sub`},ve={class:`badges mono`},ye={class:`badge`},be={class:`badge`},xe={class:`badge`},Se={class:`aw-tile ctrl-card`},Ce={class:`ctrl-left`},we=[`title`],Te={class:`ctrl-right`},Ee={class:`ctrl-metrics mono`},De=[`title`],Oe=[`title`],ke=[`title`],Ae={key:1,class:`aw-tile adopt-card`},je={class:`adopt-title`},Me={class:`adopt-list`},Ne=[`onClick`],Pe=[`onClick`],Fe={class:`aw-tile line-card`},Ie={class:`line-status`},Le={class:`line-info`},Re={key:0,class:`mono dim`},ze={key:1,class:`dim`},Be={class:`line-ctl`},Ve={class:`ctl-sel`},He={value:``},Ue=[`value`],We={class:`ctl-sel`},Ge=[`disabled`],Ke={value:``},qe=[`value`,`disabled`],Je=[`disabled`,`title`],Ye=[`disabled`],Xe={key:0,class:`banner bad`,style:{"margin-top":`10px`}},Ze={key:1,class:`banner good`,style:{"margin-top":`10px`}},Qe={class:`modal`},$e={class:`m-title`},et={class:`dim mono`},tt={class:`dim tpl-hint`},nt={class:`tpl-chips`},rt=[`title`],it={class:`mono`},at={class:`sec-label`},ot={class:`f-grid tpl-form`},st={class:`f`},ct=[`placeholder`],lt={class:`f`},ut=[`placeholder`],dt={class:`f`},ft={class:`f`},pt={class:`f`},mt=[`placeholder`],ht={class:`f`},gt=[`placeholder`],_t={class:`f`},vt={class:`f`},yt=[`value`],bt={class:`f`},xt=[`placeholder`],St={key:0,class:`banner good`,style:{"margin-top":`10px`}},Ct={key:1,class:`m-err`},wt={class:`m-actions`},Tt=[`disabled`],Et={class:`modal`},Dt={class:`m-title`},Ot={class:`seg-row`},kt={class:`f-grid`},At={class:`f`},jt=[`value`],Mt={class:`f`},Nt=[`placeholder`],Pt={class:`f`},Ft=[`placeholder`],It={class:`f`},Lt=[`placeholder`],Rt={class:`f-grid cal-form`},zt={class:`f`},Bt={value:`none`},Vt={class:`f`},Ht={style:{display:`flex`,gap:`6px`}},Ut=[`disabled`],Wt=[`disabled`],Gt={class:`f-grid`},Kt={class:`f`},qt=[`value`],Jt={key:0,class:`f-grid driver-form`},Yt={key:0,style:{color:`var(--tone-danger-dot)`,"font-style":`normal`}},Xt=[`onUpdate:modelValue`],Zt=[`value`],Qt=[`onUpdate:modelValue`,`type`,`placeholder`],$t={key:2,class:`hint`},en={class:`test-row`},tn=[`disabled`],nn={class:`f`},rn=[`placeholder`],an={key:1,class:`m-err`},on={class:`m-actions`},sn=[`disabled`],cn={class:`aw-tile table-card`},ln={class:`nodes-table`},un={class:`right`},dn={class:`mono dim`},fn={class:`mono ch`},pn=[`disabled`,`title`,`onClick`],mn={key:0,class:`st-pill paused`},hn={class:`mono val`},gn={key:0,class:`dim`},_n={class:`mono val`},vn=[`title`],yn={key:0,class:`dim`},bn=[`disabled`,`title`,`onClick`],xn={class:`write-row`},Sn=[`onUpdate:modelValue`,`placeholder`,`min`,`max`,`step`,`disabled`,`title`],Cn=[`disabled`,`title`,`onClick`],wn={class:`mono dim`},Tn={class:`mono`},En=[`title`],Dn={class:`right`},On=[`onClick`],kn={key:0},An={colspan:`9`},jn={class:`pane-empty`,style:{"min-height":`120px`}},Mn={class:`pe-sub`},Nn={class:`aw-tile recipe-card`},Pn={class:`recipe-hd`},Fn={class:`panel-tag mono`},In={class:`recipe-sub`},Ln={key:0,class:`product-row`},Rn=[`title`,`onClick`],zn=[`title`,`onClick`],Bn={key:1,class:`dim`,style:{margin:`6px 0 12px`,"font-size":`12px`}},Vn={class:`recipe-grid`},Hn={class:`recipe-name`},Un=[`title`],Wn={class:`dim`},Gn={class:`mono dim`},Kn={key:0,class:`dim desc`},qn={class:`recipe-params mono`},Jn=[`title`],Yn={key:0,class:`chip-stale-tag`},Xn=[`title`],Zn={key:0,class:`chip-stale-tag`},Qn={class:`recipe-actions`},$n=[`onClick`],er=[`onClick`],tr=[`onClick`],nr={key:0,class:`mono`},rr=[`onClick`],ir={key:0,class:`pane-empty`,style:{"grid-column":`1 / -1`}},ar={key:2,class:`banner good`},or=[`disabled`],sr={key:3,class:`runs`},cr={class:`sec-label`},lr={class:`nodes-table`},ur={class:`right`},dr={class:`mono`},fr={class:`mono dim`},pr={class:`right`},mr=[`disabled`,`onClick`],hr=[`onClick`],gr={class:`modal`},_r={class:`m-title`},vr={class:`sec-label`},yr={class:`nodes-table`},br={class:`mono dim`},xr={class:`mono`},Sr={class:`mono`},Cr={class:`mono dim`},wr={class:`mono dim`},Tr={key:0},Er={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},Dr={class:`sec-label`},Or={class:`nodes-table`},kr={class:`mono`},Ar={class:`mono dim`},jr={class:`mono dim`},Mr={key:0},Nr={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},Pr={class:`m-actions`},Fr={class:`modal`},Ir={class:`m-title`},Lr={class:`f-grid`},Rr={class:`f`},zr=[`value`],Br={class:`f`},Vr=[`placeholder`],Hr={class:`f`},Ur=[`placeholder`],Wr={class:`sec-label`},Gr={class:`f`},Kr=[`onUpdate:modelValue`],qr=[`value`],Jr={key:0,class:`row-stale`},Yr={class:`f`},Xr=[`onUpdate:modelValue`],Zr={class:`f`},Qr=[`onUpdate:modelValue`,`placeholder`],$r={class:`f`},ei=[`onUpdate:modelValue`,`placeholder`],ti=[`onClick`],ni={class:`sec-label`},ri={class:`f`},ii=[`onUpdate:modelValue`],ai=[`value`],oi={class:`f`},si=[`onUpdate:modelValue`],ci={class:`f`},li=[`onUpdate:modelValue`],ui=[`onClick`],di=[`disabled`,`title`],fi={key:0,class:`m-note`},pi={key:1,class:`m-err`},mi={class:`m-actions`},hi=[`disabled`],gi={class:`modal`,style:{"max-width":`760px`}},_i={class:`modal-head`},vi={key:0,class:`dim`,style:{"margin-left":`8px`,"font-size":`12px`}},yi={key:0,class:`banner good`,style:{margin:`6px 0`}},bi={key:1,class:`dim`},xi={key:2,class:`pane-empty`},Si={class:`ver-head`},Ci={class:`mono ver-v`},wi={class:`mono dim`},Ti={class:`ver-actor`},Ei=[`onClick`],Di={key:0,class:`ver-desc`},Oi={class:`ver-diff mono`},ki={class:`aw-tile query-card`},Ai={class:`sec-label`},ji={class:`q-grid`},Mi={class:`f`},Ni={value:``},Pi=[`value`],Fi={class:`f`},Ii=[`disabled`],Li={value:``},Ri=[`value`],zi={class:`f`},Bi={value:``},Vi=[`value`],Hi={class:`f`},Ui={value:``},Wi=[`value`],Gi={class:`f`},Ki={class:`f`},qi={class:`f q-actions`},Ji=[`disabled`],Yi={key:0,class:`banner bad`,style:{"margin-top":`8px`}},Xi={key:1,class:`q-result`},Zi={class:`nodes-table`},Qi={class:`mono dim`},$i={class:`mono`},ea={class:`mono`},ta={class:`mono`},na={class:`mono dim`},ra={key:6,class:`aw-tile table-card`},ia={class:`sec-label`},aa={class:`nodes-table`},oa={class:`mono dim`},sa={class:`mono`},ca={class:`mono dim`},la={class:`dim`},ua={class:`modal`},da={class:`m-title`},fa={class:`f-grid`},pa={class:`f`},ma=[`placeholder`],ha={class:`f`},ga=[`placeholder`],_a={key:0,class:`m-err`},va={class:`m-actions`},ya=[`disabled`],ba={key:8,class:`err`},xa={class:`aw-tile ledger-card`},Sa={class:`ledger-head`},Ca={value:``},wa=[`value`],Ta={class:`ledger-tri`},Ea={class:`tri-cell`},Da={class:`mono`},Oa={class:`tri-cell`},ka={class:`mono`},Aa={class:`tri-cell`},ja={class:`mono`},Ma={class:`ledger-cols`},Na={class:`ledger-col`},Pa={class:`sec-t`},Fa={class:`ledger-list mono`},Ia={class:`ledger-col`},La={class:`sec-t`},Ra={class:`ledger-list`},za={class:`mono`},Ba=y(t({__name:`[id]`,setup(t){let{t:y}=oe(),Ba=ie(),x=ue(),Va=ce(),Ha=de();Va.load();let S=o(()=>String(Ba.params.id??``)),Ua=o(()=>x.lines.find(e=>e.id===S.value)),C=o(()=>x.lineStateOf(S.value));x.load();let Wa=x.ensureWsFeed();ne(()=>Wa());let Ga=e=>(e.deviceIds??(e.deviceBindingId?[e.deviceBindingId]:[])).map(e=>Ka(e)).join(` / `)||`—`,Ka=e=>e?Ha.twins.find(t=>t.id===e)?.name??e:y(`dcwDetail.k3own4q121`),qa={idle:y(`dcwDetail.k3zgkk122`),writing:y(`dcwDetail.k3l3h80123`),ok:`已 ACK`,error:y(`dcwDetail.k40reu124`),offline:y(`dcwDetail.k44c2n125`)};function Ja(e){let t=e??``;return x.templates.find(e=>e.key===(t.startsWith(`dcw-`)?t.slice(4):t))?.ch??t}function Ya(e){return x.nodeById(e)?.min}function Xa(e){return x.nodeById(e)?.max}let w=o(()=>Va.nodes.filter(e=>e.lineId===S.value)),T=p(``),E=p(null),Za=p(!1);async function Qa(){if(T.value){Za.value=!0;try{E.value=await x.fetchLedger(T.value)}finally{Za.value=!1}}}async function $a(){T.value&&(await x.rollbackNode(T.value),await Qa())}function eo(e){return Va.nodeById(e)?.name??e}let D=o(()=>x.nodes.filter(e=>e.lineId===S.value)),O=o(()=>x.products.filter(e=>e.lineId===S.value)),to=o(()=>x.recipes.filter(e=>e.lineId===S.value)),no=o(()=>x.runs.filter(e=>e.lineId===S.value)),ro=o(()=>{let e=new Set(D.value.map(e=>e.id));return x.history.filter(t=>e.has(t.nodeId))}),io=o(()=>x.nodes.filter(e=>!e.lineId)),ao=o(()=>x.products.filter(e=>!e.lineId));async function oo(e){await x.patchNode(e,{lineId:S.value});let t=x.nodeById(e);t&&(t.lineId=S.value)}async function so(e){await x.updateProduct(e,{lineId:S.value}),await x.load()}let k=s({}),co=p(``),A=p(``),lo=p(``);async function uo(e,t){co.value=e,A.value=``,lo.value=``;try{let n=await x.write(e,t);n.ok?(lo.value=y(`dcwDetail.k1alcbyu182`,{p0:x.nodeById(e)?.name??e,p1:n.message}),k[e]=``):A.value=y(`dcwDetail.kl1e9x9183`,{p0:x.nodeById(e)?.name??e,p1:n.message})}catch(e){A.value=b(e)}finally{co.value=``}}let fo=p(``);async function po(e){fo.value=e,A.value=``;try{await x.readNode(e)}catch(e){A.value=b(e)}finally{fo.value=``}}let mo=p(``);async function ho(e,t){mo.value=e,A.value=``;try{await x.patchNode(e,{enabled:t});let n=x.nodeById(e);n&&(n.enabled=t,t?n.state===`offline`&&(n.state=`idle`):n.state=`offline`)}catch(e){A.value=b(e)}finally{mo.value=``}}let go=p(!1),_o=p(`mock`),vo=p(x.templates[0]?.key??``),yo=p(`mock`),bo=p(``),xo=p(null),So=p(null),j=p({}),M=s({kind:`none`,scale:1,offset:0}),Co=p(``),wo=p(!1),N=p(null),To=p(!1),Eo=p(``),Do=o(()=>x.driverCatalog.length?x.driverCatalog:le.map(e=>({...e}))),Oo=o(()=>Do.value.find(e=>e.kind===yo.value)),ko=o(()=>Oo.value?.configFields??[]);function Ao(){let e={};for(let t of ko.value)t.default!==void 0&&(e[t.key]=t.default);j.value=e,N.value=null}Ao();async function jo(){wo.value=!0,N.value=null;try{N.value=await x.testDriver(yo.value,j.value)}catch(e){N.value={ok:!1,message:b(e)}}finally{wo.value=!1}}async function Mo(){To.value=!0,Eo.value=``;try{for(let e of ko.value)if(e.required&&(j.value[e.key]===void 0||j.value[e.key]===``))throw Error(y(`dcwDetail.k8x1un1184`,{p0:e.label}));let e=M.kind===`linear`?{kind:`linear`,scale:Number(M.scale),offset:Number(M.offset)}:void 0;await x.createFromTemplate(`dcw-${vo.value}`,{name:bo.value.trim()||void 0,driver:yo.value,driverConfig:{...j.value},transform:e,holdIntervalMs:xo.value,readIntervalMs:So.value,lineId:S.value,semantics:Co.value.trim()||void 0}),go.value=!1,bo.value=``,Co.value=``}catch(e){Eo.value=b(e)}finally{To.value=!1}}let No=p(!1),Po=p(!1),P=p(``),Fo=p(``);function Io(){No.value=!0,P.value=``,Fo.value=``}let F=s({name:``,ch:``,code:``,unit:``,min:``,max:``,decimals:1,icon:`gateway`,semantics:``}),Lo=[{key:`thermo`,label:y(`dcwDetail.k422b8126`)},{key:`pressure`,label:y(`dcwDetail.k3x6ff127`)},{key:`tension`,label:y(`dcwDetail.k3z9xc128`)},{key:`encoder`,label:y(`dcwDetail.kjb3vhs129`)},{key:`camera`,label:y(`dcwDetail.k47atw130`)},{key:`gateway`,label:y(`dcwDetail.k48c07131`)}];async function Ro(){Po.value=!0,P.value=``,Fo.value=``;try{if(!F.name.trim())throw Error(y(`dcwDetail.k6ugbw2132`));if(F.unit.trim()===``)throw Error(y(`dcwDetail.kx3pg59133`));if(F.min===``||F.max===``)throw Error(y(`dcwDetail.k13awowo134`));let e=await x.createTemplate({name:F.name.trim(),ch:F.ch.trim()||F.name.trim(),code:F.code.trim()||`CUSTOM`,unit:F.unit.trim(),min:Number(F.min),max:Number(F.max),decimals:Number(F.decimals)||0,icon:F.icon,semantics:F.semantics.trim()||void 0});vo.value=e.key,Fo.value=y(`dcwDetail.ky4e1tr185`,{p0:e.name}),F.name=``,F.ch=``,F.code=``,F.unit=``,F.min=``,F.max=``,F.semantics=``}catch(e){P.value=b(e)}finally{Po.value=!1}}let I=p(``),L=p(``),R=p(!1),z=p(``),B=p(``),zo=o(()=>to.value.filter(e=>e.productId===I.value));async function Bo(){R.value=!0,z.value=``,B.value=``;try{if(!L.value)throw Error(y(`dcwDetail.k1b6qe0r135`));await x.startLine(S.value,L.value),z.value=y(`dcwDetail.k17jteb9186`,{p0:C.value.productName,p1:C.value.recipeName,p2:C.value.runId})}catch(e){B.value=b(e)}finally{R.value=!1}}async function Vo(){R.value=!0,z.value=``,B.value=``;try{let e=`${C.value.productName??``} · ${C.value.recipeName??``}`;await x.stopLine(S.value),z.value=y(`dcwDetail.kzl49pd187`,{p0:e})}catch(e){B.value=b(e)}finally{R.value=!1}}let Ho=p(!1),Uo=p(!1),Wo=p(``),V=s({name:``,description:``}),H=p(``);async function Go(){Uo.value=!0,Wo.value=``;try{let e=await x.createProduct({name:V.name.trim(),description:V.description.trim(),lineId:S.value});I.value=e.id,H.value=e.id,Ho.value=!1,V.name=``,V.description=``}catch(e){Wo.value=b(e)}finally{Uo.value=!1}}let Ko=o(()=>H.value?to.value.filter(e=>e.productId===H.value):to.value),qo=e=>x.products.find(t=>t.id===e)?.name??e;function U(e,t){let n=x.nodes.find(t=>t.id===e);return n?n.enabled?t&&n.lineId!==t?{code:`unbound`,label:y(`dcwDetail.staleUnbound`)}:null:{code:`disabled`,label:y(`dcwDetail.staleDisabled`)}:{code:`deleted`,label:y(`dcwDetail.staleDeleted`)}}function Jo(e){return x.nodes.find(t=>t.id===e)?.name??e}function Yo(e,t){let n=Va.nodes.find(t=>t.id===e);return n?n.enabled?t&&n.lineId!==t?{code:`unbound`,label:y(`dcwDetail.staleUnbound`)}:null:{code:`disabled`,label:y(`dcwDetail.staleDisabled`)}:{code:`deleted`,label:y(`dcwDetail.staleDeleted`)}}let Xo=p(!1),W=p(null),Zo=p([]),Qo=p(!1),G=p(``);async function $o(e){W.value=x.recipes.find(t=>t.id===e)??null,Xo.value=!0,G.value=``,Qo.value=!0;try{Zo.value=await x.recipeVersions(e)}catch(e){G.value=b(e)}finally{Qo.value=!1}}let es=e=>e===`agent`?`Agent`:y(e===`system`?`dcwDetail.srcSystem`:`dcwDetail.srcUser`);function ts(e,t){if(t===0)return y(`dcwDetail.histInit`);let n=Zo.value[t-1],r=e.params.map(e=>({p:e,old:n.params.find(t=>t.nodeId===e.nodeId)})).filter(({p:e,old:t})=>!t||t.value!==e.value).map(({p:e,old:t})=>`${x.nodes.find(t=>t.id===e.nodeId)?.name??e.nodeId}: ${t?.value??y(`dcwDetail.histAdded`)} → ${e.value}`);return r.length>0?r.join(`;`):y(`dcwDetail.histNoChange`)}async function ns(e){if(W.value){G.value=``;try{let t=await x.revertRecipe(W.value.id,{version:e,reason:y(`dcwDetail.revertReasonUi`)});G.value=y(`dcwDetail.revertOk`,{p0:t.version??0}),Zo.value=await x.recipeVersions(W.value.id)}catch(e){G.value=b(e)}}}let K=s({productId:``,recipeId:``,paramKey:``,nodeId:``,lastMin:30,bucketMs:15e3}),q=p(null),rs=p(!1),is=p(``);async function as(){rs.value=!0,is.value=``,q.value=null;try{q.value=await x.queryLine({lineId:S.value,productId:K.productId||void 0,recipeId:K.recipeId||void 0,paramKey:K.paramKey||void 0,nodeId:K.nodeId||void 0,fromMs:Date.now()-K.lastMin*6e4,toMs:Date.now(),bucketMs:K.bucketMs>0?K.bucketMs:void 0,limit:2e3}),q.value.channels.length===0&&(is.value=y(`dcwDetail.kszv5sq136`))}catch(e){is.value=b(e)}finally{rs.value=!1}}let os=o(()=>x.templates.map(e=>e.key)),J=p(!1),ss=p(null),cs=p(!1),Y=p(``),ls=p(``),X=s({productId:``,name:``,description:``,params:[],daqWindows:[]}),Z=p(null),Q=p(null),$=p(!1);function us(){ss.value=null,Y.value=``,X.productId=H.value||I.value||O.value[0]?.id||``,X.name=``,X.description=``,X.params=[{nodeId:D.value[0]?.id??``,value:``,min:``,max:``}],X.daqWindows=[],J.value=!0}function ds(e){let t=x.recipes.find(t=>t.id===e);if(!t)return;ss.value=e,Y.value=``;let n=t.params.filter(e=>x.nodes.some(t=>t.id===e.nodeId)),r=t.params.length-n.length;ls.value=r>0?y(`dcwDetail.staleDropped`,{p0:r}):``,X.productId=t.productId,X.name=t.name,X.description=t.description,X.params=n.map(e=>({nodeId:e.nodeId,value:e.value,min:e.min??``,max:e.max??``})),X.daqWindows=(t.daqWindows??[]).map(e=>({nodeId:e.nodeId,min:e.min??``,max:e.max??``})),J.value=!0}async function fs(){cs.value=!0,Y.value=``;try{let e={productId:X.productId,name:X.name.trim(),description:X.description.trim(),params:X.params.filter(e=>e.nodeId&&e.value!==``&&Number.isFinite(Number(e.value))).map(e=>({nodeId:e.nodeId,value:Number(e.value),...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}})),daqWindows:X.daqWindows.filter(e=>e.nodeId&&(e.min!==``||e.max!==``)).map(e=>({nodeId:e.nodeId,...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}}))};ss.value?await x.updateRecipe(ss.value,e):await x.createRecipe(e),J.value=!1}catch(e){Y.value=b(e)}finally{cs.value=!1}}async function ps(e){Z.value=null,A.value=``;try{let t=await x.applyRecipe(e),n=t.results.filter(e=>e.ok).length;Z.value={runId:t.id,ok:n,total:t.results.length},n<t.results.length&&(A.value=y(`dcwDetail.ks7szkt188`,{p0:t.results.filter(e=>!e.ok).map(e=>e.message).join(`;`)}))}catch(e){A.value=b(e)}}async function ms(e){$.value=!0;try{let t=await x.runData(e);Q.value={runId:e,data:t}}catch(e){A.value=b(e)}finally{$.value=!1}}function hs(e){let t=e?.value??e?.avg;return t==null?`--`:String(Math.round(t*1e3)/1e3)}return(t,o)=>{let s=ae,p=se;return m(x).loaded&&!Ua.value?(r(),l(`div`,fe,[c(`p`,pe,n(t.$t(`dcwDetail.k19337yp018`)),1),ee(s,{class:`pill-btn`,to:`/dcw`},{default:te(()=>[h(n(t.$t(`dcwDetail.kllwu1c019`)),1)]),_:1})])):(r(),l(`div`,me,[c(`div`,he,[c(`div`,null,[c(`p`,ge,[c(`span`,{class:`line-chip`,style:e({background:Ua.value?.color??`#3aa0ff`})},null,4),h(`AGENTWORKSHOP / LINE / `+n(Ua.value?.name??S.value),1)]),c(`h1`,null,n(Ua.value?.name??t.$t(`dcwDetail.k1b2snna151`))+` · `+n(t.$t(`dcwDetail.k1l0iow1137`)),1),c(`p`,_e,n(Ua.value?.description||t.$t(`dcwDetail.kzcbfki152`)),1)]),c(`div`,ve,[c(`span`,ye,n(t.$t(`dcwDetail.k45uio082`))+` `+n(D.value.length),1),c(`span`,be,n(t.$t(`dcwDetail.k3waz1025`))+` `+n(O.value.length),1),c(`span`,xe,n(t.$t(`dcwDetail.k48grv027`))+` `+n(to.value.length),1)])]),c(`section`,Se,[c(`div`,Ce,[c(`button`,{class:i([`aw-pill`,{running:m(x).controller.running}]),title:t.$t(`dcwDetail.k1snap154`),onClick:o[0]||=e=>m(x).startStop(m(x).controller.running?`pause`:`resume`)},[c(`span`,{class:i(m(x).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),h(` `+n(m(x).controller.running?t.$t(`dcwDetail.kplrsg153`):t.$t(`dcwDetail.knxgni9169`)),1)],10,we)]),c(`div`,Te,[c(`span`,Ee,[c(`span`,null,n(t.$t(`dcwDetail.k45uio082`))+` `+n(m(x).controller.nodesOnline)+`/`+n(m(x).controller.nodesTotal),1),o[55]||=c(`span`,{class:`sep`},`·`,-1),c(`span`,{title:t.$t(`dcwDetail.kd3ygmn001`)},n(t.$t(`dcwDetail.k3wtib138`))+` `+n(m(x).controller.writesTotal),9,De),o[56]||=c(`span`,{class:`sep`},`·`,-1),c(`span`,{class:i({warn:m(x).controller.writesFailed>0}),title:t.$t(`dcwDetail.kd3znl0002`)},n(t.$t(`dcwDetail.k3yit7139`))+` `+n(m(x).controller.writesFailed),11,Oe)]),c(`button`,{class:`aw-pill outline`,title:t.$t(`dcwDetail.kc4ixly003`),onClick:Io},[o[57]||=c(`span`,{class:`i-tabler-template`},null,-1),h(` `+n(t.$t(`dcwDetail.k1972dx9020`)),1)],8,ke),c(`button`,{class:`aw-pill add-btn`,onClick:o[1]||=e=>go.value=!0},[o[58]||=c(`span`,{class:`i-tabler-plus`},null,-1),h(` `+n(t.$t(`dcwDetail.k1976uns021`)),1)])])]),A.value||lo.value?(r(),l(`p`,{key:0,class:i([`banner`,A.value?`bad`:`good`])},n(A.value||lo.value),3)):d(``,!0),io.value.length||ao.value.length?(r(),l(`section`,Ae,[c(`b`,je,n(t.$t(`dcwDetail.kaebkky022`)),1),c(`div`,Me,[(r(!0),l(u,null,a(io.value,e=>(r(),l(`span`,{key:e.id,class:`adopt-chip`},[h(n(e.name)+` `,1),c(`button`,{class:`mini-btn`,onClick:t=>oo(e.id)},n(t.$t(`dcwDetail.kyjp9fg023`)),9,Ne)]))),128)),(r(!0),l(u,null,a(ao.value,e=>(r(),l(`span`,{key:e.id,class:`adopt-chip`},[h(n(e.name)+`(`+n(t.$t(`dcwDetail.k3km252140`)),1),c(`button`,{class:`mini-btn`,onClick:t=>so(e.id)},n(t.$t(`dcwDetail.kyjp9fg023`)),9,Pe)]))),128))])])):d(``,!0),c(`section`,Fe,[c(`div`,Ie,[c(`span`,{class:i([`line-dot`,{on:C.value.active}])},null,2),c(`div`,Le,[c(`b`,null,n(C.value.active?t.$t(`dcwDetail.k1pxrhx0154`):t.$t(`dcwDetail.k1b2hxmx170`)),1),C.value.active?(r(),l(`small`,Re,n(C.value.productName)+` · `+n(C.value.recipeName)+` · `+n(t.$t(`dcwDetail.k400lb075`))+` `+n(C.value.runId)+` · `+n(t.$t(`dcwDetail.k3zkt2166`))+` `+n(C.value.startedAt?.slice(11,19))+` `+n(t.$t(`dcwDetail.k69vag8168`))+` `+n(C.value.taggedSamples)+` `+n(t.$t(`dcwDetail.k4118o085`)),1)):(r(),l(`small`,ze,n(t.$t(`dcwDetail.k19pof14024`)),1))])]),c(`div`,Be,[c(`label`,Ve,[c(`span`,null,n(t.$t(`dcwDetail.k3waz1025`)),1),f(c(`select`,{"onUpdate:modelValue":o[2]||=e=>I.value=e,class:`inp`,onChange:o[3]||=e=>L.value=``},[c(`option`,He,n(t.$t(`dcwDetail.kuisodh026`)),1),(r(!0),l(u,null,a(O.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,Ue))),128))],544),[[g,I.value]])]),c(`label`,We,[c(`span`,null,n(t.$t(`dcwDetail.k48grv027`)),1),f(c(`select`,{"onUpdate:modelValue":o[4]||=e=>L.value=e,class:`inp`,disabled:!I.value},[c(`option`,Ke,n(t.$t(`dcwDetail.kutxzsz028`)),1),(r(!0),l(u,null,a(zo.value,e=>(r(),l(`option`,{key:e.id,value:e.id,disabled:e.params.length===0},n(e.name)+n(e.params.length===0?t.$t(`dcwDetail.k1hicmch155`):t.$t(`dcwDetail.k1lzfi4g180`,{p0:e.params.length})),9,qe))),128))],8,Ge),[[g,L.value]])]),C.value.active?(r(),l(`button`,{key:1,class:`pill-btn stop`,disabled:R.value,onClick:Vo},n(t.$t(`dcwDetail.k1xyhd2y030`)),9,Ye)):(r(),l(`button`,{key:0,class:`pill-btn`,disabled:R.value||!L.value,title:L.value?`下发配方参数并开始打标数据采集`:`开跑前必须先设定配方`,onClick:Bo},n(t.$t(`dcwDetail.kfb8vml029`)),9,Je))]),B.value?(r(),l(`p`,Xe,n(B.value),1)):d(``,!0),z.value?(r(),l(`p`,Ze,n(z.value),1)):d(``,!0)]),No.value?(r(),l(`div`,{key:2,class:`modal-mask`,onClick:o[15]||=_(e=>No.value=!1,[`self`])},[c(`div`,Qe,[c(`h3`,$e,[h(n(t.$t(`dcwDetail.k1x4vam0031`))+` `,1),c(`small`,et,n(t.$t(`dcwDetail.k3x23c141`))+` `+n(m(x).templates.filter(e=>e.builtin).length)+` · `+n(t.$t(`dcwDetail.k3t616a142`))+` `+n(m(x).templates.filter(e=>!e.builtin).length),1)]),c(`p`,tt,n(t.$t(`dcwDetail.ke1iyud032`)),1),c(`div`,nt,[(r(!0),l(u,null,a(m(x).templates,e=>(r(),l(`span`,{key:e.key,class:`tpl-chip`,title:`${e.code} · ${e.min}~${e.max} ${e.unit}${e.semantics?` · ${e.semantics}`:``}`},[h(n(e.name)+` `,1),c(`small`,it,n(e.min)+`~`+n(e.max)+n(e.unit),1),c(`em`,{class:i([`tpl-tag`,{builtin:e.builtin}])},n(e.builtin?t.$t(`dcwDetail.k3x23c141`):t.$t(`dcwDetail.k3t616a142`)),3)],8,rt))),128))]),c(`p`,at,n(t.$t(`dcwDetail.k169eb4s033`)),1),c(`div`,ot,[c(`label`,st,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1f55q76034`)),1),o[59]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[5]||=e=>F.name=e,class:`inp`,placeholder:t.$t(`dcwDetail.k1tooi3o004`)},null,8,ct),[[v,F.name]])]),c(`label`,lt,[c(`span`,null,n(t.$t(`dcwDetail.k1bqk219035`)),1),f(c(`input`,{"onUpdate:modelValue":o[6]||=e=>F.ch=e,class:`inp`,placeholder:t.$t(`dcwDetail.k698qz0005`)},null,8,ut),[[v,F.ch]])]),c(`label`,dt,[c(`span`,null,n(t.$t(`dcwDetail.k1ayxrqb036`)),1),f(c(`input`,{"onUpdate:modelValue":o[7]||=e=>F.code=e,class:`inp`,placeholder:`如 MOTOR · I`},null,512),[[v,F.code]])]),c(`label`,ft,[c(`span`,null,[h(n(t.$t(`dcwDetail.k3x4ef037`)),1),o[60]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[8]||=e=>F.unit=e,class:`inp`,placeholder:`如 A`},null,512),[[v,F.unit]])]),c(`label`,pt,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1l9jv5m038`)),1),o[61]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[9]||=e=>F.min=e,type:`number`,class:`inp`,placeholder:t.$t(`dcwDetail.kxz9174006`)},null,8,mt),[[v,F.min,void 0,{number:!0}]])]),c(`label`,ht,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1l9jv4p039`)),1),o[62]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[10]||=e=>F.max=e,type:`number`,class:`inp`,placeholder:t.$t(`dcwDetail.kxz9167007`)},null,8,gt),[[v,F.max,void 0,{number:!0}]])]),c(`label`,_t,[c(`span`,null,n(t.$t(`dcwDetail.k3mxmcx040`)),1),f(c(`input`,{"onUpdate:modelValue":o[11]||=e=>F.decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[v,F.decimals,void 0,{number:!0}]])]),c(`label`,vt,[c(`span`,null,n(t.$t(`dcwDetail.k3xx56041`)),1),f(c(`select`,{"onUpdate:modelValue":o[12]||=e=>F.icon=e,class:`inp`},[(r(),l(u,null,a(Lo,e=>c(`option`,{key:e.key,value:e.key},n(e.label),9,yt)),64))],512),[[g,F.icon]])])]),c(`label`,bt,[c(`span`,null,n(t.$t(`dcwDetail.knjmyfr042`)),1),f(c(`textarea`,{"onUpdate:modelValue":o[13]||=e=>F.semantics=e,class:`inp`,rows:`2`,placeholder:t.$t(`dcwDetail.k1qdnfzc008`)},null,8,xt),[[v,F.semantics]])]),Fo.value?(r(),l(`p`,St,n(Fo.value),1)):d(``,!0),P.value?(r(),l(`p`,Ct,n(P.value),1)):d(``,!0),c(`div`,wt,[c(`button`,{class:`aw-pill outline`,onClick:o[14]||=e=>No.value=!1},n(t.$t(`dcwDetail.k3x62t043`)),1),c(`button`,{class:`pill-btn`,disabled:Po.value||!F.name.trim()||F.unit.trim()===``||F.min===``||F.max===``,onClick:Ro},n(Po.value?t.$t(`dcwDetail.k1bg4759156`):t.$t(`dcwDetail.k1bg9nga171`)),9,Tt)])])])):d(``,!0),go.value?(r(),l(`div`,{key:3,class:`modal-mask`,onClick:o[28]||=_(e=>go.value=!1,[`self`])},[c(`div`,Et,[c(`h3`,Dt,n(t.$t(`dcwDetail.k1976uns021`)),1),c(`div`,Ot,[c(`button`,{class:i([`seg`,{on:_o.value===`mock`}]),onClick:o[16]||=e=>_o.value=`mock`},` Mock 模拟 PLC `,2),c(`button`,{class:i([`seg`,{on:_o.value===`real`}]),onClick:o[17]||=e=>_o.value=`real`},n(t.$t(`dcwDetail.kyj8fen044`)),3)]),c(`div`,kt,[c(`label`,At,[c(`span`,null,n(t.$t(`dcwDetail.k1ejzwqp045`)),1),f(c(`select`,{"onUpdate:modelValue":o[18]||=e=>vo.value=e,class:`inp`},[(r(!0),l(u,null,a(m(x).templates,e=>(r(),l(`option`,{key:e.key,value:e.key},n(e.name)+` · `+n(e.ch)+`(`+n(e.min)+`~`+n(e.max)+` `+n(e.unit)+`)`+n(e.builtin?``:t.$t(`dcwDetail.kr45rk9157`)),9,jt))),128))],512),[[g,vo.value]])]),c(`label`,Mt,[c(`span`,null,n(t.$t(`dcwDetail.k1ce2k1y046`)),1),f(c(`input`,{"onUpdate:modelValue":o[19]||=e=>bo.value=e,class:`inp`,placeholder:t.$t(`dcwDetail.kgpxzy3009`)},null,8,Nt),[[v,bo.value]])]),c(`label`,Pt,[c(`span`,null,n(t.$t(`dcwDetail.k1vyb8im047`)),1),f(c(`input`,{"onUpdate:modelValue":o[20]||=e=>xo.value=e,type:`number`,min:`0`,max:`3600000`,step:`500`,class:`inp`,placeholder:t.$t(`dcwDetail.kb1srz0010`)},null,8,Ft),[[v,xo.value,void 0,{number:!0}]])]),c(`label`,It,[c(`span`,null,n(t.$t(`dcwDetail.k9r7d4e016`)),1),f(c(`input`,{"onUpdate:modelValue":o[21]||=e=>So.value=e,type:`number`,min:`0`,max:`3600000`,step:`500`,class:`inp`,placeholder:t.$t(`dcwDetail.k9r7d4e017`)},null,8,Lt),[[v,So.value,void 0,{number:!0}]])])]),c(`div`,Rt,[c(`label`,zt,[c(`span`,null,n(t.$t(`dcwDetail.kiune1f048`)),1),f(c(`select`,{"onUpdate:modelValue":o[22]||=e=>M.kind=e,class:`inp`},[c(`option`,Bt,n(t.$t(`dcwDetail.kkzy0k049`)),1),o[63]||=c(`option`,{value:`linear`},` 线性标定:PLC值 = (物理值 - offset) / scale `,-1)],512),[[g,M.kind]])]),c(`label`,Vt,[o[64]||=c(`span`,null,`scale / offset`,-1),c(`div`,Ht,[f(c(`input`,{"onUpdate:modelValue":o[23]||=e=>M.scale=e,type:`number`,step:`0.1`,class:`inp`,disabled:M.kind!==`linear`,title:`decoder 斜率(≠0):物理值 = scale × PLC值 + offset;下发时自动取逆`},null,8,Ut),[[v,M.scale,void 0,{number:!0}]]),f(c(`input`,{"onUpdate:modelValue":o[24]||=e=>M.offset=e,type:`number`,step:`0.1`,class:`inp`,disabled:M.kind!==`linear`,title:`decoder 截距`},null,8,Wt),[[v,M.offset,void 0,{number:!0}]])])])]),_o.value===`real`?(r(),l(u,{key:0},[c(`div`,Gt,[c(`label`,Kt,[c(`span`,null,n(t.$t(`dcwDetail.k1kt87rx050`)),1),f(c(`select`,{"onUpdate:modelValue":o[25]||=e=>yo.value=e,class:`inp`},[(r(!0),l(u,null,a(Do.value.filter(e=>e.status!==`builtin`),e=>(r(),l(`option`,{key:e.kind,value:e.kind},n(e.label)+n(e.plugin?` ⌁`:``),9,qt))),128))],512),[[g,yo.value]])])]),ko.value.length?(r(),l(`div`,Jt,[(r(!0),l(u,null,a(ko.value,e=>(r(),l(`label`,{key:e.key,class:`f`},[c(`span`,null,[h(n(e.label),1),e.required?(r(),l(`em`,Yt,`*`)):d(``,!0)]),e.type===`select`?f((r(),l(`select`,{key:0,"onUpdate:modelValue":t=>j.value[e.key]=t,class:`inp`},[(r(!0),l(u,null,a(e.options,e=>(r(),l(`option`,{key:e.value,value:e.value},n(e.label),9,Zt))),128))],8,Xt)),[[g,j.value[e.key]]]):f((r(),l(`input`,{key:1,"onUpdate:modelValue":t=>j.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`inp`},null,8,Qt)),[[re,j.value[e.key]]]),e.hint?(r(),l(`small`,$t,n(e.hint),1)):d(``,!0)]))),128))])):d(``,!0),c(`div`,en,[c(`button`,{class:`pill-btn outline`,disabled:wo.value,onClick:jo},n(wo.value?t.$t(`dcwDetail.k1fsh720158`):t.$t(`dcwDetail.k1fstglk172`)),9,tn),N.value?(r(),l(`span`,{key:0,class:i([`test-result`,N.value.ok?`good`:`bad`])},n(N.value.ok?`✓`:`✗`)+` `+n(N.value.message),3)):d(``,!0)])],64)):d(``,!0),c(`label`,nn,[c(`span`,null,n(t.$t(`dcwDetail.k1hgizn7051`)),1),f(c(`textarea`,{"onUpdate:modelValue":o[26]||=e=>Co.value=e,class:`inp`,rows:`2`,placeholder:t.$t(`dcwDetail.k12bnyt9011`)},null,8,rn),[[v,Co.value]])]),Eo.value?(r(),l(`p`,an,n(Eo.value),1)):d(``,!0),c(`div`,on,[c(`button`,{class:`aw-pill outline`,onClick:o[27]||=e=>go.value=!1},n(t.$t(`dcwDetail.k3xdnn052`)),1),c(`button`,{class:`aw-pill`,disabled:To.value,onClick:Mo},n(To.value?t.$t(`dcwDetail.k1bg4759156`):t.$t(`dcwDetail.k1bge46t173`)),9,sn)])])])):d(``,!0),ee(p,{spinning:!m(x).loaded&&!m(x).error},{default:te(()=>[c(`section`,cn,[c(`table`,ln,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,n(t.$t(`dcwDetail.k1e2dtkt053`)),1),c(`th`,null,n(t.$t(`dcwDetail.k403cy054`)),1),c(`th`,null,n(t.$t(`dcwDetail.k42w8s055`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1deqh0d056`)),1),c(`th`,null,n(t.$t(`dcwDetail.k9r7d4e018`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1k79ec9057`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1dexou6058`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1b1nnaa059`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1i8rtqt060`)),1),c(`th`,un,n(t.$t(`dcwDetail.k40aa6061`)),1)])]),c(`tbody`,null,[(r(!0),l(u,null,a(D.value,e=>(r(),l(`tr`,{key:e.id,class:i({"node-paused":!e.enabled})},[c(`td`,null,[c(`span`,dn,n(e.id.slice(0,8)),1),c(`b`,null,n(e.name),1),c(`small`,fn,n(Ja(e.templateRef)),1)]),c(`td`,null,[c(`button`,{class:i([`ctrl-toggle`,{on:e.enabled}]),disabled:mo.value===e.id,title:e.enabled?`暂停该节点控制:下发将被拒绝`:`开启该节点控制:恢复可下发`,onClick:t=>ho(e.id,!e.enabled)},[o[65]||=c(`span`,{class:`ct-dot`},null,-1),h(` `+n(e.enabled?t.$t(`dcwDetail.k3o3ib3159`):t.$t(`dcwDetail.k3n93ed062`)),1)],10,pn)]),c(`td`,null,[e.enabled?(r(),l(`span`,{key:1,class:i([`st-pill`,e.state])},n(qa[e.state]??e.state),3)):(r(),l(`span`,mn,n(t.$t(`dcwDetail.k3n93ed062`)),1))]),c(`td`,hn,[h(n(e.value==null?`--`:e.value.toFixed(e.decimals))+` `,1),c(`small`,null,n(e.unit),1),e.lastAckAt?(r(),l(`small`,gn,` · `+n(e.lastAckAt.slice(11,19)),1)):d(``,!0)]),c(`td`,_n,[c(`span`,{title:e.lastReadError??t.$t(`dcwDetail.k9r7d4e019`),class:i({"read-stale":e.lastReadError})},n(e.readValue==null?`--`:e.readValue.toFixed(e.decimals)),11,vn),c(`small`,null,n(e.unit),1),e.lastReadAt?(r(),l(`small`,yn,` · `+n(e.lastReadAt.slice(11,19)),1)):d(``,!0),c(`button`,{class:`mini-btn read-btn`,disabled:fo.value===e.id,title:t.$t(`dcwDetail.k9r7d4e020`),onClick:t=>po(e.id)},n(fo.value===e.id?`···`:t.$t(`dcwDetail.k9r7d4e021`)),9,bn)]),c(`td`,null,[c(`div`,xn,[f(c(`input`,{"onUpdate:modelValue":t=>k[e.id]=t,type:`number`,class:`inp write-inp mono`,placeholder:`${e.min}~${e.max}`,min:e.min,max:e.max,step:10**-e.decimals,disabled:!e.enabled,title:e.enabled?``:`当前节点暂停:开启控制后方可设定`},null,8,Sn),[[v,k[e.id],void 0,{number:!0}]]),c(`button`,{class:`mini-btn write-btn`,disabled:!e.enabled||co.value===e.id||k[e.id]==null||k[e.id]===``,title:e.enabled?`下发设定值`:`当前节点暂停:开启控制后方可设定`,onClick:t=>uo(e.id,Number(k[e.id]))},n(co.value===e.id?t.$t(`dcwDetail.k3l3h80123`):t.$t(`dcwDetail.k3w6td174`)),9,Cn)])]),c(`td`,wn,n(e.min)+` ~ `+n(e.max)+` `+n(e.unit),1),c(`td`,Tn,[h(n(e.holdIntervalMs==null?t.$t(`dcwDetail.k3zul4160`):`${e.holdIntervalMs}ms`)+` `,1),c(`small`,{class:`dim`,title:t.$t(`dcwDetail.k9r7d4e016`)},`· `+n(e.readIntervalMs===0?t.$t(`dcwDetail.k9r7d4e022`):e.readIntervalMs==null?t.$t(`dcwDetail.k9r7d4e023`):`${e.readIntervalMs}ms`),9,En)]),c(`td`,null,n(Ga(e)),1),c(`td`,Dn,[c(`button`,{class:`mini-btn danger`,onClick:t=>m(x).removeNode(e.id)},n(t.$t(`dcwDetail.k3xakp063`)),9,On)])],2))),128)),m(x).loaded&&D.value.length===0?(r(),l(`tr`,kn,[c(`td`,An,[c(`div`,jn,[c(`p`,Mn,n(t.$t(`dcwDetail.k1wtecyw064`)),1)])])])):d(``,!0)])])])]),_:1},8,[`spinning`]),c(`section`,Nn,[c(`div`,Pn,[c(`h3`,null,n(t.$t(`dcwDetail.k1j8w3hd065`)),1),c(`span`,Fn,n(O.value.length)+` `+n(t.$t(`dcwDetail.k1av3wgs143`))+` `+n(Ko.value.length)+` `+n(t.$t(`dcwDetail.k48grv027`)),1),c(`button`,{class:`pill-btn`,style:{"margin-left":`auto`},onClick:us},n(t.$t(`dcwDetail.k1akm6dc066`)),1),c(`button`,{class:`mini-btn`,onClick:o[29]||=e=>Ho.value=!0},n(t.$t(`dcwDetail.k1aka0ki067`)),1)]),c(`p`,In,n(t.$t(`dcwDetail.k6bl2q8068`)),1),O.value.length?(r(),l(`div`,Ln,[c(`button`,{class:i([`prod-chip`,{on:H.value===``}]),onClick:o[30]||=e=>H.value=``},n(t.$t(`dcwDetail.k3x4t1069`)),3),(r(!0),l(u,null,a(O.value,e=>(r(),l(`button`,{key:e.id,class:i([`prod-chip`,{on:H.value===e.id}]),title:e.description,onClick:t=>H.value=e.id},[h(n(e.name)+` `,1),c(`span`,{class:`prod-del`,title:t.$t(`dcwDetail.k1bpfjgx012`),onClick:_(t=>m(x).removeProduct(e.id),[`stop`])},`×`,8,zn)],10,Rn))),128))])):(r(),l(`p`,Bn,n(t.$t(`dcwDetail.knov3zg070`)),1)),c(`div`,Vn,[(r(!0),l(u,null,a(Ko.value,e=>(r(),l(`div`,{key:e.id,class:`recipe-item`},[c(`div`,Hn,[c(`b`,null,n(e.name),1),e.version?(r(),l(`span`,{key:0,class:`param-chip mono`,title:m(y)(`dcwDetail.histTitle`)},`v`+n(e.version),9,Un)):d(``,!0),c(`small`,Wn,n(qo(e.productId)),1),c(`small`,Gn,n(e.id),1)]),e.description?(r(),l(`p`,Kn,n(e.description),1)):d(``,!0),c(`div`,qn,[(r(!0),l(u,null,a(e.params,(t,a)=>(r(),l(`span`,{key:a,class:i([`param-chip`,{stale:U(t.nodeId,e.lineId)}]),title:U(t.nodeId,e.lineId)?.label??``},[h(n(Jo(t.nodeId))+` = `+n(t.value),1),U(t.nodeId,e.lineId)?(r(),l(`span`,Yn,n(U(t.nodeId,e.lineId).label),1)):d(``,!0)],10,Jn))),128)),(r(!0),l(u,null,a(e.daqWindows,(a,ee)=>(r(),l(`span`,{key:`w-${ee}`,class:i([`param-chip daqwin`,{stale:Yo(a.nodeId,e.lineId)}]),title:Yo(a.nodeId,e.lineId)?.label??t.$t(`dcwDetail.k1l11api013`)},[h(` ◎ `+n(eo(a.nodeId))+` ∈ [`+n(a.min??`-∞`)+`, `+n(a.max??`+∞`)+`]`,1),Yo(a.nodeId,e.lineId)?(r(),l(`span`,Zn,n(Yo(a.nodeId,e.lineId).label),1)):d(``,!0)],10,Xn))),128))]),c(`div`,Qn,[c(`button`,{class:`pill-btn`,onClick:t=>ps(e.id)},n(t.$t(`dcwDetail.k1497qvr071`)),9,$n),c(`button`,{class:`mini-btn`,onClick:t=>ds(e.id)},n(t.$t(`dcwDetail.k45eb0072`)),9,er),c(`button`,{class:`mini-btn`,onClick:t=>$o(e.id)},[h(n(m(y)(`dcwDetail.histBtn`)),1),e.version?(r(),l(`span`,nr,`·v`+n(e.version),1)):d(``,!0)],8,tr),c(`button`,{class:`mini-btn danger`,onClick:t=>m(x).removeRecipe(e.id)},n(t.$t(`dcwDetail.k3xakp063`)),9,rr)])]))),128)),Ko.value.length===0?(r(),l(`div`,ir,n(t.$t(`dcwDetail.keko1xy073`)),1)):d(``,!0)]),Z.value?(r(),l(`div`,ar,[h(n(t.$t(`dcwDetail.k1l3hrvp144`))+` `+n(Z.value.runId)+` `+n(t.$t(`dcwDetail.k1g3lh2v167`))+n(Z.value.ok)+`/`+n(Z.value.total)+` `+n(t.$t(`dcwDetail.k1bqci06149`))+` `,1),c(`button`,{class:`mini-btn`,style:{"margin-left":`10px`},disabled:$.value,onClick:o[31]||=e=>ms(Z.value.runId)},n($.value?t.$t(`dcwDetail.k1br0ij9161`):t.$t(`dcwDetail.kxwei5175`)),9,or)])):d(``,!0),no.value.length?(r(),l(`div`,sr,[c(`p`,cr,n(t.$t(`dcwDetail.k1rjer8d074`)),1),c(`table`,lr,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,n(t.$t(`dcwDetail.k400lb075`)),1),c(`th`,null,n(t.$t(`dcwDetail.k48grv027`)),1),c(`th`,null,n(t.$t(`dcwDetail.k4497j076`)),1),c(`th`,null,n(t.$t(`dcwDetail.k1bqhtmu077`)),1),c(`th`,ur,n(t.$t(`dcwDetail.k40aa6061`)),1)])]),c(`tbody`,null,[(r(!0),l(u,null,a([...no.value].reverse().slice(0,8),e=>(r(),l(`tr`,{key:e.id},[c(`td`,dr,n(e.id),1),c(`td`,null,n(e.recipeName),1),c(`td`,fr,n(e.startedAt.slice(5,19))+` ~ `+n(e.endedAt?e.endedAt.slice(5,19):t.$t(`dcwDetail.k3vpfg9162`)),1),c(`td`,null,[c(`span`,{class:i([`st-pill`,e.results.every(e=>e.ok)?`ok`:`warn`])},n(e.results.filter(e=>e.ok).length)+`/`+n(e.results.length),3)]),c(`td`,pr,[c(`button`,{class:`mini-btn`,disabled:$.value,onClick:t=>ms(e.id)},n(t.$t(`dcwDetail.k1dzwrdp078`)),9,mr),e.endedAt?d(``,!0):(r(),l(`button`,{key:0,class:`mini-btn`,onClick:t=>m(x).closeRun(e.id)},n(t.$t(`dcwDetail.k1blr7y7079`)),9,hr))])]))),128))])])])):d(``,!0),Q.value?(r(),l(`div`,{key:4,class:`modal-mask`,onClick:o[33]||=_(e=>Q.value=null,[`self`])},[c(`div`,gr,[c(`h3`,_r,n(t.$t(`dcwDetail.k11lq94k145`))+` `+n(Q.value.data.run.recipeName)+`(`+n(Q.value.runId)+`) `,1),c(`p`,vr,n(t.$t(`dcwDetail.k1me41w8080`)),1),c(`table`,yr,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,n(t.$t(`dcwDetail.k48hde081`)),1),c(`th`,null,n(t.$t(`dcwDetail.k45uio082`)),1),c(`th`,null,n(t.$t(`dcwDetail.k40t11083`)),1),c(`th`,null,n(t.$t(`dcwDetail.k3xuaw084`)),1),o[66]||=c(`th`,null,`min ~ max`,-1),c(`th`,null,n(t.$t(`dcwDetail.k4118o085`)),1)])]),c(`tbody`,null,[(r(!0),l(u,null,a(Q.value.data.daq,e=>(r(),l(`tr`,{key:e.nodeId},[c(`td`,null,[h(n(e.ch),1),c(`small`,br,n(e.unit),1)]),c(`td`,null,n(e.nodeName),1),c(`td`,xr,n(e.latest),1),c(`td`,Sr,n(e.avg),1),c(`td`,Cr,n(e.min)+` ~ `+n(e.max),1),c(`td`,wr,n(e.cnt),1)]))),128)),Q.value.data.daq.length===0?(r(),l(`tr`,Tr,[c(`td`,Er,n(t.$t(`dcwDetail.kd457ry086`)),1)])):d(``,!0)])]),c(`p`,Dr,n(t.$t(`dcwDetail.k12b7cxs087`)),1),c(`table`,Or,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,n(t.$t(`dcwDetail.k3xbjr088`)),1),c(`th`,null,n(t.$t(`dcwDetail.k45uio082`)),1),c(`th`,null,n(t.$t(`dcwDetail.k3ncbsh089`)),1),c(`th`,null,n(t.$t(`dcwDetail.k3lh3mz090`)),1),c(`th`,null,n(t.$t(`dcwDetail.k454pg091`)),1),c(`th`,null,n(t.$t(`dcwDetail.k40ieu092`)),1)])]),c(`tbody`,null,[(r(!0),l(u,null,a(Q.value.data.writes,(e,a)=>(r(),l(`tr`,{key:a},[c(`td`,null,n(e.param),1),c(`td`,null,n(e.nodeName),1),c(`td`,kr,n(e.eng),1),c(`td`,Ar,n(e.raw),1),c(`td`,null,[c(`span`,{class:i([`st-pill`,e.ok?`ok`:`alarm`])},n(e.ok?`ACK`:t.$t(`dcwDetail.k3yit7139`)),3)]),c(`td`,jr,n(e.at.slice(5,19)),1)]))),128)),Q.value.data.writes.length===0?(r(),l(`tr`,Mr,[c(`td`,Nr,n(t.$t(`dcwDetail.knzcp8i093`)),1)])):d(``,!0)])]),c(`div`,Pr,[c(`button`,{class:`aw-pill outline`,onClick:o[32]||=e=>Q.value=null},n(t.$t(`dcwDetail.k3x62t043`)),1)])])])):d(``,!0)]),J.value?(r(),l(`div`,{key:4,class:`modal-mask`,onClick:o[40]||=_(e=>J.value=!1,[`self`])},[c(`div`,Fr,[c(`h3`,Ir,n(ss.value?t.$t(`dcwDetail.k1iiwk0i163`):t.$t(`dcwDetail.k1efq0r9176`)),1),c(`div`,Lr,[c(`label`,Rr,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1dw4fzf094`)),1),o[67]||=c(`em`,null,`*`,-1)]),f(c(`select`,{"onUpdate:modelValue":o[34]||=e=>X.productId=e,class:`inp`},[(r(!0),l(u,null,a(O.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,zr))),128))],512),[[g,X.productId]])]),c(`label`,Br,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1l3f8so095`)),1),o[68]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[35]||=e=>X.name=e,class:`inp`,placeholder:t.$t(`dcwDetail.k12c11vm014`)},null,8,Vr),[[v,X.name]])]),c(`label`,Hr,[c(`span`,null,n(t.$t(`dcwDetail.k40gkk096`)),1),f(c(`input`,{"onUpdate:modelValue":o[36]||=e=>X.description=e,class:`inp`,placeholder:t.$t(`dcwDetail.k1hxx8hy015`)},null,8,Ur),[[v,X.description]])])]),c(`p`,Wr,n(t.$t(`dcwDetail.ka1kfgh097`)),1),(r(!0),l(u,null,a(X.params,(e,i)=>(r(),l(`div`,{key:i,class:`param-row`},[c(`label`,Gr,[c(`span`,null,n(t.$t(`dcwDetail.k1e2dtkt053`)),1),f(c(`select`,{"onUpdate:modelValue":t=>e.nodeId=t,class:`inp`},[(r(!0),l(u,null,a(D.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name)+`(`+n(Ja(e.templateRef))+` · `+n(e.min)+`~`+n(e.max)+` `+n(e.unit)+`) `,9,qr))),128))],8,Kr),[[g,e.nodeId]]),U(e.nodeId,S.value)?(r(),l(`span`,Jr,n(U(e.nodeId,S.value).label),1)):d(``,!0)]),c(`label`,Yr,[c(`span`,null,[h(n(t.$t(`dcwDetail.k3renp2098`)),1),o[69]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":t=>e.value=t,type:`number`,class:`inp`,step:.1},null,8,Xr),[[v,e.value,void 0,{number:!0}]])]),c(`label`,Zr,[c(`span`,null,n(t.$t(`dcwDetail.k134rw3b146`))+n(Ya(e.nodeId)??`-`)+`)`,1),f(c(`input`,{"onUpdate:modelValue":t=>e.min=t,type:`number`,class:`inp`,step:.1,placeholder:t.$t(`dcwDetail.k5vew9z016`)},null,8,Qr),[[v,e.min,void 0,{number:!0}]])]),c(`label`,$r,[c(`span`,null,n(t.$t(`dcwDetail.khrv911147`))+n(Xa(e.nodeId)??`-`)+`)`,1),f(c(`input`,{"onUpdate:modelValue":t=>e.max=t,type:`number`,class:`inp`,step:.1,placeholder:t.$t(`dcwDetail.kzoh5pr017`)},null,8,ei),[[v,e.max,void 0,{number:!0}]])]),c(`button`,{class:`mini-btn danger param-del`,onClick:e=>X.params.splice(i,1)},n(t.$t(`dcwDetail.k44idg099`)),9,ti)]))),128)),c(`button`,{class:`mini-btn`,onClick:o[37]||=e=>X.params.push({nodeId:D.value[0]?.id??``,value:``,min:``,max:``})},n(t.$t(`dcwDetail.k1broh7h100`)),1),c(`p`,ni,n(t.$t(`dcwDetail.k1h5gues101`)),1),(r(!0),l(u,null,a(X.daqWindows,(e,i)=>(r(),l(`div`,{key:`dw-${i}`,class:`param-row`},[c(`label`,ri,[c(`span`,null,n(t.$t(`dcwDetail.k1empnnb102`)),1),f(c(`select`,{"onUpdate:modelValue":t=>e.nodeId=t,class:`inp`},[(r(!0),l(u,null,a(w.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name)+`(`+n(e.min)+`~`+n(e.max)+` `+n(e.unit)+`) `,9,ai))),128))],8,ii),[[g,e.nodeId]])]),c(`label`,oi,[c(`span`,null,n(t.$t(`dcwDetail.kqm08ap103`)),1),f(c(`input`,{"onUpdate:modelValue":t=>e.min=t,type:`number`,class:`inp`,step:.1},null,8,si),[[v,e.min,void 0,{number:!0}]])]),c(`label`,ci,[c(`span`,null,n(t.$t(`dcwDetail.kpypf8g104`)),1),f(c(`input`,{"onUpdate:modelValue":t=>e.max=t,type:`number`,class:`inp`,step:.1},null,8,li),[[v,e.max,void 0,{number:!0}]])]),c(`button`,{class:`mini-btn danger param-del`,onClick:e=>X.daqWindows.splice(i,1)},n(t.$t(`dcwDetail.k44idg099`)),9,ui)]))),128)),c(`button`,{class:`mini-btn`,disabled:w.value.length===0,title:w.value.length===0?`本产线暂无数采节点`:``,onClick:o[38]||=e=>X.daqWindows.push({nodeId:w.value[0]?.id??``,min:``,max:``})},n(t.$t(`dcwDetail.kv1de1p105`)),9,di),ls.value?(r(),l(`p`,fi,n(ls.value),1)):d(``,!0),Y.value?(r(),l(`p`,pi,n(Y.value),1)):d(``,!0),c(`div`,mi,[c(`button`,{class:`aw-pill outline`,onClick:o[39]||=e=>J.value=!1},n(t.$t(`dcwDetail.k3xdnn052`)),1),c(`button`,{class:`pill-btn`,disabled:cs.value,onClick:fs},n(cs.value?t.$t(`dcwDetail.k1b38d59164`):t.$t(`dcwDetail.k1b3kwg0177`)),9,hi)])])])):d(``,!0),Xo.value?(r(),l(`div`,{key:5,class:`modal-mask`,onClick:o[42]||=_(e=>Xo.value=!1,[`self`])},[c(`div`,gi,[c(`div`,_i,[c(`h3`,null,[h(n(m(y)(`dcwDetail.histTitle`)),1),W.value?(r(),l(`span`,vi,n(W.value.name)+` · v`+n(W.value.version),1)):d(``,!0)]),c(`button`,{class:`mini-btn`,onClick:o[41]||=e=>Xo.value=!1},` ✕ `)]),G.value?(r(),l(`p`,yi,n(G.value),1)):d(``,!0),Qo.value?(r(),l(`p`,bi,n(m(y)(`dcwDetail.histLoading`)),1)):Zo.value.length===0?(r(),l(`div`,xi,n(m(y)(`dcwDetail.histEmpty`)),1)):(r(!0),l(u,{key:3},a(Zo.value,(e,t)=>(r(),l(`div`,{key:e.version,class:i([`ver-row`,{cur:e.current}])},[c(`div`,Si,[c(`span`,Ci,`v`+n(e.version),1),c(`span`,{class:i([`ver-src`,e.by??(e.current?`cur`:``)])},n(e.current?m(y)(`dcwDetail.histCurrent`):es(e.by)),3),c(`span`,wi,n(e.at.slice(0,19).replace(`T`,` `)),1),c(`span`,Ti,n(e.actorName||`—`),1),e.current?d(``,!0):(r(),l(`button`,{key:0,class:`mini-btn`,onClick:t=>ns(e.version)},n(m(y)(`dcwDetail.revertTo`)),9,Ei))]),e.description?(r(),l(`p`,Di,n(e.description),1)):d(``,!0),c(`p`,Oi,n(ts(e,t)),1)],2))),128))])])):d(``,!0),c(`section`,ki,[c(`p`,Ai,n(t.$t(`dcwDetail.k1us3jse106`)),1),c(`div`,ji,[c(`label`,Mi,[c(`span`,null,n(t.$t(`dcwDetail.k3waz1025`)),1),f(c(`select`,{"onUpdate:modelValue":o[43]||=e=>K.productId=e,class:`inp`,onChange:o[44]||=e=>K.recipeId=``},[c(`option`,Ni,n(t.$t(`dcwDetail.k1bkl1jx107`)),1),(r(!0),l(u,null,a(O.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,Pi))),128))],544),[[g,K.productId]])]),c(`label`,Fi,[c(`span`,null,n(t.$t(`dcwDetail.k48grv027`)),1),f(c(`select`,{"onUpdate:modelValue":o[45]||=e=>K.recipeId=e,class:`inp`,disabled:!K.productId},[c(`option`,Li,n(t.$t(`dcwDetail.k1bkx7cr108`)),1),(r(!0),l(u,null,a(Ko.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,Ri))),128))],8,Ii),[[g,K.recipeId]])]),c(`label`,zi,[c(`span`,null,n(t.$t(`dcwDetail.k1demcae109`)),1),f(c(`select`,{"onUpdate:modelValue":o[46]||=e=>K.paramKey=e,class:`inp`},[c(`option`,Bi,n(t.$t(`dcwDetail.k1bkx7ya110`)),1),(r(!0),l(u,null,a(os.value,e=>(r(),l(`option`,{key:e,value:e},n(e),9,Vi))),128))],512),[[g,K.paramKey]])]),c(`label`,Hi,[c(`span`,null,n(t.$t(`dcwDetail.k45uio082`)),1),f(c(`select`,{"onUpdate:modelValue":o[47]||=e=>K.nodeId=e,class:`inp`},[c(`option`,Ui,n(t.$t(`dcwDetail.k1bkul3k111`)),1),(r(!0),l(u,null,a(w.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,Wi))),128))],512),[[g,K.nodeId]])]),c(`label`,Gi,[c(`span`,null,n(t.$t(`dcwDetail.kx2ojn0112`)),1),f(c(`input`,{"onUpdate:modelValue":o[48]||=e=>K.lastMin=e,type:`number`,min:`1`,max:`10080`,class:`inp`},null,512),[[v,K.lastMin,void 0,{number:!0}]])]),c(`label`,Ki,[c(`span`,null,n(t.$t(`dcwDetail.kjvnvn4113`)),1),f(c(`input`,{"onUpdate:modelValue":o[49]||=e=>K.bucketMs=e,type:`number`,min:`1000`,step:`500`,class:`inp`},null,512),[[v,K.bucketMs,void 0,{number:!0}]])]),c(`div`,qi,[c(`button`,{class:`pill-btn`,disabled:rs.value,onClick:as},n(rs.value?t.$t(`dcwDetail.k1eyx09r165`):t.$t(`dcwDetail.k416ek178`)),9,Ji)])]),is.value?(r(),l(`p`,Yi,n(is.value),1)):d(``,!0),q.value?(r(),l(`div`,Xi,[c(`table`,Zi,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,n(t.$t(`dcwDetail.k48hde081`)),1),c(`th`,null,n(t.$t(`dcwDetail.k45uio082`)),1),c(`th`,null,n(t.$t(`dcwDetail.k42kcu114`)),1),c(`th`,null,n(t.$t(`dcwDetail.k49ujb115`)),1),c(`th`,null,n(t.$t(`dcwDetail.k40pvw116`)),1),c(`th`,null,n(t.$t(`dcwDetail.k3xho3117`)),1)])]),c(`tbody`,null,[(r(!0),l(u,null,a(q.value.channels,e=>(r(),l(`tr`,{key:e.nodeId},[c(`td`,null,[h(n(e.ch),1),c(`small`,Qi,n(e.unit),1)]),c(`td`,null,n(e.nodeName),1),c(`td`,$i,n(e.points.length),1),c(`td`,ea,n(hs(e.points[0])),1),c(`td`,ta,n(hs(e.points[e.points.length-1])),1),c(`td`,na,n(new Date(e.points[0]?.at??0).toLocaleTimeString())+` ~ `+n(new Date(e.points[e.points.length-1]?.at??0).toLocaleTimeString()),1)]))),128))])])])):d(``,!0)]),ro.value.length?(r(),l(`section`,ra,[c(`p`,ia,n(t.$t(`dcwDetail.kw7ym9b148`))+` `+n(ro.value.length)+` `+n(t.$t(`dcwDetail.k40bfz150`)),1),c(`table`,aa,[c(`tbody`,null,[(r(!0),l(u,null,a(ro.value.slice(0,12),e=>(r(),l(`tr`,{key:e.id},[c(`td`,oa,n(e.at.slice(5,19)),1),c(`td`,null,n(e.param),1),c(`td`,null,n(e.nodeName),1),c(`td`,sa,n(e.eng),1),c(`td`,ca,` raw `+n(e.raw??`-`),1),c(`td`,null,[c(`span`,{class:i([`st-pill`,e.ok?`ok`:`alarm`])},n(e.ok?`ACK`:t.$t(`dcwDetail.k3yit7139`)),3)]),c(`td`,la,n(e.recipeRunId?t.$t(`dcwDetail.k6vgks7181`,{p0:e.recipeRunId}):`手动`),1)]))),128))])])])):d(``,!0),Ho.value?(r(),l(`div`,{key:7,class:`modal-mask`,onClick:o[53]||=_(e=>Ho.value=!1,[`self`])},[c(`div`,ua,[c(`h3`,da,n(t.$t(`dcwDetail.k1efduyf118`)),1),c(`div`,fa,[c(`label`,pa,[c(`span`,null,[h(n(t.$t(`dcwDetail.k1avjrl6119`)),1),o[70]||=c(`em`,null,`*`,-1)]),f(c(`input`,{"onUpdate:modelValue":o[50]||=e=>V.name=e,class:`inp`,placeholder:t.$t(`dcwDetail.k12c11vm014`)},null,8,ma),[[v,V.name]])]),c(`label`,ha,[c(`span`,null,n(t.$t(`dcwDetail.k40gkk096`)),1),f(c(`input`,{"onUpdate:modelValue":o[51]||=e=>V.description=e,class:`inp`,placeholder:t.$t(`dcwDetail.k1hxx8hy015`)},null,8,ga),[[v,V.description]])])]),Wo.value?(r(),l(`p`,_a,n(Wo.value),1)):d(``,!0),c(`div`,va,[c(`button`,{class:`aw-pill outline`,onClick:o[52]||=e=>Ho.value=!1},n(t.$t(`dcwDetail.k3xdnn052`)),1),c(`button`,{class:`pill-btn`,disabled:Uo.value,onClick:Go},n(Uo.value?t.$t(`dcwDetail.k1bg4759156`):t.$t(`dcwDetail.k1bg4kn6179`)),9,ya)])])])):d(``,!0),m(x).error?(r(),l(`p`,ba,[h(n(m(x).error)+`(`,1),ee(s,{to:`/workshop`},{default:te(()=>[h(n(t.$t(`dcwDetail.k1bhhheq120`)),1)]),_:1}),o[71]||=h(`) `,-1)])):d(``,!0),c(`section`,xa,[c(`div`,Sa,[c(`b`,null,n(t.$t(`dcwDetail.k1ledgt001`)),1),f(c(`select`,{"onUpdate:modelValue":o[54]||=e=>T.value=e,class:`inp`,onChange:Qa},[c(`option`,Ca,n(t.$t(`dcwDetail.k1ledgs001`)),1),(r(!0),l(u,null,a(D.value,e=>(r(),l(`option`,{key:e.id,value:e.id},n(e.name),9,wa))),128))],544),[[g,T.value]])]),E.value?(r(),l(u,{key:0},[c(`div`,Ta,[c(`div`,Ea,[c(`small`,null,n(t.$t(`dcwDetail.k1ledgv001`)),1),c(`b`,Da,n(E.value.current??`--`),1)]),c(`div`,Oa,[c(`small`,null,n(t.$t(`dcwDetail.k1ledgv002`)),1),c(`b`,ka,n(E.value.recipeTarget??`--`),1)]),c(`div`,Aa,[c(`small`,null,n(t.$t(`dcwDetail.k1ledgv003`)),1),c(`b`,ja,n(E.value.lastGood??`--`),1)]),c(`button`,{class:`mini-btn`,onClick:Qa},n(t.$t(`dcwDetail.k1ledga001`)),1),c(`button`,{class:`mini-btn danger`,onClick:$a},n(t.$t(`dcwDetail.k1ledga002`)),1)]),c(`div`,Ma,[c(`div`,Na,[c(`small`,Pa,n(t.$t(`dcwDetail.k1ledgh001`)),1),c(`ul`,Fa,[(r(!0),l(u,null,a(E.value.journal,e=>(r(),l(`li`,{key:e.id},n(e.at.slice(5,16).replace(`T`,` `))+` [`+n(e.source)+`] `+n(e.prevValue??`?`)+` → `+n(e.newValue),1))),128))])]),c(`div`,Ia,[c(`small`,La,n(t.$t(`dcwDetail.k1ledgr001`)),1),c(`ul`,Ra,[(r(!0),l(u,null,a(E.value.records,e=>(r(),l(`li`,{key:e.id,class:`ledger-rec`},[c(`span`,{class:i([`rec-st`,e.status])},n(e.status),3),c(`span`,za,n(e.params[0]?.from??`?`)+` → `+n(e.params[0]?.to),1),c(`small`,null,n(e.judge?`${e.judge.verdict}(${e.judge.by})`:e.status===`open`?`open`:e.closedBy??``),1)]))),128))])])])],64)):d(``,!0)])]))}}}),[[`__scopeId`,`data-v-ff580c34`]]);export{Ba as default};
@@ -0,0 +1 @@
1
+ import{dt as e}from"./CSkxz2NX.js";import{t}from"./36oeS8_R.js";import{t as n}from"./D0ZBQrN_2.js";import{t as r}from"./BDmh31hl.js";var i=[`thermo`,`pressure`,`tension`,`encoder`,`camera`,`gateway`],a=[{key:`temp-tc`,name:`温度传感器`,code:`TEMP · TC`,ch:`熔体/箱体温度`,unit:`℃`,base:168,amp:3.2,min:150,max:185,decimals:1,icon:`thermo`,telemetryKey:`temperature`,semantics:`熔体/箱体温度:热工艺核心被控量,热惯性大(变化平缓)。判读:与设定值偏差 ±2℃ 内为稳态;持续单边漂移 = 加热/散热失衡;骤升骤降多为扰动或传感器异常。`},{key:`pressure-tx`,name:`压力变送器`,code:`PRESSURE · TX`,ch:`熔体压力`,unit:`MPa`,base:.82,amp:.05,min:.6,max:1.2,decimals:2,icon:`pressure`,telemetryKey:`pressure`,semantics:`熔体压力:挤出负荷的「血压计」。判读:与温度负相关(温度升→熔体黏度降→压力降);压力突升常见于滤网堵塞或出料受阻。`},{key:`tension-cell`,name:`张力传感器`,code:`TENSION · CELL`,ch:`膜张力`,unit:`kN`,base:21.4,amp:.9,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力:成膜质量直接指标。判读:张力波动与速度/温度设定强耦合,评估张力前先确认速度稳定。`},{key:`line-encoder`,name:`速度编码器`,code:`LINE · ENCODER`,ch:`产线速度`,unit:`m/min`,base:318,amp:7,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度:产能直接观测量。判读:实际速度对设定值的跟随滞后反映传动惯量;速度波动会传导至张力与厚度。`},{key:`vision-cam`,name:`视觉检测相机`,code:`VISION · CAM`,ch:`表面缺陷率`,unit:`‰`,base:.42,amp:.09,min:.1,max:.9,decimals:2,icon:`camera`},{key:`power-meter`,name:`电参采集器`,code:`POWER · METER`,ch:`运行功率`,unit:`kW`,base:45.2,amp:2.6,min:38,max:55,decimals:1,icon:`gateway`},{key:`thickness-scan`,name:`测厚扫描仪`,code:`THK · SCAN`,ch:`厚度轮廓`,unit:`mm`,base:.52,amp:.018,min:.4,max:.65,decimals:3,icon:`tension`,signalKind:`vector`,vector:{points:64,min:.4,max:.65},sink:{processors:[{name:`resample`,args:{n:64}},{name:`derive-metric`,args:{name:`avg`,op:`avg`}},{name:`derive-metric`,args:{name:`max`,op:`max`}}]},metrics:[{key:`max`,label:`最大厚度`,unit:`mm`,alarmHigh:.62},{key:`avg`,label:`平均厚度`,unit:`mm`,warnLow:.47,warnHigh:.57}],semantics:`测厚仪横向扫描轮廓:多点厚度分布。判读:平均值漂移=工艺整体偏移;单点尖峰=局部缺陷(夹杂/气泡);max 越硬限=超差,须联动分切剔除。`},{key:`ccd-image`,name:`CCD 视觉相机`,code:`CCD · IMG`,ch:`表面图像`,unit:`灰度`,base:128,amp:0,min:0,max:255,decimals:0,icon:`camera`,signalKind:`image`,sink:{processors:[{name:`thumbnail`,args:{width:256}},{name:`quality-gate`}]},metrics:[{key:`brightness`,label:`平均亮度`,unit:`gray`,alarmLow:30,alarmHigh:230}],semantics:`CCD 图像帧:像素数据入对象存储,Timescale 仅存元数据与派生指标。判读:brightness 过低=曝光不足/镜头遮挡,过高=过曝;缺陷识别算法经插件处理器扩展。`}],o=e=>e.startsWith(`daq-`)?e.slice(4):e,s=[{kind:`mock`,label:`Mock 模拟源`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`opcua`,label:`OPC UA(PLC/MES)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.Tag1`,hint:`要采集的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`},{key:`certificateFile`,label:`客户端证书路径(可选)`,type:`string`,placeholder:`certs/client_cert.pem`,hint:`Sign/SignAndEncrypt 时的 PEM 证书;留空自动生成自签`},{key:`privateKeyFile`,label:`私钥路径(可选)`,type:`string`,placeholder:`certs/client_key.pem`,hint:`与证书配对的 PEM 私钥`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP(设备本身走 RS-485)`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`寄存器地址`,type:`number`,required:!0,placeholder:`40001`,hint:`4xxxx=保持寄存器(地址-40001 为协议偏移);3xxxx=输入寄存器`},{key:`registerType`,label:`寄存器区`,type:`select`,default:`holding`,options:[{value:`holding`,label:`保持寄存器(4x)`},{value:`input`,label:`输入寄存器(3x)`}]},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`scale`,label:`缩放系数`,type:`number`,default:1,hint:`原始值 × scale = 工程量(如 0.1)`},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]}]},{kind:`mqtt`,label:`MQTT(网关/边缘采集)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20 或 mqtt.example.com`,hint:`MQTT Broker(EMQX/Mosquitto/Aliyun IoT)地址`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 标准端口 1883(TLS 8883)`},{key:`topic`,label:`主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/temp`,hint:`设备上报数值的主题;支持 +/# 通配`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.temperature`,hint:`payload 为 JSON 时按路径取数值,如 data.temp;纯数字报文留空`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(轮询)`,status:`real`,configFields:[{key:`url`,label:`接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/sensor`,hint:`返回数值或 JSON 的 HTTP 接口`},{key:`jsonPath`,label:`取值路径(可选)`,type:`string`,placeholder:`data.value`,hint:`响应为 JSON 时按路径取数值,如 data.value;纯文本留空`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]},{kind:`s7`,label:`S7(西门子 PLC)`,status:`planned`,configFields:[]}],c=60,l=30,u=(e,t)=>r({base:`/api/workshop/daq`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0}),d=()=>{let r=e([]),i=new Map,o=e([]),d=e({running:!0,defaultIntervalMs:1e3,defaultPublishIntervalMs:0,queryDisplayIntervalMs:5e3,nodesTotal:0,nodesOnline:0}),f=e({tsdb:`…`,queue:`…`,drivers:s.map(e=>({kind:e.kind,label:e.label,status:e.status,configFields:e.configFields})),driverAvailable:{},infra:void 0,produced:0,consumed:0,dropped:0,samplesStored:0}),p=e(a.map(e=>({...e}))),m=e({});function h(){i.clear();for(let e of r)i.set(e.id,e)}function g(e){let t=r.findIndex(t=>t.id===e.id);t>=0?r[t]=Object.assign(r[t],e):(r.push({...e,hist:[]}),i.set(e.id,r[r.length-1]))}let _=[],v=null;function y(){v=null;let e=_;if(_=[],!e.length)return;let t=new Map;for(let n of e){t.set(n.nodeId,n);let e=i.get(n.nodeId);e&&(e.hist.push(n.value),e.hist.length>c&&e.hist.splice(0,e.hist.length-c))}for(let e of t.values()){let t=i.get(e.nodeId);t&&(t.value=e.value,t.state=e.state,t.lastAt=e.at)}}function b(e){_.push(e),v||=setTimeout(y,500)}function x(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1),i.delete(e.node.id),Reflect.deleteProperty(m,e.node.id);return}g(e.node)}}function S(e){p.splice(0,p.length,...e.map(e=>({...e})))}function C(e){if(!e.template)return;let t=p.findIndex(t=>t.key===e.template.key);if(e.op===`removed`){t>=0&&p.splice(t,1);return}t>=0?p[t]={...e.template}:p.push({...e.template})}function w(e){let t=Date.parse(e.at),n=m[e.nodeId]??(m[e.nodeId]=[]);n.some(e=>e.at===t)||(n.unshift({at:t,kind:e.kind,points:e.preview,metrics:e.metrics??{},thumbUrl:e.thumbUrl,contentUrl:e.thumbUrl?e.thumbUrl.replace(`thumb=1`,`thumb=0`):void 0}),n.length>l&&n.splice(l));let r=i.get(e.nodeId);r&&(r.value=e.metrics?.avg??r.value,e.state&&(r.state=e.state),r.lastAt=e.at)}let T=0,E=null;function D(){T++,T===1&&(E=t().subscribe(O));let e=!1;return()=>{e||(e=!0,--T===0&&(E?.(),E=null))}}function O(e){if(e.type===`daq.reading`)b(e.payload);else if(e.type===`daq.frame`)w(e.payload);else if(e.type===`daq.node.changed`)x(e.payload);else if(e.type===`daq.controller`)Object.assign(d,e.payload);else if(e.type===`daq.template.changed`)C(e.payload);else if(e.type===`daq.alarm`){let t=e.payload;o.some(e=>e.id===t.id)||o.unshift(t)}else if(e.type===`daq.alarm.changed`){let t=e.payload;if(t.ackedAt){let e=o.findIndex(e=>e.id===t.id);e>=0&&o.splice(e,1)}}}async function k(){try{let e=await u(``),t=new Map(r.map(e=>[e.id,e])),n=[];for(let r of e.nodes){let e=t.get(r.id);e?(Object.assign(e,r),n.push(e),t.delete(r.id)):n.push({...r,hist:[]})}r.splice(0,r.length,...n),h();for(let e of Object.keys(m))i.has(e)||Reflect.deleteProperty(m,e);Object.assign(d,e.controller),Object.assign(f,e.meta??{}),f.driverAvailable=e.driverAvailable??{},e.drivers?.length&&(f.drivers=e.drivers),f.infra=e.infra,e.templates?.length&&S(e.templates),q.loaded=!0,q.error=``}catch(e){q.error=n(e)}}async function A(e,t){let n=await u(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return g(n.node),n.node}async function j(e,t){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}async function M(e,t,n){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify({posX:t,posZ:n})})}async function N(e){await u(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1),i.delete(e),Reflect.deleteProperty(m,e)}async function P(e,t){g((await u(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)}async function F(e,t){g((await u(`/${e}/bindings`,{method:`PUT`,body:JSON.stringify({deviceIds:t})})).node)}async function I(e,t){return(await u(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})})).test}async function L(e){return(await u(`/${e}/test`,{method:`POST`})).test}async function R(){try{let e=await u(`/alarms?scope=open&limit=50`);o.splice(0,o.length,...e.alarms??[])}catch{}}async function z(e){await u(`/alarms/${e}/ack`,{method:`POST`}),await R()}async function B(){let e=await u(`/infra/reconnect`,{method:`POST`});return f.infra=e.infra,await k(),e.infra}async function V(e,t,n){let r=await u(`/controller`,{method:`POST`,body:JSON.stringify({action:e,defaultIntervalMs:t,defaultPublishIntervalMs:n})});Object.assign(d,r.controller)}async function H(e,t={}){let n=new URLSearchParams;return t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.bucketMs!=null&&n.set(`bucketMs`,String(t.bucketMs)),t.limit!=null&&n.set(`limit`,String(t.limit)),(await u(`/${e}/samples?${n.toString()}`)).points??[]}async function U(e,t={}){let n=new URLSearchParams;t.fromMs!=null&&n.set(`from`,String(t.fromMs)),t.toMs!=null&&n.set(`to`,String(t.toMs)),t.kind&&n.set(`kind`,t.kind),t.limit!=null&&n.set(`limit`,String(t.limit));let r=await u(`/${e}/frames?${n.toString()}`);return m[e]=r.frames??[],m[e]}async function W(e){let t=await u(`/templates`,{method:`POST`,body:JSON.stringify(e)});return C({op:`added`,template:t.template}),t.template}async function G(e,t){let n=await u(`/templates/${e}`,{method:`PATCH`,body:JSON.stringify(t)});return C({op:`updated`,template:n.template}),n.template}async function K(e){await u(`/templates/${e}`,{method:`DELETE`}),C({op:`removed`,template:{key:e}})}let q=e({nodes:r,controller:d,meta:f,templates:p,loaded:!1,error:``,ensureWsFeed:D,load:k,createFromTemplate:A,createTemplate:W,updateTemplate:G,removeTemplate:K,testDriver:I,testNode:L,reconnectInfra:B,patchNode:j,saveTransform:M,removeNode:N,bindNode:P,setNodeBindings:F,controllerAction:V,alarms:o,fetchAlarms:R,ackAlarm:z,nodeById:e=>i.get(e)??r.find(t=>t.id===e),samplesOf:H,fetchFrames:U,frames:m,framesOf:e=>m[e]??[],templateOf:e=>p.find(t=>t.key===e||`daq-${t.key}`===e),ofDevice:e=>e?r.filter(t=>t.deviceBindingId===e):[]});return q},f=`__daqStream`;function p(){let e=globalThis;return e[f]||(e[f]=d()),e[f]}export{o as a,i,s as n,a as r,p as t};
@@ -0,0 +1 @@
1
+ import{P as e,R as t,d as n,et as r,pt as i}from"./CSkxz2NX.js";var a={desktop:1024,drawer:900,single:640},o=i(0),s=0,c=null;function l(){typeof window>`u`||c||(c=()=>{o.value=window.innerWidth},window.addEventListener(`resize`,c,{passive:!0}),window.addEventListener(`orientationchange`,c,{passive:!0}),o.value=window.innerWidth)}function u(){typeof window>`u`||!c||(window.removeEventListener(`resize`,c),window.removeEventListener(`orientationchange`,c),c=null)}function d(){typeof window<`u`&&!o.value&&(o.value=window.innerWidth),t(()=>{s+=1,l()}),e(()=>{s=Math.max(0,s-1),s===0&&u()});let i=n(()=>o.value||1440),c=n(()=>i.value<a.single),d=n(()=>i.value<a.drawer),f=n(()=>i.value>=a.drawer&&i.value<a.desktop),p=n(()=>i.value>=a.desktop),m=n(()=>d.value?c.value?`mobile`:`compact`:f.value?`tablet`:`desktop`);return r(()=>{document.documentElement.dataset.vpTier=m.value}),{width:i,tier:m,isMobile:c,isTablet:f,isDesktop:p,isDrawer:d}}export{d as t};
@@ -0,0 +1 @@
1
+ import{$ as e,P as t,R as n,S as r,Ut as i,V as a,d as o,f as s,h as c,p as l,pt as u,xt as d,y as f}from"./CSkxz2NX.js";import{d as p}from"./BJHKLJJU.js";import{t as m}from"./YnQxK3eG.js";import{t as h}from"./DIaZ2PTo2.js";import{t as g}from"./BDNMzG2s2.js";import{t as _}from"./CssgYAAL2.js";import{n as v,t as y}from"./BC9wjTJK2.js";import{t as b}from"./CNs_Ozdc2.js";import{t as x}from"./Dap5PmTL.js";var S={class:`town-page`},C={key:0,"data-hud":`town-empty`,class:`pane-empty`},w={class:`pe-title`},T={class:`pe-sub`},E={key:2,"data-hud":`town-loading`,class:`pane-loading`},D=g(r({__name:`town`,setup(r){b({layout:`town`,title:`Digital Twin`});let g=h(),D=v(),O=_(),{subscribe:k,unsubscribe:A}=y(),j=m(`token`),M=u(!1);e(()=>g.isLoggedIn,async e=>{if(!e){M.value=!1;return}if(await g.refresh(),g.isLoggedIn)try{await O.load(),M.value=!0}catch{}},{immediate:!0}),n(()=>{!g.isLoggedIn&&!j.value&&p(`/workshop`)}),e(j,e=>{!e&&!g.isLoggedIn&&p(`/workshop`)});let N=o(()=>{let e=[];for(let t of O.workspaces)for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e});e(()=>N.value.join(`,`),()=>{for(let e of N.value)k(e)},{immediate:!0}),t(()=>{for(let e of N.value)A(e)});let P=o(()=>{let e=N.value[0];if(e&&D.channels[e])return e;for(let e of O.workspaces)for(let t of e.channelIds??[])if(D.channels[t])return t;return N.value[0]??void 0}),F=o(()=>N.value.length>0);return(e,t)=>{let n=x;return a(),c(`div`,S,[d(M)&&!d(F)?(a(),c(`div`,C,[t[0]||=s(`span`,{class:`pe-icon i-tabler-map-2`},null,-1),s(`div`,w,i(e.$t(`town.k1wm8wtr001`)),1),s(`div`,T,[f(i(e.$t(`town.k47e4s002`))+` `,1),s(`b`,null,`Agent `+i(e.$t(`town.k3n4mae005`)),1),f(` `+i(e.$t(`town.k17rerba003`)),1)])])):d(P)?(a(),l(n,{key:1,"channel-id":d(P),"all-channels":!0},null,8,[`channel-id`])):(a(),c(`div`,E,i(e.$t(`town.k1uc5mup004`)),1))])}}}),[[`__scopeId`,`data-v-83876687`]]);export{D as default};
@@ -1 +1 @@
1
- import{a as e,c as t}from"./BU83-NnX.js";import{$ as n,S as r,Ut as i,V as a,b as o,ct as s,d as c,f as l,h as u,m as d,p as f,pt as p,tt as m,xt as h,y as g}from"./CSkxz2NX.js";import{s as _}from"./YnQxK3eG.js";import{n as v}from"./DtYHUi5Z.js";import{n as y}from"./KZQX7xoM.js";import{t as b}from"./zIGh7R49.js";import{t as x}from"./aWWIh8YL.js";import{i as S}from"./DBHNsT1Y.js";import{t as C}from"./BCGafdXT.js";import{t as w}from"./pdk8jLGT.js";import{t as T}from"./BYhEUx8t.js";import{t as E}from"./jZsY8yYz.js";import{t as D}from"./DIaZ2PTo2.js";import{t as O}from"./BDNMzG2s2.js";var k={class:`page-wrap`},A={class:`aw-page-head`},j={class:`sub`},M={class:`gate-title`},N={class:`gate-hint`},P=O(r({__name:`users`,setup(r){let{t:O}=y(),P=D(),F=p(!1),I=p([]),L=p(``),R=c(()=>P.authHeaders()),z=async()=>{if(P.isAdmin){F.value=!0;try{let e=await _(`/api/users`,{headers:R.value,query:{pageSize:100,keyword:L.value||void 0}});I.value=e.data?.items??[]}catch(t){e.error(t instanceof Error?t.message:O(`users.k1br33vc006`))}finally{F.value=!1}}};n(()=>P.isLoggedIn,e=>{e&&z()},{immediate:!0});let B={admin:`volcano`,editor:`blue`,user:`default`},V=c(()=>[{title:O(`users.name`),dataIndex:`name`,key:`name`},{title:O(`users.email`),dataIndex:`email`,key:`email`},{title:O(`users.role`),dataIndex:`role`,key:`role`,width:110},{title:O(`common.status`),dataIndex:`status`,key:`status`,width:90},{title:O(`users.created`),dataIndex:`createdAt`,key:`createdAt`,width:150},{title:O(`common.actions`),key:`action`,width:220}]);function H(e){return O(`users.role${e.charAt(0).toUpperCase()}${e.slice(1)}`)}let U=async(t,n)=>{try{await _(`/api/users/${t.id}`,{method:`PUT`,headers:R.value,body:{role:n}}),e.success(O(`users.krkb23h011`,{p0:t.name,p1:n})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1enhqn3007`))}},W=async t=>{let n=t.status===`active`?`disabled`:`active`;try{await _(`/api/users/${t.id}`,{method:`PUT`,headers:R.value,body:{status:n}}),e.success(O(`users.k1u7u12g012`,{p0:t.name,p1:O(n===`active`?`users.k3xhfg009`:`users.k3wsi1010`)})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1enhqn3007`))}},G=async t=>{try{await _(`/api/users/${t.id}`,{method:`DELETE`,headers:R.value}),e.success(O(`users.knh5f2r013`,{p0:t.name})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1bphrb3008`))}},K=e=>e.id===P.user?.id;return v({title:()=>O(`titles.users`)}),(e,n)=>{let r=C,c=S,p=T,_=x,v=t,y=w,D=E,R=b;return a(),u(`div`,k,[l(`div`,A,[l(`div`,null,[n[2]||=l(`p`,{class:`aw-kicker`},` agentworkshop / identity `,-1),l(`h1`,null,[g(i(h(O)(`users.title`))+` `,1),o(r,{color:`volcano`,class:`admin-tag`},{default:m(()=>[...n[1]||=[l(`span`,{class:`i-tabler-shield-check`},null,-1),g(` admin `,-1)]]),_:1})]),l(`p`,j,i(e.$t(`users.k1flpho5002`)),1)]),o(c,{value:h(L),"onUpdate:value":n[0]||=e=>s(L)?L.value=e:null,placeholder:h(O)(`users.search`),style:{width:`240px`},onSearch:z},null,8,[`value`,`placeholder`])]),h(P).isAdmin?(a(),f(p,{key:1,bordered:!1,class:`table-card`},{default:m(()=>[o(R,{"data-source":h(I),columns:h(V),loading:h(F),"row-key":`id`,size:`small`,pagination:!1},{bodyCell:m(({column:t,record:n})=>[t.key===`role`?(a(),f(r,{key:0,color:B[n.role]},{default:m(()=>[g(i(H(n.role)),1)]),_:2},1032,[`color`])):t.key===`status`?(a(),f(r,{key:1,color:n.status===`active`?`green`:`default`},{default:m(()=>[g(i(n.status===`active`?e.$t(`users.k3xhfg009`):e.$t(`users.k3wsi1010`)),1)]),_:2},1032,[`color`])):t.key===`action`?(a(),f(D,{key:2,size:`small`},{default:m(()=>[o(_,{value:n.role,size:`small`,style:{width:`92px`},disabled:K(n),options:[{value:`user`,label:`user`},{value:`editor`,label:`editor`},{value:`admin`,label:`admin`}],onChange:e=>U(n,e)},null,8,[`value`,`disabled`,`onChange`]),o(v,{size:`small`,type:`text`,disabled:K(n),onClick:e=>W(n)},{default:m(()=>[g(i(n.status===`active`?e.$t(`users.k3wsi1010`):e.$t(`users.k3xhfg009`)),1)]),_:2},1032,[`disabled`,`onClick`]),o(y,{title:e.$t(`users.k1jk2os9001`),disabled:K(n),onConfirm:e=>G(n)},{default:m(()=>[o(v,{size:`small`,type:`text`,danger:``,disabled:K(n)},{default:m(()=>[g(i(e.$t(`users.k3xakp005`)),1)]),_:1},8,[`disabled`])]),_:2},1032,[`title`,`disabled`,`onConfirm`])]),_:2},1024)):d(``,!0)]),_:1},8,[`data-source`,`columns`,`loading`])]),_:1})):(a(),f(p,{key:0,bordered:!1,class:`gate-card`},{default:m(()=>[n[3]||=l(`span`,{class:`i-tabler-lock gate-icon`},null,-1),l(`p`,M,i(e.$t(`users.kpdo6rc003`)),1),l(`p`,N,i(e.$t(`users.k1mue9bl004`)),1)]),_:1}))])}}}),[[`__scopeId`,`data-v-6dd85a94`]]);export{P as default};
1
+ import{a as e,c as t}from"./BU83-NnX.js";import{$ as n,S as r,Ut as i,V as a,b as o,ct as s,d as c,f as l,h as u,m as d,p as f,pt as p,tt as m,xt as h,y as g}from"./CSkxz2NX.js";import{s as _}from"./YnQxK3eG.js";import{n as v}from"./DtYHUi5Z.js";import{n as y}from"./KZQX7xoM.js";import{t as b}from"./BneN7fbu.js";import{t as x}from"./aWWIh8YL.js";import{i as S}from"./DBHNsT1Y.js";import{t as C}from"./BCGafdXT.js";import{t as w}from"./pdk8jLGT.js";import{t as T}from"./BYhEUx8t.js";import{t as E}from"./jZsY8yYz.js";import{t as D}from"./DIaZ2PTo2.js";import{t as O}from"./BDNMzG2s2.js";var k={class:`page-wrap`},A={class:`aw-page-head`},j={class:`sub`},M={class:`gate-title`},N={class:`gate-hint`},P=O(r({__name:`users`,setup(r){let{t:O}=y(),P=D(),F=p(!1),I=p([]),L=p(``),R=c(()=>P.authHeaders()),z=async()=>{if(P.isAdmin){F.value=!0;try{let e=await _(`/api/users`,{headers:R.value,query:{pageSize:100,keyword:L.value||void 0}});I.value=e.data?.items??[]}catch(t){e.error(t instanceof Error?t.message:O(`users.k1br33vc006`))}finally{F.value=!1}}};n(()=>P.isLoggedIn,e=>{e&&z()},{immediate:!0});let B={admin:`volcano`,editor:`blue`,user:`default`},V=c(()=>[{title:O(`users.name`),dataIndex:`name`,key:`name`},{title:O(`users.email`),dataIndex:`email`,key:`email`},{title:O(`users.role`),dataIndex:`role`,key:`role`,width:110},{title:O(`common.status`),dataIndex:`status`,key:`status`,width:90},{title:O(`users.created`),dataIndex:`createdAt`,key:`createdAt`,width:150},{title:O(`common.actions`),key:`action`,width:220}]);function H(e){return O(`users.role${e.charAt(0).toUpperCase()}${e.slice(1)}`)}let U=async(t,n)=>{try{await _(`/api/users/${t.id}`,{method:`PUT`,headers:R.value,body:{role:n}}),e.success(O(`users.krkb23h011`,{p0:t.name,p1:n})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1enhqn3007`))}},W=async t=>{let n=t.status===`active`?`disabled`:`active`;try{await _(`/api/users/${t.id}`,{method:`PUT`,headers:R.value,body:{status:n}}),e.success(O(`users.k1u7u12g012`,{p0:t.name,p1:O(n===`active`?`users.k3xhfg009`:`users.k3wsi1010`)})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1enhqn3007`))}},G=async t=>{try{await _(`/api/users/${t.id}`,{method:`DELETE`,headers:R.value}),e.success(O(`users.knh5f2r013`,{p0:t.name})),z()}catch(t){e.error(t instanceof Error?t.message:O(`users.k1bphrb3008`))}},K=e=>e.id===P.user?.id;return v({title:()=>O(`titles.users`)}),(e,n)=>{let r=C,c=S,p=T,_=x,v=t,y=w,D=E,R=b;return a(),u(`div`,k,[l(`div`,A,[l(`div`,null,[n[2]||=l(`p`,{class:`aw-kicker`},` agentworkshop / identity `,-1),l(`h1`,null,[g(i(h(O)(`users.title`))+` `,1),o(r,{color:`volcano`,class:`admin-tag`},{default:m(()=>[...n[1]||=[l(`span`,{class:`i-tabler-shield-check`},null,-1),g(` admin `,-1)]]),_:1})]),l(`p`,j,i(e.$t(`users.k1flpho5002`)),1)]),o(c,{value:h(L),"onUpdate:value":n[0]||=e=>s(L)?L.value=e:null,placeholder:h(O)(`users.search`),style:{width:`240px`},onSearch:z},null,8,[`value`,`placeholder`])]),h(P).isAdmin?(a(),f(p,{key:1,bordered:!1,class:`table-card`},{default:m(()=>[o(R,{"data-source":h(I),columns:h(V),loading:h(F),"row-key":`id`,size:`small`,pagination:!1},{bodyCell:m(({column:t,record:n})=>[t.key===`role`?(a(),f(r,{key:0,color:B[n.role]},{default:m(()=>[g(i(H(n.role)),1)]),_:2},1032,[`color`])):t.key===`status`?(a(),f(r,{key:1,color:n.status===`active`?`green`:`default`},{default:m(()=>[g(i(n.status===`active`?e.$t(`users.k3xhfg009`):e.$t(`users.k3wsi1010`)),1)]),_:2},1032,[`color`])):t.key===`action`?(a(),f(D,{key:2,size:`small`},{default:m(()=>[o(_,{value:n.role,size:`small`,style:{width:`92px`},disabled:K(n),options:[{value:`user`,label:`user`},{value:`editor`,label:`editor`},{value:`admin`,label:`admin`}],onChange:e=>U(n,e)},null,8,[`value`,`disabled`,`onChange`]),o(v,{size:`small`,type:`text`,disabled:K(n),onClick:e=>W(n)},{default:m(()=>[g(i(n.status===`active`?e.$t(`users.k3wsi1010`):e.$t(`users.k3xhfg009`)),1)]),_:2},1032,[`disabled`,`onClick`]),o(y,{title:e.$t(`users.k1jk2os9001`),disabled:K(n),onConfirm:e=>G(n)},{default:m(()=>[o(v,{size:`small`,type:`text`,danger:``,disabled:K(n)},{default:m(()=>[g(i(e.$t(`users.k3xakp005`)),1)]),_:1},8,[`disabled`])]),_:2},1032,[`title`,`disabled`,`onConfirm`])]),_:2},1024)):d(``,!0)]),_:1},8,[`data-source`,`columns`,`loading`])]),_:1})):(a(),f(p,{key:0,bordered:!1,class:`gate-card`},{default:m(()=>[n[3]||=l(`span`,{class:`i-tabler-lock gate-icon`},null,-1),l(`p`,M,i(e.$t(`users.kpdo6rc003`)),1),l(`p`,N,i(e.$t(`users.k1mue9bl004`)),1)]),_:1}))])}}}),[[`__scopeId`,`data-v-d99c9da7`]]);export{P as default};
@@ -1 +1 @@
1
- import{a as e,c as t,n}from"./BU83-NnX.js";import{S as r,Ut as i,V as a,Vt as ee,W as te,b as o,ct as s,d as c,dt as l,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,xt as _,y as v}from"./CSkxz2NX.js";import{d as ne}from"./BJHKLJJU.js";import{n as y}from"./DtYHUi5Z.js";import{n as b}from"./KZQX7xoM.js";import{n as re,r as ie,t as ae}from"./DDgJcSET.js";import{t as oe}from"./aWWIh8YL.js";import{r as se,t as ce}from"./DBHNsT1Y.js";import{i as le,n as ue,t as de}from"./BCGafdXT.js";import{t as fe}from"./pdk8jLGT.js";import{t as pe}from"./jZsY8yYz.js";import{t as me}from"./DZtm4l-P2.js";import{t as he}from"./CClOy-Hz2.js";import{t as x}from"./DIaZ2PTo2.js";import{t as S}from"./BDNMzG2s2.js";import{t as C}from"./D0ZBQrN_2.js";import{t as w}from"./BN6iuJEg2.js";import{t as T}from"./CNs_Ozdc2.js";var E={class:`page`},D={class:`head`},O={class:`sub`},k={class:`toolbar`},A={key:0,class:`admin-note`},j={class:`grid`},M={class:`card-head`},N={class:`name`},P={class:`owner`},F={key:0,class:`desc`},I={class:`member-line`},L={class:`lead-name`},R={key:0,class:`count`},ge={key:1,class:`count`},_e=[`title`],ve={class:`card-foot`},ye=[`title`],z=S(r({__name:`channel-templates`,setup(r){let{t:S}=b();T({layout:`default`});let z=w(),B=x(),V=h([]),H=h([]),U=h(!1),W=async()=>{U.value=!0;try{let[e,t]=await Promise.all([z.listChannelTemplates(),z.listTemplates()]);V.value=e?.data??[],H.value=t?.data??[]}finally{U.value=!1}};W();let G=h(`all`),K=c(()=>{let e=B.user?.id;switch(G.value){case`mine`:return V.value.filter(t=>t.ownerUserId===e);case`public`:return V.value.filter(e=>e.visibility===`public`);case`builtin`:return V.value.filter(e=>e.isBuiltin);default:return V.value}}),q=e=>!e.isBuiltin&&(e.ownerUserId===B.user?.id||B.isAdmin),J=e=>e.isBuiltin?{text:S(`ctpl.k3x23c021`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:S(`ctpl.k3wv1t022`),color:`green`}:{text:S(`ctpl.k447jj023`),color:`default`},be=e=>`templateId`in e?H.value.find(t=>t.id===e.templateId)?.name??e.templateId.slice(0,8):e.inline.name,Y=h(!1),X=l({name:``,description:``,scenarioPrompt:``,workspace:``,visibility:`private`,leadId:``,memberIds:[]}),Z=()=>{X.name=``,X.description=``,X.scenarioPrompt=``,X.workspace=``,X.visibility=`private`,X.leadId=``,X.memberIds=[],Y.value=!0},xe=async()=>{if(!X.name.trim()){e.warning(S(`ctpl.k1i0ji0y024`));return}let t=X.leadId?H.value.find(e=>e.id===X.leadId):void 0,n=X.memberIds.filter(e=>e!==X.leadId).map(e=>({templateId:e,role:`worker`}));try{await z.createChannelTemplate({name:X.name.trim(),description:X.description||void 0,scenarioPrompt:X.scenarioPrompt||void 0,workspace:X.workspace||void 0,lead:t?{name:t.name,harness:t.harness,config:t.config}:null,members:n,visibility:X.visibility}),e.success(S(`ctpl.kyppebc025`)),Y.value=!1,W()}catch(t){e.error(C(t))}},Se=async(t,n)=>{try{await z.updateChannelTemplate(t.id,{visibility:n?`public`:`private`}),e.success(S(n?`ctpl.kkziya3026`:`ctpl.k1xxabaf027`)),W()}catch(t){e.error(C(t))}},Q=h(null),Ce=async t=>{Q.value=t.id;try{let n=(await z.instantiateChannelTemplate(t.id))?.data;e.success(S(`ctpl.kefkfnl030`,{p0:t.name,p1:n?.agentCount??0}))}catch(t){e.error(C(t))}finally{Q.value=null}},$=async t=>{await z.deleteChannelTemplate(t.id),e.success(S(`ctpl.k1oxfuqj028`)),W()};return y({title:()=>S(`titles.ctpl`)}),(e,r)=>{let c=t,l=pe,h=ae,y=de,b=he,x=fe,S=me,C=ce,w=ie,T=oe,z=se,W=ue,we=le,Te=re,Ee=n;return a(),d(`div`,E,[u(`div`,D,[u(`div`,null,[u(`h2`,null,`Channel `+i(e.$t(`ctpl.k1f54iqd029`)),1),u(`p`,O,i(e.$t(`ctpl.k18gglgp011`)),1)]),o(l,null,{default:g(()=>[o(c,{onClick:r[0]||=t=>(`navigateTo`in e?e.navigateTo:_(ne))(`/workshop`)},{default:g(()=>[v(i(e.$t(`ctpl.krpx6qa012`)),1)]),_:1}),o(c,{type:`primary`,onClick:Z},{default:g(()=>[v(i(e.$t(`ctpl.k1efixrj013`)),1)]),_:1})]),_:1})]),u(`div`,k,[o(h,{value:_(G),"onUpdate:value":r[1]||=e=>s(G)?G.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:_(V).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`]),_(B).isAdmin?(a(),d(`span`,A,[r[10]||=u(`span`,{class:`i-tabler-shield-check`},null,-1),v(` `+i(e.$t(`ctpl.ka1gpdj014`)),1)])):p(``,!0)]),o(S,{spinning:_(U)},{default:g(()=>[u(`div`,j,[(a(!0),d(f,null,te(_(K),t=>(a(),d(`div`,{key:t.id,class:`card`},[u(`div`,M,[u(`span`,N,i(t.name),1),o(y,{color:J(t).color,class:`vis-tag`},{default:g(()=>[J(t).icon?(a(),d(`span`,{key:0,class:ee(J(t).icon)},null,2)):p(``,!0),v(i(J(t).text),1)]),_:2},1032,[`color`]),!t.isBuiltin&&q(t)?(a(),m(b,{key:0,checked:t.visibility===`public`,size:`small`,"checked-children":`公开`,"un-checked-children":`私有`,onChange:e=>Se(t,e===!0)},null,8,[`checked`,`onChange`])):p(``,!0),u(`span`,P,i(t.ownerName??`-`),1)]),t.description?(a(),d(`p`,F,i(t.description),1)):p(``,!0),u(`div`,I,[r[12]||=u(`span`,{class:`i-tabler-users-group`},null,-1),t.lead||t.members.length>0?(a(),d(f,{key:0},[o(y,{color:`gold`},{default:g(()=>[...r[11]||=[v(` lead `,-1)]]),_:1}),u(`span`,L,i(t.lead?.name??be(t.members.find(e=>e.role===`lead`)??t.members[0])),1),t.members.filter(e=>e.role!==`lead`).length>0?(a(),d(`span`,R,`+ `+i(t.members.filter(e=>e.role!==`lead`).length)+` worker`,1)):p(``,!0)],64)):(a(),d(`span`,ge,i(e.$t(`ctpl.k3rx4ps015`)),1))]),t.scenarioPrompt?(a(),d(`div`,{key:1,class:`scenario`,title:t.scenarioPrompt},i(t.scenarioPrompt.slice(0,90))+i(t.scenarioPrompt.length>90?`…`:``),9,_e)):p(``,!0),u(`div`,ve,[t.workspace?(a(),d(`span`,{key:0,class:`ws`,title:t.workspace},[r[13]||=u(`span`,{class:`i-tabler-folder`},null,-1),v(` `+i(t.workspace),1)],8,ye)):p(``,!0),r[14]||=u(`span`,{class:`spacer`},null,-1),q(t)?(a(),m(x,{key:1,title:e.$t(`ctpl.k117jag9001`),onConfirm:e=>$(t)},{default:g(()=>[o(c,{size:`small`,type:`text`,danger:``},{default:g(()=>[v(i(e.$t(`ctpl.k3xakp016`)),1)]),_:1})]),_:1},8,[`title`,`onConfirm`])):p(``,!0),o(c,{size:`small`,type:`primary`,ghost:``,loading:_(Q)===t.id,title:e.$t(`ctpl.knjomku002`),onClick:e=>Ce(t)},{default:g(()=>[v(i(e.$t(`ctpl.k3mr1fo017`)),1)]),_:1},8,[`loading`,`title`,`onClick`])])]))),128)),_(K).length===0?(a(),d(`div`,{key:0,class:`card placeholder`,onClick:Z},[r[15]||=u(`span`,{class:`i-tabler-layout-grid-add big`},null,-1),u(`span`,null,i(e.$t(`ctpl.k19fglby018`)),1)])):p(``,!0)])]),_:1},8,[`spinning`]),o(Ee,{open:_(Y),"onUpdate:open":r[9]||=e=>s(Y)?Y.value=e:null,title:`新建 Channel 模板`,"ok-text":`创建`,"cancel-text":`取消`,onOk:xe},{default:g(()=>[o(Te,{layout:`vertical`},{default:g(()=>[o(w,{label:e.$t(`ctpl.k1f55q76003`)},{default:g(()=>[o(C,{value:_(X).name,"onUpdate:value":r[2]||=e=>_(X).name=e},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k40gkk004`)},{default:g(()=>[o(C,{value:_(X).description,"onUpdate:value":r[3]||=e=>_(X).description=e},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:`Lead 模板(实例化时克隆为 channel lead)`},{default:g(()=>[o(T,{value:_(X).leadId,"onUpdate:value":r[4]||=e=>_(X).leadId=e,"allow-clear":``,placeholder:e.$t(`ctpl.k1ju32o7005`),options:_(H).map(e=>({value:e.id,label:`${e.name}(${e.harness})`}))},null,8,[`value`,`placeholder`,`options`])]),_:1}),o(w,{label:e.$t(`ctpl.k5uq1js006`)},{default:g(()=>[o(T,{value:_(X).memberIds,"onUpdate:value":r[5]||=e=>_(X).memberIds=e,mode:`multiple`,placeholder:e.$t(`ctpl.kqmdkc9007`),options:_(H).filter(e=>e.id!==_(X).leadId).map(e=>({value:e.id,label:`${e.name}(${e.harness})`}))},null,8,[`value`,`placeholder`,`options`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k1q87yho008`)},{default:g(()=>[o(z,{value:_(X).scenarioPrompt,"onUpdate:value":r[6]||=e=>_(X).scenarioPrompt=e,rows:3},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.kk4u5cr009`)},{default:g(()=>[o(C,{value:_(X).workspace,"onUpdate:value":r[7]||=e=>_(X).workspace=e,placeholder:`data/workspaces/<channelId>`},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k3lrqn0010`)},{default:g(()=>[o(we,{value:_(X).visibility,"onUpdate:value":r[8]||=e=>_(X).visibility=e},{default:g(()=>[o(W,{value:`private`},{default:g(()=>[v(i(e.$t(`ctpl.k17jfge3019`)),1)]),_:1}),o(W,{value:`public`},{default:g(()=>[v(i(e.$t(`ctpl.k191u0u5020`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`])])}}}),[[`__scopeId`,`data-v-0c2ddfe8`]]);export{z as default};
1
+ import{a as e,c as t,n}from"./BU83-NnX.js";import{S as r,Ut as i,V as a,Vt as ee,W as te,b as o,ct as s,d as c,dt as l,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,xt as _,y as v}from"./CSkxz2NX.js";import{d as ne}from"./BJHKLJJU.js";import{n as y}from"./DtYHUi5Z.js";import{n as b}from"./KZQX7xoM.js";import{n as re,r as ie,t as ae}from"./DDgJcSET.js";import{t as oe}from"./aWWIh8YL.js";import{r as se,t as ce}from"./DBHNsT1Y.js";import{i as le,n as ue,t as de}from"./BCGafdXT.js";import{t as fe}from"./pdk8jLGT.js";import{t as pe}from"./jZsY8yYz.js";import{t as me}from"./DZtm4l-P2.js";import{t as he}from"./CClOy-Hz2.js";import{t as x}from"./DIaZ2PTo2.js";import{t as S}from"./BDNMzG2s2.js";import{t as C}from"./D0ZBQrN_2.js";import{t as w}from"./BN6iuJEg2.js";import{t as T}from"./CNs_Ozdc2.js";var E={class:`page`},D={class:`head`},O={class:`sub`},k={class:`toolbar`},A={key:0,class:`admin-note`},j={class:`grid`},M={class:`card-head`},N={class:`name`},P={class:`owner`},F={key:0,class:`desc`},I={class:`member-line`},L={class:`lead-name`},R={key:0,class:`count`},ge={key:1,class:`count`},_e=[`title`],ve={class:`card-foot`},ye=[`title`],z=S(r({__name:`channel-templates`,setup(r){let{t:S}=b();T({layout:`default`});let z=w(),B=x(),V=h([]),H=h([]),U=h(!1),W=async()=>{U.value=!0;try{let[e,t]=await Promise.all([z.listChannelTemplates(),z.listTemplates()]);V.value=e?.data??[],H.value=t?.data??[]}finally{U.value=!1}};W();let G=h(`all`),K=c(()=>{let e=B.user?.id;switch(G.value){case`mine`:return V.value.filter(t=>t.ownerUserId===e);case`public`:return V.value.filter(e=>e.visibility===`public`);case`builtin`:return V.value.filter(e=>e.isBuiltin);default:return V.value}}),q=e=>!e.isBuiltin&&(e.ownerUserId===B.user?.id||B.isAdmin),J=e=>e.isBuiltin?{text:S(`ctpl.k3x23c021`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:S(`ctpl.k3wv1t022`),color:`green`}:{text:S(`ctpl.k447jj023`),color:`default`},be=e=>`templateId`in e?H.value.find(t=>t.id===e.templateId)?.name??e.templateId.slice(0,8):e.inline.name,Y=h(!1),X=l({name:``,description:``,scenarioPrompt:``,workspace:``,visibility:`private`,leadId:``,memberIds:[]}),Z=()=>{X.name=``,X.description=``,X.scenarioPrompt=``,X.workspace=``,X.visibility=`private`,X.leadId=``,X.memberIds=[],Y.value=!0},xe=async()=>{if(!X.name.trim()){e.warning(S(`ctpl.k1i0ji0y024`));return}let t=X.leadId?H.value.find(e=>e.id===X.leadId):void 0,n=X.memberIds.filter(e=>e!==X.leadId).map(e=>({templateId:e,role:`worker`}));try{await z.createChannelTemplate({name:X.name.trim(),description:X.description||void 0,scenarioPrompt:X.scenarioPrompt||void 0,workspace:X.workspace||void 0,lead:t?{name:t.name,harness:t.harness,config:t.config}:null,members:n,visibility:X.visibility}),e.success(S(`ctpl.kyppebc025`)),Y.value=!1,W()}catch(t){e.error(C(t))}},Se=async(t,n)=>{try{await z.updateChannelTemplate(t.id,{visibility:n?`public`:`private`}),e.success(S(n?`ctpl.kkziya3026`:`ctpl.k1xxabaf027`)),W()}catch(t){e.error(C(t))}},Q=h(null),Ce=async t=>{Q.value=t.id;try{let n=(await z.instantiateChannelTemplate(t.id))?.data;e.success(S(`ctpl.kefkfnl030`,{p0:t.name,p1:n?.agentCount??0}))}catch(t){e.error(C(t))}finally{Q.value=null}},$=async t=>{await z.deleteChannelTemplate(t.id),e.success(S(`ctpl.k1oxfuqj028`)),W()};return y({title:()=>S(`titles.ctpl`)}),(e,r)=>{let c=t,l=pe,h=ae,y=de,b=he,x=fe,S=me,C=ce,w=ie,T=oe,z=se,W=ue,we=le,Te=re,Ee=n;return a(),d(`div`,E,[u(`div`,D,[u(`div`,null,[u(`h2`,null,`Channel `+i(e.$t(`ctpl.k1f54iqd029`)),1),u(`p`,O,i(e.$t(`ctpl.k18gglgp011`)),1)]),o(l,null,{default:g(()=>[o(c,{onClick:r[0]||=t=>(`navigateTo`in e?e.navigateTo:_(ne))(`/workshop`)},{default:g(()=>[v(i(e.$t(`ctpl.krpx6qa012`)),1)]),_:1}),o(c,{type:`primary`,onClick:Z},{default:g(()=>[v(i(e.$t(`ctpl.k1efixrj013`)),1)]),_:1})]),_:1})]),u(`div`,k,[o(h,{value:_(G),"onUpdate:value":r[1]||=e=>s(G)?G.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:_(V).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`]),_(B).isAdmin?(a(),d(`span`,A,[r[10]||=u(`span`,{class:`i-tabler-shield-check`},null,-1),v(` `+i(e.$t(`ctpl.ka1gpdj014`)),1)])):p(``,!0)]),o(S,{spinning:_(U)},{default:g(()=>[u(`div`,j,[(a(!0),d(f,null,te(_(K),t=>(a(),d(`div`,{key:t.id,class:`card`},[u(`div`,M,[u(`span`,N,i(t.name),1),o(y,{color:J(t).color,class:`vis-tag`},{default:g(()=>[J(t).icon?(a(),d(`span`,{key:0,class:ee(J(t).icon)},null,2)):p(``,!0),v(i(J(t).text),1)]),_:2},1032,[`color`]),!t.isBuiltin&&q(t)?(a(),m(b,{key:0,checked:t.visibility===`public`,size:`small`,"checked-children":`公开`,"un-checked-children":`私有`,onChange:e=>Se(t,e===!0)},null,8,[`checked`,`onChange`])):p(``,!0),u(`span`,P,i(t.ownerName??`-`),1)]),t.description?(a(),d(`p`,F,i(t.description),1)):p(``,!0),u(`div`,I,[r[12]||=u(`span`,{class:`i-tabler-users-group`},null,-1),t.lead||t.members.length>0?(a(),d(f,{key:0},[o(y,{color:`gold`},{default:g(()=>[...r[11]||=[v(` lead `,-1)]]),_:1}),u(`span`,L,i(t.lead?.name??be(t.members.find(e=>e.role===`lead`)??t.members[0])),1),t.members.filter(e=>e.role!==`lead`).length>0?(a(),d(`span`,R,`+ `+i(t.members.filter(e=>e.role!==`lead`).length)+` worker`,1)):p(``,!0)],64)):(a(),d(`span`,ge,i(e.$t(`ctpl.k3rx4ps015`)),1))]),t.scenarioPrompt?(a(),d(`div`,{key:1,class:`scenario`,title:t.scenarioPrompt},i(t.scenarioPrompt.slice(0,90))+i(t.scenarioPrompt.length>90?`…`:``),9,_e)):p(``,!0),u(`div`,ve,[t.workspace?(a(),d(`span`,{key:0,class:`ws`,title:t.workspace},[r[13]||=u(`span`,{class:`i-tabler-folder`},null,-1),v(` `+i(t.workspace),1)],8,ye)):p(``,!0),r[14]||=u(`span`,{class:`spacer`},null,-1),q(t)?(a(),m(x,{key:1,title:e.$t(`ctpl.k117jag9001`),onConfirm:e=>$(t)},{default:g(()=>[o(c,{size:`small`,type:`text`,danger:``},{default:g(()=>[v(i(e.$t(`ctpl.k3xakp016`)),1)]),_:1})]),_:1},8,[`title`,`onConfirm`])):p(``,!0),o(c,{size:`small`,type:`primary`,ghost:``,loading:_(Q)===t.id,title:e.$t(`ctpl.knjomku002`),onClick:e=>Ce(t)},{default:g(()=>[v(i(e.$t(`ctpl.k3mr1fo017`)),1)]),_:1},8,[`loading`,`title`,`onClick`])])]))),128)),_(K).length===0?(a(),d(`div`,{key:0,class:`card placeholder`,onClick:Z},[r[15]||=u(`span`,{class:`i-tabler-layout-grid-add big`},null,-1),u(`span`,null,i(e.$t(`ctpl.k19fglby018`)),1)])):p(``,!0)])]),_:1},8,[`spinning`]),o(Ee,{open:_(Y),"onUpdate:open":r[9]||=e=>s(Y)?Y.value=e:null,title:`新建 Channel 模板`,"ok-text":`创建`,"cancel-text":`取消`,onOk:xe},{default:g(()=>[o(Te,{layout:`vertical`},{default:g(()=>[o(w,{label:e.$t(`ctpl.k1f55q76003`)},{default:g(()=>[o(C,{value:_(X).name,"onUpdate:value":r[2]||=e=>_(X).name=e},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k40gkk004`)},{default:g(()=>[o(C,{value:_(X).description,"onUpdate:value":r[3]||=e=>_(X).description=e},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:`Lead 模板(实例化时克隆为 channel lead)`},{default:g(()=>[o(T,{value:_(X).leadId,"onUpdate:value":r[4]||=e=>_(X).leadId=e,"allow-clear":``,placeholder:e.$t(`ctpl.k1ju32o7005`),options:_(H).map(e=>({value:e.id,label:`${e.name}(${e.harness})`}))},null,8,[`value`,`placeholder`,`options`])]),_:1}),o(w,{label:e.$t(`ctpl.k5uq1js006`)},{default:g(()=>[o(T,{value:_(X).memberIds,"onUpdate:value":r[5]||=e=>_(X).memberIds=e,mode:`multiple`,placeholder:e.$t(`ctpl.kqmdkc9007`),options:_(H).filter(e=>e.id!==_(X).leadId).map(e=>({value:e.id,label:`${e.name}(${e.harness})`}))},null,8,[`value`,`placeholder`,`options`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k1q87yho008`)},{default:g(()=>[o(z,{value:_(X).scenarioPrompt,"onUpdate:value":r[6]||=e=>_(X).scenarioPrompt=e,rows:3},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.kk4u5cr009`)},{default:g(()=>[o(C,{value:_(X).workspace,"onUpdate:value":r[7]||=e=>_(X).workspace=e,placeholder:`data/workspaces/<channelId>`},null,8,[`value`])]),_:1},8,[`label`]),o(w,{label:e.$t(`ctpl.k3lrqn0010`)},{default:g(()=>[o(we,{value:_(X).visibility,"onUpdate:value":r[8]||=e=>_(X).visibility=e},{default:g(()=>[o(W,{value:`private`},{default:g(()=>[v(i(e.$t(`ctpl.k17jfge3019`)),1)]),_:1}),o(W,{value:`public`},{default:g(()=>[v(i(e.$t(`ctpl.k191u0u5020`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`])])}}}),[[`__scopeId`,`data-v-b5127862`]]);export{z as default};
@@ -0,0 +1 @@
1
+ import{ut as e}from"./CSkxz2NX.js";import{t}from"./CWoJjWmZ.js";function n(n,r,i={}){let a=i.bgMs===void 0?r*3:i.bgMs,o=null;function s(e){c(),e!==null&&e>0&&(o=t(n,e))}function c(){o&&=(clearInterval(o),null)}function l(){document.hidden?s(a):(s(r),n())}s(document.hidden?a:r),document.addEventListener(`visibilitychange`,l),e(()=>{c(),document.removeEventListener(`visibilitychange`,l)})}export{n as t};
@@ -1 +1 @@
1
- import{a as e,c as t,n}from"./BU83-NnX.js";import{$ as r,R as i,S as a,Ut as o,V as s,Vt as ee,W as c,b as l,ct as u,f as d,h as f,i as p,m,p as h,pt as g,tt as _,xt as v,y}from"./CSkxz2NX.js";import{d as b,f as te}from"./D6uzXueg.js";import{d as x}from"./BJHKLJJU.js";import{s as S}from"./YnQxK3eG.js";import{n as C}from"./DtYHUi5Z.js";import{n as w}from"./KZQX7xoM.js";import{n as ne,t as re}from"./DBHNsT1Y.js";import{n as ie,t as ae}from"./DR12_WCA.js";import{t as oe}from"./BYhEUx8t.js";import{t as se}from"./jZsY8yYz.js";import{t as ce}from"./DZtm4l-P2.js";import{t as T}from"./DIaZ2PTo2.js";import{t as E}from"./BDNMzG2s2.js";import{t as D}from"./Cc_9VzD42.js";import{t as O}from"./D0ZBQrN_2.js";import{n as le,t as ue}from"./BNT8gYU92.js";import{t as de}from"./CNs_Ozdc2.js";var fe={class:`page`},pe={key:0,class:`auth-gate aw-orbs`},me={class:`sub`},he={class:`hint`},ge={class:`hint`},_e={class:`aw-page-head`},ve={class:`sub`},ye={class:`head-acts`},k={class:`lib-links`},A={class:`grid`},j={class:`card-head`},M={class:`name`},N={class:`card-body`},P=[`onClick`],be={class:`ch-name`},xe={class:`ch-meta`},Se={key:0,class:`empty`},Ce={class:`card-foot`},we=[`onClick`],F=[`onClick`],I=E(a({__name:`index`,setup(a){let{t:E}=w();de({layout:`default`});let I=T(),L=D(),R=le(),{subscribe:Te}=ue(),z=g(`login`),B=g(``),V=g(``),H=g(``),U=g(``),W=g(!1),G=g(!1);i(async()=>{try{let e=await S(`/api/users/setup-status`);e.code===0&&e.data?.needsSetup&&(G.value=!0,z.value=`register`)}catch{}});let K=async()=>{if(!B.value.trim()){e.warning(E(`wsHome.k1vnhyks019`));return}if(!V.value.trim()){e.warning(E(`wsHome.k8ieqzj020`));return}if(H.value.length<6){e.warning(E(`wsHome.ksx73ra021`));return}W.value=!0;try{let t=await I.register(B.value,V.value,H.value);e.success(G.value?`管理员账号创建成功:${t.name} 已进入系统`:E(`wsHome.k1mbatbh030`,{p0:t.name})),G.value=!1,B.value=``,V.value=``,H.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},q=async()=>{if(!V.value.trim()){e.warning(E(`wsHome.k8ieqzj020`));return}W.value=!0;try{let t=await I.login(V.value,H.value);e.success(E(`wsHome.kwixbdl031`,{p0:t.name})),G.value=!1,H.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},J=async()=>{W.value=!0;try{let t=await I.loginWithToken(U.value);e.success(E(`wsHome.kwixbdl031`,{p0:t.name})),G.value=!1,U.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},Ee=()=>{I.logout(),e.success(E(`wsHome.k3ngm6p022`))},Y=g(!1);r(()=>I.isLoggedIn,async t=>{if(!t){Y.value=!1;return}if(await I.refresh(),I.isLoggedIn)try{await L.load(),Y.value=!0}catch(t){e.error(t instanceof Error?t.message:E(`wsHome.k1br33vc023`))}},{immediate:!0}),r(()=>Y.value&&L.workspaces.map(e=>e.channelIds.join(`,`)).join(`|`),()=>{if(Y.value)for(let e of L.workspaces)for(let t of e.channelIds)Te(t)},{immediate:!0});let X=g(!1),Z=g(``),Q=g(!1),$=async()=>{let t=Z.value.trim();if(!t){e.warning(`Workspace 名称必填`);return}Q.value=!0;try{let e=await L.create(t);X.value=!1,Z.value=``,L.setActiveWorkspaceId(e.id),x(`/workshop/w/${e.id}`)}catch(t){e.error(O(t))}finally{Q.value=!1}},De=async t=>{await L.remove(t),e.success(E(`wsHome.k3n5sd7024`))},Oe=e=>e.map(e=>{let t=R.channels[e],n=R.agents[e]??[];return{id:e,name:t?.name??e.slice(0,8),synced:t!==void 0,agents:n.length,busy:n.filter(e=>e.state===`busy`).length,activeTasks:(R.tasks[e]??[]).filter(e=>![`COMPLETED`,`CANCELED`,`FAILED`].includes(e.state)).length}});return C({title:()=>E(`titles.workshop`)}),(e,r)=>{let i=re,a=ne,g=t,S=se,C=ie,w=ae,T=oe,E=ce,D=n;return s(),f(`div`,fe,[v(I).isLoggedIn?(s(),f(p,{key:1},[d(`div`,_e,[d(`div`,null,[r[16]||=d(`p`,{class:`aw-kicker`},` workshop / overview `,-1),d(`h1`,null,`Workshop `+o(e.$t(`wsHome.k3n4m5c025`)),1),d(`p`,ve,o(v(I).user?.name)+` `+o(e.$t(`wsHome.ke16e53026`)),1)]),d(`div`,ye,[d(`div`,k,[d(`button`,{type:`button`,class:`lib-link`,onClick:r[7]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/agents`)},o(e.$t(`wsHome.k3pa5h4013`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[8]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/teams`)},o(e.$t(`wsHome.k3svl8y014`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[9]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/channel-templates`)},` Channel `+o(e.$t(`wsHome.k41ds5027`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[10]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/tokens`)},` API Token `),d(`button`,{type:`button`,class:`lib-link`,onClick:Ee},o(e.$t(`wsHome.k484e7015`)),1)]),d(`button`,{class:`aw-pill im`,onClick:r[11]||=e=>X.value=!0},[r[17]||=d(`span`,{class:`i-tabler-plus im-pop`},null,-1),y(` `+o(e.$t(`wsHome.newWs`)),1)])])]),l(E,{spinning:!v(Y)},{default:_(()=>[d(`div`,A,[(s(!0),f(p,null,c(v(L).workspaces,t=>(s(),f(`div`,{key:t.id,class:`card`},[d(`div`,j,[r[18]||=d(`span`,{class:`card-mark`},[d(`span`,{class:`i-tabler-box`})],-1),d(`span`,M,o(t.name),1)]),d(`div`,N,[(s(!0),f(p,null,c(Oe(t.channelIds),n=>(s(),f(`div`,{key:n.id,class:`ch-row`,onClick:n=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/w/${t.id}`)},[d(`span`,{class:ee([`dot`,{live:n.activeTasks>0}])},null,2),d(`span`,be,o(n.name),1),d(`span`,xe,[n.synced?(s(),f(p,{key:0},[y(o(n.agents)+` `+o(e.$t(`wsHome.k1ggoa45028`))+` `+o(n.busy)+` / `+o(e.$t(`wsHome.k3wcox029`))+` `+o(n.activeTasks),1)],64)):(s(),f(p,{key:1},[y(o(e.$t(`wsHome.k1bst7s9016`)),1)],64))])],8,P))),128)),t.channelIds.length===0?(s(),f(`div`,Se,o(e.$t(`wsHome.k1ylgrbc017`)),1)):m(``,!0)]),d(`div`,Ce,[d(`button`,{class:`aw-pill outline im`,onClick:n=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/w/${t.id}`)},[r[19]||=d(`span`,{class:`i-tabler-arrow-right im-pop`},null,-1),y(` `+o(e.$t(`wsHome.kr1uwwi018`)),1)],8,we),d(`button`,{class:`aw-ghost im`,title:`删除 Workspace`,onClick:te(e=>De(t.id),[`stop`])},[...r[20]||=[d(`span`,{class:`i-tabler-trash im-shake`},null,-1)]],8,F)])]))),128)),v(L).workspaces.length===0&&v(Y)?(s(),f(`button`,{key:0,class:`ws-empty`,onClick:r[12]||=e=>X.value=!0},[...r[21]||=[d(`span`,{class:`i-tabler-layout-2 ws-empty-ico`},null,-1),d(`span`,{class:`aw-empty-title`},`从一条产线、一个 Agent 开始`,-1),d(`span`,{class:`aw-empty-sub`},`Workspace 是频道与任务的容器 —— 建立第一个工作区后,你的 Agent 团队即可上线作业。`,-1),d(`span`,{class:`pill-btn ws-empty-cta`},[d(`span`,{class:`i-tabler-plus`}),y(` 新建第一个 Workspace `)],-1)]])):m(``,!0)])]),_:1},8,[`spinning`]),l(D,{open:v(X),"onUpdate:open":r[14]||=e=>u(X)?X.value=e:null,title:e.$t(`wsHome.newWs`),"confirm-loading":v(Q),"ok-text":`创建并进入`,"cancel-text":`取消`,onOk:$},{default:_(()=>[l(i,{value:v(Z),"onUpdate:value":r[13]||=e=>u(Z)?Z.value=e:null,placeholder:e.$t(`wsHome.ksmpk8l007`),onKeydown:b($,[`enter`])},null,8,[`value`,`placeholder`])]),_:1},8,[`open`,`title`,`confirm-loading`])],64)):(s(),f(`div`,pe,[l(T,{class:`auth-card`},{default:_(()=>[r[15]||=d(`p`,{class:`aw-kicker`},` agentworkshop / sign in `,-1),d(`h2`,null,o(v(G)?`创建管理员账号`:e.$t(`wsHome.kr0vzqu008`)),1),d(`p`,me,o(v(G)?`系统尚无任何用户:首个注册的账号将成为管理员,创建后自动进入系统。`:`全局用户系统统管身份;每个用户可管理多个 API Token,管理 API 需用户 token(Authorization: Bearer)。`),1),l(w,{"active-key":v(z),"onUpdate:activeKey":r[6]||=e=>u(z)?z.value=e:null},{default:_(()=>[v(G)?m(``,!0):(s(),h(C,{key:`login`,tab:`账号登录`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(i,{value:v(V),"onUpdate:value":r[0]||=e=>u(V)?V.value=e:null,type:`email`,placeholder:e.$t(`wsHome.k48h2c001`),onKeydown:b(q,[`enter`])},null,8,[`value`,`placeholder`]),l(a,{value:v(H),"onUpdate:value":r[1]||=e=>u(H)?H.value=e:null,placeholder:e.$t(`wsHome.k3yvgs002`),onKeydown:b(q,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:q},{default:_(()=>[y(o(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`]),d(`p`,he,o(e.$t(`wsHome.k17x74cj010`)),1)]),_:1})]),_:1})),l(C,{key:`register`,tab:v(G)?`注册管理员`:`注册新用户`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(i,{value:v(B),"onUpdate:value":r[2]||=e=>u(B)?B.value=e:null,placeholder:e.$t(`wsHome.kwgbai9003`)},null,8,[`value`,`placeholder`]),l(i,{value:v(V),"onUpdate:value":r[3]||=e=>u(V)?V.value=e:null,type:`email`,placeholder:e.$t(`wsHome.kizjkbo004`)},null,8,[`value`,`placeholder`]),l(a,{value:v(H),"onUpdate:value":r[4]||=e=>u(H)?H.value=e:null,placeholder:e.$t(`wsHome.kh3cqfn005`),onKeydown:b(K,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:K},{default:_(()=>[y(o(v(G)?`创建管理员并进入`:e.$t(`wsHome.k1so6a0v011`)),1)]),_:1},8,[`loading`]),d(`p`,ge,o(e.$t(`wsHome.k1r0a4u3012`)),1)]),_:1})]),_:1},8,[`tab`]),v(G)?m(``,!0):(s(),h(C,{key:`token`,tab:`Token 登录`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(a,{value:v(U),"onUpdate:value":r[5]||=e=>u(U)?U.value=e:null,placeholder:e.$t(`wsHome.k15qunld006`),onKeydown:b(J,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:J},{default:_(()=>[y(o(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`])]),_:1})]),_:1}))]),_:1},8,[`active-key`])]),_:1})]))])}}}),[[`__scopeId`,`data-v-837d107a`]]);export{I as default};
1
+ import{a as e,c as t,n}from"./BU83-NnX.js";import{$ as r,R as i,S as a,Ut as o,V as s,Vt as ee,W as c,b as l,ct as u,f as d,h as f,i as p,m,p as h,pt as g,tt as _,xt as v,y}from"./CSkxz2NX.js";import{d as b,f as te}from"./D6uzXueg.js";import{d as x}from"./BJHKLJJU.js";import{s as S}from"./YnQxK3eG.js";import{n as C}from"./DtYHUi5Z.js";import{n as w}from"./KZQX7xoM.js";import{n as ne,t as re}from"./DBHNsT1Y.js";import{n as ie,t as ae}from"./DR12_WCA.js";import{t as oe}from"./BYhEUx8t.js";import{t as se}from"./jZsY8yYz.js";import{t as ce}from"./DZtm4l-P2.js";import{t as T}from"./DIaZ2PTo2.js";import{t as E}from"./BDNMzG2s2.js";import{t as D}from"./CssgYAAL2.js";import{t as O}from"./D0ZBQrN_2.js";import{n as le,t as ue}from"./BC9wjTJK2.js";import{t as de}from"./CNs_Ozdc2.js";var fe={class:`page`},pe={key:0,class:`auth-gate aw-orbs`},me={class:`sub`},he={class:`hint`},ge={class:`hint`},_e={class:`aw-page-head`},ve={class:`sub`},ye={class:`head-acts`},k={class:`lib-links`},A={class:`grid`},j={class:`card-head`},M={class:`name`},N={class:`card-body`},P=[`onClick`],be={class:`ch-name`},xe={class:`ch-meta`},Se={key:0,class:`empty`},Ce={class:`card-foot`},we=[`onClick`],F=[`onClick`],I=E(a({__name:`index`,setup(a){let{t:E}=w();de({layout:`default`});let I=T(),L=D(),R=le(),{subscribe:Te}=ue(),z=g(`login`),B=g(``),V=g(``),H=g(``),U=g(``),W=g(!1),G=g(!1);i(async()=>{try{let e=await S(`/api/users/setup-status`);e.code===0&&e.data?.needsSetup&&(G.value=!0,z.value=`register`)}catch{}});let K=async()=>{if(!B.value.trim()){e.warning(E(`wsHome.k1vnhyks019`));return}if(!V.value.trim()){e.warning(E(`wsHome.k8ieqzj020`));return}if(H.value.length<6){e.warning(E(`wsHome.ksx73ra021`));return}W.value=!0;try{let t=await I.register(B.value,V.value,H.value);e.success(G.value?`管理员账号创建成功:${t.name} 已进入系统`:E(`wsHome.k1mbatbh030`,{p0:t.name})),G.value=!1,B.value=``,V.value=``,H.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},q=async()=>{if(!V.value.trim()){e.warning(E(`wsHome.k8ieqzj020`));return}W.value=!0;try{let t=await I.login(V.value,H.value);e.success(E(`wsHome.kwixbdl031`,{p0:t.name})),G.value=!1,H.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},J=async()=>{W.value=!0;try{let t=await I.loginWithToken(U.value);e.success(E(`wsHome.kwixbdl031`,{p0:t.name})),G.value=!1,U.value=``}catch(t){e.error(O(t))}finally{W.value=!1}},Ee=()=>{I.logout(),e.success(E(`wsHome.k3ngm6p022`))},Y=g(!1);r(()=>I.isLoggedIn,async t=>{if(!t){Y.value=!1;return}if(await I.refresh(),I.isLoggedIn)try{await L.load(),Y.value=!0}catch(t){e.error(t instanceof Error?t.message:E(`wsHome.k1br33vc023`))}},{immediate:!0}),r(()=>Y.value&&L.workspaces.map(e=>e.channelIds.join(`,`)).join(`|`),()=>{if(Y.value)for(let e of L.workspaces)for(let t of e.channelIds)Te(t)},{immediate:!0});let X=g(!1),Z=g(``),Q=g(!1),$=async()=>{let t=Z.value.trim();if(!t){e.warning(`Workspace 名称必填`);return}Q.value=!0;try{let e=await L.create(t);X.value=!1,Z.value=``,L.setActiveWorkspaceId(e.id),x(`/workshop/w/${e.id}`)}catch(t){e.error(O(t))}finally{Q.value=!1}},De=async t=>{await L.remove(t),e.success(E(`wsHome.k3n5sd7024`))},Oe=e=>e.map(e=>{let t=R.channels[e],n=R.agents[e]??[];return{id:e,name:t?.name??e.slice(0,8),synced:t!==void 0,agents:n.length,busy:n.filter(e=>e.state===`busy`).length,activeTasks:(R.tasks[e]??[]).filter(e=>![`COMPLETED`,`CANCELED`,`FAILED`].includes(e.state)).length}});return C({title:()=>E(`titles.workshop`)}),(e,r)=>{let i=re,a=ne,g=t,S=se,C=ie,w=ae,T=oe,E=ce,D=n;return s(),f(`div`,fe,[v(I).isLoggedIn?(s(),f(p,{key:1},[d(`div`,_e,[d(`div`,null,[r[16]||=d(`p`,{class:`aw-kicker`},` workshop / overview `,-1),d(`h1`,null,`Workshop `+o(e.$t(`wsHome.k3n4m5c025`)),1),d(`p`,ve,o(v(I).user?.name)+` `+o(e.$t(`wsHome.ke16e53026`)),1)]),d(`div`,ye,[d(`div`,k,[d(`button`,{type:`button`,class:`lib-link`,onClick:r[7]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/agents`)},o(e.$t(`wsHome.k3pa5h4013`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[8]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/teams`)},o(e.$t(`wsHome.k3svl8y014`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[9]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/channel-templates`)},` Channel `+o(e.$t(`wsHome.k41ds5027`)),1),d(`button`,{type:`button`,class:`lib-link`,onClick:r[10]||=t=>(`navigateTo`in e?e.navigateTo:v(x))(`/tokens`)},` API Token `),d(`button`,{type:`button`,class:`lib-link`,onClick:Ee},o(e.$t(`wsHome.k484e7015`)),1)]),d(`button`,{class:`aw-pill im`,onClick:r[11]||=e=>X.value=!0},[r[17]||=d(`span`,{class:`i-tabler-plus im-pop`},null,-1),y(` `+o(e.$t(`wsHome.newWs`)),1)])])]),l(E,{spinning:!v(Y)},{default:_(()=>[d(`div`,A,[(s(!0),f(p,null,c(v(L).workspaces,t=>(s(),f(`div`,{key:t.id,class:`card`},[d(`div`,j,[r[18]||=d(`span`,{class:`card-mark`},[d(`span`,{class:`i-tabler-box`})],-1),d(`span`,M,o(t.name),1)]),d(`div`,N,[(s(!0),f(p,null,c(Oe(t.channelIds),n=>(s(),f(`div`,{key:n.id,class:`ch-row`,onClick:n=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/w/${t.id}`)},[d(`span`,{class:ee([`dot`,{live:n.activeTasks>0}])},null,2),d(`span`,be,o(n.name),1),d(`span`,xe,[n.synced?(s(),f(p,{key:0},[y(o(n.agents)+` `+o(e.$t(`wsHome.k1ggoa45028`))+` `+o(n.busy)+` / `+o(e.$t(`wsHome.k3wcox029`))+` `+o(n.activeTasks),1)],64)):(s(),f(p,{key:1},[y(o(e.$t(`wsHome.k1bst7s9016`)),1)],64))])],8,P))),128)),t.channelIds.length===0?(s(),f(`div`,Se,o(e.$t(`wsHome.k1ylgrbc017`)),1)):m(``,!0)]),d(`div`,Ce,[d(`button`,{class:`aw-pill outline im`,onClick:n=>(`navigateTo`in e?e.navigateTo:v(x))(`/workshop/w/${t.id}`)},[r[19]||=d(`span`,{class:`i-tabler-arrow-right im-pop`},null,-1),y(` `+o(e.$t(`wsHome.kr1uwwi018`)),1)],8,we),d(`button`,{class:`aw-ghost im`,title:`删除 Workspace`,onClick:te(e=>De(t.id),[`stop`])},[...r[20]||=[d(`span`,{class:`i-tabler-trash im-shake`},null,-1)]],8,F)])]))),128)),v(L).workspaces.length===0&&v(Y)?(s(),f(`button`,{key:0,class:`ws-empty`,onClick:r[12]||=e=>X.value=!0},[...r[21]||=[d(`span`,{class:`i-tabler-layout-2 ws-empty-ico`},null,-1),d(`span`,{class:`aw-empty-title`},`从一条产线、一个 Agent 开始`,-1),d(`span`,{class:`aw-empty-sub`},`Workspace 是频道与任务的容器 —— 建立第一个工作区后,你的 Agent 团队即可上线作业。`,-1),d(`span`,{class:`pill-btn ws-empty-cta`},[d(`span`,{class:`i-tabler-plus`}),y(` 新建第一个 Workspace `)],-1)]])):m(``,!0)])]),_:1},8,[`spinning`]),l(D,{open:v(X),"onUpdate:open":r[14]||=e=>u(X)?X.value=e:null,title:e.$t(`wsHome.newWs`),"confirm-loading":v(Q),"ok-text":`创建并进入`,"cancel-text":`取消`,onOk:$},{default:_(()=>[l(i,{value:v(Z),"onUpdate:value":r[13]||=e=>u(Z)?Z.value=e:null,placeholder:e.$t(`wsHome.ksmpk8l007`),onKeydown:b($,[`enter`])},null,8,[`value`,`placeholder`])]),_:1},8,[`open`,`title`,`confirm-loading`])],64)):(s(),f(`div`,pe,[l(T,{class:`auth-card`},{default:_(()=>[r[15]||=d(`p`,{class:`aw-kicker`},` agentworkshop / sign in `,-1),d(`h2`,null,o(v(G)?`创建管理员账号`:e.$t(`wsHome.kr0vzqu008`)),1),d(`p`,me,o(v(G)?`系统尚无任何用户:首个注册的账号将成为管理员,创建后自动进入系统。`:`全局用户系统统管身份;每个用户可管理多个 API Token,管理 API 需用户 token(Authorization: Bearer)。`),1),l(w,{"active-key":v(z),"onUpdate:activeKey":r[6]||=e=>u(z)?z.value=e:null},{default:_(()=>[v(G)?m(``,!0):(s(),h(C,{key:`login`,tab:`账号登录`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(i,{value:v(V),"onUpdate:value":r[0]||=e=>u(V)?V.value=e:null,type:`email`,placeholder:e.$t(`wsHome.k48h2c001`),onKeydown:b(q,[`enter`])},null,8,[`value`,`placeholder`]),l(a,{value:v(H),"onUpdate:value":r[1]||=e=>u(H)?H.value=e:null,placeholder:e.$t(`wsHome.k3yvgs002`),onKeydown:b(q,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:q},{default:_(()=>[y(o(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`]),d(`p`,he,o(e.$t(`wsHome.k17x74cj010`)),1)]),_:1})]),_:1})),l(C,{key:`register`,tab:v(G)?`注册管理员`:`注册新用户`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(i,{value:v(B),"onUpdate:value":r[2]||=e=>u(B)?B.value=e:null,placeholder:e.$t(`wsHome.kwgbai9003`)},null,8,[`value`,`placeholder`]),l(i,{value:v(V),"onUpdate:value":r[3]||=e=>u(V)?V.value=e:null,type:`email`,placeholder:e.$t(`wsHome.kizjkbo004`)},null,8,[`value`,`placeholder`]),l(a,{value:v(H),"onUpdate:value":r[4]||=e=>u(H)?H.value=e:null,placeholder:e.$t(`wsHome.kh3cqfn005`),onKeydown:b(K,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:K},{default:_(()=>[y(o(v(G)?`创建管理员并进入`:e.$t(`wsHome.k1so6a0v011`)),1)]),_:1},8,[`loading`]),d(`p`,ge,o(e.$t(`wsHome.k1r0a4u3012`)),1)]),_:1})]),_:1},8,[`tab`]),v(G)?m(``,!0):(s(),h(C,{key:`token`,tab:`Token 登录`},{default:_(()=>[l(S,{direction:`vertical`,style:{width:`100%`}},{default:_(()=>[l(a,{value:v(U),"onUpdate:value":r[5]||=e=>u(U)?U.value=e:null,placeholder:e.$t(`wsHome.k15qunld006`),onKeydown:b(J,[`enter`])},null,8,[`value`,`placeholder`]),l(g,{type:`primary`,block:``,loading:v(W),onClick:J},{default:_(()=>[y(o(e.$t(`wsHome.k43kol009`)),1)]),_:1},8,[`loading`])]),_:1})]),_:1}))]),_:1},8,[`active-key`])]),_:1})]))])}}}),[[`__scopeId`,`data-v-c28be202`]]);export{I as default};