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
@@ -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()