agentworkshop 0.7.66 → 0.7.71

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 (2070) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +3611 -2488
  2. package/.env.example +3 -0
  3. package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
  4. package/.output/.AgentWorkShop/aml-python/requirements.txt +3 -0
  5. package/.output/.AgentWorkShop/optimizer-python/probe.py +24 -0
  6. package/.output/.AgentWorkShop/optimizer-python/problems.py +347 -0
  7. package/.output/.AgentWorkShop/optimizer-python/worker.py +119 -0
  8. package/.output/.AgentWorkShop/prompts/host-tools.json +3611 -2488
  9. package/.output/.AgentWorkShop/schema.json +14 -5
  10. package/.output/nitro.json +1 -1
  11. package/.output/public/_nuxt/-jpUnM1I2.js +1 -0
  12. package/.output/public/_nuxt/0MLy6ogg2.js +1 -0
  13. package/.output/public/_nuxt/2KE8xGVm.js +1 -0
  14. package/.output/public/_nuxt/5S26I34j2.js +1 -0
  15. package/.output/public/_nuxt/62J4vljm2.js +1 -0
  16. package/.output/public/_nuxt/AuthGate.72Jdc4d6.css +1 -0
  17. package/.output/public/_nuxt/B-U7E_Mc2.js +1 -0
  18. package/.output/public/_nuxt/B1PzYsqN.js +4 -0
  19. package/.output/public/_nuxt/B1SzppY12.js +1 -0
  20. package/.output/public/_nuxt/B3Y5bCrM.js +1 -0
  21. package/.output/public/_nuxt/B5FKaMM02.js +1 -0
  22. package/.output/public/_nuxt/B6jtLy6z.js +21 -0
  23. package/.output/public/_nuxt/B7s2qeyT.js +14 -0
  24. package/.output/public/_nuxt/B8C-QJB5.js +1 -0
  25. package/.output/public/_nuxt/B8N8nsad2.js +2 -0
  26. package/.output/public/_nuxt/B8cViLJT.js +1 -0
  27. package/.output/public/_nuxt/BAcjVcku2.js +1 -0
  28. package/.output/public/_nuxt/BBw9ylUY2.js +1 -0
  29. package/.output/public/_nuxt/BC7W6lNm.js +1 -0
  30. package/.output/public/_nuxt/BErG4kzc2.js +1 -0
  31. package/.output/public/_nuxt/BJ2nJNlK2.js +1 -0
  32. package/.output/public/_nuxt/BJrj5JVe2.js +1 -0
  33. package/.output/public/_nuxt/BLwDhlaa.js +1 -0
  34. package/.output/public/_nuxt/BO0BJx3w.js +8 -0
  35. package/.output/public/_nuxt/BQIO4MkA2.js +1 -0
  36. package/.output/public/_nuxt/BRMVDfPl2.js +21 -0
  37. package/.output/public/_nuxt/BRdoISnJ2.js +1 -0
  38. package/.output/public/_nuxt/BUTg4W_x2.js +1 -0
  39. package/.output/public/_nuxt/BWn-lfCp2.js +1 -0
  40. package/.output/public/_nuxt/BYxG9Hb2.js +1 -0
  41. package/.output/public/_nuxt/B_-vAvzb.js +1 -0
  42. package/.output/public/_nuxt/BcEr7tIB.js +1 -0
  43. package/.output/public/_nuxt/Bc_k6AVA.js +23 -0
  44. package/.output/public/_nuxt/Bcs9zzO62.js +1 -0
  45. package/.output/public/_nuxt/BfQ-ptH0.js +1 -0
  46. package/.output/public/_nuxt/BfX6_AjY.js +1 -0
  47. package/.output/public/_nuxt/Bj5sjA5O.js +1 -0
  48. package/.output/public/_nuxt/BjLzqWJH2.js +1 -0
  49. package/.output/public/_nuxt/BjSEVANF.js +1 -0
  50. package/.output/public/_nuxt/BnNmkGJS2.js +36 -0
  51. package/.output/public/_nuxt/Bnc8HELj2.js +1 -0
  52. package/.output/public/_nuxt/BsTZnkVK.js +1 -0
  53. package/.output/public/_nuxt/BtfwbNC0.js +1 -0
  54. package/.output/public/_nuxt/BwO2Y5FH2.js +1 -0
  55. package/.output/public/_nuxt/Bx2a9cuY2.js +1 -0
  56. package/.output/public/_nuxt/Bx4MR0jd.js +1 -0
  57. package/.output/public/_nuxt/C-MY-JQE2.js +1 -0
  58. package/.output/public/_nuxt/C0YL0HKK.js +1 -0
  59. package/.output/public/_nuxt/C3aUN4Vp2.js +2 -0
  60. package/.output/public/_nuxt/C3sWJ8SD2.js +1 -0
  61. package/.output/public/_nuxt/C41CcsiD.js +1 -0
  62. package/.output/public/_nuxt/C6uBP0Xa.js +1 -0
  63. package/.output/public/_nuxt/C9gErLQc2.js +17 -0
  64. package/.output/public/_nuxt/CAiHhX8P2.js +7 -0
  65. package/.output/public/_nuxt/CCgbgkid.js +47 -0
  66. package/.output/public/_nuxt/CDn0eDn8.js +1 -0
  67. package/.output/public/_nuxt/CGk_VUhO2.js +1 -0
  68. package/.output/public/_nuxt/CHSAaKgE.js +209 -0
  69. package/.output/public/_nuxt/CIvMT5Ic.js +1 -0
  70. package/.output/public/_nuxt/CJ0bjZ6v2.js +1 -0
  71. package/.output/public/_nuxt/CJ3Vul2u.js +1 -0
  72. package/.output/public/_nuxt/CJSohaqk2.js +13 -0
  73. package/.output/public/_nuxt/CLxmY3Rh.js +1 -0
  74. package/.output/public/_nuxt/CNwx04ln.js +84 -0
  75. package/.output/public/_nuxt/CQgOzpvI.js +2 -0
  76. package/.output/public/_nuxt/CR612R752.js +1 -0
  77. package/.output/public/_nuxt/CVCscYzb2.js +1 -0
  78. package/.output/public/_nuxt/C_A0MCol2.js +1 -0
  79. package/.output/public/_nuxt/Car2lkbb.js +1 -0
  80. package/.output/public/_nuxt/CcX_jP-d.js +1 -0
  81. package/.output/public/_nuxt/Ce5R-ZGf2.js +1 -0
  82. package/.output/public/_nuxt/Ce6e1mPk2.js +1 -0
  83. package/.output/public/_nuxt/CeLqojCJ.js +1 -0
  84. package/.output/public/_nuxt/CiCEprsp2.js +1 -0
  85. package/.output/public/_nuxt/CnP6snIz.js +3 -0
  86. package/.output/public/_nuxt/Cp4r6Eiz.js +1 -0
  87. package/.output/public/_nuxt/CwZW1ZCe2.js +1 -0
  88. package/.output/public/_nuxt/CzX_kaPL.js +1 -0
  89. package/.output/public/_nuxt/D25dVZ822.js +3 -0
  90. package/.output/public/_nuxt/D3buuIkE.js +1 -0
  91. package/.output/public/_nuxt/D4_INWgq.js +1 -0
  92. package/.output/public/_nuxt/D5kCimyw.js +1 -0
  93. package/.output/public/_nuxt/D6ZcgHPz.js +1 -0
  94. package/.output/public/_nuxt/D7s96J3r2.js +1 -0
  95. package/.output/public/_nuxt/D8r8PNQa2.js +1 -0
  96. package/.output/public/_nuxt/DAsjfdZD.js +1 -0
  97. package/.output/public/_nuxt/DBtXLkyA.js +1 -0
  98. package/.output/public/_nuxt/DD-r0S1p.js +1 -0
  99. package/.output/public/_nuxt/DF32f5EL2.js +1 -0
  100. package/.output/public/_nuxt/DGrrucbG2.js +1 -0
  101. package/.output/public/_nuxt/DHURbGkn2.js +1 -0
  102. package/.output/public/_nuxt/DHhmq7s_.js +1 -0
  103. package/.output/public/_nuxt/DIwmMa_7.js +1 -0
  104. package/.output/public/_nuxt/DJJDigim2.js +3 -0
  105. package/.output/public/_nuxt/DKiqdYnj.js +1 -0
  106. package/.output/public/_nuxt/DLqSQbGv.js +1 -0
  107. package/.output/public/_nuxt/DPvZxAt02.js +1 -0
  108. package/.output/public/_nuxt/DQfy6R_2.js +1 -0
  109. package/.output/public/_nuxt/DSORcpTJ.js +9 -0
  110. package/.output/public/_nuxt/DTQTGA6v2.js +1 -0
  111. package/.output/public/_nuxt/DVkFSOZi.js +1 -0
  112. package/.output/public/_nuxt/DW8k_0dQ.js +1 -0
  113. package/.output/public/_nuxt/DX-c5laM2.js +1 -0
  114. package/.output/public/_nuxt/DZJ11BTI.js +1 -0
  115. package/.output/public/_nuxt/D_NjL-Hz.js +1 -0
  116. package/.output/public/_nuxt/D_Zspo1y.js +1 -0
  117. package/.output/public/_nuxt/DaBzS-iu.js +1 -0
  118. package/.output/public/_nuxt/DbeNMehP.js +1 -0
  119. package/.output/public/_nuxt/Dd7MZc_Q.js +1 -0
  120. package/.output/public/_nuxt/Dg81dOEO.js +1 -0
  121. package/.output/public/_nuxt/DjGYvFyA.js +1 -0
  122. package/.output/public/_nuxt/DkQBMVTs2.js +1 -0
  123. package/.output/public/_nuxt/DlcA9Gxl.js +1 -0
  124. package/.output/public/_nuxt/DnlhV7Xe.js +1 -0
  125. package/.output/public/_nuxt/DnzjxC0u.js +24 -0
  126. package/.output/public/_nuxt/DrF3TWoj.js +15 -0
  127. package/.output/public/_nuxt/DtiY69xi2.js +1 -0
  128. package/.output/public/_nuxt/DvOETuoT2.js +1 -0
  129. package/.output/public/_nuxt/GtI6PUI32.js +1 -0
  130. package/.output/public/_nuxt/HX4_xnak2.js +13 -0
  131. package/.output/public/_nuxt/HxohXQ_r.js +1 -0
  132. package/.output/public/_nuxt/KQZmHR_K.js +55 -0
  133. package/.output/public/_nuxt/KgnxOsMr.js +1 -0
  134. package/.output/public/_nuxt/KwT4sN_d.js +1 -0
  135. package/.output/public/_nuxt/LHIav-Kv.js +1 -0
  136. package/.output/public/_nuxt/MDhaRQq_.js +1 -0
  137. package/.output/public/_nuxt/NXY37IO62.js +1 -0
  138. package/.output/public/_nuxt/Rt2i6k7C2.js +1 -0
  139. package/.output/public/_nuxt/RuMLNeQE.js +1 -0
  140. package/.output/public/_nuxt/SoO2K-di.js +1 -0
  141. package/.output/public/_nuxt/Tk6TQZjU.js +1 -0
  142. package/.output/public/_nuxt/TownView.CC3t-Dte.css +1 -0
  143. package/.output/public/_nuxt/Tuz5LcLM.js +1 -0
  144. package/.output/public/_nuxt/WPwdj9pg.js +1 -0
  145. package/.output/public/_nuxt/Y4sMSPrS.js +1 -0
  146. package/.output/public/_nuxt/_id_.BQRWK7J2.css +1 -0
  147. package/.output/public/_nuxt/_id_.DSbZhSO1.css +1 -0
  148. package/.output/public/_nuxt/_wsId_.DCnKQQdY.css +1 -0
  149. package/.output/public/_nuxt/aQ1B7BZa2.js +2 -0
  150. package/.output/public/_nuxt/agents.D-JPovTZ.css +1 -0
  151. package/.output/public/_nuxt/aml.CeLxRzvI.css +1 -0
  152. package/.output/public/_nuxt/analysis.CqR_dfoW.css +1 -0
  153. package/.output/public/_nuxt/board.Bo35UR0e.css +1 -0
  154. package/.output/public/_nuxt/builds/latest.json +1 -1
  155. package/.output/public/_nuxt/builds/meta/0ae8cb0f-6ce5-4096-9692-9b1fc197b30d.json +1 -0
  156. package/.output/public/_nuxt/channel-templates.DgiL0L16.css +1 -0
  157. package/.output/public/_nuxt/cjRzSvAg2.js +31 -0
  158. package/.output/public/_nuxt/dJ7gK7C2.js +1 -0
  159. package/.output/public/_nuxt/daq.BUeQwO2J.css +1 -0
  160. package/.output/public/_nuxt/data.jRO2K9JI.css +1 -0
  161. package/.output/public/_nuxt/dcw.n8O0ptzV.css +1 -0
  162. package/.output/public/_nuxt/default.BzOcvmSE.css +1 -0
  163. package/.output/public/_nuxt/dq1HKoGD.js +1 -0
  164. package/.output/public/_nuxt/entry.CL2i0F8o.css +1 -0
  165. package/.output/public/_nuxt/h5gsh8E92.js +1 -0
  166. package/.output/public/_nuxt/jGxHnjW6.js +1 -0
  167. package/.output/public/_nuxt/kN3ZzR1-.js +1 -0
  168. package/.output/public/_nuxt/logs.BkJPbR_K.css +1 -0
  169. package/.output/public/_nuxt/monitor.D3yEqqrv.css +1 -0
  170. package/.output/public/_nuxt/n_Njdwii2.js +1 -0
  171. package/.output/public/_nuxt/operations.-l6u44Ar.css +1 -0
  172. package/.output/public/_nuxt/optimizer.B8gCbU1b.css +1 -0
  173. package/.output/public/_nuxt/pages.Cdpm_B-G.css +1 -0
  174. package/.output/public/_nuxt/plugins.D3bf5Gg3.css +1 -0
  175. package/.output/public/_nuxt/qRXa-PM22.js +1 -0
  176. package/.output/public/_nuxt/qoUdVDnC.js +19 -0
  177. package/.output/public/_nuxt/r1CpGsFp.js +1 -0
  178. package/.output/public/_nuxt/rJ7To74v2.js +1 -0
  179. package/.output/public/_nuxt/rdUE8Khf.js +14 -0
  180. package/.output/public/_nuxt/rxhDcyfF.js +1 -0
  181. package/.output/public/_nuxt/sBDZymdy2.js +1 -0
  182. package/.output/public/_nuxt/settings.CXju_jh-.css +1 -0
  183. package/.output/public/_nuxt/studio.CjmUr8P7.css +1 -0
  184. package/.output/public/_nuxt/teams.CLQaXno5.css +1 -0
  185. package/.output/public/_nuxt/tokens.BDSUWF-L.css +1 -0
  186. package/.output/public/_nuxt/tools.BwXFAb-X.css +1 -0
  187. package/.output/public/_nuxt/uu1wfdfR2.js +1 -0
  188. package/.output/public/_nuxt/vPcnBJsa2.js +1 -0
  189. package/.output/public/_nuxt/wR_w07322.js +1 -0
  190. package/.output/public/_nuxt/workshop.BBiFhXuM.css +1 -0
  191. package/.output/public/_nuxt/yLyz0-Yz.js +1 -0
  192. package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
  193. package/.output/server/chunks/_/RightOutlined.mjs +23 -0
  194. package/.output/server/chunks/_/RightOutlined.mjs.map +1 -0
  195. package/.output/server/chunks/_/SearchOutlined.mjs +1401 -0
  196. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -0
  197. package/.output/server/chunks/_/access.mjs +165 -0
  198. package/.output/server/chunks/_/access.mjs.map +1 -0
  199. package/.output/server/chunks/_/binding-authz.mjs +1 -1
  200. package/.output/server/chunks/_/catalog-view.mjs +177 -0
  201. package/.output/server/chunks/_/catalog-view.mjs.map +1 -0
  202. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  203. package/.output/server/chunks/_/chart-repo.mjs +147 -0
  204. package/.output/server/chunks/_/chart-repo.mjs.map +1 -0
  205. package/.output/server/chunks/_/dashboard-repo.mjs +127 -0
  206. package/.output/server/chunks/_/dashboard-repo.mjs.map +1 -0
  207. package/.output/server/chunks/_/data-export.mjs +228 -0
  208. package/.output/server/chunks/_/data-export.mjs.map +1 -0
  209. package/.output/server/chunks/_/data-query.mjs +162 -0
  210. package/.output/server/chunks/_/data-query.mjs.map +1 -0
  211. package/.output/server/chunks/_/dataset-reader.mjs +61 -0
  212. package/.output/server/chunks/_/dataset-reader.mjs.map +1 -0
  213. package/.output/server/chunks/_/eda-db.mjs +199 -0
  214. package/.output/server/chunks/_/eda-db.mjs.map +1 -0
  215. package/.output/server/chunks/_/eda-run.repo.mjs +163 -0
  216. package/.output/server/chunks/_/eda-run.repo.mjs.map +1 -0
  217. package/.output/server/chunks/_/entity.mjs +1 -1
  218. package/.output/server/chunks/_/features.mjs +282 -0
  219. package/.output/server/chunks/_/features.mjs.map +1 -0
  220. package/.output/server/chunks/_/golden.mjs +197 -0
  221. package/.output/server/chunks/_/golden.mjs.map +1 -0
  222. package/.output/server/chunks/_/host-bindings.mjs +2 -1
  223. package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
  224. package/.output/server/chunks/_/index.mjs +583 -0
  225. package/.output/server/chunks/_/index.mjs.map +1 -0
  226. package/.output/server/chunks/_/mes-console.mjs +188 -0
  227. package/.output/server/chunks/_/mes-console.mjs.map +1 -0
  228. package/.output/server/chunks/_/nitro.mjs +15817 -7728
  229. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  230. package/.output/server/chunks/_/ocap.mjs +145 -0
  231. package/.output/server/chunks/_/ocap.mjs.map +1 -0
  232. package/.output/server/chunks/_/rest-auth.mjs +44 -0
  233. package/.output/server/chunks/_/rest-auth.mjs.map +1 -0
  234. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  235. package/.output/server/chunks/_/spc.mjs +300 -0
  236. package/.output/server/chunks/_/spc.mjs.map +1 -0
  237. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +716 -0
  238. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +1 -0
  239. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +72 -0
  240. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +1 -0
  241. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +942 -0
  242. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +1 -0
  243. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +141 -0
  244. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +1 -0
  245. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +6489 -0
  246. package/.output/server/chunks/build/TownView-BWMDbosY.mjs.map +1 -0
  247. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +392 -0
  248. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +1 -0
  249. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +2045 -0
  250. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +1 -0
  251. package/.output/server/chunks/build/_wsId_-BNKrrV1H.mjs +14297 -0
  252. package/.output/server/chunks/build/_wsId_-BNKrrV1H.mjs.map +1 -0
  253. package/.output/server/chunks/build/agents-8tV9xL97.mjs +1078 -0
  254. package/.output/server/chunks/build/agents-8tV9xL97.mjs.map +1 -0
  255. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +263 -0
  256. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +1 -0
  257. package/.output/server/chunks/build/aml-BNTEDOsl.mjs +811 -0
  258. package/.output/server/chunks/build/aml-BNTEDOsl.mjs.map +1 -0
  259. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +533 -0
  260. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +1 -0
  261. package/.output/server/chunks/build/api-B4Om0mEc.mjs +1 -0
  262. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -1
  263. package/.output/server/chunks/build/api-BsAgXWxi.mjs +72 -0
  264. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
  265. package/.output/server/chunks/build/board-Dl2Ar22r.mjs +178 -0
  266. package/.output/server/chunks/build/board-Dl2Ar22r.mjs.map +1 -0
  267. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +953 -0
  268. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +1 -0
  269. package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs +942 -0
  270. package/.output/server/chunks/build/channel-templates-Iot9Y3vV.mjs.map +1 -0
  271. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +117 -0
  272. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -0
  273. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +439 -0
  274. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +1 -0
  275. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +43 -0
  276. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +1 -0
  277. package/.output/server/chunks/build/constants-HPHJvjne.mjs +1 -0
  278. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  279. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +1266 -0
  280. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +1 -0
  281. package/.output/server/chunks/build/data-D8uX1dnm.mjs +481 -0
  282. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
  283. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +505 -0
  284. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +1 -0
  285. package/.output/server/chunks/build/default-BeB88U7y.mjs +2347 -0
  286. package/.output/server/chunks/build/default-BeB88U7y.mjs.map +1 -0
  287. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +406 -0
  288. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +1 -0
  289. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +834 -0
  290. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +1 -0
  291. package/.output/server/chunks/build/dropdown-C6YH_kSO.mjs +540 -0
  292. package/.output/server/chunks/build/dropdown-C6YH_kSO.mjs.map +1 -0
  293. package/.output/server/chunks/build/dropdown-CjwsxU39.mjs +14 -0
  294. package/.output/server/chunks/build/dropdown-CjwsxU39.mjs.map +1 -0
  295. package/.output/server/chunks/build/es-Bxu10NJ2.mjs +43 -0
  296. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -0
  297. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +2448 -0
  298. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +1 -0
  299. package/.output/server/chunks/build/form-D_UpWPN4.mjs +4712 -0
  300. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +1 -0
  301. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +553 -0
  302. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +1 -0
  303. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +132 -0
  304. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +1 -0
  305. package/.output/server/chunks/build/input-GtPuSEgt.mjs +2181 -0
  306. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +1 -0
  307. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1120 -0
  308. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +1 -0
  309. package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs +427 -0
  310. package/.output/server/chunks/build/logs-BTfJQ6vQ.mjs.map +1 -0
  311. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +1952 -0
  312. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +1 -0
  313. package/.output/server/chunks/build/monitor-DvaR3yo8.mjs +2253 -0
  314. package/.output/server/chunks/build/monitor-DvaR3yo8.mjs.map +1 -0
  315. package/.output/server/chunks/build/operations-Cl8nVm9D.mjs +311 -0
  316. package/.output/server/chunks/build/operations-Cl8nVm9D.mjs.map +1 -0
  317. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs +200 -0
  318. package/.output/server/chunks/build/optimizer-BOtGWEtc.mjs.map +1 -0
  319. package/.output/server/chunks/build/pages-AFRP4-EL.mjs +542 -0
  320. package/.output/server/chunks/build/pages-AFRP4-EL.mjs.map +1 -0
  321. package/.output/server/chunks/build/pagination-KaIvHBzi.mjs +1346 -0
  322. package/.output/server/chunks/build/pagination-KaIvHBzi.mjs.map +1 -0
  323. package/.output/server/chunks/build/permissions-CVTfixZj.mjs +637 -0
  324. package/.output/server/chunks/build/permissions-CVTfixZj.mjs.map +1 -0
  325. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +272 -0
  326. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -0
  327. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +340 -0
  328. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +1 -0
  329. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +78 -0
  330. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +1 -0
  331. package/.output/server/chunks/build/schedules-BLhn2CLn.mjs +7172 -0
  332. package/.output/server/chunks/build/schedules-BLhn2CLn.mjs.map +1 -0
  333. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +341 -0
  334. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +1 -0
  335. package/.output/server/chunks/build/select--XFl7CtY.mjs +3923 -0
  336. package/.output/server/chunks/build/select--XFl7CtY.mjs.map +1 -0
  337. package/.output/server/chunks/build/settings-DIf_iYdu.mjs +1014 -0
  338. package/.output/server/chunks/build/settings-DIf_iYdu.mjs.map +1 -0
  339. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +110 -0
  340. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +1 -0
  341. package/.output/server/chunks/build/spin-C2cuvGth.mjs +1 -1
  342. package/.output/server/chunks/build/studio-cdoNCfyy.mjs +332 -0
  343. package/.output/server/chunks/build/studio-cdoNCfyy.mjs.map +1 -0
  344. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +377 -0
  345. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +1 -0
  346. package/.output/server/chunks/build/table-DIu_YCJN.mjs +7546 -0
  347. package/.output/server/chunks/build/table-DIu_YCJN.mjs.map +1 -0
  348. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +1924 -0
  349. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +1 -0
  350. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +1156 -0
  351. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +1 -0
  352. package/.output/server/chunks/build/teams-B2J6ouRY.mjs +1203 -0
  353. package/.output/server/chunks/build/teams-B2J6ouRY.mjs.map +1 -0
  354. package/.output/server/chunks/build/tokens-DFQGaN2n.mjs +1062 -0
  355. package/.output/server/chunks/build/tokens-DFQGaN2n.mjs.map +1 -0
  356. package/.output/server/chunks/build/tools-DWJFnU_t.mjs +487 -0
  357. package/.output/server/chunks/build/tools-DWJFnU_t.mjs.map +1 -0
  358. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +920 -0
  359. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +1 -0
  360. package/.output/server/chunks/build/town-B5aoiG98.mjs +133 -0
  361. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +1 -0
  362. package/.output/server/chunks/build/town-BV-hbwb5.mjs +2 -1
  363. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
  364. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  365. package/.output/server/chunks/build/types-DWqIeMRP.mjs +1 -0
  366. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
  367. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs +124 -0
  368. package/.output/server/chunks/build/useAgentHarnessOptions-DOrQHeBh.mjs.map +1 -0
  369. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs +77 -0
  370. package/.output/server/chunks/build/useAgentTemplateActions-CzlplRWh.mjs.map +1 -0
  371. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +1 -0
  372. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  373. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs +117 -0
  374. package/.output/server/chunks/build/useAgentTemplateForm-DQo1enf2.mjs.map +1 -0
  375. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs +133 -0
  376. package/.output/server/chunks/build/useAgentTemplatesCatalog-DP-iMmqz.mjs.map +1 -0
  377. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +1 -0
  378. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -1
  379. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +86 -0
  380. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -0
  381. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +194 -0
  382. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -0
  383. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +1 -0
  384. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -1
  385. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +1 -0
  386. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  387. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +267 -0
  388. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -0
  389. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +93 -0
  390. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -0
  391. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +86 -0
  392. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -0
  393. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +130 -0
  394. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -0
  395. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +129 -0
  396. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -0
  397. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +142 -0
  398. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -0
  399. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +70 -0
  400. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -0
  401. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +79 -0
  402. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -0
  403. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +176 -0
  404. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -0
  405. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +99 -0
  406. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +1 -0
  407. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +159 -0
  408. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -0
  409. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +222 -0
  410. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +1 -0
  411. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +1 -0
  412. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  413. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +136 -0
  414. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +1 -0
  415. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +395 -0
  416. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +1 -0
  417. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +187 -0
  418. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -0
  419. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +1 -0
  420. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  421. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs +153 -0
  422. package/.output/server/chunks/build/useDashboardData-B36wVWo2.mjs.map +1 -0
  423. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +219 -0
  424. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +1 -0
  425. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs +67 -0
  426. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +1 -0
  427. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +184 -0
  428. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +1 -0
  429. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +148 -0
  430. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +1 -0
  431. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +71 -0
  432. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +1 -0
  433. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs +79 -0
  434. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +1 -0
  435. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +137 -0
  436. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +1 -0
  437. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +104 -0
  438. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +1 -0
  439. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +121 -0
  440. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +1 -0
  441. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +93 -0
  442. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +1 -0
  443. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +98 -0
  444. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +1 -0
  445. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +88 -0
  446. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +1 -0
  447. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +258 -0
  448. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +1 -0
  449. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +452 -0
  450. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs.map +1 -0
  451. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +91 -0
  452. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +1 -0
  453. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +140 -0
  454. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +1 -0
  455. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +107 -0
  456. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -0
  457. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +55 -0
  458. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +1 -0
  459. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +1 -0
  460. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  461. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +88 -0
  462. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +1 -0
  463. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +150 -0
  464. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -0
  465. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +83 -0
  466. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +1 -0
  467. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +217 -0
  468. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -0
  469. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +135 -0
  470. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -0
  471. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +91 -0
  472. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -0
  473. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +1 -0
  474. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  475. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +195 -0
  476. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -0
  477. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +149 -0
  478. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +1 -0
  479. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +156 -0
  480. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -0
  481. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs +79 -0
  482. package/.output/server/chunks/build/useTeamActions-I_8QWp9w.mjs.map +1 -0
  483. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs +84 -0
  484. package/.output/server/chunks/build/useTeamAddMemberDialog-BLn4nTuy.mjs.map +1 -0
  485. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs +97 -0
  486. package/.output/server/chunks/build/useTeamCreateDialog-Bp5qKtpI.mjs.map +1 -0
  487. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs +80 -0
  488. package/.output/server/chunks/build/useTeamDeployDialog-DwIaz6Cx.mjs.map +1 -0
  489. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +1 -0
  490. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  491. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs +103 -0
  492. package/.output/server/chunks/build/useTeamPluginDialog-B932gZOI.mjs.map +1 -0
  493. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs +123 -0
  494. package/.output/server/chunks/build/useTeamsCatalog-DBwaLQBw.mjs.map +1 -0
  495. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +1 -0
  496. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  497. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +115 -0
  498. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -0
  499. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +87 -0
  500. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -0
  501. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +118 -0
  502. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -0
  503. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +92 -0
  504. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -0
  505. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +141 -0
  506. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -0
  507. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +138 -0
  508. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -0
  509. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs +119 -0
  510. package/.output/server/chunks/build/useWorkshopApi-CaSItJVq.mjs.map +1 -0
  511. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +1659 -0
  512. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +1 -0
  513. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +1 -0
  514. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -1
  515. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +92 -0
  516. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -0
  517. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +1 -0
  518. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  519. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +1 -0
  520. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -1
  521. package/.output/server/chunks/build/users-BWw0VCr9.mjs +569 -0
  522. package/.output/server/chunks/build/users-BWw0VCr9.mjs.map +1 -0
  523. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +546 -0
  524. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -0
  525. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  526. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  527. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  528. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  529. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  530. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  531. package/.output/server/chunks/routes/api/mcp/workshop.mjs +32 -9
  532. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  533. package/.output/server/chunks/routes/api/metrics.mjs +1 -0
  534. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  535. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
  536. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  537. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
  538. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  539. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -0
  540. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
  541. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
  542. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  543. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -0
  544. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
  545. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -2
  546. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
  547. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -0
  548. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
  549. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -0
  550. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  551. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
  552. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  553. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
  554. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  555. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
  556. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/system/index.post.mjs +1 -0
  558. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  559. package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -0
  560. package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
  561. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
  562. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  563. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
  564. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  565. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
  566. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  567. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
  568. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  569. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
  570. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  571. package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -0
  572. package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
  573. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  574. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  575. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
  576. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  577. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
  578. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  579. package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -0
  580. package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -1
  581. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
  582. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  583. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
  584. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  585. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
  586. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  587. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
  588. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  589. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
  590. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  591. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
  592. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  593. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -0
  594. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
  595. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
  596. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  597. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
  598. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  599. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
  600. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  601. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
  602. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  603. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
  604. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  605. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
  606. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  607. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
  608. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  609. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +34 -3
  610. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  611. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +3 -2
  612. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  613. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +2 -1
  614. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  615. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +2 -1
  616. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
  617. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +2 -1
  618. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
  619. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +2 -1
  620. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  621. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +2 -1
  622. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  623. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +2 -1
  624. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  625. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -1
  626. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  627. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +51 -15
  628. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
  629. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
  630. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  631. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
  632. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  633. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
  634. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  635. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
  636. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  637. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +2 -1
  638. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
  639. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +2 -1
  640. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
  641. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
  642. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  643. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +2 -1
  644. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
  645. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -0
  646. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
  647. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +2 -1
  648. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
  649. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +2 -1
  650. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
  651. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +2 -1
  652. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
  653. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +2 -1
  654. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
  655. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +2 -1
  656. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
  657. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -0
  658. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  659. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +2 -1
  660. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
  661. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +2 -1
  662. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  663. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +2 -1
  664. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
  665. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +2 -1
  666. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  667. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +2 -1
  668. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
  669. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +2 -1
  670. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
  671. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +2 -1
  672. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
  673. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +2 -1
  674. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
  675. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +2 -1
  676. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
  677. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +2 -1
  678. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
  679. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +2 -1
  680. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
  681. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +2 -1
  682. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
  683. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +2 -1
  684. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
  685. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +2 -1
  686. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
  687. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +3 -1
  688. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
  689. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +2 -1
  690. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  691. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +2 -1
  692. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
  693. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +2 -1
  694. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
  695. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +2 -1
  696. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
  697. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +2 -1
  698. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
  699. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +2 -1
  700. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs.map +1 -1
  701. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +2 -1
  702. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -1
  703. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +2 -1
  704. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -1
  705. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +2 -1
  706. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  707. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
  708. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  709. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
  710. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  711. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
  712. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  713. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -1
  714. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  715. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
  716. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  717. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -1
  718. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  719. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
  720. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  721. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
  722. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  723. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -2
  724. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  725. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
  726. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  727. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
  728. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  729. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
  730. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  731. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
  732. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  733. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -1
  734. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  735. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
  736. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  737. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
  738. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  739. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
  740. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  741. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
  742. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  743. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
  744. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  745. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
  746. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  747. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
  748. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  749. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +57 -0
  750. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs.map +1 -0
  751. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
  752. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  753. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
  754. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  755. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
  756. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  757. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -0
  758. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
  759. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +2 -1
  760. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
  761. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -0
  762. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
  763. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -0
  764. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
  765. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
  766. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  767. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
  768. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  769. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -1
  770. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  771. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -1
  772. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
  773. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
  774. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  775. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
  776. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  777. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +110 -0
  778. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs.map +1 -0
  779. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
  780. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  781. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -1
  782. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  783. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
  784. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  785. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -1
  786. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  787. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -1
  788. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
  789. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -0
  790. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
  791. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +36 -0
  792. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs.map +1 -0
  793. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +2 -1
  794. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
  795. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -0
  796. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
  797. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -0
  798. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
  799. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +2 -1
  800. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
  801. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -0
  802. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
  803. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
  804. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  805. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
  806. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  807. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -1
  808. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  809. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +53 -0
  810. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs.map +1 -0
  811. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -1
  812. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
  813. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -1
  814. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
  815. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
  816. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  817. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -1
  818. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  819. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
  820. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  821. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
  822. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  823. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +8 -7
  824. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  825. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +2 -1
  826. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  827. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +2 -1
  828. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
  829. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +2 -1
  830. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  831. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +2 -1
  832. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  833. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +187 -0
  834. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -0
  835. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -1
  836. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  837. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -1
  838. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  839. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -1
  840. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  841. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +2 -1
  842. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  843. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +2 -1
  844. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  845. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -1
  846. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  847. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +2 -1
  848. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  849. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +37 -0
  850. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs.map +1 -0
  851. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +45 -0
  852. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs.map +1 -0
  853. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +36 -0
  854. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs.map +1 -0
  855. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +30 -6
  856. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  857. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +35 -0
  858. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs.map +1 -0
  859. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -1
  860. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  861. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -1
  862. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  863. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +55 -0
  864. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs.map +1 -0
  865. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -1
  866. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  867. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -1
  868. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  869. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -1
  870. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  871. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -1
  872. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  873. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -1
  874. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
  875. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -1
  876. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  877. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -1
  878. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  879. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -1
  880. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  881. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -1
  882. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  883. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +16 -3
  884. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  885. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +16 -2
  886. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  887. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -1
  888. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  889. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -1
  890. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  891. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -1
  892. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  893. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -1
  894. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  895. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -1
  896. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  897. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -1
  898. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  899. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -1
  900. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  901. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -1
  902. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  903. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +18 -2
  904. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  905. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -1
  906. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  907. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +2 -1
  908. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
  909. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +2 -1
  910. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  911. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +2 -1
  912. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -1
  913. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -1
  914. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  915. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -1
  916. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  917. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -1
  918. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  919. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -1
  920. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  921. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -1
  922. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  923. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +18 -3
  924. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  925. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +2 -1
  926. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -1
  927. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +2 -1
  928. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
  929. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +2 -1
  930. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
  931. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -1
  932. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  933. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -1
  934. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  935. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -1
  936. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  937. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -1
  938. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  939. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +2 -1
  940. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  941. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -1
  942. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
  943. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +2 -1
  944. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
  945. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +2 -1
  946. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
  947. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -1
  948. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  949. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -1
  950. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  951. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +5 -3
  952. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  953. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +17 -3
  954. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  955. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +2 -1
  956. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  957. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +17 -3
  958. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  959. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +2 -1
  960. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  961. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +18 -3
  962. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  963. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +2 -1
  964. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  965. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -1
  966. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  967. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -1
  968. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  969. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -1
  970. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  971. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -1
  972. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  973. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -1
  974. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  975. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -1
  976. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  977. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -1
  978. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  979. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -1
  980. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  981. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -1
  982. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  983. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -1
  984. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  985. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +43 -0
  986. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs.map +1 -0
  987. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +37 -0
  988. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs.map +1 -0
  989. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +53 -0
  990. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs.map +1 -0
  991. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +123 -0
  992. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs.map +1 -0
  993. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +43 -0
  994. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs.map +1 -0
  995. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +38 -0
  996. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs.map +1 -0
  997. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +49 -0
  998. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs.map +1 -0
  999. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +35 -0
  1000. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs.map +1 -0
  1001. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +46 -0
  1002. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs.map +1 -0
  1003. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +43 -0
  1004. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs.map +1 -0
  1005. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +42 -0
  1006. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs.map +1 -0
  1007. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +38 -0
  1008. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs.map +1 -0
  1009. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +40 -0
  1010. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs.map +1 -0
  1011. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +52 -0
  1012. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs.map +1 -0
  1013. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +50 -0
  1014. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs.map +1 -0
  1015. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +46 -0
  1016. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs.map +1 -0
  1017. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +48 -0
  1018. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs.map +1 -0
  1019. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +139 -0
  1020. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs.map +1 -0
  1021. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +48 -0
  1022. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs.map +1 -0
  1023. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +49 -0
  1024. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs.map +1 -0
  1025. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +35 -0
  1026. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs.map +1 -0
  1027. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +48 -0
  1028. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs.map +1 -0
  1029. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +54 -0
  1030. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs.map +1 -0
  1031. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +47 -0
  1032. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs.map +1 -0
  1033. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +35 -0
  1034. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs.map +1 -0
  1035. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +48 -0
  1036. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs.map +1 -0
  1037. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +59 -0
  1038. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs.map +1 -0
  1039. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +54 -0
  1040. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs.map +1 -0
  1041. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +43 -0
  1042. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs.map +1 -0
  1043. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +50 -0
  1044. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs.map +1 -0
  1045. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +36 -0
  1046. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs.map +1 -0
  1047. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +37 -0
  1048. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs.map +1 -0
  1049. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +46 -0
  1050. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs.map +1 -0
  1051. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +104 -0
  1052. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs.map +1 -0
  1053. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +2 -1
  1054. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -1
  1055. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +2 -1
  1056. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -1
  1057. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -1
  1058. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  1059. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -1
  1060. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
  1061. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -1
  1062. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
  1063. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -1
  1064. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
  1065. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -1
  1066. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  1067. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
  1068. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  1069. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
  1070. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  1071. package/.output/server/chunks/routes/api/workshop/index.put.mjs +2 -1
  1072. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
  1073. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +32 -14
  1074. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  1075. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +2 -1
  1076. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  1077. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +21 -2
  1078. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  1079. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -0
  1080. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  1081. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -0
  1082. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  1083. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +6 -4
  1084. package/.output/server/chunks/routes/api/workshop/index15.get.mjs.map +1 -1
  1085. package/.output/server/chunks/routes/api/workshop/index16.get.mjs +31 -0
  1086. package/.output/server/chunks/routes/api/workshop/index16.get.mjs.map +1 -0
  1087. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +2 -1
  1088. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  1089. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
  1090. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  1091. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +2 -1
  1092. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  1093. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +2 -1
  1094. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  1095. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
  1096. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  1097. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +15 -3
  1098. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  1099. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
  1100. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  1101. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -1
  1102. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  1103. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -1
  1104. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  1105. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +27 -5
  1106. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  1107. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -1
  1108. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  1109. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
  1110. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  1111. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -1
  1112. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  1113. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
  1114. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  1115. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
  1116. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  1117. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -0
  1118. package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
  1119. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
  1120. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  1121. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
  1122. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  1123. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
  1124. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  1125. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +73 -0
  1126. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs.map +1 -0
  1127. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +33 -0
  1128. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs.map +1 -0
  1129. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +43 -0
  1130. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs.map +1 -0
  1131. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -0
  1132. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
  1133. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +35 -0
  1134. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs.map +1 -0
  1135. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +38 -0
  1136. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs.map +1 -0
  1137. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +58 -0
  1138. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs.map +1 -0
  1139. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +66 -0
  1140. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs.map +1 -0
  1141. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +60 -0
  1142. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs.map +1 -0
  1143. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +61 -0
  1144. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs.map +1 -0
  1145. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +52 -0
  1146. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs.map +1 -0
  1147. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +52 -0
  1148. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs.map +1 -0
  1149. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +41 -0
  1150. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs.map +1 -0
  1151. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -1
  1152. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  1153. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -1
  1154. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  1155. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
  1156. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  1157. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +167 -0
  1158. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs.map +1 -0
  1159. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +122 -0
  1160. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs.map +1 -0
  1161. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +119 -0
  1162. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs.map +1 -0
  1163. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +55 -0
  1164. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs.map +1 -0
  1165. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +48 -0
  1166. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs.map +1 -0
  1167. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +58 -0
  1168. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs.map +1 -0
  1169. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
  1170. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  1171. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -1
  1172. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  1173. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -1
  1174. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  1175. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
  1176. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  1177. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -0
  1178. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
  1179. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -0
  1180. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
  1181. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -0
  1182. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
  1183. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -0
  1184. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
  1185. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -0
  1186. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
  1187. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
  1188. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  1189. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
  1190. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  1191. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
  1192. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  1193. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -0
  1194. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
  1195. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -0
  1196. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -1
  1197. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
  1198. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  1199. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
  1200. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  1201. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -0
  1202. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
  1203. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
  1204. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  1205. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
  1206. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  1207. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -1
  1208. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  1209. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
  1210. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  1211. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
  1212. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  1213. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -1
  1214. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
  1215. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -1
  1216. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
  1217. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
  1218. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  1219. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
  1220. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  1221. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
  1222. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  1223. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
  1224. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  1225. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +36 -0
  1226. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs.map +1 -0
  1227. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +31 -0
  1228. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs.map +1 -0
  1229. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
  1230. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  1231. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
  1232. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  1233. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -2
  1234. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  1235. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
  1236. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  1237. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
  1238. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  1239. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
  1240. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  1241. package/.output/server/chunks/routes/renderer.mjs +3 -3
  1242. package/.output/server/chunks/virtual/entry.mjs +1760 -1055
  1243. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  1244. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  1245. package/.output/server/index.mjs +1 -0
  1246. package/.output/server/index.mjs.map +1 -1
  1247. package/.output/server/package.json +1 -1
  1248. package/README-zh.md +955 -948
  1249. package/README.md +981 -972
  1250. package/app/assets/css/main.css +346 -197
  1251. package/app/components/AppHeader.vue +294 -284
  1252. package/app/components/AppSidebar.vue +16 -18
  1253. package/app/components/AwChart.vue +29 -3
  1254. package/app/components/analysis/AnalysisEditModal.vue +8 -0
  1255. package/app/components/analysis/AnalysisPageHead.vue +18 -3
  1256. package/app/components/analysis/AnalysisTable.vue +59 -12
  1257. package/app/components/app-header/HeaderTools.vue +224 -208
  1258. package/app/components/app-header/TrailNav.vue +262 -261
  1259. package/app/components/app-header/UserChip.vue +13 -9
  1260. package/app/components/daq/DaqDetailHistoryCard.vue +13 -5
  1261. package/app/components/daq/DaqDetailLiveCard.vue +100 -92
  1262. package/app/components/daq/DaqDetailParamForm.vue +355 -350
  1263. package/app/components/dashboard/DashboardFleetPanel.vue +228 -228
  1264. package/app/components/dashboard/DashboardHarnessPanel.vue +149 -149
  1265. package/app/components/data/DataLedgerPanel.vue +253 -0
  1266. package/app/components/data/DataMesPanel.vue +279 -0
  1267. package/app/components/data/DataMirrorPanel.vue +602 -0
  1268. package/app/components/dcw/DcwAdoptCard.vue +90 -89
  1269. package/app/components/dcw/DcwDetailHead.vue +65 -65
  1270. package/app/components/dcw/DcwGatewayBar.vue +102 -94
  1271. package/app/components/dcw/DcwLineCard.vue +1 -0
  1272. package/app/components/dcw/DcwLineRunCard.vue +160 -158
  1273. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -0
  1274. package/app/components/dcw/DcwRecipePanel.vue +7 -0
  1275. package/app/components/logs/LogsEventTable.vue +77 -26
  1276. package/app/components/logs/LogsFilterCard.vue +22 -0
  1277. package/app/components/logs/LogsManualModal.vue +231 -231
  1278. package/app/components/monitor/MonitorStatGrid.vue +160 -165
  1279. package/app/components/operations/OperationsTimeline.vue +252 -215
  1280. package/app/components/settings/AppearancePane.vue +282 -282
  1281. package/app/components/settings/PluginsSection.vue +282 -280
  1282. package/app/components/settings/RuntimeFieldRow.vue +5 -3
  1283. package/app/components/settings/RuntimeGroupSection.vue +290 -290
  1284. package/app/components/settings/RuntimePane.vue +239 -235
  1285. package/app/components/settings/SystemPane.vue +85 -83
  1286. package/app/components/tokens/TokensAuthGate.vue +47 -47
  1287. package/app/components/tokens/TokensTable.vue +264 -227
  1288. package/app/components/workshop/ChannelSessionList.vue +378 -377
  1289. package/app/components/workshop/DaqNodeRow.vue +10 -7
  1290. package/app/components/workshop/NotificationCenter.vue +334 -334
  1291. package/app/components/workshop/agents/AgentTemplateTable.vue +285 -269
  1292. package/app/components/workshop/agents/AgentTemplateToolbar.vue +69 -67
  1293. package/app/components/workshop/blocks/ClusterStream.vue +2 -2
  1294. package/app/components/workshop/console/LineOperationsPanel.vue +9 -9
  1295. package/app/components/workshop/console/RightPane.vue +5 -2
  1296. package/app/components/workshop/console/Topbar.vue +304 -289
  1297. package/app/components/workshop/session-list/ChannelSettingsModal.vue +376 -371
  1298. package/app/components/workshop/session-list/ChannelToolSettings.vue +507 -0
  1299. package/app/components/workshop/teams/TeamCard.vue +183 -183
  1300. package/app/components/workshop/town/components/TownControlDock.vue +5 -0
  1301. package/app/components/workshop/transcript/TranscriptEmptyState.vue +153 -153
  1302. package/app/components/workshop/workbench/AuthGate.vue +3 -2
  1303. package/app/components/workshop/workbench/WorkbenchHead.vue +140 -129
  1304. package/app/components/workshop/workbench/WorkspaceCard.vue +199 -198
  1305. package/app/composables/useRouteMeta.ts +13 -1
  1306. package/app/composables/workshop/event-blocks/constants.ts +99 -94
  1307. package/app/composables/workshop/operation-events.ts +1 -1
  1308. package/app/composables/workshop/useLocalTime.ts +5 -2
  1309. package/app/composables/workshop/useOpsLog.ts +13 -2
  1310. package/app/composables/workshop/useWorkshopApi.ts +68 -1
  1311. package/app/layouts/default.vue +31 -6
  1312. package/app/pages/aml/styles.css +8 -7
  1313. package/app/pages/daq/[id].vue +140 -136
  1314. package/app/pages/daq/daq-page.css +688 -681
  1315. package/app/pages/data/index.vue +66 -0
  1316. package/app/pages/dcw/[id].vue +398 -380
  1317. package/app/pages/dcw/dcw-page.css +22 -21
  1318. package/app/pages/logs/composables/useLogsManual.ts +68 -63
  1319. package/app/pages/logs/composables/useLogsQuery.ts +28 -3
  1320. package/app/pages/logs/index.vue +2 -0
  1321. package/app/pages/monitor/composables/useMonitorColumns.ts +69 -69
  1322. package/app/pages/operations/composables/useOperationsFeed.ts +139 -137
  1323. package/app/pages/optimizer/api.ts +21 -0
  1324. package/app/pages/optimizer/index.vue +669 -0
  1325. package/app/pages/plugins/index.vue +347 -318
  1326. package/app/pages/settings.vue +170 -168
  1327. package/app/pages/studio/board.vue +388 -0
  1328. package/app/pages/studio/index.vue +828 -0
  1329. package/app/pages/tools/index.vue +401 -0
  1330. package/app/pages/workshop/channel-templates.vue +558 -556
  1331. package/app/pages/workshop/index.vue +55 -0
  1332. package/app/pages/workshop/teams.vue +237 -233
  1333. package/app/stores/route-trail.ts +4 -2
  1334. package/app/utils/chart-trend.ts +97 -0
  1335. package/cli/commands/plugin.mjs +322 -246
  1336. package/config.yml +193 -180
  1337. package/docs/aml.md +1 -1
  1338. package/docs/cli.en.md +447 -447
  1339. package/docs/cli.md +412 -412
  1340. package/docs/full-test-plan.md +1 -1
  1341. package/docs/mcp.md +122 -108
  1342. package/docs/plugins.en.md +22 -2
  1343. package/docs/plugins.md +22 -2
  1344. package/docs/sdk.en.md +1 -1
  1345. package/docs/sdk.md +1 -1
  1346. package/i18n/dicts/channelTools.json +39 -0
  1347. package/i18n/dicts/toolsPage.json +34 -0
  1348. package/i18n/locales/en.ts +353 -14
  1349. package/i18n/locales/zh-CN.ts +352 -14
  1350. package/nuxt.config.ts +14 -0
  1351. package/package.json +187 -181
  1352. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -0
  1353. package/scripts/_i18n-verify-keys.mjs +52 -50
  1354. package/scripts/acceptance-optimizer-process-model.mjs +9 -0
  1355. package/scripts/acceptance-optimizer-process-model.ts +863 -0
  1356. package/scripts/agent-binding-matrix-e2e.mjs +240 -0
  1357. package/scripts/agent-daq-isolation-e2e.mjs +91 -0
  1358. package/scripts/api-contract-smoke.mjs +126 -0
  1359. package/scripts/ask-hitl-e2e.mjs +96 -0
  1360. package/scripts/channel-interaction-smoke.mjs +80 -0
  1361. package/scripts/data-studio-e2e.mjs +332 -0
  1362. package/scripts/data-studio-ui-e2e.mjs +163 -0
  1363. package/scripts/dev-mes-simulator.mjs +106 -17
  1364. package/scripts/e2e-hitl-live.mjs +41 -5
  1365. package/scripts/e2e-injection-recipe-closedloop.mjs +203 -0
  1366. package/scripts/e2e-line-governance.mjs +352 -0
  1367. package/scripts/e2e-optimizer-live.mjs +1342 -0
  1368. package/scripts/e2e-optimizer-plc.mjs +222 -0
  1369. package/scripts/e2e-optimizer-restart.mjs +125 -0
  1370. package/scripts/e2e-plc-excite.mjs +75 -0
  1371. package/scripts/e2e-simulator-optimizer.mjs +262 -0
  1372. package/scripts/e2e-tool-surface-multiagent.mjs +353 -0
  1373. package/scripts/eda-demo-report-patch.mjs +47 -0
  1374. package/scripts/eda-live-demo.mjs +398 -0
  1375. package/scripts/full-stack-shots.mjs +145 -0
  1376. package/scripts/full-tool-injection-harness-e2e.mjs +214 -0
  1377. package/scripts/harness-matrix-e2e.mjs +159 -0
  1378. package/scripts/harness-team-line-e2e.mjs +224 -0
  1379. package/scripts/hitl-reject-e2e.mjs +131 -0
  1380. package/scripts/hitl-ui-two-harness-demo.mjs +243 -0
  1381. package/scripts/idd-rag-aml-regression.mjs +348 -0
  1382. package/scripts/idd-rag-aml-ui-demo.mjs +93 -0
  1383. package/scripts/line-log-smoke.mjs +260 -0
  1384. package/scripts/live-aml-optloop.mjs +161 -118
  1385. package/scripts/mes-agent-integration-e2e.mjs +361 -0
  1386. package/scripts/onboarding/forge-channel.mjs +9 -3
  1387. package/scripts/onboarding/onboard.mjs +104 -10
  1388. package/scripts/onboarding/provision-line.mjs +38 -15
  1389. package/scripts/onboarding/sim-twin.mjs +50 -13
  1390. package/scripts/onboarding/test-connection.mjs +8 -2
  1391. package/scripts/onboarding/verify-line.mjs +72 -9
  1392. package/scripts/ops-plugins-e2e.mjs +85 -0
  1393. package/scripts/real-injection-closed-loop.mjs +8 -0
  1394. package/scripts/run-quality-gates.mjs +58 -0
  1395. package/scripts/scenario-suite-setup.mjs +337 -0
  1396. package/scripts/scenario-suite-stability.mjs +144 -0
  1397. package/scripts/team-coordination-e2e.mjs +96 -0
  1398. package/scripts/tool-face-batch-identity-e2e.mjs +222 -0
  1399. package/scripts/tool-references-migrate.ts +82 -0
  1400. package/scripts/tool-registry-e2e.mjs +547 -0
  1401. package/scripts/ui/audit-layout.mjs +324 -301
  1402. package/scripts/ui/lib.mjs +3 -0
  1403. package/scripts/ui/optimizer-ui-playwright.py +152 -0
  1404. package/scripts/ui/system-e2e-playwright.py +460 -0
  1405. package/sdk/client.mjs +8 -1
  1406. package/sdk/context.mjs +32 -4
  1407. package/sdk/examples/line-sentinel/client.mjs +55 -38
  1408. package/sdk/examples/ops-notifier/client.mjs +29 -25
  1409. package/sdk/examples/sample-insight/client.mjs +25 -25
  1410. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +1 -0
  1411. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +41 -0
  1412. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +51 -0
  1413. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +14 -0
  1414. package/server/api/mcp/workshop.ts +37 -10
  1415. package/server/api/workshop/agent-tools/approvals/[id]/decide.post.ts +124 -90
  1416. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +3 -3
  1417. package/server/api/workshop/agent-tools/list.get.ts +60 -15
  1418. package/server/api/workshop/aml/models/[id].delete.ts +38 -35
  1419. package/server/api/workshop/channels/[id]/agents/[agentId]/rotate-token.post.ts +45 -0
  1420. package/server/api/workshop/channels/[id]/tools/index.get.ts +17 -0
  1421. package/server/api/workshop/channels/[id]/tools/index.put.ts +117 -0
  1422. package/server/api/workshop/channels/[id]/tools/reset.post.ts +39 -0
  1423. package/server/api/workshop/daq/[id]/ingest.post.ts +192 -0
  1424. package/server/api/workshop/daq/export/[id].get.ts +17 -0
  1425. package/server/api/workshop/daq/export/index.get.ts +15 -0
  1426. package/server/api/workshop/daq/export/index.post.ts +42 -0
  1427. package/server/api/workshop/daq/export-file.get.ts +26 -0
  1428. package/server/api/workshop/daq/query.get.ts +41 -0
  1429. package/server/api/workshop/dcw/[id].delete.ts +10 -2
  1430. package/server/api/workshop/dcw/[id].patch.ts +10 -0
  1431. package/server/api/workshop/dcw/index.post.ts +9 -3
  1432. package/server/api/workshop/dcw/lines/[id].patch.ts +13 -2
  1433. package/server/api/workshop/dcw/recipes/[id]/apply.post.ts +2 -1
  1434. package/server/api/workshop/dcw/recipes/[id]/mark-good.post.ts +15 -2
  1435. package/server/api/workshop/dcw/recipes/[id]/rollback-good.post.ts +15 -2
  1436. package/server/api/workshop/dcw/recipes/[id].delete.ts +12 -1
  1437. package/server/api/workshop/dcw/recipes/index.post.ts +11 -0
  1438. package/server/api/workshop/eda/charts/[id].delete.ts +23 -0
  1439. package/server/api/workshop/eda/charts/[id].get.ts +16 -0
  1440. package/server/api/workshop/eda/charts/[id].patch.ts +33 -0
  1441. package/server/api/workshop/eda/charts/index.get.ts +19 -0
  1442. package/server/api/workshop/eda/charts/index.post.ts +33 -0
  1443. package/server/api/workshop/eda/commonality.get.ts +27 -0
  1444. package/server/api/workshop/eda/dashboards/[id].delete.ts +22 -0
  1445. package/server/api/workshop/eda/dashboards/[id].get.ts +17 -0
  1446. package/server/api/workshop/eda/dashboards/[id].patch.ts +28 -0
  1447. package/server/api/workshop/eda/dashboards/index.get.ts +30 -0
  1448. package/server/api/workshop/eda/dashboards/index.post.ts +25 -0
  1449. package/server/api/workshop/eda/derived/index.post.ts +41 -0
  1450. package/server/api/workshop/eda/features/index.get.ts +29 -0
  1451. package/server/api/workshop/eda/features/jobs.get.ts +13 -0
  1452. package/server/api/workshop/eda/features/run.post.ts +28 -0
  1453. package/server/api/workshop/eda/golden/[id].delete.ts +22 -0
  1454. package/server/api/workshop/eda/golden/deviation.get.ts +21 -0
  1455. package/server/api/workshop/eda/golden/index.get.ts +21 -0
  1456. package/server/api/workshop/eda/golden/index.post.ts +29 -0
  1457. package/server/api/workshop/eda/golden/single.get.ts +16 -0
  1458. package/server/api/workshop/eda/ocap/[id].get.ts +39 -0
  1459. package/server/api/workshop/eda/ocap/[id].patch.ts +33 -0
  1460. package/server/api/workshop/eda/ocap/index.get.ts +13 -0
  1461. package/server/api/workshop/eda/ocap/index.post.ts +27 -0
  1462. package/server/api/workshop/eda/run-segments/index.get.ts +39 -0
  1463. package/server/api/workshop/eda/run-segments/index.post.ts +30 -0
  1464. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -0
  1465. package/server/api/workshop/eda/runs.get.ts +31 -0
  1466. package/server/api/workshop/eda/spc/[id]/recompute.post.ts +15 -0
  1467. package/server/api/workshop/eda/spc/[id].delete.ts +16 -0
  1468. package/server/api/workshop/eda/spc/[id].get.ts +27 -0
  1469. package/server/api/workshop/eda/spc/index.get.ts +14 -0
  1470. package/server/api/workshop/eda/spc/index.post.ts +28 -0
  1471. package/server/api/workshop/eda/vm/predict.post.ts +97 -0
  1472. package/server/api/workshop/mes/datasets.get.ts +54 -0
  1473. package/server/api/workshop/mes/points.get.ts +13 -0
  1474. package/server/api/workshop/mes/preview.post.ts +25 -0
  1475. package/server/api/workshop/ops-logs/index.get.ts +42 -17
  1476. package/server/api/workshop/ops-logs/index.post.ts +36 -6
  1477. package/server/api/workshop/optimization/bindings/[id].delete.ts +12 -0
  1478. package/server/api/workshop/optimization/bindings/index.ts +47 -0
  1479. package/server/api/workshop/optimization/capabilities.get.ts +19 -0
  1480. package/server/api/workshop/optimization/profiles/[id]/publish.post.ts +41 -0
  1481. package/server/api/workshop/optimization/profiles/index.ts +41 -0
  1482. package/server/api/workshop/optimization/recommendations/[id]/crosscheck.post.ts +29 -0
  1483. package/server/api/workshop/optimization/recommendations/[id]/dispatch.post.ts +33 -0
  1484. package/server/api/workshop/optimization/runs/index.get.ts +41 -0
  1485. package/server/api/workshop/optimization/solve.post.ts +23 -0
  1486. package/server/api/workshop/plugins/index.get.ts +36 -17
  1487. package/server/api/workshop/process-model/datasets.post.ts +26 -0
  1488. package/server/api/workshop/process-model/eligibility.ts +40 -0
  1489. package/server/api/workshop/process-model/experiments.ts +43 -0
  1490. package/server/api/workshop/process-model/specs/[id]/publish.post.ts +22 -0
  1491. package/server/api/workshop/process-model/specs/index.ts +34 -0
  1492. package/server/api/workshop/process-model/train.post.ts +36 -0
  1493. package/server/api/workshop/tools/[name].get.ts +15 -0
  1494. package/server/api/workshop/tools/index.get.ts +12 -0
  1495. package/server/api/workshop/tools/sync.post.ts +12 -0
  1496. package/server/harness/aw-mcp-bridge.mjs +54 -5
  1497. package/server/harness/aw-mcp-signature.mjs +20 -0
  1498. package/server/plugins/aw-plugins.ts +7 -1
  1499. package/server/plugins/workshop.ts +24 -0
  1500. package/server/plugins-builtin/diag-bridge/client.mjs +239 -230
  1501. package/server/plugins-builtin/diag-bridge/host/diagnosis.mjs +82 -75
  1502. package/server/plugins-builtin/diag-bridge/host/helpers.mjs +129 -126
  1503. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +457 -420
  1504. package/server/plugins-builtin/diag-bridge/host/sweep.mjs +191 -106
  1505. package/server/plugins-builtin/rag-bridge/client.mjs +2 -0
  1506. package/server/plugins-builtin/rag-bridge/index.mjs +166 -24
  1507. package/server/plugins-builtin/serial-bridge/client.mjs +1 -0
  1508. package/server/services/workshop/agents/adapters/omp-rpc-client/types.ts +121 -115
  1509. package/server/services/workshop/agents/hitl-decision/answers.ts +5 -0
  1510. package/server/services/workshop/agents/hitl-decision/dispatcher.ts +112 -94
  1511. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +117 -25
  1512. package/server/services/workshop/agents/host-tool-bridge/description-budget.ts +34 -0
  1513. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +372 -246
  1514. package/server/services/workshop/agents/host-tool-bridge/index.ts +16 -15
  1515. package/server/services/workshop/agents/host-tool-bridge/optimizer-gate.ts +72 -0
  1516. package/server/services/workshop/agents/host-tool-bridge/per-agent.ts +149 -0
  1517. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +111 -96
  1518. package/server/services/workshop/agents/industrial/aml-job-tools.ts +20 -6
  1519. package/server/services/workshop/agents/industrial/audit-query.ts +41 -5
  1520. package/server/services/workshop/agents/industrial/daq-export.ts +74 -13
  1521. package/server/services/workshop/agents/industrial/daq-tools.ts +106 -14
  1522. package/server/services/workshop/agents/industrial/dcw-tools.ts +258 -212
  1523. package/server/services/workshop/agents/industrial/grant-guard.ts +50 -7
  1524. package/server/services/workshop/agents/industrial/index.ts +3 -3
  1525. package/server/services/workshop/agents/industrial/line-tools.ts +142 -8
  1526. package/server/services/workshop/agents/industrial/manual-approval.ts +57 -46
  1527. package/server/services/workshop/agents/industrial/mes-tools.ts +31 -6
  1528. package/server/services/workshop/agents/industrial/ops-tools.ts +533 -60
  1529. package/server/services/workshop/agents/industrial/optimization-tools.ts +169 -168
  1530. package/server/services/workshop/agents/industrial/optimizer-tools.ts +193 -0
  1531. package/server/services/workshop/agents/industrial/recipe-gate.ts +36 -1
  1532. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +12 -6
  1533. package/server/services/workshop/agents/industrial/resource-paging.ts +31 -0
  1534. package/server/services/workshop/agents/industrial/resources-tools.ts +79 -0
  1535. package/server/services/workshop/agents/industrial/tool-verify-legacy-specs.ts +73 -0
  1536. package/server/services/workshop/agents/industrial/tool-verify.ts +386 -373
  1537. package/server/services/workshop/agents/mock-agent.ts +3 -1
  1538. package/server/services/workshop/agents/node-delegation.ts +10 -1
  1539. package/server/services/workshop/agents/omp-agent/client.ts +2 -2
  1540. package/server/services/workshop/agents/omp-agent/lifecycle.ts +2 -2
  1541. package/server/services/workshop/agents/pi-agent.ts +3 -2
  1542. package/server/services/workshop/agents/plugin-governance.ts +148 -0
  1543. package/server/services/workshop/agents/plugin-tools.ts +15 -0
  1544. package/server/services/workshop/agents/registry.ts +21 -1
  1545. package/server/services/workshop/agents/tool-approvals.ts +31 -5
  1546. package/server/services/workshop/agents/tool-classes.ts +2 -0
  1547. package/server/services/workshop/agents/tool-reference-kinds.ts +2 -0
  1548. package/server/services/workshop/agents/tool-reference-spec.ts +114 -0
  1549. package/server/services/workshop/aml/aml.repo.ts +73 -18
  1550. package/server/services/workshop/aml/dataset-builder.ts +195 -25
  1551. package/server/services/workshop/aml/env-lease.ts +148 -0
  1552. package/server/services/workshop/aml/env-manager.ts +6 -1
  1553. package/server/services/workshop/aml/gates.ts +163 -121
  1554. package/server/services/workshop/aml/job-orchestrator/stages.ts +36 -15
  1555. package/server/services/workshop/aml/job-orchestrator/start-job.ts +44 -0
  1556. package/server/services/workshop/aml/job-orchestrator/submit.ts +6 -0
  1557. package/server/services/workshop/aml/model-references.ts +83 -0
  1558. package/server/services/workshop/aml/model-registry.ts +183 -11
  1559. package/server/services/workshop/aml/predictor.ts +147 -5
  1560. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1561. package/server/services/workshop/aml/python/requirements.txt +3 -0
  1562. package/server/services/workshop/aml/python-runtime.ts +39 -4
  1563. package/server/services/workshop/aml/retention.ts +104 -98
  1564. package/server/services/workshop/aml/spec.ts +64 -63
  1565. package/server/services/workshop/aml/twin/provider-contracts.ts +45 -1
  1566. package/server/services/workshop/aml/twin/provider-loader.ts +13 -4
  1567. package/server/services/workshop/aml/twin/provider-registry.ts +145 -2
  1568. package/server/services/workshop/daq/daq-controller/crud.ts +2 -0
  1569. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +14 -2
  1570. package/server/services/workshop/daq/daq-controller/types.ts +71 -68
  1571. package/server/services/workshop/daq/daq-node.ts +15 -0
  1572. package/server/services/workshop/daq/daq-templates.ts +16 -2
  1573. package/server/services/workshop/daq/ingest-policy.ts +43 -0
  1574. package/server/services/workshop/daq/storage/sqlite.adapter.ts +78 -17
  1575. package/server/services/workshop/daq/storage/timescale.adapter.ts +37 -14
  1576. package/server/services/workshop/daq/storage/tsdb-port.ts +36 -0
  1577. package/server/services/workshop/db/channel-agent.repo.ts +58 -3
  1578. package/server/services/workshop/db/database/migrations.ts +101 -0
  1579. package/server/services/workshop/db/database/open.ts +11 -1
  1580. package/server/services/workshop/db/database/schema.ts +243 -3
  1581. package/server/services/workshop/db/ops.repo.ts +43 -8
  1582. package/server/services/workshop/db/retention.ts +9 -0
  1583. package/server/services/workshop/db/schema.sql +38 -0
  1584. package/server/services/workshop/db/tool-registry.repo.ts +399 -0
  1585. package/server/services/workshop/dcw/dcw-controller/lines.ts +11 -0
  1586. package/server/services/workshop/dcw/dcw-controller/recipes.ts +45 -1
  1587. package/server/services/workshop/dcw/dcw-controller/write.ts +4 -0
  1588. package/server/services/workshop/dcw/dcw-line.repo.ts +3 -0
  1589. package/server/services/workshop/dcw/dcw-recipe.repo.ts +29 -0
  1590. package/server/services/workshop/dcw/drivers/mes-rest.ts +158 -11
  1591. package/server/services/workshop/dcw/drivers/shared.ts +35 -1
  1592. package/server/services/workshop/dcw/line-run.ts +2 -0
  1593. package/server/services/workshop/eda/chart-repo.ts +177 -0
  1594. package/server/services/workshop/eda/commonality.ts +106 -0
  1595. package/server/services/workshop/eda/dashboard-repo.ts +166 -0
  1596. package/server/services/workshop/eda/data-export.ts +274 -0
  1597. package/server/services/workshop/eda/data-query.ts +231 -0
  1598. package/server/services/workshop/eda/derived.ts +110 -0
  1599. package/server/services/workshop/eda/eda-db.ts +222 -0
  1600. package/server/services/workshop/eda/eda-run.repo.ts +200 -0
  1601. package/server/services/workshop/eda/features.ts +291 -0
  1602. package/server/services/workshop/eda/golden.ts +227 -0
  1603. package/server/services/workshop/eda/mes-console.ts +219 -0
  1604. package/server/services/workshop/eda/ocap.ts +182 -0
  1605. package/server/services/workshop/eda/redact.ts +28 -0
  1606. package/server/services/workshop/eda/spc-math.ts +144 -0
  1607. package/server/services/workshop/eda/spc.ts +225 -0
  1608. package/server/services/workshop/mes/mes-controller.ts +515 -18
  1609. package/server/services/workshop/mes/mes-datasets.ts +85 -7
  1610. package/server/services/workshop/ops/ops.ts +27 -14
  1611. package/server/services/workshop/optimization/access.ts +210 -0
  1612. package/server/services/workshop/optimization/binding.repo.ts +128 -0
  1613. package/server/services/workshop/optimization/binding.service.ts +128 -0
  1614. package/server/services/workshop/optimization/contracts.ts +346 -0
  1615. package/server/services/workshop/optimization/crosscheck.service.ts +351 -0
  1616. package/server/services/workshop/optimization/dispatch.service.ts +446 -0
  1617. package/server/services/workshop/optimization/manager.ts +315 -0
  1618. package/server/services/workshop/optimization/problem-builder.ts +359 -0
  1619. package/server/services/workshop/optimization/profile.repo.ts +158 -0
  1620. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
  1621. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
  1622. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
  1623. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1624. package/server/services/workshop/optimization/python/probe.py +24 -0
  1625. package/server/services/workshop/optimization/python/problems.py +347 -0
  1626. package/server/services/workshop/optimization/python/worker.py +119 -0
  1627. package/server/services/workshop/optimization/recommendation.service.ts +100 -0
  1628. package/server/services/workshop/optimization/rest-auth.ts +61 -0
  1629. package/server/services/workshop/optimization/run.repo.ts +158 -0
  1630. package/server/services/workshop/optimization/templates.ts +3 -0
  1631. package/server/services/workshop/optimization/uq-evidence.ts +144 -0
  1632. package/server/services/workshop/optimization/worker-client.ts +358 -0
  1633. package/server/services/workshop/plugins/host/services.mjs +77 -68
  1634. package/server/services/workshop/process-model/artifact-validation.ts +19 -0
  1635. package/server/services/workshop/process-model/conditions.ts +43 -0
  1636. package/server/services/workshop/process-model/context-segments.repo.ts +100 -0
  1637. package/server/services/workshop/process-model/context.ts +202 -0
  1638. package/server/services/workshop/process-model/contracts.ts +344 -0
  1639. package/server/services/workshop/process-model/dataset.ts +144 -0
  1640. package/server/services/workshop/process-model/eligibility-service.ts +83 -0
  1641. package/server/services/workshop/process-model/eligibility.ts +305 -0
  1642. package/server/services/workshop/process-model/experiment.ts +100 -0
  1643. package/server/services/workshop/process-model/spec.repo.ts +127 -0
  1644. package/server/services/workshop/process-model/spec.ts +302 -0
  1645. package/server/services/workshop/process-model/trainers/dataset-reader.ts +80 -0
  1646. package/server/services/workshop/process-model/trainers/index.ts +150 -0
  1647. package/server/services/workshop/process-model/trainers/linear-arx.ts +325 -0
  1648. package/server/services/workshop/process-model/trainers/static-response.ts +211 -0
  1649. package/server/services/workshop/process-model/watermark.ts +18 -0
  1650. package/server/services/workshop/prompts/loader.ts +7 -0
  1651. package/server/services/workshop/runtime/agent-runtime/message.ts +23 -8
  1652. package/server/services/workshop/runtime/manager/admin-channel.ts +82 -1
  1653. package/server/services/workshop/runtime/manager/host-tools.ts +95 -9
  1654. package/server/services/workshop/runtime/manager/types.ts +2 -2
  1655. package/server/services/workshop/runtime/permission-scope.ts +5 -1
  1656. package/server/services/workshop/runtime/scheduler-loop/rules.ts +4 -1
  1657. package/server/services/workshop/runtime/task-engine/transition.ts +14 -0
  1658. package/server/services/workshop/settings.ts +33 -0
  1659. package/server/services/workshop/tools/catalog-view.ts +259 -0
  1660. package/server/services/workshop/tools/policy.ts +150 -0
  1661. package/server/services/workshop/tools/registry.ts +304 -0
  1662. package/server/services/workshop/tools/types.ts +19 -0
  1663. package/server/services/workshop/types/task.ts +17 -0
  1664. package/shared/config/schema.json +14 -5
  1665. package/shared/daq-protocol.ts +39 -5
  1666. package/shared/dcw-protocol/line.ts +9 -0
  1667. package/shared/dcw-protocol/recipe.ts +2 -0
  1668. package/shared/units.ts +50 -0
  1669. package/shared/workshop-protocol.ts +3 -0
  1670. package/.output/public/_nuxt/1NcBJMyL.js +0 -14
  1671. package/.output/public/_nuxt/2pU5BiaQ2.js +0 -1
  1672. package/.output/public/_nuxt/4RTUlYvj.js +0 -1
  1673. package/.output/public/_nuxt/8oRmGaAV.js +0 -1
  1674. package/.output/public/_nuxt/AuthGate.Cvsc4atp.css +0 -1
  1675. package/.output/public/_nuxt/B8cnjDtt.js +0 -1
  1676. package/.output/public/_nuxt/BDC8YDyc.js +0 -1
  1677. package/.output/public/_nuxt/BFVf8HLR.js +0 -1
  1678. package/.output/public/_nuxt/BG7XSX-S.js +0 -1
  1679. package/.output/public/_nuxt/BH30ZaLl2.js +0 -1
  1680. package/.output/public/_nuxt/BMlesJth.js +0 -209
  1681. package/.output/public/_nuxt/BNl_jGa12.js +0 -1
  1682. package/.output/public/_nuxt/BSG-4Ecg2.js +0 -1
  1683. package/.output/public/_nuxt/BTXdYngG.js +0 -1
  1684. package/.output/public/_nuxt/BU7WuuKh2.js +0 -1
  1685. package/.output/public/_nuxt/BVH9j8dQ2.js +0 -1
  1686. package/.output/public/_nuxt/BXbKTAwC2.js +0 -1
  1687. package/.output/public/_nuxt/B_6yBa_Z.js +0 -1
  1688. package/.output/public/_nuxt/B_ic601Y.js +0 -1
  1689. package/.output/public/_nuxt/Bb4REys92.js +0 -1
  1690. package/.output/public/_nuxt/Bd85nb9X2.js +0 -1
  1691. package/.output/public/_nuxt/BegV7-FE2.js +0 -1
  1692. package/.output/public/_nuxt/BhllzW3K2.js +0 -1
  1693. package/.output/public/_nuxt/Bj7BcqHn.js +0 -1
  1694. package/.output/public/_nuxt/BkO2MZZU.js +0 -1
  1695. package/.output/public/_nuxt/Bnf04goH.js +0 -1
  1696. package/.output/public/_nuxt/Br3AySNQ.js +0 -1
  1697. package/.output/public/_nuxt/BrRXGr472.js +0 -1
  1698. package/.output/public/_nuxt/BtBgrPNT.js +0 -1
  1699. package/.output/public/_nuxt/BtDBBofS.js +0 -1
  1700. package/.output/public/_nuxt/ByvqxkcN.js +0 -1
  1701. package/.output/public/_nuxt/C4sQKuhk.js +0 -1
  1702. package/.output/public/_nuxt/C5MPzgon2.js +0 -1
  1703. package/.output/public/_nuxt/C8uaVABF.js +0 -1
  1704. package/.output/public/_nuxt/C98jxVaK.js +0 -1
  1705. package/.output/public/_nuxt/CGChCy-w2.js +0 -1
  1706. package/.output/public/_nuxt/CHyzK5m5.js +0 -1
  1707. package/.output/public/_nuxt/CI5sliIF2.js +0 -1
  1708. package/.output/public/_nuxt/CI8awYVQ2.js +0 -1
  1709. package/.output/public/_nuxt/CIduggmC.js +0 -1
  1710. package/.output/public/_nuxt/CJPIo2E7.js +0 -2
  1711. package/.output/public/_nuxt/CK2ts9sD.js +0 -1
  1712. package/.output/public/_nuxt/CPZKwmLQ.js +0 -1
  1713. package/.output/public/_nuxt/CUjdqsjC2.js +0 -1
  1714. package/.output/public/_nuxt/CXzfXC5M.js +0 -1
  1715. package/.output/public/_nuxt/CaBVMdqG2.js +0 -1
  1716. package/.output/public/_nuxt/CcLFZjCI2.js +0 -7
  1717. package/.output/public/_nuxt/CfIGBe_4.js +0 -75
  1718. package/.output/public/_nuxt/Cfy5Jn8v2.js +0 -21
  1719. package/.output/public/_nuxt/ChN5v-i22.js +0 -1
  1720. package/.output/public/_nuxt/Ci5kuU1q.js +0 -1
  1721. package/.output/public/_nuxt/CiyTTgqr.js +0 -106
  1722. package/.output/public/_nuxt/Ckafrjnw.js +0 -1
  1723. package/.output/public/_nuxt/ClEbKcuS.js +0 -1
  1724. package/.output/public/_nuxt/Cmiz_VOb2.js +0 -47
  1725. package/.output/public/_nuxt/CnF6dXcZ2.js +0 -1
  1726. package/.output/public/_nuxt/CoTm7jd3.js +0 -28
  1727. package/.output/public/_nuxt/CsN8RHJ02.js +0 -17
  1728. package/.output/public/_nuxt/Cst8yEet.js +0 -1
  1729. package/.output/public/_nuxt/CxLxiOGV.js +0 -1
  1730. package/.output/public/_nuxt/D-jg-SoR.js +0 -1
  1731. package/.output/public/_nuxt/D1Xw30Dj.js +0 -1
  1732. package/.output/public/_nuxt/D3gfSKKi2.js +0 -1
  1733. package/.output/public/_nuxt/D4elH6Bo2.js +0 -1
  1734. package/.output/public/_nuxt/D4tAdwYm.js +0 -1
  1735. package/.output/public/_nuxt/D5-QB_-l.js +0 -1
  1736. package/.output/public/_nuxt/D5hI4Fhu.js +0 -1
  1737. package/.output/public/_nuxt/DBERjwK92.js +0 -1
  1738. package/.output/public/_nuxt/DBzdrPzw2.js +0 -1
  1739. package/.output/public/_nuxt/DC7WzYCf2.js +0 -1
  1740. package/.output/public/_nuxt/DE-qkHRd2.js +0 -1
  1741. package/.output/public/_nuxt/DE2kUGPK.js +0 -1
  1742. package/.output/public/_nuxt/DEhjFhZ22.js +0 -1
  1743. package/.output/public/_nuxt/DG0esyZR.js +0 -1
  1744. package/.output/public/_nuxt/DI4sdLmu2.js +0 -1
  1745. package/.output/public/_nuxt/DL6fliAT.js +0 -3
  1746. package/.output/public/_nuxt/DLAFNaPf.js +0 -1
  1747. package/.output/public/_nuxt/DNno23Jf2.js +0 -1
  1748. package/.output/public/_nuxt/DP6tsk912.js +0 -1
  1749. package/.output/public/_nuxt/DPP0W5Ni.js +0 -2
  1750. package/.output/public/_nuxt/DP_e7Vwv.js +0 -24
  1751. package/.output/public/_nuxt/DR83EvmX.js +0 -1
  1752. package/.output/public/_nuxt/DSdxfFX_.js +0 -1
  1753. package/.output/public/_nuxt/DTxfFIvL2.js +0 -4
  1754. package/.output/public/_nuxt/DVS06wUy2.js +0 -13
  1755. package/.output/public/_nuxt/DXlAfhEi.js +0 -3
  1756. package/.output/public/_nuxt/DYtV50yi2.js +0 -1
  1757. package/.output/public/_nuxt/D_hCLbi9.js +0 -1
  1758. package/.output/public/_nuxt/DctCtJq7.js +0 -19
  1759. package/.output/public/_nuxt/DdNujZN52.js +0 -1
  1760. package/.output/public/_nuxt/DelESEcl2.js +0 -1
  1761. package/.output/public/_nuxt/DgldLfCZ2.js +0 -1
  1762. package/.output/public/_nuxt/DiHL9ehB.js +0 -1
  1763. package/.output/public/_nuxt/DjtDexGg.js +0 -1
  1764. package/.output/public/_nuxt/DnunMTRD2.js +0 -1
  1765. package/.output/public/_nuxt/Do0dCE8C2.js +0 -1
  1766. package/.output/public/_nuxt/Dok0B4Ol.js +0 -2
  1767. package/.output/public/_nuxt/DtMlAxCm2.js +0 -1
  1768. package/.output/public/_nuxt/DwzJpr7P.js +0 -1
  1769. package/.output/public/_nuxt/DxJFBokW2.js +0 -1
  1770. package/.output/public/_nuxt/Dxo1GW5U.js +0 -1
  1771. package/.output/public/_nuxt/Eo2BYEIo2.js +0 -1
  1772. package/.output/public/_nuxt/GKiBVVYe2.js +0 -1
  1773. package/.output/public/_nuxt/H13l21fR.js +0 -1
  1774. package/.output/public/_nuxt/J94L7hHq2.js +0 -1
  1775. package/.output/public/_nuxt/KS3KQF222.js +0 -1
  1776. package/.output/public/_nuxt/LQBLwrYS2.js +0 -1
  1777. package/.output/public/_nuxt/M58CVYnv.js +0 -1
  1778. package/.output/public/_nuxt/M6NcguDO2.js +0 -1
  1779. package/.output/public/_nuxt/MW-V7IIP.js +0 -1
  1780. package/.output/public/_nuxt/N9TYd_Mk2.js +0 -1
  1781. package/.output/public/_nuxt/P0EcfD3j.js +0 -1
  1782. package/.output/public/_nuxt/QSY9fE482.js +0 -1
  1783. package/.output/public/_nuxt/Qa9rS9oK2.js +0 -31
  1784. package/.output/public/_nuxt/R3gBFghJ2.js +0 -1
  1785. package/.output/public/_nuxt/RAqsw632.js +0 -1
  1786. package/.output/public/_nuxt/S799kNo8.js +0 -1
  1787. package/.output/public/_nuxt/TownView.BuMpDRkf.css +0 -1
  1788. package/.output/public/_nuxt/WYqAa0r52.js +0 -1
  1789. package/.output/public/_nuxt/WmMwIS4y2.js +0 -1
  1790. package/.output/public/_nuxt/XErFZOU9.js +0 -1
  1791. package/.output/public/_nuxt/ZxBwmbs9.js +0 -1
  1792. package/.output/public/_nuxt/_id_.DOqX4gwB.css +0 -1
  1793. package/.output/public/_nuxt/_id_.DpRe1PRh.css +0 -1
  1794. package/.output/public/_nuxt/_mD4IkJj.js +0 -9
  1795. package/.output/public/_nuxt/_wsId_.XjmieZaJ.css +0 -1
  1796. package/.output/public/_nuxt/agents.Cgm_JG9L.css +0 -1
  1797. package/.output/public/_nuxt/aml.BeFTP6_M.css +0 -1
  1798. package/.output/public/_nuxt/analysis.BwhKdel9.css +0 -1
  1799. package/.output/public/_nuxt/bTFhJlrI2.js +0 -1
  1800. package/.output/public/_nuxt/builds/meta/8bf65244-eb00-45c7-be23-9dcd7b917ef3.json +0 -1
  1801. package/.output/public/_nuxt/c_nqArmG.js +0 -1
  1802. package/.output/public/_nuxt/channel-templates.DkNZg-lF.css +0 -1
  1803. package/.output/public/_nuxt/daq.YQas76du.css +0 -1
  1804. package/.output/public/_nuxt/dcw.UIcWRyIS.css +0 -1
  1805. package/.output/public/_nuxt/default.Bx6RJSbr.css +0 -1
  1806. package/.output/public/_nuxt/entry.BlbU43qz.css +0 -1
  1807. package/.output/public/_nuxt/h8ddxY892.js +0 -1
  1808. package/.output/public/_nuxt/i3KBHle7.js +0 -1
  1809. package/.output/public/_nuxt/jmKfTQMN.js +0 -13
  1810. package/.output/public/_nuxt/kYyvM13M.js +0 -3
  1811. package/.output/public/_nuxt/logs.Bf65Kw17.css +0 -1
  1812. package/.output/public/_nuxt/lyJsJl_G.js +0 -1
  1813. package/.output/public/_nuxt/monitor.CI2v5Nvl.css +0 -1
  1814. package/.output/public/_nuxt/operations.B8X9uWK6.css +0 -1
  1815. package/.output/public/_nuxt/pages.CMhSEhEb.css +0 -1
  1816. package/.output/public/_nuxt/plugins.C50x1qZp.css +0 -1
  1817. package/.output/public/_nuxt/pncSmP5n.js +0 -1
  1818. package/.output/public/_nuxt/qIQFsHtF2.js +0 -1
  1819. package/.output/public/_nuxt/settings.O26Dw1iT.css +0 -1
  1820. package/.output/public/_nuxt/t54AYjsC.js +0 -1
  1821. package/.output/public/_nuxt/taHLOXkS.js +0 -1
  1822. package/.output/public/_nuxt/teams.sGmx1AdX.css +0 -1
  1823. package/.output/public/_nuxt/tokens.DFMFaCYU.css +0 -1
  1824. package/.output/public/_nuxt/uYP6z4G72.js +0 -1
  1825. package/.output/public/_nuxt/workshop.BX2YeO0g.css +0 -1
  1826. package/.output/public/_nuxt/yPlLXpEw2.js +0 -1
  1827. package/.output/public/_nuxt/yuIP6K9s.js +0 -1
  1828. package/.output/public/_nuxt/zWg-9WN6.js +0 -19
  1829. package/.output/public/_nuxt/zrgcKVTq.js +0 -2
  1830. package/.output/server/chunks/build/AuthGate-BK2RqkbD.mjs +0 -716
  1831. package/.output/server/chunks/build/AuthGate-BK2RqkbD.mjs.map +0 -1
  1832. package/.output/server/chunks/build/Checkbox-4EdGAAl_.mjs +0 -206
  1833. package/.output/server/chunks/build/Checkbox-4EdGAAl_.mjs.map +0 -1
  1834. package/.output/server/chunks/build/FormItemContext-BqtgOBDe.mjs +0 -72
  1835. package/.output/server/chunks/build/FormItemContext-BqtgOBDe.mjs.map +0 -1
  1836. package/.output/server/chunks/build/OmpTerminalPanel-Bun6rpAk.mjs +0 -942
  1837. package/.output/server/chunks/build/OmpTerminalPanel-Bun6rpAk.mjs.map +0 -1
  1838. package/.output/server/chunks/build/PluginSlot-Do6dX0RE.mjs +0 -399
  1839. package/.output/server/chunks/build/PluginSlot-Do6dX0RE.mjs.map +0 -1
  1840. package/.output/server/chunks/build/TownView-kQZFf4zj.mjs +0 -6489
  1841. package/.output/server/chunks/build/TownView-kQZFf4zj.mjs.map +0 -1
  1842. package/.output/server/chunks/build/_id_-Bbx1b74O.mjs +0 -1931
  1843. package/.output/server/chunks/build/_id_-Bbx1b74O.mjs.map +0 -1
  1844. package/.output/server/chunks/build/_id_-IijrRw3f.mjs +0 -391
  1845. package/.output/server/chunks/build/_id_-IijrRw3f.mjs.map +0 -1
  1846. package/.output/server/chunks/build/_wsId_-Dp3ACbQ5.mjs +0 -13620
  1847. package/.output/server/chunks/build/_wsId_-Dp3ACbQ5.mjs.map +0 -1
  1848. package/.output/server/chunks/build/agents-BfIoGr_p.mjs +0 -1087
  1849. package/.output/server/chunks/build/agents-BfIoGr_p.mjs.map +0 -1
  1850. package/.output/server/chunks/build/aml-B5zKrvB3.mjs +0 -810
  1851. package/.output/server/chunks/build/aml-B5zKrvB3.mjs.map +0 -1
  1852. package/.output/server/chunks/build/analysis-CPIxT0FP.mjs +0 -531
  1853. package/.output/server/chunks/build/analysis-CPIxT0FP.mjs.map +0 -1
  1854. package/.output/server/chunks/build/card-IyQjdGXA.mjs +0 -953
  1855. package/.output/server/chunks/build/card-IyQjdGXA.mjs.map +0 -1
  1856. package/.output/server/chunks/build/channel-templates-Bd8bgBCh.mjs +0 -937
  1857. package/.output/server/chunks/build/channel-templates-Bd8bgBCh.mjs.map +0 -1
  1858. package/.output/server/chunks/build/checkbox-NnjtOam0.mjs +0 -439
  1859. package/.output/server/chunks/build/checkbox-NnjtOam0.mjs.map +0 -1
  1860. package/.output/server/chunks/build/daq-mC3-5A0L.mjs +0 -1265
  1861. package/.output/server/chunks/build/daq-mC3-5A0L.mjs.map +0 -1
  1862. package/.output/server/chunks/build/dcw-EhjJpVQM.mjs +0 -504
  1863. package/.output/server/chunks/build/dcw-EhjJpVQM.mjs.map +0 -1
  1864. package/.output/server/chunks/build/default-flcNWlNg.mjs +0 -2297
  1865. package/.output/server/chunks/build/default-flcNWlNg.mjs.map +0 -1
  1866. package/.output/server/chunks/build/descriptions-DuAefuzp.mjs +0 -406
  1867. package/.output/server/chunks/build/descriptions-DuAefuzp.mjs.map +0 -1
  1868. package/.output/server/chunks/build/drawer-DEIB1_X6.mjs +0 -834
  1869. package/.output/server/chunks/build/drawer-DEIB1_X6.mjs.map +0 -1
  1870. package/.output/server/chunks/build/dropdown-BuD1pxH2.mjs +0 -557
  1871. package/.output/server/chunks/build/dropdown-BuD1pxH2.mjs.map +0 -1
  1872. package/.output/server/chunks/build/dropdown-w7qhyN2D.mjs +0 -14
  1873. package/.output/server/chunks/build/dropdown-w7qhyN2D.mjs.map +0 -1
  1874. package/.output/server/chunks/build/es-DfgEl5n-.mjs +0 -42
  1875. package/.output/server/chunks/build/es-DfgEl5n-.mjs.map +0 -1
  1876. package/.output/server/chunks/build/form-CMLL_-Xx.mjs +0 -4711
  1877. package/.output/server/chunks/build/form-CMLL_-Xx.mjs.map +0 -1
  1878. package/.output/server/chunks/build/hitl-ePh3G3ue.mjs +0 -132
  1879. package/.output/server/chunks/build/hitl-ePh3G3ue.mjs.map +0 -1
  1880. package/.output/server/chunks/build/input-DZcioTwL.mjs +0 -4122
  1881. package/.output/server/chunks/build/input-DZcioTwL.mjs.map +0 -1
  1882. package/.output/server/chunks/build/input-number-BRnbiKLd.mjs +0 -1120
  1883. package/.output/server/chunks/build/input-number-BRnbiKLd.mjs.map +0 -1
  1884. package/.output/server/chunks/build/logs-BYop3JfX.mjs +0 -384
  1885. package/.output/server/chunks/build/logs-BYop3JfX.mjs.map +0 -1
  1886. package/.output/server/chunks/build/menu-DXfhc0qN.mjs +0 -1950
  1887. package/.output/server/chunks/build/menu-DXfhc0qN.mjs.map +0 -1
  1888. package/.output/server/chunks/build/monitor-BjBGkUm2.mjs +0 -2247
  1889. package/.output/server/chunks/build/monitor-BjBGkUm2.mjs.map +0 -1
  1890. package/.output/server/chunks/build/operations-fxI8lEBJ.mjs +0 -285
  1891. package/.output/server/chunks/build/operations-fxI8lEBJ.mjs.map +0 -1
  1892. package/.output/server/chunks/build/pages-6JD9VSbx.mjs +0 -540
  1893. package/.output/server/chunks/build/pages-6JD9VSbx.mjs.map +0 -1
  1894. package/.output/server/chunks/build/permissions-u5SZL8Fe.mjs +0 -631
  1895. package/.output/server/chunks/build/permissions-u5SZL8Fe.mjs.map +0 -1
  1896. package/.output/server/chunks/build/plugins-Cas6KOF-.mjs +0 -248
  1897. package/.output/server/chunks/build/plugins-Cas6KOF-.mjs.map +0 -1
  1898. package/.output/server/chunks/build/popconfirm-BWxt-53K.mjs +0 -339
  1899. package/.output/server/chunks/build/popconfirm-BWxt-53K.mjs.map +0 -1
  1900. package/.output/server/chunks/build/schedules-Ct68Jrvw.mjs +0 -7166
  1901. package/.output/server/chunks/build/schedules-Ct68Jrvw.mjs.map +0 -1
  1902. package/.output/server/chunks/build/segmented-DN62bOFu.mjs +0 -341
  1903. package/.output/server/chunks/build/segmented-DN62bOFu.mjs.map +0 -1
  1904. package/.output/server/chunks/build/select-DQv1DXcW.mjs +0 -3923
  1905. package/.output/server/chunks/build/select-DQv1DXcW.mjs.map +0 -1
  1906. package/.output/server/chunks/build/settings-CQzR1YXR.mjs +0 -1110
  1907. package/.output/server/chunks/build/settings-CQzR1YXR.mjs.map +0 -1
  1908. package/.output/server/chunks/build/space-6FfG3llN.mjs +0 -110
  1909. package/.output/server/chunks/build/space-6FfG3llN.mjs.map +0 -1
  1910. package/.output/server/chunks/build/switch-CfsCVFQP.mjs +0 -377
  1911. package/.output/server/chunks/build/switch-CfsCVFQP.mjs.map +0 -1
  1912. package/.output/server/chunks/build/table-HOjbB5YY.mjs +0 -8881
  1913. package/.output/server/chunks/build/table-HOjbB5YY.mjs.map +0 -1
  1914. package/.output/server/chunks/build/tabs-CC26Rbcw.mjs +0 -1923
  1915. package/.output/server/chunks/build/tabs-CC26Rbcw.mjs.map +0 -1
  1916. package/.output/server/chunks/build/tag-BtOMjpDx.mjs +0 -1029
  1917. package/.output/server/chunks/build/tag-BtOMjpDx.mjs.map +0 -1
  1918. package/.output/server/chunks/build/teams-Re0wY2SQ.mjs +0 -1197
  1919. package/.output/server/chunks/build/teams-Re0wY2SQ.mjs.map +0 -1
  1920. package/.output/server/chunks/build/tokens-DLFIUvXE.mjs +0 -1038
  1921. package/.output/server/chunks/build/tokens-DLFIUvXE.mjs.map +0 -1
  1922. package/.output/server/chunks/build/tooltip-BSDwL_LM.mjs +0 -3362
  1923. package/.output/server/chunks/build/tooltip-BSDwL_LM.mjs.map +0 -1
  1924. package/.output/server/chunks/build/town-Bfme7P2I.mjs +0 -132
  1925. package/.output/server/chunks/build/town-Bfme7P2I.mjs.map +0 -1
  1926. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs +0 -123
  1927. package/.output/server/chunks/build/useAgentHarnessOptions-BnFCh23W.mjs.map +0 -1
  1928. package/.output/server/chunks/build/useAgentTemplateActions-CjBwCb3u.mjs +0 -76
  1929. package/.output/server/chunks/build/useAgentTemplateActions-CjBwCb3u.mjs.map +0 -1
  1930. package/.output/server/chunks/build/useAgentTemplateForm-BX9_xqj8.mjs +0 -116
  1931. package/.output/server/chunks/build/useAgentTemplateForm-BX9_xqj8.mjs.map +0 -1
  1932. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs +0 -132
  1933. package/.output/server/chunks/build/useAgentTemplatesCatalog-Q7LgG1Af.mjs.map +0 -1
  1934. package/.output/server/chunks/build/useAmlEntities-BrcTqHwa.mjs +0 -85
  1935. package/.output/server/chunks/build/useAmlEntities-BrcTqHwa.mjs.map +0 -1
  1936. package/.output/server/chunks/build/useAmlEnv-jiGYK790.mjs +0 -193
  1937. package/.output/server/chunks/build/useAmlEnv-jiGYK790.mjs.map +0 -1
  1938. package/.output/server/chunks/build/useAmlJobs-CVZ1btzg.mjs +0 -266
  1939. package/.output/server/chunks/build/useAmlJobs-CVZ1btzg.mjs.map +0 -1
  1940. package/.output/server/chunks/build/useAmlModels-DJkQzcCU.mjs +0 -92
  1941. package/.output/server/chunks/build/useAmlModels-DJkQzcCU.mjs.map +0 -1
  1942. package/.output/server/chunks/build/useAmlNotes-DKnx9a8x.mjs +0 -85
  1943. package/.output/server/chunks/build/useAmlNotes-DKnx9a8x.mjs.map +0 -1
  1944. package/.output/server/chunks/build/useAmlPredict-Bp4ehwKw.mjs +0 -129
  1945. package/.output/server/chunks/build/useAmlPredict-Bp4ehwKw.mjs.map +0 -1
  1946. package/.output/server/chunks/build/useAnalysisFeed-B4OwUd7p.mjs +0 -128
  1947. package/.output/server/chunks/build/useAnalysisFeed-B4OwUd7p.mjs.map +0 -1
  1948. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs +0 -141
  1949. package/.output/server/chunks/build/useDaqAddNode-CaOCbe4-.mjs.map +0 -1
  1950. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs +0 -69
  1951. package/.output/server/chunks/build/useDaqDetailBinding-C7AbGIdP.mjs.map +0 -1
  1952. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs +0 -78
  1953. package/.output/server/chunks/build/useDaqDetailFrames-CmAEdbAL.mjs.map +0 -1
  1954. package/.output/server/chunks/build/useDaqDetailHistory-C4LWayu1.mjs +0 -175
  1955. package/.output/server/chunks/build/useDaqDetailHistory-C4LWayu1.mjs.map +0 -1
  1956. package/.output/server/chunks/build/useDaqDetailNode-DtZ0oDAn.mjs +0 -98
  1957. package/.output/server/chunks/build/useDaqDetailNode-DtZ0oDAn.mjs.map +0 -1
  1958. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs +0 -158
  1959. package/.output/server/chunks/build/useDaqDetailParams-CrTMDs-2.mjs.map +0 -1
  1960. package/.output/server/chunks/build/useDaqFilters-DYHGhECw.mjs +0 -221
  1961. package/.output/server/chunks/build/useDaqFilters-DYHGhECw.mjs.map +0 -1
  1962. package/.output/server/chunks/build/useDaqOptimizations-C5N4bcu4.mjs +0 -135
  1963. package/.output/server/chunks/build/useDaqOptimizations-C5N4bcu4.mjs.map +0 -1
  1964. package/.output/server/chunks/build/useDaqStream-DhzdoyIR.mjs +0 -395
  1965. package/.output/server/chunks/build/useDaqStream-DhzdoyIR.mjs.map +0 -1
  1966. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs +0 -186
  1967. package/.output/server/chunks/build/useDaqTemplates-C7GzQmdJ.mjs.map +0 -1
  1968. package/.output/server/chunks/build/useDashboardData-B3lZjE7x.mjs +0 -152
  1969. package/.output/server/chunks/build/useDashboardData-B3lZjE7x.mjs.map +0 -1
  1970. package/.output/server/chunks/build/useDcwAddNode-4mTPQ6T8.mjs +0 -218
  1971. package/.output/server/chunks/build/useDcwAddNode-4mTPQ6T8.mjs.map +0 -1
  1972. package/.output/server/chunks/build/useDcwCards-DvLGgUYr.mjs +0 -66
  1973. package/.output/server/chunks/build/useDcwCards-DvLGgUYr.mjs.map +0 -1
  1974. package/.output/server/chunks/build/useDcwDetailScope-BWH7jnVh.mjs +0 -183
  1975. package/.output/server/chunks/build/useDcwDetailScope-BWH7jnVh.mjs.map +0 -1
  1976. package/.output/server/chunks/build/useDcwDetailTemplates-yzNEAMK-.mjs +0 -147
  1977. package/.output/server/chunks/build/useDcwDetailTemplates-yzNEAMK-.mjs.map +0 -1
  1978. package/.output/server/chunks/build/useDcwFilter-BQDmQYY0.mjs +0 -70
  1979. package/.output/server/chunks/build/useDcwFilter-BQDmQYY0.mjs.map +0 -1
  1980. package/.output/server/chunks/build/useDcwLedger-DWGufEor.mjs +0 -78
  1981. package/.output/server/chunks/build/useDcwLedger-DWGufEor.mjs.map +0 -1
  1982. package/.output/server/chunks/build/useDcwLineMutations-DHF-Bemn.mjs +0 -136
  1983. package/.output/server/chunks/build/useDcwLineMutations-DHF-Bemn.mjs.map +0 -1
  1984. package/.output/server/chunks/build/useDcwLineRun-VFe35xou.mjs +0 -103
  1985. package/.output/server/chunks/build/useDcwLineRun-VFe35xou.mjs.map +0 -1
  1986. package/.output/server/chunks/build/useDcwParamApprovals-Bc0BGBds.mjs +0 -120
  1987. package/.output/server/chunks/build/useDcwParamApprovals-Bc0BGBds.mjs.map +0 -1
  1988. package/.output/server/chunks/build/useDcwProducts-DXisXYMh.mjs +0 -92
  1989. package/.output/server/chunks/build/useDcwProducts-DXisXYMh.mjs.map +0 -1
  1990. package/.output/server/chunks/build/useDcwQuery-Cmo3UtIQ.mjs +0 -97
  1991. package/.output/server/chunks/build/useDcwQuery-Cmo3UtIQ.mjs.map +0 -1
  1992. package/.output/server/chunks/build/useDcwQuickActions-BkAcxVnj.mjs +0 -87
  1993. package/.output/server/chunks/build/useDcwQuickActions-BkAcxVnj.mjs.map +0 -1
  1994. package/.output/server/chunks/build/useDcwRecipes-BvtGPQJ9.mjs +0 -257
  1995. package/.output/server/chunks/build/useDcwRecipes-BvtGPQJ9.mjs.map +0 -1
  1996. package/.output/server/chunks/build/useDcwStream-BXJ2V8HM.mjs +0 -452
  1997. package/.output/server/chunks/build/useDcwStream-BXJ2V8HM.mjs.map +0 -1
  1998. package/.output/server/chunks/build/useDcwTemplates-Zxz2DPdu.mjs +0 -90
  1999. package/.output/server/chunks/build/useDcwTemplates-Zxz2DPdu.mjs.map +0 -1
  2000. package/.output/server/chunks/build/useDcwWrites-66CKxcos.mjs +0 -139
  2001. package/.output/server/chunks/build/useDcwWrites-66CKxcos.mjs.map +0 -1
  2002. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs +0 -106
  2003. package/.output/server/chunks/build/useExpConfirmations-BbInIHsn.mjs.map +0 -1
  2004. package/.output/server/chunks/build/useLocalTime-CUnDHV5V.mjs +0 -55
  2005. package/.output/server/chunks/build/useLocalTime-CUnDHV5V.mjs.map +0 -1
  2006. package/.output/server/chunks/build/useLogsManual-CElmZuJh.mjs +0 -83
  2007. package/.output/server/chunks/build/useLogsManual-CElmZuJh.mjs.map +0 -1
  2008. package/.output/server/chunks/build/useLogsQuery-C5nadU1m.mjs +0 -124
  2009. package/.output/server/chunks/build/useLogsQuery-C5nadU1m.mjs.map +0 -1
  2010. package/.output/server/chunks/build/useLogsScope-DgrB1ur3.mjs +0 -82
  2011. package/.output/server/chunks/build/useLogsScope-DgrB1ur3.mjs.map +0 -1
  2012. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs +0 -214
  2013. package/.output/server/chunks/build/useMonitorColumns-DhYvkLDq.mjs.map +0 -1
  2014. package/.output/server/chunks/build/useMonitorData-DcIfMEiz.mjs +0 -134
  2015. package/.output/server/chunks/build/useMonitorData-DcIfMEiz.mjs.map +0 -1
  2016. package/.output/server/chunks/build/useMonitorFormat-DRCXsKwh.mjs +0 -90
  2017. package/.output/server/chunks/build/useMonitorFormat-DRCXsKwh.mjs.map +0 -1
  2018. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs +0 -193
  2019. package/.output/server/chunks/build/useOperationsFeed-DsA2ym7M.mjs.map +0 -1
  2020. package/.output/server/chunks/build/useOpsLog-SnWPuRtK.mjs +0 -137
  2021. package/.output/server/chunks/build/useOpsLog-SnWPuRtK.mjs.map +0 -1
  2022. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs +0 -155
  2023. package/.output/server/chunks/build/useRecipeDispatchApprovals-CbL2El3n.mjs.map +0 -1
  2024. package/.output/server/chunks/build/useTeamActions-C3_O_AIU.mjs +0 -78
  2025. package/.output/server/chunks/build/useTeamActions-C3_O_AIU.mjs.map +0 -1
  2026. package/.output/server/chunks/build/useTeamAddMemberDialog-DWAoZCKd.mjs +0 -83
  2027. package/.output/server/chunks/build/useTeamAddMemberDialog-DWAoZCKd.mjs.map +0 -1
  2028. package/.output/server/chunks/build/useTeamCreateDialog-911mIPWd.mjs +0 -96
  2029. package/.output/server/chunks/build/useTeamCreateDialog-911mIPWd.mjs.map +0 -1
  2030. package/.output/server/chunks/build/useTeamDeployDialog-D0STROoQ.mjs +0 -79
  2031. package/.output/server/chunks/build/useTeamDeployDialog-D0STROoQ.mjs.map +0 -1
  2032. package/.output/server/chunks/build/useTeamPluginDialog-Df6-e2OW.mjs +0 -102
  2033. package/.output/server/chunks/build/useTeamPluginDialog-Df6-e2OW.mjs.map +0 -1
  2034. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs +0 -122
  2035. package/.output/server/chunks/build/useTeamsCatalog-HBSyKt5P.mjs.map +0 -1
  2036. package/.output/server/chunks/build/useTokenCreate-DOojAhM5.mjs +0 -114
  2037. package/.output/server/chunks/build/useTokenCreate-DOojAhM5.mjs.map +0 -1
  2038. package/.output/server/chunks/build/useTokenRename-CMA5dLHx.mjs +0 -86
  2039. package/.output/server/chunks/build/useTokenRename-CMA5dLHx.mjs.map +0 -1
  2040. package/.output/server/chunks/build/useTokenReveal-C19aCKzt.mjs +0 -117
  2041. package/.output/server/chunks/build/useTokenReveal-C19aCKzt.mjs.map +0 -1
  2042. package/.output/server/chunks/build/useTokensList-D0ZpLOhR.mjs +0 -91
  2043. package/.output/server/chunks/build/useTokensList-D0ZpLOhR.mjs.map +0 -1
  2044. package/.output/server/chunks/build/useWorkbenchAuth-CN5E3J5L.mjs +0 -140
  2045. package/.output/server/chunks/build/useWorkbenchAuth-CN5E3J5L.mjs.map +0 -1
  2046. package/.output/server/chunks/build/useWorkbenchWorkspaces-ChKByQSD.mjs +0 -137
  2047. package/.output/server/chunks/build/useWorkbenchWorkspaces-ChKByQSD.mjs.map +0 -1
  2048. package/.output/server/chunks/build/useWorkshopApi-C9sTYu1F.mjs +0 -113
  2049. package/.output/server/chunks/build/useWorkshopApi-C9sTYu1F.mjs.map +0 -1
  2050. package/.output/server/chunks/build/useWorkshopWs-CM-Ywk4h.mjs +0 -1659
  2051. package/.output/server/chunks/build/useWorkshopWs-CM-Ywk4h.mjs.map +0 -1
  2052. package/.output/server/chunks/build/useWorkspaceChannels--65yU02b.mjs +0 -91
  2053. package/.output/server/chunks/build/useWorkspaceChannels--65yU02b.mjs.map +0 -1
  2054. package/.output/server/chunks/build/users-BW4jowK4.mjs +0 -563
  2055. package/.output/server/chunks/build/users-BW4jowK4.mjs.map +0 -1
  2056. package/.output/server/chunks/build/workshop-Bx55czXL.mjs +0 -523
  2057. package/.output/server/chunks/build/workshop-Bx55czXL.mjs.map +0 -1
  2058. /package/.output/public/_nuxt/{BBrRELH32.js → BBrRELH3.js} +0 -0
  2059. /package/.output/public/_nuxt/{BDNMzG2s2.js → BDNMzG2s.js} +0 -0
  2060. /package/.output/public/_nuxt/{BGkumHZ32.js → BGkumHZ3.js} +0 -0
  2061. /package/.output/public/_nuxt/{BrIJiJSN2.js → BrIJiJSN.js} +0 -0
  2062. /package/.output/public/_nuxt/{BupBjt6B2.js → BupBjt6B.js} +0 -0
  2063. /package/.output/public/_nuxt/{CT-vTjcG.js → CT-vTjcG2.js} +0 -0
  2064. /package/.output/public/_nuxt/{CWKEp1wx2.js → CWKEp1wx.js} +0 -0
  2065. /package/.output/public/_nuxt/{DIOBYJe32.js → DIOBYJe3.js} +0 -0
  2066. /package/.output/public/_nuxt/{DkJVtqfc.js → DkJVtqfc2.js} +0 -0
  2067. /package/.output/public/_nuxt/{Dmgqz2np.js → Dmgqz2np2.js} +0 -0
  2068. /package/.output/public/_nuxt/{Nw_6OpQZ2.js → Nw_6OpQZ.js} +0 -0
  2069. /package/.output/public/_nuxt/{TOWR4WpO2.js → TOWR4WpO.js} +0 -0
  2070. /package/.output/public/_nuxt/{cGSl2GZp.js → cGSl2GZp2.js} +0 -0
package/README.md CHANGED
@@ -1,972 +1,981 @@
1
- <div align="center">
2
-
3
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/hero.png" alt="AgentWorkShop — agent teams driving a real production line" width="100%" />
4
-
5
- <br />
6
-
7
- # AgentWorkShop
8
-
9
- **Where AI agent teams meet the production line.**
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/field%20bus-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/plugins-hot%20reload-8b5cf6?logo=puzzle&logoColor=white)](./docs/plugins.md)
26
- [![Docs](https://img.shields.io/badge/docs-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
- **[简体中文](./README-zh.md)** · **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Releases](https://github.com/kingdol666/AgentWorkShop/releases)** · **[Changelog](./changelog.md)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
30
-
31
- <sub><b>v0.7.66</b> · 14 engines · 6 field protocols (5 built-in + serial plugin) + MES REST integration (mirror & live) · data-analysis ledger with line-scoped permissions · per-call tool parameter/binding preflight · 82 host tools · 119 runtime settings · bilingual docs (简体中文 / English)</sub>
32
-
33
- <br />
34
-
35
- *A configuration-driven platform where **AI agent teams** and an **industrial digital twin** share one runtime — agents query real telemetry, issue supervisory setpoints through human-approved write control, and every event streams live to a 3D twin.*
36
-
37
- </div>
38
-
39
- > [!IMPORTANT]
40
- > **Positioning: supervisory layer.** AgentWorkShop is a *supervisory* (SCADA-adjacent) layer for production-line management, digital twins, DAQ and agent orchestration, operating at **second-level soft real-time**.
41
- > It is **not** a hard real-time controller: any time-critical loop (**< 10 ms**, interlocks, safety, servo) **must live inside the PLC**. Setpoints written here are advisory — plant-side logic may veto.
42
-
43
- ---
44
-
45
- <table>
46
- <tr>
47
- <td width="33%" valign="top">
48
-
49
- **FIGURE INDEX**
50
-
51
- `FIG.01` closed loop ·<br/>
52
- `FIG.02` DAQ console ·<br/>
53
- `FIG.03` line operations ·<br/>
54
- `FIG.04` digital twin ·<br/>
55
- `FIG.05` dashboard ·<br/>
56
- `FIG.06` responsive
57
-
58
- </td>
59
- <td width="33%" valign="top">
60
-
61
- **JUMP TO**
62
-
63
- [What is this?](#what-is-this) · [Highlights](#highlights)<br/>
64
- [Interface](#the-interface) · [Architecture](#architecture)<br/>
65
- [Quick start](#quick-start) · [Configuration & CLI](#configuration--cli--config-driven-by-design)<br/>
66
- [Industrial stack](#the-industrial-stack-in-detail) · [Usage](#usage)<br/>
67
- [Verification](#verified-end-to-end) · [Project layout](#project-layout)<br/>
68
- [Tech stack](#tech-stack) · [Development](#development)<br/>
69
- [Roadmap](#roadmap) · [License](#license)
70
-
71
- </td>
72
- <td width="33%" valign="top">
73
-
74
- **AT A GLANCE**
75
-
76
- Supervisory layer, second-level soft real-time<br/>
77
- 14 engines · 4 entry points<br/>
78
- 6 field protocols (5 built-in + serial plugin, read + write)<br/>
79
- 7-state task machine · root queue + lease fencing<br/>
80
- Group chat jobs · scheduled tasks · HITL<br/>
81
- FTS5 + vector memory · hot-reloadable plugins<br/>
82
- SDK · CLI · TUI · external MCP · ~1100+ acceptance assertions
83
-
84
- </td>
85
- </tr>
86
- </table>
87
-
88
- ---
89
-
90
- ## Documentation
91
-
92
- Docs are bilingual — the [VitePress site](https://kingdol666.github.io/AgentWorkShop) ships a language switcher (简体中文 / English) across every section. Deep-dive pages ship in this repo too, and the CLI copies them into the published tarball:
93
-
94
- | Topic | Online | In-repo | What it covers |
95
- |---|---|---|---|
96
- | **Getting started** | [Guide](https://kingdol666.github.io/AgentWorkShop/guide/getting-started) | `docs/site/guide/` | install → first run → first agent × line session, configuration, DAQ protocols, DCW read/write, HITL, recipe versioning, multi-harness teams, line permissions, AML |
97
- | **Plugin development** | [Plugin guide](https://kingdol666.github.io/AgentWorkShop/plugins/) | [`docs/plugins.md`](./docs/plugins.md) | the full extension contract: three scopes, `index.mjs` manifest, `ctx` server/browser surface, `settings`/`groups` declarations, lifecycle events, i18n, panels, team-scoped switches, a real example |
98
- | **SDK** | [SDK guide](https://kingdol666.github.io/AgentWorkShop/sdk/) | [`docs/sdk.md`](./docs/sdk.md) | `agentworkshop/sdk` as a programming client (platform REST client with envelope handling) and as the plugin extension base; TypeScript types; browser-side SDK |
99
- | **CLI** | [CLI manual](https://kingdol666.github.io/AgentWorkShop/cli/) | [`docs/cli.md`](./docs/cli.md) | all 15 `aw` commands, global options, exit codes, dual-mode path model, the command-registration system, maintainer publish guide |
100
- | **AML** | [AML guide](https://kingdol666.github.io/AgentWorkShop/guide/aml) | [`docs/aml.md`](./docs/aml.md) | auto-modeling lab: dataset build, job orchestration, model registry, promotion gates, agent tools |
101
- | **TUI** | — | [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md) | terminal workbench: channels, agents, tasks, live monitor, HITL answering |
102
- | **Multi-harness architecture** | — | [`docs/multi-harness-architecture.md`](./docs/multi-harness-architecture.md) | engine taxonomy, normalized session contract, provider/model catalog, failure modes |
103
-
104
- ---
105
-
106
- ## What is this?
107
-
108
- AgentWorkShop started as a **multi-agent software workshop** — channels of coding agents with a lead-agent scheduler, a 7-state task machine, persistent memory, and four interoperable entry points (WebSocket / MCP / A2A / REST).
109
-
110
- It grew an **industrial half**: a full data-acquisition and write-control stack (Modbus TCP / OPC UA), production lines with recipes and batch runs, a 3D digital-twin town, an **auto-modeling lab** (dataset → training job → leaderboard → gated promotion) — and the bridge that makes it unique: **agents can be granted bound, permission-scoped access to real industrial nodes**, query their live telemetry with physical semantics attached, and drive write operations through an interlock → human-in-the-loop → readback pipeline.
111
-
112
- It is also **extensible by design**: a self-contained plugin can enhance the server (hooks, routes, agent tools, DAQ drivers, config groups) and the browser (panels, i18n) at the same time, and the same surfaces are available to ordinary programs through the SDK — see [`docs/plugins.md`](./docs/plugins.md) and [`docs/sdk.md`](./docs/sdk.md).
113
-
114
- The result: submit a goal like *"analyze the melt temperature trend and optimize the setpoint"* — and an agent team reads real sensor history, computes statistics, proposes a new setpoint, waits for your approval in the HITL panel, writes it to the PLC, verifies the readback, and reports the numbers back. **End to end, verified by automated E2E.**
115
-
116
- <div align="center">
117
-
118
- ### FIG.01 — The closed loop
119
-
120
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="An agent team reads live telemetry, proposes a setpoint, waits for approval, writes to the PLC and verifies the readback" width="88%" />
121
-
122
- <sub><b>Goal → read → compute → approve → write → readback → report.</b><br/>
123
- Recorded against a running instance: real DAQ history, real write control, real HITL approval.</sub>
124
-
125
- </div>
126
-
127
- > [!NOTE]
128
- > Every figure in this README is a recording or screenshot of a **running** instance — not a mockup. The numbers on screen come from seeded industrial data flowing through the same code paths the product ships.
129
-
130
- <div align="center">
131
-
132
- ### 🎬 Live demo (4 min 11 s, English voice-over & captions)
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 live demo: DAQ console, governed write + read-back, serial protocol plugin, agent team execution, closed-loop trend and the 3D digital twin" width="86%" /></a>
135
-
136
- <sub><b>Click the cover to watch the full demo.</b> Real PLC simulator, real serial-port enumeration, real agent-team execution — no cuts, no fakes.<br/>Scenes: dashboard → live DAQ → governed write & read-back → serial protocol plugin → agent team execution → closed-loop trend → 3D digital twin.</sub>
137
-
138
- </div>
139
-
140
- ---
141
-
142
- ## Highlights
143
-
144
- #### Agent team runtime
145
-
146
- | Capability | Why it matters |
147
- |---|---|
148
- | **Lead-agent orchestration** | Each channel has one lead: decomposes goals, dispatches to idle workers, reassigns failures, judges goal satisfaction. LLM decisions with a deterministic rule-engine fallback — the system never stalls. |
149
- | **Three execution modes** | `goal` (satisfaction judging) · `loop` (fixed-interval replay) · `pipeline` (ordered stages). 7-state task machine with progress, artifacts and full history. |
150
- | **Harness-agnostic** | One `AgentInterface`, **14 engines** in three transport classes: **in-process** — `mock` (no LLM), `claude` (Claude Agent SDK, resident session, same-turn steer); **persistent session over a protocol** — `omp` (RPC subprocess), `codex` (app-server JSON-RPC), `dsh` / `qwen` / `hermes` (ACP), `opencode` (serve + HTTP/SSE); **headless CLI with a structured event stream** — `gemini` (stream-json), `copilot` (JSONL), `cursor` (stream-json), `crush` (non-interactive run), `goose` (stream-json), `pi` (`-p --mode json`). The platform never knows which one runs. |
151
- | **Per-channel LLM selection** | Each channel picks a **harness → provider → model (+effort)** triple from the harness's live catalog (e.g. `zhipu-coding-plan/glm-5.3-flash` on omp). Members inherit it unless they override — mixing harnesses in one team is a first-class setup, not a workaround. |
152
- | **Harness availability check** | `GET /api/workshop/harnesses` probes each engine's CLI on PATH. The UI disables not-installed engines, and dispatch is hard-checked at every entry point. |
153
- | **Stall-safe supervision & task governance** | Submitted goals enter a **FIFO root queue** with visible queue positions. Queued roots **never burn their execution budget while waiting** — the budget starts at admission, and a deterministic **lead-rescue sweep** revives starved entries (stopped/idle lead runtime + fresh assignment) before a human ever notices. A **supervision watchdog** distinguishes *stuck* from *slow* — agent tool invocations count as liveness, so healthy long-running industrial work survives while genuinely stalled tasks surface to the lead. Every assignment carries a **generation + execution lease**, so events from a superseded worker are dropped by admission, not reconciled by hope. |
154
- | **Harness continuity** | Engines declare a continuity mode (`persistent` / `per_turn`); persistent sessions are reused across turns under a read-only continuity lease (pid / session / reuse count / last restart reason), and a server restart restores what can be restored instead of silently re-forking. |
155
- | **Channel group chat & native HITL** | The channel timeline is a real group chat: a member's request becomes a **trackable job** (not a lost message), and engines with a native ask surface (e.g. `omp`) route HITL questions through the platform — approve once, the engine continues with the receipt. Member permissions and notifications are first-class. |
156
- | **Scheduled tasks** | Any channel task can run on a **schedule** — fixed `interval` (60 s floor) or `daily` at a set time — managed from `/workshop/schedules` or the REST API, with per-run history, busy-guard (no overlapping runs of the same schedule) and channel-scoped visibility. |
157
- | **Persistent memory & channel process memory** | Private + channel-shared domains; FTS5 with CJK segmentation, optional vector hybrid recall, token-budgeted injection. On top sit **process memories**: deterministic root/child/lead event contracts, a canonical root summary, and a durable outbox (dead-letter + compensation worker) so the story of a goal survives restarts. |
158
- | **Four entry points** | One manager behind every door: **WS** (AEP v1 event stream with seq-resume), **MCP** (38 in-process tools), **A2A** (JSON-RPC 2.0 + AgentCard), **REST**. |
159
-
160
- #### Industrial stack
161
-
162
- | Capability | Why it matters |
163
- |---|---|
164
- | **Six field protocols** | Modbus TCP, Modbus RTU-over-TCP (serial gateway), OPC UA, MQTT and HTTP/REST, plus a **built-in serial plugin** (direct RS-232/485: Modbus RTU + ASCII line) — acquisition **and** write-control drivers with connection pools, classified error messages and per-driver connection tests. `mock` covers demos/CI. Protocols are plugins: `ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` inject straight into the frontend protocol dropdown and dynamic forms (⌁ badge) — when a protocol ships self-describing metadata, the frontend forms render with zero changes. |
165
- | **Agent teams, industrial scope** | Agents bind to DAQ/DCW nodes and see semantic cards — physical meaning, units, safe range, recipe window — never raw registers. |
166
- | **Human-approved write control** | DCW writes flow through **safe-range ∩ recipe-window** interlock → optional **HITL approval** → PLC write → **readback verification** → signed write history. |
167
- | **Read-write DCW channels** | Every control node also **reads its PLC value back** through the same calibration path it writes with: periodic + on-demand + agent reads surface **SET vs ACT** side by side — passive observation, never blocked by write interlocks. |
168
- | **Recipe versioning & governance** | Parameter changes are versioned with attribution (user/agent/system + operator + reason). Roll back to any revision or the last-good batch — non-destructively. Stale-node params are skipped and clearly marked. |
169
- | **Recipe-chain optimization loop** | Agents optimize through recipe management, the way human process engineers do: `recipe_trial` batch-dispatches multi-parameter candidates **without writing a version** → re-measure → progress adopts via `recipe_update` (same recipe id, version +1) → regression triggers a **unified rollback** (`recipe_rollback` with `dispatch: true` = definition revert + batch restore to the PLC). Single-knob direct dispatch is out of the loop; trials run under four-layer bounds and a per-line cadence. |
170
- | **Channel-bound lines (read-only grant)** | A channel can bind a line: every member reads that line's ops logs, recipe history and live status without any node binding (tool outputs are tagged "channel-bound, read-only"), while writes still require node authorization. The line brief is injected into member prompts; binding changes hot-recycle member runtimes. |
171
- | **Data-analysis ledger (v0.7.62)** | Agents persist analysis results as first-class records: native `analysis_save` / `analysis_query` host tools write a dedicated `analysis_reports` table keyed by line + recipe + time window, with conclusions, metrics, data sources and actor attribution. The ledger is append-only for agents; humans revise via REST with editor attribution. A dedicated `/analysis` page streams new reports live (ops-log WS), filters by line / recipe / time / keyword, and edit/delete are permission-gated (`operate` line mode; admin-only delete). External analysis plugins integrate through the same ledger — `diag_run` runs IDD analyses in the background across **six intents** (deep root-cause diagnosis, line stability report, quick screening, DOE analysis, tuning-experience mining, optimization campaign — scenario prompts injected per intent), returns a `task_id` immediately, tracks progress via `diag_status`, and the finished report lands in the ledger via `analysis_save`. |
172
- | **Semantic parameter surface & tuning loop** | Every dispatchable write converges on the **recipe face** (`recipe_update` / `recipe_apply` / `recipe_trial`, each gated by binding → HITL reason → active-run). Writes stay narrowed by the **four-layer bound** — node safe range ∩ parameter baseline bounds ∩ active product bounds ∩ active recipe window — and each adjustment opens a tuning record that `dcw_judge` must close (keep / rollback / uncertain), with `dcw_rollback` executing the undo. (v0.7.63 removed the legacy `param_control` / `param_read` / `dcw_read` direct-node tools — dead surface under permission model v2 — so the agent tool list stays clean.) |
173
- | **Line operations** | Lines → products → recipes → batch runs. Recipe windows gate acquisition and interlock writes; every sample is tagged `product/recipe/run` for per-batch isolation. |
174
- | **MES REST integration (two data paths)** | Production-management data joins the same governed workspace: a `mes-rest` node maps the MES API's catalog / current / history endpoints through **declarative request maps** (auth via `secretRef` → env token, never plaintext; hooks can post-process ingested data). Agents read it two ways — **live**: `mes_fetch` issues the mapped request and returns the API response (large windows paginate async into a `mesds-*` CSV dataset read via `mes_datasets` / `mes_dataset_read`; raw rows never enter the prompt); **mirrored**: an `http` DAQ node polls the same API into the local TSDB so `daq_query` serves it like any native node — and keeps serving it when the API is down. `mes_catalog` is line-scoped and fail-closed. |
175
- | **Multi-modal DAQ frame pipeline** | Multi-point profiles (thickness/scanner) and CCD image frames flow through template sink pipelines: vectors & metadata into Timescale (`daq_frames`), pixels into object storage (MinIO, auto disk fallback); derived-metric thresholds ride the existing alarm chain. |
176
- | **Production hardening (v0.7.58)** | Hold-heartbeat lifecycle fixed — failed writes never occupy the setpoint (no phantom re-dispatch), driver/connection/line changes clear the value, line stop suspends hold automatically; silent mock fallback blocked (unknown protocols fail loudly, plugin unload can't fake success); frame pixel sha256 fingerprints + day-directory object GC (DB cross-check before delete); Timescale daily chunks + columnstore compression (TSL); heap-watermark watch with crash/liveness/watermark auto-respawn; write-hold windows & trial cadence persisted across restarts; runtime grant re-checks include the channel-bound line (revocation takes effect everywhere). |
177
- | **Agent self-audit tools** | `line_context`, `ops_log`, `recipe_log`, `recipe_versions`, `dcw_journal` — agents see exactly which line/product/recipe they control, who did what, and how every value changed. |
178
-
179
- #### Governance, configuration & extension
180
-
181
- | Capability | Why it matters |
182
- |---|---|
183
- | **Line-level permissions** | Industrial data is gated **per production line** with three states (none / read-only / operate), enforced in the data plane — regular users see no line data until granted. |
184
- | **Per-call tool preflight (v0.7.66)** | Every industrial tool call is checked before its handler runs: parameter shape, plus reference membership for `node_id` / `line_id` / `recipe_id` / `dataset_id` and chained dataset/job/model/plan/scene ids (resolved through lineage). References must fall inside the caller's bound face (bound nodes ∪ channel-bound line read-only ∪ nodes on a bound recipe's line). Out-of-scope calls are rejected with the caller's bound face and a concrete next step; authorization denials are audited. |
185
- | **Full-operation audit log** | Every user / agent / system action lands in one queryable log; operators are attributed to "Channel/Member", distinct from users and the system. Streamed live over WS. |
186
- | **Team-scoped plugin switches** | Each team (channel) keeps an **independent plugin switch set** (`channel_plugins`): a disabled plugin's tools are not injected into that team's agents. Plugins themselves are hot-managed via `aw plugin` and the `/plugins` page. |
187
- | **Plugin extension API** | A self-contained directory under `plugins/<name>/` enhances **both halves at once**: `index.mjs` (server: hooks, routes, agent tools, **DAQ read drivers / DCW write drivers**, frame processors, node templates, config groups, KV, timers) and `client.mjs` (browser: panels injected into named slots, i18n, settings UI). Three scopes — `builtin` (shipped) > `project` (checkout) > `user` (`~/.AgentWorkShop`) — with ~1 s hot reload on enable/disable **and on code edits**; a disabled plugin's drivers are removed on hot reload immediately. Built-in example: **serial-bridge** (serial communication: read/write drivers, serial probe API, frontend panel). Full contract in [`docs/plugins.md`](./docs/plugins.md). |
188
- | **AML — auto-modeling lab** | Dataset build → training job → leaderboard → promotion gates → model reference, all driven from `/aml` or by agents through **14 `aml_*` tools**. Python runtime bootstrapped with `uv` into an `aml/` asset root inside the config root; artifacts and metadata stay under the config root. Models carry a human-readable identity — label (line · recipe · objective), description and line/objective ids — selectable via `aml_model_find`. |
189
- | **AML hybrid twin × MPC** | Grey-box physics core + bounded PyTorch residual, `TwinSnapshot` / `VirtualTrial` / `RecommendationCertificate` with UQ/OOD screening and all-trajectory gates; the `hybrid_twin` channel profile injects **12 profile tools** (scene discovery/compile/freeze, physics-spec draft/validate/compile, snapshot, trial, MPC, gate, provider catalog) plus the general `twin_calibration_request`. Trials stay virtual (`candidateExecuted=false`) and writes are recommendation-only until a certificate is certified. |
190
- | **Two-mode optimization loop** | Dedicated channel templates split the loop **structurally**: an *aml-training* channel gets the modeling face (datasets, jobs, scene compile, physics specs, training plans — no plant writes, no MPC) and an *aml-optimization* channel gets the acting face (snapshots, trials, gate, MPC, Bayesian search `twin_bayes_optimize`, governed micro-writes `optimization_explore`) — training-while-optimizing is impossible by construction. **Exploration** mode writes through the governed chain with response read-back pairing (every write lands in an `optimization_explorations` ledger); **production** mode requires a bound model that cleared the twin gates (`aml` mode, `boundModelId` at instantiate time). |
191
- | **Runtime observability** | `GET /api/system/monitor` exposes the agent-team internals as numbers: root queue depth, watchdog interventions, harness session reuse, pending memory outbox — each guarded by a documented rollback switch, so new machinery can be turned off without a redeploy. |
192
- | **Line operations feed (`/operations`)** | One page for every touch on the plant: a live operation feed (REST snapshot + WS stream) classifies writes, DAQ, AML, recipe, rollback, alarm, line, manual and system actions into **nine categories**, renders structured **before → after diff badges** on write rows (failures marked red), and infers the **closed-loop phase** (monitor → exploration · small-step → recommendation search → shadow verification → production) straight from the event stream. The same feed powers a line-operations panel inside the workshop console. |
193
- | **External MCP gateway** | `aw mcp` starts a zero-dependency **stdio MCP server** (38 tools) that discovers a running instance automatically (env → lock file → config file) and exposes lines, recipes (incl. mark-good), governed DCW writes, semantic parameter mapping, DAQ queries, channels, team provisioning, model promotion, judge/rollback and plugin management to any MCP client — gated by the `mcp.enabled` runtime setting, with `--doctor` and `--print-config` helpers. |
194
- | **Fully config-driven runtime** | Every runtime knob (memory budgets, compaction, rollback guardrails, retention, backups, log level, system timezone, MCP gate…) is declared once in the settings descriptor registry with precedence **config.yml < runtime-settings < env** — **119 settings across 18 groups** (40 live / 79 restart), no hardcoded defaults in code. |
195
- | **Configurable system timezone** | One `time.timeZone` setting (IANA id, live-applied) drives human-facing timestamps — logs, chat, audit, agent records and schedules — through a single formatter; machine timelines (DAQ samples, `timestamptz`) stay absolute. |
196
- | **Configurable cadences** | Sampling and query defaults/floors are **live settings** (`daq.sampling.*`, `daq.query.*`): hot-reloaded, clamped on node create/patch, and agent tool descriptions always carry the current values. |
197
-
198
- #### Digital twin
199
-
200
- | Capability | Why it matters |
201
- |---|---|
202
- | **3D digital twin** | Three.js town: place line equipment and channel territories, watch device health, alarms and live values — driven by the same event bus. An adaptive quality ladder (DPR / shadow / bloom tiers, wall-clock FPS budget) matches the machine, and `window.__townStats` exposes real render metrics for perf probes. |
203
-
204
- ---
205
-
206
- ## The interface
207
-
208
- Every panel below is the real UI, at 1440×900, recorded from a running instance.
209
-
210
- <div align="center">
211
-
212
- ### FIG.02 — DAQ console
213
-
214
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-02-daq.gif" alt="DAQ console: node inventory, live trends, alarm strip and event stream" width="92%" />
215
-
216
- <sub><b>Acquisition, end to end.</b> Node inventory and health under a live gauge band, trends that fill as samples land,
217
- an alarm strip that only holds what is actually unacknowledged, and a tailing event stream.</sub>
218
-
219
- <br />
220
-
221
- ### FIG.03 — Line operations
222
-
223
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-03-dcw.gif" alt="Line operations: production lines, products, recipes and write control" width="92%" />
224
-
225
- <sub><b>Lines, products, recipes, batches.</b> Starting a line gates acquisition through its recipe window and tags every
226
- sample with <code>product/recipe/run</code>; control nodes expose <b>SET vs ACT</b> through the same calibration path they write with.</sub>
227
-
228
- <br />
229
-
230
- ### FIG.04 — Digital twin
231
-
232
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-04-town.gif" alt="3D digital twin town driven by live telemetry" width="92%" />
233
-
234
- <sub><b>The twin is the same event bus, rendered.</b> Equipment, channel territories, alarms and live values — an adaptive
235
- quality ladder (DPR / shadow / bloom, wall-clock FPS budget) keeps it honest on modest hardware.</sub>
236
-
237
- <br />
238
-
239
- ### FIG.05 — Dashboard
240
-
241
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-05-dashboard.gif" alt="Runtime dashboard with KPI gauges and trends" width="92%" />
242
-
243
- <sub><b>One screen for the whole workshop.</b> Channels, agents, tasks, DAQ throughput and alarms — read from the same
244
- state the API serves, not a separate metrics store.</sub>
245
-
246
- <br />
247
-
248
- ### FIG.06 — Responsive
249
-
250
- <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-06-responsive.gif" alt="The same interface adapting from desktop to tablet to phone" width="92%" />
251
-
252
- <sub><b>Desktop → tablet → phone.</b> The instrument rail collapses to an icon rail, then to an off-canvas drawer;
253
- page headers stack, dense tables become scrollable ledgers with a pinned identity column.</sub>
254
-
255
- </div>
256
-
257
- <table>
258
- <tr>
259
- <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-workshop.png" alt="Agent workshop" width="100%" /><br/><sub><b>Agent workshop.</b> Channel timeline, lanes, tasks, memory and HITL in one workbench.</sub></td>
260
- <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-monitor.png" alt="Runtime monitor" width="100%" /><br/><sub><b>Runtime monitor.</b> Every wired channel, member count, dependency cycle and owner.</sub></td>
261
- </tr>
262
- <tr>
263
- <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="Settings" width="100%" /><br/><sub><b>Settings.</b> 119 keys across 18 groups, descriptor-driven — the same registry the CLI reads.</sub></td>
264
- <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-plugins.png" alt="Plugins" width="100%" /><br/><sub><b>Plugins.</b> Three scopes, hot reload on edit, per-team switches.</sub></td>
265
- </tr>
266
- </table>
267
-
268
- ---
269
- ## Architecture
270
-
271
- ```mermaid
272
- flowchart TB
273
- subgraph FE["Frontend — Nuxt 4 / Vue 3"]
274
- UI["Workshop UI · 3D Twin · Dashboards"]
275
- WS["AEP client — seq resume"]
276
- end
277
- subgraph SRV["Server — Nitro / h3"]
278
- REST["REST /api/workshop/**"]
279
- HUB["WS Hub — AEP v1"]
280
- A2A["A2A JSON-RPC"]
281
- MCP["MCP Server"]
282
- subgraph RT["Runtime"]
283
- MGR["AgentChannelManager"]
284
- SCH["SchedulerLoop — lead supervision"]
285
- TE["TaskEngine — 7-state machine"]
286
- AR["AgentRuntime × N"]
287
- MEM["AgentMemory — FTS5 + vector"]
288
- BUS["Event bus (ManagerBus) — per-channel seq + ring"]
289
- end
290
- subgraph IND["Industrial"]
291
- DAQ["DAQ gateway — per-node edge runtimes"]
292
- DCW["DCW gateway — write control"]
293
- BR["Bus — inproc / MQTT"]
294
- TSDB["TSDB — SQLite / Timescale"]
295
- end
296
- subgraph HB["Harness adapters — 14 engines"]
297
- MOCK["mock · claude — in-process"]
298
- OMP["omp — RPC subprocess"]
299
- CDX["codex — app-server"]
300
- DSH["dsh · qwen · hermes — ACP"]
301
- OC["opencode — serve"]
302
- FAM["gemini · copilot · cursor · crush · goose · pi — headless CLI"]
303
- end
304
- DB[("SQLite — channels · agents · tasks
305
- messages · memories (FTS5) · events")]
306
- end
307
- UI <--> WS
308
- WS --> BUS
309
- REST & A2A & MCP --> MGR
310
- MGR --> SCH & TE & AR
311
- AR --> MEM
312
- AR --> MOCK & OMP & CDX & DSH & OC & FAM
313
- MGR & TE & MEM & BUS --> DB
314
- DAQ <--> BR --> TSDB
315
- DCW --> BR
316
- DAQ & DCW --> BUS
317
- ```
318
-
319
- **The agent × machine bridge** (the part worth reading the source for):
320
-
321
- ```
322
- agent ──binds to──▶ node (daq: auto / dcw: manual)
323
- │ │
324
- │ my_industrial_nodes ◀── semantic card: meaning · unit · safe range · recipe window
325
- │ daq_query ◀── TSDB history, stats + physical semantics
326
- │ dcw_control ──▶ interlock (safe range ∩ recipe window)
327
- │ ──▶ HITL approval (manual mode, 180 s timeout)
328
- │ ──▶ PLC write → readback check → ACK + write history
329
- ◀── result text with numbers the agent can cite
330
- ```
331
-
332
- ---
333
-
334
- ## Quick start
335
-
336
- ### Prerequisites
337
-
338
- ```bash
339
- node -v # ≥ 23.4.0 (needs built-in node:sqlite)
340
- ```
341
-
342
- > Real-agent harnesses require their CLI on PATH — `omp`, `codex`, `dsh`, `opencode`, `gemini`, `qwen`, `copilot`, `cursor`, `crush`, `goose`, `pi` or `hermes` (any subset; each channel can mix harnesses). `mock` and `claude` (SDK) run in-process and need no PATH CLI. The dashboard "execution engines" panel shows per-engine readiness with a green/grey dot; entries for uninstalled engines link to their official install pages. Optional DAQ infrastructure (MQTT broker + TimescaleDB) auto-starts via Docker when reachable (`docker compose up -d`).
343
-
344
- ### Option A — install from npm (recommended)
345
-
346
- ```bash
347
- npm install -g agentworkshop # → `aw` / `agentworkshop` on PATH
348
- aw start # → http://localhost:3001
349
- ```
350
-
351
- The published tarball ships a **prebuilt production bundle** (`.output/`), so an npm install boots straight away — no build step, no build tools. On first launch everything initializes into the config root **`~/.AgentWorkShop`**: the default `config.yml`, a generated `.env` holding a random session secret, `runtime-settings.json`, a docker-compose seed, `prompts/`, `commands/`, `plugins/` (seeded from the SDK examples, **disabled** by default) and an empty `data/` directory. All runtime data (SQLite, JSON repos, backups, logs) lives there too — config and data stay with the install, not the working directory.
352
-
353
- Prefer a one-off run without installing globally?
354
-
355
- ```bash
356
- npx agentworkshop start # no global npm install required
357
- ```
358
-
359
- > `npx` still creates `~/.AgentWorkShop` — running without a global install is not the same as leaving no trace on disk.
360
-
361
- ### Option B — from source
362
-
363
- ```bash
364
- git clone https://github.com/kingdol666/AgentWorkShop.git && cd AgentWorkShop
365
- pnpm install
366
- pnpm dev # → http://localhost:3000 (port from config.yml)
367
- ```
368
-
369
- Production from source:
370
-
371
- ```bash
372
- pnpm build # nuxt build → .output/
373
- pnpm start # port from config.yml → server.prod.port
374
- ```
375
-
376
- > In a source checkout the config root is the project's **`.AgentWorkShop/`** folder (runtime overrides, data, project-level commands), while `config.yml` / `.env` stay at the checkout root, version-controlled as the factory defaults.
377
-
378
- ### Updating
379
-
380
- ```bash
381
- aw update # check + self-update the global install
382
- aw update --check # only report; nothing is installed
383
- npm install -g agentworkshop@latest # manual equivalent
384
- ```
385
-
386
- Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.7.66** — see [Releases](https://github.com/kingdol666/AgentWorkShop/releases).
387
-
388
- ### Your first agent × line session (~2 minutes)
389
-
390
- 1. **Sign in** — register in the sidebar (or `POST /api/users/register`).
391
- 2. **Build a line** — `Line Operations` → create a line, add DAQ nodes (e.g. `daq-temp-tc`) and control nodes (e.g. `dcw-temp-sp`), create a product + recipe, hit **Start**. Live values start flowing.
392
- 3. **Create a team** — `Agent Workshop` → pick a lead + workers, **deploy** into a channel.
393
- 4. **Bind nodes** — open the agent's detail panel → bind the DAQ node (*auto*) and the control node (*manual* = needs your approval).
394
- 5. **Submit the goal** — *"Analyze the last 5 minutes of melt temperature; if deviation from 182 °C exceeds 1 °C, correct the setpoint (wait for my approval)."*
395
- 6. **Approve** — the agent reads real history, computes the mean, requests the write → approve in the HITL panel → watch the setpoint change and the goal close with a numeric report.
396
-
397
- ---
398
-
399
- ## Configuration & CLI — config-driven by design
400
-
401
- One runtime, one source of truth. **`config.yml`** declares defaults; **`runtime-settings.json`** inside the config root carries runtime overrides; environment variables and CLI flags sit on top. Every editable key is described once in `shared/config/schema.json` (type, range, enum, live-vs-restart) and surfaced through the same descriptors in **both the UI and the CLI**.
402
-
403
- ```
404
- config.yml (defaults) < .AgentWorkShop/runtime-settings.json (runtime) < env vars / CLI flags
405
- ```
406
-
407
- The config root is **`~/.AgentWorkShop`** for a global install (`npm i -g`) — wherever you run `aw` from — and **`<repo>/.AgentWorkShop`** in a source checkout (with `config.yml` / `.env` staying at the checkout root as version-controlled factory defaults). `AW_HOME` redirects it; `AW_MODE=home` forces the global shape.
408
-
409
- ### Live settings, persisted, hot-reloaded
410
-
411
- - The **Settings → Runtime config** tab renders every editable key from the descriptors — change server ports, theme, API timeouts, locale or the approval gate, hit save.
412
- - `live` keys apply instantly (theme, title, timeouts, approval gate, DAQ sampling cadences, TSDB query buckets…) over a server-sent event stream — no reload, no restart.
413
- - `restart` keys (ports, hosts) persist to disk and take effect on the next launch of the matching mode (`aw dev` / `aw start`).
414
- - One channel for every writer: the UI, the CLI and the server's file watcher all converge on the same settings file, so a change made anywhere shows up everywhere.
415
-
416
- Example — retune the acquisition and query cadences live:
417
-
418
- ```bash
419
- aw config set daq.sampling.defaultIntervalMs 2000 # new nodes sample every 2 s
420
- aw config set daq.sampling.minIntervalMs 500 # per-node floor (create/patch clamp)
421
- aw config set daq.query.defaultBucketMs 3000 # TSDB reads default to a 3 s bucket
422
- aw config set daq.query.minBucketMs 500 # query floor (samples/line query/agent tool)
423
- ```
424
-
425
- Agent tool descriptions are re-rendered with the current values on every injection, so an LLM always sees the floor and default that will actually apply to its `daq_query` calls.
426
-
427
- ### The `aw` CLI
428
-
429
- | Command | What it does |
430
- |---|---|
431
- | `aw start · aw dev · aw build` | Production server / dev server / build — ports from the effective config; first `start` builds once |
432
- | `aw stop` | Stop a running `aw` service instance via the single-instance lock |
433
- | `aw config list · get · set · unset · reset` | Read & write runtime settings (validated against the schema, atomic writes) |
434
- | `aw plugin list · create · enable · disable` | Manage plugins across all three scopes: inspect, scaffold (project scope; `--global` for user scope), enable/disable (state file, ~1 s hot reload on the running server) |
435
- | `aw mcp` | Industrial MCP stdio server (38 tools over the platform REST: lines, recipes, DCW writes, parameter mapping, DAQ, channels, teams, model promotion, plugins) — auto-discovers the running instance; `--doctor` diagnoses discovery/health/auth, `--print-config` emits a ready-to-paste MCP client config |
436
- | `aw home` | Inspect / initialize the config root `.AgentWorkShop` |
437
- | `aw init <dir>` | Scaffold a runnable project (full config system + CLI included) |
438
- | `aw register <path\|url\|npm:pkg>` | Register a new command — project-local or `--global` |
439
- | `aw update` | Check npm for the latest release and self-update the global install |
440
- | `aw doctor` | Environment + project health check (node, config, ports, keys) |
441
- | `aw status` | Live overview: mode, config sources, running server, command table |
442
- | `aw tui` | Terminal workbench: channel/agent management, task submission, live monitor pane, HITL answering (see [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md)) |
443
- | `aw version` | Print the CLI/package version (alias `v`) |
444
-
445
- Global flags: `--help/-h` · `--version/-v` · `--json` (machine-readable) · `--root <dir>` · `--debug`.
446
-
447
- Exit codes: **0** success · **1** runtime error · **2** usage error. With `--json`, failures come back as an envelope carrying `{ ok: false, error: 'unknown-command' \| 'no-project' \| 'usage' \| 'internal' \| … }`, so automation can branch without parsing stderr.
448
-
449
- ### Command registration
450
-
451
- Commands are plain modules exporting `{ meta, run }`. Drop one into a scanned directory and it's live on the next invocation — no registry bookkeeping, convention over configuration:
452
-
453
- | Scope (highest wins) | Directory |
454
- |---|---|
455
- | project | `<root>/.AgentWorkShop/commands/` |
456
- | user | `~/.AgentWorkShop/commands/` |
457
- | built-in | packaged with the CLI (`cli/commands/`) |
458
-
459
- `aw register <file|url|npm:pkg>` copies a command into the right scope (`--global` for user scope); `aw help` lists everything that's registered.
460
-
461
- ```js
462
- // ~/.AgentWorkShop/commands/hello.mjs
463
- export const meta = { name: 'hello', group: 'Custom', summary: 'Say hi', usage: 'aw hello [--name <n>]' }
464
- export async function run(argv, ctx) {
465
- console.log(`Hi ${argv.flags.name ?? 'AW'} — mode: ${ctx.mode}`)
466
- }
467
- ```
468
-
469
- ---
470
-
471
- ## The industrial stack in detail
472
-
473
- ### Data acquisition (DAQ)
474
-
475
- - **Six protocol drivers**: Modbus TCP, Modbus RTU-over-TCP (serial gateway), OPC UA, MQTT, HTTP/REST, plus the **serial-bridge built-in plugin** (direct RS-232/485: Modbus RTU framing + ASCII line protocol, write side with same-address readback verification, serial enumeration/probe API and a frontend panel) — connection pools, classified error messages, per-driver connection tests; the driver registry accepts plugin-registered protocols of any kind (with self-describing metadata, the frontend forms render with zero changes).
476
- - **Per-node edge runtimes**: independent sampling cadence, publish cadence, in-flight mutex per node — one slow driver never blocks its neighbors. Sampling and query defaults/floors are driven by the live `daq.sampling.*` / `daq.query.*` settings.
477
- - **Pipeline**: driver → queue (in-process or MQTT, offline buffer on disconnect) → consumer with out-of-order defense → three-way fan-out: WS live push (gated), TSDB batch write, device-twin writeback.
478
- - **Robustness**: TSDB single-in-flight writes with bounded retries, buffer backpressure with drop counters, real loss metrics exposed on `daq.controller` frames.
479
- - **Alarms**: recipe-scoped monitoring windows with **2% hysteresis + 3-tick debounce**; alarm/offline transitions are instant (safety first).
480
- - **Querying is batch-scoped by default**: `daq_query` resolves the node's **active run** and filters by that batch's `run_id` + `recipe_id`, so an agent reading evidence always sees *the recipe currently running* — never a mix of the previous batch. The effective scope (`run=<id> 配方「name」(recipe_id)`) is printed in the result header and restated per node at the end, and the same ids can be fed straight back into `daq_query` or `aml_dataset_build`; pass `scope: 'all'` (or an explicit `recipe_id` / `run_id` / `product_id`) for cross-recipe comparison and history review. Lines that are not running stay unfiltered, so historical data remains queryable.
481
-
482
- ### Write control (DCW)
483
-
484
- - Engineering-unit writes: `linear` calibration (scale/offset) PLC↔physical, **readback verification** with deadband tolerance, ACK states and write history.
485
- - **Interlock**: with a line running, the active recipe's parameter window *replaces* the node's global safe range for that node.
486
- - **HITL**: `manual`-mode bindings suspend the write for user approval (deduped per agent+node; re-validation at approval time — permission is re-checked when you click approve).
487
-
488
- ### Recipe & batch
489
-
490
- `Line → Product → Recipe → Run`. Starting a run applies recipe params node-by-node (each write verified), gates acquisition per line, and tags every sample with `line/product/recipe/run` — per-product data isolation with five-dimension queries (line × product × recipe × time × node).
491
-
492
- ### AML — auto-modeling lab
493
-
494
- The modeling half of the loop: `/aml` builds **datasets** out of tagged telemetry, submits **training jobs** to a `uv`-managed Python runtime, ranks runs on a **leaderboard**, and promotes a model only when it clears the configured **gates** (NRMSE, rollout NRMSE, validation/test gap, minimum rows and runs). Promoted models are referenced by id, so an MPC or shadow-twin controller can consume a versioned artifact instead of a vague "latest".
495
-
496
- - Agents do the same work through 14 tools (`aml_dataset_build`, `aml_job_submit`, `aml_job_status`, `aml_leaderboard`, `aml_model_promote`, `aml_model_find`, `aml_training_plan_*`, …) — submit a goal and let the team train and report.
497
- - The Python runtime bootstraps itself with `uv` into an `./aml` asset root inside the config root; dataset/artifact/metadata paths, disk quota, job timeout, concurrency and retention are all **settings** (16 in the `aml` group), not constants.
498
- - Governance defaults are conservative: cross-recipe datasets are refused unless explicitly allowed, and every job is attributed.
499
- - **Hybrid twin × MPC core**: AML also owns the *hybrid twin* plane — `SceneContract` / `PhysicsModelManifest` / `TwinSnapshot` / `ObjectiveProfile` / `VirtualTrial` / `RecommendationCertificate` on top of a grey-box physics core with a bounded PyTorch residual, UQ/OOD screening and all-trajectory hard-constraint gates. Channels opt in through the `hybrid_twin` profile, which injects twelve profile agent tools (`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`) plus the general `twin_calibration_request`; a trial is *virtual* by design (`candidateExecuted=false`) and a recommendation is only certified when gates and benefit pass. Server-side strategies are `safe_small_step` (insufficient data) and `precise_search` (model cleared gates). Plan + acceptance record: [`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).
500
- - **Any-scene modeling loop**: the loop is not tied to a bundled scene. Bind nodes → `twin_scene_discover` infers control/state/disturbance/target/guard semantics with evidence → `twin_scene_compile` drafts a `SceneContract` → you confirm → `twin_scene_freeze` freezes it (immutable versions) → `twin_physics_spec_draft` proposes a skeleton PhysicsSpec (one first-order relaxation equation per state, τ/gain as calibratable prior-boxed parameters) that you refine → validate/compile (whitelisted AST, no arbitrary code) → `aml_job_submit { job_kind: 'hybrid_residual' }` runs without any code: the built-in reference trainer calibrates physics parameters (stage A), fits a 3-member bounded residual ensemble (stage B) and reports conformal q90 coverage (stage D) — the calibrated spec is written back and shared by evaluation, prediction and trials.
501
- - **Model-backed twin & continuous calibration**: `twin_trial_run` / `mpc_optimize` accept a `model_id` — the rollout is then driven by the trained hybrid model (calibrated physics + residual-ensemble ONNX, `ModelBackedHybridProvider`) with UQ coverage and member disagreement coming from training artifacts, and a dataset whose line/product/recipe doesn't match the scene is rejected (`TWIN_MODEL_SCENE_MISMATCH`). Calibration requests are consumed by a 60 s worker that re-submits `hybrid_residual` retraining *candidates* automatically; promotion still goes through HITL + Twin Gate (`AML_TWIN_WORKER_DISABLED=1` turns the worker off).
502
- - **Two-mode optimization loop**: `aw` ships two channel templates — `chtpl-aml-training-default` (modeling face: 22 tools, no plant writes, no MPC) and `chtpl-aml-optimization-default` (acting face: snapshot/trial/gate/MPC/Bayesian search plus `optimization_explore`, the governed micro-write that pairs every setpoint with its response read-back in an `optimization_explorations` ledger). The faces are mutually exclusive per channel; optimization channels instantiate either in **exploration** mode (governed small steps, no model required) or **aml** mode (`boundModelId` required — a gate-cleared model must be bound before the acting face unlocks).
503
- - **Twin provider plugin SDK (hot-loaded)**: an industrial scene's physics core / scene packs / objectives / solvers register through `ctx.twin` into the **Twin Provider Registry** (`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`, plus `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`). Twin tools resolve providers via `SceneContract.physicsProfileId` (falling back to the bundled `twin-injection-default`), so **swapping scenes changes neither tools nor channels**; a hot reload stages a new **generation** and drains the old one while trials and MPC hold leases, so in-flight work is never invalidated and `retireProvider` only unloads at zero references. The bundled injection provider ships through that same external contract (`server/plugins-builtin/twin-injection-default/`), and plugins live in the usual scopes with no restart for disable/reload. Field tables and a runnable example: [`docs/plugins.md`](./docs/plugins.md) → "Hybrid-twin provider plugins"; SDK surface: [`docs/sdk.md`](./docs/sdk.md) §4.10.
504
-
505
- ---
506
-
507
- ## Usage
508
-
509
- ### Authentication
510
-
511
- Email + password login issues a **bearer token** (multiple tokens per user, individually revocable).
512
-
513
- ```bash
514
- # register
515
- curl -X POST http://localhost:3000/api/users/register \
516
- -H 'content-type: application/json' \
517
- -d '{"email":"you@example.com","password":"secret","name":"you"}'
518
-
519
- # every workshop call
520
- curl http://localhost:3000/api/workshop/channels \
521
- -H 'authorization: Bearer <token>'
522
- ```
523
-
524
- ### Line-level permissions
525
-
526
- Industrial data is gated **per production line** with three states, managed by an admin
527
- in the built-in **Permissions** page (`/permissions`, admin-only in the sidebar):
528
-
529
- | State | DAQ nodes | DCW (write) nodes | Visibility |
530
- | --- | --- | --- | --- |
531
- | **none** (default for regular users) | hidden | hidden | line data withheld server-side — invisible in Line Ops, DAQ center and the digital twin |
532
- | **read-only** | read | ✕ | line visible, values stream, no writes / dispatch / device binding |
533
- | **operate** | read | read + write | full access incl. setpoint writes, dispatch, binding |
534
-
535
- - `admin` / `editor` roles are unrestricted (operations roles).
536
- - Regular users **default to none** — they see no line data until granted.
537
- - Enforcement lives in the data plane: list endpoints filter by grant, write/dispatch
538
- endpoints return a human-readable 403, and Agent↔node bindings validate the line grant
539
- (DAQ needs read-only+, DCW needs operate).
540
- - Plugins get the same surface via `ctx.permissions` (`lineMode` / `visibleLineIds` /
541
- `listGrants` / `setGrants`) plus a `permissions:changed` lifecycle hook; the SDK REST
542
- client exposes `client.permissions.overview()` / `client.permissions.set(...)`.
543
-
544
- ### Execution modes
545
-
546
- Prefix the task description (or pick in the composer UI):
547
-
548
- | Mode | Semantics | Config |
549
- |---|---|---|
550
- | `goal` | lead decomposes → workers deliver → **lead judges satisfaction**; unmet → more subtasks; met → parent completes. | `goalCriteria` |
551
- | `loop` | replay the same task on a fixed interval. | `intervalMs` (default 60000), `maxIterations` (default ∞) |
552
- | `pipeline` | ordered stages; stage N+1 consumes stage N's output. | `stages: [{name, description, assigneeId?}]` |
553
-
554
- ### Scheduled tasks
555
-
556
- Any task can also be attached to a **schedule** so a channel keeps working when nobody is watching:
557
-
558
- | Aspect | Behavior |
559
- |---|---|
560
- | Modes | `interval` — fixed cadence (`intervalMs`, 60 s floor) · `daily` — once per day at `HH:MM` local time |
561
- | Management | `/workshop/schedules` page, or `POST/PATCH /api/workshop/schedules` |
562
- | Guard rails | busy-guard (a fire is deferred while the channel still has active tasks), per-run history with status, and a **consecutive-failure circuit breaker** (`maxConsecutiveFailures`) that auto-disables a misbehaving schedule |
563
- | Typical use | nightly line patrol (`daq_query` + report to memory), periodic drift check with auto-judge, daily KPI digest |
564
-
565
- ```bash
566
- # create a schedule: patrol the line every 30 minutes
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":"Line patrol","description":"Read all DAQ nodes on line 1 and post a drift summary to channel memory.","mode":"interval","intervalMs":1800000}'
570
- ```
571
-
572
- ### The four entry points
573
-
574
- | Entry | Endpoint | Audience |
575
- |---|---|---|
576
- | **WS** | `/api/workshop/ws?channelId=…` | Dashboards / UI — AEP v1 envelopes, per-channel monotonic `seq`, 5000-event ring, `lastSeq` resume, snapshot fallback. |
577
- | **MCP** | in-process server, 38 tools | Agents (omp host tools) — management + job-face tools, channel-scoped. |
578
- | **A2A** | `POST /api/workshop/a2a/:agentId/rpc` | External agents — JSON-RPC 2.0, `AgentCard` at `/card`, `tasks/sendSubscribe` SSE. |
579
- | **REST** | `/api/workshop/**` | Humans / scripts — full management face. |
580
-
581
- ### Task state machine
582
-
583
- ```
584
- SUBMITTED ─▶ ASSIGNED ─▶ WORKING ─▶ WAITING ─▶ COMPLETED
585
- │ │ │ │
586
- └────────────┴───────────┴──▶ CANCELED / FAILED ─▶ (retry ≤ 3 or cancel)
587
- ```
588
-
589
- ---
590
-
591
- ## Verified end-to-end
592
-
593
- Every claim above is backed by a suite you can re-run. The acceptance suites drive a
594
- **production instance over real simulated plant protocols** (Modbus TCP/RTU, OPC UA, MQTT,
595
- HTTP + an MQTT/Timescale pipeline) with real engine CLIs, and assert on the database,
596
- the event stream and the HTTP API — not on mocks. Two 2026-09-24 waves are archived:
597
- the baseline matrix (~1100+ real assertions, v0.7.45 production build, isolated `AW_HOME`,
598
- real browser) in [`docs/audit/e2e-2026-09-24-full-coverage.md`](./docs/audit/e2e-2026-09-24-full-coverage.md),
599
- and the follow-up feature wave (real **PLC node simulator** + injection-molding AgentTeam
600
- closed loop, FIFO multi-goal, scheduled tasks, collaboration, ~1400+ assertions in total)
601
- in [`docs/audit/e2e-2026-09-24-all-features.md`](./docs/audit/e2e-2026-09-24-all-features.md).
602
-
603
- | Suite | Latest result | What it covers | Reproduce |
604
- |---|---|---|---|
605
- | `real-injection-closed-loop.mjs` | **2 goals COMPLETED / 0 failed** (2026-09-24, real PLC simulator + real `omp` team) | injection line provisioned from the simulator (11 DCW + 14 DAQ nodes) → real AgentTeam lead/analyst/optimizer → governed writes with a **65.8 s gap ≥ 60 s policy** → DAQ re-measurement → `qualityOk`, verdict `keep` | `AW_BASE=<base> SIM_BASE=http://127.0.0.1:4010 AW_TOKEN=<token> node scripts/real-injection-closed-loop.mjs` |
606
- | `_run-real-injection-fifo-goals.mjs` | exit 0 (2026-09-24) | **FIFO root queue with multi-task serialization**: goal 2 dispatched only after goal 1 closed, role gate flip, two governed writes 65.04 s apart, two judged records, 4-anchor ledger | `AW_BASE=<base> SIM_BASE=… AW_TOKEN=<token> node scripts/_run-real-injection-fifo-goals.mjs` |
607
- | `e2e-plc-plugin-closedloop.mjs` | core stages A–D all green (2026-09-24) | PLC simulator supply over Modbus 16040 → DAQ cross-check (AW sample 197 vs simulator register 197.37) → HITL closed-loop write to 3 zones (registers 40021/40023/40025 = 210, verified write-through) → `dcw_judge` keep; plugin stages E–H need the external diagnosis service and are reported as 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` |
608
- | `_dbg-schedule-e2e.mjs` | **35 / 0** (2026-09-24) | scheduled tasks: plan CRUD + validation, `next_run_at`, `scheduledCount`, busy guard **409 CHANNEL_BUSY**, in-flight duplicate **409 SCHEDULE_RUNNING**, cancel reconciliation (run FAILED + failure counters), **timer auto-fire** (`trigger_kind=timer`), disable/enable state machine, 404 after delete | `SCHED_E2E_BASE=<base> node scripts/_dbg-schedule-e2e.mjs` |
609
- | `e2e-crash-cycle.mjs` | **5 / 5 phases** (2026-09-24) | watch → hard kill → persistence check → restart → redelivery → auto-resume → consumption-gap replay, each phase in its own process | `node scripts/e2e-crash-cycle.mjs --port 3300 --home .e2e-home-full` |
610
- | `e2e-full-closedloop.mjs` | **98 / 0** (2026-09-24, v0.7.45 production build) | 11 stages: registration → line/product/recipe modeling → DAQ sampling → frame pipeline → DCW write + readback → rollback ledger → agent-node authorization → bridge privilege boundaries → plugins → data-root isolation | `node scripts/e2e-full-closedloop.mjs <base>` |
611
- | Protocol matrix, real protocols | **46 / 0** (2026-09-24) | MQTT · Modbus TCP · Modbus RTU · OPC UA · HTTP — acquisition, governed write + readback, recipe-window interlock and a real agent closed loop per protocol | `node scripts/_dbg-protocol-matrix.mjs` |
612
- | Production API live | 60 / 0 (2026-09-24) | persistence across restart, template CRUD, task assign/complete/cancel/loop/pipeline, A2A + mailbox, WS broadcast, MCP endpoint, cascade delete | `AW_E2E_TOKEN=<token> node scripts/api-live-e2e.mjs` |
613
- | AgentTeam chat + native HITL | 112 passed / 0 failed / 1 blocked (2026-09-24, real `omp`) | group-chat request → trackable job; `omp` native ask → HITL approval → engine resumes with the receipt | `node scripts/e2e-agentteam-chat.mjs --phase=all` |
614
- | Terminal mirror + prompt composition | **26 / 0** and **16 / 0** (2026-09-24, real `omp`) | terminal mirror frames, `input`/`abort`/`ui_response` injection, native `ask` round-trip; five-section prompt assembly (scenario → profile → memory → manual → assignment) observed on the wire | `node scripts/test-terminal-e2e.mjs` · `node scripts/test-prompt-system.mjs` |
615
- | Real-engine collaboration | task-flow real **PASS**, `e2e-omp-workspace` **13 / 13**, group-chat real **PASS**, multi-user HIL **PASS** (2026-09-24) | real `omp` lead + workers: decomposition, dispatch, progress, artifacts, workspace-scoped file reads, unload; multi-user HITL visibility; multi-harness team 14/18 (omp + dsh green) | `npx tsx scripts/e2e-agentteam-task-flow-real.ts` · `npx tsx scripts/e2e-omp-workspace.ts` |
616
- | Front-end acceptance | responsive gate **16 / 16** routes, nav drawer **10 / 10** (2026-09-24, real Chromium) | every product page incl. the 3D town renders at the gate thresholds; drawer interaction, scroll lock, route change, zero page errors | `node scripts/ui/verify-responsive.mjs --routes all` · `node scripts/ui/verify-nav.mjs` |
617
- | `_aw0746-stage12.mjs` | **10 / 0** (2026-09-25, globally installed **v0.7.49 packaged build**) | health gate (version=0.7.49) → admin login/role surface → channel creation with a real `omp` lead → group chat opened → **real omp reply** → omp child process visible in monitoring | `AW_BASE=<base> node scripts/_aw0746-stage12.mjs` |
618
- | `_aw0746-stage34.mjs` | **13 / 0** (2026-09-25, v0.7.49 packaged build + PLC simulator) | line provisioned from the simulator (11 DCW + 14 DAQ) → product/recipe triple → **every sample tagged with recipe_id/run_id** while running → `daq_query` **defaults to the active batch** (`scope=all` opts out, measured 1 vs 4) → Hybrid Twin template instantiated (lead + 3 workers, 6 twin tools injected, 57 total) | `AW_BASE=<base> node scripts/_aw0746-stage34.mjs` |
619
- | `_aw0746-stage6b-train-sweep.mjs` | gates **all green** (2026-09-25, v0.7.46 packaged build, real torch training) | 1 s grid dataset (**1724 rows / 10 runs**) → inline-code job trained for real → G1 one-step **0.0992** (≤0.10) / G2 rollout 0.1092 (≤0.25) / G3 generalisation 14.6% (≤20%) / G4 rows+runs → model registered and **promoted to production** | `AW_BASE=<base> AW_DATASET_ID=<ds> node scripts/_aw0746-stage6b-train-sweep.mjs` |
620
- | `_aw0746-stage7-twin.mjs` | **17 / 0** (2026-09-25, v0.7.49 packaged build, real DAQ + real model) | real samples → TwinSnapshot `fresh=true` → 65 real VirtualTrials (12 safe candidates, `candidateExecuted=false`) → 12-check recommendation gate **write_eligible** → verdict written back to the model as `twinEligibility` → `mpc_optimize` upgrades to **precise_search** → **0 DCW writes** throughout | `AW_BASE=<base> AW_REQUIRE_MODEL=1 node scripts/_aw0746-stage7-twin.mjs` |
621
- | `_aw0746-stage6c-jobsmoke.mjs` | **5 / 0** (2026-09-25, v0.7.49 packaged build) | AML job path: inline `code` accepted (no `workspace/train.py` required) → job reaches a terminal state → training logs/ONNX traces → experiment plus per-check gates persisted | `AW_BASE=<base> node scripts/_aw0746-stage6c-jobsmoke.mjs` |
622
- | `_aw0748-failclosed-probe.mjs` | **7 / 0** (2026-09-25, v0.7.49 packaged build) | hard-constraint **fail-closed** regression: `auto_daq` builds a snapshot from real bindings → a mappable `weight` constraint evaluates normally → an unmappable `part_weight` constraint is judged not passed with a precise detail (v0.7.47 passed it falsely) → an empty trajectory is also judged not passed | `AW_BASE=<base> node scripts/_aw0748-failclosed-probe.mjs` |
623
- | `_aw0748-mock-closedloop.mjs` | **13 / 0** (2026-09-25, v0.7.49 packaged build, in-process `mock`, no quota) | scheduler closed-loop regression: create a mock channel → the root task is genuinely dispatched and closed → `[mock:complex]` forces delegation into child tasks → the parent closes after they finish → **the second and third root tasks are dispatched too** (before the fix the lead was unloaded while idle, `cr.scheduler` became null and later root tasks only landed in the DB, sitting in SUBMITTED until `ROOT_TIMEOUT`) → the tool bridge explicitly rejects host tools for mock | `AW_BASE=<base> node scripts/_aw0748-mock-closedloop.mjs` |
624
- | Industrial bench — integrated | **83 / 83 checks, hard gate green** (2026-09-21) | five-protocol five-line bench: connectivity, sampling into Timescale, governed writes, governance, agent closed loop, semantic parameter layer | `node bench/pipeline.mjs --profile integrated` |
625
- | Multi-scenario closed loop | 4 scenarios · closed loops reached (2026-09-21) | injection-molding weight-window tuning · A²/O wastewater compliance with energy minimum · continuous-annealing quality window vs throughput · BOPET line mission | `node bench/scenarios.mjs --scenarios injection,wwtp,anneal` |
626
- | Line permissions / audit-negative | 21 / 21 + 9 / 9 (2026-09-12) | three-state line grants with human-readable 403s, binding-subject validation, revocation convergence, unauthenticated WS receives zero telemetry | `node scripts/_dbg-perms-e2e.mjs <base> <adminPass>` · `node scripts/_dbg-audit-neg-e2e.mjs <base> <adminPass>` |
627
- | Render regression | 30 / 30 (2026-09-12) | DAQ table integrity (row count aligned with the API), WS-driven row updates, filters, detail page, 3D town + model library, 7-page smoke, zero page errors | `node scripts/_dbg-render-regression.mjs <base> <email> <pass>` |
628
- | AML auto-modeling | 25 / 0 (2026-09-24, deterministic trainer) | dataset build → cross-recipe refusal → job submit → gates → promotion guards → prediction guards → audit; `--real` adds the uv/torch runtime | `node node_modules/tsx/dist/cli.mjs --tsconfig .nuxt/tsconfig.server.json scripts/e2e-aml.ts` |
629
- | Offline unit/property suites | all green | AEP event index (`test-events-index`), LRU, data-root split (`test-data-root`), log flooding, rollback index, plugin hardening, task lease fencing (`test-task-lease-fencing`), CLI exit codes (`test-cli-exit`), SDK surface (`test-sdk-surface`) | `node scripts/test-<name>.mjs` (TS suites via tsx) |
630
-
631
- The historical **v0.7.20** acceptance baseline — *156 assertions, 0 failures* — is archived in
632
- [`docs/audit/e2e-2026-09-07.md`](./docs/audit/e2e-2026-09-07.md). Perf probing:
633
- `scripts/_dbg-render-perf.mjs`.
634
-
635
- ---
636
-
637
- ## Project layout
638
-
639
- ```
640
- AgentWorkShop/
641
- ├── bin/ · cli/ # aw CLI — command registry · built-in commands · config engine
642
- ├── app/ # Nuxt 4 frontend (srcDir)
643
- │ ├── pages/ # / · /workshop · /workshop/agents · /workshop/teams
644
- │ │ # /workshop/channel-templates · /workshop/schedules · /workshop/w/:id
645
- │ │ # /town · /daq · /daq/:id · /dcw · /dcw/:id
646
- │ │ # /aml · /operations · /monitor · /logs · /permissions
647
- │ │ # /plugins · /users · /tokens · /settings
648
- │ ├── components/workshop/ # timeline · lanes · task board · memory panel · 3D town
649
- │ └── stores/composables/ # Pinia + AEP client
650
- ├── server/
651
- │ ├── api/ # REST + WS + A2A + MCP routes
652
- │ ├── services/workshop/
653
- │ │ ├── runtime/ # manager · scheduler-loop · task-engine · memory · mailbox
654
- │ │ ├── agents/ # AgentInterface: 14 engines (+ industrial tools)
655
- │ │ ├── daq/ dcw/ aml/ # edge runtimes · drivers · bus · storage · modeling lab
656
- │ │ └── db/ # repos over node:sqlite
657
- │ ├── mcp/ # MCP server (25 tools, in-process workshop face)
658
- │ ├── plugins-builtin/ # plugins shipped with the package (serial-bridge · rag-bridge · diag-bridge · twin-injection-default)
659
- │ └── plugins/ # runtime assembly (singletons)
660
- ├── mcp/ # aw mcp — zero-dependency stdio MCP gateway (38 tools, instance auto-discovery)
661
- ├── sdk/ # agentworkshop/sdk — plugin context, hook bus, REST client, browser SDK
662
- ├── tui/ # terminal workbench (aw tui)
663
- ├── shared/
664
- │ └── config/ # schema.json (119 setting descriptors) + engine (merge/validate/persist) + path resolver
665
- ├── config.yml # factory defaults (read at build/start; version comes from package.json)
666
- ├── .AgentWorkShop/ # config root in a checkout — prompts (versioned) + runtime overrides · data · logs · commands (git-ignored)
667
- ├── data/ # legacy pre-migration location (auto-migrated into the config root)
668
- └── scripts/ # launchers · home bootstrap · E2E · verification suites
669
- ```
670
-
671
- ## Tech stack
672
-
673
- | Layer | Tech |
674
- |---|---|
675
- | Framework | [Nuxt 4](https://nuxt.com) + Nitro (WebSocket) |
676
- | UI | Vue 3.5 · Pinia · Ant Design Vue · UnoCSS · Three.js · ECharts |
677
- | Language | TypeScript 5.7 across the stack; `shared/` used by both sides |
678
- | CLI | Node ESM CLI with a pluggable command registry (`bin/aw.mjs`) |
679
- | Persistence | `node:sqlite` (zero native deps) + FTS5 + optional `sqlite-vec`; TimescaleDB for time-series |
680
- | Validation | `zod` at every message boundary |
681
- | Interop | `@modelcontextprotocol/sdk` · A2A (JSON-RPC 2.0) · AEP v1 (in-house WS protocol) |
682
- | Field bus | `modbus-serial` · `node-opcua` · `mqtt` |
683
-
684
- ## Development
685
-
686
- ```bash
687
- pnpm dev # dev server (port from effective config)
688
- pnpm cli … # the CLI in-repo: pnpm cli config list
689
- pnpm tui # terminal workbench against a running instance
690
- pnpm build && pnpm start
691
- pnpm typecheck # wrapper: prepare → strip the stale volar entry → vue-tsc -b
692
- pnpm lint
693
- pnpm test:api-live # API suite against a running server
694
- node scripts/e2e-full-closedloop.mjs # full closed loop (server must be running)
695
- node scripts/e2e-crash-cycle.mjs # crash → restart → redelivery, manages its own instance
696
- node scripts/test-sdk-surface.mjs # SDK export-surface guard
697
- ```
698
-
699
- > Two test-runner notes worth knowing before you debug a red suite: (1) `pnpm typecheck`
700
- > runs [`scripts/typecheck.mjs`](./scripts/typecheck.mjs) rather than bare `nuxt typecheck`,
701
- > because Nuxt 4.5 still writes the `vue-router/volar/sfc-route-blocks` compiler plugin into
702
- > the generated tsconfig while vue-router 4.6 no longer exports it — bare vue-tsc dies while
703
- > loading the config, so the check never actually ran; (2) TypeScript suites that import real
704
- > route handlers (e.g. `scripts/e2e-memory-system.ts`) need the pure-node path
705
- > `node --experimental-transform-types --import ./scripts/_audit/ts-register-hook.mjs <suite>.ts`,
706
- > which maps the Nuxt `#imports` virtual module onto a shared-config stub.
707
-
708
- The docs site lives in `docs/site/` (VitePress) and is deployed to GitHub Pages by
709
- [`.github/workflows/deploy-docs.yml`](./.github/workflows/deploy-docs.yml):
710
-
711
- ```bash
712
- cd docs/site && npx vitepress dev # preview locally
713
- cd docs/site && npx vitepress build # production build → .vitepress/dist
714
- ```
715
-
716
- The workflow syncs `docs/{cli,plugins,sdk}.md` (and their `.en.md` twins) into the site before
717
- building, so those files are the single source of truth for the single-page guides.
718
-
719
- ## Deployment (production)
720
-
721
- Target shape: **single instance on an intranet host, TLS terminated by a reverse proxy**.
722
- The server intentionally ships no TLS listener of its own — put caddy/nginx in front (they
723
- also give you HTTP→HTTPS redirect, access logs and a second rate-limit layer).
724
-
725
- ```bash
726
- # 1) build + run (prod entry refuses to boot without .output)
727
- pnpm build
728
- NUXT_SESSION_PASSWORD=$(node -e "console.log(require('crypto').randomBytes(24).toString('hex'))") \
729
- PORT=3000 node scripts/start.mjs
730
- ```
731
-
732
- **TLS reverse proxy.** caddy (automatic certificates, WebSocket pass-through built in):
733
-
734
- ```caddy
735
- aw.example.com {
736
- reverse_proxy 127.0.0.1:3000
737
- }
738
- ```
739
-
740
- nginx (note the WebSocket `Upgrade` headers — the workbench, HITL panels and live logs are all WS-driven):
741
-
742
- ```nginx
743
- server {
744
- listen 443 ssl;
745
- server_name aw.example.com;
746
- # ssl_certificate / ssl_certificate_key ...
747
- location / {
748
- proxy_pass http://127.0.0.1:3000;
749
- proxy_http_version 1.1;
750
- proxy_set_header Upgrade $http_upgrade;
751
- proxy_set_header Connection "upgrade";
752
- proxy_set_header Host $host;
753
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
754
- proxy_read_timeout 300s;
755
- }
756
- }
757
- ```
758
-
759
- After the whole site is HTTPS-only, enable `security.hstsEnabled` (runtime settings) so
760
- responses carry `Strict-Transport-Security`.
761
-
762
- **Process supervision.** `scripts/start.mjs` already spawns the server as a child with
763
- crash back-off restart, a 30 s health probe and a heap-watermark proactive restart — put
764
- *that* under a service manager so the supervisor itself survives reboots:
765
-
766
- ```ini
767
- # /etc/systemd/system/agentworkshop.service
768
- [Service]
769
- WorkingDirectory=/opt/agentworkshop
770
- Environment=NUXT_SESSION_PASSWORD=<generated-secret>
771
- Environment=PORT=3000
772
- ExecStart=/usr/bin/node scripts/start.mjs
773
- Restart=always
774
- User=aw
775
- [Install]
776
- WantedBy=multi-user.target
777
- ```
778
-
779
- On Windows use `nssm install AgentWorkShop "C:\Program Files\nodejs\node.exe" scripts\start.mjs`.
780
- Do **not** run a second instance against the same config root — a single-instance lock
781
- (`.runtime/aw.lock` with heartbeat) makes the newer process take over and the older one exit.
782
-
783
- **Auth hardening for production.** `security.allowRegistration` defaults to **false**:
784
- with the first admin in place both register endpoints return 403, accounts are created by
785
- an admin, and admin-created accounts are flagged `mustChangePassword` — the workbench
786
- forces a password change at first login (admin password resets flag it again and revoke
787
- all existing sessions). The bootstrap path is unaffected: with zero users the first
788
- registered account still becomes the admin.
789
-
790
- **Backups and restore.** `server/plugins/backup.ts` snapshots, every 24 h (keep 7) into
791
- `<config root>/.AgentWorkShop/data/backups/`:
792
-
793
- - the three SQLite databases (`workshop/users/daq-timeseries.sqlite`, WAL-checkpointed, atomic rename)
794
- - all JSON stores plus `config.yml` / `runtime-settings.json` (`files-<stamp>/`)
795
- - local object store + exports `daq-objects/` and `daq-exports/` (`objects-<stamp>/`) —
796
- skipped with a log line when larger than `AW_BACKUP_OBJECTS_MAX_MB` (default 200 MB)
797
- - a `manifest-<stamp>.json` per run; TimescaleDB/MinIO **docker volumes are not covered** —
798
- back those up with `pg_dump` / `mc mirror` or volume snapshots
799
-
800
- Restore drill (do it once before go-live): stop the server → copy `backups/` aside →
801
- rebuild a data directory from the newest `*.bak` + `files-*` + `objects-*` bundles →
802
- start → check `/api/health`, admin login, lines/recipes present. `BACKUP_DISABLED=1`,
803
- `BACKUP_INTERVAL_HOURS` and `BACKUP_KEEP` tune the job.
804
-
805
- **Production checklist.** generated `NUXT_SESSION_PASSWORD` (boot refuses known dev
806
- secrets) · `security.allowRegistration=false` (default) · TLS via reverse proxy + HSTS ·
807
- service manager installed · restore drill passed · `/api/health` + `/api/metrics` wired
808
- into monitoring · `AW_HEAP_LIMIT_MB` sized for the host · `AW_RATE_LIMIT_OFF` **unset**
809
- (the built-in rate guard must stay on) · `AW_BENCH_MODE` **unset** (write-control
810
- interlocks and rate limits must stay fully engaged).
811
-
812
- **The benchmark switch `AW_BENCH_MODE=1` is for experiments only — never in
813
- production.** It serves the `bench/` paper pipeline (E1a four-arm ablation). When set
814
- to 1: the API rate guard is disabled entirely; online-exploration rate limits (per-step
815
- limit, 60 s minimum write interval, write-hold window) are waived wholesale; the write
816
- endpoint accepts an `x-aw-bench-arm` header to bypass soft interlock layers
817
- (no-interlock / no-readback / ungated; hard range and structural checks cannot be
818
- bypassed by design). The only correct production value is **unset**: the code compares
819
- strictly `=== '1'`, so the default is always the full arm. The flag is read at module
820
- load — confirm it is absent **before** the process starts (a misconfiguration warns at
821
- boot). `AW_RATE_LIMIT_OFF=1` only disables the API rate guard (write-control interlocks
822
- stay on) and must likewise remain unset in production.
823
-
824
- ## Research paper
825
-
826
- The platform's governance mechanisms are documented in a submission-ready manuscript —
827
- **"Grading Machine-Originated Plant Writes: Separately Inspectable Evidence for Industrial
828
- Agent Teams"** (IEEE Transactions on Industrial Informatics, anonymous review draft,
829
- 10 pages, IEEEtran). Source, compiled PDF and the five-seat review trail live in
830
- [`paper/tii/SUBMISSION-IEEE-TII/`](./paper/tii/SUBMISSION-IEEE-TII/). Every mechanism
831
- claim in the paper is backed by archives in this repository:
832
-
833
- - [`docs/benchmarks/`](./docs/benchmarks) — the October 2026 deployment-scale regression
834
- campaign: 7 pipeline executions, 600 checks, zero failed (per-run `report.md` /
835
- `benchmark.json` / `timeline.jsonl`), plus the admission-ablation companion run;
836
- - [`docs/experiments/`](./docs/experiments) — cast-film closed-loop experiment plan and
837
- results (the paper's Q3 deterministic loop);
838
- - [`docs/audit/`](./docs/audit) — acceptance waves (~1400+ real assertions) referenced
839
- by the evaluation section.
840
-
841
- Re-run the paper pipeline locally: set `AW_BENCH_MODE=1` and follow
842
- [`bench/PIPELINE.md`](./bench/PIPELINE.md).
843
-
844
- ## Roadmap
845
-
846
- | Capability | Status |
847
- |---|---|
848
- | Channel runtime, lead orchestration, 7-state task engine | Shipped |
849
- | Four entry points: WS (AEP v1) · MCP · A2A · REST | Shipped |
850
- | Persistent memory (FTS5 + optional vector hybrid) | Shipped |
851
- | Industrial stack: DAQ · DCW write control · lines/recipes/runs | Shipped |
852
- | Agent ↔ node binding + HITL approval + interlock | Shipped |
853
- | 3D digital-twin town · line operations UI · dashboards | Shipped |
854
- | Full-feature live E2E (agent reads/writes a real line, 23 checks) | Shipped |
855
- | Runtime configuration system: settings persistence · hot reload · settings UI | Shipped |
856
- | `aw` CLI: config · start/dev · init · register · doctor | Shipped |
857
- | Multi-harness registry: omp · codex · dsh · opencode subprocess engines | Shipped |
858
- | Six field protocols: Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + the built-in serial-bridge plugin (acquisition + write control) | Shipped |
859
- | Harness availability probing + dispatch-time engine checks (UI disable + 409) | Shipped |
860
- | Recipe versioning with attribution + non-destructive rollback (UI + agent tools) | Shipped |
861
- | Recipe-chain optimization loop: recipe_trial batch trials (no version) → adopt on progress → unified rollback with PLC restore | Shipped |
862
- | Channel-bound lines: read-only log/recipe/status access for all members, line brief injected into prompts | Shipped |
863
- | Agent self-audit: line_context / ops_log / recipe_log / recipe_versions / dcw_journal | Shipped |
864
- | Multi-harness parallel live E2E on a real protocol line (four engines, one line) | Shipped |
865
- | HITL approval flow verified over real OPC UA writes | Shipped |
866
- | Bilingual docs (简体中文 / English) with VitePress language switcher | Shipped |
867
- | Per-channel LLM provider/model selection from live harness catalogs | Shipped |
868
- | Configurable DAQ/TSDB cadences (sampling & query defaults + floors, live) | Shipped |
869
- | Team-scoped plugin switches (create-time pick + team dialog, per-channel tool injection) | Shipped |
870
- | Plugin hot management: `/plugins` page + `aw plugin list/enable/disable` | Shipped |
871
- | Rendering perf pass (v0.7.27): DAQ main-thread blocking −90%, twin −69%, adaptive quality restored to top tier; `window.__townStats` instrumentation | Shipped |
872
- | Plugin system v2: browser panel injection, plugin-scoped settings/groups, plugin i18n, host runtime services (`ctx.services`/`ctx.daq`/`ctx.omp`) | Shipped |
873
- | Instrument Glass material layer (v0.7.36): three-tier translucent materials, vibrancy, specular edges, spring motion, per-page route transitions | Shipped |
874
- | Realtime pipeline optimizations: DAQ frame indexing O(n²)→O(n), incremental per-agent event index, chart in-place updates, size-aware JSON persistence | Shipped |
875
- | AML auto-modeling lab: dataset build · job orchestration (uv-managed Python) · leaderboard · promotion gates · 14 agent tools | Shipped |
876
- | Claude Agent SDK adapter — resident sessions with same-turn steer and `canUseTool` HITL | Shipped |
877
- | Semantic parameter mapping: `param_control`/`param_read` by process parameter, four-layer write bound, tuning loop (`dcw_judge`/`dcw_rollback`) | Shipped |
878
- | Channel group chat: requests become trackable jobs; native HITL (`omp` ask → approval → receipt) | Shipped |
879
- | Scheduled tasks: `interval` / `daily`, per-run history, busy-guard + consecutive-failure circuit breaker | Shipped |
880
- | Root task queue (FIFO, visible queue positions) + assignment generation & execution-lease fencing | Shipped |
881
- | Supervision watchdog + harness continuity (`persistent`/`per_turn`, session-reuse lease with restart reasons) | Shipped |
882
- | Channel process memory: deterministic event contracts, canonical root summary, durable outbox + compensation worker | Shipped |
883
- | Runtime observability: `GET /api/system/monitor` team metrics, each with a documented rollback switch | Shipped |
884
- | Industrial bench: integrated profile (83 checks, hard gate) + multi-scenario closed loops (injection / wwtp / anneal / BOPET) + quality-target optloop | Shipped |
885
- | Full-coverage acceptance wave matrix on a production build (~1100+ real assertions, 2026-09-24) | Shipped |
886
- | Twin provider plugin SDK: hot-loadable physics/scene/objective/training/solver providers via `ctx.twin`, generation-staged reload with lease draining, bundled provider shipped through the same external contract | Shipped |
887
- | Any-scene hybrid-twin modeling loop: scene discover → compile → freeze → physics-spec draft/validate/compile → reference-trainer job (physics calibration + residual ensemble + conformal UQ), model-backed trials, continuous-calibration worker | Shipped |
888
- | Two-mode optimization loop: dedicated `aml-training` / `aml-optimization` channel templates, mutually exclusive tool faces, exploration ↔ production modes with governed read-back-paired micro-writes | Shipped |
889
- | Line operations feed: `/operations` page + workshop-console panel, nine-category operation timeline, structured write diffs, closed-loop phase inference | Shipped |
890
- | External MCP gateway: `aw mcp` stdio server (38 tools), instance auto-discovery, `mcp.enabled` runtime gate | Shipped |
891
- | Configurable system timezone (`time.timeZone`, live) + recipe `stepLimit` per-parameter single-step bound + recipe `description` metadata | Shipped |
892
- | Production hardening: TLS, MQTT auth, OPC UA sign+encrypt defaults, structured audit log | Planned |
893
- | Edge deployment shape: standalone edge-agent + central broker | Planned |
894
- | Alarm outbound delivery (email/webhook) + ack workflow | Planned |
895
- | CI pipeline (typecheck + lint + e2e) — docs deployment already runs on GitHub Actions | Planned |
896
- | License: Apache 2.0 (permissive, commercial & production use allowed) | Shipped |
897
-
898
- ## License
899
-
900
- AgentWorkShop is an independent project and is **not an official product of Anthropic** or any LLM vendor. It integrates with agent harnesses (e.g. `omp`) through their public interfaces.
901
-
902
- **AgentWorkShop is open-source software, licensed under the [Apache License 2.0](./LICENSE).**
903
-
904
- - **Permitted** — personal study, research, hobby projects, teaching, and use by noncommercial organizations (charities, education, public research, government).
905
- - **Not permitted without prior written permission** — any **commercial use**: selling, paid services, integrating into commercial products, or production use serving a business. Commercial licenses are available from the copyright holder.
906
- - **When you redistribute** the software, you must pass through the `Required Notice` line and these terms.
907
-
908
- For commercial licensing, contact: [GitHub @kingdol666](https://github.com/kingdol666) · kingdol6080@gmail.com
909
-
910
- <div align="center">
911
-
912
- <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
913
- <picture>
914
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
915
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
916
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
917
- </picture>
918
- </a>
919
-
920
- </div>
921
-
922
- ---
923
-
924
- ## Contributing
925
-
926
- Issues and pull requests are welcome. Before opening a PR:
927
-
928
- 1. **Read the contract you are touching** — [`docs/plugins.md`](./docs/plugins.md) for the extension surface, [`docs/sdk.md`](./docs/sdk.md) for the programming client, [`docs/cli.md`](./docs/cli.md) for the command registry.
929
- 2. **Run the guards locally**:
930
-
931
- ```bash
932
- pnpm typecheck # vue-tsc across app + server + shared
933
- pnpm lint # eslint 9, zero warnings expected
934
- node scripts/e2e-full-closedloop.mjs # full closed loop, server must be running
935
- node scripts/test-sdk-surface.mjs # SDK export surface must not drift
936
- node scripts/check-docs-sync.mjs # docs/site pages stay in sync with docs/*.md
937
- ```
938
-
939
- 3. **Keep commits conventional** — `commitlint` runs on `commit-msg` (`feat:`, `fix:`, `docs:`, `refactor:`, `perf:`, `test:`, `chore:`), and `lint-staged` fixes staged JS/TS/Vue on commit.
940
- 4. **Add a test for behavior you change.** The repo leans on live E2E scripts under `scripts/` rather than mocks — a new industrial path should be provable against a running instance.
941
-
942
- > [!TIP]
943
- > `aw doctor` checks your environment end to end (Node version, config root, port availability, SQLite, optional Docker services) before you file a bug — it answers most "it does not start" reports immediately.
944
-
945
- ## Security
946
-
947
- Please **do not** open a public issue for a vulnerability. Report it privately through [GitHub Security Advisories](https://github.com/kingdol666/AgentWorkShop/security/advisories/new) with a reproduction and the affected version.
948
-
949
- AgentWorkShop drives real equipment when you point it at real equipment: review `config.yml` interlocks, safe ranges and HITL settings before connecting a live PLC. The default posture is advisory — writes are interlocked, approved and read back — but the plant-side logic is always the final veto.
950
-
951
- ---
952
-
953
- <div align="center">
954
-
955
- **If this project is useful to you, a ⭐ helps other people find it.**
956
-
957
- <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
958
- <picture>
959
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
960
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
961
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
962
- </picture>
963
- </a>
964
-
965
- <br />
966
-
967
- **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Guide](https://kingdol666.github.io/AgentWorkShop/guide/getting-started)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)** · **[CLI](./docs/cli.md)** · **[中文](./README-zh.md)**
968
-
969
- <sub>Built with Nuxt 4 · Vue 3 · TypeScript · <code>node:sqlite</code> — supervisory layer, second-level soft real-time.<br />
970
- Time-critical loops stay in the PLC.</sub>
971
-
972
- </div>
1
+ <div align="center">
2
+
3
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/hero.png" alt="AgentWorkShop — agent teams driving a real production line" width="100%" />
4
+
5
+ <br />
6
+
7
+ # AgentWorkShop
8
+
9
+ **Where AI agent teams meet the production line.**
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/field%20bus-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/plugins-hot%20reload-8b5cf6?logo=puzzle&logoColor=white)](./docs/plugins.md)
26
+ [![Docs](https://img.shields.io/badge/docs-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
+ **[简体中文](./README-zh.md)** · **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Releases](https://github.com/kingdol666/AgentWorkShop/releases)** · **[Changelog](./changelog.md)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)**
30
+
31
+ <sub><b>v0.7.71</b> · 14 engines · 6 field protocols (5 built-in + serial plugin) + MES REST integration (mirror & live) · data-analysis ledger with line-scoped permissions · process optimizer (process model → AML → OSQP solver → governed dispatch) · per-call tool parameter/binding preflight · 92 host tools · 126 runtime settings · bilingual docs (简体中文 / English)</sub>
32
+
33
+ <br />
34
+
35
+ *A configuration-driven platform where **AI agent teams** and an **industrial digital twin** share one runtime — agents query real telemetry, issue supervisory setpoints through human-approved write control, and every event streams live to a 3D twin.*
36
+
37
+ </div>
38
+
39
+ > [!IMPORTANT]
40
+ > **Positioning: supervisory layer.** AgentWorkShop is a *supervisory* (SCADA-adjacent) layer for production-line management, digital twins, DAQ and agent orchestration, operating at **second-level soft real-time**.
41
+ > It is **not** a hard real-time controller: any time-critical loop (**< 10 ms**, interlocks, safety, servo) **must live inside the PLC**. Setpoints written here are advisory — plant-side logic may veto.
42
+
43
+ ---
44
+
45
+ <table>
46
+ <tr>
47
+ <td width="33%" valign="top">
48
+
49
+ **FIGURE INDEX**
50
+
51
+ `FIG.01` closed loop ·<br/>
52
+ `FIG.02` DAQ console ·<br/>
53
+ `FIG.03` line operations ·<br/>
54
+ `FIG.04` digital twin ·<br/>
55
+ `FIG.05` dashboard ·<br/>
56
+ `FIG.06` responsive
57
+
58
+ </td>
59
+ <td width="33%" valign="top">
60
+
61
+ **JUMP TO**
62
+
63
+ [What is this?](#what-is-this) · [Highlights](#highlights)<br/>
64
+ [Interface](#the-interface) · [Architecture](#architecture)<br/>
65
+ [Quick start](#quick-start) · [Configuration & CLI](#configuration--cli--config-driven-by-design)<br/>
66
+ [Industrial stack](#the-industrial-stack-in-detail) · [Usage](#usage)<br/>
67
+ [Verification](#verified-end-to-end) · [Project layout](#project-layout)<br/>
68
+ [Tech stack](#tech-stack) · [Development](#development)<br/>
69
+ [Roadmap](#roadmap) · [License](#license)
70
+
71
+ </td>
72
+ <td width="33%" valign="top">
73
+
74
+ **AT A GLANCE**
75
+
76
+ Supervisory layer, second-level soft real-time<br/>
77
+ 14 engines · 4 entry points<br/>
78
+ 6 field protocols (5 built-in + serial plugin, read + write)<br/>
79
+ 7-state task machine · root queue + lease fencing<br/>
80
+ Group chat jobs · scheduled tasks · HITL<br/>
81
+ FTS5 + vector memory · hot-reloadable plugins<br/>
82
+ SDK · CLI · TUI · external MCP · ~1100+ acceptance assertions
83
+
84
+ </td>
85
+ </tr>
86
+ </table>
87
+
88
+ ---
89
+
90
+ ## Documentation
91
+
92
+ Docs are bilingual — the [VitePress site](https://kingdol666.github.io/AgentWorkShop) ships a language switcher (简体中文 / English) across every section. Deep-dive pages ship in this repo too, and the CLI copies them into the published tarball:
93
+
94
+ | Topic | Online | In-repo | What it covers |
95
+ |---|---|---|---|
96
+ | **Getting started** | [Guide](https://kingdol666.github.io/AgentWorkShop/en/guide/getting-started) | `docs/site/en/guide/` | install → first run → first agent × line session, configuration, DAQ protocols, DCW read/write, HITL, recipe versioning, multi-harness teams, line permissions, AML |
97
+ | **Plugin development** | [Plugin guide](https://kingdol666.github.io/AgentWorkShop/en/plugins/) | [`docs/plugins.en.md`](./docs/plugins.en.md) | the full extension contract: three scopes, `index.mjs` manifest, `ctx` server/browser surface, `settings`/`groups` declarations, lifecycle events, i18n, panels, team-scoped switches, a real example |
98
+ | **SDK** | [SDK guide](https://kingdol666.github.io/AgentWorkShop/en/sdk/) | [`docs/sdk.en.md`](./docs/sdk.en.md) | `agentworkshop/sdk` as a programming client (platform REST client with envelope handling) and as the plugin extension base; TypeScript types; browser-side SDK |
99
+ | **CLI** | [CLI manual](https://kingdol666.github.io/AgentWorkShop/en/cli/) | [`docs/cli.en.md`](./docs/cli.en.md) | all 15 `aw` commands, global options, exit codes, dual-mode path model, the command-registration system, maintainer publish guide |
100
+ | **AML** | [AML guide](https://kingdol666.github.io/AgentWorkShop/en/guide/aml) | [`docs/aml.md`](./docs/aml.md) | auto-modeling lab: dataset build, job orchestration, model registry, promotion gates, agent tools |
101
+ | **TUI** | — | [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md) | terminal workbench: channels, agents, tasks, live monitor, HITL answering |
102
+ | **Multi-harness architecture** | — | [`docs/multi-harness-architecture.md`](./docs/multi-harness-architecture.md) | engine taxonomy, normalized session contract, provider/model catalog, failure modes |
103
+
104
+ ---
105
+
106
+ ## What is this?
107
+
108
+ AgentWorkShop started as a **multi-agent software workshop** — channels of coding agents with a lead-agent scheduler, a 7-state task machine, persistent memory, and four interoperable entry points (WebSocket / MCP / A2A / REST).
109
+
110
+ It grew an **industrial half**: a full data-acquisition and write-control stack (Modbus TCP / OPC UA), production lines with recipes and batch runs, a 3D digital-twin town, an **auto-modeling lab** (dataset → training job → leaderboard → gated promotion) — and the bridge that makes it unique: **agents can be granted bound, permission-scoped access to real industrial nodes**, query their live telemetry with physical semantics attached, and drive write operations through an interlock → human-in-the-loop → readback pipeline.
111
+
112
+ It is also **extensible by design**: a self-contained plugin can enhance the server (hooks, routes, agent tools, DAQ drivers, config groups) and the browser (panels, i18n) at the same time, and the same surfaces are available to ordinary programs through the SDK — see [`docs/plugins.md`](./docs/plugins.md) and [`docs/sdk.md`](./docs/sdk.md).
113
+
114
+ The result: submit a goal like *"analyze the melt temperature trend and optimize the setpoint"* — and an agent team reads real sensor history, computes statistics, proposes a new setpoint, waits for your approval in the HITL panel, writes it to the PLC, verifies the readback, and reports the numbers back. **End to end, verified by automated E2E.**
115
+
116
+ <div align="center">
117
+
118
+ ### FIG.01 — The closed loop
119
+
120
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-01-closedloop.gif" alt="An agent team reads live telemetry, proposes a setpoint, waits for approval, writes to the PLC and verifies the readback" width="88%" />
121
+
122
+ <sub><b>Goal → read → compute → approve → write → readback → report.</b><br/>
123
+ Recorded against a running instance: real DAQ history, real write control, real HITL approval.</sub>
124
+
125
+ </div>
126
+
127
+ > [!NOTE]
128
+ > Every figure in this README is a recording or screenshot of a **running** instance — not a mockup. The numbers on screen come from seeded industrial data flowing through the same code paths the product ships.
129
+
130
+ <div align="center">
131
+
132
+ ### 🎬 Live demo (4 min 11 s, English voice-over & captions)
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 live demo: DAQ console, governed write + read-back, serial protocol plugin, agent team execution, closed-loop trend and the 3D digital twin" width="86%" /></a>
135
+
136
+ <sub><b>Click the cover to watch the full demo.</b> Real PLC simulator, real serial-port enumeration, real agent-team execution — no cuts, no fakes.<br/>Scenes: dashboard → live DAQ → governed write & read-back → serial protocol plugin → agent team execution → closed-loop trend → 3D digital twin.</sub>
137
+
138
+ </div>
139
+
140
+ ---
141
+
142
+ ## Highlights
143
+
144
+ #### Agent team runtime
145
+
146
+ | Capability | Why it matters |
147
+ |---|---|
148
+ | **Lead-agent orchestration** | Each channel has one lead: decomposes goals, dispatches to idle workers, reassigns failures, judges goal satisfaction. LLM decisions with a deterministic rule-engine fallback — the system never stalls. |
149
+ | **Three execution modes** | `goal` (satisfaction judging) · `loop` (fixed-interval replay) · `pipeline` (ordered stages). 7-state task machine with progress, artifacts and full history. |
150
+ | **Harness-agnostic** | One `AgentInterface`, **14 engines** in three transport classes: **in-process** — `mock` (no LLM), `claude` (Claude Agent SDK, resident session, same-turn steer); **persistent session over a protocol** — `omp` (RPC subprocess), `codex` (app-server JSON-RPC), `dsh` / `qwen` / `hermes` (ACP), `opencode` (serve + HTTP/SSE); **headless CLI with a structured event stream** — `gemini` (stream-json), `copilot` (JSONL), `cursor` (stream-json), `crush` (non-interactive run), `goose` (stream-json), `pi` (`-p --mode json`). The platform never knows which one runs. |
151
+ | **Per-channel LLM selection** | Each channel picks a **harness → provider → model (+effort)** triple from the harness's live catalog (e.g. `zhipu-coding-plan/glm-5.3-flash` on omp). Members inherit it unless they override — mixing harnesses in one team is a first-class setup, not a workaround. |
152
+ | **Harness availability check** | `GET /api/workshop/harnesses` probes each engine's CLI on PATH. The UI disables not-installed engines, and dispatch is hard-checked at every entry point. |
153
+ | **Stall-safe supervision & task governance** | Submitted goals enter a **FIFO root queue** with visible queue positions. Queued roots **never burn their execution budget while waiting** — the budget starts at admission, and a deterministic **lead-rescue sweep** revives starved entries (stopped/idle lead runtime + fresh assignment) before a human ever notices. A **supervision watchdog** distinguishes *stuck* from *slow* — agent tool invocations count as liveness, so healthy long-running industrial work survives while genuinely stalled tasks surface to the lead. Every assignment carries a **generation + execution lease**, so events from a superseded worker are dropped by admission, not reconciled by hope. |
154
+ | **Harness continuity** | Engines declare a continuity mode (`persistent` / `per_turn`); persistent sessions are reused across turns under a read-only continuity lease (pid / session / reuse count / last restart reason), and a server restart restores what can be restored instead of silently re-forking. |
155
+ | **Channel group chat & native HITL** | The channel timeline is a real group chat: a member's request becomes a **trackable job** (not a lost message), and engines with a native ask surface (e.g. `omp`) route HITL questions through the platform — approve once, the engine continues with the receipt. Member permissions and notifications are first-class. |
156
+ | **Scheduled tasks** | Any channel task can run on a **schedule** — fixed `interval` (60 s floor) or `daily` at a set time — managed from `/workshop/schedules` or the REST API, with per-run history, busy-guard (no overlapping runs of the same schedule) and channel-scoped visibility. |
157
+ | **Persistent memory & channel process memory** | Private + channel-shared domains; FTS5 with CJK segmentation, optional vector hybrid recall, token-budgeted injection. On top sit **process memories**: deterministic root/child/lead event contracts, a canonical root summary, and a durable outbox (dead-letter + compensation worker) so the story of a goal survives restarts. |
158
+ | **Four entry points** | One manager behind every door: **WS** (AEP v1 event stream with seq-resume), **MCP** (25 in-process tools), **A2A** (JSON-RPC 2.0 + AgentCard), **REST**. |
159
+
160
+ #### Industrial stack
161
+
162
+ | Capability | Why it matters |
163
+ |---|---|
164
+ | **Six field protocols** | Modbus TCP, Modbus RTU-over-TCP (serial gateway), OPC UA, MQTT and HTTP/REST, plus a **built-in serial plugin** (direct RS-232/485: Modbus RTU + ASCII line) — acquisition **and** write-control drivers with connection pools, classified error messages and per-driver connection tests. `mock` covers demos/CI. Protocols are plugins: `ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` inject straight into the frontend protocol dropdown and dynamic forms (⌁ badge) — when a protocol ships self-describing metadata, the frontend forms render with zero changes. |
165
+ | **Agent teams, industrial scope** | Agents bind to DAQ/DCW nodes and see semantic cards — physical meaning, units, safe range, recipe window — never raw registers. |
166
+ | **Human-approved write control** | DCW writes flow through **safe-range ∩ recipe-window** interlock → optional **HITL approval** → PLC write → **readback verification** → signed write history. |
167
+ | **Read-write DCW channels** | Every control node also **reads its PLC value back** through the same calibration path it writes with: periodic + on-demand + agent reads surface **SET vs ACT** side by side — passive observation, never blocked by write interlocks. |
168
+ | **Recipe versioning & governance** | Parameter changes are versioned with attribution (user/agent/system + operator + reason). Roll back to any revision or the last-good batch — non-destructively. Stale-node params are skipped and clearly marked. |
169
+ | **Recipe-chain optimization loop** | Agents optimize through recipe management, the way human process engineers do: `recipe_trial` batch-dispatches multi-parameter candidates **without writing a version** → re-measure → progress adopts via `recipe_update` (same recipe id, version +1) → regression triggers a **unified rollback** (`recipe_rollback` with `dispatch: true` = definition revert + batch restore to the PLC). Single-knob direct dispatch is out of the loop; trials run under four-layer bounds and a per-line cadence. |
170
+ | **Channel-bound lines (read-only grant)** | A channel can bind a line: every member reads that line's ops logs, recipe history and live status without any node binding (tool outputs are tagged "channel-bound, read-only"), while writes still require node authorization. The line brief is injected into member prompts; binding changes hot-recycle member runtimes. |
171
+ | **Data-analysis ledger (v0.7.62)** | Agents persist analysis results as first-class records: native `analysis_save` / `analysis_query` host tools write a dedicated `analysis_reports` table keyed by line + recipe + time window, with conclusions, metrics, data sources and actor attribution. The ledger is append-only for agents; humans revise via REST with editor attribution. A dedicated `/analysis` page streams new reports live (ops-log WS), filters by line / recipe / time / keyword, and edit/delete are permission-gated (`operate` line mode; admin-only delete). External analysis plugins integrate through the same ledger — `diag_run` runs IDD analyses in the background across **six intents** (deep root-cause diagnosis, line stability report, quick screening, DOE analysis, tuning-experience mining, optimization campaign — scenario prompts injected per intent), returns a `task_id` immediately, tracks progress via `diag_status`, and the finished report lands in the ledger via `analysis_save`. |
172
+ | **Data workbench & EDA studio (/data · /studio)** | One-stop data plane: multi-field compound queries (line/node/time-window/batch/downsampling guardrails), bulk export (manifest + merged.csv job ledger), and **three data shapes** — scalars, array profiles (thickness scans) and CCD images — mirrored via protocol collection or external `ingest` push, streamed live over WS. The EDA studio adds charts and grid dashboards, **golden phase-referenced trajectories** with deviation scoring, **FDC features** (reference-band z scoring), **SPC control charts** (Nelson 1-8 / I-MR / EWMA / CUSUM), commonality analysis (four-factor lift), OCAP disposition records, virtual metrology (ensemble extrapolation with OOD rejection) and derived datasets (whitelisted operators) — all under line-scoped permissions and per-call reference preflight. |
173
+ | **Semantic parameter surface & tuning loop** | Every dispatchable write converges on the **recipe face** (`recipe_update` / `recipe_apply` / `recipe_trial`, each gated by binding → HITL reason → active-run). Writes stay narrowed by the **four-layer bound** — node safe range ∩ parameter baseline bounds ∩ active product bounds ∩ active recipe window — and each adjustment opens a tuning record that `dcw_judge` must close (keep / rollback / uncertain), with `dcw_rollback` executing the undo. (v0.7.63 removed the legacy `param_control` / `param_read` / `dcw_read` direct-node tools — dead surface under permission model v2 — so the agent tool list stays clean.) |
174
+ | **Line operations** | Lines → products → recipes → batch runs. Recipe windows gate acquisition and interlock writes; every sample is tagged `product/recipe/run` for per-batch isolation. |
175
+ | **MES REST integration (two data paths)** | Production-management data joins the same governed workspace: a `mes-rest` node maps the MES API's catalog / current / history endpoints through **declarative request maps** (auth via `secretRef` → env token, never plaintext; hooks can post-process ingested data). Agents read it two ways — **live**: `mes_fetch` issues the mapped request and returns the API response (large windows paginate async into a `mesds-*` CSV dataset read via `mes_datasets` / `mes_dataset_read`; raw rows never enter the prompt); **mirrored**: an `http` DAQ node polls the same API into the local TSDB so `daq_query` serves it like any native node — and keeps serving it when the API is down. `mes_catalog` is line-scoped and fail-closed. |
176
+ | **Multi-modal DAQ frame pipeline** | Multi-point profiles (thickness/scanner) and CCD image frames flow through template sink pipelines: vectors & metadata into Timescale (`daq_frames`), pixels into object storage (MinIO, auto disk fallback); derived-metric thresholds ride the existing alarm chain. |
177
+ | **Production hardening (v0.7.58)** | Hold-heartbeat lifecycle fixed — failed writes never occupy the setpoint (no phantom re-dispatch), driver/connection/line changes clear the value, line stop suspends hold automatically; silent mock fallback blocked (unknown protocols fail loudly, plugin unload can't fake success); frame pixel sha256 fingerprints + day-directory object GC (DB cross-check before delete); Timescale daily chunks + columnstore compression (TSL); heap-watermark watch with crash/liveness/watermark auto-respawn; write-hold windows & trial cadence persisted across restarts; runtime grant re-checks include the channel-bound line (revocation takes effect everywhere). |
178
+ | **Agent self-audit tools** | `line_context`, `ops_log`, `recipe_log`, `recipe_versions`, `dcw_journal` — agents see exactly which line/product/recipe they control, who did what, and how every value changed. |
179
+
180
+ #### Governance, configuration & extension
181
+
182
+ | Capability | Why it matters |
183
+ |---|---|
184
+ | **Line-level permissions** | Industrial data is gated **per production line** with three states (none / read-only / operate), enforced in the data plane — regular users see no line data until granted. |
185
+ | **Per-call tool preflight (v0.7.66 / v0.7.71 declarative)** | Every industrial tool call is checked before its handler runs: parameter shape, plus reference membership for `node_id` / `line_id` / `recipe_id` / `dataset_id` and chained dataset/job/model/plan/scene ids (resolved through lineage). References must fall inside the caller's bound face (bound nodes ∪ channel-bound line read-only ∪ nodes on a bound recipe's line). Out-of-scope calls are rejected with the caller's bound face and a concrete next step; authorization denials are audited. Since v0.7.71 the rules are **declared on the tool definitions themselves** (`references`) — registration-time enforcement (write-family tools without a declaration are rejected from the registry; read-family warn), while membership is still recomputed per call. Plugin tools are governed by the same check once they declare references, and every plugin call is audited. |
186
+ | **Process optimizer & solver (v0.7.71)** | End-to-end parameter optimization: **process model** (lineage-verified dataset → eligibility gates for MV excitation/constancy/action evidence) → **AML training** (linear ARX / state space with G1–G3 gates incl. ≥20% rollout improvement) → **profile freeze & binding** (authorization surface = binding surface) → **ProblemIR compile** (hash-pinned; template/solver mismatch → 422) → **OSQP/SLSQP solver worker** (process pool, timeout degradation, protocol-version check, NaN/Inf fail-closed; 34-case numeric matrix cross-checked against analytic solutions) → **crosscheck** (independent TS recompute of cost/trajectory/constraints, parity ≤1e-6) → **governed dispatch** (single HITL choke point, eight re-verifications at approval, device-read ackSummary verified/failed/unverified, evidence-smuggling defense). Agent tools, REST and MCP share one chain; the five `optimizer_*` tools are injected only with a valid binding. |
187
+ | **Full-operation audit log** | Every user / agent / system action lands in one queryable log; operators are attributed to "Channel/Member", distinct from users and the system. Streamed live over WS. |
188
+ | **Team-scoped plugin switches** | Each team (channel) keeps an **independent plugin switch set** (`channel_plugins`): a disabled plugin's tools are not injected into that team's agents. Plugins themselves are hot-managed via `aw plugin` and the `/plugins` page. |
189
+ | **Plugin extension API** | A self-contained directory under `plugins/<name>/` enhances **both halves at once**: `index.mjs` (server: hooks, routes, agent tools, **DAQ read drivers / DCW write drivers**, frame processors, node templates, config groups, KV, timers) and `client.mjs` (browser: panels injected into named slots, i18n, settings UI). Three scopes — `builtin` (shipped) > `project` (checkout) > `user` (`~/.AgentWorkShop`) — with ~1 s hot reload on enable/disable **and on code edits**; a disabled plugin's drivers are removed on hot reload immediately. Built-in example: **serial-bridge** (serial communication: read/write drivers, serial probe API, frontend panel). Full contract in [`docs/plugins.md`](./docs/plugins.md). |
190
+ | **AML — auto-modeling lab** | Dataset build → training job → leaderboard → promotion gates → model reference, all driven from `/aml` or by agents through **14 `aml_*` tools**. Python runtime bootstrapped with `uv` into an `aml/` asset root inside the config root; artifacts and metadata stay under the config root. Models carry a human-readable identity — label (line · recipe · objective), description and line/objective ids — selectable via `aml_model_find`. |
191
+ | **AML hybrid twin × MPC** | Grey-box physics core + bounded PyTorch residual, `TwinSnapshot` / `VirtualTrial` / `RecommendationCertificate` with UQ/OOD screening and all-trajectory gates; the `hybrid_twin` channel profile injects **12 profile tools** (scene discovery/compile/freeze, physics-spec draft/validate/compile, snapshot, trial, MPC, gate, provider catalog) plus the general `twin_calibration_request`. Trials stay virtual (`candidateExecuted=false`) and writes are recommendation-only until a certificate is certified. |
192
+ | **Two-mode optimization loop** | Dedicated channel templates split the loop **structurally**: an *aml-training* channel gets the modeling face (datasets, jobs, scene compile, physics specs, training plans — no plant writes, no MPC) and an *aml-optimization* channel gets the acting face (snapshots, trials, gate, MPC, Bayesian search `twin_bayes_optimize`, governed micro-writes `optimization_explore`) — training-while-optimizing is impossible by construction. **Exploration** mode writes through the governed chain with response read-back pairing (every write lands in an `optimization_explorations` ledger); **production** mode requires a bound model that cleared the twin gates (`aml` mode, `boundModelId` at instantiate time). |
193
+ | **Runtime observability** | `GET /api/system/monitor` exposes the agent-team internals as numbers: root queue depth, watchdog interventions, harness session reuse, pending memory outbox — each guarded by a documented rollback switch, so new machinery can be turned off without a redeploy. |
194
+ | **Line operations feed (`/operations`)** | One page for every touch on the plant: a live operation feed (REST snapshot + WS stream) classifies writes, DAQ, AML, recipe, rollback, alarm, line, manual and system actions into **nine categories**, renders structured **before → after diff badges** on write rows (failures marked red), and infers the **closed-loop phase** (monitor → exploration · small-step → recommendation search → shadow verification → production) straight from the event stream. The same feed powers a line-operations panel inside the workshop console. |
195
+ | **External MCP gateway** | `aw mcp` starts a zero-dependency **stdio MCP server** (38 tools) that discovers a running instance automatically (env → lock file → config file) and exposes lines, recipes (incl. mark-good), governed DCW writes, semantic parameter mapping, DAQ queries, channels, team provisioning, model promotion, judge/rollback and plugin management to any MCP client — gated by the `mcp.enabled` runtime setting, with `--doctor` and `--print-config` helpers. Additionally, **every channel member instance gets a dedicated full-tool stdio bridge** (92 host tools + plugin tools, compiled per agent from its role/binding face; ETag/304 incremental polling + `tools/list_changed`) so engines like codex / dsh / opencode consume MCP with the exact same governance chain as native injection (token self-assertion → five-layer re-verification). |
196
+ | **Fully config-driven runtime** | Every runtime knob (memory budgets, compaction, rollback guardrails, retention, backups, log level, system timezone, MCP gate…) is declared once in the settings descriptor registry with precedence **config.yml < runtime-settings < env** — **126 settings across 19 groups** (42 live / 84 restart), no hardcoded defaults in code. |
197
+ | **Configurable system timezone** | One `time.timeZone` setting (IANA id, live-applied) drives human-facing timestamps — logs, chat, audit, agent records and schedules — through a single formatter; machine timelines (DAQ samples, `timestamptz`) stay absolute. |
198
+ | **Configurable cadences** | Sampling and query defaults/floors are **live settings** (`daq.sampling.*`, `daq.query.*`): hot-reloaded, clamped on node create/patch, and agent tool descriptions always carry the current values. |
199
+
200
+ #### Digital twin
201
+
202
+ | Capability | Why it matters |
203
+ |---|---|
204
+ | **3D digital twin** | Three.js town: place line equipment and channel territories, watch device health, alarms and live values — driven by the same event bus. An adaptive quality ladder (DPR / shadow / bloom tiers, wall-clock FPS budget) matches the machine, and `window.__townStats` exposes real render metrics for perf probes. |
205
+
206
+ ---
207
+
208
+ ## The interface
209
+
210
+ Every panel below is the real UI, at 1440×900, recorded from a running instance.
211
+
212
+ <div align="center">
213
+
214
+ ### FIG.02 — DAQ console
215
+
216
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-02-daq.gif" alt="DAQ console: node inventory, live trends, alarm strip and event stream" width="92%" />
217
+
218
+ <sub><b>Acquisition, end to end.</b> Node inventory and health under a live gauge band, trends that fill as samples land,
219
+ an alarm strip that only holds what is actually unacknowledged, and a tailing event stream.</sub>
220
+
221
+ <br />
222
+
223
+ ### FIG.03 — Line operations
224
+
225
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-03-dcw.gif" alt="Line operations: production lines, products, recipes and write control" width="92%" />
226
+
227
+ <sub><b>Lines, products, recipes, batches.</b> Starting a line gates acquisition through its recipe window and tags every
228
+ sample with <code>product/recipe/run</code>; control nodes expose <b>SET vs ACT</b> through the same calibration path they write with.</sub>
229
+
230
+ <br />
231
+
232
+ ### FIG.04 — Digital twin
233
+
234
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-04-town.gif" alt="3D digital twin town driven by live telemetry" width="92%" />
235
+
236
+ <sub><b>The twin is the same event bus, rendered.</b> Equipment, channel territories, alarms and live values — an adaptive
237
+ quality ladder (DPR / shadow / bloom, wall-clock FPS budget) keeps it honest on modest hardware.</sub>
238
+
239
+ <br />
240
+
241
+ ### FIG.05 — Dashboard
242
+
243
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-05-dashboard.gif" alt="Runtime dashboard with KPI gauges and trends" width="92%" />
244
+
245
+ <sub><b>One screen for the whole workshop.</b> Channels, agents, tasks, DAQ throughput and alarms — read from the same
246
+ state the API serves, not a separate metrics store.</sub>
247
+
248
+ <br />
249
+
250
+ ### FIG.06 — Responsive
251
+
252
+ <img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/fig-06-responsive.gif" alt="The same interface adapting from desktop to tablet to phone" width="92%" />
253
+
254
+ <sub><b>Desktop → tablet → phone.</b> The instrument rail collapses to an icon rail, then to an off-canvas drawer;
255
+ page headers stack, dense tables become scrollable ledgers with a pinned identity column.</sub>
256
+
257
+ </div>
258
+
259
+ <table>
260
+ <tr>
261
+ <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-workshop.png" alt="Agent workshop" width="100%" /><br/><sub><b>Agent workshop.</b> Channel timeline, lanes, tasks, memory and HITL in one workbench.</sub></td>
262
+ <td width="50%"><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-monitor.png" alt="Runtime monitor" width="100%" /><br/><sub><b>Runtime monitor.</b> Every wired channel, member count, dependency cycle and owner.</sub></td>
263
+ </tr>
264
+ <tr>
265
+ <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-settings.png" alt="Settings" width="100%" /><br/><sub><b>Settings.</b> 126 keys across 19 groups, descriptor-driven — the same registry the CLI reads.</sub></td>
266
+ <td><img src="https://raw.githubusercontent.com/kingdol666/AgentWorkShop/main/docs/readme-assets/shot-plugins.png" alt="Plugins" width="100%" /><br/><sub><b>Plugins.</b> Three scopes, hot reload on edit, per-team switches.</sub></td>
267
+ </tr>
268
+ </table>
269
+
270
+ ---
271
+ ## Architecture
272
+
273
+ ```mermaid
274
+ flowchart TB
275
+ subgraph FE["Frontend — Nuxt 4 / Vue 3"]
276
+ UI["Workshop UI · 3D Twin · Dashboards"]
277
+ WS["AEP client — seq resume"]
278
+ end
279
+ subgraph SRV["Server — Nitro / h3"]
280
+ REST["REST /api/workshop/**"]
281
+ HUB["WS Hub — AEP v1"]
282
+ A2A["A2A JSON-RPC"]
283
+ MCP["MCP Server"]
284
+ subgraph RT["Runtime"]
285
+ MGR["AgentChannelManager"]
286
+ SCH["SchedulerLoop — lead supervision"]
287
+ TE["TaskEngine — 7-state machine"]
288
+ AR["AgentRuntime × N"]
289
+ MEM["AgentMemory — FTS5 + vector"]
290
+ BUS["Event bus (ManagerBus) — per-channel seq + ring"]
291
+ end
292
+ subgraph IND["Industrial"]
293
+ DAQ["DAQ gateway — per-node edge runtimes"]
294
+ DCW["DCW gateway — write control"]
295
+ BR["Bus — inproc / MQTT"]
296
+ TSDB["TSDB — SQLite / Timescale"]
297
+ end
298
+ subgraph HB["Harness adapters — 14 engines"]
299
+ MOCK["mock · claude — in-process"]
300
+ OMP["omp — RPC subprocess"]
301
+ CDX["codex — app-server"]
302
+ DSH["dsh · qwen · hermes — ACP"]
303
+ OC["opencode — serve"]
304
+ FAM["gemini · copilot · cursor · crush · goose · pi — headless CLI"]
305
+ end
306
+ DB[("SQLite — channels · agents · tasks
307
+ messages · memories (FTS5) · events")]
308
+ end
309
+ UI <--> WS
310
+ WS --> BUS
311
+ REST & A2A & MCP --> MGR
312
+ MGR --> SCH & TE & AR
313
+ AR --> MEM
314
+ AR --> MOCK & OMP & CDX & DSH & OC & FAM
315
+ MGR & TE & MEM & BUS --> DB
316
+ DAQ <--> BR --> TSDB
317
+ DCW --> BR
318
+ DAQ & DCW --> BUS
319
+ ```
320
+
321
+ **The agent × machine bridge** (the part worth reading the source for):
322
+
323
+ ```
324
+ agent ──binds to──▶ node (daq: auto / dcw: manual)
325
+ │ │
326
+ │ my_industrial_nodes ◀── semantic card: meaning · unit · safe range · recipe window
327
+ │ daq_query ◀── TSDB history, stats + physical semantics
328
+ │ dcw_control ──▶ interlock (safe range ∩ recipe window)
329
+ │ ──▶ HITL approval (manual mode, 180 s timeout)
330
+ │ ──▶ PLC write → readback check → ACK + write history
331
+ ◀── result text with numbers the agent can cite
332
+ ```
333
+
334
+ ---
335
+
336
+ ## Quick start
337
+
338
+ ### Prerequisites
339
+
340
+ ```bash
341
+ node -v # ≥ 23.4.0 (needs built-in node:sqlite)
342
+ ```
343
+
344
+ > Real-agent harnesses require their CLI on PATH — `omp`, `codex`, `dsh`, `opencode`, `gemini`, `qwen`, `copilot`, `cursor`, `crush`, `goose`, `pi` or `hermes` (any subset; each channel can mix harnesses). `mock` and `claude` (SDK) run in-process and need no PATH CLI. The dashboard "execution engines" panel shows per-engine readiness with a green/grey dot; entries for uninstalled engines link to their official install pages. Optional DAQ infrastructure (MQTT broker + TimescaleDB) auto-starts via Docker when reachable (`docker compose up -d`).
345
+
346
+ ### Option A — install from npm (recommended)
347
+
348
+ ```bash
349
+ npm install -g agentworkshop # → `aw` / `agentworkshop` on PATH
350
+ aw start # → http://localhost:3001
351
+ ```
352
+
353
+ The published tarball ships a **prebuilt production bundle** (`.output/`), so an npm install boots straight away — no build step, no build tools. On first launch everything initializes into the config root **`~/.AgentWorkShop`**: the default `config.yml`, a generated `.env` holding a random session secret, `runtime-settings.json`, a docker-compose seed, `prompts/`, `commands/`, `plugins/` (seeded from the SDK examples, **disabled** by default) and an empty `data/` directory. All runtime data (SQLite, JSON repos, backups, logs) lives there too — config and data stay with the install, not the working directory.
354
+
355
+ Prefer a one-off run without installing globally?
356
+
357
+ ```bash
358
+ npx agentworkshop start # no global npm install required
359
+ ```
360
+
361
+ > `npx` still creates `~/.AgentWorkShop` — running without a global install is not the same as leaving no trace on disk.
362
+
363
+ ### Option B — from source
364
+
365
+ ```bash
366
+ git clone https://github.com/kingdol666/AgentWorkShop.git && cd AgentWorkShop
367
+ pnpm install
368
+ pnpm dev # → http://localhost:3000 (port from config.yml)
369
+ ```
370
+
371
+ Production from source:
372
+
373
+ ```bash
374
+ pnpm build # nuxt build → .output/
375
+ pnpm start # port from config.yml → server.prod.port
376
+ ```
377
+
378
+ > In a source checkout the config root is the project's **`.AgentWorkShop/`** folder (runtime overrides, data, project-level commands), while `config.yml` / `.env` stay at the checkout root, version-controlled as the factory defaults.
379
+
380
+ ### Updating
381
+
382
+ ```bash
383
+ aw update # check + self-update the global install
384
+ aw update --check # only report; nothing is installed
385
+ npm install -g agentworkshop@latest # manual equivalent
386
+ ```
387
+
388
+ Releases follow semver. `aw start` verifies the config root on every launch and migrates the legacy pre-`home` `data/` layout into it (newest file wins), so data survives upgrades. SQLite schema migrations run server-side at boot. Current version: **v0.7.71** — see [Releases](https://github.com/kingdol666/AgentWorkShop/releases).
389
+
390
+ ### Your first agent × line session (~2 minutes)
391
+
392
+ 1. **Sign in** — register in the sidebar (or `POST /api/users/register`).
393
+ 2. **Build a line** — `Line Operations` → create a line, add DAQ nodes (e.g. `daq-temp-tc`) and control nodes (e.g. `dcw-temp-sp`), create a product + recipe, hit **Start**. Live values start flowing.
394
+ 3. **Create a team** — `Agent Workshop` → pick a lead + workers, **deploy** into a channel.
395
+ 4. **Bind nodes** — open the agent's detail panel → bind the DAQ node (*auto*) and the control node (*manual* = needs your approval).
396
+ 5. **Submit the goal** — *"Analyze the last 5 minutes of melt temperature; if deviation from 182 °C exceeds 1 °C, correct the setpoint (wait for my approval)."*
397
+ 6. **Approve** — the agent reads real history, computes the mean, requests the write → approve in the HITL panel → watch the setpoint change and the goal close with a numeric report.
398
+
399
+ ---
400
+
401
+ ## Configuration & CLI — config-driven by design
402
+
403
+ One runtime, one source of truth. **`config.yml`** declares defaults; **`runtime-settings.json`** inside the config root carries runtime overrides; environment variables and CLI flags sit on top. Every editable key is described once in `shared/config/schema.json` (type, range, enum, live-vs-restart) and surfaced through the same descriptors in **both the UI and the CLI**.
404
+
405
+ ```
406
+ config.yml (defaults) < .AgentWorkShop/runtime-settings.json (runtime) < env vars / CLI flags
407
+ ```
408
+
409
+ The config root is **`~/.AgentWorkShop`** for a global install (`npm i -g`) — wherever you run `aw` from — and **`<repo>/.AgentWorkShop`** in a source checkout (with `config.yml` / `.env` staying at the checkout root as version-controlled factory defaults). `AW_HOME` redirects it; `AW_MODE=home` forces the global shape.
410
+
411
+ ### Live settings, persisted, hot-reloaded
412
+
413
+ - The **Settings → Runtime config** tab renders every editable key from the descriptors — change server ports, theme, API timeouts, locale or the approval gate, hit save.
414
+ - `live` keys apply instantly (theme, title, timeouts, approval gate, DAQ sampling cadences, TSDB query buckets…) over a server-sent event stream — no reload, no restart.
415
+ - `restart` keys (ports, hosts) persist to disk and take effect on the next launch of the matching mode (`aw dev` / `aw start`).
416
+ - One channel for every writer: the UI, the CLI and the server's file watcher all converge on the same settings file, so a change made anywhere shows up everywhere.
417
+
418
+ Example — retune the acquisition and query cadences live:
419
+
420
+ ```bash
421
+ aw config set daq.sampling.defaultIntervalMs 2000 # new nodes sample every 2 s
422
+ aw config set daq.sampling.minIntervalMs 500 # per-node floor (create/patch clamp)
423
+ aw config set daq.query.defaultBucketMs 3000 # TSDB reads default to a 3 s bucket
424
+ aw config set daq.query.minBucketMs 500 # query floor (samples/line query/agent tool)
425
+ ```
426
+
427
+ Agent tool descriptions are re-rendered with the current values on every injection, so an LLM always sees the floor and default that will actually apply to its `daq_query` calls.
428
+
429
+ ### The `aw` CLI
430
+
431
+ | Command | What it does |
432
+ |---|---|
433
+ | `aw start · aw dev · aw build` | Production server / dev server / build — ports from the effective config; first `start` builds once |
434
+ | `aw stop` | Stop a running `aw` service instance via the single-instance lock |
435
+ | `aw config list · get · set · unset · reset` | Read & write runtime settings (validated against the schema, atomic writes) |
436
+ | `aw plugin list · create · enable · disable` | Manage plugins across all three scopes: inspect, scaffold (project scope; `--global` for user scope), enable/disable (state file, ~1 s hot reload on the running server) |
437
+ | `aw mcp` | Industrial MCP stdio server (38 tools over the platform REST: lines, recipes, DCW writes, parameter mapping, DAQ, channels, teams, model promotion, plugins) — auto-discovers the running instance; `--doctor` diagnoses discovery/health/auth, `--print-config` emits a ready-to-paste MCP client config |
438
+ | `aw home` | Inspect / initialize the config root `.AgentWorkShop` |
439
+ | `aw init <dir>` | Scaffold a runnable project (full config system + CLI included) |
440
+ | `aw register <path\|url\|npm:pkg>` | Register a new command — project-local or `--global` |
441
+ | `aw update` | Check npm for the latest release and self-update the global install |
442
+ | `aw doctor` | Environment + project health check (node, config, ports, keys) |
443
+ | `aw status` | Live overview: mode, config sources, running server, command table |
444
+ | `aw tui` | Terminal workbench: channel/agent management, task submission, live monitor pane, HITL answering (see [`docs/tui.md`](./docs/tui.md) · [`tui/README.md`](./tui/README.md)) |
445
+ | `aw version` | Print the CLI/package version (alias `v`) |
446
+
447
+ Global flags: `--help/-h` · `--version/-v` · `--json` (machine-readable) · `--root <dir>` · `--debug`.
448
+
449
+ Exit codes: **0** success · **1** runtime error · **2** usage error. With `--json`, failures come back as an envelope carrying `{ ok: false, error: 'unknown-command' \| 'no-project' \| 'usage' \| 'internal' \| … }`, so automation can branch without parsing stderr.
450
+
451
+ ### Command registration
452
+
453
+ Commands are plain modules exporting `{ meta, run }`. Drop one into a scanned directory and it's live on the next invocation — no registry bookkeeping, convention over configuration:
454
+
455
+ | Scope (highest wins) | Directory |
456
+ |---|---|
457
+ | project | `<root>/.AgentWorkShop/commands/` |
458
+ | user | `~/.AgentWorkShop/commands/` |
459
+ | built-in | packaged with the CLI (`cli/commands/`) |
460
+
461
+ `aw register <file|url|npm:pkg>` copies a command into the right scope (`--global` for user scope); `aw help` lists everything that's registered.
462
+
463
+ ```js
464
+ // ~/.AgentWorkShop/commands/hello.mjs
465
+ export const meta = { name: 'hello', group: 'Custom', summary: 'Say hi', usage: 'aw hello [--name <n>]' }
466
+ export async function run(argv, ctx) {
467
+ console.log(`Hi ${argv.flags.name ?? 'AW'} — mode: ${ctx.mode}`)
468
+ }
469
+ ```
470
+
471
+ ---
472
+
473
+ ## The industrial stack in detail
474
+
475
+ ### Data acquisition (DAQ)
476
+
477
+ - **Six protocol drivers**: Modbus TCP, Modbus RTU-over-TCP (serial gateway), OPC UA, MQTT, HTTP/REST, plus the **serial-bridge built-in plugin** (direct RS-232/485: Modbus RTU framing + ASCII line protocol, write side with same-address readback verification, serial enumeration/probe API and a frontend panel) — connection pools, classified error messages, per-driver connection tests; the driver registry accepts plugin-registered protocols of any kind (with self-describing metadata, the frontend forms render with zero changes).
478
+ - **Per-node edge runtimes**: independent sampling cadence, publish cadence, in-flight mutex per node — one slow driver never blocks its neighbors. Sampling and query defaults/floors are driven by the live `daq.sampling.*` / `daq.query.*` settings.
479
+ - **Pipeline**: driver → queue (in-process or MQTT, offline buffer on disconnect) → consumer with out-of-order defense → three-way fan-out: WS live push (gated), TSDB batch write, device-twin writeback.
480
+ - **Robustness**: TSDB single-in-flight writes with bounded retries, buffer backpressure with drop counters, real loss metrics exposed on `daq.controller` frames.
481
+ - **Alarms**: recipe-scoped monitoring windows with **2% hysteresis + 3-tick debounce**; alarm/offline transitions are instant (safety first).
482
+ - **Querying is batch-scoped by default**: `daq_query` resolves the node's **active run** and filters by that batch's `run_id` + `recipe_id`, so an agent reading evidence always sees *the recipe currently running* — never a mix of the previous batch. The effective scope (`run=<id> 配方「name」(recipe_id)`) is printed in the result header and restated per node at the end, and the same ids can be fed straight back into `daq_query` or `aml_dataset_build`; pass `scope: 'all'` (or an explicit `recipe_id` / `run_id` / `product_id`) for cross-recipe comparison and history review. Lines that are not running stay unfiltered, so historical data remains queryable.
483
+
484
+ ### Write control (DCW)
485
+
486
+ - Engineering-unit writes: `linear` calibration (scale/offset) PLC↔physical, **readback verification** with deadband tolerance, ACK states and write history.
487
+ - **Interlock**: with a line running, the active recipe's parameter window *replaces* the node's global safe range for that node.
488
+ - **HITL**: `manual`-mode bindings suspend the write for user approval (deduped per agent+node; re-validation at approval time — permission is re-checked when you click approve).
489
+
490
+ ### Recipe & batch
491
+
492
+ `Line → Product → Recipe → Run`. Starting a run applies recipe params node-by-node (each write verified), gates acquisition per line, and tags every sample with `line/product/recipe/run` — per-product data isolation with five-dimension queries (line × product × recipe × time × node).
493
+
494
+ ### AML — auto-modeling lab
495
+
496
+ The modeling half of the loop: `/aml` builds **datasets** out of tagged telemetry, submits **training jobs** to a `uv`-managed Python runtime, ranks runs on a **leaderboard**, and promotes a model only when it clears the configured **gates** (NRMSE, rollout NRMSE, validation/test gap, minimum rows and runs). Promoted models are referenced by id, so an MPC or shadow-twin controller can consume a versioned artifact instead of a vague "latest".
497
+
498
+ - Agents do the same work through 14 tools (`aml_dataset_build`, `aml_job_submit`, `aml_job_status`, `aml_leaderboard`, `aml_model_promote`, `aml_model_find`, `aml_training_plan_*`, …) — submit a goal and let the team train and report.
499
+ - The Python runtime bootstraps itself with `uv` into an `./aml` asset root inside the config root; dataset/artifact/metadata paths, disk quota, job timeout, concurrency and retention are all **settings** (16 in the `aml` group), not constants.
500
+ - Governance defaults are conservative: cross-recipe datasets are refused unless explicitly allowed, and every job is attributed.
501
+ - **Hybrid twin × MPC core**: AML also owns the *hybrid twin* plane — `SceneContract` / `PhysicsModelManifest` / `TwinSnapshot` / `ObjectiveProfile` / `VirtualTrial` / `RecommendationCertificate` on top of a grey-box physics core with a bounded PyTorch residual, UQ/OOD screening and all-trajectory hard-constraint gates. Channels opt in through the `hybrid_twin` profile, which injects twelve profile agent tools (`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`) plus the general `twin_calibration_request`; a trial is *virtual* by design (`candidateExecuted=false`) and a recommendation is only certified when gates and benefit pass. Server-side strategies are `safe_small_step` (insufficient data) and `precise_search` (model cleared gates). Plan + acceptance record: [`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).
502
+ - **Any-scene modeling loop**: the loop is not tied to a bundled scene. Bind nodes → `twin_scene_discover` infers control/state/disturbance/target/guard semantics with evidence → `twin_scene_compile` drafts a `SceneContract` → you confirm → `twin_scene_freeze` freezes it (immutable versions) → `twin_physics_spec_draft` proposes a skeleton PhysicsSpec (one first-order relaxation equation per state, τ/gain as calibratable prior-boxed parameters) that you refine → validate/compile (whitelisted AST, no arbitrary code) → `aml_job_submit { job_kind: 'hybrid_residual' }` runs without any code: the built-in reference trainer calibrates physics parameters (stage A), fits a 3-member bounded residual ensemble (stage B) and reports conformal q90 coverage (stage D) — the calibrated spec is written back and shared by evaluation, prediction and trials.
503
+ - **Model-backed twin & continuous calibration**: `twin_trial_run` / `mpc_optimize` accept a `model_id` — the rollout is then driven by the trained hybrid model (calibrated physics + residual-ensemble ONNX, `ModelBackedHybridProvider`) with UQ coverage and member disagreement coming from training artifacts, and a dataset whose line/product/recipe doesn't match the scene is rejected (`TWIN_MODEL_SCENE_MISMATCH`). Calibration requests are consumed by a 60 s worker that re-submits `hybrid_residual` retraining *candidates* automatically; promotion still goes through HITL + Twin Gate (`AML_TWIN_WORKER_DISABLED=1` turns the worker off).
504
+ - **Two-mode optimization loop**: `aw` ships two channel templates — `chtpl-aml-training-default` (modeling face: 22 tools, no plant writes, no MPC) and `chtpl-aml-optimization-default` (acting face: snapshot/trial/gate/MPC/Bayesian search plus `optimization_explore`, the governed micro-write that pairs every setpoint with its response read-back in an `optimization_explorations` ledger). The faces are mutually exclusive per channel; optimization channels instantiate either in **exploration** mode (governed small steps, no model required) or **aml** mode (`boundModelId` required — a gate-cleared model must be bound before the acting face unlocks).
505
+ - **Twin provider plugin SDK (hot-loaded)**: an industrial scene's physics core / scene packs / objectives / solvers register through `ctx.twin` into the **Twin Provider Registry** (`registerPhysicsProvider` / `registerScenePack` / `registerObjectiveProfile` / `registerTrainingAdapter` / `registerSolverAdapter`, plus `listProviders` / `getProviderHealth` / `resolveProvider` / `validateProvider` / `retireProvider` / `isRegistryAvailable`). Twin tools resolve providers via `SceneContract.physicsProfileId` (falling back to the bundled `twin-injection-default`), so **swapping scenes changes neither tools nor channels**; a hot reload stages a new **generation** and drains the old one while trials and MPC hold leases, so in-flight work is never invalidated and `retireProvider` only unloads at zero references. The bundled injection provider ships through that same external contract (`server/plugins-builtin/twin-injection-default/`), and plugins live in the usual scopes with no restart for disable/reload. Field tables and a runnable example: [`docs/plugins.md`](./docs/plugins.md) → "Hybrid-twin provider plugins"; SDK surface: [`docs/sdk.md`](./docs/sdk.md) §4.10.
506
+
507
+ ---
508
+
509
+ ## Usage
510
+
511
+ ### Authentication
512
+
513
+ Email + password login issues a **bearer token** (multiple tokens per user, individually revocable).
514
+
515
+ ```bash
516
+ # register
517
+ curl -X POST http://localhost:3000/api/users/register \
518
+ -H 'content-type: application/json' \
519
+ -d '{"email":"you@example.com","password":"secret","name":"you"}'
520
+
521
+ # every workshop call
522
+ curl http://localhost:3000/api/workshop/channels \
523
+ -H 'authorization: Bearer <token>'
524
+ ```
525
+
526
+ ### Line-level permissions
527
+
528
+ Industrial data is gated **per production line** with three states, managed by an admin
529
+ in the built-in **Permissions** page (`/permissions`, admin-only in the sidebar):
530
+
531
+ | State | DAQ nodes | DCW (write) nodes | Visibility |
532
+ | --- | --- | --- | --- |
533
+ | **none** (default for regular users) | hidden | hidden | line data withheld server-side — invisible in Line Ops, DAQ center and the digital twin |
534
+ | **read-only** | read | ✕ | line visible, values stream, no writes / dispatch / device binding |
535
+ | **operate** | read | read + write | full access incl. setpoint writes, dispatch, binding |
536
+
537
+ - `admin` / `editor` roles are unrestricted (operations roles).
538
+ - Regular users **default to none** — they see no line data until granted.
539
+ - Enforcement lives in the data plane: list endpoints filter by grant, write/dispatch
540
+ endpoints return a human-readable 403, and Agent↔node bindings validate the line grant
541
+ (DAQ needs read-only+, DCW needs operate).
542
+ - Plugins get the same surface via `ctx.permissions` (`lineMode` / `visibleLineIds` /
543
+ `listGrants` / `setGrants`) plus a `permissions:changed` lifecycle hook; the SDK REST
544
+ client exposes `client.permissions.overview()` / `client.permissions.set(...)`.
545
+
546
+ ### Execution modes
547
+
548
+ Prefix the task description (or pick in the composer UI):
549
+
550
+ | Mode | Semantics | Config |
551
+ |---|---|---|
552
+ | `goal` | lead decomposes → workers deliver → **lead judges satisfaction**; unmet → more subtasks; met → parent completes. | `goalCriteria` |
553
+ | `loop` | replay the same task on a fixed interval. | `intervalMs` (default 60000), `maxIterations` (default ∞) |
554
+ | `pipeline` | ordered stages; stage N+1 consumes stage N's output. | `stages: [{name, description, assigneeId?}]` |
555
+
556
+ ### Scheduled tasks
557
+
558
+ Any task can also be attached to a **schedule** so a channel keeps working when nobody is watching:
559
+
560
+ | Aspect | Behavior |
561
+ |---|---|
562
+ | Modes | `interval` — fixed cadence (`intervalMs`, 60 s floor) · `daily` — once per day at `HH:MM` local time |
563
+ | Management | `/workshop/schedules` page, or `POST/PATCH /api/workshop/schedules` |
564
+ | Guard rails | busy-guard (a fire is deferred while the channel still has active tasks), per-run history with status, and a **consecutive-failure circuit breaker** (`maxConsecutiveFailures`) that auto-disables a misbehaving schedule |
565
+ | Typical use | nightly line patrol (`daq_query` + report to memory), periodic drift check with auto-judge, daily KPI digest |
566
+
567
+ ```bash
568
+ # create a schedule: patrol the line every 30 minutes
569
+ curl -X POST http://localhost:3000/api/workshop/schedules \
570
+ -H 'authorization: Bearer <token>' -H 'content-type: application/json' \
571
+ -d '{"channelId":"<id>","name":"line-patrol","title":"Line patrol","description":"Read all DAQ nodes on line 1 and post a drift summary to channel memory.","mode":"interval","intervalMs":1800000}'
572
+ ```
573
+
574
+ ### The four entry points
575
+
576
+ | Entry | Endpoint | Audience |
577
+ |---|---|---|
578
+ | **WS** | `/api/workshop/ws?channelId=…` | Dashboards / UI — AEP v1 envelopes, per-channel monotonic `seq`, 5000-event ring, `lastSeq` resume, snapshot fallback. |
579
+ | **MCP** | in-process server, 25 tools | Agents (omp host tools) — management + job-face tools, channel-scoped. |
580
+ | **A2A** | `POST /api/workshop/a2a/:agentId/rpc` | External agents — JSON-RPC 2.0, `AgentCard` at `/card`, `tasks/sendSubscribe` SSE. |
581
+ | **REST** | `/api/workshop/**` | Humans / scripts — full management face. |
582
+
583
+ ### Task state machine
584
+
585
+ ```
586
+ SUBMITTED ─▶ ASSIGNED ─▶ WORKING ─▶ WAITING ─▶ COMPLETED
587
+ │ │ │ │
588
+ └────────────┴───────────┴──▶ CANCELED / FAILED ─▶ (retry ≤ 3 or cancel)
589
+ ```
590
+
591
+ ---
592
+
593
+ ## Verified end-to-end
594
+
595
+ Every claim above is backed by a suite you can re-run. The acceptance suites drive a
596
+ **production instance over real simulated plant protocols** (Modbus TCP/RTU, OPC UA, MQTT,
597
+ HTTP + an MQTT/Timescale pipeline) with real engine CLIs, and assert on the database,
598
+ the event stream and the HTTP API — not on mocks. Two 2026-09-24 waves are archived:
599
+ the baseline matrix (~1100+ real assertions, v0.7.45 production build, isolated `AW_HOME`,
600
+ real browser) in [`docs/audit/e2e-2026-09-24-full-coverage.md`](./docs/audit/e2e-2026-09-24-full-coverage.md),
601
+ and the follow-up feature wave (real **PLC node simulator** + injection-molding AgentTeam
602
+ closed loop, FIFO multi-goal, scheduled tasks, collaboration; the report records each result,
603
+ including environment- or credential-limited failures and SKIPs)
604
+ in [`docs/audit/e2e-2026-09-24-all-features.md`](./docs/audit/e2e-2026-09-24-all-features.md).
605
+
606
+ | Suite | Latest result | What it covers | Reproduce |
607
+ |---|---|---|---|
608
+ | `real-injection-closed-loop.mjs` | **2 goals COMPLETED / 0 failed** (2026-09-24, real PLC simulator + real `omp` team) | injection line provisioned from the simulator (11 DCW + 14 DAQ nodes) → real AgentTeam lead/analyst/optimizer → governed writes with a **65.8 s gap ≥ 60 s policy** → DAQ re-measurement → `qualityOk`, verdict `keep` | `AW_BASE=<base> SIM_BASE=http://127.0.0.1:4010 AW_TOKEN=<token> node scripts/real-injection-closed-loop.mjs` |
609
+ | `_run-real-injection-fifo-goals.mjs` | exit 0 (2026-09-24) | **FIFO root queue with multi-task serialization**: goal 2 dispatched only after goal 1 closed, role gate flip, two governed writes 65.04 s apart, two judged records, 4-anchor ledger | `AW_BASE=<base> SIM_BASE=… AW_TOKEN=<token> node scripts/_run-real-injection-fifo-goals.mjs` |
610
+ | `e2e-plc-plugin-closedloop.mjs` | core stages A–D all green (2026-09-24) | PLC simulator supply over Modbus 16040 → DAQ cross-check (AW sample 197 vs simulator register 197.37) → HITL closed-loop write to 3 zones (registers 40021/40023/40025 = 210, verified write-through) → `dcw_judge` keep; plugin stages E–H need the external diagnosis service and are reported as 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` |
611
+ | `_dbg-schedule-e2e.mjs` | **35 / 0** (2026-09-24) | scheduled tasks: plan CRUD + validation, `next_run_at`, `scheduledCount`, busy guard **409 CHANNEL_BUSY**, in-flight duplicate **409 SCHEDULE_RUNNING**, cancel reconciliation (run FAILED + failure counters), **timer auto-fire** (`trigger_kind=timer`), disable/enable state machine, 404 after delete | `SCHED_E2E_BASE=<base> node scripts/_dbg-schedule-e2e.mjs` |
612
+ | `e2e-crash-cycle.mjs` | **5 / 5 phases** (2026-09-24) | watch → hard kill → persistence check → restart → redelivery → auto-resume → consumption-gap replay, each phase in its own process | `node scripts/e2e-crash-cycle.mjs --port 3300 --home .e2e-home-full` |
613
+ | `e2e-full-closedloop.mjs` | **98 / 0** (2026-09-24, v0.7.45 production build) | 11 stages: registration → line/product/recipe modeling → DAQ sampling → frame pipeline → DCW write + readback → rollback ledger → agent-node authorization → bridge privilege boundaries → plugins → data-root isolation | `node scripts/e2e-full-closedloop.mjs <base>` |
614
+ | Protocol matrix, real protocols | **46 / 0** (2026-09-24) | MQTT · Modbus TCP · Modbus RTU · OPC UA · HTTP — acquisition, governed write + readback, recipe-window interlock and a real agent closed loop per protocol | `node scripts/_dbg-protocol-matrix.mjs` |
615
+ | Production API live | 60 / 0 (2026-09-24) | persistence across restart, template CRUD, task assign/complete/cancel/loop/pipeline, A2A + mailbox, WS broadcast, MCP endpoint, cascade delete | `AW_E2E_TOKEN=<token> node scripts/api-live-e2e.mjs` |
616
+ | AgentTeam chat + native HITL | 112 passed / 0 failed / 1 blocked (2026-09-24, real `omp`) | group-chat request → trackable job; `omp` native ask → HITL approval → engine resumes with the receipt | `node scripts/e2e-agentteam-chat.mjs --phase=all` |
617
+ | Terminal mirror + prompt composition | **26 / 0** and **16 / 0** (2026-09-24, real `omp`) | terminal mirror frames, `input`/`abort`/`ui_response` injection, native `ask` round-trip; five-section prompt assembly (scenario → profile → memory → manual → assignment) observed on the wire | `node scripts/test-terminal-e2e.mjs` · `node scripts/test-prompt-system.mjs` |
618
+ | Real-engine collaboration | task-flow real **PASS**, `e2e-omp-workspace` **13 / 13**, group-chat real **PASS**, multi-user HIL **PASS** (2026-09-24) | real `omp` lead + workers: decomposition, dispatch, progress, artifacts, workspace-scoped file reads, unload; multi-user HITL visibility; multi-harness team 14/18 (omp + dsh green) | `npx tsx scripts/e2e-agentteam-task-flow-real.ts` · `npx tsx scripts/e2e-omp-workspace.ts` |
619
+ | Front-end acceptance | responsive gate **16 / 16** routes, nav drawer **10 / 10** (2026-09-24, real Chromium) | the 16 gated routes (of 22 page components) incl. the 3D town render at the gate thresholds; drawer interaction, scroll lock, route change, zero page errors | `node scripts/ui/verify-responsive.mjs --routes all` · `node scripts/ui/verify-nav.mjs` |
620
+ | `_aw0746-stage12.mjs` | **10 / 0** (2026-09-25, globally installed **v0.7.49 packaged build**) | health gate (version=0.7.49) → admin login/role surface → channel creation with a real `omp` lead → group chat opened → **real omp reply** → omp child process visible in monitoring | `AW_BASE=<base> node scripts/_aw0746-stage12.mjs` |
621
+ | `_aw0746-stage34.mjs` | **13 / 0** (2026-09-25, v0.7.49 packaged build + PLC simulator) | line provisioned from the simulator (11 DCW + 14 DAQ) → product/recipe triple → **every sample tagged with recipe_id/run_id** while running → `daq_query` **defaults to the active batch** (`scope=all` opts out, measured 1 vs 4) → Hybrid Twin template instantiated (lead + 3 workers; that run injected 6 twin tools / 57 total — the profile now injects 12) | `AW_BASE=<base> node scripts/_aw0746-stage34.mjs` |
622
+ | `_aw0746-stage6b-train-sweep.mjs` | gates **all green** (2026-09-25, v0.7.46 packaged build, real torch training) | 1 s grid dataset (**1724 rows / 10 runs**) → inline-code job trained for real → G1 one-step **0.0992** (≤0.10) / G2 rollout 0.1092 (≤0.25) / G3 generalisation 14.6% (≤20%) / G4 rows+runs → model registered and **promoted to production** | `AW_BASE=<base> AW_DATASET_ID=<ds> node scripts/_aw0746-stage6b-train-sweep.mjs` |
623
+ | `_aw0746-stage7-twin.mjs` | **17 / 0** (2026-09-25, v0.7.49 packaged build, real DAQ + real model) | real samples → TwinSnapshot `fresh=true` → 65 real VirtualTrials (12 safe candidates, `candidateExecuted=false`) → 12-check recommendation gate **write_eligible** → verdict written back to the model as `twinEligibility` → `mpc_optimize` upgrades to **precise_search** → **0 DCW writes** throughout | `AW_BASE=<base> AW_REQUIRE_MODEL=1 node scripts/_aw0746-stage7-twin.mjs` |
624
+ | `_aw0746-stage6c-jobsmoke.mjs` | **5 / 0** (2026-09-25, v0.7.49 packaged build) | AML job path: inline `code` accepted (no `workspace/train.py` required) → job reaches a terminal state → training logs/ONNX traces → experiment plus per-check gates persisted | `AW_BASE=<base> node scripts/_aw0746-stage6c-jobsmoke.mjs` |
625
+ | `_aw0748-failclosed-probe.mjs` | **7 / 0** (2026-09-25, v0.7.49 packaged build) | hard-constraint **fail-closed** regression: `auto_daq` builds a snapshot from real bindings → a mappable `weight` constraint evaluates normally → an unmappable `part_weight` constraint is judged not passed with a precise detail (v0.7.47 passed it falsely) → an empty trajectory is also judged not passed | `AW_BASE=<base> node scripts/_aw0748-failclosed-probe.mjs` |
626
+ | `_aw0748-mock-closedloop.mjs` | **13 / 0** (2026-09-25, v0.7.49 packaged build, in-process `mock`, no quota) | scheduler closed-loop regression: create a mock channel → the root task is genuinely dispatched and closed → `[mock:complex]` forces delegation into child tasks → the parent closes after they finish → **the second and third root tasks are dispatched too** (before the fix the lead was unloaded while idle, `cr.scheduler` became null and later root tasks only landed in the DB, sitting in SUBMITTED until `ROOT_TIMEOUT`) → the tool bridge explicitly rejects host tools for mock | `AW_BASE=<base> node scripts/_aw0748-mock-closedloop.mjs` |
627
+ | Industrial bench — integrated | **77 / 77 checks (current baseline contract**, `bench/PIPELINE.md`; an earlier 2026-09-21 run recorded 83/83) | five-protocol five-line bench: connectivity, sampling into Timescale, governed writes, governance, agent closed loop, semantic parameter layer | `node bench/pipeline.mjs --profile integrated` |
628
+ | Multi-scenario closed loop | 4 scenarios · closed loops reached (2026-09-21) | injection-molding weight-window tuning · A²/O wastewater compliance with energy minimum · continuous-annealing quality window vs throughput · BOPET line mission | `node bench/scenarios.mjs --scenarios injection,wwtp,anneal` |
629
+ | Line permissions / audit-negative | 21 / 21 + 9 / 9 (2026-09-12) | three-state line grants with human-readable 403s, binding-subject validation, revocation convergence, unauthenticated WS receives zero telemetry | `node scripts/_dbg-perms-e2e.mjs <base> <adminPass>` · `node scripts/_dbg-audit-neg-e2e.mjs <base> <adminPass>` |
630
+ | Render regression | 30 / 30 (2026-09-12) | DAQ table integrity (row count aligned with the API), WS-driven row updates, filters, detail page, 3D town + model library, 7-page smoke, zero page errors | `node scripts/_dbg-render-regression.mjs <base> <email> <pass>` |
631
+ | AML auto-modeling | 25 / 0 (2026-09-24, deterministic trainer) | dataset build → cross-recipe refusal → job submit → gates → promotion guards → prediction guards → audit; `--real` adds the uv/torch runtime | `node node_modules/tsx/dist/cli.mjs --tsconfig .nuxt/tsconfig.server.json scripts/e2e-aml.ts` |
632
+ | Offline unit/property suites | all green | AEP event index (`test-events-index`), LRU, data-root split (`test-data-root`), log flooding, rollback index, plugin hardening, task lease fencing (`test-task-lease-fencing`), CLI exit codes (`test-cli-exit`), SDK surface (`test-sdk-surface`) | `node scripts/test-<name>.mjs` (TS suites via tsx) |
633
+
634
+ The historical **v0.7.20** acceptance baseline — *156 assertions, 0 failures* — is archived in
635
+ [`docs/audit/e2e-2026-09-07.md`](./docs/audit/e2e-2026-09-07.md). Perf probing:
636
+ `scripts/_dbg-render-perf.mjs`.
637
+
638
+ ---
639
+
640
+ ## Project layout
641
+
642
+ ```
643
+ AgentWorkShop/
644
+ ├── bin/ · cli/ # aw CLI — command registry · built-in commands · config engine
645
+ ├── app/ # Nuxt 4 frontend (srcDir)
646
+ │ ├── pages/ # / · /workshop · /workshop/agents · /workshop/teams
647
+ │ │ # /workshop/channel-templates · /workshop/schedules · /workshop/w/:id
648
+ │ │ # /town · /daq · /daq/:id · /dcw · /dcw/:id
649
+ │ │ # /aml · /operations · /monitor · /logs · /permissions
650
+ │ │ # /plugins · /users · /tokens · /settings
651
+ │ ├── components/workshop/ # timeline · lanes · task board · memory panel · 3D town
652
+ │ └── stores/composables/ # Pinia + AEP client
653
+ ├── server/
654
+ │ ├── api/ # REST + WS + A2A + MCP routes
655
+ │ ├── services/workshop/
656
+ │ │ ├── runtime/ # manager · scheduler-loop · task-engine · memory · mailbox
657
+ │ │ ├── agents/ # AgentInterface: 14 engines (+ industrial tools)
658
+ │ │ ├── daq/ dcw/ aml/ # edge runtimes · drivers · bus · storage · modeling lab
659
+ │ │ └── db/ # repos over node:sqlite
660
+ │ ├── mcp/ # MCP server (25 tools, in-process workshop face)
661
+ │ ├── plugins-builtin/ # plugins shipped with the package (serial-bridge · rag-bridge · diag-bridge · twin-injection-default)
662
+ │ └── plugins/ # runtime assembly (singletons)
663
+ ├── mcp/ # aw mcp — zero-dependency stdio MCP gateway (38 tools, instance auto-discovery)
664
+ ├── sdk/ # agentworkshop/sdk — plugin context, hook bus, REST client, browser SDK
665
+ ├── tui/ # terminal workbench (aw tui)
666
+ ├── shared/
667
+ │ └── config/ # schema.json (126 setting descriptors) + engine (merge/validate/persist) + path resolver
668
+ ├── config.yml # factory defaults (read at build/start; version comes from package.json)
669
+ ├── .AgentWorkShop/ # config root in a checkout — prompts (versioned) + runtime overrides · data · logs · commands (git-ignored)
670
+ ├── data/ # legacy pre-migration location (auto-migrated into the config root)
671
+ └── scripts/ # launchers · home bootstrap · E2E · verification suites
672
+ ```
673
+
674
+ ## Tech stack
675
+
676
+ | Layer | Tech |
677
+ |---|---|
678
+ | Framework | [Nuxt 4](https://nuxt.com) + Nitro (WebSocket) |
679
+ | UI | Vue 3.5 · Pinia · Ant Design Vue · UnoCSS · Three.js · ECharts |
680
+ | Language | TypeScript 5.7 across the stack; `shared/` used by both sides |
681
+ | CLI | Node ESM CLI with a pluggable command registry (`bin/aw.mjs`) |
682
+ | Persistence | `node:sqlite` (zero native deps) + FTS5 + optional `sqlite-vec`; TimescaleDB for time-series |
683
+ | Validation | `zod` at every message boundary |
684
+ | Interop | `@modelcontextprotocol/sdk` · A2A (JSON-RPC 2.0) · AEP v1 (in-house WS protocol) |
685
+ | Field bus | `modbus-serial` · `node-opcua` · `mqtt` |
686
+
687
+ ## Development
688
+
689
+ ```bash
690
+ pnpm dev # dev server (port from effective config)
691
+ pnpm cli … # the CLI in-repo: pnpm cli config list
692
+ pnpm tui # terminal workbench against a running instance
693
+ pnpm build && pnpm start
694
+ pnpm typecheck # wrapper: prepare → strip the stale volar entry → vue-tsc -b
695
+ pnpm lint
696
+ pnpm test:api-live # API suite against a running server
697
+ node scripts/e2e-full-closedloop.mjs # full closed loop (server must be running)
698
+ node scripts/e2e-crash-cycle.mjs # crash → restart → redelivery, manages its own instance
699
+ node scripts/test-sdk-surface.mjs # SDK export-surface guard
700
+ ```
701
+
702
+ > Two test-runner notes worth knowing before you debug a red suite: (1) `pnpm typecheck`
703
+ > runs [`scripts/typecheck.mjs`](./scripts/typecheck.mjs) rather than bare `nuxt typecheck`,
704
+ > because Nuxt 4.5 still writes the `vue-router/volar/sfc-route-blocks` compiler plugin into
705
+ > the generated tsconfig while vue-router 4.6 no longer exports it — bare vue-tsc dies while
706
+ > loading the config, so the check never actually ran; (2) TypeScript suites that import real
707
+ > route handlers (e.g. `scripts/e2e-memory-system.ts`) need the pure-node path
708
+ > `node --experimental-transform-types --import ./scripts/_audit/ts-register-hook.mjs <suite>.ts`,
709
+ > which maps the Nuxt `#imports` virtual module onto a shared-config stub.
710
+
711
+ The docs site lives in `docs/site/` (VitePress) and is deployed to GitHub Pages by
712
+ [`.github/workflows/deploy-docs.yml`](./.github/workflows/deploy-docs.yml):
713
+
714
+ ```bash
715
+ cd docs/site && npx vitepress dev # preview locally
716
+ cd docs/site && npx vitepress build # production build → .vitepress/dist
717
+ ```
718
+
719
+ The workflow syncs `docs/{cli,plugins,sdk}.md` (and their `.en.md` twins) into the site before
720
+ building, so those files are the single source of truth for the single-page guides.
721
+
722
+ ## Deployment (production)
723
+
724
+ Target shape: **single instance on an intranet host, TLS terminated by a reverse proxy**.
725
+ The server intentionally ships no TLS listener of its own — put caddy/nginx in front (they
726
+ also give you HTTP→HTTPS redirect, access logs and a second rate-limit layer).
727
+
728
+ > [!IMPORTANT]
729
+ > **One instance per config root.** Multiple instances pointing at the same `.AgentWorkShop`
730
+ > (repo or home) fight over plugin KV files and SQLite writes — on Windows this shows up as
731
+ > `EPERM` rename warnings. Run parallel instances only with **separate `AW_HOME` config roots**
732
+ > (the same isolation the E2E suites use).
733
+
734
+ ```bash
735
+ # 1) build + run (prod entry refuses to boot without .output)
736
+ pnpm build
737
+ NUXT_SESSION_PASSWORD=$(node -e "console.log(require('crypto').randomBytes(24).toString('hex'))") \
738
+ PORT=3000 node scripts/start.mjs
739
+ ```
740
+
741
+ **TLS reverse proxy.** caddy (automatic certificates, WebSocket pass-through built in):
742
+
743
+ ```caddy
744
+ aw.example.com {
745
+ reverse_proxy 127.0.0.1:3000
746
+ }
747
+ ```
748
+
749
+ nginx (note the WebSocket `Upgrade` headers — the workbench, HITL panels and live logs are all WS-driven):
750
+
751
+ ```nginx
752
+ server {
753
+ listen 443 ssl;
754
+ server_name aw.example.com;
755
+ # ssl_certificate / ssl_certificate_key ...
756
+ location / {
757
+ proxy_pass http://127.0.0.1:3000;
758
+ proxy_http_version 1.1;
759
+ proxy_set_header Upgrade $http_upgrade;
760
+ proxy_set_header Connection "upgrade";
761
+ proxy_set_header Host $host;
762
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
763
+ proxy_read_timeout 300s;
764
+ }
765
+ }
766
+ ```
767
+
768
+ After the whole site is HTTPS-only, enable `security.hstsEnabled` (runtime settings) so
769
+ responses carry `Strict-Transport-Security`.
770
+
771
+ **Process supervision.** `scripts/start.mjs` already spawns the server as a child with
772
+ crash back-off restart, a 30 s health probe and a heap-watermark proactive restart — put
773
+ *that* under a service manager so the supervisor itself survives reboots:
774
+
775
+ ```ini
776
+ # /etc/systemd/system/agentworkshop.service
777
+ [Service]
778
+ WorkingDirectory=/opt/agentworkshop
779
+ Environment=NUXT_SESSION_PASSWORD=<generated-secret>
780
+ Environment=PORT=3000
781
+ ExecStart=/usr/bin/node scripts/start.mjs
782
+ Restart=always
783
+ User=aw
784
+ [Install]
785
+ WantedBy=multi-user.target
786
+ ```
787
+
788
+ On Windows use `nssm install AgentWorkShop "C:\Program Files\nodejs\node.exe" scripts\start.mjs`.
789
+ Do **not** run a second instance against the same config root — a single-instance lock
790
+ (`.runtime/aw.lock` with heartbeat) makes the newer process take over and the older one exit.
791
+
792
+ **Auth hardening for production.** `security.allowRegistration` defaults to **false**:
793
+ with the first admin in place both register endpoints return 403, accounts are created by
794
+ an admin, and admin-created accounts are flagged `mustChangePassword` — the workbench
795
+ forces a password change at first login (admin password resets flag it again and revoke
796
+ all existing sessions). The bootstrap path is unaffected: with zero users the first
797
+ registered account still becomes the admin.
798
+
799
+ **Backups and restore.** `server/plugins/backup.ts` snapshots, every 24 h (keep 7) into
800
+ `<config root>/.AgentWorkShop/data/backups/`:
801
+
802
+ - the three SQLite databases (`workshop/users/daq-timeseries.sqlite`, WAL-checkpointed, atomic rename)
803
+ - all JSON stores plus `config.yml` / `runtime-settings.json` (`files-<stamp>/`)
804
+ - local object store + exports `daq-objects/` and `daq-exports/` (`objects-<stamp>/`) —
805
+ skipped with a log line when larger than `AW_BACKUP_OBJECTS_MAX_MB` (default 200 MB)
806
+ - a `manifest-<stamp>.json` per run; TimescaleDB/MinIO **docker volumes are not covered** —
807
+ back those up with `pg_dump` / `mc mirror` or volume snapshots
808
+
809
+ Restore drill (do it once before go-live): stop the server → copy `backups/` aside →
810
+ rebuild a data directory from the newest `*.bak` + `files-*` + `objects-*` bundles →
811
+ start → check `/api/health`, admin login, lines/recipes present. `BACKUP_DISABLED=1`,
812
+ `BACKUP_INTERVAL_HOURS` and `BACKUP_KEEP` tune the job.
813
+
814
+ **Production checklist.** generated `NUXT_SESSION_PASSWORD` (boot refuses known dev
815
+ secrets) · `security.allowRegistration=false` (default) · TLS via reverse proxy + HSTS ·
816
+ service manager installed · restore drill passed · `/api/health` + `/api/metrics` wired
817
+ into monitoring · `AW_HEAP_LIMIT_MB` sized for the host · `AW_RATE_LIMIT_OFF` **unset**
818
+ (the built-in rate guard must stay on) · `AW_BENCH_MODE` **unset** (write-control
819
+ interlocks and rate limits must stay fully engaged).
820
+
821
+ **The benchmark switch `AW_BENCH_MODE=1` is for experiments only — never in
822
+ production.** It serves the `bench/` paper pipeline (E1a four-arm ablation). When set
823
+ to 1: the API rate guard is disabled entirely; online-exploration rate limits (per-step
824
+ limit, 60 s minimum write interval, write-hold window) are waived wholesale; the write
825
+ endpoint accepts an `x-aw-bench-arm` header to bypass soft interlock layers
826
+ (no-interlock / no-readback / ungated; hard range and structural checks cannot be
827
+ bypassed by design). The only correct production value is **unset**: the code compares
828
+ strictly `=== '1'`, so the default is always the full arm. The flag is read at module
829
+ load — confirm it is absent **before** the process starts (a misconfiguration warns at
830
+ boot). `AW_RATE_LIMIT_OFF=1` only disables the API rate guard (write-control interlocks
831
+ stay on) and must likewise remain unset in production.
832
+
833
+ ## Research paper
834
+
835
+ The platform's governance mechanisms are documented in a submission-ready manuscript —
836
+ **"Grading Machine-Originated Plant Writes: Separately Inspectable Evidence for Industrial
837
+ Agent Teams"** (IEEE Transactions on Industrial Informatics, anonymous review draft,
838
+ 10 pages, IEEEtran). Source, compiled PDF and the five-seat review trail live in
839
+ [`paper/tii/SUBMISSION-IEEE-TII/`](./paper/tii/SUBMISSION-IEEE-TII/). Every mechanism
840
+ claim in the paper is backed by archives in this repository:
841
+
842
+ - [`docs/benchmarks/`](./docs/benchmarks) — the October 2026 deployment-scale regression
843
+ campaign: 14 pipeline executions, 1134 checks, zero failed (per-run `report.md` /
844
+ `benchmark.json` / `timeline.jsonl`), plus the admission-ablation companion run;
845
+ - [`docs/experiments/`](./docs/experiments) — cast-film closed-loop experiment plan and
846
+ results (the paper's Q3 deterministic loop);
847
+ - [`docs/audit/`](./docs/audit) — acceptance waves (baseline 1100+ assertions; follow-up wave reported item by item) referenced
848
+ by the evaluation section.
849
+
850
+ Re-run the paper pipeline locally: set `AW_BENCH_MODE=1` and follow
851
+ [`bench/PIPELINE.md`](./bench/PIPELINE.md).
852
+
853
+ ## Roadmap
854
+
855
+ | Capability | Status |
856
+ |---|---|
857
+ | Channel runtime, lead orchestration, 7-state task engine | Shipped |
858
+ | Four entry points: WS (AEP v1) · MCP · A2A · REST | Shipped |
859
+ | Persistent memory (FTS5 + optional vector hybrid) | Shipped |
860
+ | Industrial stack: DAQ · DCW write control · lines/recipes/runs | Shipped |
861
+ | Agent ↔ node binding + HITL approval + interlock | Shipped |
862
+ | 3D digital-twin town · line operations UI · dashboards | Shipped |
863
+ | Full-feature live E2E (agent reads/writes a real line, 23 checks) | Shipped |
864
+ | Runtime configuration system: settings persistence · hot reload · settings UI | Shipped |
865
+ | `aw` CLI: config · start/dev · init · register · doctor | Shipped |
866
+ | Multi-harness registry: omp · codex · dsh · opencode subprocess engines | Shipped |
867
+ | Six field protocols: Modbus TCP · Modbus RTU-over-TCP · OPC UA · MQTT · HTTP + the built-in serial-bridge plugin (acquisition + write control) | Shipped |
868
+ | Harness availability probing + dispatch-time engine checks (UI disable + 409) | Shipped |
869
+ | Recipe versioning with attribution + non-destructive rollback (UI + agent tools) | Shipped |
870
+ | Recipe-chain optimization loop: recipe_trial batch trials (no version) → adopt on progress → unified rollback with PLC restore | Shipped |
871
+ | Channel-bound lines: read-only log/recipe/status access for all members, line brief injected into prompts | Shipped |
872
+ | Agent self-audit: line_context / ops_log / recipe_log / recipe_versions / dcw_journal | Shipped |
873
+ | Multi-harness parallel live E2E on a real protocol line (four engines, one line) | Shipped |
874
+ | HITL approval flow verified over real OPC UA writes | Shipped |
875
+ | Bilingual docs (简体中文 / English) with VitePress language switcher | Shipped |
876
+ | Per-channel LLM provider/model selection from live harness catalogs | Shipped |
877
+ | Configurable DAQ/TSDB cadences (sampling & query defaults + floors, live) | Shipped |
878
+ | Team-scoped plugin switches (create-time pick + team dialog, per-channel tool injection) | Shipped |
879
+ | Plugin hot management: `/plugins` page + `aw plugin list/enable/disable` | Shipped |
880
+ | Rendering perf pass (v0.7.27): DAQ main-thread blocking −90%, twin −69%, adaptive quality restored to top tier; `window.__townStats` instrumentation | Shipped |
881
+ | Plugin system v2: browser panel injection, plugin-scoped settings/groups, plugin i18n, host runtime services (`ctx.services`/`ctx.daq`/`ctx.omp`) | Shipped |
882
+ | Instrument Glass material layer (v0.7.36): three-tier translucent materials, vibrancy, specular edges, spring motion, per-page route transitions | Shipped |
883
+ | Realtime pipeline optimizations: DAQ frame indexing O(n²)→O(n), incremental per-agent event index, chart in-place updates, size-aware JSON persistence | Shipped |
884
+ | AML auto-modeling lab: dataset build · job orchestration (uv-managed Python) · leaderboard · promotion gates · 14 agent tools | Shipped |
885
+ | Claude Agent SDK adapter — resident sessions with same-turn steer and `canUseTool` HITL | Shipped |
886
+ | Semantic parameter mapping: `param_control`/`param_read` by process parameter, four-layer write bound, tuning loop (`dcw_judge`/`dcw_rollback`) | Shipped |
887
+ | Channel group chat: requests become trackable jobs; native HITL (`omp` ask → approval → receipt) | Shipped |
888
+ | Scheduled tasks: `interval` / `daily`, per-run history, busy-guard + consecutive-failure circuit breaker | Shipped |
889
+ | Root task queue (FIFO, visible queue positions) + assignment generation & execution-lease fencing | Shipped |
890
+ | Supervision watchdog + harness continuity (`persistent`/`per_turn`, session-reuse lease with restart reasons) | Shipped |
891
+ | Channel process memory: deterministic event contracts, canonical root summary, durable outbox + compensation worker | Shipped |
892
+ | Runtime observability: `GET /api/system/monitor` team metrics, each with a documented rollback switch | Shipped |
893
+ | Industrial bench: integrated profile (83 checks, hard gate) + multi-scenario closed loops (injection / wwtp / anneal / BOPET) + quality-target optloop | Shipped |
894
+ | Full-coverage acceptance wave matrix on a production build (~1100+ real assertions, 2026-09-24) | Shipped |
895
+ | Twin provider plugin SDK: hot-loadable physics/scene/objective/training/solver providers via `ctx.twin`, generation-staged reload with lease draining, bundled provider shipped through the same external contract | Shipped |
896
+ | Any-scene hybrid-twin modeling loop: scene discover → compile → freeze → physics-spec draft/validate/compile → reference-trainer job (physics calibration + residual ensemble + conformal UQ), model-backed trials, continuous-calibration worker | Shipped |
897
+ | Two-mode optimization loop: dedicated `aml-training` / `aml-optimization` channel templates, mutually exclusive tool faces, exploration ↔ production modes with governed read-back-paired micro-writes | Shipped |
898
+ | Line operations feed: `/operations` page + workshop-console panel, nine-category operation timeline, structured write diffs, closed-loop phase inference | Shipped |
899
+ | External MCP gateway: `aw mcp` stdio server (38 tools), instance auto-discovery, `mcp.enabled` runtime gate | Shipped |
900
+ | Configurable system timezone (`time.timeZone`, live) + recipe `stepLimit` per-parameter single-step bound + recipe `description` metadata | Shipped |
901
+ | Production hardening: TLS, MQTT auth, OPC UA sign+encrypt defaults, structured audit log | Planned |
902
+ | Edge deployment shape: standalone edge-agent + central broker | Planned |
903
+ | Alarm outbound delivery (email/webhook) + ack workflow | Planned |
904
+ | CI pipeline (typecheck + lint + e2e) — docs deployment already runs on GitHub Actions | Planned |
905
+ | License: Apache 2.0 (permissive, commercial & production use allowed) | Shipped |
906
+
907
+ ## License
908
+
909
+ AgentWorkShop is an independent project and is **not an official product of Anthropic** or any LLM vendor. It integrates with agent harnesses (e.g. `omp`) through their public interfaces.
910
+
911
+ **AgentWorkShop is open-source software, licensed under the [Apache License 2.0](./LICENSE).**
912
+
913
+ - **Permitted** — personal, academic, and **commercial use**, including production deployment, modification, and redistribution, under the terms of the Apache License 2.0.
914
+ - **Conditions** — retain copyright and license notices, state significant changes, and include the `NOTICE` file when redistributing.
915
+ - **No trademark or warranty** — the license grants no trademark rights and provides the software **"as is"**, without warranties or conditions of any kind.
916
+
917
+ The full terms are in [LICENSE](./LICENSE). Questions: [GitHub @kingdol666](https://github.com/kingdol666).
918
+
919
+ <div align="center">
920
+
921
+ <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
922
+ <picture>
923
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
924
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
925
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
926
+ </picture>
927
+ </a>
928
+
929
+ </div>
930
+
931
+ ---
932
+
933
+ ## Contributing
934
+
935
+ Issues and pull requests are welcome. Before opening a PR:
936
+
937
+ 1. **Read the contract you are touching** — [`docs/plugins.md`](./docs/plugins.md) for the extension surface, [`docs/sdk.md`](./docs/sdk.md) for the programming client, [`docs/cli.md`](./docs/cli.md) for the command registry.
938
+ 2. **Run the guards locally**:
939
+
940
+ ```bash
941
+ pnpm typecheck # vue-tsc across app + server + shared
942
+ pnpm lint # eslint 9, zero warnings expected
943
+ node scripts/e2e-full-closedloop.mjs # full closed loop, server must be running
944
+ node scripts/test-sdk-surface.mjs # SDK export surface must not drift
945
+ node scripts/check-docs-sync.mjs # docs/site pages stay in sync with docs/*.md
946
+ ```
947
+
948
+ 3. **Keep commits conventional** — `commitlint` runs on `commit-msg` (`feat:`, `fix:`, `docs:`, `refactor:`, `perf:`, `test:`, `chore:`), and `lint-staged` fixes staged JS/TS/Vue on commit.
949
+ 4. **Add a test for behavior you change.** The repo leans on live E2E scripts under `scripts/` rather than mocks — a new industrial path should be provable against a running instance.
950
+
951
+ > [!TIP]
952
+ > `aw doctor` checks your environment end to end (Node version, config root, port availability, SQLite, optional Docker services) before you file a bug — it answers most "it does not start" reports immediately.
953
+
954
+ ## Security
955
+
956
+ Please **do not** open a public issue for a vulnerability. Report it privately through [GitHub Security Advisories](https://github.com/kingdol666/AgentWorkShop/security/advisories/new) with a reproduction and the affected version.
957
+
958
+ AgentWorkShop drives real equipment when you point it at real equipment: review `config.yml` interlocks, safe ranges and HITL settings before connecting a live PLC. The default posture is advisory — writes are interlocked, approved and read back — but the plant-side logic is always the final veto.
959
+
960
+ ---
961
+
962
+ <div align="center">
963
+
964
+ **If this project is useful to you, a ⭐ helps other people find it.**
965
+
966
+ <a href="https://star-history.com/#kingdol666/AgentWorkShop&Date">
967
+ <picture>
968
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date&theme=dark" />
969
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" />
970
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kingdol666/AgentWorkShop&type=Date" width="80%" />
971
+ </picture>
972
+ </a>
973
+
974
+ <br />
975
+
976
+ **[Documentation](https://kingdol666.github.io/AgentWorkShop)** · **[Guide](https://kingdol666.github.io/AgentWorkShop/guide/getting-started)** · **[Plugin API](./docs/plugins.md)** · **[SDK](./docs/sdk.md)** · **[CLI](./docs/cli.md)** · **[中文](./README-zh.md)**
977
+
978
+ <sub>Built with Nuxt 4 · Vue 3 · TypeScript · <code>node:sqlite</code> — supervisory layer, second-level soft real-time.<br />
979
+ Time-critical loops stay in the PLC.</sub>
980
+
981
+ </div>