agentworkshop 0.7.8 → 0.7.9
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/{DM8DS9MA.js → 6PZPfFcO.js} +1 -1
- package/.output/public/_nuxt/91DZTUMJ.js +1 -0
- package/.output/public/_nuxt/B0HpdCKS.js +1 -0
- package/.output/public/_nuxt/B1g8pJmr.js +2 -0
- package/.output/public/_nuxt/B1kA8LhC.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/B9MUiDFl.js +1 -0
- package/.output/public/_nuxt/B9dLFSYI.js +1 -0
- package/.output/public/_nuxt/BC8s1Guv.js +1 -0
- package/.output/public/_nuxt/{BSXx2vqR.js → BCJFMBQ6.js} +1 -1
- package/.output/public/_nuxt/{BYL0Rjqj.js → BDASpD_i.js} +3 -3
- package/.output/public/_nuxt/{VnIWJ0ts.js → BN_PdN3J.js} +1 -1
- package/.output/public/_nuxt/BUPj10t4.js +1 -0
- package/.output/public/_nuxt/BZGNTgTQ2.js +1 -0
- package/.output/public/_nuxt/{NIM0Wglj2.js → BaMkWl5i2.js} +1 -1
- package/.output/public/_nuxt/BmHvC_OU.js +1 -0
- package/.output/public/_nuxt/{BkfchkK62.js → Bp5luxkg2.js} +1 -1
- package/.output/public/_nuxt/{ZugRk0CM2.js → BuktKVqK2.js} +1 -1
- package/.output/public/_nuxt/By8BpbKH.js +1 -0
- 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/{CblLEiCZ.js → C9cU_Ujd.js} +3 -3
- package/.output/public/_nuxt/{BJ-fxrSw.js → CBciOiTQ.js} +1 -1
- package/.output/public/_nuxt/CFn4vHwD.js +1 -0
- package/.output/public/_nuxt/{DCXIGxzT.js → CKfhtOt7.js} +2 -2
- package/.output/public/_nuxt/CUMdhxg9.js +1 -0
- package/.output/public/_nuxt/{ChEKFMxj.js → CUXCQXjG.js} +1 -1
- package/.output/public/_nuxt/CfVAr2nf.js +1 -0
- package/.output/public/_nuxt/{CvbHIGQY2.js → CgvGu2IO.js} +1 -1
- package/.output/public/_nuxt/CjDQPXfv.js +1 -0
- package/.output/public/_nuxt/{B4Fia4FB.js → CmHzfVc5.js} +1 -1
- package/.output/public/_nuxt/{Do88WZG2.js → Cn3J3NXR.js} +1 -1
- package/.output/public/_nuxt/{DNzaswei.js → Cst47G4-.js} +1 -1
- package/.output/public/_nuxt/{DYZBdSSg2.js → Ct68Z0232.js} +1 -1
- package/.output/public/_nuxt/{BsMpJf7S.js → D-Ca4BGY.js} +6 -6
- package/.output/public/_nuxt/D0Szyn_D.js +1 -0
- package/.output/public/_nuxt/{CsCpu2Zh.js → D1z7i2UP.js} +1 -1
- package/.output/public/_nuxt/{Du-eSpo2.js → D3VJ3lex.js} +1 -1
- package/.output/public/_nuxt/D8CqF0yy.js +1 -0
- package/.output/public/_nuxt/D8EfUxO2.js +1 -0
- package/.output/public/_nuxt/D8wyHvcz2.js +1 -0
- package/.output/public/_nuxt/{zwdqvGN_.js → DDdEnkdw.js} +1 -1
- package/.output/public/_nuxt/DM4CNkXz.js +1 -0
- package/.output/public/_nuxt/DN5RuZ8k.js +18 -0
- package/.output/public/_nuxt/DXRZPxGs.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/Dqj2h40U.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/{fQUs58kX2.js → DvgKXPgu2.js} +1 -1
- package/.output/public/_nuxt/{C_gFA2H_2.js → DxrgFxIr2.js} +1 -1
- package/.output/public/_nuxt/Dy-mxvXY2.js +1 -0
- package/.output/public/_nuxt/G0qIw7Gq2.js +1 -0
- package/.output/public/_nuxt/{DCEyMaN-.js → MyA0Oeqd.js} +3 -3
- package/.output/public/_nuxt/{tRBT-plo.js → OV6PBW2z.js} +1 -1
- 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/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/92d6bd39-dbc5-46d5-90d8-8387f36715fa.json +1 -0
- package/.output/public/_nuxt/channel-templates.De5ZvrGz.css +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.V3_hUJq1.css → default.BR3e5fPY.css} +1 -1
- package/.output/public/_nuxt/{Cyk3du4K2.js → kZV5TQvh2.js} +1 -1
- package/.output/public/_nuxt/logs.BO-BSyjm.css +1 -0
- package/.output/public/_nuxt/{D4qXvjuV.js → niDwBOZW.js} +2 -2
- package/.output/public/_nuxt/pKv_VWR4.js +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/teams.CUMnbQGf.css +1 -0
- package/.output/public/_nuxt/tokens.BPLe9ioQ.css +1 -0
- package/.output/public/_nuxt/{C8dxXc6K.js → u7KWCGSb.js} +1 -1
- package/.output/public/_nuxt/{Bi6AiCuP.js → vJ4FPb-_.js} +1 -1
- package/.output/public/_nuxt/wirVyscc.js +1 -0
- package/.output/public/_nuxt/workshop.BIdoGfoC.css +1 -0
- package/.output/server/chunks/_/nitro.mjs +896 -882
- package/.output/server/chunks/build/{TownView-B5KifIaT.mjs → TownView-D8DSdO3H.mjs} +181 -180
- package/.output/server/chunks/build/{TownView-B5KifIaT.mjs.map → TownView-D8DSdO3H.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-Ct4Jhvl1.mjs → _id_-BV4FfiYd.mjs} +36 -35
- package/.output/server/chunks/build/_id_-BV4FfiYd.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-C-ewLgfl.mjs → _id_-TP9hvnBM.mjs} +125 -124
- package/.output/server/chunks/build/_id_-TP9hvnBM.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs → _wsId_-Mm9sQSz2.mjs} +125 -124
- package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs.map → _wsId_-Mm9sQSz2.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-DSOptxXA.mjs → agents-To3a5xcZ.mjs} +16 -15
- package/.output/server/chunks/build/agents-To3a5xcZ.mjs.map +1 -0
- 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/{channel-templates-BK0KuPOd.mjs → channel-templates-DRsP-qxl.mjs} +23 -22
- package/.output/server/chunks/build/channel-templates-DRsP-qxl.mjs.map +1 -0
- package/.output/server/chunks/build/{daq-D9RA_uze.mjs → daq-_hCEaYLd.mjs} +111 -110
- package/.output/server/chunks/build/daq-_hCEaYLd.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-BTM5YU-B.mjs → dcw-C7pJ4Y0p.mjs} +46 -45
- package/.output/server/chunks/build/dcw-C7pJ4Y0p.mjs.map +1 -0
- package/.output/server/chunks/build/{default-BfWGTlbj.mjs → default-Dnjs36e8.mjs} +16 -15
- package/.output/server/chunks/build/{default-BfWGTlbj.mjs.map → default-Dnjs36e8.mjs.map} +1 -1
- package/.output/server/chunks/build/{logs-Dyk0I2I9.mjs → logs-C039TFW1.mjs} +38 -37
- package/.output/server/chunks/build/logs-C039TFW1.mjs.map +1 -0
- package/.output/server/chunks/build/{pages-DR2bzczM.mjs → pages-C_VSGSGo.mjs} +5 -4
- package/.output/server/chunks/build/pages-C_VSGSGo.mjs.map +1 -0
- package/.output/server/chunks/build/{plugins-DnOBIWGg.mjs → plugins-4FMWkN8d.mjs} +25 -22
- package/.output/server/chunks/build/plugins-4FMWkN8d.mjs.map +1 -0
- package/.output/server/chunks/build/table-Cswq-l2r.mjs +1 -1
- package/.output/server/chunks/build/{teams-BhSKBBBM.mjs → teams-DA1lkf1n.mjs} +19 -18
- package/.output/server/chunks/build/teams-DA1lkf1n.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-D_eyxmcv.mjs → tokens-DKMvvk3e.mjs} +18 -17
- package/.output/server/chunks/build/tokens-DKMvvk3e.mjs.map +1 -0
- package/.output/server/chunks/build/{town-DPtOPRRO.mjs → town-D0thZ7PK.mjs} +6 -5
- package/.output/server/chunks/build/town-D0thZ7PK.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqStream-hwkhJHFU.mjs → useDaqStream-BVTRw8_H.mjs} +4 -3
- package/.output/server/chunks/build/useDaqStream-BVTRw8_H.mjs.map +1 -0
- package/.output/server/chunks/build/{useDcwStream-Bdew_yrr.mjs → useDcwStream-DNsivqI_.mjs} +4 -3
- package/.output/server/chunks/build/useDcwStream-DNsivqI_.mjs.map +1 -0
- package/.output/server/chunks/build/{useDeviceTwins-C6EBg9oN.mjs → useDeviceTwins-WeIom7A6.mjs} +4 -3
- package/.output/server/chunks/build/useDeviceTwins-WeIom7A6.mjs.map +1 -0
- package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +1 -1
- package/.output/server/chunks/build/{useOpsLog-DdCqKVVG.mjs → useOpsLog-DcKnPO43.mjs} +5 -4
- package/.output/server/chunks/build/useOpsLog-DcKnPO43.mjs.map +1 -0
- package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs +1 -1
- package/.output/server/chunks/build/{workshop-D5CQj2A8.mjs → workshop-BhWnJMWs.mjs} +19 -18
- package/.output/server/chunks/build/workshop-BhWnJMWs.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +3 -3
- 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 +3 -3
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/virtual/entry.mjs +48 -22
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/app/components/AppHeader.vue +1 -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 +1 -1
- package/app/composables/workshop/useCharacterAssets.ts +1 -1
- package/app/composables/workshop/useDaqStream.ts +1 -1
- package/app/composables/workshop/useDcwStream.ts +1 -1
- package/app/composables/workshop/useDeviceTwins.ts +1 -1
- package/app/composables/workshop/useOpsLog.ts +2 -2
- package/app/composables/workshop/useSceneLayouts.ts +1 -1
- 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/plugins/index.vue +14 -6
- 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/utils/api-error.ts +75 -0
- package/cli/commands/plugin.mjs +2 -2
- package/config.yml +1 -1
- package/i18n/locales/en.ts +16 -3
- package/i18n/locales/zh-CN.ts +16 -3
- package/package.json +1 -1
- package/scripts/_dbg-interval-config.mjs +17 -6
- package/scripts/_dbg-plugins-e2e.mjs +101 -0
- package/scripts/_dbg-repo-setup-verify.mjs +31 -0
- package/scripts/_dbg-setup-e2e.mjs +1 -1
- package/server/api/workshop/plugins/[name]/disable.post.ts +5 -3
- package/server/api/workshop/plugins/[name]/enable.post.ts +5 -3
- package/server/data/daqs.json +88 -44
- package/server/data/dcw-lines.json +21 -0
- package/server/data/dcw-products.json +119 -0
- package/server/data/dcw-recipes.json +422 -0
- package/server/data/dcw-rollback.json +193 -6
- package/server/data/dcw-runs.json +459 -348
- package/server/data/dcw-writes.json +204 -0
- package/server/data/dcws.json +730 -305
- package/server/data/line-runs.json +26 -6
- package/server/services/system-config.ts +5 -0
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +10 -5
- package/server/services/workshop/plugins/host.mjs +2 -1
- package/server/services/workshop/settings.ts +10 -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/B7aqqzkY.js +0 -1
- package/.output/public/_nuxt/BH0Z05CS.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/DNJSkm3Q.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/GP2wXyuY.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/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/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/_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/logs-Dyk0I2I9.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/teams-BhSKBBBM.mjs.map +0 -1
- package/.output/server/chunks/build/tokens-D_eyxmcv.mjs.map +0 -1
- package/.output/server/chunks/build/town-DPtOPRRO.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/workshop-D5CQj2A8.mjs.map +0 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 插件页(builtin 标识 + 错误人话渲染)E2E:_dbg-plugins-e2e.mjs <baseURL>
|
|
3
|
+
// 断言链:admin 登录 → /plugins 内置示例/用户级扩展徽标 → admin 切换成功并恢复 →
|
|
4
|
+
// plainuser 注册登录 → 切换被拒 → toast 为人话(含"管理员权限",不含 403/[POST])。
|
|
5
|
+
// 用法:node scripts/_dbg-plugins-e2e.mjs http://127.0.0.1:3021
|
|
6
|
+
// ============================================================
|
|
7
|
+
import puppeteer from 'puppeteer-core'
|
|
8
|
+
import { mkdirSync } from 'node:fs'
|
|
9
|
+
|
|
10
|
+
const BASE = process.argv[2] ?? 'http://127.0.0.1:3021'
|
|
11
|
+
const ADMIN = { email: 'admin@awshop.local', password: 'Awshop2026' }
|
|
12
|
+
const PLAIN = { name: `plain-${Date.now().toString(36)}`, email: `plain-${Date.now().toString(36)}@awshop.local`, password: 'Plain2026' }
|
|
13
|
+
const SHOT_DIR = '.e2e-shots'
|
|
14
|
+
mkdirSync(SHOT_DIR, { recursive: true })
|
|
15
|
+
|
|
16
|
+
const results = []
|
|
17
|
+
const check = (name, ok, detail = '') => {
|
|
18
|
+
results.push({ name, ok, detail })
|
|
19
|
+
console.log(`${ok ? '✔' : '✖'} ${name}${detail ? ` — ${detail}` : ''}`)
|
|
20
|
+
}
|
|
21
|
+
const api = async (path, opts = {}) => {
|
|
22
|
+
const res = await fetch(`${BASE}${path}`, { ...opts, headers: { 'content-type': 'application/json', ...opts.headers } })
|
|
23
|
+
return { status: res.status, body: await res.json().catch(() => null) }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// ---- 0. plainuser 注册(注册后系统已有 admin → user 角色)----
|
|
27
|
+
const reg = await api('/api/users/register', { method: 'POST', body: JSON.stringify(PLAIN) })
|
|
28
|
+
check('后续注册为普通 user(前置)', reg.status === 200 && reg.body?.data?.user?.role === 'user', JSON.stringify(reg.body?.data?.user))
|
|
29
|
+
|
|
30
|
+
const browser = await puppeteer.launch({
|
|
31
|
+
executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
|
|
32
|
+
headless: 'new',
|
|
33
|
+
args: ['--no-sandbox', '--disable-gpu', '--no-proxy-server', '--window-size=1600,1000'],
|
|
34
|
+
})
|
|
35
|
+
try {
|
|
36
|
+
const page = await browser.newPage()
|
|
37
|
+
await page.setViewport({ width: 1600, height: 1000, deviceScaleFactor: 1.25 })
|
|
38
|
+
|
|
39
|
+
// ---- 1. admin 会话:内置徽标 + 切换成功 ----
|
|
40
|
+
const adminLogin = await api('/api/users/login', { method: 'POST', body: JSON.stringify(ADMIN) })
|
|
41
|
+
check('admin 登录(前置)', adminLogin.status === 200 && adminLogin.body?.data?.user?.role === 'admin')
|
|
42
|
+
await page.setCookie({ name: 'token', value: adminLogin.body.data.token, domain: new URL(BASE).hostname, path: '/' })
|
|
43
|
+
await page.goto(`${BASE}/plugins`, { waitUntil: 'networkidle2', timeout: 60000 })
|
|
44
|
+
await page.waitForFunction(() => document.body.innerText.includes('内置示例'), { timeout: 30000 })
|
|
45
|
+
const adminText = await page.evaluate(() => document.body.innerText)
|
|
46
|
+
check('内置示例徽标呈现(project 作用域)', adminText.includes('内置示例'))
|
|
47
|
+
check('用户级扩展徽标呈现(user 作用域)', adminText.includes('用户级扩展'))
|
|
48
|
+
check('旧「项目级」标签不再出现', !adminText.includes('项目级'))
|
|
49
|
+
await page.screenshot({ path: `${SHOT_DIR}/plugins-1-admin-badges.png` })
|
|
50
|
+
|
|
51
|
+
// admin 切换第一个启用的插件 → 成功 toast → 等热重载 → 切回恢复
|
|
52
|
+
const firstSwitch = await page.$('.pg-card .ant-switch')
|
|
53
|
+
if (firstSwitch) {
|
|
54
|
+
await firstSwitch.click()
|
|
55
|
+
await page.waitForFunction(() => document.body.innerText.includes('已停用') || document.body.innerText.includes('已启用'), { timeout: 20000 })
|
|
56
|
+
await new Promise(r => setTimeout(r, 1800))
|
|
57
|
+
const toastText = await page.evaluate(() => document.body.innerText)
|
|
58
|
+
const toggledOk = toastText.includes('· 已停用') || toastText.includes('· 已启用')
|
|
59
|
+
check('admin 切换插件成功', toggledOk)
|
|
60
|
+
// 恢复原状态
|
|
61
|
+
const sw2 = await page.$('.pg-card .ant-switch')
|
|
62
|
+
if (sw2) { await sw2.click(); await new Promise(r => setTimeout(r, 1800)) }
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
check('admin 切换插件成功', false, '页面上没有插件卡片')
|
|
66
|
+
}
|
|
67
|
+
await page.evaluate(() => { document.cookie = 'token=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/' })
|
|
68
|
+
|
|
69
|
+
// ---- 2. plainuser 会话:403 → 人话提示 ----
|
|
70
|
+
const plainLogin = await api('/api/users/login', { method: 'POST', body: JSON.stringify({ email: PLAIN.email, password: PLAIN.password }) })
|
|
71
|
+
check('plainuser 登录(前置)', plainLogin.status === 200 && plainLogin.body?.data?.user?.role === 'user')
|
|
72
|
+
await page.setCookie({ name: 'token', value: plainLogin.body.data.token, domain: new URL(BASE).hostname, path: '/' })
|
|
73
|
+
const denied = []
|
|
74
|
+
page.on('response', (res) => {
|
|
75
|
+
if (res.status() >= 400) denied.push(`${res.status()} ${res.url()}`)
|
|
76
|
+
})
|
|
77
|
+
await page.goto(`${BASE}/plugins`, { waitUntil: 'networkidle2', timeout: 60000 })
|
|
78
|
+
await page.waitForFunction(() => document.body.innerText.includes('内置示例'), { timeout: 30000 })
|
|
79
|
+
const sw = await page.$('.pg-card .ant-switch')
|
|
80
|
+
if (sw) {
|
|
81
|
+
await sw.click()
|
|
82
|
+
await page.waitForFunction(() => document.querySelector('.ant-message')?.textContent?.length > 0, { timeout: 20000 })
|
|
83
|
+
const toast = await page.evaluate(() => document.querySelector('.ant-message')?.textContent ?? '')
|
|
84
|
+
const human = /权限|管理员/.test(toast)
|
|
85
|
+
const rawCode = /\b403\b|\[POST\]|ADMIN_REQUIRED|FORBIDDEN/.test(toast)
|
|
86
|
+
check('403 提示为人话(权限相关文案)', human, toast.trim())
|
|
87
|
+
check('提示不含错误码式文本', !rawCode)
|
|
88
|
+
console.log(' [denied requests]', denied.join(' | ') || '(none)')
|
|
89
|
+
await page.screenshot({ path: `${SHOT_DIR}/plugins-2-403-human.png` })
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
check('403 提示为人话(权限不足/需管理员)', false, '页面上没有插件卡片')
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await browser.close()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const failed = results.filter(r => !r.ok)
|
|
100
|
+
console.log(`\n===== plugins E2E: ${results.length - failed.length}/${results.length} 通过 =====`)
|
|
101
|
+
process.exit(failed.length ? 1 : 0)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// repo 实例 setup 流程 API 验证:轮询等待服务起来 → 立刻注册(抢在探针前) → 断言 admin
|
|
2
|
+
const BASE = 'http://127.0.0.1:3001'
|
|
3
|
+
const CREDS = { name: 'admin', email: 'admin@awshop.local', password: 'Awshop2026' }
|
|
4
|
+
const api = async (path, opts = {}) => {
|
|
5
|
+
const res = await fetch(`${BASE}${path}`, { ...opts, headers: { 'content-type': 'application/json', ...opts.headers } })
|
|
6
|
+
return { status: res.status, body: await res.json().catch(() => null) }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let alive = false
|
|
10
|
+
for (let i = 0; i < 120; i++) {
|
|
11
|
+
try { await fetch(`${BASE}/api/health`, { signal: AbortSignal.timeout(800) }); alive = true; break }
|
|
12
|
+
catch { await new Promise(r => setTimeout(r, 500)) }
|
|
13
|
+
}
|
|
14
|
+
if (!alive) { console.error('✖ 服务未在超时内就绪'); process.exit(1) }
|
|
15
|
+
|
|
16
|
+
const s0 = await api('/api/users/setup-status')
|
|
17
|
+
console.log('setup-status 初始:', JSON.stringify(s0.body?.data), s0.status === 200 && s0.body?.data?.needsSetup === true ? '✔' : '✖')
|
|
18
|
+
if (s0.body?.data?.needsSetup !== true) process.exit(1)
|
|
19
|
+
|
|
20
|
+
const reg = await api('/api/users/register', { method: 'POST', body: JSON.stringify(CREDS) })
|
|
21
|
+
console.log('注册首个账号:', reg.body?.data?.user?.email, reg.body?.data?.user?.role, reg.body?.data?.user?.role === 'admin' ? '✔' : '✖')
|
|
22
|
+
if (reg.body?.data?.user?.role !== 'admin') process.exit(1)
|
|
23
|
+
|
|
24
|
+
const s1 = await api('/api/users/setup-status')
|
|
25
|
+
console.log('注册后 setup-status:', JSON.stringify(s1.body?.data), s1.body?.data?.needsSetup === false ? '✔' : '✖')
|
|
26
|
+
|
|
27
|
+
const login = await api('/api/users/login', { method: 'POST', body: JSON.stringify({ email: CREDS.email, password: CREDS.password }) })
|
|
28
|
+
console.log('新管理员登录:', login.body?.data?.user?.role === 'admin' ? '✔' : '✖')
|
|
29
|
+
const me = await api('/api/users/me', { headers: { authorization: `Bearer ${login.body?.data?.token}` } })
|
|
30
|
+
console.log('/api/users/me:', me.body?.data?.role === 'admin' ? '✔' : '✖')
|
|
31
|
+
console.log(me.body?.data?.role === 'admin' ? 'REPO-SETUP-OK' : 'REPO-SETUP-FAIL')
|
|
@@ -57,7 +57,7 @@ try {
|
|
|
57
57
|
const pwInput = await page.$('.auth-card input[type="password"]')
|
|
58
58
|
await pwInput.click({ clickCount: 3 })
|
|
59
59
|
await pwInput.type(CREDS.password)
|
|
60
|
-
await
|
|
60
|
+
await page.keyboard.press('Enter')
|
|
61
61
|
|
|
62
62
|
// 注册成功 → store 置登录态 → 登录门消失,workspace 出现
|
|
63
63
|
await page.waitForFunction(() => document.body.innerText.includes('Workshop'), { timeout: 30000 })
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* POST /api/workshop/plugins/:name/disable —— 停用插件(admin;热重载生效)。
|
|
3
|
+
* 统一信封:经 defineApiHandler,错误(AppError)带人话 message 供前端直出。
|
|
3
4
|
*/
|
|
4
|
-
import { defineEventHandler, createError } from 'h3'
|
|
5
5
|
import { resolveUser, requireAdmin } from '@/server/api/workshop/caller'
|
|
6
|
+
import { AppError, ErrorCodes } from '@/server/utils/errors'
|
|
6
7
|
import { pluginManifest, reloadPluginHost, setPluginEnabled } from '@/server/services/workshop/plugins/host.mjs'
|
|
8
|
+
import { defineApiHandler } from '@/server/utils/response'
|
|
7
9
|
|
|
8
|
-
export default
|
|
10
|
+
export default defineApiHandler(async (event) => {
|
|
9
11
|
const user = resolveUser(event)
|
|
10
12
|
requireAdmin(event)
|
|
11
13
|
const name = String(event.context.params?.name ?? '')
|
|
12
14
|
if (!pluginManifest().some(p => p.name === name)) {
|
|
13
|
-
throw
|
|
15
|
+
throw new AppError(404, ErrorCodes.NOT_FOUND, `插件不存在: ${name}`)
|
|
14
16
|
}
|
|
15
17
|
setPluginEnabled(name, false)
|
|
16
18
|
await reloadPluginHost()
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* POST /api/workshop/plugins/:name/enable —— 启用插件(admin;热重载生效)。
|
|
3
|
+
* 统一信封:经 defineApiHandler,错误(AppError)带人话 message 供前端直出。
|
|
3
4
|
*/
|
|
4
|
-
import { defineEventHandler, createError } from 'h3'
|
|
5
5
|
import { resolveUser, requireAdmin } from '@/server/api/workshop/caller'
|
|
6
|
+
import { AppError, ErrorCodes } from '@/server/utils/errors'
|
|
6
7
|
import { pluginManifest, reloadPluginHost, setPluginEnabled } from '@/server/services/workshop/plugins/host.mjs'
|
|
8
|
+
import { defineApiHandler } from '@/server/utils/response'
|
|
7
9
|
|
|
8
|
-
export default
|
|
10
|
+
export default defineApiHandler(async (event) => {
|
|
9
11
|
const user = resolveUser(event)
|
|
10
12
|
requireAdmin(event)
|
|
11
13
|
const name = String(event.context.params?.name ?? '')
|
|
12
14
|
if (!pluginManifest().some(p => p.name === name)) {
|
|
13
|
-
throw
|
|
15
|
+
throw new AppError(404, ErrorCodes.NOT_FOUND, `插件不存在: ${name}`)
|
|
14
16
|
}
|
|
15
17
|
setPluginEnabled(name, true)
|
|
16
18
|
await reloadPluginHost()
|
package/server/data/daqs.json
CHANGED
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"posX": 1695,
|
|
65
65
|
"posZ": 1135,
|
|
66
66
|
"lineId": "ln-af002514",
|
|
67
|
-
"value":
|
|
67
|
+
"value": 166.4,
|
|
68
68
|
"state": "ok",
|
|
69
|
-
"lastAt": "2026-09-
|
|
69
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
70
70
|
"createdAt": "2026-08-27T12:39:08.110Z"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
@@ -308,9 +308,9 @@
|
|
|
308
308
|
"deviceBindingId": null,
|
|
309
309
|
"driverConfig": {},
|
|
310
310
|
"lineId": "ln-af002514",
|
|
311
|
-
"value":
|
|
311
|
+
"value": 313,
|
|
312
312
|
"state": "ok",
|
|
313
|
-
"lastAt": "2026-09-
|
|
313
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
314
314
|
"createdAt": "2026-08-28T09:37:38.518Z"
|
|
315
315
|
},
|
|
316
316
|
{
|
|
@@ -330,9 +330,9 @@
|
|
|
330
330
|
"deviceBindingId": null,
|
|
331
331
|
"driverConfig": {},
|
|
332
332
|
"lineId": "ln-af002514",
|
|
333
|
-
"value":
|
|
333
|
+
"value": 168.6,
|
|
334
334
|
"state": "ok",
|
|
335
|
-
"lastAt": "2026-09-
|
|
335
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
336
336
|
"createdAt": "2026-08-29T03:30:57.463Z"
|
|
337
337
|
},
|
|
338
338
|
{
|
|
@@ -1012,9 +1012,9 @@
|
|
|
1012
1012
|
"posX": 2395,
|
|
1013
1013
|
"posZ": 1135,
|
|
1014
1014
|
"lineId": "ln-af002514",
|
|
1015
|
-
"value":
|
|
1015
|
+
"value": 173.5,
|
|
1016
1016
|
"state": "ok",
|
|
1017
|
-
"lastAt": "2026-09-
|
|
1017
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
1018
1018
|
"createdAt": "2026-08-31T04:07:19.038Z"
|
|
1019
1019
|
},
|
|
1020
1020
|
{
|
|
@@ -3026,9 +3026,9 @@
|
|
|
3026
3026
|
"posX": 120,
|
|
3027
3027
|
"posZ": 120,
|
|
3028
3028
|
"lineId": "ln-af002514",
|
|
3029
|
-
"value":
|
|
3030
|
-
"state": "
|
|
3031
|
-
"lastAt": "2026-09-
|
|
3029
|
+
"value": 0.9963,
|
|
3030
|
+
"state": "ok",
|
|
3031
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
3032
3032
|
"createdAt": "2026-09-03T10:17:59.182Z"
|
|
3033
3033
|
},
|
|
3034
3034
|
{
|
|
@@ -3050,9 +3050,9 @@
|
|
|
3050
3050
|
"posX": 120,
|
|
3051
3051
|
"posZ": 120,
|
|
3052
3052
|
"lineId": "ln-af002514",
|
|
3053
|
-
"value": 0.
|
|
3054
|
-
"state": "
|
|
3055
|
-
"lastAt": "2026-09-
|
|
3053
|
+
"value": 0.9759,
|
|
3054
|
+
"state": "ok",
|
|
3055
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
3056
3056
|
"createdAt": "2026-09-03T11:18:01.401Z"
|
|
3057
3057
|
},
|
|
3058
3058
|
{
|
|
@@ -3072,9 +3072,9 @@
|
|
|
3072
3072
|
"deviceBindingId": "dev-mthzr991-ujuad",
|
|
3073
3073
|
"driverConfig": {},
|
|
3074
3074
|
"lineId": "ln-af002514",
|
|
3075
|
-
"value":
|
|
3076
|
-
"state": "
|
|
3077
|
-
"lastAt": "2026-09-
|
|
3075
|
+
"value": 0.9978,
|
|
3076
|
+
"state": "ok",
|
|
3077
|
+
"lastAt": "2026-09-06T02:40:31.943+08:00",
|
|
3078
3078
|
"createdAt": "2026-09-03T11:34:59.332Z"
|
|
3079
3079
|
},
|
|
3080
3080
|
{
|
|
@@ -3214,9 +3214,9 @@
|
|
|
3214
3214
|
"deviceBindingId": null,
|
|
3215
3215
|
"driverConfig": {},
|
|
3216
3216
|
"lineId": "ln-1b318320",
|
|
3217
|
-
"value": 167,
|
|
3217
|
+
"value": 167.5,
|
|
3218
3218
|
"state": "ok",
|
|
3219
|
-
"lastAt": "2026-09-
|
|
3219
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3220
3220
|
"createdAt": "2026-09-04T05:08:10.069Z"
|
|
3221
3221
|
},
|
|
3222
3222
|
{
|
|
@@ -3749,9 +3749,9 @@
|
|
|
3749
3749
|
"jsonPath": "data.temp"
|
|
3750
3750
|
},
|
|
3751
3751
|
"lineId": "ln-6a34fbc7",
|
|
3752
|
-
"value":
|
|
3752
|
+
"value": 59.5,
|
|
3753
3753
|
"state": "alarm",
|
|
3754
|
-
"lastAt": "2026-09-
|
|
3754
|
+
"lastAt": "2026-09-06T02:40:33.777+08:00",
|
|
3755
3755
|
"createdAt": "2026-09-05T05:47:00.640Z"
|
|
3756
3756
|
},
|
|
3757
3757
|
{
|
|
@@ -3776,7 +3776,7 @@
|
|
|
3776
3776
|
"lineId": "ln-6a34fbc7",
|
|
3777
3777
|
"value": 42.4,
|
|
3778
3778
|
"state": "alarm",
|
|
3779
|
-
"lastAt": "2026-09-
|
|
3779
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3780
3780
|
"createdAt": "2026-09-05T05:47:00.697Z"
|
|
3781
3781
|
},
|
|
3782
3782
|
{
|
|
@@ -3804,9 +3804,9 @@
|
|
|
3804
3804
|
"byteOrder": "big"
|
|
3805
3805
|
},
|
|
3806
3806
|
"lineId": "ln-6a34fbc7",
|
|
3807
|
-
"value": 0.
|
|
3807
|
+
"value": 0.95,
|
|
3808
3808
|
"state": "ok",
|
|
3809
|
-
"lastAt": "2026-09-
|
|
3809
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3810
3810
|
"createdAt": "2026-09-05T05:47:00.821Z"
|
|
3811
3811
|
},
|
|
3812
3812
|
{
|
|
@@ -3835,7 +3835,7 @@
|
|
|
3835
3835
|
"lineId": "ln-6a34fbc7",
|
|
3836
3836
|
"value": 66,
|
|
3837
3837
|
"state": "alarm",
|
|
3838
|
-
"lastAt": "2026-09-
|
|
3838
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3839
3839
|
"createdAt": "2026-09-05T05:47:00.864Z"
|
|
3840
3840
|
},
|
|
3841
3841
|
{
|
|
@@ -3858,9 +3858,9 @@
|
|
|
3858
3858
|
"nodeId": "ns=2;s=AW.Temp"
|
|
3859
3859
|
},
|
|
3860
3860
|
"lineId": "ln-6a34fbc7",
|
|
3861
|
-
"value":
|
|
3861
|
+
"value": 182.7,
|
|
3862
3862
|
"state": "warn",
|
|
3863
|
-
"lastAt": "2026-09-
|
|
3863
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3864
3864
|
"createdAt": "2026-09-05T05:47:03.624Z"
|
|
3865
3865
|
},
|
|
3866
3866
|
{
|
|
@@ -3888,9 +3888,9 @@
|
|
|
3888
3888
|
"byteOrder": "big"
|
|
3889
3889
|
},
|
|
3890
3890
|
"lineId": "ln-6a34fbc7",
|
|
3891
|
-
"value":
|
|
3891
|
+
"value": 0.2,
|
|
3892
3892
|
"state": "alarm",
|
|
3893
|
-
"lastAt": "2026-09-
|
|
3893
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3894
3894
|
"createdAt": "2026-09-05T05:47:03.680Z"
|
|
3895
3895
|
},
|
|
3896
3896
|
{
|
|
@@ -3959,9 +3959,9 @@
|
|
|
3959
3959
|
"jsonPath": "data.temp"
|
|
3960
3960
|
},
|
|
3961
3961
|
"lineId": "ln-419463e0",
|
|
3962
|
-
"value":
|
|
3962
|
+
"value": 59.5,
|
|
3963
3963
|
"state": "alarm",
|
|
3964
|
-
"lastAt": "2026-09-
|
|
3964
|
+
"lastAt": "2026-09-06T02:40:33.777+08:00",
|
|
3965
3965
|
"createdAt": "2026-09-05T06:09:13.444Z"
|
|
3966
3966
|
},
|
|
3967
3967
|
{
|
|
@@ -3984,9 +3984,9 @@
|
|
|
3984
3984
|
"jsonPath": "data.value"
|
|
3985
3985
|
},
|
|
3986
3986
|
"lineId": "ln-419463e0",
|
|
3987
|
-
"value":
|
|
3987
|
+
"value": 43,
|
|
3988
3988
|
"state": "alarm",
|
|
3989
|
-
"lastAt": "2026-09-
|
|
3989
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
3990
3990
|
"createdAt": "2026-09-05T06:09:13.490Z"
|
|
3991
3991
|
},
|
|
3992
3992
|
{
|
|
@@ -4014,9 +4014,9 @@
|
|
|
4014
4014
|
"byteOrder": "big"
|
|
4015
4015
|
},
|
|
4016
4016
|
"lineId": "ln-419463e0",
|
|
4017
|
-
"value": 0.
|
|
4017
|
+
"value": 0.95,
|
|
4018
4018
|
"state": "ok",
|
|
4019
|
-
"lastAt": "2026-09-
|
|
4019
|
+
"lastAt": "2026-09-06T02:40:33.777+08:00",
|
|
4020
4020
|
"createdAt": "2026-09-05T06:09:13.540Z"
|
|
4021
4021
|
},
|
|
4022
4022
|
{
|
|
@@ -4045,7 +4045,7 @@
|
|
|
4045
4045
|
"lineId": "ln-419463e0",
|
|
4046
4046
|
"value": 66,
|
|
4047
4047
|
"state": "alarm",
|
|
4048
|
-
"lastAt": "2026-09-
|
|
4048
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4049
4049
|
"createdAt": "2026-09-05T06:09:13.567Z"
|
|
4050
4050
|
},
|
|
4051
4051
|
{
|
|
@@ -4068,9 +4068,9 @@
|
|
|
4068
4068
|
"nodeId": "ns=2;s=AW.Temp"
|
|
4069
4069
|
},
|
|
4070
4070
|
"lineId": "ln-419463e0",
|
|
4071
|
-
"value":
|
|
4071
|
+
"value": 182.7,
|
|
4072
4072
|
"state": "warn",
|
|
4073
|
-
"lastAt": "2026-09-
|
|
4073
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4074
4074
|
"createdAt": "2026-09-05T06:09:14.128Z"
|
|
4075
4075
|
},
|
|
4076
4076
|
{
|
|
@@ -4098,9 +4098,9 @@
|
|
|
4098
4098
|
"byteOrder": "big"
|
|
4099
4099
|
},
|
|
4100
4100
|
"lineId": "ln-419463e0",
|
|
4101
|
-
"value": 0,
|
|
4101
|
+
"value": 0.2,
|
|
4102
4102
|
"state": "alarm",
|
|
4103
|
-
"lastAt": "2026-09-
|
|
4103
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4104
4104
|
"createdAt": "2026-09-05T06:09:14.173Z"
|
|
4105
4105
|
},
|
|
4106
4106
|
{
|
|
@@ -4350,9 +4350,9 @@
|
|
|
4350
4350
|
"byteOrder": "big"
|
|
4351
4351
|
},
|
|
4352
4352
|
"lineId": "ln-3548f325",
|
|
4353
|
-
"value":
|
|
4353
|
+
"value": 0.3,
|
|
4354
4354
|
"state": "alarm",
|
|
4355
|
-
"lastAt": "2026-09-
|
|
4355
|
+
"lastAt": "2026-09-06T02:40:32.727+08:00",
|
|
4356
4356
|
"createdAt": "2026-09-05T07:23:51.869Z"
|
|
4357
4357
|
},
|
|
4358
4358
|
{
|
|
@@ -4564,9 +4564,9 @@
|
|
|
4564
4564
|
"deviceBindingId": null,
|
|
4565
4565
|
"driverConfig": {},
|
|
4566
4566
|
"lineId": "ln-871ac52d",
|
|
4567
|
-
"value": 43.
|
|
4567
|
+
"value": 43.41,
|
|
4568
4568
|
"state": "ok",
|
|
4569
|
-
"lastAt": "2026-09-
|
|
4569
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4570
4570
|
"createdAt": "2026-09-05T09:47:55.620Z"
|
|
4571
4571
|
},
|
|
4572
4572
|
{
|
|
@@ -4620,5 +4620,49 @@
|
|
|
4620
4620
|
"state": "offline",
|
|
4621
4621
|
"lastAt": null,
|
|
4622
4622
|
"createdAt": "2026-09-05T23:58:31.450+08:00"
|
|
4623
|
+
},
|
|
4624
|
+
{
|
|
4625
|
+
"id": "dn-8d0da4c4",
|
|
4626
|
+
"templateRef": "daq-temp-tc",
|
|
4627
|
+
"name": "lx8-daq",
|
|
4628
|
+
"driver": "mock",
|
|
4629
|
+
"enabled": true,
|
|
4630
|
+
"intervalMs": 1000,
|
|
4631
|
+
"publishIntervalMs": 0,
|
|
4632
|
+
"unit": "℃",
|
|
4633
|
+
"decimals": 1,
|
|
4634
|
+
"min": 150,
|
|
4635
|
+
"max": 185,
|
|
4636
|
+
"warnLow": 152.8,
|
|
4637
|
+
"warnHigh": 182.2,
|
|
4638
|
+
"deviceBindingId": null,
|
|
4639
|
+
"driverConfig": {},
|
|
4640
|
+
"lineId": "ln-1acc1a0c",
|
|
4641
|
+
"value": 168.4,
|
|
4642
|
+
"state": "ok",
|
|
4643
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4644
|
+
"createdAt": "2026-09-06T02:22:23.148+08:00"
|
|
4645
|
+
},
|
|
4646
|
+
{
|
|
4647
|
+
"id": "dn-36c860c8",
|
|
4648
|
+
"templateRef": "daq-temp-tc",
|
|
4649
|
+
"name": "lx8-daq",
|
|
4650
|
+
"driver": "mock",
|
|
4651
|
+
"enabled": true,
|
|
4652
|
+
"intervalMs": 1000,
|
|
4653
|
+
"publishIntervalMs": 0,
|
|
4654
|
+
"unit": "℃",
|
|
4655
|
+
"decimals": 1,
|
|
4656
|
+
"min": 150,
|
|
4657
|
+
"max": 185,
|
|
4658
|
+
"warnLow": 152.8,
|
|
4659
|
+
"warnHigh": 182.2,
|
|
4660
|
+
"deviceBindingId": null,
|
|
4661
|
+
"driverConfig": {},
|
|
4662
|
+
"lineId": "ln-917490c1",
|
|
4663
|
+
"value": 167,
|
|
4664
|
+
"state": "ok",
|
|
4665
|
+
"lastAt": "2026-09-06T02:40:33.514+08:00",
|
|
4666
|
+
"createdAt": "2026-09-06T02:24:50.532+08:00"
|
|
4623
4667
|
}
|
|
4624
4668
|
]
|
|
@@ -1370,5 +1370,26 @@
|
|
|
1370
1370
|
"color": "#41c8f4",
|
|
1371
1371
|
"description": "",
|
|
1372
1372
|
"createdAt": "2026-09-05T23:58:29.513+08:00"
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"id": "ln-ea2ec4af",
|
|
1376
|
+
"name": "lx7",
|
|
1377
|
+
"color": "#b58cff",
|
|
1378
|
+
"description": "",
|
|
1379
|
+
"createdAt": "2026-09-06T02:21:55.267+08:00"
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"id": "ln-1acc1a0c",
|
|
1383
|
+
"name": "lx8",
|
|
1384
|
+
"color": "#ff8a5c",
|
|
1385
|
+
"description": "",
|
|
1386
|
+
"createdAt": "2026-09-06T02:22:23.135+08:00"
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
"id": "ln-917490c1",
|
|
1390
|
+
"name": "lx8-mtopq0r1",
|
|
1391
|
+
"color": "#3aa0ff",
|
|
1392
|
+
"description": "",
|
|
1393
|
+
"createdAt": "2026-09-06T02:24:50.518+08:00"
|
|
1373
1394
|
}
|
|
1374
1395
|
]
|
|
@@ -1244,5 +1244,124 @@
|
|
|
1244
1244
|
"name": "cfg-prod",
|
|
1245
1245
|
"description": "",
|
|
1246
1246
|
"createdAt": "2026-09-05T20:08:42.255+08:00"
|
|
1247
|
+
},
|
|
1248
|
+
{
|
|
1249
|
+
"id": "pd-a136dbbf",
|
|
1250
|
+
"lineId": "",
|
|
1251
|
+
"name": "cfg-prod",
|
|
1252
|
+
"description": "",
|
|
1253
|
+
"createdAt": "2026-09-06T01:31:30.539+08:00"
|
|
1254
|
+
},
|
|
1255
|
+
{
|
|
1256
|
+
"id": "pd-52746c22",
|
|
1257
|
+
"lineId": "",
|
|
1258
|
+
"name": "cfg-prod",
|
|
1259
|
+
"description": "",
|
|
1260
|
+
"createdAt": "2026-09-06T01:34:34.938+08:00"
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
"id": "pd-11d4b14d",
|
|
1264
|
+
"lineId": "",
|
|
1265
|
+
"name": "cfg-prod",
|
|
1266
|
+
"description": "",
|
|
1267
|
+
"createdAt": "2026-09-06T01:36:55.733+08:00"
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
"id": "pd-fd48e9df",
|
|
1271
|
+
"lineId": "",
|
|
1272
|
+
"name": "cfg-prod",
|
|
1273
|
+
"description": "",
|
|
1274
|
+
"createdAt": "2026-09-06T01:38:22.240+08:00"
|
|
1275
|
+
},
|
|
1276
|
+
{
|
|
1277
|
+
"id": "pd-74361ea8",
|
|
1278
|
+
"lineId": "",
|
|
1279
|
+
"name": "cfg-prod",
|
|
1280
|
+
"description": "",
|
|
1281
|
+
"createdAt": "2026-09-06T01:40:55.343+08:00"
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
"id": "pd-b220f792",
|
|
1285
|
+
"lineId": "",
|
|
1286
|
+
"name": "lx-prod",
|
|
1287
|
+
"description": "",
|
|
1288
|
+
"createdAt": "2026-09-06T01:42:23.503+08:00"
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
"id": "pd-7c48a733",
|
|
1292
|
+
"lineId": "",
|
|
1293
|
+
"name": "lx2-prod",
|
|
1294
|
+
"description": "",
|
|
1295
|
+
"createdAt": "2026-09-06T01:50:15.679+08:00"
|
|
1296
|
+
},
|
|
1297
|
+
{
|
|
1298
|
+
"id": "pd-dd794a60",
|
|
1299
|
+
"lineId": "",
|
|
1300
|
+
"name": "lx3-prod",
|
|
1301
|
+
"description": "",
|
|
1302
|
+
"createdAt": "2026-09-06T01:54:41.053+08:00"
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
"id": "pd-b4d2819f",
|
|
1306
|
+
"lineId": "",
|
|
1307
|
+
"name": "lx4-prod",
|
|
1308
|
+
"description": "",
|
|
1309
|
+
"createdAt": "2026-09-06T02:00:59.081+08:00"
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
"id": "pd-c787b400",
|
|
1313
|
+
"lineId": "",
|
|
1314
|
+
"name": "lx5-prod",
|
|
1315
|
+
"description": "",
|
|
1316
|
+
"createdAt": "2026-09-06T02:05:17.274+08:00"
|
|
1317
|
+
},
|
|
1318
|
+
{
|
|
1319
|
+
"id": "pd-b265d280",
|
|
1320
|
+
"lineId": "",
|
|
1321
|
+
"name": "lx6-prod",
|
|
1322
|
+
"description": "",
|
|
1323
|
+
"createdAt": "2026-09-06T02:06:14.614+08:00"
|
|
1324
|
+
},
|
|
1325
|
+
{
|
|
1326
|
+
"id": "pd-71604a52",
|
|
1327
|
+
"lineId": "",
|
|
1328
|
+
"name": "dbg2-prod",
|
|
1329
|
+
"description": "",
|
|
1330
|
+
"createdAt": "2026-09-06T02:19:22.163+08:00"
|
|
1331
|
+
},
|
|
1332
|
+
{
|
|
1333
|
+
"id": "pd-3adf854f",
|
|
1334
|
+
"lineId": "ln-1acc1a0c",
|
|
1335
|
+
"name": "lx8-prod",
|
|
1336
|
+
"description": "",
|
|
1337
|
+
"createdAt": "2026-09-06T02:22:23.179+08:00"
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
"id": "pd-75752beb",
|
|
1341
|
+
"lineId": "ln-917490c1",
|
|
1342
|
+
"name": "lx8-prod",
|
|
1343
|
+
"description": "",
|
|
1344
|
+
"createdAt": "2026-09-06T02:24:50.563+08:00"
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"id": "pd-1f9917a5",
|
|
1348
|
+
"lineId": "",
|
|
1349
|
+
"name": "cfg-prod",
|
|
1350
|
+
"description": "",
|
|
1351
|
+
"createdAt": "2026-09-06T02:26:09.209+08:00"
|
|
1352
|
+
},
|
|
1353
|
+
{
|
|
1354
|
+
"id": "pd-16138f8b",
|
|
1355
|
+
"lineId": "",
|
|
1356
|
+
"name": "cfg-prod",
|
|
1357
|
+
"description": "",
|
|
1358
|
+
"createdAt": "2026-09-06T02:29:04.442+08:00"
|
|
1359
|
+
},
|
|
1360
|
+
{
|
|
1361
|
+
"id": "pd-15ba9244",
|
|
1362
|
+
"lineId": "",
|
|
1363
|
+
"name": "cfg-prod",
|
|
1364
|
+
"description": "",
|
|
1365
|
+
"createdAt": "2026-09-06T02:40:12.841+08:00"
|
|
1247
1366
|
}
|
|
1248
1367
|
]
|