agentworkshop 0.7.8 → 0.7.11
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/-6OnbLFb.js +1 -0
- package/.output/public/_nuxt/{BUxYN2mw.js → -nb2uqVg.js} +1 -1
- package/.output/public/_nuxt/6vYobj4F.js +1 -0
- package/.output/public/_nuxt/{BSXx2vqR.js → B-xskWta.js} +1 -1
- package/.output/public/_nuxt/B3Psw_sL.js +1 -0
- package/.output/public/_nuxt/B53Mp7lD.js +1 -0
- package/.output/public/_nuxt/B5CYgFAD.js +14 -0
- package/.output/public/_nuxt/{uBbDCfTz.js → B5S_UyaC.js} +1 -1
- package/.output/public/_nuxt/{DZk24ego.js → B7wL3pDk.js} +1 -1
- package/.output/public/_nuxt/B8WV7GzS.js +1 -0
- package/.output/public/_nuxt/{BYL0Rjqj.js → BBwMH_hG.js} +3 -3
- package/.output/public/_nuxt/BLzCac9K2.js +1 -0
- package/.output/public/_nuxt/BNXfwXpE.js +1 -0
- package/.output/public/_nuxt/{VnIWJ0ts.js → BN_PdN3J.js} +1 -1
- package/.output/public/_nuxt/BZGNTgTQ2.js +1 -0
- package/.output/public/_nuxt/BbZAzXjZ2.js +1 -0
- package/.output/public/_nuxt/Bc3PiGGr.js +1 -0
- package/.output/public/_nuxt/Bckshc9V.js +1 -0
- package/.output/public/_nuxt/BcrN7QEl2.js +1 -0
- package/.output/public/_nuxt/BgOhoDTI.js +1 -0
- package/.output/public/_nuxt/Bmpvki7M.js +1 -0
- package/.output/public/_nuxt/{BkfchkK62.js → Bp5luxkg2.js} +1 -1
- package/.output/public/_nuxt/BxPPAkGA.js +3 -0
- package/.output/public/_nuxt/{C8dxXc6K.js → BxtpDtzC.js} +1 -1
- package/.output/public/_nuxt/{pRQri7vQ2.js → BytVi9VX2.js} +1 -1
- package/.output/public/_nuxt/{D5KJ7_0V.js → C3tCneTM.js} +1 -1
- package/.output/public/_nuxt/{C_gFA2H_2.js → C4OAdbVK2.js} +1 -1
- package/.output/public/_nuxt/C6m-kenn.js +1 -0
- package/.output/public/_nuxt/{zwdqvGN_.js → CGx-mtWf.js} +1 -1
- package/.output/public/_nuxt/{DCXIGxzT.js → CKfhtOt7.js} +2 -2
- package/.output/public/_nuxt/{ChEKFMxj.js → CUXCQXjG.js} +1 -1
- package/.output/public/_nuxt/CfVAr2nf.js +1 -0
- package/.output/public/_nuxt/Cj6139IM.js +1 -0
- package/.output/public/_nuxt/{DM8DS9MA.js → Cor9siSf.js} +1 -1
- package/.output/public/_nuxt/{BsMpJf7S.js → D-Ca4BGY.js} +6 -6
- package/.output/public/_nuxt/{CsCpu2Zh.js → D1z7i2UP.js} +1 -1
- package/.output/public/_nuxt/D7jiode2.js +1 -0
- package/.output/public/_nuxt/D8CqF0yy.js +1 -0
- package/.output/public/_nuxt/{DYZBdSSg2.js → DA4lxCWC2.js} +1 -1
- package/.output/public/_nuxt/DEaY_uvR.js +1 -0
- package/.output/public/_nuxt/{DCEyMaN-.js → DNxVTfhe.js} +3 -3
- package/.output/public/_nuxt/DT-Wg8r1.js +1 -0
- package/.output/public/_nuxt/DTYBfjRY.js +1 -0
- package/.output/public/_nuxt/{fQUs58kX2.js → DWcEk1ur2.js} +1 -1
- package/.output/public/_nuxt/DXRZPxGs.js +1 -0
- package/.output/public/_nuxt/Dhqra7NB.js +1 -0
- package/.output/public/_nuxt/DlRO_q5L.js +1 -0
- package/.output/public/_nuxt/{C2iWjzEC2.js → DoLasgPj2.js} +1 -1
- package/.output/public/_nuxt/{DRq09ZmT.js → DpojD719.js} +1 -1
- package/.output/public/_nuxt/Ds8JbqGB.js +1 -0
- package/.output/public/_nuxt/{BCipft_k2.js → DsUUYP292.js} +1 -1
- package/.output/public/_nuxt/DtBu71ev.js +32 -0
- package/.output/public/_nuxt/Dy-mxvXY2.js +1 -0
- package/.output/public/_nuxt/DyisHHzD.js +18 -0
- package/.output/public/_nuxt/G0qIw7Gq2.js +1 -0
- package/.output/public/_nuxt/ORt9oDIy2.js +1 -0
- package/.output/public/_nuxt/QoCzfpo2.js +1 -0
- package/.output/public/_nuxt/RzXYI9FM.js +23 -0
- package/.output/public/_nuxt/TownView.BHLKAjEu.css +1 -0
- package/.output/public/_nuxt/VLI2Zy4t.js +5 -0
- package/.output/public/_nuxt/_id_.DIxEKj88.css +1 -0
- package/.output/public/_nuxt/_id_.DTvjd6VN.css +1 -0
- package/.output/public/_nuxt/{_wsId_.COUzMXpP.css → _wsId_.BFyCuUwS.css} +1 -1
- package/.output/public/_nuxt/agents.CEbox5-D.css +1 -0
- package/.output/public/_nuxt/{ZugRk0CM2.js → arUY5dyq2.js} +2 -2
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/88479a5b-ce6a-400f-9737-1cc9f54b1fe5.json +1 -0
- package/.output/public/_nuxt/channel-templates.De5ZvrGz.css +1 -0
- package/.output/public/_nuxt/d_Sz9KGm.js +1 -0
- package/.output/public/_nuxt/daq.6IrhVVfy.css +1 -0
- package/.output/public/_nuxt/dcw.DcDjwvqv.css +1 -0
- package/.output/public/_nuxt/default.BbgdTDCk.css +1 -0
- package/.output/public/_nuxt/{CblLEiCZ.js → eHYnGew0.js} +3 -3
- package/.output/public/_nuxt/eUGyJdiT.js +1 -0
- package/.output/public/_nuxt/{entry.5qf6EqfN.css → entry.B03HBJGC.css} +1 -1
- package/.output/public/_nuxt/{Cyk3du4K2.js → kZV5TQvh2.js} +1 -1
- package/.output/public/_nuxt/kkEthL84.js +2 -0
- package/.output/public/_nuxt/logs.BO-BSyjm.css +1 -0
- package/.output/public/_nuxt/{D4qXvjuV.js → niDwBOZW.js} +2 -2
- package/.output/public/_nuxt/permissions.CwZo6t1V.css +1 -0
- package/.output/public/_nuxt/plugins.Clsky_kl.css +1 -0
- package/.output/public/_nuxt/rqZ-1SoP.js +2 -0
- package/.output/public/_nuxt/settings.BqMF2nfj.css +1 -0
- package/.output/public/_nuxt/tJuVvBSl.js +1 -0
- package/.output/public/_nuxt/teams.CUMnbQGf.css +1 -0
- package/.output/public/_nuxt/tokens.BPLe9ioQ.css +1 -0
- package/.output/public/_nuxt/{Bi6AiCuP.js → vJ4FPb-_.js} +1 -1
- package/.output/public/_nuxt/workshop.BIdoGfoC.css +1 -0
- package/.output/public/_nuxt/{B7aqqzkY.js → zVkqCZ78.js} +1 -1
- package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
- package/.output/server/chunks/_/SearchOutlined.mjs +1 -1
- package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
- package/.output/server/chunks/_/host-bindings.mjs +1 -1
- package/.output/server/chunks/_/nitro.mjs +1614 -1279
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
- package/.output/server/chunks/build/Col-biaNnEPf.mjs +1 -1
- package/.output/server/chunks/build/{OmpTerminalPanel-COphA1br.mjs → OmpTerminalPanel-Ban3yJZ4.mjs} +4 -5
- package/.output/server/chunks/build/OmpTerminalPanel-Ban3yJZ4.mjs.map +1 -0
- package/.output/server/chunks/build/{TownView-B5KifIaT.mjs → TownView-CunmEMzS.mjs} +184 -184
- package/.output/server/chunks/build/{TownView-B5KifIaT.mjs.map → TownView-CunmEMzS.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-Ct4Jhvl1.mjs → _id_-CVnMdSeG.mjs} +38 -37
- package/.output/server/chunks/build/_id_-CVnMdSeG.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-C-ewLgfl.mjs → _id_-D265Wh_k.mjs} +127 -126
- package/.output/server/chunks/build/_id_-D265Wh_k.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs → _wsId_-eNJmBp05.mjs} +137 -136
- package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs.map → _wsId_-eNJmBp05.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-DSOptxXA.mjs → agents-B10wmFri.mjs} +24 -23
- package/.output/server/chunks/build/agents-B10wmFri.mjs.map +1 -0
- package/.output/server/chunks/build/alert-qJnjyRcP.mjs +1 -1
- package/.output/server/chunks/build/api-error-dul30BYQ.mjs +47 -0
- package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -0
- package/.output/server/chunks/build/button-DEcZFcqN.mjs +2 -2
- package/.output/server/chunks/build/{card-Dipvaykh.mjs → card-CCPQoKlh.mjs} +4 -4
- package/.output/server/chunks/build/{card-Dipvaykh.mjs.map → card-CCPQoKlh.mjs.map} +1 -1
- package/.output/server/chunks/build/{channel-templates-BK0KuPOd.mjs → channel-templates-CpWxVk5A.mjs} +29 -28
- package/.output/server/chunks/build/channel-templates-CpWxVk5A.mjs.map +1 -0
- package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs → checkbox-Dv1kjaUZ.mjs} +3 -3
- package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs.map → checkbox-Dv1kjaUZ.mjs.map} +1 -1
- package/.output/server/chunks/build/client-only-D5BzSQc6.mjs +1 -1
- package/.output/server/chunks/build/{daq-D9RA_uze.mjs → daq-DxaXk_8N.mjs} +114 -114
- package/.output/server/chunks/build/daq-DxaXk_8N.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-BTM5YU-B.mjs → dcw-DqjHrl5Z.mjs} +48 -47
- package/.output/server/chunks/build/dcw-DqjHrl5Z.mjs.map +1 -0
- package/.output/server/chunks/build/{default-BfWGTlbj.mjs → default-YcUHc1Ev.mjs} +34 -26
- package/.output/server/chunks/build/{default-BfWGTlbj.mjs.map → default-YcUHc1Ev.mjs.map} +1 -1
- package/.output/server/chunks/build/drawer-Cmh90erI.mjs +1 -1
- package/.output/server/chunks/build/dropdown-vhn1NPFs.mjs +2 -2
- package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs +554 -0
- package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs.map +1 -0
- package/.output/server/chunks/build/initDefaultProps-DIbWwP4R.mjs +1 -1
- package/.output/server/chunks/build/{input-sf_BT6o6.mjs → input-DxDqeyQW.mjs} +5 -553
- package/.output/server/chunks/build/input-DxDqeyQW.mjs.map +1 -0
- package/.output/server/chunks/build/{input-number-Bd55elNN.mjs → input-number-CZ3ZrCsy.mjs} +3 -3
- package/.output/server/chunks/build/{input-number-Bd55elNN.mjs.map → input-number-CZ3ZrCsy.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-Dyk0I2I9.mjs → logs-Co854R4y.mjs} +40 -40
- package/.output/server/chunks/build/{logs-Dyk0I2I9.mjs.map → logs-Co854R4y.mjs.map} +1 -1
- package/.output/server/chunks/build/menu-WCrlpYVh.mjs +2 -2
- package/.output/server/chunks/build/modal-yvUquPj5.mjs +2 -2
- package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs → monitor-miqq9xHB.mjs} +11 -11
- package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs.map → monitor-miqq9xHB.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-DR2bzczM.mjs → pages-DPC1Vp6w.mjs} +6 -5
- package/.output/server/chunks/build/pages-DPC1Vp6w.mjs.map +1 -0
- package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs +534 -0
- package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs.map +1 -0
- package/.output/server/chunks/build/{plugins-DnOBIWGg.mjs → plugins-D84mvK9G.mjs} +27 -25
- package/.output/server/chunks/build/plugins-D84mvK9G.mjs.map +1 -0
- package/.output/server/chunks/build/popconfirm-CRaHcz5O.mjs +2 -2
- package/.output/server/chunks/build/responsiveObserve-CS0UB6wQ.mjs +1 -1
- package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs → segmented-ChmQZwz6.mjs} +5 -4
- package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs.map → segmented-ChmQZwz6.mjs.map} +1 -1
- package/.output/server/chunks/build/select-D-CeE5vY.mjs +1 -1
- package/.output/server/chunks/build/{settings-DA8IkGLo.mjs → settings-BPBll_7K.mjs} +28 -26
- package/.output/server/chunks/build/settings-BPBll_7K.mjs.map +1 -0
- package/.output/server/chunks/build/space-CCBYAkXt.mjs +2 -2
- package/.output/server/chunks/build/spin-HVY81X_L.mjs +1 -1
- package/.output/server/chunks/build/switch-CelRXpcy.mjs +2 -2
- package/.output/server/chunks/build/{table-Cswq-l2r.mjs → table-BtksyDlQ.mjs} +5 -5
- package/.output/server/chunks/build/{table-Cswq-l2r.mjs.map → table-BtksyDlQ.mjs.map} +1 -1
- package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs → tabs-DQv-_-R6.mjs} +3 -3
- package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs.map → tabs-DQv-_-R6.mjs.map} +1 -1
- package/.output/server/chunks/build/{tag-NO9jEqKy.mjs → tag-A0tZ2Ouq.mjs} +4 -4
- package/.output/server/chunks/build/{tag-NO9jEqKy.mjs.map → tag-A0tZ2Ouq.mjs.map} +1 -1
- package/.output/server/chunks/build/{teams-BhSKBBBM.mjs → teams-CNflUtPh.mjs} +25 -24
- package/.output/server/chunks/build/teams-CNflUtPh.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-D_eyxmcv.mjs → tokens-CZpnEDVf.mjs} +27 -26
- package/.output/server/chunks/build/tokens-CZpnEDVf.mjs.map +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs +1 -1
- package/.output/server/chunks/build/{town-DPtOPRRO.mjs → town-BbaR-8io.mjs} +10 -10
- package/.output/server/chunks/build/{town-DPtOPRRO.mjs.map → town-BbaR-8io.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDaqStream-hwkhJHFU.mjs → useDaqStream-BkmyQT06.mjs} +36 -24
- package/.output/server/chunks/build/useDaqStream-BkmyQT06.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwStream-Bdew_yrr.mjs → useDcwStream-DWVoU96J.mjs} +63 -48
- package/.output/server/chunks/build/useDcwStream-DWVoU96J.mjs.map +1 -0
- package/.output/server/chunks/build/{useDeviceTwins-C6EBg9oN.mjs → useDeviceTwins-34WGk9aN.mjs} +4 -3
- package/.output/server/chunks/build/useDeviceTwins-34WGk9aN.mjs.map +1 -0
- package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +1 -1
- package/.output/server/chunks/build/{useOpsLog-DdCqKVVG.mjs → useOpsLog-C9zTzYof.mjs} +30 -17
- package/.output/server/chunks/build/useOpsLog-C9zTzYof.mjs.map +1 -0
- package/.output/server/chunks/build/useSiteConfig-DJe_KMVr.mjs +1 -1
- package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs +1 -1
- package/.output/server/chunks/build/{useWorkshopWs-B3j5wIAK.mjs → useWorkshopWs-CprkZEdq.mjs} +2 -3
- package/.output/server/chunks/build/useWorkshopWs-CprkZEdq.mjs.map +1 -0
- package/.output/server/chunks/build/{users-CmVvb1oq.mjs → users-D6RNylrW.mjs} +10 -10
- package/.output/server/chunks/build/{users-CmVvb1oq.mjs.map → users-D6RNylrW.mjs.map} +1 -1
- package/.output/server/chunks/build/{workshop-D5CQj2A8.mjs → workshop-Crsai2Y9.mjs} +27 -26
- package/.output/server/chunks/build/workshop-Crsai2Y9.mjs.map +1 -0
- package/.output/server/chunks/build/{workspaces-IfORCDJE.mjs → workspaces-BuydxM-3.mjs} +2 -3
- package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +1 -0
- package/.output/server/chunks/routes/api/health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +19 -8
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +7 -6
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +5 -2
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +7 -6
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +4 -3
- 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 -2
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +8 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +7 -3
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +3 -2
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +5 -3
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index.put.mjs +41 -0
- package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +4 -3
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs +27 -0
- package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +5 -4
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +18 -11
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +24 -12
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +12 -7
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +4 -4
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -2
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -3
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +3 -3
- package/.output/server/chunks/virtual/entry.mjs +303 -37
- package/.output/server/chunks/virtual/entry.mjs.map +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/README-zh.md +15 -0
- package/README.md +20 -0
- package/app/components/AppHeader.vue +1 -1
- package/app/components/AppSidebar.vue +7 -1
- package/app/components/workshop/A2aRpcDebugger.vue +1 -1
- package/app/components/workshop/AgentInspectorDrawer.vue +3 -3
- package/app/components/workshop/AgentLanesView.vue +6 -6
- package/app/components/workshop/AssetLibrary.vue +2 -2
- package/app/components/workshop/ChannelSessionList.vue +5 -5
- package/app/components/workshop/Composer.vue +1 -1
- package/app/components/workshop/DeviceTwinPanel.vue +2 -2
- package/app/components/workshop/TaskBoardView.vue +1 -1
- package/app/components/workshop/TaskInspectorDrawer.vue +2 -2
- package/app/components/workshop/town/TownView.vue +23 -23
- package/app/composables/workshop/apiClient.ts +103 -95
- package/app/composables/workshop/useCharacterAssets.ts +1 -1
- package/app/composables/workshop/useDaqStream.ts +36 -22
- package/app/composables/workshop/useDcwStream.ts +23 -6
- package/app/composables/workshop/useDeviceTwins.ts +1 -1
- package/app/composables/workshop/useOpsLog.ts +28 -15
- package/app/composables/workshop/useSceneLayouts.ts +1 -1
- package/app/composables/workshop/useWorkshopWs.ts +11 -2
- package/app/pages/daq/[id].vue +1 -1
- package/app/pages/daq/index.vue +8 -8
- package/app/pages/dcw/[id].vue +13 -13
- package/app/pages/dcw/index.vue +7 -7
- package/app/pages/logs/index.vue +1 -1
- package/app/pages/permissions/index.vue +327 -0
- package/app/pages/plugins/index.vue +14 -6
- package/app/pages/settings.vue +4 -2
- package/app/pages/tokens.vue +3 -3
- package/app/pages/workshop/agents.vue +2 -2
- package/app/pages/workshop/channel-templates.vue +3 -3
- package/app/pages/workshop/index.vue +4 -4
- package/app/pages/workshop/teams.vue +3 -3
- package/app/plugins/http.ts +18 -2
- package/app/plugins/session-restore.client.ts +7 -2
- package/app/stores/workshop/user.ts +14 -1
- package/app/utils/api-error.ts +75 -0
- package/cli/commands/plugin.mjs +2 -2
- package/config.yml +1 -1
- package/i18n/locales/en.ts +53 -3
- package/i18n/locales/zh-CN.ts +53 -3
- package/package.json +1 -1
- package/scripts/_dbg-acc-1-setup.mjs +57 -0
- package/scripts/_dbg-acc-2-diag.mjs +14 -0
- package/scripts/_dbg-acc-2-intervals.mjs +81 -0
- package/scripts/_dbg-acc-3-daq.mjs +48 -0
- package/scripts/_dbg-acc-4-team.mjs +92 -0
- package/scripts/_dbg-acc-5-visual.mjs +63 -0
- package/scripts/_dbg-acc-5b-ws-town.mjs +18 -0
- package/scripts/_dbg-acc-5c-town.mjs +12 -0
- package/scripts/_dbg-acc-6-i18n.mjs +19 -0
- package/scripts/_dbg-audit-neg-e2e.mjs +64 -0
- package/scripts/_dbg-final-features.mjs +155 -0
- package/scripts/_dbg-final-fixups.mjs +62 -0
- package/scripts/_dbg-final-visual.mjs +29 -0
- package/scripts/_dbg-interval-config.mjs +17 -6
- package/scripts/_dbg-perms-e2e.mjs +102 -0
- package/scripts/_dbg-perms-visual.mjs +36 -0
- package/scripts/_dbg-plugins-e2e.mjs +101 -0
- package/scripts/_dbg-protocol-matrix.mjs +16 -0
- package/scripts/_dbg-repo-setup-verify.mjs +31 -0
- package/scripts/_dbg-setup-e2e.mjs +1 -1
- package/sdk/api.mjs +117 -101
- package/sdk/context.mjs +240 -219
- package/sdk/hooks.mjs +105 -103
- package/sdk/index.d.mts +142 -135
- package/sdk/lifecycle.mjs +26 -25
- package/server/api/workshop/agent-tools/bindings/index.post.ts +40 -20
- package/server/api/workshop/daq/[id]/bind.post.ts +5 -2
- package/server/api/workshop/daq/[id]/frames/content.get.ts +4 -1
- package/server/api/workshop/daq/[id]/frames.get.ts +4 -1
- package/server/api/workshop/daq/[id]/samples.get.ts +4 -1
- package/server/api/workshop/daq/[id].patch.ts +3 -0
- package/server/api/workshop/daq/alarms/[id]/ack.post.ts +20 -15
- package/server/api/workshop/daq/controller.post.ts +2 -0
- package/server/api/workshop/daq/index.get.ts +5 -3
- package/server/api/workshop/daq/index.post.ts +2 -2
- package/server/api/workshop/dcw/[id]/bind.post.ts +20 -17
- package/server/api/workshop/dcw/[id]/test.post.ts +18 -15
- package/server/api/workshop/dcw/[id]/write.post.ts +3 -0
- package/server/api/workshop/dcw/index.get.ts +22 -9
- package/server/api/workshop/dcw/line/query.get.ts +38 -31
- package/server/api/workshop/dcw/lines/[id]/start.post.ts +3 -0
- package/server/api/workshop/dcw/lines/[id]/stop.post.ts +3 -0
- package/server/api/workshop/dcw/lines/index.get.ts +8 -2
- package/server/api/workshop/dcw/lines/index.post.ts +2 -2
- package/server/api/workshop/dcw/products/index.post.ts +16 -16
- package/server/api/workshop/dcw/runs/[id]/data.get.ts +20 -15
- package/server/api/workshop/dcw/runs/index.get.ts +13 -11
- package/server/api/workshop/permissions/index.get.ts +30 -0
- package/server/api/workshop/permissions/index.put.ts +29 -0
- package/server/api/workshop/plugins/[name]/disable.post.ts +5 -3
- package/server/api/workshop/plugins/[name]/enable.post.ts +5 -3
- package/server/api/workshop/ws.ts +18 -6
- package/server/data/daqs.json +90 -46
- package/server/data/dcw-lines.json +21 -0
- package/server/data/dcw-products.json +140 -0
- package/server/data/dcw-recipes.json +506 -0
- package/server/data/dcw-rollback.json +281 -6
- package/server/data/dcw-runs.json +1374 -1257
- package/server/data/dcw-writes.json +312 -0
- package/server/data/dcws.json +1165 -477
- package/server/data/line-runs.json +26 -6
- package/server/plugins/backup.ts +119 -116
- package/server/repositories/user.repository.ts +86 -6
- package/server/services/system-config.ts +5 -0
- package/server/services/user.service.ts +5 -3
- package/server/services/workshop/daq/bus/index.ts +5 -3
- package/server/services/workshop/daq/bus/inproc.adapter.ts +12 -3
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +13 -0
- package/server/services/workshop/daq/bus/queue-port.ts +2 -0
- package/server/services/workshop/daq/daq-controller.ts +18 -1
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +10 -5
- package/server/services/workshop/db/ops.repo.ts +6 -0
- package/server/services/workshop/dcw/dcw-controller.ts +10 -2
- package/server/services/workshop/permissions.ts +79 -0
- package/server/services/workshop/plugins/host.mjs +40 -2
- package/server/services/workshop/scene-events.ts +25 -1
- package/server/services/workshop/settings.ts +10 -0
- package/shared/config/single-instance.mjs +24 -0
- package/shared/daq-protocol.ts +2 -0
- package/.output/public/_nuxt/2LwEn9gX.js +0 -2
- package/.output/public/_nuxt/3612gD2V.js +0 -32
- package/.output/public/_nuxt/8eIQAVlb.js +0 -1
- package/.output/public/_nuxt/Ah9qOv1m.js +0 -1
- package/.output/public/_nuxt/B4Fia4FB.js +0 -3
- package/.output/public/_nuxt/BH0Z05CS.js +0 -1
- package/.output/public/_nuxt/BJ-fxrSw.js +0 -1
- package/.output/public/_nuxt/BJvGPTpC.js +0 -1
- package/.output/public/_nuxt/BVZjSVs2.js +0 -1
- package/.output/public/_nuxt/BVzDoF8t.js +0 -1
- package/.output/public/_nuxt/BjVLsC3M.js +0 -1
- package/.output/public/_nuxt/BnVoQ74r.js +0 -1
- package/.output/public/_nuxt/Bnp4vIAf.js +0 -1
- package/.output/public/_nuxt/Bt_HDizI.js +0 -5
- package/.output/public/_nuxt/Bu-P92Pe.js +0 -18
- package/.output/public/_nuxt/ButLXkjo.js +0 -2
- package/.output/public/_nuxt/By-LNp3k.js +0 -1
- package/.output/public/_nuxt/CGdPdJPP.js +0 -1
- package/.output/public/_nuxt/CRGlf1Gb.js +0 -1
- package/.output/public/_nuxt/CS8R0_J3.js +0 -1
- package/.output/public/_nuxt/CUxV8Bw_.js +0 -1
- package/.output/public/_nuxt/Cd15nPnG2.js +0 -1
- package/.output/public/_nuxt/CvbHIGQY2.js +0 -1
- package/.output/public/_nuxt/DNJSkm3Q.js +0 -1
- package/.output/public/_nuxt/DNzaswei.js +0 -1
- package/.output/public/_nuxt/DXK1U43I.js +0 -1
- package/.output/public/_nuxt/Dc46i75T.js +0 -14
- package/.output/public/_nuxt/Dk6pq9JB2.js +0 -1
- package/.output/public/_nuxt/Do88WZG2.js +0 -23
- package/.output/public/_nuxt/Du-eSpo2.js +0 -1
- package/.output/public/_nuxt/GP2wXyuY.js +0 -1
- package/.output/public/_nuxt/NIM0Wglj2.js +0 -1
- package/.output/public/_nuxt/PQLnLxYe.js +0 -1
- package/.output/public/_nuxt/R_Wv_Nd9.js +0 -1
- package/.output/public/_nuxt/TownView.Bt33bo1M.css +0 -1
- package/.output/public/_nuxt/_id_.BzKMZnLe.css +0 -1
- package/.output/public/_nuxt/_id_.CbpDAWRh.css +0 -1
- package/.output/public/_nuxt/agents.BlejnOOC.css +0 -1
- package/.output/public/_nuxt/builds/meta/e5bb1803-86d9-43b3-85be-dc787dc9a978.json +0 -1
- package/.output/public/_nuxt/channel-templates.lkqEYlWY.css +0 -1
- package/.output/public/_nuxt/daq.zZ8GR433.css +0 -1
- package/.output/public/_nuxt/dcw.C46dGiF_.css +0 -1
- package/.output/public/_nuxt/default.V3_hUJq1.css +0 -1
- package/.output/public/_nuxt/eHGLpQSg2.js +0 -1
- package/.output/public/_nuxt/logs.DaIsHWZE.css +0 -1
- package/.output/public/_nuxt/p7wSGMtc.js +0 -1
- package/.output/public/_nuxt/plugins.FTm0PcEe.css +0 -1
- package/.output/public/_nuxt/settings.DeRNNUcP.css +0 -1
- package/.output/public/_nuxt/tRBT-plo.js +0 -1
- package/.output/public/_nuxt/teams.B8JNbUZg.css +0 -1
- package/.output/public/_nuxt/tokens.CWOTXM-Z.css +0 -1
- package/.output/public/_nuxt/ubPfs9mQ.js +0 -1
- package/.output/public/_nuxt/workshop.3kAcLB_M.css +0 -1
- package/.output/server/chunks/build/OmpTerminalPanel-COphA1br.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-C-ewLgfl.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Ct4Jhvl1.mjs.map +0 -1
- package/.output/server/chunks/build/agents-DSOptxXA.mjs.map +0 -1
- package/.output/server/chunks/build/channel-templates-BK0KuPOd.mjs.map +0 -1
- package/.output/server/chunks/build/daq-D9RA_uze.mjs.map +0 -1
- package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +0 -1
- package/.output/server/chunks/build/input-sf_BT6o6.mjs.map +0 -1
- package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +0 -1
- package/.output/server/chunks/build/plugins-DnOBIWGg.mjs.map +0 -1
- package/.output/server/chunks/build/settings-DA8IkGLo.mjs.map +0 -1
- package/.output/server/chunks/build/teams-BhSKBBBM.mjs.map +0 -1
- package/.output/server/chunks/build/tokens-D_eyxmcv.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqStream-hwkhJHFU.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +0 -1
- package/.output/server/chunks/build/useDeviceTwins-C6EBg9oN.mjs.map +0 -1
- package/.output/server/chunks/build/useOpsLog-DdCqKVVG.mjs.map +0 -1
- package/.output/server/chunks/build/useWorkshopWs-B3j5wIAK.mjs.map +0 -1
- package/.output/server/chunks/build/user-Dk-ytEUV.mjs +0 -140
- package/.output/server/chunks/build/user-Dk-ytEUV.mjs.map +0 -1
- package/.output/server/chunks/build/workshop-D5CQj2A8.mjs.map +0 -1
- package/.output/server/chunks/build/workspaces-IfORCDJE.mjs.map +0 -1
- /package/.output/public/_nuxt/{CNs_Ozdc2.js → CNs_Ozdc.js} +0 -0
- /package/.output/public/_nuxt/{Cno6kYiO2.js → Cno6kYiO.js} +0 -0
|
@@ -6,6 +6,7 @@ import { Buffer as Buffer$1 } from 'node:buffer';
|
|
|
6
6
|
import { promises, existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, readdirSync, watch as watch$1, statSync, copyFileSync, rmSync } from 'node:fs';
|
|
7
7
|
import path, { resolve as resolve$1, dirname as dirname$1, join } from 'node:path';
|
|
8
8
|
import { pathToFileURL, fileURLToPath } from 'node:url';
|
|
9
|
+
import { copyFile, mkdir, writeFile as writeFile$1, readFile as readFile$1, rm } from 'node:fs/promises';
|
|
9
10
|
import { homedir, tmpdir } from 'node:os';
|
|
10
11
|
import YAML from 'js-yaml';
|
|
11
12
|
import { execFile, spawn } from 'node:child_process';
|
|
@@ -13,7 +14,6 @@ import { createConnection, createServer } from 'node:net';
|
|
|
13
14
|
import { promisify } from 'node:util';
|
|
14
15
|
import { DatabaseSync } from 'node:sqlite';
|
|
15
16
|
import { createRequire } from 'node:module';
|
|
16
|
-
import { mkdir, writeFile as writeFile$1, readFile as readFile$1, rm } from 'node:fs/promises';
|
|
17
17
|
import { deflateSync, inflateSync } from 'node:zlib';
|
|
18
18
|
|
|
19
19
|
const subtle = nodeCrypto.webcrypto?.subtle || {};
|
|
@@ -5106,7 +5106,7 @@ function _expandFromEnv(value) {
|
|
|
5106
5106
|
const _inlineRuntimeConfig = {
|
|
5107
5107
|
"app": {
|
|
5108
5108
|
"baseURL": "/",
|
|
5109
|
-
"buildId": "
|
|
5109
|
+
"buildId": "88479a5b-ce6a-400f-9737-1cc9f54b1fe5",
|
|
5110
5110
|
"buildAssetsDir": "/_nuxt/",
|
|
5111
5111
|
"cdnURL": ""
|
|
5112
5112
|
},
|
|
@@ -5136,7 +5136,7 @@ const _inlineRuntimeConfig = {
|
|
|
5136
5136
|
"public": {
|
|
5137
5137
|
"appName": "AgentWorkShop",
|
|
5138
5138
|
"appTitle": "AgentWorkShop",
|
|
5139
|
-
"version": "0.7.
|
|
5139
|
+
"version": "0.7.11",
|
|
5140
5140
|
"description": "基于 Nuxt 4 的配置驱动运行范式",
|
|
5141
5141
|
"mode": "dev",
|
|
5142
5142
|
"apiBase": "/api",
|
|
@@ -6138,394 +6138,428 @@ const ErrorCodes = {
|
|
|
6138
6138
|
INTERNAL: "INTERNAL_ERROR"
|
|
6139
6139
|
};
|
|
6140
6140
|
|
|
6141
|
-
// ============================================================
|
|
6142
|
-
// AgentWorkShop SDK — HookBus(插件生命周期钩子总线)
|
|
6143
|
-
// ------------------------------------------------------------
|
|
6144
|
-
// 设计:
|
|
6145
|
-
// · 异步串行触发(监听器按注册序 await,可返回值形成 waterfall)
|
|
6146
|
-
// · 错误隔离:单监听器抛错不影响其他监听器,错误经 onError 上报
|
|
6147
|
-
// · 支持通配符 '*'(接收 { type, payload })
|
|
6148
|
-
// · 连续失败自动摘除(熔断):同一监听器连续失败超阈值自动停用,
|
|
6149
|
-
// 防止病态插件拖垮事件桥
|
|
6150
|
-
// ============================================================
|
|
6151
|
-
|
|
6152
|
-
const FAILLIMIT = 8;
|
|
6153
|
-
|
|
6154
|
-
class HookBus {
|
|
6155
|
-
constructor({ name = 'hooks', onError } = {}) {
|
|
6156
|
-
this.name = name;
|
|
6157
|
-
this.onError = onError ?? (() => {});
|
|
6158
|
-
/** type → Array<{ fn, fails }> */
|
|
6159
|
-
this.listeners = new Map();
|
|
6160
|
-
this.count = 0;
|
|
6161
|
-
}
|
|
6162
|
-
|
|
6163
|
-
/** 注册监听器;type='*' 接收全部事件({type,payload})。返回解绑函数 */
|
|
6164
|
-
on(type, fn) {
|
|
6165
|
-
if (typeof type !== 'string' || typeof fn !== 'function') return () => {}
|
|
6166
|
-
const list = this.listeners.get(type) ?? [];
|
|
6167
|
-
list.push({ fn, fails: 0 });
|
|
6168
|
-
this.listeners.set(type, list);
|
|
6169
|
-
this.count++;
|
|
6170
|
-
return () => this.off(type, fn)
|
|
6171
|
-
}
|
|
6172
|
-
|
|
6173
|
-
/** 一次性监听(触发后自动解绑) */
|
|
6174
|
-
once(type, fn) {
|
|
6175
|
-
const off = this.on(type, async (arg) => {
|
|
6176
|
-
off();
|
|
6177
|
-
return fn(arg)
|
|
6178
|
-
});
|
|
6179
|
-
return off
|
|
6180
|
-
}
|
|
6181
|
-
|
|
6182
|
-
off(type, fn) {
|
|
6183
|
-
const list = this.listeners.get(type);
|
|
6184
|
-
if (!list) return
|
|
6185
|
-
const idx = list.findIndex(l => l.fn === fn);
|
|
6186
|
-
if (idx >= 0) {
|
|
6187
|
-
list.splice(idx, 1);
|
|
6188
|
-
this.count--;
|
|
6189
|
-
}
|
|
6190
|
-
if (!list.length) this.listeners.delete(type);
|
|
6191
|
-
}
|
|
6192
|
-
|
|
6193
|
-
/**
|
|
6194
|
-
* 触发事件:同名监听器按注册序串行 await;返回最后一个非 undefined 返回值。
|
|
6195
|
-
* emit 永不抛错——监听器错误被隔离并计数,连续超限自动摘除(熔断)。
|
|
6196
|
-
*/
|
|
6197
|
-
async emit(type, payload) {
|
|
6198
|
-
const same = this.listeners.get(type);
|
|
6199
|
-
const wild = this.listeners.get('*');
|
|
6200
|
-
let result;
|
|
6201
|
-
if (same) {
|
|
6202
|
-
for (const l of [...same]) {
|
|
6203
|
-
const r = await this.#invoke(type, l, payload);
|
|
6204
|
-
if (r !== undefined) result = r;
|
|
6205
|
-
}
|
|
6206
|
-
}
|
|
6207
|
-
if (wild) {
|
|
6208
|
-
for (const l of [...wild]) {
|
|
6209
|
-
await this.#invoke('*', l, { type, payload });
|
|
6210
|
-
}
|
|
6211
|
-
}
|
|
6212
|
-
return result
|
|
6213
|
-
}
|
|
6214
|
-
|
|
6215
|
-
async #invoke(type, l, payload) {
|
|
6216
|
-
try {
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
// ============================================================
|
|
6244
|
-
// AgentWorkShop SDK — 平台 REST 客户端
|
|
6245
|
-
// ------------------------------------------------------------
|
|
6246
|
-
// SDK 作为项目服务的 client:对平台 REST 面(/api/**)的类型化轻封装。
|
|
6247
|
-
// 三个使用形态:
|
|
6248
|
-
// 1) 插件内: ctx.api.lines.list() —— 宿主注入(自环 origin)
|
|
6249
|
-
// 2) 外部脚本: createPlatformClient({ baseUrl, token }).daq.nodes()
|
|
6250
|
-
// 3) 浏览器: createPlatformClient({ baseUrl: '' }) 同源相对路径
|
|
6251
|
-
// 资源方法返回原始 JSON body(data 字段已解包);4xx/5xx 抛错(含 status)。
|
|
6252
|
-
// ============================================================
|
|
6253
|
-
|
|
6254
|
-
function createPlatformClient({ baseUrl = '', token, logger, timeoutMs = 10000 } = {}) {
|
|
6255
|
-
// baseUrl 支持函数(延迟解析):插件宿主的监听端口在 nitro listen 钩子后才确定
|
|
6256
|
-
const resolveBase = () => String(typeof baseUrl === 'function' ? baseUrl() : (baseUrl ?? '')).replace(/\/+$/, '');
|
|
6257
|
-
let authToken = token ?? null;
|
|
6258
|
-
|
|
6259
|
-
async function call(method, path, body, opt = {}) {
|
|
6260
|
-
const base = resolveBase();
|
|
6261
|
-
const headers = { accept: 'application/json', ...(opt.headers ?? {}) };
|
|
6262
|
-
if (authToken) headers.authorization = `Bearer ${authToken}`;
|
|
6263
|
-
if (body !== undefined) headers['content-type'] = 'application/json';
|
|
6264
|
-
const res = await fetch(`${base}${path}`, {
|
|
6265
|
-
method,
|
|
6266
|
-
headers,
|
|
6267
|
-
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
6268
|
-
signal: AbortSignal.timeout(opt.timeoutMs ?? timeoutMs),
|
|
6269
|
-
});
|
|
6270
|
-
const json = await res.json().catch(() => null);
|
|
6271
|
-
if (!res.ok) {
|
|
6272
|
-
const err = new Error(json?.message ?? `HTTP ${res.status} ${path}`);
|
|
6273
|
-
err.status = res.status;
|
|
6274
|
-
err.body = json;
|
|
6275
|
-
if (logger) logger.warn(`API ${method} ${path} → ${res.status}`);
|
|
6276
|
-
throw err
|
|
6277
|
-
}
|
|
6278
|
-
// 平台统一信封 { code, message, data } → 解包 data;非信封原样返回
|
|
6279
|
-
return json && typeof json === 'object' && 'data' in json ? json.data : json
|
|
6280
|
-
}
|
|
6281
|
-
|
|
6282
|
-
const resource = root => ({
|
|
6283
|
-
list: (query = {}) => call('GET', `${root}${toQuery(query)}`),
|
|
6284
|
-
get: id => call('GET', `${root}/${id}`),
|
|
6285
|
-
create: body => call('POST', root, body),
|
|
6286
|
-
update: (id, patch) => call('PATCH', `${root}/${id}`, patch),
|
|
6287
|
-
remove: id => call('DELETE', `${root}/${id}`),
|
|
6288
|
-
});
|
|
6289
|
-
|
|
6290
|
-
const client = {
|
|
6291
|
-
/** 底层调用(任意平台路径;自动带 token 与信封解包) */
|
|
6292
|
-
call,
|
|
6293
|
-
get: (path, query = {}) => call('GET', `${path}${toQuery(query)}`),
|
|
6294
|
-
post: (path, body) => call('POST', path, body),
|
|
6295
|
-
patch: (path, body) => call('PATCH', path, body),
|
|
6296
|
-
delete: path => call('DELETE', path),
|
|
6297
|
-
setToken: (t) => {
|
|
6298
|
-
authToken = t ?? null;
|
|
6299
|
-
return client
|
|
6300
|
-
},
|
|
6301
|
-
/** 平台健康(免鉴权) */
|
|
6302
|
-
ping: () => call('GET', '/api/plugins/manifest'),
|
|
6303
|
-
|
|
6304
|
-
// ---- 业务资源面 ----
|
|
6305
|
-
users: {
|
|
6306
|
-
...resource('/api/users'),
|
|
6307
|
-
login: (email, password) => call('POST', '/api/users/login', { email, password }),
|
|
6308
|
-
me: () => call('GET', '/api/users/me'),
|
|
6309
|
-
},
|
|
6310
|
-
lines: {
|
|
6311
|
-
...resource('/api/workshop/dcw/lines'),
|
|
6312
|
-
start: (id, recipeId = '') => call('POST', `/api/workshop/dcw/lines/${id}/start`, { recipeId }),
|
|
6313
|
-
stop: id => call('POST', `/api/workshop/dcw/lines/${id}/stop`),
|
|
6314
|
-
},
|
|
6315
|
-
products: resource('/api/workshop/dcw/products'),
|
|
6316
|
-
recipes: resource('/api/workshop/dcw/recipes'),
|
|
6317
|
-
dcwNodes: resource('/api/workshop/dcw'),
|
|
6318
|
-
daqNodes: {
|
|
6319
|
-
...resource('/api/workshop/daq'),
|
|
6320
|
-
alarms: () => call('GET', '/api/workshop/daq/alarms'),
|
|
6321
|
-
},
|
|
6322
|
-
templates: {
|
|
6323
|
-
daq: () => call('GET', '/api/workshop/daq').then(d => d?.templates ?? []),
|
|
6324
|
-
dcw: () => call('GET', '/api/workshop/dcw').then(d => d?.templates ?? []),
|
|
6325
|
-
},
|
|
6326
|
-
twins: resource('/api/workshop/device-twins'),
|
|
6327
|
-
teams: resource('/api/workshop/teams'),
|
|
6328
|
-
agents: resource('/api/workshop/agents'),
|
|
6329
|
-
channels: resource('/api/workshop/channels'),
|
|
6330
|
-
plugins: {
|
|
6331
|
-
manifest: () => call('GET', '/api/plugins/manifest'),
|
|
6332
|
-
},
|
|
6333
|
-
};
|
|
6334
|
-
return client
|
|
6335
|
-
}
|
|
6336
|
-
|
|
6337
|
-
function toQuery(query) {
|
|
6338
|
-
const entries = Object.entries(query ?? {}).filter(([, v]) => v !== undefined && v !== null && v !== '');
|
|
6339
|
-
if (!entries.length) return ''
|
|
6340
|
-
return `?${new URLSearchParams(Object.fromEntries(entries.map(([k, v]) => [k, String(v)]))).toString()}`
|
|
6341
|
-
}
|
|
6342
|
-
|
|
6343
|
-
// ============================================================
|
|
6344
|
-
// AgentWorkShop SDK — 服务端插件上下文工厂(宿主调用;插件经 setup(ctx) 获得)
|
|
6345
|
-
// ------------------------------------------------------------
|
|
6346
|
-
// ctx 形态(运行时完整变量面):
|
|
6347
|
-
// 身份 ctx.name / ctx.scope('home'|'project') / ctx.dir / ctx.sdkVersion
|
|
6348
|
-
// 钩子 ctx.hooks HookBus(生命周期 + event:*) [SDK]
|
|
6349
|
-
// 日志 ctx.logger { debug, info, warn, error } 插件名前缀 [SDK]
|
|
6350
|
-
// 配置 ctx.config { get(key), all(), onChange(fn) } [SDK]
|
|
6351
|
-
// 存储 ctx.kv { get,set,all,bump } 内存态+防抖落盘 [SDK]
|
|
6352
|
-
// 定时 ctx.timer { setInterval, setTimeout } 服务关闭自动回收 [SDK]
|
|
6353
|
-
// 清理 ctx.onDispose(fn) / ctx.subscriptions [SDK]
|
|
6354
|
-
// 路由 ctx.route(method, path, handler) → /api/plugins/<name>… [SDK]
|
|
6355
|
-
// 平台 ctx.api 平台 REST 客户端(lines/daq/dcw/twins/teams…) [SDK]
|
|
6356
|
-
// 网络 ctx.http { get, post } 带超时 fetch(仅 http/https) [SDK]
|
|
6357
|
-
// 事件 ctx.events { on(type,fn), off } scene 实时事件 [SDK]
|
|
6358
|
-
// 路径 ctx.paths { home, configRoot, dataDir } [SDK]
|
|
6359
|
-
// ============================================================
|
|
6360
|
-
|
|
6361
|
-
const SDK_VERSION = '0.3.0';
|
|
6362
|
-
|
|
6363
|
-
/** 允许的对外请求协议守卫(拒绝 file:/data: 等;宿主/插件同守此规则) */
|
|
6364
|
-
function safeUrl(raw, timeoutMs = 8000) {
|
|
6365
|
-
const u = new URL(String(raw));
|
|
6366
|
-
if (u.protocol !== 'http:' && u.protocol !== 'https:')
|
|
6367
|
-
throw new Error(`协议不允许: ${u.protocol}(仅 http/https)`)
|
|
6368
|
-
return { signal: AbortSignal.timeout(timeoutMs) }
|
|
6369
|
-
}
|
|
6370
|
-
|
|
6371
|
-
/**
|
|
6372
|
-
* 创建服务端插件上下文。
|
|
6373
|
-
* @param {{ name, scope, dir, hooks, logger, config, paths, emitter, onDispose, selfOrigin }} opts 宿主装配
|
|
6374
|
-
*/
|
|
6375
|
-
function createPluginContext(opts) {
|
|
6376
|
-
const { name, scope, dir, hooks, config, paths, emitter } = opts;
|
|
6377
|
-
// 规范化 logger:宿主实现缺级时兜底 no-op(插件可用全套 debug/info/warn/error)
|
|
6378
|
-
const logger = {
|
|
6379
|
-
debug: () => {},
|
|
6380
|
-
info: () => {},
|
|
6381
|
-
warn: () => {},
|
|
6382
|
-
error: () => {},
|
|
6383
|
-
...(opts.logger ?? {}),
|
|
6384
|
-
};
|
|
6385
|
-
const onDispose = (fn) => {
|
|
6386
|
-
return fn
|
|
6387
|
-
};
|
|
6388
|
-
|
|
6389
|
-
// ---- 定时器:自动登记回收,杜绝插件定时器泄漏 ----
|
|
6390
|
-
const timer = {
|
|
6391
|
-
setInterval: (fn, ms, ...rest) => {
|
|
6392
|
-
const id = setInterval(fn, ms, ...rest);
|
|
6393
|
-
if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
|
|
6394
|
-
return id
|
|
6395
|
-
},
|
|
6396
|
-
setTimeout: (fn, ms, ...rest) => {
|
|
6397
|
-
const id = setTimeout(fn, ms, ...rest);
|
|
6398
|
-
if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
|
|
6399
|
-
return id
|
|
6400
|
-
},
|
|
6401
|
-
};
|
|
6402
|
-
|
|
6403
|
-
// ---- 插件私有持久化:内存态为准 + 200ms 防抖落盘 —— 高频钩子(daq:sample)
|
|
6404
|
-
// 与低频钩子(line:stop)并发时无 read-modify-write 竞态(JS 同步内存操作原子) ----
|
|
6405
|
-
const kvDir = join(paths.dataDir, 'plugins', name);
|
|
6406
|
-
const kvFile = join(kvDir, 'kv.json');
|
|
6407
|
-
const kvState = (() => {
|
|
6408
|
-
try {
|
|
6409
|
-
return JSON.parse(readFileSync(kvFile, 'utf8'))
|
|
6410
|
-
}
|
|
6411
|
-
catch {
|
|
6412
|
-
return {}
|
|
6413
|
-
}
|
|
6414
|
-
})();
|
|
6415
|
-
let kvFlushTimer = null;
|
|
6416
|
-
const kvFlush = () => {
|
|
6417
|
-
clearTimeout(kvFlushTimer);
|
|
6418
|
-
kvFlushTimer = setTimeout(() => {
|
|
6419
|
-
try {
|
|
6420
|
-
mkdirSync(kvDir, { recursive: true });
|
|
6421
|
-
const tmp = `${kvFile}.${process.pid}.tmp`;
|
|
6422
|
-
writeFileSync(tmp, `${JSON.stringify(kvState, null, 2)}\n`, 'utf8');
|
|
6423
|
-
renameSync(tmp, kvFile);
|
|
6424
|
-
}
|
|
6425
|
-
catch { /* 磁盘异常不阻断插件 */ }
|
|
6426
|
-
}, 200);
|
|
6427
|
-
};
|
|
6428
|
-
|
|
6429
|
-
const ctx = {
|
|
6430
|
-
name,
|
|
6431
|
-
scope,
|
|
6432
|
-
dir: resolve$1(dir),
|
|
6433
|
-
sdkVersion: SDK_VERSION,
|
|
6434
|
-
hooks, // 宿主全局总线(与事件桥同源)
|
|
6435
|
-
logger,
|
|
6436
|
-
config: {
|
|
6437
|
-
get: key => config?.effective?.[key],
|
|
6438
|
-
all: () => ({ ...config?.effective }),
|
|
6439
|
-
/** 运行时覆盖变更订阅(runtime-settings.json 变化;宿主 fs.watch 驱动) */
|
|
6440
|
-
onChange: fn => hooks.on('config:changed', fn),
|
|
6441
|
-
},
|
|
6442
|
-
paths: { ...paths },
|
|
6443
|
-
dataDir: kvDir,
|
|
6444
|
-
kv: {
|
|
6445
|
-
get: key => kvState[key],
|
|
6446
|
-
set: (key, value) => {
|
|
6447
|
-
kvState[key] = value;
|
|
6448
|
-
kvFlush();
|
|
6449
|
-
return value
|
|
6450
|
-
},
|
|
6451
|
-
all: () => ({ ...kvState }),
|
|
6452
|
-
bump: (key, by = 1) => {
|
|
6453
|
-
kvState[key] = (Number(kvState[key]) || 0) + by;
|
|
6454
|
-
kvFlush();
|
|
6455
|
-
return kvState[key]
|
|
6456
|
-
},
|
|
6457
|
-
},
|
|
6458
|
-
timer,
|
|
6459
|
-
onDispose,
|
|
6460
|
-
/** 订阅式清理对象({ dispose(){} })集中登记 */
|
|
6461
|
-
subscriptions: {
|
|
6462
|
-
add: (d) => {
|
|
6463
|
-
return d
|
|
6464
|
-
},
|
|
6465
|
-
},
|
|
6466
|
-
route: (method, path, handler) => emitter?.registerRoute(name, method, path, handler),
|
|
6467
|
-
/** 平台 REST 客户端(自环 origin 延迟解析;鉴权端点请 ctx.api.setToken(token)) */
|
|
6468
|
-
api: createPlatformClient({
|
|
6469
|
-
baseUrl: typeof opts.selfOrigin === 'function' ? opts.selfOrigin : () => opts.selfOrigin,
|
|
6470
|
-
logger,
|
|
6471
|
-
}),
|
|
6472
|
-
http: {
|
|
6473
|
-
get: (url, opts2 = {}) => fetch(url, { ...safeUrl(url, opts2.timeoutMs), ...opts2 }),
|
|
6474
|
-
post: (url, body, opts2 = {}) => fetch(url, {
|
|
6475
|
-
method: 'POST',
|
|
6476
|
-
headers: { 'content-type': 'application/json', ...(opts2.headers ?? {}) },
|
|
6477
|
-
body: JSON.stringify(body ?? {}),
|
|
6478
|
-
...safeUrl(url, opts2.timeoutMs),
|
|
6479
|
-
}),
|
|
6480
|
-
},
|
|
6481
|
-
events: {
|
|
6482
|
-
on: (type, fn) => hooks.on(type === '*' ? '*' : `event:${type}`, fn),
|
|
6483
|
-
off: (type, fn) => hooks.off(type === '*' ? '*' : `event:${type}`, fn),
|
|
6484
|
-
},
|
|
6485
|
-
};
|
|
6486
|
-
return ctx
|
|
6141
|
+
// ============================================================
|
|
6142
|
+
// AgentWorkShop SDK — HookBus(插件生命周期钩子总线)
|
|
6143
|
+
// ------------------------------------------------------------
|
|
6144
|
+
// 设计:
|
|
6145
|
+
// · 异步串行触发(监听器按注册序 await,可返回值形成 waterfall)
|
|
6146
|
+
// · 错误隔离:单监听器抛错不影响其他监听器,错误经 onError 上报
|
|
6147
|
+
// · 支持通配符 '*'(接收 { type, payload })
|
|
6148
|
+
// · 连续失败自动摘除(熔断):同一监听器连续失败超阈值自动停用,
|
|
6149
|
+
// 防止病态插件拖垮事件桥
|
|
6150
|
+
// ============================================================
|
|
6151
|
+
|
|
6152
|
+
const FAILLIMIT = 8;
|
|
6153
|
+
|
|
6154
|
+
class HookBus {
|
|
6155
|
+
constructor({ name = 'hooks', onError } = {}) {
|
|
6156
|
+
this.name = name;
|
|
6157
|
+
this.onError = onError ?? (() => {});
|
|
6158
|
+
/** type → Array<{ fn, fails }> */
|
|
6159
|
+
this.listeners = new Map();
|
|
6160
|
+
this.count = 0;
|
|
6161
|
+
}
|
|
6162
|
+
|
|
6163
|
+
/** 注册监听器;type='*' 接收全部事件({type,payload})。返回解绑函数 */
|
|
6164
|
+
on(type, fn) {
|
|
6165
|
+
if (typeof type !== 'string' || typeof fn !== 'function') return () => {}
|
|
6166
|
+
const list = this.listeners.get(type) ?? [];
|
|
6167
|
+
list.push({ fn, fails: 0 });
|
|
6168
|
+
this.listeners.set(type, list);
|
|
6169
|
+
this.count++;
|
|
6170
|
+
return () => this.off(type, fn)
|
|
6171
|
+
}
|
|
6172
|
+
|
|
6173
|
+
/** 一次性监听(触发后自动解绑) */
|
|
6174
|
+
once(type, fn) {
|
|
6175
|
+
const off = this.on(type, async (arg) => {
|
|
6176
|
+
off();
|
|
6177
|
+
return fn(arg)
|
|
6178
|
+
});
|
|
6179
|
+
return off
|
|
6180
|
+
}
|
|
6181
|
+
|
|
6182
|
+
off(type, fn) {
|
|
6183
|
+
const list = this.listeners.get(type);
|
|
6184
|
+
if (!list) return
|
|
6185
|
+
const idx = list.findIndex(l => l.fn === fn);
|
|
6186
|
+
if (idx >= 0) {
|
|
6187
|
+
list.splice(idx, 1);
|
|
6188
|
+
this.count--;
|
|
6189
|
+
}
|
|
6190
|
+
if (!list.length) this.listeners.delete(type);
|
|
6191
|
+
}
|
|
6192
|
+
|
|
6193
|
+
/**
|
|
6194
|
+
* 触发事件:同名监听器按注册序串行 await;返回最后一个非 undefined 返回值。
|
|
6195
|
+
* emit 永不抛错——监听器错误被隔离并计数,连续超限自动摘除(熔断)。
|
|
6196
|
+
*/
|
|
6197
|
+
async emit(type, payload) {
|
|
6198
|
+
const same = this.listeners.get(type);
|
|
6199
|
+
const wild = this.listeners.get('*');
|
|
6200
|
+
let result;
|
|
6201
|
+
if (same) {
|
|
6202
|
+
for (const l of [...same]) {
|
|
6203
|
+
const r = await this.#invoke(type, l, payload);
|
|
6204
|
+
if (r !== undefined) result = r;
|
|
6205
|
+
}
|
|
6206
|
+
}
|
|
6207
|
+
if (wild) {
|
|
6208
|
+
for (const l of [...wild]) {
|
|
6209
|
+
await this.#invoke('*', l, { type, payload });
|
|
6210
|
+
}
|
|
6211
|
+
}
|
|
6212
|
+
return result
|
|
6213
|
+
}
|
|
6214
|
+
|
|
6215
|
+
async #invoke(type, l, payload) {
|
|
6216
|
+
try {
|
|
6217
|
+
const r = await l.fn(payload);
|
|
6218
|
+
l.fails = 0; // 仅"连续失败"触发熔断:成功即清零,偶发失败不累积驱逐
|
|
6219
|
+
return r
|
|
6220
|
+
}
|
|
6221
|
+
catch (err) {
|
|
6222
|
+
l.fails++;
|
|
6223
|
+
try {
|
|
6224
|
+
this.onError(err, { bus: this.name, type, fails: l.fails });
|
|
6225
|
+
}
|
|
6226
|
+
catch { /* 上报器自身错误忽略 */ }
|
|
6227
|
+
if (l.fails >= FAILLIMIT) {
|
|
6228
|
+
const list = this.listeners.get(type);
|
|
6229
|
+
const idx = list?.indexOf(l) ?? -1;
|
|
6230
|
+
if (idx >= 0) {
|
|
6231
|
+
list.splice(idx, 1);
|
|
6232
|
+
this.count--;
|
|
6233
|
+
}
|
|
6234
|
+
}
|
|
6235
|
+
return undefined
|
|
6236
|
+
}
|
|
6237
|
+
}
|
|
6238
|
+
|
|
6239
|
+
/** 已注册监听器总数(诊断用) */
|
|
6240
|
+
get size() {
|
|
6241
|
+
return this.count
|
|
6242
|
+
}
|
|
6487
6243
|
}
|
|
6488
6244
|
|
|
6489
|
-
|
|
6490
|
-
|
|
6491
|
-
|
|
6492
|
-
|
|
6493
|
-
|
|
6494
|
-
|
|
6495
|
-
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
|
|
6509
|
-
|
|
6510
|
-
|
|
6511
|
-
|
|
6512
|
-
|
|
6513
|
-
|
|
6245
|
+
// ============================================================
|
|
6246
|
+
// AgentWorkShop SDK — 平台 REST 客户端
|
|
6247
|
+
// ------------------------------------------------------------
|
|
6248
|
+
// SDK 作为项目服务的 client:对平台 REST 面(/api/**)的类型化轻封装。
|
|
6249
|
+
// 三个使用形态:
|
|
6250
|
+
// 1) 插件内: ctx.api.lines.list() —— 宿主注入(自环 origin)
|
|
6251
|
+
// 2) 外部脚本: createPlatformClient({ baseUrl, token }).daq.nodes()
|
|
6252
|
+
// 3) 浏览器: createPlatformClient({ baseUrl: '' }) 同源相对路径
|
|
6253
|
+
// 资源方法返回原始 JSON body(data 字段已解包);4xx/5xx 抛错(含 status)。
|
|
6254
|
+
// ============================================================
|
|
6255
|
+
|
|
6256
|
+
function createPlatformClient({ baseUrl = '', token, logger, timeoutMs = 10000 } = {}) {
|
|
6257
|
+
// baseUrl 支持函数(延迟解析):插件宿主的监听端口在 nitro listen 钩子后才确定
|
|
6258
|
+
const resolveBase = () => String(typeof baseUrl === 'function' ? baseUrl() : (baseUrl ?? '')).replace(/\/+$/, '');
|
|
6259
|
+
let authToken = token ?? null;
|
|
6260
|
+
|
|
6261
|
+
async function call(method, path, body, opt = {}) {
|
|
6262
|
+
const base = resolveBase();
|
|
6263
|
+
const headers = { accept: 'application/json', ...(opt.headers ?? {}) };
|
|
6264
|
+
if (authToken) headers.authorization = `Bearer ${authToken}`;
|
|
6265
|
+
if (body !== undefined) headers['content-type'] = 'application/json';
|
|
6266
|
+
const res = await fetch(`${base}${path}`, {
|
|
6267
|
+
method,
|
|
6268
|
+
headers,
|
|
6269
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
6270
|
+
signal: AbortSignal.timeout(opt.timeoutMs ?? timeoutMs),
|
|
6271
|
+
});
|
|
6272
|
+
const json = await res.json().catch(() => null);
|
|
6273
|
+
if (!res.ok) {
|
|
6274
|
+
const err = new Error(json?.message ?? `HTTP ${res.status} ${path}`);
|
|
6275
|
+
err.status = res.status;
|
|
6276
|
+
err.body = json;
|
|
6277
|
+
if (logger) logger.warn(`API ${method} ${path} → ${res.status}`);
|
|
6278
|
+
throw err
|
|
6279
|
+
}
|
|
6280
|
+
// 平台统一信封 { code, message, data }:HTTP 200 但业务 code 非 0 也是错误
|
|
6281
|
+
// (不做此检查插件会把 error 信封解包成 null 当成功用)
|
|
6282
|
+
if (json && typeof json === 'object' && 'code' in json && json.code !== 0) {
|
|
6283
|
+
const err = new Error(json.message ?? `业务错误 ${json.code} ${path}`);
|
|
6284
|
+
err.status = res.status;
|
|
6285
|
+
err.code = json.code;
|
|
6286
|
+
err.body = json;
|
|
6287
|
+
if (logger) logger.warn(`API ${method} ${path} → code ${json.code}`);
|
|
6288
|
+
throw err
|
|
6289
|
+
}
|
|
6290
|
+
// 非信封原样返回
|
|
6291
|
+
return json && typeof json === 'object' && 'data' in json && 'code' in json ? json.data : json
|
|
6292
|
+
}
|
|
6293
|
+
|
|
6294
|
+
const resource = root => ({
|
|
6295
|
+
list: (query = {}) => call('GET', `${root}${toQuery(query)}`),
|
|
6296
|
+
get: id => call('GET', `${root}/${id}`),
|
|
6297
|
+
create: body => call('POST', root, body),
|
|
6298
|
+
update: (id, patch) => call('PATCH', `${root}/${id}`, patch),
|
|
6299
|
+
remove: id => call('DELETE', `${root}/${id}`),
|
|
6300
|
+
});
|
|
6301
|
+
|
|
6302
|
+
const client = {
|
|
6303
|
+
/** 底层调用(任意平台路径;自动带 token 与信封解包) */
|
|
6304
|
+
call,
|
|
6305
|
+
get: (path, query = {}) => call('GET', `${path}${toQuery(query)}`),
|
|
6306
|
+
post: (path, body) => call('POST', path, body),
|
|
6307
|
+
patch: (path, body) => call('PATCH', path, body),
|
|
6308
|
+
delete: path => call('DELETE', path),
|
|
6309
|
+
setToken: (t) => {
|
|
6310
|
+
authToken = t ?? null;
|
|
6311
|
+
return client
|
|
6312
|
+
},
|
|
6313
|
+
/** 平台健康(免鉴权) */
|
|
6314
|
+
ping: () => call('GET', '/api/plugins/manifest'),
|
|
6315
|
+
|
|
6316
|
+
// ---- 业务资源面 ----
|
|
6317
|
+
users: {
|
|
6318
|
+
...resource('/api/users'),
|
|
6319
|
+
login: (email, password) => call('POST', '/api/users/login', { email, password }),
|
|
6320
|
+
me: () => call('GET', '/api/users/me'),
|
|
6321
|
+
},
|
|
6322
|
+
lines: {
|
|
6323
|
+
...resource('/api/workshop/dcw/lines'),
|
|
6324
|
+
start: (id, recipeId = '') => call('POST', `/api/workshop/dcw/lines/${id}/start`, { recipeId }),
|
|
6325
|
+
stop: id => call('POST', `/api/workshop/dcw/lines/${id}/stop`),
|
|
6326
|
+
},
|
|
6327
|
+
products: resource('/api/workshop/dcw/products'),
|
|
6328
|
+
recipes: resource('/api/workshop/dcw/recipes'),
|
|
6329
|
+
dcwNodes: resource('/api/workshop/dcw'),
|
|
6330
|
+
daqNodes: {
|
|
6331
|
+
...resource('/api/workshop/daq'),
|
|
6332
|
+
alarms: () => call('GET', '/api/workshop/daq/alarms'),
|
|
6333
|
+
},
|
|
6334
|
+
templates: {
|
|
6335
|
+
daq: () => call('GET', '/api/workshop/daq').then(d => d?.templates ?? []),
|
|
6336
|
+
dcw: () => call('GET', '/api/workshop/dcw').then(d => d?.templates ?? []),
|
|
6337
|
+
},
|
|
6338
|
+
twins: resource('/api/workshop/device-twins'),
|
|
6339
|
+
teams: resource('/api/workshop/teams'),
|
|
6340
|
+
agents: resource('/api/workshop/agents'),
|
|
6341
|
+
channels: resource('/api/workshop/channels'),
|
|
6342
|
+
permissions: {
|
|
6343
|
+
/** admin:全量产线 + 用户(含 channels/grants)总览 */
|
|
6344
|
+
overview: () => call('GET', '/api/workshop/permissions'),
|
|
6345
|
+
/** admin:批量设置用户产线授权 { userId, grants: [{ lineId, mode: 'readonly'|'operate'|null }] } */
|
|
6346
|
+
set: payload => call('PUT', '/api/workshop/permissions', payload),
|
|
6347
|
+
},
|
|
6348
|
+
plugins: {
|
|
6349
|
+
manifest: () => call('GET', '/api/plugins/manifest'),
|
|
6350
|
+
},
|
|
6351
|
+
};
|
|
6352
|
+
return client
|
|
6353
|
+
}
|
|
6354
|
+
|
|
6355
|
+
function toQuery(query) {
|
|
6356
|
+
const entries = Object.entries(query ?? {}).filter(([, v]) => v !== undefined && v !== null && v !== '');
|
|
6357
|
+
if (!entries.length) return ''
|
|
6358
|
+
return `?${new URLSearchParams(Object.fromEntries(entries.map(([k, v]) => [k, String(v)]))).toString()}`
|
|
6514
6359
|
}
|
|
6515
6360
|
|
|
6516
|
-
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6361
|
+
// ============================================================
|
|
6362
|
+
// AgentWorkShop SDK — 服务端插件上下文工厂(宿主调用;插件经 setup(ctx) 获得)
|
|
6363
|
+
// ------------------------------------------------------------
|
|
6364
|
+
// ctx 形态(运行时完整变量面):
|
|
6365
|
+
// 身份 ctx.name / ctx.scope('home'|'project') / ctx.dir / ctx.sdkVersion
|
|
6366
|
+
// 钩子 ctx.hooks HookBus(生命周期 + event:*) [SDK]
|
|
6367
|
+
// 日志 ctx.logger { debug, info, warn, error } 插件名前缀 [SDK]
|
|
6368
|
+
// 配置 ctx.config { get(key), all(), onChange(fn) } [SDK]
|
|
6369
|
+
// 存储 ctx.kv { get,set,all,bump } 内存态+防抖落盘 [SDK]
|
|
6370
|
+
// 定时 ctx.timer { setInterval, setTimeout } 服务关闭自动回收 [SDK]
|
|
6371
|
+
// 清理 ctx.onDispose(fn) / ctx.subscriptions [SDK]
|
|
6372
|
+
// 路由 ctx.route(method, path, handler) → /api/plugins/<name>… [SDK]
|
|
6373
|
+
// 平台 ctx.api 平台 REST 客户端(lines/daq/dcw/twins/teams…) [SDK]
|
|
6374
|
+
// 网络 ctx.http { get, post } 带超时 fetch(仅 http/https) [SDK]
|
|
6375
|
+
// 事件 ctx.events { on(type,fn), off } scene 实时事件 [SDK]
|
|
6376
|
+
// 路径 ctx.paths { home, configRoot, dataDir } [SDK]
|
|
6377
|
+
// ============================================================
|
|
6378
|
+
|
|
6379
|
+
const SDK_VERSION = '0.3.0';
|
|
6380
|
+
|
|
6381
|
+
/** 允许的对外请求协议守卫(拒绝 file:/data: 等;宿主/插件同守此规则) */
|
|
6382
|
+
function safeUrl(raw, timeoutMs = 8000) {
|
|
6383
|
+
const u = new URL(String(raw));
|
|
6384
|
+
if (u.protocol !== 'http:' && u.protocol !== 'https:')
|
|
6385
|
+
throw new Error(`协议不允许: ${u.protocol}(仅 http/https)`)
|
|
6386
|
+
return { signal: AbortSignal.timeout(timeoutMs) }
|
|
6387
|
+
}
|
|
6388
|
+
|
|
6389
|
+
/**
|
|
6390
|
+
* 创建服务端插件上下文。
|
|
6391
|
+
* @param {{ name, scope, dir, hooks, logger, config, paths, emitter, onDispose, selfOrigin }} opts 宿主装配
|
|
6392
|
+
*/
|
|
6393
|
+
function createPluginContext(opts) {
|
|
6394
|
+
const { name, scope, dir, hooks, config, paths, emitter } = opts;
|
|
6395
|
+
// 规范化 logger:宿主实现缺级时兜底 no-op(插件可用全套 debug/info/warn/error)
|
|
6396
|
+
const logger = {
|
|
6397
|
+
debug: () => {},
|
|
6398
|
+
info: () => {},
|
|
6399
|
+
warn: () => {},
|
|
6400
|
+
error: () => {},
|
|
6401
|
+
...(opts.logger ?? {}),
|
|
6402
|
+
};
|
|
6403
|
+
const onDispose = (fn) => {
|
|
6404
|
+
return fn
|
|
6405
|
+
};
|
|
6406
|
+
|
|
6407
|
+
// ---- 定时器:自动登记回收,杜绝插件定时器泄漏 ----
|
|
6408
|
+
const timer = {
|
|
6409
|
+
setInterval: (fn, ms, ...rest) => {
|
|
6410
|
+
const id = setInterval(fn, ms, ...rest);
|
|
6411
|
+
if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
|
|
6412
|
+
return id
|
|
6413
|
+
},
|
|
6414
|
+
setTimeout: (fn, ms, ...rest) => {
|
|
6415
|
+
const id = setTimeout(fn, ms, ...rest);
|
|
6416
|
+
if (typeof id === 'object' && id !== null && 'unref' in id) id.unref?.();
|
|
6417
|
+
return id
|
|
6418
|
+
},
|
|
6419
|
+
};
|
|
6420
|
+
|
|
6421
|
+
// ---- 插件私有持久化:内存态为准 + 200ms 防抖落盘 —— 高频钩子(daq:sample)
|
|
6422
|
+
// 与低频钩子(line:stop)并发时无 read-modify-write 竞态(JS 同步内存操作原子) ----
|
|
6423
|
+
const kvDir = join(paths.dataDir, 'plugins', name);
|
|
6424
|
+
const kvFile = join(kvDir, 'kv.json');
|
|
6425
|
+
const kvState = (() => {
|
|
6426
|
+
try {
|
|
6427
|
+
return JSON.parse(readFileSync(kvFile, 'utf8'))
|
|
6428
|
+
}
|
|
6429
|
+
catch {
|
|
6430
|
+
return {}
|
|
6431
|
+
}
|
|
6432
|
+
})();
|
|
6433
|
+
let kvFlushTimer = null;
|
|
6434
|
+
const flushKvNow = () => {
|
|
6435
|
+
try {
|
|
6436
|
+
mkdirSync(kvDir, { recursive: true });
|
|
6437
|
+
const tmp = `${kvFile}.${process.pid}.tmp`;
|
|
6438
|
+
writeFileSync(tmp, `${JSON.stringify(kvState, null, 2)}\n`, 'utf8');
|
|
6439
|
+
renameSync(tmp, kvFile);
|
|
6440
|
+
}
|
|
6441
|
+
catch (err) {
|
|
6442
|
+
// 磁盘异常不阻断插件,但不再静默:持久化失败至少要可见
|
|
6443
|
+
console.warn('[sdk] kv 落盘失败:', err?.message ?? err);
|
|
6444
|
+
}
|
|
6445
|
+
};
|
|
6446
|
+
const kvFlush = () => {
|
|
6447
|
+
clearTimeout(kvFlushTimer);
|
|
6448
|
+
kvFlushTimer = setTimeout(flushKvNow, 200);
|
|
6449
|
+
};
|
|
6450
|
+
|
|
6451
|
+
const ctx = {
|
|
6452
|
+
name,
|
|
6453
|
+
scope,
|
|
6454
|
+
dir: resolve$1(dir),
|
|
6455
|
+
sdkVersion: SDK_VERSION,
|
|
6456
|
+
hooks, // 宿主全局总线(与事件桥同源)
|
|
6457
|
+
logger,
|
|
6458
|
+
config: {
|
|
6459
|
+
get: key => config?.effective?.[key],
|
|
6460
|
+
all: () => ({ ...config?.effective }),
|
|
6461
|
+
/** 运行时覆盖变更订阅(runtime-settings.json 变化;宿主 fs.watch 驱动) */
|
|
6462
|
+
onChange: fn => hooks.on('config:changed', fn),
|
|
6463
|
+
},
|
|
6464
|
+
paths: { ...paths },
|
|
6465
|
+
dataDir: kvDir,
|
|
6466
|
+
kv: {
|
|
6467
|
+
get: key => kvState[key],
|
|
6468
|
+
set: (key, value) => {
|
|
6469
|
+
kvState[key] = value;
|
|
6470
|
+
kvFlush();
|
|
6471
|
+
return value
|
|
6472
|
+
},
|
|
6473
|
+
all: () => ({ ...kvState }),
|
|
6474
|
+
bump: (key, by = 1) => {
|
|
6475
|
+
kvState[key] = (Number(kvState[key]) || 0) + by;
|
|
6476
|
+
kvFlush();
|
|
6477
|
+
return kvState[key]
|
|
6478
|
+
},
|
|
6479
|
+
},
|
|
6480
|
+
timer,
|
|
6481
|
+
onDispose,
|
|
6482
|
+
/** 产线权限面(宿主注入;未提供时降级为不可用占位):
|
|
6483
|
+
* lineMode(user,lineId) → 'none'|'readonly'|'operate'
|
|
6484
|
+
* visibleLineIds(user) → Set<lineId>|null(全量)
|
|
6485
|
+
* listGrants(userId) → [{lineId,mode,grantedBy,grantedAt}]
|
|
6486
|
+
* setGrants(userId, [{lineId,mode}]) → 写授权(需 admin 上下文)
|
|
6487
|
+
* 变更事件: hooks.on('permissions:changed', { userId }) */
|
|
6488
|
+
permissions: opts.permissions ?? {
|
|
6489
|
+
lineMode: () => 'none',
|
|
6490
|
+
visibleLineIds: () => new Set(),
|
|
6491
|
+
listGrants: () => [],
|
|
6492
|
+
setGrants: () => { throw new Error('[sdk] ctx.permissions 未由宿主注入') },
|
|
6493
|
+
},
|
|
6494
|
+
/** 订阅式清理对象({ dispose(){} })集中登记 */
|
|
6495
|
+
subscriptions: {
|
|
6496
|
+
add: (d) => {
|
|
6497
|
+
return d
|
|
6498
|
+
},
|
|
6499
|
+
},
|
|
6500
|
+
route: (method, path, handler) => emitter?.registerRoute(name, method, path, handler),
|
|
6501
|
+
/** 平台 REST 客户端(自环 origin 延迟解析;鉴权端点请 ctx.api.setToken(token)) */
|
|
6502
|
+
api: createPlatformClient({
|
|
6503
|
+
baseUrl: typeof opts.selfOrigin === 'function' ? opts.selfOrigin : () => opts.selfOrigin,
|
|
6504
|
+
logger,
|
|
6505
|
+
}),
|
|
6506
|
+
http: {
|
|
6507
|
+
get: (url, opts2 = {}) => fetch(url, { ...safeUrl(url, opts2.timeoutMs), ...opts2 }),
|
|
6508
|
+
post: (url, body, opts2 = {}) => fetch(url, {
|
|
6509
|
+
method: 'POST',
|
|
6510
|
+
headers: { 'content-type': 'application/json', ...(opts2.headers ?? {}) },
|
|
6511
|
+
body: JSON.stringify(body ?? {}),
|
|
6512
|
+
...safeUrl(url, opts2.timeoutMs),
|
|
6513
|
+
}),
|
|
6514
|
+
},
|
|
6515
|
+
events: {
|
|
6516
|
+
on: (type, fn) => hooks.on(type === '*' ? '*' : `event:${type}`, fn),
|
|
6517
|
+
off: (type, fn) => hooks.off(type === '*' ? '*' : `event:${type}`, fn),
|
|
6518
|
+
},
|
|
6519
|
+
};
|
|
6520
|
+
return ctx
|
|
6521
|
+
}
|
|
6522
|
+
|
|
6523
|
+
/** 宿主路由表(exact-match;插件 API 挂 /api/plugins/<name><path>) */
|
|
6524
|
+
function createRouteTable() {
|
|
6525
|
+
const table = new Map(); // `${method} ${name} ${path}` → handler
|
|
6526
|
+
return {
|
|
6527
|
+
register(name, method, path, handler) {
|
|
6528
|
+
if (typeof handler !== 'function') return false
|
|
6529
|
+
const key = `${String(method).toUpperCase()} ${name} ${path.startsWith('/') ? path : `/${path}`}`;
|
|
6530
|
+
table.set(key, handler);
|
|
6531
|
+
return true
|
|
6532
|
+
},
|
|
6533
|
+
resolve(name, method, path) {
|
|
6534
|
+
return table.get(`${String(method).toUpperCase()} ${name} ${path.startsWith('/') ? path : `/${path}`}`) ?? null
|
|
6535
|
+
},
|
|
6536
|
+
byPlugin(name) {
|
|
6537
|
+
const out = [];
|
|
6538
|
+
for (const key of table.keys()) {
|
|
6539
|
+
const [m, n, ...rest] = key.split(' ');
|
|
6540
|
+
if (n === name) out.push({ method: m, path: rest.join('/') });
|
|
6541
|
+
}
|
|
6542
|
+
return out
|
|
6543
|
+
},
|
|
6544
|
+
get size() {
|
|
6545
|
+
return table.size
|
|
6546
|
+
},
|
|
6547
|
+
}
|
|
6548
|
+
}
|
|
6549
|
+
|
|
6550
|
+
/** 校验插件入口导出(宿主装载前的形态检查) */
|
|
6551
|
+
function validatePluginModule(mod, source) {
|
|
6552
|
+
const def = mod?.default ?? mod;
|
|
6553
|
+
if (!def || typeof def !== 'object' || typeof def.name !== 'string' || !def.name.trim()) {
|
|
6554
|
+
return { ok: false, error: `插件缺少 name 或不是对象: ${source}` }
|
|
6555
|
+
}
|
|
6556
|
+
if (def.setup && typeof def.setup !== 'function') {
|
|
6557
|
+
return { ok: false, error: `插件 setup 不是函数: ${def.name}` }
|
|
6558
|
+
}
|
|
6559
|
+
if (def.client && typeof def.client !== 'string') {
|
|
6560
|
+
return { ok: false, error: `插件 client 必须是相对路径字符串: ${def.name}` }
|
|
6561
|
+
}
|
|
6562
|
+
return { ok: true, def }
|
|
6529
6563
|
}
|
|
6530
6564
|
|
|
6531
6565
|
// ============================================================
|
|
@@ -6545,6 +6579,23 @@ function validatePluginModule(mod, source) {
|
|
|
6545
6579
|
// 错误隔离:单插件装载/执行失败记入 failures,绝不拖垮主服务。
|
|
6546
6580
|
// ============================================================
|
|
6547
6581
|
|
|
6582
|
+
// 延迟解析的产线权限服务(esbuild/别名下避免 nitro 打包循环导入;失败降级为拒绝一切)
|
|
6583
|
+
let permissions$1 = null;
|
|
6584
|
+
let userRepository$1 = null;
|
|
6585
|
+
async function loadPermissions() {
|
|
6586
|
+
if (permissions$1) return
|
|
6587
|
+
try {
|
|
6588
|
+
permissions$1 = await Promise.resolve().then(function () { return permissions; });
|
|
6589
|
+
userRepository$1 = await Promise.resolve().then(function () { return user_repository; }).then(m => m.userRepository);
|
|
6590
|
+
}
|
|
6591
|
+
catch (err) {
|
|
6592
|
+
hostLoggerFallback()?.warn('权限服务加载失败(插件 ctx.permissions 降级):', err?.message);
|
|
6593
|
+
}
|
|
6594
|
+
}
|
|
6595
|
+
function hostLoggerFallback() {
|
|
6596
|
+
return globalThis.__awPluginHost?.logger ?? console
|
|
6597
|
+
}
|
|
6598
|
+
|
|
6548
6599
|
const g$r = globalThis;
|
|
6549
6600
|
|
|
6550
6601
|
function log$t() {
|
|
@@ -6689,6 +6740,9 @@ async function loadAllPlugins(host, { config, paths }) {
|
|
|
6689
6740
|
const disabled = readDisabledSet(homeDir);
|
|
6690
6741
|
host.disabledSet = disabled;
|
|
6691
6742
|
|
|
6743
|
+
// 产线权限服务(ctx.permissions 注入用;失败降级)
|
|
6744
|
+
await loadPermissions();
|
|
6745
|
+
|
|
6692
6746
|
const entries = discoverPluginDirs(host.cwd);
|
|
6693
6747
|
if (entries.length) host.logger.info(`发现 ${entries.length} 个插件(停用 ${disabled.size}),开始装载 ...`);
|
|
6694
6748
|
|
|
@@ -6775,6 +6829,20 @@ async function loadAllPlugins(host, { config, paths }) {
|
|
|
6775
6829
|
return fn
|
|
6776
6830
|
},
|
|
6777
6831
|
selfOrigin: () => selfOriginRef(host),
|
|
6832
|
+
// 产线权限拓展面(SDK ctx.permissions):插件可查询/管理用户×产线授权
|
|
6833
|
+
permissions: {
|
|
6834
|
+
lineMode: (user, lineId) => permissions$1.lineMode(user, lineId),
|
|
6835
|
+
visibleLineIds: user => permissions$1.visibleLineIds(user),
|
|
6836
|
+
listGrants: userId => userRepository$1.listGrants(userId),
|
|
6837
|
+
setGrants: (userId, entries, grantedBy = 'plugin') => {
|
|
6838
|
+
for (const g of (entries ?? [])) {
|
|
6839
|
+
if (!g?.lineId) continue
|
|
6840
|
+
userRepository$1.setGrant(userId, String(g.lineId), (g.mode ?? null), grantedBy);
|
|
6841
|
+
}
|
|
6842
|
+
permissions$1.notifyGrantsChanged(userId);
|
|
6843
|
+
return userRepository$1.listGrants(userId)
|
|
6844
|
+
},
|
|
6845
|
+
},
|
|
6778
6846
|
});
|
|
6779
6847
|
// DAQ 扩展面(v2 帧管线):插件注册自定义驱动与下沉处理器。
|
|
6780
6848
|
// 桥经 globalThis 排队 —— daq 模块晚于插件宿主装载时,注册项先排队、
|
|
@@ -6919,7 +6987,10 @@ function ensureStateWatcher(host) {
|
|
|
6919
6987
|
mkdirSync(dirname$1(statePath), { recursive: true });
|
|
6920
6988
|
if (!existsSync(statePath)) writeDisabledSet(modePaths(host.cwd).homeDir, new Set());
|
|
6921
6989
|
let debounce = null;
|
|
6922
|
-
watch
|
|
6990
|
+
// watch 目录而非文件:writeDisabledSet 用 rename 原子替换,POSIX 的文件级
|
|
6991
|
+
// watch 挂在旧 inode 上,首次启停后静默失效;目录监听对 rename 稳定
|
|
6992
|
+
watch$1(dirname$1(statePath), (_event, filename) => {
|
|
6993
|
+
if (filename && filename !== 'plugins-state.json') return
|
|
6923
6994
|
clearTimeout(debounce);
|
|
6924
6995
|
debounce = setTimeout(() => {
|
|
6925
6996
|
void reloadPluginHost();
|
|
@@ -6971,7 +7042,7 @@ function readClientScript(name) {
|
|
|
6971
7042
|
return { status: 200, code: readFileSync(rec.clientPath, 'utf8'), contentType: 'text/javascript; charset=utf-8' }
|
|
6972
7043
|
}
|
|
6973
7044
|
|
|
6974
|
-
/** 清单(非敏感只读;含启停状态与路由) */
|
|
7045
|
+
/** 清单(非敏感只读;含启停状态与路由)。builtin = 随项目检出提供的内置示例插件 */
|
|
6975
7046
|
function pluginManifest() {
|
|
6976
7047
|
const host = getPluginHost();
|
|
6977
7048
|
if (!host) return []
|
|
@@ -6980,6 +7051,7 @@ function pluginManifest() {
|
|
|
6980
7051
|
version: r.version,
|
|
6981
7052
|
description: r.description,
|
|
6982
7053
|
scope: r.scope,
|
|
7054
|
+
builtin: r.scope === 'project',
|
|
6983
7055
|
enabled: r.enabled !== false,
|
|
6984
7056
|
hasClient: Boolean(r.clientPath),
|
|
6985
7057
|
routes: host.routes.byPlugin(r.name),
|
|
@@ -7005,12 +7077,44 @@ async function shutdownPluginHost() {
|
|
|
7005
7077
|
host.logger.info('插件清理完成,已发出 server:close');
|
|
7006
7078
|
}
|
|
7007
7079
|
|
|
7080
|
+
const host = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
7081
|
+
__proto__: null,
|
|
7082
|
+
discoverPluginDirs: discoverPluginDirs,
|
|
7083
|
+
emitDaqFrame: emitDaqFrame,
|
|
7084
|
+
emitDaqSample: emitDaqSample,
|
|
7085
|
+
emitDcwWrite: emitDcwWrite,
|
|
7086
|
+
emitLineLifecycle: emitLineLifecycle,
|
|
7087
|
+
emitPluginEvent: emitPluginEvent,
|
|
7088
|
+
getPluginHost: getPluginHost,
|
|
7089
|
+
initPluginHost: initPluginHost,
|
|
7090
|
+
pluginManifest: pluginManifest,
|
|
7091
|
+
readClientScript: readClientScript,
|
|
7092
|
+
readDisabledSet: readDisabledSet,
|
|
7093
|
+
reloadPluginHost: reloadPluginHost,
|
|
7094
|
+
setPluginEnabled: setPluginEnabled,
|
|
7095
|
+
shutdownPluginHost: shutdownPluginHost,
|
|
7096
|
+
statePathFor: statePathFor,
|
|
7097
|
+
writeDisabledSet: writeDisabledSet
|
|
7098
|
+
}, Symbol.toStringTag, { value: 'Module' }));
|
|
7099
|
+
|
|
7008
7100
|
const AEP_VERSION$1 = 1;
|
|
7009
7101
|
const g$q = globalThis;
|
|
7010
7102
|
function peers() {
|
|
7011
7103
|
var _a;
|
|
7012
7104
|
return (_a = g$q.__sceneEventPeers) != null ? _a : g$q.__sceneEventPeers = /* @__PURE__ */ new Set();
|
|
7013
7105
|
}
|
|
7106
|
+
function setPeerVisibleLines(peer, visible) {
|
|
7107
|
+
peer.__awVisibleLines = visible;
|
|
7108
|
+
}
|
|
7109
|
+
function peerSeesLine(peer, lineId) {
|
|
7110
|
+
const visible = peer.__awVisibleLines;
|
|
7111
|
+
if (visible == null) return true;
|
|
7112
|
+
return visible.has(lineId);
|
|
7113
|
+
}
|
|
7114
|
+
function payloadLineId(payload) {
|
|
7115
|
+
const lid = payload == null ? void 0 : payload.lineId;
|
|
7116
|
+
return typeof lid === "string" && lid !== "" ? lid : void 0;
|
|
7117
|
+
}
|
|
7014
7118
|
function registerScenePeer(peer) {
|
|
7015
7119
|
peers().add(peer);
|
|
7016
7120
|
}
|
|
@@ -7023,8 +7127,10 @@ function sceneEventPeerCount() {
|
|
|
7023
7127
|
function broadcastSceneEvent(type, payload) {
|
|
7024
7128
|
emitPluginEvent(type, payload);
|
|
7025
7129
|
if (peers().size === 0) return;
|
|
7130
|
+
const lineId = payloadLineId(payload);
|
|
7026
7131
|
const frame = JSON.stringify({ v: AEP_VERSION$1, type, seq: 0, at: (/* @__PURE__ */ new Date()).toISOString(), channelId: "", payload });
|
|
7027
7132
|
for (const peer of peers()) {
|
|
7133
|
+
if (lineId !== void 0 && !peerSeesLine(peer, lineId)) continue;
|
|
7028
7134
|
try {
|
|
7029
7135
|
peer.send(frame);
|
|
7030
7136
|
} catch {
|
|
@@ -7050,6 +7156,7 @@ const sceneEvents = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.definePropert
|
|
|
7050
7156
|
broadcastSceneEvent: broadcastSceneEvent,
|
|
7051
7157
|
registerScenePeer: registerScenePeer,
|
|
7052
7158
|
sceneEventPeerCount: sceneEventPeerCount,
|
|
7159
|
+
setPeerVisibleLines: setPeerVisibleLines,
|
|
7053
7160
|
unregisterScenePeer: unregisterScenePeer
|
|
7054
7161
|
}, Symbol.toStringTag, { value: 'Module' }));
|
|
7055
7162
|
|
|
@@ -7713,6 +7820,14 @@ let cache$1 = null;
|
|
|
7713
7820
|
const TTL_MS = 3e3;
|
|
7714
7821
|
function effective() {
|
|
7715
7822
|
var _a, _b;
|
|
7823
|
+
try {
|
|
7824
|
+
const svc = globalThis.__systemConfig;
|
|
7825
|
+
if ((svc == null ? void 0 : svc.ready) && svc.snapshot) {
|
|
7826
|
+
const snap = svc.snapshot();
|
|
7827
|
+
if (Object.keys(snap.effective).length > 0) return snap.effective;
|
|
7828
|
+
}
|
|
7829
|
+
} catch {
|
|
7830
|
+
}
|
|
7716
7831
|
if (cache$1 && Date.now() - cache$1.at < TTL_MS) return cache$1.effective;
|
|
7717
7832
|
const runMode = resolveRunMode({
|
|
7718
7833
|
cwd: process.cwd(),
|
|
@@ -7827,11 +7942,11 @@ async function backupOne(src, target) {
|
|
|
7827
7942
|
}
|
|
7828
7943
|
}
|
|
7829
7944
|
const tmp = `${target}.tmp`;
|
|
7830
|
-
|
|
7945
|
+
await copyFile(src, tmp);
|
|
7831
7946
|
try {
|
|
7832
7947
|
renameSync(tmp, target);
|
|
7833
7948
|
} catch {
|
|
7834
|
-
|
|
7949
|
+
await copyFile(src, target);
|
|
7835
7950
|
try {
|
|
7836
7951
|
rmSync(tmp);
|
|
7837
7952
|
} catch {
|
|
@@ -8181,14 +8296,14 @@ class SqliteTimeSeriesAdapter {
|
|
|
8181
8296
|
const from = (_b = opts.fromMs) != null ? _b : 0;
|
|
8182
8297
|
const to = (_c = opts.toMs) != null ? _c : Date.now();
|
|
8183
8298
|
if (opts.bucketMs && opts.bucketMs >= 100) {
|
|
8184
|
-
const bucket = opts.bucketMs;
|
|
8299
|
+
const bucket = Math.round(Number(opts.bucketMs));
|
|
8185
8300
|
const rows2 = this.db.prepare(`
|
|
8186
|
-
SELECT (ts_ms /
|
|
8301
|
+
SELECT (ts_ms / ${bucket}) * ${bucket} AS b_at,
|
|
8187
8302
|
AVG(value) AS avg, MIN(value) AS min, MAX(value) AS max, COUNT(*) AS cnt
|
|
8188
8303
|
FROM daq_samples
|
|
8189
8304
|
WHERE node_id = :id AND ts_ms >= :from AND ts_ms <= :to
|
|
8190
8305
|
GROUP BY b_at ORDER BY b_at DESC LIMIT :lim
|
|
8191
|
-
`).all({ ":id": nodeId, ":from": from, ":to": to, ":
|
|
8306
|
+
`).all({ ":id": nodeId, ":from": from, ":to": to, ":lim": limit });
|
|
8192
8307
|
return rows2.map((r) => ({ at: Number(r.b_at), avg: r.avg, min: r.min, max: r.max, cnt: Number(r.cnt) }));
|
|
8193
8308
|
}
|
|
8194
8309
|
const rows = this.db.prepare(`
|
|
@@ -8230,11 +8345,12 @@ class SqliteTimeSeriesAdapter {
|
|
|
8230
8345
|
params.push((_c = q.toMs) != null ? _c : Date.now());
|
|
8231
8346
|
const limit = Math.min((_d = q.limit) != null ? _d : 2e3, 1e4);
|
|
8232
8347
|
if (q.bucketMs && q.bucketMs >= 100) {
|
|
8348
|
+
const bucket = Math.round(Number(q.bucketMs));
|
|
8233
8349
|
const rows2 = this.db.prepare(`
|
|
8234
|
-
SELECT node_id, (ts_ms /
|
|
8350
|
+
SELECT node_id, (ts_ms / ${bucket}) * ${bucket} AS b_at, AVG(value) AS avg, MIN(value) AS min, MAX(value) AS max, COUNT(*) AS cnt
|
|
8235
8351
|
FROM daq_samples WHERE ${where.join(" AND ")}
|
|
8236
8352
|
GROUP BY node_id, b_at ORDER BY b_at ASC LIMIT ?
|
|
8237
|
-
`).all(
|
|
8353
|
+
`).all(...params, limit);
|
|
8238
8354
|
for (const r of rows2) {
|
|
8239
8355
|
const list = (_e = out.get(r.node_id)) != null ? _e : [];
|
|
8240
8356
|
list.push({ at: Number(r.b_at), avg: r.avg, min: r.min, max: r.max, cnt: Number(r.cnt) });
|
|
@@ -8891,6 +9007,14 @@ class InProcQueueAdapter {
|
|
|
8891
9007
|
this.consumers.delete(fn);
|
|
8892
9008
|
};
|
|
8893
9009
|
}
|
|
9010
|
+
/** 释放消费泵(rebuild 换装前调用,防定时器泄漏) */
|
|
9011
|
+
close() {
|
|
9012
|
+
if (this.pump) {
|
|
9013
|
+
clearInterval(this.pump);
|
|
9014
|
+
this.pump = null;
|
|
9015
|
+
}
|
|
9016
|
+
this.consumers.clear();
|
|
9017
|
+
}
|
|
8894
9018
|
drain() {
|
|
8895
9019
|
if (this.queue.length === 0 || this.consumers.size === 0) return;
|
|
8896
9020
|
const batch = this.queue.splice(0, this.queue.length);
|
|
@@ -8991,6 +9115,18 @@ class MqttQueueAdapter {
|
|
|
8991
9115
|
this.consumers.delete(fn);
|
|
8992
9116
|
};
|
|
8993
9117
|
}
|
|
9118
|
+
/** 断开 MQTT 连接并清理订阅(rebuild 换装前调用,防 socket/keepalive 泄漏) */
|
|
9119
|
+
async close() {
|
|
9120
|
+
this.consumers.clear();
|
|
9121
|
+
const c = this.client;
|
|
9122
|
+
this.client = null;
|
|
9123
|
+
if (c) {
|
|
9124
|
+
try {
|
|
9125
|
+
await new Promise((r) => c.end(false, () => r()));
|
|
9126
|
+
} catch {
|
|
9127
|
+
}
|
|
9128
|
+
}
|
|
9129
|
+
}
|
|
8994
9130
|
}
|
|
8995
9131
|
|
|
8996
9132
|
const log$m = createLogger("daq.queue");
|
|
@@ -9004,9 +9140,10 @@ async function getDaqQueue() {
|
|
|
9004
9140
|
return g$j.__daqQueue;
|
|
9005
9141
|
}
|
|
9006
9142
|
async function rebuildDaqQueue(online, url) {
|
|
9007
|
-
var _a;
|
|
9143
|
+
var _a, _b, _c;
|
|
9144
|
+
await ((_b = (_a = g$j.__daqQueue) == null ? void 0 : _a.close) == null ? void 0 : _b.call(_a));
|
|
9008
9145
|
if (!online || !url) {
|
|
9009
|
-
if (((
|
|
9146
|
+
if (((_c = g$j.__daqQueue) == null ? void 0 : _c.backend) !== "inproc") {
|
|
9010
9147
|
g$j.__daqQueue = new InProcQueueAdapter();
|
|
9011
9148
|
await g$j.__daqQueue.init();
|
|
9012
9149
|
log$m.warn("[daq-queue] \u964D\u7EA7\u8FDB\u7A0B\u5185\u961F\u5217");
|
|
@@ -9085,6 +9222,10 @@ class SystemConfigService {
|
|
|
9085
9222
|
console.warn("[system-config] \u9057\u7559\u8BBE\u7F6E\u8FC1\u79FB\u5931\u8D25(\u4E0D\u963B\u65AD\u542F\u52A8):", String((_c = err == null ? void 0 : err.message) != null ? _c : err));
|
|
9086
9223
|
}
|
|
9087
9224
|
}
|
|
9225
|
+
/** 是否已完成 init()(descriptors 装载完毕;settings.ts 据此决定消费内存权威还是文件链) */
|
|
9226
|
+
get ready() {
|
|
9227
|
+
return this.descriptors.length > 0;
|
|
9228
|
+
}
|
|
9088
9229
|
/** Nitro 启动时调用:加载覆盖 → 应用到 runtimeConfig → 挂文件监听 */
|
|
9089
9230
|
init() {
|
|
9090
9231
|
this.descriptors = loadDescriptors();
|
|
@@ -11314,6 +11455,8 @@ class DaqController {
|
|
|
11314
11455
|
/** 绑定设备端到端回写:通道值进入 DeviceTwin.telemetry(键名 = 模板 telemetryKey 数据,缺省 templateKey);
|
|
11315
11456
|
* 状态随行:节点 alarm 派生自用户设置的量程/预警带(数据驱动),透传给孪生而非让孪生按硬编码阈值猜 */
|
|
11316
11457
|
__publicField$u(this, "pendingBackfill", /* @__PURE__ */ new Map());
|
|
11458
|
+
/** 同绑定 siblings 缓存(1s TTL):回写热路径不再逐样本全量 scan,O(N²)→O(N)/周期 */
|
|
11459
|
+
__publicField$u(this, "siblingsCache", /* @__PURE__ */ new Map());
|
|
11317
11460
|
/** 遥测 WS 推送(1s/设备节流):孪生状态/遥测事件化直推,前端全量轮询降级为断线兜底 */
|
|
11318
11461
|
__publicField$u(this, "twinPushAt", /* @__PURE__ */ new Map());
|
|
11319
11462
|
}
|
|
@@ -11427,7 +11570,7 @@ class DaqController {
|
|
|
11427
11570
|
return host.lineRun.recipeWindow(run.recipeId, node.id);
|
|
11428
11571
|
}
|
|
11429
11572
|
ingestNode(node, env, allowPublish) {
|
|
11430
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
11573
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
11431
11574
|
if (env.frame) {
|
|
11432
11575
|
this.ingestFrame(node, env, allowPublish);
|
|
11433
11576
|
return;
|
|
@@ -11438,24 +11581,25 @@ class DaqController {
|
|
|
11438
11581
|
templateRef: node.templateRef,
|
|
11439
11582
|
value: (_a = node.value) != null ? _a : env.value,
|
|
11440
11583
|
state: node.state,
|
|
11441
|
-
at: env.at
|
|
11584
|
+
at: env.at,
|
|
11585
|
+
lineId: (_b = node.lineId) != null ? _b : null
|
|
11442
11586
|
};
|
|
11443
|
-
(
|
|
11587
|
+
(_c = this.broadcast) == null ? void 0 : _c.call(this, "daq.reading", reading);
|
|
11444
11588
|
emitDaqSample(reading);
|
|
11445
11589
|
}
|
|
11446
11590
|
this.writeBackTelemetry(node);
|
|
11447
11591
|
const tsMs = Date.parse(env.at);
|
|
11448
|
-
const lineRun = (
|
|
11449
|
-
if (lineRun) (
|
|
11592
|
+
const lineRun = (_e = (_d = getDaqHostPorts()) == null ? void 0 : _d.lineRun.activeRun(node.lineId)) != null ? _e : null;
|
|
11593
|
+
if (lineRun) (_f = getDaqHostPorts()) == null ? void 0 : _f.lineRun.bumpTaggedSamples(node.lineId);
|
|
11450
11594
|
this.tsdbBuffer.push({
|
|
11451
11595
|
nodeId: node.id,
|
|
11452
11596
|
tsMs,
|
|
11453
11597
|
value: env.value,
|
|
11454
11598
|
state: node.state,
|
|
11455
|
-
lineId: (
|
|
11456
|
-
productId: (
|
|
11457
|
-
recipeId: (
|
|
11458
|
-
runId: (
|
|
11599
|
+
lineId: (_g = lineRun == null ? void 0 : lineRun.lineId) != null ? _g : null,
|
|
11600
|
+
productId: (_h = lineRun == null ? void 0 : lineRun.productId) != null ? _h : null,
|
|
11601
|
+
recipeId: (_i = lineRun == null ? void 0 : lineRun.recipeId) != null ? _i : null,
|
|
11602
|
+
runId: (_j = lineRun == null ? void 0 : lineRun.runId) != null ? _j : null
|
|
11459
11603
|
});
|
|
11460
11604
|
if (this.tsdbBuffer.length > TSDB_BUFFER_CAP) {
|
|
11461
11605
|
this.tsdbBuffer.splice(0, this.tsdbBuffer.length - TSDB_BUFFER_CAP);
|
|
@@ -11481,7 +11625,7 @@ class DaqController {
|
|
|
11481
11625
|
// ---------- 帧管线(v2:向量/图像;打标与告警复用标量链路同源机制)----------
|
|
11482
11626
|
/** 帧消费:元数据攒批落 daq_frames + 指标阈值告警(边沿)+ WS daq.frame(预览/缩略图引用) */
|
|
11483
11627
|
ingestFrame(node, env, allowPublish) {
|
|
11484
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
11628
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
11485
11629
|
const f = env.frame;
|
|
11486
11630
|
const tpl = findDaqTemplate(node.templateKey);
|
|
11487
11631
|
const tsMs = Date.parse(env.at);
|
|
@@ -11514,12 +11658,13 @@ class DaqController {
|
|
|
11514
11658
|
templateRef: node.templateRef,
|
|
11515
11659
|
kind: f.kind,
|
|
11516
11660
|
at: env.at,
|
|
11517
|
-
|
|
11661
|
+
lineId: (_l = node.lineId) != null ? _l : null,
|
|
11662
|
+
preview: f.kind === "vector" ? DaqController.previewOf((_m = f.points) != null ? _m : [], FRAME_PREVIEW_POINTS) : void 0,
|
|
11518
11663
|
metrics,
|
|
11519
11664
|
thumbUrl: f.kind === "image" && f.objectKey ? `/api/workshop/daq/${node.id}/frames/content?ts=${tsMs}&thumb=1` : void 0,
|
|
11520
11665
|
state: node.state
|
|
11521
11666
|
};
|
|
11522
|
-
(
|
|
11667
|
+
(_n = this.broadcast) == null ? void 0 : _n.call(this, "daq.frame", payload);
|
|
11523
11668
|
emitDaqFrame(payload);
|
|
11524
11669
|
}
|
|
11525
11670
|
/** 模板 metrics 规则评估:alarm 硬限沿 → handleAlarm/handleAlarmRecover;warn 只置节点态 */
|
|
@@ -11733,15 +11878,24 @@ class DaqController {
|
|
|
11733
11878
|
}
|
|
11734
11879
|
} finally {
|
|
11735
11880
|
this.tsdbWriting = false;
|
|
11881
|
+
if (this.tsdbBuffer.length > 0 || this.frameBuffer.length > 0) this.scheduleTsdbFlush();
|
|
11736
11882
|
}
|
|
11737
11883
|
}
|
|
11884
|
+
siblingsOf(bindingId) {
|
|
11885
|
+
const hit = this.siblingsCache.get(bindingId);
|
|
11886
|
+
if (hit && Date.now() - hit.at < 1e3) return hit.list;
|
|
11887
|
+
const list = this.repo.all().filter((n) => n.deviceBindingId === bindingId);
|
|
11888
|
+
if (this.siblingsCache.size > 500) this.siblingsCache.clear();
|
|
11889
|
+
this.siblingsCache.set(bindingId, { at: Date.now(), list });
|
|
11890
|
+
return list;
|
|
11891
|
+
}
|
|
11738
11892
|
writeBackTelemetry(node) {
|
|
11739
11893
|
var _a, _b, _c;
|
|
11740
11894
|
if (!node.deviceBindingId || node.value == null) return;
|
|
11741
11895
|
const host = getDaqHostPorts();
|
|
11742
11896
|
if (!host) return;
|
|
11743
11897
|
const key = (_b = (_a = findDaqTemplate(node.templateKey)) == null ? void 0 : _a.telemetryKey) != null ? _b : node.templateKey;
|
|
11744
|
-
const siblings = this.
|
|
11898
|
+
const siblings = this.siblingsOf(node.deviceBindingId);
|
|
11745
11899
|
const worst = siblings.some((n) => n.state === "alarm") ? "alarm" : siblings.some((n) => n.state === "warn") ? "warn" : "ok";
|
|
11746
11900
|
const acc = (_c = this.pendingBackfill.get(node.deviceBindingId)) != null ? _c : {};
|
|
11747
11901
|
acc[key] = node.value;
|
|
@@ -14153,6 +14307,11 @@ function createAlarmEventRepo(db) {
|
|
|
14153
14307
|
`SELECT ${ALARM_COLS} FROM alarm_events ORDER BY created_at DESC LIMIT ?`
|
|
14154
14308
|
);
|
|
14155
14309
|
return {
|
|
14310
|
+
/** 按 id 取报警关联节点(产线权限判定用);不存在返回 undefined */
|
|
14311
|
+
nodeIdById(id) {
|
|
14312
|
+
const r = db.prepare("SELECT node_id FROM alarm_events WHERE id = ?").get(id);
|
|
14313
|
+
return r == null ? void 0 : r.node_id;
|
|
14314
|
+
},
|
|
14156
14315
|
/** 报警产生(同 node+metric 未确认报警幂等去重,防止高频越限刷表) */
|
|
14157
14316
|
raise(a) {
|
|
14158
14317
|
const open = db.prepare(
|
|
@@ -14467,12 +14626,22 @@ CREATE TABLE IF NOT EXISTS user_tokens (
|
|
|
14467
14626
|
last_used_at TEXT
|
|
14468
14627
|
);
|
|
14469
14628
|
CREATE INDEX IF NOT EXISTS idx_user_tokens_user ON user_tokens(user_id);
|
|
14629
|
+
CREATE TABLE IF NOT EXISTS user_line_grants (
|
|
14630
|
+
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
14631
|
+
line_id TEXT NOT NULL,
|
|
14632
|
+
mode TEXT NOT NULL,
|
|
14633
|
+
granted_by TEXT,
|
|
14634
|
+
granted_at TEXT NOT NULL,
|
|
14635
|
+
PRIMARY KEY (user_id, line_id)
|
|
14636
|
+
);
|
|
14470
14637
|
`;
|
|
14471
14638
|
let db = null;
|
|
14472
14639
|
function getDb() {
|
|
14473
14640
|
if (!db) {
|
|
14474
14641
|
db = new DatabaseSync(DB_PATH$6);
|
|
14475
14642
|
backupRegistry.register(DB_PATH$6, db);
|
|
14643
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
14644
|
+
db.exec("PRAGMA synchronous = NORMAL");
|
|
14476
14645
|
db.exec("PRAGMA busy_timeout = 5000");
|
|
14477
14646
|
db.exec(SCHEMA_SQL);
|
|
14478
14647
|
migrateSchema(db);
|
|
@@ -14488,6 +14657,7 @@ function migrateSchema(d) {
|
|
|
14488
14657
|
if (!cols.some((c) => c.name === "expires_at")) {
|
|
14489
14658
|
d.exec("ALTER TABLE user_tokens ADD COLUMN expires_at TEXT");
|
|
14490
14659
|
}
|
|
14660
|
+
d.exec("UPDATE user_tokens SET token_plain = NULL WHERE token_plain IS NOT NULL");
|
|
14491
14661
|
d.prepare("UPDATE user_tokens SET expires_at = ? WHERE expires_at IS NULL").run(isoInDays(TOKEN_TTL_DAYS));
|
|
14492
14662
|
}
|
|
14493
14663
|
const TOKEN_TTL_DAYS = 30;
|
|
@@ -14565,13 +14735,16 @@ function issueToken(userId, label) {
|
|
|
14565
14735
|
createdAt: now(),
|
|
14566
14736
|
lastUsedAt: null,
|
|
14567
14737
|
preview: maskPreview(raw),
|
|
14568
|
-
hasPlain:
|
|
14738
|
+
hasPlain: false
|
|
14569
14739
|
};
|
|
14570
14740
|
const d = getDb();
|
|
14571
|
-
d.prepare("INSERT INTO user_tokens (id, user_id, label, token_hash, token_plain, created_at, expires_at) VALUES (?, ?, ?, ?,
|
|
14741
|
+
d.prepare("INSERT INTO user_tokens (id, user_id, label, token_hash, token_plain, created_at, expires_at) VALUES (?, ?, ?, ?, NULL, ?, ?)").run(row.id, userId, label, hash, row.createdAt, isoInDays(TOKEN_TTL_DAYS));
|
|
14572
14742
|
return { raw, row };
|
|
14573
14743
|
}
|
|
14744
|
+
const lastUsedSeen = /* @__PURE__ */ new Map();
|
|
14745
|
+
const LAST_USED_THROTTLE_MS = 6e4;
|
|
14574
14746
|
function findByToken(token) {
|
|
14747
|
+
var _a;
|
|
14575
14748
|
const d = getDb();
|
|
14576
14749
|
const hash = hashToken(token);
|
|
14577
14750
|
const row = d.prepare(
|
|
@@ -14582,7 +14755,11 @@ WHERE t.token_hash = ?`
|
|
|
14582
14755
|
if (!row) return null;
|
|
14583
14756
|
if (row.expiresAt && Date.parse(row.expiresAt) < Date.now()) return null;
|
|
14584
14757
|
if (row.status && row.status !== "active") return null;
|
|
14585
|
-
|
|
14758
|
+
const seenAt = (_a = lastUsedSeen.get(row.tokenId)) != null ? _a : 0;
|
|
14759
|
+
if (Date.now() - seenAt >= LAST_USED_THROTTLE_MS) {
|
|
14760
|
+
lastUsedSeen.set(row.tokenId, Date.now());
|
|
14761
|
+
d.prepare("UPDATE user_tokens SET last_used_at = ? WHERE token_hash = ?").run(now(), hash);
|
|
14762
|
+
}
|
|
14586
14763
|
return row;
|
|
14587
14764
|
}
|
|
14588
14765
|
function toUser(row) {
|
|
@@ -14610,6 +14787,17 @@ const userRepository = {
|
|
|
14610
14787
|
).all(...params, pageSize, (page - 1) * pageSize);
|
|
14611
14788
|
return { items: rows.map(toUser), total, page, pageSize };
|
|
14612
14789
|
},
|
|
14790
|
+
/** 全量用户(不分页;管理面授权矩阵用,避免分页截断) */
|
|
14791
|
+
listAll() {
|
|
14792
|
+
const d = getDb();
|
|
14793
|
+
const rows = d.prepare("SELECT id, name, email, role, status, created_at AS createdAt FROM users ORDER BY created_at DESC").all();
|
|
14794
|
+
return rows.map(toUser);
|
|
14795
|
+
},
|
|
14796
|
+
/** 全部产线授权(单查询;管理面按 userId 分组,替代逐用户 N+1) */
|
|
14797
|
+
allGrants() {
|
|
14798
|
+
const d = getDb();
|
|
14799
|
+
return d.prepare("SELECT user_id AS userId, line_id AS lineId, mode, granted_by AS grantedBy, granted_at AS grantedAt FROM user_line_grants").all();
|
|
14800
|
+
},
|
|
14613
14801
|
findById(id) {
|
|
14614
14802
|
const d = getDb();
|
|
14615
14803
|
const row = d.prepare("SELECT id, name, email, role, status, created_at AS createdAt FROM users WHERE id = ?").get(id);
|
|
@@ -14631,6 +14819,28 @@ const userRepository = {
|
|
|
14631
14819
|
const { n } = d.prepare("SELECT COUNT(*) AS n FROM users WHERE role = 'admin' AND status = 'active'").get();
|
|
14632
14820
|
return n > 0;
|
|
14633
14821
|
},
|
|
14822
|
+
// ===== 产线授权(user_line_grants;admin/editor 不查此表,全量全权)=====
|
|
14823
|
+
/** 某用户全部产线授权 */
|
|
14824
|
+
listGrants(userId) {
|
|
14825
|
+
const d = getDb();
|
|
14826
|
+
return d.prepare("SELECT line_id AS lineId, mode, granted_by AS grantedBy, granted_at AS grantedAt FROM user_line_grants WHERE user_id = ?").all(userId);
|
|
14827
|
+
},
|
|
14828
|
+
/** 单条授权(mode 非 readonly/operate → 撤销);返回是否发生变化 */
|
|
14829
|
+
setGrant(userId, lineId, mode, grantedBy) {
|
|
14830
|
+
const d = getDb();
|
|
14831
|
+
if (mode !== "readonly" && mode !== "operate") {
|
|
14832
|
+
return d.prepare("DELETE FROM user_line_grants WHERE user_id = ? AND line_id = ?").run(userId, lineId).changes > 0;
|
|
14833
|
+
}
|
|
14834
|
+
d.prepare(`INSERT INTO user_line_grants (user_id, line_id, mode, granted_by, granted_at) VALUES (?, ?, ?, ?, ?)
|
|
14835
|
+
ON CONFLICT(user_id, line_id) DO UPDATE SET mode = excluded.mode, granted_by = excluded.granted_by, granted_at = excluded.granted_at`).run(userId, lineId, mode, grantedBy, now());
|
|
14836
|
+
return true;
|
|
14837
|
+
},
|
|
14838
|
+
/** 用户 → 产线访问映射(lineId → 'readonly'|'operate');无记录 = 无权 */
|
|
14839
|
+
lineAccessMap(userId) {
|
|
14840
|
+
const d = getDb();
|
|
14841
|
+
const rows = d.prepare("SELECT line_id AS lineId, mode FROM user_line_grants WHERE user_id = ?").all(userId);
|
|
14842
|
+
return new Map(rows.map((r) => [r.lineId, r.mode]));
|
|
14843
|
+
},
|
|
14634
14844
|
/** 内部:取密码哈希(仅认证路径使用,不参与领域对象外泄) */
|
|
14635
14845
|
getPasswordHash(email) {
|
|
14636
14846
|
const d = getDb();
|
|
@@ -14650,6 +14860,23 @@ const userRepository = {
|
|
|
14650
14860
|
d.prepare("INSERT INTO users (id, name, email, password_hash, role, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)").run(user.id, user.name, user.email, hashPassword(input.password), user.role, user.status, user.createdAt);
|
|
14651
14861
|
return user;
|
|
14652
14862
|
},
|
|
14863
|
+
/** 原子注册(IMMEDIATE 事务内判定管理员空缺):并发注册不会产生第二个 bootstrap admin */
|
|
14864
|
+
createWithRoleBootstrap(input) {
|
|
14865
|
+
const d = getDb();
|
|
14866
|
+
d.exec("BEGIN IMMEDIATE");
|
|
14867
|
+
try {
|
|
14868
|
+
const bootstrap = !this.hasActiveAdmin();
|
|
14869
|
+
const user = this.create({ ...input, role: bootstrap ? "admin" : input.role });
|
|
14870
|
+
d.exec("COMMIT");
|
|
14871
|
+
return { user, bootstrap };
|
|
14872
|
+
} catch (err) {
|
|
14873
|
+
try {
|
|
14874
|
+
d.exec("ROLLBACK");
|
|
14875
|
+
} catch {
|
|
14876
|
+
}
|
|
14877
|
+
throw err;
|
|
14878
|
+
}
|
|
14879
|
+
},
|
|
14653
14880
|
update(id, input) {
|
|
14654
14881
|
const d = getDb();
|
|
14655
14882
|
const current = this.findById(id);
|
|
@@ -14811,7 +15038,8 @@ const userService = {
|
|
|
14811
15038
|
},
|
|
14812
15039
|
// ===== 认证(公开端点)=====
|
|
14813
15040
|
/** 注册:创建账号 + 签发首个 token(邮箱/用户名占用 → 409)。
|
|
14814
|
-
*
|
|
15041
|
+
* 首启初始化:原子事务内判定「尚无活跃管理员」→ 首个注册账号授予 admin
|
|
15042
|
+
* (并发注册不会产生第二个 bootstrap admin) */
|
|
14815
15043
|
register(input) {
|
|
14816
15044
|
if (userRepository.findByEmail(input.email)) {
|
|
14817
15045
|
throw new AppError(409, ErrorCodes.CONFLICT, "\u90AE\u7BB1\u5DF2\u88AB\u6CE8\u518C");
|
|
@@ -14819,11 +15047,14 @@ const userService = {
|
|
|
14819
15047
|
if (userRepository.findByName(input.name)) {
|
|
14820
15048
|
throw new AppError(409, "USER_EXISTS", `\u7528\u6237\u540D\u5DF2\u5B58\u5728: ${input.name}`);
|
|
14821
15049
|
}
|
|
14822
|
-
const needsBootstrap =
|
|
15050
|
+
const { user, bootstrap: needsBootstrap } = userRepository.createWithRoleBootstrap({
|
|
15051
|
+
...input,
|
|
15052
|
+
role: "user",
|
|
15053
|
+
status: "active"
|
|
15054
|
+
});
|
|
14823
15055
|
if (needsBootstrap) {
|
|
14824
15056
|
console.log(`[users] \u521D\u59CB\u5316:\u5C1A\u65E0\u7BA1\u7406\u5458\u8D26\u53F7,\u9996\u4E2A\u6CE8\u518C\u8D26\u53F7\u6388\u4E88\u7BA1\u7406\u5458\u89D2\u8272(${input.email})`);
|
|
14825
15057
|
}
|
|
14826
|
-
const user = userRepository.create({ ...input, role: needsBootstrap ? "admin" : "user", status: "active" });
|
|
14827
15058
|
const { raw } = userRepository.createToken(user.id, needsBootstrap ? "bootstrap-admin" : "default");
|
|
14828
15059
|
return { user: this.publicProfile(user), token: raw };
|
|
14829
15060
|
},
|
|
@@ -15019,15 +15250,71 @@ class Mailbox {
|
|
|
15019
15250
|
}
|
|
15020
15251
|
}
|
|
15021
15252
|
|
|
15022
|
-
|
|
15023
|
-
|
|
15024
|
-
|
|
15025
|
-
|
|
15026
|
-
|
|
15027
|
-
|
|
15028
|
-
const
|
|
15029
|
-
|
|
15030
|
-
|
|
15253
|
+
function isPrivilegedRole(user) {
|
|
15254
|
+
return (user == null ? void 0 : user.role) === "admin" || (user == null ? void 0 : user.role) === "editor";
|
|
15255
|
+
}
|
|
15256
|
+
function lineMode(user, lineId) {
|
|
15257
|
+
if (!lineId) return isPrivilegedRole(user) ? "operate" : "none";
|
|
15258
|
+
if (isPrivilegedRole(user)) return "operate";
|
|
15259
|
+
const grant = userRepository.lineAccessMap(user.id).get(lineId);
|
|
15260
|
+
return grant === "operate" ? "operate" : grant === "readonly" ? "readonly" : "none";
|
|
15261
|
+
}
|
|
15262
|
+
function visibleLineIds(user) {
|
|
15263
|
+
if (isPrivilegedRole(user)) return null;
|
|
15264
|
+
return new Set(userRepository.lineAccessMap(user.id).keys());
|
|
15265
|
+
}
|
|
15266
|
+
function filterByLine(user, items, lineIdOf) {
|
|
15267
|
+
const visible = visibleLineIds(user);
|
|
15268
|
+
if (!visible) return items;
|
|
15269
|
+
return items.filter((it) => {
|
|
15270
|
+
const lid = lineIdOf(it);
|
|
15271
|
+
return lid != null && visible.has(lid);
|
|
15272
|
+
});
|
|
15273
|
+
}
|
|
15274
|
+
function requireLineMode(user, lineId, need) {
|
|
15275
|
+
const mode = lineMode(user, lineId);
|
|
15276
|
+
if (mode === "operate" || need === "readonly" && mode === "readonly") return mode;
|
|
15277
|
+
if (mode === "readonly") {
|
|
15278
|
+
throw new AppError(403, "LINE_READONLY", "\u8BE5\u4EA7\u7EBF\u4E3A\u4EC5\u67E5\u770B\u6743\u9650:\u53EA\u8BFB\u6570\u91C7\u53EF\u89C1,\u5199\u63A7/\u64CD\u4F5C\u9700\u7BA1\u7406\u5458\u6388\u4E88\u300C\u53EF\u64CD\u63A7\u300D");
|
|
15279
|
+
}
|
|
15280
|
+
throw new AppError(403, "LINE_FORBIDDEN", `\u65E0\u8BE5\u4EA7\u7EBF\u6743\u9650:\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u5728\u300C\u6743\u9650\u7BA1\u7406\u300D\u4E2D\u6388\u4E88(\u4EA7\u7EBF ${lineId != null ? lineId : "?"})`);
|
|
15281
|
+
}
|
|
15282
|
+
function notifyGrantsChanged(userId) {
|
|
15283
|
+
try {
|
|
15284
|
+
void Promise.resolve().then(function () { return sceneEvents; }).then((m) => {
|
|
15285
|
+
m.broadcastSceneEvent("permissions.changed", { userId, at: (/* @__PURE__ */ new Date()).toISOString() });
|
|
15286
|
+
}).catch(() => {
|
|
15287
|
+
});
|
|
15288
|
+
} catch {
|
|
15289
|
+
}
|
|
15290
|
+
try {
|
|
15291
|
+
void Promise.resolve().then(function () { return host; }).then((m) => {
|
|
15292
|
+
void m.emitPluginEvent("permissions:changed", { userId });
|
|
15293
|
+
}).catch(() => {
|
|
15294
|
+
});
|
|
15295
|
+
} catch {
|
|
15296
|
+
}
|
|
15297
|
+
}
|
|
15298
|
+
|
|
15299
|
+
const permissions = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
|
|
15300
|
+
__proto__: null,
|
|
15301
|
+
filterByLine: filterByLine,
|
|
15302
|
+
isPrivilegedRole: isPrivilegedRole,
|
|
15303
|
+
lineMode: lineMode,
|
|
15304
|
+
notifyGrantsChanged: notifyGrantsChanged,
|
|
15305
|
+
requireLineMode: requireLineMode,
|
|
15306
|
+
visibleLineIds: visibleLineIds
|
|
15307
|
+
}, Symbol.toStringTag, { value: 'Module' }));
|
|
15308
|
+
|
|
15309
|
+
var _a$1, _b, _c;
|
|
15310
|
+
const log$g = createLogger("workshop.ws");
|
|
15311
|
+
const AEP_VERSION = 1;
|
|
15312
|
+
const RING_CAP = 5e3;
|
|
15313
|
+
const RING_BYTES_CAP = 4 * 1024 * 1024;
|
|
15314
|
+
const DB_BUFFER_CAP = 2e3;
|
|
15315
|
+
const EVENTS_RETENTION_DAYS = () => retentionSettings().events_days;
|
|
15316
|
+
const PEER_SEND_BUDGET_BYTES = 32 * 1024 * 1024;
|
|
15317
|
+
const hubGlobal$1 = globalThis;
|
|
15031
15318
|
const hub$1 = (_a$1 = hubGlobal$1.__workshopWsHub) != null ? _a$1 : hubGlobal$1.__workshopWsHub = { streams: /* @__PURE__ */ new Map(), peerChannels: /* @__PURE__ */ new Map(), boundManager: null };
|
|
15032
15319
|
const streams = hub$1.streams;
|
|
15033
15320
|
const peerChannels = hub$1.peerChannels;
|
|
@@ -15083,6 +15370,10 @@ function resolveChannelIdFromUrl(peer) {
|
|
|
15083
15370
|
var _a2;
|
|
15084
15371
|
return (_a2 = resolveQueryParam(peer, "channelId")) != null ? _a2 : resolveQueryParam(peer, "channel_id");
|
|
15085
15372
|
}
|
|
15373
|
+
function attachScenePeer(peer, user) {
|
|
15374
|
+
setPeerVisibleLines(peer, visibleLineIds(user));
|
|
15375
|
+
registerScenePeer(peer);
|
|
15376
|
+
}
|
|
15086
15377
|
function sendControl(peer, obj) {
|
|
15087
15378
|
try {
|
|
15088
15379
|
peer.send(JSON.stringify(obj));
|
|
@@ -15439,7 +15730,7 @@ function subscribePeer(manager, peer, channelId, lastSeq, userToken) {
|
|
|
15439
15730
|
return;
|
|
15440
15731
|
}
|
|
15441
15732
|
stream.peers.add(peer);
|
|
15442
|
-
|
|
15733
|
+
attachScenePeer(peer, user);
|
|
15443
15734
|
let channels = peerChannels.get(peer);
|
|
15444
15735
|
if (!channels) {
|
|
15445
15736
|
channels = /* @__PURE__ */ new Set();
|
|
@@ -15498,7 +15789,11 @@ const ws = defineWebSocketHandler({
|
|
|
15498
15789
|
return;
|
|
15499
15790
|
}
|
|
15500
15791
|
ensureHubBound(manager);
|
|
15501
|
-
|
|
15792
|
+
const qpUser = (() => {
|
|
15793
|
+
const t = resolveQueryParam(peer, "token");
|
|
15794
|
+
return t ? resolveUserByToken(t) : null;
|
|
15795
|
+
})();
|
|
15796
|
+
if (qpUser) attachScenePeer(peer, qpUser);
|
|
15502
15797
|
const channelId = resolveChannelIdFromUrl(peer);
|
|
15503
15798
|
if (!channelId) return;
|
|
15504
15799
|
subscribePeer(manager, peer, channelId, void 0, resolveQueryParam(peer, "token"));
|
|
@@ -19754,7 +20049,7 @@ class DcwController {
|
|
|
19754
20049
|
* → ACK 记账(节点状态/写历史)→ WS 直推。真实/模拟驱动同一路径。
|
|
19755
20050
|
*/
|
|
19756
20051
|
async executeWrite(node, eng, tolerance, recipeRunId) {
|
|
19757
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
20052
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
19758
20053
|
const at = (/* @__PURE__ */ new Date()).toISOString();
|
|
19759
20054
|
const t = node.transform;
|
|
19760
20055
|
const plcValue = inverseTransform(eng, t);
|
|
@@ -19790,10 +20085,11 @@ class DcwController {
|
|
|
19790
20085
|
at
|
|
19791
20086
|
};
|
|
19792
20087
|
repo.appendHistory(entry);
|
|
19793
|
-
(
|
|
20088
|
+
(_i = this.broadcast) == null ? void 0 : _i.call(this, "dcw.written", {
|
|
19794
20089
|
nodeId: node.id,
|
|
19795
20090
|
templateRef: node.templateRef,
|
|
19796
|
-
|
|
20091
|
+
lineId: (_g = node.lineId) != null ? _g : null,
|
|
20092
|
+
value: (_h = node.value) != null ? _h : eng,
|
|
19797
20093
|
raw: outcome.raw,
|
|
19798
20094
|
ok: outcome.ok,
|
|
19799
20095
|
message: outcome.message,
|
|
@@ -19814,7 +20110,7 @@ class DcwController {
|
|
|
19814
20110
|
* 不支持读的驱动(mock 外的 mqtt/http)不产生节点状态噪音,直接返回说明。
|
|
19815
20111
|
*/
|
|
19816
20112
|
async executeRead(node) {
|
|
19817
|
-
var _a;
|
|
20113
|
+
var _a, _b;
|
|
19818
20114
|
const at = (/* @__PURE__ */ new Date()).toISOString();
|
|
19819
20115
|
const driver = resolveDcwDriver(node.driver);
|
|
19820
20116
|
if (!driver.read) {
|
|
@@ -19829,9 +20125,10 @@ class DcwController {
|
|
|
19829
20125
|
const value = r.ok && r.eng != null ? applyTransform(r.eng, node.transform) : null;
|
|
19830
20126
|
node.applyReadResult(value, r.raw, r.ok, r.message, at);
|
|
19831
20127
|
this.repo.flushDebounced();
|
|
19832
|
-
(
|
|
20128
|
+
(_b = this.broadcast) == null ? void 0 : _b.call(this, "dcw.read", {
|
|
19833
20129
|
nodeId: node.id,
|
|
19834
20130
|
templateRef: node.templateRef,
|
|
20131
|
+
lineId: (_a = node.lineId) != null ? _a : null,
|
|
19835
20132
|
value,
|
|
19836
20133
|
raw: r.raw,
|
|
19837
20134
|
ok: r.ok,
|
|
@@ -20405,9 +20702,16 @@ class DcwController {
|
|
|
20405
20702
|
await tsdbReady;
|
|
20406
20703
|
const bucketMs = endMs - startMs > 6e4 ? Math.max(1e3, Math.round((endMs - startMs) / 200)) : void 0;
|
|
20407
20704
|
const daq = [];
|
|
20408
|
-
|
|
20705
|
+
const results = await Promise.all(getDaqNodeRepo().all().map(async (node) => {
|
|
20409
20706
|
try {
|
|
20410
20707
|
const points = await getTsdb().query(node.id, { fromMs: startMs, toMs: endMs, bucketMs, limit: 500 });
|
|
20708
|
+
return { node, points };
|
|
20709
|
+
} catch {
|
|
20710
|
+
return { node, points: [] };
|
|
20711
|
+
}
|
|
20712
|
+
}));
|
|
20713
|
+
for (const { node, points } of results) {
|
|
20714
|
+
{
|
|
20411
20715
|
if (points.length === 0) continue;
|
|
20412
20716
|
const values = points.map((p) => {
|
|
20413
20717
|
var _a2, _b;
|
|
@@ -20427,7 +20731,6 @@ class DcwController {
|
|
|
20427
20731
|
max: Number(Math.max(...values).toFixed(node.decimals)),
|
|
20428
20732
|
cnt: values.length
|
|
20429
20733
|
});
|
|
20430
|
-
} catch {
|
|
20431
20734
|
}
|
|
20432
20735
|
}
|
|
20433
20736
|
return { run, daq, writes };
|
|
@@ -30034,1251 +30337,1279 @@ const assets = {
|
|
|
30034
30337
|
"size": 819,
|
|
30035
30338
|
"path": "../public/favicon.svg"
|
|
30036
30339
|
},
|
|
30037
|
-
"/_nuxt
|
|
30340
|
+
"/_nuxt/-nb2uqVg.js": {
|
|
30038
30341
|
"type": "text/javascript; charset=utf-8",
|
|
30039
|
-
"etag": "\"
|
|
30040
|
-
"mtime": "2026-09-
|
|
30041
|
-
"size":
|
|
30042
|
-
"path": "../public/_nuxt
|
|
30043
|
-
},
|
|
30044
|
-
"/_nuxt/8eIQAVlb.js": {
|
|
30045
|
-
"type": "text/javascript; charset=utf-8",
|
|
30046
|
-
"etag": "\"20e8-SLD0OOYrGIuVbB0/ZDNLlceYcHg\"",
|
|
30047
|
-
"mtime": "2026-09-05T16:50:02.989Z",
|
|
30048
|
-
"size": 8424,
|
|
30049
|
-
"path": "../public/_nuxt/8eIQAVlb.js"
|
|
30342
|
+
"etag": "\"1d2b-jLwuC0KKuwuubw09IH7Tm1lfqoE\"",
|
|
30343
|
+
"mtime": "2026-09-06T06:27:43.457Z",
|
|
30344
|
+
"size": 7467,
|
|
30345
|
+
"path": "../public/_nuxt/-nb2uqVg.js"
|
|
30050
30346
|
},
|
|
30051
30347
|
"/_nuxt/36oeS8_R2.js": {
|
|
30052
30348
|
"type": "text/javascript; charset=utf-8",
|
|
30053
30349
|
"etag": "\"d6-9W7EHt23WjRGOYCN8bz9Yy0aMhg\"",
|
|
30054
|
-
"mtime": "2026-09-
|
|
30350
|
+
"mtime": "2026-09-06T06:27:43.457Z",
|
|
30055
30351
|
"size": 214,
|
|
30056
30352
|
"path": "../public/_nuxt/36oeS8_R2.js"
|
|
30057
30353
|
},
|
|
30058
|
-
"/_nuxt
|
|
30354
|
+
"/_nuxt/-6OnbLFb.js": {
|
|
30355
|
+
"type": "text/javascript; charset=utf-8",
|
|
30356
|
+
"etag": "\"1343-vdAf4w0aJYo+a7mW3u5aS6nVAXY\"",
|
|
30357
|
+
"mtime": "2026-09-06T06:27:43.457Z",
|
|
30358
|
+
"size": 4931,
|
|
30359
|
+
"path": "../public/_nuxt/-6OnbLFb.js"
|
|
30360
|
+
},
|
|
30361
|
+
"/_nuxt/agents.CEbox5-D.css": {
|
|
30059
30362
|
"type": "text/css; charset=utf-8",
|
|
30060
|
-
"etag": "\"43e-
|
|
30061
|
-
"mtime": "2026-09-
|
|
30363
|
+
"etag": "\"43e-sjh3eXQzQvuPq+iaiDAqlB5A/o8\"",
|
|
30364
|
+
"mtime": "2026-09-06T06:27:43.478Z",
|
|
30062
30365
|
"size": 1086,
|
|
30063
|
-
"path": "../public/_nuxt/agents.
|
|
30366
|
+
"path": "../public/_nuxt/agents.CEbox5-D.css"
|
|
30064
30367
|
},
|
|
30065
|
-
"/_nuxt/
|
|
30368
|
+
"/_nuxt/6vYobj4F.js": {
|
|
30066
30369
|
"type": "text/javascript; charset=utf-8",
|
|
30067
|
-
"etag": "\"
|
|
30068
|
-
"mtime": "2026-09-
|
|
30069
|
-
"size":
|
|
30070
|
-
"path": "../public/_nuxt/
|
|
30370
|
+
"etag": "\"626-XI9KdnbsNv0FxC1h6cVurcJhbQI\"",
|
|
30371
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30372
|
+
"size": 1574,
|
|
30373
|
+
"path": "../public/_nuxt/6vYobj4F.js"
|
|
30071
30374
|
},
|
|
30072
|
-
"/_nuxt/
|
|
30375
|
+
"/_nuxt/arUY5dyq2.js": {
|
|
30073
30376
|
"type": "text/javascript; charset=utf-8",
|
|
30074
|
-
"etag": "\"
|
|
30075
|
-
"mtime": "2026-09-
|
|
30076
|
-
"size":
|
|
30077
|
-
"path": "../public/_nuxt/
|
|
30377
|
+
"etag": "\"59f6-d7NzfWgWT2fTR2MXV0/3pKn7pms\"",
|
|
30378
|
+
"mtime": "2026-09-06T06:27:43.474Z",
|
|
30379
|
+
"size": 23030,
|
|
30380
|
+
"path": "../public/_nuxt/arUY5dyq2.js"
|
|
30078
30381
|
},
|
|
30079
|
-
"/_nuxt/
|
|
30382
|
+
"/_nuxt/B-xskWta.js": {
|
|
30080
30383
|
"type": "text/javascript; charset=utf-8",
|
|
30081
|
-
"etag": "\"
|
|
30082
|
-
"mtime": "2026-09-
|
|
30083
|
-
"size":
|
|
30084
|
-
"path": "../public/_nuxt/
|
|
30384
|
+
"etag": "\"4842-u3DYd8BlLUn7q26s3PJm3Fvo+j4\"",
|
|
30385
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30386
|
+
"size": 18498,
|
|
30387
|
+
"path": "../public/_nuxt/B-xskWta.js"
|
|
30085
30388
|
},
|
|
30086
|
-
"/_nuxt/
|
|
30389
|
+
"/_nuxt/B53Mp7lD.js": {
|
|
30087
30390
|
"type": "text/javascript; charset=utf-8",
|
|
30088
|
-
"etag": "\"
|
|
30089
|
-
"mtime": "2026-09-
|
|
30090
|
-
"size":
|
|
30091
|
-
"path": "../public/_nuxt/
|
|
30391
|
+
"etag": "\"4256-Pirq2khpmJQqhRxinPVbluoGfGI\"",
|
|
30392
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30393
|
+
"size": 16982,
|
|
30394
|
+
"path": "../public/_nuxt/B53Mp7lD.js"
|
|
30092
30395
|
},
|
|
30093
|
-
"/_nuxt/
|
|
30396
|
+
"/_nuxt/B3Psw_sL.js": {
|
|
30094
30397
|
"type": "text/javascript; charset=utf-8",
|
|
30095
|
-
"etag": "\"
|
|
30096
|
-
"mtime": "2026-09-
|
|
30097
|
-
"size":
|
|
30098
|
-
"path": "../public/_nuxt/
|
|
30398
|
+
"etag": "\"35bb-+DrI8MnN/s50k/0E1BAPSxI6dg8\"",
|
|
30399
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30400
|
+
"size": 13755,
|
|
30401
|
+
"path": "../public/_nuxt/B3Psw_sL.js"
|
|
30099
30402
|
},
|
|
30100
|
-
"/_nuxt/
|
|
30403
|
+
"/_nuxt/B5S_UyaC.js": {
|
|
30101
30404
|
"type": "text/javascript; charset=utf-8",
|
|
30102
|
-
"etag": "\"
|
|
30103
|
-
"mtime": "2026-09-
|
|
30104
|
-
"size":
|
|
30105
|
-
"path": "../public/_nuxt/
|
|
30405
|
+
"etag": "\"2435-cVXb4Ze0vEZbXwWSHOgo7NJ59ME\"",
|
|
30406
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30407
|
+
"size": 9269,
|
|
30408
|
+
"path": "../public/_nuxt/B5S_UyaC.js"
|
|
30106
30409
|
},
|
|
30107
|
-
"/_nuxt/
|
|
30410
|
+
"/_nuxt/B8WV7GzS.js": {
|
|
30108
30411
|
"type": "text/javascript; charset=utf-8",
|
|
30109
|
-
"etag": "\"
|
|
30110
|
-
"mtime": "2026-09-
|
|
30111
|
-
"size":
|
|
30112
|
-
"path": "../public/_nuxt/
|
|
30412
|
+
"etag": "\"2374-s03OPEHZ71QYjjoepBgll6X6ETo\"",
|
|
30413
|
+
"mtime": "2026-09-06T06:27:43.459Z",
|
|
30414
|
+
"size": 9076,
|
|
30415
|
+
"path": "../public/_nuxt/B8WV7GzS.js"
|
|
30113
30416
|
},
|
|
30114
|
-
"/_nuxt/
|
|
30417
|
+
"/_nuxt/BBrRELH32.js": {
|
|
30115
30418
|
"type": "text/javascript; charset=utf-8",
|
|
30116
|
-
"etag": "\"
|
|
30117
|
-
"mtime": "2026-09-
|
|
30118
|
-
"size":
|
|
30119
|
-
"path": "../public/_nuxt/
|
|
30419
|
+
"etag": "\"5bc-jGs6+2LpPidhbmCHZyKfmEWQxCI\"",
|
|
30420
|
+
"mtime": "2026-09-06T06:27:43.459Z",
|
|
30421
|
+
"size": 1468,
|
|
30422
|
+
"path": "../public/_nuxt/BBrRELH32.js"
|
|
30120
30423
|
},
|
|
30121
|
-
"/_nuxt/
|
|
30424
|
+
"/_nuxt/BbZAzXjZ2.js": {
|
|
30122
30425
|
"type": "text/javascript; charset=utf-8",
|
|
30123
|
-
"etag": "\"
|
|
30124
|
-
"mtime": "2026-09-
|
|
30125
|
-
"size":
|
|
30126
|
-
"path": "../public/_nuxt/
|
|
30426
|
+
"etag": "\"14fe-0KLPumZNGMQ1C2rj5UA7kI1IBvY\"",
|
|
30427
|
+
"mtime": "2026-09-06T06:27:43.462Z",
|
|
30428
|
+
"size": 5374,
|
|
30429
|
+
"path": "../public/_nuxt/BbZAzXjZ2.js"
|
|
30127
30430
|
},
|
|
30128
|
-
"/_nuxt/
|
|
30431
|
+
"/_nuxt/Bckshc9V.js": {
|
|
30129
30432
|
"type": "text/javascript; charset=utf-8",
|
|
30130
|
-
"etag": "\"
|
|
30131
|
-
"mtime": "2026-09-
|
|
30132
|
-
"size":
|
|
30133
|
-
"path": "../public/_nuxt/
|
|
30433
|
+
"etag": "\"2165-tPFg6YA7zmzzGuXpgJIdOp+neV8\"",
|
|
30434
|
+
"mtime": "2026-09-06T06:27:43.462Z",
|
|
30435
|
+
"size": 8549,
|
|
30436
|
+
"path": "../public/_nuxt/Bckshc9V.js"
|
|
30134
30437
|
},
|
|
30135
|
-
"/_nuxt/
|
|
30438
|
+
"/_nuxt/B7wL3pDk.js": {
|
|
30136
30439
|
"type": "text/javascript; charset=utf-8",
|
|
30137
|
-
"etag": "\"
|
|
30138
|
-
"mtime": "2026-09-
|
|
30139
|
-
"size":
|
|
30140
|
-
"path": "../public/_nuxt/
|
|
30440
|
+
"etag": "\"3d5-itnLaBVfNThToG43nVPq3jMDhq0\"",
|
|
30441
|
+
"mtime": "2026-09-06T06:27:43.458Z",
|
|
30442
|
+
"size": 981,
|
|
30443
|
+
"path": "../public/_nuxt/B7wL3pDk.js"
|
|
30141
30444
|
},
|
|
30142
|
-
"/_nuxt/
|
|
30445
|
+
"/_nuxt/Bc3PiGGr.js": {
|
|
30143
30446
|
"type": "text/javascript; charset=utf-8",
|
|
30144
|
-
"etag": "\"
|
|
30145
|
-
"mtime": "2026-09-
|
|
30146
|
-
"size":
|
|
30147
|
-
"path": "../public/_nuxt/
|
|
30447
|
+
"etag": "\"b0a6-an7ekHZpfAEw9EM+R3gB2d6eZHg\"",
|
|
30448
|
+
"mtime": "2026-09-06T06:27:43.462Z",
|
|
30449
|
+
"size": 45222,
|
|
30450
|
+
"path": "../public/_nuxt/Bc3PiGGr.js"
|
|
30148
30451
|
},
|
|
30149
|
-
"/_nuxt/
|
|
30452
|
+
"/_nuxt/BBwMH_hG.js": {
|
|
30150
30453
|
"type": "text/javascript; charset=utf-8",
|
|
30151
|
-
"etag": "\"
|
|
30152
|
-
"mtime": "2026-09-
|
|
30153
|
-
"size":
|
|
30154
|
-
"path": "../public/_nuxt/
|
|
30454
|
+
"etag": "\"587d-zV1IOugR08gc0LlOGMSClQfdApQ\"",
|
|
30455
|
+
"mtime": "2026-09-06T06:27:43.459Z",
|
|
30456
|
+
"size": 22653,
|
|
30457
|
+
"path": "../public/_nuxt/BBwMH_hG.js"
|
|
30155
30458
|
},
|
|
30156
|
-
"/_nuxt/
|
|
30459
|
+
"/_nuxt/BcrN7QEl2.js": {
|
|
30157
30460
|
"type": "text/javascript; charset=utf-8",
|
|
30158
|
-
"etag": "\"
|
|
30159
|
-
"mtime": "2026-09-
|
|
30160
|
-
"size":
|
|
30161
|
-
"path": "../public/_nuxt/
|
|
30461
|
+
"etag": "\"b14-CLdyddO7m6guAKfIeyReGHA6Jwg\"",
|
|
30462
|
+
"mtime": "2026-09-06T06:27:43.462Z",
|
|
30463
|
+
"size": 2836,
|
|
30464
|
+
"path": "../public/_nuxt/BcrN7QEl2.js"
|
|
30465
|
+
},
|
|
30466
|
+
"/_nuxt/BfGc7TJp.js": {
|
|
30467
|
+
"type": "text/javascript; charset=utf-8",
|
|
30468
|
+
"etag": "\"f5-ynAHqm+XhchZ1co7YynIGiIextg\"",
|
|
30469
|
+
"mtime": "2026-09-06T06:27:43.463Z",
|
|
30470
|
+
"size": 245,
|
|
30471
|
+
"path": "../public/_nuxt/BfGc7TJp.js"
|
|
30162
30472
|
},
|
|
30163
30473
|
"/_nuxt/BDUjyaF4.js": {
|
|
30164
30474
|
"type": "text/javascript; charset=utf-8",
|
|
30165
30475
|
"etag": "\"12149-hpS4uBcTVyjMF/ahBrfPvWSV6dM\"",
|
|
30166
|
-
"mtime": "2026-09-
|
|
30476
|
+
"mtime": "2026-09-06T06:27:43.459Z",
|
|
30167
30477
|
"size": 74057,
|
|
30168
30478
|
"path": "../public/_nuxt/BDUjyaF4.js"
|
|
30169
30479
|
},
|
|
30170
|
-
"/_nuxt/
|
|
30171
|
-
"type": "text/javascript; charset=utf-8",
|
|
30172
|
-
"etag": "\"20ed-tm1SdbuhUZxgN/SFoCrSrw7aQqc\"",
|
|
30173
|
-
"mtime": "2026-09-05T16:50:02.996Z",
|
|
30174
|
-
"size": 8429,
|
|
30175
|
-
"path": "../public/_nuxt/Bnp4vIAf.js"
|
|
30176
|
-
},
|
|
30177
|
-
"/_nuxt/BnVoQ74r.js": {
|
|
30480
|
+
"/_nuxt/B5CYgFAD.js": {
|
|
30178
30481
|
"type": "text/javascript; charset=utf-8",
|
|
30179
|
-
"etag": "\"
|
|
30180
|
-
"mtime": "2026-09-
|
|
30181
|
-
"size":
|
|
30182
|
-
"path": "../public/_nuxt/
|
|
30482
|
+
"etag": "\"3ce77-+gYD9bGZqVuYG4HfJZyacVYYJq8\"",
|
|
30483
|
+
"mtime": "2026-09-06T06:27:43.457Z",
|
|
30484
|
+
"size": 249463,
|
|
30485
|
+
"path": "../public/_nuxt/B5CYgFAD.js"
|
|
30183
30486
|
},
|
|
30184
|
-
"/_nuxt/
|
|
30487
|
+
"/_nuxt/BeIfu4N3.js": {
|
|
30185
30488
|
"type": "text/javascript; charset=utf-8",
|
|
30186
|
-
"etag": "\"
|
|
30187
|
-
"mtime": "2026-09-
|
|
30188
|
-
"size":
|
|
30189
|
-
"path": "../public/_nuxt/
|
|
30489
|
+
"etag": "\"bc89-neyoILuYLlrhO8n1ehz7UmvocMs\"",
|
|
30490
|
+
"mtime": "2026-09-06T06:27:43.463Z",
|
|
30491
|
+
"size": 48265,
|
|
30492
|
+
"path": "../public/_nuxt/BeIfu4N3.js"
|
|
30190
30493
|
},
|
|
30191
30494
|
"/_nuxt/BFjGV-RV2.js": {
|
|
30192
30495
|
"type": "text/javascript; charset=utf-8",
|
|
30193
30496
|
"etag": "\"a0340-NzvTqyczSJgnuw9pjPQnLX42sAE\"",
|
|
30194
|
-
"mtime": "2026-09-
|
|
30497
|
+
"mtime": "2026-09-06T06:27:43.460Z",
|
|
30195
30498
|
"size": 656192,
|
|
30196
30499
|
"path": "../public/_nuxt/BFjGV-RV2.js"
|
|
30197
30500
|
},
|
|
30198
30501
|
"/_nuxt/BGkumHZ32.js": {
|
|
30199
30502
|
"type": "text/javascript; charset=utf-8",
|
|
30200
30503
|
"etag": "\"14a0a8-FkCiOKvl5+p8em/4UNCrmbDN4qY\"",
|
|
30201
|
-
"mtime": "2026-09-
|
|
30504
|
+
"mtime": "2026-09-06T06:27:43.460Z",
|
|
30202
30505
|
"size": 1351848,
|
|
30203
30506
|
"path": "../public/_nuxt/BGkumHZ32.js"
|
|
30204
30507
|
},
|
|
30205
|
-
"/_nuxt/
|
|
30508
|
+
"/_nuxt/BgOhoDTI.js": {
|
|
30206
30509
|
"type": "text/javascript; charset=utf-8",
|
|
30207
|
-
"etag": "\"
|
|
30208
|
-
"mtime": "2026-09-
|
|
30209
|
-
"size":
|
|
30210
|
-
"path": "../public/_nuxt/
|
|
30510
|
+
"etag": "\"2543-qvpXnC+y5grUwUw+mC7meP0i3EA\"",
|
|
30511
|
+
"mtime": "2026-09-06T06:27:43.463Z",
|
|
30512
|
+
"size": 9539,
|
|
30513
|
+
"path": "../public/_nuxt/BgOhoDTI.js"
|
|
30211
30514
|
},
|
|
30212
|
-
"/_nuxt/
|
|
30515
|
+
"/_nuxt/BLzCac9K2.js": {
|
|
30213
30516
|
"type": "text/javascript; charset=utf-8",
|
|
30214
|
-
"etag": "\"
|
|
30215
|
-
"mtime": "2026-09-
|
|
30216
|
-
"size":
|
|
30217
|
-
"path": "../public/_nuxt/
|
|
30517
|
+
"etag": "\"5648-y3cHsTmjiTNhI509BiSM1D5wBes\"",
|
|
30518
|
+
"mtime": "2026-09-06T06:27:43.460Z",
|
|
30519
|
+
"size": 22088,
|
|
30520
|
+
"path": "../public/_nuxt/BLzCac9K2.js"
|
|
30218
30521
|
},
|
|
30219
|
-
"/_nuxt/
|
|
30522
|
+
"/_nuxt/BNXfwXpE.js": {
|
|
30220
30523
|
"type": "text/javascript; charset=utf-8",
|
|
30221
|
-
"etag": "\"
|
|
30222
|
-
"mtime": "2026-09-
|
|
30223
|
-
"size":
|
|
30224
|
-
"path": "../public/_nuxt/
|
|
30524
|
+
"etag": "\"30a-SKr3Bmmq+lyC2EG7XQ/M7P1jWog\"",
|
|
30525
|
+
"mtime": "2026-09-06T06:27:43.461Z",
|
|
30526
|
+
"size": 778,
|
|
30527
|
+
"path": "../public/_nuxt/BNXfwXpE.js"
|
|
30225
30528
|
},
|
|
30226
|
-
"/_nuxt/
|
|
30529
|
+
"/_nuxt/Bp5luxkg2.js": {
|
|
30227
30530
|
"type": "text/javascript; charset=utf-8",
|
|
30228
|
-
"etag": "\"
|
|
30229
|
-
"mtime": "2026-09-
|
|
30230
|
-
"size":
|
|
30231
|
-
"path": "../public/_nuxt/
|
|
30531
|
+
"etag": "\"3a06-wE6nRVKQRjsGzClNYT0f+LE6/Lg\"",
|
|
30532
|
+
"mtime": "2026-09-06T06:27:43.463Z",
|
|
30533
|
+
"size": 14854,
|
|
30534
|
+
"path": "../public/_nuxt/Bp5luxkg2.js"
|
|
30535
|
+
},
|
|
30536
|
+
"/_nuxt/Bmpvki7M.js": {
|
|
30537
|
+
"type": "text/javascript; charset=utf-8",
|
|
30538
|
+
"etag": "\"623-ghkdDMae0RDQxJr6vx8je/qPTRs\"",
|
|
30539
|
+
"mtime": "2026-09-06T06:27:43.463Z",
|
|
30540
|
+
"size": 1571,
|
|
30541
|
+
"path": "../public/_nuxt/Bmpvki7M.js"
|
|
30542
|
+
},
|
|
30543
|
+
"/_nuxt/BN_PdN3J.js": {
|
|
30544
|
+
"type": "text/javascript; charset=utf-8",
|
|
30545
|
+
"etag": "\"10b9b-D693oquQMdJ9uX8C5GEOl79xXOE\"",
|
|
30546
|
+
"mtime": "2026-09-06T06:27:43.461Z",
|
|
30547
|
+
"size": 68507,
|
|
30548
|
+
"path": "../public/_nuxt/BN_PdN3J.js"
|
|
30549
|
+
},
|
|
30550
|
+
"/_nuxt/BSSUlJnx2.js": {
|
|
30551
|
+
"type": "text/javascript; charset=utf-8",
|
|
30552
|
+
"etag": "\"5f5-t0OMayeEXY7fEaFUOlppJZZQvtM\"",
|
|
30553
|
+
"mtime": "2026-09-06T06:27:43.461Z",
|
|
30554
|
+
"size": 1525,
|
|
30555
|
+
"path": "../public/_nuxt/BSSUlJnx2.js"
|
|
30232
30556
|
},
|
|
30233
|
-
"/_nuxt/
|
|
30557
|
+
"/_nuxt/BSCpFtzG.js": {
|
|
30234
30558
|
"type": "text/javascript; charset=utf-8",
|
|
30235
|
-
"etag": "\"
|
|
30236
|
-
"mtime": "2026-09-
|
|
30237
|
-
"size":
|
|
30238
|
-
"path": "../public/_nuxt/
|
|
30559
|
+
"etag": "\"13398-3vxX1fQrPyVWKnXsEX5bmCpF/Eg\"",
|
|
30560
|
+
"mtime": "2026-09-06T06:27:43.461Z",
|
|
30561
|
+
"size": 78744,
|
|
30562
|
+
"path": "../public/_nuxt/BSCpFtzG.js"
|
|
30239
30563
|
},
|
|
30240
30564
|
"/_nuxt/BUcmySDa2.js": {
|
|
30241
30565
|
"type": "text/javascript; charset=utf-8",
|
|
30242
30566
|
"etag": "\"1d27c-MrwgQiovFUP0UVtMJ1LdEF/IrEs\"",
|
|
30243
|
-
"mtime": "2026-09-
|
|
30567
|
+
"mtime": "2026-09-06T06:27:43.461Z",
|
|
30244
30568
|
"size": 119420,
|
|
30245
30569
|
"path": "../public/_nuxt/BUcmySDa2.js"
|
|
30246
30570
|
},
|
|
30247
|
-
"/_nuxt/
|
|
30248
|
-
"type": "text/javascript; charset=utf-8",
|
|
30249
|
-
"etag": "\"2686b-xfpdywmiC592z1Gfn4p1AVQ2eSE\"",
|
|
30250
|
-
"mtime": "2026-09-05T16:50:02.998Z",
|
|
30251
|
-
"size": 157803,
|
|
30252
|
-
"path": "../public/_nuxt/Bu-P92Pe.js"
|
|
30253
|
-
},
|
|
30254
|
-
"/_nuxt/BUxYN2mw.js": {
|
|
30571
|
+
"/_nuxt/BxPPAkGA.js": {
|
|
30255
30572
|
"type": "text/javascript; charset=utf-8",
|
|
30256
|
-
"etag": "\"
|
|
30257
|
-
"mtime": "2026-09-
|
|
30258
|
-
"size":
|
|
30259
|
-
"path": "../public/_nuxt/
|
|
30573
|
+
"etag": "\"7ebd-9b4xLtZRNbmB3J2esDdIp2+t5sk\"",
|
|
30574
|
+
"mtime": "2026-09-06T06:27:43.464Z",
|
|
30575
|
+
"size": 32445,
|
|
30576
|
+
"path": "../public/_nuxt/BxPPAkGA.js"
|
|
30260
30577
|
},
|
|
30261
|
-
"/_nuxt/
|
|
30578
|
+
"/_nuxt/BytVi9VX2.js": {
|
|
30262
30579
|
"type": "text/javascript; charset=utf-8",
|
|
30263
|
-
"etag": "\"
|
|
30264
|
-
"mtime": "2026-09-
|
|
30265
|
-
"size":
|
|
30266
|
-
"path": "../public/_nuxt/
|
|
30580
|
+
"etag": "\"8b9-SsapD0I/64H+tosN0JmRWjisTd0\"",
|
|
30581
|
+
"mtime": "2026-09-06T06:27:43.464Z",
|
|
30582
|
+
"size": 2233,
|
|
30583
|
+
"path": "../public/_nuxt/BytVi9VX2.js"
|
|
30267
30584
|
},
|
|
30268
|
-
"/_nuxt/
|
|
30585
|
+
"/_nuxt/BZGNTgTQ2.js": {
|
|
30269
30586
|
"type": "text/javascript; charset=utf-8",
|
|
30270
|
-
"etag": "\"
|
|
30271
|
-
"mtime": "2026-09-
|
|
30272
|
-
"size":
|
|
30273
|
-
"path": "../public/_nuxt/
|
|
30587
|
+
"etag": "\"53-pfqlZiZJEbPiLoDxP0PLfz2Ucmw\"",
|
|
30588
|
+
"mtime": "2026-09-06T06:27:43.462Z",
|
|
30589
|
+
"size": 83,
|
|
30590
|
+
"path": "../public/_nuxt/BZGNTgTQ2.js"
|
|
30274
30591
|
},
|
|
30275
|
-
"/_nuxt/
|
|
30592
|
+
"/_nuxt/C3tCneTM.js": {
|
|
30276
30593
|
"type": "text/javascript; charset=utf-8",
|
|
30277
|
-
"etag": "\"
|
|
30278
|
-
"mtime": "2026-09-
|
|
30279
|
-
"size":
|
|
30280
|
-
"path": "../public/_nuxt/
|
|
30594
|
+
"etag": "\"56ab-/6Cr6erEwmZtrhutqEU3O5P+s0A\"",
|
|
30595
|
+
"mtime": "2026-09-06T06:27:43.464Z",
|
|
30596
|
+
"size": 22187,
|
|
30597
|
+
"path": "../public/_nuxt/C3tCneTM.js"
|
|
30281
30598
|
},
|
|
30282
|
-
"/_nuxt/
|
|
30599
|
+
"/_nuxt/BxtpDtzC.js": {
|
|
30283
30600
|
"type": "text/javascript; charset=utf-8",
|
|
30284
|
-
"etag": "\"
|
|
30285
|
-
"mtime": "2026-09-
|
|
30286
|
-
"size":
|
|
30287
|
-
"path": "../public/_nuxt/
|
|
30601
|
+
"etag": "\"3348-NKn0ndcjz+XrgOw2f4HZ7I2TF34\"",
|
|
30602
|
+
"mtime": "2026-09-06T06:27:43.464Z",
|
|
30603
|
+
"size": 13128,
|
|
30604
|
+
"path": "../public/_nuxt/BxtpDtzC.js"
|
|
30288
30605
|
},
|
|
30289
|
-
"/_nuxt/
|
|
30606
|
+
"/_nuxt/BrIJiJSN.js": {
|
|
30290
30607
|
"type": "text/javascript; charset=utf-8",
|
|
30291
|
-
"etag": "\"
|
|
30292
|
-
"mtime": "2026-09-
|
|
30293
|
-
"size":
|
|
30294
|
-
"path": "../public/_nuxt/
|
|
30608
|
+
"etag": "\"50eba-EQGueVrdlEzHO7oTVt2LPxnHgRo\"",
|
|
30609
|
+
"mtime": "2026-09-06T06:27:43.464Z",
|
|
30610
|
+
"size": 331450,
|
|
30611
|
+
"path": "../public/_nuxt/BrIJiJSN.js"
|
|
30295
30612
|
},
|
|
30296
|
-
"/_nuxt/
|
|
30613
|
+
"/_nuxt/C4OAdbVK2.js": {
|
|
30297
30614
|
"type": "text/javascript; charset=utf-8",
|
|
30298
|
-
"etag": "\"
|
|
30299
|
-
"mtime": "2026-09-
|
|
30300
|
-
"size":
|
|
30301
|
-
"path": "../public/_nuxt/
|
|
30615
|
+
"etag": "\"89e-AQFf/aV6YnDPM3edZWc1ASPluno\"",
|
|
30616
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30617
|
+
"size": 2206,
|
|
30618
|
+
"path": "../public/_nuxt/C4OAdbVK2.js"
|
|
30302
30619
|
},
|
|
30303
|
-
"/_nuxt/
|
|
30620
|
+
"/_nuxt/C6m-kenn.js": {
|
|
30304
30621
|
"type": "text/javascript; charset=utf-8",
|
|
30305
|
-
"etag": "\"
|
|
30306
|
-
"mtime": "2026-09-
|
|
30307
|
-
"size":
|
|
30308
|
-
"path": "../public/_nuxt/
|
|
30622
|
+
"etag": "\"3914-PeLFbXPWgKtw3N2Fy1E79JcHpLU\"",
|
|
30623
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30624
|
+
"size": 14612,
|
|
30625
|
+
"path": "../public/_nuxt/C6m-kenn.js"
|
|
30309
30626
|
},
|
|
30310
30627
|
"/_nuxt/C9f8QMp12.js": {
|
|
30311
30628
|
"type": "text/javascript; charset=utf-8",
|
|
30312
30629
|
"etag": "\"1896-VcRRXhZEm21djPt3FTvlq+iUccI\"",
|
|
30313
|
-
"mtime": "2026-09-
|
|
30630
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30314
30631
|
"size": 6294,
|
|
30315
30632
|
"path": "../public/_nuxt/C9f8QMp12.js"
|
|
30316
30633
|
},
|
|
30317
|
-
"/_nuxt/
|
|
30318
|
-
"type": "text/javascript; charset=utf-8",
|
|
30319
|
-
"etag": "\"f903-rsmgfWSwpaJeXjOUv6+bjzp/W1c\"",
|
|
30320
|
-
"mtime": "2026-09-05T16:50:03.002Z",
|
|
30321
|
-
"size": 63747,
|
|
30322
|
-
"path": "../public/_nuxt/CblLEiCZ.js"
|
|
30323
|
-
},
|
|
30324
|
-
"/_nuxt/Cd15nPnG2.js": {
|
|
30325
|
-
"type": "text/javascript; charset=utf-8",
|
|
30326
|
-
"etag": "\"55aa-ne90u1F1nOOM2tDHnyYSpdkMjZ4\"",
|
|
30327
|
-
"mtime": "2026-09-05T16:50:03.002Z",
|
|
30328
|
-
"size": 21930,
|
|
30329
|
-
"path": "../public/_nuxt/Cd15nPnG2.js"
|
|
30330
|
-
},
|
|
30331
|
-
"/_nuxt/CGdPdJPP.js": {
|
|
30634
|
+
"/_nuxt/CfVAr2nf.js": {
|
|
30332
30635
|
"type": "text/javascript; charset=utf-8",
|
|
30333
|
-
"etag": "\"
|
|
30334
|
-
"mtime": "2026-09-
|
|
30335
|
-
"size":
|
|
30336
|
-
"path": "../public/_nuxt/
|
|
30636
|
+
"etag": "\"4e58-dM+JZz9VCHehIO2I74Q45dMOZ8s\"",
|
|
30637
|
+
"mtime": "2026-09-06T06:27:43.466Z",
|
|
30638
|
+
"size": 20056,
|
|
30639
|
+
"path": "../public/_nuxt/CfVAr2nf.js"
|
|
30337
30640
|
},
|
|
30338
|
-
"/_nuxt/channel-templates.
|
|
30641
|
+
"/_nuxt/channel-templates.De5ZvrGz.css": {
|
|
30339
30642
|
"type": "text/css; charset=utf-8",
|
|
30340
|
-
"etag": "\"846-
|
|
30341
|
-
"mtime": "2026-09-
|
|
30643
|
+
"etag": "\"846-hiNcWp465PfIwg3Hui8TGCj9S3o\"",
|
|
30644
|
+
"mtime": "2026-09-06T06:27:43.478Z",
|
|
30342
30645
|
"size": 2118,
|
|
30343
|
-
"path": "../public/_nuxt/channel-templates.
|
|
30344
|
-
},
|
|
30345
|
-
"/_nuxt/ChEKFMxj.js": {
|
|
30346
|
-
"type": "text/javascript; charset=utf-8",
|
|
30347
|
-
"etag": "\"18b-iQWgRD/SAefQcUmBu8DMSobJ8mI\"",
|
|
30348
|
-
"mtime": "2026-09-05T16:50:03.002Z",
|
|
30349
|
-
"size": 395,
|
|
30350
|
-
"path": "../public/_nuxt/ChEKFMxj.js"
|
|
30646
|
+
"path": "../public/_nuxt/channel-templates.De5ZvrGz.css"
|
|
30351
30647
|
},
|
|
30352
|
-
"/_nuxt/
|
|
30648
|
+
"/_nuxt/Cj6139IM.js": {
|
|
30353
30649
|
"type": "text/javascript; charset=utf-8",
|
|
30354
|
-
"etag": "\"
|
|
30355
|
-
"mtime": "2026-09-
|
|
30356
|
-
"size":
|
|
30357
|
-
"path": "../public/_nuxt/
|
|
30650
|
+
"etag": "\"664-bB/MABMcuh9JMyKWxZJfgs5cTRI\"",
|
|
30651
|
+
"mtime": "2026-09-06T06:27:43.467Z",
|
|
30652
|
+
"size": 1636,
|
|
30653
|
+
"path": "../public/_nuxt/Cj6139IM.js"
|
|
30358
30654
|
},
|
|
30359
|
-
"/_nuxt/
|
|
30655
|
+
"/_nuxt/CKfhtOt7.js": {
|
|
30360
30656
|
"type": "text/javascript; charset=utf-8",
|
|
30361
|
-
"etag": "\"
|
|
30362
|
-
"mtime": "2026-09-
|
|
30363
|
-
"size":
|
|
30364
|
-
"path": "../public/_nuxt/
|
|
30657
|
+
"etag": "\"9141-NLArDp1lZISfBmTeNNW/SqVqPrc\"",
|
|
30658
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30659
|
+
"size": 37185,
|
|
30660
|
+
"path": "../public/_nuxt/CKfhtOt7.js"
|
|
30365
30661
|
},
|
|
30366
|
-
"/_nuxt/
|
|
30662
|
+
"/_nuxt/Cno6kYiO.js": {
|
|
30367
30663
|
"type": "text/javascript; charset=utf-8",
|
|
30368
|
-
"etag": "\"
|
|
30369
|
-
"mtime": "2026-09-
|
|
30370
|
-
"size":
|
|
30371
|
-
"path": "../public/_nuxt/
|
|
30664
|
+
"etag": "\"f2-SIBAvqBfq2ENmoMT2zz03X9uJTg\"",
|
|
30665
|
+
"mtime": "2026-09-06T06:27:43.467Z",
|
|
30666
|
+
"size": 242,
|
|
30667
|
+
"path": "../public/_nuxt/Cno6kYiO.js"
|
|
30372
30668
|
},
|
|
30373
|
-
"/_nuxt/
|
|
30669
|
+
"/_nuxt/CGx-mtWf.js": {
|
|
30374
30670
|
"type": "text/javascript; charset=utf-8",
|
|
30375
|
-
"etag": "\"
|
|
30376
|
-
"mtime": "2026-09-
|
|
30377
|
-
"size":
|
|
30378
|
-
"path": "../public/_nuxt/
|
|
30671
|
+
"etag": "\"8cc4a-lB19dPmOrOEkweHSDcSPUuQNxOc\"",
|
|
30672
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30673
|
+
"size": 576586,
|
|
30674
|
+
"path": "../public/_nuxt/CGx-mtWf.js"
|
|
30379
30675
|
},
|
|
30380
|
-
"/_nuxt/
|
|
30676
|
+
"/_nuxt/CNs_Ozdc.js": {
|
|
30381
30677
|
"type": "text/javascript; charset=utf-8",
|
|
30382
|
-
"etag": "\"
|
|
30383
|
-
"mtime": "2026-09-
|
|
30384
|
-
"size":
|
|
30385
|
-
"path": "../public/_nuxt/
|
|
30678
|
+
"etag": "\"1b-1MHUJYdBtOvbvPMaiQxDXp3lHyw\"",
|
|
30679
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30680
|
+
"size": 27,
|
|
30681
|
+
"path": "../public/_nuxt/CNs_Ozdc.js"
|
|
30386
30682
|
},
|
|
30387
|
-
"/_nuxt/
|
|
30683
|
+
"/_nuxt/Cor9siSf.js": {
|
|
30388
30684
|
"type": "text/javascript; charset=utf-8",
|
|
30389
|
-
"etag": "\"
|
|
30390
|
-
"mtime": "2026-09-
|
|
30391
|
-
"size":
|
|
30392
|
-
"path": "../public/_nuxt/
|
|
30685
|
+
"etag": "\"469c-SAQlRrJexDg1WPypDeSp4i/c4PA\"",
|
|
30686
|
+
"mtime": "2026-09-06T06:27:43.467Z",
|
|
30687
|
+
"size": 18076,
|
|
30688
|
+
"path": "../public/_nuxt/Cor9siSf.js"
|
|
30393
30689
|
},
|
|
30394
|
-
"/_nuxt/
|
|
30690
|
+
"/_nuxt/CUXCQXjG.js": {
|
|
30395
30691
|
"type": "text/javascript; charset=utf-8",
|
|
30396
|
-
"etag": "\"
|
|
30397
|
-
"mtime": "2026-09-
|
|
30398
|
-
"size":
|
|
30399
|
-
"path": "../public/_nuxt/
|
|
30692
|
+
"etag": "\"18b-4es6+sDUaYZ89sbvxGRBaXHox64\"",
|
|
30693
|
+
"mtime": "2026-09-06T06:27:43.465Z",
|
|
30694
|
+
"size": 395,
|
|
30695
|
+
"path": "../public/_nuxt/CUXCQXjG.js"
|
|
30400
30696
|
},
|
|
30401
30697
|
"/_nuxt/CWKEp1wx2.js": {
|
|
30402
30698
|
"type": "text/javascript; charset=utf-8",
|
|
30403
30699
|
"etag": "\"555-ED/tuOi0Qdk4aSGksbI58QY+vQ8\"",
|
|
30404
|
-
"mtime": "2026-09-
|
|
30700
|
+
"mtime": "2026-09-06T06:27:43.466Z",
|
|
30405
30701
|
"size": 1365,
|
|
30406
30702
|
"path": "../public/_nuxt/CWKEp1wx2.js"
|
|
30407
30703
|
},
|
|
30408
|
-
"/_nuxt/
|
|
30409
|
-
"type": "text/javascript; charset=utf-8",
|
|
30410
|
-
"etag": "\"89e-FjJprk7cJxDm6dF45I+PCzGIcG8\"",
|
|
30411
|
-
"mtime": "2026-09-05T16:50:03.001Z",
|
|
30412
|
-
"size": 2206,
|
|
30413
|
-
"path": "../public/_nuxt/C_gFA2H_2.js"
|
|
30414
|
-
},
|
|
30415
|
-
"/_nuxt/Cyk3du4K2.js": {
|
|
30704
|
+
"/_nuxt/D-Ca4BGY.js": {
|
|
30416
30705
|
"type": "text/javascript; charset=utf-8",
|
|
30417
|
-
"etag": "\"
|
|
30418
|
-
"mtime": "2026-09-
|
|
30419
|
-
"size":
|
|
30420
|
-
"path": "../public/_nuxt/
|
|
30421
|
-
},
|
|
30422
|
-
"/_nuxt/D4qXvjuV.js": {
|
|
30423
|
-
"type": "text/javascript; charset=utf-8",
|
|
30424
|
-
"etag": "\"12f1-ivWHq6Vv/mBLpSOIKZGkhKO1DDY\"",
|
|
30425
|
-
"mtime": "2026-09-05T16:50:03.004Z",
|
|
30426
|
-
"size": 4849,
|
|
30427
|
-
"path": "../public/_nuxt/D4qXvjuV.js"
|
|
30706
|
+
"etag": "\"d322-Ji+xNrf2m+xWgNVNTGDuV7nAR7w\"",
|
|
30707
|
+
"mtime": "2026-09-06T06:27:43.467Z",
|
|
30708
|
+
"size": 54050,
|
|
30709
|
+
"path": "../public/_nuxt/D-Ca4BGY.js"
|
|
30428
30710
|
},
|
|
30429
30711
|
"/_nuxt/D95h62Jn.js": {
|
|
30430
30712
|
"type": "text/javascript; charset=utf-8",
|
|
30431
30713
|
"etag": "\"3f5-sTPqCSaAt8a9YlLXlhRfFlOtmcQ\"",
|
|
30432
|
-
"mtime": "2026-09-
|
|
30714
|
+
"mtime": "2026-09-06T06:27:43.468Z",
|
|
30433
30715
|
"size": 1013,
|
|
30434
30716
|
"path": "../public/_nuxt/D95h62Jn.js"
|
|
30435
30717
|
},
|
|
30436
|
-
"/_nuxt/
|
|
30718
|
+
"/_nuxt/D1z7i2UP.js": {
|
|
30437
30719
|
"type": "text/javascript; charset=utf-8",
|
|
30438
|
-
"etag": "\"
|
|
30439
|
-
"mtime": "2026-09-
|
|
30440
|
-
"size":
|
|
30441
|
-
"path": "../public/_nuxt/
|
|
30720
|
+
"etag": "\"3488-96j3CtrX45ueUXO7o7l3+3rcKWk\"",
|
|
30721
|
+
"mtime": "2026-09-06T06:27:43.468Z",
|
|
30722
|
+
"size": 13448,
|
|
30723
|
+
"path": "../public/_nuxt/D1z7i2UP.js"
|
|
30724
|
+
},
|
|
30725
|
+
"/_nuxt/D7jiode2.js": {
|
|
30726
|
+
"type": "text/javascript; charset=utf-8",
|
|
30727
|
+
"etag": "\"1285-ggBNcB9xOD6IVb4rBO7KYsqh/ms\"",
|
|
30728
|
+
"mtime": "2026-09-06T06:27:43.468Z",
|
|
30729
|
+
"size": 4741,
|
|
30730
|
+
"path": "../public/_nuxt/D7jiode2.js"
|
|
30731
|
+
},
|
|
30732
|
+
"/_nuxt/D8CqF0yy.js": {
|
|
30733
|
+
"type": "text/javascript; charset=utf-8",
|
|
30734
|
+
"etag": "\"1dae-DlKVVV+fkbaFtolHiRzBO1Gjw4s\"",
|
|
30735
|
+
"mtime": "2026-09-06T06:27:43.468Z",
|
|
30736
|
+
"size": 7598,
|
|
30737
|
+
"path": "../public/_nuxt/D8CqF0yy.js"
|
|
30442
30738
|
},
|
|
30443
|
-
"/_nuxt/daq.
|
|
30739
|
+
"/_nuxt/daq.6IrhVVfy.css": {
|
|
30444
30740
|
"type": "text/css; charset=utf-8",
|
|
30445
|
-
"etag": "\"560c-
|
|
30446
|
-
"mtime": "2026-09-
|
|
30741
|
+
"etag": "\"560c-BXFIKD9bnWhTOZ8SzFFpfkMuNHU\"",
|
|
30742
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30447
30743
|
"size": 22028,
|
|
30448
|
-
"path": "../public/_nuxt/daq.
|
|
30744
|
+
"path": "../public/_nuxt/daq.6IrhVVfy.css"
|
|
30449
30745
|
},
|
|
30450
|
-
"/_nuxt/
|
|
30451
|
-
"type": "text/
|
|
30452
|
-
"etag": "\"
|
|
30453
|
-
"mtime": "2026-09-
|
|
30454
|
-
"size":
|
|
30455
|
-
"path": "../public/_nuxt/
|
|
30746
|
+
"/_nuxt/DA4lxCWC2.js": {
|
|
30747
|
+
"type": "text/javascript; charset=utf-8",
|
|
30748
|
+
"etag": "\"1fd9-/rwkIG2tdN0ulOA/H0Hwh783NRw\"",
|
|
30749
|
+
"mtime": "2026-09-06T06:27:43.469Z",
|
|
30750
|
+
"size": 8153,
|
|
30751
|
+
"path": "../public/_nuxt/DA4lxCWC2.js"
|
|
30456
30752
|
},
|
|
30457
|
-
"/_nuxt/
|
|
30753
|
+
"/_nuxt/DEaY_uvR.js": {
|
|
30458
30754
|
"type": "text/javascript; charset=utf-8",
|
|
30459
|
-
"etag": "\"
|
|
30460
|
-
"mtime": "2026-09-
|
|
30461
|
-
"size":
|
|
30462
|
-
"path": "../public/_nuxt/
|
|
30755
|
+
"etag": "\"18f8-ZbaeDqnpw8A3xuKjUj3HwB1cwW0\"",
|
|
30756
|
+
"mtime": "2026-09-06T06:27:43.469Z",
|
|
30757
|
+
"size": 6392,
|
|
30758
|
+
"path": "../public/_nuxt/DEaY_uvR.js"
|
|
30463
30759
|
},
|
|
30464
|
-
"/_nuxt/
|
|
30760
|
+
"/_nuxt/DeYsUzhr.js": {
|
|
30465
30761
|
"type": "text/javascript; charset=utf-8",
|
|
30466
|
-
"etag": "\"
|
|
30467
|
-
"mtime": "2026-09-
|
|
30468
|
-
"size":
|
|
30469
|
-
"path": "../public/_nuxt/
|
|
30762
|
+
"etag": "\"287-ALaKQkZWM37K7ru31bg511e8ikI\"",
|
|
30763
|
+
"mtime": "2026-09-06T06:27:43.470Z",
|
|
30764
|
+
"size": 647,
|
|
30765
|
+
"path": "../public/_nuxt/DeYsUzhr.js"
|
|
30470
30766
|
},
|
|
30471
|
-
"/_nuxt/
|
|
30767
|
+
"/_nuxt/dcw.DcDjwvqv.css": {
|
|
30472
30768
|
"type": "text/css; charset=utf-8",
|
|
30473
|
-
"etag": "\"
|
|
30474
|
-
"mtime": "2026-09-
|
|
30475
|
-
"size":
|
|
30476
|
-
"path": "../public/_nuxt/
|
|
30769
|
+
"etag": "\"2608-sKDmsAosVQN2c6l/NGazwNjDLUI\"",
|
|
30770
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30771
|
+
"size": 9736,
|
|
30772
|
+
"path": "../public/_nuxt/dcw.DcDjwvqv.css"
|
|
30477
30773
|
},
|
|
30478
|
-
"/_nuxt/
|
|
30479
|
-
"type": "text/
|
|
30480
|
-
"etag": "\"
|
|
30481
|
-
"mtime": "2026-09-
|
|
30482
|
-
"size":
|
|
30483
|
-
"path": "../public/_nuxt/
|
|
30774
|
+
"/_nuxt/default.BbgdTDCk.css": {
|
|
30775
|
+
"type": "text/css; charset=utf-8",
|
|
30776
|
+
"etag": "\"2f9e-FQsP/3guV1XWiRqjZyF0yxNKLkc\"",
|
|
30777
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30778
|
+
"size": 12190,
|
|
30779
|
+
"path": "../public/_nuxt/default.BbgdTDCk.css"
|
|
30484
30780
|
},
|
|
30485
30781
|
"/_nuxt/DIOBYJe3.js": {
|
|
30486
30782
|
"type": "text/javascript; charset=utf-8",
|
|
30487
30783
|
"etag": "\"4b5-DdWaiyBS+/JejqhLG4Q7/JprP2Q\"",
|
|
30488
|
-
"mtime": "2026-09-
|
|
30784
|
+
"mtime": "2026-09-06T06:27:43.469Z",
|
|
30489
30785
|
"size": 1205,
|
|
30490
30786
|
"path": "../public/_nuxt/DIOBYJe3.js"
|
|
30491
30787
|
},
|
|
30492
|
-
"/_nuxt/
|
|
30788
|
+
"/_nuxt/Dhqra7NB.js": {
|
|
30493
30789
|
"type": "text/javascript; charset=utf-8",
|
|
30494
|
-
"etag": "\"
|
|
30495
|
-
"mtime": "2026-09-
|
|
30496
|
-
"size":
|
|
30497
|
-
"path": "../public/_nuxt/
|
|
30790
|
+
"etag": "\"c67-DJQzh47TgZoVFNIo5m4hACtSlTg\"",
|
|
30791
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30792
|
+
"size": 3175,
|
|
30793
|
+
"path": "../public/_nuxt/Dhqra7NB.js"
|
|
30498
30794
|
},
|
|
30499
|
-
"/_nuxt/
|
|
30795
|
+
"/_nuxt/DlRO_q5L.js": {
|
|
30500
30796
|
"type": "text/javascript; charset=utf-8",
|
|
30501
|
-
"etag": "\"
|
|
30502
|
-
"mtime": "2026-09-
|
|
30503
|
-
"size":
|
|
30504
|
-
"path": "../public/_nuxt/
|
|
30797
|
+
"etag": "\"1195-qIdBUxD1e9n0IIVzYKGquwyc5IM\"",
|
|
30798
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30799
|
+
"size": 4501,
|
|
30800
|
+
"path": "../public/_nuxt/DlRO_q5L.js"
|
|
30505
30801
|
},
|
|
30506
|
-
"/_nuxt/
|
|
30802
|
+
"/_nuxt/DpojD719.js": {
|
|
30507
30803
|
"type": "text/javascript; charset=utf-8",
|
|
30508
|
-
"etag": "\"
|
|
30509
|
-
"mtime": "2026-09-
|
|
30510
|
-
"size":
|
|
30511
|
-
"path": "../public/_nuxt/
|
|
30804
|
+
"etag": "\"29d-Fu+XH+dfF6wIVeD5drBDJvCFiPE\"",
|
|
30805
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30806
|
+
"size": 669,
|
|
30807
|
+
"path": "../public/_nuxt/DpojD719.js"
|
|
30512
30808
|
},
|
|
30513
|
-
"/_nuxt/
|
|
30809
|
+
"/_nuxt/DoLasgPj2.js": {
|
|
30514
30810
|
"type": "text/javascript; charset=utf-8",
|
|
30515
|
-
"etag": "\"
|
|
30516
|
-
"mtime": "2026-09-
|
|
30517
|
-
"size":
|
|
30518
|
-
"path": "../public/_nuxt/
|
|
30811
|
+
"etag": "\"20cf-AD2OXvXYmQR29f4gV1ADJLRnCEA\"",
|
|
30812
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30813
|
+
"size": 8399,
|
|
30814
|
+
"path": "../public/_nuxt/DoLasgPj2.js"
|
|
30519
30815
|
},
|
|
30520
|
-
"/_nuxt/
|
|
30816
|
+
"/_nuxt/DsUUYP292.js": {
|
|
30521
30817
|
"type": "text/javascript; charset=utf-8",
|
|
30522
|
-
"etag": "\"
|
|
30523
|
-
"mtime": "2026-09-
|
|
30524
|
-
"size":
|
|
30525
|
-
"path": "../public/_nuxt/
|
|
30818
|
+
"etag": "\"144-/n2T55jR70VIdOwiikYjqUe6HLk\"",
|
|
30819
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30820
|
+
"size": 324,
|
|
30821
|
+
"path": "../public/_nuxt/DsUUYP292.js"
|
|
30526
30822
|
},
|
|
30527
|
-
"/_nuxt/
|
|
30823
|
+
"/_nuxt/Ds8JbqGB.js": {
|
|
30528
30824
|
"type": "text/javascript; charset=utf-8",
|
|
30529
|
-
"etag": "\"
|
|
30530
|
-
"mtime": "2026-09-
|
|
30531
|
-
"size":
|
|
30532
|
-
"path": "../public/_nuxt/
|
|
30825
|
+
"etag": "\"20a5-5w+JPRF9P/jPDCyWtGvTH9GWMvs\"",
|
|
30826
|
+
"mtime": "2026-09-06T06:27:43.471Z",
|
|
30827
|
+
"size": 8357,
|
|
30828
|
+
"path": "../public/_nuxt/Ds8JbqGB.js"
|
|
30533
30829
|
},
|
|
30534
|
-
"/_nuxt/
|
|
30830
|
+
"/_nuxt/DNxVTfhe.js": {
|
|
30535
30831
|
"type": "text/javascript; charset=utf-8",
|
|
30536
|
-
"etag": "\"
|
|
30537
|
-
"mtime": "2026-09-
|
|
30538
|
-
"size":
|
|
30539
|
-
"path": "../public/_nuxt/
|
|
30832
|
+
"etag": "\"28a2e-JTPo0V0NdEUiA5ubrG/aTW6Nt3s\"",
|
|
30833
|
+
"mtime": "2026-09-06T06:27:43.469Z",
|
|
30834
|
+
"size": 166446,
|
|
30835
|
+
"path": "../public/_nuxt/DNxVTfhe.js"
|
|
30540
30836
|
},
|
|
30541
|
-
"/_nuxt/
|
|
30837
|
+
"/_nuxt/DT-Wg8r1.js": {
|
|
30542
30838
|
"type": "text/javascript; charset=utf-8",
|
|
30543
|
-
"etag": "\"
|
|
30544
|
-
"mtime": "2026-09-
|
|
30545
|
-
"size":
|
|
30546
|
-
"path": "../public/_nuxt/
|
|
30839
|
+
"etag": "\"987d-FRY5+vZoHzByvMEFbeh2lKuBssc\"",
|
|
30840
|
+
"mtime": "2026-09-06T06:27:43.470Z",
|
|
30841
|
+
"size": 39037,
|
|
30842
|
+
"path": "../public/_nuxt/DT-Wg8r1.js"
|
|
30547
30843
|
},
|
|
30548
|
-
"/_nuxt/
|
|
30844
|
+
"/_nuxt/DtBu71ev.js": {
|
|
30549
30845
|
"type": "text/javascript; charset=utf-8",
|
|
30550
|
-
"etag": "\"
|
|
30551
|
-
"mtime": "2026-09-
|
|
30552
|
-
"size":
|
|
30553
|
-
"path": "../public/_nuxt/
|
|
30846
|
+
"etag": "\"156bf-YTCvoAR5ZNk1ZGVhmY/Bceo/GjQ\"",
|
|
30847
|
+
"mtime": "2026-09-06T06:27:43.472Z",
|
|
30848
|
+
"size": 87743,
|
|
30849
|
+
"path": "../public/_nuxt/DtBu71ev.js"
|
|
30554
30850
|
},
|
|
30555
|
-
"/_nuxt/
|
|
30851
|
+
"/_nuxt/DTYBfjRY.js": {
|
|
30556
30852
|
"type": "text/javascript; charset=utf-8",
|
|
30557
|
-
"etag": "\"
|
|
30558
|
-
"mtime": "2026-09-
|
|
30559
|
-
"size":
|
|
30560
|
-
"path": "../public/_nuxt/
|
|
30853
|
+
"etag": "\"1a89-9gPrj/bgllCi+f9Gl6ze+k5zkcw\"",
|
|
30854
|
+
"mtime": "2026-09-06T06:27:43.470Z",
|
|
30855
|
+
"size": 6793,
|
|
30856
|
+
"path": "../public/_nuxt/DTYBfjRY.js"
|
|
30561
30857
|
},
|
|
30562
|
-
"/_nuxt/
|
|
30858
|
+
"/_nuxt/DXRZPxGs.js": {
|
|
30563
30859
|
"type": "text/javascript; charset=utf-8",
|
|
30564
|
-
"etag": "\"
|
|
30565
|
-
"mtime": "2026-09-
|
|
30566
|
-
"size":
|
|
30567
|
-
"path": "../public/_nuxt/
|
|
30860
|
+
"etag": "\"42-LgXLXdo9BGzBlyxqolWDOt/Ezyg\"",
|
|
30861
|
+
"mtime": "2026-09-06T06:27:43.470Z",
|
|
30862
|
+
"size": 66,
|
|
30863
|
+
"path": "../public/_nuxt/DXRZPxGs.js"
|
|
30864
|
+
},
|
|
30865
|
+
"/_nuxt/DWcEk1ur2.js": {
|
|
30866
|
+
"type": "text/javascript; charset=utf-8",
|
|
30867
|
+
"etag": "\"6a1f-fF/+gkQ3RswZQKIYDBEx7d8rnN8\"",
|
|
30868
|
+
"mtime": "2026-09-06T06:27:43.470Z",
|
|
30869
|
+
"size": 27167,
|
|
30870
|
+
"path": "../public/_nuxt/DWcEk1ur2.js"
|
|
30871
|
+
},
|
|
30872
|
+
"/_nuxt/Dy-mxvXY2.js": {
|
|
30873
|
+
"type": "text/javascript; charset=utf-8",
|
|
30874
|
+
"etag": "\"92-oLgwL98kjyuEcvL717na1ap9Tks\"",
|
|
30875
|
+
"mtime": "2026-09-06T06:27:43.472Z",
|
|
30876
|
+
"size": 146,
|
|
30877
|
+
"path": "../public/_nuxt/Dy-mxvXY2.js"
|
|
30878
|
+
},
|
|
30879
|
+
"/_nuxt/d_Sz9KGm.js": {
|
|
30880
|
+
"type": "text/javascript; charset=utf-8",
|
|
30881
|
+
"etag": "\"2405-7ujtrgj9V4jVad6cD//Q7Gvx4Q4\"",
|
|
30882
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
30883
|
+
"size": 9221,
|
|
30884
|
+
"path": "../public/_nuxt/d_Sz9KGm.js"
|
|
30568
30885
|
},
|
|
30569
30886
|
"/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2": {
|
|
30570
30887
|
"type": "font/woff2",
|
|
30571
30888
|
"etag": "\"3504-t17DeaJZ5CiTr/7PdWXcRgN9/Yc\"",
|
|
30572
|
-
"mtime": "2026-09-
|
|
30889
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30573
30890
|
"size": 13572,
|
|
30574
30891
|
"path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BGIwiowF.woff2"
|
|
30575
30892
|
},
|
|
30893
|
+
"/_nuxt/DyisHHzD.js": {
|
|
30894
|
+
"type": "text/javascript; charset=utf-8",
|
|
30895
|
+
"etag": "\"26637-o15U+yDwUbonOcjvC07KaBGRDho\"",
|
|
30896
|
+
"mtime": "2026-09-06T06:27:43.472Z",
|
|
30897
|
+
"size": 157239,
|
|
30898
|
+
"path": "../public/_nuxt/DyisHHzD.js"
|
|
30899
|
+
},
|
|
30576
30900
|
"/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff": {
|
|
30577
30901
|
"type": "font/woff",
|
|
30578
30902
|
"etag": "\"3f04-1MKyFKXvChwQTK9MnbAM3SwAP/w\"",
|
|
30579
|
-
"mtime": "2026-09-
|
|
30903
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30580
30904
|
"size": 16132,
|
|
30581
30905
|
"path": "../public/_nuxt/eb-garamond-cyrillic-400-italic.BZInx2ys.woff"
|
|
30582
30906
|
},
|
|
30583
30907
|
"/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff": {
|
|
30584
30908
|
"type": "font/woff",
|
|
30585
30909
|
"etag": "\"3c88-Q5XoFKe1rGp1UkdvSR6MtPcFfgQ\"",
|
|
30586
|
-
"mtime": "2026-09-
|
|
30910
|
+
"mtime": "2026-09-06T06:27:43.479Z",
|
|
30587
30911
|
"size": 15496,
|
|
30588
30912
|
"path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.C0kVTdou.woff"
|
|
30589
30913
|
},
|
|
30590
|
-
"/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2": {
|
|
30591
|
-
"type": "font/woff2",
|
|
30592
|
-
"etag": "\"33d4-lVrdxXudnaWAAL0JfU6b+yZGpK0\"",
|
|
30593
|
-
"mtime": "2026-09-05T16:50:03.020Z",
|
|
30594
|
-
"size": 13268,
|
|
30595
|
-
"path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2"
|
|
30596
|
-
},
|
|
30597
30914
|
"/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2": {
|
|
30598
30915
|
"type": "font/woff2",
|
|
30599
30916
|
"etag": "\"4620-AEmSjSDDFDLAiok0BdjqqFs2mx4\"",
|
|
30600
|
-
"mtime": "2026-09-
|
|
30917
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30601
30918
|
"size": 17952,
|
|
30602
30919
|
"path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.Bz1w3xqM.woff2"
|
|
30603
30920
|
},
|
|
30604
|
-
"/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff": {
|
|
30605
|
-
"type": "font/woff",
|
|
30606
|
-
"etag": "\"4fcc-Wt58DNvJEH8PhhsEwR/fAuZLZf0\"",
|
|
30607
|
-
"mtime": "2026-09-05T16:50:03.021Z",
|
|
30608
|
-
"size": 20428,
|
|
30609
|
-
"path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff"
|
|
30610
|
-
},
|
|
30611
30921
|
"/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff": {
|
|
30612
30922
|
"type": "font/woff",
|
|
30613
30923
|
"etag": "\"5698-6bgErOYTElI0Z3Untp+h0Xi0FGs\"",
|
|
30614
|
-
"mtime": "2026-09-
|
|
30924
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30615
30925
|
"size": 22168,
|
|
30616
30926
|
"path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-italic.CYS3phfl.woff"
|
|
30617
30927
|
},
|
|
30618
|
-
"/_nuxt/eb-garamond-
|
|
30619
|
-
"type": "font/
|
|
30620
|
-
"etag": "\"
|
|
30621
|
-
"mtime": "2026-09-
|
|
30622
|
-
"size":
|
|
30623
|
-
"path": "../public/_nuxt/eb-garamond-
|
|
30928
|
+
"/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2": {
|
|
30929
|
+
"type": "font/woff2",
|
|
30930
|
+
"etag": "\"33d4-lVrdxXudnaWAAL0JfU6b+yZGpK0\"",
|
|
30931
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30932
|
+
"size": 13268,
|
|
30933
|
+
"path": "../public/_nuxt/eb-garamond-cyrillic-400-normal.DDLP67lu.woff2"
|
|
30624
30934
|
},
|
|
30625
30935
|
"/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2": {
|
|
30626
30936
|
"type": "font/woff2",
|
|
30627
30937
|
"etag": "\"419c-BgVrkDzxBAskhVuAe8ZPKrVJ2vk\"",
|
|
30628
|
-
"mtime": "2026-09-
|
|
30938
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30629
30939
|
"size": 16796,
|
|
30630
30940
|
"path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.o8fRvAFQ.woff2"
|
|
30631
30941
|
},
|
|
30942
|
+
"/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff": {
|
|
30943
|
+
"type": "font/woff",
|
|
30944
|
+
"etag": "\"4fcc-Wt58DNvJEH8PhhsEwR/fAuZLZf0\"",
|
|
30945
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30946
|
+
"size": 20428,
|
|
30947
|
+
"path": "../public/_nuxt/eb-garamond-cyrillic-ext-400-normal.DG8lny6_.woff"
|
|
30948
|
+
},
|
|
30632
30949
|
"/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2": {
|
|
30633
30950
|
"type": "font/woff2",
|
|
30634
30951
|
"etag": "\"2904-BXAeLh8O+jrT8ujKrV7WtU2zP1c\"",
|
|
30635
|
-
"mtime": "2026-09-
|
|
30952
|
+
"mtime": "2026-09-06T06:27:43.481Z",
|
|
30636
30953
|
"size": 10500,
|
|
30637
30954
|
"path": "../public/_nuxt/eb-garamond-greek-400-italic.Dqr5KC66.woff2"
|
|
30638
30955
|
},
|
|
30956
|
+
"/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff": {
|
|
30957
|
+
"type": "font/woff",
|
|
30958
|
+
"etag": "\"307c-Fmorq8T0Tyl1FByuAGfnIMJMsU0\"",
|
|
30959
|
+
"mtime": "2026-09-06T06:27:43.480Z",
|
|
30960
|
+
"size": 12412,
|
|
30961
|
+
"path": "../public/_nuxt/eb-garamond-greek-400-italic.BamGE6QP.woff"
|
|
30962
|
+
},
|
|
30639
30963
|
"/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2": {
|
|
30640
30964
|
"type": "font/woff2",
|
|
30641
30965
|
"etag": "\"2a00-ZNzj8SIiN3t2N23u++WhC6jE8gk\"",
|
|
30642
|
-
"mtime": "2026-09-
|
|
30966
|
+
"mtime": "2026-09-06T06:27:43.481Z",
|
|
30643
30967
|
"size": 10752,
|
|
30644
30968
|
"path": "../public/_nuxt/eb-garamond-greek-400-normal.CVAbzS9p.woff2"
|
|
30645
30969
|
},
|
|
30646
30970
|
"/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff": {
|
|
30647
30971
|
"type": "font/woff",
|
|
30648
30972
|
"etag": "\"3108-ggShwQ6kE+MAR7EEQafdmWunxHg\"",
|
|
30649
|
-
"mtime": "2026-09-
|
|
30973
|
+
"mtime": "2026-09-06T06:27:43.481Z",
|
|
30650
30974
|
"size": 12552,
|
|
30651
30975
|
"path": "../public/_nuxt/eb-garamond-greek-400-normal.d4JlP2QH.woff"
|
|
30652
30976
|
},
|
|
30653
|
-
"/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2": {
|
|
30654
|
-
"type": "font/woff2",
|
|
30655
|
-
"etag": "\"19d0-ppOK6AfNTXYuDEeeEMQQhOypGW8\"",
|
|
30656
|
-
"mtime": "2026-09-05T16:50:03.023Z",
|
|
30657
|
-
"size": 6608,
|
|
30658
|
-
"path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2"
|
|
30659
|
-
},
|
|
30660
30977
|
"/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff": {
|
|
30661
30978
|
"type": "font/woff",
|
|
30662
30979
|
"etag": "\"2304-q8ppn7qePqLys53UrEKMrGT8e6E\"",
|
|
30663
|
-
"mtime": "2026-09-
|
|
30980
|
+
"mtime": "2026-09-06T06:27:43.481Z",
|
|
30664
30981
|
"size": 8964,
|
|
30665
30982
|
"path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.BL1XYHtS.woff"
|
|
30666
30983
|
},
|
|
30667
|
-
"/_nuxt/eb-garamond-greek-ext-400-
|
|
30984
|
+
"/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2": {
|
|
30668
30985
|
"type": "font/woff2",
|
|
30669
|
-
"etag": "\"
|
|
30670
|
-
"mtime": "2026-09-
|
|
30671
|
-
"size":
|
|
30672
|
-
"path": "../public/_nuxt/eb-garamond-greek-ext-400-
|
|
30986
|
+
"etag": "\"19d0-ppOK6AfNTXYuDEeeEMQQhOypGW8\"",
|
|
30987
|
+
"mtime": "2026-09-06T06:27:43.482Z",
|
|
30988
|
+
"size": 6608,
|
|
30989
|
+
"path": "../public/_nuxt/eb-garamond-greek-ext-400-italic.CHZOQEtG.woff2"
|
|
30673
30990
|
},
|
|
30674
30991
|
"/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff": {
|
|
30675
30992
|
"type": "font/woff",
|
|
30676
30993
|
"etag": "\"20b0-FNV/ZgjupejIrGOsz4+8EYVUXHo\"",
|
|
30677
|
-
"mtime": "2026-09-
|
|
30994
|
+
"mtime": "2026-09-06T06:27:43.482Z",
|
|
30678
30995
|
"size": 8368,
|
|
30679
30996
|
"path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.BaZl8BIK.woff"
|
|
30680
30997
|
},
|
|
30998
|
+
"/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2": {
|
|
30999
|
+
"type": "font/woff2",
|
|
31000
|
+
"etag": "\"1940-Y3hsqG2RXMGI9hHTiI+Nv2Q4msM\"",
|
|
31001
|
+
"mtime": "2026-09-06T06:27:43.482Z",
|
|
31002
|
+
"size": 6464,
|
|
31003
|
+
"path": "../public/_nuxt/eb-garamond-greek-ext-400-normal.K8pwR3tn.woff2"
|
|
31004
|
+
},
|
|
30681
31005
|
"/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff": {
|
|
30682
31006
|
"type": "font/woff",
|
|
30683
31007
|
"etag": "\"7890-VX8YYh09367bg28IWSUybEXrsDQ\"",
|
|
30684
|
-
"mtime": "2026-09-
|
|
31008
|
+
"mtime": "2026-09-06T06:27:43.482Z",
|
|
30685
31009
|
"size": 30864,
|
|
30686
31010
|
"path": "../public/_nuxt/eb-garamond-latin-400-italic.CDFyLPXJ.woff"
|
|
30687
31011
|
},
|
|
30688
31012
|
"/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2": {
|
|
30689
31013
|
"type": "font/woff2",
|
|
30690
31014
|
"etag": "\"632c-iB8RNlBCm9D0APLcMJ/hIPATx+0\"",
|
|
30691
|
-
"mtime": "2026-09-
|
|
31015
|
+
"mtime": "2026-09-06T06:27:43.483Z",
|
|
30692
31016
|
"size": 25388,
|
|
30693
31017
|
"path": "../public/_nuxt/eb-garamond-latin-400-italic.DSEbMgZu.woff2"
|
|
30694
31018
|
},
|
|
30695
31019
|
"/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2": {
|
|
30696
31020
|
"type": "font/woff2",
|
|
30697
31021
|
"etag": "\"5d0c-w7FmIa34l5RBoJYmvp9lwadEvW4\"",
|
|
30698
|
-
"mtime": "2026-09-
|
|
31022
|
+
"mtime": "2026-09-06T06:27:43.483Z",
|
|
30699
31023
|
"size": 23820,
|
|
30700
31024
|
"path": "../public/_nuxt/eb-garamond-latin-400-normal.BCNrxLz_.woff2"
|
|
30701
31025
|
},
|
|
30702
31026
|
"/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff": {
|
|
30703
31027
|
"type": "font/woff",
|
|
30704
31028
|
"etag": "\"6fc0-tKFcVMt7ocp7dmWyG6/kxtP5mKY\"",
|
|
30705
|
-
"mtime": "2026-09-
|
|
31029
|
+
"mtime": "2026-09-06T06:27:43.483Z",
|
|
30706
31030
|
"size": 28608,
|
|
30707
31031
|
"path": "../public/_nuxt/eb-garamond-latin-400-normal.maQnHeKB.woff"
|
|
30708
31032
|
},
|
|
30709
|
-
"/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff": {
|
|
30710
|
-
"type": "font/woff",
|
|
30711
|
-
"etag": "\"f5b8-o98RIl4uKzIPJHZZpEI+mI17K3c\"",
|
|
30712
|
-
"mtime": "2026-09-05T16:50:03.025Z",
|
|
30713
|
-
"size": 62904,
|
|
30714
|
-
"path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff"
|
|
30715
|
-
},
|
|
30716
31033
|
"/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2": {
|
|
30717
31034
|
"type": "font/woff2",
|
|
30718
31035
|
"etag": "\"b19c-7qms9anmdJJsBixQTHSocgV31Qk\"",
|
|
30719
|
-
"mtime": "2026-09-
|
|
31036
|
+
"mtime": "2026-09-06T06:27:43.483Z",
|
|
30720
31037
|
"size": 45468,
|
|
30721
31038
|
"path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.V7s3nWfX.woff2"
|
|
30722
31039
|
},
|
|
31040
|
+
"/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff": {
|
|
31041
|
+
"type": "font/woff",
|
|
31042
|
+
"etag": "\"f5b8-o98RIl4uKzIPJHZZpEI+mI17K3c\"",
|
|
31043
|
+
"mtime": "2026-09-06T06:27:43.483Z",
|
|
31044
|
+
"size": 62904,
|
|
31045
|
+
"path": "../public/_nuxt/eb-garamond-latin-ext-400-italic.DUSsnRSD.woff"
|
|
31046
|
+
},
|
|
30723
31047
|
"/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff": {
|
|
30724
31048
|
"type": "font/woff",
|
|
30725
31049
|
"etag": "\"12b44-jg/K3aZca4XOngCAf1Jh47/0cj8\"",
|
|
30726
|
-
"mtime": "2026-09-
|
|
31050
|
+
"mtime": "2026-09-06T06:27:43.484Z",
|
|
30727
31051
|
"size": 76612,
|
|
30728
31052
|
"path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.B4EmgUmt.woff"
|
|
30729
31053
|
},
|
|
30730
31054
|
"/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2": {
|
|
30731
31055
|
"type": "font/woff2",
|
|
30732
31056
|
"etag": "\"de84-qKZ/sgxlZLRv1TmEnWR30Cc4wfw\"",
|
|
30733
|
-
"mtime": "2026-09-
|
|
31057
|
+
"mtime": "2026-09-06T06:27:43.484Z",
|
|
30734
31058
|
"size": 56964,
|
|
30735
31059
|
"path": "../public/_nuxt/eb-garamond-latin-ext-400-normal.o4A__6QZ.woff2"
|
|
30736
31060
|
},
|
|
30737
|
-
"/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff": {
|
|
30738
|
-
"type": "font/woff",
|
|
30739
|
-
"etag": "\"1edc-XUugZ4qMSSF4m+TQLER2LLza1t0\"",
|
|
30740
|
-
"mtime": "2026-09-05T16:50:03.027Z",
|
|
30741
|
-
"size": 7900,
|
|
30742
|
-
"path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff"
|
|
30743
|
-
},
|
|
30744
31061
|
"/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2": {
|
|
30745
31062
|
"type": "font/woff2",
|
|
30746
31063
|
"etag": "\"183c-arAHcc3MmJQ6+OtYVThlERUqDQQ\"",
|
|
30747
|
-
"mtime": "2026-09-
|
|
31064
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30748
31065
|
"size": 6204,
|
|
30749
31066
|
"path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.CLvJdMEL.woff2"
|
|
30750
31067
|
},
|
|
30751
31068
|
"/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2": {
|
|
30752
31069
|
"type": "font/woff2",
|
|
30753
31070
|
"etag": "\"187c-Wj36AOh9OjwDZT5W3eeao1D/NT4\"",
|
|
30754
|
-
"mtime": "2026-09-
|
|
31071
|
+
"mtime": "2026-09-06T06:27:43.484Z",
|
|
30755
31072
|
"size": 6268,
|
|
30756
31073
|
"path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.DQ8HKnks.woff2"
|
|
30757
31074
|
},
|
|
31075
|
+
"/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff": {
|
|
31076
|
+
"type": "font/woff",
|
|
31077
|
+
"etag": "\"1edc-XUugZ4qMSSF4m+TQLER2LLza1t0\"",
|
|
31078
|
+
"mtime": "2026-09-06T06:27:43.484Z",
|
|
31079
|
+
"size": 7900,
|
|
31080
|
+
"path": "../public/_nuxt/eb-garamond-vietnamese-400-italic.ORtyMVfw.woff"
|
|
31081
|
+
},
|
|
30758
31082
|
"/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff": {
|
|
30759
31083
|
"type": "font/woff",
|
|
30760
31084
|
"etag": "\"1e50-PGVIQbsmhTvI1h5aIhavpIQl8z4\"",
|
|
30761
|
-
"mtime": "2026-09-
|
|
31085
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30762
31086
|
"size": 7760,
|
|
30763
31087
|
"path": "../public/_nuxt/eb-garamond-vietnamese-400-normal.ifvNSiWx.woff"
|
|
30764
31088
|
},
|
|
30765
|
-
"/_nuxt/
|
|
31089
|
+
"/_nuxt/eHYnGew0.js": {
|
|
30766
31090
|
"type": "text/javascript; charset=utf-8",
|
|
30767
|
-
"etag": "\"
|
|
30768
|
-
"mtime": "2026-09-
|
|
30769
|
-
"size":
|
|
30770
|
-
"path": "../public/_nuxt/
|
|
31091
|
+
"etag": "\"f919-Mna7yicjedSnPxQ5bWRqIqFwv4Y\"",
|
|
31092
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31093
|
+
"size": 63769,
|
|
31094
|
+
"path": "../public/_nuxt/eHYnGew0.js"
|
|
31095
|
+
},
|
|
31096
|
+
"/_nuxt/eUGyJdiT.js": {
|
|
31097
|
+
"type": "text/javascript; charset=utf-8",
|
|
31098
|
+
"etag": "\"20aa-Rif3v+aNt91q54e4MLGobwnuKbg\"",
|
|
31099
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31100
|
+
"size": 8362,
|
|
31101
|
+
"path": "../public/_nuxt/eUGyJdiT.js"
|
|
30771
31102
|
},
|
|
30772
|
-
"/_nuxt/entry.
|
|
31103
|
+
"/_nuxt/entry.B03HBJGC.css": {
|
|
30773
31104
|
"type": "text/css; charset=utf-8",
|
|
30774
|
-
"etag": "\"
|
|
30775
|
-
"mtime": "2026-09-
|
|
30776
|
-
"size":
|
|
30777
|
-
"path": "../public/_nuxt/entry.
|
|
31105
|
+
"etag": "\"1c055-65ofZQx2xN6gZDfaEowRXq+oi4c\"",
|
|
31106
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
31107
|
+
"size": 114773,
|
|
31108
|
+
"path": "../public/_nuxt/entry.B03HBJGC.css"
|
|
30778
31109
|
},
|
|
30779
|
-
"/_nuxt/
|
|
31110
|
+
"/_nuxt/G0qIw7Gq2.js": {
|
|
30780
31111
|
"type": "text/javascript; charset=utf-8",
|
|
30781
|
-
"etag": "\"
|
|
30782
|
-
"mtime": "2026-09-
|
|
30783
|
-
"size":
|
|
30784
|
-
"path": "../public/_nuxt/
|
|
31112
|
+
"etag": "\"462-s/N+VoJiDplj3GORHgaIwAR+Uqk\"",
|
|
31113
|
+
"mtime": "2026-09-06T06:27:43.472Z",
|
|
31114
|
+
"size": 1122,
|
|
31115
|
+
"path": "../public/_nuxt/G0qIw7Gq2.js"
|
|
30785
31116
|
},
|
|
30786
31117
|
"/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2": {
|
|
30787
31118
|
"type": "font/woff2",
|
|
30788
31119
|
"etag": "\"1cfc-yYSDXNlt/tTRaj6rJo8ZMqvY7pQ\"",
|
|
30789
|
-
"mtime": "2026-09-
|
|
31120
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30790
31121
|
"size": 7420,
|
|
30791
31122
|
"path": "../public/_nuxt/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2"
|
|
30792
31123
|
},
|
|
30793
|
-
"/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2": {
|
|
30794
|
-
"type": "font/woff2",
|
|
30795
|
-
"etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
|
|
30796
|
-
"mtime": "2026-09-05T16:50:03.028Z",
|
|
30797
|
-
"size": 16512,
|
|
30798
|
-
"path": "../public/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2"
|
|
30799
|
-
},
|
|
30800
31124
|
"/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2": {
|
|
30801
31125
|
"type": "font/woff2",
|
|
30802
31126
|
"etag": "\"3aec-5kpQSZEtAzzU5kdiuro3Zr2YR54\"",
|
|
30803
|
-
"mtime": "2026-09-
|
|
31127
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30804
31128
|
"size": 15084,
|
|
30805
31129
|
"path": "../public/_nuxt/geist-cyrillic-wght-normal.BEAKL7Jp.woff2"
|
|
30806
31130
|
},
|
|
31131
|
+
"/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2": {
|
|
31132
|
+
"type": "font/woff2",
|
|
31133
|
+
"etag": "\"4080-mZu3Z7sOWqglha+kefNbUA9Pp+Q\"",
|
|
31134
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
31135
|
+
"size": 16512,
|
|
31136
|
+
"path": "../public/_nuxt/geist-latin-ext-wght-normal.DC-KSUi6.woff2"
|
|
31137
|
+
},
|
|
30807
31138
|
"/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2": {
|
|
30808
31139
|
"type": "font/woff2",
|
|
30809
31140
|
"etag": "\"72d8-9J+D7/6th5UzRxIgoFX9awJv47A\"",
|
|
30810
|
-
"mtime": "2026-09-
|
|
31141
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30811
31142
|
"size": 29400,
|
|
30812
31143
|
"path": "../public/_nuxt/geist-latin-wght-normal.BgDaEnEv.woff2"
|
|
30813
31144
|
},
|
|
30814
31145
|
"/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2": {
|
|
30815
31146
|
"type": "font/woff2",
|
|
30816
31147
|
"etag": "\"1820-nQACIwCsmkduQK2CSMidMhmLR9U\"",
|
|
30817
|
-
"mtime": "2026-09-
|
|
31148
|
+
"mtime": "2026-09-06T06:27:43.485Z",
|
|
30818
31149
|
"size": 6176,
|
|
30819
31150
|
"path": "../public/_nuxt/geist-mono-cyrillic-ext-wght-normal.X_5orZeX.woff2"
|
|
30820
31151
|
},
|
|
30821
31152
|
"/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2": {
|
|
30822
31153
|
"type": "font/woff2",
|
|
30823
31154
|
"etag": "\"328c-3kQUs7xjzfvJdLvI58iU6DHlynA\"",
|
|
30824
|
-
"mtime": "2026-09-
|
|
31155
|
+
"mtime": "2026-09-06T06:27:43.486Z",
|
|
30825
31156
|
"size": 12940,
|
|
30826
31157
|
"path": "../public/_nuxt/geist-mono-cyrillic-wght-normal.DiZS0aHC.woff2"
|
|
30827
31158
|
},
|
|
30828
|
-
"/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2": {
|
|
30829
|
-
"type": "font/woff2",
|
|
30830
|
-
"etag": "\"5a58-jDy+14PX7OhwqFZsiKzuRax9xZ8\"",
|
|
30831
|
-
"mtime": "2026-09-05T16:50:03.030Z",
|
|
30832
|
-
"size": 23128,
|
|
30833
|
-
"path": "../public/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2"
|
|
30834
|
-
},
|
|
30835
31159
|
"/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2": {
|
|
30836
31160
|
"type": "font/woff2",
|
|
30837
31161
|
"etag": "\"3968-BV9ZbqWHVAcipAKX5y8la3JkUQs\"",
|
|
30838
|
-
"mtime": "2026-09-
|
|
31162
|
+
"mtime": "2026-09-06T06:27:43.486Z",
|
|
30839
31163
|
"size": 14696,
|
|
30840
31164
|
"path": "../public/_nuxt/geist-mono-latin-ext-wght-normal.Bwz-egvJ.woff2"
|
|
30841
31165
|
},
|
|
31166
|
+
"/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2": {
|
|
31167
|
+
"type": "font/woff2",
|
|
31168
|
+
"etag": "\"5a58-jDy+14PX7OhwqFZsiKzuRax9xZ8\"",
|
|
31169
|
+
"mtime": "2026-09-06T06:27:43.486Z",
|
|
31170
|
+
"size": 23128,
|
|
31171
|
+
"path": "../public/_nuxt/geist-mono-latin-wght-normal.XN7g48iV.woff2"
|
|
31172
|
+
},
|
|
30842
31173
|
"/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2": {
|
|
30843
31174
|
"type": "font/woff2",
|
|
30844
31175
|
"etag": "\"16b4-aZoLOGWoEYW7gmwZamfz5kTfFco\"",
|
|
30845
|
-
"mtime": "2026-09-
|
|
31176
|
+
"mtime": "2026-09-06T06:27:43.487Z",
|
|
30846
31177
|
"size": 5812,
|
|
30847
31178
|
"path": "../public/_nuxt/geist-mono-symbols2-wght-normal.CO5SzqOn.woff2"
|
|
30848
31179
|
},
|
|
30849
|
-
"/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2": {
|
|
30850
|
-
"type": "font/woff2",
|
|
30851
|
-
"etag": "\"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8\"",
|
|
30852
|
-
"mtime": "2026-09-05T16:50:03.031Z",
|
|
30853
|
-
"size": 8004,
|
|
30854
|
-
"path": "../public/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2"
|
|
30855
|
-
},
|
|
30856
31180
|
"/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2": {
|
|
30857
31181
|
"type": "font/woff2",
|
|
30858
31182
|
"etag": "\"1e10-mpU2OlFk4DakDO4paRfgJ2LHDsM\"",
|
|
30859
|
-
"mtime": "2026-09-
|
|
31183
|
+
"mtime": "2026-09-06T06:27:43.487Z",
|
|
30860
31184
|
"size": 7696,
|
|
30861
31185
|
"path": "../public/_nuxt/geist-mono-vietnamese-wght-normal.DadHysG0.woff2"
|
|
30862
31186
|
},
|
|
31187
|
+
"/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2": {
|
|
31188
|
+
"type": "font/woff2",
|
|
31189
|
+
"etag": "\"1f44-6MZ7/PEEOeDVF0eHI650KpwKQV8\"",
|
|
31190
|
+
"mtime": "2026-09-06T06:27:43.487Z",
|
|
31191
|
+
"size": 8004,
|
|
31192
|
+
"path": "../public/_nuxt/geist-vietnamese-wght-normal.6IgcOCM7.woff2"
|
|
31193
|
+
},
|
|
30863
31194
|
"/_nuxt/HclGiUj8.js": {
|
|
30864
31195
|
"type": "text/javascript; charset=utf-8",
|
|
30865
31196
|
"etag": "\"4bb-OjUbx7m0dPDFUkNfZ4BuUs+1sHI\"",
|
|
30866
|
-
"mtime": "2026-09-
|
|
31197
|
+
"mtime": "2026-09-06T06:27:43.473Z",
|
|
30867
31198
|
"size": 1211,
|
|
30868
31199
|
"path": "../public/_nuxt/HclGiUj8.js"
|
|
30869
31200
|
},
|
|
30870
31201
|
"/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2": {
|
|
30871
31202
|
"type": "font/woff2",
|
|
30872
31203
|
"etag": "\"20a4-mDbzFbXDuciYuRDdYbcJkcocaWU\"",
|
|
30873
|
-
"mtime": "2026-09-
|
|
31204
|
+
"mtime": "2026-09-06T06:27:43.487Z",
|
|
30874
31205
|
"size": 8356,
|
|
30875
31206
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2"
|
|
30876
31207
|
},
|
|
30877
31208
|
"/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff": {
|
|
30878
31209
|
"type": "font/woff",
|
|
30879
31210
|
"etag": "\"1c24-wpeoT2YBcqJ4hbipsoiB1m58w98\"",
|
|
30880
|
-
"mtime": "2026-09-
|
|
31211
|
+
"mtime": "2026-09-06T06:27:43.487Z",
|
|
30881
31212
|
"size": 7204,
|
|
30882
31213
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff"
|
|
30883
31214
|
},
|
|
30884
|
-
"/_nuxt/GP2wXyuY.js": {
|
|
30885
|
-
"type": "text/javascript; charset=utf-8",
|
|
30886
|
-
"etag": "\"3815-ylIVCg5f2owyOH6pRAUqhvrJO/4\"",
|
|
30887
|
-
"mtime": "2026-09-05T16:50:03.009Z",
|
|
30888
|
-
"size": 14357,
|
|
30889
|
-
"path": "../public/_nuxt/GP2wXyuY.js"
|
|
30890
|
-
},
|
|
30891
31215
|
"/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff": {
|
|
30892
31216
|
"type": "font/woff",
|
|
30893
31217
|
"etag": "\"1c28-50yap58S0sLYRB2B8AEk2dq82kg\"",
|
|
30894
|
-
"mtime": "2026-09-
|
|
31218
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30895
31219
|
"size": 7208,
|
|
30896
31220
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.woff"
|
|
30897
31221
|
},
|
|
30898
|
-
"/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2": {
|
|
30899
|
-
"type": "font/woff2",
|
|
30900
|
-
"etag": "\"210c-yqAnW+098RkHUvQzwj27Jo9sIUc\"",
|
|
30901
|
-
"mtime": "2026-09-05T16:50:03.032Z",
|
|
30902
|
-
"size": 8460,
|
|
30903
|
-
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2"
|
|
30904
|
-
},
|
|
30905
31222
|
"/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2": {
|
|
30906
31223
|
"type": "font/woff2",
|
|
30907
31224
|
"etag": "\"2488-WHfw+ZaOHy8HhYaV0AzfKZ8dozA\"",
|
|
30908
|
-
"mtime": "2026-09-
|
|
31225
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30909
31226
|
"size": 9352,
|
|
30910
31227
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.CTOM6hUh.woff2"
|
|
30911
31228
|
},
|
|
31229
|
+
"/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2": {
|
|
31230
|
+
"type": "font/woff2",
|
|
31231
|
+
"etag": "\"210c-yqAnW+098RkHUvQzwj27Jo9sIUc\"",
|
|
31232
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
31233
|
+
"size": 8460,
|
|
31234
|
+
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2"
|
|
31235
|
+
},
|
|
30912
31236
|
"/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff": {
|
|
30913
31237
|
"type": "font/woff",
|
|
30914
31238
|
"etag": "\"1c64-t3eBraFEv1B6D+DIfK23+8/F2mA\"",
|
|
30915
|
-
"mtime": "2026-09-
|
|
31239
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30916
31240
|
"size": 7268,
|
|
30917
31241
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-600-normal.fLZuRloM.woff"
|
|
30918
31242
|
},
|
|
30919
31243
|
"/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff": {
|
|
30920
31244
|
"type": "font/woff",
|
|
30921
31245
|
"etag": "\"16bc-GBHBT1lClOFRLkxzjkkoZV1QN+Y\"",
|
|
30922
|
-
"mtime": "2026-09-
|
|
31246
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30923
31247
|
"size": 5820,
|
|
30924
31248
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff"
|
|
30925
31249
|
},
|
|
30926
31250
|
"/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2": {
|
|
30927
31251
|
"type": "font/woff2",
|
|
30928
31252
|
"etag": "\"1b00-w57wcK5m30ZZ4sBwsaWzlcI3F7c\"",
|
|
30929
|
-
"mtime": "2026-09-
|
|
31253
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30930
31254
|
"size": 6912,
|
|
30931
31255
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2"
|
|
30932
31256
|
},
|
|
30933
|
-
"/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2": {
|
|
30934
|
-
"type": "font/woff2",
|
|
30935
|
-
"etag": "\"1b3c-pFin0Xk9XlGLhqdo1+npFJkyQ5Y\"",
|
|
30936
|
-
"mtime": "2026-09-05T16:50:03.034Z",
|
|
30937
|
-
"size": 6972,
|
|
30938
|
-
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2"
|
|
30939
|
-
},
|
|
30940
31257
|
"/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff": {
|
|
30941
31258
|
"type": "font/woff",
|
|
30942
31259
|
"etag": "\"168c-gvDCX7ATl9g9LbPEKlQjJSXhRPw\"",
|
|
30943
|
-
"mtime": "2026-09-
|
|
31260
|
+
"mtime": "2026-09-06T06:27:43.488Z",
|
|
30944
31261
|
"size": 5772,
|
|
30945
31262
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.woff"
|
|
30946
31263
|
},
|
|
31264
|
+
"/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2": {
|
|
31265
|
+
"type": "font/woff2",
|
|
31266
|
+
"etag": "\"1b3c-pFin0Xk9XlGLhqdo1+npFJkyQ5Y\"",
|
|
31267
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
31268
|
+
"size": 6972,
|
|
31269
|
+
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2"
|
|
31270
|
+
},
|
|
30947
31271
|
"/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff": {
|
|
30948
31272
|
"type": "font/woff",
|
|
30949
31273
|
"etag": "\"16a0-8RgtlGopOkBt2P4jKMMd7hk+D74\"",
|
|
30950
|
-
"mtime": "2026-09-
|
|
31274
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
30951
31275
|
"size": 5792,
|
|
30952
31276
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.9HEixskS.woff"
|
|
30953
31277
|
},
|
|
30954
31278
|
"/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2": {
|
|
30955
31279
|
"type": "font/woff2",
|
|
30956
31280
|
"etag": "\"1e0c-R9/TBUX2qLWGlHeC55LoggyLdII\"",
|
|
30957
|
-
"mtime": "2026-09-
|
|
31281
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
30958
31282
|
"size": 7692,
|
|
30959
31283
|
"path": "../public/_nuxt/ibm-plex-mono-cyrillic-ext-600-normal.V-xxqcpd.woff2"
|
|
30960
31284
|
},
|
|
30961
31285
|
"/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff": {
|
|
30962
31286
|
"type": "font/woff",
|
|
30963
31287
|
"etag": "\"3358-rWMSbc9cch7FBErQpfnWcshAYFM\"",
|
|
30964
|
-
"mtime": "2026-09-
|
|
31288
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
30965
31289
|
"size": 13144,
|
|
30966
31290
|
"path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff"
|
|
30967
31291
|
},
|
|
30968
|
-
"/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2": {
|
|
30969
|
-
"type": "font/woff2",
|
|
30970
|
-
"etag": "\"3a28-0y8OBwGsYgQ4QBMagAznF6huTuI\"",
|
|
30971
|
-
"mtime": "2026-09-05T16:50:03.035Z",
|
|
30972
|
-
"size": 14888,
|
|
30973
|
-
"path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2"
|
|
30974
|
-
},
|
|
30975
31292
|
"/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff": {
|
|
30976
31293
|
"type": "font/woff",
|
|
30977
31294
|
"etag": "\"3364-S8wip5no4QO46BFh3FPzQKpIOec\"",
|
|
30978
|
-
"mtime": "2026-09-
|
|
31295
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
30979
31296
|
"size": 13156,
|
|
30980
31297
|
"path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff"
|
|
30981
31298
|
},
|
|
30982
31299
|
"/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2": {
|
|
30983
31300
|
"type": "font/woff2",
|
|
30984
31301
|
"etag": "\"3974-u4dQDjIEo6fGXWYzx5xchAw76NM\"",
|
|
30985
|
-
"mtime": "2026-09-
|
|
31302
|
+
"mtime": "2026-09-06T06:27:43.489Z",
|
|
30986
31303
|
"size": 14708,
|
|
30987
31304
|
"path": "../public/_nuxt/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2"
|
|
30988
31305
|
},
|
|
31306
|
+
"/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2": {
|
|
31307
|
+
"type": "font/woff2",
|
|
31308
|
+
"etag": "\"3a28-0y8OBwGsYgQ4QBMagAznF6huTuI\"",
|
|
31309
|
+
"mtime": "2026-09-06T06:27:43.490Z",
|
|
31310
|
+
"size": 14888,
|
|
31311
|
+
"path": "../public/_nuxt/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2"
|
|
31312
|
+
},
|
|
30989
31313
|
"/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2": {
|
|
30990
31314
|
"type": "font/woff2",
|
|
30991
31315
|
"etag": "\"3d04-zppco6h02pIBwmMMXLe/qpaIwFI\"",
|
|
30992
|
-
"mtime": "2026-09-
|
|
31316
|
+
"mtime": "2026-09-06T06:27:43.490Z",
|
|
30993
31317
|
"size": 15620,
|
|
30994
31318
|
"path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2"
|
|
30995
31319
|
},
|
|
30996
|
-
"/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff": {
|
|
30997
|
-
"type": "font/woff",
|
|
30998
|
-
"etag": "\"2df8-dfJwTWMZxHyGnUuJDGfpU4w2dLs\"",
|
|
30999
|
-
"mtime": "2026-09-05T16:50:03.036Z",
|
|
31000
|
-
"size": 11768,
|
|
31001
|
-
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff"
|
|
31002
|
-
},
|
|
31003
31320
|
"/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff": {
|
|
31004
31321
|
"type": "font/woff",
|
|
31005
31322
|
"etag": "\"3398-D/GHpHo4zls8HLHH2boKeigB6S4\"",
|
|
31006
|
-
"mtime": "2026-09-
|
|
31323
|
+
"mtime": "2026-09-06T06:27:43.490Z",
|
|
31007
31324
|
"size": 13208,
|
|
31008
31325
|
"path": "../public/_nuxt/ibm-plex-mono-latin-600-normal.DWFSQ4vo.woff"
|
|
31009
31326
|
},
|
|
31327
|
+
"/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2": {
|
|
31328
|
+
"type": "font/woff2",
|
|
31329
|
+
"etag": "\"3424-SvjO9SK9iRLLL61B4GuQJWQP62I\"",
|
|
31330
|
+
"mtime": "2026-09-06T06:27:43.491Z",
|
|
31331
|
+
"size": 13348,
|
|
31332
|
+
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2"
|
|
31333
|
+
},
|
|
31010
31334
|
"/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2": {
|
|
31011
31335
|
"type": "font/woff2",
|
|
31012
31336
|
"etag": "\"3478-PpQvQo59iHxPLcEUBhJfmFmCPuA\"",
|
|
31013
|
-
"mtime": "2026-09-
|
|
31337
|
+
"mtime": "2026-09-06T06:27:43.491Z",
|
|
31014
31338
|
"size": 13432,
|
|
31015
31339
|
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2"
|
|
31016
31340
|
},
|
|
31017
|
-
"/_nuxt/ibm-plex-mono-latin-ext-400-normal.
|
|
31018
|
-
"type": "font/
|
|
31019
|
-
"etag": "\"
|
|
31020
|
-
"mtime": "2026-09-
|
|
31021
|
-
"size":
|
|
31022
|
-
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.
|
|
31341
|
+
"/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff": {
|
|
31342
|
+
"type": "font/woff",
|
|
31343
|
+
"etag": "\"2df8-dfJwTWMZxHyGnUuJDGfpU4w2dLs\"",
|
|
31344
|
+
"mtime": "2026-09-06T06:27:43.491Z",
|
|
31345
|
+
"size": 11768,
|
|
31346
|
+
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff"
|
|
31023
31347
|
},
|
|
31024
31348
|
"/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff": {
|
|
31025
31349
|
"type": "font/woff",
|
|
31026
31350
|
"etag": "\"2df8-73sb1BUyjMsq70ppsdZBHEqWrtE\"",
|
|
31027
|
-
"mtime": "2026-09-
|
|
31351
|
+
"mtime": "2026-09-06T06:27:43.491Z",
|
|
31028
31352
|
"size": 11768,
|
|
31029
31353
|
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff"
|
|
31030
31354
|
},
|
|
31031
31355
|
"/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2": {
|
|
31032
31356
|
"type": "font/woff2",
|
|
31033
31357
|
"etag": "\"37f8-5XYRqKuMO2rN5QZqfj4VW8r2jSQ\"",
|
|
31034
|
-
"mtime": "2026-09-
|
|
31358
|
+
"mtime": "2026-09-06T06:27:43.491Z",
|
|
31035
31359
|
"size": 14328,
|
|
31036
31360
|
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2"
|
|
31037
31361
|
},
|
|
31038
|
-
"/_nuxt/ibm-plex-mono-
|
|
31362
|
+
"/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff": {
|
|
31039
31363
|
"type": "font/woff",
|
|
31040
|
-
"etag": "\"
|
|
31041
|
-
"mtime": "2026-09-
|
|
31042
|
-
"size":
|
|
31043
|
-
"path": "../public/_nuxt/ibm-plex-mono-
|
|
31364
|
+
"etag": "\"2e38-fOmVENNzEJaYqxODn6K5NAbrEJk\"",
|
|
31365
|
+
"mtime": "2026-09-06T06:27:43.492Z",
|
|
31366
|
+
"size": 11832,
|
|
31367
|
+
"path": "../public/_nuxt/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff"
|
|
31044
31368
|
},
|
|
31045
31369
|
"/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2": {
|
|
31046
31370
|
"type": "font/woff2",
|
|
31047
31371
|
"etag": "\"16ec-bIkS18/YaTiWdOzfzp4pFXvLmqQ\"",
|
|
31048
|
-
"mtime": "2026-09-
|
|
31372
|
+
"mtime": "2026-09-06T06:27:43.492Z",
|
|
31049
31373
|
"size": 5868,
|
|
31050
31374
|
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2"
|
|
31051
31375
|
},
|
|
31052
|
-
"/_nuxt/ibm-plex-mono-
|
|
31376
|
+
"/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff": {
|
|
31053
31377
|
"type": "font/woff",
|
|
31054
|
-
"etag": "\"
|
|
31055
|
-
"mtime": "2026-09-
|
|
31056
|
-
"size":
|
|
31057
|
-
"path": "../public/_nuxt/ibm-plex-mono-
|
|
31378
|
+
"etag": "\"15f4-LdRX2sBB3T5WDAsZLCwBlsMYXPw\"",
|
|
31379
|
+
"mtime": "2026-09-06T06:27:43.492Z",
|
|
31380
|
+
"size": 5620,
|
|
31381
|
+
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff"
|
|
31058
31382
|
},
|
|
31059
31383
|
"/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff": {
|
|
31060
31384
|
"type": "font/woff",
|
|
31061
31385
|
"etag": "\"15f0-mGuZIt/ndQFiw5uxmCOkhhWSxi4\"",
|
|
31062
|
-
"mtime": "2026-09-
|
|
31386
|
+
"mtime": "2026-09-06T06:27:43.493Z",
|
|
31063
31387
|
"size": 5616,
|
|
31064
31388
|
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.woff"
|
|
31065
31389
|
},
|
|
31066
31390
|
"/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2": {
|
|
31067
31391
|
"type": "font/woff2",
|
|
31068
31392
|
"etag": "\"1798-7VDjg0E2ggd9c0kJDHNRh+Fu5E0\"",
|
|
31069
|
-
"mtime": "2026-09-
|
|
31393
|
+
"mtime": "2026-09-06T06:27:43.493Z",
|
|
31070
31394
|
"size": 6040,
|
|
31071
31395
|
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2"
|
|
31072
31396
|
},
|
|
31073
31397
|
"/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2": {
|
|
31074
31398
|
"type": "font/woff2",
|
|
31075
31399
|
"etag": "\"1b14-ylPjcMKGVc4RbTi2G25N0MSlVNo\"",
|
|
31076
|
-
"mtime": "2026-09-
|
|
31400
|
+
"mtime": "2026-09-06T06:27:43.493Z",
|
|
31077
31401
|
"size": 6932,
|
|
31078
31402
|
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.D2EvbN8M.woff2"
|
|
31079
31403
|
},
|
|
31080
31404
|
"/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff": {
|
|
31081
31405
|
"type": "font/woff",
|
|
31082
31406
|
"etag": "\"1650-9Pko0qRZ+EoISmnDaTRQ8KRGy/s\"",
|
|
31083
|
-
"mtime": "2026-09-
|
|
31407
|
+
"mtime": "2026-09-06T06:27:43.493Z",
|
|
31084
31408
|
"size": 5712,
|
|
31085
31409
|
"path": "../public/_nuxt/ibm-plex-mono-vietnamese-600-normal.iLQfcSjf.woff"
|
|
31086
31410
|
},
|
|
31087
|
-
"/_nuxt/
|
|
31411
|
+
"/_nuxt/kkEthL84.js": {
|
|
31088
31412
|
"type": "text/javascript; charset=utf-8",
|
|
31089
|
-
"etag": "\"
|
|
31090
|
-
"mtime": "2026-09-
|
|
31091
|
-
"size":
|
|
31092
|
-
"path": "../public/_nuxt/
|
|
31413
|
+
"etag": "\"1c85b-rndZIGE/0sbN/dsGvCDYNjDmhrs\"",
|
|
31414
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31415
|
+
"size": 116827,
|
|
31416
|
+
"path": "../public/_nuxt/kkEthL84.js"
|
|
31093
31417
|
},
|
|
31094
31418
|
"/_nuxt/lO5tpDZ5.js": {
|
|
31095
31419
|
"type": "text/javascript; charset=utf-8",
|
|
31096
31420
|
"etag": "\"3b-z4jypkmUW9c9v+AALQ28pDyJ80A\"",
|
|
31097
|
-
"mtime": "2026-09-
|
|
31421
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31098
31422
|
"size": 59,
|
|
31099
31423
|
"path": "../public/_nuxt/lO5tpDZ5.js"
|
|
31100
31424
|
},
|
|
31101
|
-
"/_nuxt/
|
|
31425
|
+
"/_nuxt/kZl6yT-12.js": {
|
|
31426
|
+
"type": "text/javascript; charset=utf-8",
|
|
31427
|
+
"etag": "\"e9-t0VKevMurw+ruGbCV/EgmcM2dww\"",
|
|
31428
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31429
|
+
"size": 233,
|
|
31430
|
+
"path": "../public/_nuxt/kZl6yT-12.js"
|
|
31431
|
+
},
|
|
31432
|
+
"/_nuxt/logs.BO-BSyjm.css": {
|
|
31102
31433
|
"type": "text/css; charset=utf-8",
|
|
31103
|
-
"etag": "\"1635-
|
|
31104
|
-
"mtime": "2026-09-
|
|
31434
|
+
"etag": "\"1635-oLZsusF3NVkvz+WVroCfL6psPFE\"",
|
|
31435
|
+
"mtime": "2026-09-06T06:27:43.493Z",
|
|
31105
31436
|
"size": 5685,
|
|
31106
|
-
"path": "../public/_nuxt/logs.
|
|
31437
|
+
"path": "../public/_nuxt/logs.BO-BSyjm.css"
|
|
31107
31438
|
},
|
|
31108
|
-
"/_nuxt/
|
|
31439
|
+
"/_nuxt/kZV5TQvh2.js": {
|
|
31109
31440
|
"type": "text/javascript; charset=utf-8",
|
|
31110
|
-
"etag": "\"
|
|
31111
|
-
"mtime": "2026-09-
|
|
31112
|
-
"size":
|
|
31113
|
-
"path": "../public/_nuxt/
|
|
31441
|
+
"etag": "\"b36-HJpEm4SThB06CEAVNx2ouDQlwFw\"",
|
|
31442
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31443
|
+
"size": 2870,
|
|
31444
|
+
"path": "../public/_nuxt/kZV5TQvh2.js"
|
|
31114
31445
|
},
|
|
31115
31446
|
"/_nuxt/monitor.CmwpEUCI.css": {
|
|
31116
31447
|
"type": "text/css; charset=utf-8",
|
|
31117
31448
|
"etag": "\"483-Lotbm40sJjjryRjOid43sPWucRw\"",
|
|
31118
|
-
"mtime": "2026-09-
|
|
31449
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31119
31450
|
"size": 1155,
|
|
31120
31451
|
"path": "../public/_nuxt/monitor.CmwpEUCI.css"
|
|
31121
31452
|
},
|
|
31122
31453
|
"/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css": {
|
|
31123
31454
|
"type": "text/css; charset=utf-8",
|
|
31124
31455
|
"etag": "\"10d0-uLyus3YRLFfRIoYhlKCERpGIwVE\"",
|
|
31125
|
-
"mtime": "2026-09-
|
|
31456
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31126
31457
|
"size": 4304,
|
|
31127
31458
|
"path": "../public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css"
|
|
31128
31459
|
},
|
|
31129
|
-
"/_nuxt/
|
|
31460
|
+
"/_nuxt/niDwBOZW.js": {
|
|
31130
31461
|
"type": "text/javascript; charset=utf-8",
|
|
31131
|
-
"etag": "\"
|
|
31132
|
-
"mtime": "2026-09-
|
|
31133
|
-
"size":
|
|
31134
|
-
"path": "../public/_nuxt/
|
|
31462
|
+
"etag": "\"12f1-JlgzqHJQENBszEGLuO9fMyRYm/E\"",
|
|
31463
|
+
"mtime": "2026-09-06T06:27:43.475Z",
|
|
31464
|
+
"size": 4849,
|
|
31465
|
+
"path": "../public/_nuxt/niDwBOZW.js"
|
|
31135
31466
|
},
|
|
31136
31467
|
"/_nuxt/pages.CytEOfUs.css": {
|
|
31137
31468
|
"type": "text/css; charset=utf-8",
|
|
31138
31469
|
"etag": "\"1f78-Zc87Z5OhCuyS/CdNTE5IMJgqhH0\"",
|
|
31139
|
-
"mtime": "2026-09-
|
|
31470
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31140
31471
|
"size": 8056,
|
|
31141
31472
|
"path": "../public/_nuxt/pages.CytEOfUs.css"
|
|
31142
31473
|
},
|
|
31143
|
-
"/_nuxt/
|
|
31474
|
+
"/_nuxt/ORt9oDIy2.js": {
|
|
31144
31475
|
"type": "text/javascript; charset=utf-8",
|
|
31145
|
-
"etag": "\"
|
|
31146
|
-
"mtime": "2026-09-
|
|
31147
|
-
"size":
|
|
31148
|
-
"path": "../public/_nuxt/
|
|
31476
|
+
"etag": "\"c42-g+2xQOk5SmNd8dk4LSqx7FrSVE0\"",
|
|
31477
|
+
"mtime": "2026-09-06T06:27:43.473Z",
|
|
31478
|
+
"size": 3138,
|
|
31479
|
+
"path": "../public/_nuxt/ORt9oDIy2.js"
|
|
31149
31480
|
},
|
|
31150
|
-
"/_nuxt/
|
|
31481
|
+
"/_nuxt/permissions.CwZo6t1V.css": {
|
|
31151
31482
|
"type": "text/css; charset=utf-8",
|
|
31152
|
-
"etag": "\"
|
|
31153
|
-
"mtime": "2026-09-
|
|
31154
|
-
"size":
|
|
31155
|
-
"path": "../public/_nuxt/
|
|
31483
|
+
"etag": "\"4c8-6pfdq+B3vLT8yShpEsjezRwI60k\"",
|
|
31484
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31485
|
+
"size": 1224,
|
|
31486
|
+
"path": "../public/_nuxt/permissions.CwZo6t1V.css"
|
|
31156
31487
|
},
|
|
31157
|
-
"/_nuxt/
|
|
31488
|
+
"/_nuxt/QoCzfpo2.js": {
|
|
31158
31489
|
"type": "text/javascript; charset=utf-8",
|
|
31159
|
-
"etag": "\"
|
|
31160
|
-
"mtime": "2026-09-
|
|
31161
|
-
"size":
|
|
31162
|
-
"path": "../public/_nuxt/
|
|
31490
|
+
"etag": "\"22a4-SrGVCoHXHudcEctvNqU+aTlWgyg\"",
|
|
31491
|
+
"mtime": "2026-09-06T06:27:43.473Z",
|
|
31492
|
+
"size": 8868,
|
|
31493
|
+
"path": "../public/_nuxt/QoCzfpo2.js"
|
|
31494
|
+
},
|
|
31495
|
+
"/_nuxt/plugins.Clsky_kl.css": {
|
|
31496
|
+
"type": "text/css; charset=utf-8",
|
|
31497
|
+
"etag": "\"a22-6XqjlTw44n7uzNJ8R9pxD9C1f58\"",
|
|
31498
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31499
|
+
"size": 2594,
|
|
31500
|
+
"path": "../public/_nuxt/plugins.Clsky_kl.css"
|
|
31501
|
+
},
|
|
31502
|
+
"/_nuxt/rqZ-1SoP.js": {
|
|
31503
|
+
"type": "text/javascript; charset=utf-8",
|
|
31504
|
+
"etag": "\"761d-n3nYYQYIxdnAu9GaImKE7k1Xy7Y\"",
|
|
31505
|
+
"mtime": "2026-09-06T06:27:43.476Z",
|
|
31506
|
+
"size": 30237,
|
|
31507
|
+
"path": "../public/_nuxt/rqZ-1SoP.js"
|
|
31163
31508
|
},
|
|
31164
31509
|
"/_nuxt/RYFtK4qZ2.js": {
|
|
31165
31510
|
"type": "text/javascript; charset=utf-8",
|
|
31166
31511
|
"etag": "\"594c-ZHrAodAyz6fWAruZCqluWn052zA\"",
|
|
31167
|
-
"mtime": "2026-09-
|
|
31512
|
+
"mtime": "2026-09-06T06:27:43.473Z",
|
|
31168
31513
|
"size": 22860,
|
|
31169
31514
|
"path": "../public/_nuxt/RYFtK4qZ2.js"
|
|
31170
31515
|
},
|
|
31171
|
-
"/_nuxt/
|
|
31516
|
+
"/_nuxt/RzXYI9FM.js": {
|
|
31172
31517
|
"type": "text/javascript; charset=utf-8",
|
|
31173
|
-
"etag": "\"
|
|
31174
|
-
"mtime": "2026-09-
|
|
31175
|
-
"size":
|
|
31176
|
-
"path": "../public/_nuxt/
|
|
31177
|
-
},
|
|
31178
|
-
"/_nuxt/teams.B8JNbUZg.css": {
|
|
31179
|
-
"type": "text/css; charset=utf-8",
|
|
31180
|
-
"etag": "\"6b7-7gKsNrCHeSx0FLL3kd7/KcsQBgw\"",
|
|
31181
|
-
"mtime": "2026-09-05T16:50:03.041Z",
|
|
31182
|
-
"size": 1719,
|
|
31183
|
-
"path": "../public/_nuxt/teams.B8JNbUZg.css"
|
|
31518
|
+
"etag": "\"9a6b-hWs9hqxsYAIn7EKAMQfiXbHC5bw\"",
|
|
31519
|
+
"mtime": "2026-09-06T06:27:43.474Z",
|
|
31520
|
+
"size": 39531,
|
|
31521
|
+
"path": "../public/_nuxt/RzXYI9FM.js"
|
|
31184
31522
|
},
|
|
31185
|
-
"/_nuxt/settings.
|
|
31523
|
+
"/_nuxt/settings.BqMF2nfj.css": {
|
|
31186
31524
|
"type": "text/css; charset=utf-8",
|
|
31187
|
-
"etag": "\"14e1-
|
|
31188
|
-
"mtime": "2026-09-
|
|
31525
|
+
"etag": "\"14e1-XjxEHtGImiK+UJc+jkb4oOU898E\"",
|
|
31526
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31189
31527
|
"size": 5345,
|
|
31190
|
-
"path": "../public/_nuxt/settings.
|
|
31528
|
+
"path": "../public/_nuxt/settings.BqMF2nfj.css"
|
|
31191
31529
|
},
|
|
31192
|
-
"/_nuxt/
|
|
31530
|
+
"/_nuxt/teams.CUMnbQGf.css": {
|
|
31193
31531
|
"type": "text/css; charset=utf-8",
|
|
31194
|
-
"etag": "\"
|
|
31195
|
-
"mtime": "2026-09-
|
|
31196
|
-
"size":
|
|
31197
|
-
"path": "../public/_nuxt/
|
|
31532
|
+
"etag": "\"6b7-g1G8KL1N00xQbucKbHyHr3V6KOg\"",
|
|
31533
|
+
"mtime": "2026-09-06T06:27:43.494Z",
|
|
31534
|
+
"size": 1719,
|
|
31535
|
+
"path": "../public/_nuxt/teams.CUMnbQGf.css"
|
|
31198
31536
|
},
|
|
31199
|
-
"/_nuxt/
|
|
31537
|
+
"/_nuxt/tJuVvBSl.js": {
|
|
31538
|
+
"type": "text/javascript; charset=utf-8",
|
|
31539
|
+
"etag": "\"3d83-P6RaJXpMzRBTtW1GmVDRQ+jjvLU\"",
|
|
31540
|
+
"mtime": "2026-09-06T06:27:43.476Z",
|
|
31541
|
+
"size": 15747,
|
|
31542
|
+
"path": "../public/_nuxt/tJuVvBSl.js"
|
|
31543
|
+
},
|
|
31544
|
+
"/_nuxt/tokens.BPLe9ioQ.css": {
|
|
31200
31545
|
"type": "text/css; charset=utf-8",
|
|
31201
|
-
"etag": "\"
|
|
31202
|
-
"mtime": "2026-09-
|
|
31203
|
-
"size":
|
|
31204
|
-
"path": "../public/_nuxt/
|
|
31546
|
+
"etag": "\"9cd-147MQyZ2Ox0eBoOzCqzEBTE6A1w\"",
|
|
31547
|
+
"mtime": "2026-09-06T06:27:43.495Z",
|
|
31548
|
+
"size": 2509,
|
|
31549
|
+
"path": "../public/_nuxt/tokens.BPLe9ioQ.css"
|
|
31205
31550
|
},
|
|
31206
31551
|
"/_nuxt/town.BLrD9-WH.css": {
|
|
31207
31552
|
"type": "text/css; charset=utf-8",
|
|
31208
31553
|
"etag": "\"64-INqlNEwsg1I+Dzc8LaEkJCLno5o\"",
|
|
31209
|
-
"mtime": "2026-09-
|
|
31554
|
+
"mtime": "2026-09-06T06:27:43.495Z",
|
|
31210
31555
|
"size": 100,
|
|
31211
31556
|
"path": "../public/_nuxt/town.BLrD9-WH.css"
|
|
31212
31557
|
},
|
|
31213
|
-
"/_nuxt/
|
|
31214
|
-
"type": "text/
|
|
31215
|
-
"etag": "\"
|
|
31216
|
-
"mtime": "2026-09-
|
|
31217
|
-
"size":
|
|
31218
|
-
"path": "../public/_nuxt/
|
|
31219
|
-
},
|
|
31220
|
-
"/_nuxt/uBbDCfTz.js": {
|
|
31221
|
-
"type": "text/javascript; charset=utf-8",
|
|
31222
|
-
"etag": "\"2435-2SmfQO0WbbFYq5CVz6TT/4+7jS4\"",
|
|
31223
|
-
"mtime": "2026-09-05T16:50:03.014Z",
|
|
31224
|
-
"size": 9269,
|
|
31225
|
-
"path": "../public/_nuxt/uBbDCfTz.js"
|
|
31558
|
+
"/_nuxt/town.C_DsNW0J.css": {
|
|
31559
|
+
"type": "text/css; charset=utf-8",
|
|
31560
|
+
"etag": "\"3b2-lx8uIK7y3f1Nkj2gMcTuak3mB/I\"",
|
|
31561
|
+
"mtime": "2026-09-06T06:27:43.495Z",
|
|
31562
|
+
"size": 946,
|
|
31563
|
+
"path": "../public/_nuxt/town.C_DsNW0J.css"
|
|
31226
31564
|
},
|
|
31227
|
-
"/_nuxt/TownView.
|
|
31565
|
+
"/_nuxt/TownView.BHLKAjEu.css": {
|
|
31228
31566
|
"type": "text/css; charset=utf-8",
|
|
31229
|
-
"etag": "\"11b2a-
|
|
31230
|
-
"mtime": "2026-09-
|
|
31567
|
+
"etag": "\"11b2a-iRw/kbvCuxhjwK4gMYcSwCJYIEk\"",
|
|
31568
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31231
31569
|
"size": 72490,
|
|
31232
|
-
"path": "../public/_nuxt/TownView.
|
|
31233
|
-
},
|
|
31234
|
-
"/_nuxt/ubPfs9mQ.js": {
|
|
31235
|
-
"type": "text/javascript; charset=utf-8",
|
|
31236
|
-
"etag": "\"1dc4-yIIKAQ37KJqWQcdDI1J/9WfoaDc\"",
|
|
31237
|
-
"mtime": "2026-09-05T16:50:03.015Z",
|
|
31238
|
-
"size": 7620,
|
|
31239
|
-
"path": "../public/_nuxt/ubPfs9mQ.js"
|
|
31570
|
+
"path": "../public/_nuxt/TownView.BHLKAjEu.css"
|
|
31240
31571
|
},
|
|
31241
31572
|
"/_nuxt/users.D8lcLE62.css": {
|
|
31242
31573
|
"type": "text/css; charset=utf-8",
|
|
31243
31574
|
"etag": "\"2f7-vPqmiQmG+gTnKc25vyRnF3nNTy0\"",
|
|
31244
|
-
"mtime": "2026-09-
|
|
31575
|
+
"mtime": "2026-09-06T06:27:43.495Z",
|
|
31245
31576
|
"size": 759,
|
|
31246
31577
|
"path": "../public/_nuxt/users.D8lcLE62.css"
|
|
31247
31578
|
},
|
|
31248
|
-
"/_nuxt/
|
|
31579
|
+
"/_nuxt/vJ4FPb-_.js": {
|
|
31249
31580
|
"type": "text/javascript; charset=utf-8",
|
|
31250
|
-
"etag": "\"
|
|
31251
|
-
"mtime": "2026-09-
|
|
31252
|
-
"size":
|
|
31253
|
-
"path": "../public/_nuxt/
|
|
31581
|
+
"etag": "\"496e-HYp1zkNZ5UP5CkmOCjjlTOlpRAA\"",
|
|
31582
|
+
"mtime": "2026-09-06T06:27:43.476Z",
|
|
31583
|
+
"size": 18798,
|
|
31584
|
+
"path": "../public/_nuxt/vJ4FPb-_.js"
|
|
31585
|
+
},
|
|
31586
|
+
"/_nuxt/VLI2Zy4t.js": {
|
|
31587
|
+
"type": "text/javascript; charset=utf-8",
|
|
31588
|
+
"etag": "\"79db-1zvdkTTeWhTS0A+KbRz0/ud/ntw\"",
|
|
31589
|
+
"mtime": "2026-09-06T06:27:43.474Z",
|
|
31590
|
+
"size": 31195,
|
|
31591
|
+
"path": "../public/_nuxt/VLI2Zy4t.js"
|
|
31254
31592
|
},
|
|
31255
|
-
"/_nuxt/workshop.
|
|
31593
|
+
"/_nuxt/workshop.BIdoGfoC.css": {
|
|
31256
31594
|
"type": "text/css; charset=utf-8",
|
|
31257
|
-
"etag": "\"d1c-
|
|
31258
|
-
"mtime": "2026-09-
|
|
31595
|
+
"etag": "\"d1c-u7eiOCnZLnH0C1d+mXWsSkBFJOI\"",
|
|
31596
|
+
"mtime": "2026-09-06T06:27:43.495Z",
|
|
31259
31597
|
"size": 3356,
|
|
31260
|
-
"path": "../public/_nuxt/workshop.
|
|
31598
|
+
"path": "../public/_nuxt/workshop.BIdoGfoC.css"
|
|
31261
31599
|
},
|
|
31262
|
-
"/_nuxt/
|
|
31600
|
+
"/_nuxt/zVkqCZ78.js": {
|
|
31263
31601
|
"type": "text/javascript; charset=utf-8",
|
|
31264
|
-
"etag": "\"
|
|
31265
|
-
"mtime": "2026-09-
|
|
31266
|
-
"size":
|
|
31267
|
-
"path": "../public/_nuxt/
|
|
31268
|
-
},
|
|
31269
|
-
"/_nuxt/_id_.BzKMZnLe.css": {
|
|
31270
|
-
"type": "text/css; charset=utf-8",
|
|
31271
|
-
"etag": "\"36e7-hWhGVpw6Is1uuKEM11Ofn45uSkU\"",
|
|
31272
|
-
"mtime": "2026-09-05T16:50:03.016Z",
|
|
31273
|
-
"size": 14055,
|
|
31274
|
-
"path": "../public/_nuxt/_id_.BzKMZnLe.css"
|
|
31602
|
+
"etag": "\"e583-atAfcqj4nxxk6KUzDMuv2R/bDCg\"",
|
|
31603
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31604
|
+
"size": 58755,
|
|
31605
|
+
"path": "../public/_nuxt/zVkqCZ78.js"
|
|
31275
31606
|
},
|
|
31276
|
-
"/_nuxt/_id_.
|
|
31607
|
+
"/_nuxt/_id_.DIxEKj88.css": {
|
|
31277
31608
|
"type": "text/css; charset=utf-8",
|
|
31278
|
-
"etag": "\"1564-
|
|
31279
|
-
"mtime": "2026-09-
|
|
31609
|
+
"etag": "\"1564-kqE2azzqPk0lKOVi0vRsIBIu7UM\"",
|
|
31610
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31280
31611
|
"size": 5476,
|
|
31281
|
-
"path": "../public/_nuxt/_id_.
|
|
31612
|
+
"path": "../public/_nuxt/_id_.DIxEKj88.css"
|
|
31282
31613
|
},
|
|
31283
31614
|
"/assets/game/coin.png": {
|
|
31284
31615
|
"type": "image/png",
|
|
@@ -31287,12 +31618,19 @@ const assets = {
|
|
|
31287
31618
|
"size": 6733,
|
|
31288
31619
|
"path": "../public/assets/game/coin.png"
|
|
31289
31620
|
},
|
|
31290
|
-
"/_nuxt/_wsId_.
|
|
31621
|
+
"/_nuxt/_wsId_.BFyCuUwS.css": {
|
|
31291
31622
|
"type": "text/css; charset=utf-8",
|
|
31292
|
-
"etag": "\"11059-
|
|
31293
|
-
"mtime": "2026-09-
|
|
31623
|
+
"etag": "\"11059-fUcBwBRjCr5Nger7gVc5ZTCEb1o\"",
|
|
31624
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31294
31625
|
"size": 69721,
|
|
31295
|
-
"path": "../public/_nuxt/_wsId_.
|
|
31626
|
+
"path": "../public/_nuxt/_wsId_.BFyCuUwS.css"
|
|
31627
|
+
},
|
|
31628
|
+
"/_nuxt/_id_.DTvjd6VN.css": {
|
|
31629
|
+
"type": "text/css; charset=utf-8",
|
|
31630
|
+
"etag": "\"36e7-Um0hcCUBU5cd8ESeOGJffLOJkG8\"",
|
|
31631
|
+
"mtime": "2026-09-06T06:27:43.477Z",
|
|
31632
|
+
"size": 14055,
|
|
31633
|
+
"path": "../public/_nuxt/_id_.DTvjd6VN.css"
|
|
31296
31634
|
},
|
|
31297
31635
|
"/assets/game/player-sheet.png": {
|
|
31298
31636
|
"type": "image/png",
|
|
@@ -31301,6 +31639,20 @@ const assets = {
|
|
|
31301
31639
|
"size": 10050,
|
|
31302
31640
|
"path": "../public/assets/game/player-sheet.png"
|
|
31303
31641
|
},
|
|
31642
|
+
"/_nuxt/builds/latest.json": {
|
|
31643
|
+
"type": "application/json",
|
|
31644
|
+
"etag": "\"47-swJWvalNkp3TzpX1HXzN9aJlJnM\"",
|
|
31645
|
+
"mtime": "2026-09-06T06:27:48.071Z",
|
|
31646
|
+
"size": 71,
|
|
31647
|
+
"path": "../public/_nuxt/builds/latest.json"
|
|
31648
|
+
},
|
|
31649
|
+
"/scene/background/cyber-town-background.svg": {
|
|
31650
|
+
"type": "image/svg+xml",
|
|
31651
|
+
"etag": "\"1656-Q8xWIs77K5i5HJYRdMCDYSQhkvs\"",
|
|
31652
|
+
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31653
|
+
"size": 5718,
|
|
31654
|
+
"path": "../public/scene/background/cyber-town-background.svg"
|
|
31655
|
+
},
|
|
31304
31656
|
"/assets/game/tuxemon-town.json": {
|
|
31305
31657
|
"type": "application/json",
|
|
31306
31658
|
"etag": "\"fec5-uB5TWkwSxd0G5Tiupl3I0+u94XM\"",
|
|
@@ -31315,20 +31667,6 @@ const assets = {
|
|
|
31315
31667
|
"size": 14078,
|
|
31316
31668
|
"path": "../public/assets/game/character/bot.png"
|
|
31317
31669
|
},
|
|
31318
|
-
"/scene/background/cyber-town-background.svg": {
|
|
31319
|
-
"type": "image/svg+xml",
|
|
31320
|
-
"etag": "\"1656-Q8xWIs77K5i5HJYRdMCDYSQhkvs\"",
|
|
31321
|
-
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31322
|
-
"size": 5718,
|
|
31323
|
-
"path": "../public/scene/background/cyber-town-background.svg"
|
|
31324
|
-
},
|
|
31325
|
-
"/assets/game/character/hero-3d.glb": {
|
|
31326
|
-
"type": "model/gltf-binary",
|
|
31327
|
-
"etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
|
|
31328
|
-
"mtime": "2026-08-25T12:20:54.511Z",
|
|
31329
|
-
"size": 33940,
|
|
31330
|
-
"path": "../public/assets/game/character/hero-3d.glb"
|
|
31331
|
-
},
|
|
31332
31670
|
"/assets/game/character/device-3d.glb": {
|
|
31333
31671
|
"type": "model/gltf-binary",
|
|
31334
31672
|
"etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
|
|
@@ -31343,6 +31681,13 @@ const assets = {
|
|
|
31343
31681
|
"size": 192008,
|
|
31344
31682
|
"path": "../public/assets/game/tuxmon-sample-32px-extruded.png"
|
|
31345
31683
|
},
|
|
31684
|
+
"/assets/game/character/hero-3d.glb": {
|
|
31685
|
+
"type": "model/gltf-binary",
|
|
31686
|
+
"etag": "\"8494-Uv+bxnHu3YGJp7Es3lHkob25Y08\"",
|
|
31687
|
+
"mtime": "2026-08-25T12:20:54.511Z",
|
|
31688
|
+
"size": 33940,
|
|
31689
|
+
"path": "../public/assets/game/character/hero-3d.glb"
|
|
31690
|
+
},
|
|
31346
31691
|
"/assets/game/character/hero-anime-1.glb": {
|
|
31347
31692
|
"type": "model/gltf-binary",
|
|
31348
31693
|
"etag": "\"1044c-AUMAdrW4S6OKEsUeAcR5c50fyKs\"",
|
|
@@ -31364,13 +31709,6 @@ const assets = {
|
|
|
31364
31709
|
"size": 66940,
|
|
31365
31710
|
"path": "../public/assets/game/character/hero-anime-3.glb"
|
|
31366
31711
|
},
|
|
31367
|
-
"/_nuxt/builds/latest.json": {
|
|
31368
|
-
"type": "application/json",
|
|
31369
|
-
"etag": "\"47-DiBCODTCaclqFIaMc0XetOHoCMA\"",
|
|
31370
|
-
"mtime": "2026-09-05T16:50:09.709Z",
|
|
31371
|
-
"size": 71,
|
|
31372
|
-
"path": "../public/_nuxt/builds/latest.json"
|
|
31373
|
-
},
|
|
31374
31712
|
"/assets/game/character/hero-anime-4.glb": {
|
|
31375
31713
|
"type": "model/gltf-binary",
|
|
31376
31714
|
"etag": "\"10544-H4WjfazfTQ6hfF2SkK2BfHU27i8\"",
|
|
@@ -31385,12 +31723,12 @@ const assets = {
|
|
|
31385
31723
|
"size": 15159,
|
|
31386
31724
|
"path": "../public/assets/game/character/knight.png"
|
|
31387
31725
|
},
|
|
31388
|
-
"/assets/game/
|
|
31389
|
-
"type": "
|
|
31390
|
-
"etag": "\"
|
|
31391
|
-
"mtime": "2026-08-
|
|
31392
|
-
"size":
|
|
31393
|
-
"path": "../public/assets/game/
|
|
31726
|
+
"/assets/game/character/mage.png": {
|
|
31727
|
+
"type": "image/png",
|
|
31728
|
+
"etag": "\"3832-juipuJuMJceZrarvR4w7OKgQejA\"",
|
|
31729
|
+
"mtime": "2026-08-25T12:20:54.512Z",
|
|
31730
|
+
"size": 14386,
|
|
31731
|
+
"path": "../public/assets/game/character/mage.png"
|
|
31394
31732
|
},
|
|
31395
31733
|
"/assets/game/devices/caster.glb": {
|
|
31396
31734
|
"type": "model/gltf-binary",
|
|
@@ -31399,19 +31737,12 @@ const assets = {
|
|
|
31399
31737
|
"size": 22644,
|
|
31400
31738
|
"path": "../public/assets/game/devices/caster.glb"
|
|
31401
31739
|
},
|
|
31402
|
-
"/assets/game/
|
|
31403
|
-
"type": "
|
|
31404
|
-
"etag": "\"
|
|
31405
|
-
"mtime": "2026-08-
|
|
31406
|
-
"size":
|
|
31407
|
-
"path": "../public/assets/game/
|
|
31408
|
-
},
|
|
31409
|
-
"/_nuxt/zwdqvGN_.js": {
|
|
31410
|
-
"type": "text/javascript; charset=utf-8",
|
|
31411
|
-
"etag": "\"8cc4a-velpbz4Zy5J9JIXAMvOLCFTQOJQ\"",
|
|
31412
|
-
"mtime": "2026-09-05T16:50:03.015Z",
|
|
31413
|
-
"size": 576586,
|
|
31414
|
-
"path": "../public/_nuxt/zwdqvGN_.js"
|
|
31740
|
+
"/assets/game/devices/agv.glb": {
|
|
31741
|
+
"type": "model/gltf-binary",
|
|
31742
|
+
"etag": "\"b0ec-SGRGNfFN89F7v1GROXKGve7pQqs\"",
|
|
31743
|
+
"mtime": "2026-08-27T07:03:12.531Z",
|
|
31744
|
+
"size": 45292,
|
|
31745
|
+
"path": "../public/assets/game/devices/agv.glb"
|
|
31415
31746
|
},
|
|
31416
31747
|
"/assets/game/devices/device-console.glb": {
|
|
31417
31748
|
"type": "model/gltf-binary",
|
|
@@ -31434,13 +31765,6 @@ const assets = {
|
|
|
31434
31765
|
"size": 10464,
|
|
31435
31766
|
"path": "../public/assets/game/devices/device-scanner.glb"
|
|
31436
31767
|
},
|
|
31437
|
-
"/assets/game/devices/extruder.glb": {
|
|
31438
|
-
"type": "model/gltf-binary",
|
|
31439
|
-
"etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
|
|
31440
|
-
"mtime": "2026-08-27T07:03:12.506Z",
|
|
31441
|
-
"size": 98596,
|
|
31442
|
-
"path": "../public/assets/game/devices/extruder.glb"
|
|
31443
|
-
},
|
|
31444
31768
|
"/assets/game/devices/mdo.glb": {
|
|
31445
31769
|
"type": "model/gltf-binary",
|
|
31446
31770
|
"etag": "\"132e4-EDslgF5+17dSukguA0eZzN4I0+o\"",
|
|
@@ -31448,12 +31772,12 @@ const assets = {
|
|
|
31448
31772
|
"size": 78564,
|
|
31449
31773
|
"path": "../public/assets/game/devices/mdo.glb"
|
|
31450
31774
|
},
|
|
31451
|
-
"/assets/game/devices/
|
|
31775
|
+
"/assets/game/devices/extruder.glb": {
|
|
31452
31776
|
"type": "model/gltf-binary",
|
|
31453
|
-
"etag": "\"
|
|
31454
|
-
"mtime": "2026-08-
|
|
31455
|
-
"size":
|
|
31456
|
-
"path": "../public/assets/game/devices/
|
|
31777
|
+
"etag": "\"18124-H6X1eQmFDn6eONUMGU6lGdQafZ8\"",
|
|
31778
|
+
"mtime": "2026-08-27T07:03:12.506Z",
|
|
31779
|
+
"size": 98596,
|
|
31780
|
+
"path": "../public/assets/game/devices/extruder.glb"
|
|
31457
31781
|
},
|
|
31458
31782
|
"/assets/game/devices/power-cabinet.glb": {
|
|
31459
31783
|
"type": "model/gltf-binary",
|
|
@@ -31462,12 +31786,12 @@ const assets = {
|
|
|
31462
31786
|
"size": 21744,
|
|
31463
31787
|
"path": "../public/assets/game/devices/power-cabinet.glb"
|
|
31464
31788
|
},
|
|
31465
|
-
"/assets/game/devices/
|
|
31789
|
+
"/assets/game/devices/pump.glb": {
|
|
31466
31790
|
"type": "model/gltf-binary",
|
|
31467
|
-
"etag": "\"
|
|
31468
|
-
"mtime": "2026-08-
|
|
31469
|
-
"size":
|
|
31470
|
-
"path": "../public/assets/game/devices/
|
|
31791
|
+
"etag": "\"4bc8-yAiKZtO+P2bBmqfRvhlxcF0oduE\"",
|
|
31792
|
+
"mtime": "2026-08-25T12:20:54.512Z",
|
|
31793
|
+
"size": 19400,
|
|
31794
|
+
"path": "../public/assets/game/devices/pump.glb"
|
|
31471
31795
|
},
|
|
31472
31796
|
"/assets/game/devices/tdo.glb": {
|
|
31473
31797
|
"type": "model/gltf-binary",
|
|
@@ -31476,6 +31800,13 @@ const assets = {
|
|
|
31476
31800
|
"size": 57612,
|
|
31477
31801
|
"path": "../public/assets/game/devices/tdo.glb"
|
|
31478
31802
|
},
|
|
31803
|
+
"/assets/game/devices/thickness-scanner.glb": {
|
|
31804
|
+
"type": "model/gltf-binary",
|
|
31805
|
+
"etag": "\"3480-WMTbMzRrl/6AJPzEIPhRW9xPugA\"",
|
|
31806
|
+
"mtime": "2026-08-27T07:03:12.527Z",
|
|
31807
|
+
"size": 13440,
|
|
31808
|
+
"path": "../public/assets/game/devices/thickness-scanner.glb"
|
|
31809
|
+
},
|
|
31479
31810
|
"/assets/game/devices/winder.glb": {
|
|
31480
31811
|
"type": "model/gltf-binary",
|
|
31481
31812
|
"etag": "\"9084-N9S2enupsA8WyhEHtkIgQ+RBDV4\"",
|
|
@@ -31483,6 +31814,76 @@ const assets = {
|
|
|
31483
31814
|
"size": 36996,
|
|
31484
31815
|
"path": "../public/assets/game/devices/winder.glb"
|
|
31485
31816
|
},
|
|
31817
|
+
"/assets/game/wuwa/wu-lead.png": {
|
|
31818
|
+
"type": "image/png",
|
|
31819
|
+
"etag": "\"3b04-agK45Y3g7QDPns/kmkhTGYSTPDM\"",
|
|
31820
|
+
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31821
|
+
"size": 15108,
|
|
31822
|
+
"path": "../public/assets/game/wuwa/wu-lead.png"
|
|
31823
|
+
},
|
|
31824
|
+
"/assets/game/wuwa/world-middle.png": {
|
|
31825
|
+
"type": "image/png",
|
|
31826
|
+
"etag": "\"16164-Dxu+NdXPnqoPFfWHwQi1oefgNvU\"",
|
|
31827
|
+
"mtime": "2026-08-25T12:20:54.523Z",
|
|
31828
|
+
"size": 90468,
|
|
31829
|
+
"path": "../public/assets/game/wuwa/world-middle.png"
|
|
31830
|
+
},
|
|
31831
|
+
"/assets/game/wuwa/wu-aura.png": {
|
|
31832
|
+
"type": "image/png",
|
|
31833
|
+
"etag": "\"2055-NKWgEbJfTq5l56FGWi9WDWgBAbU\"",
|
|
31834
|
+
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31835
|
+
"size": 8277,
|
|
31836
|
+
"path": "../public/assets/game/wuwa/wu-aura.png"
|
|
31837
|
+
},
|
|
31838
|
+
"/assets/game/wuwa/wu-worker-0.png": {
|
|
31839
|
+
"type": "image/png",
|
|
31840
|
+
"etag": "\"3c59-fILvgyTv9TKRgrI9GQlRhaSR96U\"",
|
|
31841
|
+
"mtime": "2026-08-25T12:20:54.528Z",
|
|
31842
|
+
"size": 15449,
|
|
31843
|
+
"path": "../public/assets/game/wuwa/wu-worker-0.png"
|
|
31844
|
+
},
|
|
31845
|
+
"/assets/game/wuwa/scene-map.png": {
|
|
31846
|
+
"type": "image/png",
|
|
31847
|
+
"etag": "\"682db-bU8mh8SeHPotvuaCc6PZzrWoT+A\"",
|
|
31848
|
+
"mtime": "2026-08-25T12:20:54.521Z",
|
|
31849
|
+
"size": 426715,
|
|
31850
|
+
"path": "../public/assets/game/wuwa/scene-map.png"
|
|
31851
|
+
},
|
|
31852
|
+
"/assets/game/wuwa/wu-ring.png": {
|
|
31853
|
+
"type": "image/png",
|
|
31854
|
+
"etag": "\"65ac-/iIjlPgFNpD98zDsyCJYA8021E4\"",
|
|
31855
|
+
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31856
|
+
"size": 26028,
|
|
31857
|
+
"path": "../public/assets/game/wuwa/wu-ring.png"
|
|
31858
|
+
},
|
|
31859
|
+
"/assets/game/wuwa/wu-slash.png": {
|
|
31860
|
+
"type": "image/png",
|
|
31861
|
+
"etag": "\"185-fVjcllSJOBMFcBWLIgBzTrzWGaY\"",
|
|
31862
|
+
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31863
|
+
"size": 389,
|
|
31864
|
+
"path": "../public/assets/game/wuwa/wu-slash.png"
|
|
31865
|
+
},
|
|
31866
|
+
"/assets/game/wuwa/world-far.png": {
|
|
31867
|
+
"type": "image/png",
|
|
31868
|
+
"etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
|
|
31869
|
+
"mtime": "2026-08-25T12:20:54.522Z",
|
|
31870
|
+
"size": 439185,
|
|
31871
|
+
"path": "../public/assets/game/wuwa/world-far.png"
|
|
31872
|
+
},
|
|
31873
|
+
"/assets/game/wuwa/wu-worker-1.png": {
|
|
31874
|
+
"type": "image/png",
|
|
31875
|
+
"etag": "\"3cc8-0XoRr5qFC7X+vEEX+XrX4cRX+D0\"",
|
|
31876
|
+
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31877
|
+
"size": 15560,
|
|
31878
|
+
"path": "../public/assets/game/wuwa/wu-worker-1.png"
|
|
31879
|
+
},
|
|
31880
|
+
"/assets/game/wuwa/wu-worker-2.png": {
|
|
31881
|
+
"type": "image/png",
|
|
31882
|
+
"etag": "\"3c81-6qd4LQS0v2L4rTa0XAmekluER7c\"",
|
|
31883
|
+
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31884
|
+
"size": 15489,
|
|
31885
|
+
"path": "../public/assets/game/wuwa/wu-worker-2.png"
|
|
31886
|
+
},
|
|
31486
31887
|
"/assets/game/npc/boltnu-sheet.png": {
|
|
31487
31888
|
"type": "image/png",
|
|
31488
31889
|
"etag": "\"a14-8xg90l10OuRoiEEgFXx9PTGJ9rA\"",
|
|
@@ -31490,6 +31891,20 @@ const assets = {
|
|
|
31490
31891
|
"size": 2580,
|
|
31491
31892
|
"path": "../public/assets/game/npc/boltnu-sheet.png"
|
|
31492
31893
|
},
|
|
31894
|
+
"/assets/game/wuwa/world-near.png": {
|
|
31895
|
+
"type": "image/png",
|
|
31896
|
+
"etag": "\"bbcd8-BrybeZP/ZGdD0v5NVC8T/Y4AXyM\"",
|
|
31897
|
+
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31898
|
+
"size": 769240,
|
|
31899
|
+
"path": "../public/assets/game/wuwa/world-near.png"
|
|
31900
|
+
},
|
|
31901
|
+
"/assets/game/npc/fluttaflap-sheet.png": {
|
|
31902
|
+
"type": "image/png",
|
|
31903
|
+
"etag": "\"f65-ivBz79RSNtXu3px7cWEzCwMXdkg\"",
|
|
31904
|
+
"mtime": "2026-08-25T12:20:54.513Z",
|
|
31905
|
+
"size": 3941,
|
|
31906
|
+
"path": "../public/assets/game/npc/fluttaflap-sheet.png"
|
|
31907
|
+
},
|
|
31493
31908
|
"/assets/game/npc/rockitten-sheet.png": {
|
|
31494
31909
|
"type": "image/png",
|
|
31495
31910
|
"etag": "\"786-IY4LCl37+SB6pnPynapoUxsxvOM\"",
|
|
@@ -31504,12 +31919,12 @@ const assets = {
|
|
|
31504
31919
|
"size": 2322,
|
|
31505
31920
|
"path": "../public/assets/game/npc/tux-sheet.png"
|
|
31506
31921
|
},
|
|
31507
|
-
"/assets/game/
|
|
31922
|
+
"/assets/game/player/misa-back-walk.000.png": {
|
|
31508
31923
|
"type": "image/png",
|
|
31509
|
-
"etag": "\"
|
|
31510
|
-
"mtime": "2026-08-25T12:20:54.
|
|
31511
|
-
"size":
|
|
31512
|
-
"path": "../public/assets/game/
|
|
31924
|
+
"etag": "\"157-/Sm0qrBJSHEFTGYwuSqnzRaX3Jk\"",
|
|
31925
|
+
"mtime": "2026-08-25T12:20:54.514Z",
|
|
31926
|
+
"size": 343,
|
|
31927
|
+
"path": "../public/assets/game/player/misa-back-walk.000.png"
|
|
31513
31928
|
},
|
|
31514
31929
|
"/assets/game/player/misa-back-walk.001.png": {
|
|
31515
31930
|
"type": "image/png",
|
|
@@ -31518,13 +31933,6 @@ const assets = {
|
|
|
31518
31933
|
"size": 348,
|
|
31519
31934
|
"path": "../public/assets/game/player/misa-back-walk.001.png"
|
|
31520
31935
|
},
|
|
31521
|
-
"/assets/game/player/misa-back-walk.003.png": {
|
|
31522
|
-
"type": "image/png",
|
|
31523
|
-
"etag": "\"15c-L+/hkHDyiQ9FJs5w93pxALzvWEg\"",
|
|
31524
|
-
"mtime": "2026-08-25T12:20:54.514Z",
|
|
31525
|
-
"size": 348,
|
|
31526
|
-
"path": "../public/assets/game/player/misa-back-walk.003.png"
|
|
31527
|
-
},
|
|
31528
31936
|
"/assets/game/player/misa-back-walk.002.png": {
|
|
31529
31937
|
"type": "image/png",
|
|
31530
31938
|
"etag": "\"157-/PPQEWo58n/RNDDq2aia6nAWOQw\"",
|
|
@@ -31532,6 +31940,13 @@ const assets = {
|
|
|
31532
31940
|
"size": 343,
|
|
31533
31941
|
"path": "../public/assets/game/player/misa-back-walk.002.png"
|
|
31534
31942
|
},
|
|
31943
|
+
"/assets/game/player/misa-back-walk.003.png": {
|
|
31944
|
+
"type": "image/png",
|
|
31945
|
+
"etag": "\"15c-L+/hkHDyiQ9FJs5w93pxALzvWEg\"",
|
|
31946
|
+
"mtime": "2026-08-25T12:20:54.514Z",
|
|
31947
|
+
"size": 348,
|
|
31948
|
+
"path": "../public/assets/game/player/misa-back-walk.003.png"
|
|
31949
|
+
},
|
|
31535
31950
|
"/assets/game/player/misa-back.png": {
|
|
31536
31951
|
"type": "image/png",
|
|
31537
31952
|
"etag": "\"15c-KwI7aIn2tc/RPUJViRtdOGKZre4\"",
|
|
@@ -31546,19 +31961,19 @@ const assets = {
|
|
|
31546
31961
|
"size": 338,
|
|
31547
31962
|
"path": "../public/assets/game/player/misa-front-walk.000.png"
|
|
31548
31963
|
},
|
|
31549
|
-
"/assets/game/player/misa-front-walk.
|
|
31964
|
+
"/assets/game/player/misa-front-walk.001.png": {
|
|
31550
31965
|
"type": "image/png",
|
|
31551
|
-
"etag": "\"155-
|
|
31966
|
+
"etag": "\"155-r/wKRG+amQ/2TvYolFC2UPXHdC4\"",
|
|
31552
31967
|
"mtime": "2026-08-25T12:20:54.515Z",
|
|
31553
31968
|
"size": 341,
|
|
31554
|
-
"path": "../public/assets/game/player/misa-front-walk.
|
|
31969
|
+
"path": "../public/assets/game/player/misa-front-walk.001.png"
|
|
31555
31970
|
},
|
|
31556
|
-
"/assets/game/player/misa-front-walk.
|
|
31971
|
+
"/assets/game/player/misa-front-walk.002.png": {
|
|
31557
31972
|
"type": "image/png",
|
|
31558
|
-
"etag": "\"155-
|
|
31973
|
+
"etag": "\"155-UzIsnRRYoGpmHf5w9T7CLy/0ubw\"",
|
|
31559
31974
|
"mtime": "2026-08-25T12:20:54.515Z",
|
|
31560
31975
|
"size": 341,
|
|
31561
|
-
"path": "../public/assets/game/player/misa-front-walk.
|
|
31976
|
+
"path": "../public/assets/game/player/misa-front-walk.002.png"
|
|
31562
31977
|
},
|
|
31563
31978
|
"/assets/game/player/misa-front-walk.003.png": {
|
|
31564
31979
|
"type": "image/png",
|
|
@@ -31574,13 +31989,6 @@ const assets = {
|
|
|
31574
31989
|
"size": 341,
|
|
31575
31990
|
"path": "../public/assets/game/player/misa-front.png"
|
|
31576
31991
|
},
|
|
31577
|
-
"/assets/game/player/misa-back-walk.000.png": {
|
|
31578
|
-
"type": "image/png",
|
|
31579
|
-
"etag": "\"157-/Sm0qrBJSHEFTGYwuSqnzRaX3Jk\"",
|
|
31580
|
-
"mtime": "2026-08-25T12:20:54.514Z",
|
|
31581
|
-
"size": 343,
|
|
31582
|
-
"path": "../public/assets/game/player/misa-back-walk.000.png"
|
|
31583
|
-
},
|
|
31584
31992
|
"/assets/game/player/misa-left-walk.000.png": {
|
|
31585
31993
|
"type": "image/png",
|
|
31586
31994
|
"etag": "\"13f-Hlll+U+bluQUD8w3klFf7vww08M\"",
|
|
@@ -31609,6 +32017,13 @@ const assets = {
|
|
|
31609
32017
|
"size": 319,
|
|
31610
32018
|
"path": "../public/assets/game/player/misa-left-walk.003.png"
|
|
31611
32019
|
},
|
|
32020
|
+
"/assets/game/player/misa-right-walk.000.png": {
|
|
32021
|
+
"type": "image/png",
|
|
32022
|
+
"etag": "\"12d-LFv0nkkwwOzytOb66XkVjd6tkHE\"",
|
|
32023
|
+
"mtime": "2026-08-25T12:20:54.516Z",
|
|
32024
|
+
"size": 301,
|
|
32025
|
+
"path": "../public/assets/game/player/misa-right-walk.000.png"
|
|
32026
|
+
},
|
|
31612
32027
|
"/assets/game/player/misa-left.png": {
|
|
31613
32028
|
"type": "image/png",
|
|
31614
32029
|
"etag": "\"13f-U80SqejQLrLmFSm4ifHPjYI/r5Q\"",
|
|
@@ -31616,12 +32031,12 @@ const assets = {
|
|
|
31616
32031
|
"size": 319,
|
|
31617
32032
|
"path": "../public/assets/game/player/misa-left.png"
|
|
31618
32033
|
},
|
|
31619
|
-
"/assets/game/player/misa-right-walk.
|
|
32034
|
+
"/assets/game/player/misa-right-walk.003.png": {
|
|
31620
32035
|
"type": "image/png",
|
|
31621
|
-
"etag": "\"
|
|
31622
|
-
"mtime": "2026-08-25T12:20:54.
|
|
31623
|
-
"size":
|
|
31624
|
-
"path": "../public/assets/game/player/misa-right-walk.
|
|
32036
|
+
"etag": "\"12e-1Tf+ktOQnj4YEenOBQ+4j9KNxVQ\"",
|
|
32037
|
+
"mtime": "2026-08-25T12:20:54.517Z",
|
|
32038
|
+
"size": 302,
|
|
32039
|
+
"path": "../public/assets/game/player/misa-right-walk.003.png"
|
|
31625
32040
|
},
|
|
31626
32041
|
"/assets/game/player/misa-right-walk.001.png": {
|
|
31627
32042
|
"type": "image/png",
|
|
@@ -31637,13 +32052,6 @@ const assets = {
|
|
|
31637
32052
|
"size": 303,
|
|
31638
32053
|
"path": "../public/assets/game/player/misa-right-walk.002.png"
|
|
31639
32054
|
},
|
|
31640
|
-
"/assets/game/player/misa-right-walk.003.png": {
|
|
31641
|
-
"type": "image/png",
|
|
31642
|
-
"etag": "\"12e-1Tf+ktOQnj4YEenOBQ+4j9KNxVQ\"",
|
|
31643
|
-
"mtime": "2026-08-25T12:20:54.517Z",
|
|
31644
|
-
"size": 302,
|
|
31645
|
-
"path": "../public/assets/game/player/misa-right-walk.003.png"
|
|
31646
|
-
},
|
|
31647
32055
|
"/assets/game/player/misa-right.png": {
|
|
31648
32056
|
"type": "image/png",
|
|
31649
32057
|
"etag": "\"12e-u2oP2dt8nlrp15zVNaNSSzpBs0Y\"",
|
|
@@ -31651,89 +32059,12 @@ const assets = {
|
|
|
31651
32059
|
"size": 302,
|
|
31652
32060
|
"path": "../public/assets/game/player/misa-right.png"
|
|
31653
32061
|
},
|
|
31654
|
-
"/
|
|
31655
|
-
"type": "image/png",
|
|
31656
|
-
"etag": "\"16164-Dxu+NdXPnqoPFfWHwQi1oefgNvU\"",
|
|
31657
|
-
"mtime": "2026-08-25T12:20:54.523Z",
|
|
31658
|
-
"size": 90468,
|
|
31659
|
-
"path": "../public/assets/game/wuwa/world-middle.png"
|
|
31660
|
-
},
|
|
31661
|
-
"/assets/game/wuwa/wu-aura.png": {
|
|
31662
|
-
"type": "image/png",
|
|
31663
|
-
"etag": "\"2055-NKWgEbJfTq5l56FGWi9WDWgBAbU\"",
|
|
31664
|
-
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31665
|
-
"size": 8277,
|
|
31666
|
-
"path": "../public/assets/game/wuwa/wu-aura.png"
|
|
31667
|
-
},
|
|
31668
|
-
"/assets/game/wuwa/scene-map.png": {
|
|
31669
|
-
"type": "image/png",
|
|
31670
|
-
"etag": "\"682db-bU8mh8SeHPotvuaCc6PZzrWoT+A\"",
|
|
31671
|
-
"mtime": "2026-08-25T12:20:54.521Z",
|
|
31672
|
-
"size": 426715,
|
|
31673
|
-
"path": "../public/assets/game/wuwa/scene-map.png"
|
|
31674
|
-
},
|
|
31675
|
-
"/assets/game/wuwa/wu-lead.png": {
|
|
31676
|
-
"type": "image/png",
|
|
31677
|
-
"etag": "\"3b04-agK45Y3g7QDPns/kmkhTGYSTPDM\"",
|
|
31678
|
-
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31679
|
-
"size": 15108,
|
|
31680
|
-
"path": "../public/assets/game/wuwa/wu-lead.png"
|
|
31681
|
-
},
|
|
31682
|
-
"/assets/game/wuwa/wu-slash.png": {
|
|
31683
|
-
"type": "image/png",
|
|
31684
|
-
"etag": "\"185-fVjcllSJOBMFcBWLIgBzTrzWGaY\"",
|
|
31685
|
-
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31686
|
-
"size": 389,
|
|
31687
|
-
"path": "../public/assets/game/wuwa/wu-slash.png"
|
|
31688
|
-
},
|
|
31689
|
-
"/assets/game/wuwa/wu-ring.png": {
|
|
31690
|
-
"type": "image/png",
|
|
31691
|
-
"etag": "\"65ac-/iIjlPgFNpD98zDsyCJYA8021E4\"",
|
|
31692
|
-
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31693
|
-
"size": 26028,
|
|
31694
|
-
"path": "../public/assets/game/wuwa/wu-ring.png"
|
|
31695
|
-
},
|
|
31696
|
-
"/assets/game/wuwa/wu-worker-0.png": {
|
|
31697
|
-
"type": "image/png",
|
|
31698
|
-
"etag": "\"3c59-fILvgyTv9TKRgrI9GQlRhaSR96U\"",
|
|
31699
|
-
"mtime": "2026-08-25T12:20:54.528Z",
|
|
31700
|
-
"size": 15449,
|
|
31701
|
-
"path": "../public/assets/game/wuwa/wu-worker-0.png"
|
|
31702
|
-
},
|
|
31703
|
-
"/assets/game/wuwa/world-far.png": {
|
|
31704
|
-
"type": "image/png",
|
|
31705
|
-
"etag": "\"6b391-DRcUWDyPUwUxDpAWplDh9StwdO0\"",
|
|
31706
|
-
"mtime": "2026-08-25T12:20:54.522Z",
|
|
31707
|
-
"size": 439185,
|
|
31708
|
-
"path": "../public/assets/game/wuwa/world-far.png"
|
|
31709
|
-
},
|
|
31710
|
-
"/_nuxt/builds/meta/e5bb1803-86d9-43b3-85be-dc787dc9a978.json": {
|
|
32062
|
+
"/_nuxt/builds/meta/88479a5b-ce6a-400f-9737-1cc9f54b1fe5.json": {
|
|
31711
32063
|
"type": "application/json",
|
|
31712
|
-
"etag": "\"58-
|
|
31713
|
-
"mtime": "2026-09-
|
|
32064
|
+
"etag": "\"58-hopV0Ugj2gZccRuZXf9BmnOALwo\"",
|
|
32065
|
+
"mtime": "2026-09-06T06:27:48.072Z",
|
|
31714
32066
|
"size": 88,
|
|
31715
|
-
"path": "../public/_nuxt/builds/meta/
|
|
31716
|
-
},
|
|
31717
|
-
"/assets/game/wuwa/wu-worker-1.png": {
|
|
31718
|
-
"type": "image/png",
|
|
31719
|
-
"etag": "\"3cc8-0XoRr5qFC7X+vEEX+XrX4cRX+D0\"",
|
|
31720
|
-
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31721
|
-
"size": 15560,
|
|
31722
|
-
"path": "../public/assets/game/wuwa/wu-worker-1.png"
|
|
31723
|
-
},
|
|
31724
|
-
"/assets/game/wuwa/wu-worker-2.png": {
|
|
31725
|
-
"type": "image/png",
|
|
31726
|
-
"etag": "\"3c81-6qd4LQS0v2L4rTa0XAmekluER7c\"",
|
|
31727
|
-
"mtime": "2026-08-25T12:20:54.529Z",
|
|
31728
|
-
"size": 15489,
|
|
31729
|
-
"path": "../public/assets/game/wuwa/wu-worker-2.png"
|
|
31730
|
-
},
|
|
31731
|
-
"/assets/game/wuwa/world-near.png": {
|
|
31732
|
-
"type": "image/png",
|
|
31733
|
-
"etag": "\"bbcd8-BrybeZP/ZGdD0v5NVC8T/Y4AXyM\"",
|
|
31734
|
-
"mtime": "2026-08-25T12:20:54.527Z",
|
|
31735
|
-
"size": 769240,
|
|
31736
|
-
"path": "../public/assets/game/wuwa/world-near.png"
|
|
32067
|
+
"path": "../public/_nuxt/builds/meta/88479a5b-ce6a-400f-9737-1cc9f54b1fe5.json"
|
|
31737
32068
|
}
|
|
31738
32069
|
};
|
|
31739
32070
|
|
|
@@ -32139,10 +32470,12 @@ const _lazy_2iGKST = () => import('../routes/api/workshop/mailbox/all.get.mjs');
|
|
|
32139
32470
|
const _lazy_J6CvCX = () => import('../routes/api/workshop/memories/maintenance.post.mjs');
|
|
32140
32471
|
const _lazy_LRmOHW = () => import('../routes/api/workshop/index7.get.mjs');
|
|
32141
32472
|
const _lazy_cmZtLZ = () => import('../routes/api/workshop/index6.post.mjs');
|
|
32473
|
+
const _lazy_XX9fDc = () => import('../routes/api/workshop/index8.get.mjs');
|
|
32474
|
+
const _lazy_yaEjdd = () => import('../routes/api/workshop/index.put.mjs');
|
|
32142
32475
|
const _lazy__lD5l_ = () => import('../routes/api/workshop/plugins/_name/disable.post.mjs');
|
|
32143
32476
|
const _lazy_HZYjW8 = () => import('../routes/api/workshop/plugins/_name/enable.post.mjs');
|
|
32144
32477
|
const _lazy_yCW7sb = () => import('../routes/api/workshop/plugins/index.get.mjs');
|
|
32145
|
-
const _lazy_WewPGz = () => import('../routes/api/workshop/
|
|
32478
|
+
const _lazy_WewPGz = () => import('../routes/api/workshop/index9.get.mjs');
|
|
32146
32479
|
const _lazy_RWH736 = () => import('../routes/api/workshop/runtime.get.mjs');
|
|
32147
32480
|
const _lazy_3ImWSQ = () => import('../routes/api/workshop/scene/layouts.get.mjs');
|
|
32148
32481
|
const _lazy_u16cXh = () => import('../routes/api/workshop/scene/layouts/_channelId_.delete.mjs');
|
|
@@ -32161,7 +32494,7 @@ const _lazy_qFs78O = () => import('../routes/api/workshop/teams/_id/deploy.post.
|
|
|
32161
32494
|
const _lazy_KpUmMl = () => import('../routes/api/workshop/teams/_id/members/_agentId_.delete.mjs');
|
|
32162
32495
|
const _lazy_QonglT = () => import('../routes/api/workshop/teams/_id/index.get.mjs');
|
|
32163
32496
|
const _lazy_k1sUOm = () => import('../routes/api/workshop/teams/_id/index.post.mjs');
|
|
32164
|
-
const _lazy_s5XbV8 = () => import('../routes/api/workshop/
|
|
32497
|
+
const _lazy_s5XbV8 = () => import('../routes/api/workshop/index10.get.mjs');
|
|
32165
32498
|
const _lazy_1skCLM = () => import('../routes/api/workshop/index7.post.mjs');
|
|
32166
32499
|
const _lazy_dMbmjJ = () => import('../routes/api/workshop/users/me.get.mjs');
|
|
32167
32500
|
const _lazy_bjrVjh = () => import('../routes/api/workshop/users/register.post.mjs');
|
|
@@ -32169,7 +32502,7 @@ const _lazy_aVK7tA = () => import('../routes/api/workshop/workspaces/_id/channel
|
|
|
32169
32502
|
const _lazy_iX4xNa = () => import('../routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs');
|
|
32170
32503
|
const _lazy_4thuTL = () => import('../routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs');
|
|
32171
32504
|
const _lazy_pSf6CV = () => import('../routes/api/workshop/workspaces/index.delete.mjs');
|
|
32172
|
-
const _lazy_HyhUaS = () => import('../routes/api/workshop/
|
|
32505
|
+
const _lazy_HyhUaS = () => import('../routes/api/workshop/index11.get.mjs');
|
|
32173
32506
|
const _lazy_2pjBry = () => import('../routes/api/workshop/index8.post.mjs');
|
|
32174
32507
|
const _lazy_gDD48s = () => Promise.resolve().then(function () { return ws$1; });
|
|
32175
32508
|
const _lazy_YccnuE = () => import('../routes/renderer.mjs').then(function (n) { return n.r; });
|
|
@@ -32345,6 +32678,8 @@ const handlers = [
|
|
|
32345
32678
|
{ route: '/api/workshop/memories/maintenance', handler: _lazy_J6CvCX, lazy: true, middleware: false, method: "post" },
|
|
32346
32679
|
{ route: '/api/workshop/ops-logs', handler: _lazy_LRmOHW, lazy: true, middleware: false, method: "get" },
|
|
32347
32680
|
{ route: '/api/workshop/ops-logs', handler: _lazy_cmZtLZ, lazy: true, middleware: false, method: "post" },
|
|
32681
|
+
{ route: '/api/workshop/permissions', handler: _lazy_XX9fDc, lazy: true, middleware: false, method: "get" },
|
|
32682
|
+
{ route: '/api/workshop/permissions', handler: _lazy_yaEjdd, lazy: true, middleware: false, method: "put" },
|
|
32348
32683
|
{ route: '/api/workshop/plugins/:name/disable', handler: _lazy__lD5l_, lazy: true, middleware: false, method: "post" },
|
|
32349
32684
|
{ route: '/api/workshop/plugins/:name/enable', handler: _lazy_HZYjW8, lazy: true, middleware: false, method: "post" },
|
|
32350
32685
|
{ route: '/api/workshop/plugins/:name', handler: _lazy_yCW7sb, lazy: true, middleware: false, method: "get" },
|
|
@@ -32772,5 +33107,5 @@ function setupGracefulShutdown(listener, nitroApp) {
|
|
|
32772
33107
|
});
|
|
32773
33108
|
}
|
|
32774
33109
|
|
|
32775
|
-
export {
|
|
33110
|
+
export { getHeader as $, abortTerminal as A, sendTerminalInput as B, resolveUserByToken as C, findLiveTerminalPidByAgent as D, terminalSessionSnapshot as E, subscribeTerminal as F, listHarnessProcesses as G, AppError as H, getSystemConfigService as I, createEventStream as J, userService as K, readValidatedBody as L, zValidator as M, getValidatedQuery as N, extractBearerToken as O, userRepository as P, getRequestHeader as Q, setResponseStatus as R, parseJson as S, getToolApprovals as T, audit as U, getQuery as V, getAgentNodeBindingRepo as W, getDaqController as X, getDcwController as Y, ErrorCodes as Z, lineMode as _, trapUnhandledNodeErrors as a, DAQ_TEMPLATES as a$, loadJsonFile as a0, saveJsonFileAtomic as a1, ensureDataDir as a2, readMultipartFormData as a3, ensureLeadSchedulerLoop as a4, listTerminalSessions as a5, broadcastSceneEvent as a6, recordOps as a7, bindDaqHostPorts as a8, bindDaqBroadcast as a9, spawnLineProcess as aA, getHitlRegistry as aB, notifyGrantsChanged as aC, setPluginEnabled as aD, reloadPluginHost as aE, publishSceneLayoutEvent as aF, encodePath as aG, buildAssetsURL as aH, publicAssetsURL as aI, defineRenderHandler as aJ, getRouteRules as aK, relative as aL, joinURL as aM, getResponseStatusText as aN, getResponseStatus as aO, createHooks as aP, sanitizeStatusCode as aQ, klona as aR, isEqual as aS, setCookie as aT, getCookie as aU, deleteCookie as aV, $fetch as aW, baseURL as aX, defu as aY, getRequestProtocol as aZ, appendResponseHeader as a_, bumpTaggedSamples as aa, getDcwLineRepo as ab, getDcwRecipeRepo as ac, getAllActiveLineRuns as ad, getActiveLineRun as ae, deviceScenePayload as af, requireLineMode as ag, daqRuntimeSettings as ah, tsdbReady as ai, getDaqQueue as aj, listDaqTemplates as ak, daqInfraStatus as al, filterByLine as am, daqInfraConfig as an, getDaqTemplateRegistry as ao, normalizeDriverKind as ap, bindDcwBroadcast as aq, gateDangerous as ar, getRecipeRollBackManager as as, visibleLineIds as at, isPrivilegedRole as au, listDcwTemplates as av, emitLineLifecycle as aw, getDcwTemplateRegistry as ax, harnessMetas as ay, StdioJsonRpcClient as az, useNitroApp as b, DCW_TEMPLATES as b0, daqKeyFromRef as b1, DAQ_DRIVERS as b2, DCW_DRIVERS as b3, DAQ_TEMPLATE_ICONS as b4, DCW_LINE_COLORS as b5, ws$1 as b6, defineApiHandler as c, destr as d, useServerConfig as e, getDeviceTwinRepo as f, getWorkshopManager as g, defineEventHandler as h, readRawBody as i, getRequestURL as j, getRequestHeaders as k, getOps as l, setResponseHeader as m, createError$1 as n, readBody as o, getPluginHost as p, getRouterParam as q, randomUUID as r, setupGracefulShutdown as s, toNodeListener as t, useRuntimeConfig as u, readClientScript as v, setHeader as w, pluginManifest as x, defineWebSocketHandler as y, respondTerminalUi as z };
|
|
32776
33111
|
//# sourceMappingURL=nitro.mjs.map
|