@shareai-lab/kode 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +649 -25
- package/README.zh-CN.md +579 -0
- package/cli-acp.js +3 -17
- package/cli.js +5 -7
- package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
- package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
- package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
- package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
- package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
- package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
- package/dist/{agentsValidate-XP3CFN6F.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
- package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
- package/dist/{ask-3G5H5KD5.js → chunks/ask-D7SOHJ6Z.js} +36 -44
- package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
- package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
- package/dist/{chunk-EH34V7CY.js → chunks/chunk-2JN5MY67.js} +12 -14
- package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
- package/dist/chunks/chunk-2QONJ5MG.js +14 -0
- package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
- package/dist/chunks/chunk-2WEXPKHH.js +903 -0
- package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
- package/dist/{chunk-K2MI4TPB.js → chunks/chunk-3BYE3ME6.js} +717 -792
- package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
- package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
- package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
- package/dist/chunks/chunk-3OEJVB5A.js +906 -0
- package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
- package/dist/chunks/chunk-3TNIOEBO.js +369 -0
- package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
- package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
- package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
- package/dist/{chunk-4GAIJGRH.js → chunks/chunk-4ATBQOFO.js} +107 -55
- package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
- package/dist/chunks/chunk-4CRUCZR4.js +0 -0
- package/dist/{chunk-54DNHKOD.js → chunks/chunk-4EO6SIQY.js} +32 -75
- package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
- package/dist/chunks/chunk-53M46S5I.js +64 -0
- package/dist/chunks/chunk-53M46S5I.js.map +7 -0
- package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
- package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
- package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
- package/dist/{chunk-BHGTA6JQ.js → chunks/chunk-6KRRFSDN.js} +4 -6
- package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
- package/dist/chunks/chunk-6LJNZK4K.js +39 -0
- package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
- package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
- package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
- package/dist/chunks/chunk-77XDJMBP.js +3326 -0
- package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
- package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
- package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
- package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
- package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
- package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
- package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
- package/dist/chunks/chunk-BBJFHTBC.js +28 -0
- package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
- package/dist/chunks/chunk-BHDHXOXB.js +24 -0
- package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
- package/dist/{chunk-OZNRLY3E.js → chunks/chunk-BTA7SZ26.js} +152 -223
- package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
- package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
- package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
- package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
- package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
- package/dist/{chunk-2PMO2FS2.js → chunks/chunk-DQ4JHXMT.js} +462 -424
- package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
- package/dist/chunks/chunk-DXD76CMV.js +208 -0
- package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
- package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
- package/dist/chunks/chunk-GELCZWMB.js +42 -0
- package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
- package/dist/{chunk-NQLEUHMS.js → chunks/chunk-HJYOH4HC.js} +23 -18
- package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
- package/dist/chunks/chunk-HPYNW6TT.js +744 -0
- package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
- package/dist/{chunk-2KWKUXLT.js → chunks/chunk-HRJ3ICQK.js} +59 -55
- package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
- package/dist/{chunk-ZQU3TXLC.js → chunks/chunk-IFCIADS3.js} +571 -573
- package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
- package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
- package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
- package/dist/chunks/chunk-L7P4M4KW.js +193 -0
- package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
- package/dist/chunks/chunk-LB6TCPDI.js +0 -0
- package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
- package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
- package/dist/{chunk-IE2CG2TV.js → chunks/chunk-LOD5ZHCI.js} +213 -208
- package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
- package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
- package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
- package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
- package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
- package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
- package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
- package/dist/chunks/chunk-QHQOBUF6.js +60 -0
- package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
- package/dist/{chunk-SRZZFAS7.js → chunks/chunk-RPJXO7GG.js} +241 -214
- package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
- package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
- package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
- package/dist/chunks/chunk-SZLAPULP.js +28 -0
- package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
- package/dist/{chunk-SDGKPKDK.js → chunks/chunk-T7RB5V5J.js} +23 -25
- package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
- package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
- package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
- package/dist/{chunk-G6I7XROM.js → chunks/chunk-TNGVRTO5.js} +45 -20
- package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
- package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
- package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
- package/dist/chunks/chunk-U2IHWPCU.js +12 -0
- package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
- package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
- package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
- package/dist/{chunk-3TXNP6HH.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
- package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
- package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
- package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
- package/dist/chunks/chunk-W5EGGA44.js +15 -0
- package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
- package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
- package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
- package/dist/{chunk-QYFKRZQC.js → chunks/chunk-YIO5EBMQ.js} +423 -377
- package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
- package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
- package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
- package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
- package/dist/chunks/client-SILZNM5N.js +42 -0
- package/dist/{config-6ZMBCL23.js → chunks/config-25HRTPSP.js} +48 -10
- package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
- package/dist/{customCommands-DNEJS3ZU.js → chunks/customCommands-TYMYZRG5.js} +11 -8
- package/dist/chunks/engine-MRVF6FK6.js +39 -0
- package/dist/{env-OFAXZ3XG.js → chunks/env-TJ5NOBEB.js} +7 -5
- package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
- package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
- package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
- package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
- package/dist/{kodeAgentStreamJsonSession-GRWG3SPE.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
- package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
- package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
- package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
- package/dist/{kodeHooks-TDMXFWSO.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
- package/dist/{llm-XVXWYOHK.js → chunks/llm-62N6T5ZT.js} +1734 -1526
- package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
- package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
- package/dist/{mentionProcessor-YD7YXYGF.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
- package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
- package/dist/{messages-OFUJSPRV.js → chunks/messages-EEWWLPHN.js} +2 -6
- package/dist/chunks/model-5TIEKQPD.js +37 -0
- package/dist/{openai-5G5D5Q4B.js → chunks/openai-XXK3YZG4.js} +13 -10
- package/dist/{outputStyles-HLDXFQK3.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
- package/dist/chunks/permissions-HO7INPWM.js +27 -0
- package/dist/{pluginRuntime-FPTKK6NY.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
- package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
- package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
- package/dist/chunks/registry-XYJXMOA5.js +60 -0
- package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
- package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
- package/dist/chunks/server-REXXF5IK.js +46 -0
- package/dist/{skillMarketplace-PSNKDINM.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
- package/dist/chunks/src-OROQIWP3.js +44 -0
- package/dist/chunks/src-QXLGGMUW.js +1647 -0
- package/dist/chunks/src-QXLGGMUW.js.map +7 -0
- package/dist/{cli-SRV2INSL.js → chunks/src-SSDT6MVP.js} +2659 -3384
- package/dist/chunks/src-SSDT6MVP.js.map +7 -0
- package/dist/chunks/theme-YBJUIMWK.js +10 -0
- package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
- package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
- package/dist/chunks/uuid-6577SO6X.js +7 -0
- package/dist/chunks/uuid-6577SO6X.js.map +7 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
- package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
- package/dist/entrypoints/cli.js +10 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/daemon.js +10 -0
- package/dist/entrypoints/daemon.js.map +7 -0
- package/dist/entrypoints/mcp.js +71 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/index.js +6 -7
- package/dist/index.js.map +3 -3
- package/dist/sdk/client.cjs +391 -0
- package/dist/sdk/client.cjs.map +7 -0
- package/dist/sdk/client.js +364 -0
- package/dist/sdk/client.js.map +7 -0
- package/dist/sdk/core.cjs +19932 -0
- package/dist/sdk/core.cjs.map +7 -0
- package/dist/sdk/core.js +19893 -0
- package/dist/sdk/core.js.map +7 -0
- package/dist/sdk/daemon-client.cjs +257 -0
- package/dist/sdk/daemon-client.cjs.map +7 -0
- package/dist/sdk/daemon-client.js +221 -0
- package/dist/sdk/daemon-client.js.map +7 -0
- package/dist/sdk/protocol.cjs +170 -0
- package/dist/sdk/protocol.cjs.map +7 -0
- package/dist/sdk/protocol.js +140 -0
- package/dist/sdk/protocol.js.map +7 -0
- package/dist/sdk/runtime-node.cjs +236 -0
- package/dist/sdk/runtime-node.cjs.map +7 -0
- package/dist/sdk/runtime-node.js +222 -0
- package/dist/sdk/runtime-node.js.map +7 -0
- package/dist/sdk/runtime.cjs +17 -0
- package/dist/sdk/runtime.cjs.map +7 -0
- package/dist/sdk/runtime.js +0 -0
- package/dist/sdk/runtime.js.map +7 -0
- package/dist/sdk/tools.cjs +30300 -0
- package/dist/sdk/tools.cjs.map +7 -0
- package/dist/sdk/tools.js +30282 -0
- package/dist/sdk/tools.js.map +7 -0
- package/dist/webui/assets/index-5hlfByVS.css +1 -0
- package/dist/webui/assets/index-BR9lm1lA.js +82 -0
- package/dist/webui/index.html +28 -0
- package/package.json +93 -22
- package/scripts/binary-utils.cjs +12 -4
- package/scripts/cli-acp-wrapper.cjs +3 -17
- package/scripts/cli-wrapper.cjs +5 -7
- package/scripts/postinstall.js +8 -4
- package/dist/REPL-GIU4ZIXM.js +0 -42
- package/dist/acp-H3VJ77YG.js +0 -1357
- package/dist/acp-H3VJ77YG.js.map +0 -7
- package/dist/agentsValidate-XP3CFN6F.js.map +0 -7
- package/dist/ask-3G5H5KD5.js.map +0 -7
- package/dist/autoUpdater-DNRMJWFQ.js +0 -17
- package/dist/chunk-2KWKUXLT.js.map +0 -7
- package/dist/chunk-2PMO2FS2.js.map +0 -7
- package/dist/chunk-3TXNP6HH.js.map +0 -7
- package/dist/chunk-4GAIJGRH.js.map +0 -7
- package/dist/chunk-4RTX4AG4.js.map +0 -7
- package/dist/chunk-54DNHKOD.js.map +0 -7
- package/dist/chunk-67PY5IX6.js +0 -34
- package/dist/chunk-67PY5IX6.js.map +0 -7
- package/dist/chunk-6DRDLOLP.js +0 -2613
- package/dist/chunk-6DRDLOLP.js.map +0 -7
- package/dist/chunk-7CQVZNQV.js +0 -1609
- package/dist/chunk-7CQVZNQV.js.map +0 -7
- package/dist/chunk-ABLVTESJ.js.map +0 -7
- package/dist/chunk-AIMIPK4B.js +0 -835
- package/dist/chunk-AIMIPK4B.js.map +0 -7
- package/dist/chunk-BHGTA6JQ.js.map +0 -7
- package/dist/chunk-CIG63V4E.js +0 -72
- package/dist/chunk-CIG63V4E.js.map +0 -7
- package/dist/chunk-E6YNABER.js.map +0 -7
- package/dist/chunk-EH34V7CY.js.map +0 -7
- package/dist/chunk-EZXMVTDU.js.map +0 -7
- package/dist/chunk-FH5CHM6L.js +0 -148
- package/dist/chunk-FH5CHM6L.js.map +0 -7
- package/dist/chunk-G6I7XROM.js.map +0 -7
- package/dist/chunk-HN4E4UUQ.js.map +0 -7
- package/dist/chunk-HSPVVDIW.js +0 -30198
- package/dist/chunk-HSPVVDIW.js.map +0 -7
- package/dist/chunk-IE2CG2TV.js.map +0 -7
- package/dist/chunk-K2MI4TPB.js.map +0 -7
- package/dist/chunk-MN77D2F7.js +0 -2931
- package/dist/chunk-MN77D2F7.js.map +0 -7
- package/dist/chunk-NQLEUHMS.js.map +0 -7
- package/dist/chunk-OIFQB3S4.js +0 -515
- package/dist/chunk-OIFQB3S4.js.map +0 -7
- package/dist/chunk-OWTG2W3A.js +0 -164
- package/dist/chunk-OWTG2W3A.js.map +0 -7
- package/dist/chunk-OZNRLY3E.js.map +0 -7
- package/dist/chunk-QYFKRZQC.js.map +0 -7
- package/dist/chunk-S6HRABTA.js.map +0 -7
- package/dist/chunk-SDGKPKDK.js.map +0 -7
- package/dist/chunk-SRZZFAS7.js.map +0 -7
- package/dist/chunk-UKHTVRJM.js +0 -47
- package/dist/chunk-UKHTVRJM.js.map +0 -7
- package/dist/chunk-UYXEDKOZ.js +0 -24
- package/dist/chunk-UYXEDKOZ.js.map +0 -7
- package/dist/chunk-VBXVYQYY.js +0 -145
- package/dist/chunk-VBXVYQYY.js.map +0 -7
- package/dist/chunk-WVHORZQ5.js +0 -17
- package/dist/chunk-WVHORZQ5.js.map +0 -7
- package/dist/chunk-WWUWDNWW.js +0 -49
- package/dist/chunk-WWUWDNWW.js.map +0 -7
- package/dist/chunk-Z33T5YN5.js +0 -654
- package/dist/chunk-Z33T5YN5.js.map +0 -7
- package/dist/chunk-ZQU3TXLC.js.map +0 -7
- package/dist/cli-SRV2INSL.js.map +0 -7
- package/dist/commands-TWH6PGVG.js +0 -46
- package/dist/context-JQIOOI4W.js +0 -30
- package/dist/costTracker-6SL26FDB.js +0 -19
- package/dist/kodeAgentSessionLoad-6N27AC5K.js +0 -18
- package/dist/kodeAgentSessionResume-HUSAEO24.js +0 -16
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
- package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +0 -7
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
- package/dist/llm-XVXWYOHK.js.map +0 -7
- package/dist/llmLazy-7TD5N7XP.js +0 -15
- package/dist/loader-AUXIJTY6.js +0 -28
- package/dist/mcp-BXJ3K7NZ.js +0 -49
- package/dist/mentionProcessor-YD7YXYGF.js.map +0 -7
- package/dist/model-KPYCXWBK.js +0 -30
- package/dist/pluginRuntime-FPTKK6NY.js.map +0 -7
- package/dist/pluginValidation-DSFXZ4GF.js +0 -17
- package/dist/prompts-LWLAJRS2.js +0 -48
- package/dist/query-HVPWL27C.js +0 -50
- package/dist/responsesStreaming-AW344PQO.js +0 -10
- package/dist/ripgrep-YOPCY2GO.js +0 -17
- package/dist/state-KNRWP3FO.js +0 -16
- package/dist/theme-7S2QN2FO.js +0 -14
- package/dist/toolPermissionSettings-GPOBH4IV.js +0 -18
- package/dist/tools-FZU2FZBD.js +0 -47
- package/dist/userInput-VHNBN2MW.js +0 -311
- package/dist/userInput-VHNBN2MW.js.map +0 -7
- package/dist/uuid-QN2CNKKN.js +0 -9
- /package/dist/{REPL-GIU4ZIXM.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
- /package/dist/{autoUpdater-DNRMJWFQ.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
- /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
- /package/dist/{commands-TWH6PGVG.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
- /package/dist/{config-6ZMBCL23.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
- /package/dist/{context-JQIOOI4W.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
- /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
- /package/dist/{customCommands-DNEJS3ZU.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
- /package/dist/{env-OFAXZ3XG.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
- /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
- /package/dist/{kodeAgentSessionLoad-6N27AC5K.js.map → chunks/config-25HRTPSP.js.map} +0 -0
- /package/dist/{kodeAgentSessionResume-HUSAEO24.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
- /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
- /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
- /package/dist/{kodeHooks-TDMXFWSO.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
- /package/dist/{llmLazy-7TD5N7XP.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
- /package/dist/{loader-AUXIJTY6.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
- /package/dist/{mcp-BXJ3K7NZ.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
- /package/dist/{messages-OFUJSPRV.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
- /package/dist/{model-KPYCXWBK.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
- /package/dist/{openai-5G5D5Q4B.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
- /package/dist/{outputStyles-HLDXFQK3.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
- /package/dist/{pluginValidation-DSFXZ4GF.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
- /package/dist/{prompts-LWLAJRS2.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
- /package/dist/{query-HVPWL27C.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
- /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
- /package/dist/{ripgrep-YOPCY2GO.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
- /package/dist/{skillMarketplace-PSNKDINM.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
- /package/dist/{state-KNRWP3FO.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
- /package/dist/{theme-7S2QN2FO.js.map → chunks/server-REXXF5IK.js.map} +0 -0
- /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
- /package/dist/{toolPermissionSettings-GPOBH4IV.js.map → chunks/src-OROQIWP3.js.map} +0 -0
- /package/dist/{tools-FZU2FZBD.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
- /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// apps/server/src/client.ts
|
|
30
|
+
var client_exports = {};
|
|
31
|
+
__export(client_exports, {
|
|
32
|
+
createKodeDaemonClient: () => createKodeDaemonClient
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(client_exports);
|
|
35
|
+
|
|
36
|
+
// packages/protocol/src/agentEvent.ts
|
|
37
|
+
var import_zod = require("zod");
|
|
38
|
+
var ContentBlockSchema = import_zod.z.object({
|
|
39
|
+
type: import_zod.z.string()
|
|
40
|
+
}).passthrough();
|
|
41
|
+
var SystemEventSchema = import_zod.z.object({
|
|
42
|
+
type: import_zod.z.literal("system"),
|
|
43
|
+
subtype: import_zod.z.string(),
|
|
44
|
+
session_id: import_zod.z.string().optional(),
|
|
45
|
+
model: import_zod.z.string().optional(),
|
|
46
|
+
cwd: import_zod.z.string().optional(),
|
|
47
|
+
tools: import_zod.z.array(import_zod.z.string()).optional(),
|
|
48
|
+
slash_commands: import_zod.z.array(import_zod.z.string()).optional(),
|
|
49
|
+
status: import_zod.z.string().optional(),
|
|
50
|
+
uuid: import_zod.z.string().optional()
|
|
51
|
+
}).strict();
|
|
52
|
+
var UserEventSchema = import_zod.z.object({
|
|
53
|
+
type: import_zod.z.literal("user"),
|
|
54
|
+
session_id: import_zod.z.string().optional(),
|
|
55
|
+
uuid: import_zod.z.string().optional(),
|
|
56
|
+
parent_tool_use_id: import_zod.z.string().nullable().optional(),
|
|
57
|
+
message: import_zod.z.object({
|
|
58
|
+
role: import_zod.z.literal("user"),
|
|
59
|
+
content: import_zod.z.union([import_zod.z.string(), import_zod.z.array(ContentBlockSchema)])
|
|
60
|
+
}).strict()
|
|
61
|
+
}).strict();
|
|
62
|
+
var AssistantEventSchema = import_zod.z.object({
|
|
63
|
+
type: import_zod.z.literal("assistant"),
|
|
64
|
+
session_id: import_zod.z.string().optional(),
|
|
65
|
+
uuid: import_zod.z.string().optional(),
|
|
66
|
+
parent_tool_use_id: import_zod.z.string().nullable().optional(),
|
|
67
|
+
message: import_zod.z.object({
|
|
68
|
+
role: import_zod.z.literal("assistant"),
|
|
69
|
+
content: import_zod.z.array(ContentBlockSchema)
|
|
70
|
+
}).strict()
|
|
71
|
+
}).strict();
|
|
72
|
+
var ResultEventSchema = import_zod.z.object({
|
|
73
|
+
type: import_zod.z.literal("result"),
|
|
74
|
+
subtype: import_zod.z.enum(["success", "error_during_execution", "error_max_turns"]),
|
|
75
|
+
result: import_zod.z.string().optional(),
|
|
76
|
+
structured_output: import_zod.z.record(import_zod.z.unknown()).optional(),
|
|
77
|
+
num_turns: import_zod.z.number(),
|
|
78
|
+
usage: import_zod.z.unknown().optional(),
|
|
79
|
+
total_cost_usd: import_zod.z.number(),
|
|
80
|
+
duration_ms: import_zod.z.number(),
|
|
81
|
+
duration_api_ms: import_zod.z.number(),
|
|
82
|
+
is_error: import_zod.z.boolean(),
|
|
83
|
+
session_id: import_zod.z.string()
|
|
84
|
+
}).strict();
|
|
85
|
+
var LogEventSchema = import_zod.z.object({
|
|
86
|
+
type: import_zod.z.literal("log"),
|
|
87
|
+
log: import_zod.z.object({
|
|
88
|
+
level: import_zod.z.enum(["debug", "info", "warn", "error"]),
|
|
89
|
+
message: import_zod.z.string()
|
|
90
|
+
}).strict()
|
|
91
|
+
}).strict();
|
|
92
|
+
var PermissionRequestEventSchema = import_zod.z.object({
|
|
93
|
+
type: import_zod.z.literal("permission_request"),
|
|
94
|
+
request_id: import_zod.z.string(),
|
|
95
|
+
tool_name: import_zod.z.string(),
|
|
96
|
+
tool_description: import_zod.z.string(),
|
|
97
|
+
input: import_zod.z.record(import_zod.z.unknown())
|
|
98
|
+
}).strict();
|
|
99
|
+
var HistoryBeginEventSchema = import_zod.z.object({
|
|
100
|
+
type: import_zod.z.literal("history_begin"),
|
|
101
|
+
sessionId: import_zod.z.string()
|
|
102
|
+
}).strict();
|
|
103
|
+
var HistoryEndEventSchema = import_zod.z.object({
|
|
104
|
+
type: import_zod.z.literal("history_end"),
|
|
105
|
+
sessionId: import_zod.z.string()
|
|
106
|
+
}).strict();
|
|
107
|
+
var AgentEventSchema = import_zod.z.discriminatedUnion("type", [
|
|
108
|
+
SystemEventSchema,
|
|
109
|
+
UserEventSchema,
|
|
110
|
+
AssistantEventSchema,
|
|
111
|
+
ResultEventSchema,
|
|
112
|
+
LogEventSchema,
|
|
113
|
+
PermissionRequestEventSchema,
|
|
114
|
+
HistoryBeginEventSchema,
|
|
115
|
+
HistoryEndEventSchema
|
|
116
|
+
]);
|
|
117
|
+
|
|
118
|
+
// apps/server/src/client.ts
|
|
119
|
+
function asRecord(value) {
|
|
120
|
+
if (!value || typeof value !== "object") return null;
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
function getGlobalWebSocketCtor() {
|
|
124
|
+
const ws = asRecord(globalThis)?.WebSocket;
|
|
125
|
+
return typeof ws === "function" ? ws : null;
|
|
126
|
+
}
|
|
127
|
+
async function getWebSocketImpl() {
|
|
128
|
+
const globalWebSocket = getGlobalWebSocketCtor();
|
|
129
|
+
if (globalWebSocket) return globalWebSocket;
|
|
130
|
+
const undici = await import("undici");
|
|
131
|
+
const ws = asRecord(undici)?.WebSocket;
|
|
132
|
+
if (typeof ws === "function") return ws;
|
|
133
|
+
throw new Error("No WebSocket implementation available");
|
|
134
|
+
}
|
|
135
|
+
var AsyncQueue = class _AsyncQueue {
|
|
136
|
+
items = [];
|
|
137
|
+
resolvers = [];
|
|
138
|
+
closed = false;
|
|
139
|
+
static doneResult() {
|
|
140
|
+
return { value: void 0, done: true };
|
|
141
|
+
}
|
|
142
|
+
push(item) {
|
|
143
|
+
if (this.closed) return;
|
|
144
|
+
const resolve = this.resolvers.shift();
|
|
145
|
+
if (resolve) {
|
|
146
|
+
resolve({ value: item, done: false });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.items.push(item);
|
|
150
|
+
}
|
|
151
|
+
close() {
|
|
152
|
+
if (this.closed) return;
|
|
153
|
+
this.closed = true;
|
|
154
|
+
while (this.resolvers.length > 0) {
|
|
155
|
+
const resolve = this.resolvers.shift();
|
|
156
|
+
resolve(_AsyncQueue.doneResult());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async next() {
|
|
160
|
+
if (this.items.length > 0) {
|
|
161
|
+
return { value: this.items.shift(), done: false };
|
|
162
|
+
}
|
|
163
|
+
if (this.closed) return _AsyncQueue.doneResult();
|
|
164
|
+
return await new Promise((resolve) => {
|
|
165
|
+
this.resolvers.push(resolve);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
[Symbol.asyncIterator]() {
|
|
169
|
+
return this;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
function createKodeDaemonClient(args) {
|
|
173
|
+
const base = new URL(args.url);
|
|
174
|
+
const token = args.token ?? base.searchParams.get("token") ?? "";
|
|
175
|
+
if (!token) {
|
|
176
|
+
throw new Error("Missing daemon token (pass ?token= or token option)");
|
|
177
|
+
}
|
|
178
|
+
const wsUrl = new URL(args.url);
|
|
179
|
+
wsUrl.protocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
180
|
+
wsUrl.pathname = "/ws";
|
|
181
|
+
wsUrl.searchParams.set("token", token);
|
|
182
|
+
const queue = new AsyncQueue();
|
|
183
|
+
let ws = null;
|
|
184
|
+
const connect = async (options) => {
|
|
185
|
+
if (ws && ws.readyState === 1) return;
|
|
186
|
+
const WebSocketImpl = await getWebSocketImpl();
|
|
187
|
+
const socket = new WebSocketImpl(wsUrl.toString());
|
|
188
|
+
ws = socket;
|
|
189
|
+
const timeoutMs = options?.timeoutMs ?? 5e3;
|
|
190
|
+
await new Promise((resolve, reject) => {
|
|
191
|
+
const onOpen = () => {
|
|
192
|
+
cleanup();
|
|
193
|
+
resolve();
|
|
194
|
+
};
|
|
195
|
+
const onError = () => {
|
|
196
|
+
cleanup();
|
|
197
|
+
reject(new Error("WebSocket connection error"));
|
|
198
|
+
};
|
|
199
|
+
const timer = setTimeout(() => {
|
|
200
|
+
cleanup();
|
|
201
|
+
reject(new Error("WebSocket connect timeout"));
|
|
202
|
+
}, timeoutMs);
|
|
203
|
+
const cleanup = () => {
|
|
204
|
+
clearTimeout(timer);
|
|
205
|
+
try {
|
|
206
|
+
socket.removeEventListener?.("open", onOpen);
|
|
207
|
+
socket.removeEventListener?.("error", onError);
|
|
208
|
+
} catch {
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
socket.addEventListener("open", onOpen, { once: true });
|
|
212
|
+
socket.addEventListener("error", onError, { once: true });
|
|
213
|
+
});
|
|
214
|
+
socket.addEventListener("message", (ev) => {
|
|
215
|
+
const raw = asRecord(ev)?.data;
|
|
216
|
+
const text = typeof raw === "string" ? raw : String(raw ?? "");
|
|
217
|
+
try {
|
|
218
|
+
const parsed = JSON.parse(text);
|
|
219
|
+
const validated = AgentEventSchema.safeParse(parsed);
|
|
220
|
+
if (validated.success) queue.push(validated.data);
|
|
221
|
+
} catch {
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
socket.addEventListener("close", () => {
|
|
225
|
+
queue.close();
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
const sendPrompt = (prompt) => {
|
|
229
|
+
if (!ws || ws.readyState !== 1) {
|
|
230
|
+
throw new Error("Daemon client is not connected");
|
|
231
|
+
}
|
|
232
|
+
ws.send(JSON.stringify({ type: "prompt", prompt }));
|
|
233
|
+
};
|
|
234
|
+
const cancel = () => {
|
|
235
|
+
if (!ws || ws.readyState !== 1) return;
|
|
236
|
+
ws.send(JSON.stringify({ type: "cancel" }));
|
|
237
|
+
};
|
|
238
|
+
const close = () => {
|
|
239
|
+
try {
|
|
240
|
+
ws?.close();
|
|
241
|
+
} catch {
|
|
242
|
+
}
|
|
243
|
+
queue.close();
|
|
244
|
+
};
|
|
245
|
+
return {
|
|
246
|
+
connect,
|
|
247
|
+
sendPrompt,
|
|
248
|
+
cancel,
|
|
249
|
+
events: queue,
|
|
250
|
+
close,
|
|
251
|
+
wsUrl: wsUrl.toString()
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
255
|
+
0 && (module.exports = {
|
|
256
|
+
createKodeDaemonClient
|
|
257
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../apps/server/src/client.ts", "../../packages/protocol/src/agentEvent.ts"],
|
|
4
|
+
"sourcesContent": ["import type { AgentEvent } from '#protocol/agentEvent'\nimport { AgentEventSchema } from '#protocol/agentEvent'\n\ntype WebSocketLike = {\n readyState: number\n send: (data: string) => void\n close: () => void\n addEventListener: (\n type: string,\n listener: (ev: unknown) => void,\n options?: unknown,\n ) => void\n removeEventListener?: (type: string, listener: (ev: unknown) => void) => void\n}\n\ntype WebSocketCtor = new (url: string) => WebSocketLike\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object') return null\n return value as Record<string, unknown>\n}\n\nfunction getGlobalWebSocketCtor(): WebSocketCtor | null {\n const ws = asRecord(globalThis)?.WebSocket\n return typeof ws === 'function' ? (ws as unknown as WebSocketCtor) : null\n}\n\nasync function getWebSocketImpl(): Promise<WebSocketCtor> {\n const globalWebSocket = getGlobalWebSocketCtor()\n if (globalWebSocket) return globalWebSocket\n\n const undici = await import('undici')\n const ws = asRecord(undici)?.WebSocket\n if (typeof ws === 'function') return ws as unknown as WebSocketCtor\n throw new Error('No WebSocket implementation available')\n}\n\nclass AsyncQueue<T> implements AsyncIterable<T>, AsyncIterator<T> {\n private items: T[] = []\n private resolvers: Array<(value: IteratorResult<T>) => void> = []\n private closed = false\n\n private static doneResult<T>(): IteratorResult<T> {\n return { value: undefined as unknown as T, done: true }\n }\n\n push(item: T) {\n if (this.closed) return\n const resolve = this.resolvers.shift()\n if (resolve) {\n resolve({ value: item, done: false })\n return\n }\n this.items.push(item)\n }\n\n close() {\n if (this.closed) return\n this.closed = true\n while (this.resolvers.length > 0) {\n const resolve = this.resolvers.shift()!\n resolve(AsyncQueue.doneResult())\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.items.length > 0) {\n return { value: this.items.shift()!, done: false }\n }\n if (this.closed) return AsyncQueue.doneResult()\n return await new Promise<IteratorResult<T>>(resolve => {\n this.resolvers.push(resolve)\n })\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this\n }\n}\n\nexport type KodeDaemonClient = {\n connect: (options?: { timeoutMs?: number }) => Promise<void>\n sendPrompt: (prompt: string) => void\n cancel: () => void\n events: AsyncIterable<AgentEvent>\n close: () => void\n wsUrl: string\n}\n\nexport function createKodeDaemonClient(args: {\n url: string\n token?: string\n}): KodeDaemonClient {\n const base = new URL(args.url)\n const token = args.token ?? base.searchParams.get('token') ?? ''\n if (!token) {\n throw new Error('Missing daemon token (pass ?token= or token option)')\n }\n\n const wsUrl = new URL(args.url)\n wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:'\n wsUrl.pathname = '/ws'\n wsUrl.searchParams.set('token', token)\n\n const queue = new AsyncQueue<AgentEvent>()\n let ws: WebSocketLike | null = null\n\n const connect = async (options?: { timeoutMs?: number }) => {\n if (ws && ws.readyState === 1) return\n const WebSocketImpl = await getWebSocketImpl()\n const socket: WebSocketLike = new WebSocketImpl(wsUrl.toString())\n ws = socket\n\n const timeoutMs = options?.timeoutMs ?? 5_000\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n cleanup()\n resolve()\n }\n const onError = () => {\n cleanup()\n reject(new Error('WebSocket connection error'))\n }\n\n const timer = setTimeout(() => {\n cleanup()\n reject(new Error('WebSocket connect timeout'))\n }, timeoutMs)\n\n const cleanup = () => {\n clearTimeout(timer)\n try {\n socket.removeEventListener?.('open', onOpen)\n socket.removeEventListener?.('error', onError)\n } catch {}\n }\n\n socket.addEventListener('open', onOpen, { once: true })\n socket.addEventListener('error', onError, { once: true })\n })\n\n socket.addEventListener('message', (ev: unknown) => {\n const raw = asRecord(ev)?.data\n const text = typeof raw === 'string' ? raw : String(raw ?? '')\n try {\n const parsed = JSON.parse(text)\n const validated = AgentEventSchema.safeParse(parsed)\n if (validated.success) queue.push(validated.data)\n } catch {\n // ignore\n }\n })\n\n socket.addEventListener('close', () => {\n queue.close()\n })\n }\n\n const sendPrompt = (prompt: string) => {\n if (!ws || ws.readyState !== 1) {\n throw new Error('Daemon client is not connected')\n }\n ws.send(JSON.stringify({ type: 'prompt', prompt }))\n }\n\n const cancel = () => {\n if (!ws || ws.readyState !== 1) return\n ws.send(JSON.stringify({ type: 'cancel' }))\n }\n\n const close = () => {\n try {\n ws?.close()\n } catch {}\n queue.close()\n }\n\n return {\n connect,\n sendPrompt,\n cancel,\n events: queue,\n close,\n wsUrl: wsUrl.toString(),\n }\n}\n", "import { z } from 'zod'\n\nimport type { SdkMessage } from './streamJson'\n\nexport type PermissionRequestEvent = {\n type: 'permission_request'\n request_id: string\n tool_name: string\n tool_description: string\n input: Record<string, unknown>\n}\n\nexport type HistoryBeginEvent = {\n type: 'history_begin'\n sessionId: string\n}\n\nexport type HistoryEndEvent = {\n type: 'history_end'\n sessionId: string\n}\n\nexport type AgentEvent =\n | SdkMessage\n | PermissionRequestEvent\n | HistoryBeginEvent\n | HistoryEndEvent\n\nconst ContentBlockSchema = z\n .object({\n type: z.string(),\n })\n .passthrough()\n\nconst SystemEventSchema = z\n .object({\n type: z.literal('system'),\n subtype: z.string(),\n session_id: z.string().optional(),\n model: z.string().optional(),\n cwd: z.string().optional(),\n tools: z.array(z.string()).optional(),\n slash_commands: z.array(z.string()).optional(),\n status: z.string().optional(),\n uuid: z.string().optional(),\n })\n .strict()\n\nconst UserEventSchema = z\n .object({\n type: z.literal('user'),\n session_id: z.string().optional(),\n uuid: z.string().optional(),\n parent_tool_use_id: z.string().nullable().optional(),\n message: z\n .object({\n role: z.literal('user'),\n content: z.union([z.string(), z.array(ContentBlockSchema)]),\n })\n .strict(),\n })\n .strict()\n\nconst AssistantEventSchema = z\n .object({\n type: z.literal('assistant'),\n session_id: z.string().optional(),\n uuid: z.string().optional(),\n parent_tool_use_id: z.string().nullable().optional(),\n message: z\n .object({\n role: z.literal('assistant'),\n content: z.array(ContentBlockSchema),\n })\n .strict(),\n })\n .strict()\n\nconst ResultEventSchema = z\n .object({\n type: z.literal('result'),\n subtype: z.enum(['success', 'error_during_execution', 'error_max_turns']),\n result: z.string().optional(),\n structured_output: z.record(z.unknown()).optional(),\n num_turns: z.number(),\n usage: z.unknown().optional(),\n total_cost_usd: z.number(),\n duration_ms: z.number(),\n duration_api_ms: z.number(),\n is_error: z.boolean(),\n session_id: z.string(),\n })\n .strict()\n\nconst LogEventSchema = z\n .object({\n type: z.literal('log'),\n log: z\n .object({\n level: z.enum(['debug', 'info', 'warn', 'error']),\n message: z.string(),\n })\n .strict(),\n })\n .strict()\n\nconst PermissionRequestEventSchema = z\n .object({\n type: z.literal('permission_request'),\n request_id: z.string(),\n tool_name: z.string(),\n tool_description: z.string(),\n input: z.record(z.unknown()),\n })\n .strict()\n\nconst HistoryBeginEventSchema = z\n .object({\n type: z.literal('history_begin'),\n sessionId: z.string(),\n })\n .strict()\n\nconst HistoryEndEventSchema = z\n .object({\n type: z.literal('history_end'),\n sessionId: z.string(),\n })\n .strict()\n\nexport const AgentEventSchema = z.discriminatedUnion('type', [\n SystemEventSchema,\n UserEventSchema,\n AssistantEventSchema,\n ResultEventSchema,\n LogEventSchema,\n PermissionRequestEventSchema,\n HistoryBeginEventSchema,\n HistoryEndEventSchema,\n]) as unknown as z.ZodType<AgentEvent>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// packages/protocol/src/agentEvent.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var ContentBlockSchema = z.object({
|
|
4
|
+
type: z.string()
|
|
5
|
+
}).passthrough();
|
|
6
|
+
var SystemEventSchema = z.object({
|
|
7
|
+
type: z.literal("system"),
|
|
8
|
+
subtype: z.string(),
|
|
9
|
+
session_id: z.string().optional(),
|
|
10
|
+
model: z.string().optional(),
|
|
11
|
+
cwd: z.string().optional(),
|
|
12
|
+
tools: z.array(z.string()).optional(),
|
|
13
|
+
slash_commands: z.array(z.string()).optional(),
|
|
14
|
+
status: z.string().optional(),
|
|
15
|
+
uuid: z.string().optional()
|
|
16
|
+
}).strict();
|
|
17
|
+
var UserEventSchema = z.object({
|
|
18
|
+
type: z.literal("user"),
|
|
19
|
+
session_id: z.string().optional(),
|
|
20
|
+
uuid: z.string().optional(),
|
|
21
|
+
parent_tool_use_id: z.string().nullable().optional(),
|
|
22
|
+
message: z.object({
|
|
23
|
+
role: z.literal("user"),
|
|
24
|
+
content: z.union([z.string(), z.array(ContentBlockSchema)])
|
|
25
|
+
}).strict()
|
|
26
|
+
}).strict();
|
|
27
|
+
var AssistantEventSchema = z.object({
|
|
28
|
+
type: z.literal("assistant"),
|
|
29
|
+
session_id: z.string().optional(),
|
|
30
|
+
uuid: z.string().optional(),
|
|
31
|
+
parent_tool_use_id: z.string().nullable().optional(),
|
|
32
|
+
message: z.object({
|
|
33
|
+
role: z.literal("assistant"),
|
|
34
|
+
content: z.array(ContentBlockSchema)
|
|
35
|
+
}).strict()
|
|
36
|
+
}).strict();
|
|
37
|
+
var ResultEventSchema = z.object({
|
|
38
|
+
type: z.literal("result"),
|
|
39
|
+
subtype: z.enum(["success", "error_during_execution", "error_max_turns"]),
|
|
40
|
+
result: z.string().optional(),
|
|
41
|
+
structured_output: z.record(z.unknown()).optional(),
|
|
42
|
+
num_turns: z.number(),
|
|
43
|
+
usage: z.unknown().optional(),
|
|
44
|
+
total_cost_usd: z.number(),
|
|
45
|
+
duration_ms: z.number(),
|
|
46
|
+
duration_api_ms: z.number(),
|
|
47
|
+
is_error: z.boolean(),
|
|
48
|
+
session_id: z.string()
|
|
49
|
+
}).strict();
|
|
50
|
+
var LogEventSchema = z.object({
|
|
51
|
+
type: z.literal("log"),
|
|
52
|
+
log: z.object({
|
|
53
|
+
level: z.enum(["debug", "info", "warn", "error"]),
|
|
54
|
+
message: z.string()
|
|
55
|
+
}).strict()
|
|
56
|
+
}).strict();
|
|
57
|
+
var PermissionRequestEventSchema = z.object({
|
|
58
|
+
type: z.literal("permission_request"),
|
|
59
|
+
request_id: z.string(),
|
|
60
|
+
tool_name: z.string(),
|
|
61
|
+
tool_description: z.string(),
|
|
62
|
+
input: z.record(z.unknown())
|
|
63
|
+
}).strict();
|
|
64
|
+
var HistoryBeginEventSchema = z.object({
|
|
65
|
+
type: z.literal("history_begin"),
|
|
66
|
+
sessionId: z.string()
|
|
67
|
+
}).strict();
|
|
68
|
+
var HistoryEndEventSchema = z.object({
|
|
69
|
+
type: z.literal("history_end"),
|
|
70
|
+
sessionId: z.string()
|
|
71
|
+
}).strict();
|
|
72
|
+
var AgentEventSchema = z.discriminatedUnion("type", [
|
|
73
|
+
SystemEventSchema,
|
|
74
|
+
UserEventSchema,
|
|
75
|
+
AssistantEventSchema,
|
|
76
|
+
ResultEventSchema,
|
|
77
|
+
LogEventSchema,
|
|
78
|
+
PermissionRequestEventSchema,
|
|
79
|
+
HistoryBeginEventSchema,
|
|
80
|
+
HistoryEndEventSchema
|
|
81
|
+
]);
|
|
82
|
+
|
|
83
|
+
// apps/server/src/client.ts
|
|
84
|
+
function asRecord(value) {
|
|
85
|
+
if (!value || typeof value !== "object") return null;
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
function getGlobalWebSocketCtor() {
|
|
89
|
+
const ws = asRecord(globalThis)?.WebSocket;
|
|
90
|
+
return typeof ws === "function" ? ws : null;
|
|
91
|
+
}
|
|
92
|
+
async function getWebSocketImpl() {
|
|
93
|
+
const globalWebSocket = getGlobalWebSocketCtor();
|
|
94
|
+
if (globalWebSocket) return globalWebSocket;
|
|
95
|
+
const undici = await import("undici");
|
|
96
|
+
const ws = asRecord(undici)?.WebSocket;
|
|
97
|
+
if (typeof ws === "function") return ws;
|
|
98
|
+
throw new Error("No WebSocket implementation available");
|
|
99
|
+
}
|
|
100
|
+
var AsyncQueue = class _AsyncQueue {
|
|
101
|
+
items = [];
|
|
102
|
+
resolvers = [];
|
|
103
|
+
closed = false;
|
|
104
|
+
static doneResult() {
|
|
105
|
+
return { value: void 0, done: true };
|
|
106
|
+
}
|
|
107
|
+
push(item) {
|
|
108
|
+
if (this.closed) return;
|
|
109
|
+
const resolve = this.resolvers.shift();
|
|
110
|
+
if (resolve) {
|
|
111
|
+
resolve({ value: item, done: false });
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.items.push(item);
|
|
115
|
+
}
|
|
116
|
+
close() {
|
|
117
|
+
if (this.closed) return;
|
|
118
|
+
this.closed = true;
|
|
119
|
+
while (this.resolvers.length > 0) {
|
|
120
|
+
const resolve = this.resolvers.shift();
|
|
121
|
+
resolve(_AsyncQueue.doneResult());
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async next() {
|
|
125
|
+
if (this.items.length > 0) {
|
|
126
|
+
return { value: this.items.shift(), done: false };
|
|
127
|
+
}
|
|
128
|
+
if (this.closed) return _AsyncQueue.doneResult();
|
|
129
|
+
return await new Promise((resolve) => {
|
|
130
|
+
this.resolvers.push(resolve);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
[Symbol.asyncIterator]() {
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
function createKodeDaemonClient(args) {
|
|
138
|
+
const base = new URL(args.url);
|
|
139
|
+
const token = args.token ?? base.searchParams.get("token") ?? "";
|
|
140
|
+
if (!token) {
|
|
141
|
+
throw new Error("Missing daemon token (pass ?token= or token option)");
|
|
142
|
+
}
|
|
143
|
+
const wsUrl = new URL(args.url);
|
|
144
|
+
wsUrl.protocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
145
|
+
wsUrl.pathname = "/ws";
|
|
146
|
+
wsUrl.searchParams.set("token", token);
|
|
147
|
+
const queue = new AsyncQueue();
|
|
148
|
+
let ws = null;
|
|
149
|
+
const connect = async (options) => {
|
|
150
|
+
if (ws && ws.readyState === 1) return;
|
|
151
|
+
const WebSocketImpl = await getWebSocketImpl();
|
|
152
|
+
const socket = new WebSocketImpl(wsUrl.toString());
|
|
153
|
+
ws = socket;
|
|
154
|
+
const timeoutMs = options?.timeoutMs ?? 5e3;
|
|
155
|
+
await new Promise((resolve, reject) => {
|
|
156
|
+
const onOpen = () => {
|
|
157
|
+
cleanup();
|
|
158
|
+
resolve();
|
|
159
|
+
};
|
|
160
|
+
const onError = () => {
|
|
161
|
+
cleanup();
|
|
162
|
+
reject(new Error("WebSocket connection error"));
|
|
163
|
+
};
|
|
164
|
+
const timer = setTimeout(() => {
|
|
165
|
+
cleanup();
|
|
166
|
+
reject(new Error("WebSocket connect timeout"));
|
|
167
|
+
}, timeoutMs);
|
|
168
|
+
const cleanup = () => {
|
|
169
|
+
clearTimeout(timer);
|
|
170
|
+
try {
|
|
171
|
+
socket.removeEventListener?.("open", onOpen);
|
|
172
|
+
socket.removeEventListener?.("error", onError);
|
|
173
|
+
} catch {
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
socket.addEventListener("open", onOpen, { once: true });
|
|
177
|
+
socket.addEventListener("error", onError, { once: true });
|
|
178
|
+
});
|
|
179
|
+
socket.addEventListener("message", (ev) => {
|
|
180
|
+
const raw = asRecord(ev)?.data;
|
|
181
|
+
const text = typeof raw === "string" ? raw : String(raw ?? "");
|
|
182
|
+
try {
|
|
183
|
+
const parsed = JSON.parse(text);
|
|
184
|
+
const validated = AgentEventSchema.safeParse(parsed);
|
|
185
|
+
if (validated.success) queue.push(validated.data);
|
|
186
|
+
} catch {
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
socket.addEventListener("close", () => {
|
|
190
|
+
queue.close();
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
const sendPrompt = (prompt) => {
|
|
194
|
+
if (!ws || ws.readyState !== 1) {
|
|
195
|
+
throw new Error("Daemon client is not connected");
|
|
196
|
+
}
|
|
197
|
+
ws.send(JSON.stringify({ type: "prompt", prompt }));
|
|
198
|
+
};
|
|
199
|
+
const cancel = () => {
|
|
200
|
+
if (!ws || ws.readyState !== 1) return;
|
|
201
|
+
ws.send(JSON.stringify({ type: "cancel" }));
|
|
202
|
+
};
|
|
203
|
+
const close = () => {
|
|
204
|
+
try {
|
|
205
|
+
ws?.close();
|
|
206
|
+
} catch {
|
|
207
|
+
}
|
|
208
|
+
queue.close();
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
connect,
|
|
212
|
+
sendPrompt,
|
|
213
|
+
cancel,
|
|
214
|
+
events: queue,
|
|
215
|
+
close,
|
|
216
|
+
wsUrl: wsUrl.toString()
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export {
|
|
220
|
+
createKodeDaemonClient
|
|
221
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../packages/protocol/src/agentEvent.ts", "../../apps/server/src/client.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\n\nimport type { SdkMessage } from './streamJson'\n\nexport type PermissionRequestEvent = {\n type: 'permission_request'\n request_id: string\n tool_name: string\n tool_description: string\n input: Record<string, unknown>\n}\n\nexport type HistoryBeginEvent = {\n type: 'history_begin'\n sessionId: string\n}\n\nexport type HistoryEndEvent = {\n type: 'history_end'\n sessionId: string\n}\n\nexport type AgentEvent =\n | SdkMessage\n | PermissionRequestEvent\n | HistoryBeginEvent\n | HistoryEndEvent\n\nconst ContentBlockSchema = z\n .object({\n type: z.string(),\n })\n .passthrough()\n\nconst SystemEventSchema = z\n .object({\n type: z.literal('system'),\n subtype: z.string(),\n session_id: z.string().optional(),\n model: z.string().optional(),\n cwd: z.string().optional(),\n tools: z.array(z.string()).optional(),\n slash_commands: z.array(z.string()).optional(),\n status: z.string().optional(),\n uuid: z.string().optional(),\n })\n .strict()\n\nconst UserEventSchema = z\n .object({\n type: z.literal('user'),\n session_id: z.string().optional(),\n uuid: z.string().optional(),\n parent_tool_use_id: z.string().nullable().optional(),\n message: z\n .object({\n role: z.literal('user'),\n content: z.union([z.string(), z.array(ContentBlockSchema)]),\n })\n .strict(),\n })\n .strict()\n\nconst AssistantEventSchema = z\n .object({\n type: z.literal('assistant'),\n session_id: z.string().optional(),\n uuid: z.string().optional(),\n parent_tool_use_id: z.string().nullable().optional(),\n message: z\n .object({\n role: z.literal('assistant'),\n content: z.array(ContentBlockSchema),\n })\n .strict(),\n })\n .strict()\n\nconst ResultEventSchema = z\n .object({\n type: z.literal('result'),\n subtype: z.enum(['success', 'error_during_execution', 'error_max_turns']),\n result: z.string().optional(),\n structured_output: z.record(z.unknown()).optional(),\n num_turns: z.number(),\n usage: z.unknown().optional(),\n total_cost_usd: z.number(),\n duration_ms: z.number(),\n duration_api_ms: z.number(),\n is_error: z.boolean(),\n session_id: z.string(),\n })\n .strict()\n\nconst LogEventSchema = z\n .object({\n type: z.literal('log'),\n log: z\n .object({\n level: z.enum(['debug', 'info', 'warn', 'error']),\n message: z.string(),\n })\n .strict(),\n })\n .strict()\n\nconst PermissionRequestEventSchema = z\n .object({\n type: z.literal('permission_request'),\n request_id: z.string(),\n tool_name: z.string(),\n tool_description: z.string(),\n input: z.record(z.unknown()),\n })\n .strict()\n\nconst HistoryBeginEventSchema = z\n .object({\n type: z.literal('history_begin'),\n sessionId: z.string(),\n })\n .strict()\n\nconst HistoryEndEventSchema = z\n .object({\n type: z.literal('history_end'),\n sessionId: z.string(),\n })\n .strict()\n\nexport const AgentEventSchema = z.discriminatedUnion('type', [\n SystemEventSchema,\n UserEventSchema,\n AssistantEventSchema,\n ResultEventSchema,\n LogEventSchema,\n PermissionRequestEventSchema,\n HistoryBeginEventSchema,\n HistoryEndEventSchema,\n]) as unknown as z.ZodType<AgentEvent>\n", "import type { AgentEvent } from '#protocol/agentEvent'\nimport { AgentEventSchema } from '#protocol/agentEvent'\n\ntype WebSocketLike = {\n readyState: number\n send: (data: string) => void\n close: () => void\n addEventListener: (\n type: string,\n listener: (ev: unknown) => void,\n options?: unknown,\n ) => void\n removeEventListener?: (type: string, listener: (ev: unknown) => void) => void\n}\n\ntype WebSocketCtor = new (url: string) => WebSocketLike\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object') return null\n return value as Record<string, unknown>\n}\n\nfunction getGlobalWebSocketCtor(): WebSocketCtor | null {\n const ws = asRecord(globalThis)?.WebSocket\n return typeof ws === 'function' ? (ws as unknown as WebSocketCtor) : null\n}\n\nasync function getWebSocketImpl(): Promise<WebSocketCtor> {\n const globalWebSocket = getGlobalWebSocketCtor()\n if (globalWebSocket) return globalWebSocket\n\n const undici = await import('undici')\n const ws = asRecord(undici)?.WebSocket\n if (typeof ws === 'function') return ws as unknown as WebSocketCtor\n throw new Error('No WebSocket implementation available')\n}\n\nclass AsyncQueue<T> implements AsyncIterable<T>, AsyncIterator<T> {\n private items: T[] = []\n private resolvers: Array<(value: IteratorResult<T>) => void> = []\n private closed = false\n\n private static doneResult<T>(): IteratorResult<T> {\n return { value: undefined as unknown as T, done: true }\n }\n\n push(item: T) {\n if (this.closed) return\n const resolve = this.resolvers.shift()\n if (resolve) {\n resolve({ value: item, done: false })\n return\n }\n this.items.push(item)\n }\n\n close() {\n if (this.closed) return\n this.closed = true\n while (this.resolvers.length > 0) {\n const resolve = this.resolvers.shift()!\n resolve(AsyncQueue.doneResult())\n }\n }\n\n async next(): Promise<IteratorResult<T>> {\n if (this.items.length > 0) {\n return { value: this.items.shift()!, done: false }\n }\n if (this.closed) return AsyncQueue.doneResult()\n return await new Promise<IteratorResult<T>>(resolve => {\n this.resolvers.push(resolve)\n })\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this\n }\n}\n\nexport type KodeDaemonClient = {\n connect: (options?: { timeoutMs?: number }) => Promise<void>\n sendPrompt: (prompt: string) => void\n cancel: () => void\n events: AsyncIterable<AgentEvent>\n close: () => void\n wsUrl: string\n}\n\nexport function createKodeDaemonClient(args: {\n url: string\n token?: string\n}): KodeDaemonClient {\n const base = new URL(args.url)\n const token = args.token ?? base.searchParams.get('token') ?? ''\n if (!token) {\n throw new Error('Missing daemon token (pass ?token= or token option)')\n }\n\n const wsUrl = new URL(args.url)\n wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:'\n wsUrl.pathname = '/ws'\n wsUrl.searchParams.set('token', token)\n\n const queue = new AsyncQueue<AgentEvent>()\n let ws: WebSocketLike | null = null\n\n const connect = async (options?: { timeoutMs?: number }) => {\n if (ws && ws.readyState === 1) return\n const WebSocketImpl = await getWebSocketImpl()\n const socket: WebSocketLike = new WebSocketImpl(wsUrl.toString())\n ws = socket\n\n const timeoutMs = options?.timeoutMs ?? 5_000\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n cleanup()\n resolve()\n }\n const onError = () => {\n cleanup()\n reject(new Error('WebSocket connection error'))\n }\n\n const timer = setTimeout(() => {\n cleanup()\n reject(new Error('WebSocket connect timeout'))\n }, timeoutMs)\n\n const cleanup = () => {\n clearTimeout(timer)\n try {\n socket.removeEventListener?.('open', onOpen)\n socket.removeEventListener?.('error', onError)\n } catch {}\n }\n\n socket.addEventListener('open', onOpen, { once: true })\n socket.addEventListener('error', onError, { once: true })\n })\n\n socket.addEventListener('message', (ev: unknown) => {\n const raw = asRecord(ev)?.data\n const text = typeof raw === 'string' ? raw : String(raw ?? '')\n try {\n const parsed = JSON.parse(text)\n const validated = AgentEventSchema.safeParse(parsed)\n if (validated.success) queue.push(validated.data)\n } catch {\n // ignore\n }\n })\n\n socket.addEventListener('close', () => {\n queue.close()\n })\n }\n\n const sendPrompt = (prompt: string) => {\n if (!ws || ws.readyState !== 1) {\n throw new Error('Daemon client is not connected')\n }\n ws.send(JSON.stringify({ type: 'prompt', prompt }))\n }\n\n const cancel = () => {\n if (!ws || ws.readyState !== 1) return\n ws.send(JSON.stringify({ type: 'cancel' }))\n }\n\n const close = () => {\n try {\n ws?.close()\n } catch {}\n queue.close()\n }\n\n return {\n connect,\n sendPrompt,\n cancel,\n events: queue,\n close,\n wsUrl: wsUrl.toString(),\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|