@shareai-lab/kode 2.0.2 → 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-XP3CFN6F.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
- package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
- package/dist/{ask-3G5H5KD5.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-EH34V7CY.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-K2MI4TPB.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-4GAIJGRH.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-54DNHKOD.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-BHGTA6JQ.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-OZNRLY3E.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-2PMO2FS2.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-NQLEUHMS.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-2KWKUXLT.js → chunks/chunk-HRJ3ICQK.js} +59 -55
- package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
- package/dist/{chunk-ZQU3TXLC.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-IE2CG2TV.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-SRZZFAS7.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-SDGKPKDK.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-G6I7XROM.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-3TXNP6HH.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-QYFKRZQC.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-6ZMBCL23.js → chunks/config-25HRTPSP.js} +48 -10
- package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
- package/dist/{customCommands-DNEJS3ZU.js → chunks/customCommands-TYMYZRG5.js} +11 -8
- package/dist/chunks/engine-MRVF6FK6.js +39 -0
- package/dist/{env-OFAXZ3XG.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-GRWG3SPE.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-TDMXFWSO.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
- package/dist/{llm-XVXWYOHK.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-YD7YXYGF.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
- package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
- package/dist/{messages-OFUJSPRV.js → chunks/messages-EEWWLPHN.js} +2 -6
- package/dist/chunks/model-5TIEKQPD.js +37 -0
- package/dist/{openai-5G5D5Q4B.js → chunks/openai-XXK3YZG4.js} +13 -10
- package/dist/{outputStyles-HLDXFQK3.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
- package/dist/chunks/permissions-HO7INPWM.js +27 -0
- package/dist/{pluginRuntime-FPTKK6NY.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-PSNKDINM.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-SRV2INSL.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-GIU4ZIXM.js +0 -42
- package/dist/acp-H3VJ77YG.js +0 -1357
- package/dist/acp-H3VJ77YG.js.map +0 -7
- package/dist/agentsValidate-XP3CFN6F.js.map +0 -7
- package/dist/ask-3G5H5KD5.js.map +0 -7
- package/dist/autoUpdater-DNRMJWFQ.js +0 -17
- package/dist/chunk-2KWKUXLT.js.map +0 -7
- package/dist/chunk-2PMO2FS2.js.map +0 -7
- package/dist/chunk-3TXNP6HH.js.map +0 -7
- package/dist/chunk-4GAIJGRH.js.map +0 -7
- package/dist/chunk-4RTX4AG4.js.map +0 -7
- package/dist/chunk-54DNHKOD.js.map +0 -7
- package/dist/chunk-67PY5IX6.js +0 -34
- package/dist/chunk-67PY5IX6.js.map +0 -7
- package/dist/chunk-6DRDLOLP.js +0 -2613
- package/dist/chunk-6DRDLOLP.js.map +0 -7
- package/dist/chunk-7CQVZNQV.js +0 -1609
- package/dist/chunk-7CQVZNQV.js.map +0 -7
- package/dist/chunk-ABLVTESJ.js.map +0 -7
- package/dist/chunk-AIMIPK4B.js +0 -835
- package/dist/chunk-AIMIPK4B.js.map +0 -7
- package/dist/chunk-BHGTA6JQ.js.map +0 -7
- package/dist/chunk-CIG63V4E.js +0 -72
- package/dist/chunk-CIG63V4E.js.map +0 -7
- package/dist/chunk-E6YNABER.js.map +0 -7
- package/dist/chunk-EH34V7CY.js.map +0 -7
- package/dist/chunk-EZXMVTDU.js.map +0 -7
- package/dist/chunk-FH5CHM6L.js +0 -148
- package/dist/chunk-FH5CHM6L.js.map +0 -7
- package/dist/chunk-G6I7XROM.js.map +0 -7
- package/dist/chunk-HN4E4UUQ.js.map +0 -7
- package/dist/chunk-HSPVVDIW.js +0 -30198
- package/dist/chunk-HSPVVDIW.js.map +0 -7
- package/dist/chunk-IE2CG2TV.js.map +0 -7
- package/dist/chunk-K2MI4TPB.js.map +0 -7
- package/dist/chunk-MN77D2F7.js +0 -2931
- package/dist/chunk-MN77D2F7.js.map +0 -7
- package/dist/chunk-NQLEUHMS.js.map +0 -7
- package/dist/chunk-OIFQB3S4.js +0 -515
- package/dist/chunk-OIFQB3S4.js.map +0 -7
- package/dist/chunk-OWTG2W3A.js +0 -164
- package/dist/chunk-OWTG2W3A.js.map +0 -7
- package/dist/chunk-OZNRLY3E.js.map +0 -7
- package/dist/chunk-QYFKRZQC.js.map +0 -7
- package/dist/chunk-S6HRABTA.js.map +0 -7
- package/dist/chunk-SDGKPKDK.js.map +0 -7
- package/dist/chunk-SRZZFAS7.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-VBXVYQYY.js +0 -145
- package/dist/chunk-VBXVYQYY.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-Z33T5YN5.js +0 -654
- package/dist/chunk-Z33T5YN5.js.map +0 -7
- package/dist/chunk-ZQU3TXLC.js.map +0 -7
- package/dist/cli-SRV2INSL.js.map +0 -7
- package/dist/commands-TWH6PGVG.js +0 -46
- package/dist/context-JQIOOI4W.js +0 -30
- package/dist/costTracker-6SL26FDB.js +0 -19
- package/dist/kodeAgentSessionLoad-6N27AC5K.js +0 -18
- package/dist/kodeAgentSessionResume-HUSAEO24.js +0 -16
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
- package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +0 -7
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
- package/dist/llm-XVXWYOHK.js.map +0 -7
- package/dist/llmLazy-7TD5N7XP.js +0 -15
- package/dist/loader-AUXIJTY6.js +0 -28
- package/dist/mcp-BXJ3K7NZ.js +0 -49
- package/dist/mentionProcessor-YD7YXYGF.js.map +0 -7
- package/dist/model-KPYCXWBK.js +0 -30
- package/dist/pluginRuntime-FPTKK6NY.js.map +0 -7
- package/dist/pluginValidation-DSFXZ4GF.js +0 -17
- package/dist/prompts-LWLAJRS2.js +0 -48
- package/dist/query-HVPWL27C.js +0 -50
- package/dist/responsesStreaming-AW344PQO.js +0 -10
- package/dist/ripgrep-YOPCY2GO.js +0 -17
- package/dist/state-KNRWP3FO.js +0 -16
- package/dist/theme-7S2QN2FO.js +0 -14
- package/dist/toolPermissionSettings-GPOBH4IV.js +0 -18
- package/dist/tools-FZU2FZBD.js +0 -47
- package/dist/userInput-VHNBN2MW.js +0 -311
- package/dist/userInput-VHNBN2MW.js.map +0 -7
- package/dist/uuid-QN2CNKKN.js +0 -9
- /package/dist/{REPL-GIU4ZIXM.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
- /package/dist/{autoUpdater-DNRMJWFQ.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-TWH6PGVG.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
- /package/dist/{config-6ZMBCL23.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
- /package/dist/{context-JQIOOI4W.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-DNEJS3ZU.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
- /package/dist/{env-OFAXZ3XG.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-6N27AC5K.js.map → chunks/config-25HRTPSP.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-HUSAEO24.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-TDMXFWSO.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
- /package/dist/{llmLazy-7TD5N7XP.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
- /package/dist/{loader-AUXIJTY6.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
- /package/dist/{mcp-BXJ3K7NZ.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
- /package/dist/{messages-OFUJSPRV.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
- /package/dist/{model-KPYCXWBK.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
- /package/dist/{openai-5G5D5Q4B.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
- /package/dist/{outputStyles-HLDXFQK3.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
- /package/dist/{pluginValidation-DSFXZ4GF.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
- /package/dist/{prompts-LWLAJRS2.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
- /package/dist/{query-HVPWL27C.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-YOPCY2GO.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
- /package/dist/{skillMarketplace-PSNKDINM.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
- /package/dist/{state-KNRWP3FO.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
- /package/dist/{theme-7S2QN2FO.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-GPOBH4IV.js.map → chunks/src-OROQIWP3.js.map} +0 -0
- /package/dist/{tools-FZU2FZBD.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
- /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
|
@@ -1,20 +1,11 @@
|
|
|
1
|
-
import { createRequire as __kodeCreateRequire } from "node:module";
|
|
2
|
-
const require = __kodeCreateRequire(import.meta.url);
|
|
3
1
|
import {
|
|
4
2
|
SESSION_ID
|
|
5
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3OEJVB5A.js";
|
|
6
4
|
|
|
7
|
-
// src/
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import { format } from "node:util";
|
|
12
|
-
import chalk from "chalk";
|
|
13
|
-
var isDebugMode = () => process.argv.includes("--debug-verbose") || process.argv.includes("--mcp-debug") || process.argv.some(
|
|
14
|
-
(arg) => arg === "--debug" || arg === "-d" || arg.startsWith("--debug=")
|
|
15
|
-
);
|
|
16
|
-
var isVerboseMode = () => process.argv.includes("--verbose");
|
|
17
|
-
var isDebugVerboseMode = () => process.argv.includes("--debug-verbose");
|
|
5
|
+
// packages/core/src/logging/logger.ts
|
|
6
|
+
import chalk2 from "chalk";
|
|
7
|
+
|
|
8
|
+
// packages/core/src/logging/levels.ts
|
|
18
9
|
var TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
|
|
19
10
|
"ERROR" /* ERROR */,
|
|
20
11
|
"WARN" /* WARN */,
|
|
@@ -30,54 +21,19 @@ var DEBUG_VERBOSE_TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
|
|
|
30
21
|
"INFO" /* INFO */,
|
|
31
22
|
"REMINDER" /* REMINDER */
|
|
32
23
|
]);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var KODE_DIR = join(homedir(), ".kode");
|
|
36
|
-
function getProjectDir(cwd) {
|
|
37
|
-
return cwd.replace(/[^a-zA-Z0-9]/g, "-");
|
|
38
|
-
}
|
|
39
|
-
var DEBUG_PATHS = {
|
|
40
|
-
base: () => join(KODE_DIR, getProjectDir(process.cwd()), "debug"),
|
|
41
|
-
detailed: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-detailed.log`),
|
|
42
|
-
flow: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-flow.log`),
|
|
43
|
-
api: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-api.log`),
|
|
44
|
-
state: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-state.log`)
|
|
45
|
-
};
|
|
46
|
-
function ensureDebugDir() {
|
|
47
|
-
const debugDir = DEBUG_PATHS.base();
|
|
48
|
-
if (!existsSync(debugDir)) {
|
|
49
|
-
mkdirSync(debugDir, { recursive: true });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
var currentRequest = null;
|
|
53
|
-
function terminalLog(...args) {
|
|
54
|
-
process.stderr.write(`${format(...args)}
|
|
55
|
-
`);
|
|
56
|
-
}
|
|
57
|
-
function writeToFile(filePath, entry) {
|
|
58
|
-
if (!isDebugMode()) return;
|
|
59
|
-
try {
|
|
60
|
-
ensureDebugDir();
|
|
61
|
-
const logLine = JSON.stringify(
|
|
62
|
-
{
|
|
63
|
-
...entry,
|
|
64
|
-
sessionId: SESSION_ID,
|
|
65
|
-
pid: process.pid,
|
|
66
|
-
uptime: Date.now() - REQUEST_START_TIME
|
|
67
|
-
},
|
|
68
|
-
null,
|
|
69
|
-
2
|
|
70
|
-
) + ",\n";
|
|
71
|
-
appendFileSync(filePath, logLine);
|
|
72
|
-
} catch (error) {
|
|
73
|
-
}
|
|
74
|
-
}
|
|
24
|
+
|
|
25
|
+
// packages/core/src/logging/dedupe.ts
|
|
75
26
|
var recentLogs = /* @__PURE__ */ new Map();
|
|
76
27
|
var LOG_DEDUPE_WINDOW_MS = 5e3;
|
|
28
|
+
function getFileForDedupe(data) {
|
|
29
|
+
if (!data || typeof data !== "object") return "";
|
|
30
|
+
const record = data;
|
|
31
|
+
const file = record.file;
|
|
32
|
+
return typeof file === "string" ? file : "";
|
|
33
|
+
}
|
|
77
34
|
function getDedupeKey(level, phase, data) {
|
|
78
35
|
if (phase.startsWith("CONFIG_")) {
|
|
79
|
-
|
|
80
|
-
return `${level}:${phase}:${file}`;
|
|
36
|
+
return `${level}:${phase}:${getFileForDedupe(data)}`;
|
|
81
37
|
}
|
|
82
38
|
return `${level}:${phase}`;
|
|
83
39
|
}
|
|
@@ -96,18 +52,28 @@ function shouldLogWithDedupe(level, phase, data) {
|
|
|
96
52
|
}
|
|
97
53
|
return false;
|
|
98
54
|
}
|
|
55
|
+
|
|
56
|
+
// packages/core/src/logging/formatters.ts
|
|
57
|
+
import chalk from "chalk";
|
|
58
|
+
function asMessageRecord(value) {
|
|
59
|
+
if (!value || typeof value !== "object") return null;
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
99
62
|
function formatMessages(messages) {
|
|
100
63
|
if (Array.isArray(messages)) {
|
|
101
64
|
const recentMessages = messages.slice(-5);
|
|
102
65
|
return recentMessages.map((msg, index) => {
|
|
103
|
-
const
|
|
66
|
+
const record = asMessageRecord(msg);
|
|
67
|
+
const roleRaw = record?.role;
|
|
68
|
+
const role = typeof roleRaw === "string" ? roleRaw : "unknown";
|
|
69
|
+
const contentRaw = record?.content;
|
|
104
70
|
let content = "";
|
|
105
|
-
if (typeof
|
|
106
|
-
content =
|
|
107
|
-
} else if (typeof
|
|
71
|
+
if (typeof contentRaw === "string") {
|
|
72
|
+
content = contentRaw.length > 300 ? contentRaw.substring(0, 300) + "..." : contentRaw;
|
|
73
|
+
} else if (typeof contentRaw === "object") {
|
|
108
74
|
content = "[complex_content]";
|
|
109
75
|
} else {
|
|
110
|
-
content = String(
|
|
76
|
+
content = String(contentRaw ?? "");
|
|
111
77
|
}
|
|
112
78
|
const totalIndex = messages.length - recentMessages.length + index;
|
|
113
79
|
return `[${totalIndex}] ${chalk.dim(role)}: ${content}`;
|
|
@@ -127,11 +93,93 @@ function formatMessages(messages) {
|
|
|
127
93
|
}
|
|
128
94
|
return typeof messages === "string" ? messages : JSON.stringify(messages);
|
|
129
95
|
}
|
|
96
|
+
function formatDataForTerminal(data) {
|
|
97
|
+
if (typeof data === "object" && data !== null) {
|
|
98
|
+
const record = data;
|
|
99
|
+
if ("messages" in record) {
|
|
100
|
+
const formattedMessages = formatMessages(record.messages);
|
|
101
|
+
return JSON.stringify(
|
|
102
|
+
{
|
|
103
|
+
...record,
|
|
104
|
+
messages: `
|
|
105
|
+
${formattedMessages}`
|
|
106
|
+
},
|
|
107
|
+
null,
|
|
108
|
+
2
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
return JSON.stringify(data, null, 2);
|
|
112
|
+
}
|
|
113
|
+
return typeof data === "string" ? data : JSON.stringify(data);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// packages/core/src/logging/mode.ts
|
|
117
|
+
function isDebugMode() {
|
|
118
|
+
return process.argv.includes("--debug-verbose") || process.argv.includes("--mcp-debug") || process.argv.some(
|
|
119
|
+
(arg) => arg === "--debug" || arg === "-d" || arg.startsWith("--debug=")
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
function isVerboseMode() {
|
|
123
|
+
return process.argv.includes("--verbose");
|
|
124
|
+
}
|
|
125
|
+
function isDebugVerboseMode() {
|
|
126
|
+
return process.argv.includes("--debug-verbose");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// packages/core/src/logging/terminal.ts
|
|
130
|
+
import { format } from "node:util";
|
|
131
|
+
function terminalLog(...args) {
|
|
132
|
+
process.stderr.write(`${format(...args)}
|
|
133
|
+
`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// packages/core/src/logging/transports.ts
|
|
137
|
+
import { appendFileSync, existsSync, mkdirSync } from "fs";
|
|
138
|
+
import { homedir } from "os";
|
|
139
|
+
import { join } from "path";
|
|
140
|
+
var STARTUP_TIMESTAMP = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
141
|
+
var REQUEST_START_TIME = Date.now();
|
|
142
|
+
var KODE_DIR = join(homedir(), ".kode");
|
|
143
|
+
function getProjectDir(cwd) {
|
|
144
|
+
return cwd.replace(/[^a-zA-Z0-9]/g, "-");
|
|
145
|
+
}
|
|
146
|
+
var DEBUG_PATHS = {
|
|
147
|
+
base: () => join(KODE_DIR, getProjectDir(process.cwd()), "debug"),
|
|
148
|
+
detailed: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-detailed.log`),
|
|
149
|
+
flow: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-flow.log`),
|
|
150
|
+
api: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-api.log`),
|
|
151
|
+
state: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-state.log`)
|
|
152
|
+
};
|
|
153
|
+
function ensureDebugDir() {
|
|
154
|
+
const debugDir = DEBUG_PATHS.base();
|
|
155
|
+
if (!existsSync(debugDir)) {
|
|
156
|
+
mkdirSync(debugDir, { recursive: true });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function writeToFile(filePath, entry) {
|
|
160
|
+
if (!isDebugMode()) return;
|
|
161
|
+
try {
|
|
162
|
+
ensureDebugDir();
|
|
163
|
+
const logLine = JSON.stringify(
|
|
164
|
+
{
|
|
165
|
+
...entry,
|
|
166
|
+
sessionId: SESSION_ID,
|
|
167
|
+
pid: process.pid,
|
|
168
|
+
uptime: Date.now() - REQUEST_START_TIME
|
|
169
|
+
},
|
|
170
|
+
null,
|
|
171
|
+
2
|
|
172
|
+
) + ",\n";
|
|
173
|
+
appendFileSync(filePath, logLine);
|
|
174
|
+
} catch {
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// packages/core/src/logging/logger.ts
|
|
179
|
+
var currentRequest = null;
|
|
130
180
|
function shouldShowInTerminal(level) {
|
|
131
181
|
if (!isDebugMode()) return false;
|
|
132
|
-
if (isDebugVerboseMode())
|
|
133
|
-
return DEBUG_VERBOSE_TERMINAL_LOG_LEVELS.has(level);
|
|
134
|
-
}
|
|
182
|
+
if (isDebugVerboseMode()) return DEBUG_VERBOSE_TERMINAL_LOG_LEVELS.has(level);
|
|
135
183
|
return TERMINAL_LOG_LEVELS.has(level);
|
|
136
184
|
}
|
|
137
185
|
function logToTerminal(entry) {
|
|
@@ -139,70 +187,50 @@ function logToTerminal(entry) {
|
|
|
139
187
|
const { level, phase, data, requestId, elapsed } = entry;
|
|
140
188
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
|
|
141
189
|
let prefix = "";
|
|
142
|
-
let color =
|
|
190
|
+
let color = chalk2.gray;
|
|
143
191
|
switch (level) {
|
|
144
192
|
case "FLOW" /* FLOW */:
|
|
145
193
|
prefix = "\u{1F504}";
|
|
146
|
-
color =
|
|
194
|
+
color = chalk2.cyan;
|
|
147
195
|
break;
|
|
148
196
|
case "API" /* API */:
|
|
149
197
|
prefix = "\u{1F310}";
|
|
150
|
-
color =
|
|
198
|
+
color = chalk2.yellow;
|
|
151
199
|
break;
|
|
152
200
|
case "STATE" /* STATE */:
|
|
153
201
|
prefix = "\u{1F4CA}";
|
|
154
|
-
color =
|
|
202
|
+
color = chalk2.blue;
|
|
155
203
|
break;
|
|
156
204
|
case "ERROR" /* ERROR */:
|
|
157
205
|
prefix = "\u274C";
|
|
158
|
-
color =
|
|
206
|
+
color = chalk2.red;
|
|
159
207
|
break;
|
|
160
208
|
case "WARN" /* WARN */:
|
|
161
209
|
prefix = "\u26A0\uFE0F";
|
|
162
|
-
color =
|
|
210
|
+
color = chalk2.yellow;
|
|
163
211
|
break;
|
|
164
212
|
case "INFO" /* INFO */:
|
|
165
213
|
prefix = "\u2139\uFE0F";
|
|
166
|
-
color =
|
|
214
|
+
color = chalk2.green;
|
|
167
215
|
break;
|
|
168
216
|
case "TRACE" /* TRACE */:
|
|
169
217
|
prefix = "\u{1F4C8}";
|
|
170
|
-
color =
|
|
218
|
+
color = chalk2.magenta;
|
|
171
219
|
break;
|
|
172
220
|
default:
|
|
173
221
|
prefix = "\u{1F50D}";
|
|
174
|
-
color =
|
|
175
|
-
}
|
|
176
|
-
const reqId = requestId ? chalk.dim(`[${requestId}]`) : "";
|
|
177
|
-
const elapsedStr = elapsed !== void 0 ? chalk.dim(`+${elapsed}ms`) : "";
|
|
178
|
-
let dataStr = "";
|
|
179
|
-
if (typeof data === "object" && data !== null) {
|
|
180
|
-
if (data.messages) {
|
|
181
|
-
const formattedMessages = formatMessages(data.messages);
|
|
182
|
-
dataStr = JSON.stringify(
|
|
183
|
-
{
|
|
184
|
-
...data,
|
|
185
|
-
messages: `
|
|
186
|
-
${formattedMessages}`
|
|
187
|
-
},
|
|
188
|
-
null,
|
|
189
|
-
2
|
|
190
|
-
);
|
|
191
|
-
} else {
|
|
192
|
-
dataStr = JSON.stringify(data, null, 2);
|
|
193
|
-
}
|
|
194
|
-
} else {
|
|
195
|
-
dataStr = typeof data === "string" ? data : JSON.stringify(data);
|
|
222
|
+
color = chalk2.gray;
|
|
196
223
|
}
|
|
224
|
+
const reqId = requestId ? chalk2.dim(`[${requestId}]`) : "";
|
|
225
|
+
const elapsedStr = elapsed !== void 0 ? chalk2.dim(`+${elapsed}ms`) : "";
|
|
226
|
+
const dataStr = formatDataForTerminal(data);
|
|
197
227
|
terminalLog(
|
|
198
228
|
`${color(`[${timestamp}]`)} ${prefix} ${color(phase)} ${reqId} ${dataStr} ${elapsedStr}`
|
|
199
229
|
);
|
|
200
230
|
}
|
|
201
231
|
function debugLog(level, phase, data, requestId) {
|
|
202
232
|
if (!isDebugMode()) return;
|
|
203
|
-
if (!shouldLogWithDedupe(level, phase, data))
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
233
|
+
if (!shouldLogWithDedupe(level, phase, data)) return;
|
|
206
234
|
const entry = {
|
|
207
235
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
208
236
|
level,
|
|
@@ -247,11 +275,255 @@ function markPhase(phase, data) {
|
|
|
247
275
|
data
|
|
248
276
|
});
|
|
249
277
|
}
|
|
278
|
+
function initDebugLogger() {
|
|
279
|
+
if (!isDebugMode()) return;
|
|
280
|
+
debug.info("DEBUG_LOGGER_INIT", {
|
|
281
|
+
startupTimestamp: STARTUP_TIMESTAMP,
|
|
282
|
+
sessionId: SESSION_ID,
|
|
283
|
+
debugPaths: {
|
|
284
|
+
detailed: DEBUG_PATHS.detailed(),
|
|
285
|
+
flow: DEBUG_PATHS.flow(),
|
|
286
|
+
api: DEBUG_PATHS.api(),
|
|
287
|
+
state: DEBUG_PATHS.state()
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
const terminalLevels = isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS).join(", ") : Array.from(TERMINAL_LOG_LEVELS).join(", ");
|
|
291
|
+
terminalLog(
|
|
292
|
+
chalk2.dim(`[DEBUG] Terminal output filtered to: ${terminalLevels}`)
|
|
293
|
+
);
|
|
294
|
+
terminalLog(
|
|
295
|
+
chalk2.dim(`[DEBUG] Complete logs saved to: ${DEBUG_PATHS.base()}`)
|
|
296
|
+
);
|
|
297
|
+
if (!isDebugVerboseMode()) {
|
|
298
|
+
terminalLog(
|
|
299
|
+
chalk2.dim(
|
|
300
|
+
`[DEBUG] Use --debug-verbose for detailed system logs (FLOW, API, STATE)`
|
|
301
|
+
)
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// packages/core/src/logging/diagnosis.ts
|
|
307
|
+
import chalk3 from "chalk";
|
|
308
|
+
function diagnoseError(error, context) {
|
|
309
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
310
|
+
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
311
|
+
if (errorMessage.includes("aborted") || errorMessage.includes("AbortController")) {
|
|
312
|
+
return {
|
|
313
|
+
errorType: "REQUEST_ABORTED",
|
|
314
|
+
category: "SYSTEM",
|
|
315
|
+
severity: "MEDIUM",
|
|
316
|
+
description: "Request was aborted, often due to user cancellation or timeout",
|
|
317
|
+
suggestions: [
|
|
318
|
+
"\u68C0\u67E5\u662F\u5426\u6309\u4E0B\u4E86 ESC \u952E\u53D6\u6D88\u8BF7\u6C42",
|
|
319
|
+
"\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u7A33\u5B9A",
|
|
320
|
+
"\u9A8C\u8BC1 AbortController \u72B6\u6001: isActive \u548C signal.aborted \u5E94\u8BE5\u4E00\u81F4",
|
|
321
|
+
"\u67E5\u770B\u662F\u5426\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5BFC\u81F4\u51B2\u7A81"
|
|
322
|
+
],
|
|
323
|
+
debugSteps: [
|
|
324
|
+
"\u4F7F\u7528 --debug-verbose \u6A21\u5F0F\u67E5\u770B\u8BE6\u7EC6\u7684\u8BF7\u6C42\u6D41\u7A0B",
|
|
325
|
+
"\u68C0\u67E5 debug \u65E5\u5FD7\u4E2D\u7684 BINARY_FEEDBACK_* \u4E8B\u4EF6",
|
|
326
|
+
"\u9A8C\u8BC1 REQUEST_START \u548C REQUEST_END \u65E5\u5FD7\u914D\u5BF9",
|
|
327
|
+
"\u67E5\u770B QUERY_ABORTED \u4E8B\u4EF6\u7684\u89E6\u53D1\u539F\u56E0"
|
|
328
|
+
]
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
if (errorMessage.includes("api-key") || errorMessage.includes("authentication") || errorMessage.includes("401")) {
|
|
332
|
+
return {
|
|
333
|
+
errorType: "API_AUTHENTICATION",
|
|
334
|
+
category: "API",
|
|
335
|
+
severity: "HIGH",
|
|
336
|
+
description: "API authentication failed - invalid or missing API key",
|
|
337
|
+
suggestions: [
|
|
338
|
+
"\u8FD0\u884C /login \u91CD\u65B0\u8BBE\u7F6E API \u5BC6\u94A5",
|
|
339
|
+
"\u68C0\u67E5 ~/.kode/ \u914D\u7F6E\u6587\u4EF6\u4E2D\u7684 API \u5BC6\u94A5",
|
|
340
|
+
"\u9A8C\u8BC1 API \u5BC6\u94A5\u662F\u5426\u5DF2\u8FC7\u671F\u6216\u88AB\u64A4\u9500",
|
|
341
|
+
"\u786E\u8BA4\u4F7F\u7528\u7684 provider \u8BBE\u7F6E\u6B63\u786E (anthropic/opendev/bigdream)"
|
|
342
|
+
],
|
|
343
|
+
debugSteps: [
|
|
344
|
+
"\u68C0\u67E5 CONFIG_LOAD \u65E5\u5FD7\u4E2D\u7684 provider \u548C API \u5BC6\u94A5\u72B6\u6001",
|
|
345
|
+
"\u8FD0\u884C kode doctor \u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7\u72B6\u6001",
|
|
346
|
+
"\u67E5\u770B API_ERROR \u65E5\u5FD7\u4E86\u89E3\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
|
|
347
|
+
"\u4F7F\u7528 kode config \u547D\u4EE4\u67E5\u770B\u5F53\u524D\u914D\u7F6E"
|
|
348
|
+
]
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("timeout")) {
|
|
352
|
+
return {
|
|
353
|
+
errorType: "NETWORK_CONNECTION",
|
|
354
|
+
category: "NETWORK",
|
|
355
|
+
severity: "HIGH",
|
|
356
|
+
description: "Network connection failed - unable to reach API endpoint",
|
|
357
|
+
suggestions: [
|
|
358
|
+
"\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38",
|
|
359
|
+
"\u786E\u8BA4\u9632\u706B\u5899\u6CA1\u6709\u963B\u6B62\u76F8\u5173\u7AEF\u53E3",
|
|
360
|
+
"\u68C0\u67E5 proxy \u8BBE\u7F6E\u662F\u5426\u6B63\u786E",
|
|
361
|
+
"\u5C1D\u8BD5\u5207\u6362\u5230\u4E0D\u540C\u7684\u7F51\u7EDC\u73AF\u5883",
|
|
362
|
+
"\u9A8C\u8BC1 baseURL \u914D\u7F6E\u662F\u5426\u6B63\u786E"
|
|
363
|
+
],
|
|
364
|
+
debugSteps: [
|
|
365
|
+
"\u68C0\u67E5 API_REQUEST_START \u548C\u76F8\u5173\u7F51\u7EDC\u65E5\u5FD7",
|
|
366
|
+
"\u67E5\u770B LLM_REQUEST_ERROR \u4E2D\u7684\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
|
|
367
|
+
"\u4F7F\u7528 ping \u6216 curl \u6D4B\u8BD5 API \u7AEF\u70B9\u8FDE\u901A\u6027",
|
|
368
|
+
"\u68C0\u67E5\u4F01\u4E1A\u7F51\u7EDC\u662F\u5426\u9700\u8981\u4EE3\u7406\u8BBE\u7F6E"
|
|
369
|
+
]
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
if (errorMessage.includes("permission") || errorMessage.includes("EACCES") || errorMessage.includes("denied")) {
|
|
373
|
+
return {
|
|
374
|
+
errorType: "PERMISSION_DENIED",
|
|
375
|
+
category: "PERMISSION",
|
|
376
|
+
severity: "MEDIUM",
|
|
377
|
+
description: "Permission denied - insufficient access rights",
|
|
378
|
+
suggestions: [
|
|
379
|
+
"\u68C0\u67E5\u6587\u4EF6\u548C\u76EE\u5F55\u7684\u8BFB\u5199\u6743\u9650",
|
|
380
|
+
"\u786E\u8BA4\u5F53\u524D\u7528\u6237\u6709\u8DB3\u591F\u7684\u7CFB\u7EDF\u6743\u9650",
|
|
381
|
+
"\u67E5\u770B\u662F\u5426\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
|
|
382
|
+
"\u68C0\u67E5\u5DE5\u5177\u6743\u9650\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E"
|
|
383
|
+
],
|
|
384
|
+
debugSteps: [
|
|
385
|
+
"\u67E5\u770B PERMISSION_* \u65E5\u5FD7\u4E86\u89E3\u6743\u9650\u68C0\u67E5\u8FC7\u7A0B",
|
|
386
|
+
"\u68C0\u67E5\u6587\u4EF6\u7CFB\u7EDF\u6743\u9650: ls -la",
|
|
387
|
+
"\u9A8C\u8BC1\u5DE5\u5177\u5BA1\u6279\u72B6\u6001",
|
|
388
|
+
"\u67E5\u770B TOOL_* \u76F8\u5173\u7684\u8C03\u8BD5\u65E5\u5FD7"
|
|
389
|
+
]
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
if (errorMessage.includes("substring is not a function") || errorMessage.includes("content")) {
|
|
393
|
+
return {
|
|
394
|
+
errorType: "RESPONSE_FORMAT",
|
|
395
|
+
category: "API",
|
|
396
|
+
severity: "MEDIUM",
|
|
397
|
+
description: "LLM response format mismatch between different providers",
|
|
398
|
+
suggestions: [
|
|
399
|
+
"\u68C0\u67E5\u5F53\u524D\u4F7F\u7528\u7684 provider \u662F\u5426\u4E0E\u671F\u671B\u4E00\u81F4",
|
|
400
|
+
"\u9A8C\u8BC1\u54CD\u5E94\u683C\u5F0F\u5904\u7406\u903B\u8F91",
|
|
401
|
+
"\u786E\u8BA4\u4E0D\u540C provider \u7684\u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
|
|
402
|
+
"\u68C0\u67E5\u662F\u5426\u9700\u8981\u66F4\u65B0\u54CD\u5E94\u89E3\u6790\u4EE3\u7801"
|
|
403
|
+
],
|
|
404
|
+
debugSteps: [
|
|
405
|
+
"\u67E5\u770B LLM_CALL_DEBUG \u4E2D\u7684\u54CD\u5E94\u683C\u5F0F",
|
|
406
|
+
"\u68C0\u67E5 provider \u914D\u7F6E\u548C\u5B9E\u9645\u4F7F\u7528\u7684 API",
|
|
407
|
+
"\u5BF9\u6BD4 Anthropic \u548C OpenAI \u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
|
|
408
|
+
"\u9A8C\u8BC1 logLLMInteraction \u51FD\u6570\u7684\u683C\u5F0F\u5904\u7406"
|
|
409
|
+
]
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
if (errorMessage.includes("too long") || errorMessage.includes("context") || errorMessage.includes("token")) {
|
|
413
|
+
return {
|
|
414
|
+
errorType: "CONTEXT_OVERFLOW",
|
|
415
|
+
category: "SYSTEM",
|
|
416
|
+
severity: "MEDIUM",
|
|
417
|
+
description: "Context window exceeded - conversation too long",
|
|
418
|
+
suggestions: [
|
|
419
|
+
"\u8FD0\u884C /compact \u624B\u52A8\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
|
|
420
|
+
"\u68C0\u67E5\u81EA\u52A8\u538B\u7F29\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E",
|
|
421
|
+
"\u51CF\u5C11\u5355\u6B21\u8F93\u5165\u7684\u5185\u5BB9\u957F\u5EA6",
|
|
422
|
+
"\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F"
|
|
423
|
+
],
|
|
424
|
+
debugSteps: [
|
|
425
|
+
"\u67E5\u770B AUTO_COMPACT_* \u65E5\u5FD7\u68C0\u67E5\u538B\u7F29\u89E6\u53D1",
|
|
426
|
+
"\u68C0\u67E5 token \u4F7F\u7528\u91CF\u548C\u9608\u503C",
|
|
427
|
+
"\u67E5\u770B CONTEXT_COMPRESSION \u76F8\u5173\u65E5\u5FD7",
|
|
428
|
+
"\u9A8C\u8BC1\u6A21\u578B\u7684\u6700\u5927 token \u9650\u5236"
|
|
429
|
+
]
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
if (errorMessage.includes("config") || errorMessage.includes("undefined") && context?.configRelated) {
|
|
433
|
+
return {
|
|
434
|
+
errorType: "CONFIGURATION",
|
|
435
|
+
category: "CONFIG",
|
|
436
|
+
severity: "MEDIUM",
|
|
437
|
+
description: "Configuration error - missing or invalid settings",
|
|
438
|
+
suggestions: [
|
|
439
|
+
"\u8FD0\u884C kode config \u68C0\u67E5\u914D\u7F6E\u8BBE\u7F6E",
|
|
440
|
+
"\u5220\u9664\u635F\u574F\u7684\u914D\u7F6E\u6587\u4EF6\u91CD\u65B0\u521D\u59CB\u5316",
|
|
441
|
+
"\u68C0\u67E5 JSON \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u662F\u5426\u6B63\u786E",
|
|
442
|
+
"\u9A8C\u8BC1\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E"
|
|
443
|
+
],
|
|
444
|
+
debugSteps: [
|
|
445
|
+
"\u67E5\u770B CONFIG_LOAD \u548C CONFIG_SAVE \u65E5\u5FD7",
|
|
446
|
+
"\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650",
|
|
447
|
+
"\u9A8C\u8BC1 JSON \u683C\u5F0F: cat ~/.kode/config.json | jq",
|
|
448
|
+
"\u67E5\u770B\u914D\u7F6E\u7F13\u5B58\u76F8\u5173\u7684\u8C03\u8BD5\u4FE1\u606F"
|
|
449
|
+
]
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
errorType: "UNKNOWN",
|
|
454
|
+
category: "SYSTEM",
|
|
455
|
+
severity: "MEDIUM",
|
|
456
|
+
description: `Unexpected error: ${errorMessage}`,
|
|
457
|
+
suggestions: [
|
|
458
|
+
"\u91CD\u65B0\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F",
|
|
459
|
+
"\u68C0\u67E5\u7CFB\u7EDF\u8D44\u6E90\u662F\u5426\u5145\u8DB3",
|
|
460
|
+
"\u67E5\u770B\u5B8C\u6574\u7684\u9519\u8BEF\u65E5\u5FD7\u83B7\u53D6\u66F4\u591A\u4FE1\u606F",
|
|
461
|
+
"\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u62A5\u544A\u6B64\u9519\u8BEF"
|
|
462
|
+
],
|
|
463
|
+
debugSteps: [
|
|
464
|
+
"\u4F7F\u7528 --debug-verbose \u83B7\u53D6\u8BE6\u7EC6\u65E5\u5FD7",
|
|
465
|
+
"\u68C0\u67E5 error.log \u4E2D\u7684\u5B8C\u6574\u9519\u8BEF\u4FE1\u606F",
|
|
466
|
+
"\u67E5\u770B\u7CFB\u7EDF\u8D44\u6E90\u4F7F\u7528\u60C5\u51B5",
|
|
467
|
+
"\u6536\u96C6\u91CD\u73B0\u6B65\u9AA4\u548C\u73AF\u5883\u4FE1\u606F"
|
|
468
|
+
],
|
|
469
|
+
relatedLogs: errorStack ? [errorStack] : void 0
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
function logErrorWithDiagnosis(error, context, requestId) {
|
|
473
|
+
if (!isDebugMode()) return;
|
|
474
|
+
const diagnosis = diagnoseError(error, context);
|
|
475
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
476
|
+
debug.error(
|
|
477
|
+
"ERROR_OCCURRED",
|
|
478
|
+
{
|
|
479
|
+
error: errorMessage,
|
|
480
|
+
errorType: diagnosis.errorType,
|
|
481
|
+
category: diagnosis.category,
|
|
482
|
+
severity: diagnosis.severity,
|
|
483
|
+
context
|
|
484
|
+
},
|
|
485
|
+
requestId
|
|
486
|
+
);
|
|
487
|
+
terminalLog("\n" + chalk3.red("\u{1F6A8} ERROR DIAGNOSIS"));
|
|
488
|
+
terminalLog(chalk3.gray("\u2501".repeat(60)));
|
|
489
|
+
terminalLog(chalk3.red(`\u274C ${diagnosis.errorType}`));
|
|
490
|
+
terminalLog(
|
|
491
|
+
chalk3.dim(
|
|
492
|
+
`Category: ${diagnosis.category} | Severity: ${diagnosis.severity}`
|
|
493
|
+
)
|
|
494
|
+
);
|
|
495
|
+
terminalLog(`
|
|
496
|
+
${diagnosis.description}`);
|
|
497
|
+
terminalLog(chalk3.yellow("\n\u{1F4A1} Recovery Suggestions:"));
|
|
498
|
+
diagnosis.suggestions.forEach((suggestion, index) => {
|
|
499
|
+
terminalLog(` ${index + 1}. ${suggestion}`);
|
|
500
|
+
});
|
|
501
|
+
terminalLog(chalk3.cyan("\n\u{1F50D} Debug Steps:"));
|
|
502
|
+
diagnosis.debugSteps.forEach((step, index) => {
|
|
503
|
+
terminalLog(` ${index + 1}. ${step}`);
|
|
504
|
+
});
|
|
505
|
+
if (diagnosis.relatedLogs && diagnosis.relatedLogs.length > 0) {
|
|
506
|
+
terminalLog(chalk3.magenta("\n\u{1F4CB} Related Information:"));
|
|
507
|
+
diagnosis.relatedLogs.forEach((log) => {
|
|
508
|
+
const truncatedLog = log.length > 200 ? log.substring(0, 200) + "..." : log;
|
|
509
|
+
terminalLog(chalk3.dim(` ${truncatedLog}`));
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
const debugPath = DEBUG_PATHS.base();
|
|
513
|
+
terminalLog(chalk3.gray(`
|
|
514
|
+
\u{1F4C1} Complete logs: ${debugPath}`));
|
|
515
|
+
terminalLog(chalk3.gray("\u2501".repeat(60)));
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
// packages/core/src/logging/apiError.ts
|
|
519
|
+
import { appendFileSync as appendFileSync2, existsSync as existsSync2, mkdirSync as mkdirSync2 } from "fs";
|
|
520
|
+
import { join as join2 } from "path";
|
|
521
|
+
import chalk4 from "chalk";
|
|
250
522
|
function logAPIError(context) {
|
|
251
|
-
const errorDir =
|
|
252
|
-
if (!
|
|
523
|
+
const errorDir = join2(KODE_DIR, "logs", "error", "api");
|
|
524
|
+
if (!existsSync2(errorDir)) {
|
|
253
525
|
try {
|
|
254
|
-
|
|
526
|
+
mkdirSync2(errorDir, { recursive: true });
|
|
255
527
|
} catch (err) {
|
|
256
528
|
terminalLog("Failed to create error log directory:", err);
|
|
257
529
|
return;
|
|
@@ -260,7 +532,7 @@ function logAPIError(context) {
|
|
|
260
532
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
261
533
|
const sanitizedModel = context.model.replace(/[^a-zA-Z0-9-_]/g, "_");
|
|
262
534
|
const filename = `${sanitizedModel}_${timestamp}.log`;
|
|
263
|
-
const filepath =
|
|
535
|
+
const filepath = join2(errorDir, filename);
|
|
264
536
|
const fullLogContent = {
|
|
265
537
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
266
538
|
sessionId: SESSION_ID,
|
|
@@ -279,8 +551,8 @@ function logAPIError(context) {
|
|
|
279
551
|
}
|
|
280
552
|
};
|
|
281
553
|
try {
|
|
282
|
-
|
|
283
|
-
|
|
554
|
+
appendFileSync2(filepath, JSON.stringify(fullLogContent, null, 2) + "\n");
|
|
555
|
+
appendFileSync2(filepath, "=".repeat(80) + "\n\n");
|
|
284
556
|
} catch (err) {
|
|
285
557
|
terminalLog("Failed to write API error log:", err);
|
|
286
558
|
}
|
|
@@ -295,11 +567,11 @@ function logAPIError(context) {
|
|
|
295
567
|
}
|
|
296
568
|
if (isVerboseMode() || isDebugVerboseMode()) {
|
|
297
569
|
terminalLog();
|
|
298
|
-
terminalLog(
|
|
299
|
-
terminalLog(
|
|
300
|
-
terminalLog(
|
|
301
|
-
terminalLog(
|
|
302
|
-
terminalLog(
|
|
570
|
+
terminalLog(chalk4.red("\u2501".repeat(60)));
|
|
571
|
+
terminalLog(chalk4.red.bold("\u26A0\uFE0F API Error"));
|
|
572
|
+
terminalLog(chalk4.red("\u2501".repeat(60)));
|
|
573
|
+
terminalLog(chalk4.white(" Model: ") + chalk4.yellow(context.model));
|
|
574
|
+
terminalLog(chalk4.white(" Status: ") + chalk4.red(context.status));
|
|
303
575
|
let errorMessage = "Unknown error";
|
|
304
576
|
if (typeof context.error === "string") {
|
|
305
577
|
errorMessage = context.error;
|
|
@@ -308,27 +580,36 @@ function logAPIError(context) {
|
|
|
308
580
|
} else if (context.error?.error?.message) {
|
|
309
581
|
errorMessage = context.error.error.message;
|
|
310
582
|
}
|
|
311
|
-
terminalLog(
|
|
583
|
+
terminalLog(chalk4.white(" Error: ") + chalk4.red(errorMessage));
|
|
312
584
|
if (context.response) {
|
|
313
585
|
terminalLog();
|
|
314
|
-
terminalLog(
|
|
586
|
+
terminalLog(chalk4.gray(" Response:"));
|
|
315
587
|
const responseStr = typeof context.response === "string" ? context.response : JSON.stringify(context.response, null, 2);
|
|
316
588
|
responseStr.split("\n").forEach((line) => {
|
|
317
|
-
terminalLog(
|
|
589
|
+
terminalLog(chalk4.gray(" " + line));
|
|
318
590
|
});
|
|
319
591
|
}
|
|
320
592
|
terminalLog();
|
|
321
|
-
terminalLog(
|
|
322
|
-
terminalLog(
|
|
593
|
+
terminalLog(chalk4.dim(` \u{1F4C1} Full log: ${filepath}`));
|
|
594
|
+
terminalLog(chalk4.red("\u2501".repeat(60)));
|
|
323
595
|
terminalLog();
|
|
324
596
|
}
|
|
325
597
|
}
|
|
598
|
+
|
|
599
|
+
// packages/core/src/logging/llm.ts
|
|
600
|
+
import chalk5 from "chalk";
|
|
601
|
+
var ROLE_COLORS = {
|
|
602
|
+
green: chalk5.green,
|
|
603
|
+
blue: chalk5.blue,
|
|
604
|
+
yellow: chalk5.yellow,
|
|
605
|
+
gray: chalk5.gray
|
|
606
|
+
};
|
|
326
607
|
function logLLMInteraction(context) {
|
|
327
608
|
if (!isDebugMode()) return;
|
|
328
609
|
const duration = context.timing.end - context.timing.start;
|
|
329
|
-
terminalLog("\n" +
|
|
330
|
-
terminalLog(
|
|
331
|
-
terminalLog(
|
|
610
|
+
terminalLog("\n" + chalk5.blue("\u{1F9E0} LLM CALL DEBUG"));
|
|
611
|
+
terminalLog(chalk5.gray("\u2501".repeat(60)));
|
|
612
|
+
terminalLog(chalk5.yellow("\u{1F4CA} Context Overview:"));
|
|
332
613
|
terminalLog(` Messages Count: ${context.messages.length}`);
|
|
333
614
|
terminalLog(` System Prompt Length: ${context.systemPrompt.length} chars`);
|
|
334
615
|
terminalLog(` Duration: ${duration.toFixed(0)}ms`);
|
|
@@ -338,7 +619,7 @@ function logLLMInteraction(context) {
|
|
|
338
619
|
);
|
|
339
620
|
}
|
|
340
621
|
const apiLabel = context.apiFormat ? ` (${context.apiFormat.toUpperCase()})` : "";
|
|
341
|
-
terminalLog(
|
|
622
|
+
terminalLog(chalk5.cyan(`
|
|
342
623
|
\u{1F4AC} Real API Messages${apiLabel} (last 10):`));
|
|
343
624
|
const recentMessages = context.messages.slice(-10);
|
|
344
625
|
recentMessages.forEach((msg, index) => {
|
|
@@ -378,12 +659,13 @@ function logLLMInteraction(context) {
|
|
|
378
659
|
}
|
|
379
660
|
if (isReminder) {
|
|
380
661
|
terminalLog(
|
|
381
|
-
` [${globalIndex}] ${
|
|
662
|
+
` [${globalIndex}] ${chalk5.magenta("\u{1F514} REMINDER")}: ${chalk5.dim(content)}`
|
|
382
663
|
);
|
|
383
664
|
} else {
|
|
384
665
|
const roleIcon = msg.role === "user" ? "\u{1F464}" : msg.role === "assistant" ? "\u{1F916}" : msg.role === "system" ? "\u2699\uFE0F" : "\u{1F4C4}";
|
|
666
|
+
const roleLabel = String(msg.role ?? "").toUpperCase();
|
|
385
667
|
terminalLog(
|
|
386
|
-
` [${globalIndex}] ${
|
|
668
|
+
` [${globalIndex}] ${ROLE_COLORS[roleColor](roleIcon + " " + roleLabel)}: ${content}`
|
|
387
669
|
);
|
|
388
670
|
}
|
|
389
671
|
if (msg.role === "assistant" && Array.isArray(msg.content)) {
|
|
@@ -392,7 +674,7 @@ function logLLMInteraction(context) {
|
|
|
392
674
|
);
|
|
393
675
|
if (toolCalls2.length > 0) {
|
|
394
676
|
terminalLog(
|
|
395
|
-
|
|
677
|
+
chalk5.cyan(
|
|
396
678
|
` \u{1F527} \u2192 Tool calls (${toolCalls2.length}): ${toolCalls2.map((t) => t.name).join(", ")}`
|
|
397
679
|
)
|
|
398
680
|
);
|
|
@@ -401,14 +683,14 @@ function logLLMInteraction(context) {
|
|
|
401
683
|
const maxLength = 200;
|
|
402
684
|
const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
|
|
403
685
|
terminalLog(
|
|
404
|
-
|
|
686
|
+
chalk5.dim(` [${idx}] ${tool.name}: ${displayInput}`)
|
|
405
687
|
);
|
|
406
688
|
});
|
|
407
689
|
}
|
|
408
690
|
}
|
|
409
691
|
if (msg.tool_calls && msg.tool_calls.length > 0) {
|
|
410
692
|
terminalLog(
|
|
411
|
-
|
|
693
|
+
chalk5.cyan(
|
|
412
694
|
` \u{1F527} \u2192 Tool calls (${msg.tool_calls.length}): ${msg.tool_calls.map((t) => t.function.name).join(", ")}`
|
|
413
695
|
)
|
|
414
696
|
);
|
|
@@ -417,12 +699,12 @@ function logLLMInteraction(context) {
|
|
|
417
699
|
const maxLength = 200;
|
|
418
700
|
const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
|
|
419
701
|
terminalLog(
|
|
420
|
-
|
|
702
|
+
chalk5.dim(` [${idx}] ${tool.function.name}: ${displayInput}`)
|
|
421
703
|
);
|
|
422
704
|
});
|
|
423
705
|
}
|
|
424
706
|
});
|
|
425
|
-
terminalLog(
|
|
707
|
+
terminalLog(chalk5.magenta("\n\u{1F916} LLM Response:"));
|
|
426
708
|
let responseContent = "";
|
|
427
709
|
let toolCalls = [];
|
|
428
710
|
if (Array.isArray(context.response.content)) {
|
|
@@ -461,7 +743,7 @@ function logLLMInteraction(context) {
|
|
|
461
743
|
(t) => t.name || t.function?.name || "unknown"
|
|
462
744
|
);
|
|
463
745
|
terminalLog(
|
|
464
|
-
|
|
746
|
+
chalk5.cyan(
|
|
465
747
|
` \u{1F527} Tool Calls (${toolCalls.length}): ${toolNames.join(", ")}`
|
|
466
748
|
)
|
|
467
749
|
);
|
|
@@ -471,17 +753,17 @@ function logLLMInteraction(context) {
|
|
|
471
753
|
const inputStr = typeof toolInput === "string" ? toolInput : JSON.stringify(toolInput);
|
|
472
754
|
const maxToolInputLength = 300;
|
|
473
755
|
const displayInput = inputStr.length > maxToolInputLength ? inputStr.substring(0, maxToolInputLength) + "..." : inputStr;
|
|
474
|
-
terminalLog(
|
|
756
|
+
terminalLog(chalk5.dim(` [${index}] ${toolName}: ${displayInput}`));
|
|
475
757
|
});
|
|
476
758
|
}
|
|
477
759
|
terminalLog(
|
|
478
760
|
` Stop Reason: ${context.response.stop_reason || context.response.finish_reason || "unknown"}`
|
|
479
761
|
);
|
|
480
|
-
terminalLog(
|
|
762
|
+
terminalLog(chalk5.gray("\u2501".repeat(60)));
|
|
481
763
|
}
|
|
482
764
|
function logSystemPromptConstruction(construction) {
|
|
483
765
|
if (!isDebugMode()) return;
|
|
484
|
-
terminalLog("\n" +
|
|
766
|
+
terminalLog("\n" + chalk5.yellow("\u{1F4DD} SYSTEM PROMPT CONSTRUCTION"));
|
|
485
767
|
terminalLog(` Base Prompt: ${construction.basePrompt.length} chars`);
|
|
486
768
|
if (construction.kodeContext) {
|
|
487
769
|
terminalLog(` + Kode Context: ${construction.kodeContext.length} chars`);
|
|
@@ -491,7 +773,7 @@ function logSystemPromptConstruction(construction) {
|
|
|
491
773
|
` + Dynamic Reminders: ${construction.reminders.length} items`
|
|
492
774
|
);
|
|
493
775
|
construction.reminders.forEach((reminder, index) => {
|
|
494
|
-
terminalLog(
|
|
776
|
+
terminalLog(chalk5.dim(` [${index}] ${reminder.substring(0, 80)}...`));
|
|
495
777
|
});
|
|
496
778
|
}
|
|
497
779
|
terminalLog(` = Final Length: ${construction.finalPrompt.length} chars`);
|
|
@@ -500,295 +782,59 @@ function logUserFriendly(type, data, requestId) {
|
|
|
500
782
|
if (!isDebugMode()) return;
|
|
501
783
|
const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
|
|
502
784
|
let message = "";
|
|
503
|
-
let color =
|
|
785
|
+
let color = chalk5.gray;
|
|
504
786
|
let icon = "\u2022";
|
|
505
787
|
switch (type) {
|
|
506
788
|
case "SESSION_START":
|
|
507
789
|
icon = "\u{1F680}";
|
|
508
|
-
color =
|
|
790
|
+
color = chalk5.green;
|
|
509
791
|
message = `Session started with ${data.model || "default model"}`;
|
|
510
792
|
break;
|
|
511
793
|
case "QUERY_START":
|
|
512
794
|
icon = "\u{1F4AD}";
|
|
513
|
-
color =
|
|
795
|
+
color = chalk5.blue;
|
|
514
796
|
message = `Processing query: "${data.query?.substring(0, 50)}${data.query?.length > 50 ? "..." : ""}"`;
|
|
515
797
|
break;
|
|
516
798
|
case "QUERY_PROGRESS":
|
|
517
799
|
icon = "\u23F3";
|
|
518
|
-
color =
|
|
800
|
+
color = chalk5.yellow;
|
|
519
801
|
message = `${data.phase} (${data.elapsed}ms)`;
|
|
520
802
|
break;
|
|
521
803
|
case "QUERY_COMPLETE":
|
|
522
804
|
icon = "\u2705";
|
|
523
|
-
color =
|
|
805
|
+
color = chalk5.green;
|
|
524
806
|
message = `Query completed in ${data.duration}ms - Cost: $${data.cost} - ${data.tokens} tokens`;
|
|
525
807
|
break;
|
|
526
808
|
case "TOOL_EXECUTION":
|
|
527
809
|
icon = "\u{1F527}";
|
|
528
|
-
color =
|
|
810
|
+
color = chalk5.cyan;
|
|
529
811
|
message = `${data.toolName}: ${data.action} ${data.target ? "\u2192 " + data.target : ""}`;
|
|
530
812
|
break;
|
|
531
813
|
case "ERROR_OCCURRED":
|
|
532
814
|
icon = "\u274C";
|
|
533
|
-
color =
|
|
815
|
+
color = chalk5.red;
|
|
534
816
|
message = `${data.error} ${data.context ? "(" + data.context + ")" : ""}`;
|
|
535
817
|
break;
|
|
536
818
|
case "PERFORMANCE_SUMMARY":
|
|
537
819
|
icon = "\u{1F4CA}";
|
|
538
|
-
color =
|
|
820
|
+
color = chalk5.magenta;
|
|
539
821
|
message = `Session: ${data.queries} queries, $${data.totalCost}, ${data.avgResponseTime}ms avg`;
|
|
540
822
|
break;
|
|
541
823
|
default:
|
|
542
824
|
message = JSON.stringify(data);
|
|
543
825
|
}
|
|
544
|
-
const reqId = requestId ?
|
|
826
|
+
const reqId = requestId ? chalk5.dim(`[${requestId.slice(0, 8)}]`) : "";
|
|
545
827
|
terminalLog(`${color(`[${timestamp}]`)} ${icon} ${color(message)} ${reqId}`);
|
|
546
828
|
}
|
|
547
|
-
function initDebugLogger() {
|
|
548
|
-
if (!isDebugMode()) return;
|
|
549
|
-
debug.info("DEBUG_LOGGER_INIT", {
|
|
550
|
-
startupTimestamp: STARTUP_TIMESTAMP,
|
|
551
|
-
sessionId: SESSION_ID,
|
|
552
|
-
debugPaths: {
|
|
553
|
-
detailed: DEBUG_PATHS.detailed(),
|
|
554
|
-
flow: DEBUG_PATHS.flow(),
|
|
555
|
-
api: DEBUG_PATHS.api(),
|
|
556
|
-
state: DEBUG_PATHS.state()
|
|
557
|
-
}
|
|
558
|
-
});
|
|
559
|
-
const terminalLevels = isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS).join(", ") : Array.from(TERMINAL_LOG_LEVELS).join(", ");
|
|
560
|
-
terminalLog(
|
|
561
|
-
chalk.dim(`[DEBUG] Terminal output filtered to: ${terminalLevels}`)
|
|
562
|
-
);
|
|
563
|
-
terminalLog(
|
|
564
|
-
chalk.dim(`[DEBUG] Complete logs saved to: ${DEBUG_PATHS.base()}`)
|
|
565
|
-
);
|
|
566
|
-
if (!isDebugVerboseMode()) {
|
|
567
|
-
terminalLog(
|
|
568
|
-
chalk.dim(
|
|
569
|
-
`[DEBUG] Use --debug-verbose for detailed system logs (FLOW, API, STATE)`
|
|
570
|
-
)
|
|
571
|
-
);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
function diagnoseError(error, context) {
|
|
575
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
576
|
-
const errorStack = error instanceof Error ? error.stack : void 0;
|
|
577
|
-
if (errorMessage.includes("aborted") || errorMessage.includes("AbortController")) {
|
|
578
|
-
return {
|
|
579
|
-
errorType: "REQUEST_ABORTED",
|
|
580
|
-
category: "SYSTEM",
|
|
581
|
-
severity: "MEDIUM",
|
|
582
|
-
description: "Request was aborted, often due to user cancellation or timeout",
|
|
583
|
-
suggestions: [
|
|
584
|
-
"\u68C0\u67E5\u662F\u5426\u6309\u4E0B\u4E86 ESC \u952E\u53D6\u6D88\u8BF7\u6C42",
|
|
585
|
-
"\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u7A33\u5B9A",
|
|
586
|
-
"\u9A8C\u8BC1 AbortController \u72B6\u6001: isActive \u548C signal.aborted \u5E94\u8BE5\u4E00\u81F4",
|
|
587
|
-
"\u67E5\u770B\u662F\u5426\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5BFC\u81F4\u51B2\u7A81"
|
|
588
|
-
],
|
|
589
|
-
debugSteps: [
|
|
590
|
-
"\u4F7F\u7528 --debug-verbose \u6A21\u5F0F\u67E5\u770B\u8BE6\u7EC6\u7684\u8BF7\u6C42\u6D41\u7A0B",
|
|
591
|
-
"\u68C0\u67E5 debug \u65E5\u5FD7\u4E2D\u7684 BINARY_FEEDBACK_* \u4E8B\u4EF6",
|
|
592
|
-
"\u9A8C\u8BC1 REQUEST_START \u548C REQUEST_END \u65E5\u5FD7\u914D\u5BF9",
|
|
593
|
-
"\u67E5\u770B QUERY_ABORTED \u4E8B\u4EF6\u7684\u89E6\u53D1\u539F\u56E0"
|
|
594
|
-
]
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
if (errorMessage.includes("api-key") || errorMessage.includes("authentication") || errorMessage.includes("401")) {
|
|
598
|
-
return {
|
|
599
|
-
errorType: "API_AUTHENTICATION",
|
|
600
|
-
category: "API",
|
|
601
|
-
severity: "HIGH",
|
|
602
|
-
description: "API authentication failed - invalid or missing API key",
|
|
603
|
-
suggestions: [
|
|
604
|
-
"\u8FD0\u884C /login \u91CD\u65B0\u8BBE\u7F6E API \u5BC6\u94A5",
|
|
605
|
-
"\u68C0\u67E5 ~/.kode/ \u914D\u7F6E\u6587\u4EF6\u4E2D\u7684 API \u5BC6\u94A5",
|
|
606
|
-
"\u9A8C\u8BC1 API \u5BC6\u94A5\u662F\u5426\u5DF2\u8FC7\u671F\u6216\u88AB\u64A4\u9500",
|
|
607
|
-
"\u786E\u8BA4\u4F7F\u7528\u7684 provider \u8BBE\u7F6E\u6B63\u786E (anthropic/opendev/bigdream)"
|
|
608
|
-
],
|
|
609
|
-
debugSteps: [
|
|
610
|
-
"\u68C0\u67E5 CONFIG_LOAD \u65E5\u5FD7\u4E2D\u7684 provider \u548C API \u5BC6\u94A5\u72B6\u6001",
|
|
611
|
-
"\u8FD0\u884C kode doctor \u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7\u72B6\u6001",
|
|
612
|
-
"\u67E5\u770B API_ERROR \u65E5\u5FD7\u4E86\u89E3\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
|
|
613
|
-
"\u4F7F\u7528 kode config \u547D\u4EE4\u67E5\u770B\u5F53\u524D\u914D\u7F6E"
|
|
614
|
-
]
|
|
615
|
-
};
|
|
616
|
-
}
|
|
617
|
-
if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("timeout")) {
|
|
618
|
-
return {
|
|
619
|
-
errorType: "NETWORK_CONNECTION",
|
|
620
|
-
category: "NETWORK",
|
|
621
|
-
severity: "HIGH",
|
|
622
|
-
description: "Network connection failed - unable to reach API endpoint",
|
|
623
|
-
suggestions: [
|
|
624
|
-
"\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38",
|
|
625
|
-
"\u786E\u8BA4\u9632\u706B\u5899\u6CA1\u6709\u963B\u6B62\u76F8\u5173\u7AEF\u53E3",
|
|
626
|
-
"\u68C0\u67E5 proxy \u8BBE\u7F6E\u662F\u5426\u6B63\u786E",
|
|
627
|
-
"\u5C1D\u8BD5\u5207\u6362\u5230\u4E0D\u540C\u7684\u7F51\u7EDC\u73AF\u5883",
|
|
628
|
-
"\u9A8C\u8BC1 baseURL \u914D\u7F6E\u662F\u5426\u6B63\u786E"
|
|
629
|
-
],
|
|
630
|
-
debugSteps: [
|
|
631
|
-
"\u68C0\u67E5 API_REQUEST_START \u548C\u76F8\u5173\u7F51\u7EDC\u65E5\u5FD7",
|
|
632
|
-
"\u67E5\u770B LLM_REQUEST_ERROR \u4E2D\u7684\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
|
|
633
|
-
"\u4F7F\u7528 ping \u6216 curl \u6D4B\u8BD5 API \u7AEF\u70B9\u8FDE\u901A\u6027",
|
|
634
|
-
"\u68C0\u67E5\u4F01\u4E1A\u7F51\u7EDC\u662F\u5426\u9700\u8981\u4EE3\u7406\u8BBE\u7F6E"
|
|
635
|
-
]
|
|
636
|
-
};
|
|
637
|
-
}
|
|
638
|
-
if (errorMessage.includes("permission") || errorMessage.includes("EACCES") || errorMessage.includes("denied")) {
|
|
639
|
-
return {
|
|
640
|
-
errorType: "PERMISSION_DENIED",
|
|
641
|
-
category: "PERMISSION",
|
|
642
|
-
severity: "MEDIUM",
|
|
643
|
-
description: "Permission denied - insufficient access rights",
|
|
644
|
-
suggestions: [
|
|
645
|
-
"\u68C0\u67E5\u6587\u4EF6\u548C\u76EE\u5F55\u7684\u8BFB\u5199\u6743\u9650",
|
|
646
|
-
"\u786E\u8BA4\u5F53\u524D\u7528\u6237\u6709\u8DB3\u591F\u7684\u7CFB\u7EDF\u6743\u9650",
|
|
647
|
-
"\u67E5\u770B\u662F\u5426\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
|
|
648
|
-
"\u68C0\u67E5\u5DE5\u5177\u6743\u9650\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E"
|
|
649
|
-
],
|
|
650
|
-
debugSteps: [
|
|
651
|
-
"\u67E5\u770B PERMISSION_* \u65E5\u5FD7\u4E86\u89E3\u6743\u9650\u68C0\u67E5\u8FC7\u7A0B",
|
|
652
|
-
"\u68C0\u67E5\u6587\u4EF6\u7CFB\u7EDF\u6743\u9650: ls -la",
|
|
653
|
-
"\u9A8C\u8BC1\u5DE5\u5177\u5BA1\u6279\u72B6\u6001",
|
|
654
|
-
"\u67E5\u770B TOOL_* \u76F8\u5173\u7684\u8C03\u8BD5\u65E5\u5FD7"
|
|
655
|
-
]
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
if (errorMessage.includes("substring is not a function") || errorMessage.includes("content")) {
|
|
659
|
-
return {
|
|
660
|
-
errorType: "RESPONSE_FORMAT",
|
|
661
|
-
category: "API",
|
|
662
|
-
severity: "MEDIUM",
|
|
663
|
-
description: "LLM response format mismatch between different providers",
|
|
664
|
-
suggestions: [
|
|
665
|
-
"\u68C0\u67E5\u5F53\u524D\u4F7F\u7528\u7684 provider \u662F\u5426\u4E0E\u671F\u671B\u4E00\u81F4",
|
|
666
|
-
"\u9A8C\u8BC1\u54CD\u5E94\u683C\u5F0F\u5904\u7406\u903B\u8F91",
|
|
667
|
-
"\u786E\u8BA4\u4E0D\u540C provider \u7684\u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
|
|
668
|
-
"\u68C0\u67E5\u662F\u5426\u9700\u8981\u66F4\u65B0\u54CD\u5E94\u89E3\u6790\u4EE3\u7801"
|
|
669
|
-
],
|
|
670
|
-
debugSteps: [
|
|
671
|
-
"\u67E5\u770B LLM_CALL_DEBUG \u4E2D\u7684\u54CD\u5E94\u683C\u5F0F",
|
|
672
|
-
"\u68C0\u67E5 provider \u914D\u7F6E\u548C\u5B9E\u9645\u4F7F\u7528\u7684 API",
|
|
673
|
-
"\u5BF9\u6BD4 Anthropic \u548C OpenAI \u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
|
|
674
|
-
"\u9A8C\u8BC1 logLLMInteraction \u51FD\u6570\u7684\u683C\u5F0F\u5904\u7406"
|
|
675
|
-
]
|
|
676
|
-
};
|
|
677
|
-
}
|
|
678
|
-
if (errorMessage.includes("too long") || errorMessage.includes("context") || errorMessage.includes("token")) {
|
|
679
|
-
return {
|
|
680
|
-
errorType: "CONTEXT_OVERFLOW",
|
|
681
|
-
category: "SYSTEM",
|
|
682
|
-
severity: "MEDIUM",
|
|
683
|
-
description: "Context window exceeded - conversation too long",
|
|
684
|
-
suggestions: [
|
|
685
|
-
"\u8FD0\u884C /compact \u624B\u52A8\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
|
|
686
|
-
"\u68C0\u67E5\u81EA\u52A8\u538B\u7F29\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E",
|
|
687
|
-
"\u51CF\u5C11\u5355\u6B21\u8F93\u5165\u7684\u5185\u5BB9\u957F\u5EA6",
|
|
688
|
-
"\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F"
|
|
689
|
-
],
|
|
690
|
-
debugSteps: [
|
|
691
|
-
"\u67E5\u770B AUTO_COMPACT_* \u65E5\u5FD7\u68C0\u67E5\u538B\u7F29\u89E6\u53D1",
|
|
692
|
-
"\u68C0\u67E5 token \u4F7F\u7528\u91CF\u548C\u9608\u503C",
|
|
693
|
-
"\u67E5\u770B CONTEXT_COMPRESSION \u76F8\u5173\u65E5\u5FD7",
|
|
694
|
-
"\u9A8C\u8BC1\u6A21\u578B\u7684\u6700\u5927 token \u9650\u5236"
|
|
695
|
-
]
|
|
696
|
-
};
|
|
697
|
-
}
|
|
698
|
-
if (errorMessage.includes("config") || errorMessage.includes("undefined") && context?.configRelated) {
|
|
699
|
-
return {
|
|
700
|
-
errorType: "CONFIGURATION",
|
|
701
|
-
category: "CONFIG",
|
|
702
|
-
severity: "MEDIUM",
|
|
703
|
-
description: "Configuration error - missing or invalid settings",
|
|
704
|
-
suggestions: [
|
|
705
|
-
"\u8FD0\u884C kode config \u68C0\u67E5\u914D\u7F6E\u8BBE\u7F6E",
|
|
706
|
-
"\u5220\u9664\u635F\u574F\u7684\u914D\u7F6E\u6587\u4EF6\u91CD\u65B0\u521D\u59CB\u5316",
|
|
707
|
-
"\u68C0\u67E5 JSON \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u662F\u5426\u6B63\u786E",
|
|
708
|
-
"\u9A8C\u8BC1\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E"
|
|
709
|
-
],
|
|
710
|
-
debugSteps: [
|
|
711
|
-
"\u67E5\u770B CONFIG_LOAD \u548C CONFIG_SAVE \u65E5\u5FD7",
|
|
712
|
-
"\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650",
|
|
713
|
-
"\u9A8C\u8BC1 JSON \u683C\u5F0F: cat ~/.kode/config.json | jq",
|
|
714
|
-
"\u67E5\u770B\u914D\u7F6E\u7F13\u5B58\u76F8\u5173\u7684\u8C03\u8BD5\u4FE1\u606F"
|
|
715
|
-
]
|
|
716
|
-
};
|
|
717
|
-
}
|
|
718
|
-
return {
|
|
719
|
-
errorType: "UNKNOWN",
|
|
720
|
-
category: "SYSTEM",
|
|
721
|
-
severity: "MEDIUM",
|
|
722
|
-
description: `Unexpected error: ${errorMessage}`,
|
|
723
|
-
suggestions: [
|
|
724
|
-
"\u91CD\u65B0\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F",
|
|
725
|
-
"\u68C0\u67E5\u7CFB\u7EDF\u8D44\u6E90\u662F\u5426\u5145\u8DB3",
|
|
726
|
-
"\u67E5\u770B\u5B8C\u6574\u7684\u9519\u8BEF\u65E5\u5FD7\u83B7\u53D6\u66F4\u591A\u4FE1\u606F",
|
|
727
|
-
"\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u62A5\u544A\u6B64\u9519\u8BEF"
|
|
728
|
-
],
|
|
729
|
-
debugSteps: [
|
|
730
|
-
"\u4F7F\u7528 --debug-verbose \u83B7\u53D6\u8BE6\u7EC6\u65E5\u5FD7",
|
|
731
|
-
"\u68C0\u67E5 error.log \u4E2D\u7684\u5B8C\u6574\u9519\u8BEF\u4FE1\u606F",
|
|
732
|
-
"\u67E5\u770B\u7CFB\u7EDF\u8D44\u6E90\u4F7F\u7528\u60C5\u51B5",
|
|
733
|
-
"\u6536\u96C6\u91CD\u73B0\u6B65\u9AA4\u548C\u73AF\u5883\u4FE1\u606F"
|
|
734
|
-
],
|
|
735
|
-
relatedLogs: errorStack ? [errorStack] : void 0
|
|
736
|
-
};
|
|
737
|
-
}
|
|
738
|
-
function logErrorWithDiagnosis(error, context, requestId) {
|
|
739
|
-
if (!isDebugMode()) return;
|
|
740
|
-
const diagnosis = diagnoseError(error, context);
|
|
741
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
742
|
-
debug.error(
|
|
743
|
-
"ERROR_OCCURRED",
|
|
744
|
-
{
|
|
745
|
-
error: errorMessage,
|
|
746
|
-
errorType: diagnosis.errorType,
|
|
747
|
-
category: diagnosis.category,
|
|
748
|
-
severity: diagnosis.severity,
|
|
749
|
-
context
|
|
750
|
-
},
|
|
751
|
-
requestId
|
|
752
|
-
);
|
|
753
|
-
terminalLog("\n" + chalk.red("\u{1F6A8} ERROR DIAGNOSIS"));
|
|
754
|
-
terminalLog(chalk.gray("\u2501".repeat(60)));
|
|
755
|
-
terminalLog(chalk.red(`\u274C ${diagnosis.errorType}`));
|
|
756
|
-
terminalLog(
|
|
757
|
-
chalk.dim(
|
|
758
|
-
`Category: ${diagnosis.category} | Severity: ${diagnosis.severity}`
|
|
759
|
-
)
|
|
760
|
-
);
|
|
761
|
-
terminalLog(`
|
|
762
|
-
${diagnosis.description}`);
|
|
763
|
-
terminalLog(chalk.yellow("\n\u{1F4A1} Recovery Suggestions:"));
|
|
764
|
-
diagnosis.suggestions.forEach((suggestion, index) => {
|
|
765
|
-
terminalLog(` ${index + 1}. ${suggestion}`);
|
|
766
|
-
});
|
|
767
|
-
terminalLog(chalk.cyan("\n\u{1F50D} Debug Steps:"));
|
|
768
|
-
diagnosis.debugSteps.forEach((step, index) => {
|
|
769
|
-
terminalLog(` ${index + 1}. ${step}`);
|
|
770
|
-
});
|
|
771
|
-
if (diagnosis.relatedLogs && diagnosis.relatedLogs.length > 0) {
|
|
772
|
-
terminalLog(chalk.magenta("\n\u{1F4CB} Related Information:"));
|
|
773
|
-
diagnosis.relatedLogs.forEach((log, index) => {
|
|
774
|
-
const truncatedLog = log.length > 200 ? log.substring(0, 200) + "..." : log;
|
|
775
|
-
terminalLog(chalk.dim(` ${truncatedLog}`));
|
|
776
|
-
});
|
|
777
|
-
}
|
|
778
|
-
const debugPath = DEBUG_PATHS.base();
|
|
779
|
-
terminalLog(chalk.gray(`
|
|
780
|
-
\u{1F4C1} Complete logs: ${debugPath}`));
|
|
781
|
-
terminalLog(chalk.gray("\u2501".repeat(60)));
|
|
782
|
-
}
|
|
783
829
|
|
|
784
830
|
export {
|
|
785
831
|
debug,
|
|
786
832
|
getCurrentRequest,
|
|
787
833
|
markPhase,
|
|
834
|
+
initDebugLogger,
|
|
788
835
|
logAPIError,
|
|
789
836
|
logLLMInteraction,
|
|
790
837
|
logSystemPromptConstruction,
|
|
791
838
|
logUserFriendly,
|
|
792
|
-
initDebugLogger,
|
|
793
839
|
logErrorWithDiagnosis
|
|
794
840
|
};
|