@shareai-lab/kode 2.0.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +649 -25
- package/README.zh-CN.md +579 -0
- package/cli-acp.js +3 -17
- package/cli.js +5 -7
- package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
- package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
- package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
- package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
- package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
- package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
- package/dist/{agentsValidate-7LH4HTNR.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
- package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
- package/dist/{ask-3NHFFUQG.js → chunks/ask-D7SOHJ6Z.js} +36 -44
- package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
- package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
- package/dist/{chunk-AFFSCMYS.js → chunks/chunk-2JN5MY67.js} +12 -14
- package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
- package/dist/chunks/chunk-2QONJ5MG.js +14 -0
- package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
- package/dist/chunks/chunk-2WEXPKHH.js +903 -0
- package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
- package/dist/{chunk-ARZSBOAO.js → chunks/chunk-3BYE3ME6.js} +717 -792
- package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
- package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
- package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
- package/dist/chunks/chunk-3OEJVB5A.js +906 -0
- package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
- package/dist/chunks/chunk-3TNIOEBO.js +369 -0
- package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
- package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
- package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
- package/dist/{chunk-UHYRLID6.js → chunks/chunk-4ATBQOFO.js} +107 -55
- package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
- package/dist/chunks/chunk-4CRUCZR4.js +0 -0
- package/dist/{chunk-YC6LJCDE.js → chunks/chunk-4EO6SIQY.js} +32 -75
- package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
- package/dist/chunks/chunk-53M46S5I.js +64 -0
- package/dist/chunks/chunk-53M46S5I.js.map +7 -0
- package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
- package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
- package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
- package/dist/{chunk-3IN27HA5.js → chunks/chunk-6KRRFSDN.js} +4 -6
- package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
- package/dist/chunks/chunk-6LJNZK4K.js +39 -0
- package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
- package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
- package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
- package/dist/chunks/chunk-77XDJMBP.js +3326 -0
- package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
- package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
- package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
- package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
- package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
- package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
- package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
- package/dist/chunks/chunk-BBJFHTBC.js +28 -0
- package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
- package/dist/chunks/chunk-BHDHXOXB.js +24 -0
- package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
- package/dist/{chunk-73WGVYLQ.js → chunks/chunk-BTA7SZ26.js} +152 -223
- package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
- package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
- package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
- package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
- package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
- package/dist/{chunk-QVLYOPO5.js → chunks/chunk-DQ4JHXMT.js} +462 -424
- package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
- package/dist/chunks/chunk-DXD76CMV.js +208 -0
- package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
- package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
- package/dist/chunks/chunk-GELCZWMB.js +42 -0
- package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
- package/dist/{chunk-K2CWOTI2.js → chunks/chunk-HJYOH4HC.js} +23 -18
- package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
- package/dist/chunks/chunk-HPYNW6TT.js +744 -0
- package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
- package/dist/{chunk-RZWOUA25.js → chunks/chunk-HRJ3ICQK.js} +59 -55
- package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
- package/dist/{chunk-DZE5YA7L.js → chunks/chunk-IFCIADS3.js} +571 -573
- package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
- package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
- package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
- package/dist/chunks/chunk-L7P4M4KW.js +193 -0
- package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
- package/dist/chunks/chunk-LB6TCPDI.js +0 -0
- package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
- package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
- package/dist/{chunk-7M2YN6TU.js → chunks/chunk-LOD5ZHCI.js} +213 -208
- package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
- package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
- package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
- package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
- package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
- package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
- package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
- package/dist/chunks/chunk-QHQOBUF6.js +60 -0
- package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
- package/dist/{chunk-W7GRKO7Q.js → chunks/chunk-RPJXO7GG.js} +241 -214
- package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
- package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
- package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
- package/dist/chunks/chunk-SZLAPULP.js +28 -0
- package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
- package/dist/{chunk-7U7L4NMD.js → chunks/chunk-T7RB5V5J.js} +23 -25
- package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
- package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
- package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
- package/dist/{chunk-ZVDRDPII.js → chunks/chunk-TNGVRTO5.js} +45 -20
- package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
- package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
- package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
- package/dist/chunks/chunk-U2IHWPCU.js +12 -0
- package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
- package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
- package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
- package/dist/{chunk-MWRSY4X6.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
- package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
- package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
- package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
- package/dist/chunks/chunk-W5EGGA44.js +15 -0
- package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
- package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
- package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
- package/dist/{chunk-STSX7GIX.js → chunks/chunk-YIO5EBMQ.js} +423 -377
- package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
- package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
- package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
- package/dist/chunks/client-SILZNM5N.js +42 -0
- package/dist/{config-RUSD6G5Y.js → chunks/config-25HRTPSP.js} +48 -10
- package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
- package/dist/{customCommands-TOIJFZAL.js → chunks/customCommands-TYMYZRG5.js} +11 -8
- package/dist/chunks/engine-MRVF6FK6.js +39 -0
- package/dist/{env-XGKBLU3D.js → chunks/env-TJ5NOBEB.js} +7 -5
- package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
- package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
- package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
- package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
- package/dist/{kodeAgentStreamJsonSession-UGEZJJEB.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
- package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
- package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
- package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
- package/dist/{kodeHooks-QWM36A3D.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
- package/dist/{llm-ZUQC4WYM.js → chunks/llm-62N6T5ZT.js} +1734 -1526
- package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
- package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
- package/dist/{mentionProcessor-EE3XFHCJ.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
- package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
- package/dist/{messages-EOYQKPGM.js → chunks/messages-EEWWLPHN.js} +2 -6
- package/dist/chunks/model-5TIEKQPD.js +37 -0
- package/dist/{openai-RRCWW33N.js → chunks/openai-XXK3YZG4.js} +13 -10
- package/dist/{outputStyles-62Q3VH2J.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
- package/dist/chunks/permissions-HO7INPWM.js +27 -0
- package/dist/{pluginRuntime-6ETCZ2LL.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
- package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
- package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
- package/dist/chunks/registry-XYJXMOA5.js +60 -0
- package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
- package/dist/chunks/server-REXXF5IK.js +46 -0
- package/dist/{skillMarketplace-3RXQBVOL.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
- package/dist/chunks/src-OROQIWP3.js +44 -0
- package/dist/chunks/src-QXLGGMUW.js +1647 -0
- package/dist/chunks/src-QXLGGMUW.js.map +7 -0
- package/dist/{cli-DOPVY2CW.js → chunks/src-SSDT6MVP.js} +2659 -3384
- package/dist/chunks/src-SSDT6MVP.js.map +7 -0
- package/dist/chunks/theme-YBJUIMWK.js +10 -0
- package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
- package/dist/chunks/uuid-6577SO6X.js +7 -0
- package/dist/chunks/uuid-6577SO6X.js.map +7 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
- package/dist/entrypoints/cli.js +10 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/daemon.js +10 -0
- package/dist/entrypoints/daemon.js.map +7 -0
- package/dist/entrypoints/mcp.js +71 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/index.js +6 -7
- package/dist/index.js.map +3 -3
- package/dist/sdk/client.cjs +391 -0
- package/dist/sdk/client.cjs.map +7 -0
- package/dist/sdk/client.js +364 -0
- package/dist/sdk/client.js.map +7 -0
- package/dist/sdk/core.cjs +19932 -0
- package/dist/sdk/core.cjs.map +7 -0
- package/dist/sdk/core.js +19893 -0
- package/dist/sdk/core.js.map +7 -0
- package/dist/sdk/daemon-client.cjs +257 -0
- package/dist/sdk/daemon-client.cjs.map +7 -0
- package/dist/sdk/daemon-client.js +221 -0
- package/dist/sdk/daemon-client.js.map +7 -0
- package/dist/sdk/protocol.cjs +170 -0
- package/dist/sdk/protocol.cjs.map +7 -0
- package/dist/sdk/protocol.js +140 -0
- package/dist/sdk/protocol.js.map +7 -0
- package/dist/sdk/runtime-node.cjs +236 -0
- package/dist/sdk/runtime-node.cjs.map +7 -0
- package/dist/sdk/runtime-node.js +222 -0
- package/dist/sdk/runtime-node.js.map +7 -0
- package/dist/sdk/runtime.cjs +17 -0
- package/dist/sdk/runtime.cjs.map +7 -0
- package/dist/sdk/runtime.js +0 -0
- package/dist/sdk/runtime.js.map +7 -0
- package/dist/sdk/tools.cjs +30300 -0
- package/dist/sdk/tools.cjs.map +7 -0
- package/dist/sdk/tools.js +30282 -0
- package/dist/sdk/tools.js.map +7 -0
- package/dist/webui/assets/index-5hlfByVS.css +1 -0
- package/dist/webui/assets/index-BR9lm1lA.js +82 -0
- package/dist/webui/index.html +28 -0
- package/package.json +93 -22
- package/scripts/binary-utils.cjs +12 -4
- package/scripts/cli-acp-wrapper.cjs +3 -17
- package/scripts/cli-wrapper.cjs +5 -7
- package/scripts/postinstall.js +8 -4
- package/dist/REPL-CW7AYLVL.js +0 -42
- package/dist/acp-VEPJ74LT.js +0 -1357
- package/dist/acp-VEPJ74LT.js.map +0 -7
- package/dist/agentsValidate-7LH4HTNR.js.map +0 -7
- package/dist/ask-3NHFFUQG.js.map +0 -7
- package/dist/autoUpdater-ITPIHCOI.js +0 -17
- package/dist/chunk-3IN27HA5.js.map +0 -7
- package/dist/chunk-4FX3IVPT.js +0 -164
- package/dist/chunk-4FX3IVPT.js.map +0 -7
- package/dist/chunk-4RTX4AG4.js.map +0 -7
- package/dist/chunk-5PDP7R6N.js +0 -515
- package/dist/chunk-5PDP7R6N.js.map +0 -7
- package/dist/chunk-73WGVYLQ.js.map +0 -7
- package/dist/chunk-7M2YN6TU.js.map +0 -7
- package/dist/chunk-7U7L4NMD.js.map +0 -7
- package/dist/chunk-ABLVTESJ.js.map +0 -7
- package/dist/chunk-AFFSCMYS.js.map +0 -7
- package/dist/chunk-ARZSBOAO.js.map +0 -7
- package/dist/chunk-CIG63V4E.js +0 -72
- package/dist/chunk-CIG63V4E.js.map +0 -7
- package/dist/chunk-CM3EGTG6.js +0 -1609
- package/dist/chunk-CM3EGTG6.js.map +0 -7
- package/dist/chunk-DZE5YA7L.js.map +0 -7
- package/dist/chunk-E6YNABER.js.map +0 -7
- package/dist/chunk-EZXMVTDU.js.map +0 -7
- package/dist/chunk-F2SJXUDI.js +0 -148
- package/dist/chunk-F2SJXUDI.js.map +0 -7
- package/dist/chunk-FC5ZCKBI.js +0 -30167
- package/dist/chunk-FC5ZCKBI.js.map +0 -7
- package/dist/chunk-HCBELH4J.js +0 -145
- package/dist/chunk-HCBELH4J.js.map +0 -7
- package/dist/chunk-HN4E4UUQ.js.map +0 -7
- package/dist/chunk-IZVMU4S2.js +0 -654
- package/dist/chunk-IZVMU4S2.js.map +0 -7
- package/dist/chunk-K2CWOTI2.js.map +0 -7
- package/dist/chunk-LC4TVOCZ.js +0 -835
- package/dist/chunk-LC4TVOCZ.js.map +0 -7
- package/dist/chunk-MIW7N2MY.js +0 -2613
- package/dist/chunk-MIW7N2MY.js.map +0 -7
- package/dist/chunk-MWRSY4X6.js.map +0 -7
- package/dist/chunk-ND3XWFO6.js +0 -34
- package/dist/chunk-ND3XWFO6.js.map +0 -7
- package/dist/chunk-QVLYOPO5.js.map +0 -7
- package/dist/chunk-RZWOUA25.js.map +0 -7
- package/dist/chunk-S6HRABTA.js.map +0 -7
- package/dist/chunk-STSX7GIX.js.map +0 -7
- package/dist/chunk-UHYRLID6.js.map +0 -7
- package/dist/chunk-UKHTVRJM.js +0 -47
- package/dist/chunk-UKHTVRJM.js.map +0 -7
- package/dist/chunk-UYXEDKOZ.js +0 -24
- package/dist/chunk-UYXEDKOZ.js.map +0 -7
- package/dist/chunk-W7GRKO7Q.js.map +0 -7
- package/dist/chunk-WVHORZQ5.js +0 -17
- package/dist/chunk-WVHORZQ5.js.map +0 -7
- package/dist/chunk-WWUWDNWW.js +0 -49
- package/dist/chunk-WWUWDNWW.js.map +0 -7
- package/dist/chunk-YC6LJCDE.js.map +0 -7
- package/dist/chunk-YXYYDIMI.js +0 -2931
- package/dist/chunk-YXYYDIMI.js.map +0 -7
- package/dist/chunk-ZVDRDPII.js.map +0 -7
- package/dist/cli-DOPVY2CW.js.map +0 -7
- package/dist/commands-2BF2CJ3A.js +0 -46
- package/dist/context-6FXPETYH.js +0 -30
- package/dist/costTracker-6SL26FDB.js +0 -19
- package/dist/kodeAgentSessionLoad-MITZADPB.js +0 -18
- package/dist/kodeAgentSessionResume-GVRWB4WO.js +0 -16
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +0 -7
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
- package/dist/llm-ZUQC4WYM.js.map +0 -7
- package/dist/llmLazy-54QQHA54.js +0 -15
- package/dist/loader-FYHJQES5.js +0 -28
- package/dist/mcp-J332IKT3.js +0 -49
- package/dist/mentionProcessor-EE3XFHCJ.js.map +0 -7
- package/dist/model-FV3JDJKH.js +0 -30
- package/dist/pluginRuntime-6ETCZ2LL.js.map +0 -7
- package/dist/pluginValidation-I4YKUWGS.js +0 -17
- package/dist/prompts-ZLEKDD77.js +0 -48
- package/dist/query-VFRJPBGD.js +0 -50
- package/dist/responsesStreaming-AW344PQO.js +0 -10
- package/dist/ripgrep-3NTIKQYW.js +0 -17
- package/dist/state-P5G6CO5V.js +0 -16
- package/dist/theme-3LWP3BG7.js +0 -14
- package/dist/toolPermissionSettings-3ROBVTUK.js +0 -18
- package/dist/tools-RO7HSSE5.js +0 -47
- package/dist/userInput-JSBJRFSK.js +0 -311
- package/dist/userInput-JSBJRFSK.js.map +0 -7
- package/dist/uuid-QN2CNKKN.js +0 -9
- /package/dist/{REPL-CW7AYLVL.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
- /package/dist/{autoUpdater-ITPIHCOI.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
- /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
- /package/dist/{commands-2BF2CJ3A.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
- /package/dist/{config-RUSD6G5Y.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
- /package/dist/{context-6FXPETYH.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
- /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
- /package/dist/{customCommands-TOIJFZAL.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
- /package/dist/{env-XGKBLU3D.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
- /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
- /package/dist/{kodeAgentSessionLoad-MITZADPB.js.map → chunks/config-25HRTPSP.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-GVRWB4WO.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
- /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
- /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
- /package/dist/{kodeHooks-QWM36A3D.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
- /package/dist/{llmLazy-54QQHA54.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
- /package/dist/{loader-FYHJQES5.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
- /package/dist/{mcp-J332IKT3.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
- /package/dist/{messages-EOYQKPGM.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
- /package/dist/{model-FV3JDJKH.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
- /package/dist/{openai-RRCWW33N.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
- /package/dist/{outputStyles-62Q3VH2J.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
- /package/dist/{pluginValidation-I4YKUWGS.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
- /package/dist/{prompts-ZLEKDD77.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
- /package/dist/{query-VFRJPBGD.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
- /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
- /package/dist/{ripgrep-3NTIKQYW.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
- /package/dist/{skillMarketplace-3RXQBVOL.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
- /package/dist/{state-P5G6CO5V.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
- /package/dist/{theme-3LWP3BG7.js.map → chunks/server-REXXF5IK.js.map} +0 -0
- /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
- /package/dist/{toolPermissionSettings-3ROBVTUK.js.map → chunks/src-OROQIWP3.js.map} +0 -0
- /package/dist/{tools-RO7HSSE5.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
- /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/tools/src/registry.ts", "../../packages/tools/src/tools/ai/AskExpertModelTool/AskExpertModelTool.tsx", "../../packages/core/src/utils/expertChatStorage.ts", "../../packages/tools/src/tools/ai/AskExpertModelTool/call.ts", "../../packages/tools/src/tools/ai/AskExpertModelTool/prompt.ts", "../../packages/tools/src/tools/system/TaskOutputTool/TaskOutputTool.tsx", "../../packages/core/src/utils/backgroundTasks.ts", "../../packages/tools/src/tools/system/TaskOutputTool/prompt.ts", "../../packages/tools/src/tools/system/KillShellTool/KillShellTool.tsx", "../../packages/tools/src/tools/system/KillShellTool/prompt.ts", "../../packages/tools/src/tools/mcp/ListMcpResourcesTool/ListMcpResourcesTool.tsx", "../../packages/tools/src/tools/mcp/ListMcpResourcesTool/prompt.ts", "../../packages/tools/src/tools/system/LspTool/LspTool.tsx", "../../packages/tools/src/tools/system/LspTool/constants.ts", "../../packages/tools/src/tools/system/LspTool/format.ts", "../../packages/tools/src/tools/system/LspTool/summary.tsx", "../../packages/tools/src/tools/system/LspTool/tsProject.ts", "../../packages/tools/src/tools/system/LspTool/call.ts", "../../packages/tools/src/tools/system/LspTool/operations.ts", "../../packages/tools/src/tools/system/LspTool/prompt.ts", "../../packages/tools/src/tools/mcp/MCPTool/MCPTool.tsx", "../../packages/tools/src/tools/mcp/MCPTool/prompt.ts", "../../packages/tools/src/tools/mcp/ReadMcpResourceTool/ReadMcpResourceTool.tsx", "../../packages/tools/src/tools/mcp/ReadMcpResourceTool/prompt.ts", "../../packages/core/src/utils/agentTranscripts.ts", "../../packages/tools/src/tools/ai/TaskTool/constants.ts", "../../packages/tools/src/tools/ai/TaskTool/prompt.ts", "../../packages/tools/src/tools/ai/TaskTool/forkContext.ts", "../../packages/tools/src/tools/ai/TaskTool/models.ts", "../../packages/tools/src/tools/ai/TaskTool/toolSpec.ts", "../../packages/tools/src/tools/ai/TaskTool/permissions.ts", "../../packages/tools/src/tools/ai/TaskTool/callBackground.ts", "../../packages/tools/src/tools/ai/TaskTool/assistantText.ts", "../../packages/tools/src/tools/ai/TaskTool/callForeground.ts", "../../packages/tools/src/tools/ai/TaskTool/call.ts", "../../packages/tools/src/tools/ai/TaskTool/schema.ts", "../../packages/tools/src/tools/ai/TaskTool/render.tsx", "../../packages/tools/src/tools/ai/TaskTool/TaskTool.tsx", "../../packages/tools/src/tools/interaction/TodoWriteTool/TodoWriteTool.tsx", "../../packages/tools/src/tools/interaction/TodoWriteTool/prompt.ts", "../../packages/tools/src/tools/search/WebSearchTool/WebSearchTool.tsx", "../../packages/tools/src/tools/search/WebSearchTool/prompt.ts", "../../packages/tools/src/tools/search/WebSearchTool/searchProviders.ts"],
|
|
4
|
+
"sourcesContent": ["import { memoize } from 'lodash-es'\nimport type { Tool } from '#core/tooling/Tool'\n\nimport { AskExpertModelTool } from '#tools/tools/ai/AskExpertModelTool/AskExpertModelTool'\nimport { AskUserQuestionTool } from '#tools/tools/interaction/AskUserQuestionTool/AskUserQuestionTool'\nimport { BashTool } from '#tools/tools/system/BashTool/BashTool'\nimport { TaskOutputTool } from '#tools/tools/system/TaskOutputTool/TaskOutputTool'\nimport { EnterPlanModeTool } from '#tools/tools/interaction/PlanModeTool/EnterPlanModeTool'\nimport { ExitPlanModeTool } from '#tools/tools/interaction/PlanModeTool/ExitPlanModeTool'\nimport { FileEditTool } from '#tools/tools/filesystem/FileEditTool/FileEditTool'\nimport { FileReadTool } from '#tools/tools/filesystem/FileReadTool/FileReadTool'\nimport { FileWriteTool } from '#tools/tools/filesystem/FileWriteTool/FileWriteTool'\nimport { GlobTool } from '#tools/tools/filesystem/GlobTool/GlobTool'\nimport { GrepTool } from '#tools/tools/search/GrepTool/GrepTool'\nimport { KillShellTool } from '#tools/tools/system/KillShellTool/KillShellTool'\nimport { ListMcpResourcesTool } from '#tools/tools/mcp/ListMcpResourcesTool/ListMcpResourcesTool'\nimport { LspTool } from '#tools/tools/system/LspTool/LspTool'\nimport { MCPTool } from '#tools/tools/mcp/MCPTool/MCPTool'\nimport { NotebookEditTool } from '#tools/tools/filesystem/NotebookEditTool/NotebookEditTool'\nimport { ReadMcpResourceTool } from '#tools/tools/mcp/ReadMcpResourceTool/ReadMcpResourceTool'\nimport { SlashCommandTool } from '#tools/tools/interaction/SlashCommandTool/SlashCommandTool'\nimport { SkillTool } from '#tools/tools/interaction/SkillTool/SkillTool'\nimport { TaskTool } from '#tools/tools/ai/TaskTool/TaskTool'\nimport { TodoWriteTool } from '#tools/tools/interaction/TodoWriteTool/TodoWriteTool'\nimport { WebFetchTool } from '#tools/tools/network/WebFetchTool/WebFetchTool'\nimport { WebSearchTool } from '#tools/tools/search/WebSearchTool/WebSearchTool'\n\nimport { getMCPTools } from '#core/mcp/client'\n\n// Base tool list for the CLI toolset\nexport const getAllTools = (): Tool[] => [\n TaskTool as unknown as Tool,\n AskExpertModelTool as unknown as Tool,\n BashTool as unknown as Tool,\n TaskOutputTool as unknown as Tool,\n KillShellTool as unknown as Tool,\n GlobTool as unknown as Tool,\n GrepTool as unknown as Tool,\n LspTool as unknown as Tool,\n FileReadTool as unknown as Tool,\n FileEditTool as unknown as Tool,\n FileWriteTool as unknown as Tool,\n NotebookEditTool as unknown as Tool,\n TodoWriteTool as unknown as Tool,\n WebSearchTool as unknown as Tool,\n WebFetchTool as unknown as Tool,\n AskUserQuestionTool as unknown as Tool,\n EnterPlanModeTool as unknown as Tool,\n ExitPlanModeTool as unknown as Tool,\n SlashCommandTool as unknown as Tool,\n SkillTool as unknown as Tool,\n ListMcpResourcesTool as unknown as Tool,\n ReadMcpResourceTool as unknown as Tool,\n MCPTool as unknown as Tool,\n]\n\nexport const getTools = memoize(\n async (_includeOptional?: boolean): Promise<Tool[]> => {\n const tools = [...getAllTools(), ...(await getMCPTools())]\n\n const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled()))\n return tools.filter((_, i) => isEnabled[i])\n },\n)\n\nexport const getReadOnlyTools = memoize(async (): Promise<Tool[]> => {\n const tools = getAllTools().filter(tool => tool.isReadOnly())\n const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled()))\n return tools.filter((_, index) => isEnabled[index])\n})\n", "import { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport type { ToolUseContext, ValidationResult } from '#core/tooling/Tool'\nimport { Tool } from '#core/tooling/Tool'\nimport { applyMarkdown } from '#core/utils/markdown'\nimport { getModelManager } from '#core/utils/model'\nimport { getTheme } from '#core/utils/theme'\nimport { callAskExpertModelTool } from './call'\nimport { DESCRIPTION, PROMPT } from './prompt'\n\nexport const inputSchema = z.strictObject({\n question: z\n .string()\n .describe(\n 'A fully self-contained question (include all background context, constraints, and a clear ask).',\n ),\n expert_model: z\n .string()\n .describe(\n 'The expert model to use (e.g., gpt-5, claude-3-5-sonnet-20241022)',\n ),\n chat_session_id: z\n .string()\n .describe('Use \"new\" for a new session, or an existing session ID.'),\n})\n\ntype Input = z.infer<typeof inputSchema>\n\nexport type Out = {\n chatSessionId: string\n expertModelName: string\n expertAnswer: string\n}\n\nfunction normalizeModelName(modelName: string): string {\n return modelName.toLowerCase().replace(/[^a-z0-9]/g, '')\n}\n\nfunction getCurrentModelName(context?: ToolUseContext): string {\n if (typeof context?.options?.model === 'string') return context.options.model\n const modelName = getModelManager().getModelName('main')\n return modelName ?? ''\n}\n\nasync function validateInput(\n input: Input,\n context?: ToolUseContext,\n): Promise<ValidationResult> {\n const question = input.question.trim()\n const expertModel = input.expert_model.trim()\n const sessionId = input.chat_session_id.trim()\n\n if (!question) return { result: false, message: 'Question cannot be empty' }\n if (!expertModel)\n return { result: false, message: 'Expert model must be specified' }\n if (!sessionId) {\n return {\n result: false,\n message: 'Chat session ID must be specified (use \"new\" for new session)',\n }\n }\n\n const currentModel = getCurrentModelName(context)\n if (\n currentModel &&\n normalizeModelName(currentModel) === normalizeModelName(expertModel)\n ) {\n return {\n result: false,\n message: `You are already running as ${currentModel}. Please choose a different model to consult.`,\n }\n }\n\n const modelManager = getModelManager()\n const resolved = modelManager.resolveModelWithInfo(expertModel)\n if (!resolved.success) {\n const available = modelManager.getAllAvailableModelNames()\n return {\n result: false,\n message:\n available.length > 0\n ? `Model '${expertModel}' is not configured. Available models: ${available.join(', ')}. Configure it via /model.`\n : `Model '${expertModel}' is not configured and no models are currently available. Configure a model via /model first.`,\n }\n }\n\n return { result: true }\n}\n\nexport const AskExpertModelTool = {\n name: 'AskExpertModel',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'AskExpertModel'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n needsPermissions() {\n return false\n },\n validateInput,\n renderToolUseMessage(\n { question, expert_model, chat_session_id },\n { verbose },\n ) {\n if (!expert_model) return null\n\n const isNewSession = chat_session_id === 'new'\n const sessionLabel = isNewSession\n ? 'new session'\n : `session ${chat_session_id.slice(0, 8)}\u2026`\n const theme = getTheme()\n\n if (!verbose) {\n return (\n <Box flexDirection=\"column\">\n <Text bold color=\"yellow\">\n {expert_model}{' '}\n </Text>\n <Text color={theme.secondaryText} dimColor>\n ({sessionLabel})\n </Text>\n </Box>\n )\n }\n\n const preview =\n question.length > 300 ? `${question.slice(0, 300)}\u2026` : question\n return (\n <Box flexDirection=\"column\">\n <Text bold color=\"yellow\">\n {expert_model}\n </Text>\n <Text color={theme.secondaryText}>{sessionLabel}</Text>\n <Box marginTop={1}>\n <Text color={theme.text}>{preview}</Text>\n </Box>\n </Box>\n )\n },\n renderToolResultMessage(output: Out, { verbose }) {\n const theme = getTheme()\n const answer = (output.expertAnswer ?? '').trim()\n const shown = verbose\n ? answer\n : answer.length > 800\n ? `${answer.slice(0, 800)}\u2026`\n : answer\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={theme.text}>\n Response from {output.expertModelName}:\n </Text>\n <Box marginTop={1}>\n <Text color={theme.text}>{applyMarkdown(shown)}</Text>\n </Box>\n <Box marginTop={1}>\n <Text color={theme.secondaryText} dimColor>\n Session: {output.chatSessionId.slice(0, 8)}\n </Text>\n </Box>\n </Box>\n )\n },\n renderToolUseRejectedMessage() {\n const theme = getTheme()\n return (\n <Box flexDirection=\"row\">\n <Text color={theme.secondaryText} dimColor>\n Expert consultation cancelled\n </Text>\n </Box>\n )\n },\n renderResultForAssistant(output: Out): string {\n return `[Expert consultation completed]\nExpert Model: ${output.expertModelName}\nSession ID: ${output.chatSessionId}\nTo continue this conversation, reuse this Session ID in the next AskExpertModel call.\n\n${output.expertAnswer}`\n },\n async *call(\n input: Input,\n { abortController, readFileTimestamps }: ToolUseContext,\n ) {\n const normalizedInput = {\n question: String(input.question ?? ''),\n expert_model: String(input.expert_model ?? ''),\n chat_session_id: String(input.chat_session_id ?? ''),\n }\n yield* callAskExpertModelTool(\n normalizedInput,\n { abortController, readFileTimestamps },\n output => this.renderResultForAssistant(output),\n )\n },\n} satisfies Tool<typeof inputSchema, Out>\n", "import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { randomUUID } from 'crypto'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\n\n/**\n * Expert Chat Session Storage - \u6781\u7B80\u7248\n * \u5B58\u50A8\u7B26\u5408OpenAI\u683C\u5F0F\u7684messages\u5386\u53F2\n */\n\nexport interface ChatMessage {\n role: 'user' | 'assistant'\n content: string\n}\n\nexport interface ExpertChatSession {\n sessionId: string\n expertModel: string\n messages: ChatMessage[]\n createdAt: number\n lastUpdated: number\n}\n\n/**\n * \u83B7\u53D6\u4E13\u5BB6\u804A\u5929\u5B58\u50A8\u76EE\u5F55\n */\nfunction getExpertChatDirectory(): string {\n const configDir =\n process.env.KODE_CONFIG_DIR ??\n process.env.ANYKODE_CONFIG_DIR ??\n join(homedir(), '.kode')\n const expertChatDir = join(configDir, 'expert-chats')\n\n if (!existsSync(expertChatDir)) {\n mkdirSync(expertChatDir, { recursive: true })\n }\n\n return expertChatDir\n}\n\n/**\n * \u83B7\u53D6\u4F1A\u8BDD\u6587\u4EF6\u8DEF\u5F84 - \u4F7F\u7528 sessionId.json \u683C\u5F0F\n */\nfunction getSessionFilePath(sessionId: string): string {\n return join(getExpertChatDirectory(), `${sessionId}.json`)\n}\n\n/**\n * \u521B\u5EFA\u65B0\u7684\u4E13\u5BB6\u804A\u5929\u4F1A\u8BDD\n */\nexport function createExpertChatSession(\n expertModel: string,\n): ExpertChatSession {\n const sessionId = randomUUID().slice(0, 5)\n const session: ExpertChatSession = {\n sessionId,\n expertModel,\n messages: [],\n createdAt: Date.now(),\n lastUpdated: Date.now(),\n }\n\n saveExpertChatSession(session)\n return session\n}\n\n/**\n * \u52A0\u8F7D\u73B0\u6709\u4E13\u5BB6\u804A\u5929\u4F1A\u8BDD\n */\nexport function loadExpertChatSession(\n sessionId: string,\n): ExpertChatSession | null {\n const filePath = getSessionFilePath(sessionId)\n\n if (!existsSync(filePath)) {\n return null\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8')\n return JSON.parse(content) as ExpertChatSession\n } catch (error) {\n logError(error)\n debugLogger.warn('EXPERT_CHAT_SESSION_LOAD_FAILED', {\n sessionId,\n error: error instanceof Error ? error.message : String(error),\n })\n return null\n }\n}\n\n/**\n * \u4FDD\u5B58\u4E13\u5BB6\u804A\u5929\u4F1A\u8BDD\n */\nexport function saveExpertChatSession(session: ExpertChatSession): void {\n const filePath = getSessionFilePath(session.sessionId)\n\n try {\n session.lastUpdated = Date.now()\n writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf-8')\n } catch (error) {\n logError(error)\n debugLogger.warn('EXPERT_CHAT_SESSION_SAVE_FAILED', {\n sessionId: session.sessionId,\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n}\n\n/**\n * \u6DFB\u52A0\u6D88\u606F\u5230\u4F1A\u8BDD\n */\nexport function addMessageToSession(\n sessionId: string,\n role: 'user' | 'assistant',\n content: string,\n): ExpertChatSession | null {\n const session = loadExpertChatSession(sessionId)\n if (!session) {\n return null\n }\n\n session.messages.push({ role, content })\n saveExpertChatSession(session)\n\n return session\n}\n\n/**\n * \u83B7\u53D6\u4F1A\u8BDD\u7684\u6D88\u606F\u5386\u53F2 - \u8FD4\u56DEOpenAI\u683C\u5F0F\n */\nexport function getSessionMessages(sessionId: string): ChatMessage[] {\n const session = loadExpertChatSession(sessionId)\n return session?.messages || []\n}\n\n/**\n * \u751F\u6210\u65B0\u7684\u4F1A\u8BDDID\n */\nexport function generateSessionId(): string {\n return randomUUID().slice(0, 5)\n}\n", "import { logError } from '#core/utils/log'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\nimport { getModelManager } from '#core/utils/model'\nimport type { AssistantMessage } from '#core/query'\nimport {\n addMessageToSession,\n createExpertChatSession,\n getSessionMessages,\n loadExpertChatSession,\n} from '#core/utils/expertChatStorage'\nimport {\n createAssistantMessage,\n createUserMessage,\n INTERRUPT_MESSAGE,\n} from '#core/utils/messages'\nimport { queryLLM } from '#core/ai/llmLazy'\nimport type { Out } from './AskExpertModelTool'\n\ntype Input = {\n question: string\n expert_model: string\n chat_session_id: string\n}\n\ntype Context = {\n abortController: AbortController\n readFileTimestamps: Record<string, number>\n}\n\ntype ToolYield =\n | { type: 'progress'; content: AssistantMessage }\n | { type: 'result'; data: Out; resultForAssistant: string }\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object'\n}\n\nfunction extractAssistantText(message: AssistantMessage): string {\n const content = message?.message?.content as unknown\n\n if (typeof content === 'string') return content\n if (!Array.isArray(content)) return ''\n\n const parts: string[] = []\n for (const block of content) {\n if (!isRecord(block)) continue\n if (block.type === 'text' && typeof block.text === 'string') {\n parts.push(block.text)\n }\n }\n return parts.join('\\n')\n}\n\nfunction isInterrupted(\n error: unknown,\n abortController: AbortController,\n interruptedFlag: boolean,\n): boolean {\n if (interruptedFlag) return true\n if (abortController.signal.aborted) return true\n if (!isRecord(error)) return false\n return error.name === 'AbortError'\n}\n\nasync function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(`Expert model query timed out after ${timeoutMs}ms`))\n }, timeoutMs)\n\n promise\n .then(value => resolve(value))\n .catch(err => reject(err))\n .finally(() => clearTimeout(timeoutId))\n })\n}\n\nfunction interruptResult(expertModelName: string): ToolYield {\n return {\n type: 'result',\n data: {\n chatSessionId: 'interrupted',\n expertModelName,\n expertAnswer: INTERRUPT_MESSAGE,\n },\n resultForAssistant: INTERRUPT_MESSAGE,\n }\n}\n\nexport async function* callAskExpertModelTool(\n input: Input,\n context: Context,\n renderResultForAssistant: (output: Out) => string,\n): AsyncGenerator<ToolYield> {\n const { question, expert_model, chat_session_id } = input\n const { abortController } = context\n\n const expertModel = expert_model\n let sessionId = ''\n let interrupted = false\n\n const abortListener = () => {\n interrupted = true\n }\n abortController.signal.addEventListener('abort', abortListener)\n\n try {\n if (abortController.signal.aborted) {\n yield interruptResult(expertModel)\n return\n }\n\n if (chat_session_id === 'new') {\n sessionId = createExpertChatSession(expertModel).sessionId\n } else {\n sessionId = chat_session_id\n const session = loadExpertChatSession(sessionId)\n if (!session) {\n sessionId = createExpertChatSession(expertModel).sessionId\n }\n }\n\n if (interrupted || abortController.signal.aborted) {\n yield interruptResult(expertModel)\n return\n }\n\n const history = (() => {\n try {\n return getSessionMessages(sessionId)\n } catch (error) {\n logError(error)\n return []\n }\n })()\n\n const conversation = [...history, { role: 'user', content: question }]\n const llmMessages = conversation.map(msg =>\n msg.role === 'user'\n ? createUserMessage(msg.content)\n : createAssistantMessage(msg.content),\n )\n\n if (interrupted || abortController.signal.aborted) {\n yield interruptResult(expertModel)\n return\n }\n\n yield {\n type: 'progress',\n content: createAssistantMessage(\n `Connecting to ${expertModel}... (timeout: 5 minutes)`,\n ),\n }\n\n const modelManager = getModelManager()\n const modelResolution = modelManager.resolveModelWithInfo(expertModel)\n debugLogger.api('EXPERT_MODEL_RESOLUTION', {\n requestedModel: expertModel,\n success: modelResolution.success,\n profileName: modelResolution.profile?.name,\n profileModelName: modelResolution.profile?.modelName,\n provider: modelResolution.profile?.provider,\n isActive: modelResolution.profile?.isActive,\n error: modelResolution.error,\n })\n\n const timeoutMs = 300_000\n const response = await withTimeout(\n queryLLM(llmMessages, [], 0, [], abortController.signal, {\n safeMode: false,\n model: expertModel,\n prependCLISysprompt: false,\n }),\n timeoutMs,\n )\n\n if (interrupted || abortController.signal.aborted) {\n yield interruptResult(expertModel)\n return\n }\n\n const expertAnswer = extractAssistantText(response).trim()\n if (!expertAnswer) {\n throw new Error('Expert response was empty')\n }\n\n try {\n addMessageToSession(sessionId, 'user', question)\n addMessageToSession(sessionId, 'assistant', expertAnswer)\n } catch (error) {\n logError(error)\n }\n\n const result: Out = {\n chatSessionId: sessionId,\n expertModelName: expertModel,\n expertAnswer,\n }\n\n yield {\n type: 'result',\n data: result,\n resultForAssistant: renderResultForAssistant(result),\n }\n } catch (error) {\n if (isInterrupted(error, abortController, interrupted)) {\n yield interruptResult(expertModel)\n return\n }\n\n logError(error)\n const errorMessage = error instanceof Error ? error.message : String(error)\n const result: Out = {\n chatSessionId: sessionId || 'error-session',\n expertModelName: expertModel,\n expertAnswer: `\u274C ${errorMessage || 'Expert consultation failed with unknown error'}`,\n }\n yield {\n type: 'result',\n data: result,\n resultForAssistant: renderResultForAssistant(result),\n }\n } finally {\n abortController.signal.removeEventListener('abort', abortListener)\n }\n}\n", "export const DESCRIPTION =\n 'Consult an external AI model for a second opinion or specialized analysis.'\n\nexport const PROMPT = `Ask a question to a specific external AI model for expert analysis.\n\nCRITICAL: The expert model receives ONLY your \\`question\\` (plus the prior messages in the same \\`chat_session_id\\`).\nIt does NOT have access to the user\u2019s current repository context unless you include it in the question.\n\nThe \\`question\\` MUST be self-contained:\n1) Background / context\n2) Current situation / constraints\n3) A clear, independent question\n\nUse this tool when you want a different model\u2019s perspective, not for task execution.`\n", "import { z } from 'zod'\nimport type { Tool, ToolUseContext, ValidationResult } from '#core/tooling/Tool'\nimport { BunShell } from '#runtime/shell'\nimport {\n getBackgroundAgentTaskSnapshot,\n waitForBackgroundAgentTask,\n} from '#core/utils/backgroundTasks'\nimport { createAssistantMessage } from '#core/utils/messages'\nimport { DESCRIPTION, PROMPT, TOOL_NAME_FOR_PROMPT } from './prompt'\nimport { readTaskOutput } from '#runtime/taskOutputStore'\n\nconst inputSchema = z.strictObject({\n task_id: z.string().describe('The task ID to get output from'),\n block: z\n .boolean()\n .optional()\n .default(true)\n .describe('Whether to wait for completion'),\n timeout: z\n .number()\n .min(0)\n .max(600000)\n .optional()\n .default(30000)\n .describe('Max wait time in ms'),\n})\n\ntype Input = z.infer<typeof inputSchema>\n\ntype TaskType = 'local_bash' | 'local_agent' | 'remote_agent'\ntype TaskStatus = 'running' | 'pending' | 'completed' | 'failed' | 'killed'\n\ntype TaskSummary = {\n task_id: string\n task_type: TaskType\n status: TaskStatus\n description: string\n output?: string\n exitCode?: number | null\n prompt?: string\n result?: string\n error?: string\n}\n\ntype Output = {\n retrieval_status: 'success' | 'timeout' | 'not_ready'\n task: TaskSummary | null\n}\n\nfunction normalizeTaskOutputInput(input: Record<string, unknown>): Input {\n const task_id =\n (typeof input.task_id === 'string' && input.task_id) ||\n (typeof input.agentId === 'string' && input.agentId) ||\n (typeof input.bash_id === 'string' && input.bash_id) ||\n ''\n\n const block = typeof input.block === 'boolean' ? input.block : true\n\n const timeout =\n typeof input.timeout === 'number'\n ? input.timeout\n : typeof input.wait_up_to === 'number'\n ? input.wait_up_to * 1000\n : 30000\n\n return { task_id, block, timeout }\n}\n\nfunction taskStatusFromBash(\n bg: ReturnType<BunShell['getBackgroundOutput']>,\n): TaskStatus {\n if (!bg) return 'failed'\n if (bg.killed) return 'killed'\n if (bg.code === null) return 'running'\n return bg.code === 0 ? 'completed' : 'failed'\n}\n\nfunction buildTaskSummary(taskId: string): TaskSummary | null {\n const bg = BunShell.getInstance().getBackgroundOutput(taskId)\n if (bg) {\n return {\n task_id: taskId,\n task_type: 'local_bash',\n status: taskStatusFromBash(bg),\n description: bg.command,\n output: readTaskOutput(taskId),\n exitCode: bg.code,\n }\n }\n\n const agent = getBackgroundAgentTaskSnapshot(taskId)\n if (agent) {\n const output = readTaskOutput(taskId) || agent.resultText || ''\n return {\n task_id: taskId,\n task_type: 'local_agent',\n status: agent.status,\n description: agent.description,\n output,\n prompt: agent.prompt,\n result: output,\n error: agent.error,\n }\n }\n\n return null\n}\n\nasync function waitForBashTaskCompletion(args: {\n taskId: string\n timeoutMs: number\n signal: AbortSignal\n}): Promise<TaskSummary | null> {\n const { taskId, timeoutMs, signal } = args\n const startedAt = Date.now()\n\n while (Date.now() - startedAt < timeoutMs) {\n if (signal.aborted) return null\n const summary = buildTaskSummary(taskId)\n if (!summary) return null\n if (summary.status !== 'running' && summary.status !== 'pending')\n return summary\n await new Promise(resolve => setTimeout(resolve, 100))\n }\n\n return buildTaskSummary(taskId)\n}\n\nexport const TaskOutputTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n userFacingName() {\n return 'Task Output'\n },\n inputSchema,\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n async isEnabled() {\n return true\n },\n needsPermissions() {\n return false\n },\n async prompt() {\n return PROMPT\n },\n renderToolUseMessage(input: Record<string, unknown>) {\n const normalized = normalizeTaskOutputInput(input)\n if (normalized.block === false) return 'non-blocking'\n return ''\n },\n renderToolUseRejectedMessage() {\n return null\n },\n renderResultForAssistant(output: Output) {\n const parts: string[] = []\n parts.push(\n `<retrieval_status>${output.retrieval_status}</retrieval_status>`,\n )\n\n if (output.task) {\n parts.push(`<task_id>${output.task.task_id}</task_id>`)\n parts.push(`<task_type>${output.task.task_type}</task_type>`)\n parts.push(`<status>${output.task.status}</status>`)\n if (output.task.exitCode !== undefined && output.task.exitCode !== null) {\n parts.push(`<exit_code>${output.task.exitCode}</exit_code>`)\n }\n if (output.task.output?.trim()) {\n parts.push(`<output>\\n${output.task.output.trimEnd()}\\n</output>`)\n }\n if (output.task.error) {\n parts.push(`<error>${output.task.error}</error>`)\n }\n }\n\n return parts.join('\\n\\n')\n },\n async validateInput(input: Input): Promise<ValidationResult> {\n if (!input.task_id) {\n return { result: false, message: 'Task ID is required', errorCode: 1 }\n }\n\n const task = buildTaskSummary(input.task_id)\n if (!task) {\n return {\n result: false,\n message: `No task found with ID: ${input.task_id}`,\n errorCode: 2,\n }\n }\n\n return { result: true }\n },\n async *call(input: Input, context: ToolUseContext) {\n const normalized = normalizeTaskOutputInput(input)\n const taskId = normalized.task_id\n const block = normalized.block\n const timeoutMs = normalized.timeout\n\n const initial = buildTaskSummary(taskId)\n if (!initial) {\n throw new Error(`No task found with ID: ${taskId}`)\n }\n\n if (!block) {\n const isDone =\n initial.status !== 'running' && initial.status !== 'pending'\n const out: Output = {\n retrieval_status: isDone ? 'success' : 'not_ready',\n task: initial,\n }\n yield {\n type: 'result',\n data: out,\n resultForAssistant: this.renderResultForAssistant(out),\n }\n return\n }\n\n yield {\n type: 'progress',\n content: createAssistantMessage(\n `<tool-progress>${initial.description ? ` ${initial.description}\\n` : ''} Waiting for task (esc to give additional instructions)</tool-progress>`,\n ),\n }\n\n let finalTask: TaskSummary | null = null\n\n if (initial.task_type === 'local_agent') {\n try {\n const task = await waitForBackgroundAgentTask(\n taskId,\n timeoutMs,\n context.abortController.signal,\n )\n finalTask = task ? buildTaskSummary(taskId) : null\n } catch {\n finalTask = buildTaskSummary(taskId)\n }\n } else {\n finalTask = await waitForBashTaskCompletion({\n taskId,\n timeoutMs,\n signal: context.abortController.signal,\n })\n }\n\n if (!finalTask) {\n const out: Output = { retrieval_status: 'timeout', task: null }\n yield {\n type: 'result',\n data: out,\n resultForAssistant: this.renderResultForAssistant(out),\n }\n return\n }\n\n if (finalTask.status === 'running' || finalTask.status === 'pending') {\n const out: Output = { retrieval_status: 'timeout', task: finalTask }\n yield {\n type: 'result',\n data: out,\n resultForAssistant: this.renderResultForAssistant(out),\n }\n return\n }\n\n const out: Output = { retrieval_status: 'success', task: finalTask }\n yield {\n type: 'result',\n data: out,\n resultForAssistant: this.renderResultForAssistant(out),\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "import type { Message as ConversationMessage } from '#core/query'\n\nexport type BackgroundAgentStatus =\n | 'running'\n | 'completed'\n | 'failed'\n | 'killed'\n\nexport type BackgroundAgentTask = {\n type: 'async_agent'\n agentId: string\n description: string\n prompt: string\n status: BackgroundAgentStatus\n startedAt: number\n completedAt?: number\n error?: string\n resultText?: string\n messages: ConversationMessage[]\n retrieved?: boolean\n}\n\nexport type BackgroundAgentTaskRuntime = BackgroundAgentTask & {\n abortController: AbortController\n done: Promise<void>\n}\n\nconst backgroundTasks = new Map<string, BackgroundAgentTaskRuntime>()\n\nexport function getBackgroundAgentTask(\n agentId: string,\n): BackgroundAgentTaskRuntime | undefined {\n return backgroundTasks.get(agentId)\n}\n\nexport function getBackgroundAgentTaskSnapshot(\n agentId: string,\n): BackgroundAgentTask | undefined {\n const task = backgroundTasks.get(agentId)\n if (!task) return undefined\n const { abortController: _abortController, done: _done, ...snapshot } = task\n return snapshot\n}\n\nexport function upsertBackgroundAgentTask(\n task: BackgroundAgentTaskRuntime,\n): void {\n backgroundTasks.set(task.agentId, task)\n}\n\nexport function markBackgroundAgentTaskRetrieved(agentId: string): void {\n const task = backgroundTasks.get(agentId)\n if (!task) return\n task.retrieved = true\n}\n\nexport async function waitForBackgroundAgentTask(\n agentId: string,\n waitUpToMs: number,\n signal: AbortSignal,\n): Promise<BackgroundAgentTaskRuntime | undefined> {\n const task = backgroundTasks.get(agentId)\n if (!task) return undefined\n if (task.status !== 'running') return task\n\n const timeoutPromise = new Promise<never>((_, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error('Request timed out'))\n }, waitUpToMs)\n timeoutId.unref?.()\n })\n\n const abortPromise = new Promise<never>((_, reject) => {\n if (signal.aborted) {\n reject(new Error('Request aborted'))\n return\n }\n const onAbort = () => reject(new Error('Request aborted'))\n signal.addEventListener('abort', onAbort, { once: true })\n })\n\n await Promise.race([task.done, timeoutPromise, abortPromise])\n return backgroundTasks.get(agentId)\n}\n", "export const TOOL_NAME_FOR_PROMPT = 'TaskOutput'\n\nexport const DESCRIPTION = 'Retrieves output from a running or completed task'\n\nexport const PROMPT = `- Retrieves output from a running or completed task (background shell, agent, or remote session)\n- Takes a task_id parameter identifying the task\n- Returns the task output along with status information\n- Use block=true (default) to wait for task completion\n- Use block=false for non-blocking check of current status\n- Task IDs can be found using the /tasks command\n- Works with all task types: background shells, async agents, and remote sessions`\n", "import { z } from 'zod'\nimport { Tool } from '#core/tooling/Tool'\nimport { BunShell } from '#runtime/shell'\nimport { DESCRIPTION, PROMPT, TOOL_NAME_FOR_PROMPT } from './prompt'\n\nconst inputSchema = z.strictObject({\n shell_id: z.string().describe('The ID of the background shell to kill'),\n})\n\ntype Input = z.infer<typeof inputSchema>\ntype Output = {\n message: string\n shell_id: string\n}\n\nexport const KillShellTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n userFacingName() {\n return 'Kill Shell'\n },\n inputSchema,\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return true\n },\n async isEnabled() {\n return true\n },\n needsPermissions() {\n return false\n },\n async prompt() {\n return PROMPT\n },\n renderToolUseMessage({ shell_id }: Input) {\n return `Kill shell: ${shell_id}`\n },\n renderResultForAssistant(output: Output) {\n return JSON.stringify(output)\n },\n async validateInput({ shell_id }: Input) {\n const bg = BunShell.getInstance().getBackgroundOutput(shell_id)\n if (!bg) {\n return {\n result: false,\n message: `No shell found with ID: ${shell_id}`,\n errorCode: 1,\n }\n }\n return { result: true }\n },\n async *call({ shell_id }: Input) {\n const bg = BunShell.getInstance().getBackgroundOutput(shell_id)\n if (!bg) {\n throw new Error(`No shell found with ID: ${shell_id}`)\n }\n\n const status = bg.killed\n ? 'killed'\n : bg.code === null\n ? 'running'\n : bg.code === 0\n ? 'completed'\n : 'failed'\n\n if (status !== 'running') {\n throw new Error(\n `Shell ${shell_id} is not running, so cannot be killed (status: ${status})`,\n )\n }\n\n const killed = BunShell.getInstance().killBackgroundShell(shell_id)\n const output: Output = {\n message: killed\n ? `Successfully killed shell: ${shell_id} (${bg.command})`\n : `No shell found with ID: ${shell_id}`,\n shell_id,\n }\n yield {\n type: 'result',\n data: output,\n resultForAssistant: this.renderResultForAssistant(output),\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const TOOL_NAME_FOR_PROMPT = 'KillShell'\nexport const DESCRIPTION = 'Kill a background bash shell by ID'\n\nexport const PROMPT = `\n- Kills a running background bash shell by its ID\n- Takes a shell_id parameter identifying the shell to kill\n- Returns a success or failure status \n- Use this tool when you need to terminate a long-running shell\n- Shell IDs can be found using the /tasks command\n`\n", "import { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport type { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport { getClients, type WrappedClient } from '#core/mcp/client'\nimport { ListResourcesResultSchema } from '@modelcontextprotocol/sdk/types.js'\nimport { DESCRIPTION, PROMPT, TOOL_NAME } from './prompt'\n\nconst inputSchema = z.strictObject({\n server: z\n .string()\n .optional()\n .describe('Optional server name to filter resources by'),\n})\n\ntype Input = z.infer<typeof inputSchema>\n\ntype OutputItem = {\n uri: string\n name: string\n mimeType?: string\n description?: string\n server: string\n}\n\ntype Output = OutputItem[]\n\nfunction isWrappedClient(value: unknown): value is WrappedClient {\n if (!value || typeof value !== 'object') return false\n const record = value as Record<string, unknown>\n if (typeof record.name !== 'string') return false\n if (record.type !== 'connected' && record.type !== 'failed') return false\n if (record.type === 'connected') {\n return typeof record.client === 'object' && record.client !== null\n }\n return true\n}\n\nasync function getMcpClients(\n context?: ToolUseContext,\n): Promise<WrappedClient[]> {\n const override = context?.options?.mcpClients\n if (Array.isArray(override) && override.every(isWrappedClient)) {\n return override\n }\n return await getClients()\n}\n\nexport const ListMcpResourcesTool = {\n name: TOOL_NAME,\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'listMcpResources'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n needsPermissions() {\n return false\n },\n async validateInput({ server }: Input, context?: ToolUseContext) {\n if (!server) return { result: true }\n const clients = await getMcpClients(context)\n const found = clients.some(c => c.name === server)\n if (!found) {\n return {\n result: false,\n message: `Server \"${server}\" not found. Available servers: ${clients.map(c => c.name).join(', ')}`,\n errorCode: 1,\n }\n }\n return { result: true }\n },\n renderToolUseMessage({ server }: Input) {\n return server\n ? `List MCP resources from server \"${server}\"`\n : 'List all MCP resources'\n },\n renderToolResultMessage(output: Output) {\n return (\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text bold>{output.length}</Text>\n <Text> resources</Text>\n </Box>\n )\n },\n renderResultForAssistant(output: Output) {\n return JSON.stringify(output)\n },\n async *call({ server }: Input, context: ToolUseContext) {\n const clients = await getMcpClients(context)\n const selected = server ? clients.filter(c => c.name === server) : clients\n if (server && selected.length === 0) {\n throw new Error(\n `Server \"${server}\" not found. Available servers: ${clients.map(c => c.name).join(', ')}`,\n )\n }\n\n const resources: OutputItem[] = []\n for (const wrapped of selected) {\n if (wrapped.type !== 'connected') continue\n try {\n let capabilities = wrapped.capabilities ?? null\n if (!capabilities) {\n try {\n capabilities = wrapped.client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n }\n if (!capabilities?.resources) continue\n const result = await wrapped.client.request(\n { method: 'resources/list' },\n ListResourcesResultSchema,\n )\n if (!result.resources) continue\n resources.push(\n ...result.resources.map(r => ({\n ...r,\n server: wrapped.name,\n })),\n )\n } catch {\n // Best-effort: skip servers that fail to respond\n }\n }\n\n yield {\n type: 'result',\n data: resources,\n resultForAssistant: this.renderResultForAssistant(resources),\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const TOOL_NAME = 'ListMcpResourcesTool'\n\nexport const DESCRIPTION = `Lists available resources from configured MCP servers.\nEach resource object includes a 'server' field indicating which server it's from.\n\nUsage examples:\n- List all resources from all servers: \\`listMcpResources\\`\n- List resources from a specific server: \\`listMcpResources({ server: \"myserver\" })\\``\n\nexport const PROMPT = `List available resources from configured MCP servers.\nEach returned resource will include all standard MCP resource fields plus a 'server' field \nindicating which server the resource belongs to.\n\nParameters:\n- server (optional): The name of a specific MCP server to get resources from. If not provided,\n resources from all servers will be returned.`\n", "import type { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport { getAbsolutePath } from '#core/utils/file'\nimport { hasReadPermission } from '#core/utils/permissions/filesystem'\nimport { getCwd } from '#core/utils/state'\nimport { maybeTruncateVerboseToolOutput } from '#core/utils/toolOutputDisplay'\nimport { existsSync, readFileSync, statSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport { OPERATIONS } from './constants'\nimport { extractSymbolAtPosition, toProjectRelativeIfPossible } from './format'\nimport { summarizeToolResult } from './summary'\nimport { tryLoadTypeScriptModule } from './tsProject'\nimport { callLspTool } from './call'\nimport { DESCRIPTION, PROMPT, TOOL_NAME_FOR_PROMPT } from './prompt'\n\nexport const inputSchema = z.strictObject({\n operation: z.enum(OPERATIONS).describe('The LSP operation to perform'),\n filePath: z.string().describe('The absolute or relative path to the file'),\n line: z\n .number()\n .int()\n .positive()\n .describe('The line number (1-based, as shown in editors)'),\n character: z\n .number()\n .int()\n .positive()\n .describe('The character offset (1-based, as shown in editors)'),\n})\n\nexport const outputSchema = z.object({\n operation: z\n .enum(OPERATIONS)\n .describe('The LSP operation that was performed'),\n result: z.string().describe('The formatted result of the LSP operation'),\n filePath: z.string().describe('The file path the operation was performed on'),\n resultCount: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .describe('Number of results (definitions, references, symbols)'),\n fileCount: z\n .number()\n .int()\n .nonnegative()\n .optional()\n .describe('Number of files containing results'),\n})\n\nexport type Input = z.infer<typeof inputSchema>\nexport type Output = z.infer<typeof outputSchema>\n\nexport const LspTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'LSP'\n },\n async isEnabled() {\n return tryLoadTypeScriptModule(getCwd()) !== null\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n needsPermissions({ filePath }: Input) {\n const abs = getAbsolutePath(filePath) ?? filePath\n return !hasReadPermission(abs || getCwd())\n },\n async validateInput(input: Input) {\n const parsed = inputSchema.safeParse(input)\n if (!parsed.success) {\n return {\n result: false,\n message: `Invalid input: ${parsed.error.message}`,\n errorCode: 3,\n }\n }\n\n const absPath = getAbsolutePath(input.filePath) ?? input.filePath\n if (!existsSync(absPath)) {\n return {\n result: false,\n message: `File does not exist: ${input.filePath}`,\n errorCode: 1,\n }\n }\n try {\n if (!statSync(absPath).isFile()) {\n return {\n result: false,\n message: `Path is not a file: ${input.filePath}`,\n errorCode: 2,\n }\n }\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n return {\n result: false,\n message: `Cannot access file: ${input.filePath}. ${e.message}`,\n errorCode: 4,\n }\n }\n\n return { result: true }\n },\n renderToolUseMessage(input: Input, { verbose }: { verbose: boolean }) {\n const abs = getAbsolutePath(input.filePath) ?? input.filePath\n const filePathForDisplay = verbose ? abs : toProjectRelativeIfPossible(abs)\n const parts: string[] = []\n\n if (\n (input.operation === 'goToDefinition' ||\n input.operation === 'findReferences' ||\n input.operation === 'hover' ||\n input.operation === 'goToImplementation') &&\n input.filePath &&\n input.line !== undefined &&\n input.character !== undefined\n ) {\n try {\n const content = readFileSync(abs, 'utf8')\n const symbol = extractSymbolAtPosition(\n content.split('\\n'),\n input.line - 1,\n input.character - 1,\n )\n if (symbol) {\n parts.push(`operation: \"${input.operation}\"`)\n parts.push(`symbol: \"${symbol}\"`)\n parts.push(`in: \"${filePathForDisplay}\"`)\n return parts.join(', ')\n }\n } catch {\n // fall through\n }\n\n parts.push(`operation: \"${input.operation}\"`)\n parts.push(`file: \"${filePathForDisplay}\"`)\n parts.push(`position: ${input.line}:${input.character}`)\n return parts.join(', ')\n }\n\n parts.push(`operation: \"${input.operation}\"`)\n if (input.filePath) parts.push(`file: \"${filePathForDisplay}\"`)\n return parts.join(', ')\n },\n renderToolResultMessage(output: Output, { verbose }: { verbose: boolean }) {\n if (output.resultCount !== undefined && output.fileCount !== undefined) {\n const display = verbose\n ? maybeTruncateVerboseToolOutput(output.result, {\n maxLines: 120,\n maxChars: 20_000,\n })\n : null\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n {summarizeToolResult(\n output.operation,\n output.resultCount,\n output.fileCount,\n )}\n </Box>\n {display ? (\n <Box marginLeft={5}>\n <Text>{display.text}</Text>\n </Box>\n ) : null}\n </Box>\n )\n }\n\n return (\n <Box justifyContent=\"space-between\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text>{output.result}</Text>\n </Box>\n </Box>\n )\n },\n renderResultForAssistant(output: Output) {\n return output.result\n },\n async *call(input: Input, context: ToolUseContext) {\n yield* callLspTool(input, context)\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const OPERATIONS = [\n 'goToDefinition',\n 'findReferences',\n 'hover',\n 'documentSymbol',\n 'workspaceSymbol',\n 'goToImplementation',\n 'prepareCallHierarchy',\n 'incomingCalls',\n 'outgoingCalls',\n] as const\n\nexport type Operation = (typeof OPERATIONS)[number]\n\nexport const OPERATION_LABELS: Record<\n Operation,\n { singular: string; plural: string; special?: string }\n> = {\n goToDefinition: { singular: 'definition', plural: 'definitions' },\n findReferences: { singular: 'reference', plural: 'references' },\n documentSymbol: { singular: 'symbol', plural: 'symbols' },\n workspaceSymbol: { singular: 'symbol', plural: 'symbols' },\n hover: { singular: 'hover info', plural: 'hover info', special: 'available' },\n goToImplementation: { singular: 'implementation', plural: 'implementations' },\n prepareCallHierarchy: { singular: 'call item', plural: 'call items' },\n incomingCalls: { singular: 'caller', plural: 'callers' },\n outgoingCalls: { singular: 'callee', plural: 'callees' },\n}\n", "import { relative } from 'path'\nimport { getCwd } from '#core/utils/state'\n\nexport function extractSymbolAtPosition(\n lines: string[],\n zeroBasedLine: number,\n zeroBasedCharacter: number,\n): string | null {\n try {\n if (zeroBasedLine < 0 || zeroBasedLine >= lines.length) return null\n const line = lines[zeroBasedLine]\n if (zeroBasedCharacter < 0 || zeroBasedCharacter >= line.length) return null\n const tokenRe = /[\\w$'!]+|[+\\-*/%&|^~<>=]+/g\n let match: RegExpExecArray | null\n while ((match = tokenRe.exec(line)) !== null) {\n const start = match.index\n const end = start + match[0].length\n if (zeroBasedCharacter >= start && zeroBasedCharacter < end) {\n const token = match[0]\n return token.length > 30 ? `${token.slice(0, 27)}...` : token\n }\n }\n return null\n } catch {\n return null\n }\n}\n\nexport function toProjectRelativeIfPossible(filePath: string): string {\n const cwd = getCwd()\n try {\n const rel = relative(cwd, filePath)\n if (!rel || rel === '') return filePath\n if (rel.startsWith('..')) return filePath\n return rel\n } catch {\n return filePath\n }\n}\n\nfunction formatLocation(\n fileName: string,\n line0: number,\n character0: number,\n): string {\n return `${toProjectRelativeIfPossible(fileName)}:${line0 + 1}:${character0 + 1}`\n}\n\nexport function formatGoToDefinitionResult(\n locations: Array<{\n fileName: string\n line0: number\n character0: number\n }> | null,\n): { formatted: string; resultCount: number; fileCount: number } {\n if (!locations || locations.length === 0) {\n return {\n formatted:\n 'No definition found. This may occur if the cursor is not on a symbol, or if the definition is in an external library not indexed by the LSP server.',\n resultCount: 0,\n fileCount: 0,\n }\n }\n const fileCount = new Set(locations.map(l => l.fileName)).size\n if (locations.length === 1) {\n const loc = locations[0]\n return {\n formatted: `Defined in ${formatLocation(loc.fileName, loc.line0, loc.character0)}`,\n resultCount: 1,\n fileCount,\n }\n }\n return {\n formatted: `Found ${locations.length} definitions:\\n${locations\n .map(\n loc => ` ${formatLocation(loc.fileName, loc.line0, loc.character0)}`,\n )\n .join('\\n')}`,\n resultCount: locations.length,\n fileCount,\n }\n}\n\nexport function groupLocationsByFile<T extends { fileName: string }>(\n items: T[],\n): Map<string, T[]> {\n const grouped = new Map<string, T[]>()\n for (const item of items) {\n const key = toProjectRelativeIfPossible(item.fileName)\n const existing = grouped.get(key)\n if (existing) existing.push(item)\n else grouped.set(key, [item])\n }\n return grouped\n}\n\nexport function formatFindReferencesResult(\n references: Array<{\n fileName: string\n line0: number\n character0: number\n }> | null,\n): { formatted: string; resultCount: number; fileCount: number } {\n if (!references || references.length === 0) {\n return {\n formatted:\n 'No references found. This may occur if the symbol has no usages, or if the LSP server has not fully indexed the workspace.',\n resultCount: 0,\n fileCount: 0,\n }\n }\n if (references.length === 1) {\n const ref = references[0]\n return {\n formatted: `Found 1 reference:\\n ${formatLocation(ref.fileName, ref.line0, ref.character0)}`,\n resultCount: 1,\n fileCount: 1,\n }\n }\n\n const grouped = groupLocationsByFile(references)\n const lines: string[] = [\n `Found ${references.length} references across ${grouped.size} files:`,\n ]\n for (const [file, refs] of grouped) {\n lines.push(`\\n${file}:`)\n for (const ref of refs) {\n lines.push(` Line ${ref.line0 + 1}:${ref.character0 + 1}`)\n }\n }\n return {\n formatted: lines.join('\\n'),\n resultCount: references.length,\n fileCount: grouped.size,\n }\n}\n\nexport function formatHoverResult(\n hoverText: string | null,\n line0: number,\n character0: number,\n): { formatted: string; resultCount: number; fileCount: number } {\n if (!hoverText || hoverText.trim() === '') {\n return {\n formatted:\n 'No hover information available. This may occur if the cursor is not on a symbol, or if the LSP server has not fully indexed the file.',\n resultCount: 0,\n fileCount: 0,\n }\n }\n return {\n formatted: `Hover info at ${line0 + 1}:${character0 + 1}:\\n\\n${hoverText}`,\n resultCount: 1,\n fileCount: 1,\n }\n}\n\nexport function formatDocumentSymbolsResult(\n lines: string[],\n symbolCount: number,\n) {\n if (symbolCount === 0) {\n return {\n formatted:\n 'No symbols found in document. This may occur if the file is empty, not supported by the LSP server, or if the server has not fully indexed the file.',\n resultCount: 0,\n fileCount: 0,\n }\n }\n return {\n formatted: ['Document symbols:', ...lines].join('\\n'),\n resultCount: symbolCount,\n fileCount: 1,\n }\n}\n", "import { Text } from 'ink'\nimport React from 'react'\nimport type { Operation } from './constants'\nimport { OPERATION_LABELS } from './constants'\n\nexport function summarizeToolResult(\n operation: Operation,\n resultCount: number,\n fileCount: number,\n): React.ReactNode {\n const label = OPERATION_LABELS[operation] ?? {\n singular: 'result',\n plural: 'results',\n }\n const noun = resultCount === 1 ? label.singular : label.plural\n if (operation === 'hover' && resultCount > 0 && label.special) {\n return <Text>Hover info {label.special}</Text>\n }\n return (\n <Text>\n Found <Text bold>{resultCount}</Text> {noun}\n {fileCount > 1 ? (\n <>\n {' '}\n across <Text bold>{fileCount}</Text> files\n </>\n ) : null}\n </Text>\n )\n}\n", "import { statSync } from 'fs'\nimport { createRequire } from 'node:module'\nimport { extname, join } from 'path'\nimport { pathToFileURL } from 'url'\n\ntype TypeScriptModule = typeof import('typescript')\n\nlet cachedTypeScript: { cwd: string; module: TypeScriptModule | null } | null =\n null\n\nexport function tryLoadTypeScriptModule(\n projectCwd: string,\n): TypeScriptModule | null {\n if (cachedTypeScript?.cwd === projectCwd) return cachedTypeScript.module\n\n try {\n const requireFromCwd = createRequire(\n pathToFileURL(join(projectCwd, '__kode_lsp__.js')),\n )\n const mod = requireFromCwd('typescript') as TypeScriptModule\n cachedTypeScript = { cwd: projectCwd, module: mod }\n return mod\n } catch {\n cachedTypeScript = { cwd: projectCwd, module: null }\n return null\n }\n}\n\ntype TsProjectState = {\n ts: TypeScriptModule\n cwd: string\n rootFiles: Set<string>\n compilerOptions: any\n languageService: any\n versions: Map<string, string>\n}\n\nconst projectCache = new Map<string, TsProjectState>()\n\nexport function getOrCreateTsProject(\n projectCwd: string,\n): TsProjectState | null {\n const ts = tryLoadTypeScriptModule(projectCwd)\n if (!ts) return null\n\n const existing = projectCache.get(projectCwd)\n if (existing) return existing\n\n let compilerOptions: any = {\n allowJs: true,\n checkJs: false,\n jsx: ts.JsxEmit.ReactJSX,\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n }\n\n let rootFileNames: string[] = []\n try {\n const configPath = ts.findConfigFile(\n projectCwd,\n ts.sys.fileExists,\n 'tsconfig.json',\n )\n if (configPath) {\n const configFile = ts.readConfigFile(configPath, ts.sys.readFile)\n if (!configFile.error) {\n const parsed = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n projectCwd,\n )\n compilerOptions = { ...compilerOptions, ...parsed.options }\n rootFileNames = parsed.fileNames\n }\n }\n } catch {\n // Best-effort: fall back to single-file mode\n }\n\n const rootFiles = new Set(rootFileNames)\n const versions = new Map<string, string>()\n\n const host: any = {\n getCompilationSettings: () => compilerOptions,\n getScriptFileNames: () => Array.from(rootFiles),\n getScriptVersion: (fileName: string) => {\n try {\n const stat = statSync(fileName)\n const version = String(stat.mtimeMs ?? Date.now())\n versions.set(fileName, version)\n return version\n } catch {\n return versions.get(fileName) ?? '0'\n }\n },\n getScriptSnapshot: (fileName: string) => {\n try {\n if (!ts.sys.fileExists(fileName)) return undefined\n const content = ts.sys.readFile(fileName)\n if (content === undefined) return undefined\n const stat = statSync(fileName)\n versions.set(fileName, String(stat.mtimeMs ?? Date.now()))\n return ts.ScriptSnapshot.fromString(content)\n } catch {\n return undefined\n }\n },\n getCurrentDirectory: () => projectCwd,\n getDefaultLibFileName: (options: any) => ts.getDefaultLibFilePath(options),\n fileExists: ts.sys.fileExists,\n readFile: ts.sys.readFile,\n readDirectory: ts.sys.readDirectory,\n directoryExists: ts.sys.directoryExists,\n getDirectories: ts.sys.getDirectories,\n useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames,\n getCanonicalFileName: (fileName: string) =>\n ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(),\n getNewLine: () => ts.sys.newLine,\n }\n\n const languageService = ts.createLanguageService(\n host,\n ts.createDocumentRegistry(),\n )\n\n const state: TsProjectState = {\n ts,\n cwd: projectCwd,\n rootFiles,\n compilerOptions,\n languageService,\n versions,\n }\n projectCache.set(projectCwd, state)\n return state\n}\n\nexport function isFileTypeSupportedByTypescriptBackend(\n filePath: string,\n): boolean {\n const ext = extname(filePath).toLowerCase()\n return (\n ext === '.ts' ||\n ext === '.tsx' ||\n ext === '.js' ||\n ext === '.jsx' ||\n ext === '.mts' ||\n ext === '.cts' ||\n ext === '.mjs' ||\n ext === '.cjs'\n )\n}\n", "import type { ToolUseContext } from '#core/tooling/Tool'\nimport { getAbsolutePath } from '#core/utils/file'\nimport { getCwd } from '#core/utils/state'\nimport { extname } from 'path'\nimport type { Input, Output } from './LspTool'\nimport {\n getOrCreateTsProject,\n isFileTypeSupportedByTypescriptBackend,\n} from './tsProject'\nimport { runLspOperation } from './operations'\n\nexport async function* callLspTool(\n input: Input,\n _context: ToolUseContext,\n): AsyncGenerator<{\n type: 'result'\n data: Output\n resultForAssistant: string\n}> {\n const absPath = getAbsolutePath(input.filePath) ?? input.filePath\n\n if (!isFileTypeSupportedByTypescriptBackend(absPath)) {\n const ext = extname(absPath)\n const out: Output = {\n operation: input.operation,\n result: `No LSP server available for file type: ${ext}`,\n filePath: input.filePath,\n resultCount: 0,\n fileCount: 0,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n return\n }\n\n const project = getOrCreateTsProject(getCwd())\n if (!project) {\n const out: Output = {\n operation: input.operation,\n result:\n 'LSP server manager not initialized. This may indicate a startup issue.',\n filePath: input.filePath,\n resultCount: 0,\n fileCount: 0,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n return\n }\n\n project.rootFiles.add(absPath)\n\n const ts = project.ts\n const service = project.languageService\n const program = service.getProgram?.()\n if (!program) {\n const out: Output = {\n operation: input.operation,\n result: `Error performing ${input.operation}: TypeScript program not available`,\n filePath: input.filePath,\n resultCount: 0,\n fileCount: 0,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n return\n }\n\n const sourceFile = program.getSourceFile(absPath)\n if (!sourceFile) {\n const out: Output = {\n operation: input.operation,\n result: `Error performing ${input.operation}: File is not part of the TypeScript program`,\n filePath: input.filePath,\n resultCount: 0,\n fileCount: 0,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n return\n }\n\n const pos = ts.getPositionOfLineAndCharacter(\n sourceFile,\n input.line - 1,\n input.character - 1,\n )\n\n try {\n const { formatted, resultCount, fileCount } = runLspOperation({\n input,\n absPath,\n pos,\n program,\n service,\n ts,\n sourceFile,\n })\n\n const out: Output = {\n operation: input.operation,\n result: formatted,\n filePath: input.filePath,\n resultCount,\n fileCount,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n const out: Output = {\n operation: input.operation,\n result: `Error performing ${input.operation}: ${message}`,\n filePath: input.filePath,\n }\n yield { type: 'result', data: out, resultForAssistant: out.result }\n }\n}\n", "import type { Input } from './LspTool'\nimport {\n formatDocumentSymbolsResult,\n formatFindReferencesResult,\n formatGoToDefinitionResult,\n formatHoverResult,\n groupLocationsByFile,\n} from './format'\n\ntype Args = {\n input: Input\n absPath: string\n pos: number\n ts: any\n program: any\n service: any\n sourceFile: any\n}\n\nexport function runLspOperation({\n input,\n absPath,\n pos,\n ts,\n program,\n service,\n sourceFile,\n}: Args): { formatted: string; resultCount: number; fileCount: number } {\n let formatted: string\n let resultCount = 0\n let fileCount = 0\n\n switch (input.operation) {\n case 'goToDefinition': {\n const defs = service.getDefinitionAtPosition?.(absPath, pos) ?? []\n const locations = defs\n .map((d: any) => {\n const defSourceFile = program.getSourceFile(d.fileName)\n if (!defSourceFile) return null\n const lc = ts.getLineAndCharacterOfPosition(\n defSourceFile,\n d.textSpan.start,\n )\n return {\n fileName: d.fileName,\n line0: lc.line,\n character0: lc.character,\n }\n })\n .filter(Boolean) as Array<{\n fileName: string\n line0: number\n character0: number\n }>\n const res = formatGoToDefinitionResult(locations)\n formatted = res.formatted\n resultCount = res.resultCount\n fileCount = res.fileCount\n break\n }\n case 'goToImplementation': {\n const impls = service.getImplementationAtPosition?.(absPath, pos) ?? []\n const locations = impls\n .map((d: any) => {\n const defSourceFile = program.getSourceFile(d.fileName)\n if (!defSourceFile) return null\n const lc = ts.getLineAndCharacterOfPosition(\n defSourceFile,\n d.textSpan.start,\n )\n return {\n fileName: d.fileName,\n line0: lc.line,\n character0: lc.character,\n }\n })\n .filter(Boolean) as Array<{\n fileName: string\n line0: number\n character0: number\n }>\n const res = formatGoToDefinitionResult(locations)\n formatted = res.formatted\n resultCount = res.resultCount\n fileCount = res.fileCount\n break\n }\n case 'findReferences': {\n const referencedSymbols = service.findReferences?.(absPath, pos) ?? []\n const refs: Array<{\n fileName: string\n line0: number\n character0: number\n }> = []\n for (const sym of referencedSymbols) {\n for (const ref of sym.references ?? []) {\n const refSource = program.getSourceFile(ref.fileName)\n if (!refSource) continue\n const lc = ts.getLineAndCharacterOfPosition(\n refSource,\n ref.textSpan.start,\n )\n refs.push({\n fileName: ref.fileName,\n line0: lc.line,\n character0: lc.character,\n })\n }\n }\n const res = formatFindReferencesResult(refs)\n formatted = res.formatted\n resultCount = res.resultCount\n fileCount = res.fileCount\n break\n }\n case 'hover': {\n const info = service.getQuickInfoAtPosition?.(absPath, pos)\n let text: string | null = null\n let hoverLine0 = input.line - 1\n let hoverCharacter0 = input.character - 1\n if (info) {\n const parts: string[] = []\n const signature = ts.displayPartsToString(info.displayParts ?? [])\n if (signature) parts.push(signature)\n const doc = ts.displayPartsToString(info.documentation ?? [])\n if (doc) parts.push(doc)\n if (info.tags && info.tags.length > 0) {\n for (const tag of info.tags) {\n const tagText = ts.displayPartsToString(tag.text ?? [])\n parts.push(`@${tag.name}${tagText ? ` ${tagText}` : ''}`)\n }\n }\n text = parts.filter(Boolean).join('\\\\n\\\\n')\n const lc = ts.getLineAndCharacterOfPosition(\n sourceFile,\n info.textSpan.start,\n )\n hoverLine0 = lc.line\n hoverCharacter0 = lc.character\n }\n const res = formatHoverResult(text, hoverLine0, hoverCharacter0)\n formatted = res.formatted\n resultCount = res.resultCount\n fileCount = res.fileCount\n break\n }\n case 'documentSymbol': {\n const tree = service.getNavigationTree?.(absPath)\n const lines: string[] = []\n let count = 0\n\n const kindLabel = (kind: string) => {\n const m = {\n class: 'Class',\n interface: 'Interface',\n enum: 'Enum',\n function: 'Function',\n method: 'Method',\n property: 'Property',\n var: 'Variable',\n let: 'Variable',\n const: 'Constant',\n module: 'Module',\n alias: 'Alias',\n type: 'Type',\n } as Record<string, string>\n return (\n m[kind] ?? (kind ? kind[0].toUpperCase() + kind.slice(1) : 'Unknown')\n )\n }\n\n const walk = (node: any, depth: number) => {\n const children: any[] = node?.childItems ?? []\n for (const child of children) {\n const span = child.spans?.[0]\n if (!span) continue\n const lc = ts.getLineAndCharacterOfPosition(sourceFile, span.start)\n const indent = ' '.repeat(depth)\n const label = kindLabel(child.kind)\n const detail = child.kindModifiers ? ` ${child.kindModifiers}` : ''\n lines.push(\n `${indent}${child.text} (${label})${detail} - Line ${lc.line + 1}`,\n )\n count += 1\n if (child.childItems && child.childItems.length > 0) {\n walk(child, depth + 1)\n }\n }\n }\n walk(tree, 0)\n\n const res = formatDocumentSymbolsResult(lines, count)\n formatted = res.formatted\n resultCount = res.resultCount\n fileCount = res.fileCount\n break\n }\n case 'workspaceSymbol': {\n const items =\n service.getNavigateToItems?.('', 100, undefined, true, true) ?? []\n if (!items || items.length === 0) {\n formatted =\n 'No symbols found in workspace. This may occur if the workspace is empty, or if the LSP server has not finished indexing the project.'\n resultCount = 0\n fileCount = 0\n break\n }\n\n const lines: string[] = [\n `Found ${items.length} symbol${items.length === 1 ? '' : 's'} in workspace:`,\n ]\n const wrappedItems: Array<{ fileName: string; item: any }> = items.map(\n (it: any) => ({\n fileName: it.fileName,\n item: it,\n }),\n )\n const grouped = groupLocationsByFile(wrappedItems)\n for (const [file, itemsInFile] of grouped) {\n lines.push(`\\\\n${file}:`)\n for (const wrapper of itemsInFile) {\n const it = wrapper.item\n const sf = program.getSourceFile(it.fileName)\n if (!sf) continue\n const span = it.textSpan\n const lc = span\n ? ts.getLineAndCharacterOfPosition(sf, span.start)\n : { line: 0, character: 0 }\n const label = it.kind\n ? String(it.kind)[0].toUpperCase() + String(it.kind).slice(1)\n : 'Symbol'\n let line = ` ${it.name} (${label}) - Line ${lc.line + 1}`\n if (it.containerName) line += ` in ${it.containerName}`\n lines.push(line)\n }\n }\n formatted = lines.join('\\\\n')\n resultCount = items.length\n fileCount = grouped.size\n break\n }\n case 'prepareCallHierarchy':\n case 'incomingCalls':\n case 'outgoingCalls': {\n const opLabel = input.operation\n formatted = `Error performing ${opLabel}: Call hierarchy is not supported by the TypeScript backend`\n resultCount = 0\n fileCount = 0\n break\n }\n default: {\n formatted = `Error performing ${input.operation}: Unsupported operation`\n resultCount = 0\n fileCount = 0\n }\n }\n\n return { formatted, resultCount, fileCount }\n}\n", "export const TOOL_NAME_FOR_PROMPT = 'LSP'\n\nexport const PROMPT = `Interact with Language Server Protocol (LSP) servers to get code intelligence features.\n\nSupported operations:\n- goToDefinition: Find where a symbol is defined\n- findReferences: Find all references to a symbol\n- hover: Get hover information (documentation, type info) for a symbol\n- documentSymbol: Get all symbols (functions, classes, variables) in a document\n- workspaceSymbol: Search for symbols across the entire workspace\n- goToImplementation: Find implementations of an interface or abstract method\n- prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)\n- incomingCalls: Find all functions/methods that call the function at a position\n- outgoingCalls: Find all functions/methods called by the function at a position\n\nAll operations require:\n- filePath: The file to operate on\n- line: The line number (1-based, as shown in editors)\n- character: The character offset (1-based, as shown in editors)\n\nNote: LSP servers must be configured for the file type. If no server is available, an error will be returned.`\n\nexport const DESCRIPTION = PROMPT\n", "import { Box, Text } from 'ink'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { type Tool } from '#core/tooling/Tool'\nimport { getTheme } from '#core/utils/theme'\nimport { DESCRIPTION, PROMPT } from './prompt'\nimport { OutputLine } from '#tools/tools/system/BashTool/OutputLine'\n\n// Allow any input object since MCP tools define their own schemas\nconst inputSchema = z.object({}).passthrough()\n\nexport const MCPTool = {\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // MCPTool can modify state through MCP calls, not safe for concurrent execution\n },\n // Overridden in mcpClient.ts\n name: 'mcp',\n // Overridden in mcpClient.ts\n async description() {\n return DESCRIPTION\n },\n // Overridden in mcpClient.ts\n async prompt() {\n return PROMPT\n },\n inputSchema,\n // Overridden in mcpClient.ts\n async *call() {\n yield {\n type: 'result',\n data: '',\n resultForAssistant: '',\n }\n },\n needsPermissions() {\n return true\n },\n renderToolUseMessage(input) {\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n },\n // Overridden in mcpClient.ts\n userFacingName: () => 'mcp',\n renderToolResultMessage(output) {\n const verbose = false // Set default value for verbose\n if (Array.isArray(output)) {\n return (\n <Box flexDirection=\"column\">\n {output.map((item, i) => {\n if (item.type === 'image') {\n return (\n <Box\n key={i}\n justifyContent=\"space-between\"\n overflowX=\"hidden\"\n width=\"100%\"\n >\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text>[Image]</Text>\n </Box>\n </Box>\n )\n }\n const lines = item.text.split('\\n').length\n return (\n <OutputLine\n key={i}\n content={item.text}\n lines={lines}\n verbose={verbose}\n />\n )\n })}\n </Box>\n )\n }\n\n if (!output) {\n return (\n <Box justifyContent=\"space-between\" overflowX=\"hidden\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text color={getTheme().secondaryText}>(No content)</Text>\n </Box>\n </Box>\n )\n }\n\n const lines = output.split('\\n').length\n return <OutputLine content={output} lines={lines} verbose={verbose} />\n },\n renderResultForAssistant(content) {\n return content\n },\n} satisfies Tool<typeof inputSchema, string>\n", "// Actual prompt and description are overridden in mcpClient.ts\nexport const PROMPT = ''\nexport const DESCRIPTION = ''\n", "import { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport type { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport { getClients, type WrappedClient } from '#core/mcp/client'\nimport { ReadResourceResultSchema } from '@modelcontextprotocol/sdk/types.js'\nimport { DESCRIPTION, PROMPT, TOOL_NAME } from './prompt'\n\nconst inputSchema = z.strictObject({\n server: z.string().describe('The MCP server name'),\n uri: z.string().describe('The resource URI to read'),\n})\n\ntype Input = z.infer<typeof inputSchema>\n\ntype Output = {\n contents: Array<{\n uri: string\n mimeType?: string\n text?: string\n }>\n}\n\nfunction isWrappedClient(value: unknown): value is WrappedClient {\n if (!value || typeof value !== 'object') return false\n const record = value as Record<string, unknown>\n if (typeof record.name !== 'string') return false\n if (record.type !== 'connected' && record.type !== 'failed') return false\n if (record.type === 'connected') {\n return typeof record.client === 'object' && record.client !== null\n }\n return true\n}\n\nasync function getMcpClients(\n context?: ToolUseContext,\n): Promise<WrappedClient[]> {\n const override = context?.options?.mcpClients\n if (Array.isArray(override) && override.every(isWrappedClient)) {\n return override\n }\n return await getClients()\n}\n\nexport const ReadMcpResourceTool = {\n name: TOOL_NAME,\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'readMcpResource'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n needsPermissions() {\n return false\n },\n async validateInput({ server }: Input, context?: ToolUseContext) {\n const clients = await getMcpClients(context)\n const match = clients.find(c => c.name === server)\n if (!match) {\n return {\n result: false,\n message: `Server \"${server}\" not found. Available servers: ${clients.map(c => c.name).join(', ')}`,\n errorCode: 1,\n }\n }\n if (match.type !== 'connected') {\n return {\n result: false,\n message: `Server \"${server}\" is not connected`,\n errorCode: 2,\n }\n }\n let capabilities = match.capabilities ?? null\n if (!capabilities) {\n try {\n capabilities = match.client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n }\n if (!capabilities?.resources) {\n return {\n result: false,\n message: `Server \"${server}\" does not support resources`,\n errorCode: 3,\n }\n }\n return { result: true }\n },\n renderToolUseMessage({ server, uri }: Input) {\n if (!server || !uri) return null\n return `Read resource \"${uri}\" from server \"${server}\"`\n },\n renderToolResultMessage(output: Output) {\n const count = output.contents?.length ?? 0\n return (\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text bold>Read MCP resource</Text>\n <Text>{count ? ` (${count} part${count === 1 ? '' : 's'})` : ''}</Text>\n </Box>\n )\n },\n renderResultForAssistant(output: Output) {\n return JSON.stringify(output)\n },\n async *call({ server, uri }: Input, context: ToolUseContext) {\n const clients = await getMcpClients(context)\n const match = clients.find(c => c.name === server)\n if (!match) {\n throw new Error(\n `Server \"${server}\" not found. Available servers: ${clients.map(c => c.name).join(', ')}`,\n )\n }\n if (match.type !== 'connected') {\n throw new Error(`Server \"${server}\" is not connected`)\n }\n let capabilities = match.capabilities ?? null\n if (!capabilities) {\n try {\n capabilities = match.client.getServerCapabilities() ?? null\n } catch {\n capabilities = null\n }\n }\n if (!capabilities?.resources) {\n throw new Error(`Server \"${server}\" does not support resources`)\n }\n const result = (await match.client.request(\n { method: 'resources/read', params: { uri } },\n ReadResourceResultSchema,\n )) as Output\n yield {\n type: 'result',\n data: result,\n resultForAssistant: this.renderResultForAssistant(result),\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const TOOL_NAME = 'ReadMcpResourceTool'\n\nexport const DESCRIPTION = `Reads a specific resource from an MCP server.\n- server: The name of the MCP server to read from\n- uri: The URI of the resource to read\n\nUsage examples:\n- Read a resource from a server: \\`readMcpResource({ server: \"myserver\", uri: \"my-resource-uri\" })\\``\n\nexport const PROMPT = `Reads a specific resource from an MCP server, identified by server name and resource URI.\n\nParameters:\n- server (required): The name of the MCP server from which to read the resource\n- uri (required): The URI of the resource to read`\n", "import type { Message as ConversationMessage } from '#core/query'\n\nconst transcripts = new Map<string, ConversationMessage[]>()\n\nexport function saveAgentTranscript(\n agentId: string,\n messages: ConversationMessage[],\n): void {\n transcripts.set(agentId, messages)\n}\n\nexport function getAgentTranscript(\n agentId: string,\n): ConversationMessage[] | undefined {\n return transcripts.get(agentId)\n}\n", "export const TOOL_NAME = 'Task'\n", "import { type Tool } from '#core/tooling/Tool'\nimport { getTools, getReadOnlyTools } from '#tools'\nimport { FileWriteTool } from '#tools/tools/filesystem/FileWriteTool/FileWriteTool'\nimport { GlobTool } from '#tools/tools/filesystem/GlobTool/GlobTool'\nimport { FileReadTool } from '#tools/tools/filesystem/FileReadTool/FileReadTool'\nimport { getActiveAgents } from '#core/utils/agentLoader'\n\nconst SUBAGENT_DISALLOWED_TOOL_NAMES = new Set<string>([\n 'Task',\n 'TaskOutput',\n 'KillShell',\n 'EnterPlanMode',\n 'ExitPlanMode',\n 'AskUserQuestion',\n])\n\nexport async function getTaskTools(safeMode: boolean): Promise<Tool[]> {\n // No recursive tasks, yet..\n return (await (!safeMode ? getTools() : getReadOnlyTools())).filter(\n tool => !SUBAGENT_DISALLOWED_TOOL_NAMES.has(tool.name),\n )\n}\n\nexport async function getPrompt(safeMode: boolean): Promise<string> {\n // Maintain compatibility with `.claude` agent descriptions\n const agents = await getActiveAgents()\n\n // Format exactly as in original: (Tools: tool1, tool2)\n const agentDescriptions = agents\n .map(agent => {\n const toolsStr = Array.isArray(agent.tools) ? agent.tools.join(', ') : '*'\n return `- ${agent.agentType}: ${agent.whenToUse} (Tools: ${toolsStr})`\n })\n .join('\\n')\n\n // Keep the wording aligned so shared `.claude` agent packs behave identically\n return `Launch a new agent to handle complex, multi-step tasks autonomously. \n\nAvailable agent types and the tools they have access to:\n${agentDescriptions}\n\nWhen using the Task tool, you must specify a subagent_type parameter to select which agent type to use.\n\nWhen to use the Agent tool:\n- When you are instructed to execute custom slash commands. Use the Agent tool with the slash command invocation as the entire prompt. The slash command can take arguments. For example: Task(description=\"Check the file\", prompt=\"/check-file path/to/file.py\")\n\nWhen NOT to use the Agent tool:\n- If you want to read a specific file path, use the ${FileReadTool.name} or ${GlobTool.name} tool instead of the Agent tool, to find the match more quickly\n- If you are searching for a specific class definition like \"class Foo\", use the ${GlobTool.name} tool instead, to find the match more quickly\n- If you are searching for code within a specific file or set of 2-3 files, use the ${FileReadTool.name} tool instead of the Agent tool, to find the match more quickly\n- Other tasks that are not related to the agent descriptions above\n\nUsage notes:\n1. Launch multiple agents concurrently whenever possible, to maximize performance; to do that, use a single message with multiple tool uses\n2. When the agent is done, it will return a single message back to you. The result returned by the agent is not visible to the user. To show the user the result, you should send a text message back to the user with a concise summary of the result.\n3. Each agent invocation is stateless. You will not be able to send additional messages to the agent, nor will the agent be able to communicate with you outside of its final report. Therefore, your prompt should contain a highly detailed task description for the agent to perform autonomously and you should specify exactly what information the agent should return back to you in its final and only message to you.\n4. The agent's outputs should generally be trusted\n5. Clearly tell the agent whether you expect it to write code or just to do research (search, file reads, web fetches, etc.), since it is not aware of the user's intent\n6. If the agent description mentions that it should be used proactively, then you should try your best to use it without the user having to ask for it first. Use your judgement.\n\nExample usage:\n\n<example_agent_descriptions>\n\"code-reviewer\": use this agent after you are done writing a signficant piece of code\n\"greeting-responder\": use this agent when to respond to user greetings with a friendly joke\n</example_agent_description>\n\n<example>\nuser: \"Please write a function that checks if a number is prime\"\nassistant: Sure let me write a function that checks if a number is prime\nassistant: First let me use the ${FileWriteTool.name} tool to write a function that checks if a number is prime\nassistant: I'm going to use the ${FileWriteTool.name} tool to write the following code:\n<code>\nfunction isPrime(n) {\n if (n <= 1) return false\n for (let i = 2; i * i <= n; i++) {\n if (n % i === 0) return false\n }\n return true\n}\n</code>\n<commentary>\nSince a signficant piece of code was written and the task was completed, now use the code-reviewer agent to review the code\n</commentary>\nassistant: Now let me use the code-reviewer agent to review the code\nassistant: Uses the Task tool to launch the with the code-reviewer agent \n</example>\n\n<example>\nuser: \"Hello\"\n<commentary>\nSince the user is greeting, use the greeting-responder agent to respond with a friendly joke\n</commentary>\nassistant: \"I'm going to use the Task tool to launch the with the greeting-responder agent\"\n</example>`\n}\n", "import type {\n ToolResultBlockParam,\n ToolUseBlock,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { randomUUID } from 'crypto'\nimport { existsSync, readFileSync } from 'fs'\n\nimport type {\n Message as ConversationMessage,\n AssistantMessage,\n} from '#core/query'\nimport { getMessagesPath } from '#core/utils/log'\nimport { createUserMessage, type FullToolUseResult } from '#core/utils/messages'\n\nconst FORK_CONTEXT_TOOL_RESULT_TEXT = `### FORKING CONVERSATION CONTEXT ###\n### ENTERING SUB-AGENT ROUTINE ###\nEntered sub-agent context\n\nPLEASE NOTE: \n- The messages above this point are from the main thread prior to sub-agent execution. They are provided as context only.\n- Context messages may include tool_use blocks for tools that are not available in the sub-agent context. You should only use the tools specifically provided to you in the system prompt.\n- Only complete the specific sub-agent task you have been assigned below.`\n\ntype ToolUseLikeBlock = ToolUseBlock & {\n type: 'tool_use' | 'server_tool_use' | 'mcp_tool_use'\n}\n\nfunction isToolUseLikeBlock(block: unknown): block is ToolUseLikeBlock {\n if (!block || typeof block !== 'object') return false\n const type = (block as { type?: unknown }).type\n if (\n type !== 'tool_use' &&\n type !== 'server_tool_use' &&\n type !== 'mcp_tool_use'\n ) {\n return false\n }\n const id = (block as { id?: unknown }).id\n return typeof id === 'string' && id.length > 0\n}\n\nfunction isConversationMessage(value: unknown): value is ConversationMessage {\n if (!value || typeof value !== 'object') return false\n const type = (value as { type?: unknown }).type\n return type === 'assistant' || type === 'user' || type === 'progress'\n}\n\nfunction readJsonArrayFile(path: string): unknown[] | null {\n if (!existsSync(path)) return null\n try {\n const raw = readFileSync(path, 'utf8')\n const parsed: unknown = JSON.parse(raw)\n return Array.isArray(parsed) ? parsed : null\n } catch {\n return null\n }\n}\n\nfunction createForkContextToolResult(options: {\n toolUseId: string\n}): ConversationMessage {\n const toolResultBlock: ToolResultBlockParam = {\n type: 'tool_result',\n tool_use_id: options.toolUseId,\n content: FORK_CONTEXT_TOOL_RESULT_TEXT,\n }\n\n const toolUseResult: FullToolUseResult = {\n data: {\n status: 'sub_agent_entered',\n description: 'Entered sub-agent context',\n message: FORK_CONTEXT_TOOL_RESULT_TEXT,\n },\n resultForAssistant: FORK_CONTEXT_TOOL_RESULT_TEXT,\n }\n\n return createUserMessage([toolResultBlock], toolUseResult)\n}\n\nfunction createToolUseOnlyAssistantMessage(options: {\n message: AssistantMessage\n toolUseBlock: ToolUseLikeBlock\n}): AssistantMessage {\n return {\n ...options.message,\n uuid: randomUUID(),\n message: {\n ...options.message.message,\n content: [options.toolUseBlock],\n },\n }\n}\n\nexport function buildForkContextForAgent(options: {\n enabled: boolean\n prompt: string\n toolUseId: string | undefined\n messageLogName: string\n forkNumber: number\n}): {\n forkContextMessages: ConversationMessage[]\n promptMessages: ConversationMessage[]\n} {\n const userPromptMessage = createUserMessage(options.prompt)\n\n if (!options.enabled || !options.toolUseId) {\n return {\n forkContextMessages: [],\n promptMessages: [userPromptMessage],\n }\n }\n\n const mainPath = getMessagesPath(\n options.messageLogName,\n options.forkNumber,\n 0,\n )\n const raw = readJsonArrayFile(mainPath)\n const mainMessages = (raw ?? []).filter(isConversationMessage)\n if (mainMessages.length === 0) {\n return {\n forkContextMessages: [],\n promptMessages: [userPromptMessage],\n }\n }\n\n let toolUseMessageIndex = -1\n let toolUseMessage: AssistantMessage | null = null\n let taskToolUseBlock: ToolUseLikeBlock | null = null\n\n for (let i = 0; i < mainMessages.length; i++) {\n const msg = mainMessages[i]\n if (msg.type !== 'assistant') continue\n const blocks: unknown[] = Array.isArray(msg.message?.content)\n ? (msg.message.content as unknown[])\n : []\n const match = blocks.find(\n (b): b is ToolUseLikeBlock =>\n isToolUseLikeBlock(b) && b.id === options.toolUseId,\n )\n if (!match) continue\n toolUseMessageIndex = i\n toolUseMessage = msg\n taskToolUseBlock = match\n break\n }\n\n if (toolUseMessageIndex === -1 || !toolUseMessage || !taskToolUseBlock) {\n return {\n forkContextMessages: [],\n promptMessages: [userPromptMessage],\n }\n }\n\n const forkContextMessages = mainMessages.slice(0, toolUseMessageIndex) ?? []\n\n const toolUseOnlyAssistant = createToolUseOnlyAssistantMessage({\n message: toolUseMessage,\n toolUseBlock: taskToolUseBlock,\n })\n const forkContextToolResult = createForkContextToolResult({\n toolUseId: taskToolUseBlock.id,\n })\n\n return {\n forkContextMessages,\n promptMessages: [\n toolUseOnlyAssistant,\n forkContextToolResult,\n userPromptMessage,\n ],\n }\n}\n", "import type { TaskModel } from './schema'\n\nexport type ModelPointer = 'quick' | 'task' | 'main'\n\nexport function modelEnumToPointer(\n model?: TaskModel,\n): ModelPointer | undefined {\n if (!model) return undefined\n switch (model) {\n case 'haiku':\n return 'quick'\n case 'sonnet':\n return 'task'\n case 'opus':\n return 'main'\n }\n}\n\nexport function normalizeAgentModelName(\n model?: string,\n): string | 'inherit' | ModelPointer | undefined {\n if (!model) return undefined\n if (model === 'inherit') return 'inherit'\n if (model === 'haiku' || model === 'sonnet' || model === 'opus') {\n return modelEnumToPointer(model)\n }\n return model\n}\n", "export function getToolNameFromSpec(spec: string): string {\n const trimmed = spec.trim()\n if (!trimmed) return trimmed\n const match = trimmed.match(/^([^(]+)\\(([^)]+)\\)$/)\n if (!match) return trimmed\n const toolName = match[1]?.trim()\n const ruleContent = match[2]?.trim()\n if (!toolName || !ruleContent) return trimmed\n return toolName\n}\n", "import type { PermissionMode } from '#core/types/PermissionMode'\nimport type { ToolPermissionContext } from '#core/types/toolPermissionContext'\nimport type { AgentPermissionMode } from '#core/utils/agentLoader'\n\nexport function normalizeAgentPermissionMode(\n mode: AgentPermissionMode | undefined,\n): PermissionMode | undefined {\n if (!mode) return undefined\n if (mode === 'delegate') return 'default'\n if (\n mode === 'default' ||\n mode === 'acceptEdits' ||\n mode === 'plan' ||\n mode === 'bypassPermissions' ||\n mode === 'dontAsk'\n ) {\n return mode\n }\n return undefined\n}\n\nexport function applyAgentPermissionMode(\n base: ToolPermissionContext | undefined,\n options: {\n agentPermissionMode: PermissionMode | undefined\n safeMode: boolean\n },\n): ToolPermissionContext | undefined {\n if (!base) return base\n if (!options.agentPermissionMode) return base\n\n if (\n options.agentPermissionMode === 'bypassPermissions' &&\n (options.safeMode || base.isBypassPermissionsModeAvailable !== true)\n ) {\n return { ...base, mode: 'default' }\n }\n\n return { ...base, mode: options.agentPermissionMode }\n}\n", "import { last } from 'lodash-es'\n\nimport type { TextBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport type { Message as ConversationMessage } from '#core/query'\nimport {\n getLastAssistantMessageId,\n createAssistantMessage,\n} from '#core/utils/messages'\nimport {\n upsertBackgroundAgentTask,\n type BackgroundAgentTaskRuntime,\n} from '#core/utils/backgroundTasks'\nimport { saveAgentTranscript } from '#core/utils/agentTranscripts'\nimport { hasPermissionsToUseTool } from '#core/permissions'\n\nimport type { PreparedTaskToolRun } from './callTypes'\nimport type { Input, Output } from './schema'\nimport { asyncLaunchMessage } from './assistantText'\n\nfunction isTextBlock(block: unknown): block is TextBlock {\n return (\n Boolean(block) &&\n typeof block === 'object' &&\n (block as { type?: unknown }).type === 'text' &&\n typeof (block as { text?: unknown }).text === 'string'\n )\n}\n\nexport async function* callTaskToolBackground(\n input: Input,\n prepared: PreparedTaskToolRun,\n): AsyncGenerator<{\n type: 'result'\n data: Output\n resultForAssistant: string\n}> {\n const bgAbortController = new AbortController()\n\n const taskRecord: BackgroundAgentTaskRuntime = {\n type: 'async_agent',\n agentId: prepared.agentId,\n description: input.description,\n prompt: prepared.effectivePrompt,\n status: 'running',\n startedAt: Date.now(),\n messages: [...prepared.transcriptMessages],\n abortController: bgAbortController,\n done: Promise.resolve(),\n }\n\n taskRecord.done = (async () => {\n try {\n const bgMessages: ConversationMessage[] = [...prepared.messagesForQuery]\n const bgTranscriptMessages: ConversationMessage[] = [\n ...prepared.transcriptMessages,\n ]\n\n for await (const msg of prepared.queryFn(\n bgMessages,\n prepared.systemPrompt,\n prepared.context,\n hasPermissionsToUseTool,\n {\n abortController: bgAbortController,\n options: prepared.queryOptions,\n messageId: getLastAssistantMessageId(bgMessages),\n agentId: prepared.agentId,\n readFileTimestamps: prepared.readFileTimestamps,\n setToolJSX: () => {},\n },\n )) {\n bgMessages.push(msg)\n bgTranscriptMessages.push(msg)\n taskRecord.messages = [...bgTranscriptMessages]\n upsertBackgroundAgentTask(taskRecord)\n }\n\n const lastAssistant = last(\n bgTranscriptMessages.filter(m => m.type === 'assistant'),\n )\n const content =\n lastAssistant?.type === 'assistant'\n ? lastAssistant.message.content.filter(isTextBlock)\n : []\n\n taskRecord.status = 'completed'\n taskRecord.completedAt = Date.now()\n taskRecord.resultText = content.map(b => b.text).join('\\n')\n taskRecord.messages = [...bgTranscriptMessages]\n upsertBackgroundAgentTask(taskRecord)\n saveAgentTranscript(prepared.agentId, bgTranscriptMessages)\n } catch (e) {\n taskRecord.status = 'failed'\n taskRecord.completedAt = Date.now()\n taskRecord.error = e instanceof Error ? e.message : String(e)\n upsertBackgroundAgentTask(taskRecord)\n }\n })()\n\n upsertBackgroundAgentTask(taskRecord)\n\n const output: Output = {\n status: 'async_launched',\n agentId: prepared.agentId,\n description: input.description,\n prompt: prepared.effectivePrompt,\n }\n\n yield {\n type: 'result',\n data: output,\n resultForAssistant: asyncLaunchMessage(prepared.agentId),\n }\n}\n", "export function asyncLaunchMessage(agentId: string): string {\n const toolName = 'TaskOutput'\n return `Async agent launched successfully.\nagentId: ${agentId} (This is an internal ID for your use, do not mention it to the user. Use this ID to retrieve results with ${toolName} when the agent finishes). \nThe agent is currently working in the background. If you have other tasks you you should continue working on them now. Wait to call ${toolName} until either:\n- If you want to check on the agent's progress - call ${toolName} with block=false to get an immediate update on the agent's status\n- If you run out of things to do and the agent is still running - call ${toolName} with block=true to idle and wait for the agent's result (do not use block=true unless you completely run out of things to do as it will waste time).`\n}\n", "import { last, memoize } from 'lodash-es'\n\nimport type { TextBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport type { Message as ConversationMessage } from '#core/query'\nimport { hasPermissionsToUseTool } from '#core/permissions'\nimport { countTokens } from '#core/utils/tokens'\nimport {\n getMessagesPath,\n getNextAvailableLogSidechainNumber,\n overwriteLog,\n} from '#core/utils/log'\nimport {\n createAssistantMessage,\n getLastAssistantMessageId,\n} from '#core/utils/messages'\n\nimport type { PreparedTaskToolRun } from './callTypes'\nimport type { Input, Output } from './schema'\n\nfunction isTextBlock(block: unknown): block is TextBlock {\n return (\n Boolean(block) &&\n typeof block === 'object' &&\n (block as { type?: unknown }).type === 'text' &&\n typeof (block as { text?: unknown }).text === 'string'\n )\n}\n\ntype ToolUseLikeBlock = {\n type: 'tool_use' | 'server_tool_use' | 'mcp_tool_use'\n name: string\n input?: unknown\n}\n\nfunction isToolUseLikeBlock(block: unknown): block is ToolUseLikeBlock {\n if (!block || typeof block !== 'object') return false\n const type = (block as { type?: unknown }).type\n if (\n type !== 'tool_use' &&\n type !== 'server_tool_use' &&\n type !== 'mcp_tool_use'\n ) {\n return false\n }\n const name = (block as { name?: unknown }).name\n return typeof name === 'string'\n}\n\nfunction truncate(text: string, maxLen: number): string {\n const normalized = text.replace(/\\\\s+/g, ' ').trim()\n if (normalized.length <= maxLen) return normalized\n return `${normalized.slice(0, maxLen - 1)}\u2026`\n}\n\nfunction summarizeToolUse(name: string, rawInput: unknown): string {\n const input =\n rawInput && typeof rawInput === 'object'\n ? (rawInput as Record<string, unknown>)\n : {}\n switch (name) {\n case 'Read': {\n const filePath =\n (typeof input.file_path === 'string' && input.file_path) ||\n (typeof input.path === 'string' && input.path) ||\n ''\n return filePath ? `Read ${filePath}` : 'Read'\n }\n case 'Write': {\n const filePath =\n (typeof input.file_path === 'string' && input.file_path) ||\n (typeof input.path === 'string' && input.path) ||\n ''\n return filePath ? `Write ${filePath}` : 'Write'\n }\n case 'Edit':\n case 'MultiEdit': {\n const filePath =\n (typeof input.file_path === 'string' && input.file_path) ||\n (typeof input.path === 'string' && input.path) ||\n ''\n return filePath ? `${name} ${filePath}` : name\n }\n case 'Grep': {\n const pattern = typeof input.pattern === 'string' ? input.pattern : ''\n return pattern ? `Grep ${truncate(pattern, 80)}` : 'Grep'\n }\n case 'Glob': {\n const pattern =\n (typeof input.pattern === 'string' && input.pattern) ||\n (typeof input.glob === 'string' && input.glob) ||\n ''\n return pattern ? `Glob ${truncate(pattern, 80)}` : 'Glob'\n }\n case 'Bash': {\n const command = typeof input.command === 'string' ? input.command : ''\n return command ? `Bash ${truncate(command, 80)}` : 'Bash'\n }\n case 'WebFetch':\n case 'WebSearch': {\n const url = typeof input.url === 'string' ? input.url : ''\n const query = typeof input.query === 'string' ? input.query : ''\n if (url) return `${name} ${truncate(url, 100)}`\n if (query) return `${name} ${truncate(query, 100)}`\n return name\n }\n default:\n return name\n }\n}\n\nexport async function* callTaskToolForeground(\n input: Input,\n prepared: PreparedTaskToolRun,\n): AsyncGenerator<\n | { type: 'progress'; content: ConversationMessage }\n | { type: 'result'; data: Output; resultForAssistant: TextBlock[] }\n> {\n const getSidechainNumber = memoize(() =>\n getNextAvailableLogSidechainNumber(\n prepared.messageLogName,\n prepared.forkNumber,\n ),\n )\n\n const PROGRESS_THROTTLE_MS = 200\n const MAX_RECENT_ACTIONS = 6\n let lastProgressEmitAt = 0\n let lastEmittedToolUseCount = 0\n const recentActions: string[] = []\n\n const addRecentAction = (action: string) => {\n const trimmed = action.trim()\n if (!trimmed) return\n recentActions.push(trimmed)\n if (recentActions.length > MAX_RECENT_ACTIONS) {\n recentActions.splice(0, recentActions.length - MAX_RECENT_ACTIONS)\n }\n }\n\n const renderProgressText = (toolUseCount: number): string => {\n const header = `${input.description || 'Task'}\u2026 (${toolUseCount} tool${toolUseCount === 1 ? '' : 's'})`\n if (recentActions.length === 0) return header\n const lines = recentActions.map(a => `- ${a}`)\n return [header, ...lines].join('\\\\n')\n }\n\n yield {\n type: 'progress',\n content: createAssistantMessage(\n `<tool-progress>${renderProgressText(0)}</tool-progress>`,\n ),\n }\n lastProgressEmitAt = Date.now()\n\n let toolUseCount = 0\n for await (const message of prepared.queryFn(\n prepared.messagesForQuery,\n prepared.systemPrompt,\n prepared.context,\n hasPermissionsToUseTool,\n {\n abortController: prepared.abortController,\n options: prepared.queryOptions,\n messageId: getLastAssistantMessageId(prepared.messagesForQuery),\n agentId: prepared.agentId,\n readFileTimestamps: prepared.readFileTimestamps,\n setToolJSX: () => {},\n },\n )) {\n prepared.messagesForQuery.push(message)\n prepared.transcriptMessages.push(message)\n\n overwriteLog(\n getMessagesPath(\n prepared.messageLogName,\n prepared.forkNumber,\n getSidechainNumber(),\n ),\n prepared.transcriptMessages.filter(m => m.type !== 'progress'),\n { conversationKey: `${prepared.messageLogName}:${prepared.forkNumber}` },\n )\n\n if (message.type === 'assistant') {\n for (const block of message.message.content) {\n if (!isToolUseLikeBlock(block)) continue\n toolUseCount += 1\n addRecentAction(summarizeToolUse(block.name, block.input))\n }\n }\n\n const now = Date.now()\n const hasNewToolUses = toolUseCount > lastEmittedToolUseCount\n const shouldEmit =\n hasNewToolUses &&\n (lastEmittedToolUseCount === 0 ||\n now - lastProgressEmitAt >= PROGRESS_THROTTLE_MS)\n if (shouldEmit) {\n yield {\n type: 'progress',\n content: createAssistantMessage(\n `<tool-progress>${renderProgressText(toolUseCount)}</tool-progress>`,\n ),\n }\n lastEmittedToolUseCount = toolUseCount\n lastProgressEmitAt = now\n }\n }\n\n const lastAssistant = last(\n prepared.transcriptMessages.filter(m => m.type === 'assistant'),\n )\n if (!lastAssistant || lastAssistant.type !== 'assistant') {\n throw new Error('No assistant messages found')\n }\n\n const content = lastAssistant.message.content.filter(isTextBlock)\n\n const totalDurationMs = Date.now() - prepared.startTime\n const totalTokens = countTokens(prepared.transcriptMessages)\n const usage = lastAssistant.message.usage\n\n const output: Output = {\n status: 'completed',\n agentId: prepared.agentId,\n prompt: prepared.effectivePrompt,\n content,\n totalToolUseCount: toolUseCount,\n totalDurationMs,\n totalTokens,\n usage,\n }\n const agentIdBlock: TextBlock = {\n type: 'text',\n text: `agentId: ${prepared.agentId} (for resuming to continue this agent's work if needed)`,\n citations: [],\n }\n\n yield {\n type: 'result',\n data: output,\n resultForAssistant: [...content, agentIdBlock],\n }\n}\n", "import { getAgentPrompt } from '#core/constants/prompts'\nimport { getContext } from '#core/context'\nimport { query } from '#core/query'\nimport type { ToolUseContext } from '#core/tooling/Tool'\nimport { getAvailableAgentTypes, getAgentByType } from '#core/utils/agentLoader'\nimport { generateAgentId } from '#core/utils/agentStorage'\nimport {\n getAgentTranscript,\n saveAgentTranscript,\n} from '#core/utils/agentTranscripts'\nimport { getMaxThinkingTokens } from '#core/utils/thinking'\n\nimport { getTaskTools } from './prompt'\nimport { buildForkContextForAgent } from './forkContext'\nimport { normalizeAgentModelName, modelEnumToPointer } from './models'\nimport { getToolNameFromSpec } from './toolSpec'\nimport {\n applyAgentPermissionMode,\n normalizeAgentPermissionMode,\n} from './permissions'\nimport { callTaskToolBackground } from './callBackground'\nimport { callTaskToolForeground } from './callForeground'\nimport type { Input, Output } from './schema'\nimport type {\n PreparedTaskToolRun,\n QueryFn,\n TaskToolQueryOptions,\n} from './callTypes'\n\ntype TaskToolUseContext = ToolUseContext & {\n __testQuery?: QueryFn\n}\n\nexport async function* callTaskTool(\n input: Input,\n toolUseContext: TaskToolUseContext,\n): AsyncGenerator<\n | {\n type: 'progress'\n content: any\n normalizedMessages?: any[]\n tools?: any[]\n }\n | {\n type: 'result'\n data: Output\n resultForAssistant?: string | any[]\n newMessages?: unknown[]\n contextModifier?: {\n modifyContext: (ctx: ToolUseContext) => ToolUseContext\n }\n },\n void,\n unknown\n> {\n const startTime = Date.now()\n const options = toolUseContext.options ?? {}\n const safeMode = options.safeMode ?? false\n const forkNumber = options.forkNumber ?? 0\n const messageLogName = options.messageLogName ?? 'default'\n const verbose = options.verbose ?? false\n const parentModel = options.model\n\n const queryFn: QueryFn =\n typeof toolUseContext.__testQuery === 'function'\n ? toolUseContext.__testQuery\n : query\n\n const agentConfig = await getAgentByType(input.subagent_type)\n if (!agentConfig) {\n const available = await getAvailableAgentTypes()\n throw new Error(\n `Agent type '${input.subagent_type}' not found. Available agents: ${available.join(', ')}`,\n )\n }\n\n const effectivePrompt = input.prompt\n\n const normalizedAgentModel = normalizeAgentModelName(agentConfig.model)\n const defaultSubagentModel = 'task'\n const envSubagentModel =\n process.env.KODE_SUBAGENT_MODEL ?? process.env.CLAUDE_CODE_SUBAGENT_MODEL\n const modelToUse: string =\n (typeof envSubagentModel === 'string' && envSubagentModel.trim()\n ? envSubagentModel.trim()\n : undefined) ||\n modelEnumToPointer(input.model) ||\n (normalizedAgentModel === 'inherit'\n ? parentModel || defaultSubagentModel\n : normalizedAgentModel) ||\n defaultSubagentModel\n\n const toolFilter = agentConfig.tools\n let tools = await getTaskTools(safeMode)\n if (toolFilter) {\n const isAllArray =\n Array.isArray(toolFilter) &&\n toolFilter.length === 1 &&\n toolFilter[0] === '*'\n if (toolFilter === '*' || isAllArray) {\n // Keep all tools\n } else if (Array.isArray(toolFilter)) {\n const allowedToolNames = new Set(\n toolFilter.map(getToolNameFromSpec).filter(Boolean),\n )\n tools = tools.filter(t => allowedToolNames.has(t.name))\n }\n }\n\n const disallowedTools = Array.isArray(agentConfig.disallowedTools)\n ? agentConfig.disallowedTools\n : []\n if (disallowedTools.length > 0) {\n const disallowedToolNames = new Set(\n disallowedTools.map(getToolNameFromSpec).filter(Boolean),\n )\n tools = tools.filter(t => !disallowedToolNames.has(t.name))\n }\n\n const agentId = input.resume || generateAgentId()\n const baseTranscript = input.resume\n ? (getAgentTranscript(input.resume)?.filter(m => m.type !== 'progress') ??\n null)\n : []\n if (input.resume && baseTranscript === null) {\n throw new Error(`No transcript found for agent ID: ${input.resume}`)\n }\n\n const { forkContextMessages, promptMessages } = buildForkContextForAgent({\n enabled: agentConfig.forkContext === true,\n prompt: effectivePrompt,\n toolUseId: toolUseContext.toolUseId,\n messageLogName,\n forkNumber,\n })\n\n const transcriptMessages = [...(baseTranscript || []), ...promptMessages]\n const messagesForQuery = [...forkContextMessages, ...transcriptMessages]\n\n const [baseSystemPrompt, context, maxThinkingTokens] = await Promise.all([\n getAgentPrompt(),\n getContext(),\n getMaxThinkingTokens(messagesForQuery),\n ])\n const systemPrompt =\n agentConfig.systemPrompt && agentConfig.systemPrompt.length > 0\n ? [...baseSystemPrompt, agentConfig.systemPrompt]\n : baseSystemPrompt\n\n const agentPermissionMode = normalizeAgentPermissionMode(\n agentConfig.permissionMode,\n )\n const toolPermissionContext = applyAgentPermissionMode(\n options.toolPermissionContext,\n {\n agentPermissionMode,\n safeMode,\n },\n )\n\n const queryOptions: TaskToolQueryOptions = {\n safeMode,\n forkNumber,\n messageLogName,\n tools,\n commands: [],\n verbose,\n permissionMode: 'dontAsk',\n toolPermissionContext,\n maxThinkingTokens,\n model: modelToUse,\n mcpClients: options.mcpClients,\n }\n\n const prepared: PreparedTaskToolRun = {\n queryFn,\n agentId,\n effectivePrompt,\n systemPrompt,\n context,\n messagesForQuery,\n transcriptMessages,\n queryOptions,\n messageLogName,\n forkNumber,\n abortController: toolUseContext.abortController,\n readFileTimestamps: toolUseContext.readFileTimestamps,\n startTime,\n }\n\n if (input.run_in_background) {\n yield* callTaskToolBackground(input, prepared)\n return\n }\n\n for await (const chunk of callTaskToolForeground(input, prepared)) {\n if (chunk.type === 'result') {\n saveAgentTranscript(prepared.agentId, prepared.transcriptMessages)\n }\n yield chunk\n }\n}\n", "import type { TextBlock } from '@anthropic-ai/sdk/resources/index.mjs'\nimport { z } from 'zod'\n\nexport const inputSchema = z.object({\n description: z\n .string()\n .describe('A short (3-5 word) description of the task'),\n prompt: z.string().describe('The task for the agent to perform'),\n subagent_type: z\n .string()\n .describe('The type of specialized agent to use for this task'),\n model: z\n .enum(['sonnet', 'opus', 'haiku'])\n .optional()\n .describe(\n 'Optional model to use for this agent. If not specified, inherits from parent. Prefer haiku for quick, straightforward tasks to minimize cost and latency.',\n ),\n resume: z\n .string()\n .optional()\n .describe(\n 'Optional agent ID to resume from. If provided, the agent will continue from the previous execution transcript.',\n ),\n run_in_background: z\n .boolean()\n .optional()\n .describe(\n 'Set to true to run this agent in the background. Use TaskOutput to read the output later.',\n ),\n})\n\nexport type Input = z.infer<typeof inputSchema>\nexport type TaskModel = NonNullable<Input['model']>\n\nexport type Output =\n | {\n status: 'async_launched'\n agentId: string\n description: string\n prompt: string\n }\n | {\n status: 'completed'\n agentId: string\n prompt: string\n content: TextBlock[]\n totalToolUseCount: number\n totalDurationMs: number\n totalTokens: number\n usage: unknown\n }\n", "import type { TextBlock } from '@anthropic-ai/sdk/resources/index.mjs'\nimport React from 'react'\nimport { Box, Text } from 'ink'\n\nimport { formatDuration, formatNumber } from '#core/utils/format'\nimport { getTheme } from '#core/utils/theme'\nimport { maybeTruncateVerboseToolOutput } from '#core/utils/toolOutputDisplay'\n\nimport type { Input, Output } from './schema'\nimport { asyncLaunchMessage } from './assistantText'\n\nexport function renderTaskToolUseMessage(input: Input): string {\n if (!input.description || !input.prompt) return ''\n return input.description\n}\n\nexport function renderTaskToolResultMessage(\n output: Output,\n options: { verbose: boolean },\n): React.ReactElement {\n const theme = getTheme()\n if (output.status === 'async_launched') {\n const hint = output.prompt\n ? ' (down arrow \u2193 to manage \u00B7 ctrl+o to expand)'\n : ' (down arrow \u2193 to manage)'\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text>\n Backgrounded agent\n {!options.verbose && <Text dimColor>{hint}</Text>}\n </Text>\n </Box>\n {options.verbose && output.prompt && (\n <Box\n paddingLeft={2}\n borderStyle=\"single\"\n borderLeft\n borderTop={false}\n borderRight={false}\n borderBottom={false}\n borderLeftColor={theme.secondaryBorder}\n >\n <Text color={theme.secondaryText} wrap=\"wrap\">\n {output.prompt}\n </Text>\n </Box>\n )}\n </Box>\n )\n }\n\n const summary = [\n output.totalToolUseCount === 1\n ? '1 tool use'\n : `${output.totalToolUseCount} tool uses`,\n `${formatNumber(output.totalTokens)} tokens`,\n formatDuration(output.totalDurationMs),\n ]\n return (\n <Box flexDirection=\"column\">\n {options.verbose && output.prompt && (\n <Box\n paddingLeft={2}\n borderStyle=\"single\"\n borderLeft\n borderTop={false}\n borderRight={false}\n borderBottom={false}\n borderLeftColor={theme.secondaryBorder}\n >\n <Text color={theme.secondaryText} wrap=\"wrap\">\n {\n maybeTruncateVerboseToolOutput(output.prompt, {\n maxLines: 120,\n maxChars: 20_000,\n }).text\n }\n </Text>\n </Box>\n )}\n {options.verbose && output.content.length > 0 && (\n <Box\n paddingLeft={2}\n borderStyle=\"single\"\n borderLeft\n borderTop={false}\n borderRight={false}\n borderBottom={false}\n borderLeftColor={theme.secondaryBorder}\n >\n <Text wrap=\"wrap\">\n {\n maybeTruncateVerboseToolOutput(\n output.content.map(b => b.text).join('\\n'),\n { maxLines: 200, maxChars: 40_000 },\n ).text\n }\n </Text>\n </Box>\n )}\n <Box flexDirection=\"row\">\n <Text> \u23BF </Text>\n <Text dimColor>Done ({summary.join(' \u00B7 ')})</Text>\n </Box>\n </Box>\n )\n}\n\nexport function renderTaskToolResultForAssistant(output: Output): string {\n if (output.status === 'async_launched')\n return asyncLaunchMessage(output.agentId)\n return output.content.map(b => b.text).join('\\n')\n}\n\nexport function buildAgentIdBlock(agentId: string): TextBlock {\n return {\n type: 'text',\n text: `agentId: ${agentId} (for resuming to continue this agent's work if needed)`,\n citations: [],\n }\n}\n", "import type { Tool } from '#core/tooling/Tool'\nimport { getAvailableAgentTypes } from '#core/utils/agentLoader'\nimport { getAgentTranscript } from '#core/utils/agentTranscripts'\n\nimport { TOOL_NAME } from './constants'\nimport { getPrompt } from './prompt'\nimport { callTaskTool } from './call'\nimport { inputSchema, type Input, type Output } from './schema'\nimport {\n renderTaskToolResultForAssistant,\n renderTaskToolResultMessage,\n renderTaskToolUseMessage,\n} from './render'\n\nexport const TaskTool = {\n name: TOOL_NAME,\n inputSchema,\n async description() {\n return 'Launch a new task'\n },\n async prompt({ safeMode }: { safeMode?: boolean }) {\n return await getPrompt(safeMode)\n },\n userFacingName(input?: Partial<Input>) {\n if (input?.subagent_type && input.subagent_type !== 'general-purpose') {\n return input.subagent_type\n }\n return 'Task'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true\n },\n needsPermissions() {\n return false\n },\n async validateInput(input: Input) {\n if (!input.description || typeof input.description !== 'string') {\n return {\n result: false,\n message: 'Description is required and must be a string',\n }\n }\n if (!input.prompt || typeof input.prompt !== 'string') {\n return {\n result: false,\n message: 'Prompt is required and must be a string',\n }\n }\n\n const availableTypes = await getAvailableAgentTypes()\n if (!availableTypes.includes(input.subagent_type)) {\n return {\n result: false,\n message: `Agent type '${input.subagent_type}' not found. Available agents: ${availableTypes.join(', ')}`,\n meta: { subagent_type: input.subagent_type, availableTypes },\n }\n }\n\n if (input.resume) {\n const transcript = getAgentTranscript(input.resume)\n if (!transcript) {\n return {\n result: false,\n message: `No transcript found for agent ID: ${input.resume}`,\n meta: { resume: input.resume },\n }\n }\n }\n\n return { result: true }\n },\n renderToolUseMessage: renderTaskToolUseMessage,\n renderToolResultMessage: renderTaskToolResultMessage,\n renderResultForAssistant: renderTaskToolResultForAssistant,\n call: callTaskTool,\n} satisfies Tool<typeof inputSchema, Output>\n", "import { randomUUID } from 'crypto'\nimport { z } from 'zod'\nimport { Tool, ValidationResult } from '#core/tooling/Tool'\nimport {\n setTodos,\n getTodos,\n TodoItem as StoredTodoItem,\n} from '#core/utils/todoStorage'\nimport {\n getTodoRenderModel,\n TodoRenderModel,\n} from '#core/utils/todoRenderModel'\nimport { emitReminderEvent } from '#core/services/systemReminder'\nimport { startWatchingTodoFile } from '#core/services/fileFreshness'\nimport { DESCRIPTION, PROMPT } from './prompt'\n\nexport function __getTodoRenderModelForTests(\n todos: StoredTodoItem[],\n): TodoRenderModel {\n return getTodoRenderModel(todos)\n}\n\nconst TodoItemSchema = z.object({\n content: z\n .string()\n .min(1, 'Content cannot be empty')\n .describe('The task description or content'),\n status: z\n .enum(['pending', 'in_progress', 'completed'])\n .describe('Current status of the task'),\n activeForm: z\n .string()\n .min(1, 'Active form cannot be empty')\n .describe('The active form of the task (e.g., \"Writing tests\")'),\n})\n\nconst inputSchema = z.strictObject({\n todos: z.array(TodoItemSchema).describe('The updated todo list'),\n})\n\ntype InputTodo = z.infer<typeof TodoItemSchema>\ntype Output =\n | {\n oldTodos: InputTodo[]\n newTodos: InputTodo[]\n agentId?: string\n }\n | string\n\nfunction validateTodos(todos: InputTodo[]): ValidationResult {\n // Check for multiple in_progress tasks\n const inProgressTasks = todos.filter(todo => todo.status === 'in_progress')\n if (inProgressTasks.length > 1) {\n return {\n result: false,\n errorCode: 2,\n message: 'Only one task can be in_progress at a time',\n meta: { inProgressTasks: inProgressTasks.map(t => t.content) },\n }\n }\n\n // Validate each todo\n for (const todo of todos) {\n if (!todo.content?.trim()) {\n return {\n result: false,\n errorCode: 3,\n message: 'Todo has empty content',\n }\n }\n if (!['pending', 'in_progress', 'completed'].includes(todo.status)) {\n return {\n result: false,\n errorCode: 4,\n message: `Invalid status \"${todo.status}\" for todo \"${todo.content}\"`,\n meta: { invalidStatus: todo.status },\n }\n }\n if (!todo.activeForm?.trim()) {\n return {\n result: false,\n errorCode: 5,\n message: 'Todo has empty activeForm',\n meta: { todoContent: todo.content },\n }\n }\n }\n\n return { result: true }\n}\n\nfunction generateTodoSummary(todos: StoredTodoItem[]): string {\n const stats = {\n total: todos.length,\n pending: todos.filter(t => t.status === 'pending').length,\n inProgress: todos.filter(t => t.status === 'in_progress').length,\n completed: todos.filter(t => t.status === 'completed').length,\n }\n\n // Enhanced summary with statistics\n let summary = `Updated ${stats.total} todo(s)`\n if (stats.total > 0) {\n summary += ` (${stats.pending} pending, ${stats.inProgress} in progress, ${stats.completed} completed)`\n }\n summary += '. Continue tracking your progress with the todo list.'\n\n return summary\n}\n\nexport const TodoWriteTool = {\n name: 'TodoWrite',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return ''\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // TodoWrite modifies state, not safe for concurrent execution\n },\n needsPermissions() {\n return false\n },\n renderResultForAssistant() {\n return 'Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable'\n },\n renderToolUseMessage(input, { verbose }) {\n return null\n },\n renderToolResultMessage(_output: Output, _options: { verbose: boolean }) {\n return null\n },\n async validateInput({ todos }: z.infer<typeof inputSchema>) {\n const validation = validateTodos(todos)\n if (!validation.result) {\n return validation\n }\n return { result: true }\n },\n async *call({ todos }: z.infer<typeof inputSchema>, context) {\n // Get agent ID from context\n const agentId = context?.agentId\n\n // Start watching todo file for this agent if not already watching\n if (agentId) {\n startWatchingTodoFile(agentId)\n }\n\n // Store previous todos for comparison (agent-scoped)\n const previousTodos = getTodos(agentId)\n const oldTodos: InputTodo[] = previousTodos.map(todo => ({\n content: todo.content,\n status: todo.status,\n activeForm: todo.activeForm || todo.content,\n }))\n\n // Default behavior: if all todos are completed, clear the list\n const shouldClear =\n todos.length > 0 && todos.every(todo => todo.status === 'completed')\n\n const reusable = new Map<string, StoredTodoItem[]>()\n for (const todo of previousTodos) {\n const key = `${todo.content}|||${todo.activeForm || todo.content}`\n const list = reusable.get(key) ?? []\n list.push(todo)\n reusable.set(key, list)\n }\n\n const todoItems: StoredTodoItem[] = shouldClear\n ? []\n : todos.map(todo => {\n const key = `${todo.content}|||${todo.activeForm}`\n const list = reusable.get(key)\n const reused = list && list.length > 0 ? list.shift() : undefined\n\n return {\n id: reused?.id ?? randomUUID(),\n content: todo.content,\n status: todo.status,\n activeForm: todo.activeForm,\n priority: reused?.priority ?? 'medium',\n ...(reused?.createdAt ? { createdAt: reused.createdAt } : {}),\n }\n })\n\n try {\n // Update the todos in storage (agent-scoped)\n setTodos(todoItems, agentId)\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error occurred'\n\n emitReminderEvent('todo:error', {\n error: errorMessage,\n timestamp: Date.now(),\n agentId: context?.agentId || 'default',\n context: 'TodoWriteTool.call',\n })\n\n throw error instanceof Error ? error : new Error(errorMessage)\n }\n\n // Emit todo change event for system reminders (optimized - only if todos actually changed)\n const hasChanged =\n JSON.stringify(previousTodos) !== JSON.stringify(todoItems)\n if (hasChanged) {\n emitReminderEvent('todo:changed', {\n previousTodos,\n newTodos: todoItems,\n timestamp: Date.now(),\n agentId: agentId || 'default',\n changeType:\n todoItems.length > previousTodos.length\n ? 'added'\n : todoItems.length < previousTodos.length\n ? 'removed'\n : 'modified',\n })\n }\n\n yield {\n type: 'result',\n data: {\n oldTodos,\n newTodos: todos,\n agentId: agentId || undefined,\n },\n resultForAssistant: this.renderResultForAssistant(),\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const DESCRIPTION =\n 'Update the todo list for the current session. To be used proactively and often to track progress and pending tasks. Make sure that at least one task is in_progress at all times. Always provide both content (imperative) and activeForm (present continuous) for each task.'\n\nexport const PROMPT = `Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user.\nIt also helps the user understand the progress of the task and overall progress of their requests.\n\n## When to Use This Tool\nUse this tool proactively in these scenarios:\n\n1. Complex multi-step tasks - When a task requires 3 or more distinct steps or actions\n2. Non-trivial and complex tasks - Tasks that require careful planning or multiple operations\n3. User explicitly requests todo list - When the user directly asks you to use the todo list\n4. User provides multiple tasks - When users provide a list of things to be done (numbered or comma-separated)\n5. After receiving new instructions - Immediately capture user requirements as todos\n6. When you start working on a task - Mark it as in_progress BEFORE beginning work. Ideally you should only have one todo as in_progress at a time\n7. After completing a task - Mark it as completed and add any new follow-up tasks discovered during implementation\n\n## When NOT to Use This Tool\n\nSkip using this tool when:\n1. There is only a single, straightforward task\n2. The task is trivial and tracking it provides no organizational benefit\n3. The task can be completed in less than 3 trivial steps\n4. The task is purely conversational or informational\n\nNOTE that you should not use this tool if there is only one trivial task to do. In this case you are better off just doing the task directly.\n\n## Examples of When to Use the Todo List\n\n<example>\nUser: I want to add a dark mode toggle to the application settings. Make sure you run the tests and build when you're done!\nAssistant: I'll help add a dark mode toggle to your application settings. Let me create a todo list to track this implementation.\n*Creates todo list with the following items:*\n1. Creating dark mode toggle component in Settings page\n2. Adding dark mode state management (context/store)\n3. Implementing CSS-in-JS styles for dark theme\n4. Updating existing components to support theme switching\n5. Running tests and build process, addressing any failures or errors that occur\n*Begins working on the first task*\n\n<reasoning>\nThe assistant used the todo list because:\n1. Adding dark mode is a multi-step feature requiring UI, state management, and styling changes\n2. The user explicitly requested tests and build be run afterward\n3. The assistant inferred that tests and build need to pass by adding \"Ensure tests and build succeed\" as the final task\n</reasoning>\n</example>\n\n<example>\nUser: Help me rename the function getCwd to getCurrentWorkingDirectory across my project\nAssistant: Let me first search through your codebase to find all occurrences of 'getCwd'.\n*Uses grep or search tools to locate all instances of getCwd in the codebase*\nAssistant: I've found 15 instances of 'getCwd' across 8 different files. Let me create a todo list to track these changes.\n*Creates todo list with specific items for each file that needs updating*\n\n<reasoning>\nThe assistant used the todo list because:\n1. First, the assistant searched to understand the scope of the task\n2. Upon finding multiple occurrences across different files, it determined this was a complex task with multiple steps\n3. The todo list helps ensure every instance is tracked and updated systematically\n4. This approach prevents missing any occurrences and maintains code consistency\n</reasoning>\n</example>\n\n\n<example>\nUser: I need to implement these features for my e-commerce site: user registration, product catalog, shopping cart, and checkout flow.\nAssistant: I'll help implement these features. First, let's add all the features to the todo list.\n*Creates a todo list breaking down each feature into specific tasks based on the project architecture*\nAssistant: Let's start with user registration. This will involve creating database models, API endpoints, and frontend forms that integrate with your existing authentication system.\n\n<reasoning>\nThe assistant used the todo list because:\n1. The user provided multiple complex features to implement in a comma separated list\n2. The todo list helps organize these large features into manageable tasks\n3. This approach allows for tracking progress across the entire implementation\n</reasoning>\n</example>\n\n<example>\nUser: Can you help optimize my React application? It's rendering slowly and has performance issues.</user>\nAssistant: I'll help optimize your React application. First, let me examine your codebase to identify potential performance bottlenecks.\n*Reviews component structure, render patterns, state management, and data fetching*\nAssistant: After analyzing your codebase, I've identified several performance issues. Let me create a todo list to track our optimization efforts.\n*Creates todo list with items like: 1) Implementing memoization for expensive calculations in ProductList, 2) Adding virtualization for long lists in Dashboard, 3) Optimizing image loading in Gallery component, 4) Fixing state update loops in ShoppingCart, 5) Reviewing bundle size and implementing code splitting*\nLet's start by implementing memoization for the expensive calculations in your ProductList component.</assistant>\n\n<reasoning>\nThe assistant used the todo list because:\n1. First, the assistant examined the codebase to identify specific performance issues\n2. Based on this analysis, it identified multiple optimization opportunities\n3. Performance optimization is a non-trivial task requiring multiple steps\n4. The todo list helps methodically track improvements across different components\n5. This systematic approach ensures all performance bottlenecks are addressed\n</reasoning>\n</example>\n\n## Examples of When NOT to Use the Todo List\n\n<example>\nUser: How do I print 'Hello World' in Python?\nAssistant: In Python, you can print \"Hello World\" with this simple code:\n\npython\nprint(\"Hello World\")\n\nThis will output the text \"Hello World\" to the console when executed.</assistant>\n\n<reasoning>\nThe assistant did not use the todo list because this is a single, trivial task that can be completed in one step. There's no need to track multiple tasks or steps for such a straightforward request.\n</reasoning>\n</example>\n\n<example>\nUser: What does the git status command do?\nAssistant: The git status command shows the current state of your working directory and staging area. It displays which changes have been staged, which haven't, and which files aren't being tracked by Git. This is a fundamental command for understanding the current state of your repository before making commits.\n\n<reasoning>\nThe assistant did not use the todo list because this is an informational request with no actual coding task to complete. The user is simply asking for an explanation, not for the assistant to perform multiple steps or tasks.\n</reasoning>\n</example>\n\n<example>\nUser: Can you add a comment to the calculateTotal function to explain what it does?\nAssistant: Sure, let me add a comment to the calculateTotal function to explain what it does.\n* Uses the Edit tool to add a comment to the calculateTotal function *\n\n<reasoning>\nThe assistant did not use the todo list because this is a single, straightforward task confined to one location in the code. Adding a comment doesn't require tracking multiple steps or systematic organization.\n</reasoning>\n</example>\n\n<example>\nUser: Run npm install for me and tell me what happens.\nAssistant: I'll run the npm install command for you.\n\n*Executes: npm install*\n\nThe command completed successfully. Here's the output:\n[Output of npm install command]\n\nAll dependencies have been installed according to your package.json file.\n\n<reasoning>\nThe assistant did not use the todo list because this is a single command execution with immediate results. There are no multiple steps to track or organize, making the todo list unnecessary for this straightforward task.\n</reasoning>\n</example>\n\n## Task States and Management\n\n1. **Task States**: Use these states to track progress:\n - pending: Task not yet started\n - in_progress: Currently working on (limit to ONE task at a time)\n - completed: Task finished successfully\n\n **IMPORTANT**: Task descriptions must have two forms:\n - content: The imperative form describing what needs to be done (e.g., \"Run tests\", \"Build the project\")\n - activeForm: The present continuous form shown during execution (e.g., \"Running tests\", \"Building the project\")\n\n2. **Task Management**:\n - Update task status in real-time as you work\n - Mark tasks complete IMMEDIATELY after finishing (don't batch completions)\n - Exactly ONE task must be in_progress at any time (not less, not more)\n - Complete current tasks before starting new ones\n - Remove tasks that are no longer relevant from the list entirely\n\n3. **Task Completion Requirements**:\n - ONLY mark a task as completed when you have FULLY accomplished it\n - If you encounter errors, blockers, or cannot finish, keep the task as in_progress\n - When blocked, create a new task describing what needs to be resolved\n - Never mark a task as completed if:\n - Tests are failing\n - Implementation is partial\n - You encountered unresolved errors\n - You couldn't find necessary files or dependencies\n\n4. **Task Breakdown**:\n - Create specific, actionable items\n - Break complex tasks into smaller, manageable steps\n - Use clear, descriptive task names\n - Always provide both forms:\n - content: \"Fix authentication bug\"\n - activeForm: \"Fixing authentication bug\"\n\nWhen in doubt, use this tool. Being proactive with task management demonstrates attentiveness and ensures you complete all requirements successfully.\n`\n", "import { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport { Tool, ToolUseContext } from '#core/tooling/Tool'\nimport { PROMPT, TOOL_NAME_FOR_PROMPT } from './prompt'\nimport { searchProviders } from './searchProviders'\n\nconst inputSchema = z.strictObject({\n query: z.string().min(2).describe('The search query to use'),\n allowed_domains: z\n .array(z.string())\n .optional()\n .describe('Only include search results from these domains'),\n blocked_domains: z\n .array(z.string())\n .optional()\n .describe('Never include search results from these domains'),\n})\n\ntype Input = z.infer<typeof inputSchema>\n\ntype WebSearchHit = {\n title: string\n url: string\n}\n\ntype WebSearchResultBlock = {\n tool_use_id: string\n content: WebSearchHit[]\n}\n\ntype Output = {\n query: string\n results: Array<WebSearchResultBlock | string>\n durationSeconds: number\n}\n\nfunction hostnameForUrl(url: string): string | null {\n try {\n return new URL(url).hostname\n } catch {\n return null\n }\n}\n\nfunction summarizeResults(results: Output['results']): {\n searchCount: number\n totalResultCount: number\n} {\n let searchCount = 0\n let totalResultCount = 0\n for (const item of results) {\n if (typeof item === 'string') continue\n searchCount += 1\n totalResultCount += item.content.length\n }\n return { searchCount, totalResultCount }\n}\n\nexport const WebSearchTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description(input?: Input) {\n const query = input?.query ?? ''\n return `Requesting web search for: ${query}`\n },\n userFacingName: () => 'Web Search',\n inputSchema,\n isReadOnly: () => true,\n isConcurrencySafe: () => true,\n async isEnabled() {\n return true\n },\n needsPermissions() {\n return true\n },\n async prompt() {\n return PROMPT\n },\n renderToolUseMessage(\n { query, allowed_domains, blocked_domains }: Input,\n { verbose }: { verbose: boolean },\n ) {\n let summary = `\"${query}\"`\n if (verbose) {\n if (allowed_domains && allowed_domains.length > 0) {\n summary += `, only allowing domains: ${allowed_domains.join(', ')}`\n }\n if (blocked_domains && blocked_domains.length > 0) {\n summary += `, blocking domains: ${blocked_domains.join(', ')}`\n }\n }\n return summary\n },\n renderToolResultMessage(output: Output) {\n const { searchCount } = summarizeResults(output.results)\n const duration =\n output.durationSeconds >= 1\n ? `${Math.round(output.durationSeconds)}s`\n : `${Math.round(output.durationSeconds * 1000)}ms`\n return (\n <Box flexDirection=\"row\">\n <Text> \u23BF Did </Text>\n <Text bold>{searchCount} </Text>\n <Text>\n search{searchCount === 1 ? '' : 'es'} in {duration}\n </Text>\n </Box>\n )\n },\n renderResultForAssistant(output: Output) {\n let result = `Web search results for query: \"${output.query}\"\\n\\n`\n for (const item of output.results) {\n if (typeof item === 'string') {\n result += `${item}\\n\\n`\n continue\n }\n if (item.content.length > 0) {\n result += `Links: ${JSON.stringify(item.content)}\\n\\n`\n } else {\n result += `No links found.\\n\\n`\n }\n }\n result +=\n '\\nREMINDER: You MUST include the sources above in your response to the user using markdown hyperlinks.'\n return result.trim()\n },\n async validateInput(input: Input) {\n if (!input.query || !input.query.length) {\n return {\n result: false,\n message: 'Error: Missing query',\n errorCode: 1,\n }\n }\n\n if (input.allowed_domains?.length && input.blocked_domains?.length) {\n return {\n result: false,\n message:\n 'Error: Cannot specify both allowed_domains and blocked_domains in the same request',\n errorCode: 2,\n }\n }\n return { result: true }\n },\n async *call(\n { query, allowed_domains, blocked_domains }: Input,\n {}: ToolUseContext,\n ) {\n const start = Date.now()\n\n try {\n const rawResults = await searchProviders.duckduckgo.search(query)\n\n const allowed = allowed_domains?.map(d => d.toLowerCase()) ?? null\n const blocked = blocked_domains?.map(d => d.toLowerCase()) ?? null\n\n const results = rawResults.filter(result => {\n const host = hostnameForUrl(result.link)?.toLowerCase()\n if (!host) return false\n if (allowed && allowed.length > 0) {\n return allowed.some(\n domain => host === domain || host.endsWith(`.${domain}`),\n )\n }\n if (blocked && blocked.length > 0) {\n return !blocked.some(\n domain => host === domain || host.endsWith(`.${domain}`),\n )\n }\n return true\n })\n\n const hits: WebSearchHit[] = results.map(item => ({\n title: item.title,\n url: item.link,\n }))\n\n const output: Output = {\n query,\n results: [\n {\n tool_use_id: 'duckduckgo',\n content: hits,\n },\n ],\n durationSeconds: (Date.now() - start) / 1000,\n }\n\n yield {\n type: 'result' as const,\n resultForAssistant: this.renderResultForAssistant(output),\n data: output,\n }\n } catch (error: any) {\n const output: Output = {\n query,\n results: [\n `Web search error: ${error instanceof Error ? error.message : String(error)}`,\n ],\n durationSeconds: (Date.now() - start) / 1000,\n }\n yield {\n type: 'result' as const,\n resultForAssistant: this.renderResultForAssistant(output),\n data: output,\n }\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n", "export const TOOL_NAME_FOR_PROMPT = 'WebSearch'\n\nfunction todayISO(): string {\n const now = new Date()\n const year = now.getFullYear()\n const month = String(now.getMonth() + 1).padStart(2, '0')\n const day = String(now.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport const PROMPT = `\n- Allows the assistant to search the web and use the results to inform responses\n- Provides up-to-date information for current events and recent data\n- Returns search result information formatted as search result blocks, including links as markdown hyperlinks\n- Use this tool for accessing information beyond the model's knowledge cutoff\n- Searches are performed automatically within a single API call\n\nCRITICAL REQUIREMENT - You MUST follow this:\n - After answering the user's question, you MUST include a \"Sources:\" section at the end of your response\n - In the Sources section, list all relevant URLs from the search results as markdown hyperlinks: [Title](URL)\n - This is MANDATORY - never skip including sources in your response\n - Example format:\n\n [Your answer here]\n\n Sources:\n - [Source Title 1](https://example.com/1)\n - [Source Title 2](https://example.com/2)\n\nUsage notes:\n - Domain filtering is supported to include or block specific websites\n - Web search is only available in the US\n\nIMPORTANT - Use the correct year in search queries:\n - Today's date is ${todayISO()}. You MUST use this year when searching for recent information, documentation, or current events.\n - Example: If today is 2025-07-15 and the user asks for \"latest React docs\", search for \"React documentation 2025\", NOT \"React documentation 2024\"\n`.trim()\n", "import { parse } from 'node-html-parser'\n\nexport interface SearchResult {\n title: string\n snippet: string\n link: string\n}\n\nexport interface SearchProvider {\n search: (query: string, apiKey?: string) => Promise<SearchResult[]>\n isEnabled: (apiKey?: string) => boolean\n}\n\nconst duckDuckGoSearchProvider: SearchProvider = {\n isEnabled: () => true,\n search: async (query: string): Promise<SearchResult[]> => {\n const response = await fetch(\n `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`,\n {\n headers: {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',\n },\n },\n )\n\n if (!response.ok) {\n throw new Error(\n `DuckDuckGo search failed with status: ${response.status}`,\n )\n }\n\n const html = await response.text()\n const root = parse(html)\n const results: SearchResult[] = []\n\n const resultNodes = root.querySelectorAll('.result.web-result')\n\n for (const node of resultNodes) {\n const titleNode = node.querySelector('.result__a')\n const snippetNode = node.querySelector('.result__snippet')\n\n if (titleNode && snippetNode) {\n const title = titleNode.text\n const link = titleNode.getAttribute('href')\n const snippet = snippetNode.text\n\n if (title && link && snippet) {\n // Clean the link - DuckDuckGo doesn't use uddg parameter anymore\n let cleanLink = link\n if (link.startsWith('https://duckduckgo.com/l/?uddg=')) {\n try {\n const url = new URL(link)\n cleanLink = url.searchParams.get('uddg') || link\n } catch {\n cleanLink = link\n }\n }\n results.push({\n title: title.trim(),\n snippet: snippet.trim(),\n link: cleanLink,\n })\n }\n }\n }\n\n return results\n },\n}\n\nexport const searchProviders = {\n duckduckgo: duckDuckGoSearchProvider,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["memoize", "z", "DESCRIPTION", "PROMPT", "inputSchema", "z", "DESCRIPTION", "PROMPT", "out", "z", "TOOL_NAME_FOR_PROMPT", "DESCRIPTION", "PROMPT", "inputSchema", "z", "TOOL_NAME_FOR_PROMPT", "DESCRIPTION", "PROMPT", "Box", "Text", "React", "z", "DESCRIPTION", "PROMPT", "inputSchema", "z", "DESCRIPTION", "PROMPT", "React", "Box", "Text", "existsSync", "readFileSync", "statSync", "Box", "Text", "React", "z", "Text", "React", "React", "Text", "join", "extname", "extname", "TOOL_NAME_FOR_PROMPT", "PROMPT", "DESCRIPTION", "inputSchema", "z", "TOOL_NAME_FOR_PROMPT", "DESCRIPTION", "PROMPT", "existsSync", "statSync", "readFileSync", "React", "Box", "Text", "Box", "Text", "React", "z", "PROMPT", "DESCRIPTION", "inputSchema", "z", "DESCRIPTION", "PROMPT", "Box", "Text", "lines", "Box", "Text", "React", "z", "TOOL_NAME", "DESCRIPTION", "PROMPT", "inputSchema", "z", "isWrappedClient", "getMcpClients", "TOOL_NAME", "DESCRIPTION", "PROMPT", "React", "Box", "Text", "TOOL_NAME", "randomUUID", "existsSync", "readFileSync", "existsSync", "readFileSync", "randomUUID", "last", "isTextBlock", "isToolUseLikeBlock", "query", "toolUseCount", "last", "z", "inputSchema", "React", "Box", "Text", "React", "Box", "Text", "TOOL_NAME", "inputSchema", "randomUUID", "z", "DESCRIPTION", "PROMPT", "z", "inputSchema", "DESCRIPTION", "PROMPT", "inputSchema", "randomUUID", "Box", "Text", "React", "z", "TOOL_NAME_FOR_PROMPT", "PROMPT", "query", "inputSchema", "z", "TOOL_NAME_FOR_PROMPT", "query", "PROMPT", "React", "Box", "Text", "memoize"]
|
|
7
|
+
}
|