agentworkshop 0.8.4 → 0.8.6

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 (2335) hide show
  1. package/.AgentWorkShop/prompts/host-tools.en.json +174 -0
  2. package/.AgentWorkShop/prompts/host-tools.json +20 -6
  3. package/.output/.AgentWorkShop/aml-python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  4. package/.output/.AgentWorkShop/aml-python/__pycache__/amlkit.cpython-312.pyc +0 -0
  5. package/.output/.AgentWorkShop/aml-python/__pycache__/train-example.cpython-312.pyc +0 -0
  6. package/.output/.AgentWorkShop/aml-python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  7. package/.output/.AgentWorkShop/aml-python/train-example.py +92 -92
  8. package/.output/.AgentWorkShop/prompts/host-tools.en.json +174 -0
  9. package/.output/.AgentWorkShop/prompts/host-tools.json +20 -6
  10. package/.output/.AgentWorkShop/schema.json +2 -0
  11. package/.output/nitro.json +1 -1
  12. package/.output/public/_nuxt/-gwj-zlk2.js +1 -0
  13. package/.output/public/_nuxt/26OL4Ao82.js +1 -0
  14. package/.output/public/_nuxt/6P4ZAzxa2.js +1 -0
  15. package/.output/public/_nuxt/7op-BMk82.js +1 -0
  16. package/.output/public/_nuxt/AQuNRC4D.js +36 -0
  17. package/.output/public/_nuxt/Aoz9xMB92.js +1 -0
  18. package/.output/public/_nuxt/B1SIgyrl.js +1 -0
  19. package/.output/public/_nuxt/BA2lmfW4.js +1 -0
  20. package/.output/public/_nuxt/BDXQqSkl2.js +1 -0
  21. package/.output/public/_nuxt/BI9jj13f2.js +2 -0
  22. package/.output/public/_nuxt/BPUQZ9Lq2.js +8 -0
  23. package/.output/public/_nuxt/BSxcHoiy.js +1 -0
  24. package/.output/public/_nuxt/BVg2R2VB2.js +1 -0
  25. package/.output/public/_nuxt/BY2u4LPg.js +1 -0
  26. package/.output/public/_nuxt/BaYDgyaR.js +3 -0
  27. package/.output/public/_nuxt/BfvuWqSa.js +1 -0
  28. package/.output/public/_nuxt/BiXqyYNw2.js +1 -0
  29. package/.output/public/_nuxt/BkEokGX5.js +1 -0
  30. package/.output/public/_nuxt/BlOm8JIs2.js +1 -0
  31. package/.output/public/_nuxt/BoXKUOiN2.js +1 -0
  32. package/.output/public/_nuxt/Br_q4qi72.js +1 -0
  33. package/.output/public/_nuxt/BtZKe9ZV2.js +1 -0
  34. package/.output/public/_nuxt/BuLoPmcf.js +1 -0
  35. package/.output/public/_nuxt/BwOK42JQ.js +1 -0
  36. package/.output/public/_nuxt/BwOko01T.js +47 -0
  37. package/.output/public/_nuxt/C0Db9tR_2.js +1 -0
  38. package/.output/public/_nuxt/C1RMfPoB2.js +1 -0
  39. package/.output/public/_nuxt/CBkXv24C2.js +1 -0
  40. package/.output/public/_nuxt/CNRjkgAZ2.js +1 -0
  41. package/.output/public/_nuxt/COfo_Bg3.js +1 -0
  42. package/.output/public/_nuxt/CTGJHZ8X2.js +1 -0
  43. package/.output/public/_nuxt/CY2NkFvI.js +1 -0
  44. package/.output/public/_nuxt/C_4mzQ5X.js +1 -0
  45. package/.output/public/_nuxt/CdvMP3lv.js +1 -0
  46. package/.output/public/_nuxt/CjdxNYpU2.js +1 -0
  47. package/.output/public/_nuxt/CmuGMxDP.js +1 -0
  48. package/.output/public/_nuxt/Co8Dcx132.js +1 -0
  49. package/.output/public/_nuxt/CooauJ7D.js +1 -0
  50. package/.output/public/_nuxt/D1eVi1zr.js +21 -0
  51. package/.output/public/_nuxt/D6PUmBb0.js +1 -0
  52. package/.output/public/_nuxt/D8AvmPUH.js +1 -0
  53. package/.output/public/_nuxt/DC8sMA36.js +1 -0
  54. package/.output/public/_nuxt/DDHh85c42.js +2 -0
  55. package/.output/public/_nuxt/DDXOfmo2.js +20 -0
  56. package/.output/public/_nuxt/DH_oqyfL.js +1 -0
  57. package/.output/public/_nuxt/DMFwLxfu.js +1 -0
  58. package/.output/public/_nuxt/DYQBIsiV2.js +1 -0
  59. package/.output/public/_nuxt/DZqVVvR0.js +1 -0
  60. package/.output/public/_nuxt/DmReUFK1.js +1 -0
  61. package/.output/public/_nuxt/DoprKJ5a2.js +1 -0
  62. package/.output/public/_nuxt/Dr1FVeQG2.js +1 -0
  63. package/.output/public/_nuxt/DtnsTW7e.js +1 -0
  64. package/.output/public/_nuxt/DuUc4bbY2.js +1 -0
  65. package/.output/public/_nuxt/DxDqd6T42.js +16 -0
  66. package/.output/public/_nuxt/DzU3zEKX.js +1 -0
  67. package/.output/public/_nuxt/EgO70wrE.js +1 -0
  68. package/.output/public/_nuxt/HJKu4eEV2.js +1 -0
  69. package/.output/public/_nuxt/K5Xen0wZ2.js +1 -0
  70. package/.output/public/_nuxt/OmpTerminalPanel.ComMDrA8.css +1 -0
  71. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +1 -0
  72. package/.output/public/_nuxt/Rb4o4o-82.js +1 -0
  73. package/.output/public/_nuxt/Tf6SJSDj.js +1 -0
  74. package/.output/public/_nuxt/TownView.CC3t-Dte.css +1 -0
  75. package/.output/public/_nuxt/Ud9o8ItR2.js +1 -0
  76. package/.output/public/_nuxt/ZzOyoXex2.js +1 -0
  77. package/.output/public/_nuxt/_id_.BQRWK7J2.css +1 -0
  78. package/.output/public/_nuxt/_wsId_.CQMH8t8j.css +1 -0
  79. package/.output/public/_nuxt/agents.D-JPovTZ.css +1 -0
  80. package/.output/public/_nuxt/aml.PalMp-5n.css +1 -0
  81. package/.output/public/_nuxt/azOGy_tU2.js +1 -0
  82. package/.output/public/_nuxt/be-4wyTo.js +1 -0
  83. package/.output/public/_nuxt/board.BxLE52BL.css +1 -0
  84. package/.output/public/_nuxt/builds/latest.json +1 -1
  85. package/.output/public/_nuxt/builds/meta/593b65bd-cf1d-4b7f-a993-57e939c38f36.json +1 -0
  86. package/.output/public/_nuxt/byZYInPk2.js +1 -0
  87. package/.output/public/_nuxt/dHwWyr6b.js +1 -0
  88. package/.output/public/_nuxt/dcjPjLPI.js +1 -0
  89. package/.output/public/_nuxt/default.BEXGWZFQ.css +1 -0
  90. package/.output/public/_nuxt/fIV9zbnA.js +1 -0
  91. package/.output/public/_nuxt/h-Fn7pRD.js +1 -0
  92. package/.output/public/_nuxt/hyLdZsOd2.js +1 -0
  93. package/.output/public/_nuxt/logs.BkJPbR_K.css +1 -0
  94. package/.output/public/_nuxt/m6G-kfdj.js +1 -0
  95. package/.output/public/_nuxt/monitor.D3yEqqrv.css +1 -0
  96. package/.output/public/_nuxt/o8sYG6xx2.js +1 -0
  97. package/.output/public/_nuxt/ontology.CkuUThtY.css +1 -0
  98. package/.output/public/_nuxt/operations.-l6u44Ar.css +1 -0
  99. package/.output/public/_nuxt/pages.Cdpm_B-G.css +1 -0
  100. package/.output/public/_nuxt/permissions.DxuOOIqQ.css +1 -0
  101. package/.output/public/_nuxt/pipeline.D7et0DoJ.css +1 -0
  102. package/.output/public/_nuxt/rDvMijKA.js +9 -0
  103. package/.output/public/_nuxt/schedules.BXNJ9q_I.css +1 -0
  104. package/.output/public/_nuxt/studio.ClA5gX4K.css +1 -0
  105. package/.output/public/_nuxt/tDEwr422.js +1 -0
  106. package/.output/public/_nuxt/teams.CLQaXno5.css +1 -0
  107. package/.output/public/_nuxt/tokens.BDSUWF-L.css +1 -0
  108. package/.output/public/_nuxt/tools.BwXFAb-X.css +1 -0
  109. package/.output/public/_nuxt/workshop.BBiFhXuM.css +1 -0
  110. package/.output/public/_nuxt/yS3bF3G32.js +2 -0
  111. package/.output/public/favicon.svg +14 -14
  112. package/.output/public/robots.txt +3 -3
  113. package/.output/server/chunks/_/LeftOutlined.mjs.map +1 -1
  114. package/.output/server/chunks/_/RightOutlined.mjs.map +1 -1
  115. package/.output/server/chunks/_/SearchOutlined.mjs +1261 -1230
  116. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -1
  117. package/.output/server/chunks/_/access.mjs +15 -27
  118. package/.output/server/chunks/_/access.mjs.map +1 -1
  119. package/.output/server/chunks/_/agent-dto.mjs +26 -0
  120. package/.output/server/chunks/_/agent-dto.mjs.map +1 -0
  121. package/.output/server/chunks/_/catalog-view.mjs +1 -1
  122. package/.output/server/chunks/_/chart-repo.mjs +14 -1
  123. package/.output/server/chunks/_/chart-repo.mjs.map +1 -1
  124. package/.output/server/chunks/_/data-export.mjs +8 -9
  125. package/.output/server/chunks/_/data-export.mjs.map +1 -1
  126. package/.output/server/chunks/_/data-query.mjs +4 -4
  127. package/.output/server/chunks/_/data-query.mjs.map +1 -1
  128. package/.output/server/chunks/_/eda-run.repo.mjs +3 -3
  129. package/.output/server/chunks/_/error-500.mjs.map +1 -1
  130. package/.output/server/chunks/_/features.mjs +6 -6
  131. package/.output/server/chunks/_/golden.mjs +3 -3
  132. package/.output/server/chunks/_/harness-spawn-policy.mjs +77 -0
  133. package/.output/server/chunks/_/harness-spawn-policy.mjs.map +1 -0
  134. package/.output/server/chunks/_/host-bindings.mjs +2 -2
  135. package/.output/server/chunks/_/index.mjs +2 -2
  136. package/.output/server/chunks/_/line-scope.mjs +32 -0
  137. package/.output/server/chunks/_/line-scope.mjs.map +1 -0
  138. package/.output/server/chunks/_/mes-console.mjs +1 -1
  139. package/.output/server/chunks/_/mes-secrets.repo.mjs +107 -0
  140. package/.output/server/chunks/_/mes-secrets.repo.mjs.map +1 -0
  141. package/.output/server/chunks/_/nitro.mjs +6403 -4166
  142. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  143. package/.output/server/chunks/_/ocap.mjs +1 -1
  144. package/.output/server/chunks/_/rest-auth.mjs +1 -1
  145. package/.output/server/chunks/_/spc.mjs +2 -2
  146. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +716 -0
  147. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +1 -0
  148. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +72 -0
  149. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +1 -0
  150. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +942 -0
  151. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +1 -0
  152. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +141 -0
  153. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +1 -0
  154. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +6489 -0
  155. package/.output/server/chunks/build/TownView-BWMDbosY.mjs.map +1 -0
  156. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +392 -0
  157. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +1 -0
  158. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +2045 -0
  159. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +1 -0
  160. package/.output/server/chunks/build/_wsId_-C871SDPN.mjs +14589 -0
  161. package/.output/server/chunks/build/_wsId_-C871SDPN.mjs.map +1 -0
  162. package/.output/server/chunks/build/agents-D7CdEUTv.mjs +1078 -0
  163. package/.output/server/chunks/build/agents-D7CdEUTv.mjs.map +1 -0
  164. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +263 -0
  165. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +1 -0
  166. package/.output/server/chunks/build/aml-DRAFRcGU.mjs +814 -0
  167. package/.output/server/chunks/build/aml-DRAFRcGU.mjs.map +1 -0
  168. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +533 -0
  169. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +1 -0
  170. package/.output/server/chunks/build/api-B4Om0mEc.mjs +53 -0
  171. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -0
  172. package/.output/server/chunks/build/api-BEW_ebY_.mjs +64 -0
  173. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +1 -0
  174. package/.output/server/chunks/build/api-BsAgXWxi.mjs +72 -0
  175. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
  176. package/.output/server/chunks/build/api-error-BwAQLw44.mjs +47 -0
  177. package/.output/server/chunks/build/api-error-BwAQLw44.mjs.map +1 -0
  178. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs +81 -0
  179. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +1 -0
  180. package/.output/server/chunks/build/board-CJUc032b.mjs +189 -0
  181. package/.output/server/chunks/build/board-CJUc032b.mjs.map +1 -0
  182. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +94 -81
  183. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -1
  184. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +953 -0
  185. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +1 -0
  186. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs +942 -0
  187. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs.map +1 -0
  188. package/.output/server/chunks/build/chart-pipeline-BpoWYMK_.mjs +233 -0
  189. package/.output/server/chunks/build/chart-pipeline-BpoWYMK_.mjs.map +1 -0
  190. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +112 -113
  191. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -1
  192. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +439 -0
  193. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +1 -0
  194. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +43 -0
  195. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +1 -0
  196. package/.output/server/chunks/build/constants-HPHJvjne.mjs +76 -66
  197. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  198. package/.output/server/chunks/build/core-CgTOPS4t.mjs +294 -0
  199. package/.output/server/chunks/build/core-CgTOPS4t.mjs.map +1 -0
  200. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +1266 -0
  201. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +1 -0
  202. package/.output/server/chunks/build/data-D8uX1dnm.mjs +481 -0
  203. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
  204. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +505 -0
  205. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +1 -0
  206. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs +15 -3
  207. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs.map +1 -1
  208. package/.output/server/chunks/build/default-CNWS6NUw.mjs +2353 -0
  209. package/.output/server/chunks/build/default-CNWS6NUw.mjs.map +1 -0
  210. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +406 -0
  211. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +1 -0
  212. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +834 -0
  213. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +1 -0
  214. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs +14 -0
  215. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs.map +1 -0
  216. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs +540 -0
  217. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs.map +1 -0
  218. package/.output/server/chunks/build/es-Bxu10NJ2.mjs +43 -0
  219. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -0
  220. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +2448 -0
  221. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +1 -0
  222. package/.output/server/chunks/build/form-D_UpWPN4.mjs +4712 -0
  223. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +1 -0
  224. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +553 -0
  225. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +1 -0
  226. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +132 -0
  227. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +1 -0
  228. package/.output/server/chunks/build/input-GtPuSEgt.mjs +2181 -0
  229. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +1 -0
  230. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1120 -0
  231. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +1 -0
  232. package/.output/server/chunks/build/interval-DvHBIIZh.mjs +9 -0
  233. package/.output/server/chunks/build/interval-DvHBIIZh.mjs.map +1 -0
  234. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs +7 -0
  235. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs.map +1 -0
  236. package/.output/server/chunks/build/logs-pRb-TMWa.mjs +427 -0
  237. package/.output/server/chunks/build/logs-pRb-TMWa.mjs.map +1 -0
  238. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +1952 -0
  239. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +1 -0
  240. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +2253 -0
  241. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs.map +1 -0
  242. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs +2 -0
  243. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs.map +1 -1
  244. package/.output/server/chunks/build/ontology-ohICfVVb.mjs +1406 -0
  245. package/.output/server/chunks/build/ontology-ohICfVVb.mjs.map +1 -0
  246. package/.output/server/chunks/build/operations-SMQrRAcr.mjs +311 -0
  247. package/.output/server/chunks/build/operations-SMQrRAcr.mjs.map +1 -0
  248. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +202 -0
  249. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +1 -0
  250. package/.output/server/chunks/build/pages-DsMKUw7i.mjs +542 -0
  251. package/.output/server/chunks/build/pages-DsMKUw7i.mjs.map +1 -0
  252. package/.output/server/chunks/build/pagination-DTAconUo.mjs +1346 -0
  253. package/.output/server/chunks/build/pagination-DTAconUo.mjs.map +1 -0
  254. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +637 -0
  255. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs.map +1 -0
  256. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs +212 -0
  257. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs.map +1 -0
  258. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +272 -0
  259. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -0
  260. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +340 -0
  261. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +1 -0
  262. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +78 -0
  263. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +1 -0
  264. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs +7172 -0
  265. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs.map +1 -0
  266. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +341 -0
  267. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +1 -0
  268. package/.output/server/chunks/build/select-B3Dsb9yq.mjs +3923 -0
  269. package/.output/server/chunks/build/select-B3Dsb9yq.mjs.map +1 -0
  270. package/.output/server/chunks/build/settings-DXLJPq7d.mjs +1014 -0
  271. package/.output/server/chunks/build/settings-DXLJPq7d.mjs.map +1 -0
  272. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +110 -0
  273. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +1 -0
  274. package/.output/server/chunks/build/spin-C2cuvGth.mjs +357 -0
  275. package/.output/server/chunks/build/spin-C2cuvGth.mjs.map +1 -0
  276. package/.output/server/chunks/build/studio-hSqH9TYS.mjs +336 -0
  277. package/.output/server/chunks/build/studio-hSqH9TYS.mjs.map +1 -0
  278. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +377 -0
  279. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +1 -0
  280. package/.output/server/chunks/build/table-CmVD-cA9.mjs +7546 -0
  281. package/.output/server/chunks/build/table-CmVD-cA9.mjs.map +1 -0
  282. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +1924 -0
  283. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +1 -0
  284. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +1156 -0
  285. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +1 -0
  286. package/.output/server/chunks/build/teams-BbwYJyzv.mjs +1203 -0
  287. package/.output/server/chunks/build/teams-BbwYJyzv.mjs.map +1 -0
  288. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +1062 -0
  289. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs.map +1 -0
  290. package/.output/server/chunks/build/tools-CnYi9cou.mjs +487 -0
  291. package/.output/server/chunks/build/tools-CnYi9cou.mjs.map +1 -0
  292. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +920 -0
  293. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +1 -0
  294. package/.output/server/chunks/build/town-B5aoiG98.mjs +133 -0
  295. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +1 -0
  296. package/.output/server/chunks/build/town-BV-hbwb5.mjs +30 -17
  297. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
  298. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  299. package/.output/server/chunks/build/types-D6J7slEa.mjs.map +1 -1
  300. package/.output/server/chunks/build/types-DWqIeMRP.mjs +30 -29
  301. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
  302. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs +124 -0
  303. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs.map +1 -0
  304. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs +77 -0
  305. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs.map +1 -0
  306. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +24 -17
  307. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  308. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs +117 -0
  309. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs.map +1 -0
  310. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs +133 -0
  311. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs.map +1 -0
  312. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +92 -0
  313. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -0
  314. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +86 -0
  315. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -0
  316. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +194 -0
  317. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -0
  318. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +89 -0
  319. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -0
  320. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +38 -33
  321. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  322. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +267 -0
  323. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -0
  324. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +93 -0
  325. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -0
  326. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +86 -0
  327. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -0
  328. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +130 -0
  329. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -0
  330. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +129 -0
  331. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -0
  332. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +142 -0
  333. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -0
  334. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +70 -0
  335. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -0
  336. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +79 -0
  337. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -0
  338. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +176 -0
  339. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -0
  340. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +99 -0
  341. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +1 -0
  342. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +159 -0
  343. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -0
  344. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +222 -0
  345. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +1 -0
  346. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +45 -44
  347. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  348. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +136 -0
  349. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +1 -0
  350. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +395 -0
  351. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +1 -0
  352. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +187 -0
  353. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -0
  354. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +311 -313
  355. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  356. package/.output/server/chunks/build/useDashboardData-NJ7rKxhx.mjs +153 -0
  357. package/.output/server/chunks/build/useDashboardData-NJ7rKxhx.mjs.map +1 -0
  358. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +219 -0
  359. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +1 -0
  360. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs +67 -0
  361. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +1 -0
  362. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +184 -0
  363. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +1 -0
  364. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +148 -0
  365. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +1 -0
  366. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +71 -0
  367. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +1 -0
  368. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs +79 -0
  369. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +1 -0
  370. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +137 -0
  371. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +1 -0
  372. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +104 -0
  373. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +1 -0
  374. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +121 -0
  375. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +1 -0
  376. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +93 -0
  377. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +1 -0
  378. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +98 -0
  379. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +1 -0
  380. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +88 -0
  381. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +1 -0
  382. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +258 -0
  383. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +1 -0
  384. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +452 -0
  385. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs.map +1 -0
  386. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +91 -0
  387. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +1 -0
  388. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +140 -0
  389. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +1 -0
  390. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs +128 -0
  391. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs.map +1 -0
  392. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +107 -0
  393. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -0
  394. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +55 -0
  395. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +1 -0
  396. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +34 -31
  397. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  398. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +88 -0
  399. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +1 -0
  400. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +150 -0
  401. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -0
  402. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +83 -0
  403. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +1 -0
  404. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +167 -156
  405. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -1
  406. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +135 -0
  407. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -0
  408. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +91 -0
  409. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -0
  410. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +28 -21
  411. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  412. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +195 -0
  413. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -0
  414. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +149 -0
  415. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +1 -0
  416. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +156 -0
  417. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -0
  418. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +39 -23
  419. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -1
  420. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs +79 -0
  421. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs.map +1 -0
  422. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs +84 -0
  423. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs.map +1 -0
  424. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs +97 -0
  425. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs.map +1 -0
  426. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs +80 -0
  427. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs.map +1 -0
  428. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +39 -32
  429. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  430. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs +103 -0
  431. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs.map +1 -0
  432. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs +123 -0
  433. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs.map +1 -0
  434. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +29 -22
  435. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  436. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +115 -0
  437. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -0
  438. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +87 -0
  439. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -0
  440. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +118 -0
  441. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -0
  442. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +92 -0
  443. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -0
  444. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs +17 -16
  445. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs.map +1 -1
  446. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +141 -0
  447. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -0
  448. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +138 -0
  449. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -0
  450. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs +127 -0
  451. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs.map +1 -0
  452. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +1659 -0
  453. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +1 -0
  454. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +60 -0
  455. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -0
  456. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +92 -0
  457. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -0
  458. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +34 -31
  459. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  460. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +168 -0
  461. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -0
  462. package/.output/server/chunks/build/users-DjiVC_tS.mjs +569 -0
  463. package/.output/server/chunks/build/users-DjiVC_tS.mjs.map +1 -0
  464. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +546 -0
  465. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -0
  466. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs +121 -111
  467. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  469. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  470. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  471. package/.output/server/chunks/routes/api/mcp/workshop.mjs +2 -2
  472. package/.output/server/chunks/routes/api/metrics.mjs +1 -1
  473. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  474. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
  475. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -1
  476. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
  477. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -1
  478. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -3
  479. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -1
  480. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -1
  481. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
  482. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
  483. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
  484. package/.output/server/chunks/routes/api/system/index.post.mjs +1 -1
  485. package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -1
  486. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  487. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  488. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
  489. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  490. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
  491. package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -1
  492. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  493. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  494. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
  495. package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -1
  496. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  497. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  498. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
  499. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  500. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  501. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
  502. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
  503. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  504. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  505. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  506. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
  507. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  508. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
  509. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  510. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  511. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  512. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  513. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
  514. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
  515. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  516. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +18 -10
  517. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
  519. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -1
  520. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +1 -1
  521. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
  522. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
  523. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +4 -1
  524. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  525. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  526. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
  527. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
  528. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
  529. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
  530. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -1
  531. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
  532. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
  533. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
  534. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
  535. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
  536. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -1
  537. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
  538. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
  539. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
  540. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
  541. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
  542. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
  543. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
  544. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
  545. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
  546. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
  547. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
  548. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
  549. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
  550. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
  551. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
  552. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +1 -1
  553. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
  554. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
  555. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
  556. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
  557. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +1 -1
  558. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +1 -1
  559. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +1 -1
  560. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  561. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
  562. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
  563. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  564. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  565. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
  566. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  567. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  568. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  569. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
  570. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
  571. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
  572. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +7 -1
  573. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  574. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  575. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  576. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
  577. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  578. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
  579. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  580. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
  581. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
  582. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
  583. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +1 -1
  584. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
  585. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
  586. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +6 -1
  587. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  588. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -1
  589. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
  590. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -1
  591. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -1
  592. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  593. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs +92 -0
  594. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs.map +1 -0
  595. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +6 -3
  596. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  597. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +8 -2
  598. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  599. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -2
  600. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
  601. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  602. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +2 -2
  603. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
  604. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  605. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  606. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  607. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -2
  608. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -1
  609. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +1 -1
  610. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +1 -1
  611. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -1
  612. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -1
  613. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +1 -1
  614. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -1
  615. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
  616. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
  617. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
  618. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +2 -2
  619. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -2
  620. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -2
  621. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
  622. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +4 -2
  623. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  624. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
  625. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
  626. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +9 -7
  627. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  628. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  629. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  630. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +3 -1
  631. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  632. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
  633. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +33 -50
  634. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -1
  635. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -2
  636. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  637. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  638. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +7 -2
  639. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  640. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
  641. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +5 -3
  642. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  643. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  644. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +1 -1
  645. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +1 -1
  646. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +1 -1
  647. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  648. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +2 -2
  649. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +15 -6
  650. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  651. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
  652. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +1 -1
  653. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
  654. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
  655. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +8 -5
  656. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  657. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -2
  658. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -2
  659. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +7 -3
  660. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  661. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +7 -3
  662. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -1
  663. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -2
  664. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -2
  665. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -2
  666. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +7 -2
  667. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  668. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
  669. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +8 -5
  670. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  671. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -2
  672. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -2
  673. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -2
  674. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +7 -3
  675. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  676. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
  677. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +8 -5
  678. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  679. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
  680. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -2
  681. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +2 -2
  682. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +7 -3
  683. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -1
  684. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
  685. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
  686. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -2
  687. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -2
  688. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -2
  689. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
  690. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
  691. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +7 -3
  692. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs.map +1 -1
  693. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +5 -5
  694. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
  695. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +2 -2
  696. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
  697. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
  698. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +7 -3
  699. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  700. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +5 -3
  701. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  702. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +6 -3
  703. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -1
  704. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -2
  705. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +2 -2
  706. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +2 -2
  707. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +8 -5
  708. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  709. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +9 -5
  710. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  711. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
  712. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  713. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +1 -1
  714. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
  715. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +8 -4
  716. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs.map +1 -1
  717. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +9 -2
  718. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  719. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +7 -4
  720. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  721. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +7 -3
  722. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  723. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -2
  724. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
  725. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
  726. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
  727. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +8 -5
  728. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  729. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -2
  730. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -2
  731. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
  732. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
  733. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +1 -1
  734. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +1 -1
  735. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +1 -1
  736. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +2 -2
  737. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +1 -1
  738. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +1 -1
  739. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +1 -1
  740. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +1 -1
  741. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +1 -1
  742. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +1 -1
  743. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +1 -1
  744. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +1 -1
  745. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +1 -1
  746. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +1 -1
  747. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +1 -1
  748. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +1 -1
  749. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +1 -1
  750. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +1 -1
  751. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +1 -1
  752. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +1 -1
  753. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +1 -1
  754. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +1 -1
  755. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +1 -1
  756. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +1 -1
  757. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +1 -1
  758. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +1 -1
  759. package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs +1 -1
  760. package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs +1 -1
  761. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +1 -1
  762. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +1 -1
  763. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +1 -1
  764. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +1 -1
  765. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +1 -1
  766. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +1 -1
  767. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +1 -1
  768. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs +1 -1
  769. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs +1 -1
  770. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs +1 -1
  771. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +2 -2
  772. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +2 -2
  773. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +2 -2
  774. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -2
  775. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -2
  776. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -2
  777. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -2
  778. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -2
  779. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
  780. package/.output/server/chunks/routes/api/workshop/index.mjs +2 -2
  781. package/.output/server/chunks/routes/api/workshop/index.post.mjs +3 -1
  782. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  783. package/.output/server/chunks/routes/api/workshop/index.put.mjs +2 -2
  784. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
  785. package/.output/server/chunks/routes/api/workshop/index10.post.mjs +1 -1
  786. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +1 -1
  787. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -2
  788. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -1
  789. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -1
  790. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +1 -1
  791. package/.output/server/chunks/routes/api/workshop/index16.get.mjs +1 -1
  792. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  793. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
  794. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  795. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +9 -4
  796. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  797. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -1
  798. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  799. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  800. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -2
  801. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -2
  802. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -2
  803. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -2
  804. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +2 -2
  805. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -2
  806. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
  807. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -1
  808. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +1 -1
  809. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
  810. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
  811. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
  812. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +2 -2
  813. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs +33 -0
  814. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs.map +1 -0
  815. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs +56 -0
  816. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs.map +1 -0
  817. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +1 -1
  818. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +1 -1
  819. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs +49 -0
  820. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs.map +1 -0
  821. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -1
  822. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +2 -2
  823. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +2 -2
  824. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +2 -2
  825. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +2 -2
  826. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +2 -2
  827. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +2 -2
  828. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +2 -2
  829. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +2 -2
  830. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +2 -2
  831. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +2 -2
  832. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +2 -2
  833. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +2 -2
  834. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +2 -2
  835. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +2 -2
  836. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +2 -2
  837. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +2 -2
  838. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +1 -1
  839. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +2 -2
  840. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +2 -2
  841. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +2 -2
  842. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +2 -2
  843. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +2 -2
  844. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +2 -2
  845. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +2 -2
  846. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +2 -2
  847. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -2
  848. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -2
  849. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
  850. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +2 -2
  851. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +2 -2
  852. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +1 -1
  853. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +2 -2
  854. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +2 -2
  855. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +2 -2
  856. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
  857. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -2
  858. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -2
  859. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
  860. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -1
  861. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -1
  862. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -1
  863. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -1
  864. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -1
  865. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  866. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  867. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
  868. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -1
  869. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -1
  870. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  871. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
  872. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -1
  873. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  874. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
  875. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  876. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
  877. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  878. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -2
  879. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -2
  880. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
  881. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
  882. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
  883. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  884. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +1 -1
  885. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +2 -2
  886. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
  887. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
  888. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  889. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
  890. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
  891. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
  892. package/.output/server/chunks/routes/renderer.mjs +2 -2
  893. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  894. package/.output/server/chunks/virtual/entry.mjs +10774 -9374
  895. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  896. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  897. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -1
  898. package/.output/server/index.mjs +1 -1
  899. package/.output/server/package.json +1 -1
  900. package/README-zh.md +19 -7
  901. package/README.md +24 -7
  902. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.json +1 -0
  903. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/1459e6269990a5d229b9228c8b2f62ffaa7d350068380ae8b875fee0db45cca6.source +180 -0
  904. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/c2991e909c70c5c12b90a407c7adcf63384c51668a2b334e6e047fa675c268fe.source +305 -0
  905. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/e09129039d1e27e3fac24becc9bdafd2d1a7c8049bff24173df007be865f0165.source +264 -0
  906. package/app/.mimosa/hook-status/sess_05189059-e42d-4188-8911-4f7baabe009b-28ef7c75ea.json +14 -0
  907. package/app/components/AwChart.vue +32 -3
  908. package/app/components/AwLogo.vue +75 -75
  909. package/app/components/aml/AmlDatasetFormModal.vue +279 -279
  910. package/app/components/aml/AmlDatasetTable.vue +319 -319
  911. package/app/components/aml/AmlExperimentsTable.vue +142 -142
  912. package/app/components/aml/AmlInfraBanner.vue +23 -23
  913. package/app/components/aml/AmlJobsTable.vue +248 -248
  914. package/app/components/aml/AmlOverviewBar.vue +62 -62
  915. package/app/components/aml/AmlPageHeader.vue +47 -47
  916. package/app/components/aml/AmlPredictConsole.vue +201 -201
  917. package/app/components/app-header/HitlBell.vue +423 -423
  918. package/app/components/daq/DaqAddNodeModal.vue +209 -209
  919. package/app/components/daq/DaqAlarmBar.vue +46 -46
  920. package/app/components/daq/DaqControlCard.vue +159 -159
  921. package/app/components/daq/DaqInfraBanner.vue +31 -31
  922. package/app/components/daq/DaqLineBanner.vue +47 -47
  923. package/app/components/daq/DaqNodePanel.vue +396 -396
  924. package/app/components/daq/DaqOptPanel.vue +197 -197
  925. package/app/components/daq/DaqTemplateModal.vue +246 -246
  926. package/app/components/dashboard/DashboardGaugeBand.vue +78 -78
  927. package/app/components/dashboard/DashboardHero.vue +209 -209
  928. package/app/components/dashboard/DashboardLineStatePanel.vue +78 -78
  929. package/app/components/dashboard/DashboardNodeStatePanel.vue +46 -46
  930. package/app/components/dashboard/DashboardPipelinePanel.vue +46 -46
  931. package/app/components/dashboard/DashboardTrendPanel.vue +83 -83
  932. package/app/components/dashboard/DashboardWritePanel.vue +52 -52
  933. package/app/components/dcw/DcwCreateLineModal.vue +105 -105
  934. package/app/components/dcw/DcwDeleteLineModal.vue +73 -73
  935. package/app/components/dcw/DcwDetailTemplateModal.vue +238 -238
  936. package/app/components/dcw/DcwLedgerCard.vue +160 -160
  937. package/app/components/dcw/DcwMesArtifacts.vue +140 -140
  938. package/app/components/dcw/DcwProductCreateModal.vue +113 -113
  939. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -244
  940. package/app/components/dcw/DcwRecipeEditModal.vue +399 -399
  941. package/app/components/dcw/DcwRecipeHistoryModal.vue +165 -165
  942. package/app/components/dcw/DcwRunDataModal.vue +191 -191
  943. package/app/components/dcw/DcwTemplateModal.vue +227 -227
  944. package/app/components/dcw/DcwWriteHistoryCard.vue +96 -96
  945. package/app/components/dcw/ExpConfirmCard.vue +103 -103
  946. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -330
  947. package/app/components/logs/LogsPageHead.vue +71 -71
  948. package/app/components/monitor/MonitorAgentTable.vue +143 -143
  949. package/app/components/monitor/MonitorChannelTable.vue +80 -80
  950. package/app/components/monitor/MonitorLoginGate.vue +24 -24
  951. package/app/components/monitor/MonitorPageHead.vue +92 -92
  952. package/app/components/monitor/MonitorProcessTable.vue +159 -159
  953. package/app/components/ontology/OntologyGraph.vue +356 -356
  954. package/app/components/operations/OperationsFilterCard.vue +164 -164
  955. package/app/components/operations/OperationsPageHead.vue +47 -47
  956. package/app/components/tokens/TokenCreateModal.vue +42 -42
  957. package/app/components/tokens/TokenOnceModal.vue +164 -164
  958. package/app/components/tokens/TokenRenameModal.vue +40 -40
  959. package/app/components/tokens/TokensPageHead.vue +76 -76
  960. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  961. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  962. package/app/components/workshop/AgentLanesView.vue +278 -278
  963. package/app/components/workshop/ArtifactCard.vue +120 -120
  964. package/app/components/workshop/AssetLibrary.vue +452 -452
  965. package/app/components/workshop/ChatMemberPanel.vue +556 -556
  966. package/app/components/workshop/CommandPalette.vue +270 -270
  967. package/app/components/workshop/Composer.vue +540 -540
  968. package/app/components/workshop/DaqTemplateIcon.vue +33 -33
  969. package/app/components/workshop/DeviceTwinPanel.vue +167 -167
  970. package/app/components/workshop/FileSelectorModal.vue +188 -188
  971. package/app/components/workshop/InspectorPanel.vue +301 -301
  972. package/app/components/workshop/PluginSlot.vue +120 -120
  973. package/app/components/workshop/TranscriptTimeline.vue +223 -223
  974. package/app/components/workshop/agents/AgentTemplateEditModal.vue +139 -139
  975. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  976. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  977. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  978. package/app/components/workshop/blocks/ClusterMember.vue +95 -95
  979. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  980. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  981. package/app/components/workshop/blocks/ClusterStatus.vue +149 -149
  982. package/app/components/workshop/blocks/ClusterTool.vue +176 -176
  983. package/app/components/workshop/blocks/EventBlockAvatar.vue +114 -114
  984. package/app/components/workshop/blocks/EventBlockHead.vue +232 -232
  985. package/app/components/workshop/composer/ComposerToolbar.vue +278 -278
  986. package/app/components/workshop/composer/MentionMenu.vue +135 -135
  987. package/app/components/workshop/composer/ReplyChip.vue +65 -65
  988. package/app/components/workshop/composer/StatusChip.vue +171 -171
  989. package/app/components/workshop/console/Dock.vue +71 -71
  990. package/app/components/workshop/console/LeftPane.vue +84 -84
  991. package/app/components/workshop/device-twin/DeviceTwinCard.vue +265 -265
  992. package/app/components/workshop/device-twin/DeviceTwinDcwSection.vue +203 -203
  993. package/app/components/workshop/lanes/AddMemberModal.vue +270 -270
  994. package/app/components/workshop/lanes/EditMemberModal.vue +106 -106
  995. package/app/components/workshop/lanes/LanesToolbar.vue +97 -97
  996. package/app/components/workshop/session-list/ChannelSettingsModal.vue +112 -1
  997. package/app/components/workshop/session-list/MountChannelModal.vue +124 -124
  998. package/app/components/workshop/session-list/SaveTemplateModal.vue +93 -93
  999. package/app/components/workshop/task-board/Card.vue +172 -172
  1000. package/app/components/workshop/task-board/Column.vue +151 -151
  1001. package/app/components/workshop/task-board/List.vue +157 -157
  1002. package/app/components/workshop/task-board/StatusMenu.vue +88 -88
  1003. package/app/components/workshop/teams/TeamAddMemberModal.vue +53 -53
  1004. package/app/components/workshop/teams/TeamCreateModal.vue +94 -94
  1005. package/app/components/workshop/teams/TeamDeployModal.vue +40 -40
  1006. package/app/components/workshop/teams/TeamPluginModal.vue +119 -119
  1007. package/app/components/workshop/terminal/OmpTerminalPanel.vue +270 -270
  1008. package/app/components/workshop/terminal/TerminalHitlCard.vue +170 -170
  1009. package/app/components/workshop/town/TownScene.ts +466 -466
  1010. package/app/components/workshop/town/TownView.vue +561 -561
  1011. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -94
  1012. package/app/components/workshop/town/components/TownAgentBindings.vue +405 -405
  1013. package/app/components/workshop/town/components/TownAgentInspector.vue +554 -554
  1014. package/app/components/workshop/town/components/TownAlarmList.vue +147 -147
  1015. package/app/components/workshop/town/components/TownBoundaryPanel.vue +350 -350
  1016. package/app/components/workshop/town/components/TownCalloutLayer.vue +147 -147
  1017. package/app/components/workshop/town/components/TownChannelDock.vue +116 -116
  1018. package/app/components/workshop/town/components/TownControlDock.vue +405 -405
  1019. package/app/components/workshop/town/components/TownDaqNodeInspector.vue +345 -345
  1020. package/app/components/workshop/town/components/TownDaqTree.vue +366 -366
  1021. package/app/components/workshop/town/components/TownDcwBindSection.vue +473 -473
  1022. package/app/components/workshop/town/components/TownDcwNodeInspector.vue +185 -185
  1023. package/app/components/workshop/town/components/TownDcwTree.vue +280 -280
  1024. package/app/components/workshop/town/components/TownDeviceBindings.vue +394 -394
  1025. package/app/components/workshop/town/components/TownDeviceTransform.vue +248 -248
  1026. package/app/components/workshop/town/components/TownEventList.vue +120 -120
  1027. package/app/components/workshop/town/components/TownHealthBody.vue +100 -100
  1028. package/app/components/workshop/town/components/TownKpiStrip.vue +207 -207
  1029. package/app/components/workshop/town/components/TownLeftRail.vue +308 -308
  1030. package/app/components/workshop/town/components/TownLoadingMask.vue +61 -61
  1031. package/app/components/workshop/town/components/TownNavMap.vue +154 -154
  1032. package/app/components/workshop/town/components/TownRightRail.vue +543 -543
  1033. package/app/components/workshop/town/components/TownStage.vue +281 -281
  1034. package/app/components/workshop/town/components/TownStageTop.vue +238 -238
  1035. package/app/components/workshop/town/components/TownStatusBar.vue +108 -108
  1036. package/app/components/workshop/town/components/TownTopNav.vue +367 -367
  1037. package/app/components/workshop/town/components/TownTrendDock.vue +178 -178
  1038. package/app/components/workshop/town/scene/town-scene-agents.ts +254 -254
  1039. package/app/components/workshop/town/scene/town-scene-behavior.ts +194 -194
  1040. package/app/components/workshop/town/scene/town-scene-bubbles.ts +96 -96
  1041. package/app/components/workshop/town/scene/town-scene-core.ts +158 -158
  1042. package/app/components/workshop/town/scene/town-scene-models.ts +109 -109
  1043. package/app/components/workshop/town/scene/town-scene-visuals.ts +279 -279
  1044. package/app/components/workshop/town/scene/town-scene3d-agents.ts +308 -308
  1045. package/app/components/workshop/town/scene/town-scene3d-blocks.ts +297 -297
  1046. package/app/components/workshop/town/scene/town-scene3d-bubbles.ts +281 -281
  1047. package/app/components/workshop/town/scene/town-scene3d-camera.ts +282 -282
  1048. package/app/components/workshop/town/scene/town-scene3d-devices.ts +433 -433
  1049. package/app/components/workshop/town/scene/town-scene3d-editing.ts +490 -490
  1050. package/app/components/workshop/town/scene/town-scene3d-events.ts +173 -173
  1051. package/app/components/workshop/town/scene/town-scene3d-factory.ts +412 -412
  1052. package/app/components/workshop/town/scene/town-scene3d-hud.ts +110 -110
  1053. package/app/components/workshop/town/scene/town-scene3d-lifecycle.ts +144 -144
  1054. package/app/components/workshop/town/scene/town-scene3d-links.ts +141 -141
  1055. package/app/components/workshop/town/scene/town-scene3d-loop.ts +286 -286
  1056. package/app/components/workshop/town/scene/town-scene3d-models.ts +154 -154
  1057. package/app/components/workshop/town/scene/town-scene3d-nodes.ts +562 -562
  1058. package/app/components/workshop/town/scene/town-scene3d-ranges.ts +273 -273
  1059. package/app/components/workshop/town/scene/town-scene3d-renderer.ts +320 -320
  1060. package/app/components/workshop/town/scene/town-scene3d-selection.ts +257 -257
  1061. package/app/components/workshop/town/scene/town-scene3d-types.ts +264 -264
  1062. package/app/components/workshop/transcript/TranscriptBlockList.vue +68 -68
  1063. package/app/components/workshop/transcript/TranscriptEarlierPager.vue +81 -81
  1064. package/app/components/workshop/transcript/TranscriptFilterBar.vue +126 -126
  1065. package/app/components/workshop/workbench/CreateWorkspaceModal.vue +36 -36
  1066. package/app/components/workshop/workbench/WorkspaceEmpty.vue +56 -56
  1067. package/app/composables/useResponsive.ts +88 -88
  1068. package/app/composables/workshop/device-twin-types.ts +29 -29
  1069. package/app/composables/workshop/event-blocks/attention.ts +58 -58
  1070. package/app/composables/workshop/event-blocks/classify.ts +44 -44
  1071. package/app/composables/workshop/event-blocks/clusterer.ts +231 -231
  1072. package/app/composables/workshop/event-blocks/fold-stream.ts +45 -45
  1073. package/app/composables/workshop/event-blocks/markdown.ts +81 -81
  1074. package/app/composables/workshop/event-blocks/mentions.ts +49 -49
  1075. package/app/composables/workshop/event-blocks/text-utils.ts +100 -100
  1076. package/app/composables/workshop/event-blocks/types.ts +40 -40
  1077. package/app/composables/workshop/town/town-relay-props.ts +231 -231
  1078. package/app/composables/workshop/town/town-view-types.ts +145 -145
  1079. package/app/composables/workshop/town/useTownAgentBindings.ts +182 -182
  1080. package/app/composables/workshop/town/useTownAgentChat.ts +203 -203
  1081. package/app/composables/workshop/town/useTownAlarms.ts +36 -36
  1082. package/app/composables/workshop/town/useTownCallouts.ts +174 -174
  1083. package/app/composables/workshop/town/useTownChannels.ts +220 -220
  1084. package/app/composables/workshop/town/useTownHealth.ts +66 -66
  1085. package/app/composables/workshop/town/useTownHudTickers.ts +77 -77
  1086. package/app/composables/workshop/town/useTownLayout.ts +277 -277
  1087. package/app/composables/workshop/town/useTownNavMap.ts +301 -301
  1088. package/app/composables/workshop/town/useTownNodeBindings.ts +345 -345
  1089. package/app/composables/workshop/town/useTownPanelDrag.ts +91 -91
  1090. package/app/composables/workshop/town/useTownRailData.ts +421 -421
  1091. package/app/composables/workshop/town/useTownSceneControl.ts +92 -92
  1092. package/app/composables/workshop/town/useTownSceneInput.ts +275 -275
  1093. package/app/composables/workshop/town/useTownSceneRuntime.ts +390 -390
  1094. package/app/composables/workshop/town/useTownSheets.ts +41 -41
  1095. package/app/composables/workshop/town/useTownTrends.ts +93 -93
  1096. package/app/composables/workshop/useChannelList.ts +88 -88
  1097. package/app/composables/workshop/useChannelTerminals.ts +65 -65
  1098. package/app/composables/workshop/useComposerMentions.ts +130 -130
  1099. package/app/composables/workshop/useDcwStream.ts +374 -374
  1100. package/app/composables/workshop/useDeviceTwinDcwWrite.ts +77 -77
  1101. package/app/composables/workshop/useDeviceTwinPanel.ts +56 -56
  1102. package/app/composables/workshop/useEscClose.ts +44 -44
  1103. package/app/composables/workshop/useEventBlockView.ts +159 -159
  1104. package/app/composables/workshop/useEventBlocks.ts +33 -33
  1105. package/app/composables/workshop/useHitlAnswer.ts +184 -184
  1106. package/app/composables/workshop/useLaneWidths.ts +27 -27
  1107. package/app/composables/workshop/useOmpTerminalSession.ts +424 -424
  1108. package/app/composables/workshop/usePluginAdmin.ts +152 -152
  1109. package/app/composables/workshop/usePluginPanels.ts +72 -72
  1110. package/app/composables/workshop/useRuntimeConfigDraft.ts +118 -118
  1111. package/app/composables/workshop/useSettingsGroups.ts +243 -243
  1112. package/app/composables/workshop/useTaskBoardColumns.ts +47 -47
  1113. package/app/composables/workshop/useTerminalRenderer.ts +308 -308
  1114. package/app/composables/workshop/useTranscriptEnterStage.ts +48 -48
  1115. package/app/composables/workshop/useTranscriptHistory.ts +52 -52
  1116. package/app/composables/workshop/useTranscriptScroll.ts +113 -113
  1117. package/app/composables/workshop/useVisibleInterval.ts +42 -42
  1118. package/app/composables/workshop/useWorkshopApi.ts +6 -0
  1119. package/app/composables/workshop/useWorkshopWs.ts +265 -265
  1120. package/app/config/index.ts +1 -1
  1121. package/app/config/schema.ts +5 -0
  1122. package/app/middleware/locale-cookie.global.ts +22 -22
  1123. package/app/pages/aml/api.ts +6 -6
  1124. package/app/pages/aml/composables/useAmlDatasets.ts +38 -38
  1125. package/app/pages/aml/composables/useAmlEntities.ts +57 -57
  1126. package/app/pages/aml/composables/useAmlEnv.ts +191 -191
  1127. package/app/pages/aml/composables/useAmlExperiments.ts +45 -45
  1128. package/app/pages/aml/composables/useAmlFormat.ts +44 -44
  1129. package/app/pages/aml/composables/useAmlJobs.ts +131 -131
  1130. package/app/pages/aml/composables/useAmlModels.ts +56 -56
  1131. package/app/pages/aml/composables/useAmlNotes.ts +47 -47
  1132. package/app/pages/aml/composables/useAmlPredict.ts +93 -93
  1133. package/app/pages/aml/constants.ts +63 -63
  1134. package/app/pages/aml/index.vue +236 -236
  1135. package/app/pages/composables/useDashboardCharts.ts +192 -192
  1136. package/app/pages/composables/useDashboardData.ts +144 -144
  1137. package/app/pages/daq/composables/useDaqAddNode.ts +126 -126
  1138. package/app/pages/daq/composables/useDaqDetailBinding.ts +29 -29
  1139. package/app/pages/daq/composables/useDaqDetailFrames.ts +42 -42
  1140. package/app/pages/daq/composables/useDaqDetailNode.ts +53 -53
  1141. package/app/pages/daq/composables/useDaqDetailParams.ts +138 -138
  1142. package/app/pages/daq/composables/useDaqFilters.ts +187 -187
  1143. package/app/pages/daq/composables/useDaqNodeWindow.ts +86 -86
  1144. package/app/pages/daq/composables/useDaqOptimizations.ts +99 -99
  1145. package/app/pages/daq/composables/useDaqTemplates.ts +152 -152
  1146. package/app/pages/daq/index.vue +260 -260
  1147. package/app/pages/dcw/composables/useDcwCards.ts +27 -27
  1148. package/app/pages/dcw/composables/useDcwDetailScope.ts +145 -145
  1149. package/app/pages/dcw/composables/useDcwDetailTemplates.ts +94 -94
  1150. package/app/pages/dcw/composables/useDcwFilter.ts +29 -29
  1151. package/app/pages/dcw/composables/useDcwLedger.ts +34 -34
  1152. package/app/pages/dcw/composables/useDcwLineMutations.ts +115 -115
  1153. package/app/pages/dcw/composables/useDcwLineRun.ts +60 -60
  1154. package/app/pages/dcw/composables/useDcwProducts.ts +54 -54
  1155. package/app/pages/dcw/composables/useDcwQuery.ts +68 -68
  1156. package/app/pages/dcw/composables/useDcwQuickActions.ts +47 -47
  1157. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -256
  1158. package/app/pages/dcw/composables/useDcwTemplates.ts +50 -50
  1159. package/app/pages/dcw/index.vue +195 -195
  1160. package/app/pages/dcw/types.ts +9 -9
  1161. package/app/pages/index.vue +126 -126
  1162. package/app/pages/logs/composables/useLogsFormat.ts +43 -43
  1163. package/app/pages/logs/composables/useLogsScope.ts +39 -39
  1164. package/app/pages/monitor/types.ts +61 -61
  1165. package/app/pages/operations.vue +61 -61
  1166. package/app/pages/permissions/index.vue +369 -369
  1167. package/app/pages/studio/board.vue +30 -9
  1168. package/app/pages/studio/index.vue +40 -8
  1169. package/app/pages/studio/pipeline.vue +16 -24
  1170. package/app/pages/tokens/composables/useTokenClipboard.ts +33 -33
  1171. package/app/pages/tokens/composables/useTokenCreate.ts +93 -93
  1172. package/app/pages/tokens/composables/useTokenRename.ts +54 -54
  1173. package/app/pages/tokens/composables/useTokenReveal.ts +84 -84
  1174. package/app/pages/tokens/composables/useTokensList.ts +60 -60
  1175. package/app/pages/tokens.vue +111 -111
  1176. package/app/pages/tools/index.vue +98 -98
  1177. package/app/pages/workshop/agents.vue +130 -130
  1178. package/app/pages/workshop/composables/useAgentHarnessOptions.ts +59 -59
  1179. package/app/pages/workshop/composables/useAgentTemplateActions.ts +42 -42
  1180. package/app/pages/workshop/composables/useAgentTemplateDialogState.ts +24 -24
  1181. package/app/pages/workshop/composables/useAgentTemplateForm.ts +88 -88
  1182. package/app/pages/workshop/composables/useAgentTemplatesCatalog.ts +92 -92
  1183. package/app/pages/workshop/composables/useTeamActions.ts +44 -44
  1184. package/app/pages/workshop/composables/useTeamAddMemberDialog.ts +49 -49
  1185. package/app/pages/workshop/composables/useTeamCreateDialog.ts +67 -67
  1186. package/app/pages/workshop/composables/useTeamDeployDialog.ts +49 -49
  1187. package/app/pages/workshop/composables/useTeamDialogState.ts +46 -46
  1188. package/app/pages/workshop/composables/useTeamPluginDialog.ts +72 -72
  1189. package/app/pages/workshop/composables/useTeamsCatalog.ts +100 -100
  1190. package/app/pages/workshop/composables/useWorkbenchWorkspaces.ts +123 -123
  1191. package/app/pages/workshop/composables/useWorkspaceAuth.ts +31 -31
  1192. package/app/pages/workshop/composables/useWorkspaceChannels.ts +62 -62
  1193. package/app/pages/workshop/composables/useWorkspaceShell.ts +136 -136
  1194. package/app/pages/workshop/schedules.vue +553 -553
  1195. package/app/pages/workshop/w/[wsId].vue +221 -221
  1196. package/app/plugins/aw-plugins.client.ts +213 -213
  1197. package/app/plugins/esc-close.client.ts +31 -31
  1198. package/app/stores/workshop/hitl.ts +183 -183
  1199. package/app/stores/workshop/narrow-fetch.ts +23 -23
  1200. package/app/utils/api-error.ts +75 -75
  1201. package/app/utils/builtin-catalog.ts +104 -104
  1202. package/app/utils/chart-pipeline.ts +50 -1
  1203. package/app/utils/chart-trend.ts +97 -97
  1204. package/app/utils/dcw-driver-badge.ts +16 -16
  1205. package/app/utils/dcw-recipe-form.ts +26 -26
  1206. package/cli/commands/tui.mjs +28 -28
  1207. package/cli/commands/update.mjs +124 -124
  1208. package/cli/core/child-lifecycle.mjs +136 -136
  1209. package/cli/core/meta.mjs +38 -38
  1210. package/cli/core/post-build.mjs +96 -96
  1211. package/config.yml +1 -1
  1212. package/docker-compose.yml +4 -2
  1213. package/docs/cli.en.md +4 -4
  1214. package/docs/cli.md +4 -4
  1215. package/docs/mcp.en.md +27 -27
  1216. package/docs/multi-harness-architecture.md +248 -248
  1217. package/docs/plugins.en.md +1 -1
  1218. package/docs/plugins.md +1 -1
  1219. package/docs/sdk.en.md +1 -1
  1220. package/docs/sdk.md +1 -1
  1221. package/docs/tui.md +43 -43
  1222. package/i18n/dicts/_en.json +1551 -1551
  1223. package/i18n/dicts/_en2.json +300 -300
  1224. package/i18n/dicts/_en4.json +114 -114
  1225. package/i18n/dicts/agentLanesView.json +61 -61
  1226. package/i18n/dicts/appHeader.json +17 -17
  1227. package/i18n/dicts/channelSessionList.json +51 -51
  1228. package/i18n/dicts/chat.json +79 -79
  1229. package/i18n/dicts/clusterTool.json +4 -4
  1230. package/i18n/dicts/composer.json +38 -38
  1231. package/i18n/dicts/ctpl.json +37 -37
  1232. package/i18n/dicts/dcwDetail.json +219 -219
  1233. package/i18n/dicts/lineOps.json +14 -14
  1234. package/i18n/dicts/multiChannelView.json +13 -13
  1235. package/i18n/dicts/notifications.json +13 -13
  1236. package/i18n/dicts/taskInspectorDrawer.json +25 -25
  1237. package/i18n/dicts/teamPlugins.json +10 -10
  1238. package/i18n/dicts/townView.json +209 -209
  1239. package/i18n/locales/en.ts +18 -0
  1240. package/i18n/locales/zh-CN.ts +18 -0
  1241. package/mcp/discovery.mjs +227 -227
  1242. package/package.json +1 -1
  1243. package/public/favicon.svg +14 -14
  1244. package/public/robots.txt +3 -3
  1245. package/scripts/_audit/_detached-mes-20261028.mjs +48 -0
  1246. package/scripts/_audit/_detached-nodesim-20261028.mjs +50 -0
  1247. package/scripts/_audit/_detached-sim-20261028.mjs +44 -0
  1248. package/scripts/_audit/_live-execmodes-20261028.mjs +246 -0
  1249. package/scripts/_audit/_live-execmodes-invoke-20261028.mjs +203 -0
  1250. package/scripts/_audit/_live-mqtt-e2e-20261028.mjs +219 -0
  1251. package/scripts/_audit/_mission-coupling-probe-20261028.mjs +27 -0
  1252. package/scripts/_audit/_mission-f1-evidence-20261028.mjs +56 -0
  1253. package/scripts/_audit/_mission-idd-remint-20261028.mjs +32 -0
  1254. package/scripts/_audit/_mission-ui-shots-20261028.mjs +56 -0
  1255. package/scripts/_audit/_mission-us10-timeline-20261028.mjs +65 -0
  1256. package/scripts/_audit/_mission-us12-tools-20261028.mjs +85 -0
  1257. package/scripts/_audit/_mission-us4-daq-dcw-20261028.mjs +115 -0
  1258. package/scripts/_audit/_mission-us5-mes-20261028.mjs +142 -0
  1259. package/scripts/_audit/_mission-us6-dialog-20261028.mjs +43 -0
  1260. package/scripts/_audit/_mission-us7-diag-20261028.mjs +42 -0
  1261. package/scripts/_audit/_mission-us7-final-20261028.mjs +79 -0
  1262. package/scripts/_audit/_mission-us7-idd-rag-20261028.mjs +147 -0
  1263. package/scripts/_audit/audit-harness-adapters.md +664 -664
  1264. package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -293
  1265. package/scripts/_audit/bump-version.mjs +51 -51
  1266. package/scripts/_audit/detached-instance.mjs +112 -112
  1267. package/scripts/_audit/detached-start.mjs +103 -103
  1268. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -212
  1269. package/scripts/_audit/guard-upstream-liveness.mjs +104 -104
  1270. package/scripts/_audit/http-api-authz-audit.md +657 -657
  1271. package/scripts/_audit/kb-team-mock-e2e.mjs +146 -146
  1272. package/scripts/_audit/kb-team-omp-e2e.mjs +229 -229
  1273. package/scripts/_audit/prompt-injection-probe.mts +76 -0
  1274. package/scripts/_audit/run.mjs +21 -21
  1275. package/scripts/_audit/runtime-audit.md +716 -716
  1276. package/scripts/_audit/skills-guided-e2e.mjs +316 -316
  1277. package/scripts/_audit/stability-soak.mjs +252 -252
  1278. package/scripts/_audit/stubs/nuxt-imports.mjs +67 -67
  1279. package/scripts/_audit/ts-register-hook.mjs +12 -12
  1280. package/scripts/_audit/ts-resolve-hook.mjs +96 -96
  1281. package/scripts/_aw0746-stage12.mjs +94 -94
  1282. package/scripts/_aw0746-stage34.mjs +136 -136
  1283. package/scripts/_aw0746-stage6b-train-sweep.mjs +145 -145
  1284. package/scripts/_aw0746-stage6c-jobsmoke.mjs +69 -69
  1285. package/scripts/_dbg-configroot-audit.mjs +86 -86
  1286. package/scripts/_dbg-daq-intervals-func.mjs +115 -115
  1287. package/scripts/_dbg-perms-e2e.mjs +142 -142
  1288. package/scripts/_dbg-protocol-matrix.mjs +462 -462
  1289. package/scripts/_dbg-render-regression.mjs +193 -193
  1290. package/scripts/_dbg-schedule-e2e.mjs +262 -262
  1291. package/scripts/_e2e-ui-functional.mjs +371 -371
  1292. package/scripts/_lib-aml-python-run.mjs +17 -17
  1293. package/scripts/_plc-sim-detached.cjs +22 -22
  1294. package/scripts/_provision-injection-line.mjs +39 -39
  1295. package/scripts/_run-matrix.ps1 +53 -53
  1296. package/scripts/_sweep-button-contrast.mjs +87 -87
  1297. package/scripts/acceptance-aml-hybrid-e2e.ts +396 -396
  1298. package/scripts/acceptance-aml-hybrid-live.mjs +93 -93
  1299. package/scripts/acceptance-aml-model-identity.ts +137 -137
  1300. package/scripts/agent-daq-isolation-e2e.mjs +91 -91
  1301. package/scripts/api-contract-smoke.mjs +126 -126
  1302. package/scripts/api-live-e2e.mjs +9 -3
  1303. package/scripts/ask-hitl-e2e.mjs +96 -96
  1304. package/scripts/aw-expose.mjs +159 -159
  1305. package/scripts/channel-interaction-smoke.mjs +80 -80
  1306. package/scripts/data-studio-ui-e2e.mjs +163 -163
  1307. package/scripts/demo-group-chat-all-real.ts +279 -279
  1308. package/scripts/dev-modbus-simulator.mjs +55 -55
  1309. package/scripts/docs-shots.mjs +36 -36
  1310. package/scripts/e2e-agentteam-chat.mjs +473 -473
  1311. package/scripts/e2e-agentteam-real-triage.mjs +421 -421
  1312. package/scripts/e2e-aml-decoupled.mjs +162 -162
  1313. package/scripts/e2e-aw-tui-global.mjs +277 -277
  1314. package/scripts/e2e-closedloop/cleanup.mjs +27 -27
  1315. package/scripts/e2e-closedloop/lib.mjs +109 -109
  1316. package/scripts/e2e-closedloop/main.mjs +59 -59
  1317. package/scripts/e2e-closedloop/scenarios-accounts.mjs +210 -210
  1318. package/scripts/e2e-closedloop/scenarios-authz.mjs +196 -196
  1319. package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +222 -222
  1320. package/scripts/e2e-closedloop/scenarios-plugins.mjs +169 -169
  1321. package/scripts/e2e-closedloop/state.mjs +10 -10
  1322. package/scripts/e2e-config-groups.mjs +238 -238
  1323. package/scripts/e2e-crash-cycle.mjs +108 -108
  1324. package/scripts/e2e-direct-rest-simulator-paper.mjs +624 -0
  1325. package/scripts/e2e-eda-pipeline.mjs +23 -2
  1326. package/scripts/e2e-execution-modes.mjs +290 -0
  1327. package/scripts/e2e-full-closedloop.mjs +16 -16
  1328. package/scripts/e2e-hil-multi-user.mjs +307 -307
  1329. package/scripts/e2e-hil-restart.mjs +339 -339
  1330. package/scripts/e2e-injection-recipe-closedloop.mjs +1 -1
  1331. package/scripts/e2e-line-governance.mjs +352 -352
  1332. package/scripts/e2e-mqtt-protocol.mjs +945 -0
  1333. package/scripts/e2e-multiexpert-remediation-real.mjs +453 -0
  1334. package/scripts/e2e-node-binding-3mode-real.mjs +697 -0
  1335. package/scripts/e2e-node-binding-authz.mjs +332 -0
  1336. package/scripts/e2e-ontology.mjs +393 -393
  1337. package/scripts/e2e-pi-simulator-paper.mjs +2317 -0
  1338. package/scripts/e2e-plc-plugin-closedloop.mjs +549 -549
  1339. package/scripts/e2e-registered-harness-simulator-paper.mjs +1926 -0
  1340. package/scripts/e2e-simulator-optimizer-paper.mjs +264 -0
  1341. package/scripts/fixtures/omp-paper-harness.mjs +163 -0
  1342. package/scripts/full-stack-shots.mjs +145 -145
  1343. package/scripts/full-tool-injection-harness-e2e.mjs +214 -214
  1344. package/scripts/hitl-reject-e2e.mjs +131 -131
  1345. package/scripts/line-log-smoke.mjs +260 -260
  1346. package/scripts/live-aml-mockomp.mjs +304 -304
  1347. package/scripts/live-aml-optloop-resume.mjs +322 -322
  1348. package/scripts/live-aml-optloop.mjs +588 -588
  1349. package/scripts/live-aml-stage9.mjs +169 -169
  1350. package/scripts/live-aml-two-goals.mjs +315 -315
  1351. package/scripts/live-optloop-two-modes.mjs +857 -857
  1352. package/scripts/mes-agent-integration-e2e.mjs +361 -361
  1353. package/scripts/ops-plugins-e2e.mjs +85 -85
  1354. package/scripts/scenario-suite-setup.mjs +337 -337
  1355. package/scripts/scenario-suite-stability.mjs +144 -144
  1356. package/scripts/security-acceptance.mjs +218 -0
  1357. package/scripts/team-coordination-e2e.mjs +96 -96
  1358. package/scripts/test-agentteam-workflow.ts +472 -472
  1359. package/scripts/test-aw-skills.mjs +102 -102
  1360. package/scripts/test-daq-frame-race.mjs +358 -358
  1361. package/scripts/test-data-root.mjs +208 -208
  1362. package/scripts/test-events-index.mjs +176 -176
  1363. package/scripts/test-group-chat-unit/lib.ts +186 -186
  1364. package/scripts/test-group-chat-unit/main.ts +45 -45
  1365. package/scripts/test-group-chat-unit.ts +35 -35
  1366. package/scripts/test-hitl-decision.ts +526 -526
  1367. package/scripts/test-hitl-registry.ts +112 -112
  1368. package/scripts/test-log-flooding.mjs +160 -160
  1369. package/scripts/test-lru.mjs +101 -101
  1370. package/scripts/test-plugin-hardening.mjs +90 -90
  1371. package/scripts/test-plugin-lifecycle.mjs +173 -173
  1372. package/scripts/test-rollback-index.mjs +137 -137
  1373. package/scripts/test-schedule-runtime.ts +309 -309
  1374. package/scripts/test-sdk-surface.mjs +158 -158
  1375. package/scripts/test-serial-bridge.mjs +418 -418
  1376. package/scripts/test-tui-commands.mjs +148 -148
  1377. package/scripts/test-tui-reducers.mjs +72 -72
  1378. package/scripts/three-system-e2e/lib.mjs +79 -79
  1379. package/scripts/three-system-e2e/main.mjs +40 -40
  1380. package/scripts/three-system-e2e/phases/phase-0-user-token.mjs +42 -42
  1381. package/scripts/three-system-e2e/phases/phase-0a2-line-autoselect.mjs +35 -35
  1382. package/scripts/three-system-e2e/phases/phase-0b-fixture-grants.mjs +39 -39
  1383. package/scripts/three-system-e2e/phases/phase-0c-plugin-outbound-auth.mjs +95 -95
  1384. package/scripts/three-system-e2e/phases/stage-1-health.mjs +47 -47
  1385. package/scripts/three-system-e2e/phases/stage-2-5-team-plugins.mjs +84 -84
  1386. package/scripts/three-system-e2e/phases/stage-2-teams-tools-hitl.mjs +184 -184
  1387. package/scripts/three-system-e2e/phases/stage-3-diag.mjs +73 -73
  1388. package/scripts/three-system-e2e/phases/stage-4-plugin-toggle.mjs +53 -53
  1389. package/scripts/three-system-e2e/state.mjs +87 -87
  1390. package/scripts/three-system-e2e.mjs +40 -40
  1391. package/scripts/tool-face-batch-identity-e2e.mjs +222 -222
  1392. package/scripts/tsconfig.json +14 -14
  1393. package/scripts/tui-smoke.mjs +100 -100
  1394. package/scripts/typecheck.mjs +75 -75
  1395. package/scripts/ui/md-lint.mjs +80 -80
  1396. package/scripts/ui/readme-assets.mjs +30 -30
  1397. package/scripts/ui/readme-shots.mjs +42 -42
  1398. package/scripts/ui/record-demo.mjs +557 -557
  1399. package/scripts/ui/record.mjs +225 -225
  1400. package/scripts/ui/seed-admin.mjs +68 -68
  1401. package/scripts/ui/seed-demo.mjs +83 -83
  1402. package/scripts/ui/seed-industrial-demo.mjs +171 -171
  1403. package/scripts/ui/shot-hero.mjs +25 -25
  1404. package/scripts/ui/shots.mjs +75 -75
  1405. package/scripts/ui/verify-nav.mjs +51 -51
  1406. package/scripts/ui/verify-responsive.mjs +285 -285
  1407. package/sdk/client.d.mts +110 -110
  1408. package/sdk/examples/line-sentinel/index.mjs +105 -105
  1409. package/sdk/examples/ops-notifier/index.mjs +34 -34
  1410. package/sdk/examples/sample-insight/index.mjs +39 -39
  1411. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +1 -0
  1412. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +41 -0
  1413. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +51 -0
  1414. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +14 -0
  1415. package/server/api/plugins/client/[name].get.ts +18 -18
  1416. package/server/api/plugins/i18n.get.ts +12 -12
  1417. package/server/api/plugins/manifest.get.ts +10 -10
  1418. package/server/api/system/backup/list.get.ts +32 -32
  1419. package/server/api/system/backup/run.post.ts +21 -21
  1420. package/server/api/system/config-groups/[id].delete.ts +21 -21
  1421. package/server/api/system/config-groups/[id].patch.ts +26 -26
  1422. package/server/api/system/config-groups/index.get.ts +21 -21
  1423. package/server/api/system/config-groups/index.post.ts +33 -33
  1424. package/server/api/system/timezone.get.ts +20 -20
  1425. package/server/api/users/tokens/[id]/token.get.ts +11 -11
  1426. package/server/api/workshop/[...path].ts +13 -13
  1427. package/server/api/workshop/agent-tools/approvals/index.get.ts +43 -43
  1428. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +26 -26
  1429. package/server/api/workshop/agent-tools/bindings/grant.post.ts +45 -45
  1430. package/server/api/workshop/agent-tools/bindings/index.get.ts +41 -41
  1431. package/server/api/workshop/agent-tools/bindings/index.post.ts +33 -17
  1432. package/server/api/workshop/agent-tools/bindings/revoke.post.ts +42 -42
  1433. package/server/api/workshop/agents/[id].patch.ts +3 -0
  1434. package/server/api/workshop/agents/index.post.ts +3 -0
  1435. package/server/api/workshop/aml/datasets/[id]/preview.get.ts +68 -68
  1436. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -39
  1437. package/server/api/workshop/aml/datasets/[id].get.ts +53 -53
  1438. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -30
  1439. package/server/api/workshop/aml/datasets/index.get.ts +20 -20
  1440. package/server/api/workshop/aml/datasets/index.post.ts +27 -27
  1441. package/server/api/workshop/aml/entities/index.get.ts +13 -13
  1442. package/server/api/workshop/aml/entities/prune.post.ts +28 -28
  1443. package/server/api/workshop/aml/env/index.get.ts +13 -13
  1444. package/server/api/workshop/aml/env/recheck.post.ts +14 -14
  1445. package/server/api/workshop/aml/env/uv.post.ts +21 -21
  1446. package/server/api/workshop/aml/env/venv.post.ts +24 -24
  1447. package/server/api/workshop/aml/experiments/index.get.ts +35 -35
  1448. package/server/api/workshop/aml/index.get.ts +37 -37
  1449. package/server/api/workshop/aml/jobs/[id]/cancel.post.ts +21 -21
  1450. package/server/api/workshop/aml/jobs/[id]/logs.get.ts +23 -23
  1451. package/server/api/workshop/aml/jobs/[id]/retry.post.ts +20 -20
  1452. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -44
  1453. package/server/api/workshop/aml/jobs/[id].get.ts +23 -23
  1454. package/server/api/workshop/aml/jobs/index.get.ts +26 -26
  1455. package/server/api/workshop/aml/models/[id]/predict.post.ts +24 -24
  1456. package/server/api/workshop/aml/models/[id]/promote.post.ts +30 -30
  1457. package/server/api/workshop/aml/models/index.get.ts +48 -48
  1458. package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -18
  1459. package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -18
  1460. package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -30
  1461. package/server/api/workshop/aml/training-plans/index.get.ts +9 -9
  1462. package/server/api/workshop/aml/training-plans/index.post.ts +43 -43
  1463. package/server/api/workshop/analysis/index.post.ts +54 -54
  1464. package/server/api/workshop/approvals/[id]/decide.post.ts +30 -30
  1465. package/server/api/workshop/approvals/index.get.ts +22 -22
  1466. package/server/api/workshop/audit.get.ts +43 -43
  1467. package/server/api/workshop/channel-templates/[id].patch.ts +5 -0
  1468. package/server/api/workshop/channel-templates/index.post.ts +6 -0
  1469. package/server/api/workshop/channels/[id]/agents/[agentId].patch.ts +5 -0
  1470. package/server/api/workshop/channels/[id]/agents/index.get.ts +8 -2
  1471. package/server/api/workshop/channels/[id]/agents/index.post.ts +7 -0
  1472. package/server/api/workshop/channels/[id]/chat/messages/[messageId]/read.post.ts +22 -22
  1473. package/server/api/workshop/channels/[id]/chat/messages/index.get.ts +29 -29
  1474. package/server/api/workshop/channels/[id]/chat/messages/index.post.ts +51 -51
  1475. package/server/api/workshop/channels/[id]/chat/permissions.get.ts +35 -35
  1476. package/server/api/workshop/channels/[id]/execution-mode.patch.ts +94 -0
  1477. package/server/api/workshop/channels/[id]/index.get.ts +10 -4
  1478. package/server/api/workshop/channels/[id]/index.patch.ts +64 -64
  1479. package/server/api/workshop/channels/[id]/members/[userId]/approve.post.ts +20 -20
  1480. package/server/api/workshop/channels/[id]/members/[userId].delete.ts +21 -21
  1481. package/server/api/workshop/channels/[id]/members/index.get.ts +23 -23
  1482. package/server/api/workshop/channels/[id]/members/leave.post.ts +20 -20
  1483. package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -45
  1484. package/server/api/workshop/channels/[id]/twin-profile.patch.ts +72 -72
  1485. package/server/api/workshop/channels.post.ts +3 -0
  1486. package/server/api/workshop/daq/[id]/frames/content.get.ts +3 -0
  1487. package/server/api/workshop/daq/[id]/ingest.post.ts +31 -22
  1488. package/server/api/workshop/daq/[id]/test.post.ts +1 -1
  1489. package/server/api/workshop/daq/[id].patch.ts +8 -0
  1490. package/server/api/workshop/daq/alarms.get.ts +4 -2
  1491. package/server/api/workshop/daq/infra/reconnect.post.ts +21 -5
  1492. package/server/api/workshop/daq/test-driver.post.ts +10 -3
  1493. package/server/api/workshop/dcw/[id]/param-ledger.get.ts +7 -1
  1494. package/server/api/workshop/dcw/[id]/read.post.ts +6 -1
  1495. package/server/api/workshop/dcw/[id]/write.post.ts +4 -4
  1496. package/server/api/workshop/dcw/[id].delete.ts +41 -41
  1497. package/server/api/workshop/dcw/[id].patch.ts +9 -0
  1498. package/server/api/workshop/dcw/journal/index.get.ts +7 -3
  1499. package/server/api/workshop/dcw/mes-artifacts/file.get.ts +7 -1
  1500. package/server/api/workshop/dcw/mes-artifacts/index.get.ts +7 -1
  1501. package/server/api/workshop/dcw/mes-hook-test.post.ts +5 -3
  1502. package/server/api/workshop/dcw/mes-test-read.post.ts +24 -24
  1503. package/server/api/workshop/dcw/optimizations/[id]/series.get.ts +6 -1
  1504. package/server/api/workshop/dcw/optimizations/[id].get.ts +3 -1
  1505. package/server/api/workshop/dcw/optimizations/index.get.ts +6 -3
  1506. package/server/api/workshop/dcw/params/[id]/read.post.ts +6 -1
  1507. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -21
  1508. package/server/api/workshop/dcw/params/[id].delete.ts +19 -19
  1509. package/server/api/workshop/dcw/params/[id].patch.ts +23 -23
  1510. package/server/api/workshop/dcw/params/index.get.ts +27 -27
  1511. package/server/api/workshop/dcw/params/index.post.ts +25 -25
  1512. package/server/api/workshop/dcw/products/[id].delete.ts +6 -2
  1513. package/server/api/workshop/dcw/products/[id].patch.ts +8 -2
  1514. package/server/api/workshop/dcw/recipes/[id]/index.patch.ts +6 -1
  1515. package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +7 -1
  1516. package/server/api/workshop/dcw/recipes/[id].delete.ts +8 -0
  1517. package/server/api/workshop/dcw/recipes/index.get.ts +7 -2
  1518. package/server/api/workshop/dcw/runs/[id]/close.post.ts +7 -1
  1519. package/server/api/workshop/dcw/templates/[key].delete.ts +14 -14
  1520. package/server/api/workshop/dcw/templates/[key].patch.ts +16 -16
  1521. package/server/api/workshop/dcw/templates/index.post.ts +15 -15
  1522. package/server/api/workshop/dcw/test-driver.post.ts +8 -3
  1523. package/server/api/workshop/device-twins/[id].delete.ts +25 -25
  1524. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -25
  1525. package/server/api/workshop/eda/templates/[id].delete.ts +14 -14
  1526. package/server/api/workshop/eda/templates/[id].get.ts +15 -15
  1527. package/server/api/workshop/eda/templates/[id].patch.ts +20 -20
  1528. package/server/api/workshop/eda/templates/index.get.ts +11 -11
  1529. package/server/api/workshop/eda/templates/index.post.ts +20 -20
  1530. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -41
  1531. package/server/api/workshop/exp/confirmations/index.get.ts +25 -25
  1532. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -16
  1533. package/server/api/workshop/hitl/respond.post.ts +94 -94
  1534. package/server/api/workshop/mes/secrets/[ref].delete.ts +31 -0
  1535. package/server/api/workshop/mes/secrets/index.get.ts +13 -0
  1536. package/server/api/workshop/mes/secrets/index.put.ts +39 -0
  1537. package/server/api/workshop/notifications/index.get.ts +60 -60
  1538. package/server/api/workshop/notifications/read.post.ts +31 -31
  1539. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -24
  1540. package/server/api/workshop/plugins/[name]/disable.post.ts +21 -21
  1541. package/server/api/workshop/plugins/[name]/enable.post.ts +21 -21
  1542. package/server/api/workshop/plugins/[name]/index.get.ts +14 -14
  1543. package/server/api/workshop/schedules/[id]/run.post.ts +15 -15
  1544. package/server/api/workshop/schedules/[id]/runs.get.ts +15 -15
  1545. package/server/api/workshop/schedules/[id].delete.ts +14 -14
  1546. package/server/api/workshop/schedules/[id].get.ts +13 -13
  1547. package/server/api/workshop/schedules/[id].patch.ts +29 -29
  1548. package/server/api/workshop/schedules/index.get.ts +12 -12
  1549. package/server/api/workshop/schedules/index.post.ts +32 -32
  1550. package/server/api/workshop/tasks/[id]/reassign.post.ts +32 -32
  1551. package/server/api/workshop/tasks/[id]/update.post.ts +35 -35
  1552. package/server/api/workshop/teams/[id]/plugins/index.get.ts +36 -36
  1553. package/server/api/workshop/teams/[id]/plugins/index.put.ts +42 -42
  1554. package/server/api/workshop/ws/audience.ts +56 -56
  1555. package/server/api/workshop/ws/db-buffer.ts +68 -68
  1556. package/server/api/workshop/ws/event-mapping.ts +47 -47
  1557. package/server/api/workshop/ws/handlers.ts +132 -132
  1558. package/server/api/workshop/ws/hub.ts +134 -133
  1559. package/server/api/workshop/ws/index.ts +23 -23
  1560. package/server/api/workshop/ws/notification-uplink.ts +77 -77
  1561. package/server/api/workshop/ws/shared.ts +94 -94
  1562. package/server/api/workshop/ws/streams.ts +146 -146
  1563. package/server/middleware/00-security-headers.ts +38 -38
  1564. package/server/middleware/01-rate-guard.ts +101 -101
  1565. package/server/plugins/01-instance-guard.ts +82 -0
  1566. package/server/plugins/aml-twin-worker.ts +32 -32
  1567. package/server/plugins/daq.ts +40 -8
  1568. package/server/plugins/dev-stability-guard.ts +42 -42
  1569. package/server/plugins/workshop.ts +12 -0
  1570. package/server/plugins-builtin/diag-bridge/host/constants.mjs +25 -25
  1571. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -104
  1572. package/server/plugins-builtin/diag-bridge/host/index.mjs +15 -15
  1573. package/server/plugins-builtin/diag-bridge/host/intents.mjs +62 -62
  1574. package/server/plugins-builtin/diag-bridge/host/snapshot.mjs +93 -93
  1575. package/server/plugins-builtin/diag-bridge/index.mjs +9 -9
  1576. package/server/plugins-builtin/serial-bridge/client.mjs +211 -211
  1577. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -409
  1578. package/server/plugins-builtin/serial-bridge/i18n.json +62 -62
  1579. package/server/plugins-builtin/serial-bridge/index.mjs +247 -247
  1580. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -208
  1581. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -168
  1582. package/server/services/system-config/contracts.ts +29 -29
  1583. package/server/services/system-config/dispose.ts +19 -19
  1584. package/server/services/system-config/facade.ts +26 -26
  1585. package/server/services/system-config/groups.ts +108 -108
  1586. package/server/services/system-config/index.ts +21 -21
  1587. package/server/services/system-config/init.ts +26 -26
  1588. package/server/services/system-config/mutate.ts +103 -103
  1589. package/server/services/system-config/plugins.ts +104 -104
  1590. package/server/services/system-config/snapshot.ts +59 -59
  1591. package/server/services/system-config/state.ts +79 -79
  1592. package/server/services/system-config/types.ts +58 -58
  1593. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +1 -0
  1594. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +14 -0
  1595. package/server/services/workshop/agents/adapters/line-spawn.ts +24 -1
  1596. package/server/services/workshop/agents/adapters/omp-rpc-client/api.ts +111 -111
  1597. package/server/services/workshop/agents/adapters/omp-rpc-client/contracts.ts +22 -22
  1598. package/server/services/workshop/agents/adapters/omp-rpc-client/facade.ts +7 -7
  1599. package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +18 -0
  1600. package/server/services/workshop/agents/adapters/omp-rpc-client/helpers.ts +38 -38
  1601. package/server/services/workshop/agents/adapters/omp-rpc-client/index.ts +25 -25
  1602. package/server/services/workshop/agents/adapters/omp-rpc-client/start.ts +70 -70
  1603. package/server/services/workshop/agents/adapters/omp-rpc-client/state.ts +65 -65
  1604. package/server/services/workshop/agents/adapters/omp-rpc-client/stdout.ts +92 -92
  1605. package/server/services/workshop/agents/adapters/omp-rpc-client/usage.ts +47 -47
  1606. package/server/services/workshop/agents/agent-badge.ts +38 -38
  1607. package/server/services/workshop/agents/agent-dto.ts +54 -0
  1608. package/server/services/workshop/agents/binding-authz.ts +60 -60
  1609. package/server/services/workshop/agents/binding-mode.ts +51 -51
  1610. package/server/services/workshop/agents/codex-agent/client.ts +170 -170
  1611. package/server/services/workshop/agents/codex-agent/core.ts +119 -119
  1612. package/server/services/workshop/agents/codex-agent/facade.ts +8 -8
  1613. package/server/services/workshop/agents/codex-agent/helpers.ts +13 -13
  1614. package/server/services/workshop/agents/codex-agent/hitl.ts +138 -138
  1615. package/server/services/workshop/agents/codex-agent/index.ts +14 -14
  1616. package/server/services/workshop/agents/codex-agent/turn.ts +367 -367
  1617. package/server/services/workshop/agents/codex-agent/types.ts +42 -42
  1618. package/server/services/workshop/agents/execution-mode.ts +90 -0
  1619. package/server/services/workshop/agents/harness-process.ts +3 -3
  1620. package/server/services/workshop/agents/harness-spawn-policy.ts +114 -0
  1621. package/server/services/workshop/agents/harness-terminal/api.ts +197 -197
  1622. package/server/services/workshop/agents/harness-terminal/index.ts +17 -17
  1623. package/server/services/workshop/agents/harness-terminal/io.ts +120 -120
  1624. package/server/services/workshop/agents/harness-terminal/park.ts +55 -55
  1625. package/server/services/workshop/agents/harness-terminal/sanitize.ts +98 -98
  1626. package/server/services/workshop/agents/harness-terminal/session.ts +124 -124
  1627. package/server/services/workshop/agents/harness-terminal/shared.ts +74 -74
  1628. package/server/services/workshop/agents/hitl-capabilities.ts +312 -312
  1629. package/server/services/workshop/agents/hitl-decision/answers.ts +32 -32
  1630. package/server/services/workshop/agents/hitl-decision/decide.ts +268 -268
  1631. package/server/services/workshop/agents/hitl-decision/payload.ts +45 -45
  1632. package/server/services/workshop/agents/hitl-decision/shared.ts +108 -108
  1633. package/server/services/workshop/agents/hitl-decision/visibility.ts +94 -94
  1634. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +42 -13
  1635. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +38 -0
  1636. package/server/services/workshop/agents/host-tool-bridge/index.ts +1 -1
  1637. package/server/services/workshop/agents/host-tool-bridge/per-agent.ts +27 -11
  1638. package/server/services/workshop/agents/host-tool-bridge/tools/progress.ts +84 -84
  1639. package/server/services/workshop/agents/host-tool-bridge/tools/tasks.ts +1 -1
  1640. package/server/services/workshop/agents/host-tool-bridge/tools/team-delegation.ts +108 -104
  1641. package/server/services/workshop/agents/host-tool-bridge/tools/team.ts +70 -70
  1642. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -131
  1643. package/server/services/workshop/agents/industrial/audit-query.ts +66 -66
  1644. package/server/services/workshop/agents/industrial/daq-export.ts +9 -8
  1645. package/server/services/workshop/agents/industrial/daq-tools.ts +43 -6
  1646. package/server/services/workshop/agents/industrial/dcw-tools.ts +28 -6
  1647. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -104
  1648. package/server/services/workshop/agents/industrial/grant-guard.ts +52 -9
  1649. package/server/services/workshop/agents/industrial/ops-tools.ts +101 -21
  1650. package/server/services/workshop/agents/industrial/param-tools.ts +69 -69
  1651. package/server/services/workshop/agents/industrial/recipe-gate.ts +92 -21
  1652. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
  1653. package/server/services/workshop/agents/industrial/tool-verify-legacy-specs.ts +2 -2
  1654. package/server/services/workshop/agents/industrial/tool-verify.ts +31 -2
  1655. package/server/services/workshop/agents/industrial-context.ts +160 -83
  1656. package/server/services/workshop/agents/node-bindings.repo.ts +208 -207
  1657. package/server/services/workshop/agents/node-delegation.ts +204 -159
  1658. package/server/services/workshop/agents/omp-agent/core.ts +146 -146
  1659. package/server/services/workshop/agents/omp-agent/facade.ts +8 -8
  1660. package/server/services/workshop/agents/omp-agent/helpers.ts +37 -37
  1661. package/server/services/workshop/agents/omp-agent/index.ts +16 -16
  1662. package/server/services/workshop/agents/omp-agent/supervision-history.ts +38 -0
  1663. package/server/services/workshop/agents/omp-agent/tools-steer.ts +18 -1
  1664. package/server/services/workshop/agents/omp-agent/types.ts +45 -45
  1665. package/server/services/workshop/agents/opencode-agent/core.ts +77 -77
  1666. package/server/services/workshop/agents/opencode-agent/facade.ts +8 -8
  1667. package/server/services/workshop/agents/opencode-agent/helpers.ts +29 -29
  1668. package/server/services/workshop/agents/opencode-agent/hitl.ts +113 -113
  1669. package/server/services/workshop/agents/opencode-agent/index.ts +16 -16
  1670. package/server/services/workshop/agents/opencode-agent/lifecycle.ts +44 -44
  1671. package/server/services/workshop/agents/opencode-agent/server.ts +244 -244
  1672. package/server/services/workshop/agents/opencode-agent/turn.ts +278 -278
  1673. package/server/services/workshop/agents/opencode-agent/types.ts +54 -54
  1674. package/server/services/workshop/agents/prompt-i18n.ts +67 -0
  1675. package/server/services/workshop/agents/tool-approvals.ts +23 -0
  1676. package/server/services/workshop/agents/tool-classes.ts +44 -44
  1677. package/server/services/workshop/agents/tool-reference-spec.ts +3 -0
  1678. package/server/services/workshop/aml/clean.ts +120 -120
  1679. package/server/services/workshop/aml/entity.ts +367 -367
  1680. package/server/services/workshop/aml/job-orchestrator/broadcast.ts +37 -37
  1681. package/server/services/workshop/aml/job-orchestrator/control.ts +94 -94
  1682. package/server/services/workshop/aml/job-orchestrator/failure.ts +96 -96
  1683. package/server/services/workshop/aml/job-orchestrator/index.ts +22 -22
  1684. package/server/services/workshop/aml/job-orchestrator/process.ts +101 -101
  1685. package/server/services/workshop/aml/job-orchestrator/shared.ts +53 -53
  1686. package/server/services/workshop/aml/job-orchestrator/status.ts +20 -20
  1687. package/server/services/workshop/aml/job-orchestrator/tick.ts +37 -37
  1688. package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1689. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1690. package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
  1691. package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1692. package/server/services/workshop/aml/python/train-example.py +92 -92
  1693. package/server/services/workshop/aml/runtime.ts +137 -137
  1694. package/server/services/workshop/aml/stats.ts +140 -140
  1695. package/server/services/workshop/aml/twin/calibration-worker.ts +150 -150
  1696. package/server/services/workshop/aml/twin/channel-profile.ts +12 -8
  1697. package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -332
  1698. package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -185
  1699. package/server/services/workshop/aml/twin/prompt-composer.ts +143 -143
  1700. package/server/services/workshop/aml/twin/training-plans.ts +260 -260
  1701. package/server/services/workshop/aml/twin/write-guard.ts +19 -19
  1702. package/server/services/workshop/assets/character-asset.repo.ts +1 -1
  1703. package/server/services/workshop/assets/device-twin.repo.ts +1 -1
  1704. package/server/services/workshop/daq/bus/index.ts +12 -5
  1705. package/server/services/workshop/daq/bus/mqtt.adapter.ts +12 -0
  1706. package/server/services/workshop/daq/daq-controller/contracts.ts +39 -39
  1707. package/server/services/workshop/daq/daq-controller/crud.ts +5 -3
  1708. package/server/services/workshop/daq/daq-controller/driver-probe.ts +7 -4
  1709. package/server/services/workshop/daq/daq-controller/facade.ts +28 -28
  1710. package/server/services/workshop/daq/daq-controller/frames.ts +137 -137
  1711. package/server/services/workshop/daq/daq-controller/helpers.ts +52 -52
  1712. package/server/services/workshop/daq/daq-controller/index.ts +22 -22
  1713. package/server/services/workshop/daq/daq-controller/ingest.ts +32 -10
  1714. package/server/services/workshop/daq/daq-controller/push.ts +357 -0
  1715. package/server/services/workshop/daq/daq-controller/runtime-control.ts +8 -0
  1716. package/server/services/workshop/daq/daq-controller/state.ts +11 -3
  1717. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +13 -3
  1718. package/server/services/workshop/daq/daq-controller/tsdb-row.ts +48 -0
  1719. package/server/services/workshop/daq/daq-controller/tsdb-twin.ts +25 -2
  1720. package/server/services/workshop/daq/daq-controller/views.ts +5 -2
  1721. package/server/services/workshop/daq/daq-node.repo.ts +10 -7
  1722. package/server/services/workshop/daq/daq-node.ts +2 -0
  1723. package/server/services/workshop/daq/daq-runtime.ts +10 -2
  1724. package/server/services/workshop/daq/decoders.ts +77 -0
  1725. package/server/services/workshop/daq/drivers/http.ts +33 -6
  1726. package/server/services/workshop/daq/drivers/index.ts +3 -3
  1727. package/server/services/workshop/daq/drivers/mock.ts +130 -130
  1728. package/server/services/workshop/daq/drivers/modbus-rtu.ts +67 -67
  1729. package/server/services/workshop/daq/drivers/modbus-tcp.ts +310 -307
  1730. package/server/services/workshop/daq/drivers/mqtt-decode.ts +292 -0
  1731. package/server/services/workshop/daq/drivers/mqtt.ts +417 -94
  1732. package/server/services/workshop/daq/drivers/opcua.ts +227 -227
  1733. package/server/services/workshop/daq/drivers/registry.ts +5 -4
  1734. package/server/services/workshop/daq/drivers/s7-stub.ts +29 -29
  1735. package/server/services/workshop/daq/drivers/shared.ts +30 -1
  1736. package/server/services/workshop/daq/export-limits.ts +38 -0
  1737. package/server/services/workshop/daq/frames.ts +8 -2
  1738. package/server/services/workshop/daq/host-bindings.ts +71 -71
  1739. package/server/services/workshop/daq/host-ports.ts +65 -65
  1740. package/server/services/workshop/daq/infra.ts +13 -0
  1741. package/server/services/workshop/daq/ingest-policy.ts +24 -1
  1742. package/server/services/workshop/daq/plugin-bridge.ts +24 -2
  1743. package/server/services/workshop/daq/storage/latest-window.ts +132 -0
  1744. package/server/services/workshop/daq/storage/timescale.adapter.ts +42 -3
  1745. package/server/services/workshop/db/aml-team-seeds.ts +118 -118
  1746. package/server/services/workshop/db/backup-registry.ts +33 -33
  1747. package/server/services/workshop/db/channel-member.repo.ts +122 -122
  1748. package/server/services/workshop/db/channel.repo.ts +203 -203
  1749. package/server/services/workshop/db/chat-message.repo.ts +233 -233
  1750. package/server/services/workshop/db/database/index.ts +18 -18
  1751. package/server/services/workshop/db/database/json.ts +14 -14
  1752. package/server/services/workshop/db/database/migrations.ts +91 -68
  1753. package/server/services/workshop/db/database/open.ts +3 -1
  1754. package/server/services/workshop/db/database/schema.ts +1 -0
  1755. package/server/services/workshop/db/database/seed-data.ts +60 -60
  1756. package/server/services/workshop/db/hitl-request.repo.ts +221 -221
  1757. package/server/services/workshop/db/notification.repo.ts +199 -199
  1758. package/server/services/workshop/db/readonly.ts +30 -30
  1759. package/server/services/workshop/db/scheduled-task.repo.ts +235 -235
  1760. package/server/services/workshop/db/transaction.ts +72 -72
  1761. package/server/services/workshop/dcw/dcw-controller/actuation.ts +6 -0
  1762. package/server/services/workshop/dcw/dcw-controller/contracts.ts +16 -16
  1763. package/server/services/workshop/dcw/dcw-controller/control.ts +78 -78
  1764. package/server/services/workshop/dcw/dcw-controller/crud.ts +27 -2
  1765. package/server/services/workshop/dcw/dcw-controller/facade.ts +19 -19
  1766. package/server/services/workshop/dcw/dcw-controller/index.ts +22 -22
  1767. package/server/services/workshop/dcw/dcw-controller/lines.ts +14 -3
  1768. package/server/services/workshop/dcw/dcw-controller/params.ts +97 -97
  1769. package/server/services/workshop/dcw/dcw-controller/products.ts +103 -103
  1770. package/server/services/workshop/dcw/dcw-controller/recipes.ts +63 -5
  1771. package/server/services/workshop/dcw/dcw-controller/write-audit.ts +1 -1
  1772. package/server/services/workshop/dcw/dcw-recipe.repo.ts +10 -1
  1773. package/server/services/workshop/dcw/dcw-runtime.ts +37 -14
  1774. package/server/services/workshop/dcw/dcw-templates.ts +136 -136
  1775. package/server/services/workshop/dcw/drivers/http.ts +41 -15
  1776. package/server/services/workshop/dcw/drivers/mes-rest.ts +14 -51
  1777. package/server/services/workshop/dcw/drivers/mqtt.ts +58 -7
  1778. package/server/services/workshop/dcw/drivers/shared.ts +65 -6
  1779. package/server/services/workshop/dcw/param-conversion.ts +78 -78
  1780. package/server/services/workshop/dcw/param-map.repo.ts +349 -349
  1781. package/server/services/workshop/dcw/plugin-bridge.ts +45 -45
  1782. package/server/services/workshop/dcw/recipe-op-anchor.ts +28 -0
  1783. package/server/services/workshop/dcw/recipe-rollback-manager/contracts.ts +26 -26
  1784. package/server/services/workshop/dcw/recipe-rollback-manager/facade.ts +13 -13
  1785. package/server/services/workshop/dcw/recipe-rollback-manager/helpers.ts +30 -30
  1786. package/server/services/workshop/dcw/recipe-rollback-manager/index.ts +17 -17
  1787. package/server/services/workshop/dcw/recipe-rollback-manager/internal.ts +33 -33
  1788. package/server/services/workshop/dcw/recipe-rollback-manager/judge.ts +52 -52
  1789. package/server/services/workshop/dcw/recipe-rollback-manager/lock.ts +137 -137
  1790. package/server/services/workshop/dcw/recipe-rollback-manager/rollback.ts +16 -2
  1791. package/server/services/workshop/dcw/recipe-rollback-manager/state.ts +21 -21
  1792. package/server/services/workshop/dcw/recipe-rollback-manager/sweep.ts +20 -0
  1793. package/server/services/workshop/dcw/recipe-rollback-manager/types.ts +3 -3
  1794. package/server/services/workshop/dcw/recipe-rollback-manager/views.ts +214 -214
  1795. package/server/services/workshop/eda/chart-repo.ts +18 -1
  1796. package/server/services/workshop/eda/data-export.ts +3 -3
  1797. package/server/services/workshop/eda/data-query.ts +4 -1
  1798. package/server/services/workshop/eda/template-repo.ts +101 -101
  1799. package/server/services/workshop/exp/exp-collector.ts +275 -275
  1800. package/server/services/workshop/exp/exp-state.repo.ts +339 -339
  1801. package/server/services/workshop/line-scope.ts +80 -0
  1802. package/server/services/workshop/mes/mes-controller.ts +1155 -1155
  1803. package/server/services/workshop/mes/mes-hook.ts +567 -567
  1804. package/server/services/workshop/mes/mes-secrets.repo.ts +119 -0
  1805. package/server/services/workshop/net/secret-auth.ts +84 -0
  1806. package/server/services/workshop/net/ssrf.ts +74 -0
  1807. package/server/services/workshop/ontology/subgraph.core.ts +300 -300
  1808. package/server/services/workshop/ontology/subgraph.service.ts +113 -113
  1809. package/server/services/workshop/optimization/access.ts +24 -30
  1810. package/server/services/workshop/optimization/dispatch.service.ts +18 -2
  1811. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
  1812. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
  1813. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
  1814. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1815. package/server/services/workshop/permissions.ts +2 -0
  1816. package/server/services/workshop/plugins/host/api.mjs +90 -90
  1817. package/server/services/workshop/plugins/host/config.mjs +135 -135
  1818. package/server/services/workshop/plugins/host/index.mjs +23 -23
  1819. package/server/services/workshop/plugins/host/init.mjs +109 -109
  1820. package/server/services/workshop/plugins/host/load.mjs +14 -1
  1821. package/server/services/workshop/plugins/host/reload.mjs +6 -0
  1822. package/server/services/workshop/plugins/host/rollback.mjs +72 -72
  1823. package/server/services/workshop/plugins/host/state.mjs +54 -54
  1824. package/server/services/workshop/plugins/host/toggle.mjs +64 -64
  1825. package/server/services/workshop/plugins/host.mjs +9 -9
  1826. package/server/services/workshop/prompts/loader.ts +45 -8
  1827. package/server/services/workshop/runtime/agent-runtime/facade.ts +7 -7
  1828. package/server/services/workshop/runtime/agent-runtime/helpers.ts +18 -18
  1829. package/server/services/workshop/runtime/agent-runtime/index.ts +19 -19
  1830. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +137 -137
  1831. package/server/services/workshop/runtime/agent-runtime/message.ts +17 -0
  1832. package/server/services/workshop/runtime/agent-runtime/state.ts +9 -3
  1833. package/server/services/workshop/runtime/agent-runtime/types.ts +2 -1
  1834. package/server/services/workshop/runtime/channel-runtime.ts +3 -1
  1835. package/server/services/workshop/runtime/chat-mention.ts +164 -164
  1836. package/server/services/workshop/runtime/chat-projection.ts +246 -246
  1837. package/server/services/workshop/runtime/mailbox.ts +6 -3
  1838. package/server/services/workshop/runtime/manager/a2a.ts +4 -2
  1839. package/server/services/workshop/runtime/manager/admin-agents.ts +268 -268
  1840. package/server/services/workshop/runtime/manager/admin-channel.ts +6 -1
  1841. package/server/services/workshop/runtime/manager/bus.ts +182 -182
  1842. package/server/services/workshop/runtime/manager/channel-template-constants.ts +20 -20
  1843. package/server/services/workshop/runtime/manager/chat-reply.ts +181 -181
  1844. package/server/services/workshop/runtime/manager/chat.ts +386 -384
  1845. package/server/services/workshop/runtime/manager/facade.ts +24 -24
  1846. package/server/services/workshop/runtime/manager/helpers.ts +119 -119
  1847. package/server/services/workshop/runtime/manager/host-tools.ts +1 -1
  1848. package/server/services/workshop/runtime/manager/index.ts +42 -42
  1849. package/server/services/workshop/runtime/manager/internal.ts +73 -73
  1850. package/server/services/workshop/runtime/manager/notifications.ts +108 -108
  1851. package/server/services/workshop/runtime/manager/runtime-wiring.ts +31 -19
  1852. package/server/services/workshop/runtime/manager/state.ts +43 -1
  1853. package/server/services/workshop/runtime/manager/teams.ts +148 -148
  1854. package/server/services/workshop/runtime/memory/contracts.ts +18 -18
  1855. package/server/services/workshop/runtime/memory/facade.ts +10 -10
  1856. package/server/services/workshop/runtime/memory/helpers.ts +196 -196
  1857. package/server/services/workshop/runtime/memory/index.ts +27 -27
  1858. package/server/services/workshop/runtime/memory/score.ts +33 -33
  1859. package/server/services/workshop/runtime/memory/state.ts +40 -40
  1860. package/server/services/workshop/runtime/monitor.ts +3 -3
  1861. package/server/services/workshop/runtime/permission-scope.ts +21 -0
  1862. package/server/services/workshop/runtime/platform-notice.ts +113 -113
  1863. package/server/services/workshop/runtime/schedule-runtime.ts +347 -347
  1864. package/server/services/workshop/runtime/scheduler-loop/contracts.ts +29 -29
  1865. package/server/services/workshop/runtime/scheduler-loop/facade.ts +7 -7
  1866. package/server/services/workshop/runtime/scheduler-loop/helpers.ts +14 -14
  1867. package/server/services/workshop/runtime/scheduler-loop/index.ts +16 -16
  1868. package/server/services/workshop/runtime/scheduler-loop/tick.ts +16 -4
  1869. package/server/services/workshop/runtime/task-engine/facade.ts +7 -7
  1870. package/server/services/workshop/runtime/task-engine/index.ts +15 -15
  1871. package/server/services/workshop/runtime/task-engine/types.ts +3 -3
  1872. package/server/services/workshop/runtime/user-notification-hub.ts +192 -192
  1873. package/server/services/workshop/scene-events.ts +19 -0
  1874. package/server/services/workshop/tools/types.ts +1 -0
  1875. package/server/types/pg.d.ts +49 -49
  1876. package/server/utils/approval-gate.ts +67 -67
  1877. package/server/utils/mojibake-guard.ts +29 -29
  1878. package/server/utils/stability-severity.ts +77 -77
  1879. package/shared/config/groups.mjs +241 -241
  1880. package/shared/config/schema.json +2 -0
  1881. package/shared/daq-protocol.ts +54 -7
  1882. package/shared/dcw-protocol/catalog.ts +19 -7
  1883. package/shared/dcw-protocol/closed-loop.ts +2 -0
  1884. package/shared/lru.mjs +97 -97
  1885. package/tui/README.md +74 -74
  1886. package/tui/aw-tui.mjs +445 -445
  1887. package/tui/commands/index.mjs +287 -287
  1888. package/tui/components/chat-log.mjs +42 -42
  1889. package/tui/components/monitor-pane.mjs +39 -39
  1890. package/tui/components/root.mjs +53 -53
  1891. package/tui/components/status-bar.mjs +33 -33
  1892. package/tui/lib/api.mjs +82 -82
  1893. package/tui/lib/pickers.mjs +121 -121
  1894. package/tui/lib/reducers.mjs +218 -218
  1895. package/tui/lib/state.mjs +86 -86
  1896. package/tui/lib/virtual-terminal.mjs +48 -48
  1897. package/tui/lib/ws.mjs +125 -125
  1898. package/tui/theme.mjs +38 -38
  1899. package/.output/public/_nuxt/0qvcO_KM2.js +0 -1
  1900. package/.output/public/_nuxt/2Kwo_j9G2.js +0 -1
  1901. package/.output/public/_nuxt/39W1CH-l2.js +0 -1
  1902. package/.output/public/_nuxt/7xbYPfY6.js +0 -1
  1903. package/.output/public/_nuxt/8SZLbrI42.js +0 -1
  1904. package/.output/public/_nuxt/ATAvN55g.js +0 -1
  1905. package/.output/public/_nuxt/B3eCVqcT2.js +0 -1
  1906. package/.output/public/_nuxt/B4JlRHBB2.js +0 -1
  1907. package/.output/public/_nuxt/B4iJT5PX2.js +0 -2
  1908. package/.output/public/_nuxt/B9qIhT7k2.js +0 -1
  1909. package/.output/public/_nuxt/BE9oKpOt.js +0 -1
  1910. package/.output/public/_nuxt/BNUaS1jv.js +0 -20
  1911. package/.output/public/_nuxt/BVGzwAxr2.js +0 -16
  1912. package/.output/public/_nuxt/BY3Lbz3h.js +0 -1
  1913. package/.output/public/_nuxt/BbACaREb.js +0 -1
  1914. package/.output/public/_nuxt/BcosvNXb2.js +0 -1
  1915. package/.output/public/_nuxt/BhJA-E372.js +0 -1
  1916. package/.output/public/_nuxt/BiZWwdcD2.js +0 -1
  1917. package/.output/public/_nuxt/Bq-tmkst.js +0 -1
  1918. package/.output/public/_nuxt/Bq8YzXzs2.js +0 -1
  1919. package/.output/public/_nuxt/BxxpJxZf2.js +0 -1
  1920. package/.output/public/_nuxt/C1-SuwUN.js +0 -1
  1921. package/.output/public/_nuxt/C2Yp-B8m.js +0 -1
  1922. package/.output/public/_nuxt/C5OStZJ62.js +0 -1
  1923. package/.output/public/_nuxt/CDL30A2z2.js +0 -1
  1924. package/.output/public/_nuxt/CEvJu-xI.js +0 -1
  1925. package/.output/public/_nuxt/CT4bi_Y4.js +0 -1
  1926. package/.output/public/_nuxt/CZYNy60j2.js +0 -1
  1927. package/.output/public/_nuxt/CeCSjB9O2.js +0 -1
  1928. package/.output/public/_nuxt/Cf7ER7e2.js +0 -1
  1929. package/.output/public/_nuxt/CjF4QY9h.js +0 -1
  1930. package/.output/public/_nuxt/Cot5VNae.js +0 -1
  1931. package/.output/public/_nuxt/Crf8_Ad02.js +0 -1
  1932. package/.output/public/_nuxt/D1C6qtS12.js +0 -1
  1933. package/.output/public/_nuxt/D37gODe0.js +0 -1
  1934. package/.output/public/_nuxt/D8HQPtm62.js +0 -1
  1935. package/.output/public/_nuxt/D9O4L4jK.js +0 -1
  1936. package/.output/public/_nuxt/D9tNM-1a.js +0 -9
  1937. package/.output/public/_nuxt/DAug2CPf.js +0 -21
  1938. package/.output/public/_nuxt/DPnjnDtg.js +0 -36
  1939. package/.output/public/_nuxt/DWe6BMlp2.js +0 -1
  1940. package/.output/public/_nuxt/DbhTN7-T.js +0 -47
  1941. package/.output/public/_nuxt/DdyE0ylS.js +0 -1
  1942. package/.output/public/_nuxt/DgGzwjAr2.js +0 -2
  1943. package/.output/public/_nuxt/DgTqKyYF2.js +0 -1
  1944. package/.output/public/_nuxt/DhjgWrB62.js +0 -1
  1945. package/.output/public/_nuxt/DiWcX4gj.js +0 -1
  1946. package/.output/public/_nuxt/DkRozlDP2.js +0 -1
  1947. package/.output/public/_nuxt/DlS-SkQ42.js +0 -1
  1948. package/.output/public/_nuxt/DmHp9yQ3.js +0 -1
  1949. package/.output/public/_nuxt/DqxBCeDe.js +0 -1
  1950. package/.output/public/_nuxt/DxH5focQ.js +0 -1
  1951. package/.output/public/_nuxt/Dyr3LPGL.js +0 -1
  1952. package/.output/public/_nuxt/FsRVXpyF2.js +0 -1
  1953. package/.output/public/_nuxt/Iub61dX9.js +0 -1
  1954. package/.output/public/_nuxt/MC_i34H42.js +0 -1
  1955. package/.output/public/_nuxt/MmlCf-EZ.js +0 -1
  1956. package/.output/public/_nuxt/OmpTerminalPanel.DMWgGwDs.css +0 -1
  1957. package/.output/public/_nuxt/PluginSlot.BqBzLD4T.css +0 -1
  1958. package/.output/public/_nuxt/Q-JpBT03.js +0 -1
  1959. package/.output/public/_nuxt/TownView.Cn8SPG7S.css +0 -1
  1960. package/.output/public/_nuxt/TugRY_4O.js +0 -1
  1961. package/.output/public/_nuxt/WybiLTow2.js +0 -8
  1962. package/.output/public/_nuxt/Zn0BZpf0.js +0 -3
  1963. package/.output/public/_nuxt/_id_.Be5JaH-P.css +0 -1
  1964. package/.output/public/_nuxt/_wsId_.p_vAYtTp.css +0 -1
  1965. package/.output/public/_nuxt/agents.CRomddYR.css +0 -1
  1966. package/.output/public/_nuxt/aml.DgOMpDpv.css +0 -1
  1967. package/.output/public/_nuxt/b7UcqLKi.js +0 -1
  1968. package/.output/public/_nuxt/board.Bo35UR0e.css +0 -1
  1969. package/.output/public/_nuxt/builds/meta/8a151630-3285-41b8-a1e5-063fee2002ac.json +0 -1
  1970. package/.output/public/_nuxt/default.CpAx70gC.css +0 -1
  1971. package/.output/public/_nuxt/geMze5qw.js +0 -1
  1972. package/.output/public/_nuxt/hCN555XP2.js +0 -1
  1973. package/.output/public/_nuxt/hlfahYxK.js +0 -1
  1974. package/.output/public/_nuxt/logs.DcSvz6vi.css +0 -1
  1975. package/.output/public/_nuxt/monitor.OoNTwfMJ.css +0 -1
  1976. package/.output/public/_nuxt/ontology.D4P756Tc.css +0 -1
  1977. package/.output/public/_nuxt/operations.C48ggFa5.css +0 -1
  1978. package/.output/public/_nuxt/pages.Dpa28tJW.css +0 -1
  1979. package/.output/public/_nuxt/permissions.CrV-4t-6.css +0 -1
  1980. package/.output/public/_nuxt/pipeline.NFs5z5V-.css +0 -1
  1981. package/.output/public/_nuxt/rcdmiszh2.js +0 -1
  1982. package/.output/public/_nuxt/schedules.DYWOjGHm.css +0 -1
  1983. package/.output/public/_nuxt/studio.CjmUr8P7.css +0 -1
  1984. package/.output/public/_nuxt/teams.DEJoJ4QV.css +0 -1
  1985. package/.output/public/_nuxt/toG_qAMH.js +0 -1
  1986. package/.output/public/_nuxt/tokens.DKZWCP5v.css +0 -1
  1987. package/.output/public/_nuxt/tools.DP-nsTli.css +0 -1
  1988. package/.output/public/_nuxt/uomnHjhM.js +0 -1
  1989. package/.output/public/_nuxt/v77qozuJ2.js +0 -1
  1990. package/.output/public/_nuxt/v7cV7hJa.js +0 -1
  1991. package/.output/public/_nuxt/wK6Pp4Zc2.js +0 -2
  1992. package/.output/public/_nuxt/we7-sMSo2.js +0 -1
  1993. package/.output/public/_nuxt/workshop.PT1xhP8C.css +0 -1
  1994. package/.output/public/_nuxt/wxISMS1i.js +0 -1
  1995. package/.output/public/_nuxt/zy7efYKR.js +0 -1
  1996. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs +0 -704
  1997. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs.map +0 -1
  1998. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs +0 -77
  1999. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs.map +0 -1
  2000. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs +0 -889
  2001. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs.map +0 -1
  2002. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs +0 -131
  2003. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs.map +0 -1
  2004. package/.output/server/chunks/build/TownView-CcUPLqF1.mjs +0 -5960
  2005. package/.output/server/chunks/build/TownView-CcUPLqF1.mjs.map +0 -1
  2006. package/.output/server/chunks/build/_id_-AgACEyL6.mjs +0 -1922
  2007. package/.output/server/chunks/build/_id_-AgACEyL6.mjs.map +0 -1
  2008. package/.output/server/chunks/build/_id_-B3yCK2lD.mjs +0 -373
  2009. package/.output/server/chunks/build/_id_-B3yCK2lD.mjs.map +0 -1
  2010. package/.output/server/chunks/build/_wsId_-kcDriA4i.mjs +0 -13707
  2011. package/.output/server/chunks/build/_wsId_-kcDriA4i.mjs.map +0 -1
  2012. package/.output/server/chunks/build/agents-DRod4lTC.mjs +0 -1047
  2013. package/.output/server/chunks/build/agents-DRod4lTC.mjs.map +0 -1
  2014. package/.output/server/chunks/build/alert-CNGhs--Y.mjs +0 -260
  2015. package/.output/server/chunks/build/alert-CNGhs--Y.mjs.map +0 -1
  2016. package/.output/server/chunks/build/aml-B3Umz4DR.mjs +0 -729
  2017. package/.output/server/chunks/build/aml-B3Umz4DR.mjs.map +0 -1
  2018. package/.output/server/chunks/build/analysis-CMsMTMCg.mjs +0 -502
  2019. package/.output/server/chunks/build/analysis-CMsMTMCg.mjs.map +0 -1
  2020. package/.output/server/chunks/build/api-D-zkgkj-.mjs +0 -51
  2021. package/.output/server/chunks/build/api-D-zkgkj-.mjs.map +0 -1
  2022. package/.output/server/chunks/build/api-D3gy2e2q.mjs +0 -70
  2023. package/.output/server/chunks/build/api-D3gy2e2q.mjs.map +0 -1
  2024. package/.output/server/chunks/build/api-bn4OKkl_.mjs +0 -62
  2025. package/.output/server/chunks/build/api-bn4OKkl_.mjs.map +0 -1
  2026. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs +0 -46
  2027. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs.map +0 -1
  2028. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs +0 -70
  2029. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs.map +0 -1
  2030. package/.output/server/chunks/build/board-B2oYXGBy.mjs +0 -172
  2031. package/.output/server/chunks/build/board-B2oYXGBy.mjs.map +0 -1
  2032. package/.output/server/chunks/build/card-BECE6y_G.mjs +0 -922
  2033. package/.output/server/chunks/build/card-BECE6y_G.mjs.map +0 -1
  2034. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs +0 -950
  2035. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs.map +0 -1
  2036. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs +0 -429
  2037. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs.map +0 -1
  2038. package/.output/server/chunks/build/client-only-S7k53PIm.mjs +0 -42
  2039. package/.output/server/chunks/build/client-only-S7k53PIm.mjs.map +0 -1
  2040. package/.output/server/chunks/build/core-CRlsQhzd.mjs +0 -292
  2041. package/.output/server/chunks/build/core-CRlsQhzd.mjs.map +0 -1
  2042. package/.output/server/chunks/build/daq-DFQQOtcZ.mjs +0 -1210
  2043. package/.output/server/chunks/build/daq-DFQQOtcZ.mjs.map +0 -1
  2044. package/.output/server/chunks/build/data-Cl4wRZO6.mjs +0 -459
  2045. package/.output/server/chunks/build/data-Cl4wRZO6.mjs.map +0 -1
  2046. package/.output/server/chunks/build/dcw-8415S3Km.mjs +0 -467
  2047. package/.output/server/chunks/build/dcw-8415S3Km.mjs.map +0 -1
  2048. package/.output/server/chunks/build/default-DDRKP2Mb.mjs +0 -2246
  2049. package/.output/server/chunks/build/default-DDRKP2Mb.mjs.map +0 -1
  2050. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs +0 -401
  2051. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs.map +0 -1
  2052. package/.output/server/chunks/build/drawer-DwXxapMg.mjs +0 -822
  2053. package/.output/server/chunks/build/drawer-DwXxapMg.mjs.map +0 -1
  2054. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs +0 -12
  2055. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs.map +0 -1
  2056. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs +0 -530
  2057. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs.map +0 -1
  2058. package/.output/server/chunks/build/es-DXSEkmAm.mjs +0 -42
  2059. package/.output/server/chunks/build/es-DXSEkmAm.mjs.map +0 -1
  2060. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs +0 -2082
  2061. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs.map +0 -1
  2062. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs +0 -3543
  2063. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs.map +0 -1
  2064. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs +0 -192
  2065. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs.map +0 -1
  2066. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs +0 -120
  2067. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs.map +0 -1
  2068. package/.output/server/chunks/build/input-CJgB-RL6.mjs +0 -1705
  2069. package/.output/server/chunks/build/input-CJgB-RL6.mjs.map +0 -1
  2070. package/.output/server/chunks/build/input-number-CQKL42p_.mjs +0 -1027
  2071. package/.output/server/chunks/build/input-number-CQKL42p_.mjs.map +0 -1
  2072. package/.output/server/chunks/build/interval-DiAUqODq.mjs +0 -8
  2073. package/.output/server/chunks/build/interval-DiAUqODq.mjs.map +0 -1
  2074. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs +0 -6
  2075. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs.map +0 -1
  2076. package/.output/server/chunks/build/logs-C-dWpJ80.mjs +0 -381
  2077. package/.output/server/chunks/build/logs-C-dWpJ80.mjs.map +0 -1
  2078. package/.output/server/chunks/build/menu-xO8ocVtL.mjs +0 -1833
  2079. package/.output/server/chunks/build/menu-xO8ocVtL.mjs.map +0 -1
  2080. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs +0 -2216
  2081. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs.map +0 -1
  2082. package/.output/server/chunks/build/ontology-DoXAsa2y.mjs +0 -1416
  2083. package/.output/server/chunks/build/ontology-DoXAsa2y.mjs.map +0 -1
  2084. package/.output/server/chunks/build/operations-Ch6tZIKo.mjs +0 -278
  2085. package/.output/server/chunks/build/operations-Ch6tZIKo.mjs.map +0 -1
  2086. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs +0 -202
  2087. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs.map +0 -1
  2088. package/.output/server/chunks/build/pages-CQOfwKB4.mjs +0 -439
  2089. package/.output/server/chunks/build/pages-CQOfwKB4.mjs.map +0 -1
  2090. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs +0 -1330
  2091. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs.map +0 -1
  2092. package/.output/server/chunks/build/permissions-qmimwB0M.mjs +0 -649
  2093. package/.output/server/chunks/build/permissions-qmimwB0M.mjs.map +0 -1
  2094. package/.output/server/chunks/build/pipeline-eo2RWN3f.mjs +0 -226
  2095. package/.output/server/chunks/build/pipeline-eo2RWN3f.mjs.map +0 -1
  2096. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs +0 -269
  2097. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs.map +0 -1
  2098. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs +0 -333
  2099. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs.map +0 -1
  2100. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs +0 -77
  2101. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs.map +0 -1
  2102. package/.output/server/chunks/build/schedules-C2_x38gj.mjs +0 -7039
  2103. package/.output/server/chunks/build/schedules-C2_x38gj.mjs.map +0 -1
  2104. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs +0 -332
  2105. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs.map +0 -1
  2106. package/.output/server/chunks/build/select-CJb2XrQf.mjs +0 -3734
  2107. package/.output/server/chunks/build/select-CJb2XrQf.mjs.map +0 -1
  2108. package/.output/server/chunks/build/settings-Cz2Plds0.mjs +0 -944
  2109. package/.output/server/chunks/build/settings-Cz2Plds0.mjs.map +0 -1
  2110. package/.output/server/chunks/build/space-BByD-mFE.mjs +0 -107
  2111. package/.output/server/chunks/build/space-BByD-mFE.mjs.map +0 -1
  2112. package/.output/server/chunks/build/spin-XhbgGeLP.mjs +0 -313
  2113. package/.output/server/chunks/build/spin-XhbgGeLP.mjs.map +0 -1
  2114. package/.output/server/chunks/build/studio-CwYXl00G.mjs +0 -329
  2115. package/.output/server/chunks/build/studio-CwYXl00G.mjs.map +0 -1
  2116. package/.output/server/chunks/build/switch-DWcwVFxW.mjs +0 -374
  2117. package/.output/server/chunks/build/switch-DWcwVFxW.mjs.map +0 -1
  2118. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs +0 -7249
  2119. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs.map +0 -1
  2120. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs +0 -1838
  2121. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs.map +0 -1
  2122. package/.output/server/chunks/build/tag-CRW-anwy.mjs +0 -1010
  2123. package/.output/server/chunks/build/tag-CRW-anwy.mjs.map +0 -1
  2124. package/.output/server/chunks/build/teams-CwhFdcYn.mjs +0 -1160
  2125. package/.output/server/chunks/build/teams-CwhFdcYn.mjs.map +0 -1
  2126. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs +0 -992
  2127. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs.map +0 -1
  2128. package/.output/server/chunks/build/tools-C0YKragH.mjs +0 -487
  2129. package/.output/server/chunks/build/tools-C0YKragH.mjs.map +0 -1
  2130. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs +0 -888
  2131. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs.map +0 -1
  2132. package/.output/server/chunks/build/town-DLFB4SZl.mjs +0 -117
  2133. package/.output/server/chunks/build/town-DLFB4SZl.mjs.map +0 -1
  2134. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs +0 -120
  2135. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs.map +0 -1
  2136. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs +0 -71
  2137. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs.map +0 -1
  2138. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs +0 -112
  2139. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs.map +0 -1
  2140. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs +0 -140
  2141. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs.map +0 -1
  2142. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs +0 -88
  2143. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs.map +0 -1
  2144. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs +0 -79
  2145. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs.map +0 -1
  2146. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs +0 -188
  2147. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs.map +0 -1
  2148. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs +0 -86
  2149. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs.map +0 -1
  2150. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs +0 -251
  2151. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs.map +0 -1
  2152. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs +0 -90
  2153. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs.map +0 -1
  2154. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs +0 -80
  2155. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs.map +0 -1
  2156. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs +0 -126
  2157. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs.map +0 -1
  2158. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs +0 -120
  2159. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs.map +0 -1
  2160. package/.output/server/chunks/build/useDaqAddNode-D_1EBuR3.mjs +0 -141
  2161. package/.output/server/chunks/build/useDaqAddNode-D_1EBuR3.mjs.map +0 -1
  2162. package/.output/server/chunks/build/useDaqDetailBinding-j05iSApd.mjs +0 -72
  2163. package/.output/server/chunks/build/useDaqDetailBinding-j05iSApd.mjs.map +0 -1
  2164. package/.output/server/chunks/build/useDaqDetailFrames-BKciVJ78.mjs +0 -78
  2165. package/.output/server/chunks/build/useDaqDetailFrames-BKciVJ78.mjs.map +0 -1
  2166. package/.output/server/chunks/build/useDaqDetailHistory-DgemICkr.mjs +0 -166
  2167. package/.output/server/chunks/build/useDaqDetailHistory-DgemICkr.mjs.map +0 -1
  2168. package/.output/server/chunks/build/useDaqDetailNode-Cn7_og6t.mjs +0 -103
  2169. package/.output/server/chunks/build/useDaqDetailNode-Cn7_og6t.mjs.map +0 -1
  2170. package/.output/server/chunks/build/useDaqDetailParams-DX_vjFyK.mjs +0 -157
  2171. package/.output/server/chunks/build/useDaqDetailParams-DX_vjFyK.mjs.map +0 -1
  2172. package/.output/server/chunks/build/useDaqFilters-DMS4GN20.mjs +0 -224
  2173. package/.output/server/chunks/build/useDaqFilters-DMS4GN20.mjs.map +0 -1
  2174. package/.output/server/chunks/build/useDaqOptimizations-OPbdy5YB.mjs +0 -132
  2175. package/.output/server/chunks/build/useDaqOptimizations-OPbdy5YB.mjs.map +0 -1
  2176. package/.output/server/chunks/build/useDaqStream-CS1G6iro.mjs +0 -385
  2177. package/.output/server/chunks/build/useDaqStream-CS1G6iro.mjs.map +0 -1
  2178. package/.output/server/chunks/build/useDaqTemplates-DqhRYo88.mjs +0 -181
  2179. package/.output/server/chunks/build/useDaqTemplates-DqhRYo88.mjs.map +0 -1
  2180. package/.output/server/chunks/build/useDashboardData-CeaMjEA9.mjs +0 -139
  2181. package/.output/server/chunks/build/useDashboardData-CeaMjEA9.mjs.map +0 -1
  2182. package/.output/server/chunks/build/useDcwAddNode-Cytz_odQ.mjs +0 -217
  2183. package/.output/server/chunks/build/useDcwAddNode-Cytz_odQ.mjs.map +0 -1
  2184. package/.output/server/chunks/build/useDcwCards-BKCFqkRd.mjs +0 -64
  2185. package/.output/server/chunks/build/useDcwCards-BKCFqkRd.mjs.map +0 -1
  2186. package/.output/server/chunks/build/useDcwDetailScope-CvdvcKAv.mjs +0 -184
  2187. package/.output/server/chunks/build/useDcwDetailScope-CvdvcKAv.mjs.map +0 -1
  2188. package/.output/server/chunks/build/useDcwDetailTemplates-CC2FcEge.mjs +0 -143
  2189. package/.output/server/chunks/build/useDcwDetailTemplates-CC2FcEge.mjs.map +0 -1
  2190. package/.output/server/chunks/build/useDcwFilter-CVoiXbZh.mjs +0 -65
  2191. package/.output/server/chunks/build/useDcwFilter-CVoiXbZh.mjs.map +0 -1
  2192. package/.output/server/chunks/build/useDcwLedger-Cd-ckHoJ.mjs +0 -73
  2193. package/.output/server/chunks/build/useDcwLedger-Cd-ckHoJ.mjs.map +0 -1
  2194. package/.output/server/chunks/build/useDcwLineMutations-BOQs-fw3.mjs +0 -133
  2195. package/.output/server/chunks/build/useDcwLineMutations-BOQs-fw3.mjs.map +0 -1
  2196. package/.output/server/chunks/build/useDcwLineRun-D9qvcyTM.mjs +0 -100
  2197. package/.output/server/chunks/build/useDcwLineRun-D9qvcyTM.mjs.map +0 -1
  2198. package/.output/server/chunks/build/useDcwParamApprovals-D36q4can.mjs +0 -119
  2199. package/.output/server/chunks/build/useDcwParamApprovals-D36q4can.mjs.map +0 -1
  2200. package/.output/server/chunks/build/useDcwProducts-BozctrwT.mjs +0 -88
  2201. package/.output/server/chunks/build/useDcwProducts-BozctrwT.mjs.map +0 -1
  2202. package/.output/server/chunks/build/useDcwQuery-C8FikKgu.mjs +0 -93
  2203. package/.output/server/chunks/build/useDcwQuery-C8FikKgu.mjs.map +0 -1
  2204. package/.output/server/chunks/build/useDcwQuickActions-IyQ8Rkpe.mjs +0 -84
  2205. package/.output/server/chunks/build/useDcwQuickActions-IyQ8Rkpe.mjs.map +0 -1
  2206. package/.output/server/chunks/build/useDcwRecipes-k9HGhMwF.mjs +0 -263
  2207. package/.output/server/chunks/build/useDcwRecipes-k9HGhMwF.mjs.map +0 -1
  2208. package/.output/server/chunks/build/useDcwStream-BnBOiawo.mjs +0 -455
  2209. package/.output/server/chunks/build/useDcwStream-BnBOiawo.mjs.map +0 -1
  2210. package/.output/server/chunks/build/useDcwTemplates-CnyYOOy0.mjs +0 -87
  2211. package/.output/server/chunks/build/useDcwTemplates-CnyYOOy0.mjs.map +0 -1
  2212. package/.output/server/chunks/build/useDcwWrites-Cco590iv.mjs +0 -136
  2213. package/.output/server/chunks/build/useDcwWrites-Cco590iv.mjs.map +0 -1
  2214. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs +0 -118
  2215. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs.map +0 -1
  2216. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs +0 -104
  2217. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs.map +0 -1
  2218. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs +0 -52
  2219. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs.map +0 -1
  2220. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs +0 -80
  2221. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs.map +0 -1
  2222. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs +0 -136
  2223. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs.map +0 -1
  2224. package/.output/server/chunks/build/useLogsScope-C-yrta-v.mjs +0 -75
  2225. package/.output/server/chunks/build/useLogsScope-C-yrta-v.mjs.map +0 -1
  2226. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs +0 -128
  2227. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs.map +0 -1
  2228. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs +0 -77
  2229. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs.map +0 -1
  2230. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs +0 -182
  2231. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs.map +0 -1
  2232. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs +0 -139
  2233. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs.map +0 -1
  2234. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs +0 -146
  2235. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs.map +0 -1
  2236. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs +0 -71
  2237. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs.map +0 -1
  2238. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs +0 -78
  2239. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs.map +0 -1
  2240. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs +0 -91
  2241. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs.map +0 -1
  2242. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs +0 -76
  2243. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs.map +0 -1
  2244. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs +0 -99
  2245. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs.map +0 -1
  2246. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs +0 -124
  2247. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs.map +0 -1
  2248. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs +0 -106
  2249. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs.map +0 -1
  2250. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs +0 -81
  2251. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs.map +0 -1
  2252. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs +0 -108
  2253. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs.map +0 -1
  2254. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs +0 -86
  2255. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs.map +0 -1
  2256. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs +0 -131
  2257. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs.map +0 -1
  2258. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs +0 -128
  2259. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs.map +0 -1
  2260. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs +0 -118
  2261. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs.map +0 -1
  2262. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs +0 -1577
  2263. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs.map +0 -1
  2264. package/.output/server/chunks/build/useWorkspaceAuth-TahC9EC7.mjs +0 -48
  2265. package/.output/server/chunks/build/useWorkspaceAuth-TahC9EC7.mjs.map +0 -1
  2266. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs +0 -94
  2267. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs.map +0 -1
  2268. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs +0 -150
  2269. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs.map +0 -1
  2270. package/.output/server/chunks/build/users-pVCK50z-.mjs +0 -566
  2271. package/.output/server/chunks/build/users-pVCK50z-.mjs.map +0 -1
  2272. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs +0 -499
  2273. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs.map +0 -1
  2274. package/scripts/_aw-packaged-start.cjs +0 -22
  2275. package/scripts/_i18n-en-cjk-scan.mjs +0 -28
  2276. package/scripts/_i18n-en-verify.mjs +0 -107
  2277. package/scripts/_i18n-extra-checks.mjs +0 -53
  2278. package/scripts/_i18n-scan-hardcoded.mjs +0 -180
  2279. package/scripts/_lib-dcw-line.mjs +0 -24
  2280. package/scripts/_lib-plc-sim-child.mjs +0 -28
  2281. package/scripts/_lint-reflow.mjs +0 -105
  2282. package/scripts/_loop-biax-campaign.mjs +0 -130
  2283. package/scripts/_probe-daq-omp-task.mjs +0 -100
  2284. package/scripts/_probe-daq-scope-default.mjs +0 -123
  2285. package/scripts/_probe-lease.cjs +0 -13
  2286. package/scripts/_probe-model-channel-link.cjs +0 -25
  2287. package/scripts/_probe-recipe-switch.mjs +0 -92
  2288. package/scripts/_probe-task-queue.cjs +0 -9
  2289. package/scripts/build-anime-models.mjs +0 -339
  2290. package/scripts/demo-group-chat-omp-cases.ts +0 -210
  2291. package/scripts/demo-group-chat-omp.ts +0 -184
  2292. package/scripts/demo-group-chat-order.ts +0 -197
  2293. package/scripts/e2e-channel-isolation.ts +0 -329
  2294. package/scripts/e2e-lead-team-mgmt.ts +0 -217
  2295. package/scripts/proof-omp-real.ts +0 -189
  2296. package/scripts/smoke-optimization-verify.ts +0 -72
  2297. package/scripts/test-a2a-types.ts +0 -296
  2298. package/scripts/test-agent-multi-channel.ts +0 -160
  2299. package/scripts/test-agentteam-task-chat-flow.ts +0 -420
  2300. package/scripts/test-channel-routing.ts +0 -301
  2301. package/scripts/test-cli-exit.mjs +0 -343
  2302. package/scripts/test-event-persistence.mjs +0 -177
  2303. package/scripts/test-group-chat-hardening.ts +0 -265
  2304. package/scripts/test-group-chat-unit/section-a-migration.ts +0 -75
  2305. package/scripts/test-group-chat-unit/section-b-permission-matrix.ts +0 -88
  2306. package/scripts/test-group-chat-unit/section-c-member-lifecycle.ts +0 -64
  2307. package/scripts/test-group-chat-unit/section-d-mention-resolution.ts +0 -36
  2308. package/scripts/test-group-chat-unit/section-e-chat-facts.ts +0 -97
  2309. package/scripts/test-group-chat-unit/section-f-user-notifications.ts +0 -52
  2310. package/scripts/test-group-chat-unit/section-g-member-projection.ts +0 -44
  2311. package/scripts/test-group-chat-unit/section-h-outbox-consistency.ts +0 -30
  2312. package/scripts/test-group-chat-unit/section-i-read-idempotency.ts +0 -24
  2313. package/scripts/test-group-chat-unit/section-j-permission-scope.ts +0 -150
  2314. package/scripts/test-hitl-legacy-channel-auth.ts +0 -143
  2315. package/scripts/test-lane-history-live.mjs +0 -126
  2316. package/scripts/test-mcp-tools.ts +0 -285
  2317. package/scripts/test-memory-dynamic.ts +0 -101
  2318. package/scripts/test-memory-month-query.mjs +0 -70
  2319. package/scripts/test-memory.ts +0 -431
  2320. package/scripts/test-route-reason.mjs +0 -118
  2321. package/scripts/test-scheduler-loop/scenarios-modes.ts +0 -95
  2322. package/scripts/test-scheduler-loop/scenarios-runtime.ts +0 -58
  2323. package/scripts/test-scheduler-loop/scenarios-supervise.ts +0 -183
  2324. package/scripts/test-scheduler-loop/scenarios-triage.ts +0 -102
  2325. package/scripts/ui/admin-shots.mjs +0 -46
  2326. package/scripts/ui/bump-microfont.mjs +0 -39
  2327. package/scripts/ui/linkcheck2.mjs +0 -37
  2328. package/scripts/ui/live-render-check.mjs +0 -72
  2329. package/scripts/ui/perf-audit.mjs +0 -132
  2330. package/scripts/ui/sim-ui-shot.mjs +0 -16
  2331. package/scripts/ui/smoke-refactor.mjs +0 -258
  2332. /package/.output/public/_nuxt/{9j2J4k4w2.js → 9j2J4k4w.js} +0 -0
  2333. /package/.output/public/_nuxt/{BvRk9kiK2.js → DgrK8UCQ.js} +0 -0
  2334. /package/.output/public/_nuxt/{dVw8IHY6.js → dVw8IHY62.js} +0 -0
  2335. /package/.output/public/_nuxt/{k9b520K-2.js → k9b520K-.js} +0 -0
@@ -1,664 +1,664 @@
1
- # Harness-adapter audit — `server/services/workshop/agents/`
2
-
3
- Read-only audit. All 20 requested files read completely (plus `registry.ts`, `base-agent.ts`,
4
- `prompt-builder.ts`, `mock-agent.ts`, `harness-models.ts`, `harness-terminal.ts`, `plugin-tools.ts`,
5
- `factory.ts` and the call sites `runtime/agent-runtime.ts`, `runtime/scheduler-loop.ts`,
6
- `runtime/manager.ts`, `plugins/workshop.ts`, `plugins/dev-stability-guard.ts`).
7
- Scratch artifacts only: `scripts/_audit/ndjson-partial-line-repro.mjs`,
8
- `scripts/_audit/opencode-await-ternary-repro.mjs`.
9
-
10
- Compiler evidence: `npx tsc --noEmit --skipLibCheck --target esnext --module esnext
11
- --moduleResolution bundler <all adapters>` (alias-resolution errors filtered out; module-internal
12
- errors reproduced below are independent of path aliases).
13
-
14
- ---
15
-
16
- ## 1. Child-process lifecycle
17
-
18
- ### 1.1 Every spawn site (complete)
19
-
20
- | # | site | API |
21
- |---|---|---|
22
- | S1 | `adapters/line-spawn.ts:114` `return launchChildProcess(file, args, {` | `child_process.spawn`, `shell: false` |
23
- | S2 | `adapters/line-spawn.ts:105` `return launchChildProcess('cmd.exe', ['/d', '/s', '/c', ...line], {` | Windows `.cmd/.bat` shim |
24
- | S3 | `adapters/omp-rpc-client.ts:246` `this.child = spawn(command, args, {` | **bypasses line-spawn** |
25
- | S4 | `harness-process.ts:130` `const child = spawn('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })` | tree-killer |
26
-
27
- `spawnLineProcess` callers: `adapters/stdio-jsonrpc.ts:86`, `adapters/one-shot-cli-agent.ts:366`,
28
- `opencode-agent.ts:734`, `harness-models.ts:53`.
29
-
30
- S3 is a real gap: it does **not** go through `assertPlainExecutable` / `resolveOnPath` / the `cmd.exe`
31
- shim, and it hard-codes `env: { ...process.env, ...this.options.env }` (omp-rpc-client.ts:249) so the
32
- `cleanEnv` whitelist semantics of `line-spawn.ts:88-90` are unavailable to omp.
33
-
34
- ### 1.2 The only tree-killer
35
-
36
- `harness-process.ts:125-157`:
37
-
38
- ```ts
39
- 125: export function killHarnessProcess(pid: number): boolean {
40
- ...
41
- 129: if (process.platform === 'win32') {
42
- 130: const child = spawn('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
43
- ...
44
- 139: process.kill(-pid, 'SIGKILL')
45
- ...
46
- 144: process.kill(pid, 'SIGKILL')
47
- ```
48
-
49
- Direct single-process kills that do **not** reap grandchildren:
50
- `adapters/stdio-jsonrpc.ts:192` `this.child?.kill('SIGKILL')`;
51
- `adapters/stdio-jsonrpc.ts:205` `this.child?.kill('SIGKILL')`;
52
- `adapters/omp-rpc-client.ts:237` `this.child?.kill('SIGKILL')`;
53
- `adapters/omp-rpc-client.ts:382` `this.child?.kill('SIGKILL')`;
54
- `adapters/one-shot-cli-agent.ts:263` `child.kill('SIGKILL')`;
55
- `harness-models.ts:61` `child.kill('SIGKILL')`.
56
-
57
- ### 1.3 (a) Session end / `dispose()`
58
-
59
- Only caller: `runtime/agent-runtime.ts:363-369`
60
-
61
- ```ts
62
- 363: // 清理 impl 持有的资源(omp 子进程等);容错:impl.dispose 可能不存在
63
- 364: try {
64
- 365: await this.impl.dispose?.()
65
- ```
66
-
67
- reached from `manager.shutdown()` (`runtime/manager.ts:992` `await Promise.all([...this.agentIndex.values()].map(a => a.stop()))`)
68
- and from the Nitro hook `plugins/workshop.ts:168-174` `nitroApp.hooks.hook('close', async () => { ... await manager.shutdown() ... })`.
69
-
70
- | adapter | dispose location | child killed? |
71
- |---|---|---|
72
- | omp | `omp-agent.ts:437-449` `await this.client.dispose()` | **single-process only** — `omp-rpc-client.ts:369-389` `this.child?.stdin?.end()` then `this.child?.kill('SIGKILL')` (382). omp's own grandchildren survive. |
73
- | codex | `codex-agent.ts:112-125` `await client.dispose().catch(() => {})` | same weak path via `stdio-jsonrpc.ts:195-218` |
74
- | dsh | `dsh-agent.ts:116-129` | same |
75
- | qwen | `qwen-agent.ts:140-153` | same |
76
- | hermes | `hermes-agent.ts:95-108` | same |
77
- | opencode | `opencode-agent.ts:181-195` `killHarnessProcess(pid)` (185) | **tree** ✓ (+ `this.sseAbort?.abort()` 182) |
78
- | one-shot (gemini/copilot/cursor/crush/goose/pi) | `one-shot-cli-agent.ts:148-151` → `killChild()` (253-265) → `killHarnessProcess(pid)` (259) | **tree** ✓ |
79
- | claude | `claude-agent.ts:113-128` `this.abortCtrl?.abort()` (120), `await this.session?.interrupt?.()` (122) | **no process kill at all**; `getProcessInfo(): null` (`claude-agent.ts:130-132` `return null // SDK 自管二进制生命周期,无宿主侧进程句柄`) |
80
- | mock | no `dispose` method (`mock-agent.ts:38` `export class MockAgentImpl implements AgentInterface {`) | n/a (in-process) |
81
-
82
- Asymmetry worth fixing: `killProcess()` uses the tree killer while `dispose()` on the same class does
83
- not — e.g. `codex-agent.ts:134-138`
84
-
85
- ```ts
86
- 134: killProcess(): void {
87
- 135: const pid = this.client?.pid
88
- 136: if (pid) killHarnessProcess(pid)
89
- 137: else this.client?.kill()
90
- ```
91
-
92
- vs `codex-agent.ts:118` `await client.dispose().catch(() => {})` → `stdio-jsonrpc.ts:205`.
93
-
94
- ### 1.4 (b) Error
95
-
96
- - `one-shot-cli-agent.ts:442-444` — `child.on('error', ...)` calls `finishTurn(...)` only and **does not
97
- clear `this.child`** (contrast the `exit` handler `one-shot-cli-agent.ts:445-447` `this.child = null`).
98
- A later `killChild()` (`one-shot-cli-agent.ts:253-265`) then targets a stale pid.
99
- - `harness-models.ts:59` `child.on('error', err => reject(err))` — the promise rejects but
100
- the timeout timer created at `harness-models.ts:60` is **never cleared** and `child.kill()` is never
101
- called on this path.
102
- - `stdio-jsonrpc.ts:106-109`, `omp-rpc-client.ts:280-283` — handled (reject / notifyError).
103
-
104
- ### 1.5 (c) Timeout
105
-
106
- | adapter | per-turn timeout | on timeout | child killed? | error to UI |
107
- |---|---|---|---|---|
108
- | omp | `omp-agent.ts:838` `const idleTimeoutMs = this.config.promptTimeoutMs ?? 600_000` | `omp-agent.ts:915-928` | **yes** — `client.send({ type: 'abort' })` + `this.killProcess()` + `this.client = null` | `TURN_STALLED` error event (921-927) |
109
- | one-shot | `one-shot-cli-agent.ts:206,238` `?? 600_000` | `one-shot-cli-agent.ts:495-502` | **yes** — `this.killChild()` (496) | `TURN_STALLED` (497-501) |
110
- | codex | `codex-agent.ts:238,278` `?? 600_000` | `codex-agent.ts:463-469` | **no** — only `turn/interrupt` (464) | `CODEX_TURN_STALLED` (466-467) |
111
- | claude | `claude-agent.ts:221,262` | `claude-agent.ts:391-397` | no — `this.session?.interrupt?.()` (392) | `CLAUDE_TURN_STALLED` (394) |
112
- | dsh | `dsh-agent.ts:237,277` | `dsh-agent.ts:417-423` | no — `session/cancel` notify (418) | `DSH_TURN_STALLED` (420) |
113
- | hermes | `hermes-agent.ts:209,249` | `hermes-agent.ts:379-385` | no | `HERMES_TURN_STALLED` (382) |
114
- | qwen | `qwen-agent.ts:259,299` | `qwen-agent.ts:407-413` | no | `QWEN_TURN_STALLED` (410) |
115
- | opencode | `opencode-agent.ts:349,391` | `opencode-agent.ts:505-516` | no — `POST /abort` (507) | `OPENCODE_TURN_STALLED` (510) |
116
- | mock | none | — | — | — |
117
-
118
- Non-killing timeout paths leave the pending promise resolved (they `enqueue`), so nothing hangs — but
119
- the child process keeps running and keeps its model turn burning tokens.
120
-
121
- Per-request (not per-turn) timeouts: `stdio-jsonrpc.ts:133-134`
122
- `reject(new Error(\`${this.options.name} 请求超时: ${method} (id=${id},${timeoutMs ?? this.options.requestTimeoutMs ?? 60_000}ms)\`))`
123
- (adapters pass `requestTimeoutMs: 60_000` — codex-agent.ts:613, dsh-agent.ts:500, qwen-agent.ts:486,
124
- hermes-agent.ts:457 — except `harness-models.ts:110` `requestTimeoutMs: 30_000`);
125
- `omp-rpc-client.ts:309-312` `reject(new Error(\`omp RPC 命令超时: ${command.type} (id=${id})\`))`, 60 s.
126
-
127
- ### 1.6 (d) Parent process exit — **not guaranteed**
128
-
129
- There is **no** `process.on('exit' | 'SIGINT' | 'SIGTERM' | 'beforeExit')` anywhere under `server/`
130
- (only `unhandledRejection`: `plugins/workshop.ts:88`, `plugins/dev-stability-guard.ts:56`;
131
- `uncaughtException`: `plugins/dev-stability-guard.ts:59`). Cleanup depends entirely on the Nitro
132
- `close` hook (`plugins/workshop.ts:168`). Two concrete consequence paths:
133
-
134
- 1. `plugins/dev-stability-guard.ts:53-54`
135
- ```ts
136
- 53: console.error(`[stability-guard] fatal ${kind}, exiting:\n${describe(reason)}`)
137
- 54: process.exit(1)
138
- ```
139
- `process.exit(1)` skips the `close` hook entirely → **every live harness child is orphaned**.
140
- The exemption regex only knows four engines — `plugins/dev-stability-guard.ts:16`
141
- `const ENGINE_BOUNDARY = /\b(opencode|omp|codex|dsh) API\b/i` — so failures from
142
- claude/gemini/copilot/cursor/crush/goose/qwen/pi/hermes are not exempted.
143
- 2. The pid registry is process-local: `harness-process.ts:36`
144
- `const registry = new Map<number, HarnessProcessEntry>()`. After a restart, orphaned children are
145
- unreachable — `listAliveHarnessProcessesByAgent` (`harness-process.ts:87-89`) can only see pids
146
- registered in the current process; there is no OS process-table scan.
147
-
148
- ### 1.7 Windows-specific handling
149
-
150
- - `windowsHide: true` — `line-spawn.ts:109`, `line-spawn.ts:118`, `omp-rpc-client.ts:250`,
151
- `harness-process.ts:130`.
152
- - `.cmd/.bat` shim: `line-spawn.ts:63-66` `if (lower.endsWith('.cmd') || lower.endsWith('.bat')) return { file, needsCmd: true }`
153
- → `line-spawn.ts:99-112` fixed `'cmd.exe'`, `/d /s /c`, per-arg `assertCmdSafeArg` (`line-spawn.ts:78-83`
154
- `/["\r\n\0]/.test(arg)`), `windowsVerbatimArguments: true` (111).
155
- - Tree kill is Windows-`taskkill`-only (`harness-process.ts:130`); `process.kill(-pid, 'SIGKILL')`
156
- (`harness-process.ts:139`) is guarded by `if (process.platform === 'win32')` at line 129, so on Windows
157
- the POSIX branch never runs.
158
- - `process.kill(pid, 0)` liveness probe: `harness-process.ts:107-116` (EPERM treated as alive, 114).
159
- - `resolveOnPath` PATHEXT resolution: `line-spawn.ts:29-55`, incl. `.cmd` last-resort bare name (51-53).
160
- - `one-shot-cli-agent.ts:104-106 sanitizePromptArg` exists specifically because `arg` delivery goes
161
- through the cmd wrapper on Windows.
162
-
163
- ### 1.8 stdio pipes drained?
164
-
165
- | consumer | stdout | stderr |
166
- |---|---|---|
167
- | `stdio-jsonrpc.ts:97-105` | drained | drained (8 KB tail) |
168
- | `omp-rpc-client.ts:253-279` | drained (8 MB line cap) | drained (1 MB cap, `STDERR_CAP` 130) |
169
- | `one-shot-cli-agent.ts:404-432` | drained | drained (8 KB tail) |
170
- | `opencode-agent.ts:745-748` | **NOT drained — no `child.stdout` reference in the file** | drained |
171
- | `harness-models.ts:55-58` | drained | **NOT drained — no `child.stderr` reference in the file** |
172
-
173
- `opencode serve` is long-lived (`opencode-agent.ts:734`), so an unread stdout that exceeds the OS pipe
174
- buffer will block the engine mid-turn. `harness-models.collect()` is bounded by its 45–60 s timeout
175
- (`harness-models.ts:79,144`), so it degrades to a timeout rather than a permanent hang, but returns a
176
- truncated catalog.
177
-
178
- ## 2. Unhandled promise rejection risk
179
-
180
- **Overall: floating promises are overwhelmingly `.catch()`-guarded — I found no unguarded floating
181
- promise that could reject.** The real rejection risk is *synchronous throws inside `async` methods*
182
- (§4.3/§4.4), which the call sites do catch.
183
-
184
- ### 2.1 Floating calls (all verified guarded)
185
-
186
- `void`-guarded: `omp-rpc-client.ts:466`; `omp-agent.ts:169,348,455,596,1065,1171,1172`;
187
- `claude-agent.ts:136,379,392,521`; `codex-agent.ts:430,464,528,556`; `dsh-agent.ts:389,573`;
188
- `qwen-agent.ts:387,535`; `hermes-agent.ts:352,523`; `opencode-agent.ts:475,507,705,892`.
189
-
190
- Floating but `.catch()`-ed (no `void`): `omp-agent.ts:873` `client.send({ type: 'abort' }).catch(() => {})`,
191
- `omp-agent.ts:916` same shape.
192
-
193
- ### 2.2 `async` setTimeout/setInterval callbacks without try/catch
194
-
195
- There is **no `setInterval`** in any of the audited files. Every timer body is synchronous; the two
196
- async timers-adjacent loops have internal try/catch:
197
- `opencode-agent.ts:855-891` (`const connect = async (): Promise<void> => { while (...) { try { ... } catch (err) {...} } }`)
198
- and `claude-agent.ts:521-533` `void (async () => { try { for await (const msg of session) ... } catch ... finally ... })()`.
199
-
200
- ### 2.3 `timer.unref()`
201
-
202
- Exactly three uses in the whole agents tree:
203
- `tool-approvals.ts:83` `timer.unref?.()`, `harness-terminal.ts:301` `session.parkTimer.unref?.()`,
204
- `opencode-agent.ts:92` `srv.unref()`.
205
- **No per-turn / stall / poll / abort-fallback timer is unref'd.** (`AbortSignal.timeout` at
206
- `opencode-agent.ts:766,912` is fine — verified at runtime that Node unrefs it: no `Timeout` appears in
207
- `process.getActiveResourcesInfo()` after `AbortSignal.timeout(60000)`.)
208
-
209
- ### 2.4 Leaked timers (never cleared, never unref'd)
210
-
211
- | file:line | timer | note |
212
- |---|---|---|
213
- | `omp-rpc-client.ts:294` | `setTimeout(() => { if (!this.ready) reject(new Error('omp RPC ready 超时(10s)')) }, 10_000)` | no handle stored → refs the loop 10 s after every successful `start()` |
214
- | `omp-agent.ts:620` | `const timer = setTimeout(abortTurn, timeoutMs)` | **not** cleared on the early-return path `omp-agent.ts:625-629` `if (opts.signal.aborted) { unsub(); resolve([]); return }` → later fires `omp-agent.ts:596` `void this.client?.send({ type: 'abort' }).catch(() => {})` against the shared omp subprocess, cancelling an unrelated live turn |
215
- | `one-shot-cli-agent.ts:506-509` | `setTimeout(() => { resolveWait = null; r() }, Math.min(remaining + 100, 5000))` | no variable |
216
- | `codex-agent.ts:473-476` | `setTimeout(() => { resolveWait = null; r() }, remaining + 100)` | no variable |
217
- | `claude-agent.ts:401-404` | same shape | no variable |
218
- | `dsh-agent.ts:427-430` | same shape | no variable |
219
- | `qwen-agent.ts:417-420` | same shape | no variable |
220
- | `hermes-agent.ts:389-392` | same shape | no variable |
221
- | `codex-agent.ts:431-433` | `setTimeout(() => { if (!isDone) enqueue({ kind: 'done', ... }) }, 5000)` | abort fallback |
222
- | `claude-agent.ts:380-382`, `dsh-agent.ts:381-383`, `qwen-agent.ts:380-382`, `hermes-agent.ts:345-347` | same 5 s abort fallback | |
223
- | `opencode-agent.ts:477` | `setTimeout(() => finishTurn(), 5000)` | abort fallback |
224
- | `harness-models.ts:60-63` | `const timer = setTimeout(...)` | cleared only on `exit` (65); the `error` path (59) leaks it |
225
- | `omp-agent.ts:533`, `harness-terminal.ts:545` | `setTimeout(resolve, 150)` per poll iteration | bounded by 20 s / 8 s deadlines |
226
-
227
- Correctly-cleared counterparts (for contrast): `opencode-agent.ts:520-528,536` and
228
- `omp-agent.ts:932-940,948`.
229
-
230
- ### 2.5 Leaked listeners
231
-
232
- 1. **`adapters/omp-rpc-client.ts:269`** `this.eventListeners.add(onReady as (event: AgentSessionEvent) => void)`
233
- — added inside `start()` on every (re)spawn, never removed; only `dispose()` clears
234
- (`omp-rpc-client.ts:397` `this.eventListeners.clear()`). `handleExit` does not. The `onReady`
235
- closure also captures the **previous** `resolve`/`reject` of an already-settled promise.
236
- 2. **`adapters/stdio-jsonrpc.ts:208`** `this.child.once('exit', () => { clearTimeout(timer); resolve() })`
237
- — on the 3 s timeout path (`stdio-jsonrpc.ts:204-207`) the promise resolves via the timer branch but
238
- this listener is left attached.
239
- 3. `adapters/stdio-jsonrpc.ts:102-105`, `:106-109`, `:110-117` — child listeners never removed
240
- (`removeListener`/`off(` never appears in the file); bounded by child lifetime.
241
- 4. `harness-terminal.ts:387-393 detachTerminalTap` — clears `unsubRaw` but not `session.batchTimer`,
242
- so the pending 50 ms flush (`harness-terminal.ts:175-181`) survives detach.
243
- 5. `adapters/one-shot-cli-agent.ts:406,430` and `opencode-agent.ts:746` — `data` listeners never
244
- removed; bounded per-turn (one-shot) / per-server (opencode).
245
- 6. No `request.destroy()`, no stream `destroy()`, and no `stdin.destroy()` anywhere; the only
246
- teardown is `stdin.end()` (`stdio-jsonrpc.ts:199`, `omp-rpc-client.ts:371`, `one-shot-cli-agent.ts:484,488`).
247
-
248
- ### 2.6 "Dangerous by construction" — `.then()` on an `AsyncGenerator`
249
-
250
- `opencode-agent.ts:396-402`
251
-
252
- ```ts
253
- 396: private runTurn(
254
- 397: prompt: string,
255
- 398: taskId: string | undefined,
256
- 399: opts: { timeoutMs: number, signal?: AbortSignal, beforeStart?: () => void, onDone?: () => void },
257
- 400: ): AsyncGenerator<AgentEvent, void, unknown> {
258
- 401: return this._runTurn(prompt, taskId, opts)
259
- 402: }
260
- ```
261
-
262
- used at `opencode-agent.ts:301-323` `return await this.runTurn(prompt, undefined, {...}).then((events) => {...})`.
263
- Compiler: `opencode-agent.ts(310,8): error TS2339: Property 'then' does not exist on type 'AsyncGenerator<AgentEvent, void, unknown>'`.
264
- At runtime this is `TypeError: ... .then is not a function` inside `async supervise`, contradicting the
265
- in-file intent at `opencode-agent.ts:281-282` ("绝不让引擎故障以 unhandledRejection 形态逃逸"). It is
266
- caught downstream by `runtime/scheduler-loop.ts:309-312`, so opencode's LLM lead-scheduling silently
267
- degrades to the rule engine on every tick.
268
-
269
- ## 3. NDJSON / JSON-RPC streaming correctness
270
-
271
- | site | cross-chunk buffer | `\r\n` | split JSON line | non-JSON banner |
272
- |---|---|---|---|---|
273
- | `adapters/stdio-jsonrpc.ts:234-252` | ✔ | ✔ via `line.trim()` (240) | ✔ | ✔ `catch { continue }` (246-248) |
274
- | `adapters/omp-rpc-client.ts:404-424` | ✔ | ✔ via `line.trim()` (414) | ✔ | ✔ (420-422) |
275
- | `opencode-agent.ts:866-883` (SSE) | ✔ | ✗ only `\n\n` (870) | ✔ (871) | ✔ (877-880) |
276
- | `adapters/one-shot-cli-agent.ts:406-428` | ✗ **BUG** | ✔ `/\r?\n/` (411) | ✗ **lost** | ✗ dropped (418) |
277
-
278
- Correct pattern (verbatim, `stdio-jsonrpc.ts:234-238`):
279
-
280
- ```ts
281
- 234: private onStdout(data: string): void {
282
- 235: this.stdoutBuf += data
283
- 236: if (this.stdoutBuf.length > 8 * 1024 * 1024) this.stdoutBuf = ''
284
- 237: const lines = this.stdoutBuf.split('\n')
285
- 238: this.stdoutBuf = lines.pop() ?? ''
286
- ```
287
-
288
- Caveat on 236: the cap check runs *before* the split, discarding the accumulated partial line — a
289
- single frame > 8 MB desynchronises the stream (the remainder is then parsed as a fresh line).
290
-
291
- ### 3.1 BUG — `one-shot-cli-agent.ts:406-428` parses each chunk with no line buffering
292
-
293
- ```ts
294
- 406: child.stdout?.on('data', (chunk: string) => {
295
- ...
296
- 411: for (const rawLine of chunk.split(/\r?\n/)) {
297
- 412: const line = rawLine.trim()
298
- 413: if (!line) continue
299
- 414: const json = tryParse(line)
300
- 415: if (json === null) {
301
- 416: // 无结构化输出面的引擎:stdout 纯文本行即回复增量;其余(横幅/告警)忽略
302
- 417: if (this.spec.plainTextStdout === true) sink.delta(line)
303
- 418: continue
304
- 419: }
305
- ```
306
-
307
- Concrete breaking input (executed — `scripts/_audit/ndjson-partial-line-repro.mjs`), one logical
308
- NDJSON stream delivered as two `data` events because the payload exceeds the pipe read size (64 KiB):
309
-
310
- ```
311
- chunk#1 {"type":"message","role":"assistant","content":"hello wor
312
- chunk#2 ld"}\n{"type":"result","usage":{"input_tokens":42}}\n
313
- ```
314
-
315
- Observed:
316
-
317
- ```
318
- A one-shot-cli-agent.ts loop : frames=1 ["result"] drops=2 ["{\"type\":\"message\",...,\"hello wor","ld\"}"] assistantText=""
319
- B stdio-jsonrpc.ts loop : frames=2 ["message","result"]
320
- ```
321
-
322
- The whole assistant message is silently lost (never becomes a `delta`), and one frame disappears.
323
- Affects every `OneShotCliAgentImpl` subclass without `plainTextStdout`: gemini, copilot, cursor,
324
- goose, pi. `crush` sets `plainTextStdout: true` (`crush-agent.ts:67`) so it survives but with each
325
- fragment `.trim()`-ed (411-412), altering leading/trailing whitespace of the answer.
326
-
327
- Additional unbounded buffer: `one-shot-cli-agent.ts:405-409`
328
-
329
- ```ts
330
- 405: let stdoutAll = ''
331
- 406: child.stdout?.on('data', (chunk: string) => {
332
- 407: if (this.spec.wholeJsonAtExit === true) {
333
- 408: stdoutAll += chunk
334
- ```
335
-
336
- `stdoutAll` has no cap. Latent only — no shipped spec sets `wholeJsonAtExit`
337
- (only `crush-agent.ts:67` sets `plainTextStdout`).
338
-
339
- ### 3.2 SSE caveat — `opencode-agent.ts:866-883`
340
-
341
- ```ts
342
- 869: buf += decoder.decode(value, { stream: true })
343
- 870: const chunks = buf.split('\n\n')
344
- 871: buf = chunks.pop() ?? ''
345
- ```
346
-
347
- Correct for `\n\n`-delimited SSE. Two gaps: (a) a CRLF-delimited stream (`\r\n\r\n`) never splits and
348
- `buf` grows without bound; (b) multi-line `data:` payloads are parsed line-by-line (873-879), so a
349
- payload split over two `data:` lines is rejected as non-JSON and dropped (880).
350
-
351
- ### 3.3 Non-stream splits (safe)
352
-
353
- `harness-models.ts:82` `for (const rawLine of out.split('\n'))`, `:146`, `:184` — `out` is the fully
354
- collected stdout string, not a chunk. No `readline` usage anywhere in the tree.
355
-
356
- ## 4. Timeout / retry / error propagation
357
-
358
- ### 4.1 Per-turn timeout (quoted) — see table in §1.5
359
-
360
- Every process-based adapter has one except `mock`. All default to `600_000` ms; supervise defaults to
361
- `150_000` (`base-agent.ts:170`, `omp-agent.ts:576`, `opencode-agent.ts:300`, `qwen-agent.ts:219`).
362
-
363
- ### 4.2 Correct propagation to `{ kind: 'error' }`
364
-
365
- Timeout → error event, verified for all nine: `omp-agent.ts:921-927`, `one-shot-cli-agent.ts:497-501`,
366
- `codex-agent.ts:465-468`, `claude-agent.ts:393-396`, `dsh-agent.ts:419-422`, `hermes-agent.ts:381-384`,
367
- `qwen-agent.ts:409-412`, `opencode-agent.ts:508-514`. Non-zero child exit → error event:
368
- `one-shot-cli-agent.ts:469-479`
369
-
370
- ```ts
371
- 469: if (code === 0) {
372
- 470: finishTurn({ kind: 'done' })
373
- 471: }
374
- 472: else {
375
- 473: const custom = this.spec.exitErrorMessage?.(code ?? -1, stderrTail)
376
- 474: finishTurn({
377
- 475: kind: 'error',
378
- 476: code: `${this.spec.harnessId.toUpperCase()}_EXIT_${code ?? -1}`,
379
- ```
380
-
381
- Spawn failure → error event: `one-shot-cli-agent.ts:368-377`, `omp-agent.ts:652-660`.
382
-
383
- ### 4.3 Swallowed errors (verbatim)
384
-
385
- - `base-agent.ts:160-162`
386
- ```ts
387
- 160: catch {
388
- 161: return []
389
- 162: }
390
- ```
391
- `supervise()` failure produces **no AgentEvent at all** — every adapter that relies on the base
392
- implementation (all except omp/opencode/qwen) loses the reason.
393
- - `qwen-agent.ts:229-231` — the same `catch { return [] }`, duplicated.
394
- - `opencode-agent.ts:320-323` `}).catch(() => { this.supervising = false; return [] })` and
395
- `opencode-agent.ts:286-289` `catch (err) { log.warn(...); return [] }`.
396
- - `codex-agent.ts:208-210` compact failure → `log.warn(... 放行)`; `opencode-agent.ts:270-272` same.
397
- - `codex-agent.ts:725-727` `catch (err) { log.warn(\`[CodexAgent:${this.selfAgentId}] CODEX_HOME config 写入失败(信任全局配置):\`, ...) }`
398
- — if the MCP section is not written, the agent runs **without tools** and the turn still reports `done`.
399
- - `opencode-agent.ts:794-796` `catch (err) { log.warn(\`[OpenCodeAgent:${this.selfAgentId}] MCP 桥注册失败(host tools 不可用):\`, ...) }` — same class of silent capability loss.
400
- - `claude-agent.ts:527-529` `catch (err) { log.warn(\`[ClaudeSdk:${this.selfAgentId}] 消息流异常: ...\`) }` — the SDK stream dies but `streamTurn` keeps waiting until the 600 s stall timer; the UI sees nothing until then.
401
- - `omp-rpc-client.ts:420-422` `// 非 JSON 行(理论上不应出现):忽略` and `:549-551` `// chunk 重组失败:忽略`.
402
- - `stdio-jsonrpc.ts:246-248` `catch { continue // 非 JSON 行(横幅/日志混流)忽略 }` — combined with a lost frame this is invisible.
403
- - `harness-models.ts:142` `catch { /* 无凭据则按未登录目录输出 */ }`, `:243` `catch { /* 无 settings.yaml/解析失败 → 仅内置目录 */ }`.
404
-
405
- ### 4.4 `async` methods that throw before doing any work
406
-
407
- | method | throw | compiler evidence |
408
- |---|---|---|
409
- | `QwenAgentImpl.supervise` | `qwen-agent.ts:209` `const prompt = supervisePrompt({` — **`supervisePrompt` is not imported** (`qwen-agent.ts:30` imports only `peerPrompt, systemManual, toolArgsPreview, workerPrompt`) → `ReferenceError`; next failure would be `qwen-agent.ts:219` `const events = await this.collectTurn(...)` (the method is `collectTurnEvents`, `qwen-agent.ts:435`) and `qwen-agent.ts:226` `extractJsonArray(text)` (also not imported) | `qwen-agent.ts(209,20): TS2304: Cannot find name 'supervisePrompt'`; `(219,33): TS2339: Property 'collectTurn' does not exist`; `(226,22): TS2304: Cannot find name 'extractJsonArray'`; `(208,14)/(217,10)/(233,12): TS2341: Property 'supervising' is private and only accessible within class 'BaseAgentImpl'` |
410
- | `OpenCodeAgentImpl.supervise` | `opencode-agent.ts:301` `.then(...)` on an AsyncGenerator | `opencode-agent.ts(310,8): TS2339` |
411
- | `OpenCodeAgentImpl.respondHitl` | `opencode-agent.ts:252` `if (pending.timer) clearTimeout(p.timer)` — `p` is undefined in this scope (the loop variable `p` lives at 652 and 191) → `ReferenceError` **after** the engine was already answered (241/246/249) but **before** `this.pendingHitl.delete(id)` (253) and `getHitlRegistry().resolve(...)` (254) → the local map entry and the global HITL item leak forever, and the REST caller gets a 500 (`server/api/workshop/hitl/respond.post.ts:80` `await manager.respondHarnessHitl(...)` → `runtime/manager.ts:2821` `const ok = await runtime.respondHitl(kind, id, outcome)`) | `opencode-agent.ts(252,37): TS2304: Cannot find name 'p'` |
412
- | `OpenCodeAgentImpl.startServer` | `opencode-agent.ts:805-808` — `await` binds tighter than `?:`, so `created` is a **Promise**, not the session object, and `String(created?.id ?? '')` is always `''`; entry into the 3× retry loop at 811-815 is therefore guaranteed (≥2.5 s `await sleep(2500)`) and the first, real, session is created and abandoned | `opencode-agent.ts(808,38): TS2339: Property 'id' does not exist on type 'Promise<Record<string, unknown>>'`; reproduced in `scripts/_audit/opencode-await-ternary-repro.mjs` (`created instanceof Promise = true`, `this.sessionId = ""`) |
413
-
414
- ```ts
415
- 805: const created = await (this.config.permission ?? DEFAULT_PERMISSION)
416
- 806: ? createWith({ permission: this.config.permission ?? DEFAULT_PERMISSION }).catch(() => createWith(undefined))
417
- 807: : createWith(undefined)
418
- 808: this.sessionId = String(created?.id ?? '')
419
- ```
420
-
421
- Also note the ternary condition `this.config.permission ?? DEFAULT_PERMISSION` can never be falsy
422
- (`DEFAULT_PERMISSION` is a 4-line array literal, `opencode-agent.ts:82-86`), so the `: createWith(undefined)`
423
- branch at 807 is dead code and `permission` is always sent on the first attempt.
424
-
425
- ## 5. DUPLICATION INVENTORY
426
-
427
- Line ranges are exact. "Copies" counts textual copies of the same block; near-copies with token
428
- renames are flagged.
429
-
430
- ### 5.1 MCP-bridge env setup (`AW_BASE_URL` / `AW_AGENT_ID` / `AW_AGENT_TOKEN`)
431
-
432
- | # | function / block | file:lines | copies |
433
- |---|---|---|---|
434
- | D1 | `generateMcpBridgeEnv({ agentId, token, baseUrl, bridgePath })` call site | `codex-agent.ts:606-612`, `codex-agent.ts:690`, `claude-agent.ts:452-457`, `dsh-agent.ts:477-484`, `qwen-agent.ts:461-466`, `hermes-agent.ts:438-443`, `adapters/one-shot-cli-agent.ts:296-301`, `gemini-agent.ts:119` | **8 sites / 7 files** |
435
- | D2 | Redundant repeat calls of the *same* expression inside one function | `dsh-agent.ts:485`, `dsh-agent.ts:486` (three identical `generateMcpBridgeEnv(...)` evaluations in one call) | 3 extra evaluations |
436
- | D3 | Hand-rolled `AW_*` literal object duplicating `harness-env.ts:41-53` | `opencode-agent.ts:786-790` vs `harness-env.ts:44-47` | **2 copies** |
437
- | D4 | `\` ${k} = "${v}"\`` TOML env expansion | `codex-agent.ts:691` | 1 (no dup) |
438
- | D5 | bridge launch pair `process.execPath` + bridge path | `codex-agent.ts:695-696`, `claude-agent.ts:506-508`, `qwen-agent.ts:75`, `gemini-agent.ts:49-51`, `copilot-agent.ts:61`, `cursor-agent.ts:46`, `opencode-agent.ts:784`, `crush-agent.ts:39-43`, `goose-agent.ts:40-41` | **9 copies** |
439
-
440
- Canonical source being duplicated: `harness-env.ts:43-48`
441
-
442
- ```ts
443
- 43: const bridgeEnv = {
444
- 44: AW_BASE_URL: resolvePlatformBaseUrl(input.baseUrl),
445
- 45: AW_AGENT_ID: input.agentId,
446
- 46: AW_AGENT_TOKEN: input.token ?? '',
447
- 47: AW_MCP_TOOL_TIMEOUT_MS: String(200_000),
448
- 48: }
449
- ```
450
-
451
- ### 5.2 `resolveCli` / binary path resolution
452
-
453
- | # | function | file:lines | copies |
454
- |---|---|---|---|
455
- | D6 | `resolveCommand` one-liner `config => (typeof config.command === 'string' && config.command.trim() !== '' ? config.command.trim() : harnessSettings().X_command)` | `gemini-agent.ts:60`, `copilot-agent.ts:85`, `cursor-agent.ts:54`, `crush-agent.ts:59`, `goose-agent.ts:33`, `pi-agent.ts:52` | **6 byte-identical copies** (only the settings key differs) |
456
- | D7 | same rule re-implemented for the registry probe | `registry.ts:106-107` `const cmdFrom = (config) => typeof config?.command === 'string' && config.command.trim() !== '' ? config.command.trim() : ''` | +1 |
457
- | D8 | `getProcessInfo` fallback command strings `'opencode serve' / 'dsh --profile acp' / 'qwen --experimental-acp' / 'hermes acp' / 'codex app-server'` re-stating the spawn argv | `opencode-agent.ts:166`, `dsh-agent.ts:135`, `qwen-agent.ts:158`, `hermes-agent.ts:113`, `codex-agent.ts:131` | 5 |
458
- | D9 | PATH probing: `probeExecutable` re-implements the explicit-path test and the POSIX PATH walk already in `resolveOnPath` | `harness-availability.ts:55-67` vs `adapters/line-spawn.ts:29-55` (explicit-path test `harness-availability.ts:58` ≈ `line-spawn.ts:39`) | 2 |
459
- | D10 | `safeId(agentId)` (identical 4-line body) | `copilot-agent.ts:28-31`, `goose-agent.ts:26-29`, `pi-agent.ts:27-30` | **3 identical copies** |
460
- | D11 | "absolute path, no `..`" override validation | `copilot-agent.ts:37-40`, `pi-agent.ts:36-39` | 2 |
461
-
462
- ### 5.3 `spawn` option assembly
463
-
464
- | # | block | file:lines | copies |
465
- |---|---|---|---|
466
- | D12 | `stdio: ['pipe', 'pipe', 'pipe']` literal | `adapters/line-spawn.ts:106`, `:115`, `adapters/omp-rpc-client.ts:247` | 3 (omp-rpc-client bypasses the shared helper) |
467
- | D13 | `{ cwd: this.config.cwd ?? process.cwd(), env, windowsHide: true }` + `new StdioJsonRpcClient({...})` | `codex-agent.ts:601-614`, `dsh-agent.ts:494-501`, `qwen-agent.ts:480-487`, `hermes-agent.ts:451-458`, `harness-models.ts:110` | **5 copies** |
468
- | D14 | `env = { ...bridge.bridgeEnv, ...(engine-specific keys) }` | `dsh-agent.ts:477-493`, `qwen-agent.ts:468-474`, `hermes-agent.ts:444-449`, `one-shot-cli-agent.ts:315-318`, `gemini-agent.ts:67-70`, `copilot-agent.ts:104-107`, `cursor-agent.ts:62-64`, `crush-agent.ts:68-73`, `goose-agent.ts:47-60`, `pi-agent.ts:66-71`, `claude-agent.ts:458-462`, `opencode-agent.ts:736-740` | **12 copies** |
469
-
470
- ### 5.4 prompt / context assembly
471
-
472
- | # | block | file:lines | copies |
473
- |---|---|---|---|
474
- | D15 | `const taskText = request.message.parts.map((p) => { if ('text' in p) ... }).join('\n')` — a re-implementation of `base-agent.ts:189-197 partsText()` | `codex-agent.ts:222-228`, `claude-agent.ts:205-211`, `dsh-agent.ts:221-227`, `qwen-agent.ts:243-249`, `hermes-agent.ts:193-199`, `opencode-agent.ts:332-338`, `omp-agent.ts:669-675` | **7 copies** |
475
- | D16 | same block for `msgText` in `peerTurn` | `codex-agent.ts:256-262`, `claude-agent.ts:240-246`, `dsh-agent.ts:255-261`, `qwen-agent.ts:277-283`, `hermes-agent.ts:227-233`, `opencode-agent.ts:369-375`, `omp-agent.ts:722-728` | **7 copies** |
476
- | D17 | `fromId` / `requireReply` / `crossChannel` / `toolState.replyContext` prelude | `codex-agent.ts:248-255`, `claude-agent.ts:232-239`, `dsh-agent.ts:247-254`, `qwen-agent.ts:269-276`, `hermes-agent.ts:219-226`, `opencode-agent.ts:361-368`, `one-shot-cli-agent.ts:215-222`, `omp-agent.ts:719-740` | **8 copies** |
477
- | D18 | `workerTurn` skeleton (taskId → `toolState.currentTaskId` → prompt → `yield* streamTurn`) incl. `finally { this.toolState.currentTaskId = null }` | `codex-agent.ts:216-243`, `claude-agent.ts:198-226`, `dsh-agent.ts:215-242`, `qwen-agent.ts:237-264`, `hermes-agent.ts:187-214`, `opencode-agent.ts:326-356`, `one-shot-cli-agent.ts:192-211`, `omp-agent.ts:642-688` | **8 copies** |
478
- | D19 | `peerTurn` skeleton | `codex-agent.ts:245-279`, `claude-agent.ts:228-263`, `dsh-agent.ts:244-278`, `qwen-agent.ts:266-300`, `hermes-agent.ts:216-250`, `opencode-agent.ts:358-392`, `one-shot-cli-agent.ts:213-239`, `omp-agent.ts:695-759` | **8 copies** |
479
- | D20 | constructor identity block `super({ agentId: typeof config.agentId === 'string' ? ... , role: config.role === 'lead' ? 'lead' : 'worker', ... })` | `codex-agent.ts:95-100`, `claude-agent.ts:96-101`, `dsh-agent.ts:99-104`, `qwen-agent.ts:123-128`, `hermes-agent.ts:76-81`, `opencode-agent.ts:144-149`, `one-shot-cli-agent.ts:130-135`, `omp-agent.ts:398-403` | **8 copies** |
480
- | D21 | `contextPrefix()` / `systemManual()` per-turn assembly paired with `workerPrompt`/`peerPrompt` | same 8 files, `workerTurn`/`peerTurn` bodies (see D18/D19) | 8 |
481
- | D22 | `partsText` twin in the base itself | `base-agent.ts:189-197` — canonical, already exists | (target, not duplicate) |
482
-
483
- ### 5.5 `parseXxxLine` / event-line mappers
484
-
485
- | # | function | file:lines | copies |
486
- |---|---|---|---|
487
- | D23 | ACP `pushUpdate(params)` notification mapper (`agent_message_chunk` / `tool_call` / `tool_call_update` / usage) | `dsh-agent.ts:327-371`, `hermes-agent.ts:293-336` | **2 near-identical copies (~95 %)**; only `DSH_ACP_METHODS` vs `HERMES_ACP_METHODS` and 2 comment lines differ |
488
- | D24 | inner `statusEvent(text)` helper | `dsh-agent.ts:335-344`, `hermes-agent.ts:301-310`, `claude-agent.ts:311-316`, `opencode-agent.ts:551-558`, `one-shot-cli-agent.ts:339-348` | **5 copies** |
489
- | D25 | `tryParse(line)` JSON guard | `one-shot-cli-agent.ts:108-115` (only one in adapters; `stdio-jsonrpc.ts:244`, `omp-rpc-client.ts:417` are inline `JSON.parse`) | 1 + 2 inline |
490
- | D26 | engine `mapLine` dispatch tables | `gemini-agent.ts:76-108`, `copilot-agent.ts:112-129`, `cursor-agent.ts:68-95`, `crush-agent.ts:78-100`, `goose-agent.ts:61-91`, `pi-agent.ts:82-101` | 6 (shape, not text) |
491
-
492
- ### 5.6 output accumulation loops
493
-
494
- | # | block | file:lines | copies |
495
- |---|---|---|---|
496
- | D27 | `enqueue` closure (artifact-before-done + `isDone` latch + `resolveWait?.()`) | `codex-agent.ts:301-322`, `dsh-agent.ts:304-324`, `hermes-agent.ts:271-291`, `qwen-agent.ts:321-340`, `claude-agent.ts:286-303`, `opencode-agent.ts:423-446`, `one-shot-cli-agent.ts:386-402`, `omp-agent.ts:826-832` | **8** (dsh/hermes/qwen are textually identical except qwen's missing `this.turnActive = false` at dsh:314/hermes:281 — behaviourally equivalent because qwen sets it in the following branch at 332-335) |
497
- | D28 | artifact literal `{ kind: 'artifact', artifact: { artifactId: randomUUID(), name: 'output', parts: [{ text }], lastChunk: true, totalChunks: 1 } }` | `codex-agent.ts:304-309`, `dsh-agent.ts:307-312`, `hermes-agent.ts:274-279`, `qwen-agent.ts:324-329`, `claude-agent.ts:288-293`, `one-shot-cli-agent.ts:390-395`, `opencode-agent.ts:428-433` + `:460-465`, `omp-agent.ts:1035-1044` | **9** |
498
- | D29 | drain loop `while (!isDone \|\| queue.length > 0)` + stall watchdog + `await new Promise((r) => { resolveWait = r; setTimeout(...) })` | `codex-agent.ts:460-478`, `claude-agent.ts:388-406`, `dsh-agent.ts:414-432`, `qwen-agent.ts:404-422`, `hermes-agent.ts:376-394`, `opencode-agent.ts:502-529`, `one-shot-cli-agent.ts:492-511`, `omp-agent.ts:912-941` | **8 copies** |
499
- | D30 | `flushDelta` / `pushDelta` 50 ms delta batching | `codex-agent.ts:324-340`, `omp-agent.ts:845-861` | 2 |
500
- | D31 | `const queue / let isDone / let resolveWait / let lastActivity / let agentText` state prelude | 8 files (same as D29) | 8 |
501
- | D32 | abort fallback `setTimeout(() => { if (!isDone) enqueue({ kind: 'done', ... }) }, 5000)` | `codex-agent.ts:431-433`, `claude-agent.ts:380-382`, `dsh-agent.ts:381-383`, `qwen-agent.ts:380-382`, `hermes-agent.ts:345-347`, `opencode-agent.ts:477` | **6 copies** |
502
- | D33 | `onAbort` handler (log + engine cancel + 5 s fallback) | `codex-agent.ts:428-434`, `claude-agent.ts:377-383`, `dsh-agent.ts:378-385`, `qwen-agent.ts:377-385`, `hermes-agent.ts:342-348`, `opencode-agent.ts:472-478`, `one-shot-cli-agent.ts:434-438`, `omp-agent.ts:871-883` | **8 copies** |
503
- | D34 | `collectTurnEvents` (byte-identical) | `codex-agent.ts:494-501`, `claude-agent.ts:419-426`, `dsh-agent.ts:446-453`, `qwen-agent.ts:435-442`, `hermes-agent.ts:407-414`, `one-shot-cli-agent.ts:242-249` | **6 identical copies** (omp-agent.ts:145-192 is a 7th, differently implemented) |
504
-
505
- ```ts
506
- 494: protected async collectTurnEvents(prompt: string, timeoutMs: number, signal?: AbortSignal): Promise<AgentEvent[]> {
507
- 495: const events: AgentEvent[] = []
508
- 496: for await (const e of this.streamTurn(prompt, undefined, timeoutMs, signal)) {
509
- 497: events.push(e)
510
- 498: if (e.kind === 'error') break
511
- 499: }
512
- 500: return events
513
- 501: }
514
- ```
515
-
516
- ### 5.7 `dispose` / `kill` / process-management bodies
517
-
518
- | # | function | file:lines | copies |
519
- |---|---|---|---|
520
- | D35 | `dispose()` (client teardown + `markHarnessProcessExit` + pending-map timer clear) | `codex-agent.ts:112-125`, `dsh-agent.ts:116-129`, `qwen-agent.ts:140-153`, `hermes-agent.ts:95-108` | **4 near-identical** (+ variants `claude-agent.ts:113-128`, `one-shot-cli-agent.ts:148-151`, `opencode-agent.ts:181-195`, `omp-agent.ts:437-449`) |
521
- | D36 | `getProcessInfo()` | `codex-agent.ts:127-132`, `dsh-agent.ts:131-136`, `qwen-agent.ts:155-159`, `hermes-agent.ts:110-114`, `opencode-agent.ts:163-167`, `omp-agent.ts:459-464`, `one-shot-cli-agent.ts:153-157` | **7** |
522
- | D37 | `killProcess()` | `codex-agent.ts:134-138`, `dsh-agent.ts:138-142`, `qwen-agent.ts:161-165`, `hermes-agent.ts:116-120` (byte-identical 5-liners) + `opencode-agent.ts:169-173`, `omp-agent.ts:467-476` | **6** |
523
- | D38 | `reconcileProcess()` | `codex-agent.ts:140-142`, `dsh-agent.ts:144-146`, `qwen-agent.ts:167-169`, `hermes-agent.ts:122-124` (identical) + `opencode-agent.ts:175-179`, `omp-agent.ts:483-485` | **6** |
524
- | D39 | `getContextStats()` shape `{ usedTokens, contextWindow, percent, compacting }` | `codex-agent.ts:144-153`, `dsh-agent.ts:148-157`, `hermes-agent.ts:126-135`, `qwen-agent.ts:171-173`, `claude-agent.ts:139-148`, `opencode-agent.ts:199-208`, `omp-agent.ts:241-252`, `one-shot-cli-agent.ts:170-179` | **8** |
525
- | D40 | `steer()` deferred stub | `dsh-agent.ts:160-162`, `qwen-agent.ts:175-177`, `hermes-agent.ts:137-139`, `one-shot-cli-agent.ts:181-183` | **4** |
526
- | D41 | `respondHitl()` default throw | `base-agent.ts:102-110`, `one-shot-cli-agent.ts:186-188` | 2 |
527
- | D42 | `ensureClient(ctx)` guard (`if (!this.workspace) ... ; if (!this.agentInfo) { ...refreshIdentity() } ; if (client?.alive && session) return ; clientStarting ??= startClient().finally(...)`) | `codex-agent.ts:581-597`, `dsh-agent.ts:457-473`, `qwen-agent.ts:446-457`, `hermes-agent.ts:418-434`, `opencode-agent.ts:714-726` (`ensureServer`), `omp-agent.ts:1092-1103` | **6** |
528
- | D43 | `startClient()` scaffolding (`const command = config.command ?? harnessSettings().X` + `new StdioJsonRpcClient` + pidRef + onExit + `registerHarnessProcess`/`bindHarnessProcess` + handshake + session create) | `codex-agent.ts:599-664`, `dsh-agent.ts:475-545`, `qwen-agent.ts:459-511`, `hermes-agent.ts:436-497` | **4** (~60 lines each) |
529
- | D44 | `const pidRef = { pid: undefined as number \| undefined }` + `client.onExit(...)` + `registerHarnessProcess` + `bindHarnessProcess` | `codex-agent.ts:615-626`, `dsh-agent.ts:502-513`, `qwen-agent.ts:488-499`, `hermes-agent.ts:459-470`, `one-shot-cli-agent.ts:380-384`, `opencode-agent.ts:749-753` | **6** |
530
- | D45 | ACP `initialize` + version-retry + `session/new` + sessionId guard | `dsh-agent.ts:525-542`, `hermes-agent.ts:480-494` | **2 near-identical** |
531
- | D46 | `registerXxxHitl` (registry.register + `harnessSettings().hitl_timeout_ms` + `setTimeout` fail-closed) | `codex-agent.ts:505-533` and `:535-560`, `dsh-agent.ts:547-577`, `hermes-agent.ts:499-527`, `qwen-agent.ts:513-539`, `opencode-agent.ts:686-710`, `claude-agent.ts:539-562` | **7** |
532
- | D47 | `clearPending(id, resolution)` | `dsh-agent.ts:206-211`, `hermes-agent.ts:178-183` (identical), `qwen-agent.ts:196-201`, `claude-agent.ts:187-194 denyPending` | 4 |
533
- | D48 | ACP allow/reject option picking | `dsh-agent.ts:182-201`, `hermes-agent.ts:154-173` | **2 identical** |
534
- | D49 | ensure engine MCP config (read JSON → merge `mcpServers.aw` → write JSON) | `gemini-agent.ts:34-56`, `copilot-agent.ts:47-64`, `cursor-agent.ts:34-50`, `qwen-agent.ts:50-86` | **4** (+ TOML variant `codex-agent.ts:671-728`, bash variant `crush-agent.ts:35-55`) |
535
-
536
- ### 5.8 Same-key config parsing (config interfaces)
537
-
538
- | # | duplicated shape | file:lines | copies |
539
- |---|---|---|---|
540
- | D50 | `command / args / cwd / model / promptTimeoutMs / superviseTimeoutMs / systemPromptPrefix / scenarioPrompt / agentId / name / role / channelId / token / baseUrl / mcpBridgePath` re-declared | `codex-agent.ts:35-66`, `dsh-agent.ts:44-77`, `claude-agent.ts:39-61`, `hermes-agent.ts:42-62`, `qwen-agent.ts:88-109`, `opencode-agent.ts:40-78` (no index signature) and `one-shot-cli-agent.ts:82-101` (has one) | **7 interfaces**, 15 shared keys each |
541
- | D51 | `private agentRole: 'lead' \| 'worker' = 'worker'` re-declared over `base-agent.ts:54 protected agentRole` | `codex-agent.ts:77`, `claude-agent.ts:78`, `dsh-agent.ts:88`, `qwen-agent.ts:114`, `hermes-agent.ts:67`, `opencode-agent.ts:119`, `omp-agent.ts:208` | **7 copies**; compiler: `TS2415 … Property 'agentRole' is private in type 'ClaudeSdkAgentImpl' but not in type 'BaseAgentImpl'` (and the same for Hermes/Omp/Qwen); at runtime the field initializer runs **after** `super()` and overwrites the value the base constructor set — masked only because `ensureClient` re-assigns it (`dsh-agent.ts:461`, `codex-agent.ts:585`, `opencode-agent.ts:718`, `hermes-agent.ts:422`, `omp-agent.ts:1099`) |
542
- | D52 | `private readonly bridgeCtx = { identity: {...}, state: this.toolState, getWorkspace: () => this.workspace }` re-declared over `base-agent.ts:49` | `codex-agent.ts:71-75`, `dsh-agent.ts:82-86`, `opencode-agent.ts:113-117` | **3 copies**; compiler: `TS2415 … Property 'bridgeCtx' is private in type 'CodexAgentImpl' but not in type 'BaseAgentImpl'` (same for Dsh/OpenCode) |
543
- | D53 | `private supervising = false` re-declared over `base-agent.ts:135` | `opencode-agent.ts:278`, `omp-agent.ts:554` | 2; compiler `TS2415` on `opencode-agent.ts(110,14)` |
544
- | D54 | `configRecord()` return `Record<string, unknown>` with a non-index-signature config type | `codex-agent.ts:108-110`, `dsh-agent.ts:112-114`, `opencode-agent.ts:157-159` | 3; compiler `TS2322: Type 'CodexAgentConfig' is not assignable to type 'Record<string, unknown>'. Index signature for type 'string' is missing` |
545
-
546
- ### 5.9 Duplicate object keys / dead code (verified literals)
547
-
548
- | # | file:line | code |
549
- |---|---|---|
550
- | D55 | `omp-agent.ts:1112-1113` | `args: [...(this.config.thinkingLevel ? ['--thinking', this.config.thinkingLevel] : [])],` / `args: this.config.args,` — last key wins, so **`--thinking` is never passed**; compiler `omp-agent.ts(1113,9): error TS1117: An object literal cannot have multiple properties with the same name.` The monitoring registration at `omp-agent.ts:1131` repeats the same (wrong) argv: `args: ['--mode', this.rpcMode, ...(this.config.args ?? [])]` |
551
- | D56 | `goose-agent.ts:44-45` | `promptDelivery: 'arg',` twice; compiler `goose-agent.ts(45,3): error TS1117` |
552
- | D57 | `goose-agent.ts:41` | `args.push('--with-extension', \`${nodePath} ${bridgePath}\`)` — two paths pre-joined into one argv element |
553
- | D58 | `one-shot-cli-agent.ts:117` | `export class OneShotCliAgentImpl extends BaseAgentImpl implements AgentInterface {` — `AgentInterface` is only `import type` at line 20-24, which does not list it; compiler `one-shot-cli-agent.ts(117,67): error TS2304: Cannot find name 'AgentInterface'` |
554
- | D59 | `qwen-agent.ts:205-235` | third copy of `supervise()` (base `base-agent.ts:137-166`, opencode `opencode-agent.ts:280-324`) — see §4.4 for why it never works |
555
-
556
- ### 5.10 Proposal — shared base class + util module
557
-
558
- **Move into `adapters/stdio-jsonrpc.ts` (or a new `adapters/stdio-rpc-agent.ts` subclass base):**
559
- everything shared by codex / dsh / qwen / hermes —
560
- `dispose` (`codex-agent.ts:112-125`, `dsh-agent.ts:116-129`, `qwen-agent.ts:140-153`, `hermes-agent.ts:95-108`),
561
- `getProcessInfo` (D36), `killProcess` (D37), `reconcileProcess` (D38), `getContextStats` (D39),
562
- `ensureClient` (D42), the `pidRef`/`onExit`/register/bind block (D44), `startClient` scaffolding (D43),
563
- `collectTurnEvents` (D34), the `enqueue` closure (D27) and the drain loop (D29).
564
- Net: ≈ **560 lines** of the 4 ACP/JSON-RPC adapters become one ≈ 180-line base.
565
-
566
- **Move into a new `agents/harness-turn.ts` util:** the event-queue turn machine
567
- (`enqueue`, `flushDelta`/`pushDelta` when applicable, stall watchdog, `onAbort`, 5 s abort fallback,
568
- `collectTurnEvents`) currently copied as D27/D29/D30/D32/D33/D34 — ≈ **340 lines across 8 files → ≈ 70**.
569
-
570
- **Move into `prompt-builder.ts`:** `taskText`/`msgText` (D15/D16) become `partsText()` (already at
571
- `base-agent.ts:189-197`); `fromId`/`requireReply`/`crossChannel`/`replyContext` (D17) becomes
572
- `peerContext(request)`; the `workerTurn`/`peerTurn` skeletons (D18/D19) collapse into two base
573
- template methods. ≈ **300 lines → ≈ 60**.
574
-
575
- **Move into `harness-env.ts`:** D1 all 8 call sites become `bridgeEnvFor(config, selfAgentId)`; add
576
- `registerBridgeProcess(client, meta)` covering D44/D5; delete the hand-rolled duplicate at
577
- `opencode-agent.ts:786-790`.
578
-
579
- **Move into `harness-process.ts`:** add `spawnKill(pid, child)` so `stdio-jsonrpc.ts:205` and
580
- `omp-rpc-client.ts:382` use the same tree-kill as `killProcess()`; add `registerAgentProcess(child,
581
- meta)` covering D44.
582
-
583
- **Move into `agents/harness-config.ts` (new):** the merge-only MCP config writers (D49) as
584
- `mergeMcpServer(file, { type?, command, args, trust? })` + `resolveHarnessHome(root, agentId)`
585
- (covering `safeId`, D10) + `assertSafeAbsolutePath` (D11).
586
-
587
- **Move into `registry.ts`:** `resolveCommand` (D6/D7) becomes `HarnessDef.resolveCommand(config)` so
588
- both the probe (`registry.ts:125,134,…`) and the adapter read the same function.
589
-
590
- **Delete outright:** all `private agentRole` / `private bridgeCtx` / `private supervising`
591
- re-declarations (D51-D53, 12 declarations), `qwen-agent.ts:205-235` (dead override, D59), the duplicate
592
- key at `omp-agent.ts:1113` (D55) and `goose-agent.ts:45` (D56), the two redundant
593
- `generateMcpBridgeEnv` evaluations at `dsh-agent.ts:485-486` (D2).
594
-
595
- Estimated net reduction: **≈ 1 500 lines** of the ~5 000 lines currently in the 13 adapters, with the
596
- divergences in D27/D29 and D51-D54 eliminated by construction.
597
-
598
- ## 6. Registry + base class
599
-
600
- ### 6.1 Registry enumeration — complete and correct
601
-
602
- `registry.ts:109-236` `export const HARNESS_REGISTRY: Record<string, HarnessDef> = {` contains
603
- **14 entries**: `mock` (110), `omp` (119), `opencode` (128), `codex` (137), `dsh` (146), `claude` (155),
604
- `gemini` (164), `copilot` (173), `cursor` (182), `crush` (191), `goose` (200), `qwen` (209), `pi` (218),
605
- `hermes` (227).
606
- That is **exactly one entry per adapter file** (13 harness adapters + `mock-agent.ts`) — no adapter is
607
- missing and none is registered twice. `factory.ts:10-12` delegates to
608
- `registry.ts:252-258 createAgentImplByHarness`.
609
-
610
- Every entry carries a `probe`; the two in-process engines declare
611
- `probe: { inprocess: true }` — `registry.ts:116` (mock) and `registry.ts:161` (claude) — matching
612
- `harness-availability.ts:90-92`. The 11 process engines' `probe.command` uses the same
613
- `cmdFrom(c) || harnessSettings().X_command` rule as the adapters, and
614
- `settings.ts:87-98` declares exactly those 11 keys (`opencode_command … hermes_command`, no
615
- `omp_command` because `registry.ts:125` hard-codes `'omp'`, matching `omp-agent.ts:1108`
616
- `const command = this.config.command ?? 'omp'`).
617
-
618
- Cross-file enumeration gaps found (outside the agents tree but same fact source):
619
- - `plugins/dev-stability-guard.ts:16` lists only 4 harnesses (`opencode|omp|codex|dsh`).
620
- - `scripts/e2e-multi-harness.ts:166` lists 12 (identical union minus `omp`) while
621
- `harness-models.ts:265-303` covers all 13 (`case 'omp' … case 'hermes'` + `default`).
622
-
623
- ### 6.2 Which adapters do NOT extend `BaseAgentImpl`
624
-
625
- Exactly one: **`mock-agent.ts:38`**
626
-
627
- ```ts
628
- 38: export class MockAgentImpl implements AgentInterface {
629
- ```
630
-
631
- It has no `dispose`, no `killProcess`/`getProcessInfo`, no `respondHitl` and no `onTurnSettled`
632
- — consistent with its in-process nature, but it also means it does not inherit the base
633
- `run()` dispatch (`base-agent.ts:114-125`); it re-implements it at `mock-agent.ts:68-81`.
634
-
635
- Declarations (verbatim):
636
-
637
- ```ts
638
- base-agent.ts:46 export abstract class BaseAgentImpl implements AgentInterface {
639
- adapters/one-shot-cli-agent.ts:117 export class OneShotCliAgentImpl extends BaseAgentImpl implements AgentInterface {
640
- codex-agent.ts:68 export class CodexAgentImpl extends BaseAgentImpl implements AgentInterface {
641
- claude-agent.ts:75 export class ClaudeSdkAgentImpl extends BaseAgentImpl implements AgentInterface {
642
- dsh-agent.ts:79 export class DshAgentImpl extends BaseAgentImpl implements AgentInterface {
643
- qwen-agent.ts:111 export class QwenAgentImpl extends BaseAgentImpl {
644
- hermes-agent.ts:64 export class HermesAgentImpl extends BaseAgentImpl implements AgentInterface {
645
- omp-agent.ts:129 export class OmpRpcAgentImpl extends BaseAgentImpl implements AgentInterface {
646
- opencode-agent.ts:110 export class OpenCodeAgentImpl extends BaseAgentImpl implements AgentInterface {
647
- gemini-agent.ts:112 export class GeminiAgentImpl extends OneShotCliAgentImpl {
648
- copilot-agent.ts:132 export class CopilotAgentImpl extends OneShotCliAgentImpl {
649
- cursor-agent.ts:98 export class CursorAgentImpl extends OneShotCliAgentImpl {
650
- crush-agent.ts:103 export class CrushAgentImpl extends OneShotCliAgentImpl {
651
- goose-agent.ts:94 export class GooseAgentImpl extends OneShotCliAgentImpl {
652
- pi-agent.ts:104 export class PiAgentImpl extends OneShotCliAgentImpl {
653
- mock-agent.ts:38 export class MockAgentImpl implements AgentInterface {
654
- ```
655
-
656
- So: 8 direct subclasses, 6 indirect (via `OneShotCliAgentImpl`), 1 (`mock`) outside the hierarchy.
657
- `QwenAgentImpl` is the only direct subclass that omits `implements AgentInterface` (it inherits the
658
- contract structurally).
659
-
660
- Two "extends BaseAgentImpl" declarations do not actually satisfy it:
661
- `opencode-agent.ts(110,14): error TS2515: Non-abstract class 'OpenCodeAgentImpl' does not implement
662
- inherited abstract member collectTurnEvents from class 'BaseAgentImpl'` — opencode never defines
663
- `collectTurnEvents` (it routes `supervise` through its own `runTurn` instead), so the base
664
- `supervise()` at `base-agent.ts:150` would call an undefined method if the override were removed.
1
+ # Harness-adapter audit — `server/services/workshop/agents/`
2
+
3
+ Read-only audit. All 20 requested files read completely (plus `registry.ts`, `base-agent.ts`,
4
+ `prompt-builder.ts`, `mock-agent.ts`, `harness-models.ts`, `harness-terminal.ts`, `plugin-tools.ts`,
5
+ `factory.ts` and the call sites `runtime/agent-runtime.ts`, `runtime/scheduler-loop.ts`,
6
+ `runtime/manager.ts`, `plugins/workshop.ts`, `plugins/dev-stability-guard.ts`).
7
+ Scratch artifacts only: `scripts/_audit/ndjson-partial-line-repro.mjs`,
8
+ `scripts/_audit/opencode-await-ternary-repro.mjs`.
9
+
10
+ Compiler evidence: `npx tsc --noEmit --skipLibCheck --target esnext --module esnext
11
+ --moduleResolution bundler <all adapters>` (alias-resolution errors filtered out; module-internal
12
+ errors reproduced below are independent of path aliases).
13
+
14
+ ---
15
+
16
+ ## 1. Child-process lifecycle
17
+
18
+ ### 1.1 Every spawn site (complete)
19
+
20
+ | # | site | API |
21
+ |---|---|---|
22
+ | S1 | `adapters/line-spawn.ts:114` `return launchChildProcess(file, args, {` | `child_process.spawn`, `shell: false` |
23
+ | S2 | `adapters/line-spawn.ts:105` `return launchChildProcess('cmd.exe', ['/d', '/s', '/c', ...line], {` | Windows `.cmd/.bat` shim |
24
+ | S3 | `adapters/omp-rpc-client.ts:246` `this.child = spawn(command, args, {` | **bypasses line-spawn** |
25
+ | S4 | `harness-process.ts:130` `const child = spawn('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })` | tree-killer |
26
+
27
+ `spawnLineProcess` callers: `adapters/stdio-jsonrpc.ts:86`, `adapters/one-shot-cli-agent.ts:366`,
28
+ `opencode-agent.ts:734`, `harness-models.ts:53`.
29
+
30
+ S3 is a real gap: it does **not** go through `assertPlainExecutable` / `resolveOnPath` / the `cmd.exe`
31
+ shim, and it hard-codes `env: { ...process.env, ...this.options.env }` (omp-rpc-client.ts:249) so the
32
+ `cleanEnv` whitelist semantics of `line-spawn.ts:88-90` are unavailable to omp.
33
+
34
+ ### 1.2 The only tree-killer
35
+
36
+ `harness-process.ts:125-157`:
37
+
38
+ ```ts
39
+ 125: export function killHarnessProcess(pid: number): boolean {
40
+ ...
41
+ 129: if (process.platform === 'win32') {
42
+ 130: const child = spawn('taskkill', ['/pid', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
43
+ ...
44
+ 139: process.kill(-pid, 'SIGKILL')
45
+ ...
46
+ 144: process.kill(pid, 'SIGKILL')
47
+ ```
48
+
49
+ Direct single-process kills that do **not** reap grandchildren:
50
+ `adapters/stdio-jsonrpc.ts:192` `this.child?.kill('SIGKILL')`;
51
+ `adapters/stdio-jsonrpc.ts:205` `this.child?.kill('SIGKILL')`;
52
+ `adapters/omp-rpc-client.ts:237` `this.child?.kill('SIGKILL')`;
53
+ `adapters/omp-rpc-client.ts:382` `this.child?.kill('SIGKILL')`;
54
+ `adapters/one-shot-cli-agent.ts:263` `child.kill('SIGKILL')`;
55
+ `harness-models.ts:61` `child.kill('SIGKILL')`.
56
+
57
+ ### 1.3 (a) Session end / `dispose()`
58
+
59
+ Only caller: `runtime/agent-runtime.ts:363-369`
60
+
61
+ ```ts
62
+ 363: // 清理 impl 持有的资源(omp 子进程等);容错:impl.dispose 可能不存在
63
+ 364: try {
64
+ 365: await this.impl.dispose?.()
65
+ ```
66
+
67
+ reached from `manager.shutdown()` (`runtime/manager.ts:992` `await Promise.all([...this.agentIndex.values()].map(a => a.stop()))`)
68
+ and from the Nitro hook `plugins/workshop.ts:168-174` `nitroApp.hooks.hook('close', async () => { ... await manager.shutdown() ... })`.
69
+
70
+ | adapter | dispose location | child killed? |
71
+ |---|---|---|
72
+ | omp | `omp-agent.ts:437-449` `await this.client.dispose()` | **single-process only** — `omp-rpc-client.ts:369-389` `this.child?.stdin?.end()` then `this.child?.kill('SIGKILL')` (382). omp's own grandchildren survive. |
73
+ | codex | `codex-agent.ts:112-125` `await client.dispose().catch(() => {})` | same weak path via `stdio-jsonrpc.ts:195-218` |
74
+ | dsh | `dsh-agent.ts:116-129` | same |
75
+ | qwen | `qwen-agent.ts:140-153` | same |
76
+ | hermes | `hermes-agent.ts:95-108` | same |
77
+ | opencode | `opencode-agent.ts:181-195` `killHarnessProcess(pid)` (185) | **tree** ✓ (+ `this.sseAbort?.abort()` 182) |
78
+ | one-shot (gemini/copilot/cursor/crush/goose/pi) | `one-shot-cli-agent.ts:148-151` → `killChild()` (253-265) → `killHarnessProcess(pid)` (259) | **tree** ✓ |
79
+ | claude | `claude-agent.ts:113-128` `this.abortCtrl?.abort()` (120), `await this.session?.interrupt?.()` (122) | **no process kill at all**; `getProcessInfo(): null` (`claude-agent.ts:130-132` `return null // SDK 自管二进制生命周期,无宿主侧进程句柄`) |
80
+ | mock | no `dispose` method (`mock-agent.ts:38` `export class MockAgentImpl implements AgentInterface {`) | n/a (in-process) |
81
+
82
+ Asymmetry worth fixing: `killProcess()` uses the tree killer while `dispose()` on the same class does
83
+ not — e.g. `codex-agent.ts:134-138`
84
+
85
+ ```ts
86
+ 134: killProcess(): void {
87
+ 135: const pid = this.client?.pid
88
+ 136: if (pid) killHarnessProcess(pid)
89
+ 137: else this.client?.kill()
90
+ ```
91
+
92
+ vs `codex-agent.ts:118` `await client.dispose().catch(() => {})` → `stdio-jsonrpc.ts:205`.
93
+
94
+ ### 1.4 (b) Error
95
+
96
+ - `one-shot-cli-agent.ts:442-444` — `child.on('error', ...)` calls `finishTurn(...)` only and **does not
97
+ clear `this.child`** (contrast the `exit` handler `one-shot-cli-agent.ts:445-447` `this.child = null`).
98
+ A later `killChild()` (`one-shot-cli-agent.ts:253-265`) then targets a stale pid.
99
+ - `harness-models.ts:59` `child.on('error', err => reject(err))` — the promise rejects but
100
+ the timeout timer created at `harness-models.ts:60` is **never cleared** and `child.kill()` is never
101
+ called on this path.
102
+ - `stdio-jsonrpc.ts:106-109`, `omp-rpc-client.ts:280-283` — handled (reject / notifyError).
103
+
104
+ ### 1.5 (c) Timeout
105
+
106
+ | adapter | per-turn timeout | on timeout | child killed? | error to UI |
107
+ |---|---|---|---|---|
108
+ | omp | `omp-agent.ts:838` `const idleTimeoutMs = this.config.promptTimeoutMs ?? 600_000` | `omp-agent.ts:915-928` | **yes** — `client.send({ type: 'abort' })` + `this.killProcess()` + `this.client = null` | `TURN_STALLED` error event (921-927) |
109
+ | one-shot | `one-shot-cli-agent.ts:206,238` `?? 600_000` | `one-shot-cli-agent.ts:495-502` | **yes** — `this.killChild()` (496) | `TURN_STALLED` (497-501) |
110
+ | codex | `codex-agent.ts:238,278` `?? 600_000` | `codex-agent.ts:463-469` | **no** — only `turn/interrupt` (464) | `CODEX_TURN_STALLED` (466-467) |
111
+ | claude | `claude-agent.ts:221,262` | `claude-agent.ts:391-397` | no — `this.session?.interrupt?.()` (392) | `CLAUDE_TURN_STALLED` (394) |
112
+ | dsh | `dsh-agent.ts:237,277` | `dsh-agent.ts:417-423` | no — `session/cancel` notify (418) | `DSH_TURN_STALLED` (420) |
113
+ | hermes | `hermes-agent.ts:209,249` | `hermes-agent.ts:379-385` | no | `HERMES_TURN_STALLED` (382) |
114
+ | qwen | `qwen-agent.ts:259,299` | `qwen-agent.ts:407-413` | no | `QWEN_TURN_STALLED` (410) |
115
+ | opencode | `opencode-agent.ts:349,391` | `opencode-agent.ts:505-516` | no — `POST /abort` (507) | `OPENCODE_TURN_STALLED` (510) |
116
+ | mock | none | — | — | — |
117
+
118
+ Non-killing timeout paths leave the pending promise resolved (they `enqueue`), so nothing hangs — but
119
+ the child process keeps running and keeps its model turn burning tokens.
120
+
121
+ Per-request (not per-turn) timeouts: `stdio-jsonrpc.ts:133-134`
122
+ `reject(new Error(\`${this.options.name} 请求超时: ${method} (id=${id},${timeoutMs ?? this.options.requestTimeoutMs ?? 60_000}ms)\`))`
123
+ (adapters pass `requestTimeoutMs: 60_000` — codex-agent.ts:613, dsh-agent.ts:500, qwen-agent.ts:486,
124
+ hermes-agent.ts:457 — except `harness-models.ts:110` `requestTimeoutMs: 30_000`);
125
+ `omp-rpc-client.ts:309-312` `reject(new Error(\`omp RPC 命令超时: ${command.type} (id=${id})\`))`, 60 s.
126
+
127
+ ### 1.6 (d) Parent process exit — **not guaranteed**
128
+
129
+ There is **no** `process.on('exit' | 'SIGINT' | 'SIGTERM' | 'beforeExit')` anywhere under `server/`
130
+ (only `unhandledRejection`: `plugins/workshop.ts:88`, `plugins/dev-stability-guard.ts:56`;
131
+ `uncaughtException`: `plugins/dev-stability-guard.ts:59`). Cleanup depends entirely on the Nitro
132
+ `close` hook (`plugins/workshop.ts:168`). Two concrete consequence paths:
133
+
134
+ 1. `plugins/dev-stability-guard.ts:53-54`
135
+ ```ts
136
+ 53: console.error(`[stability-guard] fatal ${kind}, exiting:\n${describe(reason)}`)
137
+ 54: process.exit(1)
138
+ ```
139
+ `process.exit(1)` skips the `close` hook entirely → **every live harness child is orphaned**.
140
+ The exemption regex only knows four engines — `plugins/dev-stability-guard.ts:16`
141
+ `const ENGINE_BOUNDARY = /\b(opencode|omp|codex|dsh) API\b/i` — so failures from
142
+ claude/gemini/copilot/cursor/crush/goose/qwen/pi/hermes are not exempted.
143
+ 2. The pid registry is process-local: `harness-process.ts:36`
144
+ `const registry = new Map<number, HarnessProcessEntry>()`. After a restart, orphaned children are
145
+ unreachable — `listAliveHarnessProcessesByAgent` (`harness-process.ts:87-89`) can only see pids
146
+ registered in the current process; there is no OS process-table scan.
147
+
148
+ ### 1.7 Windows-specific handling
149
+
150
+ - `windowsHide: true` — `line-spawn.ts:109`, `line-spawn.ts:118`, `omp-rpc-client.ts:250`,
151
+ `harness-process.ts:130`.
152
+ - `.cmd/.bat` shim: `line-spawn.ts:63-66` `if (lower.endsWith('.cmd') || lower.endsWith('.bat')) return { file, needsCmd: true }`
153
+ → `line-spawn.ts:99-112` fixed `'cmd.exe'`, `/d /s /c`, per-arg `assertCmdSafeArg` (`line-spawn.ts:78-83`
154
+ `/["\r\n\0]/.test(arg)`), `windowsVerbatimArguments: true` (111).
155
+ - Tree kill is Windows-`taskkill`-only (`harness-process.ts:130`); `process.kill(-pid, 'SIGKILL')`
156
+ (`harness-process.ts:139`) is guarded by `if (process.platform === 'win32')` at line 129, so on Windows
157
+ the POSIX branch never runs.
158
+ - `process.kill(pid, 0)` liveness probe: `harness-process.ts:107-116` (EPERM treated as alive, 114).
159
+ - `resolveOnPath` PATHEXT resolution: `line-spawn.ts:29-55`, incl. `.cmd` last-resort bare name (51-53).
160
+ - `one-shot-cli-agent.ts:104-106 sanitizePromptArg` exists specifically because `arg` delivery goes
161
+ through the cmd wrapper on Windows.
162
+
163
+ ### 1.8 stdio pipes drained?
164
+
165
+ | consumer | stdout | stderr |
166
+ |---|---|---|
167
+ | `stdio-jsonrpc.ts:97-105` | drained | drained (8 KB tail) |
168
+ | `omp-rpc-client.ts:253-279` | drained (8 MB line cap) | drained (1 MB cap, `STDERR_CAP` 130) |
169
+ | `one-shot-cli-agent.ts:404-432` | drained | drained (8 KB tail) |
170
+ | `opencode-agent.ts:745-748` | **NOT drained — no `child.stdout` reference in the file** | drained |
171
+ | `harness-models.ts:55-58` | drained | **NOT drained — no `child.stderr` reference in the file** |
172
+
173
+ `opencode serve` is long-lived (`opencode-agent.ts:734`), so an unread stdout that exceeds the OS pipe
174
+ buffer will block the engine mid-turn. `harness-models.collect()` is bounded by its 45–60 s timeout
175
+ (`harness-models.ts:79,144`), so it degrades to a timeout rather than a permanent hang, but returns a
176
+ truncated catalog.
177
+
178
+ ## 2. Unhandled promise rejection risk
179
+
180
+ **Overall: floating promises are overwhelmingly `.catch()`-guarded — I found no unguarded floating
181
+ promise that could reject.** The real rejection risk is *synchronous throws inside `async` methods*
182
+ (§4.3/§4.4), which the call sites do catch.
183
+
184
+ ### 2.1 Floating calls (all verified guarded)
185
+
186
+ `void`-guarded: `omp-rpc-client.ts:466`; `omp-agent.ts:169,348,455,596,1065,1171,1172`;
187
+ `claude-agent.ts:136,379,392,521`; `codex-agent.ts:430,464,528,556`; `dsh-agent.ts:389,573`;
188
+ `qwen-agent.ts:387,535`; `hermes-agent.ts:352,523`; `opencode-agent.ts:475,507,705,892`.
189
+
190
+ Floating but `.catch()`-ed (no `void`): `omp-agent.ts:873` `client.send({ type: 'abort' }).catch(() => {})`,
191
+ `omp-agent.ts:916` same shape.
192
+
193
+ ### 2.2 `async` setTimeout/setInterval callbacks without try/catch
194
+
195
+ There is **no `setInterval`** in any of the audited files. Every timer body is synchronous; the two
196
+ async timers-adjacent loops have internal try/catch:
197
+ `opencode-agent.ts:855-891` (`const connect = async (): Promise<void> => { while (...) { try { ... } catch (err) {...} } }`)
198
+ and `claude-agent.ts:521-533` `void (async () => { try { for await (const msg of session) ... } catch ... finally ... })()`.
199
+
200
+ ### 2.3 `timer.unref()`
201
+
202
+ Exactly three uses in the whole agents tree:
203
+ `tool-approvals.ts:83` `timer.unref?.()`, `harness-terminal.ts:301` `session.parkTimer.unref?.()`,
204
+ `opencode-agent.ts:92` `srv.unref()`.
205
+ **No per-turn / stall / poll / abort-fallback timer is unref'd.** (`AbortSignal.timeout` at
206
+ `opencode-agent.ts:766,912` is fine — verified at runtime that Node unrefs it: no `Timeout` appears in
207
+ `process.getActiveResourcesInfo()` after `AbortSignal.timeout(60000)`.)
208
+
209
+ ### 2.4 Leaked timers (never cleared, never unref'd)
210
+
211
+ | file:line | timer | note |
212
+ |---|---|---|
213
+ | `omp-rpc-client.ts:294` | `setTimeout(() => { if (!this.ready) reject(new Error('omp RPC ready 超时(10s)')) }, 10_000)` | no handle stored → refs the loop 10 s after every successful `start()` |
214
+ | `omp-agent.ts:620` | `const timer = setTimeout(abortTurn, timeoutMs)` | **not** cleared on the early-return path `omp-agent.ts:625-629` `if (opts.signal.aborted) { unsub(); resolve([]); return }` → later fires `omp-agent.ts:596` `void this.client?.send({ type: 'abort' }).catch(() => {})` against the shared omp subprocess, cancelling an unrelated live turn |
215
+ | `one-shot-cli-agent.ts:506-509` | `setTimeout(() => { resolveWait = null; r() }, Math.min(remaining + 100, 5000))` | no variable |
216
+ | `codex-agent.ts:473-476` | `setTimeout(() => { resolveWait = null; r() }, remaining + 100)` | no variable |
217
+ | `claude-agent.ts:401-404` | same shape | no variable |
218
+ | `dsh-agent.ts:427-430` | same shape | no variable |
219
+ | `qwen-agent.ts:417-420` | same shape | no variable |
220
+ | `hermes-agent.ts:389-392` | same shape | no variable |
221
+ | `codex-agent.ts:431-433` | `setTimeout(() => { if (!isDone) enqueue({ kind: 'done', ... }) }, 5000)` | abort fallback |
222
+ | `claude-agent.ts:380-382`, `dsh-agent.ts:381-383`, `qwen-agent.ts:380-382`, `hermes-agent.ts:345-347` | same 5 s abort fallback | |
223
+ | `opencode-agent.ts:477` | `setTimeout(() => finishTurn(), 5000)` | abort fallback |
224
+ | `harness-models.ts:60-63` | `const timer = setTimeout(...)` | cleared only on `exit` (65); the `error` path (59) leaks it |
225
+ | `omp-agent.ts:533`, `harness-terminal.ts:545` | `setTimeout(resolve, 150)` per poll iteration | bounded by 20 s / 8 s deadlines |
226
+
227
+ Correctly-cleared counterparts (for contrast): `opencode-agent.ts:520-528,536` and
228
+ `omp-agent.ts:932-940,948`.
229
+
230
+ ### 2.5 Leaked listeners
231
+
232
+ 1. **`adapters/omp-rpc-client.ts:269`** `this.eventListeners.add(onReady as (event: AgentSessionEvent) => void)`
233
+ — added inside `start()` on every (re)spawn, never removed; only `dispose()` clears
234
+ (`omp-rpc-client.ts:397` `this.eventListeners.clear()`). `handleExit` does not. The `onReady`
235
+ closure also captures the **previous** `resolve`/`reject` of an already-settled promise.
236
+ 2. **`adapters/stdio-jsonrpc.ts:208`** `this.child.once('exit', () => { clearTimeout(timer); resolve() })`
237
+ — on the 3 s timeout path (`stdio-jsonrpc.ts:204-207`) the promise resolves via the timer branch but
238
+ this listener is left attached.
239
+ 3. `adapters/stdio-jsonrpc.ts:102-105`, `:106-109`, `:110-117` — child listeners never removed
240
+ (`removeListener`/`off(` never appears in the file); bounded by child lifetime.
241
+ 4. `harness-terminal.ts:387-393 detachTerminalTap` — clears `unsubRaw` but not `session.batchTimer`,
242
+ so the pending 50 ms flush (`harness-terminal.ts:175-181`) survives detach.
243
+ 5. `adapters/one-shot-cli-agent.ts:406,430` and `opencode-agent.ts:746` — `data` listeners never
244
+ removed; bounded per-turn (one-shot) / per-server (opencode).
245
+ 6. No `request.destroy()`, no stream `destroy()`, and no `stdin.destroy()` anywhere; the only
246
+ teardown is `stdin.end()` (`stdio-jsonrpc.ts:199`, `omp-rpc-client.ts:371`, `one-shot-cli-agent.ts:484,488`).
247
+
248
+ ### 2.6 "Dangerous by construction" — `.then()` on an `AsyncGenerator`
249
+
250
+ `opencode-agent.ts:396-402`
251
+
252
+ ```ts
253
+ 396: private runTurn(
254
+ 397: prompt: string,
255
+ 398: taskId: string | undefined,
256
+ 399: opts: { timeoutMs: number, signal?: AbortSignal, beforeStart?: () => void, onDone?: () => void },
257
+ 400: ): AsyncGenerator<AgentEvent, void, unknown> {
258
+ 401: return this._runTurn(prompt, taskId, opts)
259
+ 402: }
260
+ ```
261
+
262
+ used at `opencode-agent.ts:301-323` `return await this.runTurn(prompt, undefined, {...}).then((events) => {...})`.
263
+ Compiler: `opencode-agent.ts(310,8): error TS2339: Property 'then' does not exist on type 'AsyncGenerator<AgentEvent, void, unknown>'`.
264
+ At runtime this is `TypeError: ... .then is not a function` inside `async supervise`, contradicting the
265
+ in-file intent at `opencode-agent.ts:281-282` ("绝不让引擎故障以 unhandledRejection 形态逃逸"). It is
266
+ caught downstream by `runtime/scheduler-loop.ts:309-312`, so opencode's LLM lead-scheduling silently
267
+ degrades to the rule engine on every tick.
268
+
269
+ ## 3. NDJSON / JSON-RPC streaming correctness
270
+
271
+ | site | cross-chunk buffer | `\r\n` | split JSON line | non-JSON banner |
272
+ |---|---|---|---|---|
273
+ | `adapters/stdio-jsonrpc.ts:234-252` | ✔ | ✔ via `line.trim()` (240) | ✔ | ✔ `catch { continue }` (246-248) |
274
+ | `adapters/omp-rpc-client.ts:404-424` | ✔ | ✔ via `line.trim()` (414) | ✔ | ✔ (420-422) |
275
+ | `opencode-agent.ts:866-883` (SSE) | ✔ | ✗ only `\n\n` (870) | ✔ (871) | ✔ (877-880) |
276
+ | `adapters/one-shot-cli-agent.ts:406-428` | ✗ **BUG** | ✔ `/\r?\n/` (411) | ✗ **lost** | ✗ dropped (418) |
277
+
278
+ Correct pattern (verbatim, `stdio-jsonrpc.ts:234-238`):
279
+
280
+ ```ts
281
+ 234: private onStdout(data: string): void {
282
+ 235: this.stdoutBuf += data
283
+ 236: if (this.stdoutBuf.length > 8 * 1024 * 1024) this.stdoutBuf = ''
284
+ 237: const lines = this.stdoutBuf.split('\n')
285
+ 238: this.stdoutBuf = lines.pop() ?? ''
286
+ ```
287
+
288
+ Caveat on 236: the cap check runs *before* the split, discarding the accumulated partial line — a
289
+ single frame > 8 MB desynchronises the stream (the remainder is then parsed as a fresh line).
290
+
291
+ ### 3.1 BUG — `one-shot-cli-agent.ts:406-428` parses each chunk with no line buffering
292
+
293
+ ```ts
294
+ 406: child.stdout?.on('data', (chunk: string) => {
295
+ ...
296
+ 411: for (const rawLine of chunk.split(/\r?\n/)) {
297
+ 412: const line = rawLine.trim()
298
+ 413: if (!line) continue
299
+ 414: const json = tryParse(line)
300
+ 415: if (json === null) {
301
+ 416: // 无结构化输出面的引擎:stdout 纯文本行即回复增量;其余(横幅/告警)忽略
302
+ 417: if (this.spec.plainTextStdout === true) sink.delta(line)
303
+ 418: continue
304
+ 419: }
305
+ ```
306
+
307
+ Concrete breaking input (executed — `scripts/_audit/ndjson-partial-line-repro.mjs`), one logical
308
+ NDJSON stream delivered as two `data` events because the payload exceeds the pipe read size (64 KiB):
309
+
310
+ ```
311
+ chunk#1 {"type":"message","role":"assistant","content":"hello wor
312
+ chunk#2 ld"}\n{"type":"result","usage":{"input_tokens":42}}\n
313
+ ```
314
+
315
+ Observed:
316
+
317
+ ```
318
+ A one-shot-cli-agent.ts loop : frames=1 ["result"] drops=2 ["{\"type\":\"message\",...,\"hello wor","ld\"}"] assistantText=""
319
+ B stdio-jsonrpc.ts loop : frames=2 ["message","result"]
320
+ ```
321
+
322
+ The whole assistant message is silently lost (never becomes a `delta`), and one frame disappears.
323
+ Affects every `OneShotCliAgentImpl` subclass without `plainTextStdout`: gemini, copilot, cursor,
324
+ goose, pi. `crush` sets `plainTextStdout: true` (`crush-agent.ts:67`) so it survives but with each
325
+ fragment `.trim()`-ed (411-412), altering leading/trailing whitespace of the answer.
326
+
327
+ Additional unbounded buffer: `one-shot-cli-agent.ts:405-409`
328
+
329
+ ```ts
330
+ 405: let stdoutAll = ''
331
+ 406: child.stdout?.on('data', (chunk: string) => {
332
+ 407: if (this.spec.wholeJsonAtExit === true) {
333
+ 408: stdoutAll += chunk
334
+ ```
335
+
336
+ `stdoutAll` has no cap. Latent only — no shipped spec sets `wholeJsonAtExit`
337
+ (only `crush-agent.ts:67` sets `plainTextStdout`).
338
+
339
+ ### 3.2 SSE caveat — `opencode-agent.ts:866-883`
340
+
341
+ ```ts
342
+ 869: buf += decoder.decode(value, { stream: true })
343
+ 870: const chunks = buf.split('\n\n')
344
+ 871: buf = chunks.pop() ?? ''
345
+ ```
346
+
347
+ Correct for `\n\n`-delimited SSE. Two gaps: (a) a CRLF-delimited stream (`\r\n\r\n`) never splits and
348
+ `buf` grows without bound; (b) multi-line `data:` payloads are parsed line-by-line (873-879), so a
349
+ payload split over two `data:` lines is rejected as non-JSON and dropped (880).
350
+
351
+ ### 3.3 Non-stream splits (safe)
352
+
353
+ `harness-models.ts:82` `for (const rawLine of out.split('\n'))`, `:146`, `:184` — `out` is the fully
354
+ collected stdout string, not a chunk. No `readline` usage anywhere in the tree.
355
+
356
+ ## 4. Timeout / retry / error propagation
357
+
358
+ ### 4.1 Per-turn timeout (quoted) — see table in §1.5
359
+
360
+ Every process-based adapter has one except `mock`. All default to `600_000` ms; supervise defaults to
361
+ `150_000` (`base-agent.ts:170`, `omp-agent.ts:576`, `opencode-agent.ts:300`, `qwen-agent.ts:219`).
362
+
363
+ ### 4.2 Correct propagation to `{ kind: 'error' }`
364
+
365
+ Timeout → error event, verified for all nine: `omp-agent.ts:921-927`, `one-shot-cli-agent.ts:497-501`,
366
+ `codex-agent.ts:465-468`, `claude-agent.ts:393-396`, `dsh-agent.ts:419-422`, `hermes-agent.ts:381-384`,
367
+ `qwen-agent.ts:409-412`, `opencode-agent.ts:508-514`. Non-zero child exit → error event:
368
+ `one-shot-cli-agent.ts:469-479`
369
+
370
+ ```ts
371
+ 469: if (code === 0) {
372
+ 470: finishTurn({ kind: 'done' })
373
+ 471: }
374
+ 472: else {
375
+ 473: const custom = this.spec.exitErrorMessage?.(code ?? -1, stderrTail)
376
+ 474: finishTurn({
377
+ 475: kind: 'error',
378
+ 476: code: `${this.spec.harnessId.toUpperCase()}_EXIT_${code ?? -1}`,
379
+ ```
380
+
381
+ Spawn failure → error event: `one-shot-cli-agent.ts:368-377`, `omp-agent.ts:652-660`.
382
+
383
+ ### 4.3 Swallowed errors (verbatim)
384
+
385
+ - `base-agent.ts:160-162`
386
+ ```ts
387
+ 160: catch {
388
+ 161: return []
389
+ 162: }
390
+ ```
391
+ `supervise()` failure produces **no AgentEvent at all** — every adapter that relies on the base
392
+ implementation (all except omp/opencode/qwen) loses the reason.
393
+ - `qwen-agent.ts:229-231` — the same `catch { return [] }`, duplicated.
394
+ - `opencode-agent.ts:320-323` `}).catch(() => { this.supervising = false; return [] })` and
395
+ `opencode-agent.ts:286-289` `catch (err) { log.warn(...); return [] }`.
396
+ - `codex-agent.ts:208-210` compact failure → `log.warn(... 放行)`; `opencode-agent.ts:270-272` same.
397
+ - `codex-agent.ts:725-727` `catch (err) { log.warn(\`[CodexAgent:${this.selfAgentId}] CODEX_HOME config 写入失败(信任全局配置):\`, ...) }`
398
+ — if the MCP section is not written, the agent runs **without tools** and the turn still reports `done`.
399
+ - `opencode-agent.ts:794-796` `catch (err) { log.warn(\`[OpenCodeAgent:${this.selfAgentId}] MCP 桥注册失败(host tools 不可用):\`, ...) }` — same class of silent capability loss.
400
+ - `claude-agent.ts:527-529` `catch (err) { log.warn(\`[ClaudeSdk:${this.selfAgentId}] 消息流异常: ...\`) }` — the SDK stream dies but `streamTurn` keeps waiting until the 600 s stall timer; the UI sees nothing until then.
401
+ - `omp-rpc-client.ts:420-422` `// 非 JSON 行(理论上不应出现):忽略` and `:549-551` `// chunk 重组失败:忽略`.
402
+ - `stdio-jsonrpc.ts:246-248` `catch { continue // 非 JSON 行(横幅/日志混流)忽略 }` — combined with a lost frame this is invisible.
403
+ - `harness-models.ts:142` `catch { /* 无凭据则按未登录目录输出 */ }`, `:243` `catch { /* 无 settings.yaml/解析失败 → 仅内置目录 */ }`.
404
+
405
+ ### 4.4 `async` methods that throw before doing any work
406
+
407
+ | method | throw | compiler evidence |
408
+ |---|---|---|
409
+ | `QwenAgentImpl.supervise` | `qwen-agent.ts:209` `const prompt = supervisePrompt({` — **`supervisePrompt` is not imported** (`qwen-agent.ts:30` imports only `peerPrompt, systemManual, toolArgsPreview, workerPrompt`) → `ReferenceError`; next failure would be `qwen-agent.ts:219` `const events = await this.collectTurn(...)` (the method is `collectTurnEvents`, `qwen-agent.ts:435`) and `qwen-agent.ts:226` `extractJsonArray(text)` (also not imported) | `qwen-agent.ts(209,20): TS2304: Cannot find name 'supervisePrompt'`; `(219,33): TS2339: Property 'collectTurn' does not exist`; `(226,22): TS2304: Cannot find name 'extractJsonArray'`; `(208,14)/(217,10)/(233,12): TS2341: Property 'supervising' is private and only accessible within class 'BaseAgentImpl'` |
410
+ | `OpenCodeAgentImpl.supervise` | `opencode-agent.ts:301` `.then(...)` on an AsyncGenerator | `opencode-agent.ts(310,8): TS2339` |
411
+ | `OpenCodeAgentImpl.respondHitl` | `opencode-agent.ts:252` `if (pending.timer) clearTimeout(p.timer)` — `p` is undefined in this scope (the loop variable `p` lives at 652 and 191) → `ReferenceError` **after** the engine was already answered (241/246/249) but **before** `this.pendingHitl.delete(id)` (253) and `getHitlRegistry().resolve(...)` (254) → the local map entry and the global HITL item leak forever, and the REST caller gets a 500 (`server/api/workshop/hitl/respond.post.ts:80` `await manager.respondHarnessHitl(...)` → `runtime/manager.ts:2821` `const ok = await runtime.respondHitl(kind, id, outcome)`) | `opencode-agent.ts(252,37): TS2304: Cannot find name 'p'` |
412
+ | `OpenCodeAgentImpl.startServer` | `opencode-agent.ts:805-808` — `await` binds tighter than `?:`, so `created` is a **Promise**, not the session object, and `String(created?.id ?? '')` is always `''`; entry into the 3× retry loop at 811-815 is therefore guaranteed (≥2.5 s `await sleep(2500)`) and the first, real, session is created and abandoned | `opencode-agent.ts(808,38): TS2339: Property 'id' does not exist on type 'Promise<Record<string, unknown>>'`; reproduced in `scripts/_audit/opencode-await-ternary-repro.mjs` (`created instanceof Promise = true`, `this.sessionId = ""`) |
413
+
414
+ ```ts
415
+ 805: const created = await (this.config.permission ?? DEFAULT_PERMISSION)
416
+ 806: ? createWith({ permission: this.config.permission ?? DEFAULT_PERMISSION }).catch(() => createWith(undefined))
417
+ 807: : createWith(undefined)
418
+ 808: this.sessionId = String(created?.id ?? '')
419
+ ```
420
+
421
+ Also note the ternary condition `this.config.permission ?? DEFAULT_PERMISSION` can never be falsy
422
+ (`DEFAULT_PERMISSION` is a 4-line array literal, `opencode-agent.ts:82-86`), so the `: createWith(undefined)`
423
+ branch at 807 is dead code and `permission` is always sent on the first attempt.
424
+
425
+ ## 5. DUPLICATION INVENTORY
426
+
427
+ Line ranges are exact. "Copies" counts textual copies of the same block; near-copies with token
428
+ renames are flagged.
429
+
430
+ ### 5.1 MCP-bridge env setup (`AW_BASE_URL` / `AW_AGENT_ID` / `AW_AGENT_TOKEN`)
431
+
432
+ | # | function / block | file:lines | copies |
433
+ |---|---|---|---|
434
+ | D1 | `generateMcpBridgeEnv({ agentId, token, baseUrl, bridgePath })` call site | `codex-agent.ts:606-612`, `codex-agent.ts:690`, `claude-agent.ts:452-457`, `dsh-agent.ts:477-484`, `qwen-agent.ts:461-466`, `hermes-agent.ts:438-443`, `adapters/one-shot-cli-agent.ts:296-301`, `gemini-agent.ts:119` | **8 sites / 7 files** |
435
+ | D2 | Redundant repeat calls of the *same* expression inside one function | `dsh-agent.ts:485`, `dsh-agent.ts:486` (three identical `generateMcpBridgeEnv(...)` evaluations in one call) | 3 extra evaluations |
436
+ | D3 | Hand-rolled `AW_*` literal object duplicating `harness-env.ts:41-53` | `opencode-agent.ts:786-790` vs `harness-env.ts:44-47` | **2 copies** |
437
+ | D4 | `\` ${k} = "${v}"\`` TOML env expansion | `codex-agent.ts:691` | 1 (no dup) |
438
+ | D5 | bridge launch pair `process.execPath` + bridge path | `codex-agent.ts:695-696`, `claude-agent.ts:506-508`, `qwen-agent.ts:75`, `gemini-agent.ts:49-51`, `copilot-agent.ts:61`, `cursor-agent.ts:46`, `opencode-agent.ts:784`, `crush-agent.ts:39-43`, `goose-agent.ts:40-41` | **9 copies** |
439
+
440
+ Canonical source being duplicated: `harness-env.ts:43-48`
441
+
442
+ ```ts
443
+ 43: const bridgeEnv = {
444
+ 44: AW_BASE_URL: resolvePlatformBaseUrl(input.baseUrl),
445
+ 45: AW_AGENT_ID: input.agentId,
446
+ 46: AW_AGENT_TOKEN: input.token ?? '',
447
+ 47: AW_MCP_TOOL_TIMEOUT_MS: String(200_000),
448
+ 48: }
449
+ ```
450
+
451
+ ### 5.2 `resolveCli` / binary path resolution
452
+
453
+ | # | function | file:lines | copies |
454
+ |---|---|---|---|
455
+ | D6 | `resolveCommand` one-liner `config => (typeof config.command === 'string' && config.command.trim() !== '' ? config.command.trim() : harnessSettings().X_command)` | `gemini-agent.ts:60`, `copilot-agent.ts:85`, `cursor-agent.ts:54`, `crush-agent.ts:59`, `goose-agent.ts:33`, `pi-agent.ts:52` | **6 byte-identical copies** (only the settings key differs) |
456
+ | D7 | same rule re-implemented for the registry probe | `registry.ts:106-107` `const cmdFrom = (config) => typeof config?.command === 'string' && config.command.trim() !== '' ? config.command.trim() : ''` | +1 |
457
+ | D8 | `getProcessInfo` fallback command strings `'opencode serve' / 'dsh --profile acp' / 'qwen --experimental-acp' / 'hermes acp' / 'codex app-server'` re-stating the spawn argv | `opencode-agent.ts:166`, `dsh-agent.ts:135`, `qwen-agent.ts:158`, `hermes-agent.ts:113`, `codex-agent.ts:131` | 5 |
458
+ | D9 | PATH probing: `probeExecutable` re-implements the explicit-path test and the POSIX PATH walk already in `resolveOnPath` | `harness-availability.ts:55-67` vs `adapters/line-spawn.ts:29-55` (explicit-path test `harness-availability.ts:58` ≈ `line-spawn.ts:39`) | 2 |
459
+ | D10 | `safeId(agentId)` (identical 4-line body) | `copilot-agent.ts:28-31`, `goose-agent.ts:26-29`, `pi-agent.ts:27-30` | **3 identical copies** |
460
+ | D11 | "absolute path, no `..`" override validation | `copilot-agent.ts:37-40`, `pi-agent.ts:36-39` | 2 |
461
+
462
+ ### 5.3 `spawn` option assembly
463
+
464
+ | # | block | file:lines | copies |
465
+ |---|---|---|---|
466
+ | D12 | `stdio: ['pipe', 'pipe', 'pipe']` literal | `adapters/line-spawn.ts:106`, `:115`, `adapters/omp-rpc-client.ts:247` | 3 (omp-rpc-client bypasses the shared helper) |
467
+ | D13 | `{ cwd: this.config.cwd ?? process.cwd(), env, windowsHide: true }` + `new StdioJsonRpcClient({...})` | `codex-agent.ts:601-614`, `dsh-agent.ts:494-501`, `qwen-agent.ts:480-487`, `hermes-agent.ts:451-458`, `harness-models.ts:110` | **5 copies** |
468
+ | D14 | `env = { ...bridge.bridgeEnv, ...(engine-specific keys) }` | `dsh-agent.ts:477-493`, `qwen-agent.ts:468-474`, `hermes-agent.ts:444-449`, `one-shot-cli-agent.ts:315-318`, `gemini-agent.ts:67-70`, `copilot-agent.ts:104-107`, `cursor-agent.ts:62-64`, `crush-agent.ts:68-73`, `goose-agent.ts:47-60`, `pi-agent.ts:66-71`, `claude-agent.ts:458-462`, `opencode-agent.ts:736-740` | **12 copies** |
469
+
470
+ ### 5.4 prompt / context assembly
471
+
472
+ | # | block | file:lines | copies |
473
+ |---|---|---|---|
474
+ | D15 | `const taskText = request.message.parts.map((p) => { if ('text' in p) ... }).join('\n')` — a re-implementation of `base-agent.ts:189-197 partsText()` | `codex-agent.ts:222-228`, `claude-agent.ts:205-211`, `dsh-agent.ts:221-227`, `qwen-agent.ts:243-249`, `hermes-agent.ts:193-199`, `opencode-agent.ts:332-338`, `omp-agent.ts:669-675` | **7 copies** |
475
+ | D16 | same block for `msgText` in `peerTurn` | `codex-agent.ts:256-262`, `claude-agent.ts:240-246`, `dsh-agent.ts:255-261`, `qwen-agent.ts:277-283`, `hermes-agent.ts:227-233`, `opencode-agent.ts:369-375`, `omp-agent.ts:722-728` | **7 copies** |
476
+ | D17 | `fromId` / `requireReply` / `crossChannel` / `toolState.replyContext` prelude | `codex-agent.ts:248-255`, `claude-agent.ts:232-239`, `dsh-agent.ts:247-254`, `qwen-agent.ts:269-276`, `hermes-agent.ts:219-226`, `opencode-agent.ts:361-368`, `one-shot-cli-agent.ts:215-222`, `omp-agent.ts:719-740` | **8 copies** |
477
+ | D18 | `workerTurn` skeleton (taskId → `toolState.currentTaskId` → prompt → `yield* streamTurn`) incl. `finally { this.toolState.currentTaskId = null }` | `codex-agent.ts:216-243`, `claude-agent.ts:198-226`, `dsh-agent.ts:215-242`, `qwen-agent.ts:237-264`, `hermes-agent.ts:187-214`, `opencode-agent.ts:326-356`, `one-shot-cli-agent.ts:192-211`, `omp-agent.ts:642-688` | **8 copies** |
478
+ | D19 | `peerTurn` skeleton | `codex-agent.ts:245-279`, `claude-agent.ts:228-263`, `dsh-agent.ts:244-278`, `qwen-agent.ts:266-300`, `hermes-agent.ts:216-250`, `opencode-agent.ts:358-392`, `one-shot-cli-agent.ts:213-239`, `omp-agent.ts:695-759` | **8 copies** |
479
+ | D20 | constructor identity block `super({ agentId: typeof config.agentId === 'string' ? ... , role: config.role === 'lead' ? 'lead' : 'worker', ... })` | `codex-agent.ts:95-100`, `claude-agent.ts:96-101`, `dsh-agent.ts:99-104`, `qwen-agent.ts:123-128`, `hermes-agent.ts:76-81`, `opencode-agent.ts:144-149`, `one-shot-cli-agent.ts:130-135`, `omp-agent.ts:398-403` | **8 copies** |
480
+ | D21 | `contextPrefix()` / `systemManual()` per-turn assembly paired with `workerPrompt`/`peerPrompt` | same 8 files, `workerTurn`/`peerTurn` bodies (see D18/D19) | 8 |
481
+ | D22 | `partsText` twin in the base itself | `base-agent.ts:189-197` — canonical, already exists | (target, not duplicate) |
482
+
483
+ ### 5.5 `parseXxxLine` / event-line mappers
484
+
485
+ | # | function | file:lines | copies |
486
+ |---|---|---|---|
487
+ | D23 | ACP `pushUpdate(params)` notification mapper (`agent_message_chunk` / `tool_call` / `tool_call_update` / usage) | `dsh-agent.ts:327-371`, `hermes-agent.ts:293-336` | **2 near-identical copies (~95 %)**; only `DSH_ACP_METHODS` vs `HERMES_ACP_METHODS` and 2 comment lines differ |
488
+ | D24 | inner `statusEvent(text)` helper | `dsh-agent.ts:335-344`, `hermes-agent.ts:301-310`, `claude-agent.ts:311-316`, `opencode-agent.ts:551-558`, `one-shot-cli-agent.ts:339-348` | **5 copies** |
489
+ | D25 | `tryParse(line)` JSON guard | `one-shot-cli-agent.ts:108-115` (only one in adapters; `stdio-jsonrpc.ts:244`, `omp-rpc-client.ts:417` are inline `JSON.parse`) | 1 + 2 inline |
490
+ | D26 | engine `mapLine` dispatch tables | `gemini-agent.ts:76-108`, `copilot-agent.ts:112-129`, `cursor-agent.ts:68-95`, `crush-agent.ts:78-100`, `goose-agent.ts:61-91`, `pi-agent.ts:82-101` | 6 (shape, not text) |
491
+
492
+ ### 5.6 output accumulation loops
493
+
494
+ | # | block | file:lines | copies |
495
+ |---|---|---|---|
496
+ | D27 | `enqueue` closure (artifact-before-done + `isDone` latch + `resolveWait?.()`) | `codex-agent.ts:301-322`, `dsh-agent.ts:304-324`, `hermes-agent.ts:271-291`, `qwen-agent.ts:321-340`, `claude-agent.ts:286-303`, `opencode-agent.ts:423-446`, `one-shot-cli-agent.ts:386-402`, `omp-agent.ts:826-832` | **8** (dsh/hermes/qwen are textually identical except qwen's missing `this.turnActive = false` at dsh:314/hermes:281 — behaviourally equivalent because qwen sets it in the following branch at 332-335) |
497
+ | D28 | artifact literal `{ kind: 'artifact', artifact: { artifactId: randomUUID(), name: 'output', parts: [{ text }], lastChunk: true, totalChunks: 1 } }` | `codex-agent.ts:304-309`, `dsh-agent.ts:307-312`, `hermes-agent.ts:274-279`, `qwen-agent.ts:324-329`, `claude-agent.ts:288-293`, `one-shot-cli-agent.ts:390-395`, `opencode-agent.ts:428-433` + `:460-465`, `omp-agent.ts:1035-1044` | **9** |
498
+ | D29 | drain loop `while (!isDone \|\| queue.length > 0)` + stall watchdog + `await new Promise((r) => { resolveWait = r; setTimeout(...) })` | `codex-agent.ts:460-478`, `claude-agent.ts:388-406`, `dsh-agent.ts:414-432`, `qwen-agent.ts:404-422`, `hermes-agent.ts:376-394`, `opencode-agent.ts:502-529`, `one-shot-cli-agent.ts:492-511`, `omp-agent.ts:912-941` | **8 copies** |
499
+ | D30 | `flushDelta` / `pushDelta` 50 ms delta batching | `codex-agent.ts:324-340`, `omp-agent.ts:845-861` | 2 |
500
+ | D31 | `const queue / let isDone / let resolveWait / let lastActivity / let agentText` state prelude | 8 files (same as D29) | 8 |
501
+ | D32 | abort fallback `setTimeout(() => { if (!isDone) enqueue({ kind: 'done', ... }) }, 5000)` | `codex-agent.ts:431-433`, `claude-agent.ts:380-382`, `dsh-agent.ts:381-383`, `qwen-agent.ts:380-382`, `hermes-agent.ts:345-347`, `opencode-agent.ts:477` | **6 copies** |
502
+ | D33 | `onAbort` handler (log + engine cancel + 5 s fallback) | `codex-agent.ts:428-434`, `claude-agent.ts:377-383`, `dsh-agent.ts:378-385`, `qwen-agent.ts:377-385`, `hermes-agent.ts:342-348`, `opencode-agent.ts:472-478`, `one-shot-cli-agent.ts:434-438`, `omp-agent.ts:871-883` | **8 copies** |
503
+ | D34 | `collectTurnEvents` (byte-identical) | `codex-agent.ts:494-501`, `claude-agent.ts:419-426`, `dsh-agent.ts:446-453`, `qwen-agent.ts:435-442`, `hermes-agent.ts:407-414`, `one-shot-cli-agent.ts:242-249` | **6 identical copies** (omp-agent.ts:145-192 is a 7th, differently implemented) |
504
+
505
+ ```ts
506
+ 494: protected async collectTurnEvents(prompt: string, timeoutMs: number, signal?: AbortSignal): Promise<AgentEvent[]> {
507
+ 495: const events: AgentEvent[] = []
508
+ 496: for await (const e of this.streamTurn(prompt, undefined, timeoutMs, signal)) {
509
+ 497: events.push(e)
510
+ 498: if (e.kind === 'error') break
511
+ 499: }
512
+ 500: return events
513
+ 501: }
514
+ ```
515
+
516
+ ### 5.7 `dispose` / `kill` / process-management bodies
517
+
518
+ | # | function | file:lines | copies |
519
+ |---|---|---|---|
520
+ | D35 | `dispose()` (client teardown + `markHarnessProcessExit` + pending-map timer clear) | `codex-agent.ts:112-125`, `dsh-agent.ts:116-129`, `qwen-agent.ts:140-153`, `hermes-agent.ts:95-108` | **4 near-identical** (+ variants `claude-agent.ts:113-128`, `one-shot-cli-agent.ts:148-151`, `opencode-agent.ts:181-195`, `omp-agent.ts:437-449`) |
521
+ | D36 | `getProcessInfo()` | `codex-agent.ts:127-132`, `dsh-agent.ts:131-136`, `qwen-agent.ts:155-159`, `hermes-agent.ts:110-114`, `opencode-agent.ts:163-167`, `omp-agent.ts:459-464`, `one-shot-cli-agent.ts:153-157` | **7** |
522
+ | D37 | `killProcess()` | `codex-agent.ts:134-138`, `dsh-agent.ts:138-142`, `qwen-agent.ts:161-165`, `hermes-agent.ts:116-120` (byte-identical 5-liners) + `opencode-agent.ts:169-173`, `omp-agent.ts:467-476` | **6** |
523
+ | D38 | `reconcileProcess()` | `codex-agent.ts:140-142`, `dsh-agent.ts:144-146`, `qwen-agent.ts:167-169`, `hermes-agent.ts:122-124` (identical) + `opencode-agent.ts:175-179`, `omp-agent.ts:483-485` | **6** |
524
+ | D39 | `getContextStats()` shape `{ usedTokens, contextWindow, percent, compacting }` | `codex-agent.ts:144-153`, `dsh-agent.ts:148-157`, `hermes-agent.ts:126-135`, `qwen-agent.ts:171-173`, `claude-agent.ts:139-148`, `opencode-agent.ts:199-208`, `omp-agent.ts:241-252`, `one-shot-cli-agent.ts:170-179` | **8** |
525
+ | D40 | `steer()` deferred stub | `dsh-agent.ts:160-162`, `qwen-agent.ts:175-177`, `hermes-agent.ts:137-139`, `one-shot-cli-agent.ts:181-183` | **4** |
526
+ | D41 | `respondHitl()` default throw | `base-agent.ts:102-110`, `one-shot-cli-agent.ts:186-188` | 2 |
527
+ | D42 | `ensureClient(ctx)` guard (`if (!this.workspace) ... ; if (!this.agentInfo) { ...refreshIdentity() } ; if (client?.alive && session) return ; clientStarting ??= startClient().finally(...)`) | `codex-agent.ts:581-597`, `dsh-agent.ts:457-473`, `qwen-agent.ts:446-457`, `hermes-agent.ts:418-434`, `opencode-agent.ts:714-726` (`ensureServer`), `omp-agent.ts:1092-1103` | **6** |
528
+ | D43 | `startClient()` scaffolding (`const command = config.command ?? harnessSettings().X` + `new StdioJsonRpcClient` + pidRef + onExit + `registerHarnessProcess`/`bindHarnessProcess` + handshake + session create) | `codex-agent.ts:599-664`, `dsh-agent.ts:475-545`, `qwen-agent.ts:459-511`, `hermes-agent.ts:436-497` | **4** (~60 lines each) |
529
+ | D44 | `const pidRef = { pid: undefined as number \| undefined }` + `client.onExit(...)` + `registerHarnessProcess` + `bindHarnessProcess` | `codex-agent.ts:615-626`, `dsh-agent.ts:502-513`, `qwen-agent.ts:488-499`, `hermes-agent.ts:459-470`, `one-shot-cli-agent.ts:380-384`, `opencode-agent.ts:749-753` | **6** |
530
+ | D45 | ACP `initialize` + version-retry + `session/new` + sessionId guard | `dsh-agent.ts:525-542`, `hermes-agent.ts:480-494` | **2 near-identical** |
531
+ | D46 | `registerXxxHitl` (registry.register + `harnessSettings().hitl_timeout_ms` + `setTimeout` fail-closed) | `codex-agent.ts:505-533` and `:535-560`, `dsh-agent.ts:547-577`, `hermes-agent.ts:499-527`, `qwen-agent.ts:513-539`, `opencode-agent.ts:686-710`, `claude-agent.ts:539-562` | **7** |
532
+ | D47 | `clearPending(id, resolution)` | `dsh-agent.ts:206-211`, `hermes-agent.ts:178-183` (identical), `qwen-agent.ts:196-201`, `claude-agent.ts:187-194 denyPending` | 4 |
533
+ | D48 | ACP allow/reject option picking | `dsh-agent.ts:182-201`, `hermes-agent.ts:154-173` | **2 identical** |
534
+ | D49 | ensure engine MCP config (read JSON → merge `mcpServers.aw` → write JSON) | `gemini-agent.ts:34-56`, `copilot-agent.ts:47-64`, `cursor-agent.ts:34-50`, `qwen-agent.ts:50-86` | **4** (+ TOML variant `codex-agent.ts:671-728`, bash variant `crush-agent.ts:35-55`) |
535
+
536
+ ### 5.8 Same-key config parsing (config interfaces)
537
+
538
+ | # | duplicated shape | file:lines | copies |
539
+ |---|---|---|---|
540
+ | D50 | `command / args / cwd / model / promptTimeoutMs / superviseTimeoutMs / systemPromptPrefix / scenarioPrompt / agentId / name / role / channelId / token / baseUrl / mcpBridgePath` re-declared | `codex-agent.ts:35-66`, `dsh-agent.ts:44-77`, `claude-agent.ts:39-61`, `hermes-agent.ts:42-62`, `qwen-agent.ts:88-109`, `opencode-agent.ts:40-78` (no index signature) and `one-shot-cli-agent.ts:82-101` (has one) | **7 interfaces**, 15 shared keys each |
541
+ | D51 | `private agentRole: 'lead' \| 'worker' = 'worker'` re-declared over `base-agent.ts:54 protected agentRole` | `codex-agent.ts:77`, `claude-agent.ts:78`, `dsh-agent.ts:88`, `qwen-agent.ts:114`, `hermes-agent.ts:67`, `opencode-agent.ts:119`, `omp-agent.ts:208` | **7 copies**; compiler: `TS2415 … Property 'agentRole' is private in type 'ClaudeSdkAgentImpl' but not in type 'BaseAgentImpl'` (and the same for Hermes/Omp/Qwen); at runtime the field initializer runs **after** `super()` and overwrites the value the base constructor set — masked only because `ensureClient` re-assigns it (`dsh-agent.ts:461`, `codex-agent.ts:585`, `opencode-agent.ts:718`, `hermes-agent.ts:422`, `omp-agent.ts:1099`) |
542
+ | D52 | `private readonly bridgeCtx = { identity: {...}, state: this.toolState, getWorkspace: () => this.workspace }` re-declared over `base-agent.ts:49` | `codex-agent.ts:71-75`, `dsh-agent.ts:82-86`, `opencode-agent.ts:113-117` | **3 copies**; compiler: `TS2415 … Property 'bridgeCtx' is private in type 'CodexAgentImpl' but not in type 'BaseAgentImpl'` (same for Dsh/OpenCode) |
543
+ | D53 | `private supervising = false` re-declared over `base-agent.ts:135` | `opencode-agent.ts:278`, `omp-agent.ts:554` | 2; compiler `TS2415` on `opencode-agent.ts(110,14)` |
544
+ | D54 | `configRecord()` return `Record<string, unknown>` with a non-index-signature config type | `codex-agent.ts:108-110`, `dsh-agent.ts:112-114`, `opencode-agent.ts:157-159` | 3; compiler `TS2322: Type 'CodexAgentConfig' is not assignable to type 'Record<string, unknown>'. Index signature for type 'string' is missing` |
545
+
546
+ ### 5.9 Duplicate object keys / dead code (verified literals)
547
+
548
+ | # | file:line | code |
549
+ |---|---|---|
550
+ | D55 | `omp-agent.ts:1112-1113` | `args: [...(this.config.thinkingLevel ? ['--thinking', this.config.thinkingLevel] : [])],` / `args: this.config.args,` — last key wins, so **`--thinking` is never passed**; compiler `omp-agent.ts(1113,9): error TS1117: An object literal cannot have multiple properties with the same name.` The monitoring registration at `omp-agent.ts:1131` repeats the same (wrong) argv: `args: ['--mode', this.rpcMode, ...(this.config.args ?? [])]` |
551
+ | D56 | `goose-agent.ts:44-45` | `promptDelivery: 'arg',` twice; compiler `goose-agent.ts(45,3): error TS1117` |
552
+ | D57 | `goose-agent.ts:41` | `args.push('--with-extension', \`${nodePath} ${bridgePath}\`)` — two paths pre-joined into one argv element |
553
+ | D58 | `one-shot-cli-agent.ts:117` | `export class OneShotCliAgentImpl extends BaseAgentImpl implements AgentInterface {` — `AgentInterface` is only `import type` at line 20-24, which does not list it; compiler `one-shot-cli-agent.ts(117,67): error TS2304: Cannot find name 'AgentInterface'` |
554
+ | D59 | `qwen-agent.ts:205-235` | third copy of `supervise()` (base `base-agent.ts:137-166`, opencode `opencode-agent.ts:280-324`) — see §4.4 for why it never works |
555
+
556
+ ### 5.10 Proposal — shared base class + util module
557
+
558
+ **Move into `adapters/stdio-jsonrpc.ts` (or a new `adapters/stdio-rpc-agent.ts` subclass base):**
559
+ everything shared by codex / dsh / qwen / hermes —
560
+ `dispose` (`codex-agent.ts:112-125`, `dsh-agent.ts:116-129`, `qwen-agent.ts:140-153`, `hermes-agent.ts:95-108`),
561
+ `getProcessInfo` (D36), `killProcess` (D37), `reconcileProcess` (D38), `getContextStats` (D39),
562
+ `ensureClient` (D42), the `pidRef`/`onExit`/register/bind block (D44), `startClient` scaffolding (D43),
563
+ `collectTurnEvents` (D34), the `enqueue` closure (D27) and the drain loop (D29).
564
+ Net: ≈ **560 lines** of the 4 ACP/JSON-RPC adapters become one ≈ 180-line base.
565
+
566
+ **Move into a new `agents/harness-turn.ts` util:** the event-queue turn machine
567
+ (`enqueue`, `flushDelta`/`pushDelta` when applicable, stall watchdog, `onAbort`, 5 s abort fallback,
568
+ `collectTurnEvents`) currently copied as D27/D29/D30/D32/D33/D34 — ≈ **340 lines across 8 files → ≈ 70**.
569
+
570
+ **Move into `prompt-builder.ts`:** `taskText`/`msgText` (D15/D16) become `partsText()` (already at
571
+ `base-agent.ts:189-197`); `fromId`/`requireReply`/`crossChannel`/`replyContext` (D17) becomes
572
+ `peerContext(request)`; the `workerTurn`/`peerTurn` skeletons (D18/D19) collapse into two base
573
+ template methods. ≈ **300 lines → ≈ 60**.
574
+
575
+ **Move into `harness-env.ts`:** D1 all 8 call sites become `bridgeEnvFor(config, selfAgentId)`; add
576
+ `registerBridgeProcess(client, meta)` covering D44/D5; delete the hand-rolled duplicate at
577
+ `opencode-agent.ts:786-790`.
578
+
579
+ **Move into `harness-process.ts`:** add `spawnKill(pid, child)` so `stdio-jsonrpc.ts:205` and
580
+ `omp-rpc-client.ts:382` use the same tree-kill as `killProcess()`; add `registerAgentProcess(child,
581
+ meta)` covering D44.
582
+
583
+ **Move into `agents/harness-config.ts` (new):** the merge-only MCP config writers (D49) as
584
+ `mergeMcpServer(file, { type?, command, args, trust? })` + `resolveHarnessHome(root, agentId)`
585
+ (covering `safeId`, D10) + `assertSafeAbsolutePath` (D11).
586
+
587
+ **Move into `registry.ts`:** `resolveCommand` (D6/D7) becomes `HarnessDef.resolveCommand(config)` so
588
+ both the probe (`registry.ts:125,134,…`) and the adapter read the same function.
589
+
590
+ **Delete outright:** all `private agentRole` / `private bridgeCtx` / `private supervising`
591
+ re-declarations (D51-D53, 12 declarations), `qwen-agent.ts:205-235` (dead override, D59), the duplicate
592
+ key at `omp-agent.ts:1113` (D55) and `goose-agent.ts:45` (D56), the two redundant
593
+ `generateMcpBridgeEnv` evaluations at `dsh-agent.ts:485-486` (D2).
594
+
595
+ Estimated net reduction: **≈ 1 500 lines** of the ~5 000 lines currently in the 13 adapters, with the
596
+ divergences in D27/D29 and D51-D54 eliminated by construction.
597
+
598
+ ## 6. Registry + base class
599
+
600
+ ### 6.1 Registry enumeration — complete and correct
601
+
602
+ `registry.ts:109-236` `export const HARNESS_REGISTRY: Record<string, HarnessDef> = {` contains
603
+ **14 entries**: `mock` (110), `omp` (119), `opencode` (128), `codex` (137), `dsh` (146), `claude` (155),
604
+ `gemini` (164), `copilot` (173), `cursor` (182), `crush` (191), `goose` (200), `qwen` (209), `pi` (218),
605
+ `hermes` (227).
606
+ That is **exactly one entry per adapter file** (13 harness adapters + `mock-agent.ts`) — no adapter is
607
+ missing and none is registered twice. `factory.ts:10-12` delegates to
608
+ `registry.ts:252-258 createAgentImplByHarness`.
609
+
610
+ Every entry carries a `probe`; the two in-process engines declare
611
+ `probe: { inprocess: true }` — `registry.ts:116` (mock) and `registry.ts:161` (claude) — matching
612
+ `harness-availability.ts:90-92`. The 11 process engines' `probe.command` uses the same
613
+ `cmdFrom(c) || harnessSettings().X_command` rule as the adapters, and
614
+ `settings.ts:87-98` declares exactly those 11 keys (`opencode_command … hermes_command`, no
615
+ `omp_command` because `registry.ts:125` hard-codes `'omp'`, matching `omp-agent.ts:1108`
616
+ `const command = this.config.command ?? 'omp'`).
617
+
618
+ Cross-file enumeration gaps found (outside the agents tree but same fact source):
619
+ - `plugins/dev-stability-guard.ts:16` lists only 4 harnesses (`opencode|omp|codex|dsh`).
620
+ - `scripts/e2e-multi-harness.ts:166` lists 12 (identical union minus `omp`) while
621
+ `harness-models.ts:265-303` covers all 13 (`case 'omp' … case 'hermes'` + `default`).
622
+
623
+ ### 6.2 Which adapters do NOT extend `BaseAgentImpl`
624
+
625
+ Exactly one: **`mock-agent.ts:38`**
626
+
627
+ ```ts
628
+ 38: export class MockAgentImpl implements AgentInterface {
629
+ ```
630
+
631
+ It has no `dispose`, no `killProcess`/`getProcessInfo`, no `respondHitl` and no `onTurnSettled`
632
+ — consistent with its in-process nature, but it also means it does not inherit the base
633
+ `run()` dispatch (`base-agent.ts:114-125`); it re-implements it at `mock-agent.ts:68-81`.
634
+
635
+ Declarations (verbatim):
636
+
637
+ ```ts
638
+ base-agent.ts:46 export abstract class BaseAgentImpl implements AgentInterface {
639
+ adapters/one-shot-cli-agent.ts:117 export class OneShotCliAgentImpl extends BaseAgentImpl implements AgentInterface {
640
+ codex-agent.ts:68 export class CodexAgentImpl extends BaseAgentImpl implements AgentInterface {
641
+ claude-agent.ts:75 export class ClaudeSdkAgentImpl extends BaseAgentImpl implements AgentInterface {
642
+ dsh-agent.ts:79 export class DshAgentImpl extends BaseAgentImpl implements AgentInterface {
643
+ qwen-agent.ts:111 export class QwenAgentImpl extends BaseAgentImpl {
644
+ hermes-agent.ts:64 export class HermesAgentImpl extends BaseAgentImpl implements AgentInterface {
645
+ omp-agent.ts:129 export class OmpRpcAgentImpl extends BaseAgentImpl implements AgentInterface {
646
+ opencode-agent.ts:110 export class OpenCodeAgentImpl extends BaseAgentImpl implements AgentInterface {
647
+ gemini-agent.ts:112 export class GeminiAgentImpl extends OneShotCliAgentImpl {
648
+ copilot-agent.ts:132 export class CopilotAgentImpl extends OneShotCliAgentImpl {
649
+ cursor-agent.ts:98 export class CursorAgentImpl extends OneShotCliAgentImpl {
650
+ crush-agent.ts:103 export class CrushAgentImpl extends OneShotCliAgentImpl {
651
+ goose-agent.ts:94 export class GooseAgentImpl extends OneShotCliAgentImpl {
652
+ pi-agent.ts:104 export class PiAgentImpl extends OneShotCliAgentImpl {
653
+ mock-agent.ts:38 export class MockAgentImpl implements AgentInterface {
654
+ ```
655
+
656
+ So: 8 direct subclasses, 6 indirect (via `OneShotCliAgentImpl`), 1 (`mock`) outside the hierarchy.
657
+ `QwenAgentImpl` is the only direct subclass that omits `implements AgentInterface` (it inherits the
658
+ contract structurally).
659
+
660
+ Two "extends BaseAgentImpl" declarations do not actually satisfy it:
661
+ `opencode-agent.ts(110,14): error TS2515: Non-abstract class 'OpenCodeAgentImpl' does not implement
662
+ inherited abstract member collectTurnEvents from class 'BaseAgentImpl'` — opencode never defines
663
+ `collectTurnEvents` (it routes `supervise` through its own `runTurn` instead), so the base
664
+ `supervise()` at `base-agent.ts:150` would call an undefined method if the override were removed.