agentworkshop 0.7.34 → 0.7.38

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 (985) hide show
  1. package/.output/.AgentWorkShop/aml-python/aml_eval.py +171 -0
  2. package/.output/.AgentWorkShop/aml-python/amlkit.py +120 -0
  3. package/.output/.AgentWorkShop/aml-python/requirements.txt +7 -0
  4. package/.output/.AgentWorkShop/aml-python/train-example.py +92 -0
  5. package/.output/.AgentWorkShop/schema.json +2 -1
  6. package/.output/nitro.json +1 -1
  7. package/.output/public/_nuxt/{DLljr7g0.js → 45zuyAso.js} +1 -1
  8. package/.output/public/_nuxt/4sIEbgcl.js +42 -0
  9. package/.output/public/_nuxt/8NMOXZOV.js +1 -0
  10. package/.output/public/_nuxt/BCGafdXT.js +2 -0
  11. package/.output/public/_nuxt/BDNMzG2s2.js +1 -0
  12. package/.output/public/_nuxt/{C-mDhyEd.js → BDmh31hl.js} +1 -1
  13. package/.output/public/_nuxt/BFkgkW8u.js +4 -0
  14. package/.output/public/_nuxt/BG8sCcwx.js +14 -0
  15. package/.output/public/_nuxt/{D8CqF0yy.js → BHA40aHa.js} +1 -1
  16. package/.output/public/_nuxt/BJHKLJJU.js +1 -0
  17. package/.output/public/_nuxt/{DoTdlVVe2.js → BN6iuJEg2.js} +1 -1
  18. package/.output/public/_nuxt/BNT8gYU92.js +4 -0
  19. package/.output/public/_nuxt/BU83-NnX.js +106 -0
  20. package/.output/public/_nuxt/BYhEUx8t.js +17 -0
  21. package/.output/public/_nuxt/BzHEilTt.js +1 -0
  22. package/.output/public/_nuxt/{Ct-WOVr4.js → C3J6FYKa.js} +1 -1
  23. package/.output/public/_nuxt/C3gwHTz0.js +1 -0
  24. package/.output/public/_nuxt/C4DWUZ6d2.js +1 -0
  25. package/.output/public/_nuxt/C5gUkRwn.js +1 -0
  26. package/.output/public/_nuxt/CClOy-Hz2.js +1 -0
  27. package/.output/public/_nuxt/{CUXCQXjG.js → CM12FuB42.js} +1 -1
  28. package/.output/public/_nuxt/{BSCpFtzG.js → CSkxz2NX.js} +1 -1
  29. package/.output/public/_nuxt/CWoJjWmZ.js +1 -0
  30. package/.output/public/_nuxt/CY9LbPCI.js +1 -0
  31. package/.output/public/_nuxt/CYWVXZTS.js +7 -0
  32. package/.output/public/_nuxt/CZiw7sEV.js +1 -0
  33. package/.output/public/_nuxt/C_OLzD09.js +1 -0
  34. package/.output/public/_nuxt/C__m4EhR.js +1 -0
  35. package/.output/public/_nuxt/Cbq-mryP.js +1 -0
  36. package/.output/public/_nuxt/{C4OAdbVK2.js → Cc_9VzD42.js} +1 -1
  37. package/.output/public/_nuxt/{BASN8nZ0.js → CdPzkOMV.js} +1 -1
  38. package/.output/public/_nuxt/Cec0Ua3F.js +1 -0
  39. package/.output/public/_nuxt/{DYKVPzN-.js → CoNpEq5X.js} +1 -1
  40. package/.output/public/_nuxt/CojCTLKD.js +1 -0
  41. package/.output/public/_nuxt/{B7wL3pDk.js → Crod5z2f.js} +1 -1
  42. package/.output/public/_nuxt/CzlMDL5H.js +13 -0
  43. package/.output/public/_nuxt/{G0qIw7Gq2.js → D0ZBQrN_2.js} +1 -1
  44. package/.output/public/_nuxt/{Lp7Ll94I.js → D1YDxZpZ.js} +1 -1
  45. package/.output/public/_nuxt/{Bc0AmjfT.js → D20Yamr4.js} +1 -1
  46. package/.output/public/_nuxt/D6uzXueg.js +2 -0
  47. package/.output/public/_nuxt/D9Oidm5I.js +1 -0
  48. package/.output/public/_nuxt/DAe0h2MB.js +1 -0
  49. package/.output/public/_nuxt/DBHNsT1Y.js +23 -0
  50. package/.output/public/_nuxt/DDShH71m.js +1 -0
  51. package/.output/public/_nuxt/DDgJcSET.js +19 -0
  52. package/.output/public/_nuxt/DHFrCUxA2.js +13 -0
  53. package/.output/public/_nuxt/{BcrN7QEl2.js → DIaZ2PTo2.js} +1 -1
  54. package/.output/public/_nuxt/DPnwL14Y.js +1 -0
  55. package/.output/public/_nuxt/DR12_WCA.js +3 -0
  56. package/.output/public/_nuxt/{B9nXmjSB.js → DUrecWPx.js} +4 -4
  57. package/.output/public/_nuxt/DVsjtsvZ2.js +1 -0
  58. package/.output/public/_nuxt/DYr1VMiQ.js +6 -0
  59. package/.output/public/_nuxt/DZtm4l-P2.js +1 -0
  60. package/.output/public/_nuxt/DdD9mCHM.js +1 -0
  61. package/.output/public/_nuxt/DeJykBFf.js +9 -0
  62. package/.output/public/_nuxt/{DoMxCWN52.js → DeyBFhKH2.js} +1 -1
  63. package/.output/public/_nuxt/DkGQ7lnb2.js +1 -0
  64. package/.output/public/_nuxt/DmqknNvV.js +18 -0
  65. package/.output/public/_nuxt/DnUuIR83.js +1 -0
  66. package/.output/public/_nuxt/DrYV5i68.js +1 -0
  67. package/.output/public/_nuxt/{B5S_UyaC.js → DtYHUi5Z.js} +1 -1
  68. package/.output/public/_nuxt/Dz_Q3Lpw2.js +1 -0
  69. package/.output/public/_nuxt/DzbFpZRk.js +3 -0
  70. package/.output/public/_nuxt/HBLJ-wei.js +1 -0
  71. package/.output/public/_nuxt/JCoYF4IJ.js +31 -0
  72. package/.output/public/_nuxt/JTLM-kqr2.js +1 -0
  73. package/.output/public/_nuxt/{BeIfu4N3.js → KZQX7xoM.js} +2 -2
  74. package/.output/public/_nuxt/S_fVQwJK.js +1 -0
  75. package/.output/public/_nuxt/TownView.0oLiQgTC.css +1 -0
  76. package/.output/public/_nuxt/YnQxK3eG.js +1 -0
  77. package/.output/public/_nuxt/_id_.D-SYuyZb.css +1 -0
  78. package/.output/public/_nuxt/_id_.hma_BU6T.css +1 -0
  79. package/.output/public/_nuxt/_wsId_.B12v3PhY.css +1 -0
  80. package/.output/public/_nuxt/aLLjF2K-2.js +1 -0
  81. package/.output/public/_nuxt/aWWIh8YL.js +24 -0
  82. package/.output/public/_nuxt/ahgEJu2R.js +1 -0
  83. package/.output/public/_nuxt/aml.COEKNNqK.css +1 -0
  84. package/.output/public/_nuxt/builds/latest.json +1 -1
  85. package/.output/public/_nuxt/builds/meta/44b66249-54d0-4c8a-9057-9755a32329e2.json +1 -0
  86. package/.output/public/_nuxt/daq.B3265ZDn.css +1 -0
  87. package/.output/public/_nuxt/dcw.DLYZqEhT.css +1 -0
  88. package/.output/public/_nuxt/default.DE_vT238.css +1 -0
  89. package/.output/public/_nuxt/entry.BB-Eeh-J.css +1 -0
  90. package/.output/public/_nuxt/jZsY8yYz.js +1 -0
  91. package/.output/public/_nuxt/logs.CqFyMrJw.css +1 -0
  92. package/.output/public/_nuxt/pages.ooEzrMm9.css +1 -0
  93. package/.output/public/_nuxt/pdk8jLGT.js +1 -0
  94. package/.output/public/_nuxt/plugins.5e5chZ67.css +1 -0
  95. package/.output/public/_nuxt/pz2JDAM7.js +2 -0
  96. package/.output/public/_nuxt/settings.Dm3M0RLy.css +1 -0
  97. package/.output/public/_nuxt/town.DKIAhKnx.css +1 -0
  98. package/.output/public/_nuxt/users.CXnP2E08.css +1 -0
  99. package/.output/public/_nuxt/vRTjoWqd.js +1 -0
  100. package/.output/public/_nuxt/workshop.Jk5HxWPE.css +1 -0
  101. package/.output/public/_nuxt/zIGh7R49.js +75 -0
  102. package/.output/public/_nuxt/zq5t1vyX.js +1 -0
  103. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  104. package/.output/server/chunks/_/entity.mjs +174 -0
  105. package/.output/server/chunks/_/entity.mjs.map +1 -0
  106. package/.output/server/chunks/_/env-manager.mjs +162 -0
  107. package/.output/server/chunks/_/env-manager.mjs.map +1 -0
  108. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  109. package/.output/server/chunks/_/nitro.mjs +1657 -1162
  110. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  111. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  112. package/.output/server/chunks/build/{TownView-BdHnAilw.mjs → TownView-jVazYOjN.mjs} +141 -141
  113. package/.output/server/chunks/build/{TownView-BdHnAilw.mjs.map → TownView-jVazYOjN.mjs.map} +1 -1
  114. package/.output/server/chunks/build/{_id_-Cb845FHR.mjs → _id_-CfVosNg3.mjs} +136 -136
  115. package/.output/server/chunks/build/{_id_-Cb845FHR.mjs.map → _id_-CfVosNg3.mjs.map} +1 -1
  116. package/.output/server/chunks/build/{_id_-fadFPl2i.mjs → _id_-Hwr4rZpr.mjs} +32 -32
  117. package/.output/server/chunks/build/{_id_-fadFPl2i.mjs.map → _id_-Hwr4rZpr.mjs.map} +1 -1
  118. package/.output/server/chunks/build/{_wsId_-CTZswnm5.mjs → _wsId_-BVg3bB77.mjs} +175 -165
  119. package/.output/server/chunks/build/{_wsId_-CTZswnm5.mjs.map → _wsId_-BVg3bB77.mjs.map} +1 -1
  120. package/.output/server/chunks/build/aml-BCSJCdX7.mjs +588 -0
  121. package/.output/server/chunks/build/aml-BCSJCdX7.mjs.map +1 -0
  122. package/.output/server/chunks/build/{daq-BvihjQyW.mjs → daq-C03Uu5UE.mjs} +108 -106
  123. package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +1 -0
  124. package/.output/server/chunks/build/{dcw-Ks2vJ4PF.mjs → dcw-6vEYVeje.mjs} +44 -44
  125. package/.output/server/chunks/build/{dcw-Ks2vJ4PF.mjs.map → dcw-6vEYVeje.mjs.map} +1 -1
  126. package/.output/server/chunks/build/{default-GgHt4O2R.mjs → default-hseyOqBT.mjs} +30 -27
  127. package/.output/server/chunks/build/{default-GgHt4O2R.mjs.map → default-hseyOqBT.mjs.map} +1 -1
  128. package/.output/server/chunks/build/{logs-CYBhkQwh.mjs → logs-B-xhuqln.mjs} +35 -35
  129. package/.output/server/chunks/build/{logs-CYBhkQwh.mjs.map → logs-B-xhuqln.mjs.map} +1 -1
  130. package/.output/server/chunks/build/{pages-C-6BRtv8.mjs → pages-BO7yZsXA.mjs} +18 -27
  131. package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +1 -0
  132. package/.output/server/chunks/build/{plugins-dZRegC7m.mjs → plugins-CUWmMdyt.mjs} +17 -17
  133. package/.output/server/chunks/build/{plugins-dZRegC7m.mjs.map → plugins-CUWmMdyt.mjs.map} +1 -1
  134. package/.output/server/chunks/build/{settings-CgDLkP3s.mjs → settings-DoQ2Oq3P.mjs} +43 -43
  135. package/.output/server/chunks/build/{settings-CgDLkP3s.mjs.map → settings-DoQ2Oq3P.mjs.map} +1 -1
  136. package/.output/server/chunks/build/{town-DJ-V5G9U.mjs → town-BOl6hs9B.mjs} +7 -7
  137. package/.output/server/chunks/build/{town-DJ-V5G9U.mjs.map → town-BOl6hs9B.mjs.map} +1 -1
  138. package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs +1 -1
  139. package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs +1 -1
  140. package/.output/server/chunks/build/{useWorkshopWs-CprkZEdq.mjs → useWorkshopWs-C_I7q9As.mjs} +110 -32
  141. package/.output/server/chunks/build/{useWorkshopWs-CprkZEdq.mjs.map → useWorkshopWs-C_I7q9As.mjs.map} +1 -1
  142. package/.output/server/chunks/build/{users-4nzxTjFT.mjs → users-fohSmF-J.mjs} +6 -6
  143. package/.output/server/chunks/build/{users-4nzxTjFT.mjs.map → users-fohSmF-J.mjs.map} +1 -1
  144. package/.output/server/chunks/build/{workshop-81xhz368.mjs → workshop-DX5-ldc4.mjs} +15 -15
  145. package/.output/server/chunks/build/{workshop-81xhz368.mjs.map → workshop-DX5-ldc4.mjs.map} +1 -1
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +21 -8
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  148. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id/preview.get.mjs +1 -1
  149. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs +58 -0
  150. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.delete.mjs.map +1 -0
  151. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +27 -6
  152. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs +49 -0
  154. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.patch.mjs.map +1 -0
  155. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs +45 -0
  156. package/.output/server/chunks/routes/api/workshop/aml/entities/prune.post.mjs.map +1 -0
  157. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs +30 -0
  158. package/.output/server/chunks/routes/api/workshop/aml/env/recheck.post.mjs.map +1 -0
  159. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs +40 -0
  160. package/.output/server/chunks/routes/api/workshop/aml/env/uv.post.mjs.map +1 -0
  161. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs +42 -0
  162. package/.output/server/chunks/routes/api/workshop/aml/env/venv.post.mjs.map +1 -0
  163. package/.output/server/chunks/routes/api/workshop/aml/index.get.mjs +1 -1
  164. package/.output/server/chunks/routes/api/workshop/aml/index.post.mjs +1 -1
  165. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs +4 -22
  166. package/.output/server/chunks/routes/api/workshop/aml/index2.get.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/workshop/aml/index2.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs +4 -16
  169. package/.output/server/chunks/routes/api/workshop/aml/index3.get.mjs.map +1 -1
  170. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs +19 -34
  171. package/.output/server/chunks/routes/api/workshop/aml/index4.get.mjs.map +1 -1
  172. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs +41 -0
  173. package/.output/server/chunks/routes/api/workshop/aml/index5.get.mjs.map +1 -0
  174. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs +62 -0
  175. package/.output/server/chunks/routes/api/workshop/aml/index6.get.mjs.map +1 -0
  176. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/cancel.post.mjs +1 -1
  177. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/logs.get.mjs +1 -1
  178. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id/retry.post.mjs +1 -1
  179. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs +63 -0
  180. package/.output/server/chunks/routes/api/workshop/aml/jobs/_id_.delete.mjs.map +1 -0
  181. package/.output/server/chunks/routes/api/workshop/aml/models/_id/predict.post.mjs +1 -1
  182. package/.output/server/chunks/routes/api/workshop/aml/models/_id/promote.post.mjs +1 -1
  183. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs +54 -0
  184. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.delete.mjs.map +1 -0
  185. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs +46 -0
  186. package/.output/server/chunks/routes/api/workshop/aml/models/_id_.patch.mjs.map +1 -0
  187. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  188. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  189. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +2 -2
  190. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  191. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
  192. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
  193. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  194. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  195. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
  196. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +4 -4
  197. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  198. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  199. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
  200. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  201. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  202. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
  203. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  204. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  205. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  206. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  208. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  209. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  211. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  213. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
  226. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  229. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
  230. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  232. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  233. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  235. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  237. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  238. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  239. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  240. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  241. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  242. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  243. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  244. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  245. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  246. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  247. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  248. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  249. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  250. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
  251. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  253. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  254. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  256. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +12 -1
  257. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  258. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  259. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  260. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  261. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
  262. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  265. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  269. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
  270. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
  271. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +2 -2
  272. package/.output/server/chunks/routes/renderer.mjs +2 -2
  273. package/.output/server/chunks/virtual/entry.mjs +103 -17
  274. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  275. package/.output/server/package.json +1 -1
  276. package/README-zh.md +578 -507
  277. package/README.md +125 -51
  278. package/app/assets/css/main.css +329 -22
  279. package/app/components/AppHeader.vue +5 -4
  280. package/app/components/AppSidebar.vue +5 -4
  281. package/app/components/AwChart.vue +17 -0
  282. package/app/components/workshop/AgentLanesView.vue +2 -2
  283. package/app/components/workshop/ChannelSessionList.vue +3 -3
  284. package/app/components/workshop/CommandPalette.vue +1 -2
  285. package/app/components/workshop/Composer.vue +4 -4
  286. package/app/components/workshop/DaqNodeRow.vue +20 -1
  287. package/app/components/workshop/EventBlock.vue +3 -3
  288. package/app/components/workshop/MentionHoverCard.vue +1 -1
  289. package/app/components/workshop/MultiChannelView.vue +1 -1
  290. package/app/components/workshop/TaskBoardView.vue +5 -5
  291. package/app/components/workshop/TranscriptTimeline.vue +3 -3
  292. package/app/components/workshop/blocks/ClusterRoute.vue +3 -3
  293. package/app/components/workshop/blocks/ClusterStream.vue +1 -1
  294. package/app/components/workshop/blocks/ClusterTool.vue +1 -1
  295. package/app/components/workshop/lanes/LaneBlocks.vue +5 -2
  296. package/app/components/workshop/town/TownView.vue +0 -7
  297. package/app/composables/workshop/useClusteredBlocks.ts +22 -3
  298. package/app/composables/workshop/useEscClose.ts +44 -0
  299. package/app/config/index.ts +2 -1
  300. package/app/layouts/default.vue +25 -8
  301. package/app/pages/aml/index.vue +626 -4
  302. package/app/pages/daq/[id].vue +1 -1
  303. package/app/pages/daq/index.vue +10 -12
  304. package/app/pages/dcw/[id].vue +2 -2
  305. package/app/pages/dcw/index.vue +7 -11
  306. package/app/pages/index.vue +24 -6
  307. package/app/pages/logs/index.vue +2 -6
  308. package/app/pages/plugins/index.vue +1 -1
  309. package/app/pages/settings.vue +2 -2
  310. package/app/pages/town.vue +0 -2
  311. package/app/pages/users.vue +1 -1
  312. package/app/pages/workshop/index.vue +2 -2
  313. package/app/plugins/esc-close.client.ts +31 -0
  314. package/app/stores/workshop/events.ts +186 -36
  315. package/bin/aw.mjs +7 -2
  316. package/cli/aw.mjs +19 -34
  317. package/cli/commands/build.mjs +18 -1
  318. package/cli/commands/config.mjs +2 -0
  319. package/cli/commands/plugin.mjs +45 -18
  320. package/cli/commands/register.mjs +6 -2
  321. package/cli/commands/status.mjs +2 -1
  322. package/cli/commands/update.mjs +1 -1
  323. package/cli/commands/version.mjs +1 -1
  324. package/cli/core/args.mjs +76 -4
  325. package/cli/core/help.mjs +3 -1
  326. package/cli/core/meta.mjs +38 -0
  327. package/cli/core/post-build.mjs +96 -0
  328. package/cli/core/registry.mjs +6 -3
  329. package/config.yml +28 -26
  330. package/docs/aml.md +99 -0
  331. package/docs/cli.en.md +445 -0
  332. package/docs/cli.md +410 -220
  333. package/docs/full-test-plan.md +174 -0
  334. package/docs/multi-harness-architecture.md +248 -0
  335. package/docs/plugins.en.md +534 -0
  336. package/docs/plugins.md +531 -179
  337. package/docs/sdk.en.md +922 -0
  338. package/docs/sdk.md +725 -129
  339. package/i18n/dicts/aml.json +43 -1
  340. package/i18n/locales/en.ts +1928 -1885
  341. package/i18n/locales/zh-CN.ts +1928 -1885
  342. package/nuxt.config.ts +27 -2
  343. package/package.json +164 -153
  344. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.continue.json +1 -0
  345. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.json +1 -0
  346. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/054bb4bc4e4217a2ab0b0c6b663747214a9af464f5568ea60e784704e340bb0f.source +153 -0
  347. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/0554197c3d2bac203a1f5c48a5d52495d1336db1bd7aa4f4c19875810363e684.source +153 -0
  348. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/05c203d12a954fffba942e1d626e3f5fec05b18a5aef2bac003b7884a4b77406.source +431 -0
  349. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/145a6e6ba811af35aed31e0cc3211f53706a14980fa069ee9e3c1591139f96f0.source +180 -0
  350. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/1ae0fb281f97899c025e368ca73f41349b01fb5f85b19e08d7ebccff49095ed5.source +112 -0
  351. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/20ee9967aa0541c516db7575bdd4a1a745939bc7016bd10d7635903113edb8ec.source +227 -0
  352. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/233751843aeba9d4c5263f275b8102de00443c06f286918cbd23e0b6729e01aa.source +131 -0
  353. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/263c2e05b425e5c322e60c6475279f963bab3a873eb521b21df7fec935a46597.source +160 -0
  354. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/2ac5eaac28eaaee2178c4b32014df8e732f9dd432a285a872f5b7f31c1395fa4.source +157 -0
  355. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/33a0db0d2d95d2c11d0720090458e5fba1425376f5ceb5b422d1d3471be3226b.source +348 -0
  356. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/359e474ae83db35e4615d3728de6bf694b64d4dce9b536730a3b6518f9c0494a.source +296 -0
  357. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/37a4c3c31c4b70f6b719c53d1e9c4fcba603f31adfdd11bb6ef9f0d094923c56.source +285 -0
  358. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/461feca1c14a695eb8b0f17a6f95fe97eeceabc0510faaea4ba6d25bde147d8d.source +217 -0
  359. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/4cfadbda8591f29d5e1e230dc000e701b756e850441b3900fb596a4d2f6e98c2.source +301 -0
  360. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/50ca2810cf0b248c96948994c0c404531bbad6e553166b6816b3b03bfa0f75d2.source +151 -0
  361. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/52d9e8cb591a9ae86e238c3620a610cd386717bee222c0f37b25b2ac7e523dc4.source +135 -0
  362. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/6c87daafa4c006560a954636a97333f6123153c9d34d96203f7ee3a14e556357.source +156 -0
  363. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/77bc47854b577900621cacf1697f81fa2bc005af129d37614a97a3441c08f99f.source +72 -0
  364. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/7bbb789d3a527817118cf8399ed1861d6a962ade10878fd07223435d333a7089.source +469 -0
  365. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/86b7c1daafc8b60ba9982dde5bf1bcc74265709483c176e71f23ec6fc267451f.source +259 -0
  366. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/8df66d62bd41984d0970e8236882080c5085ac937d07a29779463d6a03b37c76.source +97 -0
  367. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/9962f2d1b3a85137bd40cc835725600b39f89ee02a27c06b2e0402e1eafde115.source +277 -0
  368. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a1090ea066b792cb201739f4994e37bf7c12f52e805239a1eab87f18a537f266.source +171 -0
  369. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a5241091650134d0919897e086a606a3846c8b2b54f8b4c84a8696c145ac3e9e.source +425 -0
  370. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/af19fa4c6e34d5540028be4b17600161283af3a2a2dfc61a3fdc0834436a0c14.source +99 -0
  371. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3713d78e2b2f93905ff6be8d58a8d0a2f42dea322eb67c987fda22ff6a084d5.source +325 -0
  372. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3849943c3aff102d1af815631fc843a2a52c17646a4b04696ece323e483bbec.source +332 -0
  373. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/bac735a3803a6650b7f1eb8f587e6dc5c68ea055000c3c99a11789438b78e837.source +43 -0
  374. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d32c24d61eb8b33c73e5a8fc7e4dc7ef437aed238ee4371c2b00617e6104090a.source +154 -0
  375. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d5170dc9a9879fda04fdf91d8a110d4efb6787ee38dda596d4da899883d36a72.source +531 -0
  376. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/dc59bcd7bb397be63ba2f2c3fec23f3782dcb17d2d75a9981eeced761f33eb32.source +439 -0
  377. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/eb5ff8cf66b92aec7bf6726781d8df74faa2b030c3aaac17d6b00c1fc04c9b32.source +323 -0
  378. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f10615a6fae18436e70d1201b2d44fdae3174a3aa7bb4db97dea1b3ed291d721.source +433 -0
  379. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f36d3e271668bc1260c2823542d22dbf1d0f7041ff16b1ac175bce2256e582ca.source +280 -0
  380. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f94449380af09f31ac352152007146a75cc80bae8d6411ffe57b2c56f933b0ff.source +117 -0
  381. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/fe4dfd81178fd6b648335f6405d9ede71319aebde796008e50db21f8adf44c99.source +160 -0
  382. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/ffb4e3aa548cfdadabaa44ab599f9b6a3ca6288176a2cc7a4b2fc2a12b5fb848.source +101 -0
  383. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +14 -0
  384. package/scripts/_audit/aml-layout-diag.mjs +83 -0
  385. package/scripts/_audit/bump-version.mjs +51 -0
  386. package/scripts/_audit/channel-inspect.mjs +49 -0
  387. package/scripts/_audit/cleanup-apply.mjs +89 -0
  388. package/scripts/_audit/cleanup-plan.mjs +82 -0
  389. package/scripts/_audit/contrast-check.mjs +43 -0
  390. package/scripts/_audit/dcw-unrecorded-write.ts +1 -1
  391. package/scripts/_audit/design-shots.mjs +145 -0
  392. package/scripts/_audit/docs-font-probe.mjs +68 -0
  393. package/scripts/_audit/docs-probe.mjs +107 -0
  394. package/scripts/_audit/docs-shots.mjs +171 -0
  395. package/scripts/_audit/docs-v3-verify.mjs +255 -0
  396. package/scripts/_audit/docs-vue-lint.mjs +81 -0
  397. package/scripts/_audit/docs-vue-lint2.mjs +91 -0
  398. package/scripts/_audit/exp-cost-scaling.mjs +4 -1
  399. package/scripts/_audit/exp-envelope-and-png.mjs +2 -1
  400. package/scripts/_audit/exp-sweep-fairness.mjs +4 -2
  401. package/scripts/_audit/fix-settings-count.mjs +57 -0
  402. package/scripts/_audit/glass-verify.mjs +155 -0
  403. package/scripts/_audit/hydration-diff.mjs +104 -0
  404. package/scripts/_audit/hydration-head.mjs +36 -0
  405. package/scripts/_audit/hydration-probe.mjs +59 -0
  406. package/scripts/_audit/lead-matrix-test.mjs +172 -0
  407. package/scripts/_audit/plc-agent-task.mjs +74 -0
  408. package/scripts/_audit/plc-clean-scenario.mjs +434 -0
  409. package/scripts/_audit/plc-clean-shots.mjs +161 -0
  410. package/scripts/_audit/plc-fc10-probe.mjs +30 -0
  411. package/scripts/_audit/probe-binding.mjs +114 -103
  412. package/scripts/_audit/review-fix-verify.mjs +158 -0
  413. package/scripts/_audit/seed-demo.mjs +165 -0
  414. package/scripts/_audit/town-focus-shot.mjs +129 -0
  415. package/scripts/_audit/town-reposition.mjs +85 -0
  416. package/scripts/_audit/ts-resolve-hook.mjs +57 -22
  417. package/scripts/_audit/verify-cleanup.mjs +67 -0
  418. package/scripts/_audit/verify-release-pack.mjs +82 -0
  419. package/scripts/_audit/watchdog-recovery-test.mjs +127 -0
  420. package/scripts/_dbg-audit-all-pages.mjs +43 -43
  421. package/scripts/_dbg-configroot-audit.mjs +84 -84
  422. package/scripts/_dbg-daq-intervals-func.mjs +94 -94
  423. package/scripts/_dbg-daq-rowstyle-verify.mjs +112 -112
  424. package/scripts/_dbg-groups-ui-verify.mjs +122 -122
  425. package/scripts/_dbg-harness-e2e.mjs +92 -92
  426. package/scripts/_dbg-harness-ui-e2e.py +97 -97
  427. package/scripts/_dbg-hitl-timeout-e2e.mjs +93 -93
  428. package/scripts/_dbg-multiharness-live-e2e.mjs +254 -254
  429. package/scripts/_dbg-opslog-agent-e2e.mjs +194 -194
  430. package/scripts/_dbg-opt-team-e2e.mjs +133 -133
  431. package/scripts/_dbg-recipe-e2e.mjs +176 -176
  432. package/scripts/_dbg-recipe-stale-e2e.mjs +135 -135
  433. package/scripts/_dbg-render-perf.mjs +142 -142
  434. package/scripts/_dbg-render-regression.mjs +130 -130
  435. package/scripts/_dbg-town-smoke.mjs +54 -54
  436. package/scripts/aw-start-smoke.mjs +27 -8
  437. package/scripts/check-docs-sync.mjs +367 -0
  438. package/scripts/e2e-full-closedloop.mjs +36 -18
  439. package/scripts/production-closed-loop-e2e.mjs +300 -303
  440. package/scripts/test-cli-exit.mjs +129 -21
  441. package/scripts/test-daq-frame-race.mjs +144 -96
  442. package/scripts/test-events-index.mjs +176 -0
  443. package/scripts/test-lru.mjs +34 -11
  444. package/scripts/test-memory-month-query.mjs +11 -3
  445. package/scripts/test-plugin-hardening.mjs +39 -2
  446. package/scripts/test-plugin-lifecycle.mjs +173 -0
  447. package/scripts/test-rollback-index.mjs +76 -18
  448. package/scripts/test-sdk-surface.mjs +6 -3
  449. package/sdk/client.mjs +16 -7
  450. package/sdk/context.mjs +21 -9
  451. package/sdk/examples/line-sentinel/client.mjs +13 -6
  452. package/sdk/examples/line-sentinel/index.mjs +5 -2
  453. package/sdk/examples/ops-notifier/client.mjs +3 -1
  454. package/sdk/examples/sample-insight/client.mjs +4 -2
  455. package/sdk/index.d.mts +133 -16
  456. package/sdk/index.mjs +3 -2
  457. package/sdk/lifecycle.mjs +8 -3
  458. package/server/api/workshop/agent-tools/bindings/index.post.ts +22 -7
  459. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -0
  460. package/server/api/workshop/aml/datasets/[id].get.ts +31 -9
  461. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -0
  462. package/server/api/workshop/aml/entities/index.get.ts +13 -0
  463. package/server/api/workshop/aml/entities/prune.post.ts +28 -0
  464. package/server/api/workshop/aml/env/index.get.ts +13 -0
  465. package/server/api/workshop/aml/env/recheck.post.ts +14 -0
  466. package/server/api/workshop/aml/env/uv.post.ts +21 -0
  467. package/server/api/workshop/aml/env/venv.post.ts +24 -0
  468. package/server/api/workshop/aml/index.get.ts +14 -1
  469. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -0
  470. package/server/api/workshop/aml/models/[id].delete.ts +35 -0
  471. package/server/api/workshop/aml/models/[id].patch.ts +30 -0
  472. package/server/plugins/dev-stability-guard.ts +40 -63
  473. package/server/services/workshop/agents/agent-interface.ts +3 -0
  474. package/server/services/workshop/agents/codex-agent.ts +4 -7
  475. package/server/services/workshop/agents/dsh-agent.ts +4 -7
  476. package/server/services/workshop/agents/opencode-agent.ts +5 -7
  477. package/server/services/workshop/aml/aml.repo.ts +18 -0
  478. package/server/services/workshop/aml/dataset-builder.ts +4 -0
  479. package/server/services/workshop/aml/entity.ts +365 -0
  480. package/server/services/workshop/aml/env-manager.ts +242 -0
  481. package/server/services/workshop/aml/job-orchestrator.ts +4 -15
  482. package/server/services/workshop/aml/model-registry.ts +6 -0
  483. package/server/services/workshop/aml/python-runtime.ts +396 -62
  484. package/server/services/workshop/aml/runtime.ts +95 -4
  485. package/server/services/workshop/daq/bus/mqtt.adapter.ts +3 -1
  486. package/server/services/workshop/daq/daq-controller.ts +95 -47
  487. package/server/services/workshop/daq/daq-node.repo.ts +0 -10
  488. package/server/services/workshop/daq/daq-runtime.ts +0 -5
  489. package/server/services/workshop/json-store.mjs +35 -2
  490. package/server/services/workshop/plugins/host.mjs +14 -5
  491. package/server/services/workshop/runtime/manager.ts +28 -1
  492. package/server/services/workshop/runtime/scheduler-loop.ts +10 -1
  493. package/server/services/workshop/settings.ts +2 -0
  494. package/server/utils/stability-severity.ts +66 -0
  495. package/shared/config/home.mjs +58 -0
  496. package/shared/config/schema.json +2 -1
  497. package/shared/lru.mjs +4 -1
  498. package/.output/public/_nuxt/-6OnbLFb.js +0 -1
  499. package/.output/public/_nuxt/-nb2uqVg.js +0 -1
  500. package/.output/public/_nuxt/4bHdIqEg.js +0 -18
  501. package/.output/public/_nuxt/6PZPfFcO.js +0 -17
  502. package/.output/public/_nuxt/BBBtwOpo.js +0 -9
  503. package/.output/public/_nuxt/BBwMH_hG.js +0 -7
  504. package/.output/public/_nuxt/BDUjyaF4.js +0 -42
  505. package/.output/public/_nuxt/BNXfwXpE.js +0 -1
  506. package/.output/public/_nuxt/BN_PdN3J.js +0 -24
  507. package/.output/public/_nuxt/BSSUlJnx2.js +0 -1
  508. package/.output/public/_nuxt/BWSE6hR6.js +0 -1
  509. package/.output/public/_nuxt/BZGNTgTQ2.js +0 -1
  510. package/.output/public/_nuxt/BZv4RFYN.js +0 -1
  511. package/.output/public/_nuxt/BcmbLh2z2.js +0 -1
  512. package/.output/public/_nuxt/BfGc7TJp.js +0 -1
  513. package/.output/public/_nuxt/BgTB6h_q.js +0 -2
  514. package/.output/public/_nuxt/BkLJA9J5.js +0 -1
  515. package/.output/public/_nuxt/Bp5luxkg2.js +0 -1
  516. package/.output/public/_nuxt/BuCHayqN.js +0 -1
  517. package/.output/public/_nuxt/BuvcLKh1.js +0 -19
  518. package/.output/public/_nuxt/C3tCneTM.js +0 -1
  519. package/.output/public/_nuxt/C77oC8yC2.js +0 -7
  520. package/.output/public/_nuxt/C9f8QMp12.js +0 -1
  521. package/.output/public/_nuxt/CKfhtOt7.js +0 -13
  522. package/.output/public/_nuxt/CQvmN-Mi.js +0 -1
  523. package/.output/public/_nuxt/CUDrOuW7.js +0 -1
  524. package/.output/public/_nuxt/CZcC-gpk.js +0 -1
  525. package/.output/public/_nuxt/CbzsPO5H.js +0 -1
  526. package/.output/public/_nuxt/CdSOrh2c.js +0 -1
  527. package/.output/public/_nuxt/Cgx818r-.js +0 -1
  528. package/.output/public/_nuxt/Cjm7VogC.js +0 -1
  529. package/.output/public/_nuxt/Cm5mDxzH.js +0 -1
  530. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  531. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  532. package/.output/public/_nuxt/Cno6kYiO2.js +0 -1
  533. package/.output/public/_nuxt/Cp6z0RN7.js +0 -1
  534. package/.output/public/_nuxt/CwqIxJGj.js +0 -2
  535. package/.output/public/_nuxt/D-Ca4BGY.js +0 -70
  536. package/.output/public/_nuxt/D0fhp-Ga.js +0 -75
  537. package/.output/public/_nuxt/D1z7i2UP.js +0 -31
  538. package/.output/public/_nuxt/DIaTPH1M.js +0 -1
  539. package/.output/public/_nuxt/DTYBfjRY.js +0 -1
  540. package/.output/public/_nuxt/DXRZPxGs.js +0 -1
  541. package/.output/public/_nuxt/DZzGarBE2.js +0 -13
  542. package/.output/public/_nuxt/DaMCzQhv.js +0 -1
  543. package/.output/public/_nuxt/DoLasgPj2.js +0 -1
  544. package/.output/public/_nuxt/DpojD719.js +0 -1
  545. package/.output/public/_nuxt/DsVcWfyR.js +0 -1
  546. package/.output/public/_nuxt/DtBu71ev.js +0 -32
  547. package/.output/public/_nuxt/Dy-mxvXY2.js +0 -1
  548. package/.output/public/_nuxt/DzuC31-i.js +0 -2
  549. package/.output/public/_nuxt/FQri3dV3.js +0 -1
  550. package/.output/public/_nuxt/ORt9oDIy2.js +0 -1
  551. package/.output/public/_nuxt/TownView.CtskuMXS.css +0 -1
  552. package/.output/public/_nuxt/VLI2Zy4t.js +0 -5
  553. package/.output/public/_nuxt/_id_.MbzdFygI.css +0 -1
  554. package/.output/public/_nuxt/_id_.hRYo-EAB.css +0 -1
  555. package/.output/public/_nuxt/_wsId_.gXMEOYgX.css +0 -1
  556. package/.output/public/_nuxt/aml.WU_bh87J.css +0 -1
  557. package/.output/public/_nuxt/arUY5dyq2.js +0 -4
  558. package/.output/public/_nuxt/builds/meta/adc365b6-f636-4a2b-9527-79819c1e874b.json +0 -1
  559. package/.output/public/_nuxt/daq.Bb6l44-O.css +0 -1
  560. package/.output/public/_nuxt/dcw.rXH2fc2Z.css +0 -1
  561. package/.output/public/_nuxt/default.jNT73_hq.css +0 -1
  562. package/.output/public/_nuxt/ekuGmQ7R.js +0 -1
  563. package/.output/public/_nuxt/entry.jFrFAWuA.css +0 -1
  564. package/.output/public/_nuxt/logs.DMOM-iHe.css +0 -1
  565. package/.output/public/_nuxt/niDwBOZW.js +0 -3
  566. package/.output/public/_nuxt/pMoIO6rr.js +0 -14
  567. package/.output/public/_nuxt/pages.Cc8GX9T1.css +0 -1
  568. package/.output/public/_nuxt/plugins.wIPyfPn-.css +0 -1
  569. package/.output/public/_nuxt/rqZ-1SoP.js +0 -2
  570. package/.output/public/_nuxt/settings.BCm4NZIc.css +0 -1
  571. package/.output/public/_nuxt/town.C_DsNW0J.css +0 -1
  572. package/.output/public/_nuxt/users.DuAt_Zwf.css +0 -1
  573. package/.output/public/_nuxt/vJ4FPb-_.js +0 -1
  574. package/.output/public/_nuxt/workshop.BJg84pOK.css +0 -1
  575. package/.output/server/chunks/build/aml-uBNIppIf.mjs +0 -508
  576. package/.output/server/chunks/build/aml-uBNIppIf.mjs.map +0 -1
  577. package/.output/server/chunks/build/daq-BvihjQyW.mjs.map +0 -1
  578. package/.output/server/chunks/build/pages-C-6BRtv8.mjs.map +0 -1
  579. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -28
  580. package/scripts/_audit/.tmp/dcw-writes.json +0 -15650
  581. package/scripts/_audit/.tmp/dcws.json +0 -9033
  582. package/scripts/_audit/.tmp/pollution-backup/dcw-rollback.polluted.json +0 -470006
  583. package/scripts/_audit/.tmp/pollution-backup/dcws.polluted.json +0 -9085
  584. package/scripts/_audit/.tmp/probe-cwd.txt +0 -1
  585. package/scripts/_audit/awhome/commands/README.md +0 -3
  586. package/scripts/_audit/awhome/commands/hello.mjs +0 -12
  587. package/scripts/_audit/diag-cwd.ts +0 -20
  588. package/scripts/_audit/diag-cwd2.ts +0 -19
  589. package/scripts/_audit/hello.mjs +0 -12
  590. package/scripts/_audit/ndjson-partial-line-repro.mjs +0 -77
  591. package/scripts/_audit/opencode-await-ternary-repro.mjs +0 -20
  592. package/scripts/_audit/part-frag.txt +0 -84
  593. package/scripts/_audit/part-head.txt +0 -45
  594. package/scripts/_audit/probe-child.mjs +0 -17
  595. package/scripts/_audit/probe-envelope.mjs +0 -49
  596. package/scripts/_audit/probe-packlist.mjs +0 -67
  597. package/scripts/_audit/probe-routes.mjs +0 -47
  598. package/scripts/_audit/probe-routes2.mjs +0 -38
  599. package/scripts/_audit/probe.ts +0 -9
  600. package/scripts/_audit/probe2.ts +0 -6
  601. package/scripts/_audit/probe3.ts +0 -3
  602. package/scripts/_audit/probe4.ts +0 -3
  603. package/scripts/_audit/proj/.AgentWorkShop/commands/echoargs.mjs +0 -13
  604. package/scripts/_audit/proj/config.yml +0 -1
  605. package/scripts/_audit/run.mjs +0 -30
  606. package/scripts/_audit/tsconfig.probe.json +0 -24
  607. package/scripts/_audit/typecheck-out.txt +0 -466
  608. package/scripts/_daq-realtime-probe.mjs +0 -68
  609. package/scripts/_daq-warn-probe.mjs +0 -50
  610. package/scripts/_dbg-acc-1-setup.mjs +0 -57
  611. package/scripts/_dbg-acc-2-diag.mjs +0 -14
  612. package/scripts/_dbg-acc-2-intervals.mjs +0 -81
  613. package/scripts/_dbg-acc-3-daq.mjs +0 -48
  614. package/scripts/_dbg-acc-4-team.mjs +0 -92
  615. package/scripts/_dbg-acc-5-visual.mjs +0 -63
  616. package/scripts/_dbg-acc-5b-ws-town.mjs +0 -18
  617. package/scripts/_dbg-acc-5c-town.mjs +0 -12
  618. package/scripts/_dbg-acc-6-i18n.mjs +0 -19
  619. package/scripts/_dbg-agent-tools-audit.mjs +0 -154
  620. package/scripts/_dbg-agent-workflow-audit.mjs +0 -177
  621. package/scripts/_dbg-agents-dropdown-shot.py +0 -33
  622. package/scripts/_dbg-anim-verify.mjs +0 -81
  623. package/scripts/_dbg-app-shot.mjs +0 -48
  624. package/scripts/_dbg-autoframe.mjs +0 -103
  625. package/scripts/_dbg-availability-probe.ts +0 -11
  626. package/scripts/_dbg-beacon-final.mjs +0 -181
  627. package/scripts/_dbg-bind-bidi-e2e.mjs +0 -239
  628. package/scripts/_dbg-callout-near.mjs +0 -108
  629. package/scripts/_dbg-catalog-smoke.ts +0 -20
  630. package/scripts/_dbg-cf-line-shot.mjs +0 -18
  631. package/scripts/_dbg-chan-focus.mjs +0 -49
  632. package/scripts/_dbg-channel-plugin-ui.mjs +0 -94
  633. package/scripts/_dbg-cleanup.mjs +0 -31
  634. package/scripts/_dbg-closedloop-ui-shot.mjs +0 -61
  635. package/scripts/_dbg-codex-handshake.ts +0 -30
  636. package/scripts/_dbg-codex-probe.mjs +0 -58
  637. package/scripts/_dbg-codex-sandbox.ts +0 -58
  638. package/scripts/_dbg-codex-turn.ts +0 -65
  639. package/scripts/_dbg-collab-scenario-e2e.mjs +0 -185
  640. package/scripts/_dbg-config-smoke.ts +0 -28
  641. package/scripts/_dbg-console-audit.mjs +0 -61
  642. package/scripts/_dbg-console-probe.mjs +0 -23
  643. package/scripts/_dbg-context-inject-audit.mjs +0 -231
  644. package/scripts/_dbg-cpu-profile.mjs +0 -53
  645. package/scripts/_dbg-crash-recovery.mjs +0 -143
  646. package/scripts/_dbg-crop-shot.mjs +0 -16
  647. package/scripts/_dbg-cross-channel-e2e.mjs +0 -157
  648. package/scripts/_dbg-cross-team-visibility-e2e.mjs +0 -129
  649. package/scripts/_dbg-crush-probe.sh +0 -21
  650. package/scripts/_dbg-crush-spawn-probe.ts +0 -22
  651. package/scripts/_dbg-daq-acc-probe.mjs +0 -24
  652. package/scripts/_dbg-daq-attrib.mjs +0 -34
  653. package/scripts/_dbg-daq-bind-audit.mjs +0 -119
  654. package/scripts/_dbg-daq-cadence.mjs +0 -104
  655. package/scripts/_dbg-daq-debug.mjs +0 -22
  656. package/scripts/_dbg-daq-diag.mjs +0 -33
  657. package/scripts/_dbg-daq-e2e.mjs +0 -171
  658. package/scripts/_dbg-daq-film.mjs +0 -136
  659. package/scripts/_dbg-daq-filter-e2e.mjs +0 -109
  660. package/scripts/_dbg-daq-filter-e2e2.mjs +0 -62
  661. package/scripts/_dbg-daq-final-regression.mjs +0 -78
  662. package/scripts/_dbg-daq-frame-alarm.mjs +0 -49
  663. package/scripts/_dbg-daq-frame-ui.mjs +0 -62
  664. package/scripts/_dbg-daq-frame-ws.mjs +0 -72
  665. package/scripts/_dbg-daq-full-check.mjs +0 -179
  666. package/scripts/_dbg-daq-line-note-verify.mjs +0 -61
  667. package/scripts/_dbg-daq-linebanner-audit.mjs +0 -107
  668. package/scripts/_dbg-daq-pages-shot.mjs +0 -37
  669. package/scripts/_dbg-daq-perf.mjs +0 -61
  670. package/scripts/_dbg-daq-probe.mjs +0 -27
  671. package/scripts/_dbg-daq-recipe-e2e.mjs +0 -30
  672. package/scripts/_dbg-daq-redesign-shot.mjs +0 -88
  673. package/scripts/_dbg-daq-rows-probe.mjs +0 -26
  674. package/scripts/_dbg-daq-rowstate-e2e.mjs +0 -152
  675. package/scripts/_dbg-daq-rowstate-shot.mjs +0 -45
  676. package/scripts/_dbg-daq-rowstate-shot2.mjs +0 -38
  677. package/scripts/_dbg-daq-tpl.mjs +0 -144
  678. package/scripts/_dbg-dash-console-check.mjs +0 -49
  679. package/scripts/_dbg-dash-deep-probe.mjs +0 -61
  680. package/scripts/_dbg-dash-hitpoint.mjs +0 -44
  681. package/scripts/_dbg-dash-live-shot.mjs +0 -36
  682. package/scripts/_dbg-dash-shot.mjs +0 -21
  683. package/scripts/_dbg-dashboard-shot.mjs +0 -35
  684. package/scripts/_dbg-dcw-audit.mjs +0 -126
  685. package/scripts/_dbg-dcw-card-e2e.mjs +0 -108
  686. package/scripts/_dbg-dcw-channel-ui.mjs +0 -144
  687. package/scripts/_dbg-dcw-examples.mjs +0 -81
  688. package/scripts/_dbg-dcw-light-shot.mjs +0 -19
  689. package/scripts/_dbg-dcw-line-audit.mjs +0 -107
  690. package/scripts/_dbg-dcw-pause-tpl-audit.mjs +0 -161
  691. package/scripts/_dbg-dcw-pause-ui.mjs +0 -175
  692. package/scripts/_dbg-dcw-read-toolface.ts +0 -13
  693. package/scripts/_dbg-dcw-read-ui.mjs +0 -74
  694. package/scripts/_dbg-dcw-scene.mjs +0 -72
  695. package/scripts/_dbg-dcw-shot2.mjs +0 -14
  696. package/scripts/_dbg-dcw-twin-e2e.mjs +0 -192
  697. package/scripts/_dbg-diag-mock-loop.mjs +0 -89
  698. package/scripts/_dbg-diag-watch.mjs +0 -95
  699. package/scripts/_dbg-docs-site-shot.mjs +0 -32
  700. package/scripts/_dbg-dsh-probe.mjs +0 -31
  701. package/scripts/_dbg-dt-interact.mjs +0 -193
  702. package/scripts/_dbg-error-probe.mjs +0 -54
  703. package/scripts/_dbg-filter-light-verify.mjs +0 -54
  704. package/scripts/_dbg-final-acceptance-2.mjs +0 -72
  705. package/scripts/_dbg-final-acceptance.mjs +0 -192
  706. package/scripts/_dbg-final-agent-e2e.mjs +0 -151
  707. package/scripts/_dbg-final-features.mjs +0 -155
  708. package/scripts/_dbg-final-fixups.mjs +0 -62
  709. package/scripts/_dbg-final-full-e2e.mjs +0 -218
  710. package/scripts/_dbg-final-line-e2e.mjs +0 -173
  711. package/scripts/_dbg-final-shots.mjs +0 -32
  712. package/scripts/_dbg-final-t6-hitl.mjs +0 -38
  713. package/scripts/_dbg-final-visual.mjs +0 -29
  714. package/scripts/_dbg-fix-unused-imports.py +0 -41
  715. package/scripts/_dbg-focus-range.mjs +0 -115
  716. package/scripts/_dbg-fresh-scene-e2e.mjs +0 -125
  717. package/scripts/_dbg-fullchain-e2e.mjs +0 -178
  718. package/scripts/_dbg-gate-debug.mjs +0 -37
  719. package/scripts/_dbg-gif-encode.mjs +0 -111
  720. package/scripts/_dbg-gizmo.mjs +0 -95
  721. package/scripts/_dbg-glass-probe.mjs +0 -57
  722. package/scripts/_dbg-glass-shot.mjs +0 -50
  723. package/scripts/_dbg-glass-sweep.mjs +0 -25
  724. package/scripts/_dbg-glb-probe.mjs +0 -43
  725. package/scripts/_dbg-goose-probe.mjs +0 -33
  726. package/scripts/_dbg-goose-probe.sh +0 -10
  727. package/scripts/_dbg-hardening-probe.mjs +0 -90
  728. package/scripts/_dbg-harness-cancel-repro.mjs +0 -81
  729. package/scripts/_dbg-harness-ui-dbg.py +0 -49
  730. package/scripts/_dbg-harness-ui-shot.py +0 -109
  731. package/scripts/_dbg-hero-btn-probe.mjs +0 -21
  732. package/scripts/_dbg-hidden-check.mjs +0 -21
  733. package/scripts/_dbg-hmi-audit.mjs +0 -164
  734. package/scripts/_dbg-home-repro.mjs +0 -24
  735. package/scripts/_dbg-home-stack.mjs +0 -13
  736. package/scripts/_dbg-host.mjs +0 -16
  737. package/scripts/_dbg-huashu-survey.mjs +0 -31
  738. package/scripts/_dbg-huashu-survey2.mjs +0 -35
  739. package/scripts/_dbg-huashu-verify.mjs +0 -25
  740. package/scripts/_dbg-huashu-verify2.mjs +0 -26
  741. package/scripts/_dbg-hydration-detail.mjs +0 -18
  742. package/scripts/_dbg-i18n-debug.mjs +0 -27
  743. package/scripts/_dbg-i18n-debug2.mjs +0 -26
  744. package/scripts/_dbg-i18n-final.mjs +0 -42
  745. package/scripts/_dbg-i18n-scan.mjs +0 -38
  746. package/scripts/_dbg-infra-lifecycle.mjs +0 -44
  747. package/scripts/_dbg-interval-config.mjs +0 -156
  748. package/scripts/_dbg-interval-scenario.mjs +0 -126
  749. package/scripts/_dbg-kicker-check.mjs +0 -11
  750. package/scripts/_dbg-line-aura-shots.mjs +0 -54
  751. package/scripts/_dbg-line-control-e2e.mjs +0 -120
  752. package/scripts/_dbg-line-gate-audit.mjs +0 -108
  753. package/scripts/_dbg-line-live-e2e.mjs +0 -144
  754. package/scripts/_dbg-line-repo-test.ts +0 -10
  755. package/scripts/_dbg-line-scenario-e2e.mjs +0 -256
  756. package/scripts/_dbg-line-spawn.ts +0 -31
  757. package/scripts/_dbg-live-engine-probe.mjs +0 -80
  758. package/scripts/_dbg-login-debug.py +0 -23
  759. package/scripts/_dbg-login-e2e.mjs +0 -26
  760. package/scripts/_dbg-logs-ui-e2e.py +0 -126
  761. package/scripts/_dbg-mcp-bridge-probe.mjs +0 -147
  762. package/scripts/_dbg-modbus-latency.mjs +0 -22
  763. package/scripts/_dbg-mqtt-chain-e2e.mjs +0 -90
  764. package/scripts/_dbg-mqtt-publisher.mjs +0 -17
  765. package/scripts/_dbg-nav-rpg.mjs +0 -84
  766. package/scripts/_dbg-nav-shot.mjs +0 -28
  767. package/scripts/_dbg-nav.mjs +0 -27
  768. package/scripts/_dbg-oneshot-impl-probe.ts +0 -67
  769. package/scripts/_dbg-opencode-sse.mjs +0 -101
  770. package/scripts/_dbg-opencode-start.ts +0 -57
  771. package/scripts/_dbg-opslog-e2e.mjs +0 -121
  772. package/scripts/_dbg-opslog-shots.mjs +0 -62
  773. package/scripts/_dbg-optimization-e2e.mjs +0 -94
  774. package/scripts/_dbg-orbit.mjs +0 -58
  775. package/scripts/_dbg-overview-probe.sh +0 -31
  776. package/scripts/_dbg-panesplitter-fix-check.mjs +0 -62
  777. package/scripts/_dbg-perms-visual.mjs +0 -36
  778. package/scripts/_dbg-pg-tcp-probe.cjs +0 -27
  779. package/scripts/_dbg-phase-e3-monitor.mjs +0 -25
  780. package/scripts/_dbg-pi-spawn-probe.ts +0 -33
  781. package/scripts/_dbg-plc-agent-loop.ts +0 -102
  782. package/scripts/_dbg-plc-e2e.mjs +0 -171
  783. package/scripts/_dbg-plugin-agent-read.ts +0 -56
  784. package/scripts/_dbg-plugin-config-ui.mjs +0 -111
  785. package/scripts/_dbg-plugin-matrix.mjs +0 -212
  786. package/scripts/_dbg-plugin-panels-ui.mjs +0 -54
  787. package/scripts/_dbg-plugin-sink-rest.mjs +0 -70
  788. package/scripts/_dbg-plugin-sink-ui.mjs +0 -81
  789. package/scripts/_dbg-plugin-tools-inject.ts +0 -80
  790. package/scripts/_dbg-plugin-ui-wizard.mjs +0 -125
  791. package/scripts/_dbg-plugin-verify-e2e.mjs +0 -123
  792. package/scripts/_dbg-plugins-e2e.mjs +0 -101
  793. package/scripts/_dbg-pop-clamp-verify.mjs +0 -77
  794. package/scripts/_dbg-preset-e2e.mjs +0 -116
  795. package/scripts/_dbg-preview-console.mjs +0 -28
  796. package/scripts/_dbg-preview-minrepro.mjs +0 -156
  797. package/scripts/_dbg-preview-pixels.mjs +0 -93
  798. package/scripts/_dbg-prompts-hotreload-test.ts +0 -76
  799. package/scripts/_dbg-prompts-resolve-test.ts +0 -39
  800. package/scripts/_dbg-quality-pages-e2e.mjs +0 -84
  801. package/scripts/_dbg-query-cancel.ts +0 -12
  802. package/scripts/_dbg-qwen-acp-probe.mjs +0 -30
  803. package/scripts/_dbg-qwen-capture.mjs +0 -21
  804. package/scripts/_dbg-rail-tree-e2e.mjs +0 -183
  805. package/scripts/_dbg-real-driver-e2e.mjs +0 -55
  806. package/scripts/_dbg-redesign-shots.mjs +0 -34
  807. package/scripts/_dbg-registry-smoke.ts +0 -14
  808. package/scripts/_dbg-release-smoke.mjs +0 -104
  809. package/scripts/_dbg-repo-setup-verify.mjs +0 -31
  810. package/scripts/_dbg-resolve-probe.ts +0 -6
  811. package/scripts/_dbg-restart-persist.mjs +0 -41
  812. package/scripts/_dbg-retention-test.ts +0 -25
  813. package/scripts/_dbg-rollback-mgr-audit.mjs +0 -169
  814. package/scripts/_dbg-rpg.mjs +0 -71
  815. package/scripts/_dbg-sc001-dispatch.mjs +0 -63
  816. package/scripts/_dbg-scenario-final-shot.mjs +0 -24
  817. package/scripts/_dbg-scenario-phase-e2.mjs +0 -75
  818. package/scripts/_dbg-scenario-phase-e3.mjs +0 -96
  819. package/scripts/_dbg-scenario-phase1.mjs +0 -90
  820. package/scripts/_dbg-scenario-phase2.mjs +0 -105
  821. package/scripts/_dbg-scenario-phase3-monitor.mjs +0 -48
  822. package/scripts/_dbg-scenario-phase3.mjs +0 -111
  823. package/scripts/_dbg-scene-polish-shot.mjs +0 -118
  824. package/scripts/_dbg-selring-probe.mjs +0 -47
  825. package/scripts/_dbg-settings-draft-probe.mjs +0 -39
  826. package/scripts/_dbg-settings-probe.mjs +0 -33
  827. package/scripts/_dbg-setup-e2e.mjs +0 -88
  828. package/scripts/_dbg-sideinfo.mjs +0 -101
  829. package/scripts/_dbg-sim-keeper.mjs +0 -100
  830. package/scripts/_dbg-splitter.mjs +0 -88
  831. package/scripts/_dbg-swatch-check.mjs +0 -10
  832. package/scripts/_dbg-task-cancel-probe.mjs +0 -66
  833. package/scripts/_dbg-team-drill.mjs +0 -173
  834. package/scripts/_dbg-town-alarm-e2e.mjs +0 -40
  835. package/scripts/_dbg-town-beauty-shots.mjs +0 -54
  836. package/scripts/_dbg-town-daq-shot.mjs +0 -26
  837. package/scripts/_dbg-town-full-e2e.mjs +0 -104
  838. package/scripts/_dbg-town-gate.mjs +0 -44
  839. package/scripts/_dbg-town-ins-probe.mjs +0 -37
  840. package/scripts/_dbg-town-perf.mjs +0 -50
  841. package/scripts/_dbg-town-polish-shots.mjs +0 -82
  842. package/scripts/_dbg-town-realtime.mjs +0 -42
  843. package/scripts/_dbg-town-shot.py +0 -25
  844. package/scripts/_dbg-town-shot3.mjs +0 -17
  845. package/scripts/_dbg-town-truth.mjs +0 -37
  846. package/scripts/_dbg-town-truth2.mjs +0 -27
  847. package/scripts/_dbg-transform-audit.mjs +0 -98
  848. package/scripts/_dbg-trend-expand-test.mjs +0 -38
  849. package/scripts/_dbg-twindaq-focus.mjs +0 -81
  850. package/scripts/_dbg-ui-polish-shot.mjs +0 -43
  851. package/scripts/_dbg-ui-polish-verify1.mjs +0 -92
  852. package/scripts/_dbg-ui-polish-verify2.mjs +0 -50
  853. package/scripts/_dbg-ui-polish-verify3.mjs +0 -51
  854. package/scripts/_dbg-ui-polish-verify4.mjs +0 -50
  855. package/scripts/_dbg-ui-shot.mjs +0 -26
  856. package/scripts/_dbg-ui-shots.mjs +0 -28
  857. package/scripts/_dbg-ui-survey.py +0 -52
  858. package/scripts/_dbg-unify-shot.mjs +0 -43
  859. package/scripts/_dbg-uplink-probe.mjs +0 -36
  860. package/scripts/_dbg-wizard-preview-shot.mjs +0 -58
  861. package/scripts/_dbg-wizard-ui-e2e.mjs +0 -93
  862. package/scripts/_dbg-ws-probe.mjs +0 -86
  863. package/scripts/_dbg-ws-shot2.mjs +0 -23
  864. package/scripts/_dbg-wsdot-sanity.mjs +0 -25
  865. package/scripts/_dev-stack.mjs +0 -46
  866. package/scripts/_http-driver-probe.mjs +0 -30
  867. package/scripts/_mqtt-driver-probe.mjs +0 -30
  868. package/scripts/_newdriver-rest-probe.mjs +0 -100
  869. package/scripts/_node-state-probe.mjs +0 -5
  870. package/scripts/_opcua-driver-probe.mjs +0 -31
  871. package/scripts/_rtu-debug.mjs +0 -41
  872. package/scripts/_rtu-direct.mjs +0 -6
  873. package/scripts/_rtu-driver-probe.mjs +0 -53
  874. package/scripts/_spike-pitui.mjs +0 -116
  875. package/scripts/_tmp-args-probe.mjs +0 -20
  876. package/scripts/_tmp-cyc-entry.mjs +0 -8
  877. package/scripts/_tmp-cyc-main.mjs +0 -5
  878. package/scripts/_tmp-cyc-mod.mjs +0 -2
  879. package/scripts/_tmp-cycle-a.mjs +0 -6
  880. package/scripts/_tmp-cycle-b.mjs +0 -2
  881. package/scripts/_tmp-cycle-probe.mjs +0 -4
  882. package/scripts/_tmp-entry-variant.mjs +0 -2
  883. package/scripts/_tmp-help-probe.mjs +0 -19
  884. package/scripts/_tmp-help-probe2.mjs +0 -2
  885. package/scripts/_tmp-trace-preload.mjs +0 -1
  886. package/scripts/_wizard-shots.mjs +0 -90
  887. package/scripts/acceptance-suite.py +0 -207
  888. package/scripts/aml-agent-bridge.ts +0 -230
  889. package/scripts/aml-industrial-loop.ts +0 -232
  890. package/scripts/build-film-devices.mjs +0 -227
  891. package/scripts/collab-live-test.py +0 -177
  892. package/scripts/debug-mcp-http.ts +0 -64
  893. package/scripts/demo-lead-worker.ts +0 -256
  894. package/scripts/demo-modes.ts +0 -415
  895. package/scripts/demo-omp-channel.ts +0 -135
  896. package/scripts/design-preflight.mjs +0 -223
  897. package/scripts/design-verify-templates.mjs +0 -110
  898. package/scripts/design-verify.mjs +0 -170
  899. package/scripts/dev-window.cmd +0 -6
  900. package/scripts/device-line-restore.mjs +0 -34
  901. package/scripts/diag-lead-status.ts +0 -101
  902. package/scripts/e2e-a2a-steer-live.mjs +0 -193
  903. package/scripts/e2e-dual-drive-comm.ts +0 -259
  904. package/scripts/e2e-full-scenario.ts +0 -321
  905. package/scripts/e2e-harness-consistency.ts +0 -204
  906. package/scripts/e2e-harness-provider-task.mjs +0 -126
  907. package/scripts/e2e-line-live.mjs +0 -144
  908. package/scripts/e2e-memory-persistence.ts +0 -320
  909. package/scripts/e2e-omp-modes.ts +0 -274
  910. package/scripts/e2e-omp-realtime.ts +0 -258
  911. package/scripts/e2e-plc-scenario.mjs +0 -292
  912. package/scripts/e2e-real-scenario.mjs +0 -466
  913. package/scripts/e2e-tab-close.mjs +0 -136
  914. package/scripts/e2e-token-ui.mjs +0 -149
  915. package/scripts/final-soup-run.py +0 -192
  916. package/scripts/final-soup-watch.py +0 -83
  917. package/scripts/i18n-codemod.mjs +0 -173
  918. package/scripts/i18n-fix-en.py +0 -28
  919. package/scripts/i18n-fix-en2.py +0 -31
  920. package/scripts/i18n-merge.mjs +0 -191
  921. package/scripts/migrate-local-time.mjs +0 -123
  922. package/scripts/omp-real-test.py +0 -328
  923. package/scripts/team-plugins-api-smoke.mjs +0 -149
  924. package/scripts/test-a2a-relay.mjs +0 -222
  925. package/scripts/test-aml-integration.ts +0 -159
  926. package/scripts/test-aml-job.ts +0 -174
  927. package/scripts/test-aml-unit.ts +0 -184
  928. package/scripts/test-api-client.ts +0 -108
  929. package/scripts/test-api-suite.mjs +0 -271
  930. package/scripts/test-block-consumption.mjs +0 -194
  931. package/scripts/test-cmd-render.mjs +0 -218
  932. package/scripts/test-collab-omp.mjs +0 -192
  933. package/scripts/test-config-precedence.ts +0 -124
  934. package/scripts/test-context-governor.ts +0 -176
  935. package/scripts/test-daq-frames.ts +0 -180
  936. package/scripts/test-daq-minio.ts +0 -77
  937. package/scripts/test-dedup-logic.ts +0 -132
  938. package/scripts/test-e2e-collaboration.ts +0 -262
  939. package/scripts/test-e2e-monitor.ts +0 -192
  940. package/scripts/test-event-history.ts +0 -112
  941. package/scripts/test-exec-modes.ts +0 -316
  942. package/scripts/test-fifo-realtime.mjs +0 -193
  943. package/scripts/test-final-e2e.mjs +0 -290
  944. package/scripts/test-goal-summary.ts +0 -202
  945. package/scripts/test-harness-liveness.ts +0 -109
  946. package/scripts/test-harness-terminal.ts +0 -164
  947. package/scripts/test-header-trail.mjs +0 -95
  948. package/scripts/test-hitl.ts +0 -360
  949. package/scripts/test-koda-restyle.mjs +0 -105
  950. package/scripts/test-lane-raw.ts +0 -67
  951. package/scripts/test-lanes-history-render.mjs +0 -138
  952. package/scripts/test-loop-omp.mjs +0 -154
  953. package/scripts/test-mdlite.ts +0 -53
  954. package/scripts/test-memory-brief-chronicle.ts +0 -180
  955. package/scripts/test-memory-rrf-mmr.ts +0 -114
  956. package/scripts/test-mock-collab.mjs +0 -226
  957. package/scripts/test-modern-render.mjs +0 -174
  958. package/scripts/test-omp-terminal.mjs +0 -187
  959. package/scripts/test-plugin-ext.ts +0 -173
  960. package/scripts/test-prompts-loader.ts +0 -56
  961. package/scripts/test-real-scenario.mjs +0 -290
  962. package/scripts/test-stream-render.ts +0 -37
  963. package/scripts/test-task-drawer.mjs +0 -204
  964. package/scripts/test-task-invariants.mjs +0 -169
  965. package/scripts/test-town-3d.mjs +0 -121
  966. package/scripts/test-town-layout.mjs +0 -200
  967. package/scripts/test-town-page.mjs +0 -136
  968. package/scripts/test-town-scene-math.ts +0 -169
  969. package/scripts/test-town-twin.mjs +0 -121
  970. package/scripts/test-town-upload.mjs +0 -89
  971. package/scripts/test-town-user-flow.mjs +0 -619
  972. package/scripts/test-town-world.mjs +0 -76
  973. package/scripts/test-town-wuwa.mjs +0 -198
  974. package/scripts/test-user-isolation.mjs +0 -193
  975. package/scripts/test-workshop-entries.ts +0 -370
  976. package/scripts/test-workspace-api.ts +0 -329
  977. package/scripts/test-ws-aep.mjs +0 -187
  978. package/scripts/test-ws-protocol.ts +0 -134
  979. package/scripts/town-demo-seed.mjs +0 -75
  980. package/scripts/town-scene-clear.mjs +0 -56
  981. package/scripts/verify-exec-modes-report.ts +0 -248
  982. package/scripts/verify-lead-mail.ts +0 -188
  983. package/scripts/verify-page-smoke.mjs +0 -87
  984. package/scripts/ws-test.mjs +0 -176
  985. package/scripts/ws-test.py +0 -4
@@ -1 +0,0 @@
1
- x
@@ -1,3 +0,0 @@
1
- # 自定义指令目录
2
-
3
- 导出 { meta, run } 的 .mjs 文件放入本目录即自动注册。
@@ -1,12 +0,0 @@
1
- // scratch audit command (registration target experiment)
2
- export const meta = {
3
- name: 'hello-audit',
4
- group: 'audit',
5
- summary: 'hello from audit scratch',
6
- needsProject: false,
7
- }
8
-
9
- export async function run() {
10
- console.log('hello-audit ok')
11
- return 0
12
- }
@@ -1,20 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, rmSync } from 'node:fs'
2
-
3
- const target = new URL('./.tmp/server/', import.meta.url)
4
- console.log('[diag] entry file url =', import.meta.url)
5
- console.log('[diag] rm target =', target.href)
6
- console.log('[diag] before rm exists =', existsSync(target))
7
- rmSync(target, { recursive: true, force: true })
8
- console.log('[diag] after rm exists =', existsSync(target))
9
- mkdirSync(new URL('./.tmp/server/data/', import.meta.url), { recursive: true })
10
-
11
- const chdirTo = new URL('./.tmp/', import.meta.url).pathname.replace(/^\//, '')
12
- console.log('[diag] chdir target =', chdirTo)
13
- process.chdir(chdirTo)
14
- console.log('[diag] cwd =', process.cwd())
15
- console.log('[diag] cwd contents =', readdirSync(process.cwd()))
16
-
17
- const mod = await import('../../server/services/workshop/dcw/recipe-rollback.repo')
18
- const repo = new mod.RecipeRollBackRepo()
19
- console.log('[diag] ledger stats =', JSON.stringify(repo.stats()))
20
- console.log('[diag] data dir contents =', readdirSync(new URL('./.tmp/server/data/', import.meta.url)))
@@ -1,19 +0,0 @@
1
- import { existsSync, readdirSync, statSync } from 'node:fs'
2
- import path from 'node:path'
3
-
4
- process.chdir(new URL('./.tmp/', import.meta.url).pathname.replace(/^\//, ''))
5
- console.log('[diag2] cwd =', process.cwd())
6
- console.log('[diag2] dir listing =', readdirSync(path.join(process.cwd(), 'server', 'data')))
7
- const guess = path.join(process.cwd(), 'server', 'data', 'dcw-rollback.json')
8
- console.log('[diag2] guessed ROLLBACK_PATH exists =', existsSync(guess))
9
-
10
- const mod = await import('../../server/services/workshop/dcw/recipe-rollback.repo')
11
- const repo = new mod.RecipeRollBackRepo()
12
- const first = repo.listAnchors({ limit: 2 })
13
- const last = repo.listAnchors({ limit: 2 })
14
- console.log('[diag2] stats =', JSON.stringify(repo.stats()))
15
- console.log('[diag2] first anchors =', JSON.stringify(first.map(a => ({ id: a.id, at: a.at, node: a.nodeId }))))
16
- console.log('[diag2] exists after import =', existsSync(guess), existsSync(guess) ? statSync(guess).size : 0)
17
- console.log('[diag2] dir listing after import =', readdirSync(path.join(process.cwd(), 'server', 'data')))
18
- const repo2 = new mod.RecipeRollBackRepo()
19
- console.log('[diag2] second instance stats =', JSON.stringify(repo2.stats()))
@@ -1,12 +0,0 @@
1
- // scratch audit command (registration target experiment)
2
- export const meta = {
3
- name: 'hello-audit',
4
- group: 'audit',
5
- summary: 'hello from audit scratch',
6
- needsProject: false,
7
- }
8
-
9
- export async function run() {
10
- console.log('hello-audit ok')
11
- return 0
12
- }
@@ -1,77 +0,0 @@
1
- /**
2
- * Audit repro (read-only w.r.t. product source).
3
- *
4
- * Sandbox blocks `spawn()` with piped stdio (EPERM on named pipes), so this drives the
5
- * accumulation loop with a synthetic EventEmitter instead of a real child: it delivers
6
- * the SAME chunk sequence the OS pipe delivers when one logical NDJSON line exceeds the
7
- * pipe read size (64 KiB) — i.e. a JSON object split across two `data` events.
8
- *
9
- * Logic under test is copied verbatim from
10
- * server/services/workshop/agents/adapters/one-shot-cli-agent.ts:404-428
11
- * and the correct reference from
12
- * server/services/workshop/agents/adapters/stdio-jsonrpc.ts:234-252
13
- */
14
- import { EventEmitter } from 'node:events'
15
-
16
- const tryParse = (line) => { try { return JSON.parse(line) } catch { return null } }
17
-
18
- /** 2 chunks of one NDJSON stream; chunk #1 ends mid-JSON-object. */
19
- const CHUNKS = [
20
- '{"type":"message","role":"assistant","content":"hello wor',
21
- 'ld"}\n{"type":"result","usage":{"input_tokens":42}}\n',
22
- ]
23
-
24
- function feed(onData) {
25
- const s = new EventEmitter()
26
- s.setEncoding = () => {}
27
- const p = new Promise((r) => s.on('end', r))
28
- onData(s)
29
- queueMicrotask(() => {
30
- for (const c of CHUNKS) s.emit('data', c)
31
- s.emit('end')
32
- })
33
- return p
34
- }
35
-
36
- // ---- A. verbatim copy of one-shot-cli-agent.ts:404-428 (plainTextStdout !== true) ----
37
- const aFrames = []
38
- const aDeltas = []
39
- const aDrops = []
40
- await feed((s) => {
41
- s.on('data', (chunk) => {
42
- for (const rawLine of chunk.split(/\r?\n/)) {
43
- const line = rawLine.trim()
44
- if (!line) continue
45
- const json = tryParse(line)
46
- if (json === null) {
47
- aDrops.push(line)
48
- continue
49
- }
50
- aFrames.push(json.type)
51
- if (json.type === 'message') aDeltas.push(json.content)
52
- }
53
- })
54
- })
55
-
56
- // ---- B. verbatim copy of stdio-jsonrpc.ts:234-252 (buffered) ----
57
- const bFrames = []
58
- let buf = ''
59
- await feed((s) => {
60
- s.on('data', (data) => {
61
- buf += data
62
- const lines = buf.split('\n')
63
- buf = lines.pop() ?? ''
64
- for (const line of lines) {
65
- const trimmed = line.trim()
66
- if (!trimmed) continue
67
- const json = tryParse(trimmed)
68
- if (json === null) continue
69
- bFrames.push(json.type)
70
- }
71
- })
72
- })
73
-
74
- console.log('A one-shot-cli-agent.ts loop : frames=%d %j drops=%d %j assistantText=%j',
75
- aFrames.length, aFrames, aDrops.length, aDrops, aDeltas.join(''))
76
- console.log('B stdio-jsonrpc.ts loop : frames=%d %j', bFrames.length, bFrames)
77
- console.log('VERDICT: one-shot loses %d/%d frames and the entire assistant message.', 2 - aFrames.length, 2)
@@ -1,20 +0,0 @@
1
- /**
2
- * Audit repro: `await` binds tighter than `?:`, so the expression at
3
- * server/services/workshop/agents/opencode-agent.ts:805-808 yields a Promise, never the
4
- * resolved session object.
5
- */
6
- const DEFAULT_PERMISSION = [{ permission: 'edit' }]
7
-
8
- const api = async (path, body) => ({ id: 'ses_real', echo: body })
9
- const createWith = (extra) => api('/session', { ...extra })
10
-
11
- const created = await (DEFAULT_PERMISSION) // <- `await` applies ONLY to the condition
12
- ? createWith({ permission: DEFAULT_PERMISSION }).catch(() => createWith(undefined))
13
- : createWith(undefined)
14
-
15
- console.log('typeof created =', typeof created)
16
- console.log('created instanceof Promise=', created instanceof Promise)
17
- console.log('created?.id =', created?.id)
18
- const sessionId = String(created?.id ?? '')
19
- console.log('this.sessionId =', JSON.stringify(sessionId))
20
- console.log('if (!this.sessionId) =', !sessionId, '-> enters 3x retry loop, then throws')
@@ -1,84 +0,0 @@
1
- - **Evidence**: the PATCH authenticates and then mutates by **row id** with no ownership, line, or role check 鈥?no `lineMode`, no verification that the binding belongs to a channel the caller can see:
2
-
3
- ```ts
4
- // bindings/[id].patch.ts:9-14
5
- export default defineApiHandler(async (event) => {
6
- resolveUser(event)
7
- const id = getRouterParam(event, 'id')!
8
- const body = await readBody<{ mode?: 'auto' | 'manual' }>(event) ?? {}
9
- return { binding: getAgentNodeBindingRepo().setMode(id, body.mode ?? 'auto') }
10
- })
11
- ```
12
-
13
- The DELETE is the same, and it additionally force-denies the target agent's in-flight approval:
14
-
15
- ```ts
16
- // bindings/[id].delete.ts:10-20
17
- export default defineApiHandler(async (event) => {
18
- resolveUser(event)
19
- const id = getRouterParam(event, 'id')!
20
- const repo = getAgentNodeBindingRepo()
21
- const all = repo.all()
22
- const binding = all.find(b => b.id === id)
23
- if (!binding) throw createError({ statusCode: 404, statusMessage: 'binding not found' })
24
- if (!repo.unbind(id)) throw createError({ statusCode: 404, statusMessage: 'binding not found' })
25
- // 瑙g粦鍗冲け鏁?璇?Agent 瀵硅鑺傜偣鐨勬寕璧峰鎵规寜鎷掔粷鏀舵暃(tool result 娉ㄦ槑鍘熷洜)
26
- getToolApprovals().cancelPendingFor(binding.agentId, binding.nodeId)
27
- return { ok: true }
28
- })
29
- ```
30
-
31
- Note the contrast with the **create** path, which *does* check the line:
32
- `bindings/index.post.ts:28-32` `const mode = lineMode(user, lineId); if (mode === 'none' || (needOperate && mode !== 'operate')) throw new AppError(403, 'LINE_FORBIDDEN', 鈥?`.
33
-
34
- - **Impact**: the entire manual-approval safety model is one unauthenticated-by-ownership PATCH away from being disabled.
35
- Any authenticated user who learns a binding id 鈥?and ids are enumerable for free, see the next finding 鈥?can flip a
36
- `dcw` binding from `manual` to `auto`, permanently removing human approval for that agent/node pair (the tool then takes
37
- the `binding.mode === 'manual'` branch at `industrial-tools.ts:128` as false and writes immediately at `:157`). The
38
- DELETE variant is worse in effect: it unbinds a *victim's* agent and cancels that agent's **pending approvals**
39
- (`cancelPendingFor` 鈫?`tool-approvals.ts:112-127` resolves them as `denied` with `'缁戝畾宸茶В闄?瀹℃壒澶辨晥'`), so an
40
- attacker can silently veto a write an operator was about to authorise, and the audit trail blames a binding change.
41
-
42
- - **Fix**: in both handlers resolve the binding first, derive its node, and enforce `requireLineMode(user, nodeLine, 'operate')`
43
- (same predicate as `bindings/index.post.ts:28-32`); additionally assert the caller owns or can read the agent's channel.
44
- Minimal version for PATCH: `const b = repo.all().find(x => x.id === id); requireLineMode(user, nodeLineOf(b), 'operate')`.
45
-
46
- - **Verification**: as a `role:'user'` with `readonly` (or no) grant on the target line,
47
- `PATCH /api/workshop/agent-tools/bindings/<id> {"mode":"auto"}` 鈫?expect 403; today it returns 200 and
48
- `GET 鈥?bindings?agentId=<victim>` shows `mode: "auto"`. Static:
49
- `rg -n "lineMode|requireLineMode|requireRole" server/api/workshop/agent-tools/bindings/\[id\].patch.ts` 鈫?0 hits today.
50
-
51
- ---
52
-
53
- ### [P0] `GET /api/workshop/agent-tools/bindings` enumerates every agent's node grants to any user
54
-
55
- - **Where**: `server/api/workshop/agent-tools/bindings/index.get.ts:9-13`
56
-
57
- - **Evidence**:
58
-
59
- ```ts
60
- // bindings/index.get.ts:12-13
61
- const agentId = typeof q.agentId === 'string' ? q.agentId : ''
62
- return { bindings: agentId ? getAgentNodeBindingRepo().byAgent(agentId) : getAgentNodeBindingRepo().all() }
63
- ```
64
-
65
- `.all()` returns the entire global binding table 鈥?`agentId`, `nodeId`, `kind`, `mode`, `id`
66
- (`node-bindings.repo.ts:22-29,48-50`) 鈥?for every agent in every channel, to **any** authenticated user with no line or
67
- ownership filter. Omitting `agentId` is the leak; supplying one is a targeted lookup.
68
-
69
- - **Impact**: this is the enumeration primitive that makes the previous two findings trivially exploitable 鈥?it hands the
70
- attacker the exact binding `id` (needed by the `[id].patch`/`[id].delete` endpoints) plus which agents control which
71
- physical nodes. It also discloses the full plant's agent鈫攁ctuator map, which is sensitive operational topology: an
72
- attacker learns which `nodeId` values are `kind:'dcw'` (writable) and which are `manual` (approval-gated) versus `auto`.
73
-
74
- - **Fix**: require `agentId`, and filter the result through `filterByLine(user, 鈥?` on the node's line (or the agent's
75
- channel ownership); only `admin`/`editor` may call it without a filter 鈥?mirroring `agents/index.get.ts:11`'s
76
- `listAgentsVisibleTo(user)` pattern.
77
-
78
- - **Verification**: as a `role:'user'` with no grants, `GET /api/workshop/agent-tools/bindings` (no query) 鈫?today returns
79
- every binding; after the fix expect 400 or an empty/filtered list.
80
- Static: `rg -n "filterByLine|lineMode|visibleLineIds" server/api/workshop/agent-tools/bindings/index.get.ts` 鈫?0 hits.
81
-
82
- ---
83
-
84
- ### [P1] Industrial GET handlers return cross-line data (no `filterByLine`)
@@ -1,45 +0,0 @@
1
- # Audit 鈥?Agent runtime integration + node-binding access control
2
-
3
- Scope: `server/services/workshop/agents/**`, `server/services/workshop/runtime/**`, `server/services/workshop/permissions.ts`,
4
- `server/api/workshop/agents/**`, `server/api/workshop/agent-tools/**`, `server/api/workshop/runtime.get.ts`, related repos.
5
- Read-only audit. Working tree unmodified. Scratch: `scripts/_audit/`.
6
-
7
- Legend: **P0** = authz hole / unsafe mutation / leak 路 **P1** = correctness/perf 路 **P2** = duplication/hygiene.
8
- `鈿燯NVERIFIED` marks a claim not personally confirmed against source.
9
-
10
- ---
11
-
12
- ## Executive summary
13
-
14
- | # | Severity | Finding | Anchor |
15
- |---|---|---|---|
16
- | 1 | **P0** | `dcw_rollback(node_id=鈥?` writes a DCW node with **no binding check** and **no HITL approval** | `industrial-tools.ts:401-420`, `recipe-rollback-manager.ts:253-279` |
17
- | 2 | **P0** | Manual-mode binding promise ("姣忔鎵ц闇€鐢ㄦ埛鎵瑰噯") is bypassed by the rollback path | `dcw-controller.ts:503-517`, `recipe-rollback-manager.ts:403-410` |
18
- | 3 | **P0** | Any authenticated dashboard user can invoke **any tool as any `agentId`** on the tool bridge (incl. arbitrary Python via `aml_job_submit`) | `agent-tools/invoke.post.ts:16-26`, `manager.ts:2746-2752`, `industrial-tools.ts:1150-1170` |
19
- | 4 | **P0** | `dcw_judge`/`dcw_rollback` accept takeover of **stale records on unbound nodes** (write path) | `industrial-tools.ts:381-383,413-416` |
20
- | 5 | **P0** | `PATCH`/`DELETE /agent-tools/bindings/:id` let any user flip any binding to `auto` (= strip HITL) or cancel another agent's pending approvals | `bindings/[id].patch.ts:9-14`, `bindings/[id].delete.ts:10-20` |
21
- | 6 | **P0** | `GET /agent-tools/bindings` (no query) returns the whole global agent鈫攏ode grant table to any user 鈥?the enumeration primitive for #5 | `bindings/index.get.ts:12-13` |
22
- | 7 | P1 | Industrial GET handlers return cross-line recipes/runs/alarms/ledgers (no `filterByLine`) | `dcw/recipes/index.get.ts:8-11`, `daq/alarms.get.ts:10-15` |
23
- | 8 | P1 | `GET /api/workshop/channels/:id` boots runtimes and mutates the messages table | `channels/[id]/index.get.ts:16`, `manager.ts:694-720` |
24
- | 9 | P1 | `GET /api/workshop/workspaces` DELETEs rows from inside a `.filter()` callback | `manager.ts:1125-1129` |
25
- | 10 | P1 | `GET /api/workshop/daq` inserts node rows and starts the 250 ms acquisition timer | `daq/index.get.ts:20-22`, `daq-controller.ts:1146-1163` |
26
- | 11 | P1 | Scheduler tick scans the channel's entire task history, every tick | `task-engine.ts:137-139`, `task.repo.ts:80` |
27
- | 12 | P1 | NDJSON partial-line handling missing in the shared base used by 13 harnesses | `one-shot-cli-agent.ts:406-428` |
28
- | 13 | P1 | `runMemoryMaintenance` still does `limit=1_000_000` + JS-filter per agent | `runtime/memory.ts:668-674` |
29
- | 14 | P1 | `reflectCounts` / `lastToolInvokeAt` / `ownerNameCache` / `nameCache` / `probeCache` / `runErrorRetries` / `idleSince` are unbounded | 搂3 |
30
- | 15 | P1 | `limit: 1_000_000` / `10_000` to fetch one memory row by id | `manager.ts:1489`, `:1552` |
31
- | 16 | P1 | `pickReceiverWorker` does one task query per candidate (N+1) | `manager.ts:1744-1757` |
32
- | 17 | P1 | Renaming/disabling a *busy* member silently has no effect (disabled workers keep working) | `manager.ts:1571-1581`, `:745-749` |
33
- | 18 | P1 | No cap on concurrent agent child processes / sessions | 搂7 |
34
- | 19 | P2 | 12+ adapters duplicate spawn/env/parse/kill/queue logic instead of declaring a spec | 搂8 |
35
- | 20 | P2 | `manager.ts` (3016 lines) mixes 16 unrelated subsystems | 搂9 |
36
- | 21 | P2 | `harness-models.opencodeCatalog` leaks temp dirs containing copied provider credentials | `harness-models.ts:133,143` |
37
-
38
- **Q1 answer (short):** the binding **is** enforced on `dcw_control` / `dcw_read` / `daq_query` / `daq_frames` / `dcw_journal` /
39
- `ops_log` / `recipe_log` / `aml_*`. It is **NOT** enforced on `dcw_rollback` and is only *partially* enforced on
40
- `dcw_judge`. Unbound agents therefore **do not** get a default-allow on `dcw_control` (good), but they **do** get one on
41
- the rollback write path (P0). There is no "no bindings 鈬?allow all" fallback anywhere.
42
-
43
- ---
44
-
45
- ### [P0] `dcw_rollback` writes any DCW node without any node-binding check
@@ -1,17 +0,0 @@
1
- // audit probe: child-lifecycle signal semantics
2
- import { runChild, signalExitCode, SHUTDOWN_GRACE_MS } from '../../cli/core/child-lifecycle.mjs'
3
-
4
- console.log('signalExitCode(SIGINT) =', signalExitCode('SIGINT'))
5
- console.log('signalExitCode(SIGTERM) =', signalExitCode('SIGTERM'))
6
- console.log('signalExitCode(SIGKILL) =', signalExitCode('SIGKILL'))
7
- console.log('signalExitCode(SIGWEIRD) =', signalExitCode('SIGWEIRD'))
8
- console.log('SHUTDOWN_GRACE_MS =', SHUTDOWN_GRACE_MS)
9
-
10
- const normal = await runChild(process.execPath, ['-e', 'process.exit(7)'], { stdio: 'inherit' })
11
- console.log('normal child exit 7 ->', normal)
12
-
13
- const selfKill = await runChild(process.execPath, ['-e', 'process.kill(process.pid, "SIGTERM")'], { stdio: 'inherit' })
14
- console.log('self-SIGTERM child ->', selfKill, '(POSIX convention would be 143)')
15
-
16
- const missing = await runChild(process.execPath, ['-e', ''], { stdio: 'inherit' })
17
- console.log('clean child ->', missing)
@@ -1,49 +0,0 @@
1
- // audit probe: SDK envelope handling — api.mjs vs client.mjs ctx.fetch (fixed document stub)
2
- import { createServer } from 'node:http'
3
- import { createPlatformClient } from '../../sdk/api.mjs'
4
-
5
- const srv = createServer((req, res) => {
6
- res.setHeader('content-type', 'application/json')
7
- if (req.url.startsWith('/api/biz-error')) {
8
- res.end(JSON.stringify({ code: 'LINE_FORBIDDEN', message: '无该产线权限', data: null }))
9
- return
10
- }
11
- if (req.url.startsWith('/api/http-500')) {
12
- res.statusCode = 500
13
- res.end(JSON.stringify({ code: 'INTERNAL_ERROR', message: '服务器内部错误', data: null }))
14
- return
15
- }
16
- res.end(JSON.stringify({ code: 0, message: 'ok', data: { hello: 'world' } }))
17
- })
18
- await new Promise(r => srv.listen(0, '127.0.0.1', r))
19
- const base = `http://127.0.0.1:${srv.address().port}`
20
-
21
- globalThis.document = {
22
- cookie: '',
23
- addEventListener() {},
24
- removeEventListener() {},
25
- createElement: () => ({ style: {}, setAttribute() {}, append() {}, addEventListener() {} }),
26
- getElementById: () => null,
27
- body: { append() {} },
28
- visibilityState: 'visible',
29
- }
30
- const { createClientContext } = await import('../../sdk/client.mjs')
31
- const cctx = createClientContext({ name: 'probe', baseUrl: base })
32
- console.log('ctx.fetch(/api/ok) ->', JSON.stringify(await cctx.fetch('/api/ok')))
33
- try {
34
- const r = await cctx.fetch('/api/biz-error')
35
- console.log(`ctx.fetch(/api/biz-error) -> NO THROW, returned ${JSON.stringify(r)} <-- business error swallowed`)
36
- }
37
- catch (err) {
38
- console.log(`ctx.fetch(/api/biz-error) -> threw: status=${err.status} code=${err.code} message=${err.message}`)
39
- }
40
- try {
41
- await cctx.fetch('/api/http-500')
42
- console.log('ctx.fetch(/api/http-500) -> NO THROW (bug)')
43
- }
44
- catch (err) {
45
- console.log(`ctx.fetch(/api/http-500) -> threw: status=${err.status} code=${err.code} hasBody=${'body' in err}`)
46
- }
47
- srv.closeAllConnections?.()
48
- await new Promise(r => srv.close(r))
49
- process.exit(0)
@@ -1,67 +0,0 @@
1
- // audit probe: packlist-equivalent check of package.json "files" vs "exports" + transitive relative imports
2
- import { readFileSync, existsSync, statSync } from 'node:fs'
3
- import { dirname, join, resolve, relative } from 'node:path'
4
-
5
- const ROOT = resolve(process.cwd())
6
- const pkg = JSON.parse(readFileSync(join(ROOT, 'package.json'), 'utf8'))
7
- const files = pkg.files ?? []
8
-
9
- const under = (rel, entry) => {
10
- const e = entry.replace(/^\.\//, '').replace(/\/$/, '')
11
- if (rel === e) return true
12
- if (rel.startsWith(`${e}/`)) return true
13
- return false
14
- }
15
- const covered = rel => files.some(f => under(rel, f))
16
- const cov = rel => covered(rel) ? 'COVERED' : '*** NOT-COVERED ***'
17
-
18
- console.log('== exports targets vs "files" whitelist ==')
19
- const targets = []
20
- for (const [key, val] of Object.entries(pkg.exports ?? {})) {
21
- for (const [cond, p] of Object.entries(val)) {
22
- if (typeof p !== 'string' || !p.startsWith('./')) continue
23
- targets.push(p.slice(2))
24
- console.log(` ${codepoint(p)} ${key} (${cond}) -> ${p.slice(2)}: ${cov(p.slice(2))}`)
25
- }
26
- }
27
- for (const [name, p] of Object.entries(pkg.bin ?? {})) {
28
- console.log(` bin ${name} -> ${p}: ${cov(p)}`)
29
- }
30
-
31
- // always included by npm regardless of "files"
32
- const always = ['package.json', 'README.md', 'README-zh.md', 'LICENSE', '.npmrc', '.gitignore']
33
- console.log('\n== named dependencies (.npmrc/.gitignore are NEVER shipped) ==')
34
- for (const f of always) console.log(` ${f}: ${existsSync(join(ROOT, f)) ? (covered(f) ? 'in files' : 'not in files (npm default rules apply)') : 'absent'}`)
35
-
36
- // transitive relative-import scan from entry points
37
- const entries = [...new Set([...targets, ...Object.values(pkg.bin ?? {})])]
38
- const seen = new Set()
39
- const missing = []
40
- const specRe = /(?:from\s*|import\s*\(\s*|import\s+)['"]([^'"]+)['"]/g
41
-
42
- function scan(rel) {
43
- if (seen.has(rel)) return
44
- seen.add(rel)
45
- const abs = join(ROOT, rel)
46
- if (!existsSync(abs) || !statSync(abs).isFile()) { missing.push(`${rel} (does not exist)`); return }
47
- if (!covered(rel)) missing.push(`${rel} (not covered by "files")`)
48
- if (!/\.(mjs|js|cjs|d\.mts|mts)$/.test(rel)) return
49
- const src = readFileSync(abs, 'utf8')
50
- for (const m of src.matchAll(specRe)) {
51
- const spec = m[1]
52
- if (spec.startsWith('node:') || spec.startsWith('@/') || !spec.startsWith('.')) continue
53
- const target = resolve(dirname(abs), spec)
54
- const relTarget = relative(ROOT, target).replace(/\\/g, '/')
55
- scan(relTarget)
56
- }
57
- }
58
-
59
- for (const e of entries) scan(e.replace(/^\.\//, ''))
60
- console.log(`\n== transitive relative-import graph: ${seen.size} files reached from ${entries.length} entry points ==`)
61
- if (missing.length) {
62
- console.log('PROBLEMS:')
63
- for (const m of [...new Set(missing)]) console.log(' ' + m)
64
- }
65
- else { console.log(' every reached file exists and is covered by "files"') }
66
-
67
- function codepoint(s) { return s.padEnd(22) }
@@ -1,47 +0,0 @@
1
- // audit probe: compare SDK createPlatformClient paths against the live server (route existence only)
2
- // A route that exists but requires auth answers 401/UNAUTHORIZED; a missing route answers 404/NOT_FOUND.
3
- const BASE = process.env.AW_PROBE_BASE ?? 'http://127.0.0.1:3001'
4
-
5
- const probes = [
6
- ['users.list', 'GET', '/api/users'],
7
- ['users.get', 'GET', '/api/users/__nonexistent__'],
8
- ['users.update(PATCH)', 'PATCH', '/api/users/__nonexistent__'],
9
- ['users.update(PUT)', 'PUT', '/api/users/__nonexistent__'],
10
- ['users.me', 'GET', '/api/users/me'],
11
- ['lines.list', 'GET', '/api/workshop/dcw/lines'],
12
- ['lines.get', 'GET', '/api/workshop/dcw/lines/__nonexistent__'],
13
- ['products.list', 'GET', '/api/workshop/dcw/products'],
14
- ['products.get', 'GET', '/api/workshop/dcw/products/__nonexistent__'],
15
- ['recipes.list', 'GET', '/api/workshop/dcw/recipes'],
16
- ['dcwNodes.list', 'GET', '/api/workshop/dcw'],
17
- ['dcwNodes.get', 'GET', '/api/workshop/dcw/__nonexistent__'],
18
- ['daqNodes.list', 'GET', '/api/workshop/daq'],
19
- ['daqNodes.get', 'GET', '/api/workshop/daq/__nonexistent__'],
20
- ['daqNodes.alarms', 'GET', '/api/workshop/daq/alarms'],
21
- ['twins.list', 'GET', '/api/workshop/device-twins'],
22
- ['twins.get', 'GET', '/api/workshop/device-twins/__nonexistent__'],
23
- ['teams.list', 'GET', '/api/workshop/teams'],
24
- ['teams.get', 'GET', '/api/workshop/teams/__nonexistent__'],
25
- ['agents.list', 'GET', '/api/workshop/agents'],
26
- ['channels.list', 'GET', '/api/workshop/channels'],
27
- ['permissions.overview', 'GET', '/api/workshop/permissions'],
28
- ['plugins.manifest', 'GET', '/api/plugins/manifest'],
29
- ['ping(=manifest)', 'GET', '/api/plugins/manifest'],
30
- ['templates.daq', 'GET', '/api/workshop/daq'],
31
- ['templates.dcw', 'GET', '/api/workshop/dcw'],
32
- ]
33
-
34
- for (const [name, method, path] of probes) {
35
- let line
36
- try {
37
- const res = await fetch(`${BASE}${path}`, { method, headers: { accept: 'application/json' } })
38
- const body = await res.json().catch(() => null)
39
- const code = body && typeof body === 'object' ? (body.code ?? '(none)') : '(non-json)'
40
- const hasTemplates = body && typeof body === 'object' && body.data && typeof body.data === 'object' && 'templates' in body.data
41
- line = `${name.padEnd(22)} ${String(method).padEnd(5)} ${path.padEnd(46)} http=${res.status} code=${String(code).slice(0, 24)} templates=${hasTemplates}`
42
- }
43
- catch (err) {
44
- line = `${name.padEnd(22)} ${String(method).padEnd(5)} ${path.padEnd(46)} FETCH-FAIL ${err.message}`
45
- }
46
- console.log(line)
47
- }
@@ -1,38 +0,0 @@
1
- // audit probe v2: distinguish "route missing" (h3 bare 404) from "route exists" (envelope JSON)
2
- const BASE = process.env.AW_PROBE_BASE ?? 'http://127.0.0.1:3001'
3
- const probes = [
4
- ['users.list ', 'GET', '/api/users'],
5
- ['users.get ', 'GET', '/api/users/__none__'],
6
- ['users.update PATCH(sdk) ', 'PATCH', '/api/users/__none__'],
7
- ['users.update PUT(server) ', 'PUT', '/api/users/__none__'],
8
- ['lines.list ', 'GET', '/api/workshop/dcw/lines'],
9
- ['lines.get ', 'GET', '/api/workshop/dcw/lines/__none__'],
10
- ['lines.update PATCH ', 'PATCH', '/api/workshop/dcw/lines/__none__'],
11
- ['products.list ', 'GET', '/api/workshop/dcw/products'],
12
- ['products.get ', 'GET', '/api/workshop/dcw/products/__none__'],
13
- ['products.update PATCH ', 'PATCH', '/api/workshop/dcw/products/__none__'],
14
- ['recipes.list ', 'GET', '/api/workshop/dcw/recipes'],
15
- ['recipes.get ', 'GET', '/api/workshop/dcw/recipes/__none__'],
16
- ['recipes.update PATCH ', 'PATCH', '/api/workshop/dcw/recipes/__none__'],
17
- ['dcwNodes.get ', 'GET', '/api/workshop/dcw/__none__'],
18
- ['daqNodes.get ', 'GET', '/api/workshop/daq/__none__'],
19
- ['twins.get ', 'GET', '/api/workshop/device-twins/__none__'],
20
- ['teams.get ', 'GET', '/api/workshop/teams/__none__'],
21
- ['agents.get ', 'GET', '/api/workshop/agents/__none__'],
22
- ['channels.list ', 'GET', '/api/workshop/channels'],
23
- ['unknown /api/workshop/nope ', 'GET', '/api/workshop/nope'],
24
- ['unknown /api/workshop/dcw/products (GET, route missing)', 'GET', '/api/workshop/dcw/products'],
25
- ]
26
-
27
- for (const [name, method, path] of probes) {
28
- try {
29
- const res = await fetch(`${BASE}${path}`, { method, headers: { accept: 'application/json' } })
30
- const text = await res.text()
31
- const kind = text === '' ? 'EMPTY-BODY(h3 bare 404/405)'
32
- : (text.trimStart().startsWith('{') ? `JSON ${text.slice(0, 72).replace(/\s+/g, ' ')}` : `RAW ${text.slice(0, 40).replace(/\s+/g, ' ')}`)
33
- console.log(`${name} ${String(method).padEnd(5)} http=${String(res.status).padEnd(3)} ct=${String(res.headers.get('content-type')).padEnd(16)} ${kind}`)
34
- }
35
- catch (err) {
36
- console.log(`${name} FETCH-FAIL ${err.message}`)
37
- }
38
- }
@@ -1,9 +0,0 @@
1
- // audit probe: does the SDK type surface resolve the way docs promise?
2
- import { createClientContext, type ClientContext } from '@/sdk/client.mjs'
3
- import type { PluginContext, PluginDef, PlatformClient } from '@/sdk/index.mjs'
4
-
5
- export const a: ClientContext | null = null
6
- export const b: PluginContext | null = null
7
- export const c: PluginDef | null = null
8
- export const d: PlatformClient | null = null
9
- export const e = createClientContext
@@ -1,6 +0,0 @@
1
- // audit probe 2: relative specifier (no alias), mirrors nuxt app compilerOptions
2
- import type { ClientContext } from '../../sdk/client.mjs'
3
- import type { PluginContext } from '../../sdk/index.mjs'
4
-
5
- export const a2: ClientContext | null = null
6
- export const b2: PluginContext | null = null
@@ -1,3 +0,0 @@
1
- // audit probe 3: phantom named export `el` (declared in client.d.mts, absent at runtime)
2
- import { el } from '../../sdk/client.mjs'
3
- export const f = el
@@ -1,3 +0,0 @@
1
- // audit probe 4: runtime exports missing from index.d.mts
2
- import { isPathInside, validatePluginSettings } from '../../sdk/index.mjs'
3
- export const g = [isPathInside, validatePluginSettings]
@@ -1,13 +0,0 @@
1
- // scratch audit command: echoes the argv the CLI dispatcher produced
2
- export const meta = {
3
- name: 'echoargs',
4
- group: 'audit',
5
- summary: 'echo parsed argv (audit scratch)',
6
- usage: 'aw echoargs [--any]',
7
- needsProject: false,
8
- }
9
-
10
- export async function run(argv, ctx) {
11
- console.log(JSON.stringify({ argv, mode: ctx.mode, root: ctx.root, cwd: ctx.cwd }))
12
- return 0
13
- }
@@ -1 +0,0 @@
1
- # scratch audit project (read-only audit harness; safe to delete)
@@ -1,30 +0,0 @@
1
- /**
2
- * 审计实验运行器(只读审计专用):
3
- * 1) **强制隔离运行数据目录**(AW_DATA_DIR/AW_MODE/AW_HOME → scripts/_audit/.tmp):
4
- * 仓库已改为 ensureDataDir()(配置根 <repo>/.AgentWorkShop/data),单纯 chdir 不再隔离,
5
- * 实验若不做这一步会把合成数据写进线上数据根(本轮审计已发生并已修复)。
6
- * 2) 注册扩展名省略解析钩子(仓库源码风格 './dcw-node' 与 '@/' 别名);
7
- * 3) 加载目标 TS 入口。
8
- * 用法:node scripts/_audit/run.mjs scripts/_audit/<entry>.ts
9
- */
10
- import { mkdirSync } from 'node:fs'
11
- import { register } from 'node:module'
12
- import { fileURLToPath, pathToFileURL } from 'node:url'
13
-
14
- const TMP = new URL('./.tmp/', import.meta.url)
15
- const TMP_DIR = fileURLToPath(TMP)
16
- mkdirSync(TMP_DIR, { recursive: true })
17
-
18
- process.env.AW_DATA_DIR = fileURLToPath(new URL('./.tmp/audit-data/', import.meta.url))
19
- process.env.AW_MODE = 'home'
20
- process.env.AW_HOME = fileURLToPath(new URL('./.tmp/awhome/', import.meta.url))
21
- mkdirSync(process.env.AW_DATA_DIR, { recursive: true })
22
- mkdirSync(process.env.AW_HOME, { recursive: true })
23
-
24
- register('./ts-resolve-hook.mjs', import.meta.url)
25
- const entry = process.argv[2]
26
- if (!entry) {
27
- console.error('usage: node scripts/_audit/run.mjs <entry.ts>')
28
- process.exit(2)
29
- }
30
- await import(pathToFileURL(entry).href)
@@ -1,24 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ESNext",
4
- "module": "preserve",
5
- "moduleResolution": "Bundler",
6
- "allowJs": true,
7
- "strict": true,
8
- "noEmit": true,
9
- "skipLibCheck": true,
10
- "verbatimModuleSyntax": true,
11
- "paths": {
12
- "@/*": [
13
- "../../*"
14
- ]
15
- },
16
- "types": []
17
- },
18
- "include": [
19
- "probe.ts",
20
- "probe2.ts",
21
- "probe3.ts",
22
- "probe4.ts"
23
- ]
24
- }