@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/mcp/client/config.ts", "../../packages/core/src/utils/json.ts", "../../packages/core/src/mcp/client/utils.ts", "../../packages/core/src/mcp/client/clients.ts", "../../packages/core/src/mcp/client/connection.ts", "../../packages/core/src/mcp/client/settings.ts", "../../packages/core/src/mcp/client/tools.ts", "../../packages/core/src/mcp/client/timeouts.ts", "../../packages/core/src/mcp/client/request.ts", "../../packages/core/src/mcp/client/commands.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, readFileSync, writeFileSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\n\nimport {\n addMcprcServerForTesting,\n getCurrentProjectConfig,\n getGlobalConfig,\n getProjectMcpServerDefinitions,\n type McpServerConfig,\n removeMcprcServerForTesting,\n saveCurrentProjectConfig,\n saveGlobalConfig,\n} from '#core/utils/config'\nimport { safeParseJSON } from '#core/utils/json'\nimport { getSessionPlugins } from '#core/utils/sessionPlugins'\nimport { getCwd } from '#core/utils/state'\n\nimport type { McpName } from './settings'\nimport { expandTemplateDeep, isRecord, parseJsonOrJsonc } from './utils'\n\nconst VALID_SCOPES = ['project', 'global', 'mcprc', 'mcpjson'] as const\ntype ConfigScope = (typeof VALID_SCOPES)[number]\nconst EXTERNAL_SCOPES = [\n 'project',\n 'global',\n 'mcprc',\n 'mcpjson',\n] as ConfigScope[]\n\nexport type ScopedMcpServerConfig = McpServerConfig & {\n scope: ConfigScope\n}\n\nexport function parseEnvVars(\n rawEnvArgs: string[] | undefined,\n): Record<string, string> {\n const parsedEnv: Record<string, string> = {}\n\n if (!rawEnvArgs) return parsedEnv\n\n for (const envStr of rawEnvArgs) {\n const [key, ...valueParts] = envStr.split('=')\n if (!key || valueParts.length === 0) {\n throw new Error(\n `Invalid environment variable format: ${envStr}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`,\n )\n }\n parsedEnv[key] = valueParts.join('=')\n }\n\n return parsedEnv\n}\n\nexport function ensureConfigScope(scope?: string): ConfigScope {\n if (!scope) return 'project'\n\n const scopesToCheck =\n process.env.USER_TYPE === 'external' ? EXTERNAL_SCOPES : VALID_SCOPES\n\n if (!scopesToCheck.includes(scope as ConfigScope)) {\n throw new Error(\n `Invalid scope: ${scope}. Must be one of: ${scopesToCheck.join(', ')}`,\n )\n }\n\n return scope as ConfigScope\n}\n\nexport function listPluginMCPServers(): Record<string, McpServerConfig> {\n const plugins = getSessionPlugins()\n if (plugins.length === 0) return {}\n\n const out: Record<string, McpServerConfig> = {}\n\n for (const plugin of plugins) {\n const pluginRoot = plugin.rootDir\n const pluginName = plugin.name\n\n const configs: Array<Record<string, McpServerConfig>> = []\n\n for (const configPath of plugin.mcpConfigFiles ?? []) {\n try {\n const raw = readFileSync(configPath, 'utf8')\n const parsed = parseJsonOrJsonc(raw)\n if (!isRecord(parsed)) continue\n\n const maybeNested = parsed['mcpServers']\n const rawServers = isRecord(maybeNested) ? maybeNested : parsed\n if (!isRecord(rawServers)) continue\n\n const servers: Record<string, McpServerConfig> = {}\n for (const [name, cfg] of Object.entries(rawServers)) {\n if (!isRecord(cfg)) continue\n servers[name] = expandTemplateDeep(cfg, pluginRoot) as McpServerConfig\n }\n configs.push(servers)\n } catch {\n continue\n }\n }\n\n if (isRecord(plugin.manifest)) {\n const manifestRaw = plugin.manifest['mcpServers']\n if (isRecord(manifestRaw)) {\n const maybeNested = manifestRaw['mcpServers']\n const rawServers = isRecord(maybeNested) ? maybeNested : manifestRaw\n if (isRecord(rawServers)) {\n const servers: Record<string, McpServerConfig> = {}\n for (const [name, cfg] of Object.entries(rawServers)) {\n if (!isRecord(cfg)) continue\n servers[name] = expandTemplateDeep(\n cfg,\n pluginRoot,\n ) as McpServerConfig\n }\n configs.push(servers)\n }\n }\n }\n\n const merged: Record<string, McpServerConfig> = Object.assign(\n {},\n ...configs,\n )\n\n for (const [serverName, cfg] of Object.entries(merged)) {\n const fullName = `plugin_${pluginName}_${serverName}`\n out[fullName] = cfg\n }\n }\n\n return out\n}\n\nexport function getMcprcServerStatus(\n serverName: string,\n): 'approved' | 'rejected' | 'pending' {\n const config = getCurrentProjectConfig()\n if (config.approvedMcprcServers?.includes(serverName)) {\n return 'approved'\n }\n if (config.rejectedMcprcServers?.includes(serverName)) {\n return 'rejected'\n }\n return 'pending'\n}\n\nexport function addMcpServer(\n name: McpName,\n server: McpServerConfig,\n scope: ConfigScope = 'project',\n): void {\n if (scope === 'mcprc') {\n if (process.env.NODE_ENV === 'test') {\n addMcprcServerForTesting(name, server)\n return\n }\n\n const mcprcPath = join(getCwd(), '.mcprc')\n let mcprcConfig: Record<string, McpServerConfig> = {}\n\n if (existsSync(mcprcPath)) {\n try {\n const mcprcContent = readFileSync(mcprcPath, 'utf-8')\n const existingConfig = safeParseJSON(mcprcContent)\n if (isRecord(existingConfig)) {\n mcprcConfig = existingConfig as Record<string, McpServerConfig>\n }\n } catch {\n // ignore\n }\n }\n\n mcprcConfig[name] = server\n\n try {\n writeFileSync(mcprcPath, JSON.stringify(mcprcConfig, null, 2), 'utf-8')\n } catch (error) {\n throw new Error(`Failed to write to .mcprc: ${error}`)\n }\n\n return\n }\n\n if (scope === 'mcpjson') {\n const mcpJsonPath = join(getCwd(), '.mcp.json')\n let config: Record<string, unknown> = { mcpServers: {} }\n\n if (existsSync(mcpJsonPath)) {\n try {\n const content = readFileSync(mcpJsonPath, 'utf-8')\n const parsed = safeParseJSON(content)\n if (isRecord(parsed)) config = parsed\n } catch {\n // ignore\n }\n }\n\n const rawServers = config['mcpServers']\n const servers: Record<string, McpServerConfig> = isRecord(rawServers)\n ? (rawServers as Record<string, McpServerConfig>)\n : {}\n\n servers[name] = server\n config['mcpServers'] = servers\n\n try {\n writeFileSync(mcpJsonPath, JSON.stringify(config, null, 2), 'utf-8')\n } catch (error) {\n throw new Error(`Failed to write to .mcp.json: ${error}`)\n }\n\n return\n }\n\n if (scope === 'global') {\n const config = getGlobalConfig()\n if (!config.mcpServers) config.mcpServers = {}\n config.mcpServers[name] = server\n saveGlobalConfig(config)\n return\n }\n\n const config = getCurrentProjectConfig()\n if (!config.mcpServers) config.mcpServers = {}\n config.mcpServers[name] = server\n saveCurrentProjectConfig(config)\n}\n\nexport function removeMcpServer(\n name: McpName,\n scope: ConfigScope = 'project',\n): void {\n if (scope === 'mcprc') {\n if (process.env.NODE_ENV === 'test') {\n removeMcprcServerForTesting(name)\n return\n }\n\n const mcprcPath = join(getCwd(), '.mcprc')\n if (!existsSync(mcprcPath)) {\n throw new Error('No .mcprc file found in this directory')\n }\n\n const mcprcContent = readFileSync(mcprcPath, 'utf-8')\n const parsed = safeParseJSON(mcprcContent)\n if (!isRecord(parsed) || !(name in parsed)) {\n throw new Error(`No MCP server found with name: ${name} in .mcprc`)\n }\n\n delete parsed[name]\n writeFileSync(mcprcPath, JSON.stringify(parsed, null, 2), 'utf-8')\n return\n }\n\n if (scope === 'mcpjson') {\n const mcpJsonPath = join(getCwd(), '.mcp.json')\n if (!existsSync(mcpJsonPath)) {\n throw new Error('No .mcp.json file found in this directory')\n }\n\n const content = readFileSync(mcpJsonPath, 'utf-8')\n const parsed = safeParseJSON(content)\n if (!isRecord(parsed)) {\n throw new Error('Invalid .mcp.json format')\n }\n\n const rawServers = parsed['mcpServers']\n if (!isRecord(rawServers) || !(name in rawServers)) {\n throw new Error(`No MCP server found with name: ${name} in .mcp.json`)\n }\n\n delete rawServers[name]\n parsed['mcpServers'] = rawServers\n writeFileSync(mcpJsonPath, JSON.stringify(parsed, null, 2), 'utf-8')\n return\n }\n\n if (scope === 'global') {\n const config = getGlobalConfig()\n if (!config.mcpServers?.[name]) {\n throw new Error(`No MCP server found with name: ${name} in global config`)\n }\n delete config.mcpServers[name]\n saveGlobalConfig(config)\n return\n }\n\n const config = getCurrentProjectConfig()\n if (!config.mcpServers?.[name]) {\n throw new Error(`No MCP server found with name: ${name} in project config`)\n }\n delete config.mcpServers[name]\n saveCurrentProjectConfig(config)\n}\n\nexport function listMCPServers(): Record<string, McpServerConfig> {\n const pluginServers = listPluginMCPServers()\n const globalConfig = getGlobalConfig()\n const projectFileConfig = getProjectMcpServerDefinitions().servers\n const projectConfig = getCurrentProjectConfig()\n return {\n ...(pluginServers ?? {}),\n ...(globalConfig.mcpServers ?? {}),\n ...(projectFileConfig ?? {}),\n ...(projectConfig.mcpServers ?? {}),\n }\n}\n\nexport function getMcpServer(name: McpName): ScopedMcpServerConfig | undefined {\n const projectConfig = getCurrentProjectConfig()\n const projectFileDefinitions = getProjectMcpServerDefinitions()\n const projectFileConfig = projectFileDefinitions.servers\n const globalConfig = getGlobalConfig()\n\n if (projectConfig.mcpServers?.[name]) {\n return { ...projectConfig.mcpServers[name], scope: 'project' }\n }\n\n if (projectFileConfig?.[name]) {\n const source = projectFileDefinitions.sources[name]\n const scope: ConfigScope = source === '.mcp.json' ? 'mcpjson' : 'mcprc'\n return { ...projectFileConfig[name], scope }\n }\n\n if (globalConfig.mcpServers?.[name]) {\n return { ...globalConfig.mcpServers[name], scope: 'global' }\n }\n\n return undefined\n}\n\nexport function parseMcpServersFromCliConfigEntries(options: {\n entries: string[]\n projectDir: string\n}): Record<string, McpServerConfig> {\n const out: Record<string, McpServerConfig> = {}\n\n for (const rawEntry of options.entries) {\n const entry = String(rawEntry ?? '').trim()\n if (!entry) continue\n\n const resolvedPath = resolve(options.projectDir, entry)\n const payload = existsSync(resolvedPath)\n ? readFileSync(resolvedPath, 'utf8')\n : existsSync(entry)\n ? readFileSync(entry, 'utf8')\n : entry\n\n const parsed = parseJsonOrJsonc(payload)\n if (!isRecord(parsed)) continue\n\n const maybeNested = parsed['mcpServers']\n const rawServers = isRecord(maybeNested) ? maybeNested : parsed\n if (!isRecord(rawServers)) continue\n\n for (const [name, cfg] of Object.entries(rawServers)) {\n if (!isRecord(cfg)) continue\n out[name] = cfg as McpServerConfig\n }\n }\n\n return out\n}\n", "import { logError } from './log'\n\nexport function safeParseJSON(json: string | null | undefined): unknown {\n if (!json) {\n return null\n }\n try {\n return JSON.parse(json)\n } catch (e) {\n logError(e)\n return null\n }\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction stripJsonComments(input: string): string {\n let out = ''\n let inString = false\n let escaped = false\n let inLineComment = false\n let inBlockComment = false\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!\n const next = i + 1 < input.length ? input[i + 1]! : ''\n\n if (inLineComment) {\n if (ch === '\\n') {\n inLineComment = false\n out += ch\n }\n continue\n }\n\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n inBlockComment = false\n i++\n }\n continue\n }\n\n if (inString) {\n out += ch\n if (escaped) {\n escaped = false\n continue\n }\n if (ch === '\\\\') {\n escaped = true\n continue\n }\n if (ch === '\"') inString = false\n continue\n }\n\n if (ch === '\"') {\n inString = true\n out += ch\n continue\n }\n\n if (ch === '/' && next === '/') {\n inLineComment = true\n i++\n continue\n }\n\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i++\n continue\n }\n\n out += ch\n }\n\n return out\n}\n\nexport function parseJsonOrJsonc(text: string): unknown {\n const raw = String(text ?? '')\n if (!raw.trim()) return null\n try {\n return JSON.parse(raw)\n } catch {\n try {\n return JSON.parse(stripJsonComments(raw))\n } catch {\n return null\n }\n }\n}\n\nfunction expandTemplateString(value: string, pluginRoot: string): string {\n return value.replace(/\\$\\{([^}]+)\\}/g, (match, key) => {\n const k = String(key ?? '').trim()\n if (!k) return match\n if (k === 'CLAUDE_PLUGIN_ROOT') return pluginRoot\n const env = process.env[k]\n return env !== undefined ? env : match\n })\n}\n\nexport function expandTemplateDeep(\n value: unknown,\n pluginRoot: string,\n): unknown {\n if (typeof value === 'string') return expandTemplateString(value, pluginRoot)\n if (Array.isArray(value))\n return value.map(v => expandTemplateDeep(v, pluginRoot))\n if (isRecord(value)) {\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n out[k] = expandTemplateDeep(v, pluginRoot)\n }\n return out\n }\n return value\n}\n", "import { memoize, pickBy } from 'lodash-es'\nimport type { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js'\n\nimport type { McpServerConfig } from '#core/utils/config'\nimport {\n getCurrentProjectConfig,\n getGlobalConfig,\n getProjectMcpServerDefinitions,\n} from '#core/utils/config'\nimport { getCwd } from '#core/utils/state'\nimport { logMCPError } from '#core/utils/log'\n\nimport {\n getMcprcServerStatus,\n listPluginMCPServers,\n parseMcpServersFromCliConfigEntries,\n} from './config'\nimport { connectToServer } from './connection'\nimport { getMcpServerConnectionBatchSize } from './settings'\nimport type { WrappedClient } from './types'\n\nexport const getClients = memoize(async (): Promise<WrappedClient[]> => {\n if (process.env.CI && process.env.NODE_ENV !== 'test') {\n return []\n }\n\n const pluginServers = listPluginMCPServers()\n const globalServers = getGlobalConfig().mcpServers ?? {}\n const projectFileServers = getProjectMcpServerDefinitions().servers\n const projectServers = getCurrentProjectConfig().mcpServers ?? {}\n\n const approvedProjectFileServers = pickBy(\n projectFileServers,\n (_, name) => getMcprcServerStatus(name) === 'approved',\n )\n\n const allServers: Record<string, McpServerConfig> = {\n ...pluginServers,\n ...globalServers,\n ...approvedProjectFileServers,\n ...projectServers,\n }\n\n const batchSize = getMcpServerConnectionBatchSize()\n const entries = Object.entries(allServers)\n const results: WrappedClient[] = []\n\n for (let i = 0; i < entries.length; i += batchSize) {\n const batch = entries.slice(i, i + batchSize)\n const batchResults = await Promise.all(\n batch.map(async ([name, serverRef]) => {\n try {\n const client = await connectToServer(name, serverRef)\n let capabilities: ServerCapabilities | null = null\n try {\n capabilities = client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n return { name, client, capabilities, type: 'connected' as const }\n } catch (error) {\n logMCPError(\n name,\n `Connection failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n return { name, type: 'failed' as const }\n }\n }),\n )\n results.push(...batchResults)\n }\n\n return results\n})\n\nexport async function getClientsForCliMcpConfig(options: {\n mcpConfig?: string[]\n strictMcpConfig?: boolean\n projectDir?: string\n}): Promise<WrappedClient[]> {\n const projectDir = options.projectDir ?? getCwd()\n const entries =\n Array.isArray(options.mcpConfig) && options.mcpConfig.length > 0\n ? options.mcpConfig\n : []\n const strict = options.strictMcpConfig === true\n\n if (entries.length === 0 && !strict) {\n return getClients()\n }\n\n const cliServers = parseMcpServersFromCliConfigEntries({\n entries,\n projectDir,\n })\n\n const pluginServers = strict ? {} : listPluginMCPServers()\n const globalServers = strict ? {} : (getGlobalConfig().mcpServers ?? {})\n const projectFileServers = strict\n ? {}\n : getProjectMcpServerDefinitions().servers\n const projectServers = strict\n ? {}\n : (getCurrentProjectConfig().mcpServers ?? {})\n\n const approvedProjectFileServers = strict\n ? {}\n : pickBy(\n projectFileServers,\n (_, name) => getMcprcServerStatus(name) === 'approved',\n )\n\n const allServers: Record<string, McpServerConfig> = {\n ...(pluginServers ?? {}),\n ...(globalServers ?? {}),\n ...(approvedProjectFileServers ?? {}),\n ...(projectServers ?? {}),\n ...(cliServers ?? {}),\n }\n\n const batchSize = getMcpServerConnectionBatchSize()\n const entriesToConnect = Object.entries(allServers)\n const results: WrappedClient[] = []\n\n for (let i = 0; i < entriesToConnect.length; i += batchSize) {\n const batch = entriesToConnect.slice(i, i + batchSize)\n const batchResults = await Promise.all(\n batch.map(async ([name, serverRef]) => {\n try {\n const client = await connectToServer(name, serverRef)\n let capabilities: ServerCapabilities | null = null\n try {\n capabilities = client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n return { name, client, capabilities, type: 'connected' as const }\n } catch (error) {\n logMCPError(\n name,\n `Connection failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n return { name, type: 'failed' as const }\n }\n }),\n )\n results.push(...batchResults)\n }\n\n return results\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 { WebSocketClientTransport } from '@modelcontextprotocol/sdk/client/websocket.js'\n\nimport type { McpServerConfig } from '#core/utils/config'\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport { logMCPError } from '#core/utils/log'\n\ntype GlobalWithWebSocket = { WebSocket?: unknown }\n\nasync function ensureWebSocketGlobal(): Promise<void> {\n const global = globalThis as unknown as GlobalWithWebSocket\n if (typeof global.WebSocket === 'function') return\n\n try {\n const undiciModule = await import('undici')\n const maybeWs = (undiciModule as unknown as GlobalWithWebSocket).WebSocket\n if (typeof maybeWs === 'function') {\n global.WebSocket = maybeWs\n }\n } catch {\n // ignore\n }\n}\n\nfunction buildStdioEnv(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\ntype Candidate =\n | { kind: 'stdio'; transport: StdioClientTransport }\n | { kind: 'sse'; transport: SSEClientTransport }\n | { kind: 'http'; transport: StreamableHTTPClientTransport }\n | { kind: 'ws'; transport: WebSocketClientTransport }\n\nexport async function connectToServer(\n name: string,\n serverRef: McpServerConfig,\n): Promise<Client> {\n const candidates: Candidate[] = await (async () => {\n switch (serverRef.type) {\n case 'sse': {\n const ref = serverRef\n return [\n {\n kind: 'sse',\n transport: new SSEClientTransport(new URL(ref.url), {\n ...(ref.headers ? { requestInit: { headers: ref.headers } } : {}),\n }),\n },\n {\n kind: 'http',\n transport: new StreamableHTTPClientTransport(new URL(ref.url), {\n ...(ref.headers ? { requestInit: { headers: ref.headers } } : {}),\n }),\n },\n ]\n }\n case 'sse-ide': {\n const ref = serverRef\n return [\n {\n kind: 'sse',\n transport: new SSEClientTransport(new URL(ref.url), {\n ...(ref.headers ? { requestInit: { headers: ref.headers } } : {}),\n }),\n },\n ]\n }\n case 'http': {\n const ref = serverRef\n return [\n {\n kind: 'http',\n transport: new StreamableHTTPClientTransport(new URL(ref.url), {\n ...(ref.headers ? { requestInit: { headers: ref.headers } } : {}),\n }),\n },\n {\n kind: 'sse',\n transport: new SSEClientTransport(new URL(ref.url), {\n ...(ref.headers ? { requestInit: { headers: ref.headers } } : {}),\n }),\n },\n ]\n }\n case 'ws': {\n const ref = serverRef\n await ensureWebSocketGlobal()\n return [\n {\n kind: 'ws',\n transport: new WebSocketClientTransport(new URL(ref.url)),\n },\n ]\n }\n case 'ws-ide': {\n const ref = serverRef\n\n let url = ref.url\n if (ref.authToken) {\n try {\n const parsed = new URL(url)\n if (!parsed.searchParams.has('authToken')) {\n parsed.searchParams.set('authToken', ref.authToken)\n url = parsed.toString()\n }\n } catch {\n // ignore\n }\n }\n\n await ensureWebSocketGlobal()\n return [\n {\n kind: 'ws',\n transport: new WebSocketClientTransport(new URL(url)),\n },\n ]\n }\n case 'stdio':\n default: {\n const ref = serverRef\n return [\n {\n kind: 'stdio',\n transport: new StdioClientTransport({\n command: ref.command,\n args: ref.args,\n env: buildStdioEnv(ref.env),\n stderr: 'pipe',\n }),\n },\n ]\n }\n }\n })()\n\n const rawTimeout = process.env.MCP_CONNECTION_TIMEOUT_MS\n const parsedTimeout = rawTimeout ? Number.parseInt(rawTimeout, 10) : NaN\n const connectionTimeoutMs = Number.isFinite(parsedTimeout)\n ? parsedTimeout\n : 30_000\n\n let lastError: unknown\n\n for (const candidate of candidates) {\n const client = new Client(\n { name: PRODUCT_COMMAND, version: '0.1.0' },\n { capabilities: {} },\n )\n\n try {\n const connectPromise = client.connect(candidate.transport)\n\n if (connectionTimeoutMs > 0) {\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 ${connectionTimeoutMs}ms`,\n ),\n )\n }, connectionTimeoutMs)\n\n connectPromise.finally(() => clearTimeout(timeoutId))\n })\n\n await Promise.race([connectPromise, timeoutPromise])\n } else {\n await connectPromise\n }\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 if (candidates.length > 1 && candidate !== candidates[0]) {\n logMCPError(\n name,\n `Connected using fallback transport \"${candidate.kind}\". Consider setting the server type explicitly in your MCP config.`,\n )\n }\n\n return client\n } catch (error) {\n lastError = error\n try {\n await client.close()\n } catch {}\n }\n }\n\n throw lastError instanceof Error\n ? lastError\n : new Error(`Failed to connect to MCP server \"${name}\"`)\n}\n", "export type McpName = string\n\nexport function sanitizeMcpIdentifierPart(value: string): string {\n return value.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nexport function getMcpServerConnectionBatchSize(): number {\n const raw = process.env.MCP_SERVER_CONNECTION_BATCH_SIZE\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n if (Number.isFinite(parsed) && parsed > 0 && parsed <= 50) return parsed\n return 3\n}\n\nexport function getMcpToolTimeoutMs(): number | null {\n const raw = process.env.MCP_TOOL_TIMEOUT\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n if (!Number.isFinite(parsed) || parsed <= 0) return null\n return parsed\n}\n\nexport const IDE_MCP_TOOL_ALLOWLIST = new Set([\n 'mcp__ide__executeCode',\n 'mcp__ide__getDiagnostics',\n])\n", "import type {\n ImageBlockParam,\n ToolResultBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js'\nimport {\n CallToolResultSchema,\n type ListToolsResult,\n ListToolsResultSchema,\n} from '@modelcontextprotocol/sdk/types.js'\nimport { memoize } from 'lodash-es'\nimport { z } from 'zod'\n\nimport type { Tool } from '#core/tooling/Tool'\nimport { logMCPError } from '#core/utils/log'\n\nimport {\n IDE_MCP_TOOL_ALLOWLIST,\n getMcpToolTimeoutMs,\n sanitizeMcpIdentifierPart,\n} from './settings'\nimport { requestAll } from './request'\nimport { createTimeoutSignal, mergeAbortSignals } from './timeouts'\nimport type { ConnectedClient } from './types'\nimport { isRecord } from './utils'\n\ntype AnthropicImageMediaType = Extract<\n ImageBlockParam['source'],\n { type: 'base64' }\n>['media_type']\n\nfunction isTextBlock(value: unknown): value is { type: 'text'; text: string } {\n return (\n isRecord(value) && value.type === 'text' && typeof value.text === 'string'\n )\n}\n\nfunction isImageBlock(value: unknown): value is { type: 'image' } {\n return isRecord(value) && value.type === 'image'\n}\n\nfunction renderToolUseMessage(input: unknown): string {\n if (!isRecord(input)) return String(input ?? '')\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n}\n\nfunction renderToolResultMessage(output: unknown): string {\n if (Array.isArray(output)) {\n return output\n .map(item => {\n if (!item || typeof item !== 'object') return String(item ?? '')\n if (isImageBlock(item)) return '[Image]'\n if (isTextBlock(item)) return item.text\n return JSON.stringify(item)\n })\n .join('\\n')\n }\n if (!output) return '(No content)'\n return typeof output === 'string' ? output : JSON.stringify(output)\n}\n\nfunction renderResultForAssistant(content: unknown): string | unknown[] {\n if (typeof content === 'string') return content\n if (Array.isArray(content)) return content\n if (!content) return ''\n try {\n return JSON.stringify(content)\n } catch {\n return String(content)\n }\n}\n\nexport const getMCPTools = memoize(async (): Promise<Tool[]> => {\n const toolsList = await requestAll<\n ListToolsResult,\n typeof ListToolsResultSchema\n >({ method: 'tools/list' }, ListToolsResultSchema, 'tools')\n\n const inputSchema = z.object({}).passthrough()\n\n return toolsList.flatMap(({ client, result: { tools } }) => {\n const serverPart = sanitizeMcpIdentifierPart(client.name)\n\n return tools\n .map((tool): Tool | null => {\n const toolPart = sanitizeMcpIdentifierPart(tool.name)\n const name = `mcp__${serverPart}__${toolPart}`\n\n if (\n name.startsWith('mcp__ide__') &&\n !IDE_MCP_TOOL_ALLOWLIST.has(name)\n ) {\n return null\n }\n\n return {\n name,\n cachedDescription: tool.description ?? '',\n async isEnabled() {\n return true\n },\n isConcurrencySafe() {\n return tool.annotations?.readOnlyHint ?? false\n },\n isReadOnly() {\n return tool.annotations?.readOnlyHint ?? false\n },\n async description() {\n return tool.description ?? ''\n },\n async prompt() {\n return tool.description ?? ''\n },\n inputSchema,\n inputJSONSchema: tool.inputSchema as Tool['inputJSONSchema'],\n needsPermissions() {\n return true\n },\n async validateInput() {\n return { result: true }\n },\n renderToolUseMessage,\n renderToolUseRejectedMessage() {\n return null\n },\n renderToolResultMessage,\n renderResultForAssistant,\n async *call(args: Record<string, unknown>, context) {\n const data = await callMcpTool({\n client,\n tool: tool.name,\n args,\n toolUseId: context.toolUseId,\n signal: context.abortController.signal,\n })\n yield {\n type: 'result' as const,\n data,\n resultForAssistant: data,\n }\n },\n userFacingName() {\n const title = tool.annotations?.title || tool.name\n return `${client.name} - ${title} (MCP)`\n },\n }\n })\n .filter((tool): tool is Tool => tool !== null)\n })\n})\n\nasync function callMcpTool({\n client: { client, name },\n tool,\n args,\n toolUseId,\n signal,\n}: {\n client: ConnectedClient\n tool: string\n args: Record<string, unknown>\n toolUseId?: string\n signal?: AbortSignal\n}): Promise<ToolResultBlockParam['content']> {\n const timeoutMs = getMcpToolTimeoutMs()\n const timeoutSignal = timeoutMs ? createTimeoutSignal(timeoutMs) : null\n const merged = mergeAbortSignals([signal, timeoutSignal?.signal])\n\n const meta =\n toolUseId && toolUseId.trim()\n ? { 'claudecode/toolUseId': toolUseId }\n : undefined\n\n try {\n const options: RequestOptions | undefined = merged?.signal\n ? { signal: merged.signal }\n : undefined\n\n const rawResult = await client.callTool(\n {\n name: tool,\n arguments: args,\n ...(meta ? { _meta: meta } : {}),\n },\n CallToolResultSchema,\n options,\n )\n\n const result = CallToolResultSchema.parse(rawResult)\n\n if (result.isError) {\n const contentText = result.content.find(item => item.type === 'text')\n\n const extraError =\n isRecord(rawResult) && typeof rawResult.error === 'string'\n ? rawResult.error\n : isRecord(result) && typeof result.error === 'string'\n ? result.error\n : ''\n\n const message =\n contentText?.text?.trim() || extraError || `Error calling tool ${tool}`\n\n logMCPError(name, `Error calling tool ${tool}: ${message}`)\n throw new Error(message)\n }\n\n const toolResult =\n isRecord(rawResult) && rawResult.toolResult !== undefined\n ? rawResult.toolResult\n : isRecord(result) && result.toolResult !== undefined\n ? result.toolResult\n : undefined\n if (toolResult !== undefined) return String(toolResult)\n\n if (result.structuredContent !== undefined) {\n return JSON.stringify(result.structuredContent)\n }\n\n const blocks: Array<{ type: 'text'; text: string } | ImageBlockParam> = []\n\n for (const item of result.content) {\n switch (item.type) {\n case 'text':\n blocks.push({ type: 'text', text: item.text })\n break\n case 'image':\n blocks.push({\n type: 'image',\n source: {\n type: 'base64',\n data: item.data,\n media_type: item.mimeType as AnthropicImageMediaType,\n },\n })\n break\n default: {\n let text = ''\n try {\n text = JSON.stringify(item)\n } catch {\n text = String(item)\n }\n blocks.push({ type: 'text', text })\n break\n }\n }\n }\n\n return blocks.length > 0 ? blocks : '(No content)'\n } finally {\n merged?.cleanup()\n timeoutSignal?.cleanup()\n }\n}\n", "export type TimeoutSignal = { signal: AbortSignal; cleanup: () => void }\n\nexport function createTimeoutSignal(timeoutMs: number): TimeoutSignal {\n if (typeof AbortSignal.timeout === 'function') {\n return { signal: AbortSignal.timeout(timeoutMs), cleanup: () => {} }\n }\n\n const controller = new AbortController()\n const id = setTimeout(() => controller.abort(), timeoutMs)\n return { signal: controller.signal, cleanup: () => clearTimeout(id) }\n}\n\nexport function mergeAbortSignals(\n signals: Array<AbortSignal | undefined>,\n): TimeoutSignal | null {\n const active = signals.filter((s): s is AbortSignal => !!s)\n if (active.length === 0) return null\n if (active.length === 1) return { signal: active[0]!, cleanup: () => {} }\n\n const controller = new AbortController()\n const unsubscribers: Array<() => void> = []\n\n const abort = () => {\n try {\n controller.abort()\n } catch {}\n }\n\n for (const signal of active) {\n if (signal.aborted) {\n abort()\n return { signal: controller.signal, cleanup: () => {} }\n }\n signal.addEventListener('abort', abort, { once: true })\n unsubscribers.push(() => {\n try {\n signal.removeEventListener('abort', abort)\n } catch {}\n })\n }\n\n return {\n signal: controller.signal,\n cleanup: () => {\n for (const unsubscribe of unsubscribers) unsubscribe()\n },\n }\n}\n", "import type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js'\nimport type {\n ClientRequest,\n Result,\n ServerCapabilities,\n} from '@modelcontextprotocol/sdk/types.js'\nimport { ResultSchema } from '@modelcontextprotocol/sdk/types.js'\n\nimport { logMCPError } from '#core/utils/log'\n\nimport { getClients } from './clients'\nimport { getMcpToolTimeoutMs } from './settings'\nimport {\n createTimeoutSignal,\n mergeAbortSignals,\n type TimeoutSignal,\n} from './timeouts'\nimport type { ConnectedClient } from './types'\n\nexport async function requestAll<\n ResultT extends Result,\n ResultSchemaT extends typeof ResultSchema,\n>(\n req: ClientRequest,\n resultSchema: ResultSchemaT,\n requiredCapability: keyof ServerCapabilities,\n): Promise<{ client: ConnectedClient; result: ResultT }[]> {\n const timeoutMs = getMcpToolTimeoutMs()\n const clients = await getClients()\n const results = await Promise.allSettled(\n clients.map(async client => {\n if (client.type === 'failed') return null\n\n let timeoutSignal: TimeoutSignal | null = null\n let mergedSignal: TimeoutSignal | null = null\n\n try {\n let capabilities = client.capabilities ?? null\n\n if (!capabilities) {\n try {\n capabilities = client.client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n client.capabilities = capabilities\n }\n\n if (!capabilities?.[requiredCapability]) {\n return null\n }\n\n timeoutSignal = timeoutMs ? createTimeoutSignal(timeoutMs) : null\n mergedSignal = mergeAbortSignals([timeoutSignal?.signal])\n\n const options: RequestOptions | undefined = mergedSignal?.signal\n ? { signal: mergedSignal.signal }\n : undefined\n\n return {\n client,\n result: (await client.client.request(\n req,\n resultSchema,\n options,\n )) as ResultT,\n }\n } catch (error) {\n logMCPError(\n client.name,\n `Failed to request '${req.method}': ${error instanceof Error ? error.message : String(error)}`,\n )\n return null\n } finally {\n mergedSignal?.cleanup()\n timeoutSignal?.cleanup()\n }\n }),\n )\n\n return results\n .filter(\n (\n result,\n ): result is PromiseFulfilledResult<{\n client: ConnectedClient\n result: ResultT\n } | null> => result.status === 'fulfilled',\n )\n .map(result => result.value)\n .filter(\n (result): result is { client: ConnectedClient; result: ResultT } =>\n result !== null,\n )\n}\n", "import type {\n ImageBlockParam,\n MessageParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { memoize, zipObject } from 'lodash-es'\nimport type { ListPromptsResult } from '@modelcontextprotocol/sdk/types.js'\nimport { ListPromptsResultSchema } from '@modelcontextprotocol/sdk/types.js'\n\nimport { logMCPError } from '#core/utils/log'\n\nimport { sanitizeMcpIdentifierPart } from './settings'\nimport { requestAll } from './request'\nimport type { ConnectedClient } from './types'\n\ntype AnthropicImageMediaType = Extract<\n ImageBlockParam['source'],\n { type: 'base64' }\n>['media_type']\n\nexport type McpPromptCommand = {\n type: 'prompt'\n name: string\n description: string\n isEnabled: boolean\n isHidden: boolean\n progressMessage: string\n argNames: string[]\n userFacingName(): string\n getPromptForCommand(args: string): Promise<MessageParam[]>\n}\n\nexport const getMCPCommands = memoize(async (): Promise<McpPromptCommand[]> => {\n const results = await requestAll<\n ListPromptsResult,\n typeof ListPromptsResultSchema\n >({ method: 'prompts/list' }, ListPromptsResultSchema, 'prompts')\n\n return results.flatMap(({ client, result }) =>\n result.prompts?.map(prompt => {\n const serverPart = sanitizeMcpIdentifierPart(client.name)\n const argNames = (prompt.arguments ?? []).map(arg => arg.name)\n\n return {\n type: 'prompt',\n name: `mcp__${serverPart}__${prompt.name}`,\n description: prompt.description ?? '',\n isEnabled: true,\n isHidden: false,\n progressMessage: 'running',\n userFacingName() {\n const title = prompt.title?.trim() || prompt.name\n return `${client.name}:${title} (MCP)`\n },\n argNames,\n async getPromptForCommand(args: string) {\n const argsArray = args.split(' ')\n return await runCommand(\n { name: prompt.name, client },\n zipObject(argNames, argsArray),\n )\n },\n }\n }),\n )\n})\n\nexport async function runCommand(\n { name, client }: { name: string; client: ConnectedClient },\n args: Record<string, string>,\n): Promise<MessageParam[]> {\n try {\n const result = await client.client.getPrompt({ name, arguments: args })\n\n return result.messages.map((message): MessageParam => {\n const content = message.content\n switch (content.type) {\n case 'text':\n return {\n role: message.role,\n content: [{ type: 'text', text: content.text }],\n }\n case 'image':\n return {\n role: message.role,\n content: [\n {\n type: 'image',\n source: {\n type: 'base64',\n data: content.data,\n media_type: content.mimeType as AnthropicImageMediaType,\n },\n },\n ],\n }\n default:\n return {\n role: message.role,\n content: [\n {\n type: 'text',\n text: `Unsupported MCP content type ${content.type}`,\n },\n ],\n }\n }\n })\n } catch (error) {\n logMCPError(\n client.name,\n `Error running command '${name}': ${error instanceof Error ? error.message : String(error)}`,\n )\n throw error\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,YAAY,cAAc,qBAAqB;AACxD,SAAS,MAAM,eAAe;;;ACCvB,SAAS,cAAc,MAA0C;AACtE,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,GAAG;AACV,aAAS,CAAC;AACV,WAAO;AAAA,EACT;AACF;;;ACZO,SAAS,SAAS,OAAkD;AACzE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,kBAAkB,OAAuB;AAChD,MAAI,MAAM;AACV,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,gBAAgB;AACpB,MAAI,iBAAiB;AAErB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,KAAK,MAAM,CAAC;AAClB,UAAM,OAAO,IAAI,IAAI,MAAM,SAAS,MAAM,IAAI,CAAC,IAAK;AAEpD,QAAI,eAAe;AACjB,UAAI,OAAO,MAAM;AACf,wBAAgB;AAChB,eAAO;AAAA,MACT;AACA;AAAA,IACF;AAEA,QAAI,gBAAgB;AAClB,UAAI,OAAO,OAAO,SAAS,KAAK;AAC9B,yBAAiB;AACjB;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,aAAO;AACP,UAAI,SAAS;AACX,kBAAU;AACV;AAAA,MACF;AACA,UAAI,OAAO,MAAM;AACf,kBAAU;AACV;AAAA,MACF;AACA,UAAI,OAAO,IAAK,YAAW;AAC3B;AAAA,IACF;AAEA,QAAI,OAAO,KAAK;AACd,iBAAW;AACX,aAAO;AACP;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,SAAS,KAAK;AAC9B,sBAAgB;AAChB;AACA;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,SAAS,KAAK;AAC9B,uBAAiB;AACjB;AACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,iBAAiB,MAAuB;AACtD,QAAM,MAAM,OAAO,QAAQ,EAAE;AAC7B,MAAI,CAAC,IAAI,KAAK,EAAG,QAAO;AACxB,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,QAAQ;AACN,QAAI;AACF,aAAO,KAAK,MAAM,kBAAkB,GAAG,CAAC;AAAA,IAC1C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,OAAe,YAA4B;AACvE,SAAO,MAAM,QAAQ,kBAAkB,CAAC,OAAO,QAAQ;AACrD,UAAM,IAAI,OAAO,OAAO,EAAE,EAAE,KAAK;AACjC,QAAI,CAAC,EAAG,QAAO;AACf,QAAI,MAAM,qBAAsB,QAAO;AACvC,UAAM,MAAM,QAAQ,IAAI,CAAC;AACzB,WAAO,QAAQ,SAAY,MAAM;AAAA,EACnC,CAAC;AACH;AAEO,SAAS,mBACd,OACA,YACS;AACT,MAAI,OAAO,UAAU,SAAU,QAAO,qBAAqB,OAAO,UAAU;AAC5E,MAAI,MAAM,QAAQ,KAAK;AACrB,WAAO,MAAM,IAAI,OAAK,mBAAmB,GAAG,UAAU,CAAC;AACzD,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,MAA+B,CAAC;AACtC,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAI,CAAC,IAAI,mBAAmB,GAAG,UAAU;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AFxFA,IAAM,eAAe,CAAC,WAAW,UAAU,SAAS,SAAS;AAE7D,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,SAAS,aACd,YACwB;AACxB,QAAM,YAAoC,CAAC;AAE3C,MAAI,CAAC,WAAY,QAAO;AAExB,aAAW,UAAU,YAAY;AAC/B,UAAM,CAAC,KAAK,GAAG,UAAU,IAAI,OAAO,MAAM,GAAG;AAC7C,QAAI,CAAC,OAAO,WAAW,WAAW,GAAG;AACnC,YAAM,IAAI;AAAA,QACR,wCAAwC,MAAM;AAAA,MAChD;AAAA,IACF;AACA,cAAU,GAAG,IAAI,WAAW,KAAK,GAAG;AAAA,EACtC;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA6B;AAC7D,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,gBACJ,QAAQ,IAAI,cAAc,aAAa,kBAAkB;AAE3D,MAAI,CAAC,cAAc,SAAS,KAAoB,GAAG;AACjD,UAAM,IAAI;AAAA,MACR,kBAAkB,KAAK,qBAAqB,cAAc,KAAK,IAAI,CAAC;AAAA,IACtE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,uBAAwD;AACtE,QAAM,UAAU,kBAAkB;AAClC,MAAI,QAAQ,WAAW,EAAG,QAAO,CAAC;AAElC,QAAM,MAAuC,CAAC;AAE9C,aAAW,UAAU,SAAS;AAC5B,UAAM,aAAa,OAAO;AAC1B,UAAM,aAAa,OAAO;AAE1B,UAAM,UAAkD,CAAC;AAEzD,eAAW,cAAc,OAAO,kBAAkB,CAAC,GAAG;AACpD,UAAI;AACF,cAAM,MAAM,aAAa,YAAY,MAAM;AAC3C,cAAM,SAAS,iBAAiB,GAAG;AACnC,YAAI,CAAC,SAAS,MAAM,EAAG;AAEvB,cAAM,cAAc,OAAO,YAAY;AACvC,cAAM,aAAa,SAAS,WAAW,IAAI,cAAc;AACzD,YAAI,CAAC,SAAS,UAAU,EAAG;AAE3B,cAAM,UAA2C,CAAC;AAClD,mBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,cAAI,CAAC,SAAS,GAAG,EAAG;AACpB,kBAAQ,IAAI,IAAI,mBAAmB,KAAK,UAAU;AAAA,QACpD;AACA,gBAAQ,KAAK,OAAO;AAAA,MACtB,QAAQ;AACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,OAAO,QAAQ,GAAG;AAC7B,YAAM,cAAc,OAAO,SAAS,YAAY;AAChD,UAAI,SAAS,WAAW,GAAG;AACzB,cAAM,cAAc,YAAY,YAAY;AAC5C,cAAM,aAAa,SAAS,WAAW,IAAI,cAAc;AACzD,YAAI,SAAS,UAAU,GAAG;AACxB,gBAAM,UAA2C,CAAC;AAClD,qBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,gBAAI,CAAC,SAAS,GAAG,EAAG;AACpB,oBAAQ,IAAI,IAAI;AAAA,cACd;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,KAAK,OAAO;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAA0C,OAAO;AAAA,MACrD,CAAC;AAAA,MACD,GAAG;AAAA,IACL;AAEA,eAAW,CAAC,YAAY,GAAG,KAAK,OAAO,QAAQ,MAAM,GAAG;AACtD,YAAM,WAAW,UAAU,UAAU,IAAI,UAAU;AACnD,UAAI,QAAQ,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,qBACd,YACqC;AACrC,QAAM,SAAS,wBAAwB;AACvC,MAAI,OAAO,sBAAsB,SAAS,UAAU,GAAG;AACrD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,sBAAsB,SAAS,UAAU,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,aACd,MACA,QACA,QAAqB,WACf;AACN,MAAI,UAAU,SAAS;AACrB,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,+BAAyB,MAAM,MAAM;AACrC;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,OAAO,GAAG,QAAQ;AACzC,QAAI,cAA+C,CAAC;AAEpD,QAAI,WAAW,SAAS,GAAG;AACzB,UAAI;AACF,cAAM,eAAe,aAAa,WAAW,OAAO;AACpD,cAAM,iBAAiB,cAAc,YAAY;AACjD,YAAI,SAAS,cAAc,GAAG;AAC5B,wBAAc;AAAA,QAChB;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,gBAAY,IAAI,IAAI;AAEpB,QAAI;AACF,oBAAc,WAAW,KAAK,UAAU,aAAa,MAAM,CAAC,GAAG,OAAO;AAAA,IACxE,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,8BAA8B,KAAK,EAAE;AAAA,IACvD;AAEA;AAAA,EACF;AAEA,MAAI,UAAU,WAAW;AACvB,UAAM,cAAc,KAAK,OAAO,GAAG,WAAW;AAC9C,QAAIA,UAAkC,EAAE,YAAY,CAAC,EAAE;AAEvD,QAAI,WAAW,WAAW,GAAG;AAC3B,UAAI;AACF,cAAM,UAAU,aAAa,aAAa,OAAO;AACjD,cAAM,SAAS,cAAc,OAAO;AACpC,YAAI,SAAS,MAAM,EAAG,CAAAA,UAAS;AAAA,MACjC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,aAAaA,QAAO,YAAY;AACtC,UAAM,UAA2C,SAAS,UAAU,IAC/D,aACD,CAAC;AAEL,YAAQ,IAAI,IAAI;AAChB,IAAAA,QAAO,YAAY,IAAI;AAEvB,QAAI;AACF,oBAAc,aAAa,KAAK,UAAUA,SAAQ,MAAM,CAAC,GAAG,OAAO;AAAA,IACrE,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAAA,IAC1D;AAEA;AAAA,EACF;AAEA,MAAI,UAAU,UAAU;AACtB,UAAMA,UAAS,gBAAgB;AAC/B,QAAI,CAACA,QAAO,WAAY,CAAAA,QAAO,aAAa,CAAC;AAC7C,IAAAA,QAAO,WAAW,IAAI,IAAI;AAC1B,qBAAiBA,OAAM;AACvB;AAAA,EACF;AAEA,QAAM,SAAS,wBAAwB;AACvC,MAAI,CAAC,OAAO,WAAY,QAAO,aAAa,CAAC;AAC7C,SAAO,WAAW,IAAI,IAAI;AAC1B,2BAAyB,MAAM;AACjC;AAEO,SAAS,gBACd,MACA,QAAqB,WACf;AACN,MAAI,UAAU,SAAS;AACrB,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,kCAA4B,IAAI;AAChC;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,OAAO,GAAG,QAAQ;AACzC,QAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAEA,UAAM,eAAe,aAAa,WAAW,OAAO;AACpD,UAAM,SAAS,cAAc,YAAY;AACzC,QAAI,CAAC,SAAS,MAAM,KAAK,EAAE,QAAQ,SAAS;AAC1C,YAAM,IAAI,MAAM,kCAAkC,IAAI,YAAY;AAAA,IACpE;AAEA,WAAO,OAAO,IAAI;AAClB,kBAAc,WAAW,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AACjE;AAAA,EACF;AAEA,MAAI,UAAU,WAAW;AACvB,UAAM,cAAc,KAAK,OAAO,GAAG,WAAW;AAC9C,QAAI,CAAC,WAAW,WAAW,GAAG;AAC5B,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAEA,UAAM,UAAU,aAAa,aAAa,OAAO;AACjD,UAAM,SAAS,cAAc,OAAO;AACpC,QAAI,CAAC,SAAS,MAAM,GAAG;AACrB,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAEA,UAAM,aAAa,OAAO,YAAY;AACtC,QAAI,CAAC,SAAS,UAAU,KAAK,EAAE,QAAQ,aAAa;AAClD,YAAM,IAAI,MAAM,kCAAkC,IAAI,eAAe;AAAA,IACvE;AAEA,WAAO,WAAW,IAAI;AACtB,WAAO,YAAY,IAAI;AACvB,kBAAc,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,GAAG,OAAO;AACnE;AAAA,EACF;AAEA,MAAI,UAAU,UAAU;AACtB,UAAMA,UAAS,gBAAgB;AAC/B,QAAI,CAACA,QAAO,aAAa,IAAI,GAAG;AAC9B,YAAM,IAAI,MAAM,kCAAkC,IAAI,mBAAmB;AAAA,IAC3E;AACA,WAAOA,QAAO,WAAW,IAAI;AAC7B,qBAAiBA,OAAM;AACvB;AAAA,EACF;AAEA,QAAM,SAAS,wBAAwB;AACvC,MAAI,CAAC,OAAO,aAAa,IAAI,GAAG;AAC9B,UAAM,IAAI,MAAM,kCAAkC,IAAI,oBAAoB;AAAA,EAC5E;AACA,SAAO,OAAO,WAAW,IAAI;AAC7B,2BAAyB,MAAM;AACjC;AAEO,SAAS,iBAAkD;AAChE,QAAM,gBAAgB,qBAAqB;AAC3C,QAAM,eAAe,gBAAgB;AACrC,QAAM,oBAAoB,+BAA+B,EAAE;AAC3D,QAAM,gBAAgB,wBAAwB;AAC9C,SAAO;AAAA,IACL,GAAI,iBAAiB,CAAC;AAAA,IACtB,GAAI,aAAa,cAAc,CAAC;AAAA,IAChC,GAAI,qBAAqB,CAAC;AAAA,IAC1B,GAAI,cAAc,cAAc,CAAC;AAAA,EACnC;AACF;AAEO,SAAS,aAAa,MAAkD;AAC7E,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,yBAAyB,+BAA+B;AAC9D,QAAM,oBAAoB,uBAAuB;AACjD,QAAM,eAAe,gBAAgB;AAErC,MAAI,cAAc,aAAa,IAAI,GAAG;AACpC,WAAO,EAAE,GAAG,cAAc,WAAW,IAAI,GAAG,OAAO,UAAU;AAAA,EAC/D;AAEA,MAAI,oBAAoB,IAAI,GAAG;AAC7B,UAAM,SAAS,uBAAuB,QAAQ,IAAI;AAClD,UAAM,QAAqB,WAAW,cAAc,YAAY;AAChE,WAAO,EAAE,GAAG,kBAAkB,IAAI,GAAG,MAAM;AAAA,EAC7C;AAEA,MAAI,aAAa,aAAa,IAAI,GAAG;AACnC,WAAO,EAAE,GAAG,aAAa,WAAW,IAAI,GAAG,OAAO,SAAS;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,SAAS,oCAAoC,SAGhB;AAClC,QAAM,MAAuC,CAAC;AAE9C,aAAW,YAAY,QAAQ,SAAS;AACtC,UAAM,QAAQ,OAAO,YAAY,EAAE,EAAE,KAAK;AAC1C,QAAI,CAAC,MAAO;AAEZ,UAAM,eAAe,QAAQ,QAAQ,YAAY,KAAK;AACtD,UAAM,UAAU,WAAW,YAAY,IACnC,aAAa,cAAc,MAAM,IACjC,WAAW,KAAK,IACd,aAAa,OAAO,MAAM,IAC1B;AAEN,UAAM,SAAS,iBAAiB,OAAO;AACvC,QAAI,CAAC,SAAS,MAAM,EAAG;AAEvB,UAAM,cAAc,OAAO,YAAY;AACvC,UAAM,aAAa,SAAS,WAAW,IAAI,cAAc;AACzD,QAAI,CAAC,SAAS,UAAU,EAAG;AAE3B,eAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,UAAI,CAAC,SAAS,GAAG,EAAG;AACpB,UAAI,IAAI,IAAI;AAAA,IACd;AAAA,EACF;AAEA,SAAO;AACT;;;AG3WA,SAAS,SAAS,cAAc;;;ACEhC,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,qCAAqC;AAC9C,SAAS,gCAAgC;AAQzC,eAAe,wBAAuC;AACpD,QAAM,SAAS;AACf,MAAI,OAAO,OAAO,cAAc,WAAY;AAE5C,MAAI;AACF,UAAM,eAAe,MAAM,OAAO,QAAQ;AAC1C,UAAM,UAAW,aAAgD;AACjE,QAAI,OAAO,YAAY,YAAY;AACjC,aAAO,YAAY;AAAA,IACrB;AAAA,EACF,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,cAAc,OAAwD;AAC7E,QAAM,MAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG,GAAG;AACtD,QAAI,OAAO,UAAU,SAAU,KAAI,GAAG,IAAI;AAAA,EAC5C;AACA,MAAI,MAAO,QAAO,OAAO,KAAK,KAAK;AACnC,SAAO;AACT;AAQA,eAAsB,gBACpB,MACA,WACiB;AACjB,QAAM,aAA0B,OAAO,YAAY;AACjD,YAAQ,UAAU,MAAM;AAAA,MACtB,KAAK,OAAO;AACV,cAAM,MAAM;AACZ,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,mBAAmB,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,cAClD,GAAI,IAAI,UAAU,EAAE,aAAa,EAAE,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,YACjE,CAAC;AAAA,UACH;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,8BAA8B,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,cAC7D,GAAI,IAAI,UAAU,EAAE,aAAa,EAAE,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,YACjE,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAM,MAAM;AACZ,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,mBAAmB,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,cAClD,GAAI,IAAI,UAAU,EAAE,aAAa,EAAE,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,YACjE,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,MAAM;AACZ,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,8BAA8B,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,cAC7D,GAAI,IAAI,UAAU,EAAE,aAAa,EAAE,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,YACjE,CAAC;AAAA,UACH;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,mBAAmB,IAAI,IAAI,IAAI,GAAG,GAAG;AAAA,cAClD,GAAI,IAAI,UAAU,EAAE,aAAa,EAAE,SAAS,IAAI,QAAQ,EAAE,IAAI,CAAC;AAAA,YACjE,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,MAAM;AACT,cAAM,MAAM;AACZ,cAAM,sBAAsB;AAC5B,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,yBAAyB,IAAI,IAAI,IAAI,GAAG,CAAC;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,cAAM,MAAM;AAEZ,YAAI,MAAM,IAAI;AACd,YAAI,IAAI,WAAW;AACjB,cAAI;AACF,kBAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,gBAAI,CAAC,OAAO,aAAa,IAAI,WAAW,GAAG;AACzC,qBAAO,aAAa,IAAI,aAAa,IAAI,SAAS;AAClD,oBAAM,OAAO,SAAS;AAAA,YACxB;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAEA,cAAM,sBAAsB;AAC5B,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,yBAAyB,IAAI,IAAI,GAAG,CAAC;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,SAAS;AACP,cAAM,MAAM;AACZ,eAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,WAAW,IAAI,qBAAqB;AAAA,cAClC,SAAS,IAAI;AAAA,cACb,MAAM,IAAI;AAAA,cACV,KAAK,cAAc,IAAI,GAAG;AAAA,cAC1B,QAAQ;AAAA,YACV,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG;AAEH,QAAM,aAAa,QAAQ,IAAI;AAC/B,QAAM,gBAAgB,aAAa,OAAO,SAAS,YAAY,EAAE,IAAI;AACrE,QAAM,sBAAsB,OAAO,SAAS,aAAa,IACrD,gBACA;AAEJ,MAAI;AAEJ,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,IAAI;AAAA,MACjB,EAAE,MAAM,iBAAiB,SAAS,QAAQ;AAAA,MAC1C,EAAE,cAAc,CAAC,EAAE;AAAA,IACrB;AAEA,QAAI;AACF,YAAM,iBAAiB,OAAO,QAAQ,UAAU,SAAS;AAEzD,UAAI,sBAAsB,GAAG;AAC3B,cAAM,iBAAiB,IAAI,QAAe,CAAC,GAAG,WAAW;AACvD,gBAAM,YAAY,WAAW,MAAM;AACjC;AAAA,cACE,IAAI;AAAA,gBACF,6BAA6B,IAAI,qBAAqB,mBAAmB;AAAA,cAC3E;AAAA,YACF;AAAA,UACF,GAAG,mBAAmB;AAEtB,yBAAe,QAAQ,MAAM,aAAa,SAAS,CAAC;AAAA,QACtD,CAAC;AAED,cAAM,QAAQ,KAAK,CAAC,gBAAgB,cAAc,CAAC;AAAA,MACrD,OAAO;AACL,cAAM;AAAA,MACR;AAEA,UAAI,UAAU,SAAS,SAAS;AAC9B,kBAAU,UAAU,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACvD,gBAAM,YAAY,KAAK,SAAS,EAAE,KAAK;AACvC,cAAI,UAAW,aAAY,MAAM,kBAAkB,SAAS,EAAE;AAAA,QAChE,CAAC;AAAA,MACH;AAEA,UAAI,WAAW,SAAS,KAAK,cAAc,WAAW,CAAC,GAAG;AACxD;AAAA,UACE;AAAA,UACA,uCAAuC,UAAU,IAAI;AAAA,QACvD;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,kBAAY;AACZ,UAAI;AACF,cAAM,OAAO,MAAM;AAAA,MACrB,QAAQ;AAAA,MAAC;AAAA,IACX;AAAA,EACF;AAEA,QAAM,qBAAqB,QACvB,YACA,IAAI,MAAM,oCAAoC,IAAI,GAAG;AAC3D;;;AC9MO,SAAS,0BAA0B,OAAuB;AAC/D,SAAO,MAAM,QAAQ,mBAAmB,GAAG;AAC7C;AAEO,SAAS,kCAA0C;AACxD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,MAAM,OAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AACvD,MAAI,OAAO,SAAS,MAAM,KAAK,SAAS,KAAK,UAAU,GAAI,QAAO;AAClE,SAAO;AACT;AAEO,SAAS,sBAAqC;AACnD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,MAAM,OAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AACvD,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,UAAU,EAAG,QAAO;AACpD,SAAO;AACT;AAEO,IAAM,yBAAyB,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AACF,CAAC;;;AFFM,IAAM,aAAa,QAAQ,YAAsC;AACtE,MAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI,aAAa,QAAQ;AACrD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,gBAAgB,qBAAqB;AAC3C,QAAM,gBAAgB,gBAAgB,EAAE,cAAc,CAAC;AACvD,QAAM,qBAAqB,+BAA+B,EAAE;AAC5D,QAAM,iBAAiB,wBAAwB,EAAE,cAAc,CAAC;AAEhE,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA,CAAC,GAAG,SAAS,qBAAqB,IAAI,MAAM;AAAA,EAC9C;AAEA,QAAM,aAA8C;AAAA,IAClD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,QAAM,YAAY,gCAAgC;AAClD,QAAM,UAAU,OAAO,QAAQ,UAAU;AACzC,QAAM,UAA2B,CAAC;AAElC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,WAAW;AAClD,UAAM,QAAQ,QAAQ,MAAM,GAAG,IAAI,SAAS;AAC5C,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,MAAM,IAAI,OAAO,CAAC,MAAM,SAAS,MAAM;AACrC,YAAI;AACF,gBAAM,SAAS,MAAM,gBAAgB,MAAM,SAAS;AACpD,cAAI,eAA0C;AAC9C,cAAI;AACF,2BAAe,OAAO,sBAAsB,KAAK;AAAA,UACnD,QAAQ;AACN,2BAAe;AAAA,UACjB;AACA,iBAAO,EAAE,MAAM,QAAQ,cAAc,MAAM,YAAqB;AAAA,QAClE,SAAS,OAAO;AACd;AAAA,YACE;AAAA,YACA,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,UAC9E;AACA,iBAAO,EAAE,MAAM,MAAM,SAAkB;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AACA,YAAQ,KAAK,GAAG,YAAY;AAAA,EAC9B;AAEA,SAAO;AACT,CAAC;AAED,eAAsB,0BAA0B,SAInB;AAC3B,QAAM,aAAa,QAAQ,cAAc,OAAO;AAChD,QAAM,UACJ,MAAM,QAAQ,QAAQ,SAAS,KAAK,QAAQ,UAAU,SAAS,IAC3D,QAAQ,YACR,CAAC;AACP,QAAM,SAAS,QAAQ,oBAAoB;AAE3C,MAAI,QAAQ,WAAW,KAAK,CAAC,QAAQ;AACnC,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,aAAa,oCAAoC;AAAA,IACrD;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,SAAS,CAAC,IAAI,qBAAqB;AACzD,QAAM,gBAAgB,SAAS,CAAC,IAAK,gBAAgB,EAAE,cAAc,CAAC;AACtE,QAAM,qBAAqB,SACvB,CAAC,IACD,+BAA+B,EAAE;AACrC,QAAM,iBAAiB,SACnB,CAAC,IACA,wBAAwB,EAAE,cAAc,CAAC;AAE9C,QAAM,6BAA6B,SAC/B,CAAC,IACD;AAAA,IACE;AAAA,IACA,CAAC,GAAG,SAAS,qBAAqB,IAAI,MAAM;AAAA,EAC9C;AAEJ,QAAM,aAA8C;AAAA,IAClD,GAAI,iBAAiB,CAAC;AAAA,IACtB,GAAI,iBAAiB,CAAC;AAAA,IACtB,GAAI,8BAA8B,CAAC;AAAA,IACnC,GAAI,kBAAkB,CAAC;AAAA,IACvB,GAAI,cAAc,CAAC;AAAA,EACrB;AAEA,QAAM,YAAY,gCAAgC;AAClD,QAAM,mBAAmB,OAAO,QAAQ,UAAU;AAClD,QAAM,UAA2B,CAAC;AAElC,WAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK,WAAW;AAC3D,UAAM,QAAQ,iBAAiB,MAAM,GAAG,IAAI,SAAS;AACrD,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,MAAM,IAAI,OAAO,CAAC,MAAM,SAAS,MAAM;AACrC,YAAI;AACF,gBAAM,SAAS,MAAM,gBAAgB,MAAM,SAAS;AACpD,cAAI,eAA0C;AAC9C,cAAI;AACF,2BAAe,OAAO,sBAAsB,KAAK;AAAA,UACnD,QAAQ;AACN,2BAAe;AAAA,UACjB;AACA,iBAAO,EAAE,MAAM,QAAQ,cAAc,MAAM,YAAqB;AAAA,QAClE,SAAS,OAAO;AACd;AAAA,YACE;AAAA,YACA,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,UAC9E;AACA,iBAAO,EAAE,MAAM,MAAM,SAAkB;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AACA,YAAQ,KAAK,GAAG,YAAY;AAAA,EAC9B;AAEA,SAAO;AACT;;;AGjJA;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AACP,SAAS,WAAAC,gBAAe;AACxB,SAAS,SAAS;;;ACTX,SAAS,oBAAoB,WAAkC;AACpE,MAAI,OAAO,YAAY,YAAY,YAAY;AAC7C,WAAO,EAAE,QAAQ,YAAY,QAAQ,SAAS,GAAG,SAAS,MAAM;AAAA,IAAC,EAAE;AAAA,EACrE;AAEA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,KAAK,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AACzD,SAAO,EAAE,QAAQ,WAAW,QAAQ,SAAS,MAAM,aAAa,EAAE,EAAE;AACtE;AAEO,SAAS,kBACd,SACsB;AACtB,QAAM,SAAS,QAAQ,OAAO,CAAC,MAAwB,CAAC,CAAC,CAAC;AAC1D,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,OAAO,WAAW,EAAG,QAAO,EAAE,QAAQ,OAAO,CAAC,GAAI,SAAS,MAAM;AAAA,EAAC,EAAE;AAExE,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,gBAAmC,CAAC;AAE1C,QAAM,QAAQ,MAAM;AAClB,QAAI;AACF,iBAAW,MAAM;AAAA,IACnB,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,aAAW,UAAU,QAAQ;AAC3B,QAAI,OAAO,SAAS;AAClB,YAAM;AACN,aAAO,EAAE,QAAQ,WAAW,QAAQ,SAAS,MAAM;AAAA,MAAC,EAAE;AAAA,IACxD;AACA,WAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACtD,kBAAc,KAAK,MAAM;AACvB,UAAI;AACF,eAAO,oBAAoB,SAAS,KAAK;AAAA,MAC3C,QAAQ;AAAA,MAAC;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,QAAQ,WAAW;AAAA,IACnB,SAAS,MAAM;AACb,iBAAW,eAAe,cAAe,aAAY;AAAA,IACvD;AAAA,EACF;AACF;;;AC5BA,eAAsB,WAIpB,KACA,cACA,oBACyD;AACzD,QAAM,YAAY,oBAAoB;AACtC,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,QAAQ,IAAI,OAAM,WAAU;AAC1B,UAAI,OAAO,SAAS,SAAU,QAAO;AAErC,UAAI,gBAAsC;AAC1C,UAAI,eAAqC;AAEzC,UAAI;AACF,YAAI,eAAe,OAAO,gBAAgB;AAE1C,YAAI,CAAC,cAAc;AACjB,cAAI;AACF,2BAAe,OAAO,OAAO,sBAAsB,KAAK;AAAA,UAC1D,QAAQ;AACN,2BAAe;AAAA,UACjB;AACA,iBAAO,eAAe;AAAA,QACxB;AAEA,YAAI,CAAC,eAAe,kBAAkB,GAAG;AACvC,iBAAO;AAAA,QACT;AAEA,wBAAgB,YAAY,oBAAoB,SAAS,IAAI;AAC7D,uBAAe,kBAAkB,CAAC,eAAe,MAAM,CAAC;AAExD,cAAM,UAAsC,cAAc,SACtD,EAAE,QAAQ,aAAa,OAAO,IAC9B;AAEJ,eAAO;AAAA,UACL;AAAA,UACA,QAAS,MAAM,OAAO,OAAO;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd;AAAA,UACE,OAAO;AAAA,UACP,sBAAsB,IAAI,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAC9F;AACA,eAAO;AAAA,MACT,UAAE;AACA,sBAAc,QAAQ;AACtB,uBAAe,QAAQ;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,QACJ;AAAA,IACC,CACE,WAIW,OAAO,WAAW;AAAA,EACjC,EACC,IAAI,YAAU,OAAO,KAAK,EAC1B;AAAA,IACC,CAAC,WACC,WAAW;AAAA,EACf;AACJ;;;AF/DA,SAAS,YAAY,OAAyD;AAC5E,SACE,SAAS,KAAK,KAAK,MAAM,SAAS,UAAU,OAAO,MAAM,SAAS;AAEtE;AAEA,SAAS,aAAa,OAA4C;AAChE,SAAO,SAAS,KAAK,KAAK,MAAM,SAAS;AAC3C;AAEA,SAAS,qBAAqB,OAAwB;AACpD,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO,OAAO,SAAS,EAAE;AAC/C,SAAO,OAAO,QAAQ,KAAK,EACxB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACxD,KAAK,IAAI;AACd;AAEA,SAAS,wBAAwB,QAAyB;AACxD,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,OACJ,IAAI,UAAQ;AACX,UAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO,OAAO,QAAQ,EAAE;AAC/D,UAAI,aAAa,IAAI,EAAG,QAAO;AAC/B,UAAI,YAAY,IAAI,EAAG,QAAO,KAAK;AACnC,aAAO,KAAK,UAAU,IAAI;AAAA,IAC5B,CAAC,EACA,KAAK,IAAI;AAAA,EACd;AACA,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,MAAM;AACpE;AAEA,SAAS,yBAAyB,SAAsC;AACtE,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,MAAM,QAAQ,OAAO,EAAG,QAAO;AACnC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACF,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B,QAAQ;AACN,WAAO,OAAO,OAAO;AAAA,EACvB;AACF;AAEO,IAAM,cAAcC,SAAQ,YAA6B;AAC9D,QAAM,YAAY,MAAM,WAGtB,EAAE,QAAQ,aAAa,GAAG,uBAAuB,OAAO;AAE1D,QAAM,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAE7C,SAAO,UAAU,QAAQ,CAAC,EAAE,QAAQ,QAAQ,EAAE,MAAM,EAAE,MAAM;AAC1D,UAAM,aAAa,0BAA0B,OAAO,IAAI;AAExD,WAAO,MACJ,IAAI,CAAC,SAAsB;AAC1B,YAAM,WAAW,0BAA0B,KAAK,IAAI;AACpD,YAAM,OAAO,QAAQ,UAAU,KAAK,QAAQ;AAE5C,UACE,KAAK,WAAW,YAAY,KAC5B,CAAC,uBAAuB,IAAI,IAAI,GAChC;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL;AAAA,QACA,mBAAmB,KAAK,eAAe;AAAA,QACvC,MAAM,YAAY;AAChB,iBAAO;AAAA,QACT;AAAA,QACA,oBAAoB;AAClB,iBAAO,KAAK,aAAa,gBAAgB;AAAA,QAC3C;AAAA,QACA,aAAa;AACX,iBAAO,KAAK,aAAa,gBAAgB;AAAA,QAC3C;AAAA,QACA,MAAM,cAAc;AAClB,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QACA,MAAM,SAAS;AACb,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QACA;AAAA,QACA,iBAAiB,KAAK;AAAA,QACtB,mBAAmB;AACjB,iBAAO;AAAA,QACT;AAAA,QACA,MAAM,gBAAgB;AACpB,iBAAO,EAAE,QAAQ,KAAK;AAAA,QACxB;AAAA,QACA;AAAA,QACA,+BAA+B;AAC7B,iBAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,MAA+B,SAAS;AAClD,gBAAM,OAAO,MAAM,YAAY;AAAA,YAC7B;AAAA,YACA,MAAM,KAAK;AAAA,YACX;AAAA,YACA,WAAW,QAAQ;AAAA,YACnB,QAAQ,QAAQ,gBAAgB;AAAA,UAClC,CAAC;AACD,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN;AAAA,YACA,oBAAoB;AAAA,UACtB;AAAA,QACF;AAAA,QACA,iBAAiB;AACf,gBAAM,QAAQ,KAAK,aAAa,SAAS,KAAK;AAC9C,iBAAO,GAAG,OAAO,IAAI,MAAM,KAAK;AAAA,QAClC;AAAA,MACF;AAAA,IACF,CAAC,EACA,OAAO,CAAC,SAAuB,SAAS,IAAI;AAAA,EACjD,CAAC;AACH,CAAC;AAED,eAAe,YAAY;AAAA,EACzB,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAM6C;AAC3C,QAAM,YAAY,oBAAoB;AACtC,QAAM,gBAAgB,YAAY,oBAAoB,SAAS,IAAI;AACnE,QAAM,SAAS,kBAAkB,CAAC,QAAQ,eAAe,MAAM,CAAC;AAEhE,QAAM,OACJ,aAAa,UAAU,KAAK,IACxB,EAAE,wBAAwB,UAAU,IACpC;AAEN,MAAI;AACF,UAAM,UAAsC,QAAQ,SAChD,EAAE,QAAQ,OAAO,OAAO,IACxB;AAEJ,UAAM,YAAY,MAAM,OAAO;AAAA,MAC7B;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,GAAI,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,SAAS,qBAAqB,MAAM,SAAS;AAEnD,QAAI,OAAO,SAAS;AAClB,YAAM,cAAc,OAAO,QAAQ,KAAK,UAAQ,KAAK,SAAS,MAAM;AAEpE,YAAM,aACJ,SAAS,SAAS,KAAK,OAAO,UAAU,UAAU,WAC9C,UAAU,QACV,SAAS,MAAM,KAAK,OAAO,OAAO,UAAU,WAC1C,OAAO,QACP;AAER,YAAM,UACJ,aAAa,MAAM,KAAK,KAAK,cAAc,sBAAsB,IAAI;AAEvE,kBAAY,MAAM,sBAAsB,IAAI,KAAK,OAAO,EAAE;AAC1D,YAAM,IAAI,MAAM,OAAO;AAAA,IACzB;AAEA,UAAM,aACJ,SAAS,SAAS,KAAK,UAAU,eAAe,SAC5C,UAAU,aACV,SAAS,MAAM,KAAK,OAAO,eAAe,SACxC,OAAO,aACP;AACR,QAAI,eAAe,OAAW,QAAO,OAAO,UAAU;AAEtD,QAAI,OAAO,sBAAsB,QAAW;AAC1C,aAAO,KAAK,UAAU,OAAO,iBAAiB;AAAA,IAChD;AAEA,UAAM,SAAkE,CAAC;AAEzE,eAAW,QAAQ,OAAO,SAAS;AACjC,cAAQ,KAAK,MAAM;AAAA,QACjB,KAAK;AACH,iBAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAC7C;AAAA,QACF,KAAK;AACH,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,MAAM,KAAK;AAAA,cACX,YAAY,KAAK;AAAA,YACnB;AAAA,UACF,CAAC;AACD;AAAA,QACF,SAAS;AACP,cAAI,OAAO;AACX,cAAI;AACF,mBAAO,KAAK,UAAU,IAAI;AAAA,UAC5B,QAAQ;AACN,mBAAO,OAAO,IAAI;AAAA,UACpB;AACA,iBAAO,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAClC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO,SAAS,IAAI,SAAS;AAAA,EACtC,UAAE;AACA,YAAQ,QAAQ;AAChB,mBAAe,QAAQ;AAAA,EACzB;AACF;;;AG5PA,SAAS,WAAAC,UAAS,iBAAiB;AAEnC,SAAS,+BAA+B;AAyBjC,IAAM,iBAAiBC,SAAQ,YAAyC;AAC7E,QAAM,UAAU,MAAM,WAGpB,EAAE,QAAQ,eAAe,GAAG,yBAAyB,SAAS;AAEhE,SAAO,QAAQ;AAAA,IAAQ,CAAC,EAAE,QAAQ,OAAO,MACvC,OAAO,SAAS,IAAI,YAAU;AAC5B,YAAM,aAAa,0BAA0B,OAAO,IAAI;AACxD,YAAM,YAAY,OAAO,aAAa,CAAC,GAAG,IAAI,SAAO,IAAI,IAAI;AAE7D,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,QAAQ,UAAU,KAAK,OAAO,IAAI;AAAA,QACxC,aAAa,OAAO,eAAe;AAAA,QACnC,WAAW;AAAA,QACX,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,iBAAiB;AACf,gBAAM,QAAQ,OAAO,OAAO,KAAK,KAAK,OAAO;AAC7C,iBAAO,GAAG,OAAO,IAAI,IAAI,KAAK;AAAA,QAChC;AAAA,QACA;AAAA,QACA,MAAM,oBAAoB,MAAc;AACtC,gBAAM,YAAY,KAAK,MAAM,GAAG;AAChC,iBAAO,MAAM;AAAA,YACX,EAAE,MAAM,OAAO,MAAM,OAAO;AAAA,YAC5B,UAAU,UAAU,SAAS;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAED,eAAsB,WACpB,EAAE,MAAM,OAAO,GACf,MACyB;AACzB,MAAI;AACF,UAAM,SAAS,MAAM,OAAO,OAAO,UAAU,EAAE,MAAM,WAAW,KAAK,CAAC;AAEtE,WAAO,OAAO,SAAS,IAAI,CAAC,YAA0B;AACpD,YAAM,UAAU,QAAQ;AACxB,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,iBAAO;AAAA,YACL,MAAM,QAAQ;AAAA,YACd,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,UAChD;AAAA,QACF,KAAK;AACH,iBAAO;AAAA,YACL,MAAM,QAAQ;AAAA,YACd,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,QAAQ;AAAA,kBACN,MAAM;AAAA,kBACN,MAAM,QAAQ;AAAA,kBACd,YAAY,QAAQ;AAAA,gBACtB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACE,iBAAO;AAAA,YACL,MAAM,QAAQ;AAAA,YACd,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM,gCAAgC,QAAQ,IAAI;AAAA,cACpD;AAAA,YACF;AAAA,UACF;AAAA,MACJ;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd;AAAA,MACE,OAAO;AAAA,MACP,0BAA0B,IAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAC5F;AACA,UAAM;AAAA,EACR;AACF;",
|
|
6
|
+
"names": ["config", "memoize", "memoize", "memoize", "memoize"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
|
|
4
|
-
// src/utils/session/sessionState.ts
|
|
1
|
+
// packages/core/src/utils/sessionState.ts
|
|
5
2
|
var isDebug = process.argv.includes("--debug") || process.argv.includes("-d") || process.env.DEBUG === "true";
|
|
6
3
|
var sessionState = {
|
|
7
4
|
modelErrors: {},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/core/src/utils/sessionState.ts"],
|
|
4
|
+
"sourcesContent": ["type SessionState = {\n modelErrors: Record<string, unknown>\n currentError: string | null\n [key: string]: unknown\n}\n\nconst isDebug =\n process.argv.includes('--debug') ||\n process.argv.includes('-d') ||\n process.env.DEBUG === 'true'\n\nconst sessionState: SessionState = {\n modelErrors: {},\n currentError: null,\n}\n\nfunction setSessionState<K extends keyof SessionState>(\n key: K,\n value: SessionState[K],\n): void\nfunction setSessionState(partialState: Partial<SessionState>): void\nfunction setSessionState(\n keyOrState: keyof SessionState | Partial<SessionState>,\n value?: any,\n): void {\n if (typeof keyOrState === 'string') {\n sessionState[keyOrState] = value\n } else {\n Object.assign(sessionState, keyOrState)\n }\n}\n\nfunction getSessionState(): SessionState\nfunction getSessionState<K extends keyof SessionState>(key: K): SessionState[K]\nfunction getSessionState<K extends keyof SessionState>(key?: K) {\n return key === undefined ? sessionState : sessionState[key]\n}\n\nexport type { SessionState }\nexport { setSessionState, getSessionState }\nexport default sessionState\n"],
|
|
5
|
+
"mappings": ";AAMA,IAAM,UACJ,QAAQ,KAAK,SAAS,SAAS,KAC/B,QAAQ,KAAK,SAAS,IAAI,KAC1B,QAAQ,IAAI,UAAU;AAExB,IAAM,eAA6B;AAAA,EACjC,aAAa,CAAC;AAAA,EACd,cAAc;AAChB;AAOA,SAAS,gBACP,YACA,OACM;AACN,MAAI,OAAO,eAAe,UAAU;AAClC,iBAAa,UAAU,IAAI;AAAA,EAC7B,OAAO;AACL,WAAO,OAAO,cAAc,UAAU;AAAA,EACxC;AACF;AAIA,SAAS,gBAA8C,KAAS;AAC9D,SAAO,QAAQ,SAAY,eAAe,aAAa,GAAG;AAC5D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addMcpServer,
|
|
3
|
+
ensureConfigScope,
|
|
4
|
+
getClients,
|
|
5
|
+
getClientsForCliMcpConfig,
|
|
6
|
+
getMCPCommands,
|
|
7
|
+
getMCPTools,
|
|
8
|
+
getMcpServer,
|
|
9
|
+
getMcprcServerStatus,
|
|
10
|
+
listMCPServers,
|
|
11
|
+
listPluginMCPServers,
|
|
12
|
+
parseEnvVars,
|
|
13
|
+
parseMcpServersFromCliConfigEntries,
|
|
14
|
+
removeMcpServer,
|
|
15
|
+
runCommand
|
|
16
|
+
} from "./chunk-ZBVLKZ5V.js";
|
|
17
|
+
import "./chunk-M7P3QNRU.js";
|
|
18
|
+
import "./chunk-3OEJVB5A.js";
|
|
19
|
+
import "./chunk-BBJFHTBC.js";
|
|
20
|
+
import "./chunk-QHQOBUF6.js";
|
|
21
|
+
import "./chunk-W5EGGA44.js";
|
|
22
|
+
import "./chunk-DXD76CMV.js";
|
|
23
|
+
import "./chunk-LB6TCPDI.js";
|
|
24
|
+
import "./chunk-XR2W3MAM.js";
|
|
25
|
+
import "./chunk-B3MW3YGY.js";
|
|
26
|
+
import "./chunk-54KOYG5C.js";
|
|
27
|
+
export {
|
|
28
|
+
addMcpServer,
|
|
29
|
+
ensureConfigScope,
|
|
30
|
+
getClients,
|
|
31
|
+
getClientsForCliMcpConfig,
|
|
32
|
+
getMCPCommands,
|
|
33
|
+
getMCPTools,
|
|
34
|
+
getMcpServer,
|
|
35
|
+
getMcprcServerStatus,
|
|
36
|
+
listMCPServers,
|
|
37
|
+
listPluginMCPServers,
|
|
38
|
+
parseEnvVars,
|
|
39
|
+
parseMcpServersFromCliConfigEntries,
|
|
40
|
+
removeMcpServer,
|
|
41
|
+
runCommand
|
|
42
|
+
};
|
|
@@ -1,81 +1,119 @@
|
|
|
1
|
-
import
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
1
|
+
import "./chunk-LB6TCPDI.js";
|
|
3
2
|
import {
|
|
3
|
+
ConfigParseError,
|
|
4
4
|
DEFAULT_GLOBAL_CONFIG,
|
|
5
|
+
DEFAULT_PROJECT_CONFIG,
|
|
5
6
|
GLOBAL_CONFIG_KEYS,
|
|
6
7
|
PROJECT_CONFIG_KEYS,
|
|
7
8
|
TEST_MCPRC_CONFIG_FOR_TESTING,
|
|
9
|
+
__resetSettingSourcesForTests,
|
|
8
10
|
addMcprcServerForTesting,
|
|
11
|
+
applyModelConfigYamlImport,
|
|
9
12
|
checkHasTrustDialogAccepted,
|
|
10
13
|
clearMcprcConfigForTesting,
|
|
11
14
|
createGPT5ModelProfile,
|
|
15
|
+
defaultConfigForProject,
|
|
12
16
|
deleteConfigForCLI,
|
|
13
17
|
enableConfigs,
|
|
18
|
+
formatModelConfigYamlForSharing,
|
|
14
19
|
getAnthropicApiKey,
|
|
15
20
|
getConfigForCLI,
|
|
16
21
|
getCurrentProjectConfig,
|
|
17
22
|
getCustomApiKeyStatus,
|
|
18
23
|
getGPT5ConfigRecommendations,
|
|
19
24
|
getGlobalConfig,
|
|
25
|
+
getGlobalConfigFilePath,
|
|
26
|
+
getKodeBaseDir,
|
|
27
|
+
getLocalSettingsPath,
|
|
20
28
|
getMcprcConfig,
|
|
21
29
|
getOpenAIApiKey,
|
|
22
30
|
getOrCreateUserID,
|
|
23
31
|
getProjectMcpServerDefinitions,
|
|
32
|
+
getSettingsFileCandidates,
|
|
24
33
|
isAutoUpdaterDisabled,
|
|
25
34
|
isAutoUpdaterStatus,
|
|
26
35
|
isGPT5ModelName,
|
|
27
36
|
isGlobalConfigKey,
|
|
28
37
|
isProjectConfigKey,
|
|
38
|
+
isSettingSourceEnabled,
|
|
29
39
|
listConfigForCLI,
|
|
40
|
+
loadSettingsWithLegacyFallback,
|
|
30
41
|
normalizeApiKeyForConfig,
|
|
42
|
+
parseModelConfigYaml,
|
|
43
|
+
readLocalSettings,
|
|
44
|
+
readSettingsFile,
|
|
31
45
|
removeMcprcServerForTesting,
|
|
32
46
|
saveCurrentProjectConfig,
|
|
33
47
|
saveGlobalConfig,
|
|
48
|
+
saveSettingsToPrimaryAndSyncLegacy,
|
|
34
49
|
setAllPointersToModel,
|
|
35
50
|
setConfigForCLI,
|
|
51
|
+
setEnabledSettingSourcesFromCli,
|
|
36
52
|
setModelPointer,
|
|
53
|
+
testGPT5Connection,
|
|
54
|
+
updateLocalSettings,
|
|
37
55
|
validateAndRepairAllGPT5Profiles,
|
|
38
|
-
validateAndRepairGPT5Profile
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-JC6NCUG5.js";
|
|
56
|
+
validateAndRepairGPT5Profile,
|
|
57
|
+
validateGPT5Config,
|
|
58
|
+
writeSettingsFile
|
|
59
|
+
} from "./chunk-XR2W3MAM.js";
|
|
60
|
+
import "./chunk-B3MW3YGY.js";
|
|
61
|
+
import "./chunk-54KOYG5C.js";
|
|
45
62
|
export {
|
|
63
|
+
ConfigParseError,
|
|
46
64
|
DEFAULT_GLOBAL_CONFIG,
|
|
65
|
+
DEFAULT_PROJECT_CONFIG,
|
|
47
66
|
GLOBAL_CONFIG_KEYS,
|
|
48
67
|
PROJECT_CONFIG_KEYS,
|
|
49
68
|
TEST_MCPRC_CONFIG_FOR_TESTING,
|
|
69
|
+
__resetSettingSourcesForTests,
|
|
50
70
|
addMcprcServerForTesting,
|
|
71
|
+
applyModelConfigYamlImport,
|
|
51
72
|
checkHasTrustDialogAccepted,
|
|
52
73
|
clearMcprcConfigForTesting,
|
|
53
74
|
createGPT5ModelProfile,
|
|
75
|
+
defaultConfigForProject,
|
|
54
76
|
deleteConfigForCLI,
|
|
55
77
|
enableConfigs,
|
|
78
|
+
formatModelConfigYamlForSharing,
|
|
56
79
|
getAnthropicApiKey,
|
|
57
80
|
getConfigForCLI,
|
|
58
81
|
getCurrentProjectConfig,
|
|
59
82
|
getCustomApiKeyStatus,
|
|
60
83
|
getGPT5ConfigRecommendations,
|
|
61
84
|
getGlobalConfig,
|
|
85
|
+
getGlobalConfigFilePath,
|
|
86
|
+
getKodeBaseDir,
|
|
87
|
+
getLocalSettingsPath,
|
|
62
88
|
getMcprcConfig,
|
|
63
89
|
getOpenAIApiKey,
|
|
64
90
|
getOrCreateUserID,
|
|
65
91
|
getProjectMcpServerDefinitions,
|
|
92
|
+
getSettingsFileCandidates,
|
|
66
93
|
isAutoUpdaterDisabled,
|
|
67
94
|
isAutoUpdaterStatus,
|
|
68
95
|
isGPT5ModelName,
|
|
69
96
|
isGlobalConfigKey,
|
|
70
97
|
isProjectConfigKey,
|
|
98
|
+
isSettingSourceEnabled,
|
|
71
99
|
listConfigForCLI,
|
|
100
|
+
loadSettingsWithLegacyFallback,
|
|
72
101
|
normalizeApiKeyForConfig,
|
|
102
|
+
parseModelConfigYaml,
|
|
103
|
+
readLocalSettings,
|
|
104
|
+
readSettingsFile,
|
|
73
105
|
removeMcprcServerForTesting,
|
|
74
106
|
saveCurrentProjectConfig,
|
|
75
107
|
saveGlobalConfig,
|
|
108
|
+
saveSettingsToPrimaryAndSyncLegacy,
|
|
76
109
|
setAllPointersToModel,
|
|
77
110
|
setConfigForCLI,
|
|
111
|
+
setEnabledSettingSourcesFromCli,
|
|
78
112
|
setModelPointer,
|
|
113
|
+
testGPT5Connection,
|
|
114
|
+
updateLocalSettings,
|
|
79
115
|
validateAndRepairAllGPT5Profiles,
|
|
80
|
-
validateAndRepairGPT5Profile
|
|
116
|
+
validateAndRepairGPT5Profile,
|
|
117
|
+
validateGPT5Config,
|
|
118
|
+
writeSettingsFile
|
|
81
119
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addToTotalCost,
|
|
3
|
+
formatTotalCost,
|
|
4
|
+
getTotalAPIDuration,
|
|
5
|
+
getTotalCost,
|
|
6
|
+
getTotalDuration,
|
|
7
|
+
registerCostSummaryOnExit,
|
|
8
|
+
resetStateForTests
|
|
9
|
+
} from "./chunk-6BAS4WY6.js";
|
|
10
|
+
import "./chunk-GELCZWMB.js";
|
|
11
|
+
import "./chunk-3OEJVB5A.js";
|
|
12
|
+
import "./chunk-BBJFHTBC.js";
|
|
13
|
+
import "./chunk-QHQOBUF6.js";
|
|
14
|
+
import "./chunk-W5EGGA44.js";
|
|
15
|
+
import "./chunk-DXD76CMV.js";
|
|
16
|
+
import "./chunk-LB6TCPDI.js";
|
|
17
|
+
import "./chunk-XR2W3MAM.js";
|
|
18
|
+
import "./chunk-B3MW3YGY.js";
|
|
19
|
+
import "./chunk-54KOYG5C.js";
|
|
20
|
+
export {
|
|
21
|
+
addToTotalCost,
|
|
22
|
+
formatTotalCost,
|
|
23
|
+
getTotalAPIDuration,
|
|
24
|
+
getTotalCost,
|
|
25
|
+
getTotalDuration,
|
|
26
|
+
registerCostSummaryOnExit,
|
|
27
|
+
resetStateForTests
|
|
28
|
+
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
executeBashCommands,
|
|
5
3
|
getCustomCommandDirectories,
|
|
@@ -8,12 +6,17 @@ import {
|
|
|
8
6
|
parseFrontmatter,
|
|
9
7
|
reloadCustomCommands,
|
|
10
8
|
resolveFileReferences
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-RPJXO7GG.js";
|
|
10
|
+
import "./chunk-M7P3QNRU.js";
|
|
11
|
+
import "./chunk-4CRUCZR4.js";
|
|
12
|
+
import "./chunk-YIO5EBMQ.js";
|
|
13
|
+
import "./chunk-3OEJVB5A.js";
|
|
14
|
+
import "./chunk-BBJFHTBC.js";
|
|
15
|
+
import "./chunk-QHQOBUF6.js";
|
|
16
|
+
import "./chunk-W5EGGA44.js";
|
|
17
|
+
import "./chunk-DXD76CMV.js";
|
|
18
|
+
import "./chunk-B3MW3YGY.js";
|
|
19
|
+
import "./chunk-54KOYG5C.js";
|
|
17
20
|
export {
|
|
18
21
|
executeBashCommands,
|
|
19
22
|
getCustomCommandDirectories,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildSystemPromptForSession,
|
|
3
|
+
getSessionContext,
|
|
4
|
+
runTurn,
|
|
5
|
+
runTurnEvents
|
|
6
|
+
} from "./chunk-4A46ZXMJ.js";
|
|
7
|
+
import {
|
|
8
|
+
query
|
|
9
|
+
} from "./chunk-TNWB3U5Y.js";
|
|
10
|
+
import "./chunk-UVDJL6ZZ.js";
|
|
11
|
+
import "./chunk-CDGRYGPZ.js";
|
|
12
|
+
import "./chunk-HPYNW6TT.js";
|
|
13
|
+
import "./chunk-LOD5ZHCI.js";
|
|
14
|
+
import "./chunk-3BYE3ME6.js";
|
|
15
|
+
import "./chunk-M7P3QNRU.js";
|
|
16
|
+
import "./chunk-SWQV4KSY.js";
|
|
17
|
+
import "./chunk-LOCXPQNJ.js";
|
|
18
|
+
import "./chunk-ZCLTZIVP.js";
|
|
19
|
+
import "./chunk-4CRUCZR4.js";
|
|
20
|
+
import "./chunk-BHDHXOXB.js";
|
|
21
|
+
import "./chunk-HRJ3ICQK.js";
|
|
22
|
+
import "./chunk-6ZWEOSEI.js";
|
|
23
|
+
import "./chunk-YIO5EBMQ.js";
|
|
24
|
+
import "./chunk-3OEJVB5A.js";
|
|
25
|
+
import "./chunk-BBJFHTBC.js";
|
|
26
|
+
import "./chunk-QHQOBUF6.js";
|
|
27
|
+
import "./chunk-W5EGGA44.js";
|
|
28
|
+
import "./chunk-DXD76CMV.js";
|
|
29
|
+
import "./chunk-LB6TCPDI.js";
|
|
30
|
+
import "./chunk-XR2W3MAM.js";
|
|
31
|
+
import "./chunk-B3MW3YGY.js";
|
|
32
|
+
import "./chunk-54KOYG5C.js";
|
|
33
|
+
export {
|
|
34
|
+
buildSystemPromptForSession,
|
|
35
|
+
getSessionContext,
|
|
36
|
+
query,
|
|
37
|
+
runTurn,
|
|
38
|
+
runTurnEvents
|
|
39
|
+
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
GLOBAL_CONFIG_FILE,
|
|
5
3
|
KODE_BASE_DIR,
|
|
@@ -8,9 +6,13 @@ import {
|
|
|
8
6
|
getGlobalConfigFilePath,
|
|
9
7
|
getKodeBaseDir,
|
|
10
8
|
getMemoryDir
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-3OEJVB5A.js";
|
|
10
|
+
import "./chunk-BBJFHTBC.js";
|
|
11
|
+
import "./chunk-QHQOBUF6.js";
|
|
12
|
+
import "./chunk-W5EGGA44.js";
|
|
13
|
+
import "./chunk-DXD76CMV.js";
|
|
14
|
+
import "./chunk-B3MW3YGY.js";
|
|
15
|
+
import "./chunk-54KOYG5C.js";
|
|
14
16
|
export {
|
|
15
17
|
GLOBAL_CONFIG_FILE,
|
|
16
18
|
KODE_BASE_DIR,
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
getKodeAgentSessionId,
|
|
5
3
|
resetKodeAgentSessionIdForTests,
|
|
6
4
|
setKodeAgentSessionId
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-SWQV4KSY.js";
|
|
6
|
+
import "./chunk-54KOYG5C.js";
|
|
9
7
|
export {
|
|
10
8
|
getKodeAgentSessionId,
|
|
11
9
|
resetKodeAgentSessionIdForTests,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
findMostRecentKodeAgentSessionId,
|
|
3
|
+
loadKodeAgentSessionLogData,
|
|
4
|
+
loadKodeAgentSessionMessages
|
|
5
|
+
} from "./chunk-TNGVRTO5.js";
|
|
6
|
+
import "./chunk-UVDJL6ZZ.js";
|
|
7
|
+
import "./chunk-SWQV4KSY.js";
|
|
8
|
+
import "./chunk-QHQOBUF6.js";
|
|
9
|
+
import "./chunk-DXD76CMV.js";
|
|
10
|
+
import "./chunk-54KOYG5C.js";
|
|
11
|
+
export {
|
|
12
|
+
findMostRecentKodeAgentSessionId,
|
|
13
|
+
loadKodeAgentSessionLogData,
|
|
14
|
+
loadKodeAgentSessionMessages
|
|
15
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
listKodeAgentSessions,
|
|
3
|
+
resolveResumeSessionIdentifier
|
|
4
|
+
} from "./chunk-HJYOH4HC.js";
|
|
5
|
+
import "./chunk-UVDJL6ZZ.js";
|
|
6
|
+
import "./chunk-SWQV4KSY.js";
|
|
7
|
+
import "./chunk-QHQOBUF6.js";
|
|
8
|
+
import "./chunk-DXD76CMV.js";
|
|
9
|
+
import "./chunk-54KOYG5C.js";
|
|
10
|
+
export {
|
|
11
|
+
listKodeAgentSessions,
|
|
12
|
+
resolveResumeSessionIdentifier
|
|
13
|
+
};
|
|
@@ -1,15 +1,32 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
kodeMessageToSdkMessage,
|
|
5
3
|
makeSdkResultMessage
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import
|
|
8
|
-
createUserMessage
|
|
9
|
-
} from "./chunk-RZWOUA25.js";
|
|
10
|
-
import "./chunk-JC6NCUG5.js";
|
|
4
|
+
} from "./chunk-CDGRYGPZ.js";
|
|
5
|
+
import "./chunk-54KOYG5C.js";
|
|
11
6
|
|
|
12
|
-
// src/utils/
|
|
7
|
+
// packages/protocol/src/utils/kodeAgentStreamJsonSession.ts
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
10
|
+
}
|
|
11
|
+
function extractAssistantTextFromMessage(message) {
|
|
12
|
+
if (!isRecord(message) || message.type !== "assistant") return "";
|
|
13
|
+
const msg = isRecord(message.message) ? message.message : null;
|
|
14
|
+
const content = msg?.content;
|
|
15
|
+
if (!Array.isArray(content)) return "";
|
|
16
|
+
for (const block of content) {
|
|
17
|
+
const record = isRecord(block) ? block : null;
|
|
18
|
+
if (!record) continue;
|
|
19
|
+
if (record.type === "text" && typeof record.text === "string") {
|
|
20
|
+
return record.text;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
function extractAssistantUsage(message) {
|
|
26
|
+
if (!isRecord(message) || message.type !== "assistant") return void 0;
|
|
27
|
+
const msg = isRecord(message.message) ? message.message : null;
|
|
28
|
+
return msg?.usage;
|
|
29
|
+
}
|
|
13
30
|
async function runKodeAgentStreamJsonSession(args) {
|
|
14
31
|
const conversation = [...args.initialMessages ?? []];
|
|
15
32
|
const seenUserUuids = /* @__PURE__ */ new Set();
|
|
@@ -20,17 +37,15 @@ async function runKodeAgentStreamJsonSession(args) {
|
|
|
20
37
|
} catch {
|
|
21
38
|
return;
|
|
22
39
|
}
|
|
23
|
-
const
|
|
40
|
+
const sdkUserRecord = isRecord(sdkUser) ? sdkUser : null;
|
|
41
|
+
const sdkMessage = isRecord(sdkUserRecord?.message) ? sdkUserRecord?.message : null;
|
|
24
42
|
const sdkContent = sdkMessage?.content;
|
|
25
43
|
if (typeof sdkContent !== "string" && !Array.isArray(sdkContent)) {
|
|
26
44
|
throw new Error("Error: Invalid stream-json user message content");
|
|
27
45
|
}
|
|
28
|
-
const providedUuid = typeof
|
|
29
|
-
const userMsg = createUserMessage(sdkContent);
|
|
30
|
-
if (providedUuid) {
|
|
31
|
-
userMsg.uuid = providedUuid;
|
|
32
|
-
}
|
|
46
|
+
const providedUuid = typeof sdkUserRecord?.uuid === "string" && sdkUserRecord.uuid ? String(sdkUserRecord.uuid) : null;
|
|
33
47
|
const isDuplicate = Boolean(providedUuid && seenUserUuids.has(providedUuid));
|
|
48
|
+
const userMsg = args.makeUserMessage(sdkContent, providedUuid);
|
|
34
49
|
if (args.replayUserMessages) {
|
|
35
50
|
const sdkUserOut = kodeMessageToSdkMessage(userMsg, args.sessionId);
|
|
36
51
|
if (sdkUserOut) args.writeSdkLine(sdkUserOut);
|
|
@@ -49,15 +64,16 @@ async function runKodeAgentStreamJsonSession(args) {
|
|
|
49
64
|
const toAppend = [];
|
|
50
65
|
try {
|
|
51
66
|
const inputForTurn = [...conversation];
|
|
67
|
+
const toolUseContext = {
|
|
68
|
+
...args.toolUseContextBase,
|
|
69
|
+
abortController: turnAbortController
|
|
70
|
+
};
|
|
52
71
|
for await (const m of args.query(
|
|
53
72
|
inputForTurn,
|
|
54
73
|
args.systemPrompt,
|
|
55
74
|
args.context,
|
|
56
75
|
args.canUseTool,
|
|
57
|
-
|
|
58
|
-
...args.toolUseContextBase,
|
|
59
|
-
abortController: turnAbortController
|
|
60
|
-
}
|
|
76
|
+
toolUseContext
|
|
61
77
|
)) {
|
|
62
78
|
if (m.type === "assistant") lastAssistant = m;
|
|
63
79
|
if (m.type !== "progress") {
|
|
@@ -76,10 +92,8 @@ async function runKodeAgentStreamJsonSession(args) {
|
|
|
76
92
|
args.onActiveTurnAbortControllerChanged?.(null);
|
|
77
93
|
}
|
|
78
94
|
conversation.push(...toAppend);
|
|
79
|
-
const textFromAssistant = lastAssistant
|
|
80
|
-
|
|
81
|
-
)?.text;
|
|
82
|
-
const resultText = typeof textFromAssistant === "string" ? textFromAssistant : queryError instanceof Error ? queryError.message : queryError ? String(queryError) : "";
|
|
95
|
+
const textFromAssistant = extractAssistantTextFromMessage(lastAssistant);
|
|
96
|
+
const resultText = typeof textFromAssistant === "string" && textFromAssistant ? textFromAssistant : queryError instanceof Error ? queryError.message : queryError ? String(queryError) : "";
|
|
83
97
|
let structuredOutput;
|
|
84
98
|
if (args.jsonSchema && !queryError) {
|
|
85
99
|
try {
|
|
@@ -89,7 +103,7 @@ async function runKodeAgentStreamJsonSession(args) {
|
|
|
89
103
|
return m ? m[1].trim() : fenced;
|
|
90
104
|
})();
|
|
91
105
|
const parsed = JSON.parse(unfenced);
|
|
92
|
-
const Ajv =
|
|
106
|
+
const { default: Ajv } = await import("ajv");
|
|
93
107
|
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
94
108
|
const validate = ajv.compile(args.jsonSchema);
|
|
95
109
|
const ok = validate(parsed);
|
|
@@ -107,7 +121,7 @@ async function runKodeAgentStreamJsonSession(args) {
|
|
|
107
121
|
queryError = e;
|
|
108
122
|
}
|
|
109
123
|
}
|
|
110
|
-
const usage = lastAssistant
|
|
124
|
+
const usage = extractAssistantUsage(lastAssistant);
|
|
111
125
|
const durationMs = Date.now() - startedAt;
|
|
112
126
|
const totalCostUsd = Math.max(0, args.getTotalCostUsd() - costBefore);
|
|
113
127
|
const isError = Boolean(queryError) || turnAbortController.signal.aborted;
|