@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
package/dist/llm-ZUQC4WYM.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/services/ai/llm.ts", "../src/utils/system/http.ts", "../src/services/system/vcr.ts", "../src/services/ai/adapters/base.ts", "../src/services/ai/adapters/openaiAdapter.ts", "../src/services/ai/adapters/responsesAPI.ts", "../src/services/ai/adapters/chatCompletions.ts", "../src/constants/modelCapabilities.ts", "../src/services/ai/modelAdapterFactory.ts", "../src/services/ai/responseStateManager.ts", "../src/utils/tooling/toolUsePartialJson.ts", "../src/utils/model/openaiMessageConversion.ts"],
|
|
4
|
-
"sourcesContent": ["import '@anthropic-ai/sdk/shims/node'\nimport Anthropic, { APIConnectionError, APIError } from '@anthropic-ai/sdk'\nimport { StreamingEvent } from './adapters/base'\nimport { AnthropicBedrock } from '@anthropic-ai/bedrock-sdk'\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk'\nimport type { BetaUsage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'\nimport chalk from 'chalk'\nimport { createHash, randomUUID, UUID } from 'crypto'\nimport 'dotenv/config'\n\nimport { addToTotalCost } from '@costTracker'\nimport models from '@constants/models'\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { Tool, getToolDescription } from '@tool'\nimport {\n getAnthropicApiKey,\n getGlobalConfig,\n ModelProfile,\n} from '@utils/config'\nimport { logError } from '@utils/log'\nimport { USER_AGENT } from '@utils/system/http'\nimport {\n createAssistantAPIErrorMessage,\n normalizeContentFromAPI,\n} from '@utils/messages'\nimport { countTokens } from '@utils/model/tokens'\nimport { setRequestStatus } from '@utils/session/requestStatus'\nimport { withVCR } from '@services/vcr'\nimport {\n debug as debugLogger,\n markPhase,\n getCurrentRequest,\n logLLMInteraction,\n logSystemPromptConstruction,\n logErrorWithDiagnosis,\n} from '@utils/log/debugLogger'\nimport {\n MessageContextManager,\n createRetentionStrategy,\n} from '@utils/session/messageContextManager'\nimport { getModelManager } from '@utils/model'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { BetaMessageStream } from '@anthropic-ai/sdk/lib/BetaMessageStream.mjs'\nimport { ModelAdapterFactory } from './modelAdapterFactory'\nimport { UnifiedRequestParams } from '@kode-types/modelCapabilities'\nimport { responseStateManager, getConversationId } from './responseStateManager'\nimport type { ToolUseContext } from '@tool'\nimport type {\n Message as APIMessage,\n MessageParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { USE_BEDROCK, USE_VERTEX } from '@utils/model'\nimport { getCLISyspromptPrefix } from '@constants/prompts'\nimport { getVertexRegionForModel } from '@utils/model'\nimport OpenAI from 'openai'\nimport type { ChatCompletionStream } from 'openai/lib/ChatCompletionStream'\nimport { ContentBlock } from '@anthropic-ai/sdk/resources/messages/messages'\nimport { nanoid } from 'nanoid'\nimport {\n getCompletionWithProfile,\n getGPT5CompletionWithProfile,\n} from './openai'\nimport { getReasoningEffort } from '@utils/model/thinking'\nimport { parseToolUsePartialJsonOrThrow } from '@utils/tooling/toolUsePartialJson'\nimport { convertAnthropicMessagesToOpenAIMessages as convertAnthropicMessagesToOpenAIMessagesUtil } from '@utils/model/openaiMessageConversion'\nimport { generateKodeContext, refreshKodeContext } from '@services/kodeContext'\nimport {\n API_ERROR_MESSAGE_PREFIX,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n MAIN_QUERY_TEMPERATURE,\n NO_CONTENT_MESSAGE,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n} from './llmConstants'\n\nfunction isGPT5Model(modelName: string): boolean {\n return modelName.startsWith('gpt-5')\n}\n\nfunction getModelConfigForDebug(model: string): {\n modelName: string\n provider: string\n apiKeyStatus: 'configured' | 'missing' | 'invalid'\n baseURL?: string\n maxTokens?: number\n reasoningEffort?: string\n isStream?: boolean\n temperature?: number\n} {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n\n const modelProfile = modelManager.getModel('main')\n\n let apiKeyStatus: 'configured' | 'missing' | 'invalid' = 'missing'\n let baseURL: string | undefined\n let maxTokens: number | undefined\n let reasoningEffort: string | undefined\n\n if (modelProfile) {\n apiKeyStatus = modelProfile.apiKey ? 'configured' : 'missing'\n baseURL = modelProfile.baseURL\n maxTokens = modelProfile.maxTokens\n reasoningEffort = modelProfile.reasoningEffort\n } else {\n apiKeyStatus = 'missing'\n maxTokens = undefined\n reasoningEffort = undefined\n }\n\n return {\n modelName: model,\n provider: modelProfile?.provider || config.primaryProvider || 'anthropic',\n apiKeyStatus,\n baseURL,\n maxTokens,\n reasoningEffort,\n isStream: config.stream || false,\n temperature: MAIN_QUERY_TEMPERATURE,\n }\n}\n\nexport { generateKodeContext, refreshKodeContext }\n\ninterface StreamResponse extends APIMessage {\n ttftMs?: number\n}\n\nexport {\n API_ERROR_MESSAGE_PREFIX,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n NO_CONTENT_MESSAGE,\n MAIN_QUERY_TEMPERATURE,\n}\nconst PROMPT_CACHING_ENABLED = !process.env.DISABLE_PROMPT_CACHING\n\nconst HAIKU_COST_PER_MILLION_INPUT_TOKENS = 0.8\nconst HAIKU_COST_PER_MILLION_OUTPUT_TOKENS = 4\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 1\nconst HAIKU_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.08\n\nconst SONNET_COST_PER_MILLION_INPUT_TOKENS = 3\nconst SONNET_COST_PER_MILLION_OUTPUT_TOKENS = 15\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS = 3.75\nconst SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS = 0.3\n\nconst MAX_RETRIES = process.env.USER_TYPE === 'SWE_BENCH' ? 100 : 10\nconst BASE_DELAY_MS = 500\n\ninterface RetryOptions {\n maxRetries?: number\n signal?: AbortSignal\n}\n\nfunction abortableDelay(delayMs: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Request was aborted'))\n return\n }\n\n const timeoutId = setTimeout(() => {\n resolve()\n }, delayMs)\n\n if (signal) {\n const abortHandler = () => {\n clearTimeout(timeoutId)\n reject(new Error('Request was aborted'))\n }\n signal.addEventListener('abort', abortHandler, { once: true })\n }\n })\n}\n\nfunction getRetryDelay(\n attempt: number,\n retryAfterHeader?: string | null,\n): number {\n if (retryAfterHeader) {\n const seconds = parseInt(retryAfterHeader, 10)\n if (!isNaN(seconds)) {\n return seconds * 1000\n }\n }\n return Math.min(BASE_DELAY_MS * Math.pow(2, attempt - 1), 32000)\n}\n\nfunction shouldRetry(error: APIError): boolean {\n if (error.message?.includes('\"type\":\"overloaded_error\"')) {\n return process.env.USER_TYPE === 'SWE_BENCH'\n }\n\n const shouldRetryHeader = error.headers?.['x-should-retry']\n\n if (shouldRetryHeader === 'true') return true\n if (shouldRetryHeader === 'false') return false\n\n if (error instanceof APIConnectionError) {\n return true\n }\n\n if (!error.status) return false\n\n if (error.status === 408) return true\n\n if (error.status === 409) return true\n\n if (error.status === 429) return true\n\n if (error.status && error.status >= 500) return true\n\n return false\n}\n\nasync function withRetry<T>(\n operation: (attempt: number) => Promise<T>,\n options: RetryOptions = {},\n): Promise<T> {\n const maxRetries = options.maxRetries ?? MAX_RETRIES\n let lastError: unknown\n\n for (let attempt = 1; attempt <= maxRetries + 1; attempt++) {\n try {\n return await operation(attempt)\n } catch (error) {\n lastError = error\n if (\n attempt > maxRetries ||\n !(error instanceof APIError) ||\n !shouldRetry(error)\n ) {\n throw error\n }\n\n if (options.signal?.aborted) {\n throw new Error('Request cancelled by user')\n }\n\n const retryAfter = error.headers?.['retry-after'] ?? null\n const delayMs = getRetryDelay(attempt, retryAfter)\n\n debugLogger.warn('LLM_API_RETRY', {\n name: error.name,\n message: error.message,\n status: error.status,\n attempt,\n maxRetries,\n delayMs,\n })\n\n try {\n await abortableDelay(delayMs, options.signal)\n } catch (delayError) {\n if (delayError.message === 'Request was aborted') {\n throw new Error('Request cancelled by user')\n }\n throw delayError\n }\n }\n }\n\n throw lastError\n}\n\nexport async function fetchAnthropicModels(\n baseURL: string,\n apiKey: string,\n): Promise<any[]> {\n try {\n const modelsURL = baseURL\n ? `${baseURL.replace(/\\/+$/, '')}/v1/models`\n : 'https://api.anthropic.com/v1/models'\n\n const response = await fetch(modelsURL, {\n method: 'GET',\n headers: {\n 'x-api-key': apiKey,\n 'anthropic-version': '2023-06-01',\n 'User-Agent': USER_AGENT,\n },\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error(\n 'Invalid API key. Please check your Anthropic API key and try again.',\n )\n } else if (response.status === 403) {\n throw new Error(\n 'API key does not have permission to access models. Please check your API key permissions.',\n )\n } else if (response.status === 429) {\n throw new Error(\n 'Too many requests. Please wait a moment and try again.',\n )\n } else if (response.status >= 500) {\n throw new Error(\n 'Anthropic service is temporarily unavailable. Please try again later.',\n )\n } else {\n throw new Error(\n `Unable to connect to Anthropic API (${response.status}). Please check your internet connection and API key.`,\n )\n }\n }\n\n const data = await response.json()\n return data.data || []\n } catch (error) {\n if (\n (error instanceof Error && error.message.includes('API key')) ||\n (error instanceof Error && error.message.includes('Anthropic'))\n ) {\n throw error\n }\n\n logError(error)\n debugLogger.warn('ANTHROPIC_MODELS_FETCH_FAILED', {\n error: error instanceof Error ? error.message : String(error),\n })\n throw new Error(\n 'Unable to connect to Anthropic API. Please check your internet connection and try again.',\n )\n }\n}\n\nexport async function verifyApiKey(\n apiKey: string,\n baseURL?: string,\n provider?: string,\n): Promise<boolean> {\n if (!apiKey) {\n return false\n }\n\n if (provider && provider !== 'anthropic') {\n try {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n }\n\n if (!baseURL) {\n debugLogger.warn('API_VERIFICATION_MISSING_BASE_URL', { provider })\n return false\n }\n\n const modelsURL = `${baseURL.replace(/\\/+$/, '')}/models`\n\n const response = await fetch(modelsURL, {\n method: 'GET',\n headers,\n })\n\n return response.ok\n } catch (error) {\n logError(error)\n debugLogger.warn('API_VERIFICATION_FAILED', {\n provider,\n error: error instanceof Error ? error.message : String(error),\n })\n return false\n }\n }\n\n const clientConfig: any = {\n apiKey,\n dangerouslyAllowBrowser: true,\n maxRetries: 3,\n defaultHeaders: {\n 'User-Agent': USER_AGENT,\n },\n }\n\n if (baseURL && (provider === 'anthropic' || provider === 'minimax-coding')) {\n clientConfig.baseURL = baseURL\n }\n\n const anthropic = new Anthropic(clientConfig)\n\n try {\n await withRetry(\n async () => {\n const model = 'claude-sonnet-4-20250514'\n const messages: MessageParam[] = [{ role: 'user', content: 'test' }]\n await anthropic.messages.create({\n model,\n max_tokens: 1000,\n messages,\n temperature: 0,\n })\n return true\n },\n { maxRetries: 2 },\n )\n return true\n } catch (error) {\n logError(error)\n if (\n error instanceof Error &&\n error.message.includes(\n '{\"type\":\"error\",\"error\":{\"type\":\"authentication_error\",\"message\":\"invalid x-api-key\"}}',\n )\n ) {\n return false\n }\n throw error\n }\n}\n\nfunction convertAnthropicMessagesToOpenAIMessages(\n messages: (UserMessage | AssistantMessage)[],\n): (\n | OpenAI.ChatCompletionMessageParam\n | OpenAI.ChatCompletionToolMessageParam\n)[] {\n return convertAnthropicMessagesToOpenAIMessagesUtil(messages as any)\n}\n\nfunction messageReducer(\n previous: OpenAI.ChatCompletionMessage,\n item: OpenAI.ChatCompletionChunk,\n): OpenAI.ChatCompletionMessage {\n const reduce = (acc: any, delta: OpenAI.ChatCompletionChunk.Choice.Delta) => {\n acc = { ...acc }\n for (const [key, value] of Object.entries(delta)) {\n if (acc[key] === undefined || acc[key] === null) {\n acc[key] = value\n if (Array.isArray(acc[key])) {\n for (const arr of acc[key]) {\n delete arr.index\n }\n }\n } else if (typeof acc[key] === 'string' && typeof value === 'string') {\n acc[key] += value\n } else if (typeof acc[key] === 'number' && typeof value === 'number') {\n acc[key] = value\n } else if (Array.isArray(acc[key]) && Array.isArray(value)) {\n const accArray = acc[key]\n for (let i = 0; i < value.length; i++) {\n const { index, ...chunkTool } = value[i]\n if (index - accArray.length > 1) {\n throw new Error(\n `Error: An array has an empty value when tool_calls are constructed. tool_calls: ${accArray}; tool: ${value}`,\n )\n }\n accArray[index] = reduce(accArray[index], chunkTool)\n }\n } else if (typeof acc[key] === 'object' && typeof value === 'object') {\n acc[key] = reduce(acc[key], value)\n }\n }\n return acc\n }\n\n const choice = item.choices?.[0]\n if (!choice) {\n return previous\n }\n return reduce(previous, choice.delta) as OpenAI.ChatCompletionMessage\n}\nasync function handleMessageStream(\n stream: ChatCompletionStream,\n signal?: AbortSignal,\n): Promise<OpenAI.ChatCompletion> {\n const streamStartTime = Date.now()\n let ttftMs: number | undefined\n let chunkCount = 0\n let errorCount = 0\n\n debugLogger.api('OPENAI_STREAM_START', {\n streamStartTime: String(streamStartTime),\n })\n\n let message = {} as OpenAI.ChatCompletionMessage\n\n let id, model, created, object, usage\n try {\n for await (const chunk of stream) {\n if (signal?.aborted) {\n debugLogger.flow('OPENAI_STREAM_ABORTED', {\n chunkCount,\n timestamp: Date.now(),\n })\n throw new Error('Request was cancelled')\n }\n\n chunkCount++\n\n try {\n if (!id) {\n id = chunk.id\n debugLogger.api('OPENAI_STREAM_ID_RECEIVED', {\n id,\n chunkNumber: String(chunkCount),\n })\n }\n if (!model) {\n model = chunk.model\n debugLogger.api('OPENAI_STREAM_MODEL_RECEIVED', {\n model,\n chunkNumber: String(chunkCount),\n })\n }\n if (!created) {\n created = chunk.created\n }\n if (!object) {\n object = chunk.object\n }\n if (!usage) {\n usage = chunk.usage\n }\n\n message = messageReducer(message, chunk)\n\n if (chunk?.choices?.[0]?.delta?.content) {\n if (!ttftMs) {\n ttftMs = Date.now() - streamStartTime\n debugLogger.api('OPENAI_STREAM_FIRST_TOKEN', {\n ttftMs: String(ttftMs),\n chunkNumber: String(chunkCount),\n })\n }\n }\n } catch (chunkError) {\n errorCount++\n debugLogger.error('OPENAI_STREAM_CHUNK_ERROR', {\n chunkNumber: String(chunkCount),\n errorMessage:\n chunkError instanceof Error\n ? chunkError.message\n : String(chunkError),\n errorType:\n chunkError instanceof Error\n ? chunkError.constructor.name\n : typeof chunkError,\n })\n }\n }\n\n debugLogger.api('OPENAI_STREAM_COMPLETE', {\n totalChunks: String(chunkCount),\n errorCount: String(errorCount),\n totalDuration: String(Date.now() - streamStartTime),\n ttftMs: String(ttftMs || 0),\n finalMessageId: id || 'undefined',\n })\n } catch (streamError) {\n debugLogger.error('OPENAI_STREAM_FATAL_ERROR', {\n totalChunks: String(chunkCount),\n errorCount: String(errorCount),\n errorMessage:\n streamError instanceof Error\n ? streamError.message\n : String(streamError),\n errorType:\n streamError instanceof Error\n ? streamError.constructor.name\n : typeof streamError,\n })\n throw streamError\n }\n return {\n id,\n created,\n model,\n object,\n choices: [\n {\n index: 0,\n message,\n finish_reason: 'stop',\n logprobs: undefined,\n },\n ],\n usage,\n }\n}\n\nfunction convertOpenAIResponseToAnthropic(\n response: OpenAI.ChatCompletion,\n tools?: Tool[],\n) {\n let contentBlocks: ContentBlock[] = []\n const message = response.choices?.[0]?.message\n if (!message) {\n return {\n role: 'assistant',\n content: [],\n stop_reason: response.choices?.[0]?.finish_reason,\n type: 'message',\n usage: response.usage,\n }\n }\n\n if (message?.tool_calls) {\n for (const toolCall of message.tool_calls) {\n const tool = toolCall.function\n const toolName = tool?.name\n let toolArgs = {}\n try {\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\n } catch (e) {\n }\n\n contentBlocks.push({\n type: 'tool_use',\n input: toolArgs,\n name: toolName,\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\n })\n }\n }\n\n if ((message as any).reasoning) {\n contentBlocks.push({\n type: 'thinking',\n thinking: (message as any).reasoning,\n signature: '',\n })\n }\n\n if ((message as any).reasoning_content) {\n contentBlocks.push({\n type: 'thinking',\n thinking: (message as any).reasoning_content,\n signature: '',\n })\n }\n\n if (message.content) {\n contentBlocks.push({\n type: 'text',\n text: message?.content,\n citations: [],\n })\n }\n\n const finalMessage = {\n role: 'assistant',\n content: contentBlocks,\n stop_reason: response.choices?.[0]?.finish_reason,\n type: 'message',\n usage: response.usage,\n }\n\n return finalMessage\n}\n\nlet anthropicClient: Anthropic | AnthropicBedrock | AnthropicVertex | null =\n null\n\nexport function getAnthropicClient(\n model?: string,\n): Anthropic | AnthropicBedrock | AnthropicVertex {\n const config = getGlobalConfig()\n const provider = config.primaryProvider\n\n if (anthropicClient && provider) {\n anthropicClient = null\n }\n\n if (anthropicClient) {\n return anthropicClient\n }\n\n const region = getVertexRegionForModel(model)\n\n const modelManager = getModelManager()\n const modelProfile = modelManager.getModel('main')\n\n const defaultHeaders: { [key: string]: string } = {\n 'x-app': 'cli',\n 'User-Agent': USER_AGENT,\n }\n\n if (process.env.ANTHROPIC_AUTH_TOKEN) {\n defaultHeaders['Authorization'] =\n `Bearer ${process.env.ANTHROPIC_AUTH_TOKEN}`\n }\n\n const ARGS = {\n defaultHeaders,\n maxRetries: 0,\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\n }\n if (USE_BEDROCK) {\n const client = new AnthropicBedrock(ARGS)\n anthropicClient = client\n return client\n }\n if (USE_VERTEX) {\n const vertexArgs = {\n ...ARGS,\n region: region || process.env.CLOUD_ML_REGION || 'us-east5',\n }\n const client = new AnthropicVertex(vertexArgs)\n anthropicClient = client\n return client\n }\n\n let apiKey: string\n let baseURL: string | undefined\n\n if (modelProfile) {\n apiKey = modelProfile.apiKey || ''\n baseURL = modelProfile.baseURL\n } else {\n apiKey = getAnthropicApiKey()\n baseURL = undefined\n }\n\n if (process.env.USER_TYPE === 'ant' && !apiKey && provider === 'anthropic') {\n console.error(\n chalk.red(\n '[ANT-ONLY] Missing API key. Configure an API key in your model profile or environment variables.',\n ),\n )\n }\n\n const clientConfig = {\n apiKey,\n dangerouslyAllowBrowser: true,\n ...ARGS,\n ...(baseURL && { baseURL }),\n }\n\n anthropicClient = new Anthropic(clientConfig)\n return anthropicClient\n}\n\nexport function resetAnthropicClient(): void {\n anthropicClient = null\n}\n\n\nfunction applyCacheControlWithLimits(\n systemBlocks: TextBlockParam[],\n messageParams: MessageParam[],\n): { systemBlocks: TextBlockParam[]; messageParams: MessageParam[] } {\n if (!PROMPT_CACHING_ENABLED) {\n return { systemBlocks, messageParams }\n }\n\n const maxCacheBlocks = 4\n let usedCacheBlocks = 0\n\n const processedSystemBlocks = systemBlocks.map((block, index) => {\n if (usedCacheBlocks < maxCacheBlocks && block.text.length > 1000) {\n usedCacheBlocks++\n return {\n ...block,\n cache_control: { type: 'ephemeral' as const },\n }\n }\n const { cache_control, ...blockWithoutCache } = block\n return blockWithoutCache\n })\n\n const processedMessageParams = messageParams.map((message, messageIndex) => {\n if (Array.isArray(message.content)) {\n const processedContent = message.content.map(\n (contentBlock, blockIndex) => {\n const shouldCache =\n usedCacheBlocks < maxCacheBlocks &&\n contentBlock.type === 'text' &&\n typeof contentBlock.text === 'string' &&\n (contentBlock.text.length > 2000 ||\n (messageIndex === messageParams.length - 1 &&\n blockIndex === message.content.length - 1 &&\n contentBlock.text.length > 500))\n\n if (shouldCache) {\n usedCacheBlocks++\n return {\n ...contentBlock,\n cache_control: { type: 'ephemeral' as const },\n }\n }\n\n const { cache_control, ...blockWithoutCache } = contentBlock as any\n return blockWithoutCache\n },\n )\n\n return {\n ...message,\n content: processedContent,\n }\n }\n\n return message\n })\n\n return {\n systemBlocks: processedSystemBlocks,\n messageParams: processedMessageParams,\n }\n}\n\nexport function userMessageToMessageParam(\n message: UserMessage,\n addCache = false,\n): MessageParam {\n if (addCache) {\n if (typeof message.message.content === 'string') {\n return {\n role: 'user',\n content: [\n {\n type: 'text',\n text: message.message.content,\n },\n ],\n }\n } else {\n return {\n role: 'user',\n content: message.message.content.map(_ => ({ ..._ })),\n }\n }\n }\n return {\n role: 'user',\n content: message.message.content,\n }\n}\n\nexport function assistantMessageToMessageParam(\n message: AssistantMessage,\n addCache = false,\n): MessageParam {\n if (addCache) {\n if (typeof message.message.content === 'string') {\n return {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: message.message.content,\n },\n ],\n }\n } else {\n return {\n role: 'assistant',\n content: message.message.content.map(_ => ({ ..._ })),\n }\n }\n }\n return {\n role: 'assistant',\n content: message.message.content,\n }\n}\n\nfunction splitSysPromptPrefix(systemPrompt: string[]): string[] {\n\n const systemPromptFirstBlock = systemPrompt[0] || ''\n const systemPromptRest = systemPrompt.slice(1)\n return [systemPromptFirstBlock, systemPromptRest.join('\\n')].filter(Boolean)\n}\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | import('@utils/config').ModelPointerType\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n toolUseContext?: ToolUseContext\n __testModelManager?: any\n __testQueryLLMWithPromptCaching?: any\n },\n): Promise<AssistantMessage> {\n const modelManager = options.__testModelManager ?? getModelManager()\n const modelResolution = modelManager.resolveModelWithInfo(options.model)\n\n if (!modelResolution.success || !modelResolution.profile) {\n const fallbackProfile = modelManager.resolveModel(options.model)\n if (!fallbackProfile) {\n throw new Error(\n modelResolution.error || `Failed to resolve model: ${options.model}`,\n )\n }\n\n debugLogger.warn('MODEL_RESOLUTION_FALLBACK', {\n inputParam: options.model,\n error: modelResolution.error,\n fallbackModelName: fallbackProfile.modelName,\n fallbackProvider: fallbackProfile.provider,\n requestId: getCurrentRequest()?.id,\n })\n\n modelResolution.success = true\n modelResolution.profile = fallbackProfile\n }\n\n const modelProfile = modelResolution.profile\n const resolvedModel = modelProfile.modelName\n\n const toolUseContext = options.toolUseContext\n if (toolUseContext && !toolUseContext.responseState) {\n const conversationId = getConversationId(\n toolUseContext.agentId,\n toolUseContext.messageId,\n )\n const previousResponseId =\n responseStateManager.getPreviousResponseId(conversationId)\n\n toolUseContext.responseState = {\n previousResponseId,\n conversationId,\n }\n }\n\n debugLogger.api('MODEL_RESOLVED', {\n inputParam: options.model,\n resolvedModelName: resolvedModel,\n provider: modelProfile.provider,\n isPointer: ['main', 'task', 'compact', 'quick'].includes(options.model),\n hasResponseState: !!toolUseContext?.responseState,\n conversationId: toolUseContext?.responseState?.conversationId,\n requestId: getCurrentRequest()?.id,\n })\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('LLM_REQUEST_START', {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n toolCount: tools.length,\n model: resolvedModel,\n originalModelParam: options.model,\n requestId: getCurrentRequest()?.id,\n })\n\n markPhase('LLM_CALL')\n\n try {\n const queryFn =\n options.__testQueryLLMWithPromptCaching ?? queryLLMWithPromptCaching\n const cleanOptions: any = { ...options }\n delete cleanOptions.__testModelManager\n delete cleanOptions.__testQueryLLMWithPromptCaching\n\n const runQuery = () =>\n queryFn(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n {\n ...cleanOptions,\n model: resolvedModel,\n modelProfile,\n toolUseContext,\n },\n )\n\n const result = options.__testQueryLLMWithPromptCaching\n ? await runQuery()\n : await withVCR(messages, runQuery)\n\n debugLogger.api('LLM_REQUEST_SUCCESS', {\n costUSD: result.costUSD,\n durationMs: result.durationMs,\n responseLength: result.message.content?.length || 0,\n requestId: getCurrentRequest()?.id,\n })\n\n if (toolUseContext?.responseState?.conversationId && result.responseId) {\n responseStateManager.setPreviousResponseId(\n toolUseContext.responseState.conversationId,\n result.responseId,\n )\n\n debugLogger.api('RESPONSE_STATE_UPDATED', {\n conversationId: toolUseContext.responseState.conversationId,\n responseId: result.responseId,\n requestId: getCurrentRequest()?.id,\n })\n }\n\n return result\n } catch (error) {\n logErrorWithDiagnosis(\n error,\n {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n model: options.model,\n toolCount: tools.length,\n phase: 'LLM_CALL',\n },\n currentRequest?.id,\n )\n\n throw error\n }\n}\n\nexport { formatSystemPromptWithContext } from '@services/systemPrompt'\n\nasync function queryLLMWithPromptCaching(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options.toolUseContext\n\n const modelProfile = options.modelProfile || modelManager.getModel('main')\n let provider: string\n\n if (modelProfile) {\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n } else {\n provider = config.primaryProvider || 'anthropic'\n }\n\n if (\n provider === 'anthropic' ||\n provider === 'bigdream' ||\n provider === 'opendev' ||\n provider === 'minimax-coding'\n ) {\n return queryAnthropicNative(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, modelProfile, toolUseContext },\n )\n }\n\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\n ...options,\n modelProfile,\n toolUseContext,\n })\n}\n\nasync function queryAnthropicNative(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options?: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options?.toolUseContext\n\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\n let anthropic: Anthropic | AnthropicBedrock | AnthropicVertex\n let model: string\n let provider: string\n\n debugLogger.api('MODEL_CONFIG_ANTHROPIC', {\n modelProfileFound: !!modelProfile,\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n modelProfileModelName: modelProfile?.modelName,\n modelProfileProvider: modelProfile?.provider,\n modelProfileBaseURL: modelProfile?.baseURL,\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\n optionsModel: options?.model,\n requestId: getCurrentRequest()?.id,\n })\n\n if (modelProfile) {\n model = modelProfile.modelName\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n\n if (\n modelProfile.provider === 'anthropic' ||\n modelProfile.provider === 'minimax-coding'\n ) {\n const clientConfig: any = {\n apiKey: modelProfile.apiKey,\n dangerouslyAllowBrowser: true,\n maxRetries: 0,\n timeout: parseInt(process.env.API_TIMEOUT_MS || String(60 * 1000), 10),\n defaultHeaders: {\n 'x-app': 'cli',\n 'User-Agent': USER_AGENT,\n },\n }\n\n if (modelProfile.baseURL) {\n clientConfig.baseURL = modelProfile.baseURL\n }\n\n anthropic = new Anthropic(clientConfig)\n } else {\n anthropic = getAnthropicClient(model)\n }\n } else {\n const errorDetails = {\n modelProfileExists: !!modelProfile,\n modelProfileModelName: modelProfile?.modelName,\n requestedModel: options?.model,\n requestId: getCurrentRequest()?.id,\n }\n debugLogger.error('ANTHROPIC_FALLBACK_ERROR', errorDetails)\n throw new Error(\n `No valid ModelProfile available for Anthropic provider. Please configure model through /model command. Debug: ${JSON.stringify(errorDetails)}`,\n )\n }\n\n if (options?.prependCLISysprompt) {\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\n\n systemPrompt = [getCLISyspromptPrefix(), ...systemPrompt]\n }\n\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\n _ => ({\n text: _,\n type: 'text',\n }),\n )\n\n const toolSchemas = await Promise.all(\n tools.map(\n async tool =>\n ({\n name: tool.name,\n description: getToolDescription(tool),\n input_schema:\n 'inputJSONSchema' in tool && tool.inputJSONSchema\n ? tool.inputJSONSchema\n : (zodToJsonSchema(tool.inputSchema as any) as any),\n }) as unknown as Anthropic.Beta.Messages.BetaTool,\n ),\n )\n\n const anthropicMessages = addCacheBreakpoints(messages)\n\n const { systemBlocks: processedSystem, messageParams: processedMessages } =\n applyCacheControlWithLimits(system, anthropicMessages)\n const startIncludingRetries = Date.now()\n\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [],\n finalPrompt: systemPrompt.join('\\n'),\n })\n\n let start = Date.now()\n let attemptNumber = 0\n let response\n\n try {\n response = await withRetry(\n async attempt => {\n attemptNumber = attempt\n start = Date.now()\n\n const params: Anthropic.Beta.Messages.MessageCreateParams = {\n model,\n max_tokens:\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\n messages: processedMessages,\n system: processedSystem,\n tools: toolSchemas.length > 0 ? toolSchemas : undefined,\n tool_choice: toolSchemas.length > 0 ? { type: 'auto' } : undefined,\n ...(options?.temperature !== undefined\n ? { temperature: options.temperature }\n : {}),\n ...(options?.stopSequences && options.stopSequences.length > 0\n ? { stop_sequences: options.stopSequences }\n : {}),\n }\n\n if (maxThinkingTokens > 0) {\n ;(params as any).extra_headers = {\n 'anthropic-beta': 'max-tokens-3-5-sonnet-2024-07-15',\n }\n ;(params as any).thinking = { max_tokens: maxThinkingTokens }\n }\n\n debugLogger.api('ANTHROPIC_API_CALL_START_STREAMING', {\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\n model,\n provider,\n apiKeyConfigured: !!modelProfile?.apiKey,\n apiKeyPrefix: modelProfile?.apiKey\n ? modelProfile.apiKey.substring(0, 8)\n : null,\n maxTokens: params.max_tokens,\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\n params: params,\n messageCount: params.messages?.length || 0,\n streamMode: true,\n toolsCount: toolSchemas.length,\n thinkingTokens: maxThinkingTokens,\n timestamp: new Date().toISOString(),\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n })\n\n if (config.stream) {\n const stream = await anthropic.beta.messages.create(\n {\n ...params,\n stream: true,\n },\n {\n signal: signal,\n },\n )\n\n let finalResponse: any | null = null\n let messageStartEvent: any = null\n const contentBlocks: any[] = []\n const inputJSONBuffers = new Map<number, string>()\n let usage: any = null\n let stopReason: string | null = null\n let stopSequence: string | null = null\n let hasMarkedStreaming = false\n\n for await (const event of stream) {\n if (signal.aborted) {\n debugLogger.flow('STREAM_ABORTED', {\n eventType: event.type,\n timestamp: Date.now(),\n })\n throw new Error('Request was cancelled')\n }\n\n switch (event.type) {\n case 'message_start':\n messageStartEvent = event\n finalResponse = {\n ...event.message,\n content: [],\n }\n break\n\n case 'content_block_start':\n contentBlocks[event.index] = { ...event.content_block }\n const contentBlockType = (event.content_block as any).type\n if (\n contentBlockType === 'tool_use' ||\n contentBlockType === 'server_tool_use' ||\n contentBlockType === 'mcp_tool_use'\n ) {\n setRequestStatus({\n kind: 'tool',\n detail: (event.content_block as any).name,\n })\n inputJSONBuffers.set(event.index, '')\n }\n break\n\n case 'content_block_delta':\n const blockIndex = event.index\n\n if (!contentBlocks[blockIndex]) {\n contentBlocks[blockIndex] = {\n type:\n event.delta.type === 'text_delta' ? 'text' : 'tool_use',\n text: event.delta.type === 'text_delta' ? '' : undefined,\n }\n if (event.delta.type === 'input_json_delta') {\n inputJSONBuffers.set(blockIndex, '')\n }\n }\n\n if (event.delta.type === 'text_delta') {\n if (!hasMarkedStreaming) {\n setRequestStatus({ kind: 'streaming' })\n hasMarkedStreaming = true\n }\n contentBlocks[blockIndex].text += event.delta.text\n } else if (event.delta.type === 'input_json_delta') {\n const currentBuffer = inputJSONBuffers.get(blockIndex) || ''\n const nextBuffer = currentBuffer + event.delta.partial_json\n inputJSONBuffers.set(blockIndex, nextBuffer)\n\n const trimmed = nextBuffer.trim()\n if (trimmed.length === 0) {\n contentBlocks[blockIndex].input = {}\n break\n }\n\n contentBlocks[blockIndex].input =\n parseToolUsePartialJsonOrThrow(nextBuffer) ?? {}\n }\n break\n\n case 'message_delta':\n if (event.delta.stop_reason)\n stopReason = event.delta.stop_reason\n if (event.delta.stop_sequence)\n stopSequence = event.delta.stop_sequence\n if (event.usage) usage = { ...usage, ...event.usage }\n break\n\n case 'content_block_stop':\n const stopIndex = event.index\n const block = contentBlocks[stopIndex]\n\n if (\n (block?.type === 'tool_use' ||\n block?.type === 'server_tool_use' ||\n block?.type === 'mcp_tool_use') &&\n inputJSONBuffers.has(stopIndex)\n ) {\n const jsonStr = inputJSONBuffers.get(stopIndex) ?? ''\n if (block.input === undefined) {\n const trimmed = jsonStr.trim()\n if (trimmed.length === 0) {\n block.input = {}\n } else {\n block.input =\n parseToolUsePartialJsonOrThrow(jsonStr) ?? {}\n }\n }\n\n inputJSONBuffers.delete(stopIndex)\n }\n break\n\n case 'message_stop':\n inputJSONBuffers.clear()\n break\n }\n\n if (event.type === 'message_stop') {\n break\n }\n }\n\n if (!finalResponse || !messageStartEvent) {\n throw new Error('Stream ended without proper message structure')\n }\n\n finalResponse = {\n ...messageStartEvent.message,\n content: contentBlocks.filter(Boolean),\n stop_reason: stopReason,\n stop_sequence: stopSequence,\n usage: {\n ...messageStartEvent.message.usage,\n ...usage,\n },\n }\n\n return finalResponse\n } else {\n debugLogger.api('ANTHROPIC_API_CALL_START_NON_STREAMING', {\n endpoint: modelProfile?.baseURL || 'DEFAULT_ANTHROPIC',\n model,\n provider,\n apiKeyConfigured: !!modelProfile?.apiKey,\n apiKeyPrefix: modelProfile?.apiKey\n ? modelProfile.apiKey.substring(0, 8)\n : null,\n maxTokens: params.max_tokens,\n temperature: options?.temperature ?? MAIN_QUERY_TEMPERATURE,\n messageCount: params.messages?.length || 0,\n streamMode: false,\n toolsCount: toolSchemas.length,\n thinkingTokens: maxThinkingTokens,\n timestamp: new Date().toISOString(),\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n })\n\n return await anthropic.beta.messages.create(params, {\n signal: signal,\n })\n }\n },\n { signal },\n )\n\n debugLogger.api('ANTHROPIC_API_CALL_SUCCESS', {\n content: response.content,\n })\n\n const ttftMs = start - Date.now()\n const durationMs = Date.now() - startIncludingRetries\n\n const content = response.content.map((block: ContentBlock) => {\n if (block.type === 'text') {\n return {\n type: 'text' as const,\n text: block.text,\n }\n } else if (block.type === 'tool_use') {\n return {\n type: 'tool_use' as const,\n id: block.id,\n name: block.name,\n input: block.input,\n }\n }\n return block\n })\n\n const assistantMessage: AssistantMessage = {\n message: {\n id: response.id,\n content,\n model: response.model,\n role: 'assistant',\n stop_reason: response.stop_reason,\n stop_sequence: response.stop_sequence,\n type: 'message',\n usage: response.usage,\n },\n type: 'assistant',\n uuid: nanoid() as UUID,\n durationMs,\n costUSD: 0,\n }\n\n const systemMessages = system.map(block => ({\n role: 'system',\n content: block.text,\n }))\n\n logLLMInteraction({\n systemPrompt: systemPrompt.join('\\n'),\n messages: [...systemMessages, ...anthropicMessages],\n response: response,\n usage: response.usage\n ? {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n }\n : undefined,\n timing: {\n start: start,\n end: Date.now(),\n },\n apiFormat: 'anthropic',\n })\n\n const inputTokens = response.usage.input_tokens\n const outputTokens = response.usage.output_tokens\n const cacheCreationInputTokens =\n response.usage.cache_creation_input_tokens ?? 0\n const cacheReadInputTokens = response.usage.cache_read_input_tokens ?? 0\n\n const costUSD =\n (inputTokens / 1_000_000) * getModelInputTokenCostUSD(model) +\n (outputTokens / 1_000_000) * getModelOutputTokenCostUSD(model) +\n (cacheCreationInputTokens / 1_000_000) *\n getModelInputTokenCostUSD(model) +\n (cacheReadInputTokens / 1_000_000) *\n (getModelInputTokenCostUSD(model) * 0.1)\n\n assistantMessage.costUSD = costUSD\n addToTotalCost(costUSD, durationMs)\n\n return assistantMessage\n } catch (error) {\n return getAssistantMessageFromError(error)\n }\n}\n\nfunction getAssistantMessageFromError(error: unknown): AssistantMessage {\n if (error instanceof Error && error.message.includes('prompt is too long')) {\n return createAssistantAPIErrorMessage(PROMPT_TOO_LONG_ERROR_MESSAGE)\n }\n if (\n error instanceof Error &&\n error.message.includes('Your credit balance is too low')\n ) {\n return createAssistantAPIErrorMessage(CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE)\n }\n if (\n error instanceof Error &&\n error.message.toLowerCase().includes('x-api-key')\n ) {\n return createAssistantAPIErrorMessage(INVALID_API_KEY_ERROR_MESSAGE)\n }\n if (error instanceof Error) {\n if (process.env.NODE_ENV === 'development') {\n debugLogger.error('ANTHROPIC_API_ERROR', {\n message: error.message,\n stack: error.stack,\n })\n }\n return createAssistantAPIErrorMessage(\n `${API_ERROR_MESSAGE_PREFIX}: ${error.message}`,\n )\n }\n return createAssistantAPIErrorMessage(API_ERROR_MESSAGE_PREFIX)\n}\n\nfunction addCacheBreakpoints(\n messages: (UserMessage | AssistantMessage)[],\n): MessageParam[] {\n return messages.map((msg, index) => {\n return msg.type === 'user'\n ? userMessageToMessageParam(msg, index > messages.length - 3)\n : assistantMessageToMessageParam(msg, index > messages.length - 3)\n })\n}\n\nasync function queryOpenAI(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options?: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n temperature?: number\n maxTokens?: number\n stopSequences?: string[]\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options?.toolUseContext\n\n const modelProfile = options?.modelProfile || modelManager.getModel('main')\n let model: string\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('MODEL_CONFIG_OPENAI', {\n modelProfileFound: !!modelProfile,\n modelProfileId: modelProfile?.modelName,\n modelProfileName: modelProfile?.name,\n modelProfileModelName: modelProfile?.modelName,\n modelProfileProvider: modelProfile?.provider,\n modelProfileBaseURL: modelProfile?.baseURL,\n modelProfileApiKeyExists: !!modelProfile?.apiKey,\n optionsModel: options?.model,\n requestId: getCurrentRequest()?.id,\n })\n\n if (modelProfile) {\n model = modelProfile.modelName\n } else {\n model = options?.model || modelProfile?.modelName || ''\n }\n if (options?.prependCLISysprompt) {\n const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt)\n\n systemPrompt = [getCLISyspromptPrefix() + systemPrompt]\n }\n\n const system: TextBlockParam[] = splitSysPromptPrefix(systemPrompt).map(\n _ => ({\n ...(PROMPT_CACHING_ENABLED\n ? { cache_control: { type: 'ephemeral' } }\n : {}),\n text: _,\n type: 'text',\n }),\n )\n\n const toolSchemas = await Promise.all(\n tools.map(\n async _ =>\n ({\n type: 'function',\n function: {\n name: _.name,\n description: await _.prompt({\n safeMode: options?.safeMode,\n }),\n parameters:\n 'inputJSONSchema' in _ && _.inputJSONSchema\n ? _.inputJSONSchema\n : (zodToJsonSchema(_.inputSchema as any) as any),\n },\n }) as OpenAI.ChatCompletionTool,\n ),\n )\n\n const openaiSystem = system.map(\n s =>\n ({\n role: 'system',\n content: s.text,\n }) as OpenAI.ChatCompletionMessageParam,\n )\n\n const openaiMessages = convertAnthropicMessagesToOpenAIMessages(messages)\n\n logSystemPromptConstruction({\n basePrompt: systemPrompt.join('\\n'),\n kodeContext: generateKodeContext() || '',\n reminders: [],\n finalPrompt: systemPrompt.join('\\n'),\n })\n\n let start = Date.now()\n\n type AdapterExecutionContext = {\n adapter: ReturnType<typeof ModelAdapterFactory.createAdapter>\n request: any\n shouldUseResponses: boolean\n }\n\n type QueryResult = {\n assistantMessage: AssistantMessage\n rawResponse?: any\n apiFormat: 'openai'\n }\n\n let adapterContext: AdapterExecutionContext | null = null\n\n if (modelProfile && modelProfile.modelName) {\n debugLogger.api('CHECKING_ADAPTER_SYSTEM', {\n modelProfileName: modelProfile.modelName,\n modelName: modelProfile.modelName,\n provider: modelProfile.provider,\n requestId: getCurrentRequest()?.id,\n })\n\n const USE_NEW_ADAPTER_SYSTEM = process.env.USE_NEW_ADAPTERS !== 'false'\n\n if (USE_NEW_ADAPTER_SYSTEM) {\n const shouldUseResponses =\n ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)\n\n if (shouldUseResponses) {\n const adapter = ModelAdapterFactory.createAdapter(modelProfile)\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\n\n let verbosity: 'low' | 'medium' | 'high' = 'medium'\n const modelNameLower = modelProfile.modelName.toLowerCase()\n if (modelNameLower.includes('high')) {\n verbosity = 'high'\n } else if (modelNameLower.includes('low')) {\n verbosity = 'low'\n }\n\n const unifiedParams: UnifiedRequestParams = {\n messages: openaiMessages,\n systemPrompt: openaiSystem.map(s => s.content as string),\n tools,\n maxTokens:\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile),\n stream: config.stream,\n reasoningEffort: reasoningEffort as any,\n temperature:\n options?.temperature ??\n (isGPT5Model(model) ? 1 : MAIN_QUERY_TEMPERATURE),\n previousResponseId: toolUseContext?.responseState?.previousResponseId,\n verbosity,\n ...(options?.stopSequences && options.stopSequences.length > 0\n ? { stopSequences: options.stopSequences }\n : {}),\n }\n\n adapterContext = {\n adapter,\n request: adapter.createRequest(unifiedParams),\n shouldUseResponses: true,\n }\n }\n }\n }\n\n let queryResult: QueryResult\n let startIncludingRetries = Date.now()\n\n try {\n queryResult = await withRetry(\n async () => {\n start = Date.now()\n\n if (adapterContext) {\n if (adapterContext.shouldUseResponses) {\n const { callGPT5ResponsesAPI } = await import('./openai')\n\n const response = await callGPT5ResponsesAPI(\n modelProfile,\n adapterContext.request,\n signal,\n )\n\n const unifiedResponse =\n await adapterContext.adapter.parseResponse(response)\n\n const assistantMessage = buildAssistantMessageFromUnifiedResponse(\n unifiedResponse,\n start,\n )\n assistantMessage.message.usage = normalizeUsage(\n assistantMessage.message.usage,\n )\n\n return {\n assistantMessage,\n rawResponse: unifiedResponse,\n apiFormat: 'openai',\n }\n }\n\n const s = await getCompletionWithProfile(\n modelProfile,\n adapterContext.request,\n 0,\n 10,\n signal,\n )\n let finalResponse\n if (config.stream) {\n finalResponse = await handleMessageStream(\n s as ChatCompletionStream,\n signal,\n )\n } else {\n finalResponse = s\n }\n\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\n const assistantMsg: AssistantMessage = {\n type: 'assistant',\n message: message as any,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: `${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}` as any,\n }\n\n return {\n assistantMessage: assistantMsg,\n rawResponse: finalResponse,\n apiFormat: 'openai',\n }\n }\n\n const maxTokens =\n options?.maxTokens ?? getMaxTokensFromProfile(modelProfile)\n const isGPT5 = isGPT5Model(model)\n\n const opts: OpenAI.ChatCompletionCreateParams = {\n model,\n ...(isGPT5\n ? { max_completion_tokens: maxTokens }\n : { max_tokens: maxTokens }),\n messages: [...openaiSystem, ...openaiMessages],\n temperature:\n options?.temperature ?? (isGPT5 ? 1 : MAIN_QUERY_TEMPERATURE),\n }\n if (options?.stopSequences && options.stopSequences.length > 0) {\n ;(opts as any).stop = options.stopSequences\n }\n if (config.stream) {\n ;(opts as OpenAI.ChatCompletionCreateParams).stream = true\n opts.stream_options = {\n include_usage: true,\n }\n }\n\n if (toolSchemas.length > 0) {\n opts.tools = toolSchemas\n opts.tool_choice = 'auto'\n }\n const reasoningEffort = await getReasoningEffort(modelProfile, messages)\n if (reasoningEffort) {\n opts.reasoning_effort = reasoningEffort\n }\n\n const completionFunction = isGPT5Model(modelProfile?.modelName || '')\n ? getGPT5CompletionWithProfile\n : getCompletionWithProfile\n const s = await completionFunction(modelProfile, opts, 0, 10, signal)\n let finalResponse\n if (opts.stream) {\n finalResponse = await handleMessageStream(\n s as ChatCompletionStream,\n signal,\n )\n } else {\n finalResponse = s\n }\n const message = convertOpenAIResponseToAnthropic(finalResponse, tools)\n const assistantMsg: AssistantMessage = {\n type: 'assistant',\n message: message as any,\n costUSD: 0,\n durationMs: Date.now() - start,\n uuid: `${Date.now()}-${Math.random()\n .toString(36)\n .substr(2, 9)}` as any,\n }\n return {\n assistantMessage: assistantMsg,\n rawResponse: finalResponse,\n apiFormat: 'openai',\n }\n },\n { signal },\n )\n } catch (error) {\n logError(error)\n return getAssistantMessageFromError(error)\n }\n\n const durationMs = Date.now() - start\n const durationMsIncludingRetries = Date.now() - startIncludingRetries\n\n const assistantMessage = queryResult.assistantMessage\n assistantMessage.message.content = normalizeContentFromAPI(\n assistantMessage.message.content || [],\n )\n\n const normalizedUsage = normalizeUsage(assistantMessage.message.usage)\n assistantMessage.message.usage = normalizedUsage\n\n const inputTokens = normalizedUsage.input_tokens ?? 0\n const outputTokens = normalizedUsage.output_tokens ?? 0\n const cacheReadInputTokens = normalizedUsage.cache_read_input_tokens ?? 0\n const cacheCreationInputTokens =\n normalizedUsage.cache_creation_input_tokens ?? 0\n\n const costUSD =\n (inputTokens / 1_000_000) * SONNET_COST_PER_MILLION_INPUT_TOKENS +\n (outputTokens / 1_000_000) * SONNET_COST_PER_MILLION_OUTPUT_TOKENS +\n (cacheReadInputTokens / 1_000_000) *\n SONNET_COST_PER_MILLION_PROMPT_CACHE_READ_TOKENS +\n (cacheCreationInputTokens / 1_000_000) *\n SONNET_COST_PER_MILLION_PROMPT_CACHE_WRITE_TOKENS\n\n addToTotalCost(costUSD, durationMsIncludingRetries)\n\n logLLMInteraction({\n systemPrompt: systemPrompt.join('\\n'),\n messages: [...openaiSystem, ...openaiMessages],\n response: assistantMessage.message || queryResult.rawResponse,\n usage: {\n inputTokens,\n outputTokens,\n },\n timing: {\n start,\n end: Date.now(),\n },\n apiFormat: queryResult.apiFormat,\n })\n\n assistantMessage.costUSD = costUSD\n assistantMessage.durationMs = durationMs\n assistantMessage.uuid = assistantMessage.uuid || (randomUUID() as UUID)\n\n return assistantMessage\n}\n\nfunction getMaxTokensFromProfile(modelProfile: any): number {\n return modelProfile?.maxTokens || 8000\n}\n\nfunction buildAssistantMessageFromUnifiedResponse(\n unifiedResponse: any,\n startTime: number,\n): AssistantMessage {\n const contentBlocks = [...(unifiedResponse.content || [])]\n\n if (unifiedResponse.toolCalls && unifiedResponse.toolCalls.length > 0) {\n for (const toolCall of unifiedResponse.toolCalls) {\n const tool = toolCall.function\n const toolName = tool?.name\n let toolArgs = {}\n try {\n toolArgs = tool?.arguments ? JSON.parse(tool.arguments) : {}\n } catch (e) {\n }\n\n contentBlocks.push({\n type: 'tool_use',\n input: toolArgs,\n name: toolName,\n id: toolCall.id?.length > 0 ? toolCall.id : nanoid(),\n })\n }\n }\n\n return {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n output_tokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n prompt_tokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n completion_tokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n promptTokens:\n unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0,\n completionTokens:\n unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0,\n totalTokens:\n unifiedResponse.usage?.totalTokens ??\n (unifiedResponse.usage?.promptTokens ??\n unifiedResponse.usage?.input_tokens ??\n 0) +\n (unifiedResponse.usage?.completionTokens ??\n unifiedResponse.usage?.output_tokens ??\n 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - startTime,\n uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}` as any,\n responseId: unifiedResponse.responseId,\n }\n}\n\nfunction normalizeUsage(usage?: any) {\n if (!usage) {\n return {\n input_tokens: 0,\n output_tokens: 0,\n cache_read_input_tokens: 0,\n cache_creation_input_tokens: 0,\n }\n }\n\n const inputTokens =\n usage.input_tokens ?? usage.prompt_tokens ?? usage.inputTokens ?? 0\n const outputTokens =\n usage.output_tokens ?? usage.completion_tokens ?? usage.outputTokens ?? 0\n const cacheReadInputTokens =\n usage.cache_read_input_tokens ??\n usage.prompt_token_details?.cached_tokens ??\n usage.cacheReadInputTokens ??\n 0\n const cacheCreationInputTokens =\n usage.cache_creation_input_tokens ?? usage.cacheCreatedInputTokens ?? 0\n\n return {\n ...usage,\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n cache_read_input_tokens: cacheReadInputTokens,\n cache_creation_input_tokens: cacheCreationInputTokens,\n }\n}\n\nfunction getModelInputTokenCostUSD(model: string): number {\n for (const providerModels of Object.values(models)) {\n const modelInfo = providerModels.find((m: any) => m.model === model)\n if (modelInfo) {\n return modelInfo.input_cost_per_token || 0\n }\n }\n return 0.000003\n}\n\nfunction getModelOutputTokenCostUSD(model: string): number {\n for (const providerModels of Object.values(models)) {\n const modelInfo = providerModels.find((m: any) => m.model === model)\n if (modelInfo) {\n return modelInfo.output_cost_per_token || 0\n }\n }\n return 0.000015\n}\n\nexport async function queryModel(\n modelPointer: import('@utils/config').ModelPointerType,\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[] = [],\n signal?: AbortSignal,\n): Promise<AssistantMessage> {\n return queryLLM(\n messages,\n systemPrompt,\n 0,\n [],\n signal || new AbortController().signal,\n {\n safeMode: false,\n model: modelPointer,\n prependCLISysprompt: true,\n },\n )\n}\n\n\nexport async function queryQuick({\n systemPrompt = [],\n userPrompt,\n assistantPrompt,\n enablePromptCaching = false,\n signal,\n}: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const messages = [\n {\n message: { role: 'user', content: userPrompt },\n type: 'user',\n uuid: randomUUID(),\n },\n ] as (UserMessage | AssistantMessage)[]\n\n return queryModel('quick', messages, systemPrompt, signal)\n}\n", "\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_COMMAND } from '@constants/product'\n\nexport const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`\n", "import { createHash, type UUID } from 'crypto'\nimport { mkdirSync, readFileSync, writeFileSync } from 'fs'\nimport { dirname } from 'path'\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { existsSync } from 'fs'\nimport { env } from '@utils/config/env'\nimport { getCwd } from '@utils/state'\nimport * as path from 'path'\nimport { mapValues } from 'lodash-es'\nimport type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nexport async function withVCR(\n messages: (UserMessage | AssistantMessage)[],\n f: () => Promise<AssistantMessage>,\n): Promise<AssistantMessage> {\n if (process.env.NODE_ENV !== 'test') {\n return await f()\n }\n\n const dehydratedInput = mapMessages(\n messages.map(_ => _.message.content),\n dehydrateValue,\n )\n const filename = `./fixtures/${dehydratedInput.map(_ => createHash('sha1').update(JSON.stringify(_)).digest('hex').slice(0, 6)).join('-')}.json`\n\n if (existsSync(filename)) {\n const cached = JSON.parse(readFileSync(filename, 'utf-8'))\n return mapAssistantMessage(cached.output, hydrateValue)\n }\n\n if (env.isCI) {\n process.stderr.write(\n `Anthropic API fixture missing. Re-run bun test locally, then commit the result. ${JSON.stringify({ input: dehydratedInput }, null, 2)}\\n`,\n )\n }\n\n const result = await f()\n if (env.isCI) {\n return result\n }\n\n if (!existsSync(dirname(filename))) {\n mkdirSync(dirname(filename), { recursive: true })\n }\n writeFileSync(\n filename,\n JSON.stringify(\n {\n input: dehydratedInput,\n output: mapAssistantMessage(result, dehydrateValue),\n },\n null,\n 2,\n ),\n )\n return result\n}\n\nfunction mapMessages(\n messages: (UserMessage | AssistantMessage)['message']['content'][],\n f: (s: unknown) => unknown,\n): (UserMessage | AssistantMessage)['message']['content'][] {\n return messages.map(_ => {\n if (typeof _ === 'string') {\n return f(_)\n }\n return _.map(_ => {\n switch (_.type) {\n case 'tool_result':\n if (typeof _.content === 'string') {\n return { ..._, content: f(_.content) }\n }\n if (Array.isArray(_.content)) {\n return {\n ..._,\n content: _.content.map(_ => {\n switch (_.type) {\n case 'text':\n return { ..._, text: f(_.text) }\n case 'image':\n return _\n }\n }),\n }\n }\n return _\n case 'text':\n return { ..._, text: f(_.text) }\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n case 'image':\n return _\n }\n })\n }) as (UserMessage | AssistantMessage)['message']['content'][]\n}\n\nfunction mapAssistantMessage(\n message: AssistantMessage,\n f: (s: unknown) => unknown,\n): AssistantMessage {\n return {\n durationMs: 'DURATION' as unknown as number,\n costUSD: 'COST' as unknown as number,\n uuid: 'UUID' as unknown as UUID,\n message: {\n ...message.message,\n content: message.message.content\n .map(_ => {\n switch (_.type) {\n case 'text':\n return {\n ..._,\n text: f(_.text) as string,\n citations: _.citations || [],\n }\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n default:\n return _\n }\n })\n .filter(Boolean) as ContentBlock[],\n },\n type: 'assistant',\n }\n}\n\nfunction dehydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n const s1 = s\n .replace(/num_files=\"\\d+\"/g, 'num_files=\"[NUM]\"')\n .replace(/duration_ms=\"\\d+\"/g, 'duration_ms=\"[DURATION]\"')\n .replace(/cost_usd=\"\\d+\"/g, 'cost_usd=\"[COST]\"')\n .replace(/\\//g, path.sep)\n .replaceAll(getCwd(), '[CWD]')\n if (s1.includes('Files modified by user:')) {\n return 'Files modified by user: [FILES]'\n }\n return s1\n}\n\nfunction hydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n return s\n .replaceAll('[NUM]', '1')\n .replaceAll('[DURATION]', '100')\n .replaceAll('[CWD]', getCwd())\n}\n", "import {\n ModelCapabilities,\n UnifiedRequestParams,\n UnifiedResponse,\n} from '@kode-types/modelCapabilities'\nimport { ModelProfile } from '@utils/config'\nimport { Tool } from '@tool'\n\ninterface TokenUsage {\n input: number\n output: number\n total?: number\n reasoning?: number\n}\n\nexport type StreamingEvent =\n | { type: 'message_start'; message: any; responseId: string }\n | { type: 'text_delta'; delta: string; responseId: string }\n | { type: 'tool_request'; tool: any }\n | { type: 'usage'; usage: TokenUsage }\n | { type: 'message_stop'; message: any }\n | { type: 'error'; error: string }\n\nfunction normalizeTokens(apiResponse: any): TokenUsage {\n if (!apiResponse || typeof apiResponse !== 'object') {\n return { input: 0, output: 0 }\n }\n\n const input =\n Number(\n apiResponse.prompt_tokens ??\n apiResponse.input_tokens ??\n apiResponse.promptTokens,\n ) || 0\n const output =\n Number(\n apiResponse.completion_tokens ??\n apiResponse.output_tokens ??\n apiResponse.completionTokens,\n ) || 0\n const total =\n Number(apiResponse.total_tokens ?? apiResponse.totalTokens) || undefined\n const reasoning =\n Number(apiResponse.reasoning_tokens ?? apiResponse.reasoningTokens) ||\n undefined\n\n return {\n input,\n output,\n total: total && total > 0 ? total : undefined,\n reasoning: reasoning && reasoning > 0 ? reasoning : undefined,\n }\n}\n\nexport { type TokenUsage, normalizeTokens }\n\nexport abstract class ModelAPIAdapter {\n protected cumulativeUsage: TokenUsage = { input: 0, output: 0 }\n\n constructor(\n protected capabilities: ModelCapabilities,\n protected modelProfile: ModelProfile,\n ) {}\n\n abstract createRequest(params: UnifiedRequestParams): any\n abstract parseResponse(response: any): Promise<UnifiedResponse>\n abstract buildTools(tools: Tool[]): any\n\n async *parseStreamingResponse?(\n response: any,\n signal?: AbortSignal,\n ): AsyncGenerator<StreamingEvent> {\n return\n yield\n }\n\n protected resetCumulativeUsage(): void {\n this.cumulativeUsage = { input: 0, output: 0 }\n }\n\n protected updateCumulativeUsage(usage: TokenUsage): void {\n this.cumulativeUsage.input += usage.input\n this.cumulativeUsage.output += usage.output\n if (usage.total) {\n this.cumulativeUsage.total =\n (this.cumulativeUsage.total || 0) + usage.total\n }\n if (usage.reasoning) {\n this.cumulativeUsage.reasoning =\n (this.cumulativeUsage.reasoning || 0) + usage.reasoning\n }\n }\n\n protected getMaxTokensParam(): string {\n return this.capabilities.parameters.maxTokensField\n }\n\n protected getTemperature(): number {\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\n return 1\n }\n if (this.capabilities.parameters.temperatureMode === 'restricted') {\n return Math.min(1, 0.7)\n }\n return 0.7\n }\n\n protected shouldIncludeReasoningEffort(): boolean {\n return this.capabilities.parameters.supportsReasoningEffort\n }\n\n protected shouldIncludeVerbosity(): boolean {\n return this.capabilities.parameters.supportsVerbosity\n }\n}\n", "import { ModelAPIAdapter, StreamingEvent, normalizeTokens } from './base'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ModelCapabilities,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { ModelProfile } from '@utils/config'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport { normalizeTokens, type StreamingEvent }\n\nexport abstract class OpenAIAdapter extends ModelAPIAdapter {\n constructor(capabilities: ModelCapabilities, modelProfile: ModelProfile) {\n super(capabilities, modelProfile)\n }\n\n async parseResponse(response: any): Promise<UnifiedResponse> {\n if (response?.body instanceof ReadableStream) {\n const { assistantMessage } =\n await this.parseStreamingOpenAIResponse(response)\n\n return {\n id: assistantMessage.responseId,\n content: assistantMessage.message.content,\n toolCalls: assistantMessage.message.content\n .filter((block: any) => block.type === 'tool_use')\n .map((block: any) => ({\n id: block.id,\n type: 'function',\n function: {\n name: block.name,\n arguments: JSON.stringify(block.input),\n },\n })),\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\n responseId: assistantMessage.responseId,\n }\n }\n\n return this.parseNonStreamingResponse(response)\n }\n\n async *parseStreamingResponse(response: any): AsyncGenerator<StreamingEvent> {\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n let responseId = response.id || `openai_${Date.now()}`\n let hasStarted = false\n let accumulatedContent = ''\n\n const reasoningContext: ReasoningStreamingContext = {\n thinkOpen: false,\n thinkClosed: false,\n sawAnySummary: false,\n pendingSummaryParagraph: false,\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n if (line.trim()) {\n const parsed = this.parseSSEChunk(line)\n if (parsed) {\n if (parsed.id) {\n responseId = parsed.id\n }\n\n yield* this.processStreamingChunk(\n parsed,\n responseId,\n hasStarted,\n accumulatedContent,\n reasoningContext,\n )\n\n const stateUpdate = this.updateStreamingState(\n parsed,\n accumulatedContent,\n )\n if (stateUpdate.content) accumulatedContent = stateUpdate.content\n if (stateUpdate.hasStarted) hasStarted = true\n }\n }\n }\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('OPENAI_ADAPTER_STREAM_READ_ERROR', {\n error: error instanceof Error ? error.message : String(error),\n })\n yield {\n type: 'error',\n error: error instanceof Error ? error.message : String(error),\n }\n } finally {\n reader.releaseLock()\n }\n\n const finalContent = accumulatedContent\n ? [{ type: 'text', text: accumulatedContent, citations: [] }]\n : [{ type: 'text', text: '', citations: [] }]\n\n yield {\n type: 'message_stop',\n message: {\n id: responseId,\n role: 'assistant',\n content: finalContent,\n responseId,\n },\n }\n }\n\n protected parseSSEChunk(line: string): any | null {\n if (line.startsWith('data: ')) {\n const data = line.slice(6).trim()\n if (data === '[DONE]') {\n return null\n }\n if (data) {\n try {\n return JSON.parse(data)\n } catch (error) {\n logError(error)\n debugLogger.warn('OPENAI_ADAPTER_SSE_PARSE_ERROR', {\n error: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n }\n }\n return null\n }\n\n protected handleTextDelta(\n delta: string,\n responseId: string,\n hasStarted: boolean,\n ): StreamingEvent[] {\n const events: StreamingEvent[] = []\n\n if (!hasStarted && delta) {\n events.push({\n type: 'message_start',\n message: {\n role: 'assistant',\n content: [],\n },\n responseId,\n })\n }\n\n if (delta) {\n events.push({\n type: 'text_delta',\n delta,\n responseId,\n })\n }\n\n return events\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n if (!usage) {\n return {\n input_tokens: 0,\n output_tokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n reasoningTokens: 0,\n }\n }\n\n const inputTokens =\n usage.input_tokens ?? usage.prompt_tokens ?? usage.promptTokens ?? 0\n const outputTokens =\n usage.output_tokens ??\n usage.completion_tokens ??\n usage.completionTokens ??\n 0\n\n return {\n ...usage,\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens: usage.totalTokens ?? inputTokens + outputTokens,\n reasoningTokens: usage.reasoningTokens ?? 0,\n }\n }\n\n protected abstract processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent>\n\n protected abstract updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean }\n\n protected abstract parseNonStreamingResponse(response: any): UnifiedResponse\n\n protected abstract parseStreamingOpenAIResponse(\n response: any,\n ): Promise<{ assistantMessage: any; rawResponse: any }>\n\n public buildTools(tools: Tool[]): any[] {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: getToolDescription(tool),\n parameters: zodToJsonSchema(tool.inputSchema as any) as any,\n },\n }))\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { processResponsesStream } from './responsesStreaming'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport class ResponsesAPIAdapter extends OpenAIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const {\n messages,\n systemPrompt,\n tools,\n maxTokens,\n reasoningEffort,\n stopSequences,\n } = params\n\n const request: any = {\n model: this.modelProfile.modelName,\n input: this.convertMessagesToInput(messages),\n instructions: this.buildInstructions(systemPrompt),\n }\n\n const maxTokensField = this.getMaxTokensParam()\n request[maxTokensField] = maxTokens\n\n if (stopSequences && stopSequences.length > 0) {\n request.stop = stopSequences\n }\n\n request.stream =\n params.stream !== false && this.capabilities.streaming.supported\n\n const temperature = this.getTemperature()\n if (temperature !== undefined) {\n request.temperature = temperature\n }\n\n const include: string[] = []\n if (\n this.capabilities.parameters.supportsReasoningEffort &&\n (this.shouldIncludeReasoningEffort() || reasoningEffort)\n ) {\n include.push('reasoning.encrypted_content')\n request.reasoning = {\n effort:\n reasoningEffort || this.modelProfile.reasoningEffort || 'medium',\n }\n }\n\n if (\n this.capabilities.parameters.supportsVerbosity &&\n this.shouldIncludeVerbosity()\n ) {\n let defaultVerbosity: 'low' | 'medium' | 'high' = 'medium'\n if (params.verbosity) {\n defaultVerbosity = params.verbosity\n } else {\n const modelNameLower = this.modelProfile.modelName.toLowerCase()\n if (modelNameLower.includes('high')) {\n defaultVerbosity = 'high'\n } else if (modelNameLower.includes('low')) {\n defaultVerbosity = 'low'\n }\n }\n\n request.text = {\n verbosity: defaultVerbosity,\n }\n }\n\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n }\n\n request.tool_choice = 'auto'\n\n if (this.capabilities.toolCalling.supportsParallelCalls) {\n request.parallel_tool_calls = true\n }\n\n request.store = false\n\n if (\n params.previousResponseId &&\n this.capabilities.stateManagement.supportsPreviousResponseId\n ) {\n request.previous_response_id = params.previousResponseId\n }\n\n if (include.length > 0) {\n request.include = include\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n return tools.map(tool => {\n let parameters: Record<string, unknown> | undefined =\n tool.inputJSONSchema as any\n\n if (!parameters && tool.inputSchema) {\n const isPlainObject = (obj: any): boolean => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n }\n\n if (\n isPlainObject(tool.inputSchema) &&\n ('type' in (tool.inputSchema as any) ||\n 'properties' in (tool.inputSchema as any))\n ) {\n parameters = tool.inputSchema as any\n } else {\n try {\n parameters = zodToJsonSchema(tool.inputSchema as any) as any\n } catch (error) {\n logError(error)\n debugLogger.warn('RESPONSES_API_TOOL_SCHEMA_CONVERSION_FAILED', {\n toolName: tool.name,\n error: error instanceof Error ? error.message : String(error),\n })\n parameters = { type: 'object', properties: {} }\n }\n }\n }\n\n return {\n type: 'function',\n name: tool.name,\n description: getToolDescription(tool),\n parameters: (parameters as any) || { type: 'object', properties: {} },\n }\n })\n }\n\n async parseResponse(response: any): Promise<UnifiedResponse> {\n if (response?.body instanceof ReadableStream) {\n const { assistantMessage } = await processResponsesStream(\n this.parseStreamingResponse(response),\n Date.now(),\n response.id ?? `resp_${Date.now()}`,\n )\n\n const hasToolUseBlocks = assistantMessage.message.content.some(\n (block: any) => block.type === 'tool_use',\n )\n\n return {\n id: assistantMessage.responseId,\n content: assistantMessage.message.content,\n toolCalls: hasToolUseBlocks ? [] : [],\n usage: this.normalizeUsageForAdapter(assistantMessage.message.usage),\n responseId: assistantMessage.responseId,\n }\n }\n\n return this.parseNonStreamingResponse(response)\n }\n\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n let content = response.output_text || ''\n\n let reasoningContent = ''\n if (response.output && Array.isArray(response.output)) {\n const messageItems = response.output.filter(\n item => item.type === 'message',\n )\n if (messageItems.length > 0) {\n content = messageItems\n .map(item => {\n if (item.content && Array.isArray(item.content)) {\n return item.content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join('\\n')\n }\n return item.content || ''\n })\n .filter(Boolean)\n .join('\\n\\n')\n }\n\n const reasoningItems = response.output.filter(\n item => item.type === 'reasoning',\n )\n if (reasoningItems.length > 0) {\n reasoningContent = reasoningItems\n .map(item => item.content || '')\n .filter(Boolean)\n .join('\\n\\n')\n }\n }\n\n if (reasoningContent) {\n const thinkBlock = `\n\n${reasoningContent}\n\n`\n content = thinkBlock + content\n }\n\n const toolCalls = this.parseToolCalls(response)\n\n const contentArray = content\n ? [{ type: 'text', text: content, citations: [] }]\n : [{ type: 'text', text: '', citations: [] }]\n\n const promptTokens = response.usage?.input_tokens || 0\n const completionTokens = response.usage?.output_tokens || 0\n const totalTokens =\n response.usage?.total_tokens ?? promptTokens + completionTokens\n\n return {\n id: response.id || `resp_${Date.now()}`,\n content: contentArray,\n toolCalls,\n usage: {\n promptTokens,\n completionTokens,\n reasoningTokens:\n response.usage?.output_tokens_details?.reasoning_tokens,\n },\n responseId: response.id,\n }\n }\n\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n if (parsed.type === 'response.reasoning_summary_part.added') {\n const partIndex = parsed.summary_index || 0\n\n if (!reasoningContext?.thinkingContent) {\n reasoningContext!.thinkingContent = ''\n reasoningContext!.currentPartIndex = -1\n }\n\n reasoningContext!.currentPartIndex = partIndex\n\n if (partIndex > 0 && reasoningContext!.thinkingContent) {\n reasoningContext!.thinkingContent += '\\n\\n'\n\n yield {\n type: 'text_delta',\n delta: '\\n\\n',\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.reasoning_summary_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n reasoningContext.thinkingContent += delta\n\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.reasoning_text.delta') {\n const delta = parsed.delta || ''\n\n if (delta && reasoningContext) {\n reasoningContext.thinkingContent += delta\n\n yield {\n type: 'text_delta',\n delta,\n responseId,\n }\n }\n\n return\n }\n\n if (parsed.type === 'response.output_text.delta') {\n const delta = parsed.delta || ''\n if (delta) {\n const textEvents = this.handleTextDelta(delta, responseId, hasStarted)\n for (const event of textEvents) {\n yield event\n }\n }\n }\n\n if (parsed.type === 'response.output_item.done') {\n const item = parsed.item || {}\n if (item.type === 'function_call') {\n const callId = item.call_id || item.id\n const name = item.name\n const args = item.arguments\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n yield {\n type: 'tool_request',\n tool: {\n id: callId,\n name: name,\n input: args,\n },\n }\n }\n }\n }\n\n if (parsed.usage) {\n const normalizedUsage = normalizeTokens(parsed.usage)\n\n if (parsed.usage.output_tokens_details?.reasoning_tokens) {\n normalizedUsage.reasoning =\n parsed.usage.output_tokens_details.reasoning_tokens\n }\n\n yield {\n type: 'usage',\n usage: normalizedUsage,\n }\n }\n }\n\n protected updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean } {\n const state: { content?: string; hasStarted?: boolean } = {}\n\n if (parsed.type === 'response.output_text.delta' && parsed.delta) {\n state.content = accumulatedContent + parsed.delta\n state.hasStarted = true\n }\n\n return state\n }\n\n\n protected async parseStreamingOpenAIResponse(\n response: any,\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\n const { processResponsesStream } = await import('./responsesStreaming')\n\n return await processResponsesStream(\n this.parseStreamingResponse(response),\n Date.now(),\n response.id ?? `resp_${Date.now()}`,\n )\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n const baseUsage = super.normalizeUsageForAdapter(usage)\n\n return {\n ...baseUsage,\n reasoningTokens: usage?.output_tokens_details?.reasoning_tokens ?? 0,\n }\n }\n\n private convertMessagesToInput(messages: any[]): any[] {\n const inputItems = []\n\n for (const message of messages) {\n const role = message.role\n\n if (role === 'tool') {\n const callId = message.tool_call_id || message.id\n if (typeof callId === 'string' && callId) {\n let content = message.content || ''\n if (Array.isArray(content)) {\n const texts = []\n for (const part of content) {\n if (typeof part === 'object' && part !== null) {\n const t = part.text || part.content\n if (typeof t === 'string' && t) {\n texts.push(t)\n }\n }\n }\n content = texts.join('\\n')\n }\n if (typeof content === 'string') {\n inputItems.push({\n type: 'function_call_output',\n call_id: callId,\n output: content,\n })\n }\n }\n continue\n }\n\n if (role === 'assistant' && Array.isArray(message.tool_calls)) {\n for (const tc of message.tool_calls) {\n if (typeof tc !== 'object' || tc === null) {\n continue\n }\n const tcType = tc.type || 'function'\n if (tcType !== 'function') {\n continue\n }\n const callId = tc.id || tc.call_id\n const fn = tc.function\n const name = typeof fn === 'object' && fn !== null ? fn.name : null\n const args =\n typeof fn === 'object' && fn !== null ? fn.arguments : null\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n inputItems.push({\n type: 'function_call',\n name: name,\n arguments: args,\n call_id: callId,\n })\n }\n }\n continue\n }\n\n const content = message.content || ''\n const contentItems = []\n\n if (Array.isArray(content)) {\n for (const part of content) {\n if (typeof part !== 'object' || part === null) continue\n const ptype = part.type\n if (ptype === 'text') {\n const text = part.text || part.content || ''\n if (typeof text === 'string' && text) {\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\n contentItems.push({ type: kind, text: text })\n }\n } else if (ptype === 'image_url') {\n const image = part.image_url\n const url =\n typeof image === 'object' && image !== null ? image.url : image\n if (typeof url === 'string' && url) {\n contentItems.push({ type: 'input_image', image_url: url })\n }\n }\n }\n } else if (typeof content === 'string' && content) {\n const kind = role === 'assistant' ? 'output_text' : 'input_text'\n contentItems.push({ type: kind, text: content })\n }\n\n if (contentItems.length) {\n const roleOut = role === 'assistant' ? 'assistant' : 'user'\n inputItems.push({\n type: 'message',\n role: roleOut,\n content: contentItems,\n })\n }\n }\n\n return inputItems\n }\n\n private buildInstructions(systemPrompt: string[]): string {\n const systemContent = systemPrompt\n .filter(content => content.trim())\n .join('\\n\\n')\n\n return systemContent\n }\n\n private parseToolCalls(response: any): any[] {\n if (!response.output || !Array.isArray(response.output)) {\n return []\n }\n\n const toolCalls = []\n\n for (const item of response.output) {\n if (item.type === 'function_call') {\n const callId = item.call_id || item.id\n const name = item.name || ''\n const args = item.arguments || '{}'\n\n if (\n typeof callId === 'string' &&\n typeof name === 'string' &&\n typeof args === 'string'\n ) {\n toolCalls.push({\n id: callId,\n type: 'function',\n function: {\n name: name,\n arguments: args,\n },\n })\n }\n } else if (item.type === 'tool_call') {\n const callId =\n item.id || `tool_${Math.random().toString(36).substring(2, 15)}`\n toolCalls.push({\n id: callId,\n type: 'tool_call',\n name: item.name,\n arguments: item.arguments,\n })\n }\n }\n\n return toolCalls\n }\n\n private applyReasoningToMessage(\n message: any,\n reasoningSummaryText: string,\n reasoningFullText: string,\n ): any {\n const rtxtParts = []\n if (\n typeof reasoningSummaryText === 'string' &&\n reasoningSummaryText.trim()\n ) {\n rtxtParts.push(reasoningSummaryText)\n }\n if (typeof reasoningFullText === 'string' && reasoningFullText.trim()) {\n rtxtParts.push(reasoningFullText)\n }\n const rtxt = rtxtParts.filter(p => p).join('\\n\\n')\n if (rtxt) {\n const thinkBlock = `<think>\\n${rtxt}\\n</think>\\n`\n const contentText = message.content || ''\n message.content =\n thinkBlock + (typeof contentText === 'string' ? contentText : '')\n }\n return message\n }\n}\n", "import { OpenAIAdapter, StreamingEvent, normalizeTokens } from './openaiAdapter'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n ReasoningStreamingContext,\n} from '@kode-types/modelCapabilities'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { setRequestStatus } from '@utils/session/requestStatus'\n\nexport class ChatCompletionsAdapter extends OpenAIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const { messages, systemPrompt, tools, maxTokens, stream } = params\n\n const fullMessages = this.buildMessages(systemPrompt, messages)\n\n const request: any = {\n model: this.modelProfile.modelName,\n messages: fullMessages,\n [this.getMaxTokensParam()]: maxTokens,\n temperature: this.getTemperature(),\n }\n\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n request.tool_choice = 'auto'\n }\n\n if (\n this.capabilities.parameters.supportsReasoningEffort &&\n params.reasoningEffort\n ) {\n request.reasoning_effort = params.reasoningEffort\n }\n\n if (this.capabilities.parameters.supportsVerbosity && params.verbosity) {\n request.verbosity = params.verbosity\n }\n\n if (stream && this.capabilities.streaming.supported) {\n request.stream = true\n if (this.capabilities.streaming.includesUsage) {\n request.stream_options = {\n include_usage: true,\n }\n }\n }\n\n if (this.capabilities.parameters.temperatureMode === 'fixed_one') {\n delete request.temperature\n }\n\n if (!this.capabilities.streaming.supported) {\n delete request.stream\n delete request.stream_options\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: getToolDescription(tool),\n parameters:\n tool.inputJSONSchema ||\n (zodToJsonSchema(tool.inputSchema as any) as any),\n },\n }))\n }\n\n\n protected parseNonStreamingResponse(response: any): UnifiedResponse {\n if (!response || typeof response !== 'object') {\n throw new Error('Invalid response: response must be an object')\n }\n\n const choice = response.choices?.[0]\n if (!choice) {\n throw new Error('Invalid response: no choices found in response')\n }\n\n const message = choice.message || {}\n const content = typeof message.content === 'string' ? message.content : ''\n const toolCalls = Array.isArray(message.tool_calls)\n ? message.tool_calls\n : []\n\n const usage = response.usage || {}\n const promptTokens = Number(usage.prompt_tokens) || 0\n const completionTokens = Number(usage.completion_tokens) || 0\n\n return {\n id: response.id || `chatcmpl_${Date.now()}`,\n content,\n toolCalls,\n usage: {\n promptTokens,\n completionTokens,\n },\n }\n }\n\n private buildMessages(systemPrompt: string[], messages: any[]): any[] {\n const systemMessages = systemPrompt.map(prompt => ({\n role: 'system',\n content: prompt,\n }))\n\n const normalizedMessages = this.normalizeToolMessages(messages)\n\n return [...systemMessages, ...normalizedMessages]\n }\n\n private normalizeToolMessages(messages: any[]): any[] {\n if (!Array.isArray(messages)) {\n return []\n }\n\n return messages.map(msg => {\n if (!msg || typeof msg !== 'object') {\n return msg\n }\n\n if (msg.role === 'tool') {\n if (Array.isArray(msg.content)) {\n return {\n ...msg,\n content:\n msg.content\n .map(c => c?.text || '')\n .filter(Boolean)\n .join('\\n\\n') || '(empty content)',\n }\n } else if (typeof msg.content !== 'string') {\n return {\n ...msg,\n content:\n msg.content === null || msg.content === undefined\n ? '(empty content)'\n : JSON.stringify(msg.content),\n }\n }\n }\n return msg\n })\n }\n\n protected async *processStreamingChunk(\n parsed: any,\n responseId: string,\n hasStarted: boolean,\n accumulatedContent: string,\n reasoningContext?: ReasoningStreamingContext,\n ): AsyncGenerator<StreamingEvent> {\n if (!parsed || typeof parsed !== 'object') {\n return\n }\n\n const choice = parsed.choices?.[0]\n if (choice?.delta && typeof choice.delta === 'object') {\n const delta =\n typeof choice.delta.content === 'string' ? choice.delta.content : ''\n const reasoningDelta =\n typeof choice.delta.reasoning_content === 'string'\n ? choice.delta.reasoning_content\n : ''\n const fullDelta = delta + reasoningDelta\n\n if (fullDelta) {\n const textEvents = this.handleTextDelta(\n fullDelta,\n responseId,\n hasStarted,\n )\n for (const event of textEvents) {\n yield event\n }\n }\n }\n\n if (choice?.delta?.tool_calls && Array.isArray(choice.delta.tool_calls)) {\n for (const toolCall of choice.delta.tool_calls) {\n if (toolCall && typeof toolCall === 'object') {\n yield {\n type: 'tool_request',\n tool: {\n id: toolCall.id || `tool_${Date.now()}`,\n name: toolCall.function?.name || 'unknown',\n input: toolCall.function?.arguments || '{}',\n },\n }\n }\n }\n }\n\n if (parsed.usage && typeof parsed.usage === 'object') {\n const normalizedUsage = normalizeTokens(parsed.usage)\n this.updateCumulativeUsage(normalizedUsage)\n yield {\n type: 'usage',\n usage: { ...this.cumulativeUsage },\n }\n }\n }\n\n protected updateStreamingState(\n parsed: any,\n accumulatedContent: string,\n ): { content?: string; hasStarted?: boolean } {\n const state: { content?: string; hasStarted?: boolean } = {}\n\n const choice = parsed.choices?.[0]\n if (choice?.delta) {\n const delta = choice.delta.content || ''\n const reasoningDelta = choice.delta.reasoning_content || ''\n const fullDelta = delta + reasoningDelta\n\n if (fullDelta) {\n state.content = accumulatedContent + fullDelta\n state.hasStarted = true\n }\n }\n\n return state\n }\n\n protected async parseStreamingOpenAIResponse(\n response: any,\n signal?: AbortSignal,\n ): Promise<{ assistantMessage: any; rawResponse: any }> {\n const contentBlocks: any[] = []\n const usage: any = {\n prompt_tokens: 0,\n completion_tokens: 0,\n }\n\n let responseId = response.id || `chatcmpl_${Date.now()}`\n const pendingToolCalls: any[] = []\n let hasMarkedStreaming = false\n\n try {\n this.resetCumulativeUsage()\n\n for await (const event of this.parseStreamingResponse(response)) {\n if (signal?.aborted) {\n throw new Error('Stream aborted by user')\n }\n\n if (event.type === 'message_start') {\n responseId = event.responseId || responseId\n continue\n }\n\n if (event.type === 'text_delta') {\n if (!hasMarkedStreaming) {\n setRequestStatus({ kind: 'streaming' })\n hasMarkedStreaming = true\n }\n const last = contentBlocks[contentBlocks.length - 1]\n if (!last || last.type !== 'text') {\n contentBlocks.push({\n type: 'text',\n text: event.delta,\n citations: [],\n })\n } else {\n last.text += event.delta\n }\n continue\n }\n\n if (event.type === 'tool_request') {\n setRequestStatus({ kind: 'tool', detail: event.tool?.name })\n pendingToolCalls.push(event.tool)\n continue\n }\n\n if (event.type === 'usage') {\n usage.prompt_tokens = event.usage.input\n usage.completion_tokens = event.usage.output\n usage.totalTokens =\n event.usage.total ?? event.usage.input + event.usage.output\n usage.promptTokens = event.usage.input\n usage.completionTokens = event.usage.output\n continue\n }\n }\n } catch (error) {\n if (signal?.aborted) {\n const assistantMessage = {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens: usage.prompt_tokens ?? 0,\n output_tokens: usage.completion_tokens ?? 0,\n prompt_tokens: usage.prompt_tokens ?? 0,\n completion_tokens: usage.completion_tokens ?? 0,\n totalTokens:\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - Date.now(),\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\n responseId,\n }\n\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n aborted: true,\n },\n }\n }\n throw error\n }\n\n for (const toolCall of pendingToolCalls) {\n let toolArgs = {}\n try {\n toolArgs = toolCall.input ? JSON.parse(toolCall.input) : {}\n } catch {}\n\n contentBlocks.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.name,\n input: toolArgs,\n })\n }\n\n const assistantMessage = {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: contentBlocks,\n usage: {\n input_tokens: usage.prompt_tokens ?? 0,\n output_tokens: usage.completion_tokens ?? 0,\n prompt_tokens: usage.prompt_tokens ?? 0,\n completion_tokens: usage.completion_tokens ?? 0,\n totalTokens:\n usage.totalTokens ??\n (usage.prompt_tokens || 0) + (usage.completion_tokens || 0),\n },\n },\n costUSD: 0,\n durationMs: Date.now() - Date.now(),\n uuid: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}` as any,\n responseId,\n }\n\n return {\n assistantMessage,\n rawResponse: {\n id: responseId,\n content: contentBlocks,\n usage,\n },\n }\n }\n\n protected normalizeUsageForAdapter(usage?: any) {\n return super.normalizeUsageForAdapter(usage)\n }\n}\n", "import { ModelCapabilities } from '@kode-types/modelCapabilities'\n\nconst GPT5_CAPABILITIES: ModelCapabilities = {\n apiArchitecture: {\n primary: 'responses_api',\n fallback: 'chat_completions',\n },\n parameters: {\n maxTokensField: 'max_output_tokens',\n supportsReasoningEffort: true,\n supportsVerbosity: true,\n temperatureMode: 'fixed_one',\n },\n toolCalling: {\n mode: 'custom_tools',\n supportsFreeform: true,\n supportsAllowedTools: true,\n supportsParallelCalls: true,\n },\n stateManagement: {\n supportsResponseId: true,\n supportsConversationChaining: true,\n supportsPreviousResponseId: true,\n },\n streaming: {\n supported: true,\n includesUsage: true,\n },\n}\n\nconst CHAT_COMPLETIONS_CAPABILITIES: ModelCapabilities = {\n apiArchitecture: {\n primary: 'chat_completions',\n },\n parameters: {\n maxTokensField: 'max_tokens',\n supportsReasoningEffort: false,\n supportsVerbosity: false,\n temperatureMode: 'flexible',\n },\n toolCalling: {\n mode: 'function_calling',\n supportsFreeform: false,\n supportsAllowedTools: false,\n supportsParallelCalls: true,\n },\n stateManagement: {\n supportsResponseId: false,\n supportsConversationChaining: false,\n supportsPreviousResponseId: false,\n },\n streaming: {\n supported: true,\n includesUsage: true,\n },\n}\n\nexport const MODEL_CAPABILITIES_REGISTRY: Record<string, ModelCapabilities> = {\n 'gpt-5': GPT5_CAPABILITIES,\n 'gpt-5-mini': GPT5_CAPABILITIES,\n 'gpt-5-nano': GPT5_CAPABILITIES,\n 'gpt-5-chat-latest': GPT5_CAPABILITIES,\n 'gpt-5-codex': GPT5_CAPABILITIES,\n\n 'gpt-4o': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4o-mini': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4-turbo': CHAT_COMPLETIONS_CAPABILITIES,\n 'gpt-4': CHAT_COMPLETIONS_CAPABILITIES,\n\n 'claude-3-5-sonnet-20241022': CHAT_COMPLETIONS_CAPABILITIES,\n 'claude-3-5-haiku-20241022': CHAT_COMPLETIONS_CAPABILITIES,\n 'claude-3-opus-20240229': CHAT_COMPLETIONS_CAPABILITIES,\n\n o1: {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n 'o1-mini': {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n 'o1-preview': {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n },\n}\n\nexport function inferModelCapabilities(\n modelName: string,\n): ModelCapabilities | null {\n if (!modelName) return null\n\n const lowerName = modelName.toLowerCase()\n\n if (lowerName.includes('gpt-5') || lowerName.includes('gpt5')) {\n return GPT5_CAPABILITIES\n }\n\n if (lowerName.includes('gpt-6') || lowerName.includes('gpt6')) {\n return {\n ...GPT5_CAPABILITIES,\n streaming: { supported: true, includesUsage: true },\n }\n }\n\n if (lowerName.includes('glm-5') || lowerName.includes('glm5')) {\n return {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n toolCalling: {\n ...CHAT_COMPLETIONS_CAPABILITIES.toolCalling,\n supportsAllowedTools: false,\n },\n }\n }\n\n if (lowerName.startsWith('o1') || lowerName.includes('o1-')) {\n return {\n ...CHAT_COMPLETIONS_CAPABILITIES,\n parameters: {\n ...CHAT_COMPLETIONS_CAPABILITIES.parameters,\n maxTokensField: 'max_completion_tokens',\n temperatureMode: 'fixed_one',\n },\n }\n }\n\n return null\n}\n\nconst capabilityCache = new Map<string, ModelCapabilities>()\n\nexport function getModelCapabilities(modelName: string): ModelCapabilities {\n if (capabilityCache.has(modelName)) {\n return capabilityCache.get(modelName)!\n }\n\n if (MODEL_CAPABILITIES_REGISTRY[modelName]) {\n const capabilities = MODEL_CAPABILITIES_REGISTRY[modelName]\n capabilityCache.set(modelName, capabilities)\n return capabilities\n }\n\n const inferred = inferModelCapabilities(modelName)\n if (inferred) {\n capabilityCache.set(modelName, inferred)\n return inferred\n }\n\n const defaultCapabilities = CHAT_COMPLETIONS_CAPABILITIES\n capabilityCache.set(modelName, defaultCapabilities)\n return defaultCapabilities\n}\n", "import { ModelAPIAdapter } from './adapters/base'\nimport { ResponsesAPIAdapter } from './adapters/responsesAPI'\nimport { ChatCompletionsAdapter } from './adapters/chatCompletions'\nimport { getModelCapabilities } from '@constants/modelCapabilities'\nimport { ModelProfile, getGlobalConfig } from '@utils/config'\nimport { ModelCapabilities } from '@kode-types/modelCapabilities'\n\nexport class ModelAdapterFactory {\n static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n\n const apiType = this.determineAPIType(modelProfile, capabilities)\n\n switch (apiType) {\n case 'responses_api':\n return new ResponsesAPIAdapter(capabilities, modelProfile)\n case 'chat_completions':\n default:\n return new ChatCompletionsAdapter(capabilities, modelProfile)\n }\n }\n\n private static determineAPIType(\n modelProfile: ModelProfile,\n capabilities: ModelCapabilities,\n ): 'responses_api' | 'chat_completions' {\n if (capabilities.apiArchitecture.primary !== 'responses_api') {\n return 'chat_completions'\n }\n\n const isOfficialOpenAI =\n !modelProfile.baseURL || modelProfile.baseURL.includes('api.openai.com')\n\n if (!isOfficialOpenAI) {\n if (capabilities.apiArchitecture.fallback === 'chat_completions') {\n return capabilities.apiArchitecture.primary\n }\n return capabilities.apiArchitecture.primary\n }\n\n\n return capabilities.apiArchitecture.primary\n }\n\n static shouldUseResponsesAPI(modelProfile: ModelProfile): boolean {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n const apiType = this.determineAPIType(modelProfile, capabilities)\n return apiType === 'responses_api'\n }\n}\n", "interface ConversationState {\n previousResponseId?: string\n lastUpdate: number\n}\n\nclass ResponseStateManager {\n private conversationStates = new Map<string, ConversationState>()\n\n private readonly CLEANUP_INTERVAL = 60 * 60 * 1000\n\n constructor() {\n setInterval(() => {\n this.cleanup()\n }, this.CLEANUP_INTERVAL)\n }\n\n setPreviousResponseId(conversationId: string, responseId: string): void {\n this.conversationStates.set(conversationId, {\n previousResponseId: responseId,\n lastUpdate: Date.now(),\n })\n }\n\n getPreviousResponseId(conversationId: string): string | undefined {\n const state = this.conversationStates.get(conversationId)\n if (state) {\n state.lastUpdate = Date.now()\n return state.previousResponseId\n }\n return undefined\n }\n\n clearConversation(conversationId: string): void {\n this.conversationStates.delete(conversationId)\n }\n\n clearAll(): void {\n this.conversationStates.clear()\n }\n\n private cleanup(): void {\n const now = Date.now()\n for (const [conversationId, state] of this.conversationStates.entries()) {\n if (now - state.lastUpdate > this.CLEANUP_INTERVAL) {\n this.conversationStates.delete(conversationId)\n }\n }\n }\n\n getStateSize(): number {\n return this.conversationStates.size\n }\n}\n\nexport const responseStateManager = new ResponseStateManager()\n\nexport function getConversationId(\n agentId?: string,\n messageId?: string,\n): string {\n return (\n agentId ||\n messageId ||\n `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n )\n}\n", "type PartialJsonToken =\n | { type: 'brace'; value: '{' | '}' }\n | { type: 'paren'; value: '[' | ']' }\n | { type: 'separator'; value: ':' }\n | { type: 'delimiter'; value: ',' }\n | { type: 'string'; value: string }\n | { type: 'number'; value: string }\n | { type: 'name'; value: 'true' | 'false' | 'null' }\n\nfunction tokenizePartialJson(input: string): PartialJsonToken[] {\n let index = 0\n const tokens: PartialJsonToken[] = []\n\n while (index < input.length) {\n let ch = input[index]\n\n if (ch === '\\\\') {\n index++\n continue\n }\n\n if (ch === '{') {\n tokens.push({ type: 'brace', value: '{' })\n index++\n continue\n }\n if (ch === '}') {\n tokens.push({ type: 'brace', value: '}' })\n index++\n continue\n }\n if (ch === '[') {\n tokens.push({ type: 'paren', value: '[' })\n index++\n continue\n }\n if (ch === ']') {\n tokens.push({ type: 'paren', value: ']' })\n index++\n continue\n }\n if (ch === ':') {\n tokens.push({ type: 'separator', value: ':' })\n index++\n continue\n }\n if (ch === ',') {\n tokens.push({ type: 'delimiter', value: ',' })\n index++\n continue\n }\n\n if (ch === '\"') {\n let value = ''\n let incomplete = false\n\n ch = input[++index]\n while (ch !== '\"') {\n if (index === input.length) {\n incomplete = true\n break\n }\n if (ch === '\\\\') {\n if (++index === input.length) {\n incomplete = true\n break\n }\n value += ch + input[index]\n ch = input[++index]\n } else {\n value += ch\n ch = input[++index]\n }\n }\n\n ch = input[++index]\n if (!incomplete) tokens.push({ type: 'string', value })\n continue\n }\n\n if (ch && /\\s/.test(ch)) {\n index++\n continue\n }\n\n const digit = /[0-9]/\n if ((ch && digit.test(ch)) || ch === '-' || ch === '.') {\n let value = ''\n if (ch === '-') {\n value += ch\n ch = input[++index]\n }\n while ((ch && digit.test(ch)) || ch === '.') {\n value += ch\n ch = input[++index]\n }\n tokens.push({ type: 'number', value })\n continue\n }\n\n const alpha = /[a-z]/i\n if (ch && alpha.test(ch)) {\n let value = ''\n while (ch && alpha.test(ch)) {\n if (index === input.length) break\n value += ch\n ch = input[++index]\n }\n\n if (value === 'true' || value === 'false' || value === 'null') {\n tokens.push({ type: 'name', value })\n } else {\n index++\n }\n continue\n }\n\n index++\n }\n\n return tokens\n}\n\nfunction trimTrailingIncompleteTokens(\n tokens: PartialJsonToken[],\n): PartialJsonToken[] {\n if (tokens.length === 0) return tokens\n const last = tokens[tokens.length - 1]!\n\n if (last.type === 'separator') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n\n if (last.type === 'number') {\n const lastChar = last.value[last.value.length - 1]\n if (lastChar === '.' || lastChar === '-') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n }\n\n if (last.type === 'string' || last.type === 'number') {\n const previous = tokens[tokens.length - 2]\n if (previous?.type === 'delimiter') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n if (previous?.type === 'brace' && previous.value === '{') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n }\n\n if (last.type === 'delimiter') {\n return trimTrailingIncompleteTokens(tokens.slice(0, -1))\n }\n\n return tokens\n}\n\nfunction closeOpenBrackets(tokens: PartialJsonToken[]): PartialJsonToken[] {\n const missingClosers: Array<'}' | ']'> = []\n\n for (const token of tokens) {\n if (token.type === 'brace') {\n if (token.value === '{') missingClosers.push('}')\n else missingClosers.splice(missingClosers.lastIndexOf('}'), 1)\n continue\n }\n\n if (token.type === 'paren') {\n if (token.value === '[') missingClosers.push(']')\n else missingClosers.splice(missingClosers.lastIndexOf(']'), 1)\n }\n }\n\n if (missingClosers.length > 0) {\n missingClosers.reverse()\n for (const closer of missingClosers) {\n if (closer === '}') tokens.push({ type: 'brace', value: '}' })\n else tokens.push({ type: 'paren', value: ']' })\n }\n }\n\n return tokens\n}\n\nfunction tokensToJson(tokens: PartialJsonToken[]): string {\n let out = ''\n for (const token of tokens) {\n if (token.type === 'string') out += `\"${token.value}\"`\n else out += token.value\n }\n return out\n}\n\nexport function parseToolUsePartialJson(input: string): unknown {\n const tokens = tokenizePartialJson(input)\n const trimmed = trimTrailingIncompleteTokens(tokens)\n const completed = closeOpenBrackets(trimmed)\n return JSON.parse(tokensToJson(completed))\n}\n\nexport function parseToolUsePartialJsonOrThrow(input: string): unknown {\n try {\n return parseToolUsePartialJson(input)\n } catch (error) {\n throw new Error(\n `Unable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: ${String(error)}. JSON: ${input}`,\n )\n }\n}\n", "import OpenAI from 'openai'\n\ntype AnthropicImageBlock = {\n type: 'image'\n source:\n | { type: 'base64'; media_type: string; data: string }\n | { type: 'url'; url: string }\n}\n\ntype AnthropicTextBlock = { type: 'text'; text: string }\ntype AnthropicToolUseBlock = {\n type: 'tool_use'\n id: string\n name: string\n input: unknown\n}\ntype AnthropicToolResultBlock = {\n type: 'tool_result'\n tool_use_id: string\n content: unknown\n}\n\ntype AnthropicBlock =\n | AnthropicTextBlock\n | AnthropicImageBlock\n | AnthropicToolUseBlock\n | AnthropicToolResultBlock\n | { type: string; [key: string]: unknown }\n\ntype AnthropicLikeMessage = {\n message: {\n role: 'user' | 'assistant'\n content: string | AnthropicBlock[] | AnthropicBlock\n }\n}\n\nexport function convertAnthropicMessagesToOpenAIMessages(\n messages: AnthropicLikeMessage[],\n): (\n | OpenAI.ChatCompletionMessageParam\n | OpenAI.ChatCompletionToolMessageParam\n)[] {\n const openaiMessages: any[] = []\n\n const toolResults: Record<string, OpenAI.ChatCompletionToolMessageParam> = {}\n\n for (const message of messages) {\n const blocks: AnthropicBlock[] = []\n if (typeof message.message.content === 'string') {\n blocks.push({ type: 'text', text: message.message.content })\n } else if (Array.isArray(message.message.content)) {\n blocks.push(...message.message.content)\n } else if (message.message.content) {\n blocks.push(message.message.content)\n }\n\n const role = message.message.role\n\n const userContentParts: any[] = []\n const assistantTextParts: string[] = []\n const assistantToolCalls: any[] = []\n\n for (const block of blocks) {\n if (block.type === 'text') {\n const text =\n typeof (block as any).text === 'string' ? (block as any).text : ''\n if (!text) continue\n if (role === 'user') {\n userContentParts.push({ type: 'text', text })\n } else if (role === 'assistant') {\n assistantTextParts.push(text)\n }\n continue\n }\n\n if (block.type === 'image' && role === 'user') {\n const source = (block as AnthropicImageBlock).source\n if (source?.type === 'base64') {\n userContentParts.push({\n type: 'image_url',\n image_url: {\n url: `data:${source.media_type};base64,${source.data}`,\n },\n })\n } else if (source?.type === 'url') {\n userContentParts.push({\n type: 'image_url',\n image_url: { url: source.url },\n })\n }\n continue\n }\n\n if (block.type === 'tool_use') {\n assistantToolCalls.push({\n type: 'function',\n function: {\n name: (block as AnthropicToolUseBlock).name,\n arguments: JSON.stringify((block as AnthropicToolUseBlock).input),\n },\n id: (block as AnthropicToolUseBlock).id,\n })\n continue\n }\n\n if (block.type === 'tool_result') {\n const toolUseId = (block as AnthropicToolResultBlock).tool_use_id\n const rawToolContent = (block as AnthropicToolResultBlock).content\n const toolContent =\n typeof rawToolContent === 'string'\n ? rawToolContent\n : JSON.stringify(rawToolContent)\n toolResults[toolUseId] = {\n role: 'tool',\n content: toolContent,\n tool_call_id: toolUseId,\n }\n continue\n }\n }\n\n if (role === 'user') {\n if (\n userContentParts.length === 1 &&\n userContentParts[0]?.type === 'text'\n ) {\n openaiMessages.push({\n role: 'user',\n content: userContentParts[0].text,\n } as any)\n } else if (userContentParts.length > 0) {\n openaiMessages.push({ role: 'user', content: userContentParts } as any)\n }\n continue\n }\n\n if (role === 'assistant') {\n const text = assistantTextParts.filter(Boolean).join('\\n')\n if (assistantToolCalls.length > 0) {\n openaiMessages.push({\n role: 'assistant',\n content: text ? text : undefined,\n tool_calls: assistantToolCalls,\n } as any)\n continue\n }\n if (text) {\n openaiMessages.push({ role: 'assistant', content: text } as any)\n }\n }\n }\n\n const finalMessages: any[] = []\n\n for (const message of openaiMessages) {\n finalMessages.push(message)\n\n if ('tool_calls' in message && message.tool_calls) {\n for (const toolCall of message.tool_calls) {\n if (toolResults[toolCall.id]) {\n finalMessages.push(toolResults[toolCall.id])\n }\n }\n }\n }\n\n return finalMessages\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["_", "zodToJsonSchema", "zodToJsonSchema", "zodToJsonSchema", "processResponsesStream", "content", "zodToJsonSchema", "zodToJsonSchema", "assistantMessage", "convertAnthropicMessagesToOpenAIMessages", "zodToJsonSchema", "assistantMessage", "s", "finalResponse", "message", "assistantMsg"]
|
|
7
|
-
}
|
package/dist/llmLazy-54QQHA54.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
fetchAnthropicModels,
|
|
5
|
-
queryLLM,
|
|
6
|
-
queryQuick,
|
|
7
|
-
verifyApiKey
|
|
8
|
-
} from "./chunk-ND3XWFO6.js";
|
|
9
|
-
import "./chunk-JC6NCUG5.js";
|
|
10
|
-
export {
|
|
11
|
-
fetchAnthropicModels,
|
|
12
|
-
queryLLM,
|
|
13
|
-
queryQuick,
|
|
14
|
-
verifyApiKey
|
|
15
|
-
};
|
package/dist/loader-FYHJQES5.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
clearAgentCache,
|
|
5
|
-
getActiveAgents,
|
|
6
|
-
getAgentByType,
|
|
7
|
-
getAllAgents,
|
|
8
|
-
getAvailableAgentTypes,
|
|
9
|
-
setFlagAgentsFromCliJson,
|
|
10
|
-
startAgentWatcher,
|
|
11
|
-
stopAgentWatcher
|
|
12
|
-
} from "./chunk-73WGVYLQ.js";
|
|
13
|
-
import "./chunk-UKHTVRJM.js";
|
|
14
|
-
import "./chunk-S3J2TLV6.js";
|
|
15
|
-
import "./chunk-STSX7GIX.js";
|
|
16
|
-
import "./chunk-YXYYDIMI.js";
|
|
17
|
-
import "./chunk-F2SJXUDI.js";
|
|
18
|
-
import "./chunk-JC6NCUG5.js";
|
|
19
|
-
export {
|
|
20
|
-
clearAgentCache,
|
|
21
|
-
getActiveAgents,
|
|
22
|
-
getAgentByType,
|
|
23
|
-
getAllAgents,
|
|
24
|
-
getAvailableAgentTypes,
|
|
25
|
-
setFlagAgentsFromCliJson,
|
|
26
|
-
startAgentWatcher,
|
|
27
|
-
stopAgentWatcher
|
|
28
|
-
};
|
package/dist/mcp-J332IKT3.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
addMcpServer,
|
|
5
|
-
ensureConfigScope,
|
|
6
|
-
getClients,
|
|
7
|
-
getClientsForCliMcpConfig,
|
|
8
|
-
getMCPCommands,
|
|
9
|
-
getMCPTools,
|
|
10
|
-
getMcpServer,
|
|
11
|
-
getMcprcServerStatus,
|
|
12
|
-
listMCPServers,
|
|
13
|
-
listPluginMCPServers,
|
|
14
|
-
looksLikeMcpUrl,
|
|
15
|
-
normalizeMcpScopeForCli,
|
|
16
|
-
normalizeMcpTransport,
|
|
17
|
-
parseEnvVars,
|
|
18
|
-
parseMcpHeaders,
|
|
19
|
-
removeMcpServer,
|
|
20
|
-
runCommand
|
|
21
|
-
} from "./chunk-CM3EGTG6.js";
|
|
22
|
-
import "./chunk-HCBELH4J.js";
|
|
23
|
-
import "./chunk-S3J2TLV6.js";
|
|
24
|
-
import "./chunk-7U7L4NMD.js";
|
|
25
|
-
import "./chunk-LC4TVOCZ.js";
|
|
26
|
-
import "./chunk-UYXEDKOZ.js";
|
|
27
|
-
import "./chunk-STSX7GIX.js";
|
|
28
|
-
import "./chunk-YXYYDIMI.js";
|
|
29
|
-
import "./chunk-F2SJXUDI.js";
|
|
30
|
-
import "./chunk-JC6NCUG5.js";
|
|
31
|
-
export {
|
|
32
|
-
addMcpServer,
|
|
33
|
-
ensureConfigScope,
|
|
34
|
-
getClients,
|
|
35
|
-
getClientsForCliMcpConfig,
|
|
36
|
-
getMCPCommands,
|
|
37
|
-
getMCPTools,
|
|
38
|
-
getMcpServer,
|
|
39
|
-
getMcprcServerStatus,
|
|
40
|
-
listMCPServers,
|
|
41
|
-
listPluginMCPServers,
|
|
42
|
-
looksLikeMcpUrl,
|
|
43
|
-
normalizeMcpScopeForCli,
|
|
44
|
-
normalizeMcpTransport,
|
|
45
|
-
parseEnvVars,
|
|
46
|
-
parseMcpHeaders,
|
|
47
|
-
removeMcpServer,
|
|
48
|
-
runCommand
|
|
49
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/services/context/mentionProcessor.ts"],
|
|
4
|
-
"sourcesContent": ["import { emitReminderEvent } from '@services/systemReminder'\nimport { getAvailableAgentTypes } from '@utils/agent/loader'\nimport { existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { getCwd } from '@utils/state'\nimport { debug as debugLogger } from '@utils/log/debugLogger'\nimport { logError } from '@utils/log'\n\nexport interface MentionContext {\n type: 'agent' | 'file'\n mention: string\n resolved: string\n exists: boolean\n metadata?: any\n}\n\nexport interface ProcessedMentions {\n agents: MentionContext[]\n files: MentionContext[]\n hasAgentMentions: boolean\n hasFileMentions: boolean\n}\n\nclass MentionProcessorService {\n private static readonly MENTION_PATTERNS = {\n runAgent: /@(run-agent-[\\w\\-]+)/g,\n agent: /@(agent-[\\w\\-]+)/g,\n askModel: /@(ask-[\\w\\-]+)/g,\n file: /@(?:\"([^\"\\n]+)\"|'([^'\\n]+)'|([a-zA-Z0-9/._~:\\\\\\\\-]+))/g,\n } as const\n\n private agentCache: Map<string, boolean> = new Map()\n private lastAgentCheck: number = 0\n private CACHE_TTL = 60_000\n\n public async processMentions(input: string): Promise<ProcessedMentions> {\n const result: ProcessedMentions = {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n\n try {\n const agentMentions = this.extractAgentMentions(input)\n if (agentMentions.length > 0) {\n await this.refreshAgentCache()\n\n for (const { mention, agentType, isAskModel } of agentMentions) {\n if (isAskModel || this.agentCache.has(agentType)) {\n result.agents.push({\n type: 'agent',\n mention,\n resolved: agentType,\n exists: true,\n metadata: isAskModel ? { type: 'ask-model' } : undefined,\n })\n result.hasAgentMentions = true\n\n this.emitAgentMentionEvent(mention, agentType, isAskModel)\n }\n }\n }\n\n const fileMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file),\n ]\n const processedAgentMentions = new Set(\n agentMentions.map(am => am.mention),\n )\n\n for (const match of fileMatches) {\n const rawMention = match[0]?.slice(1) || ''\n const mention = (match[1] ?? match[2] ?? match[3] ?? '').trim()\n\n if (\n mention.startsWith('run-agent-') ||\n mention.startsWith('agent-') ||\n mention.startsWith('ask-') ||\n processedAgentMentions.has(mention)\n ) {\n continue\n }\n\n if (!mention) continue\n const filePath = this.resolveFilePath(\n this.normalizeFileMentionPath(mention),\n )\n if (existsSync(filePath)) {\n result.files.push({\n type: 'file',\n mention: rawMention || mention,\n resolved: filePath,\n exists: true,\n })\n result.hasFileMentions = true\n\n emitReminderEvent('file:mentioned', {\n filePath: filePath,\n originalMention: rawMention || mention,\n timestamp: Date.now(),\n })\n }\n }\n\n return result\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_PROCESS_FAILED', {\n input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),\n error: error instanceof Error ? error.message : error,\n })\n\n return {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n }\n }\n\n private resolveFilePath(mention: string): string {\n return resolve(getCwd(), mention)\n }\n\n private normalizeFileMentionPath(mention: string): string {\n return mention.replace(/\\\\ /g, ' ')\n }\n\n private async refreshAgentCache(): Promise<void> {\n const now = Date.now()\n if (now - this.lastAgentCheck < this.CACHE_TTL) {\n return\n }\n\n try {\n const agents = await getAvailableAgentTypes()\n const previousCacheSize = this.agentCache.size\n this.agentCache.clear()\n\n for (const agent of agents) {\n this.agentCache.set(agent.agentType, true)\n }\n\n this.lastAgentCheck = now\n\n if (agents.length !== previousCacheSize) {\n debugLogger.info('MENTION_PROCESSOR_CACHE_REFRESHED', {\n agentCount: agents.length,\n previousCacheSize,\n cacheAge: now - this.lastAgentCheck,\n })\n }\n } catch (error) {\n logError(error)\n debugLogger.warn('MENTION_PROCESSOR_CACHE_REFRESH_FAILED', {\n error: error instanceof Error ? error.message : error,\n cacheSize: this.agentCache.size,\n lastRefresh: new Date(this.lastAgentCheck).toISOString(),\n })\n }\n }\n\n private extractAgentMentions(\n input: string,\n ): Array<{ mention: string; agentType: string; isAskModel: boolean }> {\n const mentions: Array<{\n mention: string\n agentType: string\n isAskModel: boolean\n }> = []\n\n const runAgentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent),\n ]\n for (const match of runAgentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^run-agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const agentMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent),\n ]\n for (const match of agentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n\n const askModelMatches = [\n ...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel),\n ]\n for (const match of askModelMatches) {\n const mention = match[1]\n mentions.push({ mention, agentType: mention, isAskModel: true })\n }\n\n return mentions\n }\n\n private emitAgentMentionEvent(\n mention: string,\n agentType: string,\n isAskModel: boolean,\n ): void {\n try {\n const eventData = {\n originalMention: mention,\n timestamp: Date.now(),\n }\n\n if (isAskModel) {\n emitReminderEvent('ask-model:mentioned', {\n ...eventData,\n modelName: mention,\n })\n } else {\n emitReminderEvent('agent:mentioned', {\n ...eventData,\n agentType,\n })\n }\n\n debugLogger.info('MENTION_PROCESSOR_EVENT_EMITTED', {\n type: isAskModel ? 'ask-model' : 'agent',\n mention,\n agentType: isAskModel ? undefined : agentType,\n })\n } catch (error) {\n debugLogger.error('MENTION_PROCESSOR_EVENT_FAILED', {\n mention,\n agentType,\n isAskModel,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n\n public clearCache(): void {\n this.agentCache.clear()\n this.lastAgentCheck = 0\n }\n}\n\nexport const mentionProcessor = new MentionProcessorService()\n\nexport const processMentions = (input: string) =>\n mentionProcessor.processMentions(input)\n\nexport const clearMentionCache = () => mentionProcessor.clearCache()\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/model-FV3JDJKH.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
ModelManager,
|
|
5
|
-
USE_BEDROCK,
|
|
6
|
-
USE_VERTEX,
|
|
7
|
-
getModelManager,
|
|
8
|
-
getQuickModel,
|
|
9
|
-
getSlowAndCapableModel,
|
|
10
|
-
getVertexRegionForModel,
|
|
11
|
-
isDefaultSlowAndCapableModel,
|
|
12
|
-
reloadModelManager
|
|
13
|
-
} from "./chunk-IZVMU4S2.js";
|
|
14
|
-
import "./chunk-LC4TVOCZ.js";
|
|
15
|
-
import "./chunk-UYXEDKOZ.js";
|
|
16
|
-
import "./chunk-STSX7GIX.js";
|
|
17
|
-
import "./chunk-YXYYDIMI.js";
|
|
18
|
-
import "./chunk-F2SJXUDI.js";
|
|
19
|
-
import "./chunk-JC6NCUG5.js";
|
|
20
|
-
export {
|
|
21
|
-
ModelManager,
|
|
22
|
-
USE_BEDROCK,
|
|
23
|
-
USE_VERTEX,
|
|
24
|
-
getModelManager,
|
|
25
|
-
getQuickModel,
|
|
26
|
-
getSlowAndCapableModel,
|
|
27
|
-
getVertexRegionForModel,
|
|
28
|
-
isDefaultSlowAndCapableModel,
|
|
29
|
-
reloadModelManager
|
|
30
|
-
};
|