From 91ee4d7ffa41493e6ad349629600a109014c1b52 Mon Sep 17 00:00:00 2001 From: ezynda3 Date: Thu, 19 Mar 2026 13:42:34 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20mark3lab?= =?UTF-8?q?s/kit@efaff7f44ffb7bca1c5e501c6aec12f60cea3778=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _pagefind/fragment/en_11642b7.pf_fragment | Bin 0 -> 1157 bytes _pagefind/fragment/en_16181a0.pf_fragment | Bin 0 -> 974 bytes _pagefind/fragment/en_1c9bfe8.pf_fragment | Bin 0 -> 1114 bytes _pagefind/fragment/en_236cc3c.pf_fragment | Bin 0 -> 551 bytes _pagefind/fragment/en_2c38f2a.pf_fragment | Bin 0 -> 862 bytes _pagefind/fragment/en_2d586b8.pf_fragment | Bin 0 -> 1208 bytes _pagefind/fragment/en_3d997be.pf_fragment | Bin 0 -> 1081 bytes _pagefind/fragment/en_44458e8.pf_fragment | Bin 0 -> 1412 bytes _pagefind/fragment/en_5bb96db.pf_fragment | Bin 0 -> 1081 bytes _pagefind/fragment/en_5eb7564.pf_fragment | Bin 0 -> 972 bytes _pagefind/fragment/en_6b1fb6d.pf_fragment | Bin 0 -> 847 bytes _pagefind/fragment/en_80d31f1.pf_fragment | Bin 0 -> 805 bytes _pagefind/fragment/en_95479f6.pf_fragment | Bin 0 -> 954 bytes _pagefind/fragment/en_bf49bfb.pf_fragment | Bin 0 -> 1118 bytes _pagefind/fragment/en_c9220e3.pf_fragment | Bin 0 -> 827 bytes _pagefind/fragment/en_c927f3f.pf_fragment | Bin 0 -> 1408 bytes _pagefind/fragment/en_d67b2ae.pf_fragment | Bin 0 -> 2172 bytes _pagefind/fragment/en_e58e25a.pf_fragment | Bin 0 -> 1054 bytes _pagefind/fragment/en_ea3bc5f.pf_fragment | Bin 0 -> 641 bytes _pagefind/index/en_fa2211e.pf_index | Bin 0 -> 23126 bytes _pagefind/pagefind-entry.json | 1 + _pagefind/pagefind-highlight.js | 1064 ++++++++++++ _pagefind/pagefind-modular-ui.css | 214 +++ _pagefind/pagefind-modular-ui.js | 8 + _pagefind/pagefind-ui.css | 1 + _pagefind/pagefind-ui.js | 2 + _pagefind/pagefind.en_3a80c79c47.pf_meta | Bin 0 -> 238 bytes _pagefind/pagefind.js | 6 + _pagefind/wasm.en.pagefind | Bin 0 -> 55619 bytes _pagefind/wasm.unknown.pagefind | Bin 0 -> 52427 bytes advanced/json-output/index.html | 107 ++ advanced/subagents/index.html | 85 + advanced/testing/index.html | 86 + assets/callbacks-DY5vOJ-1.js | 220 +++ assets/capabilities-hnq2TbFu.js | 485 ++++++ assets/commands-B2onU7kX.js | 95 ++ assets/configuration-BU6tST5r.js | 195 +++ assets/development-BTUHn6x2.js | 138 ++ assets/examples-C-0Ua9md.js | 273 ++++ assets/flags-CkTF-Pw-.js | 237 +++ assets/index-BdEV_URu.js | 1730 ++++++++++++++++++++ assets/index-CGDazwHL.js | 75 + assets/index-Di_r5hA0.css | 1 + assets/installation-DaBrcZPn.js | 78 + assets/json-output-B1QZabVS.js | 240 +++ assets/loading-CfdMbwrl.js | 213 +++ assets/options-DhBmR6ye.js | 147 ++ assets/overview-DNz93_Eg.js | 56 + assets/overview-DbvqPNef.js | 215 +++ assets/providers-B05lw6S_.js | 224 +++ assets/quick-start-B51YvXk3.js | 117 ++ assets/sessions-BM7WkgkF.js | 77 + assets/sessions-X-l1qojs.js | 142 ++ assets/subagents-ChkZbdDR.js | 136 ++ assets/testing-COLNxuKj.js | 130 ++ assets/theme-BIHI7g3E.js | 1 + cli/commands/index.html | 77 + cli/flags/index.html | 78 + configuration/index.html | 108 ++ development/index.html | 96 ++ extensions/capabilities/index.html | 269 +++ extensions/examples/index.html | 86 + extensions/loading/index.html | 131 ++ extensions/overview/index.html | 86 + index.html | 24 + installation/index.html | 69 + llms-full.txt | 1810 +++++++++++++++++++++ llms.txt | 24 + logo.jpg | Bin 0 -> 337196 bytes mcp.json | 310 ++++ providers/index.html | 129 ++ quick-start/index.html | 98 ++ robots.txt | 42 + sdk/callbacks/index.html | 127 ++ sdk/options/index.html | 76 + sdk/overview/index.html | 126 ++ sdk/sessions/index.html | 102 ++ search.json | 333 ++++ sessions/index.html | 69 + skill.md | 56 + 80 files changed, 11125 insertions(+) create mode 100644 _pagefind/fragment/en_11642b7.pf_fragment create mode 100644 _pagefind/fragment/en_16181a0.pf_fragment create mode 100644 _pagefind/fragment/en_1c9bfe8.pf_fragment create mode 100644 _pagefind/fragment/en_236cc3c.pf_fragment create mode 100644 _pagefind/fragment/en_2c38f2a.pf_fragment create mode 100644 _pagefind/fragment/en_2d586b8.pf_fragment create mode 100644 _pagefind/fragment/en_3d997be.pf_fragment create mode 100644 _pagefind/fragment/en_44458e8.pf_fragment create mode 100644 _pagefind/fragment/en_5bb96db.pf_fragment create mode 100644 _pagefind/fragment/en_5eb7564.pf_fragment create mode 100644 _pagefind/fragment/en_6b1fb6d.pf_fragment create mode 100644 _pagefind/fragment/en_80d31f1.pf_fragment create mode 100644 _pagefind/fragment/en_95479f6.pf_fragment create mode 100644 _pagefind/fragment/en_bf49bfb.pf_fragment create mode 100644 _pagefind/fragment/en_c9220e3.pf_fragment create mode 100644 _pagefind/fragment/en_c927f3f.pf_fragment create mode 100644 _pagefind/fragment/en_d67b2ae.pf_fragment create mode 100644 _pagefind/fragment/en_e58e25a.pf_fragment create mode 100644 _pagefind/fragment/en_ea3bc5f.pf_fragment create mode 100644 _pagefind/index/en_fa2211e.pf_index create mode 100644 _pagefind/pagefind-entry.json create mode 100644 _pagefind/pagefind-highlight.js create mode 100644 _pagefind/pagefind-modular-ui.css create mode 100644 _pagefind/pagefind-modular-ui.js create mode 100644 _pagefind/pagefind-ui.css create mode 100644 _pagefind/pagefind-ui.js create mode 100644 _pagefind/pagefind.en_3a80c79c47.pf_meta create mode 100644 _pagefind/pagefind.js create mode 100644 _pagefind/wasm.en.pagefind create mode 100644 _pagefind/wasm.unknown.pagefind create mode 100644 advanced/json-output/index.html create mode 100644 advanced/subagents/index.html create mode 100644 advanced/testing/index.html create mode 100644 assets/callbacks-DY5vOJ-1.js create mode 100644 assets/capabilities-hnq2TbFu.js create mode 100644 assets/commands-B2onU7kX.js create mode 100644 assets/configuration-BU6tST5r.js create mode 100644 assets/development-BTUHn6x2.js create mode 100644 assets/examples-C-0Ua9md.js create mode 100644 assets/flags-CkTF-Pw-.js create mode 100644 assets/index-BdEV_URu.js create mode 100644 assets/index-CGDazwHL.js create mode 100644 assets/index-Di_r5hA0.css create mode 100644 assets/installation-DaBrcZPn.js create mode 100644 assets/json-output-B1QZabVS.js create mode 100644 assets/loading-CfdMbwrl.js create mode 100644 assets/options-DhBmR6ye.js create mode 100644 assets/overview-DNz93_Eg.js create mode 100644 assets/overview-DbvqPNef.js create mode 100644 assets/providers-B05lw6S_.js create mode 100644 assets/quick-start-B51YvXk3.js create mode 100644 assets/sessions-BM7WkgkF.js create mode 100644 assets/sessions-X-l1qojs.js create mode 100644 assets/subagents-ChkZbdDR.js create mode 100644 assets/testing-COLNxuKj.js create mode 100644 assets/theme-BIHI7g3E.js create mode 100644 cli/commands/index.html create mode 100644 cli/flags/index.html create mode 100644 configuration/index.html create mode 100644 development/index.html create mode 100644 extensions/capabilities/index.html create mode 100644 extensions/examples/index.html create mode 100644 extensions/loading/index.html create mode 100644 extensions/overview/index.html create mode 100644 index.html create mode 100644 installation/index.html create mode 100644 llms-full.txt create mode 100644 llms.txt create mode 100644 logo.jpg create mode 100644 mcp.json create mode 100644 providers/index.html create mode 100644 quick-start/index.html create mode 100644 robots.txt create mode 100644 sdk/callbacks/index.html create mode 100644 sdk/options/index.html create mode 100644 sdk/overview/index.html create mode 100644 sdk/sessions/index.html create mode 100644 search.json create mode 100644 sessions/index.html create mode 100644 skill.md diff --git a/_pagefind/fragment/en_11642b7.pf_fragment b/_pagefind/fragment/en_11642b7.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..c88360cba8b4314ab6dda4d0041297a1fdf4bee2 GIT binary patch literal 1157 zcmV;01bX`)iwFP!00002|D9IdPUAQfewCweGlS|DO3@0Wz32kNR+K5C%&bN`D{2y_ zv2g6jb_(5LZubH95%)><*iO;}3j5QG%J%ur@%j03jtjbEDVND@5+~oHQj6#~8WdWs zc*3+9M7=0h(lTlB{Hi|g!wxhXxZoB{SrkfJ0~8+c6f~7f1}cT=^b#6#U^A`CWrnCy z@|3d#7PWAYtAvRK7^}HlLaKC5Enc((^I#jn8$(ac{eFodJmTV%nOO6}awT#1M4I2z zi$&NWYIk=mom&NucXx5Wp!IgJ!0m~kCC1~OGw@DQ%U7)DJjn|SF^x0ywgip`awi9sYN-YHoxTRksPHEh*oXbkdFS~j(A!tr3`+n`AQx#Lu zMUH*!L~@?Gs7}HwgVz7e?+z> z6{{39pt;)lajiDJ&;74IoG=RWubd0d=4&zx7&;1m>p~&k|HxMZB5B zt5Lajslor|k`zmg#H~5dPuL0)YUv#{46#ViODE_O7Z!^J0y5~*8^4>mr81#9sezl! z#6By;C@GmGBXUTFd&9%Mqu~)$ELs+LuAr*9|383=Ie{}|*xw_mz?%tsESwh`2dUub za`;{=w@h=0-axGKTuHHp(jX;5xW`Q-m3yiv4H48bW8tqq{_Gr&g2#vZBj^V662C3V zN;LY9cZ~kmEeGU>*Y#RLuQ%Lp=^ehMci7S!?e7hTZBa(~eff%7kiFD;B^Q;z;SqjR zS9)Hsn5Sz;L>ejxpE-q-=>(7!%S|=!kpzSUM3-G&l0PGvGw%%HFi1I)oD1e{t!ZAh zoa2ATpx>!Ao&Zt(Xy>x_)lT2O5J?BFZ>#Ry!rWhb~QP;q)$CEbz=d;=Q^sEI4QWwb#@2188RwCh=#a67JSFZMr(1H_;4_X&& zuWLxrP8e12LFvw1rp*km0Pk3T+3!I!9N%|6pbjI{lFLoqLw9Q|q(VJxu*Onb8ibr= z495rUR;rS=En`#en7(GYS}}+AM#xF+-6YtM^eTMgYP5j9zbF< ztv4uNhnym+iAB;J+p|@k$l>!VwNDy8!@j5z-yjlIB);PuU!3)BVAZ_afhorpLRXXv zPxI=$1qpE=@&gxcuHLn#U<*bF6@HRsSYNl?@W`Rc0>fdXx%QLahcVh3p)a8<$9G18 zrE;}4?rT+WSIR`-QIjEz4Bw;=N+-9mD&4d6U^MDQsrT4K$KSs9qMTWZtH^RISo_@? Xp^(ZrQx5s-Z{Pn0FS$>!{R#j8R{J;` literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_16181a0.pf_fragment b/_pagefind/fragment/en_16181a0.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..9f9e3bf79924fa2042ba6324741515a2cc34420f GIT binary patch literal 974 zcmV;<12Oy`iwFP!00002|D{$-ZyYxa{wu`h(gK!^qNnDTHaP@Mil9#0Ls7)CMmxi- zBn~8vH`_S>J*1?0*fDaj7ke1-&5sXh)VmKb#CAY~mhh8{-3kQ3}F!ilB`bPOA} z9Q-r*>vd7-FpW;1;C7SFExfeJL>zNH-KzDs{pJ&MuRI3y+MV}w#mC>A)j_Nm1k98& zc@BiKjZnm|Bm1?TqA8D4Zd$)qB2*$o%cm%r6qUhhKB{U(b=K4DteUUupwyOP*5GdBOft>WM4mBWJtU%XX;sxxBL+0NmYgW|UFjMvD?P|yyul#t8%55>dY(Xn8mC-$XV z6(3z+v7!ulk8`zNtQ0VV4n4O%TS~)}J888VwbMayGIQX6a*-4TcLL!AK}5Js*hY^@ zqEr1Q*M$m96%Fa=&ZZnElaXgZaBd~xA>Cv2YQvsuQaN`Ni9Hr%n)VpEZA|9A9CaR+ zUg2+OEQvzgCqc2;*rUw+tp1T@RGefvH04H1qcylk1BJ;m|FKzXVf#_DRG^IeQ&asz z4rprW_|Lgv))lyB+VO(SXC?Fj#f1)37)b3J8UFmNnCg6|QlpG+5^zh_BE=B>SjW z)jRMq9EVIJgbmE8g88DC#UR5|mj0*w6eP=*;HA;q*gU_X9%L&l`(bTfai(f>ENRJM z350W^hagOoXLRxZO}nqnGBY<&xHKwWW__TP(ahcY=JFk^)O!FjFmET9QRxED6CgQY zR)=Mg@O{ZCt8#5l*Ufqw^)W09lj()5>Xx2Y@+KOJW{}CQ!Io?1&SJl3C$ns`a@lAg zH1Wv2#;X)^>NpO904YQ5g#Z8m literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_1c9bfe8.pf_fragment b/_pagefind/fragment/en_1c9bfe8.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..c7496c29a1cb0ca818451717e52ac1841bcf80ee GIT binary patch literal 1114 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 literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_2d586b8.pf_fragment b/_pagefind/fragment/en_2d586b8.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..2f879f20b76580b352bdbd8b25bd612e0c383a24 GIT binary patch literal 1208 zcmV;p1V{THiwFP!00002|9w{5ZsRr({gr|8P&;sBblZo8-vZa&4K_i7I7Lw;K}1uu z&4wZclConM0s0aB!u^sRUSv~>v49`sGZ)Sro*`M26IU36@MPAt*y;uJYI3TZWcLJ)!1r+^}ddG&SRLv!(Qtt)tfWFJYC>O; zcc=)Lz^fXofT!%0TgUuU2FpfLxRTrsNX=co{PON<2z$W4`K_EYM9(RSc`2QS_! z#b>VW5m5W)O;fjZZ`S2N2tDneN@2GHXZ*@Y$#ekFamiPEn1;Qc_~^eqa}nAb+MHUnFP3ncZ8R5fZK65(*6U9?U+ z2`(SDy6_UPt}RpubA=om{oSiR0W_9@6NhZLoC{nA1s#XrD1WE$zpflmE9ph;M$NB} zOBdc=pg0Opi+>qKJMO_ZH(g4)p>Y4t{K^HE*m}VoF$O8YZbKWxVic05PDou7z1m{? zGX`rcK)5DcA;uERX;SP2F5vw9`ViB4pP&2LEKW>Dp69NZXnH_Crbtf#4YC8-%&@-@WL0d+wYHZ;d{_{nI8GwT;J2t~8`n z;{5i=NV~X?4u@_65NACp><0OB68&k$=+sHt!#-xdt(}@r<_jjDCVVDr9V8bIuoJTD zswaxC?_O)Q;U%6A?KN{8Qk=zKj29e>GZM6R+t|9XZNcu;ywf=A2U#7EE4fr3(V5mt z2iT|Uj9!`*&*E^tc5)yZj^#cY&+Q(HinonPmYbE_D&1QrfSuTTW)64^y~884?$#Kf zITOfbuT^L8+pVh;mMe)ICS~2?c`V4TOTb!fBc6ChMfIqXWyCvcePOnBZ=1MLB@?~& zJ=PDr+z>9vLNISV#CJ}G)>Q}(4^rkY@tEGQfFG-m`t!2tr-?SVWryYB!38C;Bz3>6 zYwUR@t={zucOYl!qVr~f6!hg)ldWtmiSzaKjTfX~ZsgL4X+T-pPPppBV<`2VRon)n ze{durSh>47tX7?En7ze2BC5~bsKP~P}R5x?5EG4M;Tt~?$XRA`}a{+VLX0imRrG2ym0Y( WlMzYrIL3g-=l35#SS@!r3jhGQyH7#@ literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_3d997be.pf_fragment b/_pagefind/fragment/en_3d997be.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..ebcbfd2b387890911a5573aa662f6853f5d029f8 GIT binary patch literal 1081 zcmV-91jhRxiwFP!00002|D{$@Z`(Ey{woK$Kpf0c5Yh~B>#PPB<09))(xluTNdxWyW`z`N49LmE1}9|S(Fb+XJj%@j#zoiRKd%m z8>>~SJJ)vZD48UMR*ox&D!*TT{0lyMK?WljyuugD!POk{G$nWrm1HY$8dltab*3v^ zXLt$0EL7TnEsSWLP%B`n1lBp-FekK{L!Rf?%+|0L4i?Gzrj<-6Xz(Xn=|uv;2R^=c z0?ntX(y8UvBABo+8o_67TdgoC^n_+<*<&8ipoy|YGRL0(E!J0^$vXS27o zUa+F(6jnJ99zRP86j2R^Qh4$?z<@Czzw|YvQOlUZZSq3oEi%Dk~tRE zvMgI9=wMe-Yq>0#l)KufqgcZSK$0@EvO`<18pEP?()}NEz2?9me1q_fy>%hDEG_;U z!If@P$#1!Y$FPjgD|C&I_dGT@cHJX9rs4Cr^XL~*A@BPx#}_0F@d9ljrK%q_D0r-I z&^@4EMOI?_-!TiFkjMaYj}eZvdd*%dV*_;s|8jcJ`IY}|6}M*=Wo*gaLC zlM--T-Ew1n8$*o{ZAeDd`r2#w>Tpz#n6C!8?@P?!;07~k-s^Qa(z$Y4R<8XNX zraN>}2}zUtM+fKOcCH|n7qv$4n|>H#4Co>?aFF#{2ZyoO{#E@T^UTeL4UDKTL`U#J z!{z%w-~w*~AAIwy3~TI!#+0W33J)ygpL|z+ju~&bt2NCL>!@{+0c}hST}J%PVWndZ zCcuq>`8%k!b=lC)xNw`v%j6tF)sPytw^ZX`BI~aauL}J*$*yR7fen6hcw@TLrd$?e zJekjCvq^$39L}U<{_r%xlhiT%mpI`h-@R4gNr*QL%qHo6{r2<^-qh*ps0jc7y~h*6 literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_44458e8.pf_fragment b/_pagefind/fragment/en_44458e8.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..dc0ec6666feddcdcff378604ea570c806905ad0b GIT binary patch literal 1412 zcmV-~1$+7*iwFP!00002|BY5%Z`(E${VR9Qiw)Q^)?zPt%aW|inzUKn4k&`6qNr<` z3ni)~WydS}-*-q#vKn;2o=lUM_v@TuJ5PC@7sBmmIH(L2aj`OFI^TAF{ir-;Ygw0Z zbw=;HhJ@Dfz6%$kqm>nsVV7muU_-8DskTZci|3Z`h&2q~V|OF1YW?*S%g!s)z{Ra< z;+;MF(d}=>)*|k1>tPoagu3pn`J1ID=WQo_XE`49S+8kDm$x^B9@rzbCb*v0LN!@s z7SX6TkfyFfZ&clC4lNTQ8%J|%j9-%I{BB9LDOtNEv6tC`+Q(`L@ygKV>NRbRC9VrD zOVw2L8cjnywvEth(YC?xqHVR3(Ki_@cW8hW9@pkT8o6m>TEt=J@E;`^%S-ywamR~^ zuV5Oz#XCIqE`n=}rc$|9c)6S0K>^{)+Y2mWIk-Ax67EUMW!Mrrh7I9Qmu2hN?%Bqm zm-jSJkuS9hKS016Y4n1U)#;+tsx6GLsm<0nw`#TU=u=JO8JU)C-|o{*Q@28f&3M%` z@as~xr=ys->wuh9|D?l-gJ!F${xViw3PC^_wM9`(Y%K@Npaj2CO>82t4+2?|Wl=8a zV3h|JTq@9^vJ9AlGMA*?1R8#V7F{SM`1>fhQZ(+7J37zx$r|i&?7PT}n?|MPhYdQQ z9&~23>=_XZ?|O3dx+i~Z*`-bl3Mj|JLL2!wX=`F|a0Afxssvc!X59W^YaF8WAZ*f- zfRU#hq2C-le zF0witRrVRqol3|Rg=P#CLGM4@B!>+Oap=AXl6KFaxlY>?aJC9o)UBXjD))gypR&lHB?MbO9ZM8)^0!@N}>Ekks$uO!XwJ=}@(xElwW!h>h_MFo#w{ zHSQel&gibwUai^zpWE9zaJ+4e_4Iy+>85p^4d~^m5!*0WMG=OHM9rnzZrKJL!{xz~ z%jjBQCXAlPS?9)yvyF4s1Eyu_xx~Pa|9XP4r~`(f7a;Fx&|lo&WGQ=~CF5LJ_0u4c z>-s4H)@w^x9`OWs_DT>&65U1H%fQ~J(_o=Fye_iX(^#Mggr9_32EsRJXUNT)c#@(! zlD+&n$cgd{qRWo8&QrSA&&4@zq#QBXo#`yvoA?pi-C7Pw<3YkJ=2gv99Fy3y1ksP? zK|T^H>C6p+SR!;?ph|uUAg5MqwPksfVCXQ*GYF7llO9em}1s7Br=@M<( z3#DBuIS52dIU7=r8HcI5M+~+A8BoD+r0_xE-FTSjZ2#iZeCK`Z&e!V-hh33Dc5As4 zwl2a;ui3AQXzy7pmejeZezYM_bA<%-FnJC;4(~Qz$4G#DY*8|r$a$XMH25~T9Cq?0 z<(o*$=~jH8Q?*wtP1gnv4>F@Xy!+u@$45XOMg2IN=|3W>@XOJ?V&a8ev@dbTuc%Kvr2Dpgw$;n8ZQdvNzkD;!D#|)IP`CR3jhE)r^jXh literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_5bb96db.pf_fragment b/_pagefind/fragment/en_5bb96db.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..9621955960153d5a151c947b22414db37687f8a2 GIT binary patch literal 1081 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 ZzIZhgy5|~MHvawR`5%pv7ixhA000mHm~{XE literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_80d31f1.pf_fragment b/_pagefind/fragment/en_80d31f1.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..921729f066d8a6bc0be79754f1035e99f3814f6a GIT binary patch literal 805 zcmV+=1KRu_iwFP!00002|E-lxZ`3dlhX2Ya917ApOP4RH2PCLCAZ}3Lz@o;rXA`T5 zZF%f&SEc`*v6FPSDngaumiS}lnRi~>UbeU~R-bF7Z>kjf>ZDpqeI>0zy^KiF*mhYh zD&=fM8+rO{9E7cj9mFAB*YE@$48kW9j|dF!3Q|RLg>d%uBPeO%0wD)R4c1w4u%h2V zq8w$6de#{ZKs<(<)WgOFkSV%B=B*Rj0!}}IHy(Rqkrp7W2E1lcGR}fV4(j~C;0*Z$ z-b*qHyo{XELen%Ck~*gU5@m>)n0Z0+wkTDXljK4OsRS!O7Pn#^5E=x*rHPpZ#5EkR zo`cxI%jd9O!@6=Q`V^PE00d^Lx^*Cgb$1a~Z+Y^ZqQ(&F-nHwBVZKY=kc*{El{`?7 z=-~xVok|~5VEH-(l|taUfK))7=+rnbytD`+?%8}U5?LE#8ELM|YH^7>I$U|QRBjkp z#UuET8*|7Lki4^m6VU1aD0yAF@@SaT9;M~l%F0XA_j^_ME4e|rYqPiR`bzM<%UK?b zFN!jAe+`|$aSiX2>2+ytG3U;u0IHL=MS@j*zxM@a^l*m`Jgnn$Z;Sir00hE@5mwCupgN%s(#Bfj39|jR`CW`{$zk z3I_-7s+Vfe}WOfR>p+|Vy6qU2Q&9mYijTfnH^O2ad9`vN7 zl~>MaV3}n(IWv2XN1#(EmoJx)v%k}9^t9O+Winz@L~8idKRY~=F>jnS-RA!W! literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_95479f6.pf_fragment b/_pagefind/fragment/en_95479f6.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..386ad4c4f618f800821a13c7a91b2cd6c3ba77ef GIT binary patch literal 954 zcmV;r14aBFiwFP!00002|9w^4ZsSG_{S`tB6iMNg66~9Seb~+AWsyy~&P$O5tBFL} z(~M?>xg<916#a;PVZWs0jAYAcTs>%Rk+gX?sV!v`2G;YK(ILPObal;FG#l?QL2e3Cx@jxR^YB`*oDk@H{? z`~u;d^dPnKLRUzjAK)@51-*H&*q}u^g0d{<1{TKo381ww{R{(a<(Cuqg;%}tH53J0 znHp94PvJf@N{Ln!@&D;Qo4{=4JhnI1w4G;x-%S8PmlCi*)ipuEqwy?w7Vmp06|z{- z3BM@3DUuucs#PpR2EXD$JWFHYN-Sp{J2!>X6SCtiidO3R6euD%f!~5eKP=AiF>Fr= zWQNX>3&VIr#@K3JxU`Y~;f#(Jdx>*t0^Xe-OUZb<`q)D5K|2)>|~k z=Vz1xQE}$rOYo*&j)U?f6=|n|Z4kF8pzBdK9G~TFeV>udBsfH7Pb3BA^_cm@Y#aF7 zNL00h4P5es#@khgG@SQd^UPINMsZqgKBjN8H|)*gibTuE!IEd`-aJk0*#>pf(=`de zQD@CFg~=9e+-{6*g+GP}Hzw{I)PMf^oBl}vx+no2mmY|f4G|bP771m?>NgnWpGD3& zBx3WD8Mv$3gp$1KSsrzyPFFeMKb-*e7469#5`d!<_zXcS*-DS~;KfiDQSXuH5ht8; zo?K}0NS53n1t$0|_@o;vXkV`p%0;uGoQ1ybj4i_z8mN3 z4mGt4*I^|aSwUZWqZsXK^j(0j!jWMrqRJb);w*15YUwKTjI=vsD^~IWAAX<UIL*D~M^=;uFib1!)7Ohage1juxphN2<<&S!ApRrisQSa{IwueZ53@w8DdFl%P z?G_PY*D2n`p++IOzUUrr`$c6e7FTCC1+f`*^el-)+)>*&;2}$Vtda=4EGTgrg@yRG zQGG;i4xt{p(e^2$-Cy6`PS-x`A2bnr17}f;tZkE!x>E1>TPj>EJ0&Z+L+nzKLarcc zIIcZqL_Nkh#HVW_j2(5?1m;E*+t7RdVr>1hGJ&7;Pp7AojEs58b~atVPO=ugpjqan cSGfP?Q)|uWnO+!{y?c257tTZi#ytoC0N+H)KmY&$ literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_bf49bfb.pf_fragment b/_pagefind/fragment/en_bf49bfb.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..cf5420f04d557259e31d0d7b386b27d969db962f GIT binary patch literal 1118 zcmV-k1flyMiwFP!00002|D9H0Z`(Ey{VN9*!)(B@hop1i>5_C%tK8} zlucM7J(6-_B>C@qM@oupE5X)$h^Zra_wMoCksGm;xzgE>EY0qd$`;8qnYe5{NkvgC zM7nm9WR#>vd#OFw2Xk*P*WzvzA zqB!xYl(bb&EmWcWj+FL>yfFna8b?BBb98@`rMsa#bL@(v()#B1OuSm8my&H%ms8S2`VNQNpXROUJ8jG}-kfuIlOkPpPQ%MP zPjN>ZC3*ah<>oaqM> z=NJSHB#RWo?eJMZ*HOubm|i!aPCKAlfgWP|D4oNt@@!_x$00&@d#|)8S~0h!GfNJGzG;GluRSzjcWUy37j))(dNpe?Kq#-Idu&dV~4p?(zWZRilVT;WaHRBn8@TXBP_e1}f5 z5?f{Ln7-*kt?L?tpjW{GH=BAT$`fBH+Ns${E4YeWr}VB{@10A0A#<+ir}kL0@GjWf zn)|J3BK|HEJ(}S7GXBP!s%^h}H}jye$|&S}Ziiv{`8iq@I?QU8z*?APhs<{{bDJ)~ zLbwV=tjxM))NLP~jkBt4fdYko72@-S7%l;jT2q2E!D{r)6a`V=8K6H0Cy|dM3NCoA zQ|$kpgS{K6kA)g^To+S`_#*9-2rJy_s9h*9EZ;vGSYCoOtQly7)j{@>`$-?HW`0cO z%Hq)m#;cM+D!#rq7Fy-!;sC-%66a)51##(cjMwX}vDuH*RQ!NFJ^Ou>;L!&xE}7mx kjuN~?1xATizL4D)Zh}diK^A#$ zVdEnt9ZewVQ@IXQCO;@*iRbV)68!u6MsBWsG=*@%JWha4sp+ z<6bB)t&zXe=*equXYZ$5qL2>TR!Ll!a2TU=?S~nZz<5Lr=+xSZYz)eM4uO5MmRXd_ z1k;rHQt`p(F9W(IGrBvXH?+-bL2Xl_)^md9gxQRZ30)M23j1Q+h=V7F^<8mk;ozmo zM4j<>@=V4jV^`?*1(}MIo3qm;EanI7!BXs6{$+R1ijYbN#(2lfpu=_U!TP>04}h0! zjPX}m)7)l=@Nd`#dk5i7@H|Li@kfG9ww7lQ)Y@1>hWCGb`wk~3|8pMdET*h)@1j=L zvS!jr%`L00hU;huS?A7B4SmGGYtr*sU9RfRiUDKdhm8fq0$!vMZ}RKwIu*OZ?$;ps zHNN(-`=EW62YK=5le*$7#D+`N;g_#K literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_c927f3f.pf_fragment b/_pagefind/fragment/en_c927f3f.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..9bfe493132dc779aadb146a3d004949416bd222f GIT binary patch literal 1408 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 Ygyh1MR60`rodF8}}l literal 0 HcmV?d00001 diff --git a/_pagefind/fragment/en_ea3bc5f.pf_fragment b/_pagefind/fragment/en_ea3bc5f.pf_fragment new file mode 100644 index 0000000000000000000000000000000000000000..44b8571b51dc84898fb727448fca3521d0f76b4a GIT binary patch literal 641 zcmV-{0)G7;iwFP!00002|8-Q+ZqzUk{FPOB0How19uQJrt0Dn~qLw#=8lSUi+&Z@9 zb$V1)`F6&>%iTdiI_Z*K@6PP(I6>X;U|fIQ>;AEtqpeP=R#?P%Cv8<%+PlOqA$+xs z(r4vRG$FX67xX+zpG=||JxEcC%*|Q}_q1zDlkeG58dV~hL+~*Pt)p^!H139!>uK=u zEhp zLsCoEw7M1VY{`FBX$0G#qC!U@Q;^BRmf0XSXn;aw z!E@1%&{v>MP04#pT3K7~G}ohYIZ^0gsikGFl3LL>faG04#5n6TV=@%_&GBl6=qK#w zVL<=@`ULCC;l$CY#1x?3c3GD!^OOr0r4f8Vr#=&%8Jr}6yUva&N4bo89Nv!&#yO|w z7;}8Tg0fK9Yb0!xnno|p%d0Ny%%C6O;iz;n_aJEW9Y;DHy%*jN1^w=gpXI>R9183+ zl(=PEUg93(BCvz}5?GtT=so#AYnN!2sZD-y;m&^LjQl6L1){Ss;+jQe%U0=fcEx*s zPNXBNoePc~^EZFzn$==fnb$A?HUXx2 z@j{!CVS|9{Y6RBO*{1GgBFEfwzru$E_ou(se$L;LH*eq76{w+Bs*}g3x|%pCJXOgg b%m4h?R5+Eb=yS>UA5Xsly3@X(x�K^Cdxg literal 0 HcmV?d00001 diff --git a/_pagefind/index/en_fa2211e.pf_index b/_pagefind/index/en_fa2211e.pf_index new file mode 100644 index 0000000000000000000000000000000000000000..2b3f1042de224cb6fae5f5ee15123cc191d37517 GIT binary patch literal 23126 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 Bk;(u7 literal 0 HcmV?d00001 diff --git a/_pagefind/pagefind-entry.json b/_pagefind/pagefind-entry.json new file mode 100644 index 00000000..5906a762 --- /dev/null +++ b/_pagefind/pagefind-entry.json @@ -0,0 +1 @@ +{"version":"1.4.0","languages":{"en":{"hash":"en_3a80c79c47","wasm":"en","page_count":19}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]} \ No newline at end of file diff --git a/_pagefind/pagefind-highlight.js b/_pagefind/pagefind-highlight.js new file mode 100644 index 00000000..b8189558 --- /dev/null +++ b/_pagefind/pagefind-highlight.js @@ -0,0 +1,1064 @@ +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// node_modules/mark.js/dist/mark.js +var require_mark = __commonJS({ + "node_modules/mark.js/dist/mark.js"(exports, module) { + (function(global, factory) { + typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory(); + })(exports, (function() { + "use strict"; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { + return typeof obj; + } : function(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + var classCallCheck = function(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + var createClass = /* @__PURE__ */ (function() { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + return function(Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + })(); + var _extends = Object.assign || function(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; + }; + var DOMIterator = (function() { + function DOMIterator2(ctx) { + var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; + var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : []; + var iframesTimeout = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 5e3; + classCallCheck(this, DOMIterator2); + this.ctx = ctx; + this.iframes = iframes; + this.exclude = exclude; + this.iframesTimeout = iframesTimeout; + } + createClass(DOMIterator2, [{ + key: "getContexts", + value: function getContexts() { + var ctx = void 0, filteredCtx = []; + if (typeof this.ctx === "undefined" || !this.ctx) { + ctx = []; + } else if (NodeList.prototype.isPrototypeOf(this.ctx)) { + ctx = Array.prototype.slice.call(this.ctx); + } else if (Array.isArray(this.ctx)) { + ctx = this.ctx; + } else if (typeof this.ctx === "string") { + ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); + } else { + ctx = [this.ctx]; + } + ctx.forEach(function(ctx2) { + var isDescendant = filteredCtx.filter(function(contexts) { + return contexts.contains(ctx2); + }).length > 0; + if (filteredCtx.indexOf(ctx2) === -1 && !isDescendant) { + filteredCtx.push(ctx2); + } + }); + return filteredCtx; + } + }, { + key: "getIframeContents", + value: function getIframeContents(ifr, successFn) { + var errorFn = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() { + }; + var doc = void 0; + try { + var ifrWin = ifr.contentWindow; + doc = ifrWin.document; + if (!ifrWin || !doc) { + throw new Error("iframe inaccessible"); + } + } catch (e) { + errorFn(); + } + if (doc) { + successFn(doc); + } + } + }, { + key: "isIframeBlank", + value: function isIframeBlank(ifr) { + var bl = "about:blank", src = ifr.getAttribute("src").trim(), href = ifr.contentWindow.location.href; + return href === bl && src !== bl && src; + } + }, { + key: "observeIframeLoad", + value: function observeIframeLoad(ifr, successFn, errorFn) { + var _this = this; + var called = false, tout = null; + var listener = function listener2() { + if (called) { + return; + } + called = true; + clearTimeout(tout); + try { + if (!_this.isIframeBlank(ifr)) { + ifr.removeEventListener("load", listener2); + _this.getIframeContents(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + }; + ifr.addEventListener("load", listener); + tout = setTimeout(listener, this.iframesTimeout); + } + }, { + key: "onIframeReady", + value: function onIframeReady(ifr, successFn, errorFn) { + try { + if (ifr.contentWindow.document.readyState === "complete") { + if (this.isIframeBlank(ifr)) { + this.observeIframeLoad(ifr, successFn, errorFn); + } else { + this.getIframeContents(ifr, successFn, errorFn); + } + } else { + this.observeIframeLoad(ifr, successFn, errorFn); + } + } catch (e) { + errorFn(); + } + } + }, { + key: "waitForIframes", + value: function waitForIframes(ctx, done) { + var _this2 = this; + var eachCalled = 0; + this.forEachIframe(ctx, function() { + return true; + }, function(ifr) { + eachCalled++; + _this2.waitForIframes(ifr.querySelector("html"), function() { + if (!--eachCalled) { + done(); + } + }); + }, function(handled) { + if (!handled) { + done(); + } + }); + } + }, { + key: "forEachIframe", + value: function forEachIframe(ctx, filter, each) { + var _this3 = this; + var end = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var ifr = ctx.querySelectorAll("iframe"), open = ifr.length, handled = 0; + ifr = Array.prototype.slice.call(ifr); + var checkEnd = function checkEnd2() { + if (--open <= 0) { + end(handled); + } + }; + if (!open) { + checkEnd(); + } + ifr.forEach(function(ifr2) { + if (DOMIterator2.matches(ifr2, _this3.exclude)) { + checkEnd(); + } else { + _this3.onIframeReady(ifr2, function(con) { + if (filter(ifr2)) { + handled++; + each(con); + } + checkEnd(); + }, checkEnd); + } + }); + } + }, { + key: "createIterator", + value: function createIterator(ctx, whatToShow, filter) { + return document.createNodeIterator(ctx, whatToShow, filter, false); + } + }, { + key: "createInstanceOnIframe", + value: function createInstanceOnIframe(contents) { + return new DOMIterator2(contents.querySelector("html"), this.iframes); + } + }, { + key: "compareNodeIframe", + value: function compareNodeIframe(node, prevNode, ifr) { + var compCurr = node.compareDocumentPosition(ifr), prev = Node.DOCUMENT_POSITION_PRECEDING; + if (compCurr & prev) { + if (prevNode !== null) { + var compPrev = prevNode.compareDocumentPosition(ifr), after = Node.DOCUMENT_POSITION_FOLLOWING; + if (compPrev & after) { + return true; + } + } else { + return true; + } + } + return false; + } + }, { + key: "getIteratorNode", + value: function getIteratorNode(itr) { + var prevNode = itr.previousNode(); + var node = void 0; + if (prevNode === null) { + node = itr.nextNode(); + } else { + node = itr.nextNode() && itr.nextNode(); + } + return { + prevNode, + node + }; + } + }, { + key: "checkIframeFilter", + value: function checkIframeFilter(node, prevNode, currIfr, ifr) { + var key = false, handled = false; + ifr.forEach(function(ifrDict, i) { + if (ifrDict.val === currIfr) { + key = i; + handled = ifrDict.handled; + } + }); + if (this.compareNodeIframe(node, prevNode, currIfr)) { + if (key === false && !handled) { + ifr.push({ + val: currIfr, + handled: true + }); + } else if (key !== false && !handled) { + ifr[key].handled = true; + } + return true; + } + if (key === false) { + ifr.push({ + val: currIfr, + handled: false + }); + } + return false; + } + }, { + key: "handleOpenIframes", + value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { + var _this4 = this; + ifr.forEach(function(ifrDict) { + if (!ifrDict.handled) { + _this4.getIframeContents(ifrDict.val, function(con) { + _this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); + }); + } + }); + } + }, { + key: "iterateThroughNodes", + value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { + var _this5 = this; + var itr = this.createIterator(ctx, whatToShow, filterCb); + var ifr = [], elements = [], node = void 0, prevNode = void 0, retrieveNodes = function retrieveNodes2() { + var _getIteratorNode = _this5.getIteratorNode(itr); + prevNode = _getIteratorNode.prevNode; + node = _getIteratorNode.node; + return node; + }; + while (retrieveNodes()) { + if (this.iframes) { + this.forEachIframe(ctx, function(currIfr) { + return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); + }, function(con) { + _this5.createInstanceOnIframe(con).forEachNode(whatToShow, function(ifrNode) { + return elements.push(ifrNode); + }, filterCb); + }); + } + elements.push(node); + } + elements.forEach(function(node2) { + eachCb(node2); + }); + if (this.iframes) { + this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); + } + doneCb(); + } + }, { + key: "forEachNode", + value: function forEachNode(whatToShow, each, filter) { + var _this6 = this; + var done = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : function() { + }; + var contexts = this.getContexts(); + var open = contexts.length; + if (!open) { + done(); + } + contexts.forEach(function(ctx) { + var ready = function ready2() { + _this6.iterateThroughNodes(whatToShow, ctx, each, filter, function() { + if (--open <= 0) { + done(); + } + }); + }; + if (_this6.iframes) { + _this6.waitForIframes(ctx, ready); + } else { + ready(); + } + }); + } + }], [{ + key: "matches", + value: function matches(element, selector) { + var selectors = typeof selector === "string" ? [selector] : selector, fn = element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.webkitMatchesSelector; + if (fn) { + var match = false; + selectors.every(function(sel) { + if (fn.call(element, sel)) { + match = true; + return false; + } + return true; + }); + return match; + } else { + return false; + } + } + }]); + return DOMIterator2; + })(); + var Mark$1 = (function() { + function Mark3(ctx) { + classCallCheck(this, Mark3); + this.ctx = ctx; + this.ie = false; + var ua = window.navigator.userAgent; + if (ua.indexOf("MSIE") > -1 || ua.indexOf("Trident") > -1) { + this.ie = true; + } + } + createClass(Mark3, [{ + key: "log", + value: function log(msg) { + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "debug"; + var log2 = this.opt.log; + if (!this.opt.debug) { + return; + } + if ((typeof log2 === "undefined" ? "undefined" : _typeof(log2)) === "object" && typeof log2[level] === "function") { + log2[level]("mark.js: " + msg); + } + } + }, { + key: "escapeStr", + value: function escapeStr(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + }, { + key: "createRegExp", + value: function createRegExp(str) { + if (this.opt.wildcards !== "disabled") { + str = this.setupWildcardsRegExp(str); + } + str = this.escapeStr(str); + if (Object.keys(this.opt.synonyms).length) { + str = this.createSynonymsRegExp(str); + } + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + if (this.opt.diacritics) { + str = this.createDiacriticsRegExp(str); + } + str = this.createMergedBlanksRegExp(str); + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.createJoinersRegExp(str); + } + if (this.opt.wildcards !== "disabled") { + str = this.createWildcardsRegExp(str); + } + str = this.createAccuracyRegExp(str); + return str; + } + }, { + key: "createSynonymsRegExp", + value: function createSynonymsRegExp(str) { + var syn = this.opt.synonyms, sens = this.opt.caseSensitive ? "" : "i", joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? "\0" : ""; + for (var index in syn) { + if (syn.hasOwnProperty(index)) { + var value = syn[index], k1 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(index) : this.escapeStr(index), k2 = this.opt.wildcards !== "disabled" ? this.setupWildcardsRegExp(value) : this.escapeStr(value); + if (k1 !== "" && k2 !== "") { + str = str.replace(new RegExp("(" + this.escapeStr(k1) + "|" + this.escapeStr(k2) + ")", "gm" + sens), joinerPlaceholder + ("(" + this.processSynomyms(k1) + "|") + (this.processSynomyms(k2) + ")") + joinerPlaceholder); + } + } + } + return str; + } + }, { + key: "processSynomyms", + value: function processSynomyms(str) { + if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { + str = this.setupIgnoreJoinersRegExp(str); + } + return str; + } + }, { + key: "setupWildcardsRegExp", + value: function setupWildcardsRegExp(str) { + str = str.replace(/(?:\\)*\?/g, function(val) { + return val.charAt(0) === "\\" ? "?" : ""; + }); + return str.replace(/(?:\\)*\*/g, function(val) { + return val.charAt(0) === "\\" ? "*" : ""; + }); + } + }, { + key: "createWildcardsRegExp", + value: function createWildcardsRegExp(str) { + var spaces = this.opt.wildcards === "withSpaces"; + return str.replace(/\u0001/g, spaces ? "[\\S\\s]?" : "\\S?").replace(/\u0002/g, spaces ? "[\\S\\s]*?" : "\\S*"); + } + }, { + key: "setupIgnoreJoinersRegExp", + value: function setupIgnoreJoinersRegExp(str) { + return str.replace(/[^(|)\\]/g, function(val, indx, original) { + var nextChar = original.charAt(indx + 1); + if (/[(|)\\]/.test(nextChar) || nextChar === "") { + return val; + } else { + return val + "\0"; + } + }); + } + }, { + key: "createJoinersRegExp", + value: function createJoinersRegExp(str) { + var joiner = []; + var ignorePunctuation = this.opt.ignorePunctuation; + if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { + joiner.push(this.escapeStr(ignorePunctuation.join(""))); + } + if (this.opt.ignoreJoiners) { + joiner.push("\\u00ad\\u200b\\u200c\\u200d"); + } + return joiner.length ? str.split(/\u0000+/).join("[" + joiner.join("") + "]*") : str; + } + }, { + key: "createDiacriticsRegExp", + value: function createDiacriticsRegExp(str) { + var sens = this.opt.caseSensitive ? "" : "i", dct = this.opt.caseSensitive ? ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105", "A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010D", "C\xC7\u0106\u010C", "d\u0111\u010F", "D\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119", "E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012B", "I\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142", "L\u0141", "n\xF1\u0148\u0144", "N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014D", "O\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159", "R\u0158", "s\u0161\u015B\u0219\u015F", "S\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163", "T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016B", "U\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFF", "Y\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017A", "Z\u017D\u017B\u0179"] : ["a\xE0\xE1\u1EA3\xE3\u1EA1\u0103\u1EB1\u1EAF\u1EB3\u1EB5\u1EB7\xE2\u1EA7\u1EA5\u1EA9\u1EAB\u1EAD\xE4\xE5\u0101\u0105A\xC0\xC1\u1EA2\xC3\u1EA0\u0102\u1EB0\u1EAE\u1EB2\u1EB4\u1EB6\xC2\u1EA6\u1EA4\u1EA8\u1EAA\u1EAC\xC4\xC5\u0100\u0104", "c\xE7\u0107\u010DC\xC7\u0106\u010C", "d\u0111\u010FD\u0110\u010E", "e\xE8\xE9\u1EBB\u1EBD\u1EB9\xEA\u1EC1\u1EBF\u1EC3\u1EC5\u1EC7\xEB\u011B\u0113\u0119E\xC8\xC9\u1EBA\u1EBC\u1EB8\xCA\u1EC0\u1EBE\u1EC2\u1EC4\u1EC6\xCB\u011A\u0112\u0118", "i\xEC\xED\u1EC9\u0129\u1ECB\xEE\xEF\u012BI\xCC\xCD\u1EC8\u0128\u1ECA\xCE\xCF\u012A", "l\u0142L\u0141", "n\xF1\u0148\u0144N\xD1\u0147\u0143", "o\xF2\xF3\u1ECF\xF5\u1ECD\xF4\u1ED3\u1ED1\u1ED5\u1ED7\u1ED9\u01A1\u1EDF\u1EE1\u1EDB\u1EDD\u1EE3\xF6\xF8\u014DO\xD2\xD3\u1ECE\xD5\u1ECC\xD4\u1ED2\u1ED0\u1ED4\u1ED6\u1ED8\u01A0\u1EDE\u1EE0\u1EDA\u1EDC\u1EE2\xD6\xD8\u014C", "r\u0159R\u0158", "s\u0161\u015B\u0219\u015FS\u0160\u015A\u0218\u015E", "t\u0165\u021B\u0163T\u0164\u021A\u0162", "u\xF9\xFA\u1EE7\u0169\u1EE5\u01B0\u1EEB\u1EE9\u1EED\u1EEF\u1EF1\xFB\xFC\u016F\u016BU\xD9\xDA\u1EE6\u0168\u1EE4\u01AF\u1EEA\u1EE8\u1EEC\u1EEE\u1EF0\xDB\xDC\u016E\u016A", "y\xFD\u1EF3\u1EF7\u1EF9\u1EF5\xFFY\xDD\u1EF2\u1EF6\u1EF8\u1EF4\u0178", "z\u017E\u017C\u017AZ\u017D\u017B\u0179"]; + var handled = []; + str.split("").forEach(function(ch) { + dct.every(function(dct2) { + if (dct2.indexOf(ch) !== -1) { + if (handled.indexOf(dct2) > -1) { + return false; + } + str = str.replace(new RegExp("[" + dct2 + "]", "gm" + sens), "[" + dct2 + "]"); + handled.push(dct2); + } + return true; + }); + }); + return str; + } + }, { + key: "createMergedBlanksRegExp", + value: function createMergedBlanksRegExp(str) { + return str.replace(/[\s]+/gmi, "[\\s]+"); + } + }, { + key: "createAccuracyRegExp", + value: function createAccuracyRegExp(str) { + var _this = this; + var chars = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xA1\xBF"; + var acc = this.opt.accuracy, val = typeof acc === "string" ? acc : acc.value, ls = typeof acc === "string" ? [] : acc.limiters, lsJoin = ""; + ls.forEach(function(limiter) { + lsJoin += "|" + _this.escapeStr(limiter); + }); + switch (val) { + case "partially": + default: + return "()(" + str + ")"; + case "complementary": + lsJoin = "\\s" + (lsJoin ? lsJoin : this.escapeStr(chars)); + return "()([^" + lsJoin + "]*" + str + "[^" + lsJoin + "]*)"; + case "exactly": + return "(^|\\s" + lsJoin + ")(" + str + ")(?=$|\\s" + lsJoin + ")"; + } + } + }, { + key: "getSeparatedKeywords", + value: function getSeparatedKeywords(sv) { + var _this2 = this; + var stack = []; + sv.forEach(function(kw) { + if (!_this2.opt.separateWordSearch) { + if (kw.trim() && stack.indexOf(kw) === -1) { + stack.push(kw); + } + } else { + kw.split(" ").forEach(function(kwSplitted) { + if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { + stack.push(kwSplitted); + } + }); + } + }); + return { + "keywords": stack.sort(function(a, b) { + return b.length - a.length; + }), + "length": stack.length + }; + } + }, { + key: "isNumeric", + value: function isNumeric(value) { + return Number(parseFloat(value)) == value; + } + }, { + key: "checkRanges", + value: function checkRanges(array) { + var _this3 = this; + if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== "[object Object]") { + this.log("markRanges() will only accept an array of objects"); + this.opt.noMatch(array); + return []; + } + var stack = []; + var last = 0; + array.sort(function(a, b) { + return a.start - b.start; + }).forEach(function(item) { + var _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), start = _callNoMatchOnInvalid.start, end = _callNoMatchOnInvalid.end, valid = _callNoMatchOnInvalid.valid; + if (valid) { + item.start = start; + item.length = end - start; + stack.push(item); + last = end; + } + }); + return stack; + } + }, { + key: "callNoMatchOnInvalidRanges", + value: function callNoMatchOnInvalidRanges(range, last) { + var start = void 0, end = void 0, valid = false; + if (range && typeof range.start !== "undefined") { + start = parseInt(range.start, 10); + end = start + parseInt(range.length, 10); + if (this.isNumeric(range.start) && this.isNumeric(range.length) && end - last > 0 && end - start > 0) { + valid = true; + } else { + this.log("Ignoring invalid or overlapping range: " + ("" + JSON.stringify(range))); + this.opt.noMatch(range); + } + } else { + this.log("Ignoring invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "checkWhitespaceRanges", + value: function checkWhitespaceRanges(range, originalLength, string) { + var end = void 0, valid = true, max = string.length, offset = originalLength - max, start = parseInt(range.start, 10) - offset; + start = start > max ? max : start; + end = start + parseInt(range.length, 10); + if (end > max) { + end = max; + this.log("End range automatically set to the max value of " + max); + } + if (start < 0 || end - start < 0 || start > max || end > max) { + valid = false; + this.log("Invalid range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } else if (string.substring(start, end).replace(/\s+/g, "") === "") { + valid = false; + this.log("Skipping whitespace only range: " + JSON.stringify(range)); + this.opt.noMatch(range); + } + return { + start, + end, + valid + }; + } + }, { + key: "getTextNodes", + value: function getTextNodes(cb) { + var _this4 = this; + var val = "", nodes = []; + this.iterator.forEachNode(NodeFilter.SHOW_TEXT, function(node) { + nodes.push({ + start: val.length, + end: (val += node.textContent).length, + node + }); + }, function(node) { + if (_this4.matchesExclude(node.parentNode)) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, function() { + cb({ + value: val, + nodes + }); + }); + } + }, { + key: "matchesExclude", + value: function matchesExclude(el) { + return DOMIterator.matches(el, this.opt.exclude.concat(["script", "style", "title", "head", "html"])); + } + }, { + key: "wrapRangeInTextNode", + value: function wrapRangeInTextNode(node, start, end) { + var hEl = !this.opt.element ? "mark" : this.opt.element, startNode = node.splitText(start), ret = startNode.splitText(end - start); + var repl = document.createElement(hEl); + repl.setAttribute("data-markjs", "true"); + if (this.opt.className) { + repl.setAttribute("class", this.opt.className); + } + repl.textContent = startNode.textContent; + startNode.parentNode.replaceChild(repl, startNode); + return ret; + } + }, { + key: "wrapRangeInMappedTextNode", + value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { + var _this5 = this; + dict.nodes.every(function(n, i) { + var sibl = dict.nodes[i + 1]; + if (typeof sibl === "undefined" || sibl.start > start) { + if (!filterCb(n.node)) { + return false; + } + var s = start - n.start, e = (end > n.end ? n.end : end) - n.start, startStr = dict.value.substr(0, n.start), endStr = dict.value.substr(e + n.start); + n.node = _this5.wrapRangeInTextNode(n.node, s, e); + dict.value = startStr + endStr; + dict.nodes.forEach(function(k, j) { + if (j >= i) { + if (dict.nodes[j].start > 0 && j !== i) { + dict.nodes[j].start -= e; + } + dict.nodes[j].end -= e; + } + }); + end -= e; + eachCb(n.node.previousSibling, n.start); + if (end > n.end) { + start = n.end; + } else { + return false; + } + } + return true; + }); + } + }, { + key: "wrapMatches", + value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this6 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + dict.nodes.forEach(function(node) { + node = node.node; + var match = void 0; + while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== "") { + if (!filterCb(match[matchIdx], node)) { + continue; + } + var pos = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + pos += match[i].length; + } + } + node = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); + eachCb(node.previousSibling); + regex.lastIndex = 0; + } + }); + endCb(); + }); + } + }, { + key: "wrapMatchesAcrossElements", + value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { + var _this7 = this; + var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; + this.getTextNodes(function(dict) { + var match = void 0; + while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== "") { + var start = match.index; + if (matchIdx !== 0) { + for (var i = 1; i < matchIdx; i++) { + start += match[i].length; + } + } + var end = start + match[matchIdx].length; + _this7.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(match[matchIdx], node); + }, function(node, lastIndex) { + regex.lastIndex = lastIndex; + eachCb(node); + }); + } + endCb(); + }); + } + }, { + key: "wrapRangeFromIndex", + value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { + var _this8 = this; + this.getTextNodes(function(dict) { + var originalLength = dict.value.length; + ranges.forEach(function(range, counter) { + var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), start = _checkWhitespaceRange.start, end = _checkWhitespaceRange.end, valid = _checkWhitespaceRange.valid; + if (valid) { + _this8.wrapRangeInMappedTextNode(dict, start, end, function(node) { + return filterCb(node, range, dict.value.substring(start, end), counter); + }, function(node) { + eachCb(node, range); + }); + } + }); + endCb(); + }); + } + }, { + key: "unwrapMatches", + value: function unwrapMatches(node) { + var parent = node.parentNode; + var docFrag = document.createDocumentFragment(); + while (node.firstChild) { + docFrag.appendChild(node.removeChild(node.firstChild)); + } + parent.replaceChild(docFrag, node); + if (!this.ie) { + parent.normalize(); + } else { + this.normalizeTextNode(parent); + } + } + }, { + key: "normalizeTextNode", + value: function normalizeTextNode(node) { + if (!node) { + return; + } + if (node.nodeType === 3) { + while (node.nextSibling && node.nextSibling.nodeType === 3) { + node.nodeValue += node.nextSibling.nodeValue; + node.parentNode.removeChild(node.nextSibling); + } + } else { + this.normalizeTextNode(node.firstChild); + } + this.normalizeTextNode(node.nextSibling); + } + }, { + key: "markRegExp", + value: function markRegExp(regexp, opt) { + var _this9 = this; + this.opt = opt; + this.log('Searching with expression "' + regexp + '"'); + var totalMatches = 0, fn = "wrapMatches"; + var eachCb = function eachCb2(element) { + totalMatches++; + _this9.opt.each(element); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + this[fn](regexp, this.opt.ignoreGroups, function(match, node) { + return _this9.opt.filter(node, match, totalMatches); + }, eachCb, function() { + if (totalMatches === 0) { + _this9.opt.noMatch(regexp); + } + _this9.opt.done(totalMatches); + }); + } + }, { + key: "mark", + value: function mark(sv, opt) { + var _this10 = this; + this.opt = opt; + var totalMatches = 0, fn = "wrapMatches"; + var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === "string" ? [sv] : sv), kwArr = _getSeparatedKeywords.keywords, kwArrLen = _getSeparatedKeywords.length, sens = this.opt.caseSensitive ? "" : "i", handler = function handler2(kw) { + var regex = new RegExp(_this10.createRegExp(kw), "gm" + sens), matches = 0; + _this10.log('Searching with expression "' + regex + '"'); + _this10[fn](regex, 1, function(term, node) { + return _this10.opt.filter(node, kw, totalMatches, matches); + }, function(element) { + matches++; + totalMatches++; + _this10.opt.each(element); + }, function() { + if (matches === 0) { + _this10.opt.noMatch(kw); + } + if (kwArr[kwArrLen - 1] === kw) { + _this10.opt.done(totalMatches); + } else { + handler2(kwArr[kwArr.indexOf(kw) + 1]); + } + }); + }; + if (this.opt.acrossElements) { + fn = "wrapMatchesAcrossElements"; + } + if (kwArrLen === 0) { + this.opt.done(totalMatches); + } else { + handler(kwArr[0]); + } + } + }, { + key: "markRanges", + value: function markRanges(rawRanges, opt) { + var _this11 = this; + this.opt = opt; + var totalMatches = 0, ranges = this.checkRanges(rawRanges); + if (ranges && ranges.length) { + this.log("Starting to mark with the following ranges: " + JSON.stringify(ranges)); + this.wrapRangeFromIndex(ranges, function(node, range, match, counter) { + return _this11.opt.filter(node, range, match, counter); + }, function(element, range) { + totalMatches++; + _this11.opt.each(element, range); + }, function() { + _this11.opt.done(totalMatches); + }); + } else { + this.opt.done(totalMatches); + } + } + }, { + key: "unmark", + value: function unmark(opt) { + var _this12 = this; + this.opt = opt; + var sel = this.opt.element ? this.opt.element : "*"; + sel += "[data-markjs]"; + if (this.opt.className) { + sel += "." + this.opt.className; + } + this.log('Removal selector "' + sel + '"'); + this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function(node) { + _this12.unwrapMatches(node); + }, function(node) { + var matchesSel = DOMIterator.matches(node, sel), matchesExclude = _this12.matchesExclude(node); + if (!matchesSel || matchesExclude) { + return NodeFilter.FILTER_REJECT; + } else { + return NodeFilter.FILTER_ACCEPT; + } + }, this.opt.done); + } + }, { + key: "opt", + set: function set$$1(val) { + this._opt = _extends({}, { + "element": "", + "className": "", + "exclude": [], + "iframes": false, + "iframesTimeout": 5e3, + "separateWordSearch": true, + "diacritics": true, + "synonyms": {}, + "accuracy": "partially", + "acrossElements": false, + "caseSensitive": false, + "ignoreJoiners": false, + "ignoreGroups": 0, + "ignorePunctuation": [], + "wildcards": "disabled", + "each": function each() { + }, + "noMatch": function noMatch() { + }, + "filter": function filter() { + return true; + }, + "done": function done() { + }, + "debug": false, + "log": window.console + }, val); + }, + get: function get$$1() { + return this._opt; + } + }, { + key: "iterator", + get: function get$$1() { + return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); + } + }]); + return Mark3; + })(); + function Mark2(ctx) { + var _this = this; + var instance = new Mark$1(ctx); + this.mark = function(sv, opt) { + instance.mark(sv, opt); + return _this; + }; + this.markRegExp = function(sv, opt) { + instance.markRegExp(sv, opt); + return _this; + }; + this.markRanges = function(sv, opt) { + instance.markRanges(sv, opt); + return _this; + }; + this.unmark = function(opt) { + instance.unmark(opt); + return _this; + }; + return this; + } + return Mark2; + })); + } +}); + +// lib/highlight.ts +var import_mark = __toESM(require_mark(), 1); +var PagefindHighlight = class { + constructor(options = { + markContext: null, + highlightParam: "pagefind-highlight", + markOptions: { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }, + addStyles: true + }) { + var _a, _b; + const { highlightParam, markContext, markOptions, addStyles } = options; + this.highlightParam = highlightParam ?? "pagefind-highlight"; + this.addStyles = addStyles ?? true; + this.markContext = markContext !== void 0 ? markContext : null; + this.markOptions = markOptions !== void 0 ? markOptions : { + className: "pagefind-highlight", + exclude: ["[data-pagefind-ignore]", "[data-pagefind-ignore] *"] + }; + (_a = this.markOptions).className ?? (_a.className = "pagefind__highlight"); + (_b = this.markOptions).exclude ?? (_b.exclude = [ + "[data-pagefind-ignore]", + "[data-pagefind-ignore] *" + ]); + this.markOptions.separateWordSearch = false; + this.highlight(); + } + getHighlightParams(paramName) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.getAll(paramName); + } + // Inline styles might be too hard to override + addHighlightStyles(className) { + if (!className) return; + const styleElement = document.createElement("style"); + styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`; + document.head.appendChild(styleElement); + } + createMarkInstance() { + if (this.markContext) { + return new import_mark.default(this.markContext); + } + const pagefindBody = document.querySelectorAll("[data-pagefind-body]"); + if (pagefindBody.length !== 0) { + return new import_mark.default(pagefindBody); + } else { + return new import_mark.default(document.body); + } + } + markText(instance, text) { + instance.mark(text, this.markOptions); + } + highlight() { + const params = this.getHighlightParams(this.highlightParam); + if (!params || params.length === 0) return; + this.addStyles && this.addHighlightStyles(this.markOptions.className); + const markInstance = this.createMarkInstance(); + this.markText(markInstance, params); + } +}; +window.PagefindHighlight = PagefindHighlight; +export { + PagefindHighlight as default +}; +/*! Bundled license information: + +mark.js/dist/mark.js: + (*!*************************************************** + * mark.js v8.11.1 + * https://markjs.io/ + * Copyright (c) 2014–2018, Julian Kühnel + * Released under the MIT license https://git.io/vwTVl + *****************************************************) +*/ diff --git a/_pagefind/pagefind-modular-ui.css b/_pagefind/pagefind-modular-ui.css new file mode 100644 index 00000000..9c6793ed --- /dev/null +++ b/_pagefind/pagefind-modular-ui.css @@ -0,0 +1,214 @@ +:root { + --pagefind-ui-scale: 0.8; + --pagefind-ui-primary: #034AD8; + --pagefind-ui-fade: #707070; + --pagefind-ui-text: #393939; + --pagefind-ui-background: #ffffff; + --pagefind-ui-border: #eeeeee; + --pagefind-ui-tag: #eeeeee; + --pagefind-ui-border-width: 2px; + --pagefind-ui-border-radius: 8px; + --pagefind-ui-image-border-radius: 8px; + --pagefind-ui-image-box-ratio: 3 / 2; + --pagefind-ui-font: system, -apple-system, ".SFNSText-Regular", + "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", + "Lucida Grande", sans-serif; +} + +[data-pfmod-hidden] { + display: none !important; +} + +[data-pfmod-suppressed] { + opacity: 0 !important; + pointer-events: none !important; +} + +[data-pfmod-sr-hidden] { + -webkit-clip: rect(0 0 0 0) !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(100%) !important; + clip-path: inset(100%) !important; + height: 1px !important; + overflow: hidden !important; + overflow: clip !important; + position: absolute !important; + white-space: nowrap !important; + width: 1px !important; +} + +[data-pfmod-loading] { + color: var(--pagefind-ui-text); + background-color: var(--pagefind-ui-text); + border-radius: var(--pagefind-ui-border-radius); + opacity: 0.1; + pointer-events: none; +} + +/* Input */ + +.pagefind-modular-input-wrapper { + position: relative; +} + +.pagefind-modular-input-wrapper::before { + background-color: var(--pagefind-ui-text); + width: calc(18px * var(--pagefind-ui-scale)); + height: calc(18px * var(--pagefind-ui-scale)); + top: calc(23px * var(--pagefind-ui-scale)); + left: calc(20px * var(--pagefind-ui-scale)); + content: ""; + position: absolute; + display: block; + opacity: 0.7; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A"); + -webkit-mask-size: 100%; + mask-size: 100%; + z-index: 9; + pointer-events: none; +} + +.pagefind-modular-input { + height: calc(64px * var(--pagefind-ui-scale)); + padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: var(--pagefind-ui-border-radius); + font-size: calc(21px * var(--pagefind-ui-scale)); + position: relative; + appearance: none; + -webkit-appearance: none; + display: flex; + width: 100%; + box-sizing: border-box; + font-weight: 700; +} + +.pagefind-modular-input::placeholder { + opacity: 0.2; +} + +.pagefind-modular-input-clear { + position: absolute; + top: calc(2px * var(--pagefind-ui-scale)); + right: calc(2px * var(--pagefind-ui-scale)); + height: calc(60px * var(--pagefind-ui-scale)); + border-radius: var(--pagefind-ui-border-radius); + padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale)); + color: var(--pagefind-ui-text); + font-size: calc(14px * var(--pagefind-ui-scale)); + cursor: pointer; + background-color: var(--pagefind-ui-background); + border: none; + appearance: none; +} + +/* ResultList */ + +.pagefind-modular-list-result { + list-style-type: none; + display: flex; + align-items: flex-start; + gap: min(calc(40px * var(--pagefind-ui-scale)), 3%); + padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale)); + border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-result:last-of-type { + border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border); +} + +.pagefind-modular-list-thumb { + width: min(30%, + calc((30% - (100px * var(--pagefind-ui-scale))) * 100000)); + max-width: calc(120px * var(--pagefind-ui-scale)); + margin-top: calc(10px * var(--pagefind-ui-scale)); + aspect-ratio: var(--pagefind-ui-image-box-ratio); + position: relative; +} + +.pagefind-modular-list-image { + display: block; + position: absolute; + left: 50%; + transform: translateX(-50%); + font-size: 0; + width: auto; + height: auto; + max-width: 100%; + max-height: 100%; + border-radius: var(--pagefind-ui-image-border-radius); +} + +.pagefind-modular-list-inner { + flex: 1; + display: flex; + flex-direction: column; + align-items: flex-start; + margin-top: calc(10px * var(--pagefind-ui-scale)); +} + +.pagefind-modular-list-title { + display: inline-block; + font-weight: 700; + font-size: calc(21px * var(--pagefind-ui-scale)); + margin-top: 0; + margin-bottom: 0; +} + +.pagefind-modular-list-link { + color: var(--pagefind-ui-text); + text-decoration: none; +} + +.pagefind-modular-list-link:hover { + text-decoration: underline; +} + +.pagefind-modular-list-excerpt { + display: inline-block; + font-weight: 400; + font-size: calc(16px * var(--pagefind-ui-scale)); + margin-top: calc(4px * var(--pagefind-ui-scale)); + margin-bottom: 0; + min-width: calc(250px * var(--pagefind-ui-scale)); +} + +/* FilterPills */ + +.pagefind-modular-filter-pills-wrapper { + overflow-x: scroll; + padding: 15px 0; +} + +.pagefind-modular-filter-pills { + display: flex; + gap: 6px; +} + +.pagefind-modular-filter-pill { + display: flex; + justify-content: center; + align-items: center; + border: none; + appearance: none; + padding: 0 calc(24px * var(--pagefind-ui-scale)); + background-color: var(--pagefind-ui-background); + color: var(--pagefind-ui-fade); + border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border); + border-radius: calc(25px * var(--pagefind-ui-scale)); + font-size: calc(18px * var(--pagefind-ui-scale)); + height: calc(50px * var(--pagefind-ui-scale)); + cursor: pointer; + white-space: nowrap; +} + +.pagefind-modular-filter-pill:hover { + border-color: var(--pagefind-ui-primary); +} + +.pagefind-modular-filter-pill[aria-pressed="true"] { + border-color: var(--pagefind-ui-primary); + color: var(--pagefind-ui-primary); +} \ No newline at end of file diff --git a/_pagefind/pagefind-modular-ui.js b/_pagefind/pagefind-modular-ui.js new file mode 100644 index 00000000..6caacd6a --- /dev/null +++ b/_pagefind/pagefind-modular-ui.js @@ -0,0 +1,8 @@ +(()=>{var w=Object.defineProperty;var b=(i,e)=>{for(var t in e)w(i,t,{get:e[t],enumerable:!0})};var f={};b(f,{FilterPills:()=>c,Input:()=>a,Instance:()=>p,ResultList:()=>o,Summary:()=>h});var r=class i{constructor(e){this.element=document.createElement(e)}id(e){return this.element.id=e,this}class(e){return this.element.classList.add(e),this}attrs(e){for(let[t,s]of Object.entries(e))this.element.setAttribute(t,s);return this}text(e){return this.element.innerText=e,this}html(e){return this.element.innerHTML=e,this}handle(e,t){return this.element.addEventListener(e,t),this}addTo(e){return e instanceof i?e.element.appendChild(this.element):e.appendChild(this.element),this.element}};var T=async(i=100)=>new Promise(e=>setTimeout(e,i)),a=class{constructor(e={}){if(this.inputEl=null,this.clearEl=null,this.instance=null,this.searchID=0,this.debounceTimeoutMs=e.debounceTimeoutMs??300,e.inputElement){if(e.containerElement){console.warn("[Pagefind Input component]: inputElement and containerElement both supplied. Ignoring the container option.");return}this.initExisting(e.inputElement)}else if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Input component]: No selector supplied for containerElement or inputElement");return}this.inputEl.addEventListener("input",async t=>{if(this.instance&&typeof t?.target?.value=="string"){this.updateState(t.target.value);let s=++this.searchID;if(await T(this.debounceTimeoutMs),s!==this.searchID)return null;this.instance?.triggerSearch(t.target.value)}}),this.inputEl.addEventListener("keydown",t=>{t.key==="Escape"&&(++this.searchID,this.inputEl.value="",this.instance?.triggerSearch(""),this.updateState("")),t.key==="Enter"&&t.preventDefault()}),this.inputEl.addEventListener("focus",()=>{this.instance?.triggerLoad()})}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No container found for ${e} selector`);return}if(t.tagName==="INPUT")console.warn(`[Pagefind Input component]: Encountered input element for ${e} when a container was expected`),console.warn("[Pagefind Input component]: Treating containerElement option as inputElement and proceeding"),this.initExisting(e);else{t.innerHTML="";let s=0;for(;document.querySelector(`#pfmod-input-${s}`);)s+=1;let n=new r("form").class("pagefind-modular-input-wrapper").attrs({role:"search","aria-label":"Search this site",action:"javascript:void(0);"});new r("label").attrs({for:`pfmod-input-${s}`,"data-pfmod-sr-hidden":"true"}).text("Search this site").addTo(n),this.inputEl=new r("input").id(`pfmod-input-${s}`).class("pagefind-modular-input").attrs({autocapitalize:"none",enterkeyhint:"search"}).addTo(n),this.clearEl=new r("button").class("pagefind-modular-input-clear").attrs({"data-pfmod-suppressed":"true"}).text("Clear").handle("click",()=>{this.inputEl.value="",this.instance.triggerSearch(""),this.updateState("")}).addTo(n),n.addTo(t)}}initExisting(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Input component]: No input element found for ${e} selector`);return}if(t.tagName!=="INPUT"){console.error(`[Pagefind Input component]: Expected ${e} to be an element`);return}this.inputEl=t}updateState(e){this.clearEl&&(e&&e?.length?this.clearEl.removeAttribute("data-pfmod-suppressed"):this.clearEl.setAttribute("data-pfmod-suppressed","true"))}register(e){this.instance=e,this.instance.on("search",(t,s)=>{this.inputEl&&document.activeElement!==this.inputEl&&(this.inputEl.value=t,this.updateState(t))})}focus(){this.inputEl&&this.inputEl.focus()}};var g=i=>{if(i instanceof Element)return[i];if(Array.isArray(i)&&i.every(e=>e instanceof Element))return i;if(typeof i=="string"||i instanceof String){let e=document.createElement("div");return e.innerHTML=i,[...e.childNodes]}else return console.error(`[Pagefind ResultList component]: Expected template function to return an HTML element or string, got ${typeof i}`),[]},v=()=>{let i=(e=30)=>". ".repeat(Math.floor(10+Math.random()*e));return`
  • +
    +
    +

    ${i(30)}

    +

    ${i(40)}

    +
    +
  • `},y=(i,e)=>{let t=new r("li").class("pagefind-modular-list-result");if(e){let l=new r("div").class("pagefind-modular-list-thumb").addTo(t);i?.meta?.image&&new r("img").class("pagefind-modular-list-image").attrs({src:i.meta.image,alt:i.meta.image_alt||i.meta.title}).addTo(l)}let s=new r("div").class("pagefind-modular-list-inner").addTo(t),n=new r("p").class("pagefind-modular-list-title").addTo(s);return new r("a").class("pagefind-modular-list-link").text(i.meta?.title).attrs({href:i.meta?.url||i.url}).addTo(n),new r("p").class("pagefind-modular-list-excerpt").html(i.excerpt).addTo(s),t.element},E=i=>{if(!(i instanceof HTMLElement))return null;let e=window.getComputedStyle(i).overflowY;return e!=="visible"&&e!=="hidden"?i:E(i.parentNode)},d=class{constructor(e={}){this.rawResult=e.result,this.placeholderNodes=e.placeholderNodes,this.resultFn=e.resultFn,this.intersectionEl=e.intersectionEl,this.showImages=e.showImages,this.result=null,this.waitForIntersection()}waitForIntersection(){if(!this.placeholderNodes?.length)return;let e={root:this.intersectionEl,rootMargin:"0px",threshold:.01};new IntersectionObserver((s,n)=>{this.result===null&&s?.[0]?.isIntersecting&&(this.load(),n.disconnect())},e).observe(this.placeholderNodes[0])}async load(){if(!this.placeholderNodes?.length)return;this.result=await this.rawResult.data();let e=this.resultFn(this.result,this.showImages),t=g(e);for(;this.placeholderNodes.length>1;)this.placeholderNodes.pop().remove();this.placeholderNodes[0].replaceWith(...t)}},o=class{constructor(e){if(this.intersectionEl=document.body,this.containerEl=null,this.results=[],this.placeholderTemplate=e.placeholderTemplate??v,this.resultTemplate=e.resultTemplate??y,this.showImages=e.showImages??!0,e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind ResultList component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind ResultList component]: No container found for ${e} selector`);return}this.containerEl=t}append(e){for(let t of e)this.containerEl.appendChild(t)}register(e){e.on("results",t=>{this.containerEl&&(this.containerEl.innerHTML="",this.intersectionEl=E(this.containerEl),this.results=t.results.map(s=>{let n=g(this.placeholderTemplate());return this.append(n),new d({result:s,placeholderNodes:n,resultFn:this.resultTemplate,intersectionEl:this.intersectionEl,showImages:this.showImages})}))}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerHTML="")})}};var h=class{constructor(e={}){if(this.containerEl=null,this.defaultMessage=e.defaultMessage??"",this.term="",e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind Summary component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind Summary component]: No container found for ${e} selector`);return}this.containerEl=t,this.containerEl.innerText=this.defaultMessage}register(e){e.on("search",(t,s)=>{this.term=t}),e.on("results",t=>{if(!this.containerEl||!t)return;if(!this.term){this.containerEl.innerText=this.defaultMessage;return}let s=t?.results?.length??0;this.containerEl.innerText=`${s} result${s===1?"":"s"} for ${this.term}`}),e.on("loading",()=>{this.containerEl&&(this.containerEl.innerText=`Searching for ${this.term}...`)})}};var c=class{constructor(e={}){if(this.instance=null,this.wrapper=null,this.pillContainer=null,this.available={},this.selected=["All"],this.total=0,this.filterMemo="",this.filter=e.filter,this.ordering=e.ordering??null,this.alwaysShow=e.alwaysShow??!1,this.selectMultiple=e.selectMultiple??!1,!this.filter?.length){console.error("[Pagefind FilterPills component]: No filter option supplied, nothing to display");return}if(e.containerElement)this.initContainer(e.containerElement);else{console.error("[Pagefind FilterPills component]: No selector supplied for containerElement");return}}initContainer(e){let t=document.querySelector(e);if(!t){console.error(`[Pagefind FilterPills component]: No container found for ${e} selector`);return}t.innerHTML="";let s=`pagefind_modular_filter_pills_${this.filter}`,n=new r("div").class("pagefind-modular-filter-pills-wrapper").attrs({role:"group","aria-labelledby":s});this.alwaysShow||n.attrs({"data-pfmod-hidden":!0}),new r("div").id(s).class("pagefind-modular-filter-pills-label").attrs({"data-pfmod-sr-hidden":!0}).text(`Filter results by ${this.filter}`).addTo(n),this.pillContainer=new r("div").class("pagefind-modular-filter-pills").addTo(n),this.wrapper=n.addTo(t)}update(){let e=this.available.map(t=>t[0]).join("~");e==this.filterMemo?this.updateExisting():(this.renderNew(),this.filterMemo=e)}pushFilters(){let e=this.selected.filter(t=>t!=="All");this.instance.triggerFilter(this.filter,e)}pillInner(e,t){return this.total?`${e} (${t})`:`${e}`}renderNew(){this.available.forEach(([e,t])=>{new r("button").class("pagefind-modular-filter-pill").html(this.pillInner(e,t)).attrs({"aria-pressed":this.selected.includes(e),type:"button"}).handle("click",()=>{e==="All"?this.selected=["All"]:this.selected.includes(e)?this.selected=this.selected.filter(s=>s!==e):this.selectMultiple?this.selected.push(e):this.selected=[e],this.selected?.length?this.selected?.length>1&&(this.selected=this.selected.filter(s=>s!=="All")):this.selected=["All"],this.update(),this.pushFilters()}).addTo(this.pillContainer)})}updateExisting(){let e=[...this.pillContainer.childNodes];this.available.forEach(([t,s],n)=>{e[n].innerHTML=this.pillInner(t,s),e[n].setAttribute("aria-pressed",this.selected.includes(t))})}register(e){this.instance=e,this.instance.on("filters",t=>{if(!this.pillContainer)return;this.selectMultiple?t=t.available:t=t.total;let s=t[this.filter];if(!s){console.warn(`[Pagefind FilterPills component]: No possible values found for the ${this.filter} filter`);return}this.available=Object.entries(s),Array.isArray(this.ordering)?this.available.sort((n,l)=>{let m=this.ordering.indexOf(n[0]),_=this.ordering.indexOf(l[0]);return(m===-1?1/0:m)-(_===-1?1/0:_)}):this.available.sort((n,l)=>n[0].localeCompare(l[0])),this.available.unshift(["All",this.total]),this.update()}),e.on("results",t=>{this.pillContainer&&(this.total=t?.unfilteredResultCount||0,this.available?.[0]?.[0]==="All"&&(this.available[0][1]=this.total),this.total||this.alwaysShow?this.wrapper.removeAttribute("data-pfmod-hidden"):this.wrapper.setAttribute("data-pfmod-hidden","true"),this.update())})}};var P=async(i=50)=>await new Promise(e=>setTimeout(e,i)),u;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(u=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?modular-ui.js.*$/)[1])}catch{u="/pagefind/"}var p=class{constructor(e={}){this.__pagefind__=null,this.__initializing__=null,this.__searchID__=0,this.__hooks__={search:[],filters:[],loading:[],results:[]},this.components=[],this.searchTerm="",this.searchFilters={},this.searchResult={},this.availableFilters=null,this.totalFilters=null,this.options={bundlePath:e.bundlePath??u,mergeIndex:e.mergeIndex??[]},delete e.bundlePath,delete e.resetStyles,delete e.processResult,delete e.processTerm,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,this.pagefindOptions=e}add(e){e?.register?.(this),this.components.push(e)}on(e,t){if(!this.__hooks__[e]){let s=Object.keys(this.__hooks__).join(", ");console.error(`[Pagefind Composable]: Unknown event type ${e}. Supported events: [${s}]`);return}if(typeof t!="function"){console.error(`[Pagefind Composable]: Expected callback to be a function, received ${typeof t}`);return}this.__hooks__[e].push(t)}triggerLoad(){this.__load__()}triggerSearch(e){this.searchTerm=e,this.__dispatch__("search",e,this.searchFilters),this.__search__(e,this.searchFilters)}triggerSearchWithFilters(e,t){this.searchTerm=e,this.searchFilters=t,this.__dispatch__("search",e,t),this.__search__(e,t)}triggerFilters(e){this.searchFilters=e,this.__dispatch__("search",this.searchTerm,e),this.__search__(this.searchTerm,e)}triggerFilter(e,t){this.searchFilters=this.searchFilters||{},this.searchFilters[e]=t,this.__dispatch__("search",this.searchTerm,this.searchFilters),this.__search__(this.searchTerm,this.searchFilters)}__dispatch__(e,...t){this.__hooks__[e]?.forEach(s=>s?.(...t))}async __clear__(){this.__dispatch__("results",{results:[],unfilteredTotalCount:0}),this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}async __search__(e,t){this.__dispatch__("loading"),await this.__load__();let s=++this.__searchID__;if(!e||!e.length)return this.__clear__();let n=await this.__pagefind__.search(e,{filters:t});n&&this.__searchID__===s&&(n.filters&&Object.keys(n.filters)?.length&&(this.availableFilters=n.filters,this.totalFilters=n.totalFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})),this.searchResult=n,this.__dispatch__("results",this.searchResult))}async __load__(){if(this.__initializing__){for(;!this.__pagefind__;)await P(50);return}if(this.__initializing__=!0,!this.__pagefind__){let e;try{e=await import(`${this.options.bundlePath}pagefind.js`)}catch(t){console.error(t),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindComposable Instance"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript?.src??"bad script location"}]`):console.error("no known script location")}await e.options(this.pagefindOptions||{});for(let t of this.options.mergeIndex){if(!t.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let s=t.bundlePath;delete t.bundlePath,await e.mergeIndex(s,t)}this.__pagefind__=e}this.availableFilters=await this.__pagefind__.filters(),this.totalFilters=this.availableFilters,this.__dispatch__("filters",{available:this.availableFilters,total:this.totalFilters})}};window.PagefindModularUI=f;})(); diff --git a/_pagefind/pagefind-ui.css b/_pagefind/pagefind-ui.css new file mode 100644 index 00000000..d7984a98 --- /dev/null +++ b/_pagefind/pagefind-ui.css @@ -0,0 +1 @@ +.pagefind-ui__result.svelte-j9e30.svelte-j9e30{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-j9e30.svelte-j9e30:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-thumb.svelte-j9e30.svelte-j9e30{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-j9e30.svelte-j9e30{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-j9e30.svelte-j9e30{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-j9e30 .pagefind-ui__result-link.svelte-j9e30:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-j9e30.svelte-j9e30{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-j9e30.svelte-j9e30{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-j9e30.svelte-j9e30{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-j9e30.svelte-j9e30{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;display:flex;align-items:flex-start;gap:min(calc(40px * var(--pagefind-ui-scale)),3%);padding:calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));border-top:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result.svelte-4xnkmf.svelte-4xnkmf:last-of-type{border-bottom:solid var(--pagefind-ui-border-width) var(--pagefind-ui-border)}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf{display:flex;flex-direction:column;padding-left:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf.svelte-4xnkmf:first-of-type{padding-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{font-size:.9em;position:relative}.pagefind-ui__result-nested.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:before{content:"\2937 ";position:absolute;top:0;right:calc(100% + .1em)}.pagefind-ui__result-thumb.svelte-4xnkmf.svelte-4xnkmf{width:min(30%,calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));max-width:calc(120px * var(--pagefind-ui-scale));margin-top:calc(10px * var(--pagefind-ui-scale));aspect-ratio:var(--pagefind-ui-image-box-ratio);position:relative}.pagefind-ui__result-image.svelte-4xnkmf.svelte-4xnkmf{display:block;position:absolute;left:50%;transform:translate(-50%);font-size:0;width:auto;height:auto;max-width:100%;max-height:100%;border-radius:var(--pagefind-ui-image-border-radius)}.pagefind-ui__result-inner.svelte-4xnkmf.svelte-4xnkmf{flex:1;display:flex;flex-direction:column;align-items:flex-start;margin-top:calc(10px * var(--pagefind-ui-scale))}.pagefind-ui__result-title.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:700;font-size:calc(21px * var(--pagefind-ui-scale));margin-top:0;margin-bottom:0}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf{color:var(--pagefind-ui-text);text-decoration:none}.pagefind-ui__result-title.svelte-4xnkmf .pagefind-ui__result-link.svelte-4xnkmf:hover{text-decoration:underline}.pagefind-ui__result-excerpt.svelte-4xnkmf.svelte-4xnkmf{display:inline-block;font-weight:400;font-size:calc(16px * var(--pagefind-ui-scale));margin-top:calc(4px * var(--pagefind-ui-scale));margin-bottom:0;min-width:calc(250px * var(--pagefind-ui-scale))}.pagefind-ui__loading.svelte-4xnkmf.svelte-4xnkmf{color:var(--pagefind-ui-text);background-color:var(--pagefind-ui-text);border-radius:var(--pagefind-ui-border-radius);opacity:.1;pointer-events:none}.pagefind-ui__result-tags.svelte-4xnkmf.svelte-4xnkmf{list-style-type:none;padding:0;display:flex;gap:calc(20px * var(--pagefind-ui-scale));flex-wrap:wrap;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__result-tag.svelte-4xnkmf.svelte-4xnkmf{padding:calc(4px * var(--pagefind-ui-scale)) calc(8px * var(--pagefind-ui-scale));font-size:calc(14px * var(--pagefind-ui-scale));border-radius:var(--pagefind-ui-border-radius);background-color:var(--pagefind-ui-tag)}legend.svelte-1v2r7ls.svelte-1v2r7ls{position:absolute;clip:rect(0 0 0 0)}.pagefind-ui__filter-panel.svelte-1v2r7ls.svelte-1v2r7ls{min-width:min(calc(260px * var(--pagefind-ui-scale)),100%);flex:1;display:flex;flex-direction:column;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{border:0;padding:0}.pagefind-ui__filter-block.svelte-1v2r7ls.svelte-1v2r7ls{padding:0;display:block;border-bottom:solid calc(2px * var(--pagefind-ui-scale)) var(--pagefind-ui-border);padding:calc(20px * var(--pagefind-ui-scale)) 0}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls{font-size:calc(16px * var(--pagefind-ui-scale));position:relative;display:flex;align-items:center;list-style:none;font-weight:700;cursor:pointer;height:calc(24px * var(--pagefind-ui-scale))}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls::-webkit-details-marker{display:none}.pagefind-ui__filter-name.svelte-1v2r7ls.svelte-1v2r7ls:after{position:absolute;content:"";right:calc(6px * var(--pagefind-ui-scale));top:50%;width:calc(8px * var(--pagefind-ui-scale));height:calc(8px * var(--pagefind-ui-scale));border:solid calc(2px * var(--pagefind-ui-scale)) currentColor;border-right:0;border-top:0;transform:translateY(-70%) rotate(-45deg)}.pagefind-ui__filter-block[open].svelte-1v2r7ls .pagefind-ui__filter-name.svelte-1v2r7ls:after{transform:translateY(-70%) rotate(-225deg)}.pagefind-ui__filter-group.svelte-1v2r7ls.svelte-1v2r7ls{display:flex;flex-direction:column;gap:calc(20px * var(--pagefind-ui-scale));padding-top:calc(30px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls{position:relative;display:flex;align-items:center;gap:calc(8px * var(--pagefind-ui-scale))}.pagefind-ui__filter-value.svelte-1v2r7ls.svelte-1v2r7ls:before{position:absolute;content:"";top:50%;left:calc(8px * var(--pagefind-ui-scale));width:0px;height:0px;border:solid 1px #fff;opacity:0;transform:translate(calc(4.5px * var(--pagefind-ui-scale) * -1),calc(.8px * var(--pagefind-ui-scale))) skew(-5deg) rotate(-45deg);transform-origin:top left;border-top:0;border-right:0;pointer-events:none}.pagefind-ui__filter-value.pagefind-ui__filter-value--checked.svelte-1v2r7ls.svelte-1v2r7ls:before{opacity:1;width:calc(9px * var(--pagefind-ui-scale));height:calc(4px * var(--pagefind-ui-scale));transition:width .1s ease-out .1s,height .1s ease-in}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls{margin:0;width:calc(16px * var(--pagefind-ui-scale));height:calc(16px * var(--pagefind-ui-scale));border:solid 1px var(--pagefind-ui-border);appearance:none;-webkit-appearance:none;border-radius:calc(var(--pagefind-ui-border-radius) / 2);background-color:var(--pagefind-ui-background);cursor:pointer}.pagefind-ui__filter-checkbox.svelte-1v2r7ls.svelte-1v2r7ls:checked{background-color:var(--pagefind-ui-primary);border:solid 1px var(--pagefind-ui-primary)}.pagefind-ui__filter-label.svelte-1v2r7ls.svelte-1v2r7ls{cursor:pointer;font-size:calc(16px * var(--pagefind-ui-scale));font-weight:400}.pagefind-ui--reset *:where(:not(html,iframe,canvas,img,svg,video):not(svg *,symbol *)){all:unset;display:revert;outline:revert}.pagefind-ui--reset *,.pagefind-ui--reset *:before,.pagefind-ui--reset *:after{box-sizing:border-box}.pagefind-ui--reset a,.pagefind-ui--reset button{cursor:revert}.pagefind-ui--reset ol,.pagefind-ui--reset ul,.pagefind-ui--reset menu{list-style:none}.pagefind-ui--reset img{max-width:100%}.pagefind-ui--reset table{border-collapse:collapse}.pagefind-ui--reset input,.pagefind-ui--reset textarea{-webkit-user-select:auto}.pagefind-ui--reset textarea{white-space:revert}.pagefind-ui--reset meter{-webkit-appearance:revert;appearance:revert}.pagefind-ui--reset ::placeholder{color:unset}.pagefind-ui--reset :where([hidden]){display:none}.pagefind-ui--reset :where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto}.pagefind-ui--reset :where([draggable="true"]){-webkit-user-drag:element}.pagefind-ui--reset mark{all:revert}:root{--pagefind-ui-scale:.8;--pagefind-ui-primary:#393939;--pagefind-ui-text:#393939;--pagefind-ui-background:#ffffff;--pagefind-ui-border:#eeeeee;--pagefind-ui-tag:#eeeeee;--pagefind-ui-border-width:2px;--pagefind-ui-border-radius:8px;--pagefind-ui-image-border-radius:8px;--pagefind-ui-image-box-ratio:3 / 2;--pagefind-ui-font:system, -apple-system, "BlinkMacSystemFont", ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", "Ubuntu", "arial", sans-serif}.pagefind-ui.svelte-e9gkc3{width:100%;color:var(--pagefind-ui-text);font-family:var(--pagefind-ui-font)}.pagefind-ui__hidden.svelte-e9gkc3{display:none!important}.pagefind-ui__suppressed.svelte-e9gkc3{opacity:0;pointer-events:none}.pagefind-ui__form.svelte-e9gkc3{position:relative}.pagefind-ui__form.svelte-e9gkc3:before{background-color:var(--pagefind-ui-text);width:calc(18px * var(--pagefind-ui-scale));height:calc(18px * var(--pagefind-ui-scale));top:calc(23px * var(--pagefind-ui-scale));left:calc(20px * var(--pagefind-ui-scale));content:"";position:absolute;display:block;opacity:.7;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");-webkit-mask-size:100%;mask-size:100%;z-index:9;pointer-events:none}.pagefind-ui__search-input.svelte-e9gkc3{height:calc(64px * var(--pagefind-ui-scale));padding:0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));background-color:var(--pagefind-ui-background);border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);font-size:calc(21px * var(--pagefind-ui-scale));position:relative;appearance:none;-webkit-appearance:none;display:flex;width:100%;box-sizing:border-box;font-weight:700}.pagefind-ui__search-input.svelte-e9gkc3::placeholder{opacity:.2}.pagefind-ui__search-clear.svelte-e9gkc3{position:absolute;top:calc(3px * var(--pagefind-ui-scale));right:calc(3px * var(--pagefind-ui-scale));height:calc(58px * var(--pagefind-ui-scale));padding:0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));color:var(--pagefind-ui-text);font-size:calc(14px * var(--pagefind-ui-scale));cursor:pointer;background-color:var(--pagefind-ui-background);border-radius:var(--pagefind-ui-border-radius)}.pagefind-ui__drawer.svelte-e9gkc3{gap:calc(60px * var(--pagefind-ui-scale));display:flex;flex-direction:row;flex-wrap:wrap}.pagefind-ui__results-area.svelte-e9gkc3{min-width:min(calc(400px * var(--pagefind-ui-scale)),100%);flex:1000;margin-top:calc(20px * var(--pagefind-ui-scale))}.pagefind-ui__results.svelte-e9gkc3{padding:0}.pagefind-ui__message.svelte-e9gkc3{box-sizing:content-box;font-size:calc(16px * var(--pagefind-ui-scale));height:calc(24px * var(--pagefind-ui-scale));padding:calc(20px * var(--pagefind-ui-scale)) 0;display:flex;align-items:center;font-weight:700;margin-top:0}.pagefind-ui__button.svelte-e9gkc3{margin-top:calc(40px * var(--pagefind-ui-scale));border:var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);border-radius:var(--pagefind-ui-border-radius);height:calc(48px * var(--pagefind-ui-scale));padding:0 calc(12px * var(--pagefind-ui-scale));font-size:calc(16px * var(--pagefind-ui-scale));color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background);width:100%;text-align:center;font-weight:700;cursor:pointer}.pagefind-ui__button.svelte-e9gkc3:hover{border-color:var(--pagefind-ui-primary);color:var(--pagefind-ui-primary);background:var(--pagefind-ui-background)} diff --git a/_pagefind/pagefind-ui.js b/_pagefind/pagefind-ui.js new file mode 100644 index 00000000..44c2d5d2 --- /dev/null +++ b/_pagefind/pagefind-ui.js @@ -0,0 +1,2 @@ +(()=>{var Ur=Object.defineProperty;var A=(n,e)=>{for(var t in e)Ur(n,t,{get:e[t],enumerable:!0})};function U(){}function bt(n){return n()}function yn(){return Object.create(null)}function K(n){n.forEach(bt)}function at(n){return typeof n=="function"}function G(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}var lt;function ie(n,e){return lt||(lt=document.createElement("a")),lt.href=e,n===lt.href}function vn(n){return Object.keys(n).length===0}var Hn=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global,de=class{constructor(e){this.options=e,this._listeners="WeakMap"in Hn?new WeakMap:void 0}observe(e,t){return this._listeners.set(e,t),this._getObserver().observe(e,this.options),()=>{this._listeners.delete(e),this._observer.unobserve(e)}}_getObserver(){var e;return(e=this._observer)!==null&&e!==void 0?e:this._observer=new ResizeObserver(t=>{var r;for(let s of t)de.entries.set(s.target,s),(r=this._listeners.get(s.target))===null||r===void 0||r(s)})}};de.entries="WeakMap"in Hn?new WeakMap:void 0;var wn=!1;function Dr(){wn=!0}function Ir(){wn=!1}function R(n,e){n.appendChild(e)}function S(n,e,t){n.insertBefore(e,t||null)}function k(n){n.parentNode&&n.parentNode.removeChild(n)}function Q(n,e){for(let t=0;tn.removeEventListener(e,t,r)}function m(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function Lr(n){return Array.from(n.childNodes)}function z(n,e){e=""+e,n.data!==e&&(n.data=e)}function Tt(n,e){n.value=e??""}function B(n,e,t){n.classList[t?"add":"remove"](e)}var ot=class{constructor(e=!1){this.is_svg=!1,this.is_svg=e,this.e=this.n=null}c(e){this.h(e)}m(e,t,r=null){this.e||(this.is_svg?this.e=Pr(t.nodeName):this.e=C(t.nodeType===11?"TEMPLATE":t.nodeName),this.t=t.tagName!=="TEMPLATE"?t:t.content,this.c(e)),this.i(r)}h(e){this.e.innerHTML=e,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(e){for(let t=0;tn.indexOf(r)===-1?e.push(r):t.push(r)),t.forEach(r=>r()),se=e}var it=new Set,ee;function ae(){ee={r:0,c:[],p:ee}}function oe(){ee.r||K(ee.c),ee=ee.p}function D(n,e){n&&n.i&&(it.delete(n),n.i(e))}function P(n,e,t,r){if(n&&n.o){if(it.has(n))return;it.add(n),ee.c.push(()=>{it.delete(n),r&&(t&&n.d(1),r())}),n.o(e)}else r&&r()}function On(n,e){P(n,1,1,()=>{e.delete(n.key)})}function jn(n,e,t,r,s,l,i,a,o,f,c,d){let p=n.length,h=l.length,u=p,_={};for(;u--;)_[n[u].key]=u;let E=[],b=new Map,T=new Map,M=[];for(u=h;u--;){let H=d(s,l,u),F=t(H),O=i.get(F);O?r&&M.push(()=>O.p(H,e)):(O=f(F,H),O.c()),b.set(F,E[u]=O),F in _&&T.set(F,Math.abs(u-_[F]))}let y=new Set,X=new Set;function V(H){D(H,1),H.m(a,c),i.set(H.key,H),c=H.first,h--}for(;p&&h;){let H=E[h-1],F=n[p-1],O=H.key,W=F.key;H===F?(c=H.first,p--,h--):b.has(W)?!i.has(O)||y.has(O)?V(H):X.has(W)?p--:T.get(O)>T.get(W)?(X.add(O),V(H)):(y.add(W),p--):(o(F,i),p--)}for(;p--;){let H=n[p];b.has(H.key)||o(H,i)}for(;h;)V(E[h-1]);return K(M),E}var Kr=["allowfullscreen","allowpaymentrequest","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"],Eo=new Set([...Kr]);function Un(n,e,t){let r=n.$$.props[e];r!==void 0&&(n.$$.bound[r]=t,t(n.$$.ctx[r]))}function ut(n){n&&n.c()}function me(n,e,t,r){let{fragment:s,after_update:l}=n.$$;s&&s.m(e,t),r||Rt(()=>{let i=n.$$.on_mount.map(bt).filter(at);n.$$.on_destroy?n.$$.on_destroy.push(...i):K(i),n.$$.on_mount=[]}),l.forEach(Rt)}function ue(n,e){let t=n.$$;t.fragment!==null&&(Wr(t.after_update),K(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Gr(n,e){n.$$.dirty[0]===-1&&(re.push(n),Br(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{let u=h.length?h[0]:p;return f.ctx&&s(f.ctx[d],f.ctx[d]=u)&&(!f.skip_bound&&f.bound[d]&&f.bound[d](u),c&&Gr(n,d)),p}):[],f.update(),c=!0,K(f.before_update),f.fragment=r?r(f.ctx):!1,e.target){if(e.hydrate){Dr();let d=Lr(e.target);f.fragment&&f.fragment.l(d),d.forEach(k)}else f.fragment&&f.fragment.c();e.intro&&D(n.$$.fragment),me(n,e.target,e.anchor,e.customElement),Ir(),zn()}fe(o)}var Jr;typeof HTMLElement=="function"&&(Jr=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){let{on_mount:n}=this.$$;this.$$.on_disconnect=n.map(bt).filter(at);for(let e in this.$$.slotted)this.appendChild(this.$$.slotted[e])}attributeChangedCallback(n,e,t){this[n]=t}disconnectedCallback(){K(this.$$.on_disconnect)}$destroy(){ue(this,1),this.$destroy=U}$on(n,e){if(!at(e))return U;let t=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return t.push(e),()=>{let r=t.indexOf(e);r!==-1&&t.splice(r,1)}}$set(n){this.$$set&&!vn(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}});var q=class{$destroy(){ue(this,1),this.$destroy=U}$on(e,t){if(!at(t))return U;let r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(t),()=>{let s=r.indexOf(t);s!==-1&&r.splice(s,1)}}$set(e){this.$$set&&!vn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}};function I(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=97&&e<=122||e>=65&&e<=90}function $(n){let e=typeof n=="string"?n.charCodeAt(0):n;return e>=48&&e<=57}function Z(n){return I(n)||$(n)}var Dn=["art-lojban","cel-gaulish","no-bok","no-nyn","zh-guoyu","zh-hakka","zh-min","zh-min-nan","zh-xiang"];var St={"en-gb-oed":"en-GB-oxendict","i-ami":"ami","i-bnn":"bnn","i-default":null,"i-enochian":null,"i-hak":"hak","i-klingon":"tlh","i-lux":"lb","i-mingo":null,"i-navajo":"nv","i-pwn":"pwn","i-tao":"tao","i-tay":"tay","i-tsu":"tsu","sgn-be-fr":"sfb","sgn-be-nl":"vgt","sgn-ch-de":"sgg","art-lojban":"jbo","cel-gaulish":null,"no-bok":"nb","no-nyn":"nn","zh-guoyu":"cmn","zh-hakka":"hak","zh-min":null,"zh-min-nan":"nan","zh-xiang":"hsn"};var Yr={}.hasOwnProperty;function ct(n,e={}){let t=In(),r=String(n),s=r.toLowerCase(),l=0;if(n==null)throw new Error("Expected string, got `"+n+"`");if(Yr.call(St,s)){let a=St[s];return(e.normalize===void 0||e.normalize===null||e.normalize)&&typeof a=="string"?ct(a):(t[Dn.includes(s)?"regular":"irregular"]=r,t)}for(;I(s.charCodeAt(l))&&l<9;)l++;if(l>1&&l<9){if(t.language=r.slice(0,l),l<4){let a=0;for(;s.charCodeAt(l)===45&&I(s.charCodeAt(l+1))&&I(s.charCodeAt(l+2))&&I(s.charCodeAt(l+3))&&!I(s.charCodeAt(l+4));){if(a>2)return i(l,3,"Too many extended language subtags, expected at most 3 subtags");t.extendedLanguageSubtags.push(r.slice(l+1,l+4)),l+=4,a++}}for(s.charCodeAt(l)===45&&I(s.charCodeAt(l+1))&&I(s.charCodeAt(l+2))&&I(s.charCodeAt(l+3))&&I(s.charCodeAt(l+4))&&!I(s.charCodeAt(l+5))&&(t.script=r.slice(l+1,l+5),l+=5),s.charCodeAt(l)===45&&(I(s.charCodeAt(l+1))&&I(s.charCodeAt(l+2))&&!I(s.charCodeAt(l+3))?(t.region=r.slice(l+1,l+3),l+=3):$(s.charCodeAt(l+1))&&$(s.charCodeAt(l+2))&&$(s.charCodeAt(l+3))&&!$(s.charCodeAt(l+4))&&(t.region=r.slice(l+1,l+4),l+=4));s.charCodeAt(l)===45;){let a=l+1,o=a;for(;Z(s.charCodeAt(o));){if(o-a>7)return i(o,1,"Too long variant, expected at most 8 characters");o++}if(o-a>4||o-a>3&&$(s.charCodeAt(a)))t.variants.push(r.slice(a,o)),l=o;else break}for(;s.charCodeAt(l)===45&&!(s.charCodeAt(l+1)===120||!Z(s.charCodeAt(l+1))||s.charCodeAt(l+2)!==45||!Z(s.charCodeAt(l+3)));){let a=l+2,o=0;for(;s.charCodeAt(a)===45&&Z(s.charCodeAt(a+1))&&Z(s.charCodeAt(a+2));){let f=a+1;for(a=f+2,o++;Z(s.charCodeAt(a));){if(a-f>7)return i(a,2,"Too long extension, expected at most 8 characters");a++}}if(!o)return i(a,4,"Empty extension, extensions must have at least 2 characters of content");t.extensions.push({singleton:r.charAt(l+1),extensions:r.slice(l+3,a).split("-")}),l=a}}else l=0;if(l===0&&s.charCodeAt(l)===120||s.charCodeAt(l)===45&&s.charCodeAt(l+1)===120){l=l?l+2:1;let a=l;for(;s.charCodeAt(a)===45&&Z(s.charCodeAt(a+1));){let o=l+1;for(a=o;Z(s.charCodeAt(a));){if(a-o>7)return i(a,5,"Too long private-use area, expected at most 8 characters");a++}t.privateuse.push(r.slice(l+1,a)),l=a}}if(l!==r.length)return i(l,6,"Found superfluous content after tag");return t;function i(a,o,f){return e.warning&&e.warning(f,o,a),e.forgiving?t:In()}}function In(){return{language:null,extendedLanguageSubtags:[],script:null,region:null,variants:[],extensions:[],privateuse:[],irregular:null,regular:null}}function Pn(n,e,t){let r=n.slice();return r[8]=e[t][0],r[9]=e[t][1],r}function Zr(n){let e,t,r,s,l,i=n[0]&&Ln(n);return{c(){i&&i.c(),e=v(),t=C("div"),r=C("p"),r.textContent=`${n[3](30)}`,s=v(),l=C("p"),l.textContent=`${n[3](40)}`,m(r,"class","pagefind-ui__result-title pagefind-ui__loading svelte-j9e30"),m(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-j9e30"),m(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),R(t,r),R(t,s),R(t,l)},p(a,o){a[0]?i||(i=Ln(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function Xr(n){let e,t,r,s,l=n[1].meta?.title+"",i,a,o,f,c=n[1].excerpt+"",d,p=n[0]&&qn(n),h=n[2].length&&Vn(n);return{c(){p&&p.c(),e=v(),t=C("div"),r=C("p"),s=C("a"),i=w(l),o=v(),f=C("p"),d=v(),h&&h.c(),m(s,"class","pagefind-ui__result-link svelte-j9e30"),m(s,"href",a=n[1].meta?.url||n[1].url),m(r,"class","pagefind-ui__result-title svelte-j9e30"),m(f,"class","pagefind-ui__result-excerpt svelte-j9e30"),m(t,"class","pagefind-ui__result-inner svelte-j9e30")},m(u,_){p&&p.m(u,_),S(u,e,_),S(u,t,_),R(t,r),R(r,s),R(s,i),R(t,o),R(t,f),f.innerHTML=c,R(t,d),h&&h.m(t,null)},p(u,_){u[0]?p?p.p(u,_):(p=qn(u),p.c(),p.m(e.parentNode,e)):p&&(p.d(1),p=null),_&2&&l!==(l=u[1].meta?.title+"")&&z(i,l),_&2&&a!==(a=u[1].meta?.url||u[1].url)&&m(s,"href",a),_&2&&c!==(c=u[1].excerpt+"")&&(f.innerHTML=c),u[2].length?h?h.p(u,_):(h=Vn(u),h.c(),h.m(t,null)):h&&(h.d(1),h=null)},d(u){p&&p.d(u),u&&k(e),u&&k(t),h&&h.d()}}}function Ln(n){let e;return{c(){e=C("div"),m(e,"class","pagefind-ui__result-thumb pagefind-ui__loading svelte-j9e30")},m(t,r){S(t,e,r)},d(t){t&&k(e)}}}function qn(n){let e,t=n[1].meta.image&&Bn(n);return{c(){e=C("div"),t&&t.c(),m(e,"class","pagefind-ui__result-thumb svelte-j9e30")},m(r,s){S(r,e,s),t&&t.m(e,null)},p(r,s){r[1].meta.image?t?t.p(r,s):(t=Bn(r),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(r){r&&k(e),t&&t.d()}}}function Bn(n){let e,t,r;return{c(){e=C("img"),m(e,"class","pagefind-ui__result-image svelte-j9e30"),ie(e.src,t=n[1].meta?.image)||m(e,"src",t),m(e,"alt",r=n[1].meta?.image_alt||n[1].meta?.title)},m(s,l){S(s,e,l)},p(s,l){l&2&&!ie(e.src,t=s[1].meta?.image)&&m(e,"src",t),l&2&&r!==(r=s[1].meta?.image_alt||s[1].meta?.title)&&m(e,"alt",r)},d(s){s&&k(e)}}}function Vn(n){let e,t=n[2],r=[];for(let s=0;sn.toLocaleUpperCase();function xr(n,e,t){let{show_images:r=!0}=e,{process_result:s=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=async d=>{t(1,a=await d.data()),t(1,a=s?.(a)??a),t(2,o=Object.entries(a.meta).filter(([p])=>!i.includes(p)))},c=(d=30)=>". ".repeat(Math.floor(10+Math.random()*d));return n.$$set=d=>{"show_images"in d&&t(0,r=d.show_images),"process_result"in d&&t(4,s=d.process_result),"result"in d&&t(5,l=d.result)},n.$$.update=()=>{if(n.$$.dirty&32)e:f(l)},[r,a,o,c,s,l]}var Mt=class extends q{constructor(e){super(),Y(this,e,xr,Qr,G,{show_images:0,process_result:4,result:5})}},Gn=Mt;function Jn(n,e,t){let r=n.slice();return r[11]=e[t][0],r[12]=e[t][1],r}function Yn(n,e,t){let r=n.slice();return r[15]=e[t],r}function $r(n){let e,t,r,s,l,i=n[0]&&Zn(n);return{c(){i&&i.c(),e=v(),t=C("div"),r=C("p"),r.textContent=`${n[5](30)}`,s=v(),l=C("p"),l.textContent=`${n[5](40)}`,m(r,"class","pagefind-ui__result-title pagefind-ui__loading svelte-4xnkmf"),m(l,"class","pagefind-ui__result-excerpt pagefind-ui__loading svelte-4xnkmf"),m(t,"class","pagefind-ui__result-inner svelte-4xnkmf")},m(a,o){i&&i.m(a,o),S(a,e,o),S(a,t,o),R(t,r),R(t,s),R(t,l)},p(a,o){a[0]?i||(i=Zn(a),i.c(),i.m(e.parentNode,e)):i&&(i.d(1),i=null)},d(a){i&&i.d(a),a&&k(e),a&&k(t)}}}function es(n){let e,t,r,s,l=n[1].meta?.title+"",i,a,o,f,c,d=n[0]&&Xn(n),p=n[4]&&xn(n),h=n[3],u=[];for(let E=0;En.toLocaleUpperCase();function ns(n,e,t){let{show_images:r=!0}=e,{process_result:s=null}=e,{result:l={data:async()=>{}}}=e,i=["title","image","image_alt","url"],a,o=[],f=[],c=!1,d=(u,_)=>{if(u.length<=_)return u;let E=[...u].sort((b,T)=>T.locations.length-b.locations.length).slice(0,3).map(b=>b.url);return u.filter(b=>E.includes(b.url))},p=async u=>{t(1,a=await u.data()),t(1,a=s?.(a)??a),t(2,o=Object.entries(a.meta).filter(([_])=>!i.includes(_))),Array.isArray(a.sub_results)&&(t(4,c=a.sub_results?.[0]?.url===(a.meta?.url||a.url)),c?t(3,f=d(a.sub_results.slice(1),3)):t(3,f=d([...a.sub_results],3)))},h=(u=30)=>". ".repeat(Math.floor(10+Math.random()*u));return n.$$set=u=>{"show_images"in u&&t(0,r=u.show_images),"process_result"in u&&t(6,s=u.process_result),"result"in u&&t(7,l=u.result)},n.$$.update=()=>{if(n.$$.dirty&128)e:p(l)},[r,a,o,f,c,h,s,l]}var At=class extends q{constructor(e){super(),Y(this,e,ns,ts,G,{show_images:0,process_result:6,result:7})}},rr=At;function sr(n,e,t){let r=n.slice();return r[10]=e[t][0],r[11]=e[t][1],r[12]=e,r[13]=t,r}function lr(n,e,t){let r=n.slice();return r[14]=e[t][0],r[15]=e[t][1],r[16]=e,r[17]=t,r}function ir(n){let e,t,r=n[4]("filters_label",n[5],n[6])+"",s,l,i=Object.entries(n[1]),a=[];for(let o=0;on.toLocaleUpperCase(),_r=n=>n.toLowerCase();function ss(n,e,t){let{available_filters:r=null}=e,{show_empty_filters:s=!0}=e,{open_filters:l=[]}=e,{translate:i=()=>""}=e,{automatic_translations:a={}}=e,{translations:o={}}=e,{selected_filters:f={}}=e,c=!1,d=!1;function p(h,u){f[`${h}:${u}`]=this.checked,t(0,f)}return n.$$set=h=>{"available_filters"in h&&t(1,r=h.available_filters),"show_empty_filters"in h&&t(2,s=h.show_empty_filters),"open_filters"in h&&t(3,l=h.open_filters),"translate"in h&&t(4,i=h.translate),"automatic_translations"in h&&t(5,a=h.automatic_translations),"translations"in h&&t(6,o=h.translations),"selected_filters"in h&&t(0,f=h.selected_filters)},n.$$.update=()=>{if(n.$$.dirty&258){e:if(r&&!c){t(8,c=!0);let h=Object.entries(r||{});h.length===1&&Object.entries(h[0][1])?.length<=6&&t(7,d=!0)}}},[f,r,s,l,i,a,o,d,c,p]}var yt=class extends q{constructor(e){super(),Y(this,e,ss,rs,G,{available_filters:1,show_empty_filters:2,open_filters:3,translate:4,automatic_translations:5,translations:6,selected_filters:0})}},fr=yt;var vt={};A(vt,{comments:()=>is,default:()=>us,direction:()=>as,strings:()=>os,thanks_to:()=>ls});var ls="Jan Claasen ",is="",as="ltr",os={placeholder:"Soek",clear_search:"Opruim",load_more:"Laai nog resultate",search_label:"Soek hierdie webwerf",filters_label:"Filters",zero_results:"Geen resultate vir [SEARCH_TERM]",many_results:"[COUNT] resultate vir [SEARCH_TERM]",one_result:"[COUNT] resultate vir [SEARCH_TERM]",alt_search:"Geen resultate vir [SEARCH_TERM]. Toon resultate vir [DIFFERENT_TERM] in plaas daarvan",search_suggestion:"Geen resultate vir [SEARCH_TERM]. Probeer eerder een van die volgende terme:",searching:"Soek vir [SEARCH_TERM]"},us={thanks_to:ls,comments:is,direction:as,strings:os};var Ht={};A(Ht,{comments:()=>_s,default:()=>hs,direction:()=>fs,strings:()=>ds,thanks_to:()=>cs});var cs="Jermanuts",_s="",fs="rtl",ds={placeholder:"\u0628\u062D\u062B",clear_search:"\u0627\u0645\u0633\u062D",load_more:"\u062D\u0645\u0651\u0650\u0644 \u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",search_label:"\u0627\u0628\u062D\u062B \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639",filters_label:"\u062A\u0635\u0641\u064A\u0627\u062A",zero_results:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",many_results:"[COUNT] \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]",one_result:"[COUNT] \u0646\u062A\u064A\u062C\u0629 \u0644 [SEARCH_TERM]",alt_search:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u064A\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C \u0644 [DIFFERENT_TERM] \u0628\u062F\u0644\u0627\u064B \u0645\u0646 \u0630\u0644\u0643",search_suggestion:"\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C \u0644 [SEARCH_TERM]. \u062C\u0631\u0628 \u0623\u062D\u062F \u0639\u0645\u0644\u064A\u0627\u062A \u0627\u0644\u0628\u062D\u062B \u0627\u0644\u062A\u0627\u0644\u064A\u0629:",searching:"\u064A\u0628\u062D\u062B \u0639\u0646 [SEARCH_TERM]..."},hs={thanks_to:cs,comments:_s,direction:fs,strings:ds};var wt={};A(wt,{comments:()=>ps,default:()=>Rs,direction:()=>gs,strings:()=>Es,thanks_to:()=>ms});var ms="Maruf Alom ",ps="",gs="ltr",Es={placeholder:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",clear_search:"\u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09C1\u09A8",load_more:"\u0986\u09B0\u09CB \u09AB\u09B2\u09BE\u09AB\u09B2 \u09A6\u09C7\u0996\u09C1\u09A8",search_label:"\u098F\u0987 \u0993\u09DF\u09C7\u09AC\u09B8\u09BE\u0987\u099F\u09C7 \u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09C1\u09A8",filters_label:"\u09AB\u09BF\u09B2\u09CD\u099F\u09BE\u09B0",zero_results:"[SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF",many_results:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",one_result:"[COUNT]-\u099F\u09BF \u09AB\u09B2\u09BE\u09AB\u09B2 \u09AA\u09BE\u0993\u09DF\u09BE \u0997\u09BF\u09DF\u09C7\u099B\u09C7 [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF",alt_search:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF. \u09AA\u09B0\u09BF\u09AC\u09B0\u09CD\u09A4\u09C7 [DIFFERENT_TERM] \u098F\u09B0 \u099C\u09A8\u09CD\u09AF \u09A6\u09C7\u0996\u09BE\u09A8\u09CB \u09B9\u099A\u09CD\u099B\u09C7",search_suggestion:"\u0995\u09CB\u09A8 \u0995\u09BF\u099B\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09AA\u09BE\u0993\u09DF\u09BE \u09AF\u09BE\u09DF\u09A8\u09BF [SEARCH_TERM] \u098F\u09B0 \u09AC\u09BF\u09B7\u09DF\u09C7. \u09A8\u09BF\u09A8\u09CD\u09AE\u09C7\u09B0 \u09AC\u09BF\u09B7\u09DF\u09AC\u09B8\u09CD\u09A4\u09C1 \u0996\u09C1\u0981\u099C\u09C7 \u09A6\u09C7\u0996\u09C1\u09A8:",searching:"\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u099A\u09B2\u099B\u09C7 [SEARCH_TERM]..."},Rs={thanks_to:ms,comments:ps,direction:gs,strings:Es};var Ft={};A(Ft,{comments:()=>Ts,default:()=>Ss,direction:()=>Cs,strings:()=>ks,thanks_to:()=>bs});var bs="Pablo Villaverde ",Ts="",Cs="ltr",ks={placeholder:"Cerca",clear_search:"Netejar",load_more:"Veure m\xE9s resultats",search_label:"Cerca en aquest lloc",filters_label:"Filtres",zero_results:"No es van trobar resultats per [SEARCH_TERM]",many_results:"[COUNT] resultats trobats per [SEARCH_TERM]",one_result:"[COUNT] resultat trobat per [SEARCH_TERM]",alt_search:"No es van trobar resultats per [SEARCH_TERM]. Mostrant al seu lloc resultats per [DIFFERENT_TERM]",search_suggestion:"No es van trobar resultats per [SEARCH_TERM]. Proveu una de les cerques seg\xFCents:",searching:"Cercant [SEARCH_TERM]..."},Ss={thanks_to:bs,comments:Ts,direction:Cs,strings:ks};var Nt={};A(Nt,{comments:()=>As,default:()=>Hs,direction:()=>ys,strings:()=>vs,thanks_to:()=>Ms});var Ms="Dalibor Hon ",As="",ys="ltr",vs={placeholder:"Hledat",clear_search:"Smazat",load_more:"Na\u010D\xEDst dal\u0161\xED v\xFDsledky",search_label:"Prohledat tuto str\xE1nku",filters_label:"Filtry",zero_results:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]",many_results:"[COUNT] v\xFDsledk\u016F pro [SEARCH_TERM]",one_result:"[COUNT] v\xFDsledek pro [SEARCH_TERM]",alt_search:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Zobrazuj\xED se v\xFDsledky pro [DIFFERENT_TERM]",search_suggestion:"\u017D\xE1dn\xE9 v\xFDsledky pro [SEARCH_TERM]. Souvisej\xEDc\xED v\xFDsledky hled\xE1n\xED:",searching:"Hled\xE1m [SEARCH_TERM]..."},Hs={thanks_to:Ms,comments:As,direction:ys,strings:vs};var zt={};A(zt,{comments:()=>Fs,default:()=>Os,direction:()=>Ns,strings:()=>zs,thanks_to:()=>ws});var ws="Jonas Smedegaard ",Fs="",Ns="ltr",zs={placeholder:"S\xF8g",clear_search:"Nulstil",load_more:"Indl\xE6s flere resultater",search_label:"S\xF8g p\xE5 dette website",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v et af disse s\xF8geord i stedet:",searching:"S\xF8ger efter [SEARCH_TERM]..."},Os={thanks_to:ws,comments:Fs,direction:Ns,strings:zs};var Ot={};A(Ot,{comments:()=>Us,default:()=>Ps,direction:()=>Ds,strings:()=>Is,thanks_to:()=>js});var js="Jan Claasen ",Us="",Ds="ltr",Is={placeholder:"Suche",clear_search:"L\xF6schen",load_more:"Mehr Ergebnisse laden",search_label:"Suche diese Seite",filters_label:"Filter",zero_results:"Keine Ergebnisse f\xFCr [SEARCH_TERM]",many_results:"[COUNT] Ergebnisse f\xFCr [SEARCH_TERM]",one_result:"[COUNT] Ergebnis f\xFCr [SEARCH_TERM]",alt_search:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Stattdessen werden Ergebnisse f\xFCr [DIFFERENT_TERM] angezeigt",search_suggestion:"Keine Ergebnisse f\xFCr [SEARCH_TERM]. Versuchen Sie eine der folgenden Suchen:",searching:"Suche f\xFCr [SEARCH_TERM]"},Ps={thanks_to:js,comments:Us,direction:Ds,strings:Is};var jt={};A(jt,{comments:()=>qs,default:()=>Ws,direction:()=>Bs,strings:()=>Vs,thanks_to:()=>Ls});var Ls="Liam Bigelow ",qs="",Bs="ltr",Vs={placeholder:"Search",clear_search:"Clear",load_more:"Load more results",search_label:"Search this site",filters_label:"Filters",zero_results:"No results for [SEARCH_TERM]",many_results:"[COUNT] results for [SEARCH_TERM]",one_result:"[COUNT] result for [SEARCH_TERM]",alt_search:"No results for [SEARCH_TERM]. Showing results for [DIFFERENT_TERM] instead",search_suggestion:"No results for [SEARCH_TERM]. Try one of the following searches:",searching:"Searching for [SEARCH_TERM]..."},Ws={thanks_to:Ls,comments:qs,direction:Bs,strings:Vs};var Ut={};A(Ut,{comments:()=>Gs,default:()=>Zs,direction:()=>Js,strings:()=>Ys,thanks_to:()=>Ks});var Ks="Pablo Villaverde ",Gs="",Js="ltr",Ys={placeholder:"Buscar",clear_search:"Limpiar",load_more:"Ver m\xE1s resultados",search_label:"Buscar en este sitio",filters_label:"Filtros",zero_results:"No se encontraron resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"No se encontraron resultados para [SEARCH_TERM]. Mostrando en su lugar resultados para [DIFFERENT_TERM]",search_suggestion:"No se encontraron resultados para [SEARCH_TERM]. Prueba una de las siguientes b\xFAsquedas:",searching:"Buscando [SEARCH_TERM]..."},Zs={thanks_to:Ks,comments:Gs,direction:Js,strings:Ys};var Dt={};A(Dt,{comments:()=>Qs,default:()=>el,direction:()=>xs,strings:()=>$s,thanks_to:()=>Xs});var Xs="Mikel Larreategi ",Qs="",xs="ltr",$s={placeholder:"Bilatu",clear_search:"Garbitu",load_more:"Kargatu emaitza gehiagi",search_label:"Bilatu",filters_label:"Iragazkiak",zero_results:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat",many_results:"[COUNT] emaitza [SEARCH_TERM] bilaketarentzat",one_result:"Emaitza bat [COUNT] [SEARCH_TERM] bilaketarentzat",alt_search:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. [DIFFERENT_TERM] bilaketaren emaitzak erakusten",search_suggestion:"Ez dago emaitzarik [SEARCH_TERM] bilaketarentzat. Saiatu hauetako beste bateikin:",searching:"[SEARCH_TERM] bilatzen..."},el={thanks_to:Xs,comments:Qs,direction:xs,strings:$s};var It={};A(It,{comments:()=>nl,default:()=>ll,direction:()=>rl,strings:()=>sl,thanks_to:()=>tl});var tl="Ali Khaleqi Yekta ",nl="",rl="rtl",sl={placeholder:"\u062C\u0633\u062A\u062C\u0648",clear_search:"\u067E\u0627\u06A9\u0633\u0627\u0632\u06CC",load_more:"\u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u062A\u0627\u06CC\u062C \u0628\u06CC\u0634\u062A\u0631",search_label:"\u062C\u0633\u062A\u062C\u0648 \u062F\u0631 \u0633\u0627\u06CC\u062A",filters_label:"\u0641\u06CC\u0644\u062A\u0631\u0647\u0627",zero_results:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F",many_results:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",one_result:"[COUNT] \u0646\u062A\u06CC\u062C\u0647 \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0634\u062F",alt_search:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u062F\u0631 \u0639\u0648\u0636 \u0646\u062A\u0627\u06CC\u062C \u0628\u0631\u0627\u06CC [DIFFERENT_TERM] \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F",search_suggestion:"\u0646\u062A\u06CC\u062C\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC [SEARCH_TERM] \u06CC\u0627\u0641\u062A \u0646\u0634\u062F. \u06CC\u06A9\u06CC \u0627\u0632 \u062C\u0633\u062A\u062C\u0648\u0647\u0627\u06CC \u0632\u06CC\u0631 \u0631\u0627 \u0627\u0645\u062A\u062D\u0627\u0646 \u06A9\u0646\u06CC\u062F:",searching:"\u062F\u0631 \u062D\u0627\u0644 \u062C\u0633\u062A\u062C\u0648\u06CC [SEARCH_TERM]..."},ll={thanks_to:tl,comments:nl,direction:rl,strings:sl};var Pt={};A(Pt,{comments:()=>al,default:()=>cl,direction:()=>ol,strings:()=>ul,thanks_to:()=>il});var il="Valtteri Laitinen ",al="",ol="ltr",ul={placeholder:"Haku",clear_search:"Tyhjenn\xE4",load_more:"Lataa lis\xE4\xE4 tuloksia",search_label:"Hae t\xE4lt\xE4 sivustolta",filters_label:"Suodattimet",zero_results:"Ei tuloksia haulle [SEARCH_TERM]",many_results:"[COUNT] tulosta haulle [SEARCH_TERM]",one_result:"[COUNT] tulos haulle [SEARCH_TERM]",alt_search:"Ei tuloksia haulle [SEARCH_TERM]. N\xE4ytet\xE4\xE4n tulokset sen sijaan haulle [DIFFERENT_TERM]",search_suggestion:"Ei tuloksia haulle [SEARCH_TERM]. Kokeile jotain seuraavista:",searching:"Haetaan [SEARCH_TERM]..."},cl={thanks_to:il,comments:al,direction:ol,strings:ul};var Lt={};A(Lt,{comments:()=>fl,default:()=>ml,direction:()=>dl,strings:()=>hl,thanks_to:()=>_l});var _l="Nicolas Friedli ",fl="",dl="ltr",hl={placeholder:"Rechercher",clear_search:"Nettoyer",load_more:"Charger plus de r\xE9sultats",search_label:"Recherche sur ce site",filters_label:"Filtres",zero_results:"Pas de r\xE9sultat pour [SEARCH_TERM]",many_results:"[COUNT] r\xE9sultats pour [SEARCH_TERM]",one_result:"[COUNT] r\xE9sultat pour [SEARCH_TERM]",alt_search:"Pas de r\xE9sultat pour [SEARCH_TERM]. Montre les r\xE9sultats pour [DIFFERENT_TERM] \xE0 la place",search_suggestion:"Pas de r\xE9sultat pour [SEARCH_TERM]. Essayer une des recherches suivantes:",searching:"Recherche [SEARCH_TERM]..."},ml={thanks_to:_l,comments:fl,direction:dl,strings:hl};var qt={};A(qt,{comments:()=>gl,default:()=>bl,direction:()=>El,strings:()=>Rl,thanks_to:()=>pl});var pl="Pablo Villaverde ",gl="",El="ltr",Rl={placeholder:"Buscar",clear_search:"Limpar",load_more:"Ver m\xE1is resultados",search_label:"Buscar neste sitio",filters_label:"Filtros",zero_results:"Non se atoparon resultados para [SEARCH_TERM]",many_results:"[COUNT] resultados atopados para [SEARCH_TERM]",one_result:"[COUNT] resultado atopado para [SEARCH_TERM]",alt_search:"Non se atoparon resultados para [SEARCH_TERM]. Amosando no seu lugar resultados para [DIFFERENT_TERM]",search_suggestion:"Non se atoparon resultados para [SEARCH_TERM]. Probe unha das seguintes pesquisas:",searching:"Buscando [SEARCH_TERM]..."},bl={thanks_to:pl,comments:gl,direction:El,strings:Rl};var Bt={};A(Bt,{comments:()=>Cl,default:()=>Ml,direction:()=>kl,strings:()=>Sl,thanks_to:()=>Tl});var Tl="Nir Tamir ",Cl="",kl="rtl",Sl={placeholder:"\u05D7\u05D9\u05E4\u05D5\u05E9",clear_search:"\u05E0\u05D9\u05E7\u05D5\u05D9",load_more:"\u05E2\u05D5\u05D3 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA",search_label:"\u05D7\u05D9\u05E4\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D6\u05D4",filters_label:"\u05DE\u05E1\u05E0\u05E0\u05D9\u05DD",zero_results:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",many_results:"\u05E0\u05DE\u05E6\u05D0\u05D5 [COUNT] \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",one_result:"\u05E0\u05DE\u05E6\u05D0\u05D4 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05D0\u05D7\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]",alt_search:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05DE\u05D5\u05E6\u05D2\u05D5\u05EA \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [DIFFERENT_TERM]",search_suggestion:"\u05DC\u05D0 \u05E0\u05DE\u05E6\u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D5\u05EA \u05E2\u05D1\u05D5\u05E8 [SEARCH_TERM]. \u05E0\u05E1\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D7\u05D9\u05E4\u05D5\u05E9\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD:",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D0\u05EA [SEARCH_TERM]..."},Ml={thanks_to:Tl,comments:Cl,direction:kl,strings:Sl};var Vt={};A(Vt,{comments:()=>yl,default:()=>wl,direction:()=>vl,strings:()=>Hl,thanks_to:()=>Al});var Al="Amit Yadav ",yl="",vl="ltr",Hl={placeholder:"\u0916\u094B\u091C\u0947\u0902",clear_search:"\u0938\u093E\u092B \u0915\u0930\u0947\u0902",load_more:"\u0914\u0930 \u0905\u0927\u093F\u0915 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0915\u0930\u0947\u0902",search_label:"\u0907\u0938 \u0938\u093E\u0907\u091F \u092E\u0947\u0902 \u0916\u094B\u091C\u0947\u0902",filters_label:"\u092B\u093C\u093F\u0932\u094D\u091F\u0930",zero_results:"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E",many_results:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u0947",one_result:"[COUNT] \u092A\u0930\u093F\u0923\u093E\u092E [SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u092E\u093F\u0932\u093E",alt_search:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0907\u0938\u0915\u0947 \u092C\u091C\u093E\u092F [DIFFERENT_TERM] \u0915\u0947 \u0932\u093F\u090F \u092A\u0930\u093F\u0923\u093E\u092E \u0926\u093F\u0916\u093E \u0930\u0939\u093E \u0939\u0948",search_suggestion:"[SEARCH_TERM] \u0915\u0947 \u0932\u093F\u090F \u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\u0964 \u0928\u093F\u092E\u094D\u0928\u0932\u093F\u0916\u093F\u0924 \u0916\u094B\u091C\u094B\u0902 \u092E\u0947\u0902 \u0938\u0947 \u0915\u094B\u0908 \u090F\u0915 \u0906\u091C\u093C\u092E\u093E\u090F\u0902:",searching:"[SEARCH_TERM] \u0915\u0940 \u0916\u094B\u091C \u0915\u0940 \u091C\u093E \u0930\u0939\u0940 \u0939\u0948..."},wl={thanks_to:Al,comments:yl,direction:vl,strings:Hl};var Wt={};A(Wt,{comments:()=>Nl,default:()=>jl,direction:()=>zl,strings:()=>Ol,thanks_to:()=>Fl});var Fl="Diomed ",Nl="",zl="ltr",Ol={placeholder:"Tra\u017Ei",clear_search:"O\u010Disti",load_more:"U\u010Ditaj vi\u0161e rezultata",search_label:"Pretra\u017Ei ovu stranicu",filters_label:"Filteri",zero_results:"Nema rezultata za [SEARCH_TERM]",many_results:"[COUNT] rezultata za [SEARCH_TERM]",one_result:"[COUNT] rezultat za [SEARCH_TERM]",alt_search:"Nema rezultata za [SEARCH_TERM]. Prikazujem rezultate za [DIFFERENT_TERM]",search_suggestion:"Nema rezultata za [SEARCH_TERM]. Poku\u0161aj s jednom od ovih pretraga:",searching:"Pretra\u017Eujem [SEARCH_TERM]..."},jl={thanks_to:Fl,comments:Nl,direction:zl,strings:Ol};var Kt={};A(Kt,{comments:()=>Dl,default:()=>Ll,direction:()=>Il,strings:()=>Pl,thanks_to:()=>Ul});var Ul="Adam Laki ",Dl="",Il="ltr",Pl={placeholder:"Keres\xE9s",clear_search:"T\xF6rl\xE9s",load_more:"Tov\xE1bbi tal\xE1latok bet\xF6lt\xE9se",search_label:"Keres\xE9s az oldalon",filters_label:"Sz\u0171r\xE9s",zero_results:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",many_results:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",one_result:"[COUNT] db tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre",alt_search:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Tal\xE1latok mutat\xE1sa ink\xE1bb a(z) [DIFFERENT_TERM] kifejez\xE9sre",search_suggestion:"Nincs tal\xE1lat a(z) [SEARCH_TERM] kifejez\xE9sre. Pr\xF3b\xE1ld meg a k\xF6vetkez\u0151 keres\xE9sek egyik\xE9t:",searching:"Keres\xE9s a(z) [SEARCH_TERM] kifejez\xE9sre..."},Ll={thanks_to:Ul,comments:Dl,direction:Il,strings:Pl};var Gt={};A(Gt,{comments:()=>Bl,default:()=>Kl,direction:()=>Vl,strings:()=>Wl,thanks_to:()=>ql});var ql="Nixentric",Bl="",Vl="ltr",Wl={placeholder:"Cari",clear_search:"Bersihkan",load_more:"Muat lebih banyak hasil",search_label:"Telusuri situs ini",filters_label:"Filter",zero_results:"[SEARCH_TERM] tidak ditemukan",many_results:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",one_result:"Ditemukan [COUNT] hasil untuk [SEARCH_TERM]",alt_search:"[SEARCH_TERM] tidak ditemukan. Menampilkan hasil [DIFFERENT_TERM] sebagai gantinya",search_suggestion:"[SEARCH_TERM] tidak ditemukan. Coba salah satu pencarian berikut ini:",searching:"Mencari [SEARCH_TERM]..."},Kl={thanks_to:ql,comments:Bl,direction:Vl,strings:Wl};var Jt={};A(Jt,{comments:()=>Jl,default:()=>Xl,direction:()=>Yl,strings:()=>Zl,thanks_to:()=>Gl});var Gl="Cosette Bruhns Alonso, Andrew Janco ",Jl="",Yl="ltr",Zl={placeholder:"Cerca",clear_search:"Cancella la cronologia",load_more:"Mostra pi\xF9 risultati",search_label:"Cerca nel sito",filters_label:"Filtri di ricerca",zero_results:"Nessun risultato per [SEARCH_TERM]",many_results:"[COUNT] risultati per [SEARCH_TERM]",one_result:"[COUNT] risultato per [SEARCH_TERM]",alt_search:"Nessun risultato per [SEARCH_TERM]. Mostrando risultati per [DIFFERENT_TERM] come alternativa.",search_suggestion:"Nessun risultato per [SEARCH_TERM]. Prova una delle seguenti ricerche:",searching:"Cercando [SEARCH_TERM]..."},Xl={thanks_to:Gl,comments:Jl,direction:Yl,strings:Zl};var Yt={};A(Yt,{comments:()=>xl,default:()=>ti,direction:()=>$l,strings:()=>ei,thanks_to:()=>Ql});var Ql="Tate",xl="",$l="ltr",ei={placeholder:"\u691C\u7D22",clear_search:"\u30AF\u30EA\u30A2",load_more:"\u6B21\u3092\u8AAD\u307F\u8FBC\u3080",search_label:"\u3053\u306E\u30B5\u30A4\u30C8\u3092\u691C\u7D22",filters_label:"\u30D5\u30A3\u30EB\u30BF",zero_results:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F",many_results:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",one_result:"[SEARCH_TERM]\u306E[COUNT]\u4EF6\u306E\u691C\u7D22\u7D50\u679C",alt_search:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002[DIFFERENT_TERM]\u306E\u691C\u7D22\u7D50\u679C\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059",search_suggestion:"[SEARCH_TERM]\u306E\u691C\u7D22\u306B\u4E00\u81F4\u3059\u308B\u60C5\u5831\u306F\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B21\u306E\u3044\u305A\u308C\u304B\u306E\u691C\u7D22\u3092\u8A66\u3057\u3066\u304F\u3060\u3055\u3044",searching:"[SEARCH_TERM]\u3092\u691C\u7D22\u3057\u3066\u3044\u307E\u3059"},ti={thanks_to:Ql,comments:xl,direction:$l,strings:ei};var Zt={};A(Zt,{comments:()=>ri,default:()=>ii,direction:()=>si,strings:()=>li,thanks_to:()=>ni});var ni="Seokho Son ",ri="",si="ltr",li={placeholder:"\uAC80\uC0C9\uC5B4",clear_search:"\uBE44\uC6B0\uAE30",load_more:"\uAC80\uC0C9 \uACB0\uACFC \uB354 \uBCF4\uAE30",search_label:"\uC0AC\uC774\uD2B8 \uAC80\uC0C9",filters_label:"\uD544\uD130",zero_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C",many_results:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",one_result:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC [COUNT]\uAC74",alt_search:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. [DIFFERENT_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC",search_suggestion:"[SEARCH_TERM]\uC5D0 \uB300\uD55C \uACB0\uACFC \uC5C6\uC74C. \uCD94\uCC9C \uAC80\uC0C9\uC5B4: ",searching:"[SEARCH_TERM] \uAC80\uC0C9 \uC911..."},ii={thanks_to:ni,comments:ri,direction:si,strings:li};var Xt={};A(Xt,{comments:()=>oi,default:()=>_i,direction:()=>ui,strings:()=>ci,thanks_to:()=>ai});var ai="",oi="",ui="ltr",ci={placeholder:"Rapu",clear_search:"Whakakore",load_more:"Whakauta \u0113tahi otinga k\u0113",search_label:"Rapu",filters_label:"T\u0101tari",zero_results:"Otinga kore ki [SEARCH_TERM]",many_results:"[COUNT] otinga ki [SEARCH_TERM]",one_result:"[COUNT] otinga ki [SEARCH_TERM]",alt_search:"Otinga kore ki [SEARCH_TERM]. Otinga k\u0113 ki [DIFFERENT_TERM]",search_suggestion:"Otinga kore ki [SEARCH_TERM]. whakam\u0101tau ki ng\u0101 mea atu:",searching:"Rapu ki [SEARCH_TERM]..."},_i={thanks_to:ai,comments:oi,direction:ui,strings:ci};var Qt={};A(Qt,{comments:()=>di,default:()=>pi,direction:()=>hi,strings:()=>mi,thanks_to:()=>fi});var fi="Harry Min Khant ",di="",hi="ltr",mi={placeholder:"\u101B\u103E\u102C\u101B\u1014\u103A",clear_search:"\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1000\u102D\u102F \u101B\u103E\u1004\u103A\u1038\u101C\u1004\u103A\u1038\u1015\u102B\u104B",load_more:"\u1014\u1031\u102C\u1000\u103A\u1011\u1015\u103A\u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1010\u1004\u103A\u1015\u102B\u104B",search_label:"\u1024\u1006\u102D\u102F\u1000\u103A\u1010\u103D\u1004\u103A\u101B\u103E\u102C\u1016\u103D\u1031\u1015\u102B\u104B",filters_label:"\u1005\u1005\u103A\u1011\u102F\u1010\u103A\u1019\u103E\u102F\u1019\u103B\u102C\u1038",zero_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038 \u1019\u101B\u103E\u102D\u1015\u102B",many_results:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT] \u1001\u102F",one_result:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A [COUNT]",alt_search:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u104E\u1004\u103A\u1038\u1021\u1005\u102C\u1038 [DIFFERENT_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u103B\u102C\u1038\u1000\u102D\u102F \u1015\u103C\u101E\u101E\u100A\u103A\u104B",search_suggestion:"[SEARCH_TERM] \u1021\u1010\u103D\u1000\u103A \u101B\u101C\u1012\u103A\u1019\u101B\u103E\u102D\u1015\u102B\u104B \u1021\u1031\u102C\u1000\u103A\u1015\u102B\u101B\u103E\u102C\u1016\u103D\u1031\u1019\u103E\u102F\u1019\u103B\u102C\u1038\u1011\u1032\u1019\u103E \u1010\u1005\u103A\u1001\u102F\u1000\u102D\u102F \u1005\u1019\u103A\u1038\u1000\u103C\u100A\u1037\u103A\u1015\u102B:",searching:"[SEARCH_TERM] \u1000\u102D\u102F \u101B\u103E\u102C\u1016\u103D\u1031\u1014\u1031\u101E\u100A\u103A..."},pi={thanks_to:fi,comments:di,direction:hi,strings:mi};var xt={};A(xt,{comments:()=>Ei,default:()=>Ti,direction:()=>Ri,strings:()=>bi,thanks_to:()=>gi});var gi="Eirik Mikkelsen",Ei="",Ri="ltr",bi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},Ti={thanks_to:gi,comments:Ei,direction:Ri,strings:bi};var $t={};A($t,{comments:()=>ki,default:()=>Ai,direction:()=>Si,strings:()=>Mi,thanks_to:()=>Ci});var Ci="Paul van Brouwershaven",ki="",Si="ltr",Mi={placeholder:"Zoeken",clear_search:"Reset",load_more:"Meer resultaten laden",search_label:"Doorzoek deze site",filters_label:"Filters",zero_results:"Geen resultaten voor [SEARCH_TERM]",many_results:"[COUNT] resultaten voor [SEARCH_TERM]",one_result:"[COUNT] resultaat voor [SEARCH_TERM]",alt_search:"Geen resultaten voor [SEARCH_TERM]. In plaats daarvan worden resultaten voor [DIFFERENT_TERM] weergegeven",search_suggestion:"Geen resultaten voor [SEARCH_TERM]. Probeer een van de volgende zoekopdrachten:",searching:"Zoeken naar [SEARCH_TERM]..."},Ai={thanks_to:Ci,comments:ki,direction:Si,strings:Mi};var en={};A(en,{comments:()=>vi,default:()=>Fi,direction:()=>Hi,strings:()=>wi,thanks_to:()=>yi});var yi="Eirik Mikkelsen",vi="",Hi="ltr",wi={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last fleire resultat",search_label:"S\xF8k p\xE5 denne sida",filters_label:"Filter",zero_results:"Ingen resultat for [SEARCH_TERM]",many_results:"[COUNT] resultat for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultat for [SEARCH_TERM]. Viser resultat for [DIFFERENT_TERM] i staden",search_suggestion:"Ingen resultat for [SEARCH_TERM]. Pr\xF8v eitt av desse s\xF8keorda i staden:",searching:"S\xF8ker etter [SEARCH_TERM]"},Fi={thanks_to:yi,comments:vi,direction:Hi,strings:wi};var tn={};A(tn,{comments:()=>zi,default:()=>Ui,direction:()=>Oi,strings:()=>ji,thanks_to:()=>Ni});var Ni="Christopher Wingate",zi="",Oi="ltr",ji={placeholder:"S\xF8k",clear_search:"Fjern",load_more:"Last flere resultater",search_label:"S\xF8k p\xE5 denne siden",filters_label:"Filtre",zero_results:"Ingen resultater for [SEARCH_TERM]",many_results:"[COUNT] resultater for [SEARCH_TERM]",one_result:"[COUNT] resultat for [SEARCH_TERM]",alt_search:"Ingen resultater for [SEARCH_TERM]. Viser resultater for [DIFFERENT_TERM] i stedet",search_suggestion:"Ingen resultater for [SEARCH_TERM]. Pr\xF8v en av disse s\xF8keordene i stedet:",searching:"S\xF8ker etter [SEARCH_TERM]"},Ui={thanks_to:Ni,comments:zi,direction:Oi,strings:ji};var nn={};A(nn,{comments:()=>Ii,default:()=>qi,direction:()=>Pi,strings:()=>Li,thanks_to:()=>Di});var Di="",Ii="",Pi="ltr",Li={placeholder:"Szukaj",clear_search:"Wyczy\u015B\u0107",load_more:"Za\u0142aduj wi\u0119cej",search_label:"Przeszukaj t\u0119 stron\u0119",filters_label:"Filtry",zero_results:"Brak wynik\xF3w dla [SEARCH_TERM]",many_results:"[COUNT] wynik\xF3w dla [SEARCH_TERM]",one_result:"[COUNT] wynik dla [SEARCH_TERM]",alt_search:"Brak wynik\xF3w dla [SEARCH_TERM]. Wy\u015Bwietlam wyniki dla [DIFFERENT_TERM]",search_suggestion:"Brak wynik\xF3w dla [SEARCH_TERM]. Pokrewne wyniki wyszukiwania:",searching:"Szukam [SEARCH_TERM]..."},qi={thanks_to:Di,comments:Ii,direction:Pi,strings:Li};var rn={};A(rn,{comments:()=>Vi,default:()=>Gi,direction:()=>Wi,strings:()=>Ki,thanks_to:()=>Bi});var Bi="Jonatah",Vi="",Wi="ltr",Ki={placeholder:"Pesquisar",clear_search:"Limpar",load_more:"Ver mais resultados",search_label:"Pesquisar",filters_label:"Filtros",zero_results:"Nenhum resultado encontrado para [SEARCH_TERM]",many_results:"[COUNT] resultados encontrados para [SEARCH_TERM]",one_result:"[COUNT] resultado encontrado para [SEARCH_TERM]",alt_search:"Nenhum resultado encontrado para [SEARCH_TERM]. Exibindo resultados para [DIFFERENT_TERM]",search_suggestion:"Nenhum resultado encontrado para [SEARCH_TERM]. Tente uma das seguintes pesquisas:",searching:"Pesquisando por [SEARCH_TERM]..."},Gi={thanks_to:Bi,comments:Vi,direction:Wi,strings:Ki};var sn={};A(sn,{comments:()=>Yi,default:()=>Qi,direction:()=>Zi,strings:()=>Xi,thanks_to:()=>Ji});var Ji="Bogdan Mateescu ",Yi="",Zi="ltr",Xi={placeholder:"C\u0103utare",clear_search:"\u015Eterge\u0163i",load_more:"\xCEnc\u0103rca\u021Bi mai multe rezultate",search_label:"C\u0103uta\u021Bi \xEEn acest site",filters_label:"Filtre",zero_results:"Niciun rezultat pentru [SEARCH_TERM]",many_results:"[COUNT] rezultate pentru [SEARCH_TERM]",one_result:"[COUNT] rezultat pentru [SEARCH_TERM]",alt_search:"Niciun rezultat pentru [SEARCH_TERM]. Se afi\u0219eaz\u0103 \xEEn schimb rezultatele pentru [DIFFERENT_TERM]",search_suggestion:"Niciun rezultat pentru [SEARCH_TERM]. \xCEncerca\u021Bi una dintre urm\u0103toarele c\u0103ut\u0103ri:",searching:"Se caut\u0103 dup\u0103: [SEARCH_TERM]..."},Qi={thanks_to:Ji,comments:Yi,direction:Zi,strings:Xi};var ln={};A(ln,{comments:()=>$i,default:()=>na,direction:()=>ea,strings:()=>ta,thanks_to:()=>xi});var xi="Aleksandr Gordeev",$i="",ea="ltr",ta={placeholder:"\u041F\u043E\u0438\u0441\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0435\u0449\u0435",search_label:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0438\u043B\u044C\u0442\u0440\u044B",zero_results:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]",alt_search:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u044B \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u0437 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432",searching:"\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443: [SEARCH_TERM]"},na={thanks_to:xi,comments:$i,direction:ea,strings:ta};var an={};A(an,{comments:()=>sa,default:()=>aa,direction:()=>la,strings:()=>ia,thanks_to:()=>ra});var ra="Andrija Sagicc",sa="",la="ltr",ia={placeholder:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430",clear_search:"\u0411\u0440\u0438\u0441\u0430\u045A\u0435",load_more:"\u041F\u0440\u0438\u043A\u0430\u0437 \u0432\u0438\u0448\u0435 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430",search_label:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0441\u0430\u0458\u0442\u0430",filters_label:"\u0424\u0438\u043B\u0442\u0435\u0440\u0438",zero_results:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]",alt_search:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u0440\u0438\u043A\u0430\u0437 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043A \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [DIFFERENT_TERM]",search_suggestion:"\u041D\u0435\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\u0442\u0430\u0442\u0430 \u0437\u0430 [SEARCH_TERM]. \u041F\u043E\u043A\u0443\u0448\u0430\u0458\u0442\u0435 \u0441\u0430 \u043D\u0435\u043A\u043E\u043C \u043E\u0434 \u0441\u043B\u0435\u0434\u0435\u045B\u0438\u0445 \u043F\u0440\u0435\u0442\u0440\u0430\u0433\u0430:",searching:"\u041F\u0440\u0435\u0442\u0440\u0430\u0433\u0430 \u0442\u0435\u0440\u043C\u0438\u043D\u0430 [SEARCH_TERM]..."},aa={thanks_to:ra,comments:sa,direction:la,strings:ia};var on={};A(on,{comments:()=>ua,default:()=>fa,direction:()=>ca,strings:()=>_a,thanks_to:()=>oa});var oa="Montazar Al-Jaber ",ua="",ca="ltr",_a={placeholder:"S\xF6k",clear_search:"Rensa",load_more:"Visa fler tr\xE4ffar",search_label:"S\xF6k p\xE5 denna sida",filters_label:"Filter",zero_results:"[SEARCH_TERM] gav inga tr\xE4ffar",many_results:"[SEARCH_TERM] gav [COUNT] tr\xE4ffar",one_result:"[SEARCH_TERM] gav [COUNT] tr\xE4ff",alt_search:"[SEARCH_TERM] gav inga tr\xE4ffar. Visar resultat f\xF6r [DIFFERENT_TERM] ist\xE4llet",search_suggestion:"[SEARCH_TERM] gav inga tr\xE4ffar. F\xF6rs\xF6k igen med en av f\xF6ljande s\xF6kord:",searching:"S\xF6ker efter [SEARCH_TERM]..."},fa={thanks_to:oa,comments:ua,direction:ca,strings:_a};var un={};A(un,{comments:()=>ha,default:()=>ga,direction:()=>ma,strings:()=>pa,thanks_to:()=>da});var da="Anonymous",ha="",ma="ltr",pa={placeholder:"Tafuta",clear_search:"Futa",load_more:"Pakia matokeo zaidi",search_label:"Tafuta tovuti hii",filters_label:"Vichujio",zero_results:"Hakuna matokeo ya [SEARCH_TERM]",many_results:"Matokeo [COUNT] ya [SEARCH_TERM]",one_result:"Tokeo [COUNT] la [SEARCH_TERM]",alt_search:"Hakuna mayokeo ya [SEARCH_TERM]. Badala yake, inaonyesha matokeo ya [DIFFERENT_TERM]",search_suggestion:"Hakuna matokeo ya [SEARCH_TERM]. Jaribu mojawapo ya utafutaji ufuatao:",searching:"Kutafuta [SEARCH_TERM]..."},ga={thanks_to:da,comments:ha,direction:ma,strings:pa};var cn={};A(cn,{comments:()=>Ra,default:()=>Ca,direction:()=>ba,strings:()=>Ta,thanks_to:()=>Ea});var Ea="",Ra="",ba="ltr",Ta={placeholder:"\u0BA4\u0BC7\u0B9F\u0BC1\u0B95",clear_search:"\u0B85\u0BB4\u0BBF\u0B95\u0BCD\u0B95\u0BC1\u0B95",load_more:"\u0BAE\u0BC7\u0BB2\u0BC1\u0BAE\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BC8\u0B95\u0BCD \u0B95\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B95",search_label:"\u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BB3\u0BA4\u0BCD\u0BA4\u0BBF\u0BB2\u0BCD \u0BA4\u0BC7\u0B9F\u0BC1\u0B95",filters_label:"\u0BB5\u0B9F\u0BBF\u0B95\u0B9F\u0BCD\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BCD",zero_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8",many_results:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 [COUNT] \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD",one_result:"[SEARCH_TERM] \u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1",alt_search:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD\u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8, \u0B87\u0BA8\u0BCD\u0BA4 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0B92\u0BA4\u0BCD\u0BA4 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD [DIFFERENT_TERM]",search_suggestion:"[SEARCH_TERM] \u0B87\u0BA4\u0BCD \u0BA4\u0BC7\u0B9F\u0BB2\u0BC1\u0B95\u0BCD\u0B95\u0BBE\u0BA9 \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0BC1\u0B95\u0BB3\u0BCD \u0B87\u0BB2\u0BCD\u0BB2\u0BC8.\u0B87\u0BA4\u0BB1\u0BCD\u0B95\u0BC1 \u0BAA\u0BA4\u0BBF\u0BB2\u0BC0\u0B9F\u0BBE\u0BA9 \u0BA4\u0BC7\u0B9F\u0BB2\u0BCD\u0B95\u0BB3\u0BC8 \u0BA4\u0BC7\u0B9F\u0BC1\u0B95:",searching:"[SEARCH_TERM] \u0BA4\u0BC7\u0B9F\u0BAA\u0BCD\u0BAA\u0B9F\u0BC1\u0B95\u0BBF\u0BA9\u0BCD\u0BB1\u0BA4\u0BC1"},Ca={thanks_to:Ea,comments:Ra,direction:ba,strings:Ta};var _n={};A(_n,{comments:()=>Sa,default:()=>ya,direction:()=>Ma,strings:()=>Aa,thanks_to:()=>ka});var ka="Patiphon Loetsuthakun ",Sa="",Ma="ltr",Aa={placeholder:"\u0E04\u0E49\u0E19\u0E2B\u0E32",clear_search:"\u0E25\u0E49\u0E32\u0E07",load_more:"\u0E42\u0E2B\u0E25\u0E14\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E40\u0E15\u0E34\u0E21",search_label:"\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E1A\u0E19\u0E40\u0E27\u0E47\u0E1A\u0E44\u0E0B\u0E15\u0E4C",filters_label:"\u0E15\u0E31\u0E27\u0E01\u0E23\u0E2D\u0E07",zero_results:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",many_results:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",one_result:"\u0E1E\u0E1A [COUNT] \u0E1C\u0E25\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM]",alt_search:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E41\u0E2A\u0E14\u0E07\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E08\u0E32\u0E01\u0E01\u0E32\u0E23\u0E04\u0E49\u0E19\u0E2B\u0E32 [DIFFERENT_TERM] \u0E41\u0E17\u0E19",search_suggestion:"\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E1C\u0E25\u0E25\u0E31\u0E1E\u0E18\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A [SEARCH_TERM] \u0E25\u0E2D\u0E07\u0E04\u0E33\u0E04\u0E49\u0E19\u0E2B\u0E32\u0E40\u0E2B\u0E25\u0E48\u0E32\u0E19\u0E35\u0E49\u0E41\u0E17\u0E19:",searching:"\u0E01\u0E33\u0E25\u0E31\u0E07\u0E04\u0E49\u0E19\u0E2B\u0E32 [SEARCH_TERM]..."},ya={thanks_to:ka,comments:Sa,direction:Ma,strings:Aa};var fn={};A(fn,{comments:()=>Ha,default:()=>Na,direction:()=>wa,strings:()=>Fa,thanks_to:()=>va});var va="Taylan \xD6zg\xFCr Bildik",Ha="",wa="ltr",Fa={placeholder:"Ara\u015Ft\u0131r",clear_search:"Temizle",load_more:"Daha fazla sonu\xE7",search_label:"Site genelinde arama",filters_label:"Filtreler",zero_results:"[SEARCH_TERM] i\xE7in sonu\xE7 yok",many_results:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",one_result:"[SEARCH_TERM] i\xE7in [COUNT] sonu\xE7 bulundu",alt_search:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Bunun yerine [DIFFERENT_TERM] i\xE7in sonu\xE7lar g\xF6steriliyor",search_suggestion:"[SEARCH_TERM] i\xE7in sonu\xE7 yok. Alternatif olarak a\u015Fa\u011F\u0131daki kelimelerden birini deneyebilirsiniz:",searching:"[SEARCH_TERM] ara\u015Ft\u0131r\u0131l\u0131yor..."},Na={thanks_to:va,comments:Ha,direction:wa,strings:Fa};var dn={};A(dn,{comments:()=>Oa,default:()=>Da,direction:()=>ja,strings:()=>Ua,thanks_to:()=>za});var za="Vladyslav Lyshenko ",Oa="",ja="ltr",Ua={placeholder:"\u041F\u043E\u0448\u0443\u043A",clear_search:"\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u043F\u043E\u043B\u0435",load_more:"\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0449\u0435",search_label:"\u041F\u043E\u0448\u0443\u043A \u043F\u043E \u0441\u0430\u0439\u0442\u0443",filters_label:"\u0424\u0456\u043B\u044C\u0442\u0440\u0438",zero_results:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",many_results:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]",one_result:"[COUNT] \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]",alt_search:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u041F\u043E\u043A\u0430\u0437\u0430\u043D\u043E \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0438 \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [DIFFERENT_TERM]",search_suggestion:"\u041D\u0456\u0447\u043E\u0433\u043E \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430 \u0437\u0430\u043F\u0438\u0442: [SEARCH_TERM]. \u0421\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u043E\u0434\u0438\u043D \u0456\u0437 \u0442\u0430\u043A\u0438\u0445 \u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456\u0432",searching:"\u041F\u043E\u0448\u0443\u043A \u0437\u0430 \u0437\u0430\u043F\u0438\u0442\u043E\u043C: [SEARCH_TERM]"},Da={thanks_to:za,comments:Oa,direction:ja,strings:Ua};var hn={};A(hn,{comments:()=>Pa,default:()=>Ba,direction:()=>La,strings:()=>qa,thanks_to:()=>Ia});var Ia="Long Nhat Nguyen",Pa="",La="ltr",qa={placeholder:"T\xECm ki\u1EBFm",clear_search:"X\xF3a",load_more:"Nhi\u1EC1u k\u1EBFt qu\u1EA3 h\u01A1n",search_label:"T\xECm ki\u1EBFm trong trang n\xE0y",filters_label:"B\u1ED9 l\u1ECDc",zero_results:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",many_results:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",one_result:"[COUNT] k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]",alt_search:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Ki\u1EC3m th\u1ECB k\u1EBFt qu\u1EA3 thay th\u1EBF v\u1EDBi [DIFFERENT_TERM]",search_suggestion:"Kh\xF4ng t\xECm th\u1EA5y k\u1EBFt qu\u1EA3 cho [SEARCH_TERM]. Th\u1EED m\u1ED9t trong c\xE1c t\xECm ki\u1EBFm:",searching:"\u0110ang t\xECm ki\u1EBFm cho [SEARCH_TERM]..."},Ba={thanks_to:Ia,comments:Pa,direction:La,strings:qa};var mn={};A(mn,{comments:()=>Wa,default:()=>Ja,direction:()=>Ka,strings:()=>Ga,thanks_to:()=>Va});var Va="Amber Song",Wa="",Ka="ltr",Ga={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},Ja={thanks_to:Va,comments:Wa,direction:Ka,strings:Ga};var pn={};A(pn,{comments:()=>Za,default:()=>xa,direction:()=>Xa,strings:()=>Qa,thanks_to:()=>Ya});var Ya="Amber Song",Za="",Xa="ltr",Qa={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F09\u66F4\u591A\u7D50\u679C",search_label:"\u7AD9\u5167\u641C\u7D22",filters_label:"\u7BE9\u9078",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",many_results:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",one_result:"\u627E\u5230 [COUNT] \u500B [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u6539\u70BA\u986F\u793A [DIFFERENT_TERM] \u7684\u76F8\u95DC\u7D50\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u95DC\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},xa={thanks_to:Ya,comments:Za,direction:Xa,strings:Qa};var gn={};A(gn,{comments:()=>eo,default:()=>ro,direction:()=>to,strings:()=>no,thanks_to:()=>$a});var $a="Amber Song",eo="",to="ltr",no={placeholder:"\u641C\u7D22",clear_search:"\u6E05\u9664",load_more:"\u52A0\u8F7D\u66F4\u591A\u7ED3\u679C",search_label:"\u7AD9\u5185\u641C\u7D22",filters_label:"\u7B5B\u9009",zero_results:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",many_results:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",one_result:"\u627E\u5230 [COUNT] \u4E2A [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C",alt_search:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u6539\u4E3A\u663E\u793A [DIFFERENT_TERM] \u7684\u76F8\u5173\u7ED3\u679C",search_suggestion:"\u672A\u627E\u5230 [SEARCH_TERM] \u7684\u76F8\u5173\u7ED3\u679C\u3002\u8BF7\u5C1D\u8BD5\u4EE5\u4E0B\u641C\u7D22\u3002",searching:"\u6B63\u5728\u641C\u7D22 [SEARCH_TERM]..."},ro={thanks_to:$a,comments:eo,direction:to,strings:no};var so=[vt,Ht,wt,Ft,Nt,zt,Ot,jt,Ut,Dt,It,Pt,Lt,qt,Bt,Vt,Wt,Kt,Gt,Jt,Yt,Zt,Xt,Qt,xt,$t,en,tn,nn,rn,sn,ln,an,on,un,cn,_n,fn,dn,hn,mn,pn,gn],dr=so,hr=["../../translations/af.json","../../translations/ar.json","../../translations/bn.json","../../translations/ca.json","../../translations/cs.json","../../translations/da.json","../../translations/de.json","../../translations/en.json","../../translations/es.json","../../translations/eu.json","../../translations/fa.json","../../translations/fi.json","../../translations/fr.json","../../translations/gl.json","../../translations/he.json","../../translations/hi.json","../../translations/hr.json","../../translations/hu.json","../../translations/id.json","../../translations/it.json","../../translations/ja.json","../../translations/ko.json","../../translations/mi.json","../../translations/my.json","../../translations/nb.json","../../translations/nl.json","../../translations/nn.json","../../translations/no.json","../../translations/pl.json","../../translations/pt.json","../../translations/ro.json","../../translations/ru.json","../../translations/sr.json","../../translations/sv.json","../../translations/sw.json","../../translations/ta.json","../../translations/th.json","../../translations/tr.json","../../translations/uk.json","../../translations/vi.json","../../translations/zh-cn.json","../../translations/zh-tw.json","../../translations/zh.json"];function mr(n,e,t){let r=n.slice();return r[51]=e[t],r}function pr(n){let e,t,r;function s(i){n[37](i)}let l={show_empty_filters:n[5],open_filters:n[6],available_filters:n[18],translate:n[20],automatic_translations:n[19],translations:n[7]};return n[0]!==void 0&&(l.selected_filters=n[0]),e=new fr({props:l}),le.push(()=>Un(e,"selected_filters",s)),{c(){ut(e.$$.fragment)},m(i,a){me(e,i,a),r=!0},p(i,a){let o={};a[0]&32&&(o.show_empty_filters=i[5]),a[0]&64&&(o.open_filters=i[6]),a[0]&262144&&(o.available_filters=i[18]),a[0]&524288&&(o.automatic_translations=i[19]),a[0]&128&&(o.translations=i[7]),!t&&a[0]&1&&(t=!0,o.selected_filters=i[0],Nn(()=>t=!1)),e.$set(o)},i(i){r||(D(e.$$.fragment,i),r=!0)},o(i){P(e.$$.fragment,i),r=!1},d(i){ue(e,i)}}}function gr(n){let e,t,r,s,l=[ao,io],i=[];function a(o,f){return o[14]?0:1}return t=a(n,[-1,-1]),r=i[t]=l[t](n),{c(){e=C("div"),r.c(),m(e,"class","pagefind-ui__results-area svelte-e9gkc3")},m(o,f){S(o,e,f),i[t].m(e,null),s=!0},p(o,f){let c=t;t=a(o,f),t===c?i[t].p(o,f):(ae(),P(i[c],1,1,()=>{i[c]=null}),oe(),r=i[t],r?r.p(o,f):(r=i[t]=l[t](o),r.c()),D(r,1),r.m(e,null))},i(o){s||(D(r),s=!0)},o(o){P(r),s=!1},d(o){o&&k(e),i[t].d()}}}function io(n){let e,t,r,s=[],l=new Map,i,a,o;function f(_,E){return _[13].results.length===0?co:_[13].results.length===1?uo:oo}let c=f(n,[-1,-1]),d=c(n),p=n[13].results.slice(0,n[17]),h=_=>_[51].id;for(let _=0;_n[17]&&Rr(n);return{c(){e=C("p"),d.c(),t=v(),r=C("ol");for(let _=0;__[17]?u?u.p(_,E):(u=Rr(_),u.c(),u.m(a.parentNode,a)):u&&(u.d(1),u=null)},i(_){if(!o){for(let E=0;E{o[p]=null}),oe(),s=o[r],s?s.p(e,d):(s=o[r]=a[r](e),s.c()),D(s,1),s.m(l.parentNode,l))},i(c){i||(D(s),i=!0)},o(c){P(s),i=!1},d(c){c&&k(t),o[r].d(c),c&&k(l)}}}function Rr(n){let e,t=n[20]("load_more",n[19],n[7])+"",r,s,l;return{c(){e=C("button"),r=w(t),m(e,"type","button"),m(e,"class","pagefind-ui__button svelte-e9gkc3")},m(i,a){S(i,e,a),R(e,r),s||(l=J(e,"click",n[22]),s=!0)},p(i,a){a[0]&524416&&t!==(t=i[20]("load_more",i[19],i[7])+"")&&z(r,t)},d(i){i&&k(e),s=!1,l()}}}function br(n){let e,t=n[20]("searching",n[19],n[7]).replace(/\[SEARCH_TERM\]/,n[16])+"",r;return{c(){e=C("p"),r=w(t),m(e,"class","pagefind-ui__message svelte-e9gkc3")},m(s,l){S(s,e,l),R(e,r)},p(s,l){l[0]&589952&&t!==(t=s[20]("searching",s[19],s[7]).replace(/\[SEARCH_TERM\]/,s[16])+"")&&z(r,t)},d(s){s&&k(e)}}}function ho(n){let e,t,r,s,l,i,a,o=n[20]("clear_search",n[19],n[7])+"",f,c,d,p,h,u,_,E,b=n[12]&&pr(n),T=n[15]&&gr(n);return{c(){e=C("div"),t=C("form"),r=C("input"),i=v(),a=C("button"),f=w(o),c=v(),d=C("div"),b&&b.c(),p=v(),T&&T.c(),m(r,"class","pagefind-ui__search-input svelte-e9gkc3"),m(r,"type","text"),m(r,"placeholder",s=n[20]("placeholder",n[19],n[7])),m(r,"title",l=n[20]("placeholder",n[19],n[7])),m(r,"autocapitalize","none"),m(r,"enterkeyhint","search"),r.autofocus=n[8],m(a,"class","pagefind-ui__search-clear svelte-e9gkc3"),B(a,"pagefind-ui__suppressed",!n[9]),m(d,"class","pagefind-ui__drawer svelte-e9gkc3"),B(d,"pagefind-ui__hidden",!n[15]),m(t,"class","pagefind-ui__form svelte-e9gkc3"),m(t,"role","search"),m(t,"aria-label",h=n[20]("search_label",n[19],n[7])),m(t,"action","javascript:void(0);"),m(e,"class","pagefind-ui svelte-e9gkc3"),B(e,"pagefind-ui--reset",n[1])},m(M,y){S(M,e,y),R(e,t),R(t,r),Tt(r,n[9]),n[34](r),R(t,i),R(t,a),R(a,f),n[35](a),R(t,c),R(t,d),b&&b.m(d,null),R(d,p),T&&T.m(d,null),u=!0,n[8]&&r.focus(),_||(E=[J(r,"focus",n[21]),J(r,"keydown",n[32]),J(r,"input",n[33]),J(a,"click",n[36]),J(t,"submit",mo)],_=!0)},p(M,y){(!u||y[0]&524416&&s!==(s=M[20]("placeholder",M[19],M[7])))&&m(r,"placeholder",s),(!u||y[0]&524416&&l!==(l=M[20]("placeholder",M[19],M[7])))&&m(r,"title",l),(!u||y[0]&256)&&(r.autofocus=M[8]),y[0]&512&&r.value!==M[9]&&Tt(r,M[9]),(!u||y[0]&524416)&&o!==(o=M[20]("clear_search",M[19],M[7])+"")&&z(f,o),(!u||y[0]&512)&&B(a,"pagefind-ui__suppressed",!M[9]),M[12]?b?(b.p(M,y),y[0]&4096&&D(b,1)):(b=pr(M),b.c(),D(b,1),b.m(d,p)):b&&(ae(),P(b,1,1,()=>{b=null}),oe()),M[15]?T?(T.p(M,y),y[0]&32768&&D(T,1)):(T=gr(M),T.c(),D(T,1),T.m(d,null)):T&&(ae(),P(T,1,1,()=>{T=null}),oe()),(!u||y[0]&32768)&&B(d,"pagefind-ui__hidden",!M[15]),(!u||y[0]&524416&&h!==(h=M[20]("search_label",M[19],M[7])))&&m(t,"aria-label",h),(!u||y[0]&2)&&B(e,"pagefind-ui--reset",M[1])},i(M){u||(D(b),D(T),u=!0)},o(M){P(b),P(T),u=!1},d(M){M&&k(e),n[34](null),n[35](null),b&&b.d(),T&&T.d(),_=!1,K(E)}}}var mo=n=>n.preventDefault();function po(n,e,t){let r={},s=hr.map(g=>g.match(/([^\/]+)\.json$/)[1]);for(let g=0;gj[g]??N[g]??"";Ct(()=>{let g=document?.querySelector?.("html")?.getAttribute?.("lang")||"en",N=ct(g.toLocaleLowerCase());t(19,Sn=r[`${N.language}-${N.script}-${N.region}`]||r[`${N.language}-${N.region}`]||r[`${N.language}`]||r.en)}),kt(()=>{F?.destroy?.(),F=null});let Mn=async()=>{if(!ft&&(t(12,ft=!0),!F)){let g;try{g=await import(`${l}pagefind.js`)}catch(j){console.error(j),console.error([`Pagefind couldn't be loaded from ${this.options.bundlePath}pagefind.js`,"You can configure this by passing a bundlePath option to PagefindUI"].join(` +`)),document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?console.error(`[DEBUG: Loaded from ${document.currentScript.src??"bad script location"}]`):console.error("no known script location")}c||t(24,c=f?12:30);let N={...E||{},excerptLength:c};await g.options(N);for(let j of b){if(!j.bundlePath)throw new Error("mergeIndex requires a bundlePath parameter");let L=j.bundlePath;delete j.bundlePath,await g.mergeIndex(L,j)}F=g,Sr()}},Sr=async()=>{F&&(kn=await F.filters(),(!ce||!Object.keys(ce).length)&&t(18,ce=kn))},Mr=g=>{let N={};return Object.entries(g).filter(([,j])=>j).forEach(([j])=>{let[L,te]=j.split(/:(.*)$/);N[L]=N[L]||[],N[L].push(te)}),N},_e,Ar=async(g,N)=>{if(!g){t(15,ht=!1),_e&&clearTimeout(_e);return}let j=Mr(N),L=()=>yr(g,j);_>0&&g?(_e&&clearTimeout(_e),_e=setTimeout(L,_),await An(),F.preload(g,{filters:j})):L(),vr()},An=async()=>{for(;!F;)Mn(),await new Promise(g=>setTimeout(g,50))},yr=async(g,N)=>{t(16,Cn=g||""),typeof p=="function"&&(g=p(g)),t(14,dt=!0),t(15,ht=!0),await An();let j=++Tn,L={filters:N};X&&typeof X=="object"&&(L.sort=X);let te=await F.search(g,L);Tn===j&&(te.filters&&Object.keys(te.filters)?.length&&t(18,ce=te.filters),t(13,bn=te),t(14,dt=!1),t(17,mt=i))},vr=()=>{let g=W.offsetWidth;g!=Cr&&t(10,O.style.paddingRight=`${g+2}px`,O)},Hr=g=>{g?.preventDefault(),t(17,mt+=i)},wr=g=>{g.key==="Escape"&&(t(9,H=""),O.blur()),g.key==="Enter"&&g.preventDefault()};function Fr(){H=this.value,t(9,H),t(23,T)}function Nr(g){le[g?"unshift":"push"](()=>{O=g,t(10,O)})}function zr(g){le[g?"unshift":"push"](()=>{W=g,t(11,W)})}let Or=()=>{t(9,H=""),O.blur()};function jr(g){V=g,t(0,V)}return n.$$set=g=>{"base_path"in g&&t(25,l=g.base_path),"page_size"in g&&t(26,i=g.page_size),"reset_styles"in g&&t(1,a=g.reset_styles),"show_images"in g&&t(2,o=g.show_images),"show_sub_results"in g&&t(3,f=g.show_sub_results),"excerpt_length"in g&&t(24,c=g.excerpt_length),"process_result"in g&&t(4,d=g.process_result),"process_term"in g&&t(27,p=g.process_term),"show_empty_filters"in g&&t(5,h=g.show_empty_filters),"open_filters"in g&&t(6,u=g.open_filters),"debounce_timeout_ms"in g&&t(28,_=g.debounce_timeout_ms),"pagefind_options"in g&&t(29,E=g.pagefind_options),"merge_index"in g&&t(30,b=g.merge_index),"trigger_search_term"in g&&t(23,T=g.trigger_search_term),"translations"in g&&t(7,M=g.translations),"autofocus"in g&&t(8,y=g.autofocus),"sort"in g&&t(31,X=g.sort),"selected_filters"in g&&t(0,V=g.selected_filters)},n.$$.update=()=>{if(n.$$.dirty[0]&8388608)e:T&&(t(9,H=T),t(23,T=""));if(n.$$.dirty[0]&513)e:Ar(H,V)},[V,a,o,f,d,h,u,M,y,H,O,W,ft,bn,dt,ht,Cn,mt,ce,Sn,kr,Mn,Hr,T,c,l,i,p,_,E,b,X,wr,Fr,Nr,zr,Or,jr]}var En=class extends q{constructor(e){super(),Y(this,e,po,ho,G,{base_path:25,page_size:26,reset_styles:1,show_images:2,show_sub_results:3,excerpt_length:24,process_result:4,process_term:27,show_empty_filters:5,open_filters:6,debounce_timeout_ms:28,pagefind_options:29,merge_index:30,trigger_search_term:23,translations:7,autofocus:8,sort:31,selected_filters:0},null,[-1,-1])}},Tr=En;var Rn;try{document?.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"&&(Rn=new URL(document.currentScript.src).pathname.match(/^(.*\/)(?:pagefind-)?ui.js.*$/)[1])}catch{Rn="/pagefind/"}var _t=class{constructor(e){this._pfs=null;let t=e.element??"[data-pagefind-ui]",r=e.bundlePath??Rn,s=e.pageSize??5,l=e.resetStyles??!0,i=e.showImages??!0,a=e.showSubResults??!1,o=e.excerptLength??0,f=e.processResult??null,c=e.processTerm??null,d=e.showEmptyFilters??!0,p=e.openFilters??[],h=e.debounceTimeoutMs??300,u=e.mergeIndex??[],_=e.translations??[],E=e.autofocus??!1,b=e.sort??null;delete e.element,delete e.bundlePath,delete e.pageSize,delete e.resetStyles,delete e.showImages,delete e.showSubResults,delete e.excerptLength,delete e.processResult,delete e.processTerm,delete e.showEmptyFilters,delete e.openFilters,delete e.debounceTimeoutMs,delete e.mergeIndex,delete e.translations,delete e.autofocus,delete e.sort;let T=t instanceof HTMLElement?t:document.querySelector(t);T?this._pfs=new Tr({target:T,props:{base_path:r,page_size:s,reset_styles:l,show_images:i,show_sub_results:a,excerpt_length:o,process_result:f,process_term:c,show_empty_filters:d,open_filters:p,debounce_timeout_ms:h,merge_index:u,translations:_,autofocus:E,sort:b,pagefind_options:e}}):console.error(`Pagefind UI couldn't find the selector ${t}`)}triggerSearch(e){this._pfs.$$set({trigger_search_term:e})}triggerFilters(e){let t={};for(let[r,s]of Object.entries(e))if(Array.isArray(s))for(let l of s)t[`${r}:${l}`]=!0;else t[`${r}:${s}`]=!0;this._pfs.$$set({selected_filters:t})}destroy(){this._pfs.$destroy()}};window.PagefindUI=_t;})(); diff --git a/_pagefind/pagefind.en_3a80c79c47.pf_meta b/_pagefind/pagefind.en_3a80c79c47.pf_meta new file mode 100644 index 0000000000000000000000000000000000000000..53fdd06607c8886fb0db9af97194d69a31d9f4ec GIT binary patch literal 238 zcmV z6%f+}DQ(aQ2^riSYs1fy=lu8mn)qgm3l4lEw}~73{&Gv(#bc@&s!?ac1kf^qQC5h# zfbV2Zo`f#D>bf=RLO7cDmV*ACmqw`UyZ#eVs^n8Q>T~`a4Vc!Mb0KhCz0Q!ZrC1tg zqlz$tW5}p~MAc$&?2I}U25hYW8Fe{>2};UQ|B7Oa>+U+U%%qUV2t)5?gUiuFG3x4A oUpTN)Uo*G|7>V`A^J};Gc(;2vymI&6Ioj|40j*WEd_e&K04!p2S^xk5 literal 0 HcmV?d00001 diff --git a/_pagefind/pagefind.js b/_pagefind/pagefind.js new file mode 100644 index 00000000..54e2f7cc --- /dev/null +++ b/_pagefind/pagefind.js @@ -0,0 +1,6 @@ +const pagefind_version="1.4.0";let wasm_bindgen;(function(){const __exports={};let script_src;if(typeof document!=='undefined'&&document.currentScript!==null){script_src=new URL("UNHANDLED",location.href).toString()}let wasm=undefined;let WASM_VECTOR_LEN=0;let cachedUint8Memory0=null;function getUint8Memory0(){if(cachedUint8Memory0===null||cachedUint8Memory0.byteLength===0){cachedUint8Memory0=new Uint8Array(wasm.memory.buffer)}return cachedUint8Memory0}const cachedTextEncoder=(typeof TextEncoder!=='undefined'?new TextEncoder('utf-8'):{encode:()=>{throw Error('TextEncoder not available')}});const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view)}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length}});function passStringToWasm0(arg,malloc,realloc){if(realloc===undefined){const buf=cachedTextEncoder.encode(arg);const ptr=malloc(buf.length,1)>>>0;getUint8Memory0().subarray(ptr,ptr+buf.length).set(buf);WASM_VECTOR_LEN=buf.length;return ptr}let len=arg.length;let ptr=malloc(len,1)>>>0;const mem=getUint8Memory0();let offset=0;for(;offset0x7F)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=realloc(ptr,len,len=offset+arg.length*3,1)>>>0;const view=getUint8Memory0().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written;ptr=realloc(ptr,len,offset,1)>>>0}WASM_VECTOR_LEN=offset;return ptr}let cachedInt32Memory0=null;function getInt32Memory0(){if(cachedInt32Memory0===null||cachedInt32Memory0.byteLength===0){cachedInt32Memory0=new Int32Array(wasm.memory.buffer)}return cachedInt32Memory0}const cachedTextDecoder=(typeof TextDecoder!=='undefined'?new TextDecoder('utf-8',{ignoreBOM:true,fatal:true}):{decode:()=>{throw Error('TextDecoder not available')}});if(typeof TextDecoder!=='undefined'){cachedTextDecoder.decode()};function getStringFromWasm0(ptr,len){ptr=ptr>>>0;return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr,ptr+len))}__exports.request_indexes=function(ptr,query){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.filters=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.filters(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};__exports.request_filter_indexes=function(ptr,filters){let deferred2_0;let deferred2_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(filters,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;wasm.request_filter_indexes(retptr,ptr,ptr0,len0);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred2_0=r0;deferred2_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred2_0,deferred2_1,1)}};__exports.enter_playground_mode=function(ptr){const ret=wasm.enter_playground_mode(ptr);return ret>>>0};__exports.request_all_filter_indexes=function(ptr){let deferred1_0;let deferred1_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);wasm.request_all_filter_indexes(retptr,ptr);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred1_0=r0;deferred1_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred1_0,deferred1_1,1)}};function passArray8ToWasm0(arg,malloc){const ptr=malloc(arg.length*1,1)>>>0;getUint8Memory0().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr}__exports.init_pagefind=function(metadata_bytes){const ptr0=passArray8ToWasm0(metadata_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.init_pagefind(ptr0,len0);return ret>>>0};__exports.search=function(ptr,query,filter,sort,exact){let deferred4_0;let deferred4_1;try{const retptr=wasm.__wbindgen_add_to_stack_pointer(-16);const ptr0=passStringToWasm0(query,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ptr1=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len1=WASM_VECTOR_LEN;const ptr2=passStringToWasm0(sort,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len2=WASM_VECTOR_LEN;wasm.search(retptr,ptr,ptr0,len0,ptr1,len1,ptr2,len2,exact);var r0=getInt32Memory0()[retptr/4+0];var r1=getInt32Memory0()[retptr/4+1];deferred4_0=r0;deferred4_1=r1;return getStringFromWasm0(r0,r1)}finally{wasm.__wbindgen_add_to_stack_pointer(16);wasm.__wbindgen_free(deferred4_0,deferred4_1,1)}};__exports.load_index_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_index_chunk(ptr,ptr0,len0);return ret>>>0};__exports.add_synthetic_filter=function(ptr,filter){const ptr0=passStringToWasm0(filter,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.add_synthetic_filter(ptr,ptr0,len0);return ret>>>0};__exports.set_ranking_weights=function(ptr,weights){const ptr0=passStringToWasm0(weights,wasm.__wbindgen_malloc,wasm.__wbindgen_realloc);const len0=WASM_VECTOR_LEN;const ret=wasm.set_ranking_weights(ptr,ptr0,len0);return ret>>>0};__exports.load_filter_chunk=function(ptr,chunk_bytes){const ptr0=passArray8ToWasm0(chunk_bytes,wasm.__wbindgen_malloc);const len0=WASM_VECTOR_LEN;const ret=wasm.load_filter_chunk(ptr,ptr0,len0);return ret>>>0};async function __wbg_load(module,imports){if(typeof Response==='function'&&module instanceof Response){if(typeof WebAssembly.instantiateStreaming==='function'){try{return await WebAssembly.instantiateStreaming(module,imports)}catch(e){if(module.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}else{throw e}}}const bytes=await module.arrayBuffer();return await WebAssembly.instantiate(bytes,imports)}else{const instance=await WebAssembly.instantiate(module,imports);if(instance instanceof WebAssembly.Instance){return{instance,module}}else{return instance}}}function __wbg_get_imports(){const imports={};imports.wbg={};return imports}function __wbg_init_memory(imports,maybe_memory){}function __wbg_finalize_init(instance,module){wasm=instance.exports;__wbg_init.__wbindgen_wasm_module=module;cachedInt32Memory0=null;cachedUint8Memory0=null;return wasm}function initSync(module){if(wasm!==undefined)return wasm;const imports=__wbg_get_imports();__wbg_init_memory(imports);if(!(module instanceof WebAssembly.Module)){module=new WebAssembly.Module(module)}const instance=new WebAssembly.Instance(module,imports);return __wbg_finalize_init(instance,module)}async function __wbg_init(input){if(wasm!==undefined)return wasm;if(typeof input==='undefined'&&typeof script_src!=='undefined'){input=script_src.replace(/\.js$/,'_bg.wasm')}const imports=__wbg_get_imports();if(typeof input==='string'||(typeof Request==='function'&&input instanceof Request)||(typeof URL==='function'&&input instanceof URL)){input=fetch(input)}__wbg_init_memory(imports);const{instance,module}=await __wbg_load(await input,imports);return __wbg_finalize_init(instance,module)}wasm_bindgen=Object.assign(__wbg_init,{initSync},__exports)})();var u8=Uint8Array;var u16=Uint16Array;var u32=Uint32Array;var fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);var fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);var clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var freb=function(eb,start){var b=new u16(31);for(var i2=0;i2<31;++i2){b[i2]=start+=1<>>1|(i&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2;x=(x&61680)>>>4|(x&3855)<<4;rev[i]=((x&65280)>>>8|(x&255)<<8)>>>1}var x;var i;var hMap=function(cd,mb,r){var s=cd.length;var i2=0;var l=new u16(mb);for(;i2>>rvb]=sv}}}}else{co=new u16(s);for(i2=0;i2>>15-cd[i2]}}}return co};var flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;var i;for(i=144;i<256;++i)flt[i]=9;var i;for(i=256;i<280;++i)flt[i]=7;var i;for(i=280;i<288;++i)flt[i]=8;var i;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var i;var flrm=hMap(flt,9,1);var fdrm=hMap(fdt,5,1);var max=function(a){var m=a[0];for(var i2=1;i2m)m=a[i2]}return m};var bits=function(d,p,m){var o=p/8|0;return(d[o]|d[o+1]<<8)>>(p&7)&m};var bits16=function(d,p){var o=p/8|0;return(d[o]|d[o+1]<<8|d[o+2]<<16)>>(p&7)};var shft=function(p){return(p+7)/8|0};var slc=function(v,s,e){if(s==null||s<0)s=0;if(e==null||e>v.length)e=v.length;var n=new(v.BYTES_PER_ELEMENT==2?u16:v.BYTES_PER_ELEMENT==4?u32:u8)(e-s);n.set(v.subarray(s,e));return n};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];var err=function(ind,msg,nt){var e=new Error(msg||ec[ind]);e.code=ind;if(Error.captureStackTrace)Error.captureStackTrace(e,err);if(!nt)throw e;return e};var inflt=function(dat,buf,st){var sl=dat.length;if(!sl||st&&st.f&&!st.l)return buf||new u8(0);var noBuf=!buf||st;var noSt=!st||st.i;if(!st)st={};if(!buf)buf=new u8(sl*3);var cbuf=function(l2){var bl=buf.length;if(l2>bl){var nbuf=new u8(Math.max(bl*2,l2));nbuf.set(buf);buf=nbuf}};var final=st.f||0,pos=st.p||0,bt=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;var tbts=sl*8;do{if(!lm){final=bits(dat,pos,1);var type=bits(dat,pos+1,3);pos+=3;if(!type){var s=shft(pos)+4,l=dat[s-4]|dat[s-3]<<8,t=s+l;if(t>sl){if(noSt)err(0);break}if(noBuf)cbuf(bt+l);buf.set(dat.subarray(s,t),bt);st.b=bt+=l,st.p=pos=t*8,st.f=final;continue}else if(type==1)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(type==2){var hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;var tl=hLit+bits(dat,pos+5,31)+1;pos+=14;var ldt=new u8(tl);var clt=new u8(19);for(var i2=0;i2>>4;if(s<16){ldt[i2++]=s}else{var c=0,n=0;if(s==16)n=3+bits(dat,pos,3),pos+=2,c=ldt[i2-1];else if(s==17)n=3+bits(dat,pos,7),pos+=3;else if(s==18)n=11+bits(dat,pos,127),pos+=7;while(n--)ldt[i2++]=c}}var lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err(1);if(pos>tbts){if(noSt)err(0);break}}if(noBuf)cbuf(bt+131072);var lms=(1<>>4;pos+=c&15;if(pos>tbts){if(noSt)err(0);break}if(!c)err(2);if(sym<256)buf[bt++]=sym;else if(sym==256){lpos=pos,lm=null;break}else{var add=sym-254;if(sym>264){var i2=sym-257,b=fleb[i2];add=bits(dat,pos,(1<>>4;if(!d)err(3);pos+=d&15;var dt=fd[dsym];if(dsym>3){var b=fdeb[dsym];dt+=bits16(dat,pos)&(1<tbts){if(noSt)err(0);break}if(noBuf)cbuf(bt+131072);var end=bt+add;for(;bt>3&1)+(flg>>4&1);zs>0;zs-=!d[st++]);return st+(flg&2)};var gzl=function(d){var l=d.length;return(d[l-4]|d[l-3]<<8|d[l-2]<<16|d[l-1]<<24)>>>0};function gunzipSync(data,out){return inflt(data.subarray(gzs(data),-8),out||new u8(gzl(data)))}var td=typeof TextDecoder!="undefined"&&new TextDecoder();var tds=0;try{td.decode(et,{stream:true});tds=1}catch(e){}var gz_default=gunzipSync;var calculate_excerpt_region=(word_positions,excerpt_length)=>{if(word_positions.length===0){return 0}let words=[];for(const word of word_positions){words[word.location]=words[word.location]||0;words[word.location]+=word.balanced_score}if(words.length<=excerpt_length){return 0}let densest=words.slice(0,excerpt_length).reduce((partialSum,a)=>partialSum+a,0);let working_sum=densest;let densest_at=[0];for(let i2=0;i2densest){densest=working_sum;densest_at=[i2]}else if(working_sum===densest&&densest_at[densest_at.length-1]===i2-1){densest_at.push(i2)}}let midpoint=densest_at[Math.floor(densest_at.length/2)];return midpoint};var build_excerpt=(content,start,length,locations,not_before,not_from)=>{let is_zws_delimited=content.includes("\u200B");let fragment_words=[];if(is_zws_delimited){fragment_words=content.split("\u200B")}else{fragment_words=content.split(/[\r\n\s]+/g)}for(let word of locations){if(fragment_words[word]?.startsWith(``)){continue}fragment_words[word]=`${fragment_words[word]}`}let endcap=not_from??fragment_words.length;let startcap=not_before??0;if(endcap-startcapendcap){start=endcap-length}if(start{const anchors=fragment.anchors.filter((a)=>/h\d/i.test(a.element)&&a.text?.length&&/\S/.test(a.text)).sort((a,b)=>a.location-b.location);const results=[];let current_anchor_position=0;let current_anchor={title:fragment.meta["title"],url:fragment.url,weighted_locations:[],locations:[],excerpt:""};const add_result=(end_range)=>{if(current_anchor.locations.length){const relative_weighted_locations=current_anchor.weighted_locations.map((l)=>{return{weight:l.weight,balanced_score:l.balanced_score,location:l.location-current_anchor_position}});const excerpt_start=calculate_excerpt_region(relative_weighted_locations,desired_excerpt_length)+current_anchor_position;const excerpt_length=end_range?Math.min(end_range-excerpt_start,desired_excerpt_length):desired_excerpt_length;current_anchor.excerpt=build_excerpt(fragment.raw_content??"",excerpt_start,excerpt_length,current_anchor.locations,current_anchor_position,end_range);results.push(current_anchor)}};for(let word of fragment.weighted_locations){if(!anchors.length||word.location=anchors[0].location){next_anchor=anchors.shift()}let anchored_url=fragment.url;try{const url_is_fq=/^((https?:)?\/\/)/.test(anchored_url);if(url_is_fq){let fq_url=new URL(anchored_url);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString()}else{if(!/^\//.test(anchored_url)){anchored_url=`/${anchored_url}`}let fq_url=new URL(`https://example.com${anchored_url}`);fq_url.hash=next_anchor.id;anchored_url=fq_url.toString().replace(/^https:\/\/example.com/,"")}}catch(e){console.error(`Pagefind: Couldn't process ${anchored_url} for a search result`)}current_anchor_position=next_anchor.location;current_anchor={title:next_anchor.text,url:anchored_url,anchor:next_anchor,weighted_locations:[word],locations:[word.location],excerpt:""}}}add_result(anchors[0]?.location);return results};var asyncSleep=async(ms=100)=>{return new Promise((r)=>setTimeout(r,ms))};var isBrowser=typeof window!=="undefined"&&typeof document!=="undefined";var PagefindInstance=class{constructor(opts={}){this.version=pagefind_version;this.backend=wasm_bindgen;this.decoder=new TextDecoder("utf-8");this.wasm=null;this.basePath=opts.basePath||"/pagefind/";this.primary=opts.primary||false;if(this.primary&&!opts.basePath){this.initPrimary()}if(/[^\/]$/.test(this.basePath)){this.basePath=`${this.basePath}/`}if(isBrowser&&window?.location?.origin&&this.basePath.startsWith(window.location.origin)){this.basePath=this.basePath.replace(window.location.origin,"")}this.baseUrl=opts.baseUrl||this.defaultBaseUrl();if(!/^(\/|https?:\/\/)/.test(this.baseUrl)){this.baseUrl=`/${this.baseUrl}`}this.indexWeight=opts.indexWeight??1;this.excerptLength=opts.excerptLength??30;this.mergeFilter=opts.mergeFilter??{};this.ranking=opts.ranking;this.highlightParam=opts.highlightParam??null;this.loaded_chunks={};this.loaded_filters={};this.loaded_fragments={};this.raw_ptr=null;this.searchMeta=null;this.languages=null}initPrimary(){if(isBrowser&&typeof import.meta.url!=="undefined"){let derivedBasePath=import.meta.url.match(/^(.*\/)pagefind.js.*$/)?.[1];if(derivedBasePath){this.basePath=derivedBasePath}else{console.warn(["Pagefind couldn't determine the base of the bundle from the import path. Falling back to the default.","Set a basePath option when initialising Pagefind to ignore this message."].join("\n"))}}}defaultBaseUrl(){let default_base=this.basePath.match(/^(.*\/)_?pagefind/)?.[1];return default_base||"/"}async options(options2){const opts=["basePath","baseUrl","indexWeight","excerptLength","mergeFilter","highlightParam","ranking"];for(const[k,v]of Object.entries(options2)){if(k==="mergeFilter"){let filters2=this.stringifyFilters(v);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}else if(k==="ranking"){await this.set_ranking(options2.ranking)}else if(opts.includes(k)){if(k==="basePath"&&typeof v==="string")this.basePath=v;if(k==="baseUrl"&&typeof v==="string")this.baseUrl=v;if(k==="indexWeight"&&typeof v==="number")this.indexWeight=v;if(k==="excerptLength"&&typeof v==="number")this.excerptLength=v;if(k==="mergeFilter"&&typeof v==="object")this.mergeFilter=v;if(k==="highlightParam"&&typeof v==="string")this.highlightParam=v}else{console.warn(`Unknown Pagefind option ${k}. Allowed options: [${opts.join(", ")}]`)}}}async enterPlaygroundMode(){let ptr=await this.getPtr();this.raw_ptr=this.backend.enter_playground_mode(ptr)}decompress(data,file="unknown file"){if(this.decoder.decode(data.slice(0,12))==="pagefind_dcd"){return data.slice(12)}data=gz_default(data);if(this.decoder.decode(data.slice(0,12))!=="pagefind_dcd"){console.error(`Decompressing ${file} appears to have failed: Missing signature`);return data}return data.slice(12)}async set_ranking(ranking){if(!ranking)return;let rankingWeights={term_similarity:ranking.termSimilarity??null,page_length:ranking.pageLength??null,term_saturation:ranking.termSaturation??null,term_frequency:ranking.termFrequency??null};let ptr=await this.getPtr();this.raw_ptr=this.backend.set_ranking_weights(ptr,JSON.stringify(rankingWeights))}async init(language,opts){await this.loadEntry();let index=this.findIndex(language);let lang_wasm=index.wasm?index.wasm:"unknown";this.loadedLanguage=language;let resources=[this.loadMeta(index.hash)];if(opts.load_wasm===true){resources.push(this.loadWasm(lang_wasm))}await Promise.all(resources);this.raw_ptr=this.backend.init_pagefind(new Uint8Array(this.searchMeta));if(Object.keys(this.mergeFilter)?.length){let filters2=this.stringifyFilters(this.mergeFilter);let ptr=await this.getPtr();this.raw_ptr=this.backend.add_synthetic_filter(ptr,filters2)}if(this.ranking){await this.set_ranking(this.ranking)}}async loadEntry(){try{let entry_response=await fetch(`${this.basePath}pagefind-entry.json?ts=${Date.now()}`);let entry_json=await entry_response.json();this.languages=entry_json.languages;this.loadedVersion=entry_json.version;this.includeCharacters=entry_json.include_characters??[];if(entry_json.version!==this.version){if(this.primary){console.warn(["Pagefind JS version doesn't match the version in your search index.",`Pagefind JS: ${this.version}. Pagefind index: ${entry_json.version}`,"If you upgraded Pagefind recently, you likely have a cached pagefind.js file.","If you encounter any search errors, try clearing your cache."].join("\n"))}else{console.warn(["Merging a Pagefind index from a different version than the main Pagefind instance.",`Main Pagefind JS: ${this.version}. Merged index (${this.basePath}): ${entry_json.version}`,"If you encounter any search errors, make sure that both sites are running the same version of Pagefind."].join("\n"))}}}catch(e){console.error(`Failed to load Pagefind metadata: +${e?.toString()}`);throw new Error("Failed to load Pagefind metadata")}}findIndex(language){if(this.languages){let index=this.languages[language];if(index)return index;index=this.languages[language.split("-")[0]];if(index)return index;let topLang=Object.values(this.languages).sort((a,b)=>b.page_count-a.page_count);if(topLang[0])return topLang[0]}throw new Error("Pagefind Error: No language indexes found.")}async loadMeta(index){try{let compressed_resp=await fetch(`${this.basePath}pagefind.${index}.pf_meta`);let compressed_meta=await compressed_resp.arrayBuffer();this.searchMeta=this.decompress(new Uint8Array(compressed_meta),"Pagefind metadata")}catch(e){console.error(`Failed to load the meta index: +${e?.toString()}`)}}async loadWasm(language){try{const wasm_url=`${this.basePath}wasm.${language}.pagefind`;let compressed_resp=await fetch(wasm_url);let compressed_wasm=await compressed_resp.arrayBuffer();const final_wasm=this.decompress(new Uint8Array(compressed_wasm),"Pagefind WebAssembly");if(!final_wasm){throw new Error("No WASM after decompression")}this.wasm=await this.backend(final_wasm)}catch(e){console.error(`Failed to load the Pagefind WASM: +${e?.toString()}`);throw new Error(`Failed to load the Pagefind WASM: +${e?.toString()}`)}}async _loadGenericChunk(url,method){try{let compressed_resp=await fetch(url);let compressed_chunk=await compressed_resp.arrayBuffer();let chunk=this.decompress(new Uint8Array(compressed_chunk),url);let ptr=await this.getPtr();this.raw_ptr=this.backend[method](ptr,chunk)}catch(e){console.error(`Failed to load the index chunk ${url}: +${e?.toString()}`)}}async loadChunk(hash){if(!this.loaded_chunks[hash]){const url=`${this.basePath}index/${hash}.pf_index`;this.loaded_chunks[hash]=this._loadGenericChunk(url,"load_index_chunk")}return await this.loaded_chunks[hash]}async loadFilterChunk(hash){if(!this.loaded_filters[hash]){const url=`${this.basePath}filter/${hash}.pf_filter`;this.loaded_filters[hash]=this._loadGenericChunk(url,"load_filter_chunk")}return await this.loaded_filters[hash]}async _loadFragment(hash){let compressed_resp=await fetch(`${this.basePath}fragment/${hash}.pf_fragment`);let compressed_fragment=await compressed_resp.arrayBuffer();let fragment=this.decompress(new Uint8Array(compressed_fragment),`Fragment ${hash}`);return JSON.parse(new TextDecoder().decode(fragment))}async loadFragment(hash,weighted_locations=[],search_term){if(!this.loaded_fragments[hash]){this.loaded_fragments[hash]=this._loadFragment(hash)}let fragment=await this.loaded_fragments[hash];fragment.weighted_locations=weighted_locations;fragment.locations=weighted_locations.map((l)=>l.location);if(!fragment.raw_content){fragment.raw_content=fragment.content.replace(//g,">");fragment.content=fragment.content.replace(/\u200B/g,"")}if(!fragment.raw_url){fragment.raw_url=fragment.url}fragment.url=this.processedUrl(fragment.raw_url,search_term);const excerpt_start=calculate_excerpt_region(weighted_locations,this.excerptLength);fragment.excerpt=build_excerpt(fragment.raw_content,excerpt_start,this.excerptLength,fragment.locations);fragment.sub_results=calculate_sub_results(fragment,this.excerptLength);return fragment}fullUrl(raw){if(/^(https?:)?\/\//.test(raw)){return raw}return`${this.baseUrl}/${raw}`.replace(/\/+/g,"/").replace(/^(https?:\/)/,"$1/")}processedUrl(url,search_term){const normalized=this.fullUrl(url);if(this.highlightParam===null){return normalized}let individual_terms=search_term.split(/\s+/);try{let processed=new URL(normalized);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString()}catch(e){try{let processed=new URL(`https://example.com${normalized}`);for(const term of individual_terms){processed.searchParams.append(this.highlightParam,term)}return processed.toString().replace(/^https:\/\/example\.com/,"")}catch(e2){return normalized}}}async getPtr(){while(this.raw_ptr===null){await asyncSleep(50)}if(!this.raw_ptr){console.error("Pagefind: WASM Error (No pointer)");throw new Error("Pagefind: WASM Error (No pointer)")}return this.raw_ptr}stringifyFilters(obj={}){return JSON.stringify(obj)}stringifySorts(obj={}){let sorts=Object.entries(obj);for(let[sort,direction]of sorts){if(sorts.length>1){console.warn(`Pagefind was provided multiple sort options in this search, but can only operate on one. Using the ${sort} sort.`)}if(direction!=="asc"&&direction!=="desc"){console.warn(`Pagefind was provided a sort with unknown direction ${direction}. Supported: [asc, desc]`)}return`${sort}:${direction}`}return``}async filters(){let ptr=await this.getPtr();let filters2=this.backend.request_all_filter_indexes(ptr);let filter_array=JSON.parse(filters2);if(Array.isArray(filter_array)){let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...filter_chunks])}ptr=await this.getPtr();let results=this.backend.filters(ptr);return JSON.parse(results)}async preload(term,options2={}){await this.search(term,{...options2,preload:true})}async search(term,options2={}){options2={verbose:false,filters:{},sort:{},...options2};const log=(str)=>{if(options2.verbose)console.log(str)};log(`Starting search on ${this.basePath}`);let start=Date.now();let ptr=await this.getPtr();let filter_only=term===null;term=term??"";let exact_search=/^\s*".+"\s*$/.test(term);if(exact_search){log(`Running an exact search`)}let trueLanguage=null;try{trueLanguage=Intl.getCanonicalLocales(this.loadedLanguage)[0]}catch(err2){}const term_chunks=[];let segments;if(trueLanguage&&typeof Intl.Segmenter!=="undefined"){const segmenter=new Intl.Segmenter(trueLanguage,{granularity:"grapheme"});segments=[...segmenter.segment(term)].map(({segment})=>segment)}else{segments=[...term]}for(const segment of segments){if(this.includeCharacters?.includes(segment)){term_chunks.push(segment)}else if(!/^\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}$/u.test(segment)){term_chunks.push(segment.toLocaleLowerCase())}}term=term_chunks.join("").replace(/\s{2,}/g," ").trim();log(`Normalized search term to ${term}`);if(!term?.length&&!filter_only){return{results:[],unfilteredResultCount:0,filters:{},totalFilters:{},timings:{preload:Date.now()-start,search:Date.now()-start,total:Date.now()-start}}}let sort_list=this.stringifySorts(options2.sort);log(`Stringified sort to ${sort_list}`);const filter_list=this.stringifyFilters(options2.filters);log(`Stringified filters to ${filter_list}`);let index_resp=this.backend.request_indexes(ptr,term);let index_array=JSON.parse(index_resp);let filter_resp=this.backend.request_filter_indexes(ptr,filter_list);let filter_array=JSON.parse(filter_resp);let chunks=index_array.filter((v)=>v).map((chunk)=>this.loadChunk(chunk));let filter_chunks=filter_array.filter((v)=>v).map((chunk)=>this.loadFilterChunk(chunk));await Promise.all([...chunks,...filter_chunks]);log(`Loaded necessary chunks to run search`);if(options2.preload){log(`Preload \u2014 bailing out of search operation now.`);return null}ptr=await this.getPtr();let searchStart=Date.now();let result=this.backend.search(ptr,term,filter_list,sort_list,exact_search);log(`Got the raw search result: ${result}`);let{filtered_counts,total_counts,results,unfiltered_total,search_keywords}=JSON.parse(result);let resultsInterface=results.map((result2)=>{let weighted_locations=result2.l.map((l)=>{let loc={weight:l.w/24,balanced_score:l.s,location:l.l};if(l.v){loc.verbose={word_string:l.v.ws,length_bonus:l.v.lb}}return loc});let locations=weighted_locations.map((l)=>l.location);let res={id:result2.p,score:result2.s*this.indexWeight,words:locations,data:async()=>await this.loadFragment(result2.p,weighted_locations,term)};if(result2.params){res.params={document_length:result2.params.dl,average_page_length:result2.params.apl,total_pages:result2.params.tp}}if(result2.scores){res.scores=result2.scores.map((r)=>{return{search_term:r.w,idf:r.idf,saturating_tf:r.b_tf,raw_tf:r.r_tf,pagefind_tf:r.p_tf,score:r.s,params:{weighted_term_frequency:r.params.w_tf,pages_containing_term:r.params.pct,length_bonus:r.params.lb}}})}return res});const searchTime=Date.now()-searchStart;const realTime=Date.now()-start;log(`Found ${results.length} result${results.length == 1 ? "" : "s"} for "${term}" in ${Date.now() - searchStart}ms (${Date.now() - start}ms realtime)`);let response={results:resultsInterface,unfilteredResultCount:unfiltered_total,filters:filtered_counts,totalFilters:total_counts,timings:{preload:realTime-searchTime,search:searchTime,total:realTime}};if(search_keywords){response.search_keywords=search_keywords}return response}};var Pagefind=class{constructor(options2={}){this.backend=wasm_bindgen;this.primaryLanguage="unknown";this.searchID=0;this.primary=new PagefindInstance({...options2,primary:true});this.instances=[this.primary];this.init(options2?.language)}async options(options2){await this.primary.options(options2)}async enterPlaygroundMode(){await this.primary.enterPlaygroundMode()}async init(overrideLanguage){if(isBrowser&&document?.querySelector){const langCode=document.querySelector("html")?.getAttribute("lang")||"unknown";this.primaryLanguage=langCode.toLocaleLowerCase()}await this.primary.init(overrideLanguage?overrideLanguage:this.primaryLanguage,{load_wasm:true})}async mergeIndex(indexPath,options2={}){if(this.primary.basePath.startsWith(indexPath)){console.warn(`Skipping mergeIndex ${indexPath} that appears to be the same as the primary index (${this.primary.basePath})`);return}let newInstance=new PagefindInstance({primary:false,basePath:indexPath});this.instances.push(newInstance);while(this.primary.wasm===null){await asyncSleep(50)}await newInstance.init(options2.language||this.primaryLanguage,{load_wasm:false});delete options2["language"];await newInstance.options(options2)}mergeFilters(filters2){const merged={};for(const searchFilter of filters2){for(const[filterKey,values]of Object.entries(searchFilter)){if(!merged[filterKey]){merged[filterKey]=values;continue}else{const filter=merged[filterKey];for(const[valueKey,count]of Object.entries(values)){filter[valueKey]=(filter[valueKey]||0)+count}}}}return merged}async filters(){let filters2=await Promise.all(this.instances.map((i2)=>i2.filters()));return this.mergeFilters(filters2)}async preload(term,options2={}){await Promise.all(this.instances.map((i2)=>i2.preload(term,options2)))}async debouncedSearch(term,options2,debounceTimeoutMs){const thisSearchID=++this.searchID;this.preload(term,options2);await asyncSleep(debounceTimeoutMs);if(thisSearchID!==this.searchID){return null}const searchResult=await this.search(term,options2);if(thisSearchID!==this.searchID){return null}return searchResult}async search(term,options2={}){let search2=await Promise.all(this.instances.map((i2)=>i2.search(term,options2)));const filters2=this.mergeFilters(search2.map((s)=>s.filters));const totalFilters=this.mergeFilters(search2.map((s)=>s.totalFilters));const results=search2.map((s)=>s.results).flat().sort((a,b)=>b.score-a.score);const timings=search2.map((s)=>s.timings);const unfilteredResultCount=search2.reduce((sum,s)=>sum+s.unfilteredResultCount,0);let response={results,unfilteredResultCount,filters:filters2,totalFilters,timings};if(search2[0].search_keywords){response.search_keywords=search2[0].search_keywords}return response}};var pagefind=void 0;var initial_options=void 0;var init_pagefind=()=>{if(!pagefind){pagefind=new Pagefind(initial_options??{})}};var options=async(new_options)=>{if(pagefind){await pagefind.options(new_options)}else{initial_options=new_options}};var init=async()=>{init_pagefind()};var destroy=async()=>{pagefind=void 0;initial_options=void 0};var mergeIndex=async(indexPath,options2)=>{init_pagefind();return await pagefind.mergeIndex(indexPath,options2)};var search=async(term,options2)=>{init_pagefind();return await pagefind.search(term,options2)};var debouncedSearch=async(term,options2,debounceTimeoutMs=300)=>{init_pagefind();return await pagefind.debouncedSearch(term,options2,debounceTimeoutMs)};var preload=async(term,options2)=>{init_pagefind();return await pagefind.preload(term,options2)};var filters=async()=>{init_pagefind();return await pagefind.filters()};export{debouncedSearch,destroy,filters,init,mergeIndex,options,preload,search} \ No newline at end of file diff --git a/_pagefind/wasm.en.pagefind b/_pagefind/wasm.en.pagefind new file mode 100644 index 0000000000000000000000000000000000000000..e49ad34dd4946715466eb873c7ed0bebdaf714a7 GIT binary patch literal 55619 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 E0Dj*!bpQYW literal 0 HcmV?d00001 diff --git a/_pagefind/wasm.unknown.pagefind b/_pagefind/wasm.unknown.pagefind new file mode 100644 index 0000000000000000000000000000000000000000..e3f5520ec730243ad2fd3da8f490a3227052fca6 GIT binary patch literal 52427 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͂KOAg2-{ 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 literal 0 HcmV?d00001 diff --git a/advanced/json-output/index.html b/advanced/json-output/index.html new file mode 100644 index 00000000..05393688 --- /dev/null +++ b/advanced/json-output/index.html @@ -0,0 +1,107 @@ + + + + + +JSON Output | Kit + + + + + + + +
    +

    JSON Output

    +# JSON Output + +Use the `--json` flag to get structured output for scripting and automation: + +```bash +kit "Explain main.go" --json --quiet --no-session +``` + +## Response format + +```json +{ + "response": "Final assistant response text", + "model": "anthropic/claude-haiku-3-5-20241022", + "stop_reason": "end_turn", + "session_id": "a1b2c3d4e5f6", + "usage": { + "input_tokens": 1024, + "output_tokens": 512, + "total_tokens": 1536, + "cache_read_tokens": 0, + "cache_creation_tokens": 0 + }, + "messages": [ + { + "role": "assistant", + "parts": [ + {"type": "text", "data": "..."}, + {"type": "tool_call", "data": {"name": "...", "args": "..."}}, + {"type": "tool_result", "data": {"name": "...", "result": "..."}} + ] + } + ] +} +``` + +## Fields + +### Top-level + +| Field | Type | Description | +|-------|------|-------------| +| `response` | string | The final assistant response text | +| `model` | string | The model that was used | +| `stop_reason` | string | Why the model stopped (e.g., `end_turn`) | +| `session_id` | string | Session identifier (omitted in `--no-session` mode) | +| `usage` | object | Token usage statistics | +| `messages` | array | Full conversation history | + +### Usage + +| Field | Type | Description | +|-------|------|-------------| +| `input_tokens` | int | Tokens sent to the model | +| `output_tokens` | int | Tokens generated by the model | +| `total_tokens` | int | Sum of input and output tokens | +| `cache_read_tokens` | int | Tokens read from prompt cache | +| `cache_creation_tokens` | int | Tokens written to prompt cache | + +### Message parts + +Each message contains a `parts` array with typed entries: + +| Type | Description | +|------|-------------| +| `text` | Assistant text content | +| `tool_call` | Tool invocation with name and args | +| `tool_result` | Tool execution result | +| `reasoning` | Extended thinking content | +| `finish` | End-of-turn marker | + +## Parsing in scripts + +### bash + jq + +```bash +result=$(kit "Count files" --json --quiet --no-session) +response=$(echo "$result" | jq -r '.response') +tokens=$(echo "$result" | jq '.usage.total_tokens') +``` + +### Go SDK + +For Go programs, use the SDK's `PromptResult` method instead of parsing JSON: + +```go +result, err := host.PromptResult(ctx, "Count files") +fmt.Println(result.Response) +fmt.Println(result.Usage.TotalTokens) +```
    + + \ No newline at end of file diff --git a/advanced/subagents/index.html b/advanced/subagents/index.html new file mode 100644 index 00000000..3c820844 --- /dev/null +++ b/advanced/subagents/index.html @@ -0,0 +1,85 @@ + + + + + +Subagents | Kit + + + + + + + +
    +

    Subagents

    +# Subagents + +Kit supports multi-agent orchestration through both subprocess spawning and in-process subagents. + +## Subprocess pattern + +Spawn Kit as a subprocess for isolated agent execution: + +```bash +kit "Analyze codebase" \ + --json \ + --no-session \ + --no-extensions \ + --quiet \ + --model anthropic/claude-haiku-3-5-20241022 +``` + +Key flags for subprocess usage: + +| Flag | Purpose | +|------|---------| +| `--quiet` | Stdout only, no TUI | +| `--no-session` | Ephemeral, no persistence | +| `--no-extensions` | Prevent recursive extension loading | +| `--json` | Machine-readable output | +| `--system-prompt` | Custom system prompt (string or file path) | + +Positional arguments are the prompt. `@file` arguments attach file content as context. + +## Built-in spawn_subagent tool + +Kit includes a built-in `spawn_subagent` tool that the LLM can use to delegate tasks to independent child agents: + +``` +spawn_subagent( + task: "Analyze the test files and summarize coverage", + model: "anthropic/claude-haiku-3-5-20241022", // optional + system_prompt: "You are a test analysis expert.", // optional + timeout_seconds: 300 // optional, max 1800 +) +``` + +Subagents run as separate in-process Kit instances with full tool access (except spawning further subagents, to prevent infinite recursion). They can run in parallel. + +## Extension subagents + +Extensions can spawn subagents programmatically: + +```go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Review this code for security issues", + Model: "anthropic/claude-sonnet-4-5-20250929", + SystemPrompt: "You are a security auditor.", +}) +``` + +## Go SDK subagents + +The SDK provides in-process subagent spawning: + +```go +result, err := host.Subagent(ctx, kit.SubagentConfig{ + Task: "Summarize the changes in this PR", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a code reviewer.", + Timeout: 5 * time.Minute, +}) +```
    + + \ No newline at end of file diff --git a/advanced/testing/index.html b/advanced/testing/index.html new file mode 100644 index 00000000..0672d0b2 --- /dev/null +++ b/advanced/testing/index.html @@ -0,0 +1,86 @@ + + + + + +Testing with tmux | Kit + + + + + + + +
    +

    Testing with tmux

    +# Testing with tmux + +Kit's interactive TUI can be tested non-interactively using tmux. This is useful for automated testing, CI pipelines, and extension development. + +## Basic pattern + +```bash +# Start Kit in a detached tmux session +tmux new-session -d -s kittest -x 120 -y 40 \ + "output/kit -e ext.go --no-session 2>kit_stderr.log" + +# Wait for startup +sleep 3 + +# Capture the current screen +tmux capture-pane -t kittest -p + +# Send input +tmux send-keys -t kittest '/command' Enter + +# Wait for response +sleep 2 + +# Capture updated screen +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +``` + +## Testing extensions + +When testing extensions, the pattern is: + +1. Build Kit with your changes +2. Start Kit in tmux with the extension loaded +3. Send slash commands or prompts +4. Capture and verify the screen output +5. Check stderr logs for errors + +```bash +# Build first +go build -o output/kit ./cmd/kit + +# Start with extension +tmux new-session -d -s kittest -x 120 -y 40 \ + "output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log" + +sleep 3 + +# Verify widget appears in screen +tmux capture-pane -t kittest -p | grep "Status" + +# Send a slash command +tmux send-keys -t kittest '/stats' Enter +sleep 1 +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +``` + +## Tips + +- Use `-x` and `-y` to set consistent terminal dimensions +- Redirect stderr to a log file (`2>kit.log`) for debugging +- Use `--no-session` to avoid creating session files during tests +- Add sufficient `sleep` between commands for the TUI to render +- Use `grep` on captured pane output to verify specific content
    + + \ No newline at end of file diff --git a/assets/callbacks-DY5vOJ-1.js b/assets/callbacks-DY5vOJ-1.js new file mode 100644 index 00000000..318f0019 --- /dev/null +++ b/assets/callbacks-DY5vOJ-1.js @@ -0,0 +1,220 @@ +const s={frontmatter:{title:"Callbacks",description:"Monitor tool calls and streaming output with the Kit Go SDK.",hidden:!1,toc:!0,draft:!1},html:`

    Callbacks

    +

    PromptWithCallbacks

    +

    The PromptWithCallbacks method provides real-time visibility into tool calls and streaming output:

    +
    response, err := host.PromptWithCallbacks(
    +    ctx,
    +    "List files in current directory",
    +    func(name, args string) {
    +        // Called when the model invokes a tool
    +        fmt.Println("Calling tool:", name)
    +    },
    +    func(name, args, result string, isError bool) {
    +        // Called when a tool returns its result
    +        if isError {
    +            fmt.Println("Tool failed:", name)
    +        }
    +    },
    +    func(chunk string) {
    +        // Called for each streaming text chunk
    +        fmt.Print(chunk)
    +    },
    +)
    +

    Callback signatures

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    CallbackSignatureWhen
    onToolCallfunc(name, args string)Model requests a tool call
    onToolResultfunc(name, args, result string, isError bool)Tool execution completes
    onStreamingfunc(chunk string)Streaming text chunk received
    +

    Any callback can be nil if you don't need it:

    +
    // Only care about streaming output
    +response, err := host.PromptWithCallbacks(ctx, "Hello", nil, nil, func(chunk string) {
    +    fmt.Print(chunk)
    +})
    +

    Event-based monitoring

    +

    For more granular control, use the event subscription API:

    +
    // Subscribe returns an unsubscribe function
    +unsub := host.OnToolCall(func(event kit.ToolCallEvent) {
    +    fmt.Printf("Tool: %s, Args: %s\\n", event.Name, event.Args)
    +})
    +defer unsub()
    +
    +unsub2 := host.OnToolResult(func(event kit.ToolResultEvent) {
    +    fmt.Printf("Result: %s (error: %v)\\n", event.Name, event.IsError)
    +})
    +defer unsub2()
    +
    +unsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) {
    +    fmt.Print(event.Chunk)
    +})
    +defer unsub3()
    +
    +unsub4 := host.OnResponse(func(event kit.ResponseEvent) {
    +    fmt.Println("Final response received")
    +})
    +defer unsub4()
    +
    +unsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) {
    +    fmt.Println("Turn started")
    +})
    +defer unsub5()
    +
    +unsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) {
    +    fmt.Println("Turn ended")
    +})
    +defer unsub6()
    +

    Hook system

    +

    Hooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations:

    +
    // Intercept tool calls before execution
    +host.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) {
    +    if name == "bash" {
    +        log.Println("Bash command:", args)
    +    }
    +    return args, nil // return modified args or error to cancel
    +})
    +
    +// Process results after tool execution
    +host.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) {
    +    return result, nil
    +})
    +
    +// Before/after each agent turn
    +host.OnBeforeTurn(0, func(ctx context.Context) error {
    +    return nil
    +})
    +
    +host.OnAfterTurn(0, func(ctx context.Context) error {
    +    return nil
    +})
    +

    The first argument is a priority (lower = runs first).

    `,headings:[{depth:2,text:"PromptWithCallbacks",id:"promptwithcallbacks"},{depth:3,text:"Callback signatures",id:"callback-signatures"},{depth:2,text:"Event-based monitoring",id:"event-based-monitoring"},{depth:2,text:"Hook system",id:"hook-system"}],raw:` +# Callbacks + +## PromptWithCallbacks + +The \`PromptWithCallbacks\` method provides real-time visibility into tool calls and streaming output: + +\`\`\`go +response, err := host.PromptWithCallbacks( + ctx, + "List files in current directory", + func(name, args string) { + // Called when the model invokes a tool + fmt.Println("Calling tool:", name) + }, + func(name, args, result string, isError bool) { + // Called when a tool returns its result + if isError { + fmt.Println("Tool failed:", name) + } + }, + func(chunk string) { + // Called for each streaming text chunk + fmt.Print(chunk) + }, +) +\`\`\` + +### Callback signatures + +| Callback | Signature | When | +|----------|-----------|------| +| \`onToolCall\` | \`func(name, args string)\` | Model requests a tool call | +| \`onToolResult\` | \`func(name, args, result string, isError bool)\` | Tool execution completes | +| \`onStreaming\` | \`func(chunk string)\` | Streaming text chunk received | + +Any callback can be \`nil\` if you don't need it: + +\`\`\`go +// Only care about streaming output +response, err := host.PromptWithCallbacks(ctx, "Hello", nil, nil, func(chunk string) { + fmt.Print(chunk) +}) +\`\`\` + +## Event-based monitoring + +For more granular control, use the event subscription API: + +\`\`\`go +// Subscribe returns an unsubscribe function +unsub := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Printf("Tool: %s, Args: %s\\n", event.Name, event.Args) +}) +defer unsub() + +unsub2 := host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Printf("Result: %s (error: %v)\\n", event.Name, event.IsError) +}) +defer unsub2() + +unsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +defer unsub3() + +unsub4 := host.OnResponse(func(event kit.ResponseEvent) { + fmt.Println("Final response received") +}) +defer unsub4() + +unsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) { + fmt.Println("Turn started") +}) +defer unsub5() + +unsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) { + fmt.Println("Turn ended") +}) +defer unsub6() +\`\`\` + +## Hook system + +Hooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations: + +\`\`\`go +// Intercept tool calls before execution +host.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) { + if name == "bash" { + log.Println("Bash command:", args) + } + return args, nil // return modified args or error to cancel +}) + +// Process results after tool execution +host.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) { + return result, nil +}) + +// Before/after each agent turn +host.OnBeforeTurn(0, func(ctx context.Context) error { + return nil +}) + +host.OnAfterTurn(0, func(ctx context.Context) error { + return nil +}) +\`\`\` + +The first argument is a priority (lower = runs first). +`};export{s as default}; diff --git a/assets/capabilities-hnq2TbFu.js b/assets/capabilities-hnq2TbFu.js new file mode 100644 index 00000000..0ea7a85d --- /dev/null +++ b/assets/capabilities-hnq2TbFu.js @@ -0,0 +1,485 @@ +const s={frontmatter:{title:"Capabilities",description:"All extension capabilities — lifecycle events, tools, commands, widgets, and more.",hidden:!1,toc:!0,draft:!1},html:`

    Extension Capabilities

    +

    Lifecycle events

    +

    Extensions can hook into 18 lifecycle events:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventDescription
    OnSessionStartSession initialized
    OnSessionShutdownSession ending
    OnBeforeAgentStartBefore the agent loop begins
    OnAgentStartAgent loop started
    OnAgentEndAgent loop completed
    OnToolCallTool call requested by the model
    OnToolExecutionStartTool execution beginning
    OnToolExecutionEndTool execution completed
    OnToolResultTool result returned
    OnInputUser input received
    OnMessageStartAssistant message started
    OnMessageUpdateStreaming text chunk received
    OnMessageEndAssistant message completed
    OnModelChangeModel switched
    OnContextPrepareContext being assembled for the model
    OnBeforeForkBefore forking a conversation branch
    OnBeforeSessionSwitchBefore switching sessions
    OnBeforeCompactBefore conversation compaction
    +

    Example

    +
    api.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) {
    +    ctx.PrintInfo("Calling tool: " + event.Name)
    +})
    +
    +api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) {
    +    ctx.PrintInfo("Agent finished")
    +})
    +

    Tools

    +

    Register custom tools that the LLM can invoke:

    +
    api.RegisterTool(ext.ToolDef{
    +    Name:        "weather",
    +    Description: "Get current weather for a location",
    +    Parameters: map[string]ext.ParameterDef{
    +        "city": {Type: "string", Description: "City name", Required: true},
    +    },
    +    Handler: func(ctx ext.Context, params map[string]any) (string, error) {
    +        city := params["city"].(string)
    +        return "Sunny, 72°F in " + city, nil
    +    },
    +})
    +

    Commands

    +

    Register slash commands that users can invoke directly:

    +
    api.RegisterCommand(ext.CommandDef{
    +    Name:        "stats",
    +    Description: "Show context statistics",
    +    Handler: func(ctx ext.Context, args string) {
    +        stats := ctx.GetContextStats()
    +        ctx.PrintInfo(fmt.Sprintf("Tokens: %d", stats.TotalTokens))
    +    },
    +})
    +

    Widgets

    +

    Add persistent status displays above or below the input area:

    +
    ctx.SetWidget(ext.WidgetConfig{
    +    ID:       "token-count",
    +    Position: "bottom",
    +    Content:  ext.WidgetContent{Text: "Tokens: 1,234"},
    +})
    +
    +// Update later
    +ctx.SetWidget(ext.WidgetConfig{
    +    ID:       "token-count",
    +    Position: "bottom",
    +    Content:  ext.WidgetContent{Text: "Tokens: 2,456"},
    +})
    +
    +// Remove
    +ctx.RemoveWidget("token-count")
    +

    Headers and footers

    +

    Persistent content above and below the conversation:

    +
    ctx.SetHeader(ext.HeaderFooterConfig{
    +    Content: ext.WidgetContent{Text: "Project: my-app | Branch: main"},
    +})
    +
    +ctx.SetFooter(ext.HeaderFooterConfig{
    +    Content: ext.WidgetContent{Text: "Plan Mode (read-only)"},
    +})
    +

    Status bar

    +

    Custom status bar entries:

    +
    ctx.SetStatus("mode", "Planning")
    +ctx.RemoveStatus("mode")
    +

    Shortcuts

    +

    Global keyboard shortcuts:

    +
    api.RegisterShortcut(ext.ShortcutDef{
    +    Key:         "ctrl+t",
    +    Description: "Toggle plan mode",
    +}, func(ctx ext.Context) {
    +    // handle shortcut
    +})
    +

    Overlays

    +

    Modal dialogs with markdown content:

    +
    ctx.ShowOverlay(ext.OverlayConfig{
    +    Title:   "Help",
    +    Content: "# Keyboard Shortcuts\\n\\n- **ctrl+t** — Toggle plan mode\\n- **ctrl+s** — Save session",
    +})
    +

    Tool renderers

    +

    Customize how specific tool calls are displayed in the TUI:

    +
    api.RegisterToolRenderer(ext.ToolRenderConfig{
    +    ToolName: "bash",
    +    Render: func(name, args, result string, isError bool) string {
    +        return "$ " + args + "\\n" + result
    +    },
    +})
    +

    Message renderers

    +

    Custom rendering for assistant messages:

    +
    api.RegisterMessageRenderer(ext.MessageRendererConfig{
    +    Name: "custom",
    +    Render: func(content string) string {
    +        return ">> " + content
    +    },
    +})
    +

    Editor interceptors

    +

    Handle key events and wrap the editor's rendering:

    +
    ctx.SetEditor(ext.EditorConfig{
    +    HandleKey: func(key, text string) ext.EditorKeyAction {
    +        if key == "escape" {
    +            return ext.EditorKeyAction{Handled: true}
    +        }
    +        return ext.EditorKeyAction{Handled: false}
    +    },
    +})
    +

    Interactive prompts

    +

    Select, confirm, input, and multi-select dialogs:

    +
    // Single select
    +response := ctx.PromptSelect(ext.PromptSelectConfig{
    +    Title:   "Choose a model",
    +    Options: []string{"claude-sonnet", "gpt-4o", "llama3"},
    +})
    +
    +// Confirm
    +confirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{
    +    Title: "Delete this file?",
    +})
    +
    +// Text input
    +name := ctx.PromptInput(ext.PromptInputConfig{
    +    Title:       "Enter project name",
    +    Placeholder: "my-project",
    +})
    +

    Options

    +

    Register configurable extension options:

    +
    api.RegisterOption(ext.OptionDef{
    +    Name:         "auto-commit",
    +    Description:  "Automatically commit on shutdown",
    +    DefaultValue: "false",
    +})
    +

    Subagents

    +

    Spawn in-process child Kit instances:

    +
    result := ctx.SpawnSubagent(ext.SubagentConfig{
    +    Task:         "Analyze the test files and summarize coverage",
    +    Model:        "anthropic/claude-haiku-3-5-20241022",
    +    SystemPrompt: "You are a test analysis expert.",
    +})
    +

    LLM completion

    +

    Make direct model calls without going through the agent loop:

    +
    response := ctx.Complete(ext.CompleteRequest{
    +    Prompt: "Summarize this in one sentence: " + content,
    +})
    +

    Custom events

    +

    Inter-extension communication:

    +
    // Emit
    +ctx.EmitCustomEvent("my-extension:data-ready", payload)
    +
    +// Listen
    +api.OnCustomEvent("my-extension:data-ready", func(data any, ctx ext.Context) {
    +    // handle event
    +})
    `,headings:[{depth:2,text:"Lifecycle events",id:"lifecycle-events"},{depth:3,text:"Example",id:"example"},{depth:2,text:"Tools",id:"tools"},{depth:2,text:"Commands",id:"commands"},{depth:2,text:"Widgets",id:"widgets"},{depth:2,text:"Headers and footers",id:"headers-and-footers"},{depth:2,text:"Status bar",id:"status-bar"},{depth:2,text:"Shortcuts",id:"shortcuts"},{depth:2,text:"Overlays",id:"overlays"},{depth:2,text:"Tool renderers",id:"tool-renderers"},{depth:2,text:"Message renderers",id:"message-renderers"},{depth:2,text:"Editor interceptors",id:"editor-interceptors"},{depth:2,text:"Interactive prompts",id:"interactive-prompts"},{depth:2,text:"Options",id:"options"},{depth:2,text:"Subagents",id:"subagents"},{depth:2,text:"LLM completion",id:"llm-completion"},{depth:2,text:"Custom events",id:"custom-events"}],raw:` +# Extension Capabilities + +## Lifecycle events + +Extensions can hook into 18 lifecycle events: + +| Event | Description | +|-------|-------------| +| \`OnSessionStart\` | Session initialized | +| \`OnSessionShutdown\` | Session ending | +| \`OnBeforeAgentStart\` | Before the agent loop begins | +| \`OnAgentStart\` | Agent loop started | +| \`OnAgentEnd\` | Agent loop completed | +| \`OnToolCall\` | Tool call requested by the model | +| \`OnToolExecutionStart\` | Tool execution beginning | +| \`OnToolExecutionEnd\` | Tool execution completed | +| \`OnToolResult\` | Tool result returned | +| \`OnInput\` | User input received | +| \`OnMessageStart\` | Assistant message started | +| \`OnMessageUpdate\` | Streaming text chunk received | +| \`OnMessageEnd\` | Assistant message completed | +| \`OnModelChange\` | Model switched | +| \`OnContextPrepare\` | Context being assembled for the model | +| \`OnBeforeFork\` | Before forking a conversation branch | +| \`OnBeforeSessionSwitch\` | Before switching sessions | +| \`OnBeforeCompact\` | Before conversation compaction | + +### Example + +\`\`\`go +api.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) { + ctx.PrintInfo("Calling tool: " + event.Name) +}) + +api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) { + ctx.PrintInfo("Agent finished") +}) +\`\`\` + +## Tools + +Register custom tools that the LLM can invoke: + +\`\`\`go +api.RegisterTool(ext.ToolDef{ + Name: "weather", + Description: "Get current weather for a location", + Parameters: map[string]ext.ParameterDef{ + "city": {Type: "string", Description: "City name", Required: true}, + }, + Handler: func(ctx ext.Context, params map[string]any) (string, error) { + city := params["city"].(string) + return "Sunny, 72°F in " + city, nil + }, +}) +\`\`\` + +## Commands + +Register slash commands that users can invoke directly: + +\`\`\`go +api.RegisterCommand(ext.CommandDef{ + Name: "stats", + Description: "Show context statistics", + Handler: func(ctx ext.Context, args string) { + stats := ctx.GetContextStats() + ctx.PrintInfo(fmt.Sprintf("Tokens: %d", stats.TotalTokens)) + }, +}) +\`\`\` + +## Widgets + +Add persistent status displays above or below the input area: + +\`\`\`go +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 1,234"}, +}) + +// Update later +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 2,456"}, +}) + +// Remove +ctx.RemoveWidget("token-count") +\`\`\` + +## Headers and footers + +Persistent content above and below the conversation: + +\`\`\`go +ctx.SetHeader(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Project: my-app | Branch: main"}, +}) + +ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Plan Mode (read-only)"}, +}) +\`\`\` + +## Status bar + +Custom status bar entries: + +\`\`\`go +ctx.SetStatus("mode", "Planning") +ctx.RemoveStatus("mode") +\`\`\` + +## Shortcuts + +Global keyboard shortcuts: + +\`\`\`go +api.RegisterShortcut(ext.ShortcutDef{ + Key: "ctrl+t", + Description: "Toggle plan mode", +}, func(ctx ext.Context) { + // handle shortcut +}) +\`\`\` + +## Overlays + +Modal dialogs with markdown content: + +\`\`\`go +ctx.ShowOverlay(ext.OverlayConfig{ + Title: "Help", + Content: "# Keyboard Shortcuts\\n\\n- **ctrl+t** — Toggle plan mode\\n- **ctrl+s** — Save session", +}) +\`\`\` + +## Tool renderers + +Customize how specific tool calls are displayed in the TUI: + +\`\`\`go +api.RegisterToolRenderer(ext.ToolRenderConfig{ + ToolName: "bash", + Render: func(name, args, result string, isError bool) string { + return "$ " + args + "\\n" + result + }, +}) +\`\`\` + +## Message renderers + +Custom rendering for assistant messages: + +\`\`\`go +api.RegisterMessageRenderer(ext.MessageRendererConfig{ + Name: "custom", + Render: func(content string) string { + return ">> " + content + }, +}) +\`\`\` + +## Editor interceptors + +Handle key events and wrap the editor's rendering: + +\`\`\`go +ctx.SetEditor(ext.EditorConfig{ + HandleKey: func(key, text string) ext.EditorKeyAction { + if key == "escape" { + return ext.EditorKeyAction{Handled: true} + } + return ext.EditorKeyAction{Handled: false} + }, +}) +\`\`\` + +## Interactive prompts + +Select, confirm, input, and multi-select dialogs: + +\`\`\`go +// Single select +response := ctx.PromptSelect(ext.PromptSelectConfig{ + Title: "Choose a model", + Options: []string{"claude-sonnet", "gpt-4o", "llama3"}, +}) + +// Confirm +confirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{ + Title: "Delete this file?", +}) + +// Text input +name := ctx.PromptInput(ext.PromptInputConfig{ + Title: "Enter project name", + Placeholder: "my-project", +}) +\`\`\` + +## Options + +Register configurable extension options: + +\`\`\`go +api.RegisterOption(ext.OptionDef{ + Name: "auto-commit", + Description: "Automatically commit on shutdown", + DefaultValue: "false", +}) +\`\`\` + +## Subagents + +Spawn in-process child Kit instances: + +\`\`\`go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Analyze the test files and summarize coverage", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a test analysis expert.", +}) +\`\`\` + +## LLM completion + +Make direct model calls without going through the agent loop: + +\`\`\`go +response := ctx.Complete(ext.CompleteRequest{ + Prompt: "Summarize this in one sentence: " + content, +}) +\`\`\` + +## Custom events + +Inter-extension communication: + +\`\`\`go +// Emit +ctx.EmitCustomEvent("my-extension:data-ready", payload) + +// Listen +api.OnCustomEvent("my-extension:data-ready", func(data any, ctx ext.Context) { + // handle event +}) +\`\`\` +`};export{s as default}; diff --git a/assets/commands-B2onU7kX.js b/assets/commands-B2onU7kX.js new file mode 100644 index 00000000..0aa772f4 --- /dev/null +++ b/assets/commands-B2onU7kX.js @@ -0,0 +1,95 @@ +const s={frontmatter:{title:"Commands",description:"Complete reference for all Kit CLI subcommands.",hidden:!1,toc:!0,draft:!1},html:`

    Commands

    +

    Authentication

    +

    For OAuth-enabled providers like Anthropic.

    +
    kit auth login [provider]    # Start OAuth flow (e.g., anthropic)
    +kit auth logout [provider]   # Remove credentials for provider
    +kit auth status              # Check authentication status
    +

    Model database

    +

    Manage the local model database that maps provider names to API configurations.

    +
    kit models [provider]        # List available models (optionally filter by provider)
    +kit models --all             # Show all providers (not just Fantasy-compatible)
    +kit update-models [source]   # Update model database
    +

    The update-models command accepts an optional source argument:

    +
      +
    • (none) — update from models.dev
    • +
    • A URL — fetch from a custom endpoint
    • +
    • A file path — load from a local file
    • +
    • embedded — reset to the bundled database
    • +
    +

    Extension management

    +
    kit extensions list          # List discovered extensions
    +kit extensions validate      # Validate extension files
    +kit extensions init          # Generate example extension template
    +

    Installing extensions from git

    +
    kit install <git-url>        # Install extensions from git repositories
    +kit install -l <git-url>     # Install to project-local .kit/git/ directory
    +kit install -u <git-url>     # Update an already-installed package
    +kit install --uninstall <pkg> # Remove an installed package
    +kit install --all            # Install all extensions without prompting
    +

    Skills

    +
    kit skill                    # Install the Kit extensions skill via skills.sh
    +

    ACP server

    +

    Run Kit as an ACP (Agent Client Protocol) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout.

    +
    kit acp                      # Start as ACP agent
    +kit acp --debug              # With debug logging to stderr
    `,headings:[{depth:2,text:"Authentication",id:"authentication"},{depth:2,text:"Model database",id:"model-database"},{depth:2,text:"Extension management",id:"extension-management"},{depth:3,text:"Installing extensions from git",id:"installing-extensions-from-git"},{depth:2,text:"Skills",id:"skills"},{depth:2,text:"ACP server",id:"acp-server"}],raw:` +# Commands + +## Authentication + +For OAuth-enabled providers like Anthropic. + +\`\`\`bash +kit auth login [provider] # Start OAuth flow (e.g., anthropic) +kit auth logout [provider] # Remove credentials for provider +kit auth status # Check authentication status +\`\`\` + +## Model database + +Manage the local model database that maps provider names to API configurations. + +\`\`\`bash +kit models [provider] # List available models (optionally filter by provider) +kit models --all # Show all providers (not just Fantasy-compatible) +kit update-models [source] # Update model database +\`\`\` + +The \`update-models\` command accepts an optional source argument: +- *(none)* — update from [models.dev](https://models.dev) +- A URL — fetch from a custom endpoint +- A file path — load from a local file +- \`embedded\` — reset to the bundled database + +## Extension management + +\`\`\`bash +kit extensions list # List discovered extensions +kit extensions validate # Validate extension files +kit extensions init # Generate example extension template +\`\`\` + +### Installing extensions from git + +\`\`\`bash +kit install # Install extensions from git repositories +kit install -l # Install to project-local .kit/git/ directory +kit install -u # Update an already-installed package +kit install --uninstall # Remove an installed package +kit install --all # Install all extensions without prompting +\`\`\` + +## Skills + +\`\`\`bash +kit skill # Install the Kit extensions skill via skills.sh +\`\`\` + +## ACP server + +Run Kit as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout. + +\`\`\`bash +kit acp # Start as ACP agent +kit acp --debug # With debug logging to stderr +\`\`\` +`};export{s as default}; diff --git a/assets/configuration-BU6tST5r.js b/assets/configuration-BU6tST5r.js new file mode 100644 index 00000000..61af25fe --- /dev/null +++ b/assets/configuration-BU6tST5r.js @@ -0,0 +1,195 @@ +const n={frontmatter:{title:"Configuration",description:"Configure Kit using config files, environment variables, and CLI flags.",hidden:!1,toc:!0,draft:!1},html:`

    Configuration

    +

    Kit looks for configuration in the following locations, in order of priority:

    +
      +
    1. CLI flags
    2. +
    3. Environment variables (with KIT_ prefix)
    4. +
    5. ./.kit.yml / ./.kit.yaml / ./.kit.json (project-local)
    6. +
    7. ~/.kit.yml / ~/.kit.yaml / ~/.kit.json (global)
    8. +
    +

    Basic configuration

    +

    Create ~/.kit.yml:

    +
    model: anthropic/claude-sonnet-4-5-20250929
    +max-tokens: 4096
    +temperature: 0.7
    +stream: true
    +

    All configuration keys

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyTypeDefaultDescription
    modelstringanthropic/claude-sonnet-4-5-20250929Model to use (provider/model format)
    max-tokensint4096Maximum tokens in response
    temperaturefloat0.7Randomness 0.0–1.0
    top-pfloat0.95Nucleus sampling 0.0–1.0
    top-kint40Limit top K tokens
    streambooltrueEnable streaming output
    debugboolfalseEnable debug logging
    compactboolfalseEnable compact output mode
    system-promptstringSystem prompt text or file path
    max-stepsint0Maximum agent steps (0 = unlimited)
    thinking-levelstringoffExtended thinking: off, minimal, low, medium, high
    provider-api-keystringAPI key for the provider
    provider-urlstringBase URL for provider API
    tls-skip-verifyboolfalseSkip TLS certificate verification
    stop-sequenceslistCustom stop sequences
    themestringUI theme
    markdown-themestringMarkdown rendering theme
    +

    Environment variables

    +

    Any configuration key can be set via environment variable with the KIT_ prefix. Hyphens become underscores:

    +
    export KIT_MODEL="openai/gpt-4o"
    +export KIT_MAX_TOKENS="8192"
    +export KIT_TEMPERATURE="0.5"
    +

    Provider API keys use their own environment variables:

    +
    export ANTHROPIC_API_KEY="sk-..."
    +export OPENAI_API_KEY="sk-..."
    +export GOOGLE_API_KEY="..."
    +

    MCP server configuration

    +

    Add external MCP servers to your .kit.yml:

    +
    mcpServers:
    +  filesystem:
    +    type: local
    +    command: ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"]
    +    environment:
    +      LOG_LEVEL: "info"
    +    allowedTools: ["read_file", "write_file"]
    +    excludedTools: ["delete_file"]
    +
    +  search:
    +    type: remote
    +    url: "https://mcp.example.com/search"
    +

    MCP server fields

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    typestringlocal (stdio) or remote (streamable HTTP)
    commandlistCommand and args for local servers
    environmentmapEnvironment variables for the server process
    urlstringURL for remote servers
    allowedToolslistWhitelist of tool names to expose
    excludedToolslistBlacklist of tool names to hide
    +

    A legacy format with transport, args, env, and headers fields is also supported.

    `,headings:[{depth:2,text:"Basic configuration",id:"basic-configuration"},{depth:2,text:"All configuration keys",id:"all-configuration-keys"},{depth:2,text:"Environment variables",id:"environment-variables"},{depth:2,text:"MCP server configuration",id:"mcp-server-configuration"},{depth:3,text:"MCP server fields",id:"mcp-server-fields"}],raw:'\n# Configuration\n\nKit looks for configuration in the following locations, in order of priority:\n\n1. CLI flags\n2. Environment variables (with `KIT_` prefix)\n3. `./.kit.yml` / `./.kit.yaml` / `./.kit.json` (project-local)\n4. `~/.kit.yml` / `~/.kit.yaml` / `~/.kit.json` (global)\n\n## Basic configuration\n\nCreate `~/.kit.yml`:\n\n```yaml\nmodel: anthropic/claude-sonnet-4-5-20250929\nmax-tokens: 4096\ntemperature: 0.7\nstream: true\n```\n\n## All configuration keys\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `model` | string | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `max-tokens` | int | `4096` | Maximum tokens in response |\n| `temperature` | float | `0.7` | Randomness 0.0–1.0 |\n| `top-p` | float | `0.95` | Nucleus sampling 0.0–1.0 |\n| `top-k` | int | `40` | Limit top K tokens |\n| `stream` | bool | `true` | Enable streaming output |\n| `debug` | bool | `false` | Enable debug logging |\n| `compact` | bool | `false` | Enable compact output mode |\n| `system-prompt` | string | — | System prompt text or file path |\n| `max-steps` | int | `0` | Maximum agent steps (0 = unlimited) |\n| `thinking-level` | string | `off` | Extended thinking: off, minimal, low, medium, high |\n| `provider-api-key` | string | — | API key for the provider |\n| `provider-url` | string | — | Base URL for provider API |\n| `tls-skip-verify` | bool | `false` | Skip TLS certificate verification |\n| `stop-sequences` | list | — | Custom stop sequences |\n| `theme` | string | — | UI theme |\n| `markdown-theme` | string | — | Markdown rendering theme |\n\n## Environment variables\n\nAny configuration key can be set via environment variable with the `KIT_` prefix. Hyphens become underscores:\n\n```bash\nexport KIT_MODEL="openai/gpt-4o"\nexport KIT_MAX_TOKENS="8192"\nexport KIT_TEMPERATURE="0.5"\n```\n\nProvider API keys use their own environment variables:\n\n```bash\nexport ANTHROPIC_API_KEY="sk-..."\nexport OPENAI_API_KEY="sk-..."\nexport GOOGLE_API_KEY="..."\n```\n\n## MCP server configuration\n\nAdd external MCP servers to your `.kit.yml`:\n\n```yaml\nmcpServers:\n filesystem:\n type: local\n command: ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"]\n environment:\n LOG_LEVEL: "info"\n allowedTools: ["read_file", "write_file"]\n excludedTools: ["delete_file"]\n\n search:\n type: remote\n url: "https://mcp.example.com/search"\n```\n\n### MCP server fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `type` | string | `local` (stdio) or `remote` (streamable HTTP) |\n| `command` | list | Command and args for local servers |\n| `environment` | map | Environment variables for the server process |\n| `url` | string | URL for remote servers |\n| `allowedTools` | list | Whitelist of tool names to expose |\n| `excludedTools` | list | Blacklist of tool names to hide |\n\nA legacy format with `transport`, `args`, `env`, and `headers` fields is also supported.\n'};export{n as default}; diff --git a/assets/development-BTUHn6x2.js b/assets/development-BTUHn6x2.js new file mode 100644 index 00000000..7cb30624 --- /dev/null +++ b/assets/development-BTUHn6x2.js @@ -0,0 +1,138 @@ +const e={frontmatter:{title:"Development",description:"Build, test, and contribute to Kit.",hidden:!1,toc:!0,draft:!1},html:`

    Development

    +

    Build and test

    +
    # Build
    +go build -o output/kit ./cmd/kit
    +
    +# Run all tests
    +go test -race ./...
    +
    +# Run a specific test
    +go test -race ./cmd -run TestScriptExecution
    +
    +# Lint
    +go vet ./...
    +
    +# Format
    +go fmt ./...
    +

    Project structure

    +
    cmd/kit/             - CLI entry point (main.go)
    +cmd/                 - CLI command implementations (root, auth, models, etc.)
    +pkg/kit/             - Go SDK for embedding Kit
    +internal/app/        - Application orchestrator (agent loop, message store, queue)
    +internal/agent/      - Agent execution and tool dispatch
    +internal/auth/       - OAuth authentication and credential storage
    +internal/acpserver/  - ACP (Agent Client Protocol) server
    +internal/clipboard/  - Cross-platform clipboard operations
    +internal/compaction/ - Conversation compaction and summarization
    +internal/config/     - Configuration management
    +internal/core/       - Built-in tools (bash, read, write, edit, grep, find, ls)
    +internal/extensions/ - Yaegi extension system
    +internal/kitsetup/   - Initial setup wizard
    +internal/message/    - Message content types and structured content blocks
    +internal/models/     - Provider and model management
    +internal/session/    - Session persistence (tree-based JSONL)
    +internal/skills/     - Skill loading and system prompt composition
    +internal/tools/      - MCP tool integration
    +internal/ui/         - Bubble Tea TUI components
    +examples/extensions/ - Example extension files
    +npm/                 - NPM package wrapper for distribution
    +
    +

    Architecture overview

    +

    Kit is built around a few key architectural patterns:

    +

    Multi-provider LLM support

    +

    The llm.Provider interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API.

    +

    MCP client-server model

    +

    External tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in .kit.yml.

    +

    Extension system

    +

    Extensions are Go source files interpreted at runtime by Yaegi. The internal/extensions/ package manages loading, symbol export, and lifecycle dispatch. See the Extension System docs for details.

    +

    TUI architecture

    +

    The interactive terminal UI is built with Bubble Tea v2, using a parent-child model where AppModel manages child components (InputComponent, StreamComponent, etc.).

    +

    Decoupling pattern

    +

    cmd/root.go contains converter functions (e.g., widgetProviderForUI()) that bridge internal/extensions/ types to internal/ui/ types. The UI never imports the extensions package directly.

    +

    Contributing

    +

    Contributions are welcome! Please see the contribution guide for guidelines.

    +

    Community

    +`,headings:[{depth:2,text:"Build and test",id:"build-and-test"},{depth:2,text:"Project structure",id:"project-structure"},{depth:2,text:"Architecture overview",id:"architecture-overview"},{depth:3,text:"Multi-provider LLM support",id:"multi-provider-llm-support"},{depth:3,text:"MCP client-server model",id:"mcp-client-server-model"},{depth:3,text:"Extension system",id:"extension-system"},{depth:3,text:"TUI architecture",id:"tui-architecture"},{depth:3,text:"Decoupling pattern",id:"decoupling-pattern"},{depth:2,text:"Contributing",id:"contributing"},{depth:2,text:"Community",id:"community"}],raw:` +# Development + +## Build and test + +\`\`\`bash +# Build +go build -o output/kit ./cmd/kit + +# Run all tests +go test -race ./... + +# Run a specific test +go test -race ./cmd -run TestScriptExecution + +# Lint +go vet ./... + +# Format +go fmt ./... +\`\`\` + +## Project structure + +\`\`\` +cmd/kit/ - CLI entry point (main.go) +cmd/ - CLI command implementations (root, auth, models, etc.) +pkg/kit/ - Go SDK for embedding Kit +internal/app/ - Application orchestrator (agent loop, message store, queue) +internal/agent/ - Agent execution and tool dispatch +internal/auth/ - OAuth authentication and credential storage +internal/acpserver/ - ACP (Agent Client Protocol) server +internal/clipboard/ - Cross-platform clipboard operations +internal/compaction/ - Conversation compaction and summarization +internal/config/ - Configuration management +internal/core/ - Built-in tools (bash, read, write, edit, grep, find, ls) +internal/extensions/ - Yaegi extension system +internal/kitsetup/ - Initial setup wizard +internal/message/ - Message content types and structured content blocks +internal/models/ - Provider and model management +internal/session/ - Session persistence (tree-based JSONL) +internal/skills/ - Skill loading and system prompt composition +internal/tools/ - MCP tool integration +internal/ui/ - Bubble Tea TUI components +examples/extensions/ - Example extension files +npm/ - NPM package wrapper for distribution +\`\`\` + +## Architecture overview + +Kit is built around a few key architectural patterns: + +### Multi-provider LLM support + +The \`llm.Provider\` interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API. + +### MCP client-server model + +External tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in \`.kit.yml\`. + +### Extension system + +Extensions are Go source files interpreted at runtime by Yaegi. The \`internal/extensions/\` package manages loading, symbol export, and lifecycle dispatch. See the [Extension System](/extensions/overview) docs for details. + +### TUI architecture + +The interactive terminal UI is built with [Bubble Tea v2](https://github.com/charmbracelet/bubbletea), using a parent-child model where \`AppModel\` manages child components (\`InputComponent\`, \`StreamComponent\`, etc.). + +### Decoupling pattern + +\`cmd/root.go\` contains converter functions (e.g., \`widgetProviderForUI()\`) that bridge \`internal/extensions/\` types to \`internal/ui/\` types. The UI never imports the extensions package directly. + +## Contributing + +Contributions are welcome! Please see the [contribution guide](https://github.com/mark3labs/kit/blob/master/contribute/contribute.md) for guidelines. + +## Community + +- [Discord](https://discord.gg/RqSS2NQVsY) +- [GitHub Issues](https://github.com/mark3labs/kit/issues) +`};export{e as default}; diff --git a/assets/examples-C-0Ua9md.js b/assets/examples-C-0Ua9md.js new file mode 100644 index 00000000..bc7e0a68 --- /dev/null +++ b/assets/examples-C-0Ua9md.js @@ -0,0 +1,273 @@ +const t={frontmatter:{title:"Examples",description:"Catalog of example extensions included with Kit.",hidden:!1,toc:!0,draft:!1},html:`

    Extension Examples

    +

    Kit ships with a rich set of example extensions in the examples/extensions/ directory. These serve as both documentation and starting points for your own extensions.

    +

    UI and display

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExtensionDescription
    minimal.goClean UI with custom footer
    branded-output.goBranded output rendering
    header-footer-demo.goCustom headers and footers
    widget-status.goPersistent status widgets
    overlay-demo.goModal dialogs
    tool-renderer-demo.goCustom tool call rendering
    custom-editor-demo.goVim-like modal editor
    pirate.goPirate-themed personality
    +

    Workflow and automation

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExtensionDescription
    auto-commit.goAuto-commit changes on shutdown
    plan-mode.goRead-only planning mode
    permission-gate.goPermission gating for destructive tools
    confirm-destructive.goConfirm destructive operations
    protected-paths.goPath protection for sensitive files
    project-rules.goProject-specific rules injection
    compact-notify.goNotification on conversation compaction
    +

    Interactive features

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExtensionDescription
    prompt-demo.goInteractive prompts (select/confirm/input)
    bookmark.goBookmark conversations
    inline-bash.goInline bash execution
    interactive-shell.goInteractive shell integration
    notify.goDesktop notifications
    +

    Agent and context

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    ExtensionDescription
    tool-logger.goLog all tool calls
    context-inject.goInject context into conversations
    summarize.goConversation summarization
    lsp-diagnostics.goLSP diagnostic integration
    +

    Multi-agent

    + + + + + + + + + + + + + + + + + + + + + +
    ExtensionDescription
    kit-kit.goKit-in-Kit sub-agent spawning
    subagent-widget.goMulti-agent orchestration with status widget
    subagent-test.goSubagent testing utilities
    +

    Development

    + + + + + + + + + + + + + +
    ExtensionDescription
    dev-reload.goDevelopment live-reload
    +

    Subdirectory extensions

    + + + + + + + + + + + + + + + + + + + + + +
    DirectoryDescription
    kit-kit-agents/Multi-agent orchestration example
    kit-telegram/Telegram bot integration
    status-tools/Status bar tool examples
    `,headings:[{depth:2,text:"UI and display",id:"ui-and-display"},{depth:2,text:"Workflow and automation",id:"workflow-and-automation"},{depth:2,text:"Interactive features",id:"interactive-features"},{depth:2,text:"Agent and context",id:"agent-and-context"},{depth:2,text:"Multi-agent",id:"multi-agent"},{depth:2,text:"Development",id:"development"},{depth:2,text:"Subdirectory extensions",id:"subdirectory-extensions"}],raw:` +# Extension Examples + +Kit ships with a rich set of example extensions in the \`examples/extensions/\` directory. These serve as both documentation and starting points for your own extensions. + +## UI and display + +| Extension | Description | +|-----------|-------------| +| \`minimal.go\` | Clean UI with custom footer | +| \`branded-output.go\` | Branded output rendering | +| \`header-footer-demo.go\` | Custom headers and footers | +| \`widget-status.go\` | Persistent status widgets | +| \`overlay-demo.go\` | Modal dialogs | +| \`tool-renderer-demo.go\` | Custom tool call rendering | +| \`custom-editor-demo.go\` | Vim-like modal editor | +| \`pirate.go\` | Pirate-themed personality | + +## Workflow and automation + +| Extension | Description | +|-----------|-------------| +| \`auto-commit.go\` | Auto-commit changes on shutdown | +| \`plan-mode.go\` | Read-only planning mode | +| \`permission-gate.go\` | Permission gating for destructive tools | +| \`confirm-destructive.go\` | Confirm destructive operations | +| \`protected-paths.go\` | Path protection for sensitive files | +| \`project-rules.go\` | Project-specific rules injection | +| \`compact-notify.go\` | Notification on conversation compaction | + +## Interactive features + +| Extension | Description | +|-----------|-------------| +| \`prompt-demo.go\` | Interactive prompts (select/confirm/input) | +| \`bookmark.go\` | Bookmark conversations | +| \`inline-bash.go\` | Inline bash execution | +| \`interactive-shell.go\` | Interactive shell integration | +| \`notify.go\` | Desktop notifications | + +## Agent and context + +| Extension | Description | +|-----------|-------------| +| \`tool-logger.go\` | Log all tool calls | +| \`context-inject.go\` | Inject context into conversations | +| \`summarize.go\` | Conversation summarization | +| \`lsp-diagnostics.go\` | LSP diagnostic integration | + +## Multi-agent + +| Extension | Description | +|-----------|-------------| +| \`kit-kit.go\` | Kit-in-Kit sub-agent spawning | +| \`subagent-widget.go\` | Multi-agent orchestration with status widget | +| \`subagent-test.go\` | Subagent testing utilities | + +## Development + +| Extension | Description | +|-----------|-------------| +| \`dev-reload.go\` | Development live-reload | + +## Subdirectory extensions + +| Directory | Description | +|-----------|-------------| +| \`kit-kit-agents/\` | Multi-agent orchestration example | +| \`kit-telegram/\` | Telegram bot integration | +| \`status-tools/\` | Status bar tool examples | +`};export{t as default}; diff --git a/assets/flags-CkTF-Pw-.js b/assets/flags-CkTF-Pw-.js new file mode 100644 index 00000000..b1868a4f --- /dev/null +++ b/assets/flags-CkTF-Pw-.js @@ -0,0 +1,237 @@ +const t={frontmatter:{title:"Global Flags",description:"Complete reference for all Kit CLI flags.",hidden:!1,toc:!0,draft:!1},html:`

    Global Flags

    +

    All flags can be passed to the root kit command.

    +

    Model and provider

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --model-manthropic/claude-sonnet-4-5-20250929Model to use (provider/model format)
    --provider-api-keyAPI key for the provider
    --provider-urlBase URL for provider API
    --tls-skip-verifyfalseSkip TLS certificate verification
    +

    Session management

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --session-sOpen specific JSONL session file
    --continue-cfalseResume most recent session for current directory
    --resume-rfalseInteractive session picker
    --no-sessionfalseEphemeral mode, no persistence
    +

    Behavior

    +

    These flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --quietfalseSuppress all output (non-interactive only)
    --jsonfalseOutput response as JSON (non-interactive only)
    --no-exitfalseEnter interactive mode after prompt completes
    --max-steps0Maximum agent steps (0 for unlimited)
    --streamtrueEnable streaming output
    --compactfalseEnable compact output mode
    --auto-compactfalseAuto-compact conversation near context limit
    +

    Extensions

    + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --extension-eLoad additional extension file(s) (repeatable)
    --no-extensionsfalseDisable all extensions
    +

    Generation parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --max-tokens4096Maximum tokens in response
    --temperature0.7Randomness 0.0–1.0
    --top-p0.95Nucleus sampling 0.0–1.0
    --top-k40Limit top K tokens
    --stop-sequencesCustom stop sequences (comma-separated)
    --thinking-leveloffExtended thinking level: off, minimal, low, medium, high
    +

    System

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagShortDefaultDescription
    --config~/.kit.ymlConfig file path
    --system-promptSystem prompt text or file path
    --debugfalseEnable debug logging
    `,headings:[{depth:2,text:"Model and provider",id:"model-and-provider"},{depth:2,text:"Session management",id:"session-management"},{depth:2,text:"Behavior",id:"behavior"},{depth:2,text:"Extensions",id:"extensions"},{depth:2,text:"Generation parameters",id:"generation-parameters"},{depth:2,text:"System",id:"system"}],raw:"\n# Global Flags\n\nAll flags can be passed to the root `kit` command.\n\n## Model and provider\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--model` | `-m` | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `--provider-api-key` | — | — | API key for the provider |\n| `--provider-url` | — | — | Base URL for provider API |\n| `--tls-skip-verify` | — | `false` | Skip TLS certificate verification |\n\n## Session management\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--session` | `-s` | — | Open specific JSONL session file |\n| `--continue` | `-c` | `false` | Resume most recent session for current directory |\n| `--resume` | `-r` | `false` | Interactive session picker |\n| `--no-session` | — | `false` | Ephemeral mode, no persistence |\n\n## Behavior\n\nThese flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode.\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--quiet` | — | `false` | Suppress all output (non-interactive only) |\n| `--json` | — | `false` | Output response as JSON (non-interactive only) |\n| `--no-exit` | — | `false` | Enter interactive mode after prompt completes |\n| `--max-steps` | — | `0` | Maximum agent steps (0 for unlimited) |\n| `--stream` | — | `true` | Enable streaming output |\n| `--compact` | — | `false` | Enable compact output mode |\n| `--auto-compact` | — | `false` | Auto-compact conversation near context limit |\n\n## Extensions\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--extension` | `-e` | — | Load additional extension file(s) (repeatable) |\n| `--no-extensions` | — | `false` | Disable all extensions |\n\n## Generation parameters\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--max-tokens` | — | `4096` | Maximum tokens in response |\n| `--temperature` | — | `0.7` | Randomness 0.0–1.0 |\n| `--top-p` | — | `0.95` | Nucleus sampling 0.0–1.0 |\n| `--top-k` | — | `40` | Limit top K tokens |\n| `--stop-sequences` | — | — | Custom stop sequences (comma-separated) |\n| `--thinking-level` | — | `off` | Extended thinking level: off, minimal, low, medium, high |\n\n## System\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--config` | — | `~/.kit.yml` | Config file path |\n| `--system-prompt` | — | — | System prompt text or file path |\n| `--debug` | — | `false` | Enable debug logging |\n"};export{t as default}; diff --git a/assets/index-BdEV_URu.js b/assets/index-BdEV_URu.js new file mode 100644 index 00000000..91bddd00 --- /dev/null +++ b/assets/index-BdEV_URu.js @@ -0,0 +1,1730 @@ +(function(){const h=document.createElement("link").relList;if(h&&h.supports&&h.supports("modulepreload"))return;for(const v of document.querySelectorAll('link[rel="modulepreload"]'))c(v);new MutationObserver(v=>{for(const E of v)if(E.type==="childList")for(const M of E.addedNodes)M.tagName==="LINK"&&M.rel==="modulepreload"&&c(M)}).observe(document,{childList:!0,subtree:!0});function d(v){const E={};return v.integrity&&(E.integrity=v.integrity),v.referrerPolicy&&(E.referrerPolicy=v.referrerPolicy),v.crossOrigin==="use-credentials"?E.credentials="include":v.crossOrigin==="anonymous"?E.credentials="omit":E.credentials="same-origin",E}function c(v){if(v.ep)return;v.ep=!0;const E=d(v);fetch(v.href,E)}})();function zh(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}var Lu={exports:{}},ii={};/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Yd;function Ch(){if(Yd)return ii;Yd=1;var u=Symbol.for("react.transitional.element"),h=Symbol.for("react.fragment");function d(c,v,E){var M=null;if(E!==void 0&&(M=""+E),v.key!==void 0&&(M=""+v.key),"key"in v){E={};for(var D in v)D!=="key"&&(E[D]=v[D])}else E=v;return v=E.ref,{$$typeof:u,type:c,key:M,ref:v!==void 0?v:null,props:E}}return ii.Fragment=h,ii.jsx=d,ii.jsxs=d,ii}var Kd;function jh(){return Kd||(Kd=1,Lu.exports=Ch()),Lu.exports}var s=jh(),Gu={exports:{}},ot={};/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Xd;function Mh(){if(Xd)return ot;Xd=1;var u=Symbol.for("react.transitional.element"),h=Symbol.for("react.portal"),d=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),v=Symbol.for("react.profiler"),E=Symbol.for("react.consumer"),M=Symbol.for("react.context"),D=Symbol.for("react.forward_ref"),z=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),G=Symbol.for("react.lazy"),R=Symbol.for("react.activity"),K=Symbol.iterator;function nt(m){return m===null||typeof m!="object"?null:(m=K&&m[K]||m["@@iterator"],typeof m=="function"?m:null)}var bt={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ot=Object.assign,jt={};function W(m,k,N){this.props=m,this.context=k,this.refs=jt,this.updater=N||bt}W.prototype.isReactComponent={},W.prototype.setState=function(m,k){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,k,"setState")},W.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function I(){}I.prototype=W.prototype;function ct(m,k,N){this.props=m,this.context=k,this.refs=jt,this.updater=N||bt}var Q=ct.prototype=new I;Q.constructor=ct,Ot(Q,W.prototype),Q.isPureReactComponent=!0;var Y=Array.isArray;function H(){}var U={H:null,A:null,T:null,S:null},at=Object.prototype.hasOwnProperty;function lt(m,k,N){var L=N.ref;return{$$typeof:u,type:m,key:k,ref:L!==void 0?L:null,props:N}}function P(m,k){return lt(m.type,k,m.props)}function mt(m){return typeof m=="object"&&m!==null&&m.$$typeof===u}function tt(m){var k={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(N){return k[N]})}var Mt=/\/+/g;function $t(m,k){return typeof m=="object"&&m!==null&&m.key!=null?tt(""+m.key):k.toString(36)}function ft(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(H,H):(m.status="pending",m.then(function(k){m.status==="pending"&&(m.status="fulfilled",m.value=k)},function(k){m.status==="pending"&&(m.status="rejected",m.reason=k)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function C(m,k,N,L,it){var rt=typeof m;(rt==="undefined"||rt==="boolean")&&(m=null);var Et=!1;if(m===null)Et=!0;else switch(rt){case"bigint":case"string":case"number":Et=!0;break;case"object":switch(m.$$typeof){case u:case h:Et=!0;break;case G:return Et=m._init,C(Et(m._payload),k,N,L,it)}}if(Et)return it=it(m),Et=L===""?"."+$t(m,0):L,Y(it)?(N="",Et!=null&&(N=Et.replace(Mt,"$&/")+"/"),C(it,k,N,"",function(Ze){return Ze})):it!=null&&(mt(it)&&(it=P(it,N+(it.key==null||m&&m.key===it.key?"":(""+it.key).replace(Mt,"$&/")+"/")+Et)),k.push(it)),1;Et=0;var It=L===""?".":L+":";if(Y(m))for(var Ut=0;Ut>>1,Tt=C[J];if(0>>1;Jv(N,Z))Lv(it,N)?(C[J]=it,C[L]=Z,J=L):(C[J]=N,C[k]=Z,J=k);else if(Lv(it,Z))C[J]=it,C[L]=Z,J=L;else break t}}return w}function v(C,w){var Z=C.sortIndex-w.sortIndex;return Z!==0?Z:C.id-w.id}if(u.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var E=performance;u.unstable_now=function(){return E.now()}}else{var M=Date,D=M.now();u.unstable_now=function(){return M.now()-D}}var z=[],y=[],G=1,R=null,K=3,nt=!1,bt=!1,Ot=!1,jt=!1,W=typeof setTimeout=="function"?setTimeout:null,I=typeof clearTimeout=="function"?clearTimeout:null,ct=typeof setImmediate<"u"?setImmediate:null;function Q(C){for(var w=d(y);w!==null;){if(w.callback===null)c(y);else if(w.startTime<=C)c(y),w.sortIndex=w.expirationTime,h(z,w);else break;w=d(y)}}function Y(C){if(Ot=!1,Q(C),!bt)if(d(z)!==null)bt=!0,H||(H=!0,tt());else{var w=d(y);w!==null&&ft(Y,w.startTime-C)}}var H=!1,U=-1,at=5,lt=-1;function P(){return jt?!0:!(u.unstable_now()-ltC&&P());){var J=R.callback;if(typeof J=="function"){R.callback=null,K=R.priorityLevel;var Tt=J(R.expirationTime<=C);if(C=u.unstable_now(),typeof Tt=="function"){R.callback=Tt,Q(C),w=!0;break e}R===d(z)&&c(z),Q(C)}else c(z);R=d(z)}if(R!==null)w=!0;else{var m=d(y);m!==null&&ft(Y,m.startTime-C),w=!1}}break t}finally{R=null,K=Z,nt=!1}w=void 0}}finally{w?tt():H=!1}}}var tt;if(typeof ct=="function")tt=function(){ct(mt)};else if(typeof MessageChannel<"u"){var Mt=new MessageChannel,$t=Mt.port2;Mt.port1.onmessage=mt,tt=function(){$t.postMessage(null)}}else tt=function(){W(mt,0)};function ft(C,w){U=W(function(){C(u.unstable_now())},w)}u.unstable_IdlePriority=5,u.unstable_ImmediatePriority=1,u.unstable_LowPriority=4,u.unstable_NormalPriority=3,u.unstable_Profiling=null,u.unstable_UserBlockingPriority=2,u.unstable_cancelCallback=function(C){C.callback=null},u.unstable_forceFrameRate=function(C){0>C||125J?(C.sortIndex=Z,h(y,C),d(z)===null&&C===d(y)&&(Ot?(I(U),U=-1):Ot=!0,ft(Y,Z-J))):(C.sortIndex=Tt,h(z,C),bt||nt||(bt=!0,H||(H=!0,tt()))),C},u.unstable_shouldYield=P,u.unstable_wrapCallback=function(C){var w=K;return function(){var Z=K;K=w;try{return C.apply(this,arguments)}finally{K=Z}}}})(Xu)),Xu}var Zd;function kh(){return Zd||(Zd=1,Ku.exports=_h()),Ku.exports}var Qu={exports:{}},re={};/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Jd;function Oh(){if(Jd)return re;Jd=1;var u=$u();function h(z){var y="https://react.dev/errors/"+z;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(h){console.error(h)}}return u(),Qu.exports=Oh(),Qu.exports}/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Fd;function Rh(){if(Fd)return oi;Fd=1;var u=kh(),h=$u(),d=Dh();function c(t){var e="https://react.dev/errors/"+t;if(1Tt||(t.current=J[Tt],J[Tt]=null,Tt--)}function N(t,e){Tt++,J[Tt]=t.current,t.current=e}var L=m(null),it=m(null),rt=m(null),Et=m(null);function It(t,e){switch(N(rt,e),N(it,t),N(L,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?fd(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=fd(e),t=dd(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}k(L),N(L,t)}function Ut(){k(L),k(it),k(rt)}function Ze(t){t.memoizedState!==null&&N(Et,t);var e=L.current,n=dd(e,t.type);e!==n&&(N(it,t),N(L,n))}function pa(t){it.current===t&&(k(L),k(it)),Et.current===t&&(k(Et),ei._currentValue=Z)}var ha,rl;function Je(t){if(ha===void 0)try{throw Error()}catch(n){var e=n.stack.trim().match(/\n( *(at )?)/);ha=e&&e[1]||"",rl=-1)":-1l||f[a]!==S[l]){var j=` +`+f[a].replace(" at new "," at ");return t.displayName&&j.includes("")&&(j=j.replace("",t.displayName)),j}while(1<=a&&0<=l);break}}}finally{cl=!1,Error.prepareStackTrace=n}return(n=t?t.displayName||t.name:"")?Je(n):""}function Oo(t,e){switch(t.tag){case 26:case 27:case 5:return Je(t.type);case 16:return Je("Lazy");case 13:return t.child!==e&&e!==null?Je("Suspense Fallback"):Je("Suspense");case 19:return Je("SuspenseList");case 0:case 15:return ga(t.type,!1);case 11:return ga(t.type.render,!1);case 1:return ga(t.type,!0);case 31:return Je("Activity");default:return""}}function We(t){try{var e="",n=null;do e+=Oo(t,n),n=t,t=t.return;while(t);return e}catch(a){return` +Error generating stack: `+a.message+` +`+a.stack}}var Fn=Object.prototype.hasOwnProperty,fl=u.unstable_scheduleCallback,va=u.unstable_cancelCallback,Do=u.unstable_shouldYield,si=u.unstable_requestPaint,se=u.unstable_now,ui=u.unstable_getCurrentPriorityLevel,te=u.unstable_ImmediatePriority,ya=u.unstable_UserBlockingPriority,bn=u.unstable_NormalPriority,Sn=u.unstable_LowPriority,ri=u.unstable_IdlePriority,Pu=u.log,xa=u.unstable_setDisableYieldValue,ye=null,ue=null;function je(t){if(typeof Pu=="function"&&xa(t),ue&&typeof ue.setStrictMode=="function")try{ue.setStrictMode(ye,t)}catch{}}var ee=Math.clz32?Math.clz32:Sa,ci=Math.log,ba=Math.LN2;function Sa(t){return t>>>=0,t===0?32:31-(ci(t)/ba|0)|0}var Fe=256,$e=262144,Ie=4194304;function Pe(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Ta(t,e,n){var a=t.pendingLanes;if(a===0)return 0;var l=0,i=t.suspendedLanes,o=t.pingedLanes;t=t.warmLanes;var r=a&134217727;return r!==0?(a=r&~i,a!==0?l=Pe(a):(o&=r,o!==0?l=Pe(o):n||(n=r&~t,n!==0&&(l=Pe(n))))):(r=a&~i,r!==0?l=Pe(r):o!==0?l=Pe(o):n||(n=a&~t,n!==0&&(l=Pe(n)))),l===0?0:e!==0&&e!==l&&(e&i)===0&&(i=l&-l,n=e&-e,i>=n||i===32&&(n&4194048)!==0)?e:l}function Tn(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Ne(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ea(){var t=Ie;return Ie<<=1,(Ie&62914560)===0&&(Ie=4194304),t}function Aa(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function En(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function fi(t,e,n,a,l,i){var o=t.pendingLanes;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=n,t.entangledLanes&=n,t.errorRecoveryDisabledLanes&=n,t.shellSuspendCounter=0;var r=t.entanglements,f=t.expirationTimes,S=t.hiddenUpdates;for(n=o&~n;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var xm=/[\n"\\]/g;function _e(t){return t.replace(xm,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Bo(t,e,n,a,l,i,o,r){t.name="",o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"?t.type=o:t.removeAttribute("type"),e!=null?o==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Me(e)):t.value!==""+Me(e)&&(t.value=""+Me(e)):o!=="submit"&&o!=="reset"||t.removeAttribute("value"),e!=null?wo(t,o,Me(e)):n!=null?wo(t,o,Me(n)):a!=null&&t.removeAttribute("value"),l==null&&i!=null&&(t.defaultChecked=!!i),l!=null&&(t.checked=l&&typeof l!="function"&&typeof l!="symbol"),r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?t.name=""+Me(r):t.removeAttribute("name")}function lr(t,e,n,a,l,i,o,r){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.type=i),e!=null||n!=null){if(!(i!=="submit"&&i!=="reset"||e!=null)){Ro(t);return}n=n!=null?""+Me(n):"",e=e!=null?""+Me(e):n,r||e===t.value||(t.value=e),t.defaultValue=e}a=a??l,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=r?t.checked:!!a,t.defaultChecked=!!a,o!=null&&typeof o!="function"&&typeof o!="symbol"&&typeof o!="boolean"&&(t.name=o),Ro(t)}function wo(t,e,n){e==="number"&&vi(t.ownerDocument)===t||t.defaultValue===""+n||(t.defaultValue=""+n)}function _a(t,e,n,a){if(t=t.options,e){e={};for(var l=0;l"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Lo=!1;if(an)try{var xl={};Object.defineProperty(xl,"passive",{get:function(){Lo=!0}}),window.addEventListener("test",xl,xl),window.removeEventListener("test",xl,xl)}catch{Lo=!1}var zn=null,Go=null,xi=null;function fr(){if(xi)return xi;var t,e=Go,n=e.length,a,l="value"in zn?zn.value:zn.textContent,i=l.length;for(t=0;t=Tl),vr=" ",yr=!1;function xr(t,e){switch(t){case"keyup":return Zm.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function br(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Ra=!1;function Wm(t,e){switch(t){case"compositionend":return br(e);case"keypress":return e.which!==32?null:(yr=!0,vr);case"textInput":return t=e.data,t===vr&&yr?null:t;default:return null}}function Fm(t,e){if(Ra)return t==="compositionend"||!Vo&&xr(t,e)?(t=fr(),xi=Go=zn=null,Ra=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:n,offset:e-t};t=a}t:{for(;n;){if(n.nextSibling){n=n.nextSibling;break t}n=n.parentNode}n=void 0}n=Mr(n)}}function kr(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?kr(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Or(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=vi(t.document);e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=vi(t.document)}return e}function Wo(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var lp=an&&"documentMode"in document&&11>=document.documentMode,Ba=null,Fo=null,Cl=null,$o=!1;function Dr(t,e,n){var a=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;$o||Ba==null||Ba!==vi(a)||(a=Ba,"selectionStart"in a&&Wo(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Cl&&zl(Cl,a)||(Cl=a,a=mo(Fo,"onSelect"),0>=o,l-=o,Ke=1<<32-ee(e)+l|n<ut?(vt=V,V=null):vt=V.sibling;var zt=T(g,V,b[ut],_);if(zt===null){V===null&&(V=vt);break}t&&V&&zt.alternate===null&&e(g,V),p=i(zt,p,ut),At===null?F=zt:At.sibling=zt,At=zt,V=vt}if(ut===b.length)return n(g,V),xt&&on(g,ut),F;if(V===null){for(;utut?(vt=V,V=null):vt=V.sibling;var Zn=T(g,V,zt.value,_);if(Zn===null){V===null&&(V=vt);break}t&&V&&Zn.alternate===null&&e(g,V),p=i(Zn,p,ut),At===null?F=Zn:At.sibling=Zn,At=Zn,V=vt}if(zt.done)return n(g,V),xt&&on(g,ut),F;if(V===null){for(;!zt.done;ut++,zt=b.next())zt=O(g,zt.value,_),zt!==null&&(p=i(zt,p,ut),At===null?F=zt:At.sibling=zt,At=zt);return xt&&on(g,ut),F}for(V=a(V);!zt.done;ut++,zt=b.next())zt=A(V,g,ut,zt.value,_),zt!==null&&(t&&zt.alternate!==null&&V.delete(zt.key===null?ut:zt.key),p=i(zt,p,ut),At===null?F=zt:At.sibling=zt,At=zt);return t&&V.forEach(function(Ah){return e(g,Ah)}),xt&&on(g,ut),F}function Bt(g,p,b,_){if(typeof b=="object"&&b!==null&&b.type===Ot&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case nt:t:{for(var F=b.key;p!==null;){if(p.key===F){if(F=b.type,F===Ot){if(p.tag===7){n(g,p.sibling),_=l(p,b.props.children),_.return=g,g=_;break t}}else if(p.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===at&&sa(F)===p.type){n(g,p.sibling),_=l(p,b.props),Dl(_,b),_.return=g,g=_;break t}n(g,p);break}else e(g,p);p=p.sibling}b.type===Ot?(_=na(b.props.children,g.mode,_,b.key),_.return=g,g=_):(_=_i(b.type,b.key,b.props,null,g.mode,_),Dl(_,b),_.return=g,g=_)}return o(g);case bt:t:{for(F=b.key;p!==null;){if(p.key===F)if(p.tag===4&&p.stateNode.containerInfo===b.containerInfo&&p.stateNode.implementation===b.implementation){n(g,p.sibling),_=l(p,b.children||[]),_.return=g,g=_;break t}else{n(g,p);break}else e(g,p);p=p.sibling}_=ls(b,g.mode,_),_.return=g,g=_}return o(g);case at:return b=sa(b),Bt(g,p,b,_)}if(ft(b))return X(g,p,b,_);if(tt(b)){if(F=tt(b),typeof F!="function")throw Error(c(150));return b=F.call(b),$(g,p,b,_)}if(typeof b.then=="function")return Bt(g,p,Ui(b),_);if(b.$$typeof===ct)return Bt(g,p,Di(g,b),_);Hi(g,b)}return typeof b=="string"&&b!==""||typeof b=="number"||typeof b=="bigint"?(b=""+b,p!==null&&p.tag===6?(n(g,p.sibling),_=l(p,b),_.return=g,g=_):(n(g,p),_=as(b,g.mode,_),_.return=g,g=_),o(g)):n(g,p)}return function(g,p,b,_){try{Ol=0;var F=Bt(g,p,b,_);return Qa=null,F}catch(V){if(V===Xa||V===Bi)throw V;var At=be(29,V,null,g.mode);return At.lanes=_,At.return=g,At}finally{}}}var ra=ec(!0),nc=ec(!1),kn=!1;function gs(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function vs(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function On(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Dn(t,e,n){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(Ct&2)!==0){var l=a.pending;return l===null?e.next=e:(e.next=l.next,l.next=e),a.pending=e,e=Mi(t),qr(t,null,n),e}return ji(t,a,e,n),Mi(t)}function Rl(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194048)!==0)){var a=e.lanes;a&=t.pendingLanes,n|=a,e.lanes=n,ml(t,n)}}function ys(t,e){var n=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,n===a)){var l=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};i===null?l=i=o:i=i.next=o,n=n.next}while(n!==null);i===null?l=i=e:i=i.next=e}else l=i=e;n={baseState:a.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:a.shared,callbacks:a.callbacks},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}var xs=!1;function Bl(){if(xs){var t=Ka;if(t!==null)throw t}}function wl(t,e,n,a){xs=!1;var l=t.updateQueue;kn=!1;var i=l.firstBaseUpdate,o=l.lastBaseUpdate,r=l.shared.pending;if(r!==null){l.shared.pending=null;var f=r,S=f.next;f.next=null,o===null?i=S:o.next=S,o=f;var j=t.alternate;j!==null&&(j=j.updateQueue,r=j.lastBaseUpdate,r!==o&&(r===null?j.firstBaseUpdate=S:r.next=S,j.lastBaseUpdate=f))}if(i!==null){var O=l.baseState;o=0,j=S=f=null,r=i;do{var T=r.lane&-536870913,A=T!==r.lane;if(A?(gt&T)===T:(a&T)===T){T!==0&&T===Ya&&(xs=!0),j!==null&&(j=j.next={lane:0,tag:r.tag,payload:r.payload,callback:null,next:null});t:{var X=t,$=r;T=e;var Bt=n;switch($.tag){case 1:if(X=$.payload,typeof X=="function"){O=X.call(Bt,O,T);break t}O=X;break t;case 3:X.flags=X.flags&-65537|128;case 0:if(X=$.payload,T=typeof X=="function"?X.call(Bt,O,T):X,T==null)break t;O=R({},O,T);break t;case 2:kn=!0}}T=r.callback,T!==null&&(t.flags|=64,A&&(t.flags|=8192),A=l.callbacks,A===null?l.callbacks=[T]:A.push(T))}else A={lane:T,tag:r.tag,payload:r.payload,callback:r.callback,next:null},j===null?(S=j=A,f=O):j=j.next=A,o|=T;if(r=r.next,r===null){if(r=l.shared.pending,r===null)break;A=r,r=A.next,A.next=null,l.lastBaseUpdate=A,l.shared.pending=null}}while(!0);j===null&&(f=O),l.baseState=f,l.firstBaseUpdate=S,l.lastBaseUpdate=j,i===null&&(l.shared.lanes=0),Hn|=o,t.lanes=o,t.memoizedState=O}}function ac(t,e){if(typeof t!="function")throw Error(c(191,t));t.call(e)}function lc(t,e){var n=t.callbacks;if(n!==null)for(t.callbacks=null,t=0;ti?i:8;var o=C.T,r={};C.T=r,Ns(t,!1,e,n);try{var f=l(),S=C.S;if(S!==null&&S(r,f),f!==null&&typeof f=="object"&&typeof f.then=="function"){var j=mp(f,a);Nl(t,e,j,ze(t))}else Nl(t,e,a,ze(t))}catch(O){Nl(t,e,{then:function(){},status:"rejected",reason:O},ze())}finally{w.p=i,o!==null&&r.types!==null&&(o.types=r.types),C.T=o}}function xp(){}function Us(t,e,n,a){if(t.tag!==5)throw Error(c(476));var l=Uc(t).queue;wc(t,l,e,Z,n===null?xp:function(){return Hc(t),n(a)})}function Uc(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:Z,baseState:Z,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:cn,lastRenderedState:Z},next:null};var n={};return e.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:cn,lastRenderedState:n},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Hc(t){var e=Uc(t);e.next===null&&(e=t.alternate.memoizedState),Nl(t,e.next.queue,{},ze())}function Hs(){return le(ei)}function Nc(){return Kt().memoizedState}function qc(){return Kt().memoizedState}function bp(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var n=ze();t=On(n);var a=Dn(e,t,n);a!==null&&(ve(a,e,n),Rl(a,e,n)),e={cache:ds()},t.payload=e;return}e=e.return}}function Sp(t,e,n){var a=ze();n={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Zi(t)?Gc(e,n):(n=es(t,e,n,a),n!==null&&(ve(n,t,a),Yc(n,e,a)))}function Lc(t,e,n){var a=ze();Nl(t,e,n,a)}function Nl(t,e,n,a){var l={lane:a,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Zi(t))Gc(e,l);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var o=e.lastRenderedState,r=i(o,n);if(l.hasEagerState=!0,l.eagerState=r,xe(r,o))return ji(t,e,l,0),wt===null&&Ci(),!1}catch{}finally{}if(n=es(t,e,l,a),n!==null)return ve(n,t,a),Yc(n,e,a),!0}return!1}function Ns(t,e,n,a){if(a={lane:2,revertLane:gu(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},Zi(t)){if(e)throw Error(c(479))}else e=es(t,n,a,2),e!==null&&ve(e,t,2)}function Zi(t){var e=t.alternate;return t===st||e!==null&&e===st}function Gc(t,e){Za=Li=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Yc(t,e,n){if((n&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,n|=a,e.lanes=n,ml(t,n)}}var ql={readContext:le,use:Ki,useCallback:Lt,useContext:Lt,useEffect:Lt,useImperativeHandle:Lt,useLayoutEffect:Lt,useInsertionEffect:Lt,useMemo:Lt,useReducer:Lt,useRef:Lt,useState:Lt,useDebugValue:Lt,useDeferredValue:Lt,useTransition:Lt,useSyncExternalStore:Lt,useId:Lt,useHostTransitionStatus:Lt,useFormState:Lt,useActionState:Lt,useOptimistic:Lt,useMemoCache:Lt,useCacheRefresh:Lt};ql.useEffectEvent=Lt;var Kc={readContext:le,use:Ki,useCallback:function(t,e){return fe().memoizedState=[t,e===void 0?null:e],t},useContext:le,useEffect:Cc,useImperativeHandle:function(t,e,n){n=n!=null?n.concat([t]):null,Qi(4194308,4,kc.bind(null,e,t),n)},useLayoutEffect:function(t,e){return Qi(4194308,4,t,e)},useInsertionEffect:function(t,e){Qi(4,2,t,e)},useMemo:function(t,e){var n=fe();e=e===void 0?null:e;var a=t();if(ca){je(!0);try{t()}finally{je(!1)}}return n.memoizedState=[a,e],a},useReducer:function(t,e,n){var a=fe();if(n!==void 0){var l=n(e);if(ca){je(!0);try{n(e)}finally{je(!1)}}}else l=e;return a.memoizedState=a.baseState=l,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:l},a.queue=t,t=t.dispatch=Sp.bind(null,st,t),[a.memoizedState,t]},useRef:function(t){var e=fe();return t={current:t},e.memoizedState=t},useState:function(t){t=Os(t);var e=t.queue,n=Lc.bind(null,st,e);return e.dispatch=n,[t.memoizedState,n]},useDebugValue:Bs,useDeferredValue:function(t,e){var n=fe();return ws(n,t,e)},useTransition:function(){var t=Os(!1);return t=wc.bind(null,st,t.queue,!0,!1),fe().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,n){var a=st,l=fe();if(xt){if(n===void 0)throw Error(c(407));n=n()}else{if(n=e(),wt===null)throw Error(c(349));(gt&127)!==0||cc(a,e,n)}l.memoizedState=n;var i={value:n,getSnapshot:e};return l.queue=i,Cc(dc.bind(null,a,i,t),[t]),a.flags|=2048,Wa(9,{destroy:void 0},fc.bind(null,a,i,n,e),null),n},useId:function(){var t=fe(),e=wt.identifierPrefix;if(xt){var n=Xe,a=Ke;n=(a&~(1<<32-ee(a)-1)).toString(32)+n,e="_"+e+"R_"+n,n=Gi++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof a.is=="string"?o.createElement("select",{is:a.is}):o.createElement("select"),a.multiple?i.multiple=!0:a.size&&(i.size=a.size);break;default:i=typeof a.is=="string"?o.createElement(l,{is:a.is}):o.createElement(l)}}i[Qt]=e,i[ne]=a;t:for(o=e.child;o!==null;){if(o.tag===5||o.tag===6)i.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===e)break t;for(;o.sibling===null;){if(o.return===null||o.return===e)break t;o=o.return}o.sibling.return=o.return,o=o.sibling}e.stateNode=i;t:switch(oe(i,l,a),l){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&dn(e)}}return Nt(e),Is(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,n),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&dn(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(c(166));if(t=rt.current,La(e)){if(t=e.stateNode,n=e.memoizedProps,a=null,l=ae,l!==null)switch(l.tag){case 27:case 5:a=l.memoizedProps}t[Qt]=e,t=!!(t.nodeValue===n||a!==null&&a.suppressHydrationWarning===!0||rd(t.nodeValue,n)),t||Mn(e,!0)}else t=po(t).createTextNode(a),t[Qt]=e,e.stateNode=t}return Nt(e),null;case 31:if(n=e.memoizedState,t===null||t.memoizedState!==null){if(a=La(e),n!==null){if(t===null){if(!a)throw Error(c(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(c(557));t[Qt]=e}else aa(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Nt(e),t=!1}else n=us(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=n),t=!0;if(!t)return e.flags&256?(Te(e),e):(Te(e),null);if((e.flags&128)!==0)throw Error(c(558))}return Nt(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(l=La(e),a!==null&&a.dehydrated!==null){if(t===null){if(!l)throw Error(c(318));if(l=e.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(c(317));l[Qt]=e}else aa(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Nt(e),l=!1}else l=us(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),l=!0;if(!l)return e.flags&256?(Te(e),e):(Te(e),null)}return Te(e),(e.flags&128)!==0?(e.lanes=n,e):(n=a!==null,t=t!==null&&t.memoizedState!==null,n&&(a=e.child,l=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(l=a.alternate.memoizedState.cachePool.pool),i=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(i=a.memoizedState.cachePool.pool),i!==l&&(a.flags|=2048)),n!==t&&n&&(e.child.flags|=8192),Ii(e,e.updateQueue),Nt(e),null);case 4:return Ut(),t===null&&bu(e.stateNode.containerInfo),Nt(e),null;case 10:return un(e.type),Nt(e),null;case 19:if(k(Yt),a=e.memoizedState,a===null)return Nt(e),null;if(l=(e.flags&128)!==0,i=a.rendering,i===null)if(l)Gl(a,!1);else{if(Gt!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(i=qi(t),i!==null){for(e.flags|=128,Gl(a,!1),t=i.updateQueue,e.updateQueue=t,Ii(e,t),e.subtreeFlags=0,t=n,n=e.child;n!==null;)Lr(n,t),n=n.sibling;return N(Yt,Yt.current&1|2),xt&&on(e,a.treeForkCount),e.child}t=t.sibling}a.tail!==null&&se()>ao&&(e.flags|=128,l=!0,Gl(a,!1),e.lanes=4194304)}else{if(!l)if(t=qi(i),t!==null){if(e.flags|=128,l=!0,t=t.updateQueue,e.updateQueue=t,Ii(e,t),Gl(a,!0),a.tail===null&&a.tailMode==="hidden"&&!i.alternate&&!xt)return Nt(e),null}else 2*se()-a.renderingStartTime>ao&&n!==536870912&&(e.flags|=128,l=!0,Gl(a,!1),e.lanes=4194304);a.isBackwards?(i.sibling=e.child,e.child=i):(t=a.last,t!==null?t.sibling=i:e.child=i,a.last=i)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=se(),t.sibling=null,n=Yt.current,N(Yt,l?n&1|2:n&1),xt&&on(e,a.treeForkCount),t):(Nt(e),null);case 22:case 23:return Te(e),Ss(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?(n&536870912)!==0&&(e.flags&128)===0&&(Nt(e),e.subtreeFlags&6&&(e.flags|=8192)):Nt(e),n=e.updateQueue,n!==null&&Ii(e,n.retryQueue),n=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==n&&(e.flags|=2048),t!==null&&k(oa),null;case 24:return n=null,t!==null&&(n=t.memoizedState.cache),e.memoizedState.cache!==n&&(e.flags|=2048),un(Vt),Nt(e),null;case 25:return null;case 30:return null}throw Error(c(156,e.tag))}function Cp(t,e){switch(os(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return un(Vt),Ut(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return pa(e),null;case 31:if(e.memoizedState!==null){if(Te(e),e.alternate===null)throw Error(c(340));aa()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(Te(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(c(340));aa()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return k(Yt),null;case 4:return Ut(),null;case 10:return un(e.type),null;case 22:case 23:return Te(e),Ss(),t!==null&&k(oa),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return un(Vt),null;case 25:return null;default:return null}}function pf(t,e){switch(os(e),e.tag){case 3:un(Vt),Ut();break;case 26:case 27:case 5:pa(e);break;case 4:Ut();break;case 31:e.memoizedState!==null&&Te(e);break;case 13:Te(e);break;case 19:k(Yt);break;case 10:un(e.type);break;case 22:case 23:Te(e),Ss(),t!==null&&k(oa);break;case 24:un(Vt)}}function Yl(t,e){try{var n=e.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var l=a.next;n=l;do{if((n.tag&t)===t){a=void 0;var i=n.create,o=n.inst;a=i(),o.destroy=a}n=n.next}while(n!==l)}}catch(r){kt(e,e.return,r)}}function wn(t,e,n){try{var a=e.updateQueue,l=a!==null?a.lastEffect:null;if(l!==null){var i=l.next;a=i;do{if((a.tag&t)===t){var o=a.inst,r=o.destroy;if(r!==void 0){o.destroy=void 0,l=e;var f=n,S=r;try{S()}catch(j){kt(l,f,j)}}}a=a.next}while(a!==i)}}catch(j){kt(e,e.return,j)}}function hf(t){var e=t.updateQueue;if(e!==null){var n=t.stateNode;try{lc(e,n)}catch(a){kt(t,t.return,a)}}}function gf(t,e,n){n.props=fa(t.type,t.memoizedProps),n.state=t.memoizedState;try{n.componentWillUnmount()}catch(a){kt(t,e,a)}}function Kl(t,e){try{var n=t.ref;if(n!==null){switch(t.tag){case 26:case 27:case 5:var a=t.stateNode;break;case 30:a=t.stateNode;break;default:a=t.stateNode}typeof n=="function"?t.refCleanup=n(a):n.current=a}}catch(l){kt(t,e,l)}}function Qe(t,e){var n=t.ref,a=t.refCleanup;if(n!==null)if(typeof a=="function")try{a()}catch(l){kt(t,e,l)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(l){kt(t,e,l)}else n.current=null}function vf(t){var e=t.type,n=t.memoizedProps,a=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":n.autoFocus&&a.focus();break t;case"img":n.src?a.src=n.src:n.srcSet&&(a.srcset=n.srcSet)}}catch(l){kt(t,t.return,l)}}function Ps(t,e,n){try{var a=t.stateNode;Jp(a,t.type,n,e),a[ne]=e}catch(l){kt(t,t.return,l)}}function yf(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Yn(t.type)||t.tag===4}function tu(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||yf(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&Yn(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function eu(t,e,n){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(t,e):(e=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,e.appendChild(t),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=nn));else if(a!==4&&(a===27&&Yn(t.type)&&(n=t.stateNode,e=null),t=t.child,t!==null))for(eu(t,e,n),t=t.sibling;t!==null;)eu(t,e,n),t=t.sibling}function Pi(t,e,n){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(a!==4&&(a===27&&Yn(t.type)&&(n=t.stateNode),t=t.child,t!==null))for(Pi(t,e,n),t=t.sibling;t!==null;)Pi(t,e,n),t=t.sibling}function xf(t){var e=t.stateNode,n=t.memoizedProps;try{for(var a=t.type,l=e.attributes;l.length;)e.removeAttributeNode(l[0]);oe(e,a,n),e[Qt]=t,e[ne]=n}catch(i){kt(t,t.return,i)}}var mn=!1,Wt=!1,nu=!1,bf=typeof WeakSet=="function"?WeakSet:Set,Pt=null;function jp(t,e){if(t=t.containerInfo,Eu=So,t=Or(t),Wo(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else t:{n=(n=t.ownerDocument)&&n.defaultView||window;var a=n.getSelection&&n.getSelection();if(a&&a.rangeCount!==0){n=a.anchorNode;var l=a.anchorOffset,i=a.focusNode;a=a.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break t}var o=0,r=-1,f=-1,S=0,j=0,O=t,T=null;e:for(;;){for(var A;O!==n||l!==0&&O.nodeType!==3||(r=o+l),O!==i||a!==0&&O.nodeType!==3||(f=o+a),O.nodeType===3&&(o+=O.nodeValue.length),(A=O.firstChild)!==null;)T=O,O=A;for(;;){if(O===t)break e;if(T===n&&++S===l&&(r=o),T===i&&++j===a&&(f=o),(A=O.nextSibling)!==null)break;O=T,T=O.parentNode}O=A}n=r===-1||f===-1?null:{start:r,end:f}}else n=null}n=n||{start:0,end:0}}else n=null;for(Au={focusedElem:t,selectionRange:n},So=!1,Pt=e;Pt!==null;)if(e=Pt,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Pt=t;else for(;Pt!==null;){switch(e=Pt,i=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(n=0;n title"))),oe(i,a,n),i[Qt]=t,yt(i),a=i;break t;case"link":var o=Cd("link","href",l).get(a+(n.href||""));if(o){for(var r=0;rBt&&(o=Bt,Bt=$,$=o);var g=_r(r,$),p=_r(r,Bt);if(g&&p&&(A.rangeCount!==1||A.anchorNode!==g.node||A.anchorOffset!==g.offset||A.focusNode!==p.node||A.focusOffset!==p.offset)){var b=O.createRange();b.setStart(g.node,g.offset),A.removeAllRanges(),$>Bt?(A.addRange(b),A.extend(p.node,p.offset)):(b.setEnd(p.node,p.offset),A.addRange(b))}}}}for(O=[],A=r;A=A.parentNode;)A.nodeType===1&&O.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;rn?32:n,C.T=null,n=ru,ru=null;var i=qn,o=yn;if(Ft=0,tl=qn=null,yn=0,(Ct&6)!==0)throw Error(c(331));var r=Ct;if(Ct|=4,Of(i.current),Mf(i,i.current,o,n),Ct=r,Wl(0,!1),ue&&typeof ue.onPostCommitFiberRoot=="function")try{ue.onPostCommitFiberRoot(ye,i)}catch{}return!0}finally{w.p=l,C.T=a,Wf(t,e)}}function $f(t,e,n){e=Oe(n,e),e=Ys(t.stateNode,e,2),t=Dn(t,e,2),t!==null&&(En(t,2),Ve(t))}function kt(t,e,n){if(t.tag===3)$f(t,t,n);else for(;e!==null;){if(e.tag===3){$f(e,t,n);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Nn===null||!Nn.has(a))){t=Oe(n,t),n=$c(2),a=Dn(e,n,2),a!==null&&(Ic(n,a,e,t),En(a,2),Ve(a));break}}e=e.return}}function mu(t,e,n){var a=t.pingCache;if(a===null){a=t.pingCache=new kp;var l=new Set;a.set(e,l)}else l=a.get(e),l===void 0&&(l=new Set,a.set(e,l));l.has(n)||(iu=!0,l.add(n),t=wp.bind(null,t,e,n),e.then(t,t))}function wp(t,e,n){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&n,t.warmLanes&=~n,wt===t&&(gt&n)===n&&(Gt===4||Gt===3&&(gt&62914560)===gt&&300>se()-no?(Ct&2)===0&&el(t,0):ou|=n,Pa===gt&&(Pa=0)),Ve(t)}function If(t,e){e===0&&(e=Ea()),t=ea(t,e),t!==null&&(En(t,e),Ve(t))}function Up(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),If(t,n)}function Hp(t,e){var n=0;switch(t.tag){case 31:case 13:var a=t.stateNode,l=t.memoizedState;l!==null&&(n=l.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(c(314))}a!==null&&a.delete(e),If(t,n)}function Np(t,e){return fl(t,e)}var ro=null,al=null,pu=!1,co=!1,hu=!1,Gn=0;function Ve(t){t!==al&&t.next===null&&(al===null?ro=al=t:al=al.next=t),co=!0,pu||(pu=!0,Lp())}function Wl(t,e){if(!hu&&co){hu=!0;do for(var n=!1,a=ro;a!==null;){if(t!==0){var l=a.pendingLanes;if(l===0)var i=0;else{var o=a.suspendedLanes,r=a.pingedLanes;i=(1<<31-ee(42|t)+1)-1,i&=l&~(o&~r),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(n=!0,nd(a,i))}else i=gt,i=Ta(a,a===wt?i:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(i&3)===0||Tn(a,i)||(n=!0,nd(a,i));a=a.next}while(n);hu=!1}}function qp(){Pf()}function Pf(){co=pu=!1;var t=0;Gn!==0&&Fp()&&(t=Gn);for(var e=se(),n=null,a=ro;a!==null;){var l=a.next,i=td(a,e);i===0?(a.next=null,n===null?ro=l:n.next=l,l===null&&(al=n)):(n=a,(t!==0||(i&3)!==0)&&(co=!0)),a=l}Ft!==0&&Ft!==5||Wl(t),Gn!==0&&(Gn=0)}function td(t,e){for(var n=t.suspendedLanes,a=t.pingedLanes,l=t.expirationTimes,i=t.pendingLanes&-62914561;0r)break;var j=f.transferSize,O=f.initiatorType;j&&cd(O)&&(f=f.responseEnd,o+=j*(f"u"?null:document;function Td(t,e,n){var a=ll;if(a&&typeof e=="string"&&e){var l=_e(e);l='link[rel="'+t+'"][href="'+l+'"]',typeof n=="string"&&(l+='[crossorigin="'+n+'"]'),Sd.has(l)||(Sd.add(l),t={rel:t,crossOrigin:n,href:e},a.querySelector(l)===null&&(e=a.createElement("link"),oe(e,"link",t),yt(e),a.head.appendChild(e)))}}function ih(t){xn.D(t),Td("dns-prefetch",t,null)}function oh(t,e){xn.C(t,e),Td("preconnect",t,e)}function sh(t,e,n){xn.L(t,e,n);var a=ll;if(a&&t&&e){var l='link[rel="preload"][as="'+_e(e)+'"]';e==="image"&&n&&n.imageSrcSet?(l+='[imagesrcset="'+_e(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(l+='[imagesizes="'+_e(n.imageSizes)+'"]')):l+='[href="'+_e(t)+'"]';var i=l;switch(e){case"style":i=il(t);break;case"script":i=ol(t)}He.has(i)||(t=R({rel:"preload",href:e==="image"&&n&&n.imageSrcSet?void 0:t,as:e},n),He.set(i,t),a.querySelector(l)!==null||e==="style"&&a.querySelector(Pl(i))||e==="script"&&a.querySelector(ti(i))||(e=a.createElement("link"),oe(e,"link",t),yt(e),a.head.appendChild(e)))}}function uh(t,e){xn.m(t,e);var n=ll;if(n&&t){var a=e&&typeof e.as=="string"?e.as:"script",l='link[rel="modulepreload"][as="'+_e(a)+'"][href="'+_e(t)+'"]',i=l;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=ol(t)}if(!He.has(i)&&(t=R({rel:"modulepreload",href:t},e),He.set(i,t),n.querySelector(l)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(ti(i)))return}a=n.createElement("link"),oe(a,"link",t),yt(a),n.head.appendChild(a)}}}function rh(t,e,n){xn.S(t,e,n);var a=ll;if(a&&t){var l=St(a).hoistableStyles,i=il(t);e=e||"default";var o=l.get(i);if(!o){var r={loading:0,preload:null};if(o=a.querySelector(Pl(i)))r.loading=5;else{t=R({rel:"stylesheet",href:t,"data-precedence":e},n),(n=He.get(i))&&Ou(t,n);var f=o=a.createElement("link");yt(f),oe(f,"link",t),f._p=new Promise(function(S,j){f.onload=S,f.onerror=j}),f.addEventListener("load",function(){r.loading|=1}),f.addEventListener("error",function(){r.loading|=2}),r.loading|=4,go(o,e,a)}o={type:"stylesheet",instance:o,count:1,state:r},l.set(i,o)}}}function ch(t,e){xn.X(t,e);var n=ll;if(n&&t){var a=St(n).hoistableScripts,l=ol(t),i=a.get(l);i||(i=n.querySelector(ti(l)),i||(t=R({src:t,async:!0},e),(e=He.get(l))&&Du(t,e),i=n.createElement("script"),yt(i),oe(i,"link",t),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function fh(t,e){xn.M(t,e);var n=ll;if(n&&t){var a=St(n).hoistableScripts,l=ol(t),i=a.get(l);i||(i=n.querySelector(ti(l)),i||(t=R({src:t,async:!0,type:"module"},e),(e=He.get(l))&&Du(t,e),i=n.createElement("script"),yt(i),oe(i,"link",t),n.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},a.set(l,i))}}function Ed(t,e,n,a){var l=(l=rt.current)?ho(l):null;if(!l)throw Error(c(446));switch(t){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(e=il(n.href),n=St(l).hoistableStyles,a=n.get(e),a||(a={type:"style",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){t=il(n.href);var i=St(l).hoistableStyles,o=i.get(t);if(o||(l=l.ownerDocument||l,o={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(t,o),(i=l.querySelector(Pl(t)))&&!i._p&&(o.instance=i,o.state.loading=5),He.has(t)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},He.set(t,n),i||dh(l,t,n,o.state))),e&&a===null)throw Error(c(528,""));return o}if(e&&a!==null)throw Error(c(529,""));return null;case"script":return e=n.async,n=n.src,typeof n=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=ol(n),n=St(l).hoistableScripts,a=n.get(e),a||(a={type:"script",instance:null,count:0,state:null},n.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,t))}}function il(t){return'href="'+_e(t)+'"'}function Pl(t){return'link[rel="stylesheet"]['+t+"]"}function Ad(t){return R({},t,{"data-precedence":t.precedence,precedence:null})}function dh(t,e,n,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),oe(e,"link",n),yt(e),t.head.appendChild(e))}function ol(t){return'[src="'+_e(t)+'"]'}function ti(t){return"script[async]"+t}function zd(t,e,n){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+_e(n.href)+'"]');if(a)return e.instance=a,yt(a),a;var l=R({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),yt(a),oe(a,"style",l),go(a,n.precedence,t),e.instance=a;case"stylesheet":l=il(n.href);var i=t.querySelector(Pl(l));if(i)return e.state.loading|=4,e.instance=i,yt(i),i;a=Ad(n),(l=He.get(l))&&Ou(a,l),i=(t.ownerDocument||t).createElement("link"),yt(i);var o=i;return o._p=new Promise(function(r,f){o.onload=r,o.onerror=f}),oe(i,"link",a),e.state.loading|=4,go(i,n.precedence,t),e.instance=i;case"script":return i=ol(n.src),(l=t.querySelector(ti(i)))?(e.instance=l,yt(l),l):(a=n,(l=He.get(i))&&(a=R({},n),Du(a,l)),t=t.ownerDocument||t,l=t.createElement("script"),yt(l),oe(l,"link",a),t.head.appendChild(l),e.instance=l);case"void":return null;default:throw Error(c(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(a=e.instance,e.state.loading|=4,go(a,n.precedence,t));return e.instance}function go(t,e,n){for(var a=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),l=a.length?a[a.length-1]:null,i=l,o=0;o title"):null)}function mh(t,e,n){if(n===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;switch(e.rel){case"stylesheet":return t=e.disabled,typeof e.precedence=="string"&&t==null;default:return!0}case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function Md(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function ph(t,e,n,a){if(n.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var l=il(a.href),i=e.querySelector(Pl(l));if(i){e=i._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=yo.bind(t),e.then(t,t)),n.state.loading|=4,n.instance=i,yt(i);return}i=e.ownerDocument||e,a=Ad(a),(l=He.get(l))&&Ou(a,l),i=i.createElement("link"),yt(i);var o=i;o._p=new Promise(function(r,f){o.onload=r,o.onerror=f}),oe(i,"link",a),n.instance=i}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(n,e),(e=n.state.preload)&&(n.state.loading&3)===0&&(t.count++,n=yo.bind(t),e.addEventListener("load",n),e.addEventListener("error",n))}}var Ru=0;function hh(t,e){return t.stylesheets&&t.count===0&&bo(t,t.stylesheets),0Ru?50:800)+e);return t.unsuspend=n,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(l)}}:null}function yo(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)bo(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var xo=null;function bo(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,xo=new Map,e.forEach(gh,t),xo=null,yo.call(t))}function gh(t,e){if(!(e.state.loading&4)){var n=xo.get(t);if(n)var a=n.get(null);else{n=new Map,xo.set(t,n);for(var l=t.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(h){console.error(h)}}return u(),Yu.exports=Rh(),Yu.exports}var wh=Bh();const Uh="modulepreload",Hh=function(u){return"/"+u},Id={},Xt=function(h,d,c){let v=Promise.resolve();if(d&&d.length>0){let M=function(y){return Promise.all(y.map(G=>Promise.resolve(G).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};document.getElementsByTagName("link");const D=document.querySelector("meta[property=csp-nonce]"),z=(D==null?void 0:D.nonce)||(D==null?void 0:D.getAttribute("nonce"));v=M(d.map(y=>{if(y=Hh(y),y in Id)return;Id[y]=!0;const G=y.endsWith(".css"),R=G?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${y}"]${R}`))return;const K=document.createElement("link");if(K.rel=G?"stylesheet":Uh,G||(K.as="script"),K.crossOrigin="",K.href=y,z&&K.setAttribute("nonce",z),document.head.appendChild(K),G)return new Promise((nt,bt)=>{K.addEventListener("load",nt),K.addEventListener("error",()=>bt(new Error(`Unable to preload CSS for ${y}`)))})}))}function E(M){const D=new Event("vite:preloadError",{cancelable:!0});if(D.payload=M,window.dispatchEvent(D),!D.defaultPrevented)throw M}return v.then(M=>{for(const D of M||[])D.status==="rejected"&&E(D.reason);return h().catch(E)})},Mo={amber:{dark:{bg:"#09090b",sf:"#111114",sfH:"#18181c",bd:"#1e1e24",tx:"#e4e4e7",tx2:"#a1a1aa",txM:"#919199",ac:"#e8a845",acD:"rgba(232,168,69,0.12)",acT:"#fbbf24",cdBg:"#0c0c0f",cdTx:"#c4c4cc",sbBg:"#0c0c0e",hdBg:"rgba(9,9,11,0.85)"},light:{bg:"#fafaf9",sf:"#ffffff",sfH:"#f5f5f4",bd:"#e7e5e4",tx:"#1c1917",tx2:"#57534e",txM:"#706b66",ac:"#96640a",acD:"rgba(150,100,10,0.08)",acT:"#7a5208",cdBg:"#f5f3f0",cdTx:"#2c2520",sbBg:"#f5f5f3",hdBg:"rgba(250,250,249,0.85)"},fonts:{heading:"Instrument Serif",body:"DM Sans",code:"JetBrains Mono"}},editorial:{dark:{bg:"#080c1f",sf:"#0e1333",sfH:"#141940",bd:"#1a2050",tx:"#e8e6f0",tx2:"#b5b1c8",txM:"#9490ae",ac:"#ff6b4a",acD:"rgba(255,107,74,0.1)",acT:"#ff8a70",cdBg:"#0a0e27",cdTx:"#b8b4cc",sbBg:"#0a0e27",hdBg:"rgba(8,12,31,0.9)"},light:{bg:"#f6f4f0",sf:"#ffffff",sfH:"#eeece6",bd:"#ddd9d0",tx:"#1a1716",tx2:"#4a443e",txM:"#706960",ac:"#b83d22",acD:"rgba(184,61,34,0.07)",acT:"#9c3019",cdBg:"#edeae4",cdTx:"#3a3530",sbBg:"#f0ede8",hdBg:"rgba(246,244,240,0.92)"},fonts:{heading:"Cormorant Garamond",body:"Bricolage Grotesque",code:"Fira Code"}},cipher:{dark:{bg:"#050508",sf:"#0c0c12",sfH:"#12121a",bd:"#1a1a25",tx:"#d4ff00",tx2:"#8a90a0",txM:"#6a7080",ac:"#6666ff",acD:"rgba(102,102,255,0.10)",acT:"#8080ff",cdBg:"#08080e",cdTx:"#b0c870",sbBg:"#08080d",hdBg:"rgba(5,5,8,0.88)"},light:{bg:"#f0f2f5",sf:"#ffffff",sfH:"#e8eaef",bd:"#d0d4db",tx:"#0f1219",tx2:"#4a5060",txM:"#6a7080",ac:"#2020cc",acD:"rgba(32,32,204,0.08)",acT:"#1a1aa8",cdBg:"#e6e9ef",cdTx:"#2a3520",sbBg:"#ebedf2",hdBg:"rgba(240,242,245,0.90)"},fonts:{heading:"Bodoni Moda",body:"Space Grotesk",code:"Source Code Pro"}},mint:{dark:{bg:"#0d1117",sf:"#161b22",sfH:"#1c2129",bd:"#21262d",tx:"#e6edf3",tx2:"#8b949e",txM:"#6e7681",ac:"#0ea371",acD:"rgba(14,163,113,0.10)",acT:"#2dd4a0",cdBg:"#0a0e14",cdTx:"#adbac7",sbBg:"#0d1117",hdBg:"rgba(13,17,23,0.88)"},light:{bg:"#ffffff",sf:"#f6f8fa",sfH:"#eef1f5",bd:"#d8dee4",tx:"#1f2328",tx2:"#59636e",txM:"#6e7681",ac:"#0a7b53",acD:"rgba(10,123,83,0.07)",acT:"#087a50",cdBg:"#f0f3f6",cdTx:"#24292f",sbBg:"#f6f8fa",hdBg:"rgba(255,255,255,0.90)"},fonts:{heading:"Inter",body:"Inter",code:"Fira Code"}}},Nh=()=>s.jsx("svg",{width:22,height:22,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:s.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})}),qh=()=>s.jsx("svg",{width:18,height:18,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:s.jsx("path",{d:"M18 6L6 18M6 6l12 12"})}),Lh=()=>s.jsx("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:s.jsx("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4z"})});function um(u){let h="You are a helpful documentation assistant. Answer questions accurately based on the documentation provided below. If the answer isn't in the documentation, say so clearly. Keep answers concise and reference specific sections when possible.";if(u){const d=u.length>1e5?u.slice(0,1e5)+` + +[Documentation truncated...]`:u;h+=` + +Documentation: +${d}`}return h}async function Gh(u,h,d,c){var M,D,z;const v=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${h}`},body:JSON.stringify({model:d,messages:[{role:"system",content:um(c)},...u.map(y=>({role:y.role,content:y.content}))]})});if(!v.ok){const y=await v.text();throw new Error(`OpenAI API error (${v.status}): ${y}`)}return((z=(D=(M=(await v.json()).choices)==null?void 0:M[0])==null?void 0:D.message)==null?void 0:z.content)||"No response."}async function Yh(u,h,d,c){var M,D;const v=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"Content-Type":"application/json","x-api-key":h,"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"},body:JSON.stringify({model:d,max_tokens:1024,system:um(c),messages:u.map(z=>({role:z.role,content:z.content}))})});if(!v.ok){const z=await v.text();throw new Error(`Anthropic API error (${v.status}): ${z}`)}return((D=(M=(await v.json()).content)==null?void 0:M[0])==null?void 0:D.text)||"No response."}function Kh(u){return u==="openai"?"gpt-4o-mini":"claude-sonnet-4-20250514"}function Xh({provider:u,model:h,apiKey:d,context:c}){const[v,E]=B.useState(!1),[M,D]=B.useState([]),[z,y]=B.useState(""),[G,R]=B.useState(!1),[K,nt]=B.useState(null),bt=B.useRef(null),Ot=B.useRef(null),jt=d||(typeof window<"u"?window.__TOME_AI_API_KEY__:void 0),W=h||Kh(u);B.useEffect(()=>{var Q;(Q=bt.current)==null||Q.scrollIntoView({behavior:"smooth"})},[M]),B.useEffect(()=>{v&&setTimeout(()=>{var Q;return(Q=Ot.current)==null?void 0:Q.focus()},100)},[v]);const I=B.useCallback(async()=>{const Q=z.trim();if(!Q||G||!jt)return;const Y={role:"user",content:Q},H=[...M,Y];D(H),y(""),R(!0),nt(null);try{let U;u==="openai"?U=await Gh(H,jt,W,c):U=await Yh(H,jt,W,c),D(at=>[...at,{role:"assistant",content:U}])}catch(U){nt(U instanceof Error?U.message:"Failed to get response")}finally{R(!1)}},[z,G,M,u,jt,W,c]),ct=B.useCallback(Q=>{Q.key==="Enter"&&!Q.shiftKey&&(Q.preventDefault(),I())},[I]);return v?s.jsxs("div",{"data-testid":"ai-chat-panel",style:{position:"fixed",bottom:24,right:24,zIndex:900,width:380,maxWidth:"calc(100vw - 48px)",height:520,maxHeight:"calc(100vh - 48px)",background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:12,boxShadow:"0 16px 64px rgba(0,0,0,0.3)",display:"flex",flexDirection:"column",overflow:"hidden",fontFamily:"var(--font-body)"},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px",borderBottom:"1px solid var(--bd)",flexShrink:0},children:[s.jsx("span",{style:{fontSize:14,fontWeight:600,color:"var(--tx)"},children:"Ask AI"}),s.jsx("button",{"data-testid":"ai-chat-close",onClick:()=>E(!1),"aria-label":"Close AI chat",style:{background:"none",border:"none",color:"var(--txM)",cursor:"pointer",display:"flex",padding:4},children:s.jsx(qh,{})})]}),s.jsxs("div",{style:{flex:1,overflow:"auto",padding:"12px 16px"},children:[!jt&&s.jsxs("div",{"data-testid":"ai-chat-no-key",style:{textAlign:"center",color:"var(--txM)",fontSize:13,padding:"24px 8px",lineHeight:1.6},children:[s.jsx("p",{style:{marginBottom:8,fontWeight:500,color:"var(--tx)"},children:"AI not configured"}),s.jsxs("p",{style:{marginBottom:8},children:["To enable AI chat, set the ",s.jsx("code",{style:{fontFamily:"var(--font-code)",fontSize:"0.88em",background:"var(--cdBg)",padding:"0.15em 0.4em",borderRadius:4},children:"apiKeyEnv"})," in ",s.jsx("code",{style:{fontFamily:"var(--font-code)",fontSize:"0.88em",background:"var(--cdBg)",padding:"0.15em 0.4em",borderRadius:4},children:"tome.config.js"})," and provide the environment variable at build time."]}),s.jsxs("p",{style:{fontSize:11.5,color:"var(--txM)"},children:["Example: ",s.jsx("code",{style:{fontFamily:"var(--font-code)",fontSize:"0.88em",background:"var(--cdBg)",padding:"0.15em 0.4em",borderRadius:4},children:"TOME_AI_KEY=sk-... tome build"})]})]}),M.map((Q,Y)=>s.jsx("div",{"data-testid":`ai-chat-message-${Q.role}`,style:{marginBottom:12,display:"flex",justifyContent:Q.role==="user"?"flex-end":"flex-start"},children:s.jsx("div",{style:{maxWidth:"85%",padding:"8px 12px",borderRadius:10,fontSize:13,lineHeight:1.55,whiteSpace:"pre-wrap",wordBreak:"break-word",background:Q.role==="user"?"var(--ac)":"var(--cdBg)",color:Q.role==="user"?"#fff":"var(--tx)"},children:Q.content})},Y)),G&&s.jsx("div",{"data-testid":"ai-chat-loading",style:{display:"flex",justifyContent:"flex-start",marginBottom:12},children:s.jsx("div",{style:{padding:"8px 12px",borderRadius:10,fontSize:13,background:"var(--cdBg)",color:"var(--txM)"},children:"Thinking..."})}),K&&s.jsx("div",{"data-testid":"ai-chat-error",style:{padding:"8px 12px",borderRadius:8,fontSize:12,background:"rgba(220,50,50,0.1)",color:"#d44",marginBottom:12},children:K}),s.jsx("div",{ref:bt})]}),s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 12px",borderTop:"1px solid var(--bd)",flexShrink:0},children:[s.jsx("input",{ref:Ot,"data-testid":"ai-chat-input",value:z,onChange:Q=>y(Q.target.value),onKeyDown:ct,placeholder:jt?"Ask a question...":"API key required",disabled:!jt,style:{flex:1,background:"var(--cdBg)",border:"1px solid var(--bd)",borderRadius:8,padding:"8px 12px",color:"var(--tx)",fontSize:13,fontFamily:"var(--font-body)",outline:"none"}}),s.jsx("button",{"data-testid":"ai-chat-send",onClick:I,disabled:!jt||!z.trim()||G,"aria-label":"Send message",style:{width:34,height:34,borderRadius:8,background:jt&&z.trim()?"var(--ac)":"var(--cdBg)",color:jt&&z.trim()?"#fff":"var(--txM)",border:"none",cursor:jt&&z.trim()?"pointer":"default",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:s.jsx(Lh,{})})]})]}):s.jsx("button",{"data-testid":"ai-chat-button",onClick:()=>E(!0),"aria-label":"Open AI chat",style:{position:"fixed",bottom:24,right:24,zIndex:900,width:48,height:48,borderRadius:"50%",background:"var(--ac)",color:"#fff",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s"},children:s.jsx(Nh,{})})}function Qh(u){const h=/^#([0-9a-f]{6})$/i.exec(u.trim());if(!h)return null;const d=parseInt(h[1],16);return[d>>16&255,d>>8&255,d&255]}function Vh(u,h){const d=Qh(u);if(!d)return null;const[c,v,E]=d,M=`rgba(${c},${v},${E},${h?.12:.08})`,D=h?1.15:.85,z=Math.min(255,Math.round(c*D)),y=Math.min(255,Math.round(v*D)),G=Math.min(255,Math.round(E*D)),R=`rgb(${z},${y},${G})`;return{ac:u,acD:M,acT:R}}const Ce=({d:u,size:h=16})=>s.jsx("svg",{width:h,height:h,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:s.jsx("path",{d:u})}),rm=()=>s.jsx(Ce,{d:"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM21 21l-4.3-4.3"}),Pd=()=>s.jsx(Ce,{d:"M9 18l6-6-6-6",size:14}),Vu=()=>s.jsx(Ce,{d:"M6 9l6 6 6-6",size:14}),Zh=()=>s.jsx(Ce,{d:"M3 12h18M3 6h18M3 18h18",size:20}),Jh=()=>s.jsx(Ce,{d:"M18 6L6 18M6 6l12 12",size:18}),tm=()=>s.jsx(Ce,{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"}),em=()=>s.jsx(Ce,{d:"M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8Zm0-4a1 1 0 0 1 1-1v-1a1 1 0 0 1-2 0v1a1 1 0 0 1 1 1Zm0 16a1 1 0 0 1 1 1v1a1 1 0 0 1-2 0v-1a1 1 0 0 1 1-1ZM4 12a1 1 0 0 1-1 1H2a1 1 0 0 1 0-2h1a1 1 0 0 1 1 1Zm18-1h-1a1 1 0 0 1 0 2h1a1 1 0 0 1 0-2ZM6.34 6.34a1 1 0 0 1-1.41 0l-.71-.71a1 1 0 0 1 1.41-1.41l.71.71a1 1 0 0 1 0 1.41Zm12.73-2.12-.71.71a1 1 0 0 1-1.41-1.41l.71-.71a1 1 0 1 1 1.41 1.41ZM6.34 17.66l-.71.71a1 1 0 0 1-1.41-1.41l.71-.71a1 1 0 0 1 1.41 1.41Zm12.73 2.12-.71-.71a1 1 0 0 1 1.41-1.41l.71.71a1 1 0 0 1-1.41 1.41Z"}),nm=()=>s.jsx(Ce,{d:"M19 12H5M12 19l-7-7 7-7",size:14}),am=()=>s.jsx(Ce,{d:"M5 12h14M12 5l7 7-7 7",size:14}),Wh=()=>s.jsx(Ce,{d:"M17 3a2.83 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z",size:13});function Fh(u){const h=new Date(u),c=new Date().getTime()-h.getTime();if(isNaN(c))return"";const v=Math.floor(c/1e3),E=Math.floor(v/60),M=Math.floor(E/60),D=Math.floor(M/24),z=Math.floor(D/30),y=Math.floor(D/365);return v<60?"just now":E<60?`${E} minute${E===1?"":"s"} ago`:M<24?`${M} hour${M===1?"":"s"} ago`:D<30?`${D} day${D===1?"":"s"} ago`:z<12?`${z} month${z===1?"":"s"} ago`:y>=1?`${y} year${y===1?"":"s"} ago`:h.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}let ul=null;const $h="/_pagefind/pagefind.js";async function Ih(){if(ul)return ul;try{return ul=await import($h),await ul.init(),ul}catch{return null}}let _o=null;function Ph(){return _o||(_o=Xt(()=>import("./theme-BIHI7g3E.js"),[]).catch(()=>null),_o)}function t0({appId:u,apiKey:h,indexName:d,onNavigate:c,onClose:v,basePath:E=""}){const[M,D]=B.useState(null),[z,y]=B.useState(!1);B.useEffect(()=>{Ph().then(R=>{R&&R.DocSearch?D(()=>R.DocSearch):R&&R.default?D(()=>R.default):y(!0)})},[]);const G=B.useCallback(R=>{try{let nt=new URL(R,"http://localhost").pathname;if(E){const bt=E.replace(/\/$/,"");nt.startsWith(bt)&&(nt=nt.slice(bt.length))}return nt.replace(/^\//,"").replace(/\/index\.html$/,"").replace(/\.html$/,"")||"index"}catch{return"index"}},[E]);return z?s.jsx("div",{onClick:v,style:{position:"fixed",inset:0,zIndex:1e3,background:"rgba(0,0,0,0.55)",backdropFilter:"blur(6px)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"12vh"},children:s.jsx("div",{onClick:R=>R.stopPropagation(),style:{background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:12,width:"100%",maxWidth:520,boxShadow:"0 24px 80px rgba(0,0,0,0.4)",padding:"32px 18px",textAlign:"center",color:"var(--txM)",fontSize:14},children:"Algolia DocSearch is not available. Install @docsearch/react to enable it."})}):M?s.jsx("div",{"data-testid":"algolia-search-modal",children:s.jsx(M,{appId:u,apiKey:h,indexName:d,navigator:{navigate({itemUrl:R}){const K=G(R);c(K)}},hitComponent:({hit:R,children:K})=>s.jsx("a",{href:R.url,onClick:nt=>{nt.preventDefault();const bt=G(R.url);c(bt)},children:K})})}):s.jsx("div",{onClick:v,style:{position:"fixed",inset:0,zIndex:1e3,background:"rgba(0,0,0,0.55)",backdropFilter:"blur(6px)",display:"flex",alignItems:"flex-start",justifyContent:"center",paddingTop:"12vh"},children:s.jsx("div",{style:{background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:12,width:"100%",maxWidth:520,boxShadow:"0 24px 80px rgba(0,0,0,0.4)",padding:"32px 18px",textAlign:"center",color:"var(--txM)",fontSize:14},children:"Loading search..."})})}const e0=()=>s.jsx(Ce,{d:"M12 8v4l3 3m6-3a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z",size:14}),n0=()=>s.jsx(Ce,{d:"M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18ZM3.6 9h16.8M3.6 15h16.8M12 3a15 15 0 0 1 4 9 15 15 0 0 1-4 9 15 15 0 0 1-4-9 15 15 0 0 1 4-9Z",size:14}),a0=()=>s.jsx(Ce,{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6M15 3h6v6M10 14L21 3",size:11}),l0={github:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z",twitter:"M12.6.75h2.454l-5.36 6.142L16 15.25h-4.937l-3.867-5.07-4.425 5.07H.316l5.733-6.57L0 .75h5.063l3.495 4.633L12.601.75Zm-.86 13.028h1.36L4.323 2.145H2.865l8.875 11.633Z",discord:"M13.545 2.907a13.227 13.227 0 00-3.257-1.011.05.05 0 00-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 00-3.658 0 8.258 8.258 0 00-.412-.833.051.051 0 00-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 00-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 003.995 2.02.05.05 0 00.056-.019c.308-.42.582-.863.818-1.329a.05.05 0 00-.028-.07 8.735 8.735 0 01-1.248-.595.05.05 0 01-.005-.083c.084-.063.168-.129.248-.195a.05.05 0 01.051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 01.053.007c.08.066.164.132.248.195a.051.051 0 01-.004.085c-.399.232-.813.431-1.249.594a.05.05 0 00-.03.07c.24.465.515.909.817 1.329a.05.05 0 00.056.019 13.235 13.235 0 004.001-2.02.049.049 0 00.021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 00-.02-.019z",linkedin:"M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 01.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4z",youtube:"M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 011.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 01-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 01-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 010 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 011.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 017.858 2h.193zM6.4 5.209v4.818l4.157-2.408L6.4 5.209z",mastodon:"M11.19 12.195c2.016-.24 3.77-1.475 3.99-2.603.348-1.778.32-4.339.32-4.339 0-3.47-2.286-4.488-2.286-4.488C12.062.238 10.083.017 8.027 0h-.05C5.92.017 3.942.238 2.79.765 2.79.765.504 1.783.504 5.253c-.005.995-.01 2.19.013 3.44.075 4.21.56 8.354 3.383 9.386 1.302.476 2.418.576 3.317.507 1.628-.125 2.541-.8 2.541-.8l-.054-1.182s-1.163.366-2.47.322c-1.293-.044-2.658-.138-2.867-1.716a3.23 3.23 0 01-.028-.465s1.27.31 2.879.384c.984.045 1.905-.058 2.842-.17zM13 8.59V5.319c0-.67-.17-1.2-.507-1.592-.348-.4-.806-.605-1.373-.605-.656 0-1.154.252-1.486.756L9.2 4.595l-.434-.717c-.332-.504-.83-.756-1.486-.756-.567 0-1.025.204-1.373.605-.338.392-.507.923-.507 1.592V8.59h1.69V5.468c0-.67.285-1.012.855-1.012.63 0 .946.404.946 1.204V7.11h1.682V5.66c0-.8.316-1.204.946-1.204.57 0 .855.342.855 1.012V8.59H13z",bluesky:"M3.468 1.948C5.303 3.325 7.276 6.118 8 7.616c.724-1.498 2.697-4.29 4.532-5.668C13.855 1.013 16 .638 16 3.14c0 .5-.286 4.2-.454 4.8-.585 2.093-2.716 2.628-4.544 2.305 3.195.564 4.007 2.433 2.25 4.302-3.337 3.548-4.8-1.244-5.252-2.547 0 0-.116-.334-.166-.334h.332C8.166 11.666 8.05 12 8.05 12c-.452 1.303-1.916 6.095-5.252 2.547-1.756-1.869-.946-3.738 2.25-4.302-1.829.323-3.96-.212-4.544-2.305C.336 7.34.05 3.64.05 3.14.05.638 2.195 1.013 3.468 1.948z"},i0=({platform:u,customIcon:h})=>{const d=u==="custom"&&h?h:l0[u];return d?s.jsx("svg",{width:16,height:16,viewBox:"0 0 16 16",fill:"currentColor",children:s.jsx("path",{d})}):null},o0={Added:"#22c55e",Changed:"#3b82f6",Deprecated:"#f59e0b",Removed:"#ef4444",Fixed:"#8b5cf6",Security:"#f97316"};function s0({entries:u}){const[h,d]=B.useState(u.length<=5),c=h?u:u.slice(0,5);return s.jsxs("div",{"data-testid":"changelog-timeline",style:{position:"relative"},children:[s.jsx("div",{style:{position:"absolute",left:15,top:8,bottom:8,width:2,background:"var(--bd)"}}),c.map((v,E)=>s.jsxs("div",{"data-testid":`changelog-entry-${v.version}`,style:{position:"relative",paddingLeft:44,paddingBottom:E{const D=o0[M.type]||"#6b7280";return s.jsxs("div",{style:{marginBottom:16},children:[s.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:6,marginBottom:8},children:[s.jsx("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:D}}),s.jsx("span",{style:{fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:".06em",color:D,fontFamily:"var(--font-code, monospace)"},children:M.type})]}),s.jsx("ul",{style:{margin:0,paddingLeft:18,listStyleType:"disc",color:"var(--tx2)"},children:M.items.map((z,y)=>s.jsx("li",{style:{fontSize:14,lineHeight:1.7,color:"var(--tx2)",marginBottom:2},children:z},y))})]},M.type)})]},v.version)),!h&&u.length>5&&s.jsx("div",{style:{textAlign:"center",marginTop:24},children:s.jsxs("button",{"data-testid":"changelog-show-more",onClick:()=>d(!0),style:{background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"8px 20px",color:"var(--tx2)",fontSize:13,fontFamily:"var(--font-body, inherit)",cursor:"pointer"},children:["Show all ",u.length," releases"]})})]})}function u0(u,h,d){if(h==="index")return[];for(const c of u)if(c.pages.find(E=>E.id===h)){const E=[],M=c.pages[0];return E.push({label:c.section,href:M?M.urlPath:null}),E.push({label:d,href:null}),E}return[]}function r0({config:u,navigation:h,currentPageId:d,pageHtml:c,pageComponent:v,mdxComponents:E,pageTitle:M,pageDescription:D,headings:z,tocEnabled:y=!0,editUrl:G,lastUpdated:R,changelogEntries:K,apiManifest:nt,apiBaseUrl:bt,apiPlayground:Ot,apiAuth:jt,ApiReferenceComponent:W,onNavigate:I,allPages:ct,versioning:Q,currentVersion:Y,i18n:H,currentLocale:U,docContext:at,basePath:lt="",isDraft:P,dir:mt,overrides:tt}){var Aa,En,fi,dl,ml,pl,za,Ca,hl,gl,qe,Qt,ne,tn,ja,di,mi,vl,An;const Mt=U||(H==null?void 0:H.defaultLocale)||"en",$t=mt||((Aa=H==null?void 0:H.localeDirs)==null?void 0:Aa[Mt])||"ltr",ft=$t==="rtl",C=((En=u.theme)==null?void 0:En.mode)||"auto",[w,Z]=B.useState(()=>{var x;return C==="dark"?!0:C==="light"?!1:((x=window.matchMedia)==null?void 0:x.call(window,"(prefers-color-scheme: dark)").matches)??!1}),[J,Tt]=B.useState(()=>typeof window<"u"&&window.innerWidth<768),[m,k]=B.useState(()=>typeof window<"u"&&window.innerWidth>=768),[N,L]=B.useState(!1),[it,rt]=B.useState(!1),[Et,It]=B.useState(!1),[Ut,Ze]=B.useState(null),[pa,ha]=B.useState({}),[rl,Je]=B.useState(()=>{var x;if(!((x=u.banner)!=null&&x.text))return!0;try{const q=Array.from(u.banner.text).reduce((et,dt)=>(et<<5)-et+dt.charCodeAt(0)|0,0).toString(36);return localStorage.getItem("tome-banner-dismissed")===q}catch{return!1}}),cl=Q&&Y&&Y!==Q.current,[ga,Oo]=B.useState(h.map(x=>x.section)),We=B.useRef(null),Fn=B.useRef(null),fl=B.useRef(""),[va,Do]=B.useState(()=>typeof window<"u"&&window.innerWidth>1100),si=((fi=u.theme)==null?void 0:fi.preset)||"amber",se=((dl=Mo[si])==null?void 0:dl[w?"dark":"light"])||Mo.amber.dark,ui=(ml=u.theme)!=null&&ml.accent?Vh(u.theme.accent,w):null,te=ui?{...se,...ui}:se,ya=((pl=Mo[si])==null?void 0:pl.fonts)||Mo.amber.fonts,bn={heading:((Ca=(za=u.theme)==null?void 0:za.fonts)==null?void 0:Ca.heading)||ya.heading,body:((gl=(hl=u.theme)==null?void 0:hl.fonts)==null?void 0:gl.body)||ya.body,code:((Qt=(qe=u.theme)==null?void 0:qe.fonts)==null?void 0:Qt.code)||ya.code};B.useEffect(()=>{if(C!=="auto")return;const x=window.matchMedia("(prefers-color-scheme: dark)"),q=et=>Z(et.matches);return x.addEventListener("change",q),()=>x.removeEventListener("change",q)},[C]),B.useEffect(()=>{document.documentElement.classList.toggle("dark",w)},[w]),B.useEffect(()=>{const x=()=>{const q=window.innerWidth;Do(q>1100),Tt(q<768)};return x(),window.addEventListener("resize",x),()=>window.removeEventListener("resize",x)},[]),B.useEffect(()=>{if(J&&m)return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[J,m]),B.useEffect(()=>{var x;(x=We.current)==null||x.scrollTo(0,0)},[d]),B.useEffect(()=>{const x=We.current;if(!x)return;const q=et=>{const dt=et.target;dt.tagName==="IMG"&&dt.closest(".tome-content")&&Ze(dt.src)};return x.addEventListener("click",q),()=>x.removeEventListener("click",q)},[]),B.useEffect(()=>{const x=We.current;if(!x)return;const q=et=>{const dt=et.target.closest("a");if(!dt)return;const St=dt.getAttribute("href");if(!St||St.startsWith("http://")||St.startsWith("https://")||St.startsWith("mailto:")||St.startsWith("tel:")||St.startsWith("//")||St.startsWith("#"))return;et.preventDefault();let yt=St.replace(/^\.\//,"").replace(/^\//,"").replace(/\.mdx?$/,"").replace(/\/$/,"");if(lt){const ce=lt.replace(/^\//,"").replace(/\/$/,"");ce&&yt.startsWith(ce+"/")?yt=yt.slice(ce.length+1):ce&&yt===ce&&(yt="index")}yt||(yt="index"),I(yt)};return x.addEventListener("click",q),()=>x.removeEventListener("click",q)},[I,lt]),B.useEffect(()=>{if(!Ut)return;const x=q=>{q.key==="Escape"&&Ze(null)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[Ut]);const Sn=u.toc,ri=(Sn==null?void 0:Sn.depth)??3,xa=(Sn==null?void 0:Sn.enabled)!==!1&&y,ye=z.filter(x=>x.depth<=ri),[ue,je]=B.useState("");B.useEffect(()=>{if(!xa||ye.length<2)return;const x=We.current;if(!x)return;const q=setTimeout(()=>{const et=[];for(const St of ye){const yt=x.querySelector(`#${CSS.escape(St.id)}`);yt&&et.push(yt)}if(et.length===0)return;const dt=new IntersectionObserver(St=>{const yt=St.filter(ce=>ce.isIntersecting).sort((ce,pi)=>ce.boundingClientRect.top-pi.boundingClientRect.top);yt.length>0&&je(yt[0].target.id)},{root:x,rootMargin:"0px 0px -80% 0px",threshold:0});for(const St of et)dt.observe(St);ee.current=dt},100);return()=>{var et;clearTimeout(q),(et=ee.current)==null||et.disconnect(),ee.current=null}},[d,xa,ye.map(x=>x.id).join(",")]);const ee=B.useRef(null);B.useEffect(()=>{je("")},[d]),B.useLayoutEffect(()=>{if(!Fn.current||!c)return;const x=c.replace(/]*>[\s\S]*?<\/h1>\s*/,"");Fn.current.innerHTML=x,fl.current=x},[c,d]);const ci=B.useCallback((x,q)=>{x.preventDefault();const et=We.current;if(!et)return;const dt=et.querySelector(`#${CSS.escape(q)}`);dt&&(dt.scrollIntoView({behavior:"smooth",block:"start"}),je(q))},[]);B.useEffect(()=>{const x=q=>{(q.metaKey||q.ctrlKey)&&q.key==="k"&&(q.preventDefault(),L(!0)),q.key==="Escape"&&L(!1)};return window.addEventListener("keydown",x),()=>window.removeEventListener("keydown",x)},[]);const ba=h.flatMap(x=>x.pages),Sa=ba.findIndex(x=>x.id===d),Fe=Sa>0?ba[Sa-1]:null,$e=SaOo(q=>q.includes(x)?q.filter(et=>et!==x):[...q,x]),Ta={"--bg":te.bg,"--sf":te.sf,"--sfH":te.sfH,"--bd":te.bd,"--tx":te.tx,"--tx2":te.tx2,"--txM":te.txM,"--ac":te.ac,"--acD":te.acD,"--acT":te.acT,"--cdBg":te.cdBg,"--cdTx":te.cdTx,"--sbBg":te.sbBg,"--hdBg":te.hdBg,"--font-heading":`"${bn.heading}", serif`,"--font-body":`"${bn.body}", sans-serif`,"--font-code":`"${bn.code}", monospace`},Tn=v,Ne=(ne=u.banner)==null?void 0:ne.link,Ea=Ne?Ne.startsWith("#")||lt&&Ne.startsWith(lt+"/"):!1;return s.jsxs("div",{dir:$t,className:"tome-grain",style:{...Ta,color:"var(--tx)",background:"var(--bg)",fontFamily:"var(--font-body)",height:"100vh",overflow:"clip"},children:[((tn=u.banner)==null?void 0:tn.text)&&!rl&&s.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:12,background:"var(--ac)",color:"#fff",padding:"8px 16px",fontSize:13,fontFamily:"var(--font-body)",fontWeight:500,textAlign:"center",width:"100vw",boxSizing:"border-box"},children:[u.banner.link?s.jsx("a",{href:Ea&&Ne.startsWith("#")?lt+"/"+Ne.slice(1):Ne,...Ea?{}:{target:"_blank",rel:"noopener noreferrer"},style:{color:"#fff",textDecoration:"underline"},onClick:Ea?x=>{x.preventDefault();const q=lt.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),et=Ne.startsWith("#")?Ne.slice(1):Ne.replace(new RegExp("^"+q+"/?"),"");I(et||"index")}:void 0,children:u.banner.text}):s.jsx("span",{children:u.banner.text}),u.banner.dismissible!==!1&&s.jsx("button",{onClick:()=>{Je(!0);try{const x=Array.from(u.banner.text).reduce((q,et)=>(q<<5)-q+et.charCodeAt(0)|0,0).toString(36);localStorage.setItem("tome-banner-dismissed",x)}catch{}},"aria-label":"Dismiss banner",style:{background:"none",border:"none",color:"#fff",cursor:"pointer",fontSize:16,lineHeight:1,padding:0,opacity:.8},children:"×"})]}),N&&((ja=u.search)==null?void 0:ja.provider)==="algolia"&&u.search.appId&&u.search.apiKey&&u.search.indexName?s.jsx(t0,{appId:u.search.appId,apiKey:u.search.apiKey,indexName:u.search.indexName,onNavigate:x=>{I(x),L(!1)},onClose:()=>L(!1),basePath:lt}):N?s.jsx(c0,{allPages:ct,onNavigate:x=>{I(x),L(!1)},onClose:()=>L(!1),mobile:J}):null,s.jsxs("div",{style:{display:"flex",flexDirection:ft?"row-reverse":"row",flex:1,height:(di=u.banner)!=null&&di.text&&!rl?"calc(100vh - 32px)":"100vh"},children:[J&&m&&s.jsx("div",{onClick:()=>k(!1),style:{position:"fixed",inset:0,zIndex:200,background:"rgba(0,0,0,0.4)",backdropFilter:"blur(2px)"}}),tt!=null&&tt.Sidebar?s.jsx(tt.Sidebar,{config:u,navigation:h,currentPageId:d,onNavigate:I,mobile:J,sbOpen:m,setSbOpen:k,versioning:Q,currentVersion:Y}):s.jsxs("aside",{style:{width:m?270:0,minWidth:m?270:0,background:"var(--sbBg)",[ft?"borderLeft":"borderRight"]:"1px solid var(--bd)",display:"flex",flexDirection:"column",transition:"width .2s, min-width .2s",overflow:"hidden",...J?{position:"fixed",top:0,[ft?"right":"left"]:0,bottom:0,zIndex:201}:{}},children:[s.jsxs("a",{href:"/",style:{padding:"18px 20px",display:"flex",alignItems:"baseline",gap:6,borderBottom:"1px solid var(--bd)",textDecoration:"none",color:"inherit"},children:[s.jsx("span",{style:{fontFamily:"var(--font-heading)",fontSize:22,fontWeight:700,fontStyle:"italic"},children:u.name}),s.jsx("span",{style:{width:5,height:5,borderRadius:"50%",background:"var(--ac)",display:"inline-block"}})]}),s.jsx("div",{style:{padding:"12px 14px"},children:s.jsxs("button",{onClick:()=>{L(!0),J&&k(!1)},style:{display:"flex",alignItems:"center",gap:8,width:"100%",background:"var(--cdBg)",border:"1px solid var(--bd)",borderRadius:2,padding:"8px 12px",cursor:"pointer",color:"var(--txM)",fontSize:12.5,fontFamily:"var(--font-body)"},children:[s.jsx(rm,{}),s.jsx("span",{style:{flex:1,textAlign:ft?"right":"left"},children:"Search..."}),s.jsx("kbd",{style:{fontFamily:"var(--font-code)",fontSize:9,background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,padding:"2px 6px"},children:"⌘K"})]})}),s.jsx("nav",{style:{flex:1,overflow:"auto",padding:"4px 10px 20px"},children:h.map(x=>s.jsxs("div",{style:{marginBottom:8},children:[s.jsxs("button",{onClick:()=>Pe(x.section),style:{display:"flex",alignItems:"center",gap:6,width:"100%",background:"none",border:"none",padding:"8px 10px",cursor:"pointer",borderRadius:2,color:"var(--txM)",fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:".1em",fontFamily:"var(--font-code)"},children:[ga.includes(x.section)?s.jsx(Vu,{}):s.jsx(Pd,{}),x.section]}),ga.includes(x.section)&&s.jsx("div",{style:{[ft?"marginRight":"marginLeft"]:8,[ft?"borderRight":"borderLeft"]:"1px solid var(--bd)",[ft?"paddingRight":"paddingLeft"]:0},children:x.pages.map(q=>{const et=d===q.id;return s.jsxs("button",{onClick:()=>{I(q.id),J&&k(!1)},style:{display:"flex",alignItems:"center",gap:10,width:"100%",textAlign:ft?"right":"left",background:"none",border:"none",borderRadius:0,[ft?"borderRight":"borderLeft"]:et?"2px solid var(--ac)":"2px solid transparent",padding:"7px 14px",cursor:"pointer",color:et?"var(--ac)":"var(--tx2)",fontSize:13,fontWeight:et?500:400,fontFamily:"var(--font-body)",transition:"all .12s"},children:[q.title,q.badge&&(()=>{const dt={default:{bg:"var(--sf)",text:"var(--tx2)"},info:{bg:"rgba(59,130,246,0.15)",text:"rgb(59,130,246)"},success:{bg:"rgba(34,197,94,0.15)",text:"rgb(34,197,94)"},warning:{bg:"rgba(234,179,8,0.15)",text:"rgb(202,138,4)"},danger:{bg:"rgba(239,68,68,0.15)",text:"rgb(239,68,68)"}},St=dt[q.badge.variant||"default"]||dt.default;return s.jsx("span",{style:{fontSize:10,fontWeight:600,padding:"2px 6px",borderRadius:4,marginLeft:6,whiteSpace:"nowrap",background:St.bg,color:St.text},children:q.badge.text})})()]},q.id)})})]},x.section))}),Q&&J&&s.jsx("div",{style:{padding:"8px 16px",borderTop:"1px solid var(--bd)",display:"flex",gap:6},children:Q.versions.map(x=>s.jsxs("button",{onClick:()=>{const q=x===Q.current?"index":`${x}/index`;I(q)},style:{flex:1,padding:"3px 0",textAlign:"center",background:x===(Y||Q.current)?"var(--acD)":"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,cursor:"pointer",color:x===(Y||Q.current)?"var(--ac)":"var(--tx2)",fontSize:11,fontFamily:"var(--font-code)",fontWeight:x===Q.current?600:400},children:[x,x===Q.current?" (latest)":""]},x))}),s.jsxs("div",{style:{padding:"12px 16px",borderTop:"1px solid var(--bd)",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[C==="auto"?s.jsx("button",{"aria-label":w?"Switch to light mode":"Switch to dark mode",onClick:()=>Z(x=>!x),style:{background:"none",border:"none",color:"var(--txM)",cursor:"pointer",display:"flex"},children:w?s.jsx(em,{}):s.jsx(tm,{})}):s.jsx("div",{}),s.jsxs("span",{style:{fontSize:11,color:"var(--txM)",letterSpacing:.2},children:["Built with ","♡"," by Tome"]}),s.jsx("span",{style:{fontFamily:"var(--font-code)",fontSize:10,color:"var(--txM)"},children:"v0.5.0"})]})]}),s.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",overflow:"hidden"},children:[tt!=null&&tt.Header?s.jsx(tt.Header,{config:u,navigation:h,currentPageId:d,onNavigate:I,mobile:J,sbOpen:m,setSbOpen:k,isDark:w,setDark:Z,versioning:Q,currentVersion:Y,i18n:H,currentLocale:U,onSearchOpen:()=>L(!0),basePath:lt}):s.jsxs("header",{style:{display:"flex",alignItems:"center",gap:J?8:12,padding:J?"8px 12px":"10px 24px",borderBottom:"1px solid var(--bd)",background:"var(--hdBg)",backdropFilter:"blur(12px)",maxWidth:"100vw",overflow:"visible",position:"relative",zIndex:200},children:[s.jsx("button",{"aria-label":m?"Close sidebar":"Open sidebar",onClick:()=>k(!m),style:{background:"none",border:"none",color:"var(--txM)",cursor:"pointer",display:"flex"},children:m?s.jsx(Jh,{}):s.jsx(Zh,{})}),J?s.jsx("span",{style:{fontSize:13,color:"var(--ac)",fontFamily:"var(--font-code)",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:((mi=h.flatMap(x=>x.pages).find(x=>x.id===d))==null?void 0:mi.title)||""}):s.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,fontFamily:"var(--font-code)",fontSize:11,color:"var(--txM)",letterSpacing:".03em",flex:1},children:h.map(x=>{const q=x.pages.find(et=>et.id===d);return q?s.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("span",{children:x.section}),s.jsx(Pd,{}),s.jsx("span",{style:{color:"var(--ac)"},children:q.title})]},x.section):null})}),u.topNav&&u.topNav.length>0&&!J&&s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12},children:[u.topNav.map(x=>{const q=x.href.startsWith("#")||lt&&x.href.startsWith(lt+"/"),et=!q;return s.jsxs("a",{href:q&&x.href.startsWith("#")?lt+"/"+x.href.slice(1):x.href,...et?{target:"_blank",rel:"noopener noreferrer"}:{},onClick:q?dt=>{dt.preventDefault();const St=x.href.startsWith("#")?x.href.slice(1):x.href.replace(new RegExp("^"+lt.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"/?"),"");I(St)}:void 0,style:{display:"flex",alignItems:"center",gap:4,color:"var(--txM)",textDecoration:"none",fontSize:12,fontFamily:"var(--font-body)",fontWeight:500,transition:"color .15s"},onMouseOver:dt=>dt.currentTarget.style.color="var(--ac)",onMouseOut:dt=>dt.currentTarget.style.color="var(--txM)",children:[x.label,et&&s.jsx(a0,{})]},x.label)}),s.jsx("span",{style:{width:1,height:16,background:"var(--bd)"}})]}),u.socialLinks&&u.socialLinks.length>0&&!J&&s.jsx("div",{style:{display:"flex",alignItems:"center",gap:8},children:u.socialLinks.map(x=>s.jsx("a",{href:x.url,target:"_blank",rel:"noopener noreferrer","aria-label":x.label||x.platform,"data-testid":`social-link-${x.platform}`,style:{display:"flex",alignItems:"center",justifyContent:"center",color:"var(--tx2)",cursor:"pointer",transition:"color .15s"},onMouseOver:q=>q.currentTarget.style.color="var(--tx)",onMouseOut:q=>q.currentTarget.style.color="var(--tx2)",children:s.jsx(i0,{platform:x.platform,customIcon:x.icon})},x.url))}),J&&C==="auto"&&s.jsx("button",{"aria-label":w?"Switch to light mode":"Switch to dark mode",onClick:()=>Z(x=>!x),style:{background:"none",border:"none",color:"var(--txM)",cursor:"pointer",display:"flex",flexShrink:0},children:w?s.jsx(em,{}):s.jsx(tm,{})}),Q&&!J&&s.jsxs("div",{style:{position:"relative"},children:[s.jsxs("button",{"data-testid":"version-switcher",onClick:()=>rt(x=>!x),style:{display:"flex",alignItems:"center",gap:6,background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,padding:"5px 10px",cursor:"pointer",color:"var(--tx2)",fontSize:12,fontFamily:"var(--font-code)"},children:[s.jsx(e0,{}),Y||Q.current,s.jsx(Vu,{})]}),it&&s.jsx("div",{"data-testid":"version-dropdown",style:{position:"absolute",top:"100%",right:0,marginTop:4,background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,boxShadow:"0 8px 32px rgba(0,0,0,0.2)",overflow:"hidden",zIndex:100,minWidth:120},children:Q.versions.map(x=>s.jsxs("button",{onClick:()=>{rt(!1);const q=x===Q.current?"index":`${x}/index`;I(q)},style:{display:"block",width:"100%",textAlign:"left",background:x===(Y||Q.current)?"var(--acD)":"none",border:"none",padding:"8px 14px",cursor:"pointer",color:x===(Y||Q.current)?"var(--ac)":"var(--tx2)",fontSize:12,fontFamily:"var(--font-code)",fontWeight:x===Q.current?600:400},children:[x,x===Q.current?" (latest)":""]},x))})]}),H&&H.locales.length>1&&!J&&s.jsxs("div",{style:{position:"relative"},children:[s.jsxs("button",{"data-testid":"language-switcher",onClick:()=>It(x=>!x),style:{display:"flex",alignItems:"center",gap:6,background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,padding:"5px 10px",cursor:"pointer",color:"var(--tx2)",fontSize:12,fontFamily:"var(--font-body)"},children:[s.jsx(n0,{}),((vl=H.localeNames)==null?void 0:vl[U||H.defaultLocale])||U||H.defaultLocale,s.jsx(Vu,{})]}),Et&&s.jsx("div",{"data-testid":"language-dropdown",style:{position:"absolute",top:"100%",right:0,marginTop:4,background:"var(--sf)",border:"1px solid var(--bd)",borderRadius:2,boxShadow:"0 8px 32px rgba(0,0,0,0.2)",overflow:"hidden",zIndex:100,minWidth:120},children:H.locales.map(x=>{var ce;const q=x===(U||H.defaultLocale),et=((ce=H.localeNames)==null?void 0:ce[x])||x,dt=U||H.defaultLocale;let St=d;dt!==H.defaultLocale&&d.startsWith(`${dt}/`)&&(St=d.slice(dt.length+1));const yt=x===H.defaultLocale?St:`${x}/${St}`;return s.jsx("button",{onClick:()=>{It(!1),I(yt)},style:{display:"block",width:"100%",textAlign:"left",background:q?"var(--acD)":"none",border:"none",padding:"8px 14px",cursor:"pointer",color:q?"var(--ac)":"var(--tx2)",fontSize:12,fontFamily:"var(--font-body)",fontWeight:q?600:400},children:et},x)})})]})]}),cl&&s.jsxs("div",{"data-testid":"old-version-banner",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:8,background:"var(--acD)",borderBottom:"1px solid var(--bd)",padding:"8px 24px",fontSize:13,color:"var(--tx2)"},children:[s.jsxs("span",{children:["You're viewing docs for ",Y,"."]}),s.jsx("button",{onClick:()=>{I("index")},style:{background:"none",border:"none",color:"var(--ac)",cursor:"pointer",fontWeight:600,fontSize:13,fontFamily:"var(--font-body)",textDecoration:"underline"},children:"Switch to latest."})]}),s.jsxs("div",{ref:We,style:{flex:1,overflow:"auto",display:"flex"},children:[s.jsxs("main",{style:{flex:1,maxWidth:J?"100%":nt?1100:760,padding:J?"24px 16px 60px":"40px 48px 80px",margin:"0 auto",minWidth:0},children:[Ie.length>0&&s.jsx("nav",{"aria-label":"Breadcrumbs","data-testid":"breadcrumbs",style:{display:"flex",alignItems:"center",gap:6,fontSize:13,color:"var(--tx2)",marginBottom:8},children:Ie.map((x,q)=>s.jsxs(sm.Fragment,{children:[q>0&&s.jsx("span",{style:{color:"var(--tx2)",opacity:.5},children:"›"}),q{et.preventDefault();const dt=h.flatMap(St=>St.pages).find(St=>St.urlPath===x.href);dt&&I(dt.id)},style:{color:"var(--tx2)",textDecoration:"none",cursor:"pointer"},children:x.label}):s.jsx("span",{style:q===Ie.length-1?{color:"var(--tx)"}:void 0,children:x.label})]},q))}),s.jsx("h1",{style:{fontFamily:"var(--font-heading)",fontSize:J?26:38,fontWeight:400,fontStyle:"italic",lineHeight:1.15,marginBottom:8},children:M}),P&&s.jsx("div",{"data-testid":"draft-banner",style:{background:"#fef3c7",color:"#92400e",padding:"8px 16px",borderRadius:6,fontSize:13,marginBottom:16},children:"Draft — This page is only visible in development"}),D&&s.jsx("p",{style:{fontSize:16,color:"var(--tx2)",lineHeight:1.6,marginBottom:32},children:D}),s.jsx("div",{style:{borderTop:"1px solid var(--bd)",paddingTop:28},children:nt&&W?s.jsx(W,{manifest:nt,baseUrl:bt,showPlayground:Ot,playgroundAuth:jt}):K&&K.length>0?s.jsx(s0,{entries:K}):Tn?s.jsx("div",{className:"tome-content",children:s.jsx(Tn,{components:E||{}})}):s.jsx("div",{className:"tome-content",ref:Fn},d)}),tt!=null&&tt.PageFooter?s.jsx(tt.PageFooter,{editUrl:G,lastUpdated:R,currentPageId:d,prev:Fe,next:$e,onNavigate:I,mobile:J}):s.jsxs(s.Fragment,{children:[(G||R)&&s.jsxs("div",{style:{marginTop:40,display:"flex",flexDirection:J?"column":"row",alignItems:J?"flex-start":"center",justifyContent:"space-between",gap:J?8:16},children:[G&&s.jsx("div",{"data-testid":"edit-page-link",children:s.jsxs("a",{href:G,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-flex",alignItems:"center",gap:6,color:"var(--txM)",textDecoration:"none",fontSize:13,fontFamily:"var(--font-body)",transition:"color .15s"},onMouseOver:x=>x.currentTarget.style.color="var(--ac)",onMouseOut:x=>x.currentTarget.style.color="var(--txM)",children:[s.jsx(Wh,{})," Edit this page on GitHub"]})}),R&&s.jsxs("div",{"data-testid":"last-updated",style:{fontSize:12,color:"var(--txM)",fontFamily:"var(--font-body)"},children:["Last updated ",Fh(R)]})]}),s.jsx("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:24,padding:"12px 0"},children:pa[d]?s.jsx("span",{style:{fontSize:13,color:"var(--txM)",fontFamily:"var(--font-body)"},children:"Thanks for your feedback!"}):s.jsxs(s.Fragment,{children:[s.jsx("span",{style:{fontSize:13,color:"var(--txM)",fontFamily:"var(--font-body)"},children:"Was this helpful?"}),s.jsx("button",{onClick:()=>{ha(x=>({...x,[d]:!0}));try{localStorage.setItem(`tome-feedback-${d}`,"up")}catch{}},style:{background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"4px 10px",cursor:"pointer",fontSize:13,color:"var(--txM)",transition:"border-color .15s"},children:"👍"}),s.jsx("button",{onClick:()=>{ha(x=>({...x,[d]:!0}));try{localStorage.setItem(`tome-feedback-${d}`,"down")}catch{}},style:{background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"4px 10px",cursor:"pointer",fontSize:13,color:"var(--txM)",transition:"border-color .15s"},children:"👎"})]})}),s.jsxs("div",{style:{display:"flex",flexDirection:J?"column":"row",justifyContent:"space-between",marginTop:16,paddingTop:24,borderTop:"1px solid var(--bd)",gap:J?12:16},children:[Fe?s.jsxs("button",{onClick:()=>I(Fe.id),style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"10px 16px",cursor:"pointer",color:"var(--tx2)",fontSize:13,fontFamily:"var(--font-body)",transition:"border-color .15s, color .15s"},children:[ft?s.jsx(am,{}):s.jsx(nm,{})," ",Fe.title]}):s.jsx("div",{}),$e?s.jsxs("button",{onClick:()=>I($e.id),style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"10px 16px",cursor:"pointer",color:"var(--tx2)",fontSize:13,fontFamily:"var(--font-body)",transition:"border-color .15s, color .15s"},children:[$e.title," ",ft?s.jsx(nm,{}):s.jsx(am,{})]}):s.jsx("div",{})]})]})]}),tt!=null&&tt.Toc?xa&&ye.length>=2&&va&&s.jsx(tt.Toc,{headings:ye,activeHeadingId:ue,onScrollToHeading:ci}):xa&&ye.length>=2&&va&&s.jsxs("aside",{"data-testid":"toc-sidebar",style:{width:200,padding:ft?"40px 0 40px 16px":"40px 16px 40px 0",position:"sticky",top:0,alignSelf:"flex-start",flexShrink:0},children:[s.jsx("div",{style:{fontSize:10,fontWeight:600,textTransform:"uppercase",letterSpacing:".1em",color:"var(--txM)",marginBottom:12,fontFamily:"var(--font-code)"},children:"On this page"}),s.jsx("nav",{"aria-label":"Table of contents",style:{[ft?"borderRight":"borderLeft"]:"1px solid var(--bd)",[ft?"paddingRight":"paddingLeft"]:0},children:ye.map((x,q)=>{const et=ue===x.id;return s.jsx("a",{href:`#${x.id}`,onClick:dt=>ci(dt,x.id),"data-testid":`toc-link-${x.id}`,style:{display:"block",fontSize:12,color:et?"var(--ac)":"var(--txM)",fontWeight:et?500:400,textDecoration:"none",padding:"4px 12px",[ft?"paddingRight":"paddingLeft"]:12+(x.depth-2)*12,lineHeight:1.4,transition:"color .15s, font-weight .15s",[ft?"borderRight":"borderLeft"]:et?"2px solid var(--ac)":"2px solid transparent",[ft?"marginRight":"marginLeft"]:-1},children:x.text},q)})})]})]})]})]}),(tt==null?void 0:tt.Footer)&&s.jsx(tt.Footer,{config:u,navigation:h,currentPageId:d,onNavigate:I}),((An=u.ai)==null?void 0:An.enabled)&&s.jsx(Xh,{provider:u.ai.provider||"anthropic",model:u.ai.model,apiKey:typeof __TOME_AI_API_KEY__<"u"&&__TOME_AI_API_KEY__?__TOME_AI_API_KEY__:void 0,context:(at==null?void 0:at.map(x=>`## ${x.title} +${x.content}`).join(` + +`))??ct.map(x=>`- ${x.title}${x.description?": "+x.description:""}`).join(` +`)}),Ut&&s.jsx("div",{onClick:()=>Ze(null),style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.7)",backdropFilter:"blur(8px)",cursor:"zoom-out"},children:s.jsx("img",{src:Ut,alt:"",style:{maxWidth:"90vw",maxHeight:"90vh",objectFit:"contain",borderRadius:4,boxShadow:"0 16px 64px rgba(0,0,0,0.4)"}})})]})}function c0({allPages:u,onNavigate:h,onClose:d,mobile:c}){const[v,E]=B.useState(""),[M,D]=B.useState([]),[z,y]=B.useState(0),[G,R]=B.useState(null),K=B.useRef(null),nt=B.useRef(void 0);B.useEffect(()=>{Ih().then(W=>R(!!W)),setTimeout(()=>{var W;return(W=K.current)==null?void 0:W.focus()},50)},[]);const bt=B.useCallback(W=>{if(!W.trim())return[];const I=W.toLowerCase();return u.filter(ct=>ct.title.toLowerCase().includes(I)||(ct.description||"").toLowerCase().includes(I)).slice(0,8).map(ct=>({id:ct.id,title:ct.title,excerpt:ct.description}))},[u]),Ot=B.useCallback(async W=>{var ct;if(!W.trim()){D([]),y(0);return}const I=ul;if(I)try{const Q=await I.search(W),Y=[];for(const H of Q.results.slice(0,8)){const U=await H.data(),lt=(U.url||"").replace(/^\//,"").replace(/\/index\.html$/,"").replace(/\.html$/,"")||"index";Y.push({id:lt,title:((ct=U.meta)==null?void 0:ct.title)||lt,excerpt:U.excerpt||void 0})}D(Y),y(0);return}catch{}D(bt(W)),y(0)},[bt]);B.useEffect(()=>(nt.current&&clearTimeout(nt.current),nt.current=setTimeout(()=>Ot(v),120),()=>{nt.current&&clearTimeout(nt.current)}),[v,Ot]);const jt=B.useCallback(W=>{W.key==="ArrowDown"?(W.preventDefault(),y(I=>Math.min(I+1,M.length-1))):W.key==="ArrowUp"?(W.preventDefault(),y(I=>Math.max(I-1,0))):W.key==="Enter"&&M.length>0&&(W.preventDefault(),h(M[z].id))},[M,z,h]);return s.jsx("div",{onClick:d,style:{position:"fixed",inset:0,zIndex:1e3,background:"rgba(0,0,0,0.55)",backdropFilter:"blur(6px)",display:"flex",alignItems:c?"stretch":"flex-start",justifyContent:"center",paddingTop:c?0:"12vh"},children:s.jsxs("div",{onClick:W=>W.stopPropagation(),style:{background:"var(--sf)",border:c?"none":"1px solid var(--bd)",borderRadius:c?0:2,width:"100%",maxWidth:c?"100%":520,boxShadow:c?"none":"0 24px 80px rgba(0,0,0,0.4)",overflow:"hidden",display:"flex",flexDirection:"column",...c?{height:"100%"}:{}},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"14px 18px",borderBottom:"1px solid var(--bd)"},children:[s.jsx(rm,{}),s.jsx("input",{ref:K,value:v,onChange:W=>E(W.target.value),onKeyDown:jt,placeholder:"Search documentation...",style:{flex:1,background:"none",border:"none",outline:"none",color:"var(--tx)",fontSize:15,fontFamily:"var(--font-body)"}}),s.jsx("kbd",{style:{fontFamily:"var(--font-code)",fontSize:10,color:"var(--txM)",background:"var(--cdBg)",padding:"2px 6px",borderRadius:2,border:"1px solid var(--bd)"},children:"ESC"})]}),M.length>0&&s.jsx("div",{style:{padding:6,maxHeight:c?"none":360,overflow:"auto",flex:c?1:void 0},children:M.map((W,I)=>s.jsxs("button",{onClick:()=>h(W.id),style:{display:"block",width:"100%",textAlign:"left",background:I===z?"var(--acD)":"none",border:"none",borderRadius:2,padding:"10px 14px",cursor:"pointer",color:"var(--tx)",fontFamily:"var(--font-body)"},onMouseEnter:()=>y(I),children:[s.jsx("div",{style:{fontWeight:500,fontSize:14,marginBottom:2},children:W.title}),W.excerpt&&s.jsx("div",{style:{fontSize:12,color:"var(--txM)",lineHeight:1.3},dangerouslySetInnerHTML:{__html:W.excerpt}})]},W.id+I))}),v&&!M.length&&s.jsx("div",{style:{padding:"32px 18px",textAlign:"center",color:"var(--txM)",fontSize:14},children:"No results found"}),G===!1&&v&&M.length>0&&s.jsx("div",{style:{padding:"6px 18px 10px",fontSize:11,color:"var(--txM)",textAlign:"center"},children:"Showing title matches. Build your site for full-text search."})]})})}function cm(u,h,d){let c=u;h&&c.startsWith(h)&&(c=c.slice(h.length));const v=c.replace(/^\//,"").replace(/\/index\.html$/,"").replace(/\.html$/,"").replace(/\/$/,"")||"index";return d.find(M=>M.id===v)?v:null}function f0(u,h,d){const c=d.find(v=>v.id===u);return c?h+c.urlPath:h+"/"+u}class d0 extends Error{constructor(h){super(`Page not found: ${h}`),this.code="PAGE_NOT_FOUND",this.name="PageNotFoundError"}}class m0 extends Error{constructor(h,d){super(`Failed to load page: ${h}`),this.code="PAGE_LOAD_ERROR",this.name="PageLoadError",d&&(this.cause=d)}}function p0(u,h){if(!u||!h)return;const{repo:d,branch:c="main",dir:v=""}=u,E=v?`${v.replace(/\/$/,"")}/`:"";return`https://github.com/${d}/edit/${c}/${E}${h}`}function h0(u,h,d,c,v){var D;const E=v(u,c,d);if(E)return E;const M=h.startsWith("#")?h.slice(1):h;return M&&d.some(z=>z.id===M)?M:((D=d[0])==null?void 0:D.id)||"index"}async function fm(u,h,d){const c=h.find(E=>E.id===u);let v;try{v=await d(u)}catch(E){throw new m0(u,E)}if(c!=null&&c.isMdx&&v.meta)return{isMdx:!0,component:v.default,frontmatter:v.meta.frontmatter,headings:v.meta.headings};if(!v.default)throw new d0(u);return v.isApiReference&&v.apiManifest?{isMdx:!1,isApiReference:!0,...v.default,apiManifest:v.apiManifest}:v.isChangelog&&v.changelogEntries?{isMdx:!1,...v.default,changelogEntries:v.changelogEntries}:{isMdx:!1,...v.default}}function g0(u,h){return(u==null?void 0:u.version)||void 0}const Jn={name:"Kit",logo:"/logo.jpg",favicon:"/logo.jpg",baseUrl:"https://go-kit.dev",theme:{preset:"cipher",accent:"#e03030",mode:"dark",fonts:{heading:"Space Grotesk",body:"Space Grotesk",code:"Source Code Pro"}},navigation:[{group:"Getting Started",pages:["index","installation","quick-start"]},{group:"Configuration",pages:["configuration","providers"]},{group:"CLI Reference",pages:["cli/flags","cli/commands"]},{group:"Extensions",pages:["extensions/overview","extensions/capabilities","extensions/examples","extensions/loading"]},{group:"Sessions",pages:["sessions"]},{group:"Go SDK",pages:["sdk/overview","sdk/options","sdk/callbacks","sdk/sessions"]},{group:"Advanced",pages:["advanced/subagents","advanced/json-output","advanced/testing"]},{group:"Development",pages:["development"]}],search:{provider:"local"},toc:{enabled:!0,depth:3},math:!1,strictLinks:!1,lastUpdated:!0,redirects:[],socialLinks:[{platform:"github",url:"https://github.com/mark3labs/kit"},{platform:"discord",url:"https://discord.gg/RqSS2NQVsY"}]},Wn=[{id:"advanced/json-output",filePath:"advanced/json-output.md",urlPath:"/advanced/json-output",frontmatter:{title:"JSON Output",description:"Machine-readable JSON output for scripting and automation.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"advanced/subagents",filePath:"advanced/subagents.md",urlPath:"/advanced/subagents",frontmatter:{title:"Subagents",description:"Multi-agent orchestration with Kit subagents.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"advanced/testing",filePath:"advanced/testing.md",urlPath:"/advanced/testing",frontmatter:{title:"Testing with tmux",description:"Test Kit's TUI non-interactively using tmux.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"cli/commands",filePath:"cli/commands.md",urlPath:"/cli/commands",frontmatter:{title:"Commands",description:"Complete reference for all Kit CLI subcommands.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"cli/flags",filePath:"cli/flags.md",urlPath:"/cli/flags",frontmatter:{title:"Global Flags",description:"Complete reference for all Kit CLI flags.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"configuration",filePath:"configuration.md",urlPath:"/configuration",frontmatter:{title:"Configuration",description:"Configure Kit using config files, environment variables, and CLI flags.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"development",filePath:"development.md",urlPath:"/development",frontmatter:{title:"Development",description:"Build, test, and contribute to Kit.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"extensions/capabilities",filePath:"extensions/capabilities.md",urlPath:"/extensions/capabilities",frontmatter:{title:"Capabilities",description:"All extension capabilities — lifecycle events, tools, commands, widgets, and more.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"extensions/examples",filePath:"extensions/examples.md",urlPath:"/extensions/examples",frontmatter:{title:"Examples",description:"Catalog of example extensions included with Kit.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"extensions/loading",filePath:"extensions/loading.md",urlPath:"/extensions/loading",frontmatter:{title:"Loading Extensions",description:"How Kit discovers and loads extensions.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"extensions/overview",filePath:"extensions/overview.md",urlPath:"/extensions/overview",frontmatter:{title:"Extension System",description:"Overview of Kit's Go-based extension system.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"index",filePath:"index.md",urlPath:"/",frontmatter:{title:"Kit",description:"Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"installation",filePath:"installation.md",urlPath:"/installation",frontmatter:{title:"Installation",description:"Install Kit using npm, Go, or build from source.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"providers",filePath:"providers.md",urlPath:"/providers",frontmatter:{title:"Providers",description:"Supported LLM providers and model configuration.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"quick-start",filePath:"quick-start.md",urlPath:"/quick-start",frontmatter:{title:"Quick Start",description:"Get up and running with Kit in minutes.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"sdk/callbacks",filePath:"sdk/callbacks.md",urlPath:"/sdk/callbacks",frontmatter:{title:"Callbacks",description:"Monitor tool calls and streaming output with the Kit Go SDK.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"sdk/options",filePath:"sdk/options.md",urlPath:"/sdk/options",frontmatter:{title:"SDK Options",description:"Configuration options for the Kit Go SDK.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"sdk/overview",filePath:"sdk/overview.md",urlPath:"/sdk/overview",frontmatter:{title:"Go SDK",description:"Embed Kit in your Go applications.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"sdk/sessions",filePath:"sdk/sessions.md",urlPath:"/sdk/sessions",frontmatter:{title:"SDK Sessions",description:"Session management in the Kit Go SDK.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"},{id:"sessions",filePath:"sessions.md",urlPath:"/sessions",frontmatter:{title:"Session Management",description:"How Kit persists and manages conversation sessions.",hidden:!1,draft:!1},isMdx:!1,lastUpdated:"2026-03-19T16:42:04+03:00"}],v0=[{section:"Getting Started",pages:[{title:"Kit",id:"index",urlPath:"/"},{title:"Installation",id:"installation",urlPath:"/installation"},{title:"Quick Start",id:"quick-start",urlPath:"/quick-start"}]},{section:"Configuration",pages:[{title:"Configuration",id:"configuration",urlPath:"/configuration"},{title:"Providers",id:"providers",urlPath:"/providers"}]},{section:"CLI Reference",pages:[{title:"Global Flags",id:"cli/flags",urlPath:"/cli/flags"},{title:"Commands",id:"cli/commands",urlPath:"/cli/commands"}]},{section:"Extensions",pages:[{title:"Extension System",id:"extensions/overview",urlPath:"/extensions/overview"},{title:"Capabilities",id:"extensions/capabilities",urlPath:"/extensions/capabilities"},{title:"Examples",id:"extensions/examples",urlPath:"/extensions/examples"},{title:"Loading Extensions",id:"extensions/loading",urlPath:"/extensions/loading"}]},{section:"Sessions",pages:[{title:"Session Management",id:"sessions",urlPath:"/sessions"}]},{section:"Go SDK",pages:[{title:"Go SDK",id:"sdk/overview",urlPath:"/sdk/overview"},{title:"SDK Options",id:"sdk/options",urlPath:"/sdk/options"},{title:"Callbacks",id:"sdk/callbacks",urlPath:"/sdk/callbacks"},{title:"SDK Sessions",id:"sdk/sessions",urlPath:"/sdk/sessions"}]},{section:"Advanced",pages:[{title:"Subagents",id:"advanced/subagents",urlPath:"/advanced/subagents"},{title:"JSON Output",id:"advanced/json-output",urlPath:"/advanced/json-output"},{title:"Testing with tmux",id:"advanced/testing",urlPath:"/advanced/testing"}]},{section:"Development",pages:[{title:"Development",id:"development",urlPath:"/development"}]}],Zu=null,y0={"advanced/json-output":()=>Xt(()=>import("./json-output-B1QZabVS.js"),[]),"advanced/subagents":()=>Xt(()=>import("./subagents-ChkZbdDR.js"),[]),"advanced/testing":()=>Xt(()=>import("./testing-COLNxuKj.js"),[]),"cli/commands":()=>Xt(()=>import("./commands-B2onU7kX.js"),[]),"cli/flags":()=>Xt(()=>import("./flags-CkTF-Pw-.js"),[]),configuration:()=>Xt(()=>import("./configuration-BU6tST5r.js"),[]),development:()=>Xt(()=>import("./development-BTUHn6x2.js"),[]),"extensions/capabilities":()=>Xt(()=>import("./capabilities-hnq2TbFu.js"),[]),"extensions/examples":()=>Xt(()=>import("./examples-C-0Ua9md.js"),[]),"extensions/loading":()=>Xt(()=>import("./loading-CfdMbwrl.js"),[]),"extensions/overview":()=>Xt(()=>import("./overview-DNz93_Eg.js"),[]),index:()=>Xt(()=>import("./index-CGDazwHL.js"),[]),installation:()=>Xt(()=>import("./installation-DaBrcZPn.js"),[]),providers:()=>Xt(()=>import("./providers-B05lw6S_.js"),[]),"quick-start":()=>Xt(()=>import("./quick-start-B51YvXk3.js"),[]),"sdk/callbacks":()=>Xt(()=>import("./callbacks-DY5vOJ-1.js"),[]),"sdk/options":()=>Xt(()=>import("./options-DhBmR6ye.js"),[]),"sdk/overview":()=>Xt(()=>import("./overview-DbvqPNef.js"),[]),"sdk/sessions":()=>Xt(()=>import("./sessions-X-l1qojs.js"),[]),sessions:()=>Xt(()=>import("./sessions-BM7WkgkF.js"),[])};function dm(u){const h=y0[u];if(!h)throw new Error("Unknown page: "+u);return h()}const x0=[{id:"advanced/json-output",title:"JSON Output",content:` +# JSON Output + +Use the \`--json\` flag to get structured output for scripting and automation: + +\`\`\`bash +kit "Explain main.go" --json --quiet --no-session +\`\`\` + +## Response format + +\`\`\`json +{ + "response": "Final assistant response text", + "model": "anthropic/claude-haiku-3-5-20241022", + "stop_reason": "end_turn", + "session_id": "a1b2c3d4e5f6", + "usage": { + "input_tokens": 1024, + "output_tokens": 512, + "total_tokens": 1536, + "cache_read_tokens": 0, + "cache_creation_tokens": 0 + }, + "messages": [ + { + "role": "assistant", + "parts": [ + {"type": "text", "data": "..."}, + {"type": "tool_call", "data": {"name": "...", "args": "..."}}, + {"type": "tool_result", "data": {"name": "...", "result": "..."}} + ] + } + ] +} +\`\`\` + +## Fields + +### Top-level + +| Field | Type | Description | +|-------|------|-------------| +| \`response\` | string | The final assistant response text | +| \`model\` | string | The model that was used | +| \`stop_reason\` | string | Why the model stopped (e.g., \`end_turn\`) | +| \`session_id\` | string | Session identifier (omitted in \`--no-session\` mode) | +| \`usage\` | object | Token usage statistics | +| \`messages\` | array | Full conversation history | + +### Usage + +| Field | Type | Description | +|-------|------|-------------| +| \`input_tokens\` | int | Tokens sent to the model | +| \`output_tokens\` | int | Tokens generated by the model | +| \`total_tokens\` | int | Sum of input and output tokens | +| \`cache_read_tokens\` | int | Tokens read from prompt cache | +| \`cache_creation_tokens\` | int | Tokens written to prompt cache | + +### Message parts + +Each message contains a \`parts\` array with typed entries: + +| Type | Description | +|------|-------------| +| \`text\` | Assistant text content | +| \`tool_call\` | Tool invocation with name and args | +| \`tool_result\` | Tool execution result | +| \`reasoning\` | Extended thinking content | +| \`finish\` | End-of-turn marker | + +## Parsing in scripts + +### bash + jq + +\`\`\`bash +result=$(kit "Count files" --json --quiet --no-session) +response=$(echo "$result" | jq -r '.response') +tokens=$(echo "$result" | jq '.usage.total_tokens') +\`\`\` + +### Go SDK + +For Go programs, use the SDK's \`PromptResult\` method instead of parsing JSON: + +\`\`\`go +result, err := host.PromptResult(ctx, "Count files") +fmt.Println(result.Response) +fmt.Println(result.Usage.TotalTokens) +\`\`\` +`},{id:"advanced/subagents",title:"Subagents",content:` +# Subagents + +Kit supports multi-agent orchestration through both subprocess spawning and in-process subagents. + +## Subprocess pattern + +Spawn Kit as a subprocess for isolated agent execution: + +\`\`\`bash +kit "Analyze codebase" \\ + --json \\ + --no-session \\ + --no-extensions \\ + --quiet \\ + --model anthropic/claude-haiku-3-5-20241022 +\`\`\` + +Key flags for subprocess usage: + +| Flag | Purpose | +|------|---------| +| \`--quiet\` | Stdout only, no TUI | +| \`--no-session\` | Ephemeral, no persistence | +| \`--no-extensions\` | Prevent recursive extension loading | +| \`--json\` | Machine-readable output | +| \`--system-prompt\` | Custom system prompt (string or file path) | + +Positional arguments are the prompt. \`@file\` arguments attach file content as context. + +## Built-in spawn_subagent tool + +Kit includes a built-in \`spawn_subagent\` tool that the LLM can use to delegate tasks to independent child agents: + +\`\`\` +spawn_subagent( + task: "Analyze the test files and summarize coverage", + model: "anthropic/claude-haiku-3-5-20241022", // optional + system_prompt: "You are a test analysis expert.", // optional + timeout_seconds: 300 // optional, max 1800 +) +\`\`\` + +Subagents run as separate in-process Kit instances with full tool access (except spawning further subagents, to prevent infinite recursion). They can run in parallel. + +## Extension subagents + +Extensions can spawn subagents programmatically: + +\`\`\`go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Review this code for security issues", + Model: "anthropic/claude-sonnet-4-5-20250929", + SystemPrompt: "You are a security auditor.", +}) +\`\`\` + +## Go SDK subagents + +The SDK provides in-process subagent spawning: + +\`\`\`go +result, err := host.Subagent(ctx, kit.SubagentConfig{ + Task: "Summarize the changes in this PR", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a code reviewer.", + Timeout: 5 * time.Minute, +}) +\`\`\` +`},{id:"advanced/testing",title:"Testing with tmux",content:` +# Testing with tmux + +Kit's interactive TUI can be tested non-interactively using tmux. This is useful for automated testing, CI pipelines, and extension development. + +## Basic pattern + +\`\`\`bash +# Start Kit in a detached tmux session +tmux new-session -d -s kittest -x 120 -y 40 \\ + "output/kit -e ext.go --no-session 2>kit_stderr.log" + +# Wait for startup +sleep 3 + +# Capture the current screen +tmux capture-pane -t kittest -p + +# Send input +tmux send-keys -t kittest '/command' Enter + +# Wait for response +sleep 2 + +# Capture updated screen +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +\`\`\` + +## Testing extensions + +When testing extensions, the pattern is: + +1. Build Kit with your changes +2. Start Kit in tmux with the extension loaded +3. Send slash commands or prompts +4. Capture and verify the screen output +5. Check stderr logs for errors + +\`\`\`bash +# Build first +go build -o output/kit ./cmd/kit + +# Start with extension +tmux new-session -d -s kittest -x 120 -y 40 \\ + "output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log" + +sleep 3 + +# Verify widget appears in screen +tmux capture-pane -t kittest -p | grep "Status" + +# Send a slash command +tmux send-keys -t kittest '/stats' Enter +sleep 1 +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +\`\`\` + +## Tips + +- Use \`-x\` and \`-y\` to set consistent terminal dimensions +- Redirect stderr to a log file (\`2>kit.log\`) for debugging +- Use \`--no-session\` to avoid creating session files during tests +- Add sufficient \`sleep\` between commands for the TUI to render +- Use \`grep\` on captured pane output to verify specific content +`},{id:"cli/commands",title:"Commands",content:` +# Commands + +## Authentication + +For OAuth-enabled providers like Anthropic. + +\`\`\`bash +kit auth login [provider] # Start OAuth flow (e.g., anthropic) +kit auth logout [provider] # Remove credentials for provider +kit auth status # Check authentication status +\`\`\` + +## Model database + +Manage the local model database that maps provider names to API configurations. + +\`\`\`bash +kit models [provider] # List available models (optionally filter by provider) +kit models --all # Show all providers (not just Fantasy-compatible) +kit update-models [source] # Update model database +\`\`\` + +The \`update-models\` command accepts an optional source argument: +- *(none)* — update from [models.dev](https://models.dev) +- A URL — fetch from a custom endpoint +- A file path — load from a local file +- \`embedded\` — reset to the bundled database + +## Extension management + +\`\`\`bash +kit extensions list # List discovered extensions +kit extensions validate # Validate extension files +kit extensions init # Generate example extension template +\`\`\` + +### Installing extensions from git + +\`\`\`bash +kit install # Install extensions from git repositories +kit install -l # Install to project-local .kit/git/ directory +kit install -u # Update an already-installed package +kit install --uninstall # Remove an installed package +kit install --all # Install all extensions without prompting +\`\`\` + +## Skills + +\`\`\`bash +kit skill # Install the Kit extensions skill via skills.sh +\`\`\` + +## ACP server + +Run Kit as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout. + +\`\`\`bash +kit acp # Start as ACP agent +kit acp --debug # With debug logging to stderr +\`\`\` +`},{id:"cli/flags",title:"Global Flags",content:"\n# Global Flags\n\nAll flags can be passed to the root `kit` command.\n\n## Model and provider\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--model` | `-m` | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `--provider-api-key` | — | — | API key for the provider |\n| `--provider-url` | — | — | Base URL for provider API |\n| `--tls-skip-verify` | — | `false` | Skip TLS certificate verification |\n\n## Session management\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--session` | `-s` | — | Open specific JSONL session file |\n| `--continue` | `-c` | `false` | Resume most recent session for current directory |\n| `--resume` | `-r` | `false` | Interactive session picker |\n| `--no-session` | — | `false` | Ephemeral mode, no persistence |\n\n## Behavior\n\nThese flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode.\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--quiet` | — | `false` | Suppress all output (non-interactive only) |\n| `--json` | — | `false` | Output response as JSON (non-interactive only) |\n| `--no-exit` | — | `false` | Enter interactive mode after prompt completes |\n| `--max-steps` | — | `0` | Maximum agent steps (0 for unlimited) |\n| `--stream` | — | `true` | Enable streaming output |\n| `--compact` | — | `false` | Enable compact output mode |\n| `--auto-compact` | — | `false` | Auto-compact conversation near context limit |\n\n## Extensions\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--extension` | `-e` | — | Load additional extension file(s) (repeatable) |\n| `--no-extensions` | — | `false` | Disable all extensions |\n\n## Generation parameters\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--max-tokens` | — | `4096` | Maximum tokens in response |\n| `--temperature` | — | `0.7` | Randomness 0.0–1.0 |\n| `--top-p` | — | `0.95` | Nucleus sampling 0.0–1.0 |\n| `--top-k` | — | `40` | Limit top K tokens |\n| `--stop-sequences` | — | — | Custom stop sequences (comma-separated) |\n| `--thinking-level` | — | `off` | Extended thinking level: off, minimal, low, medium, high |\n\n## System\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--config` | — | `~/.kit.yml` | Config file path |\n| `--system-prompt` | — | — | System prompt text or file path |\n| `--debug` | — | `false` | Enable debug logging |\n"},{id:"configuration",title:"Configuration",content:'\n# Configuration\n\nKit looks for configuration in the following locations, in order of priority:\n\n1. CLI flags\n2. Environment variables (with `KIT_` prefix)\n3. `./.kit.yml` / `./.kit.yaml` / `./.kit.json` (project-local)\n4. `~/.kit.yml` / `~/.kit.yaml` / `~/.kit.json` (global)\n\n## Basic configuration\n\nCreate `~/.kit.yml`:\n\n```yaml\nmodel: anthropic/claude-sonnet-4-5-20250929\nmax-tokens: 4096\ntemperature: 0.7\nstream: true\n```\n\n## All configuration keys\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `model` | string | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `max-tokens` | int | `4096` | Maximum tokens in response |\n| `temperature` | float | `0.7` | Randomness 0.0–1.0 |\n| `top-p` | float | `0.95` | Nucleus sampling 0.0–1.0 |\n| `top-k` | int | `40` | Limit top K tokens |\n| `stream` | bool | `true` | Enable streaming output |\n| `debug` | bool | `false` | Enable debug logging |\n| `compact` | bool | `false` | Enable compact output mode |\n| `system-prompt` | string | — | System prompt text or file path |\n| `max-steps` | int | `0` | Maximum agent steps (0 = unlimited) |\n| `thinking-level` | string | `off` | Extended thinking: off, minimal, low, medium, high |\n| `provider-api-key` | string | — | API key for the provider |\n| `provider-url` | string | — | Base URL for provider API |\n| `tls-skip-verify` | bool | `false` | Skip TLS certificate verification |\n| `stop-sequences` | list | — | Custom stop sequences |\n| `theme` | string | — | UI theme |\n| `markdown-theme` | string | — | Markdown rendering theme |\n\n## Environment variables\n\nAny configuration key can be set via environment variable with the `KIT_` prefix. Hyphens become underscores:\n\n```bash\nexport KIT_MODEL="openai/gpt-4o"\nexport KIT_MAX_TOKENS="8192"\nexport KIT_TEMPERATURE="0.5"\n```\n\nProvider API keys use their own environment variables:\n\n```bash\nexport ANTHROPIC_API_KEY="sk-..."\nexport OPENAI_API_KEY="sk-..."\nexport GOOGLE_API_KEY="..."\n```\n\n## MCP server configuration\n\nAdd external MCP servers to your `.kit.yml`:\n\n```yaml\nmcpServers:\n filesystem:\n type: local\n command: ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"]\n environment:\n LOG_LEVEL: "info"\n allowedTools: ["read_file", "write_file"]\n excludedTools: ["delete_file"]\n\n search:\n type: remote\n url: "https://mcp.example.com/search"\n```\n\n### MCP server fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `type` | string | `local` (stdio) or `remote` (streamable HTTP) |\n| `command` | list | Command and args for local servers |\n| `environment` | map | Environment variables for the server process |\n| `url` | string | URL for remote servers |\n| `allowedTools` | list | Whitelist of tool names to expose |\n| `excludedTools` | list | Blacklist of tool names to hide |\n\nA legacy format with `transport`, `args`, `env`, and `headers` fields is also supported.\n'},{id:"development",title:"Development",content:` +# Development + +## Build and test + +\`\`\`bash +# Build +go build -o output/kit ./cmd/kit + +# Run all tests +go test -race ./... + +# Run a specific test +go test -race ./cmd -run TestScriptExecution + +# Lint +go vet ./... + +# Format +go fmt ./... +\`\`\` + +## Project structure + +\`\`\` +cmd/kit/ - CLI entry point (main.go) +cmd/ - CLI command implementations (root, auth, models, etc.) +pkg/kit/ - Go SDK for embedding Kit +internal/app/ - Application orchestrator (agent loop, message store, queue) +internal/agent/ - Agent execution and tool dispatch +internal/auth/ - OAuth authentication and credential storage +internal/acpserver/ - ACP (Agent Client Protocol) server +internal/clipboard/ - Cross-platform clipboard operations +internal/compaction/ - Conversation compaction and summarization +internal/config/ - Configuration management +internal/core/ - Built-in tools (bash, read, write, edit, grep, find, ls) +internal/extensions/ - Yaegi extension system +internal/kitsetup/ - Initial setup wizard +internal/message/ - Message content types and structured content blocks +internal/models/ - Provider and model management +internal/session/ - Session persistence (tree-based JSONL) +internal/skills/ - Skill loading and system prompt composition +internal/tools/ - MCP tool integration +internal/ui/ - Bubble Tea TUI components +examples/extensions/ - Example extension files +npm/ - NPM package wrapper for distribution +\`\`\` + +## Architecture overview + +Kit is built around a few key architectural patterns: + +### Multi-provider LLM support + +The \`llm.Provider\` interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API. + +### MCP client-server model + +External tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in \`.kit.yml\`. + +### Extension system + +Extensions are Go source files interpreted at runtime by Yaegi. The \`internal/extensions/\` package manages loading, symbol export, and lifecycle dispatch. See the [Extension System](/extensions/overview) docs for details. + +### TUI architecture + +The interactive terminal UI is built with [Bubble Tea v2](https://github.com/charmbracelet/bubbletea), using a parent-child model where \`AppModel\` manages child components (\`InputComponent\`, \`StreamComponent\`, etc.). + +### Decoupling pattern + +\`cmd/root.go\` contains converter functions (e.g., \`widgetProviderForUI()\`) that bridge \`internal/extensions/\` types to \`internal/ui/\` types. The UI never imports the extensions package directly. + +## Contributing + +Contributions are welcome! Please see the [contribution guide](https://github.com/mark3labs/kit/blob/master/contribute/contribute.md) for guidelines. + +## Community + +- [Discord](https://discord.gg/RqSS2NQVsY) +- [GitHub Issues](https://github.com/mark3labs/kit/issues) +`},{id:"extensions/capabilities",title:"Capabilities",content:` +# Extension Capabilities + +## Lifecycle events + +Extensions can hook into 18 lifecycle events: + +| Event | Description | +|-------|-------------| +| \`OnSessionStart\` | Session initialized | +| \`OnSessionShutdown\` | Session ending | +| \`OnBeforeAgentStart\` | Before the agent loop begins | +| \`OnAgentStart\` | Agent loop started | +| \`OnAgentEnd\` | Agent loop completed | +| \`OnToolCall\` | Tool call requested by the model | +| \`OnToolExecutionStart\` | Tool execution beginning | +| \`OnToolExecutionEnd\` | Tool execution completed | +| \`OnToolResult\` | Tool result returned | +| \`OnInput\` | User input received | +| \`OnMessageStart\` | Assistant message started | +| \`OnMessageUpdate\` | Streaming text chunk received | +| \`OnMessageEnd\` | Assistant message completed | +| \`OnModelChange\` | Model switched | +| \`OnContextPrepare\` | Context being assembled for the model | +| \`OnBeforeFork\` | Before forking a conversation branch | +| \`OnBeforeSessionSwitch\` | Before switching sessions | +| \`OnBeforeCompact\` | Before conversation compaction | + +### Example + +\`\`\`go +api.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) { + ctx.PrintInfo("Calling tool: " + event.Name) +}) + +api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) { + ctx.PrintInfo("Agent finished") +}) +\`\`\` + +## Tools + +Register custom tools that the LLM can invoke: + +\`\`\`go +api.RegisterTool(ext.ToolDef{ + Name: "weather", + Description: "Get current weather for a location", + Parameters: map[string]ext.ParameterDef{ + "city": {Type: "string", Description: "City name", Required: true}, + }, + Handler: func(ctx ext.Context, params map[string]any) (string, error) { + city := params["city"].(string) + return "Sunny, 72°F in " + city, nil + }, +}) +\`\`\` + +## Commands + +Register slash commands that users can invoke directly: + +\`\`\`go +api.RegisterCommand(ext.CommandDef{ + Name: "stats", + Description: "Show context statistics", + Handler: func(ctx ext.Context, args string) { + stats := ctx.GetContextStats() + ctx.PrintInfo(fmt.Sprintf("Tokens: %d", stats.TotalTokens)) + }, +}) +\`\`\` + +## Widgets + +Add persistent status displays above or below the input area: + +\`\`\`go +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 1,234"}, +}) + +// Update later +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 2,456"}, +}) + +// Remove +ctx.RemoveWidget("token-count") +\`\`\` + +## Headers and footers + +Persistent content above and below the conversation: + +\`\`\`go +ctx.SetHeader(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Project: my-app | Branch: main"}, +}) + +ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Plan Mode (read-only)"}, +}) +\`\`\` + +## Status bar + +Custom status bar entries: + +\`\`\`go +ctx.SetStatus("mode", "Planning") +ctx.RemoveStatus("mode") +\`\`\` + +## Shortcuts + +Global keyboard shortcuts: + +\`\`\`go +api.RegisterShortcut(ext.ShortcutDef{ + Key: "ctrl+t", + Description: "Toggle plan mode", +}, func(ctx ext.Context) { + // handle shortcut +}) +\`\`\` + +## Overlays + +Modal dialogs with markdown content: + +\`\`\`go +ctx.ShowOverlay(ext.OverlayConfig{ + Title: "Help", + Content: "# Keyboard Shortcuts\\n\\n- **ctrl+t** — Toggle plan mode\\n- **ctrl+s** — Save session", +}) +\`\`\` + +## Tool renderers + +Customize how specific tool calls are displayed in the TUI: + +\`\`\`go +api.RegisterToolRenderer(ext.ToolRenderConfig{ + ToolName: "bash", + Render: func(name, args, result string, isError bool) string { + return "$ " + args + "\\n" + result + }, +}) +\`\`\` + +## Message renderers + +Custom rendering for assistant messages: + +\`\`\`go +api.RegisterMessageRenderer(ext.MessageRendererConfig{ + Name: "custom", + Render: func(content string) string { + return ">> " + content + }, +}) +\`\`\` + +## Editor interceptors + +Handle key events and wrap the editor's rendering: + +\`\`\`go +ctx.SetEditor(ext.EditorConfig{ + HandleKey: func(key, text string) ext.EditorKeyAction { + if key == "escape" { + return ext.EditorKeyAction{Handled: true} + } + return ext.EditorKeyAction{Handled: false} + }, +}) +\`\`\` + +## Interactive prompts + +Select, confirm, input, and multi-select dialogs: + +\`\`\`go +// Single select +response := ctx.PromptSelect(ext.PromptSelectConfig{ + Title: "Choose a model", + Options: []string{"claude-sonnet", "gpt-4o", "llama3"}, +}) + +// Confirm +confirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{ + Title: "Delete this file?", +}) + +// Text input +name := ctx.PromptInput(ext.PromptInputConfig{ + Title: "Enter project name", + Placeholder: "my-project", +}) +\`\`\` + +## Options + +Register configurable extension options: + +\`\`\`go +api.RegisterOption(ext.OptionDef{ + Name: "auto-commit", + Description: "Automatically commit on shutdown", + DefaultValue: "false", +}) +\`\`\` + +## Subagents + +Spawn in-process child Kit instances: + +\`\`\`go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Analyze the test files and summarize coverage", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a test analysis expert.", +}) +\`\`\` + +## LLM completion + +Make direct model calls without going through the agent loop: + +\`\`\`go +response := ctx.Complete(ext.CompleteRequest{ + Prompt: "Summarize this in one sentence: " + content, +}) +\`\`\` + +## Custom events + +Inter-extension communication: + +\`\`\`go +// Emit +ctx.EmitCustomEvent("my-extension:data-ready", payload) + +// Listen +api.OnCustomEvent("my-extension:data-ready", func(data any, ctx ext.Context) { + // handle event +}) +\`\`\` +`},{id:"extensions/examples",title:"Examples",content:` +# Extension Examples + +Kit ships with a rich set of example extensions in the \`examples/extensions/\` directory. These serve as both documentation and starting points for your own extensions. + +## UI and display + +| Extension | Description | +|-----------|-------------| +| \`minimal.go\` | Clean UI with custom footer | +| \`branded-output.go\` | Branded output rendering | +| \`header-footer-demo.go\` | Custom headers and footers | +| \`widget-status.go\` | Persistent status widgets | +| \`overlay-demo.go\` | Modal dialogs | +| \`tool-renderer-demo.go\` | Custom tool call rendering | +| \`custom-editor-demo.go\` | Vim-like modal editor | +| \`pirate.go\` | Pirate-themed personality | + +## Workflow and automation + +| Extension | Description | +|-----------|-------------| +| \`auto-commit.go\` | Auto-commit changes on shutdown | +| \`plan-mode.go\` | Read-only planning mode | +| \`permission-gate.go\` | Permission gating for destructive tools | +| \`confirm-destructive.go\` | Confirm destructive operations | +| \`protected-paths.go\` | Path protection for sensitive files | +| \`project-rules.go\` | Project-specific rules injection | +| \`compact-notify.go\` | Notification on conversation compaction | + +## Interactive features + +| Extension | Description | +|-----------|-------------| +| \`prompt-demo.go\` | Interactive prompts (select/confirm/input) | +| \`bookmark.go\` | Bookmark conversations | +| \`inline-bash.go\` | Inline bash execution | +| \`interactive-shell.go\` | Interactive shell integration | +| \`notify.go\` | Desktop notifications | + +## Agent and context + +| Extension | Description | +|-----------|-------------| +| \`tool-logger.go\` | Log all tool calls | +| \`context-inject.go\` | Inject context into conversations | +| \`summarize.go\` | Conversation summarization | +| \`lsp-diagnostics.go\` | LSP diagnostic integration | + +## Multi-agent + +| Extension | Description | +|-----------|-------------| +| \`kit-kit.go\` | Kit-in-Kit sub-agent spawning | +| \`subagent-widget.go\` | Multi-agent orchestration with status widget | +| \`subagent-test.go\` | Subagent testing utilities | + +## Development + +| Extension | Description | +|-----------|-------------| +| \`dev-reload.go\` | Development live-reload | + +## Subdirectory extensions + +| Directory | Description | +|-----------|-------------| +| \`kit-kit-agents/\` | Multi-agent orchestration example | +| \`kit-telegram/\` | Telegram bot integration | +| \`status-tools/\` | Status bar tool examples | +`},{id:"extensions/loading",title:"Loading Extensions",content:` +# Loading Extensions + +## Auto-discovery + +Kit automatically discovers and loads extensions from these paths, in order: + +| Path | Scope | +|------|-------| +| \`~/.config/kit/extensions/*.go\` | Global single files | +| \`~/.config/kit/extensions/*/main.go\` | Global subdirectory extensions | +| \`.kit/extensions/*.go\` | Project-local single files | +| \`.kit/extensions/*/main.go\` | Project-local subdirectory extensions | +| \`~/.local/share/kit/git/\` | Global git-installed packages | +| \`.kit/git/\` | Project-local git-installed packages | + +## Explicit loading + +Load extensions by path using the \`-e\` flag: + +\`\`\`bash +kit -e path/to/extension.go +\`\`\` + +Load multiple extensions: + +\`\`\`bash +kit -e ext1.go -e ext2.go +\`\`\` + +## Disabling extensions + +Disable all auto-discovered extensions: + +\`\`\`bash +kit --no-extensions +\`\`\` + +You can combine \`--no-extensions\` with \`-e\` to load only specific extensions: + +\`\`\`bash +kit --no-extensions -e my-extension.go +\`\`\` + +## Installing from git + +Install extensions from git repositories using \`kit install\`: + +\`\`\`bash +# Install globally (to ~/.local/share/kit/git/) +kit install https://github.com/user/my-kit-extension.git + +# Install project-locally (to .kit/git/) +kit install -l https://github.com/user/my-kit-extension.git + +# Update an installed package +kit install -u https://github.com/user/my-kit-extension.git + +# Remove +kit install --uninstall my-kit-extension +\`\`\` + +## Extension structure + +### Single-file extensions + +A single \`.go\` file with an \`Init\` function: + +\`\`\`go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + // register handlers, tools, commands, etc. +} +\`\`\` + +The \`//go:build ignore\` directive prevents the Go toolchain from trying to compile the file as part of a normal build. + +### Subdirectory extensions + +For more complex extensions, create a directory with a \`main.go\` entry point: + +\`\`\` +.kit/extensions/my-extension/ +├── main.go # Must contain Init(api ext.API) +├── helpers.go # Additional source files +└── config.go +\`\`\` + +### Package-level state + +Yaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks: + +\`\`\`go +package main + +import "kit/ext" + +var callCount int + +func Init(api ext.API) { + api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) { + callCount++ + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{ + Text: fmt.Sprintf("Tools called: %d", callCount), + }, + }) + }) +} +\`\`\` +`},{id:"extensions/overview",title:"Extension System",content:'\n# Extension System\n\nExtensions are Go source files interpreted at runtime via [Yaegi](https://github.com/traefik/yaegi). They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit.\n\n## Minimal extension\n\n```go\n//go:build ignore\n\npackage main\n\nimport "kit/ext"\n\nfunc Init(api ext.API) {\n api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {\n ctx.SetFooter(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{Text: "Custom Footer"},\n })\n })\n}\n```\n\nRun it with:\n\n```bash\nkit -e examples/extensions/minimal.go\n```\n\n## How extensions work\n\n1. Kit discovers extension files from [auto-discovery paths](/extensions/loading) or explicit `-e` flags\n2. Each `.go` file is loaded into a Yaegi interpreter with access to the `kit/ext` package\n3. Kit calls the `Init(api ext.API)` function in each extension\n4. The extension registers callbacks, tools, commands, and UI components via the `api` and `ctx` objects\n\n## Key concepts\n\n### The `API` object\n\nPassed to `Init()`, the `API` object is used to register lifecycle event handlers and static components:\n\n- **Lifecycle handlers** — `api.OnSessionStart(...)`, `api.OnToolCall(...)`, etc.\n- **Tools** — `api.RegisterTool(ext.ToolDef{...})`\n- **Commands** — `api.RegisterCommand(ext.CommandDef{...})`\n- **Shortcuts** — `api.RegisterShortcut(ext.ShortcutDef{...}, handler)`\n- **Tool renderers** — `api.RegisterToolRenderer(ext.ToolRenderConfig{...})`\n- **Message renderers** — `api.RegisterMessageRenderer(ext.MessageRendererConfig{...})`\n- **Options** — `api.RegisterOption(ext.OptionDef{...})`\n\n### The `Context` object\n\nPassed to event handlers, the `Context` object provides runtime access to Kit\'s state and UI:\n\n- **Output** — `ctx.Print(...)`, `ctx.PrintInfo(...)`, `ctx.PrintError(...)`\n- **UI components** — `ctx.SetWidget(...)`, `ctx.SetHeader(...)`, `ctx.SetFooter(...)`, `ctx.SetStatus(...)`\n- **Editor** — `ctx.SetEditor(...)`, `ctx.ResetEditor()`\n- **Prompts** — `ctx.PromptSelect(...)`, `ctx.PromptConfirm(...)`, `ctx.PromptInput(...)`\n- **Overlays** — `ctx.ShowOverlay(...)`\n- **Messages** — `ctx.SendMessage(...)`, `ctx.GetMessages()`\n- **Model** — `ctx.SetModel(...)`, `ctx.GetAvailableModels()`\n- **Tools** — `ctx.GetAllTools()`, `ctx.SetActiveTools(...)`\n- **Context stats** — `ctx.GetContextStats()`\n- **Session data** — `ctx.AppendEntry(...)`, `ctx.GetEntries(...)`\n- **Subagents** — `ctx.SpawnSubagent(...)`\n- **LLM completion** — `ctx.Complete(...)`\n- **Custom events** — `ctx.EmitCustomEvent(...)`\n- **App control** — `ctx.Exit()`, `ctx.ReloadExtensions()`\n\nSee [Capabilities](/extensions/capabilities) for full details on each component type.\n'},{id:"index",title:"Kit",content:` +
    + KIT +
    + +A powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system. + +## Features + +- **Multi-Provider LLM Support** — Anthropic, OpenAI, Google Gemini, Ollama, Azure OpenAI, AWS Bedrock, OpenRouter, and more +- **Built-in Core Tools** — bash, read, write, edit, grep, find, ls, spawn_subagent with no MCP overhead +- **MCP Integration** — Connect external MCP servers for expanded capabilities +- **Extension System** — Write custom tools, commands, widgets, and UI modifications in Go +- **Interactive TUI** — Rich terminal interface powered by Bubble Tea with streaming, syntax highlighting, and custom rendering +- **Session Management** — Tree-based conversation history with branching support +- **Non-Interactive Mode** — Script-friendly positional args with JSON output +- **ACP Server** — Run Kit as an [Agent Client Protocol](https://agentclientprotocol.com) agent over stdio +- **Go SDK** — Embed Kit in your own applications + +## Quick links + +| Resource | Description | +|----------|-------------| +| [Installation](/installation) | Get Kit up and running | +| [Quick Start](/quick-start) | Your first Kit session | +| [Configuration](/configuration) | Customize Kit for your workflow | +| [Extensions](/extensions/overview) | Build custom tools and UI components | +| [Go SDK](/sdk/overview) | Embed Kit in your applications | +`},{id:"installation",title:"Installation",content:` +# Installation + +## Using npm (recommended) + +\`\`\`bash +npm install -g @mark3labs/kit +\`\`\` + +## Using Go + +\`\`\`bash +go install github.com/mark3labs/kit/cmd/kit@latest +\`\`\` + +## Building from source + +\`\`\`bash +git clone https://github.com/mark3labs/kit.git +cd kit +go build -o kit ./cmd/kit +\`\`\` + +## Verifying the installation + +After installing, verify Kit is available: + +\`\`\`bash +kit --help +\`\`\` + +## Setting up a provider + +Kit needs at least one LLM provider configured. Set an API key for your preferred provider: + +\`\`\`bash +# Anthropic (default provider) +export ANTHROPIC_API_KEY="sk-..." + +# OpenAI +export OPENAI_API_KEY="sk-..." + +# Google Gemini +export GOOGLE_API_KEY="..." +\`\`\` + +For OAuth-enabled providers like Anthropic, you can also authenticate interactively: + +\`\`\`bash +kit auth login anthropic +\`\`\` + +See [Providers](/providers) for the full list of supported providers and their configuration. +`},{id:"providers",title:"Providers",content:` +# Providers + +Kit supports a wide range of LLM providers through a unified \`provider/model\` string format. + +## Supported providers + +| Provider | Prefix | Description | +|----------|--------|-------------| +| **Anthropic** | \`anthropic/\` | Claude models (native, prompt caching, OAuth) | +| **OpenAI** | \`openai/\` | GPT models | +| **Google** | \`google/\` or \`gemini/\` | Gemini models | +| **Ollama** | \`ollama/\` | Local models | +| **Azure OpenAI** | \`azure/\` | Azure-hosted OpenAI | +| **AWS Bedrock** | \`bedrock/\` | Bedrock models | +| **Google Vertex** | \`google-vertex-anthropic/\` | Claude on Vertex AI | +| **OpenRouter** | \`openrouter/\` | Multi-provider router | +| **Vercel AI** | \`vercel/\` | Vercel AI SDK models | +| **Auto-routed** | any | Any provider from the models.dev database | + +## Model string format + +\`\`\`bash +provider/model # Standard format +anthropic/claude-sonnet-4-5-20250929 +openai/gpt-4o +ollama/llama3 +google/gemini-2.0-flash-exp +\`\`\` + +## Model aliases + +Kit provides aliases for commonly used models: + +\`\`\`bash +claude-opus-latest → claude-opus-4-20250514 +claude-sonnet-latest → claude-sonnet-4-5-20250929 +claude-4-opus-latest → claude-opus-4-20250514 +claude-4-sonnet-latest → claude-sonnet-4-5-20250929 +claude-3-7-sonnet-latest → claude-3-7-sonnet-20250219 +claude-3-5-sonnet-latest → claude-3-5-sonnet-20241022 +claude-3-5-haiku-latest → claude-3-5-haiku-20241022 +claude-3-opus-latest → claude-3-opus-20240229 +\`\`\` + +## Specifying a model + +Via CLI flag: + +\`\`\`bash +kit --model openai/gpt-4o +kit -m ollama/llama3 +\`\`\` + +Via config file: + +\`\`\`yaml +model: anthropic/claude-sonnet-4-5-20250929 +\`\`\` + +Via environment variable: + +\`\`\`bash +export KIT_MODEL="google/gemini-2.0-flash-exp" +\`\`\` + +## Authentication + +### API keys + +Set the appropriate environment variable for your provider: + +\`\`\`bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +\`\`\` + +Or pass it directly: + +\`\`\`bash +kit --provider-api-key "sk-..." --model openai/gpt-4o +\`\`\` + +### OAuth + +For providers that support OAuth (e.g., Anthropic): + +\`\`\`bash +kit auth login anthropic # Start OAuth flow +kit auth status # Check authentication status +kit auth logout anthropic # Remove credentials +\`\`\` + +### Custom provider URL + +For self-hosted or proxy endpoints: + +\`\`\`bash +kit --provider-url "https://my-proxy.example.com/v1" --model openai/gpt-4o +\`\`\` + +## Model database + +Kit ships with a local model database that maps provider names to API configurations. You can manage it with: + +\`\`\`bash +kit models # List available models +kit models openai # Filter by provider +kit models --all # Show all providers +kit update-models # Update from models.dev +kit update-models embedded # Reset to bundled database +\`\`\` +`},{id:"quick-start",title:"Quick Start",content:` +# Quick Start + +## Basic usage + +Start an interactive session: + +\`\`\`bash +kit +\`\`\` + +Run a one-off prompt: + +\`\`\`bash +kit "List files in src/" +\`\`\` + +Attach files as context using the \`@\` prefix: + +\`\`\`bash +kit @main.go @test.go "Review these files" +\`\`\` + +Use a specific model: + +\`\`\`bash +kit --model anthropic/claude-sonnet-4-5-20250929 +\`\`\` + +## Non-interactive mode + +Kit can run as a non-interactive tool for scripting and automation. + +Get JSON output: + +\`\`\`bash +kit "Explain main.go" --json +\`\`\` + +Quiet mode (final response only, no TUI): + +\`\`\`bash +kit "Run tests" --quiet +\`\`\` + +Ephemeral mode (no session file created): + +\`\`\`bash +kit "Quick question" --no-session +\`\`\` + +## Resuming sessions + +Continue the most recent session for the current directory: + +\`\`\`bash +kit --continue +# or +kit -c +\`\`\` + +Pick from previous sessions interactively: + +\`\`\`bash +kit --resume +# or +kit -r +\`\`\` + +## ACP server mode + +Kit can run as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server, enabling ACP-compatible clients (such as [OpenCode](https://github.com/sst/opencode)) to drive Kit as a remote coding agent over stdio: + +\`\`\`bash +# Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout) +kit acp + +# With debug logging to stderr +kit acp --debug +\`\`\` + +The ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol. +`},{id:"sdk/callbacks",title:"Callbacks",content:` +# Callbacks + +## PromptWithCallbacks + +The \`PromptWithCallbacks\` method provides real-time visibility into tool calls and streaming output: + +\`\`\`go +response, err := host.PromptWithCallbacks( + ctx, + "List files in current directory", + func(name, args string) { + // Called when the model invokes a tool + fmt.Println("Calling tool:", name) + }, + func(name, args, result string, isError bool) { + // Called when a tool returns its result + if isError { + fmt.Println("Tool failed:", name) + } + }, + func(chunk string) { + // Called for each streaming text chunk + fmt.Print(chunk) + }, +) +\`\`\` + +### Callback signatures + +| Callback | Signature | When | +|----------|-----------|------| +| \`onToolCall\` | \`func(name, args string)\` | Model requests a tool call | +| \`onToolResult\` | \`func(name, args, result string, isError bool)\` | Tool execution completes | +| \`onStreaming\` | \`func(chunk string)\` | Streaming text chunk received | + +Any callback can be \`nil\` if you don't need it: + +\`\`\`go +// Only care about streaming output +response, err := host.PromptWithCallbacks(ctx, "Hello", nil, nil, func(chunk string) { + fmt.Print(chunk) +}) +\`\`\` + +## Event-based monitoring + +For more granular control, use the event subscription API: + +\`\`\`go +// Subscribe returns an unsubscribe function +unsub := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Printf("Tool: %s, Args: %s\\n", event.Name, event.Args) +}) +defer unsub() + +unsub2 := host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Printf("Result: %s (error: %v)\\n", event.Name, event.IsError) +}) +defer unsub2() + +unsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +defer unsub3() + +unsub4 := host.OnResponse(func(event kit.ResponseEvent) { + fmt.Println("Final response received") +}) +defer unsub4() + +unsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) { + fmt.Println("Turn started") +}) +defer unsub5() + +unsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) { + fmt.Println("Turn ended") +}) +defer unsub6() +\`\`\` + +## Hook system + +Hooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations: + +\`\`\`go +// Intercept tool calls before execution +host.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) { + if name == "bash" { + log.Println("Bash command:", args) + } + return args, nil // return modified args or error to cancel +}) + +// Process results after tool execution +host.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) { + return result, nil +}) + +// Before/after each agent turn +host.OnBeforeTurn(0, func(ctx context.Context) error { + return nil +}) + +host.OnAfterTurn(0, func(ctx context.Context) error { + return nil +}) +\`\`\` + +The first argument is a priority (lower = runs first). +`},{id:"sdk/options",title:"SDK Options",content:'\n# SDK Options\n\nPass an `Options` struct to `kit.New()` to configure the Kit instance.\n\n## Full options reference\n\n```go\nhost, err := kit.New(ctx, &kit.Options{\n // Model\n Model: "ollama/llama3",\n SystemPrompt: "You are a helpful bot",\n ConfigFile: "/path/to/config.yml",\n\n // Behavior\n MaxSteps: 10,\n Streaming: true,\n Quiet: true,\n Debug: true,\n\n // Session\n SessionPath: "./session.jsonl",\n SessionDir: "/custom/sessions/",\n Continue: true,\n NoSession: true,\n\n // Tools\n Tools: []kit.Tool{...}, // Replace default tool set entirely\n ExtraTools: []kit.Tool{...}, // Add tools alongside defaults\n\n // Compaction\n AutoCompact: true,\n\n // Skills\n Skills: []string{"/path/to/skill.md"},\n SkillsDir: "/path/to/skills/",\n})\n```\n\n## Options fields\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `Model` | `string` | config default | Model string (provider/model format) |\n| `SystemPrompt` | `string` | — | System prompt text or file path |\n| `ConfigFile` | `string` | `~/.kit.yml` | Path to config file |\n| `MaxSteps` | `int` | `0` | Max agent steps (0 = unlimited) |\n| `Streaming` | `bool` | `true` | Enable streaming output |\n| `Quiet` | `bool` | `false` | Suppress output |\n| `Debug` | `bool` | `false` | Enable debug logging |\n| `SessionPath` | `string` | — | Open a specific session file |\n| `SessionDir` | `string` | — | Base directory for session discovery |\n| `Continue` | `bool` | `false` | Resume most recent session |\n| `NoSession` | `bool` | `false` | Ephemeral mode (no persistence) |\n| `Tools` | `[]Tool` | — | Replace the entire default tool set |\n| `ExtraTools` | `[]Tool` | — | Additional tools alongside core/MCP/extension tools |\n| `AutoCompact` | `bool` | `false` | Auto-compact when near context limit |\n| `CompactionOptions` | `*CompactionOptions` | — | Configuration for auto-compaction |\n| `Skills` | `[]string` | — | Explicit skill files/dirs to load |\n| `SkillsDir` | `string` | — | Override default skills directory |\n'},{id:"sdk/overview",title:"Go SDK",content:` +# Go SDK + +The \`pkg/kit\` package lets you embed Kit as a library in your Go applications. + +## Installation + +\`\`\`bash +go get github.com/mark3labs/kit/pkg/kit +\`\`\` + +## Basic usage + +\`\`\`go +package main + +import ( + "context" + "log" + + kit "github.com/mark3labs/kit/pkg/kit" +) + +func main() { + ctx := context.Background() + + // Create Kit instance with default configuration + host, err := kit.New(ctx, nil) + if err != nil { + log.Fatal(err) + } + defer host.Close() + + // Send a prompt + response, err := host.Prompt(ctx, "What is 2+2?") + if err != nil { + log.Fatal(err) + } + + println(response) +} +\`\`\` + +## Multi-turn conversations + +Conversations retain context automatically across calls: + +\`\`\`go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +\`\`\` + +## Additional prompt methods + +The SDK provides several prompt variants: + +| Method | Description | +|--------|-------------| +| \`Prompt(ctx, message)\` | Simple prompt, returns response string | +| \`PromptWithCallbacks(ctx, message, ...)\` | With tool call and streaming callbacks | +| \`PromptWithOptions(ctx, message, opts)\` | With per-call options | +| \`PromptResult(ctx, message)\` | Returns full \`TurnResult\` with usage stats | +| \`PromptResultWithFiles(ctx, message, files)\` | Multimodal with file attachments | +| \`Steer(ctx, instruction)\` | System-level steering without user message | +| \`FollowUp(ctx, text)\` | Continue without new user input | + +## Event system + +Subscribe to events for monitoring: + +\`\`\`go +unsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Println("Tool called:", event.Name) +}) +defer unsubscribe() + +host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Println("Tool result:", event.Name) +}) + +host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +\`\`\` + +## Model management + +Switch models at runtime: + +\`\`\`go +host.SetModel(ctx, "openai/gpt-4o") +info := host.GetModelInfo() +models := host.GetAvailableModels() +\`\`\` + +## Context and compaction + +Monitor and manage context usage: + +\`\`\`go +tokens := host.EstimateContextTokens() +stats := host.GetContextStats() + +if host.ShouldCompact() { + result, err := host.Compact(ctx, nil, "") +} +\`\`\` + +See [Options](/sdk/options), [Callbacks](/sdk/callbacks), and [Sessions](/sdk/sessions) for more details. +`},{id:"sdk/sessions",title:"SDK Sessions",content:` +# SDK Sessions + +## Automatic persistence + +By default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls: + +\`\`\`go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +\`\`\` + +## Accessing session info + +\`\`\`go +// Get the current session file path +path := host.GetSessionPath() + +// Get the session ID +id := host.GetSessionID() + +// Get the current model string +model := host.GetModelString() +\`\`\` + +## Configuring sessions via Options + +Session behavior is configured at initialization: + +\`\`\`go +// Open a specific session file +host, _ := kit.New(ctx, &kit.Options{ + SessionPath: "./my-session.jsonl", +}) + +// Resume the most recent session for the current directory +host, _ := kit.New(ctx, &kit.Options{ + Continue: true, +}) + +// Ephemeral mode (no file persistence) +host, _ := kit.New(ctx, &kit.Options{ + NoSession: true, +}) + +// Custom session directory +host, _ := kit.New(ctx, &kit.Options{ + SessionDir: "/custom/sessions/", +}) +\`\`\` + +## Clearing history + +Clear the in-memory conversation history (does not delete the session file): + +\`\`\`go +host.ClearSession() +\`\`\` + +## Tree-based sessions + +Kit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths: + +\`\`\`go +// Access the tree session manager +ts := host.GetTreeSession() + +// Branch from a specific entry +err := host.Branch("entry-id-123") +\`\`\` + +## Listing and managing sessions + +Package-level functions for session discovery: + +\`\`\`go +// List sessions for a specific directory +sessions := kit.ListSessions("/home/user/project") + +// List all sessions across all directories +all := kit.ListAllSessions() + +// Delete a session file +kit.DeleteSession("/path/to/session.jsonl") +\`\`\` +`},{id:"sessions",title:"Session Management",content:` +# Session Management + +Kit uses a tree-based session model that supports branching and forking conversations. + +## Session storage + +Sessions are stored as JSONL (JSON Lines) files: + +\`\`\` +~/.kit/sessions//_.jsonl +\`\`\` + +Path separators in the working directory are replaced with \`--\`. For example, \`/home/user/project\` becomes \`home--user--project\`. + +Each line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths. + +## Resuming sessions + +### Continue most recent + +Resume the most recent session for the current directory: + +\`\`\`bash +kit --continue +kit -c +\`\`\` + +### Interactive picker + +Choose from previous sessions interactively: + +\`\`\`bash +kit --resume +kit -r +\`\`\` + +### Open a specific session + +\`\`\`bash +kit --session path/to/session.jsonl +kit -s path/to/session.jsonl +\`\`\` + +## Ephemeral mode + +Run without creating a session file: + +\`\`\`bash +kit --no-session +\`\`\` + +This is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed. +`}],b0={};function S0(u){return u>=200&&u<300?"#22c55e":u>=400&&u<500?"#f59e0b":u>=500?"#ef4444":"#6b7280"}function T0(u,h,d,c){let v=h;for(const[M,D]of Object.entries(d))v=v.replace(`{${M}}`,encodeURIComponent(D));const E=new URL(v,u);for(const[M,D]of Object.entries(c))D&&E.searchParams.set(M,D);return E.toString()}function E0(u){return u==="bearer"?"Authorization":"X-API-Key"}const Fu={width:"100%",padding:"6px 10px",border:"1px solid var(--bd)",borderRadius:4,background:"var(--bg)",color:"var(--tx)",fontSize:13,fontFamily:"var(--font-code, monospace)",boxSizing:"border-box"};function Ju({param:u,value:h,onChange:d}){return s.jsxs("div",{style:{marginBottom:10},children:[s.jsxs("label",{style:{display:"block",fontSize:12,fontWeight:600,marginBottom:3,color:"var(--tx)"},children:[u.name,u.required&&s.jsx("span",{style:{color:"#ef4444",marginLeft:2},children:"*"}),s.jsxs("span",{style:{fontWeight:400,color:"var(--txM)",marginLeft:6,fontSize:11},children:[u.in," · ",u.type]})]}),s.jsx("input",{"data-testid":`param-input-${u.name}`,style:Fu,placeholder:u.description||u.name,value:h,onChange:c=>d(c.target.value)})]})}function A0({endpoint:u,baseUrl:h,auth:d}){var lt;const[c,v]=B.useState(!1),[E,M]=B.useState({}),[D,z]=B.useState((lt=u.requestBody)!=null&<.schema?JSON.stringify(u.requestBody.schema,null,2):""),[y,G]=B.useState(""),[R,K]=B.useState(!1),[nt,bt]=B.useState(null),[Ot,jt]=B.useState(null),[W,I]=B.useState(!1),ct=(P,mt)=>M(tt=>({...tt,[P]:mt})),Q=u.parameters.filter(P=>P.in==="path"),Y=u.parameters.filter(P=>P.in==="query"),H=u.parameters.filter(P=>P.in==="header"),U=u.requestBody!=null,at=async()=>{K(!0),bt(null),jt(null);const P={};for(const Mt of Q)P[Mt.name]=E[Mt.name]||"";const mt={};for(const Mt of Y)E[Mt.name]&&(mt[Mt.name]=E[Mt.name]);const tt={};for(const Mt of H)E[Mt.name]&&(tt[Mt.name]=E[Mt.name]);if(U&&(tt["Content-Type"]="application/json"),d&&y){const Mt=d.header||E0(d.type);tt[Mt]=d.type==="bearer"?`Bearer ${y}`:y}try{const Mt=T0(h,u.path,P,mt),$t=Date.now(),ft=await fetch(Mt,{method:u.method.toUpperCase(),headers:tt,body:U&&D?D:void 0}),C=Date.now()-$t,w={};ft.headers.forEach((Tt,m)=>{w[m]=Tt});let Z;if((ft.headers.get("content-type")||"").includes("json")){const Tt=await ft.json();Z=JSON.stringify(Tt,null,2)}else Z=await ft.text();bt({status:ft.status,statusText:ft.statusText,headers:w,body:Z,time:C})}catch(Mt){jt(Mt instanceof Error?Mt.message:"Network error")}finally{K(!1)}};return s.jsxs("div",{"data-testid":"api-playground",style:{border:"1px solid var(--bd)",borderRadius:6,overflow:"hidden",marginTop:8},children:[s.jsxs("button",{"data-testid":"playground-toggle",onClick:()=>v(!c),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"10px 14px",background:"var(--sf)",border:"none",cursor:"pointer",fontFamily:"inherit",fontSize:13,fontWeight:600,color:"var(--ac)"},children:[s.jsx("span",{style:{fontSize:14},children:c?"▼":"▶"}),"Try it out"]}),c&&s.jsxs("div",{style:{padding:"14px 16px",borderTop:"1px solid var(--bd)"},children:[d&&s.jsxs("div",{style:{marginBottom:12},children:[s.jsx("label",{style:{display:"block",fontSize:12,fontWeight:600,marginBottom:3,color:"var(--tx)"},children:d.type==="bearer"?"Bearer Token":"API Key"}),s.jsx("input",{"data-testid":"auth-input",type:"password",style:Fu,placeholder:d.type==="bearer"?"Enter bearer token":"Enter API key",value:y,onChange:P=>G(P.target.value)})]}),Q.length>0&&s.jsxs("div",{style:{marginBottom:4},children:[s.jsx("div",{style:{fontSize:11,fontWeight:700,textTransform:"uppercase",color:"var(--txM)",marginBottom:6,letterSpacing:"0.05em"},children:"Path Parameters"}),Q.map(P=>s.jsx(Ju,{param:P,value:E[P.name]||"",onChange:mt=>ct(P.name,mt)},P.name))]}),Y.length>0&&s.jsxs("div",{style:{marginBottom:4},children:[s.jsx("div",{style:{fontSize:11,fontWeight:700,textTransform:"uppercase",color:"var(--txM)",marginBottom:6,letterSpacing:"0.05em"},children:"Query Parameters"}),Y.map(P=>s.jsx(Ju,{param:P,value:E[P.name]||"",onChange:mt=>ct(P.name,mt)},P.name))]}),H.length>0&&s.jsxs("div",{style:{marginBottom:4},children:[s.jsx("div",{style:{fontSize:11,fontWeight:700,textTransform:"uppercase",color:"var(--txM)",marginBottom:6,letterSpacing:"0.05em"},children:"Header Parameters"}),H.map(P=>s.jsx(Ju,{param:P,value:E[P.name]||"",onChange:mt=>ct(P.name,mt)},P.name))]}),U&&s.jsxs("div",{style:{marginBottom:12},children:[s.jsx("label",{style:{display:"block",fontSize:12,fontWeight:600,marginBottom:3,color:"var(--tx)"},children:"Request Body"}),s.jsx("textarea",{"data-testid":"request-body",style:{...Fu,minHeight:100,resize:"vertical",lineHeight:1.5},value:D,onChange:P=>z(P.target.value)})]}),s.jsx("button",{"data-testid":"send-request",onClick:at,disabled:R,style:{padding:"8px 20px",borderRadius:4,border:"none",background:"var(--ac)",color:"#fff",fontWeight:600,fontSize:13,cursor:R?"wait":"pointer",opacity:R?.7:1,fontFamily:"inherit"},children:R?"Sending...":"Send Request"}),Ot&&s.jsx("div",{"data-testid":"playground-error",style:{marginTop:12,padding:"10px 14px",borderRadius:4,background:"#ef444418",border:"1px solid #ef444444",color:"#ef4444",fontSize:13},children:Ot}),nt&&s.jsxs("div",{"data-testid":"playground-response",style:{marginTop:12},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:8},children:[s.jsxs("span",{"data-testid":"response-status",style:{padding:"2px 10px",borderRadius:4,fontSize:13,fontWeight:700,fontFamily:"var(--font-code, monospace)",color:"#fff",background:S0(nt.status)},children:[nt.status," ",nt.statusText]}),s.jsxs("span",{style:{fontSize:12,color:"var(--txM)"},children:[nt.time,"ms"]})]}),s.jsxs("button",{"data-testid":"toggle-headers",onClick:()=>I(!W),style:{display:"flex",alignItems:"center",gap:4,background:"none",border:"none",cursor:"pointer",fontSize:12,color:"var(--txM)",padding:"4px 0",fontFamily:"inherit",marginBottom:4},children:[s.jsx("span",{style:{transform:W?"rotate(90deg)":"rotate(0)",transition:"transform 0.15s"},children:"▶"}),"Response Headers"]}),W&&s.jsx("pre",{style:{background:"var(--sf)",padding:10,borderRadius:4,fontSize:11,fontFamily:"var(--font-code, monospace)",overflow:"auto",lineHeight:1.5,marginBottom:8,color:"var(--tx2)",margin:"0 0 8px 0"},children:Object.entries(nt.headers).map(([P,mt])=>`${P}: ${mt}`).join(` +`)}),s.jsx("pre",{"data-testid":"response-body",style:{background:"var(--cdBg)",color:"var(--cdTx)",padding:14,borderRadius:6,fontSize:12,fontFamily:"var(--font-code, monospace)",overflow:"auto",lineHeight:1.6,margin:0,maxHeight:400},children:nt.body})]})]})]})}function mm({samples:u}){var c;const[h,d]=B.useState(0);return u.length===0?null:s.jsxs("div",{"data-testid":"code-samples",style:{border:"1px solid var(--bd)",borderRadius:8,overflow:"hidden"},children:[s.jsx("div",{style:{display:"flex",borderBottom:"1px solid var(--bd)",background:"var(--sf)",overflowX:"auto",WebkitOverflowScrolling:"touch"},children:u.map((v,E)=>s.jsx("button",{onClick:()=>d(E),style:{padding:"8px 16px",fontSize:13,fontWeight:500,background:E===h?"var(--cdBg)":"transparent",color:E===h?"var(--tx)":"var(--tx2)",border:"none",borderBottom:E===h?"2px solid var(--ac)":"2px solid transparent",cursor:"pointer",fontFamily:"var(--font-body)",whiteSpace:"nowrap"},children:v.label},v.language))}),s.jsx("pre",{style:{margin:0,padding:16,background:"var(--cdBg)",overflow:"auto"},children:s.jsx("code",{style:{fontSize:13,fontFamily:"var(--font-code)"},children:(c=u[h])==null?void 0:c.code})})]})}const pm={get:"#22c55e",post:"#3b82f6",put:"#f59e0b",delete:"#ef4444",patch:"#a78bfa",head:"#6b7280",options:"#6b7280"};function z0({method:u}){const h=pm[u.toLowerCase()]||"#6b7280";return s.jsx("span",{"data-testid":"method-badge",style:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:11,fontWeight:700,fontFamily:"var(--font-code, monospace)",textTransform:"uppercase",color:"#fff",background:h,letterSpacing:"0.05em"},children:u.toUpperCase()})}function C0({parameters:u}){return u.length===0?null:s.jsx("div",{style:{overflowX:"auto",marginBottom:16},children:s.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13,lineHeight:1.5},children:[s.jsx("thead",{children:s.jsxs("tr",{style:{borderBottom:"2px solid var(--bd)",textAlign:"left"},children:[s.jsx("th",{style:{padding:"8px 12px",fontWeight:600,color:"var(--tx)"},children:"Name"}),s.jsx("th",{style:{padding:"8px 12px",fontWeight:600,color:"var(--tx)"},children:"Type"}),s.jsx("th",{style:{padding:"8px 12px",fontWeight:600,color:"var(--tx)"},children:"In"}),s.jsx("th",{style:{padding:"8px 12px",fontWeight:600,color:"var(--tx)"},children:"Required"}),s.jsx("th",{style:{padding:"8px 12px",fontWeight:600,color:"var(--tx)"},children:"Description"})]})}),s.jsx("tbody",{children:u.map((h,d)=>s.jsxs("tr",{style:{borderBottom:"1px solid var(--bd)"},children:[s.jsx("td",{style:{padding:"8px 12px",fontFamily:"var(--font-code, monospace)",fontWeight:500,color:h.in==="path"?"var(--ac)":"var(--tx)"},children:h.name}),s.jsx("td",{style:{padding:"8px 12px",fontFamily:"var(--font-code, monospace)",color:"var(--tx2)"},children:h.type}),s.jsx("td",{style:{padding:"8px 12px",color:"var(--txM)"},children:s.jsx("span",{style:{padding:"1px 6px",borderRadius:3,fontSize:11,background:h.in==="path"?"var(--ac)22":"var(--sf)",color:h.in==="path"?"var(--ac)":"var(--txM)"},children:h.in})}),s.jsx("td",{style:{padding:"8px 12px"},children:h.required?s.jsx("span",{"data-testid":"required-badge",style:{padding:"1px 6px",borderRadius:3,fontSize:11,fontWeight:600,background:"#ef444422",color:"#ef4444"},children:"required"}):s.jsx("span",{style:{color:"var(--txM)",fontSize:12},children:"optional"})}),s.jsx("td",{style:{padding:"8px 12px",color:"var(--tx2)"},children:h.description||"—"})]},`${h.name}-${d}`))})]})})}function j0({requestBody:u}){return s.jsxs("div",{style:{marginBottom:16},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[s.jsx("span",{style:{padding:"2px 8px",borderRadius:4,fontSize:11,fontFamily:"var(--font-code, monospace)",background:"var(--sf)",color:"var(--tx2)"},children:u.contentType}),u.required&&s.jsx("span",{style:{padding:"1px 6px",borderRadius:3,fontSize:11,fontWeight:600,background:"#ef444422",color:"#ef4444"},children:"required"})]}),u.description&&s.jsx("p",{style:{fontSize:13,color:"var(--tx2)",marginBottom:8,marginTop:0},children:u.description}),u.schema&&s.jsx("pre",{style:{background:"var(--cdBg)",color:"var(--cdTx)",padding:16,borderRadius:6,fontSize:12,fontFamily:"var(--font-code, monospace)",overflow:"auto",lineHeight:1.6,margin:0},children:JSON.stringify(u.schema,null,2)})]})}function M0(u){return u.startsWith("2")?"#22c55e":u.startsWith("4")?"#f59e0b":u.startsWith("5")?"#ef4444":"#6b7280"}function _0({responses:u}){return u.length===0?null:s.jsx("div",{style:{marginBottom:16},children:u.map((h,d)=>{const c=M0(h.statusCode);return s.jsxs("div",{style:{border:"1px solid var(--bd)",borderRadius:6,marginBottom:8,overflow:"hidden"},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 14px",background:"var(--sf)"},children:[s.jsx("span",{"data-testid":"status-badge",style:{padding:"2px 8px",borderRadius:4,fontSize:12,fontWeight:700,fontFamily:"var(--font-code, monospace)",color:"#fff",background:c},children:h.statusCode}),s.jsx("span",{style:{fontSize:13,color:"var(--tx2)"},children:h.description})]}),h.schema&&s.jsx("pre",{style:{background:"var(--cdBg)",color:"var(--cdTx)",padding:14,fontSize:12,fontFamily:"var(--font-code, monospace)",overflow:"auto",lineHeight:1.6,margin:0,borderTop:"1px solid var(--bd)"},children:JSON.stringify(h.schema,null,2)})]},`${h.statusCode}-${d}`)})})}function k0(u,h){const d=h+u.path,c=[`curl -X ${u.method.toUpperCase()} "${d}"`],v=u.parameters.filter(E=>E.in==="header");for(const E of v)c.push(` -H "${E.name}: "`);return u.requestBody&&(c.push(` -H "Content-Type: ${u.requestBody.contentType}"`),u.requestBody.schema&&c.push(` -d '${JSON.stringify(u.requestBody.schema,null,2)}'`)),c.join(` \\ +`)}function O0(u,h){var M;const d=h+u.path,c=[];c.push(` method: "${u.method.toUpperCase()}",`);const v={},E=u.parameters.filter(D=>D.in==="header");for(const D of E)v[D.name]="";return u.requestBody&&(v["Content-Type"]=u.requestBody.contentType),Object.keys(v).length>0&&c.push(` headers: ${JSON.stringify(v,null,4).replace(/\n/g,` + `)},`),(M=u.requestBody)!=null&&M.schema&&c.push(` body: JSON.stringify(${JSON.stringify(u.requestBody.schema,null,4).replace(/\n/g,` + `)}),`),`fetch("${d}", { +${c.join(` +`)} +});`}function D0(u,h){var D,z;const d=h+u.path,c=["import requests",""],v={},E=u.parameters.filter(y=>y.in==="header");for(const y of E)v[y.name]="";u.requestBody&&(v["Content-Type"]=u.requestBody.contentType),Object.keys(v).length>0&&(c.push(`headers = ${JSON.stringify(v,null,4)}`),c.push("")),(D=u.requestBody)!=null&&D.schema&&(c.push(`data = ${JSON.stringify(u.requestBody.schema,null,4)}`),c.push(""));const M=[`"${d}"`];return Object.keys(v).length>0&&M.push("headers=headers"),(z=u.requestBody)!=null&&z.schema&&M.push("json=data"),c.push(`response = requests.${u.method}(${M.join(", ")})`),c.push("print(response.json())"),c.join(` +`)}function R0(u,h){var E,M;const d=h+u.path,c=["package main","","import (",' "fmt"',' "net/http"'];(E=u.requestBody)!=null&&E.schema&&c.push(' "bytes"',' "encoding/json"'),c.push(' "io"',")",""),c.push("func main() {"),(M=u.requestBody)!=null&&M.schema?(c.push(` body, _ := json.Marshal(${JSON.stringify(u.requestBody.schema)})`),c.push(` req, _ := http.NewRequest("${u.method.toUpperCase()}", "${d}", bytes.NewBuffer(body))`)):c.push(` req, _ := http.NewRequest("${u.method.toUpperCase()}", "${d}", nil)`);const v=u.parameters.filter(D=>D.in==="header");for(const D of v)c.push(` req.Header.Set("${D.name}", "")`);return u.requestBody&&c.push(` req.Header.Set("Content-Type", "${u.requestBody.contentType}")`),c.push(" resp, _ := http.DefaultClient.Do(req)"),c.push(" defer resp.Body.Close()"),c.push(" data, _ := io.ReadAll(resp.Body)"),c.push(" fmt.Println(string(data))"),c.push("}"),c.join(` +`)}function B0(u,h){var E;const d=h+u.path,c=["import java.net.http.*;","import java.net.URI;","","var client = HttpClient.newHttpClient();"];(E=u.requestBody)!=null&&E.schema?(c.push(`var body = ${JSON.stringify(JSON.stringify(u.requestBody.schema))};`),c.push("var request = HttpRequest.newBuilder()"),c.push(` .uri(URI.create("${d}"))`),c.push(` .method("${u.method.toUpperCase()}", HttpRequest.BodyPublishers.ofString(body))`)):(c.push("var request = HttpRequest.newBuilder()"),c.push(` .uri(URI.create("${d}"))`),c.push(` .method("${u.method.toUpperCase()}", HttpRequest.BodyPublishers.noBody())`));const v=u.parameters.filter(M=>M.in==="header");for(const M of v)c.push(` .header("${M.name}", "")`);return u.requestBody&&c.push(` .header("Content-Type", "${u.requestBody.contentType}")`),c.push(" .build();"),c.push(""),c.push("var response = client.send(request, HttpResponse.BodyHandlers.ofString());"),c.push("System.out.println(response.body());"),c.join(` +`)}function w0(u,h){var E;const d=h+u.path,c=["using var client = new HttpClient();","",`var request = new HttpRequestMessage(HttpMethod.${u.method.charAt(0).toUpperCase()+u.method.slice(1)}, "${d}");`],v=u.parameters.filter(M=>M.in==="header");for(const M of v)c.push(`request.Headers.Add("${M.name}", "");`);return(E=u.requestBody)!=null&&E.schema&&(c.push("request.Content = new StringContent("),c.push(` ${JSON.stringify(JSON.stringify(u.requestBody.schema))},`),c.push(" System.Text.Encoding.UTF8,"),c.push(` "${u.requestBody.contentType}");`)),c.push(""),c.push("var response = await client.SendAsync(request);"),c.push("var body = await response.Content.ReadAsStringAsync();"),c.push("Console.WriteLine(body);"),c.join(` +`)}function U0({endpoint:u,baseUrl:h="https://api.example.com"}){const[d,c]=B.useState(0),v=["cURL","JavaScript","Python","Go","Java","C#"],E=[k0(u,h),O0(u,h),D0(u,h),R0(u,h),B0(u,h),w0(u,h)];return s.jsxs("div",{style:{marginBottom:16},children:[s.jsx("div",{style:{display:"flex",gap:0,borderBottom:"1px solid var(--bd)",overflowX:"auto",WebkitOverflowScrolling:"touch"},children:v.map((M,D)=>s.jsx("button",{onClick:()=>c(D),style:{padding:"6px 14px",background:"none",border:"none",borderBottom:d===D?"2px solid var(--ac)":"2px solid transparent",color:d===D?"var(--ac)":"var(--txM)",fontWeight:d===D?600:400,fontSize:12,cursor:"pointer",fontFamily:"inherit",whiteSpace:"nowrap"},children:M},M))}),s.jsx("pre",{style:{background:"var(--cdBg)",color:"var(--cdTx)",padding:16,borderRadius:"0 0 6px 6px",fontSize:12,fontFamily:"var(--font-code, monospace)",overflow:"auto",lineHeight:1.6,margin:0},children:E[d]})]})}function H0({endpoint:u,baseUrl:h,defaultExpanded:d=!1,showPlayground:c,playgroundAuth:v}){const[E,M]=B.useState(d),D=(u.operationId||`${u.method}-${u.path}`).toLowerCase().replace(/[^a-z0-9]+/g,"-"),z=u.parameters.length>0||u.requestBody!=null||u.responses.length>0;return s.jsxs("div",{id:D,style:{border:"1px solid var(--bd)",borderRadius:8,marginBottom:12,overflow:"hidden",scrollMarginTop:24},children:[s.jsxs("button",{onClick:()=>z&&M(!E),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"14px 18px",background:"var(--sf)",border:"none",cursor:z?"pointer":"default",textAlign:"left",fontFamily:"inherit",color:"var(--tx)"},children:[s.jsx(z0,{method:u.method}),s.jsx("span",{style:{fontFamily:"var(--font-code, monospace)",fontSize:14,fontWeight:500},children:u.path}),u.deprecated&&s.jsx("span",{"data-testid":"deprecated-badge",style:{padding:"1px 6px",borderRadius:3,fontSize:10,fontWeight:700,background:"#f59e0b33",color:"#f59e0b",textTransform:"uppercase",letterSpacing:"0.05em"},children:"Deprecated"}),u.tags.map(y=>s.jsx("span",{style:{padding:"1px 6px",borderRadius:3,fontSize:10,background:"var(--bd)",color:"var(--txM)"},children:y},y)),s.jsx("span",{style:{flex:1}}),u.summary&&s.jsx("span",{style:{fontSize:13,color:"var(--tx2)",marginRight:8},children:u.summary}),z&&s.jsx("span",{style:{transform:E?"rotate(180deg)":"rotate(0)",transition:"transform 0.2s",fontSize:12,color:"var(--txM)"},children:"▾"})]}),E&&s.jsxs("div",{style:{padding:"16px 18px",borderTop:"1px solid var(--bd)"},children:[u.description&&s.jsx("p",{style:{fontSize:14,color:"var(--tx2)",lineHeight:1.65,marginTop:0,marginBottom:16},children:u.description}),u.parameters.length>0&&s.jsxs("div",{style:{marginBottom:16},children:[s.jsx("h4",{style:{fontSize:13,fontWeight:600,marginBottom:8,color:"var(--tx)"},children:"Parameters"}),s.jsx(C0,{parameters:u.parameters})]}),u.requestBody&&s.jsxs("div",{style:{marginBottom:16},children:[s.jsx("h4",{style:{fontSize:13,fontWeight:600,marginBottom:8,color:"var(--tx)"},children:"Request Body"}),s.jsx(j0,{requestBody:u.requestBody})]}),u.responses.length>0&&s.jsxs("div",{style:{marginBottom:16},children:[s.jsx("h4",{style:{fontSize:13,fontWeight:600,marginBottom:8,color:"var(--tx)"},children:"Responses"}),s.jsx(_0,{responses:u.responses})]}),s.jsxs("div",{children:[s.jsx("h4",{style:{fontSize:13,fontWeight:600,marginBottom:8,color:"var(--tx)"},children:"Code Examples"}),u.codeSamples&&u.codeSamples.length>0?s.jsx(mm,{samples:u.codeSamples}):s.jsx(U0,{endpoint:u,baseUrl:h})]}),c&&s.jsx("div",{style:{marginTop:16},children:s.jsx(A0,{endpoint:u,baseUrl:h||"https://api.example.com",auth:v})})]})]})}function N0({manifest:u,baseUrl:h,showPlayground:d,playgroundAuth:c}){const v=h||(u.servers.length>0?u.servers[0].url:"https://api.example.com"),E=new Map;for(const z of u.endpoints){const y=z.tags.length>0?z.tags[0]:"Other";E.has(y)||E.set(y,[]),E.get(y).push(z)}const M=[];for(const z of u.tags)E.has(z.name)&&M.push(z.name);for(const z of E.keys())M.includes(z)||M.push(z);const D=new Map;for(const z of u.tags)D.set(z.name,z.description);return s.jsxs("div",{style:{display:"flex",gap:32},children:[s.jsxs("nav",{"data-testid":"api-toc",style:{width:200,flexShrink:0,position:"sticky",top:24,alignSelf:"flex-start",maxHeight:"calc(100vh - 48px)",overflowY:"auto"},children:[s.jsx("div",{style:{fontSize:11,fontWeight:700,textTransform:"uppercase",color:"var(--txM)",marginBottom:12,letterSpacing:"0.05em"},children:"Endpoints"}),M.map(z=>{const y=z.toLowerCase().replace(/\s+/g,"-");return s.jsxs("div",{style:{marginBottom:14},children:[s.jsx("a",{href:`#${y}`,onClick:G=>{var R;G.preventDefault(),(R=document.getElementById(y))==null||R.scrollIntoView({behavior:"smooth",block:"start"})},style:{display:"block",fontSize:13,fontWeight:600,color:"var(--tx)",textDecoration:"none",marginBottom:4},children:z}),(E.get(z)||[]).map(G=>{const R=(G.operationId||`${G.method}-${G.path}`).toLowerCase().replace(/[^a-z0-9]+/g,"-");return s.jsxs("a",{href:`#${R}`,onClick:K=>{var nt;K.preventDefault(),(nt=document.getElementById(R))==null||nt.scrollIntoView({behavior:"smooth",block:"start"})},style:{display:"flex",alignItems:"center",gap:6,fontSize:12,color:"var(--tx2)",textDecoration:"none",padding:"3px 0"},children:[s.jsx("span",{style:{fontSize:9,fontWeight:700,fontFamily:"var(--font-code, monospace)",color:pm[G.method]||"#6b7280",width:36,textTransform:"uppercase"},children:G.method}),s.jsx("span",{style:{fontFamily:"var(--font-code, monospace)"},children:G.path})]},`${G.method}-${G.path}`)})]},z)})]}),s.jsxs("div",{style:{flex:1,minWidth:0},children:[s.jsxs("div",{style:{marginBottom:32},children:[s.jsx("h1",{style:{fontSize:28,fontWeight:700,marginBottom:4},children:u.title}),s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[s.jsxs("span",{style:{padding:"2px 8px",borderRadius:4,fontSize:11,fontWeight:600,background:"var(--sf)",color:"var(--txM)"},children:["v",u.version]}),u.servers.length>0&&s.jsx("span",{style:{fontSize:12,fontFamily:"var(--font-code, monospace)",color:"var(--tx2)"},children:u.servers[0].url})]}),u.description&&s.jsx("p",{style:{fontSize:14,color:"var(--tx2)",lineHeight:1.65,marginTop:0},children:u.description})]}),M.map(z=>s.jsxs("section",{id:z.toLowerCase().replace(/\s+/g,"-"),"data-testid":"tag-section",style:{marginBottom:40},children:[s.jsx("h2",{style:{fontSize:20,fontWeight:700,marginBottom:4},children:z}),D.get(z)&&s.jsx("p",{style:{fontSize:14,color:"var(--tx2)",lineHeight:1.65,marginTop:0,marginBottom:16},children:D.get(z)}),(E.get(z)||[]).map(y=>s.jsx(H0,{endpoint:y,baseUrl:v,showPlayground:d,playgroundAuth:c},`${y.method}-${y.path}`))]},z))]})]})}function q0({href:u,title:h,description:d,icon:c,external:v}){const E=v??u.startsWith("http");return s.jsxs("a",{href:u,target:E?"_blank":void 0,rel:E?"noopener noreferrer":void 0,style:{display:"block",padding:"16px 20px",border:"1px solid var(--bd)",borderRadius:8,textDecoration:"none",color:"inherit",background:"var(--sf)",transition:"border-color 0.15s, background 0.15s",cursor:"pointer"},onMouseEnter:M=>{M.currentTarget.style.borderColor="var(--ac)",M.currentTarget.style.background="var(--sfH)"},onMouseLeave:M=>{M.currentTarget.style.borderColor="var(--bd)",M.currentTarget.style.background="var(--sf)"},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[c&&s.jsx("span",{style:{fontSize:18},children:c}),s.jsx("span",{style:{fontWeight:600,fontSize:15,color:"var(--tx)"},children:h}),s.jsx("span",{style:{marginLeft:"auto",color:"var(--tx2)",fontSize:14},children:E?"↗":"→"})]}),d&&s.jsx("p",{style:{margin:"6px 0 0",fontSize:13,color:"var(--tx2)",lineHeight:1.5},children:d})]})}function L0({columns:u=2,children:h}){return s.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${u}, 1fr)`,gap:12,marginTop:16,marginBottom:16},children:h})}const G0={Added:"#22c55e",Changed:"#3b82f6",Deprecated:"#f59e0b",Removed:"#ef4444",Fixed:"#8b5cf6",Security:"#f97316"};function lm(u){return G0[u]||"#6b7280"}function Y0({entries:u,initialLimit:h}){const[d,c]=B.useState(!h),v=d?u:u.slice(0,h||u.length);return u.length===0?s.jsx("div",{"data-testid":"changelog-empty",style:{padding:"40px 0",textAlign:"center",color:"var(--txM)",fontSize:14},children:"No changelog entries found."}):s.jsxs("div",{"data-testid":"changelog-timeline",style:{position:"relative"},children:[s.jsx("div",{style:{position:"absolute",left:15,top:8,bottom:8,width:2,background:"var(--bd)"}}),v.map((E,M)=>s.jsxs("div",{"data-testid":`changelog-entry-${E.version}`,style:{position:"relative",paddingLeft:44,paddingBottom:Ms.jsxs("div",{style:{marginBottom:16},children:[s.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:6,marginBottom:8},children:[s.jsx("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:lm(D.type)}}),s.jsx("span",{style:{fontSize:12,fontWeight:600,textTransform:"uppercase",letterSpacing:".06em",color:lm(D.type),fontFamily:"var(--font-code, monospace)"},children:D.type})]}),s.jsx("ul",{style:{margin:0,paddingLeft:18,listStyleType:"disc",color:"var(--tx2)"},children:D.items.map((z,y)=>s.jsx("li",{style:{fontSize:14,lineHeight:1.7,color:"var(--tx2)",marginBottom:2},children:z},y))})]},D.type))]},E.version)),!d&&u.length>(h||0)&&s.jsx("div",{style:{textAlign:"center",marginTop:24},children:s.jsxs("button",{"data-testid":"changelog-show-more",onClick:()=>c(!0),style:{background:"none",border:"1px solid var(--bd)",borderRadius:2,padding:"8px 20px",color:"var(--tx2)",fontSize:13,fontFamily:"var(--font-body, inherit)",cursor:"pointer",transition:"border-color .15s, color .15s"},children:["Show all ",u.length," releases"]})})]})}const im={info:{color:"#3b82f6",label:"INFO"},warning:{color:"#f59e0b",label:"WARNING"},tip:{color:"var(--ac, #a78bfa)",label:"TIP"},danger:{color:"#ef4444",label:"DANGER"}};function K0({type:u="info",title:h,children:d}){const c=im[u]||im.info;return s.jsxs("div",{style:{borderLeft:`3px solid ${c.color}`,background:`${c.color}11`,borderRadius:"0 2px 2px 0",padding:"14px 18px",marginBottom:20},children:[h?s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:4},children:[s.jsx("span",{style:{fontWeight:700,fontSize:10,letterSpacing:".08em",color:c.color,fontFamily:"var(--font-code, monospace)"},children:c.label}),s.jsx("span",{style:{fontWeight:600,fontSize:13,color:c.color},children:h})]}):s.jsx("div",{style:{marginBottom:4},children:s.jsx("span",{style:{fontWeight:700,fontSize:10,letterSpacing:".08em",color:c.color,fontFamily:"var(--font-code, monospace)"},children:c.label})}),s.jsx("div",{style:{fontSize:14,lineHeight:1.65,color:"var(--tx2)"},children:d})]})}function X0({items:u,children:h}){const[d,c]=B.useState(0);return s.jsxs("div",{style:{marginBottom:20},children:[s.jsx("div",{style:{display:"flex",gap:0,borderBottom:"1px solid var(--bd)"},children:u.map((v,E)=>s.jsx("button",{onClick:()=>c(E),style:{padding:"8px 16px",background:"none",border:"none",borderBottom:d===E?"2px solid var(--ac)":"2px solid transparent",color:d===E?"var(--ac)":"var(--txM)",fontWeight:d===E?600:400,fontSize:13,cursor:"pointer",fontFamily:"inherit"},children:v},E))}),s.jsx("div",{style:{padding:"16px 0"},children:h[d]})]})}function Q0({title:u,icon:h,href:d,children:c}){const v=s.jsxs("div",{style:{border:"1px solid var(--bd)",borderRadius:2,padding:"20px",transition:"border-color 0.15s",cursor:d?"pointer":"default"},children:[h&&s.jsx("span",{style:{fontSize:24,marginBottom:8,display:"block"},children:h}),s.jsx("div",{style:{fontWeight:600,fontSize:14,marginBottom:4},children:u}),c&&s.jsx("div",{style:{fontSize:13,color:"var(--txM)",lineHeight:1.5},children:c})]});return d?s.jsx("a",{href:d,style:{textDecoration:"none",color:"inherit"},children:v}):v}function V0({cols:u=2,children:h}){return s.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${u}, 1fr)`,gap:12,marginBottom:20},children:h})}function Z0({children:u}){return s.jsx("div",{style:{paddingLeft:24,borderLeft:"2px solid var(--bd)",marginBottom:20},children:sm.Children.map(u,(h,d)=>s.jsxs("div",{style:{position:"relative",paddingBottom:20},children:[s.jsx("div",{style:{position:"absolute",left:-33,top:0,width:20,height:20,borderRadius:"50%",background:"var(--ac)",color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:11,fontWeight:700},children:d+1}),s.jsx("div",{style:{paddingLeft:8},children:h})]}))})}function J0({title:u,children:h}){const[d,c]=B.useState(!1);return s.jsxs("div",{style:{border:"1px solid var(--bd)",borderRadius:2,marginBottom:8,overflow:"hidden"},children:[s.jsxs("button",{onClick:()=>c(!d),style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%",padding:"12px 16px",background:"var(--sf)",border:"none",cursor:"pointer",fontWeight:500,fontSize:14,color:"var(--tx)",fontFamily:"inherit"},children:[u,s.jsx("span",{style:{transform:d?"rotate(180deg)":"rotate(0)",transition:"transform 0.2s"},children:"▾"})]}),d&&s.jsx("div",{style:{padding:"12px 16px",borderTop:"1px solid var(--bd)",fontSize:14,color:"var(--tx2)",lineHeight:1.65},children:h})]})}const W0={install:{npm:"npm install",yarn:"yarn add",pnpm:"pnpm add",bun:"bun add"},"install -D":{npm:"npm install -D",yarn:"yarn add -D",pnpm:"pnpm add -D",bun:"bun add -d"},uninstall:{npm:"npm uninstall",yarn:"yarn remove",pnpm:"pnpm remove",bun:"bun remove"},run:{npm:"npm run",yarn:"yarn",pnpm:"pnpm",bun:"bun run"},exec:{npm:"npx",yarn:"yarn dlx",pnpm:"pnpm dlx",bun:"bunx"},init:{npm:"npm init",yarn:"yarn init",pnpm:"pnpm init",bun:"bun init"},create:{npm:"npm create",yarn:"yarn create",pnpm:"pnpm create",bun:"bun create"}};function F0(u,h){for(const[d,c]of Object.entries(W0))if(u.startsWith(d+" ")||u===d){const v=u.slice(d.length);return(c[h]||d)+v}return`${h} ${u}`}function $0({command:u}){const[h,d]=B.useState(0),[c,v]=B.useState(!1),E=["npm","yarn","pnpm","bun"],M=F0(u,E[h]);return s.jsxs("div",{style:{border:"1px solid var(--bd)",borderRadius:2,marginBottom:16,overflow:"hidden"},children:[s.jsx("div",{style:{display:"flex",borderBottom:"1px solid var(--bd)",background:"var(--sf)",overflowX:"auto"},children:E.map((D,z)=>s.jsx("button",{onClick:()=>{d(z),v(!1)},style:{padding:"8px 14px",background:"none",border:"none",cursor:"pointer",fontSize:12,fontFamily:"var(--font-code)",fontWeight:z===h?600:400,color:z===h?"var(--ac)":"var(--txM)",borderBottom:z===h?"2px solid var(--ac)":"2px solid transparent",whiteSpace:"nowrap"},children:D},D))}),s.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"10px 14px",background:"var(--cdBg)",gap:8},children:[s.jsx("code",{style:{flex:1,fontFamily:"var(--font-code)",fontSize:13,color:"var(--cdTx)",whiteSpace:"pre",overflowX:"auto"},children:M}),s.jsx("button",{onClick:()=>{var D;(D=navigator.clipboard)==null||D.writeText(M),v(!0),setTimeout(()=>v(!1),2e3)},style:{background:"none",border:"none",cursor:"pointer",color:"var(--txM)",fontSize:12,fontFamily:"var(--font-code)",flexShrink:0},children:c?"✓":"Copy"})]})]})}function I0({name:u,fields:h}){return s.jsxs("div",{style:{marginBottom:16},children:[u&&s.jsx("h4",{style:{fontFamily:"var(--font-code)",fontSize:15,marginBottom:8,color:"var(--tx)"},children:u}),s.jsx("div",{style:{overflowX:"auto",WebkitOverflowScrolling:"touch"},children:s.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13,fontFamily:"var(--font-body)"},children:[s.jsx("thead",{children:s.jsx("tr",{style:{borderBottom:"2px solid var(--bd)"},children:["Property","Type","Required","Default","Description"].map(d=>s.jsx("th",{style:{textAlign:"left",padding:"8px 10px",color:"var(--txM)",fontWeight:600,fontSize:11,textTransform:"uppercase",letterSpacing:".05em",whiteSpace:"nowrap"},children:d},d))})}),s.jsx("tbody",{children:h.map(d=>s.jsxs("tr",{style:{borderBottom:"1px solid var(--bd)"},children:[s.jsx("td",{style:{padding:"8px 10px",fontFamily:"var(--font-code)",fontWeight:500,color:"var(--tx)"},children:d.name}),s.jsx("td",{style:{padding:"8px 10px",fontFamily:"var(--font-code)",fontSize:12,color:"var(--ac)"},children:d.type}),s.jsx("td",{style:{padding:"8px 10px"},children:d.required&&s.jsx("span",{style:{fontSize:10,fontWeight:600,color:"#e04040",background:"rgba(224,64,64,0.1)",padding:"2px 6px",borderRadius:2},children:"required"})}),s.jsx("td",{style:{padding:"8px 10px",fontFamily:"var(--font-code)",fontSize:12,color:"var(--txM)"},children:d.default||"—"}),s.jsx("td",{style:{padding:"8px 10px",color:"var(--tx2)"},children:d.description||""})]},d.name))})]})})]})}function P0({name:u}){return s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 0",fontFamily:"var(--font-code)",fontSize:13,color:"var(--tx2)"},children:[s.jsx("span",{style:{opacity:.6},children:"📄"})," ",u]})}function tg({name:u,defaultOpen:h,children:d}){const[c,v]=B.useState(h??!1);return s.jsxs("div",{children:[s.jsxs("button",{onClick:()=>v(!c),style:{display:"flex",alignItems:"center",gap:6,padding:"3px 0",background:"none",border:"none",cursor:"pointer",fontFamily:"var(--font-code)",fontSize:13,color:"var(--tx)",fontWeight:500},children:[s.jsx("span",{children:c?"📂":"📁"})," ",u]}),c&&s.jsx("div",{style:{paddingLeft:18,borderLeft:"1px solid var(--bd)",marginLeft:8},children:d})]})}function Iu({children:u}){return s.jsx("div",{style:{border:"1px solid var(--bd)",borderRadius:2,padding:"12px 16px",background:"var(--cdBg)",marginBottom:16},children:u})}Iu.File=P0;Iu.Folder=tg;const eg={Callout:K0,Tabs:X0,Card:Q0,CardGroup:V0,Steps:Z0,Accordion:J0,ChangelogTimeline:Y0,PackageManager:$0,TypeTable:I0,FileTree:Iu,CodeSamples:mm,LinkCard:q0,CardGrid:L0},ng=` + @import url('https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=DM+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Bricolage+Grotesque:wght@300;400;500;600;700&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400;1,700&family=Fira+Code:wght@400;500;600&family=Bodoni+Moda:ital,wght@0,400;0,700;0,900;1,400&family=Space+Grotesk:wght@400;500;600;700&family=Source+Code+Pro:wght@400;500;600&family=Inter:wght@300;400;500;600;700&display=swap'); + + html, body { margin: 0; padding: 0; height: 100%; overflow: clip; } + #tome-root { height: 100%; overflow: clip; } + + .tome-content h1 { display: none; } + .tome-content h2 { font-family: var(--font-body); font-size: 1.35em; font-weight: 600; margin-top: 2em; margin-bottom: 0.5em; letter-spacing: 0.01em; } + .tome-content h3 { font-family: var(--font-body); font-size: 1.15em; font-weight: 600; margin-top: 1.5em; margin-bottom: 0.5em; } + .tome-content h4 { font-family: var(--font-body); font-size: 1.05em; font-weight: 600; margin-top: 1.2em; margin-bottom: 0.5em; } + .tome-content p { color: var(--tx2); line-height: 1.8; margin-bottom: 1em; font-size: 14.5px; } + .tome-content a { color: var(--ac); text-decoration: none; } + .tome-content a:hover { text-decoration: underline; } + .tome-content .heading-anchor { display: none; } + .tome-content ul, .tome-content ol { color: var(--tx2); padding-inline-start: 1.5em; margin-bottom: 1em; } + .tome-content li { margin-bottom: 0.3em; line-height: 1.7; } + .tome-content code { font-family: var(--font-code); font-size: 0.88em; background: var(--cdBg); padding: 0.15em 0.4em; border-radius: 2px; color: var(--ac); } + .tome-content pre { margin-bottom: 1.2em; border-radius: 2px; overflow-x: auto; border: 1px solid var(--bd); } + .tome-content pre code { background: none; padding: 1em 1.2em; display: block; font-size: 12.5px; line-height: 1.7; color: var(--cdTx); } + .tome-content blockquote { border-inline-start: 3px solid var(--ac); padding: 0.5em 1em; margin: 1em 0; background: var(--acD); border-radius: 0 2px 2px 0; } + .tome-content blockquote p { color: var(--tx2); margin: 0; } + .tome-content table { width: 100%; border-collapse: collapse; margin-bottom: 1em; } + .tome-content th, .tome-content td { padding: 0.5em 0.8em; border: 1px solid var(--bd); text-align: start; font-size: 0.9em; } + .tome-content th { background: var(--sf); font-weight: 600; } + .tome-content img { max-width: 100%; border-radius: 2px; cursor: zoom-in; } + .tome-content hr { border: none; border-top: 1px solid var(--bd); margin: 2em 0; } + .tome-mermaid { margin: 1.2em 0; text-align: center; overflow-x: auto; } + .tome-mermaid svg { max-width: 100%; height: auto; overflow: visible; } + .tome-mermaid svg .nodeLabel { overflow: visible; white-space: nowrap; } + /* Ensure mermaid text meets WCAG AA contrast in light mode */ + /* Mermaid v11 uses foreignObject with inline-styled spans — !important needed */ + html:not(.dark) .tome-mermaid svg .nodeLabel, + html:not(.dark) .tome-mermaid svg .nodeLabel span, + html:not(.dark) .tome-mermaid svg .nodeLabel div, + html:not(.dark) .tome-mermaid svg foreignObject div, + html:not(.dark) .tome-mermaid svg foreignObject span { color: #1a1a1a !important; } + html:not(.dark) .tome-mermaid svg .edgeLabel, + html:not(.dark) .tome-mermaid svg .edgeLabel span { color: #333 !important; } + html:not(.dark) .tome-mermaid svg text { fill: #1a1a1a !important; } + html:not(.dark) .tome-mermaid svg .node rect, + html:not(.dark) .tome-mermaid svg .node polygon { stroke: #555 !important; } + /* Dark mode: force bright text in mermaid nodes for readability */ + html.dark .tome-mermaid svg .nodeLabel, + html.dark .tome-mermaid svg .nodeLabel span, + html.dark .tome-mermaid svg .nodeLabel div, + html.dark .tome-mermaid svg foreignObject div, + html.dark .tome-mermaid svg foreignObject span { color: #f0f0f0 !important; } + html.dark .tome-mermaid svg .edgeLabel, + html.dark .tome-mermaid svg .edgeLabel span { color: #ddd !important; } + html.dark .tome-mermaid svg text { fill: #f0f0f0 !important; } + + /* Mobile responsive content */ + @media (max-width: 767px) { + .tome-content h2 { font-size: 1.2em; margin-top: 1.5em; } + .tome-content h3 { font-size: 1.05em; } + .tome-content pre code { font-size: 12px; padding: 0.8em 1em; } + .tome-content table { display: block; overflow-x: auto; -webkit-overflow-scrolling: touch; } + .tome-content blockquote { margin: 0.8em 0; } + } + + /* Selection style */ + ::selection { background: var(--acD); color: var(--ac); } + + /* Scrollbar style */ + ::-webkit-scrollbar { width: 5px; height: 5px; } + ::-webkit-scrollbar-track { background: transparent; } + ::-webkit-scrollbar-thumb { background: var(--bd); border-radius: 10px; } + + /* Grain overlay */ + .tome-grain::before { + content: ""; position: fixed; inset: 0; z-index: 9999; pointer-events: none; + opacity: .35; + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); + background-repeat: repeat; background-size: 256px; + } + + /* ── Expressive code blocks ───────────────────────────── */ + + /* Code block wrapper (for titled blocks) */ + .tome-code-block-wrapper { position: relative; margin-bottom: 1.2em; border: 1px solid var(--bd); border-radius: 2px; overflow: hidden; } + .tome-code-block-wrapper pre { margin-bottom: 0; border: none; border-radius: 0; } + .tome-code-title { + font-family: var(--font-code); font-size: 12px; color: var(--tx2); + background: var(--sf); padding: 6px 12px; border-bottom: 1px solid var(--bd); + letter-spacing: 0.01em; font-weight: 500; + } + + /* Line highlighting */ + .tome-content pre .line.tome-line-highlight { + background: rgba(139, 148, 158, 0.1); + display: inline-block; width: 100%; margin: 0 -1.2em; padding: 0 1.2em; + } + html.dark .tome-content pre .line.tome-line-highlight { + background: rgba(200, 210, 220, 0.08); + } + + /* Diff lines */ + .tome-content pre .line.tome-line-added { + background: rgba(34, 197, 94, 0.12); + display: inline-block; width: 100%; margin: 0 -1.2em; padding: 0 1.2em; + } + .tome-content pre .line.tome-line-removed { + background: rgba(239, 68, 68, 0.12); + display: inline-block; width: 100%; margin: 0 -1.2em; padding: 0 1.2em; + } + html.dark .tome-content pre .line.tome-line-added { background: rgba(34, 197, 94, 0.15); } + html.dark .tome-content pre .line.tome-line-removed { background: rgba(239, 68, 68, 0.15); } + + /* Line numbers (CSS counter) */ + .tome-content pre[data-line-numbers] code { + counter-reset: line; + } + .tome-content pre[data-line-numbers] .line::before { + counter-increment: line; + content: counter(line); + display: inline-block; width: 2.5em; margin-inline-end: 1em; + text-align: end; color: var(--txM); opacity: 0.4; + font-size: 0.85em; user-select: none; + border-inline-end: 1px solid var(--bd); padding-inline-end: 0.8em; margin-inline-end: 0.8em; + } + + /* Word highlighting */ + .tome-word-highlight { + background: rgba(139, 148, 158, 0.2); border-radius: 2px; + padding: 1px 3px; margin: 0 -1px; + } + html.dark .tome-word-highlight { + background: rgba(200, 210, 220, 0.15); + } + + /* Copy button */ + .tome-content pre { position: relative; } + .tome-copy-btn { + position: absolute; top: 8px; inset-inline-end: 8px; + font-family: var(--font-code); font-size: 11px; + color: var(--tx2); background: var(--sf); border: 1px solid var(--bd); + padding: 3px 8px; border-radius: 2px; cursor: pointer; + opacity: 0; transition: opacity 0.15s; + z-index: 2; line-height: 1.4; + } + .tome-content pre:hover .tome-copy-btn, + .tome-copy-btn:focus { opacity: 1; } + .tome-copy-btn:hover { background: var(--sfH); } + + /* Shiki dual-theme support */ + .shiki { background: var(--cdBg) !important; } + + /* Dark mode: switch Shiki tokens from light-theme inline colors to --shiki-dark CSS vars */ + html.dark .shiki, + html.dark .shiki span { + color: var(--shiki-dark) !important; + } + + /* Brighten dim comment tokens (github-dark #6A737D is too low-contrast on dark backgrounds) */ + html.dark .shiki span[style*="--shiki-dark:#6A737D"] { + --shiki-dark: #a0aab5 !important; + } + + /* Light mode: darken low-contrast github-light tokens for WCAG AA on --cdBg backgrounds */ + html:not(.dark) .shiki span[style*="color:#6A737D"] { color: #57606a !important; } + html:not(.dark) .shiki span[style*="color:#E36209"] { color: #b35405 !important; } + html:not(.dark) .shiki span[style*="color:#6F42C1"] { color: #5a32a3 !important; } + html:not(.dark) .shiki span[style*="color:#22863A"] { color: #1a6e2e !important; } + html:not(.dark) .shiki span[style*="color:#D73A49"] { color: #b62324 !important; } + html:not(.dark) .shiki span[style*="color:#005CC5"] { color: #0349b4 !important; } + + /* ── Twoslash type hover tooltips ───────────────────── */ + .twoslash-hover { + position: relative; + border-bottom: 1px dotted var(--tx2); + cursor: help; + } + .twoslash-popup-container { + position: absolute; + opacity: 0; + display: none; + z-index: 10; + left: 0; + top: 100%; + margin-top: 4px; + padding: 6px 10px; + background: var(--sf); + border: 1px solid var(--bd); + border-radius: 6px; + font-size: 12px; + font-family: var(--font-code); + color: var(--tx); + white-space: pre-wrap; + max-width: 500px; + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + pointer-events: none; + } + .twoslash-hover:hover .twoslash-popup-container { + opacity: 1; + display: block; + } + /* Twoslash error/warning underlines */ + .twoslash-error { + position: relative; + background: rgba(239, 68, 68, 0.1); + border-bottom: 2px wavy rgba(239, 68, 68, 0.6); + } + /* Twoslash highlighted identifiers */ + .twoslash-highlighted { + background: rgba(139, 148, 158, 0.15); + border-radius: 2px; + padding: 1px 2px; + } + /* Twoslash type annotation line (^?) */ + .twoslash-popup-code .shiki { background: transparent !important; padding: 0; margin: 0; } + .twoslash-popup-code .shiki code { padding: 0; font-size: 12px; } + html.dark .twoslash-popup-container { + background: var(--sf); + border-color: var(--bd); + box-shadow: 0 4px 12px rgba(0,0,0,0.3); + } +`,ko=(Jn.basePath||"/").replace(/\/$/,"");function ag(u){return cm(u,ko,Wn)}function Wu(u){return f0(u,ko,Wn)}const hm=h0(window.location.pathname,window.location.hash,Wn,ko,cm),lg=fm(hm,Wn,dm);function ig(){var W,I,ct,Q;const[u,h]=B.useState(hm),[d,c]=B.useState(null),[v,E]=B.useState(!0),M=B.useRef(0),D=B.useCallback(async(Y,H)=>{const U=++M.current;E(!0);let at;try{at=await fm(Y,Wn,dm)}catch(P){if(M.current!==U)return;console.error(`[tome] Navigation failed for page: ${Y}`,P),at=null}if(M.current!==U)return;const lt=Wu(Y);if(H!=null&&H.replace?window.history.replaceState(null,"",lt):window.history.pushState(null,"",lt),h(Y),c(at),E(!1),!(H!=null&&H.skipScroll)){const P=window.location.hash.slice(1);P?requestAnimationFrame(()=>{const mt=document.getElementById(P);mt&&mt.scrollIntoView({behavior:"smooth",block:"start"})}):window.scrollTo(0,0)}},[]);B.useEffect(()=>{const Y=window.location.hash.slice(1);if(Y&&Wn.some(H=>H.id===Y)){const H=Wu(Y);window.history.replaceState(null,"",H),D(Y,{replace:!0})}else{const H=Wu(u);window.history.replaceState(null,"",H),lg.then(U=>{c(U),E(!1)})}},[]),B.useEffect(()=>{const Y=()=>{const H=ag(window.location.pathname);H&&H!==u&&D(H,{replace:!0,skipScroll:!0})};return window.addEventListener("popstate",Y),()=>window.removeEventListener("popstate",Y)},[u,D]);const z=B.useRef(null),[y,G]=B.useState(()=>{var H,U;if(typeof document>"u")return"light";if(document.documentElement.classList.contains("dark"))return"dark";const Y=((H=Jn.theme)==null?void 0:H.mode)||"auto";return Y==="dark"?"dark":Y==="light"?"light":(U=window.matchMedia)!=null&&U.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"});B.useEffect(()=>{const Y=new MutationObserver(()=>{const H=document.documentElement.classList.contains("dark");G(H?"dark":"light")});return Y.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>Y.disconnect()},[]),B.useEffect(()=>{const Y=document.querySelectorAll(".tome-mermaid[data-mermaid]");if(Y.length===0)return;let H=!1;const U="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs";return(async()=>{try{z.current||(z.current=(await import(U)).default);const at=z.current;if(H)return;const lt=y==="dark",P=getComputedStyle(document.documentElement).getPropertyValue("--font-body").trim()||"sans-serif";at.initialize({startOnLoad:!1,theme:lt?"dark":"default",fontFamily:P,flowchart:{padding:15,nodeSpacing:30,rankSpacing:40}});for(let mt=0;mt{lt.textContent="Failed to load diagram renderer",lt.style.cssText="padding:16px;color:var(--txM);font-size:13px;border:1px dashed var(--bd);border-radius:2px;text-align:center;"})}})(),()=>{H=!0}},[d,v,y]),B.useEffect(()=>{if(v)return;const Y=document.querySelectorAll(".tome-content pre"),H=[];return Y.forEach(U=>{if(U.querySelector(".tome-copy-btn"))return;const at=document.createElement("button");at.className="tome-copy-btn",at.textContent="Copy",at.addEventListener("click",async()=>{const lt=U.querySelector("code");if(lt)try{await navigator.clipboard.writeText(lt.textContent||""),at.textContent="Copied!",setTimeout(()=>{at.textContent="Copy"},2e3)}catch{at.textContent="Failed",setTimeout(()=>{at.textContent="Copy"},2e3)}}),U.appendChild(at),H.push(at)}),()=>{H.forEach(U=>U.remove())}},[d,v]);const R=Wn.map(Y=>({id:Y.id,title:Y.frontmatter.title,description:Y.frontmatter.description})),K=Wn.find(Y=>Y.id===u),nt=g0(K),bt=p0(Jn.editLink,K==null?void 0:K.filePath),Ot=(K==null?void 0:K.locale)||(Zu==null?void 0:Zu.defaultLocale)||"en",jt="ltr";return B.useEffect(()=>{const Y=document.querySelectorAll(".tome-math[data-math]").length>0;if(!Jn.math&&!Y)return;const H="tome-katex-css";if(document.getElementById(H))return;const U=document.createElement("link");U.id=H,U.rel="stylesheet",U.href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css",U.crossOrigin="anonymous",document.head.appendChild(U)},[d,v]),B.useEffect(()=>{const Y=document.querySelectorAll(".tome-math[data-math]");if(Y.length===0)return;let H=!1;const U="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.mjs";return(async()=>{try{const at=(await import(U)).default;if(H)return;for(const lt of Y){const P=lt.getAttribute("data-math");if(P)try{const mt=atob(P),tt=lt.classList.contains("tome-math-block");at.render(mt,lt,{displayMode:tt,throwOnError:!1})}catch(mt){console.warn("[tome] KaTeX render failed:",mt)}}}catch(at){console.warn("[tome] Failed to load KaTeX from CDN:",at)}})(),()=>{H=!0}},[d,v]),s.jsxs(s.Fragment,{children:[s.jsx("style",{children:ng}),s.jsx(r0,{config:Jn,navigation:v0,currentPageId:u,pageHtml:d!=null&&d.isMdx?void 0:v?"":(d==null?void 0:d.html)||"

    Page not found

    ",pageComponent:d!=null&&d.isMdx?d.component:void 0,mdxComponents:eg,pageTitle:(d==null?void 0:d.frontmatter.title)||(v?"":"Not Found"),pageDescription:d==null?void 0:d.frontmatter.description,headings:(d==null?void 0:d.headings)||[],tocEnabled:(d==null?void 0:d.frontmatter.toc)!==!1,editUrl:bt,lastUpdated:K==null?void 0:K.lastUpdated,changelogEntries:d!=null&&d.isMdx||d==null?void 0:d.changelogEntries,apiManifest:!(d!=null&&d.isMdx)&&(d!=null&&d.isApiReference)?d.apiManifest:void 0,apiBaseUrl:(W=Jn.api)==null?void 0:W.baseUrl,apiPlayground:(I=Jn.api)==null?void 0:I.playground,apiAuth:(ct=Jn.api)==null?void 0:ct.auth,ApiReferenceComponent:N0,onNavigate:D,allPages:R,docContext:x0,versioning:void 0,currentVersion:nt,basePath:ko,isDraft:((Q=K==null?void 0:K.frontmatter)==null?void 0:Q.draft)===!0,dir:jt,i18n:void 0,currentLocale:Ot,overrides:b0})]})}const om=document.getElementById("tome-root");om&&wh.createRoot(om).render(s.jsx(ig,{})); diff --git a/assets/index-CGDazwHL.js b/assets/index-CGDazwHL.js new file mode 100644 index 00000000..355538b6 --- /dev/null +++ b/assets/index-CGDazwHL.js @@ -0,0 +1,75 @@ +const n={frontmatter:{title:"Kit",description:"Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.",hidden:!1,toc:!1,draft:!1},html:`
    + KIT +
    +

    A powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.

    +

    Features

    +
      +
    • Multi-Provider LLM Support — Anthropic, OpenAI, Google Gemini, Ollama, Azure OpenAI, AWS Bedrock, OpenRouter, and more
    • +
    • Built-in Core Tools — bash, read, write, edit, grep, find, ls, spawn_subagent with no MCP overhead
    • +
    • MCP Integration — Connect external MCP servers for expanded capabilities
    • +
    • Extension System — Write custom tools, commands, widgets, and UI modifications in Go
    • +
    • Interactive TUI — Rich terminal interface powered by Bubble Tea with streaming, syntax highlighting, and custom rendering
    • +
    • Session Management — Tree-based conversation history with branching support
    • +
    • Non-Interactive Mode — Script-friendly positional args with JSON output
    • +
    • ACP Server — Run Kit as an Agent Client Protocol agent over stdio
    • +
    • Go SDK — Embed Kit in your own applications
    • +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ResourceDescription
    InstallationGet Kit up and running
    Quick StartYour first Kit session
    ConfigurationCustomize Kit for your workflow
    ExtensionsBuild custom tools and UI components
    Go SDKEmbed Kit in your applications
    `,headings:[{depth:2,text:"Features",id:"features"},{depth:2,text:"Quick links",id:"quick-links"}],raw:` +
    + KIT +
    + +A powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system. + +## Features + +- **Multi-Provider LLM Support** — Anthropic, OpenAI, Google Gemini, Ollama, Azure OpenAI, AWS Bedrock, OpenRouter, and more +- **Built-in Core Tools** — bash, read, write, edit, grep, find, ls, spawn_subagent with no MCP overhead +- **MCP Integration** — Connect external MCP servers for expanded capabilities +- **Extension System** — Write custom tools, commands, widgets, and UI modifications in Go +- **Interactive TUI** — Rich terminal interface powered by Bubble Tea with streaming, syntax highlighting, and custom rendering +- **Session Management** — Tree-based conversation history with branching support +- **Non-Interactive Mode** — Script-friendly positional args with JSON output +- **ACP Server** — Run Kit as an [Agent Client Protocol](https://agentclientprotocol.com) agent over stdio +- **Go SDK** — Embed Kit in your own applications + +## Quick links + +| Resource | Description | +|----------|-------------| +| [Installation](/installation) | Get Kit up and running | +| [Quick Start](/quick-start) | Your first Kit session | +| [Configuration](/configuration) | Customize Kit for your workflow | +| [Extensions](/extensions/overview) | Build custom tools and UI components | +| [Go SDK](/sdk/overview) | Embed Kit in your applications | +`};export{n as default}; diff --git a/assets/index-Di_r5hA0.css b/assets/index-Di_r5hA0.css new file mode 100644 index 00000000..1baabe9f --- /dev/null +++ b/assets/index-Di_r5hA0.css @@ -0,0 +1 @@ +:root,:root[data-theme=dark],:root[data-theme=light],html,html[data-theme=dark],#tome-root,#tome-root *,[data-theme],body,div{--bg: #08080a !important;--sf: #0e0e12 !important;--sfH: #141418 !important;--bd: #1a1a22 !important;--tx: #e8e0e0 !important;--tx2: #8a8090 !important;--txM: #6a6070 !important;--ac: #e03030 !important;--acD: rgba(224, 48, 48, .12) !important;--acT: #ff4444 !important;--cdBg: #0a0a0e !important;--cdTx: #c8a0a0 !important;--sbBg: #0a0a0d !important;--hdBg: rgba(8, 8, 10, .92) !important}h1,h2,h3,h4,h5,h6{color:#e8e0e0!important;font-style:normal!important} diff --git a/assets/installation-DaBrcZPn.js b/assets/installation-DaBrcZPn.js new file mode 100644 index 00000000..45e06904 --- /dev/null +++ b/assets/installation-DaBrcZPn.js @@ -0,0 +1,78 @@ +const n={frontmatter:{title:"Installation",description:"Install Kit using npm, Go, or build from source.",hidden:!1,toc:!0,draft:!1},html:`

    Installation

    + +
    npm install -g @mark3labs/kit
    +

    Using Go

    +
    go install github.com/mark3labs/kit/cmd/kit@latest
    +

    Building from source

    +
    git clone https://github.com/mark3labs/kit.git
    +cd kit
    +go build -o kit ./cmd/kit
    +

    Verifying the installation

    +

    After installing, verify Kit is available:

    +
    kit --help
    +

    Setting up a provider

    +

    Kit needs at least one LLM provider configured. Set an API key for your preferred provider:

    +
    # Anthropic (default provider)
    +export ANTHROPIC_API_KEY="sk-..."
    +
    +# OpenAI
    +export OPENAI_API_KEY="sk-..."
    +
    +# Google Gemini
    +export GOOGLE_API_KEY="..."
    +

    For OAuth-enabled providers like Anthropic, you can also authenticate interactively:

    +
    kit auth login anthropic
    +

    See Providers for the full list of supported providers and their configuration.

    `,headings:[{depth:2,text:"Using npm (recommended)",id:"using-npm-recommended"},{depth:2,text:"Using Go",id:"using-go"},{depth:2,text:"Building from source",id:"building-from-source"},{depth:2,text:"Verifying the installation",id:"verifying-the-installation"},{depth:2,text:"Setting up a provider",id:"setting-up-a-provider"}],raw:` +# Installation + +## Using npm (recommended) + +\`\`\`bash +npm install -g @mark3labs/kit +\`\`\` + +## Using Go + +\`\`\`bash +go install github.com/mark3labs/kit/cmd/kit@latest +\`\`\` + +## Building from source + +\`\`\`bash +git clone https://github.com/mark3labs/kit.git +cd kit +go build -o kit ./cmd/kit +\`\`\` + +## Verifying the installation + +After installing, verify Kit is available: + +\`\`\`bash +kit --help +\`\`\` + +## Setting up a provider + +Kit needs at least one LLM provider configured. Set an API key for your preferred provider: + +\`\`\`bash +# Anthropic (default provider) +export ANTHROPIC_API_KEY="sk-..." + +# OpenAI +export OPENAI_API_KEY="sk-..." + +# Google Gemini +export GOOGLE_API_KEY="..." +\`\`\` + +For OAuth-enabled providers like Anthropic, you can also authenticate interactively: + +\`\`\`bash +kit auth login anthropic +\`\`\` + +See [Providers](/providers) for the full list of supported providers and their configuration. +`};export{n as default}; diff --git a/assets/json-output-B1QZabVS.js b/assets/json-output-B1QZabVS.js new file mode 100644 index 00000000..afb88fcf --- /dev/null +++ b/assets/json-output-B1QZabVS.js @@ -0,0 +1,240 @@ +const s={frontmatter:{title:"JSON Output",description:"Machine-readable JSON output for scripting and automation.",hidden:!1,toc:!0,draft:!1},html:`

    JSON Output

    +

    Use the --json flag to get structured output for scripting and automation:

    +
    kit "Explain main.go" --json --quiet --no-session
    +

    Response format

    +
    {
    +  "response": "Final assistant response text",
    +  "model": "anthropic/claude-haiku-3-5-20241022",
    +  "stop_reason": "end_turn",
    +  "session_id": "a1b2c3d4e5f6",
    +  "usage": {
    +    "input_tokens": 1024,
    +    "output_tokens": 512,
    +    "total_tokens": 1536,
    +    "cache_read_tokens": 0,
    +    "cache_creation_tokens": 0
    +  },
    +  "messages": [
    +    {
    +      "role": "assistant",
    +      "parts": [
    +        {"type": "text", "data": "..."},
    +        {"type": "tool_call", "data": {"name": "...", "args": "..."}},
    +        {"type": "tool_result", "data": {"name": "...", "result": "..."}}
    +      ]
    +    }
    +  ]
    +}
    +

    Fields

    +

    Top-level

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    responsestringThe final assistant response text
    modelstringThe model that was used
    stop_reasonstringWhy the model stopped (e.g., end_turn)
    session_idstringSession identifier (omitted in --no-session mode)
    usageobjectToken usage statistics
    messagesarrayFull conversation history
    +

    Usage

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    input_tokensintTokens sent to the model
    output_tokensintTokens generated by the model
    total_tokensintSum of input and output tokens
    cache_read_tokensintTokens read from prompt cache
    cache_creation_tokensintTokens written to prompt cache
    +

    Message parts

    +

    Each message contains a parts array with typed entries:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDescription
    textAssistant text content
    tool_callTool invocation with name and args
    tool_resultTool execution result
    reasoningExtended thinking content
    finishEnd-of-turn marker
    +

    Parsing in scripts

    +

    bash + jq

    +
    result=$(kit "Count files" --json --quiet --no-session)
    +response=$(echo "$result" | jq -r '.response')
    +tokens=$(echo "$result" | jq '.usage.total_tokens')
    +

    Go SDK

    +

    For Go programs, use the SDK's PromptResult method instead of parsing JSON:

    +
    result, err := host.PromptResult(ctx, "Count files")
    +fmt.Println(result.Response)
    +fmt.Println(result.Usage.TotalTokens)
    `,headings:[{depth:2,text:"Response format",id:"response-format"},{depth:2,text:"Fields",id:"fields"},{depth:3,text:"Top-level",id:"top-level"},{depth:3,text:"Usage",id:"usage"},{depth:3,text:"Message parts",id:"message-parts"},{depth:2,text:"Parsing in scripts",id:"parsing-in-scripts"},{depth:3,text:"bash + jq",id:"bash--jq"},{depth:3,text:"Go SDK",id:"go-sdk"}],raw:` +# JSON Output + +Use the \`--json\` flag to get structured output for scripting and automation: + +\`\`\`bash +kit "Explain main.go" --json --quiet --no-session +\`\`\` + +## Response format + +\`\`\`json +{ + "response": "Final assistant response text", + "model": "anthropic/claude-haiku-3-5-20241022", + "stop_reason": "end_turn", + "session_id": "a1b2c3d4e5f6", + "usage": { + "input_tokens": 1024, + "output_tokens": 512, + "total_tokens": 1536, + "cache_read_tokens": 0, + "cache_creation_tokens": 0 + }, + "messages": [ + { + "role": "assistant", + "parts": [ + {"type": "text", "data": "..."}, + {"type": "tool_call", "data": {"name": "...", "args": "..."}}, + {"type": "tool_result", "data": {"name": "...", "result": "..."}} + ] + } + ] +} +\`\`\` + +## Fields + +### Top-level + +| Field | Type | Description | +|-------|------|-------------| +| \`response\` | string | The final assistant response text | +| \`model\` | string | The model that was used | +| \`stop_reason\` | string | Why the model stopped (e.g., \`end_turn\`) | +| \`session_id\` | string | Session identifier (omitted in \`--no-session\` mode) | +| \`usage\` | object | Token usage statistics | +| \`messages\` | array | Full conversation history | + +### Usage + +| Field | Type | Description | +|-------|------|-------------| +| \`input_tokens\` | int | Tokens sent to the model | +| \`output_tokens\` | int | Tokens generated by the model | +| \`total_tokens\` | int | Sum of input and output tokens | +| \`cache_read_tokens\` | int | Tokens read from prompt cache | +| \`cache_creation_tokens\` | int | Tokens written to prompt cache | + +### Message parts + +Each message contains a \`parts\` array with typed entries: + +| Type | Description | +|------|-------------| +| \`text\` | Assistant text content | +| \`tool_call\` | Tool invocation with name and args | +| \`tool_result\` | Tool execution result | +| \`reasoning\` | Extended thinking content | +| \`finish\` | End-of-turn marker | + +## Parsing in scripts + +### bash + jq + +\`\`\`bash +result=$(kit "Count files" --json --quiet --no-session) +response=$(echo "$result" | jq -r '.response') +tokens=$(echo "$result" | jq '.usage.total_tokens') +\`\`\` + +### Go SDK + +For Go programs, use the SDK's \`PromptResult\` method instead of parsing JSON: + +\`\`\`go +result, err := host.PromptResult(ctx, "Count files") +fmt.Println(result.Response) +fmt.Println(result.Usage.TotalTokens) +\`\`\` +`};export{s as default}; diff --git a/assets/loading-CfdMbwrl.js b/assets/loading-CfdMbwrl.js new file mode 100644 index 00000000..50f0e5d1 --- /dev/null +++ b/assets/loading-CfdMbwrl.js @@ -0,0 +1,213 @@ +const s={frontmatter:{title:"Loading Extensions",description:"How Kit discovers and loads extensions.",hidden:!1,toc:!0,draft:!1},html:`

    Loading Extensions

    +

    Auto-discovery

    +

    Kit automatically discovers and loads extensions from these paths, in order:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PathScope
    ~/.config/kit/extensions/*.goGlobal single files
    ~/.config/kit/extensions/*/main.goGlobal subdirectory extensions
    .kit/extensions/*.goProject-local single files
    .kit/extensions/*/main.goProject-local subdirectory extensions
    ~/.local/share/kit/git/Global git-installed packages
    .kit/git/Project-local git-installed packages
    +

    Explicit loading

    +

    Load extensions by path using the -e flag:

    +
    kit -e path/to/extension.go
    +

    Load multiple extensions:

    +
    kit -e ext1.go -e ext2.go
    +

    Disabling extensions

    +

    Disable all auto-discovered extensions:

    +
    kit --no-extensions
    +

    You can combine --no-extensions with -e to load only specific extensions:

    +
    kit --no-extensions -e my-extension.go
    +

    Installing from git

    +

    Install extensions from git repositories using kit install:

    +
    # Install globally (to ~/.local/share/kit/git/)
    +kit install https://github.com/user/my-kit-extension.git
    +
    +# Install project-locally (to .kit/git/)
    +kit install -l https://github.com/user/my-kit-extension.git
    +
    +# Update an installed package
    +kit install -u https://github.com/user/my-kit-extension.git
    +
    +# Remove
    +kit install --uninstall my-kit-extension
    +

    Extension structure

    +

    Single-file extensions

    +

    A single .go file with an Init function:

    +
    //go:build ignore
    +
    +package main
    +
    +import "kit/ext"
    +
    +func Init(api ext.API) {
    +    // register handlers, tools, commands, etc.
    +}
    +

    The //go:build ignore directive prevents the Go toolchain from trying to compile the file as part of a normal build.

    +

    Subdirectory extensions

    +

    For more complex extensions, create a directory with a main.go entry point:

    +
    .kit/extensions/my-extension/
    +├── main.go      # Must contain Init(api ext.API)
    +├── helpers.go   # Additional source files
    +└── config.go
    +
    +

    Package-level state

    +

    Yaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks:

    +
    package main
    +
    +import "kit/ext"
    +
    +var callCount int
    +
    +func Init(api ext.API) {
    +    api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) {
    +        callCount++
    +        ctx.SetFooter(ext.HeaderFooterConfig{
    +            Content: ext.WidgetContent{
    +                Text: fmt.Sprintf("Tools called: %d", callCount),
    +            },
    +        })
    +    })
    +}
    `,headings:[{depth:2,text:"Auto-discovery",id:"auto-discovery"},{depth:2,text:"Explicit loading",id:"explicit-loading"},{depth:2,text:"Disabling extensions",id:"disabling-extensions"},{depth:2,text:"Installing from git",id:"installing-from-git"},{depth:2,text:"Extension structure",id:"extension-structure"},{depth:3,text:"Single-file extensions",id:"single-file-extensions"},{depth:3,text:"Subdirectory extensions",id:"subdirectory-extensions"},{depth:3,text:"Package-level state",id:"package-level-state"}],raw:` +# Loading Extensions + +## Auto-discovery + +Kit automatically discovers and loads extensions from these paths, in order: + +| Path | Scope | +|------|-------| +| \`~/.config/kit/extensions/*.go\` | Global single files | +| \`~/.config/kit/extensions/*/main.go\` | Global subdirectory extensions | +| \`.kit/extensions/*.go\` | Project-local single files | +| \`.kit/extensions/*/main.go\` | Project-local subdirectory extensions | +| \`~/.local/share/kit/git/\` | Global git-installed packages | +| \`.kit/git/\` | Project-local git-installed packages | + +## Explicit loading + +Load extensions by path using the \`-e\` flag: + +\`\`\`bash +kit -e path/to/extension.go +\`\`\` + +Load multiple extensions: + +\`\`\`bash +kit -e ext1.go -e ext2.go +\`\`\` + +## Disabling extensions + +Disable all auto-discovered extensions: + +\`\`\`bash +kit --no-extensions +\`\`\` + +You can combine \`--no-extensions\` with \`-e\` to load only specific extensions: + +\`\`\`bash +kit --no-extensions -e my-extension.go +\`\`\` + +## Installing from git + +Install extensions from git repositories using \`kit install\`: + +\`\`\`bash +# Install globally (to ~/.local/share/kit/git/) +kit install https://github.com/user/my-kit-extension.git + +# Install project-locally (to .kit/git/) +kit install -l https://github.com/user/my-kit-extension.git + +# Update an installed package +kit install -u https://github.com/user/my-kit-extension.git + +# Remove +kit install --uninstall my-kit-extension +\`\`\` + +## Extension structure + +### Single-file extensions + +A single \`.go\` file with an \`Init\` function: + +\`\`\`go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + // register handlers, tools, commands, etc. +} +\`\`\` + +The \`//go:build ignore\` directive prevents the Go toolchain from trying to compile the file as part of a normal build. + +### Subdirectory extensions + +For more complex extensions, create a directory with a \`main.go\` entry point: + +\`\`\` +.kit/extensions/my-extension/ +├── main.go # Must contain Init(api ext.API) +├── helpers.go # Additional source files +└── config.go +\`\`\` + +### Package-level state + +Yaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks: + +\`\`\`go +package main + +import "kit/ext" + +var callCount int + +func Init(api ext.API) { + api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) { + callCount++ + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{ + Text: fmt.Sprintf("Tools called: %d", callCount), + }, + }) + }) +} +\`\`\` +`};export{s as default}; diff --git a/assets/options-DhBmR6ye.js b/assets/options-DhBmR6ye.js new file mode 100644 index 00000000..42bee1fa --- /dev/null +++ b/assets/options-DhBmR6ye.js @@ -0,0 +1,147 @@ +const s={frontmatter:{title:"SDK Options",description:"Configuration options for the Kit Go SDK.",hidden:!1,toc:!0,draft:!1},html:`

    SDK Options

    +

    Pass an Options struct to kit.New() to configure the Kit instance.

    +

    Full options reference

    +
    host, err := kit.New(ctx, &kit.Options{
    +    // Model
    +    Model:        "ollama/llama3",
    +    SystemPrompt: "You are a helpful bot",
    +    ConfigFile:   "/path/to/config.yml",
    +
    +    // Behavior
    +    MaxSteps:     10,
    +    Streaming:    true,
    +    Quiet:        true,
    +    Debug:        true,
    +
    +    // Session
    +    SessionPath:  "./session.jsonl",
    +    SessionDir:   "/custom/sessions/",
    +    Continue:     true,
    +    NoSession:    true,
    +
    +    // Tools
    +    Tools:        []kit.Tool{...},     // Replace default tool set entirely
    +    ExtraTools:   []kit.Tool{...},     // Add tools alongside defaults
    +
    +    // Compaction
    +    AutoCompact:  true,
    +
    +    // Skills
    +    Skills:       []string{"/path/to/skill.md"},
    +    SkillsDir:    "/path/to/skills/",
    +})
    +

    Options fields

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDefaultDescription
    Modelstringconfig defaultModel string (provider/model format)
    SystemPromptstringSystem prompt text or file path
    ConfigFilestring~/.kit.ymlPath to config file
    MaxStepsint0Max agent steps (0 = unlimited)
    StreamingbooltrueEnable streaming output
    QuietboolfalseSuppress output
    DebugboolfalseEnable debug logging
    SessionPathstringOpen a specific session file
    SessionDirstringBase directory for session discovery
    ContinueboolfalseResume most recent session
    NoSessionboolfalseEphemeral mode (no persistence)
    Tools[]ToolReplace the entire default tool set
    ExtraTools[]ToolAdditional tools alongside core/MCP/extension tools
    AutoCompactboolfalseAuto-compact when near context limit
    CompactionOptions*CompactionOptionsConfiguration for auto-compaction
    Skills[]stringExplicit skill files/dirs to load
    SkillsDirstringOverride default skills directory
    `,headings:[{depth:2,text:"Full options reference",id:"full-options-reference"},{depth:2,text:"Options fields",id:"options-fields"}],raw:'\n# SDK Options\n\nPass an `Options` struct to `kit.New()` to configure the Kit instance.\n\n## Full options reference\n\n```go\nhost, err := kit.New(ctx, &kit.Options{\n // Model\n Model: "ollama/llama3",\n SystemPrompt: "You are a helpful bot",\n ConfigFile: "/path/to/config.yml",\n\n // Behavior\n MaxSteps: 10,\n Streaming: true,\n Quiet: true,\n Debug: true,\n\n // Session\n SessionPath: "./session.jsonl",\n SessionDir: "/custom/sessions/",\n Continue: true,\n NoSession: true,\n\n // Tools\n Tools: []kit.Tool{...}, // Replace default tool set entirely\n ExtraTools: []kit.Tool{...}, // Add tools alongside defaults\n\n // Compaction\n AutoCompact: true,\n\n // Skills\n Skills: []string{"/path/to/skill.md"},\n SkillsDir: "/path/to/skills/",\n})\n```\n\n## Options fields\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `Model` | `string` | config default | Model string (provider/model format) |\n| `SystemPrompt` | `string` | — | System prompt text or file path |\n| `ConfigFile` | `string` | `~/.kit.yml` | Path to config file |\n| `MaxSteps` | `int` | `0` | Max agent steps (0 = unlimited) |\n| `Streaming` | `bool` | `true` | Enable streaming output |\n| `Quiet` | `bool` | `false` | Suppress output |\n| `Debug` | `bool` | `false` | Enable debug logging |\n| `SessionPath` | `string` | — | Open a specific session file |\n| `SessionDir` | `string` | — | Base directory for session discovery |\n| `Continue` | `bool` | `false` | Resume most recent session |\n| `NoSession` | `bool` | `false` | Ephemeral mode (no persistence) |\n| `Tools` | `[]Tool` | — | Replace the entire default tool set |\n| `ExtraTools` | `[]Tool` | — | Additional tools alongside core/MCP/extension tools |\n| `AutoCompact` | `bool` | `false` | Auto-compact when near context limit |\n| `CompactionOptions` | `*CompactionOptions` | — | Configuration for auto-compaction |\n| `Skills` | `[]string` | — | Explicit skill files/dirs to load |\n| `SkillsDir` | `string` | — | Override default skills directory |\n'};export{s as default}; diff --git a/assets/overview-DNz93_Eg.js b/assets/overview-DNz93_Eg.js new file mode 100644 index 00000000..aed49836 --- /dev/null +++ b/assets/overview-DNz93_Eg.js @@ -0,0 +1,56 @@ +const e={frontmatter:{title:"Extension System",description:"Overview of Kit's Go-based extension system.",hidden:!1,toc:!0,draft:!1},html:`

    Extension System

    +

    Extensions are Go source files interpreted at runtime via Yaegi. They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit.

    +

    Minimal extension

    +
    //go:build ignore
    +
    +package main
    +
    +import "kit/ext"
    +
    +func Init(api ext.API) {
    +    api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {
    +        ctx.SetFooter(ext.HeaderFooterConfig{
    +            Content: ext.WidgetContent{Text: "Custom Footer"},
    +        })
    +    })
    +}
    +

    Run it with:

    +
    kit -e examples/extensions/minimal.go
    +

    How extensions work

    +
      +
    1. Kit discovers extension files from auto-discovery paths or explicit -e flags
    2. +
    3. Each .go file is loaded into a Yaegi interpreter with access to the kit/ext package
    4. +
    5. Kit calls the Init(api ext.API) function in each extension
    6. +
    7. The extension registers callbacks, tools, commands, and UI components via the api and ctx objects
    8. +
    +

    Key concepts

    +

    The API object

    +

    Passed to Init(), the API object is used to register lifecycle event handlers and static components:

    +
      +
    • Lifecycle handlersapi.OnSessionStart(...), api.OnToolCall(...), etc.
    • +
    • Toolsapi.RegisterTool(ext.ToolDef{...})
    • +
    • Commandsapi.RegisterCommand(ext.CommandDef{...})
    • +
    • Shortcutsapi.RegisterShortcut(ext.ShortcutDef{...}, handler)
    • +
    • Tool renderersapi.RegisterToolRenderer(ext.ToolRenderConfig{...})
    • +
    • Message renderersapi.RegisterMessageRenderer(ext.MessageRendererConfig{...})
    • +
    • Optionsapi.RegisterOption(ext.OptionDef{...})
    • +
    +

    The Context object

    +

    Passed to event handlers, the Context object provides runtime access to Kit's state and UI:

    +
      +
    • Outputctx.Print(...), ctx.PrintInfo(...), ctx.PrintError(...)
    • +
    • UI componentsctx.SetWidget(...), ctx.SetHeader(...), ctx.SetFooter(...), ctx.SetStatus(...)
    • +
    • Editorctx.SetEditor(...), ctx.ResetEditor()
    • +
    • Promptsctx.PromptSelect(...), ctx.PromptConfirm(...), ctx.PromptInput(...)
    • +
    • Overlaysctx.ShowOverlay(...)
    • +
    • Messagesctx.SendMessage(...), ctx.GetMessages()
    • +
    • Modelctx.SetModel(...), ctx.GetAvailableModels()
    • +
    • Toolsctx.GetAllTools(), ctx.SetActiveTools(...)
    • +
    • Context statsctx.GetContextStats()
    • +
    • Session datactx.AppendEntry(...), ctx.GetEntries(...)
    • +
    • Subagentsctx.SpawnSubagent(...)
    • +
    • LLM completionctx.Complete(...)
    • +
    • Custom eventsctx.EmitCustomEvent(...)
    • +
    • App controlctx.Exit(), ctx.ReloadExtensions()
    • +
    +

    See Capabilities for full details on each component type.

    `,headings:[{depth:2,text:"Minimal extension",id:"minimal-extension"},{depth:2,text:"How extensions work",id:"how-extensions-work"},{depth:2,text:"Key concepts",id:"key-concepts"},{depth:3,text:"The API object",id:"the-api-object"},{depth:3,text:"The Context object",id:"the-context-object"}],raw:'\n# Extension System\n\nExtensions are Go source files interpreted at runtime via [Yaegi](https://github.com/traefik/yaegi). They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit.\n\n## Minimal extension\n\n```go\n//go:build ignore\n\npackage main\n\nimport "kit/ext"\n\nfunc Init(api ext.API) {\n api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {\n ctx.SetFooter(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{Text: "Custom Footer"},\n })\n })\n}\n```\n\nRun it with:\n\n```bash\nkit -e examples/extensions/minimal.go\n```\n\n## How extensions work\n\n1. Kit discovers extension files from [auto-discovery paths](/extensions/loading) or explicit `-e` flags\n2. Each `.go` file is loaded into a Yaegi interpreter with access to the `kit/ext` package\n3. Kit calls the `Init(api ext.API)` function in each extension\n4. The extension registers callbacks, tools, commands, and UI components via the `api` and `ctx` objects\n\n## Key concepts\n\n### The `API` object\n\nPassed to `Init()`, the `API` object is used to register lifecycle event handlers and static components:\n\n- **Lifecycle handlers** — `api.OnSessionStart(...)`, `api.OnToolCall(...)`, etc.\n- **Tools** — `api.RegisterTool(ext.ToolDef{...})`\n- **Commands** — `api.RegisterCommand(ext.CommandDef{...})`\n- **Shortcuts** — `api.RegisterShortcut(ext.ShortcutDef{...}, handler)`\n- **Tool renderers** — `api.RegisterToolRenderer(ext.ToolRenderConfig{...})`\n- **Message renderers** — `api.RegisterMessageRenderer(ext.MessageRendererConfig{...})`\n- **Options** — `api.RegisterOption(ext.OptionDef{...})`\n\n### The `Context` object\n\nPassed to event handlers, the `Context` object provides runtime access to Kit\'s state and UI:\n\n- **Output** — `ctx.Print(...)`, `ctx.PrintInfo(...)`, `ctx.PrintError(...)`\n- **UI components** — `ctx.SetWidget(...)`, `ctx.SetHeader(...)`, `ctx.SetFooter(...)`, `ctx.SetStatus(...)`\n- **Editor** — `ctx.SetEditor(...)`, `ctx.ResetEditor()`\n- **Prompts** — `ctx.PromptSelect(...)`, `ctx.PromptConfirm(...)`, `ctx.PromptInput(...)`\n- **Overlays** — `ctx.ShowOverlay(...)`\n- **Messages** — `ctx.SendMessage(...)`, `ctx.GetMessages()`\n- **Model** — `ctx.SetModel(...)`, `ctx.GetAvailableModels()`\n- **Tools** — `ctx.GetAllTools()`, `ctx.SetActiveTools(...)`\n- **Context stats** — `ctx.GetContextStats()`\n- **Session data** — `ctx.AppendEntry(...)`, `ctx.GetEntries(...)`\n- **Subagents** — `ctx.SpawnSubagent(...)`\n- **LLM completion** — `ctx.Complete(...)`\n- **Custom events** — `ctx.EmitCustomEvent(...)`\n- **App control** — `ctx.Exit()`, `ctx.ReloadExtensions()`\n\nSee [Capabilities](/extensions/capabilities) for full details on each component type.\n'};export{e as default}; diff --git a/assets/overview-DbvqPNef.js b/assets/overview-DbvqPNef.js new file mode 100644 index 00000000..2e1889ad --- /dev/null +++ b/assets/overview-DbvqPNef.js @@ -0,0 +1,215 @@ +const s={frontmatter:{title:"Go SDK",description:"Embed Kit in your Go applications.",hidden:!1,toc:!0,draft:!1},html:`

    Go SDK

    +

    The pkg/kit package lets you embed Kit as a library in your Go applications.

    +

    Installation

    +
    go get github.com/mark3labs/kit/pkg/kit
    +

    Basic usage

    +
    package main
    +
    +import (
    +    "context"
    +    "log"
    +
    +    kit "github.com/mark3labs/kit/pkg/kit"
    +)
    +
    +func main() {
    +    ctx := context.Background()
    +
    +    // Create Kit instance with default configuration
    +    host, err := kit.New(ctx, nil)
    +    if err != nil {
    +        log.Fatal(err)
    +    }
    +    defer host.Close()
    +
    +    // Send a prompt
    +    response, err := host.Prompt(ctx, "What is 2+2?")
    +    if err != nil {
    +        log.Fatal(err)
    +    }
    +
    +    println(response)
    +}
    +

    Multi-turn conversations

    +

    Conversations retain context automatically across calls:

    +
    host.Prompt(ctx, "My name is Alice")
    +response, _ := host.Prompt(ctx, "What's my name?")
    +// response: "Your name is Alice"
    +

    Additional prompt methods

    +

    The SDK provides several prompt variants:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodDescription
    Prompt(ctx, message)Simple prompt, returns response string
    PromptWithCallbacks(ctx, message, ...)With tool call and streaming callbacks
    PromptWithOptions(ctx, message, opts)With per-call options
    PromptResult(ctx, message)Returns full TurnResult with usage stats
    PromptResultWithFiles(ctx, message, files)Multimodal with file attachments
    Steer(ctx, instruction)System-level steering without user message
    FollowUp(ctx, text)Continue without new user input
    +

    Event system

    +

    Subscribe to events for monitoring:

    +
    unsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) {
    +    fmt.Println("Tool called:", event.Name)
    +})
    +defer unsubscribe()
    +
    +host.OnToolResult(func(event kit.ToolResultEvent) {
    +    fmt.Println("Tool result:", event.Name)
    +})
    +
    +host.OnStreaming(func(event kit.MessageUpdateEvent) {
    +    fmt.Print(event.Chunk)
    +})
    +

    Model management

    +

    Switch models at runtime:

    +
    host.SetModel(ctx, "openai/gpt-4o")
    +info := host.GetModelInfo()
    +models := host.GetAvailableModels()
    +

    Context and compaction

    +

    Monitor and manage context usage:

    +
    tokens := host.EstimateContextTokens()
    +stats := host.GetContextStats()
    +
    +if host.ShouldCompact() {
    +    result, err := host.Compact(ctx, nil, "")
    +}
    +

    See Options, Callbacks, and Sessions for more details.

    `,headings:[{depth:2,text:"Installation",id:"installation"},{depth:2,text:"Basic usage",id:"basic-usage"},{depth:2,text:"Multi-turn conversations",id:"multi-turn-conversations"},{depth:2,text:"Additional prompt methods",id:"additional-prompt-methods"},{depth:2,text:"Event system",id:"event-system"},{depth:2,text:"Model management",id:"model-management"},{depth:2,text:"Context and compaction",id:"context-and-compaction"}],raw:` +# Go SDK + +The \`pkg/kit\` package lets you embed Kit as a library in your Go applications. + +## Installation + +\`\`\`bash +go get github.com/mark3labs/kit/pkg/kit +\`\`\` + +## Basic usage + +\`\`\`go +package main + +import ( + "context" + "log" + + kit "github.com/mark3labs/kit/pkg/kit" +) + +func main() { + ctx := context.Background() + + // Create Kit instance with default configuration + host, err := kit.New(ctx, nil) + if err != nil { + log.Fatal(err) + } + defer host.Close() + + // Send a prompt + response, err := host.Prompt(ctx, "What is 2+2?") + if err != nil { + log.Fatal(err) + } + + println(response) +} +\`\`\` + +## Multi-turn conversations + +Conversations retain context automatically across calls: + +\`\`\`go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +\`\`\` + +## Additional prompt methods + +The SDK provides several prompt variants: + +| Method | Description | +|--------|-------------| +| \`Prompt(ctx, message)\` | Simple prompt, returns response string | +| \`PromptWithCallbacks(ctx, message, ...)\` | With tool call and streaming callbacks | +| \`PromptWithOptions(ctx, message, opts)\` | With per-call options | +| \`PromptResult(ctx, message)\` | Returns full \`TurnResult\` with usage stats | +| \`PromptResultWithFiles(ctx, message, files)\` | Multimodal with file attachments | +| \`Steer(ctx, instruction)\` | System-level steering without user message | +| \`FollowUp(ctx, text)\` | Continue without new user input | + +## Event system + +Subscribe to events for monitoring: + +\`\`\`go +unsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Println("Tool called:", event.Name) +}) +defer unsubscribe() + +host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Println("Tool result:", event.Name) +}) + +host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +\`\`\` + +## Model management + +Switch models at runtime: + +\`\`\`go +host.SetModel(ctx, "openai/gpt-4o") +info := host.GetModelInfo() +models := host.GetAvailableModels() +\`\`\` + +## Context and compaction + +Monitor and manage context usage: + +\`\`\`go +tokens := host.EstimateContextTokens() +stats := host.GetContextStats() + +if host.ShouldCompact() { + result, err := host.Compact(ctx, nil, "") +} +\`\`\` + +See [Options](/sdk/options), [Callbacks](/sdk/callbacks), and [Sessions](/sdk/sessions) for more details. +`};export{s as default}; diff --git a/assets/providers-B05lw6S_.js b/assets/providers-B05lw6S_.js new file mode 100644 index 00000000..36fccfcb --- /dev/null +++ b/assets/providers-B05lw6S_.js @@ -0,0 +1,224 @@ +const s={frontmatter:{title:"Providers",description:"Supported LLM providers and model configuration.",hidden:!1,toc:!0,draft:!1},html:`

    Providers

    +

    Kit supports a wide range of LLM providers through a unified provider/model string format.

    +

    Supported providers

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ProviderPrefixDescription
    Anthropicanthropic/Claude models (native, prompt caching, OAuth)
    OpenAIopenai/GPT models
    Googlegoogle/ or gemini/Gemini models
    Ollamaollama/Local models
    Azure OpenAIazure/Azure-hosted OpenAI
    AWS Bedrockbedrock/Bedrock models
    Google Vertexgoogle-vertex-anthropic/Claude on Vertex AI
    OpenRouteropenrouter/Multi-provider router
    Vercel AIvercel/Vercel AI SDK models
    Auto-routedanyAny provider from the models.dev database
    +

    Model string format

    +
    provider/model            # Standard format
    +anthropic/claude-sonnet-4-5-20250929
    +openai/gpt-4o
    +ollama/llama3
    +google/gemini-2.0-flash-exp
    +

    Model aliases

    +

    Kit provides aliases for commonly used models:

    +
    claude-opus-latest claude-opus-4-20250514
    +claude-sonnet-latest claude-sonnet-4-5-20250929
    +claude-4-opus-latest claude-opus-4-20250514
    +claude-4-sonnet-latest claude-sonnet-4-5-20250929
    +claude-3-7-sonnet-latest claude-3-7-sonnet-20250219
    +claude-3-5-sonnet-latest claude-3-5-sonnet-20241022
    +claude-3-5-haiku-latest claude-3-5-haiku-20241022
    +claude-3-opus-latest claude-3-opus-20240229
    +

    Specifying a model

    +

    Via CLI flag:

    +
    kit --model openai/gpt-4o
    +kit -m ollama/llama3
    +

    Via config file:

    +
    model: anthropic/claude-sonnet-4-5-20250929
    +

    Via environment variable:

    +
    export KIT_MODEL="google/gemini-2.0-flash-exp"
    +

    Authentication

    +

    API keys

    +

    Set the appropriate environment variable for your provider:

    +
    export ANTHROPIC_API_KEY="sk-..."
    +export OPENAI_API_KEY="sk-..."
    +export GOOGLE_API_KEY="..."
    +

    Or pass it directly:

    +
    kit --provider-api-key "sk-..." --model openai/gpt-4o
    +

    OAuth

    +

    For providers that support OAuth (e.g., Anthropic):

    +
    kit auth login anthropic     # Start OAuth flow
    +kit auth status              # Check authentication status
    +kit auth logout anthropic    # Remove credentials
    +

    Custom provider URL

    +

    For self-hosted or proxy endpoints:

    +
    kit --provider-url "https://my-proxy.example.com/v1" --model openai/gpt-4o
    +

    Model database

    +

    Kit ships with a local model database that maps provider names to API configurations. You can manage it with:

    +
    kit models                   # List available models
    +kit models openai            # Filter by provider
    +kit models --all             # Show all providers
    +kit update-models            # Update from models.dev
    +kit update-models embedded   # Reset to bundled database
    `,headings:[{depth:2,text:"Supported providers",id:"supported-providers"},{depth:2,text:"Model string format",id:"model-string-format"},{depth:2,text:"Model aliases",id:"model-aliases"},{depth:2,text:"Specifying a model",id:"specifying-a-model"},{depth:2,text:"Authentication",id:"authentication"},{depth:3,text:"API keys",id:"api-keys"},{depth:3,text:"OAuth",id:"oauth"},{depth:3,text:"Custom provider URL",id:"custom-provider-url"},{depth:2,text:"Model database",id:"model-database"}],raw:` +# Providers + +Kit supports a wide range of LLM providers through a unified \`provider/model\` string format. + +## Supported providers + +| Provider | Prefix | Description | +|----------|--------|-------------| +| **Anthropic** | \`anthropic/\` | Claude models (native, prompt caching, OAuth) | +| **OpenAI** | \`openai/\` | GPT models | +| **Google** | \`google/\` or \`gemini/\` | Gemini models | +| **Ollama** | \`ollama/\` | Local models | +| **Azure OpenAI** | \`azure/\` | Azure-hosted OpenAI | +| **AWS Bedrock** | \`bedrock/\` | Bedrock models | +| **Google Vertex** | \`google-vertex-anthropic/\` | Claude on Vertex AI | +| **OpenRouter** | \`openrouter/\` | Multi-provider router | +| **Vercel AI** | \`vercel/\` | Vercel AI SDK models | +| **Auto-routed** | any | Any provider from the models.dev database | + +## Model string format + +\`\`\`bash +provider/model # Standard format +anthropic/claude-sonnet-4-5-20250929 +openai/gpt-4o +ollama/llama3 +google/gemini-2.0-flash-exp +\`\`\` + +## Model aliases + +Kit provides aliases for commonly used models: + +\`\`\`bash +claude-opus-latest → claude-opus-4-20250514 +claude-sonnet-latest → claude-sonnet-4-5-20250929 +claude-4-opus-latest → claude-opus-4-20250514 +claude-4-sonnet-latest → claude-sonnet-4-5-20250929 +claude-3-7-sonnet-latest → claude-3-7-sonnet-20250219 +claude-3-5-sonnet-latest → claude-3-5-sonnet-20241022 +claude-3-5-haiku-latest → claude-3-5-haiku-20241022 +claude-3-opus-latest → claude-3-opus-20240229 +\`\`\` + +## Specifying a model + +Via CLI flag: + +\`\`\`bash +kit --model openai/gpt-4o +kit -m ollama/llama3 +\`\`\` + +Via config file: + +\`\`\`yaml +model: anthropic/claude-sonnet-4-5-20250929 +\`\`\` + +Via environment variable: + +\`\`\`bash +export KIT_MODEL="google/gemini-2.0-flash-exp" +\`\`\` + +## Authentication + +### API keys + +Set the appropriate environment variable for your provider: + +\`\`\`bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +\`\`\` + +Or pass it directly: + +\`\`\`bash +kit --provider-api-key "sk-..." --model openai/gpt-4o +\`\`\` + +### OAuth + +For providers that support OAuth (e.g., Anthropic): + +\`\`\`bash +kit auth login anthropic # Start OAuth flow +kit auth status # Check authentication status +kit auth logout anthropic # Remove credentials +\`\`\` + +### Custom provider URL + +For self-hosted or proxy endpoints: + +\`\`\`bash +kit --provider-url "https://my-proxy.example.com/v1" --model openai/gpt-4o +\`\`\` + +## Model database + +Kit ships with a local model database that maps provider names to API configurations. You can manage it with: + +\`\`\`bash +kit models # List available models +kit models openai # Filter by provider +kit models --all # Show all providers +kit update-models # Update from models.dev +kit update-models embedded # Reset to bundled database +\`\`\` +`};export{s as default}; diff --git a/assets/quick-start-B51YvXk3.js b/assets/quick-start-B51YvXk3.js new file mode 100644 index 00000000..0658b36d --- /dev/null +++ b/assets/quick-start-B51YvXk3.js @@ -0,0 +1,117 @@ +const s={frontmatter:{title:"Quick Start",description:"Get up and running with Kit in minutes.",hidden:!1,toc:!0,draft:!1},html:`

    Quick Start

    +

    Basic usage

    +

    Start an interactive session:

    +
    kit
    +

    Run a one-off prompt:

    +
    kit "List files in src/"
    +

    Attach files as context using the @ prefix:

    +
    kit @main.go @test.go "Review these files"
    +

    Use a specific model:

    +
    kit --model anthropic/claude-sonnet-4-5-20250929
    +

    Non-interactive mode

    +

    Kit can run as a non-interactive tool for scripting and automation.

    +

    Get JSON output:

    +
    kit "Explain main.go" --json
    +

    Quiet mode (final response only, no TUI):

    +
    kit "Run tests" --quiet
    +

    Ephemeral mode (no session file created):

    +
    kit "Quick question" --no-session
    +

    Resuming sessions

    +

    Continue the most recent session for the current directory:

    +
    kit --continue
    +# or
    +kit -c
    +

    Pick from previous sessions interactively:

    +
    kit --resume
    +# or
    +kit -r
    +

    ACP server mode

    +

    Kit can run as an ACP (Agent Client Protocol) agent server, enabling ACP-compatible clients (such as OpenCode) to drive Kit as a remote coding agent over stdio:

    +
    # Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout)
    +kit acp
    +
    +# With debug logging to stderr
    +kit acp --debug
    +

    The ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol.

    `,headings:[{depth:2,text:"Basic usage",id:"basic-usage"},{depth:2,text:"Non-interactive mode",id:"non-interactive-mode"},{depth:2,text:"Resuming sessions",id:"resuming-sessions"},{depth:2,text:"ACP server mode",id:"acp-server-mode"}],raw:` +# Quick Start + +## Basic usage + +Start an interactive session: + +\`\`\`bash +kit +\`\`\` + +Run a one-off prompt: + +\`\`\`bash +kit "List files in src/" +\`\`\` + +Attach files as context using the \`@\` prefix: + +\`\`\`bash +kit @main.go @test.go "Review these files" +\`\`\` + +Use a specific model: + +\`\`\`bash +kit --model anthropic/claude-sonnet-4-5-20250929 +\`\`\` + +## Non-interactive mode + +Kit can run as a non-interactive tool for scripting and automation. + +Get JSON output: + +\`\`\`bash +kit "Explain main.go" --json +\`\`\` + +Quiet mode (final response only, no TUI): + +\`\`\`bash +kit "Run tests" --quiet +\`\`\` + +Ephemeral mode (no session file created): + +\`\`\`bash +kit "Quick question" --no-session +\`\`\` + +## Resuming sessions + +Continue the most recent session for the current directory: + +\`\`\`bash +kit --continue +# or +kit -c +\`\`\` + +Pick from previous sessions interactively: + +\`\`\`bash +kit --resume +# or +kit -r +\`\`\` + +## ACP server mode + +Kit can run as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server, enabling ACP-compatible clients (such as [OpenCode](https://github.com/sst/opencode)) to drive Kit as a remote coding agent over stdio: + +\`\`\`bash +# Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout) +kit acp + +# With debug logging to stderr +kit acp --debug +\`\`\` + +The ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol. +`};export{s as default}; diff --git a/assets/sessions-BM7WkgkF.js b/assets/sessions-BM7WkgkF.js new file mode 100644 index 00000000..c7562295 --- /dev/null +++ b/assets/sessions-BM7WkgkF.js @@ -0,0 +1,77 @@ +const s={frontmatter:{title:"Session Management",description:"How Kit persists and manages conversation sessions.",hidden:!1,toc:!0,draft:!1},html:`

    Session Management

    +

    Kit uses a tree-based session model that supports branching and forking conversations.

    +

    Session storage

    +

    Sessions are stored as JSONL (JSON Lines) files:

    +
    ~/.kit/sessions/<cwd-path>/<timestamp>_<id>.jsonl
    +
    +

    Path separators in the working directory are replaced with --. For example, /home/user/project becomes home--user--project.

    +

    Each line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths.

    +

    Resuming sessions

    +

    Continue most recent

    +

    Resume the most recent session for the current directory:

    +
    kit --continue
    +kit -c
    +

    Interactive picker

    +

    Choose from previous sessions interactively:

    +
    kit --resume
    +kit -r
    +

    Open a specific session

    +
    kit --session path/to/session.jsonl
    +kit -s path/to/session.jsonl
    +

    Ephemeral mode

    +

    Run without creating a session file:

    +
    kit --no-session
    +

    This is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed.

    `,headings:[{depth:2,text:"Session storage",id:"session-storage"},{depth:2,text:"Resuming sessions",id:"resuming-sessions"},{depth:3,text:"Continue most recent",id:"continue-most-recent"},{depth:3,text:"Interactive picker",id:"interactive-picker"},{depth:3,text:"Open a specific session",id:"open-a-specific-session"},{depth:2,text:"Ephemeral mode",id:"ephemeral-mode"}],raw:` +# Session Management + +Kit uses a tree-based session model that supports branching and forking conversations. + +## Session storage + +Sessions are stored as JSONL (JSON Lines) files: + +\`\`\` +~/.kit/sessions//_.jsonl +\`\`\` + +Path separators in the working directory are replaced with \`--\`. For example, \`/home/user/project\` becomes \`home--user--project\`. + +Each line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths. + +## Resuming sessions + +### Continue most recent + +Resume the most recent session for the current directory: + +\`\`\`bash +kit --continue +kit -c +\`\`\` + +### Interactive picker + +Choose from previous sessions interactively: + +\`\`\`bash +kit --resume +kit -r +\`\`\` + +### Open a specific session + +\`\`\`bash +kit --session path/to/session.jsonl +kit -s path/to/session.jsonl +\`\`\` + +## Ephemeral mode + +Run without creating a session file: + +\`\`\`bash +kit --no-session +\`\`\` + +This is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed. +`};export{s as default}; diff --git a/assets/sessions-X-l1qojs.js b/assets/sessions-X-l1qojs.js new file mode 100644 index 00000000..e51d8b09 --- /dev/null +++ b/assets/sessions-X-l1qojs.js @@ -0,0 +1,142 @@ +const s={frontmatter:{title:"SDK Sessions",description:"Session management in the Kit Go SDK.",hidden:!1,toc:!0,draft:!1},html:`

    SDK Sessions

    +

    Automatic persistence

    +

    By default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls:

    +
    host.Prompt(ctx, "My name is Alice")
    +response, _ := host.Prompt(ctx, "What's my name?")
    +// response: "Your name is Alice"
    +

    Accessing session info

    +
    // Get the current session file path
    +path := host.GetSessionPath()
    +
    +// Get the session ID
    +id := host.GetSessionID()
    +
    +// Get the current model string
    +model := host.GetModelString()
    +

    Configuring sessions via Options

    +

    Session behavior is configured at initialization:

    +
    // Open a specific session file
    +host, _ := kit.New(ctx, &kit.Options{
    +    SessionPath: "./my-session.jsonl",
    +})
    +
    +// Resume the most recent session for the current directory
    +host, _ := kit.New(ctx, &kit.Options{
    +    Continue: true,
    +})
    +
    +// Ephemeral mode (no file persistence)
    +host, _ := kit.New(ctx, &kit.Options{
    +    NoSession: true,
    +})
    +
    +// Custom session directory
    +host, _ := kit.New(ctx, &kit.Options{
    +    SessionDir: "/custom/sessions/",
    +})
    +

    Clearing history

    +

    Clear the in-memory conversation history (does not delete the session file):

    +
    host.ClearSession()
    +

    Tree-based sessions

    +

    Kit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths:

    +
    // Access the tree session manager
    +ts := host.GetTreeSession()
    +
    +// Branch from a specific entry
    +err := host.Branch("entry-id-123")
    +

    Listing and managing sessions

    +

    Package-level functions for session discovery:

    +
    // List sessions for a specific directory
    +sessions := kit.ListSessions("/home/user/project")
    +
    +// List all sessions across all directories
    +all := kit.ListAllSessions()
    +
    +// Delete a session file
    +kit.DeleteSession("/path/to/session.jsonl")
    `,headings:[{depth:2,text:"Automatic persistence",id:"automatic-persistence"},{depth:2,text:"Accessing session info",id:"accessing-session-info"},{depth:2,text:"Configuring sessions via Options",id:"configuring-sessions-via-options"},{depth:2,text:"Clearing history",id:"clearing-history"},{depth:2,text:"Tree-based sessions",id:"tree-based-sessions"},{depth:2,text:"Listing and managing sessions",id:"listing-and-managing-sessions"}],raw:` +# SDK Sessions + +## Automatic persistence + +By default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls: + +\`\`\`go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +\`\`\` + +## Accessing session info + +\`\`\`go +// Get the current session file path +path := host.GetSessionPath() + +// Get the session ID +id := host.GetSessionID() + +// Get the current model string +model := host.GetModelString() +\`\`\` + +## Configuring sessions via Options + +Session behavior is configured at initialization: + +\`\`\`go +// Open a specific session file +host, _ := kit.New(ctx, &kit.Options{ + SessionPath: "./my-session.jsonl", +}) + +// Resume the most recent session for the current directory +host, _ := kit.New(ctx, &kit.Options{ + Continue: true, +}) + +// Ephemeral mode (no file persistence) +host, _ := kit.New(ctx, &kit.Options{ + NoSession: true, +}) + +// Custom session directory +host, _ := kit.New(ctx, &kit.Options{ + SessionDir: "/custom/sessions/", +}) +\`\`\` + +## Clearing history + +Clear the in-memory conversation history (does not delete the session file): + +\`\`\`go +host.ClearSession() +\`\`\` + +## Tree-based sessions + +Kit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths: + +\`\`\`go +// Access the tree session manager +ts := host.GetTreeSession() + +// Branch from a specific entry +err := host.Branch("entry-id-123") +\`\`\` + +## Listing and managing sessions + +Package-level functions for session discovery: + +\`\`\`go +// List sessions for a specific directory +sessions := kit.ListSessions("/home/user/project") + +// List all sessions across all directories +all := kit.ListAllSessions() + +// Delete a session file +kit.DeleteSession("/path/to/session.jsonl") +\`\`\` +`};export{s as default}; diff --git a/assets/subagents-ChkZbdDR.js b/assets/subagents-ChkZbdDR.js new file mode 100644 index 00000000..6bd6613f --- /dev/null +++ b/assets/subagents-ChkZbdDR.js @@ -0,0 +1,136 @@ +const s={frontmatter:{title:"Subagents",description:"Multi-agent orchestration with Kit subagents.",hidden:!1,toc:!0,draft:!1},html:`

    Subagents

    +

    Kit supports multi-agent orchestration through both subprocess spawning and in-process subagents.

    +

    Subprocess pattern

    +

    Spawn Kit as a subprocess for isolated agent execution:

    +
    kit "Analyze codebase" \\
    +    --json \\
    +    --no-session \\
    +    --no-extensions \\
    +    --quiet \\
    +    --model anthropic/claude-haiku-3-5-20241022
    +

    Key flags for subprocess usage:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FlagPurpose
    --quietStdout only, no TUI
    --no-sessionEphemeral, no persistence
    --no-extensionsPrevent recursive extension loading
    --jsonMachine-readable output
    --system-promptCustom system prompt (string or file path)
    +

    Positional arguments are the prompt. @file arguments attach file content as context.

    +

    Built-in spawn_subagent tool

    +

    Kit includes a built-in spawn_subagent tool that the LLM can use to delegate tasks to independent child agents:

    +
    spawn_subagent(
    +    task: "Analyze the test files and summarize coverage",
    +    model: "anthropic/claude-haiku-3-5-20241022",   // optional
    +    system_prompt: "You are a test analysis expert.",  // optional
    +    timeout_seconds: 300                               // optional, max 1800
    +)
    +
    +

    Subagents run as separate in-process Kit instances with full tool access (except spawning further subagents, to prevent infinite recursion). They can run in parallel.

    +

    Extension subagents

    +

    Extensions can spawn subagents programmatically:

    +
    result := ctx.SpawnSubagent(ext.SubagentConfig{
    +    Task:         "Review this code for security issues",
    +    Model:        "anthropic/claude-sonnet-4-5-20250929",
    +    SystemPrompt: "You are a security auditor.",
    +})
    +

    Go SDK subagents

    +

    The SDK provides in-process subagent spawning:

    +
    result, err := host.Subagent(ctx, kit.SubagentConfig{
    +    Task:         "Summarize the changes in this PR",
    +    Model:        "anthropic/claude-haiku-3-5-20241022",
    +    SystemPrompt: "You are a code reviewer.",
    +    Timeout:      5 * time.Minute,
    +})
    `,headings:[{depth:2,text:"Subprocess pattern",id:"subprocess-pattern"},{depth:2,text:"Built-in spawn_subagent tool",id:"built-in-spawn_subagent-tool"},{depth:2,text:"Extension subagents",id:"extension-subagents"},{depth:2,text:"Go SDK subagents",id:"go-sdk-subagents"}],raw:` +# Subagents + +Kit supports multi-agent orchestration through both subprocess spawning and in-process subagents. + +## Subprocess pattern + +Spawn Kit as a subprocess for isolated agent execution: + +\`\`\`bash +kit "Analyze codebase" \\ + --json \\ + --no-session \\ + --no-extensions \\ + --quiet \\ + --model anthropic/claude-haiku-3-5-20241022 +\`\`\` + +Key flags for subprocess usage: + +| Flag | Purpose | +|------|---------| +| \`--quiet\` | Stdout only, no TUI | +| \`--no-session\` | Ephemeral, no persistence | +| \`--no-extensions\` | Prevent recursive extension loading | +| \`--json\` | Machine-readable output | +| \`--system-prompt\` | Custom system prompt (string or file path) | + +Positional arguments are the prompt. \`@file\` arguments attach file content as context. + +## Built-in spawn_subagent tool + +Kit includes a built-in \`spawn_subagent\` tool that the LLM can use to delegate tasks to independent child agents: + +\`\`\` +spawn_subagent( + task: "Analyze the test files and summarize coverage", + model: "anthropic/claude-haiku-3-5-20241022", // optional + system_prompt: "You are a test analysis expert.", // optional + timeout_seconds: 300 // optional, max 1800 +) +\`\`\` + +Subagents run as separate in-process Kit instances with full tool access (except spawning further subagents, to prevent infinite recursion). They can run in parallel. + +## Extension subagents + +Extensions can spawn subagents programmatically: + +\`\`\`go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Review this code for security issues", + Model: "anthropic/claude-sonnet-4-5-20250929", + SystemPrompt: "You are a security auditor.", +}) +\`\`\` + +## Go SDK subagents + +The SDK provides in-process subagent spawning: + +\`\`\`go +result, err := host.Subagent(ctx, kit.SubagentConfig{ + Task: "Summarize the changes in this PR", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a code reviewer.", + Timeout: 5 * time.Minute, +}) +\`\`\` +`};export{s as default}; diff --git a/assets/testing-COLNxuKj.js b/assets/testing-COLNxuKj.js new file mode 100644 index 00000000..e286ae69 --- /dev/null +++ b/assets/testing-COLNxuKj.js @@ -0,0 +1,130 @@ +const s={frontmatter:{title:"Testing with tmux",description:"Test Kit's TUI non-interactively using tmux.",hidden:!1,toc:!0,draft:!1},html:`

    Testing with tmux

    +

    Kit's interactive TUI can be tested non-interactively using tmux. This is useful for automated testing, CI pipelines, and extension development.

    +

    Basic pattern

    +
    # Start Kit in a detached tmux session
    +tmux new-session -d -s kittest -x 120 -y 40 \\
    +  "output/kit -e ext.go --no-session 2>kit_stderr.log"
    +
    +# Wait for startup
    +sleep 3
    +
    +# Capture the current screen
    +tmux capture-pane -t kittest -p
    +
    +# Send input
    +tmux send-keys -t kittest '/command' Enter
    +
    +# Wait for response
    +sleep 2
    +
    +# Capture updated screen
    +tmux capture-pane -t kittest -p
    +
    +# Cleanup
    +tmux kill-session -t kittest
    +

    Testing extensions

    +

    When testing extensions, the pattern is:

    +
      +
    1. Build Kit with your changes
    2. +
    3. Start Kit in tmux with the extension loaded
    4. +
    5. Send slash commands or prompts
    6. +
    7. Capture and verify the screen output
    8. +
    9. Check stderr logs for errors
    10. +
    +
    # Build first
    +go build -o output/kit ./cmd/kit
    +
    +# Start with extension
    +tmux new-session -d -s kittest -x 120 -y 40 \\
    +  "output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log"
    +
    +sleep 3
    +
    +# Verify widget appears in screen
    +tmux capture-pane -t kittest -p | grep "Status"
    +
    +# Send a slash command
    +tmux send-keys -t kittest '/stats' Enter
    +sleep 1
    +tmux capture-pane -t kittest -p
    +
    +# Cleanup
    +tmux kill-session -t kittest
    +

    Tips

    +
      +
    • Use -x and -y to set consistent terminal dimensions
    • +
    • Redirect stderr to a log file (2>kit.log) for debugging
    • +
    • Use --no-session to avoid creating session files during tests
    • +
    • Add sufficient sleep between commands for the TUI to render
    • +
    • Use grep on captured pane output to verify specific content
    • +
    `,headings:[{depth:2,text:"Basic pattern",id:"basic-pattern"},{depth:2,text:"Testing extensions",id:"testing-extensions"},{depth:2,text:"Tips",id:"tips"}],raw:` +# Testing with tmux + +Kit's interactive TUI can be tested non-interactively using tmux. This is useful for automated testing, CI pipelines, and extension development. + +## Basic pattern + +\`\`\`bash +# Start Kit in a detached tmux session +tmux new-session -d -s kittest -x 120 -y 40 \\ + "output/kit -e ext.go --no-session 2>kit_stderr.log" + +# Wait for startup +sleep 3 + +# Capture the current screen +tmux capture-pane -t kittest -p + +# Send input +tmux send-keys -t kittest '/command' Enter + +# Wait for response +sleep 2 + +# Capture updated screen +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +\`\`\` + +## Testing extensions + +When testing extensions, the pattern is: + +1. Build Kit with your changes +2. Start Kit in tmux with the extension loaded +3. Send slash commands or prompts +4. Capture and verify the screen output +5. Check stderr logs for errors + +\`\`\`bash +# Build first +go build -o output/kit ./cmd/kit + +# Start with extension +tmux new-session -d -s kittest -x 120 -y 40 \\ + "output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log" + +sleep 3 + +# Verify widget appears in screen +tmux capture-pane -t kittest -p | grep "Status" + +# Send a slash command +tmux send-keys -t kittest '/stats' Enter +sleep 1 +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +\`\`\` + +## Tips + +- Use \`-x\` and \`-y\` to set consistent terminal dimensions +- Redirect stderr to a log file (\`2>kit.log\`) for debugging +- Use \`--no-session\` to avoid creating session files during tests +- Add sufficient \`sleep\` between commands for the TUI to render +- Use \`grep\` on captured pane output to verify specific content +`};export{s as default}; diff --git a/assets/theme-BIHI7g3E.js b/assets/theme-BIHI7g3E.js new file mode 100644 index 00000000..b480ffe6 --- /dev/null +++ b/assets/theme-BIHI7g3E.js @@ -0,0 +1 @@ +const e={};export{e as default}; diff --git a/cli/commands/index.html b/cli/commands/index.html new file mode 100644 index 00000000..5cc08504 --- /dev/null +++ b/cli/commands/index.html @@ -0,0 +1,77 @@ + + + + + +Commands | Kit + + + + + + + +
    +

    Commands

    +# Commands + +## Authentication + +For OAuth-enabled providers like Anthropic. + +```bash +kit auth login [provider] # Start OAuth flow (e.g., anthropic) +kit auth logout [provider] # Remove credentials for provider +kit auth status # Check authentication status +``` + +## Model database + +Manage the local model database that maps provider names to API configurations. + +```bash +kit models [provider] # List available models (optionally filter by provider) +kit models --all # Show all providers (not just Fantasy-compatible) +kit update-models [source] # Update model database +``` + +The `update-models` command accepts an optional source argument: +- *(none)* — update from [models.dev](https://models.dev) +- A URL — fetch from a custom endpoint +- A file path — load from a local file +- `embedded` — reset to the bundled database + +## Extension management + +```bash +kit extensions list # List discovered extensions +kit extensions validate # Validate extension files +kit extensions init # Generate example extension template +``` + +### Installing extensions from git + +```bash +kit install # Install extensions from git repositories +kit install -l # Install to project-local .kit/git/ directory +kit install -u # Update an already-installed package +kit install --uninstall # Remove an installed package +kit install --all # Install all extensions without prompting +``` + +## Skills + +```bash +kit skill # Install the Kit extensions skill via skills.sh +``` + +## ACP server + +Run Kit as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout. + +```bash +kit acp # Start as ACP agent +kit acp --debug # With debug logging to stderr +```
    + + \ No newline at end of file diff --git a/cli/flags/index.html b/cli/flags/index.html new file mode 100644 index 00000000..01619ec6 --- /dev/null +++ b/cli/flags/index.html @@ -0,0 +1,78 @@ + + + + + +Global Flags | Kit + + + + + + + +
    +

    Global Flags

    +# Global Flags + +All flags can be passed to the root `kit` command. + +## Model and provider + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--model` | `-m` | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) | +| `--provider-api-key` | — | — | API key for the provider | +| `--provider-url` | — | — | Base URL for provider API | +| `--tls-skip-verify` | — | `false` | Skip TLS certificate verification | + +## Session management + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--session` | `-s` | — | Open specific JSONL session file | +| `--continue` | `-c` | `false` | Resume most recent session for current directory | +| `--resume` | `-r` | `false` | Interactive session picker | +| `--no-session` | — | `false` | Ephemeral mode, no persistence | + +## Behavior + +These flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode. + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--quiet` | — | `false` | Suppress all output (non-interactive only) | +| `--json` | — | `false` | Output response as JSON (non-interactive only) | +| `--no-exit` | — | `false` | Enter interactive mode after prompt completes | +| `--max-steps` | — | `0` | Maximum agent steps (0 for unlimited) | +| `--stream` | — | `true` | Enable streaming output | +| `--compact` | — | `false` | Enable compact output mode | +| `--auto-compact` | — | `false` | Auto-compact conversation near context limit | + +## Extensions + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--extension` | `-e` | — | Load additional extension file(s) (repeatable) | +| `--no-extensions` | — | `false` | Disable all extensions | + +## Generation parameters + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--max-tokens` | — | `4096` | Maximum tokens in response | +| `--temperature` | — | `0.7` | Randomness 0.0–1.0 | +| `--top-p` | — | `0.95` | Nucleus sampling 0.0–1.0 | +| `--top-k` | — | `40` | Limit top K tokens | +| `--stop-sequences` | — | — | Custom stop sequences (comma-separated) | +| `--thinking-level` | — | `off` | Extended thinking level: off, minimal, low, medium, high | + +## System + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--config` | — | `~/.kit.yml` | Config file path | +| `--system-prompt` | — | — | System prompt text or file path | +| `--debug` | — | `false` | Enable debug logging |
    + + \ No newline at end of file diff --git a/configuration/index.html b/configuration/index.html new file mode 100644 index 00000000..1559dc4b --- /dev/null +++ b/configuration/index.html @@ -0,0 +1,108 @@ + + + + + +Configuration | Kit + + + + + + + +
    +

    Configuration

    +# Configuration + +Kit looks for configuration in the following locations, in order of priority: + +1. CLI flags +2. Environment variables (with `KIT_` prefix) +3. `./.kit.yml` / `./.kit.yaml` / `./.kit.json` (project-local) +4. `~/.kit.yml` / `~/.kit.yaml` / `~/.kit.json` (global) + +## Basic configuration + +Create `~/.kit.yml`: + +```yaml +model: anthropic/claude-sonnet-4-5-20250929 +max-tokens: 4096 +temperature: 0.7 +stream: true +``` + +## All configuration keys + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `model` | string | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) | +| `max-tokens` | int | `4096` | Maximum tokens in response | +| `temperature` | float | `0.7` | Randomness 0.0–1.0 | +| `top-p` | float | `0.95` | Nucleus sampling 0.0–1.0 | +| `top-k` | int | `40` | Limit top K tokens | +| `stream` | bool | `true` | Enable streaming output | +| `debug` | bool | `false` | Enable debug logging | +| `compact` | bool | `false` | Enable compact output mode | +| `system-prompt` | string | — | System prompt text or file path | +| `max-steps` | int | `0` | Maximum agent steps (0 = unlimited) | +| `thinking-level` | string | `off` | Extended thinking: off, minimal, low, medium, high | +| `provider-api-key` | string | — | API key for the provider | +| `provider-url` | string | — | Base URL for provider API | +| `tls-skip-verify` | bool | `false` | Skip TLS certificate verification | +| `stop-sequences` | list | — | Custom stop sequences | +| `theme` | string | — | UI theme | +| `markdown-theme` | string | — | Markdown rendering theme | + +## Environment variables + +Any configuration key can be set via environment variable with the `KIT_` prefix. Hyphens become underscores: + +```bash +export KIT_MODEL="openai/gpt-4o" +export KIT_MAX_TOKENS="8192" +export KIT_TEMPERATURE="0.5" +``` + +Provider API keys use their own environment variables: + +```bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +``` + +## MCP server configuration + +Add external MCP servers to your `.kit.yml`: + +```yaml +mcpServers: + filesystem: + type: local + command: ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"] + environment: + LOG_LEVEL: "info" + allowedTools: ["read_file", "write_file"] + excludedTools: ["delete_file"] + + search: + type: remote + url: "https://mcp.example.com/search" +``` + +### MCP server fields + +| Field | Type | Description | +|-------|------|-------------| +| `type` | string | `local` (stdio) or `remote` (streamable HTTP) | +| `command` | list | Command and args for local servers | +| `environment` | map | Environment variables for the server process | +| `url` | string | URL for remote servers | +| `allowedTools` | list | Whitelist of tool names to expose | +| `excludedTools` | list | Blacklist of tool names to hide | + +A legacy format with `transport`, `args`, `env`, and `headers` fields is also supported.
    + + \ No newline at end of file diff --git a/development/index.html b/development/index.html new file mode 100644 index 00000000..b2c35a94 --- /dev/null +++ b/development/index.html @@ -0,0 +1,96 @@ + + + + + +Development | Kit + + + + + + + +
    +

    Development

    +# Development + +## Build and test + +```bash +# Build +go build -o output/kit ./cmd/kit + +# Run all tests +go test -race ./... + +# Run a specific test +go test -race ./cmd -run TestScriptExecution + +# Lint +go vet ./... + +# Format +go fmt ./... +``` + +## Project structure + +``` +cmd/kit/ - CLI entry point (main.go) +cmd/ - CLI command implementations (root, auth, models, etc.) +pkg/kit/ - Go SDK for embedding Kit +internal/app/ - Application orchestrator (agent loop, message store, queue) +internal/agent/ - Agent execution and tool dispatch +internal/auth/ - OAuth authentication and credential storage +internal/acpserver/ - ACP (Agent Client Protocol) server +internal/clipboard/ - Cross-platform clipboard operations +internal/compaction/ - Conversation compaction and summarization +internal/config/ - Configuration management +internal/core/ - Built-in tools (bash, read, write, edit, grep, find, ls) +internal/extensions/ - Yaegi extension system +internal/kitsetup/ - Initial setup wizard +internal/message/ - Message content types and structured content blocks +internal/models/ - Provider and model management +internal/session/ - Session persistence (tree-based JSONL) +internal/skills/ - Skill loading and system prompt composition +internal/tools/ - MCP tool integration +internal/ui/ - Bubble Tea TUI components +examples/extensions/ - Example extension files +npm/ - NPM package wrapper for distribution +``` + +## Architecture overview + +Kit is built around a few key architectural patterns: + +### Multi-provider LLM support + +The `llm.Provider` interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API. + +### MCP client-server model + +External tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in `.kit.yml`. + +### Extension system + +Extensions are Go source files interpreted at runtime by Yaegi. The `internal/extensions/` package manages loading, symbol export, and lifecycle dispatch. See the [Extension System](/extensions/overview) docs for details. + +### TUI architecture + +The interactive terminal UI is built with [Bubble Tea v2](https://github.com/charmbracelet/bubbletea), using a parent-child model where `AppModel` manages child components (`InputComponent`, `StreamComponent`, etc.). + +### Decoupling pattern + +`cmd/root.go` contains converter functions (e.g., `widgetProviderForUI()`) that bridge `internal/extensions/` types to `internal/ui/` types. The UI never imports the extensions package directly. + +## Contributing + +Contributions are welcome! Please see the [contribution guide](https://github.com/mark3labs/kit/blob/master/contribute/contribute.md) for guidelines. + +## Community + +- [Discord](https://discord.gg/RqSS2NQVsY) +- [GitHub Issues](https://github.com/mark3labs/kit/issues)
    + + \ No newline at end of file diff --git a/extensions/capabilities/index.html b/extensions/capabilities/index.html new file mode 100644 index 00000000..94ea17bb --- /dev/null +++ b/extensions/capabilities/index.html @@ -0,0 +1,269 @@ + + + + + +Capabilities | Kit + + + + + + + +
    +

    Capabilities

    +# Extension Capabilities + +## Lifecycle events + +Extensions can hook into 18 lifecycle events: + +| Event | Description | +|-------|-------------| +| `OnSessionStart` | Session initialized | +| `OnSessionShutdown` | Session ending | +| `OnBeforeAgentStart` | Before the agent loop begins | +| `OnAgentStart` | Agent loop started | +| `OnAgentEnd` | Agent loop completed | +| `OnToolCall` | Tool call requested by the model | +| `OnToolExecutionStart` | Tool execution beginning | +| `OnToolExecutionEnd` | Tool execution completed | +| `OnToolResult` | Tool result returned | +| `OnInput` | User input received | +| `OnMessageStart` | Assistant message started | +| `OnMessageUpdate` | Streaming text chunk received | +| `OnMessageEnd` | Assistant message completed | +| `OnModelChange` | Model switched | +| `OnContextPrepare` | Context being assembled for the model | +| `OnBeforeFork` | Before forking a conversation branch | +| `OnBeforeSessionSwitch` | Before switching sessions | +| `OnBeforeCompact` | Before conversation compaction | + +### Example + +```go +api.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) { + ctx.PrintInfo("Calling tool: " + event.Name) +}) + +api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) { + ctx.PrintInfo("Agent finished") +}) +``` + +## Tools + +Register custom tools that the LLM can invoke: + +```go +api.RegisterTool(ext.ToolDef{ + Name: "weather", + Description: "Get current weather for a location", + Parameters: map[string]ext.ParameterDef{ + "city": {Type: "string", Description: "City name", Required: true}, + }, + Handler: func(ctx ext.Context, params map[string]any) (string, error) { + city := params["city"].(string) + return "Sunny, 72°F in " + city, nil + }, +}) +``` + +## Commands + +Register slash commands that users can invoke directly: + +```go +api.RegisterCommand(ext.CommandDef{ + Name: "stats", + Description: "Show context statistics", + Handler: func(ctx ext.Context, args string) { + stats := ctx.GetContextStats() + ctx.PrintInfo(fmt.Sprintf("Tokens: %d", stats.TotalTokens)) + }, +}) +``` + +## Widgets + +Add persistent status displays above or below the input area: + +```go +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 1,234"}, +}) + +// Update later +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 2,456"}, +}) + +// Remove +ctx.RemoveWidget("token-count") +``` + +## Headers and footers + +Persistent content above and below the conversation: + +```go +ctx.SetHeader(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Project: my-app | Branch: main"}, +}) + +ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Plan Mode (read-only)"}, +}) +``` + +## Status bar + +Custom status bar entries: + +```go +ctx.SetStatus("mode", "Planning") +ctx.RemoveStatus("mode") +``` + +## Shortcuts + +Global keyboard shortcuts: + +```go +api.RegisterShortcut(ext.ShortcutDef{ + Key: "ctrl+t", + Description: "Toggle plan mode", +}, func(ctx ext.Context) { + // handle shortcut +}) +``` + +## Overlays + +Modal dialogs with markdown content: + +```go +ctx.ShowOverlay(ext.OverlayConfig{ + Title: "Help", + Content: "# Keyboard Shortcuts\n\n- **ctrl+t** — Toggle plan mode\n- **ctrl+s** — Save session", +}) +``` + +## Tool renderers + +Customize how specific tool calls are displayed in the TUI: + +```go +api.RegisterToolRenderer(ext.ToolRenderConfig{ + ToolName: "bash", + Render: func(name, args, result string, isError bool) string { + return "$ " + args + "\n" + result + }, +}) +``` + +## Message renderers + +Custom rendering for assistant messages: + +```go +api.RegisterMessageRenderer(ext.MessageRendererConfig{ + Name: "custom", + Render: func(content string) string { + return ">> " + content + }, +}) +``` + +## Editor interceptors + +Handle key events and wrap the editor's rendering: + +```go +ctx.SetEditor(ext.EditorConfig{ + HandleKey: func(key, text string) ext.EditorKeyAction { + if key == "escape" { + return ext.EditorKeyAction{Handled: true} + } + return ext.EditorKeyAction{Handled: false} + }, +}) +``` + +## Interactive prompts + +Select, confirm, input, and multi-select dialogs: + +```go +// Single select +response := ctx.PromptSelect(ext.PromptSelectConfig{ + Title: "Choose a model", + Options: []string{"claude-sonnet", "gpt-4o", "llama3"}, +}) + +// Confirm +confirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{ + Title: "Delete this file?", +}) + +// Text input +name := ctx.PromptInput(ext.PromptInputConfig{ + Title: "Enter project name", + Placeholder: "my-project", +}) +``` + +## Options + +Register configurable extension options: + +```go +api.RegisterOption(ext.OptionDef{ + Name: "auto-commit", + Description: "Automatically commit on shutdown", + DefaultValue: "false", +}) +``` + +## Subagents + +Spawn in-process child Kit instances: + +```go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Analyze the test files and summarize coverage", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a test analysis expert.", +}) +``` + +## LLM completion + +Make direct model calls without going through the agent loop: + +```go +response := ctx.Complete(ext.CompleteRequest{ + Prompt: "Summarize this in one sentence: " + content, +}) +``` + +## Custom events + +Inter-extension communication: + +```go +// Emit +ctx.EmitCustomEvent("my-extension:data-ready", payload) + +// Listen +api.OnCustomEvent("my-extension:data-ready", func(data any, ctx ext.Context) { + // handle event +}) +```
    + + \ No newline at end of file diff --git a/extensions/examples/index.html b/extensions/examples/index.html new file mode 100644 index 00000000..898f64f2 --- /dev/null +++ b/extensions/examples/index.html @@ -0,0 +1,86 @@ + + + + + +Examples | Kit + + + + + + + +
    +

    Examples

    +# Extension Examples + +Kit ships with a rich set of example extensions in the `examples/extensions/` directory. These serve as both documentation and starting points for your own extensions. + +## UI and display + +| Extension | Description | +|-----------|-------------| +| `minimal.go` | Clean UI with custom footer | +| `branded-output.go` | Branded output rendering | +| `header-footer-demo.go` | Custom headers and footers | +| `widget-status.go` | Persistent status widgets | +| `overlay-demo.go` | Modal dialogs | +| `tool-renderer-demo.go` | Custom tool call rendering | +| `custom-editor-demo.go` | Vim-like modal editor | +| `pirate.go` | Pirate-themed personality | + +## Workflow and automation + +| Extension | Description | +|-----------|-------------| +| `auto-commit.go` | Auto-commit changes on shutdown | +| `plan-mode.go` | Read-only planning mode | +| `permission-gate.go` | Permission gating for destructive tools | +| `confirm-destructive.go` | Confirm destructive operations | +| `protected-paths.go` | Path protection for sensitive files | +| `project-rules.go` | Project-specific rules injection | +| `compact-notify.go` | Notification on conversation compaction | + +## Interactive features + +| Extension | Description | +|-----------|-------------| +| `prompt-demo.go` | Interactive prompts (select/confirm/input) | +| `bookmark.go` | Bookmark conversations | +| `inline-bash.go` | Inline bash execution | +| `interactive-shell.go` | Interactive shell integration | +| `notify.go` | Desktop notifications | + +## Agent and context + +| Extension | Description | +|-----------|-------------| +| `tool-logger.go` | Log all tool calls | +| `context-inject.go` | Inject context into conversations | +| `summarize.go` | Conversation summarization | +| `lsp-diagnostics.go` | LSP diagnostic integration | + +## Multi-agent + +| Extension | Description | +|-----------|-------------| +| `kit-kit.go` | Kit-in-Kit sub-agent spawning | +| `subagent-widget.go` | Multi-agent orchestration with status widget | +| `subagent-test.go` | Subagent testing utilities | + +## Development + +| Extension | Description | +|-----------|-------------| +| `dev-reload.go` | Development live-reload | + +## Subdirectory extensions + +| Directory | Description | +|-----------|-------------| +| `kit-kit-agents/` | Multi-agent orchestration example | +| `kit-telegram/` | Telegram bot integration | +| `status-tools/` | Status bar tool examples |
    + + \ No newline at end of file diff --git a/extensions/loading/index.html b/extensions/loading/index.html new file mode 100644 index 00000000..e295c86c --- /dev/null +++ b/extensions/loading/index.html @@ -0,0 +1,131 @@ + + + + + +Loading Extensions | Kit + + + + + + + +
    +

    Loading Extensions

    +# Loading Extensions + +## Auto-discovery + +Kit automatically discovers and loads extensions from these paths, in order: + +| Path | Scope | +|------|-------| +| `~/.config/kit/extensions/*.go` | Global single files | +| `~/.config/kit/extensions/*/main.go` | Global subdirectory extensions | +| `.kit/extensions/*.go` | Project-local single files | +| `.kit/extensions/*/main.go` | Project-local subdirectory extensions | +| `~/.local/share/kit/git/` | Global git-installed packages | +| `.kit/git/` | Project-local git-installed packages | + +## Explicit loading + +Load extensions by path using the `-e` flag: + +```bash +kit -e path/to/extension.go +``` + +Load multiple extensions: + +```bash +kit -e ext1.go -e ext2.go +``` + +## Disabling extensions + +Disable all auto-discovered extensions: + +```bash +kit --no-extensions +``` + +You can combine `--no-extensions` with `-e` to load only specific extensions: + +```bash +kit --no-extensions -e my-extension.go +``` + +## Installing from git + +Install extensions from git repositories using `kit install`: + +```bash +# Install globally (to ~/.local/share/kit/git/) +kit install https://github.com/user/my-kit-extension.git + +# Install project-locally (to .kit/git/) +kit install -l https://github.com/user/my-kit-extension.git + +# Update an installed package +kit install -u https://github.com/user/my-kit-extension.git + +# Remove +kit install --uninstall my-kit-extension +``` + +## Extension structure + +### Single-file extensions + +A single `.go` file with an `Init` function: + +```go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + // register handlers, tools, commands, etc. +} +``` + +The `//go:build ignore` directive prevents the Go toolchain from trying to compile the file as part of a normal build. + +### Subdirectory extensions + +For more complex extensions, create a directory with a `main.go` entry point: + +``` +.kit/extensions/my-extension/ +├── main.go # Must contain Init(api ext.API) +├── helpers.go # Additional source files +└── config.go +``` + +### Package-level state + +Yaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks: + +```go +package main + +import "kit/ext" + +var callCount int + +func Init(api ext.API) { + api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) { + callCount++ + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{ + Text: fmt.Sprintf("Tools called: %d", callCount), + }, + }) + }) +} +```
    + + \ No newline at end of file diff --git a/extensions/overview/index.html b/extensions/overview/index.html new file mode 100644 index 00000000..bea46e6a --- /dev/null +++ b/extensions/overview/index.html @@ -0,0 +1,86 @@ + + + + + +Extension System | Kit + + + + + + + +
    +

    Extension System

    +# Extension System + +Extensions are Go source files interpreted at runtime via [Yaegi](https://github.com/traefik/yaegi). They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit. + +## Minimal extension + +```go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) { + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Custom Footer"}, + }) + }) +} +``` + +Run it with: + +```bash +kit -e examples/extensions/minimal.go +``` + +## How extensions work + +1. Kit discovers extension files from [auto-discovery paths](/extensions/loading) or explicit `-e` flags +2. Each `.go` file is loaded into a Yaegi interpreter with access to the `kit/ext` package +3. Kit calls the `Init(api ext.API)` function in each extension +4. The extension registers callbacks, tools, commands, and UI components via the `api` and `ctx` objects + +## Key concepts + +### The `API` object + +Passed to `Init()`, the `API` object is used to register lifecycle event handlers and static components: + +- **Lifecycle handlers** — `api.OnSessionStart(...)`, `api.OnToolCall(...)`, etc. +- **Tools** — `api.RegisterTool(ext.ToolDef{...})` +- **Commands** — `api.RegisterCommand(ext.CommandDef{...})` +- **Shortcuts** — `api.RegisterShortcut(ext.ShortcutDef{...}, handler)` +- **Tool renderers** — `api.RegisterToolRenderer(ext.ToolRenderConfig{...})` +- **Message renderers** — `api.RegisterMessageRenderer(ext.MessageRendererConfig{...})` +- **Options** — `api.RegisterOption(ext.OptionDef{...})` + +### The `Context` object + +Passed to event handlers, the `Context` object provides runtime access to Kit's state and UI: + +- **Output** — `ctx.Print(...)`, `ctx.PrintInfo(...)`, `ctx.PrintError(...)` +- **UI components** — `ctx.SetWidget(...)`, `ctx.SetHeader(...)`, `ctx.SetFooter(...)`, `ctx.SetStatus(...)` +- **Editor** — `ctx.SetEditor(...)`, `ctx.ResetEditor()` +- **Prompts** — `ctx.PromptSelect(...)`, `ctx.PromptConfirm(...)`, `ctx.PromptInput(...)` +- **Overlays** — `ctx.ShowOverlay(...)` +- **Messages** — `ctx.SendMessage(...)`, `ctx.GetMessages()` +- **Model** — `ctx.SetModel(...)`, `ctx.GetAvailableModels()` +- **Tools** — `ctx.GetAllTools()`, `ctx.SetActiveTools(...)` +- **Context stats** — `ctx.GetContextStats()` +- **Session data** — `ctx.AppendEntry(...)`, `ctx.GetEntries(...)` +- **Subagents** — `ctx.SpawnSubagent(...)` +- **LLM completion** — `ctx.Complete(...)` +- **Custom events** — `ctx.EmitCustomEvent(...)` +- **App control** — `ctx.Exit()`, `ctx.ReloadExtensions()` + +See [Capabilities](/extensions/capabilities) for full details on each component type.
    + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..b1458d98 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + Kit Documentation + + + + + + + + + +
    + + diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 00000000..3664982f --- /dev/null +++ b/installation/index.html @@ -0,0 +1,69 @@ + + + + + +Installation | Kit + + + + + + + +
    +

    Installation

    +# Installation + +## Using npm (recommended) + +```bash +npm install -g @mark3labs/kit +``` + +## Using Go + +```bash +go install github.com/mark3labs/kit/cmd/kit@latest +``` + +## Building from source + +```bash +git clone https://github.com/mark3labs/kit.git +cd kit +go build -o kit ./cmd/kit +``` + +## Verifying the installation + +After installing, verify Kit is available: + +```bash +kit --help +``` + +## Setting up a provider + +Kit needs at least one LLM provider configured. Set an API key for your preferred provider: + +```bash +# Anthropic (default provider) +export ANTHROPIC_API_KEY="sk-..." + +# OpenAI +export OPENAI_API_KEY="sk-..." + +# Google Gemini +export GOOGLE_API_KEY="..." +``` + +For OAuth-enabled providers like Anthropic, you can also authenticate interactively: + +```bash +kit auth login anthropic +``` + +See [Providers](/providers) for the full list of supported providers and their configuration.
    + + \ No newline at end of file diff --git a/llms-full.txt b/llms-full.txt new file mode 100644 index 00000000..a7313308 --- /dev/null +++ b/llms-full.txt @@ -0,0 +1,1810 @@ +# Kit + +--- + +## JSON Output + +# JSON Output + +Use the `--json` flag to get structured output for scripting and automation: + +```bash +kit "Explain main.go" --json --quiet --no-session +``` + +## Response format + +```json +{ + "response": "Final assistant response text", + "model": "anthropic/claude-haiku-3-5-20241022", + "stop_reason": "end_turn", + "session_id": "a1b2c3d4e5f6", + "usage": { + "input_tokens": 1024, + "output_tokens": 512, + "total_tokens": 1536, + "cache_read_tokens": 0, + "cache_creation_tokens": 0 + }, + "messages": [ + { + "role": "assistant", + "parts": [ + {"type": "text", "data": "..."}, + {"type": "tool_call", "data": {"name": "...", "args": "..."}}, + {"type": "tool_result", "data": {"name": "...", "result": "..."}} + ] + } + ] +} +``` + +## Fields + +### Top-level + +| Field | Type | Description | +|-------|------|-------------| +| `response` | string | The final assistant response text | +| `model` | string | The model that was used | +| `stop_reason` | string | Why the model stopped (e.g., `end_turn`) | +| `session_id` | string | Session identifier (omitted in `--no-session` mode) | +| `usage` | object | Token usage statistics | +| `messages` | array | Full conversation history | + +### Usage + +| Field | Type | Description | +|-------|------|-------------| +| `input_tokens` | int | Tokens sent to the model | +| `output_tokens` | int | Tokens generated by the model | +| `total_tokens` | int | Sum of input and output tokens | +| `cache_read_tokens` | int | Tokens read from prompt cache | +| `cache_creation_tokens` | int | Tokens written to prompt cache | + +### Message parts + +Each message contains a `parts` array with typed entries: + +| Type | Description | +|------|-------------| +| `text` | Assistant text content | +| `tool_call` | Tool invocation with name and args | +| `tool_result` | Tool execution result | +| `reasoning` | Extended thinking content | +| `finish` | End-of-turn marker | + +## Parsing in scripts + +### bash + jq + +```bash +result=$(kit "Count files" --json --quiet --no-session) +response=$(echo "$result" | jq -r '.response') +tokens=$(echo "$result" | jq '.usage.total_tokens') +``` + +### Go SDK + +For Go programs, use the SDK's `PromptResult` method instead of parsing JSON: + +```go +result, err := host.PromptResult(ctx, "Count files") +fmt.Println(result.Response) +fmt.Println(result.Usage.TotalTokens) +``` + +--- + +## Subagents + +# Subagents + +Kit supports multi-agent orchestration through both subprocess spawning and in-process subagents. + +## Subprocess pattern + +Spawn Kit as a subprocess for isolated agent execution: + +```bash +kit "Analyze codebase" \ + --json \ + --no-session \ + --no-extensions \ + --quiet \ + --model anthropic/claude-haiku-3-5-20241022 +``` + +Key flags for subprocess usage: + +| Flag | Purpose | +|------|---------| +| `--quiet` | Stdout only, no TUI | +| `--no-session` | Ephemeral, no persistence | +| `--no-extensions` | Prevent recursive extension loading | +| `--json` | Machine-readable output | +| `--system-prompt` | Custom system prompt (string or file path) | + +Positional arguments are the prompt. `@file` arguments attach file content as context. + +## Built-in spawn_subagent tool + +Kit includes a built-in `spawn_subagent` tool that the LLM can use to delegate tasks to independent child agents: + +``` +spawn_subagent( + task: "Analyze the test files and summarize coverage", + model: "anthropic/claude-haiku-3-5-20241022", // optional + system_prompt: "You are a test analysis expert.", // optional + timeout_seconds: 300 // optional, max 1800 +) +``` + +Subagents run as separate in-process Kit instances with full tool access (except spawning further subagents, to prevent infinite recursion). They can run in parallel. + +## Extension subagents + +Extensions can spawn subagents programmatically: + +```go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Review this code for security issues", + Model: "anthropic/claude-sonnet-4-5-20250929", + SystemPrompt: "You are a security auditor.", +}) +``` + +## Go SDK subagents + +The SDK provides in-process subagent spawning: + +```go +result, err := host.Subagent(ctx, kit.SubagentConfig{ + Task: "Summarize the changes in this PR", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a code reviewer.", + Timeout: 5 * time.Minute, +}) +``` + +--- + +## Testing with tmux + +# Testing with tmux + +Kit's interactive TUI can be tested non-interactively using tmux. This is useful for automated testing, CI pipelines, and extension development. + +## Basic pattern + +```bash +# Start Kit in a detached tmux session +tmux new-session -d -s kittest -x 120 -y 40 \ + "output/kit -e ext.go --no-session 2>kit_stderr.log" + +# Wait for startup +sleep 3 + +# Capture the current screen +tmux capture-pane -t kittest -p + +# Send input +tmux send-keys -t kittest '/command' Enter + +# Wait for response +sleep 2 + +# Capture updated screen +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +``` + +## Testing extensions + +When testing extensions, the pattern is: + +1. Build Kit with your changes +2. Start Kit in tmux with the extension loaded +3. Send slash commands or prompts +4. Capture and verify the screen output +5. Check stderr logs for errors + +```bash +# Build first +go build -o output/kit ./cmd/kit + +# Start with extension +tmux new-session -d -s kittest -x 120 -y 40 \ + "output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log" + +sleep 3 + +# Verify widget appears in screen +tmux capture-pane -t kittest -p | grep "Status" + +# Send a slash command +tmux send-keys -t kittest '/stats' Enter +sleep 1 +tmux capture-pane -t kittest -p + +# Cleanup +tmux kill-session -t kittest +``` + +## Tips + +- Use `-x` and `-y` to set consistent terminal dimensions +- Redirect stderr to a log file (`2>kit.log`) for debugging +- Use `--no-session` to avoid creating session files during tests +- Add sufficient `sleep` between commands for the TUI to render +- Use `grep` on captured pane output to verify specific content + +--- + +## Commands + +# Commands + +## Authentication + +For OAuth-enabled providers like Anthropic. + +```bash +kit auth login [provider] # Start OAuth flow (e.g., anthropic) +kit auth logout [provider] # Remove credentials for provider +kit auth status # Check authentication status +``` + +## Model database + +Manage the local model database that maps provider names to API configurations. + +```bash +kit models [provider] # List available models (optionally filter by provider) +kit models --all # Show all providers (not just Fantasy-compatible) +kit update-models [source] # Update model database +``` + +The `update-models` command accepts an optional source argument: +- *(none)* — update from [models.dev](https://models.dev) +- A URL — fetch from a custom endpoint +- A file path — load from a local file +- `embedded` — reset to the bundled database + +## Extension management + +```bash +kit extensions list # List discovered extensions +kit extensions validate # Validate extension files +kit extensions init # Generate example extension template +``` + +### Installing extensions from git + +```bash +kit install # Install extensions from git repositories +kit install -l # Install to project-local .kit/git/ directory +kit install -u # Update an already-installed package +kit install --uninstall # Remove an installed package +kit install --all # Install all extensions without prompting +``` + +## Skills + +```bash +kit skill # Install the Kit extensions skill via skills.sh +``` + +## ACP server + +Run Kit as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout. + +```bash +kit acp # Start as ACP agent +kit acp --debug # With debug logging to stderr +``` + +--- + +## Global Flags + +# Global Flags + +All flags can be passed to the root `kit` command. + +## Model and provider + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--model` | `-m` | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) | +| `--provider-api-key` | — | — | API key for the provider | +| `--provider-url` | — | — | Base URL for provider API | +| `--tls-skip-verify` | — | `false` | Skip TLS certificate verification | + +## Session management + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--session` | `-s` | — | Open specific JSONL session file | +| `--continue` | `-c` | `false` | Resume most recent session for current directory | +| `--resume` | `-r` | `false` | Interactive session picker | +| `--no-session` | — | `false` | Ephemeral mode, no persistence | + +## Behavior + +These flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode. + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--quiet` | — | `false` | Suppress all output (non-interactive only) | +| `--json` | — | `false` | Output response as JSON (non-interactive only) | +| `--no-exit` | — | `false` | Enter interactive mode after prompt completes | +| `--max-steps` | — | `0` | Maximum agent steps (0 for unlimited) | +| `--stream` | — | `true` | Enable streaming output | +| `--compact` | — | `false` | Enable compact output mode | +| `--auto-compact` | — | `false` | Auto-compact conversation near context limit | + +## Extensions + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--extension` | `-e` | — | Load additional extension file(s) (repeatable) | +| `--no-extensions` | — | `false` | Disable all extensions | + +## Generation parameters + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--max-tokens` | — | `4096` | Maximum tokens in response | +| `--temperature` | — | `0.7` | Randomness 0.0–1.0 | +| `--top-p` | — | `0.95` | Nucleus sampling 0.0–1.0 | +| `--top-k` | — | `40` | Limit top K tokens | +| `--stop-sequences` | — | — | Custom stop sequences (comma-separated) | +| `--thinking-level` | — | `off` | Extended thinking level: off, minimal, low, medium, high | + +## System + +| Flag | Short | Default | Description | +|------|-------|---------|-------------| +| `--config` | — | `~/.kit.yml` | Config file path | +| `--system-prompt` | — | — | System prompt text or file path | +| `--debug` | — | `false` | Enable debug logging | + +--- + +## Configuration + +# Configuration + +Kit looks for configuration in the following locations, in order of priority: + +1. CLI flags +2. Environment variables (with `KIT_` prefix) +3. `./.kit.yml` / `./.kit.yaml` / `./.kit.json` (project-local) +4. `~/.kit.yml` / `~/.kit.yaml` / `~/.kit.json` (global) + +## Basic configuration + +Create `~/.kit.yml`: + +```yaml +model: anthropic/claude-sonnet-4-5-20250929 +max-tokens: 4096 +temperature: 0.7 +stream: true +``` + +## All configuration keys + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| `model` | string | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) | +| `max-tokens` | int | `4096` | Maximum tokens in response | +| `temperature` | float | `0.7` | Randomness 0.0–1.0 | +| `top-p` | float | `0.95` | Nucleus sampling 0.0–1.0 | +| `top-k` | int | `40` | Limit top K tokens | +| `stream` | bool | `true` | Enable streaming output | +| `debug` | bool | `false` | Enable debug logging | +| `compact` | bool | `false` | Enable compact output mode | +| `system-prompt` | string | — | System prompt text or file path | +| `max-steps` | int | `0` | Maximum agent steps (0 = unlimited) | +| `thinking-level` | string | `off` | Extended thinking: off, minimal, low, medium, high | +| `provider-api-key` | string | — | API key for the provider | +| `provider-url` | string | — | Base URL for provider API | +| `tls-skip-verify` | bool | `false` | Skip TLS certificate verification | +| `stop-sequences` | list | — | Custom stop sequences | +| `theme` | string | — | UI theme | +| `markdown-theme` | string | — | Markdown rendering theme | + +## Environment variables + +Any configuration key can be set via environment variable with the `KIT_` prefix. Hyphens become underscores: + +```bash +export KIT_MODEL="openai/gpt-4o" +export KIT_MAX_TOKENS="8192" +export KIT_TEMPERATURE="0.5" +``` + +Provider API keys use their own environment variables: + +```bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +``` + +## MCP server configuration + +Add external MCP servers to your `.kit.yml`: + +```yaml +mcpServers: + filesystem: + type: local + command: ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"] + environment: + LOG_LEVEL: "info" + allowedTools: ["read_file", "write_file"] + excludedTools: ["delete_file"] + + search: + type: remote + url: "https://mcp.example.com/search" +``` + +### MCP server fields + +| Field | Type | Description | +|-------|------|-------------| +| `type` | string | `local` (stdio) or `remote` (streamable HTTP) | +| `command` | list | Command and args for local servers | +| `environment` | map | Environment variables for the server process | +| `url` | string | URL for remote servers | +| `allowedTools` | list | Whitelist of tool names to expose | +| `excludedTools` | list | Blacklist of tool names to hide | + +A legacy format with `transport`, `args`, `env`, and `headers` fields is also supported. + +--- + +## Development + +# Development + +## Build and test + +```bash +# Build +go build -o output/kit ./cmd/kit + +# Run all tests +go test -race ./... + +# Run a specific test +go test -race ./cmd -run TestScriptExecution + +# Lint +go vet ./... + +# Format +go fmt ./... +``` + +## Project structure + +``` +cmd/kit/ - CLI entry point (main.go) +cmd/ - CLI command implementations (root, auth, models, etc.) +pkg/kit/ - Go SDK for embedding Kit +internal/app/ - Application orchestrator (agent loop, message store, queue) +internal/agent/ - Agent execution and tool dispatch +internal/auth/ - OAuth authentication and credential storage +internal/acpserver/ - ACP (Agent Client Protocol) server +internal/clipboard/ - Cross-platform clipboard operations +internal/compaction/ - Conversation compaction and summarization +internal/config/ - Configuration management +internal/core/ - Built-in tools (bash, read, write, edit, grep, find, ls) +internal/extensions/ - Yaegi extension system +internal/kitsetup/ - Initial setup wizard +internal/message/ - Message content types and structured content blocks +internal/models/ - Provider and model management +internal/session/ - Session persistence (tree-based JSONL) +internal/skills/ - Skill loading and system prompt composition +internal/tools/ - MCP tool integration +internal/ui/ - Bubble Tea TUI components +examples/extensions/ - Example extension files +npm/ - NPM package wrapper for distribution +``` + +## Architecture overview + +Kit is built around a few key architectural patterns: + +### Multi-provider LLM support + +The `llm.Provider` interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API. + +### MCP client-server model + +External tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in `.kit.yml`. + +### Extension system + +Extensions are Go source files interpreted at runtime by Yaegi. The `internal/extensions/` package manages loading, symbol export, and lifecycle dispatch. See the [Extension System](/extensions/overview) docs for details. + +### TUI architecture + +The interactive terminal UI is built with [Bubble Tea v2](https://github.com/charmbracelet/bubbletea), using a parent-child model where `AppModel` manages child components (`InputComponent`, `StreamComponent`, etc.). + +### Decoupling pattern + +`cmd/root.go` contains converter functions (e.g., `widgetProviderForUI()`) that bridge `internal/extensions/` types to `internal/ui/` types. The UI never imports the extensions package directly. + +## Contributing + +Contributions are welcome! Please see the [contribution guide](https://github.com/mark3labs/kit/blob/master/contribute/contribute.md) for guidelines. + +## Community + +- [Discord](https://discord.gg/RqSS2NQVsY) +- [GitHub Issues](https://github.com/mark3labs/kit/issues) + +--- + +## Capabilities + +# Extension Capabilities + +## Lifecycle events + +Extensions can hook into 18 lifecycle events: + +| Event | Description | +|-------|-------------| +| `OnSessionStart` | Session initialized | +| `OnSessionShutdown` | Session ending | +| `OnBeforeAgentStart` | Before the agent loop begins | +| `OnAgentStart` | Agent loop started | +| `OnAgentEnd` | Agent loop completed | +| `OnToolCall` | Tool call requested by the model | +| `OnToolExecutionStart` | Tool execution beginning | +| `OnToolExecutionEnd` | Tool execution completed | +| `OnToolResult` | Tool result returned | +| `OnInput` | User input received | +| `OnMessageStart` | Assistant message started | +| `OnMessageUpdate` | Streaming text chunk received | +| `OnMessageEnd` | Assistant message completed | +| `OnModelChange` | Model switched | +| `OnContextPrepare` | Context being assembled for the model | +| `OnBeforeFork` | Before forking a conversation branch | +| `OnBeforeSessionSwitch` | Before switching sessions | +| `OnBeforeCompact` | Before conversation compaction | + +### Example + +```go +api.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) { + ctx.PrintInfo("Calling tool: " + event.Name) +}) + +api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) { + ctx.PrintInfo("Agent finished") +}) +``` + +## Tools + +Register custom tools that the LLM can invoke: + +```go +api.RegisterTool(ext.ToolDef{ + Name: "weather", + Description: "Get current weather for a location", + Parameters: map[string]ext.ParameterDef{ + "city": {Type: "string", Description: "City name", Required: true}, + }, + Handler: func(ctx ext.Context, params map[string]any) (string, error) { + city := params["city"].(string) + return "Sunny, 72°F in " + city, nil + }, +}) +``` + +## Commands + +Register slash commands that users can invoke directly: + +```go +api.RegisterCommand(ext.CommandDef{ + Name: "stats", + Description: "Show context statistics", + Handler: func(ctx ext.Context, args string) { + stats := ctx.GetContextStats() + ctx.PrintInfo(fmt.Sprintf("Tokens: %d", stats.TotalTokens)) + }, +}) +``` + +## Widgets + +Add persistent status displays above or below the input area: + +```go +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 1,234"}, +}) + +// Update later +ctx.SetWidget(ext.WidgetConfig{ + ID: "token-count", + Position: "bottom", + Content: ext.WidgetContent{Text: "Tokens: 2,456"}, +}) + +// Remove +ctx.RemoveWidget("token-count") +``` + +## Headers and footers + +Persistent content above and below the conversation: + +```go +ctx.SetHeader(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Project: my-app | Branch: main"}, +}) + +ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Plan Mode (read-only)"}, +}) +``` + +## Status bar + +Custom status bar entries: + +```go +ctx.SetStatus("mode", "Planning") +ctx.RemoveStatus("mode") +``` + +## Shortcuts + +Global keyboard shortcuts: + +```go +api.RegisterShortcut(ext.ShortcutDef{ + Key: "ctrl+t", + Description: "Toggle plan mode", +}, func(ctx ext.Context) { + // handle shortcut +}) +``` + +## Overlays + +Modal dialogs with markdown content: + +```go +ctx.ShowOverlay(ext.OverlayConfig{ + Title: "Help", + Content: "# Keyboard Shortcuts\n\n- **ctrl+t** — Toggle plan mode\n- **ctrl+s** — Save session", +}) +``` + +## Tool renderers + +Customize how specific tool calls are displayed in the TUI: + +```go +api.RegisterToolRenderer(ext.ToolRenderConfig{ + ToolName: "bash", + Render: func(name, args, result string, isError bool) string { + return "$ " + args + "\n" + result + }, +}) +``` + +## Message renderers + +Custom rendering for assistant messages: + +```go +api.RegisterMessageRenderer(ext.MessageRendererConfig{ + Name: "custom", + Render: func(content string) string { + return ">> " + content + }, +}) +``` + +## Editor interceptors + +Handle key events and wrap the editor's rendering: + +```go +ctx.SetEditor(ext.EditorConfig{ + HandleKey: func(key, text string) ext.EditorKeyAction { + if key == "escape" { + return ext.EditorKeyAction{Handled: true} + } + return ext.EditorKeyAction{Handled: false} + }, +}) +``` + +## Interactive prompts + +Select, confirm, input, and multi-select dialogs: + +```go +// Single select +response := ctx.PromptSelect(ext.PromptSelectConfig{ + Title: "Choose a model", + Options: []string{"claude-sonnet", "gpt-4o", "llama3"}, +}) + +// Confirm +confirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{ + Title: "Delete this file?", +}) + +// Text input +name := ctx.PromptInput(ext.PromptInputConfig{ + Title: "Enter project name", + Placeholder: "my-project", +}) +``` + +## Options + +Register configurable extension options: + +```go +api.RegisterOption(ext.OptionDef{ + Name: "auto-commit", + Description: "Automatically commit on shutdown", + DefaultValue: "false", +}) +``` + +## Subagents + +Spawn in-process child Kit instances: + +```go +result := ctx.SpawnSubagent(ext.SubagentConfig{ + Task: "Analyze the test files and summarize coverage", + Model: "anthropic/claude-haiku-3-5-20241022", + SystemPrompt: "You are a test analysis expert.", +}) +``` + +## LLM completion + +Make direct model calls without going through the agent loop: + +```go +response := ctx.Complete(ext.CompleteRequest{ + Prompt: "Summarize this in one sentence: " + content, +}) +``` + +## Custom events + +Inter-extension communication: + +```go +// Emit +ctx.EmitCustomEvent("my-extension:data-ready", payload) + +// Listen +api.OnCustomEvent("my-extension:data-ready", func(data any, ctx ext.Context) { + // handle event +}) +``` + +--- + +## Examples + +# Extension Examples + +Kit ships with a rich set of example extensions in the `examples/extensions/` directory. These serve as both documentation and starting points for your own extensions. + +## UI and display + +| Extension | Description | +|-----------|-------------| +| `minimal.go` | Clean UI with custom footer | +| `branded-output.go` | Branded output rendering | +| `header-footer-demo.go` | Custom headers and footers | +| `widget-status.go` | Persistent status widgets | +| `overlay-demo.go` | Modal dialogs | +| `tool-renderer-demo.go` | Custom tool call rendering | +| `custom-editor-demo.go` | Vim-like modal editor | +| `pirate.go` | Pirate-themed personality | + +## Workflow and automation + +| Extension | Description | +|-----------|-------------| +| `auto-commit.go` | Auto-commit changes on shutdown | +| `plan-mode.go` | Read-only planning mode | +| `permission-gate.go` | Permission gating for destructive tools | +| `confirm-destructive.go` | Confirm destructive operations | +| `protected-paths.go` | Path protection for sensitive files | +| `project-rules.go` | Project-specific rules injection | +| `compact-notify.go` | Notification on conversation compaction | + +## Interactive features + +| Extension | Description | +|-----------|-------------| +| `prompt-demo.go` | Interactive prompts (select/confirm/input) | +| `bookmark.go` | Bookmark conversations | +| `inline-bash.go` | Inline bash execution | +| `interactive-shell.go` | Interactive shell integration | +| `notify.go` | Desktop notifications | + +## Agent and context + +| Extension | Description | +|-----------|-------------| +| `tool-logger.go` | Log all tool calls | +| `context-inject.go` | Inject context into conversations | +| `summarize.go` | Conversation summarization | +| `lsp-diagnostics.go` | LSP diagnostic integration | + +## Multi-agent + +| Extension | Description | +|-----------|-------------| +| `kit-kit.go` | Kit-in-Kit sub-agent spawning | +| `subagent-widget.go` | Multi-agent orchestration with status widget | +| `subagent-test.go` | Subagent testing utilities | + +## Development + +| Extension | Description | +|-----------|-------------| +| `dev-reload.go` | Development live-reload | + +## Subdirectory extensions + +| Directory | Description | +|-----------|-------------| +| `kit-kit-agents/` | Multi-agent orchestration example | +| `kit-telegram/` | Telegram bot integration | +| `status-tools/` | Status bar tool examples | + +--- + +## Loading Extensions + +# Loading Extensions + +## Auto-discovery + +Kit automatically discovers and loads extensions from these paths, in order: + +| Path | Scope | +|------|-------| +| `~/.config/kit/extensions/*.go` | Global single files | +| `~/.config/kit/extensions/*/main.go` | Global subdirectory extensions | +| `.kit/extensions/*.go` | Project-local single files | +| `.kit/extensions/*/main.go` | Project-local subdirectory extensions | +| `~/.local/share/kit/git/` | Global git-installed packages | +| `.kit/git/` | Project-local git-installed packages | + +## Explicit loading + +Load extensions by path using the `-e` flag: + +```bash +kit -e path/to/extension.go +``` + +Load multiple extensions: + +```bash +kit -e ext1.go -e ext2.go +``` + +## Disabling extensions + +Disable all auto-discovered extensions: + +```bash +kit --no-extensions +``` + +You can combine `--no-extensions` with `-e` to load only specific extensions: + +```bash +kit --no-extensions -e my-extension.go +``` + +## Installing from git + +Install extensions from git repositories using `kit install`: + +```bash +# Install globally (to ~/.local/share/kit/git/) +kit install https://github.com/user/my-kit-extension.git + +# Install project-locally (to .kit/git/) +kit install -l https://github.com/user/my-kit-extension.git + +# Update an installed package +kit install -u https://github.com/user/my-kit-extension.git + +# Remove +kit install --uninstall my-kit-extension +``` + +## Extension structure + +### Single-file extensions + +A single `.go` file with an `Init` function: + +```go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + // register handlers, tools, commands, etc. +} +``` + +The `//go:build ignore` directive prevents the Go toolchain from trying to compile the file as part of a normal build. + +### Subdirectory extensions + +For more complex extensions, create a directory with a `main.go` entry point: + +``` +.kit/extensions/my-extension/ +├── main.go # Must contain Init(api ext.API) +├── helpers.go # Additional source files +└── config.go +``` + +### Package-level state + +Yaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks: + +```go +package main + +import "kit/ext" + +var callCount int + +func Init(api ext.API) { + api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) { + callCount++ + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{ + Text: fmt.Sprintf("Tools called: %d", callCount), + }, + }) + }) +} +``` + +--- + +## Extension System + +# Extension System + +Extensions are Go source files interpreted at runtime via [Yaegi](https://github.com/traefik/yaegi). They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit. + +## Minimal extension + +```go +//go:build ignore + +package main + +import "kit/ext" + +func Init(api ext.API) { + api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) { + ctx.SetFooter(ext.HeaderFooterConfig{ + Content: ext.WidgetContent{Text: "Custom Footer"}, + }) + }) +} +``` + +Run it with: + +```bash +kit -e examples/extensions/minimal.go +``` + +## How extensions work + +1. Kit discovers extension files from [auto-discovery paths](/extensions/loading) or explicit `-e` flags +2. Each `.go` file is loaded into a Yaegi interpreter with access to the `kit/ext` package +3. Kit calls the `Init(api ext.API)` function in each extension +4. The extension registers callbacks, tools, commands, and UI components via the `api` and `ctx` objects + +## Key concepts + +### The `API` object + +Passed to `Init()`, the `API` object is used to register lifecycle event handlers and static components: + +- **Lifecycle handlers** — `api.OnSessionStart(...)`, `api.OnToolCall(...)`, etc. +- **Tools** — `api.RegisterTool(ext.ToolDef{...})` +- **Commands** — `api.RegisterCommand(ext.CommandDef{...})` +- **Shortcuts** — `api.RegisterShortcut(ext.ShortcutDef{...}, handler)` +- **Tool renderers** — `api.RegisterToolRenderer(ext.ToolRenderConfig{...})` +- **Message renderers** — `api.RegisterMessageRenderer(ext.MessageRendererConfig{...})` +- **Options** — `api.RegisterOption(ext.OptionDef{...})` + +### The `Context` object + +Passed to event handlers, the `Context` object provides runtime access to Kit's state and UI: + +- **Output** — `ctx.Print(...)`, `ctx.PrintInfo(...)`, `ctx.PrintError(...)` +- **UI components** — `ctx.SetWidget(...)`, `ctx.SetHeader(...)`, `ctx.SetFooter(...)`, `ctx.SetStatus(...)` +- **Editor** — `ctx.SetEditor(...)`, `ctx.ResetEditor()` +- **Prompts** — `ctx.PromptSelect(...)`, `ctx.PromptConfirm(...)`, `ctx.PromptInput(...)` +- **Overlays** — `ctx.ShowOverlay(...)` +- **Messages** — `ctx.SendMessage(...)`, `ctx.GetMessages()` +- **Model** — `ctx.SetModel(...)`, `ctx.GetAvailableModels()` +- **Tools** — `ctx.GetAllTools()`, `ctx.SetActiveTools(...)` +- **Context stats** — `ctx.GetContextStats()` +- **Session data** — `ctx.AppendEntry(...)`, `ctx.GetEntries(...)` +- **Subagents** — `ctx.SpawnSubagent(...)` +- **LLM completion** — `ctx.Complete(...)` +- **Custom events** — `ctx.EmitCustomEvent(...)` +- **App control** — `ctx.Exit()`, `ctx.ReloadExtensions()` + +See [Capabilities](/extensions/capabilities) for full details on each component type. + +--- + +## Kit + +
    + KIT +
    + +A powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system. + +## Features + +- **Multi-Provider LLM Support** — Anthropic, OpenAI, Google Gemini, Ollama, Azure OpenAI, AWS Bedrock, OpenRouter, and more +- **Built-in Core Tools** — bash, read, write, edit, grep, find, ls, spawn_subagent with no MCP overhead +- **MCP Integration** — Connect external MCP servers for expanded capabilities +- **Extension System** — Write custom tools, commands, widgets, and UI modifications in Go +- **Interactive TUI** — Rich terminal interface powered by Bubble Tea with streaming, syntax highlighting, and custom rendering +- **Session Management** — Tree-based conversation history with branching support +- **Non-Interactive Mode** — Script-friendly positional args with JSON output +- **ACP Server** — Run Kit as an [Agent Client Protocol](https://agentclientprotocol.com) agent over stdio +- **Go SDK** — Embed Kit in your own applications + +## Quick links + +| Resource | Description | +|----------|-------------| +| [Installation](/installation) | Get Kit up and running | +| [Quick Start](/quick-start) | Your first Kit session | +| [Configuration](/configuration) | Customize Kit for your workflow | +| [Extensions](/extensions/overview) | Build custom tools and UI components | +| [Go SDK](/sdk/overview) | Embed Kit in your applications | + +--- + +## Installation + +# Installation + +## Using npm (recommended) + +```bash +npm install -g @mark3labs/kit +``` + +## Using Go + +```bash +go install github.com/mark3labs/kit/cmd/kit@latest +``` + +## Building from source + +```bash +git clone https://github.com/mark3labs/kit.git +cd kit +go build -o kit ./cmd/kit +``` + +## Verifying the installation + +After installing, verify Kit is available: + +```bash +kit --help +``` + +## Setting up a provider + +Kit needs at least one LLM provider configured. Set an API key for your preferred provider: + +```bash +# Anthropic (default provider) +export ANTHROPIC_API_KEY="sk-..." + +# OpenAI +export OPENAI_API_KEY="sk-..." + +# Google Gemini +export GOOGLE_API_KEY="..." +``` + +For OAuth-enabled providers like Anthropic, you can also authenticate interactively: + +```bash +kit auth login anthropic +``` + +See [Providers](/providers) for the full list of supported providers and their configuration. + +--- + +## Providers + +# Providers + +Kit supports a wide range of LLM providers through a unified `provider/model` string format. + +## Supported providers + +| Provider | Prefix | Description | +|----------|--------|-------------| +| **Anthropic** | `anthropic/` | Claude models (native, prompt caching, OAuth) | +| **OpenAI** | `openai/` | GPT models | +| **Google** | `google/` or `gemini/` | Gemini models | +| **Ollama** | `ollama/` | Local models | +| **Azure OpenAI** | `azure/` | Azure-hosted OpenAI | +| **AWS Bedrock** | `bedrock/` | Bedrock models | +| **Google Vertex** | `google-vertex-anthropic/` | Claude on Vertex AI | +| **OpenRouter** | `openrouter/` | Multi-provider router | +| **Vercel AI** | `vercel/` | Vercel AI SDK models | +| **Auto-routed** | any | Any provider from the models.dev database | + +## Model string format + +```bash +provider/model # Standard format +anthropic/claude-sonnet-4-5-20250929 +openai/gpt-4o +ollama/llama3 +google/gemini-2.0-flash-exp +``` + +## Model aliases + +Kit provides aliases for commonly used models: + +```bash +claude-opus-latest → claude-opus-4-20250514 +claude-sonnet-latest → claude-sonnet-4-5-20250929 +claude-4-opus-latest → claude-opus-4-20250514 +claude-4-sonnet-latest → claude-sonnet-4-5-20250929 +claude-3-7-sonnet-latest → claude-3-7-sonnet-20250219 +claude-3-5-sonnet-latest → claude-3-5-sonnet-20241022 +claude-3-5-haiku-latest → claude-3-5-haiku-20241022 +claude-3-opus-latest → claude-3-opus-20240229 +``` + +## Specifying a model + +Via CLI flag: + +```bash +kit --model openai/gpt-4o +kit -m ollama/llama3 +``` + +Via config file: + +```yaml +model: anthropic/claude-sonnet-4-5-20250929 +``` + +Via environment variable: + +```bash +export KIT_MODEL="google/gemini-2.0-flash-exp" +``` + +## Authentication + +### API keys + +Set the appropriate environment variable for your provider: + +```bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +``` + +Or pass it directly: + +```bash +kit --provider-api-key "sk-..." --model openai/gpt-4o +``` + +### OAuth + +For providers that support OAuth (e.g., Anthropic): + +```bash +kit auth login anthropic # Start OAuth flow +kit auth status # Check authentication status +kit auth logout anthropic # Remove credentials +``` + +### Custom provider URL + +For self-hosted or proxy endpoints: + +```bash +kit --provider-url "https://my-proxy.example.com/v1" --model openai/gpt-4o +``` + +## Model database + +Kit ships with a local model database that maps provider names to API configurations. You can manage it with: + +```bash +kit models # List available models +kit models openai # Filter by provider +kit models --all # Show all providers +kit update-models # Update from models.dev +kit update-models embedded # Reset to bundled database +``` + +--- + +## Quick Start + +# Quick Start + +## Basic usage + +Start an interactive session: + +```bash +kit +``` + +Run a one-off prompt: + +```bash +kit "List files in src/" +``` + +Attach files as context using the `@` prefix: + +```bash +kit @main.go @test.go "Review these files" +``` + +Use a specific model: + +```bash +kit --model anthropic/claude-sonnet-4-5-20250929 +``` + +## Non-interactive mode + +Kit can run as a non-interactive tool for scripting and automation. + +Get JSON output: + +```bash +kit "Explain main.go" --json +``` + +Quiet mode (final response only, no TUI): + +```bash +kit "Run tests" --quiet +``` + +Ephemeral mode (no session file created): + +```bash +kit "Quick question" --no-session +``` + +## Resuming sessions + +Continue the most recent session for the current directory: + +```bash +kit --continue +# or +kit -c +``` + +Pick from previous sessions interactively: + +```bash +kit --resume +# or +kit -r +``` + +## ACP server mode + +Kit can run as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server, enabling ACP-compatible clients (such as [OpenCode](https://github.com/sst/opencode)) to drive Kit as a remote coding agent over stdio: + +```bash +# Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout) +kit acp + +# With debug logging to stderr +kit acp --debug +``` + +The ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol. + +--- + +## Callbacks + +# Callbacks + +## PromptWithCallbacks + +The `PromptWithCallbacks` method provides real-time visibility into tool calls and streaming output: + +```go +response, err := host.PromptWithCallbacks( + ctx, + "List files in current directory", + func(name, args string) { + // Called when the model invokes a tool + fmt.Println("Calling tool:", name) + }, + func(name, args, result string, isError bool) { + // Called when a tool returns its result + if isError { + fmt.Println("Tool failed:", name) + } + }, + func(chunk string) { + // Called for each streaming text chunk + fmt.Print(chunk) + }, +) +``` + +### Callback signatures + +| Callback | Signature | When | +|----------|-----------|------| +| `onToolCall` | `func(name, args string)` | Model requests a tool call | +| `onToolResult` | `func(name, args, result string, isError bool)` | Tool execution completes | +| `onStreaming` | `func(chunk string)` | Streaming text chunk received | + +Any callback can be `nil` if you don't need it: + +```go +// Only care about streaming output +response, err := host.PromptWithCallbacks(ctx, "Hello", nil, nil, func(chunk string) { + fmt.Print(chunk) +}) +``` + +## Event-based monitoring + +For more granular control, use the event subscription API: + +```go +// Subscribe returns an unsubscribe function +unsub := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Printf("Tool: %s, Args: %s\n", event.Name, event.Args) +}) +defer unsub() + +unsub2 := host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Printf("Result: %s (error: %v)\n", event.Name, event.IsError) +}) +defer unsub2() + +unsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +defer unsub3() + +unsub4 := host.OnResponse(func(event kit.ResponseEvent) { + fmt.Println("Final response received") +}) +defer unsub4() + +unsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) { + fmt.Println("Turn started") +}) +defer unsub5() + +unsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) { + fmt.Println("Turn ended") +}) +defer unsub6() +``` + +## Hook system + +Hooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations: + +```go +// Intercept tool calls before execution +host.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) { + if name == "bash" { + log.Println("Bash command:", args) + } + return args, nil // return modified args or error to cancel +}) + +// Process results after tool execution +host.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) { + return result, nil +}) + +// Before/after each agent turn +host.OnBeforeTurn(0, func(ctx context.Context) error { + return nil +}) + +host.OnAfterTurn(0, func(ctx context.Context) error { + return nil +}) +``` + +The first argument is a priority (lower = runs first). + +--- + +## SDK Options + +# SDK Options + +Pass an `Options` struct to `kit.New()` to configure the Kit instance. + +## Full options reference + +```go +host, err := kit.New(ctx, &kit.Options{ + // Model + Model: "ollama/llama3", + SystemPrompt: "You are a helpful bot", + ConfigFile: "/path/to/config.yml", + + // Behavior + MaxSteps: 10, + Streaming: true, + Quiet: true, + Debug: true, + + // Session + SessionPath: "./session.jsonl", + SessionDir: "/custom/sessions/", + Continue: true, + NoSession: true, + + // Tools + Tools: []kit.Tool{...}, // Replace default tool set entirely + ExtraTools: []kit.Tool{...}, // Add tools alongside defaults + + // Compaction + AutoCompact: true, + + // Skills + Skills: []string{"/path/to/skill.md"}, + SkillsDir: "/path/to/skills/", +}) +``` + +## Options fields + +| Field | Type | Default | Description | +|-------|------|---------|-------------| +| `Model` | `string` | config default | Model string (provider/model format) | +| `SystemPrompt` | `string` | — | System prompt text or file path | +| `ConfigFile` | `string` | `~/.kit.yml` | Path to config file | +| `MaxSteps` | `int` | `0` | Max agent steps (0 = unlimited) | +| `Streaming` | `bool` | `true` | Enable streaming output | +| `Quiet` | `bool` | `false` | Suppress output | +| `Debug` | `bool` | `false` | Enable debug logging | +| `SessionPath` | `string` | — | Open a specific session file | +| `SessionDir` | `string` | — | Base directory for session discovery | +| `Continue` | `bool` | `false` | Resume most recent session | +| `NoSession` | `bool` | `false` | Ephemeral mode (no persistence) | +| `Tools` | `[]Tool` | — | Replace the entire default tool set | +| `ExtraTools` | `[]Tool` | — | Additional tools alongside core/MCP/extension tools | +| `AutoCompact` | `bool` | `false` | Auto-compact when near context limit | +| `CompactionOptions` | `*CompactionOptions` | — | Configuration for auto-compaction | +| `Skills` | `[]string` | — | Explicit skill files/dirs to load | +| `SkillsDir` | `string` | — | Override default skills directory | + +--- + +## Go SDK + +# Go SDK + +The `pkg/kit` package lets you embed Kit as a library in your Go applications. + +## Installation + +```bash +go get github.com/mark3labs/kit/pkg/kit +``` + +## Basic usage + +```go +package main + +import ( + "context" + "log" + + kit "github.com/mark3labs/kit/pkg/kit" +) + +func main() { + ctx := context.Background() + + // Create Kit instance with default configuration + host, err := kit.New(ctx, nil) + if err != nil { + log.Fatal(err) + } + defer host.Close() + + // Send a prompt + response, err := host.Prompt(ctx, "What is 2+2?") + if err != nil { + log.Fatal(err) + } + + println(response) +} +``` + +## Multi-turn conversations + +Conversations retain context automatically across calls: + +```go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +``` + +## Additional prompt methods + +The SDK provides several prompt variants: + +| Method | Description | +|--------|-------------| +| `Prompt(ctx, message)` | Simple prompt, returns response string | +| `PromptWithCallbacks(ctx, message, ...)` | With tool call and streaming callbacks | +| `PromptWithOptions(ctx, message, opts)` | With per-call options | +| `PromptResult(ctx, message)` | Returns full `TurnResult` with usage stats | +| `PromptResultWithFiles(ctx, message, files)` | Multimodal with file attachments | +| `Steer(ctx, instruction)` | System-level steering without user message | +| `FollowUp(ctx, text)` | Continue without new user input | + +## Event system + +Subscribe to events for monitoring: + +```go +unsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Println("Tool called:", event.Name) +}) +defer unsubscribe() + +host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Println("Tool result:", event.Name) +}) + +host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +``` + +## Model management + +Switch models at runtime: + +```go +host.SetModel(ctx, "openai/gpt-4o") +info := host.GetModelInfo() +models := host.GetAvailableModels() +``` + +## Context and compaction + +Monitor and manage context usage: + +```go +tokens := host.EstimateContextTokens() +stats := host.GetContextStats() + +if host.ShouldCompact() { + result, err := host.Compact(ctx, nil, "") +} +``` + +See [Options](/sdk/options), [Callbacks](/sdk/callbacks), and [Sessions](/sdk/sessions) for more details. + +--- + +## SDK Sessions + +# SDK Sessions + +## Automatic persistence + +By default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls: + +```go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +``` + +## Accessing session info + +```go +// Get the current session file path +path := host.GetSessionPath() + +// Get the session ID +id := host.GetSessionID() + +// Get the current model string +model := host.GetModelString() +``` + +## Configuring sessions via Options + +Session behavior is configured at initialization: + +```go +// Open a specific session file +host, _ := kit.New(ctx, &kit.Options{ + SessionPath: "./my-session.jsonl", +}) + +// Resume the most recent session for the current directory +host, _ := kit.New(ctx, &kit.Options{ + Continue: true, +}) + +// Ephemeral mode (no file persistence) +host, _ := kit.New(ctx, &kit.Options{ + NoSession: true, +}) + +// Custom session directory +host, _ := kit.New(ctx, &kit.Options{ + SessionDir: "/custom/sessions/", +}) +``` + +## Clearing history + +Clear the in-memory conversation history (does not delete the session file): + +```go +host.ClearSession() +``` + +## Tree-based sessions + +Kit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths: + +```go +// Access the tree session manager +ts := host.GetTreeSession() + +// Branch from a specific entry +err := host.Branch("entry-id-123") +``` + +## Listing and managing sessions + +Package-level functions for session discovery: + +```go +// List sessions for a specific directory +sessions := kit.ListSessions("/home/user/project") + +// List all sessions across all directories +all := kit.ListAllSessions() + +// Delete a session file +kit.DeleteSession("/path/to/session.jsonl") +``` + +--- + +## Session Management + +# Session Management + +Kit uses a tree-based session model that supports branching and forking conversations. + +## Session storage + +Sessions are stored as JSONL (JSON Lines) files: + +``` +~/.kit/sessions//_.jsonl +``` + +Path separators in the working directory are replaced with `--`. For example, `/home/user/project` becomes `home--user--project`. + +Each line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths. + +## Resuming sessions + +### Continue most recent + +Resume the most recent session for the current directory: + +```bash +kit --continue +kit -c +``` + +### Interactive picker + +Choose from previous sessions interactively: + +```bash +kit --resume +kit -r +``` + +### Open a specific session + +```bash +kit --session path/to/session.jsonl +kit -s path/to/session.jsonl +``` + +## Ephemeral mode + +Run without creating a session file: + +```bash +kit --no-session +``` + +This is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed. diff --git a/llms.txt b/llms.txt new file mode 100644 index 00000000..d3486f43 --- /dev/null +++ b/llms.txt @@ -0,0 +1,24 @@ +# Kit + +> Documentation site powered by Tome + +- [JSON Output](https://go-kit.dev/advanced/json-output) - Machine-readable JSON output for scripting and automation. +- [Subagents](https://go-kit.dev/advanced/subagents) - Multi-agent orchestration with Kit subagents. +- [Testing with tmux](https://go-kit.dev/advanced/testing) - Test Kit's TUI non-interactively using tmux. +- [Commands](https://go-kit.dev/cli/commands) - Complete reference for all Kit CLI subcommands. +- [Global Flags](https://go-kit.dev/cli/flags) - Complete reference for all Kit CLI flags. +- [Configuration](https://go-kit.dev/configuration) - Configure Kit using config files, environment variables, and CLI flags. +- [Development](https://go-kit.dev/development) - Build, test, and contribute to Kit. +- [Capabilities](https://go-kit.dev/extensions/capabilities) - All extension capabilities — lifecycle events, tools, commands, widgets, and more. +- [Examples](https://go-kit.dev/extensions/examples) - Catalog of example extensions included with Kit. +- [Loading Extensions](https://go-kit.dev/extensions/loading) - How Kit discovers and loads extensions. +- [Extension System](https://go-kit.dev/extensions/overview) - Overview of Kit's Go-based extension system. +- [Kit](https://go-kit.dev/) - Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system. +- [Installation](https://go-kit.dev/installation) - Install Kit using npm, Go, or build from source. +- [Providers](https://go-kit.dev/providers) - Supported LLM providers and model configuration. +- [Quick Start](https://go-kit.dev/quick-start) - Get up and running with Kit in minutes. +- [Callbacks](https://go-kit.dev/sdk/callbacks) - Monitor tool calls and streaming output with the Kit Go SDK. +- [SDK Options](https://go-kit.dev/sdk/options) - Configuration options for the Kit Go SDK. +- [Go SDK](https://go-kit.dev/sdk/overview) - Embed Kit in your Go applications. +- [SDK Sessions](https://go-kit.dev/sdk/sessions) - Session management in the Kit Go SDK. +- [Session Management](https://go-kit.dev/sessions) - How Kit persists and manages conversation sessions. \ No newline at end of file diff --git a/logo.jpg b/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb0183e6020e096b735d4f7362ac91f028a19d9c GIT binary patch literal 337196 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

    n@73=__Iq{f=&&H?*b*Ku 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

    hytD2@S$OxGlEKmrvh&>Bl^c3?=JZ>* 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 z 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⪙D z73gkELh!@TO9{hQsV#=| zLK~*kH<7N(S<`*eSHcV;5TC{iwg+ip7&l8muK~POvaM#2t@%_v8nQ_1dPq$);YCcu ze~&Yc0EHUz%$nCH4Vxv0gJ!robRjuDUYvcc;<^ry6~lxCd95`8k<_~t1a#}GGU}Ts z2xg!rO(iHNLJd690xeiv10^fy+QJS&?j^3lYL18Xzq1A8G@?!VMz<|=yw{B z^i$W2QZs<>i4$g<%c#(@aB1zH+2Rfzro#_jOX-`9=-2VgRLDGWk8v)5olc`Np1d&)Fl(f~n z1!H-QF;FZHspm!;)c*rx#$s_|6C)JK&^^W$QibAl61#!`RxD!?GM}WrP{BKM+b;f| z(i-!Hxy{{-y`iP4>Vmq!mv;oe0J#aii83!?ldwi@j6{>ZWZ+E?!vjDNEUJ9#s5kHt znQ<3-g7CY-Ugkp&YLr~dle(R>O( zyfNh5-#r#a%oc76atf@4$Ol+#?lOSTnM1RsgD|DF_8?(aB3(A8_CgdVzO$IJU^xs* zEFK9z2x#O~EiHzzak@4wLRh_0SOXVoOevBEi7ikz4l@I|DH8u>$$5BzMtT4(iCxX4 z)*R57h2tk;c`;M%2nO(sP&5FjKmj_L%#`wScn>olRDfcYu?;P<8PTg|{K_sc_&*Rf z8K~KXBL5K}X%tw~dT%bW|E|pp1XzNaBXFHIf(`ZuF?5-%Sf0J*@+#70PoTq0Y>Of; z$R3mMjBhB%@@}R7vjGdz)q+k+kyC9!45_&Gya67xIEN+zqlb}b)biRpfXr0dC!L&K z{$c@Z=w)&0@s}Fr1d4bObnAvN=H4T7g+LSy&LLU{FsA12LV4B6y7W%!R8qvL$Y>8c z;V-;8!-vabfEWfj$i+EHNONZ0k5yvvpkn?h`!eQRNzn@7O>*STvUfCli-9pkK+S=u zF6A`FTDwIfc7h$9J~W7Yebn^u>anR&D+BQWJBC^gK_vWus|C>>67SC8j9kO`WRvzS zappdW=JI#-i(N)93l)Qll`63;OcYn-9CSloQ|RaKH(1%`R3L@O8-$8<7bFf%m`6wWC!{-==1)8uOrdZQj5@6+4 za9zf94sh}3|LX60x}&InMd`0Pk<;Dw+vx`d-`+gxdfnEwV9~E0fB2WqBMn|7TdN+i zr3x4@%a)|~k7hzaTiU{<$SU?ctRC4$(Uhmy%b~rBws833iq-FDAjw1`7z+cEji`Cc z&*3}IcC0=c__VZKsp{~>wu%kxlvV?^YyTWbSC1Q5If1I-ld_=M~2)=&$Z zdYmLoEu2AGnRiT|kJb_rco~5qZf@5HizbGl!7ln#{NK6r>dO4!HW3 zDhk!V^1XaXE~uXF*?%t%v<58gP@DppgGHhofIg*IJvemy@60}QN^6Ud=+;0XFz7-Xs7;SZPhTwy2VCxqpATQ}SGKyNx}rl=im2f(9*QD$cEx5D zsGO(y(FguIwXqNymqXNUi>L>J92{KrrpRoA4nazwnKQ;r^I;{bajtU2?NMxZ_V-H18UD_&GaCfameg?UNBr08_F zB=%iHs$nqx)n5^9TcDYn*CS-{EH5SsB*$zvJDMLdTv}P1dcxh)-Jme={5DOFqs4GV zNPqBfWrVxxdOpIY=x&^i#p72XHmw;hRm)jF^R?a@hXT8Dj4chrc!}uB6L)&4-t$^4z8K~^>*4o8TvNL`x?lT~ zvurLuOX}yDvUn(r*{$sQa`EW%_yDcmW{tN5@UXRp#0QVy@G_htbYO?WTgH+^6S{g< z1$LIwOGfkCQ;Bc2+akeMM>@wPlbUNSM(^U_Fw9JPz!O7>Zh329gane>wb|dVQW5p+ z>gv*tLJsl#(B@=-HSo=oR9SSRE^3u=bvkaNX`r^?a|B}2oED>njfvjmoG)!KEP87w z)d(Wva1fSevpknr?9%l)xL)Q1pkd!$SIeJ+eq~*xa;6O)>W@%}fKSBBn~IxzbJ@e_ z;LB2XKnfcgy|?g-x}$ZE?J3T`*A9t1i`4c;+erS)O@AH?he@OswiNg7g}~}5!6}@y z?BQSggKVWGfXOMwTu0r8$4TM%H81W1r_iNx#1c3z5(l4KuxU8-T*Kkz9k--JkOokJ zgk}ibsM9S!a*2zzH3wc(I(nk)7Oz)ra5i$?^CjQlcvcVpgwYXY)W?6$MV-SKQxm~5 z##ECrZ8#i+K&&@mZDx3LZ&p*$8PX}qrp1o;Nz0iKo)!!^Lnc!8QOxnS3DHyyr^>aQ<3_;0yz&|j0#dxEB(AhH7~z)jLAxz^FjSd z%MMU1Oh90AVl*`wF+mY;Ujdv6tOg=k4?*XoUtfvHbvD%050zVxvQ5LhfvpzkJ88Qc zKjtk2CqSBUzSDW}sA{_C=`U`wV~$_9-`8tCzsjb`{rbWe?=S7aA2oCR)DzJkakZ;b zt;}=IefN(?l$%^b-pRw`g}?M}dRO_Nfy>+T)tc~@2DpAP@`Vgs9vcU0@Q4sXU~QDo z;qo#sqlN|N;{o7eAW;jAy^U+q!=~4F{BwlU4D+;^2_2zeBq~C%z{WMo&gazG*V8yd zo!IFzJCF_#89?H+Ka$H9nm`*kaSoE9a9NOr%xj7}_2uNdb%$^E<{yaqdL!h<-hv)w z@HL&HbDMqBAC@pIKK5Vmq=?@MS5gfnm)-^vtw-$YHG-uHuNtzqn^jqaBSHx)ntHXi z5i*qD>)*22<~&#s6ENps(FOKIZK%HK1vw^Gs3GNhXpS;v@`B?O@!1<;{=cPG)>RcR z8}#KrFTweD-5mI&P!t9E^%ob_MWv1}_CEZL5<49)0O{yP-o^5B$hf@IuEr47hCVit z{wX#=$c`ywC@epiv+=n1IS7L(}+(-%ow`;?uMqgU$V%wZ=CtaBVwVC;-9aV&gz13Sco$Hhm;)^-~KddQ~ZMuU|<~+ zrsEwy0&c*(a0uccc zb&Dv(WaR7q4=3{zYD6sT#FeTp;F1j2ZagF?mw12yqDi4GN;w!0L& zEm&0CAL?pUASzutQjmh1GS1Wd@#$NC!Nk^8eWqpFM3zY5clK{PI(PY&*Z z!Qc+f&Nc!k*_2M9#*sh#YxR_#bp&$SdXz2}Pi33#0xjG~xCtWBJ40~F zUQnQ>`E#e1;YVYUH(s2c7*~YJyJlVIh3iju1~@2>GY?l@h-S=vt4%2yaoS~j7G&-n zCWi@;MG+_|NOq?4a0eJ^gMHp)Y(A?o!v(H$$I}6t^*C^gs8{rHLy3&ZNZGWO*U>HW zEM9eBF^EPpqbOJ$*gY#NjtwnL&Z<@%AmS>wt`cX4u+YjfO5d(GU z2{YWO`d61rdf+VUHBbzXSib_Eg~q#(Uz5d3@09T|-!68~NR2-|eM?NPD`MoCuY&JC z_K9CMxVOLN`Z&Fbzzzfx_0Sla5H_N#iLb}#{Ego777e-9W=;cGt9XL}0=-2MUx-=P zeJYCrTv)L2JUf^QqqBN_$#_GY87syX(3pJ%=*kqlq8>t|y?(=2eN$1~gKuQ>Yxy1W z+h_K_>U)?OKH78QTu7el;EU2S#`vWc-=QEE){*`;>v6CI6fxH4MTOt!hAsD=v#CE< z->kv%o+iD8p~Z*3<|nr_BlMgB$VPlzsJ!r%&=!)ChC9$&%C;q&ZyAmNMO7#9poiaG zyKuNN*xz3{csc*6htIwu?K1AJmh1_jw>**Qm*;Q9@2o#@WylU9;(O_V=!$KFcCSyC8 zvUwyN3y_cXufT4;Apc+mZXarp7DUMVHZ|kMLu)@-gLbzVn8>^kn{6;Y84W$8GxZC( z&YvOWyB7kDBLII>WP}U=63{*dwd%vK4vcqov~`90uJnBCS-tyCC;9Y4w@YuFu1zmS zD)#Pw7Sewii`i)3s2du~wxF{TQlG>2>C*4~Zo=BFG1*H7a1Zhdi@Q0%DB??LF@{rY zIH|SnjrlBr7a{Sl=pcm9gz8JQDDeg7DIF z`47jGv0QMx;BAXaB}FSwAIimQc&$~R`TlkV3?mAl_$HGN$4i;RsmF)%#TS`l_fS?(+sdSAUx&wTb{?r>)!}29e!nM?c$~iXhT@S+AOy zUOd^&#+{WF`(mM5EB_Gj{e3bYi()Yj5d?azcfHzsqm2OBjMhjt>Ex&|9QP6vWA^>A z?B%B&`+L>jCPdx|+|NO;i-LaL=3LCn8}li6b}=)wCjWAPgWuog8-Ybm7$Qs}OxZd3R$82caxwCFX%i7~%txZ$=*!YO*21tbov?roxIcyBrP`{0Iz-NzVn z0MGZ@|G~$R0$0@^_bMw_l{cR3wJ6}%cGV`d&o6cphlr2S!X)=?YNALq&Ar8^ z4^@Y&l)!=905m!5@`)++#EXo{&sTc-rZCTA*AVc6GYcqJFmj38;J z-mD`Z2>?w7LdzA?a?z_c^S{d+f!*SaoC}RlArI2cem9vrTZo4a;X$;{ zjkr~WUap20X$a*4nl=tJ)w4+^9c%ZOV~Mu94Se*Qa4WYNV96br_a()DG4O$=?^*#~ zWh63>i>metS@SKt%CFnKH0tS&ssZux$$<+8^GDtDm&?dqzAMg^p4d$QJ^(ozQ7a9U)!3s zff@)a(=?&mChim;MgWoE`G1_VI5bG+_lztmyZZI>^Eor`VEWp)3%Pj~y)TODT=M7s z1DTnm61So88p+1Q#b6~jCi0*9!zjBmLOPHkNMn=nQfRL5wCi?lSdXSTW2XHrhC4IO z1^4rHe*D~t2PDeon}#ESrCU7oZTH!)NBs8g<@+gqQ~4iOyQ-GS*w}CGErX8eZx{Lp zRwm|aC$QI=E>JGDhhcfV6uhOFr--3S37o1Y9H*MpC7#H5ymm^Kp;C>dC&@1Z~w z$vE_OM+YjHtlc8S-Wd;X+LnW@Ll4|_?)vK9OBRn8D*35r+iNp^_VH>CJNxhG8tFGb zI9HZ^<%0$S_|@A(*)LIYL)MzeV%rbG0R<3RVnwX+M44xinac1tFnD8z1 ztPmhUdr$Qa2bpo%%c66C0%L`P!1mvKG|#D_GpBYAScR=Sk*^+DIqZ!|zCep-M|v|#-yKCi_1>0u8f1B5M>JtvBID$ zI?oOMrE)0_yWyCcF7*C8^YkZsQt()nxW6<%`uI?GnxCoHHiZDA6VlwIixZ*&HaNYb z0*>EtC-RtX#q8>4*e>FprI$}+sBk3I!$c*8Ek^D!eJL?Uc&#zj3()K!M?)sKTm?Me zy!S+QnTXN|pw0{LrldF?9G%$aS9N2iXJjn+#?dDTFWDL>fx5>ek)#2FR={OGYYv0S z;AS+?x-=U!aMHEXkvPX2Vv-wKo9$In=<_BV92?L6cCM*|v|&NF8}Q{e3yG1AP4;8i z&msrK6mp+w&eo?7pE9nszOYwSx?1cF{zgRI+J48D1RrYyAt1x%vY6;~*U-u4I&9MQ zbhkyXFbHzDES7bbo2dV$Llm6z1mtJ(}{=GmIJCsJPrafqP9F z@W;*uRF6J$4am>zZTbGsa@O5ERqs%PcZN#(OMqLp@dE)yg}j5RiQ{l*<`oTix39f9p8b>F_k=Cw|lhVn`F; z2RAfeSnOK{KifzIzDFiu@zhHl@1*Zkgbx;r6JRz*Z)*Oy9r}N>%{qrkDB3ayH?D_j zL;z#K^8G(8fHOTOz6y>BThyIzigLXIo3^-P`EoIq!%>dl32H;!2-Mm{WSH29L2<(- z*wvEmXxE-z^?#rva~aNU7xBQxKg&B=&x(l#>@8gIeQR19RAb0a`W6llL=*tBkFb|Y z_mb$`M#!cav=|F|?_eegRRJ&&{Ts%uQgoR!AAuoM;MU~tZItW4y|5{=5}Yo62!$XR zyt|h1?Yd7|ns>5pTkT#3UWF8RvowLK&e56S*$eQ%e7pt24wqtB>XBXGOwIzW!AgXK zEa=d!oAjI_E4|n!0vU*?o1q6G@mwG7EKV-YU8ad^uaVHa?{LcnKq(U|M8{fdH`$C3 zwKZ5#5HxC_^9L(V3pPTzKE>M9PGxJ$YjzvPwr}C82q{RDIkvH#vUAd$52)oC-nzPE zKxgf?{9WB(Rj6EShraSKQ3{R*;pJQuc-8F+2aN}fH*2r~w!HrGv>ri+eKaly@&}n2 zqzUt4YYQ@fKvlT&DQ#wrJt2rBjU(%o6Xb8z9xkhoYNI3PI^Cls{)3)Xi``Kkw%Sd0 zfJa%JZ5qA^h|z6&!adA6oCX;cfdKP(6^f2Ta8g^KZA3Gc$dD&mRtTt#P>fGqdzd_# z6d+gh9&AEvgyMlV$;E``5X;9%U&n3;uBA!O&>Izm69&u+L7O@NPMH;uOMAA?d?Ccv zH_LQF2rPgDuNbkGCX(a;YA;5_SNAR|e16%lMme6PN#E!iQhF;O%6F21={_X)Hvh{R}Es>+hjU;H%ibmF!7&xcQ$AF-c% zTn|c096d7?b@{iQM~g^63EprhfQmv}}iufZszMVN6=1 zs%P58sGa_&@-RKLoWpMhO>aIuRGK#H+cQ!Sse9b^Q1QuHuA(Ve{@}fcd-ftWm8}E8m+)DxZ#n&WWT0U z3stk<1`SEC5>)69hv9Zo9w$7BZ3+YtsKeHPteE1O{oJlzLLXuHh^&r@zyGY;a-rbb zZueiXR(#q!FO?KV=p*Z-*^Y2E9)fYvFvE>g>47F$-9lQ!)z#zs8>*A9yVss)l3k<=Jfk~bG zm7!YQ%Sw+bov1^cxn7G@O_u`e34hv!&stUo&k@31b#2rQ4Q)_>_Q7JYbW0brNgg3Z zT%@b$kwfwWvM(pV$^YEbF7o(nF(oV6<@+jp%3|+(ubbAww~zN3AyAtixE*-c_(Ng) zV4cHx#J-_chdn0u>6{ynFugb2`^u)0o3(KJGQg|z#CyU3J3ww{zEbKpnNz>P&u1Uc zz-hX>=d*mQ=ia{Q-Vfv9)jg&|{{Shw1Y~Jk=5_+sWErC21+u)9B#s}80aDwQ%|&jC z%4>!`OO_vN>xSPlyyT+JnS@mIP`C(rzmWu1Uq9}P>Nxjs<>8R_Ap>gbXNl-0KeVc- z?#WW&*W%kn1m&g=O8lol_>1@Lt(T9&mUrwsdCei~q|>wP*Y9suFDH@hk9Y6QPUdS2 zuDc1+CEXQ!DOb~Sfmzs=Ssp&%3Gg&@d35vqq}A)%8-Jhhqb(|BLs~;|Y@0MOeEmEXeYK&yAjTX*{5#BrCU8M_Vddhoct?r`Ad*8w5055X<6#&m@<6%Eak#>Q4 zgvh+av#2M6qv1RAZyx4bO~!{`tAL4Y8nN`;qNKCjgw~?Ck8&Ray#ATW=C32jkx% zj2gqaKH9SLEL-%B);-?}J@>tD%W{2W{1EH(W@wLN#V5y4PLCGS#urg*r_6rv#Z|=VYh=PPL!iuq(kZc9VLr1!khzV1){s&`Nyg>3tJ5e@WuGDSX?> zZ|XGd10nG7QmvedBbB#2{yt`Wp7dz#=hL8nj>c^DSEJd{g8< z61}6**0qp73^tU+miz}2jOQk?Zq{8r9Rr48I8EUMpRAy%af>bS&Cgw+|K#1tQ-3lE z*>&#WPKn}M!2Z+MUiLUP&DK=8&92_BHsa6>?x_PW%$|<<^49prXyYct{!6zr|80ET z{_*nUZI=_9w2$%jy!-*bP?Ejidh&aMMA*0)u!U&7^vQsAhWs6AYG2a;3b-!Ok?8z- zNAQ{a_s769fIhKl#5MZvZ|jvv(~Hk8#zy9v#Ch+2H)|jIwR|0=^-psS+vE$=Zs9!J zRup@?Ssu?trGFH7bZhu*5$rLjNA24ir~7Yk#E9mp%@G<&Epir!A#wTnecyi|^N4Iu z_^*mvigQgro;#U+ba{9g?wkcb{_#tmMTyAKSLEFOAIP@6>iwYZu0T)yzXPk+zyE&S zdD~qx-+4x75TQ2B_t2{$^=qg6bx9dqEcqoB_sPieYWCCX%U_v)7mC34vUhU41~*9o z@UtGH?&sd|+J>K%BD_Hn%}ux-^J%R$r82hZSlj<7I`?R%|38jTWRzS=Wz6_S3AvVR z80q4E38CC?C4_BmbH5d(HFp&=mE3P3_j@iQF`?u>HqG7K=i2Y{`+sNW>~qd%@5}4? zd^`f5u_m#)++^1jt|fzL=$=n-w&xCfgwTPyrQ{L#whfKv!-e-fwhzR9cCrW*J&<*83yrz*CE8l%53|=2J`Qw}$1;ncrO3 z@hYX9=BSA>jFh3j;_0W+qL{7X5&Zl6hnJZCoTM1)eTBgTv$bLR3c-czgb)6mu=M0V zkYm;;eu=8w9?$Plj{QE}?)Dkmy1+h2y_4}EaB}O7%I?bPYgVao9lZK;DGCh=w&Md_ zA{BE-QB}A8*vH-EQq5xCU9ALQxPq(lVa-hP4-LLq{C}jG$_c+ykBG7_t`0}PQStM* z&G$Oba8ye!Rl0gb$ge4W>mR7K1&sApWAwhLycTfMB@lo8-18EZ+8oraokG7vG)EVtSNZi1ltMh0 zX)x_PBwNb%-?Y8@qqpD3pwi3NO6I!RyAI{!hKm%&qiiUNKoUTtj+hF zhmZe++!S^~X4-H$EEcOhu#WwjWcf={scH>sLHTkSg9@a(!587s1Rlp8l3CpDTD09M z#@b6WyJWkeb0#;V+DgnzWgQf*mB8Qq17#cX`J)nXwIL_rr<3gv{O&oNw>j7t+&+nu z!7Rh;^I(JHSH}R@jV+4`ya#+G+3Vu!P{R}C_8RU@H}8Us_Iw+6G}{CGe)sK5H!H5I zUawp|#fxcMf1<&sf4Pf%+RE2G=bl!M3jUn_xT(<~zWgTuTA%(KczhDoW%dpm-~K0r zD%bwxp=7VX(u@KeJCbdgEZfn4Dn}|Y*w>NfG92((~gO_4p{E6jt5p2s5slb^t%I8S7-KNf%aSb#yFk2-2kMmN zBW*M50kc{KGY@``v`-noP!e{SZi*c4xnQ~fK;y}U-hijN87mQMZur*c{FpZFg&Y4s zUutVC9y8y1b;yMS`Edw>YELE5KrA%pFNfr~P24v~eC4;BRK~Jqzx1l#HPxc;s zDhqDjoy;0j2Qx#z`C)IThEOkk--Le4RpoCgm6QD#SNvfDNw9r1gqf?{6&vcg8Rpp1 zE&_VK_mvGSfM^<4VejJ^q*gDwAeUpy((Zlwa5!lMI5RE=g{4e}bt)I@ z#LprtuS&2n?abAWl=_cqfz5K^z;TBP?l}+hVf7!f#=3zX@*ikknM7Yow%5>C?sKTi zNq6>I{s#hjWn+)zLND+7Hm8g2K<#6o7p(+Qt~?t>NK7NtifPxMy7G9$E7O=19|t=- zuyx@l@Bn?+U3YStHrKChdh;pO;Sz6@eLb_PZhF1;!sQr`p3ZXcDHc&$K80Qb-4Zr- z3Ze)e@f=kgv*lb=+*eL{M?_&V6mXJo+{NJ%`8Annu5J#M?8l)(n5% zJC^O|9$mw>wjm@4+vMDfV)14xQ6Ad{(F&Q*ia4dV^DMqnm8DXj%t?mrxNoFXxoJ(x zxukt3G0Ni9&d2s*$5nG8+8h}V1^wg`b7H;?zLC1I7WwUaNXpE4jy!~(QIBk(@{=DN zCA)fY?JSv^0&Q~laDNED_uS^f_US4%8t_vz8IqKV)AocyU>)9{=K#J>a(a5yL6B<#~zG z6(T1dC0DgDU^MX77HvQ@(>eD;>cucSU#=bx7*`2>0wbQBQBcY+(5uMEHuc?0e^6(J zPHHM0YwoEYGMwJ#$*$pKtUi7@tApk?j_5O&Lim0u@1hhqn@j3pv)r!UF23B;_f*n) zcFwBG1-N~dRTsdXY}NR~(Ht?g2rM8>0_{-tfAGBII(E$=vw2+ERzip=(Vm}%YUH0ijU5B-GRXYfHiaz$Kw_I5$d8KQ^PB-EkOMU0q1F* zLU;Egbvwg4p;lGDfn0Z0di`3{DzRjKT!V~oNe#^A*1t&&z3GoX+P5O-R$HoPGF;p3 z+1z1}0q-^6tA88ohCZeJwP;Z(zr$@>{-K|_tYLUVrQmbgF8-#%41{OZ>qc-8gIu;hQ8Dn|M^mo=E3{w zPvGOm=_|4iMGdYxFPa^M)i2Z-TIFEuM&x~iDw~~a+hZ3yZz3=bqH4gs{{Y`8!T{=eVZ zLuJ0Fo%2W^bRDi7|NJfUZ1<>S+oL3kN50!~nI0&lshJcm(cHlw*^dNLVgEo)t#CE} z1=7bOiRTL2MRT%Pf}zbl^H&AuO+U|>x=UqV_>^;HOtqD8Lsg&ecd`*E?V&mAuewluhYDkpqN6Ah`e;{g$)g+puA z_9N|$4mFq_Gs3Rl1T6{*=DSvR=E_cX{N30PomI`#X$j!!5q$nq%F$As>Tk?SXO<+| zVmQYm(10+bwG|GoF$fSKFN2p$4rD}L0oxKaB$b8w&i7v9u+kC`gS(x!_en4;N2XHM zMz+9Rr0=mT|Lu?J3;u{wFU3BEcQzF%48O&n1=nn^e)r9j!k|-Cl2UAvjruxO?Jd&i zu0PkJHlQOo^n=>iYv2Apd`PP;XydLV* zuI*a_o*;B)U2_ZDKM;*{r<)Al62)PTm6!pP1|F`ZfHXlV%>YlQP3wL+IYRq2uXm_2 z%unU-dQppjZB}W&Jp6!r;_e61y6n%l)oLLxJMbr$JAfv z=~QIyoL-+<(Thvi&T*M9da=Ve|B zCEp@j<)KPNo++Uz4mcuTzI=5|w*>YZ`2Q&m27Mr66hRuM(?1Tl-R_mQexqRm(6vx{ z!W~%9Srun-d5Y(2zh?wtswk)(JOqXA1IIJ^zzZF9lsuZq9mb$0{via+v!lmaQ2UeV z!Bw8#0Tsrs{)Hb(3 zre1H?62%tjNkL_ZzUNKaKwL9g%QzVqA^nT|t%c<*dZvS9dT-|=!3CWR$S=?%$S~s3 z!Nst?iV%CIUzvvqvs#WvI~QBwsZb)K6{=6x7`3vc5Dd~&-{G8S+H)zGM*(j^D@p&v`5{A~$1G(R{O{$xJ=*E};78q=%&t4uA0QB;<(W2in$?Va%J;uz%k z9++W6Y6(cAMl-!+P~=*oHG=IiYTB#|-Mt@Sg{^8?F;e-4c zznd#Rrm8D{E_vwfXo&9LLHXZFeF9bDioMjkk^T^;?r8cIb9f#K^-%GXcjqp?`VBfk z7^=Bhlx{n&*q5~4@M(j^8OSa6mfJ69ld)yR}W4=4*jLzqq$F*6e@Xz)6)-gA=N&THEQh;0f{G5SF)GRhrg;$E6esDx7Jv#w-Z5~d;Nx+r`x(> zu37&%zAW`o&tPTCjQ5?*%g0bAZ}<;Rc14VwclX+Y4@m&Ne7zr0#?5^F!OiMsl{b6h z(`%HZZ<3#1_oY4S{c8aEl@|y-8<+R=KaBF#Udv_sLxnR#uE(;MT!1N0+~Y4n__0y7 z7||g7oU#8vcn-hP4xU z$-7l(pBI7^c@mJT#;GM#S?k=%aYMJlrqnVIkHh2_-B(9`$lpNoQ%wowaO|&KDz+as zn4aR2nUehGSH{RsVwE2wqZQrV$_zyDh%D^Cf|DUv)+8bm3D9kE!r(nd<;)t(p-P>o z2=izd!-MP_V1qR>RQ&{wY@3gsC*s~QiDgwZP|fr2F6>=KN;}KfBea09=-)aw4aZlX z5~B_caFV^Q$9xti--62yjmvRV*q@#*4`3SuX*YYmY4Ggvk7KBz?S)tFSuzbpc4Jvn zwc(tH8u3ml)rojMXYsy#kc)7G06 zQ@t|#^za^lT0WomN`gDxY$3}f^k%5k6=~}C7b_E_DLPzHTAarT20y;p_Xw! z9u0q`rXTg4ArR8S`JyQ5&9y6MQ&r$WGIO;m$v81)JBZCPz9^7g=n*r5IZwddS!`a>QYV)}W}7$TSy)p4)T%ZvAKlHOtALWA|jsy%>^ zKclO$ZYXC5-ofXQ!SECFM3fKE#YK8_9xF1z-|Pe#$63K2+%A1vG}N&+RJ5J4frxsz zP5h@zPh^pe8@*ow2){11xRRIuD`b~Az7U$wg8+ZCyo0BrfA3QgiH8_?86L12YmBB- zDbww8r0YsC-6sQTfyTZ)b`3bw+h3>%Q<~L!>)^ ztL@;oGmC#~f83Mo4;hxWEP?Avd41RO8W~+0t=zJQh49ZTC$}3(_I**~NtpBdQtN&$ z8{am!7kcd;r#|Gxi-lhwc|0yqZ)UtUEXo~or4@cV2-|~D%f&%jUWGV;qSa9X#}yWT6SArgWh+k(|Ose`+pAfTmON;>QMKo z(~RFm`Ak38mX;wg;s!cA|6`iZjqmoo`YEpzBenkgeBh~eLRWQ-p*`cz0fVqbx2oU^ z#?{dNjVPb*iR43YA=6*`P!x97_Ro0sU5w5#Bu^+PIwBO$t-?YwY^*%*9H9s&i~3PN zvL#1P@C`eQkRPRm65EwX-yo&xnOB_^c;CQhJ@UKwim3wmo0s`hKfQhO)hcT#;3QLj zhA16XYj*B6CG29y?7EF=ie;yhJFQmmSK&xeL_0u@s*=zq`V=7ad{RD7)K!HVr>H9) z$}%Kk)lL^K3Cc!QtGub|i_*l@j6Gj|B{P6GnKSkg_p;@lc*h*mYs_&WtV-RCfcgm$9K$N#(dh%OK#`= zF6jJ@n{e%3==(~rD_pQumH1R08^0AW^DF~NeP(n~4d@Ex3KF$nmqFE)&v4xn@#F&h z23eP%8l6Jn=;x(xCZ~S&Ov#$L*#6ZliyJ6;wG5Y!BmRN(sY5^sVMK HY)Y1W>Nr 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.log\"\n\n# Wait for startup\nsleep 3\n\n# Capture the current screen\ntmux capture-pane -t kittest -p\n\n# Send input\ntmux send-keys -t kittest '/command' Enter\n\n# Wait for response\nsleep 2\n\n# Capture updated screen\ntmux capture-pane -t kittest -p\n\n# Cleanup\ntmux kill-session -t kittest\n```\n\n## Testing extensions\n\nWhen testing extensions, the pattern is:\n\n1. Build Kit with your changes\n2. Start Kit in tmux with the extension loaded\n3. Send slash commands or prompts\n4. Capture and verify the screen output\n5. Check stderr logs for errors\n\n```bash\n# Build first\ngo build -o output/kit ./cmd/kit\n\n# Start with extension\ntmux new-session -d -s kittest -x 120 -y 40 \\\n \"output/kit -e examples/extensions/widget-status.go --no-session 2>kit_stderr.log\"\n\nsleep 3\n\n# Verify widget appears in screen\ntmux capture-pane -t kittest -p | grep \"Status\"\n\n# Send a slash command\ntmux send-keys -t kittest '/stats' Enter\nsleep 1\ntmux capture-pane -t kittest -p\n\n# Cleanup\ntmux kill-session -t kittest\n```\n\n## Tips\n\n- Use `-x` and `-y` to set consistent terminal dimensions\n- Redirect stderr to a log file (`2>kit.log`) for debugging\n- Use `--no-session` to avoid creating session files during tests\n- Add sufficient `sleep` between commands for the TUI to render\n- Use `grep` on captured pane output to verify specific content\n" + }, + { + "url": "/cli/commands", + "title": "Commands", + "description": "Complete reference for all Kit CLI subcommands.", + "headings": [ + "Authentication", + "Model database", + "Extension management", + "Installing extensions from git", + "Skills", + "ACP server" + ], + "tags": [], + "content": "\n# Commands\n\n## Authentication\n\nFor OAuth-enabled providers like Anthropic.\n\n```bash\nkit auth login [provider] # Start OAuth flow (e.g., anthropic)\nkit auth logout [provider] # Remove credentials for provider\nkit auth status # Check authentication status\n```\n\n## Model database\n\nManage the local model database that maps provider names to API configurations.\n\n```bash\nkit models [provider] # List available models (optionally filter by provider)\nkit models --all # Show all providers (not just Fantasy-compatible)\nkit update-models [source] # Update model database\n```\n\nThe `update-models` command accepts an optional source argument:\n- *(none)* — update from [models.dev](https://models.dev)\n- A URL — fetch from a custom endpoint\n- A file path — load from a local file\n- `embedded` — reset to the bundled database\n\n## Extension management\n\n```bash\nkit extensions list # List discovered extensions\nkit extensions validate # Validate extension files\nkit extensions init # Generate example extension template\n```\n\n### Installing extensions from git\n\n```bash\nkit install # Install extensions from git repositories\nkit install -l # Install to project-local .kit/git/ directory\nkit install -u # Update an already-installed package\nkit install --uninstall # Remove an installed package\nkit install --all # Install all extensions without prompting\n```\n\n## Skills\n\n```bash\nkit skill # Install the Kit extensions skill via skills.sh\n```\n\n## ACP server\n\nRun Kit as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server. ACP-compatible clients communicate with Kit over JSON-RPC 2.0 on stdin/stdout.\n\n```bash\nkit acp # Start as ACP agent\nkit acp --debug # With debug logging to stderr\n```\n" + }, + { + "url": "/cli/flags", + "title": "Global Flags", + "description": "Complete reference for all Kit CLI flags.", + "headings": [ + "Model and provider", + "Session management", + "Behavior", + "Extensions", + "Generation parameters", + "System" + ], + "tags": [], + "content": "\n# Global Flags\n\nAll flags can be passed to the root `kit` command.\n\n## Model and provider\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--model` | `-m` | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `--provider-api-key` | — | — | API key for the provider |\n| `--provider-url` | — | — | Base URL for provider API |\n| `--tls-skip-verify` | — | `false` | Skip TLS certificate verification |\n\n## Session management\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--session` | `-s` | — | Open specific JSONL session file |\n| `--continue` | `-c` | `false` | Resume most recent session for current directory |\n| `--resume` | `-r` | `false` | Interactive session picker |\n| `--no-session` | — | `false` | Ephemeral mode, no persistence |\n\n## Behavior\n\nThese flags control Kit's behavior. When a prompt is passed as a positional argument, Kit runs in non-interactive mode.\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--quiet` | — | `false` | Suppress all output (non-interactive only) |\n| `--json` | — | `false` | Output response as JSON (non-interactive only) |\n| `--no-exit` | — | `false` | Enter interactive mode after prompt completes |\n| `--max-steps` | — | `0` | Maximum agent steps (0 for unlimited) |\n| `--stream` | — | `true` | Enable streaming output |\n| `--compact` | — | `false` | Enable compact output mode |\n| `--auto-compact` | — | `false` | Auto-compact conversation near context limit |\n\n## Extensions\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--extension` | `-e` | — | Load additional extension file(s) (repeatable) |\n| `--no-extensions` | — | `false` | Disable all extensions |\n\n## Generation parameters\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--max-tokens` | — | `4096` | Maximum tokens in response |\n| `--temperature` | — | `0.7` | Randomness 0.0–1.0 |\n| `--top-p` | — | `0.95` | Nucleus sampling 0.0–1.0 |\n| `--top-k` | — | `40` | Limit top K tokens |\n| `--stop-sequences` | — | — | Custom stop sequences (comma-separated) |\n| `--thinking-level` | — | `off` | Extended thinking level: off, minimal, low, medium, high |\n\n## System\n\n| Flag | Short | Default | Description |\n|------|-------|---------|-------------|\n| `--config` | — | `~/.kit.yml` | Config file path |\n| `--system-prompt` | — | — | System prompt text or file path |\n| `--debug` | — | `false` | Enable debug logging |\n" + }, + { + "url": "/configuration", + "title": "Configuration", + "description": "Configure Kit using config files, environment variables, and CLI flags.", + "headings": [ + "Basic configuration", + "All configuration keys", + "Environment variables", + "MCP server configuration", + "MCP server fields" + ], + "tags": [], + "content": "\n# Configuration\n\nKit looks for configuration in the following locations, in order of priority:\n\n1. CLI flags\n2. Environment variables (with `KIT_` prefix)\n3. `./.kit.yml` / `./.kit.yaml` / `./.kit.json` (project-local)\n4. `~/.kit.yml` / `~/.kit.yaml` / `~/.kit.json` (global)\n\n## Basic configuration\n\nCreate `~/.kit.yml`:\n\n```yaml\nmodel: anthropic/claude-sonnet-4-5-20250929\nmax-tokens: 4096\ntemperature: 0.7\nstream: true\n```\n\n## All configuration keys\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `model` | string | `anthropic/claude-sonnet-4-5-20250929` | Model to use (provider/model format) |\n| `max-tokens` | int | `4096` | Maximum tokens in response |\n| `temperature` | float | `0.7` | Randomness 0.0–1.0 |\n| `top-p` | float | `0.95` | Nucleus sampling 0.0–1.0 |\n| `top-k` | int | `40` | Limit top K tokens |\n| `stream` | bool | `true` | Enable streaming output |\n| `debug` | bool | `false` | Enable debug logging |\n| `compact` | bool | `false` | Enable compact output mode |\n| `system-prompt` | string | — | System prompt text or file path |\n| `max-steps` | int | `0` | Maximum agent steps (0 = unlimited) |\n| `thinking-level` | string | `off` | Extended thinking: off, minimal, low, medium, high |\n| `provider-api-key` | string | — | API key for the provider |\n| `provider-url` | string | — | Base URL for provider API |\n| `tls-skip-verify` | bool | `false` | Skip TLS certificate verification |\n| `stop-sequences` | list | — | Custom stop sequences |\n| `theme` | string | — | UI theme |\n| `markdown-theme` | string | — | Markdown rendering theme |\n\n## Environment variables\n\nAny configuration key can be set via environment variable with the `KIT_` prefix. Hyphens become underscores:\n\n```bash\nexport KIT_MODEL=\"openai/gpt-4o\"\nexport KIT_MAX_TOKENS=\"8192\"\nexport KIT_TEMPERATURE=\"0.5\"\n```\n\nProvider API keys use their own environment variables:\n\n```bash\nexport ANTHROPIC_API_KEY=\"sk-...\"\nexport OPENAI_API_KEY=\"sk-...\"\nexport GOOGLE_API_KEY=\"...\"\n```\n\n## MCP server configuration\n\nAdd external MCP servers to your `.kit.yml`:\n\n```yaml\nmcpServers:\n filesystem:\n type: local\n command: [\"npx\", \"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path/to/allowed\"]\n environment:\n LOG_LEVEL: \"info\"\n allowedTools: [\"read_file\", \"write_file\"]\n excludedTools: [\"delete_file\"]\n\n search:\n type: remote\n url: \"https://mcp.example.com/search\"\n```\n\n### MCP server fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `type` | string | `local` (stdio) or `remote` (streamable HTTP) |\n| `command` | list | Command and args for local servers |\n| `environment` | map | Environment variables for the server process |\n| `url` | string | URL for remote servers |\n| `allowedTools` | list | Whitelist of tool names to expose |\n| `excludedTools` | list | Blacklist of tool names to hide |\n\nA legacy format with `transport`, `args`, `env`, and `headers` fields is also supported.\n" + }, + { + "url": "/development", + "title": "Development", + "description": "Build, test, and contribute to Kit.", + "headings": [ + "Build and test", + "Project structure", + "Architecture overview", + "Multi-provider LLM support", + "MCP client-server model", + "Extension system", + "TUI architecture", + "Decoupling pattern", + "Contributing", + "Community" + ], + "tags": [], + "content": "\n# Development\n\n## Build and test\n\n```bash\n# Build\ngo build -o output/kit ./cmd/kit\n\n# Run all tests\ngo test -race ./...\n\n# Run a specific test\ngo test -race ./cmd -run TestScriptExecution\n\n# Lint\ngo vet ./...\n\n# Format\ngo fmt ./...\n```\n\n## Project structure\n\n```\ncmd/kit/ - CLI entry point (main.go)\ncmd/ - CLI command implementations (root, auth, models, etc.)\npkg/kit/ - Go SDK for embedding Kit\ninternal/app/ - Application orchestrator (agent loop, message store, queue)\ninternal/agent/ - Agent execution and tool dispatch\ninternal/auth/ - OAuth authentication and credential storage\ninternal/acpserver/ - ACP (Agent Client Protocol) server\ninternal/clipboard/ - Cross-platform clipboard operations\ninternal/compaction/ - Conversation compaction and summarization\ninternal/config/ - Configuration management\ninternal/core/ - Built-in tools (bash, read, write, edit, grep, find, ls)\ninternal/extensions/ - Yaegi extension system\ninternal/kitsetup/ - Initial setup wizard\ninternal/message/ - Message content types and structured content blocks\ninternal/models/ - Provider and model management\ninternal/session/ - Session persistence (tree-based JSONL)\ninternal/skills/ - Skill loading and system prompt composition\ninternal/tools/ - MCP tool integration\ninternal/ui/ - Bubble Tea TUI components\nexamples/extensions/ - Example extension files\nnpm/ - NPM package wrapper for distribution\n```\n\n## Architecture overview\n\nKit is built around a few key architectural patterns:\n\n### Multi-provider LLM support\n\nThe `llm.Provider` interface abstracts different LLM providers. Each provider implements message formatting, tool calling, and streaming for its specific API.\n\n### MCP client-server model\n\nExternal tools are integrated via the Model Context Protocol (MCP). Kit acts as an MCP client, connecting to MCP servers configured in `.kit.yml`.\n\n### Extension system\n\nExtensions are Go source files interpreted at runtime by Yaegi. The `internal/extensions/` package manages loading, symbol export, and lifecycle dispatch. See the [Extension System](/extensions/overview) docs for details.\n\n### TUI architecture\n\nThe interactive terminal UI is built with [Bubble Tea v2](https://github.com/charmbracelet/bubbletea), using a parent-child model where `AppModel` manages child components (`InputComponent`, `StreamComponent`, etc.).\n\n### Decoupling pattern\n\n`cmd/root.go` contains converter functions (e.g., `widgetProviderForUI()`) that bridge `internal/extensions/` types to `internal/ui/` types. The UI never imports the extensions package directly.\n\n## Contributing\n\nContributions are welcome! Please see the [contribution guide](https://github.com/mark3labs/kit/blob/master/contribute/contribute.md) for guidelines.\n\n## Community\n\n- [Discord](https://discord.gg/RqSS2NQVsY)\n- [GitHub Issues](https://github.com/mark3labs/kit/issues)\n" + }, + { + "url": "/extensions/capabilities", + "title": "Capabilities", + "description": "All extension capabilities — lifecycle events, tools, commands, widgets, and more.", + "headings": [ + "Lifecycle events", + "Example", + "Tools", + "Commands", + "Widgets", + "Headers and footers", + "Status bar", + "Shortcuts", + "Overlays", + "Tool renderers", + "Message renderers", + "Editor interceptors", + "Interactive prompts", + "Options", + "Subagents", + "LLM completion", + "Custom events" + ], + "tags": [], + "content": "\n# Extension Capabilities\n\n## Lifecycle events\n\nExtensions can hook into 18 lifecycle events:\n\n| Event | Description |\n|-------|-------------|\n| `OnSessionStart` | Session initialized |\n| `OnSessionShutdown` | Session ending |\n| `OnBeforeAgentStart` | Before the agent loop begins |\n| `OnAgentStart` | Agent loop started |\n| `OnAgentEnd` | Agent loop completed |\n| `OnToolCall` | Tool call requested by the model |\n| `OnToolExecutionStart` | Tool execution beginning |\n| `OnToolExecutionEnd` | Tool execution completed |\n| `OnToolResult` | Tool result returned |\n| `OnInput` | User input received |\n| `OnMessageStart` | Assistant message started |\n| `OnMessageUpdate` | Streaming text chunk received |\n| `OnMessageEnd` | Assistant message completed |\n| `OnModelChange` | Model switched |\n| `OnContextPrepare` | Context being assembled for the model |\n| `OnBeforeFork` | Before forking a conversation branch |\n| `OnBeforeSessionSwitch` | Before switching sessions |\n| `OnBeforeCompact` | Before conversation compaction |\n\n### Example\n\n```go\napi.OnToolCall(func(event ext.ToolCallEvent, ctx ext.Context) {\n ctx.PrintInfo(\"Calling tool: \" + event.Name)\n})\n\napi.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) {\n ctx.PrintInfo(\"Agent finished\")\n})\n```\n\n## Tools\n\nRegister custom tools that the LLM can invoke:\n\n```go\napi.RegisterTool(ext.ToolDef{\n Name: \"weather\",\n Description: \"Get current weather for a location\",\n Parameters: map[string]ext.ParameterDef{\n \"city\": {Type: \"string\", Description: \"City name\", Required: true},\n },\n Handler: func(ctx ext.Context, params map[string]any) (string, error) {\n city := params[\"city\"].(string)\n return \"Sunny, 72°F in \" + city, nil\n },\n})\n```\n\n## Commands\n\nRegister slash commands that users can invoke directly:\n\n```go\napi.RegisterCommand(ext.CommandDef{\n Name: \"stats\",\n Description: \"Show context statistics\",\n Handler: func(ctx ext.Context, args string) {\n stats := ctx.GetContextStats()\n ctx.PrintInfo(fmt.Sprintf(\"Tokens: %d\", stats.TotalTokens))\n },\n})\n```\n\n## Widgets\n\nAdd persistent status displays above or below the input area:\n\n```go\nctx.SetWidget(ext.WidgetConfig{\n ID: \"token-count\",\n Position: \"bottom\",\n Content: ext.WidgetContent{Text: \"Tokens: 1,234\"},\n})\n\n// Update later\nctx.SetWidget(ext.WidgetConfig{\n ID: \"token-count\",\n Position: \"bottom\",\n Content: ext.WidgetContent{Text: \"Tokens: 2,456\"},\n})\n\n// Remove\nctx.RemoveWidget(\"token-count\")\n```\n\n## Headers and footers\n\nPersistent content above and below the conversation:\n\n```go\nctx.SetHeader(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{Text: \"Project: my-app | Branch: main\"},\n})\n\nctx.SetFooter(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{Text: \"Plan Mode (read-only)\"},\n})\n```\n\n## Status bar\n\nCustom status bar entries:\n\n```go\nctx.SetStatus(\"mode\", \"Planning\")\nctx.RemoveStatus(\"mode\")\n```\n\n## Shortcuts\n\nGlobal keyboard shortcuts:\n\n```go\napi.RegisterShortcut(ext.ShortcutDef{\n Key: \"ctrl+t\",\n Description: \"Toggle plan mode\",\n}, func(ctx ext.Context) {\n // handle shortcut\n})\n```\n\n## Overlays\n\nModal dialogs with markdown content:\n\n```go\nctx.ShowOverlay(ext.OverlayConfig{\n Title: \"Help\",\n Content: \"# Keyboard Shortcuts\\n\\n- **ctrl+t** — Toggle plan mode\\n- **ctrl+s** — Save session\",\n})\n```\n\n## Tool renderers\n\nCustomize how specific tool calls are displayed in the TUI:\n\n```go\napi.RegisterToolRenderer(ext.ToolRenderConfig{\n ToolName: \"bash\",\n Render: func(name, args, result string, isError bool) string {\n return \"$ \" + args + \"\\n\" + result\n },\n})\n```\n\n## Message renderers\n\nCustom rendering for assistant messages:\n\n```go\napi.RegisterMessageRenderer(ext.MessageRendererConfig{\n Name: \"custom\",\n Render: func(content string) string {\n return \">> \" + content\n },\n})\n```\n\n## Editor interceptors\n\nHandle key events and wrap the editor's rendering:\n\n```go\nctx.SetEditor(ext.EditorConfig{\n HandleKey: func(key, text string) ext.EditorKeyAction {\n if key == \"escape\" {\n return ext.EditorKeyAction{Handled: true}\n }\n return ext.EditorKeyAction{Handled: false}\n },\n})\n```\n\n## Interactive prompts\n\nSelect, confirm, input, and multi-select dialogs:\n\n```go\n// Single select\nresponse := ctx.PromptSelect(ext.PromptSelectConfig{\n Title: \"Choose a model\",\n Options: []string{\"claude-sonnet\", \"gpt-4o\", \"llama3\"},\n})\n\n// Confirm\nconfirmed := ctx.PromptConfirm(ext.PromptConfirmConfig{\n Title: \"Delete this file?\",\n})\n\n// Text input\nname := ctx.PromptInput(ext.PromptInputConfig{\n Title: \"Enter project name\",\n Placeholder: \"my-project\",\n})\n```\n\n## Options\n\nRegister configurable extension options:\n\n```go\napi.RegisterOption(ext.OptionDef{\n Name: \"auto-commit\",\n Description: \"Automatically commit on shutdown\",\n DefaultValue: \"false\",\n})\n```\n\n## Subagents\n\nSpawn in-process child Kit instances:\n\n```go\nresult := ctx.SpawnSubagent(ext.SubagentConfig{\n Task: \"Analyze the test files and summarize coverage\",\n Model: \"anthropic/claude-haiku-3-5-20241022\",\n SystemPrompt: \"You are a test analysis expert.\",\n})\n```\n\n## LLM completion\n\nMake direct model calls without going through the agent loop:\n\n```go\nresponse := ctx.Complete(ext.CompleteRequest{\n Prompt: \"Summarize this in one sentence: \" + content,\n})\n```\n\n## Custom events\n\nInter-extension communication:\n\n```go\n// Emit\nctx.EmitCustomEvent(\"my-extension:data-ready\", payload)\n\n// Listen\napi.OnCustomEvent(\"my-extension:data-ready\", func(data any, ctx ext.Context) {\n // handle event\n})\n```\n" + }, + { + "url": "/extensions/examples", + "title": "Examples", + "description": "Catalog of example extensions included with Kit.", + "headings": [ + "UI and display", + "Workflow and automation", + "Interactive features", + "Agent and context", + "Multi-agent", + "Development", + "Subdirectory extensions" + ], + "tags": [], + "content": "\n# Extension Examples\n\nKit ships with a rich set of example extensions in the `examples/extensions/` directory. These serve as both documentation and starting points for your own extensions.\n\n## UI and display\n\n| Extension | Description |\n|-----------|-------------|\n| `minimal.go` | Clean UI with custom footer |\n| `branded-output.go` | Branded output rendering |\n| `header-footer-demo.go` | Custom headers and footers |\n| `widget-status.go` | Persistent status widgets |\n| `overlay-demo.go` | Modal dialogs |\n| `tool-renderer-demo.go` | Custom tool call rendering |\n| `custom-editor-demo.go` | Vim-like modal editor |\n| `pirate.go` | Pirate-themed personality |\n\n## Workflow and automation\n\n| Extension | Description |\n|-----------|-------------|\n| `auto-commit.go` | Auto-commit changes on shutdown |\n| `plan-mode.go` | Read-only planning mode |\n| `permission-gate.go` | Permission gating for destructive tools |\n| `confirm-destructive.go` | Confirm destructive operations |\n| `protected-paths.go` | Path protection for sensitive files |\n| `project-rules.go` | Project-specific rules injection |\n| `compact-notify.go` | Notification on conversation compaction |\n\n## Interactive features\n\n| Extension | Description |\n|-----------|-------------|\n| `prompt-demo.go` | Interactive prompts (select/confirm/input) |\n| `bookmark.go` | Bookmark conversations |\n| `inline-bash.go` | Inline bash execution |\n| `interactive-shell.go` | Interactive shell integration |\n| `notify.go` | Desktop notifications |\n\n## Agent and context\n\n| Extension | Description |\n|-----------|-------------|\n| `tool-logger.go` | Log all tool calls |\n| `context-inject.go` | Inject context into conversations |\n| `summarize.go` | Conversation summarization |\n| `lsp-diagnostics.go` | LSP diagnostic integration |\n\n## Multi-agent\n\n| Extension | Description |\n|-----------|-------------|\n| `kit-kit.go` | Kit-in-Kit sub-agent spawning |\n| `subagent-widget.go` | Multi-agent orchestration with status widget |\n| `subagent-test.go` | Subagent testing utilities |\n\n## Development\n\n| Extension | Description |\n|-----------|-------------|\n| `dev-reload.go` | Development live-reload |\n\n## Subdirectory extensions\n\n| Directory | Description |\n|-----------|-------------|\n| `kit-kit-agents/` | Multi-agent orchestration example |\n| `kit-telegram/` | Telegram bot integration |\n| `status-tools/` | Status bar tool examples |\n" + }, + { + "url": "/extensions/loading", + "title": "Loading Extensions", + "description": "How Kit discovers and loads extensions.", + "headings": [ + "Auto-discovery", + "Explicit loading", + "Disabling extensions", + "Installing from git", + "Extension structure", + "Single-file extensions", + "Subdirectory extensions", + "Package-level state" + ], + "tags": [], + "content": "\n# Loading Extensions\n\n## Auto-discovery\n\nKit automatically discovers and loads extensions from these paths, in order:\n\n| Path | Scope |\n|------|-------|\n| `~/.config/kit/extensions/*.go` | Global single files |\n| `~/.config/kit/extensions/*/main.go` | Global subdirectory extensions |\n| `.kit/extensions/*.go` | Project-local single files |\n| `.kit/extensions/*/main.go` | Project-local subdirectory extensions |\n| `~/.local/share/kit/git/` | Global git-installed packages |\n| `.kit/git/` | Project-local git-installed packages |\n\n## Explicit loading\n\nLoad extensions by path using the `-e` flag:\n\n```bash\nkit -e path/to/extension.go\n```\n\nLoad multiple extensions:\n\n```bash\nkit -e ext1.go -e ext2.go\n```\n\n## Disabling extensions\n\nDisable all auto-discovered extensions:\n\n```bash\nkit --no-extensions\n```\n\nYou can combine `--no-extensions` with `-e` to load only specific extensions:\n\n```bash\nkit --no-extensions -e my-extension.go\n```\n\n## Installing from git\n\nInstall extensions from git repositories using `kit install`:\n\n```bash\n# Install globally (to ~/.local/share/kit/git/)\nkit install https://github.com/user/my-kit-extension.git\n\n# Install project-locally (to .kit/git/)\nkit install -l https://github.com/user/my-kit-extension.git\n\n# Update an installed package\nkit install -u https://github.com/user/my-kit-extension.git\n\n# Remove\nkit install --uninstall my-kit-extension\n```\n\n## Extension structure\n\n### Single-file extensions\n\nA single `.go` file with an `Init` function:\n\n```go\n//go:build ignore\n\npackage main\n\nimport \"kit/ext\"\n\nfunc Init(api ext.API) {\n // register handlers, tools, commands, etc.\n}\n```\n\nThe `//go:build ignore` directive prevents the Go toolchain from trying to compile the file as part of a normal build.\n\n### Subdirectory extensions\n\nFor more complex extensions, create a directory with a `main.go` entry point:\n\n```\n.kit/extensions/my-extension/\n├── main.go # Must contain Init(api ext.API)\n├── helpers.go # Additional source files\n└── config.go\n```\n\n### Package-level state\n\nYaegi supports package-level variables captured in closures. This is the standard way to maintain state across event callbacks:\n\n```go\npackage main\n\nimport \"kit/ext\"\n\nvar callCount int\n\nfunc Init(api ext.API) {\n api.OnToolCall(func(_ ext.ToolCallEvent, ctx ext.Context) {\n callCount++\n ctx.SetFooter(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{\n Text: fmt.Sprintf(\"Tools called: %d\", callCount),\n },\n })\n })\n}\n```\n" + }, + { + "url": "/extensions/overview", + "title": "Extension System", + "description": "Overview of Kit's Go-based extension system.", + "headings": [ + "Minimal extension", + "How extensions work", + "Key concepts", + "The API object", + "The Context object" + ], + "tags": [], + "content": "\n# Extension System\n\nExtensions are Go source files interpreted at runtime via [Yaegi](https://github.com/traefik/yaegi). They can add custom tools, slash commands, widgets, keyboard shortcuts, and intercept lifecycle events — all without recompiling Kit.\n\n## Minimal extension\n\n```go\n//go:build ignore\n\npackage main\n\nimport \"kit/ext\"\n\nfunc Init(api ext.API) {\n api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {\n ctx.SetFooter(ext.HeaderFooterConfig{\n Content: ext.WidgetContent{Text: \"Custom Footer\"},\n })\n })\n}\n```\n\nRun it with:\n\n```bash\nkit -e examples/extensions/minimal.go\n```\n\n## How extensions work\n\n1. Kit discovers extension files from [auto-discovery paths](/extensions/loading) or explicit `-e` flags\n2. Each `.go` file is loaded into a Yaegi interpreter with access to the `kit/ext` package\n3. Kit calls the `Init(api ext.API)` function in each extension\n4. The extension registers callbacks, tools, commands, and UI components via the `api` and `ctx` objects\n\n## Key concepts\n\n### The `API` object\n\nPassed to `Init()`, the `API` object is used to register lifecycle event handlers and static components:\n\n- **Lifecycle handlers** — `api.OnSessionStart(...)`, `api.OnToolCall(...)`, etc.\n- **Tools** — `api.RegisterTool(ext.ToolDef{...})`\n- **Commands** — `api.RegisterCommand(ext.CommandDef{...})`\n- **Shortcuts** — `api.RegisterShortcut(ext.ShortcutDef{...}, handler)`\n- **Tool renderers** — `api.RegisterToolRenderer(ext.ToolRenderConfig{...})`\n- **Message renderers** — `api.RegisterMessageRenderer(ext.MessageRendererConfig{...})`\n- **Options** — `api.RegisterOption(ext.OptionDef{...})`\n\n### The `Context` object\n\nPassed to event handlers, the `Context` object provides runtime access to Kit's state and UI:\n\n- **Output** — `ctx.Print(...)`, `ctx.PrintInfo(...)`, `ctx.PrintError(...)`\n- **UI components** — `ctx.SetWidget(...)`, `ctx.SetHeader(...)`, `ctx.SetFooter(...)`, `ctx.SetStatus(...)`\n- **Editor** — `ctx.SetEditor(...)`, `ctx.ResetEditor()`\n- **Prompts** — `ctx.PromptSelect(...)`, `ctx.PromptConfirm(...)`, `ctx.PromptInput(...)`\n- **Overlays** — `ctx.ShowOverlay(...)`\n- **Messages** — `ctx.SendMessage(...)`, `ctx.GetMessages()`\n- **Model** — `ctx.SetModel(...)`, `ctx.GetAvailableModels()`\n- **Tools** — `ctx.GetAllTools()`, `ctx.SetActiveTools(...)`\n- **Context stats** — `ctx.GetContextStats()`\n- **Session data** — `ctx.AppendEntry(...)`, `ctx.GetEntries(...)`\n- **Subagents** — `ctx.SpawnSubagent(...)`\n- **LLM completion** — `ctx.Complete(...)`\n- **Custom events** — `ctx.EmitCustomEvent(...)`\n- **App control** — `ctx.Exit()`, `ctx.ReloadExtensions()`\n\nSee [Capabilities](/extensions/capabilities) for full details on each component type.\n" + }, + { + "url": "/", + "title": "Kit", + "description": "Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.", + "headings": [ + "Features", + "Quick links" + ], + "tags": [], + "content": "\n

    \n\nA powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.\n\n## Features\n\n- **Multi-Provider LLM Support** — Anthropic, OpenAI, Google Gemini, Ollama, Azure OpenAI, AWS Bedrock, OpenRouter, and more\n- **Built-in Core Tools** — bash, read, write, edit, grep, find, ls, spawn_subagent with no MCP overhead\n- **MCP Integration** — Connect external MCP servers for expanded capabilities\n- **Extension System** — Write custom tools, commands, widgets, and UI modifications in Go\n- **Interactive TUI** — Rich terminal interface powered by Bubble Tea with streaming, syntax highlighting, and custom rendering\n- **Session Management** — Tree-based conversation history with branching support\n- **Non-Interactive Mode** — Script-friendly positional args with JSON output\n- **ACP Server** — Run Kit as an [Agent Client Protocol](https://agentclientprotocol.com) agent over stdio\n- **Go SDK** — Embed Kit in your own applications\n\n## Quick links\n\n| Resource | Description |\n|----------|-------------|\n| [Installation](/installation) | Get Kit up and running |\n| [Quick Start](/quick-start) | Your first Kit session |\n| [Configuration](/configuration) | Customize Kit for your workflow |\n| [Extensions](/extensions/overview) | Build custom tools and UI components |\n| [Go SDK](/sdk/overview) | Embed Kit in your applications |\n" + }, + { + "url": "/installation", + "title": "Installation", + "description": "Install Kit using npm, Go, or build from source.", + "headings": [ + "Using npm (recommended)", + "Using Go", + "Building from source", + "Verifying the installation", + "Setting up a provider" + ], + "tags": [], + "content": "\n# Installation\n\n## Using npm (recommended)\n\n```bash\nnpm install -g @mark3labs/kit\n```\n\n## Using Go\n\n```bash\ngo install github.com/mark3labs/kit/cmd/kit@latest\n```\n\n## Building from source\n\n```bash\ngit clone https://github.com/mark3labs/kit.git\ncd kit\ngo build -o kit ./cmd/kit\n```\n\n## Verifying the installation\n\nAfter installing, verify Kit is available:\n\n```bash\nkit --help\n```\n\n## Setting up a provider\n\nKit needs at least one LLM provider configured. Set an API key for your preferred provider:\n\n```bash\n# Anthropic (default provider)\nexport ANTHROPIC_API_KEY=\"sk-...\"\n\n# OpenAI\nexport OPENAI_API_KEY=\"sk-...\"\n\n# Google Gemini\nexport GOOGLE_API_KEY=\"...\"\n```\n\nFor OAuth-enabled providers like Anthropic, you can also authenticate interactively:\n\n```bash\nkit auth login anthropic\n```\n\nSee [Providers](/providers) for the full list of supported providers and their configuration.\n" + }, + { + "url": "/providers", + "title": "Providers", + "description": "Supported LLM providers and model configuration.", + "headings": [ + "Supported providers", + "Model string format", + "Model aliases", + "Specifying a model", + "Authentication", + "API keys", + "OAuth", + "Custom provider URL", + "Model database" + ], + "tags": [], + "content": "\n# Providers\n\nKit supports a wide range of LLM providers through a unified `provider/model` string format.\n\n## Supported providers\n\n| Provider | Prefix | Description |\n|----------|--------|-------------|\n| **Anthropic** | `anthropic/` | Claude models (native, prompt caching, OAuth) |\n| **OpenAI** | `openai/` | GPT models |\n| **Google** | `google/` or `gemini/` | Gemini models |\n| **Ollama** | `ollama/` | Local models |\n| **Azure OpenAI** | `azure/` | Azure-hosted OpenAI |\n| **AWS Bedrock** | `bedrock/` | Bedrock models |\n| **Google Vertex** | `google-vertex-anthropic/` | Claude on Vertex AI |\n| **OpenRouter** | `openrouter/` | Multi-provider router |\n| **Vercel AI** | `vercel/` | Vercel AI SDK models |\n| **Auto-routed** | any | Any provider from the models.dev database |\n\n## Model string format\n\n```bash\nprovider/model # Standard format\nanthropic/claude-sonnet-4-5-20250929\nopenai/gpt-4o\nollama/llama3\ngoogle/gemini-2.0-flash-exp\n```\n\n## Model aliases\n\nKit provides aliases for commonly used models:\n\n```bash\nclaude-opus-latest → claude-opus-4-20250514\nclaude-sonnet-latest → claude-sonnet-4-5-20250929\nclaude-4-opus-latest → claude-opus-4-20250514\nclaude-4-sonnet-latest → claude-sonnet-4-5-20250929\nclaude-3-7-sonnet-latest → claude-3-7-sonnet-20250219\nclaude-3-5-sonnet-latest → claude-3-5-sonnet-20241022\nclaude-3-5-haiku-latest → claude-3-5-haiku-20241022\nclaude-3-opus-latest → claude-3-opus-20240229\n```\n\n## Specifying a model\n\nVia CLI flag:\n\n```bash\nkit --model openai/gpt-4o\nkit -m ollama/llama3\n```\n\nVia config file:\n\n```yaml\nmodel: anthropic/claude-sonnet-4-5-20250929\n```\n\nVia environment variable:\n\n```bash\nexport KIT_MODEL=\"google/gemini-2.0-flash-exp\"\n```\n\n## Authentication\n\n### API keys\n\nSet the appropriate environment variable for your provider:\n\n```bash\nexport ANTHROPIC_API_KEY=\"sk-...\"\nexport OPENAI_API_KEY=\"sk-...\"\nexport GOOGLE_API_KEY=\"...\"\n```\n\nOr pass it directly:\n\n```bash\nkit --provider-api-key \"sk-...\" --model openai/gpt-4o\n```\n\n### OAuth\n\nFor providers that support OAuth (e.g., Anthropic):\n\n```bash\nkit auth login anthropic # Start OAuth flow\nkit auth status # Check authentication status\nkit auth logout anthropic # Remove credentials\n```\n\n### Custom provider URL\n\nFor self-hosted or proxy endpoints:\n\n```bash\nkit --provider-url \"https://my-proxy.example.com/v1\" --model openai/gpt-4o\n```\n\n## Model database\n\nKit ships with a local model database that maps provider names to API configurations. You can manage it with:\n\n```bash\nkit models # List available models\nkit models openai # Filter by provider\nkit models --all # Show all providers\nkit update-models # Update from models.dev\nkit update-models embedded # Reset to bundled database\n```\n" + }, + { + "url": "/quick-start", + "title": "Quick Start", + "description": "Get up and running with Kit in minutes.", + "headings": [ + "Basic usage", + "Non-interactive mode", + "Resuming sessions", + "ACP server mode" + ], + "tags": [], + "content": "\n# Quick Start\n\n## Basic usage\n\nStart an interactive session:\n\n```bash\nkit\n```\n\nRun a one-off prompt:\n\n```bash\nkit \"List files in src/\"\n```\n\nAttach files as context using the `@` prefix:\n\n```bash\nkit @main.go @test.go \"Review these files\"\n```\n\nUse a specific model:\n\n```bash\nkit --model anthropic/claude-sonnet-4-5-20250929\n```\n\n## Non-interactive mode\n\nKit can run as a non-interactive tool for scripting and automation.\n\nGet JSON output:\n\n```bash\nkit \"Explain main.go\" --json\n```\n\nQuiet mode (final response only, no TUI):\n\n```bash\nkit \"Run tests\" --quiet\n```\n\nEphemeral mode (no session file created):\n\n```bash\nkit \"Quick question\" --no-session\n```\n\n## Resuming sessions\n\nContinue the most recent session for the current directory:\n\n```bash\nkit --continue\n# or\nkit -c\n```\n\nPick from previous sessions interactively:\n\n```bash\nkit --resume\n# or\nkit -r\n```\n\n## ACP server mode\n\nKit can run as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server, enabling ACP-compatible clients (such as [OpenCode](https://github.com/sst/opencode)) to drive Kit as a remote coding agent over stdio:\n\n```bash\n# Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout)\nkit acp\n\n# With debug logging to stderr\nkit acp --debug\n```\n\nThe ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol.\n" + }, + { + "url": "/sdk/callbacks", + "title": "Callbacks", + "description": "Monitor tool calls and streaming output with the Kit Go SDK.", + "headings": [ + "PromptWithCallbacks", + "Callback signatures", + "Event-based monitoring", + "Hook system" + ], + "tags": [], + "content": "\n# Callbacks\n\n## PromptWithCallbacks\n\nThe `PromptWithCallbacks` method provides real-time visibility into tool calls and streaming output:\n\n```go\nresponse, err := host.PromptWithCallbacks(\n ctx,\n \"List files in current directory\",\n func(name, args string) {\n // Called when the model invokes a tool\n fmt.Println(\"Calling tool:\", name)\n },\n func(name, args, result string, isError bool) {\n // Called when a tool returns its result\n if isError {\n fmt.Println(\"Tool failed:\", name)\n }\n },\n func(chunk string) {\n // Called for each streaming text chunk\n fmt.Print(chunk)\n },\n)\n```\n\n### Callback signatures\n\n| Callback | Signature | When |\n|----------|-----------|------|\n| `onToolCall` | `func(name, args string)` | Model requests a tool call |\n| `onToolResult` | `func(name, args, result string, isError bool)` | Tool execution completes |\n| `onStreaming` | `func(chunk string)` | Streaming text chunk received |\n\nAny callback can be `nil` if you don't need it:\n\n```go\n// Only care about streaming output\nresponse, err := host.PromptWithCallbacks(ctx, \"Hello\", nil, nil, func(chunk string) {\n fmt.Print(chunk)\n})\n```\n\n## Event-based monitoring\n\nFor more granular control, use the event subscription API:\n\n```go\n// Subscribe returns an unsubscribe function\nunsub := host.OnToolCall(func(event kit.ToolCallEvent) {\n fmt.Printf(\"Tool: %s, Args: %s\\n\", event.Name, event.Args)\n})\ndefer unsub()\n\nunsub2 := host.OnToolResult(func(event kit.ToolResultEvent) {\n fmt.Printf(\"Result: %s (error: %v)\\n\", event.Name, event.IsError)\n})\ndefer unsub2()\n\nunsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) {\n fmt.Print(event.Chunk)\n})\ndefer unsub3()\n\nunsub4 := host.OnResponse(func(event kit.ResponseEvent) {\n fmt.Println(\"Final response received\")\n})\ndefer unsub4()\n\nunsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) {\n fmt.Println(\"Turn started\")\n})\ndefer unsub5()\n\nunsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) {\n fmt.Println(\"Turn ended\")\n})\ndefer unsub6()\n```\n\n## Hook system\n\nHooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations:\n\n```go\n// Intercept tool calls before execution\nhost.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) {\n if name == \"bash\" {\n log.Println(\"Bash command:\", args)\n }\n return args, nil // return modified args or error to cancel\n})\n\n// Process results after tool execution\nhost.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) {\n return result, nil\n})\n\n// Before/after each agent turn\nhost.OnBeforeTurn(0, func(ctx context.Context) error {\n return nil\n})\n\nhost.OnAfterTurn(0, func(ctx context.Context) error {\n return nil\n})\n```\n\nThe first argument is a priority (lower = runs first).\n" + }, + { + "url": "/sdk/options", + "title": "SDK Options", + "description": "Configuration options for the Kit Go SDK.", + "headings": [ + "Full options reference", + "Options fields" + ], + "tags": [], + "content": "\n# SDK Options\n\nPass an `Options` struct to `kit.New()` to configure the Kit instance.\n\n## Full options reference\n\n```go\nhost, err := kit.New(ctx, &kit.Options{\n // Model\n Model: \"ollama/llama3\",\n SystemPrompt: \"You are a helpful bot\",\n ConfigFile: \"/path/to/config.yml\",\n\n // Behavior\n MaxSteps: 10,\n Streaming: true,\n Quiet: true,\n Debug: true,\n\n // Session\n SessionPath: \"./session.jsonl\",\n SessionDir: \"/custom/sessions/\",\n Continue: true,\n NoSession: true,\n\n // Tools\n Tools: []kit.Tool{...}, // Replace default tool set entirely\n ExtraTools: []kit.Tool{...}, // Add tools alongside defaults\n\n // Compaction\n AutoCompact: true,\n\n // Skills\n Skills: []string{\"/path/to/skill.md\"},\n SkillsDir: \"/path/to/skills/\",\n})\n```\n\n## Options fields\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `Model` | `string` | config default | Model string (provider/model format) |\n| `SystemPrompt` | `string` | — | System prompt text or file path |\n| `ConfigFile` | `string` | `~/.kit.yml` | Path to config file |\n| `MaxSteps` | `int` | `0` | Max agent steps (0 = unlimited) |\n| `Streaming` | `bool` | `true` | Enable streaming output |\n| `Quiet` | `bool` | `false` | Suppress output |\n| `Debug` | `bool` | `false` | Enable debug logging |\n| `SessionPath` | `string` | — | Open a specific session file |\n| `SessionDir` | `string` | — | Base directory for session discovery |\n| `Continue` | `bool` | `false` | Resume most recent session |\n| `NoSession` | `bool` | `false` | Ephemeral mode (no persistence) |\n| `Tools` | `[]Tool` | — | Replace the entire default tool set |\n| `ExtraTools` | `[]Tool` | — | Additional tools alongside core/MCP/extension tools |\n| `AutoCompact` | `bool` | `false` | Auto-compact when near context limit |\n| `CompactionOptions` | `*CompactionOptions` | — | Configuration for auto-compaction |\n| `Skills` | `[]string` | — | Explicit skill files/dirs to load |\n| `SkillsDir` | `string` | — | Override default skills directory |\n" + }, + { + "url": "/sdk/overview", + "title": "Go SDK", + "description": "Embed Kit in your Go applications.", + "headings": [ + "Installation", + "Basic usage", + "Multi-turn conversations", + "Additional prompt methods", + "Event system", + "Model management", + "Context and compaction" + ], + "tags": [], + "content": "\n# Go SDK\n\nThe `pkg/kit` package lets you embed Kit as a library in your Go applications.\n\n## Installation\n\n```bash\ngo get github.com/mark3labs/kit/pkg/kit\n```\n\n## Basic usage\n\n```go\npackage main\n\nimport (\n \"context\"\n \"log\"\n\n kit \"github.com/mark3labs/kit/pkg/kit\"\n)\n\nfunc main() {\n ctx := context.Background()\n\n // Create Kit instance with default configuration\n host, err := kit.New(ctx, nil)\n if err != nil {\n log.Fatal(err)\n }\n defer host.Close()\n\n // Send a prompt\n response, err := host.Prompt(ctx, \"What is 2+2?\")\n if err != nil {\n log.Fatal(err)\n }\n\n println(response)\n}\n```\n\n## Multi-turn conversations\n\nConversations retain context automatically across calls:\n\n```go\nhost.Prompt(ctx, \"My name is Alice\")\nresponse, _ := host.Prompt(ctx, \"What's my name?\")\n// response: \"Your name is Alice\"\n```\n\n## Additional prompt methods\n\nThe SDK provides several prompt variants:\n\n| Method | Description |\n|--------|-------------|\n| `Prompt(ctx, message)` | Simple prompt, returns response string |\n| `PromptWithCallbacks(ctx, message, ...)` | With tool call and streaming callbacks |\n| `PromptWithOptions(ctx, message, opts)` | With per-call options |\n| `PromptResult(ctx, message)` | Returns full `TurnResult` with usage stats |\n| `PromptResultWithFiles(ctx, message, files)` | Multimodal with file attachments |\n| `Steer(ctx, instruction)` | System-level steering without user message |\n| `FollowUp(ctx, text)` | Continue without new user input |\n\n## Event system\n\nSubscribe to events for monitoring:\n\n```go\nunsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) {\n fmt.Println(\"Tool called:\", event.Name)\n})\ndefer unsubscribe()\n\nhost.OnToolResult(func(event kit.ToolResultEvent) {\n fmt.Println(\"Tool result:\", event.Name)\n})\n\nhost.OnStreaming(func(event kit.MessageUpdateEvent) {\n fmt.Print(event.Chunk)\n})\n```\n\n## Model management\n\nSwitch models at runtime:\n\n```go\nhost.SetModel(ctx, \"openai/gpt-4o\")\ninfo := host.GetModelInfo()\nmodels := host.GetAvailableModels()\n```\n\n## Context and compaction\n\nMonitor and manage context usage:\n\n```go\ntokens := host.EstimateContextTokens()\nstats := host.GetContextStats()\n\nif host.ShouldCompact() {\n result, err := host.Compact(ctx, nil, \"\")\n}\n```\n\nSee [Options](/sdk/options), [Callbacks](/sdk/callbacks), and [Sessions](/sdk/sessions) for more details.\n" + }, + { + "url": "/sdk/sessions", + "title": "SDK Sessions", + "description": "Session management in the Kit Go SDK.", + "headings": [ + "Automatic persistence", + "Accessing session info", + "Configuring sessions via Options", + "Clearing history", + "Tree-based sessions", + "Listing and managing sessions" + ], + "tags": [], + "content": "\n# SDK Sessions\n\n## Automatic persistence\n\nBy default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls:\n\n```go\nhost.Prompt(ctx, \"My name is Alice\")\nresponse, _ := host.Prompt(ctx, \"What's my name?\")\n// response: \"Your name is Alice\"\n```\n\n## Accessing session info\n\n```go\n// Get the current session file path\npath := host.GetSessionPath()\n\n// Get the session ID\nid := host.GetSessionID()\n\n// Get the current model string\nmodel := host.GetModelString()\n```\n\n## Configuring sessions via Options\n\nSession behavior is configured at initialization:\n\n```go\n// Open a specific session file\nhost, _ := kit.New(ctx, &kit.Options{\n SessionPath: \"./my-session.jsonl\",\n})\n\n// Resume the most recent session for the current directory\nhost, _ := kit.New(ctx, &kit.Options{\n Continue: true,\n})\n\n// Ephemeral mode (no file persistence)\nhost, _ := kit.New(ctx, &kit.Options{\n NoSession: true,\n})\n\n// Custom session directory\nhost, _ := kit.New(ctx, &kit.Options{\n SessionDir: \"/custom/sessions/\",\n})\n```\n\n## Clearing history\n\nClear the in-memory conversation history (does not delete the session file):\n\n```go\nhost.ClearSession()\n```\n\n## Tree-based sessions\n\nKit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths:\n\n```go\n// Access the tree session manager\nts := host.GetTreeSession()\n\n// Branch from a specific entry\nerr := host.Branch(\"entry-id-123\")\n```\n\n## Listing and managing sessions\n\nPackage-level functions for session discovery:\n\n```go\n// List sessions for a specific directory\nsessions := kit.ListSessions(\"/home/user/project\")\n\n// List all sessions across all directories\nall := kit.ListAllSessions()\n\n// Delete a session file\nkit.DeleteSession(\"/path/to/session.jsonl\")\n```\n" + }, + { + "url": "/sessions", + "title": "Session Management", + "description": "How Kit persists and manages conversation sessions.", + "headings": [ + "Session storage", + "Resuming sessions", + "Continue most recent", + "Interactive picker", + "Open a specific session", + "Ephemeral mode" + ], + "tags": [], + "content": "\n# Session Management\n\nKit uses a tree-based session model that supports branching and forking conversations.\n\n## Session storage\n\nSessions are stored as JSONL (JSON Lines) files:\n\n```\n~/.kit/sessions//_.jsonl\n```\n\nPath separators in the working directory are replaced with `--`. For example, `/home/user/project` becomes `home--user--project`.\n\nEach line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths.\n\n## Resuming sessions\n\n### Continue most recent\n\nResume the most recent session for the current directory:\n\n```bash\nkit --continue\nkit -c\n```\n\n### Interactive picker\n\nChoose from previous sessions interactively:\n\n```bash\nkit --resume\nkit -r\n```\n\n### Open a specific session\n\n```bash\nkit --session path/to/session.jsonl\nkit -s path/to/session.jsonl\n```\n\n## Ephemeral mode\n\nRun without creating a session file:\n\n```bash\nkit --no-session\n```\n\nThis is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed.\n" + } + ] +} \ No newline at end of file diff --git a/providers/index.html b/providers/index.html new file mode 100644 index 00000000..efcd7036 --- /dev/null +++ b/providers/index.html @@ -0,0 +1,129 @@ + + + + + +Providers | Kit + + + + + + + +
    +

    Providers

    +# Providers + +Kit supports a wide range of LLM providers through a unified `provider/model` string format. + +## Supported providers + +| Provider | Prefix | Description | +|----------|--------|-------------| +| **Anthropic** | `anthropic/` | Claude models (native, prompt caching, OAuth) | +| **OpenAI** | `openai/` | GPT models | +| **Google** | `google/` or `gemini/` | Gemini models | +| **Ollama** | `ollama/` | Local models | +| **Azure OpenAI** | `azure/` | Azure-hosted OpenAI | +| **AWS Bedrock** | `bedrock/` | Bedrock models | +| **Google Vertex** | `google-vertex-anthropic/` | Claude on Vertex AI | +| **OpenRouter** | `openrouter/` | Multi-provider router | +| **Vercel AI** | `vercel/` | Vercel AI SDK models | +| **Auto-routed** | any | Any provider from the models.dev database | + +## Model string format + +```bash +provider/model # Standard format +anthropic/claude-sonnet-4-5-20250929 +openai/gpt-4o +ollama/llama3 +google/gemini-2.0-flash-exp +``` + +## Model aliases + +Kit provides aliases for commonly used models: + +```bash +claude-opus-latest → claude-opus-4-20250514 +claude-sonnet-latest → claude-sonnet-4-5-20250929 +claude-4-opus-latest → claude-opus-4-20250514 +claude-4-sonnet-latest → claude-sonnet-4-5-20250929 +claude-3-7-sonnet-latest → claude-3-7-sonnet-20250219 +claude-3-5-sonnet-latest → claude-3-5-sonnet-20241022 +claude-3-5-haiku-latest → claude-3-5-haiku-20241022 +claude-3-opus-latest → claude-3-opus-20240229 +``` + +## Specifying a model + +Via CLI flag: + +```bash +kit --model openai/gpt-4o +kit -m ollama/llama3 +``` + +Via config file: + +```yaml +model: anthropic/claude-sonnet-4-5-20250929 +``` + +Via environment variable: + +```bash +export KIT_MODEL="google/gemini-2.0-flash-exp" +``` + +## Authentication + +### API keys + +Set the appropriate environment variable for your provider: + +```bash +export ANTHROPIC_API_KEY="sk-..." +export OPENAI_API_KEY="sk-..." +export GOOGLE_API_KEY="..." +``` + +Or pass it directly: + +```bash +kit --provider-api-key "sk-..." --model openai/gpt-4o +``` + +### OAuth + +For providers that support OAuth (e.g., Anthropic): + +```bash +kit auth login anthropic # Start OAuth flow +kit auth status # Check authentication status +kit auth logout anthropic # Remove credentials +``` + +### Custom provider URL + +For self-hosted or proxy endpoints: + +```bash +kit --provider-url "https://my-proxy.example.com/v1" --model openai/gpt-4o +``` + +## Model database + +Kit ships with a local model database that maps provider names to API configurations. You can manage it with: + +```bash +kit models # List available models +kit models openai # Filter by provider +kit models --all # Show all providers +kit update-models # Update from models.dev +kit update-models embedded # Reset to bundled database +```
    + + \ No newline at end of file diff --git a/quick-start/index.html b/quick-start/index.html new file mode 100644 index 00000000..9833ae8e --- /dev/null +++ b/quick-start/index.html @@ -0,0 +1,98 @@ + + + + + +Quick Start | Kit + + + + + + + +
    +

    Quick Start

    +# Quick Start + +## Basic usage + +Start an interactive session: + +```bash +kit +``` + +Run a one-off prompt: + +```bash +kit "List files in src/" +``` + +Attach files as context using the `@` prefix: + +```bash +kit @main.go @test.go "Review these files" +``` + +Use a specific model: + +```bash +kit --model anthropic/claude-sonnet-4-5-20250929 +``` + +## Non-interactive mode + +Kit can run as a non-interactive tool for scripting and automation. + +Get JSON output: + +```bash +kit "Explain main.go" --json +``` + +Quiet mode (final response only, no TUI): + +```bash +kit "Run tests" --quiet +``` + +Ephemeral mode (no session file created): + +```bash +kit "Quick question" --no-session +``` + +## Resuming sessions + +Continue the most recent session for the current directory: + +```bash +kit --continue +# or +kit -c +``` + +Pick from previous sessions interactively: + +```bash +kit --resume +# or +kit -r +``` + +## ACP server mode + +Kit can run as an [ACP (Agent Client Protocol)](https://agentclientprotocol.com) agent server, enabling ACP-compatible clients (such as [OpenCode](https://github.com/sst/opencode)) to drive Kit as a remote coding agent over stdio: + +```bash +# Start Kit as an ACP server (JSON-RPC 2.0 on stdin/stdout) +kit acp + +# With debug logging to stderr +kit acp --debug +``` + +The ACP server exposes Kit's full capabilities — LLM execution, tool calls (bash, read, write, edit, grep, etc.), and session persistence — over the standard ACP protocol.
    + + \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 00000000..6755fa02 --- /dev/null +++ b/robots.txt @@ -0,0 +1,42 @@ +# Tome Documentation Site +# https://tome.dev + +User-agent: * +Allow: / + +# AI Crawlers — explicitly allowed +User-agent: GPTBot +Allow: / + +User-agent: ClaudeBot +Allow: / + +User-agent: Claude-Web +Allow: / + +User-agent: Amazonbot +Allow: / + +User-agent: anthropic-ai +Allow: / + +User-agent: Bytespider +Allow: / + +User-agent: CCBot +Allow: / + +User-agent: cohere-ai +Allow: / + +User-agent: PerplexityBot +Allow: / + +# Machine-readable resources +Sitemap: https://go-kit.dev/sitemap.xml + +# AI/LLM Resources +# llms.txt: https://go-kit.dev/llms.txt +# llms-full.txt: https://go-kit.dev/llms-full.txt +# skill.md: https://go-kit.dev/skill.md +# MCP manifest: https://go-kit.dev/mcp.json diff --git a/sdk/callbacks/index.html b/sdk/callbacks/index.html new file mode 100644 index 00000000..a468335f --- /dev/null +++ b/sdk/callbacks/index.html @@ -0,0 +1,127 @@ + + + + + +Callbacks | Kit + + + + + + + +
    +

    Callbacks

    +# Callbacks + +## PromptWithCallbacks + +The `PromptWithCallbacks` method provides real-time visibility into tool calls and streaming output: + +```go +response, err := host.PromptWithCallbacks( + ctx, + "List files in current directory", + func(name, args string) { + // Called when the model invokes a tool + fmt.Println("Calling tool:", name) + }, + func(name, args, result string, isError bool) { + // Called when a tool returns its result + if isError { + fmt.Println("Tool failed:", name) + } + }, + func(chunk string) { + // Called for each streaming text chunk + fmt.Print(chunk) + }, +) +``` + +### Callback signatures + +| Callback | Signature | When | +|----------|-----------|------| +| `onToolCall` | `func(name, args string)` | Model requests a tool call | +| `onToolResult` | `func(name, args, result string, isError bool)` | Tool execution completes | +| `onStreaming` | `func(chunk string)` | Streaming text chunk received | + +Any callback can be `nil` if you don't need it: + +```go +// Only care about streaming output +response, err := host.PromptWithCallbacks(ctx, "Hello", nil, nil, func(chunk string) { + fmt.Print(chunk) +}) +``` + +## Event-based monitoring + +For more granular control, use the event subscription API: + +```go +// Subscribe returns an unsubscribe function +unsub := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Printf("Tool: %s, Args: %s\n", event.Name, event.Args) +}) +defer unsub() + +unsub2 := host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Printf("Result: %s (error: %v)\n", event.Name, event.IsError) +}) +defer unsub2() + +unsub3 := host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +defer unsub3() + +unsub4 := host.OnResponse(func(event kit.ResponseEvent) { + fmt.Println("Final response received") +}) +defer unsub4() + +unsub5 := host.OnTurnStart(func(event kit.TurnStartEvent) { + fmt.Println("Turn started") +}) +defer unsub5() + +unsub6 := host.OnTurnEnd(func(event kit.TurnEndEvent) { + fmt.Println("Turn ended") +}) +defer unsub6() +``` + +## Hook system + +Hooks allow you to intercept and modify behavior. Unlike events, hooks can modify or cancel operations: + +```go +// Intercept tool calls before execution +host.OnBeforeToolCall(0, func(ctx context.Context, name string, args string) (string, error) { + if name == "bash" { + log.Println("Bash command:", args) + } + return args, nil // return modified args or error to cancel +}) + +// Process results after tool execution +host.OnAfterToolResult(0, func(ctx context.Context, name string, result string) (string, error) { + return result, nil +}) + +// Before/after each agent turn +host.OnBeforeTurn(0, func(ctx context.Context) error { + return nil +}) + +host.OnAfterTurn(0, func(ctx context.Context) error { + return nil +}) +``` + +The first argument is a priority (lower = runs first).
    + + \ No newline at end of file diff --git a/sdk/options/index.html b/sdk/options/index.html new file mode 100644 index 00000000..9c0e1a3b --- /dev/null +++ b/sdk/options/index.html @@ -0,0 +1,76 @@ + + + + + +SDK Options | Kit + + + + + + + +
    +

    SDK Options

    +# SDK Options + +Pass an `Options` struct to `kit.New()` to configure the Kit instance. + +## Full options reference + +```go +host, err := kit.New(ctx, &kit.Options{ + // Model + Model: "ollama/llama3", + SystemPrompt: "You are a helpful bot", + ConfigFile: "/path/to/config.yml", + + // Behavior + MaxSteps: 10, + Streaming: true, + Quiet: true, + Debug: true, + + // Session + SessionPath: "./session.jsonl", + SessionDir: "/custom/sessions/", + Continue: true, + NoSession: true, + + // Tools + Tools: []kit.Tool{...}, // Replace default tool set entirely + ExtraTools: []kit.Tool{...}, // Add tools alongside defaults + + // Compaction + AutoCompact: true, + + // Skills + Skills: []string{"/path/to/skill.md"}, + SkillsDir: "/path/to/skills/", +}) +``` + +## Options fields + +| Field | Type | Default | Description | +|-------|------|---------|-------------| +| `Model` | `string` | config default | Model string (provider/model format) | +| `SystemPrompt` | `string` | — | System prompt text or file path | +| `ConfigFile` | `string` | `~/.kit.yml` | Path to config file | +| `MaxSteps` | `int` | `0` | Max agent steps (0 = unlimited) | +| `Streaming` | `bool` | `true` | Enable streaming output | +| `Quiet` | `bool` | `false` | Suppress output | +| `Debug` | `bool` | `false` | Enable debug logging | +| `SessionPath` | `string` | — | Open a specific session file | +| `SessionDir` | `string` | — | Base directory for session discovery | +| `Continue` | `bool` | `false` | Resume most recent session | +| `NoSession` | `bool` | `false` | Ephemeral mode (no persistence) | +| `Tools` | `[]Tool` | — | Replace the entire default tool set | +| `ExtraTools` | `[]Tool` | — | Additional tools alongside core/MCP/extension tools | +| `AutoCompact` | `bool` | `false` | Auto-compact when near context limit | +| `CompactionOptions` | `*CompactionOptions` | — | Configuration for auto-compaction | +| `Skills` | `[]string` | — | Explicit skill files/dirs to load | +| `SkillsDir` | `string` | — | Override default skills directory |
    + + \ No newline at end of file diff --git a/sdk/overview/index.html b/sdk/overview/index.html new file mode 100644 index 00000000..9c40cc61 --- /dev/null +++ b/sdk/overview/index.html @@ -0,0 +1,126 @@ + + + + + +Go SDK | Kit + + + + + + + +
    +

    Go SDK

    +# Go SDK + +The `pkg/kit` package lets you embed Kit as a library in your Go applications. + +## Installation + +```bash +go get github.com/mark3labs/kit/pkg/kit +``` + +## Basic usage + +```go +package main + +import ( + "context" + "log" + + kit "github.com/mark3labs/kit/pkg/kit" +) + +func main() { + ctx := context.Background() + + // Create Kit instance with default configuration + host, err := kit.New(ctx, nil) + if err != nil { + log.Fatal(err) + } + defer host.Close() + + // Send a prompt + response, err := host.Prompt(ctx, "What is 2+2?") + if err != nil { + log.Fatal(err) + } + + println(response) +} +``` + +## Multi-turn conversations + +Conversations retain context automatically across calls: + +```go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +``` + +## Additional prompt methods + +The SDK provides several prompt variants: + +| Method | Description | +|--------|-------------| +| `Prompt(ctx, message)` | Simple prompt, returns response string | +| `PromptWithCallbacks(ctx, message, ...)` | With tool call and streaming callbacks | +| `PromptWithOptions(ctx, message, opts)` | With per-call options | +| `PromptResult(ctx, message)` | Returns full `TurnResult` with usage stats | +| `PromptResultWithFiles(ctx, message, files)` | Multimodal with file attachments | +| `Steer(ctx, instruction)` | System-level steering without user message | +| `FollowUp(ctx, text)` | Continue without new user input | + +## Event system + +Subscribe to events for monitoring: + +```go +unsubscribe := host.OnToolCall(func(event kit.ToolCallEvent) { + fmt.Println("Tool called:", event.Name) +}) +defer unsubscribe() + +host.OnToolResult(func(event kit.ToolResultEvent) { + fmt.Println("Tool result:", event.Name) +}) + +host.OnStreaming(func(event kit.MessageUpdateEvent) { + fmt.Print(event.Chunk) +}) +``` + +## Model management + +Switch models at runtime: + +```go +host.SetModel(ctx, "openai/gpt-4o") +info := host.GetModelInfo() +models := host.GetAvailableModels() +``` + +## Context and compaction + +Monitor and manage context usage: + +```go +tokens := host.EstimateContextTokens() +stats := host.GetContextStats() + +if host.ShouldCompact() { + result, err := host.Compact(ctx, nil, "") +} +``` + +See [Options](/sdk/options), [Callbacks](/sdk/callbacks), and [Sessions](/sdk/sessions) for more details.
    + + \ No newline at end of file diff --git a/sdk/sessions/index.html b/sdk/sessions/index.html new file mode 100644 index 00000000..5d8ddbd1 --- /dev/null +++ b/sdk/sessions/index.html @@ -0,0 +1,102 @@ + + + + + +SDK Sessions | Kit + + + + + + + +
    +

    SDK Sessions

    +# SDK Sessions + +## Automatic persistence + +By default, Kit automatically persists sessions to JSONL files. Multi-turn conversations retain context across calls: + +```go +host.Prompt(ctx, "My name is Alice") +response, _ := host.Prompt(ctx, "What's my name?") +// response: "Your name is Alice" +``` + +## Accessing session info + +```go +// Get the current session file path +path := host.GetSessionPath() + +// Get the session ID +id := host.GetSessionID() + +// Get the current model string +model := host.GetModelString() +``` + +## Configuring sessions via Options + +Session behavior is configured at initialization: + +```go +// Open a specific session file +host, _ := kit.New(ctx, &kit.Options{ + SessionPath: "./my-session.jsonl", +}) + +// Resume the most recent session for the current directory +host, _ := kit.New(ctx, &kit.Options{ + Continue: true, +}) + +// Ephemeral mode (no file persistence) +host, _ := kit.New(ctx, &kit.Options{ + NoSession: true, +}) + +// Custom session directory +host, _ := kit.New(ctx, &kit.Options{ + SessionDir: "/custom/sessions/", +}) +``` + +## Clearing history + +Clear the in-memory conversation history (does not delete the session file): + +```go +host.ClearSession() +``` + +## Tree-based sessions + +Kit's session model is tree-based, supporting branching. You can branch from any entry to explore alternate conversation paths: + +```go +// Access the tree session manager +ts := host.GetTreeSession() + +// Branch from a specific entry +err := host.Branch("entry-id-123") +``` + +## Listing and managing sessions + +Package-level functions for session discovery: + +```go +// List sessions for a specific directory +sessions := kit.ListSessions("/home/user/project") + +// List all sessions across all directories +all := kit.ListAllSessions() + +// Delete a session file +kit.DeleteSession("/path/to/session.jsonl") +```
    + + \ No newline at end of file diff --git a/search.json b/search.json new file mode 100644 index 00000000..b9ec9084 --- /dev/null +++ b/search.json @@ -0,0 +1,333 @@ +{ + "version": 1, + "generator": "tome", + "site": "Kit", + "totalPages": 20, + "searchEndpoint": "/pagefind/pagefind.js", + "pages": [ + { + "id": "advanced/json-output", + "url": "https://go-kit.dev/advanced/json-output", + "title": "JSON Output", + "description": "Machine-readable JSON output for scripting and automation.", + "headings": [ + "Response format", + "Fields", + "Top-level", + "Usage", + "Message parts", + "Parsing in scripts", + "bash + jq", + "Go SDK" + ], + "tags": [], + "wordCount": 331 + }, + { + "id": "advanced/subagents", + "url": "https://go-kit.dev/advanced/subagents", + "title": "Subagents", + "description": "Multi-agent orchestration with Kit subagents.", + "headings": [ + "Subprocess pattern", + "Built-in spawn_subagent tool", + "Extension subagents", + "Go SDK subagents" + ], + "tags": [], + "wordCount": 247 + }, + { + "id": "advanced/testing", + "url": "https://go-kit.dev/advanced/testing", + "title": "Testing with tmux", + "description": "Test Kit's TUI non-interactively using tmux.", + "headings": [ + "Basic pattern", + "Testing extensions", + "Tips" + ], + "tags": [], + "wordCount": 264 + }, + { + "id": "cli/commands", + "url": "https://go-kit.dev/cli/commands", + "title": "Commands", + "description": "Complete reference for all Kit CLI subcommands.", + "headings": [ + "Authentication", + "Model database", + "Extension management", + "Installing extensions from git", + "Skills", + "ACP server" + ], + "tags": [], + "wordCount": 258 + }, + { + "id": "cli/flags", + "url": "https://go-kit.dev/cli/flags", + "title": "Global Flags", + "description": "Complete reference for all Kit CLI flags.", + "headings": [ + "Model and provider", + "Session management", + "Behavior", + "Extensions", + "Generation parameters", + "System" + ], + "tags": [], + "wordCount": 434 + }, + { + "id": "configuration", + "url": "https://go-kit.dev/configuration", + "title": "Configuration", + "description": "Configure Kit using config files, environment variables, and CLI flags.", + "headings": [ + "Basic configuration", + "All configuration keys", + "Environment variables", + "MCP server configuration", + "MCP server fields" + ], + "tags": [], + "wordCount": 444 + }, + { + "id": "development", + "url": "https://go-kit.dev/development", + "title": "Development", + "description": "Build, test, and contribute to Kit.", + "headings": [ + "Build and test", + "Project structure", + "Architecture overview", + "Multi-provider LLM support", + "MCP client-server model", + "Extension system", + "TUI architecture", + "Decoupling pattern", + "Contributing", + "Community" + ], + "tags": [], + "wordCount": 350 + }, + { + "id": "extensions/capabilities", + "url": "https://go-kit.dev/extensions/capabilities", + "title": "Capabilities", + "description": "All extension capabilities — lifecycle events, tools, commands, widgets, and more.", + "headings": [ + "Lifecycle events", + "Example", + "Tools", + "Commands", + "Widgets", + "Headers and footers", + "Status bar", + "Shortcuts", + "Overlays", + "Tool renderers", + "Message renderers", + "Editor interceptors", + "Interactive prompts", + "Options", + "Subagents", + "LLM completion", + "Custom events" + ], + "tags": [], + "wordCount": 638 + }, + { + "id": "extensions/examples", + "url": "https://go-kit.dev/extensions/examples", + "title": "Examples", + "description": "Catalog of example extensions included with Kit.", + "headings": [ + "UI and display", + "Workflow and automation", + "Interactive features", + "Agent and context", + "Multi-agent", + "Development", + "Subdirectory extensions" + ], + "tags": [], + "wordCount": 318 + }, + { + "id": "extensions/loading", + "url": "https://go-kit.dev/extensions/loading", + "title": "Loading Extensions", + "description": "How Kit discovers and loads extensions.", + "headings": [ + "Auto-discovery", + "Explicit loading", + "Disabling extensions", + "Installing from git", + "Extension structure", + "Single-file extensions", + "Subdirectory extensions", + "Package-level state" + ], + "tags": [], + "wordCount": 302 + }, + { + "id": "extensions/overview", + "url": "https://go-kit.dev/extensions/overview", + "title": "Extension System", + "description": "Overview of Kit's Go-based extension system.", + "headings": [ + "Minimal extension", + "How extensions work", + "Key concepts", + "The API object", + "The Context object" + ], + "tags": [], + "wordCount": 286 + }, + { + "id": "index", + "url": "https://go-kit.dev/", + "title": "Kit", + "description": "Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system.", + "headings": [ + "Features", + "Quick links" + ], + "tags": [], + "wordCount": 216 + }, + { + "id": "installation", + "url": "https://go-kit.dev/installation", + "title": "Installation", + "description": "Install Kit using npm, Go, or build from source.", + "headings": [ + "Using npm (recommended)", + "Using Go", + "Building from source", + "Verifying the installation", + "Setting up a provider" + ], + "tags": [], + "wordCount": 116 + }, + { + "id": "providers", + "url": "https://go-kit.dev/providers", + "title": "Providers", + "description": "Supported LLM providers and model configuration.", + "headings": [ + "Supported providers", + "Model string format", + "Model aliases", + "Specifying a model", + "Authentication", + "API keys", + "OAuth", + "Custom provider URL", + "Model database" + ], + "tags": [], + "wordCount": 343 + }, + { + "id": "quick-start", + "url": "https://go-kit.dev/quick-start", + "title": "Quick Start", + "description": "Get up and running with Kit in minutes.", + "headings": [ + "Basic usage", + "Non-interactive mode", + "Resuming sessions", + "ACP server mode" + ], + "tags": [], + "wordCount": 212 + }, + { + "id": "sdk/callbacks", + "url": "https://go-kit.dev/sdk/callbacks", + "title": "Callbacks", + "description": "Monitor tool calls and streaming output with the Kit Go SDK.", + "headings": [ + "PromptWithCallbacks", + "Callback signatures", + "Event-based monitoring", + "Hook system" + ], + "tags": [], + "wordCount": 356 + }, + { + "id": "sdk/options", + "url": "https://go-kit.dev/sdk/options", + "title": "SDK Options", + "description": "Configuration options for the Kit Go SDK.", + "headings": [ + "Full options reference", + "Options fields" + ], + "tags": [], + "wordCount": 309 + }, + { + "id": "sdk/overview", + "url": "https://go-kit.dev/sdk/overview", + "title": "Go SDK", + "description": "Embed Kit in your Go applications.", + "headings": [ + "Installation", + "Basic usage", + "Multi-turn conversations", + "Additional prompt methods", + "Event system", + "Model management", + "Context and compaction" + ], + "tags": [], + "wordCount": 287 + }, + { + "id": "sdk/sessions", + "url": "https://go-kit.dev/sdk/sessions", + "title": "SDK Sessions", + "description": "Session management in the Kit Go SDK.", + "headings": [ + "Automatic persistence", + "Accessing session info", + "Configuring sessions via Options", + "Clearing history", + "Tree-based sessions", + "Listing and managing sessions" + ], + "tags": [], + "wordCount": 241 + }, + { + "id": "sessions", + "url": "https://go-kit.dev/sessions", + "title": "Session Management", + "description": "How Kit persists and manages conversation sessions.", + "headings": [ + "Session storage", + "Resuming sessions", + "Continue most recent", + "Interactive picker", + "Open a specific session", + "Ephemeral mode" + ], + "tags": [], + "wordCount": 152 + } + ] +} \ No newline at end of file diff --git a/sessions/index.html b/sessions/index.html new file mode 100644 index 00000000..8d4274d8 --- /dev/null +++ b/sessions/index.html @@ -0,0 +1,69 @@ + + + + + +Session Management | Kit + + + + + + + +
    +

    Session Management

    +# Session Management + +Kit uses a tree-based session model that supports branching and forking conversations. + +## Session storage + +Sessions are stored as JSONL (JSON Lines) files: + +``` +~/.kit/sessions//_.jsonl +``` + +Path separators in the working directory are replaced with `--`. For example, `/home/user/project` becomes `home--user--project`. + +Each line in the session file is a JSON entry representing a message, tool call, model change, or extension data. The tree structure allows branching from any message to explore alternate paths. + +## Resuming sessions + +### Continue most recent + +Resume the most recent session for the current directory: + +```bash +kit --continue +kit -c +``` + +### Interactive picker + +Choose from previous sessions interactively: + +```bash +kit --resume +kit -r +``` + +### Open a specific session + +```bash +kit --session path/to/session.jsonl +kit -s path/to/session.jsonl +``` + +## Ephemeral mode + +Run without creating a session file: + +```bash +kit --no-session +``` + +This is useful for one-off prompts, scripting, and subagent patterns where persistence isn't needed.
    + + \ No newline at end of file diff --git a/skill.md b/skill.md new file mode 100644 index 00000000..0e9020a9 --- /dev/null +++ b/skill.md @@ -0,0 +1,56 @@ +# Kit + +> Documentation site powered by [Tome](https://tome.dev) + +## Overview + +This is the documentation for **Kit**. It is a static documentation site with full-text search, structured data, and machine-readable formats. + +## Available Resources + +| Resource | Path | Description | +|----------|------|-------------| +| llms.txt | /llms.txt | Lightweight page index with titles, descriptions, and URLs | +| llms-full.txt | /llms-full.txt | Full raw markdown content of all pages | +| MCP manifest | /mcp.json | Machine-readable page metadata with headings and tags | +| skill.md | /skill.md | This file — agent capabilities and site structure | +| robots.txt | /robots.txt | Crawler directives with AI agent permissions | +| Search API | /search.json | Pagefind search index metadata for programmatic search | + +## Site Structure + +### Pages + +- **[JSON Output](https://go-kit.dev/advanced/json-output)** — Machine-readable JSON output for scripting and automation. +- **[Subagents](https://go-kit.dev/advanced/subagents)** — Multi-agent orchestration with Kit subagents. +- **[Testing with tmux](https://go-kit.dev/advanced/testing)** — Test Kit's TUI non-interactively using tmux. +- **[Commands](https://go-kit.dev/cli/commands)** — Complete reference for all Kit CLI subcommands. +- **[Global Flags](https://go-kit.dev/cli/flags)** — Complete reference for all Kit CLI flags. +- **[Configuration](https://go-kit.dev/configuration)** — Configure Kit using config files, environment variables, and CLI flags. +- **[Development](https://go-kit.dev/development)** — Build, test, and contribute to Kit. +- **[Capabilities](https://go-kit.dev/extensions/capabilities)** — All extension capabilities — lifecycle events, tools, commands, widgets, and more. +- **[Examples](https://go-kit.dev/extensions/examples)** — Catalog of example extensions included with Kit. +- **[Loading Extensions](https://go-kit.dev/extensions/loading)** — How Kit discovers and loads extensions. +- **[Extension System](https://go-kit.dev/extensions/overview)** — Overview of Kit's Go-based extension system. +- **[Kit](https://go-kit.dev/)** — Kit is a powerful, extensible AI coding agent CLI with multi-provider support, built-in tools, and a rich extension system. +- **[Installation](https://go-kit.dev/installation)** — Install Kit using npm, Go, or build from source. +- **[Providers](https://go-kit.dev/providers)** — Supported LLM providers and model configuration. +- **[Quick Start](https://go-kit.dev/quick-start)** — Get up and running with Kit in minutes. +- **[Callbacks](https://go-kit.dev/sdk/callbacks)** — Monitor tool calls and streaming output with the Kit Go SDK. +- **[SDK Options](https://go-kit.dev/sdk/options)** — Configuration options for the Kit Go SDK. +- **[Go SDK](https://go-kit.dev/sdk/overview)** — Embed Kit in your Go applications. +- **[SDK Sessions](https://go-kit.dev/sdk/sessions)** — Session management in the Kit Go SDK. +- **[Session Management](https://go-kit.dev/sessions)** — How Kit persists and manages conversation sessions. + +## How to Use This Site + +### For AI Agents + +1. **Quick overview**: Read `/llms.txt` for a page index with titles and URLs +2. **Full content**: Read `/llms-full.txt` for complete raw markdown of all pages +3. **Structured data**: Parse `/mcp.json` for machine-readable metadata including headings, tags, and content +4. **Search**: Use Pagefind search at `/pagefind/pagefind.js` or check `/search.json` for index metadata + +### Capabilities + +- **Search provider**: local