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
package/README-zh.md CHANGED
@@ -1,833 +1,928 @@
1
- <div align="center">
2
-
3
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/hero.png" alt="AgentWorkShop —— 让 Agent 团队运行真实产线" width="100%" />
4
-
5
- <br />
6
-
7
- # AgentWorkShop
8
-
9
- **AI Agent 团队与产线在此交汇。**
10
-
11
- [![npm version](https://img.shields.io/npm/v/agentworkshop?logo=npm&logoColor=white&label=npm&color=CB3837)](https://github.com/kingdol666/AgentWorkShop)
12
- [![npm downloads](https://img.shields.io/npm/dm/agentworkshop?logo=npm&logoColor=white&label=downloads&color=CB3837)](https://github.com/kingdol666/AgentWorkShop)
13
- [![GitHub release](https://img.shields.io/github/v/release/kingdol666/AgentWorkShop?logo=github&label=release&color=35e0a0)](https://github.com/kingdol666/AgentWorkShop/releases)
14
- [![Stars](https://img.shields.io/github/stars/kingdol666/AgentWorkShop?logo=github&label=stars&color=35e0a0)](https://github.com/kingdol666/AgentWorkShop/stargazers)
15
- [![Last commit](https://img.shields.io/github/last-commit/kingdol666/AgentWorkShop?logo=git&logoColor=white&label=last%20commit)](https://github.com/kingdol666/AgentWorkShop/commits)
16
- [![Issues](https://img.shields.io/github/issues/kingdol666/AgentWorkShop?logo=github&label=issues)](https://github.com/kingdol666/AgentWorkShop/issues)
17
- [![License](https://img.shields.io/badge/license-PolyForm%20Noncommercial%201.0.0-8A2BE2?logo=openaccess&logoColor=white)](./LICENSE)
18
-
19
- [![Nuxt 4](https://img.shields.io/badge/Nuxt-4-00DC82?logo=nuxt&logoColor=white)](https://nuxt.com)
20
- [![Vue 3.5](https://img.shields.io/badge/Vue-3.5-42B883?logo=vuedotjs&logoColor=white)](https://vuejs.org)
21
- [![TypeScript 5.7](https://img.shields.io/badge/TypeScript-5.7-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
22
- [![Node ≥ 23.4](https://img.shields.io/badge/Node.js-%E2%89%A5%2023.4-3C873A?logo=nodedotjs&logoColor=white)](https://nodejs.org)
23
- [![SQLite node:sqlite](https://img.shields.io/badge/SQLite-node%3Asqlite-003B57?logo=sqlite&logoColor=white)](https://nodejs.org/api/sqlite.html)
24
- [![Modbus · OPC UA · MQTT · HTTP](https://img.shields.io/badge/%E7%8E%B0%E5%9C%BA%E6%80%BB%E7%BA%BF-Modbus%20%C2%B7%20OPC%20UA%20%C2%B7%20MQTT%20%C2%B7%20HTTP-41c8f4?logo=siemens&logoColor=white)](./docs/site/guide/daq-protocols.md)
25
- [![Plugins](https://img.shields.io/badge/%E6%8F%92%E4%BB%B6-%E7%83%AD%E9%87%8D%E8%BD%BD-8b5cf6?logo=puzzle&logoColor=white)](./docs/plugins.md)
26
- [![Docs](https://img.shields.io/badge/%E6%96%87%E6%A1%A3-VitePress%20%C2%B7%20%E4%B8%AD%2FEN-ffd75e?logo=vitepress&logoColor=black)](https://kingdol666.github.io/AgentWorkShop)
27
- [![PRs welcome](https://img.shields.io/badge/PRs-welcome-ff69b4?logo=git&logoColor=white)](https://github.com/kingdol666/AgentWorkShop/pulls)
28
-
29
- **[English](./README.md)** · **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)** · **[更新日志](./changelog.md)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
30
-
31
- <sub><b>v0.7.54</b> · 14 个执行引擎 · 6 种现场协议(5 内置 + 串口插件)+ MES REST 集成 · 116 个运行时设置项 · 双语文档(简体中文 / English)</sub>
32
-
33
- <br />
34
-
35
- *一个配置驱动的平台:**AI Agent 团队**与**工业数字孪生**共享同一运行时——Agent 查询真实遥测、经人工审批的写控回路下发监督设定值,每个事件实时推送到 3D 孪生。*
36
-
37
- </div>
38
-
39
- > [!IMPORTANT]
40
- > **定位声明:监督层。** AgentWorkShop 是面向产线管理、数字孪生、数采与 Agent 编排的**监督层**(SCADA 同位)平台,运行在**秒级软实时**档位。
41
- > 它**不是**硬实时控制器:任何时序关键回路(**< 10 ms**、联锁、安全、伺服)**必须在 PLC 内实现**。本平台下发的设定值均为建议性——产线侧逻辑可否决。
42
-
43
- ---
44
-
45
- <table>
46
- <tr>
47
- <td width="33%" valign="top">
48
-
49
- **图例索引**
50
-
51
- `图 01` 闭环全流程<br/>
52
- `图 02` 数采中心<br/>
53
- `图 03` 产线运营<br/>
54
- `图 04` 数字孪生<br/>
55
- `图 05` 仪表盘<br/>
56
- `图 06` 自适应布局
57
-
58
- </td>
59
- <td width="33%" valign="top">
60
-
61
- **快速跳转**
62
-
63
- [这是什么?](#这是什么) · [特性总览](#特性总览)<br/>
64
- [界面一览](#界面一览) · [设计架构](#设计架构)<br/>
65
- [快速开始](#快速开始) · [配置与 CLI](#配置与-cli--真正的配置驱动)<br/>
66
- [工业栈详解](#工业栈详解) · [使用说明](#使用说明)<br/>
67
- [端到端验证](#端到端验证) · [项目结构](#项目结构)<br/>
68
- [技术栈](#技术栈) · [开发指南](#开发指南)<br/>
69
- [路线图](#路线图) · [许可证](#许可证)
70
-
71
- </td>
72
- <td width="33%" valign="top">
73
-
74
- **一眼看懂**
75
-
76
- 监督层,秒级软实时<br/>
77
- 14 个执行引擎 · 4 个接入入口<br/>
78
- 6 种现场协议(5 内置 + 串口插件,读 + 写)<br/>
79
- 7 状态任务机 · 根任务队列 + 执行租约<br/>
80
- 群聊作业 · 定时任务 · HITL 审批<br/>
81
- FTS5 + 向量记忆 · 插件热重载<br/>
82
- SDK · CLI · TUI · 外部 MCP · 约 1100+ 条验收断言
83
-
84
- </td>
85
- </tr>
86
- </table>
87
-
88
- ---
89
-
90
- ## 文档
91
-
92
- 文档为双语——[VitePress 站点](https://kingdol666.github.io/AgentWorkShop) 在全站范围内提供语言切换(简体中文 / English)。深度页面同样随仓库发布,CLI 会把它们复制进发布的 tarball:
93
-
94
- | 主题 | 在线 | 仓库内 | 内容 |
95
- |---|---|---|---|
96
- | **上手指南** | [指南](https://kingdol666.github.io/AgentWorkShop/guide/getting-started) | `docs/site/guide/` | 安装 → 首次运行 → 第一次「Agent × 产线」会话、配置系统、数采协议、数控读写、HITL、配方版本、多 Harness 团队、产线权限、AML |
97
- | **插件开发** | [插件指南](https://kingdol666.github.io/AgentWorkShop/plugins/) | [`docs/plugins.md`](./docs/plugins.md) | 完整扩展契约:三种作用域、`index.mjs` 清单、`ctx` 服务端/浏览器能力面、`settings`/`groups` 声明、生命周期事件、i18n、面板、团队级开关、一个真实案例 |
98
- | **SDK** | [SDK 指南](https://kingdol666.github.io/AgentWorkShop/sdk/) | [`docs/sdk.md`](./docs/sdk.md) | `agentworkshop/sdk` 作为编程客户端(带信封处理的平台 REST 客户端)与插件扩展基座;TypeScript 类型;浏览器端 SDK |
99
- | **CLI** | [CLI 手册](https://kingdol666.github.io/AgentWorkShop/cli/) | [`docs/cli.md`](./docs/cli.md) | 全部 15 个 `aw` 指令、全局选项、退出码、双模式路径模型、指令注册系统、维护者发布指引 |
100
- | **AML** | [AML 指南](https://kingdol666.github.io/AgentWorkShop/guide/aml) | [`docs/aml.md`](./docs/aml.md) | 自动建模实验室:数据集构建、作业编排、模型注册表、晋级门禁、Agent 工具 |
101
- | **TUI** | — | [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md) | 终端工作台:频道、Agent、任务、实时监控、HITL 应答 |
102
- | **多 Harness 架构** | — | [`docs/multi-harness-architecture.md`](./docs/multi-harness-architecture.md) | 引擎分类、归一化会话契约、供应商/模型目录、失败模式 |
103
-
104
- ---
105
-
106
- ## 这是什么?
107
-
108
- AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码 Agent 团队,配备 lead 调度器、7 状态任务机、持久记忆,以及四个互操作入口(WebSocket / MCP / A2A / REST)。
109
-
110
- 随后它长出了**工业半边**:完整的数采与写控栈(Modbus TCP / OPC UA)、带配方与批次运行的产线、3D 数字孪生小镇、一个**自动建模实验室**(数据集 → 训练作业 → 排行榜 → 门禁晋级)——以及让它独一无二的桥:**Agent 可被授予对真实工业节点的访问权——绑定到具体节点、按权限作用域收窄**,带着物理语义查询其实时遥测,并经「联锁 → 人工审批 → 回读校验」管线驱动写操作。
111
-
112
- 它同时**天生可扩展**:一个自包含插件可以同时增强服务端(钩子、路由、Agent 工具、数采驱动、配置分组)与浏览器(面板、i18n),而同样的能力面也通过 SDK 开放给普通程序——见 [`docs/plugins.md`](./docs/plugins.md) 与 [`docs/sdk.md`](./docs/sdk.md)。
113
-
114
- 最终效果:提交一个目标,比如「分析熔体温度趋势并优化设定值」——Agent 团队读取真实传感器历史、计算统计量、提议新设定值、在 HITL 面板等您批准、写入 PLC、校验回读、带着数值汇报。**端到端,自动化 E2E 已验证。**
115
-
116
- <div align="center">
117
-
118
- ### 图 01 — 闭环全流程
119
-
120
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="Agent 团队读取实时遥测、提议设定值、等待审批、写入 PLC 并校验回读" width="88%" />
121
-
122
- <sub><b>目标 → 读取 → 计算 → 审批 → 写控 → 回读 → 汇报。</b><br/>
123
- 录制自运行中的实例:真实数采历史、真实写控、真实 HITL 审批。</sub>
124
-
125
- </div>
126
-
127
- > [!NOTE]
128
- > 本 README 中的每一张图都是**运行中实例**的录屏或截图,没有一张是效果图。屏幕上的数字来自流经产品同一套代码路径的工业数据。
129
-
130
- <div align="center">
131
-
132
- ### 🎬 实机演示(4 分 11 秒,英文配音 + 字幕)
133
-
134
- <a href="https://github.com/kingdol666/AgentWorkShop/blob/main/docs/site/public/demo/agentworkshop-demo.mp4"><img src="docs/site/public/demo/poster.jpg" alt="AgentWorkShop 实机演示:数采中心、写控下发回读、串口插件、Agent 团队执行、闭环趋势与 3D 数字孪生" width="86%" /></a>
135
-
136
- <sub><b>点击封面观看完整演示。</b>真实 PLC 模拟器 + 真实串口枚举 + 真实 Agent 团队执行,全程无剪辑造假。<br/>场景:仪表盘 → 数采中心(实时) → 写控下发与回读 → 串口协议插件 → Agent 团队执行 → 闭环趋势 → 3D 数字孪生。</sub>
137
-
138
- </div>
139
-
140
- ---
141
- ## 特性总览
142
-
143
- #### Agent 团队运行时
144
-
145
- | 能力 | 为何重要 |
146
- |---|---|
147
- | **Lead 编排** | 每个 Channel 一名 lead:分解目标、派发空闲 worker、失败重派、判定目标满足度。LLM 决策 + 确定性规则引擎兜底——系统永不停滞。 |
148
- | **三种执行模式** | `goal`(满意度判定)· `loop`(定间隔重放)· `pipeline`(顺序阶段)。7 状态任务机带进度、产物与完整历史。 |
149
- | **Harness 无关** | 一个 `AgentInterface`,**14 个引擎**分三类传输形态:**进程内**——`mock`(无 LLM)、`claude`(Claude Agent SDK,常驻会话,同轮 steer);**经协议常驻会话**——`omp`(RPC 子进程)、`codex`(app-server JSON-RPC)、`dsh` / `qwen` / `hermes`(ACP)、`opencode`(serve + HTTP/SSE);**带结构化事件流的无头 CLI**——`gemini`(stream-json)、`copilot`(JSONL)、`cursor`(stream-json)、`crush`(非交互运行)、`goose`(stream-json)、`pi`(`-p --mode json`)。平台永远不知道跑的是哪个。 |
150
- | **Channel 级 LLM 选择** | 每个 Channel 从 Harness 实时目录中选 **harness → provider → model(+effort)**(如 omp 的 `zhipu-coding-plan/glm-5.3-flash`)。成员未显式覆盖即继承——一个团队混用多种 harness 是一等公民设定,不是绕行。 |
151
- | **Harness 可用性检查** | `GET /api/workshop/harnesses` 逐引擎探测 PATH 上的 CLI。前端禁用未安装项,且每个入口在执行前都做强校验。 |
152
- | **停滞安全的监督与任务治理** | 提交的目标进入 **FIFO 根任务队列**,排队位次可见。**监督看门狗**区分「卡死」与「慢」——Agent 工具调用被当作活性信号,健康的长工业作业不会被误回收,真停滞仍会呈报 lead。每次派发携带**派发代 + 执行租约**,被取代 worker 的迟到事件在准入层直接丢弃,而不是寄希望于事后对账。 |
153
- | **Harness 连续性** | 每个引擎声明连续性形态(`persistent` / `per_turn`);常驻会话在连续性租约下跨轮复用(pid / 会话 / 复用计数 / 最近重启原因),服务重启能恢复的恢复,而不是悄悄重新拉起。 |
154
- | **Channel 群聊与原生 HITL** | 频道时间线是真正的群聊:成员请求升级为**可追踪作业**(不是一条会丢的消息);带原生 ask 能力的引擎(如 `omp`)把 HITL 提问路由进平台——您批准一次,引擎带着回执继续跑。成员权限与用户通知是一等公民。 |
155
- | **定时任务** | 任意 Channel 任务可挂上**调度**——固定 `interval`(60s 下限)或 `daily` 每日定点——在 `/workshop/schedules` 页或 REST API 管理,带逐次运行历史、忙等守卫(频道仍有在飞任务时触发顺延)与 Channel 级可见性。 |
156
- | **持久记忆与频道过程记忆** | 私有 + Channel 共享双域;FTS5 CJK 切分,可选向量混合检索,token 预算注入。其上是**过程记忆**:确定性的 root/child/lead 事件名契约、canonical root 摘要、持久 outbox(死信 + 补偿 worker),让一个目标的来龙去脉跨重启存活。 |
157
- | **四个入口** | 一个 manager 坐在每扇门后:**WS**(AEP v1 事件流,seq 续传)、**MCP**(约 25 个进程内工具)、**A2A**(JSON-RPC 2.0 + AgentCard)、**REST**。 |
158
-
159
- #### 工业栈
160
-
161
- | 能力 | 为何重要 |
162
- |---|---|
163
- | **六协议现场总线** | Modbus TCP、Modbus RTU-over-TCP(串口网关)、OPC UA、MQTT、HTTP/REST,外加**内置串口插件**(RS-232/485 直连:Modbus RTU + ASCII 行)——数采**与**写控双驱动带连接池、分类错误文案与逐驱动连接测试;`mock` 覆盖演示/CI;协议即插件:`ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` 注入后,前端协议下拉与参数表单即插即现(带 ⌁ 徽标)。 |
164
- | **Agent 团队 × 工业作用域** | 把 Agent 绑定到数采/数控节点。Agent 看到的是语义卡(物理含义、单位、安全量程、配方窗口)——而不是裸寄存器。 |
165
- | **人工审批的写控** | 数控下发经过「**安全量程 ∩ 活动配方窗口**」联锁 → 可选 **HITL 审批** → PLC 写入 → **回读校验** → 带签名的写历史。 |
166
- | **数控读写通道** | 每个控制节点都能沿**写入时所用的同一条标定链路**读回 PLC 当前值:周期读 + 按需读 + Agent 读取,SET 与 ACT 并排呈现——读是被动观测,永不被写联锁阻断。 |
167
- | **Recipe 版本化治理** | 参数修改按版本入史(归因 用户/Agent/系统 + 操作者 + 原因)。可非破坏地回退到任意修订版或最近一次良好批次。失效节点参数跳过并明确标识。 |
168
- | **配方链路优化闭环** | Agent 像人类工艺员一样通过配方管理做优化:`recipe_trial` 把多参数候选**整批试验(不写版本)**→ 复测 → 有进步用 `recipe_update` 固化(同一配方 id,版本+1)→ 劣化触发**统一回退**(`recipe_rollback` 带 `dispatch:true` = 定义回退 + PLC 整批恢复)。单参数直调移出闭环;试验受四层限界与同线节拍卡控。 |
169
- | **频道绑定产线(只读授权)** | 频道可绑定一条产线:全员无需节点绑定即可读取该线的运维日志、配方历史与实时状态(工具回执标注「频道绑定,只读」),写操作仍需节点授权。产线简报自动注入成员提示词;换绑即时回收成员运行时。 |
170
- | **工艺参数语义映射与调控闭环** | Agent 用工程语义思考:`param_control(param, value)` 按**工艺参数**寻址(跨批次/换配方语义稳定),`param_read` 读回 PLC 当前值取证。每次写入被**四层限界**逐层收窄——节点安全量程 ∩ 工艺参数基准限界 ∩ 活动产品限界 ∩ 活动配方工艺窗口——且每次下发自动开一条调控记录,由 `dcw_judge` 落判定(keep / rollback / uncertain),`dcw_rollback` 执行回退。 |
171
- | **产线运营** | 产线 → 产品 → 配方 → 批次。配方窗口门控采集并联锁写入;每条样本打标 `product/recipe/run`,实现按批次隔离。 |
172
- | **多形态数采帧管线** | 多点轮廓(测厚仪/扫描仪)与 CCD 图像帧流经模板 sink 管线:向量与元数据入 Timescale(`daq_frames`),像素入对象存储(MinIO,不可达时自动降级到本地磁盘);派生指标阈值越限走既有告警链路。 |
173
- | **Agent 自查工具** | `line_context`、`ops_log`、`recipe_log`、`recipe_versions`、`dcw_journal`——Agent 清楚自己操控的产线/产品/配方,谁做过什么,每个值怎么变。 |
174
-
175
- #### 治理、配置与扩展
176
-
177
- | 能力 | 为何重要 |
178
- |---|---|
179
- | **产线级权限** | 工业数据按**产线**三态门控(无权/仅查看/可操控),强制点在数据面——普通用户未授权前看不到任何产线数据。 |
180
- | **全操作审计日志** | 用户 / Agent / 系统 的每个动作都落进同一份可检索日志;操作者归属「Channel名/成员名」,与用户和系统天然区分。经 WS 实时推送。 |
181
- | **团队级插件开关** | 每个团队(Channel)持有**独立插件开关组**(`channel_plugins`):被关闭插件的工具不注入该团队 Agent。插件本体经 `aw plugin` 与 `/plugins` 页热管理。 |
182
- | **插件扩展 API** | `plugins/<name>/` 下的一个自包含目录**同时增强两半**:`index.mjs`(服务端:钩子、路由、Agent 工具、**数采读驱动 / DCW 写驱动**/帧处理器/节点模板、配置分组、KV、定时器)与 `client.mjs`(浏览器:注入具名插槽的面板、i18n、设置 UI)。三种作用域——`builtin`(随包发布)> `project`(检出)> `user`(`~/.AgentWorkShop`)——启停**与代码修改**均有约 1 秒热重载;停用插件的驱动随热重载立即摘除。内置示例 **serial-bridge**(串口通信:读/写驱动 + 串口探针 API + 前端面板)。完整契约见 [`docs/plugins.md`](./docs/plugins.md)。 |
183
- | **AML —— 自动建模实验室** | 数据集构建 → 训练作业 → 排行榜 → 晋级门禁 → 模型引用,全部可在 `/aml` 页驱动,也可由 Agent 通过 **14 个 `aml_*` 工具**驱动。Python 运行时由 `uv` 引导至配置根内的 `aml/` 资产根;产物与元数据都留在配置根下。模型带人读身份——label(产线 · 配方 · 目标)、description 与产线/目标 id——可用 `aml_model_find` 按场景选型。 |
184
- | **AML 混合孪生 × MPC** | 灰箱物理主干 + 有界 PyTorch 残差;`TwinSnapshot` / `VirtualTrial` / `RecommendationCertificate` 配 UQ/OOD 筛查与全轨迹门禁;`hybrid_twin` profile 会额外注入 **12 个 profile 工具**(场景发现/编译/冻结、物理 spec 起草/校验/编译、快照、试验、MPC、门禁、Provider 目录)与通用工具 `twin_calibration_request`。试验按设计保持虚拟(`candidateExecuted=false`),证书签发前只做推荐、不落真实写入。 |
185
- | **双模式优化闭环** | 专属频道模板把闭环**结构性拆开**:*aml-training* 频道拿建模面(数据集、作业、场景编译、物理 spec、建模任务——无产线写入、无 MPC),*aml-optimization* 频道拿执行面(快照、试验、门禁、MPC、贝叶斯寻优 `twin_bayes_optimize`、受治理微写 `optimization_explore`)——边训边优在结构上不可能。**探索**模式走治理链写入并做响应回读配对(每笔写入落 `optimization_explorations` 台账);**生产**模式要求绑定过门禁的模型(`aml` 模式,实例化时给 `boundModelId`)。 |
186
- | **运行时可观测** | `GET /api/system/monitor` 把 Agent 团队内部暴露成数字:根队列深度、看门狗介入次数、Harness 会话复用、记忆 outbox 积压——每项都有对应的文档化回退开关,新机制可以不重新部署就关掉。 |
187
- | **产线操作单页(`/operations`)** | 一页看全对产线的每一次触碰:实时操作流水(REST 快照 + WS 推流)把写控、数采、建模、配方、回退、报警、产线、人工、系统动作归入**九类分类**,写控行渲染结构化 **前值 → 后值 diff 徽章**(失败标红),并直接从事件流推断**闭环阶段**(监视 → 探索·小步 → 推荐搜索 → 影子验证 → 生产)。同一数据面也供工作台控制台的「产线作业」面板使用。 |
188
- | **外部 MCP 网关** | `aw mcp` 启动零依赖的 **stdio MCP 服务**(38 个工具),自动发现运行中的实例(环境变量 → 锁文件 → 配置文件),把产线、配方(含 mark-good)、受治理 DCW 写入、工艺参数语义映射、数采查询、频道、团队供给、模型晋升、判卷/回退与插件管理暴露给任意 MCP 客户端——受 `mcp.enabled` 运行时设置门控,附 `--doctor` 与 `--print-config` 辅助指令。 |
189
- | **全量配置驱动运行时** | 全部运行旋钮(记忆预算、上下文压缩、回退护栏、保留策略、备份、日志级别、系统时区、MCP 开关…)在设置描述符注册表声明一次,优先级 **config.yml < runtime-settings < env**——**113 个设置项、18 组**(37 live / 79 restart),代码零硬编码默认。 |
190
- | **可配置系统时区** | 一个 `time.timeZone` 设置项(IANA 时区,live 热生效)统一驱动人读时间——日志、聊天、审计、Agent 记录与定时任务;机器时间轴(数采样本、`timestamptz`)仍保存绝对时间。 |
191
- | **可配置节拍** | 采样与查询的默认值/下限全部是 **live 设置**(`daq.sampling.*`、`daq.query.*`):热重载、create/patch 时钳制,Agent 工具描述实时携带当前值。 |
192
-
193
- #### 数字孪生
194
-
195
- | 能力 | 为何重要 |
196
- |---|---|
197
- | **3D 数字孪生** | Three.js 小镇:放置产线设备与 Channel 领地,实时查看设备健康、告警与数值——由同一事件总线驱动。自适应画质阶梯(DPR / 阴影 / Bloom 分档 + 墙钟 FPS 预算)自动匹配机器,`window.__townStats` 暴露真实渲染指标供性能探针使用。 |
198
-
199
- ---
200
-
201
- ## 界面一览
202
-
203
- 下面每一屏都是真实界面,1440×900,录制自正在运行的实例。
204
-
205
- <div align="center">
206
-
207
- ### 图 01 — 闭环全流程
208
-
209
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="Agent 团队读取实时遥测、提议设定值、等待审批、写入 PLC 并校验回读" width="88%" />
210
-
211
- <sub><b>目标 → 读取 → 计算 → 审批 → 写控 → 回读 → 汇报。</b><br/>
212
- 录制自运行中的实例:真实数采历史、真实写控、真实 HITL 审批。</sub>
213
-
214
- <br />
215
-
216
- ### 图 02 — 数采中心
217
-
218
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-02-daq.gif" alt="数采中心:节点台账、实时趋势、报警横条与事件流" width="92%" />
219
-
220
- <sub><b>端到端的采集链路。</b>量规统计带之下的节点台账与健康度、随样本落库而生长的趋势曲线、
221
- 只保留真正未确认项的报警横条,以及滚动的事件流。</sub>
222
-
223
- <br />
224
-
225
- ### 图 03 — 产线运营
226
-
227
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-03-dcw.gif" alt="产线运营:产线、产品、配方与写控制" width="92%" />
228
-
229
- <sub><b>产线 / 产品 / 配方 / 批次。</b>开跑产线即用配方窗口为采集设门,并给每个样本打上
230
- <code>产品/配方/批次</code> 标识;控制节点通过它写入时用的同一条标定路径呈现 <b>SET vs ACT</b>。</sub>
231
-
232
- <br />
233
-
234
- ### 图 04 — 数字孪生
235
-
236
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-04-town.gif" alt="由实时遥测驱动的 3D 数字孪生小镇" width="92%" />
237
-
238
- <sub><b>孪生就是同一条事件总线的渲染结果。</b>设备、频道领地、报警与实时数值——自适应画质阶梯
239
- (DPR / 阴影 / 泛光,墙钟 FPS 预算)让它在中端机器上也保持诚实。</sub>
240
-
241
- <br />
242
-
243
- ### 图 05 — 仪表盘
244
-
245
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-05-dashboard.gif" alt="带 KPI 量规与趋势的运行仪表盘" width="92%" />
246
-
247
- <sub><b>一屏看全工作坊。</b>频道、Agent、任务、数采吞吐与报警——读的是 API 服务的同一份状态,
248
- 不是另建一套指标存储。</sub>
249
-
250
- <br />
251
-
252
- ### 图 06 — 自适应布局
253
-
254
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-06-responsive.gif" alt="同一套界面从桌面到平板再到手机的形态变化" width="92%" />
255
-
256
- <sub><b>桌面 → 平板 → 手机。</b>刻度轨先收成图标轨、再变成抽屉;页头纵向堆叠,
257
- 高密度表格变成可横向滚动的「账页条」,并把身份列钉在左缘。</sub>
258
-
259
- </div>
260
-
261
- <table>
262
- <tr>
263
- <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-workshop.png" alt="Agent 工作台" width="100%" /><br/><sub><b>Agent 工作台。</b>频道时间线、lane、任务、记忆与 HITL 收在同一张工作台。</sub></td>
264
- <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-monitor.png" alt="运行时监控" width="100%" /><br/><sub><b>运行时监控。</b>每条已接线频道、成员数、依赖环与归属用户。</sub></td>
265
- </tr>
266
- <tr>
267
- <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="系统设置" width="100%" /><br/><sub><b>系统设置。</b>18 组 113 个设置项,由描述符驱动——CLI 读的是同一份注册表。</sub></td>
268
- <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-plugins.png" alt="插件管理" width="100%" /><br/><sub><b>插件管理。</b>三种作用域、改代码即热重载、按团队开关。</sub></td>
269
- </tr>
270
- </table>
271
-
272
- ---
273
-
274
- ## 设计架构
275
-
276
- ```mermaid
277
- flowchart TB
278
- subgraph FE["前端 — Nuxt 4 / Vue 3"]
279
- UI["工作台 UI · 3D 孪生 · 大屏"]
280
- WS["AEP 客户端 — seq 续传"]
281
- end
282
- subgraph SRV["服务端 — Nitro / h3"]
283
- REST["REST /api/workshop/**"]
284
- HUB["WS Hub — AEP v1"]
285
- A2A["A2A JSON-RPC"]
286
- MCP["MCP Server"]
287
- subgraph RT["运行时"]
288
- MGR["AgentChannelManager"]
289
- SCH["SchedulerLoop — lead 监督"]
290
- TE["TaskEngine — 7 态任务机"]
291
- AR["AgentRuntime × N"]
292
- MEM["AgentMemory — FTS5 + 向量"]
293
- BUS["事件总线 (ManagerBus) — per-channel seq + 环形缓冲"]
294
- end
295
- subgraph IND["工业"]
296
- DAQ["数采网关 — 逐节点边缘运行时"]
297
- DCW["数控网关 — 写控"]
298
- BR["队列 — inproc / MQTT"]
299
- TSDB["时序库 — SQLite / Timescale"]
300
- end
301
- subgraph HB["Harness 适配器 — 14 个引擎"]
302
- MOCK["mock · claude — 进程内"]
303
- OMP["omp — RPC 子进程"]
304
- CDX["codex — app-server"]
305
- DSH["dsh · qwen · hermes — ACP"]
306
- OC["opencode — serve"]
307
- FAM["gemini · copilot · cursor · crush · goose · pi — 无头 CLI"]
308
- end
309
- DB[("SQLite — channels · agents · tasks
310
- messages · memories (FTS5) · events")]
311
- end
312
- UI <--> WS
313
- WS --> BUS
314
- REST & A2A & MCP --> MGR
315
- MGR --> SCH & TE & AR
316
- AR --> MEM
317
- AR --> MOCK & OMP & CDX & DSH & OC & FAM
318
- MGR & TE & MEM & BUS --> DB
319
- DAQ <--> BR --> TSDB
320
- DCW --> BR
321
- DAQ & DCW --> BUS
322
- ```
323
-
324
- **Agent × 机器之桥**(值得读源码的部分):
325
-
326
- ```
327
- agent ──绑定──▶ 节点 (daq: auto / dcw: manual)
328
- │ │
329
- │ my_industrial_nodes ◀── 语义卡:物理含义 · 单位 · 安全量程 · 配方窗口
330
- │ daq_query ◀── 时序库历史,统计 + 物理语义
331
- │ dcw_control ──▶ 联锁(安全量程 ∩ 配方窗口)
332
- │ ──▶ HITL 审批(manual 模式,180s 超时)
333
- │ ──▶ PLC 写入 → 回读校验 → ACK + 写历史
334
- ◀── Agent 可引用数值的结果文本
335
- ```
336
-
337
- ---
338
-
339
- ## 快速开始
340
-
341
- ### 前置条件
342
-
343
- ```bash
344
- node -v # ≥ 23.4.0(需要内置 node:sqlite)
345
- ```
346
-
347
- > 真实 Agent harness 需要对应 CLI 在 PATH 中——`omp`、`codex`、`dsh`、`opencode`、`gemini`、`qwen`、`copilot`、`cursor`、`crush`、`goose`、`pi` 或 `hermes`(任选子集;同一 Channel 可混用)。`mock` 与 `claude`(SDK)**进程内运行**,无需 PATH 上的 CLI。仪表盘「执行引擎」面板以绿/灰状态点展示每个引擎的就绪度,未安装引擎可点击跳转官网安装页。可选数采基础设施(MQTT broker + TimescaleDB)在 Docker 可达时自动拉起(`docker compose up -d`)。
348
-
349
- ### 方式 A —— 从 npm 安装(推荐)
350
-
351
- ```bash
352
- npm install -g agentworkshop # → `aw` / `agentworkshop` 进入 PATH
353
- aw start # → http://localhost:3001
354
- ```
355
-
356
- 发布出的包内含**预构建的生产产物**(`.output/`),所以 npm 安装后可直接启动——无需构建步骤,也无需构建工具。首次启动时一切初始化进配置根 **`~/.AgentWorkShop`**:默认 `config.yml`、自动生成含随机会话密钥的 `.env`、`runtime-settings.json`、docker-compose 种子、`prompts/`、`commands/`、`plugins/`(由 SDK 示例播种,**默认关闭**)与空的 `data/` 目录。全部运行数据(SQLite、JSON 仓库、备份、日志)也都落在配置根——配置与数据跟着安装走,与当前工作目录无关。
357
-
358
- 不想全局安装、只想跑一次?
359
-
360
- ```bash
361
- npx agentworkshop start # 无需全局 npm 安装
362
- ```
363
-
364
- > `npx` 同样会创建 `~/.AgentWorkShop`——不装全局并不等于在磁盘上不留任何痕迹。
365
-
366
- ### 方式 B —— 源码运行
367
-
368
- ```bash
369
- git clone https://github.com/kingdol666/AgentWorkShop.git && cd AgentWorkShop
370
- pnpm install
371
- pnpm dev # → http://localhost:3000(端口取自 config.yml)
372
- ```
373
-
374
- 源码生产部署:
375
-
376
- ```bash
377
- pnpm build # nuxt build → .output/
378
- pnpm start # 端口取自 config.yml → server.prod.port
379
- ```
380
-
381
- > 在源码检出内,配置根是项目里的 **`.AgentWorkShop/`** 文件夹(运行时覆盖、数据、项目级指令),而 `config.yml` / `.env` 留在检出根,作为版本化的工厂默认值。
382
-
383
- ### 版本更新
384
-
385
- ```bash
386
- aw update # 检查 + 就地更新全局安装
387
- aw update --check # 只报告,不安装
388
- npm install -g agentworkshop@latest # 手动等效
389
- ```
390
-
391
- 版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.7.54**——见[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)。
392
-
393
- ### 第一次「Agent × 产线」会话(约 2 分钟)
394
-
395
- 1. **登录** —— 侧边栏注册(或 `POST /api/users/register`)。
396
- 2. **搭产线** —— 「产线运营」→ 建产线,加数采节点(如 `daq-temp-tc`)与数控节点(如 `dcw-temp-sp`),建产品 + 配方,点**开跑**。实时值开始流动。
397
- 3. **建团队** —— 「Agent 工作台」→ 选 lead + workers 后**部署(deploy)**进 Channel。
398
- 4. **绑定节点** —— 打开 Agent 详情面板 → 绑定数采节点(*auto*)与数控节点(*manual* = 需您的批准)。
399
- 5. **提交目标** —— 「分析最近 5 分钟熔体温度;若与 182 °C 偏差超过 1 °C,修正设定值(等我的批准)。」
400
- 6. **审批** —— Agent 读取真实历史、计算均值、发起写请求 → 在 HITL 面板批准 → 看设定值变化,**目标**收口并给出数值报告。
401
-
402
- ---
403
-
404
- ## 配置与 CLI —— 真正的配置驱动
405
-
406
- 一个运行时,一个事实来源。**`config.yml`** 声明默认值;配置根内的 **`runtime-settings.json`** 承载运行时覆盖;环境变量与 CLI 参数在最上层。每个可编辑键在 `shared/config/schema.json` 中声明一次(类型、范围、枚举、实时/重启生效),**前端设置页与 CLI 消费同一份描述符**。
407
-
408
- ```
409
- config.yml(默认值) < .AgentWorkShop/runtime-settings.json(运行时) < 环境变量 / CLI 参数
410
- ```
411
-
412
- 配置根:全局安装(`npm i -g`)时为 **`~/.AgentWorkShop`**——无论在哪个目录运行 `aw`;源码检出时为项目内的 **`<repo>/.AgentWorkShop`**(`config.yml` / `.env` 留在检出根,作为版本化的工厂默认值)。`AW_HOME` 可重定向;`AW_MODE=home` 强制全局形态。
413
-
414
- ### 设置持久化与热重载
415
-
416
- - **系统设置 → 运行配置**标签页按描述符渲染每个可编辑键——改服务端口、主题、API 超时、语言环境或审批闸门,点保存即可。
417
- - `live` 键立即生效(主题、标题、超时、审批闸门、数采采样节拍、时序查询桶宽……),经服务端事件流推送,**无需刷新、无需重启**。
418
- - `restart` 键(端口、主机)落盘持久化,在下一次以对应模式启动时生效(`aw dev` / `aw start`)。
419
- - 所有写入方共用一条通道:**设置页、CLI、服务端文件监听**最终都收敛到同一个设置文件——任何一端改,处处生效。
420
-
421
- 示例——在线调节数采与查询节拍:
422
-
423
- ```bash
424
- aw config set daq.sampling.defaultIntervalMs 2000 # 新节点每 2s 采样
425
- aw config set daq.sampling.minIntervalMs 500 # 节点级下限(create/patch 钳制)
426
- aw config set daq.query.defaultBucketMs 3000 # 时序查询缺省 3s 桶
427
- aw config set daq.query.minBucketMs 500 # 查询下限(samples/产线查询/Agent 工具共用)
428
- ```
429
-
430
- 注入 Agent 的工具描述会在每次装配时以当前配置值重新渲染——LLM 永远看到对自己 `daq_query` 调用真正生效的下限与缺省值。
431
-
432
- ### `aw` CLI
433
-
434
- | 指令 | 作用 |
435
- |---|---|
436
- | `aw start · aw dev · aw build` | 生产服务 / 开发服务器 / 构建——端口取自有效配置;首次 `start` 构建一次 |
437
- | `aw stop` | 依单实例锁终止运行中的 aw 服务实例 |
438
- | `aw config list · get · set · unset · reset` | 读写运行时设置(schema 校验 + 原子写盘) |
439
- | `aw plugin list · create · enable · disable` | 跨三种作用域管理插件:查看、脚手架(默认 project 作用域;`--global` 为 user 作用域)、启停(写状态文件,运行中的服务约 1 秒热重载) |
440
- | `aw mcp` | 工业 MCP stdio 服务(38 个工具,覆盖平台 REST:产线、配方、DCW 写入、参数映射、数采、频道、团队、模型晋升、插件)——自动发现运行实例;`--doctor` 一次讲清发现/健康/鉴权,`--print-config` 直出可粘贴的 MCP 客户端配置 |
441
- | `aw home` | 查看/初始化配置根 `.AgentWorkShop` |
442
- | `aw init <dir>` | 脚手架一个可运行的新项目(含完整配置系统与 CLI) |
443
- | `aw register <路径\|URL\|npm:包名>` | 注册一条新指令——项目级或 `--global` 用户级 |
444
- | `aw update` | 对比 npm 远程最新版本,有新版就就地更新全局安装 |
445
- | `aw doctor` | 环境 + 项目健康检查(node、配置、端口、密钥) |
446
- | `aw status` | 运行态总览:模式、配置来源、运行中服务、指令表 |
447
- | `aw tui` | 终端工作台:频道/Agent 管理、任务下发、实时监控面板、HITL 作答(见 [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md)) |
448
- | `aw version` | 打印 CLI/包版本(别名 `v`) |
449
-
450
- 全局参数:`--help/-h` · `--version/-v` · `--json`(机器可读) · `--root <dir>` · `--debug`。
451
-
452
- 退出码:**0** 成功 · **1** 运行时错误 · **2** 用法错误。带 `--json` 时,失败会以信封返回 `{ ok: false, error: 'unknown-command' \| 'no-project' \| 'usage' \| 'internal' \| … }`,自动化无需解析 stderr 即可分支。
453
-
454
- ### 指令注册
455
-
456
- 指令就是导出 `{ meta, run }` 的普通模块。把它放进扫描目录,下次调用即生效——无需任何登记清单,约定优于配置:
457
-
458
- | 作用域(高层级优先) | 目录 |
459
- |---|---|
460
- | 项目级 | `<检出>/.AgentWorkShop/commands/` |
461
- | 用户级 | `~/.AgentWorkShop/commands/` |
462
- | 内建 | 随 CLI 发布(`cli/commands/`) |
463
-
464
- `aw register <file|url|npm:pkg>` 把指令复制进对应作用域(`--global` 进用户级);`aw help` 列出全部已注册指令。
465
-
466
- ```js
467
- // ~/.AgentWorkShop/commands/hello.mjs
468
- export const meta = { name: 'hello', group: '自定义', summary: '问好', usage: 'aw hello [--name <n>]' }
469
- export async function run(argv, ctx) {
470
- console.log(`你好 ${argv.flags.name ?? 'AW'} —— 模式: ${ctx.mode}`)
471
- }
472
- ```
473
-
474
- ---
475
-
476
- ## 工业栈详解
477
-
478
- ### 数据采集(DAQ)
479
-
480
- - **六协议驱动**:Modbus TCP、Modbus RTU-over-TCP(串口网关)、OPC UA、MQTT、HTTP/REST,加 **serial-bridge 内置插件**(RS-232/485 直连:Modbus RTU 帧机 + ASCII 行协议,写侧带同址回读校验,附串口枚举/探针 API 与前端面板)——连接池、分类错误文案、逐驱动连接测试;驱动注册表接受插件注册任意新协议(协议自带自描述 meta 时,前端表单零改动)。
481
- - **逐节点边缘运行时**:独立采样节拍、下发节拍、节点级在飞互斥——一个慢驱动绝不拖累邻居。采样与查询的默认值/下限由 `daq.sampling.*`、`daq.query.*` live 设置驱动。
482
- - **管线**:驱动 → 队列(进程内 / MQTT,断连离线缓冲)→ 消费端乱序防御 → 三路分发:WS 实时直推(节拍门控)、TSDB 批量落库、设备孪生回写。
483
- - **鲁棒性**:TSDB 单 in-flight 写 + 有界重试,缓冲背压带丢弃计数,真实丢失指标随 `daq.controller` 帧暴露。
484
- - **告警**:配方级监控窗口,**2% 滞回 + 3 拍去抖**;alarm/offline 切换即时生效(安全优先)。
485
- - **查询默认按批次作用域**:`daq_query` 自动解析节点所属产线的**活动批次**,按该批次的 `run_id` + `recipe_id` 过滤——Agent 取证据时看到的永远是**当前正在跑的配方**,不会把上一轮配方的样本混进本轮判读。生效口径(`run=<id> 配方「名」(recipe_id)`)打印在结果表头,并在文末逐节点重申;这两个 id 可直接回传给 `daq_query` 或 `aml_dataset_build`。需要跨配方对比/历史复盘时传 `scope: 'all'`(或显式给 `recipe_id` / `run_id` / `product_id`);产线未开跑则不做过滤,历史数据照常可查。
486
-
487
- ### 写控制(DCW)
488
-
489
- - 工程量写入:`linear` 标定(scale/offset)PLC↔物理,**回读校验**(死区容差),ACK 状态 + 写历史。
490
- - **联锁**:产线运行时,活动配方的参数窗口对该节点**替代**全局安全量程。
491
- - **HITL**:`manual` 绑定挂起写入等用户批准(同 Agent+节点去重;批准时二次校验——权限在您点击批准那一刻重查)。
492
-
493
- ### 配方与批次
494
-
495
- `产线 → 产品 → 配方 → 批次`。开跑逐节点应用配方参数(每次写都校验),逐线门控采集,每条样本打标 `line/product/recipe/run`——产品级数据隔离 + 五维查询(产线 × 产品 × 配方 × 时间 × 节点)。
496
-
497
- ### AML —— 自动建模实验室
498
-
499
- 这是闭环里的建模半边:`/aml` 用已打标的遥测构建**数据集**,把**训练作业**提交到 `uv` 托管的 Python 运行时,在**排行榜**上给各次运行排名,并且只有跨过配置的**门禁**(NRMSE、rollout NRMSE、验证/测试差距、最小行数与运行次数)才允许晋级。晋级后的模型按 id 引用,因此 MPC 或影子孪生控制器消费的是有版本号的产物,而不是含糊的「最新」。
500
-
501
- - Agent 通过 14 个工具做同样的事(`aml_dataset_build`、`aml_job_submit`、`aml_job_status`、`aml_leaderboard`、`aml_model_promote`、`aml_model_find`、`aml_training_plan_*`……)——提交一个目标,让团队去训练并汇报。
502
- - Python 运行时由 `uv` 自行引导进配置根内的 `./aml` 资产根;数据集/产物/元数据路径、磁盘配额、作业超时、并发与保留策略全部是**设置项**(`aml` 组共 16 项),而不是常量。
503
- - 治理默认保守:跨配方数据集除非显式允许否则拒绝,每个作业都有归属。
504
- - **混合孪生 × MPC 内核**:AML 同时承载**混合孪生**平面——`SceneContract` / `PhysicsModelManifest` / `TwinSnapshot` / `ObjectiveProfile` / `VirtualTrial` / `RecommendationCertificate`,底座是带**有界 PyTorch 残差**的灰箱物理主干,外加 UQ/OOD 筛查与全轨迹硬约束门禁。频道通过 `hybrid_twin` profile 显式启用,启用后会注入 12 个 profile 专属工具(`twin_provider_catalog`、`twin_scene_discover/compile/freeze`、`twin_physics_spec_draft/validate/compile`、`twin_scene_read`、`twin_snapshot_create`、`twin_trial_run`、`mpc_optimize`、`twin_gate_evaluate`)与通用工具 `twin_calibration_request`;试验按设计就是**虚拟**的(`candidateExecuted=false`),只有门禁与收益同时通过才签发推荐证书。服务端策略两档:`safe_small_step`(数据不足) 与 `precise_search`(模型过门禁)。计划与验收记录见 [`docs/aml-hybrid-twin-mpc-integration-plan.md`](./docs/aml-hybrid-twin-mpc-integration-plan.md)、[`docs/aml-hybrid-twin-implementation-acceptance.md`](./docs/aml-hybrid-twin-implementation-acceptance.md)。
505
- - **任意场景建模闭环**:闭环不绑定内置场景。绑定节点 → `twin_scene_discover` 带证据推断 control/state/disturbance/target/guard 语义 → `twin_scene_compile` 生成 `SceneContract` 草稿 → 您确认 → `twin_scene_freeze` 冻结(版本不可覆盖)→ `twin_physics_spec_draft` 起草骨架 PhysicsSpec(每个状态一条一阶弛豫方程,τ/增益为带先验盒的可校准参数)供您润色 → 校验/编译(白名单 AST,禁任意代码)→ `aml_job_submit { job_kind: 'hybrid_residual' }` **可不带代码**:内置参考训练器先做物理参数校准(stage A)、再拟合 3 成员有界残差集成(stage B)、最后报告 conformal q90 覆盖率(stage D)——校准后的 spec 回写,评估/预测/试验三侧同源。
506
- - **模型驱动孪生与持续校准**:`twin_trial_run` / `mpc_optimize` 可传 `model_id`——rollout 由训练出的 hybrid 模型驱动(校准后物理主干 + 残差集成 ONNX,`ModelBackedHybridProvider`),UQ 覆盖率与成员分歧来自训练工件;模型数据集与场景的产线/产品/配方不一致直接拒绝(`TWIN_MODEL_SCENE_MISMATCH`)。持续校准请求由 60s 定时 worker 消费,自动提交 `hybrid_residual` 重训**候选**;晋升仍走 HITL + Twin Gate(`AML_TWIN_WORKER_DISABLED=1` 可整体关闭)。
507
- - **双模式优化闭环**:随包附带两个频道模板——`chtpl-aml-training-default`(建模面:22 个工具,无产线写入、无 MPC)与 `chtpl-aml-optimization-default`(执行面:快照/试验/门禁/MPC/贝叶斯寻优,外加 `optimization_explore`——受治理微写,每笔设定值与响应回读配对落 `optimization_explorations` 台账)。两面按频道互斥注入;优化频道实例化时可选**探索**模式(治理小步,无需模型)或 **aml** 模式(必须给 `boundModelId`——过门禁的模型先绑定,执行面才解锁)。
508
- - **孪生 Provider 插件 SDK(热加载)**:工业场景的物理主干 / 场景包 / 目标 / 求解器经 `ctx.twin` 注册进 **Twin Provider Registry**(`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`,另有 `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`)。孪生工具按 `SceneContract.physicsProfileId` 解析 Provider(解析不到回退内置 `twin-injection-default`),**换场景不改工具与频道**;热重载按 **generation** 装载新代、排空旧代,试验与 MPC 持租约 ⇒ 在飞工作不被作废,`retireProvider` 等引用归零才下线。系统自带注塑 Provider 走的正是这套外部契约(`server/plugins-builtin/twin-injection-default/`),装法与其它插件同址、停用或热重载无需重启。清单字段与可运行示例见 [`docs/plugins.md`](./docs/plugins.md)「混合孪生 Provider 插件」,SDK 面见 [`docs/sdk.md`](./docs/sdk.md) §4.10。
509
-
510
- ---
511
-
512
- ## 使用说明
513
-
514
- ### 认证
515
-
516
- 邮箱 + 密码登录签发 **bearer token**(每用户多 token,可单独吊销)。
517
-
518
- ```bash
519
- # 注册
520
- curl -X POST http://localhost:3000/api/users/register \
521
- -H 'content-type: application/json' \
522
- -d '{"email":"you@example.com","password":"secret","name":"you"}'
523
-
524
- # 所有 workshop 调用
525
- curl http://localhost:3000/api/workshop/channels \
526
- -H 'authorization: Bearer <token>'
527
- ```
528
-
529
- ### 产线级权限
530
-
531
- 工业数据按**产线**三态管控,由管理员在内置「权限管理」页(`/permissions`,仅 admin 侧栏可见)维护:
532
-
533
- | 状态 | 数采节点 | 数控(写控)节点 | 可见性 |
534
- |---|---|---|---|
535
- | **无权**(普通用户默认) | 隐藏 | 隐藏 | 后端不返回该产线数据——产线运营/数采中心/数字孪生均不可见 |
536
- | **仅查看** | 只读 | ✕ | 产线可见、实时值可看,但不可写/不可下发/不可绑定设备 |
537
- | **可操控** | 读取 | 读取+写入 | 全量能力:设定值写入、任务下发、设备绑定 |
538
-
539
- - `admin` / `editor` 为运营角色,不受授权约束(全量全权)。
540
- - 普通用户**默认无权**——未授权前看不到任何产线数据。
541
- - 强制点在数据面:列表接口按授权过滤,写控/下发接口返回人类可读的 403,Agent↔节点绑定校验产线授权(数采需仅查看+,写控需可操控)。
542
- - 插件经 `ctx.permissions`(`lineMode` / `visibleLineIds` / `listGrants` / `setGrants`)获得同一能力面,并有 `permissions:changed` 生命周期钩子;SDK REST 客户端提供 `client.permissions.overview()` / `client.permissions.set(...)`。
543
-
544
- ### 执行模式
545
-
546
- 在任务描述中使用模式前缀(或在 composer UI 中选择):
547
-
548
- | 模式 | 语义 | 配置 |
549
- |---|---|---|
550
- | `goal` | lead 分解 → worker 交付 → **lead 判定满意度**;不满足继续补发;满足收口父任务。 | `goalCriteria` |
551
- | `loop` | 固定间隔循环重放同一任务。 | `intervalMs`(默认 60000)、`maxIterations`(默认 ∞) |
552
- | `pipeline` | 有序阶段;阶段 N+1 消费阶段 N 产出。 | `stages: [{name, description, assigneeId?}]` |
553
-
554
- ### 定时任务
555
-
556
- 任意任务都可挂上**调度**,让频道在无人值守时也持续工作:
557
-
558
- | 维度 | 行为 |
559
- |---|---|
560
- | 模式 | `interval` —— 固定节拍(`intervalMs`,60s 下限)· `daily` —— 每日本地时间 `HH:MM` 定点一次 |
561
- | 管理 | `/workshop/schedules` 页面,或 `POST/PATCH /api/workshop/schedules` |
562
- | 护栏 | 忙等守卫(频道仍有在飞任务时本次触发顺延)、逐次运行历史带状态、**连续失败熔断**(`maxConsecutiveFailures`,异常调度自动停用) |
563
- | 典型用法 | 每日巡线(`daq_query` + 漂移摘要写入频道记忆)、周期性偏差检查 + 自动判定、每日 KPI 摘要 |
564
-
565
- ```bash
566
- # 创建调度:每 30 分钟巡线一次
567
- curl -X POST http://localhost:3000/api/workshop/schedules \
568
- -H 'authorization: Bearer <token>' -H 'content-type: application/json' \
569
- -d '{"channelId":"<id>","name":"line-patrol","title":"巡线","description":"读取 1 号线全部数采节点,把漂移摘要写入频道记忆。","mode":"interval","intervalMs":1800000}'
570
- ```
571
-
572
- ### 四个入口
573
-
574
- | 入口 | 端点 | 面向 |
575
- |---|---|---|
576
- | **WS** | `/api/workshop/ws?channelId=…` | 仪表盘 / UI——AEP v1 信封,per-channel 单调 `seq`,5000 事件环形缓冲,`lastSeq` 续传,快照兜底。 |
577
- | **MCP** | 进程内服务,约 25 个工具 | Agent(omp host tools)——管理面 + 作业面工具,Channel 作用域。 |
578
- | **A2A** | `POST /api/workshop/a2a/:agentId/rpc` | 外部 Agent——JSON-RPC 2.0,`AgentCard` 在 `/card`,`tasks/sendSubscribe` SSE。 |
579
- | **REST** | `/api/workshop/**` | 人 / 脚本——完整管理面。 |
580
-
581
- ### 任务状态机
582
-
583
- ```
584
- SUBMITTED ─▶ ASSIGNED ─▶ WORKING ─▶ WAITING ─▶ COMPLETED
585
- │ │ │ │
586
- └────────────┴───────────┴──▶ CANCELED / FAILED ─▶(重试 ≤ 3 或取消)
587
- ```
588
-
589
- ---
590
-
591
- ## 端到端验证
592
-
593
- 上面每一条论断,背后都有一个可复跑的套件。验收套件在**生产实例上、跑真实模拟产线协议**(Modbus TCP/RTU、OPC UA、MQTT、HTTP + MQTT/Timescale 管线),配真实引擎 CLI,断言落在数据库、事件流与 HTTP API 上——而不是 mock。2026-09-24 的两轮波次已归档:基础矩阵(约 **1100+ 条真实断言**,v0.7.45 生产构建、隔离 `AW_HOME`、真实浏览器)见 [`docs/audit/e2e-2026-09-24-full-coverage.md`](./docs/audit/e2e-2026-09-24-full-coverage.md);补充功能波次(真实 **PLC 节点模拟器** + 注塑 AgentTeam 闭环、FIFO 多任务、定时任务、协作,合计约 **1400+ 条断言**)见 [`docs/audit/e2e-2026-09-24-all-features.md`](./docs/audit/e2e-2026-09-24-all-features.md)。
594
-
595
- | 套件 | 最新结果 | 覆盖 | 复现 |
596
- |---|---|---|---|
597
- | `real-injection-closed-loop.mjs` | **双 goal 全部 COMPLETED / 0 失败**(2026-09-24,真实 PLC 模拟器 + 真实 `omp` 团队) | 从模拟器供给注塑产线(11 个数控 + 14 个数采节点)→ 真实 AgentTeam(lead/分析/优化) → 受治理写入且**间隔 65.8s ≥ 60s 策略** → 数采复测 → `qualityOk`、判定 `keep` | `AW_BASE=<base> SIM_BASE=http://127.0.0.1:4010 AW_TOKEN=<token> node scripts/real-injection-closed-loop.mjs` |
598
- | `_run-real-injection-fifo-goals.mjs` | exit 0(2026-09-24) | **FIFO 根队列多任务串行**:GOAL-2 仅在 GOAL-1 收口后派发;角色门控切换;两次受治理写入间隔 65.04s;两条记录均判定;账本 4 条锚 | `AW_BASE=<base> SIM_BASE=… AW_TOKEN=<token> node scripts/_run-real-injection-fifo-goals.mjs` |
599
- | `e2e-plc-plugin-closedloop.mjs` | 核心 Stage A–D 全绿(2026-09-24) | PLC 模拟器 Modbus 16040 真实供给 → 数采交叉核对(AW 采样 197 vs 模拟器寄存器 197.37)→ HITL 闭环写 3 区(寄存器 40021/40023/40025 = 210,真实写穿)→ `dcw_judge` keep;插件段 E–H 需外部诊断服务,按约定显式 SKIP | `AW_BASE=<base> KB_BASE=http://127.0.0.1:8771 AW_E2E_USERS_DB=<home>/data/users.sqlite node scripts/e2e-plc-plugin-closedloop.mjs` |
600
- | `_dbg-schedule-e2e.mjs` | **35 / 0**(2026-09-24) | 定时任务:计划 CRUD + 参数校验、`next_run_at`、`scheduledCount`、忙等守卫 **409 CHANNEL_BUSY**、在途重复 **409 SCHEDULE_RUNNING**、取消对账(run FAILED + 失败计数)、**timer 到点自动触发**(`trigger_kind=timer`)、停用/启用状态机、删除后 404 | `SCHED_E2E_BASE=<base> node scripts/_dbg-schedule-e2e.mjs` |
601
- | `e2e-crash-cycle.mjs` | **5 / 5 阶段**(2026-09-24) | 常规执行 → 硬杀 → 持久化断言 → 重启 → 重投 → 自动恢复 → 消费缺口重投;每阶段独立进程 | `node scripts/e2e-crash-cycle.mjs --port 3300 --home .e2e-home-full` |
602
- | `e2e-full-closedloop.mjs` | **98 / 0**(2026-09-24,v0.7.45 生产构建) | 11 阶段:注册 → 产线/产品/配方建模 → 数采采样 → 帧管线 → 数控写入 + 回读 → 回退账本 → Agent 节点鉴权 → 桥越权边界 → 插件 → 数据根隔离 | `node scripts/e2e-full-closedloop.mjs <base>` |
603
- | 全协议矩阵(真实协议) | **46 / 0**(2026-09-24) | MQTT · Modbus TCP · Modbus RTU · OPC UA · HTTP——逐协议数采、受控下发 + 回读、配方窗联锁与真实 Agent 闭环 | `node scripts/_dbg-protocol-matrix.mjs` |
604
- | 生产 API 全链路 | 60 / 0(2026-09-24) | 跨重启持久化、模板 CRUD、任务 assign/complete/cancel/loop/pipeline、A2A + mailbox、WS 广播、MCP 端点、级联删除 | `AW_E2E_TOKEN=<token> node scripts/api-live-e2e.mjs` |
605
- | AgentTeam 群聊 + 原生 HITL | 112 通过 / 0 失败 / 1 阻塞(2026-09-24,真实 `omp`) | 群聊请求 → 可追踪作业;`omp` 原生 ask → HITL 审批 → 引擎带回执继续 | `node scripts/e2e-agentteam-chat.mjs --phase=all` |
606
- | 终端镜像 + 提示词组合 | **26 / 0** 与 **16 / 0**(2026-09-24,真实 `omp`) | 终端镜像帧、`input`/`abort`/`ui_response` 注入、原生 `ask` 往返;五段式 prompt 组合(场景 → 专长 → 记忆 → 手册 → 任务)在线上可观测 | `node scripts/test-terminal-e2e.mjs` · `node scripts/test-prompt-system.mjs` |
607
- | 真引擎协作 | 任务流真跑 **PASS**、`e2e-omp-workspace` **13 / 13**、群聊全真 **PASS**、多用户 HIL **PASS**(2026-09-24) | 真实 `omp` lead + worker:分解/派发/进度/成果/workspace 文件读取与卸载;多用户 HITL 可见性;多引擎团队 14/18(omp 与 dsh 全绿) | `npx tsx scripts/e2e-agentteam-task-flow-real.ts` · `npx tsx scripts/e2e-omp-workspace.ts` |
608
- | 前端验收 | 响应式门禁 **16 / 16** 页、抽屉交互 **10 / 10**(2026-09-24,真实 Chromium) | 全部产品页(含 3D 小镇)在门禁阈值下渲染通过;抽屉开合、滚动锁、路由跳转、零 pageerror | `node scripts/ui/verify-responsive.mjs --routes all` · `node scripts/ui/verify-nav.mjs` |
609
- | `_aw0746-stage12.mjs` | **10 / 0**(2026-09-25,全局安装的 **v0.7.49 打包系统**) | 健康门(version=0.7.49)→ 管理员登录/角色面 → 创建 Channel(真实 `omp` lead)→ 开群聊 → **真实 omp 群聊回复** → 系统监控可见 omp 子进程 | `AW_BASE=<base> node scripts/_aw0746-stage12.mjs` |
610
- | `_aw0746-stage34.mjs` | **13 / 0**(2026-09-25,v0.7.49 打包系统 + PLC 模拟器) | 模拟器建线(11 数控 + 14 数采)→ 产品/配方三元组 → 开跑后**样本逐条带 recipe_id/run_id** → `daq_query` **默认只取当前活动批次**(`scope=all` 可放开,实测 1 vs 4)→ 实例化 Hybrid Twin 模板(lead + 3 worker,注入孪生 6 件套 / 总 57 工具) | `AW_BASE=<base> node scripts/_aw0746-stage34.mjs` |
611
- | `_aw0746-stage6b-train-sweep.mjs` | 门禁**全绿**(2026-09-25,v0.7.46 打包系统,真实 torch 训练) | 1 s 拍格数据集(**1724 行 / 10 批次**)→ 内联 code 作业真实训练 → G1 单步 **0.0992**(≤0.10)/ G2 滚动 0.1092(≤0.25)/ G3 泛化 14.6%(≤20%)/ G4 行数与批次 → 模型注册并**晋升 production** | `AW_BASE=<base> AW_DATASET_ID=<ds> node scripts/_aw0746-stage6b-train-sweep.mjs` |
612
- | `_aw0746-stage7-twin.mjs` | **17 / 0**(2026-09-25,v0.7.49 打包系统,真实 DAQ + 真实模型) | 真实样本 → TwinSnapshot `fresh=true` → 65 组真实 VirtualTrial(12 条安全候选,`candidateExecuted=false`)→ 12 项推荐门禁 **write_eligible** → 门禁结论回写模型 `twinEligibility` → `mpc_optimize` 升档 **precise_search** → 全程 **0 DCW 写入** | `AW_BASE=<base> AW_REQUIRE_MODEL=1 node scripts/_aw0746-stage7-twin.mjs` |
613
- | `_aw0746-stage6c-jobsmoke.mjs` | **5 / 0**(2026-09-25,v0.7.49 打包系统) | AML 作业链路:内联 `code` 被接受(不再要求 `workspace/train.py`)→ 作业到终态 → 训练日志/ONNX 痕迹 → 实验与逐项门禁落库 | `AW_BASE=<base> node scripts/_aw0746-stage6c-jobsmoke.mjs` |
614
- | `_aw0748-failclosed-probe.mjs` | **7 / 0**(2026-09-25,v0.7.49 打包系统) | 硬约束**失败关闭**回归:auto_daq 按真实绑定取样建快照 → 可映射约束 `weight` 正常评估 → 不可映射的 `part_weight` 判不通过并给出明细(v0.7.47 会假通过)→ 空轨迹同样判不通过 | `AW_BASE=<base> node scripts/_aw0748-failclosed-probe.mjs` |
615
- | `_aw0748-mock-closedloop.mjs` | **13 / 0**(2026-09-25,v0.7.49 打包系统,进程内 `mock`,零额度) | 调度闭环回归:创建 mock Channel → 根任务被真实派发并收口 → `[mock:complex]` 强制委派出子任务 → 父任务汇总收口 → mock worker 就位后 [mock:complex] 委派子任务并汇总 → **第二个/第三个根任务同样被派发**(修复前:lead 空闲卸载后 `scheduler` 置空,后续根任务只落库、一直 SUBMITTED 直到 `ROOT_TIMEOUT`)→ mock 无 host tool 通道时工具桥显式拒绝 | `AW_BASE=<base> node scripts/_aw0748-mock-closedloop.mjs` |
616
- | 工业基准——integrated | **83 / 83 检查,硬门禁绿**(2026-09-21) | 五协议五产线基准:连通性、采样入 Timescale、受控下发、治理、Agent 闭环、工艺参数语义层 | `node bench/pipeline.mjs --profile integrated` |
617
- | 多场景闭环 | 4 场景 · 闭环达标(2026-09-21) | 注塑克重窗口寻优 · A²/O 污水排放达标 + 能耗最小化 · 连续退火质量窗与产能权衡 · BOPET 产线任务 | `node bench/scenarios.mjs --scenarios injection,wwtp,anneal` |
618
- | 产线权限 / 审计负向 | 21 / 21 + 9 / 9(2026-09-12) | 三态产线授权 + 人类可读 403、绑定主体校验、授权撤销收敛、无 token WS 零遥测 | `node scripts/_dbg-perms-e2e.mjs <base> <adminPass>` · `node scripts/_dbg-audit-neg-e2e.mjs <base> <adminPass>` |
619
- | 渲染回归 | 30 / 30(2026-09-12) | 数采表完整性(行数与 API 动态对齐)、WS 驱动行更新、筛选、详情页、3D 小镇 + 模型库、7 页 smoke、零 pageerror | `node scripts/_dbg-render-regression.mjs <base> <email> <pass>` |
620
- | AML 自动建模 | 25 / 0(2026-09-24,确定性训练器) | 数据集构建 → 跨配方拒绝 → 作业提交 → 门禁 → 晋级守卫 → 预测守卫 → 审计;`--real` 附加 uv/torch 真实运行时 | `node node_modules/tsx/dist/cli.mjs --tsconfig .nuxt/tsconfig.server.json scripts/e2e-aml.ts` |
621
- | 离线单元/属性套件 | 全绿 | AEP 事件索引(`test-events-index`)、LRU、数据根拆分(`test-data-root`)、日志洪泛、回退索引、插件加固、任务租约围栏(`test-task-lease-fencing`)、CLI 退出码(`test-cli-exit`)、SDK 能力面(`test-sdk-surface`) | `node scripts/test-<name>.mjs`(TS 套件经 tsx 运行) |
622
-
623
- 历史上的 **v0.7.20** 验收基线——*156 断言、0 失败*——归档于 [`docs/audit/e2e-2026-09-07.md`](./docs/audit/e2e-2026-09-07.md)。性能探针:`scripts/_dbg-render-perf.mjs`。
624
-
625
- ---
626
-
627
- ## 项目结构
628
-
629
- ```
630
- AgentWorkShop/
631
- ├── bin/ · cli/ # aw CLI——指令注册表 · 内置指令 · 配置引擎接线
632
- ├── app/ # Nuxt 4 前端(srcDir)
633
- │ ├── pages/ # / · /workshop · /workshop/agents · /workshop/teams
634
- │ │ # /workshop/channel-templates · /workshop/schedules · /workshop/w/:id
635
- │ │ # /town · /daq · /daq/:id · /dcw · /dcw/:id
636
- │ │ # /aml · /operations · /monitor · /logs · /permissions
637
- │ │ # /plugins · /users · /tokens · /settings
638
- │ ├── components/workshop/ # 时间线 · 泳道 · 任务板 · 记忆面板 · 3D 小镇
639
- │ └── stores/composables/ # Pinia + AEP 客户端
640
- ├── server/
641
- │ ├── api/ # REST + WS + A2A + MCP 路由
642
- │ ├── services/workshop/
643
- │ │ ├── runtime/ # manager · scheduler-loop · task-engine · memory · mailbox
644
- │ │ ├── agents/ # AgentInterface:14 个引擎(+ 工业工具)
645
- │ │ ├── daq/ dcw/ aml/ # 边缘运行时 · 驱动 · 队列 · 存储 · 建模实验室
646
- │ │ └── db/ # node:sqlite 仓储层
647
- │ ├── mcp/ # MCP 服务(25 个工具,进程内 workshop 面)
648
- │ ├── plugins-builtin/ # 随包发布的插件(serial-bridge · rag-bridge · diag-bridge · twin-injection-default)
649
- │ └── plugins/ # 运行时装配(单例)
650
- ├── mcp/ # aw mcp —— 零依赖 stdio MCP 网关(38 个工具,实例自动发现)
651
- ├── sdk/ # agentworkshop/sdk——插件上下文、钩子总线、REST 客户端、浏览器 SDK
652
- ├── tui/ # 终端工作台(aw tui)
653
- ├── shared/
654
- │ └── config/ # schema.json(113 个设置描述符)+ 引擎(合并/校验/持久化)+ 路径解析器
655
- ├── config.yml # 工厂默认值(构建/启动时读取;版本号来自 package.json)
656
- ├── .AgentWorkShop/ # 检出内的配置根——prompts(版本化)+ 运行时覆盖 · 数据 · 日志 · 指令(git 忽略)
657
- ├── data/ # 迁移前的旧版位置(自动迁移进配置根)
658
- └── scripts/ # 启动器 · home 引导 · E2E · 验证套件
659
- ```
660
-
661
- ## 技术栈
662
-
663
- | 层 | 技术 |
664
- |---|---|
665
- | 框架 | [Nuxt 4](https://nuxt.com) + Nitro(WebSocket) |
666
- | UI | Vue 3.5 · Pinia · Ant Design Vue · UnoCSS · Three.js · ECharts |
667
- | 语言 | TypeScript 5.7 全栈;`shared/` 前后端共用 |
668
- | CLI | Node ESM CLI,可插拔指令注册表(`bin/aw.mjs`) |
669
- | 持久化 | `node:sqlite`(零原生依赖)+ FTS5 + 可选 `sqlite-vec`;时序用 TimescaleDB |
670
- | 校验 | `zod` —— 每个消息边界 |
671
- | 互操作 | `@modelcontextprotocol/sdk` · A2A(JSON-RPC 2.0)· AEP v1(自研 WS 协议) |
672
- | 现场总线 | `modbus-serial` · `node-opcua` · `mqtt` |
673
-
674
- ## 开发指南
675
-
676
- ```bash
677
- pnpm dev # 开发服务(端口取自有效配置)
678
- pnpm cli … # 仓库内使用 CLI:pnpm cli config list
679
- pnpm tui # 终端工作台(连运行中的实例)
680
- pnpm build && pnpm start
681
- pnpm typecheck # 包装脚本:prepare → 剔除失效 volar 条目 → vue-tsc -b
682
- pnpm lint
683
- pnpm test:api-live # 针对运行中服务的 API 套件
684
- node scripts/e2e-full-closedloop.mjs # 全链路闭环(需服务端运行中)
685
- node scripts/e2e-crash-cycle.mjs # 硬杀 → 重启 → 重投(自带隔离实例管理)
686
- node scripts/test-sdk-surface.mjs # SDK 导出面守卫
687
- ```
688
-
689
- > 排障前先知道两条测试运行约定:(1)`pnpm typecheck` 走 [`scripts/typecheck.mjs`](./scripts/typecheck.mjs),
690
- > 而不是裸 `nuxt typecheck`——Nuxt 4.5 仍会把 `vue-router/volar/sfc-route-blocks` 编译插件写进生成的
691
- > tsconfig,而 vue-router 4.6 已不再导出该子路径,裸 vue-tsc 在加载配置阶段就崩,类型检查其实一次都没跑;
692
- > (2)导入**真实路由 handler** 的 TS 套件(如 `scripts/e2e-memory-system.ts`)要走纯 node 路径
693
- > `node --experimental-transform-types --import ./scripts/_audit/ts-register-hook.mjs <suite>.ts`,
694
- > 该钩子把 Nuxt 的 `#imports` 虚拟模块映射到共享配置桩。
695
-
696
- 文档站位于 `docs/site/`(VitePress),由 [`.github/workflows/deploy-docs.yml`](./.github/workflows/deploy-docs.yml) 部署到 GitHub Pages:
697
-
698
- ```bash
699
- cd docs/site && npx vitepress dev # 本地预览
700
- cd docs/site && npx vitepress build # 生产构建 → .vitepress/dist
701
- ```
702
-
703
- 该工作流在构建前把 `docs/{cli,plugins,sdk}.md`(及其 `.en.md` 双语对照)同步进文档站,因此这些文件是单页指南的唯一事实来源。
704
-
705
- ## 路线图
706
-
707
- | 能力 | 状态 |
708
- |---|---|
709
- | Channel 运行时、lead 编排、7 态任务引擎 | 已交付 |
710
- | 四入口:WS(AEP v1)· MCP · A2A · REST | 已交付 |
711
- | 持久记忆(FTS5 + 可选向量混合) | 已交付 |
712
- | 工业栈:数采 · 数控写控 · 产线/配方/批次 | 已交付 |
713
- | Agent ↔ 节点绑定 + HITL 审批 + 联锁 | 已交付 |
714
- | 3D 数字孪生小镇 · 产线运营 UI · 仪表盘 | 已交付 |
715
- | 全功能 live E2E(Agent 读写真实产线,23 项检查) | 已交付 |
716
- | 运行时配置系统:设置持久化 · 热重载 · 设置页 UI | 已交付 |
717
- | `aw` CLI:config · start/dev · init · register · doctor | 已交付 |
718
- | 多 Harness 注册表:omp · codex · dsh · opencode 子进程引擎 | 已交付 |
719
- | 六种现场协议:Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + 内置 serial-bridge 串口插件(数采 + 数控双向) | 已交付 |
720
- | Harness 可用性探测 + 执行前引擎强校验(UI 禁选 + 409) | 已交付 |
721
- | Recipe 归因版本化 + 非破坏回退(界面 + Agent 工具) | 已交付 |
722
- | 配方链路优化闭环:recipe_trial 整批试验(不写版本)→ 进步才固化 → 统一回退(PLC 整批恢复) | 已交付 |
723
- | 频道绑定产线:全员只读日志/配方/状态 + 产线简报注入提示词 | 已交付 |
724
- | Agent 自查工具:line_context / ops_log / recipe_log / recipe_versions / dcw_journal | 已交付 |
725
- | 多 Harness 并行真实产线 live E2E(四引擎、一条产线) | 已交付 |
726
- | HITL 审批流经真实 OPC UA 写入验证 | 已交付 |
727
- | 双语文档(简体中文 / English,VitePress 语言切换) | 已交付 |
728
- | Channel 级 LLM provider/model 选择(取自实时 Harness 目录) | 已交付 |
729
- | 可配置数采/时序节拍(采样与查询的默认值 + 下限,live 热重载) | 已交付 |
730
- | 团队级插件开关(建队勾选 + 团队弹层,按 Channel 过滤工具注入) | 已交付 |
731
- | 插件热管理:`/plugins` 管理页 + `aw plugin list/enable/disable` | 已交付 |
732
- | 渲染性能专项(v0.7.27):数采主线程阻塞 −90%、孪生 −69%,自适应画质回升最高档;`window.__townStats` 仪表化 | 已交付 |
733
- | 插件系统 v2:浏览器面板注入、插件级 settings/groups、插件 i18n、宿主运行时服务(`ctx.services`/`ctx.daq`/`ctx.omp`) | 已交付 |
734
- | Instrument Glass 材质层(v0.7.36):三级半透明材质、通透感、高光边缘、弹簧动效、逐页路由转场 | 已交付 |
735
- | 实时管线优化:数采帧索引 O(n²)→O(n)、逐 Agent 增量事件索引、图表原地更新、按大小感知的 JSON 持久化 | 已交付 |
736
- | AML 自动建模实验室:数据集构建 · 作业编排(uv 托管 Python)· 排行榜 · 晋级门禁 · 14 个 Agent 工具 | 已交付 |
737
- | Claude Agent SDK 适配器——常驻会话、同轮 steer 与 `canUseTool` HITL | 已交付 |
738
- | 工艺参数语义映射:`param_control`/`param_read` 按工艺参数寻址、四层写入限界、调控闭环(`dcw_judge`/`dcw_rollback`) | 已交付 |
739
- | Channel 群聊:请求升级为可追踪作业;原生 HITL(`omp` ask → 审批 → 回执) | 已交付 |
740
- | 定时任务:`interval` / `daily` 双模式、逐次运行历史、忙等守卫 + 连续失败熔断 | 已交付 |
741
- | 根任务队列(FIFO、排队位次可见)+ 派发代与执行租约围栏 | 已交付 |
742
- | 监督看门狗 + Harness 连续性(`persistent`/`per_turn`、会话复用租约带重启原因) | 已交付 |
743
- | Channel 过程记忆:确定性事件契约、canonical root 摘要、持久 outbox + 补偿 worker | 已交付 |
744
- | 运行时可观测:`GET /api/system/monitor` 团队指标,每项带文档化回滚开关 | 已交付 |
745
- | 工业基准:integrated 档(83 项检查、硬门禁)+ 多场景闭环(注塑 / 污水 / 退火 / BOPET)+ 质量目标 optloop 寻优 | 已交付 |
746
- | 生产构建全覆盖验收波次矩阵(约 1100+ 条真实断言,2026-09-24) | 已交付 |
747
- | 孪生 Provider 插件 SDK:物理/场景/目标/训练/求解器 Provider 经 `ctx.twin` 热加载注册,按 generation 装载 + 租约排空,内置 Provider 走同一外部契约 | 已交付 |
748
- | 任意场景混合孪生建模闭环:场景发现 → 编译 → 冻结 → 物理 spec 起草/校验/编译 → 参考训练器作业(物理校准 + 残差集成 + conformal UQ)、模型驱动试验、持续校准 worker | 已交付 |
749
- | 双模式优化闭环:`aml-training` / `aml-optimization` 专属频道模板、互斥工具面、探索 ↔ 生产双模式、带回读配对的治理微写 | 已交付 |
750
- | 产线操作流水:`/operations` 单页 + 工作台控制台面板,九类操作时间线、结构化写控 diff、闭环阶段推断 | 已交付 |
751
- | 外部 MCP 网关:`aw mcp` stdio 服务(38 个工具)、实例自动发现、`mcp.enabled` 运行时门控 | 已交付 |
752
- | 可配置系统时区(`time.timeZone`,live 热生效)+ 配方参数级单步限幅 `stepLimit` + 配方 `description` 元字段 | 已交付 |
753
- | 生产硬化:TLS、MQTT 鉴权、OPC UA 签名+加密缺省、结构化审计日志 | 规划中 |
754
- | 边缘部署形态:独立 edge-agent + 中心 broker | 规划中 |
755
- | 报警外送(邮件/webhook)+ 确认工作流 | 规划中 |
756
- | CI 流水线(typecheck + lint + e2e)——文档部署已跑在 GitHub Actions 上 | 规划中 |
757
- | License:PolyForm Noncommercial 1.0.0(源码可得 · 禁止商用) | 已交付 |
758
-
759
- ## 许可证
760
-
761
- AgentWorkShop 是独立项目,**不是 Anthropic 或任何 LLM 厂商的官方产品**。它通过公开接口与 Agent harness(如 `omp`)集成。
762
-
763
- **AgentWorkShop 为源码可得(source-available)软件,依据 [PolyForm Noncommercial 1.0.0](./LICENSE) 发布。**
764
-
765
- - **允许** —— 个人学习、科研、兴趣项目、教学,以及非商业组织(公益、教育、公共研究、政府机构)的使用。
766
- - **未经版权人事先书面许可不得商用** —— 任何**商业用途**:销售、付费服务、集成进商业产品、服务于经营活动的生产使用均未获授权。商用授权可向版权人申请。
767
- - **再分发时** 必须随附本协议条款与 `Required Notice` 版权声明行。
768
-
769
- 商用授权联系:[GitHub @kingdol666](https://github.com/kingdol666) · kingdol6080@gmail.com
770
-
771
- <div align="center">
772
-
773
- <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
774
- <picture>
775
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
776
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
777
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
778
- </picture>
779
- </a>
780
-
781
- </div>
782
-
783
- ---
784
-
785
- ## 参与贡献
786
-
787
- 欢迎提交 Issue 与 Pull Request。提 PR 之前请先:
788
-
789
- 1. **先读你要改的那份契约**——扩展面见 [`docs/plugins.md`](./docs/plugins.md),编程客户端见 [`docs/sdk.md`](./docs/sdk.md),指令注册见 [`docs/cli.md`](./docs/cli.md)。
790
- 2. **本地跑一遍门禁**:
791
-
792
- ```bash
793
- pnpm typecheck # vue-tsc 覆盖 app + server + shared
794
- pnpm lint # eslint 9,期望 0 warning
795
- node scripts/e2e-full-closedloop.mjs # 全闭环 E2E,需要服务在跑
796
- node scripts/test-sdk-surface.mjs # SDK 导出面不允许漂移
797
- node scripts/check-docs-sync.mjs # docs/site 与 docs/*.md 保持同步
798
- ```
799
-
800
- 3. **提交信息走约定式**——`commit-msg` 钩子跑 `commitlint`(`feat:` / `fix:` / `docs:` / `refactor:` / `perf:` / `test:` / `chore:`),`lint-staged` 会在提交时自动修复暂存的 JS/TS/Vue。
801
- 4. **改了行为就补测试。** 本仓库以 `scripts/` 下的**真实 E2E 脚本**为主,而不是 mock——一条新的工业链路应该能被证明可跑通。
802
-
803
- > [!TIP]
804
- > 报 bug 之前先跑 `aw doctor`:它会端到端体检环境(Node 版本、配置根、端口占用、SQLite、可选的 Docker 服务),大多数「起不来」在这一步就有答案。
805
-
806
- ## 安全
807
-
808
- 发现漏洞请**不要**开公开 Issue,而应通过 [GitHub Security Advisories](https://github.com/kingdol666/AgentWorkShop/security/advisories/new) 私下报告,并附上复现步骤与受影响版本。
809
-
810
- 当你把 AgentWorkShop 指向真实设备时,它就在驱动真实设备:接入现场 PLC 之前,请先复核 `config.yml` 里的联锁、安全量程与 HITL 设置。默认姿态是建议性的——写操作要过联锁、要经审批、要回读校验——但产线侧逻辑始终拥有最终否决权。
811
-
812
- ---
813
-
814
- <div align="center">
815
-
816
- **如果这个项目对你有用,点一个 ⭐ 能让更多人找到它。**
817
-
818
- <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
819
- <picture>
820
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
821
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
822
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
823
- </picture>
824
- </a>
825
-
826
- <br />
827
-
828
- **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[上手指南](https://kingdol666.github.io/AgentWorkShop/guide/getting-started)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)** · **[CLI](./docs/cli.md)** · **[English](./README.md)**
829
-
830
- <sub>基于 Nuxt 4 · Vue 3 · TypeScript · <code>node:sqlite</code> 构建 —— 监督层,秒级软实时。<br />
831
- 时序关键回路请留在 PLC 内。</sub>
832
-
833
- </div>
1
+ <div align="center">
2
+
3
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/hero.png" alt="AgentWorkShop —— 让 Agent 团队运行真实产线" width="100%" />
4
+
5
+ <br />
6
+
7
+ # AgentWorkShop
8
+
9
+ **AI Agent 团队与产线在此交汇。**
10
+
11
+ [![npm version](https://img.shields.io/npm/v/agentworkshop?logo=npm&logoColor=white&label=npm&color=CB3837)](https://github.com/kingdol666/AgentWorkShop)
12
+ [![npm downloads](https://img.shields.io/npm/dm/agentworkshop?logo=npm&logoColor=white&label=downloads&color=CB3837)](https://github.com/kingdol666/AgentWorkShop)
13
+ [![GitHub release](https://img.shields.io/github/v/release/kingdol666/AgentWorkShop?logo=github&label=release&color=35e0a0)](https://github.com/kingdol666/AgentWorkShop/releases)
14
+ [![Stars](https://img.shields.io/github/stars/kingdol666/AgentWorkShop?logo=github&label=stars&color=35e0a0)](https://github.com/kingdol666/AgentWorkShop/stargazers)
15
+ [![Last commit](https://img.shields.io/github/last-commit/kingdol666/AgentWorkShop?logo=git&logoColor=white&label=last%20commit)](https://github.com/kingdol666/AgentWorkShop/commits)
16
+ [![Issues](https://img.shields.io/github/issues/kingdol666/AgentWorkShop?logo=github&label=issues)](https://github.com/kingdol666/AgentWorkShop/issues)
17
+ [![License](https://img.shields.io/badge/license-Apache%202.0-8A2BE2?logo=apache&logoColor=white)](./LICENSE)
18
+
19
+ [![Nuxt 4](https://img.shields.io/badge/Nuxt-4-00DC82?logo=nuxt&logoColor=white)](https://nuxt.com)
20
+ [![Vue 3.5](https://img.shields.io/badge/Vue-3.5-42B883?logo=vuedotjs&logoColor=white)](https://vuejs.org)
21
+ [![TypeScript 5.7](https://img.shields.io/badge/TypeScript-5.7-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
22
+ [![Node ≥ 23.4](https://img.shields.io/badge/Node.js-%E2%89%A5%2023.4-3C873A?logo=nodedotjs&logoColor=white)](https://nodejs.org)
23
+ [![SQLite node:sqlite](https://img.shields.io/badge/SQLite-node%3Asqlite-003B57?logo=sqlite&logoColor=white)](https://nodejs.org/api/sqlite.html)
24
+ [![Modbus · OPC UA · MQTT · HTTP](https://img.shields.io/badge/%E7%8E%B0%E5%9C%BA%E6%80%BB%E7%BA%BF-Modbus%20%C2%B7%20OPC%20UA%20%C2%B7%20MQTT%20%C2%B7%20HTTP-41c8f4?logo=siemens&logoColor=white)](./docs/site/guide/daq-protocols.md)
25
+ [![Plugins](https://img.shields.io/badge/%E6%8F%92%E4%BB%B6-%E7%83%AD%E9%87%8D%E8%BD%BD-8b5cf6?logo=puzzle&logoColor=white)](./docs/plugins.md)
26
+ [![Docs](https://img.shields.io/badge/%E6%96%87%E6%A1%A3-VitePress%20%C2%B7%20%E4%B8%AD%2FEN-ffd75e?logo=vitepress&logoColor=black)](https://kingdol666.github.io/AgentWorkShop)
27
+ [![PRs welcome](https://img.shields.io/badge/PRs-welcome-ff69b4?logo=git&logoColor=white)](https://github.com/kingdol666/AgentWorkShop/pulls)
28
+
29
+ **[English](./README.md)** · **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)** · **[更新日志](./changelog.md)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
30
+
31
+ <sub><b>v0.7.58</b> · 14 个执行引擎 · 6 种现场协议(5 内置 + 串口插件)+ MES REST 集成 · 118 个运行时设置项 · 双语文档(简体中文 / English)</sub>
32
+
33
+ <br />
34
+
35
+ *一个配置驱动的平台:**AI Agent 团队**与**工业数字孪生**共享同一运行时——Agent 查询真实遥测、经人工审批的写控回路下发监督设定值,每个事件实时推送到 3D 孪生。*
36
+
37
+ </div>
38
+
39
+ > [!IMPORTANT]
40
+ > **定位声明:监督层。** AgentWorkShop 是面向产线管理、数字孪生、数采与 Agent 编排的**监督层**(SCADA 同位)平台,运行在**秒级软实时**档位。
41
+ > 它**不是**硬实时控制器:任何时序关键回路(**< 10 ms**、联锁、安全、伺服)**必须在 PLC 内实现**。本平台下发的设定值均为建议性——产线侧逻辑可否决。
42
+
43
+ ---
44
+
45
+ <table>
46
+ <tr>
47
+ <td width="33%" valign="top">
48
+
49
+ **图例索引**
50
+
51
+ `图 01` 闭环全流程<br/>
52
+ `图 02` 数采中心<br/>
53
+ `图 03` 产线运营<br/>
54
+ `图 04` 数字孪生<br/>
55
+ `图 05` 仪表盘<br/>
56
+ `图 06` 自适应布局
57
+
58
+ </td>
59
+ <td width="33%" valign="top">
60
+
61
+ **快速跳转**
62
+
63
+ [这是什么?](#这是什么) · [特性总览](#特性总览)<br/>
64
+ [界面一览](#界面一览) · [设计架构](#设计架构)<br/>
65
+ [快速开始](#快速开始) · [配置与 CLI](#配置与-cli--真正的配置驱动)<br/>
66
+ [工业栈详解](#工业栈详解) · [使用说明](#使用说明)<br/>
67
+ [端到端验证](#端到端验证) · [项目结构](#项目结构)<br/>
68
+ [技术栈](#技术栈) · [开发指南](#开发指南)<br/>
69
+ [路线图](#路线图) · [许可证](#许可证)
70
+
71
+ </td>
72
+ <td width="33%" valign="top">
73
+
74
+ **一眼看懂**
75
+
76
+ 监督层,秒级软实时<br/>
77
+ 14 个执行引擎 · 4 个接入入口<br/>
78
+ 6 种现场协议(5 内置 + 串口插件,读 + 写)<br/>
79
+ 7 状态任务机 · 根任务队列 + 执行租约<br/>
80
+ 群聊作业 · 定时任务 · HITL 审批<br/>
81
+ FTS5 + 向量记忆 · 插件热重载<br/>
82
+ SDK · CLI · TUI · 外部 MCP · 约 1100+ 条验收断言
83
+
84
+ </td>
85
+ </tr>
86
+ </table>
87
+
88
+ ---
89
+
90
+ ## 文档
91
+
92
+ 文档为双语——[VitePress 站点](https://kingdol666.github.io/AgentWorkShop) 在全站范围内提供语言切换(简体中文 / English)。深度页面同样随仓库发布,CLI 会把它们复制进发布的 tarball:
93
+
94
+ | 主题 | 在线 | 仓库内 | 内容 |
95
+ |---|---|---|---|
96
+ | **上手指南** | [指南](https://kingdol666.github.io/AgentWorkShop/guide/getting-started) | `docs/site/guide/` | 安装 → 首次运行 → 第一次「Agent × 产线」会话、配置系统、数采协议、数控读写、HITL、配方版本、多 Harness 团队、产线权限、AML |
97
+ | **插件开发** | [插件指南](https://kingdol666.github.io/AgentWorkShop/plugins/) | [`docs/plugins.md`](./docs/plugins.md) | 完整扩展契约:三种作用域、`index.mjs` 清单、`ctx` 服务端/浏览器能力面、`settings`/`groups` 声明、生命周期事件、i18n、面板、团队级开关、一个真实案例 |
98
+ | **SDK** | [SDK 指南](https://kingdol666.github.io/AgentWorkShop/sdk/) | [`docs/sdk.md`](./docs/sdk.md) | `agentworkshop/sdk` 作为编程客户端(带信封处理的平台 REST 客户端)与插件扩展基座;TypeScript 类型;浏览器端 SDK |
99
+ | **CLI** | [CLI 手册](https://kingdol666.github.io/AgentWorkShop/cli/) | [`docs/cli.md`](./docs/cli.md) | 全部 15 个 `aw` 指令、全局选项、退出码、双模式路径模型、指令注册系统、维护者发布指引 |
100
+ | **AML** | [AML 指南](https://kingdol666.github.io/AgentWorkShop/guide/aml) | [`docs/aml.md`](./docs/aml.md) | 自动建模实验室:数据集构建、作业编排、模型注册表、晋级门禁、Agent 工具 |
101
+ | **TUI** | — | [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md) | 终端工作台:频道、Agent、任务、实时监控、HITL 应答 |
102
+ | **多 Harness 架构** | — | [`docs/multi-harness-architecture.md`](./docs/multi-harness-architecture.md) | 引擎分类、归一化会话契约、供应商/模型目录、失败模式 |
103
+
104
+ ---
105
+
106
+ ## 这是什么?
107
+
108
+ AgentWorkShop 起家于**多智能体软件工作坊**——Channel 内的编码 Agent 团队,配备 lead 调度器、7 状态任务机、持久记忆,以及四个互操作入口(WebSocket / MCP / A2A / REST)。
109
+
110
+ 随后它长出了**工业半边**:完整的数采与写控栈(Modbus TCP / OPC UA)、带配方与批次运行的产线、3D 数字孪生小镇、一个**自动建模实验室**(数据集 → 训练作业 → 排行榜 → 门禁晋级)——以及让它独一无二的桥:**Agent 可被授予对真实工业节点的访问权——绑定到具体节点、按权限作用域收窄**,带着物理语义查询其实时遥测,并经「联锁 → 人工审批 → 回读校验」管线驱动写操作。
111
+
112
+ 它同时**天生可扩展**:一个自包含插件可以同时增强服务端(钩子、路由、Agent 工具、数采驱动、配置分组)与浏览器(面板、i18n),而同样的能力面也通过 SDK 开放给普通程序——见 [`docs/plugins.md`](./docs/plugins.md) 与 [`docs/sdk.md`](./docs/sdk.md)。
113
+
114
+ 最终效果:提交一个目标,比如「分析熔体温度趋势并优化设定值」——Agent 团队读取真实传感器历史、计算统计量、提议新设定值、在 HITL 面板等您批准、写入 PLC、校验回读、带着数值汇报。**端到端,自动化 E2E 已验证。**
115
+
116
+ <div align="center">
117
+
118
+ ### 图 01 — 闭环全流程
119
+
120
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="Agent 团队读取实时遥测、提议设定值、等待审批、写入 PLC 并校验回读" width="88%" />
121
+
122
+ <sub><b>目标 → 读取 → 计算 → 审批 → 写控 → 回读 → 汇报。</b><br/>
123
+ 录制自运行中的实例:真实数采历史、真实写控、真实 HITL 审批。</sub>
124
+
125
+ </div>
126
+
127
+ > [!NOTE]
128
+ > 本 README 中的每一张图都是**运行中实例**的录屏或截图,没有一张是效果图。屏幕上的数字来自流经产品同一套代码路径的工业数据。
129
+
130
+ <div align="center">
131
+
132
+ ### 🎬 实机演示(4 分 11 秒,英文配音 + 字幕)
133
+
134
+ <a href="https://github.com/kingdol666/AgentWorkShop/blob/main/docs/site/public/demo/agentworkshop-demo.mp4"><img src="docs/site/public/demo/poster.jpg" alt="AgentWorkShop 实机演示:数采中心、写控下发回读、串口插件、Agent 团队执行、闭环趋势与 3D 数字孪生" width="86%" /></a>
135
+
136
+ <sub><b>点击封面观看完整演示。</b>真实 PLC 模拟器 + 真实串口枚举 + 真实 Agent 团队执行,全程无剪辑造假。<br/>场景:仪表盘 → 数采中心(实时) → 写控下发与回读 → 串口协议插件 → Agent 团队执行 → 闭环趋势 → 3D 数字孪生。</sub>
137
+
138
+ </div>
139
+
140
+ ---
141
+ ## 特性总览
142
+
143
+ #### Agent 团队运行时
144
+
145
+ | 能力 | 为何重要 |
146
+ |---|---|
147
+ | **Lead 编排** | 每个 Channel 一名 lead:分解目标、派发空闲 worker、失败重派、判定目标满足度。LLM 决策 + 确定性规则引擎兜底——系统永不停滞。 |
148
+ | **三种执行模式** | `goal`(满意度判定)· `loop`(定间隔重放)· `pipeline`(顺序阶段)。7 状态任务机带进度、产物与完整历史。 |
149
+ | **Harness 无关** | 一个 `AgentInterface`,**14 个引擎**分三类传输形态:**进程内**——`mock`(无 LLM)、`claude`(Claude Agent SDK,常驻会话,同轮 steer);**经协议常驻会话**——`omp`(RPC 子进程)、`codex`(app-server JSON-RPC)、`dsh` / `qwen` / `hermes`(ACP)、`opencode`(serve + HTTP/SSE);**带结构化事件流的无头 CLI**——`gemini`(stream-json)、`copilot`(JSONL)、`cursor`(stream-json)、`crush`(非交互运行)、`goose`(stream-json)、`pi`(`-p --mode json`)。平台永远不知道跑的是哪个。 |
150
+ | **Channel 级 LLM 选择** | 每个 Channel 从 Harness 实时目录中选 **harness → provider → model(+effort)**(如 omp 的 `zhipu-coding-plan/glm-5.3-flash`)。成员未显式覆盖即继承——一个团队混用多种 harness 是一等公民设定,不是绕行。 |
151
+ | **Harness 可用性检查** | `GET /api/workshop/harnesses` 逐引擎探测 PATH 上的 CLI。前端禁用未安装项,且每个入口在执行前都做强校验。 |
152
+ | **停滞安全的监督与任务治理** | 提交的目标进入 **FIFO 根任务队列**,排队位次可见。排队根**等待期间不消耗执行预算**——预算从入场起算,并有确定性的 **lead 救援扫**兜底(lead 运行时失活/任务卡排队时自动卸载重组并重新派发,不等人工察觉)。**监督看门狗**区分「卡死」与「慢」——Agent 工具调用被当作活性信号,健康的长工业作业不会被误回收,真停滞仍会呈报 lead。每次派发携带**派发代 + 执行租约**,被取代 worker 的迟到事件在准入层直接丢弃,而不是寄希望于事后对账。 |
153
+ | **Harness 连续性** | 每个引擎声明连续性形态(`persistent` / `per_turn`);常驻会话在连续性租约下跨轮复用(pid / 会话 / 复用计数 / 最近重启原因),服务重启能恢复的恢复,而不是悄悄重新拉起。 |
154
+ | **Channel 群聊与原生 HITL** | 频道时间线是真正的群聊:成员请求升级为**可追踪作业**(不是一条会丢的消息);带原生 ask 能力的引擎(如 `omp`)把 HITL 提问路由进平台——您批准一次,引擎带着回执继续跑。成员权限与用户通知是一等公民。 |
155
+ | **定时任务** | 任意 Channel 任务可挂上**调度**——固定 `interval`(60s 下限)或 `daily` 每日定点——在 `/workshop/schedules` 页或 REST API 管理,带逐次运行历史、忙等守卫(频道仍有在飞任务时触发顺延)与 Channel 级可见性。 |
156
+ | **持久记忆与频道过程记忆** | 私有 + Channel 共享双域;FTS5 CJK 切分,可选向量混合检索,token 预算注入。其上是**过程记忆**:确定性的 root/child/lead 事件名契约、canonical root 摘要、持久 outbox(死信 + 补偿 worker),让一个目标的来龙去脉跨重启存活。 |
157
+ | **四个入口** | 一个 manager 坐在每扇门后:**WS**(AEP v1 事件流,seq 续传)、**MCP**(约 25 个进程内工具)、**A2A**(JSON-RPC 2.0 + AgentCard)、**REST**。 |
158
+
159
+ #### 工业栈
160
+
161
+ | 能力 | 为何重要 |
162
+ |---|---|
163
+ | **六协议现场总线** | Modbus TCP、Modbus RTU-over-TCP(串口网关)、OPC UA、MQTT、HTTP/REST,外加**内置串口插件**(RS-232/485 直连:Modbus RTU + ASCII 行)——数采**与**写控双驱动带连接池、分类错误文案与逐驱动连接测试;`mock` 覆盖演示/CI;协议即插件:`ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` 注入后,前端协议下拉与参数表单即插即现(带 ⌁ 徽标)。 |
164
+ | **Agent 团队 × 工业作用域** | 把 Agent 绑定到数采/数控节点。Agent 看到的是语义卡(物理含义、单位、安全量程、配方窗口)——而不是裸寄存器。 |
165
+ | **人工审批的写控** | 数控下发经过「**安全量程 ∩ 活动配方窗口**」联锁 → 可选 **HITL 审批** → PLC 写入 → **回读校验** → 带签名的写历史。 |
166
+ | **数控读写通道** | 每个控制节点都能沿**写入时所用的同一条标定链路**读回 PLC 当前值:周期读 + 按需读 + Agent 读取,SET 与 ACT 并排呈现——读是被动观测,永不被写联锁阻断。 |
167
+ | **Recipe 版本化治理** | 参数修改按版本入史(归因 用户/Agent/系统 + 操作者 + 原因)。可非破坏地回退到任意修订版或最近一次良好批次。失效节点参数跳过并明确标识。 |
168
+ | **配方链路优化闭环** | Agent 像人类工艺员一样通过配方管理做优化:`recipe_trial` 把多参数候选**整批试验(不写版本)**→ 复测 → 有进步用 `recipe_update` 固化(同一配方 id,版本+1)→ 劣化触发**统一回退**(`recipe_rollback` 带 `dispatch:true` = 定义回退 + PLC 整批恢复)。单参数直调移出闭环;试验受四层限界与同线节拍卡控。 |
169
+ | **频道绑定产线(只读授权)** | 频道可绑定一条产线:全员无需节点绑定即可读取该线的运维日志、配方历史与实时状态(工具回执标注「频道绑定,只读」),写操作仍需节点授权。产线简报自动注入成员提示词;换绑即时回收成员运行时。 |
170
+ | **工艺参数语义映射与调控闭环** | Agent 用工程语义思考:`param_control(param, value)` 按**工艺参数**寻址(跨批次/换配方语义稳定),`param_read` 读回 PLC 当前值取证。每次写入被**四层限界**逐层收窄——节点安全量程 ∩ 工艺参数基准限界 ∩ 活动产品限界 ∩ 活动配方工艺窗口——且每次下发自动开一条调控记录,由 `dcw_judge` 落判定(keep / rollback / uncertain),`dcw_rollback` 执行回退。 |
171
+ | **产线运营** | 产线 → 产品 → 配方 → 批次。配方窗口门控采集并联锁写入;每条样本打标 `product/recipe/run`,实现按批次隔离。 |
172
+ | **多形态数采帧管线** | 多点轮廓(测厚仪/扫描仪)与 CCD 图像帧流经模板 sink 管线:向量与元数据入 Timescale(`daq_frames`),像素入对象存储(MinIO,不可达时自动降级到本地磁盘);派生指标阈值越限走既有告警链路。 |
173
+ | **生产化硬化(v0.7.58)** | 保写心跳生命周期根治——失败写不占位(心跳不再直发幻影指令值)、驱动/连接/产线变更即清值、停线自动挂起保写;mock 静默兜底封堵(未知协议显式报错,插件卸载不再假成功);帧像素 sha256 完整性指纹 + 对象存储按天 GC(删前 DB 交叉校验防误删);Timescale 按天 chunk + 列存压缩(TSL);堆水位监控 + 崩溃/失联/水位三重自动重生;写保持窗与试验节拍落盘(重启不绕频控);grant 运行时复核并入频道绑线(撤权即失活无死角)。 |
174
+ | **Agent 自查工具** | `line_context`、`ops_log`、`recipe_log`、`recipe_versions`、`dcw_journal`——Agent 清楚自己操控的产线/产品/配方,谁做过什么,每个值怎么变。 |
175
+
176
+ #### 治理、配置与扩展
177
+
178
+ | 能力 | 为何重要 |
179
+ |---|---|
180
+ | **产线级权限** | 工业数据按**产线**三态门控(无权/仅查看/可操控),强制点在数据面——普通用户未授权前看不到任何产线数据。 |
181
+ | **全操作审计日志** | 用户 / Agent / 系统 的每个动作都落进同一份可检索日志;操作者归属「Channel名/成员名」,与用户和系统天然区分。经 WS 实时推送。 |
182
+ | **团队级插件开关** | 每个团队(Channel)持有**独立插件开关组**(`channel_plugins`):被关闭插件的工具不注入该团队 Agent。插件本体经 `aw plugin` 与 `/plugins` 页热管理。 |
183
+ | **插件扩展 API** | `plugins/<name>/` 下的一个自包含目录**同时增强两半**:`index.mjs`(服务端:钩子、路由、Agent 工具、**数采读驱动 / DCW 写驱动**/帧处理器/节点模板、配置分组、KV、定时器)与 `client.mjs`(浏览器:注入具名插槽的面板、i18n、设置 UI)。三种作用域——`builtin`(随包发布)> `project`(检出)> `user`(`~/.AgentWorkShop`)——启停**与代码修改**均有约 1 秒热重载;停用插件的驱动随热重载立即摘除。内置示例 **serial-bridge**(串口通信:读/写驱动 + 串口探针 API + 前端面板)。完整契约见 [`docs/plugins.md`](./docs/plugins.md)。 |
184
+ | **AML —— 自动建模实验室** | 数据集构建 → 训练作业 → 排行榜 → 晋级门禁 → 模型引用,全部可在 `/aml` 页驱动,也可由 Agent 通过 **14 个 `aml_*` 工具**驱动。Python 运行时由 `uv` 引导至配置根内的 `aml/` 资产根;产物与元数据都留在配置根下。模型带人读身份——label(产线 · 配方 · 目标)、description 与产线/目标 id——可用 `aml_model_find` 按场景选型。 |
185
+ | **AML 混合孪生 × MPC** | 灰箱物理主干 + 有界 PyTorch 残差;`TwinSnapshot` / `VirtualTrial` / `RecommendationCertificate` 配 UQ/OOD 筛查与全轨迹门禁;`hybrid_twin` profile 会额外注入 **12 个 profile 工具**(场景发现/编译/冻结、物理 spec 起草/校验/编译、快照、试验、MPC、门禁、Provider 目录)与通用工具 `twin_calibration_request`。试验按设计保持虚拟(`candidateExecuted=false`),证书签发前只做推荐、不落真实写入。 |
186
+ | **双模式优化闭环** | 专属频道模板把闭环**结构性拆开**:*aml-training* 频道拿建模面(数据集、作业、场景编译、物理 spec、建模任务——无产线写入、无 MPC),*aml-optimization* 频道拿执行面(快照、试验、门禁、MPC、贝叶斯寻优 `twin_bayes_optimize`、受治理微写 `optimization_explore`)——边训边优在结构上不可能。**探索**模式走治理链写入并做响应回读配对(每笔写入落 `optimization_explorations` 台账);**生产**模式要求绑定过门禁的模型(`aml` 模式,实例化时给 `boundModelId`)。 |
187
+ | **运行时可观测** | `GET /api/system/monitor` 把 Agent 团队内部暴露成数字:根队列深度、看门狗介入次数、Harness 会话复用、记忆 outbox 积压——每项都有对应的文档化回退开关,新机制可以不重新部署就关掉。 |
188
+ | **产线操作单页(`/operations`)** | 一页看全对产线的每一次触碰:实时操作流水(REST 快照 + WS 推流)把写控、数采、建模、配方、回退、报警、产线、人工、系统动作归入**九类分类**,写控行渲染结构化 **前值 → 后值 diff 徽章**(失败标红),并直接从事件流推断**闭环阶段**(监视 → 探索·小步 → 推荐搜索 → 影子验证 → 生产)。同一数据面也供工作台控制台的「产线作业」面板使用。 |
189
+ | **外部 MCP 网关** | `aw mcp` 启动零依赖的 **stdio MCP 服务**(38 个工具),自动发现运行中的实例(环境变量 → 锁文件 → 配置文件),把产线、配方(含 mark-good)、受治理 DCW 写入、工艺参数语义映射、数采查询、频道、团队供给、模型晋升、判卷/回退与插件管理暴露给任意 MCP 客户端——受 `mcp.enabled` 运行时设置门控,附 `--doctor` 与 `--print-config` 辅助指令。 |
190
+ | **全量配置驱动运行时** | 全部运行旋钮(记忆预算、上下文压缩、回退护栏、保留策略、备份、日志级别、系统时区、MCP 开关…)在设置描述符注册表声明一次,优先级 **config.yml < runtime-settings < env**——**118 个设置项、18 组**(40 live / 78 restart),代码零硬编码默认。 |
191
+ | **可配置系统时区** | 一个 `time.timeZone` 设置项(IANA 时区,live 热生效)统一驱动人读时间——日志、聊天、审计、Agent 记录与定时任务;机器时间轴(数采样本、`timestamptz`)仍保存绝对时间。 |
192
+ | **可配置节拍** | 采样与查询的默认值/下限全部是 **live 设置**(`daq.sampling.*`、`daq.query.*`):热重载、create/patch 时钳制,Agent 工具描述实时携带当前值。 |
193
+
194
+ #### 数字孪生
195
+
196
+ | 能力 | 为何重要 |
197
+ |---|---|
198
+ | **3D 数字孪生** | Three.js 小镇:放置产线设备与 Channel 领地,实时查看设备健康、告警与数值——由同一事件总线驱动。自适应画质阶梯(DPR / 阴影 / Bloom 分档 + 墙钟 FPS 预算)自动匹配机器,`window.__townStats` 暴露真实渲染指标供性能探针使用。 |
199
+
200
+ ---
201
+
202
+ ## 界面一览
203
+
204
+ 下面每一屏都是真实界面,1440×900,录制自正在运行的实例。
205
+
206
+ <div align="center">
207
+
208
+ ### 图 01 — 闭环全流程
209
+
210
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="Agent 团队读取实时遥测、提议设定值、等待审批、写入 PLC 并校验回读" width="88%" />
211
+
212
+ <sub><b>目标 → 读取 → 计算 → 审批 → 写控 → 回读 → 汇报。</b><br/>
213
+ 录制自运行中的实例:真实数采历史、真实写控、真实 HITL 审批。</sub>
214
+
215
+ <br />
216
+
217
+ ### 图 02 — 数采中心
218
+
219
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-02-daq.gif" alt="数采中心:节点台账、实时趋势、报警横条与事件流" width="92%" />
220
+
221
+ <sub><b>端到端的采集链路。</b>量规统计带之下的节点台账与健康度、随样本落库而生长的趋势曲线、
222
+ 只保留真正未确认项的报警横条,以及滚动的事件流。</sub>
223
+
224
+ <br />
225
+
226
+ ### 图 03 — 产线运营
227
+
228
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-03-dcw.gif" alt="产线运营:产线、产品、配方与写控制" width="92%" />
229
+
230
+ <sub><b>产线 / 产品 / 配方 / 批次。</b>开跑产线即用配方窗口为采集设门,并给每个样本打上
231
+ <code>产品/配方/批次</code> 标识;控制节点通过它写入时用的同一条标定路径呈现 <b>SET vs ACT</b>。</sub>
232
+
233
+ <br />
234
+
235
+ ### 图 04 — 数字孪生
236
+
237
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-04-town.gif" alt="由实时遥测驱动的 3D 数字孪生小镇" width="92%" />
238
+
239
+ <sub><b>孪生就是同一条事件总线的渲染结果。</b>设备、频道领地、报警与实时数值——自适应画质阶梯
240
+ (DPR / 阴影 / 泛光,墙钟 FPS 预算)让它在中端机器上也保持诚实。</sub>
241
+
242
+ <br />
243
+
244
+ ### 图 05 — 仪表盘
245
+
246
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-05-dashboard.gif" alt="带 KPI 量规与趋势的运行仪表盘" width="92%" />
247
+
248
+ <sub><b>一屏看全工作坊。</b>频道、Agent、任务、数采吞吐与报警——读的是 API 服务的同一份状态,
249
+ 不是另建一套指标存储。</sub>
250
+
251
+ <br />
252
+
253
+ ### 图 06 — 自适应布局
254
+
255
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-06-responsive.gif" alt="同一套界面从桌面到平板再到手机的形态变化" width="92%" />
256
+
257
+ <sub><b>桌面 → 平板 → 手机。</b>刻度轨先收成图标轨、再变成抽屉;页头纵向堆叠,
258
+ 高密度表格变成可横向滚动的「账页条」,并把身份列钉在左缘。</sub>
259
+
260
+ </div>
261
+
262
+ <table>
263
+ <tr>
264
+ <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-workshop.png" alt="Agent 工作台" width="100%" /><br/><sub><b>Agent 工作台。</b>频道时间线、lane、任务、记忆与 HITL 收在同一张工作台。</sub></td>
265
+ <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-monitor.png" alt="运行时监控" width="100%" /><br/><sub><b>运行时监控。</b>每条已接线频道、成员数、依赖环与归属用户。</sub></td>
266
+ </tr>
267
+ <tr>
268
+ <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="系统设置" width="100%" /><br/><sub><b>系统设置。</b>18 组 118 个设置项,由描述符驱动——CLI 读的是同一份注册表。</sub></td>
269
+ <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-plugins.png" alt="插件管理" width="100%" /><br/><sub><b>插件管理。</b>三种作用域、改代码即热重载、按团队开关。</sub></td>
270
+ </tr>
271
+ </table>
272
+
273
+ ---
274
+
275
+ ## 设计架构
276
+
277
+ ```mermaid
278
+ flowchart TB
279
+ subgraph FE["前端 — Nuxt 4 / Vue 3"]
280
+ UI["工作台 UI · 3D 孪生 · 大屏"]
281
+ WS["AEP 客户端 — seq 续传"]
282
+ end
283
+ subgraph SRV["服务端 — Nitro / h3"]
284
+ REST["REST /api/workshop/**"]
285
+ HUB["WS Hub — AEP v1"]
286
+ A2A["A2A JSON-RPC"]
287
+ MCP["MCP Server"]
288
+ subgraph RT["运行时"]
289
+ MGR["AgentChannelManager"]
290
+ SCH["SchedulerLoop — lead 监督"]
291
+ TE["TaskEngine — 7 态任务机"]
292
+ AR["AgentRuntime × N"]
293
+ MEM["AgentMemory — FTS5 + 向量"]
294
+ BUS["事件总线 (ManagerBus) — per-channel seq + 环形缓冲"]
295
+ end
296
+ subgraph IND["工业"]
297
+ DAQ["数采网关 — 逐节点边缘运行时"]
298
+ DCW["数控网关 — 写控"]
299
+ BR["队列 — inproc / MQTT"]
300
+ TSDB["时序库 — SQLite / Timescale"]
301
+ end
302
+ subgraph HB["Harness 适配器 — 14 个引擎"]
303
+ MOCK["mock · claude — 进程内"]
304
+ OMP["omp — RPC 子进程"]
305
+ CDX["codex — app-server"]
306
+ DSH["dsh · qwen · hermes — ACP"]
307
+ OC["opencode — serve"]
308
+ FAM["gemini · copilot · cursor · crush · goose · pi — 无头 CLI"]
309
+ end
310
+ DB[("SQLite — channels · agents · tasks
311
+ messages · memories (FTS5) · events")]
312
+ end
313
+ UI <--> WS
314
+ WS --> BUS
315
+ REST & A2A & MCP --> MGR
316
+ MGR --> SCH & TE & AR
317
+ AR --> MEM
318
+ AR --> MOCK & OMP & CDX & DSH & OC & FAM
319
+ MGR & TE & MEM & BUS --> DB
320
+ DAQ <--> BR --> TSDB
321
+ DCW --> BR
322
+ DAQ & DCW --> BUS
323
+ ```
324
+
325
+ **Agent × 机器之桥**(值得读源码的部分):
326
+
327
+ ```
328
+ agent ──绑定──▶ 节点 (daq: auto / dcw: manual)
329
+ │ │
330
+ │ my_industrial_nodes ◀── 语义卡:物理含义 · 单位 · 安全量程 · 配方窗口
331
+ │ daq_query ◀── 时序库历史,统计 + 物理语义
332
+ │ dcw_control ──▶ 联锁(安全量程 ∩ 配方窗口)
333
+ │ ──▶ HITL 审批(manual 模式,180s 超时)
334
+ │ ──▶ PLC 写入 → 回读校验 → ACK + 写历史
335
+ ◀── Agent 可引用数值的结果文本
336
+ ```
337
+
338
+ ---
339
+
340
+ ## 快速开始
341
+
342
+ ### 前置条件
343
+
344
+ ```bash
345
+ node -v # ≥ 23.4.0(需要内置 node:sqlite)
346
+ ```
347
+
348
+ > 真实 Agent harness 需要对应 CLI 在 PATH 中——`omp`、`codex`、`dsh`、`opencode`、`gemini`、`qwen`、`copilot`、`cursor`、`crush`、`goose`、`pi` 或 `hermes`(任选子集;同一 Channel 可混用)。`mock` 与 `claude`(SDK)**进程内运行**,无需 PATH 上的 CLI。仪表盘「执行引擎」面板以绿/灰状态点展示每个引擎的就绪度,未安装引擎可点击跳转官网安装页。可选数采基础设施(MQTT broker + TimescaleDB)在 Docker 可达时自动拉起(`docker compose up -d`)。
349
+
350
+ ### 方式 A —— 从 npm 安装(推荐)
351
+
352
+ ```bash
353
+ npm install -g agentworkshop # → `aw` / `agentworkshop` 进入 PATH
354
+ aw start # → http://localhost:3001
355
+ ```
356
+
357
+ 发布出的包内含**预构建的生产产物**(`.output/`),所以 npm 安装后可直接启动——无需构建步骤,也无需构建工具。首次启动时一切初始化进配置根 **`~/.AgentWorkShop`**:默认 `config.yml`、自动生成含随机会话密钥的 `.env`、`runtime-settings.json`、docker-compose 种子、`prompts/`、`commands/`、`plugins/`(由 SDK 示例播种,**默认关闭**)与空的 `data/` 目录。全部运行数据(SQLite、JSON 仓库、备份、日志)也都落在配置根——配置与数据跟着安装走,与当前工作目录无关。
358
+
359
+ 不想全局安装、只想跑一次?
360
+
361
+ ```bash
362
+ npx agentworkshop start # 无需全局 npm 安装
363
+ ```
364
+
365
+ > `npx` 同样会创建 `~/.AgentWorkShop`——不装全局并不等于在磁盘上不留任何痕迹。
366
+
367
+ ### 方式 B —— 源码运行
368
+
369
+ ```bash
370
+ git clone https://github.com/kingdol666/AgentWorkShop.git && cd AgentWorkShop
371
+ pnpm install
372
+ pnpm dev # → http://localhost:3000(端口取自 config.yml)
373
+ ```
374
+
375
+ 源码生产部署:
376
+
377
+ ```bash
378
+ pnpm build # nuxt build → .output/
379
+ pnpm start # 端口取自 config.yml → server.prod.port
380
+ ```
381
+
382
+ > 在源码检出内,配置根是项目里的 **`.AgentWorkShop/`** 文件夹(运行时覆盖、数据、项目级指令),而 `config.yml` / `.env` 留在检出根,作为版本化的工厂默认值。
383
+
384
+ ### 版本更新
385
+
386
+ ```bash
387
+ aw update # 检查 + 就地更新全局安装
388
+ aw update --check # 只报告,不安装
389
+ npm install -g agentworkshop@latest # 手动等效
390
+ ```
391
+
392
+ 版本遵循 semver。每次 `aw start` 都会校验配置根,并把 `home` 之前的旧版 `data/` 布局迁移进来(以最新文件为准),因此数据可以跨版本存活。SQLite schema 迁移在服务端启动时执行。当前版本:**v0.7.58**——见[版本发布](https://github.com/kingdol666/AgentWorkShop/releases)。
393
+
394
+ ### 第一次「Agent × 产线」会话(约 2 分钟)
395
+
396
+ 1. **登录** —— 侧边栏注册(或 `POST /api/users/register`)。
397
+ 2. **搭产线** —— 「产线运营」→ 建产线,加数采节点(如 `daq-temp-tc`)与数控节点(如 `dcw-temp-sp`),建产品 + 配方,点**开跑**。实时值开始流动。
398
+ 3. **建团队** —— 「Agent 工作台」→ 选 lead + workers 后**部署(deploy)**进 Channel。
399
+ 4. **绑定节点** —— 打开 Agent 详情面板 → 绑定数采节点(*auto*)与数控节点(*manual* = 需您的批准)。
400
+ 5. **提交目标** —— 「分析最近 5 分钟熔体温度;若与 182 °C 偏差超过 1 °C,修正设定值(等我的批准)。」
401
+ 6. **审批** —— Agent 读取真实历史、计算均值、发起写请求 → 在 HITL 面板批准 → 看设定值变化,**目标**收口并给出数值报告。
402
+
403
+ ---
404
+
405
+ ## 配置与 CLI —— 真正的配置驱动
406
+
407
+ 一个运行时,一个事实来源。**`config.yml`** 声明默认值;配置根内的 **`runtime-settings.json`** 承载运行时覆盖;环境变量与 CLI 参数在最上层。每个可编辑键在 `shared/config/schema.json` 中声明一次(类型、范围、枚举、实时/重启生效),**前端设置页与 CLI 消费同一份描述符**。
408
+
409
+ ```
410
+ config.yml(默认值) < .AgentWorkShop/runtime-settings.json(运行时) < 环境变量 / CLI 参数
411
+ ```
412
+
413
+ 配置根:全局安装(`npm i -g`)时为 **`~/.AgentWorkShop`**——无论在哪个目录运行 `aw`;源码检出时为项目内的 **`<repo>/.AgentWorkShop`**(`config.yml` / `.env` 留在检出根,作为版本化的工厂默认值)。`AW_HOME` 可重定向;`AW_MODE=home` 强制全局形态。
414
+
415
+ ### 设置持久化与热重载
416
+
417
+ - **系统设置 → 运行配置**标签页按描述符渲染每个可编辑键——改服务端口、主题、API 超时、语言环境或审批闸门,点保存即可。
418
+ - `live` 键立即生效(主题、标题、超时、审批闸门、数采采样节拍、时序查询桶宽……),经服务端事件流推送,**无需刷新、无需重启**。
419
+ - `restart` 键(端口、主机)落盘持久化,在下一次以对应模式启动时生效(`aw dev` / `aw start`)。
420
+ - 所有写入方共用一条通道:**设置页、CLI、服务端文件监听**最终都收敛到同一个设置文件——任何一端改,处处生效。
421
+
422
+ 示例——在线调节数采与查询节拍:
423
+
424
+ ```bash
425
+ aw config set daq.sampling.defaultIntervalMs 2000 # 新节点每 2s 采样
426
+ aw config set daq.sampling.minIntervalMs 500 # 节点级下限(create/patch 钳制)
427
+ aw config set daq.query.defaultBucketMs 3000 # 时序查询缺省 3s 桶
428
+ aw config set daq.query.minBucketMs 500 # 查询下限(samples/产线查询/Agent 工具共用)
429
+ ```
430
+
431
+ 注入 Agent 的工具描述会在每次装配时以当前配置值重新渲染——LLM 永远看到对自己 `daq_query` 调用真正生效的下限与缺省值。
432
+
433
+ ### `aw` CLI
434
+
435
+ | 指令 | 作用 |
436
+ |---|---|
437
+ | `aw start · aw dev · aw build` | 生产服务 / 开发服务器 / 构建——端口取自有效配置;首次 `start` 构建一次 |
438
+ | `aw stop` | 依单实例锁终止运行中的 aw 服务实例 |
439
+ | `aw config list · get · set · unset · reset` | 读写运行时设置(schema 校验 + 原子写盘) |
440
+ | `aw plugin list · create · enable · disable` | 跨三种作用域管理插件:查看、脚手架(默认 project 作用域;`--global` 为 user 作用域)、启停(写状态文件,运行中的服务约 1 秒热重载) |
441
+ | `aw mcp` | 工业 MCP stdio 服务(38 个工具,覆盖平台 REST:产线、配方、DCW 写入、参数映射、数采、频道、团队、模型晋升、插件)——自动发现运行实例;`--doctor` 一次讲清发现/健康/鉴权,`--print-config` 直出可粘贴的 MCP 客户端配置 |
442
+ | `aw home` | 查看/初始化配置根 `.AgentWorkShop` |
443
+ | `aw init <dir>` | 脚手架一个可运行的新项目(含完整配置系统与 CLI) |
444
+ | `aw register <路径\|URL\|npm:包名>` | 注册一条新指令——项目级或 `--global` 用户级 |
445
+ | `aw update` | 对比 npm 远程最新版本,有新版就就地更新全局安装 |
446
+ | `aw doctor` | 环境 + 项目健康检查(node、配置、端口、密钥) |
447
+ | `aw status` | 运行态总览:模式、配置来源、运行中服务、指令表 |
448
+ | `aw tui` | 终端工作台:频道/Agent 管理、任务下发、实时监控面板、HITL 作答(见 [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md)) |
449
+ | `aw version` | 打印 CLI/包版本(别名 `v`) |
450
+
451
+ 全局参数:`--help/-h` · `--version/-v` · `--json`(机器可读) · `--root <dir>` · `--debug`。
452
+
453
+ 退出码:**0** 成功 · **1** 运行时错误 · **2** 用法错误。带 `--json` 时,失败会以信封返回 `{ ok: false, error: 'unknown-command' \| 'no-project' \| 'usage' \| 'internal' \| … }`,自动化无需解析 stderr 即可分支。
454
+
455
+ ### 指令注册
456
+
457
+ 指令就是导出 `{ meta, run }` 的普通模块。把它放进扫描目录,下次调用即生效——无需任何登记清单,约定优于配置:
458
+
459
+ | 作用域(高层级优先) | 目录 |
460
+ |---|---|
461
+ | 项目级 | `<检出>/.AgentWorkShop/commands/` |
462
+ | 用户级 | `~/.AgentWorkShop/commands/` |
463
+ | 内建 | 随 CLI 发布(`cli/commands/`) |
464
+
465
+ `aw register <file|url|npm:pkg>` 把指令复制进对应作用域(`--global` 进用户级);`aw help` 列出全部已注册指令。
466
+
467
+ ```js
468
+ // ~/.AgentWorkShop/commands/hello.mjs
469
+ export const meta = { name: 'hello', group: '自定义', summary: '问好', usage: 'aw hello [--name <n>]' }
470
+ export async function run(argv, ctx) {
471
+ console.log(`你好 ${argv.flags.name ?? 'AW'} —— 模式: ${ctx.mode}`)
472
+ }
473
+ ```
474
+
475
+ ---
476
+
477
+ ## 工业栈详解
478
+
479
+ ### 数据采集(DAQ)
480
+
481
+ - **六协议驱动**:Modbus TCP、Modbus RTU-over-TCP(串口网关)、OPC UA、MQTT、HTTP/REST,加 **serial-bridge 内置插件**(RS-232/485 直连:Modbus RTU 帧机 + ASCII 行协议,写侧带同址回读校验,附串口枚举/探针 API 与前端面板)——连接池、分类错误文案、逐驱动连接测试;驱动注册表接受插件注册任意新协议(协议自带自描述 meta 时,前端表单零改动)。
482
+ - **逐节点边缘运行时**:独立采样节拍、下发节拍、节点级在飞互斥——一个慢驱动绝不拖累邻居。采样与查询的默认值/下限由 `daq.sampling.*`、`daq.query.*` live 设置驱动。
483
+ - **管线**:驱动 → 队列(进程内 / MQTT,断连离线缓冲)→ 消费端乱序防御 → 三路分发:WS 实时直推(节拍门控)、TSDB 批量落库、设备孪生回写。
484
+ - **鲁棒性**:TSDB 单 in-flight 写 + 有界重试,缓冲背压带丢弃计数,真实丢失指标随 `daq.controller` 帧暴露。
485
+ - **告警**:配方级监控窗口,**2% 滞回 + 3 拍去抖**;alarm/offline 切换即时生效(安全优先)。
486
+ - **查询默认按批次作用域**:`daq_query` 自动解析节点所属产线的**活动批次**,按该批次的 `run_id` + `recipe_id` 过滤——Agent 取证据时看到的永远是**当前正在跑的配方**,不会把上一轮配方的样本混进本轮判读。生效口径(`run=<id> 配方「名」(recipe_id)`)打印在结果表头,并在文末逐节点重申;这两个 id 可直接回传给 `daq_query` 或 `aml_dataset_build`。需要跨配方对比/历史复盘时传 `scope: 'all'`(或显式给 `recipe_id` / `run_id` / `product_id`);产线未开跑则不做过滤,历史数据照常可查。
487
+
488
+ ### 写控制(DCW)
489
+
490
+ - 工程量写入:`linear` 标定(scale/offset)PLC↔物理,**回读校验**(死区容差),ACK 状态 + 写历史。
491
+ - **联锁**:产线运行时,活动配方的参数窗口对该节点**替代**全局安全量程。
492
+ - **HITL**:`manual` 绑定挂起写入等用户批准(同 Agent+节点去重;批准时二次校验——权限在您点击批准那一刻重查)。
493
+
494
+ ### 配方与批次
495
+
496
+ `产线 → 产品 → 配方 → 批次`。开跑逐节点应用配方参数(每次写都校验),逐线门控采集,每条样本打标 `line/product/recipe/run`——产品级数据隔离 + 五维查询(产线 × 产品 × 配方 × 时间 × 节点)。
497
+
498
+ ### AML —— 自动建模实验室
499
+
500
+ 这是闭环里的建模半边:`/aml` 用已打标的遥测构建**数据集**,把**训练作业**提交到 `uv` 托管的 Python 运行时,在**排行榜**上给各次运行排名,并且只有跨过配置的**门禁**(NRMSE、rollout NRMSE、验证/测试差距、最小行数与运行次数)才允许晋级。晋级后的模型按 id 引用,因此 MPC 或影子孪生控制器消费的是有版本号的产物,而不是含糊的「最新」。
501
+
502
+ - Agent 通过 14 个工具做同样的事(`aml_dataset_build`、`aml_job_submit`、`aml_job_status`、`aml_leaderboard`、`aml_model_promote`、`aml_model_find`、`aml_training_plan_*`……)——提交一个目标,让团队去训练并汇报。
503
+ - Python 运行时由 `uv` 自行引导进配置根内的 `./aml` 资产根;数据集/产物/元数据路径、磁盘配额、作业超时、并发与保留策略全部是**设置项**(`aml` 组共 16 项),而不是常量。
504
+ - 治理默认保守:跨配方数据集除非显式允许否则拒绝,每个作业都有归属。
505
+ - **混合孪生 × MPC 内核**:AML 同时承载**混合孪生**平面——`SceneContract` / `PhysicsModelManifest` / `TwinSnapshot` / `ObjectiveProfile` / `VirtualTrial` / `RecommendationCertificate`,底座是带**有界 PyTorch 残差**的灰箱物理主干,外加 UQ/OOD 筛查与全轨迹硬约束门禁。频道通过 `hybrid_twin` profile 显式启用,启用后会注入 12 个 profile 专属工具(`twin_provider_catalog`、`twin_scene_discover/compile/freeze`、`twin_physics_spec_draft/validate/compile`、`twin_scene_read`、`twin_snapshot_create`、`twin_trial_run`、`mpc_optimize`、`twin_gate_evaluate`)与通用工具 `twin_calibration_request`;试验按设计就是**虚拟**的(`candidateExecuted=false`),只有门禁与收益同时通过才签发推荐证书。服务端策略两档:`safe_small_step`(数据不足) 与 `precise_search`(模型过门禁)。计划与验收记录见 [`docs/aml-hybrid-twin-mpc-integration-plan.md`](./docs/aml-hybrid-twin-mpc-integration-plan.md)、[`docs/aml-hybrid-twin-implementation-acceptance.md`](./docs/aml-hybrid-twin-implementation-acceptance.md)。
506
+ - **任意场景建模闭环**:闭环不绑定内置场景。绑定节点 → `twin_scene_discover` 带证据推断 control/state/disturbance/target/guard 语义 → `twin_scene_compile` 生成 `SceneContract` 草稿 → 您确认 → `twin_scene_freeze` 冻结(版本不可覆盖)→ `twin_physics_spec_draft` 起草骨架 PhysicsSpec(每个状态一条一阶弛豫方程,τ/增益为带先验盒的可校准参数)供您润色 → 校验/编译(白名单 AST,禁任意代码)→ `aml_job_submit { job_kind: 'hybrid_residual' }` **可不带代码**:内置参考训练器先做物理参数校准(stage A)、再拟合 3 成员有界残差集成(stage B)、最后报告 conformal q90 覆盖率(stage D)——校准后的 spec 回写,评估/预测/试验三侧同源。
507
+ - **模型驱动孪生与持续校准**:`twin_trial_run` / `mpc_optimize` 可传 `model_id`——rollout 由训练出的 hybrid 模型驱动(校准后物理主干 + 残差集成 ONNX,`ModelBackedHybridProvider`),UQ 覆盖率与成员分歧来自训练工件;模型数据集与场景的产线/产品/配方不一致直接拒绝(`TWIN_MODEL_SCENE_MISMATCH`)。持续校准请求由 60s 定时 worker 消费,自动提交 `hybrid_residual` 重训**候选**;晋升仍走 HITL + Twin Gate(`AML_TWIN_WORKER_DISABLED=1` 可整体关闭)。
508
+ - **双模式优化闭环**:随包附带两个频道模板——`chtpl-aml-training-default`(建模面:22 个工具,无产线写入、无 MPC)与 `chtpl-aml-optimization-default`(执行面:快照/试验/门禁/MPC/贝叶斯寻优,外加 `optimization_explore`——受治理微写,每笔设定值与响应回读配对落 `optimization_explorations` 台账)。两面按频道互斥注入;优化频道实例化时可选**探索**模式(治理小步,无需模型)或 **aml** 模式(必须给 `boundModelId`——过门禁的模型先绑定,执行面才解锁)。
509
+ - **孪生 Provider 插件 SDK(热加载)**:工业场景的物理主干 / 场景包 / 目标 / 求解器经 `ctx.twin` 注册进 **Twin Provider Registry**(`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`,另有 `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`)。孪生工具按 `SceneContract.physicsProfileId` 解析 Provider(解析不到回退内置 `twin-injection-default`),**换场景不改工具与频道**;热重载按 **generation** 装载新代、排空旧代,试验与 MPC 持租约 ⇒ 在飞工作不被作废,`retireProvider` 等引用归零才下线。系统自带注塑 Provider 走的正是这套外部契约(`server/plugins-builtin/twin-injection-default/`),装法与其它插件同址、停用或热重载无需重启。清单字段与可运行示例见 [`docs/plugins.md`](./docs/plugins.md)「混合孪生 Provider 插件」,SDK 面见 [`docs/sdk.md`](./docs/sdk.md) §4.10。
510
+
511
+ ---
512
+
513
+ ## 使用说明
514
+
515
+ ### 认证
516
+
517
+ 邮箱 + 密码登录签发 **bearer token**(每用户多 token,可单独吊销)。
518
+
519
+ ```bash
520
+ # 注册
521
+ curl -X POST http://localhost:3000/api/users/register \
522
+ -H 'content-type: application/json' \
523
+ -d '{"email":"you@example.com","password":"secret","name":"you"}'
524
+
525
+ # 所有 workshop 调用
526
+ curl http://localhost:3000/api/workshop/channels \
527
+ -H 'authorization: Bearer <token>'
528
+ ```
529
+
530
+ ### 产线级权限
531
+
532
+ 工业数据按**产线**三态管控,由管理员在内置「权限管理」页(`/permissions`,仅 admin 侧栏可见)维护:
533
+
534
+ | 状态 | 数采节点 | 数控(写控)节点 | 可见性 |
535
+ |---|---|---|---|
536
+ | **无权**(普通用户默认) | 隐藏 | 隐藏 | 后端不返回该产线数据——产线运营/数采中心/数字孪生均不可见 |
537
+ | **仅查看** | 只读 | ✕ | 产线可见、实时值可看,但不可写/不可下发/不可绑定设备 |
538
+ | **可操控** | 读取 | 读取+写入 | 全量能力:设定值写入、任务下发、设备绑定 |
539
+
540
+ - `admin` / `editor` 为运营角色,不受授权约束(全量全权)。
541
+ - 普通用户**默认无权**——未授权前看不到任何产线数据。
542
+ - 强制点在数据面:列表接口按授权过滤,写控/下发接口返回人类可读的 403,Agent↔节点绑定校验产线授权(数采需仅查看+,写控需可操控)。
543
+ - 插件经 `ctx.permissions`(`lineMode` / `visibleLineIds` / `listGrants` / `setGrants`)获得同一能力面,并有 `permissions:changed` 生命周期钩子;SDK REST 客户端提供 `client.permissions.overview()` / `client.permissions.set(...)`。
544
+
545
+ ### 执行模式
546
+
547
+ 在任务描述中使用模式前缀(或在 composer UI 中选择):
548
+
549
+ | 模式 | 语义 | 配置 |
550
+ |---|---|---|
551
+ | `goal` | lead 分解 → worker 交付 → **lead 判定满意度**;不满足继续补发;满足收口父任务。 | `goalCriteria` |
552
+ | `loop` | 固定间隔循环重放同一任务。 | `intervalMs`(默认 60000)、`maxIterations`(默认 ∞) |
553
+ | `pipeline` | 有序阶段;阶段 N+1 消费阶段 N 产出。 | `stages: [{name, description, assigneeId?}]` |
554
+
555
+ ### 定时任务
556
+
557
+ 任意任务都可挂上**调度**,让频道在无人值守时也持续工作:
558
+
559
+ | 维度 | 行为 |
560
+ |---|---|
561
+ | 模式 | `interval` —— 固定节拍(`intervalMs`,60s 下限)· `daily` —— 每日本地时间 `HH:MM` 定点一次 |
562
+ | 管理 | `/workshop/schedules` 页面,或 `POST/PATCH /api/workshop/schedules` |
563
+ | 护栏 | 忙等守卫(频道仍有在飞任务时本次触发顺延)、逐次运行历史带状态、**连续失败熔断**(`maxConsecutiveFailures`,异常调度自动停用) |
564
+ | 典型用法 | 每日巡线(`daq_query` + 漂移摘要写入频道记忆)、周期性偏差检查 + 自动判定、每日 KPI 摘要 |
565
+
566
+ ```bash
567
+ # 创建调度:每 30 分钟巡线一次
568
+ curl -X POST http://localhost:3000/api/workshop/schedules \
569
+ -H 'authorization: Bearer <token>' -H 'content-type: application/json' \
570
+ -d '{"channelId":"<id>","name":"line-patrol","title":"巡线","description":"读取 1 号线全部数采节点,把漂移摘要写入频道记忆。","mode":"interval","intervalMs":1800000}'
571
+ ```
572
+
573
+ ### 四个入口
574
+
575
+ | 入口 | 端点 | 面向 |
576
+ |---|---|---|
577
+ | **WS** | `/api/workshop/ws?channelId=…` | 仪表盘 / UI——AEP v1 信封,per-channel 单调 `seq`,5000 事件环形缓冲,`lastSeq` 续传,快照兜底。 |
578
+ | **MCP** | 进程内服务,约 25 个工具 | Agent(omp host tools)——管理面 + 作业面工具,Channel 作用域。 |
579
+ | **A2A** | `POST /api/workshop/a2a/:agentId/rpc` | 外部 Agent——JSON-RPC 2.0,`AgentCard` 在 `/card`,`tasks/sendSubscribe` SSE。 |
580
+ | **REST** | `/api/workshop/**` | 人 / 脚本——完整管理面。 |
581
+
582
+ ### 任务状态机
583
+
584
+ ```
585
+ SUBMITTED ─▶ ASSIGNED ─▶ WORKING ─▶ WAITING ─▶ COMPLETED
586
+ │ │ │ │
587
+ └────────────┴───────────┴──▶ CANCELED / FAILED ─▶(重试 ≤ 3 或取消)
588
+ ```
589
+
590
+ ---
591
+
592
+ ## 端到端验证
593
+
594
+ 上面每一条论断,背后都有一个可复跑的套件。验收套件在**生产实例上、跑真实模拟产线协议**(Modbus TCP/RTU、OPC UA、MQTT、HTTP + MQTT/Timescale 管线),配真实引擎 CLI,断言落在数据库、事件流与 HTTP API 上——而不是 mock。2026-09-24 的两轮波次已归档:基础矩阵(约 **1100+ 条真实断言**,v0.7.45 生产构建、隔离 `AW_HOME`、真实浏览器)见 [`docs/audit/e2e-2026-09-24-full-coverage.md`](./docs/audit/e2e-2026-09-24-full-coverage.md);补充功能波次(真实 **PLC 节点模拟器** + 注塑 AgentTeam 闭环、FIFO 多任务、定时任务、协作,合计约 **1400+ 条断言**)见 [`docs/audit/e2e-2026-09-24-all-features.md`](./docs/audit/e2e-2026-09-24-all-features.md)。
595
+
596
+ | 套件 | 最新结果 | 覆盖 | 复现 |
597
+ |---|---|---|---|
598
+ | `real-injection-closed-loop.mjs` | **双 goal 全部 COMPLETED / 0 失败**(2026-09-24,真实 PLC 模拟器 + 真实 `omp` 团队) | 从模拟器供给注塑产线(11 个数控 + 14 个数采节点)→ 真实 AgentTeam(lead/分析/优化) → 受治理写入且**间隔 65.8s ≥ 60s 策略** → 数采复测 → `qualityOk`、判定 `keep` | `AW_BASE=<base> SIM_BASE=http://127.0.0.1:4010 AW_TOKEN=<token> node scripts/real-injection-closed-loop.mjs` |
599
+ | `_run-real-injection-fifo-goals.mjs` | exit 0(2026-09-24) | **FIFO 根队列多任务串行**:GOAL-2 仅在 GOAL-1 收口后派发;角色门控切换;两次受治理写入间隔 65.04s;两条记录均判定;账本 4 条锚 | `AW_BASE=<base> SIM_BASE=… AW_TOKEN=<token> node scripts/_run-real-injection-fifo-goals.mjs` |
600
+ | `e2e-plc-plugin-closedloop.mjs` | 核心 Stage A–D 全绿(2026-09-24) | PLC 模拟器 Modbus 16040 真实供给 → 数采交叉核对(AW 采样 197 vs 模拟器寄存器 197.37)→ HITL 闭环写 3 区(寄存器 40021/40023/40025 = 210,真实写穿)→ `dcw_judge` keep;插件段 E–H 需外部诊断服务,按约定显式 SKIP | `AW_BASE=<base> KB_BASE=http://127.0.0.1:8771 AW_E2E_USERS_DB=<home>/data/users.sqlite node scripts/e2e-plc-plugin-closedloop.mjs` |
601
+ | `_dbg-schedule-e2e.mjs` | **35 / 0**(2026-09-24) | 定时任务:计划 CRUD + 参数校验、`next_run_at`、`scheduledCount`、忙等守卫 **409 CHANNEL_BUSY**、在途重复 **409 SCHEDULE_RUNNING**、取消对账(run FAILED + 失败计数)、**timer 到点自动触发**(`trigger_kind=timer`)、停用/启用状态机、删除后 404 | `SCHED_E2E_BASE=<base> node scripts/_dbg-schedule-e2e.mjs` |
602
+ | `e2e-crash-cycle.mjs` | **5 / 5 阶段**(2026-09-24) | 常规执行 → 硬杀 → 持久化断言 → 重启 → 重投 → 自动恢复 → 消费缺口重投;每阶段独立进程 | `node scripts/e2e-crash-cycle.mjs --port 3300 --home .e2e-home-full` |
603
+ | `e2e-full-closedloop.mjs` | **98 / 0**(2026-09-24,v0.7.45 生产构建) | 11 阶段:注册 → 产线/产品/配方建模 → 数采采样 → 帧管线 → 数控写入 + 回读 → 回退账本 → Agent 节点鉴权 → 桥越权边界 → 插件 → 数据根隔离 | `node scripts/e2e-full-closedloop.mjs <base>` |
604
+ | 全协议矩阵(真实协议) | **46 / 0**(2026-09-24) | MQTT · Modbus TCP · Modbus RTU · OPC UA · HTTP——逐协议数采、受控下发 + 回读、配方窗联锁与真实 Agent 闭环 | `node scripts/_dbg-protocol-matrix.mjs` |
605
+ | 生产 API 全链路 | 60 / 0(2026-09-24) | 跨重启持久化、模板 CRUD、任务 assign/complete/cancel/loop/pipeline、A2A + mailbox、WS 广播、MCP 端点、级联删除 | `AW_E2E_TOKEN=<token> node scripts/api-live-e2e.mjs` |
606
+ | AgentTeam 群聊 + 原生 HITL | 112 通过 / 0 失败 / 1 阻塞(2026-09-24,真实 `omp`) | 群聊请求 → 可追踪作业;`omp` 原生 ask → HITL 审批 → 引擎带回执继续 | `node scripts/e2e-agentteam-chat.mjs --phase=all` |
607
+ | 终端镜像 + 提示词组合 | **26 / 0** 与 **16 / 0**(2026-09-24,真实 `omp`) | 终端镜像帧、`input`/`abort`/`ui_response` 注入、原生 `ask` 往返;五段式 prompt 组合(场景 → 专长 → 记忆 → 手册 → 任务)在线上可观测 | `node scripts/test-terminal-e2e.mjs` · `node scripts/test-prompt-system.mjs` |
608
+ | 真引擎协作 | 任务流真跑 **PASS**、`e2e-omp-workspace` **13 / 13**、群聊全真 **PASS**、多用户 HIL **PASS**(2026-09-24) | 真实 `omp` lead + worker:分解/派发/进度/成果/workspace 文件读取与卸载;多用户 HITL 可见性;多引擎团队 14/18(omp 与 dsh 全绿) | `npx tsx scripts/e2e-agentteam-task-flow-real.ts` · `npx tsx scripts/e2e-omp-workspace.ts` |
609
+ | 前端验收 | 响应式门禁 **16 / 16** 页、抽屉交互 **10 / 10**(2026-09-24,真实 Chromium) | 全部产品页(含 3D 小镇)在门禁阈值下渲染通过;抽屉开合、滚动锁、路由跳转、零 pageerror | `node scripts/ui/verify-responsive.mjs --routes all` · `node scripts/ui/verify-nav.mjs` |
610
+ | `_aw0746-stage12.mjs` | **10 / 0**(2026-09-25,全局安装的 **v0.7.49 打包系统**) | 健康门(version=0.7.49)→ 管理员登录/角色面 → 创建 Channel(真实 `omp` lead)→ 开群聊 → **真实 omp 群聊回复** → 系统监控可见 omp 子进程 | `AW_BASE=<base> node scripts/_aw0746-stage12.mjs` |
611
+ | `_aw0746-stage34.mjs` | **13 / 0**(2026-09-25,v0.7.49 打包系统 + PLC 模拟器) | 模拟器建线(11 数控 + 14 数采)→ 产品/配方三元组 → 开跑后**样本逐条带 recipe_id/run_id** → `daq_query` **默认只取当前活动批次**(`scope=all` 可放开,实测 1 vs 4)→ 实例化 Hybrid Twin 模板(lead + 3 worker,注入孪生 6 件套 / 总 57 工具) | `AW_BASE=<base> node scripts/_aw0746-stage34.mjs` |
612
+ | `_aw0746-stage6b-train-sweep.mjs` | 门禁**全绿**(2026-09-25,v0.7.46 打包系统,真实 torch 训练) | 1 s 拍格数据集(**1724 行 / 10 批次**)→ 内联 code 作业真实训练 → G1 单步 **0.0992**(≤0.10)/ G2 滚动 0.1092(≤0.25)/ G3 泛化 14.6%(≤20%)/ G4 行数与批次 → 模型注册并**晋升 production** | `AW_BASE=<base> AW_DATASET_ID=<ds> node scripts/_aw0746-stage6b-train-sweep.mjs` |
613
+ | `_aw0746-stage7-twin.mjs` | **17 / 0**(2026-09-25,v0.7.49 打包系统,真实 DAQ + 真实模型) | 真实样本 → TwinSnapshot `fresh=true` → 65 组真实 VirtualTrial(12 条安全候选,`candidateExecuted=false`)→ 12 项推荐门禁 **write_eligible** → 门禁结论回写模型 `twinEligibility` → `mpc_optimize` 升档 **precise_search** → 全程 **0 DCW 写入** | `AW_BASE=<base> AW_REQUIRE_MODEL=1 node scripts/_aw0746-stage7-twin.mjs` |
614
+ | `_aw0746-stage6c-jobsmoke.mjs` | **5 / 0**(2026-09-25,v0.7.49 打包系统) | AML 作业链路:内联 `code` 被接受(不再要求 `workspace/train.py`)→ 作业到终态 → 训练日志/ONNX 痕迹 → 实验与逐项门禁落库 | `AW_BASE=<base> node scripts/_aw0746-stage6c-jobsmoke.mjs` |
615
+ | `_aw0748-failclosed-probe.mjs` | **7 / 0**(2026-09-25,v0.7.49 打包系统) | 硬约束**失败关闭**回归:auto_daq 按真实绑定取样建快照 → 可映射约束 `weight` 正常评估 → 不可映射的 `part_weight` 判不通过并给出明细(v0.7.47 会假通过)→ 空轨迹同样判不通过 | `AW_BASE=<base> node scripts/_aw0748-failclosed-probe.mjs` |
616
+ | `_aw0748-mock-closedloop.mjs` | **13 / 0**(2026-09-25,v0.7.49 打包系统,进程内 `mock`,零额度) | 调度闭环回归:创建 mock Channel → 根任务被真实派发并收口 → `[mock:complex]` 强制委派出子任务 → 父任务汇总收口 → mock worker 就位后 [mock:complex] 委派子任务并汇总 → **第二个/第三个根任务同样被派发**(修复前:lead 空闲卸载后 `scheduler` 置空,后续根任务只落库、一直 SUBMITTED 直到 `ROOT_TIMEOUT`)→ mock 无 host tool 通道时工具桥显式拒绝 | `AW_BASE=<base> node scripts/_aw0748-mock-closedloop.mjs` |
617
+ | 工业基准——integrated | **83 / 83 检查,硬门禁绿**(2026-09-21) | 五协议五产线基准:连通性、采样入 Timescale、受控下发、治理、Agent 闭环、工艺参数语义层 | `node bench/pipeline.mjs --profile integrated` |
618
+ | 多场景闭环 | 4 场景 · 闭环达标(2026-09-21) | 注塑克重窗口寻优 · A²/O 污水排放达标 + 能耗最小化 · 连续退火质量窗与产能权衡 · BOPET 产线任务 | `node bench/scenarios.mjs --scenarios injection,wwtp,anneal` |
619
+ | 产线权限 / 审计负向 | 21 / 21 + 9 / 9(2026-09-12) | 三态产线授权 + 人类可读 403、绑定主体校验、授权撤销收敛、无 token WS 零遥测 | `node scripts/_dbg-perms-e2e.mjs <base> <adminPass>` · `node scripts/_dbg-audit-neg-e2e.mjs <base> <adminPass>` |
620
+ | 渲染回归 | 30 / 30(2026-09-12) | 数采表完整性(行数与 API 动态对齐)、WS 驱动行更新、筛选、详情页、3D 小镇 + 模型库、7 页 smoke、零 pageerror | `node scripts/_dbg-render-regression.mjs <base> <email> <pass>` |
621
+ | AML 自动建模 | 25 / 0(2026-09-24,确定性训练器) | 数据集构建 → 跨配方拒绝 → 作业提交 → 门禁 → 晋级守卫 → 预测守卫 → 审计;`--real` 附加 uv/torch 真实运行时 | `node node_modules/tsx/dist/cli.mjs --tsconfig .nuxt/tsconfig.server.json scripts/e2e-aml.ts` |
622
+ | 离线单元/属性套件 | 全绿 | AEP 事件索引(`test-events-index`)、LRU、数据根拆分(`test-data-root`)、日志洪泛、回退索引、插件加固、任务租约围栏(`test-task-lease-fencing`)、CLI 退出码(`test-cli-exit`)、SDK 能力面(`test-sdk-surface`) | `node scripts/test-<name>.mjs`(TS 套件经 tsx 运行) |
623
+
624
+ 历史上的 **v0.7.20** 验收基线——*156 断言、0 失败*——归档于 [`docs/audit/e2e-2026-09-07.md`](./docs/audit/e2e-2026-09-07.md)。性能探针:`scripts/_dbg-render-perf.mjs`。
625
+
626
+ ---
627
+
628
+ ## 项目结构
629
+
630
+ ```
631
+ AgentWorkShop/
632
+ ├── bin/ · cli/ # aw CLI——指令注册表 · 内置指令 · 配置引擎接线
633
+ ├── app/ # Nuxt 4 前端(srcDir)
634
+ │ ├── pages/ # / · /workshop · /workshop/agents · /workshop/teams
635
+ │ │ # /workshop/channel-templates · /workshop/schedules · /workshop/w/:id
636
+ │ │ # /town · /daq · /daq/:id · /dcw · /dcw/:id
637
+ │ │ # /aml · /operations · /monitor · /logs · /permissions
638
+ │ │ # /plugins · /users · /tokens · /settings
639
+ │ ├── components/workshop/ # 时间线 · 泳道 · 任务板 · 记忆面板 · 3D 小镇
640
+ │ └── stores/composables/ # Pinia + AEP 客户端
641
+ ├── server/
642
+ │ ├── api/ # REST + WS + A2A + MCP 路由
643
+ │ ├── services/workshop/
644
+ │ │ ├── runtime/ # manager · scheduler-loop · task-engine · memory · mailbox
645
+ │ │ ├── agents/ # AgentInterface:14 个引擎(+ 工业工具)
646
+ │ │ ├── daq/ dcw/ aml/ # 边缘运行时 · 驱动 · 队列 · 存储 · 建模实验室
647
+ │ │ └── db/ # node:sqlite 仓储层
648
+ │ ├── mcp/ # MCP 服务(25 个工具,进程内 workshop 面)
649
+ │ ├── plugins-builtin/ # 随包发布的插件(serial-bridge · rag-bridge · diag-bridge · twin-injection-default)
650
+ │ └── plugins/ # 运行时装配(单例)
651
+ ├── mcp/ # aw mcp —— 零依赖 stdio MCP 网关(38 个工具,实例自动发现)
652
+ ├── sdk/ # agentworkshop/sdk——插件上下文、钩子总线、REST 客户端、浏览器 SDK
653
+ ├── tui/ # 终端工作台(aw tui)
654
+ ├── shared/
655
+ │ └── config/ # schema.json(118 个设置描述符)+ 引擎(合并/校验/持久化)+ 路径解析器
656
+ ├── config.yml # 工厂默认值(构建/启动时读取;版本号来自 package.json)
657
+ ├── .AgentWorkShop/ # 检出内的配置根——prompts(版本化)+ 运行时覆盖 · 数据 · 日志 · 指令(git 忽略)
658
+ ├── data/ # 迁移前的旧版位置(自动迁移进配置根)
659
+ └── scripts/ # 启动器 · home 引导 · E2E · 验证套件
660
+ ```
661
+
662
+ ## 技术栈
663
+
664
+ | 层 | 技术 |
665
+ |---|---|
666
+ | 框架 | [Nuxt 4](https://nuxt.com) + Nitro(WebSocket) |
667
+ | UI | Vue 3.5 · Pinia · Ant Design Vue · UnoCSS · Three.js · ECharts |
668
+ | 语言 | TypeScript 5.7 全栈;`shared/` 前后端共用 |
669
+ | CLI | Node ESM CLI,可插拔指令注册表(`bin/aw.mjs`) |
670
+ | 持久化 | `node:sqlite`(零原生依赖)+ FTS5 + 可选 `sqlite-vec`;时序用 TimescaleDB |
671
+ | 校验 | `zod` —— 每个消息边界 |
672
+ | 互操作 | `@modelcontextprotocol/sdk` · A2A(JSON-RPC 2.0)· AEP v1(自研 WS 协议) |
673
+ | 现场总线 | `modbus-serial` · `node-opcua` · `mqtt` |
674
+
675
+ ## 开发指南
676
+
677
+ ```bash
678
+ pnpm dev # 开发服务(端口取自有效配置)
679
+ pnpm cli … # 仓库内使用 CLI:pnpm cli config list
680
+ pnpm tui # 终端工作台(连运行中的实例)
681
+ pnpm build && pnpm start
682
+ pnpm typecheck # 包装脚本:prepare → 剔除失效 volar 条目 → vue-tsc -b
683
+ pnpm lint
684
+ pnpm test:api-live # 针对运行中服务的 API 套件
685
+ node scripts/e2e-full-closedloop.mjs # 全链路闭环(需服务端运行中)
686
+ node scripts/e2e-crash-cycle.mjs # 硬杀 → 重启 → 重投(自带隔离实例管理)
687
+ node scripts/test-sdk-surface.mjs # SDK 导出面守卫
688
+ ```
689
+
690
+ > 排障前先知道两条测试运行约定:(1)`pnpm typecheck` 走 [`scripts/typecheck.mjs`](./scripts/typecheck.mjs),
691
+ > 而不是裸 `nuxt typecheck`——Nuxt 4.5 仍会把 `vue-router/volar/sfc-route-blocks` 编译插件写进生成的
692
+ > tsconfig,而 vue-router 4.6 已不再导出该子路径,裸 vue-tsc 在加载配置阶段就崩,类型检查其实一次都没跑;
693
+ > (2)导入**真实路由 handler** 的 TS 套件(如 `scripts/e2e-memory-system.ts`)要走纯 node 路径
694
+ > `node --experimental-transform-types --import ./scripts/_audit/ts-register-hook.mjs <suite>.ts`,
695
+ > 该钩子把 Nuxt 的 `#imports` 虚拟模块映射到共享配置桩。
696
+
697
+ 文档站位于 `docs/site/`(VitePress),由 [`.github/workflows/deploy-docs.yml`](./.github/workflows/deploy-docs.yml) 部署到 GitHub Pages:
698
+
699
+ ```bash
700
+ cd docs/site && npx vitepress dev # 本地预览
701
+ cd docs/site && npx vitepress build # 生产构建 → .vitepress/dist
702
+ ```
703
+
704
+ 该工作流在构建前把 `docs/{cli,plugins,sdk}.md`(及其 `.en.md` 双语对照)同步进文档站,因此这些文件是单页指南的唯一事实来源。
705
+
706
+ ## 部署(生产)
707
+
708
+ 目标形态:**内网单实例 + 反向代理终结 TLS**。服务本身刻意不做 TLS 监听 ——
709
+ 由 caddy/nginx 在前面终结(顺带获得 HTTP→HTTPS 跳转、访问日志与第二层限流)。
710
+
711
+ ```bash
712
+ # 1) 构建并启动(缺 .output 产物时生产入口会拒启)
713
+ pnpm build
714
+ NUXT_SESSION_PASSWORD=$(node -e "console.log(require('crypto').randomBytes(24).toString('hex'))") \
715
+ PORT=3000 node scripts/start.mjs
716
+ ```
717
+
718
+ **TLS 反向代理。** caddy(自动证书,WebSocket 天然透传):
719
+
720
+ ```caddy
721
+ aw.example.com {
722
+ reverse_proxy 127.0.0.1:3000
723
+ }
724
+ ```
725
+
726
+ nginx(注意 WebSocket `Upgrade` 头 —— 工作台、HITL 面板、实时日志全部走 WS):
727
+
728
+ ```nginx
729
+ server {
730
+ listen 443 ssl;
731
+ server_name aw.example.com;
732
+ # ssl_certificate / ssl_certificate_key ...
733
+ location / {
734
+ proxy_pass http://127.0.0.1:3000;
735
+ proxy_http_version 1.1;
736
+ proxy_set_header Upgrade $http_upgrade;
737
+ proxy_set_header Connection "upgrade";
738
+ proxy_set_header Host $host;
739
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
740
+ proxy_read_timeout 300s;
741
+ }
742
+ }
743
+ ```
744
+
745
+ 全站 HTTPS 后打开运行时设置 `security.hstsEnabled`,响应带 `Strict-Transport-Security`。
746
+
747
+ **进程守护。** `scripts/start.mjs` 已自带子进程监管(崩溃退避重启、30s 健康探针、
748
+ 堆水位主动重启)—— 把**它**交给服务管理器,让守护进程本身也能扛住重启:
749
+
750
+ ```ini
751
+ # /etc/systemd/system/agentworkshop.service
752
+ [Service]
753
+ WorkingDirectory=/opt/agentworkshop
754
+ Environment=NUXT_SESSION_PASSWORD=<生成的密钥>
755
+ Environment=PORT=3000
756
+ ExecStart=/usr/bin/node scripts/start.mjs
757
+ Restart=always
758
+ User=aw
759
+ [Install]
760
+ WantedBy=multi-user.target
761
+ ```
762
+
763
+ Windows 用 `nssm install AgentWorkShop "C:\Program Files\nodejs\node.exe" scripts\start.mjs`。
764
+ **不要**对同一配置根起第二个实例 —— 单实例锁(`.runtime/aw.lock` 带心跳)会让新进程
765
+ 顶替、旧进程退出。
766
+
767
+ **生产认证加固。** `security.allowRegistration` 缺省 **false**:首管理员就位后两个
768
+ 注册端点一律 403,账号由管理员创建;管理员建号/重置密码的账号带 `mustChangePassword`
769
+ 标记 —— 工作台在首次登录时强制改密(管理员重置会再次置位并吊销全部旧会话)。
770
+ 首启引导不受影响:零用户时首个注册账号仍自动成为管理员。
771
+
772
+ **备份与恢复。** `server/plugins/backup.ts` 每 24h 快照(保留 7 份)到
773
+ `<配置根>/.AgentWorkShop/data/backups/`:
774
+
775
+ - 三个 SQLite 库(`workshop/users/daq-timeseries.sqlite`,WAL checkpoint + 原子改名)
776
+ - 全部 JSON 仓储 + `config.yml` / `runtime-settings.json`(`files-<stamp>/`)
777
+ - 本地对象存储与导出 `daq-objects/`、`daq-exports/`(`objects-<stamp>/`)——
778
+ 超过 `AW_BACKUP_OBJECTS_MAX_MB`(缺省 200MB)时显式跳过并落日志
779
+ - 每次附带 `manifest-<stamp>.json`;TimescaleDB/MinIO **docker 卷不在文件备份范围** ——
780
+ 用 `pg_dump` / `mc mirror` 或卷快照另行备份
781
+
782
+ 恢复演练(上线前务必做一次):停服 → 移走 `backups/` → 用最新 `*.bak` + `files-*` +
783
+ `objects-*` 重组数据目录 → 启动 → 核验 `/api/health`、管理员登录、产线/配方在册。
784
+ `BACKUP_DISABLED=1`、`BACKUP_INTERVAL_HOURS`、`BACKUP_KEEP` 可调。
785
+
786
+ **生产检查清单。** `NUXT_SESSION_PASSWORD` 随机生成(已知开发密钥会拒启) ·
787
+ `security.allowRegistration=false`(缺省) · 反代 TLS + HSTS · 服务管理器就位 ·
788
+ 恢复演练已过 · `/api/health` + `/api/metrics` 接入监控 · `AW_HEAP_LIMIT_MB` 按主机
789
+ 配好 · `AW_RATE_LIMIT_OFF` **不设**(内置限流必须在线) ·
790
+ `AW_BENCH_MODE` **不设**(写控联锁与限频必须全量在岗)。
791
+
792
+ **基准开关 `AW_BENCH_MODE=1` 是实验专用,生产禁用。** 该开关服务于 `bench/` 论文
793
+ 基准管线(E1a 四臂消融),置 1 时:API 限流总闸停用;在线探索限频(单步步长上限/
794
+ 60s 最小写入间隔/写入保持窗)整体豁免;写接口接受 `x-aw-bench-arm` 头选择旁路
795
+ 软联锁层(no-interlock/no-readback/ungated;硬量程与结构层校验结构性不可旁路)。
796
+ 生产部署的唯一正确值是**不设置**:代码按 `=== '1'` 精确判断,缺省即恒 full 臂;
797
+ 开关在模块加载时读取,必须在进程启动前确认未设置(误配时启动日志会告警)。
798
+ `AW_RATE_LIMIT_OFF=1` 只关 API 限流、不影响写控联锁,生产同样必须不设。
799
+
800
+ ## 路线图
801
+
802
+ | 能力 | 状态 |
803
+ |---|---|
804
+ | Channel 运行时、lead 编排、7 态任务引擎 | 已交付 |
805
+ | 四入口:WS(AEP v1)· MCP · A2A · REST | 已交付 |
806
+ | 持久记忆(FTS5 + 可选向量混合) | 已交付 |
807
+ | 工业栈:数采 · 数控写控 · 产线/配方/批次 | 已交付 |
808
+ | Agent ↔ 节点绑定 + HITL 审批 + 联锁 | 已交付 |
809
+ | 3D 数字孪生小镇 · 产线运营 UI · 仪表盘 | 已交付 |
810
+ | 全功能 live E2E(Agent 读写真实产线,23 项检查) | 已交付 |
811
+ | 运行时配置系统:设置持久化 · 热重载 · 设置页 UI | 已交付 |
812
+ | `aw` CLI:config · start/dev · init · register · doctor | 已交付 |
813
+ | 多 Harness 注册表:omp · codex · dsh · opencode 子进程引擎 | 已交付 |
814
+ | 六种现场协议:Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + 内置 serial-bridge 串口插件(数采 + 数控双向) | 已交付 |
815
+ | Harness 可用性探测 + 执行前引擎强校验(UI 禁选 + 409) | 已交付 |
816
+ | Recipe 归因版本化 + 非破坏回退(界面 + Agent 工具) | 已交付 |
817
+ | 配方链路优化闭环:recipe_trial 整批试验(不写版本)→ 进步才固化 → 统一回退(PLC 整批恢复) | 已交付 |
818
+ | 频道绑定产线:全员只读日志/配方/状态 + 产线简报注入提示词 | 已交付 |
819
+ | Agent 自查工具:line_context / ops_log / recipe_log / recipe_versions / dcw_journal | 已交付 |
820
+ | 多 Harness 并行真实产线 live E2E(四引擎、一条产线) | 已交付 |
821
+ | HITL 审批流经真实 OPC UA 写入验证 | 已交付 |
822
+ | 双语文档(简体中文 / English,VitePress 语言切换) | 已交付 |
823
+ | Channel 级 LLM provider/model 选择(取自实时 Harness 目录) | 已交付 |
824
+ | 可配置数采/时序节拍(采样与查询的默认值 + 下限,live 热重载) | 已交付 |
825
+ | 团队级插件开关(建队勾选 + 团队弹层,按 Channel 过滤工具注入) | 已交付 |
826
+ | 插件热管理:`/plugins` 管理页 + `aw plugin list/enable/disable` | 已交付 |
827
+ | 渲染性能专项(v0.7.27):数采主线程阻塞 −90%、孪生 −69%,自适应画质回升最高档;`window.__townStats` 仪表化 | 已交付 |
828
+ | 插件系统 v2:浏览器面板注入、插件级 settings/groups、插件 i18n、宿主运行时服务(`ctx.services`/`ctx.daq`/`ctx.omp`) | 已交付 |
829
+ | Instrument Glass 材质层(v0.7.36):三级半透明材质、通透感、高光边缘、弹簧动效、逐页路由转场 | 已交付 |
830
+ | 实时管线优化:数采帧索引 O(n²)→O(n)、逐 Agent 增量事件索引、图表原地更新、按大小感知的 JSON 持久化 | 已交付 |
831
+ | AML 自动建模实验室:数据集构建 · 作业编排(uv 托管 Python)· 排行榜 · 晋级门禁 · 14 个 Agent 工具 | 已交付 |
832
+ | Claude Agent SDK 适配器——常驻会话、同轮 steer 与 `canUseTool` HITL | 已交付 |
833
+ | 工艺参数语义映射:`param_control`/`param_read` 按工艺参数寻址、四层写入限界、调控闭环(`dcw_judge`/`dcw_rollback`) | 已交付 |
834
+ | Channel 群聊:请求升级为可追踪作业;原生 HITL(`omp` ask → 审批 → 回执) | 已交付 |
835
+ | 定时任务:`interval` / `daily` 双模式、逐次运行历史、忙等守卫 + 连续失败熔断 | 已交付 |
836
+ | 根任务队列(FIFO、排队位次可见)+ 派发代与执行租约围栏 | 已交付 |
837
+ | 监督看门狗 + Harness 连续性(`persistent`/`per_turn`、会话复用租约带重启原因) | 已交付 |
838
+ | Channel 过程记忆:确定性事件契约、canonical root 摘要、持久 outbox + 补偿 worker | 已交付 |
839
+ | 运行时可观测:`GET /api/system/monitor` 团队指标,每项带文档化回滚开关 | 已交付 |
840
+ | 工业基准:integrated 档(83 项检查、硬门禁)+ 多场景闭环(注塑 / 污水 / 退火 / BOPET)+ 质量目标 optloop 寻优 | 已交付 |
841
+ | 生产构建全覆盖验收波次矩阵(约 1100+ 条真实断言,2026-09-24) | 已交付 |
842
+ | 孪生 Provider 插件 SDK:物理/场景/目标/训练/求解器 Provider 经 `ctx.twin` 热加载注册,按 generation 装载 + 租约排空,内置 Provider 走同一外部契约 | 已交付 |
843
+ | 任意场景混合孪生建模闭环:场景发现 → 编译 → 冻结 → 物理 spec 起草/校验/编译 → 参考训练器作业(物理校准 + 残差集成 + conformal UQ)、模型驱动试验、持续校准 worker | 已交付 |
844
+ | 双模式优化闭环:`aml-training` / `aml-optimization` 专属频道模板、互斥工具面、探索 ↔ 生产双模式、带回读配对的治理微写 | 已交付 |
845
+ | 产线操作流水:`/operations` 单页 + 工作台控制台面板,九类操作时间线、结构化写控 diff、闭环阶段推断 | 已交付 |
846
+ | 外部 MCP 网关:`aw mcp` stdio 服务(38 个工具)、实例自动发现、`mcp.enabled` 运行时门控 | 已交付 |
847
+ | 可配置系统时区(`time.timeZone`,live 热生效)+ 配方参数级单步限幅 `stepLimit` + 配方 `description` 元字段 | 已交付 |
848
+ | 生产硬化:TLS、MQTT 鉴权、OPC UA 签名+加密缺省、结构化审计日志 | 规划中 |
849
+ | 边缘部署形态:独立 edge-agent + 中心 broker | 规划中 |
850
+ | 报警外送(邮件/webhook)+ 确认工作流 | 规划中 |
851
+ | CI 流水线(typecheck + lint + e2e)——文档部署已跑在 GitHub Actions 上 | 规划中 |
852
+ | License:Apache 2.0(宽松许可 · 允许商用与生产部署) | 已交付 |
853
+
854
+ ## 许可证
855
+
856
+ AgentWorkShop 是独立项目,**不是 Anthropic 或任何 LLM 厂商的官方产品**。它通过公开接口与 Agent harness(如 `omp`)集成。
857
+
858
+ **AgentWorkShop 为开源软件,依据 [Apache License 2.0](./LICENSE) 发布。**
859
+
860
+ - **允许** —— 个人学习、科研、兴趣项目、教学,以及非商业组织(公益、教育、公共研究、政府机构)的使用。
861
+ - **未经版权人事先书面许可不得商用** —— 任何**商业用途**:销售、付费服务、集成进商业产品、服务于经营活动的生产使用均未获授权。商用授权可向版权人申请。
862
+ - **再分发时** 必须随附本协议条款与 `Required Notice` 版权声明行。
863
+
864
+ 商用授权联系:[GitHub @kingdol666](https://github.com/kingdol666) · kingdol6080@gmail.com
865
+
866
+ <div align="center">
867
+
868
+ <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
869
+ <picture>
870
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
871
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
872
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
873
+ </picture>
874
+ </a>
875
+
876
+ </div>
877
+
878
+ ---
879
+
880
+ ## 参与贡献
881
+
882
+ 欢迎提交 Issue 与 Pull Request。提 PR 之前请先:
883
+
884
+ 1. **先读你要改的那份契约**——扩展面见 [`docs/plugins.md`](./docs/plugins.md),编程客户端见 [`docs/sdk.md`](./docs/sdk.md),指令注册见 [`docs/cli.md`](./docs/cli.md)。
885
+ 2. **本地跑一遍门禁**:
886
+
887
+ ```bash
888
+ pnpm typecheck # vue-tsc 覆盖 app + server + shared
889
+ pnpm lint # eslint 9,期望 0 warning
890
+ node scripts/e2e-full-closedloop.mjs # 全闭环 E2E,需要服务在跑
891
+ node scripts/test-sdk-surface.mjs # SDK 导出面不允许漂移
892
+ node scripts/check-docs-sync.mjs # docs/site 与 docs/*.md 保持同步
893
+ ```
894
+
895
+ 3. **提交信息走约定式**——`commit-msg` 钩子跑 `commitlint`(`feat:` / `fix:` / `docs:` / `refactor:` / `perf:` / `test:` / `chore:`),`lint-staged` 会在提交时自动修复暂存的 JS/TS/Vue。
896
+ 4. **改了行为就补测试。** 本仓库以 `scripts/` 下的**真实 E2E 脚本**为主,而不是 mock——一条新的工业链路应该能被证明可跑通。
897
+
898
+ > [!TIP]
899
+ > 报 bug 之前先跑 `aw doctor`:它会端到端体检环境(Node 版本、配置根、端口占用、SQLite、可选的 Docker 服务),大多数「起不来」在这一步就有答案。
900
+
901
+ ## 安全
902
+
903
+ 发现漏洞请**不要**开公开 Issue,而应通过 [GitHub Security Advisories](https://github.com/kingdol666/AgentWorkShop/security/advisories/new) 私下报告,并附上复现步骤与受影响版本。
904
+
905
+ 当你把 AgentWorkShop 指向真实设备时,它就在驱动真实设备:接入现场 PLC 之前,请先复核 `config.yml` 里的联锁、安全量程与 HITL 设置。默认姿态是建议性的——写操作要过联锁、要经审批、要回读校验——但产线侧逻辑始终拥有最终否决权。
906
+
907
+ ---
908
+
909
+ <div align="center">
910
+
911
+ **如果这个项目对你有用,点一个 ⭐ 能让更多人找到它。**
912
+
913
+ <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
914
+ <picture>
915
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
916
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
917
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
918
+ </picture>
919
+ </a>
920
+
921
+ <br />
922
+
923
+ **[在线文档](https://kingdol666.github.io/AgentWorkShop)** · **[上手指南](https://kingdol666.github.io/AgentWorkShop/guide/getting-started)** · **[插件 API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)** · **[CLI](./docs/cli.md)** · **[English](./README.md)**
924
+
925
+ <sub>基于 Nuxt 4 · Vue 3 · TypeScript · <code>node:sqlite</code> 构建 —— 监督层,秒级软实时。<br />
926
+ 时序关键回路请留在 PLC 内。</sub>
927
+
928
+ </div>