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,446 @@
|
|
|
1
|
+
const ZipEntry = require("./zipEntry");
|
|
2
|
+
const Headers = require("./headers");
|
|
3
|
+
const Utils = require("./util");
|
|
4
|
+
|
|
5
|
+
module.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {
|
|
6
|
+
var entryList = [],
|
|
7
|
+
entryTable = {},
|
|
8
|
+
_comment = Buffer.alloc(0),
|
|
9
|
+
mainHeader = new Headers.MainHeader(),
|
|
10
|
+
loadedEntries = false;
|
|
11
|
+
var password = null;
|
|
12
|
+
const temporary = new Set();
|
|
13
|
+
|
|
14
|
+
// assign options
|
|
15
|
+
const opts = options;
|
|
16
|
+
|
|
17
|
+
const { noSort, decoder } = opts;
|
|
18
|
+
|
|
19
|
+
if (inBuffer) {
|
|
20
|
+
// is a memory buffer
|
|
21
|
+
readMainHeader(opts.readEntries);
|
|
22
|
+
} else {
|
|
23
|
+
// none. is a new file
|
|
24
|
+
loadedEntries = true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function makeTemporaryFolders() {
|
|
28
|
+
const foldersList = new Set();
|
|
29
|
+
|
|
30
|
+
// Make list of all folders in file
|
|
31
|
+
for (const elem of Object.keys(entryTable)) {
|
|
32
|
+
const elements = elem.split("/");
|
|
33
|
+
elements.pop(); // filename
|
|
34
|
+
if (!elements.length) continue; // no folders
|
|
35
|
+
for (let i = 0; i < elements.length; i++) {
|
|
36
|
+
const sub = elements.slice(0, i + 1).join("/") + "/";
|
|
37
|
+
foldersList.add(sub);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// create missing folders as temporary
|
|
42
|
+
for (const elem of foldersList) {
|
|
43
|
+
if (!(elem in entryTable)) {
|
|
44
|
+
const tempfolder = new ZipEntry(opts);
|
|
45
|
+
tempfolder.entryName = elem;
|
|
46
|
+
tempfolder.attr = 0x10;
|
|
47
|
+
tempfolder.temporary = true;
|
|
48
|
+
entryList.push(tempfolder);
|
|
49
|
+
entryTable[tempfolder.entryName] = tempfolder;
|
|
50
|
+
temporary.add(tempfolder);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function readEntries() {
|
|
56
|
+
loadedEntries = true;
|
|
57
|
+
entryTable = {};
|
|
58
|
+
if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {
|
|
59
|
+
throw Utils.Errors.DISK_ENTRY_TOO_LARGE();
|
|
60
|
+
}
|
|
61
|
+
entryList = new Array(mainHeader.diskEntries); // total number of entries
|
|
62
|
+
var index = mainHeader.offset; // offset of first CEN header
|
|
63
|
+
for (var i = 0; i < entryList.length; i++) {
|
|
64
|
+
var tmp = index,
|
|
65
|
+
entry = new ZipEntry(opts, inBuffer);
|
|
66
|
+
entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));
|
|
67
|
+
|
|
68
|
+
entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));
|
|
69
|
+
|
|
70
|
+
if (entry.header.extraLength) {
|
|
71
|
+
entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
|
|
75
|
+
|
|
76
|
+
index += entry.header.centralHeaderSize;
|
|
77
|
+
|
|
78
|
+
entryList[i] = entry;
|
|
79
|
+
entryTable[entry.entryName] = entry;
|
|
80
|
+
}
|
|
81
|
+
temporary.clear();
|
|
82
|
+
makeTemporaryFolders();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function readMainHeader(/*Boolean*/ readNow) {
|
|
86
|
+
var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size
|
|
87
|
+
max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length
|
|
88
|
+
n = max,
|
|
89
|
+
endStart = inBuffer.length,
|
|
90
|
+
endOffset = -1, // Start offset of the END header
|
|
91
|
+
commentEnd = 0;
|
|
92
|
+
|
|
93
|
+
// option to search header form entire file
|
|
94
|
+
const trailingSpace = typeof opts.trailingSpace === "boolean" ? opts.trailingSpace : false;
|
|
95
|
+
if (trailingSpace) max = 0;
|
|
96
|
+
|
|
97
|
+
for (i; i >= n; i--) {
|
|
98
|
+
if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
|
|
99
|
+
if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
|
|
100
|
+
// "PK\005\006"
|
|
101
|
+
endOffset = i;
|
|
102
|
+
commentEnd = i;
|
|
103
|
+
endStart = i + Utils.Constants.ENDHDR;
|
|
104
|
+
// We already found a regular signature, let's look just a bit further to check if there's any zip64 signature
|
|
105
|
+
n = i - Utils.Constants.END64HDR;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
|
|
110
|
+
// Found a zip64 signature, let's continue reading the whole zip64 record
|
|
111
|
+
n = max;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
|
|
116
|
+
// Found the zip64 record, let's determine it's size
|
|
117
|
+
endOffset = i;
|
|
118
|
+
endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();
|
|
124
|
+
|
|
125
|
+
mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
|
|
126
|
+
if (mainHeader.commentLength) {
|
|
127
|
+
_comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
|
|
128
|
+
}
|
|
129
|
+
if (readNow) readEntries();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function sortEntries() {
|
|
133
|
+
if (entryList.length > 1 && !noSort) {
|
|
134
|
+
entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
/**
|
|
140
|
+
* Returns an array of ZipEntry objects existent in the current opened archive
|
|
141
|
+
* @return Array
|
|
142
|
+
*/
|
|
143
|
+
get entries() {
|
|
144
|
+
if (!loadedEntries) {
|
|
145
|
+
readEntries();
|
|
146
|
+
}
|
|
147
|
+
return entryList.filter((e) => !temporary.has(e));
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Archive comment
|
|
152
|
+
* @return {String}
|
|
153
|
+
*/
|
|
154
|
+
get comment() {
|
|
155
|
+
return decoder.decode(_comment);
|
|
156
|
+
},
|
|
157
|
+
set comment(val) {
|
|
158
|
+
_comment = Utils.toBuffer(val, decoder.encode);
|
|
159
|
+
mainHeader.commentLength = _comment.length;
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
getEntryCount: function () {
|
|
163
|
+
if (!loadedEntries) {
|
|
164
|
+
return mainHeader.diskEntries;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return entryList.length;
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
forEach: function (callback) {
|
|
171
|
+
this.entries.forEach(callback);
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Returns a reference to the entry with the given name or null if entry is inexistent
|
|
176
|
+
*
|
|
177
|
+
* @param entryName
|
|
178
|
+
* @return ZipEntry
|
|
179
|
+
*/
|
|
180
|
+
getEntry: function (/*String*/ entryName) {
|
|
181
|
+
if (!loadedEntries) {
|
|
182
|
+
readEntries();
|
|
183
|
+
}
|
|
184
|
+
return entryTable[entryName] || null;
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Adds the given entry to the entry list
|
|
189
|
+
*
|
|
190
|
+
* @param entry
|
|
191
|
+
*/
|
|
192
|
+
setEntry: function (/*ZipEntry*/ entry) {
|
|
193
|
+
if (!loadedEntries) {
|
|
194
|
+
readEntries();
|
|
195
|
+
}
|
|
196
|
+
entryList.push(entry);
|
|
197
|
+
entryTable[entry.entryName] = entry;
|
|
198
|
+
mainHeader.totalEntries = entryList.length;
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Removes the file with the given name from the entry list.
|
|
203
|
+
*
|
|
204
|
+
* If the entry is a directory, then all nested files and directories will be removed
|
|
205
|
+
* @param entryName
|
|
206
|
+
* @returns {void}
|
|
207
|
+
*/
|
|
208
|
+
deleteFile: function (/*String*/ entryName, withsubfolders = true) {
|
|
209
|
+
if (!loadedEntries) {
|
|
210
|
+
readEntries();
|
|
211
|
+
}
|
|
212
|
+
const entry = entryTable[entryName];
|
|
213
|
+
const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);
|
|
214
|
+
|
|
215
|
+
list.forEach(this.deleteEntry);
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Removes the entry with the given name from the entry list.
|
|
220
|
+
*
|
|
221
|
+
* @param {string} entryName
|
|
222
|
+
* @returns {void}
|
|
223
|
+
*/
|
|
224
|
+
deleteEntry: function (/*String*/ entryName) {
|
|
225
|
+
if (!loadedEntries) {
|
|
226
|
+
readEntries();
|
|
227
|
+
}
|
|
228
|
+
const entry = entryTable[entryName];
|
|
229
|
+
const index = entryList.indexOf(entry);
|
|
230
|
+
if (index >= 0) {
|
|
231
|
+
entryList.splice(index, 1);
|
|
232
|
+
delete entryTable[entryName];
|
|
233
|
+
mainHeader.totalEntries = entryList.length;
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Iterates and returns all nested files and directories of the given entry
|
|
239
|
+
*
|
|
240
|
+
* @param entry
|
|
241
|
+
* @return Array
|
|
242
|
+
*/
|
|
243
|
+
getEntryChildren: function (/*ZipEntry*/ entry, subfolders = true) {
|
|
244
|
+
if (!loadedEntries) {
|
|
245
|
+
readEntries();
|
|
246
|
+
}
|
|
247
|
+
if (typeof entry === "object") {
|
|
248
|
+
if (entry.isDirectory && subfolders) {
|
|
249
|
+
const list = [];
|
|
250
|
+
const name = entry.entryName;
|
|
251
|
+
|
|
252
|
+
for (const zipEntry of entryList) {
|
|
253
|
+
if (zipEntry.entryName.startsWith(name)) {
|
|
254
|
+
list.push(zipEntry);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return list;
|
|
258
|
+
} else {
|
|
259
|
+
return [entry];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return [];
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* How many child elements entry has
|
|
267
|
+
*
|
|
268
|
+
* @param {ZipEntry} entry
|
|
269
|
+
* @return {integer}
|
|
270
|
+
*/
|
|
271
|
+
getChildCount: function (entry) {
|
|
272
|
+
if (entry && entry.isDirectory) {
|
|
273
|
+
const list = this.getEntryChildren(entry);
|
|
274
|
+
return list.includes(entry) ? list.length - 1 : list.length;
|
|
275
|
+
}
|
|
276
|
+
return 0;
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Returns the zip file
|
|
281
|
+
*
|
|
282
|
+
* @return Buffer
|
|
283
|
+
*/
|
|
284
|
+
compressToBuffer: function () {
|
|
285
|
+
if (!loadedEntries) {
|
|
286
|
+
readEntries();
|
|
287
|
+
}
|
|
288
|
+
sortEntries();
|
|
289
|
+
|
|
290
|
+
const dataBlock = [];
|
|
291
|
+
const headerBlocks = [];
|
|
292
|
+
let totalSize = 0;
|
|
293
|
+
let dindex = 0;
|
|
294
|
+
|
|
295
|
+
mainHeader.size = 0;
|
|
296
|
+
mainHeader.offset = 0;
|
|
297
|
+
let totalEntries = 0;
|
|
298
|
+
|
|
299
|
+
for (const entry of this.entries) {
|
|
300
|
+
// compress data and set local and entry header accordingly. Reason why is called first
|
|
301
|
+
const compressedData = entry.getCompressedData();
|
|
302
|
+
entry.header.offset = dindex;
|
|
303
|
+
|
|
304
|
+
// 1. construct local header
|
|
305
|
+
const localHeader = entry.packLocalHeader();
|
|
306
|
+
|
|
307
|
+
// 2. offsets
|
|
308
|
+
const dataLength = localHeader.length + compressedData.length;
|
|
309
|
+
dindex += dataLength;
|
|
310
|
+
|
|
311
|
+
// 3. store values in sequence
|
|
312
|
+
dataBlock.push(localHeader);
|
|
313
|
+
dataBlock.push(compressedData);
|
|
314
|
+
|
|
315
|
+
// 4. construct central header
|
|
316
|
+
const centralHeader = entry.packCentralHeader();
|
|
317
|
+
headerBlocks.push(centralHeader);
|
|
318
|
+
// 5. update main header
|
|
319
|
+
mainHeader.size += centralHeader.length;
|
|
320
|
+
totalSize += dataLength + centralHeader.length;
|
|
321
|
+
totalEntries++;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
|
|
325
|
+
// point to end of data and beginning of central directory first record
|
|
326
|
+
mainHeader.offset = dindex;
|
|
327
|
+
mainHeader.totalEntries = totalEntries;
|
|
328
|
+
|
|
329
|
+
dindex = 0;
|
|
330
|
+
const outBuffer = Buffer.alloc(totalSize);
|
|
331
|
+
// write data blocks
|
|
332
|
+
for (const content of dataBlock) {
|
|
333
|
+
content.copy(outBuffer, dindex);
|
|
334
|
+
dindex += content.length;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// write central directory entries
|
|
338
|
+
for (const content of headerBlocks) {
|
|
339
|
+
content.copy(outBuffer, dindex);
|
|
340
|
+
dindex += content.length;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// write main header
|
|
344
|
+
const mh = mainHeader.toBinary();
|
|
345
|
+
if (_comment) {
|
|
346
|
+
_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
|
|
347
|
+
}
|
|
348
|
+
mh.copy(outBuffer, dindex);
|
|
349
|
+
|
|
350
|
+
// Since we update entry and main header offsets,
|
|
351
|
+
// they are no longer valid and we have to reset content
|
|
352
|
+
// (Issue 64)
|
|
353
|
+
|
|
354
|
+
inBuffer = outBuffer;
|
|
355
|
+
loadedEntries = false;
|
|
356
|
+
|
|
357
|
+
return outBuffer;
|
|
358
|
+
},
|
|
359
|
+
|
|
360
|
+
toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {
|
|
361
|
+
try {
|
|
362
|
+
if (!loadedEntries) {
|
|
363
|
+
readEntries();
|
|
364
|
+
}
|
|
365
|
+
sortEntries();
|
|
366
|
+
|
|
367
|
+
const dataBlock = [];
|
|
368
|
+
const centralHeaders = [];
|
|
369
|
+
let totalSize = 0;
|
|
370
|
+
let dindex = 0;
|
|
371
|
+
let totalEntries = 0;
|
|
372
|
+
|
|
373
|
+
mainHeader.size = 0;
|
|
374
|
+
mainHeader.offset = 0;
|
|
375
|
+
|
|
376
|
+
const compress2Buffer = function (entryLists) {
|
|
377
|
+
if (entryLists.length > 0) {
|
|
378
|
+
const entry = entryLists.shift();
|
|
379
|
+
const name = entry.entryName + entry.extra.toString();
|
|
380
|
+
if (onItemStart) onItemStart(name);
|
|
381
|
+
entry.getCompressedDataAsync(function (compressedData) {
|
|
382
|
+
if (onItemEnd) onItemEnd(name);
|
|
383
|
+
entry.header.offset = dindex;
|
|
384
|
+
|
|
385
|
+
// 1. construct local header
|
|
386
|
+
const localHeader = entry.packLocalHeader();
|
|
387
|
+
|
|
388
|
+
// 2. offsets
|
|
389
|
+
const dataLength = localHeader.length + compressedData.length;
|
|
390
|
+
dindex += dataLength;
|
|
391
|
+
|
|
392
|
+
// 3. store values in sequence
|
|
393
|
+
dataBlock.push(localHeader);
|
|
394
|
+
dataBlock.push(compressedData);
|
|
395
|
+
|
|
396
|
+
// central header
|
|
397
|
+
const centalHeader = entry.packCentralHeader();
|
|
398
|
+
centralHeaders.push(centalHeader);
|
|
399
|
+
mainHeader.size += centalHeader.length;
|
|
400
|
+
totalSize += dataLength + centalHeader.length;
|
|
401
|
+
totalEntries++;
|
|
402
|
+
|
|
403
|
+
compress2Buffer(entryLists);
|
|
404
|
+
});
|
|
405
|
+
} else {
|
|
406
|
+
totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
|
|
407
|
+
// point to end of data and beginning of central directory first record
|
|
408
|
+
mainHeader.offset = dindex;
|
|
409
|
+
mainHeader.totalEntries = totalEntries;
|
|
410
|
+
|
|
411
|
+
dindex = 0;
|
|
412
|
+
const outBuffer = Buffer.alloc(totalSize);
|
|
413
|
+
dataBlock.forEach(function (content) {
|
|
414
|
+
content.copy(outBuffer, dindex); // write data blocks
|
|
415
|
+
dindex += content.length;
|
|
416
|
+
});
|
|
417
|
+
centralHeaders.forEach(function (content) {
|
|
418
|
+
content.copy(outBuffer, dindex); // write central directory entries
|
|
419
|
+
dindex += content.length;
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
const mh = mainHeader.toBinary();
|
|
423
|
+
if (_comment) {
|
|
424
|
+
_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
mh.copy(outBuffer, dindex); // write main header
|
|
428
|
+
|
|
429
|
+
// Since we update entry and main header offsets, they are no
|
|
430
|
+
// longer valid and we have to reset content using our new buffer
|
|
431
|
+
// (Issue 64)
|
|
432
|
+
|
|
433
|
+
inBuffer = outBuffer;
|
|
434
|
+
loadedEntries = false;
|
|
435
|
+
|
|
436
|
+
onSuccess(outBuffer);
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
compress2Buffer(Array.from(this.entries));
|
|
441
|
+
} catch (e) {
|
|
442
|
+
onFail(e);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cognova-prod",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": true,
|
|
6
6
|
"dependencies": {
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"@vueuse/core": "14.1.0",
|
|
73
73
|
"@vueuse/integrations": "14.1.0",
|
|
74
74
|
"@vueuse/shared": "14.1.0",
|
|
75
|
+
"adm-zip": "0.5.16",
|
|
75
76
|
"aria-hidden": "1.2.6",
|
|
76
77
|
"bail": "2.0.2",
|
|
77
78
|
"better-auth": "1.4.17",
|
package/Claude/CLAUDE.md
CHANGED
|
@@ -26,6 +26,7 @@ Cognova is a self-hosted Nuxt 4 web application for personal knowledge managemen
|
|
|
26
26
|
| Task Management | `/task` | Create, list, update, complete tasks |
|
|
27
27
|
| Project Management | `/project` | Organize tasks into projects |
|
|
28
28
|
| Memory | `/memory` | Search past decisions, store insights, recall context |
|
|
29
|
+
| Secrets | `/secret` | Store, retrieve, list, delete encrypted API keys and credentials |
|
|
29
30
|
| Environment | `/environment` | Check system status, troubleshoot issues |
|
|
30
31
|
| Skill Creator | `/skill-creator` | Create new Claude Code skills |
|
|
31
32
|
|
|
@@ -103,11 +104,15 @@ Memory is your most important tool. You are stateless between sessions — witho
|
|
|
103
104
|
**Rule: When in doubt, store it.** A redundant memory is harmless. A forgotten one wastes the user's time.
|
|
104
105
|
|
|
105
106
|
### Secrets & Sensitive Data
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
107
|
+
|
|
108
|
+
**CRITICAL — Zero tolerance for leaked secrets:**
|
|
109
|
+
- NEVER store passwords, tokens, API keys, or credentials in memory, notes, conversation, or any file
|
|
110
|
+
- NEVER write secrets to files — use `/secret set KEY` or the Cognova settings UI instead
|
|
111
|
+
- NEVER embed API keys, tokens, or credentials in SKILL.md files or Python scripts when creating or modifying skills — always use `get_secret()` from `_lib/api.py`
|
|
112
|
+
- If a user shares a credential in chat, warn them and store it via `/secret set KEY` immediately
|
|
113
|
+
- When you need a token for an integration, check with `/secret list` and `/secret get KEY` before asking the user
|
|
110
114
|
- Treat any string that looks like a key, token, or password as sensitive — do not echo it back
|
|
115
|
+
- When creating skills that need external API keys, declare them in `requires-secrets` frontmatter and use `get_secret()` in the script
|
|
111
116
|
|
|
112
117
|
### Troubleshooting
|
|
113
118
|
- Use `/environment status` or `/environment health` to diagnose issues
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: environment
|
|
3
3
|
description: Check system status, view configuration, troubleshoot issues with the Cognova installation. Use when diagnosing problems, checking health, or understanding the current setup.
|
|
4
4
|
allowed-tools: Bash, Read
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
requires-secrets: []
|
|
8
|
+
author: Cognova
|
|
9
|
+
repository: ""
|
|
10
|
+
installed-from: ""
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
# Environment Skill
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: memory
|
|
3
3
|
description: Access persistent memory across Claude sessions. Search past conversations, recall decisions, store key insights. Use when needing context from previous work or to save important information for future sessions.
|
|
4
4
|
allowed-tools: Bash, Read
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
requires-secrets: []
|
|
8
|
+
author: Cognova
|
|
9
|
+
repository: ""
|
|
10
|
+
installed-from: ""
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
# Memory Skill
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: project
|
|
3
3
|
description: Manage Cognova projects - create, list, update projects. ALWAYS searches for existing projects before creating new ones. ALWAYS confirms with user before creating, showing potential matches.
|
|
4
4
|
allowed-tools: Bash, Read
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
requires-secrets: []
|
|
8
|
+
author: Cognova
|
|
9
|
+
repository: ""
|
|
10
|
+
installed-from: ""
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
# Project Management Skill
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: secret
|
|
3
|
+
description: Manage encrypted secrets for API keys, tokens, and credentials. Use when the user needs to store, retrieve, list, or delete sensitive values.
|
|
4
|
+
allowed-tools: Bash, Read
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
requires-secrets: []
|
|
8
|
+
author: Cognova
|
|
9
|
+
repository: ""
|
|
10
|
+
installed-from: ""
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Secrets Management Skill
|
|
14
|
+
|
|
15
|
+
Manage encrypted secrets stored in Cognova. Use this for API keys, tokens, webhook URLs, and any sensitive credentials that skills or integrations need.
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
### List all secrets
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
python3 ~/.claude/skills/secret/secret.py list
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Shows all stored secret keys with descriptions and last updated timestamps. Values are NOT shown.
|
|
26
|
+
|
|
27
|
+
### Get a secret value
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python3 ~/.claude/skills/secret/secret.py get <KEY>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Retrieves the decrypted value of a secret. **Do NOT echo the value back to the user** — confirm it was retrieved successfully without displaying it.
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
```bash
|
|
37
|
+
python3 ~/.claude/skills/secret/secret.py get OPENAI_API_KEY
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Store a secret
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
python3 ~/.claude/skills/secret/secret.py set <KEY> --value <VALUE> [--description <DESC>]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Creates or updates an encrypted secret. Key names should use `SCREAMING_SNAKE_CASE`.
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
```bash
|
|
50
|
+
python3 ~/.claude/skills/secret/secret.py set DISCORD_WEBHOOK_URL --value "https://discord.com/api/webhooks/..." --description "Discord notifications webhook"
|
|
51
|
+
python3 ~/.claude/skills/secret/secret.py set OPENAI_API_KEY --value "sk-..." --description "OpenAI API key for GPT integration"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Delete a secret
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python3 ~/.claude/skills/secret/secret.py delete <KEY>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Permanently removes an encrypted secret.
|
|
61
|
+
|
|
62
|
+
## Natural Language Patterns
|
|
63
|
+
|
|
64
|
+
When users say things like:
|
|
65
|
+
- "Store this API key..." -> Use `set`
|
|
66
|
+
- "Save my token for..." -> Use `set`
|
|
67
|
+
- "What secrets do I have?" -> Use `list`
|
|
68
|
+
- "Get my Discord webhook" -> Use `get`
|
|
69
|
+
- "Remove the old API key" -> Use `delete`
|
|
70
|
+
- "I need to add a key for..." -> Use `set`
|
|
71
|
+
|
|
72
|
+
## Key Naming Convention
|
|
73
|
+
|
|
74
|
+
Use `SCREAMING_SNAKE_CASE` for all secret keys:
|
|
75
|
+
- `GOOGLE_API_KEY`
|
|
76
|
+
- `DISCORD_WEBHOOK_URL`
|
|
77
|
+
- `OPENAI_API_KEY`
|
|
78
|
+
- `GITHUB_TOKEN`
|
|
79
|
+
|
|
80
|
+
## Security Rules
|
|
81
|
+
|
|
82
|
+
1. **Never echo secret values** — After `get`, confirm success without displaying the value
|
|
83
|
+
2. **Never store secrets elsewhere** — No memory, no notes, no files, no conversation logs
|
|
84
|
+
3. **Always use this skill** — When a user provides a credential, store it here immediately
|
|
85
|
+
4. **Warn on exposure** — If a user pastes a key/token in chat, warn them and offer to store it
|