@shareai-lab/kode 2.0.1 → 2.0.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/LICENSE +201 -0
- package/README.md +649 -25
- package/README.zh-CN.md +579 -0
- package/cli-acp.js +3 -17
- package/cli.js +5 -7
- package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
- package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
- package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
- package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
- package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
- package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
- package/dist/{agentsValidate-7LH4HTNR.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
- package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
- package/dist/{ask-3NHFFUQG.js → chunks/ask-D7SOHJ6Z.js} +36 -44
- package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
- package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
- package/dist/{chunk-AFFSCMYS.js → chunks/chunk-2JN5MY67.js} +12 -14
- package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
- package/dist/chunks/chunk-2QONJ5MG.js +14 -0
- package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
- package/dist/chunks/chunk-2WEXPKHH.js +903 -0
- package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
- package/dist/{chunk-ARZSBOAO.js → chunks/chunk-3BYE3ME6.js} +717 -792
- package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
- package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
- package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
- package/dist/chunks/chunk-3OEJVB5A.js +906 -0
- package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
- package/dist/chunks/chunk-3TNIOEBO.js +369 -0
- package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
- package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
- package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
- package/dist/{chunk-UHYRLID6.js → chunks/chunk-4ATBQOFO.js} +107 -55
- package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
- package/dist/chunks/chunk-4CRUCZR4.js +0 -0
- package/dist/{chunk-YC6LJCDE.js → chunks/chunk-4EO6SIQY.js} +32 -75
- package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
- package/dist/chunks/chunk-53M46S5I.js +64 -0
- package/dist/chunks/chunk-53M46S5I.js.map +7 -0
- package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
- package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
- package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
- package/dist/{chunk-3IN27HA5.js → chunks/chunk-6KRRFSDN.js} +4 -6
- package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
- package/dist/chunks/chunk-6LJNZK4K.js +39 -0
- package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
- package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
- package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
- package/dist/chunks/chunk-77XDJMBP.js +3326 -0
- package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
- package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
- package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
- package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
- package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
- package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
- package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
- package/dist/chunks/chunk-BBJFHTBC.js +28 -0
- package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
- package/dist/chunks/chunk-BHDHXOXB.js +24 -0
- package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
- package/dist/{chunk-73WGVYLQ.js → chunks/chunk-BTA7SZ26.js} +152 -223
- package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
- package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
- package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
- package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
- package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
- package/dist/{chunk-QVLYOPO5.js → chunks/chunk-DQ4JHXMT.js} +462 -424
- package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
- package/dist/chunks/chunk-DXD76CMV.js +208 -0
- package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
- package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
- package/dist/chunks/chunk-GELCZWMB.js +42 -0
- package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
- package/dist/{chunk-K2CWOTI2.js → chunks/chunk-HJYOH4HC.js} +23 -18
- package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
- package/dist/chunks/chunk-HPYNW6TT.js +744 -0
- package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
- package/dist/{chunk-RZWOUA25.js → chunks/chunk-HRJ3ICQK.js} +59 -55
- package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
- package/dist/{chunk-DZE5YA7L.js → chunks/chunk-IFCIADS3.js} +571 -573
- package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
- package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
- package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
- package/dist/chunks/chunk-L7P4M4KW.js +193 -0
- package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
- package/dist/chunks/chunk-LB6TCPDI.js +0 -0
- package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
- package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
- package/dist/{chunk-7M2YN6TU.js → chunks/chunk-LOD5ZHCI.js} +213 -208
- package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
- package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
- package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
- package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
- package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
- package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
- package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
- package/dist/chunks/chunk-QHQOBUF6.js +60 -0
- package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
- package/dist/{chunk-W7GRKO7Q.js → chunks/chunk-RPJXO7GG.js} +241 -214
- package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
- package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
- package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
- package/dist/chunks/chunk-SZLAPULP.js +28 -0
- package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
- package/dist/{chunk-7U7L4NMD.js → chunks/chunk-T7RB5V5J.js} +23 -25
- package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
- package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
- package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
- package/dist/{chunk-ZVDRDPII.js → chunks/chunk-TNGVRTO5.js} +45 -20
- package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
- package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
- package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
- package/dist/chunks/chunk-U2IHWPCU.js +12 -0
- package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
- package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
- package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
- package/dist/{chunk-MWRSY4X6.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
- package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
- package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
- package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
- package/dist/chunks/chunk-W5EGGA44.js +15 -0
- package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
- package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
- package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
- package/dist/{chunk-STSX7GIX.js → chunks/chunk-YIO5EBMQ.js} +423 -377
- package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
- package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
- package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
- package/dist/chunks/client-SILZNM5N.js +42 -0
- package/dist/{config-RUSD6G5Y.js → chunks/config-25HRTPSP.js} +48 -10
- package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
- package/dist/{customCommands-TOIJFZAL.js → chunks/customCommands-TYMYZRG5.js} +11 -8
- package/dist/chunks/engine-MRVF6FK6.js +39 -0
- package/dist/{env-XGKBLU3D.js → chunks/env-TJ5NOBEB.js} +7 -5
- package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
- package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
- package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
- package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
- package/dist/{kodeAgentStreamJsonSession-UGEZJJEB.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
- package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
- package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
- package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
- package/dist/{kodeHooks-QWM36A3D.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
- package/dist/{llm-ZUQC4WYM.js → chunks/llm-62N6T5ZT.js} +1734 -1526
- package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
- package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
- package/dist/{mentionProcessor-EE3XFHCJ.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
- package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
- package/dist/{messages-EOYQKPGM.js → chunks/messages-EEWWLPHN.js} +2 -6
- package/dist/chunks/model-5TIEKQPD.js +37 -0
- package/dist/{openai-RRCWW33N.js → chunks/openai-XXK3YZG4.js} +13 -10
- package/dist/{outputStyles-62Q3VH2J.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
- package/dist/chunks/permissions-HO7INPWM.js +27 -0
- package/dist/{pluginRuntime-6ETCZ2LL.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
- package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
- package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
- package/dist/chunks/registry-XYJXMOA5.js +60 -0
- package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
- package/dist/chunks/server-REXXF5IK.js +46 -0
- package/dist/{skillMarketplace-3RXQBVOL.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
- package/dist/chunks/src-OROQIWP3.js +44 -0
- package/dist/chunks/src-QXLGGMUW.js +1647 -0
- package/dist/chunks/src-QXLGGMUW.js.map +7 -0
- package/dist/{cli-DOPVY2CW.js → chunks/src-SSDT6MVP.js} +2659 -3384
- package/dist/chunks/src-SSDT6MVP.js.map +7 -0
- package/dist/chunks/theme-YBJUIMWK.js +10 -0
- package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
- package/dist/chunks/uuid-6577SO6X.js +7 -0
- package/dist/chunks/uuid-6577SO6X.js.map +7 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
- package/dist/entrypoints/cli.js +10 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/daemon.js +10 -0
- package/dist/entrypoints/daemon.js.map +7 -0
- package/dist/entrypoints/mcp.js +71 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/index.js +6 -7
- package/dist/index.js.map +3 -3
- package/dist/sdk/client.cjs +391 -0
- package/dist/sdk/client.cjs.map +7 -0
- package/dist/sdk/client.js +364 -0
- package/dist/sdk/client.js.map +7 -0
- package/dist/sdk/core.cjs +19932 -0
- package/dist/sdk/core.cjs.map +7 -0
- package/dist/sdk/core.js +19893 -0
- package/dist/sdk/core.js.map +7 -0
- package/dist/sdk/daemon-client.cjs +257 -0
- package/dist/sdk/daemon-client.cjs.map +7 -0
- package/dist/sdk/daemon-client.js +221 -0
- package/dist/sdk/daemon-client.js.map +7 -0
- package/dist/sdk/protocol.cjs +170 -0
- package/dist/sdk/protocol.cjs.map +7 -0
- package/dist/sdk/protocol.js +140 -0
- package/dist/sdk/protocol.js.map +7 -0
- package/dist/sdk/runtime-node.cjs +236 -0
- package/dist/sdk/runtime-node.cjs.map +7 -0
- package/dist/sdk/runtime-node.js +222 -0
- package/dist/sdk/runtime-node.js.map +7 -0
- package/dist/sdk/runtime.cjs +17 -0
- package/dist/sdk/runtime.cjs.map +7 -0
- package/dist/sdk/runtime.js +0 -0
- package/dist/sdk/runtime.js.map +7 -0
- package/dist/sdk/tools.cjs +30300 -0
- package/dist/sdk/tools.cjs.map +7 -0
- package/dist/sdk/tools.js +30282 -0
- package/dist/sdk/tools.js.map +7 -0
- package/dist/webui/assets/index-5hlfByVS.css +1 -0
- package/dist/webui/assets/index-BR9lm1lA.js +82 -0
- package/dist/webui/index.html +28 -0
- package/package.json +93 -22
- package/scripts/binary-utils.cjs +12 -4
- package/scripts/cli-acp-wrapper.cjs +3 -17
- package/scripts/cli-wrapper.cjs +5 -7
- package/scripts/postinstall.js +8 -4
- package/dist/REPL-CW7AYLVL.js +0 -42
- package/dist/acp-VEPJ74LT.js +0 -1357
- package/dist/acp-VEPJ74LT.js.map +0 -7
- package/dist/agentsValidate-7LH4HTNR.js.map +0 -7
- package/dist/ask-3NHFFUQG.js.map +0 -7
- package/dist/autoUpdater-ITPIHCOI.js +0 -17
- package/dist/chunk-3IN27HA5.js.map +0 -7
- package/dist/chunk-4FX3IVPT.js +0 -164
- package/dist/chunk-4FX3IVPT.js.map +0 -7
- package/dist/chunk-4RTX4AG4.js.map +0 -7
- package/dist/chunk-5PDP7R6N.js +0 -515
- package/dist/chunk-5PDP7R6N.js.map +0 -7
- package/dist/chunk-73WGVYLQ.js.map +0 -7
- package/dist/chunk-7M2YN6TU.js.map +0 -7
- package/dist/chunk-7U7L4NMD.js.map +0 -7
- package/dist/chunk-ABLVTESJ.js.map +0 -7
- package/dist/chunk-AFFSCMYS.js.map +0 -7
- package/dist/chunk-ARZSBOAO.js.map +0 -7
- package/dist/chunk-CIG63V4E.js +0 -72
- package/dist/chunk-CIG63V4E.js.map +0 -7
- package/dist/chunk-CM3EGTG6.js +0 -1609
- package/dist/chunk-CM3EGTG6.js.map +0 -7
- package/dist/chunk-DZE5YA7L.js.map +0 -7
- package/dist/chunk-E6YNABER.js.map +0 -7
- package/dist/chunk-EZXMVTDU.js.map +0 -7
- package/dist/chunk-F2SJXUDI.js +0 -148
- package/dist/chunk-F2SJXUDI.js.map +0 -7
- package/dist/chunk-FC5ZCKBI.js +0 -30167
- package/dist/chunk-FC5ZCKBI.js.map +0 -7
- package/dist/chunk-HCBELH4J.js +0 -145
- package/dist/chunk-HCBELH4J.js.map +0 -7
- package/dist/chunk-HN4E4UUQ.js.map +0 -7
- package/dist/chunk-IZVMU4S2.js +0 -654
- package/dist/chunk-IZVMU4S2.js.map +0 -7
- package/dist/chunk-K2CWOTI2.js.map +0 -7
- package/dist/chunk-LC4TVOCZ.js +0 -835
- package/dist/chunk-LC4TVOCZ.js.map +0 -7
- package/dist/chunk-MIW7N2MY.js +0 -2613
- package/dist/chunk-MIW7N2MY.js.map +0 -7
- package/dist/chunk-MWRSY4X6.js.map +0 -7
- package/dist/chunk-ND3XWFO6.js +0 -34
- package/dist/chunk-ND3XWFO6.js.map +0 -7
- package/dist/chunk-QVLYOPO5.js.map +0 -7
- package/dist/chunk-RZWOUA25.js.map +0 -7
- package/dist/chunk-S6HRABTA.js.map +0 -7
- package/dist/chunk-STSX7GIX.js.map +0 -7
- package/dist/chunk-UHYRLID6.js.map +0 -7
- package/dist/chunk-UKHTVRJM.js +0 -47
- package/dist/chunk-UKHTVRJM.js.map +0 -7
- package/dist/chunk-UYXEDKOZ.js +0 -24
- package/dist/chunk-UYXEDKOZ.js.map +0 -7
- package/dist/chunk-W7GRKO7Q.js.map +0 -7
- package/dist/chunk-WVHORZQ5.js +0 -17
- package/dist/chunk-WVHORZQ5.js.map +0 -7
- package/dist/chunk-WWUWDNWW.js +0 -49
- package/dist/chunk-WWUWDNWW.js.map +0 -7
- package/dist/chunk-YC6LJCDE.js.map +0 -7
- package/dist/chunk-YXYYDIMI.js +0 -2931
- package/dist/chunk-YXYYDIMI.js.map +0 -7
- package/dist/chunk-ZVDRDPII.js.map +0 -7
- package/dist/cli-DOPVY2CW.js.map +0 -7
- package/dist/commands-2BF2CJ3A.js +0 -46
- package/dist/context-6FXPETYH.js +0 -30
- package/dist/costTracker-6SL26FDB.js +0 -19
- package/dist/kodeAgentSessionLoad-MITZADPB.js +0 -18
- package/dist/kodeAgentSessionResume-GVRWB4WO.js +0 -16
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +0 -7
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
- package/dist/llm-ZUQC4WYM.js.map +0 -7
- package/dist/llmLazy-54QQHA54.js +0 -15
- package/dist/loader-FYHJQES5.js +0 -28
- package/dist/mcp-J332IKT3.js +0 -49
- package/dist/mentionProcessor-EE3XFHCJ.js.map +0 -7
- package/dist/model-FV3JDJKH.js +0 -30
- package/dist/pluginRuntime-6ETCZ2LL.js.map +0 -7
- package/dist/pluginValidation-I4YKUWGS.js +0 -17
- package/dist/prompts-ZLEKDD77.js +0 -48
- package/dist/query-VFRJPBGD.js +0 -50
- package/dist/responsesStreaming-AW344PQO.js +0 -10
- package/dist/ripgrep-3NTIKQYW.js +0 -17
- package/dist/state-P5G6CO5V.js +0 -16
- package/dist/theme-3LWP3BG7.js +0 -14
- package/dist/toolPermissionSettings-3ROBVTUK.js +0 -18
- package/dist/tools-RO7HSSE5.js +0 -47
- package/dist/userInput-JSBJRFSK.js +0 -311
- package/dist/userInput-JSBJRFSK.js.map +0 -7
- package/dist/uuid-QN2CNKKN.js +0 -9
- /package/dist/{REPL-CW7AYLVL.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
- /package/dist/{autoUpdater-ITPIHCOI.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
- /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
- /package/dist/{commands-2BF2CJ3A.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
- /package/dist/{config-RUSD6G5Y.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
- /package/dist/{context-6FXPETYH.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
- /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
- /package/dist/{customCommands-TOIJFZAL.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
- /package/dist/{env-XGKBLU3D.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
- /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
- /package/dist/{kodeAgentSessionLoad-MITZADPB.js.map → chunks/config-25HRTPSP.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-GVRWB4WO.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
- /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
- /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
- /package/dist/{kodeHooks-QWM36A3D.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
- /package/dist/{llmLazy-54QQHA54.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
- /package/dist/{loader-FYHJQES5.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
- /package/dist/{mcp-J332IKT3.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
- /package/dist/{messages-EOYQKPGM.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
- /package/dist/{model-FV3JDJKH.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
- /package/dist/{openai-RRCWW33N.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
- /package/dist/{outputStyles-62Q3VH2J.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
- /package/dist/{pluginValidation-I4YKUWGS.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
- /package/dist/{prompts-ZLEKDD77.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
- /package/dist/{query-VFRJPBGD.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
- /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
- /package/dist/{ripgrep-3NTIKQYW.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
- /package/dist/{skillMarketplace-3RXQBVOL.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
- /package/dist/{state-P5G6CO5V.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
- /package/dist/{theme-3LWP3BG7.js.map → chunks/server-REXXF5IK.js.map} +0 -0
- /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
- /package/dist/{toolPermissionSettings-3ROBVTUK.js.map → chunks/src-OROQIWP3.js.map} +0 -0
- /package/dist/{tools-RO7HSSE5.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
- /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../apps/cli/src/services/skillMarketplace/schema.ts", "../../apps/cli/src/services/skillMarketplace/marketplaces.ts", "../../apps/cli/src/services/skillMarketplace/fsUtils.ts", "../../apps/cli/src/services/skillMarketplace/paths.ts", "../../apps/cli/src/services/skillMarketplace/store.ts", "../../apps/cli/src/services/skillMarketplace/json.ts", "../../apps/cli/src/services/skillMarketplace/sources.ts", "../../apps/cli/src/services/skillMarketplace/pluginState.ts", "../../apps/cli/src/services/skillMarketplace/plugins/resolve.ts", "../../apps/cli/src/services/skillMarketplace/plugins/toggle.ts", "../../apps/cli/src/services/skillMarketplace/plugins/install.ts", "../../apps/cli/src/services/skillMarketplace/plugins/uninstall.ts", "../../apps/cli/src/services/skillMarketplace/plugins/list.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\n\nexport const MarketplaceSourceSchema = z.discriminatedUnion('source', [\n z.strictObject({\n source: z.literal('github'),\n repo: z.string().min(3),\n ref: z.string().optional(),\n path: z.string().optional(),\n }),\n z.strictObject({\n source: z.literal('git'),\n url: z.string().min(3),\n ref: z.string().optional(),\n path: z.string().optional(),\n }),\n z.strictObject({\n source: z.literal('url'),\n url: z.string().url(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n z.strictObject({\n source: z.literal('npm'),\n package: z.string().min(1),\n }),\n z.strictObject({\n source: z.literal('file'),\n path: z.string().min(1),\n }),\n z.strictObject({\n source: z.literal('directory'),\n path: z.string().min(1),\n }),\n])\n\nexport type MarketplaceSource = z.infer<typeof MarketplaceSourceSchema>\n\nconst MarketplacePathListSchema = z.preprocess(value => {\n if (typeof value === 'string') return [value]\n return value\n}, z.array(z.string()))\n\nconst MarketplacePluginSchema = z\n .object({\n name: z.string().min(1),\n description: z.string().optional(),\n source: z.string().optional().default('./'),\n strict: z.boolean().optional(),\n skills: MarketplacePathListSchema.optional(),\n commands: MarketplacePathListSchema.optional(),\n })\n .passthrough()\n\nexport const MarketplaceManifestSchema = z\n .object({\n $schema: z.string().optional(),\n description: z.string().optional(),\n name: z.string().min(1),\n owner: z\n .object({\n name: z.string().optional(),\n email: z.string().optional(),\n })\n .passthrough()\n .optional(),\n metadata: z.record(z.string(), z.unknown()).optional().default({}),\n plugins: z.array(MarketplacePluginSchema).default([]),\n })\n .passthrough()\n\nexport type MarketplaceManifest = z.infer<typeof MarketplaceManifestSchema>\nexport type PluginEntry = MarketplaceManifest['plugins'][number]\n\nexport const KnownMarketplacesSchema = z.record(\n z.string(),\n z.strictObject({\n source: MarketplaceSourceSchema,\n installLocation: z.string().min(1),\n lastUpdated: z.string().min(1),\n autoUpdate: z.boolean().optional(),\n }),\n)\n\nexport type KnownMarketplacesConfig = z.infer<typeof KnownMarketplacesSchema>\n", "import { existsSync, renameSync, rmSync } from 'node:fs'\nimport { randomUUID } from 'node:crypto'\nimport { join } from 'node:path'\n\nimport {\n MarketplaceSourceSchema,\n type KnownMarketplacesConfig,\n type MarketplaceManifest,\n type MarketplaceSource,\n} from './schema'\nimport { ensureDir } from './fsUtils'\nimport { marketplaceCacheBaseDir } from './paths'\nimport {\n loadKnownMarketplaces,\n readMarketplaceFromDirectory,\n saveKnownMarketplaces,\n} from './store'\nimport {\n cacheMarketplaceToTempDir,\n parseMarketplaceSourceInput,\n} from './sources'\n\nexport function listMarketplaces(): KnownMarketplacesConfig {\n return loadKnownMarketplaces()\n}\n\nexport async function addMarketplace(\n sourceInput: string,\n): Promise<{ name: string }> {\n const source = parseMarketplaceSourceInput(sourceInput)\n const validatedSource = MarketplaceSourceSchema.safeParse(source)\n if (!validatedSource.success) {\n throw new Error(\n `Invalid marketplace source: ${validatedSource.error.issues.map(i => i.message).join('; ')}`,\n )\n }\n\n const config = loadKnownMarketplaces()\n const cacheBase = marketplaceCacheBaseDir()\n ensureDir(cacheBase)\n\n const tempDir = join(cacheBase, `tmp-${randomUUID()}`)\n try {\n await cacheMarketplaceToTempDir(validatedSource.data, tempDir)\n const manifest = readMarketplaceFromDirectory(tempDir)\n const marketplaceName = manifest.name\n\n if (config[marketplaceName]) {\n throw new Error(\n `Marketplace '${marketplaceName}' is already installed. Remove it first to re-add.`,\n )\n }\n\n const installLocation = join(cacheBase, marketplaceName)\n if (existsSync(installLocation)) {\n throw new Error(\n `Marketplace cache directory already exists: ${installLocation}`,\n )\n }\n\n renameSync(tempDir, installLocation)\n config[marketplaceName] = {\n source: validatedSource.data,\n installLocation,\n lastUpdated: new Date().toISOString(),\n }\n saveKnownMarketplaces(config)\n return { name: marketplaceName }\n } catch (error) {\n if (existsSync(tempDir)) rmSync(tempDir, { recursive: true, force: true })\n throw error\n }\n}\n\nexport function removeMarketplace(name: string): void {\n const trimmed = name.trim()\n if (!trimmed) throw new Error('Marketplace name is required')\n\n const config = loadKnownMarketplaces()\n const entry = config[trimmed]\n if (!entry) throw new Error(`Marketplace '${trimmed}' not found`)\n\n delete config[trimmed]\n saveKnownMarketplaces(config)\n\n try {\n if (existsSync(entry.installLocation)) {\n rmSync(entry.installLocation, { recursive: true, force: true })\n }\n } catch {\n // best-effort cleanup\n }\n}\n\nexport async function refreshMarketplaceAsync(name: string): Promise<void> {\n const trimmed = name.trim()\n if (!trimmed) throw new Error('Marketplace name is required')\n\n const config = loadKnownMarketplaces()\n const entry = config[trimmed]\n if (!entry) throw new Error(`Marketplace '${trimmed}' not found`)\n\n const cacheBase = marketplaceCacheBaseDir()\n ensureDir(cacheBase)\n\n const tempDir = join(cacheBase, `tmp-${randomUUID()}`)\n try {\n await cacheMarketplaceToTempDir(entry.source, tempDir)\n const manifest = readMarketplaceFromDirectory(tempDir)\n if (manifest.name !== trimmed) {\n throw new Error(\n `Marketplace name mismatch on refresh: expected ${trimmed}, got ${manifest.name}`,\n )\n }\n\n if (existsSync(entry.installLocation)) {\n rmSync(entry.installLocation, { recursive: true, force: true })\n }\n renameSync(tempDir, entry.installLocation)\n config[trimmed] = {\n ...entry,\n lastUpdated: new Date().toISOString(),\n }\n saveKnownMarketplaces(config)\n } catch (error) {\n if (existsSync(tempDir)) rmSync(tempDir, { recursive: true, force: true })\n throw error\n }\n}\n\nexport async function refreshAllMarketplacesAsync(\n onProgress?: (message: string) => void,\n): Promise<{ refreshed: string[]; failed: { name: string; error: string }[] }> {\n const config = loadKnownMarketplaces()\n const names = Object.keys(config).sort()\n\n const refreshed: string[] = []\n const failed: { name: string; error: string }[] = []\n\n for (const name of names) {\n try {\n onProgress?.(`Updating marketplace: ${name}...`)\n await refreshMarketplaceAsync(name)\n refreshed.push(name)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n failed.push({ name, error: message })\n onProgress?.(`Failed to refresh marketplace ${name}: ${message}`)\n }\n }\n\n return { refreshed, failed }\n}\n\nexport function getMarketplaceManifest(marketplaceName: string): {\n manifest: MarketplaceManifest\n rootDir: string\n source: MarketplaceSource\n} {\n const config = loadKnownMarketplaces()\n const entry = config[marketplaceName]\n if (!entry) {\n const available = Object.keys(config).sort().join(', ')\n throw new Error(\n `Marketplace '${marketplaceName}' not found. Available marketplaces: ${available || '(none)'}`,\n )\n }\n const manifest = readMarketplaceFromDirectory(entry.installLocation)\n return { manifest, rootDir: entry.installLocation, source: entry.source }\n}\n", "import {\n copyFileSync,\n existsSync,\n mkdirSync,\n readdirSync,\n rmSync,\n} from 'node:fs'\nimport { dirname, join, resolve, sep } from 'node:path'\n\nexport function ensureDir(path: string): void {\n mkdirSync(path, { recursive: true })\n}\n\nexport function ensureEmptyDir(path: string): void {\n if (existsSync(path)) rmSync(path, { recursive: true, force: true })\n ensureDir(path)\n}\n\nexport function safeJoinWithin(baseDir: string, relativePath: string): string {\n const normalized = relativePath.replace(/\\\\/g, '/')\n if (!normalized || normalized.startsWith('/') || normalized.includes('..')) {\n throw new Error(`Unsafe path in archive: ${relativePath}`)\n }\n const joined = resolve(baseDir, normalized.split('/').join(sep))\n const resolvedBase = resolve(baseDir)\n if (!joined.startsWith(resolvedBase + sep) && joined !== resolvedBase) {\n throw new Error(`Path traversal detected: ${relativePath}`)\n }\n return joined\n}\n\nexport function safeCopyDirectory(srcDir: string, destDir: string): void {\n ensureDir(destDir)\n const entries = readdirSync(srcDir, { withFileTypes: true })\n for (const entry of entries) {\n const srcPath = join(srcDir, entry.name)\n const destPath = join(destDir, entry.name)\n\n if (entry.isDirectory()) {\n safeCopyDirectory(srcPath, destPath)\n continue\n }\n\n if (entry.isFile()) {\n ensureDir(dirname(destPath))\n copyFileSync(srcPath, destPath)\n }\n }\n}\n", "import { join } from 'node:path'\n\nimport { CONFIG_BASE_DIR } from '#core/constants/product'\nimport { getCwd } from '#core/utils/state'\nimport { getKodeBaseDir } from '#core/utils/env'\n\nimport type { PluginScope } from './types'\n\nconst KNOWN_MARKETPLACES_FILE = 'known_marketplaces.json'\nconst MARKETPLACES_CACHE_DIR = 'marketplaces'\nconst INSTALLED_SKILL_PLUGINS_FILE = 'installed-skill-plugins.json'\n\nexport function userKodeDir(): string {\n return getKodeBaseDir()\n}\n\nexport function normalizePluginScope(options?: {\n scope?: PluginScope\n project?: boolean\n}): PluginScope {\n if (\n options?.scope === 'user' ||\n options?.scope === 'project' ||\n options?.scope === 'local'\n ) {\n return options.scope\n }\n if (options?.project === true) return 'project'\n return 'user'\n}\n\nexport function scopeBaseDir(scope: PluginScope): string {\n if (scope === 'user') return userKodeDir()\n return join(getCwd(), CONFIG_BASE_DIR)\n}\n\nexport function scopeSkillsDir(scope: PluginScope): string {\n return join(scopeBaseDir(scope), 'skills')\n}\n\nexport function scopeCommandsDir(scope: PluginScope): string {\n return join(scopeBaseDir(scope), 'commands')\n}\n\nexport function scopeInstalledPluginsDir(scope: PluginScope): string {\n return join(scopeBaseDir(scope), 'plugins', 'installed')\n}\n\nexport function scopeInstalledPluginRoot(\n scope: PluginScope,\n plugin: string,\n marketplace: string,\n): string {\n return join(scopeInstalledPluginsDir(scope), plugin, marketplace)\n}\n\nfunction pluginsDir(): string {\n return join(userKodeDir(), 'plugins')\n}\n\nexport function knownMarketplacesConfigPath(): string {\n return join(pluginsDir(), KNOWN_MARKETPLACES_FILE)\n}\n\nexport function marketplaceCacheBaseDir(): string {\n return join(pluginsDir(), MARKETPLACES_CACHE_DIR)\n}\n\nexport function installedSkillPluginsPath(): string {\n return join(userKodeDir(), INSTALLED_SKILL_PLUGINS_FILE)\n}\n", "import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport {\n KnownMarketplacesSchema,\n MarketplaceManifestSchema,\n type KnownMarketplacesConfig,\n type MarketplaceManifest,\n} from './schema'\nimport { knownMarketplacesConfigPath } from './paths'\nimport { readJsonFile, writeJsonFile } from './json'\n\nexport function loadKnownMarketplaces(): KnownMarketplacesConfig {\n const raw = readJsonFile<unknown>(knownMarketplacesConfigPath(), {})\n const parsed = KnownMarketplacesSchema.safeParse(raw)\n if (!parsed.success) {\n throw new Error(\n `Marketplace configuration is corrupted: ${parsed.error.issues.map(i => i.message).join('; ')}`,\n )\n }\n return parsed.data\n}\n\nexport function saveKnownMarketplaces(config: KnownMarketplacesConfig): void {\n const parsed = KnownMarketplacesSchema.safeParse(config)\n if (!parsed.success) {\n throw new Error(`Invalid marketplace config: ${parsed.error.message}`)\n }\n writeJsonFile(knownMarketplacesConfigPath(), parsed.data)\n}\n\nexport function readMarketplaceFromDirectory(\n rootDir: string,\n): MarketplaceManifest {\n const primaryMarketplaceFile = resolve(\n rootDir,\n '.kode-plugin',\n 'marketplace.json',\n )\n const legacyMarketplaceFile = resolve(\n rootDir,\n '.claude-plugin',\n 'marketplace.json',\n )\n const marketplaceFile = existsSync(primaryMarketplaceFile)\n ? primaryMarketplaceFile\n : legacyMarketplaceFile\n if (!existsSync(marketplaceFile)) {\n throw new Error(\n 'Marketplace file not found (expected .kode-plugin/marketplace.json or .claude-plugin/marketplace.json)',\n )\n }\n const raw = readFileSync(marketplaceFile, 'utf8')\n const parsed = MarketplaceManifestSchema.safeParse(JSON.parse(raw))\n if (!parsed.success) {\n throw new Error(\n `Invalid marketplace.json: ${parsed.error.issues.map(i => i.message).join('; ')}`,\n )\n }\n return parsed.data\n}\n", "import { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\nimport { ensureDir } from './fsUtils'\n\nexport function readJsonFile<T>(path: string, fallback: T): T {\n try {\n if (!existsSync(path)) return fallback\n const raw = readFileSync(path, 'utf8')\n return JSON.parse(raw) as T\n } catch {\n return fallback\n }\n}\n\nexport function writeJsonFile(path: string, value: unknown): void {\n ensureDir(dirname(path))\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n", "import { copyFileSync, existsSync, lstatSync, writeFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { unzipSync } from 'fflate'\n\nimport {\n ensureDir,\n ensureEmptyDir,\n safeCopyDirectory,\n safeJoinWithin,\n} from './fsUtils'\nimport type { MarketplaceSource } from './schema'\n\nfunction githubRepoFromUrl(input: string): string | null {\n const ssh = input.match(/^git@github\\.com:([^/]+\\/[^/]+?)(?:\\.git)?$/)\n if (ssh?.[1]) return ssh[1]\n const https = input.match(\n /^https?:\\/\\/github\\.com\\/([^/]+\\/[^/]+?)(?:\\.git)?$/,\n )\n if (https?.[1]) return https[1]\n return null\n}\n\nfunction parseRefAndPath(input: string): {\n base: string\n ref?: string\n path?: string\n} {\n const [beforeHash, hashPart] = input.split('#', 2)\n const [base, refPart] = beforeHash.split('@', 2)\n return {\n base,\n ref: refPart?.trim() || undefined,\n path: hashPart?.trim() || undefined,\n }\n}\n\nfunction normalizeMarketplaceSubPath(path: string | undefined): string | null {\n if (!path) return null\n const trimmed = path\n .trim()\n .replace(/^\\.?\\//, '')\n .replace(/^\\/+/, '')\n if (!trimmed) return null\n if (trimmed.includes('..')) {\n throw new Error(`Marketplace path contains '..': ${path}`)\n }\n return trimmed.replace(/\\\\/g, '/').replace(/\\/+$/, '')\n}\n\nexport function parseMarketplaceSourceInput(\n sourceInput: string,\n): MarketplaceSource {\n const raw = sourceInput.trim()\n if (!raw) throw new Error('Marketplace source is required')\n\n for (const prefix of [\n 'github:',\n 'git:',\n 'url:',\n 'npm:',\n 'file:',\n 'dir:',\n ] as const) {\n if (raw.startsWith(prefix)) {\n const rest = raw.slice(prefix.length).trim()\n const parsed = parseRefAndPath(rest)\n if (prefix === 'github:') {\n return {\n source: 'github',\n repo: parsed.base.trim(),\n ...(parsed.ref ? { ref: parsed.ref } : {}),\n ...(parsed.path ? { path: parsed.path } : {}),\n }\n }\n if (prefix === 'git:') {\n const repo = githubRepoFromUrl(parsed.base.trim())\n if (repo) {\n return {\n source: 'github',\n repo,\n ...(parsed.ref ? { ref: parsed.ref } : {}),\n ...(parsed.path ? { path: parsed.path } : {}),\n }\n }\n return {\n source: 'git',\n url: parsed.base.trim(),\n ...(parsed.ref ? { ref: parsed.ref } : {}),\n ...(parsed.path ? { path: parsed.path } : {}),\n }\n }\n if (prefix === 'url:') return { source: 'url', url: rest }\n if (prefix === 'npm:') return { source: 'npm', package: rest }\n if (prefix === 'file:') return { source: 'file', path: rest }\n if (prefix === 'dir:') return { source: 'directory', path: rest }\n }\n }\n\n const resolved = resolve(raw)\n if (existsSync(resolved)) {\n const stat = lstatSync(resolved)\n if (stat.isDirectory()) return { source: 'directory', path: resolved }\n if (stat.isFile()) return { source: 'file', path: resolved }\n throw new Error(`Marketplace source must be a directory or file: ${raw}`)\n }\n\n const parsed = parseRefAndPath(raw)\n if (/^[^/\\s]+\\/[^/\\s]+$/.test(parsed.base)) {\n return {\n source: 'github',\n repo: parsed.base,\n ...(parsed.ref ? { ref: parsed.ref } : {}),\n ...(parsed.path ? { path: parsed.path } : {}),\n }\n }\n\n const repo = githubRepoFromUrl(parsed.base)\n if (repo) {\n return {\n source: 'github',\n repo,\n ...(parsed.ref ? { ref: parsed.ref } : {}),\n ...(parsed.path ? { path: parsed.path } : {}),\n }\n }\n\n if (/^https?:\\/\\//.test(raw)) {\n return { source: 'url', url: raw }\n }\n\n throw new Error(\n `Unsupported marketplace source: ${sourceInput}. Use a local path, \"owner/repo\", or prefixes like github:, git:, url:, file:, dir:.`,\n )\n}\n\nasync function fetchBinary(url: string): Promise<Uint8Array> {\n const resp = await fetch(url, { method: 'GET' })\n if (!resp.ok) {\n throw new Error(\n `Failed to download ${url}: ${resp.status} ${resp.statusText}`,\n )\n }\n const buf = await resp.arrayBuffer()\n return new Uint8Array(buf)\n}\n\nasync function tryDownloadGithubZip(\n repo: string,\n ref: string,\n): Promise<Uint8Array> {\n const [owner, name] = repo.split('/', 2)\n if (!owner || !name) throw new Error(`Invalid GitHub repo: ${repo}`)\n\n const candidates = ref.startsWith('refs/')\n ? [ref]\n : [`refs/heads/${ref}`, `refs/tags/${ref}`]\n\n let lastError: Error | null = null\n for (const candidate of candidates) {\n const url = `https://codeload.github.com/${owner}/${name}/zip/${candidate}`\n try {\n return await fetchBinary(url)\n } catch (err) {\n lastError = err instanceof Error ? err : Error(String(err))\n }\n }\n throw lastError ?? new Error(`Failed to download GitHub repo ${repo}@${ref}`)\n}\n\nexport async function cacheMarketplaceToTempDir(\n source: MarketplaceSource,\n tempDir: string,\n): Promise<void> {\n ensureEmptyDir(tempDir)\n\n if (source.source === 'directory') {\n const root = resolve(source.path)\n if (!existsSync(root) || !lstatSync(root).isDirectory()) {\n throw new Error(`Directory not found: ${source.path}`)\n }\n safeCopyDirectory(root, tempDir)\n return\n }\n\n if (source.source === 'file') {\n const file = resolve(source.path)\n if (!existsSync(file) || !lstatSync(file).isFile()) {\n throw new Error(`File not found: ${source.path}`)\n }\n const out = join(tempDir, '.kode-plugin')\n ensureDir(out)\n copyFileSync(file, join(out, 'marketplace.json'))\n return\n }\n\n if (source.source === 'github') {\n const pathWithin = normalizeMarketplaceSubPath(source.path)\n\n const preferredRef = source.ref?.trim() || ''\n const refsToTry = preferredRef ? [preferredRef] : ['main', 'master']\n\n let zip: Uint8Array | null = null\n let usedRef = preferredRef || 'main'\n let lastError: Error | null = null\n for (const ref of refsToTry) {\n try {\n zip = await tryDownloadGithubZip(source.repo, ref)\n usedRef = ref\n break\n } catch (err) {\n lastError = err instanceof Error ? err : Error(String(err))\n }\n }\n if (!zip) {\n throw (\n lastError ?? new Error(`Failed to download GitHub repo ${source.repo}`)\n )\n }\n\n const files = unzipSync(zip)\n const names = Object.keys(files).filter(Boolean)\n const topDir = names.length > 0 ? names[0]!.split('/')[0]! : ''\n const includePrefix = pathWithin\n ? `${topDir}/${pathWithin.replace(/\\/+$/, '')}/`\n : `${topDir}/`\n\n let extractedCount = 0\n for (const [name, data] of Object.entries(files)) {\n if (!name.startsWith(includePrefix)) continue\n const rel = name.slice(includePrefix.length)\n if (!rel) continue\n if (rel.endsWith('/')) {\n ensureDir(safeJoinWithin(tempDir, rel))\n continue\n }\n const dest = safeJoinWithin(tempDir, rel)\n ensureDir(dirname(dest))\n writeFileSync(dest, data)\n extractedCount++\n }\n\n if (extractedCount === 0) {\n throw new Error(\n `No files extracted from ${source.repo}@${usedRef}${pathWithin ? `#${pathWithin}` : ''}`,\n )\n }\n return\n }\n\n if (source.source === 'url') {\n const url = source.url\n if (url.toLowerCase().endsWith('.json')) {\n const data = await fetchBinary(url)\n const out = join(tempDir, '.kode-plugin')\n ensureDir(out)\n writeFileSync(join(out, 'marketplace.json'), Buffer.from(data))\n return\n }\n if (url.toLowerCase().endsWith('.zip')) {\n const zip = await fetchBinary(url)\n const files = unzipSync(zip)\n for (const [name, data] of Object.entries(files)) {\n if (!name || name.endsWith('/')) continue\n const dest = safeJoinWithin(tempDir, name)\n ensureDir(dirname(dest))\n writeFileSync(dest, data)\n }\n return\n }\n throw new Error(\n `Unsupported url marketplace source. Provide a .json or .zip URL: ${url}`,\n )\n }\n\n if (source.source === 'git') {\n const repo = githubRepoFromUrl(source.url)\n if (repo) {\n await cacheMarketplaceToTempDir(\n {\n source: 'github',\n repo,\n ...(source.ref ? { ref: source.ref } : {}),\n ...(source.path ? { path: source.path } : {}),\n },\n tempDir,\n )\n return\n }\n throw new Error(\n `git sources are not supported without GitHub conversion (url=${source.url})`,\n )\n }\n\n if (source.source === 'npm') {\n throw new Error(\n `npm marketplace sources are not supported yet (package=${source.package}). Install the package and add it as a local dir instead.`,\n )\n }\n}\n", "import { ensureDir } from './fsUtils'\nimport { readJsonFile, writeJsonFile } from './json'\nimport { installedSkillPluginsPath, userKodeDir } from './paths'\nimport type { InstalledSkillPluginsFile } from './types'\n\nexport function ensurePluginInstallState(): InstalledSkillPluginsFile {\n ensureDir(userKodeDir())\n const state = readJsonFile<Record<string, any>>(\n installedSkillPluginsPath(),\n {},\n )\n for (const record of Object.values(state)) {\n if (!record || typeof record !== 'object') continue\n if (\n record.scope !== 'user' &&\n record.scope !== 'project' &&\n record.scope !== 'local'\n ) {\n record.scope = 'user'\n }\n if (record.kind !== 'skill-pack' && record.kind !== 'plugin-pack') {\n record.kind =\n typeof record.pluginRoot === 'string' ? 'plugin-pack' : 'skill-pack'\n }\n if (record.isEnabled === undefined) record.isEnabled = true\n }\n return state as InstalledSkillPluginsFile\n}\n\nexport function savePluginInstallState(state: InstalledSkillPluginsFile): void {\n writeJsonFile(installedSkillPluginsPath(), state)\n}\n\nexport function listInstalledSkillPlugins(): InstalledSkillPluginsFile {\n return ensurePluginInstallState()\n}\n", "import { join } from 'node:path'\n\nimport { CONFIG_BASE_DIR } from '#core/constants/product'\n\nimport type { InstalledSkillPlugin, InstalledSkillPluginsFile } from '../types'\nimport type { PluginEntry } from '../schema'\nimport { loadKnownMarketplaces, readMarketplaceFromDirectory } from '../store'\nimport { userKodeDir } from '../paths'\n\nexport function parsePluginSpec(spec: string): {\n plugin: string\n marketplace: string\n} {\n const trimmed = spec.trim()\n const parts = trimmed.split('@')\n if (parts.length !== 2) {\n throw new Error(\n `Invalid plugin spec: ${spec}. Expected format: <plugin>@<marketplace>`,\n )\n }\n const plugin = parts[0]!.trim()\n const marketplace = parts[1]!.trim()\n if (!plugin || !marketplace) {\n throw new Error(\n `Invalid plugin spec: ${spec}. Expected format: <plugin>@<marketplace>`,\n )\n }\n return { plugin, marketplace }\n}\n\nexport function resolvePluginForInstall(pluginInput: string): {\n plugin: string\n marketplace: string\n pluginSpec: string\n} {\n const trimmed = pluginInput.trim()\n if (!trimmed) throw new Error('Plugin is required')\n\n if (trimmed.includes('@')) {\n const resolved = parsePluginSpec(trimmed)\n return {\n ...resolved,\n pluginSpec: `${resolved.plugin}@${resolved.marketplace}`,\n }\n }\n\n const config = loadKnownMarketplaces()\n const matches: { marketplace: string; entry: PluginEntry }[] = []\n for (const [marketplace, entry] of Object.entries(config)) {\n try {\n const manifest = readMarketplaceFromDirectory(entry.installLocation)\n const found = manifest.plugins.find(p => p.name === trimmed)\n if (found) matches.push({ marketplace, entry: found })\n } catch {\n // ignore unreadable marketplaces during resolution\n }\n }\n\n if (matches.length === 0) {\n const availableMarketplaces = Object.keys(config).sort().join(', ')\n throw new Error(\n `Plugin '${trimmed}' not found in any marketplace. Available marketplaces: ${availableMarketplaces || '(none)'}`,\n )\n }\n\n if (matches.length > 1) {\n const options = matches\n .map(m => `${trimmed}@${m.marketplace}`)\n .sort()\n .join(', ')\n throw new Error(\n `Plugin '${trimmed}' is available in multiple marketplaces. Use an explicit spec: ${options}`,\n )\n }\n\n return {\n plugin: trimmed,\n marketplace: matches[0]!.marketplace,\n pluginSpec: `${trimmed}@${matches[0]!.marketplace}`,\n }\n}\n\nexport function resolveInstalledPluginSpec(\n pluginInput: string,\n state: InstalledSkillPluginsFile,\n): string {\n const trimmed = pluginInput.trim()\n if (!trimmed) throw new Error('Plugin is required')\n\n if (trimmed.includes('@')) {\n parsePluginSpec(trimmed)\n return trimmed\n }\n\n const matches = Object.entries(state).filter(\n ([, record]) => record?.plugin === trimmed,\n )\n if (matches.length === 0) {\n throw new Error(`Plugin '${trimmed}' is not installed`)\n }\n if (matches.length > 1) {\n const options = matches\n .map(([spec]) => spec)\n .sort()\n .join(', ')\n throw new Error(\n `Plugin '${trimmed}' is installed from multiple marketplaces. Use an explicit spec: ${options}`,\n )\n }\n return matches[0]![0]\n}\n\nexport function baseDirForInstallRecord(record: InstalledSkillPlugin): string {\n if (record.scope === 'user') return userKodeDir()\n const projectPath =\n typeof record.projectPath === 'string' ? record.projectPath.trim() : ''\n if (!projectPath) {\n throw new Error(\n `Installed plugin '${record.plugin}@${record.marketplace}' is missing projectPath for scope=${record.scope}`,\n )\n }\n return join(projectPath, CONFIG_BASE_DIR)\n}\n", "import { existsSync, renameSync, rmSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\n\nimport { getCwd } from '#core/utils/state'\n\nimport type { PluginScope } from '../types'\nimport { ensureDir } from '../fsUtils'\nimport {\n ensurePluginInstallState,\n savePluginInstallState,\n} from '../pluginState'\nimport { normalizePluginScope } from '../paths'\nimport { baseDirForInstallRecord, resolveInstalledPluginSpec } from './resolve'\n\nexport function disableSkillPlugin(\n pluginInput: string,\n options?: { scope?: PluginScope; project?: boolean },\n): {\n pluginSpec: string\n disabledSkills: string[]\n disabledCommands: string[]\n} {\n const requestedScope = normalizePluginScope(options)\n const state = ensurePluginInstallState()\n const pluginSpec = resolveInstalledPluginSpec(pluginInput, state)\n const record = state[pluginSpec]\n if (!record) throw new Error(`Plugin '${pluginSpec}' is not installed`)\n\n if (record.scope !== requestedScope) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed with scope=${record.scope}. Re-run with --scope ${record.scope}.`,\n )\n }\n if (record.scope !== 'user') {\n const projectPath = record.projectPath?.trim() || ''\n const cwd = getCwd()\n if (!projectPath || projectPath !== cwd) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed for a different directory. Expected cwd=${projectPath || '(missing)'}, got cwd=${cwd}`,\n )\n }\n }\n\n if (record.isEnabled === false) {\n return { pluginSpec, disabledSkills: [], disabledCommands: [] }\n }\n\n if (record.kind === 'plugin-pack') {\n record.isEnabled = false\n state[pluginSpec] = record\n savePluginInstallState(state)\n return { pluginSpec, disabledSkills: [], disabledCommands: [] }\n }\n\n const baseDir = baseDirForInstallRecord(record)\n const skillsDir = join(baseDir, 'skills')\n const commandsDir = join(\n baseDir,\n 'commands',\n record.plugin,\n record.marketplace,\n )\n const disabledSkillsBase = join(\n baseDir,\n 'skills.disabled',\n record.plugin,\n record.marketplace,\n )\n const disabledCommandsDir = join(\n baseDir,\n 'commands.disabled',\n record.plugin,\n record.marketplace,\n )\n\n const disabledSkills: string[] = []\n for (const skillName of record.skills) {\n const src = join(skillsDir, skillName)\n if (!existsSync(src)) continue\n const dest = join(disabledSkillsBase, skillName)\n ensureDir(dirname(dest))\n if (existsSync(dest)) rmSync(dest, { recursive: true, force: true })\n renameSync(src, dest)\n disabledSkills.push(skillName)\n }\n\n const disabledCommands: string[] = []\n if (existsSync(commandsDir)) {\n ensureDir(dirname(disabledCommandsDir))\n if (existsSync(disabledCommandsDir)) {\n rmSync(disabledCommandsDir, { recursive: true, force: true })\n }\n renameSync(commandsDir, disabledCommandsDir)\n disabledCommands.push(disabledCommandsDir)\n }\n\n record.isEnabled = false\n state[pluginSpec] = record\n savePluginInstallState(state)\n\n return { pluginSpec, disabledSkills, disabledCommands }\n}\n\nexport function enableSkillPlugin(\n pluginInput: string,\n options?: { scope?: PluginScope; project?: boolean },\n): { pluginSpec: string; enabledSkills: string[]; enabledCommands: string[] } {\n const requestedScope = normalizePluginScope(options)\n const state = ensurePluginInstallState()\n const pluginSpec = resolveInstalledPluginSpec(pluginInput, state)\n const record = state[pluginSpec]\n if (!record) throw new Error(`Plugin '${pluginSpec}' is not installed`)\n\n if (record.scope !== requestedScope) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed with scope=${record.scope}. Re-run with --scope ${record.scope}.`,\n )\n }\n if (record.scope !== 'user') {\n const projectPath = record.projectPath?.trim() || ''\n const cwd = getCwd()\n if (!projectPath || projectPath !== cwd) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed for a different directory. Expected cwd=${projectPath || '(missing)'}, got cwd=${cwd}`,\n )\n }\n }\n\n if (record.isEnabled !== false) {\n return { pluginSpec, enabledSkills: [], enabledCommands: [] }\n }\n\n if (record.kind === 'plugin-pack') {\n record.isEnabled = true\n state[pluginSpec] = record\n savePluginInstallState(state)\n return { pluginSpec, enabledSkills: [], enabledCommands: [] }\n }\n\n const baseDir = baseDirForInstallRecord(record)\n const skillsDir = join(baseDir, 'skills')\n const commandsDir = join(\n baseDir,\n 'commands',\n record.plugin,\n record.marketplace,\n )\n const disabledSkillsBase = join(\n baseDir,\n 'skills.disabled',\n record.plugin,\n record.marketplace,\n )\n const disabledCommandsDir = join(\n baseDir,\n 'commands.disabled',\n record.plugin,\n record.marketplace,\n )\n\n const enabledSkills: string[] = []\n for (const skillName of record.skills) {\n const src = join(disabledSkillsBase, skillName)\n if (!existsSync(src)) continue\n const dest = join(skillsDir, skillName)\n ensureDir(dirname(dest))\n if (existsSync(dest)) {\n throw new Error(`Destination already exists: ${dest}`)\n }\n renameSync(src, dest)\n enabledSkills.push(skillName)\n }\n\n const enabledCommands: string[] = []\n if (existsSync(disabledCommandsDir)) {\n ensureDir(dirname(commandsDir))\n if (existsSync(commandsDir)) {\n throw new Error(`Destination already exists: ${commandsDir}`)\n }\n renameSync(disabledCommandsDir, commandsDir)\n enabledCommands.push(commandsDir)\n }\n\n record.isEnabled = true\n state[pluginSpec] = record\n savePluginInstallState(state)\n\n return { pluginSpec, enabledSkills, enabledCommands }\n}\n", "import { basename, dirname, join, resolve } from 'node:path'\nimport { copyFileSync, existsSync, lstatSync } from 'node:fs'\n\nimport { getCwd } from '#core/utils/state'\n\nimport type { PluginScope } from '../types'\nimport {\n ensureDir,\n ensureEmptyDir,\n safeCopyDirectory,\n safeJoinWithin,\n} from '../fsUtils'\nimport {\n normalizePluginScope,\n scopeCommandsDir,\n scopeInstalledPluginRoot,\n scopeSkillsDir,\n} from '../paths'\nimport {\n ensurePluginInstallState,\n savePluginInstallState,\n} from '../pluginState'\nimport { getMarketplaceManifest } from '../marketplaces'\nimport { resolvePluginForInstall } from './resolve'\nimport type { MarketplaceSource } from '../schema'\n\nexport function installSkillPlugin(\n pluginInput: string,\n options?: { scope?: PluginScope; project?: boolean; force?: boolean },\n): {\n pluginSpec: string\n installedSkills: string[]\n installedCommands: string[]\n} {\n const scope = normalizePluginScope(options)\n const { plugin, marketplace, pluginSpec } =\n resolvePluginForInstall(pluginInput)\n const { manifest, rootDir, source } = getMarketplaceManifest(marketplace)\n\n const entry = manifest.plugins.find(p => p.name === plugin)\n if (!entry) {\n const available = manifest.plugins\n .map(p => p.name)\n .sort()\n .join(', ')\n throw new Error(\n `Plugin '${plugin}' not found in marketplace '${marketplace}'. Available plugins: ${available || '(none)'}`,\n )\n }\n\n const installState = ensurePluginInstallState()\n const existing = installState[pluginSpec]\n if (existing && existing.scope !== scope && options?.force !== true) {\n throw new Error(\n `Plugin '${pluginSpec}' is already installed with scope=${existing.scope}. Uninstall it first to install with scope=${scope}.`,\n )\n }\n if (existing && options?.force !== true) {\n throw new Error(\n `Plugin '${pluginSpec}' is already installed. Re-run with --force to reinstall.`,\n )\n }\n\n const entrySourceBase = resolve(rootDir, entry.source ?? './')\n const primaryManifestPath = join(\n entrySourceBase,\n '.kode-plugin',\n 'plugin.json',\n )\n const legacyManifestPath = join(\n entrySourceBase,\n '.claude-plugin',\n 'plugin.json',\n )\n const pluginManifestPath = existsSync(primaryManifestPath)\n ? primaryManifestPath\n : legacyManifestPath\n\n if (\n existsSync(pluginManifestPath) &&\n lstatSync(pluginManifestPath).isFile()\n ) {\n const pluginRoot = scopeInstalledPluginRoot(scope, plugin, marketplace)\n if (existsSync(pluginRoot) && options?.force !== true) {\n throw new Error(`Destination already exists: ${pluginRoot}`)\n }\n ensureEmptyDir(pluginRoot)\n safeCopyDirectory(entrySourceBase, pluginRoot)\n\n installState[pluginSpec] = {\n plugin,\n marketplace,\n scope,\n kind: 'plugin-pack',\n pluginRoot,\n isEnabled: true,\n projectPath: scope === 'user' ? undefined : getCwd(),\n installedAt: new Date().toISOString(),\n skills: [],\n commands: [],\n sourceMarketplacePath: sourcePathForRecord(source),\n }\n savePluginInstallState(installState)\n\n return { pluginSpec, installedSkills: [], installedCommands: [] }\n }\n\n const skillsDestBase = scopeSkillsDir(scope)\n const commandsDestBase = join(scopeCommandsDir(scope), plugin, marketplace)\n\n ensureDir(skillsDestBase)\n ensureDir(commandsDestBase)\n\n const installedSkills: string[] = []\n const installedCommands: string[] = []\n\n const skillPaths = entry.skills ?? []\n for (const rel of skillPaths) {\n const src = safeJoinWithin(entrySourceBase, rel)\n if (!existsSync(src) || !lstatSync(src).isDirectory()) {\n throw new Error(`Skill path not found or not a directory: ${src}`)\n }\n const skillName = basename(src)\n const dest = join(skillsDestBase, skillName)\n\n if (existsSync(dest) && options?.force !== true) {\n throw new Error(`Destination already exists: ${dest}`)\n }\n ensureEmptyDir(dest)\n safeCopyDirectory(src, dest)\n installedSkills.push(skillName)\n }\n\n const commandPaths = entry.commands ?? []\n for (const rel of commandPaths) {\n const src = safeJoinWithin(entrySourceBase, rel)\n if (!existsSync(src)) {\n throw new Error(`Command path not found: ${src}`)\n }\n const stat = lstatSync(src)\n if (stat.isDirectory()) {\n const dest = join(commandsDestBase, basename(src))\n if (existsSync(dest) && options?.force !== true) {\n throw new Error(`Destination already exists: ${dest}`)\n }\n ensureEmptyDir(dest)\n safeCopyDirectory(src, dest)\n installedCommands.push(dest)\n continue\n }\n if (stat.isFile()) {\n const dest = join(commandsDestBase, basename(src))\n ensureDir(dirname(dest))\n if (existsSync(dest) && options?.force !== true) {\n throw new Error(`Destination already exists: ${dest}`)\n }\n copyFileSync(src, dest)\n installedCommands.push(dest)\n }\n }\n\n installState[pluginSpec] = {\n plugin,\n marketplace,\n scope,\n kind: 'skill-pack',\n isEnabled: true,\n projectPath: scope === 'user' ? undefined : getCwd(),\n installedAt: new Date().toISOString(),\n skills: installedSkills,\n commands: installedCommands,\n sourceMarketplacePath: sourcePathForRecord(source),\n }\n savePluginInstallState(installState)\n\n return { pluginSpec, installedSkills, installedCommands }\n}\n\nfunction sourcePathForRecord(source: MarketplaceSource): string {\n return source.source === 'file' || source.source === 'directory'\n ? source.path\n : source.source === 'github'\n ? `github:${source.repo}`\n : source.source === 'url'\n ? source.url\n : source.source === 'git'\n ? source.url\n : `npm:${source.package}`\n}\n", "import { existsSync, rmSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { getCwd } from '#core/utils/state'\n\nimport type { PluginScope } from '../types'\nimport {\n ensurePluginInstallState,\n savePluginInstallState,\n} from '../pluginState'\nimport { normalizePluginScope } from '../paths'\nimport { baseDirForInstallRecord, resolveInstalledPluginSpec } from './resolve'\n\nexport function uninstallSkillPlugin(\n pluginInput: string,\n options?: { scope?: PluginScope; project?: boolean },\n): { pluginSpec: string; removedSkills: string[]; removedCommands: string[] } {\n const requestedScope = normalizePluginScope(options)\n const state = ensurePluginInstallState()\n const pluginSpec = resolveInstalledPluginSpec(pluginInput, state)\n const record = state[pluginSpec]\n if (!record) {\n throw new Error(`Plugin '${pluginSpec}' is not installed`)\n }\n\n if (record.scope !== requestedScope) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed with scope=${record.scope}. Re-run with --scope ${record.scope}.`,\n )\n }\n if (record.scope !== 'user') {\n const projectPath = record.projectPath?.trim() || ''\n const cwd = getCwd()\n if (!projectPath || projectPath !== cwd) {\n throw new Error(\n `Plugin '${pluginSpec}' is installed for a different directory. Expected cwd=${projectPath || '(missing)'}, got cwd=${cwd}`,\n )\n }\n }\n\n if (record.kind === 'plugin-pack') {\n const baseDir = baseDirForInstallRecord(record)\n const pluginRoot =\n typeof record.pluginRoot === 'string' && record.pluginRoot.trim()\n ? record.pluginRoot\n : join(\n baseDir,\n 'plugins',\n 'installed',\n record.plugin,\n record.marketplace,\n )\n\n const removedCommands: string[] = []\n if (existsSync(pluginRoot)) {\n rmSync(pluginRoot, { recursive: true, force: true })\n removedCommands.push(pluginRoot)\n }\n\n delete state[pluginSpec]\n savePluginInstallState(state)\n\n return { pluginSpec, removedSkills: [], removedCommands }\n }\n\n const baseDir = baseDirForInstallRecord(record)\n const skillsDestBase = join(baseDir, 'skills')\n const commandsDestBase = join(\n baseDir,\n 'commands',\n record.plugin,\n record.marketplace,\n )\n const disabledSkillsBase = join(\n baseDir,\n 'skills.disabled',\n record.plugin,\n record.marketplace,\n )\n const disabledCommandsBase = join(\n baseDir,\n 'commands.disabled',\n record.plugin,\n record.marketplace,\n )\n\n const removedSkills: string[] = []\n for (const skillName of record.skills) {\n const dest = join(skillsDestBase, skillName)\n if (existsSync(dest)) rmSync(dest, { recursive: true, force: true })\n const disabledDest = join(disabledSkillsBase, skillName)\n if (existsSync(disabledDest)) {\n rmSync(disabledDest, { recursive: true, force: true })\n }\n removedSkills.push(skillName)\n }\n\n const removedCommands: string[] = []\n if (existsSync(commandsDestBase)) {\n rmSync(commandsDestBase, { recursive: true, force: true })\n removedCommands.push(commandsDestBase)\n }\n if (existsSync(disabledCommandsBase)) {\n rmSync(disabledCommandsBase, { recursive: true, force: true })\n removedCommands.push(disabledCommandsBase)\n }\n\n delete state[pluginSpec]\n savePluginInstallState(state)\n\n return { pluginSpec, removedSkills, removedCommands }\n}\n", "import { existsSync, lstatSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { getCwd } from '#core/utils/state'\n\nimport { ensurePluginInstallState } from '../pluginState'\nimport { baseDirForInstallRecord } from './resolve'\n\nexport function listEnabledInstalledPluginPackRoots(): string[] {\n const state = ensurePluginInstallState()\n const cwd = getCwd()\n const roots: string[] = []\n\n for (const spec of Object.keys(state).sort()) {\n const record = state[spec]\n if (!record || record.kind !== 'plugin-pack') continue\n if (record.isEnabled === false) continue\n\n if (record.scope !== 'user') {\n const projectPath = record.projectPath?.trim() || ''\n if (!projectPath || projectPath !== cwd) continue\n }\n\n const baseDir = baseDirForInstallRecord(record)\n const pluginRoot =\n typeof record.pluginRoot === 'string' && record.pluginRoot.trim()\n ? record.pluginRoot\n : join(\n baseDir,\n 'plugins',\n 'installed',\n record.plugin,\n record.marketplace,\n )\n\n try {\n if (!existsSync(pluginRoot) || !lstatSync(pluginRoot).isDirectory()) {\n continue\n }\n roots.push(pluginRoot)\n } catch {\n continue\n }\n }\n\n return roots\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["existsSync", "rmSync", "join", "join", "join", "existsSync", "readFileSync", "resolve", "existsSync", "dirname", "existsSync", "dirname", "resolve", "existsSync", "readFileSync", "copyFileSync", "existsSync", "writeFileSync", "dirname", "join", "resolve", "parsed", "repo", "resolve", "existsSync", "join", "copyFileSync", "dirname", "writeFileSync", "join", "existsSync", "rmSync", "join", "join", "existsSync", "renameSync", "rmSync", "dirname", "join", "join", "existsSync", "dirname", "rmSync", "renameSync", "dirname", "join", "resolve", "copyFileSync", "existsSync", "lstatSync", "resolve", "join", "existsSync", "lstatSync", "dirname", "copyFileSync", "existsSync", "rmSync", "join", "baseDir", "join", "removedCommands", "existsSync", "rmSync", "existsSync", "lstatSync", "join", "join", "existsSync", "lstatSync"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// package.json
|
|
2
|
+
var package_default = {
|
|
3
|
+
name: "@shareai-lab/kode",
|
|
4
|
+
version: "2.0.3",
|
|
5
|
+
bin: {
|
|
6
|
+
kode: "cli.js",
|
|
7
|
+
kwa: "cli.js",
|
|
8
|
+
kd: "cli.js",
|
|
9
|
+
"kode-acp": "cli-acp.js"
|
|
10
|
+
},
|
|
11
|
+
engines: {
|
|
12
|
+
node: ">=20.18.1"
|
|
13
|
+
},
|
|
14
|
+
main: "cli.js",
|
|
15
|
+
exports: {
|
|
16
|
+
".": {
|
|
17
|
+
require: "./cli.js",
|
|
18
|
+
default: "./cli.js"
|
|
19
|
+
},
|
|
20
|
+
"./protocol": {
|
|
21
|
+
import: "./dist/sdk/protocol.js",
|
|
22
|
+
require: "./dist/sdk/protocol.cjs"
|
|
23
|
+
},
|
|
24
|
+
"./client": {
|
|
25
|
+
import: "./dist/sdk/client.js",
|
|
26
|
+
require: "./dist/sdk/client.cjs"
|
|
27
|
+
},
|
|
28
|
+
"./daemon-client": {
|
|
29
|
+
import: "./dist/sdk/daemon-client.js",
|
|
30
|
+
require: "./dist/sdk/daemon-client.cjs"
|
|
31
|
+
},
|
|
32
|
+
"./core": {
|
|
33
|
+
import: "./dist/sdk/core.js",
|
|
34
|
+
require: "./dist/sdk/core.cjs"
|
|
35
|
+
},
|
|
36
|
+
"./tools": {
|
|
37
|
+
import: "./dist/sdk/tools.js",
|
|
38
|
+
require: "./dist/sdk/tools.cjs"
|
|
39
|
+
},
|
|
40
|
+
"./runtime": {
|
|
41
|
+
import: "./dist/sdk/runtime.js",
|
|
42
|
+
require: "./dist/sdk/runtime.cjs"
|
|
43
|
+
},
|
|
44
|
+
"./runtime-node": {
|
|
45
|
+
import: "./dist/sdk/runtime-node.js",
|
|
46
|
+
require: "./dist/sdk/runtime-node.cjs"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
author: "ShareAI-lab <ai-lab@foxmail.com>",
|
|
50
|
+
license: "Apache-2.0",
|
|
51
|
+
description: "AI-powered terminal assistant that understands your codebase, edits files, runs commands, and automates development workflows.",
|
|
52
|
+
homepage: "https://github.com/shareAI-lab/kode",
|
|
53
|
+
repository: {
|
|
54
|
+
type: "git",
|
|
55
|
+
url: "git+https://github.com/shareAI-lab/kode.git"
|
|
56
|
+
},
|
|
57
|
+
bugs: {
|
|
58
|
+
url: "https://github.com/shareAI-lab/kode/issues"
|
|
59
|
+
},
|
|
60
|
+
files: [
|
|
61
|
+
"cli.js",
|
|
62
|
+
"cli-acp.js",
|
|
63
|
+
"yoga.wasm",
|
|
64
|
+
"dist/**/*",
|
|
65
|
+
"scripts/binary-utils.cjs",
|
|
66
|
+
"scripts/cli-wrapper.cjs",
|
|
67
|
+
"scripts/cli-acp-wrapper.cjs",
|
|
68
|
+
"scripts/postinstall.js",
|
|
69
|
+
".npmrc"
|
|
70
|
+
],
|
|
71
|
+
scripts: {
|
|
72
|
+
dev: "pnpm --filter @kode/cli dev",
|
|
73
|
+
"dev:cli": "pnpm --filter @kode/cli dev",
|
|
74
|
+
"dev:server": "pnpm --filter @kode/server dev",
|
|
75
|
+
"dev:web": "pnpm --filter @kode/web dev",
|
|
76
|
+
"dev:bun": "bun run ./apps/cli/src/dispatch.ts --verbose",
|
|
77
|
+
"build:cli": "node scripts/build-cli.mjs",
|
|
78
|
+
"build:server": "node scripts/build-server.mjs",
|
|
79
|
+
"build:web": "node scripts/build-web.mjs",
|
|
80
|
+
build: "bun run scripts/build.mjs",
|
|
81
|
+
"build:binary": "bun run scripts/build-binary.mjs",
|
|
82
|
+
clean: "bun run scripts/clean.mjs",
|
|
83
|
+
prepublishOnly: "bun run scripts/build.mjs && bun run scripts/prepublish-check.js",
|
|
84
|
+
postinstall: "node scripts/postinstall.js || true",
|
|
85
|
+
format: 'prettier --write "apps/**/*.{ts,tsx,js,jsx,json,md,css,html}" "packages/**/*.{ts,tsx,js,jsx,json,md}" "scripts/**/*.{ts,tsx,js,jsx,mjs,cjs,json}" "docs/**/*.{md,json}"',
|
|
86
|
+
"format:check": 'prettier --check "apps/**/*.{ts,tsx,js,jsx,json,md,css,html}" "packages/**/*.{ts,tsx,js,jsx,json,md}" "scripts/**/*.{ts,tsx,js,jsx,mjs,cjs,json}" "docs/**/*.{md,json}"',
|
|
87
|
+
lint: "eslint . --ext .ts,.tsx,.js --max-warnings 0",
|
|
88
|
+
"lint:fix": "eslint . --ext .ts,.tsx,.js --fix",
|
|
89
|
+
test: "bun test",
|
|
90
|
+
typecheck: "tsc --noEmit",
|
|
91
|
+
prepare: "bun run scripts/install-hooks.mjs",
|
|
92
|
+
"publish:dev": "bun run scripts/publish-dev.js",
|
|
93
|
+
"publish:release": "bun run scripts/publish-release.js",
|
|
94
|
+
"bench:startup": "bun run scripts/bench-startup.mjs"
|
|
95
|
+
},
|
|
96
|
+
dependencies: {
|
|
97
|
+
ajv: "^8.17.1",
|
|
98
|
+
"@anthropic-ai/bedrock-sdk": "^0.12.6",
|
|
99
|
+
"@anthropic-ai/sdk": "^0.39.0",
|
|
100
|
+
"@anthropic-ai/vertex-sdk": "^0.7.0",
|
|
101
|
+
"@vscode/ripgrep": "^1.15.11",
|
|
102
|
+
"@aws-sdk/client-bedrock-runtime": "3.797.0",
|
|
103
|
+
"@commander-js/extra-typings": "^13.1.0",
|
|
104
|
+
"@inkjs/ui": "^2.0.0",
|
|
105
|
+
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
106
|
+
"@types/lodash-es": "^4.17.12",
|
|
107
|
+
"@types/react": "^19.1.8",
|
|
108
|
+
"ansi-escapes": "^7.0.0",
|
|
109
|
+
chalk: "^5.4.1",
|
|
110
|
+
"cli-highlight": "^2.1.11",
|
|
111
|
+
"cli-table3": "^0.6.5",
|
|
112
|
+
commander: "^13.1.0",
|
|
113
|
+
debug: "^4.4.1",
|
|
114
|
+
diff: "^7.0.0",
|
|
115
|
+
dotenv: "^16.6.1",
|
|
116
|
+
"env-paths": "^3.0.0",
|
|
117
|
+
figures: "^6.1.0",
|
|
118
|
+
fflate: "^0.8.2",
|
|
119
|
+
glob: "^11.0.3",
|
|
120
|
+
"gray-matter": "^4.0.3",
|
|
121
|
+
"highlight.js": "^11.11.1",
|
|
122
|
+
ignore: "^7.0.5",
|
|
123
|
+
ink: "5.2.1",
|
|
124
|
+
"ink-link": "^4.1.0",
|
|
125
|
+
"ink-select-input": "^6.2.0",
|
|
126
|
+
"ink-text-input": "^6.0.0",
|
|
127
|
+
"js-yaml": "^4.1.1",
|
|
128
|
+
"lodash-es": "^4.17.21",
|
|
129
|
+
"lru-cache": "^11.1.0",
|
|
130
|
+
marked: "^15.0.12",
|
|
131
|
+
minimatch: "^10.0.3",
|
|
132
|
+
nanoid: "^5.1.5",
|
|
133
|
+
"node-fetch": "^3.3.2",
|
|
134
|
+
"node-html-parser": "^7.0.1",
|
|
135
|
+
openai: "^4.104.0",
|
|
136
|
+
react: "18.3.1",
|
|
137
|
+
semver: "^7.7.2",
|
|
138
|
+
"shell-quote": "^1.8.3",
|
|
139
|
+
"spawn-rx": "^5.1.2",
|
|
140
|
+
"string-width": "^7.2.0",
|
|
141
|
+
"strip-ansi": "^7.1.0",
|
|
142
|
+
tsx: "^4.20.3",
|
|
143
|
+
turndown: "^7.2.0",
|
|
144
|
+
undici: "^7.11.0",
|
|
145
|
+
"wrap-ansi": "^9.0.0",
|
|
146
|
+
which: "^5.0.0",
|
|
147
|
+
ws: "^8.18.3",
|
|
148
|
+
zod: "^3.25.76",
|
|
149
|
+
"zod-to-json-schema": "^3.24.6"
|
|
150
|
+
},
|
|
151
|
+
devDependencies: {
|
|
152
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
153
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
154
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
155
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
156
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
157
|
+
"@radix-ui/react-radio-group": "^1.3.8",
|
|
158
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
159
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
160
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
161
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
162
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
163
|
+
"@codemirror/lang-css": "^6.3.1",
|
|
164
|
+
"@codemirror/lang-html": "^6.4.10",
|
|
165
|
+
"@codemirror/lang-javascript": "^6.2.4",
|
|
166
|
+
"@codemirror/lang-json": "^6.0.2",
|
|
167
|
+
"@codemirror/lang-markdown": "^6.3.4",
|
|
168
|
+
"@codemirror/lang-python": "^6.2.1",
|
|
169
|
+
"@codemirror/theme-one-dark": "^6.1.2",
|
|
170
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
171
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
172
|
+
"@types/bun": "latest",
|
|
173
|
+
"@types/jest": "^30.0.0",
|
|
174
|
+
"@types/node": "^24.1.0",
|
|
175
|
+
"@types/which": "^3.0.4",
|
|
176
|
+
"@uiw/react-codemirror": "^4.24.2",
|
|
177
|
+
"@vitejs/plugin-react": "^4.7.0",
|
|
178
|
+
"@xterm/addon-fit": "^0.10.0",
|
|
179
|
+
"@xterm/xterm": "^5.5.0",
|
|
180
|
+
autoprefixer: "^10.4.21",
|
|
181
|
+
"bun-types": "latest",
|
|
182
|
+
"class-variance-authority": "^0.7.1",
|
|
183
|
+
clsx: "^2.1.1",
|
|
184
|
+
esbuild: "^0.25.9",
|
|
185
|
+
"lucide-react": "^0.542.0",
|
|
186
|
+
"next-themes": "^0.4.6",
|
|
187
|
+
postcss: "^8.5.6",
|
|
188
|
+
prettier: "^3.6.2",
|
|
189
|
+
"react-devtools-core": "^7.0.1",
|
|
190
|
+
"react-dom": "18.3.1",
|
|
191
|
+
"react-resizable-panels": "^3.0.5",
|
|
192
|
+
"react-markdown": "^10.1.0",
|
|
193
|
+
"remark-gfm": "^4.0.1",
|
|
194
|
+
tailwindcss: "^4.1.12",
|
|
195
|
+
"tailwindcss-animate": "^1.0.7",
|
|
196
|
+
"tailwind-merge": "^3.3.1",
|
|
197
|
+
typescript: "^5.9.2",
|
|
198
|
+
vite: "^7.3.0"
|
|
199
|
+
},
|
|
200
|
+
overrides: {
|
|
201
|
+
"@aws-sdk/client-bedrock-runtime": "3.797.0",
|
|
202
|
+
"@smithy/smithy-client": "2.5.1"
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
package_default
|
|
208
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../package.json"],
|
|
4
|
+
"sourcesContent": ["{\n \"name\": \"@shareai-lab/kode\",\n \"version\": \"2.0.3\",\n \"bin\": {\n \"kode\": \"cli.js\",\n \"kwa\": \"cli.js\",\n \"kd\": \"cli.js\",\n \"kode-acp\": \"cli-acp.js\"\n },\n \"engines\": {\n \"node\": \">=20.18.1\"\n },\n \"main\": \"cli.js\",\n \"exports\": {\n \".\": {\n \"require\": \"./cli.js\",\n \"default\": \"./cli.js\"\n },\n \"./protocol\": {\n \"import\": \"./dist/sdk/protocol.js\",\n \"require\": \"./dist/sdk/protocol.cjs\"\n },\n \"./client\": {\n \"import\": \"./dist/sdk/client.js\",\n \"require\": \"./dist/sdk/client.cjs\"\n },\n \"./daemon-client\": {\n \"import\": \"./dist/sdk/daemon-client.js\",\n \"require\": \"./dist/sdk/daemon-client.cjs\"\n },\n \"./core\": {\n \"import\": \"./dist/sdk/core.js\",\n \"require\": \"./dist/sdk/core.cjs\"\n },\n \"./tools\": {\n \"import\": \"./dist/sdk/tools.js\",\n \"require\": \"./dist/sdk/tools.cjs\"\n },\n \"./runtime\": {\n \"import\": \"./dist/sdk/runtime.js\",\n \"require\": \"./dist/sdk/runtime.cjs\"\n },\n \"./runtime-node\": {\n \"import\": \"./dist/sdk/runtime-node.js\",\n \"require\": \"./dist/sdk/runtime-node.cjs\"\n }\n },\n \"author\": \"ShareAI-lab <ai-lab@foxmail.com>\",\n \"license\": \"Apache-2.0\",\n \"description\": \"AI-powered terminal assistant that understands your codebase, edits files, runs commands, and automates development workflows.\",\n \"homepage\": \"https://github.com/shareAI-lab/kode\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/shareAI-lab/kode.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/shareAI-lab/kode/issues\"\n },\n \"files\": [\n \"cli.js\",\n \"cli-acp.js\",\n \"yoga.wasm\",\n \"dist/**/*\",\n \"scripts/binary-utils.cjs\",\n \"scripts/cli-wrapper.cjs\",\n \"scripts/cli-acp-wrapper.cjs\",\n \"scripts/postinstall.js\",\n \".npmrc\"\n ],\n \"scripts\": {\n \"dev\": \"pnpm --filter @kode/cli dev\",\n \"dev:cli\": \"pnpm --filter @kode/cli dev\",\n \"dev:server\": \"pnpm --filter @kode/server dev\",\n \"dev:web\": \"pnpm --filter @kode/web dev\",\n \"dev:bun\": \"bun run ./apps/cli/src/dispatch.ts --verbose\",\n \"build:cli\": \"node scripts/build-cli.mjs\",\n \"build:server\": \"node scripts/build-server.mjs\",\n \"build:web\": \"node scripts/build-web.mjs\",\n \"build\": \"bun run scripts/build.mjs\",\n \"build:binary\": \"bun run scripts/build-binary.mjs\",\n \"clean\": \"bun run scripts/clean.mjs\",\n \"prepublishOnly\": \"bun run scripts/build.mjs && bun run scripts/prepublish-check.js\",\n \"postinstall\": \"node scripts/postinstall.js || true\",\n \"format\": \"prettier --write \\\"apps/**/*.{ts,tsx,js,jsx,json,md,css,html}\\\" \\\"packages/**/*.{ts,tsx,js,jsx,json,md}\\\" \\\"scripts/**/*.{ts,tsx,js,jsx,mjs,cjs,json}\\\" \\\"docs/**/*.{md,json}\\\"\",\n \"format:check\": \"prettier --check \\\"apps/**/*.{ts,tsx,js,jsx,json,md,css,html}\\\" \\\"packages/**/*.{ts,tsx,js,jsx,json,md}\\\" \\\"scripts/**/*.{ts,tsx,js,jsx,mjs,cjs,json}\\\" \\\"docs/**/*.{md,json}\\\"\",\n \"lint\": \"eslint . --ext .ts,.tsx,.js --max-warnings 0\",\n \"lint:fix\": \"eslint . --ext .ts,.tsx,.js --fix\",\n \"test\": \"bun test\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"bun run scripts/install-hooks.mjs\",\n \"publish:dev\": \"bun run scripts/publish-dev.js\",\n \"publish:release\": \"bun run scripts/publish-release.js\",\n \"bench:startup\": \"bun run scripts/bench-startup.mjs\"\n },\n \"dependencies\": {\n \"ajv\": \"^8.17.1\",\n \"@anthropic-ai/bedrock-sdk\": \"^0.12.6\",\n \"@anthropic-ai/sdk\": \"^0.39.0\",\n \"@anthropic-ai/vertex-sdk\": \"^0.7.0\",\n \"@vscode/ripgrep\": \"^1.15.11\",\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@modelcontextprotocol/sdk\": \"^1.15.1\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/react\": \"^19.1.8\",\n \"ansi-escapes\": \"^7.0.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-highlight\": \"^2.1.11\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"debug\": \"^4.4.1\",\n \"diff\": \"^7.0.0\",\n \"dotenv\": \"^16.6.1\",\n \"env-paths\": \"^3.0.0\",\n \"figures\": \"^6.1.0\",\n \"fflate\": \"^0.8.2\",\n \"glob\": \"^11.0.3\",\n \"gray-matter\": \"^4.0.3\",\n \"highlight.js\": \"^11.11.1\",\n \"ignore\": \"^7.0.5\",\n \"ink\": \"5.2.1\",\n \"ink-link\": \"^4.1.0\",\n \"ink-select-input\": \"^6.2.0\",\n \"ink-text-input\": \"^6.0.0\",\n \"js-yaml\": \"^4.1.1\",\n \"lodash-es\": \"^4.17.21\",\n \"lru-cache\": \"^11.1.0\",\n \"marked\": \"^15.0.12\",\n \"minimatch\": \"^10.0.3\",\n \"nanoid\": \"^5.1.5\",\n \"node-fetch\": \"^3.3.2\",\n \"node-html-parser\": \"^7.0.1\",\n \"openai\": \"^4.104.0\",\n \"react\": \"18.3.1\",\n \"semver\": \"^7.7.2\",\n \"shell-quote\": \"^1.8.3\",\n \"spawn-rx\": \"^5.1.2\",\n \"string-width\": \"^7.2.0\",\n \"strip-ansi\": \"^7.1.0\",\n \"tsx\": \"^4.20.3\",\n \"turndown\": \"^7.2.0\",\n \"undici\": \"^7.11.0\",\n \"wrap-ansi\": \"^9.0.0\",\n \"which\": \"^5.0.0\",\n \"ws\": \"^8.18.3\",\n \"zod\": \"^3.25.76\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@radix-ui/react-accordion\": \"^1.2.12\",\n \"@radix-ui/react-checkbox\": \"^1.3.3\",\n \"@radix-ui/react-collapsible\": \"^1.1.12\",\n \"@radix-ui/react-dialog\": \"^1.1.15\",\n \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n \"@radix-ui/react-radio-group\": \"^1.3.8\",\n \"@radix-ui/react-scroll-area\": \"^1.2.10\",\n \"@radix-ui/react-separator\": \"^1.1.8\",\n \"@radix-ui/react-slot\": \"^1.2.4\",\n \"@radix-ui/react-tabs\": \"^1.1.13\",\n \"@radix-ui/react-tooltip\": \"^1.2.8\",\n \"@codemirror/lang-css\": \"^6.3.1\",\n \"@codemirror/lang-html\": \"^6.4.10\",\n \"@codemirror/lang-javascript\": \"^6.2.4\",\n \"@codemirror/lang-json\": \"^6.0.2\",\n \"@codemirror/lang-markdown\": \"^6.3.4\",\n \"@codemirror/lang-python\": \"^6.2.1\",\n \"@codemirror/theme-one-dark\": \"^6.1.2\",\n \"@tailwindcss/postcss\": \"^4.1.18\",\n \"@tailwindcss/typography\": \"^0.5.19\",\n \"@types/bun\": \"latest\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^24.1.0\",\n \"@types/which\": \"^3.0.4\",\n \"@uiw/react-codemirror\": \"^4.24.2\",\n \"@vitejs/plugin-react\": \"^4.7.0\",\n \"@xterm/addon-fit\": \"^0.10.0\",\n \"@xterm/xterm\": \"^5.5.0\",\n \"autoprefixer\": \"^10.4.21\",\n \"bun-types\": \"latest\",\n \"class-variance-authority\": \"^0.7.1\",\n \"clsx\": \"^2.1.1\",\n \"esbuild\": \"^0.25.9\",\n \"lucide-react\": \"^0.542.0\",\n \"next-themes\": \"^0.4.6\",\n \"postcss\": \"^8.5.6\",\n \"prettier\": \"^3.6.2\",\n \"react-devtools-core\": \"^7.0.1\",\n \"react-dom\": \"18.3.1\",\n \"react-resizable-panels\": \"^3.0.5\",\n \"react-markdown\": \"^10.1.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"tailwindcss\": \"^4.1.12\",\n \"tailwindcss-animate\": \"^1.0.7\",\n \"tailwind-merge\": \"^3.3.1\",\n \"typescript\": \"^5.9.2\",\n \"vite\": \"^7.3.0\"\n },\n \"overrides\": {\n \"@aws-sdk/client-bedrock-runtime\": \"3.797.0\",\n \"@smithy/smithy-client\": \"2.5.1\"\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// packages/core/src/utils/format.tsx
|
|
2
|
+
function wrapText(text, width) {
|
|
3
|
+
const lines = [];
|
|
4
|
+
let currentLine = "";
|
|
5
|
+
for (const char of text) {
|
|
6
|
+
if ([...currentLine].length < width) {
|
|
7
|
+
currentLine += char;
|
|
8
|
+
} else {
|
|
9
|
+
lines.push(currentLine);
|
|
10
|
+
currentLine = char;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
if (currentLine) lines.push(currentLine);
|
|
14
|
+
return lines;
|
|
15
|
+
}
|
|
16
|
+
function formatDuration(ms) {
|
|
17
|
+
if (ms < 6e4) {
|
|
18
|
+
return `${(ms / 1e3).toFixed(1)}s`;
|
|
19
|
+
}
|
|
20
|
+
const hours = Math.floor(ms / 36e5);
|
|
21
|
+
const minutes = Math.floor(ms % 36e5 / 6e4);
|
|
22
|
+
const seconds = (ms % 6e4 / 1e3).toFixed(1);
|
|
23
|
+
if (hours > 0) {
|
|
24
|
+
return `${hours}h ${minutes}m ${seconds}s`;
|
|
25
|
+
}
|
|
26
|
+
if (minutes > 0) {
|
|
27
|
+
return `${minutes}m ${seconds}s`;
|
|
28
|
+
}
|
|
29
|
+
return `${seconds}s`;
|
|
30
|
+
}
|
|
31
|
+
function formatNumber(number) {
|
|
32
|
+
return new Intl.NumberFormat("en", {
|
|
33
|
+
notation: "compact",
|
|
34
|
+
maximumFractionDigits: 1
|
|
35
|
+
}).format(number).toLowerCase();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
wrapText,
|
|
40
|
+
formatDuration,
|
|
41
|
+
formatNumber
|
|
42
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/core/src/utils/format.tsx"],
|
|
4
|
+
"sourcesContent": ["export function wrapText(text: string, width: number): string[] {\n const lines: string[] = []\n let currentLine = ''\n\n for (const char of text) {\n // Important: we need the spread to properly count multi-plane UTF-8 characters (eg. \uD805\uDE96)\n if ([...currentLine].length < width) {\n currentLine += char\n } else {\n lines.push(currentLine)\n currentLine = char\n }\n }\n\n if (currentLine) lines.push(currentLine)\n return lines\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 60000) {\n return `${(ms / 1000).toFixed(1)}s`\n }\n\n const hours = Math.floor(ms / 3600000)\n const minutes = Math.floor((ms % 3600000) / 60000)\n const seconds = ((ms % 60000) / 1000).toFixed(1)\n\n if (hours > 0) {\n return `${hours}h ${minutes}m ${seconds}s`\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds}s`\n }\n return `${seconds}s`\n}\n\nexport function formatNumber(number: number): string {\n return new Intl.NumberFormat('en', {\n notation: 'compact',\n maximumFractionDigits: 1,\n })\n .format(number) // eg. \"1321\" => \"1.3K\"\n .toLowerCase() // eg. \"1.3K\" => \"1.3k\"\n}\n"],
|
|
5
|
+
"mappings": ";AAAO,SAAS,SAAS,MAAc,OAAyB;AAC9D,QAAM,QAAkB,CAAC;AACzB,MAAI,cAAc;AAElB,aAAW,QAAQ,MAAM;AAEvB,QAAI,CAAC,GAAG,WAAW,EAAE,SAAS,OAAO;AACnC,qBAAe;AAAA,IACjB,OAAO;AACL,YAAM,KAAK,WAAW;AACtB,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,YAAa,OAAM,KAAK,WAAW;AACvC,SAAO;AACT;AAEO,SAAS,eAAe,IAAoB;AACjD,MAAI,KAAK,KAAO;AACd,WAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAAA,EAClC;AAEA,QAAM,QAAQ,KAAK,MAAM,KAAK,IAAO;AACrC,QAAM,UAAU,KAAK,MAAO,KAAK,OAAW,GAAK;AACjD,QAAM,WAAY,KAAK,MAAS,KAAM,QAAQ,CAAC;AAE/C,MAAI,QAAQ,GAAG;AACb,WAAO,GAAG,KAAK,KAAK,OAAO,KAAK,OAAO;AAAA,EACzC;AACA,MAAI,UAAU,GAAG;AACf,WAAO,GAAG,OAAO,KAAK,OAAO;AAAA,EAC/B;AACA,SAAO,GAAG,OAAO;AACnB;AAEO,SAAS,aAAa,QAAwB;AACnD,SAAO,IAAI,KAAK,aAAa,MAAM;AAAA,IACjC,UAAU;AAAA,IACV,uBAAuB;AAAA,EACzB,CAAC,EACE,OAAO,MAAM,EACb,YAAY;AACjB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
getSessionProjectDir,
|
|
5
3
|
getSessionProjectsDir
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import {
|
|
8
|
-
isUuid
|
|
9
|
-
} from "./chunk-KAA5BGMQ.js";
|
|
4
|
+
} from "./chunk-UVDJL6ZZ.js";
|
|
10
5
|
|
|
11
|
-
// src/utils/
|
|
12
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "fs";
|
|
13
|
-
import { basename, join } from "path";
|
|
6
|
+
// packages/protocol/src/utils/kodeAgentSessionResume.ts
|
|
7
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
8
|
+
import { basename, join } from "node:path";
|
|
14
9
|
function safeParseJson(line) {
|
|
15
10
|
try {
|
|
16
11
|
return JSON.parse(line);
|
|
@@ -18,12 +13,20 @@ function safeParseJson(line) {
|
|
|
18
13
|
return null;
|
|
19
14
|
}
|
|
20
15
|
}
|
|
16
|
+
function isRecord(value) {
|
|
17
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
18
|
+
}
|
|
21
19
|
function safeParseDate(value) {
|
|
22
20
|
if (typeof value !== "string") return null;
|
|
23
21
|
const d = new Date(value);
|
|
24
22
|
if (Number.isNaN(d.getTime())) return null;
|
|
25
23
|
return d;
|
|
26
24
|
}
|
|
25
|
+
function isUuid(value) {
|
|
26
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(
|
|
27
|
+
value
|
|
28
|
+
);
|
|
29
|
+
}
|
|
27
30
|
function readSessionListItemBestEffort(args) {
|
|
28
31
|
const { filePath, sessionId } = args;
|
|
29
32
|
let slug = null;
|
|
@@ -58,8 +61,8 @@ function readSessionListItemBestEffort(args) {
|
|
|
58
61
|
const line = rawLine.trim();
|
|
59
62
|
if (!line) continue;
|
|
60
63
|
const parsed = safeParseJson(line);
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
const entry = isRecord(parsed) ? parsed : null;
|
|
65
|
+
if (!entry) continue;
|
|
63
66
|
if (!slug && typeof entry.slug === "string" && entry.slug.trim()) {
|
|
64
67
|
slug = entry.slug.trim();
|
|
65
68
|
}
|
|
@@ -70,13 +73,14 @@ function readSessionListItemBestEffort(args) {
|
|
|
70
73
|
const ts = safeParseDate(entry.timestamp);
|
|
71
74
|
if (ts) createdAt = ts;
|
|
72
75
|
}
|
|
73
|
-
|
|
74
|
-
if (
|
|
76
|
+
const type = typeof entry.type === "string" ? entry.type : "";
|
|
77
|
+
if (!type) continue;
|
|
78
|
+
if (type === "assistant") {
|
|
75
79
|
if (typeof entry.uuid === "string" && entry.uuid)
|
|
76
80
|
lastAssistantUuid = entry.uuid;
|
|
77
81
|
continue;
|
|
78
82
|
}
|
|
79
|
-
if (
|
|
83
|
+
if (type === "summary") {
|
|
80
84
|
const leafUuid = typeof entry.leafUuid === "string" ? entry.leafUuid : "";
|
|
81
85
|
const summary2 = typeof entry.summary === "string" ? entry.summary : "";
|
|
82
86
|
if (leafUuid && summary2) {
|
|
@@ -85,13 +89,13 @@ function readSessionListItemBestEffort(args) {
|
|
|
85
89
|
}
|
|
86
90
|
continue;
|
|
87
91
|
}
|
|
88
|
-
if (
|
|
92
|
+
if (type === "custom-title") {
|
|
89
93
|
const id = typeof entry.sessionId === "string" ? entry.sessionId : "";
|
|
90
94
|
const title = typeof entry.customTitle === "string" ? entry.customTitle : "";
|
|
91
95
|
if (id === sessionId && title) customTitle = title;
|
|
92
96
|
continue;
|
|
93
97
|
}
|
|
94
|
-
if (
|
|
98
|
+
if (type === "tag") {
|
|
95
99
|
const id = typeof entry.sessionId === "string" ? entry.sessionId : "";
|
|
96
100
|
const t = typeof entry.tag === "string" ? entry.tag : "";
|
|
97
101
|
if (id === sessionId && t) tag = t;
|
|
@@ -151,8 +155,9 @@ function readSessionCwdBestEffort(filePath) {
|
|
|
151
155
|
const line = rawLine.trim();
|
|
152
156
|
if (!line) continue;
|
|
153
157
|
const parsed = safeParseJson(line);
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
const record = isRecord(parsed) ? parsed : null;
|
|
159
|
+
if (!record) continue;
|
|
160
|
+
const cwd = record.cwd;
|
|
156
161
|
if (typeof cwd === "string" && cwd.trim()) return cwd.trim();
|
|
157
162
|
}
|
|
158
163
|
} catch {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/protocol/src/utils/kodeAgentSessionResume.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'\nimport { basename, join } from 'node:path'\n\nimport {\n getSessionProjectDir,\n getSessionProjectsDir,\n} from './kodeAgentSessionLog'\n\nexport type KodeAgentSessionListItem = {\n sessionId: string\n slug: string | null\n customTitle: string | null\n tag: string | null\n summary: string | null\n cwd: string | null\n createdAt: Date | null\n modifiedAt: Date | null\n}\n\nexport type ResumeResolveResult =\n | { kind: 'ok'; sessionId: string }\n | { kind: 'ambiguous'; identifier: string; matchingSessionIds: string[] }\n | { kind: 'different_directory'; sessionId: string; otherCwd: string | null }\n | { kind: 'not_found'; identifier: string }\n\nfunction safeParseJson(line: string): unknown | null {\n try {\n return JSON.parse(line)\n } catch {\n return null\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction safeParseDate(value: unknown): Date | null {\n if (typeof value !== 'string') return null\n const d = new Date(value)\n if (Number.isNaN(d.getTime())) return null\n return d\n}\n\nfunction isUuid(value: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(\n value,\n )\n}\n\nfunction readSessionListItemBestEffort(args: {\n filePath: string\n sessionId: string\n}): Omit<KodeAgentSessionListItem, 'sessionId'> {\n const { filePath, sessionId } = args\n\n let slug: string | null = null\n let cwd: string | null = null\n let createdAt: Date | null = null\n let modifiedAt: Date | null = null\n let customTitle: string | null = null\n let tag: string | null = null\n let lastAssistantUuid: string | null = null\n const summariesByLeaf = new Map<string, string>()\n let lastSummary: string | null = null\n\n try {\n modifiedAt = new Date(statSync(filePath).mtimeMs)\n } catch {\n modifiedAt = null\n }\n\n let content: string\n try {\n content = readFileSync(filePath, 'utf8')\n } catch {\n return {\n slug,\n customTitle,\n tag,\n summary: null,\n cwd,\n createdAt,\n modifiedAt,\n }\n }\n\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim()\n if (!line) continue\n const parsed = safeParseJson(line)\n const entry = isRecord(parsed) ? parsed : null\n if (!entry) continue\n\n if (!slug && typeof entry.slug === 'string' && entry.slug.trim()) {\n slug = entry.slug.trim()\n }\n if (!cwd && typeof entry.cwd === 'string' && entry.cwd.trim()) {\n cwd = entry.cwd.trim()\n }\n if (!createdAt) {\n const ts = safeParseDate(entry.timestamp)\n if (ts) createdAt = ts\n }\n\n const type = typeof entry.type === 'string' ? entry.type : ''\n if (!type) continue\n\n if (type === 'assistant') {\n if (typeof entry.uuid === 'string' && entry.uuid)\n lastAssistantUuid = entry.uuid\n continue\n }\n\n if (type === 'summary') {\n const leafUuid = typeof entry.leafUuid === 'string' ? entry.leafUuid : ''\n const summary = typeof entry.summary === 'string' ? entry.summary : ''\n if (leafUuid && summary) {\n summariesByLeaf.set(leafUuid, summary)\n lastSummary = summary\n }\n continue\n }\n\n if (type === 'custom-title') {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const title =\n typeof entry.customTitle === 'string' ? entry.customTitle : ''\n if (id === sessionId && title) customTitle = title\n continue\n }\n\n if (type === 'tag') {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const t = typeof entry.tag === 'string' ? entry.tag : ''\n if (id === sessionId && t) tag = t\n continue\n }\n }\n\n const summary =\n (lastAssistantUuid\n ? (summariesByLeaf.get(lastAssistantUuid) ?? null)\n : null) ??\n lastSummary ??\n null\n\n return {\n slug,\n customTitle,\n tag,\n summary,\n cwd,\n createdAt,\n modifiedAt,\n }\n}\n\nexport function listKodeAgentSessions(args: {\n cwd: string\n}): KodeAgentSessionListItem[] {\n const { cwd } = args\n const projectDir = getSessionProjectDir(cwd)\n if (!existsSync(projectDir)) return []\n\n const candidates = readdirSync(projectDir)\n .filter(name => name.endsWith('.jsonl'))\n .filter(name => !name.startsWith('agent-'))\n .map(name => ({\n sessionId: basename(name, '.jsonl'),\n filePath: join(projectDir, name),\n }))\n .filter(c => isUuid(c.sessionId))\n\n const items = candidates.map(({ sessionId, filePath }) => ({\n sessionId,\n ...readSessionListItemBestEffort({ filePath, sessionId }),\n }))\n\n items.sort((a, b) => {\n const am = a.modifiedAt?.getTime() ?? 0\n const bm = b.modifiedAt?.getTime() ?? 0\n return bm - am\n })\n\n return items\n}\n\nfunction findSessionFileAcrossProjects(args: {\n sessionId: string\n}): { filePath: string } | null {\n const { sessionId } = args\n const projectsDir = getSessionProjectsDir()\n if (!existsSync(projectsDir)) return null\n\n let projectNames: string[]\n try {\n projectNames = readdirSync(projectsDir)\n } catch {\n return null\n }\n\n for (const projectName of projectNames) {\n const candidate = join(projectsDir, projectName, `${sessionId}.jsonl`)\n if (existsSync(candidate)) return { filePath: candidate }\n }\n\n return null\n}\n\nfunction readSessionCwdBestEffort(filePath: string): string | null {\n try {\n const content = readFileSync(filePath, 'utf8')\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim()\n if (!line) continue\n const parsed = safeParseJson(line)\n const record = isRecord(parsed) ? parsed : null\n if (!record) continue\n const cwd = record.cwd\n if (typeof cwd === 'string' && cwd.trim()) return cwd.trim()\n }\n } catch {\n // ignore\n }\n return null\n}\n\nfunction sessionExistsInProject(cwd: string, sessionId: string): boolean {\n try {\n return existsSync(join(getSessionProjectDir(cwd), `${sessionId}.jsonl`))\n } catch {\n return false\n }\n}\n\nexport function resolveResumeSessionIdentifier(args: {\n cwd: string\n identifier: string\n}): ResumeResolveResult {\n const { cwd, identifier } = args\n const id = identifier.trim()\n if (!id) return { kind: 'not_found', identifier }\n\n if (isUuid(id)) {\n if (sessionExistsInProject(cwd, id)) return { kind: 'ok', sessionId: id }\n\n const elsewhere = findSessionFileAcrossProjects({ sessionId: id })\n if (elsewhere) {\n return {\n kind: 'different_directory',\n sessionId: id,\n otherCwd: readSessionCwdBestEffort(elsewhere.filePath),\n }\n }\n\n return { kind: 'not_found', identifier: id }\n }\n\n const sessions = listKodeAgentSessions({ cwd })\n const matches = sessions\n .filter(s => s.slug === id || s.customTitle === id)\n .map(s => s.sessionId)\n\n if (matches.length === 1) return { kind: 'ok', sessionId: matches[0]! }\n if (matches.length > 1)\n return { kind: 'ambiguous', identifier: id, matchingSessionIds: matches }\n return { kind: 'not_found', identifier: id }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["summary"]
|
|
7
|
+
}
|