@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/server/src/bootstrapEnv.ts", "../../apps/server/src/index.ts", "../../apps/server/src/acp/jsonrpc.ts", "../../apps/server/src/acp/protocol.ts", "../../apps/server/src/acp/stdioTransport.ts", "../../apps/server/src/acp/stdoutGuard.ts", "../../apps/server/src/acp/agent/guards.ts", "../../apps/server/src/acp/agent/handlers/initialize.ts", "../../apps/server/src/acp/agent/handlers/sessions.ts", "../../apps/server/src/acp/agent/mcp.ts", "../../apps/server/src/acp/agent/modes.ts", "../../apps/server/src/acp/agent/sessionStore.ts", "../../apps/server/src/acp/agent/notifications.ts", "../../apps/server/src/acp/agent/content.ts", "../../apps/server/src/acp/agent/toolCalls.ts", "../../apps/server/src/acp/agent/kodeMessages.ts", "../../apps/server/src/acp/agent/handlers/prompt.ts", "../../apps/server/src/acp/agent/permissions.ts", "../../apps/server/src/acp/kodeAcpAgent.ts", "../../apps/server/src/acp/runAcpStdio.ts"],
|
|
4
|
+
"sourcesContent": ["import { fileURLToPath } from 'node:url'\nimport { basename, dirname, join } from 'node:path'\nimport { existsSync } from 'node:fs'\n\n/**\n * Best-effort detection for packaged/native executions.\n *\n * This is intentionally kept inside the app layer (entrypoints) rather than\n * core/runtime implementations.\n */\nexport function ensurePackagedRuntimeEnv(): void {\n if (process.env.KODE_PACKAGED !== undefined) return\n\n try {\n const exec = basename(process.execPath || '').toLowerCase()\n if (\n exec &&\n exec !== 'bun' &&\n exec !== 'bun.exe' &&\n exec !== 'node' &&\n exec !== 'node.exe'\n ) {\n process.env.KODE_PACKAGED = '1'\n }\n } catch {}\n}\n\nexport function ensureYogaWasmPath(entrypointUrl: string): void {\n try {\n if (process.env.YOGA_WASM_PATH) return\n\n const entryFile = fileURLToPath(entrypointUrl)\n const entryDir = dirname(entryFile)\n const devCandidate = join(entryDir, '../../yoga.wasm')\n const distCandidate = join(entryDir, './yoga.wasm')\n const resolved = existsSync(distCandidate)\n ? distCandidate\n : existsSync(devCandidate)\n ? devCandidate\n : undefined\n if (resolved) {\n process.env.YOGA_WASM_PATH = resolved\n }\n } catch {}\n}\n", "import '#core/utils/sanitizeAnthropicEnv'\nimport { ensurePackagedRuntimeEnv } from './bootstrapEnv'\nimport { startKodeDaemon } from './server'\nimport { cwd as processCwd } from 'process'\nimport { runAcpStdio } from './acp/runAcpStdio'\nimport { initDebugLogger } from '#core/utils/debugLogger'\nimport { enableConfigs } from '#config'\nimport { logError } from '#core/utils/log'\n\nensurePackagedRuntimeEnv()\n\nif (process.argv.includes('--acp')) {\n runAcpStdio()\n} else {\n initDebugLogger()\n try {\n enableConfigs()\n } catch (e) {\n logError(e)\n }\n\n function getArgValue(flag: string): string | null {\n const idx = process.argv.indexOf(flag)\n if (idx >= 0) {\n const v = process.argv[idx + 1]\n if (typeof v === 'string') return v\n }\n const withEq = process.argv.find(a => a.startsWith(flag + '='))\n if (withEq) return withEq.slice(flag.length + 1)\n return null\n }\n\n const host =\n getArgValue('--host') ?? process.env.KODE_DAEMON_HOST ?? '127.0.0.1'\n const portRaw = getArgValue('--port') ?? process.env.KODE_DAEMON_PORT ?? ''\n const port = portRaw ? Number(portRaw) : 0\n const cwd =\n getArgValue('--cwd') ?? process.env.KODE_DAEMON_CWD ?? processCwd()\n const token =\n getArgValue('--token') ?? process.env.KODE_DAEMON_TOKEN ?? undefined\n const echo =\n process.argv.includes('--echo') || process.env.KODE_DAEMON_ECHO === '1'\n\n const daemon = await startKodeDaemon({\n host,\n port: Number.isFinite(port) ? port : 0,\n cwd,\n token,\n echo,\n })\n\n console.log(daemon.url)\n\n process.on('SIGINT', () => {\n daemon.stop()\n process.exit(0)\n })\n process.on('SIGTERM', () => {\n daemon.stop()\n process.exit(0)\n })\n}\n", "import { format } from 'node:util'\n\nexport type JsonRpcId = string | number | null\n\nexport type JsonRpcRequest = {\n jsonrpc: '2.0'\n id: string | number\n method: string\n params?: unknown\n}\n\nexport type JsonRpcNotification = {\n jsonrpc: '2.0'\n method: string\n params?: unknown\n}\n\nexport type JsonRpcResponse = {\n jsonrpc: '2.0'\n id: JsonRpcId\n result?: unknown\n error?: { code: number; message: string; data?: unknown }\n}\n\ntype JsonRpcIncoming = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse\n\nexport class JsonRpcError extends Error {\n readonly code: number\n readonly data?: unknown\n\n constructor(code: number, message: string, data?: unknown) {\n super(message)\n this.code = code\n this.data = data\n }\n}\n\nexport type JsonRpcHandler = (params: unknown) => Promise<unknown> | unknown\n\nconst JSONRPC_VERSION = '2.0'\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value)\n } catch {\n return format(value)\n }\n}\n\nfunction makeErrorResponse(\n id: JsonRpcId,\n code: number,\n message: string,\n data?: unknown,\n): JsonRpcResponse {\n return {\n jsonrpc: JSONRPC_VERSION,\n id,\n error: data === undefined ? { code, message } : { code, message, data },\n }\n}\n\nfunction normalizeId(id: unknown): JsonRpcId {\n return typeof id === 'string' || typeof id === 'number' ? id : null\n}\n\nexport class JsonRpcPeer {\n private readonly handlers = new Map<string, JsonRpcHandler>()\n private readonly pending = new Map<\n string | number,\n {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n }\n >()\n private nextId = 1\n private sendLine: ((line: string) => void) | null = null\n\n setSend(send: (line: string) => void): void {\n this.sendLine = send\n }\n\n registerMethod(method: string, handler: JsonRpcHandler): void {\n this.handlers.set(method, handler)\n }\n\n async handleIncoming(payload: unknown): Promise<void> {\n if (Array.isArray(payload)) {\n const responses: JsonRpcResponse[] = []\n for (const item of payload) {\n const r = await this.handleIncomingOne(item)\n if (r) responses.push(r)\n }\n if (responses.length > 0) {\n this.sendRaw(responses)\n }\n return\n }\n\n const response = await this.handleIncomingOne(payload)\n if (response) this.sendRaw(response)\n }\n\n private async handleIncomingOne(\n payload: unknown,\n ): Promise<JsonRpcResponse | null> {\n if (!isObject(payload)) {\n return makeErrorResponse(null, -32600, 'Invalid Request')\n }\n\n const jsonrpc = payload.jsonrpc\n if (jsonrpc !== JSONRPC_VERSION) {\n return makeErrorResponse(\n normalizeId(payload.id),\n -32600,\n 'Invalid Request',\n )\n }\n\n const hasMethod =\n typeof payload.method === 'string' && payload.method.length > 0\n const hasId =\n typeof payload.id === 'string' || typeof payload.id === 'number'\n\n // Response\n if (!hasMethod && hasId && ('result' in payload || 'error' in payload)) {\n this.handleResponse(payload as unknown as JsonRpcResponse)\n return null\n }\n\n if (!hasMethod) {\n return makeErrorResponse(\n normalizeId(payload.id),\n -32600,\n 'Invalid Request',\n )\n }\n\n const method = String(payload.method)\n const params = 'params' in payload ? payload['params'] : undefined\n const id = hasId ? (payload.id as string | number) : null\n\n const handler = this.handlers.get(method)\n if (!handler) {\n if (id === null) return null\n return makeErrorResponse(id, -32601, `Method not found: ${method}`)\n }\n\n // Notification (no response expected)\n if (id === null) {\n try {\n await handler(params)\n } catch {\n // Best-effort: notifications have no response channel.\n }\n return null\n }\n\n try {\n const result = await handler(params)\n return { jsonrpc: JSONRPC_VERSION, id, result: result ?? null }\n } catch (err) {\n if (err instanceof JsonRpcError) {\n return makeErrorResponse(id, err.code, err.message, err.data)\n }\n const message = err instanceof Error ? err.message : safeStringify(err)\n return makeErrorResponse(id, -32603, message)\n }\n }\n\n private handleResponse(msg: JsonRpcResponse): void {\n const id = normalizeId(msg.id)\n if (id === null) return\n const pending = this.pending.get(id)\n if (!pending) return\n this.pending.delete(id)\n\n if (pending.timeoutId) clearTimeout(pending.timeoutId)\n\n const errorValue = msg && typeof msg === 'object' ? msg.error : undefined\n if (isObject(errorValue)) {\n const code =\n typeof errorValue.code === 'number' ? errorValue.code : -32603\n const message =\n typeof errorValue.message === 'string'\n ? errorValue.message\n : 'Unknown error'\n pending.reject(new JsonRpcError(code, message, errorValue.data))\n return\n }\n\n pending.resolve(msg.result)\n }\n\n sendNotification(method: string, params?: unknown): void {\n this.sendRaw({\n jsonrpc: JSONRPC_VERSION,\n method,\n ...(params !== undefined ? { params } : {}),\n })\n }\n\n sendRequest<T = unknown>(args: {\n method: string\n params?: unknown\n signal?: AbortSignal\n timeoutMs?: number\n }): Promise<T> {\n const id = this.nextId++\n const timeoutMs = args.timeoutMs\n\n const p = new Promise<T>((resolve, reject) => {\n const entry: {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n } = { resolve, reject, abort: args.signal }\n\n if (timeoutMs && Number.isFinite(timeoutMs) && timeoutMs > 0) {\n entry.timeoutId = setTimeout(() => {\n this.pending.delete(id)\n reject(new JsonRpcError(-32000, `Request timed out: ${args.method}`))\n }, timeoutMs)\n }\n\n if (args.signal) {\n const onAbort = () => {\n this.pending.delete(id)\n if (entry.timeoutId) clearTimeout(entry.timeoutId)\n reject(new JsonRpcError(-32000, `Request aborted: ${args.method}`))\n }\n if (args.signal.aborted) {\n onAbort()\n return\n }\n args.signal.addEventListener('abort', onAbort, { once: true })\n }\n\n this.pending.set(id, entry)\n })\n\n this.sendRaw({\n jsonrpc: JSONRPC_VERSION,\n id,\n method: args.method,\n ...(args.params !== undefined ? { params: args.params } : {}),\n })\n\n return p\n }\n\n private sendRaw(obj: unknown): void {\n const send = this.sendLine\n if (!send) {\n throw new Error('JsonRpcPeer send() not configured')\n }\n const line = JSON.stringify(obj)\n send(line)\n }\n}\n", "export const ACP_PROTOCOL_VERSION = 1\n\nexport * from './protocol/base'\nexport * from './protocol/sessionUpdates'\n", "import readline from 'node:readline'\n\nimport { JsonRpcPeer } from './jsonrpc'\n\ntype TransportOptions = {\n writeLine: (line: string) => void\n}\n\n/**\n * ACP stdio transport (newline-delimited JSON-RPC 2.0).\n *\n * Note: Messages MUST NOT contain embedded newlines; JSON.stringify preserves\n * newlines in string values as `\\\\n` escapes, so this framing is safe.\n */\nexport class StdioTransport {\n private rl: readline.Interface | null = null\n private readonly pending = new Set<Promise<void>>()\n\n constructor(\n private readonly peer: JsonRpcPeer,\n private readonly opts: TransportOptions,\n ) {}\n\n start(): void {\n if (this.rl) return\n\n // Ensure peer can write outbound messages.\n this.peer.setSend(this.opts.writeLine)\n\n // Read newline-delimited JSON from stdin.\n this.rl = readline.createInterface({\n input: process.stdin,\n crlfDelay: Infinity,\n })\n\n this.rl.on('line', line => {\n const trimmed = line.trim()\n if (!trimmed) return\n\n try {\n const payload = JSON.parse(trimmed)\n const p = this.peer.handleIncoming(payload).catch(() => {\n // Best-effort: if handling fails, the peer will attempt to send a JSON-RPC error response.\n })\n this.pending.add(p)\n void p.finally(() => this.pending.delete(p))\n } catch (err) {\n // JSON-RPC parse error (-32700). id is null by spec.\n this.opts.writeLine(\n JSON.stringify({\n jsonrpc: '2.0',\n id: null,\n error: { code: -32700, message: 'Parse error' },\n }),\n )\n }\n })\n\n this.rl.on('close', () => {\n void (async () => {\n // Ensure in-flight requests finish sending responses before exiting.\n const pending = Array.from(this.pending)\n if (pending.length > 0) {\n await Promise.allSettled(pending)\n }\n process.exit(0)\n })()\n })\n }\n\n stop(): void {\n this.rl?.close()\n this.rl = null\n }\n}\n", "import { format } from 'node:util'\n\ntype WriteFn = typeof process.stdout.write\n\ntype GuardHandle = {\n /**\n * Write a single ACP JSON-RPC line to the original stdout (adds `\\\\n`).\n * Use this for protocol messages only.\n */\n writeAcpLine: (line: string) => void\n /** Restore original stdout/console behavior. */\n restore: () => void\n /** Original stdout write (unmodified). */\n originalStdoutWrite: WriteFn\n}\n\nfunction writeTo(\n write: WriteFn,\n chunk: Parameters<WriteFn>[0],\n encoding?: BufferEncoding | ((err?: Error | null) => void),\n cb?: (err?: Error | null) => void,\n): boolean {\n if (typeof encoding === 'function') {\n return write(chunk, encoding)\n }\n return write(chunk, encoding, cb)\n}\n\n/**\n * ACP requires stdout to contain only JSON-RPC messages. This guard redirects\n * accidental stdout writes (console.log / process.stdout.write) to stderr while\n * preserving a dedicated writer for ACP output.\n */\nexport function installStdoutGuard(): GuardHandle {\n const originalStdoutWrite = process.stdout.write.bind(process.stdout)\n const originalStderrWrite = process.stderr.write.bind(process.stderr)\n\n const originalConsoleLog = console.log.bind(console)\n const originalConsoleInfo = console.info.bind(console)\n const originalConsoleDebug = console.debug.bind(console)\n const originalConsoleWarn = console.warn.bind(console)\n const originalConsoleError = console.error.bind(console)\n\n const writeAcpLine = (line: string) => {\n // Protocol framing: newline delimited JSON (no embedded newlines in the message).\n writeTo(originalStdoutWrite, `${line}\\n`)\n }\n\n const writeLogToStderr: typeof console.log = (...args) => {\n writeTo(originalStderrWrite, `${format(...args)}\\n`)\n }\n\n // Redirect log-ish output away from stdout. (warn/error are already stderr in Node,\n // but we normalize for Bun/edge runtimes and to avoid surprises.)\n console.log = writeLogToStderr\n console.info = writeLogToStderr\n console.debug = writeLogToStderr\n console.warn = writeLogToStderr\n console.error = writeLogToStderr\n\n process.stdout.write = (chunk: any, encoding?: any, cb?: any) => {\n return writeTo(originalStderrWrite, chunk, encoding, cb)\n }\n\n const restore = () => {\n process.stdout.write = originalStdoutWrite\n console.log = originalConsoleLog\n console.info = originalConsoleInfo\n console.debug = originalConsoleDebug\n console.warn = originalConsoleWarn\n console.error = originalConsoleError\n }\n\n return { writeAcpLine, restore, originalStdoutWrite }\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n", "import { MACRO } from '#core/constants/macros'\n\nimport * as Protocol from '../../protocol'\nimport { isRecord } from '../guards'\n\nexport function handleInitialize(args: {\n params: unknown\n setClientCapabilities: (caps: Protocol.ClientCapabilities) => void\n}): Protocol.InitializeResponse {\n const p = isRecord(args.params) ? args.params : {}\n\n const clientCapabilities = isRecord(p.clientCapabilities)\n ? (p.clientCapabilities as Protocol.ClientCapabilities)\n : {}\n\n args.setClientCapabilities(clientCapabilities)\n\n return {\n protocolVersion: Protocol.ACP_PROTOCOL_VERSION,\n agentCapabilities: {\n loadSession: true,\n promptCapabilities: {\n image: false,\n audio: false,\n embeddedContext: true,\n embeddedContent: true,\n },\n mcpCapabilities: {\n http: true,\n sse: true,\n },\n },\n agentInfo: {\n name: 'kode',\n title: 'Kode',\n version: MACRO.VERSION || '0.0.0',\n },\n authMethods: [],\n }\n}\n\nexport function handleAuthenticate(): Protocol.AuthenticateResponse {\n return {}\n}\n", "import { nanoid } from 'nanoid'\n\nimport { isAbsolute } from 'node:path'\n\nimport { buildSystemPromptForSession, getSessionContext } from '#core/engine'\nimport { getTools } from '#tools'\nimport { grantReadPermissionForOriginalDir } from '#core/utils/permissions/filesystem'\nimport { setCwd, setOriginalCwd } from '#core/utils/state'\nimport { loadToolPermissionContextFromDisk } from '#core/utils/permissions/toolPermissionSettings'\nimport { getClients, type WrappedClient } from '#core/mcp/client'\n\nimport { JsonRpcError, type JsonRpcPeer } from '../../jsonrpc'\nimport type * as Protocol from '../../protocol'\nimport { connectAcpMcpServers, mergeMcpClients } from '../mcp'\nimport { coercePermissionMode, getModeState } from '../modes'\nimport {\n loadAcpSessionFromDisk,\n persistAcpSessionToDisk,\n} from '../sessionStore'\nimport { sendAvailableCommands, sendCurrentMode } from '../notifications'\nimport { replayConversation } from '../kodeMessages'\nimport type { AcpCommand, SessionState } from '../types'\nimport { isRecord } from '../guards'\n\nasync function loadSessionDeps(): Promise<{\n commands: AcpCommand[]\n tools: Awaited<ReturnType<typeof getTools>>\n context: Record<string, string>\n systemPrompt: string[]\n configuredMcpClients: WrappedClient[]\n}> {\n const [tools, ctx, systemPrompt, configuredMcpClients] = await Promise.all([\n getTools(),\n getSessionContext(),\n buildSystemPromptForSession({ disableSlashCommands: false }),\n getClients().catch(() => [] as WrappedClient[]),\n ])\n return {\n commands: [],\n tools,\n context: ctx,\n systemPrompt,\n configuredMcpClients,\n }\n}\n\nexport async function handleSessionNew(args: {\n peer: JsonRpcPeer\n sessions: Map<string, SessionState>\n params: unknown\n}): Promise<Protocol.NewSessionResponse> {\n const p = isRecord(args.params) ? args.params : {}\n\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!cwd) {\n throw new JsonRpcError(-32602, 'Missing required param: cwd')\n }\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const mcpServers = Array.isArray(p.mcpServers)\n ? (p.mcpServers as Protocol.McpServer[])\n : []\n\n const { commands, tools, context, systemPrompt, configuredMcpClients } =\n await loadSessionDeps()\n\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includeKodeProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const sessionId = `sess_${nanoid()}`\n const currentModeId = toolPermissionContext.mode\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context,\n messages: [],\n toolPermissionContext,\n readFileTimestamps: {},\n responseState: {},\n currentModeId,\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n args.sessions.set(sessionId, session)\n\n sendAvailableCommands(args.peer, session)\n sendCurrentMode(args.peer, session)\n persistAcpSessionToDisk(session)\n\n return {\n sessionId,\n modes: getModeState(session.currentModeId),\n }\n}\n\nexport async function handleSessionLoad(args: {\n peer: JsonRpcPeer\n sessions: Map<string, SessionState>\n params: unknown\n}): Promise<Protocol.LoadSessionResponse> {\n const p = isRecord(args.params) ? args.params : {}\n\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!sessionId)\n throw new JsonRpcError(-32602, 'Missing required param: sessionId')\n if (!cwd) throw new JsonRpcError(-32602, 'Missing required param: cwd')\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const persisted = loadAcpSessionFromDisk(cwd, sessionId)\n if (!persisted) {\n throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n }\n\n const mcpServers = Array.isArray(p.mcpServers)\n ? (p.mcpServers as Protocol.McpServer[])\n : []\n\n const { commands, tools, context, systemPrompt, configuredMcpClients } =\n await loadSessionDeps()\n\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includeKodeProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const currentModeId = coercePermissionMode(\n typeof persisted.currentModeId === 'string' && persisted.currentModeId\n ? persisted.currentModeId\n : toolPermissionContext.mode,\n )\n toolPermissionContext.mode = currentModeId\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context,\n messages: Array.isArray(persisted.messages) ? persisted.messages : [],\n toolPermissionContext,\n readFileTimestamps: isRecord(persisted.readFileTimestamps)\n ? (persisted.readFileTimestamps as Record<string, number>)\n : {},\n responseState: isRecord(persisted.responseState)\n ? (persisted.responseState as SessionState['responseState'])\n : {},\n currentModeId,\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n args.sessions.set(sessionId, session)\n sendAvailableCommands(args.peer, session)\n sendCurrentMode(args.peer, session)\n replayConversation(args.peer, session)\n\n return { modes: getModeState(session.currentModeId) }\n}\n\nexport async function handleSessionSetMode(args: {\n peer: JsonRpcPeer\n sessions: Map<string, SessionState>\n params: unknown\n}): Promise<Protocol.SetSessionModeResponse> {\n const p = isRecord(args.params) ? args.params : {}\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const modeId = typeof p.modeId === 'string' ? p.modeId : ''\n\n const session = args.sessions.get(sessionId)\n if (!session)\n throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n const allowed = new Set(\n getModeState(session.currentModeId).availableModes.map(m => m.id),\n )\n if (!allowed.has(modeId)) {\n throw new JsonRpcError(-32602, `Unknown modeId: ${modeId}`)\n }\n\n const nextMode = coercePermissionMode(modeId)\n session.currentModeId = nextMode\n session.toolPermissionContext.mode = nextMode\n sendCurrentMode(args.peer, session)\n persistAcpSessionToDisk(session)\n\n return {}\n}\n\nexport async function handleSessionCancel(args: {\n sessions: Map<string, SessionState>\n params: unknown\n}): Promise<void> {\n const p = isRecord(args.params) ? args.params : {}\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const session = args.sessions.get(sessionId)\n if (!session) return\n session.activeAbortController?.abort()\n}\n", "import type { Buffer } from 'node:buffer'\n\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'\nimport type { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js'\n\nimport { MACRO } from '#core/constants/macros'\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport { logError, logMCPError } from '#core/utils/log'\nimport type { WrappedClient } from '#core/mcp/client'\n\nimport type * as Protocol from '../protocol'\n\ntype Candidate =\n | { kind: 'stdio'; transport: StdioClientTransport }\n | { kind: 'http'; transport: StreamableHTTPClientTransport }\n | { kind: 'sse'; transport: SSEClientTransport }\n\nfunction getConnectionTimeoutMs(): number {\n const rawTimeout = process.env.MCP_CONNECTION_TIMEOUT_MS\n const parsedTimeout = rawTimeout ? Number.parseInt(rawTimeout, 10) : NaN\n return Number.isFinite(parsedTimeout) ? parsedTimeout : 30_000\n}\n\nfunction buildEnv(extra?: Record<string, string>): Record<string, string> {\n const env: Record<string, string> = {}\n for (const [key, value] of Object.entries(process.env)) {\n if (typeof value === 'string') env[key] = value\n }\n if (extra) Object.assign(env, extra)\n return env\n}\n\nfunction normalizeHeaders(\n headers: Protocol.HttpHeader[] | undefined,\n): Record<string, string> {\n const out: Record<string, string> = {}\n for (const h of headers ?? []) {\n if (!h || typeof h !== 'object') continue\n if (typeof h.name === 'string' && typeof h.value === 'string') {\n out[h.name] = h.value\n }\n }\n return out\n}\n\nfunction normalizeEnvVars(\n vars: Protocol.EnvVariable[] | undefined,\n): Record<string, string> {\n const out: Record<string, string> = {}\n for (const v of vars ?? []) {\n if (!v || typeof v !== 'object') continue\n if (typeof v.name === 'string' && typeof v.value === 'string') {\n out[v.name] = v.value\n }\n }\n return out\n}\n\nasync function connectWithTimeout(\n client: Client,\n transport: Transport,\n name: string,\n timeoutMs: number,\n): Promise<void> {\n const connectPromise = client.connect(transport)\n if (timeoutMs <= 0) {\n await connectPromise\n return\n }\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n const timeoutId = setTimeout(() => {\n reject(\n new Error(\n `Connection to MCP server \"${name}\" timed out after ${timeoutMs}ms`,\n ),\n )\n }, timeoutMs)\n\n connectPromise.finally(() => clearTimeout(timeoutId))\n })\n\n await Promise.race([connectPromise, timeoutPromise])\n}\n\nfunction createCandidates(server: Protocol.McpServer): {\n name: string\n candidates: Candidate[]\n} | null {\n const name = server.name\n if (!name) return null\n\n if (server.type === 'http' || server.type === 'sse') {\n const url = server.url\n if (!url) return null\n\n let parsedUrl: URL\n try {\n parsedUrl = new URL(url)\n } catch (e) {\n logError(e)\n return null\n }\n\n const headers = normalizeHeaders(server.headers)\n const options =\n Object.keys(headers).length > 0 ? { requestInit: { headers } } : undefined\n\n if (server.type === 'http') {\n return {\n name,\n candidates: [\n {\n kind: 'http',\n transport: new StreamableHTTPClientTransport(parsedUrl, options),\n },\n {\n kind: 'sse',\n transport: new SSEClientTransport(parsedUrl, options),\n },\n ],\n }\n }\n\n return {\n name,\n candidates: [\n { kind: 'sse', transport: new SSEClientTransport(parsedUrl, options) },\n {\n kind: 'http',\n transport: new StreamableHTTPClientTransport(parsedUrl, options),\n },\n ],\n }\n }\n\n const envFromParams = normalizeEnvVars(server.env)\n return {\n name,\n candidates: [\n {\n kind: 'stdio',\n transport: new StdioClientTransport({\n command: server.command,\n args: server.args,\n env: buildEnv(envFromParams),\n stderr: 'pipe',\n }),\n },\n ],\n }\n}\n\nexport async function connectAcpMcpServers(\n mcpServers: Protocol.McpServer[],\n): Promise<WrappedClient[]> {\n if (!Array.isArray(mcpServers) || mcpServers.length === 0) return []\n\n const timeoutMs = getConnectionTimeoutMs()\n const results: WrappedClient[] = []\n\n for (const server of mcpServers) {\n const normalized = createCandidates(server)\n if (!normalized) {\n results.push({ name: '<invalid>', type: 'failed' })\n continue\n }\n\n const { name, candidates } = normalized\n\n let lastError: unknown\n for (const candidate of candidates) {\n const client = new Client(\n { name: PRODUCT_COMMAND, version: MACRO.VERSION || '0.0.0' },\n { capabilities: {} },\n )\n\n try {\n await connectWithTimeout(client, candidate.transport, name, timeoutMs)\n\n if (candidate.kind === 'stdio') {\n candidate.transport.stderr?.on('data', (data: Buffer) => {\n const errorText = data.toString().trim()\n if (errorText) logMCPError(name, `Server stderr: ${errorText}`)\n })\n }\n\n let capabilities: ServerCapabilities | null = null\n try {\n capabilities = client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n\n results.push({ name, client, capabilities, type: 'connected' as const })\n lastError = null\n break\n } catch (e) {\n lastError = e\n try {\n await client.close()\n } catch {}\n }\n }\n\n if (lastError) {\n logError(lastError)\n results.push({ name, type: 'failed' as const })\n }\n }\n\n return results\n}\n\nexport function mergeMcpClients(\n base: WrappedClient[],\n extra: WrappedClient[],\n): WrappedClient[] {\n const map = new Map<string, WrappedClient>()\n for (const c of base) map.set(c.name, c)\n for (const c of extra) map.set(c.name, c)\n return Array.from(map.values())\n}\n", "import type { PermissionMode } from '#core/types/PermissionMode'\n\nimport type * as Protocol from '../protocol'\n\nconst MODE_SET: ReadonlySet<PermissionMode> = new Set([\n 'default',\n 'acceptEdits',\n 'plan',\n 'dontAsk',\n 'bypassPermissions',\n])\n\nexport function isPermissionMode(value: unknown): value is PermissionMode {\n return typeof value === 'string' && MODE_SET.has(value as PermissionMode)\n}\n\nexport function coercePermissionMode(value: unknown): PermissionMode {\n return isPermissionMode(value) ? value : 'default'\n}\n\nexport function getModeState(\n currentModeId: unknown,\n): Protocol.SessionModeState {\n const availableModes: Protocol.SessionMode[] = [\n {\n id: 'default',\n name: 'Default',\n description: 'Normal permissions (prompt when needed)',\n },\n {\n id: 'acceptEdits',\n name: 'Accept Edits',\n description: 'Auto-approve safe file edits',\n },\n { id: 'plan', name: 'Plan', description: 'Read-only planning mode' },\n {\n id: 'dontAsk',\n name: \"Don't Ask\",\n description: 'Auto-deny permission prompts',\n },\n {\n id: 'bypassPermissions',\n name: 'Bypass',\n description: 'Bypass permission prompts (dangerous)',\n },\n ]\n\n const current = coercePermissionMode(currentModeId)\n return { currentModeId: current, availableModes }\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { logError } from '#core/utils/log'\nimport { getKodeBaseDir } from '#core/utils/env'\n\nimport type * as Protocol from '../protocol'\nimport type { SessionState } from './types'\n\nconst ACP_SESSION_STORE_VERSION = 1\n\ntype PersistedAcpSession = {\n version: number\n sessionId: string\n cwd: string\n mcpServers: Protocol.McpServer[]\n messages: SessionState['messages']\n toolPermissionContext: SessionState['toolPermissionContext']\n readFileTimestamps: SessionState['readFileTimestamps']\n responseState: SessionState['responseState']\n currentModeId: Protocol.SessionModeId\n}\n\nfunction getProjectDirSlug(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nfunction sanitizeSessionId(sessionId: string): string {\n return sessionId.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction getAcpSessionDir(cwd: string): string {\n return join(getKodeBaseDir(), getProjectDirSlug(cwd), 'acp-sessions')\n}\n\nfunction getAcpSessionFilePath(cwd: string, sessionId: string): string {\n return join(getAcpSessionDir(cwd), `${sanitizeSessionId(sessionId)}.json`)\n}\n\nexport function persistAcpSessionToDisk(session: SessionState): void {\n try {\n const dir = getAcpSessionDir(session.cwd)\n mkdirSync(dir, { recursive: true })\n\n const payload: PersistedAcpSession = {\n version: ACP_SESSION_STORE_VERSION,\n sessionId: session.sessionId,\n cwd: session.cwd,\n mcpServers: session.mcpServers,\n messages: session.messages,\n toolPermissionContext: session.toolPermissionContext,\n readFileTimestamps: session.readFileTimestamps,\n responseState: session.responseState,\n currentModeId: session.currentModeId,\n }\n\n const path = getAcpSessionFilePath(session.cwd, session.sessionId)\n writeFileSync(path, JSON.stringify(payload, null, 2), 'utf8')\n } catch (e) {\n logError(e)\n }\n}\n\nexport function loadAcpSessionFromDisk(\n cwd: string,\n sessionId: string,\n): PersistedAcpSession | null {\n try {\n const path = getAcpSessionFilePath(cwd, sessionId)\n if (!existsSync(path)) return null\n const raw = readFileSync(path, 'utf8')\n const parsed = JSON.parse(raw) as PersistedAcpSession\n if (!parsed || typeof parsed !== 'object') return null\n if (parsed.sessionId !== sessionId) return null\n if (typeof parsed.cwd !== 'string' || parsed.cwd !== cwd) return null\n if (!Array.isArray(parsed.messages)) return null\n return parsed\n } catch {\n return null\n }\n}\n", "import type { JsonRpcPeer } from '../jsonrpc'\nimport type * as Protocol from '../protocol'\n\nimport type { SessionState } from './types'\n\nexport function sendAvailableCommands(\n peer: JsonRpcPeer,\n session: SessionState,\n): void {\n const availableCommands: Protocol.AvailableCommand[] = session.commands\n .filter(c => !c.isHidden)\n .map(c => ({\n name: c.userFacingName(),\n description: c.description,\n ...(c.argumentHint ? { input: { hint: c.argumentHint } } : {}),\n }))\n\n peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'available_commands_update',\n availableCommands,\n } satisfies Protocol.AvailableCommandsUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendCurrentMode(\n peer: JsonRpcPeer,\n session: SessionState,\n): void {\n peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'current_mode_update',\n currentModeId: session.currentModeId,\n } satisfies Protocol.CurrentModeUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendUserMessageChunk(\n peer: JsonRpcPeer,\n sessionId: string,\n text: string,\n): void {\n if (!text) return\n peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'user_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.UserMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendAgentMessageChunk(\n peer: JsonRpcPeer,\n sessionId: string,\n text: string,\n): void {\n if (!text) return\n peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendAgentThoughtChunk(\n peer: JsonRpcPeer,\n sessionId: string,\n text: string,\n): void {\n if (!text) return\n peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_thought_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentThoughtChunk,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendToolCall(\n peer: JsonRpcPeer,\n sessionId: string,\n toolCall: Protocol.ToolCall,\n): void {\n peer.sendNotification('session/update', {\n sessionId,\n update: toolCall,\n } satisfies Protocol.SessionUpdateNotification)\n}\n\nexport function sendToolCallUpdate(\n peer: JsonRpcPeer,\n sessionId: string,\n update: Omit<Protocol.ToolCallUpdate, 'sessionUpdate'>,\n): void {\n peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n ...update,\n } satisfies Protocol.ToolCallUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n}\n", "import type {\n ContentBlockParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport type { AssistantMessage, UserMessage } from '#core/query'\n\nimport type * as Protocol from '../protocol'\nimport { isRecord } from './guards'\n\nexport function asJsonObject(value: unknown): Protocol.JsonObject | undefined {\n if (!isRecord(value)) return undefined\n try {\n JSON.stringify(value)\n return value as Protocol.JsonObject\n } catch {\n return undefined\n }\n}\n\nexport function toolKindForName(toolName: string): Protocol.ToolKind {\n switch (toolName) {\n case 'Read':\n return 'read'\n case 'Write':\n case 'Edit':\n case 'MultiEdit':\n case 'NotebookEdit':\n return 'edit'\n case 'Grep':\n case 'Glob':\n return 'search'\n case 'Bash':\n case 'TaskOutput':\n case 'KillShell':\n return 'execute'\n case 'SwitchModel':\n return 'switch_mode'\n default:\n return 'other'\n }\n}\n\nexport function titleForToolCall(\n toolName: string,\n input: Record<string, unknown>,\n): string {\n if (toolName === 'Read' && typeof input.file_path === 'string') {\n return `Read ${input.file_path}`\n }\n if (\n (toolName === 'Write' || toolName === 'Edit' || toolName === 'MultiEdit') &&\n typeof input.file_path === 'string'\n ) {\n return `${toolName} ${input.file_path}`\n }\n if (toolName === 'Bash' && typeof input.command === 'string') {\n const cmd = input.command.trim().replace(/\\s+/g, ' ')\n const clipped = cmd.length > 120 ? `${cmd.slice(0, 117)}...` : cmd\n return `Run ${clipped}`\n }\n return toolName\n}\n\nexport function blocksToText(blocks: Protocol.ContentBlock[]): string {\n const parts: string[] = []\n\n for (const block of blocks) {\n switch (block.type) {\n case 'text': {\n const text = typeof block.text === 'string' ? block.text : ''\n if (text) parts.push(text)\n break\n }\n case 'resource': {\n const resource = block.resource\n const uri = resource.uri\n const mimeType = resource.mimeType?.trim() || 'text/plain'\n\n if (typeof resource.text === 'string') {\n parts.push(\n [\n '',\n `@resource ${uri} (${mimeType})`,\n '```',\n resource.text,\n '```',\n ].join('\\n'),\n )\n } else if (typeof resource.blob === 'string') {\n parts.push(\n ['', `@resource ${uri} (${mimeType}) [base64]`, resource.blob].join(\n '\\n',\n ),\n )\n } else if (uri) {\n parts.push(`@resource ${uri} (${mimeType})`)\n }\n break\n }\n case 'resource_link': {\n const uri = block.uri\n const name = block.name\n const title = block.title ?? ''\n const description = block.description ?? ''\n\n parts.push(\n [\n '',\n `@resource_link ${name || uri}`,\n ...(title ? [title] : []),\n ...(description ? [description] : []),\n ...(uri ? [uri] : []),\n ].join('\\n'),\n )\n break\n }\n case 'image':\n case 'audio': {\n break\n }\n default:\n break\n }\n }\n\n return parts.join('\\n').trim()\n}\n\nexport function extractAssistantText(msg: AssistantMessage): string {\n const texts: string[] = []\n for (const block of msg.message.content) {\n if (block.type === 'text') texts.push(block.text)\n if (block.type === 'thinking') texts.push(block.thinking)\n }\n return texts.join('').trim()\n}\n\nexport function extractToolUses(\n msg: AssistantMessage,\n): Array<{ id: string; name: string; input: Record<string, unknown> }> {\n const out: Array<{\n id: string\n name: string\n input: Record<string, unknown>\n }> = []\n\n for (const block of msg.message.content) {\n if (block.type !== 'tool_use') continue\n const input = isRecord(block.input) ? block.input : {}\n if (block.id && block.name)\n out.push({ id: block.id, name: block.name, input })\n }\n\n return out\n}\n\nfunction isTextBlockParam(value: unknown): value is TextBlockParam {\n return (\n isRecord(value) && value.type === 'text' && typeof value.text === 'string'\n )\n}\n\nexport function extractToolResults(\n msg: UserMessage,\n): Array<{ toolUseId: string; isError: boolean; content: string }> {\n const content: string | Array<ContentBlockParam> = msg.message.content\n if (!Array.isArray(content)) return []\n\n const out: Array<{ toolUseId: string; isError: boolean; content: string }> =\n []\n\n for (const block of content) {\n if (block.type !== 'tool_result') continue\n const toolUseId = block.tool_use_id\n const isError = Boolean(block.is_error)\n const raw = block.content\n const text =\n typeof raw === 'string'\n ? raw\n : Array.isArray(raw)\n ? raw\n .filter(isTextBlockParam)\n .map(x => x.text)\n .join('')\n : ''\n if (toolUseId) out.push({ toolUseId, isError, content: text })\n }\n\n return out\n}\n", "import { existsSync, readFileSync, statSync } from 'node:fs'\nimport { isAbsolute, resolve } from 'node:path'\n\nimport type * as Protocol from '../protocol'\nimport { asJsonObject, toolKindForName } from './content'\nimport { isRecord } from './guards'\nimport type { SessionState } from './types'\n\nconst MAX_DIFF_FILE_BYTES = 512_000\nconst MAX_DIFF_TEXT_CHARS = 400_000\n\nfunction readTextFileForDiff(filePath: string): string | null {\n try {\n const stats = statSync(filePath)\n if (!stats.isFile()) return null\n if (stats.size > MAX_DIFF_FILE_BYTES) return null\n return readFileSync(filePath, 'utf8')\n } catch {\n return null\n }\n}\n\nfunction truncateDiffText(text: string): string {\n if (text.length <= MAX_DIFF_TEXT_CHARS) return text\n return `${text.slice(0, MAX_DIFF_TEXT_CHARS)}\\n\\n[truncated ${text.length - MAX_DIFF_TEXT_CHARS} chars]`\n}\n\nexport function captureFileSnapshotForTool(params: {\n session: SessionState\n toolUseId: string\n toolName: string\n input: unknown\n}): void {\n const { session, toolUseId, toolName, input } = params\n\n if (toolName !== 'Write' && toolName !== 'MultiEdit') return\n\n const filePath =\n isRecord(input) && typeof input.file_path === 'string'\n ? input.file_path\n : ''\n if (!filePath) return\n\n const absPath = isAbsolute(filePath)\n ? filePath\n : resolve(session.cwd, filePath)\n\n const oldContent = existsSync(absPath) ? readTextFileForDiff(absPath) : ''\n if (oldContent === null) return\n\n const existing = session.toolCalls.get(toolUseId)\n if (existing) {\n existing.fileSnapshot = { path: absPath, content: oldContent }\n session.toolCalls.set(toolUseId, existing)\n return\n }\n\n session.toolCalls.set(toolUseId, {\n title: toolName,\n kind: toolKindForName(toolName),\n status: 'pending',\n rawInput: asJsonObject(input),\n fileSnapshot: { path: absPath, content: oldContent },\n })\n}\n\nfunction getJsonStringMaybe(\n obj: Protocol.JsonObject | undefined,\n key: string,\n): string | undefined {\n const value = obj?.[key]\n return typeof value === 'string' ? value : undefined\n}\n\nexport function buildDiffContentForToolResult(params: {\n session: SessionState\n toolUseId: string\n rawOutput: Protocol.JsonObject | undefined\n}): Protocol.ToolCallContent | null {\n const { session, toolUseId, rawOutput } = params\n\n const existing = session.toolCalls.get(toolUseId)\n if (!existing || existing.kind !== 'edit') return null\n\n const inputFilePath =\n typeof existing.rawInput?.file_path === 'string'\n ? existing.rawInput.file_path\n : (getJsonStringMaybe(rawOutput, 'filePath') ?? '')\n\n if (!inputFilePath) return null\n\n const absPath = isAbsolute(inputFilePath)\n ? inputFilePath\n : resolve(session.cwd, inputFilePath)\n\n const oldText =\n getJsonStringMaybe(rawOutput, 'originalFile') ??\n (existing.fileSnapshot && existing.fileSnapshot.path === absPath\n ? existing.fileSnapshot.content\n : undefined)\n if (oldText === undefined) return null\n\n const newTextFromDisk = readTextFileForDiff(absPath)\n const newTextFromOutput = getJsonStringMaybe(rawOutput, 'content')\n const newText = newTextFromDisk ?? newTextFromOutput\n if (newText === null || newText === undefined) return null\n\n return {\n type: 'diff',\n path: absPath,\n oldText: truncateDiffText(oldText),\n newText: truncateDiffText(newText),\n }\n}\n", "import type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport type { Message } from '#core/query'\n\nimport type { JsonRpcPeer } from '../jsonrpc'\nimport type * as Protocol from '../protocol'\n\nimport {\n asJsonObject,\n extractAssistantText,\n extractToolResults,\n toolKindForName,\n titleForToolCall,\n} from './content'\nimport { isRecord } from './guards'\nimport {\n sendAgentMessageChunk,\n sendAgentThoughtChunk,\n sendToolCall,\n sendToolCallUpdate,\n sendUserMessageChunk,\n} from './notifications'\nimport type { SessionState } from './types'\nimport { buildDiffContentForToolResult } from './toolCalls'\n\nfunction toInputRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {}\n}\n\nfunction emitAssistantContentBlocks(\n peer: JsonRpcPeer,\n session: SessionState,\n blocks: ContentBlock[],\n): void {\n for (const block of blocks) {\n switch (block.type) {\n case 'text':\n sendAgentMessageChunk(peer, session.sessionId, block.text)\n break\n case 'thinking':\n sendAgentThoughtChunk(peer, session.sessionId, block.thinking)\n break\n case 'tool_use': {\n const toolUseId = typeof block.id === 'string' ? block.id : ''\n const toolName = typeof block.name === 'string' ? block.name : ''\n if (!toolUseId || !toolName) break\n\n if (!session.toolCalls.has(toolUseId)) {\n const input = toInputRecord(block.input)\n const kind = toolKindForName(toolName)\n const title = titleForToolCall(toolName, input)\n\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n\n sendToolCall(peer, session.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall)\n }\n break\n }\n default:\n break\n }\n }\n}\n\nexport async function handleKodeMessage(args: {\n peer: JsonRpcPeer\n session: SessionState\n message: Message\n}): Promise<void> {\n const { peer, session, message: m } = args\n if (!m || typeof m !== 'object') return\n\n if (m.type === 'assistant') {\n session.messages.push(m)\n emitAssistantContentBlocks(peer, session, m.message.content)\n return\n }\n\n if (m.type === 'progress') {\n const toolCallId = m.toolUseID\n const existing = session.toolCalls.get(toolCallId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(toolCallId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId,\n status: 'in_progress',\n })\n }\n\n const text = extractAssistantText(m.content)\n if (text) {\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId,\n content: [\n {\n type: 'content',\n content: { type: 'text', text },\n },\n ],\n })\n }\n return\n }\n\n if (m.type === 'user') {\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) {\n session.messages.push(m)\n return\n }\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId: tr.toolUseId,\n status: 'in_progress',\n })\n }\n\n const status: Protocol.ToolCallStatus = tr.isError\n ? 'failed'\n : 'completed'\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n\n const rawOutput = asJsonObject(m.toolUseResult?.data)\n\n const content: Protocol.ToolCallContent[] = []\n const diffContent =\n status === 'completed'\n ? buildDiffContentForToolResult({\n session,\n toolUseId: tr.toolUseId,\n rawOutput,\n })\n : null\n if (diffContent) content.push(diffContent)\n if (tr.content) {\n content.push({\n type: 'content',\n content: { type: 'text', text: tr.content },\n })\n }\n\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(content.length > 0 ? { content } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n }\n\n session.messages.push(m)\n }\n}\n\nexport function replayConversation(\n peer: JsonRpcPeer,\n session: SessionState,\n): void {\n session.toolCalls.clear()\n\n for (const m of session.messages) {\n if (!m || typeof m !== 'object') continue\n\n if (m.type === 'assistant') {\n emitAssistantContentBlocks(peer, session, m.message.content)\n continue\n }\n\n if (m.type === 'user') {\n if (typeof m.message.content === 'string' && m.message.content.trim()) {\n sendUserMessageChunk(peer, session.sessionId, m.message.content)\n }\n\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) continue\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing) {\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status: 'pending',\n })\n sendToolCall(peer, session.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: tr.toolUseId,\n title,\n kind,\n status: 'pending',\n } satisfies Protocol.ToolCall)\n }\n\n const status: Protocol.ToolCallStatus = tr.isError\n ? 'failed'\n : 'completed'\n const contentBlocks: Protocol.ToolCallContent[] = []\n if (tr.content) {\n contentBlocks.push({\n type: 'content',\n content: { type: 'text', text: tr.content },\n })\n }\n\n const rawOutput = asJsonObject(m.toolUseResult?.data)\n\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(contentBlocks.length > 0 ? { content: contentBlocks } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n }\n }\n }\n}\n", "import { isAbsolute } from 'node:path'\n\nimport {\n buildSystemPromptForSession,\n getSessionContext,\n runTurn,\n} from '#core/engine'\nimport type { Message } from '#core/query'\nimport { createAssistantMessage, createUserMessage } from '#core/utils/messages'\nimport { grantReadPermissionForOriginalDir } from '#core/utils/permissions/filesystem'\nimport { setCwd, setOriginalCwd } from '#core/utils/state'\nimport { logError } from '#core/utils/log'\n\nimport { JsonRpcError, type JsonRpcPeer } from '../../jsonrpc'\nimport type * as Protocol from '../../protocol'\nimport { blocksToText } from '../content'\nimport { isRecord } from '../guards'\nimport { handleKodeMessage } from '../kodeMessages'\nimport { sendAgentMessageChunk } from '../notifications'\nimport { createAcpCanUseTool } from '../permissions'\nimport { persistAcpSessionToDisk } from '../sessionStore'\nimport type { SessionState } from '../types'\n\nexport async function handleSessionPrompt(args: {\n peer: JsonRpcPeer\n sessions: Map<string, SessionState>\n params: unknown\n}): Promise<Protocol.PromptResponse> {\n const p = isRecord(args.params) ? args.params : {}\n\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const blocks: Protocol.ContentBlock[] = Array.isArray(p.prompt)\n ? (p.prompt as Protocol.ContentBlock[])\n : Array.isArray(p.content)\n ? (p.content as Protocol.ContentBlock[])\n : []\n\n const session = args.sessions.get(sessionId)\n if (!session)\n throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n if (session.activeAbortController) {\n throw new JsonRpcError(\n -32000,\n `Session already has an active prompt: ${sessionId}`,\n )\n }\n\n if (!session.cwd || !isAbsolute(session.cwd)) {\n throw new JsonRpcError(-32602, `Invalid session cwd: ${session.cwd}`)\n }\n\n setOriginalCwd(session.cwd)\n await setCwd(session.cwd)\n grantReadPermissionForOriginalDir()\n\n const promptText = blocksToText(blocks)\n const userMsg = createUserMessage(promptText)\n\n const baseMessages: Message[] = [...session.messages, userMsg]\n session.messages.push(userMsg)\n\n if (process.env.KODE_ACP_ECHO === '1') {\n await handleKodeMessage({\n peer: args.peer,\n session,\n message: createAssistantMessage(promptText),\n })\n persistAcpSessionToDisk(session)\n return { stopReason: 'end_turn' }\n }\n\n const abortController = new AbortController()\n session.activeAbortController = abortController\n\n const canUseTool = createAcpCanUseTool({ peer: args.peer, session })\n\n const options = {\n commands: session.commands,\n tools: session.tools,\n verbose: false,\n safeMode: false,\n forkNumber: 0,\n messageLogName: session.sessionId,\n maxThinkingTokens: 0,\n persistSession: false,\n toolPermissionContext: session.toolPermissionContext,\n mcpClients: session.mcpClients,\n shouldAvoidPermissionPrompts: false,\n }\n\n let stopReason: Protocol.StopReason = 'end_turn'\n try {\n for await (const m of runTurn({\n messages: baseMessages,\n systemPrompt: session.systemPrompt,\n context: session.context,\n canUseTool,\n toolUseContext: {\n options,\n abortController,\n messageId: undefined,\n readFileTimestamps: session.readFileTimestamps,\n setToolJSX: () => {},\n agentId: 'main',\n responseState: session.responseState,\n },\n })) {\n if (abortController.signal.aborted) stopReason = 'cancelled'\n await handleKodeMessage({ peer: args.peer, session, message: m })\n }\n if (abortController.signal.aborted) stopReason = 'cancelled'\n } catch (err) {\n if (abortController.signal.aborted) {\n stopReason = 'cancelled'\n } else {\n logError(err)\n const msg = err instanceof Error ? err.message : String(err)\n sendAgentMessageChunk(args.peer, session.sessionId, msg)\n stopReason = 'end_turn'\n }\n } finally {\n session.activeAbortController = null\n persistAcpSessionToDisk(session)\n }\n\n return { stopReason }\n}\n", "import { nanoid } from 'nanoid'\n\nimport { hasPermissionsToUseTool } from '#core/permissions'\nimport type { CanUseToolFn } from '#core/permissions/canUseTool'\nimport {\n applyToolPermissionContextUpdates,\n type ToolPermissionContextUpdate,\n} from '#core/types/toolPermissionContext'\nimport { logError } from '#core/utils/log'\nimport { persistToolPermissionUpdateToDisk } from '#core/utils/permissions/toolPermissionSettings'\n\nimport type { JsonRpcPeer } from '../jsonrpc'\nimport type * as Protocol from '../protocol'\n\nimport { asJsonObject, titleForToolCall, toolKindForName } from './content'\nimport { sendToolCall, sendToolCallUpdate } from './notifications'\nimport { captureFileSnapshotForTool } from './toolCalls'\nimport type { SessionState } from './types'\n\nfunction getPermissionTimeoutMs(): number {\n const raw = process.env.KODE_ACP_PERMISSION_TIMEOUT_MS\n const parsed = raw ? Number(raw) : Number.NaN\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 30_000\n}\n\nfunction toPermissionOptions(denied: {\n suggestions?: ToolPermissionContextUpdate[]\n}): Protocol.PermissionOption[] {\n const options: Protocol.PermissionOption[] = [\n { optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' },\n { optionId: 'reject_once', name: 'Reject', kind: 'reject_once' },\n ]\n\n if ((denied.suggestions ?? []).length > 0) {\n options.splice(1, 0, {\n optionId: 'allow_always',\n name: 'Allow always (remember)',\n kind: 'allow_always',\n })\n }\n\n return options\n}\n\nexport function createAcpCanUseTool(args: {\n peer: JsonRpcPeer\n session: SessionState\n}): CanUseToolFn {\n const timeoutMs = getPermissionTimeoutMs()\n const { peer, session } = args\n\n return async (tool, input, toolUseContext, assistantMessage) => {\n const toolUseId =\n typeof toolUseContext.toolUseId === 'string' && toolUseContext.toolUseId\n ? toolUseContext.toolUseId\n : `call_${nanoid()}`\n\n const base = await hasPermissionsToUseTool(\n tool,\n input,\n toolUseContext,\n assistantMessage,\n )\n\n if (base.result === true) {\n captureFileSnapshotForTool({\n session,\n toolUseId,\n toolName: tool.name,\n input,\n })\n return base\n }\n\n const denied = base\n if (denied.shouldPromptUser === false) {\n return { result: false as const, message: denied.message }\n }\n\n const title = titleForToolCall(tool.name, input)\n const kind = toolKindForName(tool.name)\n\n if (!session.toolCalls.has(toolUseId)) {\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n\n sendToolCall(peer, session.sessionId, {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall)\n }\n\n const options = toPermissionOptions(denied)\n\n try {\n const response =\n await peer.sendRequest<Protocol.RequestPermissionResponse>({\n method: 'session/request_permission',\n params: {\n sessionId: session.sessionId,\n toolCall: {\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n content: [\n {\n type: 'content',\n content: { type: 'text', text: denied.message },\n },\n ],\n rawInput: asJsonObject(input),\n },\n options,\n } satisfies Protocol.RequestPermissionParams,\n signal: toolUseContext.abortController.signal,\n timeoutMs,\n })\n\n const outcome = response?.outcome\n if (!outcome || outcome.outcome === 'cancelled') {\n toolUseContext.abortController.abort()\n return {\n result: false as const,\n message: denied.message,\n shouldPromptUser: false,\n }\n }\n\n if (outcome.outcome === 'selected' && outcome.optionId === 'allow_once') {\n captureFileSnapshotForTool({\n session,\n toolUseId,\n toolName: tool.name,\n input,\n })\n return { result: true as const }\n }\n\n if (\n outcome.outcome === 'selected' &&\n outcome.optionId === 'allow_always'\n ) {\n const suggestions = denied.suggestions ?? []\n if (suggestions.length > 0) {\n const next = applyToolPermissionContextUpdates(\n session.toolPermissionContext,\n suggestions,\n )\n session.toolPermissionContext = next\n if (toolUseContext.options)\n toolUseContext.options.toolPermissionContext = next\n\n for (const update of suggestions) {\n try {\n persistToolPermissionUpdateToDisk({\n update,\n projectDir: session.cwd,\n })\n } catch (e) {\n logError(e)\n }\n }\n }\n\n captureFileSnapshotForTool({\n session,\n toolUseId,\n toolName: tool.name,\n input,\n })\n return { result: true as const }\n }\n\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId: toolUseId,\n status: 'failed',\n })\n return { result: false as const, message: denied.message }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e)\n sendToolCallUpdate(peer, session.sessionId, {\n toolCallId: toolUseId,\n status: 'failed',\n })\n return {\n result: false as const,\n message: `Permission prompt failed: ${msg}`,\n shouldPromptUser: false,\n }\n }\n }\n}\n", "import type { JsonRpcPeer } from './jsonrpc'\nimport type * as Protocol from './protocol'\n\nimport {\n handleAuthenticate,\n handleInitialize,\n} from './agent/handlers/initialize'\nimport {\n handleSessionCancel,\n handleSessionLoad,\n handleSessionNew,\n handleSessionSetMode,\n} from './agent/handlers/sessions'\nimport { handleSessionPrompt } from './agent/handlers/prompt'\nimport type { SessionState } from './agent/types'\n\nexport class KodeAcpAgent {\n private clientCapabilities: Protocol.ClientCapabilities = {}\n private readonly sessions = new Map<string, SessionState>()\n\n constructor(private readonly peer: JsonRpcPeer) {\n this.registerMethods()\n }\n\n private registerMethods(): void {\n this.peer.registerMethod('initialize', this.onInitialize.bind(this))\n this.peer.registerMethod('authenticate', this.onAuthenticate.bind(this))\n this.peer.registerMethod('session/new', this.onSessionNew.bind(this))\n this.peer.registerMethod('session/load', this.onSessionLoad.bind(this))\n this.peer.registerMethod('session/prompt', this.onSessionPrompt.bind(this))\n this.peer.registerMethod(\n 'session/set_mode',\n this.onSessionSetMode.bind(this),\n )\n this.peer.registerMethod('session/cancel', this.onSessionCancel.bind(this))\n }\n\n private onInitialize(params: unknown): Protocol.InitializeResponse {\n return handleInitialize({\n params,\n setClientCapabilities: caps => {\n this.clientCapabilities = caps\n },\n })\n }\n\n private onAuthenticate(): Protocol.AuthenticateResponse {\n return handleAuthenticate()\n }\n\n private onSessionNew(params: unknown): Promise<Protocol.NewSessionResponse> {\n return handleSessionNew({\n peer: this.peer,\n sessions: this.sessions,\n params,\n })\n }\n\n private onSessionLoad(\n params: unknown,\n ): Promise<Protocol.LoadSessionResponse> {\n return handleSessionLoad({\n peer: this.peer,\n sessions: this.sessions,\n params,\n })\n }\n\n private onSessionSetMode(\n params: unknown,\n ): Promise<Protocol.SetSessionModeResponse> {\n return handleSessionSetMode({\n peer: this.peer,\n sessions: this.sessions,\n params,\n })\n }\n\n private onSessionCancel(params: unknown): Promise<void> {\n return handleSessionCancel({ sessions: this.sessions, params })\n }\n\n private onSessionPrompt(params: unknown): Promise<Protocol.PromptResponse> {\n return handleSessionPrompt({\n peer: this.peer,\n sessions: this.sessions,\n params,\n })\n }\n}\n", "import { initDebugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\nimport { enableConfigs } from '#config'\n\nimport {\n JsonRpcPeer,\n KodeAcpAgent,\n StdioTransport,\n installStdoutGuard,\n} from './index'\n\nexport function runAcpStdio(): void {\n // ACP requires stdout to be protocol-only; guard early.\n const { writeAcpLine } = installStdoutGuard()\n\n // Initialize logging/config after the guard is in place.\n initDebugLogger()\n try {\n enableConfigs()\n } catch (error) {\n logError(error)\n }\n\n const peer = new JsonRpcPeer()\n new KodeAcpAgent(peer)\n\n const transport = new StdioTransport(peer, { writeLine: writeAcpLine })\n transport.start()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["resolve", "format", "isAbsolute", "join", "join", "existsSync", "readFileSync", "readFileSync", "existsSync", "isAbsolute", "isAbsolute", "nanoid", "nanoid", "isAbsolute"]
|
|
7
|
+
}
|