agentworkshop 0.7.34 → 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 (944) 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 +1523 -1027
  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 -194
  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 -303
  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/codex-agent.ts +4 -7
  435. package/server/services/workshop/agents/dsh-agent.ts +4 -7
  436. package/server/services/workshop/agents/opencode-agent.ts +5 -7
  437. package/server/services/workshop/aml/aml.repo.ts +18 -0
  438. package/server/services/workshop/aml/dataset-builder.ts +4 -0
  439. package/server/services/workshop/aml/entity.ts +365 -0
  440. package/server/services/workshop/aml/env-manager.ts +242 -0
  441. package/server/services/workshop/aml/job-orchestrator.ts +4 -15
  442. package/server/services/workshop/aml/model-registry.ts +6 -0
  443. package/server/services/workshop/aml/python-runtime.ts +396 -62
  444. package/server/services/workshop/aml/runtime.ts +95 -4
  445. package/server/services/workshop/daq/bus/mqtt.adapter.ts +3 -1
  446. package/server/services/workshop/daq/daq-controller.ts +95 -47
  447. package/server/services/workshop/daq/daq-node.repo.ts +0 -10
  448. package/server/services/workshop/daq/daq-runtime.ts +0 -5
  449. package/server/services/workshop/json-store.mjs +35 -2
  450. package/server/services/workshop/plugins/host.mjs +14 -5
  451. package/server/services/workshop/runtime/manager.ts +28 -1
  452. package/server/services/workshop/runtime/scheduler-loop.ts +10 -1
  453. package/server/services/workshop/settings.ts +2 -0
  454. package/shared/config/home.mjs +58 -0
  455. package/shared/config/schema.json +2 -1
  456. package/shared/lru.mjs +4 -1
  457. package/.output/public/_nuxt/-6OnbLFb.js +0 -1
  458. package/.output/public/_nuxt/-nb2uqVg.js +0 -1
  459. package/.output/public/_nuxt/4bHdIqEg.js +0 -18
  460. package/.output/public/_nuxt/6PZPfFcO.js +0 -17
  461. package/.output/public/_nuxt/BBBtwOpo.js +0 -9
  462. package/.output/public/_nuxt/BBwMH_hG.js +0 -7
  463. package/.output/public/_nuxt/BDUjyaF4.js +0 -42
  464. package/.output/public/_nuxt/BNXfwXpE.js +0 -1
  465. package/.output/public/_nuxt/BN_PdN3J.js +0 -24
  466. package/.output/public/_nuxt/BSSUlJnx2.js +0 -1
  467. package/.output/public/_nuxt/BWSE6hR6.js +0 -1
  468. package/.output/public/_nuxt/BZGNTgTQ2.js +0 -1
  469. package/.output/public/_nuxt/BZv4RFYN.js +0 -1
  470. package/.output/public/_nuxt/BcmbLh2z2.js +0 -1
  471. package/.output/public/_nuxt/BfGc7TJp.js +0 -1
  472. package/.output/public/_nuxt/BgTB6h_q.js +0 -2
  473. package/.output/public/_nuxt/BkLJA9J5.js +0 -1
  474. package/.output/public/_nuxt/Bp5luxkg2.js +0 -1
  475. package/.output/public/_nuxt/BuCHayqN.js +0 -1
  476. package/.output/public/_nuxt/BuvcLKh1.js +0 -19
  477. package/.output/public/_nuxt/C3tCneTM.js +0 -1
  478. package/.output/public/_nuxt/C77oC8yC2.js +0 -7
  479. package/.output/public/_nuxt/C9f8QMp12.js +0 -1
  480. package/.output/public/_nuxt/CKfhtOt7.js +0 -13
  481. package/.output/public/_nuxt/CQvmN-Mi.js +0 -1
  482. package/.output/public/_nuxt/CUDrOuW7.js +0 -1
  483. package/.output/public/_nuxt/CZcC-gpk.js +0 -1
  484. package/.output/public/_nuxt/CbzsPO5H.js +0 -1
  485. package/.output/public/_nuxt/CdSOrh2c.js +0 -1
  486. package/.output/public/_nuxt/Cgx818r-.js +0 -1
  487. package/.output/public/_nuxt/Cjm7VogC.js +0 -1
  488. package/.output/public/_nuxt/Cm5mDxzH.js +0 -1
  489. package/.output/public/_nuxt/CmHzfVc5.js +0 -3
  490. package/.output/public/_nuxt/Cn3J3NXR.js +0 -23
  491. package/.output/public/_nuxt/Cno6kYiO2.js +0 -1
  492. package/.output/public/_nuxt/Cp6z0RN7.js +0 -1
  493. package/.output/public/_nuxt/CwqIxJGj.js +0 -2
  494. package/.output/public/_nuxt/D-Ca4BGY.js +0 -70
  495. package/.output/public/_nuxt/D0fhp-Ga.js +0 -75
  496. package/.output/public/_nuxt/D1z7i2UP.js +0 -31
  497. package/.output/public/_nuxt/DIaTPH1M.js +0 -1
  498. package/.output/public/_nuxt/DTYBfjRY.js +0 -1
  499. package/.output/public/_nuxt/DXRZPxGs.js +0 -1
  500. package/.output/public/_nuxt/DZzGarBE2.js +0 -13
  501. package/.output/public/_nuxt/DaMCzQhv.js +0 -1
  502. package/.output/public/_nuxt/DoLasgPj2.js +0 -1
  503. package/.output/public/_nuxt/DpojD719.js +0 -1
  504. package/.output/public/_nuxt/DsVcWfyR.js +0 -1
  505. package/.output/public/_nuxt/DtBu71ev.js +0 -32
  506. package/.output/public/_nuxt/Dy-mxvXY2.js +0 -1
  507. package/.output/public/_nuxt/DzuC31-i.js +0 -2
  508. package/.output/public/_nuxt/FQri3dV3.js +0 -1
  509. package/.output/public/_nuxt/ORt9oDIy2.js +0 -1
  510. package/.output/public/_nuxt/TownView.CtskuMXS.css +0 -1
  511. package/.output/public/_nuxt/VLI2Zy4t.js +0 -5
  512. package/.output/public/_nuxt/_id_.MbzdFygI.css +0 -1
  513. package/.output/public/_nuxt/_id_.hRYo-EAB.css +0 -1
  514. package/.output/public/_nuxt/_wsId_.gXMEOYgX.css +0 -1
  515. package/.output/public/_nuxt/aml.WU_bh87J.css +0 -1
  516. package/.output/public/_nuxt/arUY5dyq2.js +0 -4
  517. package/.output/public/_nuxt/builds/meta/adc365b6-f636-4a2b-9527-79819c1e874b.json +0 -1
  518. package/.output/public/_nuxt/daq.Bb6l44-O.css +0 -1
  519. package/.output/public/_nuxt/dcw.rXH2fc2Z.css +0 -1
  520. package/.output/public/_nuxt/default.jNT73_hq.css +0 -1
  521. package/.output/public/_nuxt/ekuGmQ7R.js +0 -1
  522. package/.output/public/_nuxt/entry.jFrFAWuA.css +0 -1
  523. package/.output/public/_nuxt/logs.DMOM-iHe.css +0 -1
  524. package/.output/public/_nuxt/niDwBOZW.js +0 -3
  525. package/.output/public/_nuxt/pMoIO6rr.js +0 -14
  526. package/.output/public/_nuxt/pages.Cc8GX9T1.css +0 -1
  527. package/.output/public/_nuxt/plugins.wIPyfPn-.css +0 -1
  528. package/.output/public/_nuxt/rqZ-1SoP.js +0 -2
  529. package/.output/public/_nuxt/settings.BCm4NZIc.css +0 -1
  530. package/.output/public/_nuxt/town.C_DsNW0J.css +0 -1
  531. package/.output/public/_nuxt/users.DuAt_Zwf.css +0 -1
  532. package/.output/public/_nuxt/vJ4FPb-_.js +0 -1
  533. package/.output/public/_nuxt/workshop.BJg84pOK.css +0 -1
  534. package/.output/server/chunks/build/aml-uBNIppIf.mjs +0 -508
  535. package/.output/server/chunks/build/aml-uBNIppIf.mjs.map +0 -1
  536. package/.output/server/chunks/build/daq-BvihjQyW.mjs.map +0 -1
  537. package/.output/server/chunks/build/pages-C-6BRtv8.mjs.map +0 -1
  538. package/scripts/_audit/.tmp/audit-data/dcws.json +0 -28
  539. package/scripts/_audit/.tmp/dcw-writes.json +0 -15650
  540. package/scripts/_audit/.tmp/dcws.json +0 -9033
  541. package/scripts/_audit/.tmp/pollution-backup/dcw-rollback.polluted.json +0 -470006
  542. package/scripts/_audit/.tmp/pollution-backup/dcws.polluted.json +0 -9085
  543. package/scripts/_audit/.tmp/probe-cwd.txt +0 -1
  544. package/scripts/_audit/awhome/commands/README.md +0 -3
  545. package/scripts/_audit/awhome/commands/hello.mjs +0 -12
  546. package/scripts/_audit/diag-cwd.ts +0 -20
  547. package/scripts/_audit/diag-cwd2.ts +0 -19
  548. package/scripts/_audit/hello.mjs +0 -12
  549. package/scripts/_audit/ndjson-partial-line-repro.mjs +0 -77
  550. package/scripts/_audit/opencode-await-ternary-repro.mjs +0 -20
  551. package/scripts/_audit/part-frag.txt +0 -84
  552. package/scripts/_audit/part-head.txt +0 -45
  553. package/scripts/_audit/probe-child.mjs +0 -17
  554. package/scripts/_audit/probe-envelope.mjs +0 -49
  555. package/scripts/_audit/probe-packlist.mjs +0 -67
  556. package/scripts/_audit/probe-routes.mjs +0 -47
  557. package/scripts/_audit/probe-routes2.mjs +0 -38
  558. package/scripts/_audit/probe.ts +0 -9
  559. package/scripts/_audit/probe2.ts +0 -6
  560. package/scripts/_audit/probe3.ts +0 -3
  561. package/scripts/_audit/probe4.ts +0 -3
  562. package/scripts/_audit/proj/.AgentWorkShop/commands/echoargs.mjs +0 -13
  563. package/scripts/_audit/proj/config.yml +0 -1
  564. package/scripts/_audit/run.mjs +0 -30
  565. package/scripts/_audit/tsconfig.probe.json +0 -24
  566. package/scripts/_audit/typecheck-out.txt +0 -466
  567. package/scripts/_daq-realtime-probe.mjs +0 -68
  568. package/scripts/_daq-warn-probe.mjs +0 -50
  569. package/scripts/_dbg-acc-1-setup.mjs +0 -57
  570. package/scripts/_dbg-acc-2-diag.mjs +0 -14
  571. package/scripts/_dbg-acc-2-intervals.mjs +0 -81
  572. package/scripts/_dbg-acc-3-daq.mjs +0 -48
  573. package/scripts/_dbg-acc-4-team.mjs +0 -92
  574. package/scripts/_dbg-acc-5-visual.mjs +0 -63
  575. package/scripts/_dbg-acc-5b-ws-town.mjs +0 -18
  576. package/scripts/_dbg-acc-5c-town.mjs +0 -12
  577. package/scripts/_dbg-acc-6-i18n.mjs +0 -19
  578. package/scripts/_dbg-agent-tools-audit.mjs +0 -154
  579. package/scripts/_dbg-agent-workflow-audit.mjs +0 -177
  580. package/scripts/_dbg-agents-dropdown-shot.py +0 -33
  581. package/scripts/_dbg-anim-verify.mjs +0 -81
  582. package/scripts/_dbg-app-shot.mjs +0 -48
  583. package/scripts/_dbg-autoframe.mjs +0 -103
  584. package/scripts/_dbg-availability-probe.ts +0 -11
  585. package/scripts/_dbg-beacon-final.mjs +0 -181
  586. package/scripts/_dbg-bind-bidi-e2e.mjs +0 -239
  587. package/scripts/_dbg-callout-near.mjs +0 -108
  588. package/scripts/_dbg-catalog-smoke.ts +0 -20
  589. package/scripts/_dbg-cf-line-shot.mjs +0 -18
  590. package/scripts/_dbg-chan-focus.mjs +0 -49
  591. package/scripts/_dbg-channel-plugin-ui.mjs +0 -94
  592. package/scripts/_dbg-cleanup.mjs +0 -31
  593. package/scripts/_dbg-closedloop-ui-shot.mjs +0 -61
  594. package/scripts/_dbg-codex-handshake.ts +0 -30
  595. package/scripts/_dbg-codex-probe.mjs +0 -58
  596. package/scripts/_dbg-codex-sandbox.ts +0 -58
  597. package/scripts/_dbg-codex-turn.ts +0 -65
  598. package/scripts/_dbg-collab-scenario-e2e.mjs +0 -185
  599. package/scripts/_dbg-config-smoke.ts +0 -28
  600. package/scripts/_dbg-console-audit.mjs +0 -61
  601. package/scripts/_dbg-console-probe.mjs +0 -23
  602. package/scripts/_dbg-context-inject-audit.mjs +0 -231
  603. package/scripts/_dbg-cpu-profile.mjs +0 -53
  604. package/scripts/_dbg-crash-recovery.mjs +0 -143
  605. package/scripts/_dbg-crop-shot.mjs +0 -16
  606. package/scripts/_dbg-cross-channel-e2e.mjs +0 -157
  607. package/scripts/_dbg-cross-team-visibility-e2e.mjs +0 -129
  608. package/scripts/_dbg-crush-probe.sh +0 -21
  609. package/scripts/_dbg-crush-spawn-probe.ts +0 -22
  610. package/scripts/_dbg-daq-acc-probe.mjs +0 -24
  611. package/scripts/_dbg-daq-attrib.mjs +0 -34
  612. package/scripts/_dbg-daq-bind-audit.mjs +0 -119
  613. package/scripts/_dbg-daq-cadence.mjs +0 -104
  614. package/scripts/_dbg-daq-debug.mjs +0 -22
  615. package/scripts/_dbg-daq-diag.mjs +0 -33
  616. package/scripts/_dbg-daq-e2e.mjs +0 -171
  617. package/scripts/_dbg-daq-film.mjs +0 -136
  618. package/scripts/_dbg-daq-filter-e2e.mjs +0 -109
  619. package/scripts/_dbg-daq-filter-e2e2.mjs +0 -62
  620. package/scripts/_dbg-daq-final-regression.mjs +0 -78
  621. package/scripts/_dbg-daq-frame-alarm.mjs +0 -49
  622. package/scripts/_dbg-daq-frame-ui.mjs +0 -62
  623. package/scripts/_dbg-daq-frame-ws.mjs +0 -72
  624. package/scripts/_dbg-daq-full-check.mjs +0 -179
  625. package/scripts/_dbg-daq-line-note-verify.mjs +0 -61
  626. package/scripts/_dbg-daq-linebanner-audit.mjs +0 -107
  627. package/scripts/_dbg-daq-pages-shot.mjs +0 -37
  628. package/scripts/_dbg-daq-perf.mjs +0 -61
  629. package/scripts/_dbg-daq-probe.mjs +0 -27
  630. package/scripts/_dbg-daq-recipe-e2e.mjs +0 -30
  631. package/scripts/_dbg-daq-redesign-shot.mjs +0 -88
  632. package/scripts/_dbg-daq-rows-probe.mjs +0 -26
  633. package/scripts/_dbg-daq-rowstate-e2e.mjs +0 -152
  634. package/scripts/_dbg-daq-rowstate-shot.mjs +0 -45
  635. package/scripts/_dbg-daq-rowstate-shot2.mjs +0 -38
  636. package/scripts/_dbg-daq-tpl.mjs +0 -144
  637. package/scripts/_dbg-dash-console-check.mjs +0 -49
  638. package/scripts/_dbg-dash-deep-probe.mjs +0 -61
  639. package/scripts/_dbg-dash-hitpoint.mjs +0 -44
  640. package/scripts/_dbg-dash-live-shot.mjs +0 -36
  641. package/scripts/_dbg-dash-shot.mjs +0 -21
  642. package/scripts/_dbg-dashboard-shot.mjs +0 -35
  643. package/scripts/_dbg-dcw-audit.mjs +0 -126
  644. package/scripts/_dbg-dcw-card-e2e.mjs +0 -108
  645. package/scripts/_dbg-dcw-channel-ui.mjs +0 -144
  646. package/scripts/_dbg-dcw-examples.mjs +0 -81
  647. package/scripts/_dbg-dcw-light-shot.mjs +0 -19
  648. package/scripts/_dbg-dcw-line-audit.mjs +0 -107
  649. package/scripts/_dbg-dcw-pause-tpl-audit.mjs +0 -161
  650. package/scripts/_dbg-dcw-pause-ui.mjs +0 -175
  651. package/scripts/_dbg-dcw-read-toolface.ts +0 -13
  652. package/scripts/_dbg-dcw-read-ui.mjs +0 -74
  653. package/scripts/_dbg-dcw-scene.mjs +0 -72
  654. package/scripts/_dbg-dcw-shot2.mjs +0 -14
  655. package/scripts/_dbg-dcw-twin-e2e.mjs +0 -192
  656. package/scripts/_dbg-diag-mock-loop.mjs +0 -89
  657. package/scripts/_dbg-diag-watch.mjs +0 -95
  658. package/scripts/_dbg-docs-site-shot.mjs +0 -32
  659. package/scripts/_dbg-dsh-probe.mjs +0 -31
  660. package/scripts/_dbg-dt-interact.mjs +0 -193
  661. package/scripts/_dbg-error-probe.mjs +0 -54
  662. package/scripts/_dbg-filter-light-verify.mjs +0 -54
  663. package/scripts/_dbg-final-acceptance-2.mjs +0 -72
  664. package/scripts/_dbg-final-acceptance.mjs +0 -192
  665. package/scripts/_dbg-final-agent-e2e.mjs +0 -151
  666. package/scripts/_dbg-final-features.mjs +0 -155
  667. package/scripts/_dbg-final-fixups.mjs +0 -62
  668. package/scripts/_dbg-final-full-e2e.mjs +0 -218
  669. package/scripts/_dbg-final-line-e2e.mjs +0 -173
  670. package/scripts/_dbg-final-shots.mjs +0 -32
  671. package/scripts/_dbg-final-t6-hitl.mjs +0 -38
  672. package/scripts/_dbg-final-visual.mjs +0 -29
  673. package/scripts/_dbg-fix-unused-imports.py +0 -41
  674. package/scripts/_dbg-focus-range.mjs +0 -115
  675. package/scripts/_dbg-fresh-scene-e2e.mjs +0 -125
  676. package/scripts/_dbg-fullchain-e2e.mjs +0 -178
  677. package/scripts/_dbg-gate-debug.mjs +0 -37
  678. package/scripts/_dbg-gif-encode.mjs +0 -111
  679. package/scripts/_dbg-gizmo.mjs +0 -95
  680. package/scripts/_dbg-glass-probe.mjs +0 -57
  681. package/scripts/_dbg-glass-shot.mjs +0 -50
  682. package/scripts/_dbg-glass-sweep.mjs +0 -25
  683. package/scripts/_dbg-glb-probe.mjs +0 -43
  684. package/scripts/_dbg-goose-probe.mjs +0 -33
  685. package/scripts/_dbg-goose-probe.sh +0 -10
  686. package/scripts/_dbg-hardening-probe.mjs +0 -90
  687. package/scripts/_dbg-harness-cancel-repro.mjs +0 -81
  688. package/scripts/_dbg-harness-ui-dbg.py +0 -49
  689. package/scripts/_dbg-harness-ui-shot.py +0 -109
  690. package/scripts/_dbg-hero-btn-probe.mjs +0 -21
  691. package/scripts/_dbg-hidden-check.mjs +0 -21
  692. package/scripts/_dbg-hmi-audit.mjs +0 -164
  693. package/scripts/_dbg-home-repro.mjs +0 -24
  694. package/scripts/_dbg-home-stack.mjs +0 -13
  695. package/scripts/_dbg-host.mjs +0 -16
  696. package/scripts/_dbg-huashu-survey.mjs +0 -31
  697. package/scripts/_dbg-huashu-survey2.mjs +0 -35
  698. package/scripts/_dbg-huashu-verify.mjs +0 -25
  699. package/scripts/_dbg-huashu-verify2.mjs +0 -26
  700. package/scripts/_dbg-hydration-detail.mjs +0 -18
  701. package/scripts/_dbg-i18n-debug.mjs +0 -27
  702. package/scripts/_dbg-i18n-debug2.mjs +0 -26
  703. package/scripts/_dbg-i18n-final.mjs +0 -42
  704. package/scripts/_dbg-i18n-scan.mjs +0 -38
  705. package/scripts/_dbg-infra-lifecycle.mjs +0 -44
  706. package/scripts/_dbg-interval-config.mjs +0 -156
  707. package/scripts/_dbg-interval-scenario.mjs +0 -126
  708. package/scripts/_dbg-kicker-check.mjs +0 -11
  709. package/scripts/_dbg-line-aura-shots.mjs +0 -54
  710. package/scripts/_dbg-line-control-e2e.mjs +0 -120
  711. package/scripts/_dbg-line-gate-audit.mjs +0 -108
  712. package/scripts/_dbg-line-live-e2e.mjs +0 -144
  713. package/scripts/_dbg-line-repo-test.ts +0 -10
  714. package/scripts/_dbg-line-scenario-e2e.mjs +0 -256
  715. package/scripts/_dbg-line-spawn.ts +0 -31
  716. package/scripts/_dbg-live-engine-probe.mjs +0 -80
  717. package/scripts/_dbg-login-debug.py +0 -23
  718. package/scripts/_dbg-login-e2e.mjs +0 -26
  719. package/scripts/_dbg-logs-ui-e2e.py +0 -126
  720. package/scripts/_dbg-mcp-bridge-probe.mjs +0 -147
  721. package/scripts/_dbg-modbus-latency.mjs +0 -22
  722. package/scripts/_dbg-mqtt-chain-e2e.mjs +0 -90
  723. package/scripts/_dbg-mqtt-publisher.mjs +0 -17
  724. package/scripts/_dbg-nav-rpg.mjs +0 -84
  725. package/scripts/_dbg-nav-shot.mjs +0 -28
  726. package/scripts/_dbg-nav.mjs +0 -27
  727. package/scripts/_dbg-oneshot-impl-probe.ts +0 -67
  728. package/scripts/_dbg-opencode-sse.mjs +0 -101
  729. package/scripts/_dbg-opencode-start.ts +0 -57
  730. package/scripts/_dbg-opslog-e2e.mjs +0 -121
  731. package/scripts/_dbg-opslog-shots.mjs +0 -62
  732. package/scripts/_dbg-optimization-e2e.mjs +0 -94
  733. package/scripts/_dbg-orbit.mjs +0 -58
  734. package/scripts/_dbg-overview-probe.sh +0 -31
  735. package/scripts/_dbg-panesplitter-fix-check.mjs +0 -62
  736. package/scripts/_dbg-perms-visual.mjs +0 -36
  737. package/scripts/_dbg-pg-tcp-probe.cjs +0 -27
  738. package/scripts/_dbg-phase-e3-monitor.mjs +0 -25
  739. package/scripts/_dbg-pi-spawn-probe.ts +0 -33
  740. package/scripts/_dbg-plc-agent-loop.ts +0 -102
  741. package/scripts/_dbg-plc-e2e.mjs +0 -171
  742. package/scripts/_dbg-plugin-agent-read.ts +0 -56
  743. package/scripts/_dbg-plugin-config-ui.mjs +0 -111
  744. package/scripts/_dbg-plugin-matrix.mjs +0 -212
  745. package/scripts/_dbg-plugin-panels-ui.mjs +0 -54
  746. package/scripts/_dbg-plugin-sink-rest.mjs +0 -70
  747. package/scripts/_dbg-plugin-sink-ui.mjs +0 -81
  748. package/scripts/_dbg-plugin-tools-inject.ts +0 -80
  749. package/scripts/_dbg-plugin-ui-wizard.mjs +0 -125
  750. package/scripts/_dbg-plugin-verify-e2e.mjs +0 -123
  751. package/scripts/_dbg-plugins-e2e.mjs +0 -101
  752. package/scripts/_dbg-pop-clamp-verify.mjs +0 -77
  753. package/scripts/_dbg-preset-e2e.mjs +0 -116
  754. package/scripts/_dbg-preview-console.mjs +0 -28
  755. package/scripts/_dbg-preview-minrepro.mjs +0 -156
  756. package/scripts/_dbg-preview-pixels.mjs +0 -93
  757. package/scripts/_dbg-prompts-hotreload-test.ts +0 -76
  758. package/scripts/_dbg-prompts-resolve-test.ts +0 -39
  759. package/scripts/_dbg-quality-pages-e2e.mjs +0 -84
  760. package/scripts/_dbg-query-cancel.ts +0 -12
  761. package/scripts/_dbg-qwen-acp-probe.mjs +0 -30
  762. package/scripts/_dbg-qwen-capture.mjs +0 -21
  763. package/scripts/_dbg-rail-tree-e2e.mjs +0 -183
  764. package/scripts/_dbg-real-driver-e2e.mjs +0 -55
  765. package/scripts/_dbg-redesign-shots.mjs +0 -34
  766. package/scripts/_dbg-registry-smoke.ts +0 -14
  767. package/scripts/_dbg-release-smoke.mjs +0 -104
  768. package/scripts/_dbg-repo-setup-verify.mjs +0 -31
  769. package/scripts/_dbg-resolve-probe.ts +0 -6
  770. package/scripts/_dbg-restart-persist.mjs +0 -41
  771. package/scripts/_dbg-retention-test.ts +0 -25
  772. package/scripts/_dbg-rollback-mgr-audit.mjs +0 -169
  773. package/scripts/_dbg-rpg.mjs +0 -71
  774. package/scripts/_dbg-sc001-dispatch.mjs +0 -63
  775. package/scripts/_dbg-scenario-final-shot.mjs +0 -24
  776. package/scripts/_dbg-scenario-phase-e2.mjs +0 -75
  777. package/scripts/_dbg-scenario-phase-e3.mjs +0 -96
  778. package/scripts/_dbg-scenario-phase1.mjs +0 -90
  779. package/scripts/_dbg-scenario-phase2.mjs +0 -105
  780. package/scripts/_dbg-scenario-phase3-monitor.mjs +0 -48
  781. package/scripts/_dbg-scenario-phase3.mjs +0 -111
  782. package/scripts/_dbg-scene-polish-shot.mjs +0 -118
  783. package/scripts/_dbg-selring-probe.mjs +0 -47
  784. package/scripts/_dbg-settings-draft-probe.mjs +0 -39
  785. package/scripts/_dbg-settings-probe.mjs +0 -33
  786. package/scripts/_dbg-setup-e2e.mjs +0 -88
  787. package/scripts/_dbg-sideinfo.mjs +0 -101
  788. package/scripts/_dbg-sim-keeper.mjs +0 -100
  789. package/scripts/_dbg-splitter.mjs +0 -88
  790. package/scripts/_dbg-swatch-check.mjs +0 -10
  791. package/scripts/_dbg-task-cancel-probe.mjs +0 -66
  792. package/scripts/_dbg-team-drill.mjs +0 -173
  793. package/scripts/_dbg-town-alarm-e2e.mjs +0 -40
  794. package/scripts/_dbg-town-beauty-shots.mjs +0 -54
  795. package/scripts/_dbg-town-daq-shot.mjs +0 -26
  796. package/scripts/_dbg-town-full-e2e.mjs +0 -104
  797. package/scripts/_dbg-town-gate.mjs +0 -44
  798. package/scripts/_dbg-town-ins-probe.mjs +0 -37
  799. package/scripts/_dbg-town-perf.mjs +0 -50
  800. package/scripts/_dbg-town-polish-shots.mjs +0 -82
  801. package/scripts/_dbg-town-realtime.mjs +0 -42
  802. package/scripts/_dbg-town-shot.py +0 -25
  803. package/scripts/_dbg-town-shot3.mjs +0 -17
  804. package/scripts/_dbg-town-truth.mjs +0 -37
  805. package/scripts/_dbg-town-truth2.mjs +0 -27
  806. package/scripts/_dbg-transform-audit.mjs +0 -98
  807. package/scripts/_dbg-trend-expand-test.mjs +0 -38
  808. package/scripts/_dbg-twindaq-focus.mjs +0 -81
  809. package/scripts/_dbg-ui-polish-shot.mjs +0 -43
  810. package/scripts/_dbg-ui-polish-verify1.mjs +0 -92
  811. package/scripts/_dbg-ui-polish-verify2.mjs +0 -50
  812. package/scripts/_dbg-ui-polish-verify3.mjs +0 -51
  813. package/scripts/_dbg-ui-polish-verify4.mjs +0 -50
  814. package/scripts/_dbg-ui-shot.mjs +0 -26
  815. package/scripts/_dbg-ui-shots.mjs +0 -28
  816. package/scripts/_dbg-ui-survey.py +0 -52
  817. package/scripts/_dbg-unify-shot.mjs +0 -43
  818. package/scripts/_dbg-uplink-probe.mjs +0 -36
  819. package/scripts/_dbg-wizard-preview-shot.mjs +0 -58
  820. package/scripts/_dbg-wizard-ui-e2e.mjs +0 -93
  821. package/scripts/_dbg-ws-probe.mjs +0 -86
  822. package/scripts/_dbg-ws-shot2.mjs +0 -23
  823. package/scripts/_dbg-wsdot-sanity.mjs +0 -25
  824. package/scripts/_dev-stack.mjs +0 -46
  825. package/scripts/_http-driver-probe.mjs +0 -30
  826. package/scripts/_mqtt-driver-probe.mjs +0 -30
  827. package/scripts/_newdriver-rest-probe.mjs +0 -100
  828. package/scripts/_node-state-probe.mjs +0 -5
  829. package/scripts/_opcua-driver-probe.mjs +0 -31
  830. package/scripts/_rtu-debug.mjs +0 -41
  831. package/scripts/_rtu-direct.mjs +0 -6
  832. package/scripts/_rtu-driver-probe.mjs +0 -53
  833. package/scripts/_spike-pitui.mjs +0 -116
  834. package/scripts/_tmp-args-probe.mjs +0 -20
  835. package/scripts/_tmp-cyc-entry.mjs +0 -8
  836. package/scripts/_tmp-cyc-main.mjs +0 -5
  837. package/scripts/_tmp-cyc-mod.mjs +0 -2
  838. package/scripts/_tmp-cycle-a.mjs +0 -6
  839. package/scripts/_tmp-cycle-b.mjs +0 -2
  840. package/scripts/_tmp-cycle-probe.mjs +0 -4
  841. package/scripts/_tmp-entry-variant.mjs +0 -2
  842. package/scripts/_tmp-help-probe.mjs +0 -19
  843. package/scripts/_tmp-help-probe2.mjs +0 -2
  844. package/scripts/_tmp-trace-preload.mjs +0 -1
  845. package/scripts/_wizard-shots.mjs +0 -90
  846. package/scripts/acceptance-suite.py +0 -207
  847. package/scripts/aml-agent-bridge.ts +0 -230
  848. package/scripts/aml-industrial-loop.ts +0 -232
  849. package/scripts/build-film-devices.mjs +0 -227
  850. package/scripts/collab-live-test.py +0 -177
  851. package/scripts/debug-mcp-http.ts +0 -64
  852. package/scripts/demo-lead-worker.ts +0 -256
  853. package/scripts/demo-modes.ts +0 -415
  854. package/scripts/demo-omp-channel.ts +0 -135
  855. package/scripts/design-preflight.mjs +0 -223
  856. package/scripts/design-verify-templates.mjs +0 -110
  857. package/scripts/design-verify.mjs +0 -170
  858. package/scripts/dev-window.cmd +0 -6
  859. package/scripts/device-line-restore.mjs +0 -34
  860. package/scripts/diag-lead-status.ts +0 -101
  861. package/scripts/e2e-a2a-steer-live.mjs +0 -193
  862. package/scripts/e2e-dual-drive-comm.ts +0 -259
  863. package/scripts/e2e-full-scenario.ts +0 -321
  864. package/scripts/e2e-harness-consistency.ts +0 -204
  865. package/scripts/e2e-harness-provider-task.mjs +0 -126
  866. package/scripts/e2e-line-live.mjs +0 -144
  867. package/scripts/e2e-memory-persistence.ts +0 -320
  868. package/scripts/e2e-omp-modes.ts +0 -274
  869. package/scripts/e2e-omp-realtime.ts +0 -258
  870. package/scripts/e2e-plc-scenario.mjs +0 -292
  871. package/scripts/e2e-real-scenario.mjs +0 -466
  872. package/scripts/e2e-tab-close.mjs +0 -136
  873. package/scripts/e2e-token-ui.mjs +0 -149
  874. package/scripts/final-soup-run.py +0 -192
  875. package/scripts/final-soup-watch.py +0 -83
  876. package/scripts/i18n-codemod.mjs +0 -173
  877. package/scripts/i18n-fix-en.py +0 -28
  878. package/scripts/i18n-fix-en2.py +0 -31
  879. package/scripts/i18n-merge.mjs +0 -191
  880. package/scripts/migrate-local-time.mjs +0 -123
  881. package/scripts/omp-real-test.py +0 -328
  882. package/scripts/team-plugins-api-smoke.mjs +0 -149
  883. package/scripts/test-a2a-relay.mjs +0 -222
  884. package/scripts/test-aml-integration.ts +0 -159
  885. package/scripts/test-aml-job.ts +0 -174
  886. package/scripts/test-aml-unit.ts +0 -184
  887. package/scripts/test-api-client.ts +0 -108
  888. package/scripts/test-api-suite.mjs +0 -271
  889. package/scripts/test-block-consumption.mjs +0 -194
  890. package/scripts/test-cmd-render.mjs +0 -218
  891. package/scripts/test-collab-omp.mjs +0 -192
  892. package/scripts/test-config-precedence.ts +0 -124
  893. package/scripts/test-context-governor.ts +0 -176
  894. package/scripts/test-daq-frames.ts +0 -180
  895. package/scripts/test-daq-minio.ts +0 -77
  896. package/scripts/test-dedup-logic.ts +0 -132
  897. package/scripts/test-e2e-collaboration.ts +0 -262
  898. package/scripts/test-e2e-monitor.ts +0 -192
  899. package/scripts/test-event-history.ts +0 -112
  900. package/scripts/test-exec-modes.ts +0 -316
  901. package/scripts/test-fifo-realtime.mjs +0 -193
  902. package/scripts/test-final-e2e.mjs +0 -290
  903. package/scripts/test-goal-summary.ts +0 -202
  904. package/scripts/test-harness-liveness.ts +0 -109
  905. package/scripts/test-harness-terminal.ts +0 -164
  906. package/scripts/test-header-trail.mjs +0 -95
  907. package/scripts/test-hitl.ts +0 -360
  908. package/scripts/test-koda-restyle.mjs +0 -105
  909. package/scripts/test-lane-raw.ts +0 -67
  910. package/scripts/test-lanes-history-render.mjs +0 -138
  911. package/scripts/test-loop-omp.mjs +0 -154
  912. package/scripts/test-mdlite.ts +0 -53
  913. package/scripts/test-memory-brief-chronicle.ts +0 -180
  914. package/scripts/test-memory-rrf-mmr.ts +0 -114
  915. package/scripts/test-mock-collab.mjs +0 -226
  916. package/scripts/test-modern-render.mjs +0 -174
  917. package/scripts/test-omp-terminal.mjs +0 -187
  918. package/scripts/test-plugin-ext.ts +0 -173
  919. package/scripts/test-prompts-loader.ts +0 -56
  920. package/scripts/test-real-scenario.mjs +0 -290
  921. package/scripts/test-stream-render.ts +0 -37
  922. package/scripts/test-task-drawer.mjs +0 -204
  923. package/scripts/test-task-invariants.mjs +0 -169
  924. package/scripts/test-town-3d.mjs +0 -121
  925. package/scripts/test-town-layout.mjs +0 -200
  926. package/scripts/test-town-page.mjs +0 -136
  927. package/scripts/test-town-scene-math.ts +0 -169
  928. package/scripts/test-town-twin.mjs +0 -121
  929. package/scripts/test-town-upload.mjs +0 -89
  930. package/scripts/test-town-user-flow.mjs +0 -619
  931. package/scripts/test-town-world.mjs +0 -76
  932. package/scripts/test-town-wuwa.mjs +0 -198
  933. package/scripts/test-user-isolation.mjs +0 -193
  934. package/scripts/test-workshop-entries.ts +0 -370
  935. package/scripts/test-workspace-api.ts +0 -329
  936. package/scripts/test-ws-aep.mjs +0 -187
  937. package/scripts/test-ws-protocol.ts +0 -134
  938. package/scripts/town-demo-seed.mjs +0 -75
  939. package/scripts/town-scene-clear.mjs +0 -56
  940. package/scripts/verify-exec-modes-report.ts +0 -248
  941. package/scripts/verify-lead-mail.ts +0 -188
  942. package/scripts/verify-page-smoke.mjs +0 -87
  943. package/scripts/ws-test.mjs +0 -176
  944. package/scripts/ws-test.py +0 -4
@@ -1,36 +0,0 @@
1
- /** 一次性:开跑产线后的大屏活体截图(趋势线/吞吐条/样本计数增长) */
2
- import puppeteer from 'puppeteer-core'
3
-
4
- const TOKEN = 'ut-ffc1dfbbc0c1444c87c1ec69a9e8208c'
5
- const ROOT = 'http://127.0.0.1:3000'
6
- const H = { authorization: `Bearer ${TOKEN}`, 'content-type': 'application/json' }
7
- const j = (u, m = 'GET', b) => fetch(ROOT + u, { method: m, headers: H, body: b ? JSON.stringify(b) : undefined }).then(r => r.json())
8
-
9
- const d = (await j('/api/workshop/dcw')).data
10
- const line = d.lines.find((l) => d.recipes.some(r => r.lineId === l.id && r.params.length > 0))
11
- const recipe = d.recipes.find(r => r.lineId === line.id && r.params.length > 0)
12
- await j(`/api/workshop/dcw/lines/${line.id}/stop`, 'POST').catch(() => {})
13
- const st = await j(`/api/workshop/dcw/lines/${line.id}/start`, 'POST', { recipeId: recipe.id })
14
- if (!st.data?.line?.active) { console.error('start failed'); process.exit(1) }
15
- console.log('line started:', line.name, recipe.name)
16
-
17
- const browser = await puppeteer.launch({
18
- executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
19
- headless: 'new',
20
- args: ['--no-sandbox', '--disable-gpu', '--window-size=2560,1400'],
21
- })
22
- const page = await browser.newPage()
23
- await page.setViewport({ width: 2560, height: 1400 })
24
- await page.setCookie({ name: 'token', value: TOKEN, domain: '127.0.0.1', path: '/' })
25
- await page.goto(`${ROOT}/`, { waitUntil: 'networkidle2', timeout: 60000 })
26
- await new Promise(r => setTimeout(r, 50000)) // 攒 10 拍趋势点
27
- const live = await page.evaluate(() => ({
28
- kpi: [...document.querySelectorAll('.kpi-value')].map(k => k.textContent?.trim()),
29
- trendLegend: [...document.querySelectorAll('.dpanel')][0]?.textContent?.slice(0, 120),
30
- samples: [...document.querySelectorAll('.kpi')].map(k => k.textContent)?.[3],
31
- }))
32
- console.log(JSON.stringify(live, null, 1))
33
- await page.screenshot({ path: 'docs/audit/screenshots/dashboard-bigscreen-live.png' })
34
- await j(`/api/workshop/dcw/lines/${line.id}/stop`, 'POST')
35
- console.log('line stopped (env restored)')
36
- await browser.close()
@@ -1,21 +0,0 @@
1
- /** 一次性:首页 12s 长等待截图(判别冷启动水合延迟 vs 真渲染缺陷) */
2
- import puppeteer from 'puppeteer-core'
3
-
4
- const BASE = 'http://127.0.0.1:3000'
5
- const browser = await puppeteer.launch({
6
- executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
7
- headless: 'new',
8
- args: ['--no-sandbox', '--disable-gpu', '--window-size=1600,1000'],
9
- })
10
- const page = await browser.newPage()
11
- await page.setViewport({ width: 1600, height: 1000 })
12
- const errors = []
13
- page.on('pageerror', err => errors.push(String(err?.message ?? err).slice(0, 300)))
14
- page.on('console', (msg) => {
15
- if (msg.type() === 'error') errors.push(`[c] ${msg.text().slice(0, 300)}`)
16
- })
17
- await page.goto(`${BASE}/`, { waitUntil: 'domcontentloaded', timeout: 60000 })
18
- await new Promise(r => setTimeout(r, 12000))
19
- await page.screenshot({ path: 'docs/audit/screenshots/probe-dashboard-12s.png' })
20
- console.log('errors:', JSON.stringify(errors.slice(0, 5)))
21
- await browser.close()
@@ -1,35 +0,0 @@
1
- /** 一次性:仪表盘大屏 + 品牌(logo/标题/favicon/侧栏)验证截图 */
2
- import puppeteer from 'puppeteer-core'
3
-
4
- const TOKEN = process.env.DAQ_TOKEN ?? 'ut-ffc1dfbbc0c1444c87c1ec69a9e8208c'
5
- const browser = await puppeteer.launch({
6
- executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
7
- headless: 'new',
8
- args: ['--no-sandbox', '--disable-gpu', '--window-size=2560,1400'],
9
- })
10
- const page = await browser.newPage()
11
- await page.setViewport({ width: 2560, height: 1400 })
12
- await page.setCookie({ name: 'token', value: TOKEN, domain: '127.0.0.1', path: '/' })
13
- const errors = []
14
- page.on('pageerror', e => errors.push(String(e).slice(0, 120)))
15
- await page.goto('http://127.0.0.1:3000/', { waitUntil: 'domcontentloaded', timeout: 60000 })
16
- await new Promise(r => setTimeout(r, 8000))
17
-
18
- const checks = await page.evaluate(() => ({
19
- title: document.title,
20
- favicon: document.querySelector('link[rel="icon"]')?.getAttribute('href'),
21
- logoSvg: !!document.querySelector('.logo-mark svg'),
22
- logoSub: document.querySelector('.logo-sub')?.textContent?.trim(),
23
- harnessGone: !document.body.textContent?.toLowerCase().includes('agent harness'),
24
- kpis: [...document.querySelectorAll('.kpi')].map(k => `${k.querySelector('.kpi-label')?.textContent}:${k.querySelector('.kpi-value')?.textContent}`),
25
- panels: [...document.querySelectorAll('.dp-hd h3')].map(h => h.textContent?.trim()),
26
- canvases: document.querySelectorAll('.dpanel canvas').length,
27
- lineCards: document.querySelectorAll('.line-card').length,
28
- heroTitle: document.querySelector('.hero-title')?.textContent?.replace(/\s+/g, ' ').trim(),
29
- }))
30
- console.log(JSON.stringify(checks, null, 1))
31
- await page.screenshot({ path: 'docs/audit/screenshots/dashboard-bigscreen.png' })
32
- await new Promise(r => setTimeout(r, 7000))
33
- await page.screenshot({ path: 'docs/audit/screenshots/dashboard-bigscreen-t7.png' })
34
- console.log('page errors:', errors.length ? errors : 'none')
35
- await browser.close()
@@ -1,126 +0,0 @@
1
- /** 一次性:DCW 写控制全链路审计(mock ACK/工程换算/回读校验/量程拒绝/Recipe 隔离/Modbus 真写) */
2
- import { randomUUID } from 'node:crypto'
3
- const TOKEN = process.env.ADMIN_TOKEN ?? process.env.AW_PAGE_TOKEN ?? process.env.DAQ_TOKEN ?? ''
4
- const BASE = (process.env.DAQ_BASE ?? 'http://127.0.0.1:3000') + '/api/workshop/dcw'
5
- const H = { authorization: `Bearer ${TOKEN}`, 'content-type': 'application/json' }
6
- const fail = (m) => { console.error('FAIL:', m); process.exitCode = 1 }
7
- const sleep = (ms) => new Promise(r => setTimeout(r, ms))
8
- const post = (url, body) => fetch(BASE + url, { method: 'POST', headers: H, body: JSON.stringify(body) }).then(r => r.json())
9
- const patch = (url, body) => fetch(BASE + url, { method: 'PATCH', headers: H, body: JSON.stringify(body) }).then(r => r.json())
10
- const del = (url) => fetch(BASE + url, { method: 'DELETE', headers: H }).then(r => r.json())
11
- const get = (url = '') => fetch(BASE + url, { headers: H }).then(r => r.json())
12
- const { makeLineFixture } = await import('./_lib-dcw-line.mjs')
13
- const fx = await makeLineFixture(process.env.DAQ_BASE ?? 'http://127.0.0.1:3000', H, 'dcw-audit 线')
14
-
15
- // ===== 1. Mock 写节点:创建/下发/ACK =====
16
- const mkA = (await post('', { templateRef: 'dcw-temp-sp', name: '审计-温度设定' })).data.node
17
- if (!mkA) { console.error('FAIL: create mock node'); process.exit(1) }
18
- console.log('created:', mkA.id, '| domain:', mkA.min, '~', mkA.max, mkA.unit)
19
-
20
- const wOk = await post(`/${mkA.id}/write`, { value: 180 })
21
- console.log('write 180:', wOk.data?.outcome?.ok, '|', (wOk.data?.outcome?.message ?? wOk.message ?? '').slice(0, 60))
22
- if (wOk.data?.outcome?.ok !== true) fail('mock write 180 failed')
23
-
24
- const list = await get()
25
- const nodeA = list.data.nodes.find(n => n.id === mkA.id)
26
- if (nodeA?.value === 180 && nodeA.state === 'ok') console.log('PASS node value/state updated (180, ok)')
27
- else fail(`node state wrong: ${JSON.stringify({ value: nodeA?.value, state: nodeA?.state })}`)
28
-
29
- // ===== 2. 工艺量程硬校验(越界拒绝) =====
30
- const wOver = await post(`/${mkA.id}/write`, { value: 250 })
31
- if (wOver.code === 'VALIDATION_ERROR') console.log('PASS over-range rejected:', (wOver.message ?? '').slice(0, 40))
32
- else fail(`over-range not rejected: ${wOver.code}`)
33
-
34
- // ===== 3. Modbus 真实写 + 工程量→原始值换算 + 回读校验 =====
35
- // 节点:写 40021 float32,工程量程 150~200 → 原始 0~2000(0.1 分辨率);write 175 → raw 1000
36
- const mkM = (await post('', {
37
- templateRef: 'dcw-temp-sp',
38
- name: '审计-Modbus温度',
39
- driver: 'modbus-tcp',
40
- driverConfig: { host: '127.0.0.1', port: 1502, unitId: 1, register: 40021, dataType: 'float32', byteOrder: 'big', engMin: 150, engMax: 200, rawMin: 0, rawMax: 2000 },
41
- })).data.node
42
- if (!mkM) { console.error('FAIL: create modbus node'); process.exit(1) }
43
- const testM = await post(`/${mkM.id}/test`, {})
44
- console.log('modbus test:', testM.data?.test?.ok, '|', (testM.data?.test?.message ?? '').slice(0, 50))
45
-
46
- const wM = await post(`/${mkM.id}/write`, { value: 175 })
47
- console.log('modbus write 175:', JSON.stringify(wM.data?.outcome ?? wM).slice(0, 140))
48
- if (wM.data?.outcome?.ok === true && wM.data.outcome.raw === 1000) console.log('PASS modbus real write: raw=1000(换算 175→0.1分辨率), 回读一致')
49
- else fail(`modbus write wrong: ${JSON.stringify(wM.data?.outcome ?? wM.message)}`)
50
-
51
- // ===== 3.5 数采通道(挂审计产线:门控下仅线内节点采样;批次 daq 聚合用) =====
52
- const dqA = (await (await fetch((process.env.DAQ_BASE ?? 'http://127.0.0.1:3000') + '/api/workshop/daq', { method: 'POST', headers: H, body: JSON.stringify({ templateRef: 'daq-temp-tc', name: 'dcw审计-温度通道', intervalMs: 500, lineId: fx.line.id }) })).json()).data.node
53
- if (!dqA) { console.error('FAIL: create daq node'); process.exit(1) }
54
-
55
- // ===== 4. Recipe 配方 + 一键下发 + 批次隔离 =====
56
- // 无节点自定义模板 → 验证"参数无匹配节点记失败不阻塞"(内置模板均有 legacy 示例节点,不可再作反例)
57
- // 名字带随机后缀:上次失败运行残留同名模板(同名 409)时本脚本仍可重跑
58
- const tplEmpty = (await post('/templates', { name: `审计-无节点模板-${randomUUID().slice(0, 4)}`, unit: 'kPa', min: 0, max: 400, decimals: 1, ch: '审计用空模板', code: 'AUDIT · VOID' })).data?.template
59
- if (!tplEmpty?.key) { console.error('FAIL: create empty template'); process.exit(1) }
60
- // 先给该模板建一个节点(配方参数必须可解析到节点),建配方后再删节点 → apply 时逐参数失败隔离
61
- const mkC = (await post('', { templateRef: `dcw-${tplEmpty.key}`, name: '审计-临时参数节点' })).data.node
62
- const prod = (await post('/products', { name: '审计产品', lineId: fx.line.id })).data.product
63
- const rc = await post('/recipes', { productId: prod.id,
64
- name: '审计配方-光学膜',
65
- description: '审计用',
66
- params: [
67
- // 显式 nodeId(自建节点):templateRef 兼容解析会命中"最早同模板节点"——
68
- // 多产线环境下那可能是用户 fixture 节点(已挂产线),产线隔离会正确拒绝
69
- { nodeId: mkA.id, value: 185 },
70
- { nodeId: mkC.id, value: 320 },
71
- ],
72
- })
73
- const recipeId = rc.data?.recipe?.id
74
- if (!recipeId) { console.error('FAIL: create recipe', JSON.stringify(rc).slice(0, 120)); process.exit(1) }
75
- console.log('recipe created:', recipeId)
76
- await del(`/${mkC.id}`) // 参数目标节点被删 → apply 该参数应记失败不阻塞
77
-
78
- // 已删节点的参数 → 该参数应记失败不阻塞;温度参数 → 写成功(命中 legacy 示例节点)
79
- const ap = await post(`/recipes/${recipeId}/apply`, {})
80
- const run = ap.data?.run
81
- if (!run) { console.error('FAIL: apply recipe', JSON.stringify(ap).slice(0, 160)); process.exit(1) }
82
- const okCount = run.results.filter(r => r.ok).length
83
- console.log(`apply: ${okCount}/${run.results.length} ok |`, run.results.map(r => `${r.templateRef}:${r.ok ? 'ok' : 'fail'}`).join(' '))
84
- if (okCount >= 1 && okCount < run.results.length) console.log('PASS recipe apply: partial success isolated per-param')
85
-
86
- await sleep(800)
87
- const data1 = await get(`/runs/${run.id}/data`)
88
- const writes1 = data1.data?.writes ?? []
89
- console.log(`run data: writes=${writes1.length}, daq channels=${(data1.data?.daq ?? []).length}`)
90
- // 无节点模板参数未产生写命令 → 预期 1 条(温度写);且必须归属本批次
91
- if (writes1.length === 1 && writes1[0].recipeRunId === run.id) console.log('PASS run data: write history bound to run (无节点参数不产生写)')
92
- else fail(`run data writes wrong: ${writes1.length}`)
93
-
94
- // 第二个配方 + 批次 → 验证窗口隔离
95
- const rc2 = await post('/recipes', { productId: prod.id, name: '审计配方-B', params: [{ nodeId: mkA.id, value: 160 }] })
96
- // 门控语义:runData 的数采聚合需产线开跑(配方驱动采集 + 打标)
97
- const ap2 = await fx.start(rc2.data.recipe.id)
98
- const run2 = ap2.data?.run
99
- await sleep(2500) // 等数采样本落入 run2 窗口(1s 采样周期)
100
- const data2 = await get(`/runs/${run2.id}/data`)
101
- console.log(`run2: writes=${(data2.data?.writes ?? []).length}, daq=${(data2.data?.daq ?? []).length}`)
102
- if ((data2.data?.daq ?? []).length > 0) console.log('PASS run data: daq channels aggregated in window')
103
- else fail('run2 daq empty')
104
- const r2writes = data2.data?.writes ?? []
105
- // 产品隔离:run2 窗口只含自己的写入(160),不含 run1 的 185
106
- if (r2writes.length === 1 && r2writes[0].eng === 160) console.log('PASS product isolation: run2 window only contains its own writes')
107
- else fail(`isolation broken: ${JSON.stringify(r2writes.map(w => w.eng))}`)
108
-
109
- // close + 数据仍可查(历史批次)
110
- const cl = await post(`/runs/${run.id}/close`, {})
111
- if (cl.data?.run?.endedAt) console.log('PASS run closed (isolation window sealed)')
112
- else fail('run close failed')
113
-
114
- // ===== 清理 =====
115
- await fetch((process.env.DAQ_BASE ?? 'http://127.0.0.1:3000') + '/api/workshop/daq/' + dqA.id, { method: 'DELETE', headers: H })
116
- await del(`/${mkA.id}`)
117
- await del(`/${mkM.id}`)
118
- await del(`/recipes/${recipeId}`)
119
- await fx.cleanup()
120
- await del(`/recipes/${rc2.data.recipe.id}`)
121
- await del(`/templates/${tplEmpty.key}`)
122
- await fetch((process.env.DAQ_BASE ?? 'http://127.0.0.1:3000') + '/api/workshop/dcw/products/' + prod.id, { method: 'DELETE', headers: H })
123
- console.log('cleanup done')
124
-
125
- console.log(process.exitCode ? 'AUDIT FAILED' : 'AUDIT ALL PASS')
126
- process.exit(process.exitCode ?? 0)
@@ -1,108 +0,0 @@
1
- /** 一次性:dcw 产线卡片 编辑/级联删除 e2e + 双主题截图 */
2
- import puppeteer from 'puppeteer-core'
3
-
4
- const BASE = 'http://127.0.0.1:3000'
5
- const TOKEN = 'ut-3b8495cf61b34bd4b3c0e02fc242fc66'
6
- const H = { 'authorization': `Bearer ${TOKEN}`, 'content-type': 'application/json' }
7
- const jpost = (p, b) => fetch(`${BASE}/api/workshop/dcw${p}`, { method: 'POST', headers: H, body: JSON.stringify(b) }).then(r => r.json())
8
- const jget = p => fetch(`${BASE}/api/workshop/dcw${p}`, { headers: H }).then(r => r.json())
9
- const sleep = ms => new Promise(r => setTimeout(r, ms))
10
-
11
- // ---- 准备:建 scratch 产线 + 1 个挂靠节点(验证 purge 级联) ----
12
- const lineRes = await jpost('/lines', { name: '华书审-级联线', description: 'purge e2e' })
13
- const line = lineRes.data.line
14
- if (!line) throw new Error(`创建产线失败: ${JSON.stringify(lineRes)}`)
15
- const nodeRes = await jpost('', { templateRef: 'dcw-temp-sp', name: '华书审-级联节点', lineId: line.id })
16
- const node = nodeRes.data.node
17
- if (!node) throw new Error(`创建节点失败: ${JSON.stringify(nodeRes)}`)
18
- console.log('seeded line', line.id, 'node', node.id)
19
-
20
- const browser = await puppeteer.launch({
21
- executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
22
- headless: 'new',
23
- args: ['--no-sandbox', '--disable-gpu', '--window-size=1920,1200'],
24
- })
25
- const page = await browser.newPage()
26
- const errors = []
27
- page.on('pageerror', e => errors.push(`[pageerror] ${String(e).slice(0, 120)}`))
28
- await page.setViewport({ width: 1920, height: 1200, deviceScaleFactor: 1 })
29
- await page.setCookie({ name: 'token', value: TOKEN, domain: '127.0.0.1', path: '/' })
30
-
31
- const findCard = name => page.evaluateHandle((n) => {
32
- const cards = [...document.querySelectorAll('.line-card')]
33
- return cards.find(c => c.querySelector('.lc-name')?.textContent?.trim() === n)
34
- }, name)
35
-
36
- // ---- 1) 编辑流:悬停出铅笔 → 改名 → 保存 → 卡片/REST 双验证 ----
37
- await page.goto(`${BASE}/dcw`, { waitUntil: 'domcontentloaded', timeout: 90000 })
38
- await sleep(8000)
39
- await page.screenshot({ path: 'docs/audit/screenshots/huashu-survey2/glass-dark-dcw2.png' })
40
-
41
- const card = await findCard('华书审-级联线')
42
- if (!card || !(await card.asElement())) throw new Error('未找到 scratch 卡片')
43
- await card.asElement().hover()
44
- await sleep(400)
45
- await page.evaluate(() => {
46
- const cards = [...document.querySelectorAll('.line-card')]
47
- const c = cards.find(x => x.querySelector('.lc-name')?.textContent?.trim() === '华书审-级联线')
48
- c.querySelector('.lc-act:not(.danger)').click()
49
- })
50
- await sleep(600)
51
- let modalOn = await page.evaluate(() => !!document.querySelector('.modal') && document.querySelector('.m-title')?.textContent?.includes('编辑产线'))
52
- console.log('edit modal open:', modalOn ? 'OK' : 'FAIL')
53
- await page.screenshot({ path: 'docs/audit/screenshots/huashu-survey2/edit-modal.png' })
54
- await page.type('.modal .f .inp', '·已编辑')
55
- await page.evaluate(() => {
56
- const btns = [...document.querySelectorAll('.modal .m-actions .pill-btn')]
57
- btns.find(b => b.textContent.includes('保存'))?.click()
58
- })
59
- await sleep(2500)
60
- const editedUi = await page.evaluate(() => [...document.querySelectorAll('.lc-name')].some(x => x.textContent?.trim() === '华书审-级联线·已编辑'))
61
- const linesAfterEdit = await jget('/lines')
62
- const editedRest = linesAfterEdit.data.items?.some(l => l.name === '华书审-级联线·已编辑')
63
- ?? linesAfterEdit.data?.some?.(l => l.name === '华书审-级联线·已编辑')
64
- ?? JSON.stringify(linesAfterEdit).includes('华书审-级联线·已编辑')
65
- console.log('edit applied:', editedUi && editedRest ? 'OK (UI+REST)' : `FAIL ui=${editedUi} rest=${editedRest}`)
66
-
67
- // ---- 2) 删除流(purge 默认勾选):悬停出垃圾桶 → 弹窗 → 删除 → 卡片/REST 双验证 ----
68
- const card2 = await findCard('华书审-级联线·已编辑')
69
- await card2.asElement().hover()
70
- await sleep(400)
71
- await page.evaluate(() => {
72
- const cards = [...document.querySelectorAll('.line-card')]
73
- const c = cards.find(x => x.querySelector('.lc-name')?.textContent?.trim() === '华书审-级联线·已编辑')
74
- c.querySelector('.lc-act.danger').click()
75
- })
76
- await sleep(600)
77
- const delInfo = await page.evaluate(() => ({
78
- open: !!document.querySelector('.modal'),
79
- title: document.querySelector('.m-title')?.textContent ?? '',
80
- summary: document.querySelector('.del-summary')?.textContent ?? '',
81
- purgeChecked: document.querySelector('.del-purge input')?.checked ?? null,
82
- }))
83
- const purgeSummaryOk = delInfo.summary.includes('节点 1') && delInfo.summary.includes('不可恢复')
84
- console.log('delete modal:', delInfo.open && purgeSummaryOk && delInfo.purgeChecked === true ? 'OK' : `FAIL ${JSON.stringify(delInfo)}`)
85
- await page.screenshot({ path: 'docs/audit/screenshots/huashu-survey2/delete-modal.png' })
86
- await page.evaluate(() => {
87
- const btns = [...document.querySelectorAll('.modal .m-actions .pill-btn')]
88
- btns.find(b => b.textContent.trim() === '删除')?.click()
89
- })
90
- await sleep(3500)
91
- const goneUi = await page.evaluate(() => ![...document.querySelectorAll('.lc-name')].some(x => x.textContent?.includes('华书审-级联线')))
92
- const linesAfterDel = await jget('/lines')
93
- const nodesAfter = await jget('')
94
- const goneLine = !JSON.stringify(linesAfterDel).includes('华书审-级联线')
95
- const goneNode = !JSON.stringify(nodesAfter).includes('华书审-级联节点')
96
- console.log('purge cascade:', goneUi && goneLine && goneNode ? 'OK (卡片+产线+节点全清)' : `FAIL ui=${goneUi} line=${goneLine} node=${goneNode}`)
97
-
98
- // ---- 3) 浅色模式截图 ----
99
- await page.evaluateOnNewDocument(() => {
100
- localStorage.setItem('app', JSON.stringify({ isDark: false, sidebarCollapsed: false, accent: null }))
101
- })
102
- await page.goto(`${BASE}/dcw`, { waitUntil: 'domcontentloaded', timeout: 90000 })
103
- await sleep(8000)
104
- await page.screenshot({ path: 'docs/audit/screenshots/huashu-survey2/glass-light-dcw2.png' })
105
- console.log('light shot done')
106
-
107
- await browser.close()
108
- console.log(errors.length ? `PAGE ERRORS:\n${errors.join('\n')}` : 'no page errors')
@@ -1,144 +0,0 @@
1
- /** 一次性:Town 智控通道 UI 审计 —— 配方窗口展示/面板直写/越窗提示/检查器绑定 */
2
- import puppeteer from 'puppeteer-core'
3
-
4
- const TOKEN = 'ut-ffc1dfbbc0c1444c87c1ec69a9e8208c'
5
- const ROOT = 'http://127.0.0.1:3000'
6
- const H = { authorization: `Bearer ${TOKEN}`, 'content-type': 'application/json' }
7
- const fail = (m) => { console.error('FAIL:', m); process.exitCode = 1 }
8
- const sleep = (ms) => new Promise(r => setTimeout(r, ms))
9
- const { makeLineFixture } = await import('./_lib-dcw-line.mjs')
10
- const fx = await makeLineFixture(ROOT, H, 'UI审计产线')
11
-
12
- // 前置:产品/配方(带工艺窗口,nodeId 显式指向 dwTemp)/智控节点 REST 建好并绑定
13
- const prod = (await (await fetch(`${ROOT}/api/workshop/dcw/products`, { method: 'POST', headers: H, body: JSON.stringify({ name: 'UI审计产品', lineId: fx.line.id }) })).json()).data.product
14
- const dwTemp = (await (await fetch(`${ROOT}/api/workshop/dcw`, { method: 'POST', headers: H, body: JSON.stringify({ templateRef: 'dcw-temp-sp', name: 'UI审计-温度设定', posX: 700, posZ: 1500, lineId: fx.line.id }) })).json()).data.node
15
- const dwPres = (await (await fetch(`${ROOT}/api/workshop/dcw`, { method: 'POST', headers: H, body: JSON.stringify({ templateRef: 'dcw-pressure-sp', name: 'UI审计-压力设定', posX: 820, posZ: 1500, lineId: fx.line.id }) })).json()).data.node
16
- const twins = (await (await fetch(`${ROOT}/api/workshop/device-twins`, { headers: H })).json()).data.twins.filter(t => t.kind !== 'daq' && typeof t.posX === 'number')
17
- const dev = twins[0]
18
- await fetch(`${ROOT}/api/workshop/dcw/${dwTemp.id}/bind`, { method: 'POST', headers: H, body: JSON.stringify({ deviceId: dev.id }) })
19
- const rc = (await (await fetch(`${ROOT}/api/workshop/dcw/recipes`, { method: 'POST', headers: H, body: JSON.stringify({ productId: prod.id, name: 'UI审计配方', params: [{ templateRef: 'dcw-temp-sp', nodeId: dwTemp.id, value: 182, min: 176, max: 188 }] }) })).json()).data.recipe
20
- // 开跑(配方驱动采集 + 工艺窗口生效)
21
- const st = await fx.start(rc.id)
22
- console.log('line:', st.data?.line?.active)
23
-
24
- const browser = await puppeteer.launch({
25
- executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
26
- headless: 'new',
27
- args: ['--no-sandbox', '--disable-gpu', '--window-size=1600,1400'],
28
- })
29
- const page = await browser.newPage()
30
- await page.setViewport({ width: 1600, height: 1400 })
31
- await page.setCookie({ name: 'token', value: TOKEN, domain: '127.0.0.1', path: '/' })
32
- const pageErrors = []
33
- page.on('pageerror', (err) => pageErrors.push(String(err).slice(0, 160)))
34
- await page.goto(`${ROOT}/town`, { waitUntil: 'domcontentloaded', timeout: 90000 })
35
- for (let i = 0; i < 30; i++) {
36
- if (await page.evaluate(() => (window.__town?.scene?.deviceNodes?.size ?? 0) > 0)) break
37
- await sleep(1000)
38
- }
39
- await sleep(2500)
40
-
41
- // 编辑模式 + 选中绑定设备
42
- await page.evaluate(() => {
43
- const btns = [...document.querySelectorAll('button')]
44
- btns.find(b => b.textContent.trim() === '编辑')?.click()
45
- })
46
- await sleep(500)
47
- await page.evaluate((id) => { window.__town.scene.setSelected({ kind: 'device', id }) }, dev.id)
48
- await sleep(800)
49
- const panel = await page.evaluate(() => {
50
- const rows = [...document.querySelectorAll('.dcw-row')]
51
- return {
52
- rows: rows.length,
53
- hasDcwSect: document.body.textContent.includes('智控设定'),
54
- recipeWin: rows.map(r => r.querySelector('.dcw-win')?.textContent ?? '').find(t => t.includes('配方窗口')) ?? '',
55
- rowHasTarget: rows.some(r => r.textContent.includes('UI审计-温度设定')),
56
- }
57
- })
58
- console.log('device panel:', JSON.stringify(panel))
59
- if (panel.rows >= 1 && panel.rowHasTarget && panel.recipeWin.includes('176') && panel.recipeWin.includes('188')) {
60
- console.log(`PASS bound dcw channel shows recipe window: ${panel.recipeWin}`)
61
- }
62
- else fail(`panel/window wrong: ${JSON.stringify(panel)}`)
63
-
64
- // 面板直写:越窗 195 → 前端阻断提示(输入与点击分两拍:v-model/:disabled 在 nextTick 才生效)
65
- await page.evaluate(() => {
66
- const row = [...document.querySelectorAll('.dcw-row')].find(r => r.textContent.includes('UI审计-温度设定'))
67
- if (!row) return
68
- const inp = row.querySelector('.dcw-write input')
69
- const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set
70
- setter.call(inp, '195')
71
- inp.dispatchEvent(new Event('input', { bubbles: true }))
72
- })
73
- await sleep(200)
74
- await page.evaluate(() => {
75
- [...document.querySelectorAll('.dcw-row')].find(r => r.textContent.includes('UI审计-温度设定'))?.querySelector('.dcw-send')?.click()
76
- })
77
- await sleep(800)
78
- const overErr = await page.evaluate(() => [...document.querySelectorAll('.dcw-row .dcw-err')].map(e => e.textContent).find(t => t) ?? '')
79
- console.log('over-window:', overErr.slice(0, 70))
80
- if (overErr.includes('配方工艺窗口')) console.log('PASS over-window blocked frontend with hint')
81
- else fail(`over-window hint missing: ${overErr}`)
82
-
83
- // 窗内 180 → write 成功,server ACK
84
- await page.evaluate(() => {
85
- const row = [...document.querySelectorAll('.dcw-row')].find(r => r.textContent.includes('UI审计-温度设定'))
86
- if (!row) return
87
- const inp = row.querySelector('.dcw-write input')
88
- const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set
89
- setter.call(inp, '180')
90
- inp.dispatchEvent(new Event('input', { bubbles: true }))
91
- })
92
- await sleep(200)
93
- await page.evaluate(() => {
94
- [...document.querySelectorAll('.dcw-row')].find(r => r.textContent.includes('UI审计-温度设定'))?.querySelector('.dcw-send')?.click()
95
- })
96
- await sleep(1200)
97
- const getNode = async (id) => (await (await fetch(`${ROOT}/api/workshop/dcw`, { headers: H })).json()).data.nodes.find(n => n.id === id)
98
- const dwNode = await getNode(dwTemp.id)
99
- console.log('in-window write: node value =', dwNode?.value, dwNode?.state)
100
- if (dwNode?.value === 180 && dwNode?.state === 'ok') console.log('PASS in-panel write dispatched')
101
- else fail(`write failed: ${dwNode?.value}/${dwNode?.state}`)
102
-
103
- // 选中智控节点 → 检查器(DCW 分支:窗口 + write + 设备绑定)
104
- await page.evaluate((id) => { window.__town.scene.setSelected({ kind: 'device', id }) }, dwPres.id)
105
- await sleep(700)
106
- const sel2 = await page.evaluate(() => ({
107
- title: [...document.querySelectorAll('.inspector h3')].map(h => h.textContent).find(t => t?.includes('智控')),
108
- chip: [...document.querySelectorAll('.ins-chip')].map(c => c.textContent.trim()).find(t => t === 'DCW'),
109
- hasBind: document.body.textContent.includes('选择设备实例…'),
110
- hasWrite: document.body.textContent.includes('下发 write'),
111
- }))
112
- console.log('dcw selected:', JSON.stringify(sel2))
113
- if (!(sel2.title && sel2.chip && sel2.hasBind && sel2.hasWrite)) fail(`dcw inspector wrong: ${JSON.stringify(sel2)}`)
114
- else {
115
- await page.evaluate(() => {
116
- const sel = [...document.querySelectorAll('.daq-bind-bar select')].find(s => s.textContent.includes('选择设备实例…'))
117
- if (!sel) return
118
- const setter = Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, 'value').set
119
- const opt = [...sel.options].find(o => o.value)
120
- setter.call(sel, opt.value)
121
- sel.dispatchEvent(new Event('change', { bubbles: true }))
122
- })
123
- await sleep(300)
124
- await page.evaluate(() => {
125
- const bars = [...document.querySelectorAll('.daq-bind-bar')]
126
- const bar = bars.find(b => [...b.querySelectorAll('button')].some(x => x.textContent.trim() === '绑定'))
127
- bar?.querySelector('button')?.click()
128
- })
129
- await sleep(1200)
130
- const bound = (await (await fetch(`${ROOT}/api/workshop/dcw`, { headers: H })).json()).data.nodes.find(n => n.id === dwPres.id)
131
- if (bound?.deviceBindingId) console.log('PASS dcw node bound to device via inspector')
132
- else fail(`inspector bind failed: ${bound?.deviceBindingId}`)
133
- }
134
-
135
- await page.screenshot({ path: 'docs/audit/screenshots/town-dcw-channel.png' })
136
- if (pageErrors.length) { console.error('pageerrors:', pageErrors.slice(0, 3)); fail('page errors present') }
137
-
138
- // 清理(停线;删除审计节点/配方/产品)
139
- await fx.cleanup()
140
- for (const id of [dwTemp.id, dwPres.id]) await fetch(`${ROOT}/api/workshop/dcw/${id}`, { method: 'DELETE', headers: H })
141
- await fetch(`${ROOT}/api/workshop/dcw/recipes/${rc.id}`, { method: 'DELETE', headers: H })
142
- await fetch(`${ROOT}/api/workshop/dcw/products/${prod.id}`, { method: 'DELETE', headers: H })
143
- await browser.close()
144
- console.log(process.exitCode ? 'AUDIT FAILED' : 'AUDIT ALL PASS')
@@ -1,81 +0,0 @@
1
- /** 一次性:创建产线示例(产品/Recipe/mock PLC 节点)+ 越窗联锁验证 */
2
- const TOKEN = 'ut-ffc1dfbbc0c1444c87c1ec69a9e8208c'
3
- const ROOT = 'http://127.0.0.1:3000'
4
- const H = { authorization: `Bearer ${TOKEN}`, 'content-type': 'application/json' }
5
- const j = (r) => r.json()
6
- const post = (u, b) => fetch(ROOT + u, { method: 'POST', headers: H, body: JSON.stringify(b) }).then(j)
7
- const get = (u) => fetch(ROOT + u, { headers: H }).then(j)
8
-
9
- // ===== 1. 产品 ×2 =====
10
- const { makeLineFixture } = await import('./_lib-dcw-line.mjs')
11
- const fxA = await makeLineFixture(ROOT, H, '1号产线')
12
- const fxB = await makeLineFixture(ROOT, H, '2号产线')
13
- const pA = (await post('/api/workshop/dcw/products', { name: '0.8mm 光学膜', description: '高端光学级 PET 膜(示例产品 A)', lineId: fxA.line.id })).data.product
14
- const pB = (await post('/api/workshop/dcw/products', { name: '12μm 离型膜', description: '薄型离型保护膜(示例产品 B)', lineId: fxB.line.id })).data.product
15
- console.log('products:', pA.id, pA.name, '|', pB.id, pB.name)
16
-
17
- // ===== 2. mock PLC 节点(数采 + 智控),绑定到已有设备 =====
18
- const twins = (await get('/api/workshop/device-twins')).data.twins.filter(t => t.kind !== 'daq' && typeof t.posX === 'number')
19
- const dev = twins[0]
20
- console.log('bind target:', dev?.name)
21
- const nodes = {}
22
- const mk = [
23
- ['daq', 'daq-temp-tc', '温度传感器(示例)', dev?.id, fxA.line.id],
24
- ['daq', 'daq-pressure-tx', '熔体压力变送器(示例)', dev?.id, fxB.line.id],
25
- ['dcw', 'dcw-temp-sp', '温度设定器(示例)', dev?.id, fxA.line.id],
26
- ['dcw', 'dcw-temp-sp', '温度设定器·2号线(示例)', dev?.id, fxB.line.id],
27
- ['dcw', 'dcw-pressure-sp', '压力设定器(示例)', dev?.id, fxA.line.id],
28
- ]
29
- for (const [kind, tpl, name, deviceId, lineId] of mk) {
30
- const base = kind === 'daq' ? '/api/workshop/daq' : '/api/workshop/dcw'
31
- // 每线独立节点(产线隔离:配方参数只能引用本线节点);场景光晕 1号蓝/2号黄
32
- const r = await post(base, { templateRef: tpl, name, posX: 600 + Math.random() * 400, posZ: 1500 + Math.random() * 300, deviceBindingId: deviceId ?? null, lineId })
33
- const n = r.data?.node
34
- if (!n) { console.error('FAIL create node', tpl, JSON.stringify(r).slice(0, 120)); process.exit(1) }
35
- if (name.includes('2号线')) nodes[`${tpl}-2`] = n
36
- else nodes[tpl] = n
37
- console.log('node:', kind, n.templateRef, n.id, '| domain', n.min, '~', n.max, n.unit)
38
- }
39
-
40
- // ===== 3. Recipe(各自工艺窗口;value 必须在自身窗口内) =====
41
- const rA = (await post('/api/workshop/dcw/recipes', {
42
- productId: pA.id,
43
- name: 'A-标准工艺',
44
- description: '光学膜标准批次:温度窗口收紧到 ±5℃',
45
- params: [
46
- { templateRef: 'dcw-temp-sp', nodeId: nodes['dcw-temp-sp'].id, value: 182, min: 176, max: 188 },
47
- { templateRef: 'dcw-pressure-sp', nodeId: nodes['dcw-pressure-sp'].id, value: 0.92, min: 0.85, max: 1.0 },
48
- ],
49
- })).data.recipe
50
- const rB = (await post('/api/workshop/dcw/recipes', {
51
- productId: pB.id,
52
- name: 'B-低温工艺',
53
- description: '离型膜低温批次:与 A 产品窗口完全不同(产品隔离)',
54
- params: [
55
- { templateRef: 'dcw-temp-sp', nodeId: nodes['dcw-temp-sp-2'].id, value: 162, min: 156, max: 170 },
56
- ],
57
- })).data.recipe
58
- if (!rA || !rB) { console.error('FAIL: recipes'); process.exit(1) }
59
- console.log('recipes:', rA.id, rA.name, JSON.stringify(rA.params), '|', rB.id, rB.name)
60
-
61
- // ===== 4. 越窗联锁验证:开跑 A,写 195(节点全局 150~200 内、配方上限 188 外)→ 拒绝 =====
62
- const startA = await fxA.start(rA.id)
63
- console.log('line A:', startA.data?.line?.active, startA.data?.line?.recipeName)
64
- const wIn = await post(`/api/workshop/dcw/${nodes['dcw-temp-sp'].id}/write`, { value: 180 })
65
- console.log('write 180 (in window):', wIn.data?.outcome?.ok)
66
- const wOut = await post(`/api/workshop/dcw/${nodes['dcw-temp-sp'].id}/write`, { value: 195 })
67
- console.log('write 195 (over recipe max 188):', wOut.code, '|', (wOut.message ?? '').slice(0, 70))
68
- let pass = true
69
- if (wIn.data?.outcome?.ok !== true) { console.error('FAIL: in-window write failed'); pass = false }
70
- if (wOut.code !== 'VALIDATION_ERROR') { console.error('FAIL: over-window write accepted'); pass = false }
71
- // 切到 B 再写 195 → 仍拒(B 窗口 156~170);写 165 → 成功(在 A 下会被拒的值)
72
- const startB = await fxA.stop()
73
- await fxB.start(rB.id)
74
- // B 线联锁作用于 2号线的温度节点(产线隔离:A 线节点不受 B 配方约束)
75
- const wB1 = await post(`/api/workshop/dcw/${nodes['dcw-temp-sp-2'].id}/write`, { value: 195 })
76
- const wB2 = await post(`/api/workshop/dcw/${nodes['dcw-temp-sp-2'].id}/write`, { value: 165 })
77
- console.log('recipe B: write 195 →', wB1.code, '| write 165 →', wB2.data?.outcome?.ok ? 'OK' : 'FAIL')
78
- if (wB1.code === 'VALIDATION_ERROR' && wB2.data?.outcome?.ok) console.log('PASS recipe switch changes interlock window')
79
- else { console.error('FAIL: recipe-B interlock wrong'); pass = false }
80
- await fxB.stop()
81
- console.log(pass ? 'EXAMPLES + INTERLOCK ALL PASS' : 'FAILED')
@@ -1,19 +0,0 @@
1
- /** 一次性:浅色模式 dcw 页复现截图 */
2
- import puppeteer from 'puppeteer-core'
3
- const TOKEN = 'ut-3b8495cf61b34bd4b3c0e02fc242fc66'
4
- const browser = await puppeteer.launch({
5
- executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
6
- headless: 'new',
7
- args: ['--no-sandbox', '--disable-gpu', '--window-size=1920,1200'],
8
- })
9
- const page = await browser.newPage()
10
- await page.setViewport({ width: 1920, height: 1200, deviceScaleFactor: 1 })
11
- await page.setCookie({ name: 'token', value: TOKEN, domain: '127.0.0.1', path: '/' })
12
- await page.evaluateOnNewDocument(() => {
13
- localStorage.setItem('app', JSON.stringify({ isDark: false, sidebarCollapsed: false, accent: null }))
14
- })
15
- await page.goto('http://127.0.0.1:3000/dcw', { waitUntil: 'domcontentloaded', timeout: 90000 })
16
- await new Promise(r => setTimeout(r, 8000))
17
- await page.screenshot({ path: 'docs/audit/screenshots/huashu-survey2/light-dcw-before.png' })
18
- console.log('shot light dcw')
19
- await browser.close()