cognova 0.2.12 → 0.2.14

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 (398) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/-mGU8_Hv.js +1 -0
  3. package/.output/public/_nuxt/0GqCtQ9S.js +1 -0
  4. package/.output/public/_nuxt/{CLfF6dSn.js → 1wCoXZ14.js} +1 -1
  5. package/.output/public/_nuxt/2J1KxdHv.js +1 -0
  6. package/.output/public/_nuxt/6VDUZECX.js +1 -0
  7. package/.output/public/_nuxt/{DEd2xVbS.js → 8WMJQbWG.js} +1 -1
  8. package/.output/public/_nuxt/9Rw88G6h.js +1 -0
  9. package/.output/public/_nuxt/{PP_4ebzl.js → B-yW4SD3.js} +1 -1
  10. package/.output/public/_nuxt/B20jNAhm.js +1 -0
  11. package/.output/public/_nuxt/B3OpTH_e.js +1 -0
  12. package/.output/public/_nuxt/B9Y3_B5G.js +1 -0
  13. package/.output/public/_nuxt/B9_vmatf.js +1 -0
  14. package/.output/public/_nuxt/B9o6sFST.js +1 -0
  15. package/.output/public/_nuxt/{D8M722pn.js → BAY3_Hrq.js} +1 -1
  16. package/.output/public/_nuxt/{0yk-pS3R.js → BD5rPkc2.js} +3 -3
  17. package/.output/public/_nuxt/BGYoW3kO.js +1 -0
  18. package/.output/public/_nuxt/BHUy5EAj.js +1 -0
  19. package/.output/public/_nuxt/BLdMRpJD.js +1 -0
  20. package/.output/public/_nuxt/{2dNDtTiv.js → BOCn_SGf.js} +12 -12
  21. package/.output/public/_nuxt/BQi8LIrn.js +1 -0
  22. package/.output/public/_nuxt/BS1t375R.js +1 -0
  23. package/.output/public/_nuxt/BTGeP1bA.js +1 -0
  24. package/.output/public/_nuxt/{4K03TkGA.js → BVYYP4eQ.js} +5 -5
  25. package/.output/public/_nuxt/BWQ7zE01.js +1 -0
  26. package/.output/public/_nuxt/BWqJInD3.js +1 -0
  27. package/.output/public/_nuxt/BXdQ9ASJ.js +1 -0
  28. package/.output/public/_nuxt/{BHtY0l0l.js → BXxZokD_.js} +2 -2
  29. package/.output/public/_nuxt/BZ7DAtPi.js +1 -0
  30. package/.output/public/_nuxt/BZm9w7en.js +1 -0
  31. package/.output/public/_nuxt/B_hNqC64.js +1 -0
  32. package/.output/public/_nuxt/Be47YE2L.js +1 -0
  33. package/.output/public/_nuxt/BgIS9_ti.js +39 -0
  34. package/.output/public/_nuxt/BgavRUl_.js +1 -0
  35. package/.output/public/_nuxt/Bh0yGTzr.js +1 -0
  36. package/.output/public/_nuxt/BhhMUror.js +1 -0
  37. package/.output/public/_nuxt/Bj5e7QPz.js +1 -0
  38. package/.output/public/_nuxt/{7oCGSglN.js → Bnn59-FS.js} +1 -1
  39. package/.output/public/_nuxt/BoCU3mWu.js +1 -0
  40. package/.output/public/_nuxt/Br6epbzY.js +1 -0
  41. package/.output/public/_nuxt/Br81Sr2R.js +1 -0
  42. package/.output/public/_nuxt/BrkEOLHu.js +9 -0
  43. package/.output/public/_nuxt/BtrNCc2S.js +1 -0
  44. package/.output/public/_nuxt/BxsQlbgl.js +1 -0
  45. package/.output/public/_nuxt/BzrhNhdT.js +1 -0
  46. package/.output/public/_nuxt/{CVqlefTY.js → C-78dDNd.js} +1 -1
  47. package/.output/public/_nuxt/C1oaoi1p.js +1 -0
  48. package/.output/public/_nuxt/C2-_hcwB.js +1 -0
  49. package/.output/public/_nuxt/{rfGRTJJW.js → C2Gh3qqr.js} +1 -1
  50. package/.output/public/_nuxt/C2OHaW6l.js +1 -0
  51. package/.output/public/_nuxt/C3szZmvA.js +1 -0
  52. package/.output/public/_nuxt/C3xzleKP.js +1 -0
  53. package/.output/public/_nuxt/C4sG6rdW.js +1 -0
  54. package/.output/public/_nuxt/C5Cu9Fx6.js +1 -0
  55. package/.output/public/_nuxt/{JX1oqJI9.js → C5gfF7J1.js} +1 -1
  56. package/.output/public/_nuxt/C6Eoiclo.js +1 -0
  57. package/.output/public/_nuxt/C7hFztZL.js +1 -0
  58. package/.output/public/_nuxt/CAVUAxNU.js +2 -0
  59. package/.output/public/_nuxt/{t8aDAkZ5.js → CCeM5lW2.js} +1 -1
  60. package/.output/public/_nuxt/CDcQ31Eh.js +1 -0
  61. package/.output/public/_nuxt/CHbHVtCy.js +1 -0
  62. package/.output/public/_nuxt/CHnVFnBW.js +1 -0
  63. package/.output/public/_nuxt/CLNcmNQS.js +1 -0
  64. package/.output/public/_nuxt/{EgKnQnf-.js → CPwCTHun.js} +1 -1
  65. package/.output/public/_nuxt/{ixlNW2So.js → CS8SdmH2.js} +1 -1
  66. package/.output/public/_nuxt/CTGm_mc8.js +1 -0
  67. package/.output/public/_nuxt/{CPutXj8l.js → CTQFGHjS.js} +1 -1
  68. package/.output/public/_nuxt/{BS2ZNXI1.js → CVVtVzXC.js} +1 -1
  69. package/.output/public/_nuxt/CZNOaqeX.js +1 -0
  70. package/.output/public/_nuxt/C_A_NkeC.js +2 -0
  71. package/.output/public/_nuxt/{gTrVszwd.js → C_doutX-.js} +1 -1
  72. package/.output/public/_nuxt/{CY-QVcA5.js → CbDLhrNA.js} +2 -2
  73. package/.output/public/_nuxt/CePKCqSb.js +1 -0
  74. package/.output/public/_nuxt/Cet4T_yO.js +1 -0
  75. package/.output/public/_nuxt/{fbyIeNkc.js → CjJPkhbc.js} +1 -1
  76. package/.output/public/_nuxt/CkZT4LGq.js +1 -0
  77. package/.output/public/_nuxt/CkrW8sGL.js +1 -0
  78. package/.output/public/_nuxt/Co0UxVsx.js +1 -0
  79. package/.output/public/_nuxt/CqS0zXYQ.js +1 -0
  80. package/.output/public/_nuxt/CskGv_Km.js +1 -0
  81. package/.output/public/_nuxt/{Bk6JUtIo.js → CuvkTsqs.js} +1 -1
  82. package/.output/public/_nuxt/{Db4KMnt8.js → CxMuZEwX.js} +1 -1
  83. package/.output/public/_nuxt/{vIOxcXKR.js → CxSijT71.js} +8 -8
  84. package/.output/public/_nuxt/Cywo6tZI.js +1 -0
  85. package/.output/public/_nuxt/D1reIfpX.js +1 -0
  86. package/.output/public/_nuxt/D1uV2uir.js +1 -0
  87. package/.output/public/_nuxt/{CuxrHsu-.js → D2edadpd.js} +1 -1
  88. package/.output/public/_nuxt/D3cEeQh7.js +1 -0
  89. package/.output/public/_nuxt/D41A2mE2.js +1 -0
  90. package/.output/public/_nuxt/D49P2RhG.js +1 -0
  91. package/.output/public/_nuxt/D867g6Ds.js +1 -0
  92. package/.output/public/_nuxt/DEFWIjWl.js +1 -0
  93. package/.output/public/_nuxt/DFTEBTzZ.js +1 -0
  94. package/.output/public/_nuxt/{DwY7rCd_.js → DHRexj9X.js} +2 -2
  95. package/.output/public/_nuxt/DL4EpgqQ.js +1 -0
  96. package/.output/public/_nuxt/DLHnP6tw.js +1 -0
  97. package/.output/public/_nuxt/DM20WaLq.js +1 -0
  98. package/.output/public/_nuxt/{BYHCP8x7.js → DNAMjHbb.js} +1 -1
  99. package/.output/public/_nuxt/{C6qKcgOY.js → DP8t9VWs.js} +26 -26
  100. package/.output/public/_nuxt/DTR31rjp.js +1 -0
  101. package/.output/public/_nuxt/{CZoEPC_Q.js → DTlSLSo1.js} +3 -3
  102. package/.output/public/_nuxt/{DtjjnHnt.js → DVdnhfXT.js} +1 -1
  103. package/.output/public/_nuxt/DZikIgHK.js +1 -0
  104. package/.output/public/_nuxt/D_YGqvw_.js +1 -0
  105. package/.output/public/_nuxt/D_k1YwXm.js +1 -0
  106. package/.output/public/_nuxt/Daf2MbWG.js +7 -0
  107. package/.output/public/_nuxt/DcJ0GstJ.js +1 -0
  108. package/.output/public/_nuxt/DcYKh6QA.js +1 -0
  109. package/.output/public/_nuxt/DhN3_DYH.js +1 -0
  110. package/.output/public/_nuxt/DhSvBSt3.js +1 -0
  111. package/.output/public/_nuxt/DhlIWT8K.js +1 -0
  112. package/.output/public/_nuxt/DjsqyRqt.js +1 -0
  113. package/.output/public/_nuxt/DpSM97eH.js +1 -0
  114. package/.output/public/_nuxt/DqR9SdeU.js +1 -0
  115. package/.output/public/_nuxt/DqmQtg6Y.js +1 -0
  116. package/.output/public/_nuxt/Dsuag_iW.js +1 -0
  117. package/.output/public/_nuxt/Dtr_0IbE.js +1 -0
  118. package/.output/public/_nuxt/DwrmFEZN.js +1 -0
  119. package/.output/public/_nuxt/DxE8r3r4.js +1 -0
  120. package/.output/public/_nuxt/G_CsVlOR.js +1 -0
  121. package/.output/public/_nuxt/Gyw_2f6x.js +1 -0
  122. package/.output/public/_nuxt/HStC1ZyE.js +1 -0
  123. package/.output/public/_nuxt/Hh9mv0Ek.js +1 -0
  124. package/.output/public/_nuxt/LR0kCjbe.js +1 -0
  125. package/.output/public/_nuxt/MYeLvJGV.js +1 -0
  126. package/.output/public/_nuxt/NKs0EGrh.js +1 -0
  127. package/.output/public/_nuxt/PY5EGujn.js +1 -0
  128. package/.output/public/_nuxt/PamJNol9.js +1 -0
  129. package/.output/public/_nuxt/RlvwEbHv.js +1 -0
  130. package/.output/public/_nuxt/{BKXg-alD.js → TNpdJOlc.js} +1 -1
  131. package/.output/public/_nuxt/TSYrPbLR.js +1 -0
  132. package/.output/public/_nuxt/U-eBrbR4.js +1 -0
  133. package/.output/public/_nuxt/UuqXScSw.js +1 -0
  134. package/.output/public/_nuxt/V04-MrLN.js +1 -0
  135. package/.output/public/_nuxt/X0o5GcBb.js +1 -0
  136. package/.output/public/_nuxt/XQNzmQy9.js +1 -0
  137. package/.output/public/_nuxt/Y59XKprr.js +1 -0
  138. package/.output/public/_nuxt/YZQjZgsH.js +1 -0
  139. package/.output/public/_nuxt/_-TGPiLQ.js +1 -0
  140. package/.output/public/_nuxt/builds/latest.json +1 -1
  141. package/.output/public/_nuxt/builds/meta/d7188f50-b42c-4d2c-afab-066d318f0af8.json +1 -0
  142. package/.output/public/_nuxt/dashboard.ByJQ-Wzh.css +1 -0
  143. package/.output/public/_nuxt/entry.ZJxWCrU6.css +1 -0
  144. package/.output/public/_nuxt/{DhI5cA_n.js → hCeWb_38.js} +1 -1
  145. package/.output/public/_nuxt/{CQqCBrXj.js → hrPTRWjM.js} +1 -1
  146. package/.output/public/_nuxt/jC4pIK1p.js +1 -0
  147. package/.output/public/_nuxt/jTT1R-Vz.js +1 -0
  148. package/.output/public/_nuxt/{BLnYhy_t.js → kkAMoB43.js} +1 -1
  149. package/.output/public/_nuxt/{DzGy77Vr.js → mzM4BGtv.js} +1 -1
  150. package/.output/public/_nuxt/o-s8JBm2.js +1 -0
  151. package/.output/public/_nuxt/pwJTkIQ4.js +1 -0
  152. package/.output/public/_nuxt/{BDyn4ApB.js → rIgg2Arf.js} +3 -3
  153. package/.output/public/_nuxt/subdxgSQ.js +1 -0
  154. package/.output/public/_nuxt/t8B72leH.js +1 -0
  155. package/.output/public/_nuxt/vCFAHwdt.js +1 -0
  156. package/.output/public/_nuxt/z-MP0bB7.js +1 -0
  157. package/.output/server/chunks/build/CodeIcon-CWD5HcV7.mjs +1 -1
  158. package/.output/server/chunks/build/DropdownMenu-BBrV9nXz.mjs +1 -1
  159. package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs → EditorToolbar-B9OwSI5e.mjs} +3 -3
  160. package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs.map → EditorToolbar-B9OwSI5e.mjs.map} +1 -1
  161. package/.output/server/chunks/build/Img-CWLmvN1t.mjs +1 -1
  162. package/.output/server/chunks/build/MDC-Dx0YPDhe.mjs +1 -1
  163. package/.output/server/chunks/build/Select-BB1oLrCD.mjs +1 -1
  164. package/.output/server/chunks/build/SelectMenu-DPssg6zD.mjs +1 -1
  165. package/.output/server/chunks/build/Table-DCwTlhCj.mjs +1 -1
  166. package/.output/server/chunks/build/Tooltip-TRyl6dje.mjs +1 -1
  167. package/.output/server/chunks/build/Tree-DUhXKd8y.mjs +1 -1
  168. package/.output/server/chunks/build/{_id_-DN00UDdO.mjs → _id_-CwBeklIM.mjs} +296 -430
  169. package/.output/server/chunks/build/_id_-CwBeklIM.mjs.map +1 -0
  170. package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs → _name_-D7MtW4Vu.mjs} +2 -2
  171. package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs.map → _name_-D7MtW4Vu.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs → _uuid_-lvG92ein.mjs} +4 -4
  173. package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs.map → _uuid_-lvG92ein.mjs.map} +1 -1
  174. package/.output/server/chunks/build/account-LDZ4TL6x.mjs +513 -0
  175. package/.output/server/chunks/build/account-LDZ4TL6x.mjs.map +1 -0
  176. package/.output/server/chunks/build/app-CGhRZPNT.mjs +252 -0
  177. package/.output/server/chunks/build/app-CGhRZPNT.mjs.map +1 -0
  178. package/.output/server/chunks/build/{chat-CR3JIVEq.mjs → chat-BphuYhvA.mjs} +532 -39
  179. package/.output/server/chunks/build/chat-BphuYhvA.mjs.map +1 -0
  180. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  181. package/.output/server/chunks/build/cookie-C_iulBi6.mjs +1 -1
  182. package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs → dashboard-nDujDyOg.mjs} +55 -16
  183. package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs.map → dashboard-nDujDyOg.mjs.map} +1 -1
  184. package/.output/server/chunks/build/{docs-ChGwOPg5.mjs → docs-Bwucwp0r.mjs} +664 -592
  185. package/.output/server/chunks/build/docs-Bwucwp0r.mjs.map +1 -0
  186. package/.output/server/chunks/build/fetch-BB7Qzkwe.mjs +1 -1
  187. package/.output/server/chunks/build/{hooks-D328DcO6.mjs → hooks-D6PmTth8.mjs} +19 -29
  188. package/.output/server/chunks/build/hooks-D6PmTth8.mjs.map +1 -0
  189. package/.output/server/chunks/build/{index-CAnGTRlu.mjs → index-CJkn2jiM.mjs} +2 -2
  190. package/.output/server/chunks/build/{index-CAnGTRlu.mjs.map → index-CJkn2jiM.mjs.map} +1 -1
  191. package/.output/server/chunks/build/index-CxDxc9fm.mjs +1 -1
  192. package/.output/server/chunks/build/index-Cz9Y6NwN.mjs +723 -0
  193. package/.output/server/chunks/build/index-Cz9Y6NwN.mjs.map +1 -0
  194. package/.output/server/chunks/build/index-hwhuKhuZ.mjs +76 -0
  195. package/.output/server/chunks/build/index-hwhuKhuZ.mjs.map +1 -0
  196. package/.output/server/chunks/build/integrations-D5JWURiJ.mjs +1499 -0
  197. package/.output/server/chunks/build/integrations-D5JWURiJ.mjs.map +1 -0
  198. package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs → library-DxRdgP6X.mjs} +2 -2
  199. package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs.map → library-DxRdgP6X.mjs.map} +1 -1
  200. package/.output/server/chunks/build/{login-DnnElTl2.mjs → login-BmER_VoU.mjs} +2 -2
  201. package/.output/server/chunks/build/{login-DnnElTl2.mjs.map → login-BmER_VoU.mjs.map} +1 -1
  202. package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs +669 -0
  203. package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs.map +1 -0
  204. package/.output/server/chunks/build/server.mjs +65 -34
  205. package/.output/server/chunks/build/server.mjs.map +1 -1
  206. package/.output/server/chunks/build/settings-neokAVE5.mjs +154 -0
  207. package/.output/server/chunks/build/settings-neokAVE5.mjs.map +1 -0
  208. package/.output/server/chunks/build/styles.mjs +2 -2
  209. package/.output/server/chunks/build/{tasks-DnAFqbtt.mjs → tasks-CnpIQNpS.mjs} +27 -37
  210. package/.output/server/chunks/build/tasks-CnpIQNpS.mjs.map +1 -0
  211. package/.output/server/chunks/build/{useAgents-DHEXiFSc.mjs → useAgents-nmbkB9-_.mjs} +5 -26
  212. package/.output/server/chunks/build/useAgents-nmbkB9-_.mjs.map +1 -0
  213. package/.output/server/chunks/build/{view-n2sYa4Zh.mjs → view-mb0ISqfM.mjs} +3 -3
  214. package/.output/server/chunks/build/{view-n2sYa4Zh.mjs.map → view-mb0ISqfM.mjs.map} +1 -1
  215. package/.output/server/chunks/nitro/nitro.mjs +1021 -867
  216. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  217. package/.output/server/chunks/routes/_ws/chat.mjs +39 -5
  218. package/.output/server/chunks/routes/_ws/chat.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/index.get.mjs +17 -2
  220. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/index.get3.mjs +21 -3
  222. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  223. package/.output/server/chunks/routes/api/index.get4.mjs +10 -9
  224. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  225. package/.output/server/chunks/routes/api/index.get9.mjs +10 -8
  226. package/.output/server/chunks/routes/api/index.get9.mjs.map +1 -1
  227. package/.output/server/chunks/routes/api/memory/search.get.mjs +10 -5
  228. package/.output/server/chunks/routes/api/memory/search.get.mjs.map +1 -1
  229. package/.output/server/chunks/routes/renderer.mjs +1 -1
  230. package/.output/server/index.mjs +1 -1
  231. package/.output/server/package.json +1 -1
  232. package/Claude/skills/_lib/api.py +3 -2
  233. package/app/components/AssistantPanel.client.vue +16 -314
  234. package/app/components/agents/AgentCard.vue +111 -0
  235. package/app/components/agents/AgentInfoCard.vue +54 -0
  236. package/app/components/agents/AgentRunHistory.vue +103 -0
  237. package/app/components/agents/AgentRunModal.vue +1 -24
  238. package/app/components/agents/AgentStatsCards.vue +1 -26
  239. package/app/components/assistant/AssistantChat.vue +156 -0
  240. package/app/components/assistant/AssistantTerminal.client.vue +178 -0
  241. package/app/components/chat/ChatInput.vue +133 -5
  242. package/app/components/chat/ConversationList.vue +2 -12
  243. package/app/components/chat/MessageBubble.vue +188 -6
  244. package/app/components/files/FileTree.vue +23 -202
  245. package/app/components/files/FileTreeModals.vue +226 -0
  246. package/app/components/hooks/HookStatsCards.vue +1 -6
  247. package/app/components/hooks/ToolBreakdownTable.vue +1 -6
  248. package/app/components/search/DashboardSearch.vue +38 -1
  249. package/app/components/tasks/TaskCard.vue +2 -7
  250. package/app/components/tasks/TaskDetail.vue +4 -9
  251. package/app/composables/useAttachments.ts +196 -0
  252. package/app/composables/useChat.ts +14 -2
  253. package/app/composables/useSearch.ts +21 -11
  254. package/app/layouts/dashboard.vue +1 -1
  255. package/app/pages/agents/[id].vue +6 -197
  256. package/app/pages/agents/index.vue +9 -142
  257. package/app/pages/chat.vue +4 -2
  258. package/app/pages/settings/account.vue +243 -0
  259. package/app/pages/settings/app.vue +230 -0
  260. package/app/pages/settings/index.vue +12 -0
  261. package/app/pages/settings/integrations.vue +794 -0
  262. package/app/pages/settings/manage-secrets.vue +295 -0
  263. package/app/pages/settings.vue +20 -1581
  264. package/dist/cli/index.js +26 -2
  265. package/package.json +1 -1
  266. package/server/api/agents/index.get.ts +20 -1
  267. package/server/api/conversations/index.get.ts +23 -5
  268. package/server/api/documents/index.get.ts +11 -9
  269. package/server/api/memory/search.get.ts +11 -6
  270. package/server/api/tasks/index.get.ts +11 -9
  271. package/server/bridge/adapters/imessage.ts +9 -2
  272. package/server/drizzle/migrations/0016_full_text_search.sql +127 -0
  273. package/server/drizzle/migrations/meta/_journal.json +7 -0
  274. package/server/routes/_ws/chat.ts +61 -7
  275. package/server/utils/chat-session-manager.ts +20 -2
  276. package/shared/types/index.ts +34 -2
  277. package/shared/utils/formatting.ts +105 -0
  278. package/.output/public/_nuxt/0NJ3PaRM.js +0 -1
  279. package/.output/public/_nuxt/10_wwHSz.js +0 -1
  280. package/.output/public/_nuxt/1zUTf4AP.js +0 -1
  281. package/.output/public/_nuxt/2nOqGUPr.js +0 -1
  282. package/.output/public/_nuxt/3jQMk_5H.js +0 -1
  283. package/.output/public/_nuxt/6boMs_nF.js +0 -1
  284. package/.output/public/_nuxt/8q5NepGW.js +0 -9
  285. package/.output/public/_nuxt/B93pdGAW.js +0 -1
  286. package/.output/public/_nuxt/BA_pRWwX.js +0 -1
  287. package/.output/public/_nuxt/BGgwYWjH.js +0 -1
  288. package/.output/public/_nuxt/BH0QDWEm.js +0 -1
  289. package/.output/public/_nuxt/BIXrSYwR.js +0 -1
  290. package/.output/public/_nuxt/BK8S2ony.js +0 -1
  291. package/.output/public/_nuxt/BR8bKz8h.js +0 -1
  292. package/.output/public/_nuxt/BUghTae1.js +0 -1
  293. package/.output/public/_nuxt/BXuWCWsJ.js +0 -1
  294. package/.output/public/_nuxt/BZrSPX0S.js +0 -1
  295. package/.output/public/_nuxt/B_wilgcd.js +0 -1
  296. package/.output/public/_nuxt/BaZwjF8o.js +0 -1
  297. package/.output/public/_nuxt/Bciqk4dX.js +0 -1
  298. package/.output/public/_nuxt/Beom-INj.js +0 -1
  299. package/.output/public/_nuxt/BfcLZ_fC.js +0 -1
  300. package/.output/public/_nuxt/BkfI94R8.js +0 -1
  301. package/.output/public/_nuxt/BmOtR1wX.js +0 -1
  302. package/.output/public/_nuxt/BmVLxnDU.js +0 -1
  303. package/.output/public/_nuxt/BtHQ1T0f.js +0 -1
  304. package/.output/public/_nuxt/ByYh0uRg.js +0 -1
  305. package/.output/public/_nuxt/C27WoGNZ.js +0 -1
  306. package/.output/public/_nuxt/C2FxZbO_.js +0 -1
  307. package/.output/public/_nuxt/C2vq6Te8.js +0 -1
  308. package/.output/public/_nuxt/C39dQ88F.js +0 -1
  309. package/.output/public/_nuxt/C3NST0BU.js +0 -1
  310. package/.output/public/_nuxt/C4mwL7SE.js +0 -7
  311. package/.output/public/_nuxt/C5R5QaCA.js +0 -1
  312. package/.output/public/_nuxt/C71_a1IX.js +0 -1
  313. package/.output/public/_nuxt/C9WIgRRL.js +0 -1
  314. package/.output/public/_nuxt/CBTkrk2M.js +0 -1
  315. package/.output/public/_nuxt/CEnSeCqn.js +0 -1
  316. package/.output/public/_nuxt/CKxSHyww.js +0 -1
  317. package/.output/public/_nuxt/CSKJ-Ahh.js +0 -1
  318. package/.output/public/_nuxt/CTCcEJU3.js +0 -1
  319. package/.output/public/_nuxt/CVFwOzbl.js +0 -1
  320. package/.output/public/_nuxt/CVdCqaby.js +0 -1
  321. package/.output/public/_nuxt/CWyMCJQH.js +0 -1
  322. package/.output/public/_nuxt/CY-cjAwJ.js +0 -1
  323. package/.output/public/_nuxt/CYPO5o_C.js +0 -1
  324. package/.output/public/_nuxt/CZRnNmU8.js +0 -1
  325. package/.output/public/_nuxt/CZVzFlpI.js +0 -1
  326. package/.output/public/_nuxt/Cc-2ziaZ.js +0 -1
  327. package/.output/public/_nuxt/ChcO9s3o.js +0 -1
  328. package/.output/public/_nuxt/Cl-LOSDV.js +0 -1
  329. package/.output/public/_nuxt/CobqYwkp.js +0 -1
  330. package/.output/public/_nuxt/CqNwHCpo.js +0 -1
  331. package/.output/public/_nuxt/CwPdIZ9J.js +0 -1
  332. package/.output/public/_nuxt/D0ifH682.js +0 -1
  333. package/.output/public/_nuxt/D3AZaldL.js +0 -1
  334. package/.output/public/_nuxt/D4UJwDQJ.js +0 -1
  335. package/.output/public/_nuxt/D5jZq8b3.js +0 -1
  336. package/.output/public/_nuxt/D5q8SnqE.js +0 -1
  337. package/.output/public/_nuxt/D8lwrAYS.js +0 -1
  338. package/.output/public/_nuxt/D9nmzBAw.js +0 -1
  339. package/.output/public/_nuxt/DC4idAGt.js +0 -1
  340. package/.output/public/_nuxt/DH4YkDAi.js +0 -1
  341. package/.output/public/_nuxt/DJTCT0bl.js +0 -1
  342. package/.output/public/_nuxt/DNP5E1bC.js +0 -39
  343. package/.output/public/_nuxt/DO9SFIh1.js +0 -1
  344. package/.output/public/_nuxt/DPklr_tJ.js +0 -2
  345. package/.output/public/_nuxt/DQM4eBdt.js +0 -1
  346. package/.output/public/_nuxt/DQh6I9z9.js +0 -1
  347. package/.output/public/_nuxt/DS2wStH1.js +0 -1
  348. package/.output/public/_nuxt/DTAStixR.js +0 -1
  349. package/.output/public/_nuxt/DTGenhcA.js +0 -1
  350. package/.output/public/_nuxt/DUAAXJ6Q.js +0 -1
  351. package/.output/public/_nuxt/DUVzIl3o.js +0 -1
  352. package/.output/public/_nuxt/DXdwpJ-I.js +0 -16
  353. package/.output/public/_nuxt/DY3uK7wM.js +0 -1
  354. package/.output/public/_nuxt/DYbZBZet.js +0 -1
  355. package/.output/public/_nuxt/D_4LPm1U.js +0 -1
  356. package/.output/public/_nuxt/DcJbYLTp.js +0 -1
  357. package/.output/public/_nuxt/DfF81NlA.js +0 -1
  358. package/.output/public/_nuxt/DhuOKJda.js +0 -1
  359. package/.output/public/_nuxt/Di-Nc75e.js +0 -1
  360. package/.output/public/_nuxt/Djs0Tlpa.js +0 -1
  361. package/.output/public/_nuxt/DmmdPt_5.js +0 -1
  362. package/.output/public/_nuxt/Dn5a-guE.js +0 -1
  363. package/.output/public/_nuxt/DuvzM-P1.js +0 -1
  364. package/.output/public/_nuxt/Dya5oK8u.js +0 -1
  365. package/.output/public/_nuxt/DzA58_Lm.js +0 -1
  366. package/.output/public/_nuxt/E3rXPwU8.js +0 -1
  367. package/.output/public/_nuxt/GtEM7xVU.js +0 -1
  368. package/.output/public/_nuxt/H6JbrRBU.js +0 -1
  369. package/.output/public/_nuxt/ILEvizzp.js +0 -1
  370. package/.output/public/_nuxt/JbHa4oXq.js +0 -1
  371. package/.output/public/_nuxt/Kw0zy3FG.js +0 -1
  372. package/.output/public/_nuxt/N5XtbYVD.js +0 -1
  373. package/.output/public/_nuxt/SrncdpaW.js +0 -1
  374. package/.output/public/_nuxt/U1MWjQMi.js +0 -1
  375. package/.output/public/_nuxt/Um1vPiAz.js +0 -1
  376. package/.output/public/_nuxt/XCjS70z4.js +0 -1
  377. package/.output/public/_nuxt/YX8avsvq.js +0 -2
  378. package/.output/public/_nuxt/_cy8R3nk.js +0 -1
  379. package/.output/public/_nuxt/apYB9dr5.js +0 -1
  380. package/.output/public/_nuxt/builds/meta/a892969f-e07d-4f44-8d7e-57a4b7f33d94.json +0 -1
  381. package/.output/public/_nuxt/dashboard.BxCOkJwt.css +0 -1
  382. package/.output/public/_nuxt/entry.NKPfH2kE.css +0 -1
  383. package/.output/public/_nuxt/g5MjDvm5.js +0 -1
  384. package/.output/public/_nuxt/nnQqD5pb.js +0 -1
  385. package/.output/public/_nuxt/vScW1Zgm.js +0 -1
  386. package/.output/public/_nuxt/wO6z2ugJ.js +0 -1
  387. package/.output/public/_nuxt/x6FRJ5ac.js +0 -1
  388. package/.output/public/_nuxt/zq-a1TeT.js +0 -1
  389. package/.output/server/chunks/build/_id_-DN00UDdO.mjs.map +0 -1
  390. package/.output/server/chunks/build/chat-CR3JIVEq.mjs.map +0 -1
  391. package/.output/server/chunks/build/docs-ChGwOPg5.mjs.map +0 -1
  392. package/.output/server/chunks/build/hooks-D328DcO6.mjs.map +0 -1
  393. package/.output/server/chunks/build/index-C9PuieXh.mjs +0 -820
  394. package/.output/server/chunks/build/index-C9PuieXh.mjs.map +0 -1
  395. package/.output/server/chunks/build/settings-B2KXoGcz.mjs +0 -3232
  396. package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +0 -1
  397. package/.output/server/chunks/build/tasks-DnAFqbtt.mjs.map +0 -1
  398. package/.output/server/chunks/build/useAgents-DHEXiFSc.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import type { ChatMessage, ChatContentBlock, MessageSource } from '~~/shared/types'
2
+ import type { ChatMessage, ChatContentBlock, ChatImageBlock, ChatDocumentBlock, MessageSource, CodeLanguage } from '~~/shared/types'
3
3
 
4
4
  defineProps<{
5
5
  message: ChatMessage
@@ -12,6 +12,14 @@ function getTextContent(blocks: ChatContentBlock[]): string {
12
12
  .join('\n')
13
13
  }
14
14
 
15
+ function getImageBlocks(blocks: ChatContentBlock[]): ChatImageBlock[] {
16
+ return blocks.filter((b): b is ChatImageBlock => b.type === 'image')
17
+ }
18
+
19
+ function getDocumentBlocks(blocks: ChatContentBlock[]): ChatDocumentBlock[] {
20
+ return blocks.filter((b): b is ChatDocumentBlock => b.type === 'document')
21
+ }
22
+
15
23
  function getToolPairs(blocks: ChatContentBlock[]) {
16
24
  const tools: { name: string, id: string, result?: string, isError?: boolean }[] = []
17
25
  for (const block of blocks) {
@@ -28,6 +36,99 @@ function getToolPairs(blocks: ChatContentBlock[]) {
28
36
  return tools
29
37
  }
30
38
 
39
+ function getDocIcon(doc: ChatDocumentBlock): string {
40
+ if (doc.source.media_type === 'application/pdf') return 'i-lucide-file-text'
41
+ return 'i-lucide-file-code'
42
+ }
43
+
44
+ // Image preview
45
+ const previewImage = ref<ChatImageBlock | null>(null)
46
+ const previewOpen = computed({
47
+ get: () => previewImage.value !== null,
48
+ set: (v) => { if (!v) previewImage.value = null }
49
+ })
50
+
51
+ // Code/document preview
52
+ const previewDoc = ref<ChatDocumentBlock | null>(null)
53
+ const codePreviewOpen = computed({
54
+ get: () => previewDoc.value !== null,
55
+ set: (v) => { if (!v) previewDoc.value = null }
56
+ })
57
+
58
+ const codePreviewContent = computed(() => previewDoc.value?.source.data || '')
59
+
60
+ const extToLang: Record<string, CodeLanguage> = {
61
+ md: 'markdown',
62
+ js: 'javascript',
63
+ mjs: 'javascript',
64
+ cjs: 'javascript',
65
+ jsx: 'javascript',
66
+ ts: 'typescript',
67
+ tsx: 'typescript',
68
+ mts: 'typescript',
69
+ json: 'json',
70
+ html: 'html',
71
+ htm: 'html',
72
+ css: 'css',
73
+ scss: 'css',
74
+ sass: 'css',
75
+ less: 'css',
76
+ vue: 'vue',
77
+ svelte: 'html',
78
+ py: 'python',
79
+ sql: 'sql',
80
+ yaml: 'yaml',
81
+ yml: 'yaml',
82
+ sh: 'bash',
83
+ bash: 'bash',
84
+ zsh: 'bash',
85
+ fish: 'bash',
86
+ go: 'go',
87
+ rs: 'rust',
88
+ dockerfile: 'dockerfile',
89
+ java: 'java',
90
+ kt: 'java',
91
+ c: 'cpp',
92
+ cpp: 'cpp',
93
+ h: 'cpp',
94
+ hpp: 'cpp',
95
+ cs: 'cpp',
96
+ xml: 'xml',
97
+ graphql: 'plaintext',
98
+ gql: 'plaintext',
99
+ toml: 'plaintext',
100
+ ini: 'plaintext',
101
+ csv: 'plaintext',
102
+ txt: 'plaintext',
103
+ log: 'plaintext',
104
+ env: 'plaintext',
105
+ prisma: 'plaintext',
106
+ proto: 'plaintext'
107
+ }
108
+
109
+ const codePreviewLang = computed<CodeLanguage>(() => {
110
+ if (!previewDoc.value?.title) return 'plaintext'
111
+ const ext = previewDoc.value.title.split('.').pop()?.toLowerCase() || ''
112
+ return extToLang[ext] || 'plaintext'
113
+ })
114
+
115
+ function handleDocClick(doc: ChatDocumentBlock) {
116
+ if (doc.source.media_type === 'application/pdf') {
117
+ // Open PDF in new tab
118
+ const byteChars = atob(doc.source.data)
119
+ const bytes = new Uint8Array(byteChars.length)
120
+ for (let i = 0; i < byteChars.length; i++)
121
+ bytes[i] = byteChars.charCodeAt(i)
122
+ const blob = new Blob([bytes], { type: 'application/pdf' })
123
+ const url = URL.createObjectURL(blob)
124
+ window.open(url, '_blank')
125
+ setTimeout(() => URL.revokeObjectURL(url), 10000)
126
+ } else {
127
+ // Open text file in code viewer modal
128
+ previewDoc.value = doc
129
+ }
130
+ }
131
+
31
132
  const sourceIconMap: Record<string, string> = {
32
133
  telegram: 'i-simple-icons-telegram',
33
134
  discord: 'i-simple-icons-discord',
@@ -76,11 +177,52 @@ function formatTime(date: Date | string | undefined): string {
76
177
  : 'bg-muted'"
77
178
  >
78
179
  <!-- User message -->
79
- <div
80
- v-if="message.role === 'user'"
81
- class="text-sm whitespace-pre-wrap"
82
- >
83
- {{ getTextContent(message.content) }}
180
+ <div v-if="message.role === 'user'">
181
+ <!-- Image attachments -->
182
+ <div
183
+ v-if="getImageBlocks(message.content).length"
184
+ class="flex flex-wrap gap-2 mb-2"
185
+ >
186
+ <img
187
+ v-for="(img, i) in getImageBlocks(message.content)"
188
+ :key="i"
189
+ :src="`data:${img.source.media_type};base64,${img.source.data}`"
190
+ class="max-w-48 max-h-48 rounded-lg object-contain cursor-pointer hover:opacity-80 transition-opacity"
191
+ @click="previewImage = img"
192
+ >
193
+ </div>
194
+
195
+ <!-- Document attachments -->
196
+ <div
197
+ v-if="getDocumentBlocks(message.content).length"
198
+ class="flex flex-wrap gap-2 mb-2"
199
+ >
200
+ <button
201
+ v-for="(doc, i) in getDocumentBlocks(message.content)"
202
+ :key="i"
203
+ class="flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg bg-elevated/50 border border-default text-xs hover:bg-elevated transition-colors cursor-pointer"
204
+ @click="handleDocClick(doc)"
205
+ >
206
+ <UIcon
207
+ :name="getDocIcon(doc)"
208
+ class="size-3.5 text-dimmed shrink-0"
209
+ />
210
+ <span class="truncate max-w-32">{{ doc.title || 'Document' }}</span>
211
+ <UIcon
212
+ v-if="doc.source.media_type === 'application/pdf'"
213
+ name="i-lucide-external-link"
214
+ class="size-3 text-dimmed shrink-0"
215
+ />
216
+ </button>
217
+ </div>
218
+
219
+ <!-- Text content -->
220
+ <div
221
+ v-if="getTextContent(message.content)"
222
+ class="text-sm whitespace-pre-wrap"
223
+ >
224
+ {{ getTextContent(message.content) }}
225
+ </div>
84
226
  </div>
85
227
 
86
228
  <!-- Assistant message -->
@@ -121,5 +263,45 @@ function formatTime(date: Date | string | undefined): string {
121
263
  {{ formatTime(message.createdAt) }}
122
264
  </div>
123
265
  </div>
266
+
267
+ <!-- Image preview modal -->
268
+ <UModal
269
+ v-model:open="previewOpen"
270
+ >
271
+ <template #content>
272
+ <div class="flex items-center justify-center">
273
+ <img
274
+ v-if="previewImage"
275
+ :src="`data:${previewImage.source.media_type};base64,${previewImage.source.data}`"
276
+ class="max-w-full max-h-[80vh] object-contain rounded-lg"
277
+ >
278
+ </div>
279
+ </template>
280
+ </UModal>
281
+
282
+ <!-- Code preview modal -->
283
+ <UModal
284
+ v-model:open="codePreviewOpen"
285
+ >
286
+ <template #header>
287
+ <div class="flex items-center gap-2">
288
+ <UIcon
289
+ name="i-lucide-file-code"
290
+ class="size-4 text-dimmed"
291
+ />
292
+ <span class="text-sm font-medium truncate">{{ previewDoc?.title || 'File' }}</span>
293
+ </div>
294
+ </template>
295
+ <template #body>
296
+ <div class="h-[60vh] overflow-hidden rounded-lg border border-default">
297
+ <EditorCodeEditor
298
+ v-if="previewDoc"
299
+ :model-value="codePreviewContent"
300
+ :language="codePreviewLang"
301
+ read-only
302
+ />
303
+ </div>
304
+ </template>
305
+ </UModal>
124
306
  </div>
125
307
  </template>
@@ -68,40 +68,29 @@ const showNewFileModal = ref(false)
68
68
  const showNewFolderModal = ref(false)
69
69
  const showRenameModal = ref(false)
70
70
  const showDeleteConfirm = ref(false)
71
- const newItemName = ref('')
72
71
 
73
72
  const contextMenuItems = computed(() => [
74
73
  [{
75
74
  label: 'New File',
76
75
  icon: 'i-lucide-file-plus',
77
- onSelect: () => {
78
- newItemName.value = ''
79
- showNewFileModal.value = true
80
- }
76
+ onSelect: () => { showNewFileModal.value = true }
81
77
  }, {
82
78
  label: 'New Folder',
83
79
  icon: 'i-lucide-folder-plus',
84
- onSelect: () => {
85
- newItemName.value = ''
86
- showNewFolderModal.value = true
87
- }
80
+ onSelect: () => { showNewFolderModal.value = true }
88
81
  }],
89
82
  [{
90
83
  label: 'Rename',
91
84
  icon: 'i-lucide-pencil',
92
85
  onSelect: () => {
93
- if (contextMenuTarget.value) {
94
- newItemName.value = contextMenuTarget.value.label
86
+ if (contextMenuTarget.value)
95
87
  showRenameModal.value = true
96
- }
97
88
  }
98
89
  }, {
99
90
  label: 'Delete',
100
91
  icon: 'i-lucide-trash-2',
101
92
  color: 'error' as const,
102
- onSelect: () => {
103
- showDeleteConfirm.value = true
104
- }
93
+ onSelect: () => { showDeleteConfirm.value = true }
105
94
  }]
106
95
  ])
107
96
 
@@ -112,18 +101,14 @@ function handleSelect(item: TreeItem) {
112
101
  }
113
102
  }
114
103
 
115
- async function handleCreateFile() {
116
- if (!newItemName.value.trim()) return
117
-
104
+ async function handleCreateFile(name: string) {
118
105
  const parentPath = contextMenuTarget.value?.type === 'directory'
119
106
  ? contextMenuTarget.value.path
120
107
  : '/'
121
108
 
122
- // Add .md extension if not present
123
- let filename = newItemName.value.trim()
124
- if (!filename.includes('.')) {
109
+ let filename = name
110
+ if (!filename.includes('.'))
125
111
  filename += '.md'
126
- }
127
112
 
128
113
  try {
129
114
  const path = await createFile(parentPath, filename)
@@ -132,39 +117,28 @@ async function handleCreateFile() {
132
117
  } catch {
133
118
  // Error handled in composable
134
119
  }
135
-
136
- showNewFileModal.value = false
137
- newItemName.value = ''
138
120
  }
139
121
 
140
- async function handleCreateFolder() {
141
- if (!newItemName.value.trim()) return
142
-
122
+ async function handleCreateFolder(name: string) {
143
123
  const parentPath = contextMenuTarget.value?.type === 'directory'
144
124
  ? contextMenuTarget.value.path
145
125
  : '/'
146
126
 
147
127
  try {
148
- await createFolder(parentPath, newItemName.value.trim())
128
+ await createFolder(parentPath, name)
149
129
  } catch {
150
130
  // Error handled in composable
151
131
  }
152
-
153
- showNewFolderModal.value = false
154
- newItemName.value = ''
155
132
  }
156
133
 
157
- async function handleRename() {
158
- if (!contextMenuTarget.value || !newItemName.value.trim()) return
134
+ async function handleRename(name: string) {
135
+ if (!contextMenuTarget.value) return
159
136
 
160
137
  try {
161
- await renameItem(contextMenuTarget.value.path, newItemName.value.trim())
138
+ await renameItem(contextMenuTarget.value.path, name)
162
139
  } catch {
163
140
  // Error handled in composable
164
141
  }
165
-
166
- showRenameModal.value = false
167
- newItemName.value = ''
168
142
  }
169
143
 
170
144
  async function handleDelete() {
@@ -175,8 +149,6 @@ async function handleDelete() {
175
149
  } catch {
176
150
  // Error handled in composable
177
151
  }
178
-
179
- showDeleteConfirm.value = false
180
152
  }
181
153
 
182
154
  onMounted(() => {
@@ -270,167 +242,16 @@ onMounted(() => {
270
242
  </UTree>
271
243
  </UContextMenu>
272
244
 
273
- <!-- New File Modal -->
274
- <UModal v-model:open="showNewFileModal">
275
- <template #content>
276
- <UCard>
277
- <template #header>
278
- <div class="flex items-center gap-2">
279
- <UIcon
280
- name="i-lucide-file-plus"
281
- class="size-5"
282
- />
283
- <span class="font-semibold">New File</span>
284
- </div>
285
- </template>
286
-
287
- <UInput
288
- v-model="newItemName"
289
- placeholder="filename.md"
290
- autofocus
291
- @keyup.enter="handleCreateFile"
292
- />
293
-
294
- <template #footer>
295
- <div class="flex justify-end gap-2">
296
- <UButton
297
- color="neutral"
298
- variant="ghost"
299
- @click="showNewFileModal = false"
300
- >
301
- Cancel
302
- </UButton>
303
- <UButton @click="handleCreateFile">
304
- Create
305
- </UButton>
306
- </div>
307
- </template>
308
- </UCard>
309
- </template>
310
- </UModal>
311
-
312
- <!-- New Folder Modal -->
313
- <UModal v-model:open="showNewFolderModal">
314
- <template #content>
315
- <UCard>
316
- <template #header>
317
- <div class="flex items-center gap-2">
318
- <UIcon
319
- name="i-lucide-folder-plus"
320
- class="size-5"
321
- />
322
- <span class="font-semibold">New Folder</span>
323
- </div>
324
- </template>
325
-
326
- <UInput
327
- v-model="newItemName"
328
- placeholder="folder-name"
329
- autofocus
330
- @keyup.enter="handleCreateFolder"
331
- />
332
-
333
- <template #footer>
334
- <div class="flex justify-end gap-2">
335
- <UButton
336
- color="neutral"
337
- variant="ghost"
338
- @click="showNewFolderModal = false"
339
- >
340
- Cancel
341
- </UButton>
342
- <UButton @click="handleCreateFolder">
343
- Create
344
- </UButton>
345
- </div>
346
- </template>
347
- </UCard>
348
- </template>
349
- </UModal>
350
-
351
- <!-- Rename Modal -->
352
- <UModal v-model:open="showRenameModal">
353
- <template #content>
354
- <UCard>
355
- <template #header>
356
- <div class="flex items-center gap-2">
357
- <UIcon
358
- name="i-lucide-pencil"
359
- class="size-5"
360
- />
361
- <span class="font-semibold">Rename</span>
362
- </div>
363
- </template>
364
-
365
- <UInput
366
- v-model="newItemName"
367
- placeholder="new-name"
368
- autofocus
369
- @keyup.enter="handleRename"
370
- />
371
-
372
- <template #footer>
373
- <div class="flex justify-end gap-2">
374
- <UButton
375
- color="neutral"
376
- variant="ghost"
377
- @click="showRenameModal = false"
378
- >
379
- Cancel
380
- </UButton>
381
- <UButton @click="handleRename">
382
- Rename
383
- </UButton>
384
- </div>
385
- </template>
386
- </UCard>
387
- </template>
388
- </UModal>
389
-
390
- <!-- Delete Confirmation -->
391
- <UModal v-model:open="showDeleteConfirm">
392
- <template #content>
393
- <UCard>
394
- <template #header>
395
- <div class="flex items-center gap-2 text-error">
396
- <UIcon
397
- name="i-lucide-trash-2"
398
- class="size-5"
399
- />
400
- <span class="font-semibold">Delete</span>
401
- </div>
402
- </template>
403
-
404
- <p>
405
- Are you sure you want to delete
406
- <strong>{{ contextMenuTarget?.label }}</strong>?
407
- </p>
408
- <p
409
- v-if="contextMenuTarget?.type === 'directory'"
410
- class="text-sm text-dimmed mt-1"
411
- >
412
- This will delete all files and folders inside.
413
- </p>
414
-
415
- <template #footer>
416
- <div class="flex justify-end gap-2">
417
- <UButton
418
- color="neutral"
419
- variant="ghost"
420
- @click="showDeleteConfirm = false"
421
- >
422
- Cancel
423
- </UButton>
424
- <UButton
425
- color="error"
426
- @click="handleDelete"
427
- >
428
- Delete
429
- </UButton>
430
- </div>
431
- </template>
432
- </UCard>
433
- </template>
434
- </UModal>
245
+ <FilesFileTreeModals
246
+ v-model:show-new-file="showNewFileModal"
247
+ v-model:show-new-folder="showNewFolderModal"
248
+ v-model:show-rename="showRenameModal"
249
+ v-model:show-delete="showDeleteConfirm"
250
+ :context-target="contextMenuTarget"
251
+ @create-file="handleCreateFile"
252
+ @create-folder="handleCreateFolder"
253
+ @rename="handleRename"
254
+ @delete="handleDelete"
255
+ />
435
256
  </div>
436
257
  </template>