agentworkshop 0.7.33 → 0.7.37

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 (945) 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/a66fdef7-dcfd-453b-b1f6-543c7dfd98d5.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 +1568 -1043
  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-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +14 -0
  345. package/scripts/_audit/aml-layout-diag.mjs +83 -0
  346. package/scripts/_audit/bump-version.mjs +51 -0
  347. package/scripts/_audit/channel-inspect.mjs +49 -0
  348. package/scripts/_audit/cleanup-apply.mjs +89 -0
  349. package/scripts/_audit/cleanup-plan.mjs +82 -0
  350. package/scripts/_audit/contrast-check.mjs +43 -0
  351. package/scripts/_audit/dcw-unrecorded-write.ts +1 -1
  352. package/scripts/_audit/design-shots.mjs +145 -0
  353. package/scripts/_audit/docs-font-probe.mjs +68 -0
  354. package/scripts/_audit/docs-probe.mjs +107 -0
  355. package/scripts/_audit/docs-shots.mjs +171 -0
  356. package/scripts/_audit/docs-v3-verify.mjs +255 -0
  357. package/scripts/_audit/docs-vue-lint.mjs +81 -0
  358. package/scripts/_audit/docs-vue-lint2.mjs +91 -0
  359. package/scripts/_audit/exp-cost-scaling.mjs +4 -1
  360. package/scripts/_audit/exp-envelope-and-png.mjs +2 -1
  361. package/scripts/_audit/exp-sweep-fairness.mjs +4 -2
  362. package/scripts/_audit/fix-settings-count.mjs +57 -0
  363. package/scripts/_audit/glass-verify.mjs +155 -0
  364. package/scripts/_audit/hydration-diff.mjs +104 -0
  365. package/scripts/_audit/hydration-head.mjs +36 -0
  366. package/scripts/_audit/hydration-probe.mjs +59 -0
  367. package/scripts/_audit/lead-matrix-test.mjs +172 -0
  368. package/scripts/_audit/plc-agent-task.mjs +74 -0
  369. package/scripts/_audit/plc-clean-scenario.mjs +434 -0
  370. package/scripts/_audit/plc-clean-shots.mjs +161 -0
  371. package/scripts/_audit/plc-fc10-probe.mjs +30 -0
  372. package/scripts/_audit/probe-binding.mjs +114 -103
  373. package/scripts/_audit/review-fix-verify.mjs +158 -0
  374. package/scripts/_audit/seed-demo.mjs +165 -0
  375. package/scripts/_audit/town-focus-shot.mjs +129 -0
  376. package/scripts/_audit/town-reposition.mjs +85 -0
  377. package/scripts/_audit/ts-resolve-hook.mjs +57 -22
  378. package/scripts/_audit/verify-cleanup.mjs +67 -0
  379. package/scripts/_audit/verify-release-pack.mjs +82 -0
  380. package/scripts/_audit/watchdog-recovery-test.mjs +127 -0
  381. package/scripts/_dbg-audit-all-pages.mjs +43 -43
  382. package/scripts/_dbg-configroot-audit.mjs +84 -84
  383. package/scripts/_dbg-daq-intervals-func.mjs +94 -94
  384. package/scripts/_dbg-daq-rowstyle-verify.mjs +112 -112
  385. package/scripts/_dbg-groups-ui-verify.mjs +122 -122
  386. package/scripts/_dbg-harness-e2e.mjs +92 -92
  387. package/scripts/_dbg-harness-ui-e2e.py +97 -97
  388. package/scripts/_dbg-hitl-timeout-e2e.mjs +93 -93
  389. package/scripts/_dbg-multiharness-live-e2e.mjs +254 -254
  390. package/scripts/_dbg-opslog-agent-e2e.mjs +194 -191
  391. package/scripts/_dbg-opt-team-e2e.mjs +133 -133
  392. package/scripts/_dbg-recipe-e2e.mjs +176 -176
  393. package/scripts/_dbg-recipe-stale-e2e.mjs +135 -135
  394. package/scripts/_dbg-render-perf.mjs +142 -142
  395. package/scripts/_dbg-render-regression.mjs +130 -130
  396. package/scripts/_dbg-town-smoke.mjs +54 -54
  397. package/scripts/aw-start-smoke.mjs +27 -8
  398. package/scripts/check-docs-sync.mjs +367 -0
  399. package/scripts/e2e-full-closedloop.mjs +36 -18
  400. package/scripts/production-closed-loop-e2e.mjs +300 -300
  401. package/scripts/test-cli-exit.mjs +129 -21
  402. package/scripts/test-daq-frame-race.mjs +144 -96
  403. package/scripts/test-events-index.mjs +176 -0
  404. package/scripts/test-lru.mjs +34 -11
  405. package/scripts/test-memory-month-query.mjs +11 -3
  406. package/scripts/test-plugin-hardening.mjs +7 -2
  407. package/scripts/test-plugin-lifecycle.mjs +173 -0
  408. package/scripts/test-rollback-index.mjs +76 -18
  409. package/scripts/test-sdk-surface.mjs +6 -3
  410. package/sdk/client.mjs +16 -7
  411. package/sdk/context.mjs +21 -9
  412. package/sdk/examples/line-sentinel/client.mjs +13 -6
  413. package/sdk/examples/line-sentinel/index.mjs +5 -2
  414. package/sdk/examples/ops-notifier/client.mjs +3 -1
  415. package/sdk/examples/sample-insight/client.mjs +4 -2
  416. package/sdk/index.d.mts +133 -16
  417. package/sdk/index.mjs +3 -2
  418. package/sdk/lifecycle.mjs +8 -3
  419. package/server/api/workshop/agent-tools/bindings/index.post.ts +22 -7
  420. package/server/api/workshop/aml/datasets/[id].delete.ts +39 -0
  421. package/server/api/workshop/aml/datasets/[id].get.ts +31 -9
  422. package/server/api/workshop/aml/datasets/[id].patch.ts +30 -0
  423. package/server/api/workshop/aml/entities/index.get.ts +13 -0
  424. package/server/api/workshop/aml/entities/prune.post.ts +28 -0
  425. package/server/api/workshop/aml/env/index.get.ts +13 -0
  426. package/server/api/workshop/aml/env/recheck.post.ts +14 -0
  427. package/server/api/workshop/aml/env/uv.post.ts +21 -0
  428. package/server/api/workshop/aml/env/venv.post.ts +24 -0
  429. package/server/api/workshop/aml/index.get.ts +14 -1
  430. package/server/api/workshop/aml/jobs/[id].delete.ts +44 -0
  431. package/server/api/workshop/aml/models/[id].delete.ts +35 -0
  432. package/server/api/workshop/aml/models/[id].patch.ts +30 -0
  433. package/server/services/workshop/agents/agent-interface.ts +3 -0
  434. package/server/services/workshop/agents/base-agent.ts +9 -0
  435. package/server/services/workshop/agents/codex-agent.ts +743 -729
  436. package/server/services/workshop/agents/dsh-agent.ts +4 -7
  437. package/server/services/workshop/agents/opencode-agent.ts +5 -7
  438. package/server/services/workshop/aml/aml.repo.ts +18 -0
  439. package/server/services/workshop/aml/dataset-builder.ts +4 -0
  440. package/server/services/workshop/aml/entity.ts +365 -0
  441. package/server/services/workshop/aml/env-manager.ts +242 -0
  442. package/server/services/workshop/aml/job-orchestrator.ts +4 -15
  443. package/server/services/workshop/aml/model-registry.ts +6 -0
  444. package/server/services/workshop/aml/python-runtime.ts +396 -62
  445. package/server/services/workshop/aml/runtime.ts +95 -4
  446. package/server/services/workshop/daq/bus/mqtt.adapter.ts +3 -1
  447. package/server/services/workshop/daq/daq-controller.ts +95 -47
  448. package/server/services/workshop/daq/daq-node.repo.ts +0 -10
  449. package/server/services/workshop/daq/daq-runtime.ts +0 -5
  450. package/server/services/workshop/json-store.mjs +35 -2
  451. package/server/services/workshop/plugins/host.mjs +18 -12
  452. package/server/services/workshop/runtime/agent-runtime.ts +32 -3
  453. package/server/services/workshop/runtime/manager.ts +28 -1
  454. package/server/services/workshop/runtime/scheduler-loop.ts +10 -1
  455. package/server/services/workshop/settings.ts +2 -0
  456. package/shared/config/home.mjs +58 -0
  457. package/shared/config/schema.json +2 -1
  458. package/shared/lru.mjs +4 -1
  459. package/.output/public/_nuxt/-6OnbLFb.js +0 -1
  460. package/.output/public/_nuxt/-nb2uqVg.js +0 -1
  461. package/.output/public/_nuxt/4bHdIqEg.js +0 -18
  462. package/.output/public/_nuxt/6PZPfFcO.js +0 -17
  463. package/.output/public/_nuxt/BBBtwOpo.js +0 -9
  464. package/.output/public/_nuxt/BBwMH_hG.js +0 -7
  465. package/.output/public/_nuxt/BDUjyaF4.js +0 -42
  466. package/.output/public/_nuxt/BNXfwXpE.js +0 -1
  467. package/.output/public/_nuxt/BN_PdN3J.js +0 -24
  468. package/.output/public/_nuxt/BSSUlJnx2.js +0 -1
  469. package/.output/public/_nuxt/BWSE6hR6.js +0 -1
  470. package/.output/public/_nuxt/BZGNTgTQ2.js +0 -1
  471. package/.output/public/_nuxt/BZv4RFYN.js +0 -1
  472. package/.output/public/_nuxt/BcmbLh2z2.js +0 -1
  473. package/.output/public/_nuxt/BfGc7TJp.js +0 -1
  474. package/.output/public/_nuxt/BgTB6h_q.js +0 -2
  475. package/.output/public/_nuxt/BkLJA9J5.js +0 -1
  476. package/.output/public/_nuxt/Bp5luxkg2.js +0 -1
  477. package/.output/public/_nuxt/BuCHayqN.js +0 -1
  478. package/.output/public/_nuxt/BuvcLKh1.js +0 -19
  479. package/.output/public/_nuxt/C3tCneTM.js +0 -1
  480. package/.output/public/_nuxt/C77oC8yC2.js +0 -7
  481. package/.output/public/_nuxt/C9f8QMp12.js +0 -1
  482. package/.output/public/_nuxt/CKfhtOt7.js +0 -13
  483. package/.output/public/_nuxt/CQvmN-Mi.js +0 -1
  484. package/.output/public/_nuxt/CUDrOuW7.js +0 -1
  485. package/.output/public/_nuxt/CZcC-gpk.js +0 -1
  486. package/.output/public/_nuxt/CbzsPO5H.js +0 -1
  487. package/.output/public/_nuxt/CdSOrh2c.js +0 -1
  488. package/.output/public/_nuxt/Cgx818r-.js +0 -1
  489. package/.output/public/_nuxt/Cjm7VogC.js +0 -1
  490. package/.output/public/_nuxt/Cm5mDxzH.js +0 -1
  491. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  492. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  493. package/.output/public/_nuxt/Cno6kYiO2.js +0 -1
  494. package/.output/public/_nuxt/Cp6z0RN7.js +0 -1
  495. package/.output/public/_nuxt/CwqIxJGj.js +0 -2
  496. package/.output/public/_nuxt/D-Ca4BGY.js +0 -70
  497. package/.output/public/_nuxt/D0fhp-Ga.js +0 -75
  498. package/.output/public/_nuxt/D1z7i2UP.js +0 -31
  499. package/.output/public/_nuxt/DIaTPH1M.js +0 -1
  500. package/.output/public/_nuxt/DTYBfjRY.js +0 -1
  501. package/.output/public/_nuxt/DXRZPxGs.js +0 -1
  502. package/.output/public/_nuxt/DZzGarBE2.js +0 -13
  503. package/.output/public/_nuxt/DaMCzQhv.js +0 -1
  504. package/.output/public/_nuxt/DoLasgPj2.js +0 -1
  505. package/.output/public/_nuxt/DpojD719.js +0 -1
  506. package/.output/public/_nuxt/DsVcWfyR.js +0 -1
  507. package/.output/public/_nuxt/DtBu71ev.js +0 -32
  508. package/.output/public/_nuxt/Dy-mxvXY2.js +0 -1
  509. package/.output/public/_nuxt/DzuC31-i.js +0 -2
  510. package/.output/public/_nuxt/FQri3dV3.js +0 -1
  511. package/.output/public/_nuxt/ORt9oDIy2.js +0 -1
  512. package/.output/public/_nuxt/TownView.CtskuMXS.css +0 -1
  513. package/.output/public/_nuxt/VLI2Zy4t.js +0 -5
  514. package/.output/public/_nuxt/_id_.MbzdFygI.css +0 -1
  515. package/.output/public/_nuxt/_id_.hRYo-EAB.css +0 -1
  516. package/.output/public/_nuxt/_wsId_.gXMEOYgX.css +0 -1
  517. package/.output/public/_nuxt/aml.WU_bh87J.css +0 -1
  518. package/.output/public/_nuxt/arUY5dyq2.js +0 -4
  519. package/.output/public/_nuxt/builds/meta/291ef3e6-fa6a-4dee-8f46-05da1aeab815.json +0 -1
  520. package/.output/public/_nuxt/daq.Bb6l44-O.css +0 -1
  521. package/.output/public/_nuxt/dcw.rXH2fc2Z.css +0 -1
  522. package/.output/public/_nuxt/default.jNT73_hq.css +0 -1
  523. package/.output/public/_nuxt/ekuGmQ7R.js +0 -1
  524. package/.output/public/_nuxt/entry.jFrFAWuA.css +0 -1
  525. package/.output/public/_nuxt/logs.DMOM-iHe.css +0 -1
  526. package/.output/public/_nuxt/niDwBOZW.js +0 -3
  527. package/.output/public/_nuxt/pMoIO6rr.js +0 -14
  528. package/.output/public/_nuxt/pages.Cc8GX9T1.css +0 -1
  529. package/.output/public/_nuxt/plugins.wIPyfPn-.css +0 -1
  530. package/.output/public/_nuxt/rqZ-1SoP.js +0 -2
  531. package/.output/public/_nuxt/settings.BCm4NZIc.css +0 -1
  532. package/.output/public/_nuxt/town.C_DsNW0J.css +0 -1
  533. package/.output/public/_nuxt/users.DuAt_Zwf.css +0 -1
  534. package/.output/public/_nuxt/vJ4FPb-_.js +0 -1
  535. package/.output/public/_nuxt/workshop.BJg84pOK.css +0 -1
  536. package/.output/server/chunks/build/aml-uBNIppIf.mjs +0 -508
  537. package/.output/server/chunks/build/aml-uBNIppIf.mjs.map +0 -1
  538. package/.output/server/chunks/build/daq-BvihjQyW.mjs.map +0 -1
  539. package/.output/server/chunks/build/pages-C-6BRtv8.mjs.map +0 -1
  540. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -28
  541. package/scripts/_audit/.tmp/dcw-writes.json +0 -15650
  542. package/scripts/_audit/.tmp/dcws.json +0 -9033
  543. package/scripts/_audit/.tmp/pollution-backup/dcw-rollback.polluted.json +0 -470006
  544. package/scripts/_audit/.tmp/pollution-backup/dcws.polluted.json +0 -9085
  545. package/scripts/_audit/.tmp/probe-cwd.txt +0 -1
  546. package/scripts/_audit/awhome/commands/README.md +0 -3
  547. package/scripts/_audit/awhome/commands/hello.mjs +0 -12
  548. package/scripts/_audit/diag-cwd.ts +0 -20
  549. package/scripts/_audit/diag-cwd2.ts +0 -19
  550. package/scripts/_audit/hello.mjs +0 -12
  551. package/scripts/_audit/ndjson-partial-line-repro.mjs +0 -77
  552. package/scripts/_audit/opencode-await-ternary-repro.mjs +0 -20
  553. package/scripts/_audit/part-frag.txt +0 -84
  554. package/scripts/_audit/part-head.txt +0 -45
  555. package/scripts/_audit/probe-child.mjs +0 -17
  556. package/scripts/_audit/probe-envelope.mjs +0 -49
  557. package/scripts/_audit/probe-packlist.mjs +0 -67
  558. package/scripts/_audit/probe-routes.mjs +0 -47
  559. package/scripts/_audit/probe-routes2.mjs +0 -38
  560. package/scripts/_audit/probe.ts +0 -9
  561. package/scripts/_audit/probe2.ts +0 -6
  562. package/scripts/_audit/probe3.ts +0 -3
  563. package/scripts/_audit/probe4.ts +0 -3
  564. package/scripts/_audit/proj/.AgentWorkShop/commands/echoargs.mjs +0 -13
  565. package/scripts/_audit/proj/config.yml +0 -1
  566. package/scripts/_audit/run.mjs +0 -30
  567. package/scripts/_audit/tsconfig.probe.json +0 -24
  568. package/scripts/_audit/typecheck-out.txt +0 -466
  569. package/scripts/_daq-realtime-probe.mjs +0 -68
  570. package/scripts/_daq-warn-probe.mjs +0 -50
  571. package/scripts/_dbg-acc-1-setup.mjs +0 -57
  572. package/scripts/_dbg-acc-2-diag.mjs +0 -14
  573. package/scripts/_dbg-acc-2-intervals.mjs +0 -81
  574. package/scripts/_dbg-acc-3-daq.mjs +0 -48
  575. package/scripts/_dbg-acc-4-team.mjs +0 -92
  576. package/scripts/_dbg-acc-5-visual.mjs +0 -63
  577. package/scripts/_dbg-acc-5b-ws-town.mjs +0 -18
  578. package/scripts/_dbg-acc-5c-town.mjs +0 -12
  579. package/scripts/_dbg-acc-6-i18n.mjs +0 -19
  580. package/scripts/_dbg-agent-tools-audit.mjs +0 -154
  581. package/scripts/_dbg-agent-workflow-audit.mjs +0 -177
  582. package/scripts/_dbg-agents-dropdown-shot.py +0 -33
  583. package/scripts/_dbg-anim-verify.mjs +0 -81
  584. package/scripts/_dbg-app-shot.mjs +0 -48
  585. package/scripts/_dbg-autoframe.mjs +0 -103
  586. package/scripts/_dbg-availability-probe.ts +0 -11
  587. package/scripts/_dbg-beacon-final.mjs +0 -181
  588. package/scripts/_dbg-bind-bidi-e2e.mjs +0 -239
  589. package/scripts/_dbg-callout-near.mjs +0 -108
  590. package/scripts/_dbg-catalog-smoke.ts +0 -20
  591. package/scripts/_dbg-cf-line-shot.mjs +0 -18
  592. package/scripts/_dbg-chan-focus.mjs +0 -49
  593. package/scripts/_dbg-channel-plugin-ui.mjs +0 -94
  594. package/scripts/_dbg-cleanup.mjs +0 -31
  595. package/scripts/_dbg-closedloop-ui-shot.mjs +0 -61
  596. package/scripts/_dbg-codex-handshake.ts +0 -30
  597. package/scripts/_dbg-codex-probe.mjs +0 -58
  598. package/scripts/_dbg-codex-sandbox.ts +0 -58
  599. package/scripts/_dbg-codex-turn.ts +0 -65
  600. package/scripts/_dbg-collab-scenario-e2e.mjs +0 -185
  601. package/scripts/_dbg-config-smoke.ts +0 -28
  602. package/scripts/_dbg-console-audit.mjs +0 -61
  603. package/scripts/_dbg-console-probe.mjs +0 -23
  604. package/scripts/_dbg-context-inject-audit.mjs +0 -231
  605. package/scripts/_dbg-cpu-profile.mjs +0 -53
  606. package/scripts/_dbg-crash-recovery.mjs +0 -143
  607. package/scripts/_dbg-crop-shot.mjs +0 -16
  608. package/scripts/_dbg-cross-channel-e2e.mjs +0 -157
  609. package/scripts/_dbg-cross-team-visibility-e2e.mjs +0 -129
  610. package/scripts/_dbg-crush-probe.sh +0 -21
  611. package/scripts/_dbg-crush-spawn-probe.ts +0 -22
  612. package/scripts/_dbg-daq-acc-probe.mjs +0 -24
  613. package/scripts/_dbg-daq-attrib.mjs +0 -34
  614. package/scripts/_dbg-daq-bind-audit.mjs +0 -119
  615. package/scripts/_dbg-daq-cadence.mjs +0 -104
  616. package/scripts/_dbg-daq-debug.mjs +0 -22
  617. package/scripts/_dbg-daq-diag.mjs +0 -33
  618. package/scripts/_dbg-daq-e2e.mjs +0 -171
  619. package/scripts/_dbg-daq-film.mjs +0 -136
  620. package/scripts/_dbg-daq-filter-e2e.mjs +0 -109
  621. package/scripts/_dbg-daq-filter-e2e2.mjs +0 -62
  622. package/scripts/_dbg-daq-final-regression.mjs +0 -78
  623. package/scripts/_dbg-daq-frame-alarm.mjs +0 -49
  624. package/scripts/_dbg-daq-frame-ui.mjs +0 -62
  625. package/scripts/_dbg-daq-frame-ws.mjs +0 -72
  626. package/scripts/_dbg-daq-full-check.mjs +0 -179
  627. package/scripts/_dbg-daq-line-note-verify.mjs +0 -61
  628. package/scripts/_dbg-daq-linebanner-audit.mjs +0 -107
  629. package/scripts/_dbg-daq-pages-shot.mjs +0 -37
  630. package/scripts/_dbg-daq-perf.mjs +0 -61
  631. package/scripts/_dbg-daq-probe.mjs +0 -27
  632. package/scripts/_dbg-daq-recipe-e2e.mjs +0 -30
  633. package/scripts/_dbg-daq-redesign-shot.mjs +0 -88
  634. package/scripts/_dbg-daq-rows-probe.mjs +0 -26
  635. package/scripts/_dbg-daq-rowstate-e2e.mjs +0 -152
  636. package/scripts/_dbg-daq-rowstate-shot.mjs +0 -45
  637. package/scripts/_dbg-daq-rowstate-shot2.mjs +0 -38
  638. package/scripts/_dbg-daq-tpl.mjs +0 -144
  639. package/scripts/_dbg-dash-console-check.mjs +0 -49
  640. package/scripts/_dbg-dash-deep-probe.mjs +0 -61
  641. package/scripts/_dbg-dash-hitpoint.mjs +0 -44
  642. package/scripts/_dbg-dash-live-shot.mjs +0 -36
  643. package/scripts/_dbg-dash-shot.mjs +0 -21
  644. package/scripts/_dbg-dashboard-shot.mjs +0 -35
  645. package/scripts/_dbg-dcw-audit.mjs +0 -126
  646. package/scripts/_dbg-dcw-card-e2e.mjs +0 -108
  647. package/scripts/_dbg-dcw-channel-ui.mjs +0 -144
  648. package/scripts/_dbg-dcw-examples.mjs +0 -81
  649. package/scripts/_dbg-dcw-light-shot.mjs +0 -19
  650. package/scripts/_dbg-dcw-line-audit.mjs +0 -107
  651. package/scripts/_dbg-dcw-pause-tpl-audit.mjs +0 -161
  652. package/scripts/_dbg-dcw-pause-ui.mjs +0 -175
  653. package/scripts/_dbg-dcw-read-toolface.ts +0 -13
  654. package/scripts/_dbg-dcw-read-ui.mjs +0 -74
  655. package/scripts/_dbg-dcw-scene.mjs +0 -72
  656. package/scripts/_dbg-dcw-shot2.mjs +0 -14
  657. package/scripts/_dbg-dcw-twin-e2e.mjs +0 -192
  658. package/scripts/_dbg-diag-mock-loop.mjs +0 -89
  659. package/scripts/_dbg-diag-watch.mjs +0 -95
  660. package/scripts/_dbg-docs-site-shot.mjs +0 -32
  661. package/scripts/_dbg-dsh-probe.mjs +0 -31
  662. package/scripts/_dbg-dt-interact.mjs +0 -193
  663. package/scripts/_dbg-error-probe.mjs +0 -54
  664. package/scripts/_dbg-filter-light-verify.mjs +0 -54
  665. package/scripts/_dbg-final-acceptance-2.mjs +0 -72
  666. package/scripts/_dbg-final-acceptance.mjs +0 -192
  667. package/scripts/_dbg-final-agent-e2e.mjs +0 -151
  668. package/scripts/_dbg-final-features.mjs +0 -155
  669. package/scripts/_dbg-final-fixups.mjs +0 -62
  670. package/scripts/_dbg-final-full-e2e.mjs +0 -218
  671. package/scripts/_dbg-final-line-e2e.mjs +0 -173
  672. package/scripts/_dbg-final-shots.mjs +0 -32
  673. package/scripts/_dbg-final-t6-hitl.mjs +0 -38
  674. package/scripts/_dbg-final-visual.mjs +0 -29
  675. package/scripts/_dbg-fix-unused-imports.py +0 -41
  676. package/scripts/_dbg-focus-range.mjs +0 -115
  677. package/scripts/_dbg-fresh-scene-e2e.mjs +0 -125
  678. package/scripts/_dbg-fullchain-e2e.mjs +0 -178
  679. package/scripts/_dbg-gate-debug.mjs +0 -37
  680. package/scripts/_dbg-gif-encode.mjs +0 -111
  681. package/scripts/_dbg-gizmo.mjs +0 -95
  682. package/scripts/_dbg-glass-probe.mjs +0 -57
  683. package/scripts/_dbg-glass-shot.mjs +0 -50
  684. package/scripts/_dbg-glass-sweep.mjs +0 -25
  685. package/scripts/_dbg-glb-probe.mjs +0 -43
  686. package/scripts/_dbg-goose-probe.mjs +0 -33
  687. package/scripts/_dbg-goose-probe.sh +0 -10
  688. package/scripts/_dbg-hardening-probe.mjs +0 -90
  689. package/scripts/_dbg-harness-ui-dbg.py +0 -49
  690. package/scripts/_dbg-harness-ui-shot.py +0 -109
  691. package/scripts/_dbg-hero-btn-probe.mjs +0 -21
  692. package/scripts/_dbg-hidden-check.mjs +0 -21
  693. package/scripts/_dbg-hmi-audit.mjs +0 -164
  694. package/scripts/_dbg-home-repro.mjs +0 -24
  695. package/scripts/_dbg-home-stack.mjs +0 -13
  696. package/scripts/_dbg-host.mjs +0 -16
  697. package/scripts/_dbg-huashu-survey.mjs +0 -31
  698. package/scripts/_dbg-huashu-survey2.mjs +0 -35
  699. package/scripts/_dbg-huashu-verify.mjs +0 -25
  700. package/scripts/_dbg-huashu-verify2.mjs +0 -26
  701. package/scripts/_dbg-hydration-detail.mjs +0 -18
  702. package/scripts/_dbg-i18n-debug.mjs +0 -27
  703. package/scripts/_dbg-i18n-debug2.mjs +0 -26
  704. package/scripts/_dbg-i18n-final.mjs +0 -42
  705. package/scripts/_dbg-i18n-scan.mjs +0 -38
  706. package/scripts/_dbg-infra-lifecycle.mjs +0 -44
  707. package/scripts/_dbg-interval-config.mjs +0 -156
  708. package/scripts/_dbg-interval-scenario.mjs +0 -126
  709. package/scripts/_dbg-kicker-check.mjs +0 -11
  710. package/scripts/_dbg-line-aura-shots.mjs +0 -54
  711. package/scripts/_dbg-line-control-e2e.mjs +0 -120
  712. package/scripts/_dbg-line-gate-audit.mjs +0 -108
  713. package/scripts/_dbg-line-live-e2e.mjs +0 -144
  714. package/scripts/_dbg-line-repo-test.ts +0 -10
  715. package/scripts/_dbg-line-scenario-e2e.mjs +0 -256
  716. package/scripts/_dbg-line-spawn.ts +0 -31
  717. package/scripts/_dbg-live-engine-probe.mjs +0 -80
  718. package/scripts/_dbg-login-debug.py +0 -23
  719. package/scripts/_dbg-login-e2e.mjs +0 -26
  720. package/scripts/_dbg-logs-ui-e2e.py +0 -126
  721. package/scripts/_dbg-mcp-bridge-probe.mjs +0 -147
  722. package/scripts/_dbg-modbus-latency.mjs +0 -22
  723. package/scripts/_dbg-mqtt-chain-e2e.mjs +0 -90
  724. package/scripts/_dbg-mqtt-publisher.mjs +0 -17
  725. package/scripts/_dbg-nav-rpg.mjs +0 -84
  726. package/scripts/_dbg-nav-shot.mjs +0 -28
  727. package/scripts/_dbg-nav.mjs +0 -27
  728. package/scripts/_dbg-oneshot-impl-probe.ts +0 -67
  729. package/scripts/_dbg-opencode-sse.mjs +0 -101
  730. package/scripts/_dbg-opencode-start.ts +0 -57
  731. package/scripts/_dbg-opslog-e2e.mjs +0 -121
  732. package/scripts/_dbg-opslog-shots.mjs +0 -62
  733. package/scripts/_dbg-optimization-e2e.mjs +0 -94
  734. package/scripts/_dbg-orbit.mjs +0 -58
  735. package/scripts/_dbg-overview-probe.sh +0 -31
  736. package/scripts/_dbg-panesplitter-fix-check.mjs +0 -62
  737. package/scripts/_dbg-perms-visual.mjs +0 -36
  738. package/scripts/_dbg-pg-tcp-probe.cjs +0 -27
  739. package/scripts/_dbg-phase-e3-monitor.mjs +0 -25
  740. package/scripts/_dbg-pi-spawn-probe.ts +0 -33
  741. package/scripts/_dbg-plc-agent-loop.ts +0 -102
  742. package/scripts/_dbg-plc-e2e.mjs +0 -171
  743. package/scripts/_dbg-plugin-agent-read.ts +0 -56
  744. package/scripts/_dbg-plugin-config-ui.mjs +0 -111
  745. package/scripts/_dbg-plugin-matrix.mjs +0 -212
  746. package/scripts/_dbg-plugin-panels-ui.mjs +0 -54
  747. package/scripts/_dbg-plugin-sink-rest.mjs +0 -70
  748. package/scripts/_dbg-plugin-sink-ui.mjs +0 -81
  749. package/scripts/_dbg-plugin-tools-inject.ts +0 -80
  750. package/scripts/_dbg-plugin-ui-wizard.mjs +0 -125
  751. package/scripts/_dbg-plugin-verify-e2e.mjs +0 -123
  752. package/scripts/_dbg-plugins-e2e.mjs +0 -101
  753. package/scripts/_dbg-pop-clamp-verify.mjs +0 -77
  754. package/scripts/_dbg-preset-e2e.mjs +0 -116
  755. package/scripts/_dbg-preview-console.mjs +0 -28
  756. package/scripts/_dbg-preview-minrepro.mjs +0 -156
  757. package/scripts/_dbg-preview-pixels.mjs +0 -93
  758. package/scripts/_dbg-prompts-hotreload-test.ts +0 -76
  759. package/scripts/_dbg-prompts-resolve-test.ts +0 -39
  760. package/scripts/_dbg-quality-pages-e2e.mjs +0 -84
  761. package/scripts/_dbg-query-cancel.ts +0 -12
  762. package/scripts/_dbg-qwen-acp-probe.mjs +0 -30
  763. package/scripts/_dbg-qwen-capture.mjs +0 -21
  764. package/scripts/_dbg-rail-tree-e2e.mjs +0 -183
  765. package/scripts/_dbg-real-driver-e2e.mjs +0 -55
  766. package/scripts/_dbg-redesign-shots.mjs +0 -34
  767. package/scripts/_dbg-registry-smoke.ts +0 -14
  768. package/scripts/_dbg-release-smoke.mjs +0 -104
  769. package/scripts/_dbg-repo-setup-verify.mjs +0 -31
  770. package/scripts/_dbg-resolve-probe.ts +0 -6
  771. package/scripts/_dbg-restart-persist.mjs +0 -41
  772. package/scripts/_dbg-retention-test.ts +0 -25
  773. package/scripts/_dbg-rollback-mgr-audit.mjs +0 -169
  774. package/scripts/_dbg-rpg.mjs +0 -71
  775. package/scripts/_dbg-sc001-dispatch.mjs +0 -63
  776. package/scripts/_dbg-scenario-final-shot.mjs +0 -24
  777. package/scripts/_dbg-scenario-phase-e2.mjs +0 -75
  778. package/scripts/_dbg-scenario-phase-e3.mjs +0 -96
  779. package/scripts/_dbg-scenario-phase1.mjs +0 -90
  780. package/scripts/_dbg-scenario-phase2.mjs +0 -105
  781. package/scripts/_dbg-scenario-phase3-monitor.mjs +0 -48
  782. package/scripts/_dbg-scenario-phase3.mjs +0 -111
  783. package/scripts/_dbg-scene-polish-shot.mjs +0 -118
  784. package/scripts/_dbg-selring-probe.mjs +0 -47
  785. package/scripts/_dbg-settings-draft-probe.mjs +0 -39
  786. package/scripts/_dbg-settings-probe.mjs +0 -33
  787. package/scripts/_dbg-setup-e2e.mjs +0 -88
  788. package/scripts/_dbg-sideinfo.mjs +0 -101
  789. package/scripts/_dbg-sim-keeper.mjs +0 -100
  790. package/scripts/_dbg-splitter.mjs +0 -88
  791. package/scripts/_dbg-swatch-check.mjs +0 -10
  792. package/scripts/_dbg-task-cancel-probe.mjs +0 -66
  793. package/scripts/_dbg-team-drill.mjs +0 -173
  794. package/scripts/_dbg-town-alarm-e2e.mjs +0 -40
  795. package/scripts/_dbg-town-beauty-shots.mjs +0 -54
  796. package/scripts/_dbg-town-daq-shot.mjs +0 -26
  797. package/scripts/_dbg-town-full-e2e.mjs +0 -104
  798. package/scripts/_dbg-town-gate.mjs +0 -44
  799. package/scripts/_dbg-town-ins-probe.mjs +0 -37
  800. package/scripts/_dbg-town-perf.mjs +0 -50
  801. package/scripts/_dbg-town-polish-shots.mjs +0 -82
  802. package/scripts/_dbg-town-realtime.mjs +0 -42
  803. package/scripts/_dbg-town-shot.py +0 -25
  804. package/scripts/_dbg-town-shot3.mjs +0 -17
  805. package/scripts/_dbg-town-truth.mjs +0 -37
  806. package/scripts/_dbg-town-truth2.mjs +0 -27
  807. package/scripts/_dbg-transform-audit.mjs +0 -98
  808. package/scripts/_dbg-trend-expand-test.mjs +0 -38
  809. package/scripts/_dbg-twindaq-focus.mjs +0 -81
  810. package/scripts/_dbg-ui-polish-shot.mjs +0 -43
  811. package/scripts/_dbg-ui-polish-verify1.mjs +0 -92
  812. package/scripts/_dbg-ui-polish-verify2.mjs +0 -50
  813. package/scripts/_dbg-ui-polish-verify3.mjs +0 -51
  814. package/scripts/_dbg-ui-polish-verify4.mjs +0 -50
  815. package/scripts/_dbg-ui-shot.mjs +0 -26
  816. package/scripts/_dbg-ui-shots.mjs +0 -28
  817. package/scripts/_dbg-ui-survey.py +0 -52
  818. package/scripts/_dbg-unify-shot.mjs +0 -43
  819. package/scripts/_dbg-uplink-probe.mjs +0 -36
  820. package/scripts/_dbg-wizard-preview-shot.mjs +0 -58
  821. package/scripts/_dbg-wizard-ui-e2e.mjs +0 -93
  822. package/scripts/_dbg-ws-probe.mjs +0 -86
  823. package/scripts/_dbg-ws-shot2.mjs +0 -23
  824. package/scripts/_dbg-wsdot-sanity.mjs +0 -25
  825. package/scripts/_dev-stack.mjs +0 -46
  826. package/scripts/_http-driver-probe.mjs +0 -30
  827. package/scripts/_mqtt-driver-probe.mjs +0 -30
  828. package/scripts/_newdriver-rest-probe.mjs +0 -100
  829. package/scripts/_node-state-probe.mjs +0 -5
  830. package/scripts/_opcua-driver-probe.mjs +0 -31
  831. package/scripts/_rtu-debug.mjs +0 -41
  832. package/scripts/_rtu-direct.mjs +0 -6
  833. package/scripts/_rtu-driver-probe.mjs +0 -53
  834. package/scripts/_spike-pitui.mjs +0 -116
  835. package/scripts/_tmp-args-probe.mjs +0 -20
  836. package/scripts/_tmp-cyc-entry.mjs +0 -8
  837. package/scripts/_tmp-cyc-main.mjs +0 -5
  838. package/scripts/_tmp-cyc-mod.mjs +0 -2
  839. package/scripts/_tmp-cycle-a.mjs +0 -6
  840. package/scripts/_tmp-cycle-b.mjs +0 -2
  841. package/scripts/_tmp-cycle-probe.mjs +0 -4
  842. package/scripts/_tmp-entry-variant.mjs +0 -2
  843. package/scripts/_tmp-help-probe.mjs +0 -19
  844. package/scripts/_tmp-help-probe2.mjs +0 -2
  845. package/scripts/_tmp-trace-preload.mjs +0 -1
  846. package/scripts/_wizard-shots.mjs +0 -90
  847. package/scripts/acceptance-suite.py +0 -207
  848. package/scripts/aml-agent-bridge.ts +0 -230
  849. package/scripts/aml-industrial-loop.ts +0 -232
  850. package/scripts/build-film-devices.mjs +0 -227
  851. package/scripts/collab-live-test.py +0 -177
  852. package/scripts/debug-mcp-http.ts +0 -64
  853. package/scripts/demo-lead-worker.ts +0 -256
  854. package/scripts/demo-modes.ts +0 -415
  855. package/scripts/demo-omp-channel.ts +0 -135
  856. package/scripts/design-preflight.mjs +0 -223
  857. package/scripts/design-verify-templates.mjs +0 -110
  858. package/scripts/design-verify.mjs +0 -170
  859. package/scripts/dev-window.cmd +0 -6
  860. package/scripts/device-line-restore.mjs +0 -34
  861. package/scripts/diag-lead-status.ts +0 -101
  862. package/scripts/e2e-a2a-steer-live.mjs +0 -193
  863. package/scripts/e2e-dual-drive-comm.ts +0 -259
  864. package/scripts/e2e-full-scenario.ts +0 -321
  865. package/scripts/e2e-harness-consistency.ts +0 -204
  866. package/scripts/e2e-harness-provider-task.mjs +0 -126
  867. package/scripts/e2e-line-live.mjs +0 -144
  868. package/scripts/e2e-memory-persistence.ts +0 -320
  869. package/scripts/e2e-omp-modes.ts +0 -274
  870. package/scripts/e2e-omp-realtime.ts +0 -258
  871. package/scripts/e2e-plc-scenario.mjs +0 -292
  872. package/scripts/e2e-real-scenario.mjs +0 -466
  873. package/scripts/e2e-tab-close.mjs +0 -136
  874. package/scripts/e2e-token-ui.mjs +0 -149
  875. package/scripts/final-soup-run.py +0 -192
  876. package/scripts/final-soup-watch.py +0 -83
  877. package/scripts/i18n-codemod.mjs +0 -173
  878. package/scripts/i18n-fix-en.py +0 -28
  879. package/scripts/i18n-fix-en2.py +0 -31
  880. package/scripts/i18n-merge.mjs +0 -191
  881. package/scripts/migrate-local-time.mjs +0 -123
  882. package/scripts/omp-real-test.py +0 -328
  883. package/scripts/team-plugins-api-smoke.mjs +0 -149
  884. package/scripts/test-a2a-relay.mjs +0 -222
  885. package/scripts/test-aml-integration.ts +0 -159
  886. package/scripts/test-aml-job.ts +0 -174
  887. package/scripts/test-aml-unit.ts +0 -184
  888. package/scripts/test-api-client.ts +0 -108
  889. package/scripts/test-api-suite.mjs +0 -271
  890. package/scripts/test-block-consumption.mjs +0 -194
  891. package/scripts/test-cmd-render.mjs +0 -218
  892. package/scripts/test-collab-omp.mjs +0 -192
  893. package/scripts/test-config-precedence.ts +0 -124
  894. package/scripts/test-context-governor.ts +0 -176
  895. package/scripts/test-daq-frames.ts +0 -180
  896. package/scripts/test-daq-minio.ts +0 -77
  897. package/scripts/test-dedup-logic.ts +0 -132
  898. package/scripts/test-e2e-collaboration.ts +0 -262
  899. package/scripts/test-e2e-monitor.ts +0 -192
  900. package/scripts/test-event-history.ts +0 -112
  901. package/scripts/test-exec-modes.ts +0 -316
  902. package/scripts/test-fifo-realtime.mjs +0 -193
  903. package/scripts/test-final-e2e.mjs +0 -290
  904. package/scripts/test-goal-summary.ts +0 -202
  905. package/scripts/test-harness-liveness.ts +0 -109
  906. package/scripts/test-harness-terminal.ts +0 -164
  907. package/scripts/test-header-trail.mjs +0 -95
  908. package/scripts/test-hitl.ts +0 -360
  909. package/scripts/test-koda-restyle.mjs +0 -105
  910. package/scripts/test-lane-raw.ts +0 -67
  911. package/scripts/test-lanes-history-render.mjs +0 -138
  912. package/scripts/test-loop-omp.mjs +0 -154
  913. package/scripts/test-mdlite.ts +0 -53
  914. package/scripts/test-memory-brief-chronicle.ts +0 -180
  915. package/scripts/test-memory-rrf-mmr.ts +0 -114
  916. package/scripts/test-mock-collab.mjs +0 -226
  917. package/scripts/test-modern-render.mjs +0 -174
  918. package/scripts/test-omp-terminal.mjs +0 -187
  919. package/scripts/test-plugin-ext.ts +0 -173
  920. package/scripts/test-prompts-loader.ts +0 -56
  921. package/scripts/test-real-scenario.mjs +0 -290
  922. package/scripts/test-stream-render.ts +0 -37
  923. package/scripts/test-task-drawer.mjs +0 -204
  924. package/scripts/test-task-invariants.mjs +0 -169
  925. package/scripts/test-town-3d.mjs +0 -121
  926. package/scripts/test-town-layout.mjs +0 -200
  927. package/scripts/test-town-page.mjs +0 -136
  928. package/scripts/test-town-scene-math.ts +0 -169
  929. package/scripts/test-town-twin.mjs +0 -121
  930. package/scripts/test-town-upload.mjs +0 -89
  931. package/scripts/test-town-user-flow.mjs +0 -619
  932. package/scripts/test-town-world.mjs +0 -76
  933. package/scripts/test-town-wuwa.mjs +0 -198
  934. package/scripts/test-user-isolation.mjs +0 -193
  935. package/scripts/test-workshop-entries.ts +0 -370
  936. package/scripts/test-workspace-api.ts +0 -329
  937. package/scripts/test-ws-aep.mjs +0 -187
  938. package/scripts/test-ws-protocol.ts +0 -134
  939. package/scripts/town-demo-seed.mjs +0 -75
  940. package/scripts/town-scene-clear.mjs +0 -56
  941. package/scripts/verify-exec-modes-report.ts +0 -248
  942. package/scripts/verify-lead-mail.ts +0 -188
  943. package/scripts/verify-page-smoke.mjs +0 -87
  944. package/scripts/ws-test.mjs +0 -176
  945. package/scripts/ws-test.py +0 -4
@@ -79,13 +79,10 @@ export interface DshAgentConfig {
79
79
  export class DshAgentImpl extends BaseAgentImpl implements AgentInterface {
80
80
  private readonly config: DshAgentConfig
81
81
  private agentInfo: AgentInfo | null = null
82
- private readonly bridgeCtx = {
83
- identity: { agentId: '', channelId: '', role: 'worker' as 'lead' | 'worker', name: 'agent' },
84
- state: this.toolState,
85
- getWorkspace: () => this.workspace,
86
- }
87
-
88
- private agentRole: 'lead' | 'worker' = 'worker'
82
+ // 不要重新声明 bridgeCtx / agentRole(由 BaseAgentImpl 持有)。
83
+ // 子类字段初始化器在 super() 之后执行,会用空 identity 遮蔽基类已装配好的 bridgeCtx,
84
+ // 使 host tool 桥的 agentId 恒为 '' → 按 agentId 的鉴权全部误判(节点绑定/工业工具)。
85
+ // 同理 agentRole 会被重置为 'worker',lead 身份丢失。
89
86
  private client: StdioJsonRpcClient | null = null
90
87
  private clientStarting: Promise<void> | null = null
91
88
  private sessionId: string | null = null
@@ -110,13 +110,11 @@ interface PendingHitl {
110
110
  export class OpenCodeAgentImpl extends BaseAgentImpl implements AgentInterface {
111
111
  private readonly config: OpenCodeAgentConfig
112
112
  private agentInfo: AgentInfo | null = null
113
- private readonly bridgeCtx = {
114
- identity: { agentId: '', channelId: '', role: 'worker' as 'lead' | 'worker', name: 'agent' },
115
- state: this.toolState,
116
- getWorkspace: () => this.workspace,
117
- }
118
-
119
- private agentRole: 'lead' | 'worker' = 'worker'
113
+ // 注意:不要在本类重新声明 bridgeCtx / agentRole —— 它们由 BaseAgentImpl 持有。
114
+ // 子类字段初始化器在 super() **之后**执行,会用一个空的 identity 覆盖基类已装配好的
115
+ // bridgeCtx(class field 遮蔽),导致 host tool 桥拿到的 agentId 恒为 '' ——
116
+ // 所有按 agentId 的鉴权(节点绑定/工业工具)都会误判为"未绑定"。
117
+ // 同理 agentRole 被重置为 'worker',lead 身份传不到桥里。
120
118
 
121
119
  // 服务进程与 API 面
122
120
  private child: ReturnType<typeof spawnLineProcess> | null = null
@@ -209,6 +209,10 @@ export function createAmlRepo(db: DatabaseSync) {
209
209
  remove(id: string): void {
210
210
  db.prepare('DELETE FROM aml_datasets WHERE id = ?').run(id)
211
211
  },
212
+ /** 元数据局部更新(备注;CRUD 的 U) */
213
+ updateNote(id: string, note: string): void {
214
+ db.prepare('UPDATE aml_datasets SET note = ? WHERE id = ?').run(note, id)
215
+ },
212
216
  },
213
217
 
214
218
  // ----- jobs -----
@@ -268,6 +272,14 @@ export function createAmlRepo(db: DatabaseSync) {
268
272
  requeue(id: string): void {
269
273
  jobRetryBump.run(id)
270
274
  },
275
+ remove(id: string): void {
276
+ db.prepare('DELETE FROM aml_jobs WHERE id = ?').run(id)
277
+ },
278
+ /** 删除作业时级联清实验谱系(否则实验行成为悬挂元数据) */
279
+ removeExperimentsOf(jobId: string): number {
280
+ const r = db.prepare('DELETE FROM aml_experiments WHERE job_id = ?').run(jobId)
281
+ return Number(r.changes)
282
+ },
271
283
  },
272
284
 
273
285
  // ----- experiments -----
@@ -361,6 +373,12 @@ export function createAmlRepo(db: DatabaseSync) {
361
373
  markPruned(id: string): void {
362
374
  modelPrune.run(id)
363
375
  },
376
+ remove(id: string): void {
377
+ db.prepare('DELETE FROM aml_models WHERE id = ?').run(id)
378
+ },
379
+ updateNote(id: string, note: string): void {
380
+ db.prepare('UPDATE aml_models SET note = ? WHERE id = ?').run(note, id)
381
+ },
364
382
  },
365
383
  }
366
384
  }
@@ -403,6 +403,10 @@ export async function buildDataset(spec: AmlDatasetSpec, by: { id: string, kind:
403
403
  beatMs: beat,
404
404
  }
405
405
  writeFileSync(join(dir, 'manifest.json'), JSON.stringify(manifest, null, 2))
406
+ // spec.json:取数规格随实体落盘。元数据行里本来就有 spec_json,但那是**索引**;
407
+ // 把规格同时写进实体目录,./aml 才是自描述、可整体拷贝的资产 ——
408
+ // 拷到另一台机器(或 sqlite 丢了)时,仅凭 datasets/<id>/ 仍能还原"这份数据是怎么取的"。
409
+ writeFileSync(join(dir, 'spec.json'), JSON.stringify(spec, null, 2))
406
410
 
407
411
  // 7. 统计报告(基于 train 网格序列)
408
412
  const nodeSummaries: SeriesSummary[] = []
@@ -0,0 +1,365 @@
1
+ /**
2
+ * AML 元数据 ↔ 实体 对账与实体加载。
3
+ *
4
+ * 平台是「SQLite 元数据 + 磁盘实体」两段式:
5
+ * 元数据行(aml_datasets/jobs/models)给出可检索、可分页、可鉴权的索引;
6
+ * 实体目录(<amlRoot>/{datasets,jobs,models}/<id>/)给出真正的数据(数组/工件/契约)。
7
+ *
8
+ * 两者会漂移:手工删了目录、拷了别人的 ./aml 进来、作业被中途 kill 留下半成品、
9
+ * 元数据行指向的路径被搬走。本模块提供:
10
+ * - inventory():两侧逐 id 对账,产出 missing / orphan / size 三类差异(只读);
11
+ * - loadDatasetEntity() / loadModelEntity() / loadJobEntity():按元数据行加载实体,
12
+ * 并校验契约文件齐备 —— 实际作业(预测/训练/评审)直接用它的返回值,不各自拼路径;
13
+ * - pruneOrphans():删除**孤儿实体目录**(磁盘有、元数据无),带根内越界防护。
14
+ *
15
+ * 纪律:元数据是权威索引,实体是权威内容。宁可报告"实体缺失"也不静默用空数据顶替
16
+ * (静默顶替会让预测用空权重跑出一堆看似正常的垃圾结果)。
17
+ */
18
+ import { existsSync, readFileSync, readdirSync, rmSync, statSync } from 'node:fs'
19
+ import { join } from 'node:path'
20
+ import { AppError } from '../../../utils/errors'
21
+ import { createLogger } from '../logger'
22
+ import { getAmlRuntime, isInsideAmlRoot, type AmlRuntime } from './runtime'
23
+
24
+ const log = createLogger('aml.entity')
25
+
26
+ export interface EntityIssue {
27
+ kind: 'dataset' | 'job' | 'model'
28
+ id: string
29
+ problem: 'entity_missing' | 'orphan_dir' | 'contract_missing'
30
+ path: string
31
+ detail: string
32
+ }
33
+
34
+ export interface AmlInventory {
35
+ root: string
36
+ counts: { datasets: number, jobs: number, models: number }
37
+ entities: { datasets: number, jobs: number, models: number }
38
+ issues: EntityIssue[]
39
+ ok: boolean
40
+ }
41
+
42
+ function listDirs(dir: string): string[] {
43
+ try {
44
+ return readdirSync(dir).filter((e) => {
45
+ try {
46
+ return statSync(join(dir, e)).isDirectory()
47
+ }
48
+ catch {
49
+ return false
50
+ }
51
+ })
52
+ }
53
+ catch {
54
+ return []
55
+ }
56
+ }
57
+
58
+ function fileSize(p: string): number {
59
+ const st = statSync(p, { throwIfNoEntry: false })
60
+ return st?.isFile() ? st.size : 0
61
+ }
62
+
63
+ /** 两侧逐 id 对账(只读;不修改任何东西) */
64
+ export function inventory(): AmlInventory {
65
+ const rt = getAmlRuntime()
66
+ const issues: EntityIssue[] = []
67
+ const dsRows = rt.repo.dataset.list({ limit: 100_000 })
68
+ const jobRows = rt.repo.job.list({ limit: 100_000 })
69
+ const modelRows = rt.repo.model.list({ limit: 100_000 })
70
+
71
+ const check = (
72
+ kind: EntityIssue['kind'],
73
+ rows: Array<{ id: string, path?: string }>,
74
+ baseDir: string,
75
+ contract: string[],
76
+ ): number => {
77
+ const ids = new Set(rows.map(r => r.id))
78
+ for (const r of rows) {
79
+ const dir = join(baseDir, r.id)
80
+ if (!existsSync(dir)) {
81
+ issues.push({
82
+ kind, id: r.id, problem: 'entity_missing', path: dir,
83
+ detail: `元数据存在但实体目录缺失(可能是手工删除或从别处拷贝了元数据行)`,
84
+ })
85
+ continue
86
+ }
87
+ // 契约文件允许是"多选一"(例如模型:新实体有 io_spec.json,旧实体只有 REGISTERED)
88
+ if (contract.length > 0 && !contract.some(f => existsSync(join(dir, f)))) {
89
+ issues.push({
90
+ kind, id: r.id, problem: 'contract_missing', path: join(dir, contract[0]),
91
+ detail: `实体目录存在但缺少契约文件(${contract.join(' 或 ')}):作业被中途终止或落盘不完整`,
92
+ })
93
+ }
94
+ }
95
+ let n = 0
96
+ for (const d of listDirs(baseDir)) {
97
+ n++
98
+ if (!ids.has(d)) {
99
+ issues.push({
100
+ kind, id: d, problem: 'orphan_dir', path: join(baseDir, d),
101
+ detail: '磁盘有实体目录但元数据无对应行(可安全清理)',
102
+ })
103
+ }
104
+ }
105
+ return n
106
+ }
107
+
108
+ // 契约:数据集 = manifest.json(权威,列定义/归一化/形状);
109
+ // 作业 = job.json(提交契约);模型 = REGISTERED 或 io_spec.json(新旧两种形态)
110
+ const dsEntities = check('dataset', dsRows, rt.datasetsDir, ['manifest.json'])
111
+ const jobEntities = check('job', jobRows, rt.jobsDir, ['job.json'])
112
+ const modelEntities = check('model', modelRows, rt.modelsDir, ['REGISTERED', 'io_spec.json'])
113
+
114
+ return {
115
+ root: rt.root,
116
+ counts: { datasets: dsRows.length, jobs: jobRows.length, models: modelRows.length },
117
+ entities: { datasets: dsEntities, jobs: jobEntities, models: modelEntities },
118
+ issues,
119
+ ok: issues.length === 0,
120
+ }
121
+ }
122
+
123
+ /** 实体目录大小(递归;目录缺失 = 0) */
124
+ export function entitySizeBytes(dir: string): number {
125
+ let total = 0
126
+ const walk = (d: string, depth: number) => {
127
+ if (depth > 8) return
128
+ let entries: string[]
129
+ try {
130
+ entries = readdirSync(d)
131
+ }
132
+ catch {
133
+ return
134
+ }
135
+ for (const e of entries) {
136
+ const p = join(d, e)
137
+ const st = statSync(p, { throwIfNoEntry: false })
138
+ if (!st) continue
139
+ if (st.isDirectory()) walk(p, depth + 1)
140
+ else total += st.size
141
+ }
142
+ }
143
+ walk(dir, 0)
144
+ return total
145
+ }
146
+
147
+ function readJson<T>(p: string, what: string): T {
148
+ try {
149
+ return JSON.parse(readFileSync(p, 'utf8')) as T
150
+ }
151
+ catch (err) {
152
+ throw new AppError(500, 'AML_ENTITY_CORRUPT', `${what} 读取失败(${p}):${(err as Error).message}`)
153
+ }
154
+ }
155
+
156
+ export interface DatasetEntity {
157
+ id: string
158
+ dir: string
159
+ spec: Record<string, unknown>
160
+ /** spec 是否来自实体自带的 spec.json(true)/ 回退元数据行(false,旧快照) */
161
+ specFromEntity: boolean
162
+ manifest: {
163
+ columns?: Array<{ name: string, kind?: string, count?: number }>
164
+ rowCount?: number
165
+ beatMs?: number
166
+ horizon?: number
167
+ targetColumns?: string[]
168
+ featureColumns?: string[]
169
+ [k: string]: unknown
170
+ }
171
+ report: Record<string, unknown> | null
172
+ arrays: Array<{ file: string, bytes: number }>
173
+ sizeBytes: number
174
+ }
175
+
176
+ /** 按元数据行加载数据集实体(实际训练/预览的数据入口)
177
+ *
178
+ * 契约文件:`manifest.json` 是**权威**(列定义/归一化/切分/形状),缺它无法训练;
179
+ * `spec.json` 是自描述副本(取数规格),旧快照可能没有 —— 此时回退元数据行的 specJson,
180
+ * 而不是把可用的数据集判成损坏。
181
+ */
182
+ export function loadDatasetEntity(id: string): DatasetEntity {
183
+ const rt = getAmlRuntime()
184
+ const row = rt.repo.dataset.get(id)
185
+ if (!row) throw new AppError(404, 'AML_DATASET_MISSING', `数据集 ${id} 不存在`)
186
+ const dir = join(rt.datasetsDir, id)
187
+ if (!existsSync(dir)) {
188
+ throw new AppError(410, 'AML_ENTITY_MISSING', `数据集 ${id} 的实体目录已丢失(${dir});元数据仍在。请重新构建数据集,或执行实体对账清理该元数据行。`)
189
+ }
190
+ const manifestPath = join(dir, 'manifest.json')
191
+ if (!existsSync(manifestPath)) {
192
+ throw new AppError(410, 'AML_ENTITY_CONTRACT_MISSING', `数据集 ${id} 缺少 manifest.json(权威契约,落盘不完整):${manifestPath}`)
193
+ }
194
+ const arraysDir = join(dir, 'arrays')
195
+ const arrays = existsSync(arraysDir)
196
+ ? readdirSync(arraysDir).map(f => ({ file: f, bytes: fileSize(join(arraysDir, f)) }))
197
+ : []
198
+ // spec 优先取实体自带的 spec.json(可移植),缺失回退元数据行(旧快照)
199
+ const specPath = join(dir, 'spec.json')
200
+ let spec: Record<string, unknown>
201
+ if (existsSync(specPath)) {
202
+ spec = readJson<Record<string, unknown>>(specPath, 'spec.json')
203
+ }
204
+ else {
205
+ try {
206
+ spec = JSON.parse(row.specJson || '{}') as Record<string, unknown>
207
+ }
208
+ catch {
209
+ spec = {}
210
+ }
211
+ }
212
+ return {
213
+ id,
214
+ dir,
215
+ spec,
216
+ specFromEntity: existsSync(specPath),
217
+ manifest: readJson<DatasetEntity['manifest']>(manifestPath, 'manifest.json'),
218
+ report: existsSync(join(dir, 'report.json'))
219
+ ? readJson<Record<string, unknown>>(join(dir, 'report.json'), 'report.json')
220
+ : null,
221
+ arrays,
222
+ sizeBytes: entitySizeBytes(dir),
223
+ }
224
+ }
225
+
226
+ export interface ModelEntity {
227
+ id: string
228
+ dir: string
229
+ onnxPath: string
230
+ onnxBytes: number
231
+ ioSpec: Record<string, unknown>
232
+ /** ioSpec 是否来自实体自带的 io_spec.json(true)/ 回退元数据行(false,旧模型) */
233
+ ioSpecFromEntity: boolean
234
+ metrics: Record<string, unknown>
235
+ sizeBytes: number
236
+ }
237
+
238
+ /** 按元数据行加载模型实体(预测入口;工件缺失直接报错,不用空权重蒙混)
239
+ *
240
+ * 契约:`REGISTERED` 标记或 `io_spec.json` 至少存在其一(旧模型只有 REGISTERED);
241
+ * io_spec 优先取实体自带副本,缺失回退元数据行的 io_spec_json。
242
+ */
243
+ export function loadModelEntity(id: string): ModelEntity {
244
+ const rt = getAmlRuntime()
245
+ const row = rt.repo.model.get(id)
246
+ if (!row) throw new AppError(404, 'AML_MODEL_MISSING', `模型 ${id} 不存在`)
247
+ const dir = join(rt.modelsDir, id)
248
+ if (!existsSync(dir)) {
249
+ throw new AppError(410, 'AML_ENTITY_MISSING', `模型 ${id} 的实体目录已丢失(${dir});元数据仍在。`)
250
+ }
251
+ const ioPath = join(dir, 'io_spec.json')
252
+ if (!existsSync(ioPath) && !existsSync(join(dir, 'REGISTERED'))) {
253
+ throw new AppError(410, 'AML_ENTITY_CONTRACT_MISSING', `模型 ${id} 既无 io_spec.json 也无 REGISTERED 标记(注册不完整):${dir}`)
254
+ }
255
+ let ioSpec: Record<string, unknown>
256
+ if (existsSync(ioPath)) {
257
+ ioSpec = readJson<Record<string, unknown>>(ioPath, 'io_spec.json')
258
+ }
259
+ else {
260
+ try {
261
+ ioSpec = JSON.parse(row.ioSpecJson || '{}') as Record<string, unknown>
262
+ }
263
+ catch {
264
+ ioSpec = {}
265
+ }
266
+ }
267
+ const onnxPath = join(dir, 'model.onnx')
268
+ return {
269
+ id,
270
+ dir,
271
+ onnxPath,
272
+ onnxBytes: fileSize(onnxPath),
273
+ ioSpec,
274
+ ioSpecFromEntity: existsSync(ioPath),
275
+ metrics: (() => {
276
+ try {
277
+ return JSON.parse(row.metricsJson || '{}') as Record<string, unknown>
278
+ }
279
+ catch {
280
+ return {}
281
+ }
282
+ })(),
283
+ sizeBytes: entitySizeBytes(dir),
284
+ }
285
+ }
286
+
287
+ export interface JobEntity {
288
+ id: string
289
+ dir: string
290
+ job: Record<string, unknown>
291
+ workspace: string[]
292
+ logTail: string
293
+ artifacts: Array<{ file: string, bytes: number }>
294
+ sizeBytes: number
295
+ }
296
+
297
+ /** 按元数据行加载作业实体(工作区/日志/工件;供日志查看与工件评审) */
298
+ export function loadJobEntity(id: string): JobEntity {
299
+ const rt = getAmlRuntime()
300
+ const row = rt.repo.job.get(id)
301
+ if (!row) throw new AppError(404, 'AML_JOB_MISSING', `作业 ${id} 不存在`)
302
+ const dir = join(rt.jobsDir, id)
303
+ if (!existsSync(dir)) {
304
+ throw new AppError(410, 'AML_ENTITY_MISSING', `作业 ${id} 的实体目录已丢失(${dir});元数据仍在。`)
305
+ }
306
+ const wsDir = join(dir, 'workspace')
307
+ const artDir = join(dir, 'artifacts')
308
+ const logPath = join(dir, 'run.log')
309
+ let logTail = ''
310
+ try {
311
+ if (existsSync(logPath)) logTail = readFileSync(logPath, 'utf8').slice(-4000)
312
+ }
313
+ catch { /* 日志不可读不影响其余实体 */ }
314
+ return {
315
+ id,
316
+ dir,
317
+ job: existsSync(join(dir, 'job.json'))
318
+ ? readJson<Record<string, unknown>>(join(dir, 'job.json'), 'job.json')
319
+ : { note: 'job.json 缺失(作业提交时未落盘)' },
320
+ workspace: existsSync(wsDir) ? readdirSync(wsDir) : [],
321
+ logTail,
322
+ artifacts: existsSync(artDir)
323
+ ? readdirSync(artDir).map(f => ({ file: f, bytes: fileSize(join(artDir, f)) }))
324
+ : [],
325
+ sizeBytes: entitySizeBytes(dir),
326
+ }
327
+ }
328
+
329
+ /**
330
+ * 删除实体目录(带 AML 根内越界防护)。
331
+ * 只删 <amlRoot>/{datasets,jobs,models}/<id> 形状的路径 —— 元数据里的 path 字段
332
+ * 来自历史写入,不能无条件信任(它可能是任意绝对路径)。
333
+ */
334
+ export function removeEntityDir(rt: AmlRuntime, kind: 'dataset' | 'job' | 'model', id: string): { removed: boolean, dir: string } {
335
+ const base = kind === 'dataset' ? rt.datasetsDir : kind === 'job' ? rt.jobsDir : rt.modelsDir
336
+ const dir = join(base, id)
337
+ if (!isInsideAmlRoot(rt, dir) || !dir.startsWith(base)) {
338
+ log.warn(`[aml-entity] 拒绝删除越界路径:${dir}`)
339
+ return { removed: false, dir }
340
+ }
341
+ if (!existsSync(dir)) return { removed: false, dir }
342
+ try {
343
+ rmSync(dir, { recursive: true, force: true })
344
+ return { removed: true, dir }
345
+ }
346
+ catch (err) {
347
+ throw new AppError(500, 'AML_ENTITY_DELETE_FAILED', `删除实体目录失败(${dir}):${(err as Error).message}`)
348
+ }
349
+ }
350
+
351
+ /** 清理孤儿实体目录(磁盘有、元数据无);dryRun=true 只报告不删除 */
352
+ export function pruneOrphans(dryRun = false): { removed: string[], kept: number, dryRun: boolean } {
353
+ const rt = getAmlRuntime()
354
+ const inv = inventory()
355
+ const orphans = inv.issues.filter(i => i.problem === 'orphan_dir')
356
+ const removed: string[] = []
357
+ if (!dryRun) {
358
+ for (const o of orphans) {
359
+ const r = removeEntityDir(rt, o.kind, o.id)
360
+ if (r.removed) removed.push(r.dir)
361
+ }
362
+ if (removed.length > 0) log.info(`[aml-entity] 已清理 ${removed.length} 个孤儿实体目录`)
363
+ }
364
+ return { removed, kept: inv.issues.length - orphans.length, dryRun }
365
+ }
@@ -0,0 +1,242 @@
1
+ /**
2
+ * AML 环境管理:环境自检状态 + 异步动作(一键安装 uv / 创建 .venv)。
3
+ *
4
+ * 为什么要有这层:
5
+ * - 平台第一次被使用时,用户环境里可能既没有 uv 也没有可用的 Python。
6
+ * 把「检测 → 引导 → 一键修复」收敛成一个可读的状态对象,REST/UI/工具三面共用;
7
+ * - 安装 uv 与创建 venv 都是**长耗时且有网络下载**的动作(数十秒到数分钟),
8
+ * 不能挂在同步 HTTP 请求里 —— 用进程内单任务 + 轮询进度(GET env 带 task),
9
+ * 与作业编排器的「异步 + 进度推送」纪律一致。
10
+ *
11
+ * 单任务约束:同一时刻只允许一个 env 动作(uv 安装与 venv 创建都要动同一个工具目录/
12
+ * 虚拟环境,并发只会互相破坏)。重复提交返回 409 + 当前任务状态。
13
+ */
14
+ import { readdirSync, statSync } from 'node:fs'
15
+ import { randomUUID } from 'node:crypto'
16
+ import { AppError } from '../../../utils/errors'
17
+ import { createLogger } from '../logger'
18
+ import { amlSettings } from '../settings'
19
+ import { amlRootSourceLabel, getAmlRuntime } from './runtime'
20
+ import {
21
+ ensureVenv,
22
+ installUv,
23
+ isVenvReady,
24
+ probePython,
25
+ probeUv,
26
+ requirementsHash,
27
+ resetProbeCache,
28
+ venvDir,
29
+ venvPythonPath,
30
+ type ProgressFn,
31
+ type PythonProbe,
32
+ type UvProbe,
33
+ } from './python-runtime'
34
+
35
+ const log = createLogger('aml.env')
36
+
37
+ export type AmlEnvTaskKind = 'install-uv' | 'create-venv'
38
+ export type AmlEnvTaskStatus = 'running' | 'done' | 'failed'
39
+
40
+ export interface AmlEnvTask {
41
+ id: string
42
+ kind: AmlEnvTaskKind
43
+ status: AmlEnvTaskStatus
44
+ startedAt: string
45
+ endedAt: string | null
46
+ /** 进度日志(尾部;安装输出可能很长,只保留最近 N 行) */
47
+ log: string[]
48
+ error: string | null
49
+ }
50
+
51
+ export interface AmlEnvStatus {
52
+ amlRoot: string
53
+ amlRootMode: string
54
+ amlRootSource: string
55
+ projectRoot: string | null
56
+ dirs: { datasets: string, jobs: string, models: string, venv: string, tools: string, runtime: string }
57
+ uv: UvProbe
58
+ python: PythonProbe
59
+ venv: { ready: boolean, dir: string, pythonPath: string, requirementsHash: string, sizeMb: number }
60
+ disk: { usedMb: number, quotaMb: number }
61
+ /** 一键安装 uv 是否可用(平台总能在项目内安装,恒 true;留给未来策略开关) */
62
+ canInstallUv: boolean
63
+ task: AmlEnvTask | null
64
+ /** 作业前置条件:不满足时 UI 直接给修复入口,而不是等作业失败 */
65
+ preflight: { canRunJobs: boolean, blockers: string[] }
66
+ }
67
+
68
+ const TASK_LOG_TAIL = 200
69
+
70
+ const g = globalThis as typeof globalThis & { __amlEnvTask?: AmlEnvTask }
71
+
72
+ function currentTask(): AmlEnvTask | null {
73
+ return g.__amlEnvTask ?? null
74
+ }
75
+
76
+ function pushLog(task: AmlEnvTask, line: string): void {
77
+ for (const l of line.split(/\r?\n/)) {
78
+ const t = l.trimEnd()
79
+ if (!t) continue
80
+ task.log.push(t)
81
+ }
82
+ if (task.log.length > TASK_LOG_TAIL) task.log.splice(0, task.log.length - TASK_LOG_TAIL)
83
+ }
84
+
85
+ function dirSizeMb(dir: string): number {
86
+ let total = 0
87
+ const walk = (d: string, depth: number) => {
88
+ if (depth > 6) return
89
+ let entries: string[]
90
+ try {
91
+ entries = readdirSync(d)
92
+ }
93
+ catch {
94
+ return
95
+ }
96
+ for (const e of entries) {
97
+ const p = `${d}/${e}`
98
+ const st = statSync(p, { throwIfNoEntry: false })
99
+ if (!st) continue
100
+ if (st.isDirectory()) walk(p, depth + 1)
101
+ else total += st.size
102
+ }
103
+ }
104
+ walk(dir, 0)
105
+ return total / 1024 / 1024
106
+ }
107
+
108
+ /** 组装环境自检状态(只读;不做任何写入) */
109
+ export async function envStatus(): Promise<AmlEnvStatus> {
110
+ const rt = getAmlRuntime()
111
+ const uv = await probeUv(rt)
112
+ const python = await probePython()
113
+ const venvReady = isVenvReady(rt)
114
+ const blockers: string[] = []
115
+ if (!python.ok) blockers.push(python.reason ?? 'Python 解释器不可用')
116
+ if (!venvReady) blockers.push('训练环境(./aml/.venv)尚未创建:请在「运行环境」面板点击「创建训练环境」')
117
+ let usedMb = 0
118
+ try {
119
+ usedMb = dirSizeMb(rt.root)
120
+ }
121
+ catch { /* 目录不可读按 0 */ }
122
+ return {
123
+ amlRoot: rt.root,
124
+ amlRootMode: rt.rootMode,
125
+ amlRootSource: amlRootSourceLabel(rt.rootMode),
126
+ projectRoot: rt.projectRoot,
127
+ dirs: {
128
+ datasets: rt.datasetsDir,
129
+ jobs: rt.jobsDir,
130
+ models: rt.modelsDir,
131
+ venv: venvDir(rt),
132
+ tools: rt.toolsDir,
133
+ runtime: rt.runtimeDir,
134
+ },
135
+ uv,
136
+ python,
137
+ venv: {
138
+ ready: venvReady,
139
+ dir: venvDir(rt),
140
+ pythonPath: venvPythonPath(rt),
141
+ requirementsHash: requirementsHash(),
142
+ sizeMb: Number(dirSizeMb(venvDir(rt)).toFixed(1)),
143
+ },
144
+ disk: { usedMb: Number(usedMb.toFixed(1)), quotaMb: amlQuotaMb() },
145
+ canInstallUv: true,
146
+ task: currentTask(),
147
+ preflight: { canRunJobs: python.ok && venvReady, blockers },
148
+ }
149
+ }
150
+
151
+ function amlQuotaMb(): number {
152
+ try {
153
+ return amlSettings().job.diskQuotaMb
154
+ }
155
+ catch {
156
+ return 2048
157
+ }
158
+ }
159
+
160
+ /** 启动一个 env 任务(单任务互斥);返回任务快照供 UI 立即渲染 */
161
+ function startTask(kind: AmlEnvTaskKind): AmlEnvTask {
162
+ const running = currentTask()
163
+ if (running && running.status === 'running') {
164
+ throw new AppError(409, 'AML_ENV_BUSY', `已有环境任务在执行中(${running.kind}),请等待完成后再操作`)
165
+ }
166
+ const task: AmlEnvTask = {
167
+ id: `env-${randomUUID().slice(0, 8)}`,
168
+ kind,
169
+ status: 'running',
170
+ startedAt: new Date().toISOString(),
171
+ endedAt: null,
172
+ log: [],
173
+ error: null,
174
+ }
175
+ g.__amlEnvTask = task
176
+ return task
177
+ }
178
+
179
+ function finishTask(task: AmlEnvTask, err?: unknown): void {
180
+ task.endedAt = new Date().toISOString()
181
+ if (err) {
182
+ task.status = 'failed'
183
+ task.error = err instanceof Error ? err.message : String(err)
184
+ pushLog(task, `失败:${task.error}`)
185
+ log.warn(`[aml-env] ${task.kind} 失败:`, task.error)
186
+ }
187
+ else {
188
+ task.status = 'done'
189
+ pushLog(task, '完成。')
190
+ log.info(`[aml-env] ${task.kind} 完成`)
191
+ }
192
+ }
193
+
194
+ /** 一键安装 uv(异步;立即返回任务快照,进度经 GET /aml/env 轮询) */
195
+ export function startInstallUv(): AmlEnvTask {
196
+ const rt = getAmlRuntime()
197
+ const task = startTask('install-uv')
198
+ const emit: ProgressFn = line => pushLog(task, line)
199
+ void (async () => {
200
+ try {
201
+ emit(`AML 资产根:${rt.root}`)
202
+ emit(`目标安装目录:${rt.toolsDir}(免管理员,不改系统 PATH)`)
203
+ const r = await installUv(rt, emit)
204
+ if (!r.ok) throw new AppError(500, 'AML_UV_INSTALL_FAILED', r.log.slice(-600) || 'uv 安装失败')
205
+ resetProbeCache()
206
+ finishTask(task)
207
+ }
208
+ catch (err) {
209
+ finishTask(task, err)
210
+ }
211
+ })()
212
+ return task
213
+ }
214
+
215
+ /** 创建/重建训练环境 ./aml/.venv(异步) */
216
+ export function startCreateVenv(opts: { force?: boolean } = {}): AmlEnvTask {
217
+ const rt = getAmlRuntime()
218
+ const task = startTask('create-venv')
219
+ const emit: ProgressFn = line => pushLog(task, line)
220
+ void (async () => {
221
+ try {
222
+ emit(`${opts.force ? '重建' : '创建'}训练环境:${venvDir(rt)}`)
223
+ const uv = await probeUv(rt)
224
+ emit(uv.ok
225
+ ? `使用 uv ${uv.version}(来源:${uv.source})`
226
+ : '未检测到 uv,将回退 python -m venv(建议先点「一键安装 uv」以获得更快更稳的供给)')
227
+ const vpy = await ensureVenv(rt, { force: opts.force, onLog: emit })
228
+ emit(`解释器:${vpy}`)
229
+ finishTask(task)
230
+ }
231
+ catch (err) {
232
+ finishTask(task, err)
233
+ }
234
+ })()
235
+ return task
236
+ }
237
+
238
+ /** 重新探测(用户在系统里手工装了 uv/Python 后,无需重启服务) */
239
+ export function recheck(): void {
240
+ resetProbeCache()
241
+ log.info('[aml-env] 已清空探测缓存,下次读取将重新探测')
242
+ }