agentworkshop 0.7.41 → 0.7.44

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 (265) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/B8uy9iRW.js +1 -0
  3. package/.output/public/_nuxt/BGTYYQH-.js +1 -0
  4. package/.output/public/_nuxt/BUmHEJ77.js +2 -0
  5. package/.output/public/_nuxt/BY7YrV_D.js +1 -0
  6. package/.output/public/_nuxt/Bqcgz95s.js +18 -0
  7. package/.output/public/_nuxt/C7UlqPeD.js +1 -0
  8. package/.output/public/_nuxt/CTmDn-YP.js +1 -0
  9. package/.output/public/_nuxt/Cs8pVeVG.js +1 -0
  10. package/.output/public/_nuxt/DKySmNPI.js +14 -0
  11. package/.output/public/_nuxt/Di0NY_ht.js +1 -0
  12. package/.output/public/_nuxt/Du9v6qGB.js +1 -0
  13. package/.output/public/_nuxt/{DGbd-UiG.js → EHlEMRii.js} +1 -1
  14. package/.output/public/_nuxt/Eke1fs-U.js +1 -0
  15. package/.output/public/_nuxt/{DeJykBFf.js → H0BcqZtT.js} +1 -1
  16. package/.output/public/_nuxt/{C4oW1HsE.js → HSYEkkce.js} +1 -1
  17. package/.output/public/_nuxt/{D_OTvQza.js → J9oU00D1.js} +1 -1
  18. package/.output/public/_nuxt/OmpTerminalPanel.BxR5-lvi.css +1 -0
  19. package/.output/public/_nuxt/SSyAPaHc.js +1 -0
  20. package/.output/public/_nuxt/TownView.li4EMQxK.css +1 -0
  21. package/.output/public/_nuxt/VdLk4jLE2.js +1 -0
  22. package/.output/public/_nuxt/_id_.BhsXoEuk.css +1 -0
  23. package/.output/public/_nuxt/_id_.DQyj-WKN.css +1 -0
  24. package/.output/public/_nuxt/{_wsId_.B4WiqkIS.css → _wsId_.CTx-BlfF.css} +1 -1
  25. package/.output/public/_nuxt/aShsv_rG.js +19 -0
  26. package/.output/public/_nuxt/{yF0aYMF1.js → aesgXKSr.js} +3 -3
  27. package/.output/public/_nuxt/agents.B21nUEUX.css +1 -0
  28. package/.output/public/_nuxt/aml.ekTjxFkf.css +1 -0
  29. package/.output/public/_nuxt/builds/latest.json +1 -1
  30. package/.output/public/_nuxt/builds/meta/b5506ef0-f48e-4f14-a6c0-d65e505d0b09.json +1 -0
  31. package/.output/public/_nuxt/channel-templates.DplM1pJ3.css +1 -0
  32. package/.output/public/_nuxt/daq.BdVmoIfe.css +1 -0
  33. package/.output/public/_nuxt/dcw.DCgyzpWV.css +1 -0
  34. package/.output/public/_nuxt/{default.J32SgqFY.css → default.Bh3L2HU8.css} +1 -1
  35. package/.output/public/_nuxt/lHAxdSsj.js +1 -0
  36. package/.output/public/_nuxt/pages.j9rzRocr.css +1 -0
  37. package/.output/public/_nuxt/plugins.DhiZbHU8.css +1 -0
  38. package/.output/public/_nuxt/settings.BRx9rIDg.css +1 -0
  39. package/.output/public/_nuxt/teams.BLlOPB_Z.css +1 -0
  40. package/.output/public/_nuxt/tokens.De8xzszn.css +1 -0
  41. package/.output/public/_nuxt/workshop.D1jFNkrn.css +1 -0
  42. package/.output/server/chunks/_/nitro.mjs +748 -733
  43. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs → OmpTerminalPanel-CVvxpsF7.mjs} +15 -15
  44. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs.map → OmpTerminalPanel-CVvxpsF7.mjs.map} +1 -1
  45. package/.output/server/chunks/build/{TownView--otsnr_7.mjs → TownView-CJ6IsDCc.mjs} +226 -225
  46. package/.output/server/chunks/build/{TownView--otsnr_7.mjs.map → TownView-CJ6IsDCc.mjs.map} +1 -1
  47. package/.output/server/chunks/build/{_id_-Brv-JSvr.mjs → _id_-CVD_H0ir.mjs} +143 -142
  48. package/.output/server/chunks/build/_id_-CVD_H0ir.mjs.map +1 -0
  49. package/.output/server/chunks/build/{_id_-D9pl1OZy.mjs → _id_-CtxMb3qp.mjs} +41 -41
  50. package/.output/server/chunks/build/_id_-CtxMb3qp.mjs.map +1 -0
  51. package/.output/server/chunks/build/{_wsId_-BASfDf0s.mjs → _wsId_-DpY3T-md.mjs} +514 -444
  52. package/.output/server/chunks/build/{_wsId_-BASfDf0s.mjs.map → _wsId_-DpY3T-md.mjs.map} +1 -1
  53. package/.output/server/chunks/build/{agents-CLQqJF2y.mjs → agents-DsCkuXDV.mjs} +49 -46
  54. package/.output/server/chunks/build/agents-DsCkuXDV.mjs.map +1 -0
  55. package/.output/server/chunks/build/{aml-_7FdFL2p.mjs → aml-CT0xKGKI.mjs} +122 -105
  56. package/.output/server/chunks/build/aml-CT0xKGKI.mjs.map +1 -0
  57. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +117 -0
  58. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -0
  59. package/.output/server/chunks/build/{channel-templates-p6SZNjlM.mjs → channel-templates-Dla9FbYa.mjs} +49 -37
  60. package/.output/server/chunks/build/channel-templates-Dla9FbYa.mjs.map +1 -0
  61. package/.output/server/chunks/build/{daq-DkMvD8sg.mjs → daq-DWWSKGAV.mjs} +89 -88
  62. package/.output/server/chunks/build/daq-DWWSKGAV.mjs.map +1 -0
  63. package/.output/server/chunks/build/{dcw-C1jgVJkO.mjs → dcw-CT8k17_E.mjs} +44 -43
  64. package/.output/server/chunks/build/dcw-CT8k17_E.mjs.map +1 -0
  65. package/.output/server/chunks/build/{default-BE4r0FZN.mjs → default-D3525UFX.mjs} +16 -15
  66. package/.output/server/chunks/build/{default-BE4r0FZN.mjs.map → default-D3525UFX.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs → monitor-Dh2Kvaq5.mjs} +2 -2
  68. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs.map → monitor-Dh2Kvaq5.mjs.map} +1 -1
  69. package/.output/server/chunks/build/{pages-B0bUWnC6.mjs → pages-BHcSBM2D.mjs} +24 -18
  70. package/.output/server/chunks/build/pages-BHcSBM2D.mjs.map +1 -0
  71. package/.output/server/chunks/build/{plugins-lGlUr1lj.mjs → plugins-BNgIi61W.mjs} +23 -17
  72. package/.output/server/chunks/build/plugins-BNgIi61W.mjs.map +1 -0
  73. package/.output/server/chunks/build/{settings-Ddd1qx2Z.mjs → settings-ipYBDWdn.mjs} +45 -44
  74. package/.output/server/chunks/build/settings-ipYBDWdn.mjs.map +1 -0
  75. package/.output/server/chunks/build/{teams-MEDLZdMn.mjs → teams-5lx-CwFa.mjs} +47 -44
  76. package/.output/server/chunks/build/teams-5lx-CwFa.mjs.map +1 -0
  77. package/.output/server/chunks/build/{tokens-C7fTM5C2.mjs → tokens-q-IDT8Io.mjs} +73 -53
  78. package/.output/server/chunks/build/tokens-q-IDT8Io.mjs.map +1 -0
  79. package/.output/server/chunks/build/{town-CoQdblbZ.mjs → town-QJWB5wng.mjs} +3 -2
  80. package/.output/server/chunks/build/town-QJWB5wng.mjs.map +1 -0
  81. package/.output/server/chunks/build/{workshop-BL5bhfs0.mjs → workshop-BIlCj_ZP.mjs} +45 -45
  82. package/.output/server/chunks/build/workshop-BIlCj_ZP.mjs.map +1 -0
  83. package/.output/server/chunks/routes/renderer.mjs +1 -1
  84. package/.output/server/chunks/virtual/entry.mjs +637 -86
  85. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  86. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  87. package/.output/server/package.json +1 -1
  88. package/README-zh.md +13 -3
  89. package/README.md +13 -3
  90. package/app/components/AppHeader.vue +961 -959
  91. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  92. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  93. package/app/components/workshop/AgentLanesView.vue +998 -998
  94. package/app/components/workshop/ArtifactCard.vue +120 -120
  95. package/app/components/workshop/AssetLibrary.vue +452 -452
  96. package/app/components/workshop/ChannelSessionList.vue +812 -804
  97. package/app/components/workshop/CommandPalette.vue +269 -269
  98. package/app/components/workshop/Composer.vue +827 -827
  99. package/app/components/workshop/DeviceTwinPanel.vue +643 -643
  100. package/app/components/workshop/EventBlock.vue +602 -602
  101. package/app/components/workshop/FileSelectorModal.vue +188 -188
  102. package/app/components/workshop/InspectorPanel.vue +301 -301
  103. package/app/components/workshop/MemoryPanel.vue +364 -364
  104. package/app/components/workshop/MultiChannelView.vue +189 -189
  105. package/app/components/workshop/TaskBoardView.vue +686 -686
  106. package/app/components/workshop/TaskInspectorDrawer.vue +390 -390
  107. package/app/components/workshop/TranscriptTimeline.vue +601 -601
  108. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  109. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  110. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  111. package/app/components/workshop/blocks/ClusterMember.vue +95 -93
  112. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  113. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  114. package/app/components/workshop/blocks/ClusterStatus.vue +149 -147
  115. package/app/components/workshop/blocks/ClusterTool.vue +158 -158
  116. package/app/components/workshop/terminal/OmpTerminalPanel.vue +1011 -1011
  117. package/app/components/workshop/town/TownView.vue +56 -56
  118. package/app/middleware/locale-cookie.global.ts +22 -0
  119. package/app/pages/aml/index.vue +24 -2
  120. package/app/pages/daq/[id].vue +11 -11
  121. package/app/pages/daq/index.vue +2316 -2316
  122. package/app/pages/dcw/[id].vue +18 -19
  123. package/app/pages/dcw/index.vue +3 -3
  124. package/app/pages/index.vue +987 -981
  125. package/app/pages/plugins/index.vue +317 -311
  126. package/app/pages/settings.vue +1564 -1562
  127. package/app/pages/tokens.vue +15 -15
  128. package/app/pages/workshop/agents.vue +612 -609
  129. package/app/pages/workshop/channel-templates.vue +18 -11
  130. package/app/pages/workshop/index.vue +668 -668
  131. package/app/pages/workshop/teams.vue +743 -740
  132. package/app/pages/workshop/w/[wsId].vue +704 -704
  133. package/app/plugins/locale-restore.client.ts +16 -1
  134. package/app/utils/builtin-catalog.ts +104 -0
  135. package/config.yml +170 -170
  136. package/docs/full-test-plan.md +2 -3
  137. package/i18n/locales/en.ts +293 -35
  138. package/i18n/locales/zh-CN.ts +265 -7
  139. package/package.json +2 -2
  140. package/scripts/_dbg-perms-e2e.mjs +132 -109
  141. package/scripts/_demo-agentteam-capture.mjs +278 -0
  142. package/scripts/_e2e-ui-functional.mjs +371 -0
  143. package/scripts/_i18n-en-cjk-scan.mjs +28 -0
  144. package/scripts/_i18n-en-verify.mjs +107 -0
  145. package/scripts/_i18n-extra-checks.mjs +53 -0
  146. package/scripts/_i18n-scan-hardcoded.mjs +180 -0
  147. package/scripts/_i18n-verify-keys.mjs +50 -0
  148. package/scripts/_loop-biax-campaign.mjs +15 -9
  149. package/scripts/_sweep-button-contrast.mjs +87 -0
  150. package/scripts/ui/record-demo.mjs +557 -0
  151. package/server/plugins-builtin/diag-bridge/index.mjs +608 -661
  152. package/server/plugins-builtin/rag-bridge/index.mjs +57 -133
  153. package/server/services/workshop/daq/drivers.ts +11 -0
  154. package/.output/public/_nuxt/88GOowgO2.js +0 -1
  155. package/.output/public/_nuxt/BN16aRdQ.js +0 -1
  156. package/.output/public/_nuxt/BWVhZntO.js +0 -1
  157. package/.output/public/_nuxt/BXxH0UQE.js +0 -1
  158. package/.output/public/_nuxt/BsROmY89.js +0 -1
  159. package/.output/public/_nuxt/C0ZrS1KL.js +0 -19
  160. package/.output/public/_nuxt/C4s_niy-.js +0 -14
  161. package/.output/public/_nuxt/D6mbFA-a.js +0 -1
  162. package/.output/public/_nuxt/DS8qj8EL.js +0 -1
  163. package/.output/public/_nuxt/DUjW5Yq5.js +0 -1
  164. package/.output/public/_nuxt/Dap5PmTL.js +0 -2
  165. package/.output/public/_nuxt/Dqw1lpr-.js +0 -1
  166. package/.output/public/_nuxt/DvLxILQP.js +0 -1
  167. package/.output/public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css +0 -1
  168. package/.output/public/_nuxt/TownView.f-YOdXRs.css +0 -1
  169. package/.output/public/_nuxt/_id_.D9ymtHB5.css +0 -1
  170. package/.output/public/_nuxt/_id_.jf-_8E_c.css +0 -1
  171. package/.output/public/_nuxt/agents.ZD0rVdHE.css +0 -1
  172. package/.output/public/_nuxt/aml.BN8ZEW4h.css +0 -1
  173. package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +0 -1
  174. package/.output/public/_nuxt/channel-templates.BOtahzPi.css +0 -1
  175. package/.output/public/_nuxt/daq.DjSgY94l.css +0 -1
  176. package/.output/public/_nuxt/dcw.8Y7FqCVN.css +0 -1
  177. package/.output/public/_nuxt/eqq3wWQF.js +0 -18
  178. package/.output/public/_nuxt/pages.D7aSDlUI.css +0 -1
  179. package/.output/public/_nuxt/plugins.sb4nDGqr.css +0 -1
  180. package/.output/public/_nuxt/qr6R6Ha1.js +0 -1
  181. package/.output/public/_nuxt/settings.BTgR-NiE.css +0 -1
  182. package/.output/public/_nuxt/teams.CxnxKVVs.css +0 -1
  183. package/.output/public/_nuxt/tokens.BFY7qv4f.css +0 -1
  184. package/.output/public/_nuxt/workshop.CR_QzeAN.css +0 -1
  185. package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +0 -1
  186. package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +0 -1
  187. package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +0 -1
  188. package/.output/server/chunks/build/aml-_7FdFL2p.mjs.map +0 -1
  189. package/.output/server/chunks/build/channel-templates-p6SZNjlM.mjs.map +0 -1
  190. package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +0 -1
  191. package/.output/server/chunks/build/dcw-C1jgVJkO.mjs.map +0 -1
  192. package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +0 -1
  193. package/.output/server/chunks/build/plugins-lGlUr1lj.mjs.map +0 -1
  194. package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +0 -1
  195. package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +0 -1
  196. package/.output/server/chunks/build/tokens-C7fTM5C2.mjs.map +0 -1
  197. package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +0 -1
  198. package/.output/server/chunks/build/workshop-BL5bhfs0.mjs.map +0 -1
  199. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.continue.json +0 -1
  200. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.json +0 -1
  201. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/054bb4bc4e4217a2ab0b0c6b663747214a9af464f5568ea60e784704e340bb0f.source +0 -153
  202. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/0554197c3d2bac203a1f5c48a5d52495d1336db1bd7aa4f4c19875810363e684.source +0 -153
  203. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/05c203d12a954fffba942e1d626e3f5fec05b18a5aef2bac003b7884a4b77406.source +0 -431
  204. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/145a6e6ba811af35aed31e0cc3211f53706a14980fa069ee9e3c1591139f96f0.source +0 -180
  205. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/1ae0fb281f97899c025e368ca73f41349b01fb5f85b19e08d7ebccff49095ed5.source +0 -112
  206. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/20ee9967aa0541c516db7575bdd4a1a745939bc7016bd10d7635903113edb8ec.source +0 -227
  207. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/233751843aeba9d4c5263f275b8102de00443c06f286918cbd23e0b6729e01aa.source +0 -131
  208. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/263c2e05b425e5c322e60c6475279f963bab3a873eb521b21df7fec935a46597.source +0 -160
  209. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/2ac5eaac28eaaee2178c4b32014df8e732f9dd432a285a872f5b7f31c1395fa4.source +0 -157
  210. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/33a0db0d2d95d2c11d0720090458e5fba1425376f5ceb5b422d1d3471be3226b.source +0 -348
  211. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/359e474ae83db35e4615d3728de6bf694b64d4dce9b536730a3b6518f9c0494a.source +0 -296
  212. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/37a4c3c31c4b70f6b719c53d1e9c4fcba603f31adfdd11bb6ef9f0d094923c56.source +0 -285
  213. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/461feca1c14a695eb8b0f17a6f95fe97eeceabc0510faaea4ba6d25bde147d8d.source +0 -217
  214. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/4cfadbda8591f29d5e1e230dc000e701b756e850441b3900fb596a4d2f6e98c2.source +0 -301
  215. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/50ca2810cf0b248c96948994c0c404531bbad6e553166b6816b3b03bfa0f75d2.source +0 -151
  216. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/52d9e8cb591a9ae86e238c3620a610cd386717bee222c0f37b25b2ac7e523dc4.source +0 -135
  217. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/6c87daafa4c006560a954636a97333f6123153c9d34d96203f7ee3a14e556357.source +0 -156
  218. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/77bc47854b577900621cacf1697f81fa2bc005af129d37614a97a3441c08f99f.source +0 -72
  219. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/7bbb789d3a527817118cf8399ed1861d6a962ade10878fd07223435d333a7089.source +0 -469
  220. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/86b7c1daafc8b60ba9982dde5bf1bcc74265709483c176e71f23ec6fc267451f.source +0 -259
  221. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/8df66d62bd41984d0970e8236882080c5085ac937d07a29779463d6a03b37c76.source +0 -97
  222. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/9962f2d1b3a85137bd40cc835725600b39f89ee02a27c06b2e0402e1eafde115.source +0 -277
  223. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a1090ea066b792cb201739f4994e37bf7c12f52e805239a1eab87f18a537f266.source +0 -171
  224. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a5241091650134d0919897e086a606a3846c8b2b54f8b4c84a8696c145ac3e9e.source +0 -425
  225. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/af19fa4c6e34d5540028be4b17600161283af3a2a2dfc61a3fdc0834436a0c14.source +0 -99
  226. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3713d78e2b2f93905ff6be8d58a8d0a2f42dea322eb67c987fda22ff6a084d5.source +0 -325
  227. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3849943c3aff102d1af815631fc843a2a52c17646a4b04696ece323e483bbec.source +0 -332
  228. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/bac735a3803a6650b7f1eb8f587e6dc5c68ea055000c3c99a11789438b78e837.source +0 -43
  229. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d32c24d61eb8b33c73e5a8fc7e4dc7ef437aed238ee4371c2b00617e6104090a.source +0 -154
  230. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d5170dc9a9879fda04fdf91d8a110d4efb6787ee38dda596d4da899883d36a72.source +0 -531
  231. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/dc59bcd7bb397be63ba2f2c3fec23f3782dcb17d2d75a9981eeced761f33eb32.source +0 -439
  232. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/eb5ff8cf66b92aec7bf6726781d8df74faa2b030c3aaac17d6b00c1fc04c9b32.source +0 -323
  233. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f10615a6fae18436e70d1201b2d44fdae3174a3aa7bb4db97dea1b3ed291d721.source +0 -433
  234. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f36d3e271668bc1260c2823542d22dbf1d0f7041ff16b1ac175bce2256e582ca.source +0 -280
  235. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f94449380af09f31ac352152007146a75cc80bae8d6411ffe57b2c56f933b0ff.source +0 -117
  236. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/fe4dfd81178fd6b648335f6405d9ede71319aebde796008e50db21f8adf44c99.source +0 -160
  237. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/ffb4e3aa548cfdadabaa44ab599f9b6a3ca6288176a2cc7a4b2fc2a12b5fb848.source +0 -101
  238. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +0 -14
  239. package/scripts/_dbg-audit-all-pages.mjs +0 -43
  240. package/scripts/_dbg-daq-frames-e2e.mjs +0 -118
  241. package/scripts/_dbg-daq-rowstyle-verify.mjs +0 -112
  242. package/scripts/_dbg-hitl-timeout-e2e.mjs +0 -93
  243. package/scripts/_dbg-live-line-e2e.mjs +0 -279
  244. package/scripts/_dbg-minimal-omp.mjs +0 -77
  245. package/scripts/_dbg-mode-nav.mjs +0 -173
  246. package/scripts/_dbg-real-scenario-timeline.log +0 -55
  247. package/scripts/_dbg-team-repro.mjs +0 -76
  248. package/scripts/_dbg-town-agents-probe.mjs +0 -60
  249. package/scripts/_dbg-visual-acceptance.mjs +0 -63
  250. package/scripts/_townview_style.css +0 -1185
  251. package/scripts/_townview_template.html +0 -1215
  252. package/server/data/agent-node-bindings.json +0 -554
  253. package/server/data/daq-templates.json +0 -16
  254. package/server/data/daqs.json +0 -7464
  255. package/server/data/dcw-lines.json +0 -1787
  256. package/server/data/dcw-products.json +0 -1626
  257. package/server/data/dcw-recipes.json +0 -4672
  258. package/server/data/dcw-rollback.json +0 -20754
  259. package/server/data/dcw-runs.json +0 -6354
  260. package/server/data/dcw-templates.json +0 -146
  261. package/server/data/dcw-writes.json +0 -15650
  262. package/server/data/dcws.json +0 -9033
  263. package/server/data/device-twins.json +0 -133
  264. package/server/data/line-runs.json +0 -322
  265. package/server/data/scene-layouts.json +0 -277
@@ -1407,29 +1407,29 @@ const daq = useDaqStream()
1407
1407
  /** 智控流单例(写控制;与数采对称:模板目录/节点/场景/绑定) */
1408
1408
  const dcw = useDcwStream()
1409
1409
  /** 智控模板目录(server 权威;与 daqTemplates 同构投影) */
1410
- const dcwTemplates = reactive(dcw.templates.map(t => ({
1411
- id: t.key,
1412
- name: t.name,
1413
- code: t.code,
1414
- ch: t.ch,
1415
- unit: t.unit,
1416
- min: t.min,
1417
- max: t.max,
1418
- decimals: t.decimals,
1419
- icon: t.icon,
1410
+ const dcwTemplates = reactive(dcw.templates.map(tpl => ({
1411
+ id: tpl.key,
1412
+ name: catalogTplName(t, tpl),
1413
+ code: tpl.code,
1414
+ ch: tpl.ch,
1415
+ unit: tpl.unit,
1416
+ min: tpl.min,
1417
+ max: tpl.max,
1418
+ decimals: tpl.decimals,
1419
+ icon: tpl.icon,
1420
1420
  })))
1421
1421
  watch(() => dcw.templates, (list) => {
1422
1422
  if (!list?.length) return
1423
- dcwTemplates.splice(0, dcwTemplates.length, ...list.map(t => ({
1424
- id: t.key,
1425
- name: t.name,
1426
- code: t.code,
1427
- ch: t.ch,
1428
- unit: t.unit,
1429
- min: t.min,
1430
- max: t.max,
1431
- decimals: t.decimals,
1432
- icon: t.icon,
1423
+ dcwTemplates.splice(0, dcwTemplates.length, ...list.map(tpl => ({
1424
+ id: tpl.key,
1425
+ name: catalogTplName(t, tpl),
1426
+ code: tpl.code,
1427
+ ch: tpl.ch,
1428
+ unit: tpl.unit,
1429
+ min: tpl.min,
1430
+ max: tpl.max,
1431
+ decimals: tpl.decimals,
1432
+ icon: tpl.icon,
1433
1433
  })))
1434
1434
  }, { immediate: true, deep: true })
1435
1435
  /** 左轨树形目录:模板 = 可展开分组(不可拖拽),节点 = 可拖入场景的叶子。
@@ -1523,33 +1523,33 @@ interface DaqTemplate {
1523
1523
  /** 图标(设计稿 ICONS 键) */
1524
1524
  icon: string
1525
1525
  }
1526
- const daqTemplates = reactive<DaqTemplate[]>(DAQ_TEMPLATES.map(t => ({
1527
- id: t.key,
1528
- name: t.name,
1529
- code: t.code,
1530
- ch: t.ch,
1531
- unit: t.unit,
1532
- base: t.base,
1533
- amp: t.amp,
1534
- min: t.min,
1535
- max: t.max,
1536
- decimals: t.decimals,
1537
- icon: t.icon,
1526
+ const daqTemplates = reactive<DaqTemplate[]>(DAQ_TEMPLATES.map(tpl => ({
1527
+ id: tpl.key,
1528
+ name: catalogTplName(t, tpl),
1529
+ code: tpl.code,
1530
+ ch: tpl.ch,
1531
+ unit: tpl.unit,
1532
+ base: tpl.base,
1533
+ amp: tpl.amp,
1534
+ min: tpl.min,
1535
+ max: tpl.max,
1536
+ decimals: tpl.decimals,
1537
+ icon: tpl.icon,
1538
1538
  })))
1539
1539
  watch(() => daq.templates, (list) => {
1540
1540
  if (!list?.length) return
1541
- daqTemplates.splice(0, daqTemplates.length, ...list.map(t => ({
1542
- id: t.key,
1543
- name: t.name,
1544
- code: t.code,
1545
- ch: t.ch,
1546
- unit: t.unit,
1547
- base: t.base,
1548
- amp: t.amp,
1549
- min: t.min,
1550
- max: t.max,
1551
- decimals: t.decimals,
1552
- icon: t.icon,
1541
+ daqTemplates.splice(0, daqTemplates.length, ...list.map(tpl => ({
1542
+ id: tpl.key,
1543
+ name: catalogTplName(t, tpl),
1544
+ code: tpl.code,
1545
+ ch: tpl.ch,
1546
+ unit: tpl.unit,
1547
+ base: tpl.base,
1548
+ amp: tpl.amp,
1549
+ min: tpl.min,
1550
+ max: tpl.max,
1551
+ decimals: tpl.decimals,
1552
+ icon: tpl.icon,
1553
1553
  })))
1554
1554
  }, { immediate: true, deep: true })
1555
1555
  const daqTplById = (ref: string): DaqTemplate | undefined => {
@@ -2969,7 +2969,7 @@ onBeforeUnmount(() => {
2969
2969
  <button
2970
2970
  class="nav-action"
2971
2971
  :disabled="mode !== 'edit'"
2972
- :title="mode === 'edit' ? '把全部设备的位置/朝向/缩放写入数据库' : '运行模式只读'"
2972
+ :title="mode === 'edit' ? $t('townView.saveLayoutTip') : $t('townView.readonlyTip')"
2973
2973
  @click="saveLayout"
2974
2974
  >
2975
2975
  {{ $t('townView.k1b3bk8t029') }}
@@ -3051,7 +3051,7 @@ onBeforeUnmount(() => {
3051
3051
  <button
3052
3052
  type="button"
3053
3053
  class="sheet-x"
3054
- aria-label="关闭"
3054
+ :aria-label="$t('common.close')"
3055
3055
  @click="closeSheet"
3056
3056
  >
3057
3057
  ✕
@@ -3075,7 +3075,7 @@ onBeforeUnmount(() => {
3075
3075
  <button
3076
3076
  class="daq-ctl-btn"
3077
3077
  :class="{ on: daq.controller.running }"
3078
- :title="daq.controller.running ? '暂停全部采集:停止所有启用节点的采样(节点级启停独立)' : '恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)'"
3078
+ :title="daq.controller.running ? $t('townView.daqPauseTip') : $t('townView.daqResumeTip')"
3079
3079
  @click="daq.controllerAction(daq.controller.running ? 'pause' : 'resume')"
3080
3080
  >
3081
3081
  {{ daq.controller.running ? $t('townView.k3w3j8f140') : $t('townView.k3n93ed175') }}
@@ -3271,7 +3271,7 @@ onBeforeUnmount(() => {
3271
3271
  :class="{ active: ch.placed }"
3272
3272
  :draggable="!ch.placed && mode === 'edit'"
3273
3273
  :data-channel-id="ch.channelId"
3274
- :title="ch.placed ? '已在场景中,点击定位' : '拖拽到场景放置'"
3274
+ :title="ch.placed ? $t('townView.chPlaced') : $t('townView.chDragHint')"
3275
3275
  @dragstart="ch.placed ? undefined : onChannelDragStart($event, ch.channelId)"
3276
3276
  @click="onDockCardClick(ch)"
3277
3277
  >
@@ -3388,13 +3388,13 @@ onBeforeUnmount(() => {
3388
3388
  {{ $t('townView.kv72860036') }}
3389
3389
  </option>
3390
3390
  <option value="top">
3391
- 俯视 · TOP
3391
+ {{ $t('townView.viewTop') }}
3392
3392
  </option>
3393
3393
  <option value="front">
3394
- 前视 · FRONT
3394
+ {{ $t('townView.viewFront') }}
3395
3395
  </option>
3396
3396
  <option value="side">
3397
- 侧视 · SIDE
3397
+ {{ $t('townView.viewSide') }}
3398
3398
  </option>
3399
3399
  </select>
3400
3400
  </div>
@@ -3948,7 +3948,7 @@ onBeforeUnmount(() => {
3948
3948
  <button
3949
3949
  type="button"
3950
3950
  class="sheet-x"
3951
- aria-label="关闭"
3951
+ :aria-label="$t('common.close')"
3952
3952
  @click="closeSheet"
3953
3953
  >
3954
3954
  ✕
@@ -4188,7 +4188,7 @@ onBeforeUnmount(() => {
4188
4188
  class="obj-input"
4189
4189
  :placeholder="$t('townView.k1k6vbaf015')"
4190
4190
  :disabled="mode !== 'edit'"
4191
- :title="mode === 'edit' ? '设备名称' : '运行模式只读'"
4191
+ :title="mode === 'edit' ? $t('townView.deviceName') : $t('townView.readonlyTip')"
4192
4192
  @change="onObjNameCommit"
4193
4193
  @keydown.enter="onObjNameCommit"
4194
4194
  >
@@ -4206,7 +4206,7 @@ onBeforeUnmount(() => {
4206
4206
  :key="m.id"
4207
4207
  :value="m.id"
4208
4208
  >
4209
- {{ m.name }}
4209
+ {{ townModelName(t, m) }}
4210
4210
  </option>
4211
4211
  </select>
4212
4212
  </div>
@@ -4432,7 +4432,7 @@ onBeforeUnmount(() => {
4432
4432
  <!-- 变换模式(Blender G/R/S;仅编辑模式) -->
4433
4433
  <template v-if="mode === 'edit'">
4434
4434
  <div class="sect-hd">
4435
- 变换 · BLENDER
4435
+ {{ $t('townView.transformBlender') }}
4436
4436
  </div>
4437
4437
  <div class="xz-seg">
4438
4438
  <button
@@ -4595,7 +4595,7 @@ onBeforeUnmount(() => {
4595
4595
  v-if="!agentBindings.length"
4596
4596
  class="ins-empty"
4597
4597
  >
4598
- 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具
4598
+ {{ $t('townView.unboundTip') }}
4599
4599
  </div>
4600
4600
  <div
4601
4601
  v-if="mode === 'edit'"
@@ -0,0 +1,22 @@
1
+ /**
2
+ * locale cookie 参与 SSR 首帧(与 aw-theme cookie 同一范式)。
3
+ *
4
+ * 为什么必须有:strategy=no_prefix + detectBrowserLanguage=false 下 SSR 恒以 zh 渲染,
5
+ * 客户端 locale 恢复(locale-restore 插件)是异步的 —— 若 setLocale 在水合前落地,
6
+ * prod 水合不修正属性失配(文本会被修正,placeholder 这类 attr 不会),
7
+ * 登录卡输入框曾在 EN 模式下残留中文占位符。cookie 服务端可读,两侧渲染一致,竞态消失。
8
+ *
9
+ * 键名与 localStorage 的 'aw.locale' 同名:header/settings 切换时双写,
10
+ * 本中间件(SSR + 客户端首航都跑)据此在渲染前把 locale 定住。
11
+ */
12
+ export default defineNuxtRouteMiddleware(async () => {
13
+ const cookie = useCookie<string | undefined>('aw.locale')
14
+ const saved = cookie.value
15
+ if (saved !== 'en' && saved !== 'zh-CN') return
16
+ const $i18n = (useNuxtApp() as unknown as {
17
+ $i18n?: { locale: { value: string }, setLocale: (l: string) => Promise<unknown> }
18
+ }).$i18n
19
+ if (!$i18n) return
20
+ // 必须 await:setLocale 未落地就开始渲染的话,SSR 仍是 zh,水合失配回归
21
+ if (saved !== $i18n.locale.value) await $i18n.setLocale(saved)
22
+ })
@@ -304,6 +304,28 @@ const pythonText = computed(() => {
304
304
  const venvText = computed(() =>
305
305
  overview.value ? (overview.value.runtime.venvReady ? tt('aml.k1amlx007') : tt('aml.k1amlx008')) : '--')
306
306
 
307
+ /** 服务端 blocker 是中文数据:已知固定文案映射 i18n,未知(动态 reason)原样透传 */
308
+ const AML_BLOCKER_KEYS: Record<string, string> = {
309
+ '训练环境(./aml/.venv)尚未创建:请在「运行环境」面板点击「创建训练环境」': 'aml.blockerVenv',
310
+ 'Python 解释器不可用': 'aml.blockerPython',
311
+ }
312
+ const blockerText = computed(() =>
313
+ (env.value?.preflight?.blockers ?? [])
314
+ .map(b => (AML_BLOCKER_KEYS[b] ? tt(AML_BLOCKER_KEYS[b]) : b))
315
+ .join(' / '))
316
+
317
+ /** 数据根来源按 amlRootMode 翻译(amlRootSource 是服务端中文标签) */
318
+ const AML_ROOT_SOURCE_KEYS: Record<string, string> = {
319
+ env: 'aml.rootSourceEnv',
320
+ repo: 'aml.rootSourceRepo',
321
+ home: 'aml.rootSourceHome',
322
+ }
323
+ const rootSourceLabel = computed(() => {
324
+ const mode = env.value?.amlRootMode ?? ''
325
+ const key = AML_ROOT_SOURCE_KEYS[mode]
326
+ return key ? tt(key) : (env.value?.amlRootSource ?? '')
327
+ })
328
+
307
329
  // ---------- 1b. 运行环境(uv 检测 / 一键安装 / .venv 供给) ----------
308
330
 
309
331
  /** 完整环境状态(GET /env);比 overview.env 多出任务日志与目录明细 */
@@ -964,7 +986,7 @@ async function doPredict(): Promise<void> {
964
986
  >
965
987
  <span class="i-tabler-alert-triangle" />
966
988
  <span class="txt">
967
- {{ $t('aml.k1amlx178') }}:<b class="mono">{{ env.preflight.blockers.join(' / ') }}</b>
989
+ {{ $t('aml.k1amlx178') }}:<b class="mono">{{ blockerText }}</b>
968
990
  </span>
969
991
  </div>
970
992
 
@@ -1059,7 +1081,7 @@ async function doPredict(): Promise<void> {
1059
1081
  <p class="ec-detail">
1060
1082
  {{ $t('aml.k1amlx174') }}:
1061
1083
  <b class="mono">{{ env.disk.usedMb }} / {{ env.disk.quotaMb }} MB</b>
1062
- <span class="dim"> · {{ env.amlRootSource }}</span>
1084
+ <span class="dim"> · {{ rootSourceLabel }}</span>
1063
1085
  </p>
1064
1086
  </div>
1065
1087
 
@@ -29,7 +29,7 @@ const tpl = computed(() => {
29
29
  const key = node.value ? daqKeyFromRef(node.value.templateRef) : ''
30
30
  return daq.templates.find(t => t.key === key) ?? null
31
31
  })
32
- const stateLabel: Record<DaqNodeState, string> = { ok: t('daqDetail.k41k5c026'), warn: t('daqDetail.k49z8v027'), alarm: t('daqDetail.k3xmid028'), offline: t('daqDetail.k44c2n029') }
32
+ const stateLabel = computed<Record<DaqNodeState, string>>(() => ({ ok: t('daqDetail.k41k5c026'), warn: t('daqDetail.k49z8v027'), alarm: t('daqDetail.k3xmid028'), offline: t('daqDetail.k44c2n029') }))
33
33
  const effectiveState = (): DaqNodeState => {
34
34
  const n = node.value
35
35
  if (!n) return 'offline'
@@ -219,13 +219,13 @@ type ChartRow = DaqTsdbPoint
219
219
  const historyPoints = ref<ChartRow[]>([])
220
220
  const bucketMs = ref<number>(15000)
221
221
  const histLoading = ref(false)
222
- const BUCKETS = [
223
- { label: '1s 桶', ms: 1000 },
224
- { label: '5s 桶', ms: 5000 },
225
- { label: '15s 桶(默认)', ms: 15000 },
226
- { label: '30s 桶', ms: 30000 },
227
- { label: '1min 桶', ms: 60000 },
228
- ]
222
+ const BUCKETS = computed(() => [
223
+ { label: t('daqDetail.bucket1s'), ms: 1000 },
224
+ { label: t('daqDetail.bucket5s'), ms: 5000 },
225
+ { label: t('daqDetail.bucket15s'), ms: 15000 },
226
+ { label: t('daqDetail.bucket30s'), ms: 30000 },
227
+ { label: t('daqDetail.bucket60s'), ms: 60000 },
228
+ ])
229
229
  async function loadHistory(): Promise<void> {
230
230
  if (!nodeId.value) return
231
231
  histLoading.value = true
@@ -545,7 +545,7 @@ watch(effectiveRefreshMs, () => armHistTimer())
545
545
  type="button"
546
546
  class="toggle slim"
547
547
  :class="{ on: form.calKind === 'linear' }"
548
- title="采集标定 decoder:物理值 = scale × PLC采集值 + offset"
548
+ :title="$t('daqDetail.calDecoderTip')"
549
549
  @click="form.calKind = form.calKind === 'linear' ? 'none' : 'linear'"
550
550
  >
551
551
  {{ form.calKind === 'linear' ? $t('daqDetail.k1eru4r1039') : $t('daqDetail.k3oktae047') }}
@@ -556,7 +556,7 @@ watch(effectiveRefreshMs, () => armHistTimer())
556
556
  step="0.1"
557
557
  class="input"
558
558
  :disabled="form.calKind !== 'linear'"
559
- title="decode 斜率(≠0)"
559
+ :title="$t('daqDetail.calScaleTip')"
560
560
  >
561
561
  <input
562
562
  v-model.number="form.calOffset"
@@ -564,7 +564,7 @@ watch(effectiveRefreshMs, () => armHistTimer())
564
564
  step="0.1"
565
565
  class="input"
566
566
  :disabled="form.calKind !== 'linear'"
567
- title="decode 截距"
567
+ :title="$t('daqDetail.calOffsetTip')"
568
568
  ><small>decoder</small>
569
569
  </label>
570
570
  <label class="field row">