agentworkshop 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.AgentWorkShop/prompts/host-tools.json +17 -0
- package/.env.example +37 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +17 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{Bc_mM2cU.js → BH0Z05CS.js} +1 -1
- package/.output/public/_nuxt/Bxgaym6j.js +1 -0
- package/.output/public/_nuxt/{DRlJ2-4p.js → By-LNp3k.js} +1 -1
- package/.output/public/_nuxt/{C2QSTAWf.js → Bz40vyZS.js} +1 -1
- package/.output/public/_nuxt/{CwS_UHeH.js → CS8R0_J3.js} +1 -1
- package/.output/public/_nuxt/{ClptO7LA.js → CUxV8Bw_.js} +1 -1
- package/.output/public/_nuxt/CXmkVXS5.js +1 -0
- package/.output/public/_nuxt/DC-QMEk1.js +2 -0
- package/.output/public/_nuxt/{C-Y5ydB6.js → Dgp2wK2U.js} +6 -6
- package/.output/public/_nuxt/{Ck6tznoQ.js → DjqcbFBE.js} +1 -1
- package/.output/public/_nuxt/{B0haAGoq.js → GP2wXyuY.js} +1 -1
- package/.output/public/_nuxt/TownView.Bt33bo1M.css +1 -0
- package/.output/public/_nuxt/{MhK4buEJ.js → XVB9_zwP.js} +1 -1
- package/.output/public/_nuxt/_id_.BeqSLvl_.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/90ae66f6-f649-4b44-8df9-bcd9e9a957a2.json +1 -0
- package/.output/public/_nuxt/{Bq_KKxCg.js → i_MKObHo.js} +1 -1
- package/.output/public/_nuxt/settings.DeRNNUcP.css +1 -0
- package/.output/public/_nuxt/{CclO6GyL.js → tpDMVY5w.js} +1 -1
- package/.output/public/_nuxt/{C0FogB-p.js → zwdqvGN_.js} +1 -1
- package/.output/server/chunks/_/nitro.mjs +2672 -2350
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs → TownView-BkHxMiwZ.mjs} +168 -159
- package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs.map → TownView-BkHxMiwZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-xR3AChMO.mjs → _id_-Bna1_JuB.mjs} +5 -4
- package/.output/server/chunks/build/_id_-Bna1_JuB.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CmKAEFHV.mjs → _id_-GnRJPykX.mjs} +161 -119
- package/.output/server/chunks/build/_id_-GnRJPykX.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs → _wsId_-CzLDGT_V.mjs} +6 -5
- package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs.map → _wsId_-CzLDGT_V.mjs.map} +1 -1
- package/.output/server/chunks/build/agents-D4l1icvn.mjs +1 -0
- package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -1
- package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs +1 -0
- package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -1
- package/.output/server/chunks/build/{daq-Boz_dlAQ.mjs → daq-D_W59QOe.mjs} +6 -5
- package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-wTRwBAUi.mjs → dcw-BTM5YU-B.mjs} +3 -2
- package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +1 -0
- package/.output/server/chunks/build/default-Dt6xLdpd.mjs +1 -0
- package/.output/server/chunks/build/{logs-Cdi-eXlN.mjs → logs-CUQt1z7D.mjs} +4 -3
- package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +1 -0
- package/.output/server/chunks/build/monitor-yNoV98rf.mjs +1 -0
- package/.output/server/chunks/build/{pages-bWKy0ZsA.mjs → pages-DR2bzczM.mjs} +4 -3
- package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +1 -0
- package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs +1 -0
- package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -1
- package/.output/server/chunks/build/{settings-C3T5hR2A.mjs → settings-Cr06lbRy.mjs} +26 -18
- package/.output/server/chunks/build/settings-Cr06lbRy.mjs.map +1 -0
- package/.output/server/chunks/build/teams-QR3BBF7A.mjs +1 -0
- package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -1
- package/.output/server/chunks/build/tokens-DFvr_TLj.mjs +1 -0
- package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -1
- package/.output/server/chunks/build/{town-CKg6Qxba.mjs → town-BN4vQPb8.mjs} +6 -5
- package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
- package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs → useDaqStream-hwkhJHFU.mjs} +2 -2
- package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs.map → useDaqStream-hwkhJHFU.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwStream-BkWDGaWp.mjs → useDcwStream-Bdew_yrr.mjs} +16 -1
- package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +1 -0
- package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs → useDeviceTwins-C6EBg9oN.mjs} +2 -2
- package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs.map → useDeviceTwins-C6EBg9oN.mjs.map} +1 -1
- package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs → useOpsLog-DdCqKVVG.mjs} +2 -2
- package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs.map → useOpsLog-DdCqKVVG.mjs.map} +1 -1
- package/.output/server/chunks/build/users-4FZ0yFUO.mjs +1 -0
- package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -1
- package/.output/server/chunks/build/workshop-CLhwe5eo.mjs +1 -0
- package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -0
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -0
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +1 -0
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -0
- 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 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -0
- 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 +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +31 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -0
- 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 +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -0
- 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 +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
- 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 -0
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -0
- 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 +1 -0
- 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 -0
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/virtual/entry.mjs +287 -85
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -0
- package/.output/server/package.json +1 -1
- package/README-zh.md +434 -430
- package/README.md +5 -1
- package/app/components/workshop/DeviceTwinPanel.vue +34 -0
- package/app/components/workshop/town/TownView.vue +5 -0
- package/app/composables/workshop/useDcwStream.ts +15 -1
- package/app/config/schema.ts +54 -0
- package/app/pages/dcw/[id].vue +57 -0
- package/app/pages/settings.vue +2 -1
- package/config.yml +58 -1
- package/i18n/dicts/_en.json +56 -2
- package/i18n/dicts/dcwDetail.json +9 -1
- package/i18n/dicts/deviceTwinPanel.json +2 -1
- package/i18n/dicts/settings.json +48 -1
- package/i18n/locales/en.ts +139 -38
- package/i18n/locales/zh-CN.ts +139 -38
- package/package.json +1 -1
- package/scripts/_dbg-agent-dcw-rw.ts +131 -0
- package/scripts/_dbg-config-smoke.ts +28 -0
- package/scripts/_dbg-dcw-read-rest.mjs +103 -0
- package/scripts/_dbg-dcw-read-toolface.ts +13 -0
- package/scripts/_dbg-dcw-read-ui.mjs +74 -0
- package/scripts/_dbg-plugin-tools-inject.ts +80 -0
- package/scripts/_dbg-plugin-ui-wizard.mjs +125 -0
- package/scripts/_dbg-plugin-verify-e2e.mjs +123 -0
- package/scripts/test-config-precedence.ts +124 -0
- package/scripts/test-dcw-read.ts +153 -0
- package/server/api/workshop/dcw/[id]/read.post.ts +18 -0
- package/server/api/workshop/ws.ts +6 -4
- package/server/data/daqs.json +78 -8
- package/server/data/dcw-rollback.json +221 -1
- package/server/data/dcw-runs.json +123 -54
- package/server/data/dcw-writes.json +312 -0
- package/server/data/dcws.json +646 -4
- package/server/data/line-runs.json +12 -1
- package/server/plugins/backup.ts +7 -5
- package/server/plugins/retention.ts +59 -57
- package/server/plugins/workshop.ts +5 -4
- package/server/services/workshop/agents/industrial-tools.ts +50 -1
- package/server/services/workshop/agents/omp-agent.ts +10 -8
- package/server/services/workshop/agents/tool-approvals.ts +175 -174
- package/server/services/workshop/daq/alarm-notify.ts +102 -100
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +14 -15
- package/server/services/workshop/daq/daq-controller.ts +3 -3
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +5 -4
- package/server/services/workshop/daq/storage/timescale.adapter.ts +5 -4
- package/server/services/workshop/db/retention.ts +49 -50
- package/server/services/workshop/dcw/dcw-controller.ts +56 -1
- package/server/services/workshop/dcw/dcw-node.ts +233 -200
- package/server/services/workshop/dcw/dcw-runtime.ts +46 -9
- package/server/services/workshop/dcw/drivers.ts +98 -0
- package/server/services/workshop/dcw/recipe-rollback-manager.ts +16 -15
- package/server/services/workshop/logger.ts +65 -58
- package/server/services/workshop/runtime/embedding-provider.ts +9 -5
- package/server/services/workshop/runtime/manager.ts +16 -7
- package/server/services/workshop/runtime/memory.ts +14 -7
- package/server/services/workshop/settings.ts +143 -0
- package/shared/config/engine.mjs +6 -2
- package/shared/config/schema.json +48 -1
- package/shared/dcw-protocol.ts +21 -0
- package/.output/public/_nuxt/BD9D9pl4.js +0 -1
- package/.output/public/_nuxt/BxD8Fg_Z.js +0 -2
- package/.output/public/_nuxt/CwcOEM8m.js +0 -1
- package/.output/public/_nuxt/TownView.CI2Wpzty.css +0 -1
- package/.output/public/_nuxt/_id_.Ci4u30cR.css +0 -1
- package/.output/public/_nuxt/builds/meta/a0ac51ef-51c0-4ff9-8484-7c90d8dd10ba.json +0 -1
- package/.output/public/_nuxt/settings.BG0K9_MG.css +0 -1
- package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +0 -1
- package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +0 -1
- package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +0 -1
- package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +0 -1
- package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +0 -1
- package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +0 -1
- package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwStream-BkWDGaWp.mjs.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DCW 读写集成单元测试:驱动 read 原语(mock/modbus 形态判定)/工程量↔原始值对称映射/
|
|
3
|
+
* 节点读状态记账/运行时周期读调度/手动读取/Agent dcw_read 工具(鉴权+执行,AW_HOME 隔离)。
|
|
4
|
+
* 运行: AW_MODE=home AW_HOME=<tmp> npx tsx --tsconfig .nuxt/tsconfig.server.json scripts/test-dcw-read.ts
|
|
5
|
+
*/
|
|
6
|
+
import { mkdtempSync, rmSync } from 'node:fs'
|
|
7
|
+
import { tmpdir } from 'node:os'
|
|
8
|
+
import { join } from 'node:path'
|
|
9
|
+
|
|
10
|
+
// 工具段需要文件型仓库:整体进程重定向到一次性配置根(避免触碰检出内 .AgentWorkShop)
|
|
11
|
+
const awHome = mkdtempSync(join(tmpdir(), 'aw-dcw-read-'))
|
|
12
|
+
process.env.AW_MODE = 'home'
|
|
13
|
+
process.env.AW_HOME = awHome
|
|
14
|
+
|
|
15
|
+
let failures = 0
|
|
16
|
+
function check(name: string, ok: boolean, detail = ''): void {
|
|
17
|
+
console.log(` ${ok ? 'PASS' : 'FAIL'} ${name}${detail ? ` — ${detail}` : ''}`)
|
|
18
|
+
if (!ok) failures += 1
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// ===== 1. 驱动 read 原语 =====
|
|
22
|
+
console.log('\n--- 驱动 read 原语 ---')
|
|
23
|
+
{
|
|
24
|
+
const { mockDcwDriver, supportsDcwRead } = await import('../server/services/workshop/dcw/drivers')
|
|
25
|
+
const domain = { min: 0, max: 300 }
|
|
26
|
+
const w = await mockDcwDriver.write({ eng: 165, tolerance: 0.1, domain, driverConfig: { key: 't1' } })
|
|
27
|
+
check('mock 写入成功', w.ok)
|
|
28
|
+
const r = await mockDcwDriver.read!({ domain, driverConfig: { key: 't1' } })
|
|
29
|
+
check('mock 读回写值(读写闭环)', r.ok && r.eng === 165 && r.raw === 165, `eng=${r.eng}`)
|
|
30
|
+
const miss = await mockDcwDriver.read!({ domain, driverConfig: { key: 'never-written' } })
|
|
31
|
+
check('mock 未写地址读取明确失败', !miss.ok && miss.eng == null)
|
|
32
|
+
check('读能力判定:mock/modbus-tcp/modbus-rtu/opcua 可读,mqtt/http 不可读',
|
|
33
|
+
supportsDcwRead('mock') && supportsDcwRead('modbus-tcp') && supportsDcwRead('modbus-rtu') && supportsDcwRead('opcua')
|
|
34
|
+
&& !supportsDcwRead('mqtt') && !supportsDcwRead('http'))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ===== 2. 工程量↔原始值映射对称 =====
|
|
38
|
+
console.log('\n--- 工程量↔原始值映射 ---')
|
|
39
|
+
{
|
|
40
|
+
const { engToRaw, rawToEng } = await import('../server/services/workshop/dcw/drivers')
|
|
41
|
+
const input = { eng: 50, tolerance: 0, domain: { min: 0, max: 100 }, driverConfig: { rawMin: 0, rawMax: 16383, engMin: 0, engMax: 100 } }
|
|
42
|
+
const raw = engToRaw(50, input)
|
|
43
|
+
check('线性映射:eng 50 → raw 8191.5', Math.abs(raw - 8191.5) < 1e-9, String(raw))
|
|
44
|
+
check('映射对称:rawToEng(engToRaw(x)) = x', Math.abs(rawToEng(raw, input) - 50) < 1e-9)
|
|
45
|
+
const pass = { eng: 7, tolerance: 0, domain: { min: 0, max: 100 }, driverConfig: {} }
|
|
46
|
+
check('无原始量程:直传(float32 语义)', engToRaw(7, pass) === 7 && rawToEng(7, pass) === 7)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ===== 3. 节点读状态记账 =====
|
|
50
|
+
console.log('\n--- 节点读状态 ---')
|
|
51
|
+
{
|
|
52
|
+
const { DcwNode } = await import('../server/services/workshop/dcw/dcw-node')
|
|
53
|
+
const n = new DcwNode({ id: 'dw-t1', templateRef: 'dcw-temp-sp', readIntervalMs: 2000 })
|
|
54
|
+
const at = new Date().toISOString()
|
|
55
|
+
n.applyReadResult(168.456, 168.456, true, '读回', at)
|
|
56
|
+
check('成功读数回填(按 decimals 取整)', n.readValue === 168.5 && n.lastReadAt === at && n.lastReadError == null, `readValue=${n.readValue}`)
|
|
57
|
+
n.applyReadResult(null, null, false, '链路超时', new Date().toISOString())
|
|
58
|
+
check('失败读保留旧值并记原因', n.readValue === 168.5 && n.lastReadError === '链路超时')
|
|
59
|
+
n.applyReadResult(170, 170, true, '读回', new Date().toISOString())
|
|
60
|
+
check('恢复成功后清空错误', n.readValue === 170 && n.lastReadError == null)
|
|
61
|
+
const row = n.toRow()
|
|
62
|
+
const n2 = DcwNode.fromRow(row)
|
|
63
|
+
check('持久化 roundtrip(readIntervalMs/readValue/lastRead*)', n2.readIntervalMs === 2000 && n2.readValue === 170 && n2.lastReadError == null)
|
|
64
|
+
const v = n2.toView()
|
|
65
|
+
check('视图透出读字段', v.readValue === 170 && v.readIntervalMs === 2000 && 'lastReadError' in v)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ===== 4. 运行时周期读调度 =====
|
|
69
|
+
console.log('\n--- 运行时周期读调度 ---')
|
|
70
|
+
{
|
|
71
|
+
const { DcwNode } = await import('../server/services/workshop/dcw/dcw-node')
|
|
72
|
+
const rtMod = await import('../server/services/workshop/dcw/dcw-runtime')
|
|
73
|
+
const { DcwNodeRuntime } = rtMod
|
|
74
|
+
type DcwRuntimeHost = import('../server/services/workshop/dcw/dcw-runtime').DcwRuntimeHost
|
|
75
|
+
type DcwNodeT = import('../server/services/workshop/dcw/dcw-node').DcwNode
|
|
76
|
+
const reads: number[] = []
|
|
77
|
+
const atNow = () => new Date().toISOString()
|
|
78
|
+
// 记账语义与控制器一致:读成功回填节点 readValue
|
|
79
|
+
const makeHost = (defaults: { holdIntervalMs: number, readIntervalMs: number }): DcwRuntimeHost => ({
|
|
80
|
+
running: () => true,
|
|
81
|
+
defaults: () => defaults,
|
|
82
|
+
executeWrite: async () => ({ ok: true, message: '', raw: null, readback: null }),
|
|
83
|
+
executeRead: async (node: DcwNodeT) => {
|
|
84
|
+
reads.push(Date.now())
|
|
85
|
+
node.applyReadResult(1, 1, true, '读回', atNow())
|
|
86
|
+
return { ok: true, value: 1, raw: 1, message: '', at: atNow() }
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
const n = new DcwNode({ id: 'dw-t2', templateRef: 'dcw-temp-sp', readIntervalMs: 1000 })
|
|
90
|
+
const rt = new DcwNodeRuntime(n, makeHost({ holdIntervalMs: 0, readIntervalMs: 5000 }))
|
|
91
|
+
const t0 = 1_000_000
|
|
92
|
+
rt.tick(t0)
|
|
93
|
+
rt.tick(t0 + 500)
|
|
94
|
+
rt.tick(t0 + 1100)
|
|
95
|
+
check('周期读按 readIntervalMs 节拍触发(两次窗内各一次)', reads.length === 2, `reads=${reads.length}`)
|
|
96
|
+
check('写心跳不触发(value=null)', reads.length === 2)
|
|
97
|
+
n.readValue = 165
|
|
98
|
+
const manual = await rt.readNow()
|
|
99
|
+
check('手动读取(readNow)执行并记账', manual.ok && n.readValue === 1 && n.lastReadError == null, `readValue=${n.readValue}`)
|
|
100
|
+
const schedAfterManual = reads.length
|
|
101
|
+
const off = new DcwNode({ id: 'dw-t3', templateRef: 'dcw-temp-sp', readIntervalMs: 0 })
|
|
102
|
+
const rtOff = new DcwNodeRuntime(off, makeHost({ holdIntervalMs: 0, readIntervalMs: 5000 }))
|
|
103
|
+
rtOff.tick(t0)
|
|
104
|
+
rtOff.tick(t0 + 2000)
|
|
105
|
+
check('readIntervalMs=0 关闭周期读', reads.length === schedAfterManual)
|
|
106
|
+
// 在飞互斥:挂起中的读阻塞 readNow → 409
|
|
107
|
+
let release: (() => void) | null = null
|
|
108
|
+
const slowHost: DcwRuntimeHost = {
|
|
109
|
+
running: () => true,
|
|
110
|
+
defaults: () => ({ holdIntervalMs: 0, readIntervalMs: 5000 }),
|
|
111
|
+
executeWrite: async () => ({ ok: true, message: '', raw: null, readback: null }),
|
|
112
|
+
executeRead: async () => {
|
|
113
|
+
await new Promise<void>((r) => {
|
|
114
|
+
release = r
|
|
115
|
+
})
|
|
116
|
+
return { ok: true, value: 1, raw: null, message: '', at: atNow() }
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
const rtSlow = new DcwNodeRuntime(new DcwNode({ id: 'dw-t4', templateRef: 'dcw-temp-sp', readIntervalMs: null }), slowHost)
|
|
120
|
+
const inFlight = rtSlow.readNow()
|
|
121
|
+
let conflicted = false
|
|
122
|
+
await rtSlow.readNow().catch((e: unknown) => {
|
|
123
|
+
conflicted = (e as { status?: number }).status === 409
|
|
124
|
+
})
|
|
125
|
+
release!()
|
|
126
|
+
const done = await inFlight
|
|
127
|
+
check('读在飞互斥(并发 readNow → 409)', conflicted && done.ok)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ===== 5. Agent dcw_read 工具(鉴权 + 执行;隔离配置根) =====
|
|
131
|
+
console.log('\n--- Agent dcw_read 工具 ---')
|
|
132
|
+
{
|
|
133
|
+
const { toolDcwRead } = await import('../server/services/workshop/agents/industrial-tools')
|
|
134
|
+
const denied = await toolDcwRead('agent-x', { node_id: 'dw-none' })
|
|
135
|
+
check('未绑定 agent 读取被拒', denied.isError === true && /未绑定|无权/.test(denied.text))
|
|
136
|
+
const { getDcwController } = await import('../server/services/workshop/dcw/dcw-controller')
|
|
137
|
+
const { getAgentNodeBindingRepo } = await import('../server/services/workshop/agents/node-bindings.repo')
|
|
138
|
+
const node = getDcwController().create({ templateRef: 'dcw-temp-sp', driver: 'mock', driverConfig: { key: 'agent-t' }, readIntervalMs: 0, name: '读链路测试节点' })
|
|
139
|
+
const repo = getAgentNodeBindingRepo()
|
|
140
|
+
repo.bind('agent-a', node.id, 'dcw', 'auto')
|
|
141
|
+
const before = await toolDcwRead('agent-a', { node_id: node.id })
|
|
142
|
+
check('从未下发的节点:鉴权通过并如实报告读取失败(mock 无记录)', before.isError === true && /读取失败/.test(before.text) && !/无权|未绑定/.test(before.text), before.text.slice(0, 80))
|
|
143
|
+
await getDcwController().write(node.id, 172.5, null, { source: 'manual', actor: 'tester' })
|
|
144
|
+
const after = await toolDcwRead('agent-a', { node_id: node.id })
|
|
145
|
+
check('写入后读取:ACT 与 SET 一致', after.isError !== true && /172\.5/.test(after.text) && /一致/.test(after.text), after.text.replace(/\n/g, ' | ').slice(0, 140))
|
|
146
|
+
const other = await toolDcwRead('agent-b', { node_id: node.id })
|
|
147
|
+
check('其他 agent 越权读取被拒', other.isError === true)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// 收尾
|
|
151
|
+
rmSync(awHome, { recursive: true, force: true })
|
|
152
|
+
console.log(failures === 0 ? '\nDCW-READ ALL PASS' : `\nDCW-READ FAILED(${failures})`)
|
|
153
|
+
process.exit(failures === 0 ? 0 : 1)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /api/workshop/dcw/:id/read —— 手动读取 PLC 当前值(读写集成的读半边)。
|
|
3
|
+
* 驱动读(寄存器解码/节点值)→ 标定 decode → 节点读状态记账 + WS dcw.read 直推。
|
|
4
|
+
* 读取是被动观测:不受控制暂停/产线运行门控;不支持读的驱动返回 ok:false 说明。
|
|
5
|
+
*/
|
|
6
|
+
import { getRouterParam } from 'h3'
|
|
7
|
+
import { resolveUser } from '@/server/api/workshop/caller'
|
|
8
|
+
import { defineApiHandler } from '@/server/utils/response'
|
|
9
|
+
import { bindDcwBroadcast, getDcwController } from '@/server/services/workshop/dcw/dcw-controller'
|
|
10
|
+
import { broadcastSceneEvent } from '@/server/services/workshop/scene-events'
|
|
11
|
+
|
|
12
|
+
export default defineApiHandler(async (event) => {
|
|
13
|
+
resolveUser(event)
|
|
14
|
+
bindDcwBroadcast(broadcastSceneEvent)
|
|
15
|
+
const id = getRouterParam(event, 'id') ?? ''
|
|
16
|
+
const read = await getDcwController().readNow(id)
|
|
17
|
+
return { read }
|
|
18
|
+
})
|
|
@@ -26,6 +26,7 @@ import type { AepEnvelope } from '../../../shared/workshop-protocol'
|
|
|
26
26
|
import { parseJson } from '../../services/workshop/db/database'
|
|
27
27
|
import { registerScenePeer, unregisterScenePeer } from '../../services/workshop/scene-events'
|
|
28
28
|
import { createLogger } from '../../services/workshop/logger'
|
|
29
|
+
import { retentionSettings } from '../../services/workshop/settings'
|
|
29
30
|
|
|
30
31
|
const log = createLogger('workshop.ws')
|
|
31
32
|
|
|
@@ -35,8 +36,8 @@ const RING_CAP = 5000
|
|
|
35
36
|
const RING_BYTES_CAP = 4 * 1024 * 1024
|
|
36
37
|
/** 落库聚合缓冲上限(滞留超限即刷,防库故障时缓冲无限涨) */
|
|
37
38
|
const DB_BUFFER_CAP = 2000
|
|
38
|
-
/** 事件保留期(天;
|
|
39
|
-
const EVENTS_RETENTION_DAYS =
|
|
39
|
+
/** 事件保留期(天;retention.events_days,env AW_EVENTS_RETENTION_D 可覆盖) */
|
|
40
|
+
const EVENTS_RETENTION_DAYS = (): number => retentionSettings().events_days
|
|
40
41
|
/** 单 peer 发送预算(字节/秒):超限视为慢消费者断开(1013),客户端重连快照对齐 */
|
|
41
42
|
const PEER_SEND_BUDGET_BYTES = 32 * 1024 * 1024
|
|
42
43
|
|
|
@@ -449,8 +450,9 @@ if (!(hubGlobal as Record<string, unknown>)[RETENTION_TIMER_KEY]) {
|
|
|
449
450
|
const t = setInterval(() => {
|
|
450
451
|
if (!hub.boundManager) return
|
|
451
452
|
try {
|
|
452
|
-
const
|
|
453
|
-
|
|
453
|
+
const days = EVENTS_RETENTION_DAYS()
|
|
454
|
+
const removed = internalsOf(hub.boundManager).deps.repos.channelEvents.sweepRetention(days)
|
|
455
|
+
if (removed > 0) console.log(`[workshop-ws] 事件保留期清理 ${removed} 行(>${days}d)`)
|
|
454
456
|
}
|
|
455
457
|
catch (err) {
|
|
456
458
|
console.error('[workshop-ws] 事件保留期清理失败:', err)
|
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": 165.8,
|
|
68
68
|
"state": "ok",
|
|
69
|
-
"lastAt": "2026-09-
|
|
69
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
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": 315,
|
|
312
312
|
"state": "ok",
|
|
313
|
-
"lastAt": "2026-09-
|
|
313
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
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.2,
|
|
334
334
|
"state": "ok",
|
|
335
|
-
"lastAt": "2026-09-
|
|
335
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
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": 169.8,
|
|
1016
1016
|
"state": "ok",
|
|
1017
|
-
"lastAt": "2026-09-
|
|
1017
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
1018
1018
|
"createdAt": "2026-08-31T04:07:19.038Z"
|
|
1019
1019
|
},
|
|
1020
1020
|
{
|
|
@@ -3006,5 +3006,75 @@
|
|
|
3006
3006
|
"state": "ok",
|
|
3007
3007
|
"lastAt": "2026-09-02T15:29:49.039Z",
|
|
3008
3008
|
"createdAt": "2026-09-02T11:55:28.275Z"
|
|
3009
|
+
},
|
|
3010
|
+
{
|
|
3011
|
+
"id": "dn-2b91d255",
|
|
3012
|
+
"templateRef": "plug-verify-x2-profile",
|
|
3013
|
+
"name": "全栈验证 ×2 轮廓",
|
|
3014
|
+
"driver": "mock",
|
|
3015
|
+
"enabled": true,
|
|
3016
|
+
"intervalMs": null,
|
|
3017
|
+
"publishIntervalMs": null,
|
|
3018
|
+
"unit": "mm",
|
|
3019
|
+
"decimals": 4,
|
|
3020
|
+
"min": 0.4,
|
|
3021
|
+
"max": 0.6,
|
|
3022
|
+
"warnLow": 0.416,
|
|
3023
|
+
"warnHigh": 0.584,
|
|
3024
|
+
"deviceBindingId": "dev-mthzr991-ujuad",
|
|
3025
|
+
"driverConfig": {},
|
|
3026
|
+
"posX": 120,
|
|
3027
|
+
"posZ": 120,
|
|
3028
|
+
"lineId": "ln-af002514",
|
|
3029
|
+
"value": 1.0275,
|
|
3030
|
+
"state": "ok",
|
|
3031
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
3032
|
+
"createdAt": "2026-09-03T10:17:59.182Z"
|
|
3033
|
+
},
|
|
3034
|
+
{
|
|
3035
|
+
"id": "dn-77ea5d9d",
|
|
3036
|
+
"templateRef": "plug-verify-x2-profile",
|
|
3037
|
+
"name": "全栈验证 ×2 轮廓",
|
|
3038
|
+
"driver": "verify-burst",
|
|
3039
|
+
"enabled": true,
|
|
3040
|
+
"intervalMs": null,
|
|
3041
|
+
"publishIntervalMs": null,
|
|
3042
|
+
"unit": "mm",
|
|
3043
|
+
"decimals": 4,
|
|
3044
|
+
"min": 0.4,
|
|
3045
|
+
"max": 0.6,
|
|
3046
|
+
"warnLow": 0.416,
|
|
3047
|
+
"warnHigh": 0.584,
|
|
3048
|
+
"deviceBindingId": "dev-mthzr991-ujuad",
|
|
3049
|
+
"driverConfig": {},
|
|
3050
|
+
"posX": 120,
|
|
3051
|
+
"posZ": 120,
|
|
3052
|
+
"lineId": "ln-af002514",
|
|
3053
|
+
"value": 0.9769,
|
|
3054
|
+
"state": "ok",
|
|
3055
|
+
"lastAt": "2026-09-03T11:35:11.135Z",
|
|
3056
|
+
"createdAt": "2026-09-03T11:18:01.401Z"
|
|
3057
|
+
},
|
|
3058
|
+
{
|
|
3059
|
+
"id": "dn-6e3a9306",
|
|
3060
|
+
"templateRef": "daq-plug-verify-x2-profile",
|
|
3061
|
+
"name": "UI向导插件验证",
|
|
3062
|
+
"driver": "mock",
|
|
3063
|
+
"enabled": true,
|
|
3064
|
+
"intervalMs": null,
|
|
3065
|
+
"publishIntervalMs": null,
|
|
3066
|
+
"unit": "mm",
|
|
3067
|
+
"decimals": 4,
|
|
3068
|
+
"min": 0.4,
|
|
3069
|
+
"max": 0.6,
|
|
3070
|
+
"warnLow": 0.416,
|
|
3071
|
+
"warnHigh": 0.584,
|
|
3072
|
+
"deviceBindingId": "dev-mthzr991-ujuad",
|
|
3073
|
+
"driverConfig": {},
|
|
3074
|
+
"lineId": "ln-af002514",
|
|
3075
|
+
"value": 1.0251,
|
|
3076
|
+
"state": "ok",
|
|
3077
|
+
"lastAt": "2026-09-03T11:35:10.871Z",
|
|
3078
|
+
"createdAt": "2026-09-03T11:34:59.332Z"
|
|
3009
3079
|
}
|
|
3010
3080
|
]
|
|
@@ -3128,6 +3128,226 @@
|
|
|
3128
3128
|
"id": "anc-cf431b05",
|
|
3129
3129
|
"at": "2026-09-02T13:05:36.877Z",
|
|
3130
3130
|
"recordId": "opt-b930283b"
|
|
3131
|
+
},
|
|
3132
|
+
{
|
|
3133
|
+
"lineId": "",
|
|
3134
|
+
"nodeId": "dw-6df62f07",
|
|
3135
|
+
"prevValue": null,
|
|
3136
|
+
"newValue": 165.5,
|
|
3137
|
+
"source": "manual",
|
|
3138
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3139
|
+
"recipeRunId": null,
|
|
3140
|
+
"id": "anc-6b5c70d1",
|
|
3141
|
+
"at": "2026-09-03T12:07:07.574Z"
|
|
3142
|
+
},
|
|
3143
|
+
{
|
|
3144
|
+
"lineId": "",
|
|
3145
|
+
"nodeId": "dw-6df62f07",
|
|
3146
|
+
"prevValue": 165.5,
|
|
3147
|
+
"newValue": 180,
|
|
3148
|
+
"source": "manual",
|
|
3149
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3150
|
+
"recipeRunId": null,
|
|
3151
|
+
"id": "anc-73e44854",
|
|
3152
|
+
"at": "2026-09-03T12:07:07.741Z"
|
|
3153
|
+
},
|
|
3154
|
+
{
|
|
3155
|
+
"lineId": "",
|
|
3156
|
+
"nodeId": "dw-82ebb64a",
|
|
3157
|
+
"prevValue": null,
|
|
3158
|
+
"newValue": 165.5,
|
|
3159
|
+
"source": "manual",
|
|
3160
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3161
|
+
"recipeRunId": null,
|
|
3162
|
+
"id": "anc-76009f69",
|
|
3163
|
+
"at": "2026-09-03T12:08:19.829Z"
|
|
3164
|
+
},
|
|
3165
|
+
{
|
|
3166
|
+
"lineId": "",
|
|
3167
|
+
"nodeId": "dw-82ebb64a",
|
|
3168
|
+
"prevValue": 165.5,
|
|
3169
|
+
"newValue": 180,
|
|
3170
|
+
"source": "manual",
|
|
3171
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3172
|
+
"recipeRunId": null,
|
|
3173
|
+
"id": "anc-d0e6bebd",
|
|
3174
|
+
"at": "2026-09-03T12:08:19.938Z"
|
|
3175
|
+
},
|
|
3176
|
+
{
|
|
3177
|
+
"lineId": "",
|
|
3178
|
+
"nodeId": "dw-f6aeca63",
|
|
3179
|
+
"prevValue": null,
|
|
3180
|
+
"newValue": 100,
|
|
3181
|
+
"source": "manual",
|
|
3182
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3183
|
+
"recipeRunId": null,
|
|
3184
|
+
"id": "anc-5f6989b0",
|
|
3185
|
+
"at": "2026-09-03T12:08:20.140Z"
|
|
3186
|
+
},
|
|
3187
|
+
{
|
|
3188
|
+
"lineId": "",
|
|
3189
|
+
"nodeId": "dw-787402f0",
|
|
3190
|
+
"prevValue": null,
|
|
3191
|
+
"newValue": 155,
|
|
3192
|
+
"source": "manual",
|
|
3193
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3194
|
+
"recipeRunId": null,
|
|
3195
|
+
"id": "anc-2e00ea3c",
|
|
3196
|
+
"at": "2026-09-03T12:08:20.310Z"
|
|
3197
|
+
},
|
|
3198
|
+
{
|
|
3199
|
+
"lineId": "",
|
|
3200
|
+
"nodeId": "dw-fe8cdcbb",
|
|
3201
|
+
"prevValue": null,
|
|
3202
|
+
"newValue": 3.1416,
|
|
3203
|
+
"source": "manual",
|
|
3204
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3205
|
+
"recipeRunId": null,
|
|
3206
|
+
"id": "anc-6486b0bc",
|
|
3207
|
+
"at": "2026-09-03T12:08:23.109Z"
|
|
3208
|
+
},
|
|
3209
|
+
{
|
|
3210
|
+
"lineId": "",
|
|
3211
|
+
"nodeId": "dw-fe8cdcbb",
|
|
3212
|
+
"prevValue": 3.1,
|
|
3213
|
+
"newValue": 2.71828,
|
|
3214
|
+
"source": "manual",
|
|
3215
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3216
|
+
"recipeRunId": null,
|
|
3217
|
+
"id": "anc-7740538b",
|
|
3218
|
+
"at": "2026-09-03T12:08:23.187Z"
|
|
3219
|
+
},
|
|
3220
|
+
{
|
|
3221
|
+
"lineId": "",
|
|
3222
|
+
"nodeId": "dw-47b4957b",
|
|
3223
|
+
"prevValue": null,
|
|
3224
|
+
"newValue": 165.5,
|
|
3225
|
+
"source": "manual",
|
|
3226
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3227
|
+
"recipeRunId": null,
|
|
3228
|
+
"id": "anc-9a3435d8",
|
|
3229
|
+
"at": "2026-09-03T12:09:40.660Z"
|
|
3230
|
+
},
|
|
3231
|
+
{
|
|
3232
|
+
"lineId": "",
|
|
3233
|
+
"nodeId": "dw-47b4957b",
|
|
3234
|
+
"prevValue": 165.5,
|
|
3235
|
+
"newValue": 180,
|
|
3236
|
+
"source": "manual",
|
|
3237
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3238
|
+
"recipeRunId": null,
|
|
3239
|
+
"id": "anc-ee35f163",
|
|
3240
|
+
"at": "2026-09-03T12:09:40.769Z"
|
|
3241
|
+
},
|
|
3242
|
+
{
|
|
3243
|
+
"lineId": "",
|
|
3244
|
+
"nodeId": "dw-828f683b",
|
|
3245
|
+
"prevValue": null,
|
|
3246
|
+
"newValue": 100,
|
|
3247
|
+
"source": "manual",
|
|
3248
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3249
|
+
"recipeRunId": null,
|
|
3250
|
+
"id": "anc-bdbcc26c",
|
|
3251
|
+
"at": "2026-09-03T12:09:40.925Z"
|
|
3252
|
+
},
|
|
3253
|
+
{
|
|
3254
|
+
"lineId": "",
|
|
3255
|
+
"nodeId": "dw-e9b4575e",
|
|
3256
|
+
"prevValue": null,
|
|
3257
|
+
"newValue": 155,
|
|
3258
|
+
"source": "manual",
|
|
3259
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3260
|
+
"recipeRunId": null,
|
|
3261
|
+
"id": "anc-477efae1",
|
|
3262
|
+
"at": "2026-09-03T12:09:41.049Z"
|
|
3263
|
+
},
|
|
3264
|
+
{
|
|
3265
|
+
"lineId": "",
|
|
3266
|
+
"nodeId": "dw-167e357a",
|
|
3267
|
+
"prevValue": null,
|
|
3268
|
+
"newValue": 3.1416,
|
|
3269
|
+
"source": "manual",
|
|
3270
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3271
|
+
"recipeRunId": null,
|
|
3272
|
+
"id": "anc-955dbbf6",
|
|
3273
|
+
"at": "2026-09-03T12:09:43.846Z"
|
|
3274
|
+
},
|
|
3275
|
+
{
|
|
3276
|
+
"lineId": "",
|
|
3277
|
+
"nodeId": "dw-167e357a",
|
|
3278
|
+
"prevValue": 3.1,
|
|
3279
|
+
"newValue": 2.71828,
|
|
3280
|
+
"source": "manual",
|
|
3281
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3282
|
+
"recipeRunId": null,
|
|
3283
|
+
"id": "anc-d9cc48ff",
|
|
3284
|
+
"at": "2026-09-03T12:09:43.908Z"
|
|
3285
|
+
},
|
|
3286
|
+
{
|
|
3287
|
+
"lineId": "",
|
|
3288
|
+
"nodeId": "dw-a970a489",
|
|
3289
|
+
"prevValue": null,
|
|
3290
|
+
"newValue": 165.5,
|
|
3291
|
+
"source": "manual",
|
|
3292
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3293
|
+
"recipeRunId": null,
|
|
3294
|
+
"id": "anc-ab0b08e6",
|
|
3295
|
+
"at": "2026-09-03T13:34:21.879Z"
|
|
3296
|
+
},
|
|
3297
|
+
{
|
|
3298
|
+
"lineId": "",
|
|
3299
|
+
"nodeId": "dw-a970a489",
|
|
3300
|
+
"prevValue": 165.5,
|
|
3301
|
+
"newValue": 180,
|
|
3302
|
+
"source": "manual",
|
|
3303
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3304
|
+
"recipeRunId": null,
|
|
3305
|
+
"id": "anc-cafcbb0a",
|
|
3306
|
+
"at": "2026-09-03T13:34:22.017Z"
|
|
3307
|
+
},
|
|
3308
|
+
{
|
|
3309
|
+
"lineId": "",
|
|
3310
|
+
"nodeId": "dw-365a3630",
|
|
3311
|
+
"prevValue": null,
|
|
3312
|
+
"newValue": 100,
|
|
3313
|
+
"source": "manual",
|
|
3314
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3315
|
+
"recipeRunId": null,
|
|
3316
|
+
"id": "anc-626b5b33",
|
|
3317
|
+
"at": "2026-09-03T13:34:22.200Z"
|
|
3318
|
+
},
|
|
3319
|
+
{
|
|
3320
|
+
"lineId": "",
|
|
3321
|
+
"nodeId": "dw-2259a4eb",
|
|
3322
|
+
"prevValue": null,
|
|
3323
|
+
"newValue": 155,
|
|
3324
|
+
"source": "manual",
|
|
3325
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3326
|
+
"recipeRunId": null,
|
|
3327
|
+
"id": "anc-62934ab1",
|
|
3328
|
+
"at": "2026-09-03T13:34:22.344Z"
|
|
3329
|
+
},
|
|
3330
|
+
{
|
|
3331
|
+
"lineId": "",
|
|
3332
|
+
"nodeId": "dw-7eec4a83",
|
|
3333
|
+
"prevValue": null,
|
|
3334
|
+
"newValue": 3.1416,
|
|
3335
|
+
"source": "manual",
|
|
3336
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3337
|
+
"recipeRunId": null,
|
|
3338
|
+
"id": "anc-12d60ab2",
|
|
3339
|
+
"at": "2026-09-03T13:34:25.133Z"
|
|
3340
|
+
},
|
|
3341
|
+
{
|
|
3342
|
+
"lineId": "",
|
|
3343
|
+
"nodeId": "dw-7eec4a83",
|
|
3344
|
+
"prevValue": 3.1,
|
|
3345
|
+
"newValue": 2.71828,
|
|
3346
|
+
"source": "manual",
|
|
3347
|
+
"actor": "f1235a1f-57ca-43b7-afbe-7fc0874341d0",
|
|
3348
|
+
"recipeRunId": null,
|
|
3349
|
+
"id": "anc-5ac6a74f",
|
|
3350
|
+
"at": "2026-09-03T13:34:25.211Z"
|
|
3131
3351
|
}
|
|
3132
3352
|
],
|
|
3133
3353
|
"records": [
|
|
@@ -3519,7 +3739,7 @@
|
|
|
3519
3739
|
"channels": [],
|
|
3520
3740
|
"degraded": true
|
|
3521
3741
|
},
|
|
3522
|
-
"evaluatedAt": "2026-09-
|
|
3742
|
+
"evaluatedAt": "2026-09-03T13:40:24.088Z",
|
|
3523
3743
|
"windowAgg": {
|
|
3524
3744
|
"at": "2026-08-31T16:25:17.398Z",
|
|
3525
3745
|
"fromMs": 1788193396897,
|