agentworkshop 0.7.60 → 0.7.62

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 (292) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +1 -1
  2. package/.output/.AgentWorkShop/prompts/host-tools.json +1 -1
  3. package/.output/nitro.json +1 -1
  4. package/.output/public/_nuxt/B5RD2ZST.js +2 -0
  5. package/.output/public/_nuxt/{KXQppTXc.js → BTXdYngG.js} +1 -1
  6. package/.output/public/_nuxt/{Ce5SiMQR2.js → BXbKTAwC2.js} +1 -1
  7. package/.output/public/_nuxt/B_6yBa_Z.js +1 -0
  8. package/.output/public/_nuxt/B_ic601Y.js +1 -0
  9. package/.output/public/_nuxt/{DhSlJyZD2.js → BegV7-FE2.js} +1 -1
  10. package/.output/public/_nuxt/{D9sgxxsM2.js → BrRXGr472.js} +1 -1
  11. package/.output/public/_nuxt/{BeNdseTX.js → BtBgrPNT.js} +1 -1
  12. package/.output/public/_nuxt/{Cyd68Xbv2.js → C5MPzgon2.js} +1 -1
  13. package/.output/public/_nuxt/{DBdwjOGB2.js → CI5sliIF2.js} +1 -1
  14. package/.output/public/_nuxt/CI8awYVQ2.js +1 -0
  15. package/.output/public/_nuxt/{Cfp00Rdo.js → CK2ts9sD.js} +1 -1
  16. package/.output/public/_nuxt/{BjUpWKS6.js → CPZKwmLQ.js} +1 -1
  17. package/.output/public/_nuxt/{CjeMxUv8.js → CVUMEGa1.js} +1 -1
  18. package/.output/public/_nuxt/{p2sDc0tO2.js → CcLFZjCI2.js} +1 -1
  19. package/.output/public/_nuxt/{C93LpBMF.js → CfIGBe_4.js} +3 -3
  20. package/.output/public/_nuxt/{DTcsb0fG.js → Ci5kuU1q.js} +1 -1
  21. package/.output/public/_nuxt/CiyTTgqr.js +106 -0
  22. package/.output/public/_nuxt/{CgbP5yJk2.js → CkYk8bj02.js} +7 -7
  23. package/.output/public/_nuxt/Cmiz_VOb2.js +47 -0
  24. package/.output/public/_nuxt/Cnf1PFhB2.js +1 -0
  25. package/.output/public/_nuxt/CoTm7jd3.js +28 -0
  26. package/.output/public/_nuxt/{C0sNwDTK2.js → CsN8RHJ02.js} +1 -1
  27. package/.output/public/_nuxt/D-jg-SoR.js +1 -0
  28. package/.output/public/_nuxt/{CEHT9inW.js → D-z6N1Cz.js} +1 -1
  29. package/.output/public/_nuxt/D3gfSKKi2.js +1 -0
  30. package/.output/public/_nuxt/D4elH6Bo2.js +1 -0
  31. package/.output/public/_nuxt/{C5OSTzBh.js → D4tAdwYm.js} +1 -1
  32. package/.output/public/_nuxt/{C4AICl3l.js → DAfWhONg.js} +4 -4
  33. package/.output/public/_nuxt/{BlEJRYAn2.js → DC7WzYCf2.js} +1 -1
  34. package/.output/public/_nuxt/{VeOVO2sE2.js → DE-qkHRd2.js} +1 -1
  35. package/.output/public/_nuxt/DE2kUGPK.js +1 -0
  36. package/.output/public/_nuxt/DI4sdLmu2.js +1 -0
  37. package/.output/public/_nuxt/{zVupTo2z2.js → DL6fliAT.js} +2 -2
  38. package/.output/public/_nuxt/{CMDAjShv2.js → DP6tsk912.js} +1 -1
  39. package/.output/public/_nuxt/DP_e7Vwv.js +24 -0
  40. package/.output/public/_nuxt/{C8XVZGSZ.js → DR83EvmX.js} +1 -1
  41. package/.output/public/_nuxt/{BtXwFpv42.js → DSWuWYx_2.js} +1 -1
  42. package/.output/public/_nuxt/DSdxfFX_.js +1 -0
  43. package/.output/public/_nuxt/DVS06wUy2.js +13 -0
  44. package/.output/public/_nuxt/DXlAfhEi.js +3 -0
  45. package/.output/public/_nuxt/Dc5NeCDq.js +1 -0
  46. package/.output/public/_nuxt/{B_JLVF30.js → DiHL9ehB.js} +1 -1
  47. package/.output/public/_nuxt/{Bdq2LNSO.js → DjtDexGg.js} +1 -1
  48. package/.output/public/_nuxt/DnunMTRD2.js +1 -0
  49. package/.output/public/_nuxt/{KXvRkBgg.js → Dok0B4Ol.js} +2 -2
  50. package/.output/public/_nuxt/{BFBysc2M2.js → DqT2_Jtw2.js} +1 -1
  51. package/.output/public/_nuxt/{B_BYwIf22.js → DtMlAxCm2.js} +1 -1
  52. package/.output/public/_nuxt/{BplhglEM.js → DwzJpr7P.js} +1 -1
  53. package/.output/public/_nuxt/J94L7hHq2.js +1 -0
  54. package/.output/public/_nuxt/LQBLwrYS2.js +1 -0
  55. package/.output/public/_nuxt/QSY9fE482.js +1 -0
  56. package/.output/public/_nuxt/{iCvdSYYN2.js → Qa9rS9oK2.js} +2 -2
  57. package/.output/public/_nuxt/{Cyuxcv5s2.js → R3gBFghJ2.js} +1 -1
  58. package/.output/public/_nuxt/ZxBwmbs9.js +1 -0
  59. package/.output/public/_nuxt/{BGFhOMVM.js → _mD4IkJj.js} +2 -2
  60. package/.output/public/_nuxt/analysis.BwhKdel9.css +1 -0
  61. package/.output/public/_nuxt/builds/latest.json +1 -1
  62. package/.output/public/_nuxt/builds/meta/603a62a6-71d7-4d9c-bb1d-e8264a58798e.json +1 -0
  63. package/.output/public/_nuxt/{CZmMgjIK.js → c_nqArmG.js} +1 -1
  64. package/.output/public/_nuxt/h8ddxY892.js +1 -0
  65. package/.output/public/_nuxt/i3KBHle7.js +1 -0
  66. package/.output/public/_nuxt/jmKfTQMN.js +13 -0
  67. package/.output/public/_nuxt/{59a6cSgj.js → taHLOXkS.js} +1 -1
  68. package/.output/public/_nuxt/{EQijmkCh2.js → uYP6z4G72.js} +1 -1
  69. package/.output/public/_nuxt/{D0vmf1z9.js → yuIP6K9s.js} +1 -1
  70. package/.output/public/_nuxt/{Ddc_Pn7D.js → zWg-9WN6.js} +4 -4
  71. package/.output/public/_nuxt/zrgcKVTq.js +2 -0
  72. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  73. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  74. package/.output/server/chunks/_/nitro.mjs +2444 -2394
  75. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  76. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  77. package/.output/server/chunks/build/{AuthGate-CZYkvPrg.mjs → AuthGate-BK2RqkbD.mjs} +5 -5
  78. package/.output/server/chunks/build/{AuthGate-CZYkvPrg.mjs.map → AuthGate-BK2RqkbD.mjs.map} +1 -1
  79. package/.output/server/chunks/build/{FormItemContext-DcWIIAaK.mjs → FormItemContext-BqtgOBDe.mjs} +1 -1
  80. package/.output/server/chunks/build/{FormItemContext-DcWIIAaK.mjs.map → FormItemContext-BqtgOBDe.mjs.map} +1 -1
  81. package/.output/server/chunks/build/{OmpTerminalPanel-CtFJ6Kc8.mjs → OmpTerminalPanel-Bun6rpAk.mjs} +4 -4
  82. package/.output/server/chunks/build/{OmpTerminalPanel-CtFJ6Kc8.mjs.map → OmpTerminalPanel-Bun6rpAk.mjs.map} +1 -1
  83. package/.output/server/chunks/build/{PluginSlot-BT7kYQgK.mjs → PluginSlot-Do6dX0RE.mjs} +1 -1
  84. package/.output/server/chunks/build/{PluginSlot-BT7kYQgK.mjs.map → PluginSlot-Do6dX0RE.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{_wsId_-DOEw9jgZ.mjs → _wsId_-Dp3ACbQ5.mjs} +19 -19
  86. package/.output/server/chunks/build/{_wsId_-DOEw9jgZ.mjs.map → _wsId_-Dp3ACbQ5.mjs.map} +1 -1
  87. package/.output/server/chunks/build/{agents-C36wR56A.mjs → agents-BfIoGr_p.mjs} +18 -18
  88. package/.output/server/chunks/build/{agents-C36wR56A.mjs.map → agents-BfIoGr_p.mjs.map} +1 -1
  89. package/.output/server/chunks/build/{aml-CBGndvHT.mjs → aml-B5zKrvB3.mjs} +7 -7
  90. package/.output/server/chunks/build/{aml-CBGndvHT.mjs.map → aml-B5zKrvB3.mjs.map} +1 -1
  91. package/.output/server/chunks/build/analysis-CPIxT0FP.mjs +531 -0
  92. package/.output/server/chunks/build/analysis-CPIxT0FP.mjs.map +1 -0
  93. package/.output/server/chunks/build/{card-Db7OB49d.mjs → card-IyQjdGXA.mjs} +3 -3
  94. package/.output/server/chunks/build/{card-Db7OB49d.mjs.map → card-IyQjdGXA.mjs.map} +1 -1
  95. package/.output/server/chunks/build/{channel-templates-BixUrDmU.mjs → channel-templates-Bd8bgBCh.mjs} +11 -11
  96. package/.output/server/chunks/build/{channel-templates-BixUrDmU.mjs.map → channel-templates-Bd8bgBCh.mjs.map} +1 -1
  97. package/.output/server/chunks/build/{checkbox-CyF96D30.mjs → checkbox-NnjtOam0.mjs} +2 -2
  98. package/.output/server/chunks/build/{checkbox-CyF96D30.mjs.map → checkbox-NnjtOam0.mjs.map} +1 -1
  99. package/.output/server/chunks/build/{daq-DLMLufDq.mjs → daq-mC3-5A0L.mjs} +1 -1
  100. package/.output/server/chunks/build/{daq-DLMLufDq.mjs.map → daq-mC3-5A0L.mjs.map} +1 -1
  101. package/.output/server/chunks/build/{default-C7Qmdyz_.mjs → default-flcNWlNg.mjs} +12 -12
  102. package/.output/server/chunks/build/{default-C7Qmdyz_.mjs.map → default-flcNWlNg.mjs.map} +1 -1
  103. package/.output/server/chunks/build/{descriptions-1bH81YsZ.mjs → descriptions-DuAefuzp.mjs} +1 -1
  104. package/.output/server/chunks/build/{descriptions-1bH81YsZ.mjs.map → descriptions-DuAefuzp.mjs.map} +1 -1
  105. package/.output/server/chunks/build/{drawer-C7shdEHy.mjs → drawer-DEIB1_X6.mjs} +1 -1
  106. package/.output/server/chunks/build/{drawer-C7shdEHy.mjs.map → drawer-DEIB1_X6.mjs.map} +1 -1
  107. package/.output/server/chunks/build/{dropdown-BiwcuXDi.mjs → dropdown-BuD1pxH2.mjs} +5 -5
  108. package/.output/server/chunks/build/{dropdown-BiwcuXDi.mjs.map → dropdown-BuD1pxH2.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{dropdown-BhLSIp5A.mjs → dropdown-w7qhyN2D.mjs} +2 -2
  110. package/.output/server/chunks/build/{dropdown-BhLSIp5A.mjs.map → dropdown-w7qhyN2D.mjs.map} +1 -1
  111. package/.output/server/chunks/build/es-DfgEl5n-.mjs +42 -0
  112. package/.output/server/chunks/build/es-DfgEl5n-.mjs.map +1 -0
  113. package/.output/server/chunks/build/{form-nE8C0G8B.mjs → form-CMLL_-Xx.mjs} +6 -6
  114. package/.output/server/chunks/build/{form-nE8C0G8B.mjs.map → form-CMLL_-Xx.mjs.map} +1 -1
  115. package/.output/server/chunks/build/{input-DwF72eVI.mjs → input-DZcioTwL.mjs} +3 -3
  116. package/.output/server/chunks/build/{input-DwF72eVI.mjs.map → input-DZcioTwL.mjs.map} +1 -1
  117. package/.output/server/chunks/build/{input-number-TSq6ltkz.mjs → input-number-BRnbiKLd.mjs} +5 -5
  118. package/.output/server/chunks/build/{input-number-TSq6ltkz.mjs.map → input-number-BRnbiKLd.mjs.map} +1 -1
  119. package/.output/server/chunks/build/{logs-hOEVuxqm.mjs → logs-BYop3JfX.mjs} +2 -2
  120. package/.output/server/chunks/build/{logs-hOEVuxqm.mjs.map → logs-BYop3JfX.mjs.map} +1 -1
  121. package/.output/server/chunks/build/{menu-Cy5Nrecn.mjs → menu-DXfhc0qN.mjs} +3 -3
  122. package/.output/server/chunks/build/{menu-Cy5Nrecn.mjs.map → menu-DXfhc0qN.mjs.map} +1 -1
  123. package/.output/server/chunks/build/{monitor-CfVoiavp.mjs → monitor-BjBGkUm2.mjs} +19 -19
  124. package/.output/server/chunks/build/{monitor-CfVoiavp.mjs.map → monitor-BjBGkUm2.mjs.map} +1 -1
  125. package/.output/server/chunks/build/{permissions-XPtQJSaO.mjs → permissions-u5SZL8Fe.mjs} +14 -14
  126. package/.output/server/chunks/build/{permissions-XPtQJSaO.mjs.map → permissions-u5SZL8Fe.mjs.map} +1 -1
  127. package/.output/server/chunks/build/{plugins-DjBSG9pV.mjs → plugins-Cas6KOF-.mjs} +5 -5
  128. package/.output/server/chunks/build/{plugins-DjBSG9pV.mjs.map → plugins-Cas6KOF-.mjs.map} +1 -1
  129. package/.output/server/chunks/build/{popconfirm-DKeEbaGd.mjs → popconfirm-BWxt-53K.mjs} +2 -2
  130. package/.output/server/chunks/build/{popconfirm-DKeEbaGd.mjs.map → popconfirm-BWxt-53K.mjs.map} +1 -1
  131. package/.output/server/chunks/build/{schedules-PcDLCUWN.mjs → schedules-Ct68Jrvw.mjs} +19 -19
  132. package/.output/server/chunks/build/{schedules-PcDLCUWN.mjs.map → schedules-Ct68Jrvw.mjs.map} +1 -1
  133. package/.output/server/chunks/build/{segmented-BdWCdZUM.mjs → segmented-DN62bOFu.mjs} +2 -2
  134. package/.output/server/chunks/build/{segmented-BdWCdZUM.mjs.map → segmented-DN62bOFu.mjs.map} +1 -1
  135. package/.output/server/chunks/build/{select-C5yighj8.mjs → select-DQv1DXcW.mjs} +4 -4
  136. package/.output/server/chunks/build/{select-C5yighj8.mjs.map → select-DQv1DXcW.mjs.map} +1 -1
  137. package/.output/server/chunks/build/{settings-90zT_h9w.mjs → settings-CQzR1YXR.mjs} +13 -13
  138. package/.output/server/chunks/build/{settings-90zT_h9w.mjs.map → settings-CQzR1YXR.mjs.map} +1 -1
  139. package/.output/server/chunks/build/{space-BCffbXIG.mjs → space-6FfG3llN.mjs} +3 -3
  140. package/.output/server/chunks/build/{space-BCffbXIG.mjs.map → space-6FfG3llN.mjs.map} +1 -1
  141. package/.output/server/chunks/build/{switch-OG0SM_Px.mjs → switch-CfsCVFQP.mjs} +2 -2
  142. package/.output/server/chunks/build/{switch-OG0SM_Px.mjs.map → switch-CfsCVFQP.mjs.map} +1 -1
  143. package/.output/server/chunks/build/{table-UpVzu50c.mjs → table-HOjbB5YY.mjs} +9 -9
  144. package/.output/server/chunks/build/{table-UpVzu50c.mjs.map → table-HOjbB5YY.mjs.map} +1 -1
  145. package/.output/server/chunks/build/{tabs-CWwoL33v.mjs → tabs-CC26Rbcw.mjs} +4 -4
  146. package/.output/server/chunks/build/{tabs-CWwoL33v.mjs.map → tabs-CC26Rbcw.mjs.map} +1 -1
  147. package/.output/server/chunks/build/{tag-CS7mwrfG.mjs → tag-BtOMjpDx.mjs} +4 -4
  148. package/.output/server/chunks/build/{tag-CS7mwrfG.mjs.map → tag-BtOMjpDx.mjs.map} +1 -1
  149. package/.output/server/chunks/build/{teams-BIAFvRw1.mjs → teams-Re0wY2SQ.mjs} +19 -19
  150. package/.output/server/chunks/build/{teams-BIAFvRw1.mjs.map → teams-Re0wY2SQ.mjs.map} +1 -1
  151. package/.output/server/chunks/build/{tokens-CLpdrzQ7.mjs → tokens-DLFIUvXE.mjs} +19 -19
  152. package/.output/server/chunks/build/{tokens-CLpdrzQ7.mjs.map → tokens-DLFIUvXE.mjs.map} +1 -1
  153. package/.output/server/chunks/build/{tooltip-CJlH_8ZK.mjs → tooltip-BSDwL_LM.mjs} +4 -4
  154. package/.output/server/chunks/build/{tooltip-CJlH_8ZK.mjs.map → tooltip-BSDwL_LM.mjs.map} +1 -1
  155. package/.output/server/chunks/build/{useAgentTemplateActions-6VyAHgu5.mjs → useAgentTemplateActions-CjBwCb3u.mjs} +1 -1
  156. package/.output/server/chunks/build/{useAgentTemplateActions-6VyAHgu5.mjs.map → useAgentTemplateActions-CjBwCb3u.mjs.map} +1 -1
  157. package/.output/server/chunks/build/{useAgentTemplateForm-DWa-ezNq.mjs → useAgentTemplateForm-BX9_xqj8.mjs} +1 -1
  158. package/.output/server/chunks/build/{useAgentTemplateForm-DWa-ezNq.mjs.map → useAgentTemplateForm-BX9_xqj8.mjs.map} +1 -1
  159. package/.output/server/chunks/build/{useAmlEntities-Co2fgjzh.mjs → useAmlEntities-BrcTqHwa.mjs} +2 -2
  160. package/.output/server/chunks/build/{useAmlEntities-Co2fgjzh.mjs.map → useAmlEntities-BrcTqHwa.mjs.map} +1 -1
  161. package/.output/server/chunks/build/{useAmlEnv-JTiWPrzH.mjs → useAmlEnv-jiGYK790.mjs} +1 -1
  162. package/.output/server/chunks/build/{useAmlEnv-JTiWPrzH.mjs.map → useAmlEnv-jiGYK790.mjs.map} +1 -1
  163. package/.output/server/chunks/build/{useAmlJobs-By4pjOzc.mjs → useAmlJobs-CVZ1btzg.mjs} +1 -1
  164. package/.output/server/chunks/build/{useAmlJobs-By4pjOzc.mjs.map → useAmlJobs-CVZ1btzg.mjs.map} +1 -1
  165. package/.output/server/chunks/build/{useAmlModels-B1_5vjMA.mjs → useAmlModels-DJkQzcCU.mjs} +1 -1
  166. package/.output/server/chunks/build/{useAmlModels-B1_5vjMA.mjs.map → useAmlModels-DJkQzcCU.mjs.map} +1 -1
  167. package/.output/server/chunks/build/{useAmlNotes-5uwvCb3h.mjs → useAmlNotes-DKnx9a8x.mjs} +1 -1
  168. package/.output/server/chunks/build/{useAmlNotes-5uwvCb3h.mjs.map → useAmlNotes-DKnx9a8x.mjs.map} +1 -1
  169. package/.output/server/chunks/build/{useAmlPredict-lxUv7lAO.mjs → useAmlPredict-Bp4ehwKw.mjs} +1 -1
  170. package/.output/server/chunks/build/{useAmlPredict-lxUv7lAO.mjs.map → useAmlPredict-Bp4ehwKw.mjs.map} +1 -1
  171. package/.output/server/chunks/build/{useLogsManual-BLfiSU3u.mjs → useLogsManual-CElmZuJh.mjs} +1 -1
  172. package/.output/server/chunks/build/{useLogsManual-BLfiSU3u.mjs.map → useLogsManual-CElmZuJh.mjs.map} +1 -1
  173. package/.output/server/chunks/build/{useMonitorData-BZ6Z-Sy8.mjs → useMonitorData-DcIfMEiz.mjs} +1 -1
  174. package/.output/server/chunks/build/{useMonitorData-BZ6Z-Sy8.mjs.map → useMonitorData-DcIfMEiz.mjs.map} +1 -1
  175. package/.output/server/chunks/build/{useTeamActions-ahht5J8Y.mjs → useTeamActions-C3_O_AIU.mjs} +1 -1
  176. package/.output/server/chunks/build/{useTeamActions-ahht5J8Y.mjs.map → useTeamActions-C3_O_AIU.mjs.map} +1 -1
  177. package/.output/server/chunks/build/{useTeamAddMemberDialog-DvXxsVy0.mjs → useTeamAddMemberDialog-DWAoZCKd.mjs} +1 -1
  178. package/.output/server/chunks/build/{useTeamAddMemberDialog-DvXxsVy0.mjs.map → useTeamAddMemberDialog-DWAoZCKd.mjs.map} +1 -1
  179. package/.output/server/chunks/build/{useTeamCreateDialog-A_k-XX5B.mjs → useTeamCreateDialog-911mIPWd.mjs} +1 -1
  180. package/.output/server/chunks/build/{useTeamCreateDialog-A_k-XX5B.mjs.map → useTeamCreateDialog-911mIPWd.mjs.map} +1 -1
  181. package/.output/server/chunks/build/{useTeamDeployDialog-CfAFjIr_.mjs → useTeamDeployDialog-D0STROoQ.mjs} +1 -1
  182. package/.output/server/chunks/build/{useTeamDeployDialog-CfAFjIr_.mjs.map → useTeamDeployDialog-D0STROoQ.mjs.map} +1 -1
  183. package/.output/server/chunks/build/{useTeamPluginDialog-Djmkk1Nl.mjs → useTeamPluginDialog-Df6-e2OW.mjs} +1 -1
  184. package/.output/server/chunks/build/{useTeamPluginDialog-Djmkk1Nl.mjs.map → useTeamPluginDialog-Df6-e2OW.mjs.map} +1 -1
  185. package/.output/server/chunks/build/{useTokenCreate-CkWoxSI-.mjs → useTokenCreate-DOojAhM5.mjs} +1 -1
  186. package/.output/server/chunks/build/{useTokenCreate-CkWoxSI-.mjs.map → useTokenCreate-DOojAhM5.mjs.map} +1 -1
  187. package/.output/server/chunks/build/{useTokenRename-BohjnGT0.mjs → useTokenRename-CMA5dLHx.mjs} +1 -1
  188. package/.output/server/chunks/build/{useTokenRename-BohjnGT0.mjs.map → useTokenRename-CMA5dLHx.mjs.map} +1 -1
  189. package/.output/server/chunks/build/{useTokenReveal-BBN5iGz7.mjs → useTokenReveal-C19aCKzt.mjs} +1 -1
  190. package/.output/server/chunks/build/{useTokenReveal-BBN5iGz7.mjs.map → useTokenReveal-C19aCKzt.mjs.map} +1 -1
  191. package/.output/server/chunks/build/{useTokensList-BQX9WqfT.mjs → useTokensList-D0ZpLOhR.mjs} +1 -1
  192. package/.output/server/chunks/build/{useTokensList-BQX9WqfT.mjs.map → useTokensList-D0ZpLOhR.mjs.map} +1 -1
  193. package/.output/server/chunks/build/{useWorkbenchAuth-BTRlS2wZ.mjs → useWorkbenchAuth-CN5E3J5L.mjs} +1 -1
  194. package/.output/server/chunks/build/{useWorkbenchAuth-BTRlS2wZ.mjs.map → useWorkbenchAuth-CN5E3J5L.mjs.map} +1 -1
  195. package/.output/server/chunks/build/{useWorkbenchWorkspaces-C6ky7OJH.mjs → useWorkbenchWorkspaces-ChKByQSD.mjs} +1 -1
  196. package/.output/server/chunks/build/{useWorkbenchWorkspaces-C6ky7OJH.mjs.map → useWorkbenchWorkspaces-ChKByQSD.mjs.map} +1 -1
  197. package/.output/server/chunks/build/{users-BHOEW3Az.mjs → users-BW4jowK4.mjs} +15 -15
  198. package/.output/server/chunks/build/{users-BHOEW3Az.mjs.map → users-BW4jowK4.mjs.map} +1 -1
  199. package/.output/server/chunks/build/{workshop-DyJ1LXwu.mjs → workshop-Bx55czXL.mjs} +11 -11
  200. package/.output/server/chunks/build/{workshop-DyJ1LXwu.mjs.map → workshop-Bx55czXL.mjs.map} +1 -1
  201. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs +3 -2
  202. package/.output/server/chunks/routes/api/workshop/analysis/_id_.get.mjs.map +1 -1
  203. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs +103 -0
  204. package/.output/server/chunks/routes/api/workshop/analysis/_id_.patch.mjs.map +1 -0
  205. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -1
  206. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  208. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channels/_id/chat/index.post.mjs +1 -1
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +1 -1
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/line.put.mjs +1 -1
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.get.mjs +1 -1
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/twin-profile.patch.mjs +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/dcw/index6.get.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/dcw/index7.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  226. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +6 -2
  229. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  230. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  232. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -1
  233. package/.output/server/chunks/routes/api/workshop/teams/_id/index.put.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/teams/_id/index2.get.mjs +1 -1
  235. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  236. package/.output/server/chunks/routes/renderer.mjs +2 -2
  237. package/.output/server/chunks/virtual/entry.mjs +533 -529
  238. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  239. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  240. package/.output/server/package.json +1 -1
  241. package/app/components/analysis/AnalysisEditModal.vue +192 -0
  242. package/app/components/analysis/AnalysisFilterCard.vue +159 -160
  243. package/app/components/analysis/AnalysisPageHead.vue +47 -47
  244. package/app/components/analysis/AnalysisTable.vue +322 -306
  245. package/app/pages/analysis/composables/useAnalysisFeed.ts +85 -85
  246. package/app/pages/analysis/index.vue +128 -92
  247. package/app/pages/analysis/types.ts +50 -44
  248. package/i18n/locales/en.ts +8 -0
  249. package/i18n/locales/zh-CN.ts +8 -0
  250. package/package.json +1 -1
  251. package/server/api/workshop/analysis/[id].delete.ts +30 -30
  252. package/server/api/workshop/analysis/[id].get.ts +25 -23
  253. package/server/api/workshop/analysis/[id].patch.ts +100 -0
  254. package/server/api/workshop/analysis/index.get.ts +39 -33
  255. package/server/services/workshop/agents/industrial/analysis-tools.ts +242 -242
  256. package/server/services/workshop/agents/industrial/daq-tools.ts +16 -7
  257. package/server/services/workshop/analysis/analysis.repo.ts +241 -189
  258. package/server/services/workshop/db/database/migrations.ts +10 -0
  259. package/server/services/workshop/db/database/open.ts +3 -1
  260. package/server/services/workshop/db/database/schema.ts +6 -2
  261. package/server/services/workshop/db/schema.sql +6 -2
  262. package/.output/public/_nuxt/5juo_WO2.js +0 -13
  263. package/.output/public/_nuxt/B-WTxXEK2.js +0 -1
  264. package/.output/public/_nuxt/B1BCga5h2.js +0 -13
  265. package/.output/public/_nuxt/B5lMtA7I2.js +0 -1
  266. package/.output/public/_nuxt/B6_fJd2X.js +0 -1
  267. package/.output/public/_nuxt/B7K5B04W2.js +0 -1
  268. package/.output/public/_nuxt/B7KyS_q2.js +0 -1
  269. package/.output/public/_nuxt/B8q3BGY5.js +0 -37
  270. package/.output/public/_nuxt/B9IK8kDl2.js +0 -1
  271. package/.output/public/_nuxt/BNd2NDxg2.js +0 -1
  272. package/.output/public/_nuxt/BP629NAi.js +0 -1
  273. package/.output/public/_nuxt/BVinTfuN.js +0 -1
  274. package/.output/public/_nuxt/BdE41Y_c.js +0 -28
  275. package/.output/public/_nuxt/Be_StT8b2.js +0 -1
  276. package/.output/public/_nuxt/BsYEYxWv.js +0 -24
  277. package/.output/public/_nuxt/BuNXYpib2.js +0 -1
  278. package/.output/public/_nuxt/CDaZC0_6.js +0 -3
  279. package/.output/public/_nuxt/CE43-V_L.js +0 -2
  280. package/.output/public/_nuxt/CWfBtswB.js +0 -70
  281. package/.output/public/_nuxt/CYtH1bv2.js +0 -1
  282. package/.output/public/_nuxt/ChPNKPw_.js +0 -1
  283. package/.output/public/_nuxt/CktUrk8z.js +0 -1
  284. package/.output/public/_nuxt/DMCoWgSb2.js +0 -1
  285. package/.output/public/_nuxt/Dg1iMuZ-.js +0 -1
  286. package/.output/public/_nuxt/DmwMkvoQ2.js +0 -1
  287. package/.output/public/_nuxt/LwITbamf2.js +0 -47
  288. package/.output/public/_nuxt/_jfzcYrl.js +0 -1
  289. package/.output/public/_nuxt/analysis.D2Pao1rm.css +0 -1
  290. package/.output/public/_nuxt/builds/meta/f78a1992-e424-494d-ac4b-aa18971ffc10.json +0 -1
  291. package/.output/server/chunks/build/analysis-tgzvOWmD.mjs +0 -332
  292. package/.output/server/chunks/build/analysis-tgzvOWmD.mjs.map +0 -1
@@ -1,306 +1,322 @@
1
- <script setup lang="ts">
2
- /**
3
- * 分析报告台账表:时间 / 产线 / 标题(类别) / 配方 / 关键结论 / 来源 / 详情。
4
- * 行内展开详情(结论明细 + 完整正文 + 支撑指标 + 证据窗),照 LogsEventTable 的
5
- * 原生 table + 展开行模式(全站惯例:原生表格,antd a-table 才需要显式 columns)。
6
- */
7
- import { formatLocalClock } from '@/app/composables/workshop/useLocalTime'
8
- import { useLogsScope } from '@/app/pages/logs/composables/useLogsScope'
9
- import type { AnalysisReportView } from '@/app/pages/analysis/types'
10
-
11
- defineProps<{
12
- rows: AnalysisReportView[]
13
- loading: boolean
14
- error: string
15
- /** 管理面:admin 可见删除(清污数据;台账 Agent 面无删) */
16
- admin: boolean
17
- }>()
18
-
19
- const emit = defineEmits<{
20
- toggle: [row: AnalysisReportView]
21
- remove: [row: AnalysisReportView]
22
- }>()
23
-
24
- const expandedId = defineModel<string>('expandedId', { default: '' })
25
-
26
- const { lineName } = useLogsScope()
27
- const { t } = useI18n()
28
-
29
- const fmtTime = (iso: string): string => formatLocalClock(iso)
30
- const catLabel = (c: string): string => {
31
- const known = ['quality', 'oee', 'alarm', 'trend', 'optimization', 'general']
32
- return known.includes(c) ? t(`analysis.cat.${c}`) : c
33
- }
34
-
35
- const recipeLabel = (r: AnalysisReportView): string =>
36
- r.recipeId ? `${r.recipeId}${r.recipeVersion ? ` v${r.recipeVersion}` : ''}` : '—'
37
-
38
- const hasDetail = (r: AnalysisReportView): boolean =>
39
- Boolean(r.conclusions.length || r.report || Object.keys(r.metrics ?? {}).length || r.dataSources)
40
-
41
- const metricsText = (r: AnalysisReportView): string => {
42
- try {
43
- return JSON.stringify(r.metrics ?? {}, null, 1)
44
- }
45
- catch {
46
- return ''
47
- }
48
- }
49
-
50
- const contextText = (r: AnalysisReportView): string => {
51
- try {
52
- return JSON.stringify(r.context ?? {}, null, 1)
53
- }
54
- catch {
55
- return ''
56
- }
57
- }
58
- </script>
59
-
60
- <template>
61
- <section class="table-card">
62
- <div class="card-meta">
63
- <span class="count">{{ $t('analysis.count', { p0: rows.length }) }}</span>
64
- <span class="hint">{{ $t('analysis.ledgerHint') }}</span>
65
- </div>
66
- <p
67
- v-if="error"
68
- class="err"
69
- >
70
- {{ error }}
71
- </p>
72
- <table class="ar-table">
73
- <thead>
74
- <tr>
75
- <th class="th-time">
76
- {{ $t('analysis.thTime') }}
77
- </th>
78
- <th class="th-line">
79
- {{ $t('analysis.thLine') }}
80
- </th>
81
- <th>{{ $t('analysis.thTitle') }}</th>
82
- <th class="th-recipe">
83
- {{ $t('analysis.thRecipe') }}
84
- </th>
85
- <th>{{ $t('analysis.thSummary') }}</th>
86
- <th class="th-src">
87
- {{ $t('analysis.thSource') }}
88
- </th>
89
- <th class="th-detail">
90
- {{ $t('analysis.thDetail') }}
91
- </th>
92
- </tr>
93
- </thead>
94
- <tbody>
95
- <tr v-if="loading && rows.length === 0">
96
- <td
97
- colspan="7"
98
- class="empty"
99
- >
100
- {{ $t('analysis.loading') }}
101
- </td>
102
- </tr>
103
- <tr v-else-if="rows.length === 0">
104
- <td
105
- colspan="7"
106
- class="empty"
107
- >
108
- {{ $t('analysis.empty') }}
109
- </td>
110
- </tr>
111
- <template
112
- v-for="row in rows"
113
- :key="row.id"
114
- >
115
- <tr>
116
- <td class="mono dim">
117
- {{ fmtTime(row.createdAt) }}
118
- </td>
119
- <td>
120
- <span class="scope-chip">{{ row.lineName || lineName(row.lineId) || row.lineId || '—' }}</span>
121
- </td>
122
- <td class="title-cell">
123
- {{ row.title }}
124
- <small
125
- class="cat-chip"
126
- :class="row.category"
127
- >{{ catLabel(row.category) }}</small>
128
- </td>
129
- <td class="mono dim">
130
- {{ recipeLabel(row) }}
131
- </td>
132
- <td class="summary">
133
- {{ row.summary || '—' }}
134
- </td>
135
- <td class="src">
136
- {{ row.actorName || row.actor || '—' }}
137
- <small
138
- v-if="row.channelName"
139
- class="dim"
140
- >@{{ row.channelName }}</small>
141
- </td>
142
- <td class="detail-cell">
143
- <button
144
- v-if="hasDetail(row)"
145
- class="mini-btn"
146
- @click="emit('toggle', row)"
147
- >
148
- {{ expandedId === row.id ? $t('analysis.fold') : $t('analysis.expand') }}
149
- </button>
150
- <span
151
- v-else
152
- class="dim"
153
- >{{ $t('analysis.noDetail') }}</span>
154
- <a-popconfirm
155
- v-if="admin"
156
- :title="$t('analysis.removeConfirm', { p0: row.title })"
157
- :ok-text="$t('analysis.remove')"
158
- :cancel-text="$t('analysis.cancel')"
159
- placement="left"
160
- @confirm="emit('remove', row)"
161
- >
162
- <button
163
- class="mini-btn danger"
164
- :title="$t('analysis.remove')"
165
- >
166
- <span class="i-tabler-trash" />
167
- </button>
168
- </a-popconfirm>
169
- </td>
170
- </tr>
171
- <tr
172
- v-if="expandedId === row.id"
173
- class="ar-detail-row"
174
- >
175
- <td colspan="7">
176
- <div class="detail-grid">
177
- <div class="kv">
178
- <span class="k">{{ $t('analysis.kId') }}</span>
179
- <span class="mono">{{ row.id }}</span>
180
- </div>
181
- <div class="kv">
182
- <span class="k">{{ $t('analysis.kWindow') }}</span>
183
- <span class="mono">
184
- {{ row.windowFrom ? fmtTime(row.windowFrom) : '—' }} ~ {{ row.windowTo ? fmtTime(row.windowTo) : '—' }}
185
- </span>
186
- </div>
187
- <div
188
- v-if="row.dataSources"
189
- class="kv kv-full"
190
- >
191
- <span class="k">{{ $t('analysis.kSources') }}</span>
192
- <span>{{ row.dataSources }}</span>
193
- </div>
194
- <template v-if="row.conclusions.length">
195
- <div class="sec-title">
196
- {{ $t('analysis.kConclusions') }}
197
- </div>
198
- <ol class="conclusions">
199
- <li
200
- v-for="(c, i) in row.conclusions"
201
- :key="i"
202
- >
203
- {{ c }}
204
- </li>
205
- </ol>
206
- </template>
207
- <template v-if="row.report">
208
- <div class="sec-title">
209
- {{ $t('analysis.kReport') }}
210
- </div>
211
- <pre class="report-body">{{ row.report }}</pre>
212
- </template>
213
- <template v-if="Object.keys(row.metrics ?? {}).length">
214
- <div class="sec-title">
215
- {{ $t('analysis.kMetrics') }}
216
- </div>
217
- <pre class="json-body">{{ metricsText(row) }}</pre>
218
- </template>
219
- <template v-if="Object.keys(row.context ?? {}).length">
220
- <div class="sec-title">
221
- {{ $t('analysis.kContext') }}
222
- </div>
223
- <pre class="json-body">{{ contextText(row) }}</pre>
224
- </template>
225
- </div>
226
- </td>
227
- </tr>
228
- </template>
229
- </tbody>
230
- </table>
231
- </section>
232
- </template>
233
-
234
- <style scoped>
235
- .table-card {
236
- background: var(--surface-glass);
237
- border: 1px solid var(--glass-line);
238
- border-radius: 10px;
239
- backdrop-filter: var(--aurora-blur) saturate(1.15);
240
- overflow: hidden;
241
- }
242
- .card-meta {
243
- display: flex; gap: 12px; align-items: center;
244
- padding: 8px 14px;
245
- border-bottom: 1px solid color-mix(in srgb, var(--glass-line) 55%, transparent);
246
- font-size: 11.5px; color: var(--ink-faint);
247
- }
248
- .card-meta .count { font-weight: 600; color: var(--ink); }
249
- .card-meta .hint { margin-left: auto; }
250
- .mini-btn.danger { color: var(--tone-danger-dot, #ff6b6b); margin-left: 4px; }
251
- .err { margin: 0; padding: 10px 14px; font-size: 12.5px; color: var(--tone-danger-dot, #ff6b6b); }
252
- .ar-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
253
- .ar-table thead th {
254
- position: sticky; top: 0; z-index: 1;
255
- padding: 9px 12px; text-align: left; font-weight: 600; font-size: 11.5px; color: var(--ink-faint);
256
- background: color-mix(in srgb, var(--frost-bg) 92%, transparent);
257
- border-bottom: 1px solid var(--glass-line);
258
- white-space: nowrap;
259
- }
260
- .ar-table tbody td { padding: 9px 12px; border-bottom: 1px solid color-mix(in srgb, var(--glass-line) 55%, transparent); vertical-align: top; }
261
- .th-time { width: 128px; }
262
- .th-line { width: 130px; }
263
- .th-recipe { width: 170px; }
264
- .th-src { width: 150px; }
265
- .th-detail { width: 92px; }
266
- .title-cell { max-width: 320px; font-weight: 600; }
267
- .cat-chip {
268
- display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
269
- font-size: 10.5px; font-weight: 500; color: var(--ink-faint);
270
- background: color-mix(in srgb, var(--glass-line) 40%, transparent);
271
- vertical-align: 1px;
272
- }
273
- .summary { max-width: 380px; }
274
- .src small { display: block; }
275
- .mono { font-family: var(--font-mono, monospace); font-size: 11.5px; }
276
- .dim { color: var(--ink-faint); }
277
- .empty { padding: 28px 12px !important; text-align: center; color: var(--ink-faint); }
278
- .scope-chip {
279
- display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11px;
280
- background: color-mix(in srgb, var(--tone-info-dot) 14%, transparent);
281
- border: 1px solid color-mix(in srgb, var(--tone-info-dot) 25%, transparent);
282
- }
283
- .detail-cell { white-space: nowrap; }
284
- .ar-detail-row td {
285
- background: color-mix(in srgb, var(--frost-bg) 55%, transparent);
286
- }
287
- .detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 8px 18px; padding: 4px 2px; }
288
- .kv { display: flex; gap: 10px; font-size: 12px; align-items: baseline; }
289
- .kv-full { grid-column: 1 / -1; }
290
- .kv .k { flex: none; min-width: 64px; color: var(--ink-faint); font-size: 11.5px; }
291
- .sec-title { grid-column: 1 / -1; margin-top: 6px; font-size: 11.5px; font-weight: 600; color: var(--ink-faint); }
292
- .conclusions { grid-column: 1 / -1; margin: 0; padding-left: 22px; font-size: 12.5px; line-height: 1.7; }
293
- .report-body, .json-body {
294
- grid-column: 1 / -1; margin: 0; padding: 10px 12px;
295
- font-family: var(--font-mono, monospace); font-size: 11.5px; line-height: 1.6;
296
- white-space: pre-wrap; word-break: break-word;
297
- background: color-mix(in srgb, var(--glass-line) 22%, transparent);
298
- border: 1px solid color-mix(in srgb, var(--glass-line) 45%, transparent);
299
- border-radius: 8px;
300
- max-height: 340px; overflow: auto;
301
- }
302
- @media (max-width: 899px) {
303
- .th-recipe, .th-src { display: none; }
304
- .ar-table tbody td:nth-child(4), .ar-table tbody td:nth-child(6) { display: none; }
305
- }
306
- </style>
1
+ <script setup lang="ts">
2
+ /**
3
+ * 分析报告台账表:时间 / 产线 / 标题(类别) / 配方 / 关键结论 / 来源 / 详情。
4
+ * 行内展开详情(结论明细 + 完整正文 + 支撑指标 + 证据窗),照 LogsEventTable 的
5
+ * 原生 table + 展开行模式(全站惯例:原生表格,antd a-table 才需要显式 columns)。
6
+ */
7
+ import { formatLocalClock } from '@/app/composables/workshop/useLocalTime'
8
+ import { useLogsScope } from '@/app/pages/logs/composables/useLogsScope'
9
+ import type { AnalysisReportView } from '@/app/pages/analysis/types'
10
+
11
+ defineProps<{
12
+ rows: AnalysisReportView[]
13
+ loading: boolean
14
+ error: string
15
+ /** 管理面:admin 可见删除(清污数据;台账 Agent 面无删) */
16
+ admin: boolean
17
+ }>()
18
+
19
+ const emit = defineEmits<{
20
+ toggle: [row: AnalysisReportView]
21
+ remove: [row: AnalysisReportView]
22
+ edit: [row: AnalysisReportView]
23
+ }>()
24
+
25
+ const expandedId = defineModel<string>('expandedId', { default: '' })
26
+
27
+ const { lineName } = useLogsScope()
28
+ const { t } = useI18n()
29
+
30
+ const fmtTime = (iso: string): string => formatLocalClock(iso)
31
+ const catLabel = (c: string): string => {
32
+ const known = ['quality', 'oee', 'alarm', 'trend', 'optimization', 'general']
33
+ return known.includes(c) ? t(`analysis.cat.${c}`) : c
34
+ }
35
+
36
+ const recipeLabel = (r: AnalysisReportView): string =>
37
+ r.recipeId ? `${r.recipeId}${r.recipeVersion ? ` v${r.recipeVersion}` : ''}` : '—'
38
+
39
+ const hasDetail = (r: AnalysisReportView): boolean =>
40
+ Boolean(r.conclusions.length || r.report || Object.keys(r.metrics ?? {}).length || r.dataSources)
41
+
42
+ const metricsText = (r: AnalysisReportView): string => {
43
+ try {
44
+ return JSON.stringify(r.metrics ?? {}, null, 1)
45
+ }
46
+ catch {
47
+ return ''
48
+ }
49
+ }
50
+
51
+ const contextText = (r: AnalysisReportView): string => {
52
+ try {
53
+ return JSON.stringify(r.context ?? {}, null, 1)
54
+ }
55
+ catch {
56
+ return ''
57
+ }
58
+ }
59
+ </script>
60
+
61
+ <template>
62
+ <section class="table-card">
63
+ <div class="card-meta">
64
+ <span class="count">{{ $t('analysis.count', { p0: rows.length }) }}</span>
65
+ <span class="hint">{{ $t('analysis.ledgerHint') }}</span>
66
+ </div>
67
+ <p
68
+ v-if="error"
69
+ class="err"
70
+ >
71
+ {{ error }}
72
+ </p>
73
+ <table class="ar-table">
74
+ <thead>
75
+ <tr>
76
+ <th class="th-time">
77
+ {{ $t('analysis.thTime') }}
78
+ </th>
79
+ <th class="th-line">
80
+ {{ $t('analysis.thLine') }}
81
+ </th>
82
+ <th>{{ $t('analysis.thTitle') }}</th>
83
+ <th class="th-recipe">
84
+ {{ $t('analysis.thRecipe') }}
85
+ </th>
86
+ <th>{{ $t('analysis.thSummary') }}</th>
87
+ <th class="th-src">
88
+ {{ $t('analysis.thSource') }}
89
+ </th>
90
+ <th class="th-detail">
91
+ {{ $t('analysis.thDetail') }}
92
+ </th>
93
+ </tr>
94
+ </thead>
95
+ <tbody>
96
+ <tr v-if="loading && rows.length === 0">
97
+ <td
98
+ colspan="7"
99
+ class="empty"
100
+ >
101
+ {{ $t('analysis.loading') }}
102
+ </td>
103
+ </tr>
104
+ <tr v-else-if="rows.length === 0">
105
+ <td
106
+ colspan="7"
107
+ class="empty"
108
+ >
109
+ {{ $t('analysis.empty') }}
110
+ </td>
111
+ </tr>
112
+ <template
113
+ v-for="row in rows"
114
+ :key="row.id"
115
+ >
116
+ <tr>
117
+ <td class="mono dim">
118
+ {{ fmtTime(row.createdAt) }}
119
+ </td>
120
+ <td>
121
+ <span class="scope-chip">{{ row.lineName || lineName(row.lineId) || row.lineId || '—' }}</span>
122
+ </td>
123
+ <td class="title-cell">
124
+ {{ row.title }}
125
+ <small
126
+ class="cat-chip"
127
+ :class="row.category"
128
+ >{{ catLabel(row.category) }}</small>
129
+ </td>
130
+ <td class="mono dim">
131
+ {{ recipeLabel(row) }}
132
+ </td>
133
+ <td class="summary">
134
+ {{ row.summary || '—' }}
135
+ </td>
136
+ <td class="src">
137
+ {{ row.actorName || row.actor || '—' }}
138
+ <small
139
+ v-if="row.channelName"
140
+ class="dim"
141
+ >@{{ row.channelName }}</small>
142
+ </td>
143
+ <td class="detail-cell">
144
+ <button
145
+ v-if="hasDetail(row)"
146
+ class="mini-btn"
147
+ @click="emit('toggle', row)"
148
+ >
149
+ {{ expandedId === row.id ? $t('analysis.fold') : $t('analysis.expand') }}
150
+ </button>
151
+ <span
152
+ v-else
153
+ class="dim"
154
+ >{{ $t('analysis.noDetail') }}</span>
155
+ <button
156
+ v-if="row.canEdit"
157
+ class="mini-btn"
158
+ :title="$t('analysis.editTitle')"
159
+ @click="emit('edit', row)"
160
+ >
161
+ <span class="i-tabler-pencil" />
162
+ </button>
163
+ <a-popconfirm
164
+ v-if="admin"
165
+ :title="$t('analysis.removeConfirm', { p0: row.title })"
166
+ :ok-text="$t('analysis.remove')"
167
+ :cancel-text="$t('analysis.cancel')"
168
+ placement="left"
169
+ @confirm="emit('remove', row)"
170
+ >
171
+ <button
172
+ class="mini-btn danger"
173
+ :title="$t('analysis.remove')"
174
+ >
175
+ <span class="i-tabler-trash" />
176
+ </button>
177
+ </a-popconfirm>
178
+ </td>
179
+ </tr>
180
+ <tr
181
+ v-if="expandedId === row.id"
182
+ class="ar-detail-row"
183
+ >
184
+ <td colspan="7">
185
+ <div class="detail-grid">
186
+ <div
187
+ v-if="row.updatedAt"
188
+ class="kv kv-full revised"
189
+ >
190
+ <span class="k">{{ $t('analysis.kRevised') }}</span>
191
+ <span>{{ fmtTime(row.updatedAt) }} · {{ row.updatedByName || row.updatedBy }}</span>
192
+ </div>
193
+ <div class="kv">
194
+ <span class="k">{{ $t('analysis.kId') }}</span>
195
+ <span class="mono">{{ row.id }}</span>
196
+ </div>
197
+ <div class="kv">
198
+ <span class="k">{{ $t('analysis.kWindow') }}</span>
199
+ <span class="mono">
200
+ {{ row.windowFrom ? fmtTime(row.windowFrom) : '—' }} ~ {{ row.windowTo ? fmtTime(row.windowTo) : '—' }}
201
+ </span>
202
+ </div>
203
+ <div
204
+ v-if="row.dataSources"
205
+ class="kv kv-full"
206
+ >
207
+ <span class="k">{{ $t('analysis.kSources') }}</span>
208
+ <span>{{ row.dataSources }}</span>
209
+ </div>
210
+ <template v-if="row.conclusions.length">
211
+ <div class="sec-title">
212
+ {{ $t('analysis.kConclusions') }}
213
+ </div>
214
+ <ol class="conclusions">
215
+ <li
216
+ v-for="(c, i) in row.conclusions"
217
+ :key="i"
218
+ >
219
+ {{ c }}
220
+ </li>
221
+ </ol>
222
+ </template>
223
+ <template v-if="row.report">
224
+ <div class="sec-title">
225
+ {{ $t('analysis.kReport') }}
226
+ </div>
227
+ <pre class="report-body">{{ row.report }}</pre>
228
+ </template>
229
+ <template v-if="Object.keys(row.metrics ?? {}).length">
230
+ <div class="sec-title">
231
+ {{ $t('analysis.kMetrics') }}
232
+ </div>
233
+ <pre class="json-body">{{ metricsText(row) }}</pre>
234
+ </template>
235
+ <template v-if="Object.keys(row.context ?? {}).length">
236
+ <div class="sec-title">
237
+ {{ $t('analysis.kContext') }}
238
+ </div>
239
+ <pre class="json-body">{{ contextText(row) }}</pre>
240
+ </template>
241
+ </div>
242
+ </td>
243
+ </tr>
244
+ </template>
245
+ </tbody>
246
+ </table>
247
+ </section>
248
+ </template>
249
+
250
+ <style scoped>
251
+ .table-card {
252
+ background: var(--surface-glass);
253
+ border: 1px solid var(--glass-line);
254
+ border-radius: 10px;
255
+ backdrop-filter: var(--aurora-blur) saturate(1.15);
256
+ overflow: hidden;
257
+ }
258
+ .card-meta {
259
+ display: flex; gap: 12px; align-items: center;
260
+ padding: 8px 14px;
261
+ border-bottom: 1px solid color-mix(in srgb, var(--glass-line) 55%, transparent);
262
+ font-size: 11.5px; color: var(--ink-faint);
263
+ }
264
+ .card-meta .count { font-weight: 600; color: var(--ink); }
265
+ .card-meta .hint { margin-left: auto; }
266
+ .mini-btn.danger { color: var(--tone-danger-dot, #ff6b6b); margin-left: 4px; }
267
+ .err { margin: 0; padding: 10px 14px; font-size: 12.5px; color: var(--tone-danger-dot, #ff6b6b); }
268
+ .ar-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
269
+ .ar-table thead th {
270
+ position: sticky; top: 0; z-index: 1;
271
+ padding: 9px 12px; text-align: left; font-weight: 600; font-size: 11.5px; color: var(--ink-faint);
272
+ background: color-mix(in srgb, var(--frost-bg) 92%, transparent);
273
+ border-bottom: 1px solid var(--glass-line);
274
+ white-space: nowrap;
275
+ }
276
+ .ar-table tbody td { padding: 9px 12px; border-bottom: 1px solid color-mix(in srgb, var(--glass-line) 55%, transparent); vertical-align: top; }
277
+ .th-time { width: 128px; }
278
+ .th-line { width: 130px; }
279
+ .th-recipe { width: 170px; }
280
+ .th-src { width: 150px; }
281
+ .th-detail { width: 92px; }
282
+ .title-cell { max-width: 320px; font-weight: 600; }
283
+ .cat-chip {
284
+ display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
285
+ font-size: 10.5px; font-weight: 500; color: var(--ink-faint);
286
+ background: color-mix(in srgb, var(--glass-line) 40%, transparent);
287
+ vertical-align: 1px;
288
+ }
289
+ .summary { max-width: 380px; }
290
+ .src small { display: block; }
291
+ .mono { font-family: var(--font-mono, monospace); font-size: 11.5px; }
292
+ .dim { color: var(--ink-faint); }
293
+ .empty { padding: 28px 12px !important; text-align: center; color: var(--ink-faint); }
294
+ .scope-chip {
295
+ display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 11px;
296
+ background: color-mix(in srgb, var(--tone-info-dot) 14%, transparent);
297
+ border: 1px solid color-mix(in srgb, var(--tone-info-dot) 25%, transparent);
298
+ }
299
+ .detail-cell { white-space: nowrap; }
300
+ .ar-detail-row td {
301
+ background: color-mix(in srgb, var(--frost-bg) 55%, transparent);
302
+ }
303
+ .detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 8px 18px; padding: 4px 2px; }
304
+ .kv { display: flex; gap: 10px; font-size: 12px; align-items: baseline; }
305
+ .kv-full { grid-column: 1 / -1; }
306
+ .kv .k { flex: none; min-width: 64px; color: var(--ink-faint); font-size: 11.5px; }
307
+ .sec-title { grid-column: 1 / -1; margin-top: 6px; font-size: 11.5px; font-weight: 600; color: var(--ink-faint); }
308
+ .conclusions { grid-column: 1 / -1; margin: 0; padding-left: 22px; font-size: 12.5px; line-height: 1.7; }
309
+ .report-body, .json-body {
310
+ grid-column: 1 / -1; margin: 0; padding: 10px 12px;
311
+ font-family: var(--font-mono, monospace); font-size: 11.5px; line-height: 1.6;
312
+ white-space: pre-wrap; word-break: break-word;
313
+ background: color-mix(in srgb, var(--glass-line) 22%, transparent);
314
+ border: 1px solid color-mix(in srgb, var(--glass-line) 45%, transparent);
315
+ border-radius: 8px;
316
+ max-height: 340px; overflow: auto;
317
+ }
318
+ @media (max-width: 899px) {
319
+ .th-recipe, .th-src { display: none; }
320
+ .ar-table tbody td:nth-child(4), .ar-table tbody td:nth-child(6) { display: none; }
321
+ }
322
+ </style>