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
package/docs/sdk.en.md CHANGED
@@ -1,964 +1,964 @@
1
- # AgentWorkShop SDK Development and Usage Guide
2
-
3
- > The SDK is AgentWorkShop's **programming client and extension base**: external projects
4
- > consume the platform REST surface through it, and plugins receive the host-injected
5
- > runtime context through it (hooks / config / storage / timers / platform API / event stream).
6
- > Zero third-party runtime dependencies; works on Node ≥ 23.4 and modern browsers.
7
-
8
- **SDK version constants**: server-side `SDK_VERSION = '0.3.0'`, browser-side `CLIENT_SDK_VERSION = '0.3.0'`.
9
- These two constants are the **interface version of the SDK itself** and evolve **independently**
10
- from the npm package version (the `version` field in `package.json`, currently 0.8.7) —
11
- them being out of sync is expected. Never use `SDK_VERSION` to infer the package version, or the reverse.
12
- **Module format**: ESM only (only `import` / `export`; there is no CJS entry).
13
- **Types**: `sdk/index.d.mts` and `sdk/client.d.mts` ship with the package, so TypeScript projects
14
- get IntelliSense with zero configuration (coverage is described in §7).
15
-
16
- ---
17
-
18
- ## 1. Getting the SDK
19
-
20
- ### 1.1 Global install (includes the CLI and the platform itself)
21
-
22
- ```bash
23
- npm install -g agentworkshop
24
- ```
25
-
26
- The SDK lives inside the global package at `$(npm prefix -g)/node_modules/agentworkshop/sdk/`.
27
- Plugins **need not and should not** import it directly (see the host-injection model in §2);
28
- it serves two audiences:
29
-
30
- - **External integration**: embed AgentWorkShop's line / DAQ / write-control / device-twin
31
- capabilities into your own node service;
32
- - **Plugin development** (TypeScript): import types only for full IntelliSense — the runtime
33
- is injected by the host.
34
-
35
- ### 1.2 Project dependency (recommended for integrators)
36
-
37
- ```bash
38
- npm install agentworkshop # as a dependency (full SDK and types)
39
- ```
40
-
41
- ### 1.3 Import paths
42
-
43
- `package.json` exposes exactly four `exports` entries:
44
-
45
- | Import | Resolves to | Contents |
46
- |---|---|---|
47
- | `agentworkshop` | `sdk/index.mjs` | **Exactly the same facade** as `agentworkshop/sdk` (the root specifier was previously undocumented; it works) |
48
- | `agentworkshop/sdk` | `sdk/index.mjs` | The whole facade (server + browser + platform REST client + types) |
49
- | `agentworkshop/sdk/client` | `sdk/client.mjs` | Browser only (`createClientContext`) |
50
- | `agentworkshop/package.json` | `package.json` | Package metadata |
51
-
52
- **Deep paths are not importable**: paths such as `agentworkshop/sdk/api.mjs` or
53
- `agentworkshop/sdk/hooks.mjs` do not appear in `exports`, and Node throws
54
- `ERR_PACKAGE_PATH_NOT_EXPORTED`. Take every symbol from one of the three entry points above.
55
-
56
- ```js
57
- import { createPlatformClient, definePlugin, HookBus } from 'agentworkshop/sdk'
58
- import { createClientContext } from 'agentworkshop/sdk/client' // browser only
59
- ```
60
-
61
- ### 1.4 Named export list
62
-
63
- | Entry | Named exports |
64
- |---|---|
65
- | `agentworkshop/sdk` (equivalent to `agentworkshop`) | `SDK_VERSION`, `definePlugin`, `createPluginContext`, `createRouteTable`, `validatePluginModule`, `validatePluginSettings`, `validatePluginGroups`, `resolvePluginGroupId`, `pluginKvExists`, `isPathInside`, `HookBus`, `createPlatformClient`, `CLIENT_SDK_VERSION`, `createClientContext`, `LIFECYCLE_EVENTS`, `CLIENT_EVENTS` |
66
- | `agentworkshop/sdk/client` | `CLIENT_SDK_VERSION`, `createClientContext` |
67
-
68
- ### 1.5 The remaining named exports
69
-
70
- Plugin authors normally work with the host-injected `ctx` (§4); the symbols below serve host
71
- assembly, scaffolding and validation tooling.
72
-
73
- | Symbol | Signature | Purpose |
74
- |---|---|---|
75
- | `createPluginContext(opts)` | `opts` is the host assembly object | Called by the host to build `ctx`; plugin authors never call it themselves |
76
- | `createRouteTable()` | → `{ register, resolve, byPlugin, unregisterPlugin, size }` | Host route table: exact match, mounted at `/api/plugins/<name><path>` |
77
- | `definePlugin(def)` | `def` → `def` | Type sugar plus shape validation; throws on an invalid definition. The host also accepts a bare object export |
78
- | `validatePluginModule(mod, source)` | → `{ ok, def?, error? }` | Pre-load entry check (`name` required, `setup` must be a function, `client` must be a string, `settings` must be an array) |
79
- | `validatePluginSettings(pluginName, defs)` | → `{ descriptors, errors }` | Validate and normalize setting declarations; rules in §4.9 |
80
- | `validatePluginGroups(pluginName, defs)` | → `{ groups, errors }` | Validate and normalize config-group declarations |
81
- | `resolvePluginGroupId(pluginName, declaredId)` | → `string` | Fold a declared group name into the `plugin-<name>[-<suffix>]` namespace |
82
- | `pluginKvExists(dataDir, name)` | → `boolean` | Probe whether `<dataDir>/plugins/<name>/kv.json` exists |
83
- | `isPathInside(dir, p)` | → `boolean` | Path containment test (uses `relative()`, so a sibling directory with the same prefix such as `…/foo-evil` cannot fool it) |
84
- | `HookBus` | `class` | The hook bus implementation; the host owns one shared instance and plugins receive a scoped facade (§4.1) |
85
- | `LIFECYCLE_EVENTS` | frozen array (11 items) | Authoritative server-side event list (§5) |
86
- | `CLIENT_EVENTS` | frozen array (5 items) | Authoritative browser-side event list (§5) |
87
-
88
- ---
89
-
90
- ## 2. Core model: two identities, one SDK
91
-
92
- | Identity | Form | Role of the SDK |
93
- |---|---|---|
94
- | **External integrator** | regular dependency | call `createPlatformClient()` to consume the platform REST surface |
95
- | **Plugin author** | exports `{ name, setup(ctx) }` | `ctx` is the host-injected SDK context — **zero imports**, the SDK runtime is provided by the host |
96
-
97
- > Why don't plugins import the SDK directly? Globally installed plugin directories
98
- > (`~/.AgentWorkShop/plugins/`) are outside the node_modules resolution chain, so host
99
- > injection is the only zero-pitfall shape (the same paradigm as VSCode's `activate(context)`).
100
-
101
- A plugin entry is an ordinary ESM module:
102
-
103
- ```js
104
- export default {
105
- name: 'my-plugin',
106
- version: '1.0.0',
107
- description: 'Example plugin',
108
- auth: 'none', // declarative auth for plugin routes, see §4.4
109
- client: './client.mjs', // browser entry (optional), see §6
110
- async setup(ctx) {
111
- ctx.logger.info('loaded, directory:', ctx.dir)
112
- },
113
- }
114
- ```
115
-
116
- ---
117
-
118
- ## 3. Platform REST client `createPlatformClient`
119
-
120
- The SDK fronts the platform as a "project service client": it attaches the Bearer token,
121
- unwraps the unified envelope `{ code, message, data } → data`, and throws according to the
122
- rules below.
123
-
124
- ### 3.1 Creating a client
125
-
126
- ```js
127
- import { createPlatformClient } from 'agentworkshop/sdk'
128
-
129
- const api = createPlatformClient({
130
- baseUrl: 'http://127.0.0.1:3001', // defaults to '' (same-origin relative); integrators pass the platform address
131
- token: '<bearer-token>', // optional; api.setToken() swaps it later
132
- timeoutMs: 10_000, // optional; per-request timeout (AbortSignal), default 10 000
133
- logger, // optional; warns when a request fails
134
- })
135
- ```
136
-
137
- - `baseUrl` defaults to `''`, i.e. same-origin relative paths; it **may also be a function**
138
- evaluated lazily on every request (the host's listening port is only known once the server
139
- actually listens, so the host passes `() => origin`).
140
- - A trailing `/` is stripped: `'http://host:3001/'` and `'http://host:3001'` are equivalent.
141
-
142
- ### 3.2 Envelope and error semantics (three paths — do not mix them up)
143
-
144
- | Case | Behaviour |
145
- |---|---|
146
- | HTTP non-2xx | throws an `Error` carrying **only `err.status` and `err.body`**; this path **does not set `err.code`** |
147
- | HTTP 200 but envelope `code !== 0` | throws an `Error` carrying `err.status`, `err.code` **and** `err.body` |
148
- | Success | returns the unwrapped `data`; a body with no `code`/`data` envelope is returned **as-is** (for example `GET /api/workshop/plugins`, `GET /api/plugins/manifest`) |
149
-
150
- ```js
151
- try {
152
- await api.daqNodes.get('no-such-node')
153
- }
154
- catch (err) {
155
- err.status // 404
156
- err.body // { code: 'NOT_FOUND', message: '…', data: null }
157
- err.code // undefined —— this path does not set code
158
- }
159
- ```
160
-
161
- > On the platform side `defineApiHandler` sets a non-2xx status for business errors, so in
162
- > practice you almost always hit the first path. The second path is a defensive check inside
163
- > the SDK (`sdk/api.mjs` inspects `code` before unwrapping) aimed at endpoints that do not go
164
- > through the unified wrapper yet still return an error envelope under HTTP 200 — without that
165
- > check a plugin would unwrap the error envelope to `null` and treat it as success.
166
-
167
- ### 3.3 Generic calls (any platform path)
168
-
169
- | Method | Signature | Notes |
170
- |---|---|---|
171
- | `api.call(method, path, body?, opt?)` | low level | `opt` may carry `{ timeoutMs, headers }`; returns the unwrapped `data` |
172
- | `api.get(path, query?)` | query object serialized automatically | `api.get('/api/workshop/dcw', { page: 1 })` |
173
- | `api.post(path, body?)` | JSON-serialized | |
174
- | `api.patch(path, body?)` | | |
175
- | `api.delete(path)` | | |
176
- | `api.setToken(token)` | chainable, returns `api` | `api.setToken(res.token)` after login; pass `null` to clear |
177
- | `api.ping()` | `GET /api/plugins/manifest` | liveness probe (unauthenticated) |
178
-
179
- `toQuery` **drops `undefined`, `null` and empty-string** values, so
180
- `api.get('/x', { lineId: undefined })` never produces `?lineId=undefined`.
181
-
182
- ### 3.4 Resource surfaces and their real base paths
183
-
184
- Every resource is built by the internal `resource(root)` helper, so **all of them expose five
185
- methods**: `list(query?)`, `get(id)`, `create(body)`, `update(id, patch)`, `remove(id)`.
186
- "A method exists" does not mean "the server route exists" — real availability is in §3.5.
187
-
188
- | Namespace | Base path | Extra methods |
189
- |---|---|---|
190
- | `api.users` | `/api/users` | `login(email, password)` → `{ user, token }`; `me()` |
191
- | `api.lines` | `/api/workshop/dcw/lines` | `start(id, recipeId = '')`; `stop(id)` |
192
- | `api.products` | `/api/workshop/dcw/products` | — |
193
- | `api.recipes` | `/api/workshop/dcw/recipes` | — |
194
- | `api.dcwNodes` | `/api/workshop/dcw` | — |
195
- | `api.daqNodes` | `/api/workshop/daq` | `alarms()` → `GET /api/workshop/daq/alarms` |
196
- | `api.templates` | — | `daq()` / `dcw()`: read `.templates` off the two list responses |
197
- | `api.twins` | `/api/workshop/device-twins` | — |
198
- | `api.teams` | `/api/workshop/teams` | — |
199
- | `api.agents` | `/api/workshop/agents` | — |
200
- | `api.channels` | `/api/workshop/channels` | — |
201
- | `api.permissions` | — | `overview()` → `GET /api/workshop/permissions`; `set({ userId, grants })` → `PUT /api/workshop/permissions` (admin) |
202
- | `api.plugins` | — | `manifest()` |
203
-
204
- The payload shape for `api.permissions.set`:
205
-
206
- ```json
207
- { "userId": "<user id>", "grants": [{ "lineId": "<line id>", "mode": "readonly" }] }
208
- ```
209
-
210
- `mode` is `'readonly'`, `'operate'` or `null` (passing `null` revokes that grant).
211
-
212
- ### 3.5 Real route support
213
-
214
- `resource(root)` always generates five methods, but only some server route files exist.
215
- **The table below is the result of checking every route file**: "no" means the call targets a
216
- path that does not exist and therefore 404s.
217
-
218
- | Namespace | `list` | `get(id)` | `create` | `update(id)` | `remove(id)` | Notes |
219
- |---|---|---|---|---|---|---|
220
- | `users` | yes | yes | yes | **no** | yes | The server only has `PUT /api/users/:id`, while `update()` sends `PATCH`; to update a user call `api.call('PUT', '/api/users/' + id, patch)` directly. `list`/`get`/`create` all require admin |
221
- | `lines` | yes | no | yes | yes | yes | Plus `start` / `stop`. `create` requires the `admin` or `editor` role |
222
- | `products` | **no** | no | yes | yes | yes | There is no `GET /api/workshop/dcw/products`; read the product list from `.products` of `GET /api/workshop/dcw` (see §3.6) |
223
- | `recipes` | yes | no | yes | yes | yes | `list()` returns `{ recipes, runs }`; there is no route for `recipes.get(id)` |
224
- | `dcwNodes` | yes | no | yes | yes | yes | No `[id].get.ts`; read the node list from `.nodes` of `GET /api/workshop/dcw` |
225
- | `daqNodes` | yes | no | yes | yes | yes | No `[id].get.ts`; `alarms()` works |
226
- | `twins` | yes | no | yes | yes | yes | No `[id].get.ts` |
227
- | `teams` | yes | yes | yes | yes | yes | Full CRUD |
228
- | `agents` | yes | yes | yes | yes | yes | Full CRUD |
229
- | `channels` | yes | yes | yes | yes | yes | Full CRUD |
230
- | `permissions` | `overview()` only | — | — | — | — | No five-method `resource()`; only `overview()` and `set()` |
231
- | `plugins` | `manifest()` only | — | — | — | — | Unauthenticated |
232
-
233
- Authentication and timeouts:
234
-
235
- - Business read endpoints such as `api.lines.list()`, `api.daqNodes.list()` and
236
- `api.dcwNodes.list()` go through platform auth and need a user token (`api.setToken(...)`,
237
- or the cookie in a browser);
238
- - `api.plugins.manifest()` and `api.ping()` are unauthenticated — the only two endpoints you
239
- can call without a token.
240
-
241
- ### 3.6 Response shapes at a glance
242
-
243
- **A list does not necessarily return an array** — this is the easiest trap in the whole SDK.
244
- Every row below was checked against the server handler.
245
-
246
- | Call | Real response |
247
- |---|---|
248
- | `api.lines.list()` | `{ lines, states }` (**not an array**) |
249
- | `api.daqNodes.list()` | `{ controller, nodes, meta, driverAvailable, infra, templates }` |
250
- | `api.dcwNodes.list()` | a multi-key object (`controller` / `nodes` / `templates` / `recipes` / `runs` / `history` / `products` / `lines` …), **not a node array** |
251
- | `api.recipes.list()` | `{ recipes, runs }` |
252
- | `api.twins.list()` | `{ twins }` |
253
- | `api.daqNodes.alarms()` | `{ alarms }` |
254
- | `api.permissions.overview()` | `{ lines, users }` |
255
- | `api.templates.daq()` / `api.templates.dcw()` | an array (`.templates ?? []`) |
256
- | `api.teams.list()` / `api.agents.list()` / `api.channels.list()` | an array |
257
- | `api.users.list()` | `{ items, total, page, pageSize }` |
258
- | `api.plugins.manifest()` | `{ plugins }` (no envelope, returned as-is) |
259
- | `api.lines.create(body)` | `{ line }` |
260
- | `api.recipes.create(body)` | `{ recipe }` |
261
- | `api.products.create(body)` | `{ product }` |
262
- | `api.dcwNodes.create(body)` / `api.daqNodes.create(body)` | `{ node }` |
263
- | `api.twins.create(body)` | `{ twin }` |
264
- | `api.lines.start(id, recipeId)` | `{ run, line }` |
265
- | `api.users.login(email, password)` | `{ user, token }` |
266
-
267
- About `api.daqNodes.list({ lineId })`: the `{ lineId }` query argument **is not read by that
268
- handler**. Line filtering happens server-side from the caller's permissions (a regular user
269
- only sees nodes of granted lines). Do not present it as a working client-side filter.
270
-
271
- About `api.lines.start(id, recipeId)`: `recipeId` defaults to an empty string, but the server
272
- **requires a recipe that actually exists** (an empty string or an unknown id yields
273
- 404 `Recipe 不存在`). When a line has recipes, `recipeId` is effectively mandatory.
274
-
275
- ### 3.7 Full example: external integration
276
-
277
- ```js
278
- import { createPlatformClient } from 'agentworkshop/sdk'
279
-
280
- const api = createPlatformClient({ baseUrl: 'http://plant.local:3001' })
281
-
282
- const { token } = await api.users.login('you@example.com', 'secret')
283
- api.setToken(token)
284
-
285
- // 1) Line list: { lines, states } —— not an array
286
- const { lines, states } = await api.lines.list()
287
- console.log(`${lines.length} lines`)
288
- for (const l of lines) {
289
- console.log(` ${l.name} → ${states.find(s => s.lineId === l.id)?.state ?? 'unknown'}`)
290
- }
291
-
292
- // 2) DAQ surface: { controller, nodes, meta, driverAvailable, infra, templates }
293
- const { nodes } = await api.daqNodes.list()
294
- console.log(`${nodes.length} DAQ nodes, ${nodes.filter(n => n.state === 'offline').length} offline`)
295
-
296
- // 3) Write-control surface: the node list is an object too; products come from .products
297
- const dcw = await api.dcwNodes.list()
298
- console.log(`${dcw.nodes.length} DCW nodes, ${dcw.products.length} products`)
299
-
300
- // 4) Recipe surface: { recipes, runs }
301
- const { recipes } = await api.recipes.list()
302
-
303
- // 5) Starting a line: recipeId must be a real recipe of that line (an empty string is rejected)
304
- const line = lines[0]
305
- const recipe = recipes.find(r => r.lineId === line?.id)
306
- if (line && recipe) {
307
- await api.lines.start(line.id, recipe.id)
308
- await api.lines.stop(line.id)
309
- }
310
-
311
- // 6) Line grants (admin): overview() reads everything, set() writes in bulk
312
- const { users } = await api.permissions.overview()
313
- const target = users[0]
314
- if (target && line) {
315
- await api.permissions.set({ userId: target.id, grants: [{ lineId: line.id, mode: 'readonly' }] })
316
- }
317
- ```
318
-
319
- ---
320
-
321
- ## 4. Plugin context `ctx` (the complete member surface)
322
-
323
- The `ctx` handed to `setup(ctx)` is the host-assembled SDK runtime. **The table below is the
324
- complete surface**; the last three rows (`ctx.daq` / `ctx.omp` / `ctx.services`) are attached
325
- directly by the plugin host before `setup` runs and are not part of `sdk/context.mjs`.
326
-
327
- | Group | Member | Type | Notes |
328
- |---|---|---|---|
329
- | Identity | `ctx.name` | `string` | plugin name (= directory name / declared name) |
330
- | | `ctx.scope` | `'builtin' \| 'project' \| 'user'` | load scope; on a name clash the priority is builtin > project > user |
331
- | | `ctx.dir` | `string` | absolute path of the plugin directory |
332
- | | `ctx.sdkVersion` | `string` | SDK interface version (= `SDK_VERSION`) |
333
- | Hooks | `ctx.hooks` | `{ on, once, off, emit }` | per-plugin scoped hook facade (§4.1); **not a `HookBus` instance and has no `.size`** |
334
- | Logging | `ctx.logger` | `{ debug, info, warn, error }` | output is prefixed `[aw-plugins] [<plugin name>]` |
335
- | Config | `ctx.config.get(key)` | any | effective value (after the four-layer merge) |
336
- | | `ctx.config.all()` | `Record<string, any>` | shallow copy of every effective setting |
337
- | | `ctx.config.onChange(fn)` | unsubscribe function | subscribes to `config:changed` (§4.5) |
338
- | | `ctx.config.defineGroup(def)` | group object \| `null` | declare a plugin-owned config group (§4.9) |
339
- | | `ctx.config.defineField(decl)` | descriptor \| `null` | declare a setting field (key auto-addressed as `plugins.<name>.<key>`) |
340
- | | `ctx.config.removeGroup(id)` | `boolean` | remove a group declaration |
341
- | | `ctx.config.removeField(key)` | `boolean` | remove a field declaration |
342
- | | `ctx.config.groups()` / `fields()` | arrays | the groups / fields this plugin currently has registered (read-only snapshot) |
343
- | Paths | `ctx.paths` | `{ home, configRoot, dataDir }` | config-root information (home mode = `~/.AgentWorkShop`) |
344
- | | `ctx.dataDir` | `string` | this plugin's private data directory = `<paths.dataDir>/plugins/<name>` |
345
- | Storage | `ctx.kv` | `{ get, set, all, bump }` | plugin-private KV (§4.2); **there is no `reset()`** |
346
- | Timers | `ctx.timer.setInterval(fn, ms)` / `setTimeout(fn, ms)` | timer id | auto `unref` + auto-collected on shutdown / hot reload (§4.3) |
347
- | Cleanup | `ctx.onDispose(fn)` | the `fn` you passed | register a cleanup callback (§4.3) |
348
- | | `ctx.subscriptions.add(d)` | the `d` you passed | register a `{ dispose() }` object or a function; same collection queue as `onDispose` |
349
- | Routes | `ctx.route(method, path, handler)` | `boolean` | mounts at `/api/plugins/<name><path>`; auth is declared by the plugin's `auth` field (§4.4) |
350
- | Platform | `ctx.api` | `PlatformClient` | loopback REST client (**no token by default**; §4.6) |
351
- | Network | `ctx.http.get(url, opts)` / `post(url, body, opts)` | `Promise<Response>` | outbound requests; the guard is protocol-only; 8 s default timeout (§4.6) |
352
- | Events | `ctx.events.on(type, fn)` / `off(type, fn)` | unsubscribe function | live scene event subscription; the `event:` prefix is added for you (§4.6) |
353
- | Line permissions (host-injected) | `ctx.permissions` | see §4.7 | query and manage the per-user, per-line three-state grants |
354
- | DAQ extension (host-injected) | `ctx.daq` | see §4.8 | driver / processor / template registration + frame subscription + time-series queries |
355
- | Agent tools (host-injected) | `ctx.omp.registerTool(tool)` | see §4.8 | hot-inject a custom host tool at runtime |
356
- | Runtime services (host-injected) | `ctx.services` | see §4.8 | lazy service access + cross-plugin service provision |
357
-
358
- `ctx` has **no** `ctx.routes`, `ctx.dcw`, `ctx.scene` or `ctx.version`: route registration is
359
- the singular `ctx.route()`; write-control traffic is observed through the `dcw:write` hook;
360
- scene events go through `ctx.events`.
361
-
362
- ### 4.1 `ctx.hooks` — the hook facade
363
-
364
- The host owns one shared `HookBus` named `aw-plugins`; a plugin receives a **scoped facade
365
- exposing only `on` / `once` / `off` / `emit`**. Listeners registered through it are tracked and
366
- auto-unbound when the plugin hot-reloads (the one cleanup path that always worked).
367
- The facade exposes no diagnostic properties such as `count` / `size` / `listeners`.
368
-
369
- ```js
370
- function onSample(sample) {
371
- ctx.kv.bump('samples')
372
- }
373
-
374
- const off = ctx.hooks.on('daq:sample', onSample) // returns an unsubscribe function
375
- ctx.hooks.once('server:close', () => { /* teardown, fires once */ })
376
- ctx.hooks.off('daq:sample', onSample) // manual unbind: pass the original handler
377
- off() // or just call the function returned by on()
378
-
379
- await ctx.hooks.emit('my-plugin:custom', { hello: 1 }) // inter-plugin messaging: other plugins can listen
380
- ctx.hooks.on('*', ({ type, payload }) => { /* every event */ })
381
- ```
382
-
383
- Semantics (matching `sdk/hooks.mjs`):
384
-
385
- - **Async-serial**: listeners of one type run in registration order and are awaited; the next
386
- one does not start until the previous returns;
387
- - **Error isolation**: one throwing listener is only counted and warned about; siblings and the
388
- main service are unaffected;
389
- - **Circuit breaker**: a listener failing **8 times in a row** is removed automatically;
390
- **any single success resets the counter**, so occasional failures never accumulate into an eviction;
391
- - **Wildcard**: the only server-side wildcard spelling is the bare `'*'`; its callback receives
392
- `{ type, payload }` and runs after the named listeners;
393
- - **The return value is fan-out, not a waterfall**: every listener receives **the same unmodified
394
- payload**; `emit()` merely returns "the last non-`undefined` return value" — values are never
395
- threaded from one listener to the next;
396
- - **v1 is observation-only**: there is no veto / interception / rewriting.
397
-
398
- > `ctx.hooks.on('event:*')` never fires. `event:*` is the subscription entry name the list uses
399
- > for scene events; the real wildcard is the bare `'*'`, and the ergonomic scene-event form is
400
- > `ctx.events.on('<type>', fn)` (§4.6).
401
-
402
- ### 4.2 `ctx.kv` — plugin-private persistence
403
-
404
- ```js
405
- ctx.kv.set('threshold', 100)
406
- ctx.kv.bump('samples') // atomic increment, +1 by default; bump(key, by) sets the step
407
- ctx.kv.bump('samples', 5)
408
- ctx.kv.get('threshold') // 100
409
- ctx.kv.all() // { samples: 19453, threshold: 100, ... }
410
- ```
411
-
412
- - **These four methods only**: `get` / `set` / `all` / `bump`. **No `reset()`, no `delete()`,
413
- no `keys()`**; to clear a key, `set` it explicitly or switch to a new key.
414
- - On-disk location: `<ctx.dataDir>/kv.json`, i.e. `<paths.dataDir>/plugins/<name>/kv.json`.
415
- - **In-memory state is authoritative + a 200 ms debounced atomic write** (temp file plus
416
- `rename`), so a high-frequency hook (`daq:sample`) and a low-frequency hook (`line:stop`)
417
- calling concurrently cannot race on read-modify-write.
418
- - On shutdown / hot reload the pending debounce is **cancelled and flushed synchronously**, so a
419
- `set` from the last 200 ms before exit is not lost.
420
- - Typical uses: counters, alarm state, threshold config, heartbeat timestamps.
421
-
422
- ### 4.3 `ctx.timer` / `ctx.onDispose` / `ctx.subscriptions`
423
-
424
- ```js
425
- ctx.timer.setInterval(() => ctx.kv.set('heartbeat', Date.now()), 5000)
426
- ctx.timer.setTimeout(() => ctx.logger.info('one-shot task'), 1000)
427
-
428
- ctx.onDispose(() => ctx.logger.info('plugin cleanup done'))
429
-
430
- // subscriptions.add accepts a { dispose() } object or a function; same queue as onDispose
431
- const controller = new AbortController()
432
- ctx.subscriptions.add({ dispose() { controller.abort() } })
433
- ```
434
-
435
- - Timers created by `ctx.timer.setInterval/setTimeout` are automatically `unref`ed (they never
436
- hold the process open) and automatically registered with the collection queue, so **you never
437
- have to clear them by hand**.
438
- - `ctx.onDispose(fn)` and `ctx.subscriptions.add(d)` (`d` may be `{ dispose() }` or a function)
439
- share **one host-owned collection queue** with the timers.
440
- - That queue runs on **both server shutdown and plugin hot reload** — a guarantee this version of
441
- the SDK can make after the fix (`createPluginContext` previously failed to forward the host's
442
- `onDispose` injection point, leaking timers and losing the final kv write).
443
-
444
- Server shutdown sequence:
445
-
446
- ```text
447
- server shutdown (nitro close)
448
- └─ per-plugin dispose queue (each entry try/catch): clear timers, flush kv synchronously, unbind subscriptions…
449
- └─ broadcast server:close { at }
450
- ```
451
-
452
- ### 4.4 `ctx.route` — plugin API
453
-
454
- ```js
455
- export default {
456
- name: 'my-plugin',
457
- auth: 'user', // declarative auth: 'none' (default) | 'user' | 'admin' | 'agent-or-user'
458
- async setup(ctx) {
459
- // returns boolean: true = registration succeeded, false = handler is not a function
460
- const ok = ctx.route('GET', '/stats', () => ctx.kv.all())
461
- if (!ok) ctx.logger.warn('route registration failed')
462
-
463
- ctx.route('POST', '/threshold', (event) => {
464
- const body = event.awBody // the JSON body the host already pre-read (may be undefined)
465
- const threshold = Number(body?.threshold)
466
- if (!Number.isFinite(threshold)) return { ok: false, error: 'threshold must be a number' }
467
- ctx.kv.set('threshold', threshold)
468
- return { ok: true, threshold } // the return value is serialized to JSON by nitro
469
- })
470
- },
471
- }
472
- ```
473
-
474
- → mounted at `GET /api/plugins/<plugin name>/stats` and
475
- `POST /api/plugins/<plugin name>/threshold`.
476
-
477
- - **The return value is `boolean`**: `false` when `handler` is not a function.
478
- - **Paths** start with `/` (a missing one is added for you); the base is always
479
- `/api/plugins/<plugin name>`.
480
- - **Auth is declarative — do not write your own**: give the plugin definition
481
- `auth: 'none' | 'user' | 'admin' | 'agent-or-user'` and the platform catch-all
482
- (`server/api/plugins/[name]/[...path].ts`) validates it **before** your handler runs,
483
- returning 401 on failure.
484
- - **The handler cannot obtain a user object**: `resolveUser(event)` is not on `ctx` and cannot be
485
- imported from a plugin module. When you need an identity, combine the `auth` gate with
486
- `ctx.api.setToken(...)` and go through the platform API.
487
- - **The JSON body is already pre-read** and attached as `event.awBody` (not h3's `readBody`).
488
- - Handler errors are isolated: the platform logs with the plugin name and returns a 500 envelope
489
- (`插件路由处理失败(<plugin name>): <original message>`) without leaking a stack trace.
490
-
491
- ### 4.5 `ctx.config` — reading config and reacting to change
492
-
493
- ```js
494
- ctx.config.get('plugins.my-plugin.threshold') // effective value (after the four-layer merge)
495
- ctx.config.all() // every effective setting (shallow copy)
496
-
497
- const off = ctx.config.onChange((payload) => { // payload: the config:changed payload, see §5
498
- ctx.logger.info('config changed:', payload?.changed)
499
- })
500
- ```
501
-
502
- `config:changed` is bridged onto the plugin bus from the platform settings service, and
503
- `ctx.config.onChange(fn)` is essentially `ctx.hooks.on('config:changed', fn)`, so it is likewise
504
- auto-unbound on hot reload.
505
-
506
- ### 4.6 `ctx.api` / `ctx.http` / `ctx.events` — which one to use
507
-
508
- | Need | Use | Why |
509
- |---|---|---|
510
- | Read / write **platform business data** (lines, nodes, twins…) | `ctx.api` | auth / envelope / resource semantics out of the box |
511
- | Call an **external system** (MES, webhook, mail gateway) | `ctx.http` | generic requests plus a protocol guard |
512
- | React to the **live stream** (samples, alarms, start/stop) | `ctx.events` / `ctx.hooks.on` | in-process, zero HTTP overhead |
513
-
514
- ```js
515
- // ctx.api: the loopback PlatformClient. baseUrl is resolved lazily by the host; no token by default.
516
- const { token } = await ctx.api.users.login('user@example.com', 'secret')
517
- ctx.api.setToken(token) // later loopback calls carry that token
518
- const { lines } = await ctx.api.lines.list()
519
-
520
- // ctx.http: outbound requests, protocol guard only (http/https), 8 s default timeout
521
- const res = await ctx.http.get('https://mes.example.com/health', { timeoutMs: 3000 })
522
- const payload = await ctx.http.post('https://mes.example.com/events', { lineId: 'L1' })
523
-
524
- // ctx.events: scene events — pass the scene event name itself; the `event:` prefix is added for you
525
- ctx.events.on('daq.reading', r => ctx.logger.info('sample', r.nodeId))
526
- ctx.events.on('permissions.changed', ({ userId }) => ctx.logger.info('grants changed', userId))
527
- ctx.events.on('device.created', d => ctx.logger.info('new device', d.id))
528
- const off = ctx.events.on('daq.alarm', a => ctx.logger.warn('alarm', a.id))
529
- off()
530
- ```
531
-
532
- - `ctx.api` has **no token by default**: unauthenticated endpoints (`plugins.manifest` / `ping`)
533
- work immediately; anything else needs a login followed by `setToken`. If you only need
534
- in-process data, prefer `ctx.events` and `ctx.hooks` (no auth, no overhead).
535
- - The `ctx.http` guard **checks the protocol only** and does not restrict hosts — the target
536
- address is the plugin's own responsibility.
537
- - `ctx.events.on(type, fn)` / `off(type, fn)` install `event:<type>` underneath; to receive every
538
- scene event use `ctx.hooks.on('*', ({ type, payload }) => …)`.
539
-
540
- ### 4.7 `ctx.permissions` — per-user, per-line grants
541
-
542
- | Method | Returns | Notes |
543
- |---|---|---|
544
- | `lineMode(user, lineId)` | `'none' \| 'readonly' \| 'operate'` | `user` is `{ id, role }`; admin/editor is always `operate` |
545
- | `visibleLineIds(user)` | `Set<string> \| null` | `null` means unrestricted (admin/editor) |
546
- | `listGrants(userId)` | `Array<{ lineId, mode, grantedBy, grantedAt }>` | read every grant of one user |
547
- | `setGrants(userId, grants, grantedBy?)` | the grants after the write | `grants` looks like `[{ lineId, mode }]` with `mode` = `'readonly'` / `'operate'` / `null` |
548
-
549
- ```js
550
- const userId = ctx.kv.get('watchUserId') // a plugin gets userIds from event payloads or its own config
551
- if (userId) {
552
- const mode = ctx.permissions.lineMode({ id: userId, role: 'user' }, 'line-1')
553
- const visible = ctx.permissions.visibleLineIds({ id: userId, role: 'user' })
554
- const grants = ctx.permissions.listGrants(userId)
555
- ctx.logger.info(`mode=${mode} visible=${visible ? visible.size : 'all'} grants=${grants.length}`)
556
- }
557
-
558
- // Change notification is the scene event permissions.changed, subscribed via ctx.events (prefix added for you)
559
- ctx.events.on('permissions.changed', ({ userId }) => ctx.logger.info('grants changed:', userId))
560
- ```
561
-
562
- ### 4.8 Host-injected extensions `ctx.daq` / `ctx.omp` / `ctx.services`
563
-
564
- **`ctx.daq`** — multi-modal DAQ extension (v0.6 frame pipeline):
565
-
566
- | Method | Notes |
567
- |---|---|
568
- | `registerDriver({ kind, available, sample, test })` | register a custom driver |
569
- | `registerProcessor(kind, name, fn)` | register a sink processor (after sampling, before storage) |
570
- | `registerTemplate(def)` | register a DAQ node template (`key` / `signalKind` / `vector` / `sink` / `metrics`) |
571
- | `onFrame(fn)` | frame subscription sugar (= `ctx.hooks.on('daq:frame', fn)`) |
572
- | `onSample(fn)` | sample subscription sugar (= `ctx.hooks.on('daq:sample', fn)`) |
573
- | `query({ nodeIds?, lineId?, from?, to?, bucketMs? })` | unauthenticated time-series query (straight to `queryTagged`) |
574
- | `nodes()` | DAQ node metadata snapshot (including line ownership) |
575
-
576
- ```js
577
- ctx.daq.registerProcessor('vector', 'my-derive', (frame) => {
578
- // frame = { kind: 'vector'|'image', points? | blob? (image producer side only), metrics }
579
- return { ...frame, metrics: { ...frame.metrics, myMetric: 1 } }
580
- })
581
- ctx.daq.onFrame(f => ctx.logger.debug('frame', f.nodeId, f.kind))
582
- const rows = await ctx.daq.query({ nodeIds: ['n1'], from: Date.now() - 3600_000, to: Date.now(), bucketMs: 60_000 })
583
- const all = await ctx.daq.nodes()
584
- ```
585
-
586
- A template's `sink.processors` declares the sink pipeline; `metrics` declares derived-metric
587
- thresholds whose breaches ride the platform's existing alarm chain. Vector / frame metadata lands
588
- in Timescale `daq_frames`; image pixels land in object storage (the `daq:frame` payload
589
- **carries no pixel blob**).
590
-
591
- **`ctx.omp.registerTool({ name, label?, description, parameters, roles?, handler })`** —
592
- register a custom host tool, hot-injected into every running agent session at runtime:
593
-
594
- ```js
595
- ctx.omp.registerTool({
596
- name: 'sensor_log',
597
- label: 'Sensor calibration',
598
- description: 'Query or record sensor calibration conclusions',
599
- parameters: { type: 'object', properties: { sensor: { type: 'string' } }, required: ['sensor'] },
600
- roles: ['lead', 'worker'], // the only valid literals are 'lead' and 'worker'; default is both
601
- handler: async (args, agent) => ({ text: `recorded ${args.sensor}` }), // agent = { agentId, channelId, role, name }
602
- })
603
- ```
604
-
605
- Registry changes are hot-injected into running sessions immediately (re-sending `set_host_tools`,
606
- no respawn); a tool sharing a name with a built-in host tool is ignored.
607
-
608
- **`ctx.services`** — the backend runtime object surface (lazy getters, cached after first access):
609
-
610
- | Call | Resolves to |
611
- |---|---|
612
- | `ctx.services.names()` | every service name (including plugin-provided `<plugin>.<name>`) |
613
- | `await ctx.services.get('daq')` | `{ query(q), nodes() }` |
614
- | `await ctx.services.get('lines')` | `{ list(), byId(id) }` |
615
- | `await ctx.services.get('channels')` | `{ list(), agents(channelId) }` |
616
- | `await ctx.services.get('plugins')` | the plugin manifest **array** (note: not an object and with no `pluginManifest()`) |
617
- | `ctx.services.provide(name, getter)` | provide a service, auto-prefixed with `<plugin>.` |
618
-
619
- ```js
620
- const daq = await ctx.services.get('daq')
621
- const lines = await ctx.services.get('lines')
622
- const channels = await ctx.services.get('channels')
623
- const plugins = await ctx.services.get('plugins') // an array
624
- ctx.services.provide('my-data', async () => ({ ready: true })) // → 'my-plugin.my-data'
625
- ctx.logger.info(ctx.services.names().join(', '))
626
- ```
627
-
628
- An unknown name throws (the caller is expected to handle it). `provide` forces the
629
- `<plugin>.` prefix so cross-plugin name clashes cannot happen.
630
-
631
- ### 4.9 Plugin setting declarations (`settings` / `configGroups`)
632
-
633
- Two equivalent routes: the top-level `settings` array in the entry (declarative), or
634
- `ctx.config.defineField` inside `setup` (conditional).
635
-
636
- ```js
637
- export default {
638
- name: 'my-plugin',
639
- configGroups: [{ id: 'conn', label: 'Connection', collapsed: true }],
640
- settings: [
641
- { key: 'base_url', type: 'string', default: 'https://example.com', group: 'conn',
642
- labelKey: 'plugin.my-plugin.base_url', label: 'Service URL' },
643
- ],
644
- async setup(ctx) {
645
- // equivalent form: add declarations conditionally at runtime
646
- ctx.config.defineGroup({ id: 'sync', label: 'Sync' })
647
- ctx.config.defineField({ key: 'interval', type: 'number', default: 30, min: 1, max: 3600, group: 'sync' })
648
- },
649
- }
650
- ```
651
-
652
- Validation rules (an entry that fails **is skipped with a warning**; it never blocks loading):
653
-
654
- | Rule | Detail |
655
- |---|---|
656
- | `key` | must match `[A-Za-z0-9_-]+`; addressed as `plugins.<plugin name>.<key>` |
657
- | `type` | one of `'string'` / `'number'` / `'boolean'` / `'select'` |
658
- | `default` | **required** — a declaration without `default` is skipped outright |
659
- | `select` | must supply an `options` array, and `default` must appear among its stringified values |
660
- | `min` / `max` | **apply to `number` only** |
661
- | Group | an explicit `group` is folded into the `plugin-<name>[-<suffix>]` namespace; a field without `group` lands in the `plugin-<name>` group labelled with the plugin name |
662
-
663
- Once declared, the settings are merged into the platform settings service: the "Plugins" section
664
- of the settings page renders them automatically, PATCH validation uses the same source, and
665
- saving takes effect immediately. Read values with the full key:
666
- `ctx.config.get('plugins.my-plugin.base_url')`.
667
-
668
- ### 4.10 `ctx.twin` — hybrid-twin Provider Registry bridge
669
-
670
- `ctx.twin` registers an industrial scene's **physics core / scene pack / objectives / training and solver
671
- adapters** into the hybrid-twin Provider Registry. The agent's twin tools (`twin_scene_read` /
672
- `twin_snapshot_create` / `twin_trial_run` / `mpc_optimize`) resolve your provider through
673
- `SceneContract.physicsProfileId`, falling back to the bundled `twin-injection-default`.
674
- **Swapping scenes needs no tool or channel change.**
675
-
676
- | Member | Notes |
677
- |---|---|
678
- | `registerPhysicsProvider(provider)` | register a physics core: manifest (`providerId` / `version` / `apiVersion: 'twin-provider.v1'` / `sceneKinds` / `backend` / the four variable tables / `parameterPriors` / `capabilities` / `artifactContract`) plus `initialize` / `step` / `simulate` / `evaluateConstraints`, optional `validateScene` / `calibrate` / `designSafeExperiment` / `estimateUncertainty` / `exportArtifacts` / `health` |
679
- | `registerScenePack(pack)` | `{ sceneKind, sceneSchemaVersion, compile?, discover?, constraints?, objectives?, datasetSchema? }` — compiles field nodes and recipe into a `SceneContract` |
680
- | `registerObjectiveProfile(profile)` | MPC objectives and weights |
681
- | `registerTrainingAdapter(adapter)` / `registerSolverAdapter(adapter)` | training / external-solver adapters (ONNX, ROM, third-party solvers) |
682
- | `listProviders(filter?)` / `getProviderHealth(id, version?)` | listing and health checks; health feeds the "may be used" decision |
683
- | `resolveProvider(id, version?)` / `validateProvider(id, version?)` | resolve the active generation / validate without registering (pre-flight self-check) |
684
- | `retireProvider(id, version?)` | explicit retirement; only unloads after references reach zero |
685
- | `isRegistryAvailable()` | whether the bridge is ready (while it is not, registration calls are queued, so startup order cannot lose registrations) |
686
-
687
- **Lifecycle and generations**: `DISCOVERED → VALIDATED → REGISTERED → READY → DRAINING → RETIRED`
688
- (`FAILED` when validation rejects). A hot reload stages the new **generation** and drains the old one:
689
- in-flight trials / MPC hold a lease and are never invalidated during a drain, and `unregisterPlugin`
690
- means "drain + retire", so a disabled plugin loses its provider.
691
-
692
- ```js
693
- export default {
694
- name: 'my-twin-provider',
695
- version: '1.0.0',
696
- auth: 'none',
697
- async setup(ctx) {
698
- if (!ctx.twin.isRegistryAvailable()) return // registrations queue while the bridge is down
699
- ctx.twin.registerPhysicsProvider(myProvider) // see docs/plugins.md, "Hybrid-twin provider plugins"
700
- ctx.twin.registerScenePack(myScenePack)
701
- const ok = await ctx.twin.validateProvider('my-provider', '1.0.0')
702
- ctx.logger.info(`provider check: ${JSON.stringify(ok)}`)
703
- },
704
- }
705
- ```
706
-
707
- Full field tables, generational hot-swap semantics and a runnable example live in
708
- `docs/plugins.md`, section "Hybrid-twin provider plugins".
709
-
710
- ---
711
-
712
- ## 5. Lifecycle events
713
-
714
- The authoritative lists are the SDK-exported `LIFECYCLE_EVENTS` (11 items) and
715
- `CLIENT_EVENTS` (5 items), both checked one by one against what the host actually emits.
716
- **Every event is also part of the config-root event stream.**
717
-
718
- ### 5.1 Server-side events (`LIFECYCLE_EVENTS`, 11 items)
719
-
720
- | Event name (bus type) | When it fires | Payload | Typical use |
721
- |---|---|---|---|
722
- | `plugin:host:init` | once, after the host has loaded every plugin (including disabled ones) | `{ plugins: string[], failures: number }` | readiness proof, deferred init |
723
- | `plugins:reloaded` | end of a hot reload (plugin enabled/disabled, `plugins-state.json` changed) | `{ plugins: <manifest entry array> }` | rebuild caches, re-register external resources |
724
- | `config:changed` | `runtime-settings.json` changed (`aw config set` / settings page, bridged from SystemConfigService) | `{ type: 'config:changed', changed: string[], effective: object, sources: object }` | hot-update thresholds, refresh caches |
725
- | `event:permissions:changed` | after line grants were written successfully | `{ userId }` | refresh cached grant views |
726
- | `event:*` | **a subscription entry, not an emitted event** | — | use the bare `'*'` to receive everything (§4.1) |
727
- | `daq:sample` | DAQ **downlink-level** sampling (same point as WS `daq.reading`, on the node's `publishIntervalMs` cadence) | `{ nodeId, templateRef, value, state, at, lineId }` | limit alarms, statistics, interlocking |
728
- | `daq:frame` | multi-modal frames (vector / image) at downlink level, on the same frame-ingest path as `daq:sample` | `{ nodeId, templateRef, kind, at, lineId, preview?, metrics, thumbUrl?, state }` | custom sinks, derived metrics |
729
- | `dcw:write` | observation after a write-control ACK (never affects the write decision) | `{ nodeId, name, eng, prevValue, ok, source, lineId, at }` | write audit, trend recording |
730
- | `line:start` | a line starts running (batch window opens) | `{ lineId, runId, recipeId, productName? }` | batch-start interlocking |
731
- | `line:stop` | a line stops (batch window closes) | `{ lineId, runId }` | batch wrap-up, report generation |
732
- | `server:close` | server shutdown, after the per-plugin dispose queues have run | `{ at }` | final flush, outbound notification |
733
-
734
- `dcw:write`'s `source` is `'manual'` / `'recipe'` / `'agent'` / `'rollback'`; the payload
735
- **has no `message` field** (look at platform logs or the ledger for a failure reason).
736
-
737
- The `config:changed` payload **has no `at` field** — take the time yourself with `Date.now()`
738
- when you receive it, and read the new values from `ctx.config.get/all()`.
739
-
740
- ### 5.2 Browser-side events (`CLIENT_EVENTS`, 5 items)
741
-
742
- | Event | When it fires | Payload |
743
- |---|---|---|
744
- | `client:init` | after the client script's `setup(ctx)` has finished | `{ name }` |
745
- | `event:*` | live scene events (same source as the browser WS, via the event bridge) | the event's own payload |
746
- | `page:change` | route change finished (`page:finish`) | `{ path }` |
747
- | `i18n:changed` | UI language switched | `{ locale }` |
748
- | `client:destroy` | just before `ctx.dispose()` collects things | `{ name }` |
749
-
750
- ### 5.3 Subscription cheat sheet
751
-
752
- | What you want | Server plugin | Browser plugin |
753
- |---|---|---|
754
- | A named lifecycle hook (`daq:sample` / `dcw:write` / `line:start` …) | `ctx.hooks.on('daq:sample', fn)` | not delivered (server hooks never reach the browser) |
755
- | A scene event (e.g. `daq.reading`, `device.created`) | `ctx.events.on('daq.reading', fn)` | `ctx.on('daq.reading', fn)` |
756
- | Every scene event | `ctx.hooks.on('*', ({ type, payload }) => …)` | `ctx.on('event:*', fn)` |
757
- | A client-local hook (`client:init` / `page:change` / `i18n:changed` / `client:destroy`) | n/a | `ctx.hooks.on('page:change', fn)` |
758
-
759
- The two easiest mistakes:
760
-
761
- - The server wildcard is the bare `'*'` only: `ctx.hooks.on('event:*', fn)` **never fires**;
762
- - The client wildcard is the literal `'event:*'` only: `ctx.on('*', fn)` **never fires**, and
763
- `ctx.on('event:line.start', fn)` gets the prefix added twice (`event:event:line.start`) and
764
- likewise never fires.
765
-
766
- Scene events enter the bus as `event:<type>`, and `ctx.events.on('<type>', fn)` is the sugar that
767
- adds the prefix. So the correct subscription for the scene event `permissions.changed` is
768
- `ctx.events.on('permissions.changed', fn)`, while `ctx.hooks.on('permissions:changed', fn)`
769
- never fires.
770
-
771
- ### 5.4 Shutdown and hot-reload sequences
772
-
773
- ```text
774
- server shutdown (nitro close → shutdownPluginHost)
775
- └─ per-plugin ctx.onDispose queue (each entry try/catch)
776
- └─ broadcast server:close { at }
777
-
778
- plugin hot reload (plugins-state.json changed / plugin enabled-disabled / 10 s poll fallback)
779
- └─ per-plugin ctx.onDispose queue
780
- └─ unbind every listener registered through ctx.hooks
781
- └─ reload → broadcast plugins:reloaded
782
- └─ broadcast the scene event plugins.reloaded (the browser loader hot-injects / unloads client plugins from it)
783
- ```
784
-
785
- > v1 hooks are **observation-only** — they never change interlocking or write-control decisions;
786
- > veto (interception / rewriting) hooks are on the roadmap.
787
-
788
- ---
789
-
790
- ## 6. Browser-side SDK (`agentworkshop/sdk/client`)
791
-
792
- A plugin's `client.mjs` is a **self-contained ESM** module (no bare imports — the browser resolves
793
- it natively) exporting `setup(ctx)`. The entry must be declared in the plugin definition as
794
- `client: './client.mjs'`; the loader fetches the script from
795
- `GET /api/plugins/client/<plugin name>` and imports it dynamically.
796
-
797
- ### 6.1 Creation (host-invoked; plugins only write `setup`)
798
-
799
- ```js
800
- import { createClientContext } from 'agentworkshop/sdk/client'
801
-
802
- // host-side assembly (illustrative); a plugin author only writes setup(ctx) in client.mjs
803
- const listeners = new Set()
804
- const townBus = {
805
- subscribe(fn) { listeners.add(fn); return () => listeners.delete(fn) },
806
- }
807
-
808
- const ctx = createClientContext({
809
- name: 'my-plugin',
810
- // event bridge: the host feeds every WS bus message into dispatch
811
- eventBridge: dispatch => townBus.subscribe(e => dispatch(e.type, e.payload)),
812
- baseUrl: '', // same-origin; fill in the platform address for cross-origin integration
813
- ui: { slots: ['plugins.page'], registerPanel: () => () => {} },
814
- t: key => `plugin.my-plugin.${key}`, // the host passes a real translation helper
815
- getLocale: () => 'zh-CN',
816
- })
817
- ```
818
-
819
- ### 6.2 `ctx` members
820
-
821
- | Member | Notes |
822
- |---|---|
823
- | `ctx.name` | plugin name |
824
- | `ctx.sdkVersion` | `CLIENT_SDK_VERSION` |
825
- | `ctx.hooks` | the client-local `HookBus`; both local hooks and scene events ride this bus |
826
- | `ctx.on(type, fn)` | subscribe to **live scene events**; `type` is the **scene event name itself** (e.g. `'daq.reading'` / `'daq.alarm'` / `'daq.alarm.changed'` / `'dcw.written'` / `'daq.node.changed'` / `'device.updated'`), installed as `event:<type>` internally; returns an unsubscribe function and is **auto-collected on pagehide**. The only wildcard spelling is the literal **`'event:*'`** |
827
- | `ctx.fetch(path, opt?)` | same-origin platform API: automatic JSON, automatic `{data}` unwrapping, throws on non-2xx, and **automatically carries the platform token from the cookie** |
828
- | `ctx.el(tag, attrs, children)` | DOM builder: `style` / `class` / `on*` event attributes get special handling |
829
- | `ctx.mount(target, node)` | mount into any selector / element; falls back to `ctx.root()` when the target is missing |
830
- | `ctx.root()` | the plugin's private mount point `#aw-plugin-<name>` (bottom-right, lazily created) |
831
- | `ctx.ui` | UI injection surface: `slots` and `registerPanel(entry)` (§6.4) |
832
- | `ctx.t(key, params?)` | plugin namespace translation: `ctx.t('panel.title')` → `plugin.<name>.panel.title` (messages come from `i18n.json` in the plugin root; a miss falls back to the original key). **`params` is currently ignored — there is no interpolation** |
833
- | `ctx.locale` | the current UI language (read-only getter) |
834
- | `ctx.log` | prefixed console: `info` / `warn` / `error` (**no `debug`**) |
835
- | `ctx.dispose()` | unload: broadcast `client:destroy` → run local disposables → remove `root()`. **Idempotent**; it does not unregister panels (the loader does that on disable / hot reload) |
836
-
837
- Two wrong spellings of `ctx.on`: `ctx.on('*')` and `ctx.on('event:line.start')` both
838
- **never fire** — the former is not installed on the bare `'*'`, the latter gets a second prefix
839
- and becomes `event:event:line.start`.
840
-
841
- **Server hooks never reach the browser**: colon-named server hooks such as `daq:sample`,
842
- `dcw:write`, `line:start` / `line:stop` are not delivered to the client. Their browser-side
843
- counterparts are scene events (`daq.reading` / `daq.frame` / `dcw.written` and so on); subscribe
844
- to those with `ctx.on('<scene-type>')`.
845
-
846
- **Client lifecycle hooks cannot go through `ctx.on` either**: `client:init` / `page:change` /
847
- `i18n:changed` / `client:destroy` must be subscribed directly with `ctx.hooks.on(...)` (they carry
848
- no `event:` prefix).
849
-
850
- ### 6.3 Full example
851
-
852
- ```js
853
- export function setup(ctx) {
854
- const badge = ctx.el('div', {
855
- style: 'padding:8px 12px;border:1px solid #35e0a0;border-radius:10px;color:#35e0a0',
856
- }, ['samples: 0'])
857
- ctx.root().append(badge)
858
-
859
- let n = 0
860
- ctx.on('daq.reading', () => { badge.textContent = `samples: ${++n}` }) // scene event
861
- ctx.on('event:*', (payload) => ctx.log.info('scene event', payload)) // the only wildcard spelling
862
-
863
- ctx.hooks.on('page:change', ({ path }) => ctx.log.info('page →', path)) // local hook: subscribe directly
864
-
865
- // Consume the platform API (same-origin, cookie auth): the line list is { lines, states }, not an array
866
- ctx.fetch('/api/workshop/dcw/lines').then(({ lines }) => ctx.log.info('lines', lines.length))
867
- }
868
- ```
869
-
870
- ### 6.4 UI injection `ctx.ui.registerPanel`
871
-
872
- ```js
873
- let samples = 0
874
- ctx.on('daq.reading', () => { samples += 1 })
875
-
876
- const off = ctx.ui.registerPanel({
877
- slot: 'dashboard.widgets', // 'plugins.page' | 'settings.plugins' | 'dashboard.widgets'
878
- name: 'my-widget',
879
- title: 'Sample counter',
880
- titleKey: 'plugin.my-plugin.widget.title', // titleKey wins when present
881
- order: 100, // smaller comes first; default 100
882
- mount(el) {
883
- el.textContent = `samples: ${samples}`
884
- const tick = setInterval(() => { el.textContent = `samples: ${samples}` }, 1000)
885
- return () => clearInterval(tick) // called when the panel is unmounted
886
- },
887
- })
888
- off() // the returned unregister function; ctx.dispose() does not call it, the loader collects it on disable
889
- ```
890
-
891
- - `ctx.ui.slots` is exactly `['plugins.page', 'settings.plugins', 'dashboard.widgets']`.
892
- - `registerPanel` returns an unregister function; if `mount(el)` returns a function it is called
893
- when that panel is unmounted.
894
-
895
- ### 6.5 Constraints and trust
896
-
897
- - **Self-contained**: no bare imports of `vue` or other third-party packages (the browser's native
898
- import cannot resolve them) — build UI with native DOM (`ctx.el`);
899
- - **Trust model**: client scripts are served by platform endpoints, trusted at the same level as
900
- aw commands — only install plugins you trust;
901
- - **Isolation**: a single plugin failing to load only logs a console warning; the app and other
902
- plugins are unaffected.
903
-
904
- ---
905
-
906
- ## 7. Types and TypeScript
907
-
908
- ```ts
909
- import type { PluginDef, PluginContext, PlatformClient } from 'agentworkshop/sdk'
910
-
911
- export default {
912
- name: 'typed-plugin',
913
- auth: 'user',
914
- async setup(ctx: PluginContext) {
915
- const timeout: number = ctx.config.get('plugins.typed-plugin.timeout')
916
- const client: PlatformClient = ctx.api
917
- ctx.logger.info('api available:', typeof client.get === 'function', 'timeout:', timeout)
918
- },
919
- } satisfies PluginDef
920
- ```
921
-
922
- The runtime **does not import** the SDK (keeping the zero-dependency shape); types are erased at
923
- build time.
924
-
925
- Current coverage of the type declarations (always defer to `sdk/index.d.mts` and
926
- `sdk/client.d.mts`):
927
-
928
- - Declared: `PluginDef`, `PluginContext`, `PluginHostExtensions`, `PluginSettingDecl`,
929
- `PluginGroupDecl`, `PluginLogger`, `PluginKv`, `PluginHttp`, `CrudResource`, `PlatformClient`,
930
- `ConfigChangedPayload`, `HookBus`, `ClientContext`, `ClientUi`, `ClientPanelEntry`,
931
- `LIFECYCLE_EVENTS`, `CLIENT_EVENTS` and the factory functions.
932
- - **Not yet declared**: `isPathInside`, `validatePluginSettings`, `validatePluginGroups` and
933
- `resolvePluginGroupId` are runtime-only exports with no declaration in `.d.mts` — a TypeScript
934
- project importing them gets TS2614 and needs a local declaration or `await import()`.
935
- - In addition, `sdk/client.d.mts` declares an `el` named export that does not exist at runtime
936
- (the runtime has only `CLIENT_SDK_VERSION` and `createClientContext`); importing it compiles
937
- but yields `undefined` at runtime.
938
-
939
- ---
940
-
941
- ## 8. Versioning and compatibility policy
942
-
943
- - The SDK interface follows semver: patch = fixes; minor = new hooks / `ctx` members
944
- (backwards compatible); major = breaking contract changes. `SDK_VERSION` /
945
- `CLIENT_SDK_VERSION` are the versions on that line and are **independent of the npm package
946
- version** — never infer one from the other.
947
- - The host exposes `ctx.sdkVersion` so a plugin can degrade gracefully by feature.
948
- - Config-root hardening does not live in the single `aw start` command but in the **CLI context
949
- builder** — every `aw` command calls it while resolving the run root (idempotently), so no
950
- command fails just because a config-root directory is missing.
951
- - There is **no version-based directory-layout migration**: the only migration copies data files
952
- from the legacy locations into the config root, that is `cwd/data` (and the historical
953
- `cwd/server/data`) → `<configRoot>/data`, only for `.sqlite` / `.sqlite-wal` / `.sqlite-shm` /
954
- `.json`, with "newest wins" by `mtimeMs` on a name clash; when the config root falls back to
955
- `~/.AgentWorkShop` that migration is skipped to avoid cross-project pollution.
956
-
957
- ---
958
-
959
- ## Appendix: scope of this page
960
-
961
- This page is the single source of truth for the SDK; it follows the actual implementation in
962
- `sdk/*.mjs`, `sdk/*.d.mts`, `server/services/workshop/plugins/host.mjs` and `server/api/**`.
963
- CI copies this file to the site at `docs/site/en/sdk/guide.md`, and the Chinese original
964
- `docs/sdk.md` to `docs/site/sdk/guide.md`.
1
+ # AgentWorkShop SDK Development and Usage Guide
2
+
3
+ > The SDK is AgentWorkShop's **programming client and extension base**: external projects
4
+ > consume the platform REST surface through it, and plugins receive the host-injected
5
+ > runtime context through it (hooks / config / storage / timers / platform API / event stream).
6
+ > Zero third-party runtime dependencies; works on Node ≥ 23.4 and modern browsers.
7
+
8
+ **SDK version constants**: server-side `SDK_VERSION = '0.3.0'`, browser-side `CLIENT_SDK_VERSION = '0.3.0'`.
9
+ These two constants are the **interface version of the SDK itself** and evolve **independently**
10
+ from the npm package version (the `version` field in `package.json`, currently 0.9.0) —
11
+ them being out of sync is expected. Never use `SDK_VERSION` to infer the package version, or the reverse.
12
+ **Module format**: ESM only (only `import` / `export`; there is no CJS entry).
13
+ **Types**: `sdk/index.d.mts` and `sdk/client.d.mts` ship with the package, so TypeScript projects
14
+ get IntelliSense with zero configuration (coverage is described in §7).
15
+
16
+ ---
17
+
18
+ ## 1. Getting the SDK
19
+
20
+ ### 1.1 Global install (includes the CLI and the platform itself)
21
+
22
+ ```bash
23
+ npm install -g agentworkshop
24
+ ```
25
+
26
+ The SDK lives inside the global package at `$(npm prefix -g)/node_modules/agentworkshop/sdk/`.
27
+ Plugins **need not and should not** import it directly (see the host-injection model in §2);
28
+ it serves two audiences:
29
+
30
+ - **External integration**: embed AgentWorkShop's line / DAQ / write-control / device-twin
31
+ capabilities into your own node service;
32
+ - **Plugin development** (TypeScript): import types only for full IntelliSense — the runtime
33
+ is injected by the host.
34
+
35
+ ### 1.2 Project dependency (recommended for integrators)
36
+
37
+ ```bash
38
+ npm install agentworkshop # as a dependency (full SDK and types)
39
+ ```
40
+
41
+ ### 1.3 Import paths
42
+
43
+ `package.json` exposes exactly four `exports` entries:
44
+
45
+ | Import | Resolves to | Contents |
46
+ |---|---|---|
47
+ | `agentworkshop` | `sdk/index.mjs` | **Exactly the same facade** as `agentworkshop/sdk` (the root specifier was previously undocumented; it works) |
48
+ | `agentworkshop/sdk` | `sdk/index.mjs` | The whole facade (server + browser + platform REST client + types) |
49
+ | `agentworkshop/sdk/client` | `sdk/client.mjs` | Browser only (`createClientContext`) |
50
+ | `agentworkshop/package.json` | `package.json` | Package metadata |
51
+
52
+ **Deep paths are not importable**: paths such as `agentworkshop/sdk/api.mjs` or
53
+ `agentworkshop/sdk/hooks.mjs` do not appear in `exports`, and Node throws
54
+ `ERR_PACKAGE_PATH_NOT_EXPORTED`. Take every symbol from one of the three entry points above.
55
+
56
+ ```js
57
+ import { createPlatformClient, definePlugin, HookBus } from 'agentworkshop/sdk'
58
+ import { createClientContext } from 'agentworkshop/sdk/client' // browser only
59
+ ```
60
+
61
+ ### 1.4 Named export list
62
+
63
+ | Entry | Named exports |
64
+ |---|---|
65
+ | `agentworkshop/sdk` (equivalent to `agentworkshop`) | `SDK_VERSION`, `definePlugin`, `createPluginContext`, `createRouteTable`, `validatePluginModule`, `validatePluginSettings`, `validatePluginGroups`, `resolvePluginGroupId`, `pluginKvExists`, `isPathInside`, `HookBus`, `createPlatformClient`, `CLIENT_SDK_VERSION`, `createClientContext`, `LIFECYCLE_EVENTS`, `CLIENT_EVENTS` |
66
+ | `agentworkshop/sdk/client` | `CLIENT_SDK_VERSION`, `createClientContext` |
67
+
68
+ ### 1.5 The remaining named exports
69
+
70
+ Plugin authors normally work with the host-injected `ctx` (§4); the symbols below serve host
71
+ assembly, scaffolding and validation tooling.
72
+
73
+ | Symbol | Signature | Purpose |
74
+ |---|---|---|
75
+ | `createPluginContext(opts)` | `opts` is the host assembly object | Called by the host to build `ctx`; plugin authors never call it themselves |
76
+ | `createRouteTable()` | → `{ register, resolve, byPlugin, unregisterPlugin, size }` | Host route table: exact match, mounted at `/api/plugins/<name><path>` |
77
+ | `definePlugin(def)` | `def` → `def` | Type sugar plus shape validation; throws on an invalid definition. The host also accepts a bare object export |
78
+ | `validatePluginModule(mod, source)` | → `{ ok, def?, error? }` | Pre-load entry check (`name` required, `setup` must be a function, `client` must be a string, `settings` must be an array) |
79
+ | `validatePluginSettings(pluginName, defs)` | → `{ descriptors, errors }` | Validate and normalize setting declarations; rules in §4.9 |
80
+ | `validatePluginGroups(pluginName, defs)` | → `{ groups, errors }` | Validate and normalize config-group declarations |
81
+ | `resolvePluginGroupId(pluginName, declaredId)` | → `string` | Fold a declared group name into the `plugin-<name>[-<suffix>]` namespace |
82
+ | `pluginKvExists(dataDir, name)` | → `boolean` | Probe whether `<dataDir>/plugins/<name>/kv.json` exists |
83
+ | `isPathInside(dir, p)` | → `boolean` | Path containment test (uses `relative()`, so a sibling directory with the same prefix such as `…/foo-evil` cannot fool it) |
84
+ | `HookBus` | `class` | The hook bus implementation; the host owns one shared instance and plugins receive a scoped facade (§4.1) |
85
+ | `LIFECYCLE_EVENTS` | frozen array (11 items) | Authoritative server-side event list (§5) |
86
+ | `CLIENT_EVENTS` | frozen array (5 items) | Authoritative browser-side event list (§5) |
87
+
88
+ ---
89
+
90
+ ## 2. Core model: two identities, one SDK
91
+
92
+ | Identity | Form | Role of the SDK |
93
+ |---|---|---|
94
+ | **External integrator** | regular dependency | call `createPlatformClient()` to consume the platform REST surface |
95
+ | **Plugin author** | exports `{ name, setup(ctx) }` | `ctx` is the host-injected SDK context — **zero imports**, the SDK runtime is provided by the host |
96
+
97
+ > Why don't plugins import the SDK directly? Globally installed plugin directories
98
+ > (`~/.AgentWorkShop/plugins/`) are outside the node_modules resolution chain, so host
99
+ > injection is the only zero-pitfall shape (the same paradigm as VSCode's `activate(context)`).
100
+
101
+ A plugin entry is an ordinary ESM module:
102
+
103
+ ```js
104
+ export default {
105
+ name: 'my-plugin',
106
+ version: '1.0.0',
107
+ description: 'Example plugin',
108
+ auth: 'none', // declarative auth for plugin routes, see §4.4
109
+ client: './client.mjs', // browser entry (optional), see §6
110
+ async setup(ctx) {
111
+ ctx.logger.info('loaded, directory:', ctx.dir)
112
+ },
113
+ }
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 3. Platform REST client `createPlatformClient`
119
+
120
+ The SDK fronts the platform as a "project service client": it attaches the Bearer token,
121
+ unwraps the unified envelope `{ code, message, data } → data`, and throws according to the
122
+ rules below.
123
+
124
+ ### 3.1 Creating a client
125
+
126
+ ```js
127
+ import { createPlatformClient } from 'agentworkshop/sdk'
128
+
129
+ const api = createPlatformClient({
130
+ baseUrl: 'http://127.0.0.1:3001', // defaults to '' (same-origin relative); integrators pass the platform address
131
+ token: '<bearer-token>', // optional; api.setToken() swaps it later
132
+ timeoutMs: 10_000, // optional; per-request timeout (AbortSignal), default 10 000
133
+ logger, // optional; warns when a request fails
134
+ })
135
+ ```
136
+
137
+ - `baseUrl` defaults to `''`, i.e. same-origin relative paths; it **may also be a function**
138
+ evaluated lazily on every request (the host's listening port is only known once the server
139
+ actually listens, so the host passes `() => origin`).
140
+ - A trailing `/` is stripped: `'http://host:3001/'` and `'http://host:3001'` are equivalent.
141
+
142
+ ### 3.2 Envelope and error semantics (three paths — do not mix them up)
143
+
144
+ | Case | Behaviour |
145
+ |---|---|
146
+ | HTTP non-2xx | throws an `Error` carrying **only `err.status` and `err.body`**; this path **does not set `err.code`** |
147
+ | HTTP 200 but envelope `code !== 0` | throws an `Error` carrying `err.status`, `err.code` **and** `err.body` |
148
+ | Success | returns the unwrapped `data`; a body with no `code`/`data` envelope is returned **as-is** (for example `GET /api/workshop/plugins`, `GET /api/plugins/manifest`) |
149
+
150
+ ```js
151
+ try {
152
+ await api.daqNodes.get('no-such-node')
153
+ }
154
+ catch (err) {
155
+ err.status // 404
156
+ err.body // { code: 'NOT_FOUND', message: '…', data: null }
157
+ err.code // undefined —— this path does not set code
158
+ }
159
+ ```
160
+
161
+ > On the platform side `defineApiHandler` sets a non-2xx status for business errors, so in
162
+ > practice you almost always hit the first path. The second path is a defensive check inside
163
+ > the SDK (`sdk/api.mjs` inspects `code` before unwrapping) aimed at endpoints that do not go
164
+ > through the unified wrapper yet still return an error envelope under HTTP 200 — without that
165
+ > check a plugin would unwrap the error envelope to `null` and treat it as success.
166
+
167
+ ### 3.3 Generic calls (any platform path)
168
+
169
+ | Method | Signature | Notes |
170
+ |---|---|---|
171
+ | `api.call(method, path, body?, opt?)` | low level | `opt` may carry `{ timeoutMs, headers }`; returns the unwrapped `data` |
172
+ | `api.get(path, query?)` | query object serialized automatically | `api.get('/api/workshop/dcw', { page: 1 })` |
173
+ | `api.post(path, body?)` | JSON-serialized | |
174
+ | `api.patch(path, body?)` | | |
175
+ | `api.delete(path)` | | |
176
+ | `api.setToken(token)` | chainable, returns `api` | `api.setToken(res.token)` after login; pass `null` to clear |
177
+ | `api.ping()` | `GET /api/plugins/manifest` | liveness probe (unauthenticated) |
178
+
179
+ `toQuery` **drops `undefined`, `null` and empty-string** values, so
180
+ `api.get('/x', { lineId: undefined })` never produces `?lineId=undefined`.
181
+
182
+ ### 3.4 Resource surfaces and their real base paths
183
+
184
+ Every resource is built by the internal `resource(root)` helper, so **all of them expose five
185
+ methods**: `list(query?)`, `get(id)`, `create(body)`, `update(id, patch)`, `remove(id)`.
186
+ "A method exists" does not mean "the server route exists" — real availability is in §3.5.
187
+
188
+ | Namespace | Base path | Extra methods |
189
+ |---|---|---|
190
+ | `api.users` | `/api/users` | `login(email, password)` → `{ user, token }`; `me()` |
191
+ | `api.lines` | `/api/workshop/dcw/lines` | `start(id, recipeId = '')`; `stop(id)` |
192
+ | `api.products` | `/api/workshop/dcw/products` | — |
193
+ | `api.recipes` | `/api/workshop/dcw/recipes` | — |
194
+ | `api.dcwNodes` | `/api/workshop/dcw` | — |
195
+ | `api.daqNodes` | `/api/workshop/daq` | `alarms()` → `GET /api/workshop/daq/alarms` |
196
+ | `api.templates` | — | `daq()` / `dcw()`: read `.templates` off the two list responses |
197
+ | `api.twins` | `/api/workshop/device-twins` | — |
198
+ | `api.teams` | `/api/workshop/teams` | — |
199
+ | `api.agents` | `/api/workshop/agents` | — |
200
+ | `api.channels` | `/api/workshop/channels` | — |
201
+ | `api.permissions` | — | `overview()` → `GET /api/workshop/permissions`; `set({ userId, grants })` → `PUT /api/workshop/permissions` (admin) |
202
+ | `api.plugins` | — | `manifest()` |
203
+
204
+ The payload shape for `api.permissions.set`:
205
+
206
+ ```json
207
+ { "userId": "<user id>", "grants": [{ "lineId": "<line id>", "mode": "readonly" }] }
208
+ ```
209
+
210
+ `mode` is `'readonly'`, `'operate'` or `null` (passing `null` revokes that grant).
211
+
212
+ ### 3.5 Real route support
213
+
214
+ `resource(root)` always generates five methods, but only some server route files exist.
215
+ **The table below is the result of checking every route file**: "no" means the call targets a
216
+ path that does not exist and therefore 404s.
217
+
218
+ | Namespace | `list` | `get(id)` | `create` | `update(id)` | `remove(id)` | Notes |
219
+ |---|---|---|---|---|---|---|
220
+ | `users` | yes | yes | yes | **no** | yes | The server only has `PUT /api/users/:id`, while `update()` sends `PATCH`; to update a user call `api.call('PUT', '/api/users/' + id, patch)` directly. `list`/`get`/`create` all require admin |
221
+ | `lines` | yes | no | yes | yes | yes | Plus `start` / `stop`. `create` requires the `admin` or `editor` role |
222
+ | `products` | **no** | no | yes | yes | yes | There is no `GET /api/workshop/dcw/products`; read the product list from `.products` of `GET /api/workshop/dcw` (see §3.6) |
223
+ | `recipes` | yes | no | yes | yes | yes | `list()` returns `{ recipes, runs }`; there is no route for `recipes.get(id)` |
224
+ | `dcwNodes` | yes | no | yes | yes | yes | No `[id].get.ts`; read the node list from `.nodes` of `GET /api/workshop/dcw` |
225
+ | `daqNodes` | yes | no | yes | yes | yes | No `[id].get.ts`; `alarms()` works |
226
+ | `twins` | yes | no | yes | yes | yes | No `[id].get.ts` |
227
+ | `teams` | yes | yes | yes | yes | yes | Full CRUD |
228
+ | `agents` | yes | yes | yes | yes | yes | Full CRUD |
229
+ | `channels` | yes | yes | yes | yes | yes | Full CRUD |
230
+ | `permissions` | `overview()` only | — | — | — | — | No five-method `resource()`; only `overview()` and `set()` |
231
+ | `plugins` | `manifest()` only | — | — | — | — | Unauthenticated |
232
+
233
+ Authentication and timeouts:
234
+
235
+ - Business read endpoints such as `api.lines.list()`, `api.daqNodes.list()` and
236
+ `api.dcwNodes.list()` go through platform auth and need a user token (`api.setToken(...)`,
237
+ or the cookie in a browser);
238
+ - `api.plugins.manifest()` and `api.ping()` are unauthenticated — the only two endpoints you
239
+ can call without a token.
240
+
241
+ ### 3.6 Response shapes at a glance
242
+
243
+ **A list does not necessarily return an array** — this is the easiest trap in the whole SDK.
244
+ Every row below was checked against the server handler.
245
+
246
+ | Call | Real response |
247
+ |---|---|
248
+ | `api.lines.list()` | `{ lines, states }` (**not an array**) |
249
+ | `api.daqNodes.list()` | `{ controller, nodes, meta, driverAvailable, infra, templates }` |
250
+ | `api.dcwNodes.list()` | a multi-key object (`controller` / `nodes` / `templates` / `recipes` / `runs` / `history` / `products` / `lines` …), **not a node array** |
251
+ | `api.recipes.list()` | `{ recipes, runs }` |
252
+ | `api.twins.list()` | `{ twins }` |
253
+ | `api.daqNodes.alarms()` | `{ alarms }` |
254
+ | `api.permissions.overview()` | `{ lines, users }` |
255
+ | `api.templates.daq()` / `api.templates.dcw()` | an array (`.templates ?? []`) |
256
+ | `api.teams.list()` / `api.agents.list()` / `api.channels.list()` | an array |
257
+ | `api.users.list()` | `{ items, total, page, pageSize }` |
258
+ | `api.plugins.manifest()` | `{ plugins }` (no envelope, returned as-is) |
259
+ | `api.lines.create(body)` | `{ line }` |
260
+ | `api.recipes.create(body)` | `{ recipe }` |
261
+ | `api.products.create(body)` | `{ product }` |
262
+ | `api.dcwNodes.create(body)` / `api.daqNodes.create(body)` | `{ node }` |
263
+ | `api.twins.create(body)` | `{ twin }` |
264
+ | `api.lines.start(id, recipeId)` | `{ run, line }` |
265
+ | `api.users.login(email, password)` | `{ user, token }` |
266
+
267
+ About `api.daqNodes.list({ lineId })`: the `{ lineId }` query argument **is not read by that
268
+ handler**. Line filtering happens server-side from the caller's permissions (a regular user
269
+ only sees nodes of granted lines). Do not present it as a working client-side filter.
270
+
271
+ About `api.lines.start(id, recipeId)`: `recipeId` defaults to an empty string, but the server
272
+ **requires a recipe that actually exists** (an empty string or an unknown id yields
273
+ 404 `Recipe 不存在`). When a line has recipes, `recipeId` is effectively mandatory.
274
+
275
+ ### 3.7 Full example: external integration
276
+
277
+ ```js
278
+ import { createPlatformClient } from 'agentworkshop/sdk'
279
+
280
+ const api = createPlatformClient({ baseUrl: 'http://plant.local:3001' })
281
+
282
+ const { token } = await api.users.login('you@example.com', 'secret')
283
+ api.setToken(token)
284
+
285
+ // 1) Line list: { lines, states } —— not an array
286
+ const { lines, states } = await api.lines.list()
287
+ console.log(`${lines.length} lines`)
288
+ for (const l of lines) {
289
+ console.log(` ${l.name} → ${states.find(s => s.lineId === l.id)?.state ?? 'unknown'}`)
290
+ }
291
+
292
+ // 2) DAQ surface: { controller, nodes, meta, driverAvailable, infra, templates }
293
+ const { nodes } = await api.daqNodes.list()
294
+ console.log(`${nodes.length} DAQ nodes, ${nodes.filter(n => n.state === 'offline').length} offline`)
295
+
296
+ // 3) Write-control surface: the node list is an object too; products come from .products
297
+ const dcw = await api.dcwNodes.list()
298
+ console.log(`${dcw.nodes.length} DCW nodes, ${dcw.products.length} products`)
299
+
300
+ // 4) Recipe surface: { recipes, runs }
301
+ const { recipes } = await api.recipes.list()
302
+
303
+ // 5) Starting a line: recipeId must be a real recipe of that line (an empty string is rejected)
304
+ const line = lines[0]
305
+ const recipe = recipes.find(r => r.lineId === line?.id)
306
+ if (line && recipe) {
307
+ await api.lines.start(line.id, recipe.id)
308
+ await api.lines.stop(line.id)
309
+ }
310
+
311
+ // 6) Line grants (admin): overview() reads everything, set() writes in bulk
312
+ const { users } = await api.permissions.overview()
313
+ const target = users[0]
314
+ if (target && line) {
315
+ await api.permissions.set({ userId: target.id, grants: [{ lineId: line.id, mode: 'readonly' }] })
316
+ }
317
+ ```
318
+
319
+ ---
320
+
321
+ ## 4. Plugin context `ctx` (the complete member surface)
322
+
323
+ The `ctx` handed to `setup(ctx)` is the host-assembled SDK runtime. **The table below is the
324
+ complete surface**; the last three rows (`ctx.daq` / `ctx.omp` / `ctx.services`) are attached
325
+ directly by the plugin host before `setup` runs and are not part of `sdk/context.mjs`.
326
+
327
+ | Group | Member | Type | Notes |
328
+ |---|---|---|---|
329
+ | Identity | `ctx.name` | `string` | plugin name (= directory name / declared name) |
330
+ | | `ctx.scope` | `'builtin' \| 'project' \| 'user'` | load scope; on a name clash the priority is builtin > project > user |
331
+ | | `ctx.dir` | `string` | absolute path of the plugin directory |
332
+ | | `ctx.sdkVersion` | `string` | SDK interface version (= `SDK_VERSION`) |
333
+ | Hooks | `ctx.hooks` | `{ on, once, off, emit }` | per-plugin scoped hook facade (§4.1); **not a `HookBus` instance and has no `.size`** |
334
+ | Logging | `ctx.logger` | `{ debug, info, warn, error }` | output is prefixed `[aw-plugins] [<plugin name>]` |
335
+ | Config | `ctx.config.get(key)` | any | effective value (after the four-layer merge) |
336
+ | | `ctx.config.all()` | `Record<string, any>` | shallow copy of every effective setting |
337
+ | | `ctx.config.onChange(fn)` | unsubscribe function | subscribes to `config:changed` (§4.5) |
338
+ | | `ctx.config.defineGroup(def)` | group object \| `null` | declare a plugin-owned config group (§4.9) |
339
+ | | `ctx.config.defineField(decl)` | descriptor \| `null` | declare a setting field (key auto-addressed as `plugins.<name>.<key>`) |
340
+ | | `ctx.config.removeGroup(id)` | `boolean` | remove a group declaration |
341
+ | | `ctx.config.removeField(key)` | `boolean` | remove a field declaration |
342
+ | | `ctx.config.groups()` / `fields()` | arrays | the groups / fields this plugin currently has registered (read-only snapshot) |
343
+ | Paths | `ctx.paths` | `{ home, configRoot, dataDir }` | config-root information (home mode = `~/.AgentWorkShop`) |
344
+ | | `ctx.dataDir` | `string` | this plugin's private data directory = `<paths.dataDir>/plugins/<name>` |
345
+ | Storage | `ctx.kv` | `{ get, set, all, bump }` | plugin-private KV (§4.2); **there is no `reset()`** |
346
+ | Timers | `ctx.timer.setInterval(fn, ms)` / `setTimeout(fn, ms)` | timer id | auto `unref` + auto-collected on shutdown / hot reload (§4.3) |
347
+ | Cleanup | `ctx.onDispose(fn)` | the `fn` you passed | register a cleanup callback (§4.3) |
348
+ | | `ctx.subscriptions.add(d)` | the `d` you passed | register a `{ dispose() }` object or a function; same collection queue as `onDispose` |
349
+ | Routes | `ctx.route(method, path, handler)` | `boolean` | mounts at `/api/plugins/<name><path>`; auth is declared by the plugin's `auth` field (§4.4) |
350
+ | Platform | `ctx.api` | `PlatformClient` | loopback REST client (**no token by default**; §4.6) |
351
+ | Network | `ctx.http.get(url, opts)` / `post(url, body, opts)` | `Promise<Response>` | outbound requests; the guard is protocol-only; 8 s default timeout (§4.6) |
352
+ | Events | `ctx.events.on(type, fn)` / `off(type, fn)` | unsubscribe function | live scene event subscription; the `event:` prefix is added for you (§4.6) |
353
+ | Line permissions (host-injected) | `ctx.permissions` | see §4.7 | query and manage the per-user, per-line three-state grants |
354
+ | DAQ extension (host-injected) | `ctx.daq` | see §4.8 | driver / processor / template registration + frame subscription + time-series queries |
355
+ | Agent tools (host-injected) | `ctx.omp.registerTool(tool)` | see §4.8 | hot-inject a custom host tool at runtime |
356
+ | Runtime services (host-injected) | `ctx.services` | see §4.8 | lazy service access + cross-plugin service provision |
357
+
358
+ `ctx` has **no** `ctx.routes`, `ctx.dcw`, `ctx.scene` or `ctx.version`: route registration is
359
+ the singular `ctx.route()`; write-control traffic is observed through the `dcw:write` hook;
360
+ scene events go through `ctx.events`.
361
+
362
+ ### 4.1 `ctx.hooks` — the hook facade
363
+
364
+ The host owns one shared `HookBus` named `aw-plugins`; a plugin receives a **scoped facade
365
+ exposing only `on` / `once` / `off` / `emit`**. Listeners registered through it are tracked and
366
+ auto-unbound when the plugin hot-reloads (the one cleanup path that always worked).
367
+ The facade exposes no diagnostic properties such as `count` / `size` / `listeners`.
368
+
369
+ ```js
370
+ function onSample(sample) {
371
+ ctx.kv.bump('samples')
372
+ }
373
+
374
+ const off = ctx.hooks.on('daq:sample', onSample) // returns an unsubscribe function
375
+ ctx.hooks.once('server:close', () => { /* teardown, fires once */ })
376
+ ctx.hooks.off('daq:sample', onSample) // manual unbind: pass the original handler
377
+ off() // or just call the function returned by on()
378
+
379
+ await ctx.hooks.emit('my-plugin:custom', { hello: 1 }) // inter-plugin messaging: other plugins can listen
380
+ ctx.hooks.on('*', ({ type, payload }) => { /* every event */ })
381
+ ```
382
+
383
+ Semantics (matching `sdk/hooks.mjs`):
384
+
385
+ - **Async-serial**: listeners of one type run in registration order and are awaited; the next
386
+ one does not start until the previous returns;
387
+ - **Error isolation**: one throwing listener is only counted and warned about; siblings and the
388
+ main service are unaffected;
389
+ - **Circuit breaker**: a listener failing **8 times in a row** is removed automatically;
390
+ **any single success resets the counter**, so occasional failures never accumulate into an eviction;
391
+ - **Wildcard**: the only server-side wildcard spelling is the bare `'*'`; its callback receives
392
+ `{ type, payload }` and runs after the named listeners;
393
+ - **The return value is fan-out, not a waterfall**: every listener receives **the same unmodified
394
+ payload**; `emit()` merely returns "the last non-`undefined` return value" — values are never
395
+ threaded from one listener to the next;
396
+ - **v1 is observation-only**: there is no veto / interception / rewriting.
397
+
398
+ > `ctx.hooks.on('event:*')` never fires. `event:*` is the subscription entry name the list uses
399
+ > for scene events; the real wildcard is the bare `'*'`, and the ergonomic scene-event form is
400
+ > `ctx.events.on('<type>', fn)` (§4.6).
401
+
402
+ ### 4.2 `ctx.kv` — plugin-private persistence
403
+
404
+ ```js
405
+ ctx.kv.set('threshold', 100)
406
+ ctx.kv.bump('samples') // atomic increment, +1 by default; bump(key, by) sets the step
407
+ ctx.kv.bump('samples', 5)
408
+ ctx.kv.get('threshold') // 100
409
+ ctx.kv.all() // { samples: 19453, threshold: 100, ... }
410
+ ```
411
+
412
+ - **These four methods only**: `get` / `set` / `all` / `bump`. **No `reset()`, no `delete()`,
413
+ no `keys()`**; to clear a key, `set` it explicitly or switch to a new key.
414
+ - On-disk location: `<ctx.dataDir>/kv.json`, i.e. `<paths.dataDir>/plugins/<name>/kv.json`.
415
+ - **In-memory state is authoritative + a 200 ms debounced atomic write** (temp file plus
416
+ `rename`), so a high-frequency hook (`daq:sample`) and a low-frequency hook (`line:stop`)
417
+ calling concurrently cannot race on read-modify-write.
418
+ - On shutdown / hot reload the pending debounce is **cancelled and flushed synchronously**, so a
419
+ `set` from the last 200 ms before exit is not lost.
420
+ - Typical uses: counters, alarm state, threshold config, heartbeat timestamps.
421
+
422
+ ### 4.3 `ctx.timer` / `ctx.onDispose` / `ctx.subscriptions`
423
+
424
+ ```js
425
+ ctx.timer.setInterval(() => ctx.kv.set('heartbeat', Date.now()), 5000)
426
+ ctx.timer.setTimeout(() => ctx.logger.info('one-shot task'), 1000)
427
+
428
+ ctx.onDispose(() => ctx.logger.info('plugin cleanup done'))
429
+
430
+ // subscriptions.add accepts a { dispose() } object or a function; same queue as onDispose
431
+ const controller = new AbortController()
432
+ ctx.subscriptions.add({ dispose() { controller.abort() } })
433
+ ```
434
+
435
+ - Timers created by `ctx.timer.setInterval/setTimeout` are automatically `unref`ed (they never
436
+ hold the process open) and automatically registered with the collection queue, so **you never
437
+ have to clear them by hand**.
438
+ - `ctx.onDispose(fn)` and `ctx.subscriptions.add(d)` (`d` may be `{ dispose() }` or a function)
439
+ share **one host-owned collection queue** with the timers.
440
+ - That queue runs on **both server shutdown and plugin hot reload** — a guarantee this version of
441
+ the SDK can make after the fix (`createPluginContext` previously failed to forward the host's
442
+ `onDispose` injection point, leaking timers and losing the final kv write).
443
+
444
+ Server shutdown sequence:
445
+
446
+ ```text
447
+ server shutdown (nitro close)
448
+ └─ per-plugin dispose queue (each entry try/catch): clear timers, flush kv synchronously, unbind subscriptions…
449
+ └─ broadcast server:close { at }
450
+ ```
451
+
452
+ ### 4.4 `ctx.route` — plugin API
453
+
454
+ ```js
455
+ export default {
456
+ name: 'my-plugin',
457
+ auth: 'user', // declarative auth: 'none' (default) | 'user' | 'admin' | 'agent-or-user'
458
+ async setup(ctx) {
459
+ // returns boolean: true = registration succeeded, false = handler is not a function
460
+ const ok = ctx.route('GET', '/stats', () => ctx.kv.all())
461
+ if (!ok) ctx.logger.warn('route registration failed')
462
+
463
+ ctx.route('POST', '/threshold', (event) => {
464
+ const body = event.awBody // the JSON body the host already pre-read (may be undefined)
465
+ const threshold = Number(body?.threshold)
466
+ if (!Number.isFinite(threshold)) return { ok: false, error: 'threshold must be a number' }
467
+ ctx.kv.set('threshold', threshold)
468
+ return { ok: true, threshold } // the return value is serialized to JSON by nitro
469
+ })
470
+ },
471
+ }
472
+ ```
473
+
474
+ → mounted at `GET /api/plugins/<plugin name>/stats` and
475
+ `POST /api/plugins/<plugin name>/threshold`.
476
+
477
+ - **The return value is `boolean`**: `false` when `handler` is not a function.
478
+ - **Paths** start with `/` (a missing one is added for you); the base is always
479
+ `/api/plugins/<plugin name>`.
480
+ - **Auth is declarative — do not write your own**: give the plugin definition
481
+ `auth: 'none' | 'user' | 'admin' | 'agent-or-user'` and the platform catch-all
482
+ (`server/api/plugins/[name]/[...path].ts`) validates it **before** your handler runs,
483
+ returning 401 on failure.
484
+ - **The handler cannot obtain a user object**: `resolveUser(event)` is not on `ctx` and cannot be
485
+ imported from a plugin module. When you need an identity, combine the `auth` gate with
486
+ `ctx.api.setToken(...)` and go through the platform API.
487
+ - **The JSON body is already pre-read** and attached as `event.awBody` (not h3's `readBody`).
488
+ - Handler errors are isolated: the platform logs with the plugin name and returns a 500 envelope
489
+ (`插件路由处理失败(<plugin name>): <original message>`) without leaking a stack trace.
490
+
491
+ ### 4.5 `ctx.config` — reading config and reacting to change
492
+
493
+ ```js
494
+ ctx.config.get('plugins.my-plugin.threshold') // effective value (after the four-layer merge)
495
+ ctx.config.all() // every effective setting (shallow copy)
496
+
497
+ const off = ctx.config.onChange((payload) => { // payload: the config:changed payload, see §5
498
+ ctx.logger.info('config changed:', payload?.changed)
499
+ })
500
+ ```
501
+
502
+ `config:changed` is bridged onto the plugin bus from the platform settings service, and
503
+ `ctx.config.onChange(fn)` is essentially `ctx.hooks.on('config:changed', fn)`, so it is likewise
504
+ auto-unbound on hot reload.
505
+
506
+ ### 4.6 `ctx.api` / `ctx.http` / `ctx.events` — which one to use
507
+
508
+ | Need | Use | Why |
509
+ |---|---|---|
510
+ | Read / write **platform business data** (lines, nodes, twins…) | `ctx.api` | auth / envelope / resource semantics out of the box |
511
+ | Call an **external system** (MES, webhook, mail gateway) | `ctx.http` | generic requests plus a protocol guard |
512
+ | React to the **live stream** (samples, alarms, start/stop) | `ctx.events` / `ctx.hooks.on` | in-process, zero HTTP overhead |
513
+
514
+ ```js
515
+ // ctx.api: the loopback PlatformClient. baseUrl is resolved lazily by the host; no token by default.
516
+ const { token } = await ctx.api.users.login('user@example.com', 'secret')
517
+ ctx.api.setToken(token) // later loopback calls carry that token
518
+ const { lines } = await ctx.api.lines.list()
519
+
520
+ // ctx.http: outbound requests, protocol guard only (http/https), 8 s default timeout
521
+ const res = await ctx.http.get('https://mes.example.com/health', { timeoutMs: 3000 })
522
+ const payload = await ctx.http.post('https://mes.example.com/events', { lineId: 'L1' })
523
+
524
+ // ctx.events: scene events — pass the scene event name itself; the `event:` prefix is added for you
525
+ ctx.events.on('daq.reading', r => ctx.logger.info('sample', r.nodeId))
526
+ ctx.events.on('permissions.changed', ({ userId }) => ctx.logger.info('grants changed', userId))
527
+ ctx.events.on('device.created', d => ctx.logger.info('new device', d.id))
528
+ const off = ctx.events.on('daq.alarm', a => ctx.logger.warn('alarm', a.id))
529
+ off()
530
+ ```
531
+
532
+ - `ctx.api` has **no token by default**: unauthenticated endpoints (`plugins.manifest` / `ping`)
533
+ work immediately; anything else needs a login followed by `setToken`. If you only need
534
+ in-process data, prefer `ctx.events` and `ctx.hooks` (no auth, no overhead).
535
+ - The `ctx.http` guard **checks the protocol only** and does not restrict hosts — the target
536
+ address is the plugin's own responsibility.
537
+ - `ctx.events.on(type, fn)` / `off(type, fn)` install `event:<type>` underneath; to receive every
538
+ scene event use `ctx.hooks.on('*', ({ type, payload }) => …)`.
539
+
540
+ ### 4.7 `ctx.permissions` — per-user, per-line grants
541
+
542
+ | Method | Returns | Notes |
543
+ |---|---|---|
544
+ | `lineMode(user, lineId)` | `'none' \| 'readonly' \| 'operate'` | `user` is `{ id, role }`; admin/editor is always `operate` |
545
+ | `visibleLineIds(user)` | `Set<string> \| null` | `null` means unrestricted (admin/editor) |
546
+ | `listGrants(userId)` | `Array<{ lineId, mode, grantedBy, grantedAt }>` | read every grant of one user |
547
+ | `setGrants(userId, grants, grantedBy?)` | the grants after the write | `grants` looks like `[{ lineId, mode }]` with `mode` = `'readonly'` / `'operate'` / `null` |
548
+
549
+ ```js
550
+ const userId = ctx.kv.get('watchUserId') // a plugin gets userIds from event payloads or its own config
551
+ if (userId) {
552
+ const mode = ctx.permissions.lineMode({ id: userId, role: 'user' }, 'line-1')
553
+ const visible = ctx.permissions.visibleLineIds({ id: userId, role: 'user' })
554
+ const grants = ctx.permissions.listGrants(userId)
555
+ ctx.logger.info(`mode=${mode} visible=${visible ? visible.size : 'all'} grants=${grants.length}`)
556
+ }
557
+
558
+ // Change notification is the scene event permissions.changed, subscribed via ctx.events (prefix added for you)
559
+ ctx.events.on('permissions.changed', ({ userId }) => ctx.logger.info('grants changed:', userId))
560
+ ```
561
+
562
+ ### 4.8 Host-injected extensions `ctx.daq` / `ctx.omp` / `ctx.services`
563
+
564
+ **`ctx.daq`** — multi-modal DAQ extension (v0.6 frame pipeline):
565
+
566
+ | Method | Notes |
567
+ |---|---|
568
+ | `registerDriver({ kind, available, sample, test })` | register a custom driver |
569
+ | `registerProcessor(kind, name, fn)` | register a sink processor (after sampling, before storage) |
570
+ | `registerTemplate(def)` | register a DAQ node template (`key` / `signalKind` / `vector` / `sink` / `metrics`) |
571
+ | `onFrame(fn)` | frame subscription sugar (= `ctx.hooks.on('daq:frame', fn)`) |
572
+ | `onSample(fn)` | sample subscription sugar (= `ctx.hooks.on('daq:sample', fn)`) |
573
+ | `query({ nodeIds?, lineId?, from?, to?, bucketMs? })` | unauthenticated time-series query (straight to `queryTagged`) |
574
+ | `nodes()` | DAQ node metadata snapshot (including line ownership) |
575
+
576
+ ```js
577
+ ctx.daq.registerProcessor('vector', 'my-derive', (frame) => {
578
+ // frame = { kind: 'vector'|'image', points? | blob? (image producer side only), metrics }
579
+ return { ...frame, metrics: { ...frame.metrics, myMetric: 1 } }
580
+ })
581
+ ctx.daq.onFrame(f => ctx.logger.debug('frame', f.nodeId, f.kind))
582
+ const rows = await ctx.daq.query({ nodeIds: ['n1'], from: Date.now() - 3600_000, to: Date.now(), bucketMs: 60_000 })
583
+ const all = await ctx.daq.nodes()
584
+ ```
585
+
586
+ A template's `sink.processors` declares the sink pipeline; `metrics` declares derived-metric
587
+ thresholds whose breaches ride the platform's existing alarm chain. Vector / frame metadata lands
588
+ in Timescale `daq_frames`; image pixels land in object storage (the `daq:frame` payload
589
+ **carries no pixel blob**).
590
+
591
+ **`ctx.omp.registerTool({ name, label?, description, parameters, roles?, handler })`** —
592
+ register a custom host tool, hot-injected into every running agent session at runtime:
593
+
594
+ ```js
595
+ ctx.omp.registerTool({
596
+ name: 'sensor_log',
597
+ label: 'Sensor calibration',
598
+ description: 'Query or record sensor calibration conclusions',
599
+ parameters: { type: 'object', properties: { sensor: { type: 'string' } }, required: ['sensor'] },
600
+ roles: ['lead', 'worker'], // the only valid literals are 'lead' and 'worker'; default is both
601
+ handler: async (args, agent) => ({ text: `recorded ${args.sensor}` }), // agent = { agentId, channelId, role, name }
602
+ })
603
+ ```
604
+
605
+ Registry changes are hot-injected into running sessions immediately (re-sending `set_host_tools`,
606
+ no respawn); a tool sharing a name with a built-in host tool is ignored.
607
+
608
+ **`ctx.services`** — the backend runtime object surface (lazy getters, cached after first access):
609
+
610
+ | Call | Resolves to |
611
+ |---|---|
612
+ | `ctx.services.names()` | every service name (including plugin-provided `<plugin>.<name>`) |
613
+ | `await ctx.services.get('daq')` | `{ query(q), nodes() }` |
614
+ | `await ctx.services.get('lines')` | `{ list(), byId(id) }` |
615
+ | `await ctx.services.get('channels')` | `{ list(), agents(channelId) }` |
616
+ | `await ctx.services.get('plugins')` | the plugin manifest **array** (note: not an object and with no `pluginManifest()`) |
617
+ | `ctx.services.provide(name, getter)` | provide a service, auto-prefixed with `<plugin>.` |
618
+
619
+ ```js
620
+ const daq = await ctx.services.get('daq')
621
+ const lines = await ctx.services.get('lines')
622
+ const channels = await ctx.services.get('channels')
623
+ const plugins = await ctx.services.get('plugins') // an array
624
+ ctx.services.provide('my-data', async () => ({ ready: true })) // → 'my-plugin.my-data'
625
+ ctx.logger.info(ctx.services.names().join(', '))
626
+ ```
627
+
628
+ An unknown name throws (the caller is expected to handle it). `provide` forces the
629
+ `<plugin>.` prefix so cross-plugin name clashes cannot happen.
630
+
631
+ ### 4.9 Plugin setting declarations (`settings` / `configGroups`)
632
+
633
+ Two equivalent routes: the top-level `settings` array in the entry (declarative), or
634
+ `ctx.config.defineField` inside `setup` (conditional).
635
+
636
+ ```js
637
+ export default {
638
+ name: 'my-plugin',
639
+ configGroups: [{ id: 'conn', label: 'Connection', collapsed: true }],
640
+ settings: [
641
+ { key: 'base_url', type: 'string', default: 'https://example.com', group: 'conn',
642
+ labelKey: 'plugin.my-plugin.base_url', label: 'Service URL' },
643
+ ],
644
+ async setup(ctx) {
645
+ // equivalent form: add declarations conditionally at runtime
646
+ ctx.config.defineGroup({ id: 'sync', label: 'Sync' })
647
+ ctx.config.defineField({ key: 'interval', type: 'number', default: 30, min: 1, max: 3600, group: 'sync' })
648
+ },
649
+ }
650
+ ```
651
+
652
+ Validation rules (an entry that fails **is skipped with a warning**; it never blocks loading):
653
+
654
+ | Rule | Detail |
655
+ |---|---|
656
+ | `key` | must match `[A-Za-z0-9_-]+`; addressed as `plugins.<plugin name>.<key>` |
657
+ | `type` | one of `'string'` / `'number'` / `'boolean'` / `'select'` |
658
+ | `default` | **required** — a declaration without `default` is skipped outright |
659
+ | `select` | must supply an `options` array, and `default` must appear among its stringified values |
660
+ | `min` / `max` | **apply to `number` only** |
661
+ | Group | an explicit `group` is folded into the `plugin-<name>[-<suffix>]` namespace; a field without `group` lands in the `plugin-<name>` group labelled with the plugin name |
662
+
663
+ Once declared, the settings are merged into the platform settings service: the "Plugins" section
664
+ of the settings page renders them automatically, PATCH validation uses the same source, and
665
+ saving takes effect immediately. Read values with the full key:
666
+ `ctx.config.get('plugins.my-plugin.base_url')`.
667
+
668
+ ### 4.10 `ctx.twin` — hybrid-twin Provider Registry bridge
669
+
670
+ `ctx.twin` registers an industrial scene's **physics core / scene pack / objectives / training and solver
671
+ adapters** into the hybrid-twin Provider Registry. The agent's twin tools (`twin_scene_read` /
672
+ `twin_snapshot_create` / `twin_trial_run` / `mpc_optimize`) resolve your provider through
673
+ `SceneContract.physicsProfileId`, falling back to the bundled `twin-injection-default`.
674
+ **Swapping scenes needs no tool or channel change.**
675
+
676
+ | Member | Notes |
677
+ |---|---|
678
+ | `registerPhysicsProvider(provider)` | register a physics core: manifest (`providerId` / `version` / `apiVersion: 'twin-provider.v1'` / `sceneKinds` / `backend` / the four variable tables / `parameterPriors` / `capabilities` / `artifactContract`) plus `initialize` / `step` / `simulate` / `evaluateConstraints`, optional `validateScene` / `calibrate` / `designSafeExperiment` / `estimateUncertainty` / `exportArtifacts` / `health` |
679
+ | `registerScenePack(pack)` | `{ sceneKind, sceneSchemaVersion, compile?, discover?, constraints?, objectives?, datasetSchema? }` — compiles field nodes and recipe into a `SceneContract` |
680
+ | `registerObjectiveProfile(profile)` | MPC objectives and weights |
681
+ | `registerTrainingAdapter(adapter)` / `registerSolverAdapter(adapter)` | training / external-solver adapters (ONNX, ROM, third-party solvers) |
682
+ | `listProviders(filter?)` / `getProviderHealth(id, version?)` | listing and health checks; health feeds the "may be used" decision |
683
+ | `resolveProvider(id, version?)` / `validateProvider(id, version?)` | resolve the active generation / validate without registering (pre-flight self-check) |
684
+ | `retireProvider(id, version?)` | explicit retirement; only unloads after references reach zero |
685
+ | `isRegistryAvailable()` | whether the bridge is ready (while it is not, registration calls are queued, so startup order cannot lose registrations) |
686
+
687
+ **Lifecycle and generations**: `DISCOVERED → VALIDATED → REGISTERED → READY → DRAINING → RETIRED`
688
+ (`FAILED` when validation rejects). A hot reload stages the new **generation** and drains the old one:
689
+ in-flight trials / MPC hold a lease and are never invalidated during a drain, and `unregisterPlugin`
690
+ means "drain + retire", so a disabled plugin loses its provider.
691
+
692
+ ```js
693
+ export default {
694
+ name: 'my-twin-provider',
695
+ version: '1.0.0',
696
+ auth: 'none',
697
+ async setup(ctx) {
698
+ if (!ctx.twin.isRegistryAvailable()) return // registrations queue while the bridge is down
699
+ ctx.twin.registerPhysicsProvider(myProvider) // see docs/plugins.md, "Hybrid-twin provider plugins"
700
+ ctx.twin.registerScenePack(myScenePack)
701
+ const ok = await ctx.twin.validateProvider('my-provider', '1.0.0')
702
+ ctx.logger.info(`provider check: ${JSON.stringify(ok)}`)
703
+ },
704
+ }
705
+ ```
706
+
707
+ Full field tables, generational hot-swap semantics and a runnable example live in
708
+ `docs/plugins.md`, section "Hybrid-twin provider plugins".
709
+
710
+ ---
711
+
712
+ ## 5. Lifecycle events
713
+
714
+ The authoritative lists are the SDK-exported `LIFECYCLE_EVENTS` (11 items) and
715
+ `CLIENT_EVENTS` (5 items), both checked one by one against what the host actually emits.
716
+ **Every event is also part of the config-root event stream.**
717
+
718
+ ### 5.1 Server-side events (`LIFECYCLE_EVENTS`, 11 items)
719
+
720
+ | Event name (bus type) | When it fires | Payload | Typical use |
721
+ |---|---|---|---|
722
+ | `plugin:host:init` | once, after the host has loaded every plugin (including disabled ones) | `{ plugins: string[], failures: number }` | readiness proof, deferred init |
723
+ | `plugins:reloaded` | end of a hot reload (plugin enabled/disabled, `plugins-state.json` changed) | `{ plugins: <manifest entry array> }` | rebuild caches, re-register external resources |
724
+ | `config:changed` | `runtime-settings.json` changed (`aw config set` / settings page, bridged from SystemConfigService) | `{ type: 'config:changed', changed: string[], effective: object, sources: object }` | hot-update thresholds, refresh caches |
725
+ | `event:permissions:changed` | after line grants were written successfully | `{ userId }` | refresh cached grant views |
726
+ | `event:*` | **a subscription entry, not an emitted event** | — | use the bare `'*'` to receive everything (§4.1) |
727
+ | `daq:sample` | DAQ **downlink-level** sampling (same point as WS `daq.reading`, on the node's `publishIntervalMs` cadence) | `{ nodeId, templateRef, value, state, at, lineId }` | limit alarms, statistics, interlocking |
728
+ | `daq:frame` | multi-modal frames (vector / image) at downlink level, on the same frame-ingest path as `daq:sample` | `{ nodeId, templateRef, kind, at, lineId, preview?, metrics, thumbUrl?, state }` | custom sinks, derived metrics |
729
+ | `dcw:write` | observation after a write-control ACK (never affects the write decision) | `{ nodeId, name, eng, prevValue, ok, source, lineId, at }` | write audit, trend recording |
730
+ | `line:start` | a line starts running (batch window opens) | `{ lineId, runId, recipeId, productName? }` | batch-start interlocking |
731
+ | `line:stop` | a line stops (batch window closes) | `{ lineId, runId }` | batch wrap-up, report generation |
732
+ | `server:close` | server shutdown, after the per-plugin dispose queues have run | `{ at }` | final flush, outbound notification |
733
+
734
+ `dcw:write`'s `source` is `'manual'` / `'recipe'` / `'agent'` / `'rollback'`; the payload
735
+ **has no `message` field** (look at platform logs or the ledger for a failure reason).
736
+
737
+ The `config:changed` payload **has no `at` field** — take the time yourself with `Date.now()`
738
+ when you receive it, and read the new values from `ctx.config.get/all()`.
739
+
740
+ ### 5.2 Browser-side events (`CLIENT_EVENTS`, 5 items)
741
+
742
+ | Event | When it fires | Payload |
743
+ |---|---|---|
744
+ | `client:init` | after the client script's `setup(ctx)` has finished | `{ name }` |
745
+ | `event:*` | live scene events (same source as the browser WS, via the event bridge) | the event's own payload |
746
+ | `page:change` | route change finished (`page:finish`) | `{ path }` |
747
+ | `i18n:changed` | UI language switched | `{ locale }` |
748
+ | `client:destroy` | just before `ctx.dispose()` collects things | `{ name }` |
749
+
750
+ ### 5.3 Subscription cheat sheet
751
+
752
+ | What you want | Server plugin | Browser plugin |
753
+ |---|---|---|
754
+ | A named lifecycle hook (`daq:sample` / `dcw:write` / `line:start` …) | `ctx.hooks.on('daq:sample', fn)` | not delivered (server hooks never reach the browser) |
755
+ | A scene event (e.g. `daq.reading`, `device.created`) | `ctx.events.on('daq.reading', fn)` | `ctx.on('daq.reading', fn)` |
756
+ | Every scene event | `ctx.hooks.on('*', ({ type, payload }) => …)` | `ctx.on('event:*', fn)` |
757
+ | A client-local hook (`client:init` / `page:change` / `i18n:changed` / `client:destroy`) | n/a | `ctx.hooks.on('page:change', fn)` |
758
+
759
+ The two easiest mistakes:
760
+
761
+ - The server wildcard is the bare `'*'` only: `ctx.hooks.on('event:*', fn)` **never fires**;
762
+ - The client wildcard is the literal `'event:*'` only: `ctx.on('*', fn)` **never fires**, and
763
+ `ctx.on('event:line.start', fn)` gets the prefix added twice (`event:event:line.start`) and
764
+ likewise never fires.
765
+
766
+ Scene events enter the bus as `event:<type>`, and `ctx.events.on('<type>', fn)` is the sugar that
767
+ adds the prefix. So the correct subscription for the scene event `permissions.changed` is
768
+ `ctx.events.on('permissions.changed', fn)`, while `ctx.hooks.on('permissions:changed', fn)`
769
+ never fires.
770
+
771
+ ### 5.4 Shutdown and hot-reload sequences
772
+
773
+ ```text
774
+ server shutdown (nitro close → shutdownPluginHost)
775
+ └─ per-plugin ctx.onDispose queue (each entry try/catch)
776
+ └─ broadcast server:close { at }
777
+
778
+ plugin hot reload (plugins-state.json changed / plugin enabled-disabled / 10 s poll fallback)
779
+ └─ per-plugin ctx.onDispose queue
780
+ └─ unbind every listener registered through ctx.hooks
781
+ └─ reload → broadcast plugins:reloaded
782
+ └─ broadcast the scene event plugins.reloaded (the browser loader hot-injects / unloads client plugins from it)
783
+ ```
784
+
785
+ > v1 hooks are **observation-only** — they never change interlocking or write-control decisions;
786
+ > veto (interception / rewriting) hooks are on the roadmap.
787
+
788
+ ---
789
+
790
+ ## 6. Browser-side SDK (`agentworkshop/sdk/client`)
791
+
792
+ A plugin's `client.mjs` is a **self-contained ESM** module (no bare imports — the browser resolves
793
+ it natively) exporting `setup(ctx)`. The entry must be declared in the plugin definition as
794
+ `client: './client.mjs'`; the loader fetches the script from
795
+ `GET /api/plugins/client/<plugin name>` and imports it dynamically.
796
+
797
+ ### 6.1 Creation (host-invoked; plugins only write `setup`)
798
+
799
+ ```js
800
+ import { createClientContext } from 'agentworkshop/sdk/client'
801
+
802
+ // host-side assembly (illustrative); a plugin author only writes setup(ctx) in client.mjs
803
+ const listeners = new Set()
804
+ const townBus = {
805
+ subscribe(fn) { listeners.add(fn); return () => listeners.delete(fn) },
806
+ }
807
+
808
+ const ctx = createClientContext({
809
+ name: 'my-plugin',
810
+ // event bridge: the host feeds every WS bus message into dispatch
811
+ eventBridge: dispatch => townBus.subscribe(e => dispatch(e.type, e.payload)),
812
+ baseUrl: '', // same-origin; fill in the platform address for cross-origin integration
813
+ ui: { slots: ['plugins.page'], registerPanel: () => () => {} },
814
+ t: key => `plugin.my-plugin.${key}`, // the host passes a real translation helper
815
+ getLocale: () => 'zh-CN',
816
+ })
817
+ ```
818
+
819
+ ### 6.2 `ctx` members
820
+
821
+ | Member | Notes |
822
+ |---|---|
823
+ | `ctx.name` | plugin name |
824
+ | `ctx.sdkVersion` | `CLIENT_SDK_VERSION` |
825
+ | `ctx.hooks` | the client-local `HookBus`; both local hooks and scene events ride this bus |
826
+ | `ctx.on(type, fn)` | subscribe to **live scene events**; `type` is the **scene event name itself** (e.g. `'daq.reading'` / `'daq.alarm'` / `'daq.alarm.changed'` / `'dcw.written'` / `'daq.node.changed'` / `'device.updated'`), installed as `event:<type>` internally; returns an unsubscribe function and is **auto-collected on pagehide**. The only wildcard spelling is the literal **`'event:*'`** |
827
+ | `ctx.fetch(path, opt?)` | same-origin platform API: automatic JSON, automatic `{data}` unwrapping, throws on non-2xx, and **automatically carries the platform token from the cookie** |
828
+ | `ctx.el(tag, attrs, children)` | DOM builder: `style` / `class` / `on*` event attributes get special handling |
829
+ | `ctx.mount(target, node)` | mount into any selector / element; falls back to `ctx.root()` when the target is missing |
830
+ | `ctx.root()` | the plugin's private mount point `#aw-plugin-<name>` (bottom-right, lazily created) |
831
+ | `ctx.ui` | UI injection surface: `slots` and `registerPanel(entry)` (§6.4) |
832
+ | `ctx.t(key, params?)` | plugin namespace translation: `ctx.t('panel.title')` → `plugin.<name>.panel.title` (messages come from `i18n.json` in the plugin root; a miss falls back to the original key). **`params` is currently ignored — there is no interpolation** |
833
+ | `ctx.locale` | the current UI language (read-only getter) |
834
+ | `ctx.log` | prefixed console: `info` / `warn` / `error` (**no `debug`**) |
835
+ | `ctx.dispose()` | unload: broadcast `client:destroy` → run local disposables → remove `root()`. **Idempotent**; it does not unregister panels (the loader does that on disable / hot reload) |
836
+
837
+ Two wrong spellings of `ctx.on`: `ctx.on('*')` and `ctx.on('event:line.start')` both
838
+ **never fire** — the former is not installed on the bare `'*'`, the latter gets a second prefix
839
+ and becomes `event:event:line.start`.
840
+
841
+ **Server hooks never reach the browser**: colon-named server hooks such as `daq:sample`,
842
+ `dcw:write`, `line:start` / `line:stop` are not delivered to the client. Their browser-side
843
+ counterparts are scene events (`daq.reading` / `daq.frame` / `dcw.written` and so on); subscribe
844
+ to those with `ctx.on('<scene-type>')`.
845
+
846
+ **Client lifecycle hooks cannot go through `ctx.on` either**: `client:init` / `page:change` /
847
+ `i18n:changed` / `client:destroy` must be subscribed directly with `ctx.hooks.on(...)` (they carry
848
+ no `event:` prefix).
849
+
850
+ ### 6.3 Full example
851
+
852
+ ```js
853
+ export function setup(ctx) {
854
+ const badge = ctx.el('div', {
855
+ style: 'padding:8px 12px;border:1px solid #35e0a0;border-radius:10px;color:#35e0a0',
856
+ }, ['samples: 0'])
857
+ ctx.root().append(badge)
858
+
859
+ let n = 0
860
+ ctx.on('daq.reading', () => { badge.textContent = `samples: ${++n}` }) // scene event
861
+ ctx.on('event:*', (payload) => ctx.log.info('scene event', payload)) // the only wildcard spelling
862
+
863
+ ctx.hooks.on('page:change', ({ path }) => ctx.log.info('page →', path)) // local hook: subscribe directly
864
+
865
+ // Consume the platform API (same-origin, cookie auth): the line list is { lines, states }, not an array
866
+ ctx.fetch('/api/workshop/dcw/lines').then(({ lines }) => ctx.log.info('lines', lines.length))
867
+ }
868
+ ```
869
+
870
+ ### 6.4 UI injection `ctx.ui.registerPanel`
871
+
872
+ ```js
873
+ let samples = 0
874
+ ctx.on('daq.reading', () => { samples += 1 })
875
+
876
+ const off = ctx.ui.registerPanel({
877
+ slot: 'dashboard.widgets', // 'plugins.page' | 'settings.plugins' | 'dashboard.widgets'
878
+ name: 'my-widget',
879
+ title: 'Sample counter',
880
+ titleKey: 'plugin.my-plugin.widget.title', // titleKey wins when present
881
+ order: 100, // smaller comes first; default 100
882
+ mount(el) {
883
+ el.textContent = `samples: ${samples}`
884
+ const tick = setInterval(() => { el.textContent = `samples: ${samples}` }, 1000)
885
+ return () => clearInterval(tick) // called when the panel is unmounted
886
+ },
887
+ })
888
+ off() // the returned unregister function; ctx.dispose() does not call it, the loader collects it on disable
889
+ ```
890
+
891
+ - `ctx.ui.slots` is exactly `['plugins.page', 'settings.plugins', 'dashboard.widgets']`.
892
+ - `registerPanel` returns an unregister function; if `mount(el)` returns a function it is called
893
+ when that panel is unmounted.
894
+
895
+ ### 6.5 Constraints and trust
896
+
897
+ - **Self-contained**: no bare imports of `vue` or other third-party packages (the browser's native
898
+ import cannot resolve them) — build UI with native DOM (`ctx.el`);
899
+ - **Trust model**: client scripts are served by platform endpoints, trusted at the same level as
900
+ aw commands — only install plugins you trust;
901
+ - **Isolation**: a single plugin failing to load only logs a console warning; the app and other
902
+ plugins are unaffected.
903
+
904
+ ---
905
+
906
+ ## 7. Types and TypeScript
907
+
908
+ ```ts
909
+ import type { PluginDef, PluginContext, PlatformClient } from 'agentworkshop/sdk'
910
+
911
+ export default {
912
+ name: 'typed-plugin',
913
+ auth: 'user',
914
+ async setup(ctx: PluginContext) {
915
+ const timeout: number = ctx.config.get('plugins.typed-plugin.timeout')
916
+ const client: PlatformClient = ctx.api
917
+ ctx.logger.info('api available:', typeof client.get === 'function', 'timeout:', timeout)
918
+ },
919
+ } satisfies PluginDef
920
+ ```
921
+
922
+ The runtime **does not import** the SDK (keeping the zero-dependency shape); types are erased at
923
+ build time.
924
+
925
+ Current coverage of the type declarations (always defer to `sdk/index.d.mts` and
926
+ `sdk/client.d.mts`):
927
+
928
+ - Declared: `PluginDef`, `PluginContext`, `PluginHostExtensions`, `PluginSettingDecl`,
929
+ `PluginGroupDecl`, `PluginLogger`, `PluginKv`, `PluginHttp`, `CrudResource`, `PlatformClient`,
930
+ `ConfigChangedPayload`, `HookBus`, `ClientContext`, `ClientUi`, `ClientPanelEntry`,
931
+ `LIFECYCLE_EVENTS`, `CLIENT_EVENTS` and the factory functions.
932
+ - **Not yet declared**: `isPathInside`, `validatePluginSettings`, `validatePluginGroups` and
933
+ `resolvePluginGroupId` are runtime-only exports with no declaration in `.d.mts` — a TypeScript
934
+ project importing them gets TS2614 and needs a local declaration or `await import()`.
935
+ - In addition, `sdk/client.d.mts` declares an `el` named export that does not exist at runtime
936
+ (the runtime has only `CLIENT_SDK_VERSION` and `createClientContext`); importing it compiles
937
+ but yields `undefined` at runtime.
938
+
939
+ ---
940
+
941
+ ## 8. Versioning and compatibility policy
942
+
943
+ - The SDK interface follows semver: patch = fixes; minor = new hooks / `ctx` members
944
+ (backwards compatible); major = breaking contract changes. `SDK_VERSION` /
945
+ `CLIENT_SDK_VERSION` are the versions on that line and are **independent of the npm package
946
+ version** — never infer one from the other.
947
+ - The host exposes `ctx.sdkVersion` so a plugin can degrade gracefully by feature.
948
+ - Config-root hardening does not live in the single `aw start` command but in the **CLI context
949
+ builder** — every `aw` command calls it while resolving the run root (idempotently), so no
950
+ command fails just because a config-root directory is missing.
951
+ - There is **no version-based directory-layout migration**: the only migration copies data files
952
+ from the legacy locations into the config root, that is `cwd/data` (and the historical
953
+ `cwd/server/data`) → `<configRoot>/data`, only for `.sqlite` / `.sqlite-wal` / `.sqlite-shm` /
954
+ `.json`, with "newest wins" by `mtimeMs` on a name clash; when the config root falls back to
955
+ `~/.AgentWorkShop` that migration is skipped to avoid cross-project pollution.
956
+
957
+ ---
958
+
959
+ ## Appendix: scope of this page
960
+
961
+ This page is the single source of truth for the SDK; it follows the actual implementation in
962
+ `sdk/*.mjs`, `sdk/*.d.mts`, `server/services/workshop/plugins/host.mjs` and `server/api/**`.
963
+ CI copies this file to the site at `docs/site/en/sdk/guide.md`, and the Chinese original
964
+ `docs/sdk.md` to `docs/site/sdk/guide.md`.