agentworkshop 0.7.54 → 0.7.59

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 (1356) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +2418 -2184
  2. package/.env.example +1 -0
  3. package/.output/.AgentWorkShop/prompts/host-tools.json +2418 -2184
  4. package/.output/.AgentWorkShop/schema.json +140 -138
  5. package/.output/nitro.json +1 -1
  6. package/.output/public/_nuxt/2pU5BiaQ2.js +1 -0
  7. package/.output/public/_nuxt/{BdF9OAZq2.js → 4RTUlYvj2.js} +1 -1
  8. package/.output/public/_nuxt/AuthGate.Cvsc4atp.css +1 -0
  9. package/.output/public/_nuxt/B-Y_rsfn.js +106 -0
  10. package/.output/public/_nuxt/{BhcbvVOa2.js → B02cxZz72.js} +1 -1
  11. package/.output/public/_nuxt/{DNZmwhSD.js → B03LfmKR.js} +1 -1
  12. package/.output/public/_nuxt/{BZtgVXC5.js → B4R5CHkk.js} +3 -3
  13. package/.output/public/_nuxt/{B3zB6K6m.js → BAqtRt0q.js} +1 -1
  14. package/.output/public/_nuxt/BDC8YDyc.js +1 -0
  15. package/.output/public/_nuxt/{uY58gQqR2.js → BG7XSX-S2.js} +1 -1
  16. package/.output/public/_nuxt/{DUribplv2.js → BH30ZaLl2.js} +1 -1
  17. package/.output/public/_nuxt/BKHd_sKD2.js +47 -0
  18. package/.output/public/_nuxt/{S9rLP7_v.js → BMUEVeOK.js} +1 -1
  19. package/.output/public/_nuxt/{D9TpiWjt.js → BMZ1d25O.js} +1 -1
  20. package/.output/public/_nuxt/{DFhyhDGa2.js → BNl_jGa12.js} +1 -1
  21. package/.output/public/_nuxt/{BxoaZc_U2.js → BSG-4Ecg2.js} +1 -1
  22. package/.output/public/_nuxt/{BPqXOlYX.js → BU7WuuKh.js} +1 -1
  23. package/.output/public/_nuxt/{BP8TgWo02.js → BVH9j8dQ2.js} +1 -1
  24. package/.output/public/_nuxt/{C7_F68I7.js → BXKCB3rS.js} +1 -1
  25. package/.output/public/_nuxt/{DioKmYyB2.js → Bd85nb9X2.js} +1 -1
  26. package/.output/public/_nuxt/BhrnGVGz.js +1 -0
  27. package/.output/public/_nuxt/BikIgp9R.js +1 -0
  28. package/.output/public/_nuxt/Bj7BcqHn.js +1 -0
  29. package/.output/public/_nuxt/BkGqyjWm.js +3 -0
  30. package/.output/public/_nuxt/{CP0Nep9S.js → BkO2MZZU.js} +1 -1
  31. package/.output/public/_nuxt/{KXjvpIk2.js → Bn1N3mJv.js} +1 -1
  32. package/.output/public/_nuxt/Br2LgfbH2.js +13 -0
  33. package/.output/public/_nuxt/BrFF_9742.js +1 -0
  34. package/.output/public/_nuxt/{tKxYgsf-.js → BtDBBofS.js} +1 -1
  35. package/.output/public/_nuxt/BtNT93vm2.js +1 -0
  36. package/.output/public/_nuxt/{BxWvUgMz2.js → BtYg4aGR2.js} +1 -1
  37. package/.output/public/_nuxt/BuVH9MB-.js +1 -0
  38. package/.output/public/_nuxt/BupBjt6B2.js +1 -0
  39. package/.output/public/_nuxt/{D2Sm-GTk2.js → ByvqxkcN.js} +1 -1
  40. package/.output/public/_nuxt/{CzlUIbK32.js → BzKT-ne_2.js} +3 -3
  41. package/.output/public/_nuxt/{vPfDYgvR.js → C4X_Z1lA.js} +1 -1
  42. package/.output/public/_nuxt/C5wBzGO7.js +1 -0
  43. package/.output/public/_nuxt/{BgnhB8r5.js → C8uaVABF.js} +1 -1
  44. package/.output/public/_nuxt/{BmTzcKJg2.js → C98jxVaK.js} +1 -1
  45. package/.output/public/_nuxt/CBATzTUf.js +13 -0
  46. package/.output/public/_nuxt/{B9rIcCX12.js → CCCq9H7D2.js} +1 -1
  47. package/.output/public/_nuxt/{CvGYm7w8.js → CEP4UrDv.js} +1 -1
  48. package/.output/public/_nuxt/CHyzK5m52.js +1 -0
  49. package/.output/public/_nuxt/CIPKYgrH2.js +1 -0
  50. package/.output/public/_nuxt/{Drq9iy6V.js → CIz7SM4H.js} +1 -1
  51. package/.output/public/_nuxt/{PY2GW_3N2.js → CKE_kTL92.js} +1 -1
  52. package/.output/public/_nuxt/CPSHP_EI.js +1 -0
  53. package/.output/public/_nuxt/{DCPhrNWR2.js → CSyIwYcJ2.js} +1 -1
  54. package/.output/public/_nuxt/{v55S8LnT.js → CW1HGp5X.js} +1 -1
  55. package/.output/public/_nuxt/{Yv9YItEX2.js → CYGkUj5M2.js} +1 -1
  56. package/.output/public/_nuxt/{DppqsiPC.js → CZ0Gt81h.js} +2 -2
  57. package/.output/public/_nuxt/{Cg8Pgbeu.js → CZkTlW93.js} +2 -2
  58. package/.output/public/_nuxt/{Dz2SLIde.js → CZwDnomB.js} +1 -1
  59. package/.output/public/_nuxt/{DnAn2LgG.js → CZyYdpqZ2.js} +1 -1
  60. package/.output/public/_nuxt/{BJhsCisg2.js → CaBVMdqG2.js} +1 -1
  61. package/.output/public/_nuxt/{CMWyj56j.js → CeDkXWCz.js} +1 -1
  62. package/.output/public/_nuxt/{C-y_g11k.js → Cl19UD7U.js} +1 -1
  63. package/.output/public/_nuxt/ClEbKcuS.js +1 -0
  64. package/.output/public/_nuxt/{B4ujjkUI.js → ClrkV0C4.js} +1 -1
  65. package/.output/public/_nuxt/{nT-bgxvf.js → CmTqFlYZ.js} +1 -1
  66. package/.output/public/_nuxt/{deBcbALe2.js → CnF6dXcZ2.js} +1 -1
  67. package/.output/public/_nuxt/CoGETbe-2.js +1 -0
  68. package/.output/public/_nuxt/{Dq0emNZi2.js → CuRtzvsa2.js} +1 -1
  69. package/.output/public/_nuxt/{CBUIODly2.js → Cv_H1gOM2.js} +1 -1
  70. package/.output/public/_nuxt/{Cmp8PMrA.js → CxLxiOGV.js} +1 -1
  71. package/.output/public/_nuxt/{MbT4wXb62.js → D1Xw30Dj2.js} +1 -1
  72. package/.output/public/_nuxt/{DJyNDnag.js → D5hI4Fhu.js} +1 -1
  73. package/.output/public/_nuxt/D5i2ofVw2.js +1 -0
  74. package/.output/public/_nuxt/D6XGn5vM.js +2 -0
  75. package/.output/public/_nuxt/{DjefmmJu.js → D6c5ppqB.js} +1 -1
  76. package/.output/public/_nuxt/D8VQGThE.js +28 -0
  77. package/.output/public/_nuxt/{DmzmgYHb2.js → DBwuADr82.js} +1 -1
  78. package/.output/public/_nuxt/{DO9xaI9a.js → DEhjFhZ2.js} +1 -1
  79. package/.output/public/_nuxt/{DuPM4HXw.js → DIDbAMv5.js} +1 -1
  80. package/.output/public/_nuxt/{CfLUvgr32.js → DJZzthKt2.js} +1 -1
  81. package/.output/public/_nuxt/{Bpkm4W5P.js → DKhRushG.js} +1 -1
  82. package/.output/public/_nuxt/DLAFNaPf.js +1 -0
  83. package/.output/public/_nuxt/{DffgG8vT.js → DMPpE41S2.js} +1 -1
  84. package/.output/public/_nuxt/{CPeZNE4S2.js → DTZO6WMs2.js} +1 -1
  85. package/.output/public/_nuxt/{Dk6Zf3-L.js → DTx_DtUo.js} +1 -1
  86. package/.output/public/_nuxt/DYtV50yi2.js +1 -0
  87. package/.output/public/_nuxt/{CV61ysvv.js → DctCtJq7.js} +1 -1
  88. package/.output/public/_nuxt/{xX7ccjDl2.js → DelESEcl2.js} +1 -1
  89. package/.output/public/_nuxt/DfqRQSFn.js +19 -0
  90. package/.output/public/_nuxt/{BFZIll912.js → DgldLfCZ2.js} +1 -1
  91. package/.output/public/_nuxt/Dmgqz2np.js +16 -0
  92. package/.output/public/_nuxt/Do0dCE8C2.js +1 -0
  93. package/.output/public/_nuxt/DraEWn4N2.js +1 -0
  94. package/.output/public/_nuxt/{Bwc6lt2X.js → Drhta6gr.js} +2 -2
  95. package/.output/public/_nuxt/{Cn6ihm8j.js → Du0zf-d3.js} +1 -1
  96. package/.output/public/_nuxt/{DqtnqNgL2.js → DvUt9uMt2.js} +1 -1
  97. package/.output/public/_nuxt/{C5cf3T4d.js → Dxo1GW5U.js} +1 -1
  98. package/.output/public/_nuxt/{Ca3iDJwu2.js → Dy-V8OEW2.js} +9 -9
  99. package/.output/public/_nuxt/{BWowAAJb.js → DyMgrV29.js} +1 -1
  100. package/.output/public/_nuxt/{Dm_iKz8k2.js → Eo2BYEIo2.js} +1 -1
  101. package/.output/public/_nuxt/{aV6YPjg02.js → H7Rbu32y2.js} +1 -1
  102. package/.output/public/_nuxt/{vXrNItas2.js → KS3KQF222.js} +1 -1
  103. package/.output/public/_nuxt/{BjWbbMHs.js → M58CVYnv.js} +1 -1
  104. package/.output/public/_nuxt/M6NcguDO.js +1 -0
  105. package/.output/public/_nuxt/{CtPNnATm2.js → MEwEMEMl2.js} +6 -6
  106. package/.output/public/_nuxt/MW-V7IIP2.js +1 -0
  107. package/.output/public/_nuxt/{tq3HbWr9.js → P0EcfD3j.js} +1 -1
  108. package/.output/public/_nuxt/{CHrErv1E.js → TjGWqrHo.js} +1 -1
  109. package/.output/public/_nuxt/{TownView.Xt1yygrh.css → TownView.BuMpDRkf.css} +1 -1
  110. package/.output/public/_nuxt/VVomhVqu2.js +1 -0
  111. package/.output/public/_nuxt/{QHo9mN-M2.js → WYqAa0r52.js} +1 -1
  112. package/.output/public/_nuxt/YDs3mbQu2.js +1 -0
  113. package/.output/public/_nuxt/{Dep0Hc9w2.js → Z3MSTcdu2.js} +1 -1
  114. package/.output/public/_nuxt/_id_.DOqX4gwB.css +1 -0
  115. package/.output/public/_nuxt/_vR_sc7t.js +24 -0
  116. package/.output/public/_nuxt/{aml.-czpKIs8.css → aml.BeFTP6_M.css} +1 -1
  117. package/.output/public/_nuxt/bTFhJlrI2.js +1 -0
  118. package/.output/public/_nuxt/builds/latest.json +1 -1
  119. package/.output/public/_nuxt/builds/meta/92fd7e2e-18f2-45c3-8588-d93004dda6e3.json +1 -0
  120. package/.output/public/_nuxt/daq.YQas76du.css +1 -0
  121. package/.output/public/_nuxt/dcw.UIcWRyIS.css +1 -0
  122. package/.output/public/_nuxt/{default.CyLpQD1C.css → default.8ac6QU28.css} +1 -1
  123. package/.output/public/_nuxt/{entry.JdEG3KJg.css → entry.BHNNQA9H.css} +1 -1
  124. package/.output/public/_nuxt/{D-Xyb3DA.js → gbaq2UOO.js} +1 -1
  125. package/.output/public/_nuxt/goF_oZHF.js +2 -0
  126. package/.output/public/_nuxt/h46i74oE.js +14 -0
  127. package/.output/public/_nuxt/{Cpm5JYv4.js → iZa330UY.js} +1 -1
  128. package/.output/public/_nuxt/logs.Bf65Kw17.css +1 -0
  129. package/.output/public/_nuxt/lyJsJl_G.js +1 -0
  130. package/.output/public/_nuxt/o-G6YtmK2.js +1 -0
  131. package/.output/public/_nuxt/{BkfA3BbD.js → pNy4V4kd.js} +1 -1
  132. package/.output/public/_nuxt/{C_sjV3Ee.js → pncSmP5n.js} +1 -1
  133. package/.output/public/_nuxt/{DVOR2pWg.js → qIQFsHtF.js} +1 -1
  134. package/.output/public/_nuxt/town.DFotRPod.css +1 -0
  135. package/.output/public/_nuxt/workshop.BX2YeO0g.css +1 -0
  136. package/.output/public/_nuxt/yPlLXpEw2.js +1 -0
  137. package/.output/public/_nuxt/ylowSquM2.js +1 -0
  138. package/.output/public/_nuxt/{Da0h_6VA.js → zGDAozGA.js} +4 -4
  139. package/.output/server/chunks/_/binding-authz.mjs +8 -4
  140. package/.output/server/chunks/_/binding-authz.mjs.map +1 -1
  141. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  142. package/.output/server/chunks/_/entity.mjs +1 -1
  143. package/.output/server/chunks/_/host-bindings.mjs +22 -2
  144. package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
  145. package/.output/server/chunks/_/nitro.mjs +13085 -8339
  146. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  147. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  148. package/.output/server/chunks/_/user.schema.mjs +5 -1
  149. package/.output/server/chunks/_/user.schema.mjs.map +1 -1
  150. package/.output/server/chunks/build/{workshop-BDqWzJtr.mjs → AuthGate-DDPYswkA.mjs} +22 -327
  151. package/.output/server/chunks/build/AuthGate-DDPYswkA.mjs.map +1 -0
  152. package/.output/server/chunks/build/FormItemContext-4ORSzhWv.mjs +1 -1
  153. package/.output/server/chunks/build/{OmpTerminalPanel-mk31gVzA.mjs → OmpTerminalPanel-DZ2wHMS1.mjs} +4 -4
  154. package/.output/server/chunks/build/{OmpTerminalPanel-mk31gVzA.mjs.map → OmpTerminalPanel-DZ2wHMS1.mjs.map} +1 -1
  155. package/.output/server/chunks/build/{TownView-Bf5VFYFj.mjs → TownView-CZbFn6mO.mjs} +216 -107
  156. package/.output/server/chunks/build/TownView-CZbFn6mO.mjs.map +1 -0
  157. package/.output/server/chunks/build/{_id_-WF20tjqT.mjs → _id_-CCVhpJtj.mjs} +7 -6
  158. package/.output/server/chunks/build/_id_-CCVhpJtj.mjs.map +1 -0
  159. package/.output/server/chunks/build/{_id_-CuUmVPRg.mjs → _id_-Df2pgsAq.mjs} +521 -94
  160. package/.output/server/chunks/build/_id_-Df2pgsAq.mjs.map +1 -0
  161. package/.output/server/chunks/build/{_wsId_-BUIKB68b.mjs → _wsId_-CJqF-hmP.mjs} +19 -19
  162. package/.output/server/chunks/build/{_wsId_-BUIKB68b.mjs.map → _wsId_-CJqF-hmP.mjs.map} +1 -1
  163. package/.output/server/chunks/build/{agents-DqICy4AL.mjs → agents-BTsbna5H.mjs} +13 -13
  164. package/.output/server/chunks/build/{agents-DqICy4AL.mjs.map → agents-BTsbna5H.mjs.map} +1 -1
  165. package/.output/server/chunks/build/{aml-C55iuLn-.mjs → aml-BBKfWto1.mjs} +28 -27
  166. package/.output/server/chunks/build/aml-BBKfWto1.mjs.map +1 -0
  167. package/.output/server/chunks/build/api-B4Om0mEc.mjs +2 -1
  168. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -1
  169. package/.output/server/chunks/build/{card-CUSocE9p.mjs → card-DJOYGuVH.mjs} +4 -4
  170. package/.output/server/chunks/build/{card-CUSocE9p.mjs.map → card-DJOYGuVH.mjs.map} +1 -1
  171. package/.output/server/chunks/build/{channel-templates-gdCLajKy.mjs → channel-templates-BPKJ8e4l.mjs} +9 -9
  172. package/.output/server/chunks/build/{channel-templates-gdCLajKy.mjs.map → channel-templates-BPKJ8e4l.mjs.map} +1 -1
  173. package/.output/server/chunks/build/constants-HPHJvjne.mjs +2 -1
  174. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  175. package/.output/server/chunks/build/{daq-D0kLscVr.mjs → daq-Cz7TaUAM.mjs} +38 -29
  176. package/.output/server/chunks/build/daq-Cz7TaUAM.mjs.map +1 -0
  177. package/.output/server/chunks/build/{dcw-DuhEyu7S.mjs → dcw-EhjJpVQM.mjs} +45 -20
  178. package/.output/server/chunks/build/dcw-EhjJpVQM.mjs.map +1 -0
  179. package/.output/server/chunks/build/{default-aFGiNebw.mjs → default-DweMY872.mjs} +260 -48
  180. package/.output/server/chunks/build/{default-aFGiNebw.mjs.map → default-DweMY872.mjs.map} +1 -1
  181. package/.output/server/chunks/build/{dropdown-Yev6knaj.mjs → dropdown-CIsqbX4P.mjs} +2 -2
  182. package/.output/server/chunks/build/{dropdown-Yev6knaj.mjs.map → dropdown-CIsqbX4P.mjs.map} +1 -1
  183. package/.output/server/chunks/build/{dropdown-KdKWCS5K.mjs → dropdown-CV9GW3z9.mjs} +5 -5
  184. package/.output/server/chunks/build/{dropdown-KdKWCS5K.mjs.map → dropdown-CV9GW3z9.mjs.map} +1 -1
  185. package/.output/server/chunks/build/{form-uSlNqIAV.mjs → form-cs_RcfGx.mjs} +4 -5
  186. package/.output/server/chunks/build/{form-uSlNqIAV.mjs.map → form-cs_RcfGx.mjs.map} +1 -1
  187. package/.output/server/chunks/{_/SearchOutlined.mjs → build/input-CobQ5LJ5.mjs} +1476 -103
  188. package/.output/server/chunks/build/input-CobQ5LJ5.mjs.map +1 -0
  189. package/.output/server/chunks/build/{input-number-BRVnxeiA.mjs → input-number-BpPYAWMk.mjs} +4 -4
  190. package/.output/server/chunks/build/{input-number-BRVnxeiA.mjs.map → input-number-BpPYAWMk.mjs.map} +1 -1
  191. package/.output/server/chunks/build/{logs-BlOalbsZ.mjs → logs-As9fZqU-.mjs} +49 -35
  192. package/.output/server/chunks/build/logs-As9fZqU-.mjs.map +1 -0
  193. package/.output/server/chunks/build/{menu-BgkRSSx7.mjs → menu-CVmvHyFT.mjs} +3 -3
  194. package/.output/server/chunks/build/{menu-BgkRSSx7.mjs.map → menu-CVmvHyFT.mjs.map} +1 -1
  195. package/.output/server/chunks/build/{monitor-DX_K0WMq.mjs → monitor-CdFQ2z4g.mjs} +17 -17
  196. package/.output/server/chunks/build/{monitor-DX_K0WMq.mjs.map → monitor-CdFQ2z4g.mjs.map} +1 -1
  197. package/.output/server/chunks/build/{operations-BD6LK-Yz.mjs → operations-B2gHCWgZ.mjs} +7 -6
  198. package/.output/server/chunks/build/operations-B2gHCWgZ.mjs.map +1 -0
  199. package/.output/server/chunks/build/{pages-DloBBvU5.mjs → pages-BItCt1ar.mjs} +5 -4
  200. package/.output/server/chunks/build/pages-BItCt1ar.mjs.map +1 -0
  201. package/.output/server/chunks/build/{permissions-BvmodvsO.mjs → permissions-D6mQw_9j.mjs} +12 -12
  202. package/.output/server/chunks/build/{permissions-BvmodvsO.mjs.map → permissions-D6mQw_9j.mjs.map} +1 -1
  203. package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs +2 -1
  204. package/.output/server/chunks/build/plugins-NAS9MQ5r.mjs.map +1 -1
  205. package/.output/server/chunks/build/{popconfirm-Ox-_2V8A.mjs → popconfirm-DFfoFhmt.mjs} +2 -2
  206. package/.output/server/chunks/build/{popconfirm-Ox-_2V8A.mjs.map → popconfirm-DFfoFhmt.mjs.map} +1 -1
  207. package/.output/server/chunks/build/{schedules-D8vYHgQ5.mjs → schedules-BjWNDWL5.mjs} +16 -16
  208. package/.output/server/chunks/build/{schedules-D8vYHgQ5.mjs.map → schedules-BjWNDWL5.mjs.map} +1 -1
  209. package/.output/server/chunks/build/{segmented-C61yLHvo.mjs → segmented-D7FkCgg7.mjs} +2 -2
  210. package/.output/server/chunks/build/{segmented-C61yLHvo.mjs.map → segmented-D7FkCgg7.mjs.map} +1 -1
  211. package/.output/server/chunks/build/{select-rdBWytVK.mjs → select-FqBNxgxT.mjs} +3 -3
  212. package/.output/server/chunks/build/{select-rdBWytVK.mjs.map → select-FqBNxgxT.mjs.map} +1 -1
  213. package/.output/server/chunks/build/{settings-B7HA-sdb.mjs → settings-Cl_KRyEn.mjs} +9 -9
  214. package/.output/server/chunks/build/{settings-B7HA-sdb.mjs.map → settings-Cl_KRyEn.mjs.map} +1 -1
  215. package/.output/server/chunks/build/{table-DOFAvY-v.mjs → table-CeOYERqr.mjs} +8 -9
  216. package/.output/server/chunks/build/{table-DOFAvY-v.mjs.map → table-CeOYERqr.mjs.map} +1 -1
  217. package/.output/server/chunks/build/{tabs-DTeIuZeP.mjs → tabs-LLNSdLl2.mjs} +5 -6
  218. package/.output/server/chunks/build/{tabs-DTeIuZeP.mjs.map → tabs-LLNSdLl2.mjs.map} +1 -1
  219. package/.output/server/chunks/build/{tag-CHLGvNM6.mjs → tag-Dwvkh0Dj.mjs} +2 -3
  220. package/.output/server/chunks/build/{tag-CHLGvNM6.mjs.map → tag-Dwvkh0Dj.mjs.map} +1 -1
  221. package/.output/server/chunks/build/{teams-wM-MdLv9.mjs → teams-CGDZHaQl.mjs} +11 -11
  222. package/.output/server/chunks/build/{teams-wM-MdLv9.mjs.map → teams-CGDZHaQl.mjs.map} +1 -1
  223. package/.output/server/chunks/build/{tokens-CloWk4x_.mjs → tokens-BOYkZuoB.mjs} +13 -13
  224. package/.output/server/chunks/build/{tokens-CloWk4x_.mjs.map → tokens-BOYkZuoB.mjs.map} +1 -1
  225. package/.output/server/chunks/build/{town-BIn3be5v.mjs → town-BV-hbwb5.mjs} +41 -6
  226. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -0
  227. package/.output/server/chunks/build/{town-B2gBu_ZE.mjs → town-P1rYoi0v.mjs} +7 -6
  228. package/.output/server/chunks/build/town-P1rYoi0v.mjs.map +1 -0
  229. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  230. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs +2 -1
  231. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs.map +1 -1
  232. package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs +2 -1
  233. package/.output/server/chunks/build/useAgentTemplateActions-DsBRUQni.mjs.map +1 -1
  234. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +2 -1
  235. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  236. package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs +2 -1
  237. package/.output/server/chunks/build/useAgentTemplateForm-DzQ_t2Ue.mjs.map +1 -1
  238. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs +2 -1
  239. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs.map +1 -1
  240. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +2 -1
  241. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -1
  242. package/.output/server/chunks/build/useAmlEntities-BMLHU_39.mjs +3 -2
  243. package/.output/server/chunks/build/useAmlEntities-BMLHU_39.mjs.map +1 -1
  244. package/.output/server/chunks/build/useAmlEnv-DdlyVzPu.mjs +2 -1
  245. package/.output/server/chunks/build/useAmlEnv-DdlyVzPu.mjs.map +1 -1
  246. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +2 -1
  247. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -1
  248. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +2 -1
  249. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  250. package/.output/server/chunks/build/{useAmlJobs--a_1ovew.mjs → useAmlJobs-BG_v21hJ.mjs} +4 -3
  251. package/.output/server/chunks/build/useAmlJobs-BG_v21hJ.mjs.map +1 -0
  252. package/.output/server/chunks/build/useAmlModels-D7MuOWOy.mjs +2 -1
  253. package/.output/server/chunks/build/useAmlModels-D7MuOWOy.mjs.map +1 -1
  254. package/.output/server/chunks/build/useAmlNotes-CTZe-GI0.mjs +2 -1
  255. package/.output/server/chunks/build/useAmlNotes-CTZe-GI0.mjs.map +1 -1
  256. package/.output/server/chunks/build/useAmlPredict-BToRrVRV.mjs +2 -1
  257. package/.output/server/chunks/build/useAmlPredict-BToRrVRV.mjs.map +1 -1
  258. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs +3 -2
  259. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs.map +1 -1
  260. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs +2 -1
  261. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs.map +1 -1
  262. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs +2 -1
  263. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs.map +1 -1
  264. package/.output/server/chunks/build/{useDaqDetailHistory-pfi6zXWU.mjs → useDaqDetailHistory-C4LWayu1.mjs} +4 -3
  265. package/.output/server/chunks/build/useDaqDetailHistory-C4LWayu1.mjs.map +1 -0
  266. package/.output/server/chunks/build/{useDaqDetailNode-qT7MjqJ7.mjs → useDaqDetailNode-DXgwAu5u.mjs} +5 -4
  267. package/.output/server/chunks/build/useDaqDetailNode-DXgwAu5u.mjs.map +1 -0
  268. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs +3 -2
  269. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs.map +1 -1
  270. package/.output/server/chunks/build/{useDaqFilters-CMysN13f.mjs → useDaqFilters-Jx6EERfr.mjs} +5 -4
  271. package/.output/server/chunks/build/useDaqFilters-Jx6EERfr.mjs.map +1 -0
  272. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +2 -1
  273. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  274. package/.output/server/chunks/build/{useDaqOptimizations-Coq5lsfM.mjs → useDaqOptimizations-C5N4bcu4.mjs} +4 -3
  275. package/.output/server/chunks/build/useDaqOptimizations-C5N4bcu4.mjs.map +1 -0
  276. package/.output/server/chunks/build/useDaqStream-DhzdoyIR.mjs +1 -1
  277. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs +3 -2
  278. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs.map +1 -1
  279. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +2 -1
  280. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  281. package/.output/server/chunks/build/{useDashboardData-DgJcGJaF.mjs → useDashboardData-Ce-EU5DJ.mjs} +4 -3
  282. package/.output/server/chunks/build/useDashboardData-Ce-EU5DJ.mjs.map +1 -0
  283. package/.output/server/chunks/build/{useDcwAddNode-C9DbEKHi.mjs → useDcwAddNode-4mTPQ6T8.mjs} +38 -4
  284. package/.output/server/chunks/build/useDcwAddNode-4mTPQ6T8.mjs.map +1 -0
  285. package/.output/server/chunks/build/{useDcwCards-VDoMYG7l.mjs → useDcwCards-DvLGgUYr.mjs} +4 -3
  286. package/.output/server/chunks/build/useDcwCards-DvLGgUYr.mjs.map +1 -0
  287. package/.output/server/chunks/build/{useDcwDetailScope-CL97tJdJ.mjs → useDcwDetailScope-4j3B03Pi.mjs} +4 -3
  288. package/.output/server/chunks/build/useDcwDetailScope-4j3B03Pi.mjs.map +1 -0
  289. package/.output/server/chunks/build/{useDcwDetailTemplates-OLmjMSGD.mjs → useDcwDetailTemplates-yzNEAMK-.mjs} +4 -3
  290. package/.output/server/chunks/build/useDcwDetailTemplates-yzNEAMK-.mjs.map +1 -0
  291. package/.output/server/chunks/build/{useDcwFilter-Bs9C6-h_.mjs → useDcwFilter-BQDmQYY0.mjs} +4 -3
  292. package/.output/server/chunks/build/useDcwFilter-BQDmQYY0.mjs.map +1 -0
  293. package/.output/server/chunks/build/{useDcwLedger-Bbf_iFOY.mjs → useDcwLedger-DWGufEor.mjs} +4 -3
  294. package/.output/server/chunks/build/useDcwLedger-DWGufEor.mjs.map +1 -0
  295. package/.output/server/chunks/build/{useDcwLineMutations-Bhtuqw7J.mjs → useDcwLineMutations-DHF-Bemn.mjs} +4 -3
  296. package/.output/server/chunks/build/useDcwLineMutations-DHF-Bemn.mjs.map +1 -0
  297. package/.output/server/chunks/build/{useDcwLineRun-CGqZSnG4.mjs → useDcwLineRun-VFe35xou.mjs} +4 -3
  298. package/.output/server/chunks/build/useDcwLineRun-VFe35xou.mjs.map +1 -0
  299. package/.output/server/chunks/build/{useDcwParamApprovals-BBwdFsKv.mjs → useDcwParamApprovals-Bc0BGBds.mjs} +8 -7
  300. package/.output/server/chunks/build/useDcwParamApprovals-Bc0BGBds.mjs.map +1 -0
  301. package/.output/server/chunks/build/{useDcwProducts-BoBkJqpv.mjs → useDcwProducts-DXisXYMh.mjs} +4 -3
  302. package/.output/server/chunks/build/useDcwProducts-DXisXYMh.mjs.map +1 -0
  303. package/.output/server/chunks/build/{useDcwQuery-DP7b2qb6.mjs → useDcwQuery-Cmo3UtIQ.mjs} +4 -3
  304. package/.output/server/chunks/build/useDcwQuery-Cmo3UtIQ.mjs.map +1 -0
  305. package/.output/server/chunks/build/{useDcwQuickActions-DHRiA9KN.mjs → useDcwQuickActions-BkAcxVnj.mjs} +4 -3
  306. package/.output/server/chunks/build/useDcwQuickActions-BkAcxVnj.mjs.map +1 -0
  307. package/.output/server/chunks/build/{useDcwRecipes-CIMeH2oF.mjs → useDcwRecipes-BvtGPQJ9.mjs} +16 -5
  308. package/.output/server/chunks/build/useDcwRecipes-BvtGPQJ9.mjs.map +1 -0
  309. package/.output/server/chunks/build/{useDcwStream-B9ugUWRq.mjs → useDcwStream-BXJ2V8HM.mjs} +12 -2
  310. package/.output/server/chunks/build/{useDcwStream-B9ugUWRq.mjs.map → useDcwStream-BXJ2V8HM.mjs.map} +1 -1
  311. package/.output/server/chunks/build/{useDcwTemplates-M_-qjV8E.mjs → useDcwTemplates-Zxz2DPdu.mjs} +4 -3
  312. package/.output/server/chunks/build/useDcwTemplates-Zxz2DPdu.mjs.map +1 -0
  313. package/.output/server/chunks/build/{useDcwWrites-D94dAzqr.mjs → useDcwWrites-66CKxcos.mjs} +4 -3
  314. package/.output/server/chunks/build/useDcwWrites-66CKxcos.mjs.map +1 -0
  315. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs +106 -0
  316. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs.map +1 -0
  317. package/.output/server/chunks/build/{useLocalTime-DZ2RAtVs.mjs → useLocalTime-CUnDHV5V.mjs} +8 -2
  318. package/.output/server/chunks/build/useLocalTime-CUnDHV5V.mjs.map +1 -0
  319. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +2 -1
  320. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  321. package/.output/server/chunks/build/useLogsManual-CMjD62nt.mjs +2 -1
  322. package/.output/server/chunks/build/useLogsManual-CMjD62nt.mjs.map +1 -1
  323. package/.output/server/chunks/build/{useLogsQuery-2x1mKxT1.mjs → useLogsQuery-C5nadU1m.mjs} +15 -4
  324. package/.output/server/chunks/build/useLogsQuery-C5nadU1m.mjs.map +1 -0
  325. package/.output/server/chunks/build/{useLogsScope-04cUJCU-.mjs → useLogsScope-DgrB1ur3.mjs} +4 -3
  326. package/.output/server/chunks/build/useLogsScope-DgrB1ur3.mjs.map +1 -0
  327. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs +2 -1
  328. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs.map +1 -1
  329. package/.output/server/chunks/build/{useMonitorData-guVjMDtR.mjs → useMonitorData-D2gFSonG.mjs} +4 -3
  330. package/.output/server/chunks/build/useMonitorData-D2gFSonG.mjs.map +1 -0
  331. package/.output/server/chunks/build/{useMonitorFormat-C7lhZe4g.mjs → useMonitorFormat-DRCXsKwh.mjs} +4 -3
  332. package/.output/server/chunks/build/useMonitorFormat-DRCXsKwh.mjs.map +1 -0
  333. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +2 -1
  334. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  335. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs +2 -1
  336. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs.map +1 -1
  337. package/.output/server/chunks/build/useOpsLog-SnWPuRtK.mjs.map +1 -1
  338. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs +155 -0
  339. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs.map +1 -0
  340. package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs +2 -1
  341. package/.output/server/chunks/build/useTeamActions-BOLQkYxg.mjs.map +1 -1
  342. package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs +2 -1
  343. package/.output/server/chunks/build/useTeamAddMemberDialog-BCgrLPxI.mjs.map +1 -1
  344. package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs +2 -1
  345. package/.output/server/chunks/build/useTeamCreateDialog-CJk40LqS.mjs.map +1 -1
  346. package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs +2 -1
  347. package/.output/server/chunks/build/useTeamDeployDialog-49hdUXQP.mjs.map +1 -1
  348. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +2 -1
  349. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  350. package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs +2 -1
  351. package/.output/server/chunks/build/useTeamPluginDialog-Dh-QOoiU.mjs.map +1 -1
  352. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs +2 -1
  353. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs.map +1 -1
  354. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +2 -1
  355. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  356. package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs +2 -1
  357. package/.output/server/chunks/build/useTokenCreate-DkYvEQUD.mjs.map +1 -1
  358. package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs +2 -1
  359. package/.output/server/chunks/build/useTokenRename-DOCP4aeI.mjs.map +1 -1
  360. package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs +2 -1
  361. package/.output/server/chunks/build/useTokenReveal-CybwwflV.mjs.map +1 -1
  362. package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs +2 -1
  363. package/.output/server/chunks/build/useTokensList-BLiMvrc4.mjs.map +1 -1
  364. package/.output/server/chunks/build/{useWorkbenchAuth-DqjBX-6w.mjs → useWorkbenchAuth-DAabQl7X.mjs} +6 -2
  365. package/.output/server/chunks/build/useWorkbenchAuth-DAabQl7X.mjs.map +1 -0
  366. package/.output/server/chunks/build/{useWorkbenchWorkspaces-GQVU9BLv.mjs → useWorkbenchWorkspaces-6-mpCGCR.mjs} +5 -4
  367. package/.output/server/chunks/build/useWorkbenchWorkspaces-6-mpCGCR.mjs.map +1 -0
  368. package/.output/server/chunks/build/{useWorkshopWs-CgeCsaYJ.mjs → useWorkshopWs-CM-Ywk4h.mjs} +2 -2
  369. package/.output/server/chunks/build/{useWorkshopWs-CgeCsaYJ.mjs.map → useWorkshopWs-CM-Ywk4h.mjs.map} +1 -1
  370. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +2 -1
  371. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
  372. package/.output/server/chunks/build/{useWorkspaceChannels-B13vROC1.mjs → useWorkspaceChannels--65yU02b.mjs} +5 -4
  373. package/.output/server/chunks/build/useWorkspaceChannels--65yU02b.mjs.map +1 -0
  374. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +2 -1
  375. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  376. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +2 -1
  377. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
  378. package/.output/server/chunks/build/{users-CCf5PgRs.mjs → users-B_pHStEa.mjs} +13 -13
  379. package/.output/server/chunks/build/{users-CCf5PgRs.mjs.map → users-B_pHStEa.mjs.map} +1 -1
  380. package/.output/server/chunks/build/workshop-C0DefygA.mjs +522 -0
  381. package/.output/server/chunks/build/workshop-C0DefygA.mjs.map +1 -0
  382. package/.output/server/chunks/routes/api/health.get.mjs +12 -2
  383. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/index.get.mjs +4 -3
  385. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/index.post.mjs +3 -2
  387. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/mcp/workshop.mjs +3 -2
  389. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/metrics.mjs +11 -1
  391. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +2 -1
  393. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +2 -1
  395. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +2 -1
  397. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +2 -1
  399. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +2 -1
  401. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +4 -3
  403. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +2 -1
  405. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +2 -1
  407. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/system/config.get.mjs +2 -1
  409. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/system/index.get.mjs +2 -1
  411. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  412. package/.output/server/chunks/routes/api/system/index.patch.mjs +2 -1
  413. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/system/index.post.mjs +2 -1
  415. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/system/index2.get.mjs +2 -1
  417. package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +2 -1
  419. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +2 -1
  421. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/system/monitor.get.mjs +2 -1
  423. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +2 -1
  425. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +2 -1
  427. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/system/timezone.get.mjs +2 -1
  429. package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +2 -1
  431. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/users/_id_.get.mjs +2 -1
  433. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/users/_id_.put.mjs +2 -1
  435. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/users/change-password.post.mjs +35 -0
  437. package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -0
  438. package/.output/server/chunks/routes/api/users/index.get.mjs +3 -2
  439. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/users/index.post.mjs +4 -3
  441. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/users/login.post.mjs +4 -3
  443. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  444. package/.output/server/chunks/routes/api/users/logout.post.mjs +3 -2
  445. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  446. package/.output/server/chunks/routes/api/users/me.get.mjs +3 -2
  447. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/users/register.post.mjs +3 -2
  449. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +6 -3
  451. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +3 -2
  453. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +3 -2
  455. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  456. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +4 -3
  457. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +2 -1
  459. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +2 -1
  461. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  462. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +2 -1
  463. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  464. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +2 -1
  465. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +15 -5
  467. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +3 -2
  469. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  470. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +24 -3
  471. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  472. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +3 -2
  473. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
  474. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +3 -2
  475. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
  476. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +3 -2
  477. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  478. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +48 -8
  479. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  480. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +3 -2
  481. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  482. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +3 -2
  483. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  484. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +3 -2
  485. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
  486. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +2 -1
  487. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +2 -1
  489. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  490. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +2 -1
  491. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  492. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +2 -1
  493. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  494. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +3 -2
  495. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
  496. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +3 -2
  497. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
  498. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +3 -2
  499. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  500. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +3 -2
  501. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
  502. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +2 -1
  503. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
  504. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +3 -2
  505. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
  506. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +3 -2
  507. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
  508. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +3 -2
  509. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
  510. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +3 -2
  511. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
  512. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +3 -2
  513. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
  514. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +2 -1
  515. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  516. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +3 -2
  517. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +3 -2
  519. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  520. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +3 -2
  521. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
  522. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +3 -2
  523. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  524. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +3 -2
  525. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
  526. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +3 -2
  527. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
  528. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +3 -2
  529. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
  530. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +3 -2
  531. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
  532. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +3 -2
  533. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
  534. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +3 -2
  535. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
  536. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +3 -2
  537. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
  538. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +3 -2
  539. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
  540. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +3 -2
  541. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
  542. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +3 -2
  543. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
  544. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +3 -2
  545. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
  546. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +3 -2
  547. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  548. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +3 -2
  549. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
  550. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +3 -2
  551. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
  552. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +3 -2
  553. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
  554. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +3 -2
  555. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
  556. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +3 -2
  557. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  558. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +2 -1
  559. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  560. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +2 -1
  561. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +2 -1
  563. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  564. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +3 -2
  565. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  566. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +2 -1
  567. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  568. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +3 -2
  569. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  570. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +2 -1
  571. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  572. package/.output/server/chunks/routes/api/workshop/caller.mjs +3 -2
  573. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  574. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +5 -4
  575. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  576. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +2 -1
  577. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  578. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +2 -1
  579. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  580. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +2 -1
  581. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  582. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +2 -1
  583. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  584. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +3 -2
  585. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  586. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +2 -1
  587. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  588. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +2 -1
  589. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  590. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +2 -1
  591. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  592. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +2 -1
  593. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  594. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +2 -1
  595. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  596. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +2 -1
  597. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  598. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +2 -1
  599. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  600. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +2 -1
  601. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  602. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +2 -1
  603. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  604. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +2 -1
  605. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  606. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +2 -1
  607. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
  608. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +3 -2
  609. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
  610. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +2 -1
  611. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
  612. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +2 -1
  613. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
  614. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +2 -1
  615. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  616. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +2 -1
  617. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  618. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +3 -2
  619. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  620. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +3 -2
  621. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
  622. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +2 -1
  623. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  624. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +2 -1
  625. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  626. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +2 -1
  627. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  628. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +3 -2
  629. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  630. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +2 -1
  631. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  632. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +3 -2
  633. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  634. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +3 -2
  635. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
  636. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +2 -1
  637. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
  638. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +9 -2
  639. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
  640. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +2 -1
  641. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
  642. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +2 -1
  643. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
  644. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +5 -2
  645. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
  646. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +2 -1
  647. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
  648. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +2 -1
  649. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  650. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +2 -1
  651. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  652. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +3 -2
  653. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  654. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +3 -2
  655. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
  656. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +3 -2
  657. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
  658. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +2 -1
  659. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  660. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +3 -2
  661. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  662. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +2 -1
  663. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  664. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +2 -1
  665. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  666. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +18 -5
  667. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  668. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +4 -3
  669. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  670. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +4 -3
  671. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
  672. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +3 -2
  673. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  674. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +3 -2
  675. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  676. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +3 -2
  677. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  678. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +4 -3
  679. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  680. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +4 -3
  681. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  682. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +4 -3
  683. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  684. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +3 -2
  685. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  686. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +3 -2
  687. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  688. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +4 -3
  689. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  690. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +3 -2
  691. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  692. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +3 -2
  693. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  694. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +3 -2
  695. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  696. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +3 -2
  697. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  698. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +3 -2
  699. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  700. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +5 -4
  701. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  702. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +3 -2
  703. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  704. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +3 -2
  705. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
  706. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +3 -2
  707. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  708. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +3 -2
  709. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  710. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +3 -2
  711. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  712. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
  713. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  714. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +3 -2
  715. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  716. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +3 -2
  717. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  718. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +3 -2
  719. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  720. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +3 -2
  721. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  722. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +4 -3
  723. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  724. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +3 -2
  725. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  726. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +3 -2
  727. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  728. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +15 -12
  729. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  730. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +7 -4
  731. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  732. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +15 -14
  733. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  734. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +12 -4
  735. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  736. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +16 -5
  737. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  738. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +3 -2
  739. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
  740. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +6 -4
  741. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  742. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +30 -0
  743. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -0
  744. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +3 -2
  745. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  746. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +3 -2
  747. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  748. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +3 -2
  749. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  750. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +3 -2
  751. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  752. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +5 -4
  753. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  754. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +5 -4
  755. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  756. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +62 -0
  757. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -0
  758. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +99 -0
  759. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -0
  760. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +3 -2
  761. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
  762. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +3 -2
  763. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  764. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +3 -2
  765. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  766. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +3 -2
  767. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  768. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +3 -2
  769. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  770. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +3 -2
  771. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  772. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +3 -2
  773. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
  774. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +3 -2
  775. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
  776. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +3 -2
  777. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
  778. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +3 -2
  779. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  780. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +3 -2
  781. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  782. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +7 -4
  783. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  784. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +7 -4
  785. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  786. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +7 -4
  787. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  788. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +7 -4
  789. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  790. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +3 -2
  791. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  792. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +3 -2
  793. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  794. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +3 -2
  795. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  796. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +3 -2
  797. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  798. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +3 -2
  799. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  800. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +3 -2
  801. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  802. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +3 -2
  803. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  804. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +3 -2
  805. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  806. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +3 -2
  807. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  808. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +3 -2
  809. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  810. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +3 -2
  811. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  812. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +3 -2
  813. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  814. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +3 -2
  815. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  816. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +55 -0
  817. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -0
  818. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +38 -0
  819. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -0
  820. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +3 -2
  821. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  822. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +3 -2
  823. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
  824. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +3 -2
  825. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
  826. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +8 -2
  827. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
  828. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +6 -3
  829. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  830. package/.output/server/chunks/routes/api/workshop/index.get.mjs +2 -1
  831. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  832. package/.output/server/chunks/routes/api/workshop/index.post.mjs +2 -1
  833. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  834. package/.output/server/chunks/routes/api/workshop/index.put.mjs +3 -2
  835. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
  836. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +3 -2
  837. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  838. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
  839. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  840. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -1
  841. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  842. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +2 -1
  843. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  844. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +2 -1
  845. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  846. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +3 -2
  847. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  848. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +2 -1
  849. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  850. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -1
  851. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  852. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +8 -4
  853. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  854. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +2 -1
  855. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  856. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +8 -4
  857. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  858. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +4 -3
  859. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  860. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +3 -2
  861. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  862. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +3 -2
  863. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  864. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +3 -2
  865. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  866. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +3 -2
  867. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  868. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +2 -1
  869. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  870. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -1
  871. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  872. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +2 -1
  873. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  874. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
  875. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  876. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +2 -1
  877. package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
  878. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +2 -1
  879. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  880. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +2 -1
  881. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  882. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +2 -1
  883. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  884. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +2 -1
  885. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
  886. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +3 -2
  887. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  888. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +3 -2
  889. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  890. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +2 -1
  891. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  892. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +2 -1
  893. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  894. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +3 -2
  895. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  896. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +3 -2
  897. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  898. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +2 -1
  899. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  900. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +2 -1
  901. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
  902. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +2 -1
  903. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
  904. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +2 -1
  905. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
  906. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +2 -1
  907. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
  908. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +2 -1
  909. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
  910. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +2 -1
  911. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  912. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +2 -1
  913. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  914. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +2 -1
  915. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  916. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +2 -1
  917. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
  918. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +48 -0
  919. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -0
  920. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +2 -1
  921. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  922. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +2 -1
  923. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  924. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +2 -1
  925. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
  926. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +2 -1
  927. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  928. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +2 -1
  929. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  930. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +3 -2
  931. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  932. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +2 -1
  933. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  934. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +2 -1
  935. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  936. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +3 -2
  937. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
  938. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +3 -2
  939. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
  940. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +2 -1
  941. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  942. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +2 -1
  943. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  944. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +2 -1
  945. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  946. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +2 -1
  947. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  948. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +2 -1
  949. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  950. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +2 -1
  951. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  952. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +4 -3
  953. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  954. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +2 -1
  955. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  956. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +2 -1
  957. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  958. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +2 -1
  959. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  960. package/.output/server/chunks/routes/renderer.mjs +3 -3
  961. package/.output/server/chunks/virtual/entry.mjs +250 -57
  962. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  963. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  964. package/.output/server/index.mjs +2 -1
  965. package/.output/server/index.mjs.map +1 -1
  966. package/.output/server/package.json +1 -1
  967. package/LICENSE +69 -91
  968. package/README-zh.md +928 -833
  969. package/README.md +949 -845
  970. package/app/components/AppSidebar.vue +1 -1
  971. package/app/components/aml/AmlEnvPanel.vue +230 -230
  972. package/app/components/app-header/LoginModal.vue +131 -0
  973. package/app/components/app-header/UserChip.vue +161 -150
  974. package/app/components/dcw/DcwAddNodeModal.vue +29 -1
  975. package/app/components/dcw/DcwEditLineModal.vue +216 -108
  976. package/app/components/dcw/DcwLineCard.vue +129 -117
  977. package/app/components/dcw/DcwMesArtifacts.vue +140 -0
  978. package/app/components/dcw/DcwNodesTable.vue +9 -0
  979. package/app/components/dcw/DcwParamApprovalCard.vue +116 -110
  980. package/app/components/dcw/DcwRecipeEditModal.vue +399 -306
  981. package/app/components/dcw/ExpConfirmCard.vue +103 -0
  982. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -0
  983. package/app/components/dcw/RecipeGateApprovalCard.vue +159 -0
  984. package/app/components/logs/LogsEventTable.vue +321 -309
  985. package/app/components/logs/LogsFilterCard.vue +253 -234
  986. package/app/components/workshop/DaqNodeRow.vue +616 -592
  987. package/app/components/workshop/town/TownView.vue +6 -2
  988. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -0
  989. package/app/components/workshop/town/components/TownAgentBindings.vue +18 -2
  990. package/app/components/workshop/town/components/TownAgentInspector.vue +10 -2
  991. package/app/components/workshop/town/components/TownRightRail.vue +4 -1
  992. package/app/components/workshop/workbench/AuthGate.vue +182 -179
  993. package/app/components/workshop/workbench/ChangePasswordModal.vue +106 -0
  994. package/app/composables/workshop/town/town-relay-props.ts +6 -1
  995. package/app/composables/workshop/town/useTownAgentBindings.ts +73 -6
  996. package/app/composables/workshop/useDcwStream.ts +374 -362
  997. package/app/composables/workshop/useOpsLog.ts +3 -0
  998. package/app/layouts/default.vue +201 -161
  999. package/app/layouts/town.vue +40 -21
  1000. package/app/pages/daq/composables/useDaqDetailHistory.ts +199 -199
  1001. package/app/pages/dcw/[id].vue +380 -318
  1002. package/app/pages/dcw/composables/useDcwAddNode.ts +29 -0
  1003. package/app/pages/dcw/composables/useDcwParamApprovals.ts +123 -119
  1004. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -242
  1005. package/app/pages/dcw/composables/useExpConfirmations.ts +108 -0
  1006. package/app/pages/dcw/composables/useRecipeDispatchApprovals.ts +200 -0
  1007. package/app/pages/dcw/dcw-page.css +360 -344
  1008. package/app/pages/dcw/index.vue +11 -0
  1009. package/app/pages/logs/composables/useLogsQuery.ts +57 -52
  1010. package/app/pages/logs/index.vue +95 -94
  1011. package/app/pages/workshop/composables/useWorkbenchAuth.ts +131 -125
  1012. package/app/pages/workshop/index.vue +121 -116
  1013. package/app/plugins/http.ts +6 -0
  1014. package/app/stores/workshop/auth-ui.ts +26 -0
  1015. package/app/stores/workshop/user.ts +19 -2
  1016. package/cli/commands/mcp.mjs +6 -0
  1017. package/config.yml +180 -180
  1018. package/docker-compose.yml +4 -0
  1019. package/docs/cli.en.md +447 -447
  1020. package/docs/cli.md +412 -412
  1021. package/docs/plugins.en.md +621 -621
  1022. package/docs/plugins.md +610 -610
  1023. package/docs/sdk.en.md +964 -964
  1024. package/docs/sdk.md +900 -900
  1025. package/i18n/locales/en.ts +2812 -2738
  1026. package/i18n/locales/zh-CN.ts +2812 -2738
  1027. package/mcp/aw-mcp-server.mjs +4 -1
  1028. package/package.json +181 -181
  1029. package/scripts/_audit/feature-audit-e2e.mjs +12 -9
  1030. package/scripts/_audit/idd-scenarios-e2e.mjs +239 -0
  1031. package/scripts/aw-start-smoke.mjs +7 -1
  1032. package/scripts/check-docs-sync.mjs +417 -367
  1033. package/scripts/dev-guard.mjs +2 -1
  1034. package/scripts/dev-mes-simulator.mjs +456 -0
  1035. package/scripts/feature-sweep-e2e.mjs +176 -0
  1036. package/scripts/onboarding/forge-channel.mjs +157 -0
  1037. package/scripts/onboarding/lib.mjs +78 -0
  1038. package/scripts/onboarding/onboard.mjs +196 -0
  1039. package/scripts/onboarding/provision-line.mjs +179 -0
  1040. package/scripts/onboarding/test-connection.mjs +42 -0
  1041. package/scripts/onboarding/verify-line.mjs +95 -0
  1042. package/scripts/perm-isolation-e2e.mjs +188 -0
  1043. package/scripts/render-opt-curve.mjs +97 -0
  1044. package/scripts/render-pressure-curve.mjs +89 -0
  1045. package/scripts/start.mjs +126 -2
  1046. package/scripts/testing/aep-live.mjs +60 -0
  1047. package/scripts/testing/aggregate-benchmarks.mjs +79 -0
  1048. package/scripts/testing/api-full-loop.mjs +172 -0
  1049. package/scripts/testing/benchmark.config.json +66 -0
  1050. package/scripts/testing/game-host.mjs +63 -0
  1051. package/scripts/testing/hitl-expert.mjs +143 -0
  1052. package/scripts/testing/idd-kb-smoke.mjs +46 -0
  1053. package/scripts/testing/run-benchmark.mjs +984 -0
  1054. package/scripts/testing/sdk-live.mjs +55 -0
  1055. package/scripts/ui/e2e-interactive.mjs +14 -14
  1056. package/scripts/ui/lib.mjs +210 -210
  1057. package/server/api/health.get.ts +12 -1
  1058. package/server/api/metrics.ts +89 -78
  1059. package/server/api/users/change-password.post.ts +18 -0
  1060. package/server/api/users/setup-status.get.ts +13 -8
  1061. package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +21 -6
  1062. package/server/api/workshop/agent-tools/bindings/[id].patch.ts +36 -3
  1063. package/server/api/workshop/agent-tools/bindings/index.post.ts +60 -9
  1064. package/server/api/workshop/caller.ts +3 -2
  1065. package/server/api/workshop/channel-templates/[id]/instantiate.post.ts +1 -1
  1066. package/server/api/workshop/channels/[id]/line.put.ts +41 -30
  1067. package/server/api/workshop/channels/[id]/members/join.post.ts +35 -30
  1068. package/server/api/workshop/channels.post.ts +13 -0
  1069. package/server/api/workshop/daq/index.post.ts +6 -1
  1070. package/server/api/workshop/daq/test-driver.post.ts +3 -3
  1071. package/server/api/workshop/dcw/index.post.ts +26 -20
  1072. package/server/api/workshop/dcw/lines/[id].delete.ts +3 -2
  1073. package/server/api/workshop/dcw/lines/[id].patch.ts +5 -3
  1074. package/server/api/workshop/dcw/lines/index.post.ts +1 -1
  1075. package/server/api/workshop/dcw/mes-artifacts/file.get.ts +50 -0
  1076. package/server/api/workshop/dcw/mes-artifacts/index.get.ts +27 -0
  1077. package/server/api/workshop/dcw/mes-hook-test.post.ts +105 -0
  1078. package/server/api/workshop/dcw/products/index.post.ts +6 -2
  1079. package/server/api/workshop/dcw/recipes/[id]/apply.post.ts +6 -2
  1080. package/server/api/workshop/dcw/recipes/[id]/mark-good.post.ts +6 -2
  1081. package/server/api/workshop/dcw/recipes/[id]/revert.post.ts +33 -29
  1082. package/server/api/workshop/dcw/recipes/[id]/rollback-good.post.ts +7 -3
  1083. package/server/api/workshop/dcw/recipes/index.post.ts +27 -15
  1084. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -0
  1085. package/server/api/workshop/exp/confirmations/index.get.ts +25 -0
  1086. package/server/api/workshop/hitl/pending.get.ts +57 -48
  1087. package/server/api/workshop/hitl/respond.post.ts +10 -2
  1088. package/server/api/workshop/ops-logs/index.get.ts +1 -0
  1089. package/server/api/workshop/tasks/[id]/reopen.post.ts +35 -0
  1090. package/server/api/workshop/ws/peer-sub.ts +135 -128
  1091. package/server/api/workshop/ws/subscriptions.ts +15 -1
  1092. package/server/plugins/backup.ts +94 -11
  1093. package/server/plugins/daq.ts +3 -0
  1094. package/server/plugins/memory-watch.ts +92 -0
  1095. package/server/plugins/parent-watch.ts +22 -0
  1096. package/server/plugins/workshop.ts +258 -230
  1097. package/server/plugins-builtin/diag-bridge/client.mjs +49 -1
  1098. package/server/plugins-builtin/diag-bridge/host/diagnosis.mjs +15 -6
  1099. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -0
  1100. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +120 -17
  1101. package/server/plugins-builtin/diag-bridge/host/sweep.mjs +47 -0
  1102. package/server/plugins-builtin/diag-bridge/i18n.json +82 -72
  1103. package/server/repositories/user.repository.ts +36 -12
  1104. package/server/schemas/user.schema.ts +7 -0
  1105. package/server/services/user.service.ts +50 -8
  1106. package/server/services/workshop/agents/agent-interface.ts +1 -1
  1107. package/server/services/workshop/agents/base-agent.ts +8 -1
  1108. package/server/services/workshop/agents/binding-authz.ts +8 -5
  1109. package/server/services/workshop/agents/binding-mode.ts +51 -0
  1110. package/server/services/workshop/agents/hitl-decision/dispatcher.ts +16 -3
  1111. package/server/services/workshop/agents/hitl-decision/index.ts +24 -24
  1112. package/server/services/workshop/agents/hitl-decision/line-of.ts +38 -0
  1113. package/server/services/workshop/agents/hitl-decision/reconcile.ts +152 -70
  1114. package/server/services/workshop/agents/hitl-decision/shared.ts +2 -0
  1115. package/server/services/workshop/agents/hitl-registry.ts +582 -577
  1116. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +86 -2
  1117. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +25 -0
  1118. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +13 -1
  1119. package/server/services/workshop/agents/host-tool-bridge/tools/memory.ts +4 -1
  1120. package/server/services/workshop/agents/host-tool-bridge/tools/messaging.ts +45 -11
  1121. package/server/services/workshop/agents/host-tool-bridge/tools/tasks.ts +5 -1
  1122. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -0
  1123. package/server/services/workshop/agents/industrial/aml-dataset-tools.ts +21 -0
  1124. package/server/services/workshop/agents/industrial/aml-job-tools.ts +9 -3
  1125. package/server/services/workshop/agents/industrial/daq-export.ts +510 -0
  1126. package/server/services/workshop/agents/industrial/dcw-judge-tools.ts +160 -149
  1127. package/server/services/workshop/agents/industrial/dcw-tools.ts +68 -21
  1128. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -0
  1129. package/server/services/workshop/agents/industrial/grant-guard.ts +145 -0
  1130. package/server/services/workshop/agents/industrial/index.ts +4 -0
  1131. package/server/services/workshop/agents/industrial/line-tools.ts +151 -0
  1132. package/server/services/workshop/agents/industrial/manual-approval.ts +3 -2
  1133. package/server/services/workshop/agents/industrial/mes-tools.ts +143 -135
  1134. package/server/services/workshop/agents/industrial/ops-tools.ts +267 -68
  1135. package/server/services/workshop/agents/industrial/optimization-tools.ts +19 -9
  1136. package/server/services/workshop/agents/industrial/param-tools.ts +192 -169
  1137. package/server/services/workshop/agents/industrial/recipe-gate.ts +96 -0
  1138. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +366 -0
  1139. package/server/services/workshop/agents/industrial/twin-tools.ts +38 -4
  1140. package/server/services/workshop/agents/industrial-context.ts +122 -24
  1141. package/server/services/workshop/agents/mock-agent.ts +17 -0
  1142. package/server/services/workshop/agents/node-bindings.repo.ts +207 -206
  1143. package/server/services/workshop/agents/node-delegation.ts +4 -4
  1144. package/server/services/workshop/agents/omp-agent/event-mapping.ts +178 -142
  1145. package/server/services/workshop/agents/tool-approvals.ts +261 -13
  1146. package/server/services/workshop/aml/dataset-builder.ts +8 -1
  1147. package/server/services/workshop/aml/env-manager.ts +242 -242
  1148. package/server/services/workshop/aml/job-orchestrator/failure.ts +19 -0
  1149. package/server/services/workshop/aml/job-orchestrator/stages.ts +27 -0
  1150. package/server/services/workshop/aml/python-runtime.ts +600 -552
  1151. package/server/services/workshop/aml/twin/binding-snapshot.ts +637 -603
  1152. package/server/services/workshop/aml/twin/channel-profile.ts +3 -2
  1153. package/server/services/workshop/daq/bus/queue-port.ts +3 -0
  1154. package/server/services/workshop/daq/daq-controller/crud.ts +206 -202
  1155. package/server/services/workshop/daq/daq-controller/driver-probe.ts +64 -64
  1156. package/server/services/workshop/daq/daq-controller/ingest.ts +189 -189
  1157. package/server/services/workshop/daq/daq-controller/state.ts +204 -197
  1158. package/server/services/workshop/daq/daq-controller/views.ts +85 -84
  1159. package/server/services/workshop/daq/daq-node.repo.ts +27 -4
  1160. package/server/services/workshop/daq/daq-node.ts +4 -2
  1161. package/server/services/workshop/daq/daq-runtime.ts +2 -1
  1162. package/server/services/workshop/daq/drivers/index.ts +29 -29
  1163. package/server/services/workshop/daq/drivers/mqtt.ts +217 -182
  1164. package/server/services/workshop/daq/drivers/registry.ts +35 -1
  1165. package/server/services/workshop/daq/drivers/shared.ts +63 -60
  1166. package/server/services/workshop/daq/objectstore/disk.adapter.ts +48 -2
  1167. package/server/services/workshop/daq/objectstore/gc.ts +92 -0
  1168. package/server/services/workshop/daq/objectstore/objectstore-port.ts +12 -0
  1169. package/server/services/workshop/daq/storage/sqlite.adapter.ts +318 -318
  1170. package/server/services/workshop/daq/storage/timescale.adapter.ts +37 -3
  1171. package/server/services/workshop/db/database/migrations.ts +12 -1
  1172. package/server/services/workshop/db/database/open.ts +5 -1
  1173. package/server/services/workshop/db/database/rows.ts +4 -0
  1174. package/server/services/workshop/db/database/schema.ts +7 -2
  1175. package/server/services/workshop/db/database/seed.ts +71 -0
  1176. package/server/services/workshop/db/memory.repo.ts +1 -1
  1177. package/server/services/workshop/db/ops.repo.ts +24 -7
  1178. package/server/services/workshop/dcw/dcw-controller/actuation.ts +140 -127
  1179. package/server/services/workshop/dcw/dcw-controller/bindings.ts +97 -83
  1180. package/server/services/workshop/dcw/dcw-controller/crud.ts +19 -4
  1181. package/server/services/workshop/dcw/dcw-controller/gate-persist.ts +80 -0
  1182. package/server/services/workshop/dcw/dcw-controller/lines.ts +229 -213
  1183. package/server/services/workshop/dcw/dcw-controller/recipes.ts +286 -196
  1184. package/server/services/workshop/dcw/dcw-controller/state.ts +71 -66
  1185. package/server/services/workshop/dcw/dcw-controller/write-verify.ts +98 -0
  1186. package/server/services/workshop/dcw/dcw-controller/write.ts +51 -9
  1187. package/server/services/workshop/dcw/dcw-line.repo.ts +17 -1
  1188. package/server/services/workshop/dcw/dcw-node.repo.ts +110 -87
  1189. package/server/services/workshop/dcw/dcw-node.ts +8 -3
  1190. package/server/services/workshop/dcw/dcw-recipe.repo.ts +32 -0
  1191. package/server/services/workshop/dcw/dcw-runtime.ts +8 -1
  1192. package/server/services/workshop/dcw/drivers/http.ts +68 -66
  1193. package/server/services/workshop/dcw/drivers/index.ts +27 -27
  1194. package/server/services/workshop/dcw/drivers/mes-rest.ts +707 -543
  1195. package/server/services/workshop/dcw/drivers/mock.ts +47 -44
  1196. package/server/services/workshop/dcw/drivers/modbus-rtu.ts +1 -1
  1197. package/server/services/workshop/dcw/drivers/modbus.ts +1 -1
  1198. package/server/services/workshop/dcw/drivers/mqtt.ts +109 -108
  1199. package/server/services/workshop/dcw/drivers/opcua.ts +1 -1
  1200. package/server/services/workshop/dcw/drivers/registry.ts +142 -100
  1201. package/server/services/workshop/dcw/drivers/shared.ts +186 -161
  1202. package/server/services/workshop/dcw/param-map.repo.ts +349 -321
  1203. package/server/services/workshop/dcw/recipe-op-anchor.ts +117 -0
  1204. package/server/services/workshop/dcw/recipe-rollback.repo.ts +26 -0
  1205. package/server/services/workshop/exp/exp-collector.ts +275 -0
  1206. package/server/services/workshop/exp/exp-state.repo.ts +339 -0
  1207. package/server/services/workshop/json-store.mjs +137 -105
  1208. package/server/services/workshop/mes/mes-controller.ts +274 -26
  1209. package/server/services/workshop/mes/mes-datasets.ts +503 -441
  1210. package/server/services/workshop/mes/mes-hook.ts +567 -0
  1211. package/server/services/workshop/ops/ops.ts +3 -0
  1212. package/server/services/workshop/permissions.ts +7 -7
  1213. package/server/services/workshop/plugin-driver-registry.ts +123 -108
  1214. package/server/services/workshop/plugins/host/services.mjs +10 -0
  1215. package/server/services/workshop/prompts/loader.ts +11 -2
  1216. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +18 -0
  1217. package/server/services/workshop/runtime/agent-runtime/message.ts +10 -0
  1218. package/server/services/workshop/runtime/line-notify.ts +76 -0
  1219. package/server/services/workshop/runtime/manager/access.ts +488 -483
  1220. package/server/services/workshop/runtime/manager/channel-templates.ts +21 -2
  1221. package/server/services/workshop/runtime/manager/runtime-wiring.ts +96 -1
  1222. package/server/services/workshop/runtime/manager/state.ts +106 -1
  1223. package/server/services/workshop/runtime/manager/tasks.ts +67 -4
  1224. package/server/services/workshop/runtime/manager/workspace.ts +8 -2
  1225. package/server/services/workshop/runtime/memory/recall.ts +20 -1
  1226. package/server/services/workshop/runtime/memory/write.ts +149 -93
  1227. package/server/services/workshop/runtime/platform-notice.ts +113 -0
  1228. package/server/services/workshop/runtime/scheduler-loop/execute.ts +44 -12
  1229. package/server/services/workshop/runtime/scheduler-loop/rules.ts +24 -7
  1230. package/server/services/workshop/runtime/scheduler-loop/tick.ts +44 -1
  1231. package/server/services/workshop/runtime/task-engine/lifecycle.ts +11 -0
  1232. package/server/services/workshop/runtime/task-engine/update.ts +11 -0
  1233. package/server/services/workshop/settings.ts +17 -0
  1234. package/server/types/user.ts +4 -0
  1235. package/server/utils/errors.ts +1 -0
  1236. package/server/utils/response.ts +6 -0
  1237. package/shared/config/schema.json +140 -138
  1238. package/shared/config/single-instance.mjs +28 -1
  1239. package/shared/daq-protocol.ts +12 -2
  1240. package/shared/dcw-protocol/catalog.ts +6 -1
  1241. package/shared/dcw-protocol/index.ts +19 -19
  1242. package/shared/dcw-protocol/line.ts +34 -0
  1243. package/shared/dcw-protocol/recipe.ts +33 -3
  1244. package/shared/local-time.mjs +37 -13
  1245. package/shared/workshop-protocol.ts +4 -0
  1246. package/.output/public/_nuxt/B2x8SKRO2.js +0 -1
  1247. package/.output/public/_nuxt/BOhcoxIu.js +0 -2
  1248. package/.output/public/_nuxt/BQy0Yy7S.js +0 -1
  1249. package/.output/public/_nuxt/BTVyPFng2.js +0 -1
  1250. package/.output/public/_nuxt/BXR3tgEk.js +0 -1
  1251. package/.output/public/_nuxt/B_9_BM9G.js +0 -3
  1252. package/.output/public/_nuxt/BcX4fktE.js +0 -1
  1253. package/.output/public/_nuxt/Bfe2qOYs.js +0 -1
  1254. package/.output/public/_nuxt/BnoyYd0Z2.js +0 -1
  1255. package/.output/public/_nuxt/BqYO-UfR.js +0 -1
  1256. package/.output/public/_nuxt/Btv3HXrq.js +0 -1
  1257. package/.output/public/_nuxt/BuXaEtBG2.js +0 -1
  1258. package/.output/public/_nuxt/Bub2P5me.js +0 -28
  1259. package/.output/public/_nuxt/CAaSPBqk.js +0 -1
  1260. package/.output/public/_nuxt/CD9lpEz22.js +0 -13
  1261. package/.output/public/_nuxt/CFjveTJh.js +0 -1
  1262. package/.output/public/_nuxt/CI2yXRr42.js +0 -1
  1263. package/.output/public/_nuxt/COQM2L1M.js +0 -1
  1264. package/.output/public/_nuxt/Ch9KdZWb2.js +0 -1
  1265. package/.output/public/_nuxt/CtXOpljm2.js +0 -1
  1266. package/.output/public/_nuxt/CwLQAKay2.js +0 -1
  1267. package/.output/public/_nuxt/DB4ma-iU2.js +0 -1
  1268. package/.output/public/_nuxt/DV5joWTn2.js +0 -47
  1269. package/.output/public/_nuxt/DVKXGuMz2.js +0 -1
  1270. package/.output/public/_nuxt/DZDi8inD.js +0 -1
  1271. package/.output/public/_nuxt/DZuXfuXS.js +0 -14
  1272. package/.output/public/_nuxt/Db4_F1T2.js +0 -1
  1273. package/.output/public/_nuxt/DlX0nqUe.js +0 -1
  1274. package/.output/public/_nuxt/Dqz5HiXa.js +0 -2
  1275. package/.output/public/_nuxt/I1cI6sPJ2.js +0 -1
  1276. package/.output/public/_nuxt/Sjjmp5OD2.js +0 -1
  1277. package/.output/public/_nuxt/WVTVkqef.js +0 -1
  1278. package/.output/public/_nuxt/_id_.DZbVLNnu.css +0 -1
  1279. package/.output/public/_nuxt/a4X3ARNm2.js +0 -1
  1280. package/.output/public/_nuxt/bt__BP-I.js +0 -13
  1281. package/.output/public/_nuxt/builds/meta/af879435-fc74-4017-ade0-3b92c1ab35bb.json +0 -1
  1282. package/.output/public/_nuxt/cY_5jwFz2.js +0 -1
  1283. package/.output/public/_nuxt/daq.0uieKcZk.css +0 -1
  1284. package/.output/public/_nuxt/dcw.pQRVkAi_.css +0 -1
  1285. package/.output/public/_nuxt/eutnXI4F.js +0 -24
  1286. package/.output/public/_nuxt/k5K6Jj6g.js +0 -19
  1287. package/.output/public/_nuxt/logs.CD0Olr3c.css +0 -1
  1288. package/.output/public/_nuxt/wDPc4SSR.js +0 -106
  1289. package/.output/public/_nuxt/workshop.b4YRXEe0.css +0 -1
  1290. package/.output/server/chunks/_/SearchOutlined.mjs.map +0 -1
  1291. package/.output/server/chunks/build/TownView-Bf5VFYFj.mjs.map +0 -1
  1292. package/.output/server/chunks/build/_id_-CuUmVPRg.mjs.map +0 -1
  1293. package/.output/server/chunks/build/_id_-WF20tjqT.mjs.map +0 -1
  1294. package/.output/server/chunks/build/aml-C55iuLn-.mjs.map +0 -1
  1295. package/.output/server/chunks/build/daq-D0kLscVr.mjs.map +0 -1
  1296. package/.output/server/chunks/build/dcw-DuhEyu7S.mjs.map +0 -1
  1297. package/.output/server/chunks/build/input-Cr_KFj4T.mjs +0 -1381
  1298. package/.output/server/chunks/build/input-Cr_KFj4T.mjs.map +0 -1
  1299. package/.output/server/chunks/build/logs-BlOalbsZ.mjs.map +0 -1
  1300. package/.output/server/chunks/build/operations-BD6LK-Yz.mjs.map +0 -1
  1301. package/.output/server/chunks/build/pages-DloBBvU5.mjs.map +0 -1
  1302. package/.output/server/chunks/build/town-B2gBu_ZE.mjs.map +0 -1
  1303. package/.output/server/chunks/build/town-BIn3be5v.mjs.map +0 -1
  1304. package/.output/server/chunks/build/useAmlJobs--a_1ovew.mjs.map +0 -1
  1305. package/.output/server/chunks/build/useDaqDetailHistory-pfi6zXWU.mjs.map +0 -1
  1306. package/.output/server/chunks/build/useDaqDetailNode-qT7MjqJ7.mjs.map +0 -1
  1307. package/.output/server/chunks/build/useDaqFilters-CMysN13f.mjs.map +0 -1
  1308. package/.output/server/chunks/build/useDaqOptimizations-Coq5lsfM.mjs.map +0 -1
  1309. package/.output/server/chunks/build/useDashboardData-DgJcGJaF.mjs.map +0 -1
  1310. package/.output/server/chunks/build/useDcwAddNode-C9DbEKHi.mjs.map +0 -1
  1311. package/.output/server/chunks/build/useDcwCards-VDoMYG7l.mjs.map +0 -1
  1312. package/.output/server/chunks/build/useDcwDetailScope-CL97tJdJ.mjs.map +0 -1
  1313. package/.output/server/chunks/build/useDcwDetailTemplates-OLmjMSGD.mjs.map +0 -1
  1314. package/.output/server/chunks/build/useDcwFilter-Bs9C6-h_.mjs.map +0 -1
  1315. package/.output/server/chunks/build/useDcwLedger-Bbf_iFOY.mjs.map +0 -1
  1316. package/.output/server/chunks/build/useDcwLineMutations-Bhtuqw7J.mjs.map +0 -1
  1317. package/.output/server/chunks/build/useDcwLineRun-CGqZSnG4.mjs.map +0 -1
  1318. package/.output/server/chunks/build/useDcwParamApprovals-BBwdFsKv.mjs.map +0 -1
  1319. package/.output/server/chunks/build/useDcwProducts-BoBkJqpv.mjs.map +0 -1
  1320. package/.output/server/chunks/build/useDcwQuery-DP7b2qb6.mjs.map +0 -1
  1321. package/.output/server/chunks/build/useDcwQuickActions-DHRiA9KN.mjs.map +0 -1
  1322. package/.output/server/chunks/build/useDcwRecipes-CIMeH2oF.mjs.map +0 -1
  1323. package/.output/server/chunks/build/useDcwTemplates-M_-qjV8E.mjs.map +0 -1
  1324. package/.output/server/chunks/build/useDcwWrites-D94dAzqr.mjs.map +0 -1
  1325. package/.output/server/chunks/build/useLocalTime-DZ2RAtVs.mjs.map +0 -1
  1326. package/.output/server/chunks/build/useLogsQuery-2x1mKxT1.mjs.map +0 -1
  1327. package/.output/server/chunks/build/useLogsScope-04cUJCU-.mjs.map +0 -1
  1328. package/.output/server/chunks/build/useMonitorData-guVjMDtR.mjs.map +0 -1
  1329. package/.output/server/chunks/build/useMonitorFormat-C7lhZe4g.mjs.map +0 -1
  1330. package/.output/server/chunks/build/useWorkbenchAuth-DqjBX-6w.mjs.map +0 -1
  1331. package/.output/server/chunks/build/useWorkbenchWorkspaces-GQVU9BLv.mjs.map +0 -1
  1332. package/.output/server/chunks/build/useWorkspaceChannels-B13vROC1.mjs.map +0 -1
  1333. package/.output/server/chunks/build/workshop-BDqWzJtr.mjs.map +0 -1
  1334. package/scripts/_aw0746-stage5.mjs +0 -159
  1335. package/scripts/_aw0746-stage6-aml.mjs +0 -177
  1336. package/scripts/_aw0746-train-strong.py +0 -142
  1337. package/scripts/_aw0747-readme-rows.mjs +0 -32
  1338. package/scripts/_aw0748-fresh-channel.mjs +0 -21
  1339. package/scripts/_aw0748-mock-dispatch-diag.mjs +0 -66
  1340. package/scripts/_aw0748-wake-channel.mjs +0 -46
  1341. package/scripts/_aw0749-readme-rows.mjs +0 -23
  1342. package/scripts/_dbg-comm-verify.mjs +0 -188
  1343. package/scripts/_dbg-im-e2e.mjs +0 -169
  1344. package/scripts/_dbg-opt2-run.mjs +0 -114
  1345. package/scripts/_dbg-opt2-setup.mjs +0 -95
  1346. package/scripts/_dbg-param-map-e2e.ts +0 -248
  1347. package/scripts/_dbg-param-map-rest-smoke.mjs +0 -73
  1348. package/scripts/_dbg-param-real-scenario.mjs +0 -153
  1349. package/scripts/_dbg-real-scenario-e2e.mjs +0 -246
  1350. package/scripts/_dbg-recipe-stale-e2e.mjs +0 -135
  1351. package/scripts/_dbg-schedule-ui-verify.mjs +0 -115
  1352. package/scripts/_dbg-team-matrix.mjs +0 -148
  1353. package/scripts/_dbg-ui-fullcrawl.mjs +0 -91
  1354. package/scripts/_dbg-ui-static-audit.mjs +0 -65
  1355. package/scripts/_dbg-write-lock-e2e.mjs +0 -131
  1356. /package/.output/public/_nuxt/{DdNujZN52.js → DdNujZN5.js} +0 -0
@@ -1,592 +1,616 @@
1
- <script setup lang="ts">
2
- /**
3
- * DaqNodeRow —— 数采节点表格行(渲染隔离单元)。
4
- *
5
- * 行级派生态(pill/趋势串/限值线/产线运行态/节拍文案)全部在本组件 computed 内求值,
6
- * 只追踪「本行节点」的响应式依赖:其它行/其它节点的 WS 读数帧失效不再波及本行 patch
7
- * (等价 v-memo 的隔离效果,但 v-memo 在 SSR 编译产物引用未定义的 _cache 导致 500,
8
- * 子组件 props 身份跳过是 SSR 安全形态)。父层 v-for 传稳定节点引用,依赖不变零重渲。
9
- */
10
- import { computed } from 'vue'
11
- import { message } from 'ant-design-vue'
12
- import { useDaqStream, type DaqNodeLive } from '@/app/composables/workshop/useDaqStream'
13
- import { useDcwStream } from '@/app/composables/workshop/useDcwStream'
14
- import { useDeviceTwins } from '@/app/composables/workshop/useDeviceTwins'
15
- import { apiErrorMessage } from '@/app/utils/api-error'
16
- import { daqKeyFromRef, type DaqNodeState } from '#shared/daq-protocol'
17
-
18
- const props = defineProps<{ n: DaqNodeLive }>()
19
-
20
- const { t } = useI18n()
21
- const daq = useDaqStream()
22
- const dcw = useDcwStream()
23
- const deviceTwins = useDeviceTwins()
24
-
25
- // ---------- 行级展示状态(与页面筛选同源的诚实状态机) ----------
26
- type RowState = DaqNodeState | 'idle' | 'disabled' | 'unassigned'
27
-
28
- /** 数据新鲜度:超过 max(4×有效周期, 12s) 无新样本视为「采不到数据」(容忍 5s REST 刷新拍与时钟偏差) */
29
- function staleOf(n: DaqNodeLive): boolean {
30
- if (!n.lastAt) return true
31
- const iv = n.intervalMs ?? daq.controller.defaultIntervalMs
32
- return Date.now() - Date.parse(n.lastAt) > Math.max(iv * 4, 12_000)
33
- }
34
-
35
- function rowStateOf(n: DaqNodeLive): RowState {
36
- if (!n.enabled) return 'disabled'
37
- if (!n.lineId) return 'unassigned'
38
- if (!dcw.lineStateOf(n.lineId).active) return 'idle'
39
- if (!daq.controller.running || staleOf(n)) return 'offline'
40
- return n.state
41
- }
42
-
43
- function isLive(n: DaqNodeLive): boolean {
44
- const s = rowStateOf(n)
45
- return s === 'ok' || s === 'warn' || s === 'alarm'
46
- }
47
-
48
- /** 活动配方对该节点的数采监控窗口(本线活动批次;不同 Recipe 不同窗口) */
49
- function recipeWinOf(n: { lineId: string, id: string }): { min?: number, max?: number } | null {
50
- if (!n.lineId) return null
51
- const run = dcw.lineStateOf(n.lineId)
52
- if (!run.active || !run.recipeId) return null
53
- const r = dcw.recipes.find(x => x.id === run.recipeId)
54
- return r?.daqWindows?.find(w => w.nodeId === n.id) ?? null
55
- }
56
-
57
- /** 配方窗口越限(与服务端 alarm 判定同源;行标红) */
58
- function recipeAlarm(n: DaqNodeLive): boolean {
59
- const w = recipeWinOf(n)
60
- if (!w || n.value == null) return false
61
- return (w.min != null && n.value < w.min) || (w.max != null && n.value > w.max)
62
- }
63
-
64
- /** 行内趋势的有效限值:活动配方窗口优先,节点预警带兜底,皆无 → 不画限值线 */
65
- function limitOf(n: DaqNodeLive): { min: number | null | undefined, max: number | null | undefined } {
66
- const w = recipeWinOf(n)
67
- if (w && (w.min != null || w.max != null)) return { min: w.min, max: w.max }
68
- if (n.warnLow != null || n.warnHigh != null) return { min: n.warnLow, max: n.warnHigh }
69
- return { min: null, max: null }
70
- }
71
-
72
- // ---------- 行内趋势(SVG polyline;数据节拍由 store 合批,本组件按行失效) ----------
73
- const TREND_W = 120
74
- const TREND_H = 26
75
-
76
- function trendPath(hist: number[]): string {
77
- const vals = hist.filter(Number.isFinite)
78
- if (vals.length < 2) return ''
79
- const min = Math.min(...vals)
80
- const max = Math.max(...vals)
81
- const span = max - min || 1
82
- return vals.map((v, i) => `${((i / (vals.length - 1)) * TREND_W).toFixed(1)},${(TREND_H - ((v - min) / span) * (TREND_H - 2) - 1).toFixed(1)}`).join(' ')
83
- }
84
-
85
- /** 上下限参考线在趋势图内的 y 坐标(量程不可知或无数据时返回 null 不画) */
86
- function limitY(hist: number[], limit: number | undefined | null): number | null {
87
- if (limit == null || !Number.isFinite(limit)) return null
88
- const vals = hist.filter(Number.isFinite)
89
- if (vals.length < 2) return null
90
- const min = Math.min(...vals, limit)
91
- const max = Math.max(...vals, limit)
92
- const span = max - min || 1
93
- return Number((TREND_H - ((limit - min) / span) * (TREND_H - 2) - 1).toFixed(1))
94
- }
95
-
96
- /** 状态 pill(含诚实的原因提示;配方越限标签仅在数据新鲜时展示) */
97
- function statePillOf(n: DaqNodeLive): { key: RowState, label: string, tip: string } {
98
- const s = rowStateOf(n)
99
- const offlineLabel = t('daq.k44c2n065')
100
- if (s === 'offline') {
101
- if (n.lastError) return { key: s, label: offlineLabel, tip: n.lastError }
102
- const tip = !daq.controller.running
103
- ? t('daq.k1gateoff140')
104
- : t('daq.k1staled129', { p0: Math.round(Math.max((n.intervalMs ?? daq.controller.defaultIntervalMs) * 4, 12_000) / 1000) })
105
- return { key: s, label: offlineLabel, tip }
106
- }
107
- const labels: Record<RowState, string> = {
108
- ok: t('daq.k41k5c062'),
109
- warn: t('daq.k49z8v063'),
110
- alarm: t('daq.k3xmid064'),
111
- offline: offlineLabel,
112
- idle: t('daq.k3ozyqz117'),
113
- disabled: t('daq.k1disabl130'),
114
- unassigned: t('daq.k3ootr6053'),
115
- }
116
- if (s === 'idle') return { key: s, label: labels.idle, tip: t('daq.k1idlehin139') }
117
- if ((s === 'ok' || s === 'warn' || s === 'alarm') && recipeAlarm(n)) {
118
- const w = recipeWinOf(n)
119
- return { key: 'alarm', label: t('daq.k1l3pt51104'), tip: t('daq.k1hrrqa1122', { p0: w?.min ?? '-∞', p1: w?.max ?? '+∞', p2: '' }) }
120
- }
121
- return { key: s, label: labels[s], tip: '' }
122
- }
123
-
124
- /** 模板通道语义(server 目录为唯一事实源;模板已删除 → 显示 templateRef 原文降级) */
125
- function daqTemplateRefCh(templateRef: string): string {
126
- const tpl = daq.templates.find(x => x.key === daqKeyFromRef(templateRef))
127
- return tpl ? `${tpl.name} · ${tpl.ch}` : templateRef || '-'
128
- }
129
-
130
- const intervalOf = (intervalMs: number | null): string => {
131
- if (intervalMs == null) return t('daq.k9vnp9h124', { p0: daq.controller.defaultIntervalMs })
132
- return `${intervalMs}ms`
133
- }
134
-
135
- /** WS 下发节拍展示(null=跟随全局;0=每帧;>0 独立间隔) */
136
- const publishOf = (v: number | null): string => {
137
- if (v == null) return t('daq.k9vnp9h124', { p0: daq.controller.defaultPublishIntervalMs })
138
- if (v === 0) return t('daq.k41mvv078')
139
- return `${v}ms`
140
- }
141
-
142
- /** 驱动是否为预留协议(meta status=planned) */
143
- const driverPlanned = (kind: string): boolean =>
144
- daq.meta.drivers.find(d => d.kind === kind)?.status === 'planned'
145
-
146
- const nodeDeviceIds = (n: DaqNodeLive): string[] =>
147
- n.deviceIds ?? (n.deviceBindingId ? [n.deviceBindingId] : [])
148
- const deviceNameById = (id: string): string =>
149
- deviceTwins.twins.find(x => x.id === id)?.name ?? id
150
- /** 绑定设备下拉选项:全部真实设备孪生(剔除 daq/dcw 伪孪生) */
151
- const bindableDeviceTwins = computed(() =>
152
- deviceTwins.twins.filter(x => x.kind !== 'daq' && !(x.modelRef ?? '').startsWith('daq-') && !(x.modelRef ?? '').startsWith('dcw-')))
153
-
154
- // ---------- 行渲染上下文:本节点依赖变化才重算(隔离单元核心) ----------
155
- const ctx = computed(() => {
156
- const n = props.n
157
- const lim = limitOf(n)
158
- const ls = n.lineId ? dcw.lineStateOf(n.lineId) : null
159
- return {
160
- tpl: daqTemplateRefCh(n.templateRef),
161
- pill: statePillOf(n),
162
- alarm: recipeAlarm(n),
163
- live: isLive(n),
164
- trend: trendPath(n.hist),
165
- limMin: limitY(n.hist, lim.min),
166
- limMax: limitY(n.hist, lim.max),
167
- interval: intervalOf(n.intervalMs),
168
- publish: publishOf(n.publishIntervalMs),
169
- lineActive: !!ls?.active,
170
- lineProduct: ls?.productName ?? '',
171
- lineRecipe: ls?.recipeName ?? '',
172
- }
173
- })
174
-
175
- // ---------- 行内交互(与原页面实现同构;toast 后端可读原因) ----------
176
- /** 单节点独立 启动/停止采集(PATCH enabled;server 权威,本地乐观翻转 + WS/轮询收敛)。
177
- * n 即 store 内响应式对象(身份同源),此处乐观翻转与原页面实现一致 */
178
- async function toggleNodeEnabled(): Promise<void> {
179
- const node = props.n
180
- const next = !node.enabled
181
- try {
182
- await daq.patchNode(node.id, { enabled: next })
183
- node.enabled = next
184
- if (!next) node.state = 'offline'
185
- message.success(next ? t('daq.k1nodestart147') : t('daq.k1nodestop146'))
186
- }
187
- catch (err) {
188
- message.error(apiErrorMessage(err))
189
- }
190
- }
191
-
192
- async function setNodeLine(e: Event): Promise<void> {
193
- const lineId = (e.target as HTMLSelectElement).value
194
- try {
195
- await daq.patchNode(props.n.id, { lineId })
196
- const node = props.n
197
- node.lineId = lineId
198
- }
199
- catch (err) {
200
- message.error(apiErrorMessage(err))
201
- }
202
- }
203
-
204
- /** 节点绑定设备(多对多:add 挂新设备 / remove 摘除一台;server 落库) */
205
- async function addNodeDevice(e: Event): Promise<void> {
206
- const deviceId = (e.target as HTMLSelectElement).value
207
- if (!deviceId) return
208
- const node = props.n
209
- if (node.deviceIds?.includes(deviceId)) return
210
- try {
211
- await daq.setNodeBindings(node.id, [...(node.deviceIds ?? []), deviceId])
212
- }
213
- catch (err) {
214
- message.error(apiErrorMessage(err))
215
- }
216
- ;(e.target as HTMLSelectElement).value = ''
217
- }
218
-
219
- async function removeNodeDevice(deviceId: string): Promise<void> {
220
- const node = props.n
221
- try {
222
- await daq.setNodeBindings(node.id, (node.deviceIds ?? []).filter(d => d !== deviceId))
223
- }
224
- catch (err) {
225
- message.error(apiErrorMessage(err))
226
- }
227
- }
228
- </script>
229
-
230
- <template>
231
- <tr :class="{ 'row-recipe-alarm': ctx.alarm }">
232
- <td>
233
- <span class="mono dim">{{ n.id.slice(0, 8) }}</span>
234
- <b>{{ n.name }}</b>
235
- <small class="mono ch">{{ ctx.tpl }}</small>
236
- </td>
237
- <td>
238
- <span
239
- class="st-pill"
240
- :class="[ctx.pill.key]"
241
- :title="ctx.pill.tip"
242
- >{{ ctx.pill.label }}</span>
243
- </td>
244
- <td
245
- class="mono val"
246
- :class="{ 'stale': !ctx.live, 'val-alarm': n.state === 'alarm' || ctx.alarm }"
247
- :title="ctx.live ? undefined : ctx.pill.tip"
248
- >
249
- {{ n.value != null ? n.value.toFixed(n.decimals) : '--' }}
250
- <small>{{ n.unit }}</small>
251
- </td>
252
- <td class="trend-cell">
253
- <svg
254
- class="trend"
255
- viewBox="0 0 120 26"
256
- preserveAspectRatio="none"
257
- :title="$t('daq.k1trnd002')"
258
- >
259
- <line
260
- v-if="ctx.limMin != null"
261
- class="lim"
262
- x1="0"
263
- :y1="ctx.limMin"
264
- x2="120"
265
- :y2="ctx.limMin"
266
- />
267
- <line
268
- v-if="ctx.limMax != null"
269
- class="lim max"
270
- x1="0"
271
- :y1="ctx.limMax"
272
- x2="120"
273
- :y2="ctx.limMax"
274
- />
275
- <polyline
276
- v-if="ctx.trend"
277
- class="trace"
278
- :class="{ alarm: n.state === 'alarm' || ctx.alarm }"
279
- :points="ctx.trend"
280
- />
281
- <!-- 无足够样本(<2 个有效值)时给一道基线,而不是留一条 points="" 的空 polyline:
282
- 空 polyline 不渲染任何东西,单元格看上去是"坏了"而不是"还没有数据"。
283
- 采样由活动批次门控,未开跑时这一列**本来就应该**是空的 —— 需要看得出是"待数据"。 -->
284
- <line
285
- v-else
286
- class="trace-idle"
287
- x1="0"
288
- :y1="TREND_H / 2"
289
- x2="120"
290
- :y2="TREND_H / 2"
291
- />
292
- </svg>
293
- </td>
294
- <td class="mono">
295
- {{ ctx.interval }}
296
- </td>
297
- <td class="mono">
298
- {{ ctx.publish }}
299
- </td>
300
- <td>
301
- <span
302
- class="drv-tag"
303
- :class="{ planned: driverPlanned(n.driver) }"
304
- :title="driverPlanned(n.driver) ? $t('daq.k1plndrv138') : ''"
305
- >{{ n.driver }}</span>
306
- </td>
307
- <td>
308
- <select
309
- class="line-sel"
310
- :value="n.lineId"
311
- :title="$t('daq.k3q23v3010')"
312
- @change="setNodeLine"
313
- >
314
- <option value="">
315
- {{ $t('daq.k3ootr6053') }}
316
- </option>
317
- <option
318
- v-for="l in dcw.lines"
319
- :key="l.id"
320
- :value="l.id"
321
- >
322
- {{ l.name }}
323
- </option>
324
- </select>
325
- </td>
326
- <!-- 产线运行:呼吸绿点=运行中 / 空心点=未运行(与产线状态带同一套点语义) -->
327
- <td>
328
- <span
329
- v-if="n.lineId"
330
- class="run-pill"
331
- :class="{ on: ctx.lineActive }"
332
- :title="$t('daq.k1runtipc131')"
333
- >
334
- <span class="rp-dot" />
335
- {{ ctx.lineActive ? $t('daq.k3vp67i096') : $t('daq.k3ozyqz117') }}
336
- </span>
337
- <span
338
- v-else
339
- class="run-pill na"
340
- >{{ $t('daq.k3ootr6053') }}</span>
341
- </td>
342
- <!-- 产品 / Recipe:本线活动批次(运行中才携带;停线/未分配 → --) -->
343
- <td class="prod-cell">
344
- <template v-if="n.lineId && ctx.lineActive">
345
- <b :title="$t('daq.k1prdrtip132')">{{ ctx.lineProduct || '--' }}</b>
346
- <small
347
- class="mono"
348
- :title="$t('daq.k1prdrtip132')"
349
- >{{ ctx.lineRecipe || '--' }}</small>
350
- </template>
351
- <span
352
- v-else
353
- class="dim"
354
- >--</span>
355
- </td>
356
- <td>
357
- <div class="dev-binds">
358
- <span
359
- v-for="did in nodeDeviceIds(n)"
360
- :key="did"
361
- class="dev-bind-chip"
362
- :title="$t('daq.k2bindtip137')"
363
- >
364
- {{ deviceNameById(did) }}
365
- <span
366
- class="dev-unbind"
367
- title="unbind"
368
- @click="removeNodeDevice(did)"
369
- >✕</span>
370
- </span>
371
- <select
372
- class="line-sel dev-add"
373
- :value="''"
374
- :title="$t('daq.k2bindtip137')"
375
- @change="addNodeDevice"
376
- >
377
- <option value="">
378
- {{ $t('daq.k3own4q056') }}
379
- </option>
380
- <option
381
- v-for="d in bindableDeviceTwins"
382
- :key="d.id"
383
- :value="d.id"
384
- :disabled="(n.deviceIds ?? []).includes(d.id)"
385
- >
386
- {{ deviceNameById(d.id) }}
387
- </option>
388
- </select>
389
- </div>
390
- </td>
391
- <td class="right">
392
- <button
393
- class="node-toggle"
394
- :class="{ off: !n.enabled }"
395
- :title="n.enabled ? $t('daq.k1nodestop146') : $t('daq.k1nodestart147')"
396
- @click="toggleNodeEnabled"
397
- >
398
- <span :class="n.enabled ? 'i-tabler-player-pause' : 'i-tabler-player-play'" />
399
- {{ n.enabled ? $t('daq.k1nodestop146') : $t('daq.k1nodestart147') }}
400
- </button>
401
- <NuxtLink
402
- class="console-link"
403
- :to="`/daq/${n.id}`"
404
- >
405
- <span class="i-tabler-dashboard" />
406
- {{ $t('daq.k3o3jg2074') }}
407
- </NuxtLink>
408
- </td>
409
- </tr>
410
- </template>
411
-
412
- <style scoped>
413
- /* 行组件是渲染隔离单元:父页 scoped 选择器不穿透到这里的元素,故行内全部样式
414
- 随组件内聚在本块。仅表格单元格的 padding/边框由父页 :deep(td) 统一供给。 */
415
- .mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
416
- .dim { opacity: 0.55; }
417
-
418
- .ch { display: block; margin-top: 2px; font-size: 10px; color: var(--ink-faint); }
419
-
420
- .val { font-size: 13px; }
421
- .val small { margin-left: 3px; color: var(--ink-faint); }
422
- /* 数据静默(停用/未运行/采不到数据):最后值置灰呈现,不再冒充实时值 */
423
- .val.stale { opacity: 0.45; }
424
- /* 越限实时值:红字(与行红底叠加仍可读) */
425
- .val.val-alarm { color: var(--tone-danger-dot); font-weight: 700; }
426
-
427
- /* ── 行内实时趋势(WS 读数流直驱;上下限虚线参考) ── */
428
- .trend-cell { width: 128px; }
429
- .trend { display: block; width: 120px; height: 26px; }
430
- .trend .trace {
431
- fill: none;
432
- stroke: var(--tone-info-dot);
433
- stroke-width: 1.4;
434
- }
435
- .trend .trace.alarm { stroke: var(--tone-danger-dot); }
436
- /* 待数据基线:一条极淡的中线(仅装饰 → 用 ink-fainter;非文字无对比度要求) */
437
- .trend .trace-idle {
438
- stroke: var(--ink-fainter);
439
- stroke-width: 1;
440
- stroke-dasharray: 2 4;
441
- opacity: 0.55;
442
- }
443
- .trend .lim {
444
- stroke: color-mix(in srgb, var(--tone-warning-dot) 62%, transparent);
445
- stroke-width: 1;
446
- stroke-dasharray: 3 3;
447
- }
448
- .trend .lim.max { stroke: color-mix(in srgb, var(--tone-danger-dot) 55%, transparent); }
449
-
450
- .st-pill {
451
- display: inline-block;
452
- padding: 2px 9px;
453
- font-family: var(--font-mono);
454
- font-size: 10.5px;
455
- letter-spacing: 0.04em;
456
- border-radius: var(--radius-pill);
457
- }
458
- .st-pill.ok { color: var(--tone-success-dot); background: var(--tone-success-bg); }
459
- .st-pill.warn { color: var(--tone-warning-dot); background: var(--tone-warning-bg); }
460
- .st-pill.alarm { color: var(--tone-danger-dot); background: var(--tone-danger-bg); }
461
- /* 配方越限行:整行淡红底 + 左缘警示条 */
462
- tr.row-recipe-alarm { background: color-mix(in srgb, var(--tone-danger-dot, #ff6b6b) 8%, transparent); }
463
- tr.row-recipe-alarm td:first-child { box-shadow: inset 3px 0 0 var(--tone-danger-dot, #ff6b6b); }
464
- .st-pill.offline { color: var(--tone-neutral-dot); background: var(--tone-neutral-bg); }
465
- /* 非故障的静止态(停用/未分配/未运行):同为中性灰,与故障离线区分靠文案与提示 */
466
- .st-pill.idle, .st-pill.disabled, .st-pill.unassigned { color: var(--tone-neutral-dot); background: var(--tone-neutral-bg); }
467
-
468
- .drv-tag {
469
- font-family: var(--font-mono);
470
- font-size: 10.5px;
471
- padding: 2px 7px;
472
- border: 1px solid var(--line);
473
- border-radius: var(--radius-chip);
474
- color: var(--ink-soft);
475
- }
476
- .drv-tag.planned { opacity: 0.55; border-style: dashed; }
477
-
478
- .console-link { display: inline-flex; gap: 5px; align-items: center; font-size: 12.5px; color: var(--accent); }
479
-
480
- /* 单节点 启动/停止采集(R:独立节点控制) */
481
- .node-toggle {
482
- display: inline-flex;
483
- gap: 4px;
484
- align-items: center;
485
- margin-right: 12px;
486
- padding: 2px 9px;
487
- font-size: 11.5px;
488
- border: 1px solid var(--line);
489
- border-radius: var(--radius-chip);
490
- color: var(--ink);
491
- background: transparent;
492
- cursor: pointer;
493
- transition: border-color 0.15s ease, background 0.15s ease;
494
- }
495
- .node-toggle:hover { border-color: var(--accent); background: var(--hover-tint); }
496
- .node-toggle.off { color: var(--ink-soft); border-style: dashed; opacity: 0.8; }
497
-
498
- .dev-binds { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
499
- .dev-bind-chip { display: inline-flex; gap: 4px; align-items: center; padding: 1px 7px; font-size: 11px; color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); border-radius: var(--radius-chip); }
500
- .dev-unbind { cursor: pointer; opacity: 0.55; font-size: 10px; }
501
- .dev-unbind:hover { opacity: 1; color: var(--tone-danger-dot); }
502
- .dev-add { max-width: 130px; font-size: 11px; }
503
- .line-sel {
504
- max-width: 120px;
505
- padding: 3px 6px;
506
- font-size: 10.5px;
507
- color: var(--ink-soft);
508
- background: var(--paper-deep);
509
- border: 1px solid var(--line-strong);
510
- border-radius: var(--radius-chip);
511
- transition: border-color 0.15s;
512
- }
513
- .line-sel:focus { outline: none; border-color: var(--accent); }
514
-
515
- /* 产线运行列:空心点=未运行(中性) / 呼吸绿点=运行中 —— 与产线状态带同一套点语义 */
516
- .run-pill {
517
- display: inline-flex;
518
- gap: 6px;
519
- align-items: center;
520
- padding: 2px 9px;
521
- font-size: 10.5px;
522
- color: var(--ink-faint);
523
- border: 1px solid var(--line);
524
- border-radius: var(--radius-pill);
525
- }
526
- .run-pill .rp-dot {
527
- width: 6px;
528
- height: 6px;
529
- border: 1.5px solid currentColor;
530
- border-radius: 50%;
531
- opacity: 0.7;
532
- }
533
- .run-pill.na {
534
- border-style: dashed;
535
- opacity: 0.75;
536
- }
537
- .run-pill.on {
538
- color: var(--tone-success-dot);
539
- border-color: color-mix(in srgb, var(--tone-success-dot) 40%, transparent);
540
- background: var(--tone-success-bg);
541
- }
542
- .run-pill.on .rp-dot {
543
- background: var(--tone-success-dot);
544
- border-color: transparent;
545
- opacity: 1;
546
- }
547
- /* ── 窄屏字号地板 ────────────────────────────────────────────────────────
548
- * 节点行是"一台仪表的铭牌":桌面 10–11px 的 mono 微字是刻意的仪器语言。
549
- * 但 375px 下这一行同时是**横向卷轴里的账页**,读距近、字号小、还要左右扫 ——
550
- * 实测审计在 /daq 单页稳定报出近 2000 个 <11px 的文本节点,全部来自这里。
551
- * 手持档把二级/三级信息抬到 11.5px(一级不受影响),布局不变(它们本就在
552
- * 允许换行的单元格里),只是把"看得见"变成"读得了"。 */
553
- @media (max-width: 900px) {
554
- .ch,
555
- .drv-tag,
556
- .st-pill,
557
- .node-meta small,
558
- .dev-unbind,
559
- .dev-bind-chip,
560
- .dev-add,
561
- small.mono {
562
- font-size: 11.5px;
563
- }
564
- }
565
-
566
- @media (prefers-reduced-motion: no-preference) {
567
- .run-pill.on .rp-dot { animation: rpPulse 1.8s ease-in-out infinite; }
568
- }
569
- @keyframes rpPulse {
570
- 0%, 100% { box-shadow: 0 0 2px color-mix(in srgb, var(--tone-success-dot) 55%, transparent); }
571
- 50% { box-shadow: 0 0 7px color-mix(in srgb, var(--tone-success-dot) 85%, transparent); }
572
- }
573
-
574
- /* 产品 / Recipe 列:产品主行 + Recipe 副行(两行紧凑,超长省略) */
575
- .prod-cell { max-width: 170px; }
576
- .prod-cell b {
577
- display: block;
578
- font-weight: 600;
579
- overflow: hidden;
580
- text-overflow: ellipsis;
581
- white-space: nowrap;
582
- }
583
- .prod-cell small {
584
- display: block;
585
- margin-top: 1px;
586
- font-size: 10px;
587
- color: var(--ink-faint);
588
- overflow: hidden;
589
- text-overflow: ellipsis;
590
- white-space: nowrap;
591
- }
592
- </style>
1
+ <script setup lang="ts">
2
+ /**
3
+ * DaqNodeRow —— 数采节点表格行(渲染隔离单元)。
4
+ *
5
+ * 行级派生态(pill/趋势串/限值线/产线运行态/节拍文案)全部在本组件 computed 内求值,
6
+ * 只追踪「本行节点」的响应式依赖:其它行/其它节点的 WS 读数帧失效不再波及本行 patch
7
+ * (等价 v-memo 的隔离效果,但 v-memo 在 SSR 编译产物引用未定义的 _cache 导致 500,
8
+ * 子组件 props 身份跳过是 SSR 安全形态)。父层 v-for 传稳定节点引用,依赖不变零重渲。
9
+ */
10
+ import { computed } from 'vue'
11
+ import { message } from 'ant-design-vue'
12
+ import { useDaqStream, type DaqNodeLive } from '@/app/composables/workshop/useDaqStream'
13
+ import { useDcwStream } from '@/app/composables/workshop/useDcwStream'
14
+ import { useDeviceTwins } from '@/app/composables/workshop/useDeviceTwins'
15
+ import { apiErrorMessage } from '@/app/utils/api-error'
16
+ import { daqKeyFromRef, type DaqNodeState } from '#shared/daq-protocol'
17
+
18
+ const props = defineProps<{ n: DaqNodeLive }>()
19
+
20
+ const { t } = useI18n()
21
+ const daq = useDaqStream()
22
+ const dcw = useDcwStream()
23
+ const deviceTwins = useDeviceTwins()
24
+
25
+ // ---------- 行级展示状态(与页面筛选同源的诚实状态机) ----------
26
+ type RowState = DaqNodeState | 'idle' | 'disabled' | 'unassigned'
27
+
28
+ /** 数据新鲜度:超过 max(4×有效周期, 12s) 无新样本视为「采不到数据」(容忍 5s REST 刷新拍与时钟偏差) */
29
+ function staleOf(n: DaqNodeLive): boolean {
30
+ if (!n.lastAt) return true
31
+ const iv = n.intervalMs ?? daq.controller.defaultIntervalMs
32
+ return Date.now() - Date.parse(n.lastAt) > Math.max(iv * 4, 12_000)
33
+ }
34
+
35
+ function rowStateOf(n: DaqNodeLive): RowState {
36
+ if (!n.enabled) return 'disabled'
37
+ if (!n.lineId) return 'unassigned'
38
+ if (!dcw.lineStateOf(n.lineId).active) return 'idle'
39
+ if (!daq.controller.running || staleOf(n)) return 'offline'
40
+ return n.state
41
+ }
42
+
43
+ function isLive(n: DaqNodeLive): boolean {
44
+ const s = rowStateOf(n)
45
+ return s === 'ok' || s === 'warn' || s === 'alarm'
46
+ }
47
+
48
+ /** 活动配方对该节点的数采监控窗口(本线活动批次;不同 Recipe 不同窗口) */
49
+ function recipeWinOf(n: { lineId: string, id: string }): { min?: number, max?: number } | null {
50
+ if (!n.lineId) return null
51
+ const run = dcw.lineStateOf(n.lineId)
52
+ if (!run.active || !run.recipeId) return null
53
+ const r = dcw.recipes.find(x => x.id === run.recipeId)
54
+ return r?.daqWindows?.find(w => w.nodeId === n.id) ?? null
55
+ }
56
+
57
+ /** 配方窗口越限(与服务端 alarm 判定同源;行标红) */
58
+ function recipeAlarm(n: DaqNodeLive): boolean {
59
+ const w = recipeWinOf(n)
60
+ if (!w || n.value == null) return false
61
+ return (w.min != null && n.value < w.min) || (w.max != null && n.value > w.max)
62
+ }
63
+
64
+ /** 行内趋势的有效限值:活动配方窗口优先,节点预警带兜底,皆无 → 不画限值线 */
65
+ function limitOf(n: DaqNodeLive): { min: number | null | undefined, max: number | null | undefined } {
66
+ const w = recipeWinOf(n)
67
+ if (w && (w.min != null || w.max != null)) return { min: w.min, max: w.max }
68
+ if (n.warnLow != null || n.warnHigh != null) return { min: n.warnLow, max: n.warnHigh }
69
+ return { min: null, max: null }
70
+ }
71
+
72
+ // ---------- 行内趋势(SVG polyline;数据节拍由 store 合批,本组件按行失效) ----------
73
+ const TREND_W = 120
74
+ const TREND_H = 26
75
+
76
+ function trendPath(hist: number[]): string {
77
+ const vals = hist.filter(Number.isFinite)
78
+ if (vals.length < 2) return ''
79
+ const min = Math.min(...vals)
80
+ const max = Math.max(...vals)
81
+ const span = max - min || 1
82
+ return vals.map((v, i) => `${((i / (vals.length - 1)) * TREND_W).toFixed(1)},${(TREND_H - ((v - min) / span) * (TREND_H - 2) - 1).toFixed(1)}`).join(' ')
83
+ }
84
+
85
+ /** 上下限参考线在趋势图内的 y 坐标(量程不可知或无数据时返回 null 不画) */
86
+ function limitY(hist: number[], limit: number | undefined | null): number | null {
87
+ if (limit == null || !Number.isFinite(limit)) return null
88
+ const vals = hist.filter(Number.isFinite)
89
+ if (vals.length < 2) return null
90
+ const min = Math.min(...vals, limit)
91
+ const max = Math.max(...vals, limit)
92
+ const span = max - min || 1
93
+ return Number((TREND_H - ((limit - min) / span) * (TREND_H - 2) - 1).toFixed(1))
94
+ }
95
+
96
+ /** 状态 pill(含诚实的原因提示;配方越限标签仅在数据新鲜时展示) */
97
+ function statePillOf(n: DaqNodeLive): { key: RowState, label: string, tip: string } {
98
+ const s = rowStateOf(n)
99
+ const offlineLabel = t('daq.k44c2n065')
100
+ if (s === 'offline') {
101
+ if (n.lastError) return { key: s, label: offlineLabel, tip: n.lastError }
102
+ const tip = !daq.controller.running
103
+ ? t('daq.k1gateoff140')
104
+ : t('daq.k1staled129', { p0: Math.round(Math.max((n.intervalMs ?? daq.controller.defaultIntervalMs) * 4, 12_000) / 1000) })
105
+ return { key: s, label: offlineLabel, tip }
106
+ }
107
+ const labels: Record<RowState, string> = {
108
+ ok: t('daq.k41k5c062'),
109
+ warn: t('daq.k49z8v063'),
110
+ alarm: t('daq.k3xmid064'),
111
+ offline: offlineLabel,
112
+ idle: t('daq.k3ozyqz117'),
113
+ disabled: t('daq.k1disabl130'),
114
+ unassigned: t('daq.k3ootr6053'),
115
+ }
116
+ if (s === 'idle') return { key: s, label: labels.idle, tip: t('daq.k1idlehin139') }
117
+ if ((s === 'ok' || s === 'warn' || s === 'alarm') && recipeAlarm(n)) {
118
+ const w = recipeWinOf(n)
119
+ return { key: 'alarm', label: t('daq.k1l3pt51104'), tip: t('daq.k1hrrqa1122', { p0: w?.min ?? '-∞', p1: w?.max ?? '+∞', p2: '' }) }
120
+ }
121
+ return { key: s, label: labels[s], tip: '' }
122
+ }
123
+
124
+ /** 模板通道语义(server 目录为唯一事实源;模板已删除 → 显示 templateRef 原文降级) */
125
+ function daqTemplateRefCh(templateRef: string): string {
126
+ const tpl = daq.templates.find(x => x.key === daqKeyFromRef(templateRef))
127
+ return tpl ? `${tpl.name} · ${tpl.ch}` : templateRef || '-'
128
+ }
129
+
130
+ /** 信号形态徽标(多源异构可视化:标量时序/向量轮廓/图像帧;模板缺失按标量) */
131
+ const signalKindOf = (templateRef: string): 'scalar' | 'vector' | 'image' => {
132
+ const tpl = daq.templates.find(x => x.key === daqKeyFromRef(templateRef))
133
+ return tpl?.signalKind ?? 'scalar'
134
+ }
135
+ const signalKindLabel = (kind: 'scalar' | 'vector' | 'image'): string =>
136
+ kind === 'vector' ? '向量' : kind === 'image' ? '图像' : '标量'
137
+
138
+ const intervalOf = (intervalMs: number | null): string => {
139
+ if (intervalMs == null) return t('daq.k9vnp9h124', { p0: daq.controller.defaultIntervalMs })
140
+ return `${intervalMs}ms`
141
+ }
142
+
143
+ /** WS 下发节拍展示(null=跟随全局;0=每帧;>0 独立间隔) */
144
+ const publishOf = (v: number | null): string => {
145
+ if (v == null) return t('daq.k9vnp9h124', { p0: daq.controller.defaultPublishIntervalMs })
146
+ if (v === 0) return t('daq.k41mvv078')
147
+ return `${v}ms`
148
+ }
149
+
150
+ /** 驱动是否为预留协议(meta status=planned) */
151
+ const driverPlanned = (kind: string): boolean =>
152
+ daq.meta.drivers.find(d => d.kind === kind)?.status === 'planned'
153
+
154
+ const nodeDeviceIds = (n: DaqNodeLive): string[] =>
155
+ n.deviceIds ?? (n.deviceBindingId ? [n.deviceBindingId] : [])
156
+ const deviceNameById = (id: string): string =>
157
+ deviceTwins.twins.find(x => x.id === id)?.name ?? id
158
+ /** 绑定设备下拉选项:全部真实设备孪生(剔除 daq/dcw 伪孪生) */
159
+ const bindableDeviceTwins = computed(() =>
160
+ deviceTwins.twins.filter(x => x.kind !== 'daq' && !(x.modelRef ?? '').startsWith('daq-') && !(x.modelRef ?? '').startsWith('dcw-')))
161
+
162
+ // ---------- 行渲染上下文:本节点依赖变化才重算(隔离单元核心) ----------
163
+ const ctx = computed(() => {
164
+ const n = props.n
165
+ const lim = limitOf(n)
166
+ const ls = n.lineId ? dcw.lineStateOf(n.lineId) : null
167
+ return {
168
+ tpl: daqTemplateRefCh(n.templateRef),
169
+ pill: statePillOf(n),
170
+ alarm: recipeAlarm(n),
171
+ live: isLive(n),
172
+ trend: trendPath(n.hist),
173
+ limMin: limitY(n.hist, lim.min),
174
+ limMax: limitY(n.hist, lim.max),
175
+ interval: intervalOf(n.intervalMs),
176
+ publish: publishOf(n.publishIntervalMs),
177
+ lineActive: !!ls?.active,
178
+ lineProduct: ls?.productName ?? '',
179
+ lineRecipe: ls?.recipeName ?? '',
180
+ }
181
+ })
182
+
183
+ // ---------- 行内交互(与原页面实现同构;toast 后端可读原因) ----------
184
+ /** 单节点独立 启动/停止采集(PATCH enabled;server 权威,本地乐观翻转 + WS/轮询收敛)。
185
+ * n 即 store 内响应式对象(身份同源),此处乐观翻转与原页面实现一致 */
186
+ async function toggleNodeEnabled(): Promise<void> {
187
+ const node = props.n
188
+ const next = !node.enabled
189
+ try {
190
+ await daq.patchNode(node.id, { enabled: next })
191
+ node.enabled = next
192
+ if (!next) node.state = 'offline'
193
+ message.success(next ? t('daq.k1nodestart147') : t('daq.k1nodestop146'))
194
+ }
195
+ catch (err) {
196
+ message.error(apiErrorMessage(err))
197
+ }
198
+ }
199
+
200
+ async function setNodeLine(e: Event): Promise<void> {
201
+ const lineId = (e.target as HTMLSelectElement).value
202
+ try {
203
+ await daq.patchNode(props.n.id, { lineId })
204
+ const node = props.n
205
+ node.lineId = lineId
206
+ }
207
+ catch (err) {
208
+ message.error(apiErrorMessage(err))
209
+ }
210
+ }
211
+
212
+ /** 节点绑定设备(多对多:add 挂新设备 / remove 摘除一台;server 落库) */
213
+ async function addNodeDevice(e: Event): Promise<void> {
214
+ const deviceId = (e.target as HTMLSelectElement).value
215
+ if (!deviceId) return
216
+ const node = props.n
217
+ if (node.deviceIds?.includes(deviceId)) return
218
+ try {
219
+ await daq.setNodeBindings(node.id, [...(node.deviceIds ?? []), deviceId])
220
+ }
221
+ catch (err) {
222
+ message.error(apiErrorMessage(err))
223
+ }
224
+ ;(e.target as HTMLSelectElement).value = ''
225
+ }
226
+
227
+ async function removeNodeDevice(deviceId: string): Promise<void> {
228
+ const node = props.n
229
+ try {
230
+ await daq.setNodeBindings(node.id, (node.deviceIds ?? []).filter(d => d !== deviceId))
231
+ }
232
+ catch (err) {
233
+ message.error(apiErrorMessage(err))
234
+ }
235
+ }
236
+ </script>
237
+
238
+ <template>
239
+ <tr :class="{ 'row-recipe-alarm': ctx.alarm }">
240
+ <td>
241
+ <span class="mono dim">{{ n.id.slice(0, 8) }}</span>
242
+ <b>{{ n.name }}</b>
243
+ <small class="mono ch">{{ ctx.tpl }}</small>
244
+ </td>
245
+ <td>
246
+ <span
247
+ class="st-pill"
248
+ :class="[ctx.pill.key]"
249
+ :title="ctx.pill.tip"
250
+ >{{ ctx.pill.label }}</span>
251
+ </td>
252
+ <td
253
+ class="mono val"
254
+ :class="{ 'stale': !ctx.live, 'val-alarm': n.state === 'alarm' || ctx.alarm }"
255
+ :title="ctx.live ? undefined : ctx.pill.tip"
256
+ >
257
+ {{ n.value != null ? n.value.toFixed(n.decimals) : '--' }}
258
+ <small>{{ n.unit }}</small>
259
+ </td>
260
+ <td class="trend-cell">
261
+ <svg
262
+ class="trend"
263
+ viewBox="0 0 120 26"
264
+ preserveAspectRatio="none"
265
+ :title="$t('daq.k1trnd002')"
266
+ >
267
+ <line
268
+ v-if="ctx.limMin != null"
269
+ class="lim"
270
+ x1="0"
271
+ :y1="ctx.limMin"
272
+ x2="120"
273
+ :y2="ctx.limMin"
274
+ />
275
+ <line
276
+ v-if="ctx.limMax != null"
277
+ class="lim max"
278
+ x1="0"
279
+ :y1="ctx.limMax"
280
+ x2="120"
281
+ :y2="ctx.limMax"
282
+ />
283
+ <polyline
284
+ v-if="ctx.trend"
285
+ class="trace"
286
+ :class="{ alarm: n.state === 'alarm' || ctx.alarm }"
287
+ :points="ctx.trend"
288
+ />
289
+ <!-- 无足够样本(<2 个有效值)时给一道基线,而不是留一条 points="" 的空 polyline:
290
+ 空 polyline 不渲染任何东西,单元格看上去是"坏了"而不是"还没有数据"。
291
+ 采样由活动批次门控,未开跑时这一列**本来就应该**是空的 —— 需要看得出是"待数据"。 -->
292
+ <line
293
+ v-else
294
+ class="trace-idle"
295
+ x1="0"
296
+ :y1="TREND_H / 2"
297
+ x2="120"
298
+ :y2="TREND_H / 2"
299
+ />
300
+ </svg>
301
+ </td>
302
+ <td class="mono">
303
+ {{ ctx.interval }}
304
+ </td>
305
+ <td class="mono">
306
+ {{ ctx.publish }}
307
+ </td>
308
+ <td>
309
+ <span
310
+ class="drv-tag"
311
+ :class="{ planned: driverPlanned(n.driver) }"
312
+ :title="driverPlanned(n.driver) ? $t('daq.k1plndrv138') : ''"
313
+ >{{ n.driver }}</span>
314
+ <span
315
+ v-if="signalKindOf(n.templateRef) !== 'scalar'"
316
+ class="sig-tag"
317
+ :class="signalKindOf(n.templateRef)"
318
+ :title="signalKindOf(n.templateRef) === 'image' ? '图像帧节点:像素入对象存储,帧列表/画廊可查,daq_export 落原文件' : '向量帧节点:多点轮廓,daq_frames 检索'"
319
+ >{{ signalKindLabel(signalKindOf(n.templateRef)) }}</span>
320
+ </td>
321
+ <td>
322
+ <select
323
+ class="line-sel"
324
+ :value="n.lineId"
325
+ :title="$t('daq.k3q23v3010')"
326
+ @change="setNodeLine"
327
+ >
328
+ <option value="">
329
+ {{ $t('daq.k3ootr6053') }}
330
+ </option>
331
+ <option
332
+ v-for="l in dcw.lines"
333
+ :key="l.id"
334
+ :value="l.id"
335
+ >
336
+ {{ l.name }}
337
+ </option>
338
+ </select>
339
+ </td>
340
+ <!-- 产线运行:呼吸绿点=运行中 / 空心点=未运行(与产线状态带同一套点语义) -->
341
+ <td>
342
+ <span
343
+ v-if="n.lineId"
344
+ class="run-pill"
345
+ :class="{ on: ctx.lineActive }"
346
+ :title="$t('daq.k1runtipc131')"
347
+ >
348
+ <span class="rp-dot" />
349
+ {{ ctx.lineActive ? $t('daq.k3vp67i096') : $t('daq.k3ozyqz117') }}
350
+ </span>
351
+ <span
352
+ v-else
353
+ class="run-pill na"
354
+ >{{ $t('daq.k3ootr6053') }}</span>
355
+ </td>
356
+ <!-- 产品 / Recipe:本线活动批次(运行中才携带;停线/未分配 → --) -->
357
+ <td class="prod-cell">
358
+ <template v-if="n.lineId && ctx.lineActive">
359
+ <b :title="$t('daq.k1prdrtip132')">{{ ctx.lineProduct || '--' }}</b>
360
+ <small
361
+ class="mono"
362
+ :title="$t('daq.k1prdrtip132')"
363
+ >{{ ctx.lineRecipe || '--' }}</small>
364
+ </template>
365
+ <span
366
+ v-else
367
+ class="dim"
368
+ >--</span>
369
+ </td>
370
+ <td>
371
+ <div class="dev-binds">
372
+ <span
373
+ v-for="did in nodeDeviceIds(n)"
374
+ :key="did"
375
+ class="dev-bind-chip"
376
+ :title="$t('daq.k2bindtip137')"
377
+ >
378
+ {{ deviceNameById(did) }}
379
+ <span
380
+ class="dev-unbind"
381
+ title="unbind"
382
+ @click="removeNodeDevice(did)"
383
+ >✕</span>
384
+ </span>
385
+ <select
386
+ class="line-sel dev-add"
387
+ :value="''"
388
+ :title="$t('daq.k2bindtip137')"
389
+ @change="addNodeDevice"
390
+ >
391
+ <option value="">
392
+ {{ $t('daq.k3own4q056') }}
393
+ </option>
394
+ <option
395
+ v-for="d in bindableDeviceTwins"
396
+ :key="d.id"
397
+ :value="d.id"
398
+ :disabled="(n.deviceIds ?? []).includes(d.id)"
399
+ >
400
+ {{ deviceNameById(d.id) }}
401
+ </option>
402
+ </select>
403
+ </div>
404
+ </td>
405
+ <td class="right">
406
+ <button
407
+ class="node-toggle"
408
+ :class="{ off: !n.enabled }"
409
+ :title="n.enabled ? $t('daq.k1nodestop146') : $t('daq.k1nodestart147')"
410
+ @click="toggleNodeEnabled"
411
+ >
412
+ <span :class="n.enabled ? 'i-tabler-player-pause' : 'i-tabler-player-play'" />
413
+ {{ n.enabled ? $t('daq.k1nodestop146') : $t('daq.k1nodestart147') }}
414
+ </button>
415
+ <NuxtLink
416
+ class="console-link"
417
+ :to="`/daq/${n.id}`"
418
+ >
419
+ <span class="i-tabler-dashboard" />
420
+ {{ $t('daq.k3o3jg2074') }}
421
+ </NuxtLink>
422
+ </td>
423
+ </tr>
424
+ </template>
425
+
426
+ <style scoped>
427
+ /* 行组件是渲染隔离单元:父页 scoped 选择器不穿透到这里的元素,故行内全部样式
428
+ 随组件内聚在本块。仅表格单元格的 padding/边框由父页 :deep(td) 统一供给。 */
429
+ .mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
430
+ .dim { opacity: 0.55; }
431
+
432
+ .ch { display: block; margin-top: 2px; font-size: 10px; color: var(--ink-faint); }
433
+
434
+ .val { font-size: 13px; }
435
+ .val small { margin-left: 3px; color: var(--ink-faint); }
436
+ /* 数据静默(停用/未运行/采不到数据):最后值置灰呈现,不再冒充实时值 */
437
+ .val.stale { opacity: 0.45; }
438
+ /* 越限实时值:红字(与行红底叠加仍可读) */
439
+ .val.val-alarm { color: var(--tone-danger-dot); font-weight: 700; }
440
+
441
+ /* ── 行内实时趋势(WS 读数流直驱;上下限虚线参考) ── */
442
+ .trend-cell { width: 128px; }
443
+ .trend { display: block; width: 120px; height: 26px; }
444
+ .trend .trace {
445
+ fill: none;
446
+ stroke: var(--tone-info-dot);
447
+ stroke-width: 1.4;
448
+ }
449
+ .trend .trace.alarm { stroke: var(--tone-danger-dot); }
450
+ /* 待数据基线:一条极淡的中线(仅装饰 → 用 ink-fainter;非文字无对比度要求) */
451
+ .trend .trace-idle {
452
+ stroke: var(--ink-fainter);
453
+ stroke-width: 1;
454
+ stroke-dasharray: 2 4;
455
+ opacity: 0.55;
456
+ }
457
+ .trend .lim {
458
+ stroke: color-mix(in srgb, var(--tone-warning-dot) 62%, transparent);
459
+ stroke-width: 1;
460
+ stroke-dasharray: 3 3;
461
+ }
462
+ .trend .lim.max { stroke: color-mix(in srgb, var(--tone-danger-dot) 55%, transparent); }
463
+
464
+ .st-pill {
465
+ display: inline-block;
466
+ padding: 2px 9px;
467
+ font-family: var(--font-mono);
468
+ font-size: 10.5px;
469
+ letter-spacing: 0.04em;
470
+ border-radius: var(--radius-pill);
471
+ }
472
+ .st-pill.ok { color: var(--tone-success-dot); background: var(--tone-success-bg); }
473
+ .st-pill.warn { color: var(--tone-warning-dot); background: var(--tone-warning-bg); }
474
+ .st-pill.alarm { color: var(--tone-danger-dot); background: var(--tone-danger-bg); }
475
+ /* 配方越限行:整行淡红底 + 左缘警示条 */
476
+ tr.row-recipe-alarm { background: color-mix(in srgb, var(--tone-danger-dot, #ff6b6b) 8%, transparent); }
477
+ tr.row-recipe-alarm td:first-child { box-shadow: inset 3px 0 0 var(--tone-danger-dot, #ff6b6b); }
478
+ .st-pill.offline { color: var(--tone-neutral-dot); background: var(--tone-neutral-bg); }
479
+ /* 非故障的静止态(停用/未分配/未运行):同为中性灰,与故障离线区分靠文案与提示 */
480
+ .st-pill.idle, .st-pill.disabled, .st-pill.unassigned { color: var(--tone-neutral-dot); background: var(--tone-neutral-bg); }
481
+
482
+ .drv-tag {
483
+ font-family: var(--font-mono);
484
+ font-size: 10.5px;
485
+ padding: 2px 7px;
486
+ border: 1px solid var(--line);
487
+ border-radius: var(--radius-chip);
488
+ color: var(--ink-soft);
489
+ }
490
+ .drv-tag.planned { opacity: 0.55; border-style: dashed; }
491
+ .sig-tag {
492
+ font-family: var(--font-mono);
493
+ font-size: 10.5px;
494
+ padding: 2px 7px;
495
+ margin-left: 4px;
496
+ border-radius: var(--radius-chip);
497
+ color: #fff;
498
+ }
499
+ .sig-tag.vector { background: #7c5cff; }
500
+ .sig-tag.image { background: #e58a2f; }
501
+
502
+ .console-link { display: inline-flex; gap: 5px; align-items: center; font-size: 12.5px; color: var(--accent); }
503
+
504
+ /* 单节点 启动/停止采集(R:独立节点控制) */
505
+ .node-toggle {
506
+ display: inline-flex;
507
+ gap: 4px;
508
+ align-items: center;
509
+ margin-right: 12px;
510
+ padding: 2px 9px;
511
+ font-size: 11.5px;
512
+ border: 1px solid var(--line);
513
+ border-radius: var(--radius-chip);
514
+ color: var(--ink);
515
+ background: transparent;
516
+ cursor: pointer;
517
+ transition: border-color 0.15s ease, background 0.15s ease;
518
+ }
519
+ .node-toggle:hover { border-color: var(--accent); background: var(--hover-tint); }
520
+ .node-toggle.off { color: var(--ink-soft); border-style: dashed; opacity: 0.8; }
521
+
522
+ .dev-binds { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
523
+ .dev-bind-chip { display: inline-flex; gap: 4px; align-items: center; padding: 1px 7px; font-size: 11px; color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent); border-radius: var(--radius-chip); }
524
+ .dev-unbind { cursor: pointer; opacity: 0.55; font-size: 10px; }
525
+ .dev-unbind:hover { opacity: 1; color: var(--tone-danger-dot); }
526
+ .dev-add { max-width: 130px; font-size: 11px; }
527
+ .line-sel {
528
+ max-width: 120px;
529
+ padding: 3px 6px;
530
+ font-size: 10.5px;
531
+ color: var(--ink-soft);
532
+ background: var(--paper-deep);
533
+ border: 1px solid var(--line-strong);
534
+ border-radius: var(--radius-chip);
535
+ transition: border-color 0.15s;
536
+ }
537
+ .line-sel:focus { outline: none; border-color: var(--accent); }
538
+
539
+ /* 产线运行列:空心点=未运行(中性) / 呼吸绿点=运行中 —— 与产线状态带同一套点语义 */
540
+ .run-pill {
541
+ display: inline-flex;
542
+ gap: 6px;
543
+ align-items: center;
544
+ padding: 2px 9px;
545
+ font-size: 10.5px;
546
+ color: var(--ink-faint);
547
+ border: 1px solid var(--line);
548
+ border-radius: var(--radius-pill);
549
+ }
550
+ .run-pill .rp-dot {
551
+ width: 6px;
552
+ height: 6px;
553
+ border: 1.5px solid currentColor;
554
+ border-radius: 50%;
555
+ opacity: 0.7;
556
+ }
557
+ .run-pill.na {
558
+ border-style: dashed;
559
+ opacity: 0.75;
560
+ }
561
+ .run-pill.on {
562
+ color: var(--tone-success-dot);
563
+ border-color: color-mix(in srgb, var(--tone-success-dot) 40%, transparent);
564
+ background: var(--tone-success-bg);
565
+ }
566
+ .run-pill.on .rp-dot {
567
+ background: var(--tone-success-dot);
568
+ border-color: transparent;
569
+ opacity: 1;
570
+ }
571
+ /* ── 窄屏字号地板 ────────────────────────────────────────────────────────
572
+ * 节点行是"一台仪表的铭牌":桌面 10–11px 的 mono 微字是刻意的仪器语言。
573
+ * 但 375px 下这一行同时是**横向卷轴里的账页**,读距近、字号小、还要左右扫 ——
574
+ * 实测审计在 /daq 单页稳定报出近 2000 个 <11px 的文本节点,全部来自这里。
575
+ * 手持档把二级/三级信息抬到 11.5px(一级不受影响),布局不变(它们本就在
576
+ * 允许换行的单元格里),只是把"看得见"变成"读得了"。 */
577
+ @media (max-width: 900px) {
578
+ .ch,
579
+ .drv-tag,
580
+ .st-pill,
581
+ .node-meta small,
582
+ .dev-unbind,
583
+ .dev-bind-chip,
584
+ .dev-add,
585
+ small.mono {
586
+ font-size: 11.5px;
587
+ }
588
+ }
589
+
590
+ @media (prefers-reduced-motion: no-preference) {
591
+ .run-pill.on .rp-dot { animation: rpPulse 1.8s ease-in-out infinite; }
592
+ }
593
+ @keyframes rpPulse {
594
+ 0%, 100% { box-shadow: 0 0 2px color-mix(in srgb, var(--tone-success-dot) 55%, transparent); }
595
+ 50% { box-shadow: 0 0 7px color-mix(in srgb, var(--tone-success-dot) 85%, transparent); }
596
+ }
597
+
598
+ /* 产品 / Recipe 列:产品主行 + Recipe 副行(两行紧凑,超长省略) */
599
+ .prod-cell { max-width: 170px; }
600
+ .prod-cell b {
601
+ display: block;
602
+ font-weight: 600;
603
+ overflow: hidden;
604
+ text-overflow: ellipsis;
605
+ white-space: nowrap;
606
+ }
607
+ .prod-cell small {
608
+ display: block;
609
+ margin-top: 1px;
610
+ font-size: 10px;
611
+ color: var(--ink-faint);
612
+ overflow: hidden;
613
+ text-overflow: ellipsis;
614
+ white-space: nowrap;
615
+ }
616
+ </style>