cognova 0.2.13 → 0.2.15
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.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/-mGU8_Hv.js +1 -0
- package/.output/public/_nuxt/0GqCtQ9S.js +1 -0
- package/.output/public/_nuxt/{DFpmIy6J.js → 1wCoXZ14.js} +1 -1
- package/.output/public/_nuxt/2J1KxdHv.js +1 -0
- package/.output/public/_nuxt/6VDUZECX.js +1 -0
- package/.output/public/_nuxt/{C7m9zGMG.js → 8WMJQbWG.js} +1 -1
- package/.output/public/_nuxt/9Rw88G6h.js +1 -0
- package/.output/public/_nuxt/{BjsKx597.js → B-yW4SD3.js} +1 -1
- package/.output/public/_nuxt/B20jNAhm.js +1 -0
- package/.output/public/_nuxt/B3OpTH_e.js +1 -0
- package/.output/public/_nuxt/B9Y3_B5G.js +1 -0
- package/.output/public/_nuxt/B9_vmatf.js +1 -0
- package/.output/public/_nuxt/B9o6sFST.js +1 -0
- package/.output/public/_nuxt/{CseYuM6E.js → BAY3_Hrq.js} +1 -1
- package/.output/public/_nuxt/{B_9zJTqe.js → BD5rPkc2.js} +3 -3
- package/.output/public/_nuxt/BGYoW3kO.js +1 -0
- package/.output/public/_nuxt/BHUy5EAj.js +1 -0
- package/.output/public/_nuxt/BLdMRpJD.js +1 -0
- package/.output/public/_nuxt/{D6tVZcRs.js → BOCn_SGf.js} +12 -12
- package/.output/public/_nuxt/BQi8LIrn.js +1 -0
- package/.output/public/_nuxt/BS1t375R.js +1 -0
- package/.output/public/_nuxt/BTGeP1bA.js +1 -0
- package/.output/public/_nuxt/{pdYvpiud.js → BVYYP4eQ.js} +5 -5
- package/.output/public/_nuxt/BWQ7zE01.js +1 -0
- package/.output/public/_nuxt/BWqJInD3.js +1 -0
- package/.output/public/_nuxt/BXdQ9ASJ.js +1 -0
- package/.output/public/_nuxt/{DQhm-UPG.js → BXxZokD_.js} +2 -2
- package/.output/public/_nuxt/BZ7DAtPi.js +1 -0
- package/.output/public/_nuxt/BZm9w7en.js +1 -0
- package/.output/public/_nuxt/B_hNqC64.js +1 -0
- package/.output/public/_nuxt/Be47YE2L.js +1 -0
- package/.output/public/_nuxt/BgIS9_ti.js +39 -0
- package/.output/public/_nuxt/BgavRUl_.js +1 -0
- package/.output/public/_nuxt/Bh0yGTzr.js +1 -0
- package/.output/public/_nuxt/BhhMUror.js +1 -0
- package/.output/public/_nuxt/Bj5e7QPz.js +1 -0
- package/.output/public/_nuxt/{9kAKMaPC.js → Bnn59-FS.js} +1 -1
- package/.output/public/_nuxt/BoCU3mWu.js +1 -0
- package/.output/public/_nuxt/Br6epbzY.js +1 -0
- package/.output/public/_nuxt/Br81Sr2R.js +1 -0
- package/.output/public/_nuxt/BrkEOLHu.js +9 -0
- package/.output/public/_nuxt/BtrNCc2S.js +1 -0
- package/.output/public/_nuxt/BxsQlbgl.js +1 -0
- package/.output/public/_nuxt/BzrhNhdT.js +1 -0
- package/.output/public/_nuxt/{B-DMcEU9.js → C-78dDNd.js} +1 -1
- package/.output/public/_nuxt/C1oaoi1p.js +1 -0
- package/.output/public/_nuxt/C2-_hcwB.js +1 -0
- package/.output/public/_nuxt/{TxMdabnL.js → C2Gh3qqr.js} +1 -1
- package/.output/public/_nuxt/C2OHaW6l.js +1 -0
- package/.output/public/_nuxt/C3szZmvA.js +1 -0
- package/.output/public/_nuxt/C3xzleKP.js +1 -0
- package/.output/public/_nuxt/C4sG6rdW.js +1 -0
- package/.output/public/_nuxt/C5Cu9Fx6.js +1 -0
- package/.output/public/_nuxt/{LRO7YHoH.js → C5gfF7J1.js} +1 -1
- package/.output/public/_nuxt/C6Eoiclo.js +1 -0
- package/.output/public/_nuxt/C7hFztZL.js +1 -0
- package/.output/public/_nuxt/CAVUAxNU.js +2 -0
- package/.output/public/_nuxt/{CiNxIhaq.js → CCeM5lW2.js} +1 -1
- package/.output/public/_nuxt/CDcQ31Eh.js +1 -0
- package/.output/public/_nuxt/CHbHVtCy.js +1 -0
- package/.output/public/_nuxt/CHnVFnBW.js +1 -0
- package/.output/public/_nuxt/CLNcmNQS.js +1 -0
- package/.output/public/_nuxt/{D7N3EZ-I.js → CPwCTHun.js} +1 -1
- package/.output/public/_nuxt/{CFmvNggn.js → CS8SdmH2.js} +1 -1
- package/.output/public/_nuxt/CTGm_mc8.js +1 -0
- package/.output/public/_nuxt/{DNcOC5zj.js → CTQFGHjS.js} +1 -1
- package/.output/public/_nuxt/{B0nzD8Sk.js → CVVtVzXC.js} +1 -1
- package/.output/public/_nuxt/CZNOaqeX.js +1 -0
- package/.output/public/_nuxt/C_A_NkeC.js +2 -0
- package/.output/public/_nuxt/{CGplHfmR.js → C_doutX-.js} +1 -1
- package/.output/public/_nuxt/{BrX-PnSK.js → CbDLhrNA.js} +2 -2
- package/.output/public/_nuxt/CePKCqSb.js +1 -0
- package/.output/public/_nuxt/Cet4T_yO.js +1 -0
- package/.output/public/_nuxt/{C6OSRpRd.js → CjJPkhbc.js} +1 -1
- package/.output/public/_nuxt/CkZT4LGq.js +1 -0
- package/.output/public/_nuxt/CkrW8sGL.js +1 -0
- package/.output/public/_nuxt/Co0UxVsx.js +1 -0
- package/.output/public/_nuxt/CqS0zXYQ.js +1 -0
- package/.output/public/_nuxt/CskGv_Km.js +1 -0
- package/.output/public/_nuxt/{DuzpliIL.js → CuvkTsqs.js} +1 -1
- package/.output/public/_nuxt/{B2wI_pYg.js → CxMuZEwX.js} +1 -1
- package/.output/public/_nuxt/{9O1MXkck.js → CxSijT71.js} +8 -8
- package/.output/public/_nuxt/Cywo6tZI.js +1 -0
- package/.output/public/_nuxt/D1reIfpX.js +1 -0
- package/.output/public/_nuxt/D1uV2uir.js +1 -0
- package/.output/public/_nuxt/{BWuL2CzO.js → D2edadpd.js} +1 -1
- package/.output/public/_nuxt/D3cEeQh7.js +1 -0
- package/.output/public/_nuxt/D41A2mE2.js +1 -0
- package/.output/public/_nuxt/D49P2RhG.js +1 -0
- package/.output/public/_nuxt/D867g6Ds.js +1 -0
- package/.output/public/_nuxt/DEFWIjWl.js +1 -0
- package/.output/public/_nuxt/DFTEBTzZ.js +1 -0
- package/.output/public/_nuxt/{-HePz7lp.js → DHRexj9X.js} +2 -2
- package/.output/public/_nuxt/DL4EpgqQ.js +1 -0
- package/.output/public/_nuxt/DLHnP6tw.js +1 -0
- package/.output/public/_nuxt/DM20WaLq.js +1 -0
- package/.output/public/_nuxt/{B8DFEjxA.js → DNAMjHbb.js} +1 -1
- package/.output/public/_nuxt/{CLkkdThv.js → DP8t9VWs.js} +24 -24
- package/.output/public/_nuxt/DTR31rjp.js +1 -0
- package/.output/public/_nuxt/{Bc8bTnkd.js → DTlSLSo1.js} +3 -3
- package/.output/public/_nuxt/{DowkFZ2V.js → DVdnhfXT.js} +1 -1
- package/.output/public/_nuxt/{DvHS7_h2.js → DZikIgHK.js} +1 -1
- package/.output/public/_nuxt/D_YGqvw_.js +1 -0
- package/.output/public/_nuxt/D_k1YwXm.js +1 -0
- package/.output/public/_nuxt/Daf2MbWG.js +7 -0
- package/.output/public/_nuxt/DcJ0GstJ.js +1 -0
- package/.output/public/_nuxt/DcYKh6QA.js +1 -0
- package/.output/public/_nuxt/DhN3_DYH.js +1 -0
- package/.output/public/_nuxt/DhSvBSt3.js +1 -0
- package/.output/public/_nuxt/DhlIWT8K.js +1 -0
- package/.output/public/_nuxt/DjsqyRqt.js +1 -0
- package/.output/public/_nuxt/DpSM97eH.js +1 -0
- package/.output/public/_nuxt/DqR9SdeU.js +1 -0
- package/.output/public/_nuxt/DqmQtg6Y.js +1 -0
- package/.output/public/_nuxt/Dsuag_iW.js +1 -0
- package/.output/public/_nuxt/Dtr_0IbE.js +1 -0
- package/.output/public/_nuxt/DwrmFEZN.js +1 -0
- package/.output/public/_nuxt/DxE8r3r4.js +1 -0
- package/.output/public/_nuxt/G_CsVlOR.js +1 -0
- package/.output/public/_nuxt/Gyw_2f6x.js +1 -0
- package/.output/public/_nuxt/HStC1ZyE.js +1 -0
- package/.output/public/_nuxt/Hh9mv0Ek.js +1 -0
- package/.output/public/_nuxt/LR0kCjbe.js +1 -0
- package/.output/public/_nuxt/MYeLvJGV.js +1 -0
- package/.output/public/_nuxt/NKs0EGrh.js +1 -0
- package/.output/public/_nuxt/PY5EGujn.js +1 -0
- package/.output/public/_nuxt/PamJNol9.js +1 -0
- package/.output/public/_nuxt/RlvwEbHv.js +1 -0
- package/.output/public/_nuxt/{BghuwIGa.js → TNpdJOlc.js} +1 -1
- package/.output/public/_nuxt/TSYrPbLR.js +1 -0
- package/.output/public/_nuxt/U-eBrbR4.js +1 -0
- package/.output/public/_nuxt/UuqXScSw.js +1 -0
- package/.output/public/_nuxt/V04-MrLN.js +1 -0
- package/.output/public/_nuxt/X0o5GcBb.js +1 -0
- package/.output/public/_nuxt/XQNzmQy9.js +1 -0
- package/.output/public/_nuxt/Y59XKprr.js +1 -0
- package/.output/public/_nuxt/YZQjZgsH.js +1 -0
- package/.output/public/_nuxt/_-TGPiLQ.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/7c42ae85-1cae-45f0-8cb9-ad3a10165c2c.json +1 -0
- package/.output/public/_nuxt/dashboard.ByJQ-Wzh.css +1 -0
- package/.output/public/_nuxt/entry.ZJxWCrU6.css +1 -0
- package/.output/public/_nuxt/{D12qPplu.js → hCeWb_38.js} +1 -1
- package/.output/public/_nuxt/{sBzyvWMJ.js → hrPTRWjM.js} +1 -1
- package/.output/public/_nuxt/jC4pIK1p.js +1 -0
- package/.output/public/_nuxt/jTT1R-Vz.js +1 -0
- package/.output/public/_nuxt/{CRRw0Thu.js → kkAMoB43.js} +1 -1
- package/.output/public/_nuxt/{h_bXa-f2.js → mzM4BGtv.js} +1 -1
- package/.output/public/_nuxt/o-s8JBm2.js +1 -0
- package/.output/public/_nuxt/pwJTkIQ4.js +1 -0
- package/.output/public/_nuxt/{BL1mkqgd.js → rIgg2Arf.js} +3 -3
- package/.output/public/_nuxt/subdxgSQ.js +1 -0
- package/.output/public/_nuxt/t8B72leH.js +1 -0
- package/.output/public/_nuxt/vCFAHwdt.js +1 -0
- package/.output/public/_nuxt/z-MP0bB7.js +1 -0
- package/.output/server/chunks/build/CodeIcon-CWD5HcV7.mjs +1 -1
- package/.output/server/chunks/build/DropdownMenu-BBrV9nXz.mjs +1 -1
- package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs → EditorToolbar-B9OwSI5e.mjs} +3 -3
- package/.output/server/chunks/build/{EditorToolbar-DIfb5arC.mjs.map → EditorToolbar-B9OwSI5e.mjs.map} +1 -1
- package/.output/server/chunks/build/Img-CWLmvN1t.mjs +1 -1
- package/.output/server/chunks/build/MDC-Dx0YPDhe.mjs +1 -1
- package/.output/server/chunks/build/Select-BB1oLrCD.mjs +1 -1
- package/.output/server/chunks/build/SelectMenu-DPssg6zD.mjs +1 -1
- package/.output/server/chunks/build/Table-DCwTlhCj.mjs +1 -1
- package/.output/server/chunks/build/Tooltip-TRyl6dje.mjs +1 -1
- package/.output/server/chunks/build/Tree-DUhXKd8y.mjs +1 -1
- package/.output/server/chunks/build/{_id_-DN00UDdO.mjs → _id_-CwBeklIM.mjs} +296 -430
- package/.output/server/chunks/build/_id_-CwBeklIM.mjs.map +1 -0
- package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs → _name_-D7MtW4Vu.mjs} +2 -2
- package/.output/server/chunks/build/{_name_-BnS_KEfX.mjs.map → _name_-D7MtW4Vu.mjs.map} +1 -1
- package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs → _uuid_-lvG92ein.mjs} +4 -4
- package/.output/server/chunks/build/{_uuid_-DfJaumTE.mjs.map → _uuid_-lvG92ein.mjs.map} +1 -1
- package/.output/server/chunks/build/account-LDZ4TL6x.mjs +513 -0
- package/.output/server/chunks/build/account-LDZ4TL6x.mjs.map +1 -0
- package/.output/server/chunks/build/app-CGhRZPNT.mjs +252 -0
- package/.output/server/chunks/build/app-CGhRZPNT.mjs.map +1 -0
- package/.output/server/chunks/build/{chat-m4-n9vC6.mjs → chat-BphuYhvA.mjs} +18 -27
- package/.output/server/chunks/build/chat-BphuYhvA.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/cookie-C_iulBi6.mjs +1 -1
- package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs → dashboard-nDujDyOg.mjs} +55 -16
- package/.output/server/chunks/build/{dashboard-CiVTAZuF.mjs.map → dashboard-nDujDyOg.mjs.map} +1 -1
- package/.output/server/chunks/build/{docs-ChGwOPg5.mjs → docs-Bwucwp0r.mjs} +664 -592
- package/.output/server/chunks/build/docs-Bwucwp0r.mjs.map +1 -0
- package/.output/server/chunks/build/fetch-BB7Qzkwe.mjs +1 -1
- package/.output/server/chunks/build/{hooks-D328DcO6.mjs → hooks-D6PmTth8.mjs} +19 -29
- package/.output/server/chunks/build/hooks-D6PmTth8.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CAnGTRlu.mjs → index-CJkn2jiM.mjs} +2 -2
- package/.output/server/chunks/build/{index-CAnGTRlu.mjs.map → index-CJkn2jiM.mjs.map} +1 -1
- package/.output/server/chunks/build/index-CxDxc9fm.mjs +1 -1
- package/.output/server/chunks/build/index-Cz9Y6NwN.mjs +723 -0
- package/.output/server/chunks/build/index-Cz9Y6NwN.mjs.map +1 -0
- package/.output/server/chunks/build/index-hwhuKhuZ.mjs +76 -0
- package/.output/server/chunks/build/index-hwhuKhuZ.mjs.map +1 -0
- package/.output/server/chunks/build/integrations-D5JWURiJ.mjs +1499 -0
- package/.output/server/chunks/build/integrations-D5JWURiJ.mjs.map +1 -0
- package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs → library-DxRdgP6X.mjs} +2 -2
- package/.output/server/chunks/build/{library-Aeg7_Lsb.mjs.map → library-DxRdgP6X.mjs.map} +1 -1
- package/.output/server/chunks/build/{login-DnnElTl2.mjs → login-BmER_VoU.mjs} +2 -2
- package/.output/server/chunks/build/{login-DnnElTl2.mjs.map → login-BmER_VoU.mjs.map} +1 -1
- package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs +669 -0
- package/.output/server/chunks/build/manage-secrets-BWzqc_-f.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +65 -34
- package/.output/server/chunks/build/server.mjs.map +1 -1
- package/.output/server/chunks/build/settings-neokAVE5.mjs +154 -0
- package/.output/server/chunks/build/settings-neokAVE5.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +2 -2
- package/.output/server/chunks/build/{tasks-DnAFqbtt.mjs → tasks-CnpIQNpS.mjs} +27 -37
- package/.output/server/chunks/build/tasks-CnpIQNpS.mjs.map +1 -0
- package/.output/server/chunks/build/{useAgents-DHEXiFSc.mjs → useAgents-nmbkB9-_.mjs} +5 -26
- package/.output/server/chunks/build/useAgents-nmbkB9-_.mjs.map +1 -0
- package/.output/server/chunks/build/{view-n2sYa4Zh.mjs → view-mb0ISqfM.mjs} +3 -3
- package/.output/server/chunks/build/{view-n2sYa4Zh.mjs.map → view-mb0ISqfM.mjs.map} +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +1000 -858
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +17 -2
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +21 -3
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +10 -9
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get9.mjs +10 -8
- package/.output/server/chunks/routes/api/index.get9.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/search.get.mjs +10 -5
- package/.output/server/chunks/routes/api/memory/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/app/components/AssistantPanel.client.vue +16 -314
- package/app/components/agents/AgentCard.vue +111 -0
- package/app/components/agents/AgentInfoCard.vue +54 -0
- package/app/components/agents/AgentRunHistory.vue +103 -0
- package/app/components/agents/AgentRunModal.vue +1 -24
- package/app/components/agents/AgentStatsCards.vue +1 -26
- package/app/components/assistant/AssistantChat.vue +156 -0
- package/app/components/assistant/AssistantTerminal.client.vue +178 -0
- package/app/components/chat/ConversationList.vue +2 -12
- package/app/components/files/FileTree.vue +23 -202
- package/app/components/files/FileTreeModals.vue +226 -0
- package/app/components/hooks/HookStatsCards.vue +1 -6
- package/app/components/hooks/ToolBreakdownTable.vue +1 -6
- package/app/components/search/DashboardSearch.vue +38 -1
- package/app/components/tasks/TaskCard.vue +2 -7
- package/app/components/tasks/TaskDetail.vue +4 -9
- package/app/composables/useSearch.ts +21 -11
- package/app/layouts/dashboard.vue +1 -1
- package/app/pages/agents/[id].vue +6 -197
- package/app/pages/agents/index.vue +9 -142
- package/app/pages/settings/account.vue +243 -0
- package/app/pages/settings/app.vue +230 -0
- package/app/pages/settings/index.vue +12 -0
- package/app/pages/settings/integrations.vue +794 -0
- package/app/pages/settings/manage-secrets.vue +295 -0
- package/app/pages/settings.vue +20 -1581
- package/dist/cli/index.js +676 -212
- package/package.json +1 -1
- package/server/api/agents/index.get.ts +20 -1
- package/server/api/conversations/index.get.ts +23 -5
- package/server/api/documents/index.get.ts +11 -9
- package/server/api/memory/search.get.ts +11 -6
- package/server/api/tasks/index.get.ts +11 -9
- package/server/drizzle/migrations/0016_full_text_search.sql +127 -0
- package/server/drizzle/migrations/meta/_journal.json +7 -0
- package/shared/types/index.ts +7 -1
- package/shared/utils/formatting.ts +105 -0
- package/.output/public/_nuxt/4ALIM-zZ.js +0 -1
- package/.output/public/_nuxt/5sUbkh_6.js +0 -16
- package/.output/public/_nuxt/6bB8Ev7a.js +0 -1
- package/.output/public/_nuxt/7rT1DCe2.js +0 -1
- package/.output/public/_nuxt/B2PqR2Vu.js +0 -1
- package/.output/public/_nuxt/B5FuOh7E.js +0 -1
- package/.output/public/_nuxt/B6om4MW2.js +0 -1
- package/.output/public/_nuxt/B7ikW4eF.js +0 -1
- package/.output/public/_nuxt/B9kWNcU7.js +0 -1
- package/.output/public/_nuxt/BAZ8sewA.js +0 -1
- package/.output/public/_nuxt/BCPwL4ma.js +0 -1
- package/.output/public/_nuxt/BCrlmHh_.js +0 -1
- package/.output/public/_nuxt/BD-AFJWW.js +0 -1
- package/.output/public/_nuxt/BGcQMReV.js +0 -1
- package/.output/public/_nuxt/BNJJSRKh.js +0 -1
- package/.output/public/_nuxt/BNeeERBt.js +0 -1
- package/.output/public/_nuxt/BSJb5amZ.js +0 -1
- package/.output/public/_nuxt/BSsaE9Db.js +0 -1
- package/.output/public/_nuxt/BVO3XpHT.js +0 -1
- package/.output/public/_nuxt/B_Lr1vlV.js +0 -1
- package/.output/public/_nuxt/Bl0qBhCG.js +0 -1
- package/.output/public/_nuxt/Bl43dkDq.js +0 -1
- package/.output/public/_nuxt/BnMTFF5R.js +0 -1
- package/.output/public/_nuxt/BtV7oNn3.js +0 -1
- package/.output/public/_nuxt/BvFYnRMR.js +0 -1
- package/.output/public/_nuxt/BvTUBUNN.js +0 -1
- package/.output/public/_nuxt/ByLsRRoQ.js +0 -1
- package/.output/public/_nuxt/C1LcEMwB.js +0 -1
- package/.output/public/_nuxt/C2IiXp9N.js +0 -2
- package/.output/public/_nuxt/C796kFT9.js +0 -1
- package/.output/public/_nuxt/C8AtdrMH.js +0 -1
- package/.output/public/_nuxt/CAWbHTgy.js +0 -1
- package/.output/public/_nuxt/CJPrV25_.js +0 -1
- package/.output/public/_nuxt/CKKEWapF.js +0 -1
- package/.output/public/_nuxt/CNjv28J2.js +0 -1
- package/.output/public/_nuxt/CT8s4rqa.js +0 -1
- package/.output/public/_nuxt/CZSOrxUy.js +0 -1
- package/.output/public/_nuxt/CaNEL9JC.js +0 -39
- package/.output/public/_nuxt/CbTLg9oX.js +0 -1
- package/.output/public/_nuxt/CfCXpVn5.js +0 -1
- package/.output/public/_nuxt/ChmNlvWR.js +0 -1
- package/.output/public/_nuxt/Ck0QYdxe.js +0 -1
- package/.output/public/_nuxt/Ckb0pu4-.js +0 -1
- package/.output/public/_nuxt/CkwPRs1D.js +0 -1
- package/.output/public/_nuxt/CmEJg8C6.js +0 -2
- package/.output/public/_nuxt/CmL_vMJD.js +0 -1
- package/.output/public/_nuxt/Cq8zPxkT.js +0 -1
- package/.output/public/_nuxt/CxRnB4NC.js +0 -1
- package/.output/public/_nuxt/D0zMyG8n.js +0 -1
- package/.output/public/_nuxt/D1XYB283.js +0 -1
- package/.output/public/_nuxt/D2NxqyzW.js +0 -1
- package/.output/public/_nuxt/D5xyrvFu.js +0 -1
- package/.output/public/_nuxt/D8iBB0Py.js +0 -1
- package/.output/public/_nuxt/D8oIH8m1.js +0 -1
- package/.output/public/_nuxt/DB2zZev7.js +0 -1
- package/.output/public/_nuxt/DBrOAqkm.js +0 -1
- package/.output/public/_nuxt/DDXDFweK.js +0 -1
- package/.output/public/_nuxt/DFZkCmLQ.js +0 -1
- package/.output/public/_nuxt/DKZmgHNU.js +0 -1
- package/.output/public/_nuxt/DR8tGJhL.js +0 -1
- package/.output/public/_nuxt/DVAEVTjy.js +0 -1
- package/.output/public/_nuxt/DVqrPkCJ.js +0 -1
- package/.output/public/_nuxt/DWZ9ieYa.js +0 -1
- package/.output/public/_nuxt/DWj6VsZv.js +0 -1
- package/.output/public/_nuxt/DXJ9PxCv.js +0 -1
- package/.output/public/_nuxt/D_ziPROx.js +0 -1
- package/.output/public/_nuxt/Da2vwoYG.js +0 -1
- package/.output/public/_nuxt/Ddz3HcBB.js +0 -1
- package/.output/public/_nuxt/DgYei0bK.js +0 -1
- package/.output/public/_nuxt/Di_3GV_R.js +0 -1
- package/.output/public/_nuxt/Djog1f_e.js +0 -1
- package/.output/public/_nuxt/Dkap2-Pj.js +0 -7
- package/.output/public/_nuxt/DlJe_sHk.js +0 -1
- package/.output/public/_nuxt/DlPOQpH_.js +0 -1
- package/.output/public/_nuxt/DmYWMtVA.js +0 -1
- package/.output/public/_nuxt/DmxKU7sH.js +0 -1
- package/.output/public/_nuxt/DsodHRrQ.js +0 -1
- package/.output/public/_nuxt/DwSY6_2U.js +0 -1
- package/.output/public/_nuxt/DypJaSm-.js +0 -1
- package/.output/public/_nuxt/DzKaXH6P.js +0 -1
- package/.output/public/_nuxt/FK-jSuOT.js +0 -1
- package/.output/public/_nuxt/Fc2JsQt4.js +0 -1
- package/.output/public/_nuxt/IYCBGuRS.js +0 -1
- package/.output/public/_nuxt/NrRzUJNY.js +0 -1
- package/.output/public/_nuxt/OeVS0Rsb.js +0 -1
- package/.output/public/_nuxt/OlF0QnKF.js +0 -1
- package/.output/public/_nuxt/QuAoqY7t.js +0 -1
- package/.output/public/_nuxt/RlXHkmOd.js +0 -9
- package/.output/public/_nuxt/WZnvL9Dh.js +0 -1
- package/.output/public/_nuxt/ZvG7a1W3.js +0 -1
- package/.output/public/_nuxt/aPNZBVrG.js +0 -1
- package/.output/public/_nuxt/builds/meta/495aca73-bfa5-456e-b96a-f02e009c72d3.json +0 -1
- package/.output/public/_nuxt/dashboard.BxCOkJwt.css +0 -1
- package/.output/public/_nuxt/entry.C_udkZt9.css +0 -1
- package/.output/public/_nuxt/evY81hM3.js +0 -1
- package/.output/public/_nuxt/i6QBzaEi.js +0 -1
- package/.output/public/_nuxt/iTVKJ1kw.js +0 -1
- package/.output/public/_nuxt/j92uR3uR.js +0 -1
- package/.output/public/_nuxt/jdUkeAj_.js +0 -1
- package/.output/public/_nuxt/jeRvcMHU.js +0 -1
- package/.output/public/_nuxt/kuv0zpKq.js +0 -1
- package/.output/public/_nuxt/l3lKQs7b.js +0 -1
- package/.output/public/_nuxt/qIgZ7OXa.js +0 -1
- package/.output/public/_nuxt/qcVwZv8e.js +0 -1
- package/.output/public/_nuxt/ru8fqqWs.js +0 -1
- package/.output/public/_nuxt/sgmhgpCS.js +0 -1
- package/.output/public/_nuxt/y2jv0da-.js +0 -1
- package/.output/public/_nuxt/yyS4-kAX.js +0 -1
- package/.output/public/_nuxt/zIoBLBHF.js +0 -1
- package/.output/public/_nuxt/zpazwPgx.js +0 -1
- package/.output/server/chunks/build/_id_-DN00UDdO.mjs.map +0 -1
- package/.output/server/chunks/build/chat-m4-n9vC6.mjs.map +0 -1
- package/.output/server/chunks/build/docs-ChGwOPg5.mjs.map +0 -1
- package/.output/server/chunks/build/hooks-D328DcO6.mjs.map +0 -1
- package/.output/server/chunks/build/index-C9PuieXh.mjs +0 -820
- package/.output/server/chunks/build/index-C9PuieXh.mjs.map +0 -1
- package/.output/server/chunks/build/settings-B2KXoGcz.mjs +0 -3232
- package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +0 -1
- package/.output/server/chunks/build/tasks-DnAFqbtt.mjs.map +0 -1
- package/.output/server/chunks/build/useAgents-DHEXiFSc.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,12 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { inArray, sql } from 'drizzle-orm'
|
|
2
|
+
import { getDb, schema } from '~~/server/db'
|
|
2
3
|
import { requireDb } from '~~/server/utils/db-guard'
|
|
3
4
|
|
|
4
5
|
export default defineEventHandler(async (event) => {
|
|
5
6
|
requireDb(event)
|
|
6
7
|
|
|
8
|
+
const query = getQuery(event)
|
|
9
|
+
const search = query.search as string | undefined
|
|
10
|
+
|
|
7
11
|
const db = getDb()
|
|
8
12
|
|
|
13
|
+
// Full-text search via tsvector + GIN index
|
|
14
|
+
let where
|
|
15
|
+
if (search) {
|
|
16
|
+
const ftsResult = await db.execute<{ id: string }>(sql`
|
|
17
|
+
SELECT id FROM cron_agents
|
|
18
|
+
WHERE search_vector @@ plainto_tsquery('english', ${search})
|
|
19
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', ${search})) DESC
|
|
20
|
+
LIMIT 50
|
|
21
|
+
`)
|
|
22
|
+
const ids = ftsResult.map(r => r.id)
|
|
23
|
+
if (ids.length === 0) return { data: [] }
|
|
24
|
+
where = inArray(schema.cronAgents.id, ids)
|
|
25
|
+
}
|
|
26
|
+
|
|
9
27
|
const agents = await db.query.cronAgents.findMany({
|
|
28
|
+
where,
|
|
10
29
|
with: { creator: true },
|
|
11
30
|
orderBy: (agents, { asc }) => [asc(agents.name)]
|
|
12
31
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { desc } from 'drizzle-orm'
|
|
1
|
+
import { desc, inArray, sql } from 'drizzle-orm'
|
|
2
2
|
import { getDb } from '~~/server/db'
|
|
3
3
|
import * as schema from '~~/server/db/schema'
|
|
4
4
|
import { requireDb } from '~~/server/utils/db-guard'
|
|
@@ -6,13 +6,31 @@ import { requireDb } from '~~/server/utils/db-guard'
|
|
|
6
6
|
export default defineEventHandler(async (event) => {
|
|
7
7
|
requireDb(event)
|
|
8
8
|
|
|
9
|
+
const query = getQuery(event)
|
|
10
|
+
const search = query.search as string | undefined
|
|
11
|
+
|
|
9
12
|
const db = getDb()
|
|
10
13
|
|
|
14
|
+
// Full-text search via tsvector + GIN index
|
|
15
|
+
let where
|
|
16
|
+
if (search) {
|
|
17
|
+
const ftsResult = await db.execute<{ id: string }>(sql`
|
|
18
|
+
SELECT id FROM conversations
|
|
19
|
+
WHERE search_vector @@ plainto_tsquery('english', ${search})
|
|
20
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', ${search})) DESC
|
|
21
|
+
LIMIT 50
|
|
22
|
+
`)
|
|
23
|
+
const ids = ftsResult.map(r => r.id)
|
|
24
|
+
if (ids.length === 0) return { data: [] }
|
|
25
|
+
where = inArray(schema.conversations.id, ids)
|
|
26
|
+
}
|
|
27
|
+
|
|
11
28
|
// Main Chat always first, then by most recent
|
|
12
|
-
const conversations = await db.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
29
|
+
const conversations = await db.query.conversations.findMany({
|
|
30
|
+
where,
|
|
31
|
+
orderBy: [desc(schema.conversations.isMain), desc(schema.conversations.startedAt)],
|
|
32
|
+
limit: 50
|
|
33
|
+
})
|
|
16
34
|
|
|
17
35
|
return { data: conversations }
|
|
18
36
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { eq, isNull,
|
|
1
|
+
import { eq, isNull, inArray, and, sql } from 'drizzle-orm'
|
|
2
2
|
import { getDb } from '~~/server/db'
|
|
3
3
|
import * as schema from '~~/server/db/schema'
|
|
4
4
|
import { requireDb } from '~~/server/utils/db-guard'
|
|
@@ -24,15 +24,17 @@ export default defineEventHandler(async (event) => {
|
|
|
24
24
|
if (fileType)
|
|
25
25
|
conditions.push(eq(schema.documents.fileType, fileType))
|
|
26
26
|
|
|
27
|
+
// Full-text search via tsvector + GIN index
|
|
27
28
|
if (search) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
29
|
+
const ftsResult = await db.execute<{ id: string }>(sql`
|
|
30
|
+
SELECT id FROM documents
|
|
31
|
+
WHERE search_vector @@ plainto_tsquery('english', ${search})
|
|
32
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', ${search})) DESC
|
|
33
|
+
LIMIT 50
|
|
34
|
+
`)
|
|
35
|
+
const ids = ftsResult.map(r => r.id)
|
|
36
|
+
if (ids.length === 0) return { data: [] }
|
|
37
|
+
conditions.push(inArray(schema.documents.id, ids))
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
const documents = await db.query.documents.findMany({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sql, desc, eq, and, gte,
|
|
1
|
+
import { sql, desc, eq, and, gte, inArray } from 'drizzle-orm'
|
|
2
2
|
import { getDb, schema } from '~~/server/db'
|
|
3
3
|
import { requireDb } from '~~/server/utils/db-guard'
|
|
4
4
|
import type { MemoryChunk, MemoryChunkType } from '~~/shared/types'
|
|
@@ -29,12 +29,17 @@ export default defineEventHandler(async (event) => {
|
|
|
29
29
|
if (minRelevance !== undefined)
|
|
30
30
|
conditions.push(gte(schema.memoryChunks.relevanceScore, minRelevance))
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// Full-text search via tsvector + GIN index
|
|
33
33
|
if (searchQuery) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const ftsResult = await db.execute<{ id: string }>(sql`
|
|
35
|
+
SELECT id FROM memory_chunks
|
|
36
|
+
WHERE search_vector @@ plainto_tsquery('english', ${searchQuery})
|
|
37
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', ${searchQuery})) DESC
|
|
38
|
+
LIMIT ${limit}
|
|
39
|
+
`)
|
|
40
|
+
const ids = ftsResult.map(r => r.id)
|
|
41
|
+
if (ids.length === 0) return { data: [] as MemoryChunk[] }
|
|
42
|
+
conditions.push(inArray(schema.memoryChunks.id, ids))
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
let dbQuery = db.select()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { eq, isNull,
|
|
1
|
+
import { eq, isNull, inArray, and, sql } from 'drizzle-orm'
|
|
2
2
|
import { getDb, schema } from '~~/server/db'
|
|
3
3
|
import { requireDb } from '~~/server/utils/db-guard'
|
|
4
4
|
|
|
@@ -29,15 +29,17 @@ export default defineEventHandler(async (event) => {
|
|
|
29
29
|
if (projectId)
|
|
30
30
|
conditions.push(eq(schema.tasks.projectId, projectId))
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// Full-text search via tsvector + GIN index
|
|
33
33
|
if (search) {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
)
|
|
34
|
+
const ftsResult = await db.execute<{ id: string }>(sql`
|
|
35
|
+
SELECT id FROM tasks
|
|
36
|
+
WHERE search_vector @@ plainto_tsquery('english', ${search})
|
|
37
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', ${search})) DESC
|
|
38
|
+
LIMIT 50
|
|
39
|
+
`)
|
|
40
|
+
const ids = ftsResult.map(r => r.id)
|
|
41
|
+
if (ids.length === 0) return { data: [] }
|
|
42
|
+
conditions.push(inArray(schema.tasks.id, ids))
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
const tasks = await db.query.tasks.findMany({
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
-- Full-Text Search: Add tsvector columns, GIN indexes, and auto-update triggers
|
|
2
|
+
-- This migration enables PostgreSQL full-text search across 5 tables.
|
|
3
|
+
|
|
4
|
+
-- =============================================================================
|
|
5
|
+
-- TASKS
|
|
6
|
+
-- =============================================================================
|
|
7
|
+
|
|
8
|
+
ALTER TABLE tasks ADD COLUMN search_vector tsvector;
|
|
9
|
+
|
|
10
|
+
CREATE INDEX idx_tasks_search ON tasks USING GIN (search_vector);
|
|
11
|
+
|
|
12
|
+
CREATE OR REPLACE FUNCTION tasks_search_vector_update() RETURNS trigger AS $$
|
|
13
|
+
BEGIN
|
|
14
|
+
NEW.search_vector := to_tsvector('english',
|
|
15
|
+
coalesce(NEW.title, '') || ' ' || coalesce(NEW.description, '')
|
|
16
|
+
);
|
|
17
|
+
RETURN NEW;
|
|
18
|
+
END;
|
|
19
|
+
$$ LANGUAGE plpgsql;
|
|
20
|
+
|
|
21
|
+
CREATE TRIGGER tasks_search_vector_trigger
|
|
22
|
+
BEFORE INSERT OR UPDATE OF title, description ON tasks
|
|
23
|
+
FOR EACH ROW EXECUTE FUNCTION tasks_search_vector_update();
|
|
24
|
+
|
|
25
|
+
UPDATE tasks SET search_vector = to_tsvector('english',
|
|
26
|
+
coalesce(title, '') || ' ' || coalesce(description, '')
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
-- =============================================================================
|
|
30
|
+
-- DOCUMENTS
|
|
31
|
+
-- =============================================================================
|
|
32
|
+
|
|
33
|
+
ALTER TABLE documents ADD COLUMN search_vector tsvector;
|
|
34
|
+
|
|
35
|
+
CREATE INDEX idx_documents_search ON documents USING GIN (search_vector);
|
|
36
|
+
|
|
37
|
+
CREATE OR REPLACE FUNCTION documents_search_vector_update() RETURNS trigger AS $$
|
|
38
|
+
BEGIN
|
|
39
|
+
NEW.search_vector := to_tsvector('english',
|
|
40
|
+
coalesce(NEW.title, '') || ' ' || coalesce(NEW.content, '') || ' ' || coalesce(NEW.path, '')
|
|
41
|
+
);
|
|
42
|
+
RETURN NEW;
|
|
43
|
+
END;
|
|
44
|
+
$$ LANGUAGE plpgsql;
|
|
45
|
+
|
|
46
|
+
CREATE TRIGGER documents_search_vector_trigger
|
|
47
|
+
BEFORE INSERT OR UPDATE OF title, content, path ON documents
|
|
48
|
+
FOR EACH ROW EXECUTE FUNCTION documents_search_vector_update();
|
|
49
|
+
|
|
50
|
+
UPDATE documents SET search_vector = to_tsvector('english',
|
|
51
|
+
coalesce(title, '') || ' ' || coalesce(content, '') || ' ' || coalesce(path, '')
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
-- =============================================================================
|
|
55
|
+
-- MEMORY CHUNKS
|
|
56
|
+
-- =============================================================================
|
|
57
|
+
|
|
58
|
+
ALTER TABLE memory_chunks ADD COLUMN search_vector tsvector;
|
|
59
|
+
|
|
60
|
+
CREATE INDEX idx_memory_chunks_search ON memory_chunks USING GIN (search_vector);
|
|
61
|
+
|
|
62
|
+
CREATE OR REPLACE FUNCTION memory_chunks_search_vector_update() RETURNS trigger AS $$
|
|
63
|
+
BEGIN
|
|
64
|
+
NEW.search_vector := to_tsvector('english',
|
|
65
|
+
coalesce(NEW.content, '') || ' ' || coalesce(NEW.source_excerpt, '')
|
|
66
|
+
);
|
|
67
|
+
RETURN NEW;
|
|
68
|
+
END;
|
|
69
|
+
$$ LANGUAGE plpgsql;
|
|
70
|
+
|
|
71
|
+
CREATE TRIGGER memory_chunks_search_vector_trigger
|
|
72
|
+
BEFORE INSERT OR UPDATE OF content, source_excerpt ON memory_chunks
|
|
73
|
+
FOR EACH ROW EXECUTE FUNCTION memory_chunks_search_vector_update();
|
|
74
|
+
|
|
75
|
+
UPDATE memory_chunks SET search_vector = to_tsvector('english',
|
|
76
|
+
coalesce(content, '') || ' ' || coalesce(source_excerpt, '')
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
-- =============================================================================
|
|
80
|
+
-- CRON AGENTS
|
|
81
|
+
-- =============================================================================
|
|
82
|
+
|
|
83
|
+
ALTER TABLE cron_agents ADD COLUMN search_vector tsvector;
|
|
84
|
+
|
|
85
|
+
CREATE INDEX idx_cron_agents_search ON cron_agents USING GIN (search_vector);
|
|
86
|
+
|
|
87
|
+
CREATE OR REPLACE FUNCTION cron_agents_search_vector_update() RETURNS trigger AS $$
|
|
88
|
+
BEGIN
|
|
89
|
+
NEW.search_vector := to_tsvector('english',
|
|
90
|
+
coalesce(NEW.name, '') || ' ' || coalesce(NEW.description, '') || ' ' || coalesce(NEW.prompt, '')
|
|
91
|
+
);
|
|
92
|
+
RETURN NEW;
|
|
93
|
+
END;
|
|
94
|
+
$$ LANGUAGE plpgsql;
|
|
95
|
+
|
|
96
|
+
CREATE TRIGGER cron_agents_search_vector_trigger
|
|
97
|
+
BEFORE INSERT OR UPDATE OF name, description, prompt ON cron_agents
|
|
98
|
+
FOR EACH ROW EXECUTE FUNCTION cron_agents_search_vector_update();
|
|
99
|
+
|
|
100
|
+
UPDATE cron_agents SET search_vector = to_tsvector('english',
|
|
101
|
+
coalesce(name, '') || ' ' || coalesce(description, '') || ' ' || coalesce(prompt, '')
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
-- =============================================================================
|
|
105
|
+
-- CONVERSATIONS
|
|
106
|
+
-- =============================================================================
|
|
107
|
+
|
|
108
|
+
ALTER TABLE conversations ADD COLUMN search_vector tsvector;
|
|
109
|
+
|
|
110
|
+
CREATE INDEX idx_conversations_search ON conversations USING GIN (search_vector);
|
|
111
|
+
|
|
112
|
+
CREATE OR REPLACE FUNCTION conversations_search_vector_update() RETURNS trigger AS $$
|
|
113
|
+
BEGIN
|
|
114
|
+
NEW.search_vector := to_tsvector('english',
|
|
115
|
+
coalesce(NEW.title, '') || ' ' || coalesce(NEW.summary, '')
|
|
116
|
+
);
|
|
117
|
+
RETURN NEW;
|
|
118
|
+
END;
|
|
119
|
+
$$ LANGUAGE plpgsql;
|
|
120
|
+
|
|
121
|
+
CREATE TRIGGER conversations_search_vector_trigger
|
|
122
|
+
BEFORE INSERT OR UPDATE OF title, summary ON conversations
|
|
123
|
+
FOR EACH ROW EXECUTE FUNCTION conversations_search_vector_update();
|
|
124
|
+
|
|
125
|
+
UPDATE conversations SET search_vector = to_tsvector('english',
|
|
126
|
+
coalesce(title, '') || ' ' || coalesce(summary, '')
|
|
127
|
+
);
|
|
@@ -113,6 +113,13 @@
|
|
|
113
113
|
"when": 1771736174854,
|
|
114
114
|
"tag": "0015_great_mephistopheles",
|
|
115
115
|
"breakpoints": true
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"idx": 16,
|
|
119
|
+
"version": "7",
|
|
120
|
+
"when": 1772006400000,
|
|
121
|
+
"tag": "0016_full_text_search",
|
|
122
|
+
"breakpoints": true
|
|
116
123
|
}
|
|
117
124
|
]
|
|
118
125
|
}
|
package/shared/types/index.ts
CHANGED
|
@@ -207,10 +207,16 @@ export interface PublicDocumentResponse {
|
|
|
207
207
|
|
|
208
208
|
export interface Conversation {
|
|
209
209
|
id: string
|
|
210
|
+
sessionId: string
|
|
211
|
+
sdkSessionId?: string
|
|
212
|
+
title?: string
|
|
213
|
+
summary?: string
|
|
214
|
+
status: 'idle' | 'streaming' | 'interrupted' | 'error'
|
|
215
|
+
totalCostUsd: number
|
|
216
|
+
isMain: boolean
|
|
210
217
|
startedAt: Date
|
|
211
218
|
endedAt?: Date
|
|
212
219
|
messageCount: number
|
|
213
|
-
summary?: string
|
|
214
220
|
}
|
|
215
221
|
|
|
216
222
|
export interface ConversationDetail extends Conversation {
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared formatting utilities used across pages and components.
|
|
3
|
+
* Eliminates duplication of common date, duration, and status formatting.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** Format a cron expression to a human-readable string */
|
|
7
|
+
export function formatSchedule(schedule: string): string {
|
|
8
|
+
const parts = schedule.split(' ')
|
|
9
|
+
if (parts.length !== 5) return schedule
|
|
10
|
+
|
|
11
|
+
const min = parts[0]!
|
|
12
|
+
const hour = parts[1]!
|
|
13
|
+
const dayOfMonth = parts[2]!
|
|
14
|
+
const month = parts[3]!
|
|
15
|
+
const dayOfWeek = parts[4]!
|
|
16
|
+
|
|
17
|
+
if (min === '0' && hour === '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*')
|
|
18
|
+
return 'Every hour'
|
|
19
|
+
if (min === '*/5' && hour === '*' && dayOfMonth === '*' && month === '*' && dayOfWeek === '*')
|
|
20
|
+
return 'Every 5 minutes'
|
|
21
|
+
if (dayOfMonth === '*' && month === '*' && dayOfWeek === '*' && hour !== '*')
|
|
22
|
+
return `Daily at ${hour}:${min.padStart(2, '0')}`
|
|
23
|
+
if (dayOfWeek === '0' && dayOfMonth === '*' && month === '*')
|
|
24
|
+
return `Weekly on Sunday at ${hour}:${min.padStart(2, '0')}`
|
|
25
|
+
|
|
26
|
+
return schedule
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Format a date to a relative time string (e.g. "5m ago", "3h ago") */
|
|
30
|
+
export function formatRelativeTime(date?: Date | string | null): string {
|
|
31
|
+
if (!date) return 'Never'
|
|
32
|
+
const d = new Date(date)
|
|
33
|
+
const now = new Date()
|
|
34
|
+
const diff = now.getTime() - d.getTime()
|
|
35
|
+
const minutes = Math.floor(diff / 60000)
|
|
36
|
+
const hours = Math.floor(diff / 3600000)
|
|
37
|
+
const days = Math.floor(diff / 86400000)
|
|
38
|
+
|
|
39
|
+
if (minutes < 1) return 'Just now'
|
|
40
|
+
if (minutes < 60) return `${minutes}m ago`
|
|
41
|
+
if (hours < 24) return `${hours}h ago`
|
|
42
|
+
return `${days}d ago`
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Format milliseconds to a human-readable duration (e.g. "1.2s", "3.5m") */
|
|
46
|
+
export function formatDuration(ms?: number | null): string {
|
|
47
|
+
if (!ms) return '-'
|
|
48
|
+
if (ms < 1000) return `${ms}ms`
|
|
49
|
+
if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`
|
|
50
|
+
return `${(ms / 60000).toFixed(1)}m`
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Format a date to a locale string (e.g. "Feb 23, 2026, 10:30:00 AM") */
|
|
54
|
+
export function formatDateTime(date?: Date | string | null): string {
|
|
55
|
+
if (!date) return '-'
|
|
56
|
+
return new Date(date).toLocaleString()
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Format a date as short date (e.g. "Feb 23, 2026") */
|
|
60
|
+
export function formatDate(date?: Date | string | null): string {
|
|
61
|
+
if (!date) return ''
|
|
62
|
+
return new Date(date).toLocaleDateString('en-US', {
|
|
63
|
+
month: 'short',
|
|
64
|
+
day: 'numeric',
|
|
65
|
+
year: 'numeric'
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Format a date as short (no year) for compact displays (e.g. "Feb 23") */
|
|
70
|
+
export function formatDateShort(date?: Date | string | null): string {
|
|
71
|
+
if (!date) return ''
|
|
72
|
+
return new Date(date).toLocaleDateString('en-US', {
|
|
73
|
+
month: 'short',
|
|
74
|
+
day: 'numeric'
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Format a date with weekday for detail views (e.g. "Sun, Feb 23, 2026") */
|
|
79
|
+
export function formatDateLong(date?: Date | string | null): string {
|
|
80
|
+
if (!date) return ''
|
|
81
|
+
return new Date(date).toLocaleDateString('en-US', {
|
|
82
|
+
weekday: 'short',
|
|
83
|
+
month: 'short',
|
|
84
|
+
day: 'numeric',
|
|
85
|
+
year: 'numeric'
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Format a currency value (e.g. "$1.23" or "<$0.01") */
|
|
90
|
+
export function formatCurrency(value: number): string {
|
|
91
|
+
if (value < 0.01) return '<$0.01'
|
|
92
|
+
return `$${value.toFixed(2)}`
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Map agent/run status to a UI badge color */
|
|
96
|
+
export function getStatusColor(status?: string): 'success' | 'error' | 'warning' | 'info' | 'neutral' {
|
|
97
|
+
switch (status) {
|
|
98
|
+
case 'success': return 'success'
|
|
99
|
+
case 'error': return 'error'
|
|
100
|
+
case 'budget_exceeded': return 'warning'
|
|
101
|
+
case 'running': return 'info'
|
|
102
|
+
case 'cancelled': return 'neutral'
|
|
103
|
+
default: return 'neutral'
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as r,c,G as n,T as p,a4 as u,W as i,am as s}from"./D6tVZcRs.js";const m={base:"list-disc ps-6 my-5 marker:text-(--ui-border-accented)"},_={__name:"ProseUl",props:{class:{type:null,required:!1}},setup(e){const a=e,t=r(),o=c(()=>s({extend:s(m),...t.ui?.prose?.ul||{}}));return(l,d)=>(p(),n("ul",{class:i(o.value({class:a.class}))},[u(l.$slots,"default")],2))}};export{_ as default};
|