cognova 0.2.8 → 0.2.10

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 (199) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{CH_jROT9.js → 0NJ3PaRM.js} +1 -1
  3. package/.output/public/_nuxt/{C075hYlX.js → 0yk-pS3R.js} +2 -2
  4. package/.output/public/_nuxt/{CVYcsqmL.js → 10_wwHSz.js} +1 -1
  5. package/.output/public/_nuxt/{BUC36BHp.js → 1zUTf4AP.js} +1 -1
  6. package/.output/public/_nuxt/{njnzCNrH.js → 2dNDtTiv.js} +3 -3
  7. package/.output/public/_nuxt/{B8TQvzYX.js → 2nOqGUPr.js} +1 -1
  8. package/.output/public/_nuxt/{ijmD2cEW.js → 3jQMk_5H.js} +1 -1
  9. package/.output/public/_nuxt/{D4X6ONPF.js → 4K03TkGA.js} +1 -1
  10. package/.output/public/_nuxt/{C3tximD1.js → 6boMs_nF.js} +1 -1
  11. package/.output/public/_nuxt/{Drxf7nJz.js → 7oCGSglN.js} +1 -1
  12. package/.output/public/_nuxt/{Dt5mOzXj.js → 8q5NepGW.js} +1 -1
  13. package/.output/public/_nuxt/{GYf-vnR6.js → B93pdGAW.js} +1 -1
  14. package/.output/public/_nuxt/{BZBNJD7U.js → BA_pRWwX.js} +1 -1
  15. package/.output/public/_nuxt/{eE8TtXgC.js → BDyn4ApB.js} +3 -3
  16. package/.output/public/_nuxt/{0dqQoCHY.js → BGgwYWjH.js} +1 -1
  17. package/.output/public/_nuxt/{BrOKokPO.js → BH0QDWEm.js} +1 -1
  18. package/.output/public/_nuxt/{B5SnZL2l.js → BHtY0l0l.js} +1 -1
  19. package/.output/public/_nuxt/{ImPsUDiH.js → BIXrSYwR.js} +1 -1
  20. package/.output/public/_nuxt/BK8S2ony.js +1 -0
  21. package/.output/public/_nuxt/{Bkc1Hpcf.js → BKXg-alD.js} +1 -1
  22. package/.output/public/_nuxt/{BahXyh-A.js → BLnYhy_t.js} +1 -1
  23. package/.output/public/_nuxt/{Bhhg7oSf.js → BR8bKz8h.js} +1 -1
  24. package/.output/public/_nuxt/{D2kQkOaG.js → BS2ZNXI1.js} +1 -1
  25. package/.output/public/_nuxt/{BLm0UviR.js → BUghTae1.js} +1 -1
  26. package/.output/public/_nuxt/{D4_89MZm.js → BXuWCWsJ.js} +1 -1
  27. package/.output/public/_nuxt/{LQNRVThr.js → BYHCP8x7.js} +1 -1
  28. package/.output/public/_nuxt/{BYtVdUIW.js → BZrSPX0S.js} +1 -1
  29. package/.output/public/_nuxt/{U3f6dy8i.js → B_wilgcd.js} +1 -1
  30. package/.output/public/_nuxt/BaZwjF8o.js +1 -0
  31. package/.output/public/_nuxt/{BefOhWHD.js → Bciqk4dX.js} +1 -1
  32. package/.output/public/_nuxt/{CewcVxDS.js → Beom-INj.js} +1 -1
  33. package/.output/public/_nuxt/{BlsIfvSf.js → BfcLZ_fC.js} +1 -1
  34. package/.output/public/_nuxt/{dB7G4iIC.js → Bk6JUtIo.js} +1 -1
  35. package/.output/public/_nuxt/BkfI94R8.js +1 -0
  36. package/.output/public/_nuxt/{DqzomZoo.js → BmOtR1wX.js} +1 -1
  37. package/.output/public/_nuxt/{4XnyUc7C.js → BmVLxnDU.js} +1 -1
  38. package/.output/public/_nuxt/{DtJnWtpL.js → BtHQ1T0f.js} +1 -1
  39. package/.output/public/_nuxt/{DcbbfwCe.js → ByYh0uRg.js} +1 -1
  40. package/.output/public/_nuxt/{CbvNJVrk.js → C27WoGNZ.js} +1 -1
  41. package/.output/public/_nuxt/{CY7f553E.js → C2FxZbO_.js} +1 -1
  42. package/.output/public/_nuxt/{zO9MgHj2.js → C2vq6Te8.js} +1 -1
  43. package/.output/public/_nuxt/{BXtZVbmx.js → C39dQ88F.js} +1 -1
  44. package/.output/public/_nuxt/{DmDPSvxi.js → C3NST0BU.js} +1 -1
  45. package/.output/public/_nuxt/{nHSiDk8N.js → C4mwL7SE.js} +1 -1
  46. package/.output/public/_nuxt/{BBDxhFYY.js → C5R5QaCA.js} +1 -1
  47. package/.output/public/_nuxt/{D79lbuWG.js → C6qKcgOY.js} +1 -1
  48. package/.output/public/_nuxt/{C-HCArYP.js → C71_a1IX.js} +1 -1
  49. package/.output/public/_nuxt/{CSjOaBKu.js → C9WIgRRL.js} +1 -1
  50. package/.output/public/_nuxt/{DmOS3vFH.js → CBTkrk2M.js} +1 -1
  51. package/.output/public/_nuxt/CEnSeCqn.js +1 -0
  52. package/.output/public/_nuxt/{CAfyXyeo.js → CKxSHyww.js} +1 -1
  53. package/.output/public/_nuxt/{D4Cizi4y.js → CLfF6dSn.js} +1 -1
  54. package/.output/public/_nuxt/{C7qhmmZh.js → CPutXj8l.js} +1 -1
  55. package/.output/public/_nuxt/{BCCYopTB.js → CQqCBrXj.js} +1 -1
  56. package/.output/public/_nuxt/{D-Ge96eV.js → CSKJ-Ahh.js} +1 -1
  57. package/.output/public/_nuxt/{B2Xfh7am.js → CTCcEJU3.js} +1 -1
  58. package/.output/public/_nuxt/{BnJ-6YDw.js → CVFwOzbl.js} +1 -1
  59. package/.output/public/_nuxt/{C21BjagS.js → CVdCqaby.js} +1 -1
  60. package/.output/public/_nuxt/{2QHXgMyi.js → CVqlefTY.js} +1 -1
  61. package/.output/public/_nuxt/CWyMCJQH.js +1 -0
  62. package/.output/public/_nuxt/{B6-U3KqJ.js → CY-QVcA5.js} +2 -2
  63. package/.output/public/_nuxt/{Cr0NfhPB.js → CY-cjAwJ.js} +1 -1
  64. package/.output/public/_nuxt/{Bwn-CRYH.js → CYPO5o_C.js} +1 -1
  65. package/.output/public/_nuxt/{B-AlyT2D.js → CZRnNmU8.js} +1 -1
  66. package/.output/public/_nuxt/{DwIYtFfA.js → CZVzFlpI.js} +1 -1
  67. package/.output/public/_nuxt/{BkO884Ds.js → CZoEPC_Q.js} +3 -3
  68. package/.output/public/_nuxt/{BJUff9Ku.js → Cc-2ziaZ.js} +1 -1
  69. package/.output/public/_nuxt/{BLwctszt.js → ChcO9s3o.js} +1 -1
  70. package/.output/public/_nuxt/{DX_9SfFb.js → Cl-LOSDV.js} +1 -1
  71. package/.output/public/_nuxt/{CSHcfejh.js → CobqYwkp.js} +1 -1
  72. package/.output/public/_nuxt/{B0xuHXvN.js → CqNwHCpo.js} +1 -1
  73. package/.output/public/_nuxt/{DMb_1D81.js → CuxrHsu-.js} +1 -1
  74. package/.output/public/_nuxt/{GGcn5KPW.js → CwPdIZ9J.js} +1 -1
  75. package/.output/public/_nuxt/{D7pKT3IW.js → D0ifH682.js} +1 -1
  76. package/.output/public/_nuxt/{KEeoKtq_.js → D3AZaldL.js} +1 -1
  77. package/.output/public/_nuxt/{BdxP21ep.js → D4UJwDQJ.js} +1 -1
  78. package/.output/public/_nuxt/{C-Ygk9x5.js → D5jZq8b3.js} +1 -1
  79. package/.output/public/_nuxt/{B6G3NLfW.js → D5q8SnqE.js} +1 -1
  80. package/.output/public/_nuxt/{CDkyQ1eQ.js → D8M722pn.js} +1 -1
  81. package/.output/public/_nuxt/{BjnQ1pI1.js → D8lwrAYS.js} +1 -1
  82. package/.output/public/_nuxt/{C13FKhqK.js → D9nmzBAw.js} +1 -1
  83. package/.output/public/_nuxt/{ClGn48iq.js → DC4idAGt.js} +1 -1
  84. package/.output/public/_nuxt/{vES4kgx7.js → DEd2xVbS.js} +1 -1
  85. package/.output/public/_nuxt/{CClsKJ9A.js → DH4YkDAi.js} +1 -1
  86. package/.output/public/_nuxt/{D-5A6cMB.js → DJTCT0bl.js} +1 -1
  87. package/.output/public/_nuxt/{D_O7SlHm.js → DNP5E1bC.js} +1 -1
  88. package/.output/public/_nuxt/{BF3tVKtX.js → DO9SFIh1.js} +1 -1
  89. package/.output/public/_nuxt/DPklr_tJ.js +2 -0
  90. package/.output/public/_nuxt/{mfAEx0Kz.js → DQM4eBdt.js} +1 -1
  91. package/.output/public/_nuxt/{cPPThz84.js → DQh6I9z9.js} +1 -1
  92. package/.output/public/_nuxt/{CXTrUfQ5.js → DS2wStH1.js} +1 -1
  93. package/.output/public/_nuxt/{CYQP4zpi.js → DTAStixR.js} +1 -1
  94. package/.output/public/_nuxt/{CEz288t8.js → DTGenhcA.js} +1 -1
  95. package/.output/public/_nuxt/{B9zgEO8N.js → DUAAXJ6Q.js} +1 -1
  96. package/.output/public/_nuxt/{CzAZpALW.js → DUVzIl3o.js} +1 -1
  97. package/.output/public/_nuxt/{DJt7Rogf.js → DXdwpJ-I.js} +1 -1
  98. package/.output/public/_nuxt/{MWUW1sIF.js → DY3uK7wM.js} +1 -1
  99. package/.output/public/_nuxt/{CfY_bsV0.js → DYbZBZet.js} +1 -1
  100. package/.output/public/_nuxt/{DZEuR9ms.js → D_4LPm1U.js} +1 -1
  101. package/.output/public/_nuxt/{CrmE-JGu.js → Db4KMnt8.js} +1 -1
  102. package/.output/public/_nuxt/{BwC62XRN.js → DcJbYLTp.js} +1 -1
  103. package/.output/public/_nuxt/{C6sX7TYf.js → DfF81NlA.js} +1 -1
  104. package/.output/public/_nuxt/{BHn8tRjg.js → DhI5cA_n.js} +1 -1
  105. package/.output/public/_nuxt/{CQ3tAemj.js → DhuOKJda.js} +1 -1
  106. package/.output/public/_nuxt/{D887s9k9.js → Di-Nc75e.js} +1 -1
  107. package/.output/public/_nuxt/{D_obX2Hj.js → Djs0Tlpa.js} +1 -1
  108. package/.output/public/_nuxt/DmmdPt_5.js +1 -0
  109. package/.output/public/_nuxt/{DKKY8zWm.js → Dn5a-guE.js} +1 -1
  110. package/.output/public/_nuxt/{BvstjGHC.js → DtjjnHnt.js} +1 -1
  111. package/.output/public/_nuxt/{Dbfwn2zk.js → DuvzM-P1.js} +1 -1
  112. package/.output/public/_nuxt/{BxShcW0K.js → DwY7rCd_.js} +1 -1
  113. package/.output/public/_nuxt/{BmaHzvZM.js → Dya5oK8u.js} +1 -1
  114. package/.output/public/_nuxt/{CO3hceDE.js → DzA58_Lm.js} +1 -1
  115. package/.output/public/_nuxt/{CF33v_m5.js → DzGy77Vr.js} +1 -1
  116. package/.output/public/_nuxt/{DmlZSBjF.js → E3rXPwU8.js} +1 -1
  117. package/.output/public/_nuxt/{CEDw8osP.js → EgKnQnf-.js} +1 -1
  118. package/.output/public/_nuxt/{it8syoZI.js → GtEM7xVU.js} +1 -1
  119. package/.output/public/_nuxt/{DLUvsixu.js → H6JbrRBU.js} +1 -1
  120. package/.output/public/_nuxt/{BE1CVWts.js → ILEvizzp.js} +1 -1
  121. package/.output/public/_nuxt/{BSA-U0so.js → JX1oqJI9.js} +1 -1
  122. package/.output/public/_nuxt/{yJ9vRvHj.js → JbHa4oXq.js} +1 -1
  123. package/.output/public/_nuxt/{zXvvpsZj.js → Kw0zy3FG.js} +1 -1
  124. package/.output/public/_nuxt/{C6FFW_cO.js → N5XtbYVD.js} +1 -1
  125. package/.output/public/_nuxt/{D04CyXmf.js → PP_4ebzl.js} +1 -1
  126. package/.output/public/_nuxt/{6QDVg5TO.js → SrncdpaW.js} +1 -1
  127. package/.output/public/_nuxt/{36ZHqDPo.js → U1MWjQMi.js} +1 -1
  128. package/.output/public/_nuxt/{mT7Mt2d7.js → Um1vPiAz.js} +1 -1
  129. package/.output/public/_nuxt/{CqFcWBkW.js → XCjS70z4.js} +1 -1
  130. package/.output/public/_nuxt/{C24so3m7.js → YX8avsvq.js} +2 -2
  131. package/.output/public/_nuxt/{DaBSQDif.js → _cy8R3nk.js} +1 -1
  132. package/.output/public/_nuxt/{D9aYkNhQ.js → apYB9dr5.js} +1 -1
  133. package/.output/public/_nuxt/builds/latest.json +1 -1
  134. package/.output/public/_nuxt/builds/meta/def74b99-d70c-4f30-aa29-70248cbeac7d.json +1 -0
  135. package/.output/public/_nuxt/entry.NKPfH2kE.css +1 -0
  136. package/.output/public/_nuxt/{BqTdsCnW.js → fbyIeNkc.js} +1 -1
  137. package/.output/public/_nuxt/{-2AbaFNH.js → g5MjDvm5.js} +1 -1
  138. package/.output/public/_nuxt/{C1tCdK-M.js → gTrVszwd.js} +1 -1
  139. package/.output/public/_nuxt/{BVEFmI4I.js → ixlNW2So.js} +1 -1
  140. package/.output/public/_nuxt/{DtyyytRx.js → nnQqD5pb.js} +1 -1
  141. package/.output/public/_nuxt/{pHCJ6lhw.js → rfGRTJJW.js} +1 -1
  142. package/.output/public/_nuxt/{Buf1PAiO.js → t8aDAkZ5.js} +1 -1
  143. package/.output/public/_nuxt/{BmdlymIW.js → vIOxcXKR.js} +1 -1
  144. package/.output/public/_nuxt/{Cve4psva.js → vScW1Zgm.js} +1 -1
  145. package/.output/public/_nuxt/{SfaNtyKS.js → wO6z2ugJ.js} +1 -1
  146. package/.output/public/_nuxt/{BhYoxmLV.js → x6FRJ5ac.js} +1 -1
  147. package/.output/public/_nuxt/{Pn7VD6uQ.js → zq-a1TeT.js} +1 -1
  148. package/.output/server/chunks/build/{chat-CZMiB68R.mjs → chat-CR3JIVEq.mjs} +65 -11
  149. package/.output/server/chunks/build/chat-CR3JIVEq.mjs.map +1 -0
  150. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  151. package/.output/server/chunks/build/server.mjs +3 -3
  152. package/.output/server/chunks/build/{settings-ByUXa46k.mjs → settings-B2KXoGcz.mjs} +213 -26
  153. package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
  154. package/.output/server/chunks/build/styles.mjs +2 -2
  155. package/.output/server/chunks/build/{usage-CSrBh4Or.mjs → usage-BHdQZbfI.mjs} +9 -5
  156. package/.output/server/chunks/build/{usage-CSrBh4Or.mjs.map → usage-BHdQZbfI.mjs.map} +1 -1
  157. package/.output/server/chunks/nitro/nitro.mjs +1161 -891
  158. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  159. package/.output/server/chunks/routes/_ws/chat.mjs +2 -1
  160. package/.output/server/chunks/routes/_ws/chat.mjs.map +1 -1
  161. package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs +4 -1
  162. package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs.map +1 -1
  163. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  164. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  165. package/.output/server/chunks/routes/api/usage/stats.get.mjs +2 -0
  166. package/.output/server/chunks/routes/api/usage/stats.get.mjs.map +1 -1
  167. package/.output/server/package.json +1 -1
  168. package/app/components/chat/ConversationList.vue +7 -1
  169. package/app/components/chat/MessageBubble.vue +45 -1
  170. package/app/components/usage/UsageRecordsTable.vue +4 -2
  171. package/app/components/usage/UsageSourceDonut.client.vue +4 -2
  172. package/app/components/usage/UsageTopConsumers.vue +4 -2
  173. package/app/composables/useChat.ts +3 -0
  174. package/app/pages/settings.vue +148 -9
  175. package/package.json +1 -1
  176. package/server/api/conversations/[id].delete.ts +9 -0
  177. package/server/api/conversations/index.get.ts +2 -1
  178. package/server/api/usage/stats.get.ts +2 -0
  179. package/server/bridge/adapters/telegram.ts +83 -8
  180. package/server/bridge/responder.ts +248 -0
  181. package/server/bridge/router.ts +6 -4
  182. package/server/db/schema.ts +3 -1
  183. package/server/drizzle/migrations/0015_great_mephistopheles.sql +2 -0
  184. package/server/drizzle/migrations/meta/0015_snapshot.json +1972 -0
  185. package/server/drizzle/migrations/meta/_journal.json +7 -0
  186. package/server/routes/_ws/chat.ts +2 -1
  187. package/server/utils/log-token-usage.ts +1 -1
  188. package/shared/types/index.ts +6 -0
  189. package/.output/public/_nuxt/BIo-9u_O.js +0 -1
  190. package/.output/public/_nuxt/BMs0mHEp.js +0 -1
  191. package/.output/public/_nuxt/BwyXWqBY.js +0 -1
  192. package/.output/public/_nuxt/CE9_ECxx.js +0 -1
  193. package/.output/public/_nuxt/DmcMCO8x.js +0 -1
  194. package/.output/public/_nuxt/JReYPlwF.js +0 -2
  195. package/.output/public/_nuxt/builds/meta/410e449d-9fe8-43a0-ae07-80797693b9b8.json +0 -1
  196. package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
  197. package/.output/public/_nuxt/iBaivqi8.js +0 -1
  198. package/.output/server/chunks/build/chat-CZMiB68R.mjs.map +0 -1
  199. package/.output/server/chunks/build/settings-ByUXa46k.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.2/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/node-mock-http@1.0.4/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.4/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/config.js","../../../../app/app.config.ts","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.js","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/@nuxtjs+color-mode@3.5.2_magicast@0.5.1/node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/plugins/00.env-validate.ts","../../../../server/plugins/01.api-token.ts","../../../../server/db/schema.ts","../../../../server/utils/db-state.ts","../../../../server/db/index.ts","../../../../server/db/migrate.ts","../../../../server/utils/auth.ts","../../../../server/db/seed.ts","../../../../server/plugins/02.database.ts","../../../../server/utils/path-validator.ts","../../../../server/utils/frontmatter.ts","../../../../server/utils/document-sync.ts","../../../../server/plugins/03.file-watcher.ts","../../../../server/utils/agent-registry.ts","../../../../server/utils/notification-bus.ts","../../../../server/utils/notify-resource.ts","../../../../server/utils/log-token-usage.ts","../../../../server/services/agent-executor.ts","../../../../server/services/cron-scheduler.ts","../../../../server/utils/agent-cleanup.ts","../../../../server/plugins/04.cron-agents.ts","../../../../server/plugins/05.skills-catalog.ts","../../../../server/bridge/registry.ts","../../../../server/utils/crypto.ts","../../../../server/utils/get-secret.ts","../../../../server/bridge/router.ts","../../../../server/bridge/adapters/telegram.ts","../../../../server/bridge/adapters/discord.ts","../../../../server/bridge/adapters/imessage.ts","../../../../server/bridge/adapters/google.ts","../../../../server/bridge/adapters/email.ts","../../../../server/bridge/lifecycle.ts","../../../../server/plugins/06.message-bridge.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/auth.ts","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.js","../../../../node_modules/.pnpm/ufo@1.6.3/node_modules/ufo/dist/index.mjs","../../../../shared/utils/language-detection.ts","../../../../shared/utils/notification-defaults.ts","../../../../server/utils/chat-session-manager.ts","../../../../server/utils/db-guard.ts","../../../../server/utils/pty-manager.ts","../../../../server/utils/skills-path.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../node_modules/.pnpm/@nuxt+icon@2.1.1_magicast@0.5.1_vite@7.3.0_@types+node@25.0.8_jiti@2.6.1_lightningcss@1_01287b657f4a2f684624a151274b0e62/node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../node_modules/.pnpm/@nuxtjs+mdc@0.20.0_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/highlighter/event-handler.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/cookie-es@2.0.0/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["isPlainObject","decode","JOIN_LEADING_SLASH_RE","withTrailingSlash","hasLeadingSlash","withLeadingSlash","joinURL","getQuery","isNonEmptyURL","parse","tryDecode","serialize","createRouter","f","h","c","i","l","createError","process","parse$1","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","join","schema.user","schema.session","schema.account","schema.verification","existsSync","createHash","basename","readFile","schema.documents","writeFile","readdir","watch","__publicField","EventEmitter","schema.tokenUsage","schema.cronAgentRuns","schema.cronAgents","schema.skillsCatalog","schema.bridgeMessages","_a","_b","_c","_d","normalized","schema.bridges","session","pty","colonIdx","key","val","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,77,78,80,81,82,89,90,91,92,93,94,95,96]}
1
+ {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../../../node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.2/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/node-mock-http@1.0.4/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.4/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.3_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___ioredis@5.8.2/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/config.js","../../../../app/app.config.ts","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/unctx@2.5.0/node_modules/unctx/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.js","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/@nuxtjs+color-mode@3.5.2_magicast@0.5.1/node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/plugins/00.env-validate.ts","../../../../server/plugins/01.api-token.ts","../../../../server/db/schema.ts","../../../../server/utils/db-state.ts","../../../../server/db/index.ts","../../../../server/db/migrate.ts","../../../../server/utils/auth.ts","../../../../server/db/seed.ts","../../../../server/plugins/02.database.ts","../../../../server/utils/path-validator.ts","../../../../server/utils/frontmatter.ts","../../../../server/utils/document-sync.ts","../../../../server/plugins/03.file-watcher.ts","../../../../server/utils/agent-registry.ts","../../../../server/utils/notification-bus.ts","../../../../server/utils/notify-resource.ts","../../../../server/utils/log-token-usage.ts","../../../../server/services/agent-executor.ts","../../../../server/services/cron-scheduler.ts","../../../../server/utils/agent-cleanup.ts","../../../../server/plugins/04.cron-agents.ts","../../../../server/plugins/05.skills-catalog.ts","../../../../server/bridge/registry.ts","../../../../server/utils/crypto.ts","../../../../server/utils/get-secret.ts","../../../../server/bridge/responder.ts","../../../../server/bridge/router.ts","../../../../server/bridge/adapters/telegram.ts","../../../../server/bridge/adapters/discord.ts","../../../../server/bridge/adapters/imessage.ts","../../../../server/bridge/adapters/google.ts","../../../../server/bridge/adapters/email.ts","../../../../server/bridge/lifecycle.ts","../../../../server/plugins/06.message-bridge.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/auth.ts","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.2.2_db0@0.3.4_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8___d_a6b79d18884e342815abf8a85cd13f2d/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.js","../../../../node_modules/.pnpm/ufo@1.6.3/node_modules/ufo/dist/index.mjs","../../../../shared/utils/language-detection.ts","../../../../shared/utils/notification-defaults.ts","../../../../server/utils/chat-session-manager.ts","../../../../server/utils/db-guard.ts","../../../../server/utils/pty-manager.ts","../../../../server/utils/skills-path.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../node_modules/.pnpm/@nuxt+icon@2.1.1_magicast@0.5.1_vite@7.3.0_@types+node@25.0.8_jiti@2.6.1_lightningcss@1_01287b657f4a2f684624a151274b0e62/node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../node_modules/.pnpm/@nuxtjs+mdc@0.20.0_magicast@0.5.1/node_modules/@nuxtjs/mdc/dist/runtime/highlighter/event-handler.js","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/cookie-es@2.0.0/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.12.9_drizzle-orm@0.45.1_kysely@0.28.10_postgres@3.4.8_/node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["isPlainObject","decode","JOIN_LEADING_SLASH_RE","withTrailingSlash","hasLeadingSlash","withLeadingSlash","joinURL","getQuery","isNonEmptyURL","parse","tryDecode","serialize","createRouter","f","h","c","i","l","createError","process","parse$1","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","join","schema.user","schema.session","schema.account","schema.verification","existsSync","createHash","basename","readFile","schema.documents","writeFile","readdir","watch","__publicField","EventEmitter","schema.tokenUsage","schema.cronAgentRuns","schema.cronAgents","schema.skillsCatalog","schema.conversations","randomUUID","schema.bridgeMessages","schema.conversationMessages","_a","_b","_c","_d","normalized","schema.bridges","session","pty","colonIdx","key","val","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,78,79,81,82,83,90,91,92,93,94,95,96,97]}
@@ -104,7 +104,8 @@ async function handleSend(peer, message, conversationId) {
104
104
  await db.insert(conversationMessages).values({
105
105
  conversationId: convId,
106
106
  role: "user",
107
- content: JSON.stringify([{ type: "text", text: message }])
107
+ content: JSON.stringify([{ type: "text", text: message }]),
108
+ source: "web"
108
109
  });
109
110
  const session = chatSessionManager.startSession(convId, message, resumeSessionId);
110
111
  send(peer, { type: "chat:stream_start", conversationId: convId });
@@ -1 +1 @@
1
- {"version":3,"file":"chat.mjs","sources":["../../../../../server/routes/_ws/chat.ts"],"names":["schema.conversations","schema.conversationMessages"],"mappings":"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"}
1
+ {"version":3,"file":"chat.mjs","sources":["../../../../../server/routes/_ws/chat.ts"],"names":["schema.conversations","schema.conversationMessages"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { d as defineEventHandler, r as requireDb, g as getRouterParam, a as getDb, v as conversations, n as notifyResourceChange } from '../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, r as requireDb, g as getRouterParam, a as getDb, v as conversations, c as createError, n as notifyResourceChange } from '../../../nitro/nitro.mjs';
2
2
  import { eq } from 'drizzle-orm';
3
3
  import '@anthropic-ai/claude-agent-sdk';
4
4
  import 'module';
@@ -42,6 +42,9 @@ const _id__delete = defineEventHandler(async (event) => {
42
42
  requireDb();
43
43
  const id = getRouterParam(event, "id");
44
44
  const db = getDb();
45
+ const [conv] = await db.select({ isMain: conversations.isMain }).from(conversations).where(eq(conversations.id, id)).limit(1);
46
+ if (conv == null ? void 0 : conv.isMain)
47
+ throw createError({ statusCode: 403, message: "Cannot delete Main Chat" });
45
48
  await db.delete(conversations).where(eq(conversations.id, id));
46
49
  notifyResourceChange({ resource: "conversation", action: "delete", resourceId: id });
47
50
  return { data: { success: true } };
@@ -1 +1 @@
1
- {"version":3,"file":"_id_.delete.mjs","sources":["../../../../../../server/api/conversations/[id].delete.ts"],"names":["schema.conversations"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,SAAA,CAAA,CAAA;AAEA,EAAA,MAAA,EAAA,GAAA,cAAA,CAAA,KAAA,EAAA,IAAA,CAAA;AACA,EAAA,MAAA,KAAA,KAAA,EAAA;AAEA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAAA,aAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAAA,aAAA,CAAA,EAAA,EAAA,EAAA,CAAA,CAAA;AAEA,EAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,QAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAEA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"_id_.delete.mjs","sources":["../../../../../../server/api/conversations/[id].delete.ts"],"names":["schema.conversations"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,SAAA,CAAA,CAAA;AAEA,EAAA,MAAA,EAAA,GAAA,cAAA,CAAA,KAAA,EAAA,IAAA,CAAA;AACA,EAAA,MAAA,KAAA,KAAA,EAAA;AAGA,EAAA,MAAA,CAAA,IAAA,CAAA,GAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,MAAA,EAAAA,aAAA,CAAA,MAAA,EAAA,CAAA,CACA,KAAAA,aAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAAA,aAAA,CAAA,EAAA,EAAA,EAAA,CAAA,CAAA,CACA,KAAA,CAAA,CAAA,CAAA;AAEA,EAAA,IAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,MAAA;AACA,IAAA,MAAA,YAAA,EAAA,UAAA,EAAA,GAAA,EAAA,OAAA,EAAA,2BAAA,CAAA;AAEA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAAA,aAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAAA,aAAA,CAAA,EAAA,EAAA,EAAA,CAAA,CAAA;AAEA,EAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,QAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAEA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,CAAA,CAAA;;;;"}
@@ -41,7 +41,7 @@ import 'consola';
41
41
  const index_get = defineEventHandler(async (event) => {
42
42
  requireDb();
43
43
  const db = getDb();
44
- const conversations$1 = await db.select().from(conversations).orderBy(desc(conversations.startedAt)).limit(50);
44
+ const conversations$1 = await db.select().from(conversations).orderBy(desc(conversations.isMain), desc(conversations.startedAt)).limit(50);
45
45
  return { data: conversations$1 };
46
46
  });
47
47
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.get3.mjs","sources":["../../../../../server/api/conversations/index.get.ts"],"names":["conversations","schema.conversations"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,SAAA,CAAA,CAAA;AAEA,EAAA,MAAA,KAAA,KAAA,EAAA;AAEA,EAAA,MAAAA,kBAAA,MAAA,EAAA,CAAA,MAAA,EAAA,CACA,KAAAC,aAAA,CAAA,CACA,OAAA,CAAA,KAAAA,aAAA,CAAA,SAAA,CAAA,CAAA,CACA,MAAA,EAAA,CAAA;AAEA,EAAA,OAAA,EAAA,MAAAD,eAAA,EAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.get3.mjs","sources":["../../../../../server/api/conversations/index.get.ts"],"names":["conversations","schema.conversations"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,SAAA,CAAA,CAAA;AAEA,EAAA,MAAA,KAAA,KAAA,EAAA;AAGA,EAAA,MAAAA,eAAA,GAAA,MAAA,EAAA,CAAA,MAAA,GACA,IAAA,CAAAC,aAAA,CAAA,CACA,OAAA,CAAA,IAAA,CAAAA,aAAA,CAAA,MAAA,GAAA,IAAA,CAAAA,cAAA,SAAA,CAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA;AAEA,EAAA,OAAA,EAAA,MAAAD,eAAA,EAAA;AACA,CAAA,CAAA;;;;"}
@@ -83,6 +83,7 @@ const stats_get = defineEventHandler(async (event) => {
83
83
  chat: 0,
84
84
  agent: 0,
85
85
  memory: 0,
86
+ bridge: 0,
86
87
  totalCost: 0,
87
88
  inputTokens: 0,
88
89
  outputTokens: 0,
@@ -95,6 +96,7 @@ const stats_get = defineEventHandler(async (event) => {
95
96
  if (r.source === "chat") existing.chat += r.costUsd;
96
97
  else if (r.source === "agent") existing.agent += r.costUsd;
97
98
  else if (r.source === "memory_extraction") existing.memory += r.costUsd;
99
+ else if (r.source === "bridge") existing.bridge += r.costUsd;
98
100
  bucketMap.set(bucket, existing);
99
101
  const source = r.source;
100
102
  const srcEntry = sourceMap.get(source) || { cost: 0, calls: 0, tokens: 0 };
@@ -1 +1 @@
1
- {"version":3,"file":"stats.get.mjs","sources":["../../../../../../server/api/usage/stats.get.ts"],"names":["schema.tokenUsage"],"mappings":"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"}
1
+ {"version":3,"file":"stats.get.mjs","sources":["../../../../../../server/api/usage/stats.get.ts"],"names":["schema.tokenUsage"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cognova-prod",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
@@ -55,10 +55,16 @@ function formatDate(date: Date | string) {
55
55
  @click="emit('select', conv.id)"
56
56
  >
57
57
  <div class="flex items-start justify-between gap-2">
58
- <div class="truncate text-sm font-medium">
58
+ <div class="flex items-center gap-1.5 truncate text-sm font-medium">
59
+ <UIcon
60
+ v-if="conv.isMain"
61
+ name="i-lucide-pin"
62
+ class="size-3.5 text-primary shrink-0"
63
+ />
59
64
  {{ conv.title || 'Untitled' }}
60
65
  </div>
61
66
  <UButton
67
+ v-if="!conv.isMain"
62
68
  icon="i-lucide-trash-2"
63
69
  variant="ghost"
64
70
  color="error"
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import type { ChatMessage, ChatContentBlock } from '~~/shared/types'
2
+ import type { ChatMessage, ChatContentBlock, MessageSource } from '~~/shared/types'
3
3
 
4
4
  defineProps<{
5
5
  message: ChatMessage
@@ -27,6 +27,34 @@ function getToolPairs(blocks: ChatContentBlock[]) {
27
27
  }
28
28
  return tools
29
29
  }
30
+
31
+ const sourceIconMap: Record<string, string> = {
32
+ telegram: 'i-simple-icons-telegram',
33
+ discord: 'i-simple-icons-discord',
34
+ imessage: 'i-lucide-message-circle',
35
+ email: 'i-lucide-mail',
36
+ google: 'i-simple-icons-google'
37
+ }
38
+
39
+ function getSourceIcon(source?: MessageSource): string | null {
40
+ if (!source || source === 'web') return null
41
+ return sourceIconMap[source] || null
42
+ }
43
+
44
+ function formatTime(date: Date | string | undefined): string {
45
+ if (!date) return ''
46
+ const d = date instanceof Date ? date : new Date(date)
47
+ const now = new Date()
48
+ const diffMs = now.getTime() - d.getTime()
49
+ const diffMin = Math.floor(diffMs / 60000)
50
+ const diffHr = Math.floor(diffMs / 3600000)
51
+
52
+ if (diffMin < 1) return 'just now'
53
+ if (diffMin < 60) return `${diffMin}m ago`
54
+ if (diffHr < 24) return `${diffHr}h ago`
55
+
56
+ return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' })
57
+ }
30
58
  </script>
31
59
 
32
60
  <template>
@@ -34,6 +62,13 @@ function getToolPairs(blocks: ChatContentBlock[]) {
34
62
  class="flex"
35
63
  :class="message.role === 'user' ? 'justify-end' : 'justify-start'"
36
64
  >
65
+ <!-- Platform icon for bridge user messages (left of bubble) -->
66
+ <UIcon
67
+ v-if="message.role === 'user' && getSourceIcon(message.source)"
68
+ :name="getSourceIcon(message.source)!"
69
+ class="size-4 text-dimmed self-end mb-1 mr-1.5 shrink-0"
70
+ />
71
+
37
72
  <div
38
73
  class="max-w-[85%] rounded-xl px-4 py-3"
39
74
  :class="message.role === 'user'
@@ -76,6 +111,15 @@ function getToolPairs(blocks: ChatContentBlock[]) {
76
111
  <span v-if="message.durationMs">{{ (message.durationMs / 1000).toFixed(1) }}s</span>
77
112
  </div>
78
113
  </template>
114
+
115
+ <!-- Timestamp -->
116
+ <div
117
+ v-if="message.createdAt"
118
+ class="mt-1 text-xs text-dimmed"
119
+ :class="message.role === 'user' ? 'text-right' : ''"
120
+ >
121
+ {{ formatTime(message.createdAt) }}
122
+ </div>
79
123
  </div>
80
124
  </div>
81
125
  </template>
@@ -10,13 +10,15 @@ const props = defineProps<{
10
10
  const sourceLabels: Record<TokenUsageSource, string> = {
11
11
  chat: 'Chat',
12
12
  agent: 'Agent',
13
- memory_extraction: 'Memory'
13
+ memory_extraction: 'Memory',
14
+ bridge: 'Bridge'
14
15
  }
15
16
 
16
17
  const sourceColors = {
17
18
  chat: 'primary',
18
19
  agent: 'warning',
19
- memory_extraction: 'info'
20
+ memory_extraction: 'info',
21
+ bridge: 'success'
20
22
  } as const
21
23
 
22
24
  // Filter state
@@ -18,13 +18,15 @@ const props = defineProps<{
18
18
  const sourceLabels: Record<TokenUsageSource, string> = {
19
19
  chat: 'Chat',
20
20
  agent: 'Agents',
21
- memory_extraction: 'Memory'
21
+ memory_extraction: 'Memory',
22
+ bridge: 'Bridge'
22
23
  }
23
24
 
24
25
  const sourceColors: Record<TokenUsageSource, string> = {
25
26
  chat: 'var(--ui-primary)',
26
27
  agent: 'var(--ui-warning)',
27
- memory_extraction: 'var(--ui-info)'
28
+ memory_extraction: 'var(--ui-info)',
29
+ bridge: 'var(--ui-success)'
28
30
  }
29
31
 
30
32
  const isTokens = computed(() => props.displayMode === 'tokens')
@@ -18,13 +18,15 @@ const props = defineProps<{
18
18
  const sourceLabels: Record<TokenUsageSource, string> = {
19
19
  chat: 'Chat',
20
20
  agent: 'Agent',
21
- memory_extraction: 'Memory'
21
+ memory_extraction: 'Memory',
22
+ bridge: 'Bridge'
22
23
  }
23
24
 
24
25
  const sourceColors = {
25
26
  chat: 'primary',
26
27
  agent: 'warning',
27
- memory_extraction: 'info'
28
+ memory_extraction: 'info',
29
+ bridge: 'success'
28
30
  } as const
29
31
 
30
32
  const isTokens = computed(() => props.displayMode === 'tokens')
@@ -263,6 +263,9 @@ export function useChat() {
263
263
  }
264
264
 
265
265
  async function deleteConversation(conversationId: string) {
266
+ const conv = conversations.value.find(c => c.id === conversationId)
267
+ if (conv?.isMain) return
268
+
266
269
  try {
267
270
  await $fetch(`/api/conversations/${conversationId}`, { method: 'DELETE' })
268
271
  conversations.value = conversations.value.filter(c => c.id !== conversationId)
@@ -195,6 +195,50 @@ function formatDate(dateStr: string) {
195
195
  })
196
196
  }
197
197
 
198
+ // === App URL ===
199
+ const appUrl = ref('')
200
+ const appUrlSaving = ref(false)
201
+
202
+ async function loadAppUrl() {
203
+ try {
204
+ const { data } = await $fetch<{ data: { key: string, value: string } }>('/api/secrets/APP_URL')
205
+ appUrl.value = data.value || ''
206
+ } catch {
207
+ appUrl.value = ''
208
+ }
209
+ }
210
+
211
+ async function saveAppUrl() {
212
+ appUrlSaving.value = true
213
+ try {
214
+ if (appUrl.value) {
215
+ // Upsert the APP_URL secret
216
+ const exists = secretsData.value.some(s => s.key === 'APP_URL')
217
+ if (exists) {
218
+ await $fetch('/api/secrets/APP_URL', {
219
+ method: 'PUT',
220
+ body: { value: appUrl.value, description: 'Public URL for webhooks and auth callbacks' }
221
+ })
222
+ } else {
223
+ await $fetch('/api/secrets', {
224
+ method: 'POST',
225
+ body: { key: 'APP_URL', value: appUrl.value, description: 'Public URL for webhooks and auth callbacks' }
226
+ })
227
+ }
228
+ } else {
229
+ // Remove the secret if cleared
230
+ const exists = secretsData.value.some(s => s.key === 'APP_URL')
231
+ if (exists)
232
+ await $fetch('/api/secrets/APP_URL', { method: 'DELETE' })
233
+ }
234
+ toast.add({ title: 'Public URL saved', description: 'Restart running integrations for changes to take effect.', color: 'success' })
235
+ await fetchSecrets()
236
+ } catch {
237
+ toast.add({ title: 'Failed to save URL', color: 'error' })
238
+ }
239
+ appUrlSaving.value = false
240
+ }
241
+
198
242
  // === Notification Preferences ===
199
243
  const notifPrefs = ref<NotificationPreferences>({ ...defaultNotificationPreferences })
200
244
  const notifLoading = ref(false)
@@ -328,12 +372,13 @@ const platformNamePlaceholders: Record<BridgePlatform, string> = {
328
372
  email: 'Work Email'
329
373
  }
330
374
 
331
- const platformSecretHints: Record<BridgePlatform, string | null> = {
332
- telegram: 'TELEGRAM_BOT_TOKEN',
333
- discord: 'DISCORD_BOT_TOKEN',
334
- imessage: null,
335
- google: null,
336
- email: null
375
+ // Secrets required to create a bridge (blocks creation if missing)
376
+ const platformRequiredSecrets: Record<BridgePlatform, string[]> = {
377
+ telegram: ['TELEGRAM_BOT_TOKEN'],
378
+ discord: ['DISCORD_BOT_TOKEN'],
379
+ imessage: [],
380
+ google: [],
381
+ email: []
337
382
  }
338
383
 
339
384
  const platformOptions: { value: BridgePlatform, label: string, icon: string }[] = [
@@ -344,6 +389,13 @@ const platformOptions: { value: BridgePlatform, label: string, icon: string }[]
344
389
  { value: 'email', label: 'Email (IMAP)', icon: 'i-lucide-at-sign' }
345
390
  ]
346
391
 
392
+ function getMissingSecrets(platform: BridgePlatform): string[] {
393
+ const required = platformRequiredSecrets[platform]
394
+ if (!required.length) return []
395
+ const existing = new Set(secretsData.value.map(s => s.key))
396
+ return required.filter(k => !existing.has(k))
397
+ }
398
+
347
399
  const healthColors: Record<string, string> = {
348
400
  connected: 'text-success',
349
401
  disconnected: 'text-dimmed',
@@ -486,6 +538,15 @@ async function handleBridgeCreate() {
486
538
  toast.add({ title: 'Name is required', color: 'error' })
487
539
  return
488
540
  }
541
+ const missing = getMissingSecrets(bridgeForm.platform)
542
+ if (missing.length) {
543
+ toast.add({
544
+ title: 'Missing required secrets',
545
+ description: `Add ${missing.join(', ')} in the Secrets tab first.`,
546
+ color: 'error'
547
+ })
548
+ return
549
+ }
489
550
  bridgeSaving.value = true
490
551
  try {
491
552
  await $fetch('/api/bridges', {
@@ -532,11 +593,12 @@ async function handleDeleteBridge() {
532
593
  }
533
594
  }
534
595
 
535
- // Load secrets + notification prefs + bridges when component mounts
596
+ // Load secrets + notification prefs + bridges + app url when component mounts
536
597
  onMounted(() => {
537
598
  fetchSecrets()
538
599
  loadNotificationPrefs()
539
600
  fetchBridges()
601
+ loadAppUrl()
540
602
  })
541
603
 
542
604
  // Form handlers
@@ -943,6 +1005,35 @@ async function handlePasswordSubmit() {
943
1005
  <!-- App Tab -->
944
1006
  <template #app>
945
1007
  <div class="max-w-2xl mx-auto py-6">
1008
+ <!-- Public URL -->
1009
+ <div class="mb-8">
1010
+ <h3 class="text-lg font-semibold mb-1">
1011
+ Public URL
1012
+ </h3>
1013
+ <p class="text-sm text-dimmed mb-4">
1014
+ The publicly accessible URL for this instance. Used for Telegram webhooks, auth callbacks, and other integrations that need to reach your server.
1015
+ </p>
1016
+ <div class="flex gap-2">
1017
+ <UInput
1018
+ v-model="appUrl"
1019
+ placeholder="https://example.com"
1020
+ class="flex-1"
1021
+ />
1022
+ <UButton
1023
+ :loading="appUrlSaving"
1024
+ @click="saveAppUrl"
1025
+ >
1026
+ Save
1027
+ </UButton>
1028
+ </div>
1029
+ <p class="text-xs text-dimmed mt-2">
1030
+ Leave empty to use long-polling for Telegram instead of webhooks. Changes require restarting running integrations.
1031
+ </p>
1032
+ </div>
1033
+
1034
+ <USeparator class="mb-8" />
1035
+
1036
+ <!-- Notification Preferences -->
946
1037
  <div class="mb-6">
947
1038
  <h3 class="text-lg font-semibold mb-1">
948
1039
  Notification Preferences
@@ -1153,6 +1244,34 @@ async function handlePasswordSubmit() {
1153
1244
  class="w-full"
1154
1245
  />
1155
1246
  </UFormField>
1247
+
1248
+ <!-- Missing secrets warning -->
1249
+ <div
1250
+ v-if="getMissingSecrets(bridgeForm.platform).length"
1251
+ class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
1252
+ >
1253
+ <UIcon
1254
+ name="i-lucide-alert-triangle"
1255
+ class="size-4 mt-0.5 text-error shrink-0"
1256
+ />
1257
+ <div>
1258
+ <p class="font-medium text-error">
1259
+ Missing required secrets
1260
+ </p>
1261
+ <p class="text-dimmed mt-1">
1262
+ Add the following in Settings &rarr; Secrets before creating:
1263
+ </p>
1264
+ <ul class="mt-1 space-y-0.5">
1265
+ <li
1266
+ v-for="key in getMissingSecrets(bridgeForm.platform)"
1267
+ :key="key"
1268
+ >
1269
+ <code class="text-xs bg-elevated px-1.5 py-0.5 rounded">{{ key }}</code>
1270
+ </li>
1271
+ </ul>
1272
+ </div>
1273
+ </div>
1274
+
1156
1275
  <UFormField
1157
1276
  label="Name"
1158
1277
  name="name"
@@ -1172,6 +1291,7 @@ async function handlePasswordSubmit() {
1172
1291
  </UButton>
1173
1292
  <UButton
1174
1293
  :loading="bridgeSaving"
1294
+ :disabled="getMissingSecrets(bridgeForm.platform).length > 0"
1175
1295
  @click="handleBridgeCreate"
1176
1296
  >
1177
1297
  Create
@@ -1229,7 +1349,7 @@ async function handlePasswordSubmit() {
1229
1349
  <div class="space-y-4">
1230
1350
  <!-- Secret hint -->
1231
1351
  <div
1232
- v-if="editingBridge && platformSecretHints[editingBridge.platform]"
1352
+ v-if="editingBridge && platformRequiredSecrets[editingBridge.platform].length"
1233
1353
  class="flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"
1234
1354
  >
1235
1355
  <UIcon
@@ -1237,7 +1357,14 @@ async function handlePasswordSubmit() {
1237
1357
  class="size-4 mt-0.5 text-dimmed shrink-0"
1238
1358
  />
1239
1359
  <span class="text-dimmed">
1240
- Requires secret <code class="bg-elevated px-1 py-0.5 rounded text-xs">{{ platformSecretHints[editingBridge.platform] }}</code> in the Secrets tab.
1360
+ Requires
1361
+ <template
1362
+ v-for="(key, i) in platformRequiredSecrets[editingBridge.platform]"
1363
+ :key="key"
1364
+ >
1365
+ <code class="bg-elevated px-1 py-0.5 rounded text-xs">{{ key }}</code><template v-if="i < platformRequiredSecrets[editingBridge.platform].length - 1">, </template>
1366
+ </template>
1367
+ in the Secrets tab.
1241
1368
  </span>
1242
1369
  </div>
1243
1370
 
@@ -1329,6 +1456,18 @@ async function handlePasswordSubmit() {
1329
1456
  class="w-full"
1330
1457
  />
1331
1458
  </UFormField>
1459
+ <div
1460
+ v-if="bridgeConfigForm.strategy === 'bluebubbles' && !secretsData.some(s => s.key === 'BLUEBUBBLES_PASSWORD')"
1461
+ class="flex items-start gap-2 rounded-lg bg-error/10 border border-error/20 p-3 text-sm"
1462
+ >
1463
+ <UIcon
1464
+ name="i-lucide-alert-triangle"
1465
+ class="size-4 mt-0.5 text-error shrink-0"
1466
+ />
1467
+ <span class="text-dimmed">
1468
+ BlueBubbles requires secret <code class="text-xs bg-elevated px-1.5 py-0.5 rounded">BLUEBUBBLES_PASSWORD</code> in the Secrets tab.
1469
+ </span>
1470
+ </div>
1332
1471
  <UFormField
1333
1472
  v-if="bridgeConfigForm.strategy === 'bluebubbles'"
1334
1473
  label="BlueBubbles URL"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cognova",
3
3
  "type": "module",
4
- "version": "0.2.8",
4
+ "version": "0.2.10",
5
5
  "description": "Personal knowledge management system with Claude Code integration",
6
6
  "repository": {
7
7
  "type": "git",
@@ -10,6 +10,15 @@ export default defineEventHandler(async (event) => {
10
10
  const id = getRouterParam(event, 'id')!
11
11
  const db = getDb()
12
12
 
13
+ // Prevent deletion of Main Chat
14
+ const [conv] = await db.select({ isMain: schema.conversations.isMain })
15
+ .from(schema.conversations)
16
+ .where(eq(schema.conversations.id, id))
17
+ .limit(1)
18
+
19
+ if (conv?.isMain)
20
+ throw createError({ statusCode: 403, message: 'Cannot delete Main Chat' })
21
+
13
22
  await db.delete(schema.conversations)
14
23
  .where(eq(schema.conversations.id, id))
15
24