agentworkshop 0.8.3 → 0.8.5

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 (2251) hide show
  1. package/.AgentWorkShop/prompts/host-tools.en.json +174 -0
  2. package/.AgentWorkShop/prompts/host-tools.json +6 -2
  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 +6 -2
  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/-gy9k_TE2.js +1 -0
  14. package/.output/public/_nuxt/26OL4Ao82.js +1 -0
  15. package/.output/public/_nuxt/6P4ZAzxa2.js +1 -0
  16. package/.output/public/_nuxt/7OZQiw002.js +1 -0
  17. package/.output/public/_nuxt/8b9CKi6F.js +1 -0
  18. package/.output/public/_nuxt/AQuNRC4D.js +36 -0
  19. package/.output/public/_nuxt/Aoz9xMB92.js +1 -0
  20. package/.output/public/_nuxt/B0UUODeh.js +1 -0
  21. package/.output/public/_nuxt/B4GOTVfN.js +1 -0
  22. package/.output/public/_nuxt/BBhroEeN.js +1 -0
  23. package/.output/public/_nuxt/BHxG41IQ2.js +1 -0
  24. package/.output/public/_nuxt/BPUQZ9Lq2.js +8 -0
  25. package/.output/public/_nuxt/BSxcHoiy.js +1 -0
  26. package/.output/public/_nuxt/BVg2R2VB2.js +1 -0
  27. package/.output/public/_nuxt/BY2u4LPg.js +1 -0
  28. package/.output/public/_nuxt/BZg_MIK42.js +1 -0
  29. package/.output/public/_nuxt/BaYDgyaR.js +3 -0
  30. package/.output/public/_nuxt/BfvuWqSa.js +1 -0
  31. package/.output/public/_nuxt/BkEokGX5.js +1 -0
  32. package/.output/public/_nuxt/BkO5WdX5.js +1 -0
  33. package/.output/public/_nuxt/BqBTlfiz.js +1 -0
  34. package/.output/public/_nuxt/Br_q4qi72.js +1 -0
  35. package/.output/public/_nuxt/BtZKe9ZV2.js +1 -0
  36. package/.output/public/_nuxt/BwOko01T.js +47 -0
  37. package/.output/public/_nuxt/BzBBEE-o2.js +1 -0
  38. package/.output/public/_nuxt/C0Db9tR_2.js +1 -0
  39. package/.output/public/_nuxt/C3vxePED.js +21 -0
  40. package/.output/public/_nuxt/C4tXwpSt.js +1 -0
  41. package/.output/public/_nuxt/CBkXv24C2.js +1 -0
  42. package/.output/public/_nuxt/CCI-fwcS2.js +1 -0
  43. package/.output/public/_nuxt/CGf9neEK2.js +1 -0
  44. package/.output/public/_nuxt/CGviZq4E.js +1 -0
  45. package/.output/public/_nuxt/CNRjkgAZ2.js +1 -0
  46. package/.output/public/_nuxt/CNrRZmSx2.js +1 -0
  47. package/.output/public/_nuxt/CQ31GiJU2.js +1 -0
  48. package/.output/public/_nuxt/CY_7u1ST2.js +2 -0
  49. package/.output/public/_nuxt/CZJ5cw6r2.js +1 -0
  50. package/.output/public/_nuxt/ChF6qLpY2.js +1 -0
  51. package/.output/public/_nuxt/CjdxNYpU2.js +1 -0
  52. package/.output/public/_nuxt/CmuGMxDP.js +1 -0
  53. package/.output/public/_nuxt/Co8Dcx132.js +1 -0
  54. package/.output/public/_nuxt/Cr2xJ_CY.js +1 -0
  55. package/.output/public/_nuxt/Cy_HDgSl.js +20 -0
  56. package/.output/public/_nuxt/D1thFC3z.js +1 -0
  57. package/.output/public/_nuxt/D8AvmPUH.js +1 -0
  58. package/.output/public/_nuxt/D9GoOkyP2.js +1 -0
  59. package/.output/public/_nuxt/D9ppMCbw.js +1 -0
  60. package/.output/public/_nuxt/DGmFHb7m.js +1 -0
  61. package/.output/public/_nuxt/DH_oqyfL.js +1 -0
  62. package/.output/public/_nuxt/DJaGVY4v2.js +1 -0
  63. package/.output/public/_nuxt/DOUuGOQR2.js +2 -0
  64. package/.output/public/_nuxt/DYQBIsiV2.js +1 -0
  65. package/.output/public/_nuxt/DZqVVvR0.js +1 -0
  66. package/.output/public/_nuxt/DZzbCFY2.js +1 -0
  67. package/.output/public/_nuxt/DmReUFK1.js +1 -0
  68. package/.output/public/_nuxt/DnuJ66Jy.js +1 -0
  69. package/.output/public/_nuxt/DuUc4bbY2.js +1 -0
  70. package/.output/public/_nuxt/EJkmXP432.js +1 -0
  71. package/.output/public/_nuxt/OmpTerminalPanel.ComMDrA8.css +1 -0
  72. package/.output/public/_nuxt/PbzVdCTA2.js +1 -0
  73. package/.output/public/_nuxt/PluginSlot.CGH0vb95.css +1 -0
  74. package/.output/public/_nuxt/SgsmmrsZ.js +1 -0
  75. package/.output/public/_nuxt/TownView.CC3t-Dte.css +1 -0
  76. package/.output/public/_nuxt/U_n8pryv2.js +1 -0
  77. package/.output/public/_nuxt/Ud9o8ItR2.js +1 -0
  78. package/.output/public/_nuxt/W0sNnJQh.js +1 -0
  79. package/.output/public/_nuxt/_id_.BQRWK7J2.css +1 -0
  80. package/.output/public/_nuxt/_wsId_.CQMH8t8j.css +1 -0
  81. package/.output/public/_nuxt/ae2-5ZPt.js +1 -0
  82. package/.output/public/_nuxt/agents.D-JPovTZ.css +1 -0
  83. package/.output/public/_nuxt/aml.PalMp-5n.css +1 -0
  84. package/.output/public/_nuxt/board.BxLE52BL.css +1 -0
  85. package/.output/public/_nuxt/builds/latest.json +1 -1
  86. package/.output/public/_nuxt/builds/meta/5cd11284-05bf-4fcd-9a69-56a01c9f56dd.json +1 -0
  87. package/.output/public/_nuxt/byZYInPk2.js +1 -0
  88. package/.output/public/_nuxt/dHwWyr6b.js +1 -0
  89. package/.output/public/_nuxt/default.BEXGWZFQ.css +1 -0
  90. package/.output/public/_nuxt/entry.D6nBdXet.css +1 -0
  91. package/.output/public/_nuxt/fIV9zbnA.js +1 -0
  92. package/.output/public/_nuxt/gUYi1hLJ2.js +16 -0
  93. package/.output/public/_nuxt/iqxZGXsY.js +1 -0
  94. package/.output/public/_nuxt/logs.BkJPbR_K.css +1 -0
  95. package/.output/public/_nuxt/m6G-kfdj.js +1 -0
  96. package/.output/public/_nuxt/monitor.D3yEqqrv.css +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/_nuxt/zWZ26UWi.js +1 -0
  112. package/.output/public/favicon.svg +14 -14
  113. package/.output/public/robots.txt +3 -3
  114. package/.output/server/chunks/_/LeftOutlined.mjs.map +1 -1
  115. package/.output/server/chunks/_/RightOutlined.mjs.map +1 -1
  116. package/.output/server/chunks/_/SearchOutlined.mjs +1261 -1230
  117. package/.output/server/chunks/_/SearchOutlined.mjs.map +1 -1
  118. package/.output/server/chunks/_/access.mjs +15 -27
  119. package/.output/server/chunks/_/access.mjs.map +1 -1
  120. package/.output/server/chunks/_/catalog-view.mjs +1 -1
  121. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  122. package/.output/server/chunks/_/chart-repo.mjs +15 -2
  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-db.mjs +12 -0
  129. package/.output/server/chunks/_/eda-db.mjs.map +1 -1
  130. package/.output/server/chunks/_/eda-run.repo.mjs +3 -3
  131. package/.output/server/chunks/_/error-500.mjs.map +1 -1
  132. package/.output/server/chunks/_/features.mjs +6 -6
  133. package/.output/server/chunks/_/golden.mjs +3 -3
  134. package/.output/server/chunks/_/host-bindings.mjs +2 -2
  135. package/.output/server/chunks/_/index.mjs +2 -2
  136. package/.output/server/chunks/_/mes-console.mjs +1 -1
  137. package/.output/server/chunks/_/mes-secrets.repo.mjs +107 -0
  138. package/.output/server/chunks/_/mes-secrets.repo.mjs.map +1 -0
  139. package/.output/server/chunks/_/nitro.mjs +5404 -3844
  140. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  141. package/.output/server/chunks/_/ocap.mjs +1 -1
  142. package/.output/server/chunks/_/rest-auth.mjs +1 -1
  143. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  144. package/.output/server/chunks/_/spc.mjs +2 -2
  145. package/.output/server/chunks/_/template-repo.mjs +97 -0
  146. package/.output/server/chunks/_/template-repo.mjs.map +1 -0
  147. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs +716 -0
  148. package/.output/server/chunks/build/AuthGate-nF1evO4v.mjs.map +1 -0
  149. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs +72 -0
  150. package/.output/server/chunks/build/FormItemContext-BlyzocS0.mjs.map +1 -0
  151. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs +942 -0
  152. package/.output/server/chunks/build/OmpTerminalPanel-BhvhQ1gG.mjs.map +1 -0
  153. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs +141 -0
  154. package/.output/server/chunks/build/PluginSlot-BUKXwV2X.mjs.map +1 -0
  155. package/.output/server/chunks/build/TownView-BWMDbosY.mjs +6489 -0
  156. package/.output/server/chunks/build/TownView-BWMDbosY.mjs.map +1 -0
  157. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs +392 -0
  158. package/.output/server/chunks/build/_id_-BK-t8nRG.mjs.map +1 -0
  159. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs +2045 -0
  160. package/.output/server/chunks/build/_id_-CZPlPDm4.mjs.map +1 -0
  161. package/.output/server/chunks/build/_wsId_-C871SDPN.mjs +14589 -0
  162. package/.output/server/chunks/build/_wsId_-C871SDPN.mjs.map +1 -0
  163. package/.output/server/chunks/build/agents-D7CdEUTv.mjs +1078 -0
  164. package/.output/server/chunks/build/agents-D7CdEUTv.mjs.map +1 -0
  165. package/.output/server/chunks/build/alert-D0ivtTGy.mjs +263 -0
  166. package/.output/server/chunks/build/alert-D0ivtTGy.mjs.map +1 -0
  167. package/.output/server/chunks/build/aml-DRAFRcGU.mjs +814 -0
  168. package/.output/server/chunks/build/aml-DRAFRcGU.mjs.map +1 -0
  169. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs +533 -0
  170. package/.output/server/chunks/build/analysis-p-dBkjoK.mjs.map +1 -0
  171. package/.output/server/chunks/build/api-B4Om0mEc.mjs +53 -0
  172. package/.output/server/chunks/build/api-B4Om0mEc.mjs.map +1 -0
  173. package/.output/server/chunks/build/api-BEW_ebY_.mjs +64 -0
  174. package/.output/server/chunks/build/api-BEW_ebY_.mjs.map +1 -0
  175. package/.output/server/chunks/build/api-BsAgXWxi.mjs +72 -0
  176. package/.output/server/chunks/build/api-BsAgXWxi.mjs.map +1 -0
  177. package/.output/server/chunks/build/api-error-BwAQLw44.mjs +47 -0
  178. package/.output/server/chunks/build/api-error-BwAQLw44.mjs.map +1 -0
  179. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs +81 -0
  180. package/.output/server/chunks/build/apiClient-BvXtNzC8.mjs.map +1 -0
  181. package/.output/server/chunks/build/board-CJUc032b.mjs +189 -0
  182. package/.output/server/chunks/build/board-CJUc032b.mjs.map +1 -0
  183. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +94 -81
  184. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -1
  185. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs +953 -0
  186. package/.output/server/chunks/build/card-Cqk0Ur-L.mjs.map +1 -0
  187. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs +942 -0
  188. package/.output/server/chunks/build/channel-templates-ggsBacZF.mjs.map +1 -0
  189. package/.output/server/chunks/build/chart-pipeline-BpoWYMK_.mjs +233 -0
  190. package/.output/server/chunks/build/chart-pipeline-BpoWYMK_.mjs.map +1 -0
  191. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs +112 -113
  192. package/.output/server/chunks/build/chart-trend-BWeZh5Lv.mjs.map +1 -1
  193. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs +439 -0
  194. package/.output/server/chunks/build/checkbox-CrT4cnfu.mjs.map +1 -0
  195. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs +43 -0
  196. package/.output/server/chunks/build/client-only-qNA2OVV_.mjs.map +1 -0
  197. package/.output/server/chunks/build/constants-HPHJvjne.mjs +76 -66
  198. package/.output/server/chunks/build/constants-HPHJvjne.mjs.map +1 -1
  199. package/.output/server/chunks/build/core-CgTOPS4t.mjs +294 -0
  200. package/.output/server/chunks/build/core-CgTOPS4t.mjs.map +1 -0
  201. package/.output/server/chunks/build/daq-CdxcfY_G.mjs +1266 -0
  202. package/.output/server/chunks/build/daq-CdxcfY_G.mjs.map +1 -0
  203. package/.output/server/chunks/build/data-D8uX1dnm.mjs +481 -0
  204. package/.output/server/chunks/build/data-D8uX1dnm.mjs.map +1 -0
  205. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs +505 -0
  206. package/.output/server/chunks/build/dcw-BlDQtS4q.mjs.map +1 -0
  207. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs +15 -3
  208. package/.output/server/chunks/build/dcw-driver-badge-Df5wL_ZA.mjs.map +1 -1
  209. package/.output/server/chunks/build/default-CNWS6NUw.mjs +2353 -0
  210. package/.output/server/chunks/build/default-CNWS6NUw.mjs.map +1 -0
  211. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs +406 -0
  212. package/.output/server/chunks/build/descriptions-BNlfKG9y.mjs.map +1 -0
  213. package/.output/server/chunks/build/drawer-Caji0PLs.mjs +834 -0
  214. package/.output/server/chunks/build/drawer-Caji0PLs.mjs.map +1 -0
  215. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs +14 -0
  216. package/.output/server/chunks/build/dropdown-BNwTVGde.mjs.map +1 -0
  217. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs +540 -0
  218. package/.output/server/chunks/build/dropdown-Cd-xPhR6.mjs.map +1 -0
  219. package/.output/server/chunks/build/es-Bxu10NJ2.mjs +43 -0
  220. package/.output/server/chunks/build/es-Bxu10NJ2.mjs.map +1 -0
  221. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs +2448 -0
  222. package/.output/server/chunks/build/firstNotUndefined-8H5_qHUu.mjs.map +1 -0
  223. package/.output/server/chunks/build/form-D_UpWPN4.mjs +4712 -0
  224. package/.output/server/chunks/build/form-D_UpWPN4.mjs.map +1 -0
  225. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs +553 -0
  226. package/.output/server/chunks/build/hasIn-DBdElbjM.mjs.map +1 -0
  227. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs +132 -0
  228. package/.output/server/chunks/build/hitl-Bd30yr1J.mjs.map +1 -0
  229. package/.output/server/chunks/build/input-GtPuSEgt.mjs +2181 -0
  230. package/.output/server/chunks/build/input-GtPuSEgt.mjs.map +1 -0
  231. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs +1120 -0
  232. package/.output/server/chunks/build/input-number-BNlNDK7H.mjs.map +1 -0
  233. package/.output/server/chunks/build/interval-DvHBIIZh.mjs +9 -0
  234. package/.output/server/chunks/build/interval-DvHBIIZh.mjs.map +1 -0
  235. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs +7 -0
  236. package/.output/server/chunks/build/isNumeric-CP7q_yhz.mjs.map +1 -0
  237. package/.output/server/chunks/build/logs-pRb-TMWa.mjs +427 -0
  238. package/.output/server/chunks/build/logs-pRb-TMWa.mjs.map +1 -0
  239. package/.output/server/chunks/build/menu-BXt-X0dt.mjs +1952 -0
  240. package/.output/server/chunks/build/menu-BXt-X0dt.mjs.map +1 -0
  241. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs +2253 -0
  242. package/.output/server/chunks/build/monitor-Cq6hRFeQ.mjs.map +1 -0
  243. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs +2 -0
  244. package/.output/server/chunks/build/narrow-fetch-CcG-BPxc.mjs.map +1 -1
  245. package/.output/server/chunks/build/ontology-ohICfVVb.mjs +1406 -0
  246. package/.output/server/chunks/build/ontology-ohICfVVb.mjs.map +1 -0
  247. package/.output/server/chunks/build/operations-SMQrRAcr.mjs +311 -0
  248. package/.output/server/chunks/build/operations-SMQrRAcr.mjs.map +1 -0
  249. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs +202 -0
  250. package/.output/server/chunks/build/optimizer-BlWTsM-W.mjs.map +1 -0
  251. package/.output/server/chunks/build/pages-DsMKUw7i.mjs +542 -0
  252. package/.output/server/chunks/build/pages-DsMKUw7i.mjs.map +1 -0
  253. package/.output/server/chunks/build/pagination-DTAconUo.mjs +1346 -0
  254. package/.output/server/chunks/build/pagination-DTAconUo.mjs.map +1 -0
  255. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs +637 -0
  256. package/.output/server/chunks/build/permissions-DgXQZSyx.mjs.map +1 -0
  257. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs +212 -0
  258. package/.output/server/chunks/build/pipeline-CkavMBhk.mjs.map +1 -0
  259. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs +272 -0
  260. package/.output/server/chunks/build/plugins-LRjaSEZy.mjs.map +1 -0
  261. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs +340 -0
  262. package/.output/server/chunks/build/popconfirm-DxYPGRgS.mjs.map +1 -0
  263. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs +78 -0
  264. package/.output/server/chunks/build/responsiveObserve-DM3hpzhU.mjs.map +1 -0
  265. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs +7172 -0
  266. package/.output/server/chunks/build/schedules-Hz2DJUE2.mjs.map +1 -0
  267. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs +341 -0
  268. package/.output/server/chunks/build/segmented-D3HWtHPw.mjs.map +1 -0
  269. package/.output/server/chunks/build/select-B3Dsb9yq.mjs +3923 -0
  270. package/.output/server/chunks/build/select-B3Dsb9yq.mjs.map +1 -0
  271. package/.output/server/chunks/build/settings-DXLJPq7d.mjs +1014 -0
  272. package/.output/server/chunks/build/settings-DXLJPq7d.mjs.map +1 -0
  273. package/.output/server/chunks/build/space-Dwu2Skt8.mjs +110 -0
  274. package/.output/server/chunks/build/space-Dwu2Skt8.mjs.map +1 -0
  275. package/.output/server/chunks/build/spin-C2cuvGth.mjs +357 -0
  276. package/.output/server/chunks/build/spin-C2cuvGth.mjs.map +1 -0
  277. package/.output/server/chunks/build/studio-hSqH9TYS.mjs +336 -0
  278. package/.output/server/chunks/build/studio-hSqH9TYS.mjs.map +1 -0
  279. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs +377 -0
  280. package/.output/server/chunks/build/switch-CyR-H6Fb.mjs.map +1 -0
  281. package/.output/server/chunks/build/table-CmVD-cA9.mjs +7546 -0
  282. package/.output/server/chunks/build/table-CmVD-cA9.mjs.map +1 -0
  283. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs +1924 -0
  284. package/.output/server/chunks/build/tabs-Vg0e7cZE.mjs.map +1 -0
  285. package/.output/server/chunks/build/tag-y0sn-xv9.mjs +1156 -0
  286. package/.output/server/chunks/build/tag-y0sn-xv9.mjs.map +1 -0
  287. package/.output/server/chunks/build/teams-BbwYJyzv.mjs +1203 -0
  288. package/.output/server/chunks/build/teams-BbwYJyzv.mjs.map +1 -0
  289. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs +1062 -0
  290. package/.output/server/chunks/build/tokens-GYaGJ35Z.mjs.map +1 -0
  291. package/.output/server/chunks/build/tools-CnYi9cou.mjs +487 -0
  292. package/.output/server/chunks/build/tools-CnYi9cou.mjs.map +1 -0
  293. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs +920 -0
  294. package/.output/server/chunks/build/tooltip-C2n2nNiQ.mjs.map +1 -0
  295. package/.output/server/chunks/build/town-B5aoiG98.mjs +133 -0
  296. package/.output/server/chunks/build/town-B5aoiG98.mjs.map +1 -0
  297. package/.output/server/chunks/build/town-BV-hbwb5.mjs +30 -17
  298. package/.output/server/chunks/build/town-BV-hbwb5.mjs.map +1 -1
  299. package/.output/server/chunks/build/types-D6J7slEa.mjs +1 -1
  300. package/.output/server/chunks/build/types-D6J7slEa.mjs.map +1 -1
  301. package/.output/server/chunks/build/types-DWqIeMRP.mjs +30 -29
  302. package/.output/server/chunks/build/types-DWqIeMRP.mjs.map +1 -1
  303. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs +124 -0
  304. package/.output/server/chunks/build/useAgentHarnessOptions-Dq0l0Z6d.mjs.map +1 -0
  305. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs +77 -0
  306. package/.output/server/chunks/build/useAgentTemplateActions-BFOHb5-L.mjs.map +1 -0
  307. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs +24 -17
  308. package/.output/server/chunks/build/useAgentTemplateDialogState-CZzpu5og.mjs.map +1 -1
  309. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs +117 -0
  310. package/.output/server/chunks/build/useAgentTemplateForm-CuJPOPcK.mjs.map +1 -0
  311. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs +133 -0
  312. package/.output/server/chunks/build/useAgentTemplatesCatalog-B2bIhZLA.mjs.map +1 -0
  313. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs +92 -0
  314. package/.output/server/chunks/build/useAmlDatasets-DeoE1idn.mjs.map +1 -0
  315. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs +86 -0
  316. package/.output/server/chunks/build/useAmlEntities-BJhvdqHJ.mjs.map +1 -0
  317. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs +194 -0
  318. package/.output/server/chunks/build/useAmlEnv-CDIZ6xTe.mjs.map +1 -0
  319. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs +89 -0
  320. package/.output/server/chunks/build/useAmlExperiments-Dloi834i.mjs.map +1 -0
  321. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs +38 -33
  322. package/.output/server/chunks/build/useAmlFormat-C2sl3MGB.mjs.map +1 -1
  323. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs +267 -0
  324. package/.output/server/chunks/build/useAmlJobs-BF9LpwXz.mjs.map +1 -0
  325. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs +93 -0
  326. package/.output/server/chunks/build/useAmlModels-_bweOr3R.mjs.map +1 -0
  327. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs +86 -0
  328. package/.output/server/chunks/build/useAmlNotes-DQj980iX.mjs.map +1 -0
  329. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs +130 -0
  330. package/.output/server/chunks/build/useAmlPredict-DHNgDSJn.mjs.map +1 -0
  331. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs +129 -0
  332. package/.output/server/chunks/build/useAnalysisFeed-BrEGV_9x.mjs.map +1 -0
  333. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs +142 -0
  334. package/.output/server/chunks/build/useDaqAddNode-D_Rkju0f.mjs.map +1 -0
  335. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs +70 -0
  336. package/.output/server/chunks/build/useDaqDetailBinding-DCWaLKXT.mjs.map +1 -0
  337. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs +79 -0
  338. package/.output/server/chunks/build/useDaqDetailFrames-BOIcOJRB.mjs.map +1 -0
  339. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs +176 -0
  340. package/.output/server/chunks/build/useDaqDetailHistory-D6WulPVs.mjs.map +1 -0
  341. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs +99 -0
  342. package/.output/server/chunks/build/useDaqDetailNode-DeOsDxK5.mjs.map +1 -0
  343. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs +159 -0
  344. package/.output/server/chunks/build/useDaqDetailParams-Cm9a9r5G.mjs.map +1 -0
  345. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs +222 -0
  346. package/.output/server/chunks/build/useDaqFilters-CctmO03p.mjs.map +1 -0
  347. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs +45 -44
  348. package/.output/server/chunks/build/useDaqNodeWindow-1DWj2H5G.mjs.map +1 -1
  349. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs +136 -0
  350. package/.output/server/chunks/build/useDaqOptimizations-CmX_dpBc.mjs.map +1 -0
  351. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs +395 -0
  352. package/.output/server/chunks/build/useDaqStream-B9ZBVQrI.mjs.map +1 -0
  353. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs +187 -0
  354. package/.output/server/chunks/build/useDaqTemplates-CK37sMfi.mjs.map +1 -0
  355. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs +311 -313
  356. package/.output/server/chunks/build/useDashboardCharts-D45083s_.mjs.map +1 -1
  357. package/.output/server/chunks/build/useDashboardData-NJ7rKxhx.mjs +153 -0
  358. package/.output/server/chunks/build/useDashboardData-NJ7rKxhx.mjs.map +1 -0
  359. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs +219 -0
  360. package/.output/server/chunks/build/useDcwAddNode-DACVcEHs.mjs.map +1 -0
  361. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs +67 -0
  362. package/.output/server/chunks/build/useDcwCards-SaiImIYQ.mjs.map +1 -0
  363. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs +184 -0
  364. package/.output/server/chunks/build/useDcwDetailScope-DLOklSMO.mjs.map +1 -0
  365. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs +148 -0
  366. package/.output/server/chunks/build/useDcwDetailTemplates-ClmIdZ40.mjs.map +1 -0
  367. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs +71 -0
  368. package/.output/server/chunks/build/useDcwFilter-CPMyCltx.mjs.map +1 -0
  369. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs +79 -0
  370. package/.output/server/chunks/build/useDcwLedger-0ie-0WTc.mjs.map +1 -0
  371. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs +137 -0
  372. package/.output/server/chunks/build/useDcwLineMutations-DNxo66yM.mjs.map +1 -0
  373. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs +104 -0
  374. package/.output/server/chunks/build/useDcwLineRun-CHskwscT.mjs.map +1 -0
  375. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs +121 -0
  376. package/.output/server/chunks/build/useDcwParamApprovals-DtScUc-W.mjs.map +1 -0
  377. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs +93 -0
  378. package/.output/server/chunks/build/useDcwProducts-BMaxzLu6.mjs.map +1 -0
  379. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs +98 -0
  380. package/.output/server/chunks/build/useDcwQuery-TVU3Eo0M.mjs.map +1 -0
  381. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs +88 -0
  382. package/.output/server/chunks/build/useDcwQuickActions-BREFmR9T.mjs.map +1 -0
  383. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs +258 -0
  384. package/.output/server/chunks/build/useDcwRecipes-Bc9urA1N.mjs.map +1 -0
  385. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs +452 -0
  386. package/.output/server/chunks/build/useDcwStream-Dir5ufAU.mjs.map +1 -0
  387. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs +91 -0
  388. package/.output/server/chunks/build/useDcwTemplates-BzagZztS.mjs.map +1 -0
  389. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs +140 -0
  390. package/.output/server/chunks/build/useDcwWrites-BROwTLCn.mjs.map +1 -0
  391. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs +128 -0
  392. package/.output/server/chunks/build/useDeviceTwins-BqwVJaZg.mjs.map +1 -0
  393. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs +107 -0
  394. package/.output/server/chunks/build/useExpConfirmations-BM626N4p.mjs.map +1 -0
  395. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs +55 -0
  396. package/.output/server/chunks/build/useLocalTime-uVSM44Um.mjs.map +1 -0
  397. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs +34 -31
  398. package/.output/server/chunks/build/useLogsFormat-B-o4MHy7.mjs.map +1 -1
  399. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs +88 -0
  400. package/.output/server/chunks/build/useLogsManual-cVBZQ_Mt.mjs.map +1 -0
  401. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs +150 -0
  402. package/.output/server/chunks/build/useLogsQuery-D7hrJ3yn.mjs.map +1 -0
  403. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs +83 -0
  404. package/.output/server/chunks/build/useLogsScope-aaPQeTRm.mjs.map +1 -0
  405. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs +167 -156
  406. package/.output/server/chunks/build/useMonitorColumns-vVnt3r5Q.mjs.map +1 -1
  407. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs +135 -0
  408. package/.output/server/chunks/build/useMonitorData-DIkiLr_h.mjs.map +1 -0
  409. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs +91 -0
  410. package/.output/server/chunks/build/useMonitorFormat-CyURtH8N.mjs.map +1 -0
  411. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs +28 -21
  412. package/.output/server/chunks/build/useMonitorTerminal-Dj4QwRNW.mjs.map +1 -1
  413. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs +195 -0
  414. package/.output/server/chunks/build/useOperationsFeed-Ci4mZAn_.mjs.map +1 -0
  415. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs +149 -0
  416. package/.output/server/chunks/build/useOpsLog-C-M6Eace.mjs.map +1 -0
  417. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs +156 -0
  418. package/.output/server/chunks/build/useRecipeDispatchApprovals-BYtiqfeb.mjs.map +1 -0
  419. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +39 -23
  420. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -1
  421. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs +79 -0
  422. package/.output/server/chunks/build/useTeamActions-BDjU06LP.mjs.map +1 -0
  423. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs +84 -0
  424. package/.output/server/chunks/build/useTeamAddMemberDialog-J3oFn3FI.mjs.map +1 -0
  425. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs +97 -0
  426. package/.output/server/chunks/build/useTeamCreateDialog-fbn4ixYu.mjs.map +1 -0
  427. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs +80 -0
  428. package/.output/server/chunks/build/useTeamDeployDialog-BNezMD2k.mjs.map +1 -0
  429. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs +39 -32
  430. package/.output/server/chunks/build/useTeamDialogState-CFRUQxAf.mjs.map +1 -1
  431. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs +103 -0
  432. package/.output/server/chunks/build/useTeamPluginDialog-BZznrOVe.mjs.map +1 -0
  433. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs +123 -0
  434. package/.output/server/chunks/build/useTeamsCatalog-DuZFP3oG.mjs.map +1 -0
  435. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs +29 -22
  436. package/.output/server/chunks/build/useTokenClipboard-CwQpoFeP.mjs.map +1 -1
  437. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs +115 -0
  438. package/.output/server/chunks/build/useTokenCreate-Ctl0YGhL.mjs.map +1 -0
  439. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs +87 -0
  440. package/.output/server/chunks/build/useTokenRename-Cm3ypSfN.mjs.map +1 -0
  441. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs +118 -0
  442. package/.output/server/chunks/build/useTokenReveal-CeoWL5Mt.mjs.map +1 -0
  443. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs +92 -0
  444. package/.output/server/chunks/build/useTokensList-CNIzON3u.mjs.map +1 -0
  445. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs +17 -16
  446. package/.output/server/chunks/build/useTownBus-D9SoIsAN.mjs.map +1 -1
  447. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs +141 -0
  448. package/.output/server/chunks/build/useWorkbenchAuth-CY-bVFMu.mjs.map +1 -0
  449. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs +138 -0
  450. package/.output/server/chunks/build/useWorkbenchWorkspaces-DhZQFss9.mjs.map +1 -0
  451. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs +127 -0
  452. package/.output/server/chunks/build/useWorkshopApi-BxHn-4iR.mjs.map +1 -0
  453. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs +1659 -0
  454. package/.output/server/chunks/build/useWorkshopWs-YQ5URrbt.mjs.map +1 -0
  455. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs +60 -0
  456. package/.output/server/chunks/build/useWorkspaceAuth-Dlvj9csD.mjs.map +1 -0
  457. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs +92 -0
  458. package/.output/server/chunks/build/useWorkspaceChannels-CPFepxTN.mjs.map +1 -0
  459. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs +34 -31
  460. package/.output/server/chunks/build/useWorkspacePanels-CTwREmq0.mjs.map +1 -1
  461. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs +168 -0
  462. package/.output/server/chunks/build/useWorkspaceShell-BCypjjjE.mjs.map +1 -0
  463. package/.output/server/chunks/build/users-DjiVC_tS.mjs +569 -0
  464. package/.output/server/chunks/build/users-DjiVC_tS.mjs.map +1 -0
  465. package/.output/server/chunks/build/workshop-1gKeDASV.mjs +546 -0
  466. package/.output/server/chunks/build/workshop-1gKeDASV.mjs.map +1 -0
  467. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs +121 -111
  468. package/.output/server/chunks/build/workspaces-CmW0cpOt.mjs.map +1 -1
  469. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  470. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  471. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  472. package/.output/server/chunks/routes/api/mcp/workshop.mjs +2 -2
  473. package/.output/server/chunks/routes/api/metrics.mjs +1 -1
  474. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  475. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
  476. package/.output/server/chunks/routes/api/plugins/i18n.get.mjs +1 -1
  477. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
  478. package/.output/server/chunks/routes/api/system/backup/list.get.mjs +1 -1
  479. package/.output/server/chunks/routes/api/system/backup/run.post.mjs +3 -3
  480. package/.output/server/chunks/routes/api/system/config-groups/_id_.delete.mjs +1 -1
  481. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs +1 -1
  482. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
  483. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
  484. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
  485. package/.output/server/chunks/routes/api/system/index.post.mjs +1 -1
  486. package/.output/server/chunks/routes/api/system/index2.get.mjs +1 -1
  487. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  488. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  489. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
  490. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  491. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
  492. package/.output/server/chunks/routes/api/system/timezone.get.mjs +1 -1
  493. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  494. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  495. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
  496. package/.output/server/chunks/routes/api/users/change-password.post.mjs +1 -1
  497. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  498. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  499. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
  500. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  501. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  502. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
  503. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
  504. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  505. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  506. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  507. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
  508. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  509. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
  510. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  511. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  512. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  513. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  514. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/grant.post.mjs +1 -1
  515. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/revoke.post.mjs +1 -1
  516. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  517. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +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 +1 -1
  524. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  525. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
  526. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +1 -1
  527. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +1 -1
  528. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +1 -1
  529. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +1 -1
  530. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +1 -1
  531. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +1 -1
  532. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +1 -1
  533. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
  534. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
  535. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +1 -1
  536. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
  537. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +1 -1
  538. package/.output/server/chunks/routes/api/workshop/aml/index3.post.mjs +1 -1
  539. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +1 -1
  540. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +1 -1
  541. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +1 -1
  542. package/.output/server/chunks/routes/api/workshop/aml/index7.get.mjs +1 -1
  543. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
  544. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
  545. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
  546. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +1 -1
  547. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.get.mjs +1 -1
  548. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
  549. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
  550. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +1 -1
  551. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +1 -1
  552. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id/train.post.mjs +1 -1
  553. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.delete.mjs +1 -1
  554. package/.output/server/chunks/routes/api/workshop/aml/training-plans/_id_.patch.mjs +1 -1
  555. package/.output/server/chunks/routes/api/workshop/aml/twin/providers.get.mjs +1 -1
  556. package/.output/server/chunks/routes/api/workshop/analysis/_id_.delete.mjs +1 -1
  557. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +1 -1
  558. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +1 -1
  559. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  560. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
  561. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
  562. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  563. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -2
  564. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
  565. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -2
  566. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  567. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  568. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -3
  569. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
  570. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
  571. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
  572. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  573. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -2
  574. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
  575. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  576. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
  577. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  578. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
  579. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
  580. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
  581. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/rotate-token.post.mjs +1 -1
  582. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
  583. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
  584. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
  585. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.get.mjs +1 -1
  586. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +2 -2
  587. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/messages/_messageId/read.post.mjs +1 -1
  588. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/permissions.get.mjs +1 -1
  589. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  590. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs +92 -0
  591. package/.output/server/chunks/routes/api/workshop/channels/_id/execution-mode.patch.mjs.map +1 -0
  592. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
  593. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -2
  594. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +2 -2
  595. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
  596. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  597. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.put.mjs +2 -2
  598. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
  599. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +2 -2
  600. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  601. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +2 -2
  602. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +2 -2
  603. package/.output/server/chunks/routes/api/workshop/channels/_id/index6.get.mjs +1 -1
  604. package/.output/server/chunks/routes/api/workshop/channels/_id/index7.get.mjs +1 -1
  605. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +2 -2
  606. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId/approve.post.mjs +1 -1
  607. package/.output/server/chunks/routes/api/workshop/channels/_id/members/_userId_.delete.mjs +1 -1
  608. package/.output/server/chunks/routes/api/workshop/channels/_id/members/join.post.mjs +1 -1
  609. package/.output/server/chunks/routes/api/workshop/channels/_id/members/leave.post.mjs +1 -1
  610. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
  611. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
  612. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
  613. package/.output/server/chunks/routes/api/workshop/channels/_id/tools/reset.post.mjs +2 -2
  614. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +2 -2
  615. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +2 -2
  616. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
  617. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -2
  618. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
  619. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
  620. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +8 -8
  621. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  622. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  623. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +3 -1
  624. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  625. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
  626. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs +6 -3
  627. package/.output/server/chunks/routes/api/workshop/daq/_id/ingest.post.mjs.map +1 -1
  628. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +2 -2
  629. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  630. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  631. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
  632. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
  633. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -1
  634. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  635. package/.output/server/chunks/routes/api/workshop/daq/export/_id_.get.mjs +1 -1
  636. package/.output/server/chunks/routes/api/workshop/daq/export-file.get.mjs +1 -1
  637. package/.output/server/chunks/routes/api/workshop/daq/index.get.mjs +1 -1
  638. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  639. package/.output/server/chunks/routes/api/workshop/daq/index2.post.mjs +2 -2
  640. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -2
  641. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
  642. package/.output/server/chunks/routes/api/workshop/daq/query.get.mjs +1 -1
  643. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
  644. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
  645. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -2
  646. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +2 -2
  647. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +2 -2
  648. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -2
  649. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -2
  650. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +2 -2
  651. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +2 -2
  652. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -2
  653. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -2
  654. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
  655. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -2
  656. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +2 -2
  657. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +2 -2
  658. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +2 -2
  659. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -2
  660. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
  661. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -2
  662. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
  663. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +2 -2
  664. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +2 -2
  665. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
  666. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
  667. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
  668. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +2 -2
  669. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +2 -2
  670. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +2 -2
  671. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
  672. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -1
  673. package/.output/server/chunks/routes/api/workshop/dcw/mes-artifacts/file.get.mjs +2 -2
  674. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs +5 -5
  675. package/.output/server/chunks/routes/api/workshop/dcw/mes-hook-test.post.mjs.map +1 -1
  676. package/.output/server/chunks/routes/api/workshop/dcw/mes-test-read.post.mjs +2 -2
  677. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
  678. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
  679. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -2
  680. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -2
  681. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +2 -2
  682. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +2 -2
  683. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +2 -2
  684. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +2 -2
  685. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +8 -5
  686. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  687. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +9 -5
  688. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  689. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
  690. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  691. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/revert.post.mjs +1 -1
  692. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
  693. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/versions.get.mjs +1 -1
  694. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  695. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs +7 -4
  696. package/.output/server/chunks/routes/api/workshop/dcw/recipes/index.patch.mjs.map +1 -1
  697. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -2
  698. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +2 -2
  699. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
  700. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
  701. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
  702. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -2
  703. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +2 -2
  704. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +2 -2
  705. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
  706. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
  707. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.delete.mjs +1 -1
  708. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.get.mjs +1 -1
  709. package/.output/server/chunks/routes/api/workshop/eda/charts/_id_.patch.mjs +1 -1
  710. package/.output/server/chunks/routes/api/workshop/eda/commonality.get.mjs +2 -2
  711. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.delete.mjs +1 -1
  712. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.get.mjs +1 -1
  713. package/.output/server/chunks/routes/api/workshop/eda/dashboards/_id_.patch.mjs +1 -1
  714. package/.output/server/chunks/routes/api/workshop/eda/features/jobs.get.mjs +1 -1
  715. package/.output/server/chunks/routes/api/workshop/eda/features/run.post.mjs +1 -1
  716. package/.output/server/chunks/routes/api/workshop/eda/golden/_id_.delete.mjs +1 -1
  717. package/.output/server/chunks/routes/api/workshop/eda/golden/deviation.get.mjs +1 -1
  718. package/.output/server/chunks/routes/api/workshop/eda/golden/single.get.mjs +1 -1
  719. package/.output/server/chunks/routes/api/workshop/eda/index.get.mjs +1 -1
  720. package/.output/server/chunks/routes/api/workshop/eda/index.post.mjs +1 -1
  721. package/.output/server/chunks/routes/api/workshop/eda/index2.get.mjs +1 -1
  722. package/.output/server/chunks/routes/api/workshop/eda/index2.post.mjs +1 -1
  723. package/.output/server/chunks/routes/api/workshop/eda/index3.get.mjs +1 -1
  724. package/.output/server/chunks/routes/api/workshop/eda/index3.post.mjs +1 -1
  725. package/.output/server/chunks/routes/api/workshop/eda/index4.get.mjs +1 -1
  726. package/.output/server/chunks/routes/api/workshop/eda/index4.post.mjs +1 -1
  727. package/.output/server/chunks/routes/api/workshop/eda/index5.get.mjs +1 -1
  728. package/.output/server/chunks/routes/api/workshop/eda/index5.post.mjs +1 -1
  729. package/.output/server/chunks/routes/api/workshop/eda/index6.get.mjs +1 -1
  730. package/.output/server/chunks/routes/api/workshop/eda/index6.post.mjs +1 -1
  731. package/.output/server/chunks/routes/api/workshop/eda/index7.get.mjs +1 -1
  732. package/.output/server/chunks/routes/api/workshop/eda/index7.post.mjs +1 -1
  733. package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs +33 -0
  734. package/.output/server/chunks/routes/api/workshop/eda/index8.get.mjs.map +1 -0
  735. package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs +41 -0
  736. package/.output/server/chunks/routes/api/workshop/eda/index8.post.mjs.map +1 -0
  737. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.get.mjs +1 -1
  738. package/.output/server/chunks/routes/api/workshop/eda/ocap/_id_.patch.mjs +1 -1
  739. package/.output/server/chunks/routes/api/workshop/eda/runs/_id/labels.patch.mjs +1 -1
  740. package/.output/server/chunks/routes/api/workshop/eda/runs.get.mjs +1 -1
  741. package/.output/server/chunks/routes/api/workshop/eda/spc/_id/recompute.post.mjs +1 -1
  742. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.delete.mjs +1 -1
  743. package/.output/server/chunks/routes/api/workshop/eda/spc/_id_.get.mjs +1 -1
  744. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs +36 -0
  745. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.delete.mjs.map +1 -0
  746. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs +37 -0
  747. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.get.mjs.map +1 -0
  748. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs +42 -0
  749. package/.output/server/chunks/routes/api/workshop/eda/templates/_id_.patch.mjs.map +1 -0
  750. package/.output/server/chunks/routes/api/workshop/eda/vm/predict.post.mjs +2 -2
  751. package/.output/server/chunks/routes/api/workshop/exp/confirmations/_id/decide.post.mjs +2 -2
  752. package/.output/server/chunks/routes/api/workshop/exp/index.get.mjs +2 -2
  753. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +2 -2
  754. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -2
  755. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -2
  756. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -2
  757. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -2
  758. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
  759. package/.output/server/chunks/routes/api/workshop/index.mjs +2 -2
  760. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
  761. package/.output/server/chunks/routes/api/workshop/index.put.mjs +2 -2
  762. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -1
  763. package/.output/server/chunks/routes/api/workshop/index10.post.mjs +33 -0
  764. package/.output/server/chunks/routes/api/workshop/index10.post.mjs.map +1 -0
  765. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +1 -1
  766. package/.output/server/chunks/routes/api/workshop/index12.get.mjs +2 -2
  767. package/.output/server/chunks/routes/api/workshop/index13.get.mjs +1 -1
  768. package/.output/server/chunks/routes/api/workshop/index14.get.mjs +1 -1
  769. package/.output/server/chunks/routes/api/workshop/index15.get.mjs +1 -1
  770. package/.output/server/chunks/routes/api/workshop/index16.get.mjs +1 -1
  771. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  772. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +46 -47
  773. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  774. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  775. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +47 -24
  776. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  777. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -1
  778. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +11 -10
  779. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  780. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  781. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +23 -20
  782. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  783. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +2 -2
  784. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +19 -43
  785. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  786. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +2 -2
  787. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +44 -18
  788. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  789. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +2 -2
  790. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +14 -16
  791. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  792. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -1
  793. package/.output/server/chunks/routes/api/workshop/index9.post.mjs +19 -5
  794. package/.output/server/chunks/routes/api/workshop/index9.post.mjs.map +1 -1
  795. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
  796. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
  797. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
  798. package/.output/server/chunks/routes/api/workshop/mes/datasets.get.mjs +2 -2
  799. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs +33 -0
  800. package/.output/server/chunks/routes/api/workshop/mes/index.get.mjs.map +1 -0
  801. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs +56 -0
  802. package/.output/server/chunks/routes/api/workshop/mes/index.put.mjs.map +1 -0
  803. package/.output/server/chunks/routes/api/workshop/mes/points.get.mjs +1 -1
  804. package/.output/server/chunks/routes/api/workshop/mes/preview.post.mjs +1 -1
  805. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs +49 -0
  806. package/.output/server/chunks/routes/api/workshop/mes/secrets/_ref_.delete.mjs.map +1 -0
  807. package/.output/server/chunks/routes/api/workshop/notifications/read.post.mjs +1 -1
  808. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/autofix.mjs +2 -2
  809. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/compile.mjs +2 -2
  810. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/evidence.mjs +2 -2
  811. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/publish.mjs +2 -2
  812. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval-decision.mjs +2 -2
  813. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/approval.mjs +2 -2
  814. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/rules/_ruleId/transition.mjs +2 -2
  815. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/subgraph.mjs +2 -2
  816. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId/validate.mjs +2 -2
  817. package/.output/server/chunks/routes/api/workshop/ontology/drafts/_draftId_.mjs +2 -2
  818. package/.output/server/chunks/routes/api/workshop/ontology/export/_ontologyId_.mjs +2 -2
  819. package/.output/server/chunks/routes/api/workshop/ontology/index.mjs +2 -2
  820. package/.output/server/chunks/routes/api/workshop/ontology/scene.mjs +2 -2
  821. package/.output/server/chunks/routes/api/workshop/ontology/traces/_ontologyId_.mjs +2 -2
  822. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId/compare.mjs +2 -2
  823. package/.output/server/chunks/routes/api/workshop/ontology/versions/_ontologyId_.mjs +2 -2
  824. package/.output/server/chunks/routes/api/workshop/optimization/bindings/_id_.delete.mjs +1 -1
  825. package/.output/server/chunks/routes/api/workshop/optimization/capabilities.get.mjs +2 -2
  826. package/.output/server/chunks/routes/api/workshop/optimization/index.get.mjs +2 -2
  827. package/.output/server/chunks/routes/api/workshop/optimization/index.mjs +2 -2
  828. package/.output/server/chunks/routes/api/workshop/optimization/index2.mjs +2 -2
  829. package/.output/server/chunks/routes/api/workshop/optimization/profiles/_id/publish.post.mjs +2 -2
  830. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/crosscheck.post.mjs +2 -2
  831. package/.output/server/chunks/routes/api/workshop/optimization/recommendations/_id/dispatch.post.mjs +2 -2
  832. package/.output/server/chunks/routes/api/workshop/optimization/solve.post.mjs +2 -2
  833. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +2 -2
  834. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +2 -2
  835. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
  836. package/.output/server/chunks/routes/api/workshop/process-model/datasets.post.mjs +2 -2
  837. package/.output/server/chunks/routes/api/workshop/process-model/eligibility.mjs +2 -2
  838. package/.output/server/chunks/routes/api/workshop/process-model/experiments.mjs +2 -2
  839. package/.output/server/chunks/routes/api/workshop/process-model/index.mjs +2 -2
  840. package/.output/server/chunks/routes/api/workshop/process-model/specs/_id/publish.post.mjs +2 -2
  841. package/.output/server/chunks/routes/api/workshop/process-model/train.post.mjs +2 -2
  842. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
  843. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -2
  844. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -2
  845. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
  846. package/.output/server/chunks/routes/api/workshop/schedules/_id/run.post.mjs +1 -1
  847. package/.output/server/chunks/routes/api/workshop/schedules/_id/runs.get.mjs +1 -1
  848. package/.output/server/chunks/routes/api/workshop/schedules/_id_.delete.mjs +1 -1
  849. package/.output/server/chunks/routes/api/workshop/schedules/_id_.get.mjs +1 -1
  850. package/.output/server/chunks/routes/api/workshop/schedules/_id_.patch.mjs +1 -1
  851. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  852. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  853. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
  854. package/.output/server/chunks/routes/api/workshop/tasks/_id/reassign.post.mjs +1 -1
  855. package/.output/server/chunks/routes/api/workshop/tasks/_id/reopen.post.mjs +1 -1
  856. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  857. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
  858. package/.output/server/chunks/routes/api/workshop/tasks/_id/update.post.mjs +1 -1
  859. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  860. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
  861. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -2
  862. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
  863. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  864. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +2 -2
  865. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +2 -2
  866. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
  867. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
  868. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
  869. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  870. package/.output/server/chunks/routes/api/workshop/tools/_name_.get.mjs +1 -1
  871. package/.output/server/chunks/routes/api/workshop/tools/sync.post.mjs +2 -2
  872. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
  873. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
  874. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -3
  875. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
  876. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
  877. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
  878. package/.output/server/chunks/routes/renderer.mjs +2 -2
  879. package/.output/server/chunks/routes/renderer.mjs.map +1 -1
  880. package/.output/server/chunks/virtual/entry.mjs +10869 -9372
  881. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  882. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  883. package/.output/server/chunks/virtual/precomputed.mjs.map +1 -1
  884. package/.output/server/index.mjs +1 -1
  885. package/.output/server/package.json +1 -1
  886. package/README-zh.md +21 -8
  887. package/README.md +21 -8
  888. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.json +1 -0
  889. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/1459e6269990a5d229b9228c8b2f62ffaa7d350068380ae8b875fee0db45cca6.source +180 -0
  890. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/c2991e909c70c5c12b90a407c7adcf63384c51668a2b334e6e047fa675c268fe.source +305 -0
  891. package/app/.mimosa/hook-state/sess_05189059-e42d-4188-8911-4f7baabe009b.mtg0vz68-49792-75b0709555.baseline/e09129039d1e27e3fac24becc9bdafd2d1a7c8049bff24173df007be865f0165.source +264 -0
  892. package/app/.mimosa/hook-status/sess_05189059-e42d-4188-8911-4f7baabe009b-28ef7c75ea.json +14 -0
  893. package/app/components/AwChart.vue +46 -3
  894. package/app/components/AwLogo.vue +75 -75
  895. package/app/components/aml/AmlDatasetFormModal.vue +279 -279
  896. package/app/components/aml/AmlDatasetTable.vue +319 -319
  897. package/app/components/aml/AmlExperimentsTable.vue +142 -142
  898. package/app/components/aml/AmlInfraBanner.vue +23 -23
  899. package/app/components/aml/AmlJobsTable.vue +248 -248
  900. package/app/components/aml/AmlOverviewBar.vue +62 -62
  901. package/app/components/aml/AmlPageHeader.vue +47 -47
  902. package/app/components/aml/AmlPredictConsole.vue +201 -201
  903. package/app/components/app-header/HitlBell.vue +423 -423
  904. package/app/components/daq/DaqAddNodeModal.vue +209 -209
  905. package/app/components/daq/DaqAlarmBar.vue +46 -46
  906. package/app/components/daq/DaqControlCard.vue +159 -159
  907. package/app/components/daq/DaqInfraBanner.vue +31 -31
  908. package/app/components/daq/DaqLineBanner.vue +47 -47
  909. package/app/components/daq/DaqNodePanel.vue +396 -396
  910. package/app/components/daq/DaqOptPanel.vue +197 -197
  911. package/app/components/daq/DaqTemplateModal.vue +246 -246
  912. package/app/components/dashboard/DashboardGaugeBand.vue +78 -78
  913. package/app/components/dashboard/DashboardHero.vue +209 -209
  914. package/app/components/dashboard/DashboardLineStatePanel.vue +78 -78
  915. package/app/components/dashboard/DashboardNodeStatePanel.vue +46 -46
  916. package/app/components/dashboard/DashboardPipelinePanel.vue +46 -46
  917. package/app/components/dashboard/DashboardTrendPanel.vue +83 -83
  918. package/app/components/dashboard/DashboardWritePanel.vue +52 -52
  919. package/app/components/dcw/DcwCreateLineModal.vue +105 -105
  920. package/app/components/dcw/DcwDeleteLineModal.vue +73 -73
  921. package/app/components/dcw/DcwDetailTemplateModal.vue +238 -238
  922. package/app/components/dcw/DcwLedgerCard.vue +160 -160
  923. package/app/components/dcw/DcwMesArtifacts.vue +140 -140
  924. package/app/components/dcw/DcwProductCreateModal.vue +113 -113
  925. package/app/components/dcw/DcwRecipeDispatchHistoryModal.vue +244 -244
  926. package/app/components/dcw/DcwRecipeEditModal.vue +399 -399
  927. package/app/components/dcw/DcwRecipeHistoryModal.vue +165 -165
  928. package/app/components/dcw/DcwRunDataModal.vue +191 -191
  929. package/app/components/dcw/DcwTemplateModal.vue +227 -227
  930. package/app/components/dcw/DcwWriteHistoryCard.vue +96 -96
  931. package/app/components/dcw/ExpConfirmCard.vue +103 -103
  932. package/app/components/dcw/RecipeDispatchApprovalCard.vue +330 -330
  933. package/app/components/logs/LogsPageHead.vue +71 -71
  934. package/app/components/monitor/MonitorAgentTable.vue +143 -143
  935. package/app/components/monitor/MonitorChannelTable.vue +80 -80
  936. package/app/components/monitor/MonitorLoginGate.vue +24 -24
  937. package/app/components/monitor/MonitorPageHead.vue +92 -92
  938. package/app/components/monitor/MonitorProcessTable.vue +159 -159
  939. package/app/components/ontology/OntologyGraph.vue +356 -356
  940. package/app/components/operations/OperationsFilterCard.vue +164 -164
  941. package/app/components/operations/OperationsPageHead.vue +47 -47
  942. package/app/components/tokens/TokenCreateModal.vue +42 -42
  943. package/app/components/tokens/TokenOnceModal.vue +164 -164
  944. package/app/components/tokens/TokenRenameModal.vue +40 -40
  945. package/app/components/tokens/TokensPageHead.vue +76 -76
  946. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  947. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  948. package/app/components/workshop/AgentLanesView.vue +278 -278
  949. package/app/components/workshop/ArtifactCard.vue +120 -120
  950. package/app/components/workshop/AssetLibrary.vue +452 -452
  951. package/app/components/workshop/ChatMemberPanel.vue +556 -556
  952. package/app/components/workshop/CommandPalette.vue +270 -270
  953. package/app/components/workshop/Composer.vue +540 -540
  954. package/app/components/workshop/DaqTemplateIcon.vue +33 -33
  955. package/app/components/workshop/DeviceTwinPanel.vue +167 -167
  956. package/app/components/workshop/FileSelectorModal.vue +188 -188
  957. package/app/components/workshop/InspectorPanel.vue +301 -301
  958. package/app/components/workshop/PluginSlot.vue +120 -120
  959. package/app/components/workshop/TranscriptTimeline.vue +223 -223
  960. package/app/components/workshop/agents/AgentTemplateEditModal.vue +139 -139
  961. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  962. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  963. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  964. package/app/components/workshop/blocks/ClusterMember.vue +95 -95
  965. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  966. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  967. package/app/components/workshop/blocks/ClusterStatus.vue +149 -149
  968. package/app/components/workshop/blocks/ClusterTool.vue +176 -176
  969. package/app/components/workshop/blocks/EventBlockAvatar.vue +114 -114
  970. package/app/components/workshop/blocks/EventBlockHead.vue +232 -232
  971. package/app/components/workshop/composer/ComposerToolbar.vue +278 -278
  972. package/app/components/workshop/composer/MentionMenu.vue +135 -135
  973. package/app/components/workshop/composer/ReplyChip.vue +65 -65
  974. package/app/components/workshop/composer/StatusChip.vue +171 -171
  975. package/app/components/workshop/console/Dock.vue +71 -71
  976. package/app/components/workshop/console/LeftPane.vue +84 -84
  977. package/app/components/workshop/device-twin/DeviceTwinCard.vue +265 -265
  978. package/app/components/workshop/device-twin/DeviceTwinDcwSection.vue +203 -203
  979. package/app/components/workshop/lanes/AddMemberModal.vue +270 -270
  980. package/app/components/workshop/lanes/EditMemberModal.vue +106 -106
  981. package/app/components/workshop/lanes/LanesToolbar.vue +97 -97
  982. package/app/components/workshop/session-list/ChannelSettingsModal.vue +112 -1
  983. package/app/components/workshop/session-list/MountChannelModal.vue +124 -124
  984. package/app/components/workshop/session-list/SaveTemplateModal.vue +93 -93
  985. package/app/components/workshop/task-board/Card.vue +172 -172
  986. package/app/components/workshop/task-board/Column.vue +151 -151
  987. package/app/components/workshop/task-board/List.vue +157 -157
  988. package/app/components/workshop/task-board/StatusMenu.vue +88 -88
  989. package/app/components/workshop/teams/TeamAddMemberModal.vue +53 -53
  990. package/app/components/workshop/teams/TeamCreateModal.vue +94 -94
  991. package/app/components/workshop/teams/TeamDeployModal.vue +40 -40
  992. package/app/components/workshop/teams/TeamPluginModal.vue +119 -119
  993. package/app/components/workshop/terminal/OmpTerminalPanel.vue +270 -270
  994. package/app/components/workshop/terminal/TerminalHitlCard.vue +170 -170
  995. package/app/components/workshop/town/TownScene.ts +466 -466
  996. package/app/components/workshop/town/TownView.vue +561 -561
  997. package/app/components/workshop/town/components/AutoModeConfirmModal.vue +94 -94
  998. package/app/components/workshop/town/components/TownAgentBindings.vue +405 -405
  999. package/app/components/workshop/town/components/TownAgentInspector.vue +554 -554
  1000. package/app/components/workshop/town/components/TownAlarmList.vue +147 -147
  1001. package/app/components/workshop/town/components/TownBoundaryPanel.vue +350 -350
  1002. package/app/components/workshop/town/components/TownCalloutLayer.vue +147 -147
  1003. package/app/components/workshop/town/components/TownChannelDock.vue +116 -116
  1004. package/app/components/workshop/town/components/TownControlDock.vue +405 -405
  1005. package/app/components/workshop/town/components/TownDaqNodeInspector.vue +345 -345
  1006. package/app/components/workshop/town/components/TownDaqTree.vue +366 -366
  1007. package/app/components/workshop/town/components/TownDcwBindSection.vue +473 -473
  1008. package/app/components/workshop/town/components/TownDcwNodeInspector.vue +185 -185
  1009. package/app/components/workshop/town/components/TownDcwTree.vue +280 -280
  1010. package/app/components/workshop/town/components/TownDeviceBindings.vue +394 -394
  1011. package/app/components/workshop/town/components/TownDeviceTransform.vue +248 -248
  1012. package/app/components/workshop/town/components/TownEventList.vue +120 -120
  1013. package/app/components/workshop/town/components/TownHealthBody.vue +100 -100
  1014. package/app/components/workshop/town/components/TownKpiStrip.vue +207 -207
  1015. package/app/components/workshop/town/components/TownLeftRail.vue +308 -308
  1016. package/app/components/workshop/town/components/TownLoadingMask.vue +61 -61
  1017. package/app/components/workshop/town/components/TownNavMap.vue +154 -154
  1018. package/app/components/workshop/town/components/TownRightRail.vue +543 -543
  1019. package/app/components/workshop/town/components/TownStage.vue +281 -281
  1020. package/app/components/workshop/town/components/TownStageTop.vue +238 -238
  1021. package/app/components/workshop/town/components/TownStatusBar.vue +108 -108
  1022. package/app/components/workshop/town/components/TownTopNav.vue +367 -367
  1023. package/app/components/workshop/town/components/TownTrendDock.vue +178 -178
  1024. package/app/components/workshop/town/scene/town-scene-agents.ts +254 -254
  1025. package/app/components/workshop/town/scene/town-scene-behavior.ts +194 -194
  1026. package/app/components/workshop/town/scene/town-scene-bubbles.ts +96 -96
  1027. package/app/components/workshop/town/scene/town-scene-core.ts +158 -158
  1028. package/app/components/workshop/town/scene/town-scene-models.ts +109 -109
  1029. package/app/components/workshop/town/scene/town-scene-visuals.ts +279 -279
  1030. package/app/components/workshop/town/scene/town-scene3d-agents.ts +308 -308
  1031. package/app/components/workshop/town/scene/town-scene3d-blocks.ts +297 -297
  1032. package/app/components/workshop/town/scene/town-scene3d-bubbles.ts +281 -281
  1033. package/app/components/workshop/town/scene/town-scene3d-camera.ts +282 -282
  1034. package/app/components/workshop/town/scene/town-scene3d-devices.ts +433 -433
  1035. package/app/components/workshop/town/scene/town-scene3d-editing.ts +490 -490
  1036. package/app/components/workshop/town/scene/town-scene3d-events.ts +173 -173
  1037. package/app/components/workshop/town/scene/town-scene3d-factory.ts +412 -412
  1038. package/app/components/workshop/town/scene/town-scene3d-hud.ts +110 -110
  1039. package/app/components/workshop/town/scene/town-scene3d-lifecycle.ts +144 -144
  1040. package/app/components/workshop/town/scene/town-scene3d-links.ts +141 -141
  1041. package/app/components/workshop/town/scene/town-scene3d-loop.ts +286 -286
  1042. package/app/components/workshop/town/scene/town-scene3d-models.ts +154 -154
  1043. package/app/components/workshop/town/scene/town-scene3d-nodes.ts +562 -562
  1044. package/app/components/workshop/town/scene/town-scene3d-ranges.ts +273 -273
  1045. package/app/components/workshop/town/scene/town-scene3d-renderer.ts +320 -320
  1046. package/app/components/workshop/town/scene/town-scene3d-selection.ts +257 -257
  1047. package/app/components/workshop/town/scene/town-scene3d-types.ts +264 -264
  1048. package/app/components/workshop/transcript/TranscriptBlockList.vue +68 -68
  1049. package/app/components/workshop/transcript/TranscriptEarlierPager.vue +81 -81
  1050. package/app/components/workshop/transcript/TranscriptFilterBar.vue +126 -126
  1051. package/app/components/workshop/workbench/CreateWorkspaceModal.vue +36 -36
  1052. package/app/components/workshop/workbench/WorkspaceEmpty.vue +56 -56
  1053. package/app/composables/useResponsive.ts +88 -88
  1054. package/app/composables/workshop/device-twin-types.ts +29 -29
  1055. package/app/composables/workshop/event-blocks/attention.ts +58 -58
  1056. package/app/composables/workshop/event-blocks/classify.ts +44 -44
  1057. package/app/composables/workshop/event-blocks/clusterer.ts +231 -231
  1058. package/app/composables/workshop/event-blocks/fold-stream.ts +45 -45
  1059. package/app/composables/workshop/event-blocks/markdown.ts +81 -81
  1060. package/app/composables/workshop/event-blocks/mentions.ts +49 -49
  1061. package/app/composables/workshop/event-blocks/text-utils.ts +100 -100
  1062. package/app/composables/workshop/event-blocks/types.ts +40 -40
  1063. package/app/composables/workshop/town/town-relay-props.ts +231 -231
  1064. package/app/composables/workshop/town/town-view-types.ts +145 -145
  1065. package/app/composables/workshop/town/useTownAgentBindings.ts +182 -182
  1066. package/app/composables/workshop/town/useTownAgentChat.ts +203 -203
  1067. package/app/composables/workshop/town/useTownAlarms.ts +36 -36
  1068. package/app/composables/workshop/town/useTownCallouts.ts +174 -174
  1069. package/app/composables/workshop/town/useTownChannels.ts +220 -220
  1070. package/app/composables/workshop/town/useTownHealth.ts +66 -66
  1071. package/app/composables/workshop/town/useTownHudTickers.ts +77 -77
  1072. package/app/composables/workshop/town/useTownLayout.ts +277 -277
  1073. package/app/composables/workshop/town/useTownNavMap.ts +301 -301
  1074. package/app/composables/workshop/town/useTownNodeBindings.ts +345 -345
  1075. package/app/composables/workshop/town/useTownPanelDrag.ts +91 -91
  1076. package/app/composables/workshop/town/useTownRailData.ts +421 -421
  1077. package/app/composables/workshop/town/useTownSceneControl.ts +92 -92
  1078. package/app/composables/workshop/town/useTownSceneInput.ts +275 -275
  1079. package/app/composables/workshop/town/useTownSceneRuntime.ts +390 -390
  1080. package/app/composables/workshop/town/useTownSheets.ts +41 -41
  1081. package/app/composables/workshop/town/useTownTrends.ts +93 -93
  1082. package/app/composables/workshop/useChannelList.ts +88 -88
  1083. package/app/composables/workshop/useChannelTerminals.ts +65 -65
  1084. package/app/composables/workshop/useComposerMentions.ts +130 -130
  1085. package/app/composables/workshop/useDcwStream.ts +374 -374
  1086. package/app/composables/workshop/useDeviceTwinDcwWrite.ts +77 -77
  1087. package/app/composables/workshop/useDeviceTwinPanel.ts +56 -56
  1088. package/app/composables/workshop/useEscClose.ts +44 -44
  1089. package/app/composables/workshop/useEventBlockView.ts +159 -159
  1090. package/app/composables/workshop/useEventBlocks.ts +33 -33
  1091. package/app/composables/workshop/useHitlAnswer.ts +184 -184
  1092. package/app/composables/workshop/useLaneWidths.ts +27 -27
  1093. package/app/composables/workshop/useOmpTerminalSession.ts +424 -424
  1094. package/app/composables/workshop/usePluginAdmin.ts +152 -152
  1095. package/app/composables/workshop/usePluginPanels.ts +72 -72
  1096. package/app/composables/workshop/useRuntimeConfigDraft.ts +118 -118
  1097. package/app/composables/workshop/useSettingsGroups.ts +243 -243
  1098. package/app/composables/workshop/useTaskBoardColumns.ts +47 -47
  1099. package/app/composables/workshop/useTerminalRenderer.ts +308 -308
  1100. package/app/composables/workshop/useTranscriptEnterStage.ts +48 -48
  1101. package/app/composables/workshop/useTranscriptHistory.ts +52 -52
  1102. package/app/composables/workshop/useTranscriptScroll.ts +113 -113
  1103. package/app/composables/workshop/useVisibleInterval.ts +42 -42
  1104. package/app/composables/workshop/useWorkshopApi.ts +6 -0
  1105. package/app/composables/workshop/useWorkshopWs.ts +265 -265
  1106. package/app/config/index.ts +1 -1
  1107. package/app/config/schema.ts +5 -0
  1108. package/app/middleware/locale-cookie.global.ts +22 -22
  1109. package/app/pages/aml/api.ts +6 -6
  1110. package/app/pages/aml/composables/useAmlDatasets.ts +38 -38
  1111. package/app/pages/aml/composables/useAmlEntities.ts +57 -57
  1112. package/app/pages/aml/composables/useAmlEnv.ts +191 -191
  1113. package/app/pages/aml/composables/useAmlExperiments.ts +45 -45
  1114. package/app/pages/aml/composables/useAmlFormat.ts +44 -44
  1115. package/app/pages/aml/composables/useAmlJobs.ts +131 -131
  1116. package/app/pages/aml/composables/useAmlModels.ts +56 -56
  1117. package/app/pages/aml/composables/useAmlNotes.ts +47 -47
  1118. package/app/pages/aml/composables/useAmlPredict.ts +93 -93
  1119. package/app/pages/aml/constants.ts +63 -63
  1120. package/app/pages/aml/index.vue +236 -236
  1121. package/app/pages/composables/useDashboardCharts.ts +192 -192
  1122. package/app/pages/composables/useDashboardData.ts +144 -144
  1123. package/app/pages/daq/composables/useDaqAddNode.ts +126 -126
  1124. package/app/pages/daq/composables/useDaqDetailBinding.ts +29 -29
  1125. package/app/pages/daq/composables/useDaqDetailFrames.ts +42 -42
  1126. package/app/pages/daq/composables/useDaqDetailNode.ts +53 -53
  1127. package/app/pages/daq/composables/useDaqDetailParams.ts +138 -138
  1128. package/app/pages/daq/composables/useDaqFilters.ts +187 -187
  1129. package/app/pages/daq/composables/useDaqNodeWindow.ts +86 -86
  1130. package/app/pages/daq/composables/useDaqOptimizations.ts +99 -99
  1131. package/app/pages/daq/composables/useDaqTemplates.ts +152 -152
  1132. package/app/pages/daq/index.vue +260 -260
  1133. package/app/pages/dcw/composables/useDcwCards.ts +27 -27
  1134. package/app/pages/dcw/composables/useDcwDetailScope.ts +145 -145
  1135. package/app/pages/dcw/composables/useDcwDetailTemplates.ts +94 -94
  1136. package/app/pages/dcw/composables/useDcwFilter.ts +29 -29
  1137. package/app/pages/dcw/composables/useDcwLedger.ts +34 -34
  1138. package/app/pages/dcw/composables/useDcwLineMutations.ts +115 -115
  1139. package/app/pages/dcw/composables/useDcwLineRun.ts +60 -60
  1140. package/app/pages/dcw/composables/useDcwProducts.ts +54 -54
  1141. package/app/pages/dcw/composables/useDcwQuery.ts +68 -68
  1142. package/app/pages/dcw/composables/useDcwQuickActions.ts +47 -47
  1143. package/app/pages/dcw/composables/useDcwRecipes.ts +256 -256
  1144. package/app/pages/dcw/composables/useDcwTemplates.ts +50 -50
  1145. package/app/pages/dcw/index.vue +195 -195
  1146. package/app/pages/dcw/types.ts +9 -9
  1147. package/app/pages/index.vue +126 -126
  1148. package/app/pages/logs/composables/useLogsFormat.ts +43 -43
  1149. package/app/pages/logs/composables/useLogsScope.ts +39 -39
  1150. package/app/pages/monitor/types.ts +61 -61
  1151. package/app/pages/ontology/index.vue +1 -1
  1152. package/app/pages/operations.vue +61 -61
  1153. package/app/pages/permissions/index.vue +369 -369
  1154. package/app/pages/studio/board.vue +30 -9
  1155. package/app/pages/studio/index.vue +40 -8
  1156. package/app/pages/studio/pipeline.vue +804 -0
  1157. package/app/pages/tokens/composables/useTokenClipboard.ts +33 -33
  1158. package/app/pages/tokens/composables/useTokenCreate.ts +93 -93
  1159. package/app/pages/tokens/composables/useTokenRename.ts +54 -54
  1160. package/app/pages/tokens/composables/useTokenReveal.ts +84 -84
  1161. package/app/pages/tokens/composables/useTokensList.ts +60 -60
  1162. package/app/pages/tokens.vue +111 -111
  1163. package/app/pages/tools/index.vue +98 -98
  1164. package/app/pages/workshop/agents.vue +130 -130
  1165. package/app/pages/workshop/composables/useAgentHarnessOptions.ts +59 -59
  1166. package/app/pages/workshop/composables/useAgentTemplateActions.ts +42 -42
  1167. package/app/pages/workshop/composables/useAgentTemplateDialogState.ts +24 -24
  1168. package/app/pages/workshop/composables/useAgentTemplateForm.ts +88 -88
  1169. package/app/pages/workshop/composables/useAgentTemplatesCatalog.ts +92 -92
  1170. package/app/pages/workshop/composables/useTeamActions.ts +44 -44
  1171. package/app/pages/workshop/composables/useTeamAddMemberDialog.ts +49 -49
  1172. package/app/pages/workshop/composables/useTeamCreateDialog.ts +67 -67
  1173. package/app/pages/workshop/composables/useTeamDeployDialog.ts +49 -49
  1174. package/app/pages/workshop/composables/useTeamDialogState.ts +46 -46
  1175. package/app/pages/workshop/composables/useTeamPluginDialog.ts +72 -72
  1176. package/app/pages/workshop/composables/useTeamsCatalog.ts +100 -100
  1177. package/app/pages/workshop/composables/useWorkbenchWorkspaces.ts +123 -123
  1178. package/app/pages/workshop/composables/useWorkspaceAuth.ts +31 -31
  1179. package/app/pages/workshop/composables/useWorkspaceChannels.ts +62 -62
  1180. package/app/pages/workshop/composables/useWorkspaceShell.ts +136 -136
  1181. package/app/pages/workshop/schedules.vue +553 -553
  1182. package/app/pages/workshop/w/[wsId].vue +221 -221
  1183. package/app/plugins/aw-plugins.client.ts +213 -213
  1184. package/app/plugins/esc-close.client.ts +31 -31
  1185. package/app/stores/workshop/hitl.ts +183 -183
  1186. package/app/stores/workshop/narrow-fetch.ts +23 -23
  1187. package/app/utils/api-error.ts +75 -75
  1188. package/app/utils/builtin-catalog.ts +104 -104
  1189. package/app/utils/chart-pipeline.ts +242 -0
  1190. package/app/utils/chart-trend.ts +97 -97
  1191. package/app/utils/dcw-driver-badge.ts +16 -16
  1192. package/app/utils/dcw-recipe-form.ts +26 -26
  1193. package/cli/commands/tui.mjs +28 -28
  1194. package/cli/commands/update.mjs +124 -124
  1195. package/cli/core/child-lifecycle.mjs +136 -136
  1196. package/cli/core/meta.mjs +38 -38
  1197. package/cli/core/post-build.mjs +96 -96
  1198. package/config.yml +1 -1
  1199. package/docs/cli.en.md +4 -4
  1200. package/docs/cli.md +4 -4
  1201. package/docs/mcp.en.md +27 -27
  1202. package/docs/multi-harness-architecture.md +248 -248
  1203. package/docs/plugins.en.md +1 -1
  1204. package/docs/plugins.md +1 -1
  1205. package/docs/sdk.en.md +1 -1
  1206. package/docs/sdk.md +1 -1
  1207. package/docs/tui.md +43 -43
  1208. package/i18n/dicts/_en.json +1551 -1551
  1209. package/i18n/dicts/_en2.json +300 -300
  1210. package/i18n/dicts/_en4.json +114 -114
  1211. package/i18n/dicts/agentLanesView.json +61 -61
  1212. package/i18n/dicts/appHeader.json +17 -17
  1213. package/i18n/dicts/channelSessionList.json +51 -51
  1214. package/i18n/dicts/chat.json +79 -79
  1215. package/i18n/dicts/clusterTool.json +4 -4
  1216. package/i18n/dicts/composer.json +38 -38
  1217. package/i18n/dicts/ctpl.json +37 -37
  1218. package/i18n/dicts/dcwDetail.json +219 -219
  1219. package/i18n/dicts/lineOps.json +14 -14
  1220. package/i18n/dicts/multiChannelView.json +13 -13
  1221. package/i18n/dicts/notifications.json +13 -13
  1222. package/i18n/dicts/taskInspectorDrawer.json +25 -25
  1223. package/i18n/dicts/teamPlugins.json +10 -10
  1224. package/i18n/dicts/townView.json +209 -209
  1225. package/i18n/locales/en.ts +64 -0
  1226. package/i18n/locales/zh-CN.ts +64 -0
  1227. package/mcp/discovery.mjs +227 -227
  1228. package/package.json +1 -1
  1229. package/public/favicon.svg +14 -14
  1230. package/public/robots.txt +3 -3
  1231. package/scripts/_audit/_detached-mes-20261028.mjs +48 -0
  1232. package/scripts/_audit/_detached-nodesim-20261028.mjs +50 -0
  1233. package/scripts/_audit/_detached-sim-20261028.mjs +44 -0
  1234. package/scripts/_audit/_live-execmodes-20261028.mjs +246 -0
  1235. package/scripts/_audit/_live-execmodes-invoke-20261028.mjs +203 -0
  1236. package/scripts/_audit/_mission-coupling-probe-20261028.mjs +27 -0
  1237. package/scripts/_audit/_mission-f1-evidence-20261028.mjs +56 -0
  1238. package/scripts/_audit/_mission-idd-remint-20261028.mjs +32 -0
  1239. package/scripts/_audit/_mission-ui-shots-20261028.mjs +56 -0
  1240. package/scripts/_audit/_mission-us10-timeline-20261028.mjs +65 -0
  1241. package/scripts/_audit/_mission-us12-tools-20261028.mjs +85 -0
  1242. package/scripts/_audit/_mission-us4-daq-dcw-20261028.mjs +115 -0
  1243. package/scripts/_audit/_mission-us5-mes-20261028.mjs +142 -0
  1244. package/scripts/_audit/_mission-us6-dialog-20261028.mjs +43 -0
  1245. package/scripts/_audit/_mission-us7-diag-20261028.mjs +42 -0
  1246. package/scripts/_audit/_mission-us7-final-20261028.mjs +79 -0
  1247. package/scripts/_audit/_mission-us7-idd-rag-20261028.mjs +147 -0
  1248. package/scripts/_audit/audit-harness-adapters.md +664 -664
  1249. package/scripts/_audit/aw-mcp-live-e2e.mjs +293 -293
  1250. package/scripts/_audit/bump-version.mjs +51 -51
  1251. package/scripts/_audit/detached-instance.mjs +112 -112
  1252. package/scripts/_audit/detached-start.mjs +103 -103
  1253. package/scripts/_audit/eda-ui-fix-acceptance.mjs +212 -212
  1254. package/scripts/_audit/guard-upstream-liveness.mjs +104 -104
  1255. package/scripts/_audit/http-api-authz-audit.md +657 -657
  1256. package/scripts/_audit/kb-team-mock-e2e.mjs +146 -146
  1257. package/scripts/_audit/kb-team-omp-e2e.mjs +229 -229
  1258. package/scripts/_audit/run.mjs +21 -21
  1259. package/scripts/_audit/runtime-audit.md +716 -716
  1260. package/scripts/_audit/skills-guided-e2e.mjs +316 -316
  1261. package/scripts/_audit/stability-soak.mjs +252 -252
  1262. package/scripts/_audit/stubs/nuxt-imports.mjs +67 -67
  1263. package/scripts/_audit/ts-register-hook.mjs +12 -12
  1264. package/scripts/_audit/ts-resolve-hook.mjs +96 -96
  1265. package/scripts/_aw0746-stage12.mjs +94 -94
  1266. package/scripts/_aw0746-stage34.mjs +136 -136
  1267. package/scripts/_aw0746-stage6b-train-sweep.mjs +145 -145
  1268. package/scripts/_aw0746-stage6c-jobsmoke.mjs +69 -69
  1269. package/scripts/_dbg-configroot-audit.mjs +86 -86
  1270. package/scripts/_dbg-daq-intervals-func.mjs +115 -115
  1271. package/scripts/_dbg-perms-e2e.mjs +142 -142
  1272. package/scripts/_dbg-protocol-matrix.mjs +462 -462
  1273. package/scripts/_dbg-render-regression.mjs +193 -193
  1274. package/scripts/_dbg-schedule-e2e.mjs +262 -262
  1275. package/scripts/_e2e-ui-functional.mjs +371 -371
  1276. package/scripts/_lib-aml-python-run.mjs +17 -17
  1277. package/scripts/_plc-sim-detached.cjs +22 -22
  1278. package/scripts/_provision-injection-line.mjs +39 -39
  1279. package/scripts/_run-matrix.ps1 +53 -53
  1280. package/scripts/_sweep-button-contrast.mjs +87 -87
  1281. package/scripts/acceptance-aml-hybrid-e2e.ts +396 -396
  1282. package/scripts/acceptance-aml-hybrid-live.mjs +93 -93
  1283. package/scripts/acceptance-aml-model-identity.ts +137 -137
  1284. package/scripts/agent-daq-isolation-e2e.mjs +91 -91
  1285. package/scripts/api-contract-smoke.mjs +126 -126
  1286. package/scripts/ask-hitl-e2e.mjs +96 -96
  1287. package/scripts/aw-expose.mjs +159 -159
  1288. package/scripts/channel-interaction-smoke.mjs +80 -80
  1289. package/scripts/check-docs-sync.mjs +1 -1
  1290. package/scripts/data-studio-ui-e2e.mjs +163 -163
  1291. package/scripts/demo-group-chat-all-real.ts +279 -279
  1292. package/scripts/dev-modbus-simulator.mjs +55 -55
  1293. package/scripts/docs-shots.mjs +36 -36
  1294. package/scripts/e2e-agentteam-chat.mjs +473 -473
  1295. package/scripts/e2e-agentteam-real-triage.mjs +421 -421
  1296. package/scripts/e2e-aml-decoupled.mjs +162 -162
  1297. package/scripts/e2e-aw-tui-global.mjs +277 -277
  1298. package/scripts/e2e-closedloop/cleanup.mjs +27 -27
  1299. package/scripts/e2e-closedloop/lib.mjs +109 -109
  1300. package/scripts/e2e-closedloop/main.mjs +59 -59
  1301. package/scripts/e2e-closedloop/scenarios-accounts.mjs +210 -210
  1302. package/scripts/e2e-closedloop/scenarios-authz.mjs +196 -196
  1303. package/scripts/e2e-closedloop/scenarios-daq-dcw.mjs +222 -222
  1304. package/scripts/e2e-closedloop/scenarios-plugins.mjs +169 -169
  1305. package/scripts/e2e-closedloop/state.mjs +10 -10
  1306. package/scripts/e2e-config-groups.mjs +238 -238
  1307. package/scripts/e2e-crash-cycle.mjs +108 -108
  1308. package/scripts/e2e-direct-rest-simulator-paper.mjs +624 -0
  1309. package/scripts/e2e-eda-pipeline.mjs +307 -0
  1310. package/scripts/e2e-execution-modes.mjs +290 -0
  1311. package/scripts/e2e-full-closedloop.mjs +16 -16
  1312. package/scripts/e2e-hil-multi-user.mjs +307 -307
  1313. package/scripts/e2e-hil-restart.mjs +339 -339
  1314. package/scripts/e2e-injection-recipe-closedloop.mjs +1 -1
  1315. package/scripts/e2e-line-governance.mjs +352 -352
  1316. package/scripts/e2e-mqtt-protocol.mjs +945 -0
  1317. package/scripts/e2e-ontology.mjs +393 -393
  1318. package/scripts/e2e-pi-simulator-paper.mjs +2317 -0
  1319. package/scripts/e2e-plc-plugin-closedloop.mjs +549 -549
  1320. package/scripts/e2e-registered-harness-simulator-paper.mjs +1926 -0
  1321. package/scripts/e2e-resume-crash.mjs +20 -6
  1322. package/scripts/e2e-simulator-optimizer-paper.mjs +264 -0
  1323. package/scripts/e2e-timezone-settings.mjs +4 -2
  1324. package/scripts/fixtures/omp-paper-harness.mjs +163 -0
  1325. package/scripts/full-stack-shots.mjs +145 -145
  1326. package/scripts/full-tool-injection-harness-e2e.mjs +214 -214
  1327. package/scripts/hitl-reject-e2e.mjs +131 -131
  1328. package/scripts/line-log-smoke.mjs +260 -260
  1329. package/scripts/live-aml-mockomp.mjs +304 -304
  1330. package/scripts/live-aml-optloop-resume.mjs +322 -322
  1331. package/scripts/live-aml-optloop.mjs +588 -588
  1332. package/scripts/live-aml-stage9.mjs +169 -169
  1333. package/scripts/live-aml-two-goals.mjs +315 -315
  1334. package/scripts/live-optloop-two-modes.mjs +857 -857
  1335. package/scripts/mes-agent-integration-e2e.mjs +361 -361
  1336. package/scripts/ops-plugins-e2e.mjs +85 -85
  1337. package/scripts/scenario-suite-setup.mjs +337 -337
  1338. package/scripts/scenario-suite-stability.mjs +144 -144
  1339. package/scripts/team-coordination-e2e.mjs +96 -96
  1340. package/scripts/test-agentteam-workflow.ts +472 -472
  1341. package/scripts/test-aw-skills.mjs +102 -102
  1342. package/scripts/test-daq-frame-race.mjs +358 -358
  1343. package/scripts/test-data-root.mjs +208 -208
  1344. package/scripts/test-events-index.mjs +176 -176
  1345. package/scripts/test-group-chat-unit/lib.ts +186 -186
  1346. package/scripts/test-group-chat-unit/main.ts +45 -45
  1347. package/scripts/test-group-chat-unit.ts +35 -35
  1348. package/scripts/test-hitl-decision.ts +526 -526
  1349. package/scripts/test-hitl-registry.ts +112 -112
  1350. package/scripts/test-log-flooding.mjs +160 -160
  1351. package/scripts/test-lru.mjs +101 -101
  1352. package/scripts/test-plugin-hardening.mjs +90 -90
  1353. package/scripts/test-plugin-lifecycle.mjs +173 -173
  1354. package/scripts/test-rollback-index.mjs +137 -137
  1355. package/scripts/test-schedule-runtime.ts +309 -309
  1356. package/scripts/test-sdk-surface.mjs +158 -158
  1357. package/scripts/test-serial-bridge.mjs +418 -418
  1358. package/scripts/test-tui-commands.mjs +148 -148
  1359. package/scripts/test-tui-reducers.mjs +72 -72
  1360. package/scripts/three-system-e2e/lib.mjs +79 -79
  1361. package/scripts/three-system-e2e/main.mjs +40 -40
  1362. package/scripts/three-system-e2e/phases/phase-0-user-token.mjs +42 -42
  1363. package/scripts/three-system-e2e/phases/phase-0a2-line-autoselect.mjs +35 -35
  1364. package/scripts/three-system-e2e/phases/phase-0b-fixture-grants.mjs +39 -39
  1365. package/scripts/three-system-e2e/phases/phase-0c-plugin-outbound-auth.mjs +95 -95
  1366. package/scripts/three-system-e2e/phases/stage-1-health.mjs +47 -47
  1367. package/scripts/three-system-e2e/phases/stage-2-5-team-plugins.mjs +84 -84
  1368. package/scripts/three-system-e2e/phases/stage-2-teams-tools-hitl.mjs +184 -184
  1369. package/scripts/three-system-e2e/phases/stage-3-diag.mjs +73 -73
  1370. package/scripts/three-system-e2e/phases/stage-4-plugin-toggle.mjs +53 -53
  1371. package/scripts/three-system-e2e/state.mjs +87 -87
  1372. package/scripts/three-system-e2e.mjs +40 -40
  1373. package/scripts/tool-face-batch-identity-e2e.mjs +222 -222
  1374. package/scripts/tsconfig.json +14 -14
  1375. package/scripts/tui-smoke.mjs +100 -100
  1376. package/scripts/typecheck.mjs +75 -75
  1377. package/scripts/ui/md-lint.mjs +80 -80
  1378. package/scripts/ui/readme-assets.mjs +30 -30
  1379. package/scripts/ui/readme-shots.mjs +42 -42
  1380. package/scripts/ui/record-demo.mjs +557 -557
  1381. package/scripts/ui/record.mjs +225 -225
  1382. package/scripts/ui/seed-admin.mjs +68 -68
  1383. package/scripts/ui/seed-demo.mjs +83 -83
  1384. package/scripts/ui/seed-industrial-demo.mjs +171 -171
  1385. package/scripts/ui/shot-hero.mjs +25 -25
  1386. package/scripts/ui/shots.mjs +75 -75
  1387. package/scripts/ui/verify-nav.mjs +51 -51
  1388. package/scripts/ui/verify-responsive.mjs +285 -285
  1389. package/sdk/client.d.mts +110 -110
  1390. package/sdk/examples/line-sentinel/index.mjs +105 -105
  1391. package/sdk/examples/ops-notifier/index.mjs +34 -34
  1392. package/sdk/examples/sample-insight/index.mjs +39 -39
  1393. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.json +1 -0
  1394. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/942d2679b87b96c612b4f2a425c3ccc5b6f3234f0cf589a8441602f866fbe277.source +41 -0
  1395. package/server/.mimosa/hook-state/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2.mvhn1irp-99488-e3fdc1cbfc.baseline/dd617a82339d2c61e49e28e416aabeb2fc100fb3cb1beca18d02dfb833214af6.source +51 -0
  1396. package/server/.mimosa/hook-status/sess_869e5bfd-07f4-4b6e-a991-6221fcf6b7d2-e67b6b91bf.json +14 -0
  1397. package/server/api/plugins/client/[name].get.ts +18 -18
  1398. package/server/api/plugins/i18n.get.ts +12 -12
  1399. package/server/api/plugins/manifest.get.ts +10 -10
  1400. package/server/api/system/backup/list.get.ts +32 -32
  1401. package/server/api/system/backup/run.post.ts +21 -21
  1402. package/server/api/system/config-groups/[id].delete.ts +21 -21
  1403. package/server/api/system/config-groups/[id].patch.ts +26 -26
  1404. package/server/api/system/config-groups/index.get.ts +21 -21
  1405. package/server/api/system/config-groups/index.post.ts +33 -33
  1406. package/server/api/system/timezone.get.ts +20 -20
  1407. package/server/api/users/tokens/[id]/token.get.ts +11 -11
  1408. package/server/api/workshop/[...path].ts +13 -13
  1409. package/server/api/workshop/agent-tools/approvals/index.get.ts +43 -43
  1410. package/server/api/workshop/agent-tools/bindings/[id].delete.ts +26 -26
  1411. package/server/api/workshop/agent-tools/bindings/grant.post.ts +45 -45
  1412. package/server/api/workshop/agent-tools/bindings/index.get.ts +41 -41
  1413. package/server/api/workshop/agent-tools/bindings/revoke.post.ts +42 -42
  1414. package/server/api/workshop/aml/datasets/[id]/preview.get.ts +68 -68
  1415. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -39
  1416. package/server/api/workshop/aml/datasets/[id].get.ts +53 -53
  1417. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -30
  1418. package/server/api/workshop/aml/datasets/index.get.ts +20 -20
  1419. package/server/api/workshop/aml/datasets/index.post.ts +27 -27
  1420. package/server/api/workshop/aml/entities/index.get.ts +13 -13
  1421. package/server/api/workshop/aml/entities/prune.post.ts +28 -28
  1422. package/server/api/workshop/aml/env/index.get.ts +13 -13
  1423. package/server/api/workshop/aml/env/recheck.post.ts +14 -14
  1424. package/server/api/workshop/aml/env/uv.post.ts +21 -21
  1425. package/server/api/workshop/aml/env/venv.post.ts +24 -24
  1426. package/server/api/workshop/aml/experiments/index.get.ts +35 -35
  1427. package/server/api/workshop/aml/index.get.ts +37 -37
  1428. package/server/api/workshop/aml/jobs/[id]/cancel.post.ts +21 -21
  1429. package/server/api/workshop/aml/jobs/[id]/logs.get.ts +23 -23
  1430. package/server/api/workshop/aml/jobs/[id]/retry.post.ts +20 -20
  1431. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -44
  1432. package/server/api/workshop/aml/jobs/[id].get.ts +23 -23
  1433. package/server/api/workshop/aml/jobs/index.get.ts +26 -26
  1434. package/server/api/workshop/aml/models/[id]/predict.post.ts +24 -24
  1435. package/server/api/workshop/aml/models/[id]/promote.post.ts +30 -30
  1436. package/server/api/workshop/aml/models/index.get.ts +48 -48
  1437. package/server/api/workshop/aml/training-plans/[id]/train.post.ts +18 -18
  1438. package/server/api/workshop/aml/training-plans/[id].delete.ts +18 -18
  1439. package/server/api/workshop/aml/training-plans/[id].patch.ts +30 -30
  1440. package/server/api/workshop/aml/training-plans/index.get.ts +9 -9
  1441. package/server/api/workshop/aml/training-plans/index.post.ts +43 -43
  1442. package/server/api/workshop/analysis/index.post.ts +54 -0
  1443. package/server/api/workshop/approvals/[id]/decide.post.ts +30 -30
  1444. package/server/api/workshop/approvals/index.get.ts +22 -22
  1445. package/server/api/workshop/audit.get.ts +43 -43
  1446. package/server/api/workshop/channels/[id]/chat/messages/[messageId]/read.post.ts +22 -22
  1447. package/server/api/workshop/channels/[id]/chat/messages/index.get.ts +29 -29
  1448. package/server/api/workshop/channels/[id]/chat/messages/index.post.ts +51 -51
  1449. package/server/api/workshop/channels/[id]/chat/permissions.get.ts +35 -35
  1450. package/server/api/workshop/channels/[id]/execution-mode.patch.ts +94 -0
  1451. package/server/api/workshop/channels/[id]/index.patch.ts +64 -64
  1452. package/server/api/workshop/channels/[id]/members/[userId]/approve.post.ts +20 -20
  1453. package/server/api/workshop/channels/[id]/members/[userId].delete.ts +21 -21
  1454. package/server/api/workshop/channels/[id]/members/index.get.ts +23 -23
  1455. package/server/api/workshop/channels/[id]/members/leave.post.ts +20 -20
  1456. package/server/api/workshop/channels/[id]/twin-profile.get.ts +45 -45
  1457. package/server/api/workshop/channels/[id]/twin-profile.patch.ts +72 -72
  1458. package/server/api/workshop/daq/[id]/frames/content.get.ts +3 -0
  1459. package/server/api/workshop/daq/[id]/ingest.post.ts +5 -0
  1460. package/server/api/workshop/daq/[id]/test.post.ts +1 -1
  1461. package/server/api/workshop/daq/alarms.get.ts +16 -16
  1462. package/server/api/workshop/dcw/[id]/write.post.ts +4 -4
  1463. package/server/api/workshop/dcw/[id].delete.ts +41 -41
  1464. package/server/api/workshop/dcw/[id].patch.ts +40 -40
  1465. package/server/api/workshop/dcw/mes-hook-test.post.ts +5 -3
  1466. package/server/api/workshop/dcw/mes-test-read.post.ts +24 -24
  1467. package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -17
  1468. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -21
  1469. package/server/api/workshop/dcw/params/[id].delete.ts +19 -19
  1470. package/server/api/workshop/dcw/params/[id].patch.ts +23 -23
  1471. package/server/api/workshop/dcw/params/index.get.ts +27 -27
  1472. package/server/api/workshop/dcw/params/index.post.ts +25 -25
  1473. package/server/api/workshop/dcw/products/[id].delete.ts +6 -2
  1474. package/server/api/workshop/dcw/products/[id].patch.ts +8 -2
  1475. package/server/api/workshop/dcw/recipes/[id]/index.patch.ts +6 -1
  1476. package/server/api/workshop/dcw/recipes/[id]/versions.get.ts +14 -14
  1477. package/server/api/workshop/dcw/recipes/[id].delete.ts +25 -25
  1478. package/server/api/workshop/dcw/recipes/index.get.ts +12 -12
  1479. package/server/api/workshop/dcw/runs/[id]/close.post.ts +15 -15
  1480. package/server/api/workshop/dcw/templates/[key].delete.ts +14 -14
  1481. package/server/api/workshop/dcw/templates/[key].patch.ts +16 -16
  1482. package/server/api/workshop/dcw/templates/index.post.ts +15 -15
  1483. package/server/api/workshop/dcw/test-driver.post.ts +16 -16
  1484. package/server/api/workshop/device-twins/[id].delete.ts +25 -25
  1485. package/server/api/workshop/eda/runs/[id]/labels.patch.ts +25 -25
  1486. package/server/api/workshop/eda/templates/[id].delete.ts +14 -0
  1487. package/server/api/workshop/eda/templates/[id].get.ts +15 -0
  1488. package/server/api/workshop/eda/templates/[id].patch.ts +20 -0
  1489. package/server/api/workshop/eda/templates/index.get.ts +11 -0
  1490. package/server/api/workshop/eda/templates/index.post.ts +20 -0
  1491. package/server/api/workshop/exp/confirmations/[id]/decide.post.ts +41 -41
  1492. package/server/api/workshop/exp/confirmations/index.get.ts +25 -25
  1493. package/server/api/workshop/harnesses/[id]/providers.get.ts +16 -16
  1494. package/server/api/workshop/hitl/respond.post.ts +94 -94
  1495. package/server/api/workshop/mes/secrets/[ref].delete.ts +31 -0
  1496. package/server/api/workshop/mes/secrets/index.get.ts +13 -0
  1497. package/server/api/workshop/mes/secrets/index.put.ts +39 -0
  1498. package/server/api/workshop/notifications/index.get.ts +60 -60
  1499. package/server/api/workshop/notifications/read.post.ts +31 -31
  1500. package/server/api/workshop/ontology/drafts/[draftId]/subgraph.ts +24 -24
  1501. package/server/api/workshop/plugins/[name]/disable.post.ts +21 -21
  1502. package/server/api/workshop/plugins/[name]/enable.post.ts +21 -21
  1503. package/server/api/workshop/plugins/[name]/index.get.ts +14 -14
  1504. package/server/api/workshop/schedules/[id]/run.post.ts +15 -15
  1505. package/server/api/workshop/schedules/[id]/runs.get.ts +15 -15
  1506. package/server/api/workshop/schedules/[id].delete.ts +14 -14
  1507. package/server/api/workshop/schedules/[id].get.ts +13 -13
  1508. package/server/api/workshop/schedules/[id].patch.ts +29 -29
  1509. package/server/api/workshop/schedules/index.get.ts +12 -12
  1510. package/server/api/workshop/schedules/index.post.ts +32 -32
  1511. package/server/api/workshop/tasks/[id]/reassign.post.ts +32 -32
  1512. package/server/api/workshop/tasks/[id]/update.post.ts +35 -35
  1513. package/server/api/workshop/teams/[id]/plugins/index.get.ts +36 -36
  1514. package/server/api/workshop/teams/[id]/plugins/index.put.ts +42 -42
  1515. package/server/api/workshop/ws/audience.ts +56 -56
  1516. package/server/api/workshop/ws/db-buffer.ts +68 -68
  1517. package/server/api/workshop/ws/event-mapping.ts +47 -47
  1518. package/server/api/workshop/ws/handlers.ts +132 -132
  1519. package/server/api/workshop/ws/hub.ts +133 -133
  1520. package/server/api/workshop/ws/index.ts +23 -23
  1521. package/server/api/workshop/ws/notification-uplink.ts +77 -77
  1522. package/server/api/workshop/ws/shared.ts +94 -94
  1523. package/server/api/workshop/ws/streams.ts +146 -146
  1524. package/server/middleware/00-security-headers.ts +38 -38
  1525. package/server/middleware/01-rate-guard.ts +101 -101
  1526. package/server/plugins/aml-twin-worker.ts +32 -32
  1527. package/server/plugins/dev-stability-guard.ts +42 -42
  1528. package/server/plugins-builtin/diag-bridge/host/constants.mjs +25 -25
  1529. package/server/plugins-builtin/diag-bridge/host/exports.mjs +104 -104
  1530. package/server/plugins-builtin/diag-bridge/host/index.mjs +15 -15
  1531. package/server/plugins-builtin/diag-bridge/host/intents.mjs +62 -62
  1532. package/server/plugins-builtin/diag-bridge/host/snapshot.mjs +93 -93
  1533. package/server/plugins-builtin/diag-bridge/index.mjs +9 -9
  1534. package/server/plugins-builtin/serial-bridge/client.mjs +211 -211
  1535. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -409
  1536. package/server/plugins-builtin/serial-bridge/i18n.json +62 -62
  1537. package/server/plugins-builtin/serial-bridge/index.mjs +247 -247
  1538. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -208
  1539. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -168
  1540. package/server/services/system-config/contracts.ts +29 -29
  1541. package/server/services/system-config/dispose.ts +19 -19
  1542. package/server/services/system-config/facade.ts +26 -26
  1543. package/server/services/system-config/groups.ts +108 -108
  1544. package/server/services/system-config/index.ts +21 -21
  1545. package/server/services/system-config/init.ts +26 -26
  1546. package/server/services/system-config/mutate.ts +103 -103
  1547. package/server/services/system-config/plugins.ts +104 -104
  1548. package/server/services/system-config/snapshot.ts +59 -59
  1549. package/server/services/system-config/state.ts +79 -79
  1550. package/server/services/system-config/types.ts +58 -58
  1551. package/server/services/workshop/.mimosa/hook-state/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f.json +1 -0
  1552. package/server/services/workshop/.mimosa/hook-status/sess_fed429fb-c8b7-4a50-bbd6-45afc580893f-e6b75bbfe6.json +14 -0
  1553. package/server/services/workshop/agents/adapters/omp-rpc-client/api.ts +111 -111
  1554. package/server/services/workshop/agents/adapters/omp-rpc-client/contracts.ts +22 -22
  1555. package/server/services/workshop/agents/adapters/omp-rpc-client/facade.ts +7 -7
  1556. package/server/services/workshop/agents/adapters/omp-rpc-client/frames.ts +18 -0
  1557. package/server/services/workshop/agents/adapters/omp-rpc-client/helpers.ts +38 -38
  1558. package/server/services/workshop/agents/adapters/omp-rpc-client/index.ts +25 -25
  1559. package/server/services/workshop/agents/adapters/omp-rpc-client/start.ts +70 -70
  1560. package/server/services/workshop/agents/adapters/omp-rpc-client/state.ts +65 -65
  1561. package/server/services/workshop/agents/adapters/omp-rpc-client/stdout.ts +92 -92
  1562. package/server/services/workshop/agents/adapters/omp-rpc-client/usage.ts +47 -47
  1563. package/server/services/workshop/agents/agent-badge.ts +38 -38
  1564. package/server/services/workshop/agents/binding-authz.ts +60 -60
  1565. package/server/services/workshop/agents/binding-mode.ts +51 -51
  1566. package/server/services/workshop/agents/codex-agent/client.ts +170 -170
  1567. package/server/services/workshop/agents/codex-agent/core.ts +119 -119
  1568. package/server/services/workshop/agents/codex-agent/facade.ts +8 -8
  1569. package/server/services/workshop/agents/codex-agent/helpers.ts +13 -13
  1570. package/server/services/workshop/agents/codex-agent/hitl.ts +138 -138
  1571. package/server/services/workshop/agents/codex-agent/index.ts +14 -14
  1572. package/server/services/workshop/agents/codex-agent/turn.ts +367 -367
  1573. package/server/services/workshop/agents/codex-agent/types.ts +42 -42
  1574. package/server/services/workshop/agents/execution-mode.ts +90 -0
  1575. package/server/services/workshop/agents/harness-process.ts +3 -3
  1576. package/server/services/workshop/agents/harness-terminal/api.ts +197 -197
  1577. package/server/services/workshop/agents/harness-terminal/index.ts +17 -17
  1578. package/server/services/workshop/agents/harness-terminal/io.ts +120 -120
  1579. package/server/services/workshop/agents/harness-terminal/park.ts +55 -55
  1580. package/server/services/workshop/agents/harness-terminal/sanitize.ts +98 -98
  1581. package/server/services/workshop/agents/harness-terminal/session.ts +124 -124
  1582. package/server/services/workshop/agents/harness-terminal/shared.ts +74 -74
  1583. package/server/services/workshop/agents/hitl-capabilities.ts +312 -312
  1584. package/server/services/workshop/agents/hitl-decision/answers.ts +32 -32
  1585. package/server/services/workshop/agents/hitl-decision/decide.ts +268 -268
  1586. package/server/services/workshop/agents/hitl-decision/payload.ts +45 -45
  1587. package/server/services/workshop/agents/hitl-decision/shared.ts +108 -108
  1588. package/server/services/workshop/agents/hitl-decision/visibility.ts +94 -94
  1589. package/server/services/workshop/agents/host-tool-bridge/catalog.ts +42 -13
  1590. package/server/services/workshop/agents/host-tool-bridge/dispatch.ts +16 -0
  1591. package/server/services/workshop/agents/host-tool-bridge/per-agent.ts +10 -8
  1592. package/server/services/workshop/agents/host-tool-bridge/tools/progress.ts +84 -84
  1593. package/server/services/workshop/agents/host-tool-bridge/tools/team-delegation.ts +104 -104
  1594. package/server/services/workshop/agents/host-tool-bridge/tools/team.ts +70 -70
  1595. package/server/services/workshop/agents/industrial/aml-activity.ts +131 -131
  1596. package/server/services/workshop/agents/industrial/audit-query.ts +66 -66
  1597. package/server/services/workshop/agents/industrial/daq-export.ts +9 -8
  1598. package/server/services/workshop/agents/industrial/daq-tools.ts +43 -6
  1599. package/server/services/workshop/agents/industrial/dcw-tools.ts +22 -4
  1600. package/server/services/workshop/agents/industrial/exp-tools.ts +104 -104
  1601. package/server/services/workshop/agents/industrial/grant-guard.ts +52 -9
  1602. package/server/services/workshop/agents/industrial/ops-tools.ts +54 -16
  1603. package/server/services/workshop/agents/industrial/param-tools.ts +69 -69
  1604. package/server/services/workshop/agents/industrial/recipe-gate.ts +25 -7
  1605. package/server/services/workshop/agents/industrial/recipe-propose-tools.ts +1 -1
  1606. package/server/services/workshop/agents/industrial-context.ts +160 -83
  1607. package/server/services/workshop/agents/node-bindings.repo.ts +207 -207
  1608. package/server/services/workshop/agents/node-delegation.ts +159 -159
  1609. package/server/services/workshop/agents/omp-agent/core.ts +146 -146
  1610. package/server/services/workshop/agents/omp-agent/facade.ts +8 -8
  1611. package/server/services/workshop/agents/omp-agent/helpers.ts +37 -37
  1612. package/server/services/workshop/agents/omp-agent/index.ts +16 -16
  1613. package/server/services/workshop/agents/omp-agent/supervision-history.ts +38 -0
  1614. package/server/services/workshop/agents/omp-agent/tools-steer.ts +18 -1
  1615. package/server/services/workshop/agents/omp-agent/types.ts +45 -45
  1616. package/server/services/workshop/agents/opencode-agent/core.ts +77 -77
  1617. package/server/services/workshop/agents/opencode-agent/facade.ts +8 -8
  1618. package/server/services/workshop/agents/opencode-agent/helpers.ts +29 -29
  1619. package/server/services/workshop/agents/opencode-agent/hitl.ts +113 -113
  1620. package/server/services/workshop/agents/opencode-agent/index.ts +16 -16
  1621. package/server/services/workshop/agents/opencode-agent/lifecycle.ts +44 -44
  1622. package/server/services/workshop/agents/opencode-agent/server.ts +244 -244
  1623. package/server/services/workshop/agents/opencode-agent/turn.ts +278 -278
  1624. package/server/services/workshop/agents/opencode-agent/types.ts +54 -54
  1625. package/server/services/workshop/agents/prompt-i18n.ts +67 -0
  1626. package/server/services/workshop/agents/tool-classes.ts +44 -44
  1627. package/server/services/workshop/aml/clean.ts +120 -120
  1628. package/server/services/workshop/aml/entity.ts +367 -367
  1629. package/server/services/workshop/aml/job-orchestrator/broadcast.ts +37 -37
  1630. package/server/services/workshop/aml/job-orchestrator/control.ts +94 -94
  1631. package/server/services/workshop/aml/job-orchestrator/failure.ts +96 -96
  1632. package/server/services/workshop/aml/job-orchestrator/index.ts +22 -22
  1633. package/server/services/workshop/aml/job-orchestrator/process.ts +101 -101
  1634. package/server/services/workshop/aml/job-orchestrator/shared.ts +53 -53
  1635. package/server/services/workshop/aml/job-orchestrator/status.ts +20 -20
  1636. package/server/services/workshop/aml/job-orchestrator/tick.ts +37 -37
  1637. package/server/services/workshop/aml/python/__pycache__/aml_eval.cpython-312.pyc +0 -0
  1638. package/server/services/workshop/aml/python/__pycache__/amlkit.cpython-312.pyc +0 -0
  1639. package/server/services/workshop/aml/python/__pycache__/train-example.cpython-312.pyc +0 -0
  1640. package/server/services/workshop/aml/python/__pycache__/train-hybrid-example.cpython-312.pyc +0 -0
  1641. package/server/services/workshop/aml/python/train-example.py +92 -92
  1642. package/server/services/workshop/aml/runtime.ts +137 -137
  1643. package/server/services/workshop/aml/stats.ts +140 -140
  1644. package/server/services/workshop/aml/twin/calibration-worker.ts +150 -150
  1645. package/server/services/workshop/aml/twin/channel-profile.ts +12 -8
  1646. package/server/services/workshop/aml/twin/model-backed-provider.ts +332 -332
  1647. package/server/services/workshop/aml/twin/physics-spec-draft.ts +185 -185
  1648. package/server/services/workshop/aml/twin/prompt-composer.ts +143 -143
  1649. package/server/services/workshop/aml/twin/training-plans.ts +260 -260
  1650. package/server/services/workshop/aml/twin/write-guard.ts +19 -19
  1651. package/server/services/workshop/assets/character-asset.repo.ts +1 -1
  1652. package/server/services/workshop/assets/device-twin.repo.ts +1 -1
  1653. package/server/services/workshop/daq/bus/index.ts +12 -5
  1654. package/server/services/workshop/daq/daq-controller/contracts.ts +39 -39
  1655. package/server/services/workshop/daq/daq-controller/driver-probe.ts +7 -4
  1656. package/server/services/workshop/daq/daq-controller/facade.ts +28 -28
  1657. package/server/services/workshop/daq/daq-controller/frames.ts +137 -137
  1658. package/server/services/workshop/daq/daq-controller/helpers.ts +52 -52
  1659. package/server/services/workshop/daq/daq-controller/index.ts +22 -22
  1660. package/server/services/workshop/daq/daq-controller/ingest.ts +9 -10
  1661. package/server/services/workshop/daq/daq-controller/push.ts +336 -0
  1662. package/server/services/workshop/daq/daq-controller/runtime-control.ts +2 -0
  1663. package/server/services/workshop/daq/daq-controller/state.ts +11 -3
  1664. package/server/services/workshop/daq/daq-controller/sweep-alarms.ts +10 -2
  1665. package/server/services/workshop/daq/daq-controller/tsdb-row.ts +48 -0
  1666. package/server/services/workshop/daq/daq-controller/tsdb-twin.ts +4 -1
  1667. package/server/services/workshop/daq/daq-controller/views.ts +5 -2
  1668. package/server/services/workshop/daq/decoders.ts +77 -0
  1669. package/server/services/workshop/daq/drivers/http.ts +33 -6
  1670. package/server/services/workshop/daq/drivers/index.ts +3 -3
  1671. package/server/services/workshop/daq/drivers/mock.ts +130 -130
  1672. package/server/services/workshop/daq/drivers/modbus-rtu.ts +67 -67
  1673. package/server/services/workshop/daq/drivers/modbus-tcp.ts +307 -307
  1674. package/server/services/workshop/daq/drivers/mqtt-decode.ts +292 -0
  1675. package/server/services/workshop/daq/drivers/mqtt.ts +417 -94
  1676. package/server/services/workshop/daq/drivers/opcua.ts +227 -227
  1677. package/server/services/workshop/daq/drivers/s7-stub.ts +29 -29
  1678. package/server/services/workshop/daq/drivers/shared.ts +30 -1
  1679. package/server/services/workshop/daq/export-limits.ts +38 -0
  1680. package/server/services/workshop/daq/frames.ts +8 -2
  1681. package/server/services/workshop/daq/host-bindings.ts +71 -71
  1682. package/server/services/workshop/daq/host-ports.ts +65 -65
  1683. package/server/services/workshop/daq/plugin-bridge.ts +24 -2
  1684. package/server/services/workshop/daq/storage/latest-window.ts +132 -0
  1685. package/server/services/workshop/db/aml-team-seeds.ts +118 -118
  1686. package/server/services/workshop/db/backup-registry.ts +33 -33
  1687. package/server/services/workshop/db/channel-member.repo.ts +122 -122
  1688. package/server/services/workshop/db/channel.repo.ts +203 -203
  1689. package/server/services/workshop/db/chat-message.repo.ts +233 -233
  1690. package/server/services/workshop/db/database/index.ts +18 -18
  1691. package/server/services/workshop/db/database/json.ts +14 -14
  1692. package/server/services/workshop/db/database/migrations.ts +8 -0
  1693. package/server/services/workshop/db/database/open.ts +3 -1
  1694. package/server/services/workshop/db/database/schema.ts +1 -0
  1695. package/server/services/workshop/db/database/seed-data.ts +60 -60
  1696. package/server/services/workshop/db/hitl-request.repo.ts +221 -221
  1697. package/server/services/workshop/db/notification.repo.ts +199 -199
  1698. package/server/services/workshop/db/readonly.ts +30 -30
  1699. package/server/services/workshop/db/scheduled-task.repo.ts +235 -235
  1700. package/server/services/workshop/db/transaction.ts +72 -72
  1701. package/server/services/workshop/dcw/dcw-controller/actuation.ts +6 -0
  1702. package/server/services/workshop/dcw/dcw-controller/contracts.ts +16 -16
  1703. package/server/services/workshop/dcw/dcw-controller/control.ts +78 -78
  1704. package/server/services/workshop/dcw/dcw-controller/facade.ts +19 -19
  1705. package/server/services/workshop/dcw/dcw-controller/index.ts +22 -22
  1706. package/server/services/workshop/dcw/dcw-controller/params.ts +97 -97
  1707. package/server/services/workshop/dcw/dcw-controller/products.ts +103 -103
  1708. package/server/services/workshop/dcw/dcw-controller/write-audit.ts +1 -1
  1709. package/server/services/workshop/dcw/dcw-templates.ts +136 -136
  1710. package/server/services/workshop/dcw/drivers/http.ts +41 -15
  1711. package/server/services/workshop/dcw/drivers/mes-rest.ts +14 -51
  1712. package/server/services/workshop/dcw/drivers/mqtt.ts +58 -7
  1713. package/server/services/workshop/dcw/drivers/shared.ts +3 -0
  1714. package/server/services/workshop/dcw/param-conversion.ts +78 -78
  1715. package/server/services/workshop/dcw/param-map.repo.ts +349 -349
  1716. package/server/services/workshop/dcw/plugin-bridge.ts +45 -45
  1717. package/server/services/workshop/dcw/recipe-rollback-manager/contracts.ts +26 -26
  1718. package/server/services/workshop/dcw/recipe-rollback-manager/facade.ts +13 -13
  1719. package/server/services/workshop/dcw/recipe-rollback-manager/helpers.ts +30 -30
  1720. package/server/services/workshop/dcw/recipe-rollback-manager/index.ts +17 -17
  1721. package/server/services/workshop/dcw/recipe-rollback-manager/internal.ts +33 -33
  1722. package/server/services/workshop/dcw/recipe-rollback-manager/judge.ts +52 -52
  1723. package/server/services/workshop/dcw/recipe-rollback-manager/lock.ts +137 -137
  1724. package/server/services/workshop/dcw/recipe-rollback-manager/rollback.ts +190 -190
  1725. package/server/services/workshop/dcw/recipe-rollback-manager/state.ts +21 -21
  1726. package/server/services/workshop/dcw/recipe-rollback-manager/sweep.ts +77 -77
  1727. package/server/services/workshop/dcw/recipe-rollback-manager/types.ts +3 -3
  1728. package/server/services/workshop/dcw/recipe-rollback-manager/views.ts +214 -214
  1729. package/server/services/workshop/eda/chart-repo.ts +19 -2
  1730. package/server/services/workshop/eda/data-export.ts +3 -3
  1731. package/server/services/workshop/eda/data-query.ts +4 -1
  1732. package/server/services/workshop/eda/eda-db.ts +13 -0
  1733. package/server/services/workshop/eda/template-repo.ts +101 -0
  1734. package/server/services/workshop/exp/exp-collector.ts +275 -275
  1735. package/server/services/workshop/exp/exp-state.repo.ts +339 -339
  1736. package/server/services/workshop/mes/mes-controller.ts +1155 -1155
  1737. package/server/services/workshop/mes/mes-hook.ts +567 -567
  1738. package/server/services/workshop/mes/mes-secrets.repo.ts +119 -0
  1739. package/server/services/workshop/net/secret-auth.ts +84 -0
  1740. package/server/services/workshop/net/ssrf.ts +74 -0
  1741. package/server/services/workshop/ontology/subgraph.core.ts +300 -300
  1742. package/server/services/workshop/ontology/subgraph.service.ts +113 -113
  1743. package/server/services/workshop/optimization/access.ts +24 -30
  1744. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.json +1 -0
  1745. package/server/services/workshop/optimization/python/.mimosa/hook-state/session_187ec97f45d4bd02369bbe94da527cf1.mvjqkcs6-68688-fb7131a89c.baseline/190a6772a4e43801737b4ba6072eb9d53d3099b5d8a9e6f57bc5e8592a26a6c4.source +274 -0
  1746. package/server/services/workshop/optimization/python/.mimosa/hook-status/session_187ec97f45d4bd02369bbe94da527cf1-01ed7f04fa.json +14 -0
  1747. package/server/services/workshop/optimization/python/__pycache__/problems.cpython-312.pyc +0 -0
  1748. package/server/services/workshop/plugins/host/api.mjs +90 -90
  1749. package/server/services/workshop/plugins/host/config.mjs +135 -135
  1750. package/server/services/workshop/plugins/host/index.mjs +23 -23
  1751. package/server/services/workshop/plugins/host/init.mjs +109 -109
  1752. package/server/services/workshop/plugins/host/load.mjs +14 -1
  1753. package/server/services/workshop/plugins/host/reload.mjs +6 -0
  1754. package/server/services/workshop/plugins/host/rollback.mjs +72 -72
  1755. package/server/services/workshop/plugins/host/state.mjs +54 -54
  1756. package/server/services/workshop/plugins/host/toggle.mjs +64 -64
  1757. package/server/services/workshop/plugins/host.mjs +9 -9
  1758. package/server/services/workshop/prompts/loader.ts +45 -8
  1759. package/server/services/workshop/runtime/agent-runtime/facade.ts +7 -7
  1760. package/server/services/workshop/runtime/agent-runtime/helpers.ts +18 -18
  1761. package/server/services/workshop/runtime/agent-runtime/index.ts +19 -19
  1762. package/server/services/workshop/runtime/agent-runtime/lifecycle.ts +137 -137
  1763. package/server/services/workshop/runtime/chat-mention.ts +164 -164
  1764. package/server/services/workshop/runtime/chat-projection.ts +246 -246
  1765. package/server/services/workshop/runtime/manager/admin-agents.ts +268 -268
  1766. package/server/services/workshop/runtime/manager/admin-channel.ts +5 -0
  1767. package/server/services/workshop/runtime/manager/bus.ts +182 -182
  1768. package/server/services/workshop/runtime/manager/channel-template-constants.ts +20 -20
  1769. package/server/services/workshop/runtime/manager/chat-reply.ts +181 -181
  1770. package/server/services/workshop/runtime/manager/chat.ts +384 -384
  1771. package/server/services/workshop/runtime/manager/facade.ts +24 -24
  1772. package/server/services/workshop/runtime/manager/helpers.ts +119 -119
  1773. package/server/services/workshop/runtime/manager/index.ts +42 -42
  1774. package/server/services/workshop/runtime/manager/internal.ts +73 -73
  1775. package/server/services/workshop/runtime/manager/notifications.ts +108 -108
  1776. package/server/services/workshop/runtime/manager/teams.ts +148 -148
  1777. package/server/services/workshop/runtime/memory/contracts.ts +18 -18
  1778. package/server/services/workshop/runtime/memory/facade.ts +10 -10
  1779. package/server/services/workshop/runtime/memory/helpers.ts +196 -196
  1780. package/server/services/workshop/runtime/memory/index.ts +27 -27
  1781. package/server/services/workshop/runtime/memory/score.ts +33 -33
  1782. package/server/services/workshop/runtime/memory/state.ts +40 -40
  1783. package/server/services/workshop/runtime/monitor.ts +3 -3
  1784. package/server/services/workshop/runtime/platform-notice.ts +113 -113
  1785. package/server/services/workshop/runtime/schedule-runtime.ts +347 -347
  1786. package/server/services/workshop/runtime/scheduler-loop/contracts.ts +29 -29
  1787. package/server/services/workshop/runtime/scheduler-loop/facade.ts +7 -7
  1788. package/server/services/workshop/runtime/scheduler-loop/helpers.ts +14 -14
  1789. package/server/services/workshop/runtime/scheduler-loop/index.ts +16 -16
  1790. package/server/services/workshop/runtime/task-engine/facade.ts +7 -7
  1791. package/server/services/workshop/runtime/task-engine/index.ts +15 -15
  1792. package/server/services/workshop/runtime/task-engine/types.ts +3 -3
  1793. package/server/services/workshop/runtime/user-notification-hub.ts +192 -192
  1794. package/server/services/workshop/tools/types.ts +1 -0
  1795. package/server/types/pg.d.ts +49 -49
  1796. package/server/utils/approval-gate.ts +67 -67
  1797. package/server/utils/mojibake-guard.ts +29 -29
  1798. package/server/utils/stability-severity.ts +77 -77
  1799. package/shared/config/groups.mjs +241 -241
  1800. package/shared/config/schema.json +2 -0
  1801. package/shared/daq-protocol.ts +30 -2
  1802. package/shared/dcw-protocol/catalog.ts +15 -3
  1803. package/shared/dcw-protocol/closed-loop.ts +2 -0
  1804. package/shared/lru.mjs +97 -97
  1805. package/tui/README.md +74 -74
  1806. package/tui/aw-tui.mjs +445 -445
  1807. package/tui/commands/index.mjs +287 -287
  1808. package/tui/components/chat-log.mjs +42 -42
  1809. package/tui/components/monitor-pane.mjs +39 -39
  1810. package/tui/components/root.mjs +53 -53
  1811. package/tui/components/status-bar.mjs +33 -33
  1812. package/tui/lib/api.mjs +82 -82
  1813. package/tui/lib/pickers.mjs +121 -121
  1814. package/tui/lib/reducers.mjs +218 -218
  1815. package/tui/lib/state.mjs +86 -86
  1816. package/tui/lib/virtual-terminal.mjs +48 -48
  1817. package/tui/lib/ws.mjs +125 -125
  1818. package/tui/theme.mjs +38 -38
  1819. package/.output/public/_nuxt/0qvcO_KM2.js +0 -1
  1820. package/.output/public/_nuxt/2Kwo_j9G2.js +0 -1
  1821. package/.output/public/_nuxt/39W1CH-l2.js +0 -1
  1822. package/.output/public/_nuxt/7xbYPfY6.js +0 -1
  1823. package/.output/public/_nuxt/8SZLbrI42.js +0 -1
  1824. package/.output/public/_nuxt/ATAvN55g.js +0 -1
  1825. package/.output/public/_nuxt/B3eCVqcT2.js +0 -1
  1826. package/.output/public/_nuxt/B4JlRHBB2.js +0 -1
  1827. package/.output/public/_nuxt/B9qIhT7k2.js +0 -1
  1828. package/.output/public/_nuxt/BE9oKpOt.js +0 -1
  1829. package/.output/public/_nuxt/BVGzwAxr2.js +0 -16
  1830. package/.output/public/_nuxt/BY3Lbz3h.js +0 -1
  1831. package/.output/public/_nuxt/BbACaREb.js +0 -1
  1832. package/.output/public/_nuxt/Bbk1XCCM.js +0 -14
  1833. package/.output/public/_nuxt/BcosvNXb2.js +0 -1
  1834. package/.output/public/_nuxt/BiZWwdcD2.js +0 -1
  1835. package/.output/public/_nuxt/Bq-tmkst.js +0 -1
  1836. package/.output/public/_nuxt/BxxpJxZf2.js +0 -1
  1837. package/.output/public/_nuxt/C1-SuwUN.js +0 -1
  1838. package/.output/public/_nuxt/C2Yp-B8m.js +0 -1
  1839. package/.output/public/_nuxt/C5OStZJ62.js +0 -1
  1840. package/.output/public/_nuxt/CDL30A2z2.js +0 -1
  1841. package/.output/public/_nuxt/CEvJu-xI.js +0 -1
  1842. package/.output/public/_nuxt/CMzExk8F.js +0 -1
  1843. package/.output/public/_nuxt/CT4bi_Y4.js +0 -1
  1844. package/.output/public/_nuxt/CZYNy60j2.js +0 -1
  1845. package/.output/public/_nuxt/CeCSjB9O2.js +0 -1
  1846. package/.output/public/_nuxt/CjF4QY9h.js +0 -1
  1847. package/.output/public/_nuxt/Cot5VNae.js +0 -1
  1848. package/.output/public/_nuxt/Crf8_Ad02.js +0 -1
  1849. package/.output/public/_nuxt/D1C6qtS12.js +0 -1
  1850. package/.output/public/_nuxt/D37gODe0.js +0 -1
  1851. package/.output/public/_nuxt/D6FhDrYe2.js +0 -1
  1852. package/.output/public/_nuxt/D8HQPtm62.js +0 -1
  1853. package/.output/public/_nuxt/D9O4L4jK.js +0 -1
  1854. package/.output/public/_nuxt/D9tNM-1a.js +0 -9
  1855. package/.output/public/_nuxt/DAug2CPf.js +0 -21
  1856. package/.output/public/_nuxt/DF9ETYJ32.js +0 -1
  1857. package/.output/public/_nuxt/DWe6BMlp2.js +0 -1
  1858. package/.output/public/_nuxt/DbhTN7-T.js +0 -47
  1859. package/.output/public/_nuxt/DdyE0ylS.js +0 -1
  1860. package/.output/public/_nuxt/DgGzwjAr2.js +0 -2
  1861. package/.output/public/_nuxt/DhjgWrB62.js +0 -1
  1862. package/.output/public/_nuxt/DiWcX4gj.js +0 -1
  1863. package/.output/public/_nuxt/DkRozlDP2.js +0 -1
  1864. package/.output/public/_nuxt/DlS-SkQ42.js +0 -1
  1865. package/.output/public/_nuxt/DmHp9yQ3.js +0 -1
  1866. package/.output/public/_nuxt/DoChWkff.js +0 -1
  1867. package/.output/public/_nuxt/DqxBCeDe.js +0 -1
  1868. package/.output/public/_nuxt/DrlnrdvY2.js +0 -36
  1869. package/.output/public/_nuxt/DxH5focQ2.js +0 -1
  1870. package/.output/public/_nuxt/Dyr3LPGL.js +0 -1
  1871. package/.output/public/_nuxt/FsRVXpyF2.js +0 -1
  1872. package/.output/public/_nuxt/Iub61dX9.js +0 -1
  1873. package/.output/public/_nuxt/MC_i34H42.js +0 -1
  1874. package/.output/public/_nuxt/OmpTerminalPanel.DMWgGwDs.css +0 -1
  1875. package/.output/public/_nuxt/PluginSlot.BqBzLD4T.css +0 -1
  1876. package/.output/public/_nuxt/Q-JpBT03.js +0 -1
  1877. package/.output/public/_nuxt/TownView.Cn8SPG7S.css +0 -1
  1878. package/.output/public/_nuxt/TugRY_4O.js +0 -1
  1879. package/.output/public/_nuxt/WybiLTow2.js +0 -8
  1880. package/.output/public/_nuxt/YNhAoK-R2.js +0 -1
  1881. package/.output/public/_nuxt/Zn0BZpf0.js +0 -3
  1882. package/.output/public/_nuxt/_id_.Be5JaH-P.css +0 -1
  1883. package/.output/public/_nuxt/_wsId_.p_vAYtTp.css +0 -1
  1884. package/.output/public/_nuxt/agents.CRomddYR.css +0 -1
  1885. package/.output/public/_nuxt/aml.DgOMpDpv.css +0 -1
  1886. package/.output/public/_nuxt/b7UcqLKi.js +0 -1
  1887. package/.output/public/_nuxt/board.Bo35UR0e.css +0 -1
  1888. package/.output/public/_nuxt/builds/meta/fd0033e4-1eaa-42f8-9a04-3132717a703b.json +0 -1
  1889. package/.output/public/_nuxt/default.CpAx70gC.css +0 -1
  1890. package/.output/public/_nuxt/entry.C7koBPom.css +0 -1
  1891. package/.output/public/_nuxt/geMze5qw.js +0 -1
  1892. package/.output/public/_nuxt/hCN555XP2.js +0 -1
  1893. package/.output/public/_nuxt/hlfahYxK.js +0 -1
  1894. package/.output/public/_nuxt/logs.DcSvz6vi.css +0 -1
  1895. package/.output/public/_nuxt/monitor.OoNTwfMJ.css +0 -1
  1896. package/.output/public/_nuxt/ontology.JqJ6PjV1.css +0 -1
  1897. package/.output/public/_nuxt/operations.C48ggFa5.css +0 -1
  1898. package/.output/public/_nuxt/pages.Dpa28tJW.css +0 -1
  1899. package/.output/public/_nuxt/permissions.CrV-4t-6.css +0 -1
  1900. package/.output/public/_nuxt/rcdmiszh2.js +0 -1
  1901. package/.output/public/_nuxt/schedules.DYWOjGHm.css +0 -1
  1902. package/.output/public/_nuxt/studio.CjmUr8P7.css +0 -1
  1903. package/.output/public/_nuxt/teams.DEJoJ4QV.css +0 -1
  1904. package/.output/public/_nuxt/toG_qAMH.js +0 -1
  1905. package/.output/public/_nuxt/tokens.DKZWCP5v.css +0 -1
  1906. package/.output/public/_nuxt/tools.DP-nsTli.css +0 -1
  1907. package/.output/public/_nuxt/uomnHjhM.js +0 -1
  1908. package/.output/public/_nuxt/v77qozuJ2.js +0 -1
  1909. package/.output/public/_nuxt/v7cV7hJa.js +0 -1
  1910. package/.output/public/_nuxt/wK6Pp4Zc2.js +0 -2
  1911. package/.output/public/_nuxt/we7-sMSo2.js +0 -1
  1912. package/.output/public/_nuxt/workshop.PT1xhP8C.css +0 -1
  1913. package/.output/public/_nuxt/wxISMS1i.js +0 -1
  1914. package/.output/public/_nuxt/zy7efYKR.js +0 -1
  1915. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs +0 -704
  1916. package/.output/server/chunks/build/AuthGate-G74Wr5IV.mjs.map +0 -1
  1917. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs +0 -77
  1918. package/.output/server/chunks/build/FormItemContext-DmuQqaeJ.mjs.map +0 -1
  1919. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs +0 -889
  1920. package/.output/server/chunks/build/OmpTerminalPanel-5cB-78zp.mjs.map +0 -1
  1921. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs +0 -131
  1922. package/.output/server/chunks/build/PluginSlot-CZlGlRoR.mjs.map +0 -1
  1923. package/.output/server/chunks/build/TownView-CUbzOT_M.mjs +0 -5960
  1924. package/.output/server/chunks/build/TownView-CUbzOT_M.mjs.map +0 -1
  1925. package/.output/server/chunks/build/_id_-BHWZiRQZ.mjs +0 -373
  1926. package/.output/server/chunks/build/_id_-BHWZiRQZ.mjs.map +0 -1
  1927. package/.output/server/chunks/build/_id_-JaGx0yBE.mjs +0 -1922
  1928. package/.output/server/chunks/build/_id_-JaGx0yBE.mjs.map +0 -1
  1929. package/.output/server/chunks/build/_wsId_-C4DKkEqv.mjs +0 -13707
  1930. package/.output/server/chunks/build/_wsId_-C4DKkEqv.mjs.map +0 -1
  1931. package/.output/server/chunks/build/agents-DRod4lTC.mjs +0 -1047
  1932. package/.output/server/chunks/build/agents-DRod4lTC.mjs.map +0 -1
  1933. package/.output/server/chunks/build/alert-CNGhs--Y.mjs +0 -260
  1934. package/.output/server/chunks/build/alert-CNGhs--Y.mjs.map +0 -1
  1935. package/.output/server/chunks/build/aml-B3Umz4DR.mjs +0 -729
  1936. package/.output/server/chunks/build/aml-B3Umz4DR.mjs.map +0 -1
  1937. package/.output/server/chunks/build/analysis-tNpFLtMt.mjs +0 -502
  1938. package/.output/server/chunks/build/analysis-tNpFLtMt.mjs.map +0 -1
  1939. package/.output/server/chunks/build/api-D-zkgkj-.mjs +0 -51
  1940. package/.output/server/chunks/build/api-D-zkgkj-.mjs.map +0 -1
  1941. package/.output/server/chunks/build/api-D3gy2e2q.mjs +0 -70
  1942. package/.output/server/chunks/build/api-D3gy2e2q.mjs.map +0 -1
  1943. package/.output/server/chunks/build/api-bn4OKkl_.mjs +0 -62
  1944. package/.output/server/chunks/build/api-bn4OKkl_.mjs.map +0 -1
  1945. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs +0 -46
  1946. package/.output/server/chunks/build/api-error-CnW_xiNI.mjs.map +0 -1
  1947. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs +0 -70
  1948. package/.output/server/chunks/build/apiClient-DIXx9sfD.mjs.map +0 -1
  1949. package/.output/server/chunks/build/board-B2oYXGBy.mjs +0 -172
  1950. package/.output/server/chunks/build/board-B2oYXGBy.mjs.map +0 -1
  1951. package/.output/server/chunks/build/card-BECE6y_G.mjs +0 -922
  1952. package/.output/server/chunks/build/card-BECE6y_G.mjs.map +0 -1
  1953. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs +0 -950
  1954. package/.output/server/chunks/build/channel-templates-R2TInv8B.mjs.map +0 -1
  1955. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs +0 -429
  1956. package/.output/server/chunks/build/checkbox-C6xY5uc6.mjs.map +0 -1
  1957. package/.output/server/chunks/build/client-only-S7k53PIm.mjs +0 -42
  1958. package/.output/server/chunks/build/client-only-S7k53PIm.mjs.map +0 -1
  1959. package/.output/server/chunks/build/core-CRlsQhzd.mjs +0 -292
  1960. package/.output/server/chunks/build/core-CRlsQhzd.mjs.map +0 -1
  1961. package/.output/server/chunks/build/daq-DHsYtWC-.mjs +0 -1210
  1962. package/.output/server/chunks/build/daq-DHsYtWC-.mjs.map +0 -1
  1963. package/.output/server/chunks/build/data-Cl4wRZO6.mjs +0 -459
  1964. package/.output/server/chunks/build/data-Cl4wRZO6.mjs.map +0 -1
  1965. package/.output/server/chunks/build/dcw-DnjOM6p1.mjs +0 -467
  1966. package/.output/server/chunks/build/dcw-DnjOM6p1.mjs.map +0 -1
  1967. package/.output/server/chunks/build/default-DDRKP2Mb.mjs +0 -2246
  1968. package/.output/server/chunks/build/default-DDRKP2Mb.mjs.map +0 -1
  1969. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs +0 -401
  1970. package/.output/server/chunks/build/descriptions-B3uhDesi.mjs.map +0 -1
  1971. package/.output/server/chunks/build/drawer-DwXxapMg.mjs +0 -822
  1972. package/.output/server/chunks/build/drawer-DwXxapMg.mjs.map +0 -1
  1973. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs +0 -12
  1974. package/.output/server/chunks/build/dropdown-DLrGy-Fs.mjs.map +0 -1
  1975. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs +0 -530
  1976. package/.output/server/chunks/build/dropdown-nsGv8Gqx.mjs.map +0 -1
  1977. package/.output/server/chunks/build/es-DXSEkmAm.mjs +0 -42
  1978. package/.output/server/chunks/build/es-DXSEkmAm.mjs.map +0 -1
  1979. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs +0 -2082
  1980. package/.output/server/chunks/build/firstNotUndefined-laiThpLD.mjs.map +0 -1
  1981. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs +0 -3543
  1982. package/.output/server/chunks/build/form-Cw2Ex9w5.mjs.map +0 -1
  1983. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs +0 -192
  1984. package/.output/server/chunks/build/hasIn-RYRGomyg.mjs.map +0 -1
  1985. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs +0 -120
  1986. package/.output/server/chunks/build/hitl-B4cHRlkC.mjs.map +0 -1
  1987. package/.output/server/chunks/build/input-CJgB-RL6.mjs +0 -1705
  1988. package/.output/server/chunks/build/input-CJgB-RL6.mjs.map +0 -1
  1989. package/.output/server/chunks/build/input-number-CQKL42p_.mjs +0 -1027
  1990. package/.output/server/chunks/build/input-number-CQKL42p_.mjs.map +0 -1
  1991. package/.output/server/chunks/build/interval-DiAUqODq.mjs +0 -8
  1992. package/.output/server/chunks/build/interval-DiAUqODq.mjs.map +0 -1
  1993. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs +0 -6
  1994. package/.output/server/chunks/build/isNumeric-DQiJ-b15.mjs.map +0 -1
  1995. package/.output/server/chunks/build/logs-C4vKFkHQ.mjs +0 -381
  1996. package/.output/server/chunks/build/logs-C4vKFkHQ.mjs.map +0 -1
  1997. package/.output/server/chunks/build/menu-xO8ocVtL.mjs +0 -1833
  1998. package/.output/server/chunks/build/menu-xO8ocVtL.mjs.map +0 -1
  1999. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs +0 -2216
  2000. package/.output/server/chunks/build/monitor-BNrG6v3b.mjs.map +0 -1
  2001. package/.output/server/chunks/build/ontology-B_0Vm6j-.mjs +0 -1416
  2002. package/.output/server/chunks/build/ontology-B_0Vm6j-.mjs.map +0 -1
  2003. package/.output/server/chunks/build/operations-D8D6-Jm-.mjs +0 -278
  2004. package/.output/server/chunks/build/operations-D8D6-Jm-.mjs.map +0 -1
  2005. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs +0 -202
  2006. package/.output/server/chunks/build/optimizer-DaTyaY3c.mjs.map +0 -1
  2007. package/.output/server/chunks/build/pages-Dac4icQC.mjs +0 -439
  2008. package/.output/server/chunks/build/pages-Dac4icQC.mjs.map +0 -1
  2009. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs +0 -1330
  2010. package/.output/server/chunks/build/pagination-BTzq7dD5.mjs.map +0 -1
  2011. package/.output/server/chunks/build/permissions-qmimwB0M.mjs +0 -649
  2012. package/.output/server/chunks/build/permissions-qmimwB0M.mjs.map +0 -1
  2013. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs +0 -269
  2014. package/.output/server/chunks/build/plugins-Dh_goy-k.mjs.map +0 -1
  2015. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs +0 -333
  2016. package/.output/server/chunks/build/popconfirm-DuGF7ty-.mjs.map +0 -1
  2017. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs +0 -77
  2018. package/.output/server/chunks/build/responsiveObserve-CzRpNXkr.mjs.map +0 -1
  2019. package/.output/server/chunks/build/schedules-C2_x38gj.mjs +0 -7039
  2020. package/.output/server/chunks/build/schedules-C2_x38gj.mjs.map +0 -1
  2021. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs +0 -332
  2022. package/.output/server/chunks/build/segmented-29uEKZ3D.mjs.map +0 -1
  2023. package/.output/server/chunks/build/select-CJb2XrQf.mjs +0 -3734
  2024. package/.output/server/chunks/build/select-CJb2XrQf.mjs.map +0 -1
  2025. package/.output/server/chunks/build/settings-Cz2Plds0.mjs +0 -944
  2026. package/.output/server/chunks/build/settings-Cz2Plds0.mjs.map +0 -1
  2027. package/.output/server/chunks/build/space-BByD-mFE.mjs +0 -107
  2028. package/.output/server/chunks/build/space-BByD-mFE.mjs.map +0 -1
  2029. package/.output/server/chunks/build/spin-XhbgGeLP.mjs +0 -313
  2030. package/.output/server/chunks/build/spin-XhbgGeLP.mjs.map +0 -1
  2031. package/.output/server/chunks/build/studio-CwYXl00G.mjs +0 -329
  2032. package/.output/server/chunks/build/studio-CwYXl00G.mjs.map +0 -1
  2033. package/.output/server/chunks/build/switch-DWcwVFxW.mjs +0 -374
  2034. package/.output/server/chunks/build/switch-DWcwVFxW.mjs.map +0 -1
  2035. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs +0 -7249
  2036. package/.output/server/chunks/build/table-Zhuo7Fq-.mjs.map +0 -1
  2037. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs +0 -1838
  2038. package/.output/server/chunks/build/tabs-BCwBXjNt.mjs.map +0 -1
  2039. package/.output/server/chunks/build/tag-CRW-anwy.mjs +0 -1010
  2040. package/.output/server/chunks/build/tag-CRW-anwy.mjs.map +0 -1
  2041. package/.output/server/chunks/build/teams-CwhFdcYn.mjs +0 -1160
  2042. package/.output/server/chunks/build/teams-CwhFdcYn.mjs.map +0 -1
  2043. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs +0 -992
  2044. package/.output/server/chunks/build/tokens-C5ODO1HA.mjs.map +0 -1
  2045. package/.output/server/chunks/build/tools-C0YKragH.mjs +0 -487
  2046. package/.output/server/chunks/build/tools-C0YKragH.mjs.map +0 -1
  2047. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs +0 -888
  2048. package/.output/server/chunks/build/tooltip-GlMrUZzx.mjs.map +0 -1
  2049. package/.output/server/chunks/build/town-LkDwWnKA.mjs +0 -117
  2050. package/.output/server/chunks/build/town-LkDwWnKA.mjs.map +0 -1
  2051. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs +0 -120
  2052. package/.output/server/chunks/build/useAgentHarnessOptions-CYKuLtZ2.mjs.map +0 -1
  2053. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs +0 -71
  2054. package/.output/server/chunks/build/useAgentTemplateActions-Da_V1LSD.mjs.map +0 -1
  2055. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs +0 -112
  2056. package/.output/server/chunks/build/useAgentTemplateForm-BWvax5_E.mjs.map +0 -1
  2057. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs +0 -140
  2058. package/.output/server/chunks/build/useAgentTemplatesCatalog-BnYjZy59.mjs.map +0 -1
  2059. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs +0 -88
  2060. package/.output/server/chunks/build/useAmlDatasets-nGi10DAl.mjs.map +0 -1
  2061. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs +0 -79
  2062. package/.output/server/chunks/build/useAmlEntities-CTgNAgcZ.mjs.map +0 -1
  2063. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs +0 -188
  2064. package/.output/server/chunks/build/useAmlEnv-Da2TVfyK.mjs.map +0 -1
  2065. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs +0 -86
  2066. package/.output/server/chunks/build/useAmlExperiments-U9AQ52RI.mjs.map +0 -1
  2067. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs +0 -251
  2068. package/.output/server/chunks/build/useAmlJobs-BM1mu5iH.mjs.map +0 -1
  2069. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs +0 -90
  2070. package/.output/server/chunks/build/useAmlModels-C1DwIOMi.mjs.map +0 -1
  2071. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs +0 -80
  2072. package/.output/server/chunks/build/useAmlNotes-CNm47QdS.mjs.map +0 -1
  2073. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs +0 -126
  2074. package/.output/server/chunks/build/useAmlPredict-m8I1AdRn.mjs.map +0 -1
  2075. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs +0 -120
  2076. package/.output/server/chunks/build/useAnalysisFeed-CpbOaiBD.mjs.map +0 -1
  2077. package/.output/server/chunks/build/useDaqAddNode-CRorxgOY.mjs +0 -141
  2078. package/.output/server/chunks/build/useDaqAddNode-CRorxgOY.mjs.map +0 -1
  2079. package/.output/server/chunks/build/useDaqDetailBinding-Ck-YUW9J.mjs +0 -72
  2080. package/.output/server/chunks/build/useDaqDetailBinding-Ck-YUW9J.mjs.map +0 -1
  2081. package/.output/server/chunks/build/useDaqDetailFrames-CLMoreaz.mjs +0 -78
  2082. package/.output/server/chunks/build/useDaqDetailFrames-CLMoreaz.mjs.map +0 -1
  2083. package/.output/server/chunks/build/useDaqDetailHistory-BVNQXwC_.mjs +0 -166
  2084. package/.output/server/chunks/build/useDaqDetailHistory-BVNQXwC_.mjs.map +0 -1
  2085. package/.output/server/chunks/build/useDaqDetailNode-BC0e9OfX.mjs +0 -103
  2086. package/.output/server/chunks/build/useDaqDetailNode-BC0e9OfX.mjs.map +0 -1
  2087. package/.output/server/chunks/build/useDaqDetailParams-D173iwFg.mjs +0 -157
  2088. package/.output/server/chunks/build/useDaqDetailParams-D173iwFg.mjs.map +0 -1
  2089. package/.output/server/chunks/build/useDaqFilters-CC-o_21d.mjs +0 -224
  2090. package/.output/server/chunks/build/useDaqFilters-CC-o_21d.mjs.map +0 -1
  2091. package/.output/server/chunks/build/useDaqOptimizations-4vK2w1yn.mjs +0 -132
  2092. package/.output/server/chunks/build/useDaqOptimizations-4vK2w1yn.mjs.map +0 -1
  2093. package/.output/server/chunks/build/useDaqStream-BHKpSJFd.mjs +0 -385
  2094. package/.output/server/chunks/build/useDaqStream-BHKpSJFd.mjs.map +0 -1
  2095. package/.output/server/chunks/build/useDaqTemplates-CsXSc7yI.mjs +0 -181
  2096. package/.output/server/chunks/build/useDaqTemplates-CsXSc7yI.mjs.map +0 -1
  2097. package/.output/server/chunks/build/useDashboardData-DuKjuJTz.mjs +0 -139
  2098. package/.output/server/chunks/build/useDashboardData-DuKjuJTz.mjs.map +0 -1
  2099. package/.output/server/chunks/build/useDcwAddNode-C5DcxsHF.mjs +0 -217
  2100. package/.output/server/chunks/build/useDcwAddNode-C5DcxsHF.mjs.map +0 -1
  2101. package/.output/server/chunks/build/useDcwCards-0bAVo6uB.mjs +0 -64
  2102. package/.output/server/chunks/build/useDcwCards-0bAVo6uB.mjs.map +0 -1
  2103. package/.output/server/chunks/build/useDcwDetailScope-BNFOlt2v.mjs +0 -184
  2104. package/.output/server/chunks/build/useDcwDetailScope-BNFOlt2v.mjs.map +0 -1
  2105. package/.output/server/chunks/build/useDcwDetailTemplates-DSH-o0tE.mjs +0 -143
  2106. package/.output/server/chunks/build/useDcwDetailTemplates-DSH-o0tE.mjs.map +0 -1
  2107. package/.output/server/chunks/build/useDcwFilter-W61BFUcT.mjs +0 -65
  2108. package/.output/server/chunks/build/useDcwFilter-W61BFUcT.mjs.map +0 -1
  2109. package/.output/server/chunks/build/useDcwLedger-DsColLdc.mjs +0 -73
  2110. package/.output/server/chunks/build/useDcwLedger-DsColLdc.mjs.map +0 -1
  2111. package/.output/server/chunks/build/useDcwLineMutations-Cx4Ir7g3.mjs +0 -133
  2112. package/.output/server/chunks/build/useDcwLineMutations-Cx4Ir7g3.mjs.map +0 -1
  2113. package/.output/server/chunks/build/useDcwLineRun-DQ0vB08z.mjs +0 -100
  2114. package/.output/server/chunks/build/useDcwLineRun-DQ0vB08z.mjs.map +0 -1
  2115. package/.output/server/chunks/build/useDcwParamApprovals-CYspRuDk.mjs +0 -119
  2116. package/.output/server/chunks/build/useDcwParamApprovals-CYspRuDk.mjs.map +0 -1
  2117. package/.output/server/chunks/build/useDcwProducts-CTbm_5S_.mjs +0 -88
  2118. package/.output/server/chunks/build/useDcwProducts-CTbm_5S_.mjs.map +0 -1
  2119. package/.output/server/chunks/build/useDcwQuery-E0yjZs7G.mjs +0 -93
  2120. package/.output/server/chunks/build/useDcwQuery-E0yjZs7G.mjs.map +0 -1
  2121. package/.output/server/chunks/build/useDcwQuickActions-BvT5VFOY.mjs +0 -84
  2122. package/.output/server/chunks/build/useDcwQuickActions-BvT5VFOY.mjs.map +0 -1
  2123. package/.output/server/chunks/build/useDcwRecipes-zngShyk0.mjs +0 -263
  2124. package/.output/server/chunks/build/useDcwRecipes-zngShyk0.mjs.map +0 -1
  2125. package/.output/server/chunks/build/useDcwStream-82IdjJKk.mjs +0 -455
  2126. package/.output/server/chunks/build/useDcwStream-82IdjJKk.mjs.map +0 -1
  2127. package/.output/server/chunks/build/useDcwTemplates-CpHrcnvJ.mjs +0 -87
  2128. package/.output/server/chunks/build/useDcwTemplates-CpHrcnvJ.mjs.map +0 -1
  2129. package/.output/server/chunks/build/useDcwWrites-BlOhljp9.mjs +0 -136
  2130. package/.output/server/chunks/build/useDcwWrites-BlOhljp9.mjs.map +0 -1
  2131. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs +0 -118
  2132. package/.output/server/chunks/build/useDeviceTwins-DL-VLFeX.mjs.map +0 -1
  2133. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs +0 -104
  2134. package/.output/server/chunks/build/useExpConfirmations-DgwqTb9O.mjs.map +0 -1
  2135. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs +0 -52
  2136. package/.output/server/chunks/build/useLocalTime-C__kwn8h.mjs.map +0 -1
  2137. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs +0 -80
  2138. package/.output/server/chunks/build/useLogsManual-BcfanT0s.mjs.map +0 -1
  2139. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs +0 -136
  2140. package/.output/server/chunks/build/useLogsQuery-BGlKVKpV.mjs.map +0 -1
  2141. package/.output/server/chunks/build/useLogsScope-BRyy550Y.mjs +0 -75
  2142. package/.output/server/chunks/build/useLogsScope-BRyy550Y.mjs.map +0 -1
  2143. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs +0 -128
  2144. package/.output/server/chunks/build/useMonitorData-BUey2Xly.mjs.map +0 -1
  2145. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs +0 -77
  2146. package/.output/server/chunks/build/useMonitorFormat-rhs7FlNo.mjs.map +0 -1
  2147. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs +0 -182
  2148. package/.output/server/chunks/build/useOperationsFeed-DWfCjP4l.mjs.map +0 -1
  2149. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs +0 -139
  2150. package/.output/server/chunks/build/useOpsLog--yf8erUi.mjs.map +0 -1
  2151. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs +0 -146
  2152. package/.output/server/chunks/build/useRecipeDispatchApprovals-CKF2sB9P.mjs.map +0 -1
  2153. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs +0 -71
  2154. package/.output/server/chunks/build/useTeamActions-C08sAVqY.mjs.map +0 -1
  2155. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs +0 -78
  2156. package/.output/server/chunks/build/useTeamAddMemberDialog-fzTmflr8.mjs.map +0 -1
  2157. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs +0 -91
  2158. package/.output/server/chunks/build/useTeamCreateDialog-De63ep-X.mjs.map +0 -1
  2159. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs +0 -76
  2160. package/.output/server/chunks/build/useTeamDeployDialog-CpAtG5Jy.mjs.map +0 -1
  2161. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs +0 -99
  2162. package/.output/server/chunks/build/useTeamPluginDialog-C1OOe1sL.mjs.map +0 -1
  2163. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs +0 -124
  2164. package/.output/server/chunks/build/useTeamsCatalog-DA41SMDu.mjs.map +0 -1
  2165. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs +0 -106
  2166. package/.output/server/chunks/build/useTokenCreate-XHTQExra.mjs.map +0 -1
  2167. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs +0 -81
  2168. package/.output/server/chunks/build/useTokenRename-Cf1B0cRy.mjs.map +0 -1
  2169. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs +0 -108
  2170. package/.output/server/chunks/build/useTokenReveal-C8n1Vt9t.mjs.map +0 -1
  2171. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs +0 -86
  2172. package/.output/server/chunks/build/useTokensList-MMIq24E-.mjs.map +0 -1
  2173. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs +0 -131
  2174. package/.output/server/chunks/build/useWorkbenchAuth-Dyc_czui.mjs.map +0 -1
  2175. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs +0 -128
  2176. package/.output/server/chunks/build/useWorkbenchWorkspaces-DT33HbBD.mjs.map +0 -1
  2177. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs +0 -118
  2178. package/.output/server/chunks/build/useWorkshopApi-BkEgGBIM.mjs.map +0 -1
  2179. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs +0 -1577
  2180. package/.output/server/chunks/build/useWorkshopWs-BWrVj4jL.mjs.map +0 -1
  2181. package/.output/server/chunks/build/useWorkspaceAuth-TahC9EC7.mjs +0 -48
  2182. package/.output/server/chunks/build/useWorkspaceAuth-TahC9EC7.mjs.map +0 -1
  2183. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs +0 -94
  2184. package/.output/server/chunks/build/useWorkspaceChannels-BVAHmhN3.mjs.map +0 -1
  2185. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs +0 -150
  2186. package/.output/server/chunks/build/useWorkspaceShell-rQHWNNWJ.mjs.map +0 -1
  2187. package/.output/server/chunks/build/users-pVCK50z-.mjs +0 -566
  2188. package/.output/server/chunks/build/users-pVCK50z-.mjs.map +0 -1
  2189. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs +0 -499
  2190. package/.output/server/chunks/build/workshop-DAgsBgG4.mjs.map +0 -1
  2191. package/scripts/_aw-packaged-start.cjs +0 -22
  2192. package/scripts/_i18n-en-cjk-scan.mjs +0 -28
  2193. package/scripts/_i18n-en-verify.mjs +0 -107
  2194. package/scripts/_i18n-extra-checks.mjs +0 -53
  2195. package/scripts/_i18n-scan-hardcoded.mjs +0 -180
  2196. package/scripts/_lib-dcw-line.mjs +0 -24
  2197. package/scripts/_lib-plc-sim-child.mjs +0 -28
  2198. package/scripts/_lint-reflow.mjs +0 -105
  2199. package/scripts/_loop-biax-campaign.mjs +0 -130
  2200. package/scripts/_probe-daq-omp-task.mjs +0 -100
  2201. package/scripts/_probe-daq-scope-default.mjs +0 -123
  2202. package/scripts/_probe-lease.cjs +0 -13
  2203. package/scripts/_probe-model-channel-link.cjs +0 -25
  2204. package/scripts/_probe-recipe-switch.mjs +0 -92
  2205. package/scripts/_probe-task-queue.cjs +0 -9
  2206. package/scripts/build-anime-models.mjs +0 -339
  2207. package/scripts/demo-group-chat-omp-cases.ts +0 -210
  2208. package/scripts/demo-group-chat-omp.ts +0 -184
  2209. package/scripts/demo-group-chat-order.ts +0 -197
  2210. package/scripts/e2e-channel-isolation.ts +0 -329
  2211. package/scripts/e2e-lead-team-mgmt.ts +0 -217
  2212. package/scripts/proof-omp-real.ts +0 -189
  2213. package/scripts/smoke-optimization-verify.ts +0 -72
  2214. package/scripts/test-a2a-types.ts +0 -296
  2215. package/scripts/test-agent-multi-channel.ts +0 -160
  2216. package/scripts/test-agentteam-task-chat-flow.ts +0 -420
  2217. package/scripts/test-channel-routing.ts +0 -301
  2218. package/scripts/test-cli-exit.mjs +0 -343
  2219. package/scripts/test-event-persistence.mjs +0 -177
  2220. package/scripts/test-group-chat-hardening.ts +0 -265
  2221. package/scripts/test-group-chat-unit/section-a-migration.ts +0 -75
  2222. package/scripts/test-group-chat-unit/section-b-permission-matrix.ts +0 -88
  2223. package/scripts/test-group-chat-unit/section-c-member-lifecycle.ts +0 -64
  2224. package/scripts/test-group-chat-unit/section-d-mention-resolution.ts +0 -36
  2225. package/scripts/test-group-chat-unit/section-e-chat-facts.ts +0 -97
  2226. package/scripts/test-group-chat-unit/section-f-user-notifications.ts +0 -52
  2227. package/scripts/test-group-chat-unit/section-g-member-projection.ts +0 -44
  2228. package/scripts/test-group-chat-unit/section-h-outbox-consistency.ts +0 -30
  2229. package/scripts/test-group-chat-unit/section-i-read-idempotency.ts +0 -24
  2230. package/scripts/test-group-chat-unit/section-j-permission-scope.ts +0 -150
  2231. package/scripts/test-hitl-legacy-channel-auth.ts +0 -143
  2232. package/scripts/test-lane-history-live.mjs +0 -126
  2233. package/scripts/test-mcp-tools.ts +0 -285
  2234. package/scripts/test-memory-dynamic.ts +0 -101
  2235. package/scripts/test-memory-month-query.mjs +0 -70
  2236. package/scripts/test-memory.ts +0 -431
  2237. package/scripts/test-route-reason.mjs +0 -118
  2238. package/scripts/test-scheduler-loop/scenarios-modes.ts +0 -95
  2239. package/scripts/test-scheduler-loop/scenarios-runtime.ts +0 -58
  2240. package/scripts/test-scheduler-loop/scenarios-supervise.ts +0 -183
  2241. package/scripts/test-scheduler-loop/scenarios-triage.ts +0 -102
  2242. package/scripts/ui/admin-shots.mjs +0 -46
  2243. package/scripts/ui/bump-microfont.mjs +0 -39
  2244. package/scripts/ui/linkcheck2.mjs +0 -37
  2245. package/scripts/ui/live-render-check.mjs +0 -72
  2246. package/scripts/ui/perf-audit.mjs +0 -132
  2247. package/scripts/ui/sim-ui-shot.mjs +0 -16
  2248. package/scripts/ui/smoke-refactor.mjs +0 -258
  2249. /package/.output/public/_nuxt/{9j2J4k4w2.js → 9j2J4k4w.js} +0 -0
  2250. /package/.output/public/_nuxt/{dVw8IHY6.js → dVw8IHY62.js} +0 -0
  2251. /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.