agentworkshop 0.8.7 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2696) hide show
  1. package/.AgentWorkShop/prompts/host-tools.en.json +302 -302
  2. package/.AgentWorkShop/prompts/host-tools.json +4177 -4080
  3. package/.AgentWorkShop/prompts/lead-supervise.md +6 -0
  4. package/.AgentWorkShop/prompts/mode-goal.md +3 -3
  5. package/.output/.AgentWorkShop/aml-python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  6. package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
  7. package/.output/.AgentWorkShop/aml-python/__pycache__/train-example.cpython-312.pyc +0 -0
  8. package/.output/.AgentWorkShop/aml-python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  9. package/.output/.AgentWorkShop/aml-python/train-example.py +92 -92
  10. package/.output/.AgentWorkShop/prompts/host-tools.en.json +302 -302
  11. package/.output/.AgentWorkShop/prompts/host-tools.json +4177 -4080
  12. package/.output/.AgentWorkShop/prompts/lead-supervise.md +6 -0
  13. package/.output/.AgentWorkShop/prompts/mode-goal.md +3 -3
  14. package/.output/.AgentWorkShop/schema.json +173 -152
  15. package/.output/nitro.json +1 -1
  16. package/.output/public/_nuxt/11Nifltq2.js +16 -0
  17. package/.output/public/_nuxt/26OL4Ao82.js +1 -0
  18. package/.output/public/_nuxt/B37d6f-P2.js +1 -0
  19. package/.output/public/_nuxt/B8vwpJxO.js +1 -0
  20. package/.output/public/_nuxt/BEbg8OxK2.js +1 -0
  21. package/.output/public/_nuxt/BFUO7wT0.js +1 -0
  22. package/.output/public/_nuxt/BPUQZ9Lq2.js +8 -0
  23. package/.output/public/_nuxt/BVg2R2VB2.js +1 -0
  24. package/.output/public/_nuxt/BaYDgyaR.js +3 -0
  25. package/.output/public/_nuxt/BclHgAY62.js +1 -0
  26. package/.output/public/_nuxt/BfvuWqSa.js +1 -0
  27. package/.output/public/_nuxt/BkEokGX5.js +1 -0
  28. package/.output/public/_nuxt/BkZomIrQ.js +1 -0
  29. package/.output/public/_nuxt/BtZKe9ZV2.js +1 -0
  30. package/.output/public/_nuxt/BwOko01T.js +47 -0
  31. package/.output/public/_nuxt/BwQJEuBn.js +21 -0
  32. package/.output/public/_nuxt/C-wrWG5m.js +1 -0
  33. package/.output/public/_nuxt/C0I4h6do.js +1 -0
  34. package/.output/public/_nuxt/C0wjQa6_.js +1 -0
  35. package/.output/public/_nuxt/C5x3IQz42.js +1 -0
  36. package/.output/public/_nuxt/C7BcCB7C2.js +1 -0
  37. package/.output/public/_nuxt/CBkXv24C2.js +1 -0
  38. package/.output/public/_nuxt/CBpkE3Aa.js +1 -0
  39. package/.output/public/_nuxt/CDO7Zey1.js +20 -0
  40. package/.output/public/_nuxt/CEOSV8kw.js +1 -0
  41. package/.output/public/_nuxt/CHpYSwnV.js +1 -0
  42. package/.output/public/_nuxt/CZgxZE_w2.js +1 -0
  43. package/.output/public/_nuxt/CfE35xQa2.js +1 -0
  44. package/.output/public/_nuxt/Cgym6fLd2.js +1 -0
  45. package/.output/public/_nuxt/CjdxNYpU2.js +1 -0
  46. package/.output/public/_nuxt/CjhzuymI.js +2 -0
  47. package/.output/public/_nuxt/CmuGMxDP.js +1 -0
  48. package/.output/public/_nuxt/CoAJnzi9.js +1 -0
  49. package/.output/public/_nuxt/CuHnwZbm.js +1 -0
  50. package/.output/public/_nuxt/CwHhmA3N.js +1 -0
  51. package/.output/public/_nuxt/D1Ljnzu-.js +1 -0
  52. package/.output/public/_nuxt/D8AvmPUH.js +1 -0
  53. package/.output/public/_nuxt/D9saExk92.js +1 -0
  54. package/.output/public/_nuxt/DDLi49qE.js +1 -0
  55. package/.output/public/_nuxt/DNlwacP72.js +1 -0
  56. package/.output/public/_nuxt/DPIImHuY2.js +1 -0
  57. package/.output/public/_nuxt/DW6X-3XT.js +1 -0
  58. package/.output/public/_nuxt/DZc-zU-H2.js +1 -0
  59. package/.output/public/_nuxt/DZqVVvR0.js +1 -0
  60. package/.output/public/_nuxt/Df35i2Tg2.js +1 -0
  61. package/.output/public/_nuxt/DuUc4bbY2.js +1 -0
  62. package/.output/public/_nuxt/DvGgUSuN2.js +2 -0
  63. package/.output/public/_nuxt/DvfiRGS-.js +1 -0
  64. package/.output/public/_nuxt/DzPypczG.js +1 -0
  65. package/.output/public/_nuxt/FQK98hkN2.js +1 -0
  66. package/.output/public/_nuxt/Lq_0yoit2.js +1 -0
  67. package/.output/public/_nuxt/MJD65-MH2.js +1 -0
  68. package/.output/public/_nuxt/OmpTerminalPanel.ComMDrA8.css +1 -0
  69. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +1 -0
  70. package/.output/public/_nuxt/TownView.B_8ctigh.css +1 -0
  71. package/.output/public/_nuxt/WZrTmJqL.js +1 -0
  72. package/.output/public/_nuxt/_id_.BQRWK7J2.css +1 -0
  73. package/.output/public/_nuxt/_wsId_.CQMH8t8j.css +1 -0
  74. package/.output/public/_nuxt/agents.D-JPovTZ.css +1 -0
  75. package/.output/public/_nuxt/aml.PalMp-5n.css +1 -0
  76. package/.output/public/_nuxt/builds/latest.json +1 -1
  77. package/.output/public/_nuxt/builds/meta/f507c33b-4ecc-4e32-af88-2e3736b443e9.json +1 -0
  78. package/.output/public/_nuxt/byZYInPk2.js +1 -0
  79. package/.output/public/_nuxt/dHwWyr6b.js +1 -0
  80. package/.output/public/_nuxt/default.BEXGWZFQ.css +1 -0
  81. package/.output/public/_nuxt/gfKPQ5o72.js +2 -0
  82. package/.output/public/_nuxt/logs.DlG85QRw.css +1 -0
  83. package/.output/public/_nuxt/monitor.D3yEqqrv.css +1 -0
  84. package/.output/public/_nuxt/ontology.CkuUThtY.css +1 -0
  85. package/.output/public/_nuxt/operations.-l6u44Ar.css +1 -0
  86. package/.output/public/_nuxt/pages.Cdpm_B-G.css +1 -0
  87. package/.output/public/_nuxt/permissions.DxuOOIqQ.css +1 -0
  88. package/.output/public/_nuxt/rDvMijKA.js +9 -0
  89. package/.output/public/_nuxt/schedules.BXNJ9q_I.css +1 -0
  90. package/.output/public/_nuxt/teams.CLQaXno5.css +1 -0
  91. package/.output/public/_nuxt/tokens.BDSUWF-L.css +1 -0
  92. package/.output/public/_nuxt/tools.BwXFAb-X.css +1 -0
  93. package/.output/public/_nuxt/workshop.BBiFhXuM.css +1 -0
  94. package/.output/public/favicon.svg +14 -14
  95. package/.output/public/robots.txt +3 -3
  96. package/.output/server/chunks/_/LeftOutlined.mjs.map +1 -1
  97. package/.output/server/chunks/_/RightOutlined.mjs.map +1 -1
  98. package/.output/server/chunks/_/SearchOutlined.mjs +13 -13
  99. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -1
  100. package/.output/server/chunks/_/access.mjs +5 -3
  101. package/.output/server/chunks/_/access.mjs.map +1 -1
  102. package/.output/server/chunks/_/catalog-view.mjs +1 -1
  103. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  104. package/.output/server/chunks/_/data-export.mjs +12 -12
  105. package/.output/server/chunks/_/data-export.mjs.map +1 -1
  106. package/.output/server/chunks/_/data-query.mjs +3 -3
  107. package/.output/server/chunks/_/eda-run.repo.mjs +6 -4
  108. package/.output/server/chunks/_/eda-run.repo.mjs.map +1 -1
  109. package/.output/server/chunks/_/error-500.mjs.map +1 -1
  110. package/.output/server/chunks/_/features.mjs +9 -7
  111. package/.output/server/chunks/_/features.mjs.map +1 -1
  112. package/.output/server/chunks/_/golden.mjs +3 -3
  113. package/.output/server/chunks/_/host-bindings.mjs +5 -3
  114. package/.output/server/chunks/_/host-bindings.mjs.map +1 -1
  115. package/.output/server/chunks/_/index.mjs +5 -3
  116. package/.output/server/chunks/_/index.mjs.map +1 -1
  117. package/.output/server/chunks/_/line-scope.mjs +1 -1
  118. package/.output/server/chunks/_/mes-console.mjs +1 -1
  119. package/.output/server/chunks/_/mes-secrets.repo.mjs +5 -3
  120. package/.output/server/chunks/_/mes-secrets.repo.mjs.map +1 -1
  121. package/.output/server/chunks/_/nitro.mjs +8022 -4350
  122. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  123. package/.output/server/chunks/_/ocap.mjs +1 -1
  124. package/.output/server/chunks/_/rest-auth.mjs +1 -1
  125. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  126. package/.output/server/chunks/_/spc.mjs +5 -3
  127. package/.output/server/chunks/_/spc.mjs.map +1 -1
  128. package/.output/server/chunks/_/user.schema.mjs +1 -1
  129. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +716 -0
  130. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +1 -0
  131. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +72 -0
  132. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +1 -0
  133. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +942 -0
  134. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +1 -0
  135. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +141 -0
  136. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +1 -0
  137. package/.output/server/chunks/build/TownView-BqdMFqei.mjs +6496 -0
  138. package/.output/server/chunks/build/TownView-BqdMFqei.mjs.map +1 -0
  139. package/.output/server/chunks/build/_id_-CsCtnbwe.mjs +394 -0
  140. package/.output/server/chunks/build/_id_-CsCtnbwe.mjs.map +1 -0
  141. package/.output/server/chunks/build/_id_-P1W47Gqq.mjs +2047 -0
  142. package/.output/server/chunks/build/_id_-P1W47Gqq.mjs.map +1 -0
  143. package/.output/server/chunks/build/_wsId_-DpOErFj6.mjs +14591 -0
  144. package/.output/server/chunks/build/_wsId_-DpOErFj6.mjs.map +1 -0
  145. package/.output/server/chunks/build/agents-D7CdEUTv.mjs +1080 -0
  146. package/.output/server/chunks/build/agents-D7CdEUTv.mjs.map +1 -0
  147. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +263 -0
  148. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +1 -0
  149. package/.output/server/chunks/build/aml-DRAFRcGU.mjs +816 -0
  150. package/.output/server/chunks/build/aml-DRAFRcGU.mjs.map +1 -0
  151. package/.output/server/chunks/build/analysis-J9axLuRt.mjs +535 -0
  152. package/.output/server/chunks/build/analysis-J9axLuRt.mjs.map +1 -0
  153. package/.output/server/chunks/build/api-B4Om0mEc.mjs +55 -0
  154. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -0
  155. package/.output/server/chunks/build/api-BEW_ebY_.mjs +66 -0
  156. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +1 -0
  157. package/.output/server/chunks/build/api-BsAgXWxi.mjs +74 -0
  158. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
  159. package/.output/server/chunks/build/api-error-BwAQLw44.mjs +47 -0
  160. package/.output/server/chunks/build/api-error-BwAQLw44.mjs.map +1 -0
  161. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs +81 -0
  162. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +1 -0
  163. package/.output/server/chunks/build/board-CJUc032b.mjs +191 -0
  164. package/.output/server/chunks/build/board-CJUc032b.mjs.map +1 -0
  165. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -0
  166. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +953 -0
  167. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +1 -0
  168. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs +944 -0
  169. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs.map +1 -0
  170. package/.output/server/chunks/build/chart-pipeline-BpoWYMK_.mjs.map +1 -0
  171. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -0
  172. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +439 -0
  173. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +1 -0
  174. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +43 -0
  175. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +1 -0
  176. package/.output/server/chunks/build/constants-HPHJvjne.mjs +144 -0
  177. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -0
  178. package/.output/server/chunks/build/core-CgTOPS4t.mjs +294 -0
  179. package/.output/server/chunks/build/core-CgTOPS4t.mjs.map +1 -0
  180. package/.output/server/chunks/build/daq-B_dRMDw4.mjs +1268 -0
  181. package/.output/server/chunks/build/daq-B_dRMDw4.mjs.map +1 -0
  182. package/.output/server/chunks/build/data-D8uX1dnm.mjs +483 -0
  183. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
  184. package/.output/server/chunks/build/dcw-D_HD_H_2.mjs +507 -0
  185. package/.output/server/chunks/build/dcw-D_HD_H_2.mjs.map +1 -0
  186. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs.map +1 -0
  187. package/.output/server/chunks/build/default-CNWS6NUw.mjs +2355 -0
  188. package/.output/server/chunks/build/default-CNWS6NUw.mjs.map +1 -0
  189. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +406 -0
  190. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +1 -0
  191. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +834 -0
  192. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +1 -0
  193. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs +14 -0
  194. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs.map +1 -0
  195. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs +540 -0
  196. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs.map +1 -0
  197. package/.output/server/chunks/build/es-Bxu10NJ2.mjs +45 -0
  198. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -0
  199. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +2448 -0
  200. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +1 -0
  201. package/.output/server/chunks/build/form-D_UpWPN4.mjs +4712 -0
  202. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +1 -0
  203. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +553 -0
  204. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +1 -0
  205. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +132 -0
  206. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +1 -0
  207. package/.output/server/chunks/build/input-GtPuSEgt.mjs +2181 -0
  208. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +1 -0
  209. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1120 -0
  210. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +1 -0
  211. package/.output/server/chunks/build/interval-DvHBIIZh.mjs +9 -0
  212. package/.output/server/chunks/build/interval-DvHBIIZh.mjs.map +1 -0
  213. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs +7 -0
  214. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs.map +1 -0
  215. package/.output/server/chunks/build/logs-BnYSMRXM.mjs +494 -0
  216. package/.output/server/chunks/build/logs-BnYSMRXM.mjs.map +1 -0
  217. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +1952 -0
  218. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +1 -0
  219. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +2255 -0
  220. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs.map +1 -0
  221. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs.map +1 -0
  222. package/.output/server/chunks/build/ontology-ohICfVVb.mjs +1408 -0
  223. package/.output/server/chunks/build/ontology-ohICfVVb.mjs.map +1 -0
  224. package/.output/server/chunks/build/operations-4zOVhW7o.mjs +313 -0
  225. package/.output/server/chunks/build/operations-4zOVhW7o.mjs.map +1 -0
  226. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +204 -0
  227. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +1 -0
  228. package/.output/server/chunks/build/pages-DEv4ProW.mjs +544 -0
  229. package/.output/server/chunks/build/pages-DEv4ProW.mjs.map +1 -0
  230. package/.output/server/chunks/build/pagination-DTAconUo.mjs +1346 -0
  231. package/.output/server/chunks/build/pagination-DTAconUo.mjs.map +1 -0
  232. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +639 -0
  233. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs.map +1 -0
  234. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs +214 -0
  235. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs.map +1 -0
  236. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +274 -0
  237. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -0
  238. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +340 -0
  239. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +1 -0
  240. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +78 -0
  241. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +1 -0
  242. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs +7174 -0
  243. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs.map +1 -0
  244. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +341 -0
  245. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +1 -0
  246. package/.output/server/chunks/build/select-B3Dsb9yq.mjs +3923 -0
  247. package/.output/server/chunks/build/select-B3Dsb9yq.mjs.map +1 -0
  248. package/.output/server/chunks/build/settings-DXLJPq7d.mjs +1016 -0
  249. package/.output/server/chunks/build/settings-DXLJPq7d.mjs.map +1 -0
  250. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +110 -0
  251. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +1 -0
  252. package/.output/server/chunks/build/spin-C2cuvGth.mjs +357 -0
  253. package/.output/server/chunks/build/spin-C2cuvGth.mjs.map +1 -0
  254. package/.output/server/chunks/build/studio-hSqH9TYS.mjs +338 -0
  255. package/.output/server/chunks/build/studio-hSqH9TYS.mjs.map +1 -0
  256. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +377 -0
  257. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +1 -0
  258. package/.output/server/chunks/build/table-CmVD-cA9.mjs +7546 -0
  259. package/.output/server/chunks/build/table-CmVD-cA9.mjs.map +1 -0
  260. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +1924 -0
  261. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +1 -0
  262. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +1156 -0
  263. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +1 -0
  264. package/.output/server/chunks/build/teams-BbwYJyzv.mjs +1205 -0
  265. package/.output/server/chunks/build/teams-BbwYJyzv.mjs.map +1 -0
  266. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +1064 -0
  267. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs.map +1 -0
  268. package/.output/server/chunks/build/tools-CnYi9cou.mjs +489 -0
  269. package/.output/server/chunks/build/tools-CnYi9cou.mjs.map +1 -0
  270. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +920 -0
  271. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +1 -0
  272. package/.output/server/chunks/build/town-BV-hbwb5.mjs +77 -0
  273. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -0
  274. package/.output/server/chunks/build/town-CcoQKjMj.mjs +135 -0
  275. package/.output/server/chunks/build/town-CcoQKjMj.mjs.map +1 -0
  276. package/.output/server/chunks/build/types-D6J7slEa.mjs +5565 -0
  277. package/.output/server/chunks/build/types-D6J7slEa.mjs.map +1 -0
  278. package/.output/server/chunks/build/types-DWqIeMRP.mjs +78 -0
  279. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -0
  280. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs +126 -0
  281. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs.map +1 -0
  282. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs +79 -0
  283. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs.map +1 -0
  284. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +69 -0
  285. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -0
  286. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs +119 -0
  287. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs.map +1 -0
  288. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs +135 -0
  289. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs.map +1 -0
  290. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +94 -0
  291. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -0
  292. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +88 -0
  293. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -0
  294. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +196 -0
  295. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -0
  296. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +91 -0
  297. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -0
  298. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +84 -0
  299. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -0
  300. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +269 -0
  301. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -0
  302. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +95 -0
  303. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -0
  304. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +88 -0
  305. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -0
  306. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +132 -0
  307. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -0
  308. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +131 -0
  309. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -0
  310. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +144 -0
  311. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -0
  312. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +72 -0
  313. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -0
  314. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +81 -0
  315. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -0
  316. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +178 -0
  317. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -0
  318. package/.output/server/chunks/build/useDaqDetailNode-BGMRUIXN.mjs +101 -0
  319. package/.output/server/chunks/build/useDaqDetailNode-BGMRUIXN.mjs.map +1 -0
  320. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +161 -0
  321. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -0
  322. package/.output/server/chunks/build/useDaqFilters-zAAVlzJQ.mjs +224 -0
  323. package/.output/server/chunks/build/useDaqFilters-zAAVlzJQ.mjs.map +1 -0
  324. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +92 -0
  325. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -0
  326. package/.output/server/chunks/build/useDaqOptimizations-BE_9Z2s_.mjs +138 -0
  327. package/.output/server/chunks/build/useDaqOptimizations-BE_9Z2s_.mjs.map +1 -0
  328. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +395 -0
  329. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +1 -0
  330. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +189 -0
  331. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -0
  332. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +356 -0
  333. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -0
  334. package/.output/server/chunks/build/useDashboardData-Cw8lrPo5.mjs +155 -0
  335. package/.output/server/chunks/build/useDashboardData-Cw8lrPo5.mjs.map +1 -0
  336. package/.output/server/chunks/build/useDcwAddNode-KnocMk1m.mjs +221 -0
  337. package/.output/server/chunks/build/useDcwAddNode-KnocMk1m.mjs.map +1 -0
  338. package/.output/server/chunks/build/useDcwCards-C53IiOcg.mjs +69 -0
  339. package/.output/server/chunks/build/useDcwCards-C53IiOcg.mjs.map +1 -0
  340. package/.output/server/chunks/build/useDcwDetailScope-D6qXrfZu.mjs +186 -0
  341. package/.output/server/chunks/build/useDcwDetailScope-D6qXrfZu.mjs.map +1 -0
  342. package/.output/server/chunks/build/useDcwDetailTemplates-DPOXu1o_.mjs +150 -0
  343. package/.output/server/chunks/build/useDcwDetailTemplates-DPOXu1o_.mjs.map +1 -0
  344. package/.output/server/chunks/build/useDcwFilter-DNQ6Ivwd.mjs +73 -0
  345. package/.output/server/chunks/build/useDcwFilter-DNQ6Ivwd.mjs.map +1 -0
  346. package/.output/server/chunks/build/useDcwLedger-BhbUBCbi.mjs +81 -0
  347. package/.output/server/chunks/build/useDcwLedger-BhbUBCbi.mjs.map +1 -0
  348. package/.output/server/chunks/build/useDcwLineMutations-KA7VnggO.mjs +139 -0
  349. package/.output/server/chunks/build/useDcwLineMutations-KA7VnggO.mjs.map +1 -0
  350. package/.output/server/chunks/build/useDcwLineRun-3zx_UCxi.mjs +106 -0
  351. package/.output/server/chunks/build/useDcwLineRun-3zx_UCxi.mjs.map +1 -0
  352. package/.output/server/chunks/build/useDcwParamApprovals-DzyY6Tmi.mjs +123 -0
  353. package/.output/server/chunks/build/useDcwParamApprovals-DzyY6Tmi.mjs.map +1 -0
  354. package/.output/server/chunks/build/useDcwProducts-B05ymt3k.mjs +95 -0
  355. package/.output/server/chunks/build/useDcwProducts-B05ymt3k.mjs.map +1 -0
  356. package/.output/server/chunks/build/useDcwQuery-vWpgpSmJ.mjs +100 -0
  357. package/.output/server/chunks/build/useDcwQuery-vWpgpSmJ.mjs.map +1 -0
  358. package/.output/server/chunks/build/useDcwQuickActions-DUkLy34S.mjs +90 -0
  359. package/.output/server/chunks/build/useDcwQuickActions-DUkLy34S.mjs.map +1 -0
  360. package/.output/server/chunks/build/useDcwRecipes-BAb4Yg3d.mjs +260 -0
  361. package/.output/server/chunks/build/useDcwRecipes-BAb4Yg3d.mjs.map +1 -0
  362. package/.output/server/chunks/build/useDcwStream-RN3U_Jsh.mjs +455 -0
  363. package/.output/server/chunks/build/useDcwStream-RN3U_Jsh.mjs.map +1 -0
  364. package/.output/server/chunks/build/useDcwTemplates-D2aoejps.mjs +93 -0
  365. package/.output/server/chunks/build/useDcwTemplates-D2aoejps.mjs.map +1 -0
  366. package/.output/server/chunks/build/useDcwWrites-7w8txksD.mjs +142 -0
  367. package/.output/server/chunks/build/useDcwWrites-7w8txksD.mjs.map +1 -0
  368. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs +128 -0
  369. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs.map +1 -0
  370. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +109 -0
  371. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -0
  372. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +55 -0
  373. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +1 -0
  374. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +79 -0
  375. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -0
  376. package/.output/server/chunks/build/useLogsManual-D0dvgCsP.mjs +91 -0
  377. package/.output/server/chunks/build/useLogsManual-D0dvgCsP.mjs.map +1 -0
  378. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +152 -0
  379. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -0
  380. package/.output/server/chunks/build/useLogsScope-DEUyq-My.mjs +85 -0
  381. package/.output/server/chunks/build/useLogsScope-DEUyq-My.mjs.map +1 -0
  382. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +219 -0
  383. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -0
  384. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +137 -0
  385. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -0
  386. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +93 -0
  387. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -0
  388. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +73 -0
  389. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -0
  390. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +197 -0
  391. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -0
  392. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +149 -0
  393. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +1 -0
  394. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +158 -0
  395. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -0
  396. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
  397. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs +81 -0
  398. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs.map +1 -0
  399. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs +86 -0
  400. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs.map +1 -0
  401. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs +99 -0
  402. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs.map +1 -0
  403. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs +82 -0
  404. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs.map +1 -0
  405. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +84 -0
  406. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -0
  407. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs +105 -0
  408. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs.map +1 -0
  409. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs +125 -0
  410. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs.map +1 -0
  411. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +74 -0
  412. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -0
  413. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +117 -0
  414. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -0
  415. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +89 -0
  416. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -0
  417. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +120 -0
  418. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -0
  419. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +94 -0
  420. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -0
  421. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs.map +1 -0
  422. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +143 -0
  423. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -0
  424. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +140 -0
  425. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -0
  426. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs +127 -0
  427. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs.map +1 -0
  428. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +1659 -0
  429. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +1 -0
  430. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +62 -0
  431. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -0
  432. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +94 -0
  433. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -0
  434. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +80 -0
  435. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -0
  436. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +170 -0
  437. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -0
  438. package/.output/server/chunks/build/users-DjiVC_tS.mjs +571 -0
  439. package/.output/server/chunks/build/users-DjiVC_tS.mjs.map +1 -0
  440. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +548 -0
  441. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -0
  442. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs.map +1 -0
  443. package/.output/server/chunks/routes/api/health.get.mjs +4 -2
  444. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  445. package/.output/server/chunks/routes/api/index.get.mjs +4 -2
  446. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/index.post.mjs +4 -2
  448. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/mcp/workshop.mjs +5 -3
  450. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/metrics.mjs +4 -2
  452. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +4 -2
  454. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +4 -2
  456. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +4 -2
  458. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +4 -2
  460. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  461. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +4 -2
  462. package/.output/server/chunks/routes/api/system/backup/list.get.mjs.map +1 -1
  463. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +6 -4
  464. package/.output/server/chunks/routes/api/system/backup/run.post.mjs.map +1 -1
  465. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +4 -2
  466. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs.map +1 -1
  467. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +4 -2
  468. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  469. package/.output/server/chunks/routes/api/system/config.get.mjs +4 -2
  470. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  471. package/.output/server/chunks/routes/api/system/index.get.mjs +4 -2
  472. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  473. package/.output/server/chunks/routes/api/system/index.patch.mjs +4 -2
  474. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  475. package/.output/server/chunks/routes/api/system/index.post.mjs +4 -2
  476. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  477. package/.output/server/chunks/routes/api/system/index2.get.mjs +4 -2
  478. package/.output/server/chunks/routes/api/system/index2.get.mjs.map +1 -1
  479. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +4 -2
  480. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  481. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +4 -2
  482. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  483. package/.output/server/chunks/routes/api/system/monitor.get.mjs +4 -2
  484. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  485. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +4 -2
  486. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  487. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +4 -2
  488. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  489. package/.output/server/chunks/routes/api/system/timezone.get.mjs +4 -2
  490. package/.output/server/chunks/routes/api/system/timezone.get.mjs.map +1 -1
  491. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +4 -2
  492. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  493. package/.output/server/chunks/routes/api/users/_id_.get.mjs +4 -2
  494. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  495. package/.output/server/chunks/routes/api/users/_id_.put.mjs +4 -2
  496. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  497. package/.output/server/chunks/routes/api/users/change-password.post.mjs +4 -2
  498. package/.output/server/chunks/routes/api/users/change-password.post.mjs.map +1 -1
  499. package/.output/server/chunks/routes/api/users/index.get.mjs +4 -2
  500. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  501. package/.output/server/chunks/routes/api/users/index.post.mjs +4 -2
  502. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  503. package/.output/server/chunks/routes/api/users/login.post.mjs +6 -5
  504. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  505. package/.output/server/chunks/routes/api/users/logout.post.mjs +4 -2
  506. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  507. package/.output/server/chunks/routes/api/users/me.get.mjs +4 -2
  508. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  509. package/.output/server/chunks/routes/api/users/register.post.mjs +4 -2
  510. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  511. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +4 -2
  512. package/.output/server/chunks/routes/api/users/setup-status.get.mjs.map +1 -1
  513. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +4 -2
  514. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  515. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +4 -2
  516. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  517. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +4 -2
  518. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  519. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +4 -2
  520. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  521. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +13 -3
  522. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  523. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +4 -2
  524. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  525. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +4 -2
  526. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  527. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +4 -2
  528. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  529. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +4 -2
  530. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  531. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +4 -2
  532. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  533. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +4 -2
  534. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs.map +1 -1
  535. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +4 -2
  536. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs.map +1 -1
  537. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +4 -2
  538. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  539. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +5 -3
  540. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  541. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +4 -2
  542. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  543. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +4 -2
  544. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  545. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +4 -2
  546. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs.map +1 -1
  547. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +4 -2
  548. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  549. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +4 -2
  550. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  551. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +4 -2
  552. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  553. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +4 -2
  554. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  555. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +4 -2
  556. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +4 -2
  558. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -1
  559. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +4 -2
  560. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  561. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +4 -2
  562. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -1
  563. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +4 -2
  564. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -1
  565. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +4 -2
  566. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -1
  567. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +4 -2
  568. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -1
  569. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +4 -2
  570. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -1
  571. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +4 -2
  572. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs.map +1 -1
  573. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +4 -2
  574. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs.map +1 -1
  575. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +4 -2
  576. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  577. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +4 -2
  578. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs.map +1 -1
  579. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +4 -2
  580. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  581. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +4 -2
  582. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs.map +1 -1
  583. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +4 -2
  584. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  585. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +4 -2
  586. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -1
  587. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +4 -2
  588. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -1
  589. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +4 -2
  590. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs.map +1 -1
  591. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +4 -2
  592. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs.map +1 -1
  593. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +4 -2
  594. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs.map +1 -1
  595. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +4 -2
  596. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs.map +1 -1
  597. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +4 -2
  598. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -1
  599. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +4 -2
  600. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs.map +1 -1
  601. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +4 -2
  602. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs.map +1 -1
  603. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +4 -2
  604. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs.map +1 -1
  605. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +4 -2
  606. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -1
  607. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +4 -2
  608. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -1
  609. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +4 -2
  610. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs.map +1 -1
  611. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +4 -2
  612. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs.map +1 -1
  613. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +4 -2
  614. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs.map +1 -1
  615. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +4 -2
  616. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs.map +1 -1
  617. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +4 -2
  618. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs.map +1 -1
  619. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +4 -2
  620. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -1
  621. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +4 -2
  622. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -1
  623. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +4 -2
  624. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  625. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +4 -2
  626. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  627. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +4 -2
  628. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  629. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +4 -2
  630. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  631. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +5 -3
  632. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  633. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +4 -2
  634. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  635. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +7 -4
  636. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  637. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +4 -2
  638. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  639. package/.output/server/chunks/routes/api/workshop/caller.mjs +4 -2
  640. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  641. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +6 -4
  642. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  643. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +4 -2
  644. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  645. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +4 -2
  646. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  647. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +4 -2
  648. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  649. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +4 -2
  650. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  651. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +5 -3
  652. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  653. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +4 -2
  654. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  655. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +4 -2
  656. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  657. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +4 -2
  658. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  659. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +4 -2
  660. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  661. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +4 -2
  662. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  663. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +4 -2
  664. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  665. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +4 -2
  666. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  667. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +4 -2
  668. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs.map +1 -1
  669. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +4 -2
  670. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  671. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +4 -2
  672. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  673. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +4 -2
  674. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  675. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +4 -2
  676. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs.map +1 -1
  677. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +5 -3
  678. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs.map +1 -1
  679. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +4 -2
  680. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs.map +1 -1
  681. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +4 -2
  682. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs.map +1 -1
  683. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +4 -2
  684. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  685. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs +5 -3
  686. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs.map +1 -1
  687. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +4 -2
  688. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  689. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +5 -3
  690. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  691. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +5 -3
  692. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -1
  693. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +4 -2
  694. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  695. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +4 -2
  696. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  697. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +5 -3
  698. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs.map +1 -1
  699. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +4 -2
  700. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  701. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +5 -3
  702. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  703. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +4 -2
  704. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  705. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +7 -3
  706. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  707. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +5 -3
  708. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -1
  709. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +4 -2
  710. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs.map +1 -1
  711. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +4 -2
  712. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs.map +1 -1
  713. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +4 -2
  714. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs.map +1 -1
  715. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +4 -2
  716. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs.map +1 -1
  717. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +4 -2
  718. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs.map +1 -1
  719. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +4 -2
  720. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs.map +1 -1
  721. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +4 -2
  722. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs.map +1 -1
  723. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +4 -2
  724. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  725. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +4 -2
  726. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  727. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +5 -3
  728. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  729. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +5 -3
  730. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs.map +1 -1
  731. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +5 -3
  732. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs.map +1 -1
  733. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +22 -5
  734. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs.map +1 -1
  735. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +4 -2
  736. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  737. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +5 -3
  738. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  739. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +4 -2
  740. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  741. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +4 -2
  742. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  743. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +11 -9
  744. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  745. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +4 -2
  746. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  747. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +4 -2
  748. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -1
  749. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +4 -2
  750. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  751. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +4 -2
  752. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  753. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +16 -4
  754. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -1
  755. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +5 -3
  756. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  757. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +4 -2
  758. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  759. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +4 -2
  760. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  761. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +4 -2
  762. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  763. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +4 -2
  764. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  765. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +4 -2
  766. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  767. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +4 -2
  768. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  769. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +4 -2
  770. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs.map +1 -1
  771. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +4 -2
  772. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs.map +1 -1
  773. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +4 -2
  774. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs.map +1 -1
  775. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +4 -2
  776. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  777. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +7 -5
  778. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs.map +1 -1
  779. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +5 -3
  780. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  781. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +5 -3
  782. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  783. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +4 -2
  784. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs.map +1 -1
  785. package/.output/server/chunks/routes/api/workshop/daq/storage/retention.put.mjs +68 -0
  786. package/.output/server/chunks/routes/api/workshop/daq/storage/retention.put.mjs.map +1 -0
  787. package/.output/server/chunks/routes/api/workshop/daq/storage/rollup.post.mjs +45 -0
  788. package/.output/server/chunks/routes/api/workshop/daq/storage/rollup.post.mjs.map +1 -0
  789. package/.output/server/chunks/routes/api/workshop/daq/storage.get.mjs +36 -0
  790. package/.output/server/chunks/routes/api/workshop/daq/storage.get.mjs.map +1 -0
  791. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +7 -5
  792. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  793. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +7 -5
  794. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  795. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +5 -3
  796. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  797. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +5 -3
  798. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  799. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +5 -3
  800. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -1
  801. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +5 -3
  802. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  803. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +5 -3
  804. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  805. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +5 -3
  806. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  807. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +6 -4
  808. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  809. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +5 -3
  810. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  811. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +5 -3
  812. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  813. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +5 -3
  814. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  815. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +5 -3
  816. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  817. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +5 -3
  818. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  819. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +5 -3
  820. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  821. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +5 -3
  822. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  823. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +5 -3
  824. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  825. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -3
  826. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  827. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +5 -3
  828. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  829. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +5 -3
  830. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  831. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +5 -3
  832. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  833. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +5 -3
  834. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -1
  835. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +4 -2
  836. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  837. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +4 -2
  838. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs.map +1 -1
  839. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +5 -3
  840. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  841. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +5 -3
  842. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  843. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +5 -3
  844. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  845. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +5 -3
  846. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  847. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +5 -3
  848. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  849. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +4 -2
  850. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  851. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +5 -3
  852. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -1
  853. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +5 -3
  854. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
  855. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +5 -3
  856. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs.map +1 -1
  857. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +5 -3
  858. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  859. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +5 -3
  860. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  861. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +5 -3
  862. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  863. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +5 -3
  864. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  865. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +5 -3
  866. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  867. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +5 -3
  868. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -1
  869. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +5 -3
  870. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -1
  871. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +5 -3
  872. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -1
  873. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +5 -3
  874. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  875. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +5 -3
  876. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  877. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +5 -3
  878. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  879. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +4 -2
  880. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  881. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +4 -2
  882. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs.map +1 -1
  883. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +5 -3
  884. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  885. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +4 -2
  886. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  887. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +18 -4
  888. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  889. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +4 -2
  890. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  891. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +5 -3
  892. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  893. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +5 -3
  894. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  895. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +5 -3
  896. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  897. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +5 -3
  898. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  899. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +5 -3
  900. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  901. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +5 -3
  902. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  903. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +7 -4
  904. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  905. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +5 -3
  906. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  907. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +7 -4
  908. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  909. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +7 -4
  910. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  911. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +4 -2
  912. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs.map +1 -1
  913. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +4 -2
  914. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs.map +1 -1
  915. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +4 -2
  916. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs.map +1 -1
  917. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +5 -3
  918. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs.map +1 -1
  919. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +4 -2
  920. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs.map +1 -1
  921. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +4 -2
  922. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs.map +1 -1
  923. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +4 -2
  924. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs.map +1 -1
  925. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +4 -2
  926. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs.map +1 -1
  927. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +4 -2
  928. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs.map +1 -1
  929. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +4 -2
  930. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs.map +1 -1
  931. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +4 -2
  932. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs.map +1 -1
  933. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +4 -2
  934. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs.map +1 -1
  935. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +4 -2
  936. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs.map +1 -1
  937. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +4 -2
  938. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs.map +1 -1
  939. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +4 -2
  940. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs.map +1 -1
  941. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +4 -2
  942. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs.map +1 -1
  943. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +4 -2
  944. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs.map +1 -1
  945. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +4 -2
  946. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs.map +1 -1
  947. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +4 -2
  948. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs.map +1 -1
  949. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +4 -2
  950. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs.map +1 -1
  951. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +4 -2
  952. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs.map +1 -1
  953. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +4 -2
  954. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs.map +1 -1
  955. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +4 -2
  956. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs.map +1 -1
  957. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +4 -2
  958. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs.map +1 -1
  959. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +4 -2
  960. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs.map +1 -1
  961. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +4 -2
  962. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs.map +1 -1
  963. package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs +4 -2
  964. package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs.map +1 -1
  965. package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs +4 -2
  966. package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs.map +1 -1
  967. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +4 -2
  968. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs.map +1 -1
  969. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +4 -2
  970. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs.map +1 -1
  971. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +4 -2
  972. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs.map +1 -1
  973. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +4 -2
  974. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs.map +1 -1
  975. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +4 -2
  976. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs.map +1 -1
  977. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +4 -2
  978. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs.map +1 -1
  979. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +4 -2
  980. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs.map +1 -1
  981. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs +4 -2
  982. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs.map +1 -1
  983. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs +4 -2
  984. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs.map +1 -1
  985. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs +4 -2
  986. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs.map +1 -1
  987. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +5 -3
  988. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs.map +1 -1
  989. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +5 -3
  990. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs.map +1 -1
  991. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +5 -3
  992. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs.map +1 -1
  993. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +5 -3
  994. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  995. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +5 -3
  996. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs.map +1 -1
  997. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +5 -3
  998. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs.map +1 -1
  999. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +5 -3
  1000. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs.map +1 -1
  1001. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +5 -3
  1002. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs.map +1 -1
  1003. package/.output/server/chunks/routes/api/workshop/index.get.mjs +4 -2
  1004. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  1005. package/.output/server/chunks/routes/api/workshop/index.mjs +5 -3
  1006. package/.output/server/chunks/routes/api/workshop/index.mjs.map +1 -1
  1007. package/.output/server/chunks/routes/api/workshop/index.post.mjs +4 -2
  1008. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  1009. package/.output/server/chunks/routes/api/workshop/index.put.mjs +5 -3
  1010. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -1
  1011. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +4 -2
  1012. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  1013. package/.output/server/chunks/routes/api/workshop/index10.post.mjs +4 -2
  1014. package/.output/server/chunks/routes/api/workshop/index10.post.mjs.map +1 -1
  1015. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +4 -2
  1016. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -1
  1017. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +5 -3
  1018. package/.output/server/chunks/routes/api/workshop/index12.get.mjs.map +1 -1
  1019. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +4 -2
  1020. package/.output/server/chunks/routes/api/workshop/index13.get.mjs.map +1 -1
  1021. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +4 -2
  1022. package/.output/server/chunks/routes/api/workshop/index14.get.mjs.map +1 -1
  1023. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +4 -2
  1024. package/.output/server/chunks/routes/api/workshop/index15.get.mjs.map +1 -1
  1025. package/.output/server/chunks/routes/api/workshop/index16.get.mjs +4 -2
  1026. package/.output/server/chunks/routes/api/workshop/index16.get.mjs.map +1 -1
  1027. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +4 -2
  1028. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  1029. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +25 -10
  1030. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  1031. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +4 -2
  1032. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  1033. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +4 -2
  1034. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  1035. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +4 -2
  1036. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  1037. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +232 -6
  1038. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  1039. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +4 -2
  1040. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  1041. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +5 -3
  1042. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  1043. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +5 -3
  1044. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  1045. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +5 -3
  1046. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  1047. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +5 -3
  1048. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  1049. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +7 -3
  1050. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  1051. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +5 -3
  1052. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  1053. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +4 -2
  1054. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  1055. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +4 -2
  1056. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  1057. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +4 -2
  1058. package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
  1059. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +4 -2
  1060. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  1061. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +4 -2
  1062. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  1063. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +4 -2
  1064. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  1065. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +5 -3
  1066. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs.map +1 -1
  1067. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs +4 -2
  1068. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs.map +1 -1
  1069. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs +4 -2
  1070. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs.map +1 -1
  1071. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +4 -2
  1072. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs.map +1 -1
  1073. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +4 -2
  1074. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs.map +1 -1
  1075. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs +4 -2
  1076. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs.map +1 -1
  1077. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +4 -2
  1078. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs.map +1 -1
  1079. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +5 -3
  1080. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs.map +1 -1
  1081. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +5 -3
  1082. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs.map +1 -1
  1083. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +5 -3
  1084. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs.map +1 -1
  1085. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +5 -3
  1086. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs.map +1 -1
  1087. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +5 -3
  1088. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs.map +1 -1
  1089. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +5 -3
  1090. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs.map +1 -1
  1091. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +5 -3
  1092. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs.map +1 -1
  1093. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +5 -3
  1094. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs.map +1 -1
  1095. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +5 -3
  1096. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs.map +1 -1
  1097. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +5 -3
  1098. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs.map +1 -1
  1099. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +5 -3
  1100. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs.map +1 -1
  1101. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +5 -3
  1102. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs.map +1 -1
  1103. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +5 -3
  1104. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs.map +1 -1
  1105. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +5 -3
  1106. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs.map +1 -1
  1107. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +5 -3
  1108. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs.map +1 -1
  1109. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +5 -3
  1110. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs.map +1 -1
  1111. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +4 -2
  1112. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs.map +1 -1
  1113. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +5 -3
  1114. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs.map +1 -1
  1115. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +5 -3
  1116. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs.map +1 -1
  1117. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +5 -3
  1118. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs.map +1 -1
  1119. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +5 -3
  1120. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs.map +1 -1
  1121. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +5 -3
  1122. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs.map +1 -1
  1123. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +5 -3
  1124. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs.map +1 -1
  1125. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +5 -3
  1126. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs.map +1 -1
  1127. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +5 -3
  1128. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs.map +1 -1
  1129. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +5 -3
  1130. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  1131. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +5 -3
  1132. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  1133. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +4 -2
  1134. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  1135. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +5 -3
  1136. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs.map +1 -1
  1137. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +5 -3
  1138. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs.map +1 -1
  1139. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +308 -21
  1140. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs.map +1 -1
  1141. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +5 -3
  1142. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs.map +1 -1
  1143. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +5 -3
  1144. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs.map +1 -1
  1145. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +5 -3
  1146. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs.map +1 -1
  1147. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +4 -2
  1148. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  1149. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +5 -3
  1150. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  1151. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +5 -3
  1152. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  1153. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +4 -2
  1154. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  1155. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +4 -2
  1156. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs.map +1 -1
  1157. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +4 -2
  1158. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs.map +1 -1
  1159. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +4 -2
  1160. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs.map +1 -1
  1161. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +4 -2
  1162. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs.map +1 -1
  1163. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +4 -2
  1164. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs.map +1 -1
  1165. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +4 -2
  1166. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  1167. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +4 -2
  1168. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  1169. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +4 -2
  1170. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  1171. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +4 -2
  1172. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs.map +1 -1
  1173. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +4 -2
  1174. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs.map +1 -1
  1175. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +4 -2
  1176. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  1177. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +4 -2
  1178. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  1179. package/.output/server/chunks/routes/api/workshop/tasks/_id/supersede.post.mjs +43 -0
  1180. package/.output/server/chunks/routes/api/workshop/tasks/_id/supersede.post.mjs.map +1 -0
  1181. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +4 -2
  1182. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs.map +1 -1
  1183. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +4 -2
  1184. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  1185. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +4 -2
  1186. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  1187. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +5 -3
  1188. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  1189. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +4 -2
  1190. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  1191. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +4 -2
  1192. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  1193. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +5 -3
  1194. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs.map +1 -1
  1195. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +5 -3
  1196. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs.map +1 -1
  1197. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +4 -2
  1198. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  1199. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +4 -2
  1200. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  1201. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +4 -2
  1202. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  1203. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +4 -2
  1204. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  1205. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +4 -2
  1206. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs.map +1 -1
  1207. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +5 -3
  1208. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs.map +1 -1
  1209. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +4 -2
  1210. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  1211. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +4 -2
  1212. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  1213. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +6 -4
  1214. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  1215. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +4 -2
  1216. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  1217. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +4 -2
  1218. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  1219. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +4 -2
  1220. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  1221. package/.output/server/chunks/routes/renderer.mjs +2 -2
  1222. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  1223. package/.output/server/chunks/virtual/entry.mjs +381 -377
  1224. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  1225. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  1226. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -1
  1227. package/.output/server/index.mjs +5 -3
  1228. package/.output/server/index.mjs.map +1 -1
  1229. package/.output/server/node_modules/pg/esm/index.mjs +20 -0
  1230. package/.output/server/node_modules/pg/lib/client.js +828 -0
  1231. package/.output/server/node_modules/pg/lib/connection-parameters.js +184 -0
  1232. package/.output/server/node_modules/pg/lib/connection.js +243 -0
  1233. package/.output/server/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
  1234. package/.output/server/node_modules/pg/lib/crypto/sasl.js +262 -0
  1235. package/.output/server/node_modules/pg/lib/crypto/utils.js +89 -0
  1236. package/.output/server/node_modules/pg/lib/defaults.js +94 -0
  1237. package/.output/server/node_modules/pg/lib/index.js +73 -0
  1238. package/.output/server/node_modules/pg/lib/native/client.js +420 -0
  1239. package/.output/server/node_modules/pg/lib/native/index.js +2 -0
  1240. package/.output/server/node_modules/pg/lib/native/query.js +165 -0
  1241. package/.output/server/node_modules/pg/lib/query.js +259 -0
  1242. package/.output/server/node_modules/pg/lib/result.js +109 -0
  1243. package/.output/server/node_modules/pg/lib/stream.js +83 -0
  1244. package/.output/server/node_modules/pg/lib/type-overrides.js +35 -0
  1245. package/.output/server/node_modules/pg/lib/utils.js +207 -0
  1246. package/.output/server/node_modules/pg/package.json +76 -0
  1247. package/.output/server/node_modules/pg-cloudflare/dist/empty.js +6 -0
  1248. package/.output/server/node_modules/pg-cloudflare/package.json +39 -0
  1249. package/.output/server/node_modules/pg-connection-string/index.js +237 -0
  1250. package/.output/server/node_modules/pg-connection-string/package.json +52 -0
  1251. package/.output/server/node_modules/pg-int8/index.js +100 -0
  1252. package/.output/server/node_modules/pg-int8/package.json +24 -0
  1253. package/.output/server/node_modules/pg-pool/index.js +517 -0
  1254. package/.output/server/node_modules/pg-pool/package.json +51 -0
  1255. package/.output/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
  1256. package/.output/server/node_modules/pg-protocol/dist/buffer-writer.js +104 -0
  1257. package/.output/server/node_modules/pg-protocol/dist/index.js +15 -0
  1258. package/.output/server/node_modules/pg-protocol/dist/messages.js +160 -0
  1259. package/.output/server/node_modules/pg-protocol/dist/parser.js +325 -0
  1260. package/.output/server/node_modules/pg-protocol/dist/serializer.js +196 -0
  1261. package/.output/server/node_modules/pg-protocol/package.json +44 -0
  1262. package/.output/server/node_modules/pg-types/index.js +47 -0
  1263. package/.output/server/node_modules/pg-types/lib/arrayParser.js +11 -0
  1264. package/.output/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
  1265. package/.output/server/node_modules/pg-types/lib/builtins.js +73 -0
  1266. package/.output/server/node_modules/pg-types/lib/textParsers.js +215 -0
  1267. package/.output/server/node_modules/pg-types/package.json +42 -0
  1268. package/.output/server/node_modules/pgpass/lib/helper.js +233 -0
  1269. package/.output/server/node_modules/pgpass/lib/index.js +23 -0
  1270. package/.output/server/node_modules/pgpass/package.json +41 -0
  1271. package/.output/server/node_modules/postgres-array/index.js +97 -0
  1272. package/.output/server/node_modules/postgres-array/package.json +35 -0
  1273. package/.output/server/node_modules/postgres-bytea/index.js +33 -0
  1274. package/.output/server/node_modules/postgres-bytea/package.json +34 -0
  1275. package/.output/server/node_modules/postgres-date/index.js +116 -0
  1276. package/.output/server/node_modules/postgres-date/package.json +33 -0
  1277. package/.output/server/node_modules/postgres-interval/index.js +126 -0
  1278. package/.output/server/node_modules/postgres-interval/package.json +35 -0
  1279. package/.output/server/node_modules/split2/index.js +141 -0
  1280. package/.output/server/node_modules/split2/package.json +39 -0
  1281. package/.output/server/node_modules/xtend/mutable.js +17 -0
  1282. package/.output/server/node_modules/xtend/package.json +55 -0
  1283. package/.output/server/package.json +15 -1
  1284. package/README-zh.md +255 -993
  1285. package/README.md +254 -1028
  1286. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.json +1 -0
  1287. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/1459e6269990a5d229b9228c8b2f62ffaa7d350068380ae8b875fee0db45cca6.source +180 -0
  1288. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/c2991e909c70c5c12b90a407c7adcf63384c51668a2b334e6e047fa675c268fe.source +305 -0
  1289. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/e09129039d1e27e3fac24becc9bdafd2d1a7c8049bff24173df007be865f0165.source +264 -0
  1290. package/app/.mimosa/hook-status/sess_05189059-e42d-4188-8911-4f7baabe009b-28ef7c75ea.json +14 -0
  1291. package/app/components/AwLogo.vue +75 -75
  1292. package/app/components/aml/AmlDatasetFormModal.vue +279 -279
  1293. package/app/components/aml/AmlDatasetTable.vue +319 -319
  1294. package/app/components/aml/AmlExperimentsTable.vue +142 -142
  1295. package/app/components/aml/AmlInfraBanner.vue +23 -23
  1296. package/app/components/aml/AmlJobsTable.vue +248 -248
  1297. package/app/components/aml/AmlOverviewBar.vue +62 -62
  1298. package/app/components/aml/AmlPageHeader.vue +47 -47
  1299. package/app/components/aml/AmlPredictConsole.vue +201 -201
  1300. package/app/components/app-header/HitlBell.vue +423 -423
  1301. package/app/components/daq/DaqAddNodeModal.vue +209 -209
  1302. package/app/components/daq/DaqAlarmBar.vue +46 -46
  1303. package/app/components/daq/DaqControlCard.vue +159 -159
  1304. package/app/components/daq/DaqInfraBanner.vue +31 -31
  1305. package/app/components/daq/DaqLineBanner.vue +47 -47
  1306. package/app/components/daq/DaqNodePanel.vue +396 -396
  1307. package/app/components/daq/DaqOptPanel.vue +197 -197
  1308. package/app/components/daq/DaqTemplateModal.vue +246 -246
  1309. package/app/components/dashboard/DashboardGaugeBand.vue +78 -78
  1310. package/app/components/dashboard/DashboardHero.vue +209 -209
  1311. package/app/components/dashboard/DashboardLineStatePanel.vue +78 -78
  1312. package/app/components/dashboard/DashboardNodeStatePanel.vue +46 -46
  1313. package/app/components/dashboard/DashboardPipelinePanel.vue +46 -46
  1314. package/app/components/dashboard/DashboardTrendPanel.vue +83 -83
  1315. package/app/components/dashboard/DashboardWritePanel.vue +52 -52
  1316. package/app/components/dcw/DcwCreateLineModal.vue +105 -105
  1317. package/app/components/dcw/DcwDeleteLineModal.vue +73 -73
  1318. package/app/components/dcw/DcwDetailTemplateModal.vue +238 -238
  1319. package/app/components/dcw/DcwLedgerCard.vue +160 -160
  1320. package/app/components/dcw/DcwMesArtifacts.vue +140 -140
  1321. package/app/components/dcw/DcwProductCreateModal.vue +113 -113
  1322. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -244
  1323. package/app/components/dcw/DcwRecipeEditModal.vue +399 -399
  1324. package/app/components/dcw/DcwRecipeHistoryModal.vue +165 -165
  1325. package/app/components/dcw/DcwRunDataModal.vue +191 -191
  1326. package/app/components/dcw/DcwTemplateModal.vue +227 -227
  1327. package/app/components/dcw/DcwWriteHistoryCard.vue +96 -96
  1328. package/app/components/dcw/ExpConfirmCard.vue +103 -103
  1329. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -330
  1330. package/app/components/logs/LogsPageHead.vue +122 -122
  1331. package/app/components/monitor/MonitorAgentTable.vue +143 -143
  1332. package/app/components/monitor/MonitorChannelTable.vue +80 -80
  1333. package/app/components/monitor/MonitorLoginGate.vue +24 -24
  1334. package/app/components/monitor/MonitorPageHead.vue +92 -92
  1335. package/app/components/monitor/MonitorProcessTable.vue +159 -159
  1336. package/app/components/ontology/OntologyGraph.vue +356 -356
  1337. package/app/components/operations/OperationsFilterCard.vue +164 -164
  1338. package/app/components/operations/OperationsPageHead.vue +47 -47
  1339. package/app/components/tokens/TokenCreateModal.vue +42 -42
  1340. package/app/components/tokens/TokenOnceModal.vue +164 -164
  1341. package/app/components/tokens/TokenRenameModal.vue +40 -40
  1342. package/app/components/tokens/TokensPageHead.vue +76 -76
  1343. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  1344. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  1345. package/app/components/workshop/AgentLanesView.vue +278 -278
  1346. package/app/components/workshop/ArtifactCard.vue +120 -120
  1347. package/app/components/workshop/AssetLibrary.vue +452 -452
  1348. package/app/components/workshop/ChatMemberPanel.vue +556 -556
  1349. package/app/components/workshop/CommandPalette.vue +270 -270
  1350. package/app/components/workshop/Composer.vue +540 -540
  1351. package/app/components/workshop/DaqTemplateIcon.vue +33 -33
  1352. package/app/components/workshop/DeviceTwinPanel.vue +167 -167
  1353. package/app/components/workshop/FileSelectorModal.vue +188 -188
  1354. package/app/components/workshop/InspectorPanel.vue +301 -301
  1355. package/app/components/workshop/PluginSlot.vue +120 -120
  1356. package/app/components/workshop/TranscriptTimeline.vue +223 -223
  1357. package/app/components/workshop/agents/AgentTemplateEditModal.vue +139 -139
  1358. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  1359. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  1360. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  1361. package/app/components/workshop/blocks/ClusterMember.vue +95 -95
  1362. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  1363. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  1364. package/app/components/workshop/blocks/ClusterStatus.vue +149 -149
  1365. package/app/components/workshop/blocks/ClusterTool.vue +176 -176
  1366. package/app/components/workshop/blocks/EventBlockAvatar.vue +114 -114
  1367. package/app/components/workshop/blocks/EventBlockHead.vue +232 -232
  1368. package/app/components/workshop/composer/ComposerToolbar.vue +278 -278
  1369. package/app/components/workshop/composer/MentionMenu.vue +135 -135
  1370. package/app/components/workshop/composer/ReplyChip.vue +65 -65
  1371. package/app/components/workshop/composer/StatusChip.vue +171 -171
  1372. package/app/components/workshop/console/Dock.vue +71 -71
  1373. package/app/components/workshop/console/LeftPane.vue +84 -84
  1374. package/app/components/workshop/device-twin/DeviceTwinCard.vue +265 -265
  1375. package/app/components/workshop/device-twin/DeviceTwinDcwSection.vue +203 -203
  1376. package/app/components/workshop/lanes/AddMemberModal.vue +270 -270
  1377. package/app/components/workshop/lanes/EditMemberModal.vue +106 -106
  1378. package/app/components/workshop/lanes/LanesToolbar.vue +97 -97
  1379. package/app/components/workshop/session-list/MountChannelModal.vue +124 -124
  1380. package/app/components/workshop/session-list/SaveTemplateModal.vue +93 -93
  1381. package/app/components/workshop/task-board/Card.vue +172 -172
  1382. package/app/components/workshop/task-board/Column.vue +151 -151
  1383. package/app/components/workshop/task-board/List.vue +157 -157
  1384. package/app/components/workshop/task-board/StatusMenu.vue +88 -88
  1385. package/app/components/workshop/teams/TeamAddMemberModal.vue +53 -53
  1386. package/app/components/workshop/teams/TeamCreateModal.vue +94 -94
  1387. package/app/components/workshop/teams/TeamDeployModal.vue +40 -40
  1388. package/app/components/workshop/teams/TeamPluginModal.vue +119 -119
  1389. package/app/components/workshop/terminal/OmpTerminalPanel.vue +270 -270
  1390. package/app/components/workshop/terminal/TerminalHitlCard.vue +170 -170
  1391. package/app/components/workshop/town/TownScene.ts +466 -466
  1392. package/app/components/workshop/town/TownView.vue +561 -561
  1393. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -94
  1394. package/app/components/workshop/town/components/TownAgentBindings.vue +417 -417
  1395. package/app/components/workshop/town/components/TownAgentInspector.vue +554 -554
  1396. package/app/components/workshop/town/components/TownAlarmList.vue +147 -147
  1397. package/app/components/workshop/town/components/TownBoundaryPanel.vue +350 -350
  1398. package/app/components/workshop/town/components/TownCalloutLayer.vue +147 -147
  1399. package/app/components/workshop/town/components/TownChannelDock.vue +116 -116
  1400. package/app/components/workshop/town/components/TownControlDock.vue +405 -405
  1401. package/app/components/workshop/town/components/TownDaqNodeInspector.vue +345 -345
  1402. package/app/components/workshop/town/components/TownDaqTree.vue +366 -366
  1403. package/app/components/workshop/town/components/TownDcwBindSection.vue +473 -473
  1404. package/app/components/workshop/town/components/TownDcwNodeInspector.vue +185 -185
  1405. package/app/components/workshop/town/components/TownDcwTree.vue +280 -280
  1406. package/app/components/workshop/town/components/TownDeviceBindings.vue +394 -394
  1407. package/app/components/workshop/town/components/TownDeviceTransform.vue +248 -248
  1408. package/app/components/workshop/town/components/TownEventList.vue +120 -120
  1409. package/app/components/workshop/town/components/TownHealthBody.vue +100 -100
  1410. package/app/components/workshop/town/components/TownKpiStrip.vue +207 -207
  1411. package/app/components/workshop/town/components/TownLeftRail.vue +308 -308
  1412. package/app/components/workshop/town/components/TownLoadingMask.vue +61 -61
  1413. package/app/components/workshop/town/components/TownNavMap.vue +154 -154
  1414. package/app/components/workshop/town/components/TownRightRail.vue +543 -543
  1415. package/app/components/workshop/town/components/TownStage.vue +281 -281
  1416. package/app/components/workshop/town/components/TownStageTop.vue +238 -238
  1417. package/app/components/workshop/town/components/TownStatusBar.vue +108 -108
  1418. package/app/components/workshop/town/components/TownTopNav.vue +367 -367
  1419. package/app/components/workshop/town/components/TownTrendDock.vue +178 -178
  1420. package/app/components/workshop/town/scene/town-scene-agents.ts +254 -254
  1421. package/app/components/workshop/town/scene/town-scene-behavior.ts +194 -194
  1422. package/app/components/workshop/town/scene/town-scene-bubbles.ts +96 -96
  1423. package/app/components/workshop/town/scene/town-scene-core.ts +158 -158
  1424. package/app/components/workshop/town/scene/town-scene-models.ts +109 -109
  1425. package/app/components/workshop/town/scene/town-scene-visuals.ts +279 -279
  1426. package/app/components/workshop/town/scene/town-scene3d-agents.ts +308 -308
  1427. package/app/components/workshop/town/scene/town-scene3d-blocks.ts +297 -297
  1428. package/app/components/workshop/town/scene/town-scene3d-bubbles.ts +281 -281
  1429. package/app/components/workshop/town/scene/town-scene3d-camera.ts +282 -282
  1430. package/app/components/workshop/town/scene/town-scene3d-devices.ts +433 -433
  1431. package/app/components/workshop/town/scene/town-scene3d-editing.ts +490 -490
  1432. package/app/components/workshop/town/scene/town-scene3d-events.ts +173 -173
  1433. package/app/components/workshop/town/scene/town-scene3d-factory.ts +412 -412
  1434. package/app/components/workshop/town/scene/town-scene3d-hud.ts +110 -110
  1435. package/app/components/workshop/town/scene/town-scene3d-lifecycle.ts +144 -144
  1436. package/app/components/workshop/town/scene/town-scene3d-links.ts +141 -141
  1437. package/app/components/workshop/town/scene/town-scene3d-loop.ts +286 -286
  1438. package/app/components/workshop/town/scene/town-scene3d-models.ts +154 -154
  1439. package/app/components/workshop/town/scene/town-scene3d-nodes.ts +562 -562
  1440. package/app/components/workshop/town/scene/town-scene3d-ranges.ts +273 -273
  1441. package/app/components/workshop/town/scene/town-scene3d-renderer.ts +320 -320
  1442. package/app/components/workshop/town/scene/town-scene3d-selection.ts +257 -257
  1443. package/app/components/workshop/town/scene/town-scene3d-types.ts +264 -264
  1444. package/app/components/workshop/transcript/TranscriptBlockList.vue +68 -68
  1445. package/app/components/workshop/transcript/TranscriptEarlierPager.vue +81 -81
  1446. package/app/components/workshop/transcript/TranscriptFilterBar.vue +126 -126
  1447. package/app/components/workshop/workbench/CreateWorkspaceModal.vue +36 -36
  1448. package/app/components/workshop/workbench/WorkspaceEmpty.vue +56 -56
  1449. package/app/composables/useResponsive.ts +88 -88
  1450. package/app/composables/workshop/device-twin-types.ts +29 -29
  1451. package/app/composables/workshop/event-blocks/attention.ts +58 -58
  1452. package/app/composables/workshop/event-blocks/classify.ts +44 -44
  1453. package/app/composables/workshop/event-blocks/clusterer.ts +231 -231
  1454. package/app/composables/workshop/event-blocks/fold-stream.ts +45 -45
  1455. package/app/composables/workshop/event-blocks/markdown.ts +81 -81
  1456. package/app/composables/workshop/event-blocks/mentions.ts +49 -49
  1457. package/app/composables/workshop/event-blocks/text-utils.ts +100 -100
  1458. package/app/composables/workshop/event-blocks/types.ts +40 -40
  1459. package/app/composables/workshop/town/town-relay-props.ts +231 -231
  1460. package/app/composables/workshop/town/town-view-types.ts +145 -145
  1461. package/app/composables/workshop/town/useTownAgentBindings.ts +183 -183
  1462. package/app/composables/workshop/town/useTownAgentChat.ts +203 -203
  1463. package/app/composables/workshop/town/useTownAlarms.ts +36 -36
  1464. package/app/composables/workshop/town/useTownCallouts.ts +174 -174
  1465. package/app/composables/workshop/town/useTownChannels.ts +220 -220
  1466. package/app/composables/workshop/town/useTownHealth.ts +66 -66
  1467. package/app/composables/workshop/town/useTownHudTickers.ts +77 -77
  1468. package/app/composables/workshop/town/useTownLayout.ts +277 -277
  1469. package/app/composables/workshop/town/useTownNavMap.ts +301 -301
  1470. package/app/composables/workshop/town/useTownNodeBindings.ts +345 -345
  1471. package/app/composables/workshop/town/useTownPanelDrag.ts +91 -91
  1472. package/app/composables/workshop/town/useTownRailData.ts +421 -421
  1473. package/app/composables/workshop/town/useTownSceneControl.ts +92 -92
  1474. package/app/composables/workshop/town/useTownSceneInput.ts +275 -275
  1475. package/app/composables/workshop/town/useTownSceneRuntime.ts +390 -390
  1476. package/app/composables/workshop/town/useTownSheets.ts +41 -41
  1477. package/app/composables/workshop/town/useTownTrends.ts +93 -93
  1478. package/app/composables/workshop/useChannelList.ts +88 -88
  1479. package/app/composables/workshop/useChannelTerminals.ts +65 -65
  1480. package/app/composables/workshop/useComposerMentions.ts +130 -130
  1481. package/app/composables/workshop/useDcwStream.ts +377 -377
  1482. package/app/composables/workshop/useDeviceTwinDcwWrite.ts +77 -77
  1483. package/app/composables/workshop/useDeviceTwinPanel.ts +56 -56
  1484. package/app/composables/workshop/useEscClose.ts +44 -44
  1485. package/app/composables/workshop/useEventBlockView.ts +159 -159
  1486. package/app/composables/workshop/useEventBlocks.ts +33 -33
  1487. package/app/composables/workshop/useHitlAnswer.ts +184 -184
  1488. package/app/composables/workshop/useLaneWidths.ts +27 -27
  1489. package/app/composables/workshop/useOmpTerminalSession.ts +424 -424
  1490. package/app/composables/workshop/useOpsLog.ts +191 -191
  1491. package/app/composables/workshop/usePluginAdmin.ts +152 -152
  1492. package/app/composables/workshop/usePluginPanels.ts +72 -72
  1493. package/app/composables/workshop/useRuntimeConfigDraft.ts +118 -118
  1494. package/app/composables/workshop/useSettingsGroups.ts +243 -243
  1495. package/app/composables/workshop/useTaskBoardColumns.ts +47 -47
  1496. package/app/composables/workshop/useTerminalRenderer.ts +308 -308
  1497. package/app/composables/workshop/useTranscriptEnterStage.ts +48 -48
  1498. package/app/composables/workshop/useTranscriptHistory.ts +52 -52
  1499. package/app/composables/workshop/useTranscriptScroll.ts +113 -113
  1500. package/app/composables/workshop/useVisibleInterval.ts +42 -42
  1501. package/app/composables/workshop/useWorkshopWs.ts +265 -265
  1502. package/app/config/index.ts +1 -1
  1503. package/app/config/schema.ts +15 -1
  1504. package/app/middleware/locale-cookie.global.ts +22 -22
  1505. package/app/pages/aml/api.ts +6 -6
  1506. package/app/pages/aml/composables/useAmlDatasets.ts +38 -38
  1507. package/app/pages/aml/composables/useAmlEntities.ts +57 -57
  1508. package/app/pages/aml/composables/useAmlEnv.ts +191 -191
  1509. package/app/pages/aml/composables/useAmlExperiments.ts +45 -45
  1510. package/app/pages/aml/composables/useAmlFormat.ts +44 -44
  1511. package/app/pages/aml/composables/useAmlJobs.ts +131 -131
  1512. package/app/pages/aml/composables/useAmlModels.ts +56 -56
  1513. package/app/pages/aml/composables/useAmlNotes.ts +47 -47
  1514. package/app/pages/aml/composables/useAmlPredict.ts +93 -93
  1515. package/app/pages/aml/constants.ts +63 -63
  1516. package/app/pages/aml/index.vue +236 -236
  1517. package/app/pages/composables/useDashboardCharts.ts +192 -192
  1518. package/app/pages/composables/useDashboardData.ts +144 -144
  1519. package/app/pages/daq/composables/useDaqAddNode.ts +126 -126
  1520. package/app/pages/daq/composables/useDaqDetailBinding.ts +29 -29
  1521. package/app/pages/daq/composables/useDaqDetailFrames.ts +42 -42
  1522. package/app/pages/daq/composables/useDaqDetailNode.ts +53 -53
  1523. package/app/pages/daq/composables/useDaqDetailParams.ts +138 -138
  1524. package/app/pages/daq/composables/useDaqFilters.ts +187 -187
  1525. package/app/pages/daq/composables/useDaqNodeWindow.ts +86 -86
  1526. package/app/pages/daq/composables/useDaqOptimizations.ts +99 -99
  1527. package/app/pages/daq/composables/useDaqTemplates.ts +152 -152
  1528. package/app/pages/daq/index.vue +260 -260
  1529. package/app/pages/dcw/composables/useDcwCards.ts +27 -27
  1530. package/app/pages/dcw/composables/useDcwDetailScope.ts +145 -145
  1531. package/app/pages/dcw/composables/useDcwDetailTemplates.ts +94 -94
  1532. package/app/pages/dcw/composables/useDcwFilter.ts +29 -29
  1533. package/app/pages/dcw/composables/useDcwLedger.ts +34 -34
  1534. package/app/pages/dcw/composables/useDcwLineMutations.ts +115 -115
  1535. package/app/pages/dcw/composables/useDcwLineRun.ts +60 -60
  1536. package/app/pages/dcw/composables/useDcwProducts.ts +54 -54
  1537. package/app/pages/dcw/composables/useDcwQuery.ts +68 -68
  1538. package/app/pages/dcw/composables/useDcwQuickActions.ts +47 -47
  1539. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -256
  1540. package/app/pages/dcw/composables/useDcwTemplates.ts +50 -50
  1541. package/app/pages/dcw/index.vue +195 -195
  1542. package/app/pages/dcw/types.ts +9 -9
  1543. package/app/pages/index.vue +126 -126
  1544. package/app/pages/logs/composables/useLogsFormat.ts +43 -43
  1545. package/app/pages/logs/composables/useLogsManual.ts +71 -71
  1546. package/app/pages/logs/composables/useLogsScope.ts +39 -39
  1547. package/app/pages/monitor/types.ts +61 -61
  1548. package/app/pages/operations.vue +61 -61
  1549. package/app/pages/permissions/index.vue +369 -369
  1550. package/app/pages/tokens/composables/useTokenClipboard.ts +33 -33
  1551. package/app/pages/tokens/composables/useTokenCreate.ts +93 -93
  1552. package/app/pages/tokens/composables/useTokenRename.ts +54 -54
  1553. package/app/pages/tokens/composables/useTokenReveal.ts +84 -84
  1554. package/app/pages/tokens/composables/useTokensList.ts +60 -60
  1555. package/app/pages/tokens.vue +111 -111
  1556. package/app/pages/tools/index.vue +98 -98
  1557. package/app/pages/workshop/agents.vue +130 -130
  1558. package/app/pages/workshop/composables/useAgentHarnessOptions.ts +59 -59
  1559. package/app/pages/workshop/composables/useAgentTemplateActions.ts +42 -42
  1560. package/app/pages/workshop/composables/useAgentTemplateDialogState.ts +24 -24
  1561. package/app/pages/workshop/composables/useAgentTemplateForm.ts +88 -88
  1562. package/app/pages/workshop/composables/useAgentTemplatesCatalog.ts +92 -92
  1563. package/app/pages/workshop/composables/useTeamActions.ts +44 -44
  1564. package/app/pages/workshop/composables/useTeamAddMemberDialog.ts +49 -49
  1565. package/app/pages/workshop/composables/useTeamCreateDialog.ts +67 -67
  1566. package/app/pages/workshop/composables/useTeamDeployDialog.ts +49 -49
  1567. package/app/pages/workshop/composables/useTeamDialogState.ts +46 -46
  1568. package/app/pages/workshop/composables/useTeamPluginDialog.ts +72 -72
  1569. package/app/pages/workshop/composables/useTeamsCatalog.ts +100 -100
  1570. package/app/pages/workshop/composables/useWorkbenchWorkspaces.ts +123 -123
  1571. package/app/pages/workshop/composables/useWorkspaceAuth.ts +31 -31
  1572. package/app/pages/workshop/composables/useWorkspaceChannels.ts +62 -62
  1573. package/app/pages/workshop/composables/useWorkspaceShell.ts +136 -136
  1574. package/app/pages/workshop/schedules.vue +553 -553
  1575. package/app/pages/workshop/w/[wsId].vue +221 -221
  1576. package/app/plugins/aw-plugins.client.ts +213 -213
  1577. package/app/plugins/esc-close.client.ts +31 -31
  1578. package/app/stores/workshop/hitl.ts +183 -183
  1579. package/app/stores/workshop/narrow-fetch.ts +23 -23
  1580. package/app/utils/api-error.ts +75 -75
  1581. package/app/utils/builtin-catalog.ts +104 -104
  1582. package/app/utils/chart-trend.ts +97 -97
  1583. package/app/utils/dcw-driver-badge.ts +16 -16
  1584. package/app/utils/dcw-recipe-form.ts +26 -26
  1585. package/cli/commands/tui.mjs +28 -28
  1586. package/cli/commands/update.mjs +124 -124
  1587. package/cli/core/child-lifecycle.mjs +136 -136
  1588. package/cli/core/meta.mjs +38 -38
  1589. package/cli/core/post-build.mjs +96 -96
  1590. package/config.yml +212 -193
  1591. package/docker-compose.yml +69 -63
  1592. package/docs/aml.md +112 -112
  1593. package/docs/cli.en.md +447 -447
  1594. package/docs/cli.md +412 -412
  1595. package/docs/mcp.en.md +27 -27
  1596. package/docs/multi-harness-architecture.md +248 -248
  1597. package/docs/plugins.en.md +641 -641
  1598. package/docs/plugins.md +630 -630
  1599. package/docs/sdk.en.md +964 -964
  1600. package/docs/sdk.md +900 -900
  1601. package/docs/tui.md +43 -43
  1602. package/i18n/dicts/_en.json +1551 -1551
  1603. package/i18n/dicts/_en2.json +300 -300
  1604. package/i18n/dicts/_en4.json +114 -114
  1605. package/i18n/dicts/agentLanesView.json +61 -61
  1606. package/i18n/dicts/appHeader.json +17 -17
  1607. package/i18n/dicts/channelSessionList.json +51 -51
  1608. package/i18n/dicts/chat.json +79 -79
  1609. package/i18n/dicts/clusterTool.json +4 -4
  1610. package/i18n/dicts/composer.json +38 -38
  1611. package/i18n/dicts/ctpl.json +37 -37
  1612. package/i18n/dicts/dcwDetail.json +219 -219
  1613. package/i18n/dicts/lineOps.json +14 -14
  1614. package/i18n/dicts/multiChannelView.json +13 -13
  1615. package/i18n/dicts/notifications.json +13 -13
  1616. package/i18n/dicts/taskInspectorDrawer.json +25 -25
  1617. package/i18n/dicts/teamPlugins.json +10 -10
  1618. package/i18n/dicts/townView.json +211 -211
  1619. package/i18n/locales/en.ts +3373 -3371
  1620. package/i18n/locales/zh-CN.ts +3372 -3370
  1621. package/mcp/aw-mcp-server.mjs +1 -1
  1622. package/mcp/discovery.mjs +227 -227
  1623. package/package.json +189 -189
  1624. package/public/favicon.svg +14 -14
  1625. package/public/robots.txt +3 -3
  1626. package/scripts/_audit/_live-mqtt-e2e-20261028.mjs +219 -219
  1627. package/scripts/_audit/audit-harness-adapters.md +664 -664
  1628. package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -293
  1629. package/scripts/_audit/bump-version.mjs +51 -51
  1630. package/scripts/_audit/demo-shot-studio.mjs +37 -0
  1631. package/scripts/_audit/demo-shots.mjs +38 -0
  1632. package/scripts/_audit/detached-instance.mjs +112 -112
  1633. package/scripts/_audit/detached-start.mjs +103 -103
  1634. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -212
  1635. package/scripts/_audit/gen-demo-report.py +69 -0
  1636. package/scripts/_audit/guard-upstream-liveness.mjs +104 -104
  1637. package/scripts/_audit/http-api-authz-audit.md +657 -657
  1638. package/scripts/_audit/kb-team-mock-e2e.mjs +146 -146
  1639. package/scripts/_audit/kb-team-omp-e2e.mjs +229 -229
  1640. package/scripts/_audit/kill-acceptance-strays.mjs +47 -0
  1641. package/scripts/_audit/mqtt-pub.mjs +13 -0
  1642. package/scripts/_audit/mqtt-topic-probe.mjs +15 -0
  1643. package/scripts/_audit/prompt-injection-probe.mts +76 -76
  1644. package/scripts/_audit/proto-b3-device-4021.mjs +90 -0
  1645. package/scripts/_audit/proto-doc-broker-20261031.mjs +11 -0
  1646. package/scripts/_audit/proto-doc-device-20261031.mjs +53 -0
  1647. package/scripts/_audit/proto-doc-device-4120.mjs +53 -0
  1648. package/scripts/_audit/proto-doc-mqtt-20261031.mjs +32 -0
  1649. package/scripts/_audit/run-full-acceptance-20261030.sh +82 -0
  1650. package/scripts/_audit/run.mjs +21 -21
  1651. package/scripts/_audit/runtime-audit.md +716 -716
  1652. package/scripts/_audit/skills-guided-e2e.mjs +316 -316
  1653. package/scripts/_audit/stability-soak.mjs +252 -252
  1654. package/scripts/_audit/stubs/nuxt-imports.mjs +67 -67
  1655. package/scripts/_audit/ts-register-hook.mjs +12 -12
  1656. package/scripts/_audit/ts-resolve-hook.mjs +96 -96
  1657. package/scripts/_aw0746-stage12.mjs +94 -94
  1658. package/scripts/_aw0746-stage34.mjs +136 -136
  1659. package/scripts/_aw0746-stage6b-train-sweep.mjs +145 -145
  1660. package/scripts/_aw0746-stage6c-jobsmoke.mjs +69 -69
  1661. package/scripts/_dbg-configroot-audit.mjs +86 -86
  1662. package/scripts/_dbg-daq-intervals-func.mjs +115 -115
  1663. package/scripts/_dbg-perms-e2e.mjs +142 -142
  1664. package/scripts/_dbg-protocol-matrix.mjs +462 -462
  1665. package/scripts/_dbg-render-regression.mjs +193 -193
  1666. package/scripts/_dbg-schedule-e2e.mjs +262 -262
  1667. package/scripts/_e2e-ui-functional.mjs +371 -371
  1668. package/scripts/_lib-aml-python-run.mjs +17 -17
  1669. package/scripts/_plc-sim-detached.cjs +22 -22
  1670. package/scripts/_provision-injection-line.mjs +39 -39
  1671. package/scripts/_run-matrix.ps1 +53 -53
  1672. package/scripts/_sweep-button-contrast.mjs +87 -87
  1673. package/scripts/acceptance-aml-hybrid-e2e.ts +396 -396
  1674. package/scripts/acceptance-aml-hybrid-live.mjs +93 -93
  1675. package/scripts/acceptance-aml-model-identity.ts +137 -137
  1676. package/scripts/acceptance-scientific-loop.ts +224 -0
  1677. package/scripts/agent-daq-isolation-e2e.mjs +91 -91
  1678. package/scripts/api-contract-smoke.mjs +126 -126
  1679. package/scripts/api-live-e2e.mjs +91 -32
  1680. package/scripts/ask-hitl-e2e.mjs +96 -96
  1681. package/scripts/aw-expose.mjs +159 -159
  1682. package/scripts/channel-interaction-smoke.mjs +80 -80
  1683. package/scripts/data-studio-ui-e2e.mjs +163 -163
  1684. package/scripts/demo-group-chat-all-real.ts +279 -279
  1685. package/scripts/dev-modbus-simulator.mjs +55 -55
  1686. package/scripts/docs-shots.mjs +36 -36
  1687. package/scripts/e2e-agentteam-chat.mjs +473 -473
  1688. package/scripts/e2e-agentteam-goal-closure.mjs +496 -0
  1689. package/scripts/e2e-agentteam-real-triage.mjs +421 -421
  1690. package/scripts/e2e-aml-decoupled.mjs +162 -162
  1691. package/scripts/e2e-analysis-ledger.mjs +202 -202
  1692. package/scripts/e2e-aw-tui-global.mjs +277 -277
  1693. package/scripts/e2e-binding-modes-real.mjs +442 -442
  1694. package/scripts/e2e-business-loop-real.mjs +391 -391
  1695. package/scripts/e2e-closedloop/cleanup.mjs +27 -27
  1696. package/scripts/e2e-closedloop/lib.mjs +109 -109
  1697. package/scripts/e2e-closedloop/main.mjs +59 -59
  1698. package/scripts/e2e-closedloop/scenarios-accounts.mjs +210 -210
  1699. package/scripts/e2e-closedloop/scenarios-authz.mjs +196 -196
  1700. package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +222 -222
  1701. package/scripts/e2e-closedloop/scenarios-plugins.mjs +169 -169
  1702. package/scripts/e2e-closedloop/state.mjs +10 -10
  1703. package/scripts/e2e-config-groups.mjs +238 -238
  1704. package/scripts/e2e-core-bridges-matrix.mjs +303 -303
  1705. package/scripts/e2e-crash-cycle.mjs +108 -108
  1706. package/scripts/e2e-dcw-halfopen-resilience.mjs +140 -0
  1707. package/scripts/e2e-error-handling.mjs +190 -190
  1708. package/scripts/e2e-full-closedloop.mjs +16 -16
  1709. package/scripts/e2e-golive-matrix.mjs +515 -515
  1710. package/scripts/e2e-hil-multi-user.mjs +307 -307
  1711. package/scripts/e2e-hil-restart.mjs +339 -339
  1712. package/scripts/e2e-idd-results-ui.mjs +182 -175
  1713. package/scripts/e2e-line-governance.mjs +352 -352
  1714. package/scripts/e2e-mes-mirror-real.mjs +427 -418
  1715. package/scripts/e2e-model-loop-live.mjs +90 -54
  1716. package/scripts/e2e-multiexpert-remediation-real.mjs +453 -453
  1717. package/scripts/e2e-node-binding-3mode-real.mjs +792 -792
  1718. package/scripts/e2e-node-binding-authz.mjs +372 -372
  1719. package/scripts/e2e-ontology.mjs +393 -393
  1720. package/scripts/e2e-paper-paired-route.mjs +791 -0
  1721. package/scripts/e2e-physical-effect-real.mjs +572 -570
  1722. package/scripts/e2e-plc-plugin-closedloop.mjs +549 -549
  1723. package/scripts/e2e-real-channel-mission.mjs +543 -0
  1724. package/scripts/e2e-security-b0.mjs +280 -0
  1725. package/scripts/e2e-security-b1.mjs +165 -0
  1726. package/scripts/e2e-security-b2b5.mjs +280 -0
  1727. package/scripts/full-stack-shots.mjs +145 -145
  1728. package/scripts/full-tool-injection-harness-e2e.mjs +214 -214
  1729. package/scripts/generate-identifiability-fixtures.ts +98 -0
  1730. package/scripts/hitl-reject-e2e.mjs +131 -131
  1731. package/scripts/line-log-smoke.mjs +260 -260
  1732. package/scripts/live-aml-mockomp.mjs +304 -304
  1733. package/scripts/live-aml-optloop-resume.mjs +322 -322
  1734. package/scripts/live-aml-optloop.mjs +588 -588
  1735. package/scripts/live-aml-stage9.mjs +169 -169
  1736. package/scripts/live-aml-two-goals.mjs +315 -315
  1737. package/scripts/live-demo-seed.mjs +157 -157
  1738. package/scripts/live-optloop-two-modes.mjs +857 -857
  1739. package/scripts/mes-agent-integration-e2e.mjs +361 -361
  1740. package/scripts/onboarding/preflight.mjs +231 -0
  1741. package/scripts/onboarding/provision-line.mjs +11 -1
  1742. package/scripts/onboarding/verify-mirror.mjs +145 -0
  1743. package/scripts/ops-plugins-e2e.mjs +85 -85
  1744. package/scripts/scenario-suite-setup.mjs +337 -337
  1745. package/scripts/scenario-suite-stability.mjs +144 -144
  1746. package/scripts/security-acceptance.mjs +218 -218
  1747. package/scripts/start.mjs +279 -250
  1748. package/scripts/team-coordination-e2e.mjs +96 -96
  1749. package/scripts/test-agentteam-workflow.ts +472 -472
  1750. package/scripts/test-aw-skills.mjs +102 -102
  1751. package/scripts/test-daq-frame-race.mjs +358 -358
  1752. package/scripts/test-data-root.mjs +208 -208
  1753. package/scripts/test-events-index.mjs +176 -176
  1754. package/scripts/test-group-chat-unit/lib.ts +186 -186
  1755. package/scripts/test-group-chat-unit/main.ts +45 -45
  1756. package/scripts/test-group-chat-unit.ts +35 -35
  1757. package/scripts/test-hitl-decision.ts +526 -526
  1758. package/scripts/test-hitl-registry.ts +112 -112
  1759. package/scripts/test-log-flooding.mjs +160 -160
  1760. package/scripts/test-lru.mjs +101 -101
  1761. package/scripts/test-plugin-hardening.mjs +90 -90
  1762. package/scripts/test-plugin-lifecycle.mjs +173 -173
  1763. package/scripts/test-rollback-index.mjs +137 -137
  1764. package/scripts/test-schedule-runtime.ts +309 -309
  1765. package/scripts/test-sdk-surface.mjs +158 -158
  1766. package/scripts/test-serial-bridge.mjs +418 -418
  1767. package/scripts/test-tui-commands.mjs +148 -148
  1768. package/scripts/test-tui-reducers.mjs +72 -72
  1769. package/scripts/three-system-e2e/lib.mjs +79 -79
  1770. package/scripts/three-system-e2e/main.mjs +40 -40
  1771. package/scripts/three-system-e2e/phases/phase-0-user-token.mjs +42 -42
  1772. package/scripts/three-system-e2e/phases/phase-0a2-line-autoselect.mjs +35 -35
  1773. package/scripts/three-system-e2e/phases/phase-0b-fixture-grants.mjs +39 -39
  1774. package/scripts/three-system-e2e/phases/phase-0c-plugin-outbound-auth.mjs +95 -95
  1775. package/scripts/three-system-e2e/phases/stage-1-health.mjs +47 -47
  1776. package/scripts/three-system-e2e/phases/stage-2-5-team-plugins.mjs +84 -84
  1777. package/scripts/three-system-e2e/phases/stage-2-teams-tools-hitl.mjs +184 -184
  1778. package/scripts/three-system-e2e/phases/stage-3-diag.mjs +73 -73
  1779. package/scripts/three-system-e2e/phases/stage-4-plugin-toggle.mjs +53 -53
  1780. package/scripts/three-system-e2e/state.mjs +87 -87
  1781. package/scripts/three-system-e2e.mjs +40 -40
  1782. package/scripts/tool-face-batch-identity-e2e.mjs +222 -222
  1783. package/scripts/tsconfig.json +14 -14
  1784. package/scripts/tui-smoke.mjs +100 -100
  1785. package/scripts/typecheck.mjs +75 -75
  1786. package/scripts/ui/md-lint.mjs +80 -80
  1787. package/scripts/ui/readme-assets.mjs +30 -30
  1788. package/scripts/ui/readme-shots.mjs +42 -42
  1789. package/scripts/ui/record-demo.mjs +557 -557
  1790. package/scripts/ui/record.mjs +225 -225
  1791. package/scripts/ui/seed-admin.mjs +68 -68
  1792. package/scripts/ui/seed-demo.mjs +83 -83
  1793. package/scripts/ui/seed-industrial-demo.mjs +171 -171
  1794. package/scripts/ui/shot-hero.mjs +25 -25
  1795. package/scripts/ui/shots.mjs +75 -75
  1796. package/scripts/ui/verify-nav.mjs +51 -51
  1797. package/scripts/ui/verify-responsive.mjs +285 -285
  1798. package/sdk/client.d.mts +110 -110
  1799. package/sdk/context.mjs +34 -1
  1800. package/sdk/examples/line-sentinel/index.mjs +105 -105
  1801. package/sdk/examples/ops-notifier/index.mjs +34 -34
  1802. package/sdk/examples/sample-insight/index.mjs +39 -39
  1803. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +1 -0
  1804. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +41 -0
  1805. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +51 -0
  1806. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +14 -0
  1807. package/server/api/plugins/client/[name].get.ts +18 -18
  1808. package/server/api/plugins/i18n.get.ts +12 -12
  1809. package/server/api/plugins/manifest.get.ts +10 -10
  1810. package/server/api/system/backup/list.get.ts +32 -32
  1811. package/server/api/system/backup/run.post.ts +21 -21
  1812. package/server/api/system/config-groups/[id].delete.ts +21 -21
  1813. package/server/api/system/config-groups/[id].patch.ts +26 -26
  1814. package/server/api/system/config-groups/index.get.ts +21 -21
  1815. package/server/api/system/config-groups/index.post.ts +33 -33
  1816. package/server/api/system/timezone.get.ts +20 -20
  1817. package/server/api/users/login.post.ts +3 -2
  1818. package/server/api/users/register.post.ts +22 -21
  1819. package/server/api/users/tokens/[id]/token.get.ts +11 -11
  1820. package/server/api/workshop/[...path].ts +13 -13
  1821. package/server/api/workshop/a2a/[agentId]/card/index.get.ts +86 -75
  1822. package/server/api/workshop/agent-tools/approvals/index.get.ts +45 -45
  1823. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +26 -26
  1824. package/server/api/workshop/agent-tools/bindings/grant.post.ts +45 -45
  1825. package/server/api/workshop/agent-tools/bindings/index.get.ts +41 -41
  1826. package/server/api/workshop/agent-tools/bindings/revoke.post.ts +42 -42
  1827. package/server/api/workshop/aml/datasets/[id]/preview.get.ts +68 -68
  1828. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -39
  1829. package/server/api/workshop/aml/datasets/[id].get.ts +53 -53
  1830. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -30
  1831. package/server/api/workshop/aml/datasets/index.get.ts +20 -20
  1832. package/server/api/workshop/aml/datasets/index.post.ts +27 -27
  1833. package/server/api/workshop/aml/entities/index.get.ts +13 -13
  1834. package/server/api/workshop/aml/entities/prune.post.ts +28 -28
  1835. package/server/api/workshop/aml/env/index.get.ts +13 -13
  1836. package/server/api/workshop/aml/env/recheck.post.ts +14 -14
  1837. package/server/api/workshop/aml/env/uv.post.ts +21 -21
  1838. package/server/api/workshop/aml/env/venv.post.ts +24 -24
  1839. package/server/api/workshop/aml/experiments/index.get.ts +35 -35
  1840. package/server/api/workshop/aml/index.get.ts +37 -37
  1841. package/server/api/workshop/aml/jobs/[id]/cancel.post.ts +21 -21
  1842. package/server/api/workshop/aml/jobs/[id]/logs.get.ts +23 -23
  1843. package/server/api/workshop/aml/jobs/[id]/retry.post.ts +20 -20
  1844. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -44
  1845. package/server/api/workshop/aml/jobs/[id].get.ts +23 -23
  1846. package/server/api/workshop/aml/jobs/index.get.ts +26 -26
  1847. package/server/api/workshop/aml/models/[id]/predict.post.ts +24 -24
  1848. package/server/api/workshop/aml/models/[id]/promote.post.ts +30 -30
  1849. package/server/api/workshop/aml/models/index.get.ts +48 -48
  1850. package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -18
  1851. package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -18
  1852. package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -30
  1853. package/server/api/workshop/aml/training-plans/index.get.ts +9 -9
  1854. package/server/api/workshop/aml/training-plans/index.post.ts +43 -43
  1855. package/server/api/workshop/analysis/index.post.ts +71 -54
  1856. package/server/api/workshop/approvals/[id]/decide.post.ts +30 -30
  1857. package/server/api/workshop/approvals/index.get.ts +22 -22
  1858. package/server/api/workshop/assets/devices/index.post.ts +55 -53
  1859. package/server/api/workshop/audit.get.ts +43 -43
  1860. package/server/api/workshop/channels/[id]/chat/messages/[messageId]/read.post.ts +22 -22
  1861. package/server/api/workshop/channels/[id]/chat/messages/index.get.ts +29 -29
  1862. package/server/api/workshop/channels/[id]/chat/messages/index.post.ts +51 -51
  1863. package/server/api/workshop/channels/[id]/chat/permissions.get.ts +35 -35
  1864. package/server/api/workshop/channels/[id]/index.patch.ts +64 -64
  1865. package/server/api/workshop/channels/[id]/members/[userId]/approve.post.ts +20 -20
  1866. package/server/api/workshop/channels/[id]/members/[userId].delete.ts +21 -21
  1867. package/server/api/workshop/channels/[id]/members/index.get.ts +23 -23
  1868. package/server/api/workshop/channels/[id]/members/leave.post.ts +20 -20
  1869. package/server/api/workshop/channels/[id]/tasks/index.post.ts +2 -0
  1870. package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -45
  1871. package/server/api/workshop/channels/[id]/twin-profile.patch.ts +91 -72
  1872. package/server/api/workshop/daq/[id]/ingest.post.ts +25 -1
  1873. package/server/api/workshop/daq/[id]/test.post.ts +1 -1
  1874. package/server/api/workshop/daq/index.post.ts +45 -1
  1875. package/server/api/workshop/daq/storage/retention.put.ts +66 -0
  1876. package/server/api/workshop/daq/storage/rollup.post.ts +28 -0
  1877. package/server/api/workshop/daq/storage.get.ts +17 -0
  1878. package/server/api/workshop/daq/templates/[key].delete.ts +2 -2
  1879. package/server/api/workshop/daq/templates/[key].patch.ts +19 -19
  1880. package/server/api/workshop/daq/templates/index.post.ts +18 -18
  1881. package/server/api/workshop/dcw/[id]/write.post.ts +31 -30
  1882. package/server/api/workshop/dcw/[id].delete.ts +41 -41
  1883. package/server/api/workshop/dcw/mes-test-read.post.ts +24 -24
  1884. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -21
  1885. package/server/api/workshop/dcw/params/[id].delete.ts +19 -19
  1886. package/server/api/workshop/dcw/params/[id].patch.ts +23 -23
  1887. package/server/api/workshop/dcw/params/index.get.ts +27 -27
  1888. package/server/api/workshop/dcw/params/index.post.ts +25 -25
  1889. package/server/api/workshop/dcw/recipes/[id].delete.ts +21 -2
  1890. package/server/api/workshop/dcw/templates/[key].delete.ts +14 -14
  1891. package/server/api/workshop/dcw/templates/[key].patch.ts +16 -16
  1892. package/server/api/workshop/dcw/templates/index.post.ts +15 -15
  1893. package/server/api/workshop/device-twins/[id]/control.post.ts +23 -21
  1894. package/server/api/workshop/device-twins/[id].delete.ts +27 -25
  1895. package/server/api/workshop/device-twins/[id].patch.ts +31 -29
  1896. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -25
  1897. package/server/api/workshop/eda/templates/[id].delete.ts +14 -14
  1898. package/server/api/workshop/eda/templates/[id].get.ts +15 -15
  1899. package/server/api/workshop/eda/templates/[id].patch.ts +20 -20
  1900. package/server/api/workshop/eda/templates/index.get.ts +11 -11
  1901. package/server/api/workshop/eda/templates/index.post.ts +20 -20
  1902. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -41
  1903. package/server/api/workshop/exp/confirmations/index.get.ts +25 -25
  1904. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -16
  1905. package/server/api/workshop/hitl/respond.post.ts +94 -94
  1906. package/server/api/workshop/notifications/index.get.ts +60 -60
  1907. package/server/api/workshop/notifications/read.post.ts +31 -31
  1908. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -24
  1909. package/server/api/workshop/ops-logs/index.post.ts +92 -87
  1910. package/server/api/workshop/plugins/[name]/disable.post.ts +21 -21
  1911. package/server/api/workshop/plugins/[name]/enable.post.ts +21 -21
  1912. package/server/api/workshop/plugins/[name]/index.get.ts +14 -14
  1913. package/server/api/workshop/process-model/experiments.ts +28 -2
  1914. package/server/api/workshop/schedules/[id]/run.post.ts +15 -15
  1915. package/server/api/workshop/schedules/[id]/runs.get.ts +15 -15
  1916. package/server/api/workshop/schedules/[id].delete.ts +14 -14
  1917. package/server/api/workshop/schedules/[id].get.ts +13 -13
  1918. package/server/api/workshop/schedules/[id].patch.ts +29 -29
  1919. package/server/api/workshop/schedules/index.get.ts +12 -12
  1920. package/server/api/workshop/schedules/index.post.ts +32 -32
  1921. package/server/api/workshop/tasks/[id]/reassign.post.ts +32 -32
  1922. package/server/api/workshop/tasks/[id]/supersede.post.ts +28 -0
  1923. package/server/api/workshop/tasks/[id]/update.post.ts +35 -35
  1924. package/server/api/workshop/teams/[id]/plugins/index.get.ts +36 -36
  1925. package/server/api/workshop/teams/[id]/plugins/index.put.ts +42 -42
  1926. package/server/api/workshop/ws/audience.ts +56 -56
  1927. package/server/api/workshop/ws/db-buffer.ts +68 -68
  1928. package/server/api/workshop/ws/event-mapping.ts +47 -47
  1929. package/server/api/workshop/ws/handlers.ts +132 -132
  1930. package/server/api/workshop/ws/hub.ts +134 -134
  1931. package/server/api/workshop/ws/index.ts +23 -23
  1932. package/server/api/workshop/ws/notification-uplink.ts +77 -77
  1933. package/server/api/workshop/ws/shared.ts +94 -94
  1934. package/server/api/workshop/ws/streams.ts +146 -146
  1935. package/server/middleware/00-security-headers.ts +45 -38
  1936. package/server/middleware/01-rate-guard.ts +129 -101
  1937. package/server/plugins/00-daq-credentials.ts +33 -0
  1938. package/server/plugins/01-instance-guard.ts +118 -82
  1939. package/server/plugins/aml-twin-worker.ts +32 -32
  1940. package/server/plugins/backup.ts +268 -257
  1941. package/server/plugins/daq.ts +40 -1
  1942. package/server/plugins/dev-stability-guard.ts +46 -46
  1943. package/server/plugins/error-ledger.ts +21 -21
  1944. package/server/plugins-builtin/diag-bridge/host/constants.mjs +25 -25
  1945. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -104
  1946. package/server/plugins-builtin/diag-bridge/host/index.mjs +15 -15
  1947. package/server/plugins-builtin/diag-bridge/host/intents.mjs +62 -62
  1948. package/server/plugins-builtin/diag-bridge/host/plugin.mjs +759 -753
  1949. package/server/plugins-builtin/diag-bridge/host/snapshot.mjs +93 -93
  1950. package/server/plugins-builtin/diag-bridge/index.mjs +9 -9
  1951. package/server/plugins-builtin/rag-bridge/index.mjs +490 -484
  1952. package/server/plugins-builtin/serial-bridge/client.mjs +211 -211
  1953. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -409
  1954. package/server/plugins-builtin/serial-bridge/i18n.json +62 -62
  1955. package/server/plugins-builtin/serial-bridge/index.mjs +247 -247
  1956. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -208
  1957. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -168
  1958. package/server/repositories/user.repository.ts +543 -507
  1959. package/server/schemas/user.schema.ts +74 -74
  1960. package/server/services/system-config/contracts.ts +29 -29
  1961. package/server/services/system-config/dispose.ts +19 -19
  1962. package/server/services/system-config/facade.ts +26 -26
  1963. package/server/services/system-config/groups.ts +108 -108
  1964. package/server/services/system-config/index.ts +21 -21
  1965. package/server/services/system-config/init.ts +26 -26
  1966. package/server/services/system-config/mutate.ts +110 -103
  1967. package/server/services/system-config/plugins.ts +104 -104
  1968. package/server/services/system-config/secrets.ts +50 -0
  1969. package/server/services/system-config/snapshot.ts +70 -59
  1970. package/server/services/system-config/state.ts +79 -79
  1971. package/server/services/system-config/types.ts +58 -58
  1972. package/server/services/user.service.ts +279 -258
  1973. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +1 -0
  1974. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +14 -0
  1975. package/server/services/workshop/agents/adapters/line-spawn.ts +148 -144
  1976. package/server/services/workshop/agents/adapters/omp-rpc-client/api.ts +111 -111
  1977. package/server/services/workshop/agents/adapters/omp-rpc-client/contracts.ts +22 -22
  1978. package/server/services/workshop/agents/adapters/omp-rpc-client/facade.ts +7 -7
  1979. package/server/services/workshop/agents/adapters/omp-rpc-client/helpers.ts +38 -38
  1980. package/server/services/workshop/agents/adapters/omp-rpc-client/index.ts +25 -25
  1981. package/server/services/workshop/agents/adapters/omp-rpc-client/start.ts +74 -70
  1982. package/server/services/workshop/agents/adapters/omp-rpc-client/state.ts +65 -65
  1983. package/server/services/workshop/agents/adapters/omp-rpc-client/stdout.ts +92 -92
  1984. package/server/services/workshop/agents/adapters/omp-rpc-client/usage.ts +47 -47
  1985. package/server/services/workshop/agents/agent-badge.ts +38 -38
  1986. package/server/services/workshop/agents/agent-dto.ts +54 -54
  1987. package/server/services/workshop/agents/agent-interface.ts +2 -0
  1988. package/server/services/workshop/agents/base-agent.ts +3 -3
  1989. package/server/services/workshop/agents/binding-authz.ts +66 -66
  1990. package/server/services/workshop/agents/binding-mode.ts +51 -51
  1991. package/server/services/workshop/agents/codex-agent/client.ts +170 -170
  1992. package/server/services/workshop/agents/codex-agent/core.ts +119 -119
  1993. package/server/services/workshop/agents/codex-agent/facade.ts +8 -8
  1994. package/server/services/workshop/agents/codex-agent/helpers.ts +13 -13
  1995. package/server/services/workshop/agents/codex-agent/hitl.ts +138 -138
  1996. package/server/services/workshop/agents/codex-agent/index.ts +14 -14
  1997. package/server/services/workshop/agents/codex-agent/turn.ts +367 -367
  1998. package/server/services/workshop/agents/codex-agent/types.ts +42 -42
  1999. package/server/services/workshop/agents/governance-harness-audit.ts +216 -0
  2000. package/server/services/workshop/agents/harness-process.ts +3 -3
  2001. package/server/services/workshop/agents/harness-spawn-policy.ts +114 -114
  2002. package/server/services/workshop/agents/harness-terminal/api.ts +197 -197
  2003. package/server/services/workshop/agents/harness-terminal/index.ts +17 -17
  2004. package/server/services/workshop/agents/harness-terminal/io.ts +120 -120
  2005. package/server/services/workshop/agents/harness-terminal/park.ts +55 -55
  2006. package/server/services/workshop/agents/harness-terminal/sanitize.ts +98 -98
  2007. package/server/services/workshop/agents/harness-terminal/session.ts +124 -124
  2008. package/server/services/workshop/agents/harness-terminal/shared.ts +74 -74
  2009. package/server/services/workshop/agents/hitl-capabilities.ts +312 -312
  2010. package/server/services/workshop/agents/hitl-decision/answers.ts +32 -32
  2011. package/server/services/workshop/agents/hitl-decision/decide.ts +268 -268
  2012. package/server/services/workshop/agents/hitl-decision/payload.ts +45 -45
  2013. package/server/services/workshop/agents/hitl-decision/shared.ts +108 -108
  2014. package/server/services/workshop/agents/hitl-decision/visibility.ts +94 -94
  2015. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +3 -0
  2016. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +428 -410
  2017. package/server/services/workshop/agents/host-tool-bridge/tools/industrial.ts +4 -1
  2018. package/server/services/workshop/agents/host-tool-bridge/tools/messaging.ts +51 -14
  2019. package/server/services/workshop/agents/host-tool-bridge/tools/progress.ts +126 -84
  2020. package/server/services/workshop/agents/host-tool-bridge/tools/tasks.ts +52 -14
  2021. package/server/services/workshop/agents/host-tool-bridge/tools/team-delegation.ts +129 -109
  2022. package/server/services/workshop/agents/host-tool-bridge/tools/team.ts +70 -70
  2023. package/server/services/workshop/agents/host-tool-bridge/types.ts +1 -1
  2024. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -131
  2025. package/server/services/workshop/agents/industrial/aml-dataset-tools.ts +3 -0
  2026. package/server/services/workshop/agents/industrial/aml-job-tools.ts +6 -4
  2027. package/server/services/workshop/agents/industrial/audit-query.ts +66 -66
  2028. package/server/services/workshop/agents/industrial/bench-approval-only.ts +394 -0
  2029. package/server/services/workshop/agents/industrial/daq-tools.ts +79 -20
  2030. package/server/services/workshop/agents/industrial/dcw-tools.ts +10 -1
  2031. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -104
  2032. package/server/services/workshop/agents/industrial/fallback-hints.ts +31 -0
  2033. package/server/services/workshop/agents/industrial/identifiability-tools.ts +247 -0
  2034. package/server/services/workshop/agents/industrial/index.ts +1 -0
  2035. package/server/services/workshop/agents/industrial/manual-approval.ts +5 -3
  2036. package/server/services/workshop/agents/industrial/ops-tools.ts +115 -29
  2037. package/server/services/workshop/agents/industrial/optimization-tools.ts +33 -19
  2038. package/server/services/workshop/agents/industrial/param-tools.ts +69 -69
  2039. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +4 -3
  2040. package/server/services/workshop/agents/mock-agent.ts +4 -0
  2041. package/server/services/workshop/agents/node-bindings.repo.ts +210 -210
  2042. package/server/services/workshop/agents/node-delegation.ts +204 -204
  2043. package/server/services/workshop/agents/omp-agent/agentteam-audit.ts +147 -0
  2044. package/server/services/workshop/agents/omp-agent/client.ts +1 -1
  2045. package/server/services/workshop/agents/omp-agent/core.ts +146 -146
  2046. package/server/services/workshop/agents/omp-agent/event-mapping.ts +21 -0
  2047. package/server/services/workshop/agents/omp-agent/facade.ts +8 -8
  2048. package/server/services/workshop/agents/omp-agent/helpers.ts +37 -37
  2049. package/server/services/workshop/agents/omp-agent/index.ts +16 -16
  2050. package/server/services/workshop/agents/omp-agent/tools-steer.ts +100 -6
  2051. package/server/services/workshop/agents/omp-agent/types.ts +45 -45
  2052. package/server/services/workshop/agents/opencode-agent/core.ts +77 -77
  2053. package/server/services/workshop/agents/opencode-agent/facade.ts +8 -8
  2054. package/server/services/workshop/agents/opencode-agent/helpers.ts +29 -29
  2055. package/server/services/workshop/agents/opencode-agent/hitl.ts +113 -113
  2056. package/server/services/workshop/agents/opencode-agent/index.ts +16 -16
  2057. package/server/services/workshop/agents/opencode-agent/lifecycle.ts +44 -44
  2058. package/server/services/workshop/agents/opencode-agent/server.ts +244 -244
  2059. package/server/services/workshop/agents/opencode-agent/turn.ts +278 -278
  2060. package/server/services/workshop/agents/opencode-agent/types.ts +54 -54
  2061. package/server/services/workshop/agents/plugin-governance.ts +22 -2
  2062. package/server/services/workshop/agents/tool-classes.ts +56 -44
  2063. package/server/services/workshop/aml/action-coverage.ts +253 -0
  2064. package/server/services/workshop/aml/causal-claim.ts +68 -0
  2065. package/server/services/workshop/aml/clean.ts +120 -120
  2066. package/server/services/workshop/aml/dataset-builder.ts +23 -0
  2067. package/server/services/workshop/aml/entity.ts +367 -367
  2068. package/server/services/workshop/aml/env-lease.ts +178 -148
  2069. package/server/services/workshop/aml/gates.ts +45 -1
  2070. package/server/services/workshop/aml/identifiability.ts +335 -0
  2071. package/server/services/workshop/aml/intervention-ledger.ts +281 -0
  2072. package/server/services/workshop/aml/job-orchestrator/broadcast.ts +37 -37
  2073. package/server/services/workshop/aml/job-orchestrator/control.ts +94 -94
  2074. package/server/services/workshop/aml/job-orchestrator/failure.ts +96 -96
  2075. package/server/services/workshop/aml/job-orchestrator/index.ts +22 -22
  2076. package/server/services/workshop/aml/job-orchestrator/process.ts +101 -101
  2077. package/server/services/workshop/aml/job-orchestrator/shared.ts +53 -53
  2078. package/server/services/workshop/aml/job-orchestrator/status.ts +20 -20
  2079. package/server/services/workshop/aml/job-orchestrator/tick.ts +37 -37
  2080. package/server/services/workshop/aml/model-registry.ts +16 -2
  2081. package/server/services/workshop/aml/ontology-learning.ts +143 -0
  2082. package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  2083. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  2084. package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
  2085. package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  2086. package/server/services/workshop/aml/python/train-example.py +92 -92
  2087. package/server/services/workshop/aml/runtime.ts +137 -137
  2088. package/server/services/workshop/aml/stats.ts +140 -140
  2089. package/server/services/workshop/aml/twin/calibration-worker.ts +150 -150
  2090. package/server/services/workshop/aml/twin/cross-check.ts +176 -0
  2091. package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -332
  2092. package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -185
  2093. package/server/services/workshop/aml/twin/prompt-composer.ts +143 -143
  2094. package/server/services/workshop/aml/twin/training-plans.ts +260 -260
  2095. package/server/services/workshop/aml/twin/write-guard.ts +19 -19
  2096. package/server/services/workshop/assets/character-asset.repo.ts +1 -1
  2097. package/server/services/workshop/assets/device-twin.repo.ts +1 -1
  2098. package/server/services/workshop/bench-mode.ts +22 -0
  2099. package/server/services/workshop/daq/alarm-notify.ts +122 -102
  2100. package/server/services/workshop/daq/daq-controller/contracts.ts +42 -39
  2101. package/server/services/workshop/daq/daq-controller/crud.ts +220 -210
  2102. package/server/services/workshop/daq/daq-controller/driver-probe.ts +68 -67
  2103. package/server/services/workshop/daq/daq-controller/facade.ts +28 -28
  2104. package/server/services/workshop/daq/daq-controller/frames.ts +138 -137
  2105. package/server/services/workshop/daq/daq-controller/helpers.ts +52 -52
  2106. package/server/services/workshop/daq/daq-controller/index.ts +22 -22
  2107. package/server/services/workshop/daq/daq-controller/push.ts +22 -0
  2108. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +214 -186
  2109. package/server/services/workshop/daq/daq-controller/types.ts +5 -0
  2110. package/server/services/workshop/daq/daq-node.ts +7 -0
  2111. package/server/services/workshop/daq/daq-templates.ts +235 -225
  2112. package/server/services/workshop/daq/drivers/mock.ts +130 -130
  2113. package/server/services/workshop/daq/drivers/modbus-rtu.ts +67 -67
  2114. package/server/services/workshop/daq/drivers/modbus-tcp.ts +321 -310
  2115. package/server/services/workshop/daq/drivers/mqtt.ts +28 -0
  2116. package/server/services/workshop/daq/drivers/opcua.ts +227 -227
  2117. package/server/services/workshop/daq/drivers/s7-stub.ts +29 -29
  2118. package/server/services/workshop/daq/drivers/shared.ts +6 -0
  2119. package/server/services/workshop/daq/field-group.ts +266 -0
  2120. package/server/services/workshop/daq/host-bindings.ts +71 -71
  2121. package/server/services/workshop/daq/host-ports.ts +65 -65
  2122. package/server/services/workshop/daq/infra-credentials.ts +201 -0
  2123. package/server/services/workshop/daq/infra.ts +250 -229
  2124. package/server/services/workshop/daq/ingest-policy.ts +80 -66
  2125. package/server/services/workshop/daq/objectstore/index.ts +88 -88
  2126. package/server/services/workshop/daq/storage/index.ts +157 -4
  2127. package/server/services/workshop/daq/storage/retention.ts +142 -0
  2128. package/server/services/workshop/daq/storage/sqlite.adapter.ts +16 -3
  2129. package/server/services/workshop/daq/storage/timescale-rollup.ts +600 -0
  2130. package/server/services/workshop/daq/storage/timescale.adapter.ts +46 -13
  2131. package/server/services/workshop/daq/storage/tsdb-port.ts +120 -0
  2132. package/server/services/workshop/db/aml-team-seeds.ts +118 -118
  2133. package/server/services/workshop/db/backup-registry.ts +33 -33
  2134. package/server/services/workshop/db/channel-member.repo.ts +122 -122
  2135. package/server/services/workshop/db/channel.repo.ts +203 -203
  2136. package/server/services/workshop/db/chat-message.repo.ts +261 -233
  2137. package/server/services/workshop/db/database/index.ts +18 -18
  2138. package/server/services/workshop/db/database/json.ts +14 -14
  2139. package/server/services/workshop/db/database/open.ts +8 -0
  2140. package/server/services/workshop/db/database/rows.ts +6 -1
  2141. package/server/services/workshop/db/database/schema.ts +46 -2
  2142. package/server/services/workshop/db/database/seed-data.ts +60 -60
  2143. package/server/services/workshop/db/database/seed.ts +6 -6
  2144. package/server/services/workshop/db/hitl-request.repo.ts +221 -221
  2145. package/server/services/workshop/db/message.repo.ts +10 -3
  2146. package/server/services/workshop/db/notification.repo.ts +199 -199
  2147. package/server/services/workshop/db/readonly.ts +30 -30
  2148. package/server/services/workshop/db/scheduled-task.repo.ts +235 -235
  2149. package/server/services/workshop/db/schema.sql +7 -0
  2150. package/server/services/workshop/db/task.repo.ts +8 -3
  2151. package/server/services/workshop/db/transaction.ts +72 -72
  2152. package/server/services/workshop/dcw/dcw-controller/actuation.ts +7 -0
  2153. package/server/services/workshop/dcw/dcw-controller/contracts.ts +16 -16
  2154. package/server/services/workshop/dcw/dcw-controller/control.ts +78 -78
  2155. package/server/services/workshop/dcw/dcw-controller/crud.ts +5 -0
  2156. package/server/services/workshop/dcw/dcw-controller/facade.ts +19 -19
  2157. package/server/services/workshop/dcw/dcw-controller/helpers.ts +62 -61
  2158. package/server/services/workshop/dcw/dcw-controller/index.ts +22 -22
  2159. package/server/services/workshop/dcw/dcw-controller/params.ts +97 -97
  2160. package/server/services/workshop/dcw/dcw-controller/products.ts +103 -103
  2161. package/server/services/workshop/dcw/dcw-controller/recipes.ts +14 -8
  2162. package/server/services/workshop/dcw/dcw-controller/state.ts +88 -71
  2163. package/server/services/workshop/dcw/dcw-controller/write-audit.ts +22 -2
  2164. package/server/services/workshop/dcw/dcw-controller/write.ts +225 -224
  2165. package/server/services/workshop/dcw/dcw-templates.ts +136 -136
  2166. package/server/services/workshop/dcw/drivers/mqtt.ts +4 -3
  2167. package/server/services/workshop/dcw/mqtt-payload.ts +64 -0
  2168. package/server/services/workshop/dcw/param-conversion.ts +78 -78
  2169. package/server/services/workshop/dcw/param-map.repo.ts +349 -349
  2170. package/server/services/workshop/dcw/plugin-bridge.ts +45 -45
  2171. package/server/services/workshop/dcw/recipe-rollback-manager/contracts.ts +26 -26
  2172. package/server/services/workshop/dcw/recipe-rollback-manager/facade.ts +13 -13
  2173. package/server/services/workshop/dcw/recipe-rollback-manager/helpers.ts +30 -30
  2174. package/server/services/workshop/dcw/recipe-rollback-manager/index.ts +17 -17
  2175. package/server/services/workshop/dcw/recipe-rollback-manager/internal.ts +33 -33
  2176. package/server/services/workshop/dcw/recipe-rollback-manager/judge.ts +52 -52
  2177. package/server/services/workshop/dcw/recipe-rollback-manager/lock.ts +138 -137
  2178. package/server/services/workshop/dcw/recipe-rollback-manager/state.ts +21 -21
  2179. package/server/services/workshop/dcw/recipe-rollback-manager/types.ts +3 -3
  2180. package/server/services/workshop/dcw/recipe-rollback-manager/views.ts +214 -214
  2181. package/server/services/workshop/eda/data-export.ts +275 -274
  2182. package/server/services/workshop/eda/template-repo.ts +101 -101
  2183. package/server/services/workshop/exp/exp-collector.ts +275 -275
  2184. package/server/services/workshop/exp/exp-state.repo.ts +339 -339
  2185. package/server/services/workshop/json-store.mjs +143 -137
  2186. package/server/services/workshop/line-scope.ts +80 -80
  2187. package/server/services/workshop/mes/mes-controller.ts +1164 -1164
  2188. package/server/services/workshop/mes/mes-hook.ts +594 -567
  2189. package/server/services/workshop/net/ssrf.ts +83 -74
  2190. package/server/services/workshop/ontology/subgraph.core.ts +300 -300
  2191. package/server/services/workshop/ontology/subgraph.service.ts +113 -113
  2192. package/server/services/workshop/ops/error-ledger.ts +209 -209
  2193. package/server/services/workshop/optimization/profile-adopt.service.ts +28 -2
  2194. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
  2195. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
  2196. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
  2197. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  2198. package/server/services/workshop/plugins/host/api.mjs +90 -90
  2199. package/server/services/workshop/plugins/host/config.mjs +135 -135
  2200. package/server/services/workshop/plugins/host/index.mjs +23 -23
  2201. package/server/services/workshop/plugins/host/init.mjs +128 -109
  2202. package/server/services/workshop/plugins/host/reload.mjs +8 -1
  2203. package/server/services/workshop/plugins/host/rollback.mjs +72 -72
  2204. package/server/services/workshop/plugins/host/state.mjs +54 -54
  2205. package/server/services/workshop/plugins/host/toggle.mjs +64 -64
  2206. package/server/services/workshop/plugins/host.mjs +9 -9
  2207. package/server/services/workshop/process-model/experiment-runner.ts +393 -0
  2208. package/server/services/workshop/process-model/experiment.ts +25 -10
  2209. package/server/services/workshop/runtime/agent-runtime/facade.ts +7 -7
  2210. package/server/services/workshop/runtime/agent-runtime/harness-failure.ts +58 -0
  2211. package/server/services/workshop/runtime/agent-runtime/helpers.ts +18 -18
  2212. package/server/services/workshop/runtime/agent-runtime/index.ts +19 -19
  2213. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +160 -137
  2214. package/server/services/workshop/runtime/agent-runtime/message.ts +37 -2
  2215. package/server/services/workshop/runtime/agent-runtime/state.ts +18 -3
  2216. package/server/services/workshop/runtime/agent-runtime/types.ts +2 -0
  2217. package/server/services/workshop/runtime/channel-runtime.ts +80 -1
  2218. package/server/services/workshop/runtime/chat-mention.ts +164 -164
  2219. package/server/services/workshop/runtime/chat-projection.ts +246 -246
  2220. package/server/services/workshop/runtime/embedding-provider.ts +100 -83
  2221. package/server/services/workshop/runtime/execution-mode.ts +8 -0
  2222. package/server/services/workshop/runtime/manager/admin-agents.ts +268 -268
  2223. package/server/services/workshop/runtime/manager/admin-channel.ts +19 -14
  2224. package/server/services/workshop/runtime/manager/bus.ts +182 -182
  2225. package/server/services/workshop/runtime/manager/channel-template-constants.ts +20 -20
  2226. package/server/services/workshop/runtime/manager/chat-reply.ts +181 -181
  2227. package/server/services/workshop/runtime/manager/chat.ts +446 -386
  2228. package/server/services/workshop/runtime/manager/contracts.ts +7 -0
  2229. package/server/services/workshop/runtime/manager/facade.ts +24 -24
  2230. package/server/services/workshop/runtime/manager/helpers.ts +122 -119
  2231. package/server/services/workshop/runtime/manager/index.ts +42 -42
  2232. package/server/services/workshop/runtime/manager/internal.ts +73 -73
  2233. package/server/services/workshop/runtime/manager/notifications.ts +108 -108
  2234. package/server/services/workshop/runtime/manager/runtime-observe.ts +1 -3
  2235. package/server/services/workshop/runtime/manager/runtime-wiring.ts +18 -6
  2236. package/server/services/workshop/runtime/manager/schedules.ts +7 -0
  2237. package/server/services/workshop/runtime/manager/state.ts +14 -0
  2238. package/server/services/workshop/runtime/manager/tasks.ts +34 -1
  2239. package/server/services/workshop/runtime/manager/teams.ts +148 -148
  2240. package/server/services/workshop/runtime/manager/workspace.ts +1 -0
  2241. package/server/services/workshop/runtime/memory/contracts.ts +18 -18
  2242. package/server/services/workshop/runtime/memory/facade.ts +10 -10
  2243. package/server/services/workshop/runtime/memory/helpers.ts +196 -196
  2244. package/server/services/workshop/runtime/memory/index.ts +27 -27
  2245. package/server/services/workshop/runtime/memory/score.ts +33 -33
  2246. package/server/services/workshop/runtime/memory/state.ts +40 -40
  2247. package/server/services/workshop/runtime/monitor.ts +3 -3
  2248. package/server/services/workshop/runtime/platform-notice.ts +113 -113
  2249. package/server/services/workshop/runtime/schedule-runtime.ts +347 -347
  2250. package/server/services/workshop/runtime/scheduler-loop/contracts.ts +29 -29
  2251. package/server/services/workshop/runtime/scheduler-loop/facade.ts +7 -7
  2252. package/server/services/workshop/runtime/scheduler-loop/helpers.ts +14 -14
  2253. package/server/services/workshop/runtime/scheduler-loop/index.ts +16 -16
  2254. package/server/services/workshop/runtime/scheduler-loop/rules.ts +17 -1
  2255. package/server/services/workshop/runtime/scheduler-loop/tick.ts +31 -3
  2256. package/server/services/workshop/runtime/task-engine/create.ts +15 -1
  2257. package/server/services/workshop/runtime/task-engine/facade.ts +7 -7
  2258. package/server/services/workshop/runtime/task-engine/helpers.ts +2 -0
  2259. package/server/services/workshop/runtime/task-engine/index.ts +15 -15
  2260. package/server/services/workshop/runtime/task-engine/lifecycle.ts +68 -9
  2261. package/server/services/workshop/runtime/task-engine/types.ts +3 -3
  2262. package/server/services/workshop/runtime/user-notification-hub.ts +192 -192
  2263. package/server/services/workshop/settings.ts +39 -2
  2264. package/server/services/workshop/types/a2a.ts +16 -1
  2265. package/server/services/workshop/types/task.ts +2 -0
  2266. package/server/types/pg.d.ts +49 -49
  2267. package/server/utils/approval-gate.ts +67 -67
  2268. package/server/utils/asset-auth.ts +15 -0
  2269. package/server/utils/mojibake-guard.ts +29 -29
  2270. package/server/utils/request-ip.ts +29 -0
  2271. package/server/utils/response.ts +3 -6
  2272. package/server/utils/stability-severity.ts +77 -77
  2273. package/shared/config/groups.mjs +241 -241
  2274. package/shared/config/schema.json +173 -152
  2275. package/shared/daq-protocol.ts +8 -0
  2276. package/shared/dcw-protocol/catalog.ts +1 -0
  2277. package/shared/dcw-protocol/closed-loop.ts +4 -0
  2278. package/shared/lru.mjs +97 -97
  2279. package/tui/README.md +74 -74
  2280. package/tui/aw-tui.mjs +445 -445
  2281. package/tui/commands/index.mjs +287 -287
  2282. package/tui/components/chat-log.mjs +42 -42
  2283. package/tui/components/monitor-pane.mjs +39 -39
  2284. package/tui/components/root.mjs +53 -53
  2285. package/tui/components/status-bar.mjs +33 -33
  2286. package/tui/lib/api.mjs +82 -82
  2287. package/tui/lib/pickers.mjs +121 -121
  2288. package/tui/lib/reducers.mjs +218 -218
  2289. package/tui/lib/state.mjs +86 -86
  2290. package/tui/lib/virtual-terminal.mjs +48 -48
  2291. package/tui/lib/ws.mjs +125 -125
  2292. package/tui/theme.mjs +38 -38
  2293. package/.output/public/_nuxt/9Kt-rxrm.js +0 -1
  2294. package/.output/public/_nuxt/ATAvN55g.js +0 -1
  2295. package/.output/public/_nuxt/B3GEA4IW.js +0 -1
  2296. package/.output/public/_nuxt/B9qIhT7k2.js +0 -1
  2297. package/.output/public/_nuxt/BBTI9r9T2.js +0 -1
  2298. package/.output/public/_nuxt/BE9oKpOt.js +0 -1
  2299. package/.output/public/_nuxt/BHOjkDAJ.js +0 -21
  2300. package/.output/public/_nuxt/BTaGYNZF2.js +0 -1
  2301. package/.output/public/_nuxt/BXUDD9fv.js +0 -1
  2302. package/.output/public/_nuxt/BXbZ_hei.js +0 -1
  2303. package/.output/public/_nuxt/BaGy_jAI2.js +0 -1
  2304. package/.output/public/_nuxt/BdfAuX81.js +0 -1
  2305. package/.output/public/_nuxt/BoXKUOiN2.js +0 -1
  2306. package/.output/public/_nuxt/Buj_DMJ-.js +0 -1
  2307. package/.output/public/_nuxt/Bv7dyPx4.js +0 -1
  2308. package/.output/public/_nuxt/BvjY-Xks.js +0 -1
  2309. package/.output/public/_nuxt/BxC9PAu-2.js +0 -1
  2310. package/.output/public/_nuxt/Bzfzp9-f.js +0 -1
  2311. package/.output/public/_nuxt/CT4bi_Y4.js +0 -1
  2312. package/.output/public/_nuxt/CTGJHZ8X2.js +0 -1
  2313. package/.output/public/_nuxt/CWcaJnFp.js +0 -1
  2314. package/.output/public/_nuxt/CeCSjB9O2.js +0 -1
  2315. package/.output/public/_nuxt/CnoJJb7B.js +0 -1
  2316. package/.output/public/_nuxt/Crf8_Ad02.js +0 -1
  2317. package/.output/public/_nuxt/CtMTOx_-2.js +0 -1
  2318. package/.output/public/_nuxt/Cv9OcYm3.js +0 -1
  2319. package/.output/public/_nuxt/CxIF09Zj2.js +0 -1
  2320. package/.output/public/_nuxt/CxR0TyUA.js +0 -1
  2321. package/.output/public/_nuxt/D9tNM-1a.js +0 -9
  2322. package/.output/public/_nuxt/DL8QM0x5.js +0 -1
  2323. package/.output/public/_nuxt/DO9Y3eoU.js +0 -20
  2324. package/.output/public/_nuxt/DQLBGo6O.js +0 -1
  2325. package/.output/public/_nuxt/DSqQKrMK2.js +0 -1
  2326. package/.output/public/_nuxt/DXc4yISs.js +0 -47
  2327. package/.output/public/_nuxt/DXmEuVFQ2.js +0 -1
  2328. package/.output/public/_nuxt/DeXAMdSa2.js +0 -1
  2329. package/.output/public/_nuxt/DjjOAXrj2.js +0 -1
  2330. package/.output/public/_nuxt/DkRozlDP2.js +0 -1
  2331. package/.output/public/_nuxt/DoprKJ5a2.js +0 -1
  2332. package/.output/public/_nuxt/DvI5fMX12.js +0 -1
  2333. package/.output/public/_nuxt/DzWyfYJ12.js +0 -2
  2334. package/.output/public/_nuxt/EXs4hr_w2.js +0 -2
  2335. package/.output/public/_nuxt/K5Xen0wZ2.js +0 -1
  2336. package/.output/public/_nuxt/LS9Wa05P.js +0 -1
  2337. package/.output/public/_nuxt/MmlCf-EZ.js +0 -1
  2338. package/.output/public/_nuxt/OmpTerminalPanel.DMWgGwDs.css +0 -1
  2339. package/.output/public/_nuxt/PluginSlot.BqBzLD4T.css +0 -1
  2340. package/.output/public/_nuxt/TownView.DQaU1HuK.css +0 -1
  2341. package/.output/public/_nuxt/TugRY_4O.js +0 -1
  2342. package/.output/public/_nuxt/UgCvr7b2.js +0 -1
  2343. package/.output/public/_nuxt/WCG1-KXf2.js +0 -16
  2344. package/.output/public/_nuxt/WybiLTow2.js +0 -8
  2345. package/.output/public/_nuxt/YWsTLN5m.js +0 -1
  2346. package/.output/public/_nuxt/Zn0BZpf0.js +0 -3
  2347. package/.output/public/_nuxt/ZzOyoXex2.js +0 -1
  2348. package/.output/public/_nuxt/_id_.Be5JaH-P.css +0 -1
  2349. package/.output/public/_nuxt/_wsId_.DSOfdfx2.css +0 -1
  2350. package/.output/public/_nuxt/agents.CRomddYR.css +0 -1
  2351. package/.output/public/_nuxt/aml.DgOMpDpv.css +0 -1
  2352. package/.output/public/_nuxt/builds/meta/02ba4bc7-f353-4183-a619-716921b5f0dc.json +0 -1
  2353. package/.output/public/_nuxt/default.CpAx70gC.css +0 -1
  2354. package/.output/public/_nuxt/eNEgl-ZF.js +0 -1
  2355. package/.output/public/_nuxt/fJv3DH8b.js +0 -1
  2356. package/.output/public/_nuxt/hyLdZsOd2.js +0 -1
  2357. package/.output/public/_nuxt/logs.6VGjPS34.css +0 -1
  2358. package/.output/public/_nuxt/monitor.OoNTwfMJ.css +0 -1
  2359. package/.output/public/_nuxt/o8sYG6xx2.js +0 -1
  2360. package/.output/public/_nuxt/ontology.D4P756Tc.css +0 -1
  2361. package/.output/public/_nuxt/operations.C48ggFa5.css +0 -1
  2362. package/.output/public/_nuxt/pages.Dpa28tJW.css +0 -1
  2363. package/.output/public/_nuxt/permissions.CrV-4t-6.css +0 -1
  2364. package/.output/public/_nuxt/px0VQ09m.js +0 -2
  2365. package/.output/public/_nuxt/schedules.DYWOjGHm.css +0 -1
  2366. package/.output/public/_nuxt/teams.DEJoJ4QV.css +0 -1
  2367. package/.output/public/_nuxt/tokens.DKZWCP5v.css +0 -1
  2368. package/.output/public/_nuxt/tools.DP-nsTli.css +0 -1
  2369. package/.output/public/_nuxt/workshop.PT1xhP8C.css +0 -1
  2370. package/.output/server/chunks/_/AuthGate-G74Wr5IV.mjs +0 -716
  2371. package/.output/server/chunks/_/AuthGate-G74Wr5IV.mjs.map +0 -1
  2372. package/.output/server/chunks/_/FormItemContext-DmuQqaeJ.mjs +0 -72
  2373. package/.output/server/chunks/_/FormItemContext-DmuQqaeJ.mjs.map +0 -1
  2374. package/.output/server/chunks/_/OmpTerminalPanel-CVn7GF98.mjs +0 -942
  2375. package/.output/server/chunks/_/OmpTerminalPanel-CVn7GF98.mjs.map +0 -1
  2376. package/.output/server/chunks/_/PluginSlot-CZlGlRoR.mjs +0 -141
  2377. package/.output/server/chunks/_/PluginSlot-CZlGlRoR.mjs.map +0 -1
  2378. package/.output/server/chunks/_/TownView-CaxNtCrZ.mjs +0 -6496
  2379. package/.output/server/chunks/_/TownView-CaxNtCrZ.mjs.map +0 -1
  2380. package/.output/server/chunks/_/_id_-CvCH8aqA.mjs +0 -2045
  2381. package/.output/server/chunks/_/_id_-CvCH8aqA.mjs.map +0 -1
  2382. package/.output/server/chunks/_/_id_-X_k47fyM.mjs +0 -392
  2383. package/.output/server/chunks/_/_id_-X_k47fyM.mjs.map +0 -1
  2384. package/.output/server/chunks/_/_wsId_-CIXvt220.mjs +0 -14589
  2385. package/.output/server/chunks/_/_wsId_-CIXvt220.mjs.map +0 -1
  2386. package/.output/server/chunks/_/agents-Bipi0xxl.mjs +0 -1078
  2387. package/.output/server/chunks/_/agents-Bipi0xxl.mjs.map +0 -1
  2388. package/.output/server/chunks/_/alert-CNGhs--Y.mjs +0 -263
  2389. package/.output/server/chunks/_/alert-CNGhs--Y.mjs.map +0 -1
  2390. package/.output/server/chunks/_/aml-gCTIxLoE.mjs +0 -814
  2391. package/.output/server/chunks/_/aml-gCTIxLoE.mjs.map +0 -1
  2392. package/.output/server/chunks/_/analysis-BrSFajFi.mjs +0 -533
  2393. package/.output/server/chunks/_/analysis-BrSFajFi.mjs.map +0 -1
  2394. package/.output/server/chunks/_/api--f4L9O86.mjs +0 -64
  2395. package/.output/server/chunks/_/api--f4L9O86.mjs.map +0 -1
  2396. package/.output/server/chunks/_/api-CRGCw6io.mjs +0 -53
  2397. package/.output/server/chunks/_/api-CRGCw6io.mjs.map +0 -1
  2398. package/.output/server/chunks/_/api-DKutH26K.mjs +0 -72
  2399. package/.output/server/chunks/_/api-DKutH26K.mjs.map +0 -1
  2400. package/.output/server/chunks/_/api-error-BrL8jXVC.mjs +0 -47
  2401. package/.output/server/chunks/_/api-error-BrL8jXVC.mjs.map +0 -1
  2402. package/.output/server/chunks/_/apiClient-DrCvj3Zb.mjs +0 -81
  2403. package/.output/server/chunks/_/apiClient-DrCvj3Zb.mjs.map +0 -1
  2404. package/.output/server/chunks/_/board-DB55AvRS.mjs +0 -189
  2405. package/.output/server/chunks/_/board-DB55AvRS.mjs.map +0 -1
  2406. package/.output/server/chunks/_/builtin-catalog-edpDcgfL.mjs.map +0 -1
  2407. package/.output/server/chunks/_/card-BECE6y_G.mjs +0 -953
  2408. package/.output/server/chunks/_/card-BECE6y_G.mjs.map +0 -1
  2409. package/.output/server/chunks/_/channel-templates-C0Njk-Ir.mjs +0 -942
  2410. package/.output/server/chunks/_/channel-templates-C0Njk-Ir.mjs.map +0 -1
  2411. package/.output/server/chunks/_/chart-pipeline-BpoWYMK_.mjs.map +0 -1
  2412. package/.output/server/chunks/_/chart-trend-BWeZh5Lv.mjs.map +0 -1
  2413. package/.output/server/chunks/_/checkbox-C6xY5uc6.mjs +0 -439
  2414. package/.output/server/chunks/_/checkbox-C6xY5uc6.mjs.map +0 -1
  2415. package/.output/server/chunks/_/client-only-DQ6Q0w4J.mjs +0 -43
  2416. package/.output/server/chunks/_/client-only-DQ6Q0w4J.mjs.map +0 -1
  2417. package/.output/server/chunks/_/constants-HPHJvjne.mjs +0 -142
  2418. package/.output/server/chunks/_/constants-HPHJvjne.mjs.map +0 -1
  2419. package/.output/server/chunks/_/core-CRlsQhzd.mjs +0 -294
  2420. package/.output/server/chunks/_/core-CRlsQhzd.mjs.map +0 -1
  2421. package/.output/server/chunks/_/daq-VLM0Ud2Y.mjs +0 -1266
  2422. package/.output/server/chunks/_/daq-VLM0Ud2Y.mjs.map +0 -1
  2423. package/.output/server/chunks/_/data-Bgx_w04W.mjs +0 -481
  2424. package/.output/server/chunks/_/data-Bgx_w04W.mjs.map +0 -1
  2425. package/.output/server/chunks/_/dcw-BstEJzQ4.mjs +0 -505
  2426. package/.output/server/chunks/_/dcw-BstEJzQ4.mjs.map +0 -1
  2427. package/.output/server/chunks/_/dcw-driver-badge-Df5wL_ZA.mjs.map +0 -1
  2428. package/.output/server/chunks/_/default-Dmo-rt5V.mjs +0 -2353
  2429. package/.output/server/chunks/_/default-Dmo-rt5V.mjs.map +0 -1
  2430. package/.output/server/chunks/_/descriptions-B3uhDesi.mjs +0 -406
  2431. package/.output/server/chunks/_/descriptions-B3uhDesi.mjs.map +0 -1
  2432. package/.output/server/chunks/_/drawer-DwXxapMg.mjs +0 -834
  2433. package/.output/server/chunks/_/drawer-DwXxapMg.mjs.map +0 -1
  2434. package/.output/server/chunks/_/dropdown-DLrGy-Fs.mjs +0 -14
  2435. package/.output/server/chunks/_/dropdown-DLrGy-Fs.mjs.map +0 -1
  2436. package/.output/server/chunks/_/dropdown-nsGv8Gqx.mjs +0 -540
  2437. package/.output/server/chunks/_/dropdown-nsGv8Gqx.mjs.map +0 -1
  2438. package/.output/server/chunks/_/es-DXSEkmAm.mjs +0 -43
  2439. package/.output/server/chunks/_/es-DXSEkmAm.mjs.map +0 -1
  2440. package/.output/server/chunks/_/firstNotUndefined-laiThpLD.mjs +0 -2448
  2441. package/.output/server/chunks/_/firstNotUndefined-laiThpLD.mjs.map +0 -1
  2442. package/.output/server/chunks/_/form-Cw2Ex9w5.mjs +0 -4712
  2443. package/.output/server/chunks/_/form-Cw2Ex9w5.mjs.map +0 -1
  2444. package/.output/server/chunks/_/hasIn-RYRGomyg.mjs +0 -553
  2445. package/.output/server/chunks/_/hasIn-RYRGomyg.mjs.map +0 -1
  2446. package/.output/server/chunks/_/hitl-CQowkJ6s.mjs +0 -132
  2447. package/.output/server/chunks/_/hitl-CQowkJ6s.mjs.map +0 -1
  2448. package/.output/server/chunks/_/input-CJgB-RL6.mjs +0 -2181
  2449. package/.output/server/chunks/_/input-CJgB-RL6.mjs.map +0 -1
  2450. package/.output/server/chunks/_/input-number-CQKL42p_.mjs +0 -1120
  2451. package/.output/server/chunks/_/input-number-CQKL42p_.mjs.map +0 -1
  2452. package/.output/server/chunks/_/interval-CfceaI3F.mjs +0 -9
  2453. package/.output/server/chunks/_/interval-CfceaI3F.mjs.map +0 -1
  2454. package/.output/server/chunks/_/isNumeric-DQiJ-b15.mjs +0 -7
  2455. package/.output/server/chunks/_/isNumeric-DQiJ-b15.mjs.map +0 -1
  2456. package/.output/server/chunks/_/logs-Dt4ejjjU.mjs +0 -492
  2457. package/.output/server/chunks/_/logs-Dt4ejjjU.mjs.map +0 -1
  2458. package/.output/server/chunks/_/menu-xO8ocVtL.mjs +0 -1952
  2459. package/.output/server/chunks/_/menu-xO8ocVtL.mjs.map +0 -1
  2460. package/.output/server/chunks/_/monitor-vqmGVVN5.mjs +0 -2253
  2461. package/.output/server/chunks/_/monitor-vqmGVVN5.mjs.map +0 -1
  2462. package/.output/server/chunks/_/narrow-fetch-CcG-BPxc.mjs.map +0 -1
  2463. package/.output/server/chunks/_/ontology-ih0HgPpL.mjs +0 -1406
  2464. package/.output/server/chunks/_/ontology-ih0HgPpL.mjs.map +0 -1
  2465. package/.output/server/chunks/_/operations-BHmdVOUk.mjs +0 -311
  2466. package/.output/server/chunks/_/operations-BHmdVOUk.mjs.map +0 -1
  2467. package/.output/server/chunks/_/optimizer-DyvIYE4A.mjs +0 -202
  2468. package/.output/server/chunks/_/optimizer-DyvIYE4A.mjs.map +0 -1
  2469. package/.output/server/chunks/_/pages-C2KTn0U1.mjs +0 -542
  2470. package/.output/server/chunks/_/pages-C2KTn0U1.mjs.map +0 -1
  2471. package/.output/server/chunks/_/pagination-BTzq7dD5.mjs +0 -1346
  2472. package/.output/server/chunks/_/pagination-BTzq7dD5.mjs.map +0 -1
  2473. package/.output/server/chunks/_/permissions-BbTI02WI.mjs +0 -637
  2474. package/.output/server/chunks/_/permissions-BbTI02WI.mjs.map +0 -1
  2475. package/.output/server/chunks/_/pipeline-BgNjQ4J3.mjs +0 -212
  2476. package/.output/server/chunks/_/pipeline-BgNjQ4J3.mjs.map +0 -1
  2477. package/.output/server/chunks/_/plugins-CplEv3mY.mjs +0 -272
  2478. package/.output/server/chunks/_/plugins-CplEv3mY.mjs.map +0 -1
  2479. package/.output/server/chunks/_/popconfirm-DuGF7ty-.mjs +0 -340
  2480. package/.output/server/chunks/_/popconfirm-DuGF7ty-.mjs.map +0 -1
  2481. package/.output/server/chunks/_/responsiveObserve-CzRpNXkr.mjs +0 -78
  2482. package/.output/server/chunks/_/responsiveObserve-CzRpNXkr.mjs.map +0 -1
  2483. package/.output/server/chunks/_/schedules-BN4t_4PG.mjs +0 -7172
  2484. package/.output/server/chunks/_/schedules-BN4t_4PG.mjs.map +0 -1
  2485. package/.output/server/chunks/_/segmented-29uEKZ3D.mjs +0 -341
  2486. package/.output/server/chunks/_/segmented-29uEKZ3D.mjs.map +0 -1
  2487. package/.output/server/chunks/_/select-CJb2XrQf.mjs +0 -3923
  2488. package/.output/server/chunks/_/select-CJb2XrQf.mjs.map +0 -1
  2489. package/.output/server/chunks/_/settings-BQaAoT4q.mjs +0 -1014
  2490. package/.output/server/chunks/_/settings-BQaAoT4q.mjs.map +0 -1
  2491. package/.output/server/chunks/_/space-BByD-mFE.mjs +0 -110
  2492. package/.output/server/chunks/_/space-BByD-mFE.mjs.map +0 -1
  2493. package/.output/server/chunks/_/spin-XhbgGeLP.mjs +0 -357
  2494. package/.output/server/chunks/_/spin-XhbgGeLP.mjs.map +0 -1
  2495. package/.output/server/chunks/_/studio-D5r5Rzaq.mjs +0 -336
  2496. package/.output/server/chunks/_/studio-D5r5Rzaq.mjs.map +0 -1
  2497. package/.output/server/chunks/_/switch-DWcwVFxW.mjs +0 -377
  2498. package/.output/server/chunks/_/switch-DWcwVFxW.mjs.map +0 -1
  2499. package/.output/server/chunks/_/table-Zhuo7Fq-.mjs +0 -7546
  2500. package/.output/server/chunks/_/table-Zhuo7Fq-.mjs.map +0 -1
  2501. package/.output/server/chunks/_/tabs-BCwBXjNt.mjs +0 -1924
  2502. package/.output/server/chunks/_/tabs-BCwBXjNt.mjs.map +0 -1
  2503. package/.output/server/chunks/_/tag-CRW-anwy.mjs +0 -1156
  2504. package/.output/server/chunks/_/tag-CRW-anwy.mjs.map +0 -1
  2505. package/.output/server/chunks/_/teams-BUtsNTet.mjs +0 -1203
  2506. package/.output/server/chunks/_/teams-BUtsNTet.mjs.map +0 -1
  2507. package/.output/server/chunks/_/tokens-o8lT3x-p.mjs +0 -1062
  2508. package/.output/server/chunks/_/tokens-o8lT3x-p.mjs.map +0 -1
  2509. package/.output/server/chunks/_/tools-DRb5HTtU.mjs +0 -487
  2510. package/.output/server/chunks/_/tools-DRb5HTtU.mjs.map +0 -1
  2511. package/.output/server/chunks/_/tooltip-GlMrUZzx.mjs +0 -920
  2512. package/.output/server/chunks/_/tooltip-GlMrUZzx.mjs.map +0 -1
  2513. package/.output/server/chunks/_/town-BPA3G6yX.mjs +0 -133
  2514. package/.output/server/chunks/_/town-BPA3G6yX.mjs.map +0 -1
  2515. package/.output/server/chunks/_/town-BV-hbwb5.mjs +0 -75
  2516. package/.output/server/chunks/_/town-BV-hbwb5.mjs.map +0 -1
  2517. package/.output/server/chunks/_/types-D6J7slEa.mjs +0 -5565
  2518. package/.output/server/chunks/_/types-D6J7slEa.mjs.map +0 -1
  2519. package/.output/server/chunks/_/types-DWqIeMRP.mjs +0 -76
  2520. package/.output/server/chunks/_/types-DWqIeMRP.mjs.map +0 -1
  2521. package/.output/server/chunks/_/useAgentHarnessOptions-dDHiEoK2.mjs +0 -124
  2522. package/.output/server/chunks/_/useAgentHarnessOptions-dDHiEoK2.mjs.map +0 -1
  2523. package/.output/server/chunks/_/useAgentTemplateActions-S3dtH5UW.mjs +0 -77
  2524. package/.output/server/chunks/_/useAgentTemplateActions-S3dtH5UW.mjs.map +0 -1
  2525. package/.output/server/chunks/_/useAgentTemplateDialogState-CZzpu5og.mjs +0 -67
  2526. package/.output/server/chunks/_/useAgentTemplateDialogState-CZzpu5og.mjs.map +0 -1
  2527. package/.output/server/chunks/_/useAgentTemplateForm-D8gneIvd.mjs +0 -117
  2528. package/.output/server/chunks/_/useAgentTemplateForm-D8gneIvd.mjs.map +0 -1
  2529. package/.output/server/chunks/_/useAgentTemplatesCatalog-DHUpubKM.mjs +0 -133
  2530. package/.output/server/chunks/_/useAgentTemplatesCatalog-DHUpubKM.mjs.map +0 -1
  2531. package/.output/server/chunks/_/useAmlDatasets-CDg3Qbpv.mjs +0 -92
  2532. package/.output/server/chunks/_/useAmlDatasets-CDg3Qbpv.mjs.map +0 -1
  2533. package/.output/server/chunks/_/useAmlEntities-Bcaput4Y.mjs +0 -86
  2534. package/.output/server/chunks/_/useAmlEntities-Bcaput4Y.mjs.map +0 -1
  2535. package/.output/server/chunks/_/useAmlEnv-Dga_Nq6z.mjs +0 -194
  2536. package/.output/server/chunks/_/useAmlEnv-Dga_Nq6z.mjs.map +0 -1
  2537. package/.output/server/chunks/_/useAmlExperiments-CFngqLM3.mjs +0 -89
  2538. package/.output/server/chunks/_/useAmlExperiments-CFngqLM3.mjs.map +0 -1
  2539. package/.output/server/chunks/_/useAmlFormat-C2sl3MGB.mjs +0 -82
  2540. package/.output/server/chunks/_/useAmlFormat-C2sl3MGB.mjs.map +0 -1
  2541. package/.output/server/chunks/_/useAmlJobs-C7onZkcR.mjs +0 -267
  2542. package/.output/server/chunks/_/useAmlJobs-C7onZkcR.mjs.map +0 -1
  2543. package/.output/server/chunks/_/useAmlModels-B2b3mx4d.mjs +0 -93
  2544. package/.output/server/chunks/_/useAmlModels-B2b3mx4d.mjs.map +0 -1
  2545. package/.output/server/chunks/_/useAmlNotes-6gZX7tbx.mjs +0 -86
  2546. package/.output/server/chunks/_/useAmlNotes-6gZX7tbx.mjs.map +0 -1
  2547. package/.output/server/chunks/_/useAmlPredict-DwOmM2ke.mjs +0 -130
  2548. package/.output/server/chunks/_/useAmlPredict-DwOmM2ke.mjs.map +0 -1
  2549. package/.output/server/chunks/_/useAnalysisFeed-CpPsKh_I.mjs +0 -129
  2550. package/.output/server/chunks/_/useAnalysisFeed-CpPsKh_I.mjs.map +0 -1
  2551. package/.output/server/chunks/_/useDaqAddNode-QtJja03_.mjs +0 -142
  2552. package/.output/server/chunks/_/useDaqAddNode-QtJja03_.mjs.map +0 -1
  2553. package/.output/server/chunks/_/useDaqDetailBinding-Dd5c4bep.mjs +0 -70
  2554. package/.output/server/chunks/_/useDaqDetailBinding-Dd5c4bep.mjs.map +0 -1
  2555. package/.output/server/chunks/_/useDaqDetailFrames-C2gvrOr6.mjs +0 -79
  2556. package/.output/server/chunks/_/useDaqDetailFrames-C2gvrOr6.mjs.map +0 -1
  2557. package/.output/server/chunks/_/useDaqDetailHistory-Bhht_iFw.mjs +0 -176
  2558. package/.output/server/chunks/_/useDaqDetailHistory-Bhht_iFw.mjs.map +0 -1
  2559. package/.output/server/chunks/_/useDaqDetailNode-BayXtr5W.mjs +0 -99
  2560. package/.output/server/chunks/_/useDaqDetailNode-BayXtr5W.mjs.map +0 -1
  2561. package/.output/server/chunks/_/useDaqDetailParams-D8d1l3_R.mjs +0 -159
  2562. package/.output/server/chunks/_/useDaqDetailParams-D8d1l3_R.mjs.map +0 -1
  2563. package/.output/server/chunks/_/useDaqFilters-TYucwywj.mjs +0 -222
  2564. package/.output/server/chunks/_/useDaqFilters-TYucwywj.mjs.map +0 -1
  2565. package/.output/server/chunks/_/useDaqNodeWindow-1DWj2H5G.mjs +0 -90
  2566. package/.output/server/chunks/_/useDaqNodeWindow-1DWj2H5G.mjs.map +0 -1
  2567. package/.output/server/chunks/_/useDaqOptimizations-o5hubsm8.mjs +0 -136
  2568. package/.output/server/chunks/_/useDaqOptimizations-o5hubsm8.mjs.map +0 -1
  2569. package/.output/server/chunks/_/useDaqStream-BCTOU87S.mjs +0 -395
  2570. package/.output/server/chunks/_/useDaqStream-BCTOU87S.mjs.map +0 -1
  2571. package/.output/server/chunks/_/useDaqTemplates-Fj64LHfn.mjs +0 -187
  2572. package/.output/server/chunks/_/useDaqTemplates-Fj64LHfn.mjs.map +0 -1
  2573. package/.output/server/chunks/_/useDashboardCharts-D45083s_.mjs +0 -354
  2574. package/.output/server/chunks/_/useDashboardCharts-D45083s_.mjs.map +0 -1
  2575. package/.output/server/chunks/_/useDashboardData-Cm_-daeI.mjs +0 -153
  2576. package/.output/server/chunks/_/useDashboardData-Cm_-daeI.mjs.map +0 -1
  2577. package/.output/server/chunks/_/useDcwAddNode-DaqIQSXN.mjs +0 -219
  2578. package/.output/server/chunks/_/useDcwAddNode-DaqIQSXN.mjs.map +0 -1
  2579. package/.output/server/chunks/_/useDcwCards-OhzgHbAI.mjs +0 -67
  2580. package/.output/server/chunks/_/useDcwCards-OhzgHbAI.mjs.map +0 -1
  2581. package/.output/server/chunks/_/useDcwDetailScope-CaWcaiBg.mjs +0 -184
  2582. package/.output/server/chunks/_/useDcwDetailScope-CaWcaiBg.mjs.map +0 -1
  2583. package/.output/server/chunks/_/useDcwDetailTemplates-CrOgqQMX.mjs +0 -148
  2584. package/.output/server/chunks/_/useDcwDetailTemplates-CrOgqQMX.mjs.map +0 -1
  2585. package/.output/server/chunks/_/useDcwFilter-RH511Ra2.mjs +0 -71
  2586. package/.output/server/chunks/_/useDcwFilter-RH511Ra2.mjs.map +0 -1
  2587. package/.output/server/chunks/_/useDcwLedger-Dg61GD1J.mjs +0 -79
  2588. package/.output/server/chunks/_/useDcwLedger-Dg61GD1J.mjs.map +0 -1
  2589. package/.output/server/chunks/_/useDcwLineMutations-CiurWUFF.mjs +0 -137
  2590. package/.output/server/chunks/_/useDcwLineMutations-CiurWUFF.mjs.map +0 -1
  2591. package/.output/server/chunks/_/useDcwLineRun-DTSemEZb.mjs +0 -104
  2592. package/.output/server/chunks/_/useDcwLineRun-DTSemEZb.mjs.map +0 -1
  2593. package/.output/server/chunks/_/useDcwParamApprovals-DpnD-yw0.mjs +0 -121
  2594. package/.output/server/chunks/_/useDcwParamApprovals-DpnD-yw0.mjs.map +0 -1
  2595. package/.output/server/chunks/_/useDcwProducts-CRAl59cn.mjs +0 -93
  2596. package/.output/server/chunks/_/useDcwProducts-CRAl59cn.mjs.map +0 -1
  2597. package/.output/server/chunks/_/useDcwQuery-Cyh_iGa9.mjs +0 -98
  2598. package/.output/server/chunks/_/useDcwQuery-Cyh_iGa9.mjs.map +0 -1
  2599. package/.output/server/chunks/_/useDcwQuickActions-BW5-5HFn.mjs +0 -88
  2600. package/.output/server/chunks/_/useDcwQuickActions-BW5-5HFn.mjs.map +0 -1
  2601. package/.output/server/chunks/_/useDcwRecipes-Ct9bWJwP.mjs +0 -258
  2602. package/.output/server/chunks/_/useDcwRecipes-Ct9bWJwP.mjs.map +0 -1
  2603. package/.output/server/chunks/_/useDcwStream-BerzMqxo.mjs +0 -455
  2604. package/.output/server/chunks/_/useDcwStream-BerzMqxo.mjs.map +0 -1
  2605. package/.output/server/chunks/_/useDcwTemplates-PMVeSLNP.mjs +0 -91
  2606. package/.output/server/chunks/_/useDcwTemplates-PMVeSLNP.mjs.map +0 -1
  2607. package/.output/server/chunks/_/useDcwWrites-CND_sZdb.mjs +0 -140
  2608. package/.output/server/chunks/_/useDcwWrites-CND_sZdb.mjs.map +0 -1
  2609. package/.output/server/chunks/_/useDeviceTwins-FB6rTm-6.mjs +0 -128
  2610. package/.output/server/chunks/_/useDeviceTwins-FB6rTm-6.mjs.map +0 -1
  2611. package/.output/server/chunks/_/useExpConfirmations-b0bE75Yq.mjs +0 -107
  2612. package/.output/server/chunks/_/useExpConfirmations-b0bE75Yq.mjs.map +0 -1
  2613. package/.output/server/chunks/_/useLocalTime-BJ_4vg1E.mjs +0 -55
  2614. package/.output/server/chunks/_/useLocalTime-BJ_4vg1E.mjs.map +0 -1
  2615. package/.output/server/chunks/_/useLogsFormat-B-o4MHy7.mjs +0 -77
  2616. package/.output/server/chunks/_/useLogsFormat-B-o4MHy7.mjs.map +0 -1
  2617. package/.output/server/chunks/_/useLogsManual-Cxka55hz.mjs +0 -89
  2618. package/.output/server/chunks/_/useLogsManual-Cxka55hz.mjs.map +0 -1
  2619. package/.output/server/chunks/_/useLogsQuery-DxMHc7M4.mjs +0 -150
  2620. package/.output/server/chunks/_/useLogsQuery-DxMHc7M4.mjs.map +0 -1
  2621. package/.output/server/chunks/_/useLogsScope-HuOiW-OR.mjs +0 -83
  2622. package/.output/server/chunks/_/useLogsScope-HuOiW-OR.mjs.map +0 -1
  2623. package/.output/server/chunks/_/useMonitorColumns-vVnt3r5Q.mjs +0 -217
  2624. package/.output/server/chunks/_/useMonitorColumns-vVnt3r5Q.mjs.map +0 -1
  2625. package/.output/server/chunks/_/useMonitorData-Bf3w2khj.mjs +0 -135
  2626. package/.output/server/chunks/_/useMonitorData-Bf3w2khj.mjs.map +0 -1
  2627. package/.output/server/chunks/_/useMonitorFormat-DsiVqWoa.mjs +0 -91
  2628. package/.output/server/chunks/_/useMonitorFormat-DsiVqWoa.mjs.map +0 -1
  2629. package/.output/server/chunks/_/useMonitorTerminal-Dj4QwRNW.mjs +0 -71
  2630. package/.output/server/chunks/_/useMonitorTerminal-Dj4QwRNW.mjs.map +0 -1
  2631. package/.output/server/chunks/_/useOperationsFeed-Bg35fcgt.mjs +0 -195
  2632. package/.output/server/chunks/_/useOperationsFeed-Bg35fcgt.mjs.map +0 -1
  2633. package/.output/server/chunks/_/useOpsLog-BEzBrMf4.mjs +0 -149
  2634. package/.output/server/chunks/_/useOpsLog-BEzBrMf4.mjs.map +0 -1
  2635. package/.output/server/chunks/_/useRecipeDispatchApprovals-CZfcMRYk.mjs +0 -156
  2636. package/.output/server/chunks/_/useRecipeDispatchApprovals-CZfcMRYk.mjs.map +0 -1
  2637. package/.output/server/chunks/_/useResponsive-BKDMGTHs.mjs.map +0 -1
  2638. package/.output/server/chunks/_/useTeamActions-CmiuiQiG.mjs +0 -79
  2639. package/.output/server/chunks/_/useTeamActions-CmiuiQiG.mjs.map +0 -1
  2640. package/.output/server/chunks/_/useTeamAddMemberDialog-CMpzf0jO.mjs +0 -84
  2641. package/.output/server/chunks/_/useTeamAddMemberDialog-CMpzf0jO.mjs.map +0 -1
  2642. package/.output/server/chunks/_/useTeamCreateDialog-BnvjXWso.mjs +0 -97
  2643. package/.output/server/chunks/_/useTeamCreateDialog-BnvjXWso.mjs.map +0 -1
  2644. package/.output/server/chunks/_/useTeamDeployDialog-C0FOUYep.mjs +0 -80
  2645. package/.output/server/chunks/_/useTeamDeployDialog-C0FOUYep.mjs.map +0 -1
  2646. package/.output/server/chunks/_/useTeamDialogState-CFRUQxAf.mjs +0 -82
  2647. package/.output/server/chunks/_/useTeamDialogState-CFRUQxAf.mjs.map +0 -1
  2648. package/.output/server/chunks/_/useTeamPluginDialog-Do-07a47.mjs +0 -103
  2649. package/.output/server/chunks/_/useTeamPluginDialog-Do-07a47.mjs.map +0 -1
  2650. package/.output/server/chunks/_/useTeamsCatalog-ClG_gBI8.mjs +0 -123
  2651. package/.output/server/chunks/_/useTeamsCatalog-ClG_gBI8.mjs.map +0 -1
  2652. package/.output/server/chunks/_/useTokenClipboard-CwQpoFeP.mjs +0 -72
  2653. package/.output/server/chunks/_/useTokenClipboard-CwQpoFeP.mjs.map +0 -1
  2654. package/.output/server/chunks/_/useTokenCreate-C4g5eKd3.mjs +0 -115
  2655. package/.output/server/chunks/_/useTokenCreate-C4g5eKd3.mjs.map +0 -1
  2656. package/.output/server/chunks/_/useTokenRename-ClWrxpNk.mjs +0 -87
  2657. package/.output/server/chunks/_/useTokenRename-ClWrxpNk.mjs.map +0 -1
  2658. package/.output/server/chunks/_/useTokenReveal-C8n1Vt9t.mjs +0 -118
  2659. package/.output/server/chunks/_/useTokenReveal-C8n1Vt9t.mjs.map +0 -1
  2660. package/.output/server/chunks/_/useTokensList-CgiH2W1C.mjs +0 -92
  2661. package/.output/server/chunks/_/useTokensList-CgiH2W1C.mjs.map +0 -1
  2662. package/.output/server/chunks/_/useTownBus-D9SoIsAN.mjs.map +0 -1
  2663. package/.output/server/chunks/_/useWorkbenchAuth-DSstfK5Z.mjs +0 -141
  2664. package/.output/server/chunks/_/useWorkbenchAuth-DSstfK5Z.mjs.map +0 -1
  2665. package/.output/server/chunks/_/useWorkbenchWorkspaces-l_0SUOzn.mjs +0 -138
  2666. package/.output/server/chunks/_/useWorkbenchWorkspaces-l_0SUOzn.mjs.map +0 -1
  2667. package/.output/server/chunks/_/useWorkshopApi-Bqe2FlsB.mjs +0 -127
  2668. package/.output/server/chunks/_/useWorkshopApi-Bqe2FlsB.mjs.map +0 -1
  2669. package/.output/server/chunks/_/useWorkshopWs-DP4MbZsb.mjs +0 -1659
  2670. package/.output/server/chunks/_/useWorkshopWs-DP4MbZsb.mjs.map +0 -1
  2671. package/.output/server/chunks/_/useWorkspaceAuth-CzDigJGl.mjs +0 -60
  2672. package/.output/server/chunks/_/useWorkspaceAuth-CzDigJGl.mjs.map +0 -1
  2673. package/.output/server/chunks/_/useWorkspaceChannels-BLtsS6-m.mjs +0 -92
  2674. package/.output/server/chunks/_/useWorkspaceChannels-BLtsS6-m.mjs.map +0 -1
  2675. package/.output/server/chunks/_/useWorkspacePanels-CTwREmq0.mjs +0 -78
  2676. package/.output/server/chunks/_/useWorkspacePanels-CTwREmq0.mjs.map +0 -1
  2677. package/.output/server/chunks/_/useWorkspaceShell-rQHWNNWJ.mjs +0 -168
  2678. package/.output/server/chunks/_/useWorkspaceShell-rQHWNNWJ.mjs.map +0 -1
  2679. package/.output/server/chunks/_/users-BM1ZzxPp.mjs +0 -569
  2680. package/.output/server/chunks/_/users-BM1ZzxPp.mjs.map +0 -1
  2681. package/.output/server/chunks/_/workshop-CUXCV3RH.mjs +0 -546
  2682. package/.output/server/chunks/_/workshop-CUXCV3RH.mjs.map +0 -1
  2683. package/.output/server/chunks/_/workspaces-CmW0cpOt.mjs.map +0 -1
  2684. /package/.output/public/_nuxt/{6P4ZAzxa.js → 6P4ZAzxa2.js} +0 -0
  2685. /package/.output/public/_nuxt/{9j2J4k4w2.js → 9j2J4k4w.js} +0 -0
  2686. /package/.output/public/_nuxt/{BvRk9kiK2.js → DgrK8UCQ.js} +0 -0
  2687. /package/.output/public/_nuxt/{dVw8IHY6.js → dVw8IHY62.js} +0 -0
  2688. /package/.output/public/_nuxt/{k9b520K-2.js → k9b520K-.js} +0 -0
  2689. /package/.output/server/chunks/{_ → build}/builtin-catalog-edpDcgfL.mjs +0 -0
  2690. /package/.output/server/chunks/{_ → build}/chart-pipeline-BpoWYMK_.mjs +0 -0
  2691. /package/.output/server/chunks/{_ → build}/chart-trend-BWeZh5Lv.mjs +0 -0
  2692. /package/.output/server/chunks/{_ → build}/dcw-driver-badge-Df5wL_ZA.mjs +0 -0
  2693. /package/.output/server/chunks/{_ → build}/narrow-fetch-CcG-BPxc.mjs +0 -0
  2694. /package/.output/server/chunks/{_ → build}/useResponsive-BKDMGTHs.mjs +0 -0
  2695. /package/.output/server/chunks/{_ → build}/useTownBus-D9SoIsAN.mjs +0 -0
  2696. /package/.output/server/chunks/{_ → build}/workspaces-CmW0cpOt.mjs +0 -0
@@ -1,641 +1,641 @@
1
- # AgentWorkShop plugin development guide (full)
2
-
3
- > A plugin is a self-contained folder: an `index.mjs` entry (required), an optional
4
- > `client.mjs` (browser enhancement) and an optional `i18n.json` (message bundles).
5
- > One folder enhances both the **server** (routes / tools / DAQ / events) and the
6
- > **browser** (panel components / i18n / settings UI). Drop it in and it loads;
7
- > toggle it and the host hot-reloads. This page is the single authoritative reference;
8
- > the paged docs under `docs/site/plugins/` share the same source of truth.
9
- >
10
- > Applies to: plugin system v2 has been available since **v0.7.29** (frontend component
11
- > injection / plugin settings / plugin i18n / runtime services surface); this document
12
- > describes **v0.8.7**. `ctx.sdkVersion` is currently `0.3.0`.
13
-
14
- ## 1. Folder layout & quick start
15
-
16
- ```bash
17
- aw plugin create my-plugin # scaffolds into <repo>/.AgentWorkShop/plugins/my-plugin (project scope, default)
18
- aw plugin create my-plugin --global # or user scope ~/.AgentWorkShop/plugins/my-plugin (same as -g)
19
- aw plugin list # list all three scopes with enable state
20
- aw plugin disable my-plugin # disable (writes the state file; the server self-applies)
21
- aw plugin enable my-plugin # re-enable
22
- ```
23
-
24
- `aw plugin create` defaults to the **project** scope; `--global` / `-g` writes to the **user** scope; `--project` is the explicit spelling (equal to the default, kept for intuition); `--force` / `-f` overwrites an existing folder. Names are validated against `^[a-z][a-z0-9-]{1,31}$` (lowercase letter first, 2–32 chars). The command writes three files:
25
-
26
- ```
27
- <repo>/.AgentWorkShop/plugins/my-plugin/
28
- ├── index.mjs # server entry (required): export default { name, setup(ctx), … }
29
- ├── client.mjs # browser enhancement (optional, and must be declared as client:'./client.mjs')
30
- └── README.md
31
- ```
32
-
33
- The plugin folder may also contain `i18n.json` (message bundles, see §5). **Plugin KV does not live here** — it lives at `<configRoot>/data/plugins/<plugin>/kv.json` (see §6).
34
-
35
- ### Three scopes and precedence
36
-
37
- The host scans `builtin` → `project` → `user` and keeps the **first** match per name:
38
-
39
- | Scope | Entry path | Notes |
40
- |---|---|---|
41
- | `builtin` | `<packageRoot>/server/plugins-builtin/<name>/index.mjs` | shipped with the package, always present; the current release ships `diag-bridge`, `rag-bridge`, `serial-bridge` and `twin-injection-default` |
42
- | `project` | `<repo>/.AgentWorkShop/plugins/<name>/index.mjs` | travels with the checkout, can be versioned in git |
43
- | `user` | `$AW_HOME/plugins/<name>/index.mjs` (default `~/.AgentWorkShop/plugins`) | user-level, shared across projects |
44
-
45
- Precedence is **builtin > project > user** (the host scans first-wins and de-duplicates through a `seen` set). Mind the direction: the CLI command registry (`cli/core/registry.mjs`) is **last-wins**, i.e. project > user > builtin — the two are opposite and must not be inferred from each other. `aw plugin list` and `aw plugin enable|disable` use this same order, so a toggle always hits the plugin you see.
46
-
47
- ### Enable/disable state file
48
-
49
- Enable state lives in **`<home>/plugins-state.json`**, where `home = $AW_HOME || ~/.AgentWorkShop`. In a source checkout this is **not** the config root:
50
-
51
- - `configRoot = <repo>/.AgentWorkShop` — data and plugin KV live here;
52
- - `home = ~/.AgentWorkShop` — the enable state lives here.
53
-
54
- For a global (home-mode) install the two coincide, which is why older text calling it "the config root" looked harmless — but in a checkout it points at the wrong path. File shape:
55
-
56
- ```json
57
- { "version": 1, "updatedAt": "2026-09-03T00:00:00.000Z", "disabled": ["my-plugin"] }
58
- ```
59
-
60
- `aw plugin enable|disable`, the web plugin page and the host all read and write the same file.
61
-
62
- ## 2. Plugin contract (`index.mjs`)
63
-
64
- `index.mjs` exports a **plain object** (zero import dependencies — the host injects `ctx`):
65
-
66
- ```js
67
- export default {
68
- name: 'my-plugin', // required, globally unique (missing / non-string fails the load)
69
- version: '1.1.0', // optional, shown in the manifest
70
- description: '…', // optional
71
- auth: 'user', // optional: none (default) | user | admin | agent-or-user
72
- client: './client.mjs', // optional: browser entry (must be a relative path string)
73
- settings: [ /* optional: setting declarations, see §4 */ ],
74
- configGroups: [ /* optional: config group declarations, see §4 */ ],
75
- routes: [ // optional: declarative routes (registered after setup returns)
76
- { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
77
- ],
78
- async setup(ctx) { /* server lifecycle, see §3 */ },
79
- }
80
- ```
81
-
82
- The host shape-checks the module at load time (`validatePluginModule`): `name` must be a non-empty string; `setup`, if present, must be a function; `client`, if present, must be a string; `settings`, if present, must be an array. Any violation fails the load, is recorded in `failures` and logged — **error isolation never takes down the main service**.
83
-
84
- Registration order matters: **`await setup(ctx)` runs first, then `routes[]` are registered**. That way a throwing `setup` cannot leave a ghost route behind (a route that is live while the host has no record of the plugin).
85
-
86
- ## 3. Enable, disable and hot reload
87
-
88
- | Phase | Server | Browser |
89
- |---|---|---|
90
- | Load | nitro plugin `server/plugins/aw-plugins.ts` → three-scope scan → dynamic import (`?t=` busts the cache) → shape check → `setup(ctx)` → register `routes[]` | loader (`app/plugins/aw-plugins.client.ts`) fetches `GET /api/plugins/manifest` → fetches `GET /api/plugins/i18n` → dynamic-imports `/api/plugins/client/<name>` → `setup(ctx)` |
91
- | Inject | routes / tools / drivers / templates / processors take effect immediately; setting descriptors merge into `SystemConfigService` | panels inject into page slots through `ctx.ui.registerPanel`; `client:init` is emitted |
92
- | Run | `daq:sample` / `daq:frame` / `dcw:write` / `line:start\\|stop` / `config:changed` / `event:<type>` / `*` | `event:<type>` (same source as WS) / `page:change` / `i18n:changed` |
93
- | Reload | state-file change → full dispose (each `await`ed) → unbind hooks → drop routes → reload → emit `plugins:reloaded` | WS `plugins.reloaded` syncs instantly, plus a 15 s polling fallback → disabled plugins get `ctx.dispose()` |
94
- | Shutdown | per-plugin dispose queue (including a synchronous KV flush) → emit `server:close` | the page's `pagehide` triggers `ctx.dispose()` |
95
-
96
- Facts about hot reload:
97
-
98
- - **The trigger is the state file**: the host `fs.watch`es the directory holding `plugins-state.json`, with a **10 s mtime poll** as a fallback (Windows can drop events for atomic `rename` writes). `aw plugin enable|disable`, the web toggle, or simply touching the file all trigger a full reload **within about 1 s**.
99
- - **Code edits need no process restart**: the reload imports `entry + '?t=' + Date.now()`, which defeats the ESM module cache, so plugin code changes take effect on the next reload. The host has **no separate plugin-directory watcher** — after editing code, touch `plugins-state.json` (or toggle enable/disable once) to make it take effect immediately.
100
- - **Core code still needs a restart**: changes under `server/` and `shared/` are outside plugin hot reload.
101
- - **Race protection**: if the state file changes again while a reload is in flight (a disable→enable burst), the debounced callback hits the in-flight guard; when the load finishes the host compares the disabled-set snapshot and re-runs once if it drifted, so toggle events are never lost.
102
- - **Browser side**: a newly enabled plugin injects within 15 s at the latest (instantly when the WS channel is up); a disabled plugin is unloaded immediately together with all of its panels.
103
-
104
- ## 4. Plugin settings and config groups
105
-
106
- ### Declarative fields (manifest `settings[]`)
107
-
108
- ```js
109
- settings: [
110
- { key: 'base_url', type: 'string', default: 'http://127.0.0.1:8770',
111
- labelKey: 'plugin.my-plugin.settings.base_url', // i18n key (see §5)
112
- label: 'Service URL (fallback label)', description: 'applies live on save' },
113
- { key: 'max_turns', type: 'number', default: 0, min: 0, max: 2000, label: 'Max turns' },
114
- { key: 'auto_enabled', type: 'boolean', default: false, label: 'Automatic mode' },
115
- { key: 'mode', type: 'select', default: 'a', options: ['a', 'b'], label: 'Mode' },
116
- ],
117
- ```
118
-
119
- Hard constraints enforced by the validator (`validatePluginSettings`) — failing any one of them **skips that entry with a warning** while the rest still load:
120
-
121
- | Constraint | Rule |
122
- |---|---|
123
- | `key` | required and must match `/^[A-Za-z0-9_-]+$/` (letters, digits, `-`, `_` only) |
124
- | `type` | must be one of `'string' \| 'number' \| 'boolean' \| 'select'` |
125
- | `default` | **mandatory** — an entry without a default is skipped outright |
126
- | `select` | must supply an `options` array and `default` must be in it (compared as strings) |
127
- | `min` / `max` | honoured for `number` only (they are still written into the descriptor, but mean nothing for other types) |
128
- | `label` | falls back to `key`; `labelKey` wins when present (resolved through i18n) |
129
- | `description` | defaults to an empty string |
130
-
131
- Normalised descriptors always carry `applies: 'live'` (applies on save), and the key is force-namespaced to **`plugins.<plugin>.<key>`** — the same addressing space as global schema keys.
132
-
133
- ### Config groups (manifest `configGroups[]` + `settings[].group`)
134
-
135
- ```js
136
- configGroups: [
137
- { id: 'default', label: 'Connection', description: 'Backend URL and auth', order: 400 },
138
- { id: 'advanced', label: 'Advanced', collapsed: true },
139
- ],
140
- settings: [
141
- { key: 'base_url', type: 'string', default: 'http://127.0.0.1:8770', group: 'default', label: 'Service URL' },
142
- { key: 'timeout_ms', type: 'number', default: 8000, group: 'advanced', label: 'Timeout (ms)' },
143
- ],
144
- ```
145
-
146
- - Group ids are folded into the plugin's own namespace: `default` (or the plugin name) maps to `plugin-<plugin>`, any other declared id `x` maps to `plugin-<plugin>-x`. Two plugins may both declare `network` without overwriting each other.
147
- - `settings[].group` references the **declared id** (`default` / `advanced`), not the prefixed id.
148
- - Fields **without a `group`** land in the plugin's default group whose id is `plugin-<plugin>`; if the plugin never declared a title for that default id, the settings page shows the id itself (i.e. `plugin-<plugin>`). To get a readable title, declare `{ id: 'default', label: '…' }` as above — both shipped built-ins do exactly that.
149
- - Groups are removed automatically when the plugin is unloaded or disabled; no empty sections are left behind.
150
- - There is **no literal config group called "Plugins"**: what you see in Settings → Runtime is the plugin management list (enable switches + health check), a separate piece of UI from the plugin's own config groups.
151
-
152
- > `configGroups` is the field name the host actually reads (`host.mjs` reads `def.configGroups`). The type declaration file `sdk/index.d.mts` spells it `groups?`, which does not match the runtime — this guide and the code win.
153
-
154
- ### Runtime registration (extend conditionally inside `setup`)
155
-
156
- ```js
157
- async setup(ctx) {
158
- // Add a group and get back its real (namespaced) id
159
- const group = ctx.config.defineGroup({ id: 'rules', label: 'Automatic rules', collapsed: true })
160
- // Add a field (equivalent to manifest settings[], but registrable conditionally)
161
- ctx.config.defineField({
162
- key: 'auto_rules', type: 'string', default: '', group: 'rules', label: 'JSON rules',
163
- })
164
- ctx.logger.info(ctx.config.groups().map(g => g.id).join(','))
165
- ctx.logger.info(ctx.config.fields().map(f => f.key).join(','))
166
- // Removal (removeGroup takes the namespaced id returned by defineGroup; removeField takes the short key)
167
- if (group) ctx.config.removeGroup(group.id)
168
- ctx.config.removeField('auto_rules')
169
- }
170
- ```
171
-
172
- `defineGroup` / `defineField` enforce exactly the same validation as the declarative form (an invalid call returns `null` and logs a warning); `removeGroup` / `removeField` return a boolean telling whether anything was actually removed. These groups and fields are removed with the plugin, and re-registering never loses values that were already saved.
173
-
174
- ### Reading and persistence
175
-
176
- - Read with `ctx.config.get('plugins.my-plugin.base_url')` (every call reads the merged effective value, so a save applies live); `ctx.config.all()` returns a full snapshot.
177
- - Subscribe with `ctx.config.onChange(fn)`, which is sugar for `ctx.hooks.on('config:changed', fn)`.
178
- - Runtime overrides persist in `<configRoot>/runtime-settings.json`; `PATCH /api/system/settings` validates against the same descriptors and the settings page renders from them.
179
- - Migration: the `plugins.kb.*` / `plugins.diag.*` keys hard-coded in `shared/config/schema.json` before 0.7.28 were replaced by plugin declarations; on startup the server moves old overrides to the new keys in one pass (keeping the old key until the new one is registered, so data is never dropped).
180
-
181
- ## 5. Plugin i18n (`i18n.json`)
182
-
183
- ```json
184
- {
185
- "zh-CN": { "settings": { "base_url": "服务地址" }, "panel": { "title": "我的面板" } },
186
- "en": { "settings": { "base_url": "Service URL" }, "panel": { "title": "My panel" } }
187
- }
188
- ```
189
-
190
- - The host parses `i18n.json` at the plugin folder root during load (a broken file is ignored without blocking the load).
191
- - `GET /api/plugins/i18n` assembles the bundles of all **enabled** plugins (unauthenticated; UI copy only, **never secrets**) and returns `{ i18n: { "<plugin>": { "<locale>": { … } } }, locales: ["zh-CN", "en"] }`.
192
- - After fetching, the browser loader merges the messages into the vue-i18n namespace `plugin.<plugin>` — host components (settings `labelKey`, panel `titleKey`) resolve them directly — and `ctx.t(key)` resolves against the plugin's own message tree (`ctx.t('panel.title')` → `plugin.my-plugin.panel.title`, falling back to the key when missing).
193
- - On a locale switch the loader emits the `i18n:changed` hook; plugins receive it with `ctx.hooks.on('i18n:changed', fn)` (note: it is **not** on the `ctx.on` delivery surface).
194
- - The manifest exposes `hasI18n` / `settingsCount` / `hasClient` for the frontend.
195
-
196
- ## 6. Server `ctx` reference
197
-
198
- | Surface | Members | Notes |
199
- |---|---|---|
200
- | Identity | `ctx.name` / `ctx.scope` / `ctx.dir` / `ctx.sdkVersion` | `scope ∈ 'builtin' \| 'project' \| 'user'`; `dir` is the absolute plugin folder |
201
- | Hooks | `ctx.hooks.on / once / off / emit` | per-plugin facade; auto-unbound on hot reload, no manual `off` needed |
202
- | Logging | `ctx.logger.debug / info / warn / error` | prefixed with `[aw-plugins] [<plugin>]` |
203
- | Config | `ctx.config.get / all / onChange / defineGroup / defineField / removeGroup / removeField / groups / fields` | effective config (read-only) + change subscription + runtime group/field registration (see §4) |
204
- | Storage | `ctx.kv.get / set / all / bump` | plugin-private KV; **no `reset()`**; in-memory state is authoritative with a 200 ms debounced atomic flush |
205
- | Timers | `ctx.timer.setInterval / setTimeout` | auto-registered for disposal on shutdown and hot reload |
206
- | Cleanup | `ctx.onDispose(fn)` / `ctx.subscriptions.add(d)` | shares one host-owned dispose queue with `ctx.timer` |
207
- | Routes | `ctx.route(method, path, handler)` | mounted at `/api/plugins/<plugin><path>` (exact match); **returns a boolean** |
208
- | Platform | `ctx.api` | platform REST client (loopback origin; unwraps the envelope; call `ctx.api.setToken(token)` for authenticated endpoints) |
209
- | Network | `ctx.http.get(url, opt)` / `ctx.http.post(url, body, opt)` | outbound fetch; the guard is **protocol-only** (http/https), it does not restrict hosts; 8 s default timeout; `headers` pass through |
210
- | Events | `ctx.events.on(type, fn)` / `ctx.events.off(type, fn)` | scene-event sugar: subscribes to `event:<type>` internally (see §7) |
211
- | Paths | `ctx.paths.home / configRoot / dataDir`; `ctx.dataDir` | `ctx.dataDir` is this plugin's KV folder, `<configRoot>/data/plugins/<plugin>` |
212
- | DAQ | `ctx.daq.registerDriver / registerProcessor / registerTemplate / onFrame / onSample / query / nodes` | driver, sink-processor and node-template registration + time-series queries + node metadata snapshot |
213
- | Write control | `ctx.dcw.registerWriteDriver(driver)` | write-driver injection (symmetric to DAQ read drivers): contract `{ kind, available(), write(input), test(cfg), read?(input), meta? }`; disabled plugins lose their drivers on hot reload |
214
- | Tools | `ctx.omp.registerTool({ name, label?, description, parameters, roles?, handler })` | agent tool injection; `roles` accepts `'lead'` and `'worker'` only (see §10) |
215
- | Services | `ctx.services.names()` / `.get(name)` / `.provide(name, getter)` | runtime object surface: `get('daq' \| 'lines' \| 'channels' \| 'plugins')`; `provide` auto-prefixes `<plugin>.` |
216
- | Twin | `ctx.twin.registerPhysicsProvider / registerScenePack / registerObjectiveProfile / registerTrainingAdapter / registerSolverAdapter`; `listProviders / getProviderHealth / resolveProvider / validateProvider / retireProvider / isRegistryAvailable` | hybrid-twin **Provider Registry** bridge: register hot-swappable industrial physics cores / scene packs / solvers (next section) |
217
- | Permissions | `ctx.permissions.lineMode / visibleLineIds / listGrants / setGrants` | line-grant queries and management |
218
-
219
- ### Hybrid-twin provider plugins (`ctx.twin`)
220
-
221
- `ctx.twin` is the plugin surface of the **hybrid-twin Provider Registry**: register an industrial scene's
222
- physics core, scene pack and solvers. `twin_scene_read` / `twin_snapshot_create` / `twin_trial_run` /
223
- `mpc_optimize` resolve the provider through `SceneContract.physicsProfileId` (falling back to the bundled
224
- `twin-injection-default`), so **swapping scenes needs no tool or channel change**.
225
-
226
- | Registration surface | Payload | Notes |
227
- |---|---|---|
228
- | `registerPhysicsProvider(provider)` | `PhysicsProviderManifest` + `initialize` / `step` / `simulate` / `evaluateConstraints`, optional `validateScene` / `calibrate` / `designSafeExperiment` / `estimateUncertainty` / `exportArtifacts` / `health` | the physics core (grey-box / white-box / ROM); `apiVersion` must be `twin-provider.v1` |
229
- | `registerScenePack(pack)` | `{ sceneKind, sceneSchemaVersion, compile?, discover?, constraints?, objectives?, datasetSchema?, metadata? }` | scene pack: compiles field nodes + recipe into a `SceneContract` |
230
- | `registerObjectiveProfile(profile)` | objectives and weights | the MPC objective surface |
231
- | `registerTrainingAdapter(adapter)` / `registerSolverAdapter(adapter)` | training / solver adapters | external solvers (ONNX / ROM / third-party) |
232
- | `listProviders(filter?)` · `getProviderHealth(id, version?)` · `resolveProvider(id, version?)` · `validateProvider(id, version?)` · `retireProvider(id, version?)` · `isRegistryAvailable()` | — | query, health, resolve, validate and retire |
233
-
234
- **Manifest essentials**: `providerId` / `version` / `apiVersion` / `sceneKinds[]` / `backend`
235
- (`typescript` | `pytorch` | `python` | `onnx` | `rom` | `external-solver`) / the four variable tables
236
- (`stateVariables` / `controlVariables` / `disturbanceVariables` / `observationVariables?`) /
237
- `parameterPriors` / `capabilities` (`onlineStep` / `rollout` / `calibration` / `uncertainty` / `externalSolver` / `mpc`) /
238
- `artifactContract`.
239
-
240
- **Generational hot swap**: the lifecycle is `DISCOVERED → VALIDATED → REGISTERED → READY → DRAINING → RETIRED`
241
- (`FAILED` on rejection). A hot reload stages the new **generation** and drains the old one: trials and MPC hold a
242
- lease on the old generation, so **in-flight work is never invalidated**, and `retireProvider` only unloads after
243
- references reach zero.
244
-
245
- **Minimal example** (the bundled injection provider uses this very contract, see
246
- `server/plugins-builtin/twin-injection-default/index.mjs`):
247
-
248
- ```js
249
- export default {
250
- name: 'my-injection-provider',
251
- version: '1.0.0',
252
- auth: 'none',
253
- async setup(ctx) {
254
- const core = await ctx.services.get('twinCore')
255
- const provider = core.createInjectionProvider() // swap in your own physics core
256
- ctx.twin.registerPhysicsProvider(provider)
257
- ctx.twin.registerScenePack({
258
- sceneKind: 'injection',
259
- sceneSchemaVersion: '1.0.0',
260
- compile: () => core.defaultInjectionScene('my-injection-provider'),
261
- })
262
- ctx.logger.info(`registered ${provider.manifest.physicsModelId}@${provider.manifest.version}`)
263
- },
264
- }
265
- ```
266
-
267
- **Where it lives**: the same plugin scopes as any other plugin (see §1) —
268
- `~/.AgentWorkShop/plugins/<plugin>/` (user), `<repo>/.AgentWorkShop/plugins/<plugin>/` (project),
269
- `server/plugins-builtin/<plugin>/` (shipped with the package). Disabling or hot-reloading a plugin
270
- re-stages or drains its generation **without a server restart**.
271
-
272
- ### Communication-protocol plugins (custom interface connections)
273
-
274
- `ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` are the **protocol plug-in points**: serial
275
- links, other PLC protocols and private buses all inject here — the main pipelines (sampling loop /
276
- write gateway / frontend forms) need zero changes.
277
-
278
- ```js
279
- ctx.daq.registerDriver({
280
- kind: 'serial', // custom protocol kind (overriding a builtin logs a warning)
281
- async available() { return true }, // protocol-stack probe (missing package → UI shows "not installed")
282
- async sample({ driverConfig }) { return 25.3 }, // reading (scalar or v2 frame envelope)
283
- async test(driverConfig) { return { ok: true, message: 'connected', sampleValue: 25.3 } },
284
- meta: { // self-description (frontend "add node" dropdown + dynamic form)
285
- label: 'Serial (RS-232/485)',
286
- status: 'real',
287
- configFields: [{ key: 'path', label: 'Port path', type: 'string', required: true, placeholder: 'COM3' }],
288
- },
289
- })
290
- ```
291
-
292
- Key points:
293
- - The driver catalog is served via the `drivers` field of `GET /api/workshop/daq` (read) and
294
- `GET /api/workshop/dcw` (write); the DAQ/DCW pages render plugin protocols and their forms from it
295
- (with a ⌁ badge). Drivers registered without `meta` only appear in availability;
296
- - Hot reload clears all plugin drivers first, then re-loads: **disabled/unloaded protocol drivers
297
- take effect immediately upon removal** and never linger until restart;
298
- - Builtin example: `server/plugins-builtin/serial-bridge` (serial Modbus RTU + ASCII line protocol,
299
- with read/write drivers, `health`/`ports`/`probe` APIs, a frontend panel and the `serial_ports`
300
- agent tool) — use it as the template for new protocol plugins.
301
-
302
- ### Where KV lives
303
-
304
- `<configRoot>/data/plugins/<plugin>/kv.json` — **not** inside the plugin folder. Writes are authoritative in memory and flushed atomically (`tmp` + `rename`) after a 200 ms debounce; on shutdown and hot reload the pending debounce is cancelled and the state is flushed synchronously. `ctx.kv` has exactly four methods: `get / set / all / bump`.
305
-
306
- ```js
307
- ctx.kv.set('threshold', 180) // write (flushed after 200 ms)
308
- ctx.kv.get('threshold') // read (undefined if never written)
309
- ctx.kv.bump('alarms') // +1, returns the new value; bump('alarms', -1) decrements
310
- ctx.kv.all() // shallow copy of the whole store
311
- ```
312
-
313
- ## 7. Event reference (server)
314
-
315
- Events are dispatched through a HookBus: **listeners run serially, awaited, in registration order**, and every listener receives the **same unmodified payload object** — it is not a waterfall (only the last non-`undefined` return value is kept, and the host ignores it), and v1 has no veto or interception. A throwing listener is isolated and counted: a success resets the counter, and **8 consecutive failures remove the listener** (circuit breaker).
316
-
317
- ### Lifecycle and platform events
318
-
319
- | Event | When | Payload |
320
- |---|---|---|
321
- | `plugin:host:init` | after every plugin finished `setup` (once) | `{ plugins: string[], failures: number }` |
322
- | `plugins:reloaded` | at the end of a hot reload | `{ plugins: <manifest> }` |
323
- | `config:changed` | `runtime-settings.json` / settings page changed | `{ type, changed: string[], effective, sources }` — **there is no `at` field** |
324
- | `server:close` | on nitro close, after every per-plugin dispose ran | `{ at }` |
325
-
326
- ### Domain events
327
-
328
- | Event | When | Payload |
329
- |---|---|---|
330
- | `daq:sample` | the **publish-level** outlet after pipeline aggregation (same point and cadence as WS `daq.reading`, gated by `publishIntervalMs`) | `{ nodeId, templateRef, value, state, at, lineId }` |
331
- | `daq:frame` | after a multi-shape frame (vector/image) is recorded (metadata, metrics and preview only — no blobs) | `{ nodeId, templateRef, kind, at, lineId, preview?, metrics, thumbUrl?, state }` |
332
- | `dcw:write` | after a write-control ACK is booked (with 10 s same-value de-duplication) | `{ nodeId, name, eng, prevValue, ok, source, lineId, at }`; `source ∈ manual \| recipe \| agent \| rollback` |
333
- | `line:start` | batch window opens | `{ lineId, runId, recipeId, productName }` |
334
- | `line:stop` | batch window closes | `{ lineId, runId }` |
335
- | `event:<scene-type>` | any `broadcastSceneEvent(type, payload)`, exactly the same source as the browser WS feed | the event's own payload |
336
-
337
- ### Wildcards and scene events
338
-
339
- The server wildcard spelling is the **bare star `'*'`**, and the callback receives a `{ type, payload }` wrapper:
340
-
341
- ```js
342
- ctx.hooks.on('*', ({ type, payload }) => {
343
- ctx.logger.debug('event audit', type)
344
- void payload
345
- })
346
- ```
347
-
348
- `ctx.hooks.on('event:*', fn)` is **wrong** — it never fires. To subscribe to scene events by type, use `ctx.events`, which adds the `event:` prefix for you:
349
-
350
- ```js
351
- ctx.events.on('daq.node.changed', (p) => ctx.logger.debug('node changed', p?.op))
352
- ctx.events.on('daq.alarm.changed', (p) => ctx.logger.info('alarm state', p?.nodeId, p?.recovered))
353
- ```
354
-
355
- Common scene events: `daq.reading`, `daq.frame`, `daq.alarm`, `daq.alarm.changed`, `daq.node.changed`, `daq.controller`, `daq.template.changed`, `dcw.node.changed`, `device.created|updated|deleted`, `ops.log`, `permissions.changed`, `plugins.reloaded`, `aml.job|dataset|model`.
356
-
357
- ### Permission changes
358
-
359
- Permission changes reach the plugin bus as the scene event `permissions.changed` (its raw bus name is `event:permissions.changed`). `ctx.hooks.on('permissions:changed', …)` **never fires**; the correct form is:
360
-
361
- ```js
362
- ctx.events.on('permissions.changed', (p) => ctx.logger.info('grants changed', p?.userId))
363
- ```
364
-
365
- ### Config changes
366
-
367
- ```js
368
- ctx.hooks.on('config:changed', (p) => {
369
- ctx.logger.info('config changed', p.changed)
370
- ctx.logger.info('current theme colour', ctx.config.get('theme.primaryColor'))
371
- })
372
- // sugar: ctx.config.onChange(fn)
373
- ```
374
-
375
- ## 8. Browser `client.mjs` (`ctx` reference)
376
-
377
- The client entry must be **declared in the manifest** as `client: './client.mjs'` — merely having the file is not enough. The loader fetches the script from `/api/plugins/client/<plugin>` and calls `setup(ctx)` on the imported module.
378
-
379
- ```js
380
- export function setup(ctx) {
381
- let samples = 0
382
- const counter = ctx.el('strong', {}, ['0'])
383
-
384
- // scene event: pass the event name itself; the literal 'event:*' subscribes to all scene events
385
- ctx.on('daq.reading', () => { samples += 1; counter.textContent = String(samples) })
386
-
387
- // lifecycle hooks only come through ctx.hooks.on (they are not on the ctx.on surface)
388
- ctx.hooks.on('i18n:changed', ({ locale }) => ctx.log.info('locale switched:', locale))
389
-
390
- ctx.ui.registerPanel({
391
- slot: 'plugins.page', // slot name (see below)
392
- name: 'my-panel', // unique within the plugin
393
- titleKey: 'panel.title', // resolves plugin.my-plugin.panel.title (or use a static title)
394
- order: 10,
395
- mount(el) { // el = panel container (the slot renders the title)
396
- const box = ctx.el('div', {}, ['samples:', counter])
397
- el.append(box)
398
- const timer = setInterval(() => { counter.textContent = String(samples) }, 5000)
399
- return () => { clearInterval(timer); box.remove() } // cleanup: called when the panel unmounts
400
- },
401
- })
402
-
403
- ctx.log.info('client injected')
404
- }
405
- ```
406
-
407
- | Member | Notes |
408
- |---|---|
409
- | `ctx.name` / `ctx.sdkVersion` | plugin name / client SDK version |
410
- | `ctx.hooks` | a real HookBus: `client:init` / `page:change` / `i18n:changed` / `client:destroy` |
411
- | `ctx.on(type, fn)` | scene-event subscription (pass the event name; internally `event:<type>`); only the literal `'event:*'` is a wildcard; returns an unsubscribe function |
412
- | `ctx.fetch(path, opt)` | same-origin platform API helper (adds the cookie token, unwraps the `{code,data}` envelope, throws on non-2xx) |
413
- | `ctx.el(tag, attrs, children)` | DOM helper; `style` goes through `cssText`, `class` through `className`, `onXxx` through `addEventListener` |
414
- | `ctx.mount(target, node)` / `ctx.root()` | mount to a selector/element (falling back to `ctx.root()`) / the plugin's private mount point `#aw-plugin-<name>` |
415
- | `ctx.ui.registerPanel(entry)` / `ctx.ui.slots` | register a panel into a named slot, returns an unregister function; `slots` lists the known slot names |
416
- | `ctx.t(key, params?)` | plugin-namespaced translation (`plugin.<name>.<key>`) |
417
- | `ctx.locale` | current UI locale |
418
- | `ctx.log.info / warn / error` | console with an `[aw-plugin:<name>]` prefix |
419
- | `ctx.dispose()` | unload: emits `client:destroy` → collects subscriptions → removes `root()` (idempotent) |
420
-
421
- ### Wildcards and dead subscriptions (the common traps)
422
-
423
- | Spelling | Result |
424
- |---|---|
425
- | `ctx.on('daq.reading', fn)` | correct: subscribes to the scene event `daq.reading` |
426
- | `ctx.on('event:*', fn)` | correct: the only wildcard spelling, receives all scene events |
427
- | `ctx.on('*', fn)` | **dead subscription**: never fires |
428
- | `ctx.on('event:line.start', fn)` | **dead subscription**: it only subscribes to a scene event literally named `event:line.start`, which does not exist |
429
- | `ctx.on('daq:sample', fn)` | **dead subscription**: server hooks never cross to the browser |
430
- | `ctx.hooks.on('page:change', fn)` | correct: lifecycle hooks go through `ctx.hooks` |
431
- | `ctx.on('client:init', fn)` | **dead subscription**: lifecycle hooks are not on the `ctx.on` surface |
432
-
433
- Server hooks (`daq:sample`, `daq:frame`, `dcw:write`, `line:start|stop`) **never reach the browser**; the browser only receives scene events (through the TownBus/WS bridge). Conversely, `page:change` / `i18n:changed` exist on the browser side only.
434
-
435
- ### Panels and page slots
436
-
437
- A host page embeds `<workshop-plugin-slot slot-name="…" />` wherever it should accept injection; `ctx.ui.slots` currently holds:
438
-
439
- | Slot | Location |
440
- |---|---|
441
- | `plugins.page` | the plugin management page (the default drop point) |
442
- | `settings.plugins` | Settings → Runtime, below the plugin management area |
443
- | `dashboard.widgets` | the tail of the dashboard page |
444
-
445
- `registerPanel` returns an `unregisterPanel` function; a panel's `mount(el)` may return a cleanup function (called when the panel unmounts) and may throw — a single panel's failure is isolated by the slot and never affects the other panels or the page.
446
-
447
- ### Unload semantics
448
-
449
- - `ctx.dispose()` is triggered by the **`pagehide`** event (navigating away / entering bfcache; switching tabs does **not** trigger it). It emits `client:destroy`, collects the plugin's own subscriptions and removes `root()`.
450
- - `ctx.dispose()` does **not** unregister panels by itself — panel cleanup happens in the loader, which calls `unregisterPlugin(name)` on disable / hot reload.
451
- - Two hot channels back this up: the WS `plugins.reloaded` event (instant) plus a 15 s polling diff.
452
-
453
- ## 9. Routes and authentication
454
-
455
- `ctx.route(method, path, handler)` registers immediately and returns a **boolean**; `routes[]` in the manifest is registered only after `setup` returns. Both end up in the same route table:
456
-
457
- ```
458
- GET /api/plugins/<plugin>/health ← ctx.route('GET', '/health', handler)
459
- ← routes: [{ method: 'GET', path: '/health', handler }]
460
- ```
461
-
462
- - Matching is **exact**: paths are normalised with a leading `/`, and there are no wildcard segments or sub-route matching.
463
- - The handler receives the h3 `event`; the JSON body has already been pre-read by the platform forwarding layer and attached as **`event.awBody`** (plugins do not import h3).
464
- - The handler's return value is serialised to JSON by nitro; a throw becomes a 500 envelope (with plugin-attributed logging) and never leaks a raw stack.
465
- - **Authentication is enforced declaratively** by the `auth` field, checked **before** your handler, for `routes[]` and `ctx.route()` alike:
466
-
467
- | `auth` | Behaviour |
468
- |---|---|
469
- | `'none'` (default) | no check, the handler runs directly |
470
- | `'user'` | requires a valid user token, otherwise 401 |
471
- | `'admin'` | requires an administrator, otherwise 401 |
472
- | `'agent-or-user'` | accepts an agent identity or a user token |
473
-
474
- **Do not put authentication inside the handler**: `resolveUser(event)` is not importable from a plugin and is not on `ctx`. Declare `auth` instead.
475
-
476
- ```js
477
- ctx.route('GET', '/report', () => ({ plugin: ctx.name, at: new Date().toISOString() }))
478
-
479
- ctx.route('POST', '/threshold', (event) => {
480
- const v = Number(event.awBody?.threshold) // the host pre-read the JSON body
481
- if (!Number.isFinite(v)) return { ok: false, error: 'threshold must be a number' }
482
- ctx.kv.set('threshold', v)
483
- return { ok: true, threshold: v }
484
- })
485
- ```
486
-
487
- ## 10. Tools and team switches
488
-
489
- Tools registered with `ctx.omp.registerTool(def)` appear on every harness tool surface (omp receives them over RPC `set_host_tools`, other engines through the MCP bridge `tools/list`, pi through a tool file, mock through a direct REST invoke). A registry change is **re-pushed** to running sessions — no restart, no sub-process respawn.
490
-
491
- ```js
492
- ctx.omp.registerTool({
493
- name: 'sensor_log',
494
- label: 'Sensor calibration',
495
- description: 'Read or record sensor calibration conclusions',
496
- parameters: { type: 'object', properties: { sensor: { type: 'string' } }, required: ['sensor'] },
497
- roles: ['lead', 'worker'], // only these two literals; omitted = both roles
498
- handler: async (args, agent) => ({ text: `${agent.role}@${agent.channelId}: ${args.sensor}` }),
499
- })
500
- ```
501
-
502
- Never open a `url` / `host` injection hole in the parameter schema — plugin tool arguments come straight from the model, so any "let the model pick the target address" field becomes an SSRF surface.
503
-
504
- ### Team / channel scoped switches
505
-
506
- Beyond the global switch, every team (channel) keeps its own plugin switch set backed by the `channel_plugins` table:
507
-
508
- - **Picked at team creation**: `POST /api/workshop/teams` accepts `plugins: [{ name, enabled }]`, stored under the team id and propagated to the channel on deploy;
509
- - **Toggled at any time**: `GET|PUT /api/workshop/channels/:id/plugins` and `GET|PUT /api/workshop/teams/:id/plugins` (body `{ plugins: [{ name, enabled }] }`, full-replacement semantics, unknown or disabled plugin names are ignored);
510
- - **Semantics**: no explicit rows = unconfigured → every enabled plugin is visible to that team (backward compatible); once rows exist they filter — **a disabled plugin's tools are not injected into that team's agents and dispatch rejects them at the source**;
511
- - **UI**: the workshop teams page (creation checkboxes + team dialog).
512
-
513
- ### Tool registry and per-channel tool selection (2026-10-20)
514
-
515
- Plugin tools no longer live only in a process-local registry: startup, registration and unload project them into `tool_registry` (SQLite) with source, plugin name, scope, label, description, parameter schema, roles, definition hash and availability. Execution code stays in the plugin process; the database is only the catalog and governance source of truth.
516
-
517
- - **Global visibility**: admins open `/tools` (or `GET /api/workshop/tools`) to see built-in and plugin tools, parameter schemas and which channels disabled them; `POST /api/workshop/tools/sync` re-syncs manually.
518
- - **Per-channel selection**: `GET|PUT /api/workshop/channels/:id/tools`, `POST .../tools/reset`;
519
- - `mode='all'` (default): every eligible tool is enabled; only unchecked tools are stored (deny-list);
520
- - `mode='selected'`: only checked tools are enabled (allow-list); new tools stay disabled until selected;
521
- - hard rules (role / channel profile / write guard / plugin master switch) win; a channel cannot open a tool excluded by a hard rule, and explicitly selecting one in `selected` mode returns `409 TOOL_NOT_ELIGIBLE`.
522
- - **Same injection source**: omp `set_host_tools`, pi `AW_PI_TOOLS_FILE` and the MCP `tools/list` used by other harnesses all go through `hostToolsForRole`; the execution layer re-checks in `dispatchHostTool` / `invokeHostTool`, so a disabled tool cannot be called even if an engine cached an old list.
523
- - **UI**: the Channel settings dialog has a Tools section with search, source/state filters, select all/none/reset, and reason badges for hard-rule blocks.
524
-
525
- ### Install a local plugin
526
-
527
- ```bash
528
- aw plugin install <source-dir> [--global|-g] [--name <name>] [--force|-f] [--no-enable]
529
- ```
530
-
531
- Installation only accepts a **local directory** containing `index.mjs`: symlinks and out-of-scope paths are rejected and the target must be a project/user scope; `--force` backs up the old directory first. Installation rewrites `plugins-state.json` to trigger hot reload, and the plugin's tools automatically enter the tool catalog and MCP tool surface. No remote URL or marketplace download.
532
-
533
- ## 11. Complete example
534
-
535
- ```js
536
- // index.mjs — server entry (zero import dependencies; the host injects ctx)
537
- export default {
538
- name: 'my-plugin',
539
- version: '1.0.0',
540
- description: 'Example: over-threshold counting + own API + config groups + agent tool',
541
- auth: 'user',
542
- client: './client.mjs',
543
- configGroups: [
544
- { id: 'default', label: 'My plugin', description: 'Basic configuration', order: 500 },
545
- { id: 'advanced', label: 'Advanced', collapsed: true },
546
- ],
547
- settings: [
548
- { key: 'threshold', type: 'number', default: 180, min: 0, max: 5000, group: 'default',
549
- label: 'Alarm threshold', description: 'applies live on save' },
550
- { key: 'endpoint', type: 'string', default: 'http://127.0.0.1:8080', group: 'advanced',
551
- label: 'External service URL' },
552
- ],
553
- routes: [
554
- { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
555
- ],
556
-
557
- async setup(ctx) {
558
- ctx.logger.info(`loaded (scope=${ctx.scope}, sdk=${ctx.sdkVersion})`)
559
-
560
- const threshold = () => Number(ctx.config.get('plugins.my-plugin.threshold')) || 180
561
-
562
- // 1) publish-level DAQ samples: count over-threshold hits in plugin-private KV
563
- ctx.hooks.on('daq:sample', (s) => {
564
- if (typeof s?.value === 'number' && s.value > threshold())
565
- ctx.kv.bump(`alarm:${s.nodeId}`)
566
- })
567
-
568
- // 2) scene events (ctx.events adds the event: prefix for you)
569
- ctx.events.on('daq.alarm', (a) => ctx.logger.warn('alarm', a?.nodeId))
570
- ctx.events.on('permissions.changed', (p) => ctx.logger.info('grants changed', p?.userId))
571
-
572
- // 3) full event audit: the server wildcard is the bare '*', callback gets { type, payload }
573
- ctx.hooks.on('*', ({ type }) => ctx.logger.debug('event', type))
574
-
575
- // 4) routes[] are registered after setup; ctx.route registers now (returns a boolean)
576
- ctx.route('POST', '/threshold', (event) => {
577
- const v = Number(event.awBody?.threshold)
578
- if (!Number.isFinite(v)) return { ok: false, error: 'threshold must be a number' }
579
- ctx.kv.set('threshold', v)
580
- return { ok: true, threshold: v }
581
- })
582
-
583
- // 5) timers + cleanup: one host-owned dispose queue, run on shutdown and hot reload
584
- ctx.timer.setInterval(() => ctx.kv.set('heartbeat', new Date().toISOString()), 5000)
585
- ctx.onDispose(() => ctx.logger.info('plugin cleaned up'))
586
-
587
- // 6) agent tool (roles accepts 'lead' | 'worker' only)
588
- ctx.omp.registerTool({
589
- name: 'my_alarm_report',
590
- description: 'Read the over-threshold alarm counter recorded by this plugin',
591
- parameters: { type: 'object', properties: { nodeId: { type: 'string' } }, required: ['nodeId'] },
592
- roles: ['lead', 'worker'],
593
- handler: async (args, agent) => ({
594
- text: `${args.nodeId} alarmed ${ctx.kv.get(`alarm:${args.nodeId}`) ?? 0} times (by ${agent.role})`,
595
- }),
596
- })
597
- },
598
- }
599
- ```
600
-
601
- `client.mjs` is in §8 and `i18n.json` in §5. Which scope to install into and how to toggle are in §1.
602
-
603
- ## 12. Troubleshooting
604
-
605
- | Symptom | Cause / fix |
606
- |---|---|
607
- | Plugin code edits have no effect | the host has no plugin-directory watcher: touch `<home>/plugins-state.json`, or toggle `aw plugin enable/disable` once, to trigger a reload (the reload imports with `?t=` to defeat the cache); core `server/` and `shared/` changes still need a process restart |
608
- | Recreated a same-named plugin but routes 404 | a name previously disabled keeps its flag in `<home>/plugins-state.json`; recreating the directory does not reload it — run `aw plugin enable <name>` explicitly after recreating (verified in practice) |
609
- | Load failures are invisible | `aw plugin list` does **not** show them. Use `GET /api/workshop/plugins` (returns `{ plugins, failures, initedAt }`, **no `{code,data}` envelope**) or read `[aw-plugins] 装载失败 …` in the startup log |
610
- | Plugin route 404 | matching is exact; check the method and the leading `/` of the path, and whether the plugin is enabled (a disabled plugin's routes are dropped from the table) |
611
- | Plugin route 401 | the entry declared `auth: 'user' \| 'admin' \| 'agent-or-user'` and the request carried no valid credential; use `auth: 'none'` only for open endpoints |
612
- | Client panel never appears | check the browser console for `[aw-plugins]` warnings; confirm the manifest says `hasClient: true` (i.e. the manifest declares `client:'./client.mjs'`) and the plugin is `enabled !== false` |
613
- | A client subscription never fires | check you did not fall into the §8 traps (`ctx.on('*')`, `ctx.on('event:line.start')`, `ctx.on('daq:sample')`, or handing a lifecycle hook to `ctx.on`) |
614
- | A setting does not render | a declaration without `default` is skipped with a warning; a `select`'s `default` must be inside `options`; `key` allows letters, digits, `-` and `_` only |
615
- | A changed setting has no effect | read it as `ctx.config.get('plugins.<plugin>.<key>')` (the short key reads nothing) |
616
- | The `permissions:changed` hook never fires | that name does not exist; use `ctx.events.on('permissions.changed', fn)` |
617
- | KV data "disappeared" | KV is at `<configRoot>/data/plugins/<plugin>/kv.json`, not in the plugin folder; writes flush after a 200 ms debounce, so a hard kill has a tiny loss window |
618
- | `ctx.api` returns 401 | authenticated endpoints need `ctx.api.setToken(token)`; unauthenticated ones (manifest / ping) do not |
619
-
620
- **Trust model**: a plugin is arbitrary node code, on par with aw commands — only install and enable plugins you trust.
621
-
622
- ### Known boundaries (intentional, not defects)
623
-
624
- - **Hooks are observational**: v1 has no veto / interception / rewriting — write-control interlock integrity comes first.
625
- - **The `ctx.http` guard is protocol-only** (http/https) and does **not** restrict hosts; do your own allow-listing inside the plugin (the built-in `diag-bridge` / `rag-bridge` do exactly that).
626
- - **`ctx.t(key, params)` currently ignores `params`** (no interpolation); build strings yourself inside the plugin.
627
- - **`ctx.kv` has no `reset()`** — only `get / set / all / bump`.
628
- - **Server and browser subscription surfaces do not overlap**: server hooks never cross the bridge, and browser events never reach the server.
629
- - **A newly enabled browser plugin injects within 15 s** (instantly when the WS channel is up).
630
- - **`server:close` / `onDispose` depend on graceful shutdown signals**; a forced kill on Windows does not trigger them.
631
- - **`aw plugin list` only scans directories** — it reflects neither load failures nor runtime health.
632
- - **Protocol plugins share the host process with their native stacks**: serial-bridge's RTU framing is a self-contained implementation (single serialport native stack; modbus-serial is deliberately NOT used — its wrapper reproducibly crashed under dev mode). Known boundary: **inside the `aw dev` process, a serial transaction that ends in write → timeout → close can trigger a native V8 crash in `bindings-cpp`** (HandleScope fatal — not catchable in JS, regardless of which port is used); **production mode (`aw start`) is unaffected — the exact same sequence was verified live to return an honest timeout with the server healthy**, and open-only probes are also fine under dev. Connect real hardware during development with this in mind; for hardened deployments, run the serial gateway in its own process (see the plc-node-simulator child-process pattern).
633
-
634
- ## 13. Pre-release checklist
635
-
636
- 1. `aw plugin list` shows the plugin in all applicable scopes; a client plugin shows `+client`; toggling enable/disable makes routes, tools and panels appear and disappear together (a rapid toggle burst must not lose events).
637
- 2. `GET /api/workshop/plugins` reports an empty `failures`; `GET /api/plugins/manifest` reports `settingsCount` / `hasClient` / `hasI18n` matching the declaration.
638
- 3. The settings page shows the plugin's config group (fields without a declared group land in the `plugin-<plugin>` group); after a save, `ctx.config.get('plugins.<plugin>.<key>')` returns the new value immediately.
639
- 4. Locale switching updates panel titles and copy; the `i18n:changed` cleanup leaves no leaks.
640
- 5. The tool is visible through `GET /api/workshop/agent-tools/list`; its parameters expose no `url` / `host` injection hole; after the team switch is turned off the tool disappears and dispatch is rejected.
641
- 6. Trigger one hot reload (toggle enable/disable) and confirm `plugins:reloaded` reaches the plugin with no KV or timer leak.
1
+ # AgentWorkShop plugin development guide (full)
2
+
3
+ > A plugin is a self-contained folder: an `index.mjs` entry (required), an optional
4
+ > `client.mjs` (browser enhancement) and an optional `i18n.json` (message bundles).
5
+ > One folder enhances both the **server** (routes / tools / DAQ / events) and the
6
+ > **browser** (panel components / i18n / settings UI). Drop it in and it loads;
7
+ > toggle it and the host hot-reloads. This page is the single authoritative reference;
8
+ > the paged docs under `docs/site/plugins/` share the same source of truth.
9
+ >
10
+ > Applies to: plugin system v2 has been available since **v0.7.29** (frontend component
11
+ > injection / plugin settings / plugin i18n / runtime services surface); this document
12
+ > describes **v0.9.0**. `ctx.sdkVersion` is currently `0.3.0`.
13
+
14
+ ## 1. Folder layout & quick start
15
+
16
+ ```bash
17
+ aw plugin create my-plugin # scaffolds into <repo>/.AgentWorkShop/plugins/my-plugin (project scope, default)
18
+ aw plugin create my-plugin --global # or user scope ~/.AgentWorkShop/plugins/my-plugin (same as -g)
19
+ aw plugin list # list all three scopes with enable state
20
+ aw plugin disable my-plugin # disable (writes the state file; the server self-applies)
21
+ aw plugin enable my-plugin # re-enable
22
+ ```
23
+
24
+ `aw plugin create` defaults to the **project** scope; `--global` / `-g` writes to the **user** scope; `--project` is the explicit spelling (equal to the default, kept for intuition); `--force` / `-f` overwrites an existing folder. Names are validated against `^[a-z][a-z0-9-]{1,31}$` (lowercase letter first, 2–32 chars). The command writes three files:
25
+
26
+ ```
27
+ <repo>/.AgentWorkShop/plugins/my-plugin/
28
+ ├── index.mjs # server entry (required): export default { name, setup(ctx), … }
29
+ ├── client.mjs # browser enhancement (optional, and must be declared as client:'./client.mjs')
30
+ └── README.md
31
+ ```
32
+
33
+ The plugin folder may also contain `i18n.json` (message bundles, see §5). **Plugin KV does not live here** — it lives at `<configRoot>/data/plugins/<plugin>/kv.json` (see §6).
34
+
35
+ ### Three scopes and precedence
36
+
37
+ The host scans `builtin` → `project` → `user` and keeps the **first** match per name:
38
+
39
+ | Scope | Entry path | Notes |
40
+ |---|---|---|
41
+ | `builtin` | `<packageRoot>/server/plugins-builtin/<name>/index.mjs` | shipped with the package, always present; the current release ships `diag-bridge`, `rag-bridge`, `serial-bridge` and `twin-injection-default` |
42
+ | `project` | `<repo>/.AgentWorkShop/plugins/<name>/index.mjs` | travels with the checkout, can be versioned in git |
43
+ | `user` | `$AW_HOME/plugins/<name>/index.mjs` (default `~/.AgentWorkShop/plugins`) | user-level, shared across projects |
44
+
45
+ Precedence is **builtin > project > user** (the host scans first-wins and de-duplicates through a `seen` set). Mind the direction: the CLI command registry (`cli/core/registry.mjs`) is **last-wins**, i.e. project > user > builtin — the two are opposite and must not be inferred from each other. `aw plugin list` and `aw plugin enable|disable` use this same order, so a toggle always hits the plugin you see.
46
+
47
+ ### Enable/disable state file
48
+
49
+ Enable state lives in **`<home>/plugins-state.json`**, where `home = $AW_HOME || ~/.AgentWorkShop`. In a source checkout this is **not** the config root:
50
+
51
+ - `configRoot = <repo>/.AgentWorkShop` — data and plugin KV live here;
52
+ - `home = ~/.AgentWorkShop` — the enable state lives here.
53
+
54
+ For a global (home-mode) install the two coincide, which is why older text calling it "the config root" looked harmless — but in a checkout it points at the wrong path. File shape:
55
+
56
+ ```json
57
+ { "version": 1, "updatedAt": "2026-09-03T00:00:00.000Z", "disabled": ["my-plugin"] }
58
+ ```
59
+
60
+ `aw plugin enable|disable`, the web plugin page and the host all read and write the same file.
61
+
62
+ ## 2. Plugin contract (`index.mjs`)
63
+
64
+ `index.mjs` exports a **plain object** (zero import dependencies — the host injects `ctx`):
65
+
66
+ ```js
67
+ export default {
68
+ name: 'my-plugin', // required, globally unique (missing / non-string fails the load)
69
+ version: '1.1.0', // optional, shown in the manifest
70
+ description: '…', // optional
71
+ auth: 'user', // optional: none (default) | user | admin | agent-or-user
72
+ client: './client.mjs', // optional: browser entry (must be a relative path string)
73
+ settings: [ /* optional: setting declarations, see §4 */ ],
74
+ configGroups: [ /* optional: config group declarations, see §4 */ ],
75
+ routes: [ // optional: declarative routes (registered after setup returns)
76
+ { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
77
+ ],
78
+ async setup(ctx) { /* server lifecycle, see §3 */ },
79
+ }
80
+ ```
81
+
82
+ The host shape-checks the module at load time (`validatePluginModule`): `name` must be a non-empty string; `setup`, if present, must be a function; `client`, if present, must be a string; `settings`, if present, must be an array. Any violation fails the load, is recorded in `failures` and logged — **error isolation never takes down the main service**.
83
+
84
+ Registration order matters: **`await setup(ctx)` runs first, then `routes[]` are registered**. That way a throwing `setup` cannot leave a ghost route behind (a route that is live while the host has no record of the plugin).
85
+
86
+ ## 3. Enable, disable and hot reload
87
+
88
+ | Phase | Server | Browser |
89
+ |---|---|---|
90
+ | Load | nitro plugin `server/plugins/aw-plugins.ts` → three-scope scan → dynamic import (`?t=` busts the cache) → shape check → `setup(ctx)` → register `routes[]` | loader (`app/plugins/aw-plugins.client.ts`) fetches `GET /api/plugins/manifest` → fetches `GET /api/plugins/i18n` → dynamic-imports `/api/plugins/client/<name>` → `setup(ctx)` |
91
+ | Inject | routes / tools / drivers / templates / processors take effect immediately; setting descriptors merge into `SystemConfigService` | panels inject into page slots through `ctx.ui.registerPanel`; `client:init` is emitted |
92
+ | Run | `daq:sample` / `daq:frame` / `dcw:write` / `line:start\\|stop` / `config:changed` / `event:<type>` / `*` | `event:<type>` (same source as WS) / `page:change` / `i18n:changed` |
93
+ | Reload | state-file change → full dispose (each `await`ed) → unbind hooks → drop routes → reload → emit `plugins:reloaded` | WS `plugins.reloaded` syncs instantly, plus a 15 s polling fallback → disabled plugins get `ctx.dispose()` |
94
+ | Shutdown | per-plugin dispose queue (including a synchronous KV flush) → emit `server:close` | the page's `pagehide` triggers `ctx.dispose()` |
95
+
96
+ Facts about hot reload:
97
+
98
+ - **The trigger is the state file**: the host `fs.watch`es the directory holding `plugins-state.json`, with a **10 s mtime poll** as a fallback (Windows can drop events for atomic `rename` writes). `aw plugin enable|disable`, the web toggle, or simply touching the file all trigger a full reload **within about 1 s**.
99
+ - **Code edits need no process restart**: the reload imports `entry + '?t=' + Date.now()`, which defeats the ESM module cache, so plugin code changes take effect on the next reload. The host has **no separate plugin-directory watcher** — after editing code, touch `plugins-state.json` (or toggle enable/disable once) to make it take effect immediately.
100
+ - **Core code still needs a restart**: changes under `server/` and `shared/` are outside plugin hot reload.
101
+ - **Race protection**: if the state file changes again while a reload is in flight (a disable→enable burst), the debounced callback hits the in-flight guard; when the load finishes the host compares the disabled-set snapshot and re-runs once if it drifted, so toggle events are never lost.
102
+ - **Browser side**: a newly enabled plugin injects within 15 s at the latest (instantly when the WS channel is up); a disabled plugin is unloaded immediately together with all of its panels.
103
+
104
+ ## 4. Plugin settings and config groups
105
+
106
+ ### Declarative fields (manifest `settings[]`)
107
+
108
+ ```js
109
+ settings: [
110
+ { key: 'base_url', type: 'string', default: 'http://127.0.0.1:8770',
111
+ labelKey: 'plugin.my-plugin.settings.base_url', // i18n key (see §5)
112
+ label: 'Service URL (fallback label)', description: 'applies live on save' },
113
+ { key: 'max_turns', type: 'number', default: 0, min: 0, max: 2000, label: 'Max turns' },
114
+ { key: 'auto_enabled', type: 'boolean', default: false, label: 'Automatic mode' },
115
+ { key: 'mode', type: 'select', default: 'a', options: ['a', 'b'], label: 'Mode' },
116
+ ],
117
+ ```
118
+
119
+ Hard constraints enforced by the validator (`validatePluginSettings`) — failing any one of them **skips that entry with a warning** while the rest still load:
120
+
121
+ | Constraint | Rule |
122
+ |---|---|
123
+ | `key` | required and must match `/^[A-Za-z0-9_-]+$/` (letters, digits, `-`, `_` only) |
124
+ | `type` | must be one of `'string' \| 'number' \| 'boolean' \| 'select'` |
125
+ | `default` | **mandatory** — an entry without a default is skipped outright |
126
+ | `select` | must supply an `options` array and `default` must be in it (compared as strings) |
127
+ | `min` / `max` | honoured for `number` only (they are still written into the descriptor, but mean nothing for other types) |
128
+ | `label` | falls back to `key`; `labelKey` wins when present (resolved through i18n) |
129
+ | `description` | defaults to an empty string |
130
+
131
+ Normalised descriptors always carry `applies: 'live'` (applies on save), and the key is force-namespaced to **`plugins.<plugin>.<key>`** — the same addressing space as global schema keys.
132
+
133
+ ### Config groups (manifest `configGroups[]` + `settings[].group`)
134
+
135
+ ```js
136
+ configGroups: [
137
+ { id: 'default', label: 'Connection', description: 'Backend URL and auth', order: 400 },
138
+ { id: 'advanced', label: 'Advanced', collapsed: true },
139
+ ],
140
+ settings: [
141
+ { key: 'base_url', type: 'string', default: 'http://127.0.0.1:8770', group: 'default', label: 'Service URL' },
142
+ { key: 'timeout_ms', type: 'number', default: 8000, group: 'advanced', label: 'Timeout (ms)' },
143
+ ],
144
+ ```
145
+
146
+ - Group ids are folded into the plugin's own namespace: `default` (or the plugin name) maps to `plugin-<plugin>`, any other declared id `x` maps to `plugin-<plugin>-x`. Two plugins may both declare `network` without overwriting each other.
147
+ - `settings[].group` references the **declared id** (`default` / `advanced`), not the prefixed id.
148
+ - Fields **without a `group`** land in the plugin's default group whose id is `plugin-<plugin>`; if the plugin never declared a title for that default id, the settings page shows the id itself (i.e. `plugin-<plugin>`). To get a readable title, declare `{ id: 'default', label: '…' }` as above — both shipped built-ins do exactly that.
149
+ - Groups are removed automatically when the plugin is unloaded or disabled; no empty sections are left behind.
150
+ - There is **no literal config group called "Plugins"**: what you see in Settings → Runtime is the plugin management list (enable switches + health check), a separate piece of UI from the plugin's own config groups.
151
+
152
+ > `configGroups` is the field name the host actually reads (`host.mjs` reads `def.configGroups`). The type declaration file `sdk/index.d.mts` spells it `groups?`, which does not match the runtime — this guide and the code win.
153
+
154
+ ### Runtime registration (extend conditionally inside `setup`)
155
+
156
+ ```js
157
+ async setup(ctx) {
158
+ // Add a group and get back its real (namespaced) id
159
+ const group = ctx.config.defineGroup({ id: 'rules', label: 'Automatic rules', collapsed: true })
160
+ // Add a field (equivalent to manifest settings[], but registrable conditionally)
161
+ ctx.config.defineField({
162
+ key: 'auto_rules', type: 'string', default: '', group: 'rules', label: 'JSON rules',
163
+ })
164
+ ctx.logger.info(ctx.config.groups().map(g => g.id).join(','))
165
+ ctx.logger.info(ctx.config.fields().map(f => f.key).join(','))
166
+ // Removal (removeGroup takes the namespaced id returned by defineGroup; removeField takes the short key)
167
+ if (group) ctx.config.removeGroup(group.id)
168
+ ctx.config.removeField('auto_rules')
169
+ }
170
+ ```
171
+
172
+ `defineGroup` / `defineField` enforce exactly the same validation as the declarative form (an invalid call returns `null` and logs a warning); `removeGroup` / `removeField` return a boolean telling whether anything was actually removed. These groups and fields are removed with the plugin, and re-registering never loses values that were already saved.
173
+
174
+ ### Reading and persistence
175
+
176
+ - Read with `ctx.config.get('plugins.my-plugin.base_url')` (every call reads the merged effective value, so a save applies live); `ctx.config.all()` returns a full snapshot.
177
+ - Subscribe with `ctx.config.onChange(fn)`, which is sugar for `ctx.hooks.on('config:changed', fn)`.
178
+ - Runtime overrides persist in `<configRoot>/runtime-settings.json`; `PATCH /api/system/settings` validates against the same descriptors and the settings page renders from them.
179
+ - Migration: the `plugins.kb.*` / `plugins.diag.*` keys hard-coded in `shared/config/schema.json` before 0.7.28 were replaced by plugin declarations; on startup the server moves old overrides to the new keys in one pass (keeping the old key until the new one is registered, so data is never dropped).
180
+
181
+ ## 5. Plugin i18n (`i18n.json`)
182
+
183
+ ```json
184
+ {
185
+ "zh-CN": { "settings": { "base_url": "服务地址" }, "panel": { "title": "我的面板" } },
186
+ "en": { "settings": { "base_url": "Service URL" }, "panel": { "title": "My panel" } }
187
+ }
188
+ ```
189
+
190
+ - The host parses `i18n.json` at the plugin folder root during load (a broken file is ignored without blocking the load).
191
+ - `GET /api/plugins/i18n` assembles the bundles of all **enabled** plugins (unauthenticated; UI copy only, **never secrets**) and returns `{ i18n: { "<plugin>": { "<locale>": { … } } }, locales: ["zh-CN", "en"] }`.
192
+ - After fetching, the browser loader merges the messages into the vue-i18n namespace `plugin.<plugin>` — host components (settings `labelKey`, panel `titleKey`) resolve them directly — and `ctx.t(key)` resolves against the plugin's own message tree (`ctx.t('panel.title')` → `plugin.my-plugin.panel.title`, falling back to the key when missing).
193
+ - On a locale switch the loader emits the `i18n:changed` hook; plugins receive it with `ctx.hooks.on('i18n:changed', fn)` (note: it is **not** on the `ctx.on` delivery surface).
194
+ - The manifest exposes `hasI18n` / `settingsCount` / `hasClient` for the frontend.
195
+
196
+ ## 6. Server `ctx` reference
197
+
198
+ | Surface | Members | Notes |
199
+ |---|---|---|
200
+ | Identity | `ctx.name` / `ctx.scope` / `ctx.dir` / `ctx.sdkVersion` | `scope ∈ 'builtin' \| 'project' \| 'user'`; `dir` is the absolute plugin folder |
201
+ | Hooks | `ctx.hooks.on / once / off / emit` | per-plugin facade; auto-unbound on hot reload, no manual `off` needed |
202
+ | Logging | `ctx.logger.debug / info / warn / error` | prefixed with `[aw-plugins] [<plugin>]` |
203
+ | Config | `ctx.config.get / all / onChange / defineGroup / defineField / removeGroup / removeField / groups / fields` | effective config (read-only) + change subscription + runtime group/field registration (see §4) |
204
+ | Storage | `ctx.kv.get / set / all / bump` | plugin-private KV; **no `reset()`**; in-memory state is authoritative with a 200 ms debounced atomic flush |
205
+ | Timers | `ctx.timer.setInterval / setTimeout` | auto-registered for disposal on shutdown and hot reload |
206
+ | Cleanup | `ctx.onDispose(fn)` / `ctx.subscriptions.add(d)` | shares one host-owned dispose queue with `ctx.timer` |
207
+ | Routes | `ctx.route(method, path, handler)` | mounted at `/api/plugins/<plugin><path>` (exact match); **returns a boolean** |
208
+ | Platform | `ctx.api` | platform REST client (loopback origin; unwraps the envelope; call `ctx.api.setToken(token)` for authenticated endpoints) |
209
+ | Network | `ctx.http.get(url, opt)` / `ctx.http.post(url, body, opt)` | outbound fetch; the guard is **protocol-only** (http/https), it does not restrict hosts; 8 s default timeout; `headers` pass through |
210
+ | Events | `ctx.events.on(type, fn)` / `ctx.events.off(type, fn)` | scene-event sugar: subscribes to `event:<type>` internally (see §7) |
211
+ | Paths | `ctx.paths.home / configRoot / dataDir`; `ctx.dataDir` | `ctx.dataDir` is this plugin's KV folder, `<configRoot>/data/plugins/<plugin>` |
212
+ | DAQ | `ctx.daq.registerDriver / registerProcessor / registerTemplate / onFrame / onSample / query / nodes` | driver, sink-processor and node-template registration + time-series queries + node metadata snapshot |
213
+ | Write control | `ctx.dcw.registerWriteDriver(driver)` | write-driver injection (symmetric to DAQ read drivers): contract `{ kind, available(), write(input), test(cfg), read?(input), meta? }`; disabled plugins lose their drivers on hot reload |
214
+ | Tools | `ctx.omp.registerTool({ name, label?, description, parameters, roles?, handler })` | agent tool injection; `roles` accepts `'lead'` and `'worker'` only (see §10) |
215
+ | Services | `ctx.services.names()` / `.get(name)` / `.provide(name, getter)` | runtime object surface: `get('daq' \| 'lines' \| 'channels' \| 'plugins')`; `provide` auto-prefixes `<plugin>.` |
216
+ | Twin | `ctx.twin.registerPhysicsProvider / registerScenePack / registerObjectiveProfile / registerTrainingAdapter / registerSolverAdapter`; `listProviders / getProviderHealth / resolveProvider / validateProvider / retireProvider / isRegistryAvailable` | hybrid-twin **Provider Registry** bridge: register hot-swappable industrial physics cores / scene packs / solvers (next section) |
217
+ | Permissions | `ctx.permissions.lineMode / visibleLineIds / listGrants / setGrants` | line-grant queries and management |
218
+
219
+ ### Hybrid-twin provider plugins (`ctx.twin`)
220
+
221
+ `ctx.twin` is the plugin surface of the **hybrid-twin Provider Registry**: register an industrial scene's
222
+ physics core, scene pack and solvers. `twin_scene_read` / `twin_snapshot_create` / `twin_trial_run` /
223
+ `mpc_optimize` resolve the provider through `SceneContract.physicsProfileId` (falling back to the bundled
224
+ `twin-injection-default`), so **swapping scenes needs no tool or channel change**.
225
+
226
+ | Registration surface | Payload | Notes |
227
+ |---|---|---|
228
+ | `registerPhysicsProvider(provider)` | `PhysicsProviderManifest` + `initialize` / `step` / `simulate` / `evaluateConstraints`, optional `validateScene` / `calibrate` / `designSafeExperiment` / `estimateUncertainty` / `exportArtifacts` / `health` | the physics core (grey-box / white-box / ROM); `apiVersion` must be `twin-provider.v1` |
229
+ | `registerScenePack(pack)` | `{ sceneKind, sceneSchemaVersion, compile?, discover?, constraints?, objectives?, datasetSchema?, metadata? }` | scene pack: compiles field nodes + recipe into a `SceneContract` |
230
+ | `registerObjectiveProfile(profile)` | objectives and weights | the MPC objective surface |
231
+ | `registerTrainingAdapter(adapter)` / `registerSolverAdapter(adapter)` | training / solver adapters | external solvers (ONNX / ROM / third-party) |
232
+ | `listProviders(filter?)` · `getProviderHealth(id, version?)` · `resolveProvider(id, version?)` · `validateProvider(id, version?)` · `retireProvider(id, version?)` · `isRegistryAvailable()` | — | query, health, resolve, validate and retire |
233
+
234
+ **Manifest essentials**: `providerId` / `version` / `apiVersion` / `sceneKinds[]` / `backend`
235
+ (`typescript` | `pytorch` | `python` | `onnx` | `rom` | `external-solver`) / the four variable tables
236
+ (`stateVariables` / `controlVariables` / `disturbanceVariables` / `observationVariables?`) /
237
+ `parameterPriors` / `capabilities` (`onlineStep` / `rollout` / `calibration` / `uncertainty` / `externalSolver` / `mpc`) /
238
+ `artifactContract`.
239
+
240
+ **Generational hot swap**: the lifecycle is `DISCOVERED → VALIDATED → REGISTERED → READY → DRAINING → RETIRED`
241
+ (`FAILED` on rejection). A hot reload stages the new **generation** and drains the old one: trials and MPC hold a
242
+ lease on the old generation, so **in-flight work is never invalidated**, and `retireProvider` only unloads after
243
+ references reach zero.
244
+
245
+ **Minimal example** (the bundled injection provider uses this very contract, see
246
+ `server/plugins-builtin/twin-injection-default/index.mjs`):
247
+
248
+ ```js
249
+ export default {
250
+ name: 'my-injection-provider',
251
+ version: '1.0.0',
252
+ auth: 'none',
253
+ async setup(ctx) {
254
+ const core = await ctx.services.get('twinCore')
255
+ const provider = core.createInjectionProvider() // swap in your own physics core
256
+ ctx.twin.registerPhysicsProvider(provider)
257
+ ctx.twin.registerScenePack({
258
+ sceneKind: 'injection',
259
+ sceneSchemaVersion: '1.0.0',
260
+ compile: () => core.defaultInjectionScene('my-injection-provider'),
261
+ })
262
+ ctx.logger.info(`registered ${provider.manifest.physicsModelId}@${provider.manifest.version}`)
263
+ },
264
+ }
265
+ ```
266
+
267
+ **Where it lives**: the same plugin scopes as any other plugin (see §1) —
268
+ `~/.AgentWorkShop/plugins/<plugin>/` (user), `<repo>/.AgentWorkShop/plugins/<plugin>/` (project),
269
+ `server/plugins-builtin/<plugin>/` (shipped with the package). Disabling or hot-reloading a plugin
270
+ re-stages or drains its generation **without a server restart**.
271
+
272
+ ### Communication-protocol plugins (custom interface connections)
273
+
274
+ `ctx.daq.registerDriver` / `ctx.dcw.registerWriteDriver` are the **protocol plug-in points**: serial
275
+ links, other PLC protocols and private buses all inject here — the main pipelines (sampling loop /
276
+ write gateway / frontend forms) need zero changes.
277
+
278
+ ```js
279
+ ctx.daq.registerDriver({
280
+ kind: 'serial', // custom protocol kind (overriding a builtin logs a warning)
281
+ async available() { return true }, // protocol-stack probe (missing package → UI shows "not installed")
282
+ async sample({ driverConfig }) { return 25.3 }, // reading (scalar or v2 frame envelope)
283
+ async test(driverConfig) { return { ok: true, message: 'connected', sampleValue: 25.3 } },
284
+ meta: { // self-description (frontend "add node" dropdown + dynamic form)
285
+ label: 'Serial (RS-232/485)',
286
+ status: 'real',
287
+ configFields: [{ key: 'path', label: 'Port path', type: 'string', required: true, placeholder: 'COM3' }],
288
+ },
289
+ })
290
+ ```
291
+
292
+ Key points:
293
+ - The driver catalog is served via the `drivers` field of `GET /api/workshop/daq` (read) and
294
+ `GET /api/workshop/dcw` (write); the DAQ/DCW pages render plugin protocols and their forms from it
295
+ (with a ⌁ badge). Drivers registered without `meta` only appear in availability;
296
+ - Hot reload clears all plugin drivers first, then re-loads: **disabled/unloaded protocol drivers
297
+ take effect immediately upon removal** and never linger until restart;
298
+ - Builtin example: `server/plugins-builtin/serial-bridge` (serial Modbus RTU + ASCII line protocol,
299
+ with read/write drivers, `health`/`ports`/`probe` APIs, a frontend panel and the `serial_ports`
300
+ agent tool) — use it as the template for new protocol plugins.
301
+
302
+ ### Where KV lives
303
+
304
+ `<configRoot>/data/plugins/<plugin>/kv.json` — **not** inside the plugin folder. Writes are authoritative in memory and flushed atomically (`tmp` + `rename`) after a 200 ms debounce; on shutdown and hot reload the pending debounce is cancelled and the state is flushed synchronously. `ctx.kv` has exactly four methods: `get / set / all / bump`.
305
+
306
+ ```js
307
+ ctx.kv.set('threshold', 180) // write (flushed after 200 ms)
308
+ ctx.kv.get('threshold') // read (undefined if never written)
309
+ ctx.kv.bump('alarms') // +1, returns the new value; bump('alarms', -1) decrements
310
+ ctx.kv.all() // shallow copy of the whole store
311
+ ```
312
+
313
+ ## 7. Event reference (server)
314
+
315
+ Events are dispatched through a HookBus: **listeners run serially, awaited, in registration order**, and every listener receives the **same unmodified payload object** — it is not a waterfall (only the last non-`undefined` return value is kept, and the host ignores it), and v1 has no veto or interception. A throwing listener is isolated and counted: a success resets the counter, and **8 consecutive failures remove the listener** (circuit breaker).
316
+
317
+ ### Lifecycle and platform events
318
+
319
+ | Event | When | Payload |
320
+ |---|---|---|
321
+ | `plugin:host:init` | after every plugin finished `setup` (once) | `{ plugins: string[], failures: number }` |
322
+ | `plugins:reloaded` | at the end of a hot reload | `{ plugins: <manifest> }` |
323
+ | `config:changed` | `runtime-settings.json` / settings page changed | `{ type, changed: string[], effective, sources }` — **there is no `at` field** |
324
+ | `server:close` | on nitro close, after every per-plugin dispose ran | `{ at }` |
325
+
326
+ ### Domain events
327
+
328
+ | Event | When | Payload |
329
+ |---|---|---|
330
+ | `daq:sample` | the **publish-level** outlet after pipeline aggregation (same point and cadence as WS `daq.reading`, gated by `publishIntervalMs`) | `{ nodeId, templateRef, value, state, at, lineId }` |
331
+ | `daq:frame` | after a multi-shape frame (vector/image) is recorded (metadata, metrics and preview only — no blobs) | `{ nodeId, templateRef, kind, at, lineId, preview?, metrics, thumbUrl?, state }` |
332
+ | `dcw:write` | after a write-control ACK is booked (with 10 s same-value de-duplication) | `{ nodeId, name, eng, prevValue, ok, source, lineId, at }`; `source ∈ manual \| recipe \| agent \| rollback` |
333
+ | `line:start` | batch window opens | `{ lineId, runId, recipeId, productName }` |
334
+ | `line:stop` | batch window closes | `{ lineId, runId }` |
335
+ | `event:<scene-type>` | any `broadcastSceneEvent(type, payload)`, exactly the same source as the browser WS feed | the event's own payload |
336
+
337
+ ### Wildcards and scene events
338
+
339
+ The server wildcard spelling is the **bare star `'*'`**, and the callback receives a `{ type, payload }` wrapper:
340
+
341
+ ```js
342
+ ctx.hooks.on('*', ({ type, payload }) => {
343
+ ctx.logger.debug('event audit', type)
344
+ void payload
345
+ })
346
+ ```
347
+
348
+ `ctx.hooks.on('event:*', fn)` is **wrong** — it never fires. To subscribe to scene events by type, use `ctx.events`, which adds the `event:` prefix for you:
349
+
350
+ ```js
351
+ ctx.events.on('daq.node.changed', (p) => ctx.logger.debug('node changed', p?.op))
352
+ ctx.events.on('daq.alarm.changed', (p) => ctx.logger.info('alarm state', p?.nodeId, p?.recovered))
353
+ ```
354
+
355
+ Common scene events: `daq.reading`, `daq.frame`, `daq.alarm`, `daq.alarm.changed`, `daq.node.changed`, `daq.controller`, `daq.template.changed`, `dcw.node.changed`, `device.created|updated|deleted`, `ops.log`, `permissions.changed`, `plugins.reloaded`, `aml.job|dataset|model`.
356
+
357
+ ### Permission changes
358
+
359
+ Permission changes reach the plugin bus as the scene event `permissions.changed` (its raw bus name is `event:permissions.changed`). `ctx.hooks.on('permissions:changed', …)` **never fires**; the correct form is:
360
+
361
+ ```js
362
+ ctx.events.on('permissions.changed', (p) => ctx.logger.info('grants changed', p?.userId))
363
+ ```
364
+
365
+ ### Config changes
366
+
367
+ ```js
368
+ ctx.hooks.on('config:changed', (p) => {
369
+ ctx.logger.info('config changed', p.changed)
370
+ ctx.logger.info('current theme colour', ctx.config.get('theme.primaryColor'))
371
+ })
372
+ // sugar: ctx.config.onChange(fn)
373
+ ```
374
+
375
+ ## 8. Browser `client.mjs` (`ctx` reference)
376
+
377
+ The client entry must be **declared in the manifest** as `client: './client.mjs'` — merely having the file is not enough. The loader fetches the script from `/api/plugins/client/<plugin>` and calls `setup(ctx)` on the imported module.
378
+
379
+ ```js
380
+ export function setup(ctx) {
381
+ let samples = 0
382
+ const counter = ctx.el('strong', {}, ['0'])
383
+
384
+ // scene event: pass the event name itself; the literal 'event:*' subscribes to all scene events
385
+ ctx.on('daq.reading', () => { samples += 1; counter.textContent = String(samples) })
386
+
387
+ // lifecycle hooks only come through ctx.hooks.on (they are not on the ctx.on surface)
388
+ ctx.hooks.on('i18n:changed', ({ locale }) => ctx.log.info('locale switched:', locale))
389
+
390
+ ctx.ui.registerPanel({
391
+ slot: 'plugins.page', // slot name (see below)
392
+ name: 'my-panel', // unique within the plugin
393
+ titleKey: 'panel.title', // resolves plugin.my-plugin.panel.title (or use a static title)
394
+ order: 10,
395
+ mount(el) { // el = panel container (the slot renders the title)
396
+ const box = ctx.el('div', {}, ['samples:', counter])
397
+ el.append(box)
398
+ const timer = setInterval(() => { counter.textContent = String(samples) }, 5000)
399
+ return () => { clearInterval(timer); box.remove() } // cleanup: called when the panel unmounts
400
+ },
401
+ })
402
+
403
+ ctx.log.info('client injected')
404
+ }
405
+ ```
406
+
407
+ | Member | Notes |
408
+ |---|---|
409
+ | `ctx.name` / `ctx.sdkVersion` | plugin name / client SDK version |
410
+ | `ctx.hooks` | a real HookBus: `client:init` / `page:change` / `i18n:changed` / `client:destroy` |
411
+ | `ctx.on(type, fn)` | scene-event subscription (pass the event name; internally `event:<type>`); only the literal `'event:*'` is a wildcard; returns an unsubscribe function |
412
+ | `ctx.fetch(path, opt)` | same-origin platform API helper (adds the cookie token, unwraps the `{code,data}` envelope, throws on non-2xx) |
413
+ | `ctx.el(tag, attrs, children)` | DOM helper; `style` goes through `cssText`, `class` through `className`, `onXxx` through `addEventListener` |
414
+ | `ctx.mount(target, node)` / `ctx.root()` | mount to a selector/element (falling back to `ctx.root()`) / the plugin's private mount point `#aw-plugin-<name>` |
415
+ | `ctx.ui.registerPanel(entry)` / `ctx.ui.slots` | register a panel into a named slot, returns an unregister function; `slots` lists the known slot names |
416
+ | `ctx.t(key, params?)` | plugin-namespaced translation (`plugin.<name>.<key>`) |
417
+ | `ctx.locale` | current UI locale |
418
+ | `ctx.log.info / warn / error` | console with an `[aw-plugin:<name>]` prefix |
419
+ | `ctx.dispose()` | unload: emits `client:destroy` → collects subscriptions → removes `root()` (idempotent) |
420
+
421
+ ### Wildcards and dead subscriptions (the common traps)
422
+
423
+ | Spelling | Result |
424
+ |---|---|
425
+ | `ctx.on('daq.reading', fn)` | correct: subscribes to the scene event `daq.reading` |
426
+ | `ctx.on('event:*', fn)` | correct: the only wildcard spelling, receives all scene events |
427
+ | `ctx.on('*', fn)` | **dead subscription**: never fires |
428
+ | `ctx.on('event:line.start', fn)` | **dead subscription**: it only subscribes to a scene event literally named `event:line.start`, which does not exist |
429
+ | `ctx.on('daq:sample', fn)` | **dead subscription**: server hooks never cross to the browser |
430
+ | `ctx.hooks.on('page:change', fn)` | correct: lifecycle hooks go through `ctx.hooks` |
431
+ | `ctx.on('client:init', fn)` | **dead subscription**: lifecycle hooks are not on the `ctx.on` surface |
432
+
433
+ Server hooks (`daq:sample`, `daq:frame`, `dcw:write`, `line:start|stop`) **never reach the browser**; the browser only receives scene events (through the TownBus/WS bridge). Conversely, `page:change` / `i18n:changed` exist on the browser side only.
434
+
435
+ ### Panels and page slots
436
+
437
+ A host page embeds `<workshop-plugin-slot slot-name="…" />` wherever it should accept injection; `ctx.ui.slots` currently holds:
438
+
439
+ | Slot | Location |
440
+ |---|---|
441
+ | `plugins.page` | the plugin management page (the default drop point) |
442
+ | `settings.plugins` | Settings → Runtime, below the plugin management area |
443
+ | `dashboard.widgets` | the tail of the dashboard page |
444
+
445
+ `registerPanel` returns an `unregisterPanel` function; a panel's `mount(el)` may return a cleanup function (called when the panel unmounts) and may throw — a single panel's failure is isolated by the slot and never affects the other panels or the page.
446
+
447
+ ### Unload semantics
448
+
449
+ - `ctx.dispose()` is triggered by the **`pagehide`** event (navigating away / entering bfcache; switching tabs does **not** trigger it). It emits `client:destroy`, collects the plugin's own subscriptions and removes `root()`.
450
+ - `ctx.dispose()` does **not** unregister panels by itself — panel cleanup happens in the loader, which calls `unregisterPlugin(name)` on disable / hot reload.
451
+ - Two hot channels back this up: the WS `plugins.reloaded` event (instant) plus a 15 s polling diff.
452
+
453
+ ## 9. Routes and authentication
454
+
455
+ `ctx.route(method, path, handler)` registers immediately and returns a **boolean**; `routes[]` in the manifest is registered only after `setup` returns. Both end up in the same route table:
456
+
457
+ ```
458
+ GET /api/plugins/<plugin>/health ← ctx.route('GET', '/health', handler)
459
+ ← routes: [{ method: 'GET', path: '/health', handler }]
460
+ ```
461
+
462
+ - Matching is **exact**: paths are normalised with a leading `/`, and there are no wildcard segments or sub-route matching.
463
+ - The handler receives the h3 `event`; the JSON body has already been pre-read by the platform forwarding layer and attached as **`event.awBody`** (plugins do not import h3).
464
+ - The handler's return value is serialised to JSON by nitro; a throw becomes a 500 envelope (with plugin-attributed logging) and never leaks a raw stack.
465
+ - **Authentication is enforced declaratively** by the `auth` field, checked **before** your handler, for `routes[]` and `ctx.route()` alike:
466
+
467
+ | `auth` | Behaviour |
468
+ |---|---|
469
+ | `'none'` (default) | no check, the handler runs directly |
470
+ | `'user'` | requires a valid user token, otherwise 401 |
471
+ | `'admin'` | requires an administrator, otherwise 401 |
472
+ | `'agent-or-user'` | accepts an agent identity or a user token |
473
+
474
+ **Do not put authentication inside the handler**: `resolveUser(event)` is not importable from a plugin and is not on `ctx`. Declare `auth` instead.
475
+
476
+ ```js
477
+ ctx.route('GET', '/report', () => ({ plugin: ctx.name, at: new Date().toISOString() }))
478
+
479
+ ctx.route('POST', '/threshold', (event) => {
480
+ const v = Number(event.awBody?.threshold) // the host pre-read the JSON body
481
+ if (!Number.isFinite(v)) return { ok: false, error: 'threshold must be a number' }
482
+ ctx.kv.set('threshold', v)
483
+ return { ok: true, threshold: v }
484
+ })
485
+ ```
486
+
487
+ ## 10. Tools and team switches
488
+
489
+ Tools registered with `ctx.omp.registerTool(def)` appear on every harness tool surface (omp receives them over RPC `set_host_tools`, other engines through the MCP bridge `tools/list`, pi through a tool file, mock through a direct REST invoke). A registry change is **re-pushed** to running sessions — no restart, no sub-process respawn.
490
+
491
+ ```js
492
+ ctx.omp.registerTool({
493
+ name: 'sensor_log',
494
+ label: 'Sensor calibration',
495
+ description: 'Read or record sensor calibration conclusions',
496
+ parameters: { type: 'object', properties: { sensor: { type: 'string' } }, required: ['sensor'] },
497
+ roles: ['lead', 'worker'], // only these two literals; omitted = both roles
498
+ handler: async (args, agent) => ({ text: `${agent.role}@${agent.channelId}: ${args.sensor}` }),
499
+ })
500
+ ```
501
+
502
+ Never open a `url` / `host` injection hole in the parameter schema — plugin tool arguments come straight from the model, so any "let the model pick the target address" field becomes an SSRF surface.
503
+
504
+ ### Team / channel scoped switches
505
+
506
+ Beyond the global switch, every team (channel) keeps its own plugin switch set backed by the `channel_plugins` table:
507
+
508
+ - **Picked at team creation**: `POST /api/workshop/teams` accepts `plugins: [{ name, enabled }]`, stored under the team id and propagated to the channel on deploy;
509
+ - **Toggled at any time**: `GET|PUT /api/workshop/channels/:id/plugins` and `GET|PUT /api/workshop/teams/:id/plugins` (body `{ plugins: [{ name, enabled }] }`, full-replacement semantics, unknown or disabled plugin names are ignored);
510
+ - **Semantics**: no explicit rows = unconfigured → every enabled plugin is visible to that team (backward compatible); once rows exist they filter — **a disabled plugin's tools are not injected into that team's agents and dispatch rejects them at the source**;
511
+ - **UI**: the workshop teams page (creation checkboxes + team dialog).
512
+
513
+ ### Tool registry and per-channel tool selection (2026-10-20)
514
+
515
+ Plugin tools no longer live only in a process-local registry: startup, registration and unload project them into `tool_registry` (SQLite) with source, plugin name, scope, label, description, parameter schema, roles, definition hash and availability. Execution code stays in the plugin process; the database is only the catalog and governance source of truth.
516
+
517
+ - **Global visibility**: admins open `/tools` (or `GET /api/workshop/tools`) to see built-in and plugin tools, parameter schemas and which channels disabled them; `POST /api/workshop/tools/sync` re-syncs manually.
518
+ - **Per-channel selection**: `GET|PUT /api/workshop/channels/:id/tools`, `POST .../tools/reset`;
519
+ - `mode='all'` (default): every eligible tool is enabled; only unchecked tools are stored (deny-list);
520
+ - `mode='selected'`: only checked tools are enabled (allow-list); new tools stay disabled until selected;
521
+ - hard rules (role / channel profile / write guard / plugin master switch) win; a channel cannot open a tool excluded by a hard rule, and explicitly selecting one in `selected` mode returns `409 TOOL_NOT_ELIGIBLE`.
522
+ - **Same injection source**: omp `set_host_tools`, pi `AW_PI_TOOLS_FILE` and the MCP `tools/list` used by other harnesses all go through `hostToolsForRole`; the execution layer re-checks in `dispatchHostTool` / `invokeHostTool`, so a disabled tool cannot be called even if an engine cached an old list.
523
+ - **UI**: the Channel settings dialog has a Tools section with search, source/state filters, select all/none/reset, and reason badges for hard-rule blocks.
524
+
525
+ ### Install a local plugin
526
+
527
+ ```bash
528
+ aw plugin install <source-dir> [--global|-g] [--name <name>] [--force|-f] [--no-enable]
529
+ ```
530
+
531
+ Installation only accepts a **local directory** containing `index.mjs`: symlinks and out-of-scope paths are rejected and the target must be a project/user scope; `--force` backs up the old directory first. Installation rewrites `plugins-state.json` to trigger hot reload, and the plugin's tools automatically enter the tool catalog and MCP tool surface. No remote URL or marketplace download.
532
+
533
+ ## 11. Complete example
534
+
535
+ ```js
536
+ // index.mjs — server entry (zero import dependencies; the host injects ctx)
537
+ export default {
538
+ name: 'my-plugin',
539
+ version: '1.0.0',
540
+ description: 'Example: over-threshold counting + own API + config groups + agent tool',
541
+ auth: 'user',
542
+ client: './client.mjs',
543
+ configGroups: [
544
+ { id: 'default', label: 'My plugin', description: 'Basic configuration', order: 500 },
545
+ { id: 'advanced', label: 'Advanced', collapsed: true },
546
+ ],
547
+ settings: [
548
+ { key: 'threshold', type: 'number', default: 180, min: 0, max: 5000, group: 'default',
549
+ label: 'Alarm threshold', description: 'applies live on save' },
550
+ { key: 'endpoint', type: 'string', default: 'http://127.0.0.1:8080', group: 'advanced',
551
+ label: 'External service URL' },
552
+ ],
553
+ routes: [
554
+ { method: 'GET', path: '/health', handler: () => ({ ok: true }) },
555
+ ],
556
+
557
+ async setup(ctx) {
558
+ ctx.logger.info(`loaded (scope=${ctx.scope}, sdk=${ctx.sdkVersion})`)
559
+
560
+ const threshold = () => Number(ctx.config.get('plugins.my-plugin.threshold')) || 180
561
+
562
+ // 1) publish-level DAQ samples: count over-threshold hits in plugin-private KV
563
+ ctx.hooks.on('daq:sample', (s) => {
564
+ if (typeof s?.value === 'number' && s.value > threshold())
565
+ ctx.kv.bump(`alarm:${s.nodeId}`)
566
+ })
567
+
568
+ // 2) scene events (ctx.events adds the event: prefix for you)
569
+ ctx.events.on('daq.alarm', (a) => ctx.logger.warn('alarm', a?.nodeId))
570
+ ctx.events.on('permissions.changed', (p) => ctx.logger.info('grants changed', p?.userId))
571
+
572
+ // 3) full event audit: the server wildcard is the bare '*', callback gets { type, payload }
573
+ ctx.hooks.on('*', ({ type }) => ctx.logger.debug('event', type))
574
+
575
+ // 4) routes[] are registered after setup; ctx.route registers now (returns a boolean)
576
+ ctx.route('POST', '/threshold', (event) => {
577
+ const v = Number(event.awBody?.threshold)
578
+ if (!Number.isFinite(v)) return { ok: false, error: 'threshold must be a number' }
579
+ ctx.kv.set('threshold', v)
580
+ return { ok: true, threshold: v }
581
+ })
582
+
583
+ // 5) timers + cleanup: one host-owned dispose queue, run on shutdown and hot reload
584
+ ctx.timer.setInterval(() => ctx.kv.set('heartbeat', new Date().toISOString()), 5000)
585
+ ctx.onDispose(() => ctx.logger.info('plugin cleaned up'))
586
+
587
+ // 6) agent tool (roles accepts 'lead' | 'worker' only)
588
+ ctx.omp.registerTool({
589
+ name: 'my_alarm_report',
590
+ description: 'Read the over-threshold alarm counter recorded by this plugin',
591
+ parameters: { type: 'object', properties: { nodeId: { type: 'string' } }, required: ['nodeId'] },
592
+ roles: ['lead', 'worker'],
593
+ handler: async (args, agent) => ({
594
+ text: `${args.nodeId} alarmed ${ctx.kv.get(`alarm:${args.nodeId}`) ?? 0} times (by ${agent.role})`,
595
+ }),
596
+ })
597
+ },
598
+ }
599
+ ```
600
+
601
+ `client.mjs` is in §8 and `i18n.json` in §5. Which scope to install into and how to toggle are in §1.
602
+
603
+ ## 12. Troubleshooting
604
+
605
+ | Symptom | Cause / fix |
606
+ |---|---|
607
+ | Plugin code edits have no effect | the host has no plugin-directory watcher: touch `<home>/plugins-state.json`, or toggle `aw plugin enable/disable` once, to trigger a reload (the reload imports with `?t=` to defeat the cache); core `server/` and `shared/` changes still need a process restart |
608
+ | Recreated a same-named plugin but routes 404 | a name previously disabled keeps its flag in `<home>/plugins-state.json`; recreating the directory does not reload it — run `aw plugin enable <name>` explicitly after recreating (verified in practice) |
609
+ | Load failures are invisible | `aw plugin list` does **not** show them. Use `GET /api/workshop/plugins` (returns `{ plugins, failures, initedAt }`, **no `{code,data}` envelope**) or read `[aw-plugins] 装载失败 …` in the startup log |
610
+ | Plugin route 404 | matching is exact; check the method and the leading `/` of the path, and whether the plugin is enabled (a disabled plugin's routes are dropped from the table) |
611
+ | Plugin route 401 | the entry declared `auth: 'user' \| 'admin' \| 'agent-or-user'` and the request carried no valid credential; use `auth: 'none'` only for open endpoints |
612
+ | Client panel never appears | check the browser console for `[aw-plugins]` warnings; confirm the manifest says `hasClient: true` (i.e. the manifest declares `client:'./client.mjs'`) and the plugin is `enabled !== false` |
613
+ | A client subscription never fires | check you did not fall into the §8 traps (`ctx.on('*')`, `ctx.on('event:line.start')`, `ctx.on('daq:sample')`, or handing a lifecycle hook to `ctx.on`) |
614
+ | A setting does not render | a declaration without `default` is skipped with a warning; a `select`'s `default` must be inside `options`; `key` allows letters, digits, `-` and `_` only |
615
+ | A changed setting has no effect | read it as `ctx.config.get('plugins.<plugin>.<key>')` (the short key reads nothing) |
616
+ | The `permissions:changed` hook never fires | that name does not exist; use `ctx.events.on('permissions.changed', fn)` |
617
+ | KV data "disappeared" | KV is at `<configRoot>/data/plugins/<plugin>/kv.json`, not in the plugin folder; writes flush after a 200 ms debounce, so a hard kill has a tiny loss window |
618
+ | `ctx.api` returns 401 | authenticated endpoints need `ctx.api.setToken(token)`; unauthenticated ones (manifest / ping) do not |
619
+
620
+ **Trust model**: a plugin is arbitrary node code, on par with aw commands — only install and enable plugins you trust.
621
+
622
+ ### Known boundaries (intentional, not defects)
623
+
624
+ - **Hooks are observational**: v1 has no veto / interception / rewriting — write-control interlock integrity comes first.
625
+ - **The `ctx.http` guard is protocol-only** (http/https) and does **not** restrict hosts; do your own allow-listing inside the plugin (the built-in `diag-bridge` / `rag-bridge` do exactly that).
626
+ - **`ctx.t(key, params)` currently ignores `params`** (no interpolation); build strings yourself inside the plugin.
627
+ - **`ctx.kv` has no `reset()`** — only `get / set / all / bump`.
628
+ - **Server and browser subscription surfaces do not overlap**: server hooks never cross the bridge, and browser events never reach the server.
629
+ - **A newly enabled browser plugin injects within 15 s** (instantly when the WS channel is up).
630
+ - **`server:close` / `onDispose` depend on graceful shutdown signals**; a forced kill on Windows does not trigger them.
631
+ - **`aw plugin list` only scans directories** — it reflects neither load failures nor runtime health.
632
+ - **Protocol plugins share the host process with their native stacks**: serial-bridge's RTU framing is a self-contained implementation (single serialport native stack; modbus-serial is deliberately NOT used — its wrapper reproducibly crashed under dev mode). Known boundary: **inside the `aw dev` process, a serial transaction that ends in write → timeout → close can trigger a native V8 crash in `bindings-cpp`** (HandleScope fatal — not catchable in JS, regardless of which port is used); **production mode (`aw start`) is unaffected — the exact same sequence was verified live to return an honest timeout with the server healthy**, and open-only probes are also fine under dev. Connect real hardware during development with this in mind; for hardened deployments, run the serial gateway in its own process (see the plc-node-simulator child-process pattern).
633
+
634
+ ## 13. Pre-release checklist
635
+
636
+ 1. `aw plugin list` shows the plugin in all applicable scopes; a client plugin shows `+client`; toggling enable/disable makes routes, tools and panels appear and disappear together (a rapid toggle burst must not lose events).
637
+ 2. `GET /api/workshop/plugins` reports an empty `failures`; `GET /api/plugins/manifest` reports `settingsCount` / `hasClient` / `hasI18n` matching the declaration.
638
+ 3. The settings page shows the plugin's config group (fields without a declared group land in the `plugin-<plugin>` group); after a save, `ctx.config.get('plugins.<plugin>.<key>')` returns the new value immediately.
639
+ 4. Locale switching updates panel titles and copy; the `i18n:changed` cleanup leaves no leaks.
640
+ 5. The tool is visible through `GET /api/workshop/agent-tools/list`; its parameters expose no `url` / `host` injection hole; after the team switch is turned off the tool disappears and dispatch is rejected.
641
+ 6. Trigger one hot reload (toggle enable/disable) and confirm `plugins:reloaded` reaches the plugin with no KV or timer leak.