agentworkshop 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BUPj10t4.js → 6vYobj4F.js} +1 -1
  3. package/.output/public/_nuxt/{BCJFMBQ6.js → B-xskWta.js} +1 -1
  4. package/.output/public/_nuxt/{BC8s1Guv.js → B3Psw_sL.js} +1 -1
  5. package/.output/public/_nuxt/B53Mp7lD.js +1 -0
  6. package/.output/public/_nuxt/B5CYgFAD.js +14 -0
  7. package/.output/public/_nuxt/{91DZTUMJ.js → B8WV7GzS.js} +1 -1
  8. package/.output/public/_nuxt/{BDASpD_i.js → BBwMH_hG.js} +1 -1
  9. package/.output/public/_nuxt/BLzCac9K2.js +1 -0
  10. package/.output/public/_nuxt/BNXfwXpE.js +1 -0
  11. package/.output/public/_nuxt/BbZAzXjZ2.js +1 -0
  12. package/.output/public/_nuxt/{CFn4vHwD.js → Bc3PiGGr.js} +1 -1
  13. package/.output/public/_nuxt/{B0HpdCKS.js → Bckshc9V.js} +1 -1
  14. package/.output/public/_nuxt/BcrN7QEl2.js +1 -0
  15. package/.output/public/_nuxt/BgOhoDTI.js +1 -0
  16. package/.output/public/_nuxt/Bmpvki7M.js +1 -0
  17. package/.output/public/_nuxt/BxPPAkGA.js +3 -0
  18. package/.output/public/_nuxt/{u7KWCGSb.js → BxtpDtzC.js} +1 -1
  19. package/.output/public/_nuxt/{DxrgFxIr2.js → C4OAdbVK2.js} +1 -1
  20. package/.output/public/_nuxt/C6m-kenn.js +1 -0
  21. package/.output/public/_nuxt/{DDdEnkdw.js → CGx-mtWf.js} +1 -1
  22. package/.output/public/_nuxt/Cj6139IM.js +1 -0
  23. package/.output/public/_nuxt/{6PZPfFcO.js → Cor9siSf.js} +1 -1
  24. package/.output/public/_nuxt/{wirVyscc.js → D7jiode2.js} +1 -1
  25. package/.output/public/_nuxt/{Ct68Z0232.js → DA4lxCWC2.js} +1 -1
  26. package/.output/public/_nuxt/DEaY_uvR.js +1 -0
  27. package/.output/public/_nuxt/{MyA0Oeqd.js → DNxVTfhe.js} +1 -1
  28. package/.output/public/_nuxt/DT-Wg8r1.js +1 -0
  29. package/.output/public/_nuxt/DTYBfjRY.js +1 -0
  30. package/.output/public/_nuxt/{DvgKXPgu2.js → DWcEk1ur2.js} +1 -1
  31. package/.output/public/_nuxt/Dhqra7NB.js +1 -0
  32. package/.output/public/_nuxt/DlRO_q5L.js +1 -0
  33. package/.output/public/_nuxt/{D8EfUxO2.js → Ds8JbqGB.js} +1 -1
  34. package/.output/public/_nuxt/{DN5RuZ8k.js → DyisHHzD.js} +1 -1
  35. package/.output/public/_nuxt/ORt9oDIy2.js +1 -0
  36. package/.output/public/_nuxt/{By8BpbKH.js → QoCzfpo2.js} +1 -1
  37. package/.output/public/_nuxt/RzXYI9FM.js +23 -0
  38. package/.output/public/_nuxt/{BuktKVqK2.js → arUY5dyq2.js} +2 -2
  39. package/.output/public/_nuxt/builds/latest.json +1 -1
  40. package/.output/public/_nuxt/builds/meta/88479a5b-ce6a-400f-9737-1cc9f54b1fe5.json +1 -0
  41. package/.output/public/_nuxt/{pKv_VWR4.js → d_Sz9KGm.js} +1 -1
  42. package/.output/public/_nuxt/{default.BR3e5fPY.css → default.BbgdTDCk.css} +1 -1
  43. package/.output/public/_nuxt/{C9cU_Ujd.js → eHYnGew0.js} +1 -1
  44. package/.output/public/_nuxt/{DM4CNkXz.js → eUGyJdiT.js} +1 -1
  45. package/.output/public/_nuxt/{entry.5qf6EqfN.css → entry.B03HBJGC.css} +1 -1
  46. package/.output/public/_nuxt/{B1g8pJmr.js → kkEthL84.js} +1 -1
  47. package/.output/public/_nuxt/permissions.CwZo6t1V.css +1 -0
  48. package/.output/public/_nuxt/settings.BqMF2nfj.css +1 -0
  49. package/.output/public/_nuxt/{D0Szyn_D.js → tJuVvBSl.js} +1 -1
  50. package/.output/public/_nuxt/zVkqCZ78.js +1 -0
  51. package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
  52. package/.output/server/chunks/_/SearchOutlined.mjs +1 -1
  53. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  54. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  55. package/.output/server/chunks/_/nitro.mjs +1636 -1315
  56. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  57. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  58. package/.output/server/chunks/build/Col-biaNnEPf.mjs +1 -1
  59. package/.output/server/chunks/build/{OmpTerminalPanel-COphA1br.mjs → OmpTerminalPanel-Ban3yJZ4.mjs} +4 -5
  60. package/.output/server/chunks/build/OmpTerminalPanel-Ban3yJZ4.mjs.map +1 -0
  61. package/.output/server/chunks/build/{TownView-D8DSdO3H.mjs → TownView-CunmEMzS.mjs} +8 -9
  62. package/.output/server/chunks/build/{TownView-D8DSdO3H.mjs.map → TownView-CunmEMzS.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{_id_-BV4FfiYd.mjs → _id_-CVnMdSeG.mjs} +7 -7
  64. package/.output/server/chunks/build/{_id_-BV4FfiYd.mjs.map → _id_-CVnMdSeG.mjs.map} +1 -1
  65. package/.output/server/chunks/build/{_id_-TP9hvnBM.mjs → _id_-D265Wh_k.mjs} +7 -7
  66. package/.output/server/chunks/build/{_id_-TP9hvnBM.mjs.map → _id_-D265Wh_k.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{_wsId_-Mm9sQSz2.mjs → _wsId_-eNJmBp05.mjs} +17 -17
  68. package/.output/server/chunks/build/{_wsId_-Mm9sQSz2.mjs.map → _wsId_-eNJmBp05.mjs.map} +1 -1
  69. package/.output/server/chunks/build/{agents-To3a5xcZ.mjs → agents-B10wmFri.mjs} +9 -9
  70. package/.output/server/chunks/build/{agents-To3a5xcZ.mjs.map → agents-B10wmFri.mjs.map} +1 -1
  71. package/.output/server/chunks/build/alert-qJnjyRcP.mjs +1 -1
  72. package/.output/server/chunks/build/api-error-dul30BYQ.mjs +1 -1
  73. package/.output/server/chunks/build/button-DEcZFcqN.mjs +2 -2
  74. package/.output/server/chunks/build/{card-Dipvaykh.mjs → card-CCPQoKlh.mjs} +4 -4
  75. package/.output/server/chunks/build/{card-Dipvaykh.mjs.map → card-CCPQoKlh.mjs.map} +1 -1
  76. package/.output/server/chunks/build/{channel-templates-DRsP-qxl.mjs → channel-templates-CpWxVk5A.mjs} +7 -7
  77. package/.output/server/chunks/build/{channel-templates-DRsP-qxl.mjs.map → channel-templates-CpWxVk5A.mjs.map} +1 -1
  78. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs → checkbox-Dv1kjaUZ.mjs} +3 -3
  79. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs.map → checkbox-Dv1kjaUZ.mjs.map} +1 -1
  80. package/.output/server/chunks/build/client-only-D5BzSQc6.mjs +1 -1
  81. package/.output/server/chunks/build/{daq-_hCEaYLd.mjs → daq-DxaXk_8N.mjs} +9 -10
  82. package/.output/server/chunks/build/daq-DxaXk_8N.mjs.map +1 -0
  83. package/.output/server/chunks/build/{dcw-C7pJ4Y0p.mjs → dcw-DqjHrl5Z.mjs} +5 -5
  84. package/.output/server/chunks/build/{dcw-C7pJ4Y0p.mjs.map → dcw-DqjHrl5Z.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{default-Dnjs36e8.mjs → default-YcUHc1Ev.mjs} +19 -12
  86. package/.output/server/chunks/build/{default-Dnjs36e8.mjs.map → default-YcUHc1Ev.mjs.map} +1 -1
  87. package/.output/server/chunks/build/drawer-Cmh90erI.mjs +1 -1
  88. package/.output/server/chunks/build/dropdown-vhn1NPFs.mjs +2 -2
  89. package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs +554 -0
  90. package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs.map +1 -0
  91. package/.output/server/chunks/build/initDefaultProps-DIbWwP4R.mjs +1 -1
  92. package/.output/server/chunks/build/{input-sf_BT6o6.mjs → input-DxDqeyQW.mjs} +5 -553
  93. package/.output/server/chunks/build/input-DxDqeyQW.mjs.map +1 -0
  94. package/.output/server/chunks/build/{input-number-Bd55elNN.mjs → input-number-CZ3ZrCsy.mjs} +3 -3
  95. package/.output/server/chunks/build/{input-number-Bd55elNN.mjs.map → input-number-CZ3ZrCsy.mjs.map} +1 -1
  96. package/.output/server/chunks/build/{logs-C039TFW1.mjs → logs-Co854R4y.mjs} +6 -7
  97. package/.output/server/chunks/build/logs-Co854R4y.mjs.map +1 -0
  98. package/.output/server/chunks/build/menu-WCrlpYVh.mjs +2 -2
  99. package/.output/server/chunks/build/modal-yvUquPj5.mjs +2 -2
  100. package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs → monitor-miqq9xHB.mjs} +11 -11
  101. package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs.map → monitor-miqq9xHB.mjs.map} +1 -1
  102. package/.output/server/chunks/build/{pages-C_VSGSGo.mjs → pages-DPC1Vp6w.mjs} +5 -5
  103. package/.output/server/chunks/build/{pages-C_VSGSGo.mjs.map → pages-DPC1Vp6w.mjs.map} +1 -1
  104. package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs +534 -0
  105. package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs.map +1 -0
  106. package/.output/server/chunks/build/{plugins-4FMWkN8d.mjs → plugins-D84mvK9G.mjs} +3 -4
  107. package/.output/server/chunks/build/plugins-D84mvK9G.mjs.map +1 -0
  108. package/.output/server/chunks/build/popconfirm-CRaHcz5O.mjs +2 -2
  109. package/.output/server/chunks/build/responsiveObserve-CS0UB6wQ.mjs +1 -1
  110. package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs → segmented-ChmQZwz6.mjs} +5 -4
  111. package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs.map → segmented-ChmQZwz6.mjs.map} +1 -1
  112. package/.output/server/chunks/build/select-D-CeE5vY.mjs +1 -1
  113. package/.output/server/chunks/build/{settings-DA8IkGLo.mjs → settings-BPBll_7K.mjs} +28 -26
  114. package/.output/server/chunks/build/settings-BPBll_7K.mjs.map +1 -0
  115. package/.output/server/chunks/build/space-CCBYAkXt.mjs +2 -2
  116. package/.output/server/chunks/build/spin-HVY81X_L.mjs +1 -1
  117. package/.output/server/chunks/build/switch-CelRXpcy.mjs +2 -2
  118. package/.output/server/chunks/build/{table-Cswq-l2r.mjs → table-BtksyDlQ.mjs} +5 -5
  119. package/.output/server/chunks/build/{table-Cswq-l2r.mjs.map → table-BtksyDlQ.mjs.map} +1 -1
  120. package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs → tabs-DQv-_-R6.mjs} +3 -3
  121. package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs.map → tabs-DQv-_-R6.mjs.map} +1 -1
  122. package/.output/server/chunks/build/{tag-NO9jEqKy.mjs → tag-A0tZ2Ouq.mjs} +4 -4
  123. package/.output/server/chunks/build/{tag-NO9jEqKy.mjs.map → tag-A0tZ2Ouq.mjs.map} +1 -1
  124. package/.output/server/chunks/build/{teams-DA1lkf1n.mjs → teams-CNflUtPh.mjs} +7 -7
  125. package/.output/server/chunks/build/{teams-DA1lkf1n.mjs.map → teams-CNflUtPh.mjs.map} +1 -1
  126. package/.output/server/chunks/build/{tokens-DKMvvk3e.mjs → tokens-CZpnEDVf.mjs} +10 -10
  127. package/.output/server/chunks/build/{tokens-DKMvvk3e.mjs.map → tokens-CZpnEDVf.mjs.map} +1 -1
  128. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -1
  129. package/.output/server/chunks/build/{town-D0thZ7PK.mjs → town-BbaR-8io.mjs} +9 -10
  130. package/.output/server/chunks/build/town-BbaR-8io.mjs.map +1 -0
  131. package/.output/server/chunks/build/{useDaqStream-BVTRw8_H.mjs → useDaqStream-BkmyQT06.mjs} +34 -23
  132. package/.output/server/chunks/build/useDaqStream-BkmyQT06.mjs.map +1 -0
  133. package/.output/server/chunks/build/{useDcwStream-DNsivqI_.mjs → useDcwStream-DWVoU96J.mjs} +60 -46
  134. package/.output/server/chunks/build/useDcwStream-DWVoU96J.mjs.map +1 -0
  135. package/.output/server/chunks/build/{useDeviceTwins-WeIom7A6.mjs → useDeviceTwins-34WGk9aN.mjs} +2 -2
  136. package/.output/server/chunks/build/{useDeviceTwins-WeIom7A6.mjs.map → useDeviceTwins-34WGk9aN.mjs.map} +1 -1
  137. package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +1 -1
  138. package/.output/server/chunks/build/{useOpsLog-DcKnPO43.mjs → useOpsLog-C9zTzYof.mjs} +27 -15
  139. package/.output/server/chunks/build/useOpsLog-C9zTzYof.mjs.map +1 -0
  140. package/.output/server/chunks/build/useSiteConfig-DJe_KMVr.mjs +1 -1
  141. package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs +1 -1
  142. package/.output/server/chunks/build/{useWorkshopWs-B3j5wIAK.mjs → useWorkshopWs-CprkZEdq.mjs} +2 -3
  143. package/.output/server/chunks/build/useWorkshopWs-CprkZEdq.mjs.map +1 -0
  144. package/.output/server/chunks/build/{users-CmVvb1oq.mjs → users-D6RNylrW.mjs} +10 -10
  145. package/.output/server/chunks/build/{users-CmVvb1oq.mjs.map → users-D6RNylrW.mjs.map} +1 -1
  146. package/.output/server/chunks/build/{workshop-BhWnJMWs.mjs → workshop-Crsai2Y9.mjs} +9 -9
  147. package/.output/server/chunks/build/{workshop-BhWnJMWs.mjs.map → workshop-Crsai2Y9.mjs.map} +1 -1
  148. package/.output/server/chunks/build/{workspaces-IfORCDJE.mjs → workspaces-BuydxM-3.mjs} +2 -3
  149. package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +1 -0
  150. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  151. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  152. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  153. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
  154. package/.output/server/chunks/routes/api/metrics.mjs +1 -1
  155. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  156. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
  157. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
  158. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
  159. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
  160. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
  161. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  162. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  163. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
  164. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  165. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
  166. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  167. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  168. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
  169. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  170. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  171. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
  172. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  173. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  174. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
  175. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
  176. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  177. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  178. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  179. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
  180. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  181. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
  182. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  183. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  184. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  185. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  186. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  187. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +19 -8
  188. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  189. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
  190. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -2
  191. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +2 -2
  192. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
  193. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
  194. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
  195. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  196. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  197. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
  198. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
  199. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  200. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -2
  201. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
  202. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -2
  203. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  204. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  205. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -3
  206. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
  208. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -2
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -2
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
  233. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -2
  235. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
  237. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
  238. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +7 -6
  239. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  240. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +5 -4
  241. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  242. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +5 -4
  243. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  244. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +5 -4
  245. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  246. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -2
  247. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -2
  248. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +5 -4
  249. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  250. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +5 -2
  251. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  252. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -2
  253. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +3 -2
  254. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  255. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -2
  256. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -2
  257. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
  258. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
  259. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
  260. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -2
  261. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +7 -6
  262. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  263. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -2
  264. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -2
  265. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +5 -4
  266. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  267. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +4 -3
  268. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  269. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -2
  270. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -2
  271. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
  272. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -2
  273. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +4 -4
  274. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +8 -4
  276. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  277. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +4 -4
  278. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  279. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -2
  280. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
  281. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -2
  282. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
  283. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -4
  284. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
  286. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +7 -3
  287. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  288. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +3 -2
  289. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  290. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +3 -2
  291. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  292. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
  293. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -2
  294. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
  295. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
  296. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -2
  297. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -2
  298. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -2
  299. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -2
  300. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
  301. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -2
  302. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
  303. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -2
  304. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +2 -2
  305. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -2
  306. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +5 -3
  307. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
  309. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
  310. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
  311. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -2
  312. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
  313. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
  314. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
  315. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
  316. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
  317. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -2
  318. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -2
  319. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -2
  320. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -2
  321. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
  322. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
  323. package/.output/server/chunks/routes/api/workshop/index.put.mjs +41 -0
  324. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -0
  325. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +4 -3
  326. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +27 -0
  328. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -0
  329. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  330. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
  331. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  332. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +4 -4
  333. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  334. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +5 -4
  335. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  336. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -2
  337. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +18 -11
  338. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -2
  340. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -2
  342. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
  343. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
  344. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +24 -12
  345. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
  347. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +12 -7
  348. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
  350. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
  352. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -2
  353. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -2
  354. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
  355. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
  356. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -2
  357. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -2
  358. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
  359. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  360. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  361. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
  362. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  363. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
  364. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  365. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
  366. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -2
  367. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
  368. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  369. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
  370. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
  371. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
  372. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  373. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
  374. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
  375. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -3
  376. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
  377. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
  378. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
  379. package/.output/server/chunks/routes/renderer.mjs +3 -3
  380. package/.output/server/chunks/virtual/entry.mjs +271 -31
  381. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  382. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  383. package/.output/server/index.mjs +1 -1
  384. package/.output/server/package.json +1 -1
  385. package/README-zh.md +15 -0
  386. package/README.md +20 -0
  387. package/app/components/AppSidebar.vue +7 -1
  388. package/app/composables/workshop/apiClient.ts +103 -95
  389. package/app/composables/workshop/useDaqStream.ts +35 -21
  390. package/app/composables/workshop/useDcwStream.ts +22 -5
  391. package/app/composables/workshop/useOpsLog.ts +26 -13
  392. package/app/composables/workshop/useWorkshopWs.ts +11 -2
  393. package/app/pages/permissions/index.vue +327 -0
  394. package/app/pages/settings.vue +4 -2
  395. package/app/plugins/http.ts +18 -2
  396. package/app/plugins/session-restore.client.ts +7 -2
  397. package/app/stores/workshop/user.ts +14 -1
  398. package/i18n/locales/en.ts +37 -0
  399. package/i18n/locales/zh-CN.ts +37 -0
  400. package/package.json +1 -1
  401. package/scripts/_dbg-acc-1-setup.mjs +57 -0
  402. package/scripts/_dbg-acc-2-diag.mjs +14 -0
  403. package/scripts/_dbg-acc-2-intervals.mjs +81 -0
  404. package/scripts/_dbg-acc-3-daq.mjs +48 -0
  405. package/scripts/_dbg-acc-4-team.mjs +92 -0
  406. package/scripts/_dbg-acc-5-visual.mjs +63 -0
  407. package/scripts/_dbg-acc-5b-ws-town.mjs +18 -0
  408. package/scripts/_dbg-acc-5c-town.mjs +12 -0
  409. package/scripts/_dbg-acc-6-i18n.mjs +19 -0
  410. package/scripts/_dbg-audit-neg-e2e.mjs +64 -0
  411. package/scripts/_dbg-final-features.mjs +155 -0
  412. package/scripts/_dbg-final-fixups.mjs +62 -0
  413. package/scripts/_dbg-final-visual.mjs +29 -0
  414. package/scripts/_dbg-perms-e2e.mjs +102 -0
  415. package/scripts/_dbg-perms-visual.mjs +36 -0
  416. package/scripts/_dbg-protocol-matrix.mjs +16 -0
  417. package/sdk/api.mjs +117 -101
  418. package/sdk/context.mjs +240 -219
  419. package/sdk/hooks.mjs +105 -103
  420. package/sdk/index.d.mts +142 -135
  421. package/sdk/lifecycle.mjs +26 -25
  422. package/server/api/workshop/agent-tools/bindings/index.post.ts +40 -20
  423. package/server/api/workshop/daq/[id]/bind.post.ts +5 -2
  424. package/server/api/workshop/daq/[id]/frames/content.get.ts +4 -1
  425. package/server/api/workshop/daq/[id]/frames.get.ts +4 -1
  426. package/server/api/workshop/daq/[id]/samples.get.ts +4 -1
  427. package/server/api/workshop/daq/[id].patch.ts +3 -0
  428. package/server/api/workshop/daq/alarms/[id]/ack.post.ts +20 -15
  429. package/server/api/workshop/daq/controller.post.ts +2 -0
  430. package/server/api/workshop/daq/index.get.ts +5 -3
  431. package/server/api/workshop/daq/index.post.ts +2 -2
  432. package/server/api/workshop/dcw/[id]/bind.post.ts +20 -17
  433. package/server/api/workshop/dcw/[id]/test.post.ts +18 -15
  434. package/server/api/workshop/dcw/[id]/write.post.ts +3 -0
  435. package/server/api/workshop/dcw/index.get.ts +22 -9
  436. package/server/api/workshop/dcw/line/query.get.ts +38 -31
  437. package/server/api/workshop/dcw/lines/[id]/start.post.ts +3 -0
  438. package/server/api/workshop/dcw/lines/[id]/stop.post.ts +3 -0
  439. package/server/api/workshop/dcw/lines/index.get.ts +8 -2
  440. package/server/api/workshop/dcw/lines/index.post.ts +2 -2
  441. package/server/api/workshop/dcw/products/index.post.ts +16 -16
  442. package/server/api/workshop/dcw/runs/[id]/data.get.ts +20 -15
  443. package/server/api/workshop/dcw/runs/index.get.ts +13 -11
  444. package/server/api/workshop/permissions/index.get.ts +30 -0
  445. package/server/api/workshop/permissions/index.put.ts +29 -0
  446. package/server/api/workshop/ws.ts +18 -6
  447. package/server/data/daqs.json +48 -48
  448. package/server/data/dcw-products.json +21 -0
  449. package/server/data/dcw-recipes.json +84 -0
  450. package/server/data/dcw-rollback.json +94 -6
  451. package/server/data/dcw-runs.json +81 -75
  452. package/server/data/dcw-writes.json +108 -0
  453. package/server/data/dcws.json +645 -382
  454. package/server/data/line-runs.json +8 -8
  455. package/server/plugins/backup.ts +119 -116
  456. package/server/repositories/user.repository.ts +86 -6
  457. package/server/services/user.service.ts +5 -3
  458. package/server/services/workshop/daq/bus/index.ts +5 -3
  459. package/server/services/workshop/daq/bus/inproc.adapter.ts +12 -3
  460. package/server/services/workshop/daq/bus/mqtt.adapter.ts +13 -0
  461. package/server/services/workshop/daq/bus/queue-port.ts +2 -0
  462. package/server/services/workshop/daq/daq-controller.ts +18 -1
  463. package/server/services/workshop/db/ops.repo.ts +6 -0
  464. package/server/services/workshop/dcw/dcw-controller.ts +10 -2
  465. package/server/services/workshop/permissions.ts +79 -0
  466. package/server/services/workshop/plugins/host.mjs +38 -1
  467. package/server/services/workshop/scene-events.ts +25 -1
  468. package/shared/config/single-instance.mjs +24 -0
  469. package/shared/daq-protocol.ts +2 -0
  470. package/.output/public/_nuxt/B1kA8LhC.js +0 -14
  471. package/.output/public/_nuxt/B9MUiDFl.js +0 -1
  472. package/.output/public/_nuxt/B9dLFSYI.js +0 -1
  473. package/.output/public/_nuxt/BaMkWl5i2.js +0 -1
  474. package/.output/public/_nuxt/BmHvC_OU.js +0 -1
  475. package/.output/public/_nuxt/CBciOiTQ.js +0 -1
  476. package/.output/public/_nuxt/CUMdhxg9.js +0 -1
  477. package/.output/public/_nuxt/CgvGu2IO.js +0 -1
  478. package/.output/public/_nuxt/CjDQPXfv.js +0 -1
  479. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  480. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  481. package/.output/public/_nuxt/Cst47G4-.js +0 -1
  482. package/.output/public/_nuxt/D3VJ3lex.js +0 -1
  483. package/.output/public/_nuxt/D8wyHvcz2.js +0 -1
  484. package/.output/public/_nuxt/Dqj2h40U.js +0 -1
  485. package/.output/public/_nuxt/OV6PBW2z.js +0 -1
  486. package/.output/public/_nuxt/builds/meta/92d6bd39-dbc5-46d5-90d8-8387f36715fa.json +0 -1
  487. package/.output/public/_nuxt/settings.DeRNNUcP.css +0 -1
  488. package/.output/server/chunks/build/OmpTerminalPanel-COphA1br.mjs.map +0 -1
  489. package/.output/server/chunks/build/daq-_hCEaYLd.mjs.map +0 -1
  490. package/.output/server/chunks/build/input-sf_BT6o6.mjs.map +0 -1
  491. package/.output/server/chunks/build/logs-C039TFW1.mjs.map +0 -1
  492. package/.output/server/chunks/build/plugins-4FMWkN8d.mjs.map +0 -1
  493. package/.output/server/chunks/build/settings-DA8IkGLo.mjs.map +0 -1
  494. package/.output/server/chunks/build/town-D0thZ7PK.mjs.map +0 -1
  495. package/.output/server/chunks/build/useDaqStream-BVTRw8_H.mjs.map +0 -1
  496. package/.output/server/chunks/build/useDcwStream-DNsivqI_.mjs.map +0 -1
  497. package/.output/server/chunks/build/useOpsLog-DcKnPO43.mjs.map +0 -1
  498. package/.output/server/chunks/build/useWorkshopWs-B3j5wIAK.mjs.map +0 -1
  499. package/.output/server/chunks/build/user-Dk-ytEUV.mjs +0 -140
  500. package/.output/server/chunks/build/user-Dk-ytEUV.mjs.map +0 -1
  501. package/.output/server/chunks/build/workspaces-IfORCDJE.mjs.map +0 -1
  502. /package/.output/public/_nuxt/{CNs_Ozdc2.js → CNs_Ozdc.js} +0 -0
  503. /package/.output/public/_nuxt/{Cno6kYiO2.js → Cno6kYiO.js} +0 -0
@@ -193,6 +193,7 @@ class DcwController {
193
193
  this.broadcast?.('dcw.written', {
194
194
  nodeId: node.id,
195
195
  templateRef: node.templateRef,
196
+ lineId: node.lineId ?? null,
196
197
  value: node.value ?? eng,
197
198
  raw: outcome.raw,
198
199
  ok: outcome.ok,
@@ -234,6 +235,7 @@ class DcwController {
234
235
  this.broadcast?.('dcw.read', {
235
236
  nodeId: node.id,
236
237
  templateRef: node.templateRef,
238
+ lineId: node.lineId ?? null,
237
239
  value,
238
240
  raw: r.raw,
239
241
  ok: r.ok,
@@ -864,9 +866,16 @@ class DcwController {
864
866
  await tsdbReady
865
867
  const bucketMs = endMs - startMs > 60_000 ? Math.max(1000, Math.round((endMs - startMs) / 200)) : undefined
866
868
  const daq = [] as Array<{ templateRef: string, nodeId: string, nodeName: string, ch: string, unit: string, latest: number | null, avg: number | null, min: number | null, max: number | null, cnt: number }>
867
- for (const node of getDaqNodeRepo().all()) {
869
+ // 并行查询(tsdb 往返一次/节点,互不依赖):N+1 串行会让 50 节点产线的批次视图放大 50 倍时延
870
+ const results = await Promise.all(getDaqNodeRepo().all().map(async (node) => {
868
871
  try {
869
872
  const points = await getTsdb().query(node.id, { fromMs: startMs, toMs: endMs, bucketMs, limit: 500 })
873
+ return { node, points }
874
+ }
875
+ catch { return { node, points: [] } } // 单节点查询失败不阻塞整体
876
+ }))
877
+ for (const { node, points } of results) {
878
+ {
870
879
  if (points.length === 0) continue
871
880
  const values = points.map(p => p.value ?? p.avg ?? 0).filter(v => Number.isFinite(v))
872
881
  if (values.length === 0) continue
@@ -884,7 +893,6 @@ class DcwController {
884
893
  cnt: values.length,
885
894
  })
886
895
  }
887
- catch { /* 单节点查询失败不阻塞整体 */ }
888
896
  }
889
897
  return { run, daq, writes }
890
898
  }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * 产线级权限服务 —— 用户 × 产线的三态访问控制(none / readonly / operate)。
3
+ *
4
+ * 模型:
5
+ * - admin / editor:全量全权(运营管理角色,不受 grant 约束);
6
+ * - user(普通用户):默认无任何产线权限,由管理员在权限管理页逐线授予:
7
+ * readonly = 仅查看(数采节点读取;无数控/写向能力)
8
+ * operate = 可操控(数采读取 + 数控写向 + 产线操作全量)
9
+ * 无记录 = none(后端数据面直接不返回该产线信息)。
10
+ *
11
+ * 消费方:
12
+ * - dcw/daq 列表 API(可见性过滤);
13
+ * - dcw 写控 / 数采下发 / 产线启停(操控能力校验);
14
+ * - agent-node-bindings 绑定校验(只能绑定有权产线的节点);
15
+ * - 插件 ctx.permissions(SDK 拓展面,见 plugins/host.mjs)。
16
+ * 权限变更广播:scene-events 'permissions.changed' + 插件钩子 'permissions:changed'。
17
+ */
18
+ import { userRepository } from '@/server/repositories/user.repository'
19
+ import { AppError } from '@/server/utils/errors'
20
+ import type { ResolvedUser } from '@/server/api/workshop/caller'
21
+
22
+ export type LineMode = 'none' | 'readonly' | 'operate'
23
+ export type GrantMode = 'readonly' | 'operate'
24
+
25
+ /** 管理角色(admin/editor)不受产线 grant 约束 */
26
+ export function isPrivilegedRole(user: { role: string } | null | undefined): boolean {
27
+ return user?.role === 'admin' || user?.role === 'editor'
28
+ }
29
+
30
+ /** 用户对某产线的有效访问模式 */
31
+ export function lineMode(user: ResolvedUser | { id: string, role: string }, lineId: string | null | undefined): LineMode {
32
+ if (!lineId) return isPrivilegedRole(user) ? 'operate' : 'none'
33
+ if (isPrivilegedRole(user)) return 'operate'
34
+ const grant = userRepository.lineAccessMap(user.id).get(lineId)
35
+ return grant === 'operate' ? 'operate' : grant === 'readonly' ? 'readonly' : 'none'
36
+ }
37
+
38
+ /** 可见产线集合:null = 不限(admin/editor);否则为授权产线 id 集(普通用户) */
39
+ export function visibleLineIds(user: { id: string, role: string }): Set<string> | null {
40
+ if (isPrivilegedRole(user)) return null
41
+ return new Set(userRepository.lineAccessMap(user.id).keys())
42
+ }
43
+
44
+ /** 按 lineId 过滤实体列表(admin/editor 原样返回) */
45
+ export function filterByLine<T>(user: { id: string, role: string }, items: T[], lineIdOf: (item: T) => string | null | undefined): T[] {
46
+ const visible = visibleLineIds(user)
47
+ if (!visible) return items
48
+ return items.filter((it) => {
49
+ const lid = lineIdOf(it)
50
+ return lid != null && visible.has(lid)
51
+ })
52
+ }
53
+
54
+ /** 操控能力校验:need='operate' 时 readonly/none 均拒;need='readonly' 时 none 拒 */
55
+ export function requireLineMode(user: { id: string, role: string }, lineId: string | null | undefined, need: 'readonly' | 'operate'): LineMode {
56
+ const mode = lineMode(user, lineId)
57
+ if (mode === 'operate' || (need === 'readonly' && mode === 'readonly')) return mode
58
+ if (mode === 'readonly') {
59
+ throw new AppError(403, 'LINE_READONLY', '该产线为仅查看权限:只读数采可见,写控/操作需管理员授予「可操控」')
60
+ }
61
+ throw new AppError(403, 'LINE_FORBIDDEN', `无该产线权限:请联系管理员在「权限管理」中授予(产线 ${lineId ?? '?'})`)
62
+ }
63
+
64
+ /** 权限变更广播(scene-events + 插件钩子),前端/插件据此刷新授权视图 */
65
+ export function notifyGrantsChanged(userId: string): void {
66
+ try {
67
+ // 延迟动态导入避免与 scene-events 循环依赖
68
+ void import('@/server/services/workshop/scene-events').then((m) => {
69
+ m.broadcastSceneEvent('permissions.changed', { userId, at: new Date().toISOString() })
70
+ }).catch(() => {})
71
+ }
72
+ catch { /* 广播失败不影响授权写入 */ }
73
+ try {
74
+ void import('@/server/services/workshop/plugins/host.mjs').then((m) => {
75
+ void m.emitPluginEvent('permissions:changed', { userId })
76
+ }).catch(() => {})
77
+ }
78
+ catch { /* 插件钩子失败不影响授权写入 */ }
79
+ }
@@ -19,6 +19,23 @@ import { dirname, join, resolve } from 'node:path'
19
19
  import { pathToFileURL } from 'node:url'
20
20
  import { HookBus, createPluginContext, createRouteTable, validatePluginModule } from '@/sdk/index.mjs'
21
21
 
22
+ // 延迟解析的产线权限服务(esbuild/别名下避免 nitro 打包循环导入;失败降级为拒绝一切)
23
+ let permissions = null
24
+ let userRepository = null
25
+ async function loadPermissions() {
26
+ if (permissions) return
27
+ try {
28
+ permissions = await import('@/server/services/workshop/permissions')
29
+ userRepository = await import('@/server/repositories/user.repository').then(m => m.userRepository)
30
+ }
31
+ catch (err) {
32
+ hostLoggerFallback()?.warn('权限服务加载失败(插件 ctx.permissions 降级):', err?.message)
33
+ }
34
+ }
35
+ function hostLoggerFallback() {
36
+ return globalThis.__awPluginHost?.logger ?? console
37
+ }
38
+
22
39
  const g = globalThis
23
40
 
24
41
  function log() {
@@ -163,6 +180,9 @@ async function loadAllPlugins(host, { config, paths }) {
163
180
  const disabled = readDisabledSet(homeDir)
164
181
  host.disabledSet = disabled
165
182
 
183
+ // 产线权限服务(ctx.permissions 注入用;失败降级)
184
+ await loadPermissions()
185
+
166
186
  const entries = discoverPluginDirs(host.cwd)
167
187
  if (entries.length) host.logger.info(`发现 ${entries.length} 个插件(停用 ${disabled.size}),开始装载 ...`)
168
188
 
@@ -249,6 +269,20 @@ async function loadAllPlugins(host, { config, paths }) {
249
269
  return fn
250
270
  },
251
271
  selfOrigin: () => selfOriginRef(host),
272
+ // 产线权限拓展面(SDK ctx.permissions):插件可查询/管理用户×产线授权
273
+ permissions: {
274
+ lineMode: (user, lineId) => permissions.lineMode(user, lineId),
275
+ visibleLineIds: user => permissions.visibleLineIds(user),
276
+ listGrants: userId => userRepository.listGrants(userId),
277
+ setGrants: (userId, entries, grantedBy = 'plugin') => {
278
+ for (const g of (entries ?? [])) {
279
+ if (!g?.lineId) continue
280
+ userRepository.setGrant(userId, String(g.lineId), (g.mode ?? null), grantedBy)
281
+ }
282
+ permissions.notifyGrantsChanged(userId)
283
+ return userRepository.listGrants(userId)
284
+ },
285
+ },
252
286
  })
253
287
  // DAQ 扩展面(v2 帧管线):插件注册自定义驱动与下沉处理器。
254
288
  // 桥经 globalThis 排队 —— daq 模块晚于插件宿主装载时,注册项先排队、
@@ -393,7 +427,10 @@ function ensureStateWatcher(host) {
393
427
  mkdirSync(dirname(statePath), { recursive: true })
394
428
  if (!existsSync(statePath)) writeDisabledSet(modePaths(host.cwd).homeDir, new Set())
395
429
  let debounce = null
396
- watch(statePath, () => {
430
+ // watch 目录而非文件:writeDisabledSet 用 rename 原子替换,POSIX 的文件级
431
+ // watch 挂在旧 inode 上,首次启停后静默失效;目录监听对 rename 稳定
432
+ watch(dirname(statePath), (_event, filename) => {
433
+ if (filename && filename !== 'plugins-state.json') return
397
434
  clearTimeout(debounce)
398
435
  debounce = setTimeout(() => {
399
436
  void reloadPluginHost()
@@ -26,6 +26,27 @@ function peers(): Set<WsPeer> {
26
26
  return g.__sceneEventPeers ??= new Set()
27
27
  }
28
28
 
29
+ /**
30
+ * per-peer 产线可见集(鉴权后由 ws 路由写入):
31
+ * undefined/null = 不限(admin/editor 或无产线维度帧场景)
32
+ * Set<lineId> = 仅授权产线的 scene 帧可见(数据面强制,与 REST 同口径)
33
+ */
34
+ export function setPeerVisibleLines(peer: WsPeer, visible: Set<string> | null): void {
35
+ (peer as WsPeer & { __awVisibleLines?: Set<string> | null }).__awVisibleLines = visible
36
+ }
37
+
38
+ function peerSeesLine(peer: WsPeer, lineId: string): boolean {
39
+ const visible = (peer as WsPeer & { __awVisibleLines?: Set<string> | null }).__awVisibleLines
40
+ if (visible == null) return true
41
+ return visible.has(lineId)
42
+ }
43
+
44
+ /** 帧产线归属:payload.lineId(daع.reading/frame、dcw.written/read 等);undefined = 线无关帧 */
45
+ function payloadLineId(payload: unknown): string | undefined {
46
+ const lid = (payload as { lineId?: unknown } | null)?.lineId
47
+ return typeof lid === 'string' && lid !== '' ? lid : undefined
48
+ }
49
+
29
50
  export function registerScenePeer(peer: WsPeer): void {
30
51
  peers().add(peer)
31
52
  }
@@ -40,13 +61,16 @@ export function sceneEventPeerCount(): number {
40
61
 
41
62
  /** 全员直推(channelId='' 不落库;死连接静默剔除)。
42
63
  * 信封序列化一次、全 peer 复用:dag 遥测经此出口 N 节点×P 页面/秒高频扇出,
43
- * per-peer 重复 stringify 是纯浪费。 */
64
+ * per-peer 重复 stringify 是纯浪费。
65
+ * 鉴权扇出:带 lineId 的帧按 peer 可见集过滤(未鉴权 peer 不会注册到本表)。 */
44
66
  export function broadcastSceneEvent(type: string, payload: unknown): void {
45
67
  // 插件宿主事件桥(event:<type> 钩子;宿主未装载时 no-op)——先于 peers 短路,插件不依赖在线页面
46
68
  emitPluginEvent(type, payload)
47
69
  if (peers().size === 0) return
70
+ const lineId = payloadLineId(payload)
48
71
  const frame = JSON.stringify({ v: AEP_VERSION, type, seq: 0, at: new Date().toISOString(), channelId: '', payload })
49
72
  for (const peer of peers()) {
73
+ if (lineId !== undefined && !peerSeesLine(peer, lineId)) continue
50
74
  try {
51
75
  peer.send(frame)
52
76
  }
@@ -22,13 +22,37 @@ function pidAlive(pid) {
22
22
 
23
23
  const waitSync = ms => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)
24
24
 
25
+ /**
26
+ * 校验目标 pid 是否真属本应用(锁文件 stale 后 PID 可能被无关进程复用,
27
+ * taskkill /T /F 打错目标是不可逆事故)。按进程命令行指纹匹配。
28
+ */
29
+ async function pidLooksLikeAw(pid) {
30
+ try {
31
+ if (process.platform === 'win32') {
32
+ const { spawnSync } = await import('node:child_process')
33
+ const r = spawnSync('powershell', ['-NoProfile', '-Command',
34
+ `(Get-CimInstance Win32_Process -Filter 'ProcessId=${Number(pid)}').CommandLine`], { encoding: 'utf8', timeout: 8000 })
35
+ const line = String(r.stdout ?? '')
36
+ return /node|aw|agentworkshop/i.test(line) && /start\.mjs|aw\.mjs|\.output/i.test(line)
37
+ }
38
+ const fs = await import('node:fs')
39
+ const line = fs.readFileSync(`/proc/${pid}/cmdline`, 'utf8').replace(/\0/g, ' ')
40
+ return /node|aw|agentworkshop/i.test(line)
41
+ }
42
+ catch {
43
+ return false // 无法确认:宁可放弃顶替,不冒杀错风险
44
+ }
45
+ }
46
+
25
47
  /**
26
48
  * 终止进程树并等待其死亡(供 `aw stop` 与 start 的"顶掉旧实例"共用)。
27
49
  * Windows:taskkill /T /F;POSIX:SIGTERM 宽限 5s → SIGKILL。
50
+ * PID 复用防护:强杀前校验目标命令行确实属于本应用,不像则拒绝并交由调用方报错。
28
51
  * @returns {Promise<boolean>} 是否已确认死亡
29
52
  */
30
53
  export async function terminatePid(pid) {
31
54
  if (!pidAlive(pid)) return true
55
+ if (!(await pidLooksLikeAw(pid))) return false
32
56
  if (process.platform === 'win32') {
33
57
  const { spawnSync } = await import('node:child_process')
34
58
  const r = spawnSync('taskkill', ['/PID', String(pid), '/T', '/F'], { encoding: 'utf8' })
@@ -410,6 +410,8 @@ export interface AepDaqReading {
410
410
  value: number
411
411
  state: DaqNodeState
412
412
  at: string
413
+ /** 所属产线(WS 鉴权扇出按线过滤;未挂线 = null,全员可见) */
414
+ lineId?: string | null
413
415
  }
414
416
 
415
417
  /** daq.frame 帧载荷(向量/图像帧实时下发;不含原始 blob —— 向量仅 ≤64 点预览,图像仅缩略图 URL) */