@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": ["../../packages/core/src/engine/systemPrompt.ts", "../../packages/core/src/engine/turn.ts"],
|
|
4
|
+
"sourcesContent": ["import { getSystemPrompt } from '#core/constants/prompts'\n\nexport async function buildSystemPromptForSession(args: {\n disableSlashCommands?: boolean\n systemPromptOverride?: string\n appendSystemPrompt?: string\n jsonSchema?: Record<string, unknown> | null\n outputStyleActive?: boolean\n keepCodingInstructions?: boolean\n}): Promise<string[]> {\n const baseSystemPrompt =\n typeof args.systemPromptOverride === 'string' &&\n args.systemPromptOverride.trim()\n ? [args.systemPromptOverride]\n : await getSystemPrompt({\n disableSlashCommands: args.disableSlashCommands === true,\n outputStyleActive: args.outputStyleActive,\n keepCodingInstructions: args.keepCodingInstructions,\n })\n\n const systemPrompt =\n typeof args.appendSystemPrompt === 'string' &&\n args.appendSystemPrompt.trim()\n ? [...baseSystemPrompt, args.appendSystemPrompt]\n : baseSystemPrompt\n\n if (args.jsonSchema) {\n systemPrompt.push(\n [\n 'You MUST respond with ONLY valid JSON.',\n 'The JSON MUST validate against the following JSON Schema.',\n 'Do not wrap the JSON in markdown code fences and do not add extra commentary.',\n '',\n `<json_schema>${JSON.stringify(args.jsonSchema)}</json_schema>`,\n ].join('\\n'),\n )\n }\n\n return systemPrompt\n}\n", "import type { AgentEvent } from '#protocol/agentEvent'\nimport type {\n AssistantMessage,\n BinaryFeedbackResult,\n Message,\n} from '#core/query'\nimport type { CanUseToolFn } from '#core/permissions/canUseTool'\n\nimport { getContext } from '#core/context'\nimport { query } from './orchestrator'\n\nimport { messagesToAgentEvents } from '../query/agentEvents'\nimport { buildSystemPromptForSession } from './systemPrompt'\n\nexport type QueryToolUseContext = Parameters<typeof query>[4]\n\nexport async function getSessionContext(): Promise<{ [k: string]: string }> {\n return getContext()\n}\n\nexport async function* runTurn(args: {\n messages: Message[]\n canUseTool: CanUseToolFn\n toolUseContext: QueryToolUseContext\n\n disableSlashCommands?: boolean\n systemPromptOverride?: string\n appendSystemPrompt?: string\n jsonSchema?: Record<string, unknown> | null\n\n systemPrompt?: string[]\n context?: { [k: string]: string }\n\n getBinaryFeedbackResponse?: (\n m1: AssistantMessage,\n m2: AssistantMessage,\n ) => Promise<BinaryFeedbackResult>\n}): AsyncGenerator<Message, void> {\n const [systemPrompt, context] = await Promise.all([\n args.systemPrompt ??\n buildSystemPromptForSession({\n disableSlashCommands: args.disableSlashCommands,\n systemPromptOverride: args.systemPromptOverride,\n appendSystemPrompt: args.appendSystemPrompt,\n jsonSchema: args.jsonSchema,\n }),\n args.context ?? getContext(),\n ])\n\n yield* query(\n args.messages,\n systemPrompt,\n context,\n args.canUseTool,\n args.toolUseContext,\n args.getBinaryFeedbackResponse,\n )\n}\n\nexport async function* runTurnEvents(\n args: {\n sessionId: string\n } & Parameters<typeof runTurn>[0],\n): AsyncGenerator<AgentEvent, void> {\n yield* messagesToAgentEvents({\n source: runTurn(args),\n sessionId: args.sessionId,\n })\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAEA,eAAsB,4BAA4B,MAO5B;AACpB,QAAM,mBACJ,OAAO,KAAK,yBAAyB,YACrC,KAAK,qBAAqB,KAAK,IAC3B,CAAC,KAAK,oBAAoB,IAC1B,MAAM,gBAAgB;AAAA,IACpB,sBAAsB,KAAK,yBAAyB;AAAA,IACpD,mBAAmB,KAAK;AAAA,IACxB,wBAAwB,KAAK;AAAA,EAC/B,CAAC;AAEP,QAAM,eACJ,OAAO,KAAK,uBAAuB,YACnC,KAAK,mBAAmB,KAAK,IACzB,CAAC,GAAG,kBAAkB,KAAK,kBAAkB,IAC7C;AAEN,MAAI,KAAK,YAAY;AACnB,iBAAa;AAAA,MACX;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,KAAK,UAAU,KAAK,UAAU,CAAC;AAAA,MACjD,EAAE,KAAK,IAAI;AAAA,IACb;AAAA,EACF;AAEA,SAAO;AACT;;;ACvBA,eAAsB,oBAAsD;AAC1E,SAAO,WAAW;AACpB;AAEA,gBAAuB,QAAQ,MAiBG;AAChC,QAAM,CAAC,cAAc,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IAChD,KAAK,gBACH,4BAA4B;AAAA,MAC1B,sBAAsB,KAAK;AAAA,MAC3B,sBAAsB,KAAK;AAAA,MAC3B,oBAAoB,KAAK;AAAA,MACzB,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,IACH,KAAK,WAAW,WAAW;AAAA,EAC7B,CAAC;AAED,SAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAEA,gBAAuB,cACrB,MAGkC;AAClC,SAAO,sBAAsB;AAAA,IAC3B,QAAQ,QAAQ,IAAI;AAAA,IACpB,WAAW,KAAK;AAAA,EAClB,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
MarketplaceManifestSchema
|
|
5
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DQ4JHXMT.js";
|
|
6
4
|
import {
|
|
7
5
|
parseFrontmatter
|
|
8
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RPJXO7GG.js";
|
|
9
7
|
import {
|
|
10
8
|
getCwd
|
|
11
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BBJFHTBC.js";
|
|
12
10
|
|
|
13
|
-
// src/services/
|
|
14
|
-
import { existsSync, lstatSync, readFileSync } from "node:fs";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
name: z.string().min(1),
|
|
20
|
-
version: z.string().optional(),
|
|
21
|
-
description: z.string().optional(),
|
|
22
|
-
author: z.unknown().optional(),
|
|
23
|
-
homepage: z.string().optional(),
|
|
24
|
-
repository: z.unknown().optional(),
|
|
25
|
-
license: z.string().optional(),
|
|
26
|
-
keywords: z.array(z.string()).optional(),
|
|
27
|
-
commands: z.union([z.string(), z.array(z.string())]).optional(),
|
|
28
|
-
agents: z.union([z.string(), z.array(z.string())]).optional(),
|
|
29
|
-
skills: z.union([z.string(), z.array(z.string())]).optional(),
|
|
30
|
-
hooks: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
|
|
31
|
-
mcpServers: z.union([z.string(), z.record(z.string(), z.unknown())]).optional()
|
|
32
|
-
}).passthrough();
|
|
11
|
+
// apps/cli/src/services/pluginValidation/validate.ts
|
|
12
|
+
import { existsSync as existsSync4, lstatSync as lstatSync4, readFileSync as readFileSync4 } from "node:fs";
|
|
13
|
+
import { join as join3 } from "node:path";
|
|
14
|
+
|
|
15
|
+
// apps/cli/src/services/pluginValidation/utils.ts
|
|
16
|
+
import { resolve, sep } from "node:path";
|
|
33
17
|
function resolveFromAgentCwd(input) {
|
|
34
18
|
const trimmed = input.trim();
|
|
35
19
|
if (!trimmed) return trimmed;
|
|
@@ -54,9 +38,24 @@ function safeResolveWithin(baseDir, rel) {
|
|
|
54
38
|
if (!abs.startsWith(base + sep) && abs !== base) return null;
|
|
55
39
|
return abs;
|
|
56
40
|
}
|
|
41
|
+
|
|
42
|
+
// apps/cli/src/services/pluginValidation/marketplace.ts
|
|
43
|
+
import { existsSync as existsSync2, lstatSync as lstatSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
44
|
+
import { dirname } from "node:path";
|
|
45
|
+
|
|
46
|
+
// apps/cli/src/services/pluginValidation/skills.ts
|
|
47
|
+
import { existsSync, lstatSync, readFileSync } from "node:fs";
|
|
48
|
+
import { join, sep as sep2 } from "node:path";
|
|
49
|
+
function getStringField(obj, key) {
|
|
50
|
+
if (!obj || typeof obj !== "object") return "";
|
|
51
|
+
const record = obj;
|
|
52
|
+
const value = record[key];
|
|
53
|
+
if (typeof value !== "string") return "";
|
|
54
|
+
return value.trim();
|
|
55
|
+
}
|
|
57
56
|
function validateSkillDir(skillDir) {
|
|
58
57
|
const issues = [];
|
|
59
|
-
const name = skillDir.split(
|
|
58
|
+
const name = skillDir.split(sep2).pop() || "";
|
|
60
59
|
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) || name.length > 64) {
|
|
61
60
|
issues.push({
|
|
62
61
|
path: `skills/${name}`,
|
|
@@ -64,6 +63,13 @@ function validateSkillDir(skillDir) {
|
|
|
64
63
|
});
|
|
65
64
|
return issues;
|
|
66
65
|
}
|
|
66
|
+
if (!existsSync(skillDir) || !lstatSync(skillDir).isDirectory()) {
|
|
67
|
+
issues.push({
|
|
68
|
+
path: `skills/${name}`,
|
|
69
|
+
message: "Skill directory not found"
|
|
70
|
+
});
|
|
71
|
+
return issues;
|
|
72
|
+
}
|
|
67
73
|
const skillFileCandidates = [
|
|
68
74
|
join(skillDir, "SKILL.md"),
|
|
69
75
|
join(skillDir, "skill.md")
|
|
@@ -79,7 +85,7 @@ function validateSkillDir(skillDir) {
|
|
|
79
85
|
try {
|
|
80
86
|
const raw = readFileSync(skillFile, "utf8");
|
|
81
87
|
const { frontmatter } = parseFrontmatter(raw);
|
|
82
|
-
const declared =
|
|
88
|
+
const declared = getStringField(frontmatter, "name");
|
|
83
89
|
if (!declared) {
|
|
84
90
|
issues.push({
|
|
85
91
|
path: `${name}/SKILL.md`,
|
|
@@ -91,7 +97,7 @@ function validateSkillDir(skillDir) {
|
|
|
91
97
|
message: `Frontmatter name must match directory name (dir=${name}, name=${declared})`
|
|
92
98
|
});
|
|
93
99
|
}
|
|
94
|
-
const description =
|
|
100
|
+
const description = getStringField(frontmatter, "description");
|
|
95
101
|
if (!description) {
|
|
96
102
|
issues.push({
|
|
97
103
|
path: `${name}/SKILL.md`,
|
|
@@ -111,12 +117,22 @@ function validateSkillDir(skillDir) {
|
|
|
111
117
|
}
|
|
112
118
|
return issues;
|
|
113
119
|
}
|
|
120
|
+
|
|
121
|
+
// apps/cli/src/services/pluginValidation/marketplace.ts
|
|
122
|
+
function metadataDescriptionFrom(manifest) {
|
|
123
|
+
const metadata = manifest.metadata;
|
|
124
|
+
if (!metadata || typeof metadata !== "object") return "";
|
|
125
|
+
const record = metadata;
|
|
126
|
+
const value = record.description;
|
|
127
|
+
if (typeof value !== "string") return "";
|
|
128
|
+
return value.trim();
|
|
129
|
+
}
|
|
114
130
|
function validateMarketplaceJson(filePath) {
|
|
115
131
|
const errors = [];
|
|
116
132
|
const warnings = [];
|
|
117
133
|
let raw;
|
|
118
134
|
try {
|
|
119
|
-
raw =
|
|
135
|
+
raw = readFileSync2(filePath, "utf8");
|
|
120
136
|
} catch (err) {
|
|
121
137
|
return {
|
|
122
138
|
success: false,
|
|
@@ -159,8 +175,8 @@ function validateMarketplaceJson(filePath) {
|
|
|
159
175
|
};
|
|
160
176
|
}
|
|
161
177
|
const data = parsed.data;
|
|
162
|
-
const topLevelDescription = typeof data.description === "string" ?
|
|
163
|
-
const metadataDescription =
|
|
178
|
+
const topLevelDescription = typeof data.description === "string" ? data.description.trim() : "";
|
|
179
|
+
const metadataDescription = metadataDescriptionFrom(data);
|
|
164
180
|
if (!topLevelDescription && !metadataDescription) {
|
|
165
181
|
warnings.push({
|
|
166
182
|
path: "description",
|
|
@@ -184,8 +200,9 @@ function validateMarketplaceJson(filePath) {
|
|
|
184
200
|
pluginNames.add(plugin.name);
|
|
185
201
|
const source = plugin.source ?? "./";
|
|
186
202
|
const sourceErr = validateRelativePath(source);
|
|
187
|
-
if (sourceErr)
|
|
203
|
+
if (sourceErr) {
|
|
188
204
|
errors.push({ path: `plugins[${index}].source`, message: sourceErr });
|
|
205
|
+
}
|
|
189
206
|
const marketplaceRoot = dirname(dirname(filePath));
|
|
190
207
|
const pluginBase = safeResolveWithin(marketplaceRoot, source);
|
|
191
208
|
if (!pluginBase) {
|
|
@@ -195,7 +212,7 @@ function validateMarketplaceJson(filePath) {
|
|
|
195
212
|
});
|
|
196
213
|
continue;
|
|
197
214
|
}
|
|
198
|
-
if (!
|
|
215
|
+
if (!existsSync2(pluginBase) || !lstatSync2(pluginBase).isDirectory()) {
|
|
199
216
|
errors.push({
|
|
200
217
|
path: `plugins[${index}].source`,
|
|
201
218
|
message: `Source path not found: ${source}`
|
|
@@ -217,7 +234,7 @@ function validateMarketplaceJson(filePath) {
|
|
|
217
234
|
});
|
|
218
235
|
continue;
|
|
219
236
|
}
|
|
220
|
-
if (!
|
|
237
|
+
if (!existsSync2(abs) || !lstatSync2(abs).isDirectory()) {
|
|
221
238
|
errors.push({
|
|
222
239
|
path: `plugins[${index}].skills[${j}]`,
|
|
223
240
|
message: `Skill directory not found: ${rel}`
|
|
@@ -246,7 +263,7 @@ function validateMarketplaceJson(filePath) {
|
|
|
246
263
|
});
|
|
247
264
|
continue;
|
|
248
265
|
}
|
|
249
|
-
if (!
|
|
266
|
+
if (!existsSync2(abs) || !lstatSync2(abs).isDirectory()) {
|
|
250
267
|
errors.push({
|
|
251
268
|
path: `plugins[${index}].commands[${j}]`,
|
|
252
269
|
message: `Command directory not found: ${rel}`
|
|
@@ -262,12 +279,32 @@ function validateMarketplaceJson(filePath) {
|
|
|
262
279
|
warnings
|
|
263
280
|
};
|
|
264
281
|
}
|
|
282
|
+
|
|
283
|
+
// apps/cli/src/services/pluginValidation/plugin.ts
|
|
284
|
+
import { existsSync as existsSync3, lstatSync as lstatSync3, readFileSync as readFileSync3 } from "node:fs";
|
|
285
|
+
import { dirname as dirname2, join as join2 } from "node:path";
|
|
286
|
+
import { z } from "zod";
|
|
287
|
+
var PluginManifestSchema = z.strictObject({
|
|
288
|
+
name: z.string().min(1),
|
|
289
|
+
version: z.string().optional(),
|
|
290
|
+
description: z.string().optional(),
|
|
291
|
+
author: z.unknown().optional(),
|
|
292
|
+
homepage: z.string().optional(),
|
|
293
|
+
repository: z.unknown().optional(),
|
|
294
|
+
license: z.string().optional(),
|
|
295
|
+
keywords: z.array(z.string()).optional(),
|
|
296
|
+
commands: z.union([z.string(), z.array(z.string())]).optional(),
|
|
297
|
+
agents: z.union([z.string(), z.array(z.string())]).optional(),
|
|
298
|
+
skills: z.union([z.string(), z.array(z.string())]).optional(),
|
|
299
|
+
hooks: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
|
|
300
|
+
mcpServers: z.union([z.string(), z.record(z.string(), z.unknown())]).optional()
|
|
301
|
+
}).passthrough();
|
|
265
302
|
function validatePluginJson(filePath) {
|
|
266
303
|
const errors = [];
|
|
267
304
|
const warnings = [];
|
|
268
305
|
let raw;
|
|
269
306
|
try {
|
|
270
|
-
raw =
|
|
307
|
+
raw = readFileSync3(filePath, "utf8");
|
|
271
308
|
} catch (err) {
|
|
272
309
|
return {
|
|
273
310
|
success: false,
|
|
@@ -350,7 +387,7 @@ function validatePluginJson(filePath) {
|
|
|
350
387
|
message: "No author information provided. Consider adding author details for plugin attribution"
|
|
351
388
|
});
|
|
352
389
|
}
|
|
353
|
-
const pluginRoot =
|
|
390
|
+
const pluginRoot = dirname2(dirname2(filePath));
|
|
354
391
|
const validatePathList = (field, value) => {
|
|
355
392
|
if (!value) return;
|
|
356
393
|
const values = Array.isArray(value) ? value : [value];
|
|
@@ -364,7 +401,7 @@ function validatePluginJson(filePath) {
|
|
|
364
401
|
path: `${field}[${idx}]`,
|
|
365
402
|
message: "Invalid path (must be ./..., no .., forward slashes)"
|
|
366
403
|
});
|
|
367
|
-
} else if (!
|
|
404
|
+
} else if (!existsSync3(abs)) {
|
|
368
405
|
errors.push({
|
|
369
406
|
path: `${field}[${idx}]`,
|
|
370
407
|
message: `Path not found: ${p}`
|
|
@@ -378,6 +415,13 @@ function validatePluginJson(filePath) {
|
|
|
378
415
|
if (typeof data.hooks === "string") validatePathList("hooks", data.hooks);
|
|
379
416
|
if (typeof data.mcpServers === "string")
|
|
380
417
|
validatePathList("mcpServers", data.mcpServers);
|
|
418
|
+
const pluginManifest = join2(pluginRoot, ".kode-plugin", "plugin.json");
|
|
419
|
+
if (!existsSync3(pluginManifest) && lstatSync3(dirname2(filePath)).isDirectory()) {
|
|
420
|
+
warnings.push({
|
|
421
|
+
path: "plugin.json",
|
|
422
|
+
message: "Manifest is not under .kode-plugin/plugin.json"
|
|
423
|
+
});
|
|
424
|
+
}
|
|
381
425
|
return {
|
|
382
426
|
success: errors.length === 0,
|
|
383
427
|
fileType: "plugin",
|
|
@@ -386,6 +430,13 @@ function validatePluginJson(filePath) {
|
|
|
386
430
|
warnings
|
|
387
431
|
};
|
|
388
432
|
}
|
|
433
|
+
|
|
434
|
+
// apps/cli/src/services/pluginValidation/validate.ts
|
|
435
|
+
function looksLikeMarketplace(json) {
|
|
436
|
+
if (!json || typeof json !== "object") return false;
|
|
437
|
+
const record = json;
|
|
438
|
+
return Array.isArray(record.plugins);
|
|
439
|
+
}
|
|
389
440
|
function validatePluginOrMarketplacePath(path) {
|
|
390
441
|
const abs = resolveFromAgentCwd(path);
|
|
391
442
|
if (!abs) {
|
|
@@ -397,7 +448,7 @@ function validatePluginOrMarketplacePath(path) {
|
|
|
397
448
|
warnings: []
|
|
398
449
|
};
|
|
399
450
|
}
|
|
400
|
-
if (!
|
|
451
|
+
if (!existsSync4(abs)) {
|
|
401
452
|
return {
|
|
402
453
|
success: false,
|
|
403
454
|
fileType: "plugin",
|
|
@@ -406,17 +457,17 @@ function validatePluginOrMarketplacePath(path) {
|
|
|
406
457
|
warnings: []
|
|
407
458
|
};
|
|
408
459
|
}
|
|
409
|
-
const stat =
|
|
460
|
+
const stat = lstatSync4(abs);
|
|
410
461
|
let filePath = abs;
|
|
411
462
|
if (stat.isDirectory()) {
|
|
412
|
-
const marketplace =
|
|
413
|
-
const plugin =
|
|
414
|
-
const legacyMarketplace =
|
|
415
|
-
const legacyPlugin =
|
|
416
|
-
if (
|
|
417
|
-
else if (
|
|
418
|
-
else if (
|
|
419
|
-
else if (
|
|
463
|
+
const marketplace = join3(abs, ".kode-plugin", "marketplace.json");
|
|
464
|
+
const plugin = join3(abs, ".kode-plugin", "plugin.json");
|
|
465
|
+
const legacyMarketplace = join3(abs, ".claude-plugin", "marketplace.json");
|
|
466
|
+
const legacyPlugin = join3(abs, ".claude-plugin", "plugin.json");
|
|
467
|
+
if (existsSync4(marketplace)) filePath = marketplace;
|
|
468
|
+
else if (existsSync4(plugin)) filePath = plugin;
|
|
469
|
+
else if (existsSync4(legacyMarketplace)) filePath = legacyMarketplace;
|
|
470
|
+
else if (existsSync4(legacyPlugin)) filePath = legacyPlugin;
|
|
420
471
|
else {
|
|
421
472
|
return {
|
|
422
473
|
success: false,
|
|
@@ -436,15 +487,18 @@ function validatePluginOrMarketplacePath(path) {
|
|
|
436
487
|
return validateMarketplaceJson(filePath);
|
|
437
488
|
if (filePath.endsWith("plugin.json")) return validatePluginJson(filePath);
|
|
438
489
|
try {
|
|
439
|
-
const raw =
|
|
490
|
+
const raw = readFileSync4(filePath, "utf8");
|
|
440
491
|
const json = JSON.parse(raw);
|
|
441
|
-
if (
|
|
492
|
+
if (looksLikeMarketplace(json)) {
|
|
442
493
|
return validateMarketplaceJson(filePath);
|
|
443
494
|
}
|
|
444
495
|
} catch {
|
|
445
496
|
}
|
|
446
497
|
return validatePluginJson(filePath);
|
|
447
498
|
}
|
|
499
|
+
|
|
500
|
+
// apps/cli/src/services/pluginValidation/format.ts
|
|
501
|
+
import figures from "figures";
|
|
448
502
|
function formatValidationResult(result) {
|
|
449
503
|
const lines = [];
|
|
450
504
|
for (const err of result.errors) {
|
|
@@ -455,11 +509,9 @@ function formatValidationResult(result) {
|
|
|
455
509
|
}
|
|
456
510
|
lines.push("");
|
|
457
511
|
if (result.success) {
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
lines.push(`${figures.tick} Validation passed`);
|
|
462
|
-
}
|
|
512
|
+
lines.push(
|
|
513
|
+
result.warnings.length > 0 ? `${figures.tick} Validation passed with warnings` : `${figures.tick} Validation passed`
|
|
514
|
+
);
|
|
463
515
|
} else {
|
|
464
516
|
lines.push(`${figures.cross} Validation failed`);
|
|
465
517
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../apps/cli/src/services/pluginValidation/validate.ts", "../../apps/cli/src/services/pluginValidation/utils.ts", "../../apps/cli/src/services/pluginValidation/marketplace.ts", "../../apps/cli/src/services/pluginValidation/skills.ts", "../../apps/cli/src/services/pluginValidation/plugin.ts", "../../apps/cli/src/services/pluginValidation/format.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { ValidationResult } from './types'\nimport { resolveFromAgentCwd } from './utils'\nimport { validateMarketplaceJson } from './marketplace'\nimport { validatePluginJson } from './plugin'\n\nfunction looksLikeMarketplace(json: unknown): boolean {\n if (!json || typeof json !== 'object') return false\n const record = json as Record<string, unknown>\n return Array.isArray(record.plugins)\n}\n\nexport function validatePluginOrMarketplacePath(\n path: string,\n): ValidationResult {\n const abs = resolveFromAgentCwd(path)\n if (!abs) {\n return {\n success: false,\n fileType: 'plugin',\n filePath: '',\n errors: [{ path: 'path', message: 'Path is required' }],\n warnings: [],\n }\n }\n if (!existsSync(abs)) {\n return {\n success: false,\n fileType: 'plugin',\n filePath: abs,\n errors: [{ path: 'file', message: `Path not found: ${abs}` }],\n warnings: [],\n }\n }\n\n const stat = lstatSync(abs)\n let filePath = abs\n if (stat.isDirectory()) {\n const marketplace = join(abs, '.kode-plugin', 'marketplace.json')\n const plugin = join(abs, '.kode-plugin', 'plugin.json')\n const legacyMarketplace = join(abs, '.claude-plugin', 'marketplace.json')\n const legacyPlugin = join(abs, '.claude-plugin', 'plugin.json')\n if (existsSync(marketplace)) filePath = marketplace\n else if (existsSync(plugin)) filePath = plugin\n else if (existsSync(legacyMarketplace)) filePath = legacyMarketplace\n else if (existsSync(legacyPlugin)) filePath = legacyPlugin\n else {\n return {\n success: false,\n fileType: 'plugin',\n filePath: abs,\n errors: [\n {\n path: 'directory',\n message:\n 'No manifest found in directory. Expected .kode-plugin/marketplace.json or .kode-plugin/plugin.json (legacy .claude-plugin/* is also supported)',\n },\n ],\n warnings: [],\n }\n }\n }\n\n if (filePath.endsWith('marketplace.json'))\n return validateMarketplaceJson(filePath)\n if (filePath.endsWith('plugin.json')) return validatePluginJson(filePath)\n\n try {\n const raw = readFileSync(filePath, 'utf8')\n const json = JSON.parse(raw)\n if (looksLikeMarketplace(json)) {\n return validateMarketplaceJson(filePath)\n }\n } catch {\n // ignore\n }\n\n return validatePluginJson(filePath)\n}\n", "import { resolve, sep } from 'node:path'\n\nimport { getCwd } from '#core/utils/state'\n\nexport function resolveFromAgentCwd(input: string): string {\n const trimmed = input.trim()\n if (!trimmed) return trimmed\n if (trimmed.startsWith('~')) {\n return trimmed\n }\n if (trimmed.startsWith(sep)) return trimmed\n return resolve(getCwd(), trimmed)\n}\n\nexport function validateRelativePath(path: string): string | null {\n if (!path.startsWith('./')) return 'must start with \"./\"'\n if (path.split('/').includes('..')) return 'must not contain \"..\"'\n if (path.includes('\\\\')) return 'must use forward slashes'\n return null\n}\n\nexport function safeResolveWithin(baseDir: string, rel: string): string | null {\n const normalized = rel.replace(/\\\\/g, '/')\n if (!normalized.startsWith('./') || normalized.split('/').includes('..'))\n return null\n const abs = resolve(baseDir, normalized.split('/').join(sep))\n const base = resolve(baseDir)\n if (!abs.startsWith(base + sep) && abs !== base) return null\n return abs\n}\n", "import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { dirname } from 'node:path'\n\nimport { MarketplaceManifestSchema } from '#cli-services/skillMarketplace'\n\nimport type { MarketplaceManifest } from '#cli-services/skillMarketplace'\n\nimport type { ValidationIssue, ValidationResult } from './types'\nimport { safeResolveWithin, validateRelativePath } from './utils'\nimport { validateSkillDir } from './skills'\n\nfunction metadataDescriptionFrom(manifest: MarketplaceManifest): string {\n const metadata = manifest.metadata as unknown\n if (!metadata || typeof metadata !== 'object') return ''\n const record = metadata as Record<string, unknown>\n const value = record.description\n if (typeof value !== 'string') return ''\n return value.trim()\n}\n\nexport function validateMarketplaceJson(filePath: string): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n let raw: string\n try {\n raw = readFileSync(filePath, 'utf8')\n } catch (err) {\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors: [\n { path: 'file', message: `Failed to read file: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n let json: unknown\n try {\n json = JSON.parse(raw)\n } catch (err) {\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors: [\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n const parsed = MarketplaceManifestSchema.safeParse(json)\n if (!parsed.success) {\n errors.push(\n ...parsed.error.issues.map(i => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n )\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors,\n warnings,\n }\n }\n\n const data = parsed.data\n const topLevelDescription =\n typeof data.description === 'string' ? data.description.trim() : ''\n const metadataDescription = metadataDescriptionFrom(data)\n\n if (!topLevelDescription && !metadataDescription) {\n warnings.push({\n path: 'description',\n message:\n 'No marketplace description provided. Adding a description helps users understand what this marketplace offers',\n })\n }\n\n if (!data.plugins || data.plugins.length === 0) {\n warnings.push({\n path: 'plugins',\n message: 'Marketplace has no plugins defined',\n })\n }\n\n const pluginNames = new Set<string>()\n for (const [index, plugin] of data.plugins.entries()) {\n if (pluginNames.has(plugin.name)) {\n errors.push({\n path: `plugins[${index}].name`,\n message: `Duplicate plugin name \"${plugin.name}\"`,\n })\n }\n pluginNames.add(plugin.name)\n\n const source = plugin.source ?? './'\n const sourceErr = validateRelativePath(source)\n if (sourceErr) {\n errors.push({ path: `plugins[${index}].source`, message: sourceErr })\n }\n\n const marketplaceRoot = dirname(dirname(filePath))\n const pluginBase = safeResolveWithin(marketplaceRoot, source)\n if (!pluginBase) {\n errors.push({\n path: `plugins[${index}].source`,\n message: 'Invalid source path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n\n if (!existsSync(pluginBase) || !lstatSync(pluginBase).isDirectory()) {\n errors.push({\n path: `plugins[${index}].source`,\n message: `Source path not found: ${source}`,\n })\n continue\n }\n\n const skillPaths = plugin.skills ?? []\n for (const [j, rel] of skillPaths.entries()) {\n const err = validateRelativePath(rel)\n if (err) {\n errors.push({ path: `plugins[${index}].skills[${j}]`, message: err })\n continue\n }\n const abs = safeResolveWithin(pluginBase, rel)\n if (!abs) {\n errors.push({\n path: `plugins[${index}].skills[${j}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\n errors.push({\n path: `plugins[${index}].skills[${j}]`,\n message: `Skill directory not found: ${rel}`,\n })\n continue\n }\n errors.push(\n ...validateSkillDir(abs).map(e => ({\n ...e,\n path: `plugins[${index}].skills[${j}]: ${e.path}`,\n })),\n )\n }\n\n const commandPaths = plugin.commands ?? []\n for (const [j, rel] of commandPaths.entries()) {\n const err = validateRelativePath(rel)\n if (err) {\n errors.push({ path: `plugins[${index}].commands[${j}]`, message: err })\n continue\n }\n const abs = safeResolveWithin(pluginBase, rel)\n if (!abs) {\n errors.push({\n path: `plugins[${index}].commands[${j}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\n errors.push({\n path: `plugins[${index}].commands[${j}]`,\n message: `Command directory not found: ${rel}`,\n })\n }\n }\n }\n\n return {\n success: errors.length === 0,\n fileType: 'marketplace',\n filePath,\n errors,\n warnings,\n }\n}\n", "import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { join, sep } from 'node:path'\n\nimport { parseFrontmatter } from '#cli-services/customCommands'\n\nimport type { ValidationIssue } from './types'\n\nfunction getStringField(obj: unknown, key: string): string {\n if (!obj || typeof obj !== 'object') return ''\n const record = obj as Record<string, unknown>\n const value = record[key]\n if (typeof value !== 'string') return ''\n return value.trim()\n}\n\nexport function validateSkillDir(skillDir: string): ValidationIssue[] {\n const issues: ValidationIssue[] = []\n const name = skillDir.split(sep).pop() || ''\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) || name.length > 64) {\n issues.push({\n path: `skills/${name}`,\n message:\n 'Invalid skill directory name (must be lowercase kebab-case, 1\u201364 chars)',\n })\n return issues\n }\n\n if (!existsSync(skillDir) || !lstatSync(skillDir).isDirectory()) {\n issues.push({\n path: `skills/${name}`,\n message: 'Skill directory not found',\n })\n return issues\n }\n\n const skillFileCandidates = [\n join(skillDir, 'SKILL.md'),\n join(skillDir, 'skill.md'),\n ]\n const skillFile = skillFileCandidates.find(p => existsSync(p))\n if (!skillFile) {\n issues.push({\n path: `skills/${name}`,\n message: 'Missing SKILL.md (or skill.md)',\n })\n return issues\n }\n\n try {\n const raw = readFileSync(skillFile, 'utf8')\n const { frontmatter } = parseFrontmatter(raw)\n\n const declared = getStringField(frontmatter, 'name')\n if (!declared) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'Missing required frontmatter field: name',\n })\n } else if (declared !== name) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: `Frontmatter name must match directory name (dir=${name}, name=${declared})`,\n })\n }\n\n const description = getStringField(frontmatter, 'description')\n if (!description) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'Missing required frontmatter field: description',\n })\n } else if (description.length > 1024) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'description must be <= 1024 characters',\n })\n }\n } catch (err) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: `Failed to parse SKILL.md: ${err instanceof Error ? err.message : String(err)}`,\n })\n }\n\n return issues\n}\n", "import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { z } from 'zod'\n\nimport type { ValidationIssue, ValidationResult } from './types'\nimport { safeResolveWithin, validateRelativePath } from './utils'\n\nconst PluginManifestSchema = z\n .strictObject({\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.unknown().optional(),\n homepage: z.string().optional(),\n repository: z.unknown().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n mcpServers: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough()\n\nexport function validatePluginJson(filePath: string): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n let raw: string\n try {\n raw = readFileSync(filePath, 'utf8')\n } catch (err) {\n return {\n success: false,\n fileType: 'plugin',\n filePath,\n errors: [\n { path: 'file', message: `Failed to read file: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n let json: unknown\n try {\n json = JSON.parse(raw)\n } catch (err) {\n return {\n success: false,\n fileType: 'plugin',\n filePath,\n errors: [\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n const parsed = PluginManifestSchema.safeParse(json)\n if (!parsed.success) {\n errors.push(\n ...parsed.error.issues.map(i => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n )\n return { success: false, fileType: 'plugin', filePath, errors, warnings }\n }\n\n const data = parsed.data\n\n if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(data.name)) {\n errors.push({\n path: 'name',\n message: 'Must be kebab-case and start with a letter',\n })\n }\n\n if (\n data.version &&\n !/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/.test(\n data.version,\n )\n ) {\n errors.push({\n path: 'version',\n message: 'Invalid semantic version (expected MAJOR.MINOR.PATCH)',\n })\n }\n\n if (data.homepage) {\n try {\n // eslint-disable-next-line no-new\n new URL(data.homepage)\n } catch {\n errors.push({ path: 'homepage', message: 'Invalid URL' })\n }\n }\n\n if (typeof data.repository === 'string') {\n try {\n // eslint-disable-next-line no-new\n new URL(data.repository)\n } catch {\n errors.push({ path: 'repository', message: 'Invalid URL' })\n }\n }\n\n if (!data.version) {\n warnings.push({\n path: 'version',\n message:\n 'No version specified. Consider adding a version following semver (e.g., \"1.0.0\")',\n })\n }\n\n if (!data.description) {\n warnings.push({\n path: 'description',\n message:\n 'No description provided. Adding a description helps users understand what your plugin does',\n })\n }\n\n if (!data.author) {\n warnings.push({\n path: 'author',\n message:\n 'No author information provided. Consider adding author details for plugin attribution',\n })\n }\n\n const pluginRoot = dirname(dirname(filePath))\n\n const validatePathList = (field: string, value: unknown) => {\n if (!value) return\n const values = Array.isArray(value) ? value : [value]\n for (const [idx, p] of values.entries()) {\n if (typeof p !== 'string') continue\n const err = validateRelativePath(p)\n if (err) errors.push({ path: `${field}[${idx}]`, message: err })\n const abs = safeResolveWithin(pluginRoot, p)\n if (!abs) {\n errors.push({\n path: `${field}[${idx}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n } else if (!existsSync(abs)) {\n errors.push({\n path: `${field}[${idx}]`,\n message: `Path not found: ${p}`,\n })\n }\n }\n }\n\n validatePathList('commands', data.commands)\n validatePathList('agents', data.agents)\n validatePathList('skills', data.skills)\n\n if (typeof data.hooks === 'string') validatePathList('hooks', data.hooks)\n if (typeof data.mcpServers === 'string')\n validatePathList('mcpServers', data.mcpServers)\n\n // If plugin root looks like a plugin directory, warn if the manifests are missing.\n const pluginManifest = join(pluginRoot, '.kode-plugin', 'plugin.json')\n if (\n !existsSync(pluginManifest) &&\n lstatSync(dirname(filePath)).isDirectory()\n ) {\n warnings.push({\n path: 'plugin.json',\n message: 'Manifest is not under .kode-plugin/plugin.json',\n })\n }\n\n return {\n success: errors.length === 0,\n fileType: 'plugin',\n filePath,\n errors,\n warnings,\n }\n}\n", "import figures from 'figures'\n\nimport type { ValidationResult } from './types'\n\nexport function formatValidationResult(result: ValidationResult): string {\n const lines: string[] = []\n for (const err of result.errors) {\n lines.push(` ${figures.pointer} ${err.path}: ${err.message}`)\n }\n for (const warn of result.warnings) {\n lines.push(` ${figures.pointer} ${warn.path}: ${warn.message}`)\n }\n\n lines.push('')\n\n if (result.success) {\n lines.push(\n result.warnings.length > 0\n ? `${figures.tick} Validation passed with warnings`\n : `${figures.tick} Validation passed`,\n )\n } else {\n lines.push(`${figures.cross} Validation failed`)\n }\n\n return lines.join('\\n')\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["existsSync", "lstatSync", "readFileSync", "join", "existsSync", "lstatSync", "readFileSync", "sep", "sep", "readFileSync", "existsSync", "lstatSync", "existsSync", "lstatSync", "readFileSync", "dirname", "join", "readFileSync", "dirname", "existsSync", "join", "lstatSync", "existsSync", "lstatSync", "join", "readFileSync"]
|
|
7
|
+
}
|
|
File without changes
|
|
@@ -1,64 +1,26 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
getSettingsFileCandidates,
|
|
5
|
-
loadSettingsWithLegacyFallback,
|
|
6
|
-
saveSettingsToPrimaryAndSyncLegacy
|
|
7
|
-
} from "./chunk-HCBELH4J.js";
|
|
8
|
-
import {
|
|
9
|
-
isSettingSourceEnabled
|
|
10
|
-
} from "./chunk-UKHTVRJM.js";
|
|
11
1
|
import {
|
|
12
2
|
getSessionPlugins
|
|
13
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-M7P3QNRU.js";
|
|
14
4
|
import {
|
|
15
5
|
getCwd
|
|
16
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BBJFHTBC.js";
|
|
7
|
+
import {
|
|
8
|
+
isSettingSourceEnabled,
|
|
9
|
+
readLocalSettings,
|
|
10
|
+
updateLocalSettings
|
|
11
|
+
} from "./chunk-XR2W3MAM.js";
|
|
17
12
|
|
|
18
|
-
// src/services/
|
|
13
|
+
// apps/cli/src/services/outputStyles.ts
|
|
19
14
|
import figures from "figures";
|
|
20
15
|
import { memoize } from "lodash-es";
|
|
16
|
+
import { statSync as statSync2 } from "node:fs";
|
|
17
|
+
import { basename, join as join2 } from "path";
|
|
18
|
+
|
|
19
|
+
// apps/cli/src/services/outputStyles/filesystem.ts
|
|
21
20
|
import { existsSync, readdirSync, readFileSync, statSync } from "fs";
|
|
22
|
-
import {
|
|
21
|
+
import { dirname, join, resolve } from "path";
|
|
23
22
|
import { homedir } from "os";
|
|
24
23
|
import matter from "gray-matter";
|
|
25
|
-
import yaml from "js-yaml";
|
|
26
|
-
|
|
27
|
-
// src/utils/config/localSettings.ts
|
|
28
|
-
function readLocalSettings(options) {
|
|
29
|
-
const projectDir = options?.projectDir ?? getCwd();
|
|
30
|
-
const loaded = loadSettingsWithLegacyFallback({
|
|
31
|
-
destination: "localSettings",
|
|
32
|
-
projectDir,
|
|
33
|
-
migrateToPrimary: true
|
|
34
|
-
});
|
|
35
|
-
return loaded.settings ?? {};
|
|
36
|
-
}
|
|
37
|
-
function updateLocalSettings(patch, options) {
|
|
38
|
-
const projectDir = options?.projectDir ?? getCwd();
|
|
39
|
-
const candidates = getSettingsFileCandidates({
|
|
40
|
-
destination: "localSettings",
|
|
41
|
-
projectDir
|
|
42
|
-
});
|
|
43
|
-
const existing = (candidates ? loadSettingsWithLegacyFallback({
|
|
44
|
-
destination: "localSettings",
|
|
45
|
-
projectDir,
|
|
46
|
-
migrateToPrimary: true
|
|
47
|
-
}).settings : null) ?? {};
|
|
48
|
-
const next = { ...existing, ...patch };
|
|
49
|
-
if (candidates) {
|
|
50
|
-
saveSettingsToPrimaryAndSyncLegacy({
|
|
51
|
-
destination: "localSettings",
|
|
52
|
-
projectDir,
|
|
53
|
-
settings: next,
|
|
54
|
-
syncLegacyIfExists: true
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return next;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// src/services/ui/outputStyles.ts
|
|
61
|
-
var DEFAULT_OUTPUT_STYLE = "default";
|
|
62
24
|
function normalizeString(value) {
|
|
63
25
|
if (typeof value !== "string") return null;
|
|
64
26
|
const trimmed = value.trim();
|
|
@@ -79,7 +41,8 @@ function getUserConfigBaseDirs() {
|
|
|
79
41
|
const hasAnyOverride = typeof process.env.CLAUDE_CONFIG_DIR === "string" || typeof process.env.KODE_CONFIG_DIR === "string";
|
|
80
42
|
const claudeBase = normalizeString(process.env.CLAUDE_CONFIG_DIR);
|
|
81
43
|
const kodeBase = normalizeString(process.env.KODE_CONFIG_DIR);
|
|
82
|
-
if (claudeBase)
|
|
44
|
+
if (claudeBase)
|
|
45
|
+
out.push({ claude: resolve(claudeBase), kode: resolve(claudeBase) });
|
|
83
46
|
if (kodeBase) out.push({ claude: resolve(kodeBase), kode: resolve(kodeBase) });
|
|
84
47
|
if (hasAnyOverride) {
|
|
85
48
|
return dedupeConfigBases(out);
|
|
@@ -141,7 +104,7 @@ function listMarkdownFilesRecursively(rootDir) {
|
|
|
141
104
|
visitedDirs.add(dirKey);
|
|
142
105
|
let entries;
|
|
143
106
|
try {
|
|
144
|
-
entries = readdirSync(dirPath, { withFileTypes: true
|
|
107
|
+
entries = readdirSync(dirPath, { withFileTypes: true });
|
|
145
108
|
} catch {
|
|
146
109
|
return;
|
|
147
110
|
}
|
|
@@ -174,19 +137,18 @@ function listMarkdownFilesRecursively(rootDir) {
|
|
|
174
137
|
walk(rootDir);
|
|
175
138
|
return files;
|
|
176
139
|
}
|
|
140
|
+
function asRecord(value) {
|
|
141
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return {};
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
177
144
|
function readMarkdownFile(filePath) {
|
|
178
145
|
try {
|
|
179
146
|
const raw = readFileSync(filePath, "utf8");
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
parse: (input) => yaml.load(input, yamlSchema ? { schema: yamlSchema } : void 0) ?? {}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
147
|
+
const parsed = matter(raw);
|
|
148
|
+
return {
|
|
149
|
+
frontmatter: asRecord(parsed.data),
|
|
150
|
+
content: String(parsed.content ?? "")
|
|
187
151
|
};
|
|
188
|
-
const parsed = matter(raw, matterOptions);
|
|
189
|
-
return { frontmatter: parsed.data ?? {}, content: String(parsed.content ?? "") };
|
|
190
152
|
} catch {
|
|
191
153
|
return null;
|
|
192
154
|
}
|
|
@@ -194,14 +156,14 @@ function readMarkdownFile(filePath) {
|
|
|
194
156
|
function inodeKeyForPath(filePath) {
|
|
195
157
|
try {
|
|
196
158
|
const st = statSync(filePath);
|
|
197
|
-
|
|
198
|
-
return `${st.dev}:${st.ino}`;
|
|
199
|
-
}
|
|
200
|
-
return null;
|
|
159
|
+
return `${st.dev}:${st.ino}`;
|
|
201
160
|
} catch {
|
|
202
161
|
return null;
|
|
203
162
|
}
|
|
204
163
|
}
|
|
164
|
+
|
|
165
|
+
// apps/cli/src/services/outputStyles.ts
|
|
166
|
+
var DEFAULT_OUTPUT_STYLE = "default";
|
|
205
167
|
var INSIGHTS_SECTION = `
|
|
206
168
|
## Insights
|
|
207
169
|
In order to encourage learning, before and after writing code, always provide brief educational explanations about implementation choices using (with backticks):
|
|
@@ -359,7 +321,7 @@ function loadPluginOutputStyles() {
|
|
|
359
321
|
for (const dir of plugin.outputStylesDirs ?? []) {
|
|
360
322
|
let st;
|
|
361
323
|
try {
|
|
362
|
-
st =
|
|
324
|
+
st = statSync2(dir);
|
|
363
325
|
} catch {
|
|
364
326
|
continue;
|
|
365
327
|
}
|
|
@@ -391,11 +353,7 @@ function loadPluginOutputStyles() {
|
|
|
391
353
|
function loadCustomOutputStyles(options) {
|
|
392
354
|
const out = [];
|
|
393
355
|
const seen = /* @__PURE__ */ new Set();
|
|
394
|
-
const policyDir =
|
|
395
|
-
getClaudePolicyBaseDir(),
|
|
396
|
-
".claude",
|
|
397
|
-
"output-styles"
|
|
398
|
-
);
|
|
356
|
+
const policyDir = join2(getClaudePolicyBaseDir(), ".claude", "output-styles");
|
|
399
357
|
for (const filePath of listMarkdownFilesRecursively(policyDir)) {
|
|
400
358
|
const inodeKey = inodeKeyForPath(filePath);
|
|
401
359
|
const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`;
|
|
@@ -411,7 +369,7 @@ function loadCustomOutputStyles(options) {
|
|
|
411
369
|
const userBases = getUserConfigBaseDirs();
|
|
412
370
|
for (const base of userBases) {
|
|
413
371
|
for (const userBaseDir of /* @__PURE__ */ new Set([base.claude, base.kode])) {
|
|
414
|
-
const dirPath =
|
|
372
|
+
const dirPath = join2(userBaseDir, "output-styles");
|
|
415
373
|
for (const filePath of listMarkdownFilesRecursively(dirPath)) {
|
|
416
374
|
const inodeKey = inodeKeyForPath(filePath);
|
|
417
375
|
const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`;
|
|
@@ -460,8 +418,7 @@ var getAvailableOutputStyles = memoize(() => {
|
|
|
460
418
|
return merged;
|
|
461
419
|
});
|
|
462
420
|
function clearOutputStyleCache() {
|
|
463
|
-
;
|
|
464
|
-
getAvailableOutputStyles.cache?.clear?.();
|
|
421
|
+
getAvailableOutputStyles.cache.clear?.();
|
|
465
422
|
}
|
|
466
423
|
function getCurrentOutputStyle() {
|
|
467
424
|
if (!isSettingSourceEnabled("localSettings")) return DEFAULT_OUTPUT_STYLE;
|