agentworkshop 0.7.38 → 0.7.40
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.
- package/.AgentWorkShop/prompts/aml-mission-default.md +20 -20
- package/.AgentWorkShop/prompts/aml-playbook.md +49 -49
- package/.AgentWorkShop/prompts/host-tools.json +1293 -1238
- package/.AgentWorkShop/prompts/peer-reply-cross-channel.md +10 -10
- package/.output/.AgentWorkShop/prompts/aml-mission-default.md +20 -20
- package/.output/.AgentWorkShop/prompts/aml-playbook.md +49 -49
- package/.output/.AgentWorkShop/prompts/host-tools.json +1293 -1238
- package/.output/.AgentWorkShop/prompts/peer-reply-cross-channel.md +10 -10
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/88GOowgO2.js +1 -0
- package/.output/public/_nuxt/{BNT8gYU92.js → BC9wjTJK2.js} +2 -2
- package/.output/public/_nuxt/BOt2SP4z.js +1 -0
- package/.output/public/_nuxt/BP-NyKVG.js +18 -0
- package/.output/public/_nuxt/{HBLJ-wei.js → BXxH0UQE.js} +1 -1
- package/.output/public/_nuxt/{zIGh7R49.js → BneN7fbu.js} +1 -1
- package/.output/public/_nuxt/BsROmY89.js +1 -0
- package/.output/public/_nuxt/{C_OLzD09.js → C4oW1HsE.js} +1 -1
- package/.output/public/_nuxt/CFxtLwjp.js +1 -0
- package/.output/public/_nuxt/{Cec0Ua3F.js → CS50LB_l.js} +1 -1
- package/.output/public/_nuxt/C_iYD-EB.js +1 -0
- package/.output/public/_nuxt/{DAe0h2MB.js → ClILjvWH.js} +1 -1
- package/.output/public/_nuxt/CssgYAAL2.js +1 -0
- package/.output/public/_nuxt/{CY9LbPCI.js → CzOCSGLe.js} +1 -1
- package/.output/public/_nuxt/D8qvkfyY.js +1 -0
- package/.output/public/_nuxt/DCn7QZ5N.js +2 -0
- package/.output/public/_nuxt/DGIuvyRN2.js +1 -0
- package/.output/public/_nuxt/{CojCTLKD.js → DGj-WEBg.js} +1 -1
- package/.output/public/_nuxt/{DDShH71m.js → DS8qj8EL.js} +1 -1
- package/.output/public/_nuxt/DTFCy6h-.js +1 -0
- package/.output/public/_nuxt/{DrYV5i68.js → DUjW5Yq5.js} +1 -1
- package/.output/public/_nuxt/DZshyNLa.js +1 -0
- package/.output/public/_nuxt/{45zuyAso.js → D_OTvQza.js} +1 -1
- package/.output/public/_nuxt/DcsCcxp4.js +1 -0
- package/.output/public/_nuxt/{DUrecWPx.js → Dihnimlk.js} +2 -2
- package/.output/public/_nuxt/Dqw1lpr-.js +1 -0
- package/.output/public/_nuxt/{BG8sCcwx.js → Dr9v6C0f.js} +9 -9
- package/.output/public/_nuxt/{8NMOXZOV.js → Du9ZJtnj.js} +1 -1
- package/.output/public/_nuxt/TownView.f-YOdXRs.css +1 -0
- package/.output/public/_nuxt/_id_.CM4bIgKY.css +1 -0
- package/.output/public/_nuxt/_id_.bNV69Dtf.css +1 -0
- package/.output/public/_nuxt/_wsId_.B4WiqkIS.css +1 -0
- package/.output/public/_nuxt/agents.ZD0rVdHE.css +1 -0
- package/.output/public/_nuxt/aml.BN8ZEW4h.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/f4707884-7cf4-4a31-80d2-e3d72b73745f.json +1 -0
- package/.output/public/_nuxt/channel-templates.BOtahzPi.css +1 -0
- package/.output/public/_nuxt/daq.B0D3dPAc.css +1 -0
- package/.output/public/_nuxt/dcw.8Y7FqCVN.css +1 -0
- package/.output/public/_nuxt/default.J32SgqFY.css +1 -0
- package/.output/public/_nuxt/entry.bdm0tv6M.css +1 -0
- package/.output/public/_nuxt/logs.BpKzmKsh.css +1 -0
- package/.output/public/_nuxt/monitor.D9pe7qN6.css +1 -0
- package/.output/public/_nuxt/pages.D7aSDlUI.css +1 -0
- package/.output/public/_nuxt/permissions.DwTVlFe6.css +1 -0
- package/.output/public/_nuxt/plugins.sb4nDGqr.css +1 -0
- package/.output/public/_nuxt/{Cbq-mryP.js → qr6R6Ha1.js} +1 -1
- package/.output/public/_nuxt/settings.BTgR-NiE.css +1 -0
- package/.output/public/_nuxt/teams.CxnxKVVs.css +1 -0
- package/.output/public/_nuxt/tokens.BFY7qv4f.css +1 -0
- package/.output/public/_nuxt/{town.DKIAhKnx.css → town.BBXZmeoP.css} +1 -1
- package/.output/public/_nuxt/users.DLgZ1D0h.css +1 -0
- package/.output/public/_nuxt/workshop.CR_QzeAN.css +1 -0
- package/.output/public/_nuxt/{BzHEilTt.js → xh3_vYcu.js} +1 -1
- package/.output/public/_nuxt/yF0aYMF1.js +4 -0
- package/.output/server/chunks/_/entity.mjs.map +1 -1
- package/.output/server/chunks/_/nitro.mjs +2244 -1464
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{TownView-jVazYOjN.mjs → TownView-BuLAsmpR.mjs} +288 -206
- package/.output/server/chunks/build/TownView-BuLAsmpR.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CfVosNg3.mjs → _id_-BU1wfOID.mjs} +138 -138
- package/.output/server/chunks/build/{_id_-CfVosNg3.mjs.map → _id_-BU1wfOID.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-Hwr4rZpr.mjs → _id_-BYsEua57.mjs} +33 -32
- package/.output/server/chunks/build/_id_-BYsEua57.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs → _wsId_-BxlDcJHg.mjs} +293 -259
- package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs.map → _wsId_-BxlDcJHg.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-Bvin73QY.mjs → agents-CLQqJF2y.mjs} +21 -27
- package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +1 -0
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs → aml-_7FdFL2p.mjs} +109 -109
- package/.output/server/chunks/build/{aml-BCSJCdX7.mjs.map → aml-_7FdFL2p.mjs.map} +1 -1
- package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -1
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs → channel-templates-p6SZNjlM.mjs} +19 -19
- package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs.map → channel-templates-p6SZNjlM.mjs.map} +1 -1
- package/.output/server/chunks/build/{daq-C03Uu5UE.mjs → daq-cgyjKmJu.mjs} +188 -122
- package/.output/server/chunks/build/daq-cgyjKmJu.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs → dcw-CoTxBlAZ.mjs} +45 -45
- package/.output/server/chunks/build/{dcw-6vEYVeje.mjs.map → dcw-CoTxBlAZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{default-hseyOqBT.mjs → default-BE4r0FZN.mjs} +158 -79
- package/.output/server/chunks/build/{default-hseyOqBT.mjs.map → default-BE4r0FZN.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs → logs-BSOeZwwI.mjs} +34 -34
- package/.output/server/chunks/build/{logs-B-xhuqln.mjs.map → logs-BSOeZwwI.mjs.map} +1 -1
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs → monitor-C0okQaXz.mjs} +33 -33
- package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs.map → monitor-C0okQaXz.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-BO7yZsXA.mjs → pages-DFxjn9Xa.mjs} +33 -17
- package/.output/server/chunks/build/pages-DFxjn9Xa.mjs.map +1 -0
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs → permissions-68SsNjex.mjs} +12 -12
- package/.output/server/chunks/build/{permissions-B52oOmaO.mjs.map → permissions-68SsNjex.mjs.map} +1 -1
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs → plugins-lGlUr1lj.mjs} +17 -17
- package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs.map → plugins-lGlUr1lj.mjs.map} +1 -1
- package/.output/server/chunks/build/{settings-DoQ2Oq3P.mjs → settings-Ddd1qx2Z.mjs} +50 -47
- package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +1 -0
- package/.output/server/chunks/build/{teams-2kz3CusY.mjs → teams-MEDLZdMn.mjs} +38 -34
- package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs → tokens-C7fTM5C2.mjs} +14 -14
- package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs.map → tokens-C7fTM5C2.mjs.map} +1 -1
- package/.output/server/chunks/build/{town-BOl6hs9B.mjs → town-qMPql9Se.mjs} +36 -10
- package/.output/server/chunks/build/town-qMPql9Se.mjs.map +1 -0
- package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs +1 -1
- package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs +1 -1
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +49 -0
- package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
- package/.output/server/chunks/build/{users-fohSmF-J.mjs → users-Cfd5-l2-.mjs} +6 -6
- package/.output/server/chunks/build/{users-fohSmF-J.mjs.map → users-Cfd5-l2-.mjs.map} +1 -1
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs → workshop-BL5bhfs0.mjs} +15 -15
- package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs.map → workshop-BL5bhfs0.mjs.map} +1 -1
- package/.output/server/chunks/build/{workspaces-BuydxM-3.mjs → workspaces-Bgz5Ekwp.mjs} +18 -3
- package/.output/server/chunks/build/workspaces-Bgz5Ekwp.mjs.map +1 -0
- package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +8 -6
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -5
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +14 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -3
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +31 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +28 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +32 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +33 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +34 -0
- package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +3 -3
- package/.output/server/chunks/virtual/entry.mjs +53 -25
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +204 -40
- package/README.md +739 -591
- package/app/app.vue +9 -3
- package/app/assets/css/main.css +517 -7
- package/app/components/AppHeader.vue +98 -24
- package/app/components/AppSidebar.vue +118 -11
- package/app/components/AwChart.vue +2 -1
- package/app/components/workshop/AgentInspectorDrawer.vue +6 -6
- package/app/components/workshop/AgentLanesView.vue +52 -1
- package/app/components/workshop/AssetLibrary.vue +4 -2
- package/app/components/workshop/ChannelSessionList.vue +4 -2
- package/app/components/workshop/Composer.vue +96 -0
- package/app/components/workshop/DaqNodeRow.vue +19 -0
- package/app/components/workshop/DaqTemplateIcon.vue +33 -0
- package/app/components/workshop/DeviceTwinPanel.vue +37 -35
- package/app/components/workshop/EventBlock.vue +3 -3
- package/app/components/workshop/InspectorPanel.vue +47 -11
- package/app/components/workshop/LiveAgentBar.vue +34 -0
- package/app/components/workshop/TaskBoardView.vue +83 -33
- package/app/components/workshop/TranscriptTimeline.vue +56 -0
- package/app/components/workshop/blocks/ClusterError.vue +1 -1
- package/app/components/workshop/blocks/ClusterRoute.vue +3 -1
- package/app/components/workshop/blocks/ClusterStatus.vue +2 -2
- package/app/components/workshop/blocks/ClusterStream.vue +8 -2
- package/app/components/workshop/town/ModelPreview3D.vue +1 -1
- package/app/components/workshop/town/TownView.vue +507 -82
- package/app/composables/useResponsive.ts +88 -0
- package/app/composables/useRouteMeta.ts +3 -0
- package/app/composables/workshop/useDcwStream.ts +1 -1
- package/app/composables/workshop/useVisibleInterval.ts +2 -2
- package/app/composables/workshop/useWorkshopApi.ts +1 -1
- package/app/layouts/default.vue +46 -2
- package/app/pages/aml/index.vue +712 -616
- package/app/pages/daq/[id].vue +3 -2
- package/app/pages/daq/index.vue +209 -9
- package/app/pages/dcw/[id].vue +109 -28
- package/app/pages/dcw/index.vue +83 -23
- package/app/pages/index.vue +35 -1
- package/app/pages/logs/index.vue +147 -13
- package/app/pages/monitor.vue +56 -12
- package/app/pages/permissions/index.vue +34 -0
- package/app/pages/plugins/index.vue +35 -4
- package/app/pages/settings.vue +90 -21
- package/app/pages/tokens.vue +23 -0
- package/app/pages/town.vue +50 -5
- package/app/pages/users.vue +23 -0
- package/app/pages/workshop/agents.vue +92 -2
- package/app/pages/workshop/channel-templates.vue +53 -0
- package/app/pages/workshop/index.vue +14 -0
- package/app/pages/workshop/teams.vue +66 -6
- package/app/pages/workshop/w/[wsId].vue +202 -14
- package/app/plugins/aw-plugins.client.ts +13 -8
- package/app/stores/app.ts +33 -1
- package/app/stores/workshop/user.ts +1 -1
- package/app/stores/workshop/workspaces.ts +18 -2
- package/app/utils/api-error.ts +1 -1
- package/cli/commands/build.mjs +8 -1
- package/docker-compose.yml +6 -0
- package/docs/full-test-plan.md +4 -0
- package/docs/plugins.en.md +1 -0
- package/docs/plugins.md +1 -0
- package/i18n/locales/en.ts +3 -0
- package/i18n/locales/zh-CN.ts +3 -0
- package/nuxt.config.ts +31 -0
- package/package.json +9 -1
- package/scripts/_audit/detached-start.mjs +103 -0
- package/scripts/_audit/guard-upstream-liveness.mjs +104 -0
- package/scripts/_dbg-param-map-e2e.ts +242 -0
- package/scripts/_dbg-param-map-rest-smoke.mjs +73 -0
- package/scripts/_dbg-param-real-scenario.mjs +153 -0
- package/scripts/_dbg-perms-e2e.mjs +10 -3
- package/scripts/_dbg-protocol-matrix.mjs +453 -441
- package/scripts/_dbg-render-regression.mjs +151 -130
- package/scripts/_dbg-town-agents-probe.mjs +60 -0
- package/scripts/_dbg-visual-acceptance.mjs +63 -0
- package/scripts/api-live-e2e.mjs +40 -8
- package/scripts/capture-walkthrough.mjs +232 -0
- package/scripts/e2e-agent-team.mjs +5 -3
- package/scripts/render-walkthrough-figure.mjs +46 -0
- package/scripts/seed-walkthrough-fixture.mjs +143 -0
- package/scripts/test-plugin-hardening.mjs +8 -0
- package/scripts/three-system-e2e.mjs +6 -6
- package/scripts/ui/admin-shots.mjs +46 -0
- package/scripts/ui/audit-layout.mjs +301 -0
- package/scripts/ui/bump-microfont.mjs +39 -0
- package/scripts/ui/lib.mjs +198 -0
- package/scripts/ui/linkcheck2.mjs +37 -0
- package/scripts/ui/live-render-check.mjs +72 -0
- package/scripts/ui/md-lint.mjs +80 -0
- package/scripts/ui/perf-audit.mjs +132 -0
- package/scripts/ui/readme-assets.mjs +30 -0
- package/scripts/ui/readme-shots.mjs +42 -0
- package/scripts/ui/record.mjs +225 -0
- package/scripts/ui/seed-admin.mjs +68 -0
- package/scripts/ui/seed-demo.mjs +83 -0
- package/scripts/ui/shot-hero.mjs +25 -0
- package/scripts/ui/shots.mjs +75 -0
- package/scripts/ui/sim-ui-shot.mjs +16 -0
- package/scripts/ui/verify-nav.mjs +51 -0
- package/scripts/ui/verify-responsive.mjs +285 -0
- package/server/api/system/config-groups/[id].patch.ts +1 -1
- package/server/api/system/config-groups/index.post.ts +1 -1
- package/server/api/system/settings/events.get.ts +1 -1
- package/server/api/system/settings/index.patch.ts +1 -1
- package/server/api/workshop/agent-tools/invoke.post.ts +16 -2
- package/server/api/workshop/aml/datasets/[id].get.ts +8 -1
- package/server/api/workshop/daq/infra/reconnect.post.ts +1 -1
- package/server/api/workshop/daq/templates/[key].delete.ts +1 -0
- package/server/api/workshop/daq/templates/[key].patch.ts +1 -0
- package/server/api/workshop/daq/templates/index.post.ts +1 -0
- package/server/api/workshop/dcw/[id]/write.post.ts +10 -2
- package/server/api/workshop/dcw/[id].delete.ts +5 -2
- package/server/api/workshop/dcw/index.get.ts +2 -0
- package/server/api/workshop/dcw/lines/[id].patch.ts +1 -1
- package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -0
- package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -0
- package/server/api/workshop/dcw/params/[id].delete.ts +19 -0
- package/server/api/workshop/dcw/params/[id].patch.ts +23 -0
- package/server/api/workshop/dcw/params/index.get.ts +27 -0
- package/server/api/workshop/dcw/params/index.post.ts +25 -0
- package/server/api/workshop/permissions/index.get.ts +3 -1
- package/server/plugins/aw-plugins.ts +14 -3
- package/server/plugins/dev-stability-guard.ts +3 -1
- package/server/plugins/system-config.ts +6 -1
- package/server/plugins-builtin/rag-bridge/index.mjs +9 -2
- package/server/services/system-config.ts +28 -9
- package/server/services/workshop/agents/adapters/one-shot-cli-agent.ts +2 -1
- package/server/services/workshop/agents/agent-interface.ts +8 -6
- package/server/services/workshop/agents/base-agent.ts +18 -4
- package/server/services/workshop/agents/claude-agent.ts +7 -3
- package/server/services/workshop/agents/codex-agent.ts +3 -3
- package/server/services/workshop/agents/dsh-agent.ts +3 -3
- package/server/services/workshop/agents/goose-agent.ts +0 -1
- package/server/services/workshop/agents/harness-terminal.ts +14 -1
- package/server/services/workshop/agents/hermes-agent.ts +4 -2
- package/server/services/workshop/agents/host-tool-bridge.ts +5 -1
- package/server/services/workshop/agents/industrial-context.ts +4 -1
- package/server/services/workshop/agents/industrial-tools.ts +164 -6
- package/server/services/workshop/agents/omp-agent.ts +15 -9
- package/server/services/workshop/agents/opencode-agent.ts +47 -21
- package/server/services/workshop/agents/qwen-agent.ts +10 -5
- package/server/services/workshop/aml/entity.ts +3 -1
- package/server/services/workshop/aml/python-runtime.ts +3 -2
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +8 -4
- package/server/services/workshop/daq/daq-controller.ts +18 -3
- package/server/services/workshop/daq/daq-runtime.ts +5 -3
- package/server/services/workshop/daq/drivers.ts +63 -8
- package/server/services/workshop/daq/host-ports.ts +3 -2
- package/server/services/workshop/daq/storage/timescale.adapter.ts +3 -1
- package/server/services/workshop/db/channel.repo.ts +4 -0
- package/server/services/workshop/db/ops.repo.ts +5 -2
- package/server/services/workshop/db/retention.ts +8 -3
- package/server/services/workshop/dcw/dcw-controller.ts +143 -16
- package/server/services/workshop/dcw/dcw-product.repo.ts +38 -1
- package/server/services/workshop/dcw/dcw-runtime.ts +3 -2
- package/server/services/workshop/dcw/drivers.ts +5 -2
- package/server/services/workshop/dcw/param-conversion.ts +78 -0
- package/server/services/workshop/dcw/param-limits.ts +142 -0
- package/server/services/workshop/dcw/param-map.repo.ts +305 -0
- package/server/services/workshop/dcw/recipe-rollback-manager.ts +13 -7
- package/server/services/workshop/runtime/agent-runtime.ts +4 -0
- package/server/services/workshop/runtime/manager.ts +9 -2
- package/server/services/workshop/settings.ts +4 -2
- package/server/types/pg.d.ts +49 -0
- package/server/utils/stability-severity.ts +13 -2
- package/shared/config/groups.mjs +22 -1
- package/shared/config/home.d.mts +28 -0
- package/shared/dcw-protocol.ts +136 -0
- package/uno.config.ts +12 -1
- package/.output/public/_nuxt/BFkgkW8u.js +0 -4
- package/.output/public/_nuxt/C5gUkRwn.js +0 -1
- package/.output/public/_nuxt/CM12FuB42.js +0 -1
- package/.output/public/_nuxt/CZiw7sEV.js +0 -1
- package/.output/public/_nuxt/Cc_9VzD42.js +0 -1
- package/.output/public/_nuxt/CdPzkOMV.js +0 -1
- package/.output/public/_nuxt/D1YDxZpZ.js +0 -1
- package/.output/public/_nuxt/D20Yamr4.js +0 -1
- package/.output/public/_nuxt/DVsjtsvZ2.js +0 -1
- package/.output/public/_nuxt/DmqknNvV.js +0 -18
- package/.output/public/_nuxt/DnUuIR83.js +0 -1
- package/.output/public/_nuxt/S_fVQwJK.js +0 -1
- package/.output/public/_nuxt/TownView.0oLiQgTC.css +0 -1
- package/.output/public/_nuxt/_id_.D-SYuyZb.css +0 -1
- package/.output/public/_nuxt/_id_.hma_BU6T.css +0 -1
- package/.output/public/_nuxt/_wsId_.B12v3PhY.css +0 -1
- package/.output/public/_nuxt/agents.BV70ioCv.css +0 -1
- package/.output/public/_nuxt/ahgEJu2R.js +0 -1
- package/.output/public/_nuxt/aml.COEKNNqK.css +0 -1
- package/.output/public/_nuxt/builds/meta/44b66249-54d0-4c8a-9057-9755a32329e2.json +0 -1
- package/.output/public/_nuxt/channel-templates.C-M5nKcC.css +0 -1
- package/.output/public/_nuxt/daq.B3265ZDn.css +0 -1
- package/.output/public/_nuxt/dcw.DLYZqEhT.css +0 -1
- package/.output/public/_nuxt/default.DE_vT238.css +0 -1
- package/.output/public/_nuxt/entry.BB-Eeh-J.css +0 -1
- package/.output/public/_nuxt/logs.CqFyMrJw.css +0 -1
- package/.output/public/_nuxt/monitor.B--1dPzs.css +0 -1
- package/.output/public/_nuxt/pages.ooEzrMm9.css +0 -1
- package/.output/public/_nuxt/permissions.B1pjGChZ.css +0 -1
- package/.output/public/_nuxt/plugins.5e5chZ67.css +0 -1
- package/.output/public/_nuxt/pz2JDAM7.js +0 -2
- package/.output/public/_nuxt/settings.Dm3M0RLy.css +0 -1
- package/.output/public/_nuxt/teams.BC75EGnR.css +0 -1
- package/.output/public/_nuxt/tokens.xRb1fSPU.css +0 -1
- package/.output/public/_nuxt/users.CXnP2E08.css +0 -1
- package/.output/public/_nuxt/workshop.Jk5HxWPE.css +0 -1
- package/.output/server/chunks/build/TownView-jVazYOjN.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Hwr4rZpr.mjs.map +0 -1
- package/.output/server/chunks/build/agents-Bvin73QY.mjs.map +0 -1
- package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +0 -1
- package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DoQ2Oq3P.mjs.map +0 -1
- package/.output/server/chunks/build/teams-2kz3CusY.mjs.map +0 -1
- package/.output/server/chunks/build/town-BOl6hs9B.mjs.map +0 -1
- package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +0 -1
- /package/.output/public/_nuxt/{36oeS8_R2.js → 36oeS8_R.js} +0 -0
- /package/.output/public/_nuxt/{CYWVXZTS.js → CYWVXZTS2.js} +0 -0
package/shared/config/home.d.mts
CHANGED
|
@@ -11,6 +11,9 @@ export declare function isRepoRoot(dir: string | null | undefined): boolean
|
|
|
11
11
|
/** 从指定目录向上找项目检出根;找不到返回 null */
|
|
12
12
|
export declare function findRepoRoot(startDir?: string): string | null
|
|
13
13
|
|
|
14
|
+
/** 从指定目录向上找项目级配置根(<dir>/.AgentWorkShop 真实存在);找不到返回 null */
|
|
15
|
+
export declare function findLocalConfigRoot(startDir?: string): string | null
|
|
16
|
+
|
|
14
17
|
export interface RunModeInfo {
|
|
15
18
|
mode: 'repo' | 'home'
|
|
16
19
|
root: string | null
|
|
@@ -36,13 +39,38 @@ export declare function dataDirFor(cwd?: string, env?: NodeJS.ProcessEnv): strin
|
|
|
36
39
|
/** 确保数据目录存在 + 旧位置(cwd/data、cwd/server/data)运行时文件迁入配置根(幂等) */
|
|
37
40
|
export declare function ensureDataDir(cwd?: string, env?: NodeJS.ProcessEnv): string
|
|
38
41
|
|
|
42
|
+
export interface AmlRootInfo {
|
|
43
|
+
/** AML 数据根绝对路径 */
|
|
44
|
+
dir: string
|
|
45
|
+
/** 解析来源:AW_AML_DIR > repo 模式检出根 > home 模式配置根 > cwd 兜底 */
|
|
46
|
+
mode: 'env' | 'repo' | 'home' | 'cwd'
|
|
47
|
+
/** mode=repo 时的检出根;其余为 null */
|
|
48
|
+
projectRoot: string | null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** 解析 AML 数据根(AW_AML_DIR > 检出根/aml > 配置根/aml > cwd/aml) */
|
|
52
|
+
export declare function resolveAmlRoot(opts?: {
|
|
53
|
+
cwd?: string
|
|
54
|
+
env?: NodeJS.ProcessEnv
|
|
55
|
+
}): AmlRootInfo
|
|
56
|
+
|
|
57
|
+
/** AML 数据根绝对路径(仅解析,不创建) */
|
|
58
|
+
export declare function amlDirFor(cwd?: string, env?: NodeJS.ProcessEnv): string
|
|
59
|
+
|
|
60
|
+
/** 确保 AML 数据根存在并落标准子目录骨架(幂等);返回该根路径 */
|
|
61
|
+
export declare function ensureAmlDir(cwd?: string, env?: NodeJS.ProcessEnv): string
|
|
62
|
+
|
|
39
63
|
declare const _default: {
|
|
40
64
|
HOME_DIRNAME: string
|
|
41
65
|
awHome: typeof awHome
|
|
42
66
|
isRepoRoot: typeof isRepoRoot
|
|
43
67
|
findRepoRoot: typeof findRepoRoot
|
|
68
|
+
findLocalConfigRoot: typeof findLocalConfigRoot
|
|
44
69
|
resolveRunMode: typeof resolveRunMode
|
|
45
70
|
dataDirFor: typeof dataDirFor
|
|
46
71
|
ensureDataDir: typeof ensureDataDir
|
|
72
|
+
resolveAmlRoot: typeof resolveAmlRoot
|
|
73
|
+
amlDirFor: typeof amlDirFor
|
|
74
|
+
ensureAmlDir: typeof ensureAmlDir
|
|
47
75
|
}
|
|
48
76
|
export default _default
|
package/shared/dcw-protocol.ts
CHANGED
|
@@ -322,6 +322,135 @@ export interface AepDcwControllerState {
|
|
|
322
322
|
// Product 产品 + Recipe 配方(产品-配方-批次三级隔离)
|
|
323
323
|
// ============================================================
|
|
324
324
|
|
|
325
|
+
// ============================================================
|
|
326
|
+
// 工艺参数映射(Process Parameter Map)—— 参数语义面 ↔ PLC 执行点
|
|
327
|
+
// ============================================================
|
|
328
|
+
|
|
329
|
+
/** 工艺参数写入限界(单侧可空;缺省侧不约束) */
|
|
330
|
+
export interface ParamLimitRange {
|
|
331
|
+
min?: number
|
|
332
|
+
max?: number
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// ============================================================
|
|
336
|
+
// 工艺参数 → PLC 标准转换模式(映射配置期一次性选定)
|
|
337
|
+
// ============================================================
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* 标准转换模式 —— 工程量 ↔ PLC 原始数据的双向换算规约。
|
|
341
|
+
* 配置映射时选定一次,运行期系统按此自动双向换算(下发 encode / 回读 decode),
|
|
342
|
+
* 用户与 Agent 全程只面对工程量纲,不接触寄存器数据格式。
|
|
343
|
+
*/
|
|
344
|
+
export interface ParamConversion {
|
|
345
|
+
/**
|
|
346
|
+
* float32 原始值=工程值,float32 寄存器直写(最常见)
|
|
347
|
+
* int16-scaled 线性标定到 int16(1 寄存器):eng∈[engMin,engMax] ↔ raw∈[rawMin,rawMax],
|
|
348
|
+
* 如 0.1 分辨率温度: eng 0~300 ↔ raw 0~3000
|
|
349
|
+
* int32-scaled 线性标定到 int32(2 寄存器),同上
|
|
350
|
+
*/
|
|
351
|
+
mode: 'float32' | 'int16-scaled' | 'int32-scaled'
|
|
352
|
+
/** 字节序(缺省 big 大端 AB CD;wordSwap = 字交换) */
|
|
353
|
+
byteOrder?: 'big' | 'little' | 'wordSwap'
|
|
354
|
+
/** 线性标定工程量程(int16/int32-scaled 必填;float32 忽略) */
|
|
355
|
+
engMin?: number
|
|
356
|
+
engMax?: number
|
|
357
|
+
/** 线性标定原始值量程(int16/int32-scaled 必填) */
|
|
358
|
+
rawMin?: number
|
|
359
|
+
rawMax?: number
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* 映射接入规格(创建映射时一次性给定):设备连接 + 寄存器 + 标准转换模式。
|
|
364
|
+
* 系统据此自动生成执行节点(驱动配置由转换模式展开,用户不手工拼装)。
|
|
365
|
+
*/
|
|
366
|
+
export interface ParamAccessSpec {
|
|
367
|
+
/** 驱动类别(缺省 modbus-tcp) */
|
|
368
|
+
driver?: 'modbus-tcp' | 'modbus-rtu'
|
|
369
|
+
/** 设备地址(PLC/网关 IP) */
|
|
370
|
+
host: string
|
|
371
|
+
/** 端口(modbus-tcp 缺省 502;rtu 网关常见 502/8899/26) */
|
|
372
|
+
port?: number
|
|
373
|
+
/** 从站地址(缺省 1) */
|
|
374
|
+
unitId?: number
|
|
375
|
+
/** 写寄存器地址(4xxxx 保持寄存器;回读同址校验) */
|
|
376
|
+
register: number
|
|
377
|
+
/** 标准转换模式(必选) */
|
|
378
|
+
conversion: ParamConversion
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* 工艺参数映射视图 —— 用户/Agent 读写工艺参数的唯一语义面。
|
|
383
|
+
*
|
|
384
|
+
* 一条映射 = 一个工艺参数(key/单位/基准限界) → 一个写控制执行节点。
|
|
385
|
+
* PLC 寻址细节(寄存器地址/数据类型/字节序/工程量换算)全部封装在执行节点的
|
|
386
|
+
* 驱动配置内,参数面只暴露工程量纲 —— 用户与 Agent 永远不直接面对 PLC 寄存器。
|
|
387
|
+
*/
|
|
388
|
+
export interface DcwParamView {
|
|
389
|
+
id: string
|
|
390
|
+
/** 参数键(执行节点所属产线内唯一;产品限界与 Agent 语义寻址的稳定标识) */
|
|
391
|
+
key: string
|
|
392
|
+
name: string
|
|
393
|
+
/** 语义模板(分类/图标/Agent 工艺语义) */
|
|
394
|
+
templateRef: string
|
|
395
|
+
unit: string
|
|
396
|
+
decimals: number
|
|
397
|
+
/** 基准写入限界(常驻层,叠加于节点安全量程;null = 该侧不额外约束) */
|
|
398
|
+
min: number | null
|
|
399
|
+
max: number | null
|
|
400
|
+
/** PLC 执行节点(映射目标) */
|
|
401
|
+
nodeId: string
|
|
402
|
+
/** 执行节点所属产线(派生自节点;'' = 未分配) */
|
|
403
|
+
lineId: string
|
|
404
|
+
/** 驱动类别(仅类别;不含寄存器等寻址细节) */
|
|
405
|
+
driver: DcwDriverKind
|
|
406
|
+
enabled: boolean
|
|
407
|
+
/** 当前设定值 / PLC 读数(自执行节点投影) */
|
|
408
|
+
value: number | null
|
|
409
|
+
readValue: number | null
|
|
410
|
+
state: DcwNodeState
|
|
411
|
+
/** 标准转换模式摘要(配置期选定;展示/审计用,运行期换算以执行节点驱动配置为准) */
|
|
412
|
+
conversion?: ParamConversion
|
|
413
|
+
createdAt: string
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/** 工艺参数映射创建/编辑载荷(nodeId 为映射目标;其余为参数语义面) */
|
|
417
|
+
export interface DcwParamInput {
|
|
418
|
+
key?: string
|
|
419
|
+
name?: string
|
|
420
|
+
templateRef?: string
|
|
421
|
+
unit?: string
|
|
422
|
+
decimals?: number
|
|
423
|
+
min?: number | null
|
|
424
|
+
max?: number | null
|
|
425
|
+
nodeId?: string
|
|
426
|
+
/** 仅创建:给定接入规格时系统自动创建执行节点(连接+寄存器+标准转换模式一键建映射) */
|
|
427
|
+
access?: ParamAccessSpec
|
|
428
|
+
/** 仅创建(access 路径):新执行节点挂载的产线 */
|
|
429
|
+
lineId?: string
|
|
430
|
+
/** 标准转换模式摘要(记录配置期选定的换算规约;展示/审计用) */
|
|
431
|
+
conversion?: ParamConversion
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/** 单层写入限界(来源标注;min/max null = 该侧不约束) */
|
|
435
|
+
export interface ParamLimitLayer {
|
|
436
|
+
layer: 'node' | 'param' | 'product' | 'recipe'
|
|
437
|
+
/** 人话标签(如 产品「XX」限界) */
|
|
438
|
+
label: string
|
|
439
|
+
min: number | null
|
|
440
|
+
max: number | null
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/** 有效写入限界(分层展示 + 交集;联锁拒绝信息/参数台账/前端展示共用) */
|
|
444
|
+
export interface ParamLimitsBreakdown {
|
|
445
|
+
nodeId: string
|
|
446
|
+
paramId: string | null
|
|
447
|
+
paramKey: string | null
|
|
448
|
+
/** 生效中的限界层(按 node→param→product→recipe 顺序) */
|
|
449
|
+
layers: ParamLimitLayer[]
|
|
450
|
+
/** 各层交集(最紧有效限界;恒有 node 层兜底) */
|
|
451
|
+
effective: { min: number, max: number }
|
|
452
|
+
}
|
|
453
|
+
|
|
325
454
|
/** 产品(挂载产线;一个产品可有多个配方) */
|
|
326
455
|
export interface ProductView {
|
|
327
456
|
id: string
|
|
@@ -329,6 +458,9 @@ export interface ProductView {
|
|
|
329
458
|
lineId: string
|
|
330
459
|
name: string
|
|
331
460
|
description: string
|
|
461
|
+
/** 产品级工艺参数写入限界(键=工艺参数 key;生产本产品期间生效,与其他层取交集;
|
|
462
|
+
* 用户/Agent/配方下发越界一律拒绝) */
|
|
463
|
+
paramLimits?: Record<string, ParamLimitRange>
|
|
332
464
|
createdAt: string
|
|
333
465
|
}
|
|
334
466
|
|
|
@@ -337,6 +469,8 @@ export interface ProductInput {
|
|
|
337
469
|
description?: string
|
|
338
470
|
/** 所属产线(产线隔离顶层归属) */
|
|
339
471
|
lineId?: string
|
|
472
|
+
/** 产品级工艺参数写入限界(键=工艺参数 key;仅可收窄不可放宽其他层) */
|
|
473
|
+
paramLimits?: Record<string, ParamLimitRange>
|
|
340
474
|
}
|
|
341
475
|
|
|
342
476
|
/**
|
|
@@ -497,6 +631,8 @@ export interface DcwWriteMeta {
|
|
|
497
631
|
taskId?: string
|
|
498
632
|
/** Agent 判定假设(作业环第 3 步声明) */
|
|
499
633
|
hypothesis?: string
|
|
634
|
+
/** D8 基准消融臂(仅 AW_BENCH_MODE=1 时被 write() 识别;生产模式恒忽略) */
|
|
635
|
+
benchArm?: 'no-interlock' | 'no-readback' | 'ungated'
|
|
500
636
|
}
|
|
501
637
|
|
|
502
638
|
/** 参数变更锚点(append-only 账本;参数全量在册的最小单元) */
|
package/uno.config.ts
CHANGED
|
@@ -13,7 +13,18 @@ import {
|
|
|
13
13
|
export default defineConfig({
|
|
14
14
|
presets: [
|
|
15
15
|
presetUno(),
|
|
16
|
-
|
|
16
|
+
// ⚠️ prefixedOnly:只有 `u:` 开头的属性才当工具类。
|
|
17
|
+
//
|
|
18
|
+
// 不加这个开关时,attributify 会去扫描模板里的**原始文本**,把 Vue 的事件绑定
|
|
19
|
+
// 当成属性工具类:本项目有 64 处 `@blur` / `@change` / `@resize` / `@focus`…
|
|
20
|
+
// 于是 `@blur="mentionOpen = false"` 被解析成 blur 工具类,产物里多出
|
|
21
|
+
// `[blur="..."]` 这种垃圾选择器,以及
|
|
22
|
+
// box-shadow: calc(var(--un-ring-offset-shadow), * -1) var(--un-ring-shadow), …
|
|
23
|
+
// —— 一个**语法都不合法**的值,postcss 直接报 lexical error(实测构建告警)。
|
|
24
|
+
//
|
|
25
|
+
// 本项目模板**没有任何**无前缀 attributify 用法(实测 grep `="~` 与裸工具类属性均为 0),
|
|
26
|
+
// 所以收紧为 prefixedOnly 是零代价的:既消掉告警,也消掉一整类误判。
|
|
27
|
+
presetAttributify({ prefixedOnly: true }),
|
|
17
28
|
presetIcons({
|
|
18
29
|
scale: 1.2,
|
|
19
30
|
warn: true,
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BU83-NnX.js","./CSkxz2NX.js","./D6uzXueg.js","./4sIEbgcl.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e}from"./BU83-NnX.js";import{$ as t,Ht as n,P as r,R as ee,S as i,Ut as a,V as o,Vt as s,W as c,d as l,dt as te,f as u,h as d,i as f,m as p,nt as m,pt as h,y as g}from"./CSkxz2NX.js";import{c as ne,d as re,f as _,l as v}from"./D6uzXueg.js";import{n as ie}from"./DtYHUi5Z.js";import{t as ae}from"./HclGiUj8.js";import{n as oe}from"./KZQX7xoM.js";import{t as se}from"./CWoJjWmZ.js";import{t as y}from"./BDNMzG2s2.js";import{t as b}from"./D0ZBQrN_2.js";import{t as ce}from"./BNT8gYU92.js";import{t as x}from"./36oeS8_R2.js";import{t as le}from"./CNs_Ozdc2.js";import{t as ue}from"./CM12FuB42.js";import{t as de}from"./BDmh31hl.js";function S(){let e=h(new Map),t=h(null),n=h(null),r=h(null);function ee(t){let n=e.value.get(t.jobId),r=new Map(e.value);r.set(t.jobId,{jobId:t.jobId,datasetId:t.datasetId||n?.datasetId||``,lineId:t.lineId??n?.lineId??``,status:t.status,stage:t.stage,progress:t.progress,purpose:t.purpose??n?.purpose,note:t.note,at:new Date().toISOString()}),e.value=r}function i(e){if(e.type===`aml.job`){let n=e.payload;if(!n?.jobId)return;t.value=n,ee(n)}else if(e.type===`aml.dataset`){let t=e.payload;if(!t?.datasetId)return;n.value=t}else if(e.type===`aml.model`){let t=e.payload;if(!t?.modelId)return;r.value=t}}let a=0,o=null;function s(){a=Math.max(0,a-1),a===0&&o&&(o(),o=null)}function c(){a++,o||=x().subscribe(i);let e=!1;return()=>{e||(e=!0,s())}}function l(){s()}return{jobs:e,lastJob:t,lastDataset:n,lastModel:r,ensure:c,dispose:l}}var fe=`__amlStream`;function pe(){let e=globalThis;return e[fe]||(e[fe]=S()),e[fe]}var me={class:`page`},he={class:`aw-page-head`},ge={class:`sub`},_e={class:`badges mono`},ve=[`title`],ye=[`title`],be={key:0,class:`infra-banner`},xe={class:`txt`},Se={class:`mono`},Ce={key:1,class:`aw-tile ov-card`},we={class:`ov-row mono`},Te={class:`ov-item`},Ee={class:`ov-item`},De={class:`ov-item`},Oe={class:`ov-item`},ke=[`title`],Ae={key:2,class:`err`},je={key:3,class:`aw-tile zone env-zone`},Me={class:`zone-head`},Ne={class:`zone-actions`},Pe=[`disabled`],Fe={key:0,class:`infra-banner`},Ie={class:`txt`},Le={class:`mono`},Re={class:`env-grid`},ze={class:`ec-head`},Be={class:`ec-state`},Ve={key:0,class:`ec-detail mono`},He={key:1,class:`ec-detail`},Ue={class:`ec-actions`},We=[`disabled`,`title`],Ge={class:`ec-head`},Ke={class:`ec-state`},qe={class:`ec-detail mono`},Je={class:`ec-actions`},Ye=[`disabled`,`title`],Xe=[`disabled`],Ze={class:`env-card`},Qe={class:`ec-head`},$e={class:`ec-detail mono`},et={class:`ec-detail dim`},tt={class:`ec-detail`},nt={class:`mono`},rt={class:`dim`},it={class:`ec-head`},at={key:0,class:`ec-state`},ot={key:0,class:`ec-detail mono`},st={key:1,class:`ec-issues mono`},ct=[`title`],lt={class:`tag`},ut={class:`ec-actions`},dt={key:1,class:`env-task`},ft={class:`et-head mono`},pt={class:`dim`},mt={key:0,class:`dim`},ht={class:`et-log mono`},gt={key:0,class:`err`},_t={class:`aw-tile zone`},vt={class:`zone-head`},yt={class:`mono cnt`},bt={class:`zone-actions`},xt={key:0,class:`tbl`},St={class:`num`},Ct={class:`num`},wt=[`onClick`],Tt={class:`mono dim`},Et={class:`mono`},Dt={class:`mono`},Ot={class:`mono num`},kt={class:`mono num`},At={key:0,class:`note-edit`},jt=[`placeholder`,`onKeyup`],Mt=[`onClick`],Nt={key:1,class:`note-text`},Pt=[`title`],Ft=[`title`,`onClick`],It=[`title`,`onClick`],Lt={key:0,class:`detail-row`},Rt={colspan:`7`},zt={key:0,class:`dim pad`},Bt={key:1,class:`err pad`},Vt={key:2,class:`det-grid`},Ht={class:`det-title`},Ut={class:`sub-tbl`},Wt={class:`num`},Gt={class:`num`},Kt={class:`num`},qt={class:`num`},Jt={class:`num`},Yt={class:`mono`},Xt={class:`role-chip`},Zt={class:`mono num`},Qt={class:`mono num`},$t={class:`mono num`},en={class:`mono num`},tn={class:`mono num`},nn={class:`det-title`},rn={key:0,class:`sub-tbl`},an={class:`num`},on={class:`num`},sn={class:`mono`},cn={class:`mono`},ln={class:`mono num`},un={class:`mono num`},dn={key:1,class:`dim`},fn={class:`det-title`},pn={class:`mono dim run-line`},mn={key:3,class:`dim pad`},hn={key:1,class:`empty`},gn={class:`aw-tile zone`},_n={class:`zone-head`},vn={class:`mono cnt`},yn=[`title`],bn={key:0,class:`tbl`},xn={class:`prog-th`},Sn={class:`right`},Cn=[`onClick`],wn={class:`mono`},Tn={class:`mono dim`},En={class:`mono dim`},Dn={class:`mono dim`},On={class:`prog-cell`},kn={class:`prog`},An={class:`mono prog-num`},jn={class:`mono dim`},Mn={class:`right acts`},Nn=[`disabled`,`onClick`],Pn=[`disabled`,`onClick`],Fn=[`title`,`onClick`],In={key:0,class:`detail-row`},Ln={colspan:`8`},Rn={key:0,class:`dim pad`},zn={key:1,class:`err pad`},Bn={key:2,class:`det-grid`},Vn={class:`det-title`},Hn={key:0,class:`sub-tbl`},Un={class:`num`},Wn={class:`num`},Gn={class:`mono gate-id`},Kn={class:`dim`},qn={class:`mono num`},Jn={class:`mono num dim`},Yn={class:`dim gate-detail`},Xn={key:1,class:`dim`},Zn={key:2,class:`mono dim gate-detail`},Qn={key:3,class:`err gate-detail`},$n={class:`det-title`},er={key:0,class:`mono live-hint`},tr={class:`logs`},nr={key:1,class:`empty`},rr={class:`aw-tile zone`},ir={class:`zone-head`},ar={class:`mono cnt`},or={class:`zone-actions`},sr={value:``},cr=[`value`],lr=[`disabled`],ur={key:0,class:`tbl`},dr=[`title`],fr=[`title`],pr={class:`mono`},mr={key:0,class:`best-tag`},hr={class:`mono dim`},gr={class:`note-cell`},_r=[`title`],vr={class:`mono dim`},yr={class:`mono num`},br={class:`mono num`},xr={key:1,class:`empty`},Sr={key:2,class:`err pad`},Cr={class:`aw-tile zone`},wr={class:`zone-head`},Tr={class:`mono cnt`},Er={key:0,class:`tbl`},Dr=[`title`],Or={class:`right`},kr={class:`mono`},Ar={class:`mono dim`},jr={class:`mono dim`},Mr={class:`mono dim`},Nr={class:`mono dim`},Pr={key:0,class:`note-edit`},Fr=[`placeholder`,`onKeyup`],Ir=[`onClick`],Lr={key:1,class:`note-text`},Rr=[`title`],zr=[`title`,`onClick`],Br={class:`right acts`},Vr=[`disabled`,`onClick`],Hr={key:0,class:`dim`},Ur=[`title`,`onClick`],Wr={key:1,class:`empty`},Gr={class:`aw-tile zone`},Kr={class:`zone-head`},qr={value:``},Jr=[`value`],Yr={key:0,class:`pc-body`},Xr={class:`det-title`},Zr={class:`io-grid mono`},Qr={class:`io-item`},$r={class:`io-item`},ei={class:`io-item`},ti=[`title`],ni=[`title`],ri=[`title`],ii={class:`pc-form`},ai={class:`pc-field`},oi=[`placeholder`],si={class:`pc-side`},ci={class:`pc-field`},li={class:`pc-field`},ui=[`disabled`],di={class:`hint dim`},fi={key:0,class:`err`},pi={class:`det-title`},mi={class:`sub-tbl`},hi={class:`num`},gi={class:`num`},_i={key:0,class:`dim`},vi={class:`mono num`},yi={class:`mono num dim`},bi={class:`mono dim gate-detail`},xi={key:1,class:`empty`},Si={key:1,class:`empty`},Ci={class:`modal`},wi={class:`m-title`},Ti={class:`f-grid`},Ei={class:`f`},Di={class:`f`},Oi={class:`f`},ki={class:`sec-label`},Ai={class:`node-rows`},ji=[`onUpdate:modelValue`,`placeholder`],Mi=[`onUpdate:modelValue`],Ni={value:`control`},Pi={value:`feature`},Fi={value:`target`},Ii=[`disabled`,`onClick`],Li={class:`f-grid`},Ri={class:`f`},zi={class:`f`},Bi={class:`f`},Vi={class:`f`},Hi={class:`f`},Ui={class:`f`},Wi={class:`f`},Gi={value:`mpc_surrogate`},Ki={value:`quality_predict`},qi={class:`f wide`},Ji=[`placeholder`],Yi={key:0,class:`m-err`},Xi={class:`m-actions`},Zi=[`disabled`],Qi=y(i({__name:`index`,setup(i){let{t:y}=oe();le({layout:`default`}),ie({title:()=>y(`aml.k1amlx160`)});function x(e,t){return de({base:`/api/workshop/aml`,path:e,init:t})}let S=pe(),fe=ce(),Qi=null,$i=null;ee(()=>{fe.ensureConnected(),Qi=S.ensure(),D(),pa(),xa(),N(),V(),J(),(O.value?.task?.status??E.value?.env?.task?.status)===`running`&&(k.value=!0,ga()),ue(()=>{D(),V()},8e3,{bgMs:3e4}),$i=se(()=>{let e=W.value;if(!e||document.hidden)return;let t=H.value.find(t=>t.id===e);t&&T(t.status)&&Ra(e)},5e3)}),r(()=>{Qi?.(),$i&&clearInterval($i),ha()}),t(()=>S.lastJob.value,e=>{e&&na(e.status)&&V()}),t(()=>S.lastModel.value,()=>{J()}),t(()=>S.lastDataset.value,()=>{N()});function ea(e){if(!e)return`--`;let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)} ${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`:`--`}function C(e,t=4){return e==null||!Number.isFinite(e)?`--`:String(Number(e.toFixed(t)))}function ta(e,t=1){return e==null||!Number.isFinite(e)?`--`:`${(e*100).toFixed(t)}%`}function w(e){return e.length>12?`${e.slice(0,10)}…`:e}function T(e){return e===`queued`||e===`provisioning`||e===`training`||e===`evaluating`}function na(e){return e===`done`||e===`failed`||e===`cancelled`||e===`timeout`||e===`interrupted`}function ra(e){return e===`failed`||e===`timeout`||e===`interrupted`}function ia(e){let t={queued:`aml.k1amlx100`,provisioning:`aml.k1amlx101`,training:`aml.k1amlx102`,evaluating:`aml.k1amlx103`,done:`aml.k1amlx104`,failed:`aml.k1amlx105`,cancelled:`aml.k1amlx106`,timeout:`aml.k1amlx107`,interrupted:`aml.k1amlx108`};return t[e]?y(t[e]):e}function aa(e){let t={running:`aml.k1amlx119`,gates_passed:`aml.k1amlx080`,gates_failed:`aml.k1amlx081`,failed:`aml.k1amlx105`};return t[e]?y(t[e]):e}let E=h(null),oa=h(``);async function D(){try{E.value=await x(``),oa.value=``}catch(e){oa.value=b(e)}}let sa=l(()=>{let e=E.value?.runtime;return e?e.python.ok?e.python.version??y(`aml.k1amlx004`):y(`aml.k1amlx005`):`--`}),ca=l(()=>E.value?E.value.runtime.venvReady?y(`aml.k1amlx007`):y(`aml.k1amlx008`):`--`),O=h(null),la=h(!1),k=h(!1),ua=h(!1),da=l(()=>{let e=O.value?.uv??E.value?.env?.uv;return e?e.ok?e.version??y(`aml.k1amlx164`):y(`aml.k1amlx165`):`--`}),fa=l(()=>{let e=(O.value?.uv??E.value?.env?.uv)?.source;return e?{config:`aml.python.uvBin`,project:`./aml/tools`,state:`./aml/runtime/uv.json`,path:`PATH`}[e]??e:``});async function pa(){try{O.value=await x(`/env`)}catch{}}let ma=null;function ha(){ma!=null&&(clearInterval(ma),ma=null)}function ga(){ha(),ma=se(()=>{(async()=>{await pa(),await D(),(O.value?.task==null||O.value.task.status!==`running`)&&(ha(),k.value=!1)})()},1500)}async function _a(t,n){k.value=!0,ua.value=!0;try{await x(t,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n??{})}),await pa(),ga()}catch(t){k.value=!1,e.error(`${y(`aml.k1amlx203`)}:${b(t)}`)}}async function va(){await _a(`/env/uv`)}async function ya(e=!1){await _a(`/env/venv`,{force:e})}async function ba(){k.value=!0;try{O.value=await x(`/env/recheck`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}),await D()}catch(t){e.error(`${y(`aml.k1amlx203`)}:${b(t)}`)}finally{k.value=!1}}let A=h(null);async function xa(){try{A.value=await x(`/entities`)}catch{}}async function Sa(){try{let t=await x(`/entities/prune`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({dryRun:!1})});e.success(`${y(`aml.k1amlx188`)}:${t.removed.length}`),await xa()}catch(t){e.error(`${y(`aml.k1amlx203`)}:${b(t)}`)}}function Ca(){D(),pa(),xa(),N(),V(),J()}let j=h([]),M=h(``);async function N(){try{let e=await x(`/datasets`);j.value=e.datasets}catch{}}let wa=h(``),P=h(``);function Ta(e,t){wa.value=e,P.value=t??``}function F(){wa.value=``,P.value=``}async function Ea(t,n){try{await x(`/${t}/${n}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({note:P.value})}),e.success(y(`aml.k1amlx192`)),F(),t===`datasets`?await N():await J()}catch(t){e.error(`${y(`aml.k1amlx203`)}:${b(t)}`)}}async function Da(t,n,r){if(await Oa(r))try{await x(`/${t}/${n}`,{method:`DELETE`}),e.success(y(`aml.k1amlx193`)),t===`datasets`?await N():t===`models`?await J():await V(),await D(),await xa()}catch(t){e.error(`${y(`aml.k1amlx203`)}:${b(t)}`)}}async function Oa(e){try{let{Modal:t}=await ae(async()=>{let{Modal:e}=await import(`./BU83-NnX.js`).then(e=>e.t);return{Modal:e}},__vite__mapDeps([0,1,2,3]),import.meta.url);return await new Promise(n=>{t.confirm({title:e,okText:y(`aml.k1amlx190`),cancelText:y(`aml.k1amlx202`),onOk:()=>n(!0),onCancel:()=>n(!1)})})}catch{return!0}}let I=te({});async function ka(e){if(M.value=M.value===e?``:e,M.value&&!I[e]){I[e]={loading:!0,error:``,report:null};try{let t=await x(`/datasets/${e}`);I[e]={loading:!1,error:``,report:t.report}}catch(t){I[e]={loading:!1,error:b(t),report:null}}}}let L=h(!1),Aa=h(!1),R=h(``),z=te({lineId:``,productId:``,recipeId:``,beatMs:5e3,historySteps:60,horizonSteps:30,valRatio:.15,testRatio:.15,seed:7,purpose:`mpc_surrogate`,note:``}),B=te([{nodeId:``,role:`control`},{nodeId:``,role:`target`}]);function ja(){R.value=``,L.value=!0}function Ma(){B.push({nodeId:``,role:`feature`})}function Na(e){B.splice(e,1)}async function Pa(){R.value=``;let t=B.filter(e=>e.nodeId.trim()).map(e=>({nodeId:e.nodeId.trim(),role:e.role}));if(!z.lineId.trim()||!z.productId.trim()||!z.recipeId.trim()){R.value=y(`aml.k1amlx161`);return}if(t.length<2||!t.some(e=>e.role===`target`)){R.value=y(`aml.k1amlx054`);return}Aa.value=!0;try{let n=await x(`/datasets`,{method:`POST`,body:JSON.stringify({lineId:z.lineId.trim(),productId:z.productId.trim(),recipeId:z.recipeId.trim(),nodes:t,beatMs:Number(z.beatMs),window:{historySteps:Number(z.historySteps),horizonSteps:Number(z.horizonSteps)},split:{valRatio:Number(z.valRatio),testRatio:Number(z.testRatio),seed:Number(z.seed)},purpose:z.purpose,note:z.note.trim()||void 0})});e.success(y(`aml.k1amlx073`,{p0:w(n.dataset.id),p1:n.dataset.rowCount})),L.value=!1,await N()}catch(e){R.value=b(e)}finally{Aa.value=!1}}let Fa=h([]);async function V(){try{let e=await x(`/jobs`);Fa.value=e.jobs}catch{}}let H=l(()=>Fa.value.map(e=>{let t=S.jobs.value.get(e.id);return t?{...e,status:t.status||e.status,stage:t.stage||e.stage,progress:t.progress??e.progress,live:!0}:e})),U=te({}),W=h(``);async function Ia(e){return(await x(`/jobs/${e}/logs?lines=120`)).logs}async function La(e){if(W.value=W.value===e?``:e,W.value&&!U[e]){U[e]={loading:!0,error:``,metrics:null,gates:null,logs:[]};try{let[t,n]=await Promise.all([x(`/jobs/${e}`),Ia(e)]);U[e]={loading:!1,error:``,metrics:t.metrics,gates:t.gates,logs:n}}catch(t){U[e]={loading:!1,error:b(t),metrics:null,gates:null,logs:[]}}}}async function Ra(e){let t=U[e];if(t)try{t.logs=await Ia(e)}catch{}}let za=h(``),Ba=h(``);async function Va(t){if(za.value!==t){za.value=t;return}za.value=``,Ba.value=t;try{await x(`/jobs/${t}/cancel`,{method:`POST`,body:JSON.stringify({})}),e.success(y(`aml.k1amlx097`,{p0:w(t)})),await V()}catch(t){e.error(b(t))}finally{Ba.value=``}}let Ha=h(``),Ua=h(``);async function Wa(t){if(Ha.value!==t){Ha.value=t;return}Ha.value=``,Ua.value=t;try{await x(`/jobs/${t}/retry`,{method:`POST`,body:JSON.stringify({})}),e.success(y(`aml.k1amlx098`,{p0:w(t)})),await V()}catch(t){e.error(b(t))}finally{Ua.value=``}}let G=h(``),K=h([]),Ga=h(!1),Ka=h(``);async function qa(){if(!G.value){K.value=[];return}Ga.value=!0,Ka.value=``;try{let e=await x(`/experiments?datasetId=${encodeURIComponent(G.value)}`);K.value=e.experiments}catch(e){Ka.value=b(e)}finally{Ga.value=!1}}let Ja=l(()=>{let e=null;for(let t of K.value){let n=t.metrics?.oneStepTest?.nrmse;t.status===`gates_passed`&&n!=null&&Number.isFinite(n)&&(e==null||n<e.nrmse)&&(e={id:t.id,nrmse:n})}return e?.id??``}),q=h([]);async function J(){try{let e=await x(`/models`);q.value=e.models}catch{}}let Ya=h(``),Xa=h(``);function Za(e){return e.stage===`candidate`?[{to:`shadow`,key:`aml.k1amlx128`},{to:`production`,key:`aml.k1amlx129`}]:e.stage===`shadow`?[{to:`production`,key:`aml.k1amlx129`},{to:`retired`,key:`aml.k1amlx130`}]:e.stage===`production`?[{to:`retired`,key:`aml.k1amlx130`}]:[]}async function Qa(t,n){let r=`${t.id}:${n}`;if(Ya.value!==r){Ya.value=r;return}Ya.value=``,Xa.value=r;try{let r=await x(`/models/${t.id}/promote`,{method:`POST`,body:JSON.stringify({toStage:n})});r.ok&&e.success(y(`aml.k1amlx132`,{p0:r.from??t.stage,p1:n})),await Promise.all([J(),D()])}catch(t){e.error(b(t))}finally{Xa.value=``}}let $a=l(()=>q.value.filter(e=>e.stage===`production`)),eo=h(``),Y=l(()=>q.value.find(e=>e.id===eo.value)??null),to=h(``),X=h(``),Z=h(null),no=h(!1),Q=h(``),$=h(null);function ro(){e.info(y(`aml.k1amlx146`))}function io(e){let t=e.trim();if(!t)return null;try{let e=JSON.parse(t);return!Array.isArray(e)||e.length===0?null:e.every(e=>Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`number`&&Number.isFinite(e)))?e:null}catch{return null}}async function ao(){Q.value=``,$.value=null;let t=Y.value;if(!t)return;let n=io(to.value);if(!n){Q.value=y(`aml.k1amlx153`);return}let r=X.value.trim()?io(X.value):void 0;if(X.value.trim()&&!r){Q.value=y(`aml.k1amlx153`);return}no.value=!0;try{let ee=typeof Z.value==`number`&&Number.isFinite(Z.value)?Z.value:void 0,i=await x(`/models/${t.id}/predict`,{method:`POST`,body:JSON.stringify({history:n,controls:r,steps:ee})});$.value=i.prediction,e.success(y(`aml.k1amlx154`,{p0:i.prediction.forecast.length,p1:i.prediction.targetNodes.length}))}catch(e){Q.value=b(e)}finally{no.value=!1}}return(e,t)=>(o(),d(`div`,me,[u(`div`,he,[u(`div`,null,[t[28]||=u(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / AML STUDIO `,-1),u(`h1`,null,a(e.$t(`aml.k1amlx001`)),1),u(`p`,ge,a(e.$t(`aml.k1amlx002`)),1)]),u(`div`,_e,[u(`span`,{class:s([`badge`,{bad:E.value!=null&&!E.value.runtime.python.ok}]),title:E.value?.runtime.python.reason??``},`PYTHON · `+a(sa.value),11,ve),u(`span`,{class:s([`badge`,{bad:E.value!=null&&!E.value.runtime.venvReady}])},`VENV · `+a(ca.value),3),u(`span`,{class:s([`badge`,{bad:O.value!=null&&!O.value.uv.ok}]),title:O.value?.uv.reason??O.value?.uv.path??``},`UV · `+a(da.value),11,ye)])]),E.value!=null&&!E.value.runtime.python.ok?(o(),d(`div`,be,[t[29]||=u(`span`,{class:`i-tabler-alert-triangle`},null,-1),u(`span`,xe,[g(a(e.$t(`aml.k1amlx014`)),1),u(`b`,Se,a(E.value.runtime.python.reason??``),1)])])):p(``,!0),E.value?(o(),d(`section`,Ce,[u(`div`,we,[u(`span`,{class:s([`ov-item`,E.value.runtime.python.ok?`ok`:`bad`])},[u(`span`,{class:s(E.value.runtime.python.ok?`i-tabler-circle-check`:`i-tabler-alert-triangle`)},null,2),g(` `+a(e.$t(`aml.k1amlx003`))+` · `+a(sa.value),1)],2),u(`span`,{class:s([`ov-item`,{ok:E.value.runtime.venvReady}])},a(e.$t(`aml.k1amlx006`))+` · `+a(ca.value),3),u(`span`,Te,[g(a(e.$t(`aml.k1amlx009`))+` `,1),u(`b`,null,a(E.value.runtime.queued),1)]),u(`span`,Ee,[g(a(e.$t(`aml.k1amlx010`))+` `,1),u(`b`,null,a(E.value.runtime.running),1)]),t[30]||=u(`span`,{class:`sep`},`·`,-1),u(`span`,De,[g(a(e.$t(`aml.k1amlx011`))+` `,1),u(`b`,null,a(E.value.counts.datasets),1)]),u(`span`,Oe,[g(a(e.$t(`aml.k1amlx012`))+` `,1),u(`b`,null,a(E.value.counts.models),1)]),u(`span`,{class:`ov-item accent`,title:e.$t(`aml.k1amlx013`)},[g(a(e.$t(`aml.k1amlx013`))+` `,1),u(`b`,null,a(E.value.counts.productions),1)],8,ke),u(`button`,{class:`mini-btn reload`,onClick:Ca},a(e.$t(`aml.k1amlx017`)),1)])])):oa.value?(o(),d(`p`,Ae,a(e.$t(`aml.k1amlx015`))+`:`+a(oa.value),1)):p(``,!0),O.value?(o(),d(`section`,je,[u(`div`,Me,[u(`h2`,null,a(e.$t(`aml.k1amlx162`)),1),u(`div`,Ne,[u(`button`,{class:`mini-btn`,disabled:k.value,onClick:ba},a(e.$t(`aml.k1amlx175`)),9,Pe),u(`button`,{class:`mini-btn`,onClick:t[0]||=e=>la.value=!la.value},a(la.value?e.$t(`aml.k1amlx181`):e.$t(`aml.k1amlx180`)),1)])]),O.value.preflight.canRunJobs?p(``,!0):(o(),d(`div`,Fe,[t[31]||=u(`span`,{class:`i-tabler-alert-triangle`},null,-1),u(`span`,Ie,[g(a(e.$t(`aml.k1amlx178`))+`:`,1),u(`b`,Le,a(O.value.preflight.blockers.join(` / `)),1)])])),u(`div`,Re,[u(`div`,{class:s([`env-card`,O.value.uv.ok?`ok`:`bad`])},[u(`div`,ze,[u(`span`,{class:s(O.value.uv.ok?`i-tabler-circle-check`:`i-tabler-alert-triangle`)},null,2),u(`b`,null,a(e.$t(`aml.k1amlx163`)),1),u(`span`,Be,a(da.value),1)]),O.value.uv.ok?(o(),d(`p`,Ve,[g(a(O.value.uv.path),1),fa.value?(o(),d(f,{key:0},[g(` · `+a(fa.value),1)],64)):p(``,!0)])):(o(),d(`p`,He,a(e.$t(`aml.k1amlx177`)),1)),u(`div`,Ue,[O.value.uv.ok?p(``,!0):(o(),d(`button`,{key:0,class:`mini-btn primary`,disabled:k.value,title:e.$t(`aml.k1amlx176`),onClick:va},[t[32]||=u(`span`,{class:`i-tabler-download`},null,-1),g(` `+a(O.value.task?.kind===`install-uv`&&O.value.task.status===`running`?e.$t(`aml.k1amlx167`):e.$t(`aml.k1amlx166`)),1)],8,We))])],2),u(`div`,{class:s([`env-card`,O.value.venv.ready?`ok`:`bad`])},[u(`div`,Ge,[u(`span`,{class:s(O.value.venv.ready?`i-tabler-circle-check`:`i-tabler-alert-triangle`)},null,2),u(`b`,null,a(e.$t(`aml.k1amlx168`)),1),u(`span`,Ke,a(O.value.venv.ready?e.$t(`aml.k1amlx007`):e.$t(`aml.k1amlx008`)),1)]),u(`p`,qe,[g(a(O.value.venv.dir)+` `,1),O.value.venv.ready?(o(),d(f,{key:0},[g(` · `+a(O.value.venv.sizeMb)+` MB `,1)],64)):p(``,!0)]),u(`div`,Je,[u(`button`,{class:`mini-btn primary`,disabled:k.value||!O.value.python.ok,title:O.value.python.ok?``:O.value.python.reason??``,onClick:t[1]||=e=>ya(!1)},[t[33]||=u(`span`,{class:`i-tabler-plus`},null,-1),g(` `+a(O.value.task?.kind===`create-venv`&&O.value.task.status===`running`?e.$t(`aml.k1amlx170`):e.$t(`aml.k1amlx168`)),1)],8,Ye),O.value.venv.ready?(o(),d(`button`,{key:0,class:`mini-btn`,disabled:k.value,onClick:t[2]||=e=>ya(!0)},a(e.$t(`aml.k1amlx169`)),9,Xe)):p(``,!0)])],2),u(`div`,Ze,[u(`div`,Qe,[t[34]||=u(`span`,{class:`i-tabler-folder`},null,-1),u(`b`,null,a(e.$t(`aml.k1amlx171`)),1)]),u(`p`,$e,a(O.value.amlRoot),1),u(`p`,et,a(e.$t(`aml.k1amlx201`)),1),u(`p`,tt,[g(a(e.$t(`aml.k1amlx174`))+`: `,1),u(`b`,nt,a(O.value.disk.usedMb)+` / `+a(O.value.disk.quotaMb)+` MB`,1),u(`span`,rt,` · `+a(O.value.amlRootSource),1)])]),u(`div`,{class:s([`env-card`,A.value==null?``:A.value.ok?`ok`:`bad`])},[u(`div`,it,[u(`span`,{class:s(A.value?.ok===!1?`i-tabler-alert-triangle`:`i-tabler-database`)},null,2),u(`b`,null,a(e.$t(`aml.k1amlx182`)),1),A.value?(o(),d(`span`,at,a(A.value.ok?e.$t(`aml.k1amlx183`):e.$t(`aml.k1amlx184`)),1)):p(``,!0)]),A.value?(o(),d(`p`,ot,a(e.$t(`aml.k1amlx011`))+` `+a(A.value.counts.datasets)+`/`+a(A.value.entities.datasets)+` · `+a(e.$t(`aml.k1amlx010`))+` `+a(A.value.counts.jobs)+`/`+a(A.value.entities.jobs)+` · `+a(e.$t(`aml.k1amlx012`))+` `+a(A.value.counts.models)+`/`+a(A.value.entities.models),1)):p(``,!0),A.value&&A.value.issues.length>0?(o(),d(`ul`,st,[(o(!0),d(f,null,c(A.value.issues.slice(0,5),t=>(o(),d(`li`,{key:`${t.kind}:${t.id}:${t.problem}`,title:t.detail},[u(`span`,lt,a(t.problem===`entity_missing`?e.$t(`aml.k1amlx185`):t.problem===`orphan_dir`?e.$t(`aml.k1amlx186`):e.$t(`aml.k1amlx187`)),1),g(` `+a(t.kind)+` `+a(w(t.id)),1)],8,ct))),128))])):p(``,!0),u(`div`,ut,[A.value&&A.value.issues.some(e=>e.problem===`orphan_dir`)?(o(),d(`button`,{key:0,class:`mini-btn`,onClick:Sa},[t[35]||=u(`span`,{class:`i-tabler-trash`},null,-1),g(` `+a(e.$t(`aml.k1amlx188`)),1)])):p(``,!0)])],2)]),O.value.task&&la.value?(o(),d(`div`,dt,[u(`div`,ft,[u(`span`,{class:s(O.value.task.status===`running`?`i-tabler-loader-2 spin`:O.value.task.status===`done`?`i-tabler-circle-check`:`i-tabler-alert-triangle`)},null,2),u(`b`,null,a(O.value.task.kind),1),u(`span`,pt,a(O.value.task.status),1),O.value.task.status===`running`?(o(),d(`span`,mt,`· `+a(e.$t(`aml.k1amlx179`)),1)):p(``,!0)]),u(`pre`,ht,a(O.value.task.log.slice(-40).join(`
|
|
3
|
-
`)),1),O.value.task.error?(o(),d(`p`,gt,a(O.value.task.error),1)):p(``,!0)])):p(``,!0)])):p(``,!0),u(`section`,_t,[u(`div`,vt,[u(`h2`,null,[t[36]||=u(`span`,{class:`i-tabler-database`},null,-1),g(` `+a(e.$t(`aml.k1amlx016`))+` `,1),u(`b`,yt,a(j.value.length),1)]),u(`div`,bt,[u(`button`,{class:`mini-btn`,onClick:t[3]||=e=>N()},a(e.$t(`aml.k1amlx017`)),1),u(`button`,{class:`pill-btn`,onClick:ja},[t[37]||=u(`span`,{class:`i-tabler-plus`},null,-1),g(` `+a(e.$t(`aml.k1amlx018`)),1)])])]),j.value.length?(o(),d(`table`,xt,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx020`)),1),u(`th`,null,a(e.$t(`aml.k1amlx021`)),1),u(`th`,null,a(e.$t(`aml.k1amlx022`)),1),u(`th`,St,a(e.$t(`aml.k1amlx023`)),1),u(`th`,Ct,a(e.$t(`aml.k1amlx024`)),1),u(`th`,null,a(e.$t(`aml.k1amlx025`)),1),u(`th`,null,a(e.$t(`aml.k1amlx026`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(j.value,n=>(o(),d(f,{key:n.id},[u(`tr`,{class:s([`row-main`,{open:M.value===n.id}]),onClick:e=>ka(n.id)},[u(`td`,Tt,a(ea(n.createdAt)),1),u(`td`,Et,a(w(n.productId)),1),u(`td`,Dt,a(w(n.recipeId)),1),u(`td`,Ot,a(n.rowCount),1),u(`td`,kt,a(n.runIds.length),1),u(`td`,null,[g(a(n.createdBy),1),u(`small`,{class:s([`kind`,n.createdByKind])},a(n.createdByKind===`agent`?`Agent`:e.$t(`aml.k1amlx049`)),3)]),u(`td`,{class:`note-cell`,onClick:t[5]||=_(()=>{},[`stop`])},[wa.value===n.id?(o(),d(`div`,At,[m(u(`input`,{"onUpdate:modelValue":t[4]||=e=>P.value=e,placeholder:e.$t(`aml.k1amlx189`),onKeyup:[re(e=>Ea(`datasets`,n.id),[`enter`]),re(F,[`esc`])]},null,40,jt),[[v,P.value]]),u(`button`,{class:`mini-btn`,onClick:e=>Ea(`datasets`,n.id)},a(e.$t(`aml.k1amlx191`)),9,Mt),u(`button`,{class:`mini-btn`,onClick:F},a(e.$t(`aml.k1amlx202`)),1)])):(o(),d(`span`,Nt,[u(`span`,{class:`note`,title:n.note},a(n.note||`--`),9,Pt),u(`span`,{class:`i-tabler-pencil edit-i`,title:e.$t(`aml.k1amlx189`),onClick:e=>Ta(n.id,n.note)},null,8,Ft),u(`span`,{class:`i-tabler-trash edit-i`,title:e.$t(`aml.k1amlx190`),onClick:t=>Da(`datasets`,n.id,e.$t(`aml.k1amlx198`))},null,8,It)]))])],10,wt),M.value===n.id?(o(),d(`tr`,Lt,[u(`td`,Rt,[I[n.id]?.loading?(o(),d(`div`,zt,a(e.$t(`aml.k1amlx030`)),1)):I[n.id]?.error?(o(),d(`div`,Bt,a(e.$t(`aml.k1amlx031`))+`:`+a(I[n.id]?.error),1)):I[n.id]?.report?(o(),d(`div`,Vt,[u(`div`,null,[u(`p`,Ht,a(e.$t(`aml.k1amlx027`)),1),u(`table`,Ut,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx033`)),1),u(`th`,null,a(e.$t(`aml.k1amlx034`)),1),u(`th`,Wt,a(e.$t(`aml.k1amlx035`)),1),u(`th`,Gt,a(e.$t(`aml.k1amlx036`)),1),u(`th`,Kt,a(e.$t(`aml.k1amlx037`)),1),u(`th`,qt,a(e.$t(`aml.k1amlx038`)),1),u(`th`,Jt,a(e.$t(`aml.k1amlx039`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(I[n.id]?.report?.nodeSummaries,e=>(o(),d(`tr`,{key:e.nodeId},[u(`td`,Yt,a(e.nodeId),1),u(`td`,null,[u(`small`,Xt,a(e.role),1)]),u(`td`,Zt,a(ta(e.cleanedRatio)),1),u(`td`,Qt,a(ta(e.missingRatio)),1),u(`td`,$t,a(C(e.mean,3)),1),u(`td`,en,a(C(e.std,3)),1),u(`td`,tn,a(C(e.min,2))+`~`+a(C(e.max,2)),1)]))),128))])])]),u(`div`,null,[u(`p`,nn,a(e.$t(`aml.k1amlx028`)),1),I[n.id]?.report?.lagEstimates.length?(o(),d(`table`,rn,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx040`)),1),u(`th`,null,a(e.$t(`aml.k1amlx041`)),1),u(`th`,an,a(e.$t(`aml.k1amlx042`)),1),u(`th`,on,a(e.$t(`aml.k1amlx043`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(I[n.id]?.report?.lagEstimates,e=>(o(),d(`tr`,{key:`${e.controlId}->${e.targetId}`},[u(`td`,sn,a(e.controlId),1),u(`td`,cn,a(e.targetId),1),u(`td`,ln,a(e.lagSteps),1),u(`td`,un,a(C(e.corr,3)),1)]))),128))])])):(o(),d(`p`,dn,a(e.$t(`aml.k1amlx032`)),1)),u(`p`,fn,a(e.$t(`aml.k1amlx029`)),1),u(`p`,pn,[g(a(e.$t(`aml.k1amlx044`))+` `,1),u(`b`,null,a(I[n.id]?.report?.runsUsed.length??0),1),g(` · `+a(e.$t(`aml.k1amlx045`))+` `,1),u(`b`,null,a(I[n.id]?.report?.runsDropped.length??0),1),g(` · `+a(e.$t(`aml.k1amlx046`))+` `,1),u(`b`,null,a(I[n.id]?.report?.windowCount.train)+`/`+a(I[n.id]?.report?.windowCount.val)+`/`+a(I[n.id]?.report?.windowCount.test),1)]),(o(!0),d(f,null,c(I[n.id]?.report?.runsDropped,e=>(o(),d(`p`,{key:e.runId,class:`mono drop-line`},` ✗ `+a(w(e.runId))+` — `+a(e.reason),1))),128))])])):(o(),d(`p`,mn,a(e.$t(`aml.k1amlx047`)),1))])])):p(``,!0)],64))),128))])])):(o(),d(`p`,hn,a(e.$t(`aml.k1amlx019`)),1))]),u(`section`,gn,[u(`div`,_n,[u(`h2`,null,[t[38]||=u(`span`,{class:`i-tabler-brain`},null,-1),g(` `+a(e.$t(`aml.k1amlx074`))+` `,1),u(`b`,vn,a(H.value.length),1),H.value.some(e=>T(e.status))?(o(),d(`span`,{key:0,class:`live-dot`,title:e.$t(`aml.k1amlx091`)},null,8,yn)):p(``,!0)]),u(`button`,{class:`mini-btn`,onClick:t[6]||=e=>V()},a(e.$t(`aml.k1amlx017`)),1)]),H.value.length?(o(),d(`table`,bn,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx076`)),1),u(`th`,null,a(e.$t(`aml.k1amlx011`)),1),u(`th`,null,a(e.$t(`aml.k1amlx066`)),1),u(`th`,null,a(e.$t(`aml.k1amlx077`)),1),u(`th`,null,a(e.$t(`aml.k1amlx078`)),1),u(`th`,xn,a(e.$t(`aml.k1amlx079`)),1),u(`th`,null,a(e.$t(`aml.k1amlx020`)),1),u(`th`,Sn,a(e.$t(`aml.k1amlx127`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(H.value,t=>(o(),d(f,{key:t.id},[u(`tr`,{class:s([`row-main`,{open:W.value===t.id}]),onClick:e=>La(t.id)},[u(`td`,wn,a(w(t.id)),1),u(`td`,Tn,a(w(t.datasetId)),1),u(`td`,En,a(t.purpose),1),u(`td`,null,[u(`span`,{class:s([`st-pill`,t.status])},a(ia(t.status)),3)]),u(`td`,Dn,a(t.stage||`--`),1),u(`td`,On,[u(`span`,kn,[u(`i`,{style:n({width:`${Math.max(0,Math.min(100,t.progress))}%`}),class:s({done:t.status===`done`,bad:t.status===`failed`})},null,6)]),u(`span`,An,a(Math.round(t.progress))+`%`,1)]),u(`td`,jn,a(ea(t.createdAt)),1),u(`td`,Mn,[T(t.status)?(o(),d(`button`,{key:0,class:`mini-btn danger`,disabled:Ba.value===t.id,onClick:_(e=>Va(t.id),[`stop`])},a(za.value===t.id?e.$t(`aml.k1amlx094`):Ba.value===t.id?e.$t(`aml.k1amlx093`):e.$t(`aml.k1amlx071`)),9,Nn)):p(``,!0),ra(t.status)?(o(),d(`button`,{key:1,class:`mini-btn`,disabled:Ua.value===t.id,onClick:_(e=>Wa(t.id),[`stop`])},a(Ha.value===t.id?e.$t(`aml.k1amlx096`):e.$t(`aml.k1amlx095`)),9,Pn)):p(``,!0),T(t.status)?p(``,!0):(o(),d(`span`,{key:2,class:`i-tabler-trash edit-i`,title:e.$t(`aml.k1amlx190`),onClick:_(n=>Da(`jobs`,t.id,e.$t(`aml.k1amlx200`)),[`stop`])},null,8,Fn))])],10,Cn),W.value===t.id?(o(),d(`tr`,In,[u(`td`,Ln,[U[t.id]?.loading?(o(),d(`div`,Rn,a(e.$t(`aml.k1amlx030`)),1)):U[t.id]?.error?(o(),d(`div`,zn,a(U[t.id]?.error),1)):(o(),d(`div`,Bn,[u(`div`,null,[u(`p`,Vn,a(e.$t(`aml.k1amlx083`)),1),U[t.id]?.gates?.checks.length?(o(),d(`table`,Hn,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx084`)),1),u(`th`,Un,a(e.$t(`aml.k1amlx085`)),1),u(`th`,Wn,a(e.$t(`aml.k1amlx086`)),1),u(`th`,null,a(e.$t(`aml.k1amlx118`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(U[t.id]?.gates?.checks,t=>(o(),d(`tr`,{key:t.id},[u(`td`,null,[u(`b`,Gn,a(t.id),1),u(`small`,Kn,a(t.name),1)]),u(`td`,qn,a(C(t.value)),1),u(`td`,Jn,a(C(t.threshold)),1),u(`td`,null,[u(`span`,{class:s([`verdict`,t.pass?`pass`:`fail`])},a(t.pass?e.$t(`aml.k1amlx087`):e.$t(`aml.k1amlx088`)),3),u(`small`,Yn,a(t.detail),1)])]))),128))])])):(o(),d(`p`,Xn,a(e.$t(`aml.k1amlx082`)),1)),U[t.id]?.metrics?.oneStepTest?(o(),d(`p`,Zn,[g(a(e.$t(`aml.k1amlx099`))+`: `+a(e.$t(`aml.k1amlx116`))+` `+a(C(U[t.id]?.metrics?.oneStepTest?.nrmse))+` `,1),U[t.id]?.metrics?.rolloutTest?(o(),d(f,{key:0},[g(` · `+a(e.$t(`aml.k1amlx117`))+` `+a(C(U[t.id]?.metrics?.rolloutTest?.nrmse)),1)],64)):p(``,!0)])):p(``,!0),t.error?(o(),d(`p`,Qn,a(e.$t(`aml.k1amlx092`))+`:`+a(t.error),1)):p(``,!0)]),u(`div`,null,[u(`p`,$n,[g(a(e.$t(`aml.k1amlx089`))+` `,1),T(t.status)?(o(),d(`span`,er,a(e.$t(`aml.k1amlx091`)),1)):p(``,!0)]),u(`pre`,tr,a((U[t.id]?.logs??[]).join(`
|
|
4
|
-
`)||e.$t(`aml.k1amlx090`)),1)])]))])])):p(``,!0)],64))),128))])])):(o(),d(`p`,nr,a(e.$t(`aml.k1amlx075`)),1))]),u(`section`,rr,[u(`div`,ir,[u(`h2`,null,[t[39]||=u(`span`,{class:`i-tabler-trophy`},null,-1),g(` `+a(e.$t(`aml.k1amlx109`))+` `,1),u(`b`,ar,a(K.value.length),1)]),u(`div`,or,[m(u(`select`,{"onUpdate:modelValue":t[7]||=e=>G.value=e,class:`inp-sel`,onChange:qa},[u(`option`,sr,a(e.$t(`aml.k1amlx111`)),1),(o(!0),d(f,null,c(j.value,e=>(o(),d(`option`,{key:e.id,value:e.id},a(w(e.id))+` · `+a(w(e.recipeId)),9,cr))),128))],544),[[ne,G.value]]),u(`button`,{class:`mini-btn`,disabled:!G.value,onClick:qa},a(e.$t(`aml.k1amlx017`)),9,lr)])]),K.value.length?(o(),d(`table`,ur,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx113`)),1),u(`th`,null,a(e.$t(`aml.k1amlx020`)),1),u(`th`,null,a(e.$t(`aml.k1amlx114`)),1),u(`th`,null,a(e.$t(`aml.k1amlx115`)),1),u(`th`,{class:`num`,title:e.$t(`aml.k1amlx121`)},a(e.$t(`aml.k1amlx116`)),9,dr),u(`th`,{class:`num`,title:e.$t(`aml.k1amlx122`)},a(e.$t(`aml.k1amlx117`)),9,fr),u(`th`,null,a(e.$t(`aml.k1amlx118`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(K.value,t=>(o(),d(`tr`,{key:t.id,class:s({best:t.id===Ja.value})},[u(`td`,pr,[t.id===Ja.value?(o(),d(`span`,mr,a(e.$t(`aml.k1amlx120`)),1)):p(``,!0),g(` `+a(w(t.id)),1)]),u(`td`,hr,a(ea(t.createdAt)),1),u(`td`,gr,[u(`span`,{class:`note`,title:t.changeNote},a(t.changeNote||`--`),9,_r)]),u(`td`,vr,a(t.parentExperimentId?w(t.parentExperimentId):`--`),1),u(`td`,yr,a(C(t.metrics?.oneStepTest?.nrmse)),1),u(`td`,br,a(C(t.metrics?.rolloutTest?.nrmse)),1),u(`td`,null,[u(`span`,{class:s([`st-pill`,t.status])},a(aa(t.status)),3)])],2))),128))])])):(o(),d(`p`,xr,a(G.value?e.$t(`aml.k1amlx112`):e.$t(`aml.k1amlx110`)),1)),Ka.value?(o(),d(`p`,Sr,a(Ka.value),1)):p(``,!0)]),u(`section`,Cr,[u(`div`,wr,[u(`h2`,null,[t[40]||=u(`span`,{class:`i-tabler-cube-3d-sphere`},null,-1),g(` `+a(e.$t(`aml.k1amlx123`))+` `,1),u(`b`,Tr,a(q.value.length),1)]),u(`button`,{class:`mini-btn`,onClick:t[8]||=e=>J()},a(e.$t(`aml.k1amlx017`)),1)]),q.value.length?(o(),d(`table`,Er,[u(`thead`,null,[u(`tr`,null,[u(`th`,null,a(e.$t(`aml.k1amlx125`)),1),u(`th`,null,a(e.$t(`aml.k1amlx021`)),1),u(`th`,null,a(e.$t(`aml.k1amlx022`)),1),u(`th`,null,a(e.$t(`aml.k1amlx078`)),1),u(`th`,{title:e.$t(`aml.k1amlx126`)},a(e.$t(`aml.k1amlx099`)),9,Dr),u(`th`,null,a(e.$t(`aml.k1amlx020`)),1),u(`th`,null,a(e.$t(`aml.k1amlx026`)),1),u(`th`,Or,a(e.$t(`aml.k1amlx127`)),1)])]),u(`tbody`,null,[(o(!0),d(f,null,c(q.value,n=>(o(),d(`tr`,{key:n.id},[u(`td`,kr,a(w(n.id)),1),u(`td`,Ar,a(w(n.productId)),1),u(`td`,jr,a(w(n.recipeId)),1),u(`td`,null,[u(`span`,{class:s([`stage-pill`,n.stage])},a(n.stage),3)]),u(`td`,Mr,a(e.$t(`aml.k1amlx116`))+` `+a(C(n.metrics?.oneStepTest?.nrmse))+` · `+a(e.$t(`aml.k1amlx117`))+` `+a(C(n.metrics?.rolloutTest?.nrmse)),1),u(`td`,Nr,a(ea(n.createdAt)),1),u(`td`,{class:`note-cell`,onClick:t[10]||=_(()=>{},[`stop`])},[wa.value===n.id?(o(),d(`div`,Pr,[m(u(`input`,{"onUpdate:modelValue":t[9]||=e=>P.value=e,placeholder:e.$t(`aml.k1amlx189`),onKeyup:[re(e=>Ea(`models`,n.id),[`enter`]),re(F,[`esc`])]},null,40,Fr),[[v,P.value]]),u(`button`,{class:`mini-btn`,onClick:e=>Ea(`models`,n.id)},a(e.$t(`aml.k1amlx191`)),9,Ir),u(`button`,{class:`mini-btn`,onClick:F},a(e.$t(`aml.k1amlx202`)),1)])):(o(),d(`span`,Lr,[u(`span`,{class:`note`,title:n.note},a(n.note||`--`),9,Rr),u(`span`,{class:`i-tabler-pencil edit-i`,title:e.$t(`aml.k1amlx189`),onClick:e=>Ta(n.id,n.note)},null,8,zr)]))]),u(`td`,Br,[(o(!0),d(f,null,c(Za(n),t=>(o(),d(`button`,{key:t.to,class:s([`mini-btn`,{danger:t.to===`retired`}]),disabled:Xa.value===`${n.id}:${t.to}`,onClick:e=>Qa(n,t.to)},a(Ya.value===`${n.id}:${t.to}`?e.$t(`aml.k1amlx131`):e.$t(t.key)),11,Vr))),128)),Za(n).length===0?(o(),d(`span`,Hr,`--`)):p(``,!0),u(`span`,{class:`i-tabler-trash edit-i`,title:e.$t(`aml.k1amlx190`),onClick:t=>Da(`models`,n.id,e.$t(`aml.k1amlx199`))},null,8,Ur)])]))),128))])])):(o(),d(`p`,Wr,a(e.$t(`aml.k1amlx124`)),1))]),u(`section`,Gr,[u(`div`,Kr,[u(`h2`,null,[t[41]||=u(`span`,{class:`i-tabler-chart-line`},null,-1),g(` `+a(e.$t(`aml.k1amlx133`)),1)]),$a.value.length?m((o(),d(`select`,{key:0,"onUpdate:modelValue":t[11]||=e=>eo.value=e,class:`inp-sel`},[u(`option`,qr,a(e.$t(`aml.k1amlx134`)),1),(o(!0),d(f,null,c($a.value,e=>(o(),d(`option`,{key:e.id,value:e.id},a(w(e.id))+` · `+a(w(e.recipeId)),9,Jr))),128))],512)),[[ne,eo.value]]):p(``,!0)]),$a.value.length?(o(),d(f,{key:0},[Y.value?.ioSpec?(o(),d(`div`,Yr,[u(`p`,Xr,a(e.$t(`aml.k1amlx136`)),1),u(`div`,Zr,[u(`span`,Qr,[g(a(e.$t(`aml.k1amlx140`))+` `,1),u(`b`,null,a(Y.value.ioSpec.historySteps),1)]),u(`span`,$r,[g(a(e.$t(`aml.k1amlx141`))+` `,1),u(`b`,null,a(Y.value.ioSpec.horizonSteps),1)]),u(`span`,ei,[g(a(e.$t(`aml.k1amlx142`))+` `,1),u(`b`,null,a(Y.value.ioSpec.beatMs)+`ms`,1)]),u(`span`,{class:`io-item`,title:Y.value.ioSpec.allNodes.join(`, `)},[g(a(e.$t(`aml.k1amlx137`))+`(`+a(Y.value.ioSpec.allNodes.length)+`) `,1),u(`b`,null,a(Y.value.ioSpec.allNodes.map(e=>w(e)).join(`, `)),1)],8,ti),u(`span`,{class:`io-item`,title:Y.value.ioSpec.controlNodes.join(`, `)},[g(a(e.$t(`aml.k1amlx138`))+` `,1),u(`b`,null,a(Y.value.ioSpec.controlNodes.map(e=>w(e)).join(`, `)),1)],8,ni),u(`span`,{class:`io-item`,title:Y.value.ioSpec.targetNodes.join(`, `)},[g(a(e.$t(`aml.k1amlx139`))+` `,1),u(`b`,null,a(Y.value.ioSpec.targetNodes.map(e=>w(e)).join(`, `)),1)],8,ri)]),u(`div`,ii,[u(`label`,ai,[u(`span`,null,a(e.$t(`aml.k1amlx143`)),1),m(u(`textarea`,{"onUpdate:modelValue":t[12]||=e=>to.value=e,class:`inp area`,rows:`5`,placeholder:e.$t(`aml.k1amlx144`)},null,8,oi),[[v,to.value]])]),u(`div`,si,[u(`button`,{class:`ghost-btn`,onClick:ro},[t[42]||=u(`span`,{class:`i-tabler-download`},null,-1),g(` `+a(e.$t(`aml.k1amlx145`)),1)]),u(`label`,ci,[u(`span`,null,a(e.$t(`aml.k1amlx156`)),1),m(u(`textarea`,{"onUpdate:modelValue":t[13]||=e=>X.value=e,class:`inp area`,rows:`3`,placeholder:`[[…]]`},null,512),[[v,X.value]])]),u(`label`,li,[u(`span`,null,a(e.$t(`aml.k1amlx147`)),1),m(u(`input`,{"onUpdate:modelValue":t[14]||=e=>Z.value=e,type:`number`,min:`1`,class:`inp`},null,512),[[v,Z.value,void 0,{number:!0}]])]),u(`button`,{class:`pill-btn`,disabled:no.value||!to.value.trim(),onClick:ao},a(no.value?e.$t(`aml.k1amlx149`):e.$t(`aml.k1amlx148`)),9,ui)])]),u(`p`,di,a(e.$t(`aml.k1amlx146`)),1),Q.value?(o(),d(`p`,fi,a(Q.value),1)):p(``,!0),$.value?(o(),d(f,{key:1},[u(`p`,pi,a(e.$t(`aml.k1amlx150`)),1),u(`table`,mi,[u(`thead`,null,[u(`tr`,null,[u(`th`,hi,a(e.$t(`aml.k1amlx151`)),1),u(`th`,gi,a(e.$t(`aml.k1amlx152`)),1),(o(!0),d(f,null,c($.value.targetNodes,(t,n)=>(o(),d(`th`,{key:t,class:`num`},[g(a(w(t)),1),n===0?(o(),d(`small`,_i,` (`+a(e.$t(`aml.k1amlx041`))+`)`,1)):p(``,!0)]))),128))])]),u(`tbody`,null,[(o(!0),d(f,null,c($.value.forecast,(e,t)=>(o(),d(`tr`,{key:t},[u(`td`,vi,a(t+1),1),u(`td`,yi,a(C((t+1)*$.value.beatMs/1e3,1)),1),(o(!0),d(f,null,c(e,(e,t)=>(o(),d(`td`,{key:t,class:`mono num`},a(C(e,3)),1))),128))]))),128))])]),u(`p`,bi,a(e.$t(`aml.k1amlx155`))+`:`+a($.value.assumptions),1)],64)):p(``,!0)])):(o(),d(`p`,xi,a(e.$t(`aml.k1amlx134`)),1))],64)):(o(),d(`p`,Si,a(e.$t(`aml.k1amlx135`)),1))]),L.value?(o(),d(`div`,{key:4,class:`modal-mask`,onClick:t[27]||=_(e=>L.value=!1,[`self`])},[u(`div`,Ci,[u(`h3`,wi,a(e.$t(`aml.k1amlx050`)),1),u(`div`,Ti,[u(`label`,Ei,[u(`span`,null,[g(a(e.$t(`aml.k1amlx051`)),1),t[43]||=u(`em`,null,`*`,-1)]),m(u(`input`,{"onUpdate:modelValue":t[15]||=e=>z.lineId=e,class:`inp`,placeholder:`line-ov-01`},null,512),[[v,z.lineId]])]),u(`label`,Di,[u(`span`,null,[g(a(e.$t(`aml.k1amlx052`)),1),t[44]||=u(`em`,null,`*`,-1)]),m(u(`input`,{"onUpdate:modelValue":t[16]||=e=>z.productId=e,class:`inp`},null,512),[[v,z.productId]])]),u(`label`,Oi,[u(`span`,null,[g(a(e.$t(`aml.k1amlx053`)),1),t[45]||=u(`em`,null,`*`,-1)]),m(u(`input`,{"onUpdate:modelValue":t[17]||=e=>z.recipeId=e,class:`inp`},null,512),[[v,z.recipeId]])])]),u(`p`,ki,a(e.$t(`aml.k1amlx054`)),1),u(`div`,Ai,[(o(!0),d(f,null,c(B,(t,n)=>(o(),d(`div`,{key:n,class:`node-row`},[m(u(`input`,{"onUpdate:modelValue":e=>t.nodeId=e,class:`inp grow`,placeholder:e.$t(`aml.k1amlx056`)},null,8,ji),[[v,t.nodeId]]),m(u(`select`,{"onUpdate:modelValue":e=>t.role=e,class:`inp sel`},[u(`option`,Ni,a(e.$t(`aml.k1amlx057`)),1),u(`option`,Pi,a(e.$t(`aml.k1amlx058`)),1),u(`option`,Fi,a(e.$t(`aml.k1amlx059`)),1)],8,Mi),[[ne,t.role]]),u(`button`,{class:`mini-btn danger`,disabled:B.length<=1,onClick:e=>Na(n)},` ✕ `,8,Ii)]))),128)),u(`button`,{class:`mini-btn`,onClick:Ma},[t[46]||=u(`span`,{class:`i-tabler-plus`},null,-1),g(` `+a(e.$t(`aml.k1amlx055`)),1)])]),u(`div`,Li,[u(`label`,Ri,[u(`span`,null,a(e.$t(`aml.k1amlx060`)),1),m(u(`input`,{"onUpdate:modelValue":t[18]||=e=>z.beatMs=e,type:`number`,min:`1000`,step:`500`,class:`inp`},null,512),[[v,z.beatMs,void 0,{number:!0}]])]),u(`label`,zi,[u(`span`,null,a(e.$t(`aml.k1amlx061`)),1),m(u(`input`,{"onUpdate:modelValue":t[19]||=e=>z.historySteps=e,type:`number`,min:`1`,class:`inp`},null,512),[[v,z.historySteps,void 0,{number:!0}]])]),u(`label`,Bi,[u(`span`,null,a(e.$t(`aml.k1amlx062`)),1),m(u(`input`,{"onUpdate:modelValue":t[20]||=e=>z.horizonSteps=e,type:`number`,min:`1`,class:`inp`},null,512),[[v,z.horizonSteps,void 0,{number:!0}]])]),u(`label`,Vi,[u(`span`,null,a(e.$t(`aml.k1amlx063`)),1),m(u(`input`,{"onUpdate:modelValue":t[21]||=e=>z.valRatio=e,type:`number`,min:`0`,max:`0.8`,step:`0.05`,class:`inp`},null,512),[[v,z.valRatio,void 0,{number:!0}]])]),u(`label`,Hi,[u(`span`,null,a(e.$t(`aml.k1amlx064`)),1),m(u(`input`,{"onUpdate:modelValue":t[22]||=e=>z.testRatio=e,type:`number`,min:`0`,max:`0.8`,step:`0.05`,class:`inp`},null,512),[[v,z.testRatio,void 0,{number:!0}]])]),u(`label`,Ui,[u(`span`,null,a(e.$t(`aml.k1amlx065`)),1),m(u(`input`,{"onUpdate:modelValue":t[23]||=e=>z.seed=e,type:`number`,class:`inp`},null,512),[[v,z.seed,void 0,{number:!0}]])]),u(`label`,Wi,[u(`span`,null,a(e.$t(`aml.k1amlx066`)),1),m(u(`select`,{"onUpdate:modelValue":t[24]||=e=>z.purpose=e,class:`inp`},[u(`option`,Gi,a(e.$t(`aml.k1amlx067`)),1),u(`option`,Ki,a(e.$t(`aml.k1amlx068`)),1)],512),[[ne,z.purpose]])]),u(`label`,qi,[u(`span`,null,a(e.$t(`aml.k1amlx026`)),1),m(u(`input`,{"onUpdate:modelValue":t[25]||=e=>z.note=e,class:`inp`,placeholder:e.$t(`aml.k1amlx069`)},null,8,Ji),[[v,z.note]])])]),R.value?(o(),d(`p`,Yi,a(R.value),1)):p(``,!0),u(`div`,Xi,[u(`button`,{class:`ghost-btn`,onClick:t[26]||=e=>L.value=!1},a(e.$t(`aml.k1amlx071`)),1),u(`button`,{class:`pill-btn`,disabled:Aa.value,onClick:Pa},a(Aa.value?e.$t(`aml.k1amlx070`):e.$t(`aml.k1amlx072`)),9,Zi)])])])):p(``,!0)]))}}),[[`__scopeId`,`data-v-e7c763e8`]]);export{Qi as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./BU83-NnX.js";import{w as t}from"./DdD9mCHM.js";import{$ as n,Ht as r,R as i,S as a,Ut as o,V as s,Vt as c,W as l,b as u,ct as ee,d,dt as te,f,h as p,i as m,m as h,nt as g,p as _,pt as v,tt as y,xt as b,y as x}from"./CSkxz2NX.js";import{d as S,f as C,l as ne,u as w}from"./D6uzXueg.js";import{n as re,t as ie}from"./BzHEilTt.js";import{n as ae}from"./KZQX7xoM.js";import{t as oe}from"./aWWIh8YL.js";import{t as se}from"./DBHNsT1Y.js";import{t as ce}from"./DzbFpZRk.js";import{t as le}from"./BYhEUx8t.js";import{t as ue}from"./CYWVXZTS.js";import{n as de,r as fe,t as pe}from"./DHFrCUxA2.js";import{t as me}from"./DZtm4l-P2.js";import{t as he}from"./CClOy-Hz2.js";import{t as ge}from"./DIaZ2PTo2.js";import{t as _e}from"./DeyBFhKH2.js";import{t as T}from"./BDNMzG2s2.js";import{t as E}from"./D0ZBQrN_2.js";import{t as ve}from"./BN6iuJEg2.js";import{t as ye}from"./zq5t1vyX.js";var be={class:`settings-page`},xe={class:`aw-page-head`},Se={class:`aw-kicker`},Ce={class:`aw-stamp`},we={class:`settings-layout`},Te={class:`settings-nav`},Ee=[`onClick`],De={class:`settings-body`},Oe={class:`section-title`},ke={class:`section-desc`},Ae={class:`set-row`},je={class:`set-text`},Me={class:`set-title`},Ne={class:`set-sub`},Pe={class:`color-swatches`},Fe=[`title`,`onClick`],Ie={class:`swatch-label`},Le={key:0,class:`i-tabler-check swatch-check`},Re={class:`toggle-row`},ze={class:`set-text`},Be={class:`set-title`},Ve={class:`set-sub`},He=[`aria-checked`],Ue={class:`toggle-row`},We={class:`set-text`},Ge={class:`set-title`},Ke={class:`set-sub`},qe={class:`section-title`},Je={class:`section-desc`},Ye={class:`rt-groups-bar`},Xe=[`title`],Ze={class:`rt-groups-count`},Qe={key:1,class:`rt-group-form`},$e=[`disabled`],et=[`role`,`tabindex`,`onClick`,`onKeydown`],tt=[`onKeydown`],nt=[`onClick`],rt={key:3,class:`rt-group-title`},it={class:`rt-group-badge`},at={class:`rt-group-fields`},ot={key:4,class:`rt-group-desc`},st=[`disabled`,`title`,`onClick`],ct=[`disabled`,`title`,`onClick`],lt=[`disabled`,`title`,`onClick`],ut=[`disabled`,`title`,`onClick`],dt=[`disabled`,`title`,`onClick`],ft={class:`rt-group-body`},pt={key:0,class:`rt-group-empty`},mt={class:`rt-main`},ht={class:`rt-title`},gt={class:`rt-sub`},_t={class:`rt-ctrl`},vt={key:3,class:`rt-color`},yt=[`value`,`onInput`],bt=[`title`,`onClick`],xt={class:`rt-actions`},St=[`disabled`],Ct={class:`rt-path aw-mono`},wt={class:`rt-group-title plugin-group-title`},Tt={class:`section-desc`},Et={key:2,class:`identity-note`},Dt={class:`plugin-main`},Ot={class:`rt-title`},kt={class:`aw-mono`},At={key:0,class:`rt-tag`},jt={key:1,class:`rt-tag src-runtime`},Mt={key:2,class:`rt-tag restart`},Nt={class:`rt-sub`},Pt={class:`rt-ctrl`},Ft={key:0,class:`plugin-health faint`},It=[`onClick`],Lt=[`aria-checked`,`disabled`,`onClick`],Rt={key:0,class:`identity-note`},zt={class:`section-title`},Bt={class:`section-desc`},Vt={class:`aw-mono`},Ht={class:`identity-note`},Ut=`aw.settings.groups.collapsed`,Wt=T(a({__name:`settings`,setup(a){let{t:T,locale:Wt,locales:Gt,setLocale:Kt}=ae(),D=re(),O=ie(),qt=t().public,k=ge(),A=ve(),j=v(`appearance`),M=_e(),N=v({}),P=v(new Set),F=v(!1),I=v(null);function L(){N.value={...M.effective},P.value=new Set}n(()=>M.loaded,e=>{e&&L()},{immediate:!0}),n(()=>M.effective,()=>{P.value.size===0&&L()},{deep:!0});function R(e){P.value.add(e),I.value=null}async function Jt(){if(P.value.size){F.value=!0,I.value=null;try{let e={};for(let t of P.value)e[t]=N.value[t];let t=await M.patch(e);L();let n=t.restartRequired??[];I.value=n.length?{type:`warning`,text:T(`settings.runtime.restartNotice`,{keys:n.join(`, `)})}:{type:`success`,text:T(`settings.runtime.savedLive`)}}catch(e){I.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}finally{F.value=!1}}}async function Yt(e){try{await M.patch({[e]:null}),P.value.delete(e),N.value[e]=M.effective[e],I.value={type:`success`,text:T(`settings.runtime.keyReset`,{key:e})}}catch(e){I.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}}async function Xt(){try{await M.resetAll(),L(),I.value={type:`success`,text:T(`settings.runtime.resetAllDone`)}}catch(e){I.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}}let Zt={server:`settings.runtime.groupServer`,app:`settings.runtime.groupApp`,api:`settings.runtime.groupApi`,theme:`settings.runtime.groupTheme`,i18n:`settings.runtime.groupI18n`,security:`settings.runtime.groupSecurity`,daq:`settings.runtime.groupDaq`,memory:`settings.runtime.groupMemory`,omp:`settings.runtime.groupOmp`,harness:`settings.runtime.groupHarness`,dcw:`settings.runtime.groupDcw`,workshop:`settings.runtime.groupWorkshop`,backup:`settings.runtime.groupBackup`,retention:`settings.runtime.groupRetention`,log:`settings.runtime.groupLog`,plugins:`settings.runtime.groupPlugins`};function Qt(e){if(e.labelKey&&T(e.labelKey)!==e.labelKey)return T(e.labelKey);if(e.label&&e.label!==e.id)return e.label;let t=Zt[e.id];return t?T(t):e.label||e.id}function $t(e){return e.source===`plugin`?e.plugin?`${T(`settings.groups.srcPlugin`)}: ${e.plugin}`:T(`settings.groups.srcPlugin`):e.source===`user`?T(`settings.groups.srcUser`):T(`settings.groups.srcBuiltin`)}function en(e){return e===`runtime`?`src-runtime`:e===`env`?`src-env`:`src-yaml`}function tn(e){let t=e.labelKey;return t&&T(t)!==t?T(t):e.label}let z=v({});function nn(){try{z.value=JSON.parse(localStorage.getItem(Ut)??`{}`)??{}}catch{z.value={}}}function rn(){try{localStorage.setItem(Ut,JSON.stringify(z.value))}catch{}}function B(e){let t=z.value[e.id];return t===void 0?e.collapsed:t}function V(e){e.collapsible&&(z.value={...z.value,[e.id]:!B(e)},rn())}function an(){let e=M.groups.filter(e=>e.collapsible),t=e.some(e=>!B(e)),n={...z.value};for(let r of e)n[r.id]=t;z.value=n,rn()}let on=d(()=>M.groups.filter(e=>e.collapsible).some(e=>!B(e))),H=d(()=>k.isAdmin),U=v(!1),W=te({label:``,description:``,collapsed:!1}),G=v(``),K=v(``),q=v(``);async function sn(){if(W.label.trim()){G.value=`create`;try{await M.createGroup({label:W.label.trim(),description:W.description.trim(),collapsed:W.collapsed}),U.value=!1,W.label=``,W.description=``,W.collapsed=!1,e.success(T(`settings.groups.created`))}catch(t){e.error(E(t,T(`settings.groups.createFail`)))}finally{G.value=``}}}function cn(e){K.value=e.id,q.value=e.label}async function ln(t){let n=q.value.trim();if(K.value=``,n){G.value=t;try{await M.updateGroup(t,{label:n}),e.success(T(`settings.groups.renamed`))}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}}async function un(t,n){let r=[...M.groups],i=r.findIndex(e=>e.id===t),a=i+n;if(i<0||a<0||a>=r.length)return;let o=r[i],s=r[a];G.value=t;try{let e=[...r];e.splice(i,1),e.splice(a,0,o);let t=(a+1)*10,n=(i+1)*10;await M.updateGroup(o.id,{order:t}),await M.updateGroup(s.id,{order:n})}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}async function dn(t){G.value=t.id;try{await M.updateGroup(t.id,{collapsed:!t.collapsed})}catch(t){e.error(E(t,T(`settings.groups.updateFail`)))}finally{G.value=``}}async function fn(t){let n=t.fieldCount??0;if(n>0){e.warning(T(`settings.groups.deleteHasFields`,{p0:Qt(t),p1:n}));return}G.value=t.id;try{await M.deleteGroup(t.id),e.success(T(`settings.groups.deleted`))}catch(t){e.error(E(t,T(`settings.groups.deleteFail`)))}finally{G.value=``}}let J=v([]),Y=v(!1),pn=v(!1),X=v(new Set),Z=v({}),mn=e=>(e.routes??[]).some(e=>String(e.path||``).endsWith(`/health`));async function hn(){Y.value=!0;try{let e=await A.listPlugins(),t=e?.plugins??e?.data?.plugins??[];J.value=Array.isArray(t)?t:[],pn.value=!0}catch(t){e.error(E(t,T(`plugins.loadFail`)))}finally{Y.value=!1}}async function gn(t,n){if(!X.value.has(t.name)){X.value.add(t.name);try{n?await A.enablePlugin(t.name):await A.disablePlugin(t.name),t.enabled=n,e.success(T(n?`plugins.enabled`:`plugins.disabled`))}catch(t){e.error(E(t,T(`plugins.adminRequired`)))}finally{X.value.delete(t.name)}}}async function _n(e){if(mn(e)){Z.value={...Z.value,[e.name]:`checking`};try{let t=await A.pluginHealth(e.name);Z.value={...Z.value,[e.name]:vn(e.name,t)}}catch(t){Z.value={...Z.value,[e.name]:{ok:!1,reason:E(t,T(`plugins.loadFail`))}}}}}function vn(e,t){if(e===`rag-bridge`){let e=t.backend,n=t.web,r=!!e?.ok&&!!n?.ok,i=e?.ok?n?.error||n?.status||`web`:e?.error||e?.status||`backend`;return r?{ok:!0}:{ok:!1,reason:i}}if(e===`diag-bridge`){let e=t.remote;return e?.status===`ok`?{ok:!0}:{ok:!1,reason:e?.status||`remote`}}return{ok:!0}}function yn(e){return Z.value[e]===`checking`}function Q(e){let t=Z.value[e];return t&&t!==`checking`?t:null}function bn(e){return X.value.has(e)}n(j,e=>{e===`runtime`&&!pn.value&&!Y.value&&k.isLoggedIn&&hn()},{immediate:!0}),i(nn);let $=String(qt.primaryColor),xn=[{value:$,label:T(`settings.accentInk`)},{value:`#c9963f`,label:T(`settings.accentStone`)},{value:`#44615a`,label:T(`settings.accentMoss`)},{value:`#3f6094`,label:T(`settings.accentSlate`)},{value:`#6b5aa0`,label:T(`settings.accentPlum`)},{value:`#9c5744`,label:T(`settings.accentClay`)}],Sn=d(()=>D.accent??$);function Cn(t){D.setAccent(t===$?null:t),e.success(T(`settings.accentApplied`))}function wn(){D.setAccent(null),e.success(T(`settings.accentReset`))}let Tn=d(()=>Gt.value.map(e=>({label:e.name,value:e.code}))),En=e=>{e!=null&&(localStorage.setItem(`aw.locale`,String(e)),Kt(String(e)),window.location.reload())},Dn=d(()=>[{label:T(`home.fields.name`),value:O.name},{label:T(`home.fields.version`),value:`v${O.version}`},{label:T(`home.fields.mode`),value:O.mode},{label:T(`home.fields.apiBase`),value:`${O.apiBase} (${qt.apiTimeout}ms)`},{label:T(`home.fields.primary`),value:$},{label:`i18n`,value:Wt.value}]),On=d(()=>[{key:`appearance`,icon:`i-tabler-palette`,label:T(`settings.theme`)},{key:`runtime`,icon:`i-tabler-settings`,label:T(`settings.runtimeTab`)},{key:`system`,icon:`i-tabler-server-2`,label:T(`settings.systemTab`)}]);return(e,t)=>{let n=oe,i=ce,a=se,d=ue,te=pe,v=he,re=me,ie=ye,ae=fe,ge=de,_e=le;return s(),p(`div`,be,[f(`div`,xe,[f(`div`,null,[f(`p`,Se,o(b(T)(`menu.system`))+` / settings `,1),f(`h1`,null,o(b(T)(`settings.title`)),1)]),f(`span`,Ce,`v`+o(b(O).version),1)]),u(_e,{bordered:!1,class:`settings-card`},{default:y(()=>[f(`div`,we,[f(`div`,Te,[(s(!0),p(m,null,l(b(On),e=>(s(),p(`button`,{key:e.key,class:c([`nav-item`,{active:b(j)===e.key}]),onClick:t=>j.value=e.key},[f(`span`,{class:c(e.icon)},null,2),f(`span`,null,o(e.label),1)],10,Ee))),128))]),f(`div`,De,[g(f(`div`,null,[f(`h3`,Oe,o(b(T)(`settings.theme`)),1),f(`p`,ke,o(b(T)(`settings.appearanceDesc`)),1),f(`div`,Ae,[f(`div`,je,[f(`div`,Me,o(b(T)(`settings.primaryColor`)),1),f(`div`,Ne,o(b(T)(`settings.accentDesc`)),1)])]),f(`div`,Pe,[(s(),p(m,null,l(xn,e=>f(`button`,{key:e.value,class:c([`swatch`,{on:b(Sn).toLowerCase()===e.value.toLowerCase()}]),style:r({"--sw":e.value}),title:e.label,onClick:t=>Cn(e.value)},[t[10]||=f(`span`,{class:`swatch-dot`},null,-1),f(`span`,Ie,o(e.label),1),b(Sn).toLowerCase()===e.value.toLowerCase()?(s(),p(`span`,Le)):h(``,!0)],14,Fe)),64))]),f(`button`,{class:`aw-pill outline reset-btn`,onClick:wn},[t[11]||=f(`span`,{class:`i-tabler-rotate`},null,-1),x(` `+o(b(T)(`settings.accentResetAction`)),1)]),f(`div`,Re,[f(`div`,ze,[f(`div`,Be,o(b(D).isDark?b(T)(`common.dark`):b(T)(`common.light`)),1),f(`div`,Ve,o(b(T)(`settings.darkDesc`)),1)]),f(`button`,{class:c([`switch`,{on:b(D).isDark}]),role:`switch`,"aria-checked":b(D).isDark,onClick:t[0]||=e=>b(D).toggleDark()},[...t[12]||=[f(`span`,{class:`knob`},null,-1)]],10,He)]),f(`div`,Ue,[f(`div`,We,[f(`div`,Ge,o(b(T)(`header.language`)),1),f(`div`,Ke,o(b(T)(`settings.languageDesc`)),1)]),u(n,{value:b(Wt),options:b(Tn),style:{width:`140px`},onChange:En},null,8,[`value`,`options`])])],512),[[w,b(j)===`appearance`]]),g(f(`div`,null,[f(`h3`,qe,o(b(T)(`settings.runtimeTab`)),1),f(`p`,Je,o(b(T)(`settings.runtime.desc`)),1),b(I)?(s(),_(i,{key:0,type:b(I).type,"show-icon":``,class:`rt-notice`,message:b(I).text},null,8,[`type`,`message`])):h(``,!0),f(`div`,Ye,[f(`button`,{class:`aw-pill outline rt-groups-toggle`,title:b(T)(`settings.groups.toggleAll`),onClick:an},[f(`span`,{class:c(b(on)?`i-tabler-chevrons-up`:`i-tabler-chevrons-down`)},null,2),x(` `+o(b(on)?b(T)(`settings.groups.collapseAll`):b(T)(`settings.groups.expandAll`)),1)],8,Xe),f(`span`,Ze,o(b(T)(`settings.groups.count`,{p0:b(M).groups.length})),1),b(H)?(s(),p(`button`,{key:0,class:`aw-pill outline rt-groups-add`,onClick:t[1]||=e=>U.value=!b(U)},[t[13]||=f(`span`,{class:`i-tabler-plus`},null,-1),x(` `+o(b(T)(`settings.groups.newGroup`)),1)])):h(``,!0)]),b(H)&&b(U)?(s(),p(`div`,Qe,[u(a,{value:b(W).label,"onUpdate:value":t[2]||=e=>b(W).label=e,placeholder:b(T)(`settings.groups.namePlaceholder`),style:{width:`220px`},onPressEnter:sn},null,8,[`value`,`placeholder`]),u(a,{value:b(W).description,"onUpdate:value":t[3]||=e=>b(W).description=e,placeholder:b(T)(`settings.groups.descPlaceholder`),style:{width:`320px`},onPressEnter:sn},null,8,[`value`,`placeholder`]),u(d,{checked:b(W).collapsed,"onUpdate:checked":t[4]||=e=>b(W).collapsed=e},{default:y(()=>[x(o(b(T)(`settings.groups.defaultCollapsed`)),1)]),_:1},8,[`checked`]),f(`button`,{class:`aw-pill primary`,disabled:!b(W).label.trim()||b(G)===`create`,onClick:sn},o(b(G)===`create`?`…`:b(T)(`settings.groups.create`)),9,$e),f(`button`,{class:`aw-pill outline`,onClick:t[5]||=e=>U.value=!1},o(b(T)(`settings.groups.cancel`)),1)])):h(``,!0),(s(!0),p(m,null,l(b(M).groups,e=>(s(),p(`section`,{key:e.id,class:c([`rt-group`,{collapsed:B(e),"grp-plugin":e.source===`plugin`}])},[f(`header`,{class:`rt-group-head`,role:e.collapsible?`button`:void 0,tabindex:e.collapsible?0:void 0,onClick:t=>V(e),onKeydown:[S(C(t=>V(e),[`prevent`]),[`enter`]),S(C(t=>V(e),[`prevent`]),[`space`])]},[e.collapsible?(s(),p(`span`,{key:0,class:c([`rt-caret`,B(e)?`i-tabler-chevron-right`:`i-tabler-chevron-down`])},null,2)):h(``,!0),e.icon?(s(),p(`span`,{key:1,class:c([`rt-group-icon`,e.icon])},null,2)):h(``,!0),b(K)===e.id?(s(),p(m,{key:2},[g(f(`input`,{"onUpdate:modelValue":t[6]||=e=>ee(q)?q.value=e:null,class:`rt-rename aw-mono`,onClick:t[7]||=C(()=>{},[`stop`]),onKeydown:[S(C(t=>ln(e.id),[`prevent`]),[`enter`]),t[8]||=S(C(e=>K.value=``,[`prevent`]),[`esc`])]},null,40,tt),[[ne,b(q)]]),f(`button`,{class:`mini-btn`,onClick:C(t=>ln(e.id),[`stop`])},o(b(T)(`settings.groups.ok`)),9,nt)],64)):(s(),p(`h4`,rt,o(Qt(e)),1)),f(`span`,it,o($t(e)),1),f(`span`,at,o(b(T)(`settings.groups.fields`,{p0:e.fieldCount??0})),1),e.description?(s(),p(`span`,ot,o(e.description),1)):h(``,!0),b(H)&&e.source!==`plugin`?(s(),p(`span`,{key:5,class:`rt-group-ops`,onClick:t[9]||=C(()=>{},[`stop`])},[f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.moveUp`),onClick:t=>un(e.id,-1)},[...t[14]||=[f(`span`,{class:`i-tabler-arrow-up`},null,-1)]],8,st),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.moveDown`),onClick:t=>un(e.id,1)},[...t[15]||=[f(`span`,{class:`i-tabler-arrow-down`},null,-1)]],8,ct),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.rename`),onClick:t=>cn(e)},[...t[16]||=[f(`span`,{class:`i-tabler-pencil`},null,-1)]],8,lt),f(`button`,{class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.defaultCollapsed`),onClick:t=>dn(e)},[f(`span`,{class:c(e.collapsed?`i-tabler-fold`:`i-tabler-unfold`)},null,2)],8,ut),e.source===`user`?(s(),p(`button`,{key:0,class:`mini-btn`,disabled:b(G)===e.id,title:b(T)(`settings.groups.delete`),onClick:t=>fn(e)},[...t[17]||=[f(`span`,{class:`i-tabler-trash`},null,-1)]],8,dt)):h(``,!0)])):h(``,!0)],40,et),g(f(`div`,ft,[e.fieldCount??0?h(``,!0):(s(),p(`p`,pt,o(b(T)(`settings.groups.emptyHint`)),1)),(s(!0),p(m,null,l(b(M).fieldsOf(e.id),e=>(s(),p(`div`,{key:e.key,class:`rt-row`},[f(`div`,mt,[f(`div`,ht,[x(o(tn(e))+` `,1),f(`span`,{class:c([`rt-tag`,en(b(M).sourceOf(e.key))])},o(b(M).sourceOf(e.key)),3),f(`span`,{class:c([`rt-tag`,e.applies])},o(e.applies===`live`?b(T)(`settings.runtime.live`):b(T)(`settings.runtime.restart`)),3)]),f(`div`,gt,o(e.description),1)]),f(`div`,_t,[e.type===`number`?(s(),_(te,{key:0,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,min:e.min,max:e.max,onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`min`,`max`,`onChange`])):e.type===`boolean`?(s(),_(v,{key:1,checked:b(N)[e.key],"onUpdate:checked":t=>b(N)[e.key]=t,onChange:t=>R(e.key)},null,8,[`checked`,`onUpdate:checked`,`onChange`])):e.type===`select`?(s(),_(n,{key:2,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,style:{width:`160px`},options:(e.options??[]).map(e=>({label:e,value:e})),onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`options`,`onChange`])):e.type===`color`?(s(),p(`span`,vt,[f(`input`,{type:`color`,value:String(b(N)[e.key]??`#35e0a0`),onInput:t=>{b(N)[e.key]=t.target.value,R(e.key)}},null,40,yt),u(a,{value:String(b(N)[e.key]??``),style:{width:`110px`},class:`aw-mono`,onChange:t=>{b(N)[e.key]=t.target.value,R(e.key)}},null,8,[`value`,`onChange`])])):(s(),_(a,{key:4,value:b(N)[e.key],"onUpdate:value":t=>b(N)[e.key]=t,style:{width:`220px`},onChange:t=>R(e.key)},null,8,[`value`,`onUpdate:value`,`onChange`])),f(`button`,{class:`aw-pill outline rt-reset`,title:b(T)(`settings.runtime.resetKey`),onClick:t=>Yt(e.key)},[...t[18]||=[f(`span`,{class:`i-tabler-rotate`},null,-1)]],8,bt)])]))),128))],512),[[w,!B(e)]])],2))),128)),f(`div`,xt,[f(`button`,{class:`aw-pill primary`,disabled:!b(P).size||b(F),onClick:Jt},[t[19]||=f(`span`,{class:`i-tabler-device-floppy`},null,-1),x(` `+o(b(F)?`…`:b(T)(`settings.runtime.save`)),1)],8,St),f(`button`,{class:`aw-pill outline`,onClick:Xt},o(b(T)(`settings.runtime.resetAll`)),1),f(`span`,Ct,o(b(M).settingsPath),1)]),f(`h4`,wt,o(b(T)(`plugins.title`)),1),f(`p`,Tt,o(b(T)(`plugins.desc`)),1),b(k).isLoggedIn?(s(),_(re,{key:3,spinning:b(Y)},{default:y(()=>[(s(!0),p(m,null,l(b(J),e=>(s(),p(`div`,{key:e.name,class:c([`plugin-row`,{off:e.enabled===!1}])},[f(`div`,Dt,[f(`div`,Ot,[f(`span`,kt,o(e.name),1),e.version?(s(),p(`span`,At,`v`+o(e.version),1)):h(``,!0),e.builtin?(s(),p(`span`,jt,o(b(T)(`plugins.builtin`)),1)):h(``,!0),e.error?(s(),p(`span`,Mt,o(e.error),1)):h(``,!0)]),f(`div`,Nt,o(e.description||`—`),1)]),f(`div`,Pt,[yn(e.name)?(s(),p(`span`,Ft,[t[20]||=f(`span`,{class:`i-tabler-loader-2 spin`},null,-1),x(` `+o(b(T)(`plugins.healthChecking`)),1)])):Q(e.name)?(s(),p(`span`,{key:1,class:c([`plugin-health`,Q(e.name).ok?`ok`:`bad`])},[f(`span`,{class:c(Q(e.name).ok?`i-tabler-circle-check`:`i-tabler-alert-circle`)},null,2),x(` `+o(Q(e.name).ok?b(T)(`plugins.healthOk`):`${b(T)(`plugins.healthBad`)}: ${Q(e.name).reason??``}`),1)],2)):h(``,!0),mn(e)?(s(),p(`button`,{key:2,class:`aw-pill outline rt-reset`,onClick:t=>_n(e)},[t[21]||=f(`span`,{class:`i-tabler-heartbeat`},null,-1),x(` `+o(b(T)(`plugins.healthCheck`)),1)],8,It)):h(``,!0),f(`button`,{class:c([`switch`,{on:e.enabled!==!1}]),role:`switch`,"aria-checked":e.enabled!==!1,disabled:bn(e.name),onClick:t=>gn(e,e.enabled===!1)},[...t[22]||=[f(`span`,{class:`knob`},null,-1)]],10,Lt)])],2))),128)),b(J).length===0&&!b(Y)?(s(),p(`div`,Rt,o(b(T)(`plugins.empty`)),1)):h(``,!0)]),_:1},8,[`spinning`])):(s(),p(`div`,Et,o(b(T)(`plugins.needLogin`)),1)),b(J).length?(s(),_(ie,{key:4,"slot-name":`settings.plugins`})):h(``,!0)],512),[[w,b(j)===`runtime`]]),g(f(`div`,null,[f(`h3`,zt,o(b(T)(`settings.systemTab`)),1),f(`p`,Bt,o(b(T)(`settings.systemDesc`)),1),u(ge,{bordered:``,column:1,size:`small`},{default:y(()=>[(s(!0),p(m,null,l(b(Dn),e=>(s(),_(ae,{key:e.label,label:e.label},{default:y(()=>[f(`span`,Vt,o(e.value),1)]),_:2},1032,[`label`]))),128))]),_:1}),f(`p`,Ht,o(b(k).isLoggedIn?`${b(T)(`settings.identity`)}: ${b(k).user?.name} (${b(k).user?.role})`:b(T)(`settings.identityGuest`)),1)],512),[[w,b(j)===`system`]])])])]),_:1})])}}}),[[`__scopeId`,`data-v-f677a83e`]]);export{Wt as default};
|
|
@@ -1 +0,0 @@
|
|
|
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>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 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,n}from"./BU83-NnX.js";import{S as r,Ut as i,V as a,Vt as ee,W as o,b as s,ct as c,d as l,dt as te,f as u,h as d,i as f,m as p,p as m,pt as h,tt as g,xt as _,y as v}from"./CSkxz2NX.js";import{d as ne}from"./BJHKLJJU.js";import{n as y}from"./DtYHUi5Z.js";import{n as 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{t as se}from"./DBHNsT1Y.js";import{i as ce,n as le,t as ue}from"./BCGafdXT.js";import{r as de,t as fe}from"./CzlMDL5H.js";import{t as pe}from"./jZsY8yYz.js";import{n as me,t as he}from"./CYWVXZTS.js";import{t as ge}from"./C4DWUZ6d2.js";import{t as _e}from"./DZtm4l-P2.js";import{t as ve}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 ye}from"./BN6iuJEg2.js";import{t as be}from"./CNs_Ozdc2.js";var xe={class:`page`},Se={class:`head`},Ce={class:`sub`},we={class:`toolbar`},Te={key:0,class:`admin-note`},Ee={class:`grid`},De={class:`card-head`},Oe={class:`name`},ke={class:`owner`},Ae={class:`members`},je={class:`member-name`},Me={class:`member-harness`},Ne=[`onClick`],Pe={class:`aw-mono`},Fe={key:0,class:`plug-builtin-tag`},Ie={class:`plug-hint`},Le={class:`plug-source`},Re={class:`plug-text`},ze={class:`plug-name`},Be={class:`aw-mono`},Ve={key:0,class:`plug-builtin-tag`},He={class:`plug-desc`},Ue={key:0,class:`plug-hint`},w=S(r({__name:`teams`,setup(r){let{t:S}=b();be({layout:`default`});let w=ye(),T=x(),E=h([]),D=h([]),We=h([]),O=h(!1),k=async()=>{O.value=!0;try{let[e,t,n]=await Promise.all([w.listTeams(),w.listTemplates(),w.listChannels()]);E.value=e?.data??[],D.value=t?.data??[],We.value=n?.data??[]}finally{O.value=!1}};k();let A=h({});(async()=>{try{let e=(await w.listHarnesses())?.data?.harnesses;if(Array.isArray(e)){let t={};for(let n of e)t[n.id]=n.available!==!1;A.value=t}}catch{}})();let Ge=e=>A.value[e.harness]===!1,Ke=l(()=>D.value.map(e=>{let t=Ge(e);return{value:e.id,label:t?`${e.name}(${e.harness} · ${e(`agents.notInstalled`)})`:`${e.name}(${e.harness})`,disabled:t}})),j=h(`all`),qe=l(()=>{let e=T.user?.id;switch(j.value){case`mine`:return E.value.filter(t=>t.ownerUserId===e);case`public`:return E.value.filter(e=>e.visibility===`public`);case`builtin`:return E.value.filter(e=>e.isBuiltin);default:return E.value}}),M=e=>!e.isBuiltin&&(e.ownerUserId===T.user?.id||T.isAdmin),N=e=>e.isBuiltin?{text:S(`teams.k3x23c018`),color:`default`,icon:`i-tabler-lock`}:e.visibility===`public`?{text:S(`teams.k3wv1t019`),color:`green`}:{text:S(`teams.k447jj020`),color:`default`},P=h(!1),F=te({name:``,description:``,visibility:`private`}),I=h([]),L=h({});(async()=>{try{let e=await w.listPlugins(),t=e?.plugins??e?.data?.plugins??[],n=(Array.isArray(t)?t:[]).filter(e=>e.enabled!==!1);I.value=n;let r={};for(let e of n)r[e.name]=!0;L.value=r}catch{}})();let R=l({get:()=>Object.entries(L.value).filter(([,e])=>e).map(([e])=>e),set:e=>{let t={};for(let n of I.value)t[n.name]=e.includes(n.name);L.value=t}}),Je=async()=>{if(!F.name.trim()){e.warning(S(`teams.k1bvcdo2021`));return}let t=Object.entries(L.value).map(([e,t])=>({name:e,enabled:t}));await w.createTeam({name:F.name.trim(),description:F.description||void 0,visibility:F.visibility,plugins:t}),e.success(S(`teams.k3n5hak022`)),P.value=!1,F.name=``,F.description=``,F.visibility=`private`,L.value=Object.fromEntries(Object.entries(L.value).map(([e])=>[e,!0])),k()},Ye=async(t,n)=>{try{await w.updateTeam(t.id,{visibility:n?`public`:`private`}),e.success(S(n?`teams.k1globhp023`:`teams.k1xxabaf024`)),k()}catch(t){e.error(C(t))}},z=h(!1),B=h(null),V=h(``),H=h(`worker`),Xe=e=>{B.value=e,V.value=``,H.value=`worker`,z.value=!0},Ze=async()=>{if(!B.value||!V.value){e.warning(S(`teams.k1kw4rtj025`));return}try{await w.addTeamMember(B.value.id,{agentId:V.value,role:H.value}),e.success(S(`teams.k3n5hzw026`)),z.value=!1,k()}catch(t){e.error(C(t))}},Qe=async(e,t)=>{await w.removeTeamMember(e.id,t),k()},U=h(!1),W=h(null),G=h(``),K=h(!1),$e=e=>{W.value=e,G.value=``,U.value=!0},et=async()=>{if(!W.value||!G.value){e.warning(`选择目标 Channel`);return}K.value=!0;try{let t=(await w.deployTeam(W.value.id,G.value))?.data?.agents?.length??0;e.success(S(`teams.kh90glh031`,{p0:t})),U.value=!1}catch(t){e.error(C(t))}finally{K.value=!1}},tt=async t=>{await w.deleteTeam(t.id),e.success(S(`teams.k1oxjrxx027`)),k()},q=h(!1),J=h(null),Y=h([]),X=h(`default`),Z=h(!1),Q=h(null),nt=e=>{J.value=e,Y.value=[],X.value=`default`,q.value=!0,$(e)},$=async t=>{Z.value=!0;try{let e=(await w.listTeamPlugins(t.id))?.data??{};Y.value=e.plugins??[],X.value=e.source===`explicit`?`explicit`:`default`}catch(t){e.error(C(t))}finally{Z.value=!1}},rt=async(t,n)=>{if(!J.value||Q.value)return;let r=J.value.id;Q.value=t.name;try{let i=Y.value.map(e=>({name:e.name,enabled:e.name===t.name?n:e.enabled})),a=(await w.putTeamPlugins(r,{plugins:i}))?.data??{};Y.value=a.plugins??i.map(e=>({...e})),X.value=a.source===`explicit`?`explicit`:`default`,e.success(S(`teams.k1plugon043`))}catch(t){e.error(C(t))}finally{Q.value=null}};return y({title:()=>S(`titles.teams`)}),(e,r)=>{let l=t,te=pe,h=ae,y=ue,b=ve,x=de,S=fe,C=ge,ye=_e,be=se,w=ie,D=le,k=ce,A=he,Ge=me,L=re,$=n,it=oe;return a(),d(`div`,xe,[u(`div`,Se,[u(`div`,null,[u(`h2`,null,`AgentTeam `+i(e.$t(`teams.k3svl8y028`)),1),u(`p`,Ce,i(e.$t(`teams.k12gl4wn008`)),1)]),s(te,null,{default:g(()=>[s(l,{onClick:r[0]||=t=>(`navigateTo`in e?e.navigateTo:_(ne))(`/workshop`)},{default:g(()=>[v(i(e.$t(`teams.krpx6qa009`)),1)]),_:1}),s(l,{type:`primary`,onClick:r[1]||=e=>P.value=!0},{default:g(()=>[v(i(e.$t(`teams.k1efmuyx002`)),1)]),_:1})]),_:1})]),u(`div`,we,[s(h,{value:_(j),"onUpdate:value":r[2]||=e=>c(j)?j.value=e:null,size:`small`,options:[{value:`all`,label:e.$t(`chips.chipAll`,{n:_(E).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`]),_(T).isAdmin?(a(),d(`span`,Te,[r[15]||=u(`span`,{class:`i-tabler-shield-check`},null,-1),v(` `+i(e.$t(`teams.k1bpgi8h010`)),1)])):p(``,!0)]),s(ye,{spinning:_(O)},{default:g(()=>[u(`div`,Ee,[(a(!0),d(f,null,o(_(qe),t=>(a(),d(`div`,{key:t.id,class:`card`},[u(`div`,De,[u(`span`,Oe,i(t.name),1),s(y,{color:N(t).color,class:`vis-tag`},{default:g(()=>[N(t).icon?(a(),d(`span`,{key:0,class:ee(N(t).icon)},null,2)):p(``,!0),v(i(N(t).text),1)]),_:2},1032,[`color`]),!t.isBuiltin&&M(t)?(a(),m(b,{key:0,checked:t.visibility===`public`,size:`small`,"checked-children":`公开`,"un-checked-children":`私有`,onChange:e=>Ye(t,e===!0)},null,8,[`checked`,`onChange`])):p(``,!0),u(`span`,ke,i(t.ownerName??`-`),1),M(t)?(a(),m(C,{key:1},{overlay:g(()=>[s(S,null,{default:g(()=>[s(x,{onClick:e=>$e(t)},{default:g(()=>[...r[16]||=[v(` 部署到 Channel… `,-1)]]),_:1},8,[`onClick`]),s(x,{onClick:e=>nt(t)},{default:g(()=>[v(i(e.$t(`teams.k1plugon047`)),1)]),_:1},8,[`onClick`]),s(x,{danger:``,onClick:e=>tt(t)},{default:g(()=>[v(i(e.$t(`teams.k1bpojhf011`)),1)]),_:1},8,[`onClick`])]),_:2},1024)]),default:g(()=>[r[17]||=u(`span`,{class:`i-tabler-dots op`},null,-1)]),_:2},1024)):(a(),m(l,{key:2,size:`small`,type:`text`,title:e.$t(`teams.kxheuf1001`),onClick:e=>$e(t)},{default:g(()=>[v(i(e.$t(`teams.k48ja7012`)),1)]),_:1},8,[`title`,`onClick`]))]),u(`div`,Ae,[(a(!0),d(f,null,o(t.members,e=>(a(),d(`div`,{key:e.templateId,class:`member`},[s(y,{color:e.role===`lead`?`gold`:`blue`,class:`role`},{default:g(()=>[v(i(e.role),1)]),_:2},1032,[`color`]),u(`span`,je,i(e.name),1),u(`span`,Me,i(e.harness),1),M(t)?(a(),d(`span`,{key:0,class:`i-tabler-x rm`,onClick:n=>Qe(t,e.templateId)},null,8,Ne)):p(``,!0)]))),128)),M(t)?(a(),m(l,{key:0,size:`small`,type:`dashed`,block:``,onClick:e=>Xe(t)},{default:g(()=>[v(i(e.$t(`teams.krt2oib013`)),1)]),_:1},8,[`onClick`])):p(``,!0)])]))),128)),_(qe).length===0?(a(),d(`div`,{key:0,class:`card placeholder`,onClick:r[3]||=e=>P.value=!0},[r[18]||=u(`span`,{class:`i-tabler-plus big`},null,-1),u(`span`,null,i(e.$t(`teams.k6cbbgf014`)),1)])):p(``,!0)])]),_:1},8,[`spinning`]),s($,{open:_(P),"onUpdate:open":r[8]||=e=>c(P)?P.value=e:null,title:e.$t(`teams.k1efmuyx002`),"ok-text":`创建`,"cancel-text":`取消`,onOk:Je},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:e.$t(`teams.k3xhia003`)},{default:g(()=>[s(be,{value:_(F).name,"onUpdate:value":r[4]||=e=>_(F).name=e},null,8,[`value`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k40gkk004`)},{default:g(()=>[s(be,{value:_(F).description,"onUpdate:value":r[5]||=e=>_(F).description=e},null,8,[`value`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k3lrqn0005`)},{default:g(()=>[s(k,{value:_(F).visibility,"onUpdate:value":r[6]||=e=>_(F).visibility=e},{default:g(()=>[s(D,{value:`private`},{default:g(()=>[v(i(e.$t(`teams.k17jfge3015`)),1)]),_:1}),s(D,{value:`public`},{default:g(()=>[v(i(e.$t(`teams.k1h2lq0o016`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`]),_(I).length?(a(),m(w,{key:0,label:e.$t(`teams.k1plugon041`)},{default:g(()=>[s(Ge,{value:_(R),"onUpdate:value":r[7]||=e=>c(R)?R.value=e:null,class:`plug-create-group`},{default:g(()=>[(a(!0),d(f,null,o(_(I),t=>(a(),m(A,{key:t.name,value:t.name},{default:g(()=>[u(`span`,Pe,i(t.name),1),t.builtin?(a(),d(`span`,Fe,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),_:2},1032,[`value`]))),128))]),_:1},8,[`value`]),u(`div`,Ie,i(e.$t(`teams.k1plugon042`)),1)]),_:1},8,[`label`])):p(``,!0)]),_:1})]),_:1},8,[`open`,`title`]),s($,{open:_(z),"onUpdate:open":r[11]||=e=>c(z)?z.value=e:null,title:e.$t(`teams.k6ljhyv029`,{p0:_(B)?.name??``}),"ok-text":`加入`,"cancel-text":`取消`,onOk:Ze},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:e.$t(`teams.k41ds5006`)},{default:g(()=>[s(it,{value:_(V),"onUpdate:value":r[9]||=e=>c(V)?V.value=e:null,options:_(Ke)},null,8,[`value`,`options`])]),_:1},8,[`label`]),s(w,{label:e.$t(`teams.k479op007`)},{default:g(()=>[s(k,{value:_(H),"onUpdate:value":r[10]||=e=>c(H)?H.value=e:null},{default:g(()=>[s(D,{value:`worker`},{default:g(()=>[...r[19]||=[v(` worker `,-1)]]),_:1}),s(D,{value:`lead`},{default:g(()=>[v(i(e.$t(`teams.keowzlv017`)),1)]),_:1})]),_:1},8,[`value`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`open`,`title`]),s($,{open:_(U),"onUpdate:open":r[13]||=e=>c(U)?U.value=e:null,title:e.$t(`teams.k1c0o6oe030`,{p0:_(W)?.name??``}),"confirm-loading":_(K),"ok-text":`部署`,"cancel-text":`取消`,onOk:et},{default:g(()=>[s(L,{layout:`vertical`},{default:g(()=>[s(w,{label:`目标 Channel(须无 lead 冲突)`},{default:g(()=>[s(it,{value:_(G),"onUpdate:value":r[12]||=e=>c(G)?G.value=e:null,options:_(We).map(e=>({value:e.id,label:e.name}))},null,8,[`value`,`options`])]),_:1})]),_:1})]),_:1},8,[`open`,`title`,`confirm-loading`]),s($,{open:_(q),"onUpdate:open":r[14]||=e=>c(q)?q.value=e:null,title:e.$t(`teams.k1plugon040`,{p0:_(J)?.name??``}),footer:null},{default:g(()=>[s(ye,{spinning:_(Z)},{default:g(()=>[u(`p`,Le,[_(X)===`explicit`?(a(),d(f,{key:0},[v(i(e.$t(`teams.k1plugon045`)),1)],64)):(a(),d(f,{key:1},[v(i(e.$t(`teams.k1plugon044`)),1)],64))]),(a(!0),d(f,null,o(_(Y),t=>(a(),d(`div`,{key:t.name,class:`plug-row`},[u(`div`,Re,[u(`div`,ze,[u(`span`,Be,i(t.name),1),t.builtin?(a(),d(`span`,Ve,i(e.$t(`teams.k3x23c018`)),1)):p(``,!0)]),u(`div`,He,i(t.description||`—`),1)]),s(b,{checked:t.enabled,size:`small`,loading:_(Q)===t.name,onChange:e=>rt(t,e===!0)},null,8,[`checked`,`loading`,`onChange`])]))),128)),_(Y).length===0&&!_(Z)?(a(),d(`div`,Ue,i(e.$t(`teams.k1plugon046`)),1)):p(``,!0)]),_:1},8,[`spinning`])]),_:1},8,[`open`,`title`])])}}}),[[`__scopeId`,`data-v-7f680c60`]]);export{w as default};
|
|
@@ -1 +0,0 @@
|
|
|
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`;function a(){try{return JSON.parse(localStorage.getItem(i)??`{}`)}catch{return{}}}function o(e){localStorage.setItem(i,JSON.stringify(e))}var s=e(`workshop.workspaces`,{state:()=>({workspaces:[],loaded:!1}),getters:{activeWorkspaceId(e){return localStorage.getItem(`workshop.activeWorkspace`)??e.workspaces[0]?.id??null}},actions:{setActiveWorkspaceId(e){localStorage.setItem(`workshop.activeWorkspace`,e??``)},async load(){let e=await r(`/api/workshop/workspaces`);if(e.code!==0)throw Error(e.message??`加载失败`);let t=a();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}}),o(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=a();e.activeChannelId?t[e.id]=e.activeChannelId:Reflect.deleteProperty(t,e.id),o(t)}}});export{s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.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=n().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=t(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=t(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 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.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([]),s=e({running:!0,defaultIntervalMs:1e3,defaultPublishIntervalMs:0,queryDisplayIntervalMs:5e3,nodesTotal:0,nodesOnline:0}),d=e({tsdb:`…`,queue:`…`,drivers:[],driverAvailable:{},infra:void 0,produced:0,consumed:0,dropped:0,samplesStored:0}),f=e(a.map(e=>({...e}))),p=e({});function m(){i.clear();for(let e of r)i.set(e.id,e)}function h(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 g=[],_=null;function v(){_=null;let e=g;if(g=[],!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 y(e){g.push(e),_||=setTimeout(v,500)}function b(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(p,e.node.id);return}h(e.node)}}function x(e){f.splice(0,f.length,...e.map(e=>({...e})))}function S(e){if(!e.template)return;let t=f.findIndex(t=>t.key===e.template.key);if(e.op===`removed`){t>=0&&f.splice(t,1);return}t>=0?f[t]={...e.template}:f.push({...e.template})}function C(e){let t=Date.parse(e.at),n=p[e.nodeId]??(p[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 w=0,T=null;function E(){w++,w===1&&(T=n().subscribe(D));let e=!1;return()=>{e||(e=!0,--w===0&&(T?.(),T=null))}}function D(e){if(e.type===`daq.reading`)y(e.payload);else if(e.type===`daq.frame`)C(e.payload);else if(e.type===`daq.node.changed`)b(e.payload);else if(e.type===`daq.controller`)Object.assign(s,e.payload);else if(e.type===`daq.template.changed`)S(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 O(){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),m();for(let e of Object.keys(p))i.has(e)||Reflect.deleteProperty(p,e);Object.assign(s,e.controller),Object.assign(d,e.meta??{}),d.driverAvailable=e.driverAvailable??{},d.infra=e.infra,e.templates?.length&&x(e.templates),K.loaded=!0,K.error=``}catch(e){K.error=t(e)}}async function k(e,t){let n=await u(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return h(n.node),n.node}async function A(e,t){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})}async function j(e,t,n){await u(`/${e}`,{method:`PATCH`,body:JSON.stringify({posX:t,posZ:n})})}async function M(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(p,e)}async function N(e,t){h((await u(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)}async function P(e,t){h((await u(`/${e}/bindings`,{method:`PUT`,body:JSON.stringify({deviceIds:t})})).node)}async function F(e,t){return(await u(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})})).test}async function I(e){return(await u(`/${e}/test`,{method:`POST`})).test}async function L(){try{let e=await u(`/alarms?scope=open&limit=50`);o.splice(0,o.length,...e.alarms??[])}catch{}}async function R(e){await u(`/alarms/${e}/ack`,{method:`POST`}),await L()}async function z(){let e=await u(`/infra/reconnect`,{method:`POST`});return d.infra=e.infra,await O(),e.infra}async function B(e,t,n){let r=await u(`/controller`,{method:`POST`,body:JSON.stringify({action:e,defaultIntervalMs:t,defaultPublishIntervalMs:n})});Object.assign(s,r.controller)}async function V(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 H(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 p[e]=r.frames??[],p[e]}async function U(e){let t=await u(`/templates`,{method:`POST`,body:JSON.stringify(e)});return S({op:`added`,template:t.template}),t.template}async function W(e,t){let n=await u(`/templates/${e}`,{method:`PATCH`,body:JSON.stringify(t)});return S({op:`updated`,template:n.template}),n.template}async function G(e){await u(`/templates/${e}`,{method:`DELETE`}),S({op:`removed`,template:{key:e}})}let K=e({nodes:r,controller:s,meta:d,templates:f,loaded:!1,error:``,ensureWsFeed:E,load:O,createFromTemplate:k,createTemplate:U,updateTemplate:W,removeTemplate:G,testDriver:F,testNode:I,reconnectInfra:z,patchNode:A,saveTransform:j,removeNode:M,bindNode:N,setNodeBindings:P,controllerAction:B,alarms:o,fetchAlarms:L,ackAlarm:R,nodeById:e=>i.get(e)??r.find(t=>t.id===e),samplesOf:V,fetchFrames:H,frames:p,framesOf:e=>p[e]??[],templateOf:e=>f.find(t=>t.key===e||`daq-${t.key}`===e),ofDevice:e=>e?r.filter(t=>t.deviceBindingId===e):[]});return K},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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{dt as e}from"./CSkxz2NX.js";import{t}from"./D0ZBQrN_2.js";import{t as n}from"./36oeS8_R2.js";import{t as r}from"./BDmh31hl.js";var i=[{key:`temp-sp`,name:`温度设定器`,code:`TEMP · SP`,ch:`烘箱温度设定`,unit:`℃`,min:150,max:200,decimals:1,icon:`thermo`,semantics:`烘箱/熔体温度设定:升高使热塑温度上升(成膜更均匀但能耗高、过热降解风险),降低则偏冷易厚度不均。调整后需等待热惯性(数十秒级)再评估效果。`},{key:`speed-sp`,name:`速度设定器`,code:`LINE · SP`,ch:`产线速度设定`,unit:`m/min`,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度设定:升速提高产能但缩短物料受热时间(温度补偿需联动),降速利于精细工艺。速度变化会同步影响张力与厚度分布。`},{key:`tension-sp`,name:`张力设定器`,code:`TENSION · SP`,ch:`膜张力设定`,unit:`kN`,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力设定:张力过大易断膜/拉伸变形,过小则跑偏起皱。调整需平缓,并与速度联动观察。`},{key:`pressure-sp`,name:`压力设定器`,code:`PRESSURE · SP`,ch:`熔体压力设定`,unit:`MPa`,min:.6,max:1.2,decimals:2,icon:`pressure`,semantics:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],a=[{kind:`mock`,label:`Mock 模拟 PLC`,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:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{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:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`,hint:`如 int16 用 0~2000 表示 0.1 分辨率`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{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.SetTemp`,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`}]},{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`},{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:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{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:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`mqtt`,label:`MQTT(发布设定值到 Broker)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20`,hint:`MQTT Broker 地址(与边缘网关约定同一 Broker)`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 端口 1883`},{key:`topic`,label:`下发主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/setpoint`,hint:`网关订阅的控制主题(勿与采集主题相同)`},{key:`jsonKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = 纯数字报文;填写 = {"键":值} JSON 报文`},{key:`qos`,label:`QoS`,type:`number`,default:1,hint:`0=至多一次 1=至少一次(推荐)`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(POST 设定值)`,status:`real`,configFields:[{key:`url`,label:`写接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/setpoint`,hint:`接收设定值的 HTTP 接口(POST JSON)`},{key:`bodyKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = {"value": 设定值};填写 = {"键": 设定值}`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]}],o=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],s=(e,t)=>r({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function c(){let r=e([]),a=new Map,o=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),c=e(i.map(e=>({...e}))),l=e([]),u=e([]),d=e([]),f=e([]),p=e([]),m=e({}),h=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),a.set(e.id,r[r.length-1]))}function _(e){if(e.node){if(e.op===`removed`){let t=r.findIndex(t=>t.id===e.node.id);t>=0&&r.splice(t,1),a.delete(e.node.id);return}g(e.node)}}let v=0,y=null;function b(){v++,v===1&&(y=n().subscribe(x));let e=!1;return()=>{e||(e=!0,--v===0&&(y?.(),y=null))}}function x(e){if(e.type===`dcw.written`){let t=e.payload,n=a.get(t.nodeId);n&&(n.value=t.value,n.state=t.ok?`ok`:`error`,n.lastWriteAt=t.at,t.ok&&(n.lastAckAt=t.at)),d.unshift({id:`${t.nodeId}-${t.at}`,nodeId:t.nodeId,nodeName:n?.name??t.nodeId,param:``,eng:t.value,raw:t.raw,ok:t.ok,message:t.message,recipeRunId:t.recipeRunId,at:t.at}),d.length>60&&d.splice(60)}else if(e.type===`dcw.read`){let t=e.payload,n=a.get(t.nodeId);n&&(t.ok&&(n.readValue=t.value),n.lastReadAt=t.at,n.lastReadError=t.ok?null:t.message)}else if(e.type===`dcw.node.changed`)_(e.payload);else if(e.type===`dcw.controller`)Object.assign(o,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=h.findIndex(e=>e.id===t.id);n>=0?h[n]=t:h.unshift(t),h.length>200&&(h.length=200)}}async function S(){try{let e=await s(``);r.splice(0,r.length,...e.nodes),a.clear();for(let e of r)a.set(e.id,e);Object.assign(o,e.controller),e.templates?.length&&c.splice(0,c.length,...e.templates.map(e=>({...e}))),l.splice(0,l.length,...e.recipes??[]),u.splice(0,u.length,...e.runs??[]),d.splice(0,d.length,...e.history??[]),f.splice(0,f.length,...e.products??[]),p.splice(0,p.length,...e.lines??[]);for(let e of Object.keys(m))Reflect.deleteProperty(m,e);for(let t of e.lineStates??[])m[t.lineId]=t;C.loaded=!0,C.error=``}catch(e){C.error=t(e)}}let C=e({nodes:r,controller:o,templates:c,recipes:l,runs:u,history:d,products:f,lines:p,lineStates:m,optimizations:h,loaded:!1,error:``,ensureWsFeed:b,load:S,loadOptimizations:async e=>{let t=new URLSearchParams;e?.lineId&&t.set(`lineId`,e.lineId),e?.recipeId&&t.set(`recipeId`,e.recipeId),e?.nodeId&&t.set(`nodeId`,e.nodeId),e?.status&&t.set(`status`,e.status),t.set(`limit`,String(e?.limit??100));let n=await s(`/optimizations?${t.toString()}`);h.splice(0,h.length,...n.records)},fetchLedger:async e=>(await s(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>s(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await s(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await s(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await s(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await s(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await s(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await s(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return g(n.node),n.node},patchNode:async(e,t)=>{await s(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await s(`/${e}`,{method:`DELETE`});let t=r.findIndex(t=>t.id===e);t>=0&&r.splice(t,1),a.delete(e)},bindNode:async(e,t)=>{g((await s(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>s(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),readNode:async e=>s(`/${e}/read`,{method:`POST`,body:JSON.stringify({})}).then(e=>e.read),testDriver:async(e,t)=>s(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>s(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await s(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(o,t.controller)},createTemplate:async e=>{let t=await s(`/templates`,{method:`POST`,body:JSON.stringify(e)});return c.push(t.template),t.template},createRecipe:async e=>{let t=await s(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return l.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await s(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=l.findIndex(t=>t.id===e);return r>=0&&(l[r]=n.recipe),n.recipe},removeRecipe:async e=>{await s(`/recipes/${e}`,{method:`DELETE`});let t=l.findIndex(t=>t.id===e);t>=0&&l.splice(t,1)},applyRecipe:async e=>{let t=await s(`/recipes/${e}/apply`,{method:`POST`});return u.push(t.run),t.run},recipeVersions:async e=>(await s(`/recipes/${e}/versions`)).versions??[],revertRecipe:async(e,t)=>{let n=await s(`/recipes/${e}/revert`,{method:`POST`,body:JSON.stringify(t)}),r=l.findIndex(t=>t.id===e);return r>=0&&(l[r]=n.recipe),n.recipe},closeRun:async e=>{let t=await s(`/runs/${e}/close`,{method:`POST`}),n=u.findIndex(t=>t.id===e);return n>=0&&(u[n]=t.run),t.run},runData:e=>s(`/runs/${e}/data`),nodeById:e=>a.get(e)??r.find(t=>t.id===e),createProduct:async e=>{let t=await s(`/products`,{method:`POST`,body:JSON.stringify(e)});return f.push(t.product),t.product},updateProduct:async(e,t)=>s(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(w(),e.product)),removeProduct:async e=>{await s(`/products/${e}`,{method:`DELETE`});let t=f.findIndex(t=>t.id===e);t>=0&&f.splice(t,1)},createLine:async e=>{let t=await s(`/lines`,{method:`POST`,body:JSON.stringify(e)});return p.push(t.line),t.line},updateLine:async(e,t)=>{let n=await s(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=p.findIndex(t=>t.id===e);r>=0&&(p[r]=n.line)},removeLine:async(e,t=!1)=>{await s(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=p.findIndex(t=>t.id===e);n>=0&&p.splice(n,1),Reflect.deleteProperty(m,e),await S()},startLine:async(e,t)=>{let n=await s(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});m[e]=n.line},stopLine:async e=>{let t=await s(`/lines/${e}/stop`,{method:`POST`});m[e]=t.line},lineStateOf:e=>m[e]??{lineId:e,active:!1,runId:null,recipeId:null,recipeName:null,productId:null,productName:null,startedAt:null,taggedSamples:0},queryLine:e=>{let t=new URLSearchParams;return e.lineId&&t.set(`lineId`,e.lineId),e.productId&&t.set(`productId`,e.productId),e.recipeId&&t.set(`recipeId`,e.recipeId),e.paramKey&&t.set(`paramKey`,e.paramKey),e.nodeId&&t.set(`nodeId`,e.nodeId),e.fromMs!=null&&t.set(`from`,String(e.fromMs)),e.toMs!=null&&t.set(`to`,String(e.toMs)),e.bucketMs!=null&&t.set(`bucketMs`,String(e.bucketMs)),e.limit!=null&&t.set(`limit`,String(e.limit)),s(`/line/query?${t.toString()}`)}});async function w(){try{let e=await s(``);f.splice(0,f.length,...e.products??[]),l.splice(0,l.length,...e.recipes??[])}catch{}}return C}var l=`__dcwStream`;function u(){let e=globalThis;return e[l]||(e[l]=c()),e[l]}export{a as n,o as r,u as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,j as n}from"./BU83-NnX.js";import{$ as r,D as i,G as a,H as o,Ht as s,P as c,R as l,S as u,Ut as d,V as f,Vt as p,W as m,b as h,d as g,f as _,h as v,ht as y,i as b,m as x,nt as S,p as C,pt as w,tt as T,v as E,xt as D,y as O}from"./CSkxz2NX.js";import{d as ee,f as k,n as te,t as A,u as j}from"./D6uzXueg.js";import{d as M,p as N}from"./BJHKLJJU.js";import{i as ne}from"./YnQxK3eG.js";import{n as re,r as ie,t as ae}from"./BzHEilTt.js";import{t as oe}from"./BHA40aHa.js";import{n as P}from"./KZQX7xoM.js";import{t as se}from"./D9Oidm5I.js";import{At as F,St as ce,d as le,jt as I,n as L,nt as R,t as z,u as B,wt as V}from"./4sIEbgcl.js";import{i as ue}from"./DYr1VMiQ.js";import{t as de}from"./aWWIh8YL.js";import{a as H,i as U,n as fe,r as pe,t as me}from"./CzlMDL5H.js";import{t as he}from"./lO5tpDZ5.js";import{n as W}from"./JCoYF4IJ.js";import{t as ge}from"./Crod5z2f.js";import{t as _e}from"./C4DWUZ6d2.js";import{t as ve}from"./JTLM-kqr2.js";import{t as ye}from"./DIaZ2PTo2.js";import{t as G}from"./BDNMzG2s2.js";import{t as be}from"./Cc_9VzD42.js";import{t as xe}from"./D0ZBQrN_2.js";import{m as Se,p as Ce,t as we}from"./BNT8gYU92.js";import{t as Te}from"./BN6iuJEg2.js";var K=e=>{let{componentCls:t,colorBgContainer:n,colorBgBody:r,colorText:i}=e;return{[`${t}-sider-light`]:{background:n,[`${t}-sider-trigger`]:{color:i,background:n},[`${t}-sider-zero-width-trigger`]:{color:i,background:n,border:`1px solid ${r}`,borderInlineStart:0}}}},Ee=e=>{let{antCls:t,componentCls:n,colorText:r,colorTextLightSolid:i,colorBgHeader:a,colorBgBody:o,colorBgTrigger:s,layoutHeaderHeight:c,layoutHeaderPaddingInline:l,layoutHeaderColor:u,layoutFooterPadding:d,layoutTriggerHeight:f,layoutZeroTriggerSize:p,motionDurationMid:m,motionDurationSlow:h,fontSize:g,borderRadius:_}=e;return{[n]:F(F({display:`flex`,flex:`auto`,flexDirection:`column`,color:r,minHeight:0,background:o,"&, *":{boxSizing:`border-box`},[`&${n}-has-sider`]:{flexDirection:`row`,[`> ${n}, > ${n}-content`]:{width:0}},[`${n}-header, &${n}-footer`]:{flex:`0 0 auto`},[`${n}-header`]:{height:c,paddingInline:l,color:u,lineHeight:`${c}px`,background:a,[`${t}-menu`]:{lineHeight:`inherit`}},[`${n}-footer`]:{padding:d,color:r,fontSize:g,background:o},[`${n}-content`]:{flex:`auto`,minHeight:0},[`${n}-sider`]:{position:`relative`,minWidth:0,background:a,transition:`all ${m}, background 0s`,"&-children":{height:`100%`,marginTop:-.1,paddingTop:.1,[`${t}-menu${t}-menu-inline-collapsed`]:{width:`auto`}},"&-has-trigger":{paddingBottom:f},"&-right":{order:1},"&-trigger":{position:`fixed`,bottom:0,zIndex:1,height:f,color:i,lineHeight:`${f}px`,textAlign:`center`,background:s,cursor:`pointer`,transition:`all ${m}`},"&-zero-width":{"> *":{overflow:`hidden`},"&-trigger":{position:`absolute`,top:c,insetInlineEnd:-p,zIndex:1,width:p,height:p,color:i,fontSize:e.fontSizeXL,display:`flex`,alignItems:`center`,justifyContent:`center`,background:a,borderStartStartRadius:0,borderStartEndRadius:_,borderEndEndRadius:_,borderEndStartRadius:0,cursor:`pointer`,transition:`background ${h} ease`,"&::after":{position:`absolute`,inset:0,background:`transparent`,transition:`all ${h}`,content:`""`},"&:hover::after":{background:`rgba(255, 255, 255, 0.2)`},"&-right":{insetInlineStart:-p,borderStartStartRadius:_,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:_}}}}},K(e)),{"&-rtl":{direction:`rtl`}})}},De=le(`Layout`,e=>{let{colorText:t,controlHeightSM:n,controlHeight:r,controlHeightLG:i,marginXXS:a}=e,o=i*1.25;return[Ee(B(e,{layoutHeaderHeight:r*2,layoutHeaderPaddingInline:o,layoutHeaderColor:t,layoutFooterPadding:`${n}px ${o}px`,layoutTriggerHeight:i+a*2,layoutZeroTriggerSize:i}))]},e=>{let{colorBgLayout:t}=e;return{colorBgHeader:`#001529`,colorBgBody:t,colorBgTrigger:`#002140`}}),q=()=>({prefixCls:String,hasSider:{type:Boolean,default:void 0},tagName:String});function J(e){let{suffixCls:t,tagName:n,name:r}=e;return e=>u({compatConfig:{MODE:3},name:r,props:q(),setup(r,i){let{slots:a}=i,{prefixCls:o}=L(t,r);return()=>{let t=F(F({},r),{prefixCls:o.value,tagName:n});return h(e,t,a)}}})}var Y=u({compatConfig:{MODE:3},props:q(),setup(e,t){let{slots:n}=t;return()=>h(e.tagName,{class:e.prefixCls},n)}}),Oe=u({compatConfig:{MODE:3},inheritAttrs:!1,props:q(),setup(e,t){let{slots:n,attrs:r}=t,{prefixCls:i,direction:a}=L(``,e),[s,c]=De(i),l=w([]);o(H,{addSider:e=>{l.value=[...l.value,e]},removeSider:e=>{l.value=l.value.filter(t=>t!==e)}});let u=g(()=>{let{prefixCls:t,hasSider:n}=e;return{[c.value]:!0,[`${t}`]:!0,[`${t}-has-sider`]:typeof n==`boolean`?n:l.value.length>0,[`${t}-rtl`]:a.value===`rtl`}});return()=>{let{tagName:t}=e;return s(h(t,F(F({},r),{class:[u.value,r.class]}),n))}}}),ke=J({suffixCls:`layout`,tagName:`section`,name:`ALayout`})(Oe),X=J({suffixCls:`layout-header`,tagName:`header`,name:`ALayoutHeader`})(Y),Z=J({suffixCls:`layout-footer`,tagName:`footer`,name:`ALayoutFooter`})(Y),Q=J({suffixCls:`layout-content`,tagName:`main`,name:`ALayoutContent`})(Y),Ae={icon:{tag:`svg`,attrs:{viewBox:`0 0 1024 1024`,focusable:`false`},children:[{tag:`path`,attrs:{d:`M912 192H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM104 228a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0zm0 284a56 56 0 10112 0 56 56 0 10-112 0z`}}]},name:`bars`,theme:`outlined`};function je(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:Object(arguments[t]),r=Object.keys(n);typeof Object.getOwnPropertySymbols==`function`&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Me(e,t,n[t])})}return e}function Me(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ne=function(e,t){var r=je({},e,t.attrs);return h(n,je({},r,{icon:Ae}),null)};Ne.displayName=`BarsOutlined`,Ne.inheritAttrs=!1;var Pe={xs:`479.98px`,sm:`575.98px`,md:`767.98px`,lg:`991.98px`,xl:`1199.98px`,xxl:`1599.98px`,xxxl:`1999.98px`},Fe=()=>({prefixCls:String,collapsible:{type:Boolean,default:void 0},collapsed:{type:Boolean,default:void 0},defaultCollapsed:{type:Boolean,default:void 0},reverseArrow:{type:Boolean,default:void 0},zeroWidthTriggerStyle:{type:Object,default:void 0},trigger:z.any,width:z.oneOfType([z.number,z.string]),collapsedWidth:z.oneOfType([z.number,z.string]),breakpoint:z.oneOf(R(`xs`,`sm`,`md`,`lg`,`xl`,`xxl`,`xxxl`)),theme:z.oneOf(R(`light`,`dark`)).def(`dark`),onBreakpoint:Function,onCollapse:Function}),Ie=(()=>{let e=0;return function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``;return e+=1,`${t}${e}`}})(),$=u({compatConfig:{MODE:3},name:`ALayoutSider`,inheritAttrs:!1,props:ce(Fe(),{collapsible:!1,defaultCollapsed:!1,reverseArrow:!1,width:200,collapsedWidth:80}),emits:[`breakpoint`,`update:collapsed`,`collapse`],setup(e,t){let{emit:n,attrs:a,slots:s}=t,{prefixCls:u}=L(`layout-sider`,e),d=i(H,void 0),f=y(!!(e.collapsed===void 0?e.defaultCollapsed:e.collapsed)),p=y(!1);r(()=>e.collapsed,()=>{f.value=!!e.collapsed}),o(U,f);let m=(t,r)=>{e.collapsed===void 0&&(f.value=t),n(`update:collapsed`,t),n(`collapse`,t,r)},g=y(e=>{p.value=e.matches,n(`breakpoint`,e.matches),f.value!==e.matches&&m(e.matches,`responsive`)}),_;function v(e){return g.value(e)}let b=Ie(`ant-sider-`);d&&d.addSider(b),l(()=>{r(()=>e.breakpoint,()=>{try{_?.removeEventListener(`change`,v)}catch{_?.removeListener(v)}if(typeof window<`u`){let{matchMedia:t}=window;if(t&&e.breakpoint&&e.breakpoint in Pe){_=t(`(max-width: ${Pe[e.breakpoint]})`);try{_.addEventListener(`change`,v)}catch{_.addListener(v)}v(_)}}},{immediate:!0})}),c(()=>{try{_?.removeEventListener(`change`,v)}catch{_?.removeListener(v)}d&&d.removeSider(b)});let x=()=>{m(!f.value,`clickTrigger`)};return()=>{let t=u.value,{collapsedWidth:n,width:r,reverseArrow:i,zeroWidthTriggerStyle:o,trigger:c=s.trigger?.call(s),collapsible:l,theme:d}=e,m=f.value?n:r,g=he(m)?`${m}px`:String(m),_=parseFloat(String(n||0))===0?h(`span`,{onClick:x,class:V(`${t}-zero-width-trigger`,`${t}-zero-width-trigger-${i?`right`:`left`}`),style:o},[c||h(Ne,null,null)]):null,v={expanded:h(i?W:ge,null,null),collapsed:h(i?ge:W,null,null)}[f.value?`collapsed`:`expanded`],y=c===null?null:_||h(`div`,{class:`${t}-trigger`,onClick:x,style:{width:g}},[c||v]),b=[a.style,{flex:`0 0 ${g}`,maxWidth:g,minWidth:g,width:g}],S=V(t,`${t}-${d}`,{[`${t}-collapsed`]:!!f.value,[`${t}-has-trigger`]:l&&c!==null&&!_,[`${t}-below`]:!!p.value,[`${t}-zero-width`]:parseFloat(g)===0},a.class);return h(`aside`,I(I({},a),{},{class:S,style:b}),[h(`div`,{class:`${t}-children`},[s.default?.call(s)]),l||p.value&&_?y:null])}}}),Le=X,Re=Z,ze=$,Be=Q,Ve=F(ke,{Header:X,Footer:Z,Content:Q,Sider:$,install:e=>(e.component(ke.name,ke),e.component(X.name,X),e.component(Z.name,Z),e.component($.name,$),e.component(Q.name,Q),e)}),He=[`width`,`height`],Ue=Object.assign(u({__name:`AwLogo`,props:{size:{default:32}},setup(e){return(t,n)=>(f(),v(`svg`,{width:e.size,height:e.size,viewBox:`0 0 64 64`,fill:`none`,"aria-hidden":`true`},[...n[0]||=[E(`<defs><linearGradient id="aw-logo-gradient" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#35e0a0"></stop><stop offset="1" stop-color="#41c8f4"></stop></linearGradient></defs><path d="M32 4 L56 18 V46 L32 60 L8 46 V18 Z" stroke="url(#aw-logo-gradient)" stroke-width="4" stroke-linejoin="round"></path><path d="M32 15 L46.7 23.5 V40.5 L32 49 L17.3 40.5 V23.5 Z" stroke="#41c8f4" stroke-opacity="0.45" stroke-width="1.8" stroke-dasharray="4 3"></path><path d="M32 23 L25 38 M32 23 L39 38 M25 38 L39 38" stroke="#35e0a0" stroke-width="1.8" stroke-opacity="0.75"></path><circle cx="32" cy="23" r="3.4" fill="#35e0a0"></circle><circle cx="25" cy="38" r="3.4" fill="#41c8f4"></circle><circle cx="39" cy="38" r="3.4" fill="#41c8f4"></circle>`,7)]],8,He))}}),{__name:`AwLogo`}),We={class:`logo`},Ge={class:`logo-mark`,"aria-hidden":`true`},Ke={class:`logo-text`},qe={class:`logo-title`},Je={class:`app-menu`},Ye={class:`menu-group-label`},Xe={class:`menu-group-text`},Ze={class:`menu-group-sep`,"aria-hidden":`true`},Qe=[`title`,`onClick`],$e={class:`sider-footer`},et={class:`footer-line`},tt=Object.assign(G(u({__name:`AppSidebar`,setup(e){let t=ye(),{t:n}=P(),r=N(),i=ae(),a=re(),o=g(()=>[{id:`console`,label:n(`menu.groups.console`),items:[{key:`/`,icon:`i-tabler-layout-dashboard`,label:n(`menu.dashboard`),motion:`im-pop`},{key:`/workshop`,icon:`i-tabler-box`,label:n(`menu.workshop`),motion:`im-pop`},{key:`/town`,icon:`i-tabler-map-2`,label:n(`menu.town`),motion:`im-pop`},{key:`/daq`,icon:`i-tabler-activity`,label:n(`menu.daq`),motion:`im-pop`},{key:`/dcw`,icon:`i-tabler-settings-automation`,label:n(`menu.dcw`),motion:`im-pop`}]},{id:`ops`,label:n(`menu.groups.ops`),items:[{key:`/monitor`,icon:`i-tabler-cpu`,label:n(`menu.monitor`),motion:`im-pulse`},{key:`/logs`,icon:`i-tabler-list-details`,label:n(`menu.logs`),motion:`im-pop`}]},{id:`system`,label:n(`menu.groups.system`),items:[{key:`/tokens`,icon:`i-tabler-key`,label:n(`menu.tokens`),motion:`im-nudge-up`},{key:`/users`,icon:`i-tabler-users-group`,label:n(`menu.users`),motion:`im-pop`},{key:`/permissions`,icon:`i-tabler-shield-lock`,label:n(`menu.permissions`),motion:`im-pop`,adminOnly:!0},{key:`/plugins`,icon:`i-tabler-puzzle`,label:n(`menu.plugins`),motion:`im-pop`},{key:`/settings`,icon:`i-tabler-settings`,label:n(`menu.settings`),motion:`im-rotate`}]}].map(e=>({...e,items:e.items.filter(e=>!e.adminOnly||t.isAdmin)})).filter(e=>e.items.length>0)),s=e=>e===`/`?r.path===`/`:r.path.startsWith(e),c=e=>{s(e)||M(e)};return(e,t)=>{let n=Ue,r=ze;return f(),C(r,{collapsed:D(a).sidebarCollapsed,"onUpdate:collapsed":t[0]||=e=>D(a).sidebarCollapsed=e,trigger:null,collapsible:``,breakpoint:`lg`,width:228,"collapsed-width":64,class:`app-sider`},{default:T(()=>[_(`div`,We,[_(`div`,Ge,[h(n,{size:30})]),h(A,{name:`slide-fade`},{default:T(()=>[S(_(`div`,Ke,[_(`span`,qe,d(D(i).name),1),t[1]||=_(`span`,{class:`logo-sub`},`digital twin`,-1)],512),[[j,!D(a).sidebarCollapsed]])]),_:1})]),_(`nav`,Je,[(f(!0),v(b,null,m(D(o),e=>(f(),v(`div`,{key:e.id,class:`menu-group`},[S(_(`div`,Ye,[_(`span`,Xe,d(e.label),1),t[2]||=_(`span`,{class:`menu-group-rule`,"aria-hidden":`true`},null,-1)],512),[[j,!D(a).sidebarCollapsed]]),S(_(`div`,Ze,null,512),[[j,D(a).sidebarCollapsed]]),(f(!0),v(b,null,m(e.items,e=>(f(),v(`button`,{key:e.key,type:`button`,class:p([`menu-item im`,{active:s(e.key)}]),title:D(a).sidebarCollapsed?e.label:void 0,onClick:t=>c(e.key)},[_(`span`,{class:p([`menu-icon`,[e.icon,e.motion]])},null,2),S(_(`span`,{class:`menu-label`},d(e.label),513),[[j,!D(a).sidebarCollapsed]])],10,Qe))),128))]))),128))]),S(_(`div`,$e,[t[4]||=_(`div`,{class:`footer-rule`},null,-1),_(`div`,et,[_(`span`,null,`v`+d(D(i).version),1),t[3]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,d(D(i).mode),1)])],512),[[j,!D(a).sidebarCollapsed]])]),_:1},8,[`collapsed`])}}}),[[`__scopeId`,`data-v-095cc5a0`]]),{__name:`AppSidebar`}),nt=ne(`app.routeTrail`,()=>{let e=w([]);function t(t){if(!t||t.startsWith(`/api`))return;let n=e.value.filter(e=>e.path!==t);e.value=[...n,{path:t,at:Date.now()}].slice(-8)}function n(t){let n=e.value.findIndex(e=>e.path===t);return n>=0&&(e.value=e.value.filter(e=>e.path!==t)),n}function r(){e.value=[]}return{waypoints:e,visit:t,remove:n,clear:r}},{persist:{pick:[`waypoints`],storage:ie.localStorage()}});function rt(){let{t:e}=P(),t=be(),n={"/":{key:`menu.dashboard`,icon:`i-tabler-layout-dashboard`},"/workshop":{key:`menu.workshop`,icon:`i-tabler-box`},"/workshop/agents":{key:`meta.agents`,icon:`i-tabler-users`},"/workshop/teams":{key:`meta.teams`,icon:`i-tabler-users-group`},"/workshop/channel-templates":{key:`meta.ctpl`,icon:`i-tabler-layout-grid-add`},"/town":{key:`menu.town`,icon:`i-tabler-map-2`},"/tokens":{key:`menu.tokens`,icon:`i-tabler-key`},"/daq":{key:`menu.daq`,icon:`i-tabler-activity`},"/dcw":{key:`menu.dcw`,icon:`i-tabler-settings-automation`},"/logs":{key:`menu.logs`,icon:`i-tabler-list-details`},"/permissions":{key:`menu.permissions`,icon:`i-tabler-shield-lock`},"/plugins":{key:`menu.plugins`,icon:`i-tabler-puzzle`},"/users":{key:`menu.users`,icon:`i-tabler-users-group`},"/monitor":{key:`menu.monitor`,icon:`i-tabler-cpu`},"/settings":{key:`menu.settings`,icon:`i-tabler-settings`}};return{metaFor:r=>{let i=n[r];if(i)return{title:e(i.key),icon:i.icon};let a=r.match(/^\/workshop\/w\/([^/]+)$/);if(a){let n=a[1];return{title:t.workspaces.find(e=>e.id===n)?.name??`${e(`header.workspace`)} ${n.slice(0,6)}`,icon:`i-tabler-console`}}let o=r.split(`/`).filter(Boolean).pop()??`·`;return{title:o.charAt(0).toUpperCase()+o.slice(1),icon:`i-tabler-point`}}}}var it={class:`header-left`},at=[`aria-label`],ot={class:`node-title`},st=[`aria-label`],ct=[`title`,`onClick`,`onKeydown`],lt={class:`node-title`},ut=[`aria-label`,`title`,`onClick`],dt={class:`header-right`},ft=[`title`],pt={class:`hitl-count`},mt={class:`hitl-menu`},ht={class:`hitl-menu-title`},gt=[`onClick`],_t={class:`hitl-item-top`},vt={class:`hitl-item-agent`},yt={class:`hitl-item-kind`},bt={class:`hitl-item-title`},xt=[`title`],St={class:`user-chip`},Ct={class:`user-initial aw-avatar`},wt={class:`user-meta`},Tt={class:`user-name`},Et={class:`user-role`},Dt=Object.assign(G(u({__name:`AppHeader`,setup(n){let{t:i,locale:a,locales:o,setLocale:s}=P(),u=re(),y=N(),S=nt(),E=ye(),{metaFor:A}=rt(),j=Ce(),ne=we(),ie=()=>{E.isLoggedIn&&ne.ensureConnected()};r(()=>E.token,e=>{e?(ie(),j.loadSnapshot()):j.clear()},{immediate:!0});let ae=new Set([`codex-approval`,`opencode-permission`,`dsh-permission`]),F=e=>{switch(e){case`omp-dialog`:return i(`appHeader.hitlKindOmp`);case`dcw-approval`:return i(`appHeader.hitlKindDcw`);case`codex-approval`:return i(`appHeader.hitlKindCodex`);case`opencode-permission`:return i(`appHeader.hitlKindOpencode`);case`dsh-permission`:return i(`appHeader.hitlKindDsh`);default:return e}},ce=e=>{M({path:`/monitor`,query:{agentId:e.agentId,channelId:e.channelId}})},le=Te(),I=w(null),L=async(t,n)=>{I.value=`${t.kind}:${t.id}`;try{await le.respondHitl({kind:t.kind,id:t.id,confirmed:n,cancelled:!n}),await j.loadSnapshot()}catch(t){e.error(xe(t))}finally{I.value=null}},R=g(()=>o.value.map(e=>({label:e.name,value:e.code}))),z=e=>{e!=null&&(localStorage.setItem(`aw.locale`,String(e)),s(String(e)),window.location.reload())},B=w(!1),V=w(!1),H=null;r(()=>y.path,()=>{S.visit(y.path),V.value=!1,requestAnimationFrame(()=>{V.value=!0,H&&clearTimeout(H),H=setTimeout(()=>{V.value=!1},620)})},{immediate:!1}),l(()=>{B.value=!0,S.visit(y.path)}),c(()=>{H&&clearTimeout(H)});let U=e=>{e!==y.path&&M(e)},he=e=>{let t=S.remove(e);if(e!==y.path)return;let n=S.waypoints,r=n[Math.min(Math.max(t-1,0),Math.max(n.length-1,0))]?.path??`/`;M(r)},W=w(!1);function ge(){document.fullscreenElement?(document.exitFullscreen(),W.value=!1):(document.documentElement.requestFullscreen(),W.value=!0)}let ve=g(()=>(E.user?.name??`?`).trim().charAt(0).toUpperCase()),G=g(()=>E.user?.name??i(`header.guest`)),be=g(()=>E.isLoggedIn?E.user?.role??`user`:`anonymous`),K=Se(),Ee=g(()=>K.state!==`closed`||K.lastDataAt>0),De=g(()=>K.state===`open`?K.pendingReplay?`syncing`:`live`:K.state===`connecting`?`syncing`:`down`),q=g(()=>K.state===`open`?K.pendingReplay?i(`appHeader.kwsdot0002`):i(`appHeader.kwsdot0001`):K.state===`connecting`?i(`appHeader.kwsdot0003`):i(`appHeader.kwsdot0004`)),J=g(()=>{let e=[{key:`tokens`,icon:`i-tabler-key`,label:i(`menu.tokens`)},{key:`settings`,icon:`i-tabler-adjustments`,label:i(`menu.settings`)}];return E.isLoggedIn&&(e.push({key:`d-logout`,label:``,divider:!0}),e.push({key:`logout`,icon:`i-tabler-logout`,label:i(`header.logout`),danger:!0})),e}),Y=async({key:e})=>{e===`settings`?M(`/settings`):e===`tokens`?M(`/tokens`):e===`logout`&&(await E.logout(),M(`/workshop`))};return(e,n)=>{let r=oe,o=t,s=_e,c=se,l=ue,g=de,w=fe,E=pe,M=me,N=Le;return f(),C(N,{class:`app-header app-header-glass`},{default:T(()=>[_(`div`,it,[_(`button`,{class:`collapse-btn`,"aria-label":D(u).sidebarCollapsed?D(i)(`header.expand`):D(i)(`header.collapse`),onClick:n[0]||=e=>D(u).toggleSidebar()},[...n[3]||=[_(`span`,{class:`i-tabler-menu-2`},null,-1)]],8,at),n[6]||=_(`span`,{class:`rail-mark i-tabler-route`},null,-1),h(r,{class:p([`trail-node aml-entry`,{active:D(y).path.startsWith(`/aml`)}]),to:`/aml`,title:D(i)(`aml.k1amlx159`)},{default:T(()=>[n[4]||=_(`span`,{class:`node-icon i-tabler-flask`},null,-1),_(`span`,ot,d(D(i)(`aml.k1amlx158`)),1)]),_:1},8,[`class`,`title`]),_(`nav`,{class:`trail`,"aria-label":D(i)(`header.trail`)},[h(te,{name:`stamp`,tag:`div`,class:`trail-row`},{default:T(()=>[D(B)?(f(!0),v(b,{key:0},m(D(S).waypoints,(t,r)=>(f(),v(b,{key:t.path},[r>0?(f(),v(`span`,{key:`link-${t.path}`,class:`trail-link`,"aria-hidden":`true`})):x(``,!0),_(`div`,{class:p([`trail-node`,{active:t.path===D(y).path}]),role:`button`,tabindex:`0`,title:D(A)(t.path).title,onClick:e=>U(t.path),onKeydown:ee(k(e=>U(t.path),[`prevent`]),[`enter`])},[_(`span`,{class:p([`node-icon`,D(A)(t.path).icon])},null,2),_(`span`,lt,d(D(A)(t.path).title),1),_(`button`,{class:`node-close`,"aria-label":e.$t(`appHeader.kzwjv99001`,{p0:D(A)(t.path).title}),title:e.$t(`appHeader.kzwjv99001`,{p0:D(A)(t.path).title}),onClick:k(e=>he(t.path),[`stop`])},[...n[5]||=[_(`span`,{class:`i-tabler-x`},null,-1)]],8,ut)],42,ct)],64))),128)):x(``,!0)]),_:1})],8,st)]),_(`div`,dt,[h(c,null,{default:T(()=>[D(j).count>0?(f(),C(s,{key:0,placement:`bottomRight`},{overlay:T(()=>[_(`div`,mt,[_(`div`,ht,d(D(i)(`appHeader.hitlBadge`))+` · `+d(D(j).count),1),(f(!0),v(b,null,m(D(j).items,e=>(f(),v(`button`,{key:`${e.kind}:${e.id}`,class:`hitl-item`,onClick:t=>ce(e)},[_(`span`,_t,[_(`span`,vt,d(e.agentName),1),_(`span`,yt,d(F(e.kind)),1)]),_(`span`,bt,d(e.title),1),D(ae).has(e.kind)?(f(),v(`span`,{key:0,class:`hitl-item-actions`,onClick:n[1]||=k(()=>{},[`stop`])},[h(o,{size:`small`,type:`primary`,loading:D(I)===`${e.kind}:${e.id}`,onClick:t=>L(e,!0)},{default:T(()=>[O(d(D(i)(`appHeader.hitlApprove`)),1)]),_:1},8,[`loading`,`onClick`]),h(o,{size:`small`,danger:``,disabled:D(I)===`${e.kind}:${e.id}`,onClick:t=>L(e,!1)},{default:T(()=>[O(d(D(i)(`appHeader.hitlReject`)),1)]),_:1},8,[`disabled`,`onClick`])])):x(``,!0)],8,gt))),128))])]),default:T(()=>[_(`button`,{class:`icon-btn hitl-bell`,title:D(i)(`appHeader.hitlBadge`)},[n[7]||=_(`span`,{class:`i-tabler-bell-ringing`},null,-1),_(`span`,pt,d(D(j).count),1)],8,ft)]),_:1})):x(``,!0)]),_:1}),D(Ee)?(f(),v(`span`,{key:0,class:p([`ws-dot`,D(De)]),title:D(q)},null,10,xt)):x(``,!0),h(l,{title:D(i)(`header.fullscreen`)},{default:T(()=>[_(`button`,{class:`icon-btn`,onClick:ge},[_(`span`,{class:p([`i-tabler-arrows-maximize`,{hidden:D(W)}])},null,2),_(`span`,{class:p([`i-tabler-arrows-minimize`,{hidden:!D(W)}])},null,2)])]),_:1},8,[`title`]),h(g,{id:`hdr-locale`,value:D(a),size:`middle`,options:D(R),class:`lang-select`,onChange:z},null,8,[`value`,`options`]),h(l,{title:D(u).isDark?D(i)(`common.light`):D(i)(`common.dark`)},{default:T(()=>[_(`button`,{class:`icon-btn`,onClick:n[2]||=e=>D(u).toggleDark()},[_(`span`,{class:p([`i-tabler-sun-high`,{hidden:D(u).isDark}])},null,2),_(`span`,{class:p([`i-tabler-moon-stars`,{hidden:!D(u).isDark}])},null,2)])]),_:1},8,[`title`]),h(s,null,{overlay:T(()=>[h(M,{onClick:Y},{default:T(()=>[(f(!0),v(b,null,m(D(J),e=>(f(),v(b,{key:e.key},[e.divider?(f(),C(w,{key:0})):(f(),C(E,{key:e.key,danger:e.danger},{default:T(()=>[_(`span`,{class:p([e.icon,`mr-2`])},null,2),O(` `+d(e.label),1)]),_:2},1032,[`danger`]))],64))),128))]),_:1})]),default:T(()=>[_(`div`,St,[h(c,null,{fallback:T(()=>[...n[8]||=[_(`span`,{class:`user-initial aw-avatar`},`·`,-1),_(`span`,{class:`user-meta`},[_(`span`,{class:`user-name`},`·`),_(`span`,{class:`user-role`},`·`)],-1)]]),default:T(()=>[_(`span`,Ct,d(D(ve)),1),_(`span`,wt,[_(`span`,Tt,d(D(G)),1),_(`span`,Et,d(D(be)),1)])]),_:1})])]),_:1})]),_(`span`,{class:p([`plotter-line`,{run:D(V)}]),"aria-hidden":`true`},null,2)]),_:1})}}}),[[`__scopeId`,`data-v-1fa471c5`]]),{__name:`AppHeader`}),Ot={class:`footer-title aw-serif-accent`},kt=G(u({__name:`default`,setup(e){let{token:t}=ve.useToken(),n=ae();return(e,r)=>{let i=tt,o=Dt,c=Be,l=Re,u=Ve;return f(),C(u,{class:`app-layout`,"has-sider":``},{default:T(()=>[h(i),h(u,{class:`app-main`,style:s({background:`transparent`,"--app-bg-container":D(t)?.colorBgContainer,"--app-bg-layout":D(t)?.colorBgLayout,"--app-text":D(t)?.colorText,"--app-text-secondary":D(t)?.colorTextSecondary,"--app-border":D(t)?.colorBorderSecondary,"--app-fill":D(t)?.colorFillQuaternary,"--app-header-h":`56px`,"--app-footer-h":`46px`})},{default:T(()=>[h(o),h(c,{class:`app-content`},{default:T(()=>[a(e.$slots,`default`,{},void 0,!0)]),_:3}),h(l,{class:`app-footer`,style:s({color:D(t)?.colorTextSecondary})},{default:T(()=>[_(`span`,Ot,d(D(n).title),1),r[0]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,`v`+d(D(n).version),1),r[1]||=_(`span`,{class:`sep`},`/`,-1),_(`span`,null,`mode=`+d(D(n).mode),1)]),_:1},8,[`style`])]),_:3},8,[`style`]),r[2]||=_(`span`,{class:`aw-noise`,"aria-hidden":`true`},null,-1)]),_:3})}}}),[[`__scopeId`,`data-v-b48dd792`]]);export{kt as default};
|