cognova 0.2.0 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/-AsXrBBy.js +1 -0
- package/.output/public/_nuxt/2W1RPpXM.js +71 -0
- package/.output/public/_nuxt/{C4pxqdgg.js → 5UFq_rDn.js} +1 -1
- package/.output/public/_nuxt/5Zh-9l8_.js +1 -0
- package/.output/public/_nuxt/{DK9jxJ0g.js → 90UksHlj.js} +1 -1
- package/.output/public/_nuxt/{9IQmsEjr.js → 9QKmiSP_.js} +1 -1
- package/.output/public/_nuxt/{BOj6t-oo.js → ARbTpeGy.js} +1 -1
- package/.output/public/_nuxt/{DyRelyfs.js → ApfLnl06.js} +1 -1
- package/.output/public/_nuxt/{DznawRFW.js → B-2BuR5g.js} +1 -1
- package/.output/public/_nuxt/B4u7Mczo.js +1 -0
- package/.output/public/_nuxt/{DAQhmSv4.js → B5dI_yLq.js} +1 -1
- package/.output/public/_nuxt/{Bm9LyG4F.js → B6fnZcA6.js} +1 -1
- package/.output/public/_nuxt/{9QnH0xQM.js → B7uMSBlN.js} +1 -1
- package/.output/public/_nuxt/BBiRyPlN.js +1 -0
- package/.output/public/_nuxt/{iBGCpHdw.js → BF7413u4.js} +2 -2
- package/.output/public/_nuxt/{4MiwzAAt.js → BGtUoCgi.js} +2 -2
- package/.output/public/_nuxt/{CxuZBC8n.js → BHe4VLtR.js} +1 -1
- package/.output/public/_nuxt/{D3RiUGdz.js → BIMBp1Tj.js} +1 -1
- package/.output/public/_nuxt/{g20UHUCv.js → BIvPdoE3.js} +1 -1
- package/.output/public/_nuxt/BKaRtCjP.js +1 -0
- package/.output/public/_nuxt/BLmc9T7l.js +1 -0
- package/.output/public/_nuxt/BMdnU6BF.js +1 -0
- package/.output/public/_nuxt/{CKkC3Ptm.js → BOgdaA_8.js} +1 -1
- package/.output/public/_nuxt/{BffWCM73.js → BQZfTrUg.js} +1 -1
- package/.output/public/_nuxt/BQnublTW.js +1 -0
- package/.output/public/_nuxt/BSsvedap.js +1 -0
- package/.output/public/_nuxt/{Ci7UEZQh.js → BVypxKRT.js} +1 -1
- package/.output/public/_nuxt/{CYP_MLH8.js → BWqJFnZy.js} +1 -1
- package/.output/public/_nuxt/BXxYdXMr.js +1 -0
- package/.output/public/_nuxt/{D_3Rq1BS.js → B_17gAr_.js} +1 -1
- package/.output/public/_nuxt/B_qzFVK_.js +1 -0
- package/.output/public/_nuxt/{BqKFIuRj.js → BbRPwpIX.js} +1 -1
- package/.output/public/_nuxt/BhrzKbv9.js +1 -0
- package/.output/public/_nuxt/{Cqy_L_ip.js → Bl6LNGlA.js} +1 -1
- package/.output/public/_nuxt/{Fukkqjkf.js → BlPToGni.js} +1 -1
- package/.output/public/_nuxt/{DHKLCQRG.js → BlwHr46F.js} +1 -1
- package/.output/public/_nuxt/{C6aqGHu1.js → BnmwiZbF.js} +1 -1
- package/.output/public/_nuxt/BqtxLJaf.js +1 -0
- package/.output/public/_nuxt/{eko-0FUm.js → BrEXdify.js} +1 -1
- package/.output/public/_nuxt/{D3e44mCL.js → BtNnS4m3.js} +1 -1
- package/.output/public/_nuxt/{BCtfQCzC.js → BtVIBBUN.js} +1 -1
- package/.output/public/_nuxt/Bw5h4Jaf.js +1 -0
- package/.output/public/_nuxt/{FvlxxmNk.js → Bwcpy7gC.js} +2 -2
- package/.output/public/_nuxt/{Db2v8O7O.js → C0TUK31m.js} +1 -1
- package/.output/public/_nuxt/C1T4GK6c.js +1 -0
- package/.output/public/_nuxt/C2ANDZen.js +1 -0
- package/.output/public/_nuxt/{CqU2XbzO.js → C2RZSTuy.js} +1 -1
- package/.output/public/_nuxt/C3dYlP5x.js +1 -0
- package/.output/public/_nuxt/{m5kGCDpI.js → C3sh_tLi.js} +3 -3
- package/.output/public/_nuxt/{BjjCvHLT.js → C4zyxZG7.js} +1 -1
- package/.output/public/_nuxt/{C3FxIITy.js → C5I-XBZT.js} +1 -1
- package/.output/public/_nuxt/{yuf23kh9.js → CC4Goztu.js} +1 -1
- package/.output/public/_nuxt/CC77iplr.js +1 -0
- package/.output/public/_nuxt/{xuzLdW-o.js → CFyD2NHP.js} +1 -1
- package/.output/public/_nuxt/{CsJ9KhQ4.js → CGQDTeaO.js} +1 -1
- package/.output/public/_nuxt/{DnjGH3SQ.js → CHpwuMSk.js} +1 -1
- package/.output/public/_nuxt/CLzcRUcs.js +1 -0
- package/.output/public/_nuxt/CM2phu_3.js +1 -0
- package/.output/public/_nuxt/{Cr8ixbr1.js → CQpYRq61.js} +1 -1
- package/.output/public/_nuxt/{C0JKNMDO.js → CUN4bYcg.js} +1 -1
- package/.output/public/_nuxt/{CmzH6R-N.js → CXoITXft.js} +19 -19
- package/.output/public/_nuxt/CYjcQPl-.js +1 -0
- package/.output/public/_nuxt/{DGX0tzL8.js → CZ32KfaS.js} +1 -1
- package/.output/public/_nuxt/CclZMdca.js +1 -0
- package/.output/public/_nuxt/{C69W7k2j.js → CdpT_Vb6.js} +1 -1
- package/.output/public/_nuxt/CflRLvFC.js +1 -0
- package/.output/public/_nuxt/{gBC9k4Qj.js → CkqNv7sq.js} +2 -2
- package/.output/public/_nuxt/ClXDAYjE.js +1 -0
- package/.output/public/_nuxt/CrZGoMo_.js +1 -0
- package/.output/public/_nuxt/{BZXMQuYP.js → CvJtd2Af.js} +1 -1
- package/.output/public/_nuxt/{DKZxeXDQ.js → Cwtd8e-P.js} +1 -1
- package/.output/public/_nuxt/{nIU2F7ia.js → Cx44SSNp.js} +3 -3
- package/.output/public/_nuxt/{BzOqrmGa.js → CxEVzuCn.js} +3 -3
- package/.output/public/_nuxt/{Dy_Cq5LQ.js → CzIMQevQ.js} +1 -1
- package/.output/public/_nuxt/{D6t3dcTl.js → D0P9llU7.js} +1 -1
- package/.output/public/_nuxt/{JJ3634gV.js → D1DYuOOm.js} +1 -1
- package/.output/public/_nuxt/{BAIz-dEB.js → D1dDc8Vw.js} +1 -1
- package/.output/public/_nuxt/{DSRrg8JT.js → D1r0uqf3.js} +1 -1
- package/.output/public/_nuxt/{CNnJrDvu.js → D3a8R1T6.js} +1 -1
- package/.output/public/_nuxt/{B1X4Bzcy.js → D5EZbuub.js} +1 -1
- package/.output/public/_nuxt/D9V13KTK.js +1 -0
- package/.output/public/_nuxt/DAE2hbP7.js +1 -0
- package/.output/public/_nuxt/{Cvp7FI3T.js → DAIbdyS6.js} +1 -1
- package/.output/public/_nuxt/{EuOqK1A6.js → DAvlXjt0.js} +1 -1
- package/.output/public/_nuxt/DBKzwexZ.js +1 -0
- package/.output/public/_nuxt/{wCGVE8_e.js → DEATxnaF.js} +1 -1
- package/.output/public/_nuxt/{cABRLVee.js → DFg8PvHV.js} +1 -1
- package/.output/public/_nuxt/DM4MyqI-.js +1 -0
- package/.output/public/_nuxt/{Cdt3I3Go.js → DNE7kw9s.js} +1 -1
- package/.output/public/_nuxt/DO0oG4fG.js +1 -0
- package/.output/public/_nuxt/{B6S_ob86.js → DPFugPaB.js} +1 -1
- package/.output/public/_nuxt/{DJjDvbZE.js → DQlXU6_H.js} +1 -1
- package/.output/public/_nuxt/DQvuQpwh.js +1 -0
- package/.output/public/_nuxt/{sf57orEk.js → DRlG_bnX.js} +1 -1
- package/.output/public/_nuxt/{C6RC3lA1.js → DSQj-oMk.js} +1 -1
- package/.output/public/_nuxt/{CeIVm4A3.js → DU6ewLkE.js} +1 -1
- package/.output/public/_nuxt/{Cp2MA0cm.js → DWhzQg7B.js} +1 -1
- package/.output/public/_nuxt/{DJMS2og1.js → D_vK6VPK.js} +1 -1
- package/.output/public/_nuxt/{CihWZmJe.js → DaBp0Gba.js} +2 -2
- package/.output/public/_nuxt/DaH2FbAy.js +1 -0
- package/.output/public/_nuxt/{CtYFj7k1.js → DaJo0CeV.js} +1 -1
- package/.output/public/_nuxt/DauLdT7p.js +1 -0
- package/.output/public/_nuxt/{DG-T44jj.js → DdPA4eTX.js} +1 -1
- package/.output/public/_nuxt/{YuTZB7sD.js → DeAGWdWK.js} +1 -1
- package/.output/public/_nuxt/{CitkKxhw.js → DfF1qofg.js} +1 -1
- package/.output/public/_nuxt/{Daz4MeL6.js → DiGBA-aA.js} +1 -1
- package/.output/public/_nuxt/DiJxF69i.js +1 -0
- package/.output/public/_nuxt/{DIoI0uJm.js → DkBIU-1F.js} +1 -1
- package/.output/public/_nuxt/DmAM6bZ0.js +1 -0
- package/.output/public/_nuxt/DmeAKr3J.js +1 -0
- package/.output/public/_nuxt/DmmTnMzZ.js +1 -0
- package/.output/public/_nuxt/{Lwdv_RKd.js → DqsUSndS.js} +1 -1
- package/.output/public/_nuxt/Dvw-hR3Y.js +1 -0
- package/.output/public/_nuxt/{CVgTJeSq.js → Dz6sfh81.js} +1 -1
- package/.output/public/_nuxt/{BYjadNrw.js → FNhYm5FX.js} +1 -1
- package/.output/public/_nuxt/{Nb2jBtYT.js → HOeKUnra.js} +1 -1
- package/.output/public/_nuxt/{CtchsY6e.js → IR1jkN7B.js} +1 -1
- package/.output/public/_nuxt/{DCzfkCGa.js → MpTk6K7N.js} +1 -1
- package/.output/public/_nuxt/NZ7Wz6LP.js +1 -0
- package/.output/public/_nuxt/{DfQu3kEw.js → PqWbiAD2.js} +1 -1
- package/.output/public/_nuxt/{Jez9DHn7.js → Tu4FhMRc.js} +1 -1
- package/.output/public/_nuxt/{B3y_Qqox.js → UKPXYG4z.js} +1 -1
- package/.output/public/_nuxt/{BlAZO7nq.js → UO2Y9Nve.js} +1 -1
- package/.output/public/_nuxt/{KKK6HVeG.js → XHiJSquP.js} +1 -1
- package/.output/public/_nuxt/YGWAImQo.js +1 -0
- package/.output/public/_nuxt/{ghuJ76mD.js → ZR87XvwB.js} +1 -1
- package/.output/public/_nuxt/{yNrp2XvX.js → _E89BQAO.js} +1 -1
- package/.output/public/_nuxt/{C_BdYLzz.js → aiXk7zRt.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/91727fcc-bf7f-407f-9b1e-092017fcfee0.json +1 -0
- package/.output/public/_nuxt/cL7whuPe.js +1 -0
- package/.output/public/_nuxt/{BasgsT_S.js → ct6_k5IW.js} +1 -1
- package/.output/public/_nuxt/entry._7ZkP07A.css +1 -0
- package/.output/public/_nuxt/{DTDgHTuh.js → fEUQvmn8.js} +2 -2
- package/.output/public/_nuxt/{FNC8XZTk.js → gGlaVUMD.js} +1 -1
- package/.output/public/_nuxt/gjmGkVlL.js +1 -0
- package/.output/public/_nuxt/{IRSbVPIu.js → m5001Uvl.js} +1 -1
- package/.output/public/_nuxt/{_CYZi8HN.js → mQkFCz_M.js} +1 -1
- package/.output/public/_nuxt/{BxXOsXrM.js → p9l1LjVc.js} +10 -10
- package/.output/public/_nuxt/{BsEZoHd1.js → qR_K5W8V.js} +1 -1
- package/.output/public/_nuxt/{BrNqhp1a.js → t_9QQ4MF.js} +7 -7
- package/.output/public/_nuxt/{pcUI-zuY.js → uc4c4mfb.js} +1 -1
- package/.output/public/_nuxt/{usage.vakN1lvi.css → usage.BDeyCZwW.css} +1 -1
- package/.output/public/_nuxt/wPSLEMBw.js +1 -0
- package/.output/public/_nuxt/xKRwul0f.js +1 -0
- package/.output/public/_nuxt/{BWhMnjID.js → xgpiGSxb.js} +1 -1
- package/.output/public/_nuxt/xxnk7j0F.js +1 -0
- package/.output/public/favicon.svg +1 -0
- package/.output/server/chunks/build/A-BWukSPjS.mjs +1 -0
- package/.output/server/chunks/build/Accordion-BaJYea6e.mjs +1 -0
- package/.output/server/chunks/build/AccordionItem-DdG2zgcN.mjs +1 -0
- package/.output/server/chunks/build/Badge-BrU9UkCv.mjs +1 -0
- package/.output/server/chunks/build/Blockquote-DND8wTkU.mjs +1 -0
- package/.output/server/chunks/build/Callout-1halpaEg.mjs +1 -0
- package/.output/server/chunks/build/Card-BHCSDKDt.mjs +1 -0
- package/.output/server/chunks/build/CardGroup-BOuJcNGp.mjs +1 -0
- package/.output/server/chunks/build/Caution-BP3y-TcC.mjs +1 -0
- package/.output/server/chunks/build/Code-B1xkAS5a.mjs +1 -0
- package/.output/server/chunks/build/CodeCollapse-BIhaNa22.mjs +1 -0
- package/.output/server/chunks/build/CodeGroup-BviYyCuo.mjs +1 -0
- package/.output/server/chunks/build/CodeIcon-CWD5HcV7.mjs +2 -1
- package/.output/server/chunks/build/CodePreview-D8PsCQ6m.mjs +1 -0
- package/.output/server/chunks/build/CodeTree-BUTLupmL.mjs +1 -0
- package/.output/server/chunks/build/Collapsible-BIvXNaSq.mjs +1 -0
- package/.output/server/chunks/build/DropdownMenu-BBrV9nXz.mjs +1 -1
- package/.output/server/chunks/build/EditorToolbar-DIfb5arC.mjs +1 -1
- package/.output/server/chunks/build/Em-DsIz_BnD.mjs +1 -0
- package/.output/server/chunks/build/Field-cwwmSQDT.mjs +1 -0
- package/.output/server/chunks/build/FieldGroup-CAIpQv8s.mjs +1 -0
- package/.output/server/chunks/build/H1-BbFNsPyP.mjs +1 -0
- package/.output/server/chunks/build/H2-vHTl_pWr.mjs +1 -0
- package/.output/server/chunks/build/H3-7eTcfO3s.mjs +1 -0
- package/.output/server/chunks/build/H4-C89p_PKO.mjs +1 -0
- package/.output/server/chunks/build/Hr-Bm8RlL3O.mjs +1 -0
- package/.output/server/chunks/build/Icon-Dp9iy0BI.mjs +1 -0
- package/.output/server/chunks/build/Img-CWLmvN1t.mjs +2 -1
- package/.output/server/chunks/build/Kbd-CQG6I_Ch.mjs +1 -0
- package/.output/server/chunks/build/Li-Bw1QUaGv.mjs +1 -0
- package/.output/server/chunks/build/MDC-Dx0YPDhe.mjs +1 -1
- package/.output/server/chunks/build/Note-CHkjm9jm.mjs +1 -0
- package/.output/server/chunks/build/Ol-D-fPnfFM.mjs +1 -0
- package/.output/server/chunks/build/P-B5YI1V9y.mjs +1 -0
- package/.output/server/chunks/build/Pre-ChiJcf3C.mjs +1 -0
- package/.output/server/chunks/build/ProseH5-DahJyv8h.mjs +1 -0
- package/.output/server/chunks/build/ProseH6-C4Is5h6c.mjs +1 -0
- 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/Steps-BZpvXfzb.mjs +1 -0
- package/.output/server/chunks/build/Strong-DXJqOWL3.mjs +1 -0
- package/.output/server/chunks/build/Table-BSrLZ7dt.mjs +1 -0
- package/.output/server/chunks/build/Table-DCwTlhCj.mjs +1 -1
- package/.output/server/chunks/build/Tabs-Dk3nvOFF.mjs +1 -0
- package/.output/server/chunks/build/TabsItem-CDhyuBtJ.mjs +1 -0
- package/.output/server/chunks/build/Tbody-CjMT5oH-.mjs +1 -0
- package/.output/server/chunks/build/Td-ZBVaEjFN.mjs +1 -0
- package/.output/server/chunks/build/Th-D317icbd.mjs +1 -0
- package/.output/server/chunks/build/Thead-Ca_ZESTK.mjs +1 -0
- package/.output/server/chunks/build/Tip-CP3oTARR.mjs +1 -0
- package/.output/server/chunks/build/Tooltip-TRyl6dje.mjs +1 -1
- package/.output/server/chunks/build/Tr-6jI8j9gD.mjs +1 -0
- package/.output/server/chunks/build/{docs-Dk2JnYq3.mjs → Tree-DUhXKd8y.mjs} +46 -2235
- package/.output/server/chunks/build/Tree-DUhXKd8y.mjs.map +1 -0
- package/.output/server/chunks/build/Ul-BUGj_CPb.mjs +1 -0
- package/.output/server/chunks/build/Warning-BJ8G6cxC.mjs +1 -0
- package/.output/server/chunks/build/_id_-DN00UDdO.mjs +1 -0
- package/.output/server/chunks/build/_id_-DN00UDdO.mjs.map +1 -1
- package/.output/server/chunks/build/_name_-BnS_KEfX.mjs +1592 -0
- package/.output/server/chunks/build/_name_-BnS_KEfX.mjs.map +1 -0
- package/.output/server/chunks/build/{_uuid_-0UgdUhfY.mjs → _uuid_-DfJaumTE.mjs} +5 -4
- package/.output/server/chunks/build/{_uuid_-0UgdUhfY.mjs.map → _uuid_-DfJaumTE.mjs.map} +1 -1
- package/.output/server/chunks/build/auth-BGPNH2QJ.mjs +20 -0
- package/.output/server/chunks/build/auth-BGPNH2QJ.mjs.map +1 -0
- package/.output/server/chunks/build/auth-CvD7MqKW.mjs +1 -0
- package/.output/server/chunks/build/auth-CvD7MqKW.mjs.map +1 -1
- package/.output/server/chunks/build/chat-CZMiB68R.mjs +1 -0
- package/.output/server/chunks/build/chat-CZMiB68R.mjs.map +1 -1
- 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-YEscLBQN.mjs → dashboard-CLk1NlbR.mjs} +15 -4
- package/.output/server/chunks/build/dashboard-CLk1NlbR.mjs.map +1 -0
- package/.output/server/chunks/build/{dashboard-CpMVYnDV.mjs → dashboard-CiVTAZuF.mjs} +12 -4
- package/.output/server/chunks/build/{dashboard-CpMVYnDV.mjs.map → dashboard-CiVTAZuF.mjs.map} +1 -1
- package/.output/server/chunks/build/docs-ChGwOPg5.mjs +2204 -0
- package/.output/server/chunks/build/docs-ChGwOPg5.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-BzbcNcdU.mjs +1 -0
- package/.output/server/chunks/build/error-500-uCDjGRW8.mjs +1 -0
- package/.output/server/chunks/build/fetch-BB7Qzkwe.mjs +1 -1
- package/.output/server/chunks/build/{hooks-DP8WoUPS.mjs → hooks-D328DcO6.mjs} +3 -2
- package/.output/server/chunks/build/hooks-D328DcO6.mjs.map +1 -0
- package/.output/server/chunks/build/{index-DVx-QlhP.mjs → index-Byt-3Yq6.mjs} +3 -2
- package/.output/server/chunks/build/{index-DVx-QlhP.mjs.map → index-Byt-3Yq6.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-Ba_bPJgk.mjs → index-C9PuieXh.mjs} +3 -2
- package/.output/server/chunks/build/index-C9PuieXh.mjs.map +1 -0
- package/.output/server/chunks/build/index-C_LcBBgO.mjs +1508 -0
- package/.output/server/chunks/build/index-C_LcBBgO.mjs.map +1 -0
- package/.output/server/chunks/build/index-CxDxc9fm.mjs +1 -1
- package/.output/server/chunks/build/index-DzdvIi8V.mjs +1 -0
- package/.output/server/chunks/build/library-CbWcF5wT.mjs +601 -0
- package/.output/server/chunks/build/library-CbWcF5wT.mjs.map +1 -0
- package/.output/server/chunks/build/{login-BAysbpyX.mjs → login-DnnElTl2.mjs} +15 -7
- package/.output/server/chunks/build/{login-BAysbpyX.mjs.map → login-DnnElTl2.mjs.map} +1 -1
- package/.output/server/chunks/build/memories-BqA719O1.mjs +1 -0
- package/.output/server/chunks/build/memories-BqA719O1.mjs.map +1 -1
- package/.output/server/chunks/build/server.mjs +62 -34
- package/.output/server/chunks/build/server.mjs.map +1 -1
- package/.output/server/chunks/build/settings-DdkKCJ00.mjs +1 -0
- package/.output/server/chunks/build/settings-DdkKCJ00.mjs.map +1 -1
- package/.output/server/chunks/build/styles.mjs +2 -2
- package/.output/server/chunks/build/{tasks-DiOi1HG_.mjs → tasks-DnAFqbtt.mjs} +3 -2
- package/.output/server/chunks/build/tasks-DnAFqbtt.mjs.map +1 -0
- package/.output/server/chunks/build/{usage-H_mcd_fz.mjs → usage-CSrBh4Or.mjs} +159 -44
- package/.output/server/chunks/build/{usage-H_mcd_fz.mjs.map → usage-CSrBh4Or.mjs.map} +1 -1
- package/.output/server/chunks/build/{usePreferences-CzC8fRzd.mjs → usePreferences-DH1QjxOj.mjs} +7 -1
- package/.output/server/chunks/build/usePreferences-DH1QjxOj.mjs.map +1 -0
- package/.output/server/chunks/build/{view-Dc8mvzCB.mjs → view-n2sYa4Zh.mjs} +4 -3
- package/.output/server/chunks/build/{view-Dc8mvzCB.mjs.map → view-n2sYa4Zh.mjs.map} +1 -1
- package/.output/server/chunks/build/virtual_nuxt__Users_tony_Documents_GitHub_second-brain_node_modules_.cache_nuxt_.nuxt_mdc-imports-PtwWlZ2H.mjs +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +1247 -824
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/_ws/chat.mjs +2 -1
- package/.output/server/chunks/routes/_ws/chat.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id/cancel.post.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id/cancel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id/run.post.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id/run.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id/runs.get.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id/runs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id/stats.get.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/agents/stats.get.mjs +1 -0
- package/.output/server/chunks/routes/api/agents/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/_...all_.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/_...all_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/conversations/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/conversations/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/dashboard/overview.get.mjs +1 -0
- package/.output/server/chunks/routes/api/dashboard/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/documents/_id/public.get.mjs +1 -0
- package/.output/server/chunks/routes/api/documents/_id/public.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/documents/_id/restore.post.mjs +1 -0
- package/.output/server/chunks/routes/api/documents/_id/restore.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/documents/by-path.post.mjs +1 -0
- package/.output/server/chunks/routes/api/documents/by-path.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/documents/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/documents/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/documents/index.put.mjs +1 -0
- package/.output/server/chunks/routes/api/documents/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/delete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/delete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/list.get.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/list.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/mkdir.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/mkdir.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/move.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/move.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/read.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/read.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/rename.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/rename.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/fs/write.post.mjs +1 -0
- package/.output/server/chunks/routes/api/fs/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -0
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/home.get.mjs +1 -0
- package/.output/server/chunks/routes/api/home.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/hooks/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/hooks/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/hooks/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/hooks/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/hooks/stats.get.mjs +1 -0
- package/.output/server/chunks/routes/api/hooks/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get6.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get6.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get7.mjs +40 -38
- package/.output/server/chunks/routes/api/index.get7.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get8.mjs +33 -38
- package/.output/server/chunks/routes/api/index.get8.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get9.mjs +83 -0
- package/.output/server/chunks/routes/api/index.get9.mjs.map +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.put.mjs +1 -0
- package/.output/server/chunks/routes/api/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/memory/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/context.get.mjs +1 -0
- package/.output/server/chunks/routes/api/memory/context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/extract.post.mjs +2 -1
- package/.output/server/chunks/routes/api/memory/extract.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/search.get.mjs +1 -0
- package/.output/server/chunks/routes/api/memory/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/memory/store.post.mjs +1 -0
- package/.output/server/chunks/routes/api/memory/store.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/projects/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/projects/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/index.put.mjs +1 -0
- package/.output/server/chunks/routes/api/projects/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/secrets/_key_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/secrets/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/secrets/_key_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/secrets/_key_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/secrets/_key_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/secrets/_key_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/skills/_name/export.get.mjs +72 -0
- package/.output/server/chunks/routes/api/skills/_name/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/files/create.post.mjs +73 -0
- package/.output/server/chunks/routes/api/skills/_name/files/create.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/files/delete.post.mjs +71 -0
- package/.output/server/chunks/routes/api/skills/_name/files/delete.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/files/read.post.mjs +69 -0
- package/.output/server/chunks/routes/api/skills/_name/files/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/files/write.post.mjs +69 -0
- package/.output/server/chunks/routes/api/skills/_name/files/write.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/index.get.mjs +60 -0
- package/.output/server/chunks/routes/api/skills/_name/index.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/rename.post.mjs +87 -0
- package/.output/server/chunks/routes/api/skills/_name/rename.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/_name/toggle.post.mjs +62 -0
- package/.output/server/chunks/routes/api/skills/_name/toggle.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/create.post.mjs +79 -0
- package/.output/server/chunks/routes/api/skills/create.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/generate.post.mjs +143 -0
- package/.output/server/chunks/routes/api/skills/generate.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/import.post.mjs +96 -0
- package/.output/server/chunks/routes/api/skills/import.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/index.get.mjs +82 -0
- package/.output/server/chunks/routes/api/skills/index.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/index.get2.mjs +83 -0
- package/.output/server/chunks/routes/api/skills/index.get2.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/library/check-updates.get.mjs +72 -0
- package/.output/server/chunks/routes/api/skills/library/check-updates.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/skills/library/install.post.mjs +90 -0
- package/.output/server/chunks/routes/api/skills/library/install.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/tasks/_id/restore.post.mjs +1 -0
- package/.output/server/chunks/routes/api/tasks/_id/restore.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tasks/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/tasks/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tasks/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/tasks/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tasks/index.put.mjs +1 -0
- package/.output/server/chunks/routes/api/tasks/index.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tasks/tags.get.mjs +1 -0
- package/.output/server/chunks/routes/api/tasks/tags.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/usage/stats.get.mjs +4 -1
- package/.output/server/chunks/routes/api/usage/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/user/email.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/user/email.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/notifications.mjs +2 -1
- package/.output/server/chunks/routes/notifications.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +2 -2
- package/.output/server/chunks/routes/terminal.mjs +2 -1
- package/.output/server/chunks/routes/terminal.mjs.map +1 -1
- package/.output/server/index.mjs +2 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/adm-zip/adm-zip.js +949 -0
- package/.output/server/node_modules/adm-zip/headers/entryHeader.js +374 -0
- package/.output/server/node_modules/adm-zip/headers/index.js +2 -0
- package/.output/server/node_modules/adm-zip/headers/mainHeader.js +130 -0
- package/.output/server/node_modules/adm-zip/methods/deflater.js +33 -0
- package/.output/server/node_modules/adm-zip/methods/index.js +3 -0
- package/.output/server/node_modules/adm-zip/methods/inflater.js +34 -0
- package/.output/server/node_modules/adm-zip/methods/zipcrypto.js +175 -0
- package/.output/server/node_modules/adm-zip/package.json +49 -0
- package/.output/server/node_modules/adm-zip/util/constants.js +142 -0
- package/.output/server/node_modules/adm-zip/util/decoder.js +5 -0
- package/.output/server/node_modules/adm-zip/util/errors.js +63 -0
- package/.output/server/node_modules/adm-zip/util/fattr.js +76 -0
- package/.output/server/node_modules/adm-zip/util/index.js +5 -0
- package/.output/server/node_modules/adm-zip/util/utils.js +336 -0
- package/.output/server/node_modules/adm-zip/zipEntry.js +405 -0
- package/.output/server/node_modules/adm-zip/zipFile.js +446 -0
- package/.output/server/package.json +2 -1
- package/Claude/CLAUDE.md +9 -4
- package/Claude/skills/environment/SKILL.md +6 -0
- package/Claude/skills/memory/SKILL.md +6 -0
- package/Claude/skills/project/SKILL.md +6 -0
- package/Claude/skills/secret/SKILL.md +85 -0
- package/Claude/skills/secret/secret.py +146 -0
- package/Claude/skills/skill-creator/SKILL.md +30 -0
- package/Claude/skills/task/SKILL.md +6 -0
- package/README.md +3 -0
- package/app/app.vue +1 -1
- package/app/components/dashboard/StatCards.vue +21 -2
- package/app/components/skills/Card.vue +82 -0
- package/app/components/skills/CreateModal.vue +156 -0
- package/app/components/skills/Editor.vue +135 -0
- package/app/components/skills/FileTree.vue +336 -0
- package/app/components/skills/LibraryCard.vue +122 -0
- package/app/components/skills/RenameModal.vue +84 -0
- package/app/components/usage/UsageCostChart.client.vue +59 -23
- package/app/components/usage/UsageCostChart.server.vue +1 -0
- package/app/components/usage/UsageSourceDonut.client.vue +17 -5
- package/app/components/usage/UsageSourceDonut.server.vue +1 -0
- package/app/components/usage/UsageTopConsumers.vue +13 -3
- package/app/composables/usePreferences.ts +9 -1
- package/app/layouts/auth.vue +0 -10
- package/app/layouts/dashboard.vue +7 -0
- package/app/pages/login.vue +18 -8
- package/app/pages/skills/[name].vue +210 -0
- package/app/pages/skills/index.vue +204 -0
- package/app/pages/skills/library.vue +209 -0
- package/app/pages/usage.vue +43 -16
- package/dist/cli/index.js +35 -36
- package/nuxt.config.ts +9 -0
- package/package.json +5 -3
- package/server/api/skills/[name]/export.get.ts +45 -0
- package/server/api/skills/[name]/files/create.post.ts +45 -0
- package/server/api/skills/[name]/files/delete.post.ts +45 -0
- package/server/api/skills/[name]/files/index.get.ts +28 -0
- package/server/api/skills/[name]/files/read.post.ts +41 -0
- package/server/api/skills/[name]/files/write.post.ts +42 -0
- package/server/api/skills/[name]/index.get.ts +54 -0
- package/server/api/skills/[name]/rename.post.ts +64 -0
- package/server/api/skills/[name]/toggle.post.ts +32 -0
- package/server/api/skills/create.post.ts +51 -0
- package/server/api/skills/generate.post.ts +126 -0
- package/server/api/skills/import.post.ts +87 -0
- package/server/api/skills/index.get.ts +57 -0
- package/server/api/skills/library/check-updates.get.ts +46 -0
- package/server/api/skills/library/index.get.ts +56 -0
- package/server/api/skills/library/install.post.ts +73 -0
- package/server/api/usage/stats.get.ts +4 -2
- package/server/db/schema.ts +17 -0
- package/server/drizzle/migrations/0012_good_deadpool.sql +12 -0
- package/server/drizzle/migrations/0013_swift_snowbird.sql +1 -0
- package/server/drizzle/migrations/meta/0012_snapshot.json +1713 -0
- package/server/drizzle/migrations/meta/0013_snapshot.json +1720 -0
- package/server/drizzle/migrations/meta/_journal.json +14 -0
- package/server/middleware/auth.ts +0 -1
- package/server/plugins/05.skills-catalog.ts +105 -0
- package/server/utils/skills-path.ts +197 -0
- package/shared/types/index.ts +65 -1
- package/.output/public/_nuxt/5ZXA0Ckq.js +0 -1
- package/.output/public/_nuxt/BIIJhjQO.js +0 -1
- package/.output/public/_nuxt/BIckl6wA.js +0 -1
- package/.output/public/_nuxt/BJ3o57WW.js +0 -1
- package/.output/public/_nuxt/BNetzZzF.js +0 -1
- package/.output/public/_nuxt/BS0ofHJK.js +0 -1
- package/.output/public/_nuxt/B_3_hrpn.js +0 -1
- package/.output/public/_nuxt/BaBZjmMC.js +0 -1
- package/.output/public/_nuxt/BaMqDm5u.js +0 -1
- package/.output/public/_nuxt/BhzMoffi.js +0 -1
- package/.output/public/_nuxt/BlhFigLL.js +0 -1
- package/.output/public/_nuxt/BoIxv-gM.js +0 -1
- package/.output/public/_nuxt/Br19oYkq.js +0 -1
- package/.output/public/_nuxt/C0kh_F7v.js +0 -1
- package/.output/public/_nuxt/C61KgSco.js +0 -1
- package/.output/public/_nuxt/CJUdYEdO.js +0 -1
- package/.output/public/_nuxt/CVJQGP1Q.js +0 -1
- package/.output/public/_nuxt/CWMUi89H.js +0 -1
- package/.output/public/_nuxt/Cdu2qGgq.js +0 -1
- package/.output/public/_nuxt/CeIu7z4p.js +0 -1
- package/.output/public/_nuxt/D2689qk4.js +0 -1
- package/.output/public/_nuxt/D31L7Ks6.js +0 -1
- package/.output/public/_nuxt/DB359q8R.js +0 -1
- package/.output/public/_nuxt/DHG66LPS.js +0 -1
- package/.output/public/_nuxt/DJ5V-y_x.js +0 -1
- package/.output/public/_nuxt/DLETdGFL.js +0 -1
- package/.output/public/_nuxt/DOICd-Ld.js +0 -1
- package/.output/public/_nuxt/DPEcH-gi.js +0 -65
- package/.output/public/_nuxt/Db8-_gO7.js +0 -1
- package/.output/public/_nuxt/DgV-EDJ9.js +0 -1
- package/.output/public/_nuxt/Dp2X5R2m.js +0 -1
- package/.output/public/_nuxt/DqB723Z0.js +0 -1
- package/.output/public/_nuxt/Q8Ps7oN5.js +0 -1
- package/.output/public/_nuxt/SXTDhzp6.js +0 -1
- package/.output/public/_nuxt/Sg2Lwc46.js +0 -1
- package/.output/public/_nuxt/_J_7XIn-.js +0 -1
- package/.output/public/_nuxt/builds/meta/a1e9100c-1a4f-4f7e-bb53-9dbe0d07effb.json +0 -1
- package/.output/public/_nuxt/entry.CGxIBGAf.css +0 -1
- package/.output/public/_nuxt/inmzPrjz.js +0 -1
- package/.output/public/_nuxt/oIX-ZDN6.js +0 -1
- package/.output/server/chunks/build/auth-CDHRohj4.mjs +0 -77
- package/.output/server/chunks/build/auth-CDHRohj4.mjs.map +0 -1
- package/.output/server/chunks/build/dashboard-YEscLBQN.mjs.map +0 -1
- package/.output/server/chunks/build/docs-Dk2JnYq3.mjs.map +0 -1
- package/.output/server/chunks/build/hooks-DP8WoUPS.mjs.map +0 -1
- package/.output/server/chunks/build/index-Ba_bPJgk.mjs.map +0 -1
- package/.output/server/chunks/build/tasks-DiOi1HG_.mjs.map +0 -1
- package/.output/server/chunks/build/usePreferences-CzC8fRzd.mjs.map +0 -1
- /package/.output/public/_nuxt/{useCopyToClipboard.Be_IvFWy.css → CodeEditor.Be_IvFWy.css} +0 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { TreeItem } from '~/composables/useFileTree'
|
|
3
|
+
import type { SkillFile } from '~~/shared/types'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
skillName: string
|
|
7
|
+
files: SkillFile[]
|
|
8
|
+
selectedPath?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const emit = defineEmits<{
|
|
12
|
+
select: [path: string]
|
|
13
|
+
refresh: []
|
|
14
|
+
}>()
|
|
15
|
+
|
|
16
|
+
const toast = useToast()
|
|
17
|
+
|
|
18
|
+
// Convert SkillFile[] to TreeItem[] for UTree
|
|
19
|
+
function toTreeItems(files: SkillFile[], parentPath = ''): TreeItem[] {
|
|
20
|
+
return files.map((f) => {
|
|
21
|
+
const fullPath = parentPath ? `${parentPath}/${f.path}` : f.path
|
|
22
|
+
const item: TreeItem = {
|
|
23
|
+
id: fullPath,
|
|
24
|
+
label: f.name,
|
|
25
|
+
path: fullPath,
|
|
26
|
+
type: f.type,
|
|
27
|
+
defaultExpanded: true
|
|
28
|
+
}
|
|
29
|
+
if (f.type === 'directory') {
|
|
30
|
+
item.children = f.children ? toTreeItems(f.children, fullPath) : []
|
|
31
|
+
} else {
|
|
32
|
+
if (f.name.endsWith('.py')) item.icon = 'i-lucide-file-code'
|
|
33
|
+
else if (f.name.endsWith('.md')) item.icon = 'i-lucide-file-text'
|
|
34
|
+
else if (f.name.endsWith('.json')) item.icon = 'i-lucide-file-json'
|
|
35
|
+
else item.icon = 'i-lucide-file'
|
|
36
|
+
}
|
|
37
|
+
return item
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const treeItems = computed(() => toTreeItems(props.files))
|
|
42
|
+
|
|
43
|
+
const contextMenuTarget = ref<TreeItem | null>(null)
|
|
44
|
+
const showNewFileModal = ref(false)
|
|
45
|
+
const showNewFolderModal = ref(false)
|
|
46
|
+
const showDeleteConfirm = ref(false)
|
|
47
|
+
const newItemName = ref('')
|
|
48
|
+
|
|
49
|
+
const contextMenuItems = computed(() => [
|
|
50
|
+
[{
|
|
51
|
+
label: 'New File',
|
|
52
|
+
icon: 'i-lucide-file-plus',
|
|
53
|
+
onSelect: () => {
|
|
54
|
+
newItemName.value = ''
|
|
55
|
+
showNewFileModal.value = true
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
label: 'New Folder',
|
|
59
|
+
icon: 'i-lucide-folder-plus',
|
|
60
|
+
onSelect: () => {
|
|
61
|
+
newItemName.value = ''
|
|
62
|
+
showNewFolderModal.value = true
|
|
63
|
+
}
|
|
64
|
+
}],
|
|
65
|
+
[{
|
|
66
|
+
label: 'Delete',
|
|
67
|
+
icon: 'i-lucide-trash-2',
|
|
68
|
+
color: 'error' as const,
|
|
69
|
+
onSelect: () => {
|
|
70
|
+
if (contextMenuTarget.value && contextMenuTarget.value.label !== 'SKILL.md')
|
|
71
|
+
showDeleteConfirm.value = true
|
|
72
|
+
}
|
|
73
|
+
}]
|
|
74
|
+
])
|
|
75
|
+
|
|
76
|
+
function handleSelect(_e: unknown, item: TreeItem) {
|
|
77
|
+
if (item.type === 'file') {
|
|
78
|
+
emit('select', item.path)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async function handleCreateFile() {
|
|
83
|
+
if (!newItemName.value.trim()) return
|
|
84
|
+
|
|
85
|
+
let filename = newItemName.value.trim()
|
|
86
|
+
if (!filename.includes('.')) filename += '.py'
|
|
87
|
+
|
|
88
|
+
const parentPath = contextMenuTarget.value?.type === 'directory'
|
|
89
|
+
? contextMenuTarget.value.path
|
|
90
|
+
: ''
|
|
91
|
+
|
|
92
|
+
const filePath = parentPath ? `${parentPath}/${filename}` : filename
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
await $fetch(`/api/skills/${props.skillName}/files/create`, {
|
|
96
|
+
method: 'POST',
|
|
97
|
+
body: { path: filePath, type: 'file' }
|
|
98
|
+
})
|
|
99
|
+
emit('refresh')
|
|
100
|
+
emit('select', filePath)
|
|
101
|
+
toast.add({ title: `Created ${filename}`, color: 'success' })
|
|
102
|
+
} catch {
|
|
103
|
+
toast.add({ title: 'Failed to create file', color: 'error' })
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
showNewFileModal.value = false
|
|
107
|
+
newItemName.value = ''
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async function handleCreateFolder() {
|
|
111
|
+
if (!newItemName.value.trim()) return
|
|
112
|
+
|
|
113
|
+
const folderName = newItemName.value.trim()
|
|
114
|
+
const parentPath = contextMenuTarget.value?.type === 'directory'
|
|
115
|
+
? contextMenuTarget.value.path
|
|
116
|
+
: ''
|
|
117
|
+
|
|
118
|
+
const folderPath = parentPath ? `${parentPath}/${folderName}` : folderName
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
await $fetch(`/api/skills/${props.skillName}/files/create`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
body: { path: folderPath, type: 'directory' }
|
|
124
|
+
})
|
|
125
|
+
emit('refresh')
|
|
126
|
+
toast.add({ title: `Created ${folderName}/`, color: 'success' })
|
|
127
|
+
} catch {
|
|
128
|
+
toast.add({ title: 'Failed to create folder', color: 'error' })
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
showNewFolderModal.value = false
|
|
132
|
+
newItemName.value = ''
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function handleDelete() {
|
|
136
|
+
if (!contextMenuTarget.value) return
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
await $fetch(`/api/skills/${props.skillName}/files/delete`, {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
body: { path: contextMenuTarget.value.path }
|
|
142
|
+
})
|
|
143
|
+
emit('refresh')
|
|
144
|
+
toast.add({ title: `Deleted ${contextMenuTarget.value.label}`, color: 'success' })
|
|
145
|
+
} catch {
|
|
146
|
+
toast.add({ title: 'Failed to delete', color: 'error' })
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
showDeleteConfirm.value = false
|
|
150
|
+
}
|
|
151
|
+
</script>
|
|
152
|
+
|
|
153
|
+
<template>
|
|
154
|
+
<div class="h-full flex flex-col">
|
|
155
|
+
<UContextMenu
|
|
156
|
+
:items="contextMenuItems"
|
|
157
|
+
>
|
|
158
|
+
<div
|
|
159
|
+
class="flex-1 h-full overflow-auto p-2"
|
|
160
|
+
@contextmenu.self="contextMenuTarget = null"
|
|
161
|
+
>
|
|
162
|
+
<div
|
|
163
|
+
v-if="files.length === 0"
|
|
164
|
+
class="h-full min-h-32 flex flex-col items-center justify-center text-dimmed text-sm"
|
|
165
|
+
>
|
|
166
|
+
<UIcon
|
|
167
|
+
name="i-lucide-folder-open"
|
|
168
|
+
class="size-8 mx-auto mb-2 opacity-50"
|
|
169
|
+
/>
|
|
170
|
+
<p>No files found</p>
|
|
171
|
+
<p class="text-xs mt-1">
|
|
172
|
+
Right-click to create a file
|
|
173
|
+
</p>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<UTree
|
|
177
|
+
v-else
|
|
178
|
+
:items="treeItems"
|
|
179
|
+
:get-key="(item: TreeItem) => item.id"
|
|
180
|
+
color="primary"
|
|
181
|
+
expanded-icon="i-lucide-folder-open"
|
|
182
|
+
collapsed-icon="i-lucide-folder"
|
|
183
|
+
@select="handleSelect"
|
|
184
|
+
>
|
|
185
|
+
<template #item="{ item, expanded }">
|
|
186
|
+
<div
|
|
187
|
+
class="flex items-center gap-2 w-full"
|
|
188
|
+
@contextmenu="contextMenuTarget = item"
|
|
189
|
+
>
|
|
190
|
+
<UIcon
|
|
191
|
+
v-if="item.children?.length"
|
|
192
|
+
:name="expanded ? 'i-lucide-folder-open' : 'i-lucide-folder'"
|
|
193
|
+
class="size-4 shrink-0 text-dimmed"
|
|
194
|
+
/>
|
|
195
|
+
<UIcon
|
|
196
|
+
v-else-if="item.icon"
|
|
197
|
+
:name="item.icon"
|
|
198
|
+
class="size-4 shrink-0 text-dimmed"
|
|
199
|
+
/>
|
|
200
|
+
<UIcon
|
|
201
|
+
v-else
|
|
202
|
+
name="i-lucide-file"
|
|
203
|
+
class="size-4 shrink-0 text-dimmed"
|
|
204
|
+
/>
|
|
205
|
+
<span class="truncate">{{ item.label }}</span>
|
|
206
|
+
</div>
|
|
207
|
+
</template>
|
|
208
|
+
</UTree>
|
|
209
|
+
</div>
|
|
210
|
+
</UContextMenu>
|
|
211
|
+
|
|
212
|
+
<!-- New File Modal -->
|
|
213
|
+
<UModal v-model:open="showNewFileModal">
|
|
214
|
+
<template #content>
|
|
215
|
+
<UCard>
|
|
216
|
+
<template #header>
|
|
217
|
+
<div class="flex items-center gap-2">
|
|
218
|
+
<UIcon
|
|
219
|
+
name="i-lucide-file-plus"
|
|
220
|
+
class="size-5"
|
|
221
|
+
/>
|
|
222
|
+
<span class="font-semibold">New File</span>
|
|
223
|
+
</div>
|
|
224
|
+
</template>
|
|
225
|
+
|
|
226
|
+
<UInput
|
|
227
|
+
v-model="newItemName"
|
|
228
|
+
placeholder="filename.py"
|
|
229
|
+
autofocus
|
|
230
|
+
@keyup.enter="handleCreateFile"
|
|
231
|
+
/>
|
|
232
|
+
|
|
233
|
+
<template #footer>
|
|
234
|
+
<div class="flex justify-end gap-2">
|
|
235
|
+
<UButton
|
|
236
|
+
color="neutral"
|
|
237
|
+
variant="ghost"
|
|
238
|
+
@click="showNewFileModal = false"
|
|
239
|
+
>
|
|
240
|
+
Cancel
|
|
241
|
+
</UButton>
|
|
242
|
+
<UButton @click="handleCreateFile">
|
|
243
|
+
Create
|
|
244
|
+
</UButton>
|
|
245
|
+
</div>
|
|
246
|
+
</template>
|
|
247
|
+
</UCard>
|
|
248
|
+
</template>
|
|
249
|
+
</UModal>
|
|
250
|
+
|
|
251
|
+
<!-- New Folder Modal -->
|
|
252
|
+
<UModal v-model:open="showNewFolderModal">
|
|
253
|
+
<template #content>
|
|
254
|
+
<UCard>
|
|
255
|
+
<template #header>
|
|
256
|
+
<div class="flex items-center gap-2">
|
|
257
|
+
<UIcon
|
|
258
|
+
name="i-lucide-folder-plus"
|
|
259
|
+
class="size-5"
|
|
260
|
+
/>
|
|
261
|
+
<span class="font-semibold">New Folder</span>
|
|
262
|
+
</div>
|
|
263
|
+
</template>
|
|
264
|
+
|
|
265
|
+
<UInput
|
|
266
|
+
v-model="newItemName"
|
|
267
|
+
placeholder="folder-name"
|
|
268
|
+
autofocus
|
|
269
|
+
@keyup.enter="handleCreateFolder"
|
|
270
|
+
/>
|
|
271
|
+
|
|
272
|
+
<template #footer>
|
|
273
|
+
<div class="flex justify-end gap-2">
|
|
274
|
+
<UButton
|
|
275
|
+
color="neutral"
|
|
276
|
+
variant="ghost"
|
|
277
|
+
@click="showNewFolderModal = false"
|
|
278
|
+
>
|
|
279
|
+
Cancel
|
|
280
|
+
</UButton>
|
|
281
|
+
<UButton @click="handleCreateFolder">
|
|
282
|
+
Create
|
|
283
|
+
</UButton>
|
|
284
|
+
</div>
|
|
285
|
+
</template>
|
|
286
|
+
</UCard>
|
|
287
|
+
</template>
|
|
288
|
+
</UModal>
|
|
289
|
+
|
|
290
|
+
<!-- Delete Confirmation -->
|
|
291
|
+
<UModal v-model:open="showDeleteConfirm">
|
|
292
|
+
<template #content>
|
|
293
|
+
<UCard>
|
|
294
|
+
<template #header>
|
|
295
|
+
<div class="flex items-center gap-2 text-error">
|
|
296
|
+
<UIcon
|
|
297
|
+
name="i-lucide-trash-2"
|
|
298
|
+
class="size-5"
|
|
299
|
+
/>
|
|
300
|
+
<span class="font-semibold">Delete</span>
|
|
301
|
+
</div>
|
|
302
|
+
</template>
|
|
303
|
+
|
|
304
|
+
<p>
|
|
305
|
+
Are you sure you want to delete
|
|
306
|
+
<strong>{{ contextMenuTarget?.label }}</strong>?
|
|
307
|
+
</p>
|
|
308
|
+
<p
|
|
309
|
+
v-if="contextMenuTarget?.type === 'directory'"
|
|
310
|
+
class="text-sm text-dimmed mt-1"
|
|
311
|
+
>
|
|
312
|
+
This will delete all files and folders inside.
|
|
313
|
+
</p>
|
|
314
|
+
|
|
315
|
+
<template #footer>
|
|
316
|
+
<div class="flex justify-end gap-2">
|
|
317
|
+
<UButton
|
|
318
|
+
color="neutral"
|
|
319
|
+
variant="ghost"
|
|
320
|
+
@click="showDeleteConfirm = false"
|
|
321
|
+
>
|
|
322
|
+
Cancel
|
|
323
|
+
</UButton>
|
|
324
|
+
<UButton
|
|
325
|
+
color="error"
|
|
326
|
+
@click="handleDelete"
|
|
327
|
+
>
|
|
328
|
+
Delete
|
|
329
|
+
</UButton>
|
|
330
|
+
</div>
|
|
331
|
+
</template>
|
|
332
|
+
</UCard>
|
|
333
|
+
</template>
|
|
334
|
+
</UModal>
|
|
335
|
+
</div>
|
|
336
|
+
</template>
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { SkillCatalogItem } from '~~/shared/types'
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
skill: SkillCatalogItem
|
|
6
|
+
}>()
|
|
7
|
+
|
|
8
|
+
const emit = defineEmits<{
|
|
9
|
+
install: [name: string]
|
|
10
|
+
update: [name: string]
|
|
11
|
+
}>()
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<div class="p-4 rounded-lg border border-default bg-elevated/50 hover:bg-elevated transition-colors">
|
|
16
|
+
<div class="flex items-start justify-between gap-2 mb-2">
|
|
17
|
+
<div class="flex items-center gap-2 min-w-0">
|
|
18
|
+
<UIcon
|
|
19
|
+
name="i-lucide-puzzle"
|
|
20
|
+
class="size-4 shrink-0 text-primary"
|
|
21
|
+
/>
|
|
22
|
+
<span class="font-medium truncate">{{ skill.name }}</span>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="flex items-center gap-1.5 shrink-0">
|
|
25
|
+
<UBadge
|
|
26
|
+
v-if="skill.installed && !skill.hasUpdate"
|
|
27
|
+
variant="subtle"
|
|
28
|
+
color="success"
|
|
29
|
+
size="xs"
|
|
30
|
+
>
|
|
31
|
+
Installed
|
|
32
|
+
</UBadge>
|
|
33
|
+
<UBadge
|
|
34
|
+
v-if="skill.hasUpdate"
|
|
35
|
+
variant="subtle"
|
|
36
|
+
color="warning"
|
|
37
|
+
size="xs"
|
|
38
|
+
>
|
|
39
|
+
Update available
|
|
40
|
+
</UBadge>
|
|
41
|
+
<UBadge
|
|
42
|
+
variant="subtle"
|
|
43
|
+
color="neutral"
|
|
44
|
+
size="xs"
|
|
45
|
+
>
|
|
46
|
+
v{{ skill.version }}
|
|
47
|
+
</UBadge>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<p class="text-sm text-muted line-clamp-2 mb-3">
|
|
52
|
+
{{ skill.description }}
|
|
53
|
+
</p>
|
|
54
|
+
|
|
55
|
+
<div
|
|
56
|
+
v-if="skill.tags.length > 0"
|
|
57
|
+
class="flex flex-wrap gap-1 mb-3"
|
|
58
|
+
>
|
|
59
|
+
<UBadge
|
|
60
|
+
v-for="tag in skill.tags"
|
|
61
|
+
:key="tag"
|
|
62
|
+
variant="subtle"
|
|
63
|
+
:color="tag === 'official' ? 'primary' : 'neutral'"
|
|
64
|
+
size="xs"
|
|
65
|
+
>
|
|
66
|
+
{{ tag }}
|
|
67
|
+
</UBadge>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<div
|
|
71
|
+
v-if="skill.requiresSecrets.length > 0"
|
|
72
|
+
class="flex items-center gap-1 mb-3 text-xs text-dimmed"
|
|
73
|
+
>
|
|
74
|
+
<UIcon
|
|
75
|
+
name="i-lucide-key-round"
|
|
76
|
+
class="size-3 shrink-0"
|
|
77
|
+
/>
|
|
78
|
+
<span>Requires: {{ skill.requiresSecrets.join(', ') }}</span>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<div class="flex items-center justify-between">
|
|
82
|
+
<span
|
|
83
|
+
v-if="skill.author"
|
|
84
|
+
class="text-xs text-dimmed"
|
|
85
|
+
>
|
|
86
|
+
by {{ skill.author }}
|
|
87
|
+
</span>
|
|
88
|
+
<span v-else />
|
|
89
|
+
|
|
90
|
+
<div class="flex items-center gap-1.5">
|
|
91
|
+
<UButton
|
|
92
|
+
size="xs"
|
|
93
|
+
variant="ghost"
|
|
94
|
+
color="neutral"
|
|
95
|
+
icon="i-lucide-external-link"
|
|
96
|
+
:to="`https://github.com/Patrity/cognova-skills/tree/main/${skill.name}`"
|
|
97
|
+
target="_blank"
|
|
98
|
+
>
|
|
99
|
+
View
|
|
100
|
+
</UButton>
|
|
101
|
+
<UButton
|
|
102
|
+
v-if="!skill.installed"
|
|
103
|
+
size="xs"
|
|
104
|
+
icon="i-lucide-download"
|
|
105
|
+
@click="emit('install', skill.name)"
|
|
106
|
+
>
|
|
107
|
+
Install
|
|
108
|
+
</UButton>
|
|
109
|
+
<UButton
|
|
110
|
+
v-else-if="skill.hasUpdate"
|
|
111
|
+
size="xs"
|
|
112
|
+
color="warning"
|
|
113
|
+
variant="soft"
|
|
114
|
+
icon="i-lucide-refresh-cw"
|
|
115
|
+
@click="emit('update', skill.name)"
|
|
116
|
+
>
|
|
117
|
+
Update
|
|
118
|
+
</UButton>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</template>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const props = defineProps<{
|
|
3
|
+
open: boolean
|
|
4
|
+
currentName: string
|
|
5
|
+
}>()
|
|
6
|
+
|
|
7
|
+
const emit = defineEmits<{
|
|
8
|
+
'update:open': [value: boolean]
|
|
9
|
+
'renamed': [newName: string]
|
|
10
|
+
}>()
|
|
11
|
+
|
|
12
|
+
const toast = useToast()
|
|
13
|
+
const newName = ref(props.currentName)
|
|
14
|
+
const loading = ref(false)
|
|
15
|
+
|
|
16
|
+
watch(() => props.currentName, (val) => {
|
|
17
|
+
newName.value = val
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
function close() {
|
|
21
|
+
emit('update:open', false)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function handleRename() {
|
|
25
|
+
if (!newName.value.trim() || newName.value.trim() === props.currentName) return
|
|
26
|
+
|
|
27
|
+
loading.value = true
|
|
28
|
+
try {
|
|
29
|
+
await $fetch(`/api/skills/${props.currentName}/rename`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
body: { newName: newName.value.trim() }
|
|
32
|
+
})
|
|
33
|
+
toast.add({ title: `Skill renamed to '${newName.value.trim()}'`, color: 'success' })
|
|
34
|
+
emit('renamed', newName.value.trim())
|
|
35
|
+
close()
|
|
36
|
+
} catch (e: unknown) {
|
|
37
|
+
const message = e instanceof Error ? e.message : 'Failed to rename skill'
|
|
38
|
+
toast.add({ title: message, color: 'error' })
|
|
39
|
+
} finally {
|
|
40
|
+
loading.value = false
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<UModal
|
|
47
|
+
:open="props.open"
|
|
48
|
+
@update:open="emit('update:open', $event)"
|
|
49
|
+
>
|
|
50
|
+
<template #header>
|
|
51
|
+
<span class="font-semibold">Rename Skill</span>
|
|
52
|
+
</template>
|
|
53
|
+
|
|
54
|
+
<template #body>
|
|
55
|
+
<UFormField label="New Name">
|
|
56
|
+
<UInput
|
|
57
|
+
v-model="newName"
|
|
58
|
+
placeholder="my-skill"
|
|
59
|
+
:disabled="loading"
|
|
60
|
+
/>
|
|
61
|
+
</UFormField>
|
|
62
|
+
</template>
|
|
63
|
+
|
|
64
|
+
<template #footer>
|
|
65
|
+
<div class="flex justify-end gap-2">
|
|
66
|
+
<UButton
|
|
67
|
+
variant="ghost"
|
|
68
|
+
color="neutral"
|
|
69
|
+
:disabled="loading"
|
|
70
|
+
@click="close"
|
|
71
|
+
>
|
|
72
|
+
Cancel
|
|
73
|
+
</UButton>
|
|
74
|
+
<UButton
|
|
75
|
+
:loading="loading"
|
|
76
|
+
:disabled="!newName.trim() || newName.trim() === currentName"
|
|
77
|
+
@click="handleRename"
|
|
78
|
+
>
|
|
79
|
+
Rename
|
|
80
|
+
</UButton>
|
|
81
|
+
</div>
|
|
82
|
+
</template>
|
|
83
|
+
</UModal>
|
|
84
|
+
</template>
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
import { format } from 'date-fns'
|
|
3
3
|
import { useElementSize } from '@vueuse/core'
|
|
4
4
|
import { VisXYContainer, VisLine, VisArea, VisAxis, VisCrosshair, VisTooltip } from '@unovis/vue'
|
|
5
|
-
import type { DailyUsageData } from '~~/shared/types'
|
|
5
|
+
import type { DailyUsageData, UsageDisplayMode } from '~~/shared/types'
|
|
6
6
|
|
|
7
7
|
const props = defineProps<{
|
|
8
8
|
data: DailyUsageData[]
|
|
9
9
|
title?: string
|
|
10
10
|
granularity: 'daily' | 'hourly'
|
|
11
|
+
displayMode?: UsageDisplayMode
|
|
11
12
|
}>()
|
|
12
13
|
|
|
13
14
|
const emit = defineEmits<{
|
|
@@ -17,9 +18,12 @@ const emit = defineEmits<{
|
|
|
17
18
|
const cardRef = useTemplateRef<HTMLElement | null>('cardRef')
|
|
18
19
|
const { width } = useElementSize(cardRef)
|
|
19
20
|
|
|
21
|
+
const isTokens = computed(() => props.displayMode === 'tokens')
|
|
22
|
+
|
|
20
23
|
const x = (_: DailyUsageData, i: number) => i
|
|
21
24
|
|
|
22
|
-
const yTotal = (d: DailyUsageData) =>
|
|
25
|
+
const yTotal = (d: DailyUsageData) =>
|
|
26
|
+
isTokens.value ? d.inputTokens + d.outputTokens : d.totalCost
|
|
23
27
|
|
|
24
28
|
// Parse "2026-02-18" as local date (not UTC) to avoid off-by-one in western timezones
|
|
25
29
|
function parseLocalDate(dateStr: string): Date {
|
|
@@ -41,6 +45,12 @@ const xTicks = (i: number) => {
|
|
|
41
45
|
return format(parseLocalDate(item.date), 'd MMM')
|
|
42
46
|
}
|
|
43
47
|
|
|
48
|
+
function formatTokens(value: number): string {
|
|
49
|
+
if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}M`
|
|
50
|
+
if (value >= 1_000) return `${(value / 1_000).toFixed(1)}K`
|
|
51
|
+
return String(value)
|
|
52
|
+
}
|
|
53
|
+
|
|
44
54
|
const template = (d: DailyUsageData) => {
|
|
45
55
|
let label: string
|
|
46
56
|
if (props.granularity === 'hourly') {
|
|
@@ -51,6 +61,14 @@ const template = (d: DailyUsageData) => {
|
|
|
51
61
|
} else {
|
|
52
62
|
label = format(parseLocalDate(d.date), 'MMM d, yyyy')
|
|
53
63
|
}
|
|
64
|
+
if (isTokens.value)
|
|
65
|
+
return `<div class="p-2 text-sm">
|
|
66
|
+
<div class="font-medium">${label}</div>
|
|
67
|
+
<div style="color: var(--ui-primary)">Input: ${formatTokens(d.inputTokens)}</div>
|
|
68
|
+
<div style="color: var(--ui-warning)">Output: ${formatTokens(d.outputTokens)}</div>
|
|
69
|
+
<div class="text-muted mt-1">Total: ${formatTokens(d.inputTokens + d.outputTokens)}</div>
|
|
70
|
+
<div class="text-muted">${d.calls} calls</div>
|
|
71
|
+
</div>`
|
|
54
72
|
return `<div class="p-2 text-sm">
|
|
55
73
|
<div class="font-medium">${label}</div>
|
|
56
74
|
<div style="color: var(--ui-primary)">Chat: $${d.chat.toFixed(4)}</div>
|
|
@@ -96,27 +114,45 @@ const template = (d: DailyUsageData) => {
|
|
|
96
114
|
</UFieldGroup>
|
|
97
115
|
</div>
|
|
98
116
|
<div class="flex items-center gap-3 text-xs text-muted">
|
|
99
|
-
<
|
|
100
|
-
<span
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<span
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
<template v-if="isTokens">
|
|
118
|
+
<span class="flex items-center gap-1">
|
|
119
|
+
<span
|
|
120
|
+
class="inline-block size-2.5 rounded-full"
|
|
121
|
+
style="background: var(--ui-primary)"
|
|
122
|
+
/>
|
|
123
|
+
Input
|
|
124
|
+
</span>
|
|
125
|
+
<span class="flex items-center gap-1">
|
|
126
|
+
<span
|
|
127
|
+
class="inline-block size-2.5 rounded-full"
|
|
128
|
+
style="background: var(--ui-warning)"
|
|
129
|
+
/>
|
|
130
|
+
Output
|
|
131
|
+
</span>
|
|
132
|
+
</template>
|
|
133
|
+
<template v-else>
|
|
134
|
+
<span class="flex items-center gap-1">
|
|
135
|
+
<span
|
|
136
|
+
class="inline-block size-2.5 rounded-full"
|
|
137
|
+
style="background: var(--ui-primary)"
|
|
138
|
+
/>
|
|
139
|
+
Chat
|
|
140
|
+
</span>
|
|
141
|
+
<span class="flex items-center gap-1">
|
|
142
|
+
<span
|
|
143
|
+
class="inline-block size-2.5 rounded-full"
|
|
144
|
+
style="background: var(--ui-warning)"
|
|
145
|
+
/>
|
|
146
|
+
Agents
|
|
147
|
+
</span>
|
|
148
|
+
<span class="flex items-center gap-1">
|
|
149
|
+
<span
|
|
150
|
+
class="inline-block size-2.5 rounded-full"
|
|
151
|
+
style="background: var(--ui-info)"
|
|
152
|
+
/>
|
|
153
|
+
Memory
|
|
154
|
+
</span>
|
|
155
|
+
</template>
|
|
120
156
|
</div>
|
|
121
157
|
</div>
|
|
122
158
|
</template>
|