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,657 +1,657 @@
1
- # HTTP API authz / read-path / perf audit — agents + runtime + industrial nodes
2
-
3
- Read-only audit. Every claim cites `file:line` with verbatim code. No source file was modified.
4
-
5
- Scope read in full: `server/api/workshop/agent-tools/**`, `agents/**`, `channels/**`, `dcw/**`, `daq/**`,
6
- `runtime.get.ts`, `tasks.get.ts`, `mailbox.get.ts`, `caller.ts`, `server/services/workshop/scene-events.ts`,
7
- `server/services/workshop/agents/agent-badge.ts`, plus the guards they delegate to
8
- (`permissions.ts`, `runtime/manager.ts`, `agents/tool-approvals.ts`, `agents/node-bindings.repo.ts`,
9
- `agents/host-tool-bridge.ts`, `agents/industrial-tools.ts`, `dcw/dcw-controller.ts`, `daq/daq-controller.ts`,
10
- `aml/job-orchestrator.ts`, `aml/python-runtime.ts`).
11
-
12
- ---
13
-
14
- ## 1. AUTHZ AUDIT
15
-
16
- ### 0. Global facts
17
-
18
- * No global auth middleware exists. The only middleware is `server/middleware/request-log.ts:7` — logging only.
19
- * Unmatched `/api/workshop/**` paths hit `server/api/workshop/[...path].ts:12` → static 404.
20
- * Auth primitives (`server/api/workshop/caller.ts`):
21
- * `resolveUser` (`:71-79`) — Bearer **user** token, else 401.
22
- * `resolveCaller` (`:16-24`) — Bearer **agent instance** token, else 401.
23
- * `resolveAgentOrUser` (`:45-54`) — either domain.
24
- * `requireAdmin` (`:82-88`), `requireRole` (`:91-97`).
25
- * Line-grant model (`server/services/workshop/permissions.ts`): `isPrivilegedRole` (`:26-28`),
26
- `lineMode` (`:31-36`), `visibleLineIds` (`:39-42`), `filterByLine` (`:45-52`),
27
- `requireLineMode` (`:55-62`). admin/editor bypass everything.
28
-
29
- ### 1.1 [P0] `agent-tools/invoke.post.ts` — user token + client-supplied `agentId` = full agent impersonation
30
-
31
- The whole handler (27 lines):
32
-
33
- ```ts
34
- // server/api/workshop/agent-tools/invoke.post.ts:16-27
35
- export default defineApiHandler(async (event) => {
36
- const agentToken = getHeader(event, 'x-aw-agent-token')
37
- if (!agentToken) resolveUser(event) // 桥路径免用户鉴权,由 token 校验兜底
38
- const body = await readBody<{ agentId?: string, tool?: string, args?: Record<string, unknown> }>(event) ?? {}
39
- const agentId = String(body.agentId ?? '')
40
- const tool = String(body.tool ?? '')
41
- const args = body.args ?? {}
42
- if (!agentId) throw createError({ statusCode: 400, statusMessage: 'agentId required' })
43
- if (!tool) throw createError({ statusCode: 400, statusMessage: 'tool required' })
44
- const result = await getWorkshopManager().invokeHostTool({ agentId, tool, args, token: agentToken || undefined })
45
- return { result }
46
- })
47
- ```
48
-
49
- Note `invoke.post.ts:18`: `resolveUser(event)`'s **return value is discarded** — the authenticated user is never
50
- passed downstream. `agentId` comes only from the request body (`:20`).
51
-
52
- The guard it delegates to:
53
-
54
- ```ts
55
- // server/services/workshop/runtime/manager.ts:2746-2752
56
- async invokeHostTool(input: { agentId: string, token?: string, tool: string, args?: Record<string, unknown> }): Promise<{ text: string, isError?: boolean }> {
57
- const row = this.deps.repos.channelAgents.findById(input.agentId)
58
- if (!row || row.enabled !== 1) throw new AppError(404, 'NOT_FOUND', `agent 不存在或已停用: ${input.agentId}`)
59
- // token 鉴权(MCP 桥路径必带;缺省视为服务端内部调用,走 REST 已有用户鉴权)
60
- if (input.token !== undefined && input.token !== row.token) {
61
- throw new AppError(401, 'UNAUTHORIZED', 'agent token 校验失败')
62
- }
63
- ```
64
-
65
- `invoke.post.ts:25` passes `token: agentToken || undefined`. **Consequences, exactly:**
66
-
67
- | Request | `agentToken` | `input.token` | `manager.ts:2750` | Result |
68
- |---|---|---|---|---|
69
- | valid **user** Bearer, **no** `x-aw-agent-token`, `agentId` = any other agent | undefined | `undefined` | `input.token !== undefined` is **false** → check **skipped** | **Executes any tool as that agent** |
70
- | **no** `Authorization` at all, no `x-aw-agent-token` | undefined | — never reached | — | `resolveUser` at `invoke.post.ts:18` throws `AppError(401,'USER_UNAUTHORIZED')` (`caller.ts:76`) → **blocked** |
71
- | own agent token in `x-aw-agent-token`, `agentId` = another agent | own token | own token | `!== row.token` → true | 401 — **blocked** |
72
- | valid agent token, matching `agentId` | token | `=== row.token` | passes | legitimate |
73
-
74
- So the hole is exactly: **valid user token + arbitrary body `agentId` + absent `x-aw-agent-token`.** No ownership,
75
- membership or role check exists anywhere on this path. The authenticated `ResolvedUser` never reaches `manager`.
76
-
77
- After the guard, the impersonated identity drives every downstream authorization:
78
-
79
- ```ts
80
- // server/services/workshop/runtime/manager.ts:2769-2775
81
- const identity = {
82
- agentId: row.id,
83
- channelId: row.channelId,
84
- role: (row.role === 'lead' ? 'lead' : 'worker') as 'lead' | 'worker',
85
- name: row.name,
86
- }
87
- return await pluginTool.handler(input.args ?? {}, identity)
88
- ```
89
-
90
- ```ts
91
- // server/services/workshop/runtime/manager.ts:2777-2783
92
- const runtime = this.ensureAgentRuntime(row.channelId, input.agentId)
93
- if (runtime) {
94
- const viaImpl = await runtime.dispatchHostTool(input.tool, input.args ?? {})
95
- if (viaImpl) return viaImpl
96
- }
97
- // 回退:impl 未实现工具面(如 mock)→ 协作工具族直调
98
- return await this.invokeAgentWorkspaceTool(input.agentId, input.tool, input.args ?? {})
99
- ```
100
-
101
- `invokeHostTool` also applies **no role/tool filtering** — unlike `hostToolsForRole`
102
- (`host-tool-bridge.ts:70-87`) it never consults `LEAD_ONLY_TOOL_NAMES` (`host-tool-bridge.ts:33-43`).
103
- Every tool is dispatchable for any named agent that exists and is enabled.
104
-
105
- **Which tool classes are reachable, by whom**
106
-
107
- Reachable by *any* authenticated user token of *any* role (including a plain `user` with zero line grants):
108
- pick any lead/worker agent id.
109
-
110
- * **Read-only** (dispatch table `host-tool-bridge.ts:162-211` + `:219+`):
111
- `my_industrial_nodes`, `aml_node_catalog`, `aml_dataset_stats`, `aml_job_status`, `aml_job_logs`,
112
- `aml_leaderboard`, `aml_model_reference`, `dcw_read`, `daq_query`, `daq_frames`, `dcw_journal`, `ops_log`,
113
- `recipe_log`, `recipe_versions`, `line_context`, `list_other_teams`, `search_other_teams_memory`,
114
- mailbox/list-mail/memory tools.
115
- * **Mutating / control-plane**:
116
- * `dcw_control` — real PLC write. Its only authz is the *impersonated agent's* binding:
117
- ```ts
118
- // server/services/workshop/agents/industrial-tools.ts:99-108
119
- const repo = getAgentNodeBindingRepo()
120
- const binding: AgentNodeBinding | undefined = nodeId ? repo.find(agentId, nodeId, 'dcw') : undefined
121
- if (!binding) {
122
- ```
123
- HITL applies only when `binding.mode === 'manual'` (`industrial-tools.ts:128`); with `mode:'auto'`
124
- the write executes immediately (`industrial-tools.ts:157`).
125
- * `recipe_update` (`host-tool-bridge.ts:207-208`), `recipe_rollback` (`:209-210`), `dcw_judge` (`:193-194`),
126
- `dcw_rollback` (`:195-196`), `aml_dataset_build` (`:167-168`), `aml_job_cancel` (`:177-178`),
127
- `send_cross_channel_message` (`manager.ts:2725-2734`), `dispatch_task`, `create_team_agent`,
128
- `update_team_agent`, `remove_team_agent`, `complete_task`, `report_progress`.
129
- * `aml_model_promote` — nominally lead-only; its check is against the **DB role of the supplied agentId**:
130
- ```ts
131
- // server/services/workshop/agents/industrial-tools.ts:1290-1294
132
- // 治理硬守卫:晋升仅限 lead 实例(注入层过滤 + 分发层双重校验,HTTP 直调不可绕过)
133
- const roleRow = getAmlRuntime().db.prepare('SELECT role FROM channel_agents WHERE id = ? AND enabled = 1').get(agentId) as { role?: string } | undefined
134
- if (roleRow?.role !== 'lead') {
135
- return amlErr(`aml_model_promote 为 lead 专属工具:实例 ${agentId}(role=${roleRow?.role ?? '未知'})无权晋升模型。请由团队 lead 发起,晋升需人工 HITL 批准。`)
136
- }
137
- ```
138
- Naming a lead's `agentId` satisfies it (then HITL approval at `industrial-tools.ts:1316`).
139
- * `aml_job_submit` — **arbitrary Python execution on the server host.** The tool takes up to 500 KB of code:
140
- ```ts
141
- // server/services/workshop/agents/industrial-tools.ts:1152-1156
142
- if (!code.trim()) return amlErr('code 必填:train.py 全文(单文件;契约见工具说明)。')
143
- if (code.length > 512_000) return amlErr(`code 过大(${Math.round(code.length / 1024)}KB),上限 500KB;精简训练代码(模型定义/训练循环拆薄)后重试。`)
144
- if (!/\bimport\s+amlkit\b/.test(code)) {
145
- ```
146
- It is written to disk and executed:
147
- ```ts
148
- // server/services/workshop/aml/job-orchestrator.ts:285-287
149
- if (typeof inline === 'string' && inline.length > 0 && inline.length <= 512_000) {
150
- writeFileSync(join(workspace, 'train.py'), inline)
151
- trainFile = 'train.py'
152
- ```
153
- ```ts
154
- // server/services/workshop/aml/job-orchestrator.ts:328
155
- const exit1 = await runPython(run, vpy, [join(workspace, trainFile)], workspace)
156
- ```
157
- No container/OS sandbox; the only mitigation is a scrubbed env
158
- (`aml/python-runtime.ts:186-214`, `jobEnv` whitelist, "服务器 secrets … 一律不可见").
159
- The `import amlkit` requirement is a regex (`industrial-tools.ts:1154`), trivially satisfied.
160
- * Plugin tools: identity is the impersonated agent (`manager.ts:2769-2775`), no independent check —
161
- e.g. `diag_run` (`server/plugins-builtin/diag-bridge/index.mjs:449-450`) exports line DAQ snapshots,
162
- `kb_store`/`kb_index` (`server/plugins-builtin/rag-bridge/index.mjs:199,259`) mutate the knowledge base.
163
-
164
- **Contrast with the sibling endpoint, which does it right:**
165
-
166
- ```ts
167
- // server/api/workshop/agent-tools/list.get.ts:17-22
168
- if (agentToken) {
169
- const resolved = getWorkshopManager().resolveAgentByToken(String(agentToken))
170
- if (!resolved || resolved.agentId !== agentId) {
171
- throw createError({ statusCode: 401, statusMessage: 'agent token 校验失败' })
172
- }
173
- }
174
- ```
175
-
176
- **Enumeration is trivial**, so no guessing is needed: `agent-tools/bindings/index.get.ts:13` returns
177
- `{ bindings: agentId ? getAgentNodeBindingRepo().byAgent(agentId) : getAgentNodeBindingRepo().all() }` — with no
178
- `agentId` query param, **every** binding of every agent (agentId + nodeId + kind + mode) is returned to any
179
- authenticated user.
180
-
181
- ⚠UNVERIFIED: I did not execute a live exploit; the conclusion is from the code paths above (all read directly).
182
- Corroboration: the same finding is already written up at `docs/audit/audit-agents.md:186-249` ("the manager's
183
- token check is **skipped entirely** when no token is supplied … Minimal hardening: in `invokeHostTool` change the
184
- token check to `if (input.token !== row.token)`") — and the code is **unchanged**, i.e. unfixed.
185
-
186
- ### 1.2 `bindings/index.post.ts` — permission check quoted; **target agent ownership NOT verified**
187
-
188
- ```ts
189
- // server/api/workshop/agent-tools/bindings/index.post.ts:16-39
190
- export default defineApiHandler(async (event) => {
191
- const user = resolveUser(event)
192
- const body = await readBody<{ agentId?: string, nodeId?: string, kind?: 'dcw' | 'daq', mode?: 'auto' | 'manual' }>(event) ?? {}
193
- const kind = body.kind ?? 'dcw'
194
- const nodeId = String(body.nodeId ?? '')
195
- // 绑定前置:节点必须存在,且用户对其所属产线有足额权限
196
- const lineId = kind === 'daq'
197
- ? getDaqController().byId(nodeId)?.lineId
198
- : getDcwController().byId(nodeId)?.lineId
199
- if (!lineId) {
200
- throw new AppError(404, ErrorCodes.NOT_FOUND, `${kind === 'daq' ? '数采' : '写控'}节点不存在: ${nodeId}`)
201
- }
202
- const mode = lineMode(user, lineId)
203
- const needOperate = kind === 'dcw'
204
- if (mode === 'none' || (needOperate && mode !== 'operate')) {
205
- throw new AppError(403, 'LINE_FORBIDDEN', `无该产线权限:绑定${kind === 'daq' ? '数采' : '写控'}节点需对产线「${lineId}」拥有${needOperate ? '可操控' : '仅查看'}及以上权限`)
206
- }
207
- const binding = getAgentNodeBindingRepo().bind(
208
- String(body.agentId ?? ''),
209
- nodeId,
210
- kind,
211
- body.mode ?? 'auto',
212
- )
213
- return { binding }
214
- })
215
- ```
216
-
217
- The check at `:28-32` covers **the node's line only**. `body.agentId` is never resolved, never checked for
218
- existence, never checked for ownership/membership:
219
-
220
- ```ts
221
- // server/services/workshop/agents/node-bindings.repo.ts:73-78
222
- bind(agentId: string, nodeId: string, kind: AgentNodeBindingKind, mode: AgentNodeBindingMode): AgentNodeBinding {
223
- if (!agentId) throw new AppError(400, ErrorCodes.VALIDATION_ERROR, 'agentId 必填')
224
- if (!nodeId) throw new AppError(400, ErrorCodes.VALIDATION_ERROR, 'nodeId 必填')
225
- if (kind !== 'dcw' && kind !== 'daq') throw new AppError(400, ErrorCodes.VALIDATION_ERROR, `未知节点类型: ${kind}`)
226
- if (mode !== 'auto' && mode !== 'manual') throw new AppError(400, ErrorCodes.VALIDATION_ERROR, `未知控制模式: ${mode}`)
227
- ```
228
-
229
- Effect: **any** authenticated user with `operate` on one line can grant that control right to **any** agent id —
230
- their own, another user's agent, or a lead in an unrelated channel — or re-bind an existing agent with
231
- `"mode":"auto"` to strip HITL, because `bind()` updates the mode of an existing row
232
- (`node-bindings.repo.ts:79-83`: `if (prev) { prev.mode = mode; this.flush(); return prev }`).
233
- The granting user need not own, belong to, or even know anything about that agent.
234
-
235
- ### 1.3 Handlers that authenticate but never authorize the resource (IDOR)
236
-
237
- All of these call `resolveUser` and **discard the result** or use it only for logging — no ownership/role/line check:
238
-
239
- | Handler | Auth | Missing check | Impact |
240
- |---|---|---|---|
241
- | `agent-tools/bindings/[id].patch.ts:10-13` | `resolveUser(event)` (`:10`) | owner / role / line | Any user flips **any** binding's mode: `getAgentNodeBindingRepo().setMode(id, body.mode ?? 'auto')` → `"auto"` **disables HITL** for another team's writes (`node-bindings.repo.ts:97-104`) |
242
- | `agent-tools/bindings/[id].delete.ts:11-17` | `resolveUser(event)` (`:11`) | owner / role / line | Any user unbinds any agent↔node pair (`:17 !repo.unbind(id)`), also cancels that agent's pending approvals (`:19 getToolApprovals().cancelPendingFor(...)`) |
243
- | `agent-tools/bindings/index.get.ts:10-13` | `resolveUser(event)` (`:10`) | any scope filter | Full cross-tenant binding dump (see 1.1) |
244
- | `agent-tools/approvals/index.get.ts:11-16` | `resolveUser(event)` (`:11`) | ownership of `agentId` | Any user lists pending approvals of any agent: `getToolApprovals().listPending(agentId)`; history via `scope=history` |
245
- | `agent-tools/list.get.ts:13-23` | user token path (`:13`) | `agentId` ownership | Tool-schema disclosure for any agent |
246
- | `dcw/[id]/read.post.ts:13-16` | `resolveUser(event)` (`:13`) | **`requireLineMode` absent** | Any user triggers a real driver read on **any** dcw node id: `await getDcwController().readNow(id)` (`:16`) — cross-line data read |
247
- | `dcw/[id].patch.ts:12-16` | `resolveUser(event)` (`:12`) | role / line | Any user patches **any** dcw node: name/driver/range/enabled/position — `getDcwController().patch(id, body)` (`:16`). Widening `min/max` weakens the write interlock that `dcw_control` depends on |
248
- | `dcw/index.post.ts:13-16` | `resolveUser(event)` (`:13`) | role / line | Any user creates a write-control node (the comment at `:17` calls it "获得直写物理设备能力的入口") |
249
- | `dcw/lines/[id].delete.ts:15-21` | `resolveUser(event)` (`:15`) | role / line | Any user deletes **any** line; `?purge=1` cascades nodes/products/recipes (`:19-21`). The sibling create is admin/editor-gated (`dcw/lines/index.post.ts:14`) |
250
- | `dcw/lines/[id].patch.ts:11-14` | `resolveUser(event)` (`:11`) | role / line | Any user renames/recolors any line |
251
- | `dcw/recipes/[id].delete.ts:10-12` | `resolveUser(event)` (`:10`) | role | Any user deletes any recipe |
252
- | `dcw/recipes/index.post.ts:11-13` | `resolveUser(event)` (`:11`) | role | Any user creates recipes |
253
- | `dcw/recipes/[id]/index.patch.ts:12` , `[id]/revert.post.ts:12` | `resolveUser` | role | Any user edits/rewrites any recipe version history |
254
- | `dcw/products/[id].delete.ts:11-14`, `[id].patch.ts:12-16` | `resolveUser` | role | Any user deletes/edits any product (create requires admin/editor, `products/index.post.ts:12`) |
255
- | `dcw/runs/[id]/close.post.ts:11-14` | `resolveUser(event)` (`:11`) | role | Any user closes any production run window |
256
- | `dcw/templates/index.post.ts:11-13`, `[key].patch.ts:11-14`, `[key].delete.ts:10-12` | `resolveUser` | role | Any user mutates control templates (driver configs) |
257
- | `dcw/test-driver.post.ts:12-15` | `resolveUser(event)` (`:12`) | role | Any user makes the server open outbound connections with a caller-supplied `driverConfig`: `getDcwController().testDriver(body.driver ?? 'mock', body.driverConfig ?? {})` |
258
- | `daq/test-driver.post.ts:17-21` | `resolveUser(event)` (`:17`) | role | Same SSRF-ish connect primitive for DAQ protocols |
259
- | `daq/[id]/test.post.ts:12-15` | `resolveUser(event)` (`:12`) | **`requireLineMode` absent** | Any user triggers a real connection test on any DAQ node (`:15 testNode(id)`); the dcw twin requires `operate` (`dcw/[id]/test.post.ts:16`) |
260
- | `daq/[id].delete.ts:13-17` | `resolveUser(event)` (`:13`) | **`requireLineMode` absent** | Any user deletes any DAQ node; the patch twin requires `operate` (`daq/[id].patch.ts:19`) |
261
- | `daq/infra/reconnect.post.ts:9-15` | `resolveUser(event)` (`:9`) | role | Any user triggers infra bring-up: `await apply(daqInfraConfig())` → `__daqApplyInfra` runs `docker compose -f … up -d …` (`server/services/workshop/daq/infra.ts:85`) |
262
- | `daq/alarms.get.ts:11-15` | `resolveUser(event)` (`:11`) | line filter | Any user reads **all** alarms of **all** lines (`:15 listAlarms(scope, limit)`); `daq/index.get.ts:27` filters by line, this one does not |
263
- | `daq/templates/*` (`index.post.ts:12`, `[key].patch.ts:12`, `[key].delete.ts:12`) | `resolveUser` | role | Any user mutates signal templates |
264
- | `dcw/journal/index.get.ts:11-19` | `resolveUser(event)` (`:11`) | line scope | Any user reads the full parameter ledger for any `lineId`/`nodeId` supplied in the query |
265
- | `dcw/[id]/param-ledger.get.ts:11-13` | `resolveUser(event)` (`:11`) | **`requireLineMode` absent** | Any user reads any node's setpoints/targets/last-good values |
266
- | `dcw/optimizations/index.get.ts:11-21`, `[id].get.ts:11-16`, `[id]/series.get.ts:12-17` | `resolveUser` | line scope | Any user reads any line's optimization records + raw DAQ series |
267
- | `dcw/recipes/index.get.ts:9-11` | `resolveUser(event)` (`:9`) | line scope | Returns `repo.list()`/`listRuns()` with **no** `visibleLineIds` filter (contrast `dcw/index.get.ts:29-30`, `dcw/runs/index.get.ts:12`) |
268
- | `dcw/recipes/[id]/versions.get.ts:11-13` | `resolveUser` | line scope | Any user reads any recipe's full parameter version history |
269
- | `server/api/workshop/runtime.get.ts:9-10` | `resolveUser(event)` (`:9`) | role | Any user enumerates wired harness agent ids + active channels |
270
- | `server/api/workshop/daq/infra.get.ts:9` | `resolveUser` | role | Infra status disclosure (low) |
271
-
272
- ### 1.4 Handlers that ARE correctly guarded (control set)
273
-
274
- * `agents/[id].get.ts:16-17` → `manager.requireTemplateReadable`; `agents/[id].patch.ts:28`, `[id].delete.ts:17` → `requireWritable` (`manager.ts:1083-1090`).
275
- * `channels/[id].delete.ts:14-15`, `index.patch.ts:35-36`, `agents/index.post.ts:32-33`, `agents/[agentId].delete.ts:17-18`, `[agentId].patch.ts:18-19`, `model.patch.ts:20-21`, `position.patch.ts:19-20`, `range.patch.ts:19-20`, `stop.post.ts:18-19` → `getChannelForUser` + `requireWritable` + membership check (`manager.ts:1103-1110`, `:1067-1074`).
276
- * `channels/[id]/messages/index.post.ts:38-39`, `tasks/index.post.ts:67-68`, `tasks/index.get.ts:22`, `queue.get.ts:17`, `events.get.ts:28`, `terminals.get.ts:19`, `messages/index.get.ts:21`, `channels/[id]/index.get.ts:13` → `getChannelForUser` (owner-or-legacy-public read).
277
- * Memory planes: `channels/[id]/memories/**` and `channels/[id]/agents/[agentId]/memories/**` → `resolveAgentOrUser` + same-channel or `getChannelForUser`+`requireOwned`, and the manager re-checks role: `manager.ts:1508` (`仅本人或 lead 可策展 Agent 记忆`), `:1463` (`仅 lead 可写团队记忆`), `:1487`, `:1548`.
278
- ⚠ Note (by design, not a bug): `manager.searchAgentMemories` (`manager.ts:1441-1446`) only calls `requireMember(channelId, callerAgentId)` — **any teammate agent in the channel can search another agent's private memory** by passing that agent's id in the URL with `scope:'private'`.
279
- * `agents/subscribe.post.ts:17-19` → `resolveCaller` + `manager.subscribe` → `requireMember` + same-channel target check (`manager.ts:2884-2893`).
280
- * `tasks.get.ts:11-12` / `mailbox.get.ts:10-13` → `resolveCaller`, scope forced to `caller.channelId`/`caller.id`.
281
- * Role-gated: `dcw/controller.post.ts:15`, `dcw/[id].delete.ts:14`, `dcw/lines/index.post.ts:14`, `dcw/journal/node/[nodeId]/rollback.post.ts:15`, `dcw/optimizations/[id]/judge.post.ts:15`, `[id]/rollback.post.ts:17`, `dcw/products/index.post.ts:12`, `dcw/recipes/[id]/apply.post.ts:15`, `[id]/mark-good.post.ts:13`, `[id]/rollback-good.post.ts:13`, `dcw/runs/[id]/rollback.post.ts:14`, `daq/controller.post.ts:29,49`, `daq/index.post.ts:16` (all `requireRole`/`gateDangerous`).
282
- * `agent-tools/approvals/[id]/decide.post.ts:12-19` — `resolveUser` **used** (decider recorded + `audit`).
283
-
284
- ### 1.5 `requireLineMode` / `lineMode` audit for daq/dcw handlers
285
-
286
- **Called (correct):**
287
-
288
- | Handler | Line | Quote |
289
- |---|---|---|
290
- | `dcw/[id]/write.post.ts` | `:19` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
291
- | `dcw/[id]/test.post.ts` | `:16` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
292
- | `dcw/[id]/bind.post.ts` | `:16` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
293
- | `dcw/[id]/bindings.put.ts` | `:17` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
294
- | `dcw/lines/[id]/start.post.ts` | `:20` | `requireLineMode(user, id, 'operate')` |
295
- | `dcw/lines/[id]/stop.post.ts` | `:20` | `requireLineMode(user, id, 'operate')` |
296
- | `dcw/runs/[id]/data.get.ts` | `:18` | `requireLineMode(user, run?.lineId, 'readonly')` |
297
- | `daq/[id].patch.ts` | `:19` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'operate')` |
298
- | `daq/[id]/bind.post.ts` | `:18`, `daq/[id]/bindings.put.ts:18` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'operate')` |
299
- | `daq/[id]/samples.get.ts` | `:16`, `daq/[id]/frames.get.ts:16`, `daq/[id]/frames/content.get.ts:17` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'readonly')` |
300
- | `daq/alarms/[id]/ack.post.ts` | `:17` | `requireLineMode(user, alarmNodeId ? getDaqController().byId(alarmNodeId)?.lineId : undefined, 'operate')` |
301
- | `dcw/index.get.ts` | `:18-36` | `visibleLineIds` + `filterByLine` (+ per-line `.filter`) |
302
- | `dcw/lines/index.get.ts` | `:15-18`, `dcw/line/query.get.ts:18-21`, `dcw/runs/index.get.ts:12`, `daq/index.get.ts:27` | `visibleLineIds`/`filterByLine`; `dcw/line/query.get.ts:19-21` throws `403 LINE_FORBIDDEN` when `lineId` is outside the visible set |
303
- | `agent-tools/bindings/index.post.ts` | `:28-32` | `lineMode(user, lineId)` (node line only — see 1.2) |
304
-
305
- **NOT called, where a line-scoped resource is addressed** (all cited in §1.3 with their guards):
306
- `dcw/[id]/read.post.ts` (no line check on a real driver read — worst of these),
307
- `dcw/[id].patch.ts`, `dcw/[id]/param-ledger.get.ts`, `dcw/journal/index.get.ts`,
308
- `dcw/optimizations/index.get.ts`, `dcw/optimizations/[id].get.ts`, `dcw/optimizations/[id]/series.get.ts`,
309
- `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`, `dcw/recipes/[id].delete.ts`,
310
- `dcw/recipes/[id]/index.patch.ts`, `dcw/recipes/[id]/revert.post.ts`, `dcw/products/[id].patch.ts`,
311
- `dcw/products/[id].delete.ts`, `dcw/runs/[id]/close.post.ts`, `dcw/lines/[id].patch.ts`,
312
- `dcw/lines/[id].delete.ts`, `dcw/index.post.ts`, `dcw/templates/*`,
313
- `daq/[id].delete.ts`, `daq/[id]/test.post.ts`, `daq/alarms.get.ts`, `daq/templates/*`,
314
- `daq/test-driver.post.ts`, `dcw/test-driver.post.ts`.
315
-
316
- ---
317
-
318
- ## 2. READ-PATH WRITES (`*.get.ts` that mutate)
319
-
320
- | GET handler | Write / side effect | Quote |
321
- |---|---|---|
322
- | `server/api/workshop/daq/index.get.ts:22` | **DB insert + runtime creation + 250 ms timer**: `provisionLegacyTwins()` → `this.repo.insert(node)` | `ctrl.provisionLegacyTwins()` (`index.get.ts:22`); `daq-controller.ts:1142-1159`: `provisionLegacyTwins(): void {` … `this.repo.insert(node)` (`:1157`) … `this.syncRuntimes()` (`:1159`); `ensureLoop()` at `:1143` starts `this.timer = setInterval(() => this.sweep(), 250)` (`:191`) |
323
- | `server/api/workshop/daq/index.get.ts:20` | Pipeline power-on: queue consumer + TSDB init | `await Promise.all([tsdbReady, getDaqQueue()])` (`:20`); comment `:18` `// ws.ts 出口装配 + 管线上电(幂等;路由模块加载即绑定)` |
324
- | `server/api/workshop/daq/[id]/samples.get.ts:23` (via `:16` guard) | **Starts acquisition**: `samples()` → `ensureLoop()` | route `:23 const points = await getDaqController().samples(id, {...})`; `daq-controller.ts:793-795`: `async samples(id, opts) {` / `this.ensureLoop()` / `await tsdbReady` |
325
- | `server/api/workshop/daq/[id]/frames.get.ts:20` | same | route `:20 const frames = await getDaqController().frames(id, {...})`; `daq-controller.ts:835 this.ensureLoop()` |
326
- | `server/api/workshop/daq/[id]/frames/content.get.ts:23` | same | route `:23 const { data, mime } = await getDaqController().frameContent(...)`; `daq-controller.ts:854 this.ensureLoop()` |
327
- | `server/api/workshop/channels/[id]/index.get.ts:16` | **Assembles lead runtime + starts SchedulerLoop (timer + loop resubmit callback)** | `ensureLeadSchedulerLoop(manager, channelId)` (`:16`), comment `:15` `// 兜底:详情请求时确保 lead 的调度循环已装配(如启动恢复遗漏)`; → `plugins/workshop.ts:73 manager.ensureChannelActive(channelId, options)` → `manager.ts:697-719` `const cr = this.ensureChannelRuntime(channelId)` … `cr.scheduler = loop` / `loop.start()` ⚠(whether `wireMember` immediately spawns a harness subprocess was not traced) |
328
- | `server/api/workshop/dcw/index.get.ts:13`, `dcw/lines/index.get.ts:12`, `dcw/line/query.get.ts:15`, `dcw/runs/[id]/data.get.ts:14` | Global binding mutation: repoints the controller's broadcast sink each request | `bindDcwBroadcast(broadcastSceneEvent)` → `dcw-controller.ts` `setBroadcast(fn)`; `daq/index.get.ts:19`, `dcw/[id]/read.post.ts:14` etc. use `bindDaqHost(broadcastSceneEvent)` |
329
- | `server/api/workshop/dcw/index.get.ts:32` | Over-fetch then JS trim (not a write, but a read amplification) | `ctrl.listHistory(400).filter(h => inLine(nodeLine(h.nodeId))).slice(0, 60)` |
330
-
331
- **Purely read-only GETs (verified line by line):** `agent-tools/list.get.ts`, `agent-tools/approvals/index.get.ts`,
332
- `agent-tools/bindings/index.get.ts`, `agents/index.get.ts`, `agents/[id].get.ts`,
333
- `channels/[id]/events.get.ts`, `channels/[id]/queue.get.ts`, `channels/[id]/tasks/index.get.ts`,
334
- `channels/[id]/terminals.get.ts` (`harness-terminal.ts:451-466` pure map over a Map),
335
- `channels/[id]/messages/index.get.ts`, `channels/[id]/agents/index.get.ts`,
336
- `channels/[id]/memories/index.get.ts`, `channels/[id]/agents/[agentId]/memories/index.get.ts`,
337
- `channels/[id]/plugins/index.get.ts`, `dcw/index.get.ts` (only the binding call above),
338
- `dcw/lines/index.get.ts`, `dcw/line/query.get.ts`, `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`,
339
- `dcw/runs/index.get.ts`, `dcw/runs/[id]/data.get.ts` (`dcw-controller.ts:964-999` queries only),
340
- `dcw/journal/index.get.ts` (`recipe-rollback-manager.ts:652-654`), `dcw/[id]/param-ledger.get.ts` (`:627-649`),
341
- `dcw/optimizations/index.get.ts` (`:656-658`), `dcw/optimizations/[id].get.ts`,
342
- `dcw/optimizations/[id]/series.get.ts` (`:602-623` read-only), `daq/alarms.get.ts` (`daq-controller.ts:600-604`),
343
- `daq/infra.get.ts`, `runtime.get.ts` (`manager.ts:803-808`), `tasks.get.ts`, `mailbox.get.ts`
344
- (`manager.ts:2834-2840`; the query has no LIMIT — see §3).
345
-
346
- Note the memory list GET `channels/[id]/agents/[agentId]/memories/index.get.ts:28` calls `manager.listMemories`
347
- which is a pure read (`manager.ts:1421-1426`).
348
-
349
- ---
350
-
351
- ## 3. UNBOUNDED STATE + PERF
352
-
353
- ### 3.1 Module-level maps/sets/arrays in scope
354
-
355
- 1. **`server/api/workshop/caller.ts:122` — unbounded, no eviction.**
356
- ```ts
357
- const nameCache = new Map<string, { name: string | null, at: number }>()
358
- ```
359
- Writes (all writes in the file):
360
- ```ts
361
- // caller.ts:124-134
362
- const hit = nameCache.get(userId)
363
- if (hit && Date.now() - hit.at < 60_000) return hit.name
364
- ...
365
- nameCache.set(userId, { name, at: Date.now() })
366
- ```
367
- The 60 s TTL is consulted only when the **same** key is read again; there is **no eviction found** (no sweep,
368
- no size cap, no `delete`). Every distinct `ownerUserId` ever rendered by `withOwnerNames` stays for the process
369
- lifetime. `withOwnerNames` (`caller.ts:105-119`) creates a per-call `Map` (`:106`) which is request-scoped (fine).
370
- 2. **`server/services/workshop/scene-events.ts:20-27` — unbounded, no cap.**
371
- ```ts
372
- const g = globalThis as typeof globalThis & {
373
- __sceneEventPeers?: Set<WsPeer>
374
- }
375
-
376
- /** 在线 peer 注册表(ws 路由 sub 成功时登记,断开/退订移除) */
377
- function peers(): Set<WsPeer> {
378
- return g.__sceneEventPeers ??= new Set()
379
- }
380
- ```
381
- Write: `scene-events.ts:50-52 export function registerScenePeer(peer: WsPeer): void { peers().add(peer) }`.
382
- Full analysis in §5.
383
- 3. **`server/services/workshop/runtime/manager.ts:329` — in the invoke path, unbounded, no eviction.**
384
- ```ts
385
- private readonly lastToolInvokeAt = new Map<string, number>()
386
- ```
387
- Writes: `manager.ts:2757 this.lastToolInvokeAt.set(input.agentId, Date.now())` (every `invokeHostTool` call);
388
- reads: `manager.ts:704 toolActivityOf: (agentId: string) => this.lastToolInvokeAt.get(agentId) ?? null`.
389
- No `delete`/cap → one entry per distinct agentId ever invoked, forever (small, but unbounded and attacker-reachable
390
- via §1.1, e.g. spraying `agentId` values that exist).
391
- 4. **`server/services/workshop/agents/tool-approvals.ts:37-43` — bounded.**
392
- ```ts
393
- private pending = new Map<string, { approval: ToolApproval, resolve: ..., timer: NodeJS.Timeout }>()
394
- ...
395
- private history: ToolApproval[] = []
396
- ```
397
- Eviction exists: timeout deletes (`:75 this.pending.delete(approval.id)`), decide deletes (`:92`),
398
- cancel deletes (`:117`), history capped (`:162 if (this.history.length > HISTORY_CAP) this.history.splice(HISTORY_CAP)`).
399
- 5. `scene-events.ts` per-peer visible-lines is stashed on the peer object (`:35`), no separate collection.
400
- 6. Request-scoped only (not leaks): `harnesses.get.ts:18`, `channels/[id]/plugins/index.put.ts:30`,
401
- `channels.post.ts:51`, `daq/alarms/[id]/ack.post.ts` (no map), `ws.ts:188 peerBudget = new WeakMap(...)` (GC-safe).
402
- `harness-terminal.ts` `sessions` Map has a sweep — `harness-terminal.ts:469-479 sweepTerminalSessions(...)`
403
- (`sessions.delete(pid)`), invoked from `manager.ts:816`.
404
-
405
- ### 3.2 Full-table fetch + JS filtering
406
-
407
- * `server/api/workshop/dcw/index.get.ts:29-36` — five full arrays filtered in JS:
408
- `recipes: visible ? ctrl.listRecipes().filter(r => inLine(r.lineId)) : ctrl.listRecipes()`, likewise `runs`,
409
- `products`, `lines`, `lineStates`.
410
- * `server/api/workshop/dcw/index.get.ts:31-33` — **N+1 in JS**: `ctrl.listHistory(400).filter(h => inLine(nodeLine(h.nodeId))).slice(0, 60)`
411
- where `nodeLine = (nodeId: string): string | undefined => ctrl.byId(nodeId)?.lineId` (`:22`) and
412
- `byId` is a linear scan: `dcw-node.repo.ts:40-42 byId(id: string): DcwNode | undefined { return this.list.find(n => n.id === id) }`
413
- → up to 400 × nodeCount comparisons per request.
414
- * `server/api/workshop/agent-tools/bindings/index.get.ts:13` — `getAgentNodeBindingRepo().all()` returns the whole JSON list (`node-bindings.repo.ts:48-50`).
415
- * `server/api/workshop/dcw/recipes/index.get.ts:11` — `{ recipes: repo.list(), runs: repo.listRuns() }`, no filter/limit.
416
- * `server/api/workshop/channels/[id]/tasks/index.get.ts:23` — `taskEngineOf(manager).list(channelId)` →
417
- `task.repo.ts:67 SELECT ${COLS} FROM tasks WHERE channel_id = ? ORDER BY createdAt ASC, rowid ASC` — **no LIMIT**; every task row of the channel is returned.
418
- * `server/api/workshop/mailbox.get.ts:12-13` — client `limit` (uncapped) then fetch-all-and-slice:
419
- `manager.ts:2834-2839 pollMailbox(...) { this.requireMember(...); return this.deps.repos.messages.listPendingByChannelAgent(channelId, callerAgentId).slice(0, limit).map(rowToMessage) }` — the repo query at that call site passes no limit (`message.repo.ts:91-95` has a `LIMIT ?` variant, unused here).
420
- * `manager.ts:1552 listByAgent(targetAgentId, 10_000)` (delete memory path) and
421
- `manager.ts:1489 listByAgentChannel(channelId, TEAM_AGENT_ID, 1_000_000)` (delete team memory) — huge limits.
422
- * Member lookups fetch the whole roster then search: `channels/[id]/agents/[agentId].patch.ts:20-21`,
423
- `[agentId].delete.ts:19-20`, `[agentId]/stop.post.ts:20-21`, `model.patch.ts:22-23`, `position.patch.ts:21-22`,
424
- `range.patch.ts:21-22` all do `const members = await manager.listChannelAgents(channelId)` + `.some(...)`/`.find(...)`.
425
- * `dcw/line/query.get.ts:26` → `dcw-controller.ts:888 getDaqNodeRepo().all().filter(...)`, then one TSDB round trip.
426
- * `dcw/runs/[id]/data.get.ts:19` → `dcw-controller.ts:979-986`: `getDaqNodeRepo().all().filter(...)` then
427
- `await Promise.all(lineNodes.map(async (node) => ... getTsdb().query(node.id, ...)))` — one TSDB query **per node**
428
- (documented as intentional at `:977`).
429
- * `channels/[id]/agents/[agentId]/model.patch.ts:34` — `for (const a of repo.listAll())` full asset list per request.
430
- * `agents/index.get.ts:12` → `withOwnerNames(templates)` does one user lookup per template, 60 s-cached, never evicted (`caller.ts:105-135`).
431
-
432
- ### 3.3 Limits
433
-
434
- Huge / unbounded as passed from the route:
435
-
436
- * `mailbox.get.ts:12-13` — no upper bound: `const limit = Number.parseInt(url.searchParams.get('limit') ?? '50', 10)` … `limit > 0 ? limit : 50`.
437
- * `channels/[id]/tasks/index.get.ts:23` — no limit parameter at all.
438
- * `dcw/index.get.ts:32` — `listHistory(400)` (then slices to 60).
439
- * `dcw/line/query.get.ts:35`, `dcw/[id]/param-ledger.get.ts` (`limit: 30`/`20` internal), `dcw/[id]/samples`:
440
- `limit: num(q.limit)` passed raw, clamped only downstream at the adapter:
441
- `timescale.adapter.ts:109 const limit = Math.min(opts.limit ?? 500, 5000)` / `:157 Math.min(q.limit ?? 2000, 10_000)`;
442
- `sqlite.adapter.ts:128`, `:182` identical.
443
- * Properly capped: `audit.get.ts:15 Math.min(500, Math.max(1, Number(q.limit) || 100))`,
444
- `dcw/journal/index.get.ts:18 Math.min(limit, 500)`, `dcw/optimizations/index.get.ts:20`, `events.get.ts:18 limit: z.coerce.number().int().min(1).max(1000)`,
445
- `messages/index.get.ts:13 max(500)`, `daq/alarms.get.ts:14 Math.min(500, ...)`, `daq/[id]/frames` clamp at
446
- `daq-controller.ts:849 Math.min(Math.max(opts.limit ?? 100, 1), 1000)`, `manager.listChannelMail` `Math.min(500, ...)` (`manager.ts:2874`).
447
-
448
- ---
449
-
450
- ## 4. ERROR PROPAGATION
451
-
452
- ### 4.1 Swallowed errors that hide failures
453
-
454
- * `server/api/workshop/caller.ts:127-132` — user-name resolution failure is invisible:
455
- ```ts
456
- try {
457
- name = userRepository.findById(userId)?.name ?? null
458
- }
459
- catch {
460
- name = null
461
- }
462
- ```
463
- `withOwnerNames` then renders `ownerName: null` (`caller.ts:113-118`) with no log — a broken `users.sqlite`
464
- looks like "no owner" in every list that uses it (`agents/index.get.ts:12`).
465
- * `server/api/workshop/caller.ts:28-33` — `resolveCallerOrNull` swallows every error including 401:
466
- ```ts
467
- try {
468
- return resolveCaller(event)
469
- }
470
- catch {
471
- return null
472
- }
473
- ```
474
- Consumed at `channels/[id]/agents/index.get.ts:20-23`, where a genuine failure of the user path is silently
475
- downgraded to the agent-token path.
476
- * `server/api/workshop/audit.get.ts:24-29` — corrupt audit detail is silently replaced by `{}`:
477
- ```ts
478
- try {
479
- detail = JSON.parse(String(r.detailJson ?? '{}'))
480
- }
481
- catch {
482
- detail = {}
483
- }
484
- ```
485
- * `server/api/workshop/dcw/[id].delete.ts:18` — `const body = await readBody<{ approvalId?: string }>(event).catch(() => ({})) ?? {}` (deliberate, DELETE-with-empty-body).
486
- * Sanctioned-but-opaque fire-and-forget in the memory write paths: `manager.ts:1478`,
487
- `manager.ts:1515-1521`, `manager.ts:1540` — `void vectorizeMemory(...).catch(() => {})` and
488
- `.then(...).catch(() => {})` (vectorization failures never surface).
489
- * `server/services/workshop/permissions.ts:70` and `:76` — `}).catch(() => {})` on both broadcast paths
490
- (`broadcastSceneEvent('permissions.changed')`, `emitPluginEvent('permissions:changed')`): a failed permission-change
491
- broadcast means clients keep stale grants with no log.
492
- * `server/services/workshop/scene-events.ts:74-79` — send failures delete the peer silently (see §5).
493
- * `server/services/workshop/daq/daq-controller.ts:1189` — `.catch(() => {})` on queue start;
494
- `dcw-controller.ts:836` — `.catch(() => {})` on `markLineOffline`.
495
-
496
- ### 4.2 Internal error messages returned to the client (info leak)
497
-
498
- * `server/services/workshop/runtime/manager.ts:2785-2788` — raw internal `Error.message` is returned to the HTTP
499
- caller as tool output (this is the endpoint of §1.1):
500
- ```ts
501
- catch (err) {
502
- const reason = err instanceof Error ? err.message : String(err)
503
- return { text: `工具「${input.tool}」调用失败: ${reason}`, isError: true }
504
- }
505
- ```
506
- e.g. SQLite constraint text, filesystem paths from `saveJsonFileAtomic`, driver/Modbus errors.
507
- * `server/api/workshop/ws.ts:739` — `message: error instanceof Error ? error.message : 'workshop 未初始化'` is sent
508
- to the client in an `error` control frame.
509
- * Generic 500 path is clean: `server/utils/response.ts:44-46` logs the error and returns
510
- `{ code: 'INTERNAL_ERROR', message: '服务器内部错误' }` — no stack, no message.
511
-
512
- ### 4.3 Status-code mis-mapping (failures reported as 500)
513
-
514
- `server/api/workshop/daq/[id]/samples.get.ts` / `frames.get.ts` / `frames/content.get.ts` call controller methods
515
- that throw a **plain** `Error` carrying a non-standard `status` property:
516
-
517
- ```ts
518
- // server/services/workshop/daq/daq-controller.ts:797
519
- if (!node) throw Object.assign(new Error(`数采节点不存在: ${id}`), { status: 404 })
520
- ```
521
- ```ts
522
- // server/services/workshop/daq/daq-controller.ts:857, :862
523
- if (!node) throw Object.assign(new Error(`数采节点不存在: ${id}`), { status: 404 })
524
- ...
525
- if (!row || row.kind !== 'image') throw Object.assign(new Error(`帧不存在: ${id}@${tsMs}`), { status: 404 })
526
- ```
527
-
528
- `defineApiHandler` only honors `AppError` (`response.ts:30-33`) and `H3Error` (`:34-43`); a plain `Error` falls to
529
- `console.error('[api] unhandled error:', error)` + HTTP 500 (`response.ts:44-46`). So "node not found" surfaces to
530
- the UI as a 500, and the internal process is logged as an unhandled error.
531
-
532
- ---
533
-
534
- ## 5. SCENE EVENTS (`server/services/workshop/scene-events.ts`)
535
-
536
- **Subscriber tracking** — a `globalThis`-backed `Set` of duck-typed peers:
537
-
538
- ```ts
539
- // scene-events.ts:14-18
540
- interface WsPeer {
541
- send(data: string | Uint8Array): void
542
- close(code?: number, reason?: string): void
543
- }
544
- ```
545
- ```ts
546
- // scene-events.ts:20-27
547
- const g = globalThis as typeof globalThis & {
548
- __sceneEventPeers?: Set<WsPeer>
549
- }
550
-
551
- /** 在线 peer 注册表(ws 路由 sub 成功时登记,断开/退订移除) */
552
- function peers(): Set<WsPeer> {
553
- return g.__sceneEventPeers ??= new Set()
554
- }
555
- ```
556
-
557
- **Subscribe path** (only after user auth; a per-peer line-visibility set is stamped on the peer object):
558
-
559
- ```ts
560
- // server/api/workshop/ws.ts:174-177
561
- function attachScenePeer(peer: WsPeer, user: { id: string, role: string }): void {
562
- setPeerVisibleLines(peer, visibleLineIds(user))
563
- registerScenePeer(peer)
564
- }
565
- ```
566
- ```ts
567
- // scene-events.ts:34-36
568
- export function setPeerVisibleLines(peer: WsPeer, visible: Set<string> | null): void {
569
- (peer as WsPeer & { __awVisibleLines?: Set<string> | null }).__awVisibleLines = visible
570
- }
571
- ```
572
- ```ts
573
- // scene-events.ts:50-52
574
- export function registerScenePeer(peer: WsPeer): void {
575
- peers().add(peer)
576
- }
577
- ```
578
- Call sites: `ws.ts:176` only (grep: `registerScenePeer` appears in `scene-events.ts:50` and `ws.ts:176`).
579
-
580
- **Unsubscribe path — exists, on socket close and error:**
581
-
582
- ```ts
583
- // server/api/workshop/ws.ts:753-762
584
- close(peer) {
585
- unsubscribePeer(peer)
586
- unregisterScenePeer(peer)
587
- },
588
-
589
- error(peer, error) {
590
- console.error('[workshop-ws] connection error:', error)
591
- unsubscribePeer(peer)
592
- unregisterScenePeer(peer)
593
- },
594
- ```
595
- ```ts
596
- // scene-events.ts:54-56
597
- export function unregisterScenePeer(peer: WsPeer): void {
598
- peers().delete(peer)
599
- }
600
- ```
601
-
602
- **Max subscriber count: NONE.** There is no cap anywhere — grep for `__sceneEventPeers` yields only `scene-events.ts:21,26`;
603
- `registerScenePeer` (`:50-52`) performs an unconditional `add` with no size check, and `sceneEventPeerCount()`
604
- (`:58-60`) is exported but never called by any handler (grep: only its own declaration).
605
-
606
- **Dead-subscriber removal (two mechanisms, both partial):**
607
-
608
- 1. Close/error hooks above.
609
- 2. Lazy removal when a send throws:
610
- ```ts
611
- // scene-events.ts:72-80
612
- for (const peer of peers()) {
613
- if (lineId !== undefined && !peerSeesLine(peer, lineId)) continue
614
- try {
615
- peer.send(frame)
616
- }
617
- catch {
618
- peers().delete(peer)
619
- }
620
- }
621
- ```
622
- same pattern in `broadcastPeerEvent` (`:92-99`).
623
-
624
- **Can a subscriber leak? Yes — with the caveat that the primary paths are covered.**
625
- * The removal depends entirely on the ws route's `close`/`error` hooks firing (`ws.ts:753-762`). There is **no
626
- heartbeat/liveness timeout and no size cap** in the scene-peer set itself: a peer whose `send()` never throws
627
- (e.g. half-open TCP where the write lands in the kernel buffer) and whose close hook never fires stays registered
628
- for the process lifetime. The slow-consumer guard at `ws.ts:199-206` (`peer.close(1013, 'slow consumer')` +
629
- `stream.peers.delete(peer)`) exists but only bounds *stream* fan-out, and relies on that same close hook to reach
630
- `unregisterScenePeer`.
631
- * The registry lives on `globalThis` (`scene-events.ts:20-22`) while peers are created per module instance, so any
632
- module re-evaluation (dev HMR / nitro re-import) keeps the old peer objects in the same Set until their close hook
633
- fires; nothing prunes stale entries.
634
- * Broadcast cost is unbounded per frame: `broadcastSceneEvent` (`:66-81`) serializes once (`:71`) then loops all
635
- peers and `send`s synchronously — with N pages open, every scene event costs N sends (by design per the comment at
636
- `:62-65`), so a subscriber-count leak degrades CPU linearly with no ceiling.
637
-
638
- ---
639
-
640
- ## Priority summary
641
-
642
- 1. **P0** `agent-tools/invoke.post.ts:18+25` + `manager.ts:2750` — any user token + arbitrary `agentId` ⇒ act as any
643
- agent (PLC writes, recipe writes, model promotion, arbitrary training Python). Unfixed; previously documented at
644
- `docs/audit/audit-agents.md:186-249`.
645
- 2. **P0** `bindings/[id].patch.ts` — any user can flip any binding to `mode:'auto'`, silently removing HITL from
646
- another team's control path.
647
- 3. **P1** `dcw/[id]/read.post.ts`, `dcw/[id].patch.ts`, `dcw/index.post.ts`, `dcw/lines/[id].delete.ts`,
648
- `daq/[id].delete.ts`, `daq/[id]/test.post.ts`, `daq/alarms.get.ts`, `dcw/journal/*`, `dcw/optimizations/*`,
649
- `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`, `dcw/[id]/param-ledger.get.ts` — authenticated
650
- but unscoped access to industrial data/control.
651
- 4. **P1** `bindings/index.post.ts:33-38` — binds any `agentId` without resolving or authorizing it.
652
- 5. **P2** GET handlers that start acquisition/pipelines and insert rows (`daq/index.get.ts:20-22`,
653
- `daq/[id]/samples.get.ts`→`daq-controller.ts:794`, `channels/[id]/index.get.ts:16`).
654
- 6. **P2** `daq/test-driver.post.ts` / `dcw/test-driver.post.ts` — caller-controlled outbound connect primitive.
655
- 7. **P3** `caller.ts:122` uncapped `nameCache`; `manager.ts:329` uncapped `lastToolInvokeAt`; no scene-peer cap.
656
- 8. **P3** `daq` 404s surface as 500 (`daq-controller.ts:797,838,857,862` vs `response.ts:29-47`).
657
- 9. **P3** swaggered error text: `manager.ts:2787` returns raw `err.message` to callers.
1
+ # HTTP API authz / read-path / perf audit — agents + runtime + industrial nodes
2
+
3
+ Read-only audit. Every claim cites `file:line` with verbatim code. No source file was modified.
4
+
5
+ Scope read in full: `server/api/workshop/agent-tools/**`, `agents/**`, `channels/**`, `dcw/**`, `daq/**`,
6
+ `runtime.get.ts`, `tasks.get.ts`, `mailbox.get.ts`, `caller.ts`, `server/services/workshop/scene-events.ts`,
7
+ `server/services/workshop/agents/agent-badge.ts`, plus the guards they delegate to
8
+ (`permissions.ts`, `runtime/manager.ts`, `agents/tool-approvals.ts`, `agents/node-bindings.repo.ts`,
9
+ `agents/host-tool-bridge.ts`, `agents/industrial-tools.ts`, `dcw/dcw-controller.ts`, `daq/daq-controller.ts`,
10
+ `aml/job-orchestrator.ts`, `aml/python-runtime.ts`).
11
+
12
+ ---
13
+
14
+ ## 1. AUTHZ AUDIT
15
+
16
+ ### 0. Global facts
17
+
18
+ * No global auth middleware exists. The only middleware is `server/middleware/request-log.ts:7` — logging only.
19
+ * Unmatched `/api/workshop/**` paths hit `server/api/workshop/[...path].ts:12` → static 404.
20
+ * Auth primitives (`server/api/workshop/caller.ts`):
21
+ * `resolveUser` (`:71-79`) — Bearer **user** token, else 401.
22
+ * `resolveCaller` (`:16-24`) — Bearer **agent instance** token, else 401.
23
+ * `resolveAgentOrUser` (`:45-54`) — either domain.
24
+ * `requireAdmin` (`:82-88`), `requireRole` (`:91-97`).
25
+ * Line-grant model (`server/services/workshop/permissions.ts`): `isPrivilegedRole` (`:26-28`),
26
+ `lineMode` (`:31-36`), `visibleLineIds` (`:39-42`), `filterByLine` (`:45-52`),
27
+ `requireLineMode` (`:55-62`). admin/editor bypass everything.
28
+
29
+ ### 1.1 [P0] `agent-tools/invoke.post.ts` — user token + client-supplied `agentId` = full agent impersonation
30
+
31
+ The whole handler (27 lines):
32
+
33
+ ```ts
34
+ // server/api/workshop/agent-tools/invoke.post.ts:16-27
35
+ export default defineApiHandler(async (event) => {
36
+ const agentToken = getHeader(event, 'x-aw-agent-token')
37
+ if (!agentToken) resolveUser(event) // 桥路径免用户鉴权,由 token 校验兜底
38
+ const body = await readBody<{ agentId?: string, tool?: string, args?: Record<string, unknown> }>(event) ?? {}
39
+ const agentId = String(body.agentId ?? '')
40
+ const tool = String(body.tool ?? '')
41
+ const args = body.args ?? {}
42
+ if (!agentId) throw createError({ statusCode: 400, statusMessage: 'agentId required' })
43
+ if (!tool) throw createError({ statusCode: 400, statusMessage: 'tool required' })
44
+ const result = await getWorkshopManager().invokeHostTool({ agentId, tool, args, token: agentToken || undefined })
45
+ return { result }
46
+ })
47
+ ```
48
+
49
+ Note `invoke.post.ts:18`: `resolveUser(event)`'s **return value is discarded** — the authenticated user is never
50
+ passed downstream. `agentId` comes only from the request body (`:20`).
51
+
52
+ The guard it delegates to:
53
+
54
+ ```ts
55
+ // server/services/workshop/runtime/manager.ts:2746-2752
56
+ async invokeHostTool(input: { agentId: string, token?: string, tool: string, args?: Record<string, unknown> }): Promise<{ text: string, isError?: boolean }> {
57
+ const row = this.deps.repos.channelAgents.findById(input.agentId)
58
+ if (!row || row.enabled !== 1) throw new AppError(404, 'NOT_FOUND', `agent 不存在或已停用: ${input.agentId}`)
59
+ // token 鉴权(MCP 桥路径必带;缺省视为服务端内部调用,走 REST 已有用户鉴权)
60
+ if (input.token !== undefined && input.token !== row.token) {
61
+ throw new AppError(401, 'UNAUTHORIZED', 'agent token 校验失败')
62
+ }
63
+ ```
64
+
65
+ `invoke.post.ts:25` passes `token: agentToken || undefined`. **Consequences, exactly:**
66
+
67
+ | Request | `agentToken` | `input.token` | `manager.ts:2750` | Result |
68
+ |---|---|---|---|---|
69
+ | valid **user** Bearer, **no** `x-aw-agent-token`, `agentId` = any other agent | undefined | `undefined` | `input.token !== undefined` is **false** → check **skipped** | **Executes any tool as that agent** |
70
+ | **no** `Authorization` at all, no `x-aw-agent-token` | undefined | — never reached | — | `resolveUser` at `invoke.post.ts:18` throws `AppError(401,'USER_UNAUTHORIZED')` (`caller.ts:76`) → **blocked** |
71
+ | own agent token in `x-aw-agent-token`, `agentId` = another agent | own token | own token | `!== row.token` → true | 401 — **blocked** |
72
+ | valid agent token, matching `agentId` | token | `=== row.token` | passes | legitimate |
73
+
74
+ So the hole is exactly: **valid user token + arbitrary body `agentId` + absent `x-aw-agent-token`.** No ownership,
75
+ membership or role check exists anywhere on this path. The authenticated `ResolvedUser` never reaches `manager`.
76
+
77
+ After the guard, the impersonated identity drives every downstream authorization:
78
+
79
+ ```ts
80
+ // server/services/workshop/runtime/manager.ts:2769-2775
81
+ const identity = {
82
+ agentId: row.id,
83
+ channelId: row.channelId,
84
+ role: (row.role === 'lead' ? 'lead' : 'worker') as 'lead' | 'worker',
85
+ name: row.name,
86
+ }
87
+ return await pluginTool.handler(input.args ?? {}, identity)
88
+ ```
89
+
90
+ ```ts
91
+ // server/services/workshop/runtime/manager.ts:2777-2783
92
+ const runtime = this.ensureAgentRuntime(row.channelId, input.agentId)
93
+ if (runtime) {
94
+ const viaImpl = await runtime.dispatchHostTool(input.tool, input.args ?? {})
95
+ if (viaImpl) return viaImpl
96
+ }
97
+ // 回退:impl 未实现工具面(如 mock)→ 协作工具族直调
98
+ return await this.invokeAgentWorkspaceTool(input.agentId, input.tool, input.args ?? {})
99
+ ```
100
+
101
+ `invokeHostTool` also applies **no role/tool filtering** — unlike `hostToolsForRole`
102
+ (`host-tool-bridge.ts:70-87`) it never consults `LEAD_ONLY_TOOL_NAMES` (`host-tool-bridge.ts:33-43`).
103
+ Every tool is dispatchable for any named agent that exists and is enabled.
104
+
105
+ **Which tool classes are reachable, by whom**
106
+
107
+ Reachable by *any* authenticated user token of *any* role (including a plain `user` with zero line grants):
108
+ pick any lead/worker agent id.
109
+
110
+ * **Read-only** (dispatch table `host-tool-bridge.ts:162-211` + `:219+`):
111
+ `my_industrial_nodes`, `aml_node_catalog`, `aml_dataset_stats`, `aml_job_status`, `aml_job_logs`,
112
+ `aml_leaderboard`, `aml_model_reference`, `dcw_read`, `daq_query`, `daq_frames`, `dcw_journal`, `ops_log`,
113
+ `recipe_log`, `recipe_versions`, `line_context`, `list_other_teams`, `search_other_teams_memory`,
114
+ mailbox/list-mail/memory tools.
115
+ * **Mutating / control-plane**:
116
+ * `dcw_control` — real PLC write. Its only authz is the *impersonated agent's* binding:
117
+ ```ts
118
+ // server/services/workshop/agents/industrial-tools.ts:99-108
119
+ const repo = getAgentNodeBindingRepo()
120
+ const binding: AgentNodeBinding | undefined = nodeId ? repo.find(agentId, nodeId, 'dcw') : undefined
121
+ if (!binding) {
122
+ ```
123
+ HITL applies only when `binding.mode === 'manual'` (`industrial-tools.ts:128`); with `mode:'auto'`
124
+ the write executes immediately (`industrial-tools.ts:157`).
125
+ * `recipe_update` (`host-tool-bridge.ts:207-208`), `recipe_rollback` (`:209-210`), `dcw_judge` (`:193-194`),
126
+ `dcw_rollback` (`:195-196`), `aml_dataset_build` (`:167-168`), `aml_job_cancel` (`:177-178`),
127
+ `send_cross_channel_message` (`manager.ts:2725-2734`), `dispatch_task`, `create_team_agent`,
128
+ `update_team_agent`, `remove_team_agent`, `complete_task`, `report_progress`.
129
+ * `aml_model_promote` — nominally lead-only; its check is against the **DB role of the supplied agentId**:
130
+ ```ts
131
+ // server/services/workshop/agents/industrial-tools.ts:1290-1294
132
+ // 治理硬守卫:晋升仅限 lead 实例(注入层过滤 + 分发层双重校验,HTTP 直调不可绕过)
133
+ const roleRow = getAmlRuntime().db.prepare('SELECT role FROM channel_agents WHERE id = ? AND enabled = 1').get(agentId) as { role?: string } | undefined
134
+ if (roleRow?.role !== 'lead') {
135
+ return amlErr(`aml_model_promote 为 lead 专属工具:实例 ${agentId}(role=${roleRow?.role ?? '未知'})无权晋升模型。请由团队 lead 发起,晋升需人工 HITL 批准。`)
136
+ }
137
+ ```
138
+ Naming a lead's `agentId` satisfies it (then HITL approval at `industrial-tools.ts:1316`).
139
+ * `aml_job_submit` — **arbitrary Python execution on the server host.** The tool takes up to 500 KB of code:
140
+ ```ts
141
+ // server/services/workshop/agents/industrial-tools.ts:1152-1156
142
+ if (!code.trim()) return amlErr('code 必填:train.py 全文(单文件;契约见工具说明)。')
143
+ if (code.length > 512_000) return amlErr(`code 过大(${Math.round(code.length / 1024)}KB),上限 500KB;精简训练代码(模型定义/训练循环拆薄)后重试。`)
144
+ if (!/\bimport\s+amlkit\b/.test(code)) {
145
+ ```
146
+ It is written to disk and executed:
147
+ ```ts
148
+ // server/services/workshop/aml/job-orchestrator.ts:285-287
149
+ if (typeof inline === 'string' && inline.length > 0 && inline.length <= 512_000) {
150
+ writeFileSync(join(workspace, 'train.py'), inline)
151
+ trainFile = 'train.py'
152
+ ```
153
+ ```ts
154
+ // server/services/workshop/aml/job-orchestrator.ts:328
155
+ const exit1 = await runPython(run, vpy, [join(workspace, trainFile)], workspace)
156
+ ```
157
+ No container/OS sandbox; the only mitigation is a scrubbed env
158
+ (`aml/python-runtime.ts:186-214`, `jobEnv` whitelist, "服务器 secrets … 一律不可见").
159
+ The `import amlkit` requirement is a regex (`industrial-tools.ts:1154`), trivially satisfied.
160
+ * Plugin tools: identity is the impersonated agent (`manager.ts:2769-2775`), no independent check —
161
+ e.g. `diag_run` (`server/plugins-builtin/diag-bridge/index.mjs:449-450`) exports line DAQ snapshots,
162
+ `kb_store`/`kb_index` (`server/plugins-builtin/rag-bridge/index.mjs:199,259`) mutate the knowledge base.
163
+
164
+ **Contrast with the sibling endpoint, which does it right:**
165
+
166
+ ```ts
167
+ // server/api/workshop/agent-tools/list.get.ts:17-22
168
+ if (agentToken) {
169
+ const resolved = getWorkshopManager().resolveAgentByToken(String(agentToken))
170
+ if (!resolved || resolved.agentId !== agentId) {
171
+ throw createError({ statusCode: 401, statusMessage: 'agent token 校验失败' })
172
+ }
173
+ }
174
+ ```
175
+
176
+ **Enumeration is trivial**, so no guessing is needed: `agent-tools/bindings/index.get.ts:13` returns
177
+ `{ bindings: agentId ? getAgentNodeBindingRepo().byAgent(agentId) : getAgentNodeBindingRepo().all() }` — with no
178
+ `agentId` query param, **every** binding of every agent (agentId + nodeId + kind + mode) is returned to any
179
+ authenticated user.
180
+
181
+ ⚠UNVERIFIED: I did not execute a live exploit; the conclusion is from the code paths above (all read directly).
182
+ Corroboration: the same finding is already written up at `docs/audit/audit-agents.md:186-249` ("the manager's
183
+ token check is **skipped entirely** when no token is supplied … Minimal hardening: in `invokeHostTool` change the
184
+ token check to `if (input.token !== row.token)`") — and the code is **unchanged**, i.e. unfixed.
185
+
186
+ ### 1.2 `bindings/index.post.ts` — permission check quoted; **target agent ownership NOT verified**
187
+
188
+ ```ts
189
+ // server/api/workshop/agent-tools/bindings/index.post.ts:16-39
190
+ export default defineApiHandler(async (event) => {
191
+ const user = resolveUser(event)
192
+ const body = await readBody<{ agentId?: string, nodeId?: string, kind?: 'dcw' | 'daq', mode?: 'auto' | 'manual' }>(event) ?? {}
193
+ const kind = body.kind ?? 'dcw'
194
+ const nodeId = String(body.nodeId ?? '')
195
+ // 绑定前置:节点必须存在,且用户对其所属产线有足额权限
196
+ const lineId = kind === 'daq'
197
+ ? getDaqController().byId(nodeId)?.lineId
198
+ : getDcwController().byId(nodeId)?.lineId
199
+ if (!lineId) {
200
+ throw new AppError(404, ErrorCodes.NOT_FOUND, `${kind === 'daq' ? '数采' : '写控'}节点不存在: ${nodeId}`)
201
+ }
202
+ const mode = lineMode(user, lineId)
203
+ const needOperate = kind === 'dcw'
204
+ if (mode === 'none' || (needOperate && mode !== 'operate')) {
205
+ throw new AppError(403, 'LINE_FORBIDDEN', `无该产线权限:绑定${kind === 'daq' ? '数采' : '写控'}节点需对产线「${lineId}」拥有${needOperate ? '可操控' : '仅查看'}及以上权限`)
206
+ }
207
+ const binding = getAgentNodeBindingRepo().bind(
208
+ String(body.agentId ?? ''),
209
+ nodeId,
210
+ kind,
211
+ body.mode ?? 'auto',
212
+ )
213
+ return { binding }
214
+ })
215
+ ```
216
+
217
+ The check at `:28-32` covers **the node's line only**. `body.agentId` is never resolved, never checked for
218
+ existence, never checked for ownership/membership:
219
+
220
+ ```ts
221
+ // server/services/workshop/agents/node-bindings.repo.ts:73-78
222
+ bind(agentId: string, nodeId: string, kind: AgentNodeBindingKind, mode: AgentNodeBindingMode): AgentNodeBinding {
223
+ if (!agentId) throw new AppError(400, ErrorCodes.VALIDATION_ERROR, 'agentId 必填')
224
+ if (!nodeId) throw new AppError(400, ErrorCodes.VALIDATION_ERROR, 'nodeId 必填')
225
+ if (kind !== 'dcw' && kind !== 'daq') throw new AppError(400, ErrorCodes.VALIDATION_ERROR, `未知节点类型: ${kind}`)
226
+ if (mode !== 'auto' && mode !== 'manual') throw new AppError(400, ErrorCodes.VALIDATION_ERROR, `未知控制模式: ${mode}`)
227
+ ```
228
+
229
+ Effect: **any** authenticated user with `operate` on one line can grant that control right to **any** agent id —
230
+ their own, another user's agent, or a lead in an unrelated channel — or re-bind an existing agent with
231
+ `"mode":"auto"` to strip HITL, because `bind()` updates the mode of an existing row
232
+ (`node-bindings.repo.ts:79-83`: `if (prev) { prev.mode = mode; this.flush(); return prev }`).
233
+ The granting user need not own, belong to, or even know anything about that agent.
234
+
235
+ ### 1.3 Handlers that authenticate but never authorize the resource (IDOR)
236
+
237
+ All of these call `resolveUser` and **discard the result** or use it only for logging — no ownership/role/line check:
238
+
239
+ | Handler | Auth | Missing check | Impact |
240
+ |---|---|---|---|
241
+ | `agent-tools/bindings/[id].patch.ts:10-13` | `resolveUser(event)` (`:10`) | owner / role / line | Any user flips **any** binding's mode: `getAgentNodeBindingRepo().setMode(id, body.mode ?? 'auto')` → `"auto"` **disables HITL** for another team's writes (`node-bindings.repo.ts:97-104`) |
242
+ | `agent-tools/bindings/[id].delete.ts:11-17` | `resolveUser(event)` (`:11`) | owner / role / line | Any user unbinds any agent↔node pair (`:17 !repo.unbind(id)`), also cancels that agent's pending approvals (`:19 getToolApprovals().cancelPendingFor(...)`) |
243
+ | `agent-tools/bindings/index.get.ts:10-13` | `resolveUser(event)` (`:10`) | any scope filter | Full cross-tenant binding dump (see 1.1) |
244
+ | `agent-tools/approvals/index.get.ts:11-16` | `resolveUser(event)` (`:11`) | ownership of `agentId` | Any user lists pending approvals of any agent: `getToolApprovals().listPending(agentId)`; history via `scope=history` |
245
+ | `agent-tools/list.get.ts:13-23` | user token path (`:13`) | `agentId` ownership | Tool-schema disclosure for any agent |
246
+ | `dcw/[id]/read.post.ts:13-16` | `resolveUser(event)` (`:13`) | **`requireLineMode` absent** | Any user triggers a real driver read on **any** dcw node id: `await getDcwController().readNow(id)` (`:16`) — cross-line data read |
247
+ | `dcw/[id].patch.ts:12-16` | `resolveUser(event)` (`:12`) | role / line | Any user patches **any** dcw node: name/driver/range/enabled/position — `getDcwController().patch(id, body)` (`:16`). Widening `min/max` weakens the write interlock that `dcw_control` depends on |
248
+ | `dcw/index.post.ts:13-16` | `resolveUser(event)` (`:13`) | role / line | Any user creates a write-control node (the comment at `:17` calls it "获得直写物理设备能力的入口") |
249
+ | `dcw/lines/[id].delete.ts:15-21` | `resolveUser(event)` (`:15`) | role / line | Any user deletes **any** line; `?purge=1` cascades nodes/products/recipes (`:19-21`). The sibling create is admin/editor-gated (`dcw/lines/index.post.ts:14`) |
250
+ | `dcw/lines/[id].patch.ts:11-14` | `resolveUser(event)` (`:11`) | role / line | Any user renames/recolors any line |
251
+ | `dcw/recipes/[id].delete.ts:10-12` | `resolveUser(event)` (`:10`) | role | Any user deletes any recipe |
252
+ | `dcw/recipes/index.post.ts:11-13` | `resolveUser(event)` (`:11`) | role | Any user creates recipes |
253
+ | `dcw/recipes/[id]/index.patch.ts:12` , `[id]/revert.post.ts:12` | `resolveUser` | role | Any user edits/rewrites any recipe version history |
254
+ | `dcw/products/[id].delete.ts:11-14`, `[id].patch.ts:12-16` | `resolveUser` | role | Any user deletes/edits any product (create requires admin/editor, `products/index.post.ts:12`) |
255
+ | `dcw/runs/[id]/close.post.ts:11-14` | `resolveUser(event)` (`:11`) | role | Any user closes any production run window |
256
+ | `dcw/templates/index.post.ts:11-13`, `[key].patch.ts:11-14`, `[key].delete.ts:10-12` | `resolveUser` | role | Any user mutates control templates (driver configs) |
257
+ | `dcw/test-driver.post.ts:12-15` | `resolveUser(event)` (`:12`) | role | Any user makes the server open outbound connections with a caller-supplied `driverConfig`: `getDcwController().testDriver(body.driver ?? 'mock', body.driverConfig ?? {})` |
258
+ | `daq/test-driver.post.ts:17-21` | `resolveUser(event)` (`:17`) | role | Same SSRF-ish connect primitive for DAQ protocols |
259
+ | `daq/[id]/test.post.ts:12-15` | `resolveUser(event)` (`:12`) | **`requireLineMode` absent** | Any user triggers a real connection test on any DAQ node (`:15 testNode(id)`); the dcw twin requires `operate` (`dcw/[id]/test.post.ts:16`) |
260
+ | `daq/[id].delete.ts:13-17` | `resolveUser(event)` (`:13`) | **`requireLineMode` absent** | Any user deletes any DAQ node; the patch twin requires `operate` (`daq/[id].patch.ts:19`) |
261
+ | `daq/infra/reconnect.post.ts:9-15` | `resolveUser(event)` (`:9`) | role | Any user triggers infra bring-up: `await apply(daqInfraConfig())` → `__daqApplyInfra` runs `docker compose -f … up -d …` (`server/services/workshop/daq/infra.ts:85`) |
262
+ | `daq/alarms.get.ts:11-15` | `resolveUser(event)` (`:11`) | line filter | Any user reads **all** alarms of **all** lines (`:15 listAlarms(scope, limit)`); `daq/index.get.ts:27` filters by line, this one does not |
263
+ | `daq/templates/*` (`index.post.ts:12`, `[key].patch.ts:12`, `[key].delete.ts:12`) | `resolveUser` | role | Any user mutates signal templates |
264
+ | `dcw/journal/index.get.ts:11-19` | `resolveUser(event)` (`:11`) | line scope | Any user reads the full parameter ledger for any `lineId`/`nodeId` supplied in the query |
265
+ | `dcw/[id]/param-ledger.get.ts:11-13` | `resolveUser(event)` (`:11`) | **`requireLineMode` absent** | Any user reads any node's setpoints/targets/last-good values |
266
+ | `dcw/optimizations/index.get.ts:11-21`, `[id].get.ts:11-16`, `[id]/series.get.ts:12-17` | `resolveUser` | line scope | Any user reads any line's optimization records + raw DAQ series |
267
+ | `dcw/recipes/index.get.ts:9-11` | `resolveUser(event)` (`:9`) | line scope | Returns `repo.list()`/`listRuns()` with **no** `visibleLineIds` filter (contrast `dcw/index.get.ts:29-30`, `dcw/runs/index.get.ts:12`) |
268
+ | `dcw/recipes/[id]/versions.get.ts:11-13` | `resolveUser` | line scope | Any user reads any recipe's full parameter version history |
269
+ | `server/api/workshop/runtime.get.ts:9-10` | `resolveUser(event)` (`:9`) | role | Any user enumerates wired harness agent ids + active channels |
270
+ | `server/api/workshop/daq/infra.get.ts:9` | `resolveUser` | role | Infra status disclosure (low) |
271
+
272
+ ### 1.4 Handlers that ARE correctly guarded (control set)
273
+
274
+ * `agents/[id].get.ts:16-17` → `manager.requireTemplateReadable`; `agents/[id].patch.ts:28`, `[id].delete.ts:17` → `requireWritable` (`manager.ts:1083-1090`).
275
+ * `channels/[id].delete.ts:14-15`, `index.patch.ts:35-36`, `agents/index.post.ts:32-33`, `agents/[agentId].delete.ts:17-18`, `[agentId].patch.ts:18-19`, `model.patch.ts:20-21`, `position.patch.ts:19-20`, `range.patch.ts:19-20`, `stop.post.ts:18-19` → `getChannelForUser` + `requireWritable` + membership check (`manager.ts:1103-1110`, `:1067-1074`).
276
+ * `channels/[id]/messages/index.post.ts:38-39`, `tasks/index.post.ts:67-68`, `tasks/index.get.ts:22`, `queue.get.ts:17`, `events.get.ts:28`, `terminals.get.ts:19`, `messages/index.get.ts:21`, `channels/[id]/index.get.ts:13` → `getChannelForUser` (owner-or-legacy-public read).
277
+ * Memory planes: `channels/[id]/memories/**` and `channels/[id]/agents/[agentId]/memories/**` → `resolveAgentOrUser` + same-channel or `getChannelForUser`+`requireOwned`, and the manager re-checks role: `manager.ts:1508` (`仅本人或 lead 可策展 Agent 记忆`), `:1463` (`仅 lead 可写团队记忆`), `:1487`, `:1548`.
278
+ ⚠ Note (by design, not a bug): `manager.searchAgentMemories` (`manager.ts:1441-1446`) only calls `requireMember(channelId, callerAgentId)` — **any teammate agent in the channel can search another agent's private memory** by passing that agent's id in the URL with `scope:'private'`.
279
+ * `agents/subscribe.post.ts:17-19` → `resolveCaller` + `manager.subscribe` → `requireMember` + same-channel target check (`manager.ts:2884-2893`).
280
+ * `tasks.get.ts:11-12` / `mailbox.get.ts:10-13` → `resolveCaller`, scope forced to `caller.channelId`/`caller.id`.
281
+ * Role-gated: `dcw/controller.post.ts:15`, `dcw/[id].delete.ts:14`, `dcw/lines/index.post.ts:14`, `dcw/journal/node/[nodeId]/rollback.post.ts:15`, `dcw/optimizations/[id]/judge.post.ts:15`, `[id]/rollback.post.ts:17`, `dcw/products/index.post.ts:12`, `dcw/recipes/[id]/apply.post.ts:15`, `[id]/mark-good.post.ts:13`, `[id]/rollback-good.post.ts:13`, `dcw/runs/[id]/rollback.post.ts:14`, `daq/controller.post.ts:29,49`, `daq/index.post.ts:16` (all `requireRole`/`gateDangerous`).
282
+ * `agent-tools/approvals/[id]/decide.post.ts:12-19` — `resolveUser` **used** (decider recorded + `audit`).
283
+
284
+ ### 1.5 `requireLineMode` / `lineMode` audit for daq/dcw handlers
285
+
286
+ **Called (correct):**
287
+
288
+ | Handler | Line | Quote |
289
+ |---|---|---|
290
+ | `dcw/[id]/write.post.ts` | `:19` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
291
+ | `dcw/[id]/test.post.ts` | `:16` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
292
+ | `dcw/[id]/bind.post.ts` | `:16` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
293
+ | `dcw/[id]/bindings.put.ts` | `:17` | `requireLineMode(user, getDcwController().byId(id)?.lineId, 'operate')` |
294
+ | `dcw/lines/[id]/start.post.ts` | `:20` | `requireLineMode(user, id, 'operate')` |
295
+ | `dcw/lines/[id]/stop.post.ts` | `:20` | `requireLineMode(user, id, 'operate')` |
296
+ | `dcw/runs/[id]/data.get.ts` | `:18` | `requireLineMode(user, run?.lineId, 'readonly')` |
297
+ | `daq/[id].patch.ts` | `:19` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'operate')` |
298
+ | `daq/[id]/bind.post.ts` | `:18`, `daq/[id]/bindings.put.ts:18` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'operate')` |
299
+ | `daq/[id]/samples.get.ts` | `:16`, `daq/[id]/frames.get.ts:16`, `daq/[id]/frames/content.get.ts:17` | `requireLineMode(user, getDaqController().byId(id)?.lineId, 'readonly')` |
300
+ | `daq/alarms/[id]/ack.post.ts` | `:17` | `requireLineMode(user, alarmNodeId ? getDaqController().byId(alarmNodeId)?.lineId : undefined, 'operate')` |
301
+ | `dcw/index.get.ts` | `:18-36` | `visibleLineIds` + `filterByLine` (+ per-line `.filter`) |
302
+ | `dcw/lines/index.get.ts` | `:15-18`, `dcw/line/query.get.ts:18-21`, `dcw/runs/index.get.ts:12`, `daq/index.get.ts:27` | `visibleLineIds`/`filterByLine`; `dcw/line/query.get.ts:19-21` throws `403 LINE_FORBIDDEN` when `lineId` is outside the visible set |
303
+ | `agent-tools/bindings/index.post.ts` | `:28-32` | `lineMode(user, lineId)` (node line only — see 1.2) |
304
+
305
+ **NOT called, where a line-scoped resource is addressed** (all cited in §1.3 with their guards):
306
+ `dcw/[id]/read.post.ts` (no line check on a real driver read — worst of these),
307
+ `dcw/[id].patch.ts`, `dcw/[id]/param-ledger.get.ts`, `dcw/journal/index.get.ts`,
308
+ `dcw/optimizations/index.get.ts`, `dcw/optimizations/[id].get.ts`, `dcw/optimizations/[id]/series.get.ts`,
309
+ `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`, `dcw/recipes/[id].delete.ts`,
310
+ `dcw/recipes/[id]/index.patch.ts`, `dcw/recipes/[id]/revert.post.ts`, `dcw/products/[id].patch.ts`,
311
+ `dcw/products/[id].delete.ts`, `dcw/runs/[id]/close.post.ts`, `dcw/lines/[id].patch.ts`,
312
+ `dcw/lines/[id].delete.ts`, `dcw/index.post.ts`, `dcw/templates/*`,
313
+ `daq/[id].delete.ts`, `daq/[id]/test.post.ts`, `daq/alarms.get.ts`, `daq/templates/*`,
314
+ `daq/test-driver.post.ts`, `dcw/test-driver.post.ts`.
315
+
316
+ ---
317
+
318
+ ## 2. READ-PATH WRITES (`*.get.ts` that mutate)
319
+
320
+ | GET handler | Write / side effect | Quote |
321
+ |---|---|---|
322
+ | `server/api/workshop/daq/index.get.ts:22` | **DB insert + runtime creation + 250 ms timer**: `provisionLegacyTwins()` → `this.repo.insert(node)` | `ctrl.provisionLegacyTwins()` (`index.get.ts:22`); `daq-controller.ts:1142-1159`: `provisionLegacyTwins(): void {` … `this.repo.insert(node)` (`:1157`) … `this.syncRuntimes()` (`:1159`); `ensureLoop()` at `:1143` starts `this.timer = setInterval(() => this.sweep(), 250)` (`:191`) |
323
+ | `server/api/workshop/daq/index.get.ts:20` | Pipeline power-on: queue consumer + TSDB init | `await Promise.all([tsdbReady, getDaqQueue()])` (`:20`); comment `:18` `// ws.ts 出口装配 + 管线上电(幂等;路由模块加载即绑定)` |
324
+ | `server/api/workshop/daq/[id]/samples.get.ts:23` (via `:16` guard) | **Starts acquisition**: `samples()` → `ensureLoop()` | route `:23 const points = await getDaqController().samples(id, {...})`; `daq-controller.ts:793-795`: `async samples(id, opts) {` / `this.ensureLoop()` / `await tsdbReady` |
325
+ | `server/api/workshop/daq/[id]/frames.get.ts:20` | same | route `:20 const frames = await getDaqController().frames(id, {...})`; `daq-controller.ts:835 this.ensureLoop()` |
326
+ | `server/api/workshop/daq/[id]/frames/content.get.ts:23` | same | route `:23 const { data, mime } = await getDaqController().frameContent(...)`; `daq-controller.ts:854 this.ensureLoop()` |
327
+ | `server/api/workshop/channels/[id]/index.get.ts:16` | **Assembles lead runtime + starts SchedulerLoop (timer + loop resubmit callback)** | `ensureLeadSchedulerLoop(manager, channelId)` (`:16`), comment `:15` `// 兜底:详情请求时确保 lead 的调度循环已装配(如启动恢复遗漏)`; → `plugins/workshop.ts:73 manager.ensureChannelActive(channelId, options)` → `manager.ts:697-719` `const cr = this.ensureChannelRuntime(channelId)` … `cr.scheduler = loop` / `loop.start()` ⚠(whether `wireMember` immediately spawns a harness subprocess was not traced) |
328
+ | `server/api/workshop/dcw/index.get.ts:13`, `dcw/lines/index.get.ts:12`, `dcw/line/query.get.ts:15`, `dcw/runs/[id]/data.get.ts:14` | Global binding mutation: repoints the controller's broadcast sink each request | `bindDcwBroadcast(broadcastSceneEvent)` → `dcw-controller.ts` `setBroadcast(fn)`; `daq/index.get.ts:19`, `dcw/[id]/read.post.ts:14` etc. use `bindDaqHost(broadcastSceneEvent)` |
329
+ | `server/api/workshop/dcw/index.get.ts:32` | Over-fetch then JS trim (not a write, but a read amplification) | `ctrl.listHistory(400).filter(h => inLine(nodeLine(h.nodeId))).slice(0, 60)` |
330
+
331
+ **Purely read-only GETs (verified line by line):** `agent-tools/list.get.ts`, `agent-tools/approvals/index.get.ts`,
332
+ `agent-tools/bindings/index.get.ts`, `agents/index.get.ts`, `agents/[id].get.ts`,
333
+ `channels/[id]/events.get.ts`, `channels/[id]/queue.get.ts`, `channels/[id]/tasks/index.get.ts`,
334
+ `channels/[id]/terminals.get.ts` (`harness-terminal.ts:451-466` pure map over a Map),
335
+ `channels/[id]/messages/index.get.ts`, `channels/[id]/agents/index.get.ts`,
336
+ `channels/[id]/memories/index.get.ts`, `channels/[id]/agents/[agentId]/memories/index.get.ts`,
337
+ `channels/[id]/plugins/index.get.ts`, `dcw/index.get.ts` (only the binding call above),
338
+ `dcw/lines/index.get.ts`, `dcw/line/query.get.ts`, `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`,
339
+ `dcw/runs/index.get.ts`, `dcw/runs/[id]/data.get.ts` (`dcw-controller.ts:964-999` queries only),
340
+ `dcw/journal/index.get.ts` (`recipe-rollback-manager.ts:652-654`), `dcw/[id]/param-ledger.get.ts` (`:627-649`),
341
+ `dcw/optimizations/index.get.ts` (`:656-658`), `dcw/optimizations/[id].get.ts`,
342
+ `dcw/optimizations/[id]/series.get.ts` (`:602-623` read-only), `daq/alarms.get.ts` (`daq-controller.ts:600-604`),
343
+ `daq/infra.get.ts`, `runtime.get.ts` (`manager.ts:803-808`), `tasks.get.ts`, `mailbox.get.ts`
344
+ (`manager.ts:2834-2840`; the query has no LIMIT — see §3).
345
+
346
+ Note the memory list GET `channels/[id]/agents/[agentId]/memories/index.get.ts:28` calls `manager.listMemories`
347
+ which is a pure read (`manager.ts:1421-1426`).
348
+
349
+ ---
350
+
351
+ ## 3. UNBOUNDED STATE + PERF
352
+
353
+ ### 3.1 Module-level maps/sets/arrays in scope
354
+
355
+ 1. **`server/api/workshop/caller.ts:122` — unbounded, no eviction.**
356
+ ```ts
357
+ const nameCache = new Map<string, { name: string | null, at: number }>()
358
+ ```
359
+ Writes (all writes in the file):
360
+ ```ts
361
+ // caller.ts:124-134
362
+ const hit = nameCache.get(userId)
363
+ if (hit && Date.now() - hit.at < 60_000) return hit.name
364
+ ...
365
+ nameCache.set(userId, { name, at: Date.now() })
366
+ ```
367
+ The 60 s TTL is consulted only when the **same** key is read again; there is **no eviction found** (no sweep,
368
+ no size cap, no `delete`). Every distinct `ownerUserId` ever rendered by `withOwnerNames` stays for the process
369
+ lifetime. `withOwnerNames` (`caller.ts:105-119`) creates a per-call `Map` (`:106`) which is request-scoped (fine).
370
+ 2. **`server/services/workshop/scene-events.ts:20-27` — unbounded, no cap.**
371
+ ```ts
372
+ const g = globalThis as typeof globalThis & {
373
+ __sceneEventPeers?: Set<WsPeer>
374
+ }
375
+
376
+ /** 在线 peer 注册表(ws 路由 sub 成功时登记,断开/退订移除) */
377
+ function peers(): Set<WsPeer> {
378
+ return g.__sceneEventPeers ??= new Set()
379
+ }
380
+ ```
381
+ Write: `scene-events.ts:50-52 export function registerScenePeer(peer: WsPeer): void { peers().add(peer) }`.
382
+ Full analysis in §5.
383
+ 3. **`server/services/workshop/runtime/manager.ts:329` — in the invoke path, unbounded, no eviction.**
384
+ ```ts
385
+ private readonly lastToolInvokeAt = new Map<string, number>()
386
+ ```
387
+ Writes: `manager.ts:2757 this.lastToolInvokeAt.set(input.agentId, Date.now())` (every `invokeHostTool` call);
388
+ reads: `manager.ts:704 toolActivityOf: (agentId: string) => this.lastToolInvokeAt.get(agentId) ?? null`.
389
+ No `delete`/cap → one entry per distinct agentId ever invoked, forever (small, but unbounded and attacker-reachable
390
+ via §1.1, e.g. spraying `agentId` values that exist).
391
+ 4. **`server/services/workshop/agents/tool-approvals.ts:37-43` — bounded.**
392
+ ```ts
393
+ private pending = new Map<string, { approval: ToolApproval, resolve: ..., timer: NodeJS.Timeout }>()
394
+ ...
395
+ private history: ToolApproval[] = []
396
+ ```
397
+ Eviction exists: timeout deletes (`:75 this.pending.delete(approval.id)`), decide deletes (`:92`),
398
+ cancel deletes (`:117`), history capped (`:162 if (this.history.length > HISTORY_CAP) this.history.splice(HISTORY_CAP)`).
399
+ 5. `scene-events.ts` per-peer visible-lines is stashed on the peer object (`:35`), no separate collection.
400
+ 6. Request-scoped only (not leaks): `harnesses.get.ts:18`, `channels/[id]/plugins/index.put.ts:30`,
401
+ `channels.post.ts:51`, `daq/alarms/[id]/ack.post.ts` (no map), `ws.ts:188 peerBudget = new WeakMap(...)` (GC-safe).
402
+ `harness-terminal.ts` `sessions` Map has a sweep — `harness-terminal.ts:469-479 sweepTerminalSessions(...)`
403
+ (`sessions.delete(pid)`), invoked from `manager.ts:816`.
404
+
405
+ ### 3.2 Full-table fetch + JS filtering
406
+
407
+ * `server/api/workshop/dcw/index.get.ts:29-36` — five full arrays filtered in JS:
408
+ `recipes: visible ? ctrl.listRecipes().filter(r => inLine(r.lineId)) : ctrl.listRecipes()`, likewise `runs`,
409
+ `products`, `lines`, `lineStates`.
410
+ * `server/api/workshop/dcw/index.get.ts:31-33` — **N+1 in JS**: `ctrl.listHistory(400).filter(h => inLine(nodeLine(h.nodeId))).slice(0, 60)`
411
+ where `nodeLine = (nodeId: string): string | undefined => ctrl.byId(nodeId)?.lineId` (`:22`) and
412
+ `byId` is a linear scan: `dcw-node.repo.ts:40-42 byId(id: string): DcwNode | undefined { return this.list.find(n => n.id === id) }`
413
+ → up to 400 × nodeCount comparisons per request.
414
+ * `server/api/workshop/agent-tools/bindings/index.get.ts:13` — `getAgentNodeBindingRepo().all()` returns the whole JSON list (`node-bindings.repo.ts:48-50`).
415
+ * `server/api/workshop/dcw/recipes/index.get.ts:11` — `{ recipes: repo.list(), runs: repo.listRuns() }`, no filter/limit.
416
+ * `server/api/workshop/channels/[id]/tasks/index.get.ts:23` — `taskEngineOf(manager).list(channelId)` →
417
+ `task.repo.ts:67 SELECT ${COLS} FROM tasks WHERE channel_id = ? ORDER BY createdAt ASC, rowid ASC` — **no LIMIT**; every task row of the channel is returned.
418
+ * `server/api/workshop/mailbox.get.ts:12-13` — client `limit` (uncapped) then fetch-all-and-slice:
419
+ `manager.ts:2834-2839 pollMailbox(...) { this.requireMember(...); return this.deps.repos.messages.listPendingByChannelAgent(channelId, callerAgentId).slice(0, limit).map(rowToMessage) }` — the repo query at that call site passes no limit (`message.repo.ts:91-95` has a `LIMIT ?` variant, unused here).
420
+ * `manager.ts:1552 listByAgent(targetAgentId, 10_000)` (delete memory path) and
421
+ `manager.ts:1489 listByAgentChannel(channelId, TEAM_AGENT_ID, 1_000_000)` (delete team memory) — huge limits.
422
+ * Member lookups fetch the whole roster then search: `channels/[id]/agents/[agentId].patch.ts:20-21`,
423
+ `[agentId].delete.ts:19-20`, `[agentId]/stop.post.ts:20-21`, `model.patch.ts:22-23`, `position.patch.ts:21-22`,
424
+ `range.patch.ts:21-22` all do `const members = await manager.listChannelAgents(channelId)` + `.some(...)`/`.find(...)`.
425
+ * `dcw/line/query.get.ts:26` → `dcw-controller.ts:888 getDaqNodeRepo().all().filter(...)`, then one TSDB round trip.
426
+ * `dcw/runs/[id]/data.get.ts:19` → `dcw-controller.ts:979-986`: `getDaqNodeRepo().all().filter(...)` then
427
+ `await Promise.all(lineNodes.map(async (node) => ... getTsdb().query(node.id, ...)))` — one TSDB query **per node**
428
+ (documented as intentional at `:977`).
429
+ * `channels/[id]/agents/[agentId]/model.patch.ts:34` — `for (const a of repo.listAll())` full asset list per request.
430
+ * `agents/index.get.ts:12` → `withOwnerNames(templates)` does one user lookup per template, 60 s-cached, never evicted (`caller.ts:105-135`).
431
+
432
+ ### 3.3 Limits
433
+
434
+ Huge / unbounded as passed from the route:
435
+
436
+ * `mailbox.get.ts:12-13` — no upper bound: `const limit = Number.parseInt(url.searchParams.get('limit') ?? '50', 10)` … `limit > 0 ? limit : 50`.
437
+ * `channels/[id]/tasks/index.get.ts:23` — no limit parameter at all.
438
+ * `dcw/index.get.ts:32` — `listHistory(400)` (then slices to 60).
439
+ * `dcw/line/query.get.ts:35`, `dcw/[id]/param-ledger.get.ts` (`limit: 30`/`20` internal), `dcw/[id]/samples`:
440
+ `limit: num(q.limit)` passed raw, clamped only downstream at the adapter:
441
+ `timescale.adapter.ts:109 const limit = Math.min(opts.limit ?? 500, 5000)` / `:157 Math.min(q.limit ?? 2000, 10_000)`;
442
+ `sqlite.adapter.ts:128`, `:182` identical.
443
+ * Properly capped: `audit.get.ts:15 Math.min(500, Math.max(1, Number(q.limit) || 100))`,
444
+ `dcw/journal/index.get.ts:18 Math.min(limit, 500)`, `dcw/optimizations/index.get.ts:20`, `events.get.ts:18 limit: z.coerce.number().int().min(1).max(1000)`,
445
+ `messages/index.get.ts:13 max(500)`, `daq/alarms.get.ts:14 Math.min(500, ...)`, `daq/[id]/frames` clamp at
446
+ `daq-controller.ts:849 Math.min(Math.max(opts.limit ?? 100, 1), 1000)`, `manager.listChannelMail` `Math.min(500, ...)` (`manager.ts:2874`).
447
+
448
+ ---
449
+
450
+ ## 4. ERROR PROPAGATION
451
+
452
+ ### 4.1 Swallowed errors that hide failures
453
+
454
+ * `server/api/workshop/caller.ts:127-132` — user-name resolution failure is invisible:
455
+ ```ts
456
+ try {
457
+ name = userRepository.findById(userId)?.name ?? null
458
+ }
459
+ catch {
460
+ name = null
461
+ }
462
+ ```
463
+ `withOwnerNames` then renders `ownerName: null` (`caller.ts:113-118`) with no log — a broken `users.sqlite`
464
+ looks like "no owner" in every list that uses it (`agents/index.get.ts:12`).
465
+ * `server/api/workshop/caller.ts:28-33` — `resolveCallerOrNull` swallows every error including 401:
466
+ ```ts
467
+ try {
468
+ return resolveCaller(event)
469
+ }
470
+ catch {
471
+ return null
472
+ }
473
+ ```
474
+ Consumed at `channels/[id]/agents/index.get.ts:20-23`, where a genuine failure of the user path is silently
475
+ downgraded to the agent-token path.
476
+ * `server/api/workshop/audit.get.ts:24-29` — corrupt audit detail is silently replaced by `{}`:
477
+ ```ts
478
+ try {
479
+ detail = JSON.parse(String(r.detailJson ?? '{}'))
480
+ }
481
+ catch {
482
+ detail = {}
483
+ }
484
+ ```
485
+ * `server/api/workshop/dcw/[id].delete.ts:18` — `const body = await readBody<{ approvalId?: string }>(event).catch(() => ({})) ?? {}` (deliberate, DELETE-with-empty-body).
486
+ * Sanctioned-but-opaque fire-and-forget in the memory write paths: `manager.ts:1478`,
487
+ `manager.ts:1515-1521`, `manager.ts:1540` — `void vectorizeMemory(...).catch(() => {})` and
488
+ `.then(...).catch(() => {})` (vectorization failures never surface).
489
+ * `server/services/workshop/permissions.ts:70` and `:76` — `}).catch(() => {})` on both broadcast paths
490
+ (`broadcastSceneEvent('permissions.changed')`, `emitPluginEvent('permissions:changed')`): a failed permission-change
491
+ broadcast means clients keep stale grants with no log.
492
+ * `server/services/workshop/scene-events.ts:74-79` — send failures delete the peer silently (see §5).
493
+ * `server/services/workshop/daq/daq-controller.ts:1189` — `.catch(() => {})` on queue start;
494
+ `dcw-controller.ts:836` — `.catch(() => {})` on `markLineOffline`.
495
+
496
+ ### 4.2 Internal error messages returned to the client (info leak)
497
+
498
+ * `server/services/workshop/runtime/manager.ts:2785-2788` — raw internal `Error.message` is returned to the HTTP
499
+ caller as tool output (this is the endpoint of §1.1):
500
+ ```ts
501
+ catch (err) {
502
+ const reason = err instanceof Error ? err.message : String(err)
503
+ return { text: `工具「${input.tool}」调用失败: ${reason}`, isError: true }
504
+ }
505
+ ```
506
+ e.g. SQLite constraint text, filesystem paths from `saveJsonFileAtomic`, driver/Modbus errors.
507
+ * `server/api/workshop/ws.ts:739` — `message: error instanceof Error ? error.message : 'workshop 未初始化'` is sent
508
+ to the client in an `error` control frame.
509
+ * Generic 500 path is clean: `server/utils/response.ts:44-46` logs the error and returns
510
+ `{ code: 'INTERNAL_ERROR', message: '服务器内部错误' }` — no stack, no message.
511
+
512
+ ### 4.3 Status-code mis-mapping (failures reported as 500)
513
+
514
+ `server/api/workshop/daq/[id]/samples.get.ts` / `frames.get.ts` / `frames/content.get.ts` call controller methods
515
+ that throw a **plain** `Error` carrying a non-standard `status` property:
516
+
517
+ ```ts
518
+ // server/services/workshop/daq/daq-controller.ts:797
519
+ if (!node) throw Object.assign(new Error(`数采节点不存在: ${id}`), { status: 404 })
520
+ ```
521
+ ```ts
522
+ // server/services/workshop/daq/daq-controller.ts:857, :862
523
+ if (!node) throw Object.assign(new Error(`数采节点不存在: ${id}`), { status: 404 })
524
+ ...
525
+ if (!row || row.kind !== 'image') throw Object.assign(new Error(`帧不存在: ${id}@${tsMs}`), { status: 404 })
526
+ ```
527
+
528
+ `defineApiHandler` only honors `AppError` (`response.ts:30-33`) and `H3Error` (`:34-43`); a plain `Error` falls to
529
+ `console.error('[api] unhandled error:', error)` + HTTP 500 (`response.ts:44-46`). So "node not found" surfaces to
530
+ the UI as a 500, and the internal process is logged as an unhandled error.
531
+
532
+ ---
533
+
534
+ ## 5. SCENE EVENTS (`server/services/workshop/scene-events.ts`)
535
+
536
+ **Subscriber tracking** — a `globalThis`-backed `Set` of duck-typed peers:
537
+
538
+ ```ts
539
+ // scene-events.ts:14-18
540
+ interface WsPeer {
541
+ send(data: string | Uint8Array): void
542
+ close(code?: number, reason?: string): void
543
+ }
544
+ ```
545
+ ```ts
546
+ // scene-events.ts:20-27
547
+ const g = globalThis as typeof globalThis & {
548
+ __sceneEventPeers?: Set<WsPeer>
549
+ }
550
+
551
+ /** 在线 peer 注册表(ws 路由 sub 成功时登记,断开/退订移除) */
552
+ function peers(): Set<WsPeer> {
553
+ return g.__sceneEventPeers ??= new Set()
554
+ }
555
+ ```
556
+
557
+ **Subscribe path** (only after user auth; a per-peer line-visibility set is stamped on the peer object):
558
+
559
+ ```ts
560
+ // server/api/workshop/ws.ts:174-177
561
+ function attachScenePeer(peer: WsPeer, user: { id: string, role: string }): void {
562
+ setPeerVisibleLines(peer, visibleLineIds(user))
563
+ registerScenePeer(peer)
564
+ }
565
+ ```
566
+ ```ts
567
+ // scene-events.ts:34-36
568
+ export function setPeerVisibleLines(peer: WsPeer, visible: Set<string> | null): void {
569
+ (peer as WsPeer & { __awVisibleLines?: Set<string> | null }).__awVisibleLines = visible
570
+ }
571
+ ```
572
+ ```ts
573
+ // scene-events.ts:50-52
574
+ export function registerScenePeer(peer: WsPeer): void {
575
+ peers().add(peer)
576
+ }
577
+ ```
578
+ Call sites: `ws.ts:176` only (grep: `registerScenePeer` appears in `scene-events.ts:50` and `ws.ts:176`).
579
+
580
+ **Unsubscribe path — exists, on socket close and error:**
581
+
582
+ ```ts
583
+ // server/api/workshop/ws.ts:753-762
584
+ close(peer) {
585
+ unsubscribePeer(peer)
586
+ unregisterScenePeer(peer)
587
+ },
588
+
589
+ error(peer, error) {
590
+ console.error('[workshop-ws] connection error:', error)
591
+ unsubscribePeer(peer)
592
+ unregisterScenePeer(peer)
593
+ },
594
+ ```
595
+ ```ts
596
+ // scene-events.ts:54-56
597
+ export function unregisterScenePeer(peer: WsPeer): void {
598
+ peers().delete(peer)
599
+ }
600
+ ```
601
+
602
+ **Max subscriber count: NONE.** There is no cap anywhere — grep for `__sceneEventPeers` yields only `scene-events.ts:21,26`;
603
+ `registerScenePeer` (`:50-52`) performs an unconditional `add` with no size check, and `sceneEventPeerCount()`
604
+ (`:58-60`) is exported but never called by any handler (grep: only its own declaration).
605
+
606
+ **Dead-subscriber removal (two mechanisms, both partial):**
607
+
608
+ 1. Close/error hooks above.
609
+ 2. Lazy removal when a send throws:
610
+ ```ts
611
+ // scene-events.ts:72-80
612
+ for (const peer of peers()) {
613
+ if (lineId !== undefined && !peerSeesLine(peer, lineId)) continue
614
+ try {
615
+ peer.send(frame)
616
+ }
617
+ catch {
618
+ peers().delete(peer)
619
+ }
620
+ }
621
+ ```
622
+ same pattern in `broadcastPeerEvent` (`:92-99`).
623
+
624
+ **Can a subscriber leak? Yes — with the caveat that the primary paths are covered.**
625
+ * The removal depends entirely on the ws route's `close`/`error` hooks firing (`ws.ts:753-762`). There is **no
626
+ heartbeat/liveness timeout and no size cap** in the scene-peer set itself: a peer whose `send()` never throws
627
+ (e.g. half-open TCP where the write lands in the kernel buffer) and whose close hook never fires stays registered
628
+ for the process lifetime. The slow-consumer guard at `ws.ts:199-206` (`peer.close(1013, 'slow consumer')` +
629
+ `stream.peers.delete(peer)`) exists but only bounds *stream* fan-out, and relies on that same close hook to reach
630
+ `unregisterScenePeer`.
631
+ * The registry lives on `globalThis` (`scene-events.ts:20-22`) while peers are created per module instance, so any
632
+ module re-evaluation (dev HMR / nitro re-import) keeps the old peer objects in the same Set until their close hook
633
+ fires; nothing prunes stale entries.
634
+ * Broadcast cost is unbounded per frame: `broadcastSceneEvent` (`:66-81`) serializes once (`:71`) then loops all
635
+ peers and `send`s synchronously — with N pages open, every scene event costs N sends (by design per the comment at
636
+ `:62-65`), so a subscriber-count leak degrades CPU linearly with no ceiling.
637
+
638
+ ---
639
+
640
+ ## Priority summary
641
+
642
+ 1. **P0** `agent-tools/invoke.post.ts:18+25` + `manager.ts:2750` — any user token + arbitrary `agentId` ⇒ act as any
643
+ agent (PLC writes, recipe writes, model promotion, arbitrary training Python). Unfixed; previously documented at
644
+ `docs/audit/audit-agents.md:186-249`.
645
+ 2. **P0** `bindings/[id].patch.ts` — any user can flip any binding to `mode:'auto'`, silently removing HITL from
646
+ another team's control path.
647
+ 3. **P1** `dcw/[id]/read.post.ts`, `dcw/[id].patch.ts`, `dcw/index.post.ts`, `dcw/lines/[id].delete.ts`,
648
+ `daq/[id].delete.ts`, `daq/[id]/test.post.ts`, `daq/alarms.get.ts`, `dcw/journal/*`, `dcw/optimizations/*`,
649
+ `dcw/recipes/index.get.ts`, `dcw/recipes/[id]/versions.get.ts`, `dcw/[id]/param-ledger.get.ts` — authenticated
650
+ but unscoped access to industrial data/control.
651
+ 4. **P1** `bindings/index.post.ts:33-38` — binds any `agentId` without resolving or authorizing it.
652
+ 5. **P2** GET handlers that start acquisition/pipelines and insert rows (`daq/index.get.ts:20-22`,
653
+ `daq/[id]/samples.get.ts`→`daq-controller.ts:794`, `channels/[id]/index.get.ts:16`).
654
+ 6. **P2** `daq/test-driver.post.ts` / `dcw/test-driver.post.ts` — caller-controlled outbound connect primitive.
655
+ 7. **P3** `caller.ts:122` uncapped `nameCache`; `manager.ts:329` uncapped `lastToolInvokeAt`; no scene-peer cap.
656
+ 8. **P3** `daq` 404s surface as 500 (`daq-controller.ts:797,838,857,862` vs `response.ts:29-47`).
657
+ 9. **P3** swaggered error text: `manager.ts:2787` returns raw `err.message` to callers.