@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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/utils/state/index.ts", "../src/utils/bun/shell.ts", "../src/utils/log/index.ts", "../src/services/telemetry/sentry.ts", "../src/constants/product.ts", "../src/utils/plan/planMode.ts", "../src/utils/system/execFileNoThrow.ts", "../src/utils/config/env.ts", "../src/utils/plan/planSlugWords.ts", "../src/utils/log/taskOutputStore.ts"],
|
|
4
|
-
"sourcesContent": ["import { cwd } from 'process'\nimport { BunShell } from '@utils/bun/shell'\n\nconst STATE: {\n originalCwd: string\n} = {\n originalCwd: cwd(),\n}\n\nexport async function setCwd(cwd: string): Promise<void> {\n await BunShell.getInstance().setCwd(cwd)\n}\n\nexport function setOriginalCwd(cwd: string): void {\n STATE.originalCwd = cwd\n}\n\nexport function getOriginalCwd(): string {\n return STATE.originalCwd\n}\n\nexport function getCwd(): string {\n return BunShell.getInstance().pwd()\n}\n", "import { spawn, type ChildProcess } from 'child_process'\nimport { existsSync, mkdirSync, realpathSync, statSync } from 'fs'\nimport { randomUUID } from 'crypto'\nimport { homedir } from 'os'\nimport { dirname, isAbsolute, resolve } from 'path'\nimport which from 'which'\nimport { logError } from '@utils/log'\nimport {\n appendTaskOutput,\n getTaskOutputFilePath,\n touchTaskOutputFile,\n} from '@utils/log/taskOutputStore'\n\ntype ShellChildProcess = ChildProcess & { exited: Promise<void> }\n\nfunction whichSync(bin: string): string | null {\n try {\n return which.sync(bin, { nothrow: true }) ?? null\n } catch {\n return null\n }\n}\n\nfunction whichOrSelf(bin: string): string {\n return whichSync(bin) ?? bin\n}\n\nfunction spawnWithExited(options: {\n cmd: string[]\n cwd: string\n env?: NodeJS.ProcessEnv\n}): ShellChildProcess {\n const child = spawn(options.cmd[0], options.cmd.slice(1), {\n cwd: options.cwd,\n env: options.env ?? process.env,\n stdio: ['inherit', 'pipe', 'pipe'],\n windowsHide: true,\n }) as ShellChildProcess\n\n child.exited = new Promise(resolve => {\n const done = () => resolve()\n child.once('exit', done)\n child.once('error', done)\n })\n\n return child\n}\n\ntype ExecResult = {\n stdout: string\n stderr: string\n code: number\n interrupted: boolean\n}\n\nexport type BunShellPromotableExecStatus =\n | 'running'\n | 'backgrounded'\n | 'completed'\n | 'killed'\n\nexport type BunShellPromotableExec = {\n get status(): BunShellPromotableExecStatus\n background: (bashId?: string) => { bashId: string } | null\n kill: () => void\n result: Promise<ExecResult>\n onTimeout?: (\n cb: (background: (bashId?: string) => { bashId: string } | null) => void,\n ) => void\n}\n\nexport type BunShellSandboxReadConfig = {\n denyOnly: string[]\n}\n\nexport type BunShellSandboxWriteConfig = {\n allowOnly: string[]\n denyWithinAllow?: string[]\n}\n\nfunction maybeAnnotateMacosSandboxStderr(\n stderr: string,\n sandbox: BunShellSandboxOptions | undefined,\n): string {\n if (!stderr) return stderr\n if (!sandbox || sandbox.enabled !== true) return stderr\n const platform = sandbox.__platformOverride ?? process.platform\n if (platform !== 'darwin') return stderr\n if (stderr.includes('[sandbox]')) return stderr\n\n const lower = stderr.toLowerCase()\n const looksLikeSandboxViolation =\n stderr.includes('KODE_SANDBOX') ||\n (lower.includes('sandbox-exec') &&\n (lower.includes('deny') || lower.includes('operation not permitted'))) ||\n (lower.includes('operation not permitted') && lower.includes('sandbox'))\n\n if (!looksLikeSandboxViolation) return stderr\n\n return [\n stderr.trimEnd(),\n '',\n '[sandbox] This failure looks like a macOS sandbox denial. Adjust sandbox settings (e.g. /sandbox or .kode/settings.json) to grant the minimal required access.',\n ].join('\\n')\n}\n\nfunction hasGlobPattern(value: string): boolean {\n return (\n value.includes('*') ||\n value.includes('?') ||\n value.includes('[') ||\n value.includes(']')\n )\n}\n\nexport function normalizeLinuxSandboxPath(\n input: string,\n options?: { cwd?: string; homeDir?: string },\n): string {\n const cwd = options?.cwd ?? process.cwd()\n const homeDir = options?.homeDir ?? homedir()\n\n let resolved = input\n if (input === '~') resolved = homeDir\n else if (input.startsWith('~/')) resolved = homeDir + input.slice(1)\n else if (input.startsWith('./') || input.startsWith('../'))\n resolved = resolve(cwd, input)\n else if (!isAbsolute(input)) resolved = resolve(cwd, input)\n\n if (hasGlobPattern(resolved)) {\n const prefix = resolved.split(/[*?[\\]]/)[0]\n if (prefix && prefix !== '/') {\n const dir = prefix.endsWith('/') ? prefix.slice(0, -1) : dirname(prefix)\n try {\n const real = realpathSync(dir)\n const suffix = resolved.slice(dir.length)\n return real + suffix\n } catch {\n }\n }\n return resolved\n }\n\n try {\n resolved = realpathSync(resolved)\n } catch {\n }\n\n return resolved\n}\n\nexport function buildLinuxBwrapFilesystemArgs(options: {\n cwd?: string\n homeDir?: string\n readConfig?: BunShellSandboxReadConfig\n writeConfig?: BunShellSandboxWriteConfig\n extraDenyWithinAllow?: string[]\n}): string[] {\n const cwd = options.cwd ?? process.cwd()\n const homeDir = options.homeDir ?? homedir()\n\n const args: string[] = []\n\n const writeConfig = options.writeConfig\n if (writeConfig) {\n args.push('--ro-bind', '/', '/')\n\n const allowedRoots: string[] = []\n\n if (existsSync('/tmp/kode')) {\n args.push('--bind', '/tmp/kode', '/tmp/kode')\n allowedRoots.push('/tmp/kode')\n }\n for (const raw of writeConfig.allowOnly ?? []) {\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\n if (resolved.startsWith('/dev/')) continue\n if (!existsSync(resolved)) continue\n args.push('--bind', resolved, resolved)\n allowedRoots.push(resolved)\n }\n\n const denyWithinAllow = [\n ...(writeConfig.denyWithinAllow ?? []),\n ...(options.extraDenyWithinAllow ?? []),\n ]\n for (const raw of denyWithinAllow) {\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\n if (resolved.startsWith('/dev/')) continue\n if (!existsSync(resolved)) continue\n const withinAllowed = allowedRoots.some(\n root => resolved === root || resolved.startsWith(root + '/'),\n )\n if (!withinAllowed) continue\n args.push('--ro-bind', resolved, resolved)\n }\n } else {\n args.push('--bind', '/', '/')\n }\n\n const denyRead = [...(options.readConfig?.denyOnly ?? [])]\n if (existsSync('/etc/ssh/ssh_config.d'))\n denyRead.push('/etc/ssh/ssh_config.d')\n\n for (const raw of denyRead) {\n const resolved = normalizeLinuxSandboxPath(raw, { cwd, homeDir })\n if (resolved.startsWith('/dev/')) continue\n if (!existsSync(resolved)) continue\n if (statSync(resolved).isDirectory()) args.push('--tmpfs', resolved)\n else args.push('--ro-bind', '/dev/null', resolved)\n }\n\n return args\n}\n\nexport function buildLinuxBwrapCommand(options: {\n bwrapPath: string\n command: string\n needsNetworkRestriction?: boolean\n readConfig?: BunShellSandboxReadConfig\n writeConfig?: BunShellSandboxWriteConfig\n enableWeakerNestedSandbox?: boolean\n binShellPath: string\n cwd?: string\n homeDir?: string\n}): string[] {\n const args: string[] = []\n\n args.push(\n '--die-with-parent',\n '--new-session',\n '--unshare-pid',\n '--unshare-uts',\n '--unshare-ipc',\n )\n if (options.needsNetworkRestriction) args.push('--unshare-net')\n\n args.push(\n ...buildLinuxBwrapFilesystemArgs({\n cwd: options.cwd,\n homeDir: options.homeDir,\n readConfig: options.readConfig,\n writeConfig: options.writeConfig,\n }),\n )\n\n args.push(\n '--dev',\n '/dev',\n '--setenv',\n 'SANDBOX_RUNTIME',\n '1',\n '--setenv',\n 'TMPDIR',\n '/tmp/kode',\n )\n if (!options.enableWeakerNestedSandbox) args.push('--proc', '/proc')\n\n args.push('--', options.binShellPath, '-c', options.command)\n\n return [options.bwrapPath, ...args]\n}\n\nfunction buildSandboxEnvAssignments(options?: {\n httpProxyPort?: number\n socksProxyPort?: number\n platform?: NodeJS.Platform\n}): string[] {\n const httpProxyPort = options?.httpProxyPort\n const socksProxyPort = options?.socksProxyPort\n const platform = options?.platform ?? process.platform\n\n const env: string[] = ['SANDBOX_RUNTIME=1', 'TMPDIR=/tmp/kode']\n if (!httpProxyPort && !socksProxyPort) return env\n\n const noProxy = [\n 'localhost',\n '127.0.0.1',\n '::1',\n '*.local',\n '.local',\n '169.254.0.0/16',\n '10.0.0.0/8',\n '172.16.0.0/12',\n '192.168.0.0/16',\n ].join(',')\n env.push(`NO_PROXY=${noProxy}`)\n env.push(`no_proxy=${noProxy}`)\n\n if (httpProxyPort) {\n env.push(`HTTP_PROXY=http://localhost:${httpProxyPort}`)\n env.push(`HTTPS_PROXY=http://localhost:${httpProxyPort}`)\n env.push(`http_proxy=http://localhost:${httpProxyPort}`)\n env.push(`https_proxy=http://localhost:${httpProxyPort}`)\n }\n\n if (socksProxyPort) {\n env.push(`ALL_PROXY=socks5h://localhost:${socksProxyPort}`)\n env.push(`all_proxy=socks5h://localhost:${socksProxyPort}`)\n if (platform === 'darwin') {\n env.push(\n `GIT_SSH_COMMAND=\"ssh -o ProxyCommand='nc -X 5 -x localhost:${socksProxyPort} %h %p'\"`,\n )\n }\n env.push(`FTP_PROXY=socks5h://localhost:${socksProxyPort}`)\n env.push(`ftp_proxy=socks5h://localhost:${socksProxyPort}`)\n env.push(`RSYNC_PROXY=localhost:${socksProxyPort}`)\n env.push(\n `DOCKER_HTTP_PROXY=http://localhost:${httpProxyPort || socksProxyPort}`,\n )\n env.push(\n `DOCKER_HTTPS_PROXY=http://localhost:${httpProxyPort || socksProxyPort}`,\n )\n if (httpProxyPort) {\n env.push('CLOUDSDK_PROXY_TYPE=https')\n env.push('CLOUDSDK_PROXY_ADDRESS=localhost')\n env.push(`CLOUDSDK_PROXY_PORT=${httpProxyPort}`)\n }\n env.push(`GRPC_PROXY=socks5h://localhost:${socksProxyPort}`)\n env.push(`grpc_proxy=socks5h://localhost:${socksProxyPort}`)\n }\n\n return env\n}\n\nfunction escapeRegexForSandboxGlobPattern(pattern: string): string {\n return (\n '^' +\n pattern\n .replace(/[.^$+{}()|\\\\]/g, '\\\\$&')\n .replace(/\\[([^\\]]*?)$/g, '\\\\[$1')\n .replace(/\\*\\*\\//g, '__GLOBSTAR_SLASH__')\n .replace(/\\*\\*/g, '__GLOBSTAR__')\n .replace(/\\*/g, '[^/]*')\n .replace(/\\?/g, '[^/]')\n .replace(/__GLOBSTAR_SLASH__/g, '(.*/)?')\n .replace(/__GLOBSTAR__/g, '.*') +\n '$'\n )\n}\n\nfunction getMacosTmpDirWriteAllowPaths(): string[] {\n const tmpdirValue = process.env.TMPDIR\n if (!tmpdirValue) return []\n if (!tmpdirValue.match(/^\\/(private\\/)?var\\/folders\\/[^/]{2}\\/[^/]+\\/T\\/?$/))\n return []\n const base = tmpdirValue.replace(/\\/T\\/?$/, '')\n if (base.startsWith('/private/var/'))\n return [base, base.replace('/private', '')]\n if (base.startsWith('/var/')) return [base, '/private' + base]\n return [base]\n}\n\nfunction buildMacosSandboxDenyUnlinkRules(\n paths: string[],\n logTag: string,\n): string[] {\n const lines: string[] = []\n for (const raw of paths) {\n const normalized = normalizeLinuxSandboxPath(raw)\n if (hasGlobPattern(normalized)) {\n const regex = escapeRegexForSandboxGlobPattern(normalized)\n lines.push(\n '(deny file-write-unlink',\n ` (regex ${JSON.stringify(regex)})`,\n ` (with message \"${logTag}\"))`,\n )\n\n const prefix = normalized.split(/[*?[\\]]/)[0]\n if (prefix && prefix !== '/') {\n const literal = prefix.endsWith('/')\n ? prefix.slice(0, -1)\n : dirname(prefix)\n lines.push(\n '(deny file-write-unlink',\n ` (literal ${JSON.stringify(literal)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n continue\n }\n\n lines.push(\n '(deny file-write-unlink',\n ` (subpath ${JSON.stringify(normalized)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n return lines\n}\n\nfunction buildMacosSandboxFileReadRules(\n readConfig: BunShellSandboxReadConfig | undefined,\n logTag: string,\n): string[] {\n if (!readConfig) return ['(allow file-read*)']\n\n const lines: string[] = ['(allow file-read*)']\n for (const raw of readConfig.denyOnly ?? []) {\n const normalized = normalizeLinuxSandboxPath(raw)\n if (hasGlobPattern(normalized)) {\n const regex = escapeRegexForSandboxGlobPattern(normalized)\n lines.push(\n '(deny file-read*',\n ` (regex ${JSON.stringify(regex)})`,\n ` (with message \"${logTag}\"))`,\n )\n } else {\n lines.push(\n '(deny file-read*',\n ` (subpath ${JSON.stringify(normalized)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n }\n\n lines.push(\n ...buildMacosSandboxDenyUnlinkRules(readConfig.denyOnly ?? [], logTag),\n )\n return lines\n}\n\nfunction buildMacosSandboxFileWriteRules(\n writeConfig: BunShellSandboxWriteConfig | undefined,\n logTag: string,\n): string[] {\n if (!writeConfig) return ['(allow file-write*)']\n\n const lines: string[] = []\n\n lines.push(\n '(allow file-write*',\n ` (literal \"/dev/null\")`,\n ` (with message \"${logTag}\"))`,\n )\n\n for (const raw of getMacosTmpDirWriteAllowPaths()) {\n const normalized = normalizeLinuxSandboxPath(raw)\n lines.push(\n '(allow file-write*',\n ` (subpath ${JSON.stringify(normalized)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n\n for (const raw of writeConfig.allowOnly ?? []) {\n const normalized = normalizeLinuxSandboxPath(raw)\n if (hasGlobPattern(normalized)) {\n const regex = escapeRegexForSandboxGlobPattern(normalized)\n lines.push(\n '(allow file-write*',\n ` (regex ${JSON.stringify(regex)})`,\n ` (with message \"${logTag}\"))`,\n )\n } else {\n lines.push(\n '(allow file-write*',\n ` (subpath ${JSON.stringify(normalized)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n }\n\n for (const raw of writeConfig.denyWithinAllow ?? []) {\n const normalized = normalizeLinuxSandboxPath(raw)\n if (hasGlobPattern(normalized)) {\n const regex = escapeRegexForSandboxGlobPattern(normalized)\n lines.push(\n '(deny file-write*',\n ` (regex ${JSON.stringify(regex)})`,\n ` (with message \"${logTag}\"))`,\n )\n } else {\n lines.push(\n '(deny file-write*',\n ` (subpath ${JSON.stringify(normalized)})`,\n ` (with message \"${logTag}\"))`,\n )\n }\n }\n\n lines.push(\n ...buildMacosSandboxDenyUnlinkRules(\n writeConfig.denyWithinAllow ?? [],\n logTag,\n ),\n )\n return lines\n}\n\nexport function buildMacosSandboxExecCommand(options: {\n sandboxExecPath: string\n binShellPath: string\n command: string\n needsNetworkRestriction: boolean\n httpProxyPort?: number\n socksProxyPort?: number\n allowUnixSockets?: string[]\n allowAllUnixSockets?: boolean\n allowLocalBinding?: boolean\n readConfig?: BunShellSandboxReadConfig\n writeConfig?: BunShellSandboxWriteConfig\n}): string[] {\n const logTag = 'KODE_SANDBOX'\n\n const profileLines: string[] = [\n '(version 1)',\n `(deny default (with message \"${logTag}\"))`,\n '',\n '; Kode sandbox-exec profile (reference CLI compatible)',\n '',\n '(allow process*)',\n '(allow sysctl-read)',\n '(allow mach-lookup)',\n '',\n '; Network',\n ]\n\n const allowUnixSockets = options.allowUnixSockets ?? []\n if (!options.needsNetworkRestriction) {\n profileLines.push('(allow network*)')\n } else {\n if (options.allowLocalBinding) {\n profileLines.push('(allow network-bind (local ip \"localhost:*\"))')\n profileLines.push('(allow network-inbound (local ip \"localhost:*\"))')\n profileLines.push('(allow network-outbound (local ip \"localhost:*\"))')\n }\n if (options.allowAllUnixSockets) {\n profileLines.push('(allow network* (subpath \"/\"))')\n } else if (allowUnixSockets.length > 0) {\n for (const socketPath of allowUnixSockets) {\n const normalized = normalizeLinuxSandboxPath(socketPath)\n profileLines.push(\n `(allow network* (subpath ${JSON.stringify(normalized)}))`,\n )\n }\n }\n if (options.httpProxyPort !== undefined) {\n profileLines.push(\n `(allow network-bind (local ip \"localhost:${options.httpProxyPort}\"))`,\n )\n profileLines.push(\n `(allow network-inbound (local ip \"localhost:${options.httpProxyPort}\"))`,\n )\n profileLines.push(\n `(allow network-outbound (remote ip \"localhost:${options.httpProxyPort}\"))`,\n )\n }\n if (options.socksProxyPort !== undefined) {\n profileLines.push(\n `(allow network-bind (local ip \"localhost:${options.socksProxyPort}\"))`,\n )\n profileLines.push(\n `(allow network-inbound (local ip \"localhost:${options.socksProxyPort}\"))`,\n )\n profileLines.push(\n `(allow network-outbound (remote ip \"localhost:${options.socksProxyPort}\"))`,\n )\n }\n }\n\n profileLines.push('')\n profileLines.push('; File read')\n profileLines.push(\n ...buildMacosSandboxFileReadRules(options.readConfig, logTag),\n )\n profileLines.push('')\n profileLines.push('; File write')\n profileLines.push(\n ...buildMacosSandboxFileWriteRules(options.writeConfig, logTag),\n )\n\n const profile = profileLines.join('\\n')\n const envAssignments = buildSandboxEnvAssignments({\n httpProxyPort: options.httpProxyPort,\n socksProxyPort: options.socksProxyPort,\n platform: 'darwin',\n })\n const envPrefix = envAssignments.length\n ? `export ${envAssignments.join(' ')} && `\n : ''\n\n return [\n options.sandboxExecPath,\n '-p',\n profile,\n options.binShellPath,\n '-c',\n `${envPrefix}${options.command}`,\n ]\n}\n\nexport type BunShellSandboxOptions = {\n enabled: boolean\n require?: boolean\n needsNetworkRestriction?: boolean\n allowNetwork?: boolean\n\n allowUnixSockets?: string[]\n allowAllUnixSockets?: boolean\n allowLocalBinding?: boolean\n httpProxyPort?: number\n socksProxyPort?: number\n\n readConfig?: BunShellSandboxReadConfig\n writeConfig?: BunShellSandboxWriteConfig\n enableWeakerNestedSandbox?: boolean\n binShell?: string\n\n writableRoots?: string[]\n chdir?: string\n\n __platformOverride?: NodeJS.Platform\n __bwrapPathOverride?: string | null\n __sandboxExecPathOverride?: string | null\n}\n\nexport type BunShellExecOptions = {\n sandbox?: BunShellSandboxOptions\n onStdoutChunk?: (chunk: string) => void\n onStderrChunk?: (chunk: string) => void\n}\n\nexport type BackgroundShellStatusAttachment = {\n type: 'task_progress'\n taskId: string\n stdoutLineDelta: number\n stderrLineDelta: number\n outputFile: string\n}\n\nexport function renderBackgroundShellStatusAttachment(\n attachment: BackgroundShellStatusAttachment,\n): string {\n const parts: string[] = []\n if (attachment.stdoutLineDelta > 0) {\n const n = attachment.stdoutLineDelta\n parts.push(`${n} line${n > 1 ? 's' : ''} of stdout`)\n }\n if (attachment.stderrLineDelta > 0) {\n const n = attachment.stderrLineDelta\n parts.push(`${n} line${n > 1 ? 's' : ''} of stderr`)\n }\n if (parts.length === 0) return ''\n return `Background bash ${attachment.taskId} has new output: ${parts.join(', ')}. Read ${attachment.outputFile} to see output.`\n}\n\nexport type BashNotification = {\n type: 'bash_notification'\n taskId: string\n description: string\n status: 'completed' | 'failed' | 'killed'\n exitCode?: number\n outputFile: string\n}\n\nexport function renderBashNotification(notification: BashNotification): string {\n const status = notification.status\n const exitCode = notification.exitCode\n\n const summarySuffix =\n status === 'completed'\n ? `completed${exitCode !== undefined ? ` (exit code ${exitCode})` : ''}`\n : status === 'failed'\n ? `failed${exitCode !== undefined ? ` with exit code ${exitCode}` : ''}`\n : 'was killed'\n\n return [\n '<bash-notification>',\n `<shell-id>${notification.taskId}</shell-id>`,\n `<output-file>${notification.outputFile}</output-file>`,\n `<status>${status}</status>`,\n `<summary>Background command \"${notification.description}\" ${summarySuffix}.</summary>`,\n 'Read the output file to retrieve the output.',\n '</bash-notification>',\n ].join('\\n')\n}\n\ntype BackgroundProcess = {\n id: string\n command: string\n stdout: string\n stderr: string\n stdoutCursor: number\n stderrCursor: number\n stdoutLineCount: number\n stderrLineCount: number\n lastReportedStdoutLines: number\n lastReportedStderrLines: number\n code: number | null\n interrupted: boolean\n killed: boolean\n timedOut: boolean\n completionStatusSentInAttachment: boolean\n notified: boolean\n startedAt: number\n timeoutAt: number\n process: ShellChildProcess\n abortController: AbortController\n timeoutHandle: ReturnType<typeof setTimeout> | null\n cwd: string\n outputFile: string\n}\n\nexport class BunShell {\n private cwd: string\n private isAlive: boolean = true\n private currentProcess: ShellChildProcess | null = null\n private abortController: AbortController | null = null\n private backgroundProcesses: Map<string, BackgroundProcess> = new Map()\n\n constructor(cwd: string) {\n this.cwd = cwd\n }\n\n private static instance: BunShell | null = null\n\n static restart() {\n if (BunShell.instance) {\n BunShell.instance.close()\n BunShell.instance = null\n }\n }\n\n static getInstance(): BunShell {\n if (!BunShell.instance || !BunShell.instance.isAlive) {\n BunShell.instance = new BunShell(process.cwd())\n }\n return BunShell.instance\n }\n\n static getShellCmdForPlatform(\n platform: NodeJS.Platform,\n command: string,\n env: NodeJS.ProcessEnv = process.env,\n ): string[] {\n if (platform === 'win32') {\n const comspec =\n typeof env.ComSpec === 'string' && env.ComSpec.length > 0\n ? env.ComSpec\n : 'cmd'\n return [comspec, '/c', command]\n }\n const sh = existsSync('/bin/sh') ? '/bin/sh' : 'sh'\n return [sh, '-c', command]\n }\n\n private getShellCmd(command: string): string[] {\n return BunShell.getShellCmdForPlatform(\n process.platform,\n command,\n process.env,\n )\n }\n\n private buildSandboxCmd(\n command: string,\n sandbox: BunShellSandboxOptions,\n ): { cmd: string[]; warning?: string } | null {\n if (!sandbox.enabled) return null\n const platform = sandbox.__platformOverride ?? process.platform\n\n const needsNetworkRestriction =\n sandbox.needsNetworkRestriction !== undefined\n ? sandbox.needsNetworkRestriction\n : sandbox.allowNetwork === true\n ? false\n : true\n\n const writeConfig: BunShellSandboxWriteConfig | undefined =\n sandbox.writeConfig ??\n (sandbox.writableRoots && sandbox.writableRoots.length > 0\n ? { allowOnly: sandbox.writableRoots.filter(Boolean) }\n : undefined)\n\n const readConfig = sandbox.readConfig\n\n const hasReadRestrictions = (readConfig?.denyOnly?.length ?? 0) > 0\n const hasWriteRestrictions = writeConfig !== undefined\n const hasNetworkRestrictions = needsNetworkRestriction === true\n\n if (\n !hasReadRestrictions &&\n !hasWriteRestrictions &&\n !hasNetworkRestrictions\n ) {\n return null\n }\n\n const binShell = sandbox.binShell ?? (whichSync('bash') ? 'bash' : 'sh')\n const binShellPath = whichOrSelf(binShell)\n\n const cwd = sandbox.chdir || this.cwd\n\n if (platform === 'linux') {\n const bwrapPath =\n sandbox.__bwrapPathOverride !== undefined\n ? sandbox.__bwrapPathOverride\n : (whichSync('bwrap') ?? whichSync('bubblewrap'))\n if (!bwrapPath) {\n return null\n }\n\n try {\n mkdirSync('/tmp/kode', { recursive: true })\n } catch {}\n\n const cmd = buildLinuxBwrapCommand({\n bwrapPath,\n command,\n needsNetworkRestriction,\n readConfig,\n writeConfig,\n enableWeakerNestedSandbox: sandbox.enableWeakerNestedSandbox,\n binShellPath,\n cwd,\n })\n\n return { cmd }\n }\n\n if (platform === 'darwin') {\n const sandboxExecPath =\n sandbox.__sandboxExecPathOverride !== undefined\n ? sandbox.__sandboxExecPathOverride\n : existsSync('/usr/bin/sandbox-exec')\n ? '/usr/bin/sandbox-exec'\n : whichSync('sandbox-exec')\n if (!sandboxExecPath) {\n return null\n }\n\n try {\n mkdirSync('/tmp/kode', { recursive: true })\n } catch {}\n try {\n mkdirSync('/private/tmp/kode', { recursive: true })\n } catch {}\n\n return {\n cmd: buildMacosSandboxExecCommand({\n sandboxExecPath,\n binShellPath,\n command,\n needsNetworkRestriction,\n httpProxyPort: sandbox.httpProxyPort,\n socksProxyPort: sandbox.socksProxyPort,\n allowUnixSockets: sandbox.allowUnixSockets,\n allowAllUnixSockets: sandbox.allowAllUnixSockets,\n allowLocalBinding: sandbox.allowLocalBinding,\n readConfig,\n writeConfig,\n }),\n }\n }\n\n return null\n }\n\n private isSandboxInitFailure(stderr: string): boolean {\n const s = stderr.toLowerCase()\n return (\n s.includes('bwrap:') ||\n s.includes('bubblewrap') ||\n (s.includes('namespace') && s.includes('failed'))\n )\n }\n\n private startStreamReader(\n stream: NodeJS.ReadableStream | null,\n append: (chunk: string) => void,\n ): void {\n if (!stream) return\n try {\n ;(stream as any).setEncoding?.('utf8')\n } catch {}\n stream.on('data', chunk => {\n append(\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk),\n )\n })\n stream.on('error', err => {\n logError(`Stream read error: ${err}`)\n })\n }\n\n private createCancellableTextCollector(\n stream: NodeJS.ReadableStream | null,\n options?: { onChunk?: (chunk: string) => void; collectText?: boolean },\n ): {\n getText: () => string\n done: Promise<void>\n cancel: () => Promise<void>\n } {\n let text = ''\n const collectText = options?.collectText !== false\n if (!stream) {\n return {\n getText: () => text,\n done: Promise.resolve(),\n cancel: async () => {},\n }\n }\n\n let cancelled = false\n\n let resolveDone: (() => void) | null = null\n const done = new Promise<void>(resolve => {\n resolveDone = resolve\n })\n\n const finish = () => {\n if (!resolveDone) return\n resolveDone()\n resolveDone = null\n }\n\n const onData = (chunk: unknown) => {\n if (cancelled) return\n const s =\n typeof chunk === 'string'\n ? chunk\n : Buffer.isBuffer(chunk)\n ? chunk.toString('utf8')\n : String(chunk)\n if (collectText) text += s\n options?.onChunk?.(s)\n }\n\n const onEnd = () => {\n cleanup()\n finish()\n }\n\n const onClose = () => {\n cleanup()\n finish()\n }\n\n const cleanup = () => {\n stream.off('data', onData)\n stream.off('end', onEnd)\n stream.off('close', onClose)\n stream.off('error', onError)\n }\n\n const onError = (err: unknown) => {\n if (!cancelled) {\n logError(`Stream read error: ${err}`)\n }\n cleanup()\n finish()\n }\n\n try {\n ;(stream as any).setEncoding?.('utf8')\n } catch {}\n\n stream.on('data', onData)\n stream.once('end', onEnd)\n stream.once('close', onClose)\n stream.once('error', onError)\n\n return {\n getText: () => text,\n done,\n cancel: async () => {\n if (cancelled) return\n cancelled = true\n cleanup()\n finish()\n },\n }\n }\n\n private static makeBackgroundTaskId(): string {\n return `b${randomUUID().replace(/-/g, '').slice(0, 6)}`\n }\n\n execPromotable(\n command: string,\n abortSignal?: AbortSignal,\n timeout?: number,\n options?: BunShellExecOptions,\n ): BunShellPromotableExec {\n const DEFAULT_TIMEOUT = 120_000\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\n const startedAt = Date.now()\n\n const sandbox = options?.sandbox\n const shouldAttemptSandbox = sandbox?.enabled === true\n const executionCwd =\n shouldAttemptSandbox && sandbox?.chdir ? sandbox.chdir : this.cwd\n\n if (abortSignal?.aborted) {\n return {\n get status(): BunShellPromotableExecStatus {\n return 'killed'\n },\n background: () => null,\n kill: () => {},\n result: Promise.resolve({\n stdout: '',\n stderr: 'Command aborted before execution',\n code: 145,\n interrupted: true,\n }),\n }\n }\n\n const sandboxCmd = shouldAttemptSandbox\n ? this.buildSandboxCmd(command, sandbox!)\n : null\n if (shouldAttemptSandbox && sandbox?.require && !sandboxCmd) {\n return {\n get status(): BunShellPromotableExecStatus {\n return 'killed'\n },\n background: () => null,\n kill: () => {},\n result: Promise.resolve({\n stdout: '',\n stderr:\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\n code: 2,\n interrupted: false,\n }),\n }\n }\n\n const cmdToRun = sandboxCmd ? sandboxCmd.cmd : this.getShellCmd(command)\n\n const internalAbortController = new AbortController()\n this.abortController = internalAbortController\n\n let status: BunShellPromotableExecStatus = 'running'\n let backgroundProcess: BackgroundProcess | null = null\n let backgroundTaskId: string | null = null\n let stdout = ''\n let stderr = ''\n let wasAborted = false\n let wasBackgrounded = false\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null\n let timedOut = false\n let onTimeoutCb:\n | ((background: (bashId?: string) => { bashId: string } | null) => void)\n | null = null\n\n const countNonEmptyLines = (chunk: string): number =>\n chunk.split('\\n').filter(line => line.length > 0).length\n\n const spawnedProcess = spawnWithExited({ cmd: cmdToRun, cwd: executionCwd })\n this.currentProcess = spawnedProcess\n\n const onAbort = () => {\n if (status === 'backgrounded') return\n wasAborted = true\n try {\n internalAbortController.abort()\n } catch {}\n try {\n spawnedProcess.kill()\n } catch {}\n if (backgroundProcess) backgroundProcess.interrupted = true\n }\n\n const clearForegroundGuards = () => {\n if (timeoutHandle) {\n clearTimeout(timeoutHandle)\n timeoutHandle = null\n }\n if (abortSignal) {\n abortSignal.removeEventListener('abort', onAbort)\n }\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', onAbort, { once: true })\n if (abortSignal.aborted) onAbort()\n }\n\n const stdoutCollector = this.createCancellableTextCollector(\n spawnedProcess.stdout,\n {\n collectText: false,\n onChunk: chunk => {\n stdout += chunk\n options?.onStdoutChunk?.(chunk)\n if (backgroundProcess) {\n backgroundProcess.stdout = stdout\n appendTaskOutput(backgroundProcess.id, chunk)\n backgroundProcess.stdoutLineCount += countNonEmptyLines(chunk)\n }\n },\n },\n )\n const stderrCollector = this.createCancellableTextCollector(\n spawnedProcess.stderr,\n {\n collectText: false,\n onChunk: chunk => {\n stderr += chunk\n options?.onStderrChunk?.(chunk)\n if (backgroundProcess) {\n backgroundProcess.stderr = stderr\n appendTaskOutput(backgroundProcess.id, chunk)\n backgroundProcess.stderrLineCount += countNonEmptyLines(chunk)\n }\n },\n },\n )\n\n timeoutHandle = setTimeout(() => {\n if (status !== 'running') return\n if (onTimeoutCb) {\n onTimeoutCb(background)\n return\n }\n timedOut = true\n try {\n spawnedProcess.kill()\n } catch {}\n try {\n internalAbortController.abort()\n } catch {}\n }, commandTimeout)\n\n const background = (bashId?: string): { bashId: string } | null => {\n if (backgroundTaskId) return { bashId: backgroundTaskId }\n if (status !== 'running') return null\n\n backgroundTaskId = bashId ?? BunShell.makeBackgroundTaskId()\n const outputFile = touchTaskOutputFile(backgroundTaskId)\n if (stdout) appendTaskOutput(backgroundTaskId, stdout)\n if (stderr) appendTaskOutput(backgroundTaskId, stderr)\n\n status = 'backgrounded'\n wasBackgrounded = true\n clearForegroundGuards()\n\n backgroundProcess = {\n id: backgroundTaskId,\n command,\n stdout,\n stderr,\n stdoutCursor: 0,\n stderrCursor: 0,\n stdoutLineCount: countNonEmptyLines(stdout),\n stderrLineCount: countNonEmptyLines(stderr),\n lastReportedStdoutLines: 0,\n lastReportedStderrLines: 0,\n code: null,\n interrupted: false,\n killed: false,\n timedOut: false,\n completionStatusSentInAttachment: false,\n notified: false,\n startedAt,\n timeoutAt: Number.POSITIVE_INFINITY,\n process: spawnedProcess,\n abortController: internalAbortController,\n timeoutHandle: null,\n cwd: executionCwd,\n outputFile,\n }\n\n this.backgroundProcesses.set(backgroundTaskId, backgroundProcess)\n\n this.currentProcess = null\n this.abortController = null\n\n return { bashId: backgroundTaskId }\n }\n\n const kill = () => {\n status = 'killed'\n try {\n spawnedProcess.kill()\n } catch {}\n try {\n internalAbortController.abort()\n } catch {}\n\n if (backgroundProcess) {\n backgroundProcess.interrupted = true\n backgroundProcess.killed = true\n }\n }\n\n const result = (async (): Promise<ExecResult> => {\n try {\n await spawnedProcess.exited\n\n if (status === 'running' || status === 'backgrounded')\n status = 'completed'\n\n if (backgroundProcess) {\n backgroundProcess.code = spawnedProcess.exitCode ?? 0\n backgroundProcess.interrupted =\n backgroundProcess.interrupted ||\n wasAborted ||\n internalAbortController.signal.aborted\n }\n\n if (!wasBackgrounded) {\n await Promise.race([\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\n new Promise(resolve => setTimeout(resolve, 250)),\n ])\n await Promise.allSettled([\n stdoutCollector.cancel(),\n stderrCollector.cancel(),\n ])\n }\n\n const interrupted =\n wasAborted ||\n abortSignal?.aborted === true ||\n internalAbortController.signal.aborted === true ||\n timedOut\n\n let code = spawnedProcess.exitCode\n if (!Number.isFinite(code as any)) {\n code = interrupted ? 143 : 0\n }\n\n const stderrWithTimeout = timedOut\n ? [`Command timed out`, stderr].filter(Boolean).join('\\n')\n : stderr\n const stderrAnnotated = sandboxCmd\n ? maybeAnnotateMacosSandboxStderr(stderrWithTimeout, sandbox)\n : stderrWithTimeout\n\n return {\n stdout,\n stderr: stderrAnnotated,\n code: code as number,\n interrupted,\n }\n } finally {\n clearForegroundGuards()\n\n if (this.currentProcess === spawnedProcess) {\n this.currentProcess = null\n this.abortController = null\n }\n }\n })()\n\n const execHandle: BunShellPromotableExec = {\n get status() {\n return status\n },\n background,\n kill,\n result,\n }\n\n execHandle.onTimeout = cb => {\n onTimeoutCb = cb\n }\n\n result\n .then(r => {\n if (!backgroundProcess || !backgroundTaskId) return\n backgroundProcess.code = r.code\n backgroundProcess.interrupted = r.interrupted\n })\n .catch(() => {\n if (!backgroundProcess) return\n backgroundProcess.code = backgroundProcess.code ?? 2\n })\n\n return execHandle\n }\n\n async exec(\n command: string,\n abortSignal?: AbortSignal,\n timeout?: number,\n options?: BunShellExecOptions,\n ): Promise<ExecResult> {\n const DEFAULT_TIMEOUT = 120_000\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\n\n this.abortController = new AbortController()\n let wasAborted = false\n const onAbort = () => {\n wasAborted = true\n try {\n this.abortController?.abort()\n } catch {}\n try {\n this.currentProcess?.kill()\n } catch {}\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', onAbort, { once: true })\n }\n\n const sandbox = options?.sandbox\n const shouldAttemptSandbox = sandbox?.enabled === true\n const executionCwd =\n shouldAttemptSandbox && sandbox?.chdir ? sandbox.chdir : this.cwd\n\n const runOnce = async (\n cmd: string[],\n cwdOverride?: string,\n ): Promise<ExecResult> => {\n this.currentProcess = spawnWithExited({\n cmd,\n cwd: cwdOverride ?? executionCwd,\n })\n\n const stdoutCollector = this.createCancellableTextCollector(\n this.currentProcess.stdout,\n { onChunk: options?.onStdoutChunk },\n )\n const stderrCollector = this.createCancellableTextCollector(\n this.currentProcess.stderr,\n { onChunk: options?.onStderrChunk },\n )\n\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null\n const timeoutPromise = new Promise<'timeout'>(resolve => {\n timeoutHandle = setTimeout(() => resolve('timeout'), commandTimeout)\n })\n\n const result = await Promise.race([\n this.currentProcess.exited.then(() => 'completed' as const),\n timeoutPromise,\n ])\n if (timeoutHandle) clearTimeout(timeoutHandle)\n\n if (result === 'timeout') {\n try {\n this.currentProcess.kill()\n } catch {}\n try {\n this.abortController.abort()\n } catch {}\n\n try {\n await this.currentProcess.exited\n } catch {}\n\n await Promise.race([\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\n new Promise(resolve => setTimeout(resolve, 250)),\n ])\n await Promise.allSettled([\n stdoutCollector.cancel(),\n stderrCollector.cancel(),\n ])\n return {\n stdout: '',\n stderr: 'Command timed out',\n code: 143,\n interrupted: true,\n }\n }\n\n await Promise.race([\n Promise.allSettled([stdoutCollector.done, stderrCollector.done]),\n new Promise(resolve => setTimeout(resolve, 250)),\n ])\n await Promise.allSettled([\n stdoutCollector.cancel(),\n stderrCollector.cancel(),\n ])\n\n const stdout = stdoutCollector.getText()\n const stderr = stderrCollector.getText()\n const interrupted =\n wasAborted ||\n abortSignal?.aborted === true ||\n this.abortController?.signal.aborted === true\n const exitCode = this.currentProcess.exitCode ?? (interrupted ? 143 : 0)\n\n return {\n stdout,\n stderr,\n code: exitCode,\n interrupted,\n }\n }\n\n try {\n if (shouldAttemptSandbox) {\n const sandboxCmd = this.buildSandboxCmd(command, sandbox!)\n if (!sandboxCmd) {\n if (sandbox?.require) {\n return {\n stdout: '',\n stderr:\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\n code: 2,\n interrupted: false,\n }\n }\n const fallback = await runOnce(this.getShellCmd(command))\n return {\n ...fallback,\n stderr:\n `[sandbox] unavailable, ran without isolation.\\n${fallback.stderr}`.trim(),\n }\n }\n\n const sandboxed = await runOnce(sandboxCmd.cmd)\n sandboxed.stderr = maybeAnnotateMacosSandboxStderr(\n sandboxed.stderr,\n sandbox,\n )\n if (\n !sandboxed.interrupted &&\n sandboxed.code !== 0 &&\n this.isSandboxInitFailure(sandboxed.stderr) &&\n !sandbox?.require\n ) {\n const fallback = await runOnce(this.getShellCmd(command))\n return {\n ...fallback,\n stderr:\n `[sandbox] failed to start, ran without isolation.\\n${fallback.stderr}`.trim(),\n }\n }\n\n return sandboxed\n }\n\n return await runOnce(this.getShellCmd(command))\n } catch (error) {\n if (this.abortController.signal.aborted) {\n this.currentProcess?.kill()\n return {\n stdout: '',\n stderr: 'Command was interrupted',\n code: 143,\n interrupted: true,\n }\n }\n\n const errorStr = error instanceof Error ? error.message : String(error)\n logError(`Shell execution error: ${errorStr}`)\n\n return {\n stdout: '',\n stderr: errorStr,\n code: 2,\n interrupted: false,\n }\n } finally {\n if (abortSignal) {\n abortSignal.removeEventListener('abort', onAbort)\n }\n this.currentProcess = null\n this.abortController = null\n }\n }\n\n execInBackground(\n command: string,\n timeout?: number,\n options?: BunShellExecOptions,\n ): { bashId: string } {\n const DEFAULT_TIMEOUT = 120_000\n const commandTimeout = timeout ?? DEFAULT_TIMEOUT\n const abortController = new AbortController()\n\n const sandbox = options?.sandbox\n const sandboxCmd =\n sandbox?.enabled === true ? this.buildSandboxCmd(command, sandbox) : null\n const executionCwd =\n sandbox?.enabled === true && sandbox?.chdir ? sandbox.chdir : this.cwd\n\n if (sandbox?.enabled === true && sandbox?.require && !sandboxCmd) {\n throw new Error(\n 'System sandbox is required but unavailable (missing bubblewrap or unsupported platform).',\n )\n }\n\n const cmdToRun = sandboxCmd ? sandboxCmd.cmd : this.getShellCmd(command)\n\n const bashId = BunShell.makeBackgroundTaskId()\n const outputFile = touchTaskOutputFile(bashId)\n\n const process = spawnWithExited({ cmd: cmdToRun, cwd: executionCwd })\n const timeoutHandle = setTimeout(() => {\n abortController.abort()\n backgroundProcess.timedOut = true\n process.kill()\n }, commandTimeout)\n\n const backgroundProcess: BackgroundProcess = {\n id: bashId,\n command,\n stdout: '',\n stderr: '',\n stdoutCursor: 0,\n stderrCursor: 0,\n stdoutLineCount: 0,\n stderrLineCount: 0,\n lastReportedStdoutLines: 0,\n lastReportedStderrLines: 0,\n code: null,\n interrupted: false,\n killed: false,\n timedOut: false,\n completionStatusSentInAttachment: false,\n notified: false,\n startedAt: Date.now(),\n timeoutAt: Date.now() + commandTimeout,\n process,\n abortController,\n timeoutHandle,\n cwd: executionCwd,\n outputFile,\n }\n\n const countNonEmptyLines = (chunk: string): number =>\n chunk.split('\\n').filter(line => line.length > 0).length\n\n this.startStreamReader(process.stdout, chunk => {\n backgroundProcess.stdout += chunk\n appendTaskOutput(bashId, chunk)\n backgroundProcess.stdoutLineCount += countNonEmptyLines(chunk)\n })\n this.startStreamReader(process.stderr, chunk => {\n backgroundProcess.stderr += chunk\n appendTaskOutput(bashId, chunk)\n backgroundProcess.stderrLineCount += countNonEmptyLines(chunk)\n })\n\n process.exited.then(() => {\n backgroundProcess.code = process.exitCode ?? 0\n backgroundProcess.interrupted =\n backgroundProcess.interrupted || abortController.signal.aborted\n if (sandbox?.enabled === true) {\n backgroundProcess.stderr = maybeAnnotateMacosSandboxStderr(\n backgroundProcess.stderr,\n sandbox,\n )\n }\n if (backgroundProcess.timeoutHandle) {\n clearTimeout(backgroundProcess.timeoutHandle)\n backgroundProcess.timeoutHandle = null\n }\n })\n\n this.backgroundProcesses.set(bashId, backgroundProcess)\n return { bashId }\n }\n\n getBackgroundOutput(shellId: string): {\n stdout: string\n stderr: string\n code: number | null\n interrupted: boolean\n killed: boolean\n timedOut: boolean\n running: boolean\n command: string\n cwd: string\n startedAt: number\n timeoutAt: number\n outputFile: string\n } | null {\n const proc = this.backgroundProcesses.get(shellId)\n if (!proc) return null\n const running = proc.code === null && !proc.interrupted\n return {\n stdout: proc.stdout,\n stderr: proc.stderr,\n code: proc.code,\n interrupted: proc.interrupted,\n killed: proc.killed,\n timedOut: proc.timedOut,\n running,\n command: proc.command,\n cwd: proc.cwd,\n startedAt: proc.startedAt,\n timeoutAt: proc.timeoutAt,\n outputFile: proc.outputFile,\n }\n }\n\n readBackgroundOutput(\n bashId: string,\n options?: { filter?: string },\n ): {\n shellId: string\n command: string\n cwd: string\n startedAt: number\n timeoutAt: number\n status: 'running' | 'completed' | 'failed' | 'killed'\n exitCode: number | null\n stdout: string\n stderr: string\n stdoutLines: number\n stderrLines: number\n filterPattern?: string\n } | null {\n const proc = this.backgroundProcesses.get(bashId)\n if (!proc) return null\n\n const stdoutDelta = proc.stdout.slice(proc.stdoutCursor)\n const stderrDelta = proc.stderr.slice(proc.stderrCursor)\n\n proc.stdoutCursor = proc.stdout.length\n proc.stderrCursor = proc.stderr.length\n\n const stdoutLines = stdoutDelta === '' ? 0 : stdoutDelta.split('\\n').length\n const stderrLines = stderrDelta === '' ? 0 : stderrDelta.split('\\n').length\n\n let stdoutToReturn = stdoutDelta\n let stderrToReturn = stderrDelta\n\n const filter = options?.filter?.trim()\n if (filter) {\n const regex = new RegExp(filter, 'i')\n stdoutToReturn = stdoutDelta\n .split('\\n')\n .filter(line => regex.test(line))\n .join('\\n')\n stderrToReturn = stderrDelta\n .split('\\n')\n .filter(line => regex.test(line))\n .join('\\n')\n }\n\n const status: 'running' | 'completed' | 'failed' | 'killed' = proc.killed\n ? 'killed'\n : proc.code === null\n ? 'running'\n : proc.code === 0\n ? 'completed'\n : 'failed'\n\n return {\n shellId: bashId,\n command: proc.command,\n cwd: proc.cwd,\n startedAt: proc.startedAt,\n timeoutAt: proc.timeoutAt,\n status,\n exitCode: proc.code,\n stdout: stdoutToReturn,\n stderr: stderrToReturn,\n stdoutLines,\n stderrLines,\n ...(filter ? { filterPattern: filter } : {}),\n }\n }\n\n killBackgroundShell(shellId: string): boolean {\n const proc = this.backgroundProcesses.get(shellId)\n if (!proc) return false\n try {\n proc.interrupted = true\n proc.killed = true\n proc.abortController.abort()\n proc.process.kill()\n if (proc.timeoutHandle) {\n clearTimeout(proc.timeoutHandle)\n proc.timeoutHandle = null\n }\n return true\n } catch {\n return false\n }\n }\n\n listBackgroundShells(): BackgroundProcess[] {\n return Array.from(this.backgroundProcesses.values())\n }\n\n pwd(): string {\n return this.cwd\n }\n\n async setCwd(cwd: string) {\n const resolved = isAbsolute(cwd) ? cwd : resolve(this.cwd, cwd)\n if (!existsSync(resolved)) {\n throw new Error(`Path \"${resolved}\" does not exist`)\n }\n this.cwd = resolved\n }\n\n killChildren() {\n this.abortController?.abort()\n this.currentProcess?.kill()\n for (const bg of Array.from(this.backgroundProcesses.keys())) {\n this.killBackgroundShell(bg)\n }\n }\n\n close(): void {\n this.isAlive = false\n this.killChildren()\n }\n\n flushBashNotifications(): BashNotification[] {\n const processes = Array.from(this.backgroundProcesses.values())\n\n const statusFor = (\n proc: BackgroundProcess,\n ): 'running' | 'completed' | 'failed' | 'killed' =>\n proc.killed\n ? 'killed'\n : proc.code === null\n ? 'running'\n : proc.code === 0\n ? 'completed'\n : 'failed'\n\n const notifications: BashNotification[] = []\n\n for (const proc of processes) {\n if (proc.notified) continue\n const status = statusFor(proc)\n if (status === 'running') continue\n\n notifications.push({\n type: 'bash_notification',\n taskId: proc.id,\n description: proc.command,\n outputFile: proc.outputFile || getTaskOutputFilePath(proc.id),\n status,\n ...(proc.code !== null ? { exitCode: proc.code } : {}),\n })\n\n proc.notified = true\n }\n\n return notifications\n }\n\n flushBackgroundShellStatusAttachments(): BackgroundShellStatusAttachment[] {\n const processes = Array.from(this.backgroundProcesses.values())\n\n const statusFor = (\n proc: BackgroundProcess,\n ): 'running' | 'completed' | 'failed' | 'killed' =>\n proc.killed\n ? 'killed'\n : proc.code === null\n ? 'running'\n : proc.code === 0\n ? 'completed'\n : 'failed'\n\n const progressAttachments: BackgroundShellStatusAttachment[] = []\n\n for (const proc of processes) {\n if (statusFor(proc) !== 'running') continue\n\n const stdoutDelta = proc.stdoutLineCount - proc.lastReportedStdoutLines\n const stderrDelta = proc.stderrLineCount - proc.lastReportedStderrLines\n if (stdoutDelta === 0 && stderrDelta === 0) continue\n\n proc.lastReportedStdoutLines = proc.stdoutLineCount\n proc.lastReportedStderrLines = proc.stderrLineCount\n\n progressAttachments.push({\n type: 'task_progress',\n taskId: proc.id,\n stdoutLineDelta: stdoutDelta,\n stderrLineDelta: stderrDelta,\n outputFile: proc.outputFile || getTaskOutputFilePath(proc.id),\n })\n }\n\n return progressAttachments\n }\n}\n", "import {\n existsSync,\n mkdirSync,\n writeFileSync,\n readFileSync,\n readdirSync,\n statSync,\n copyFileSync,\n promises as fsPromises,\n} from 'fs'\nimport { dirname, join } from 'path'\nimport { captureException } from '@services/sentry'\nimport { randomUUID } from 'crypto'\nimport envPaths from 'env-paths'\nimport type { LogOption, SerializedMessage } from '@kode-types/logs'\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_COMMAND } from '@constants/product'\nimport { getPlanSlugForConversationKey } from '@utils/plan/planMode'\nimport { getKodeBaseDir } from '@utils/config/env'\n\nconst IN_MEMORY_ERROR_LOG: Array<{ error: string; timestamp: string }> = []\nconst MAX_IN_MEMORY_ERRORS = 100\n\nconst PERMISSION_ERROR_CODES = new Set(['EACCES', 'EPERM', 'EROFS'])\n\nfunction isPermissionError(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n PERMISSION_ERROR_CODES.has((error as NodeJS.ErrnoException).code ?? '')\n )\n}\n\nfunction safeMkdir(dir: string): boolean {\n if (existsSync(dir)) return true\n try {\n mkdirSync(dir, { recursive: true })\n return true\n } catch (error) {\n if (isPermissionError(error)) {\n return false\n }\n throw error\n }\n}\n\nfunction safeWriteFile(\n path: string,\n data: string,\n encoding: BufferEncoding = 'utf8',\n): boolean {\n try {\n writeFileSync(path, data, encoding)\n return true\n } catch (error) {\n if (isPermissionError(error)) {\n return false\n }\n throw error\n }\n}\n\nexport const SESSION_ID = randomUUID()\n\nconst paths = envPaths(PRODUCT_COMMAND)\n\nfunction getProjectDir(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nfunction getLegacyCacheRoot(): string {\n return process.env.KODE_LEGACY_CACHE_ROOT ?? paths.cache\n}\n\nfunction getNewLogRoot(): string {\n return process.env.KODE_LOG_ROOT ?? getKodeBaseDir()\n}\n\nexport const CACHE_PATHS = {\n errors: () => join(getNewLogRoot(), getProjectDir(process.cwd()), 'errors'),\n messages: () =>\n join(getNewLogRoot(), getProjectDir(process.cwd()), 'messages'),\n mcpLogs: (serverName: string) =>\n join(\n getLegacyCacheRoot(),\n getProjectDir(process.cwd()),\n `mcp-logs-${serverName}`,\n ),\n}\n\nexport const LEGACY_CACHE_PATHS = {\n errors: () =>\n join(getLegacyCacheRoot(), getProjectDir(process.cwd()), 'errors'),\n messages: () =>\n join(getLegacyCacheRoot(), getProjectDir(process.cwd()), 'messages'),\n mcpLogs: (serverName: string) =>\n join(\n getLegacyCacheRoot(),\n getProjectDir(process.cwd()),\n `mcp-logs-${serverName}`,\n ),\n}\n\nexport function dateToFilename(date: Date): string {\n return date.toISOString().replace(/[:.]/g, '-')\n}\n\nconst DATE = dateToFilename(new Date())\n\nfunction getErrorsPath(): string {\n return join(CACHE_PATHS.errors(), DATE + '.txt')\n}\n\nexport function getMessagesPath(\n messageLogName: string,\n forkNumber: number,\n sidechainNumber: number,\n): string {\n return join(\n CACHE_PATHS.messages(),\n `${messageLogName}${forkNumber > 0 ? `-${forkNumber}` : ''}${\n sidechainNumber > 0 ? `-sidechain-${sidechainNumber}` : ''\n }.json`,\n )\n}\n\nconst MIGRATION_MESSAGE_LOG_LIMIT = 50\nlet didMigrateMessageLogs = false\n\nfunction migrateLegacyMessageLogsIfNeeded() {\n if (didMigrateMessageLogs) return\n didMigrateMessageLogs = true\n\n const legacyDir = LEGACY_CACHE_PATHS.messages()\n const newDir = CACHE_PATHS.messages()\n\n if (!existsSync(legacyDir)) return\n\n const newHasAny =\n existsSync(newDir) &&\n readdirSync(newDir).some(file => file.endsWith('.json'))\n if (newHasAny) return\n\n try {\n mkdirSync(newDir, { recursive: true })\n } catch {\n return\n }\n\n let legacyFiles: string[] = []\n try {\n legacyFiles = readdirSync(legacyDir).filter(file => file.endsWith('.json'))\n } catch {\n return\n }\n\n const sorted = legacyFiles\n .map(file => {\n try {\n const stats = statSync(join(legacyDir, file))\n return { file, mtimeMs: stats.mtimeMs }\n } catch {\n return { file, mtimeMs: 0 }\n }\n })\n .sort((a, b) => b.mtimeMs - a.mtimeMs)\n .slice(0, MIGRATION_MESSAGE_LOG_LIMIT)\n\n for (const { file } of sorted) {\n const src = join(legacyDir, file)\n const dest = join(newDir, file)\n if (existsSync(dest)) continue\n try {\n copyFileSync(src, dest)\n } catch {\n }\n }\n}\n\nexport function logError(error: unknown): void {\n try {\n if (process.env.NODE_ENV === 'test') {\n console.error(error)\n }\n\n const errorStr =\n error instanceof Error ? error.stack || error.message : String(error)\n\n const errorInfo = {\n error: errorStr,\n timestamp: new Date().toISOString(),\n }\n\n if (IN_MEMORY_ERROR_LOG.length >= MAX_IN_MEMORY_ERRORS) {\n IN_MEMORY_ERROR_LOG.shift()\n }\n IN_MEMORY_ERROR_LOG.push(errorInfo)\n\n appendToLog(getErrorsPath(), {\n error: errorStr,\n })\n } catch {\n }\n captureException(error)\n}\n\nexport function getErrorsLog(): object[] {\n return readLog(getErrorsPath())\n}\n\nexport function getInMemoryErrors(): object[] {\n return [...IN_MEMORY_ERROR_LOG]\n}\n\nfunction readLog(path: string): object[] {\n if (!existsSync(path)) {\n return []\n }\n try {\n return JSON.parse(readFileSync(path, 'utf8'))\n } catch {\n return []\n }\n}\n\nfunction appendToLog(path: string, message: object): void {\n if (process.env.USER_TYPE === 'external') {\n return\n }\n\n const dir = dirname(path)\n if (!safeMkdir(dir)) {\n return\n }\n\n if (!existsSync(path) && !safeWriteFile(path, '[]')) {\n return\n }\n\n const messages = readLog(path)\n const messageWithTimestamp = {\n ...message,\n cwd: process.cwd(),\n userType: process.env.USER_TYPE,\n sessionId: SESSION_ID,\n timestamp: new Date().toISOString(),\n version: MACRO.VERSION,\n }\n messages.push(messageWithTimestamp)\n\n safeWriteFile(path, JSON.stringify(messages, null, 2))\n}\n\nexport function overwriteLog(\n path: string,\n messages: object[],\n options?: { conversationKey?: string },\n): void {\n if (process.env.USER_TYPE === 'external') {\n return\n }\n\n if (!messages.length) {\n return\n }\n\n const dir = dirname(path)\n if (!safeMkdir(dir)) {\n return\n }\n\n const slug = options?.conversationKey\n ? getPlanSlugForConversationKey(options.conversationKey)\n : null\n\n const messagesWithMetadata = messages.map(message => ({\n ...message,\n ...(slug ? { slug } : {}),\n cwd: process.cwd(),\n userType: process.env.USER_TYPE,\n sessionId: SESSION_ID,\n timestamp: new Date().toISOString(),\n version: MACRO.VERSION,\n }))\n\n safeWriteFile(path, JSON.stringify(messagesWithMetadata, null, 2))\n}\n\nexport async function loadLogList(\n path = CACHE_PATHS.messages(),\n): Promise<LogOption[]> {\n if (path === CACHE_PATHS.messages()) {\n migrateLegacyMessageLogsIfNeeded()\n }\n\n const searchPaths =\n path === CACHE_PATHS.messages()\n ? [CACHE_PATHS.messages(), LEGACY_CACHE_PATHS.messages()]\n : [path]\n\n const existingPaths = searchPaths.filter(p => existsSync(p))\n if (existingPaths.length === 0) {\n logError(`No logs found at ${path}`)\n return []\n }\n\n const filesWithDir = (\n await Promise.all(\n existingPaths.map(async dirPath => {\n const dirFiles = await fsPromises.readdir(dirPath)\n return dirFiles.map(file => ({ file, dirPath }))\n }),\n )\n ).flat()\n\n const seen = new Set<string>()\n const uniqueFiles = filesWithDir.filter(({ file }) => {\n if (seen.has(file)) return false\n seen.add(file)\n return true\n })\n\n const logData = await Promise.all(\n uniqueFiles.map(async ({ file, dirPath }, i) => {\n const fullPath = join(dirPath, file)\n const content = await fsPromises.readFile(fullPath, 'utf8')\n const messages = JSON.parse(content) as SerializedMessage[]\n const firstMessage = messages[0]\n const lastMessage = messages[messages.length - 1]\n const firstPrompt =\n firstMessage?.type === 'user' &&\n typeof firstMessage?.message?.content === 'string'\n ? firstMessage?.message?.content\n : 'No prompt'\n\n const { date, forkNumber, sidechainNumber } = parseLogFilename(file)\n return {\n date,\n forkNumber,\n fullPath,\n messages,\n value: i,\n created: parseISOString(firstMessage?.timestamp || date),\n modified: lastMessage?.timestamp\n ? parseISOString(lastMessage.timestamp)\n : parseISOString(date),\n firstPrompt:\n firstPrompt.split('\\n')[0]?.slice(0, 50) +\n (firstPrompt.length > 50 ? '\u2026' : '') || 'No prompt',\n messageCount: messages.length,\n sidechainNumber,\n }\n }),\n )\n\n return sortLogs(logData.filter(_ => _.messages.length)).map((_, i) => ({\n ..._,\n value: i,\n }))\n}\n\nexport function parseLogFilename(filename: string): {\n date: string\n forkNumber: number | undefined\n sidechainNumber: number | undefined\n} {\n const base = filename.split('.')[0]!\n const segments = base.split('-')\n const hasSidechain = base.includes('-sidechain-')\n\n let date = base\n let forkNumber: number | undefined = undefined\n let sidechainNumber: number | undefined = undefined\n\n if (hasSidechain) {\n const sidechainIndex = segments.indexOf('sidechain')\n sidechainNumber = Number(segments[sidechainIndex + 1])\n if (sidechainIndex > 6) {\n forkNumber = Number(segments[sidechainIndex - 1])\n date = segments.slice(0, 6).join('-')\n } else {\n date = segments.slice(0, 6).join('-')\n }\n } else if (segments.length > 6) {\n const lastSegment = Number(segments[segments.length - 1])\n forkNumber = lastSegment >= 0 ? lastSegment : undefined\n date = segments.slice(0, 6).join('-')\n } else {\n date = base\n }\n\n return { date, forkNumber, sidechainNumber }\n}\n\nexport function getNextAvailableLogForkNumber(\n date: string,\n forkNumber: number,\n sidechainNumber: number,\n): number {\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\n forkNumber++\n }\n return forkNumber\n}\n\nexport function getNextAvailableLogSidechainNumber(\n date: string,\n forkNumber: number,\n): number {\n let sidechainNumber = 1\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\n sidechainNumber++\n }\n return sidechainNumber\n}\n\nexport function getForkNumberFromFilename(\n filename: string,\n): number | undefined {\n const base = filename.split('.')[0]!\n const segments = base.split('-')\n const hasSidechain = base.includes('-sidechain-')\n\n if (hasSidechain) {\n const sidechainIndex = segments.indexOf('sidechain')\n if (sidechainIndex > 6) {\n return Number(segments[sidechainIndex - 1])\n }\n return undefined\n }\n\n if (segments.length > 6) {\n const lastNumber = Number(segments[segments.length - 1])\n return lastNumber >= 0 ? lastNumber : undefined\n }\n return undefined\n}\n\nexport function sortLogs(logs: LogOption[]): LogOption[] {\n return logs.sort((a, b) => {\n const modifiedDiff = b.modified.getTime() - a.modified.getTime()\n if (modifiedDiff !== 0) {\n return modifiedDiff\n }\n\n const createdDiff = b.created.getTime() - a.created.getTime()\n if (createdDiff !== 0) {\n return createdDiff\n }\n\n return (b.forkNumber ?? 0) - (a.forkNumber ?? 0)\n })\n}\n\nexport function formatDate(date: Date): string {\n const now = new Date()\n const yesterday = new Date(now)\n yesterday.setDate(yesterday.getDate() - 1)\n\n const isToday = date.toDateString() === now.toDateString()\n const isYesterday = date.toDateString() === yesterday.toDateString()\n\n const timeStr = date\n .toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n .toLowerCase()\n\n if (isToday) {\n return `Today at ${timeStr}`\n } else if (isYesterday) {\n return `Yesterday at ${timeStr}`\n } else {\n return (\n date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n }) + ` at ${timeStr}`\n )\n }\n}\n\nexport function parseISOString(s: string): Date {\n const b = s.split(/\\D+/)\n return new Date(\n Date.UTC(\n parseInt(b[0]!, 10),\n parseInt(b[1]!, 10) - 1,\n parseInt(b[2]!, 10),\n parseInt(b[3]!, 10),\n parseInt(b[4]!, 10),\n parseInt(b[5]!, 10),\n parseInt(b[6]!, 10),\n ),\n )\n}\n\nexport function logMCPError(serverName: string, error: unknown): void {\n try {\n const logDir = CACHE_PATHS.mcpLogs(serverName)\n const errorStr =\n error instanceof Error ? error.stack || error.message : String(error)\n const timestamp = new Date().toISOString()\n\n const logFile = join(logDir, DATE + '.txt')\n\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true })\n }\n\n if (!existsSync(logFile)) {\n writeFileSync(logFile, '[]', 'utf8')\n }\n\n const errorInfo = {\n error: errorStr,\n timestamp,\n sessionId: SESSION_ID,\n cwd: process.cwd(),\n }\n\n const messages = readLog(logFile)\n messages.push(errorInfo)\n writeFileSync(logFile, JSON.stringify(messages, null, 2), 'utf8')\n } catch {\n }\n}\n", "export function initSentry(): void {}\n\nexport async function captureException(error: unknown): Promise<void> {}\n", "export const PRODUCT_NAME = 'Kode'\nexport const PRODUCT_URL = 'https://github.com/shareAI-lab/Anykode'\nexport const PROJECT_FILE = 'AGENTS.md'\nexport const PRODUCT_COMMAND = 'kode'\nexport const CONFIG_BASE_DIR = '.kode'\nexport const CONFIG_FILE = '.kode.json'\nexport const GITHUB_ISSUES_REPO_URL =\n 'https://github.com/shareAI-lab/Anykode/issues'\n\nexport const ASCII_LOGO = `\n _ _ _ __ _ \n | | __ _ ___ | |_ | |/ / ___ __| | ___ \n | | / _\\` | / __| | __| | ' / / _ \\\\ / _\\` | / _ \\\\\n | |___ | (_| | \\\\__ \\\\ | |_ | . \\\\ | (_) | | (_| | | __/\n |_____| \\\\__,_| |___/ \\\\__| |_|\\\\_\\\\ \\\\___/ \\\\__,_| \\\\___|\n \n`\n", "import { existsSync, mkdirSync, readFileSync, realpathSync } from 'fs'\nimport { randomBytes } from 'crypto'\nimport { isAbsolute, join, relative, resolve, parse } from 'path'\nimport type { ToolUseContext } from '@tool'\nimport { getKodeBaseDir } from '@utils/config/env'\nimport {\n PLAN_SLUG_ADJECTIVES,\n PLAN_SLUG_NOUNS,\n PLAN_SLUG_VERBS,\n} from './planSlugWords'\n\nconst DEFAULT_CONVERSATION_KEY = 'default'\nconst MAX_SLUG_ATTEMPTS = 10\nconst TURNS_BETWEEN_ATTACHMENTS = 5\n\ntype PlanModeFlags = {\n hasExitedPlanMode: boolean\n needsPlanModeExitAttachment: boolean\n}\n\ntype PlanModeAttachmentState = {\n hasInjected: boolean\n lastInjectedAssistantTurn: number\n}\n\nconst planModeEnabledByConversationKey = new Map<string, boolean>()\nconst planSlugCache = new Map<string, string>()\nconst planModeFlagsByConversationKey = new Map<string, PlanModeFlags>()\nconst planModeAttachmentStateByAgentKey = new Map<\n string,\n PlanModeAttachmentState\n>()\nlet activePlanConversationKey: string | null = null\n\nfunction getConversationKey(context?: Pick<ToolUseContext, 'options'>): string {\n const messageLogName =\n context?.options?.messageLogName ?? DEFAULT_CONVERSATION_KEY\n const forkNumber = context?.options?.forkNumber ?? 0\n return `${messageLogName}:${forkNumber}`\n}\n\nexport function getPlanConversationKey(\n context?: Pick<ToolUseContext, 'options'>,\n): string {\n return getConversationKey(context)\n}\n\nexport function setActivePlanConversationKey(conversationKey: string): void {\n activePlanConversationKey = conversationKey\n}\n\nexport function getActivePlanConversationKey(): string | null {\n return activePlanConversationKey\n}\n\nfunction getAgentKey(\n context?: Pick<ToolUseContext, 'options' | 'agentId'>,\n): string {\n const conversationKey = getConversationKey(context)\n const agentId = context?.agentId ?? 'main'\n return `${conversationKey}:${agentId}`\n}\n\nfunction pickIndex(length: number): number {\n return randomBytes(4).readUInt32BE(0) % length\n}\n\nfunction pickWord(words: readonly string[]): string {\n return words[pickIndex(words.length)]!\n}\n\nfunction generateSlug(): string {\n const adjective = pickWord(PLAN_SLUG_ADJECTIVES)\n const verb = pickWord(PLAN_SLUG_VERBS)\n const noun = pickWord(PLAN_SLUG_NOUNS)\n return `${adjective}-${verb}-${noun}`\n}\n\nfunction getOrCreatePlanSlug(conversationKey: string): string {\n const existing = planSlugCache.get(conversationKey)\n if (existing) return existing\n\n const dir = getPlanDirectory()\n\n let slug: string | null = null\n for (let attempt = 0; attempt < MAX_SLUG_ATTEMPTS; attempt++) {\n slug = generateSlug()\n const path = join(dir, `${slug}.md`)\n if (!existsSync(path)) break\n }\n\n if (!slug) slug = generateSlug()\n\n planSlugCache.set(conversationKey, slug)\n return slug\n}\n\nfunction extractSlugFromPlanFilePath(planFilePath: string): string | null {\n if (!planFilePath) return null\n const baseName = parse(planFilePath).name\n if (!baseName) return null\n\n const agentMarker = '-agent-'\n const idx = baseName.lastIndexOf(agentMarker)\n if (idx === -1) return baseName\n if (idx === 0) return null\n return baseName.slice(0, idx)\n}\n\nfunction getOrCreatePlanModeFlags(conversationKey: string): PlanModeFlags {\n const existing = planModeFlagsByConversationKey.get(conversationKey)\n if (existing) return existing\n const created: PlanModeFlags = {\n hasExitedPlanMode: false,\n needsPlanModeExitAttachment: false,\n }\n planModeFlagsByConversationKey.set(conversationKey, created)\n return created\n}\n\nfunction getMaxParallelExploreAgents(): number {\n const raw =\n process.env.KODE_PLAN_V2_EXPLORE_AGENT_COUNT ??\n process.env.CLAUDE_CODE_PLAN_V2_EXPLORE_AGENT_COUNT\n if (raw) {\n const parsed = Number.parseInt(raw, 10)\n if (Number.isFinite(parsed) && parsed > 0 && parsed <= 10) return parsed\n }\n return 3\n}\n\nfunction getMaxParallelPlanAgents(): number {\n const raw =\n process.env.KODE_PLAN_V2_AGENT_COUNT ??\n process.env.CLAUDE_CODE_PLAN_V2_AGENT_COUNT\n if (raw) {\n const parsed = Number.parseInt(raw, 10)\n if (Number.isFinite(parsed) && parsed > 0 && parsed <= 10) return parsed\n }\n return 1\n}\n\nfunction buildPlanModeMainReminder(args: {\n planExists: boolean\n planFilePath: string\n maxParallelExploreAgents: number\n maxParallelPlanAgents: number\n}): string {\n const {\n planExists,\n planFilePath,\n maxParallelExploreAgents,\n maxParallelPlanAgents,\n } = args\n\n const writeToolName = 'Write'\n const editToolName = 'Edit'\n const askUserToolName = 'AskUserQuestion'\n const exploreAgentType = 'Explore'\n const planAgentType = 'Plan'\n const exitPlanModeToolName = 'ExitPlanMode'\n\n return `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received.\n\n## Plan File Info:\n${planExists ? `A plan file already exists at ${planFilePath}. You can read it and make incremental edits using the ${editToolName} tool.` : `No plan file exists yet. You should create your plan at ${planFilePath} using the ${writeToolName} tool.`}\nYou should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.\n\n## Plan Workflow\n\n### Phase 1: Initial Understanding\nGoal: Gain a comprehensive understanding of the user's request by reading through code and asking them questions. Critical: In this phase you should only use the ${exploreAgentType} subagent type.\n\n1. Focus on understanding the user's request and the code associated with their request\n\n2. **Launch up to ${maxParallelExploreAgents} ${exploreAgentType} agents IN PARALLEL** (single message, multiple tool calls) to efficiently explore the codebase.\n - Use 1 agent when the task is isolated to known files, the user provided specific file paths, or you're making a small targeted change.\n - Use multiple agents when: the scope is uncertain, multiple areas of the codebase are involved, or you need to understand existing patterns before planning.\n - Quality over quantity - ${maxParallelExploreAgents} agents maximum, but you should try to use the minimum number of agents necessary (usually just 1)\n - If using multiple agents: Provide each agent with a specific search focus or area to explore. Example: One agent searches for existing implementations, another explores related components, a third investigates testing patterns\n\n3. After exploring the code, use the ${askUserToolName} tool to clarify ambiguities in the user request up front.\n\n### Phase 2: Design\nGoal: Design an implementation approach.\n\nLaunch ${planAgentType} agent(s) to design the implementation based on the user's intent and your exploration results from Phase 1.\n\nYou can launch up to ${maxParallelPlanAgents} agent(s) in parallel.\n\n**Guidelines:**\n- **Default**: Launch at least 1 Plan agent for most tasks - it helps validate your understanding and consider alternatives\n- **Skip agents**: Only for truly trivial tasks (typo fixes, single-line changes, simple renames)\n${\n maxParallelPlanAgents > 1\n ? `- **Multiple agents**: Use up to ${maxParallelPlanAgents} agents for complex tasks that benefit from different perspectives\n\nExamples of when to use multiple agents:\n- The task touches multiple parts of the codebase\n- It's a large refactor or architectural change\n- There are many edge cases to consider\n- You'd benefit from exploring different approaches\n\nExample perspectives by task type:\n- New feature: simplicity vs performance vs maintainability\n- Bug fix: root cause vs workaround vs prevention\n- Refactoring: minimal change vs clean architecture\n`\n : ''\n}\nIn the agent prompt:\n- Provide comprehensive background context from Phase 1 exploration including filenames and code path traces\n- Describe requirements and constraints\n- Request a detailed implementation plan\n\n### Phase 3: Review\nGoal: Review the plan(s) from Phase 2 and ensure alignment with the user's intentions.\n1. Read the critical files identified by agents to deepen your understanding\n2. Ensure that the plans align with the user's original request\n3. Use ${askUserToolName} to clarify any remaining questions with the user\n\n### Phase 4: Final Plan\nGoal: Write your final plan to the plan file (the only file you can edit).\n- Include only your recommended approach, not all alternatives\n- Ensure that the plan file is concise enough to scan quickly, but detailed enough to execute effectively\n- Include the paths of critical files to be modified\n\n### Phase 5: Call ${exitPlanModeToolName}\nAt the very end of your turn, once you have asked the user questions and are happy with your final plan file - you should always call ${exitPlanModeToolName} to indicate to the user that you are done planning.\nThis is critical - your turn should only end with either asking the user a question or calling ${exitPlanModeToolName}. Do not stop unless it's for these 2 reasons.\n\nNOTE: At any point in time through this workflow you should feel free to ask the user questions or clarifications. Don't make large assumptions about user intent. The goal is to present a well researched plan to the user, and tie any loose ends before implementation begins.`\n}\n\nfunction buildPlanModeSubAgentReminder(args: {\n planExists: boolean\n planFilePath: string\n}): string {\n const { planExists, planFilePath } = args\n\n const writeToolName = 'Write'\n const editToolName = 'Edit'\n const askUserToolName = 'AskUserQuestion'\n\n return `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits, run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received (for example, to make edits). Instead, you should:\n\n## Plan File Info:\n${planExists ? `A plan file already exists at ${planFilePath}. You can read it and make incremental edits using the ${editToolName} tool if you need to.` : `No plan file exists yet. You should create your plan at ${planFilePath} using the ${writeToolName} tool if you need to.`}\nYou should build your plan incrementally by writing to or editing this file. NOTE that this is the only file you are allowed to edit - other than this you are only allowed to take READ-ONLY actions.\nAnswer the user's query comprehensively, using the ${askUserToolName} tool if you need to ask the user clarifying questions. If you do use the ${askUserToolName}, make sure to ask all clarifying questions you need to fully understand the user's intent before proceeding.`\n}\n\nfunction buildPlanModeReentryReminder(planFilePath: string): string {\n const exitPlanModeToolName = 'ExitPlanMode'\n\n return `## Re-entering Plan Mode\n\nYou are returning to plan mode after having previously exited it. A plan file exists at ${planFilePath} from your previous planning session.\n\n**Before proceeding with any new planning, you should:**\n1. Read the existing plan file to understand what was previously planned\n2. Evaluate the user's current request against that plan\n3. Decide how to proceed:\n - **Different task**: If the user's request is for a different task\u2014even if it's similar or related\u2014start fresh by overwriting the existing plan\n - **Same task, continuing**: If this is explicitly a continuation or refinement of the exact same task, modify the existing plan while cleaning up outdated or irrelevant sections\n4. Continue on with the plan process and most importantly you should always edit the plan file one way or the other before calling ${exitPlanModeToolName}\n\nTreat this as a fresh planning session. Do not assume the existing plan is relevant without evaluating it first.`\n}\n\nfunction buildPlanModeExitReminder(planFilePath: string): string {\n return `## Exited Plan Mode\n\nYou have exited plan mode. You can now make edits, run tools, and take actions. The plan file is located at ${planFilePath} if you need to reference it.`\n}\n\nfunction wrapSystemReminder(text: string): string {\n return `<system-reminder>\\n${text}\\n</system-reminder>`\n}\n\nexport function getPlanModeSystemPromptAdditions(\n messages: Array<{ type?: string }>,\n context: ToolUseContext,\n): string[] {\n const conversationKey = getConversationKey(context)\n const agentKey = getAgentKey(context)\n const flags = getOrCreatePlanModeFlags(conversationKey)\n const additions: string[] = []\n\n const assistantTurns = messages.filter(m => m?.type === 'assistant').length\n\n if (isPlanModeEnabled(context)) {\n const previous =\n planModeAttachmentStateByAgentKey.get(agentKey) ??\n ({\n hasInjected: false,\n lastInjectedAssistantTurn: -Infinity,\n } satisfies PlanModeAttachmentState)\n\n if (\n previous.hasInjected &&\n assistantTurns - previous.lastInjectedAssistantTurn <\n TURNS_BETWEEN_ATTACHMENTS\n ) {\n return []\n }\n\n const planFilePath = getPlanFilePath(context.agentId, conversationKey)\n const planExists = existsSync(planFilePath)\n\n if (flags.hasExitedPlanMode && planExists) {\n additions.push(\n wrapSystemReminder(buildPlanModeReentryReminder(planFilePath)),\n )\n flags.hasExitedPlanMode = false\n }\n\n const isSubAgent = !!context.agentId\n additions.push(\n wrapSystemReminder(\n isSubAgent\n ? buildPlanModeSubAgentReminder({ planExists, planFilePath })\n : buildPlanModeMainReminder({\n planExists,\n planFilePath,\n maxParallelExploreAgents: getMaxParallelExploreAgents(),\n maxParallelPlanAgents: getMaxParallelPlanAgents(),\n }),\n ),\n )\n\n planModeFlagsByConversationKey.set(conversationKey, flags)\n planModeAttachmentStateByAgentKey.set(agentKey, {\n hasInjected: true,\n lastInjectedAssistantTurn: assistantTurns,\n })\n\n return additions\n }\n\n if (flags.needsPlanModeExitAttachment) {\n const planFilePath = getPlanFilePath(context.agentId, conversationKey)\n additions.push(wrapSystemReminder(buildPlanModeExitReminder(planFilePath)))\n flags.needsPlanModeExitAttachment = false\n planModeFlagsByConversationKey.set(conversationKey, flags)\n }\n\n return additions\n}\n\nexport function isPlanModeEnabled(context?: ToolUseContext): boolean {\n const key = getConversationKey(context)\n return planModeEnabledByConversationKey.get(key) ?? false\n}\n\nexport function enterPlanMode(context?: ToolUseContext): {\n planFilePath: string\n} {\n const key = getConversationKey(context)\n planModeEnabledByConversationKey.set(key, true)\n return { planFilePath: getPlanFilePath(context?.agentId, key) }\n}\n\nexport function enterPlanModeForConversationKey(conversationKey: string): void {\n planModeEnabledByConversationKey.set(conversationKey, true)\n}\n\nexport function exitPlanMode(context?: ToolUseContext): {\n planFilePath: string\n} {\n const key = getConversationKey(context)\n planModeEnabledByConversationKey.set(key, false)\n\n const flags = getOrCreatePlanModeFlags(key)\n flags.hasExitedPlanMode = true\n flags.needsPlanModeExitAttachment = true\n planModeFlagsByConversationKey.set(key, flags)\n\n return { planFilePath: getPlanFilePath(context?.agentId, key) }\n}\n\nexport function exitPlanModeForConversationKey(conversationKey: string): void {\n planModeEnabledByConversationKey.set(conversationKey, false)\n const flags = getOrCreatePlanModeFlags(conversationKey)\n flags.hasExitedPlanMode = true\n flags.needsPlanModeExitAttachment = true\n planModeFlagsByConversationKey.set(conversationKey, flags)\n}\n\nexport function setPlanSlug(conversationKey: string, slug: string): void {\n planSlugCache.set(conversationKey, slug)\n}\n\nexport function getPlanSlugForConversationKey(\n conversationKey: string,\n): string | null {\n return planSlugCache.get(conversationKey) ?? null\n}\n\nexport function hydratePlanSlugFromMessages(\n messages: unknown[],\n context?: ToolUseContext,\n): boolean {\n const conversationKey = getConversationKey(context)\n if (planSlugCache.has(conversationKey)) return true\n\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg: any = (messages as any[])[i]\n const directSlug = typeof msg?.slug === 'string' ? msg.slug.trim() : ''\n if (directSlug) {\n planSlugCache.set(conversationKey, directSlug)\n return true\n }\n\n const data = msg?.toolUseResult?.data\n if (!data || typeof data !== 'object') continue\n\n const planFilePath =\n typeof (data as any).planFilePath === 'string'\n ? (data as any).planFilePath\n : typeof (data as any).filePath === 'string'\n ? (data as any).filePath\n : null\n\n if (!planFilePath) continue\n\n const slug = extractSlugFromPlanFilePath(planFilePath)\n if (!slug) continue\n\n planSlugCache.set(conversationKey, slug)\n return true\n }\n\n return false\n}\n\nexport function getPlanDirectory(): string {\n const dir = join(getKodeBaseDir(), 'plans')\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n return dir\n}\n\nexport function getPlanFilePath(\n agentId?: string,\n conversationKey?: string,\n): string {\n const dir = getPlanDirectory()\n const key = conversationKey ?? DEFAULT_CONVERSATION_KEY\n const slug = getOrCreatePlanSlug(key)\n\n if (!agentId) return join(dir, `${slug}.md`)\n return join(dir, `${slug}-agent-${agentId}.md`)\n}\n\nfunction resolveExistingPath(path: string): string {\n const resolved = resolve(path)\n try {\n return realpathSync(resolved)\n } catch {\n return resolved\n }\n}\n\nexport function isPlanFilePathForActiveConversation(path: string): boolean {\n const key = activePlanConversationKey ?? DEFAULT_CONVERSATION_KEY\n const planDir = resolveExistingPath(getPlanDirectory())\n const expectedMainPlanPath = resolveExistingPath(\n getPlanFilePath(undefined, key),\n )\n const target = resolveExistingPath(path)\n\n const rel = relative(planDir, target)\n if (!rel || rel === '') return false\n if (rel.startsWith('..')) return false\n if (isAbsolute(rel)) return false\n\n const expectedSlug = parse(expectedMainPlanPath).name\n const targetName = parse(target).name\n return (\n targetName === expectedSlug ||\n targetName.startsWith(`${expectedSlug}-agent-`)\n )\n}\n\nexport function isMainPlanFilePathForActiveConversation(path: string): boolean {\n const key = activePlanConversationKey ?? DEFAULT_CONVERSATION_KEY\n const expected = resolveExistingPath(getPlanFilePath(undefined, key))\n const target = resolveExistingPath(path)\n return target === expected\n}\n\nexport function isPathInPlanDirectory(path: string): boolean {\n const dir = resolve(getPlanDirectory())\n const target = resolve(path)\n const rel = relative(dir, target)\n if (!rel || rel === '') return true\n if (rel.startsWith('..')) return false\n if (isAbsolute(rel)) return false\n return true\n}\n\nexport function readPlanFile(\n agentId?: string,\n conversationKey?: string,\n): { content: string; exists: boolean; planFilePath: string } {\n const planFilePath = getPlanFilePath(agentId, conversationKey)\n if (!existsSync(planFilePath)) {\n return { content: '', exists: false, planFilePath }\n }\n return {\n content: readFileSync(planFilePath, 'utf8'),\n exists: true,\n planFilePath,\n }\n}\n\nexport function __resetPlanModeForTests(): void {\n planModeEnabledByConversationKey.clear()\n planSlugCache.clear()\n planModeFlagsByConversationKey.clear()\n planModeAttachmentStateByAgentKey.clear()\n activePlanConversationKey = null\n}\n", "import { execFile } from 'child_process'\nimport { getCwd } from '@utils/state'\nimport { logError } from '@utils/log'\n\nconst MS_IN_SECOND = 1000\nconst SECONDS_IN_MINUTE = 60\n\nexport function execFileNoThrow(\n file: string,\n args: string[],\n abortSignal?: AbortSignal,\n timeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,\n preserveOutputOnError = true,\n): Promise<{ stdout: string; stderr: string; code: number }> {\n return new Promise(resolve => {\n try {\n execFile(\n file,\n args,\n {\n maxBuffer: 1_000_000,\n signal: abortSignal,\n timeout,\n cwd: getCwd(),\n },\n (error, stdout, stderr) => {\n if (error) {\n if (preserveOutputOnError) {\n const errorCode = typeof error.code === 'number' ? error.code : 1\n resolve({\n stdout: stdout || '',\n stderr: stderr || '',\n code: errorCode,\n })\n } else {\n resolve({ stdout: '', stderr: '', code: 1 })\n }\n } else {\n resolve({ stdout, stderr, code: 0 })\n }\n },\n )\n } catch (error) {\n logError(error)\n resolve({ stdout: '', stderr: '', code: 1 })\n }\n })\n}\n", "import { execFileNoThrow } from '@utils/system/execFileNoThrow'\nimport { memoize } from 'lodash-es'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { CONFIG_BASE_DIR, CONFIG_FILE } from '@constants/product'\nexport function getKodeBaseDir(): string {\n return (\n process.env.KODE_CONFIG_DIR ??\n process.env.CLAUDE_CONFIG_DIR ??\n join(homedir(), CONFIG_BASE_DIR)\n )\n}\n\nexport function getGlobalConfigFilePath(): string {\n return process.env.KODE_CONFIG_DIR || process.env.CLAUDE_CONFIG_DIR\n ? join(getKodeBaseDir(), 'config.json')\n : join(homedir(), CONFIG_FILE)\n}\n\nexport function getMemoryDir(): string {\n return join(getKodeBaseDir(), 'memory')\n}\n\nexport const KODE_BASE_DIR = getKodeBaseDir()\nexport const GLOBAL_CONFIG_FILE = getGlobalConfigFilePath()\nexport const MEMORY_DIR = getMemoryDir()\n\nconst getIsDocker = memoize(async (): Promise<boolean> => {\n const { code } = await execFileNoThrow('test', ['-f', '/.dockerenv'])\n if (code !== 0) {\n return false\n }\n return process.platform === 'linux'\n})\n\nconst hasInternetAccess = memoize(async (): Promise<boolean> => {\n const offline =\n process.env.KODE_OFFLINE ??\n process.env.OFFLINE ??\n process.env.NO_NETWORK ??\n ''\n const normalized = String(offline).trim().toLowerCase()\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return false\n return true\n})\n\nexport const env = {\n getIsDocker,\n hasInternetAccess,\n isCI: Boolean(process.env.CI),\n platform:\n process.platform === 'win32'\n ? 'windows'\n : process.platform === 'darwin'\n ? 'macos'\n : 'linux',\n nodeVersion: process.version,\n terminal: process.env.TERM_PROGRAM,\n}\n", "export const PLAN_SLUG_ADJECTIVES = [\n 'abundant',\n 'ancient',\n 'bright',\n 'calm',\n 'cheerful',\n 'clever',\n 'cozy',\n 'curious',\n 'dapper',\n 'dazzling',\n 'deep',\n 'delightful',\n 'eager',\n 'elegant',\n 'enchanted',\n 'fancy',\n 'fluffy',\n 'gentle',\n 'gleaming',\n 'golden',\n 'graceful',\n 'happy',\n 'hidden',\n 'humble',\n 'jolly',\n 'joyful',\n 'keen',\n 'kind',\n 'lively',\n 'lovely',\n 'lucky',\n 'luminous',\n 'magical',\n 'majestic',\n 'mellow',\n 'merry',\n 'mighty',\n 'misty',\n 'noble',\n 'peaceful',\n 'playful',\n 'polished',\n 'precious',\n 'proud',\n 'quiet',\n 'quirky',\n 'radiant',\n 'rosy',\n 'serene',\n 'shiny',\n 'silly',\n 'sleepy',\n 'smooth',\n 'snazzy',\n 'snug',\n 'snuggly',\n 'soft',\n 'sparkling',\n 'spicy',\n 'splendid',\n 'sprightly',\n 'starry',\n 'steady',\n 'sunny',\n 'swift',\n 'tender',\n 'tidy',\n 'toasty',\n 'tranquil',\n 'twinkly',\n 'valiant',\n 'vast',\n 'velvet',\n 'vivid',\n 'warm',\n 'whimsical',\n 'wild',\n 'wise',\n 'witty',\n 'wondrous',\n 'zany',\n 'zesty',\n 'zippy',\n 'breezy',\n 'bubbly',\n 'buzzing',\n 'cheeky',\n 'cosmic',\n 'cozy',\n 'crispy',\n 'crystalline',\n 'cuddly',\n 'drifting',\n 'dreamy',\n 'effervescent',\n 'ethereal',\n 'fizzy',\n 'flickering',\n 'floating',\n 'floofy',\n 'fluttering',\n 'foamy',\n 'frolicking',\n 'fuzzy',\n 'giggly',\n 'glimmering',\n 'glistening',\n 'glittery',\n 'glowing',\n 'goofy',\n 'groovy',\n 'harmonic',\n 'hazy',\n 'humming',\n 'iridescent',\n 'jaunty',\n 'jazzy',\n 'jiggly',\n 'melodic',\n 'moonlit',\n 'mossy',\n 'nifty',\n 'peppy',\n 'prancy',\n 'purrfect',\n 'purring',\n 'quizzical',\n 'rippling',\n 'rustling',\n 'shimmering',\n 'shimmying',\n 'snappy',\n 'snoopy',\n 'squishy',\n 'swirling',\n 'ticklish',\n 'tingly',\n 'twinkling',\n 'velvety',\n 'wiggly',\n 'wobbly',\n 'woolly',\n 'zazzy',\n 'abstract',\n 'adaptive',\n 'agile',\n 'async',\n 'atomic',\n 'binary',\n 'cached',\n 'compiled',\n 'composed',\n 'compressed',\n 'concurrent',\n 'cryptic',\n 'curried',\n 'declarative',\n 'delegated',\n 'distributed',\n 'dynamic',\n 'eager',\n 'elegant',\n 'encapsulated',\n 'enumerated',\n 'eventual',\n 'expressive',\n 'federated',\n 'functional',\n 'generic',\n 'greedy',\n 'hashed',\n 'idempotent',\n 'immutable',\n 'imperative',\n 'indexed',\n 'inherited',\n 'iterative',\n 'lazy',\n 'lexical',\n 'linear',\n 'linked',\n 'logical',\n 'memoized',\n 'modular',\n 'mutable',\n 'nested',\n 'optimized',\n 'parallel',\n 'parsed',\n 'partitioned',\n 'piped',\n 'polymorphic',\n 'pure',\n 'reactive',\n 'recursive',\n 'refactored',\n 'reflective',\n 'replicated',\n 'resilient',\n 'robust',\n 'scalable',\n 'sequential',\n 'serialized',\n 'sharded',\n 'sorted',\n 'staged',\n 'stateful',\n 'stateless',\n 'streamed',\n 'structured',\n 'synchronous',\n 'synthetic',\n 'temporal',\n 'transient',\n 'typed',\n 'unified',\n 'validated',\n 'vectorized',\n 'virtual',\n] as const\n\nexport const PLAN_SLUG_VERBS = [\n 'baking',\n 'beaming',\n 'booping',\n 'bouncing',\n 'brewing',\n 'bubbling',\n 'chasing',\n 'churning',\n 'coalescing',\n 'conjuring',\n 'cooking',\n 'crafting',\n 'crunching',\n 'cuddling',\n 'dancing',\n 'dazzling',\n 'discovering',\n 'doodling',\n 'dreaming',\n 'drifting',\n 'enchanting',\n 'exploring',\n 'finding',\n 'floating',\n 'fluttering',\n 'foraging',\n 'forging',\n 'frolicking',\n 'gathering',\n 'giggling',\n 'gliding',\n 'greeting',\n 'growing',\n 'hatching',\n 'herding',\n 'honking',\n 'hopping',\n 'hugging',\n 'humming',\n 'imagining',\n 'inventing',\n 'jingling',\n 'juggling',\n 'jumping',\n 'kindling',\n 'knitting',\n 'launching',\n 'leaping',\n 'mapping',\n 'marinating',\n 'meandering',\n 'mixing',\n 'moseying',\n 'munching',\n 'napping',\n 'nibbling',\n 'noodling',\n 'orbiting',\n 'painting',\n 'percolating',\n 'petting',\n 'plotting',\n 'pondering',\n 'popping',\n 'prancing',\n 'purring',\n 'puzzling',\n 'questing',\n 'riding',\n 'roaming',\n 'rolling',\n 'sauteeing',\n 'scribbling',\n 'seeking',\n 'shimmying',\n 'singing',\n 'skipping',\n 'sleeping',\n 'snacking',\n 'sniffing',\n 'snuggling',\n 'soaring',\n 'sparking',\n 'spinning',\n 'splashing',\n 'sprouting',\n 'squishing',\n 'stargazing',\n 'stirring',\n 'strolling',\n 'swimming',\n 'swinging',\n 'tickling',\n 'tinkering',\n 'toasting',\n 'tumbling',\n 'twirling',\n 'waddling',\n 'wandering',\n 'watching',\n 'weaving',\n 'whistling',\n 'wibbling',\n 'wiggling',\n 'wishing',\n 'wobbling',\n 'wondering',\n 'yawning',\n 'zooming',\n] as const\n\nexport const PLAN_SLUG_NOUNS = [\n 'aurora',\n 'avalanche',\n 'blossom',\n 'breeze',\n 'brook',\n 'bubble',\n 'canyon',\n 'cascade',\n 'cloud',\n 'clover',\n 'comet',\n 'coral',\n 'cosmos',\n 'creek',\n 'crescent',\n 'crystal',\n 'dawn',\n 'dewdrop',\n 'dusk',\n 'eclipse',\n 'ember',\n 'feather',\n 'fern',\n 'firefly',\n 'flame',\n 'flurry',\n 'fog',\n 'forest',\n 'frost',\n 'galaxy',\n 'garden',\n 'glacier',\n 'glade',\n 'grove',\n 'harbor',\n 'horizon',\n 'island',\n 'lagoon',\n 'lake',\n 'leaf',\n 'lightning',\n 'meadow',\n 'meteor',\n 'mist',\n 'moon',\n 'moonbeam',\n 'mountain',\n 'nebula',\n 'nova',\n 'ocean',\n 'orbit',\n 'pebble',\n 'petal',\n 'pine',\n 'planet',\n 'pond',\n 'puddle',\n 'quasar',\n 'rain',\n 'rainbow',\n 'reef',\n 'ripple',\n 'river',\n 'shore',\n 'sky',\n 'snowflake',\n 'spark',\n 'spring',\n 'star',\n 'stardust',\n 'starlight',\n 'storm',\n 'stream',\n 'summit',\n 'sun',\n 'sunbeam',\n 'sunrise',\n 'sunset',\n 'thunder',\n 'tide',\n 'twilight',\n 'valley',\n 'volcano',\n 'waterfall',\n 'wave',\n 'willow',\n 'wind',\n 'alpaca',\n 'axolotl',\n 'badger',\n 'bear',\n 'beaver',\n 'bee',\n 'bird',\n 'bumblebee',\n 'bunny',\n 'cat',\n 'chipmunk',\n 'crab',\n 'crane',\n 'deer',\n 'dolphin',\n 'dove',\n 'dragon',\n 'dragonfly',\n 'duckling',\n 'eagle',\n 'elephant',\n 'falcon',\n 'finch',\n 'flamingo',\n 'fox',\n 'frog',\n 'giraffe',\n 'goose',\n 'hamster',\n 'hare',\n 'hedgehog',\n 'hippo',\n 'hummingbird',\n 'jellyfish',\n 'kitten',\n 'koala',\n 'ladybug',\n 'lark',\n 'lemur',\n 'llama',\n 'lobster',\n 'lynx',\n 'manatee',\n 'meerkat',\n 'moth',\n 'narwhal',\n 'newt',\n 'octopus',\n 'otter',\n 'owl',\n 'panda',\n 'parrot',\n 'peacock',\n 'pelican',\n 'penguin',\n 'phoenix',\n 'piglet',\n 'platypus',\n 'pony',\n 'porcupine',\n 'puffin',\n 'puppy',\n 'quail',\n 'quokka',\n 'rabbit',\n 'raccoon',\n 'raven',\n 'robin',\n 'salamander',\n 'seahorse',\n 'seal',\n 'sloth',\n 'snail',\n 'sparrow',\n 'sphinx',\n 'squid',\n 'squirrel',\n 'starfish',\n 'swan',\n 'tiger',\n 'toucan',\n 'turtle',\n 'unicorn',\n 'walrus',\n 'whale',\n 'wolf',\n 'wombat',\n 'wren',\n 'yeti',\n 'zebra',\n 'acorn',\n 'anchor',\n 'balloon',\n 'beacon',\n 'biscuit',\n 'blanket',\n 'bonbon',\n 'book',\n 'boot',\n 'cake',\n 'candle',\n 'candy',\n 'castle',\n 'charm',\n 'clock',\n 'cocoa',\n 'cookie',\n 'crayon',\n 'crown',\n 'cupcake',\n 'donut',\n 'dream',\n 'fairy',\n 'fiddle',\n 'flask',\n 'flute',\n 'fountain',\n 'gadget',\n 'gem',\n 'gizmo',\n 'globe',\n 'goblet',\n 'hammock',\n 'harp',\n 'haven',\n 'hearth',\n 'honey',\n 'journal',\n 'kazoo',\n 'kettle',\n 'key',\n 'kite',\n 'lantern',\n 'lemon',\n 'lighthouse',\n 'locket',\n 'lollipop',\n 'mango',\n 'map',\n 'marble',\n 'marshmallow',\n 'melody',\n 'mitten',\n 'mochi',\n 'muffin',\n 'music',\n 'nest',\n 'noodle',\n 'oasis',\n 'origami',\n 'pancake',\n 'parasol',\n 'peach',\n 'pearl',\n 'pebble',\n 'pie',\n 'pillow',\n 'pinwheel',\n 'pixel',\n 'pizza',\n 'plum',\n 'popcorn',\n 'pretzel',\n 'prism',\n 'pudding',\n 'pumpkin',\n 'puzzle',\n 'quiche',\n 'quill',\n 'quilt',\n 'riddle',\n 'rocket',\n 'rose',\n 'scone',\n 'scroll',\n 'shell',\n 'sketch',\n 'snowglobe',\n 'sonnet',\n 'sparkle',\n 'spindle',\n 'sprout',\n 'sundae',\n 'swing',\n 'taco',\n 'teacup',\n 'teapot',\n 'thimble',\n 'toast',\n 'token',\n 'tome',\n 'tower',\n 'treasure',\n 'treehouse',\n 'trinket',\n 'truffle',\n 'tulip',\n 'umbrella',\n 'waffle',\n 'wand',\n 'whisper',\n 'whistle',\n 'widget',\n 'wreath',\n 'zephyr',\n 'abelson',\n 'adleman',\n 'aho',\n 'allen',\n 'babbage',\n 'bachman',\n 'backus',\n 'barto',\n 'bengio',\n 'bentley',\n 'blum',\n 'boole',\n 'brooks',\n 'catmull',\n 'cerf',\n 'cherny',\n 'church',\n 'clarke',\n 'cocke',\n 'codd',\n 'conway',\n 'cook',\n 'corbato',\n 'cray',\n 'curry',\n 'dahl',\n 'diffie',\n 'dijkstra',\n 'dongarra',\n 'eich',\n 'emerson',\n 'engelbart',\n 'feigenbaum',\n 'floyd',\n 'gosling',\n 'graham',\n 'gray',\n 'hamming',\n 'hanrahan',\n 'hartmanis',\n 'hejlsberg',\n 'hellman',\n 'hennessy',\n 'hickey',\n 'hinton',\n 'hoare',\n 'hollerith',\n 'hopcroft',\n 'hopper',\n 'iverson',\n 'kahan',\n 'kahn',\n 'karp',\n 'kay',\n 'kernighan',\n 'knuth',\n 'kurzweil',\n 'lamport',\n 'lampson',\n 'lecun',\n 'lerdorf',\n 'liskov',\n 'lovelace',\n 'matsumoto',\n 'mccarthy',\n 'metcalfe',\n 'micali',\n 'milner',\n 'minsky',\n 'moler',\n 'moore',\n 'naur',\n 'neumann',\n 'newell',\n 'nygaard',\n 'papert',\n 'parnas',\n 'pascal',\n 'patterson',\n 'pearl',\n 'perlis',\n 'pike',\n 'pnueli',\n 'rabin',\n 'reddy',\n 'ritchie',\n 'rivest',\n 'rossum',\n 'russell',\n 'scott',\n 'sedgewick',\n 'shamir',\n 'shannon',\n 'sifakis',\n 'simon',\n 'stallman',\n 'stearns',\n 'steele',\n 'stonebraker',\n 'stroustrup',\n 'sutherland',\n 'sutton',\n 'tarjan',\n 'thacker',\n 'thompson',\n 'torvalds',\n 'turing',\n 'ullman',\n 'valiant',\n 'wadler',\n 'wall',\n 'wigderson',\n 'wilkes',\n 'wilkinson',\n 'wirth',\n 'wozniak',\n 'yao',\n] as const\n", "import {\n appendFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n writeFileSync,\n} from 'fs'\nimport { dirname, join } from 'path'\nimport { getKodeBaseDir } from '@utils/config/env'\n\nfunction getProjectDir(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nconst PROJECT_ROOT = process.cwd()\n\nexport function getTaskOutputsDir(): string {\n return join(getKodeBaseDir(), getProjectDir(PROJECT_ROOT), 'tasks')\n}\n\nexport function getTaskOutputFilePath(taskId: string): string {\n return join(getTaskOutputsDir(), `${taskId}.output`)\n}\n\nexport function ensureTaskOutputsDirExists(): void {\n const dir = getTaskOutputsDir()\n if (existsSync(dir)) return\n mkdirSync(dir, { recursive: true })\n}\n\nexport function touchTaskOutputFile(taskId: string): string {\n ensureTaskOutputsDirExists()\n const filePath = getTaskOutputFilePath(taskId)\n if (!existsSync(filePath)) {\n const parent = dirname(filePath)\n if (!existsSync(parent)) mkdirSync(parent, { recursive: true })\n writeFileSync(filePath, '', 'utf8')\n }\n return filePath\n}\n\nexport function appendTaskOutput(taskId: string, chunk: string): void {\n try {\n ensureTaskOutputsDirExists()\n appendFileSync(getTaskOutputFilePath(taskId), chunk, 'utf8')\n } catch {\n }\n}\n\nexport function readTaskOutputDelta(\n taskId: string,\n offset: number,\n): {\n content: string\n newOffset: number\n} {\n try {\n const filePath = getTaskOutputFilePath(taskId)\n if (!existsSync(filePath)) return { content: '', newOffset: offset }\n const size = statSync(filePath).size\n if (size <= offset) return { content: '', newOffset: offset }\n return {\n content: readFileSync(filePath, 'utf8').slice(offset),\n newOffset: size,\n }\n } catch {\n return { content: '', newOffset: offset }\n }\n}\n\nexport function readTaskOutput(taskId: string): string {\n try {\n const filePath = getTaskOutputFilePath(taskId)\n if (!existsSync(filePath)) return ''\n return readFileSync(filePath, 'utf8')\n } catch {\n return ''\n }\n}\n"],
|
|
5
|
-
"mappings": "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,IAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AH7tBA,IAAM,2BAA2B;AACjC,IAAM,oBAAoB;AAC1B,IAAM,4BAA4B;AAYlC,IAAM,mCAAmC,oBAAI,IAAqB;AAClE,IAAM,gBAAgB,oBAAI,IAAoB;AAC9C,IAAM,iCAAiC,oBAAI,IAA2B;AACtE,IAAM,oCAAoC,oBAAI,IAG5C;AACF,IAAI,4BAA2C;AAE/C,SAAS,mBAAmB,SAAmD;AAC7E,QAAM,iBACJ,SAAS,SAAS,kBAAkB;AACtC,QAAM,aAAa,SAAS,SAAS,cAAc;AACnD,SAAO,GAAG,cAAc,IAAI,UAAU;AACxC;AAEO,SAAS,uBACd,SACQ;AACR,SAAO,mBAAmB,OAAO;AACnC;AAEO,SAAS,6BAA6B,iBAA+B;AAC1E,8BAA4B;AAC9B;AAMA,SAAS,YACP,SACQ;AACR,QAAM,kBAAkB,mBAAmB,OAAO;AAClD,QAAM,UAAU,SAAS,WAAW;AACpC,SAAO,GAAG,eAAe,IAAI,OAAO;AACtC;AAEA,SAAS,UAAU,QAAwB;AACzC,SAAO,YAAY,CAAC,EAAE,aAAa,CAAC,IAAI;AAC1C;AAEA,SAAS,SAAS,OAAkC;AAClD,SAAO,MAAM,UAAU,MAAM,MAAM,CAAC;AACtC;AAEA,SAAS,eAAuB;AAC9B,QAAM,YAAY,SAAS,oBAAoB;AAC/C,QAAM,OAAO,SAAS,eAAe;AACrC,QAAM,OAAO,SAAS,eAAe;AACrC,SAAO,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI;AACrC;AAEA,SAAS,oBAAoB,iBAAiC;AAC5D,QAAM,WAAW,cAAc,IAAI,eAAe;AAClD,MAAI,SAAU,QAAO;AAErB,QAAM,MAAM,iBAAiB;AAE7B,MAAI,OAAsB;AAC1B,WAAS,UAAU,GAAG,UAAU,mBAAmB,WAAW;AAC5D,WAAO,aAAa;AACpB,UAAM,OAAOC,MAAK,KAAK,GAAG,IAAI,KAAK;AACnC,QAAI,CAAC,WAAW,IAAI,EAAG;AAAA,EACzB;AAEA,MAAI,CAAC,KAAM,QAAO,aAAa;AAE/B,gBAAc,IAAI,iBAAiB,IAAI;AACvC,SAAO;AACT;AAEA,SAAS,4BAA4B,cAAqC;AACxE,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,WAAW,MAAM,YAAY,EAAE;AACrC,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,cAAc;AACpB,QAAM,MAAM,SAAS,YAAY,WAAW;AAC5C,MAAI,QAAQ,GAAI,QAAO;AACvB,MAAI,QAAQ,EAAG,QAAO;AACtB,SAAO,SAAS,MAAM,GAAG,GAAG;AAC9B;AAEA,SAAS,yBAAyB,iBAAwC;AACxE,QAAM,WAAW,+BAA+B,IAAI,eAAe;AACnE,MAAI,SAAU,QAAO;AACrB,QAAM,UAAyB;AAAA,IAC7B,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,EAC/B;AACA,iCAA+B,IAAI,iBAAiB,OAAO;AAC3D,SAAO;AACT;AAEA,SAAS,8BAAsC;AAC7C,QAAM,MACJ,QAAQ,IAAI,oCACZ,QAAQ,IAAI;AACd,MAAI,KAAK;AACP,UAAM,SAAS,OAAO,SAAS,KAAK,EAAE;AACtC,QAAI,OAAO,SAAS,MAAM,KAAK,SAAS,KAAK,UAAU,GAAI,QAAO;AAAA,EACpE;AACA,SAAO;AACT;AAEA,SAAS,2BAAmC;AAC1C,QAAM,MACJ,QAAQ,IAAI,4BACZ,QAAQ,IAAI;AACd,MAAI,KAAK;AACP,UAAM,SAAS,OAAO,SAAS,KAAK,EAAE;AACtC,QAAI,OAAO,SAAS,MAAM,KAAK,SAAS,KAAK,UAAU,GAAI,QAAO;AAAA,EACpE;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,MAKxB;AACT,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,gBAAgB;AACtB,QAAM,eAAe;AACrB,QAAM,kBAAkB;AACxB,QAAM,mBAAmB;AACzB,QAAM,gBAAgB;AACtB,QAAM,uBAAuB;AAE7B,SAAO;AAAA;AAAA;AAAA,EAGP,aAAa,iCAAiC,YAAY,0DAA0D,YAAY,WAAW,2DAA2D,YAAY,cAAc,aAAa,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oKAMnF,gBAAgB;AAAA;AAAA;AAAA;AAAA,oBAIhK,wBAAwB,IAAI,gBAAgB;AAAA;AAAA;AAAA,+BAGjC,wBAAwB;AAAA;AAAA;AAAA,uCAGhB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,SAK7C,aAAa;AAAA;AAAA,uBAEC,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,wBAAwB,IACpB,oCAAoC,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAazD,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUS,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQJ,oBAAoB;AAAA,wIACgG,oBAAoB;AAAA,iGAC3D,oBAAoB;AAAA;AAAA;AAGrH;AAEA,SAAS,8BAA8B,MAG5B;AACT,QAAM,EAAE,YAAY,aAAa,IAAI;AAErC,QAAM,gBAAgB;AACtB,QAAM,eAAe;AACrB,QAAM,kBAAkB;AAExB,SAAO;AAAA;AAAA;AAAA,EAGP,aAAa,iCAAiC,YAAY,0DAA0D,YAAY,0BAA0B,2DAA2D,YAAY,cAAc,aAAa,uBAAuB;AAAA;AAAA,qDAEhO,eAAe,6EAA6E,eAAe;AAChK;AAEA,SAAS,6BAA6B,cAA8B;AAClE,QAAM,uBAAuB;AAE7B,SAAO;AAAA;AAAA,0FAEiF,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qIAQ+B,oBAAoB;AAAA;AAAA;AAGzJ;AAEA,SAAS,0BAA0B,cAA8B;AAC/D,SAAO;AAAA;AAAA,8GAEqG,YAAY;AAC1H;AAEA,SAAS,mBAAmB,MAAsB;AAChD,SAAO;AAAA,EAAsB,IAAI;AAAA;AACnC;AAEO,SAAS,iCACd,UACA,SACU;AACV,QAAM,kBAAkB,mBAAmB,OAAO;AAClD,QAAM,WAAW,YAAY,OAAO;AACpC,QAAM,QAAQ,yBAAyB,eAAe;AACtD,QAAM,YAAsB,CAAC;AAE7B,QAAM,iBAAiB,SAAS,OAAO,OAAK,GAAG,SAAS,WAAW,EAAE;AAErE,MAAI,kBAAkB,OAAO,GAAG;AAC9B,UAAM,WACJ,kCAAkC,IAAI,QAAQ,KAC7C;AAAA,MACC,aAAa;AAAA,MACb,2BAA2B;AAAA,IAC7B;AAEF,QACE,SAAS,eACT,iBAAiB,SAAS,4BACxB,2BACF;AACA,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,eAAe,gBAAgB,QAAQ,SAAS,eAAe;AACrE,UAAM,aAAa,WAAW,YAAY;AAE1C,QAAI,MAAM,qBAAqB,YAAY;AACzC,gBAAU;AAAA,QACR,mBAAmB,6BAA6B,YAAY,CAAC;AAAA,MAC/D;AACA,YAAM,oBAAoB;AAAA,IAC5B;AAEA,UAAM,aAAa,CAAC,CAAC,QAAQ;AAC7B,cAAU;AAAA,MACR;AAAA,QACE,aACI,8BAA8B,EAAE,YAAY,aAAa,CAAC,IAC1D,0BAA0B;AAAA,UACxB;AAAA,UACA;AAAA,UACA,0BAA0B,4BAA4B;AAAA,UACtD,uBAAuB,yBAAyB;AAAA,QAClD,CAAC;AAAA,MACP;AAAA,IACF;AAEA,mCAA+B,IAAI,iBAAiB,KAAK;AACzD,sCAAkC,IAAI,UAAU;AAAA,MAC9C,aAAa;AAAA,MACb,2BAA2B;AAAA,IAC7B,CAAC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,6BAA6B;AACrC,UAAM,eAAe,gBAAgB,QAAQ,SAAS,eAAe;AACrE,cAAU,KAAK,mBAAmB,0BAA0B,YAAY,CAAC,CAAC;AAC1E,UAAM,8BAA8B;AACpC,mCAA+B,IAAI,iBAAiB,KAAK;AAAA,EAC3D;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,SAAmC;AACnE,QAAM,MAAM,mBAAmB,OAAO;AACtC,SAAO,iCAAiC,IAAI,GAAG,KAAK;AACtD;AAEO,SAAS,cAAc,SAE5B;AACA,QAAM,MAAM,mBAAmB,OAAO;AACtC,mCAAiC,IAAI,KAAK,IAAI;AAC9C,SAAO,EAAE,cAAc,gBAAgB,SAAS,SAAS,GAAG,EAAE;AAChE;AAEO,SAAS,gCAAgC,iBAA+B;AAC7E,mCAAiC,IAAI,iBAAiB,IAAI;AAC5D;AAgBO,SAAS,+BAA+B,iBAA+B;AAC5E,mCAAiC,IAAI,iBAAiB,KAAK;AAC3D,QAAM,QAAQ,yBAAyB,eAAe;AACtD,QAAM,oBAAoB;AAC1B,QAAM,8BAA8B;AACpC,iCAA+B,IAAI,iBAAiB,KAAK;AAC3D;AAMO,SAAS,8BACd,iBACe;AACf,SAAO,cAAc,IAAI,eAAe,KAAK;AAC/C;AAEO,SAAS,4BACd,UACA,SACS;AACT,QAAM,kBAAkB,mBAAmB,OAAO;AAClD,MAAI,cAAc,IAAI,eAAe,EAAG,QAAO;AAE/C,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,UAAM,MAAY,SAAmB,CAAC;AACtC,UAAM,aAAa,OAAO,KAAK,SAAS,WAAW,IAAI,KAAK,KAAK,IAAI;AACrE,QAAI,YAAY;AACd,oBAAc,IAAI,iBAAiB,UAAU;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,KAAK,eAAe;AACjC,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AAEvC,UAAM,eACJ,OAAQ,KAAa,iBAAiB,WACjC,KAAa,eACd,OAAQ,KAAa,aAAa,WAC/B,KAAa,WACd;AAER,QAAI,CAAC,aAAc;AAEnB,UAAM,OAAO,4BAA4B,YAAY;AACrD,QAAI,CAAC,KAAM;AAEX,kBAAc,IAAI,iBAAiB,IAAI;AACvC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,mBAA2B;AACzC,QAAM,MAAMC,MAAK,eAAe,GAAG,OAAO;AAC1C,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,gBACd,SACA,iBACQ;AACR,QAAM,MAAM,iBAAiB;AAC7B,QAAM,MAAM,mBAAmB;AAC/B,QAAM,OAAO,oBAAoB,GAAG;AAEpC,MAAI,CAAC,QAAS,QAAOA,MAAK,KAAK,GAAG,IAAI,KAAK;AAC3C,SAAOA,MAAK,KAAK,GAAG,IAAI,UAAU,OAAO,KAAK;AAChD;AAEA,SAAS,oBAAoB,MAAsB;AACjD,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI;AACF,WAAO,aAAa,QAAQ;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAuBO,SAAS,wCAAwC,MAAuB;AAC7E,QAAM,MAAM,6BAA6B;AACzC,QAAM,WAAW,oBAAoB,gBAAgB,QAAW,GAAG,CAAC;AACpE,QAAM,SAAS,oBAAoB,IAAI;AACvC,SAAO,WAAW;AACpB;AAYO,SAAS,aACd,SACA,iBAC4D;AAC5D,QAAM,eAAe,gBAAgB,SAAS,eAAe;AAC7D,MAAI,CAAC,WAAW,YAAY,GAAG;AAC7B,WAAO,EAAE,SAAS,IAAI,QAAQ,OAAO,aAAa;AAAA,EACpD;AACA,SAAO;AAAA,IACL,SAAS,aAAa,cAAc,MAAM;AAAA,IAC1C,QAAQ;AAAA,IACR;AAAA,EACF;AACF;;;AHhfA,IAAM,sBAAmE,CAAC;AAC1E,IAAM,uBAAuB;AAE7B,IAAM,yBAAyB,oBAAI,IAAI,CAAC,UAAU,SAAS,OAAO,CAAC;AAEnE,SAAS,kBAAkB,OAAgD;AACzE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,uBAAuB,IAAK,MAAgC,QAAQ,EAAE;AAE1E;AAEA,SAAS,UAAU,KAAsB;AACvC,MAAIC,YAAW,GAAG,EAAG,QAAO;AAC5B,MAAI;AACF,IAAAC,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAClC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,kBAAkB,KAAK,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEA,SAAS,cACP,MACA,MACA,WAA2B,QAClB;AACT,MAAI;AACF,kBAAc,MAAM,MAAM,QAAQ;AAClC,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,kBAAkB,KAAK,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEO,IAAM,aAAa,WAAW;AAErC,IAAM,QAAQ,SAAS,eAAe;AAEtC,SAAS,cAAcC,MAAqB;AAC1C,SAAOA,KAAI,QAAQ,iBAAiB,GAAG;AACzC;AAEA,SAAS,qBAA6B;AACpC,SAAO,QAAQ,IAAI,0BAA0B,MAAM;AACrD;AAEA,SAAS,gBAAwB;AAC/B,SAAO,QAAQ,IAAI,iBAAiB,eAAe;AACrD;AAEO,IAAM,cAAc;AAAA,EACzB,QAAQ,MAAMC,MAAK,cAAc,GAAG,cAAc,QAAQ,IAAI,CAAC,GAAG,QAAQ;AAAA,EAC1E,UAAU,MACRA,MAAK,cAAc,GAAG,cAAc,QAAQ,IAAI,CAAC,GAAG,UAAU;AAAA,EAChE,SAAS,CAAC,eACRA;AAAA,IACE,mBAAmB;AAAA,IACnB,cAAc,QAAQ,IAAI,CAAC;AAAA,IAC3B,YAAY,UAAU;AAAA,EACxB;AACJ;AAEO,IAAM,qBAAqB;AAAA,EAChC,QAAQ,MACNA,MAAK,mBAAmB,GAAG,cAAc,QAAQ,IAAI,CAAC,GAAG,QAAQ;AAAA,EACnE,UAAU,MACRA,MAAK,mBAAmB,GAAG,cAAc,QAAQ,IAAI,CAAC,GAAG,UAAU;AAAA,EACrE,SAAS,CAAC,eACRA;AAAA,IACE,mBAAmB;AAAA,IACnB,cAAc,QAAQ,IAAI,CAAC;AAAA,IAC3B,YAAY,UAAU;AAAA,EACxB;AACJ;AAEO,SAAS,eAAe,MAAoB;AACjD,SAAO,KAAK,YAAY,EAAE,QAAQ,SAAS,GAAG;AAChD;AAEA,IAAM,OAAO,eAAe,oBAAI,KAAK,CAAC;AAEtC,SAAS,gBAAwB;AAC/B,SAAOA,MAAK,YAAY,OAAO,GAAG,OAAO,MAAM;AACjD;AAEO,SAAS,gBACd,gBACA,YACA,iBACQ;AACR,SAAOA;AAAA,IACL,YAAY,SAAS;AAAA,IACrB,GAAG,cAAc,GAAG,aAAa,IAAI,IAAI,UAAU,KAAK,EAAE,GACxD,kBAAkB,IAAI,cAAc,eAAe,KAAK,EAC1D;AAAA,EACF;AACF;AAEA,IAAM,8BAA8B;AACpC,IAAI,wBAAwB;AAE5B,SAAS,mCAAmC;AAC1C,MAAI,sBAAuB;AAC3B,0BAAwB;AAExB,QAAM,YAAY,mBAAmB,SAAS;AAC9C,QAAM,SAAS,YAAY,SAAS;AAEpC,MAAI,CAACH,YAAW,SAAS,EAAG;AAE5B,QAAM,YACJA,YAAW,MAAM,KACjB,YAAY,MAAM,EAAE,KAAK,UAAQ,KAAK,SAAS,OAAO,CAAC;AACzD,MAAI,UAAW;AAEf,MAAI;AACF,IAAAC,WAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EACvC,QAAQ;AACN;AAAA,EACF;AAEA,MAAI,cAAwB,CAAC;AAC7B,MAAI;AACF,kBAAc,YAAY,SAAS,EAAE,OAAO,UAAQ,KAAK,SAAS,OAAO,CAAC;AAAA,EAC5E,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,SAAS,YACZ,IAAI,UAAQ;AACX,QAAI;AACF,YAAM,QAAQ,SAASE,MAAK,WAAW,IAAI,CAAC;AAC5C,aAAO,EAAE,MAAM,SAAS,MAAM,QAAQ;AAAA,IACxC,QAAQ;AACN,aAAO,EAAE,MAAM,SAAS,EAAE;AAAA,IAC5B;AAAA,EACF,CAAC,EACA,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,EACpC,MAAM,GAAG,2BAA2B;AAEvC,aAAW,EAAE,KAAK,KAAK,QAAQ;AAC7B,UAAM,MAAMA,MAAK,WAAW,IAAI;AAChC,UAAM,OAAOA,MAAK,QAAQ,IAAI;AAC9B,QAAIH,YAAW,IAAI,EAAG;AACtB,QAAI;AACF,mBAAa,KAAK,IAAI;AAAA,IACxB,QAAQ;AAAA,IACR;AAAA,EACF;AACF;AAEO,SAAS,SAAS,OAAsB;AAC7C,MAAI;AACF,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,cAAQ,MAAM,KAAK;AAAA,IACrB;AAEA,UAAM,WACJ,iBAAiB,QAAQ,MAAM,SAAS,MAAM,UAAU,OAAO,KAAK;AAEtE,UAAM,YAAY;AAAA,MAChB,OAAO;AAAA,MACP,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAEA,QAAI,oBAAoB,UAAU,sBAAsB;AACtD,0BAAoB,MAAM;AAAA,IAC5B;AACA,wBAAoB,KAAK,SAAS;AAElC,gBAAY,cAAc,GAAG;AAAA,MAC3B,OAAO;AAAA,IACT,CAAC;AAAA,EACH,QAAQ;AAAA,EACR;AACA,mBAAiB,KAAK;AACxB;AAUA,SAAS,QAAQ,MAAwB;AACvC,MAAI,CAACI,YAAW,IAAI,GAAG;AACrB,WAAO,CAAC;AAAA,EACV;AACA,MAAI;AACF,WAAO,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAAA,EAC9C,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAEA,SAAS,YAAY,MAAc,SAAuB;AACxD,MAAI,QAAQ,IAAI,cAAc,YAAY;AACxC;AAAA,EACF;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,MAAI,CAAC,UAAU,GAAG,GAAG;AACnB;AAAA,EACF;AAEA,MAAI,CAACD,YAAW,IAAI,KAAK,CAAC,cAAc,MAAM,IAAI,GAAG;AACnD;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,IAAI;AAC7B,QAAM,uBAAuB;AAAA,IAC3B,GAAG;AAAA,IACH,KAAK,QAAQ,IAAI;AAAA,IACjB,UAAU,QAAQ,IAAI;AAAA,IACtB,WAAW;AAAA,IACX,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,SAAS,MAAM;AAAA,EACjB;AACA,WAAS,KAAK,oBAAoB;AAElC,gBAAc,MAAM,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AACvD;AAEO,SAAS,aACd,MACA,UACA,SACM;AACN,MAAI,QAAQ,IAAI,cAAc,YAAY;AACxC;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,QAAQ;AACpB;AAAA,EACF;AAEA,QAAM,MAAM,QAAQ,IAAI;AACxB,MAAI,CAAC,UAAU,GAAG,GAAG;AACnB;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,kBAClB,8BAA8B,QAAQ,eAAe,IACrD;AAEJ,QAAM,uBAAuB,SAAS,IAAI,cAAY;AAAA,IACpD,GAAG;AAAA,IACH,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,IACvB,KAAK,QAAQ,IAAI;AAAA,IACjB,UAAU,QAAQ,IAAI;AAAA,IACtB,WAAW;AAAA,IACX,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,SAAS,MAAM;AAAA,EACjB,EAAE;AAEF,gBAAc,MAAM,KAAK,UAAU,sBAAsB,MAAM,CAAC,CAAC;AACnE;AAEA,eAAsB,YACpB,OAAO,YAAY,SAAS,GACN;AACtB,MAAI,SAAS,YAAY,SAAS,GAAG;AACnC,qCAAiC;AAAA,EACnC;AAEA,QAAM,cACJ,SAAS,YAAY,SAAS,IAC1B,CAAC,YAAY,SAAS,GAAG,mBAAmB,SAAS,CAAC,IACtD,CAAC,IAAI;AAEX,QAAM,gBAAgB,YAAY,OAAO,OAAKA,YAAW,CAAC,CAAC;AAC3D,MAAI,cAAc,WAAW,GAAG;AAC9B,aAAS,oBAAoB,IAAI,EAAE;AACnC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,gBACJ,MAAM,QAAQ;AAAA,IACZ,cAAc,IAAI,OAAM,YAAW;AACjC,YAAM,WAAW,MAAM,WAAW,QAAQ,OAAO;AACjD,aAAO,SAAS,IAAI,WAAS,EAAE,MAAM,QAAQ,EAAE;AAAA,IACjD,CAAC;AAAA,EACH,GACA,KAAK;AAEP,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,cAAc,aAAa,OAAO,CAAC,EAAE,KAAK,MAAM;AACpD,QAAI,KAAK,IAAI,IAAI,EAAG,QAAO;AAC3B,SAAK,IAAI,IAAI;AACb,WAAO;AAAA,EACT,CAAC;AAED,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,YAAY,IAAI,OAAO,EAAE,MAAM,QAAQ,GAAG,MAAM;AAC9C,YAAM,WAAWE,MAAK,SAAS,IAAI;AACnC,YAAM,UAAU,MAAM,WAAW,SAAS,UAAU,MAAM;AAC1D,YAAM,WAAW,KAAK,MAAM,OAAO;AACnC,YAAM,eAAe,SAAS,CAAC;AAC/B,YAAM,cAAc,SAAS,SAAS,SAAS,CAAC;AAChD,YAAM,cACJ,cAAc,SAAS,UACvB,OAAO,cAAc,SAAS,YAAY,WACtC,cAAc,SAAS,UACvB;AAEN,YAAM,EAAE,MAAM,YAAY,gBAAgB,IAAI,iBAAiB,IAAI;AACnE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,SAAS,eAAe,cAAc,aAAa,IAAI;AAAA,QACvD,UAAU,aAAa,YACnB,eAAe,YAAY,SAAS,IACpC,eAAe,IAAI;AAAA,QACvB,aACE,YAAY,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,KACpC,YAAY,SAAS,KAAK,WAAM,OAAO;AAAA,QAC5C,cAAc,SAAS;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,SAAS,QAAQ,OAAO,OAAK,EAAE,SAAS,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO;AAAA,IACrE,GAAG;AAAA,IACH,OAAO;AAAA,EACT,EAAE;AACJ;AAEO,SAAS,iBAAiB,UAI/B;AACA,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AAClC,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,QAAM,eAAe,KAAK,SAAS,aAAa;AAEhD,MAAI,OAAO;AACX,MAAI,aAAiC;AACrC,MAAI,kBAAsC;AAE1C,MAAI,cAAc;AAChB,UAAM,iBAAiB,SAAS,QAAQ,WAAW;AACnD,sBAAkB,OAAO,SAAS,iBAAiB,CAAC,CAAC;AACrD,QAAI,iBAAiB,GAAG;AACtB,mBAAa,OAAO,SAAS,iBAAiB,CAAC,CAAC;AAChD,aAAO,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,IACtC,OAAO;AACL,aAAO,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,IACtC;AAAA,EACF,WAAW,SAAS,SAAS,GAAG;AAC9B,UAAM,cAAc,OAAO,SAAS,SAAS,SAAS,CAAC,CAAC;AACxD,iBAAa,eAAe,IAAI,cAAc;AAC9C,WAAO,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,EACtC,OAAO;AACL,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,YAAY,gBAAgB;AAC7C;AAEO,SAAS,8BACd,MACA,YACA,iBACQ;AACR,SAAOF,YAAW,gBAAgB,MAAM,YAAY,eAAe,CAAC,GAAG;AACrE;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,mCACd,MACA,YACQ;AACR,MAAI,kBAAkB;AACtB,SAAOA,YAAW,gBAAgB,MAAM,YAAY,eAAe,CAAC,GAAG;AACrE;AAAA,EACF;AACA,SAAO;AACT;AAwBO,SAAS,SAAS,MAAgC;AACvD,SAAO,KAAK,KAAK,CAAC,GAAG,MAAM;AACzB,UAAM,eAAe,EAAE,SAAS,QAAQ,IAAI,EAAE,SAAS,QAAQ;AAC/D,QAAI,iBAAiB,GAAG;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,EAAE,QAAQ,QAAQ,IAAI,EAAE,QAAQ,QAAQ;AAC5D,QAAI,gBAAgB,GAAG;AACrB,aAAO;AAAA,IACT;AAEA,YAAQ,EAAE,cAAc,MAAM,EAAE,cAAc;AAAA,EAChD,CAAC;AACH;AAEO,SAAS,WAAW,MAAoB;AAC7C,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,YAAY,IAAI,KAAK,GAAG;AAC9B,YAAU,QAAQ,UAAU,QAAQ,IAAI,CAAC;AAEzC,QAAM,UAAU,KAAK,aAAa,MAAM,IAAI,aAAa;AACzD,QAAM,cAAc,KAAK,aAAa,MAAM,UAAU,aAAa;AAEnE,QAAM,UAAU,KACb,mBAAmB,SAAS;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC,EACA,YAAY;AAEf,MAAI,SAAS;AACX,WAAO,YAAY,OAAO;AAAA,EAC5B,WAAW,aAAa;AACtB,WAAO,gBAAgB,OAAO;AAAA,EAChC,OAAO;AACL,WACE,KAAK,mBAAmB,SAAS;AAAA,MAC/B,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC,IAAI,OAAO,OAAO;AAAA,EAEvB;AACF;AAEO,SAAS,eAAe,GAAiB;AAC9C,QAAM,IAAI,EAAE,MAAM,KAAK;AACvB,SAAO,IAAI;AAAA,IACT,KAAK;AAAA,MACH,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,MAClB,SAAS,EAAE,CAAC,GAAI,EAAE,IAAI;AAAA,MACtB,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,MAClB,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,MAClB,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,MAClB,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,MAClB,SAAS,EAAE,CAAC,GAAI,EAAE;AAAA,IACpB;AAAA,EACF;AACF;AAEO,SAAS,YAAY,YAAoB,OAAsB;AACpE,MAAI;AACF,UAAM,SAAS,YAAY,QAAQ,UAAU;AAC7C,UAAM,WACJ,iBAAiB,QAAQ,MAAM,SAAS,MAAM,UAAU,OAAO,KAAK;AACtE,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AAEzC,UAAM,UAAUG,MAAK,QAAQ,OAAO,MAAM;AAE1C,QAAI,CAACC,YAAW,MAAM,GAAG;AACvB,MAAAC,WAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AAEA,QAAI,CAACD,YAAW,OAAO,GAAG;AACxB,oBAAc,SAAS,MAAM,MAAM;AAAA,IACrC;AAEA,UAAM,YAAY;AAAA,MAChB,OAAO;AAAA,MACP;AAAA,MACA,WAAW;AAAA,MACX,KAAK,QAAQ,IAAI;AAAA,IACnB;AAEA,UAAM,WAAW,QAAQ,OAAO;AAChC,aAAS,KAAK,SAAS;AACvB,kBAAc,SAAS,KAAK,UAAU,UAAU,MAAM,CAAC,GAAG,MAAM;AAAA,EAClE,QAAQ;AAAA,EACR;AACF;;;AOjhBA;AAAA,EACE;AAAA,EACA,cAAAE;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,OACK;AACP,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAG9B,SAASC,eAAcC,MAAqB;AAC1C,SAAOA,KAAI,QAAQ,iBAAiB,GAAG;AACzC;AAEA,IAAM,eAAe,QAAQ,IAAI;AAE1B,SAAS,oBAA4B;AAC1C,SAAOC,MAAK,eAAe,GAAGF,eAAc,YAAY,GAAG,OAAO;AACpE;AAEO,SAAS,sBAAsB,QAAwB;AAC5D,SAAOE,MAAK,kBAAkB,GAAG,GAAG,MAAM,SAAS;AACrD;AAEO,SAAS,6BAAmC;AACjD,QAAM,MAAM,kBAAkB;AAC9B,MAAIC,YAAW,GAAG,EAAG;AACrB,EAAAC,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC;AAEO,SAAS,oBAAoB,QAAwB;AAC1D,6BAA2B;AAC3B,QAAM,WAAW,sBAAsB,MAAM;AAC7C,MAAI,CAACD,YAAW,QAAQ,GAAG;AACzB,UAAM,SAASE,SAAQ,QAAQ;AAC/B,QAAI,CAACF,YAAW,MAAM,EAAG,CAAAC,WAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAC9D,IAAAE,eAAc,UAAU,IAAI,MAAM;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAgB,OAAqB;AACpE,MAAI;AACF,+BAA2B;AAC3B,mBAAe,sBAAsB,MAAM,GAAG,OAAO,MAAM;AAAA,EAC7D,QAAQ;AAAA,EACR;AACF;AAuBO,SAAS,eAAe,QAAwB;AACrD,MAAI;AACF,UAAM,WAAW,sBAAsB,MAAM;AAC7C,QAAI,CAACC,YAAW,QAAQ,EAAG,QAAO;AAClC,WAAOC,cAAa,UAAU,MAAM;AAAA,EACtC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ARhEA,SAAS,UAAU,KAA4B;AAC7C,MAAI;AACF,WAAO,MAAM,KAAK,KAAK,EAAE,SAAS,KAAK,CAAC,KAAK;AAAA,EAC/C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,KAAqB;AACxC,SAAO,UAAU,GAAG,KAAK;AAC3B;AAEA,SAAS,gBAAgB,SAIH;AACpB,QAAM,QAAQ,MAAM,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,GAAG;AAAA,IACxD,KAAK,QAAQ;AAAA,IACb,KAAK,QAAQ,OAAO,QAAQ;AAAA,IAC5B,OAAO,CAAC,WAAW,QAAQ,MAAM;AAAA,IACjC,aAAa;AAAA,EACf,CAAC;AAED,QAAM,SAAS,IAAI,QAAQ,CAAAC,aAAW;AACpC,UAAM,OAAO,MAAMA,SAAQ;AAC3B,UAAM,KAAK,QAAQ,IAAI;AACvB,UAAM,KAAK,SAAS,IAAI;AAAA,EAC1B,CAAC;AAED,SAAO;AACT;AAkCA,SAAS,gCACP,QACA,SACQ;AACR,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,CAAC,WAAW,QAAQ,YAAY,KAAM,QAAO;AACjD,QAAM,WAAW,QAAQ,sBAAsB,QAAQ;AACvD,MAAI,aAAa,SAAU,QAAO;AAClC,MAAI,OAAO,SAAS,WAAW,EAAG,QAAO;AAEzC,QAAM,QAAQ,OAAO,YAAY;AACjC,QAAM,4BACJ,OAAO,SAAS,cAAc,KAC7B,MAAM,SAAS,cAAc,MAC3B,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,yBAAyB,MACpE,MAAM,SAAS,yBAAyB,KAAK,MAAM,SAAS,SAAS;AAExE,MAAI,CAAC,0BAA2B,QAAO;AAEvC,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,eAAe,OAAwB;AAC9C,SACE,MAAM,SAAS,GAAG,KAClB,MAAM,SAAS,GAAG,KAClB,MAAM,SAAS,GAAG,KAClB,MAAM,SAAS,GAAG;AAEtB;AAEO,SAAS,0BACd,OACA,SACQ;AACR,QAAMC,OAAM,SAAS,OAAO,QAAQ,IAAI;AACxC,QAAM,UAAU,SAAS,WAAWC,SAAQ;AAE5C,MAAI,WAAW;AACf,MAAI,UAAU,IAAK,YAAW;AAAA,WACrB,MAAM,WAAW,IAAI,EAAG,YAAW,UAAU,MAAM,MAAM,CAAC;AAAA,WAC1D,MAAM,WAAW,IAAI,KAAK,MAAM,WAAW,KAAK;AACvD,eAAWF,SAAQC,MAAK,KAAK;AAAA,WACtB,CAACE,YAAW,KAAK,EAAG,YAAWH,SAAQC,MAAK,KAAK;AAE1D,MAAI,eAAe,QAAQ,GAAG;AAC5B,UAAM,SAAS,SAAS,MAAM,SAAS,EAAE,CAAC;AAC1C,QAAI,UAAU,WAAW,KAAK;AAC5B,YAAM,MAAM,OAAO,SAAS,GAAG,IAAI,OAAO,MAAM,GAAG,EAAE,IAAIG,SAAQ,MAAM;AACvE,UAAI;AACF,cAAM,OAAOC,cAAa,GAAG;AAC7B,cAAM,SAAS,SAAS,MAAM,IAAI,MAAM;AACxC,eAAO,OAAO;AAAA,MAChB,QAAQ;AAAA,MACR;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,eAAWA,cAAa,QAAQ;AAAA,EAClC,QAAQ;AAAA,EACR;AAEA,SAAO;AACT;AAEO,SAAS,8BAA8B,SAMjC;AACX,QAAMJ,OAAM,QAAQ,OAAO,QAAQ,IAAI;AACvC,QAAM,UAAU,QAAQ,WAAWC,SAAQ;AAE3C,QAAM,OAAiB,CAAC;AAExB,QAAM,cAAc,QAAQ;AAC5B,MAAI,aAAa;AACf,SAAK,KAAK,aAAa,KAAK,GAAG;AAE/B,UAAM,eAAyB,CAAC;AAEhC,QAAII,YAAW,WAAW,GAAG;AAC3B,WAAK,KAAK,UAAU,aAAa,WAAW;AAC5C,mBAAa,KAAK,WAAW;AAAA,IAC/B;AACA,eAAW,OAAO,YAAY,aAAa,CAAC,GAAG;AAC7C,YAAM,WAAW,0BAA0B,KAAK,EAAE,KAAAL,MAAK,QAAQ,CAAC;AAChE,UAAI,SAAS,WAAW,OAAO,EAAG;AAClC,UAAI,CAACK,YAAW,QAAQ,EAAG;AAC3B,WAAK,KAAK,UAAU,UAAU,QAAQ;AACtC,mBAAa,KAAK,QAAQ;AAAA,IAC5B;AAEA,UAAM,kBAAkB;AAAA,MACtB,GAAI,YAAY,mBAAmB,CAAC;AAAA,MACpC,GAAI,QAAQ,wBAAwB,CAAC;AAAA,IACvC;AACA,eAAW,OAAO,iBAAiB;AACjC,YAAM,WAAW,0BAA0B,KAAK,EAAE,KAAAL,MAAK,QAAQ,CAAC;AAChE,UAAI,SAAS,WAAW,OAAO,EAAG;AAClC,UAAI,CAACK,YAAW,QAAQ,EAAG;AAC3B,YAAM,gBAAgB,aAAa;AAAA,QACjC,UAAQ,aAAa,QAAQ,SAAS,WAAW,OAAO,GAAG;AAAA,MAC7D;AACA,UAAI,CAAC,cAAe;AACpB,WAAK,KAAK,aAAa,UAAU,QAAQ;AAAA,IAC3C;AAAA,EACF,OAAO;AACL,SAAK,KAAK,UAAU,KAAK,GAAG;AAAA,EAC9B;AAEA,QAAM,WAAW,CAAC,GAAI,QAAQ,YAAY,YAAY,CAAC,CAAE;AACzD,MAAIA,YAAW,uBAAuB;AACpC,aAAS,KAAK,uBAAuB;AAEvC,aAAW,OAAO,UAAU;AAC1B,UAAM,WAAW,0BAA0B,KAAK,EAAE,KAAAL,MAAK,QAAQ,CAAC;AAChE,QAAI,SAAS,WAAW,OAAO,EAAG;AAClC,QAAI,CAACK,YAAW,QAAQ,EAAG;AAC3B,QAAIC,UAAS,QAAQ,EAAE,YAAY,EAAG,MAAK,KAAK,WAAW,QAAQ;AAAA,QAC9D,MAAK,KAAK,aAAa,aAAa,QAAQ;AAAA,EACnD;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB,SAU1B;AACX,QAAM,OAAiB,CAAC;AAExB,OAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,QAAQ,wBAAyB,MAAK,KAAK,eAAe;AAE9D,OAAK;AAAA,IACH,GAAG,8BAA8B;AAAA,MAC/B,KAAK,QAAQ;AAAA,MACb,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ;AAAA,MACpB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,OAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,0BAA2B,MAAK,KAAK,UAAU,OAAO;AAEnE,OAAK,KAAK,MAAM,QAAQ,cAAc,MAAM,QAAQ,OAAO;AAE3D,SAAO,CAAC,QAAQ,WAAW,GAAG,IAAI;AACpC;AAEA,SAAS,2BAA2B,SAIvB;AACX,QAAM,gBAAgB,SAAS;AAC/B,QAAM,iBAAiB,SAAS;AAChC,QAAM,WAAW,SAAS,YAAY,QAAQ;AAE9C,QAAMC,OAAgB,CAAC,qBAAqB,kBAAkB;AAC9D,MAAI,CAAC,iBAAiB,CAAC,eAAgB,QAAOA;AAE9C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACV,EAAAA,KAAI,KAAK,YAAY,OAAO,EAAE;AAC9B,EAAAA,KAAI,KAAK,YAAY,OAAO,EAAE;AAE9B,MAAI,eAAe;AACjB,IAAAA,KAAI,KAAK,+BAA+B,aAAa,EAAE;AACvD,IAAAA,KAAI,KAAK,gCAAgC,aAAa,EAAE;AACxD,IAAAA,KAAI,KAAK,+BAA+B,aAAa,EAAE;AACvD,IAAAA,KAAI,KAAK,gCAAgC,aAAa,EAAE;AAAA,EAC1D;AAEA,MAAI,gBAAgB;AAClB,IAAAA,KAAI,KAAK,iCAAiC,cAAc,EAAE;AAC1D,IAAAA,KAAI,KAAK,iCAAiC,cAAc,EAAE;AAC1D,QAAI,aAAa,UAAU;AACzB,MAAAA,KAAI;AAAA,QACF,8DAA8D,cAAc;AAAA,MAC9E;AAAA,IACF;AACA,IAAAA,KAAI,KAAK,iCAAiC,cAAc,EAAE;AAC1D,IAAAA,KAAI,KAAK,iCAAiC,cAAc,EAAE;AAC1D,IAAAA,KAAI,KAAK,yBAAyB,cAAc,EAAE;AAClD,IAAAA,KAAI;AAAA,MACF,sCAAsC,iBAAiB,cAAc;AAAA,IACvE;AACA,IAAAA,KAAI;AAAA,MACF,uCAAuC,iBAAiB,cAAc;AAAA,IACxE;AACA,QAAI,eAAe;AACjB,MAAAA,KAAI,KAAK,2BAA2B;AACpC,MAAAA,KAAI,KAAK,kCAAkC;AAC3C,MAAAA,KAAI,KAAK,uBAAuB,aAAa,EAAE;AAAA,IACjD;AACA,IAAAA,KAAI,KAAK,kCAAkC,cAAc,EAAE;AAC3D,IAAAA,KAAI,KAAK,kCAAkC,cAAc,EAAE;AAAA,EAC7D;AAEA,SAAOA;AACT;AAEA,SAAS,iCAAiC,SAAyB;AACjE,SACE,MACA,QACG,QAAQ,kBAAkB,MAAM,EAChC,QAAQ,iBAAiB,OAAO,EAChC,QAAQ,WAAW,oBAAoB,EACvC,QAAQ,SAAS,cAAc,EAC/B,QAAQ,OAAO,OAAO,EACtB,QAAQ,OAAO,MAAM,EACrB,QAAQ,uBAAuB,QAAQ,EACvC,QAAQ,iBAAiB,IAAI,IAChC;AAEJ;AAEA,SAAS,gCAA0C;AACjD,QAAM,cAAc,QAAQ,IAAI;AAChC,MAAI,CAAC,YAAa,QAAO,CAAC;AAC1B,MAAI,CAAC,YAAY,MAAM,oDAAoD;AACzE,WAAO,CAAC;AACV,QAAM,OAAO,YAAY,QAAQ,WAAW,EAAE;AAC9C,MAAI,KAAK,WAAW,eAAe;AACjC,WAAO,CAAC,MAAM,KAAK,QAAQ,YAAY,EAAE,CAAC;AAC5C,MAAI,KAAK,WAAW,OAAO,EAAG,QAAO,CAAC,MAAM,aAAa,IAAI;AAC7D,SAAO,CAAC,IAAI;AACd;AAEA,SAAS,iCACPC,QACA,QACU;AACV,QAAM,QAAkB,CAAC;AACzB,aAAW,OAAOA,QAAO;AACvB,UAAM,aAAa,0BAA0B,GAAG;AAChD,QAAI,eAAe,UAAU,GAAG;AAC9B,YAAM,QAAQ,iCAAiC,UAAU;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,QACjC,oBAAoB,MAAM;AAAA,MAC5B;AAEA,YAAM,SAAS,WAAW,MAAM,SAAS,EAAE,CAAC;AAC5C,UAAI,UAAU,WAAW,KAAK;AAC5B,cAAM,UAAU,OAAO,SAAS,GAAG,IAC/B,OAAO,MAAM,GAAG,EAAE,IAClBL,SAAQ,MAAM;AAClB,cAAM;AAAA,UACJ;AAAA,UACA,cAAc,KAAK,UAAU,OAAO,CAAC;AAAA,UACrC,oBAAoB,MAAM;AAAA,QAC5B;AAAA,MACF;AACA;AAAA,IACF;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,cAAc,KAAK,UAAU,UAAU,CAAC;AAAA,MACxC,oBAAoB,MAAM;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,+BACP,YACA,QACU;AACV,MAAI,CAAC,WAAY,QAAO,CAAC,oBAAoB;AAE7C,QAAM,QAAkB,CAAC,oBAAoB;AAC7C,aAAW,OAAO,WAAW,YAAY,CAAC,GAAG;AAC3C,UAAM,aAAa,0BAA0B,GAAG;AAChD,QAAI,eAAe,UAAU,GAAG;AAC9B,YAAM,QAAQ,iCAAiC,UAAU;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,QACjC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,YAAM;AAAA,QACJ;AAAA,QACA,cAAc,KAAK,UAAU,UAAU,CAAC;AAAA,QACxC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,QAAM;AAAA,IACJ,GAAG,iCAAiC,WAAW,YAAY,CAAC,GAAG,MAAM;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,gCACP,aACA,QACU;AACV,MAAI,CAAC,YAAa,QAAO,CAAC,qBAAqB;AAE/C,QAAM,QAAkB,CAAC;AAEzB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,oBAAoB,MAAM;AAAA,EAC5B;AAEA,aAAW,OAAO,8BAA8B,GAAG;AACjD,UAAM,aAAa,0BAA0B,GAAG;AAChD,UAAM;AAAA,MACJ;AAAA,MACA,cAAc,KAAK,UAAU,UAAU,CAAC;AAAA,MACxC,oBAAoB,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,aAAW,OAAO,YAAY,aAAa,CAAC,GAAG;AAC7C,UAAM,aAAa,0BAA0B,GAAG;AAChD,QAAI,eAAe,UAAU,GAAG;AAC9B,YAAM,QAAQ,iCAAiC,UAAU;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,QACjC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,YAAM;AAAA,QACJ;AAAA,QACA,cAAc,KAAK,UAAU,UAAU,CAAC;AAAA,QACxC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,YAAY,mBAAmB,CAAC,GAAG;AACnD,UAAM,aAAa,0BAA0B,GAAG;AAChD,QAAI,eAAe,UAAU,GAAG;AAC9B,YAAM,QAAQ,iCAAiC,UAAU;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,YAAY,KAAK,UAAU,KAAK,CAAC;AAAA,QACjC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,YAAM;AAAA,QACJ;AAAA,QACA,cAAc,KAAK,UAAU,UAAU,CAAC;AAAA,QACxC,oBAAoB,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,QAAM;AAAA,IACJ,GAAG;AAAA,MACD,YAAY,mBAAmB,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,6BAA6B,SAYhC;AACX,QAAM,SAAS;AAEf,QAAM,eAAyB;AAAA,IAC7B;AAAA,IACA,gCAAgC,MAAM;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,mBAAmB,QAAQ,oBAAoB,CAAC;AACtD,MAAI,CAAC,QAAQ,yBAAyB;AACpC,iBAAa,KAAK,kBAAkB;AAAA,EACtC,OAAO;AACL,QAAI,QAAQ,mBAAmB;AAC7B,mBAAa,KAAK,+CAA+C;AACjE,mBAAa,KAAK,kDAAkD;AACpE,mBAAa,KAAK,mDAAmD;AAAA,IACvE;AACA,QAAI,QAAQ,qBAAqB;AAC/B,mBAAa,KAAK,gCAAgC;AAAA,IACpD,WAAW,iBAAiB,SAAS,GAAG;AACtC,iBAAW,cAAc,kBAAkB;AACzC,cAAM,aAAa,0BAA0B,UAAU;AACvD,qBAAa;AAAA,UACX,4BAA4B,KAAK,UAAU,UAAU,CAAC;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,kBAAkB,QAAW;AACvC,mBAAa;AAAA,QACX,4CAA4C,QAAQ,aAAa;AAAA,MACnE;AACA,mBAAa;AAAA,QACX,+CAA+C,QAAQ,aAAa;AAAA,MACtE;AACA,mBAAa;AAAA,QACX,iDAAiD,QAAQ,aAAa;AAAA,MACxE;AAAA,IACF;AACA,QAAI,QAAQ,mBAAmB,QAAW;AACxC,mBAAa;AAAA,QACX,4CAA4C,QAAQ,cAAc;AAAA,MACpE;AACA,mBAAa;AAAA,QACX,+CAA+C,QAAQ,cAAc;AAAA,MACvE;AACA,mBAAa;AAAA,QACX,iDAAiD,QAAQ,cAAc;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAEA,eAAa,KAAK,EAAE;AACpB,eAAa,KAAK,aAAa;AAC/B,eAAa;AAAA,IACX,GAAG,+BAA+B,QAAQ,YAAY,MAAM;AAAA,EAC9D;AACA,eAAa,KAAK,EAAE;AACpB,eAAa,KAAK,cAAc;AAChC,eAAa;AAAA,IACX,GAAG,gCAAgC,QAAQ,aAAa,MAAM;AAAA,EAChE;AAEA,QAAM,UAAU,aAAa,KAAK,IAAI;AACtC,QAAM,iBAAiB,2BAA2B;AAAA,IAChD,eAAe,QAAQ;AAAA,IACvB,gBAAgB,QAAQ;AAAA,IACxB,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,YAAY,eAAe,SAC7B,UAAU,eAAe,KAAK,GAAG,CAAC,SAClC;AAEJ,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,GAAG,SAAS,GAAG,QAAQ,OAAO;AAAA,EAChC;AACF;AAyCO,SAAS,sCACd,YACQ;AACR,QAAM,QAAkB,CAAC;AACzB,MAAI,WAAW,kBAAkB,GAAG;AAClC,UAAM,IAAI,WAAW;AACrB,UAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,MAAM,EAAE,YAAY;AAAA,EACrD;AACA,MAAI,WAAW,kBAAkB,GAAG;AAClC,UAAM,IAAI,WAAW;AACrB,UAAM,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,MAAM,EAAE,YAAY;AAAA,EACrD;AACA,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,SAAO,mBAAmB,WAAW,MAAM,oBAAoB,MAAM,KAAK,IAAI,CAAC,UAAU,WAAW,UAAU;AAChH;AAWO,SAAS,uBAAuB,cAAwC;AAC7E,QAAM,SAAS,aAAa;AAC5B,QAAM,WAAW,aAAa;AAE9B,QAAM,gBACJ,WAAW,cACP,YAAY,aAAa,SAAY,eAAe,QAAQ,MAAM,EAAE,KACpE,WAAW,WACT,SAAS,aAAa,SAAY,mBAAmB,QAAQ,KAAK,EAAE,KACpE;AAER,SAAO;AAAA,IACL;AAAA,IACA,aAAa,aAAa,MAAM;AAAA,IAChC,gBAAgB,aAAa,UAAU;AAAA,IACvC,WAAW,MAAM;AAAA,IACjB,gCAAgC,aAAa,WAAW,KAAK,aAAa;AAAA,IAC1E;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AA4BO,IAAM,WAAN,MAAM,UAAS;AAAA,EACZ;AAAA,EACA,UAAmB;AAAA,EACnB,iBAA2C;AAAA,EAC3C,kBAA0C;AAAA,EAC1C,sBAAsD,oBAAI,IAAI;AAAA,EAEtE,YAAYH,MAAa;AACvB,SAAK,MAAMA;AAAA,EACb;AAAA,EAEA,OAAe,WAA4B;AAAA,EAE3C,OAAO,UAAU;AACf,QAAI,UAAS,UAAU;AACrB,gBAAS,SAAS,MAAM;AACxB,gBAAS,WAAW;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO,cAAwB;AAC7B,QAAI,CAAC,UAAS,YAAY,CAAC,UAAS,SAAS,SAAS;AACpD,gBAAS,WAAW,IAAI,UAAS,QAAQ,IAAI,CAAC;AAAA,IAChD;AACA,WAAO,UAAS;AAAA,EAClB;AAAA,EAEA,OAAO,uBACL,UACA,SACAO,OAAyB,QAAQ,KACvB;AACV,QAAI,aAAa,SAAS;AACxB,YAAM,UACJ,OAAOA,KAAI,YAAY,YAAYA,KAAI,QAAQ,SAAS,IACpDA,KAAI,UACJ;AACN,aAAO,CAAC,SAAS,MAAM,OAAO;AAAA,IAChC;AACA,UAAM,KAAKF,YAAW,SAAS,IAAI,YAAY;AAC/C,WAAO,CAAC,IAAI,MAAM,OAAO;AAAA,EAC3B;AAAA,EAEQ,YAAY,SAA2B;AAC7C,WAAO,UAAS;AAAA,MACd,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,gBACN,SACA,SAC4C;AAC5C,QAAI,CAAC,QAAQ,QAAS,QAAO;AAC7B,UAAM,WAAW,QAAQ,sBAAsB,QAAQ;AAEvD,UAAM,0BACJ,QAAQ,4BAA4B,SAChC,QAAQ,0BACR,QAAQ,iBAAiB,OACvB,QACA;AAER,UAAM,cACJ,QAAQ,gBACP,QAAQ,iBAAiB,QAAQ,cAAc,SAAS,IACrD,EAAE,WAAW,QAAQ,cAAc,OAAO,OAAO,EAAE,IACnD;AAEN,UAAM,aAAa,QAAQ;AAE3B,UAAM,uBAAuB,YAAY,UAAU,UAAU,KAAK;AAClE,UAAM,uBAAuB,gBAAgB;AAC7C,UAAM,yBAAyB,4BAA4B;AAE3D,QACE,CAAC,uBACD,CAAC,wBACD,CAAC,wBACD;AACA,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,QAAQ,aAAa,UAAU,MAAM,IAAI,SAAS;AACnE,UAAM,eAAe,YAAY,QAAQ;AAEzC,UAAML,OAAM,QAAQ,SAAS,KAAK;AAElC,QAAI,aAAa,SAAS;AACxB,YAAM,YACJ,QAAQ,wBAAwB,SAC5B,QAAQ,sBACP,UAAU,OAAO,KAAK,UAAU,YAAY;AACnD,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,UAAI;AACF,QAAAS,WAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C,QAAQ;AAAA,MAAC;AAET,YAAM,MAAM,uBAAuB;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,2BAA2B,QAAQ;AAAA,QACnC;AAAA,QACA,KAAAT;AAAA,MACF,CAAC;AAED,aAAO,EAAE,IAAI;AAAA,IACf;AAEA,QAAI,aAAa,UAAU;AACzB,YAAM,kBACJ,QAAQ,8BAA8B,SAClC,QAAQ,4BACRK,YAAW,uBAAuB,IAChC,0BACA,UAAU,cAAc;AAChC,UAAI,CAAC,iBAAiB;AACpB,eAAO;AAAA,MACT;AAEA,UAAI;AACF,QAAAI,WAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,MAC5C,QAAQ;AAAA,MAAC;AACT,UAAI;AACF,QAAAA,WAAU,qBAAqB,EAAE,WAAW,KAAK,CAAC;AAAA,MACpD,QAAQ;AAAA,MAAC;AAET,aAAO;AAAA,QACL,KAAK,6BAA6B;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAe,QAAQ;AAAA,UACvB,gBAAgB,QAAQ;AAAA,UACxB,kBAAkB,QAAQ;AAAA,UAC1B,qBAAqB,QAAQ;AAAA,UAC7B,mBAAmB,QAAQ;AAAA,UAC3B;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,qBAAqB,QAAyB;AACpD,UAAM,IAAI,OAAO,YAAY;AAC7B,WACE,EAAE,SAAS,QAAQ,KACnB,EAAE,SAAS,YAAY,KACtB,EAAE,SAAS,WAAW,KAAK,EAAE,SAAS,QAAQ;AAAA,EAEnD;AAAA,EAEQ,kBACN,QACA,QACM;AACN,QAAI,CAAC,OAAQ;AACb,QAAI;AACF;AAAC,MAAC,OAAe,cAAc,MAAM;AAAA,IACvC,QAAQ;AAAA,IAAC;AACT,WAAO,GAAG,QAAQ,WAAS;AACzB;AAAA,QACE,OAAO,UAAU,WACb,QACA,OAAO,SAAS,KAAK,IACnB,MAAM,SAAS,MAAM,IACrB,OAAO,KAAK;AAAA,MACpB;AAAA,IACF,CAAC;AACD,WAAO,GAAG,SAAS,SAAO;AACxB,eAAS,sBAAsB,GAAG,EAAE;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEQ,+BACN,QACA,SAKA;AACA,QAAI,OAAO;AACX,UAAM,cAAc,SAAS,gBAAgB;AAC7C,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,SAAS,MAAM;AAAA,QACf,MAAM,QAAQ,QAAQ;AAAA,QACtB,QAAQ,YAAY;AAAA,QAAC;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,YAAY;AAEhB,QAAI,cAAmC;AACvC,UAAM,OAAO,IAAI,QAAc,CAAAV,aAAW;AACxC,oBAAcA;AAAA,IAChB,CAAC;AAED,UAAM,SAAS,MAAM;AACnB,UAAI,CAAC,YAAa;AAClB,kBAAY;AACZ,oBAAc;AAAA,IAChB;AAEA,UAAM,SAAS,CAAC,UAAmB;AACjC,UAAI,UAAW;AACf,YAAM,IACJ,OAAO,UAAU,WACb,QACA,OAAO,SAAS,KAAK,IACnB,MAAM,SAAS,MAAM,IACrB,OAAO,KAAK;AACpB,UAAI,YAAa,SAAQ;AACzB,eAAS,UAAU,CAAC;AAAA,IACtB;AAEA,UAAM,QAAQ,MAAM;AAClB,cAAQ;AACR,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM;AACpB,aAAO,IAAI,QAAQ,MAAM;AACzB,aAAO,IAAI,OAAO,KAAK;AACvB,aAAO,IAAI,SAAS,OAAO;AAC3B,aAAO,IAAI,SAAS,OAAO;AAAA,IAC7B;AAEA,UAAM,UAAU,CAAC,QAAiB;AAChC,UAAI,CAAC,WAAW;AACd,iBAAS,sBAAsB,GAAG,EAAE;AAAA,MACtC;AACA,cAAQ;AACR,aAAO;AAAA,IACT;AAEA,QAAI;AACF;AAAC,MAAC,OAAe,cAAc,MAAM;AAAA,IACvC,QAAQ;AAAA,IAAC;AAET,WAAO,GAAG,QAAQ,MAAM;AACxB,WAAO,KAAK,OAAO,KAAK;AACxB,WAAO,KAAK,SAAS,OAAO;AAC5B,WAAO,KAAK,SAAS,OAAO;AAE5B,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf;AAAA,MACA,QAAQ,YAAY;AAClB,YAAI,UAAW;AACf,oBAAY;AACZ,gBAAQ;AACR,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,uBAA+B;AAC5C,WAAO,IAAIW,YAAW,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,EACvD;AAAA,EAEA,eACE,SACA,aACA,SACA,SACwB;AACxB,UAAM,kBAAkB;AACxB,UAAM,iBAAiB,WAAW;AAClC,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,UAAU,SAAS;AACzB,UAAM,uBAAuB,SAAS,YAAY;AAClD,UAAM,eACJ,wBAAwB,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAEhE,QAAI,aAAa,SAAS;AACxB,aAAO;AAAA,QACL,IAAI,SAAuC;AACzC,iBAAO;AAAA,QACT;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,MAAM,MAAM;AAAA,QAAC;AAAA,QACb,QAAQ,QAAQ,QAAQ;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,aAAa,uBACf,KAAK,gBAAgB,SAAS,OAAQ,IACtC;AACJ,QAAI,wBAAwB,SAAS,WAAW,CAAC,YAAY;AAC3D,aAAO;AAAA,QACL,IAAI,SAAuC;AACzC,iBAAO;AAAA,QACT;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,MAAM,MAAM;AAAA,QAAC;AAAA,QACb,QAAQ,QAAQ,QAAQ;AAAA,UACtB,QAAQ;AAAA,UACR,QACE;AAAA,UACF,MAAM;AAAA,UACN,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,WAAW,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO;AAEvE,UAAM,0BAA0B,IAAI,gBAAgB;AACpD,SAAK,kBAAkB;AAEvB,QAAI,SAAuC;AAC3C,QAAI,oBAA8C;AAClD,QAAI,mBAAkC;AACtC,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,aAAa;AACjB,QAAI,kBAAkB;AACtB,QAAI,gBAAsD;AAC1D,QAAI,WAAW;AACf,QAAI,cAEO;AAEX,UAAM,qBAAqB,CAAC,UAC1B,MAAM,MAAM,IAAI,EAAE,OAAO,UAAQ,KAAK,SAAS,CAAC,EAAE;AAEpD,UAAM,iBAAiB,gBAAgB,EAAE,KAAK,UAAU,KAAK,aAAa,CAAC;AAC3E,SAAK,iBAAiB;AAEtB,UAAM,UAAU,MAAM;AACpB,UAAI,WAAW,eAAgB;AAC/B,mBAAa;AACb,UAAI;AACF,gCAAwB,MAAM;AAAA,MAChC,QAAQ;AAAA,MAAC;AACT,UAAI;AACF,uBAAe,KAAK;AAAA,MACtB,QAAQ;AAAA,MAAC;AACT,UAAI,kBAAmB,mBAAkB,cAAc;AAAA,IACzD;AAEA,UAAM,wBAAwB,MAAM;AAClC,UAAI,eAAe;AACjB,qBAAa,aAAa;AAC1B,wBAAgB;AAAA,MAClB;AACA,UAAI,aAAa;AACf,oBAAY,oBAAoB,SAAS,OAAO;AAAA,MAClD;AAAA,IACF;AAEA,QAAI,aAAa;AACf,kBAAY,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7D,UAAI,YAAY,QAAS,SAAQ;AAAA,IACnC;AAEA,UAAM,kBAAkB,KAAK;AAAA,MAC3B,eAAe;AAAA,MACf;AAAA,QACE,aAAa;AAAA,QACb,SAAS,WAAS;AAChB,oBAAU;AACV,mBAAS,gBAAgB,KAAK;AAC9B,cAAI,mBAAmB;AACrB,8BAAkB,SAAS;AAC3B,6BAAiB,kBAAkB,IAAI,KAAK;AAC5C,8BAAkB,mBAAmB,mBAAmB,KAAK;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,kBAAkB,KAAK;AAAA,MAC3B,eAAe;AAAA,MACf;AAAA,QACE,aAAa;AAAA,QACb,SAAS,WAAS;AAChB,oBAAU;AACV,mBAAS,gBAAgB,KAAK;AAC9B,cAAI,mBAAmB;AACrB,8BAAkB,SAAS;AAC3B,6BAAiB,kBAAkB,IAAI,KAAK;AAC5C,8BAAkB,mBAAmB,mBAAmB,KAAK;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,oBAAgB,WAAW,MAAM;AAC/B,UAAI,WAAW,UAAW;AAC1B,UAAI,aAAa;AACf,oBAAY,UAAU;AACtB;AAAA,MACF;AACA,iBAAW;AACX,UAAI;AACF,uBAAe,KAAK;AAAA,MACtB,QAAQ;AAAA,MAAC;AACT,UAAI;AACF,gCAAwB,MAAM;AAAA,MAChC,QAAQ;AAAA,MAAC;AAAA,IACX,GAAG,cAAc;AAEjB,UAAM,aAAa,CAAC,WAA+C;AACjE,UAAI,iBAAkB,QAAO,EAAE,QAAQ,iBAAiB;AACxD,UAAI,WAAW,UAAW,QAAO;AAEjC,yBAAmB,UAAU,UAAS,qBAAqB;AAC3D,YAAM,aAAa,oBAAoB,gBAAgB;AACvD,UAAI,OAAQ,kBAAiB,kBAAkB,MAAM;AACrD,UAAI,OAAQ,kBAAiB,kBAAkB,MAAM;AAErD,eAAS;AACT,wBAAkB;AAClB,4BAAsB;AAEtB,0BAAoB;AAAA,QAClB,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,cAAc;AAAA,QACd,iBAAiB,mBAAmB,MAAM;AAAA,QAC1C,iBAAiB,mBAAmB,MAAM;AAAA,QAC1C,yBAAyB;AAAA,QACzB,yBAAyB;AAAA,QACzB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,kCAAkC;AAAA,QAClC,UAAU;AAAA,QACV;AAAA,QACA,WAAW,OAAO;AAAA,QAClB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,KAAK;AAAA,QACL;AAAA,MACF;AAEA,WAAK,oBAAoB,IAAI,kBAAkB,iBAAiB;AAEhE,WAAK,iBAAiB;AACtB,WAAK,kBAAkB;AAEvB,aAAO,EAAE,QAAQ,iBAAiB;AAAA,IACpC;AAEA,UAAM,OAAO,MAAM;AACjB,eAAS;AACT,UAAI;AACF,uBAAe,KAAK;AAAA,MACtB,QAAQ;AAAA,MAAC;AACT,UAAI;AACF,gCAAwB,MAAM;AAAA,MAChC,QAAQ;AAAA,MAAC;AAET,UAAI,mBAAmB;AACrB,0BAAkB,cAAc;AAChC,0BAAkB,SAAS;AAAA,MAC7B;AAAA,IACF;AAEA,UAAM,UAAU,YAAiC;AAC/C,UAAI;AACF,cAAM,eAAe;AAErB,YAAI,WAAW,aAAa,WAAW;AACrC,mBAAS;AAEX,YAAI,mBAAmB;AACrB,4BAAkB,OAAO,eAAe,YAAY;AACpD,4BAAkB,cAChB,kBAAkB,eAClB,cACA,wBAAwB,OAAO;AAAA,QACnC;AAEA,YAAI,CAAC,iBAAiB;AACpB,gBAAM,QAAQ,KAAK;AAAA,YACjB,QAAQ,WAAW,CAAC,gBAAgB,MAAM,gBAAgB,IAAI,CAAC;AAAA,YAC/D,IAAI,QAAQ,CAAAX,aAAW,WAAWA,UAAS,GAAG,CAAC;AAAA,UACjD,CAAC;AACD,gBAAM,QAAQ,WAAW;AAAA,YACvB,gBAAgB,OAAO;AAAA,YACvB,gBAAgB,OAAO;AAAA,UACzB,CAAC;AAAA,QACH;AAEA,cAAM,cACJ,cACA,aAAa,YAAY,QACzB,wBAAwB,OAAO,YAAY,QAC3C;AAEF,YAAI,OAAO,eAAe;AAC1B,YAAI,CAAC,OAAO,SAAS,IAAW,GAAG;AACjC,iBAAO,cAAc,MAAM;AAAA,QAC7B;AAEA,cAAM,oBAAoB,WACtB,CAAC,qBAAqB,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,IACvD;AACJ,cAAM,kBAAkB,aACpB,gCAAgC,mBAAmB,OAAO,IAC1D;AAEJ,eAAO;AAAA,UACL;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF,UAAE;AACA,8BAAsB;AAEtB,YAAI,KAAK,mBAAmB,gBAAgB;AAC1C,eAAK,iBAAiB;AACtB,eAAK,kBAAkB;AAAA,QACzB;AAAA,MACF;AAAA,IACF,GAAG;AAEH,UAAM,aAAqC;AAAA,MACzC,IAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,YAAY,QAAM;AAC3B,oBAAc;AAAA,IAChB;AAEA,WACG,KAAK,OAAK;AACT,UAAI,CAAC,qBAAqB,CAAC,iBAAkB;AAC7C,wBAAkB,OAAO,EAAE;AAC3B,wBAAkB,cAAc,EAAE;AAAA,IACpC,CAAC,EACA,MAAM,MAAM;AACX,UAAI,CAAC,kBAAmB;AACxB,wBAAkB,OAAO,kBAAkB,QAAQ;AAAA,IACrD,CAAC;AAEH,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KACJ,SACA,aACA,SACA,SACqB;AACrB,UAAM,kBAAkB;AACxB,UAAM,iBAAiB,WAAW;AAElC,SAAK,kBAAkB,IAAI,gBAAgB;AAC3C,QAAI,aAAa;AACjB,UAAM,UAAU,MAAM;AACpB,mBAAa;AACb,UAAI;AACF,aAAK,iBAAiB,MAAM;AAAA,MAC9B,QAAQ;AAAA,MAAC;AACT,UAAI;AACF,aAAK,gBAAgB,KAAK;AAAA,MAC5B,QAAQ;AAAA,MAAC;AAAA,IACX;AAEA,QAAI,aAAa;AACf,kBAAY,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IAC/D;AAEA,UAAM,UAAU,SAAS;AACzB,UAAM,uBAAuB,SAAS,YAAY;AAClD,UAAM,eACJ,wBAAwB,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAEhE,UAAM,UAAU,OACd,KACA,gBACwB;AACxB,WAAK,iBAAiB,gBAAgB;AAAA,QACpC;AAAA,QACA,KAAK,eAAe;AAAA,MACtB,CAAC;AAED,YAAM,kBAAkB,KAAK;AAAA,QAC3B,KAAK,eAAe;AAAA,QACpB,EAAE,SAAS,SAAS,cAAc;AAAA,MACpC;AACA,YAAM,kBAAkB,KAAK;AAAA,QAC3B,KAAK,eAAe;AAAA,QACpB,EAAE,SAAS,SAAS,cAAc;AAAA,MACpC;AAEA,UAAI,gBAAsD;AAC1D,YAAM,iBAAiB,IAAI,QAAmB,CAAAA,aAAW;AACvD,wBAAgB,WAAW,MAAMA,SAAQ,SAAS,GAAG,cAAc;AAAA,MACrE,CAAC;AAED,YAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,QAChC,KAAK,eAAe,OAAO,KAAK,MAAM,WAAoB;AAAA,QAC1D;AAAA,MACF,CAAC;AACD,UAAI,cAAe,cAAa,aAAa;AAE7C,UAAI,WAAW,WAAW;AACxB,YAAI;AACF,eAAK,eAAe,KAAK;AAAA,QAC3B,QAAQ;AAAA,QAAC;AACT,YAAI;AACF,eAAK,gBAAgB,MAAM;AAAA,QAC7B,QAAQ;AAAA,QAAC;AAET,YAAI;AACF,gBAAM,KAAK,eAAe;AAAA,QAC5B,QAAQ;AAAA,QAAC;AAET,cAAM,QAAQ,KAAK;AAAA,UACjB,QAAQ,WAAW,CAAC,gBAAgB,MAAM,gBAAgB,IAAI,CAAC;AAAA,UAC/D,IAAI,QAAQ,CAAAA,aAAW,WAAWA,UAAS,GAAG,CAAC;AAAA,QACjD,CAAC;AACD,cAAM,QAAQ,WAAW;AAAA,UACvB,gBAAgB,OAAO;AAAA,UACvB,gBAAgB,OAAO;AAAA,QACzB,CAAC;AACD,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAEA,YAAM,QAAQ,KAAK;AAAA,QACjB,QAAQ,WAAW,CAAC,gBAAgB,MAAM,gBAAgB,IAAI,CAAC;AAAA,QAC/D,IAAI,QAAQ,CAAAA,aAAW,WAAWA,UAAS,GAAG,CAAC;AAAA,MACjD,CAAC;AACD,YAAM,QAAQ,WAAW;AAAA,QACvB,gBAAgB,OAAO;AAAA,QACvB,gBAAgB,OAAO;AAAA,MACzB,CAAC;AAED,YAAM,SAAS,gBAAgB,QAAQ;AACvC,YAAM,SAAS,gBAAgB,QAAQ;AACvC,YAAM,cACJ,cACA,aAAa,YAAY,QACzB,KAAK,iBAAiB,OAAO,YAAY;AAC3C,YAAM,WAAW,KAAK,eAAe,aAAa,cAAc,MAAM;AAEtE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,UAAI,sBAAsB;AACxB,cAAM,aAAa,KAAK,gBAAgB,SAAS,OAAQ;AACzD,YAAI,CAAC,YAAY;AACf,cAAI,SAAS,SAAS;AACpB,mBAAO;AAAA,cACL,QAAQ;AAAA,cACR,QACE;AAAA,cACF,MAAM;AAAA,cACN,aAAa;AAAA,YACf;AAAA,UACF;AACA,gBAAM,WAAW,MAAM,QAAQ,KAAK,YAAY,OAAO,CAAC;AACxD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QACE;AAAA,EAAkD,SAAS,MAAM,GAAG,KAAK;AAAA,UAC7E;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,QAAQ,WAAW,GAAG;AAC9C,kBAAU,SAAS;AAAA,UACjB,UAAU;AAAA,UACV;AAAA,QACF;AACA,YACE,CAAC,UAAU,eACX,UAAU,SAAS,KACnB,KAAK,qBAAqB,UAAU,MAAM,KAC1C,CAAC,SAAS,SACV;AACA,gBAAM,WAAW,MAAM,QAAQ,KAAK,YAAY,OAAO,CAAC;AACxD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QACE;AAAA,EAAsD,SAAS,MAAM,GAAG,KAAK;AAAA,UACjF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,aAAO,MAAM,QAAQ,KAAK,YAAY,OAAO,CAAC;AAAA,IAChD,SAAS,OAAO;AACd,UAAI,KAAK,gBAAgB,OAAO,SAAS;AACvC,aAAK,gBAAgB,KAAK;AAC1B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAEA,YAAM,WAAW,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACtE,eAAS,0BAA0B,QAAQ,EAAE;AAE7C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF,UAAE;AACA,UAAI,aAAa;AACf,oBAAY,oBAAoB,SAAS,OAAO;AAAA,MAClD;AACA,WAAK,iBAAiB;AACtB,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,iBACE,SACA,SACA,SACoB;AACpB,UAAM,kBAAkB;AACxB,UAAM,iBAAiB,WAAW;AAClC,UAAM,kBAAkB,IAAI,gBAAgB;AAE5C,UAAM,UAAU,SAAS;AACzB,UAAM,aACJ,SAAS,YAAY,OAAO,KAAK,gBAAgB,SAAS,OAAO,IAAI;AACvE,UAAM,eACJ,SAAS,YAAY,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAErE,QAAI,SAAS,YAAY,QAAQ,SAAS,WAAW,CAAC,YAAY;AAChE,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,aAAa,WAAW,MAAM,KAAK,YAAY,OAAO;AAEvE,UAAM,SAAS,UAAS,qBAAqB;AAC7C,UAAM,aAAa,oBAAoB,MAAM;AAE7C,UAAMY,WAAU,gBAAgB,EAAE,KAAK,UAAU,KAAK,aAAa,CAAC;AACpE,UAAM,gBAAgB,WAAW,MAAM;AACrC,sBAAgB,MAAM;AACtB,wBAAkB,WAAW;AAC7B,MAAAA,SAAQ,KAAK;AAAA,IACf,GAAG,cAAc;AAEjB,UAAM,oBAAuC;AAAA,MAC3C,IAAI;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,yBAAyB;AAAA,MACzB,yBAAyB;AAAA,MACzB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,kCAAkC;AAAA,MAClC,UAAU;AAAA,MACV,WAAW,KAAK,IAAI;AAAA,MACpB,WAAW,KAAK,IAAI,IAAI;AAAA,MACxB,SAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,IACF;AAEA,UAAM,qBAAqB,CAAC,UAC1B,MAAM,MAAM,IAAI,EAAE,OAAO,UAAQ,KAAK,SAAS,CAAC,EAAE;AAEpD,SAAK,kBAAkBA,SAAQ,QAAQ,WAAS;AAC9C,wBAAkB,UAAU;AAC5B,uBAAiB,QAAQ,KAAK;AAC9B,wBAAkB,mBAAmB,mBAAmB,KAAK;AAAA,IAC/D,CAAC;AACD,SAAK,kBAAkBA,SAAQ,QAAQ,WAAS;AAC9C,wBAAkB,UAAU;AAC5B,uBAAiB,QAAQ,KAAK;AAC9B,wBAAkB,mBAAmB,mBAAmB,KAAK;AAAA,IAC/D,CAAC;AAED,IAAAA,SAAQ,OAAO,KAAK,MAAM;AACxB,wBAAkB,OAAOA,SAAQ,YAAY;AAC7C,wBAAkB,cAChB,kBAAkB,eAAe,gBAAgB,OAAO;AAC1D,UAAI,SAAS,YAAY,MAAM;AAC7B,0BAAkB,SAAS;AAAA,UACzB,kBAAkB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AACA,UAAI,kBAAkB,eAAe;AACnC,qBAAa,kBAAkB,aAAa;AAC5C,0BAAkB,gBAAgB;AAAA,MACpC;AAAA,IACF,CAAC;AAED,SAAK,oBAAoB,IAAI,QAAQ,iBAAiB;AACtD,WAAO,EAAE,OAAO;AAAA,EAClB;AAAA,EAEA,oBAAoB,SAaX;AACP,UAAM,OAAO,KAAK,oBAAoB,IAAI,OAAO;AACjD,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,UAAU,KAAK,SAAS,QAAQ,CAAC,KAAK;AAC5C,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,MACb,UAAU,KAAK;AAAA,MACf;AAAA,MACA,SAAS,KAAK;AAAA,MACd,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,qBACE,QACA,SAcO;AACP,UAAM,OAAO,KAAK,oBAAoB,IAAI,MAAM;AAChD,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,cAAc,KAAK,OAAO,MAAM,KAAK,YAAY;AACvD,UAAM,cAAc,KAAK,OAAO,MAAM,KAAK,YAAY;AAEvD,SAAK,eAAe,KAAK,OAAO;AAChC,SAAK,eAAe,KAAK,OAAO;AAEhC,UAAM,cAAc,gBAAgB,KAAK,IAAI,YAAY,MAAM,IAAI,EAAE;AACrE,UAAM,cAAc,gBAAgB,KAAK,IAAI,YAAY,MAAM,IAAI,EAAE;AAErE,QAAI,iBAAiB;AACrB,QAAI,iBAAiB;AAErB,UAAM,SAAS,SAAS,QAAQ,KAAK;AACrC,QAAI,QAAQ;AACV,YAAM,QAAQ,IAAI,OAAO,QAAQ,GAAG;AACpC,uBAAiB,YACd,MAAM,IAAI,EACV,OAAO,UAAQ,MAAM,KAAK,IAAI,CAAC,EAC/B,KAAK,IAAI;AACZ,uBAAiB,YACd,MAAM,IAAI,EACV,OAAO,UAAQ,MAAM,KAAK,IAAI,CAAC,EAC/B,KAAK,IAAI;AAAA,IACd;AAEA,UAAM,SAAwD,KAAK,SAC/D,WACA,KAAK,SAAS,OACZ,YACA,KAAK,SAAS,IACZ,cACA;AAER,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,KAAK;AAAA,MACd,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB;AAAA,MACA,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,GAAI,SAAS,EAAE,eAAe,OAAO,IAAI,CAAC;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,oBAAoB,SAA0B;AAC5C,UAAM,OAAO,KAAK,oBAAoB,IAAI,OAAO;AACjD,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI;AACF,WAAK,cAAc;AACnB,WAAK,SAAS;AACd,WAAK,gBAAgB,MAAM;AAC3B,WAAK,QAAQ,KAAK;AAClB,UAAI,KAAK,eAAe;AACtB,qBAAa,KAAK,aAAa;AAC/B,aAAK,gBAAgB;AAAA,MACvB;AACA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,uBAA4C;AAC1C,WAAO,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC;AAAA,EACrD;AAAA,EAEA,MAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,OAAOX,MAAa;AACxB,UAAM,WAAWE,YAAWF,IAAG,IAAIA,OAAMD,SAAQ,KAAK,KAAKC,IAAG;AAC9D,QAAI,CAACK,YAAW,QAAQ,GAAG;AACzB,YAAM,IAAI,MAAM,SAAS,QAAQ,kBAAkB;AAAA,IACrD;AACA,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,eAAe;AACb,SAAK,iBAAiB,MAAM;AAC5B,SAAK,gBAAgB,KAAK;AAC1B,eAAW,MAAM,MAAM,KAAK,KAAK,oBAAoB,KAAK,CAAC,GAAG;AAC5D,WAAK,oBAAoB,EAAE;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,SAAK,UAAU;AACf,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,yBAA6C;AAC3C,UAAM,YAAY,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC;AAE9D,UAAM,YAAY,CAChB,SAEA,KAAK,SACD,WACA,KAAK,SAAS,OACZ,YACA,KAAK,SAAS,IACZ,cACA;AAEV,UAAM,gBAAoC,CAAC;AAE3C,eAAW,QAAQ,WAAW;AAC5B,UAAI,KAAK,SAAU;AACnB,YAAM,SAAS,UAAU,IAAI;AAC7B,UAAI,WAAW,UAAW;AAE1B,oBAAc,KAAK;AAAA,QACjB,MAAM;AAAA,QACN,QAAQ,KAAK;AAAA,QACb,aAAa,KAAK;AAAA,QAClB,YAAY,KAAK,cAAc,sBAAsB,KAAK,EAAE;AAAA,QAC5D;AAAA,QACA,GAAI,KAAK,SAAS,OAAO,EAAE,UAAU,KAAK,KAAK,IAAI,CAAC;AAAA,MACtD,CAAC;AAED,WAAK,WAAW;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,wCAA2E;AACzE,UAAM,YAAY,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC;AAE9D,UAAM,YAAY,CAChB,SAEA,KAAK,SACD,WACA,KAAK,SAAS,OACZ,YACA,KAAK,SAAS,IACZ,cACA;AAEV,UAAM,sBAAyD,CAAC;AAEhE,eAAW,QAAQ,WAAW;AAC5B,UAAI,UAAU,IAAI,MAAM,UAAW;AAEnC,YAAM,cAAc,KAAK,kBAAkB,KAAK;AAChD,YAAM,cAAc,KAAK,kBAAkB,KAAK;AAChD,UAAI,gBAAgB,KAAK,gBAAgB,EAAG;AAE5C,WAAK,0BAA0B,KAAK;AACpC,WAAK,0BAA0B,KAAK;AAEpC,0BAAoB,KAAK;AAAA,QACvB,MAAM;AAAA,QACN,QAAQ,KAAK;AAAA,QACb,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,YAAY,KAAK,cAAc,sBAAsB,KAAK,EAAE;AAAA,MAC9D,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;;;ADhvDA,IAAM,QAEF;AAAA,EACF,aAAa,IAAI;AACnB;AAEA,eAAsB,OAAOO,MAA4B;AACvD,QAAM,SAAS,YAAY,EAAE,OAAOA,IAAG;AACzC;AAEO,SAAS,eAAeA,MAAmB;AAChD,QAAM,cAAcA;AACtB;AAEO,SAAS,iBAAyB;AACvC,SAAO,MAAM;AACf;AAEO,SAAS,SAAiB;AAC/B,SAAO,SAAS,YAAY,EAAE,IAAI;AACpC;",
|
|
6
|
-
"names": ["existsSync", "mkdirSync", "realpathSync", "statSync", "randomUUID", "homedir", "dirname", "isAbsolute", "resolve", "existsSync", "mkdirSync", "readFileSync", "join", "join", "resolve", "join", "join", "existsSync", "mkdirSync", "cwd", "join", "existsSync", "readFileSync", "join", "join", "existsSync", "mkdirSync", "existsSync", "mkdirSync", "readFileSync", "statSync", "writeFileSync", "dirname", "join", "getProjectDir", "cwd", "join", "existsSync", "mkdirSync", "dirname", "writeFileSync", "existsSync", "readFileSync", "resolve", "cwd", "homedir", "isAbsolute", "dirname", "realpathSync", "existsSync", "statSync", "env", "paths", "mkdirSync", "randomUUID", "process", "cwd"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/utils/protocol/kodeAgentSessionLoad.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync, readdirSync, readFileSync, statSync } from 'fs'\nimport { basename, join } from 'path'\nimport type { Message } from '@query'\nimport type {\n Message as APIMessage,\n MessageParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { getSessionProjectDir } from './kodeAgentSessionLog'\nimport { isUuid } from '@utils/text/uuid'\n\ntype JsonlUserEntry = {\n type: 'user'\n sessionId?: string\n uuid?: string\n message?: MessageParam\n isApiErrorMessage?: boolean\n toolUseResult?: unknown\n}\n\ntype JsonlAssistantEntry = {\n type: 'assistant'\n sessionId?: string\n uuid?: string\n message?: APIMessage\n isApiErrorMessage?: boolean\n requestId?: string\n}\n\ntype JsonlSummaryEntry = {\n type: 'summary'\n summary?: string\n leafUuid?: string\n}\n\ntype JsonlCustomTitleEntry = {\n type: 'custom-title'\n sessionId?: string\n customTitle?: string\n}\n\ntype JsonlTagEntry = {\n type: 'tag'\n sessionId?: string\n tag?: string\n}\n\ntype JsonlFileHistorySnapshotEntry = {\n type: 'file-history-snapshot'\n messageId?: string\n snapshot?: unknown\n isSnapshotUpdate?: boolean\n}\n\ntype JsonlEntry =\n | JsonlUserEntry\n | JsonlAssistantEntry\n | JsonlSummaryEntry\n | JsonlCustomTitleEntry\n | JsonlTagEntry\n | JsonlFileHistorySnapshotEntry\n | Record<string, unknown>\n\nfunction safeParseJson(line: string): unknown | null {\n try {\n return JSON.parse(line)\n } catch {\n return null\n }\n}\n\nfunction isUserEntry(entry: JsonlEntry): entry is JsonlUserEntry {\n return (\n typeof (entry as any)?.type === 'string' && (entry as any).type === 'user'\n )\n}\n\nfunction isAssistantEntry(entry: JsonlEntry): entry is JsonlAssistantEntry {\n return (\n typeof (entry as any)?.type === 'string' &&\n (entry as any).type === 'assistant'\n )\n}\n\nfunction isSummaryEntry(entry: JsonlEntry): entry is JsonlSummaryEntry {\n return (\n typeof (entry as any)?.type === 'string' &&\n (entry as any).type === 'summary'\n )\n}\n\nfunction isCustomTitleEntry(entry: JsonlEntry): entry is JsonlCustomTitleEntry {\n return (\n typeof (entry as any)?.type === 'string' &&\n (entry as any).type === 'custom-title'\n )\n}\n\nfunction isTagEntry(entry: JsonlEntry): entry is JsonlTagEntry {\n return (\n typeof (entry as any)?.type === 'string' && (entry as any).type === 'tag'\n )\n}\n\nfunction isFileHistorySnapshotEntry(\n entry: JsonlEntry,\n): entry is JsonlFileHistorySnapshotEntry {\n return (\n typeof (entry as any)?.type === 'string' &&\n (entry as any).type === 'file-history-snapshot'\n )\n}\n\nfunction normalizeLoadedUser(entry: JsonlUserEntry): Message | null {\n if (!entry.uuid || !entry.message) return null\n return {\n type: 'user',\n uuid: entry.uuid as any,\n message: entry.message as any,\n }\n}\n\nfunction normalizeLoadedAssistant(entry: JsonlAssistantEntry): Message | null {\n if (!entry.uuid || !entry.message) return null\n return {\n type: 'assistant',\n uuid: entry.uuid as any,\n costUSD: 0,\n durationMs: 0,\n message: entry.message as any,\n ...(entry.isApiErrorMessage ? { isApiErrorMessage: true } : {}),\n ...(typeof entry.requestId === 'string'\n ? { requestId: entry.requestId }\n : {}),\n } as any\n}\n\nexport type KodeAgentSessionLogData = {\n messages: Message[]\n summaries: Map<string, string>\n customTitles: Map<string, string>\n tags: Map<string, string>\n fileHistorySnapshots: Map<string, JsonlFileHistorySnapshotEntry>\n}\n\nexport function loadKodeAgentSessionLogData(args: {\n cwd: string\n sessionId: string\n}): KodeAgentSessionLogData {\n const { cwd, sessionId } = args\n const projectDir = getSessionProjectDir(cwd)\n const filePath = join(projectDir, `${sessionId}.jsonl`)\n if (!existsSync(filePath)) {\n throw new Error(`No conversation found with session ID: ${sessionId}`)\n }\n\n const lines = readFileSync(filePath, 'utf8').split('\\n')\n const messages: Message[] = []\n const summaries = new Map<string, string>()\n const customTitles = new Map<string, string>()\n const tags = new Map<string, string>()\n const fileHistorySnapshots = new Map<string, JsonlFileHistorySnapshotEntry>()\n\n for (const line of lines) {\n const raw = safeParseJson(line.trim())\n if (!raw || typeof raw !== 'object') continue\n const entry = raw as JsonlEntry\n\n if (isUserEntry(entry)) {\n if (entry.sessionId && entry.sessionId !== sessionId) continue\n const msg = normalizeLoadedUser(entry)\n if (msg) messages.push(msg)\n continue\n }\n\n if (isAssistantEntry(entry)) {\n if (entry.sessionId && entry.sessionId !== sessionId) continue\n const msg = normalizeLoadedAssistant(entry)\n if (msg) messages.push(msg)\n continue\n }\n\n if (isSummaryEntry(entry)) {\n const leafUuid = typeof entry.leafUuid === 'string' ? entry.leafUuid : ''\n const summary = typeof entry.summary === 'string' ? entry.summary : ''\n if (leafUuid && summary) summaries.set(leafUuid, summary)\n continue\n }\n\n if (isCustomTitleEntry(entry)) {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const title =\n typeof entry.customTitle === 'string' ? entry.customTitle : ''\n if (id && title) customTitles.set(id, title)\n continue\n }\n\n if (isTagEntry(entry)) {\n const id = typeof entry.sessionId === 'string' ? entry.sessionId : ''\n const tag = typeof entry.tag === 'string' ? entry.tag : ''\n if (id && tag) tags.set(id, tag)\n continue\n }\n\n if (isFileHistorySnapshotEntry(entry)) {\n const messageId =\n typeof entry.messageId === 'string' ? entry.messageId : ''\n if (messageId) fileHistorySnapshots.set(messageId, entry)\n continue\n }\n }\n\n return { messages, summaries, customTitles, tags, fileHistorySnapshots }\n}\n\nexport function loadKodeAgentSessionMessages(args: {\n cwd: string\n sessionId: string\n}): Message[] {\n return loadKodeAgentSessionLogData(args).messages\n}\n\nexport function findMostRecentKodeAgentSessionId(cwd: string): string | null {\n const projectDir = getSessionProjectDir(cwd)\n if (!existsSync(projectDir)) return null\n\n const candidates = readdirSync(projectDir)\n .filter(name => name.endsWith('.jsonl'))\n .filter(name => !name.startsWith('agent-'))\n .map(name => ({\n sessionId: basename(name, '.jsonl'),\n path: join(projectDir, name),\n }))\n .filter(c => isUuid(c.sessionId))\n\n if (candidates.length === 0) return null\n\n candidates.sort((a, b) => {\n try {\n return statSync(b.path).mtimeMs - statSync(a.path).mtimeMs\n } catch {\n return 0\n }\n })\n\n return candidates[0]?.sessionId ?? null\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|