@hina114514/chaite 1.9.3

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 (427) hide show
  1. package/README.md +143 -0
  2. package/dist/__dirname-xAmdQ8wE.mjs +13 -0
  3. package/dist/__dirname.d.ts +4 -0
  4. package/dist/__dirname.mjs +4 -0
  5. package/dist/adapters-BeZFg37c.mjs +30 -0
  6. package/dist/chunks/@anthropic-ai/sdk/index.mjs-BBdoshoG.mjs +44887 -0
  7. package/dist/chunks/@google/genai/index.mjs-CJMm4uh0.mjs +25136 -0
  8. package/dist/chunks/@karinjs/node-schedule/index.mjs-UoPXNUgp.mjs +8403 -0
  9. package/dist/chunks/@xmldom/xmldom/index.mjs-BARr5-gb.mjs +4280 -0
  10. package/dist/chunks/accepts/index.mjs-BpfWQu4-.mjs +8009 -0
  11. package/dist/chunks/agent-base/index.mjs-BZ87hIEB.mjs +199 -0
  12. package/dist/chunks/array-flatten/index.mjs-CFicqOhD.mjs +54 -0
  13. package/dist/chunks/bluebird/index.mjs-D4zFjek8.mjs +4094 -0
  14. package/dist/chunks/body-parser/index.mjs-BrUY71SQ.mjs +13756 -0
  15. package/dist/chunks/chokidar/index.mjs-BvSuth5p.mjs +1537 -0
  16. package/dist/chunks/content-disposition/index.mjs-DqMQ6Fbz.mjs +307 -0
  17. package/dist/chunks/cookie/index.mjs-CTmQWCqd.mjs +243 -0
  18. package/dist/chunks/cookie-signature/index.mjs-CIA1F6JJ.mjs +46 -0
  19. package/dist/chunks/core-util-is/index.mjs-C0h_2dGX.mjs +69 -0
  20. package/dist/chunks/cors/index.mjs-DGt6p49t.mjs +311 -0
  21. package/dist/chunks/data-uri-to-buffer/index.mjs-CLj4bast.mjs +44 -0
  22. package/dist/chunks/debug/index.mjs-BgKBSuIO.mjs +703 -0
  23. package/dist/chunks/dingbat-to-unicode/index.mjs-DjR5pQCM.mjs +7481 -0
  24. package/dist/chunks/encodeurl/index.mjs-CvPRUh2S.mjs +105 -0
  25. package/dist/chunks/escape-html/index.mjs-CeA_Z7EO.mjs +65 -0
  26. package/dist/chunks/etag/index.mjs-D58ziXwz.mjs +80 -0
  27. package/dist/chunks/express/index.mjs-CHnhA_pr.mjs +6787 -0
  28. package/dist/chunks/fetch-blob/index.mjs-Pm1zUh3g.mjs +3803 -0
  29. package/dist/chunks/formdata-node/index.mjs-B2Ji6hC0.mjs +92 -0
  30. package/dist/chunks/formdata-polyfill/index.mjs-BTkafjCT.mjs +87 -0
  31. package/dist/chunks/https-proxy-agent/index.mjs-DTZuZn-J.mjs +239 -0
  32. package/dist/chunks/immediate/index.mjs-CkWjI_b-.mjs +59 -0
  33. package/dist/chunks/isarray/index.mjs-DaT02uUW.mjs +12 -0
  34. package/dist/chunks/jszip/index.mjs-CvfsTniy.mjs +8599 -0
  35. package/dist/chunks/lop/index.mjs-BWbOMJZv.mjs +3540 -0
  36. package/dist/chunks/mammoth/index.mjs-C9xwBIgf.mjs +5081 -0
  37. package/dist/chunks/node-fetch/index.mjs-Cdihbb0Q.mjs +1446 -0
  38. package/dist/chunks/openai/index.mjs-M-HPLtaS.mjs +6691 -0
  39. package/dist/dist-C0tgywA-.mjs +8 -0
  40. package/dist/fileFromPath-CJ_N7wA9.mjs +6 -0
  41. package/dist/index.d.ts +1579 -0
  42. package/dist/index.mjs +30 -0
  43. package/dist/multipart-parser-CCl_4A7w.mjs +6 -0
  44. package/dist/rolldown-runtime-DVriDoez.mjs +43 -0
  45. package/dist/src-BjDIhdKO.mjs +5179 -0
  46. package/dist/src-DmcKtGy2.mjs +7 -0
  47. package/dist/types-6jzst6Q4.mjs +30 -0
  48. package/frontend/build/assets/ChannelFormModal-1GO2eD4m.css +1 -0
  49. package/frontend/build/assets/ChannelFormModal-B6e7ZIO6.js +5 -0
  50. package/frontend/build/assets/ChannelFormModal-CV7fs6-7.js +5 -0
  51. package/frontend/build/assets/ChannelFormModal-DBZyhZDI.css +1 -0
  52. package/frontend/build/assets/ChannelFormModal-DL0qkZX-.js +5 -0
  53. package/frontend/build/assets/ChannelFormModal-DuAAlw-8.js +5 -0
  54. package/frontend/build/assets/ChannelFormModal-Hp6Y4QBc.js +5 -0
  55. package/frontend/build/assets/ChannelFormModal-xPhm1bZd.js +5 -0
  56. package/frontend/build/assets/Checkbox-BvK-NJJX.js +105 -0
  57. package/frontend/build/assets/Checkbox-CNMr2-eQ.js +105 -0
  58. package/frontend/build/assets/Checkbox-DOJuZG8N.js +105 -0
  59. package/frontend/build/assets/Checkbox-DWREbqxa.js +105 -0
  60. package/frontend/build/assets/Checkbox-HPhUtTKu.js +105 -0
  61. package/frontend/build/assets/Checkbox-gNUlkipW.js +105 -0
  62. package/frontend/build/assets/CollapseItem-7YFuTj31.js +41 -0
  63. package/frontend/build/assets/CollapseItem-BVnC3pah.js +41 -0
  64. package/frontend/build/assets/CollapseItem-Bk7f5wCb.js +41 -0
  65. package/frontend/build/assets/CollapseItem-Calq76Jj.js +41 -0
  66. package/frontend/build/assets/CollapseItem-DOnuDO5j.js +41 -0
  67. package/frontend/build/assets/CollapseItem-fWJBGjAw.js +41 -0
  68. package/frontend/build/assets/ConversationDetailDrawer-BYG2DS4S.js +1 -0
  69. package/frontend/build/assets/ConversationDetailDrawer-BYZeaeoF.js +1 -0
  70. package/frontend/build/assets/ConversationDetailDrawer-gVn82fSx.js +1 -0
  71. package/frontend/build/assets/ConversationDetailDrawer-jtT8U08c.js +1 -0
  72. package/frontend/build/assets/ConversationDetailDrawer-m-rNIWZj.js +1 -0
  73. package/frontend/build/assets/ConversationDetailDrawer-xbhamnIs.js +1 -0
  74. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-BRZBnJxg.js +97 -0
  75. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-BnR3ffRY.js +97 -0
  76. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-C0KA87GQ.js +97 -0
  77. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-CnLM8_TJ.js +97 -0
  78. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-CzZvhLM_.js +97 -0
  79. package/frontend/build/assets/ConversationDetailDrawer.vue_vue_type_script_setup_true_lang-U0BsqrL8.js +97 -0
  80. package/frontend/build/assets/DataTable-4ViTZyB6.js +457 -0
  81. package/frontend/build/assets/DataTable-B8zZmlji.js +457 -0
  82. package/frontend/build/assets/DataTable-BNjopWG3.js +457 -0
  83. package/frontend/build/assets/DataTable-CZyItGh5.js +457 -0
  84. package/frontend/build/assets/DataTable-DJj26Pzn.js +454 -0
  85. package/frontend/build/assets/DataTable-DoEbD9LL.js +457 -0
  86. package/frontend/build/assets/DynamicTags-BccLo-fc.js +1 -0
  87. package/frontend/build/assets/DynamicTags-Bmg43ONH.js +1 -0
  88. package/frontend/build/assets/DynamicTags-CyLbZ9I2.js +1 -0
  89. package/frontend/build/assets/DynamicTags-DNTdDdGA.js +1 -0
  90. package/frontend/build/assets/DynamicTags-VCyQf17w.js +1 -0
  91. package/frontend/build/assets/DynamicTags-rIgGdrL5.js +1 -0
  92. package/frontend/build/assets/Ellipsis-BST77ylS.js +187 -0
  93. package/frontend/build/assets/Ellipsis-BTz09kpN.js +187 -0
  94. package/frontend/build/assets/Ellipsis-BbsLqJtK.js +187 -0
  95. package/frontend/build/assets/Ellipsis-BdMplm4D.js +187 -0
  96. package/frontend/build/assets/Ellipsis-C3lHtvjF.js +187 -0
  97. package/frontend/build/assets/Ellipsis-CEbBdn2n.js +187 -0
  98. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-B5o0iz7y.js +1 -0
  99. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-BTf_XpHq.js +1 -0
  100. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-DFWrNfDB.js +1 -0
  101. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-DTFtcs8p.js +1 -0
  102. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-QKywH0iL.js +1 -0
  103. package/frontend/build/assets/ErrorTip.vue_vue_type_script_setup_true_lang-q7wMY1La.js +1 -0
  104. package/frontend/build/assets/FormItem-BFYeYoTE.js +110 -0
  105. package/frontend/build/assets/FormItem-B_V_gknG.js +110 -0
  106. package/frontend/build/assets/FormItem-C2ziP3u7.js +110 -0
  107. package/frontend/build/assets/FormItem-CDsgx_ab.js +110 -0
  108. package/frontend/build/assets/FormItem-D5nKwNGe.js +110 -0
  109. package/frontend/build/assets/FormItem-DcKuwtDH.js +110 -0
  110. package/frontend/build/assets/FormItemGridItem-BiRqZE_B.js +1 -0
  111. package/frontend/build/assets/FormItemGridItem-CEbJWTJd.js +1 -0
  112. package/frontend/build/assets/FormItemGridItem-DaKl8_2L.js +1 -0
  113. package/frontend/build/assets/FormItemGridItem-DkQ8mrOt.js +1 -0
  114. package/frontend/build/assets/FormItemGridItem-YEC3z4HO.js +1 -0
  115. package/frontend/build/assets/FormItemGridItem-cjYQS3d8.js +1 -0
  116. package/frontend/build/assets/Grid-0zzIexHr.js +1 -0
  117. package/frontend/build/assets/Grid-BNlPkf-g.js +1 -0
  118. package/frontend/build/assets/Grid-CmLEm3vL.js +1 -0
  119. package/frontend/build/assets/Grid-CqcXqV8U.js +1 -0
  120. package/frontend/build/assets/Grid-DmeNHOJx.js +1 -0
  121. package/frontend/build/assets/Grid-WK2vuhLP.js +1 -0
  122. package/frontend/build/assets/Image-CMvlvuJp.js +132 -0
  123. package/frontend/build/assets/Image-CbdTV78X.js +132 -0
  124. package/frontend/build/assets/Image-Cf2fbKtf.js +132 -0
  125. package/frontend/build/assets/Image-Crg2QYhk.js +132 -0
  126. package/frontend/build/assets/Image-D53Xywez.js +132 -0
  127. package/frontend/build/assets/Image-tNy1v7mL.js +132 -0
  128. package/frontend/build/assets/InputNumber-BjfLyebn.js +13 -0
  129. package/frontend/build/assets/InputNumber-BtSrvYnH.js +13 -0
  130. package/frontend/build/assets/InputNumber-BxeR-3jl.js +13 -0
  131. package/frontend/build/assets/InputNumber-C7hKPk7P.js +13 -0
  132. package/frontend/build/assets/InputNumber-CbRGvPDs.js +13 -0
  133. package/frontend/build/assets/InputNumber-qiteD5Uu.js +13 -0
  134. package/frontend/build/assets/MessageContentCard-333YPcPx.js +1 -0
  135. package/frontend/build/assets/MessageContentCard-B0-LvWuB.js +1 -0
  136. package/frontend/build/assets/MessageContentCard-C2uRLdgO.js +1 -0
  137. package/frontend/build/assets/MessageContentCard-CjL6sc3W.js +1 -0
  138. package/frontend/build/assets/MessageContentCard-D3wLdleV.css +1 -0
  139. package/frontend/build/assets/MessageContentCard-DQ6w5avD.css +1 -0
  140. package/frontend/build/assets/MessageContentCard-DRoS4fsn.js +1 -0
  141. package/frontend/build/assets/MessageContentCard-DRsw0lK-.js +1 -0
  142. package/frontend/build/assets/Popconfirm-DsC1UchR.js +16 -0
  143. package/frontend/build/assets/Popconfirm-wmBfNL4Y.js +16 -0
  144. package/frontend/build/assets/PresetFormModal-B87TaT8J.js +1 -0
  145. package/frontend/build/assets/PresetFormModal-BpleAL8Z.js +1 -0
  146. package/frontend/build/assets/PresetFormModal-BrNCyqXq.css +1 -0
  147. package/frontend/build/assets/PresetFormModal-D6bXLlH2.css +1 -0
  148. package/frontend/build/assets/PresetFormModal-D8RNddGW.css +1 -0
  149. package/frontend/build/assets/PresetFormModal-DZlJ1Vcp.css +1 -0
  150. package/frontend/build/assets/PresetFormModal-Dah-5WHj.js +1 -0
  151. package/frontend/build/assets/PresetFormModal-DepNynU1.js +1 -0
  152. package/frontend/build/assets/PresetFormModal-Diebn4cS.js +1 -0
  153. package/frontend/build/assets/PresetFormModal-Dol9eToM.js +1 -0
  154. package/frontend/build/assets/PresetFormModal-ah6zWfbB.css +1 -0
  155. package/frontend/build/assets/ProcessorFormModal-BLiL3tFS.js +1 -0
  156. package/frontend/build/assets/ProcessorFormModal-C4rqrypu.js +1 -0
  157. package/frontend/build/assets/ProcessorFormModal-D9X5zzKG.js +1 -0
  158. package/frontend/build/assets/ProcessorFormModal-Ik7zSGUU.js +1 -0
  159. package/frontend/build/assets/ProcessorFormModal-Q5ARXwwU.js +1 -0
  160. package/frontend/build/assets/ProcessorFormModal-vpoqf_VP.js +1 -0
  161. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-BK03vxpt.js +42 -0
  162. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-D8NYnQ0b.js +42 -0
  163. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-DKnpVb21.js +42 -0
  164. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-DQayqXcu.js +42 -0
  165. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-EUAgxSFF.js +42 -0
  166. package/frontend/build/assets/ProcessorFormModal.vue_vue_type_script_setup_true_lang-HZQFntw0.js +42 -0
  167. package/frontend/build/assets/Spin-BP0yPWNS.js +43 -0
  168. package/frontend/build/assets/Spin-C2G3wcnB.js +43 -0
  169. package/frontend/build/assets/Spin-C7sqRNqw.js +43 -0
  170. package/frontend/build/assets/Spin-Cy3cVx8W.js +43 -0
  171. package/frontend/build/assets/Spin-UrFjnOlY.js +43 -0
  172. package/frontend/build/assets/Spin-yYcNW-yl.js +43 -0
  173. package/frontend/build/assets/ToolFormModal-CVZFxPxz.js +1 -0
  174. package/frontend/build/assets/ToolFormModal-CgHH9Bbh.js +1 -0
  175. package/frontend/build/assets/ToolFormModal-D7NFHjzM.js +1 -0
  176. package/frontend/build/assets/ToolFormModal-DpVk5ooz.js +1 -0
  177. package/frontend/build/assets/ToolFormModal-DsS34Jdc.js +1 -0
  178. package/frontend/build/assets/ToolFormModal-hx-a_w1d.js +1 -0
  179. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-Biq3KQMr.js +51 -0
  180. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-DAbXNKv-.js +51 -0
  181. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-DGdJ6txC.js +51 -0
  182. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-QIhGuSJV.js +51 -0
  183. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-sVSPLzuy.js +51 -0
  184. package/frontend/build/assets/ToolFormModal.vue_vue_type_script_setup_true_lang-yH3HeP81.js +51 -0
  185. package/frontend/build/assets/ToolGroupFormModal-2uJQDkUz.js +1 -0
  186. package/frontend/build/assets/ToolGroupFormModal-B-OxsC_e.js +1 -0
  187. package/frontend/build/assets/ToolGroupFormModal-CXbSBPSI.js +1 -0
  188. package/frontend/build/assets/ToolGroupFormModal-CeF3hW-I.js +1 -0
  189. package/frontend/build/assets/ToolGroupFormModal-DfEZcYi7.js +1 -0
  190. package/frontend/build/assets/ToolGroupFormModal-DvGS2rQd.js +1 -0
  191. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-AsEJ8jCe.js +146 -0
  192. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-B5V2XNND.js +146 -0
  193. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-BYmI5807.js +146 -0
  194. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-C32gc6LQ.js +146 -0
  195. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-CRwhppLH.js +146 -0
  196. package/frontend/build/assets/ToolGroupFormModal.vue_vue_type_script_setup_true_lang-Cz49lSiC.js +146 -0
  197. package/frontend/build/assets/TriggerFormModal-B9hL6DT2.js +1 -0
  198. package/frontend/build/assets/TriggerFormModal-D6tlqZPa.js +1 -0
  199. package/frontend/build/assets/TriggerFormModal-DngyRFuZ.js +1 -0
  200. package/frontend/build/assets/TriggerFormModal-jUjJ3cpY.js +1 -0
  201. package/frontend/build/assets/TriggerFormModal-zyHfq9gk.js +1 -0
  202. package/frontend/build/assets/TriggerFormModal.vue_vue_type_script_setup_true_lang-65eiY_Fl.js +15 -0
  203. package/frontend/build/assets/TriggerFormModal.vue_vue_type_script_setup_true_lang-BDVxuECo.js +15 -0
  204. package/frontend/build/assets/TriggerFormModal.vue_vue_type_script_setup_true_lang-BGdRzXOm.js +15 -0
  205. package/frontend/build/assets/TriggerFormModal.vue_vue_type_script_setup_true_lang-Bq6N6Y6d.js +15 -0
  206. package/frontend/build/assets/TriggerFormModal.vue_vue_type_script_setup_true_lang-DPcB1irn.js +15 -0
  207. package/frontend/build/assets/add-one-BaGYp8TD.js +1 -0
  208. package/frontend/build/assets/add-one-CTqCiftQ.js +1 -0
  209. package/frontend/build/assets/add-one-DBohvXa7.js +1 -0
  210. package/frontend/build/assets/add-one-DQqaMb3g.js +1 -0
  211. package/frontend/build/assets/add-one-DT3qGnwW.js +1 -0
  212. package/frontend/build/assets/add-one-DenQ1X6U.js +1 -0
  213. package/frontend/build/assets/channels-5BB_92I-.js +1 -0
  214. package/frontend/build/assets/channels-C2i9C4LP.js +1 -0
  215. package/frontend/build/assets/channels-C53UiHV8.js +1 -0
  216. package/frontend/build/assets/channels-Cm8UM1Z7.js +1 -0
  217. package/frontend/build/assets/channels-DdlEEU3s.js +1 -0
  218. package/frontend/build/assets/channels-DzKbsjiA.js +1 -0
  219. package/frontend/build/assets/cloudy-BnletBC6.js +1 -0
  220. package/frontend/build/assets/cloudy-C02z4bvP.js +1 -0
  221. package/frontend/build/assets/cloudy-DCLcLr7j.js +1 -0
  222. package/frontend/build/assets/cloudy-DEHW5vHA.js +1 -0
  223. package/frontend/build/assets/cloudy-MrNAszHw.js +1 -0
  224. package/frontend/build/assets/cloudy-zp1Y9L1v.js +1 -0
  225. package/frontend/build/assets/default-resource.png +0 -0
  226. package/frontend/build/assets/download-C2161hUv.js +1 -0
  227. package/frontend/build/assets/error-403-VPEqmg7m.svg +1 -0
  228. package/frontend/build/assets/error-404-DLMSXL2R.svg +1 -0
  229. package/frontend/build/assets/error-500-C1R4JvdT.svg +1 -0
  230. package/frontend/build/assets/gemini-full-DjWArg1A.png +0 -0
  231. package/frontend/build/assets/headers-CYAAtr6C.js +16 -0
  232. package/frontend/build/assets/headers-CiEBSHa2.js +16 -0
  233. package/frontend/build/assets/headers-D9Kcnpmr.js +16 -0
  234. package/frontend/build/assets/headers-PaTXxtPR.js +16 -0
  235. package/frontend/build/assets/headers-UoeXy2eZ.js +16 -0
  236. package/frontend/build/assets/headers-VVIzblQ_.js +16 -0
  237. package/frontend/build/assets/index--eQYnbum.js +1 -0
  238. package/frontend/build/assets/index-03UGSOxl.js +3022 -0
  239. package/frontend/build/assets/index-2VSakRqN.js +1 -0
  240. package/frontend/build/assets/index-2WhMzyiQ.js +1 -0
  241. package/frontend/build/assets/index-2_Tj01eS.js +1 -0
  242. package/frontend/build/assets/index-2ds3nwBz.js +1 -0
  243. package/frontend/build/assets/index-5HLgPZyA.js +1 -0
  244. package/frontend/build/assets/index-A-Nxva_P.js +1 -0
  245. package/frontend/build/assets/index-AOaD5c69.css +1 -0
  246. package/frontend/build/assets/index-AxmlVWLb.js +88 -0
  247. package/frontend/build/assets/index-B1vc1sYC.js +88 -0
  248. package/frontend/build/assets/index-B2xcn1Zp.js +88 -0
  249. package/frontend/build/assets/index-B3vwplQQ.js +1 -0
  250. package/frontend/build/assets/index-B3xgRJTP.js +1 -0
  251. package/frontend/build/assets/index-B5DOGUIX.js +1 -0
  252. package/frontend/build/assets/index-B6OH0R7T.js +1 -0
  253. package/frontend/build/assets/index-B84-YkMr.js +1 -0
  254. package/frontend/build/assets/index-BEeRPoRP.css +1 -0
  255. package/frontend/build/assets/index-BG6BPhzo.js +1 -0
  256. package/frontend/build/assets/index-BITQakTn.js +1 -0
  257. package/frontend/build/assets/index-BMLd3diZ.js +1 -0
  258. package/frontend/build/assets/index-BVn0o2ft.js +1 -0
  259. package/frontend/build/assets/index-BWa7FUv_.css +1 -0
  260. package/frontend/build/assets/index-BX8jlXqW.js +1 -0
  261. package/frontend/build/assets/index-BfkNMt-Z.js +4 -0
  262. package/frontend/build/assets/index-BiTjEGM3.js +1 -0
  263. package/frontend/build/assets/index-BjIbFF1J.css +1 -0
  264. package/frontend/build/assets/index-BjlhqqjK.js +1 -0
  265. package/frontend/build/assets/index-BnFsJO-x.css +1 -0
  266. package/frontend/build/assets/index-BnLYNBvb.js +34 -0
  267. package/frontend/build/assets/index-BpyNu5uz.css +1 -0
  268. package/frontend/build/assets/index-Bq8g4Sjx.js +34 -0
  269. package/frontend/build/assets/index-BqnNVMWz.js +1 -0
  270. package/frontend/build/assets/index-BqvhG25P.js +1 -0
  271. package/frontend/build/assets/index-BxVOuJCR.js +88 -0
  272. package/frontend/build/assets/index-C0cu-RWI.js +1 -0
  273. package/frontend/build/assets/index-C3PU0-pz.js +1 -0
  274. package/frontend/build/assets/index-C6PGuM0W.js +1 -0
  275. package/frontend/build/assets/index-C8kC4vgj.js +73 -0
  276. package/frontend/build/assets/index-C929_ci3.js +1 -0
  277. package/frontend/build/assets/index-CAvXXNvC.js +4 -0
  278. package/frontend/build/assets/index-CH4h1wcf.js +1 -0
  279. package/frontend/build/assets/index-CIJ6rjR4.js +1 -0
  280. package/frontend/build/assets/index-CIr65QIJ.js +88 -0
  281. package/frontend/build/assets/index-CJIWqxBN.js +3022 -0
  282. package/frontend/build/assets/index-CK1nPYvM.js +1 -0
  283. package/frontend/build/assets/index-CKrf6ZAU.js +1 -0
  284. package/frontend/build/assets/index-CLfO7Gf6.js +1 -0
  285. package/frontend/build/assets/index-C_X4kJPv.js +1 -0
  286. package/frontend/build/assets/index-C_Y4E6cV.js +1 -0
  287. package/frontend/build/assets/index-Cb7i0EbW.js +1 -0
  288. package/frontend/build/assets/index-CbWw_OnJ.js +1 -0
  289. package/frontend/build/assets/index-CbeMIVMe.js +1 -0
  290. package/frontend/build/assets/index-CdNjPHZ4.css +1 -0
  291. package/frontend/build/assets/index-CeFBXiHy.js +34 -0
  292. package/frontend/build/assets/index-CfqNGf3J.js +1 -0
  293. package/frontend/build/assets/index-Cgw3BtX5.js +1 -0
  294. package/frontend/build/assets/index-Ci64noNy.js +4 -0
  295. package/frontend/build/assets/index-CpE2LZf6.js +88 -0
  296. package/frontend/build/assets/index-CqKFcCqq.js +1 -0
  297. package/frontend/build/assets/index-CrbhbDn6.js +1 -0
  298. package/frontend/build/assets/index-Csi2jHp6.js +1 -0
  299. package/frontend/build/assets/index-CuRn3Zj6.js +1 -0
  300. package/frontend/build/assets/index-Cvb6isPu.js +34 -0
  301. package/frontend/build/assets/index-D1keqYcn.js +1 -0
  302. package/frontend/build/assets/index-D4yD21Ii.js +1 -0
  303. package/frontend/build/assets/index-D60uSbJs.css +1 -0
  304. package/frontend/build/assets/index-D6ESmTyE.js +51 -0
  305. package/frontend/build/assets/index-D81JopND.js +1 -0
  306. package/frontend/build/assets/index-D8Ea2ZYj.js +1 -0
  307. package/frontend/build/assets/index-D8GATqgc.js +88 -0
  308. package/frontend/build/assets/index-DAP5yTaX.js +1 -0
  309. package/frontend/build/assets/index-DBBLpo8h.js +73 -0
  310. package/frontend/build/assets/index-DBaGV7UL.js +1 -0
  311. package/frontend/build/assets/index-DEVf6CSD.css +1 -0
  312. package/frontend/build/assets/index-DG-8CbiW.css +1 -0
  313. package/frontend/build/assets/index-DGBf1FIP.js +1 -0
  314. package/frontend/build/assets/index-DGJCAKZq.js +1 -0
  315. package/frontend/build/assets/index-DGyDjezP.js +1 -0
  316. package/frontend/build/assets/index-DJdQ0nV5.js +3022 -0
  317. package/frontend/build/assets/index-DK0t9ttf.js +51 -0
  318. package/frontend/build/assets/index-DNH9PMk-.js +1 -0
  319. package/frontend/build/assets/index-DOSf5RcO.css +1 -0
  320. package/frontend/build/assets/index-DOpBnx1_.js +3 -0
  321. package/frontend/build/assets/index-DOpZxAwZ.js +1 -0
  322. package/frontend/build/assets/index-DPHVwNRA.js +1 -0
  323. package/frontend/build/assets/index-DSzihJo9.js +1 -0
  324. package/frontend/build/assets/index-DVJZAGXg.js +1 -0
  325. package/frontend/build/assets/index-DXr1ddHm.js +3 -0
  326. package/frontend/build/assets/index-DamztouA.js +1 -0
  327. package/frontend/build/assets/index-Dd2IZqLs.js +1 -0
  328. package/frontend/build/assets/index-DfOc9UlB.js +1 -0
  329. package/frontend/build/assets/index-DgVSxPXN.css +1 -0
  330. package/frontend/build/assets/index-Dhp8dh5v.js +1 -0
  331. package/frontend/build/assets/index-DlqpxOQl.css +1 -0
  332. package/frontend/build/assets/index-DlvxwSxx.js +1 -0
  333. package/frontend/build/assets/index-Dn5ZzrRm.css +1 -0
  334. package/frontend/build/assets/index-Dp1faHeH.js +3020 -0
  335. package/frontend/build/assets/index-DsLf2ZDE.js +1 -0
  336. package/frontend/build/assets/index-DsUl8Ptm.js +1 -0
  337. package/frontend/build/assets/index-Dw0tLRur.js +1 -0
  338. package/frontend/build/assets/index-DwXVBZsv.js +1 -0
  339. package/frontend/build/assets/index-DyaHYcgL.js +1 -0
  340. package/frontend/build/assets/index-DzBQLoNi.js +3022 -0
  341. package/frontend/build/assets/index-GrVsVGKe.js +1 -0
  342. package/frontend/build/assets/index-IzGzRXKT.js +1 -0
  343. package/frontend/build/assets/index-MHTC5Jaf.js +1 -0
  344. package/frontend/build/assets/index-PDPwUSMg.js +34 -0
  345. package/frontend/build/assets/index-QYahACFP.css +1 -0
  346. package/frontend/build/assets/index-QkZPwKD6.js +88 -0
  347. package/frontend/build/assets/index-Tg84pa9I.js +88 -0
  348. package/frontend/build/assets/index-UL4MAKLb.js +88 -0
  349. package/frontend/build/assets/index-aa34KBYr.js +34 -0
  350. package/frontend/build/assets/index-ajvK6t0Y.js +1 -0
  351. package/frontend/build/assets/index-b5SryupN.js +1 -0
  352. package/frontend/build/assets/index-d3LI8LJL.js +4 -0
  353. package/frontend/build/assets/index-e1kUgjjO.js +1 -0
  354. package/frontend/build/assets/index-jTalI0G5.js +1 -0
  355. package/frontend/build/assets/index-jZroxcSG.js +1 -0
  356. package/frontend/build/assets/index-kLEe-31q.js +3022 -0
  357. package/frontend/build/assets/index-nxD1J_1U.js +1 -0
  358. package/frontend/build/assets/index-qD9Q6D9I.js +1 -0
  359. package/frontend/build/assets/index-uBZFl8l2.js +1 -0
  360. package/frontend/build/assets/index-wr8bxnDK.js +1 -0
  361. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-B4NwmABd.js +1 -0
  362. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-B4oNPU3q.js +1 -0
  363. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-BBmwAav-.js +1 -0
  364. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-BOOc15c_.js +1 -0
  365. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-BY9Af5Nc.js +1 -0
  366. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-Bej651CN.js +1 -0
  367. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-C2vb4Dqf.js +1 -0
  368. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-CL2618tE.js +1 -0
  369. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-CLxSBkmO.js +1 -0
  370. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-C_JTuf1y.js +1 -0
  371. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-CcJN846R.js +1 -0
  372. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-CijuxZr1.js +1 -0
  373. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-CmP-e403.js +1 -0
  374. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-Cs16N-Xd.js +1 -0
  375. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-D06MdY7a.js +1 -0
  376. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-DdgjuITP.js +1 -0
  377. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-DuLmC4Hy.js +1 -0
  378. package/frontend/build/assets/index.vue_vue_type_script_setup_true_lang-i_-VJTVk.js +1 -0
  379. package/frontend/build/assets/logo-B8LLnbYy.jpg +0 -0
  380. package/frontend/build/assets/memory-C4zB60HJ.js +1 -0
  381. package/frontend/build/assets/memory-DHzPXs82.js +1 -0
  382. package/frontend/build/assets/presets-8ZEu20ZL.js +1 -0
  383. package/frontend/build/assets/presets-Bbyt0PjB.js +1 -0
  384. package/frontend/build/assets/presets-DGMnsFyv.js +1 -0
  385. package/frontend/build/assets/presets-DqF27psW.js +1 -0
  386. package/frontend/build/assets/presets-N8YNqfPr.js +1 -0
  387. package/frontend/build/assets/presets-cCI64Dxi.js +1 -0
  388. package/frontend/build/assets/preview-close-one-BtVZjDje.js +1 -0
  389. package/frontend/build/assets/preview-close-one-CduaZ9go.js +1 -0
  390. package/frontend/build/assets/preview-close-one-DQdsMFNB.js +1 -0
  391. package/frontend/build/assets/preview-close-one-DZiBTyj3.js +1 -0
  392. package/frontend/build/assets/preview-close-one-ZEGMXVTp.js +1 -0
  393. package/frontend/build/assets/preview-close-one-vOfiPsm0.js +1 -0
  394. package/frontend/build/assets/preview-open--FMuWVpI.js +1 -0
  395. package/frontend/build/assets/preview-open-5axv2eoi.js +1 -0
  396. package/frontend/build/assets/preview-open-BwhyOZZZ.js +1 -0
  397. package/frontend/build/assets/preview-open-CEgCXCaz.js +1 -0
  398. package/frontend/build/assets/preview-open-CIsmwiay.js +1 -0
  399. package/frontend/build/assets/preview-open-DqXcn0Io.js +1 -0
  400. package/frontend/build/assets/processors-0_RUgaZm.js +1 -0
  401. package/frontend/build/assets/processors-BGAbvhSk.js +1 -0
  402. package/frontend/build/assets/processors-CJsyXjR7.js +1 -0
  403. package/frontend/build/assets/processors-CmJ007yb.js +1 -0
  404. package/frontend/build/assets/processors-CsDJer4R.js +1 -0
  405. package/frontend/build/assets/processors-on-PUe_q.js +1 -0
  406. package/frontend/build/assets/prop-BjyUHhTu.js +1 -0
  407. package/frontend/build/assets/text-BU3n8x_S.js +21 -0
  408. package/frontend/build/assets/text-BdCfEojD.js +21 -0
  409. package/frontend/build/assets/text-BfkuQm58.js +21 -0
  410. package/frontend/build/assets/text-BhKp8kwX.js +21 -0
  411. package/frontend/build/assets/text-C8WlRvWq.js +21 -0
  412. package/frontend/build/assets/text-Dm8ZXeiW.js +21 -0
  413. package/frontend/build/assets/toolGroup-BpThfFxc.js +1 -0
  414. package/frontend/build/assets/toolGroup-C7yi3DD-.js +1 -0
  415. package/frontend/build/assets/toolGroup-Cl_28ogB.js +1 -0
  416. package/frontend/build/assets/toolGroup-CvTMJceG.js +1 -0
  417. package/frontend/build/assets/toolGroup-DIZrVG-u.js +1 -0
  418. package/frontend/build/assets/toolGroup-YtViuyrx.js +1 -0
  419. package/frontend/build/assets/tools-BWpxaWcy.js +1 -0
  420. package/frontend/build/assets/tools-CivF5Y63.js +1 -0
  421. package/frontend/build/assets/tools-ClM2lWje.js +1 -0
  422. package/frontend/build/assets/tools-DlNqOoYG.js +1 -0
  423. package/frontend/build/assets/tools-DrffVcid.js +1 -0
  424. package/frontend/build/assets/tools-VKwjF6eb.js +1 -0
  425. package/frontend/build/favicon.jpg +0 -0
  426. package/frontend/build/index.html +537 -0
  427. package/package.json +71 -0
@@ -0,0 +1,537 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Chaite Dashboard</title>
7
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>⚡</text></svg>">
8
+ <style>
9
+ :root {
10
+ --bg: #0f1117;
11
+ --surface: #1a1d27;
12
+ --surface2: #252836;
13
+ --border: #2d3040;
14
+ --text: #e4e6f0;
15
+ --text2: #8b8fa8;
16
+ --accent: #6366f1;
17
+ --accent2: #818cf8;
18
+ --green: #22c55e;
19
+ --red: #ef4444;
20
+ --orange: #f59e0b;
21
+ --radius: 10px;
22
+ }
23
+ * { margin: 0; padding: 0; box-sizing: border-box; }
24
+ body {
25
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
26
+ background: var(--bg);
27
+ color: var(--text);
28
+ min-height: 100vh;
29
+ }
30
+ .app { max-width: 1200px; margin: 0 auto; padding: 24px; }
31
+
32
+ /* Header */
33
+ .header {
34
+ display: flex; justify-content: space-between; align-items: center;
35
+ padding: 16px 0; margin-bottom: 24px;
36
+ border-bottom: 1px solid var(--border);
37
+ }
38
+ .header h1 { font-size: 22px; font-weight: 600; }
39
+ .header h1 span { color: var(--accent2); }
40
+ .header .meta { display: flex; gap: 12px; align-items: center; }
41
+ .badge {
42
+ padding: 4px 10px; border-radius: 20px;
43
+ font-size: 12px; font-weight: 500;
44
+ background: var(--surface2); border: 1px solid var(--border);
45
+ }
46
+ .badge.ok { border-color: var(--green); color: var(--green); }
47
+ .badge.err { border-color: var(--red); color: var(--red); }
48
+
49
+ /* Cards grid */
50
+ .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; margin-bottom: 24px; }
51
+ .card {
52
+ background: var(--surface);
53
+ border: 1px solid var(--border);
54
+ border-radius: var(--radius);
55
+ padding: 20px;
56
+ transition: border-color .15s;
57
+ }
58
+ .card:hover { border-color: var(--accent); }
59
+ .card .label { font-size: 12px; color: var(--text2); text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px; }
60
+ .card .value { font-size: 28px; font-weight: 700; color: var(--text); }
61
+ .card .sub { font-size: 13px; color: var(--text2); margin-top: 4px; }
62
+
63
+ /* Section */
64
+ .section { margin-bottom: 32px; }
65
+ .section h2 {
66
+ font-size: 16px; font-weight: 600; margin-bottom: 16px;
67
+ display: flex; align-items: center; gap: 8px;
68
+ }
69
+ .section h2 .dot {
70
+ width: 8px; height: 8px; border-radius: 50%; background: var(--accent);
71
+ }
72
+
73
+ /* Table */
74
+ .table-wrap {
75
+ background: var(--surface);
76
+ border: 1px solid var(--border);
77
+ border-radius: var(--radius);
78
+ overflow: hidden;
79
+ }
80
+ table { width: 100%; border-collapse: collapse; }
81
+ th {
82
+ text-align: left; padding: 12px 16px;
83
+ font-size: 11px; text-transform: uppercase; letter-spacing: .5px;
84
+ color: var(--text2); border-bottom: 1px solid var(--border);
85
+ background: var(--surface2);
86
+ }
87
+ td {
88
+ padding: 12px 16px; font-size: 14px;
89
+ border-bottom: 1px solid var(--border);
90
+ }
91
+ tr:last-child td { border-bottom: none; }
92
+ tr:hover td { background: rgba(99,102,241,.04); }
93
+
94
+ .status-dot {
95
+ display: inline-block; width: 7px; height: 7px; border-radius: 50%; margin-right: 6px;
96
+ }
97
+ .status-dot.on { background: var(--green); }
98
+ .status-dot.off { background: var(--red); }
99
+
100
+ .model-tag {
101
+ display: inline-block; padding: 2px 8px; border-radius: 4px;
102
+ font-size: 11px; background: var(--surface2); color: var(--text2);
103
+ margin: 2px 2px;
104
+ }
105
+
106
+ /* Button */
107
+ .btn {
108
+ padding: 8px 16px; border-radius: 6px; font-size: 13px; font-weight: 500;
109
+ border: 1px solid var(--border); background: var(--surface2); color: var(--text);
110
+ cursor: pointer; transition: all .15s;
111
+ }
112
+ .btn:hover { border-color: var(--accent); color: var(--accent2); }
113
+ .btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; }
114
+ .btn.primary:hover { background: var(--accent2); }
115
+ .btn:disabled { opacity: .5; cursor: not-allowed; }
116
+
117
+ /* Login */
118
+ .login-overlay {
119
+ position: fixed; inset: 0; background: var(--bg);
120
+ display: flex; align-items: center; justify-content: center;
121
+ z-index: 1000;
122
+ }
123
+ .login-box {
124
+ background: var(--surface); border: 1px solid var(--border);
125
+ border-radius: var(--radius); padding: 40px; width: 360px; text-align: center;
126
+ }
127
+ .login-box h2 { margin-bottom: 24px; font-size: 20px; }
128
+ .login-box input {
129
+ width: 100%; padding: 10px 14px; border-radius: 6px;
130
+ border: 1px solid var(--border); background: var(--surface2);
131
+ color: var(--text); font-size: 14px; margin-bottom: 16px; outline: none;
132
+ }
133
+ .login-box input:focus { border-color: var(--accent); }
134
+ .login-box .error { color: var(--red); font-size: 13px; margin-bottom: 12px; min-height: 20px; }
135
+ .login-box .btn { width: 100%; }
136
+ .login-box .hint { font-size: 12px; color: var(--text2); margin-top: 12px; line-height: 1.5; }
137
+
138
+ /* Refresh bar */
139
+ .toolbar {
140
+ display: flex; justify-content: space-between; align-items: center;
141
+ margin-bottom: 16px;
142
+ }
143
+ .toolbar .info { font-size: 13px; color: var(--text2); }
144
+
145
+ /* Spinner */
146
+ .spinner {
147
+ display: inline-block; width: 14px; height: 14px;
148
+ border: 2px solid var(--border); border-top-color: var(--accent);
149
+ border-radius: 50%; animation: spin .6s linear infinite;
150
+ }
151
+ @keyframes spin { to { transform: rotate(360deg); } }
152
+
153
+ /* Test result */
154
+ .test-result {
155
+ margin-top: 16px; padding: 12px 16px;
156
+ border-radius: var(--radius); font-size: 13px;
157
+ }
158
+ .test-result.ok { background: rgba(34,197,94,.1); border: 1px solid rgba(34,197,94,.3); }
159
+ .test-result.err { background: rgba(239,68,68,.1); border: 1px solid rgba(239,68,68,.3); }
160
+
161
+ /* Conversations */
162
+ .conv-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
163
+ .conv-card {
164
+ background: var(--surface); border: 1px solid var(--border);
165
+ border-radius: var(--radius); padding: 16px;
166
+ }
167
+ .conv-card .uid { font-size: 14px; font-weight: 600; }
168
+ .conv-card .cid { font-size: 12px; color: var(--text2); margin-top: 4px; word-break: break-all; }
169
+ .conv-card .model { font-size: 12px; color: var(--accent2); margin-top: 4px; }
170
+
171
+ @media (max-width: 640px) {
172
+ .app { padding: 16px; }
173
+ .grid { grid-template-columns: 1fr 1fr; }
174
+ .conv-list { grid-template-columns: 1fr; }
175
+ }
176
+ </style>
177
+ </head>
178
+ <body>
179
+ <div id="app"></div>
180
+ <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
181
+ <script>
182
+ const { createApp, ref, reactive, onMounted, onUnmounted } = Vue
183
+
184
+ createApp({
185
+ setup() {
186
+ const jwt = ref(localStorage.getItem('chaite_jwt') || '')
187
+ const loggedIn = ref(!!jwt.value)
188
+ const loginError = ref('')
189
+ const loginLoading = ref(false)
190
+
191
+ const health = ref(null)
192
+ const stats = ref(null)
193
+ const channels = ref([])
194
+ const conversations = ref([])
195
+ const testResult = ref(null)
196
+ const testLoading = ref(false)
197
+ const loading = ref(true)
198
+ const refreshTime = ref('')
199
+ let timer = null
200
+ let tokenExpiresAt = parseInt(localStorage.getItem('chaite_jwt_exp') || '0')
201
+
202
+ const headers = () => ({
203
+ 'Content-Type': 'application/json',
204
+ 'Authorization': `Bearer ${jwt.value}`
205
+ })
206
+
207
+ // Extract ?token=xxx from URL
208
+ function getUrlToken() {
209
+ const params = new URLSearchParams(window.location.search)
210
+ return params.get('token') || ''
211
+ }
212
+
213
+ function isTokenExpired() {
214
+ if (!tokenExpiresAt) return false
215
+ return Date.now() / 1000 > tokenExpiresAt - 300
216
+ }
217
+
218
+ // Auto-login: if ?token= is in URL, use it to get a JWT
219
+ async function autoLogin() {
220
+ const urlToken = getUrlToken()
221
+ if (!urlToken) {
222
+ // No URL token — check if we have a stored JWT
223
+ if (jwt.value && !isTokenExpired()) {
224
+ loggedIn.value = true
225
+ refreshAll()
226
+ } else if (jwt.value && isTokenExpired()) {
227
+ // Try refresh
228
+ tryRefresh()
229
+ }
230
+ return
231
+ }
232
+
233
+ // Exchange access token for JWT
234
+ loginLoading.value = true
235
+ loginError.value = ''
236
+ try {
237
+ const r = await fetch('/api/auth/login', {
238
+ method: 'POST',
239
+ headers: { 'Content-Type': 'application/json' },
240
+ body: JSON.stringify({ token: urlToken })
241
+ })
242
+ const d = await r.json()
243
+ if (d.data?.token) {
244
+ jwt.value = d.data.token
245
+ tokenExpiresAt = Math.floor(Date.now() / 1000) + (d.data.expiresIn || 604800)
246
+ localStorage.setItem('chaite_jwt', d.data.token)
247
+ localStorage.setItem('chaite_jwt_exp', String(tokenExpiresAt))
248
+ loggedIn.value = true
249
+ // Clean URL (remove ?token= from address bar)
250
+ window.history.replaceState({}, '', window.location.pathname)
251
+ refreshAll()
252
+ } else {
253
+ loginError.value = 'Invalid or expired access token'
254
+ }
255
+ } catch (e) {
256
+ loginError.value = 'Network error'
257
+ } finally {
258
+ loginLoading.value = false
259
+ }
260
+ }
261
+
262
+ async function tryRefresh() {
263
+ try {
264
+ const r = await fetch('/api/auth/refresh', { method: 'POST', headers: headers() })
265
+ const d = await r.json()
266
+ if (d.data?.token) {
267
+ jwt.value = d.data.token
268
+ tokenExpiresAt = Math.floor(Date.now() / 1000) + (d.data.expiresIn || 604800)
269
+ localStorage.setItem('chaite_jwt', d.data.token)
270
+ localStorage.setItem('chaite_jwt_exp', String(tokenExpiresAt))
271
+ loggedIn.value = true
272
+ refreshAll()
273
+ } else {
274
+ logout()
275
+ }
276
+ } catch {
277
+ logout()
278
+ }
279
+ }
280
+
281
+ function logout() {
282
+ jwt.value = ''
283
+ tokenExpiresAt = 0
284
+ localStorage.removeItem('chaite_jwt')
285
+ localStorage.removeItem('chaite_jwt_exp')
286
+ loggedIn.value = false
287
+ health.value = null
288
+ stats.value = null
289
+ channels.value = []
290
+ }
291
+
292
+ async function api(path) {
293
+ if (isTokenExpired()) {
294
+ await tryRefresh()
295
+ if (!loggedIn.value) return null
296
+ }
297
+ const r = await fetch(path, { headers: headers() })
298
+ if (r.status === 401) { logout(); return null }
299
+ const d = await r.json()
300
+ return d.data
301
+ }
302
+
303
+ async function refreshAll() {
304
+ loading.value = true
305
+ try {
306
+ const [h, s, ch, cv] = await Promise.all([
307
+ api('/api/system/health'),
308
+ api('/api/system/stats'),
309
+ api('/api/channels/list'),
310
+ api('/api/state/conversations/list'),
311
+ ])
312
+ health.value = h
313
+ stats.value = s
314
+ channels.value = ch || []
315
+ conversations.value = cv || []
316
+ refreshTime.value = new Date().toLocaleTimeString()
317
+ } catch (e) {
318
+ console.error('refresh error', e)
319
+ } finally {
320
+ loading.value = false
321
+ }
322
+ }
323
+
324
+ async function testChannel(channelId) {
325
+ testLoading.value = true
326
+ testResult.value = null
327
+ try {
328
+ const r = await fetch('/api/system/test-channel', {
329
+ method: 'POST',
330
+ headers: headers(),
331
+ body: JSON.stringify({ channelId })
332
+ })
333
+ testResult.value = await r.json()
334
+ } catch (e) {
335
+ testResult.value = { data: { status: 'error', error: e.message } }
336
+ } finally {
337
+ testLoading.value = false
338
+ }
339
+ }
340
+
341
+ function uptimeStr(s) {
342
+ if (!s && s !== 0) return '-'
343
+ const h = Math.floor(s / 3600)
344
+ const m = Math.floor((s % 3600) / 60)
345
+ const sec = s % 60
346
+ return h ? `${h}h ${m}m` : m ? `${m}m ${sec}s` : `${sec}s`
347
+ }
348
+
349
+ function fmtNum(n) {
350
+ if (!n && n !== 0) return '0'
351
+ if (n >= 1e6) return (n / 1e6).toFixed(1) + 'M'
352
+ if (n >= 1e3) return (n / 1e3).toFixed(1) + 'K'
353
+ return String(n)
354
+ }
355
+
356
+ onMounted(() => {
357
+ autoLogin()
358
+ timer = setInterval(() => { if (loggedIn.value) refreshAll() }, 30000)
359
+ })
360
+ onUnmounted(() => clearInterval(timer))
361
+
362
+ return {
363
+ jwt, loggedIn, loginError, loginLoading,
364
+ health, stats, channels, conversations,
365
+ testResult, testLoading, loading, refreshTime,
366
+ logout, refreshAll, testChannel,
367
+ uptimeStr, fmtNum,
368
+ }
369
+ },
370
+ template: `
371
+ <!-- No token in URL and no stored JWT -->
372
+ <div v-if="!loggedIn && !loginLoading" class="login-overlay">
373
+ <div class="login-box">
374
+ <h2>⚡ Chaite Dashboard</h2>
375
+ <div class="error">{{ loginError }}</div>
376
+ <div class="hint">
377
+ No access token found.<br><br>
378
+ Open the dashboard with your access token in the URL:<br>
379
+ <code style="word-break:break-all;color:var(--accent2);">http://host:port?token=YOUR_TOKEN</code><br><br>
380
+ The token is printed in the server console at startup.
381
+ </div>
382
+ </div>
383
+ </div>
384
+
385
+ <!-- Loading state (auto-login in progress) -->
386
+ <div v-else-if="loginLoading" class="login-overlay">
387
+ <div class="login-box">
388
+ <h2>⚡ Chaite Dashboard</h2>
389
+ <div class="spinner" style="margin:16px auto;"></div>
390
+ <div style="color:var(--text2);font-size:13px;">Authenticating...</div>
391
+ </div>
392
+ </div>
393
+
394
+ <div v-else class="app">
395
+ <!-- Header -->
396
+ <div class="header">
397
+ <h1>⚡ <span>Chaite</span> Dashboard</h1>
398
+ <div class="meta">
399
+ <span class="badge" v-if="refreshTime">Updated {{ refreshTime }}</span>
400
+ <span class="badge ok" v-if="health?.status === 'ok'">Healthy</span>
401
+ <span class="badge err" v-else-if="health">Unhealthy</span>
402
+ <button class="btn" @click="refreshAll" :disabled="loading">
403
+ <span v-if="loading" class="spinner"></span>
404
+ <span v-else>↻ Refresh</span>
405
+ </button>
406
+ <button class="btn" @click="logout">Logout</button>
407
+ </div>
408
+ </div>
409
+
410
+ <!-- Stats cards -->
411
+ <div class="grid" v-if="health">
412
+ <div class="card">
413
+ <div class="label">Uptime</div>
414
+ <div class="value">{{ uptimeStr(health.uptime) }}</div>
415
+ <div class="sub">v{{ health.version }} · Node {{ health.system?.nodeVersion }}</div>
416
+ </div>
417
+ <div class="card">
418
+ <div class="label">Channels</div>
419
+ <div class="value">{{ health.channels?.total }}</div>
420
+ <div class="sub">{{ health.channels?.enabled }} enabled · {{ health.channels?.disabled }} disabled</div>
421
+ </div>
422
+ <div class="card">
423
+ <div class="label">Models</div>
424
+ <div class="value">{{ health.models?.count }}</div>
425
+ <div class="sub">{{ health.tools?.count ?? 0 }} tools registered</div>
426
+ </div>
427
+ <div class="card">
428
+ <div class="label">Memory</div>
429
+ <div class="value">{{ health.system?.processMemory ?? '-' }} MB</div>
430
+ <div class="sub">Heap {{ health.system?.heapUsed ?? '-' }} MB · Free {{ health.system?.freeMemory ?? '-' }} MB</div>
431
+ </div>
432
+ <div class="card" v-if="stats?.summary">
433
+ <div class="label">Total Calls</div>
434
+ <div class="value">{{ fmtNum(stats.summary.totalCalls) }}</div>
435
+ <div class="sub">{{ fmtNum(stats.summary.totalTokens) }} tokens used</div>
436
+ </div>
437
+ </div>
438
+
439
+ <!-- Channels -->
440
+ <div class="section">
441
+ <h2><span class="dot"></span> Channels</h2>
442
+ <div class="table-wrap">
443
+ <table>
444
+ <thead>
445
+ <tr>
446
+ <th>Status</th>
447
+ <th>Name</th>
448
+ <th>Adapter</th>
449
+ <th>Models</th>
450
+ <th>Priority</th>
451
+ <th>Calls</th>
452
+ <th>Actions</th>
453
+ </tr>
454
+ </thead>
455
+ <tbody>
456
+ <tr v-for="ch in channels" :key="ch.id">
457
+ <td>
458
+ <span class="status-dot" :class="ch.status === 'enabled' ? 'on' : 'off'"></span>
459
+ {{ ch.status }}
460
+ </td>
461
+ <td>{{ ch.name || ch.id?.slice(0, 8) }}</td>
462
+ <td>{{ ch.adapterType }}</td>
463
+ <td>
464
+ <span class="model-tag" v-for="m in (ch.models || []).slice(0, 3)" :key="m">{{ m }}</span>
465
+ <span v-if="(ch.models || []).length > 3" class="model-tag">+{{ ch.models.length - 3 }}</span>
466
+ </td>
467
+ <td>{{ ch.priority }}</td>
468
+ <td>{{ ch.statistics?.callTimes ?? 0 }}</td>
469
+ <td>
470
+ <button class="btn" @click="testChannel(ch.id)" :disabled="testLoading"
471
+ style="font-size:12px;padding:4px 10px;">
472
+ <span v-if="testLoading" class="spinner"></span>
473
+ <span v-else>Test</span>
474
+ </button>
475
+ </td>
476
+ </tr>
477
+ <tr v-if="!channels.length">
478
+ <td colspan="7" style="text-align:center;color:var(--text2);padding:24px;">No channels configured</td>
479
+ </tr>
480
+ </tbody>
481
+ </table>
482
+ </div>
483
+ <div v-if="testResult" class="test-result" :class="testResult.data?.status === 'ok' ? 'ok' : 'err'">
484
+ <template v-if="testResult.data?.status === 'ok'">
485
+ ✅ Channel test passed · Model: {{ testResult.data.model }} · Latency: {{ testResult.data.latency }}ms
486
+ </template>
487
+ <template v-else>
488
+ ❌ Test failed: {{ testResult.data?.error || testResult.message }}
489
+ </template>
490
+ </div>
491
+ </div>
492
+
493
+ <!-- Models -->
494
+ <div class="section" v-if="health?.models?.list?.length">
495
+ <h2><span class="dot"></span> Available Models</h2>
496
+ <div style="display:flex;flex-wrap:wrap;gap:6px;">
497
+ <span class="model-tag" v-for="m in health.models.list" :key="m"
498
+ style="font-size:13px;padding:5px 12px;">{{ m }}</span>
499
+ </div>
500
+ </div>
501
+
502
+ <!-- Conversations -->
503
+ <div class="section" v-if="conversations.length">
504
+ <h2><span class="dot"></span> Active Conversations</h2>
505
+ <div class="conv-list">
506
+ <div class="conv-card" v-for="c in conversations" :key="c.userId">
507
+ <div class="uid">User {{ c.userId }}</div>
508
+ <div class="cid" v-if="c.conversationId">Conv: {{ c.conversationId }}</div>
509
+ <div class="model" v-if="c.currentModel">Model: {{ c.currentModel }}</div>
510
+ </div>
511
+ </div>
512
+ </div>
513
+
514
+ <!-- Per-model stats -->
515
+ <div class="section" v-if="stats?.perModel && Object.keys(stats.perModel).length">
516
+ <h2><span class="dot"></span> Per-Model Stats</h2>
517
+ <div class="table-wrap">
518
+ <table>
519
+ <thead>
520
+ <tr><th>Model</th><th>Calls</th><th>Tokens</th></tr>
521
+ </thead>
522
+ <tbody>
523
+ <tr v-for="(s, model) in stats.perModel" :key="model">
524
+ <td>{{ model }}</td>
525
+ <td>{{ fmtNum(s.calls) }}</td>
526
+ <td>{{ fmtNum(s.tokens) }}</td>
527
+ </tr>
528
+ </tbody>
529
+ </table>
530
+ </div>
531
+ </div>
532
+ </div>
533
+ `
534
+ }).mount('#app')
535
+ </script>
536
+ </body>
537
+ </html>
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@hina114514/chaite",
3
+ "version": "1.9.3",
4
+ "description": "core for chatgpt-plugin and karin-plugin-chatgpt",
5
+ "keywords": [
6
+ "yunzai",
7
+ "karin",
8
+ "chatgpt"
9
+ ],
10
+ "license": "ISC",
11
+ "author": "ikechan8370",
12
+ "sideEffects": true,
13
+ "type": "module",
14
+ "main": "dist/index.mjs",
15
+ "types": "dist/index.d.ts",
16
+ "files": [
17
+ "dist",
18
+ "frontend",
19
+ "LICENSE",
20
+ "README.md",
21
+ "package.json"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc --noEmit && tsdown",
25
+ "dev": "nodemon --exec ts-node src/index.ts",
26
+ "lint": "eslint . --ext .ts",
27
+ "lint:fix": "eslint . --ext .ts --fix",
28
+ "prebuild": "node scripts/generate-version.js",
29
+ "prepublishOnly": "npm run build",
30
+ "pub": "npm publish --access public",
31
+ "test": "jest"
32
+ },
33
+ "devDependencies": {
34
+ "@anthropic-ai/sdk": "^0.39.0",
35
+ "@eslint/js": "^9.21.0",
36
+ "@google/genai": "^1.8.0",
37
+ "@karinjs/node-schedule": "^1.1.2",
38
+ "@types/cors": "^2.8.17",
39
+ "@types/express": "^5.0.0",
40
+ "@types/jest": "^29.5.14",
41
+ "@types/node": "^20.17.24",
42
+ "@typescript-eslint/eslint-plugin": "^8.25.0",
43
+ "@typescript-eslint/parser": "^8.25.0",
44
+ "axios": "^1.8.1",
45
+ "chokidar": "^4.0.3",
46
+ "copyfiles": "^2.4.1",
47
+ "cors": "^2.8.5",
48
+ "eslint": "^9.21.0",
49
+ "eslint-config-prettier": "^10.0.2",
50
+ "eslint-plugin-prettier": "^5.2.3",
51
+ "express": "^4.21.2",
52
+ "jest": "^29.7.0",
53
+ "mammoth": "^1.9.0",
54
+ "openai": "^5.20.1",
55
+ "pdf-parse": "^2.4.5",
56
+ "prettier": "^3.5.2",
57
+ "reflect-metadata": "^0.2.2",
58
+ "ts-jest": "^29.2.6",
59
+ "tsdown": "^0.16.0",
60
+ "typescript": "^5.7.3",
61
+ "typescript-eslint": "^8.25.0"
62
+ },
63
+ "peerDependencies": {
64
+ "pdf-parse": "^2.4.5"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "pdf-parse": {
68
+ "optional": true
69
+ }
70
+ }
71
+ }