agentworkshop 0.7.39 → 0.7.41

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 (405) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +55 -0
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +55 -0
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/88GOowgO2.js +1 -0
  5. package/.output/public/_nuxt/{BNT8gYU92.js → BC9wjTJK2.js} +2 -2
  6. package/.output/public/_nuxt/{CY9LbPCI.js → BN16aRdQ.js} +1 -1
  7. package/.output/public/_nuxt/BWVhZntO.js +1 -0
  8. package/.output/public/_nuxt/{HBLJ-wei.js → BXxH0UQE.js} +1 -1
  9. package/.output/public/_nuxt/{zIGh7R49.js → BneN7fbu.js} +1 -1
  10. package/.output/public/_nuxt/BsROmY89.js +1 -0
  11. package/.output/public/_nuxt/{DUrecWPx.js → C0ZrS1KL.js} +2 -2
  12. package/.output/public/_nuxt/{C_OLzD09.js → C4oW1HsE.js} +1 -1
  13. package/.output/public/_nuxt/{CUDwzgLV.js → C4s_niy-.js} +9 -9
  14. package/.output/public/_nuxt/CFxtLwjp.js +1 -0
  15. package/.output/public/_nuxt/{Cec0Ua3F.js → CS50LB_l.js} +1 -1
  16. package/.output/public/_nuxt/CssgYAAL2.js +1 -0
  17. package/.output/public/_nuxt/D6mbFA-a.js +1 -0
  18. package/.output/public/_nuxt/D98NH8kG.js +1 -0
  19. package/.output/public/_nuxt/DGIuvyRN2.js +1 -0
  20. package/.output/public/_nuxt/DGbd-UiG.js +1 -0
  21. package/.output/public/_nuxt/{CojCTLKD.js → DGj-WEBg.js} +1 -1
  22. package/.output/public/_nuxt/{DDShH71m.js → DS8qj8EL.js} +1 -1
  23. package/.output/public/_nuxt/DTFCy6h-.js +1 -0
  24. package/.output/public/_nuxt/{DrYV5i68.js → DUjW5Yq5.js} +1 -1
  25. package/.output/public/_nuxt/{45zuyAso.js → D_OTvQza.js} +1 -1
  26. package/.output/public/_nuxt/Dap5PmTL.js +2 -0
  27. package/.output/public/_nuxt/Dqw1lpr-.js +1 -0
  28. package/.output/public/_nuxt/DvLxILQP.js +1 -0
  29. package/.output/public/_nuxt/IREZ1eC2.js +1 -0
  30. package/.output/public/_nuxt/TownView.f-YOdXRs.css +1 -0
  31. package/.output/public/_nuxt/_id_.D9ymtHB5.css +1 -0
  32. package/.output/public/_nuxt/_id_.jf-_8E_c.css +1 -0
  33. package/.output/public/_nuxt/_wsId_.B4WiqkIS.css +1 -0
  34. package/.output/public/_nuxt/agents.ZD0rVdHE.css +1 -0
  35. package/.output/public/_nuxt/aml.BN8ZEW4h.css +1 -0
  36. package/.output/public/_nuxt/builds/latest.json +1 -1
  37. package/.output/public/_nuxt/builds/meta/78a295bb-2072-48a4-8b46-6d545fdae743.json +1 -0
  38. package/.output/public/_nuxt/ca4TJ3Op.js +1 -0
  39. package/.output/public/_nuxt/channel-templates.BOtahzPi.css +1 -0
  40. package/.output/public/_nuxt/daq.DjSgY94l.css +1 -0
  41. package/.output/public/_nuxt/dcw.8Y7FqCVN.css +1 -0
  42. package/.output/public/_nuxt/default.J32SgqFY.css +1 -0
  43. package/.output/public/_nuxt/entry.bdm0tv6M.css +1 -0
  44. package/.output/public/_nuxt/eqq3wWQF.js +18 -0
  45. package/.output/public/_nuxt/logs.BpKzmKsh.css +1 -0
  46. package/.output/public/_nuxt/monitor.D9pe7qN6.css +1 -0
  47. package/.output/public/_nuxt/pages.D7aSDlUI.css +1 -0
  48. package/.output/public/_nuxt/permissions.DwTVlFe6.css +1 -0
  49. package/.output/public/_nuxt/plugins.sb4nDGqr.css +1 -0
  50. package/.output/public/_nuxt/{Cbq-mryP.js → qr6R6Ha1.js} +1 -1
  51. package/.output/public/_nuxt/settings.BTgR-NiE.css +1 -0
  52. package/.output/public/_nuxt/teams.CxnxKVVs.css +1 -0
  53. package/.output/public/_nuxt/tokens.BFY7qv4f.css +1 -0
  54. package/.output/public/_nuxt/{town.DKIAhKnx.css → town.BBXZmeoP.css} +1 -1
  55. package/.output/public/_nuxt/users.DLgZ1D0h.css +1 -0
  56. package/.output/public/_nuxt/workshop.CR_QzeAN.css +1 -0
  57. package/.output/public/_nuxt/{BzHEilTt.js → xh3_vYcu.js} +1 -1
  58. package/.output/public/_nuxt/yF0aYMF1.js +4 -0
  59. package/.output/server/chunks/_/entity.mjs.map +1 -1
  60. package/.output/server/chunks/_/nitro.mjs +2355 -1362
  61. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  62. package/.output/server/chunks/build/{TownView-jVazYOjN.mjs → TownView--otsnr_7.mjs} +290 -208
  63. package/.output/server/chunks/build/TownView--otsnr_7.mjs.map +1 -0
  64. package/.output/server/chunks/build/{_id_-CfVosNg3.mjs → _id_-Brv-JSvr.mjs} +142 -141
  65. package/.output/server/chunks/build/_id_-Brv-JSvr.mjs.map +1 -0
  66. package/.output/server/chunks/build/{_id_-Hwr4rZpr.mjs → _id_-D9pl1OZy.mjs} +38 -36
  67. package/.output/server/chunks/build/_id_-D9pl1OZy.mjs.map +1 -0
  68. package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs → _wsId_-BASfDf0s.mjs} +295 -261
  69. package/.output/server/chunks/build/{_wsId_-BVg3bB77.mjs.map → _wsId_-BASfDf0s.mjs.map} +1 -1
  70. package/.output/server/chunks/build/{agents-Bvin73QY.mjs → agents-CLQqJF2y.mjs} +21 -27
  71. package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +1 -0
  72. package/.output/server/chunks/build/{aml-BCSJCdX7.mjs → aml-_7FdFL2p.mjs} +109 -109
  73. package/.output/server/chunks/build/{aml-BCSJCdX7.mjs.map → aml-_7FdFL2p.mjs.map} +1 -1
  74. package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -1
  75. package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs → channel-templates-p6SZNjlM.mjs} +19 -19
  76. package/.output/server/chunks/build/{channel-templates-BTq8570n.mjs.map → channel-templates-p6SZNjlM.mjs.map} +1 -1
  77. package/.output/server/chunks/build/{daq-C03Uu5UE.mjs → daq-DkMvD8sg.mjs} +193 -126
  78. package/.output/server/chunks/build/daq-DkMvD8sg.mjs.map +1 -0
  79. package/.output/server/chunks/build/{dcw-6vEYVeje.mjs → dcw-C1jgVJkO.mjs} +46 -46
  80. package/.output/server/chunks/build/{dcw-6vEYVeje.mjs.map → dcw-C1jgVJkO.mjs.map} +1 -1
  81. package/.output/server/chunks/build/{default-CZmZFpqH.mjs → default-BE4r0FZN.mjs} +152 -58
  82. package/.output/server/chunks/build/{default-CZmZFpqH.mjs.map → default-BE4r0FZN.mjs.map} +1 -1
  83. package/.output/server/chunks/build/{logs-B-xhuqln.mjs → logs--dByNyhw.mjs} +35 -35
  84. package/.output/server/chunks/build/{logs-B-xhuqln.mjs.map → logs--dByNyhw.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs → monitor-C0okQaXz.mjs} +33 -33
  86. package/.output/server/chunks/build/{monitor-CyfDt4nR.mjs.map → monitor-C0okQaXz.mjs.map} +1 -1
  87. package/.output/server/chunks/build/{pages-BO7yZsXA.mjs → pages-B0bUWnC6.mjs} +35 -19
  88. package/.output/server/chunks/build/pages-B0bUWnC6.mjs.map +1 -0
  89. package/.output/server/chunks/build/{permissions-B52oOmaO.mjs → permissions-68SsNjex.mjs} +12 -12
  90. package/.output/server/chunks/build/{permissions-B52oOmaO.mjs.map → permissions-68SsNjex.mjs.map} +1 -1
  91. package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs → plugins-lGlUr1lj.mjs} +17 -17
  92. package/.output/server/chunks/build/{plugins-CUWmMdyt.mjs.map → plugins-lGlUr1lj.mjs.map} +1 -1
  93. package/.output/server/chunks/build/{settings-DoQ2Oq3P.mjs → settings-Ddd1qx2Z.mjs} +50 -47
  94. package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +1 -0
  95. package/.output/server/chunks/build/{teams-2kz3CusY.mjs → teams-MEDLZdMn.mjs} +38 -34
  96. package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +1 -0
  97. package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs → tokens-C7fTM5C2.mjs} +14 -14
  98. package/.output/server/chunks/build/{tokens-BbWLqtVz.mjs.map → tokens-C7fTM5C2.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{town-BOl6hs9B.mjs → town-CoQdblbZ.mjs} +38 -12
  100. package/.output/server/chunks/build/town-CoQdblbZ.mjs.map +1 -0
  101. package/.output/server/chunks/build/{useDaqStream-CIBaiGAl.mjs → useDaqStream-DfCFpb3p.mjs} +9 -3
  102. package/.output/server/chunks/build/useDaqStream-DfCFpb3p.mjs.map +1 -0
  103. package/.output/server/chunks/build/{useDcwStream-CBbiYnWe.mjs → useDcwStream-UPiX-3iO.mjs} +11 -2
  104. package/.output/server/chunks/build/useDcwStream-UPiX-3iO.mjs.map +1 -0
  105. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs +49 -0
  106. package/.output/server/chunks/build/useResponsive-BKDMGTHs.mjs.map +1 -0
  107. package/.output/server/chunks/build/{users-fohSmF-J.mjs → users-Cfd5-l2-.mjs} +6 -6
  108. package/.output/server/chunks/build/{users-fohSmF-J.mjs.map → users-Cfd5-l2-.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs → workshop-BL5bhfs0.mjs} +15 -15
  110. package/.output/server/chunks/build/{workshop-DX5-ldc4.mjs.map → workshop-BL5bhfs0.mjs.map} +1 -1
  111. package/.output/server/chunks/build/{workspaces-BuydxM-3.mjs → workspaces-Bgz5Ekwp.mjs} +18 -3
  112. package/.output/server/chunks/build/workspaces-Bgz5Ekwp.mjs.map +1 -0
  113. package/.output/server/chunks/routes/api/system/config-groups/_id_.patch.mjs.map +1 -1
  114. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/system/index.post.mjs.map +1 -1
  116. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +6 -2
  118. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs +2 -1
  120. package/.output/server/chunks/routes/api/workshop/aml/datasets/_id_.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  122. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
  123. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  124. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  126. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +3 -2
  127. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  128. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -1
  129. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  130. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +8 -6
  131. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  132. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +5 -5
  133. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  134. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +14 -4
  135. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  136. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +4 -4
  137. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  138. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -3
  139. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  140. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +31 -0
  141. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs.map +1 -0
  142. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +28 -0
  143. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs.map +1 -0
  144. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  145. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  146. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs +32 -0
  148. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/read.post.mjs.map +1 -0
  149. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs +34 -0
  150. package/.output/server/chunks/routes/api/workshop/dcw/params/_id/write.post.mjs.map +1 -0
  151. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +33 -0
  152. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs.map +1 -0
  153. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +34 -0
  154. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs.map +1 -0
  155. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  156. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  157. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  158. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  159. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  160. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  161. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  162. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +3 -1
  163. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  164. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +5 -1
  165. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  166. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +3 -1
  167. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  168. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  169. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  170. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  171. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  172. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  173. package/.output/server/chunks/routes/renderer.mjs +3 -3
  174. package/.output/server/chunks/virtual/entry.mjs +51 -25
  175. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  176. package/.output/server/package.json +1 -1
  177. package/README-zh.md +203 -39
  178. package/README.md +739 -591
  179. package/app/app.vue +9 -3
  180. package/app/assets/css/main.css +517 -7
  181. package/app/components/AppHeader.vue +98 -7
  182. package/app/components/AppSidebar.vue +117 -11
  183. package/app/components/AwChart.vue +2 -1
  184. package/app/components/workshop/AgentInspectorDrawer.vue +6 -6
  185. package/app/components/workshop/AgentLanesView.vue +52 -1
  186. package/app/components/workshop/AssetLibrary.vue +4 -2
  187. package/app/components/workshop/ChannelSessionList.vue +4 -2
  188. package/app/components/workshop/Composer.vue +96 -0
  189. package/app/components/workshop/DaqNodeRow.vue +19 -0
  190. package/app/components/workshop/DaqTemplateIcon.vue +33 -0
  191. package/app/components/workshop/DeviceTwinPanel.vue +37 -35
  192. package/app/components/workshop/EventBlock.vue +3 -3
  193. package/app/components/workshop/InspectorPanel.vue +47 -11
  194. package/app/components/workshop/LiveAgentBar.vue +34 -0
  195. package/app/components/workshop/TaskBoardView.vue +83 -33
  196. package/app/components/workshop/TranscriptTimeline.vue +56 -0
  197. package/app/components/workshop/blocks/ClusterError.vue +1 -1
  198. package/app/components/workshop/blocks/ClusterRoute.vue +3 -1
  199. package/app/components/workshop/blocks/ClusterStatus.vue +2 -2
  200. package/app/components/workshop/blocks/ClusterStream.vue +8 -2
  201. package/app/components/workshop/town/ModelPreview3D.vue +1 -1
  202. package/app/components/workshop/town/TownView.vue +507 -82
  203. package/app/composables/useResponsive.ts +88 -0
  204. package/app/composables/useRouteMeta.ts +3 -0
  205. package/app/composables/workshop/useDaqStream.ts +7 -4
  206. package/app/composables/workshop/useDcwStream.ts +8 -2
  207. package/app/composables/workshop/useVisibleInterval.ts +2 -2
  208. package/app/composables/workshop/useWorkshopApi.ts +1 -1
  209. package/app/layouts/default.vue +46 -2
  210. package/app/pages/aml/index.vue +712 -616
  211. package/app/pages/daq/[id].vue +12 -7
  212. package/app/pages/daq/index.vue +216 -13
  213. package/app/pages/dcw/[id].vue +117 -32
  214. package/app/pages/dcw/index.vue +83 -23
  215. package/app/pages/index.vue +35 -1
  216. package/app/pages/logs/index.vue +147 -13
  217. package/app/pages/monitor.vue +56 -12
  218. package/app/pages/permissions/index.vue +34 -0
  219. package/app/pages/plugins/index.vue +35 -4
  220. package/app/pages/settings.vue +90 -21
  221. package/app/pages/tokens.vue +23 -0
  222. package/app/pages/town.vue +50 -5
  223. package/app/pages/users.vue +23 -0
  224. package/app/pages/workshop/agents.vue +92 -2
  225. package/app/pages/workshop/channel-templates.vue +53 -0
  226. package/app/pages/workshop/index.vue +14 -0
  227. package/app/pages/workshop/teams.vue +66 -6
  228. package/app/pages/workshop/w/[wsId].vue +202 -14
  229. package/app/plugins/aw-plugins.client.ts +13 -8
  230. package/app/stores/app.ts +33 -1
  231. package/app/stores/workshop/user.ts +1 -1
  232. package/app/stores/workshop/workspaces.ts +18 -2
  233. package/app/utils/api-error.ts +1 -1
  234. package/cli/commands/build.mjs +8 -1
  235. package/docker-compose.yml +6 -0
  236. package/docs/cli.en.md +2 -2
  237. package/docs/cli.md +2 -2
  238. package/docs/plugins.en.md +33 -1
  239. package/docs/plugins.md +29 -1
  240. package/docs/sdk.en.md +1 -1
  241. package/docs/sdk.md +1 -1
  242. package/i18n/locales/en.ts +2 -0
  243. package/i18n/locales/zh-CN.ts +2 -0
  244. package/nuxt.config.ts +31 -0
  245. package/package.json +11 -2
  246. package/scripts/_dbg-param-map-e2e.ts +242 -0
  247. package/scripts/_dbg-param-map-rest-smoke.mjs +73 -0
  248. package/scripts/_dbg-param-real-scenario.mjs +153 -0
  249. package/scripts/_loop-biax-campaign.mjs +124 -0
  250. package/scripts/api-live-e2e.mjs +40 -8
  251. package/scripts/capture-walkthrough.mjs +232 -0
  252. package/scripts/render-walkthrough-figure.mjs +46 -0
  253. package/scripts/seed-walkthrough-fixture.mjs +143 -0
  254. package/scripts/test-plugin-hardening.mjs +8 -0
  255. package/scripts/test-serial-bridge.mjs +418 -0
  256. package/scripts/ui/admin-shots.mjs +46 -0
  257. package/scripts/ui/audit-layout.mjs +301 -0
  258. package/scripts/ui/bump-microfont.mjs +39 -0
  259. package/scripts/ui/e2e-interactive.mjs +328 -0
  260. package/scripts/ui/lib.mjs +198 -0
  261. package/scripts/ui/linkcheck2.mjs +37 -0
  262. package/scripts/ui/live-render-check.mjs +72 -0
  263. package/scripts/ui/md-lint.mjs +80 -0
  264. package/scripts/ui/perf-audit.mjs +132 -0
  265. package/scripts/ui/readme-assets.mjs +30 -0
  266. package/scripts/ui/readme-shots.mjs +42 -0
  267. package/scripts/ui/record.mjs +225 -0
  268. package/scripts/ui/seed-admin.mjs +68 -0
  269. package/scripts/ui/seed-demo.mjs +83 -0
  270. package/scripts/ui/seed-industrial-demo.mjs +171 -0
  271. package/scripts/ui/shot-hero.mjs +25 -0
  272. package/scripts/ui/shots.mjs +75 -0
  273. package/scripts/ui/sim-ui-shot.mjs +16 -0
  274. package/scripts/ui/verify-nav.mjs +51 -0
  275. package/scripts/ui/verify-responsive.mjs +285 -0
  276. package/server/api/system/config-groups/[id].patch.ts +1 -1
  277. package/server/api/system/config-groups/index.post.ts +1 -1
  278. package/server/api/system/settings/events.get.ts +1 -1
  279. package/server/api/system/settings/index.patch.ts +1 -1
  280. package/server/api/workshop/agent-tools/invoke.post.ts +16 -2
  281. package/server/api/workshop/aml/datasets/[id].get.ts +8 -1
  282. package/server/api/workshop/daq/index.get.ts +3 -1
  283. package/server/api/workshop/daq/infra/reconnect.post.ts +1 -1
  284. package/server/api/workshop/daq/templates/[key].delete.ts +1 -0
  285. package/server/api/workshop/daq/templates/[key].patch.ts +1 -0
  286. package/server/api/workshop/daq/templates/index.post.ts +1 -0
  287. package/server/api/workshop/dcw/[id]/write.post.ts +10 -2
  288. package/server/api/workshop/dcw/[id].delete.ts +5 -2
  289. package/server/api/workshop/dcw/index.get.ts +5 -0
  290. package/server/api/workshop/dcw/lines/[id].patch.ts +1 -1
  291. package/server/api/workshop/dcw/params/[id]/read.post.ts +17 -0
  292. package/server/api/workshop/dcw/params/[id]/write.post.ts +21 -0
  293. package/server/api/workshop/dcw/params/[id].delete.ts +19 -0
  294. package/server/api/workshop/dcw/params/[id].patch.ts +23 -0
  295. package/server/api/workshop/dcw/params/index.get.ts +27 -0
  296. package/server/api/workshop/dcw/params/index.post.ts +25 -0
  297. package/server/api/workshop/permissions/index.get.ts +3 -1
  298. package/server/plugins/aw-plugins.ts +23 -10
  299. package/server/plugins/dev-stability-guard.ts +3 -1
  300. package/server/plugins/system-config.ts +6 -1
  301. package/server/plugins-builtin/serial-bridge/client.mjs +210 -0
  302. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -0
  303. package/server/plugins-builtin/serial-bridge/i18n.json +62 -0
  304. package/server/plugins-builtin/serial-bridge/index.mjs +247 -0
  305. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -0
  306. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -0
  307. package/server/services/system-config.ts +28 -9
  308. package/server/services/workshop/agents/adapters/one-shot-cli-agent.ts +2 -1
  309. package/server/services/workshop/agents/agent-interface.ts +8 -6
  310. package/server/services/workshop/agents/base-agent.ts +18 -4
  311. package/server/services/workshop/agents/claude-agent.ts +7 -3
  312. package/server/services/workshop/agents/codex-agent.ts +3 -3
  313. package/server/services/workshop/agents/dsh-agent.ts +3 -3
  314. package/server/services/workshop/agents/goose-agent.ts +0 -1
  315. package/server/services/workshop/agents/harness-terminal.ts +14 -1
  316. package/server/services/workshop/agents/hermes-agent.ts +4 -2
  317. package/server/services/workshop/agents/host-tool-bridge.ts +5 -1
  318. package/server/services/workshop/agents/industrial-context.ts +4 -1
  319. package/server/services/workshop/agents/industrial-tools.ts +164 -6
  320. package/server/services/workshop/agents/omp-agent.ts +15 -9
  321. package/server/services/workshop/agents/opencode-agent.ts +47 -21
  322. package/server/services/workshop/agents/qwen-agent.ts +10 -5
  323. package/server/services/workshop/aml/entity.ts +3 -1
  324. package/server/services/workshop/aml/python-runtime.ts +3 -2
  325. package/server/services/workshop/daq/bus/mqtt.adapter.ts +8 -4
  326. package/server/services/workshop/daq/daq-controller.ts +25 -5
  327. package/server/services/workshop/daq/daq-runtime.ts +5 -3
  328. package/server/services/workshop/daq/drivers.ts +141 -11
  329. package/server/services/workshop/daq/host-ports.ts +3 -2
  330. package/server/services/workshop/daq/storage/timescale.adapter.ts +3 -1
  331. package/server/services/workshop/db/channel.repo.ts +4 -0
  332. package/server/services/workshop/db/ops.repo.ts +5 -2
  333. package/server/services/workshop/db/retention.ts +8 -3
  334. package/server/services/workshop/dcw/dcw-controller.ts +147 -16
  335. package/server/services/workshop/dcw/dcw-product.repo.ts +38 -1
  336. package/server/services/workshop/dcw/dcw-runtime.ts +3 -2
  337. package/server/services/workshop/dcw/drivers.ts +90 -4
  338. package/server/services/workshop/dcw/param-conversion.ts +78 -0
  339. package/server/services/workshop/dcw/param-limits.ts +142 -0
  340. package/server/services/workshop/dcw/param-map.repo.ts +305 -0
  341. package/server/services/workshop/dcw/plugin-bridge.ts +45 -0
  342. package/server/services/workshop/dcw/recipe-rollback-manager.ts +13 -7
  343. package/server/services/workshop/plugins/host.mjs +30 -0
  344. package/server/services/workshop/runtime/agent-runtime.ts +4 -0
  345. package/server/services/workshop/runtime/manager.ts +9 -2
  346. package/server/services/workshop/settings.ts +4 -2
  347. package/server/types/pg.d.ts +49 -0
  348. package/server/utils/stability-severity.ts +13 -2
  349. package/shared/config/groups.mjs +22 -1
  350. package/shared/config/home.d.mts +28 -0
  351. package/shared/daq-protocol.ts +15 -0
  352. package/shared/dcw-protocol.ts +136 -0
  353. package/uno.config.ts +12 -1
  354. package/.output/public/_nuxt/8NMOXZOV.js +0 -1
  355. package/.output/public/_nuxt/BFkgkW8u.js +0 -4
  356. package/.output/public/_nuxt/C5gUkRwn.js +0 -1
  357. package/.output/public/_nuxt/CM12FuB42.js +0 -1
  358. package/.output/public/_nuxt/CZiw7sEV.js +0 -1
  359. package/.output/public/_nuxt/Cc_9VzD42.js +0 -1
  360. package/.output/public/_nuxt/CdPzkOMV.js +0 -1
  361. package/.output/public/_nuxt/CmsOtOAA2.js +0 -1
  362. package/.output/public/_nuxt/D1YDxZpZ.js +0 -1
  363. package/.output/public/_nuxt/D20Yamr4.js +0 -1
  364. package/.output/public/_nuxt/DAe0h2MB.js +0 -1
  365. package/.output/public/_nuxt/DmqknNvV.js +0 -18
  366. package/.output/public/_nuxt/DnUuIR83.js +0 -1
  367. package/.output/public/_nuxt/S_fVQwJK.js +0 -1
  368. package/.output/public/_nuxt/TownView.0oLiQgTC.css +0 -1
  369. package/.output/public/_nuxt/_id_.D-SYuyZb.css +0 -1
  370. package/.output/public/_nuxt/_id_.hma_BU6T.css +0 -1
  371. package/.output/public/_nuxt/_wsId_.B12v3PhY.css +0 -1
  372. package/.output/public/_nuxt/agents.BV70ioCv.css +0 -1
  373. package/.output/public/_nuxt/ahgEJu2R.js +0 -1
  374. package/.output/public/_nuxt/aml.COEKNNqK.css +0 -1
  375. package/.output/public/_nuxt/builds/meta/4457d63f-0866-4cea-b320-04a321f24795.json +0 -1
  376. package/.output/public/_nuxt/channel-templates.C-M5nKcC.css +0 -1
  377. package/.output/public/_nuxt/daq.B3265ZDn.css +0 -1
  378. package/.output/public/_nuxt/dcw.DLYZqEhT.css +0 -1
  379. package/.output/public/_nuxt/default.BXI_fZUi.css +0 -1
  380. package/.output/public/_nuxt/entry.BB-Eeh-J.css +0 -1
  381. package/.output/public/_nuxt/logs.CqFyMrJw.css +0 -1
  382. package/.output/public/_nuxt/monitor.B--1dPzs.css +0 -1
  383. package/.output/public/_nuxt/pages.ooEzrMm9.css +0 -1
  384. package/.output/public/_nuxt/permissions.B1pjGChZ.css +0 -1
  385. package/.output/public/_nuxt/plugins.5e5chZ67.css +0 -1
  386. package/.output/public/_nuxt/pz2JDAM7.js +0 -2
  387. package/.output/public/_nuxt/settings.Dm3M0RLy.css +0 -1
  388. package/.output/public/_nuxt/teams.BC75EGnR.css +0 -1
  389. package/.output/public/_nuxt/tokens.xRb1fSPU.css +0 -1
  390. package/.output/public/_nuxt/users.CXnP2E08.css +0 -1
  391. package/.output/public/_nuxt/workshop.Jk5HxWPE.css +0 -1
  392. package/.output/server/chunks/build/TownView-jVazYOjN.mjs.map +0 -1
  393. package/.output/server/chunks/build/_id_-CfVosNg3.mjs.map +0 -1
  394. package/.output/server/chunks/build/_id_-Hwr4rZpr.mjs.map +0 -1
  395. package/.output/server/chunks/build/agents-Bvin73QY.mjs.map +0 -1
  396. package/.output/server/chunks/build/daq-C03Uu5UE.mjs.map +0 -1
  397. package/.output/server/chunks/build/pages-BO7yZsXA.mjs.map +0 -1
  398. package/.output/server/chunks/build/settings-DoQ2Oq3P.mjs.map +0 -1
  399. package/.output/server/chunks/build/teams-2kz3CusY.mjs.map +0 -1
  400. package/.output/server/chunks/build/town-BOl6hs9B.mjs.map +0 -1
  401. package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs.map +0 -1
  402. package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs.map +0 -1
  403. package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +0 -1
  404. /package/.output/public/_nuxt/{36oeS8_R2.js → 36oeS8_R.js} +0 -0
  405. /package/.output/public/_nuxt/{CYWVXZTS.js → CYWVXZTS2.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { V as Icon, _ as _plugin_vue_export_helper_default, aL as theme_default, aI as useSiteConfig, h as _extends, e as useConfigInject_default, i as classNames, j as _objectSpread2, b as useUserStore, u as useI18n, a as useRoute, aH as useAppStore, P as PropTypes, a0 as tuple, n as navigateTo, aM as composables_exports, aN as storages, d as api$1, l as genComponentStyleHook, m as merge } from '../virtual/entry.mjs';
1
+ import { V as Icon, _ as _plugin_vue_export_helper_default, aM as theme_default, aI as useSiteConfig, h as _extends, e as useConfigInject_default, i as classNames, j as _objectSpread2, b as useUserStore, u as useI18n, a as useRoute, aH as useAppStore, P as PropTypes, a0 as tuple, n as navigateTo, aN as composables_exports, aO as storages, d as api$1, l as genComponentStyleHook, m as merge } from '../virtual/entry.mjs';
2
2
  import { C as ClientOnly } from './client-only-D5BzSQc6.mjs';
3
3
  import { t as tooltip_default } from '../_/SearchOutlined.mjs';
4
4
  import { i as initDefaultProps } from './initDefaultProps-DIbWwP4R.mjs';
@@ -7,11 +7,12 @@ import { S as Select } from './select-D-CeE5vY.mjs';
7
7
  import { S as SiderHookProviderKey, a as SiderCollapsedKey, m as menu_default, D as Divider_default, M as MenuItem_default } from './menu-WCrlpYVh.mjs';
8
8
  import { i as isNumeric } from './isNumeric-CP7q_yhz.mjs';
9
9
  import { d as dropdown_default } from './dropdown-CGQ0KAzA.mjs';
10
- import { u as useWorkspacesStore } from './workspaces-BuydxM-3.mjs';
10
+ import { u as useResponsive } from './useResponsive-BKDMGTHs.mjs';
11
+ import { u as useWorkspacesStore } from './workspaces-Bgz5Ekwp.mjs';
11
12
  import { a as apiErrorMessage } from './api-error-dul30BYQ.mjs';
12
13
  import { g as useHitlStore, a as useWorkshopWs, f as useWsConnectionStore } from './useWorkshopWs-C_I7q9As.mjs';
13
14
  import { u as useWorkshopApi } from './useWorkshopApi-NyjL0L3j.mjs';
14
- import { createVNode, defineComponent, mergeProps, withCtx, unref, renderSlot, toDisplayString, inject, shallowRef, watch, provide, computed, Transition, withDirectives, vShow, openBlock, createBlock, Fragment, renderList, ref, createTextVNode, TransitionGroup, createCommentVNode, withKeys, withModifiers, useSSRContext } from 'vue';
15
+ import { createVNode, defineComponent, mergeProps, withCtx, unref, renderSlot, toDisplayString, inject, shallowRef, watch, provide, ref, computed, watchEffect, Transition, withDirectives, vShow, openBlock, createBlock, Fragment, renderList, createTextVNode, TransitionGroup, createCommentVNode, withKeys, withModifiers, useSSRContext } from 'vue';
15
16
  import { R as RightOutlined } from './dropdown-vhn1NPFs.mjs';
16
17
  import { L as LeftOutlined } from '../_/LeftOutlined.mjs';
17
18
  import { ssrRenderComponent, ssrRenderSlot, ssrInterpolate, ssrRenderStyle, ssrRenderList, ssrRenderClass, ssrRenderAttr, ssrRenderAttrs } from 'vue/server-renderer';
@@ -471,9 +472,9 @@ var AwLogo_default = Object.assign(AwLogo_vue_vue_type_script_setup_true_lang_de
471
472
  //#endregion
472
473
  //#region app/components/AppSidebar.vue?vue&type=script&setup=true&lang.ts
473
474
  /**
474
- * 导航信息架构:12 个平铺条目 → 三组语义分区(控制台 / 运维 / 系统)。
475
- * 分组的价值不在多一层容器,而在"扫视成本":同组内的入口是同一件事的不同面,
476
- * 组与组之间才是真正的语境切换。空组自动折叠,权限过滤后不残留空标题。
475
+ * 是否已完成客户端水合。
476
+ * 服务端拿不到会话(cookie 里的 workshop.user 只在浏览器可读),
477
+ * 任何"按身份增删 DOM"的渲染都必须由它门控,否则 SSR 与客户端首帧结构不一致。
477
478
  */
478
479
  var AppSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
479
480
  __name: "AppSidebar",
@@ -484,6 +485,12 @@ var AppSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
484
485
  const route = useRoute();
485
486
  const site = useSiteConfig();
486
487
  const store = useAppStore();
488
+ const navHydrated = ref(false);
489
+ /**
490
+ * 导航信息架构:12 个平铺条目 → 三组语义分区(控制台 / 运维 / 系统)。
491
+ * 分组的价值不在多一层容器,而在"扫视成本":同组内的入口是同一件事的不同面,
492
+ * 组与组之间才是真正的语境切换。空组自动折叠,权限过滤后不残留空标题。
493
+ */
487
494
  const menuGroups = computed(() => [
488
495
  {
489
496
  id: "console",
@@ -581,44 +588,66 @@ var AppSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
581
588
  }
582
589
  ].map((g) => ({
583
590
  ...g,
584
- items: g.items.filter((m) => !m.adminOnly || userStore.isAdmin)
591
+ items: g.items.filter((m) => !m.adminOnly || navHydrated.value && userStore.isAdmin)
585
592
  })).filter((g) => g.items.length > 0));
586
593
  const isActive = (key) => key === "/" ? route.path === "/" : route.path.startsWith(key);
587
594
  const go = (key) => {
595
+ if (isDrawer.value) store.closeMobileNav();
588
596
  if (!isActive(key)) navigateTo(key);
589
597
  };
598
+ const { isDrawer, isTablet } = useResponsive();
599
+ const navMode = computed(() => navHydrated.value ? isDrawer.value ? "drawer" : isTablet.value ? "rail" : "full" : void 0);
600
+ const effectiveCollapsed = computed(() => isDrawer.value ? false : isTablet.value ? true : store.sidebarCollapsed);
601
+ const showLabels = computed(() => !effectiveCollapsed.value);
602
+ const drawerOpen = computed(() => isDrawer.value && store.mobileNavOpen);
603
+ /** 路由变化即收抽屉:抽屉是"去别处"的中转,不是常驻面板 */
604
+ watch(() => route.path, () => {
605
+ if (store.mobileNavOpen) store.closeMobileNav();
606
+ });
607
+ /**
608
+ * 形态镜像到 <body>(nav-drawer / nav-drawer-open)。
609
+ *
610
+ * 为什么不用 :class 直接打在 a-layout-sider 上:实测 antd 的 Sider 不会把
611
+ * 动态 class 落到它渲染的 <aside> 上(静态 class 可以,DOM 里查不到 is-drawer)。
612
+ * 依赖第三方组件的 attr 透传行为来做**结构性**布局是脆的 ——
613
+ * 改为把形态写在 body 上,CSS 由 main.css 的响应式层接管,只依赖自己的状态。
614
+ */
615
+ watchEffect(() => {});
616
+ /** 抽屉展开时锁画布滚动(否则背景跟着手指跑,浮层失去"压在台面上"的物理感) */
617
+ watch(drawerOpen, (open) => {});
590
618
  return (_ctx, _push, _parent, _attrs) => {
591
619
  const _component_a_layout_sider = LayoutSider;
592
620
  const _component_AwLogo = AwLogo_default;
593
- _push(ssrRenderComponent(_component_a_layout_sider, mergeProps({
594
- collapsed: unref(store).sidebarCollapsed,
595
- "onUpdate:collapsed": ($event) => unref(store).sidebarCollapsed = $event,
621
+ _push(`<!--[-->`);
622
+ _push(ssrRenderComponent(_component_a_layout_sider, {
623
+ collapsed: unref(effectiveCollapsed),
596
624
  trigger: null,
597
625
  collapsible: "",
598
- breakpoint: "lg",
599
626
  width: 228,
600
627
  "collapsed-width": 64,
601
- class: "app-sider"
602
- }, _attrs), {
628
+ class: "app-sider",
629
+ "data-nav-mode": unref(navMode),
630
+ "aria-hidden": unref(isDrawer) && !unref(drawerOpen) ? "true" : void 0
631
+ }, {
603
632
  default: withCtx((_, _push, _parent, _scopeId) => {
604
633
  if (_push) {
605
- _push(`<div class="logo" data-v-462694cc${_scopeId}><div class="logo-mark" aria-hidden="true" data-v-462694cc${_scopeId}>`);
634
+ _push(`<div class="logo" data-v-a91ac3dd${_scopeId}><div class="logo-mark" aria-hidden="true" data-v-a91ac3dd${_scopeId}>`);
606
635
  _push(ssrRenderComponent(_component_AwLogo, { size: 30 }, null, _parent, _scopeId));
607
- _push(`</div><div class="logo-text" style="${ssrRenderStyle(!unref(store).sidebarCollapsed ? null : { display: "none" })}" data-v-462694cc${_scopeId}><span class="logo-title" data-v-462694cc${_scopeId}>${ssrInterpolate(unref(site).name)}</span><span class="logo-sub" data-v-462694cc${_scopeId}>digital twin</span></div></div><nav class="app-menu" data-v-462694cc${_scopeId}><!--[-->`);
636
+ _push(`</div><div class="logo-text" style="${ssrRenderStyle(unref(showLabels) ? null : { display: "none" })}" data-v-a91ac3dd${_scopeId}><span class="logo-title" data-v-a91ac3dd${_scopeId}>${ssrInterpolate(unref(site).name)}</span><span class="logo-sub" data-v-a91ac3dd${_scopeId}>digital twin</span></div></div><nav class="app-menu" data-v-a91ac3dd${_scopeId}><!--[-->`);
608
637
  ssrRenderList(unref(menuGroups), (group) => {
609
- _push(`<div class="menu-group" data-v-462694cc${_scopeId}><div class="menu-group-label" style="${ssrRenderStyle(!unref(store).sidebarCollapsed ? null : { display: "none" })}" data-v-462694cc${_scopeId}><span class="menu-group-text" data-v-462694cc${_scopeId}>${ssrInterpolate(group.label)}</span><span class="menu-group-rule" aria-hidden="true" data-v-462694cc${_scopeId}></span></div><div class="menu-group-sep" aria-hidden="true" style="${ssrRenderStyle(unref(store).sidebarCollapsed ? null : { display: "none" })}" data-v-462694cc${_scopeId}></div><!--[-->`);
638
+ _push(`<div class="menu-group" data-v-a91ac3dd${_scopeId}><div class="menu-group-label" style="${ssrRenderStyle(unref(showLabels) ? null : { display: "none" })}" data-v-a91ac3dd${_scopeId}><span class="menu-group-text" data-v-a91ac3dd${_scopeId}>${ssrInterpolate(group.label)}</span><span class="menu-group-rule" aria-hidden="true" data-v-a91ac3dd${_scopeId}></span></div><div class="menu-group-sep" aria-hidden="true" style="${ssrRenderStyle(!unref(showLabels) ? null : { display: "none" })}" data-v-a91ac3dd${_scopeId}></div><!--[-->`);
610
639
  ssrRenderList(group.items, (item) => {
611
- _push(`<button type="button" class="${ssrRenderClass([{ active: isActive(item.key) }, "menu-item im"])}"${ssrRenderAttr("title", unref(store).sidebarCollapsed ? item.label : void 0)} data-v-462694cc${_scopeId}><span class="${ssrRenderClass([[item.icon, item.motion], "menu-icon"])}" data-v-462694cc${_scopeId}></span><span class="menu-label" style="${ssrRenderStyle(!unref(store).sidebarCollapsed ? null : { display: "none" })}" data-v-462694cc${_scopeId}>${ssrInterpolate(item.label)}</span></button>`);
640
+ _push(`<button type="button" class="${ssrRenderClass([{ active: isActive(item.key) }, "menu-item im"])}"${ssrRenderAttr("title", !unref(showLabels) ? item.label : void 0)} data-v-a91ac3dd${_scopeId}><span class="${ssrRenderClass([[item.icon, item.motion], "menu-icon"])}" data-v-a91ac3dd${_scopeId}></span><span class="menu-label" style="${ssrRenderStyle(unref(showLabels) ? null : { display: "none" })}" data-v-a91ac3dd${_scopeId}>${ssrInterpolate(item.label)}</span></button>`);
612
641
  });
613
642
  _push(`<!--]--></div>`);
614
643
  });
615
- _push(`<!--]--></nav><div class="sider-footer" style="${ssrRenderStyle(!unref(store).sidebarCollapsed ? null : { display: "none" })}" data-v-462694cc${_scopeId}><div class="footer-rule" data-v-462694cc${_scopeId}></div><div class="footer-line" data-v-462694cc${_scopeId}><span data-v-462694cc${_scopeId}>v${ssrInterpolate(unref(site).version)}</span><span class="sep" data-v-462694cc${_scopeId}>/</span><span data-v-462694cc${_scopeId}>${ssrInterpolate(unref(site).mode)}</span></div></div>`);
644
+ _push(`<!--]--></nav><div class="sider-footer" style="${ssrRenderStyle(unref(showLabels) ? null : { display: "none" })}" data-v-a91ac3dd${_scopeId}><div class="footer-rule" data-v-a91ac3dd${_scopeId}></div><div class="footer-line" data-v-a91ac3dd${_scopeId}><span data-v-a91ac3dd${_scopeId}>v${ssrInterpolate(unref(site).version)}</span><span class="sep" data-v-a91ac3dd${_scopeId}>/</span><span data-v-a91ac3dd${_scopeId}>${ssrInterpolate(unref(site).mode)}</span></div></div>`);
616
645
  } else return [
617
646
  createVNode("div", { class: "logo" }, [createVNode("div", {
618
647
  class: "logo-mark",
619
648
  "aria-hidden": "true"
620
649
  }, [createVNode(_component_AwLogo, { size: 30 })]), createVNode(Transition, { name: "slide-fade" }, {
621
- default: withCtx(() => [withDirectives(createVNode("div", { class: "logo-text" }, [createVNode("span", { class: "logo-title" }, toDisplayString(unref(site).name), 1), createVNode("span", { class: "logo-sub" }, "digital twin")], 512), [[vShow, !unref(store).sidebarCollapsed]])]),
650
+ default: withCtx(() => [withDirectives(createVNode("div", { class: "logo-text" }, [createVNode("span", { class: "logo-title" }, toDisplayString(unref(site).name), 1), createVNode("span", { class: "logo-sub" }, "digital twin")], 512), [[vShow, unref(showLabels)]])]),
622
651
  _: 1
623
652
  })]),
624
653
  createVNode("nav", { class: "app-menu" }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(menuGroups), (group) => {
@@ -629,19 +658,19 @@ var AppSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
629
658
  withDirectives(createVNode("div", { class: "menu-group-label" }, [createVNode("span", { class: "menu-group-text" }, toDisplayString(group.label), 1), createVNode("span", {
630
659
  class: "menu-group-rule",
631
660
  "aria-hidden": "true"
632
- })], 512), [[vShow, !unref(store).sidebarCollapsed]]),
661
+ })], 512), [[vShow, unref(showLabels)]]),
633
662
  withDirectives(createVNode("div", {
634
663
  class: "menu-group-sep",
635
664
  "aria-hidden": "true"
636
- }, null, 512), [[vShow, unref(store).sidebarCollapsed]]),
665
+ }, null, 512), [[vShow, !unref(showLabels)]]),
637
666
  (openBlock(true), createBlock(Fragment, null, renderList(group.items, (item) => {
638
667
  return openBlock(), createBlock("button", {
639
668
  key: item.key,
640
669
  type: "button",
641
670
  class: ["menu-item im", { active: isActive(item.key) }],
642
- title: unref(store).sidebarCollapsed ? item.label : void 0,
671
+ title: !unref(showLabels) ? item.label : void 0,
643
672
  onClick: ($event) => go(item.key)
644
- }, [createVNode("span", { class: ["menu-icon", [item.icon, item.motion]] }, null, 2), withDirectives(createVNode("span", { class: "menu-label" }, toDisplayString(item.label), 513), [[vShow, !unref(store).sidebarCollapsed]])], 10, ["title", "onClick"]);
673
+ }, [createVNode("span", { class: ["menu-icon", [item.icon, item.motion]] }, null, 2), withDirectives(createVNode("span", { class: "menu-label" }, toDisplayString(item.label), 513), [[vShow, unref(showLabels)]])], 10, ["title", "onClick"]);
645
674
  }), 128))
646
675
  ]);
647
676
  }), 128))]),
@@ -649,11 +678,14 @@ var AppSidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
649
678
  createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
650
679
  createVNode("span", { class: "sep" }, "/"),
651
680
  createVNode("span", null, toDisplayString(unref(site).mode), 1)
652
- ])], 512), [[vShow, !unref(store).sidebarCollapsed]])
681
+ ])], 512), [[vShow, unref(showLabels)]])
653
682
  ];
654
683
  }),
655
684
  _: 1
656
685
  }, _parent));
686
+ if (unref(drawerOpen)) _push(`<div class="nav-scrim" aria-hidden="true" data-v-a91ac3dd></div>`);
687
+ else _push(`<!---->`);
688
+ _push(`<!--]-->`);
657
689
  };
658
690
  }
659
691
  });
@@ -665,7 +697,7 @@ AppSidebar_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
665
697
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/AppSidebar.vue");
666
698
  return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
667
699
  };
668
- var AppSidebar_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AppSidebar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-462694cc"]]), { __name: "AppSidebar" });
700
+ var AppSidebar_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AppSidebar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a91ac3dd"]]), { __name: "AppSidebar" });
669
701
  //#endregion
670
702
  //#region app/stores/route-trail.ts
671
703
  var useRouteTrailStore = (0, composables_exports.defineStore)("app.routeTrail", () => {
@@ -747,6 +779,10 @@ function useRouteMeta() {
747
779
  key: "menu.dcw",
748
780
  icon: "i-tabler-settings-automation"
749
781
  },
782
+ "/aml": {
783
+ key: "menu.aml",
784
+ icon: "i-tabler-flask"
785
+ },
750
786
  "/logs": {
751
787
  key: "menu.logs",
752
788
  icon: "i-tabler-list-details"
@@ -860,7 +896,7 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
860
896
  }
861
897
  };
862
898
  const localeOptions = computed(() => locales.value.map((l) => ({
863
- label: l.name,
899
+ label: isMobile.value ? l.code.split("-")[0].toUpperCase() : l.name,
864
900
  value: l.code
865
901
  })));
866
902
  const switchLocale = (value) => {
@@ -870,6 +906,13 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
870
906
  (void 0).location.reload();
871
907
  }
872
908
  };
909
+ const { isDrawer, isMobile } = useResponsive();
910
+ const navToggleLabel = computed(() => isDrawer.value ? store.mobileNavOpen ? t("header.closeNav") : t("header.openNav") : store.sidebarCollapsed ? t("header.expand") : t("header.collapse"));
911
+ const toggleNav = () => {
912
+ if (isDrawer.value) store.toggleMobileNav();
913
+ else store.toggleSidebar();
914
+ };
915
+ const currentTitle = computed(() => metaFor(route.path).title);
873
916
  const hydrated = ref(false);
874
917
  const plotting = ref(false);
875
918
  let plotTimer = null;
@@ -971,29 +1014,29 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
971
1014
  _push(ssrRenderComponent(_component_a_layout_header, mergeProps({ class: "app-header app-header-glass" }, _attrs), {
972
1015
  default: withCtx((_, _push, _parent, _scopeId) => {
973
1016
  if (_push) {
974
- _push(`<div class="header-left" data-v-e7a03727${_scopeId}><button class="collapse-btn"${ssrRenderAttr("aria-label", unref(store).sidebarCollapsed ? unref(t)("header.expand") : unref(t)("header.collapse"))} data-v-e7a03727${_scopeId}><span class="i-tabler-menu-2" data-v-e7a03727${_scopeId}></span></button><span class="rail-mark i-tabler-route" data-v-e7a03727${_scopeId}></span><nav class="trail"${ssrRenderAttr("aria-label", unref(t)("header.trail"))} data-v-e7a03727${_scopeId}><div${ssrRenderAttrs({
1017
+ _push(`<div class="header-left" data-v-a6ff3f55${_scopeId}><button class="collapse-btn"${ssrRenderAttr("aria-label", unref(navToggleLabel))}${ssrRenderAttr("aria-expanded", unref(isDrawer) ? unref(store).mobileNavOpen : !unref(store).sidebarCollapsed)} data-v-a6ff3f55${_scopeId}><span class="i-tabler-menu-2" data-v-a6ff3f55${_scopeId}></span></button><span class="mobile-title" data-v-a6ff3f55${_scopeId}>${ssrInterpolate(unref(currentTitle))}</span><span class="rail-mark i-tabler-route" data-v-a6ff3f55${_scopeId}></span><nav class="trail"${ssrRenderAttr("aria-label", unref(t)("header.trail"))} data-v-a6ff3f55${_scopeId}><div${ssrRenderAttrs({
975
1018
  name: "stamp",
976
1019
  class: "trail-row"
977
- })} data-v-e7a03727>`);
1020
+ })} data-v-a6ff3f55>`);
978
1021
  if (unref(hydrated)) {
979
1022
  _push(`<!--[-->`);
980
1023
  ssrRenderList(unref(trail).waypoints, (w, i) => {
981
1024
  _push(`<!--[-->`);
982
- if (i > 0) _push(`<span class="trail-link" aria-hidden="true" data-v-e7a03727${_scopeId}></span>`);
1025
+ if (i > 0) _push(`<span class="trail-link" aria-hidden="true" data-v-a6ff3f55${_scopeId}></span>`);
983
1026
  else _push(`<!---->`);
984
- _push(`<div class="${ssrRenderClass([{ active: w.path === unref(route).path }, "trail-node"])}" role="button" tabindex="0"${ssrRenderAttr("title", unref(metaFor)(w.path).title)} data-v-e7a03727${_scopeId}><span class="${ssrRenderClass([unref(metaFor)(w.path).icon, "node-icon"])}" data-v-e7a03727${_scopeId}></span><span class="node-title" data-v-e7a03727${_scopeId}>${ssrInterpolate(unref(metaFor)(w.path).title)}</span><button class="node-close"${ssrRenderAttr("aria-label", _ctx.$t("appHeader.kzwjv99001", { p0: unref(metaFor)(w.path).title }))}${ssrRenderAttr("title", _ctx.$t("appHeader.kzwjv99001", { p0: unref(metaFor)(w.path).title }))} data-v-e7a03727${_scopeId}><span class="i-tabler-x" data-v-e7a03727${_scopeId}></span></button></div><!--]-->`);
1027
+ _push(`<div class="${ssrRenderClass([{ active: w.path === unref(route).path }, "trail-node"])}" role="button" tabindex="0"${ssrRenderAttr("title", unref(metaFor)(w.path).title)} data-v-a6ff3f55${_scopeId}><span class="${ssrRenderClass([unref(metaFor)(w.path).icon, "node-icon"])}" data-v-a6ff3f55${_scopeId}></span><span class="node-title" data-v-a6ff3f55${_scopeId}>${ssrInterpolate(unref(metaFor)(w.path).title)}</span><button class="node-close"${ssrRenderAttr("aria-label", _ctx.$t("appHeader.kzwjv99001", { p0: unref(metaFor)(w.path).title }))}${ssrRenderAttr("title", _ctx.$t("appHeader.kzwjv99001", { p0: unref(metaFor)(w.path).title }))} data-v-a6ff3f55${_scopeId}><span class="i-tabler-x" data-v-a6ff3f55${_scopeId}></span></button></div><!--]-->`);
985
1028
  });
986
1029
  _push(`<!--]-->`);
987
1030
  }
988
- _push(`</div></nav></div><div class="header-right" data-v-e7a03727${_scopeId}>`);
1031
+ _push(`</div></nav></div><div class="header-right" data-v-a6ff3f55${_scopeId}>`);
989
1032
  _push(ssrRenderComponent(_component_ClientOnly, null, {}, _parent, _scopeId));
990
- if (unref(wsVisible)) _push(`<span class="${ssrRenderClass([unref(wsClass), "ws-dot"])}"${ssrRenderAttr("title", unref(wsLabel))} data-v-e7a03727${_scopeId}></span>`);
1033
+ if (unref(hydrated) && unref(wsVisible)) _push(`<span class="${ssrRenderClass([unref(wsClass), "ws-dot"])}"${ssrRenderAttr("title", unref(wsLabel))} data-v-a6ff3f55${_scopeId}></span>`);
991
1034
  else _push(`<!---->`);
992
1035
  _push(ssrRenderComponent(_component_a_tooltip, { title: unref(t)("header.fullscreen") }, {
993
1036
  default: withCtx((_, _push, _parent, _scopeId) => {
994
- if (_push) _push(`<button class="icon-btn" data-v-e7a03727${_scopeId}><span class="${ssrRenderClass([{ hidden: unref(isFullscreen) }, "i-tabler-arrows-maximize"])}" data-v-e7a03727${_scopeId}></span><span class="${ssrRenderClass([{ hidden: !unref(isFullscreen) }, "i-tabler-arrows-minimize"])}" data-v-e7a03727${_scopeId}></span></button>`);
1037
+ if (_push) _push(`<button class="icon-btn hdr-fullscreen" data-v-a6ff3f55${_scopeId}><span class="${ssrRenderClass([{ hidden: unref(isFullscreen) }, "i-tabler-arrows-maximize"])}" data-v-a6ff3f55${_scopeId}></span><span class="${ssrRenderClass([{ hidden: !unref(isFullscreen) }, "i-tabler-arrows-minimize"])}" data-v-a6ff3f55${_scopeId}></span></button>`);
995
1038
  else return [createVNode("button", {
996
- class: "icon-btn",
1039
+ class: "icon-btn hdr-fullscreen",
997
1040
  onClick: toggleFullscreen
998
1041
  }, [createVNode("span", { class: ["i-tabler-arrows-maximize", { hidden: unref(isFullscreen) }] }, null, 2), createVNode("span", { class: ["i-tabler-arrows-minimize", { hidden: !unref(isFullscreen) }] }, null, 2)])];
999
1042
  }),
@@ -1009,7 +1052,7 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
1009
1052
  }, null, _parent, _scopeId));
1010
1053
  _push(ssrRenderComponent(_component_a_tooltip, { title: unref(store).isDark ? unref(t)("common.light") : unref(t)("common.dark") }, {
1011
1054
  default: withCtx((_, _push, _parent, _scopeId) => {
1012
- if (_push) _push(`<button class="icon-btn" data-v-e7a03727${_scopeId}><span class="${ssrRenderClass([{ hidden: unref(store).isDark }, "i-tabler-sun-high"])}" data-v-e7a03727${_scopeId}></span><span class="${ssrRenderClass([{ hidden: !unref(store).isDark }, "i-tabler-moon-stars"])}" data-v-e7a03727${_scopeId}></span></button>`);
1055
+ if (_push) _push(`<button class="icon-btn" data-v-a6ff3f55${_scopeId}><span class="${ssrRenderClass([{ hidden: unref(store).isDark }, "i-tabler-sun-high"])}" data-v-a6ff3f55${_scopeId}></span><span class="${ssrRenderClass([{ hidden: !unref(store).isDark }, "i-tabler-moon-stars"])}" data-v-a6ff3f55${_scopeId}></span></button>`);
1013
1056
  else return [createVNode("button", {
1014
1057
  class: "icon-btn",
1015
1058
  onClick: ($event) => unref(store).toggleDark()
@@ -1031,7 +1074,7 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
1031
1074
  danger: item.danger
1032
1075
  }, {
1033
1076
  default: withCtx((_, _push, _parent, _scopeId) => {
1034
- if (_push) _push(`<span class="${ssrRenderClass([item.icon, "mr-2"])}" data-v-e7a03727${_scopeId}></span> ${ssrInterpolate(item.label)}`);
1077
+ if (_push) _push(`<span class="${ssrRenderClass([item.icon, "mr-2"])}" data-v-a6ff3f55${_scopeId}></span> ${ssrInterpolate(item.label)}`);
1035
1078
  else return [createVNode("span", { class: [item.icon, "mr-2"] }, null, 2), createTextVNode(" " + toDisplayString(item.label), 1)];
1036
1079
  }),
1037
1080
  _: 2
@@ -1066,9 +1109,9 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
1066
1109
  }),
1067
1110
  default: withCtx((_, _push, _parent, _scopeId) => {
1068
1111
  if (_push) {
1069
- _push(`<div class="user-chip" data-v-e7a03727${_scopeId}>`);
1112
+ _push(`<div class="user-chip" data-v-a6ff3f55${_scopeId}>`);
1070
1113
  _push(ssrRenderComponent(_component_ClientOnly, null, { fallback: withCtx((_, _push, _parent, _scopeId) => {
1071
- if (_push) _push(`<span class="user-initial aw-avatar" data-v-e7a03727${_scopeId}>·</span><span class="user-meta" data-v-e7a03727${_scopeId}><span class="user-name" data-v-e7a03727${_scopeId}>·</span><span class="user-role" data-v-e7a03727${_scopeId}>·</span></span>`);
1114
+ if (_push) _push(`<span class="user-initial aw-avatar" data-v-a6ff3f55${_scopeId}>·</span><span class="user-meta" data-v-a6ff3f55${_scopeId}><span class="user-name" data-v-a6ff3f55${_scopeId}>·</span><span class="user-role" data-v-a6ff3f55${_scopeId}>·</span></span>`);
1072
1115
  else return [createVNode("span", { class: "user-initial aw-avatar" }, "·"), createVNode("span", { class: "user-meta" }, [createVNode("span", { class: "user-name" }, "·"), createVNode("span", { class: "user-role" }, "·")])];
1073
1116
  }) }, _parent, _scopeId));
1074
1117
  _push(`</div>`);
@@ -1080,14 +1123,20 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
1080
1123
  }),
1081
1124
  _: 1
1082
1125
  }, _parent, _scopeId));
1083
- _push(`</div><span class="${ssrRenderClass([{ run: unref(plotting) }, "plotter-line"])}" aria-hidden="true" data-v-e7a03727${_scopeId}></span>`);
1126
+ _push(`</div><span class="${ssrRenderClass([{ run: unref(plotting) }, "plotter-line"])}" aria-hidden="true" data-v-a6ff3f55${_scopeId}></span>`);
1084
1127
  } else return [
1085
1128
  createVNode("div", { class: "header-left" }, [
1086
1129
  createVNode("button", {
1087
1130
  class: "collapse-btn",
1088
- "aria-label": unref(store).sidebarCollapsed ? unref(t)("header.expand") : unref(t)("header.collapse"),
1089
- onClick: ($event) => unref(store).toggleSidebar()
1090
- }, [createVNode("span", { class: "i-tabler-menu-2" })], 8, ["aria-label", "onClick"]),
1131
+ "aria-label": unref(navToggleLabel),
1132
+ "aria-expanded": unref(isDrawer) ? unref(store).mobileNavOpen : !unref(store).sidebarCollapsed,
1133
+ onClick: ($event) => toggleNav()
1134
+ }, [createVNode("span", { class: "i-tabler-menu-2" })], 8, [
1135
+ "aria-label",
1136
+ "aria-expanded",
1137
+ "onClick"
1138
+ ]),
1139
+ createVNode("span", { class: "mobile-title" }, toDisplayString(unref(currentTitle)), 1),
1091
1140
  createVNode("span", { class: "rail-mark i-tabler-route" }),
1092
1141
  createVNode("nav", {
1093
1142
  class: "trail",
@@ -1176,14 +1225,14 @@ var AppHeader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
1176
1225
  })) : createCommentVNode("", true)]),
1177
1226
  _: 1
1178
1227
  }),
1179
- unref(wsVisible) ? (openBlock(), createBlock("span", {
1228
+ unref(hydrated) && unref(wsVisible) ? (openBlock(), createBlock("span", {
1180
1229
  key: 0,
1181
1230
  class: ["ws-dot", unref(wsClass)],
1182
1231
  title: unref(wsLabel)
1183
1232
  }, null, 10, ["title"])) : createCommentVNode("", true),
1184
1233
  createVNode(_component_a_tooltip, { title: unref(t)("header.fullscreen") }, {
1185
1234
  default: withCtx(() => [createVNode("button", {
1186
- class: "icon-btn",
1235
+ class: "icon-btn hdr-fullscreen",
1187
1236
  onClick: toggleFullscreen
1188
1237
  }, [createVNode("span", { class: ["i-tabler-arrows-maximize", { hidden: unref(isFullscreen) }] }, null, 2), createVNode("span", { class: ["i-tabler-arrows-minimize", { hidden: !unref(isFullscreen) }] }, null, 2)])]),
1189
1238
  _: 1
@@ -1243,7 +1292,7 @@ AppHeader_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
1243
1292
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/AppHeader.vue");
1244
1293
  return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
1245
1294
  };
1246
- var AppHeader_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AppHeader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e7a03727"]]), { __name: "AppHeader" });
1295
+ var AppHeader_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AppHeader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a6ff3f55"]]), { __name: "AppHeader" });
1247
1296
  //#endregion
1248
1297
  //#region app/layouts/default.vue?vue&type=script&setup=true&lang.ts
1249
1298
  var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -1294,13 +1343,28 @@ var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
1294
1343
  style: { color: unref(token)?.colorTextSecondary }
1295
1344
  }, {
1296
1345
  default: withCtx((_, _push, _parent, _scopeId) => {
1297
- if (_push) _push(`<span class="footer-title aw-serif-accent" data-v-b48dd792${_scopeId}>${ssrInterpolate(unref(site).title)}</span><span class="sep" data-v-b48dd792${_scopeId}>/</span><span data-v-b48dd792${_scopeId}>v${ssrInterpolate(unref(site).version)}</span><span class="sep" data-v-b48dd792${_scopeId}>/</span><span data-v-b48dd792${_scopeId}>mode=${ssrInterpolate(unref(site).mode)}</span>`);
1346
+ if (_push) _push(`<span class="footer-title aw-serif-accent" data-v-e4abc244${_scopeId}>${ssrInterpolate(unref(site).title)}</span><span class="sep" data-v-e4abc244${_scopeId}>/</span><span data-v-e4abc244${_scopeId}>mode=${ssrInterpolate(unref(site).mode)}</span><span class="footer-corner" data-v-e4abc244${_scopeId}><span data-v-e4abc244${_scopeId}>v${ssrInterpolate(unref(site).version)}</span><span class="sep" data-v-e4abc244${_scopeId}>·</span><a class="footer-link" href="https://github.com/kingdol666/AgentWorkShop" target="_blank" rel="noopener" data-v-e4abc244${_scopeId}>GitHub</a><span class="sep" data-v-e4abc244${_scopeId}>·</span><a class="footer-link" href="https://kingdol666.github.io/AgentWorkShop/" target="_blank" rel="noopener" data-v-e4abc244${_scopeId}>Docs</a></span>`);
1298
1347
  else return [
1299
1348
  createVNode("span", { class: "footer-title aw-serif-accent" }, toDisplayString(unref(site).title), 1),
1300
1349
  createVNode("span", { class: "sep" }, "/"),
1301
- createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1302
- createVNode("span", { class: "sep" }, "/"),
1303
- createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1)
1350
+ createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1),
1351
+ createVNode("span", { class: "footer-corner" }, [
1352
+ createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1353
+ createVNode("span", { class: "sep" }, "·"),
1354
+ createVNode("a", {
1355
+ class: "footer-link",
1356
+ href: "https://github.com/kingdol666/AgentWorkShop",
1357
+ target: "_blank",
1358
+ rel: "noopener"
1359
+ }, "GitHub"),
1360
+ createVNode("span", { class: "sep" }, "·"),
1361
+ createVNode("a", {
1362
+ class: "footer-link",
1363
+ href: "https://kingdol666.github.io/AgentWorkShop/",
1364
+ target: "_blank",
1365
+ rel: "noopener"
1366
+ }, "Docs")
1367
+ ])
1304
1368
  ];
1305
1369
  }),
1306
1370
  _: 1
@@ -1318,9 +1382,24 @@ var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
1318
1382
  default: withCtx(() => [
1319
1383
  createVNode("span", { class: "footer-title aw-serif-accent" }, toDisplayString(unref(site).title), 1),
1320
1384
  createVNode("span", { class: "sep" }, "/"),
1321
- createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1322
- createVNode("span", { class: "sep" }, "/"),
1323
- createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1)
1385
+ createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1),
1386
+ createVNode("span", { class: "footer-corner" }, [
1387
+ createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1388
+ createVNode("span", { class: "sep" }, "·"),
1389
+ createVNode("a", {
1390
+ class: "footer-link",
1391
+ href: "https://github.com/kingdol666/AgentWorkShop",
1392
+ target: "_blank",
1393
+ rel: "noopener"
1394
+ }, "GitHub"),
1395
+ createVNode("span", { class: "sep" }, "·"),
1396
+ createVNode("a", {
1397
+ class: "footer-link",
1398
+ href: "https://kingdol666.github.io/AgentWorkShop/",
1399
+ target: "_blank",
1400
+ rel: "noopener"
1401
+ }, "Docs")
1402
+ ])
1324
1403
  ]),
1325
1404
  _: 1
1326
1405
  }, 8, ["style"])
@@ -1328,7 +1407,7 @@ var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
1328
1407
  }),
1329
1408
  _: 3
1330
1409
  }, _parent, _scopeId));
1331
- _push(`<span class="aw-noise" aria-hidden="true" data-v-b48dd792${_scopeId}></span>`);
1410
+ _push(`<span class="aw-noise" aria-hidden="true" data-v-e4abc244${_scopeId}></span>`);
1332
1411
  } else return [
1333
1412
  createVNode(_component_AppSidebar),
1334
1413
  createVNode(_component_a_layout, {
@@ -1358,9 +1437,24 @@ var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
1358
1437
  default: withCtx(() => [
1359
1438
  createVNode("span", { class: "footer-title aw-serif-accent" }, toDisplayString(unref(site).title), 1),
1360
1439
  createVNode("span", { class: "sep" }, "/"),
1361
- createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1362
- createVNode("span", { class: "sep" }, "/"),
1363
- createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1)
1440
+ createVNode("span", null, "mode=" + toDisplayString(unref(site).mode), 1),
1441
+ createVNode("span", { class: "footer-corner" }, [
1442
+ createVNode("span", null, "v" + toDisplayString(unref(site).version), 1),
1443
+ createVNode("span", { class: "sep" }, "·"),
1444
+ createVNode("a", {
1445
+ class: "footer-link",
1446
+ href: "https://github.com/kingdol666/AgentWorkShop",
1447
+ target: "_blank",
1448
+ rel: "noopener"
1449
+ }, "GitHub"),
1450
+ createVNode("span", { class: "sep" }, "·"),
1451
+ createVNode("a", {
1452
+ class: "footer-link",
1453
+ href: "https://kingdol666.github.io/AgentWorkShop/",
1454
+ target: "_blank",
1455
+ rel: "noopener"
1456
+ }, "Docs")
1457
+ ])
1364
1458
  ]),
1365
1459
  _: 1
1366
1460
  }, 8, ["style"])
@@ -1386,7 +1480,7 @@ default_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
1386
1480
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("layouts/default.vue");
1387
1481
  return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
1388
1482
  };
1389
- var default_default = /*#__PURE__*/ _plugin_vue_export_helper_default(default_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b48dd792"]]);
1483
+ var default_default = /*#__PURE__*/ _plugin_vue_export_helper_default(default_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e4abc244"]]);
1390
1484
 
1391
1485
  export { default_default as default };
1392
- //# sourceMappingURL=default-CZmZFpqH.mjs.map
1486
+ //# sourceMappingURL=default-BE4r0FZN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-CZmZFpqH.mjs","sources":["../../../../node_modules/.pnpm/@ant-design+icons-svg@4.5.0/node_modules/@ant-design/icons-svg/es/asn/BarsOutlined.js","../../../../node_modules/.pnpm/@ant-design+icons-vue@7.0.1_vue@3.5.41_typescript@5.9.3_/node_modules/@ant-design/icons-vue/es/icons/BarsOutlined.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/style/light.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/style/index.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/layout.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/Sider.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/index.js","../../../../app/components/AwLogo.vue","../../../../app/components/AppSidebar.vue","../../../../app/stores/route-trail.ts","../../../../app/composables/useRouteMeta.ts","../../../../app/components/AppHeader.vue","../../../../app/layouts/default.vue"],"names":["BarsOutlined","_createVNode","AntdIcon","BarsOutlinedSvg","mergeToken","useConfigInject","useStyle","Sider","api","$t"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6]}
1
+ {"version":3,"file":"default-BE4r0FZN.mjs","sources":["../../../../node_modules/.pnpm/@ant-design+icons-svg@4.5.0/node_modules/@ant-design/icons-svg/es/asn/BarsOutlined.js","../../../../node_modules/.pnpm/@ant-design+icons-vue@7.0.1_vue@3.5.41_typescript@5.9.3_/node_modules/@ant-design/icons-vue/es/icons/BarsOutlined.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/style/light.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/style/index.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/layout.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/Sider.js","../../../../node_modules/.pnpm/ant-design-vue@4.2.6_vue@3.5.41_typescript@5.9.3_/node_modules/ant-design-vue/es/layout/index.js","../../../../app/components/AwLogo.vue","../../../../app/components/AppSidebar.vue","../../../../app/stores/route-trail.ts","../../../../app/composables/useRouteMeta.ts","../../../../app/components/AppHeader.vue","../../../../app/layouts/default.vue"],"names":["BarsOutlined","_createVNode","AntdIcon","BarsOutlinedSvg","mergeToken","useConfigInject","useStyle","Sider","api","$t"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6]}