agentworkshop 0.5.8 → 0.6.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/compaction-hints.md +9 -9
- package/.AgentWorkShop/prompts/host-tools.json +42 -0
- package/.output/.AgentWorkShop/prompts/compaction-hints.md +9 -9
- package/.output/.AgentWorkShop/prompts/host-tools.json +42 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{Dm5mD6XT.js → BD9D9pl4.js} +1 -1
- package/.output/public/_nuxt/{BdKzfJiM.js → BxD8Fg_Z.js} +1 -1
- package/.output/public/_nuxt/{dRAyjbJ6.js → C-Y5ydB6.js} +3 -3
- package/.output/public/_nuxt/{Bok1DRqh.js → C0FogB-p.js} +1 -1
- package/.output/public/_nuxt/{BUNGEK2z.js → C2QSTAWf.js} +1 -1
- package/.output/public/_nuxt/{CWDzKGtj.js → CclO6GyL.js} +1 -1
- package/.output/public/_nuxt/{B3__nfxM.js → Ck6tznoQ.js} +1 -1
- package/.output/public/_nuxt/CwS_UHeH.js +1 -0
- package/.output/public/_nuxt/{CE2ynNi9.js → CwcOEM8m.js} +1 -1
- package/.output/public/_nuxt/MhK4buEJ.js +1 -0
- package/.output/public/_nuxt/_id_.DN3U6EF9.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/a0ac51ef-51c0-4ff9-8484-7c90d8dd10ba.json +1 -0
- package/.output/public/_nuxt/{entry.DjhxLu-f.css → entry.DvlXlPwx.css} +1 -1
- package/.output/public/_nuxt/settings.BG0K9_MG.css +1 -0
- package/.output/server/chunks/_/error-500.mjs.map +1 -1
- package/.output/server/chunks/_/nitro.mjs +2634 -1387
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{OmpTerminalPanel-CZnxR3M_.mjs → OmpTerminalPanel-B_SYhmgb.mjs} +2 -2
- package/.output/server/chunks/build/{OmpTerminalPanel-CZnxR3M_.mjs.map → OmpTerminalPanel-B_SYhmgb.mjs.map} +1 -1
- package/.output/server/chunks/build/{TownView-DYlUNRZe.mjs → TownView-D9yCQe1T.mjs} +6 -6
- package/.output/server/chunks/build/{TownView-DYlUNRZe.mjs.map → TownView-D9yCQe1T.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-BOhG2yz8.mjs → _id_-CmKAEFHV.mjs} +4 -2
- package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CuyMYmhY.mjs → _id_-xR3AChMO.mjs} +74 -26
- package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-B5f5BdW2.mjs → _wsId_-C45nVrl-.mjs} +12 -10
- package/.output/server/chunks/build/{_wsId_-B5f5BdW2.mjs.map → _wsId_-C45nVrl-.mjs.map} +1 -1
- package/.output/server/chunks/build/{agents-BVaxN75W.mjs → agents-D4l1icvn.mjs} +5 -3
- package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -0
- package/.output/server/chunks/build/{channel-templates-D1K2IKrE.mjs → channel-templates-DqjtC-R0.mjs} +5 -3
- package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -0
- package/.output/server/chunks/build/{client-only-CFTHwakk.mjs → client-only-D5BzSQc6.mjs} +2 -2
- package/.output/server/chunks/build/client-only-D5BzSQc6.mjs.map +1 -0
- package/.output/server/chunks/build/{daq-ObtN1TQ4.mjs → daq-Boz_dlAQ.mjs} +6 -4
- package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-fINr-He1.mjs → dcw-wTRwBAUi.mjs} +3 -1
- package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +1 -0
- package/.output/server/chunks/build/{default-CVVO40Jj.mjs → default-Dt6xLdpd.mjs} +7 -5
- package/.output/server/chunks/build/{default-CVVO40Jj.mjs.map → default-Dt6xLdpd.mjs.map} +1 -1
- package/.output/server/chunks/build/interval-WlxgjTzO.mjs +9 -0
- package/.output/server/chunks/build/interval-WlxgjTzO.mjs.map +1 -0
- package/.output/server/chunks/build/{logs-DqNgCJAn.mjs → logs-Cdi-eXlN.mjs} +5 -3
- package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +1 -0
- package/.output/server/chunks/build/{monitor-CTZLwbdw.mjs → monitor-yNoV98rf.mjs} +6 -4
- package/.output/server/chunks/build/{monitor-CTZLwbdw.mjs.map → monitor-yNoV98rf.mjs.map} +1 -1
- package/.output/server/chunks/build/{pages-DC52d7z7.mjs → pages-bWKy0ZsA.mjs} +6 -4
- package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +1 -0
- package/.output/server/chunks/build/{plugins-DVQty7qG.mjs → plugins-B-ZNey0Z.mjs} +4 -2
- package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-BeergncK.mjs → settings-C3T5hR2A.mjs} +21 -19
- package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +1 -0
- package/.output/server/chunks/build/{teams-CFeDlHDh.mjs → teams-QR3BBF7A.mjs} +5 -3
- package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -0
- package/.output/server/chunks/build/{tokens-CBAUbOce.mjs → tokens-DFvr_TLj.mjs} +4 -2
- package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs +2 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
- package/.output/server/chunks/build/{town-BxH-XXth.mjs → town-CKg6Qxba.mjs} +9 -7
- package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +1 -0
- package/.output/server/chunks/build/{useDaqStream-CwORhsD7.mjs → useDaqStream-zHEptJQ_.mjs} +44 -1
- package/.output/server/chunks/build/useDaqStream-zHEptJQ_.mjs.map +1 -0
- package/.output/server/chunks/build/{useSiteConfig-Cc-ABesl.mjs → useSiteConfig-DJe_KMVr.mjs} +1 -1
- package/.output/server/chunks/build/{useSiteConfig-Cc-ABesl.mjs.map → useSiteConfig-DJe_KMVr.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkshopApi-5er8_EHZ.mjs → useWorkshopApi-Bh5VUHWu.mjs} +1 -1
- package/.output/server/chunks/build/{useWorkshopApi-5er8_EHZ.mjs.map → useWorkshopApi-Bh5VUHWu.mjs.map} +1 -1
- package/.output/server/chunks/build/{useWorkshopWs-Dwr_1Q8f.mjs → useWorkshopWs-xcdeiSmJ.mjs} +2 -2
- package/.output/server/chunks/build/{useWorkshopWs-Dwr_1Q8f.mjs.map → useWorkshopWs-xcdeiSmJ.mjs.map} +1 -1
- package/.output/server/chunks/build/{user-CpVY4OAA.mjs → user-Dk-ytEUV.mjs} +1 -1
- package/.output/server/chunks/build/{user-CpVY4OAA.mjs.map → user-Dk-ytEUV.mjs.map} +1 -1
- package/.output/server/chunks/build/{users-BMs4s_6K.mjs → users-4FZ0yFUO.mjs} +4 -2
- package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -0
- package/.output/server/chunks/build/{workshop-CJAyZ5zS.mjs → workshop-CLhwe5eo.mjs} +6 -4
- package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -0
- package/.output/server/chunks/build/{workspaces-Dq-1zvu9.mjs → workspaces-IfORCDJE.mjs} +2 -2
- package/.output/server/chunks/build/{workspaces-Dq-1zvu9.mjs.map → workspaces-IfORCDJE.mjs.map} +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +2 -0
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +2 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +2 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +2 -0
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +2 -0
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +2 -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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +2 -0
- package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +2 -0
- package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +2 -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 +2 -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 +2 -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 +2 -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 +3 -2
- 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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +2 -0
- package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +2 -0
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +2 -0
- package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +2 -0
- package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +2 -0
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +2 -0
- package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +2 -0
- package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +2 -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 +2 -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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +2 -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 +2 -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 +36 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +53 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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/test.post.mjs +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -0
- package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +2 -0
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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/routes/renderer.mjs.map +1 -1
- package/.output/server/chunks/virtual/entry.mjs +166 -114
- package/.output/server/chunks/virtual/entry.mjs.map +1 -1
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +2 -0
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/app/composables/workshop/useDaqStream.ts +59 -1
- package/app/config/schema.ts +8 -0
- package/app/pages/daq/[id].vue +141 -1
- package/app/pages/settings.vue +10 -5
- package/app/plugins/runtime-config.client.ts +65 -65
- package/app/stores/runtime-config.ts +212 -212
- package/config.yml +77 -70
- package/docker-compose.yml +19 -2
- package/docs/plugins.md +271 -197
- package/i18n/dicts/_en.json +7 -2
- package/i18n/dicts/daqDetail.json +8 -2
- package/i18n/locales/en.ts +55 -29
- package/i18n/locales/zh-CN.ts +55 -29
- package/nuxt.config.ts +1 -1
- package/package.json +144 -143
- package/scripts/_dbg-collab-scenario-e2e.mjs +185 -0
- package/scripts/_dbg-daq-frame-alarm.mjs +49 -0
- package/scripts/_dbg-daq-frame-ui.mjs +62 -0
- package/scripts/_dbg-daq-frame-ws.mjs +72 -0
- package/scripts/_dbg-daq-frames-e2e.mjs +118 -0
- package/scripts/_dbg-host.mjs +16 -0
- package/scripts/_dbg-plugin-agent-read.ts +56 -0
- package/scripts/_dbg-plugin-sink-rest.mjs +70 -0
- package/scripts/_dbg-plugin-sink-ui.mjs +81 -0
- package/scripts/_dbg-prompts-hotreload-test.ts +76 -0
- package/scripts/_dbg-release-smoke.mjs +104 -0
- package/scripts/home-bootstrap.mjs +18 -0
- package/scripts/i18n-merge.mjs +69 -67
- package/scripts/test-context-governor.ts +176 -176
- package/scripts/test-daq-frames.ts +180 -0
- package/scripts/test-daq-minio.ts +77 -0
- package/scripts/test-memory-rrf-mmr.ts +114 -114
- package/scripts/test-plugin-ext.ts +173 -0
- package/server/api/system/settings/events.get.ts +27 -28
- package/server/api/system/settings/index.get.ts +14 -14
- package/server/api/system/settings/index.patch.ts +22 -22
- package/server/api/system/settings/reset.post.ts +12 -12
- package/server/api/workshop/daq/[id]/frames/content.get.ts +24 -0
- package/server/api/workshop/daq/[id]/frames.get.ts +44 -0
- package/server/data/daqs.json +89 -89
- package/server/data/dcw-rollback.json +1 -1
- package/server/data/dcw-runs.json +3136 -2492
- package/server/data/dcw-writes.json +672 -0
- package/server/data/dcws.json +4 -4
- package/server/data/line-runs.json +1 -232
- package/server/plugins/daq.ts +11 -0
- package/server/plugins/system-config.ts +38 -38
- package/server/services/system-config.ts +365 -356
- package/server/services/workshop/agents/industrial-tools.ts +91 -25
- package/server/services/workshop/agents/omp-agent.ts +1955 -1895
- package/server/services/workshop/agents/plugin-tools.ts +145 -0
- package/server/services/workshop/daq/bus/queue-port.ts +18 -0
- package/server/services/workshop/daq/daq-controller.ts +216 -14
- package/server/services/workshop/daq/daq-node.ts +257 -247
- package/server/services/workshop/daq/daq-runtime.ts +36 -4
- package/server/services/workshop/daq/daq-templates.ts +213 -157
- package/server/services/workshop/daq/drivers.ts +134 -30
- package/server/services/workshop/daq/frames.ts +227 -0
- package/server/services/workshop/daq/infra.ts +31 -17
- package/server/services/workshop/daq/objectstore/disk.adapter.ts +38 -0
- package/server/services/workshop/daq/objectstore/index.ts +88 -0
- package/server/services/workshop/daq/objectstore/minio.adapter.ts +60 -0
- package/server/services/workshop/daq/objectstore/objectstore-port.ts +27 -0
- package/server/services/workshop/daq/plugin-bridge.ts +73 -0
- package/server/services/workshop/daq/png-enc.ts +71 -0
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +104 -1
- package/server/services/workshop/daq/storage/timescale.adapter.ts +95 -4
- package/server/services/workshop/daq/storage/tsdb-port.ts +46 -0
- package/server/services/workshop/plugins/host.mjs +479 -417
- package/server/services/workshop/runtime/agent-runtime.ts +744 -744
- package/shared/config/schema.json +6 -1
- package/shared/daq-protocol.ts +88 -0
- package/.output/public/_nuxt/B-PgoIPN.js +0 -1
- package/.output/public/_nuxt/DVNYfGsj.js +0 -1
- package/.output/public/_nuxt/_id_.CbiF5PrV.css +0 -1
- package/.output/public/_nuxt/builds/meta/998b4cce-8563-44e5-b0ef-ff3d71a8480f.json +0 -1
- package/.output/public/_nuxt/settings.BANibAnV.css +0 -1
- package/.output/server/chunks/build/_id_-BOhG2yz8.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CuyMYmhY.mjs.map +0 -1
- package/.output/server/chunks/build/agents-BVaxN75W.mjs.map +0 -1
- package/.output/server/chunks/build/channel-templates-D1K2IKrE.mjs.map +0 -1
- package/.output/server/chunks/build/client-only-CFTHwakk.mjs.map +0 -1
- package/.output/server/chunks/build/daq-ObtN1TQ4.mjs.map +0 -1
- package/.output/server/chunks/build/dcw-fINr-He1.mjs.map +0 -1
- package/.output/server/chunks/build/interval-Bt11uRPw.mjs +0 -9
- package/.output/server/chunks/build/interval-Bt11uRPw.mjs.map +0 -1
- package/.output/server/chunks/build/logs-DqNgCJAn.mjs.map +0 -1
- package/.output/server/chunks/build/pages-DC52d7z7.mjs.map +0 -1
- package/.output/server/chunks/build/plugins-DVQty7qG.mjs.map +0 -1
- package/.output/server/chunks/build/settings-BeergncK.mjs.map +0 -1
- package/.output/server/chunks/build/teams-CFeDlHDh.mjs.map +0 -1
- package/.output/server/chunks/build/tokens-CBAUbOce.mjs.map +0 -1
- package/.output/server/chunks/build/town-BxH-XXth.mjs.map +0 -1
- package/.output/server/chunks/build/useDaqStream-CwORhsD7.mjs.map +0 -1
- package/.output/server/chunks/build/users-BMs4s_6K.mjs.map +0 -1
- package/.output/server/chunks/build/workshop-CJAyZ5zS.mjs.map +0 -1
package/.output/server/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../node_modules/.pnpm/nitropack@2.13.4_oxc-
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_1ea3e01e591cb0fd9b154d63486cc9e1/node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5]}
|
|
@@ -10,10 +10,23 @@ import { reactive } from 'vue'
|
|
|
10
10
|
import { useTownBus } from './useTownBus'
|
|
11
11
|
import { apiFetch } from './apiClient'
|
|
12
12
|
import type { AepEnvelope } from '#shared/workshop-protocol'
|
|
13
|
-
import { DAQ_TEMPLATES, type AepDaqControllerState, type AepDaqReading, type AepDaqNodeChange, type AepDaqTemplateChange, type DaqNodeView, type DaqTemplateDef, type DaqTemplateInput } from '#shared/daq-protocol'
|
|
13
|
+
import { DAQ_TEMPLATES, type AepDaqControllerState, type AepDaqFrame, type AepDaqReading, type AepDaqNodeChange, type AepDaqTemplateChange, type DaqNodeView, type DaqTemplateDef, type DaqTemplateInput } from '#shared/daq-protocol'
|
|
14
14
|
|
|
15
15
|
/** 历史缓冲长度(1s 默认周期 ≈ 最近 5 分钟趋势) */
|
|
16
16
|
const HIST_CAP = 60
|
|
17
|
+
/** 每节点帧缓冲上限(图像/向量元数据;画廊分页走 REST) */
|
|
18
|
+
const FRAMES_CAP = 30
|
|
19
|
+
|
|
20
|
+
/** 帧展示态(WS daq.frame / REST frames 同构) */
|
|
21
|
+
export interface DaqFrameLive {
|
|
22
|
+
at: number
|
|
23
|
+
kind: 'vector' | 'image'
|
|
24
|
+
points?: number[]
|
|
25
|
+
metrics: Record<string, number>
|
|
26
|
+
/** 图像内容 URL(同源 cookie 鉴权,<img> 直用) */
|
|
27
|
+
thumbUrl?: string
|
|
28
|
+
contentUrl?: string
|
|
29
|
+
}
|
|
17
30
|
|
|
18
31
|
/** 展示态:本地追加"实时性"字段(view 同构 + 趋势缓冲) */
|
|
19
32
|
export interface DaqNodeLive extends DaqNodeView {
|
|
@@ -93,6 +106,8 @@ const createStore = () => {
|
|
|
93
106
|
})
|
|
94
107
|
// 模板目录:内置 6 种先行(SEO 首帧即有),REST 快照与 WS 帧收敛为 server 权威
|
|
95
108
|
const templates = reactive<DaqTemplateDef[]>(DAQ_TEMPLATES.map(t => ({ ...t })))
|
|
109
|
+
// 帧缓冲(v2 多形态信号:nodeId → 最近 FRAMES_CAP 帧,新帧头插)
|
|
110
|
+
const frames = reactive<Record<string, DaqFrameLive[]>>({})
|
|
96
111
|
|
|
97
112
|
function upsert(node: DaqNodeView): void {
|
|
98
113
|
const i = nodes.findIndex(x => x.id === node.id)
|
|
@@ -164,6 +179,31 @@ const createStore = () => {
|
|
|
164
179
|
else templates.push({ ...p.template })
|
|
165
180
|
}
|
|
166
181
|
|
|
182
|
+
/** 帧入账(v2:新帧头插,容量裁剪;图像只存引用 URL,像素按需经 URL 加载)。
|
|
183
|
+
* 同时驱动节点 value/state/lastAt(向量=avg 展示值)——帧节点的实时链路与
|
|
184
|
+
* 标量 daq.reading 同源,列表页/数字孪生面板因此零轮询可见。 */
|
|
185
|
+
function applyFrame(p: AepDaqFrame): void {
|
|
186
|
+
const at = Date.parse(p.at)
|
|
187
|
+
const list = frames[p.nodeId] ?? (frames[p.nodeId] = [])
|
|
188
|
+
if (!list.some(f => f.at === at)) {
|
|
189
|
+
list.unshift({
|
|
190
|
+
at,
|
|
191
|
+
kind: p.kind,
|
|
192
|
+
points: p.preview,
|
|
193
|
+
metrics: p.metrics ?? {},
|
|
194
|
+
thumbUrl: p.thumbUrl,
|
|
195
|
+
contentUrl: p.thumbUrl ? p.thumbUrl.replace('thumb=1', 'thumb=0') : undefined,
|
|
196
|
+
})
|
|
197
|
+
if (list.length > FRAMES_CAP) list.splice(FRAMES_CAP)
|
|
198
|
+
}
|
|
199
|
+
const n = nodes.find(x => x.id === p.nodeId)
|
|
200
|
+
if (n) {
|
|
201
|
+
n.value = p.metrics?.avg ?? n.value
|
|
202
|
+
if (p.state) n.state = p.state
|
|
203
|
+
n.lastAt = p.at
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
167
207
|
/** 挂 WS 帧(townBus);幂等(globalThis 防重复订阅)。返回退订函数。 */
|
|
168
208
|
function ensureWsFeed(): () => void {
|
|
169
209
|
const g = globalThis as typeof globalThis & { __daqBusFed?: boolean }
|
|
@@ -171,6 +211,7 @@ const createStore = () => {
|
|
|
171
211
|
g.__daqBusFed = true
|
|
172
212
|
return useTownBus().subscribe((e: AepEnvelope) => {
|
|
173
213
|
if (e.type === 'daq.reading') applyReading(e.payload as AepDaqReading)
|
|
214
|
+
else if (e.type === 'daq.frame') applyFrame(e.payload as unknown as AepDaqFrame)
|
|
174
215
|
else if (e.type === 'daq.node.changed') applyChange(e.payload as AepDaqNodeChange)
|
|
175
216
|
else if (e.type === 'daq.controller') Object.assign(controller, e.payload as AepDaqControllerState)
|
|
176
217
|
else if (e.type === 'daq.template.changed') applyTemplateChange(e.payload as AepDaqTemplateChange)
|
|
@@ -310,6 +351,18 @@ const createStore = () => {
|
|
|
310
351
|
return data.points ?? []
|
|
311
352
|
}
|
|
312
353
|
|
|
354
|
+
/** 帧历史(REST 分页;WS daq.frame 只补增量,刷新后由此重建基线) */
|
|
355
|
+
async function fetchFrames(id: string, opts: { fromMs?: number, toMs?: number, kind?: 'vector' | 'image', limit?: number } = {}): Promise<DaqFrameLive[]> {
|
|
356
|
+
const qs = new URLSearchParams()
|
|
357
|
+
if (opts.fromMs != null) qs.set('from', String(opts.fromMs))
|
|
358
|
+
if (opts.toMs != null) qs.set('to', String(opts.toMs))
|
|
359
|
+
if (opts.kind) qs.set('kind', opts.kind)
|
|
360
|
+
if (opts.limit != null) qs.set('limit', String(opts.limit))
|
|
361
|
+
const data = await api<{ frames: DaqFrameLive[] }>(`/${id}/frames?${qs.toString()}`)
|
|
362
|
+
frames[id] = data.frames ?? []
|
|
363
|
+
return frames[id]!
|
|
364
|
+
}
|
|
365
|
+
|
|
313
366
|
// ---------- 自定义模板 CRUD(server 权威;WS daq.template.changed 收敛其余客户端) ----------
|
|
314
367
|
|
|
315
368
|
async function createTemplate(input: DaqTemplateInput): Promise<DaqTemplateDef> {
|
|
@@ -361,6 +414,11 @@ const createStore = () => {
|
|
|
361
414
|
ackAlarm,
|
|
362
415
|
nodeById: (id: string): DaqNodeLive | undefined => nodes.find(n => n.id === id),
|
|
363
416
|
samplesOf,
|
|
417
|
+
fetchFrames,
|
|
418
|
+
frames,
|
|
419
|
+
framesOf: (id: string): DaqFrameLive[] => frames[id] ?? [],
|
|
420
|
+
templateOf: (templateRef: string): DaqTemplateDef | undefined =>
|
|
421
|
+
templates.find(t => t.key === templateRef || `daq-${t.key}` === templateRef),
|
|
364
422
|
ofDevice: (deviceId: string | null): DaqNodeLive[] =>
|
|
365
423
|
deviceId ? nodes.filter(n => n.deviceBindingId === deviceId) : [],
|
|
366
424
|
})
|
package/app/config/schema.ts
CHANGED
|
@@ -62,6 +62,14 @@ export const appConfigSchema = z.object({
|
|
|
62
62
|
password: z.string().default('awshop'),
|
|
63
63
|
database: z.string().default('awshop'),
|
|
64
64
|
}),
|
|
65
|
+
// 对象存储(v2 帧管线:图像帧像素;MinIO S3 兼容。不可达 → 本地磁盘降级,采集不中断)
|
|
66
|
+
objectstore: z.object({
|
|
67
|
+
host: z.string().default('127.0.0.1'),
|
|
68
|
+
port: z.number().int().min(1).max(65535).default(9000),
|
|
69
|
+
accessKey: z.string().default('awshop'),
|
|
70
|
+
secretKey: z.string().default('awshop-secret'),
|
|
71
|
+
bucket: z.string().default('daq'),
|
|
72
|
+
}).optional(),
|
|
65
73
|
}).default({ startInfrastructure: 'auto', mqtt: { host: '127.0.0.1', port: 1883 }, timescale: { host: '127.0.0.1', port: 5432, user: 'postgres', password: 'awshop', database: 'awshop' } }),
|
|
66
74
|
})
|
|
67
75
|
|
package/app/pages/daq/[id].vue
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { computed, onBeforeUnmount, onMounted, reactive, ref, watch } from 'vue'
|
|
8
8
|
import { useRoute } from 'vue-router'
|
|
9
9
|
import { useDcwStream } from '@/app/composables/workshop/useDcwStream'
|
|
10
|
-
import { useDaqStream } from '@/app/composables/workshop/useDaqStream'
|
|
10
|
+
import { useDaqStream, type DaqFrameLive } from '@/app/composables/workshop/useDaqStream'
|
|
11
11
|
import { useDeviceTwins } from '@/app/composables/workshop/useDeviceTwins'
|
|
12
12
|
import { daqKeyFromRef, DAQ_DRIVERS, type DaqDriverKind, type DaqNodeState, type DriverConfigField, type DriverTestResult as DaqDriverTestResult } from '#shared/daq-protocol'
|
|
13
13
|
|
|
@@ -42,9 +42,46 @@ onMounted(() => {
|
|
|
42
42
|
unsub = daq.ensureWsFeed()
|
|
43
43
|
void daq.load()
|
|
44
44
|
void deviceTwins.load()
|
|
45
|
+
if (isFrameNode.value) void loadFrames()
|
|
45
46
|
})
|
|
46
47
|
onBeforeUnmount(() => unsub?.())
|
|
47
48
|
|
|
49
|
+
// ---------- 帧视图(v2 多形态信号:向量轮廓 / 图像画廊;scalar 节点不渲染) ----------
|
|
50
|
+
|
|
51
|
+
const signalKind = computed(() => tpl.value?.signalKind ?? 'scalar')
|
|
52
|
+
const isFrameNode = computed(() => signalKind.value !== 'scalar')
|
|
53
|
+
const frames = computed(() => daq.framesOf(nodeId.value))
|
|
54
|
+
|
|
55
|
+
async function loadFrames(): Promise<void> {
|
|
56
|
+
if (!nodeId.value) return
|
|
57
|
+
await daq.fetchFrames(nodeId.value, { limit: 24 }).catch(() => {})
|
|
58
|
+
}
|
|
59
|
+
watch(nodeId, () => {
|
|
60
|
+
if (isFrameNode.value) void loadFrames()
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const timeOf = (at: number): string => new Date(at).toLocaleTimeString('zh-CN', { hour12: false })
|
|
64
|
+
const metricsBrief = (f: DaqFrameLive): string =>
|
|
65
|
+
Object.entries(f.metrics ?? {}).slice(0, 3).map(([k, v]) => `${k}=${v}`).join(' ')
|
|
66
|
+
|
|
67
|
+
/* 向量轮廓(最近一帧预览;SVG polyline,免 canvas 绘制循环) */
|
|
68
|
+
const VEC_W = 320
|
|
69
|
+
const VEC_H = 84
|
|
70
|
+
const latestVector = computed(() => frames.value.find(f => f.kind === 'vector' && f.points?.length))
|
|
71
|
+
const vecPath = computed(() => {
|
|
72
|
+
const pts = latestVector.value?.points ?? []
|
|
73
|
+
if (pts.length < 2) return ''
|
|
74
|
+
const min = Math.min(...pts)
|
|
75
|
+
const max = Math.max(...pts)
|
|
76
|
+
const span = max - min || 1
|
|
77
|
+
return pts
|
|
78
|
+
.map((p, i) => `${((i / (pts.length - 1)) * VEC_W).toFixed(1)},${(VEC_H - 6 - ((p - min) / span) * (VEC_H - 12)).toFixed(1)}`)
|
|
79
|
+
.join(' ')
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
/* 图像大图查看(点击缩略图;contentUrl 同源 cookie 鉴权直出) */
|
|
83
|
+
const fullFrame = ref<DaqFrameLive | null>(null)
|
|
84
|
+
|
|
48
85
|
/** WS 下发节拍展示(null=跟随全局;0=每帧;>0 独立间隔) */
|
|
49
86
|
function publishLabel(v: number | null): string {
|
|
50
87
|
if (v == null) return t('daqDetail.k9vnp9h053', { p0: daq.controller.defaultPublishIntervalMs })
|
|
@@ -682,6 +719,97 @@ watch(bucketMs, () => void loadHistory())
|
|
|
682
719
|
</table>
|
|
683
720
|
</section>
|
|
684
721
|
</div>
|
|
722
|
+
|
|
723
|
+
<!-- 帧视图(v2 多形态信号:向量轮廓 / 图像画廊;scalar 节点不渲染) -->
|
|
724
|
+
<section
|
|
725
|
+
v-if="isFrameNode"
|
|
726
|
+
class="aw-tile pad frames-tile"
|
|
727
|
+
>
|
|
728
|
+
<div class="hist-hd">
|
|
729
|
+
<h3 class="sec">
|
|
730
|
+
{{ signalKind === 'image' ? $t('daqDetail.kfrm0001') : $t('daqDetail.kfrm0002') }}
|
|
731
|
+
<span class="mono frames-n">{{ frames.length }}</span>
|
|
732
|
+
</h3>
|
|
733
|
+
<button
|
|
734
|
+
class="pill-btn"
|
|
735
|
+
@click="loadFrames"
|
|
736
|
+
>
|
|
737
|
+
{{ $t('daqDetail.k3x1jg022') }}
|
|
738
|
+
</button>
|
|
739
|
+
</div>
|
|
740
|
+
|
|
741
|
+
<!-- 向量:最近帧轮廓 + 帧表 -->
|
|
742
|
+
<template v-if="signalKind === 'vector'">
|
|
743
|
+
<svg
|
|
744
|
+
class="vec-svg"
|
|
745
|
+
:viewBox="`0 0 ${VEC_W} ${VEC_H}`"
|
|
746
|
+
preserveAspectRatio="none"
|
|
747
|
+
>
|
|
748
|
+
<polyline
|
|
749
|
+
:points="vecPath"
|
|
750
|
+
fill="none"
|
|
751
|
+
stroke="var(--accent)"
|
|
752
|
+
stroke-width="1.5"
|
|
753
|
+
/>
|
|
754
|
+
</svg>
|
|
755
|
+
<table class="raw-table mono">
|
|
756
|
+
<thead>
|
|
757
|
+
<tr><th>{{ $t('daqDetail.k40vsf023') }}</th><th>{{ $t('daqDetail.kfrm0004') }}</th><th>{{ $t('daqDetail.kfrm0005') }}</th></tr>
|
|
758
|
+
</thead>
|
|
759
|
+
<tbody>
|
|
760
|
+
<tr
|
|
761
|
+
v-for="f in frames.filter(x => x.kind === 'vector').slice(0, 12)"
|
|
762
|
+
:key="f.at"
|
|
763
|
+
>
|
|
764
|
+
<td>{{ timeOf(f.at) }}</td>
|
|
765
|
+
<td>{{ f.points?.length ?? 0 }}</td>
|
|
766
|
+
<td>{{ metricsBrief(f) }}</td>
|
|
767
|
+
</tr>
|
|
768
|
+
</tbody>
|
|
769
|
+
</table>
|
|
770
|
+
</template>
|
|
771
|
+
|
|
772
|
+
<!-- 图像:缩略图画gallery(懒加载;点击看原图) -->
|
|
773
|
+
<template v-else>
|
|
774
|
+
<div
|
|
775
|
+
v-if="frames.length"
|
|
776
|
+
class="gal"
|
|
777
|
+
>
|
|
778
|
+
<figure
|
|
779
|
+
v-for="f in frames"
|
|
780
|
+
:key="f.at"
|
|
781
|
+
class="gal-item"
|
|
782
|
+
:title="$t('daqDetail.kfrm0006')"
|
|
783
|
+
@click="fullFrame = f"
|
|
784
|
+
>
|
|
785
|
+
<img
|
|
786
|
+
:src="f.thumbUrl"
|
|
787
|
+
loading="lazy"
|
|
788
|
+
alt="daq frame"
|
|
789
|
+
>
|
|
790
|
+
<figcaption class="mono">
|
|
791
|
+
{{ timeOf(f.at) }} · {{ metricsBrief(f) }}
|
|
792
|
+
</figcaption>
|
|
793
|
+
</figure>
|
|
794
|
+
</div>
|
|
795
|
+
<p
|
|
796
|
+
v-else
|
|
797
|
+
class="frames-empty"
|
|
798
|
+
>
|
|
799
|
+
{{ $t('daqDetail.kfrm0003') }}
|
|
800
|
+
</p>
|
|
801
|
+
<div
|
|
802
|
+
v-if="fullFrame"
|
|
803
|
+
class="gal-full"
|
|
804
|
+
@click="fullFrame = null"
|
|
805
|
+
>
|
|
806
|
+
<img
|
|
807
|
+
:src="fullFrame.contentUrl ?? fullFrame.thumbUrl"
|
|
808
|
+
alt="daq frame full"
|
|
809
|
+
>
|
|
810
|
+
</div>
|
|
811
|
+
</template>
|
|
812
|
+
</section>
|
|
685
813
|
</div>
|
|
686
814
|
</template>
|
|
687
815
|
|
|
@@ -793,4 +921,16 @@ watch(bucketMs, () => void loadHistory())
|
|
|
793
921
|
.st-pill.warn { color: var(--tone-warning-dot); background: var(--tone-warning-bg); }
|
|
794
922
|
.st-pill.alarm { color: var(--tone-danger-dot); background: var(--tone-danger-bg); }
|
|
795
923
|
.st-pill.offline { color: var(--tone-neutral-dot); background: var(--tone-neutral-bg); }
|
|
924
|
+
|
|
925
|
+
/* 帧视图(v2 多形态) */
|
|
926
|
+
.frames-tile { margin-top: 14px; }
|
|
927
|
+
.frames-n { margin-left: 8px; color: var(--ink-faint); }
|
|
928
|
+
.vec-svg { width: 100%; height: 96px; display: block; background: var(--tone-neutral-bg); border-radius: 6px; margin-bottom: 10px; }
|
|
929
|
+
.gal { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
|
|
930
|
+
.gal-item { margin: 0; cursor: zoom-in; }
|
|
931
|
+
.gal-item img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 6px; display: block; background: var(--tone-neutral-bg); }
|
|
932
|
+
.gal-item figcaption { margin-top: 4px; font-size: 11px; color: var(--ink-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
933
|
+
.frames-empty { margin: 8px 0; font-size: 13px; color: var(--ink-faint); }
|
|
934
|
+
.gal-full { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; background: rgb(0 0 0 / 72%); cursor: zoom-out; }
|
|
935
|
+
.gal-full img { max-width: 92vw; max-height: 92vh; border-radius: 8px; }
|
|
796
936
|
</style>
|
package/app/pages/settings.vue
CHANGED
|
@@ -22,7 +22,9 @@ function syncRuntimeDraft() {
|
|
|
22
22
|
draft.value = { ...rcStore.effective }
|
|
23
23
|
dirtyKeys.value = new Set()
|
|
24
24
|
}
|
|
25
|
-
watch(() => rcStore.loaded, (v) => {
|
|
25
|
+
watch(() => rcStore.loaded, (v) => {
|
|
26
|
+
if (v) syncRuntimeDraft()
|
|
27
|
+
})
|
|
26
28
|
watch(() => rcStore.effective, () => {
|
|
27
29
|
// 外部写入(CLI/其他窗口/文件监听)推来的变化,未编辑时才回填草稿
|
|
28
30
|
if (dirtyKeys.value.size === 0) syncRuntimeDraft()
|
|
@@ -47,7 +49,7 @@ async function saveRuntime() {
|
|
|
47
49
|
? { type: 'warning', text: t('settings.runtime.restartNotice', { keys: restart.join(', ') }) }
|
|
48
50
|
: { type: 'success', text: t('settings.runtime.savedLive') }
|
|
49
51
|
}
|
|
50
|
-
catch (e
|
|
52
|
+
catch (e) {
|
|
51
53
|
runtimeNotice.value = { type: 'error', text: e?.response?.data?.message || e?.message || String(e) }
|
|
52
54
|
}
|
|
53
55
|
finally {
|
|
@@ -61,7 +63,7 @@ async function resetRuntimeKey(key: string) {
|
|
|
61
63
|
syncRuntimeDraft()
|
|
62
64
|
runtimeNotice.value = { type: 'success', text: t('settings.runtime.keyReset', { key }) }
|
|
63
65
|
}
|
|
64
|
-
catch (e
|
|
66
|
+
catch (e) {
|
|
65
67
|
runtimeNotice.value = { type: 'error', text: e?.response?.data?.message || e?.message || String(e) }
|
|
66
68
|
}
|
|
67
69
|
}
|
|
@@ -72,7 +74,7 @@ async function resetAllRuntime() {
|
|
|
72
74
|
syncRuntimeDraft()
|
|
73
75
|
runtimeNotice.value = { type: 'success', text: t('settings.runtime.resetAllDone') }
|
|
74
76
|
}
|
|
75
|
-
catch (e
|
|
77
|
+
catch (e) {
|
|
76
78
|
runtimeNotice.value = { type: 'error', text: e?.response?.data?.message || e?.message || String(e) }
|
|
77
79
|
}
|
|
78
80
|
}
|
|
@@ -279,7 +281,10 @@ const tabs = computed(() => [
|
|
|
279
281
|
:message="runtimeNotice.text"
|
|
280
282
|
/>
|
|
281
283
|
|
|
282
|
-
<template
|
|
284
|
+
<template
|
|
285
|
+
v-for="g in rcStore.groups"
|
|
286
|
+
:key="g.group"
|
|
287
|
+
>
|
|
283
288
|
<h4 class="rt-group-title">
|
|
284
289
|
{{ groupLabel(g.group) }}
|
|
285
290
|
</h4>
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 运行时配置客户端插件 —— 设置热重载落地层。
|
|
3
|
-
* - 启动:拉取服务端设置快照 → 订阅 SSE(UI/CLI/文件任意写入实时同步)
|
|
4
|
-
* - live 应用:标题、主题模式、主题色、默认语言随有效值变化即时生效
|
|
5
|
-
* · 主题模式/主题色仅当用户未在设置页手动覆盖时跟随(用户本地偏好优先)
|
|
6
|
-
*/
|
|
7
|
-
import { useRuntimeConfigStore } from '~/stores/runtime-config'
|
|
8
|
-
import { useAppStore } from '~/stores/app'
|
|
9
|
-
|
|
10
|
-
export default defineNuxtPlugin(() => {
|
|
11
|
-
if (!import.meta.client) return
|
|
12
|
-
const store = useRuntimeConfigStore()
|
|
13
|
-
const appStore = useAppStore()
|
|
14
|
-
|
|
15
|
-
let darkTouched = false
|
|
16
|
-
let lastDarkFromRuntime: boolean | null = null
|
|
17
|
-
|
|
18
|
-
// 用户手动切换过暗色后,禁止运行时主题覆盖(尊重本地偏好)
|
|
19
|
-
watch(
|
|
20
|
-
() => appStore.isDark,
|
|
21
|
-
(v) => {
|
|
22
|
-
if (lastDarkFromRuntime !== null && v !== lastDarkFromRuntime) darkTouched = true
|
|
23
|
-
},
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
// 主题模式:runtime 默认 → 应用首次暗态(仅当用户未手动切换)
|
|
27
|
-
watch(
|
|
28
|
-
() => store.effective['theme.mode'],
|
|
29
|
-
(v) => {
|
|
30
|
-
if (v !== 'light' && v !== 'dark') return
|
|
31
|
-
if (darkTouched) return
|
|
32
|
-
const target = v === 'dark'
|
|
33
|
-
lastDarkFromRuntime = target
|
|
34
|
-
if (appStore.isDark !== target) appStore.isDark = target
|
|
35
|
-
},
|
|
36
|
-
{ immediate: true },
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
// 标题:实时反映 app.title
|
|
40
|
-
watch(
|
|
41
|
-
() => store.effective['app.title'],
|
|
42
|
-
(v, old) => {
|
|
43
|
-
if (typeof v === 'string' && v && v !== old) document.title = v
|
|
44
|
-
},
|
|
45
|
-
{ immediate: true },
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
// 主题色:app.vue 的 accentBase 优先读 store.accent 本地偏好,
|
|
49
|
-
// 其次 runtime 有效主题色 —— 这里仅需保证 store 已填充即可(app.vue 计算属性实时跟随)
|
|
50
|
-
void store.fetchAll().catch(() => {})
|
|
51
|
-
store.startEvents()
|
|
52
|
-
|
|
53
|
-
// i18n 默认语言:仅当用户未在本地选择过语言时跟随 runtime 默认
|
|
54
|
-
const LOCAL_LOCALE_KEY = 'aw.locale'
|
|
55
|
-
try {
|
|
56
|
-
if (!window.localStorage.getItem(LOCAL_LOCALE_KEY)) {
|
|
57
|
-
const locale = store.effective['i18n.defaultLocale']
|
|
58
|
-
if (locale === 'zh-CN' || locale === 'en') {
|
|
59
|
-
const { setLocale } = useI18n()
|
|
60
|
-
void setLocale(locale)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch { /* localStorage 不可用则跳过 */ }
|
|
65
|
-
})
|
|
1
|
+
/**
|
|
2
|
+
* 运行时配置客户端插件 —— 设置热重载落地层。
|
|
3
|
+
* - 启动:拉取服务端设置快照 → 订阅 SSE(UI/CLI/文件任意写入实时同步)
|
|
4
|
+
* - live 应用:标题、主题模式、主题色、默认语言随有效值变化即时生效
|
|
5
|
+
* · 主题模式/主题色仅当用户未在设置页手动覆盖时跟随(用户本地偏好优先)
|
|
6
|
+
*/
|
|
7
|
+
import { useRuntimeConfigStore } from '~/stores/runtime-config'
|
|
8
|
+
import { useAppStore } from '~/stores/app'
|
|
9
|
+
|
|
10
|
+
export default defineNuxtPlugin(() => {
|
|
11
|
+
if (!import.meta.client) return
|
|
12
|
+
const store = useRuntimeConfigStore()
|
|
13
|
+
const appStore = useAppStore()
|
|
14
|
+
|
|
15
|
+
let darkTouched = false
|
|
16
|
+
let lastDarkFromRuntime: boolean | null = null
|
|
17
|
+
|
|
18
|
+
// 用户手动切换过暗色后,禁止运行时主题覆盖(尊重本地偏好)
|
|
19
|
+
watch(
|
|
20
|
+
() => appStore.isDark,
|
|
21
|
+
(v) => {
|
|
22
|
+
if (lastDarkFromRuntime !== null && v !== lastDarkFromRuntime) darkTouched = true
|
|
23
|
+
},
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
// 主题模式:runtime 默认 → 应用首次暗态(仅当用户未手动切换)
|
|
27
|
+
watch(
|
|
28
|
+
() => store.effective['theme.mode'],
|
|
29
|
+
(v) => {
|
|
30
|
+
if (v !== 'light' && v !== 'dark') return
|
|
31
|
+
if (darkTouched) return
|
|
32
|
+
const target = v === 'dark'
|
|
33
|
+
lastDarkFromRuntime = target
|
|
34
|
+
if (appStore.isDark !== target) appStore.isDark = target
|
|
35
|
+
},
|
|
36
|
+
{ immediate: true },
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
// 标题:实时反映 app.title
|
|
40
|
+
watch(
|
|
41
|
+
() => store.effective['app.title'],
|
|
42
|
+
(v, old) => {
|
|
43
|
+
if (typeof v === 'string' && v && v !== old) document.title = v
|
|
44
|
+
},
|
|
45
|
+
{ immediate: true },
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
// 主题色:app.vue 的 accentBase 优先读 store.accent 本地偏好,
|
|
49
|
+
// 其次 runtime 有效主题色 —— 这里仅需保证 store 已填充即可(app.vue 计算属性实时跟随)
|
|
50
|
+
void store.fetchAll().catch(() => {})
|
|
51
|
+
store.startEvents()
|
|
52
|
+
|
|
53
|
+
// i18n 默认语言:仅当用户未在本地选择过语言时跟随 runtime 默认
|
|
54
|
+
const LOCAL_LOCALE_KEY = 'aw.locale'
|
|
55
|
+
try {
|
|
56
|
+
if (!window.localStorage.getItem(LOCAL_LOCALE_KEY)) {
|
|
57
|
+
const locale = store.effective['i18n.defaultLocale']
|
|
58
|
+
if (locale === 'zh-CN' || locale === 'en') {
|
|
59
|
+
const { setLocale } = useI18n()
|
|
60
|
+
void setLocale(locale)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch { /* localStorage 不可用则跳过 */ }
|
|
65
|
+
})
|