@cuongtran001/kanna 0.39.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +355 -0
- package/bin/kanna +9 -0
- package/dist/client/apple-touch-icon.png +0 -0
- package/dist/client/assets/abap-BdImnpbu.js +1 -0
- package/dist/client/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/client/assets/ada-bCR0ucgS.js +1 -0
- package/dist/client/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/client/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/client/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/client/assets/apache-Pmp26Uib.js +1 -0
- package/dist/client/assets/apex-D8_7TLub.js +1 -0
- package/dist/client/assets/apl-dKokRX4l.js +1 -0
- package/dist/client/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/client/assets/ara-BRHolxvo.js +1 -0
- package/dist/client/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/client/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/client/assets/astro-CbQHKStN.js +1 -0
- package/dist/client/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/client/assets/awk-DMzUqQB5.js +1 -0
- package/dist/client/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/client/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/client/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/client/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/client/assets/bat-BkioyH1T.js +1 -0
- package/dist/client/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/client/assets/berry-uYugtg8r.js +1 -0
- package/dist/client/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/client/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/client/assets/bird2-DPOp833l.js +1 -0
- package/dist/client/assets/blade-D4QpJJKB.js +1 -0
- package/dist/client/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2 +0 -0
- package/dist/client/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2 +0 -0
- package/dist/client/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2 +0 -0
- package/dist/client/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/client/assets/c-BIGW1oBm.js +1 -0
- package/dist/client/assets/c3-eo99z4R2.js +1 -0
- package/dist/client/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/client/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/client/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/client/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/client/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/client/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/client/assets/clarity-D53aC0YG.js +1 -0
- package/dist/client/assets/clojure-P80f7IUj.js +1 -0
- package/dist/client/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/client/assets/cobol-nwyudZeR.js +1 -0
- package/dist/client/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/client/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/client/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/client/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/client/assets/coq-DkFqJrB1.js +1 -0
- package/dist/client/assets/cpp-CofmeUqb.js +1 -0
- package/dist/client/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/client/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/client/assets/css-DPfMkruS.js +1 -0
- package/dist/client/assets/csv-fuZLfV_i.js +1 -0
- package/dist/client/assets/cue-D82EKSYY.js +1 -0
- package/dist/client/assets/cypher-COkxafJQ.js +1 -0
- package/dist/client/assets/d-85-TOEBH.js +1 -0
- package/dist/client/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/client/assets/dart-CF10PKvl.js +1 -0
- package/dist/client/assets/dax-CEL-wOlO.js +1 -0
- package/dist/client/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/client/assets/diff-D97Zzqfu.js +1 -0
- package/dist/client/assets/docker-BcOcwvcX.js +1 -0
- package/dist/client/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/client/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/client/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/client/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/client/assets/edge-BkV0erSs.js +1 -0
- package/dist/client/assets/elixir-CDX3lj18.js +1 -0
- package/dist/client/assets/elm-DbKCFpqz.js +1 -0
- package/dist/client/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/client/assets/erb-B12qg9BL.js +1 -0
- package/dist/client/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/client/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/client/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/client/assets/fennel-BYunw83y.js +1 -0
- package/dist/client/assets/fish-BvzEVeQv.js +1 -0
- package/dist/client/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/client/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/client/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/client/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/client/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/client/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/client/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/client/assets/genie-D0YGMca9.js +1 -0
- package/dist/client/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/client/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/client/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/client/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/client/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/client/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/client/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/client/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/client/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/client/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/client/assets/gleam-BspZqrRM.js +1 -0
- package/dist/client/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/client/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/client/assets/glsl-DplSGwfg.js +1 -0
- package/dist/client/assets/gn-n2N0HUVH.js +1 -0
- package/dist/client/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/client/assets/go-CxLEBnE3.js +1 -0
- package/dist/client/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/client/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/client/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/client/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/client/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/client/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/client/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/client/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/client/assets/hack-CaT9iCJl.js +1 -0
- package/dist/client/assets/haml-B8DHNrY2.js +1 -0
- package/dist/client/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/client/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/client/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/client/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/client/assets/hjson-D5-asLiD.js +1 -0
- package/dist/client/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/client/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/client/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/client/assets/houston-DnULxvSX.js +1 -0
- package/dist/client/assets/html-GMplVEZG.js +1 -0
- package/dist/client/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/client/assets/http-jrhK8wxY.js +1 -0
- package/dist/client/assets/hurl-irOxFIW8.js +1 -0
- package/dist/client/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/client/assets/hy-DFXneXwc.js +1 -0
- package/dist/client/assets/imba-DGztddWO.js +1 -0
- package/dist/client/assets/index-Do7324M0.css +32 -0
- package/dist/client/assets/index-ktE9DLCD.js +2620 -0
- package/dist/client/assets/ini-BEwlwnbL.js +1 -0
- package/dist/client/assets/java-CylS5w8V.js +1 -0
- package/dist/client/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/client/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/client/assets/jison-wvAkD_A8.js +1 -0
- package/dist/client/assets/json-Cp-IABpG.js +1 -0
- package/dist/client/assets/json5-C9tS-k6U.js +1 -0
- package/dist/client/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/client/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/client/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/client/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/client/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/client/assets/julia-CxzCAyBv.js +1 -0
- package/dist/client/assets/just-Cw27pwNe.js +1 -0
- package/dist/client/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/client/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/client/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/client/assets/kdl-DV7GczEv.js +1 -0
- package/dist/client/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/client/assets/kusto-DZf3V79B.js +1 -0
- package/dist/client/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/client/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/client/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/client/assets/less-B1dDrJ26.js +1 -0
- package/dist/client/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/client/assets/liquid-DYVedYrR.js +1 -0
- package/dist/client/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/client/assets/log-2UxHyX5q.js +1 -0
- package/dist/client/assets/logo-BtOb2qkB.js +1 -0
- package/dist/client/assets/lua-BaeVxFsk.js +1 -0
- package/dist/client/assets/luau-C-HG3fhB.js +1 -0
- package/dist/client/assets/make-CHLpvVh8.js +1 -0
- package/dist/client/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/client/assets/marko-CnJfTvn9.js +1 -0
- package/dist/client/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/client/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/client/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/client/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/client/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/client/assets/matlab-D7o27uSR.js +1 -0
- package/dist/client/assets/mdc-BMNejdWA.js +1 -0
- package/dist/client/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/client/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/client/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/client/assets/min-light-CTRr51gU.js +1 -0
- package/dist/client/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/client/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/client/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/client/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/client/assets/move-IF9eRakj.js +1 -0
- package/dist/client/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/client/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/client/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/client/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/client/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/client/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/client/assets/nim-CVrawwO9.js +1 -0
- package/dist/client/assets/nix-CwoSXNpI.js +1 -0
- package/dist/client/assets/nord-Ddv68eIx.js +1 -0
- package/dist/client/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/client/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/client/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/client/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/client/assets/odin-BBf5iR-q.js +1 -0
- package/dist/client/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/client/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/client/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/client/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/client/assets/perl-C0TMdlhV.js +1 -0
- package/dist/client/assets/php-Dhbhpdrm.js +1 -0
- package/dist/client/assets/pierre-dark-DF2SEV7i.js +1 -0
- package/dist/client/assets/pierre-light-DOlZxES8.js +1 -0
- package/dist/client/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/client/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/client/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/client/assets/po-BTJTHyun.js +1 -0
- package/dist/client/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/client/assets/polar-C0HS_06l.js +1 -0
- package/dist/client/assets/postcss-CXtECtnM.js +1 -0
- package/dist/client/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/client/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/client/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/client/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/client/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/client/assets/pug-CGlum2m_.js +1 -0
- package/dist/client/assets/puppet-BMWR74SV.js +1 -0
- package/dist/client/assets/purescript-CklMAg4u.js +1 -0
- package/dist/client/assets/python-B6aJPvgy.js +1 -0
- package/dist/client/assets/qml-3beO22l8.js +1 -0
- package/dist/client/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/client/assets/qss-IeuSbFQv.js +1 -0
- package/dist/client/assets/r-Dspwwk_N.js +1 -0
- package/dist/client/assets/racket-BqYA7rlc.js +1 -0
- package/dist/client/assets/raku-DXvB9xmW.js +1 -0
- package/dist/client/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/client/assets/red-bN70gL4F.js +1 -0
- package/dist/client/assets/reg-C-SQnVFl.js +1 -0
- package/dist/client/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/client/assets/rel-C3B-1QV4.js +1 -0
- package/dist/client/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/client/assets/ron-D8l8udqQ.js +1 -0
- package/dist/client/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/client/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/client/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/client/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/client/assets/rst-BrH8l1NY.js +1 -0
- package/dist/client/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/client/assets/rust-B1yitclQ.js +1 -0
- package/dist/client/assets/sas-cz2c8ADy.js +1 -0
- package/dist/client/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/client/assets/scala-C151Ov-r.js +1 -0
- package/dist/client/assets/scheme-C98Dy4si.js +1 -0
- package/dist/client/assets/scss-OYdSNvt2.js +1 -0
- package/dist/client/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/client/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/client/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/client/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/client/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/client/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/client/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/client/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/client/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/client/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/client/assets/solidity-rGO070M0.js +1 -0
- package/dist/client/assets/soy-Brmx7dQM.js +1 -0
- package/dist/client/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/client/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/client/assets/sql-BLtJtn59.js +1 -0
- package/dist/client/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/client/assets/stata-BH5u7GGu.js +1 -0
- package/dist/client/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/client/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/client/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/client/assets/swift-D82vCrfD.js +1 -0
- package/dist/client/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/client/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/client/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/client/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/client/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/client/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/client/assets/templ-P3uqSqPl.js +1 -0
- package/dist/client/assets/terraform-BETggiCN.js +1 -0
- package/dist/client/assets/tex-idrVyKtj.js +1 -0
- package/dist/client/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/client/assets/toml-vGWfd6FD.js +1 -0
- package/dist/client/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/client/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/client/assets/tsx-COt5Ahok.js +1 -0
- package/dist/client/assets/turtle-BsS91CYL.js +1 -0
- package/dist/client/assets/twig-DNn4PbVi.js +1 -0
- package/dist/client/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/client/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/client/assets/typst-DHCkPAjA.js +1 -0
- package/dist/client/assets/v-BcVCzyr7.js +1 -0
- package/dist/client/assets/vala-CsfeWuGM.js +1 -0
- package/dist/client/assets/vb-D17OF-Vu.js +1 -0
- package/dist/client/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/client/assets/vesper-DU1UobuO.js +1 -0
- package/dist/client/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/client/assets/viml-CJc9bBzg.js +1 -0
- package/dist/client/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/client/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/client/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/client/assets/vue-DN_0RTcg.js +1 -0
- package/dist/client/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/client/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/client/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/client/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/client/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/client/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/client/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/client/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/client/assets/wit-5i3qLPDT.js +1 -0
- package/dist/client/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/client/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/client/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/client/assets/yaml-Buea-lGh.js +1 -0
- package/dist/client/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/client/assets/zig-VOosw3JB.js +1 -0
- package/dist/client/chat-sounds/Blow.mp3 +0 -0
- package/dist/client/chat-sounds/Bottle.mp3 +0 -0
- package/dist/client/chat-sounds/Frog.mp3 +0 -0
- package/dist/client/chat-sounds/Funk.mp3 +0 -0
- package/dist/client/chat-sounds/Glass.mp3 +0 -0
- package/dist/client/chat-sounds/Ping.mp3 +0 -0
- package/dist/client/chat-sounds/Pop.mp3 +0 -0
- package/dist/client/chat-sounds/Purr.mp3 +0 -0
- package/dist/client/chat-sounds/Tink.mp3 +0 -0
- package/dist/client/editor-icons/cursor.png +0 -0
- package/dist/client/editor-icons/custom.png +0 -0
- package/dist/client/editor-icons/default-app.png +0 -0
- package/dist/client/editor-icons/finder.png +0 -0
- package/dist/client/editor-icons/preview.png +0 -0
- package/dist/client/editor-icons/terminal.png +0 -0
- package/dist/client/editor-icons/windsurf.png +0 -0
- package/dist/client/editor-icons/xcode.png +0 -0
- package/dist/client/favicon.png +0 -0
- package/dist/client/fonts/body-medium.woff2 +0 -0
- package/dist/client/fonts/body-regular-italic.woff2 +0 -0
- package/dist/client/fonts/body-regular.woff2 +0 -0
- package/dist/client/fonts/body-semibold.woff2 +0 -0
- package/dist/client/icon-192.png +0 -0
- package/dist/client/icon-512.png +0 -0
- package/dist/client/icon-maskable-512.png +0 -0
- package/dist/client/icon.svg +4 -0
- package/dist/client/index.html +34 -0
- package/dist/client/manifest.webmanifest +46 -0
- package/dist/client/screenshot-light.png +0 -0
- package/dist/client/screenshot.png +0 -0
- package/dist/export-viewer/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2 +0 -0
- package/dist/export-viewer/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2 +0 -0
- package/dist/export-viewer/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2 +0 -0
- package/dist/export-viewer/assets/index-D1qUumZR.js +410 -0
- package/dist/export-viewer/assets/index-gG2nMW51.css +1 -0
- package/dist/export-viewer/editor-icons/cursor.png +0 -0
- package/dist/export-viewer/editor-icons/custom.png +0 -0
- package/dist/export-viewer/editor-icons/default-app.png +0 -0
- package/dist/export-viewer/editor-icons/finder.png +0 -0
- package/dist/export-viewer/editor-icons/preview.png +0 -0
- package/dist/export-viewer/editor-icons/terminal.png +0 -0
- package/dist/export-viewer/editor-icons/windsurf.png +0 -0
- package/dist/export-viewer/editor-icons/xcode.png +0 -0
- package/dist/export-viewer/fonts/body-medium.woff2 +0 -0
- package/dist/export-viewer/fonts/body-regular-italic.woff2 +0 -0
- package/dist/export-viewer/fonts/body-regular.woff2 +0 -0
- package/dist/export-viewer/fonts/body-semibold.woff2 +0 -0
- package/dist/export-viewer/index.html +14 -0
- package/package.json +99 -0
- package/src/server/__fixtures__/claude-session-empty.jsonl +0 -0
- package/src/server/__fixtures__/claude-session-malformed.jsonl +3 -0
- package/src/server/__fixtures__/claude-session-valid.jsonl +6 -0
- package/src/server/agent.test.ts +2369 -0
- package/src/server/agent.ts +1927 -0
- package/src/server/analytics.test.ts +313 -0
- package/src/server/analytics.ts +131 -0
- package/src/server/app-settings.test.ts +233 -0
- package/src/server/app-settings.ts +548 -0
- package/src/server/auth.test.ts +329 -0
- package/src/server/auth.ts +204 -0
- package/src/server/auto-continue/e2e.test.ts +215 -0
- package/src/server/auto-continue/events.test.ts +30 -0
- package/src/server/auto-continue/events.ts +35 -0
- package/src/server/auto-continue/limit-detector.test.ts +153 -0
- package/src/server/auto-continue/limit-detector.ts +159 -0
- package/src/server/auto-continue/read-model.test.ts +109 -0
- package/src/server/auto-continue/read-model.ts +83 -0
- package/src/server/auto-continue/schedule-manager.test.ts +155 -0
- package/src/server/auto-continue/schedule-manager.ts +116 -0
- package/src/server/claude-session-importer.test.ts +214 -0
- package/src/server/claude-session-importer.ts +187 -0
- package/src/server/claude-session-mapper.test.ts +88 -0
- package/src/server/claude-session-mapper.ts +106 -0
- package/src/server/claude-session-parser.test.ts +38 -0
- package/src/server/claude-session-parser.ts +67 -0
- package/src/server/claude-session-scanner.test.ts +49 -0
- package/src/server/claude-session-scanner.ts +24 -0
- package/src/server/claude-session-types.ts +61 -0
- package/src/server/cli-runtime.test.ts +523 -0
- package/src/server/cli-runtime.ts +405 -0
- package/src/server/cli-supervisor.ts +102 -0
- package/src/server/cli.ts +64 -0
- package/src/server/cloudflare-tunnel/agent-integration.test.ts +76 -0
- package/src/server/cloudflare-tunnel/agent-integration.ts +55 -0
- package/src/server/cloudflare-tunnel/detector.test.ts +72 -0
- package/src/server/cloudflare-tunnel/detector.ts +44 -0
- package/src/server/cloudflare-tunnel/e2e.test.ts +194 -0
- package/src/server/cloudflare-tunnel/events.test.ts +43 -0
- package/src/server/cloudflare-tunnel/events.ts +31 -0
- package/src/server/cloudflare-tunnel/gateway.ts +143 -0
- package/src/server/cloudflare-tunnel/lifecycle.test.ts +48 -0
- package/src/server/cloudflare-tunnel/lifecycle.ts +62 -0
- package/src/server/cloudflare-tunnel/read-model.test.ts +69 -0
- package/src/server/cloudflare-tunnel/read-model.ts +80 -0
- package/src/server/cloudflare-tunnel/tunnel-manager.test.ts +116 -0
- package/src/server/cloudflare-tunnel/tunnel-manager.ts +165 -0
- package/src/server/codex-app-server-protocol.ts +487 -0
- package/src/server/codex-app-server.test.ts +1816 -0
- package/src/server/codex-app-server.ts +1475 -0
- package/src/server/diff-store.test.ts +737 -0
- package/src/server/diff-store.ts +2199 -0
- package/src/server/discovery.test.ts +211 -0
- package/src/server/discovery.ts +301 -0
- package/src/server/event-store.test.ts +797 -0
- package/src/server/event-store.ts +1421 -0
- package/src/server/events.ts +217 -0
- package/src/server/external-open.test.ts +112 -0
- package/src/server/external-open.ts +345 -0
- package/src/server/generate-commit-message.test.ts +79 -0
- package/src/server/generate-commit-message.ts +126 -0
- package/src/server/generate-title.ts +76 -0
- package/src/server/harness-types.ts +19 -0
- package/src/server/keybindings.test.ts +144 -0
- package/src/server/keybindings.ts +178 -0
- package/src/server/llm-provider.test.ts +134 -0
- package/src/server/llm-provider.ts +207 -0
- package/src/server/machine-name.ts +22 -0
- package/src/server/paths-route.test.ts +64 -0
- package/src/server/paths.ts +35 -0
- package/src/server/process-utils.test.ts +12 -0
- package/src/server/process-utils.ts +47 -0
- package/src/server/project-paths.test.ts +95 -0
- package/src/server/project-paths.ts +191 -0
- package/src/server/provider-catalog.test.ts +69 -0
- package/src/server/provider-catalog.ts +87 -0
- package/src/server/quick-response.test.ts +440 -0
- package/src/server/quick-response.ts +300 -0
- package/src/server/read-models.test.ts +509 -0
- package/src/server/read-models.ts +230 -0
- package/src/server/restart.test.ts +27 -0
- package/src/server/restart.ts +30 -0
- package/src/server/server.ts +616 -0
- package/src/server/share.test.ts +180 -0
- package/src/server/share.ts +150 -0
- package/src/server/standalone-export.test.ts +224 -0
- package/src/server/standalone-export.ts +419 -0
- package/src/server/terminal-manager.test.ts +315 -0
- package/src/server/terminal-manager.ts +350 -0
- package/src/server/test-helpers/async-event-queue.ts +52 -0
- package/src/server/test-helpers/wait-for.ts +14 -0
- package/src/server/title-generation.live.test.ts +44 -0
- package/src/server/update-manager.test.ts +158 -0
- package/src/server/update-manager.ts +222 -0
- package/src/server/update-strategy.test.ts +237 -0
- package/src/server/update-strategy.ts +241 -0
- package/src/server/uploads.test.ts +292 -0
- package/src/server/uploads.ts +131 -0
- package/src/server/ws-router.test.ts +2292 -0
- package/src/server/ws-router.ts +1465 -0
- package/src/shared/analytics.ts +30 -0
- package/src/shared/branding.test.ts +31 -0
- package/src/shared/branding.ts +77 -0
- package/src/shared/dev-ports.test.ts +113 -0
- package/src/shared/dev-ports.ts +134 -0
- package/src/shared/ports.ts +2 -0
- package/src/shared/protocol.ts +257 -0
- package/src/shared/share.ts +27 -0
- package/src/shared/tools.test.ts +164 -0
- package/src/shared/tools.ts +327 -0
- package/src/shared/types.test.ts +25 -0
- package/src/shared/types.ts +1088 -0
|
@@ -0,0 +1,1088 @@
|
|
|
1
|
+
export const STORE_VERSION = 3 as const
|
|
2
|
+
export const PROTOCOL_VERSION = 1 as const
|
|
3
|
+
|
|
4
|
+
export type AgentProvider = "claude" | "codex"
|
|
5
|
+
export type LlmProviderKind = "openai" | "openrouter" | "custom"
|
|
6
|
+
export type AppThemePreference = "light" | "dark" | "system"
|
|
7
|
+
export type ChatSoundPreference = "never" | "unfocused" | "always"
|
|
8
|
+
export type ChatSoundId = "blow" | "bottle" | "frog" | "funk" | "glass" | "ping" | "pop" | "purr" | "tink"
|
|
9
|
+
export type DefaultProviderPreference = "last_used" | AgentProvider
|
|
10
|
+
export type EditorPreset = "cursor" | "vscode" | "xcode" | "windsurf" | "custom"
|
|
11
|
+
export const DEFAULT_OPENAI_SDK_MODEL = "gpt-5.4-mini"
|
|
12
|
+
export const DEFAULT_OPENROUTER_SDK_MODEL = "moonshotai/kimi-k2.5:nitro"
|
|
13
|
+
|
|
14
|
+
export type AttachmentKind = "image" | "file" | "mention"
|
|
15
|
+
export type StandaloneTranscriptAttachmentMode = "metadata" | "bundle"
|
|
16
|
+
export type StandaloneTranscriptTheme = "light" | "dark"
|
|
17
|
+
|
|
18
|
+
export interface ChatAttachment {
|
|
19
|
+
id: string
|
|
20
|
+
kind: AttachmentKind
|
|
21
|
+
displayName: string
|
|
22
|
+
absolutePath: string
|
|
23
|
+
relativePath: string
|
|
24
|
+
contentUrl: string
|
|
25
|
+
mimeType: string
|
|
26
|
+
size: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface StandaloneTranscriptBundle {
|
|
30
|
+
version: 1
|
|
31
|
+
chatId: string
|
|
32
|
+
title: string
|
|
33
|
+
localPath: string
|
|
34
|
+
exportedAt: string
|
|
35
|
+
viewerVersion: string
|
|
36
|
+
theme: StandaloneTranscriptTheme
|
|
37
|
+
attachmentMode: StandaloneTranscriptAttachmentMode
|
|
38
|
+
messages: TranscriptEntry[]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface StandaloneTranscriptExportResult {
|
|
42
|
+
ok: true
|
|
43
|
+
outputDir: string
|
|
44
|
+
indexHtmlPath: string
|
|
45
|
+
transcriptJsonPath: string
|
|
46
|
+
attachmentMode: StandaloneTranscriptAttachmentMode
|
|
47
|
+
totalAttachmentCount: number
|
|
48
|
+
bundledAttachmentCount: number
|
|
49
|
+
shareSlug: string
|
|
50
|
+
shareUrl: string
|
|
51
|
+
uploadedFileCount: number
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface StandaloneTranscriptExportFailureResult {
|
|
55
|
+
ok: false
|
|
56
|
+
error: string
|
|
57
|
+
outputDir: string
|
|
58
|
+
transcriptJsonPath: string
|
|
59
|
+
transcriptFileName: string
|
|
60
|
+
transcriptJson: string
|
|
61
|
+
shareSlug: string
|
|
62
|
+
shareUrl: string
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type StandaloneTranscriptExportCommandResult =
|
|
66
|
+
| StandaloneTranscriptExportResult
|
|
67
|
+
| StandaloneTranscriptExportFailureResult
|
|
68
|
+
|
|
69
|
+
export interface QueuedChatMessage {
|
|
70
|
+
id: string
|
|
71
|
+
content: string
|
|
72
|
+
attachments: ChatAttachment[]
|
|
73
|
+
createdAt: number
|
|
74
|
+
provider?: AgentProvider
|
|
75
|
+
model?: string
|
|
76
|
+
modelOptions?: ModelOptions
|
|
77
|
+
planMode?: boolean
|
|
78
|
+
autoContinue?: { scheduleId: string }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface InternalUserAttachmentsData {
|
|
82
|
+
userText: string
|
|
83
|
+
attachments: ChatAttachment[]
|
|
84
|
+
llmHintText: string
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface ProviderModelOption {
|
|
88
|
+
id: string
|
|
89
|
+
label: string
|
|
90
|
+
supportsEffort: boolean
|
|
91
|
+
aliases?: readonly string[]
|
|
92
|
+
contextWindowOptions?: readonly ProviderContextWindowOption[]
|
|
93
|
+
supportsMaxReasoningEffort?: boolean
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface ProviderEffortOption {
|
|
97
|
+
id: string
|
|
98
|
+
label: string
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface ProviderContextWindowOption {
|
|
102
|
+
id: ClaudeContextWindow
|
|
103
|
+
label: string
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const CLAUDE_REASONING_OPTIONS = [
|
|
107
|
+
{ id: "low", label: "Low" },
|
|
108
|
+
{ id: "medium", label: "Medium" },
|
|
109
|
+
{ id: "high", label: "High" },
|
|
110
|
+
{ id: "max", label: "Max" },
|
|
111
|
+
] as const satisfies readonly ProviderEffortOption[]
|
|
112
|
+
|
|
113
|
+
export const CODEX_REASONING_OPTIONS = [
|
|
114
|
+
{ id: "minimal", label: "Minimal" },
|
|
115
|
+
{ id: "low", label: "Low" },
|
|
116
|
+
{ id: "medium", label: "Medium" },
|
|
117
|
+
{ id: "high", label: "High" },
|
|
118
|
+
{ id: "xhigh", label: "XHigh" },
|
|
119
|
+
] as const satisfies readonly ProviderEffortOption[]
|
|
120
|
+
|
|
121
|
+
export type ClaudeReasoningEffort = (typeof CLAUDE_REASONING_OPTIONS)[number]["id"]
|
|
122
|
+
export type CodexReasoningEffort = (typeof CODEX_REASONING_OPTIONS)[number]["id"]
|
|
123
|
+
export type ClaudeContextWindow = "200k" | "1m"
|
|
124
|
+
export type ServiceTier = "fast"
|
|
125
|
+
|
|
126
|
+
export interface ClaudeModelOptions {
|
|
127
|
+
reasoningEffort: ClaudeReasoningEffort
|
|
128
|
+
contextWindow: ClaudeContextWindow
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface CodexModelOptions {
|
|
132
|
+
reasoningEffort: CodexReasoningEffort
|
|
133
|
+
fastMode: boolean
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export interface ProviderModelOptionsByProvider {
|
|
137
|
+
claude: ClaudeModelOptions
|
|
138
|
+
codex: CodexModelOptions
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export interface ProviderPreference<TModelOptions> {
|
|
142
|
+
model: string
|
|
143
|
+
modelOptions: TModelOptions
|
|
144
|
+
planMode: boolean
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export type ChatProviderPreferences = {
|
|
148
|
+
claude: ProviderPreference<ClaudeModelOptions>
|
|
149
|
+
codex: ProviderPreference<CodexModelOptions>
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export type ModelOptions = Partial<{
|
|
153
|
+
[K in AgentProvider]: Partial<ProviderModelOptionsByProvider[K]>
|
|
154
|
+
}>
|
|
155
|
+
|
|
156
|
+
export const DEFAULT_CLAUDE_MODEL_OPTIONS = {
|
|
157
|
+
reasoningEffort: "high",
|
|
158
|
+
contextWindow: "200k",
|
|
159
|
+
} as const satisfies ClaudeModelOptions
|
|
160
|
+
|
|
161
|
+
export const DEFAULT_CODEX_MODEL_OPTIONS = {
|
|
162
|
+
reasoningEffort: "high",
|
|
163
|
+
fastMode: false,
|
|
164
|
+
} as const satisfies CodexModelOptions
|
|
165
|
+
|
|
166
|
+
export function isClaudeReasoningEffort(value: unknown): value is ClaudeReasoningEffort {
|
|
167
|
+
return CLAUDE_REASONING_OPTIONS.some((option) => option.id === value)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function isCodexReasoningEffort(value: unknown): value is CodexReasoningEffort {
|
|
171
|
+
return CODEX_REASONING_OPTIONS.some((option) => option.id === value)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export const CLAUDE_CONTEXT_WINDOW_OPTIONS = [
|
|
175
|
+
{ id: "200k", label: "200k" },
|
|
176
|
+
{ id: "1m", label: "1M" },
|
|
177
|
+
] as const satisfies readonly ProviderContextWindowOption[]
|
|
178
|
+
|
|
179
|
+
export function isClaudeContextWindow(value: unknown): value is ClaudeContextWindow {
|
|
180
|
+
return CLAUDE_CONTEXT_WINDOW_OPTIONS.some((option) => option.id === value)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface ProviderCatalogEntry {
|
|
184
|
+
id: AgentProvider
|
|
185
|
+
label: string
|
|
186
|
+
defaultModel: string
|
|
187
|
+
defaultEffort?: string
|
|
188
|
+
supportsPlanMode: boolean
|
|
189
|
+
models: ProviderModelOption[]
|
|
190
|
+
efforts: ProviderEffortOption[]
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export const PROVIDERS: ProviderCatalogEntry[] = [
|
|
194
|
+
{
|
|
195
|
+
id: "claude",
|
|
196
|
+
label: "Claude",
|
|
197
|
+
defaultModel: "claude-sonnet-4-6",
|
|
198
|
+
defaultEffort: "high",
|
|
199
|
+
supportsPlanMode: true,
|
|
200
|
+
models: [
|
|
201
|
+
{
|
|
202
|
+
id: "claude-opus-4-7",
|
|
203
|
+
label: "Opus 4.7",
|
|
204
|
+
supportsEffort: true,
|
|
205
|
+
aliases: ["opus"],
|
|
206
|
+
contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS],
|
|
207
|
+
supportsMaxReasoningEffort: true,
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: "claude-sonnet-4-6",
|
|
211
|
+
label: "Sonnet 4.6",
|
|
212
|
+
supportsEffort: true,
|
|
213
|
+
aliases: ["sonnet"],
|
|
214
|
+
contextWindowOptions: [...CLAUDE_CONTEXT_WINDOW_OPTIONS],
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: "claude-haiku-4-5-20251001",
|
|
218
|
+
label: "Haiku 4.5",
|
|
219
|
+
supportsEffort: true,
|
|
220
|
+
aliases: ["haiku"],
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
efforts: [...CLAUDE_REASONING_OPTIONS],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: "codex",
|
|
227
|
+
label: "Codex",
|
|
228
|
+
defaultModel: "gpt-5.5",
|
|
229
|
+
supportsPlanMode: true,
|
|
230
|
+
models: [
|
|
231
|
+
{ id: "gpt-5.5", label: "GPT-5.5", supportsEffort: false },
|
|
232
|
+
{ id: "gpt-5.4", label: "GPT-5.4", supportsEffort: false },
|
|
233
|
+
{ id: "gpt-5.3-codex", label: "GPT-5.3 Codex", supportsEffort: false, aliases: ["gpt-5-codex"] },
|
|
234
|
+
{ id: "gpt-5.3-codex-spark", label: "GPT-5.3 Codex Spark", supportsEffort: false },
|
|
235
|
+
],
|
|
236
|
+
efforts: [],
|
|
237
|
+
},
|
|
238
|
+
]
|
|
239
|
+
|
|
240
|
+
export function getProviderCatalog(provider: AgentProvider): ProviderCatalogEntry {
|
|
241
|
+
const entry = PROVIDERS.find((candidate) => candidate.id === provider)
|
|
242
|
+
if (!entry) {
|
|
243
|
+
throw new Error(`Unknown provider: ${provider}`)
|
|
244
|
+
}
|
|
245
|
+
return entry
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function getProviderModelMatch(provider: AgentProvider, modelId?: string): ProviderModelOption | undefined {
|
|
249
|
+
if (!modelId) return undefined
|
|
250
|
+
|
|
251
|
+
return getProviderCatalog(provider).models.find((candidate) =>
|
|
252
|
+
candidate.id === modelId || candidate.aliases?.includes(modelId)
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export function normalizeProviderModelId(
|
|
257
|
+
provider: AgentProvider,
|
|
258
|
+
modelId?: string,
|
|
259
|
+
fallbackModelId?: string
|
|
260
|
+
): string {
|
|
261
|
+
return getProviderModelMatch(provider, modelId)?.id
|
|
262
|
+
?? fallbackModelId
|
|
263
|
+
?? getProviderCatalog(provider).defaultModel
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export function normalizeClaudeModelId(modelId?: string, fallbackModelId = "claude-opus-4-7"): string {
|
|
267
|
+
return normalizeProviderModelId("claude", modelId, fallbackModelId)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function normalizeCodexModelId(modelId?: string, fallbackModelId = "gpt-5.5"): string {
|
|
271
|
+
return normalizeProviderModelId("codex", modelId, fallbackModelId)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export function getProviderModelOption(provider: AgentProvider, modelId: string): ProviderModelOption | undefined {
|
|
275
|
+
const normalizedModelId = normalizeProviderModelId(provider, modelId)
|
|
276
|
+
return getProviderCatalog(provider).models.find((candidate) => candidate.id === normalizedModelId)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export function getClaudeModelOption(modelId: string): ProviderModelOption | undefined {
|
|
280
|
+
return getProviderModelOption("claude", modelId)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export function supportsClaudeMaxReasoningEffort(modelId: string): boolean {
|
|
284
|
+
return Boolean(getClaudeModelOption(modelId)?.supportsMaxReasoningEffort)
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
export function getClaudeContextWindowOptions(modelId: string): readonly ProviderContextWindowOption[] {
|
|
288
|
+
return getClaudeModelOption(modelId)?.contextWindowOptions ?? []
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export function normalizeClaudeContextWindow(modelId: string, contextWindow?: unknown): ClaudeContextWindow {
|
|
292
|
+
const options = getClaudeContextWindowOptions(modelId)
|
|
293
|
+
if (options.length === 0) return DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow
|
|
294
|
+
return options.some((option) => option.id === contextWindow)
|
|
295
|
+
? contextWindow as ClaudeContextWindow
|
|
296
|
+
: DEFAULT_CLAUDE_MODEL_OPTIONS.contextWindow
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export function resolveClaudeApiModelId(modelId: string, contextWindow?: ClaudeContextWindow): string {
|
|
300
|
+
return contextWindow === "1m" ? `${modelId}[1m]` : modelId
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export function resolveClaudeContextWindowTokens(contextWindow: ClaudeContextWindow): number {
|
|
304
|
+
switch (contextWindow) {
|
|
305
|
+
case "1m":
|
|
306
|
+
return 1_000_000
|
|
307
|
+
case "200k":
|
|
308
|
+
default:
|
|
309
|
+
return 200_000
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export type KannaStatus =
|
|
314
|
+
| "idle"
|
|
315
|
+
| "starting"
|
|
316
|
+
| "running"
|
|
317
|
+
| "waiting_for_user"
|
|
318
|
+
| "failed"
|
|
319
|
+
|
|
320
|
+
export interface ProjectSummary {
|
|
321
|
+
id: string
|
|
322
|
+
localPath: string
|
|
323
|
+
title: string
|
|
324
|
+
createdAt: number
|
|
325
|
+
updatedAt: number
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export interface SidebarChatRow {
|
|
329
|
+
_id: string
|
|
330
|
+
_creationTime: number
|
|
331
|
+
chatId: string
|
|
332
|
+
title: string
|
|
333
|
+
status: KannaStatus
|
|
334
|
+
unread: boolean
|
|
335
|
+
localPath: string
|
|
336
|
+
provider: AgentProvider | null
|
|
337
|
+
lastMessageAt?: number
|
|
338
|
+
hasAutomation: boolean
|
|
339
|
+
canFork?: boolean
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface SidebarProjectGroup {
|
|
343
|
+
groupKey: string
|
|
344
|
+
localPath: string
|
|
345
|
+
chats: SidebarChatRow[]
|
|
346
|
+
previewChats: SidebarChatRow[]
|
|
347
|
+
olderChats: SidebarChatRow[]
|
|
348
|
+
archivedChats?: SidebarChatRow[]
|
|
349
|
+
defaultCollapsed: boolean
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
export interface SidebarData {
|
|
353
|
+
projectGroups: SidebarProjectGroup[]
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export interface LocalProjectSummary {
|
|
357
|
+
localPath: string
|
|
358
|
+
title: string
|
|
359
|
+
source: "saved" | "discovered"
|
|
360
|
+
lastOpenedAt?: number
|
|
361
|
+
chatCount: number
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export interface LocalProjectsSnapshot {
|
|
365
|
+
machine: {
|
|
366
|
+
id: "local"
|
|
367
|
+
displayName: string
|
|
368
|
+
platform: NodeJS.Platform
|
|
369
|
+
}
|
|
370
|
+
projects: LocalProjectSummary[]
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export interface AppSettingsSnapshot {
|
|
374
|
+
analyticsEnabled: boolean
|
|
375
|
+
browserSettingsMigrated: boolean
|
|
376
|
+
theme: AppThemePreference
|
|
377
|
+
chatSoundPreference: ChatSoundPreference
|
|
378
|
+
chatSoundId: ChatSoundId
|
|
379
|
+
terminal: {
|
|
380
|
+
scrollbackLines: number
|
|
381
|
+
minColumnWidth: number
|
|
382
|
+
}
|
|
383
|
+
editor: {
|
|
384
|
+
preset: EditorPreset
|
|
385
|
+
commandTemplate: string
|
|
386
|
+
}
|
|
387
|
+
defaultProvider: DefaultProviderPreference
|
|
388
|
+
providerDefaults: ChatProviderPreferences
|
|
389
|
+
warning: string | null
|
|
390
|
+
filePathDisplay: string
|
|
391
|
+
cloudflareTunnel: CloudflareTunnelSettings
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
export interface AppSettingsPatch {
|
|
395
|
+
analyticsEnabled?: boolean
|
|
396
|
+
browserSettingsMigrated?: boolean
|
|
397
|
+
theme?: AppThemePreference
|
|
398
|
+
chatSoundPreference?: ChatSoundPreference
|
|
399
|
+
chatSoundId?: ChatSoundId
|
|
400
|
+
terminal?: Partial<AppSettingsSnapshot["terminal"]>
|
|
401
|
+
editor?: Partial<AppSettingsSnapshot["editor"]>
|
|
402
|
+
defaultProvider?: DefaultProviderPreference
|
|
403
|
+
providerDefaults?: {
|
|
404
|
+
claude?: Partial<ProviderPreference<ClaudeModelOptions>>
|
|
405
|
+
codex?: Partial<ProviderPreference<CodexModelOptions>>
|
|
406
|
+
}
|
|
407
|
+
cloudflareTunnel?: Partial<CloudflareTunnelSettings>
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export interface LlmProviderFile {
|
|
411
|
+
provider?: LlmProviderKind
|
|
412
|
+
apiKey?: string
|
|
413
|
+
model?: string
|
|
414
|
+
baseUrl?: string | null
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
export interface LlmProviderSnapshot {
|
|
418
|
+
provider: LlmProviderKind
|
|
419
|
+
apiKey: string
|
|
420
|
+
model: string
|
|
421
|
+
baseUrl: string
|
|
422
|
+
resolvedBaseUrl: string
|
|
423
|
+
enabled: boolean
|
|
424
|
+
warning: string | null
|
|
425
|
+
filePathDisplay: string
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
export interface LlmProviderValidationResult {
|
|
429
|
+
ok: boolean
|
|
430
|
+
error: unknown | null
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
export type UpdateStatus =
|
|
434
|
+
| "idle"
|
|
435
|
+
| "checking"
|
|
436
|
+
| "available"
|
|
437
|
+
| "up_to_date"
|
|
438
|
+
| "updating"
|
|
439
|
+
| "restart_pending"
|
|
440
|
+
| "error"
|
|
441
|
+
|
|
442
|
+
export interface UpdateSnapshot {
|
|
443
|
+
currentVersion: string
|
|
444
|
+
latestVersion: string | null
|
|
445
|
+
status: UpdateStatus
|
|
446
|
+
updateAvailable: boolean
|
|
447
|
+
lastCheckedAt: number | null
|
|
448
|
+
error: string | null
|
|
449
|
+
installAction: "restart" | "reload"
|
|
450
|
+
reloadRequestedAt: number | null
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export type UpdateInstallErrorCode =
|
|
454
|
+
| "version_not_live_yet"
|
|
455
|
+
| "install_failed"
|
|
456
|
+
| "command_missing"
|
|
457
|
+
|
|
458
|
+
export interface UpdateInstallResult {
|
|
459
|
+
ok: boolean
|
|
460
|
+
action: "restart" | "reload"
|
|
461
|
+
errorCode: UpdateInstallErrorCode | null
|
|
462
|
+
userTitle: string | null
|
|
463
|
+
userMessage: string | null
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
export type KeybindingAction =
|
|
467
|
+
| "toggleEmbeddedTerminal"
|
|
468
|
+
| "toggleRightSidebar"
|
|
469
|
+
| "openInFinder"
|
|
470
|
+
| "openInEditor"
|
|
471
|
+
| "addSplitTerminal"
|
|
472
|
+
| "jumpToSidebarChat"
|
|
473
|
+
| "createChatInCurrentProject"
|
|
474
|
+
| "openAddProject"
|
|
475
|
+
|
|
476
|
+
export const DEFAULT_KEYBINDINGS: Record<KeybindingAction, string[]> = {
|
|
477
|
+
toggleEmbeddedTerminal: ["cmd+j", "ctrl+`"],
|
|
478
|
+
toggleRightSidebar: ["cmd+b", "ctrl+b"],
|
|
479
|
+
openInFinder: ["cmd+alt+f", "ctrl+alt+f"],
|
|
480
|
+
openInEditor: ["cmd+shift+o", "ctrl+shift+o"],
|
|
481
|
+
addSplitTerminal: ["cmd+/", "ctrl+/"],
|
|
482
|
+
jumpToSidebarChat: ["cmd+alt"],
|
|
483
|
+
createChatInCurrentProject: ["cmd+alt+n"],
|
|
484
|
+
openAddProject: ["cmd+alt+o"],
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
export interface KeybindingsSnapshot {
|
|
488
|
+
bindings: Record<KeybindingAction, string[]>
|
|
489
|
+
warning: string | null
|
|
490
|
+
filePathDisplay: string
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export interface McpServerInfo {
|
|
494
|
+
name: string
|
|
495
|
+
status: string
|
|
496
|
+
error?: string
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
export interface AccountInfo {
|
|
500
|
+
email?: string
|
|
501
|
+
organization?: string
|
|
502
|
+
subscriptionType?: string
|
|
503
|
+
tokenSource?: string
|
|
504
|
+
apiKeySource?: string
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
export interface AskUserQuestionOption {
|
|
508
|
+
label: string
|
|
509
|
+
description?: string
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
export interface AskUserQuestionItem {
|
|
513
|
+
id?: string
|
|
514
|
+
question: string
|
|
515
|
+
header?: string
|
|
516
|
+
options?: AskUserQuestionOption[]
|
|
517
|
+
multiSelect?: boolean
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
export type AskUserQuestionAnswerMap = Record<string, string[]>
|
|
521
|
+
|
|
522
|
+
export interface TodoItem {
|
|
523
|
+
content: string
|
|
524
|
+
status: "pending" | "in_progress" | "completed"
|
|
525
|
+
activeForm: string
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
interface TranscriptEntryBase {
|
|
529
|
+
_id: string
|
|
530
|
+
messageId?: string
|
|
531
|
+
createdAt: number
|
|
532
|
+
hidden?: boolean
|
|
533
|
+
debugRaw?: string
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
interface ToolCallBase<TKind extends string, TInput> {
|
|
537
|
+
kind: "tool"
|
|
538
|
+
toolKind: TKind
|
|
539
|
+
toolName: string
|
|
540
|
+
toolId: string
|
|
541
|
+
input: TInput
|
|
542
|
+
rawInput?: Record<string, unknown>
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export interface AskUserQuestionToolCall
|
|
546
|
+
extends ToolCallBase<"ask_user_question", { questions: AskUserQuestionItem[] }> { }
|
|
547
|
+
|
|
548
|
+
export interface ExitPlanModeToolCall
|
|
549
|
+
extends ToolCallBase<"exit_plan_mode", { plan?: string; summary?: string }> { }
|
|
550
|
+
|
|
551
|
+
export interface TodoWriteToolCall
|
|
552
|
+
extends ToolCallBase<"todo_write", { todos: TodoItem[] }> { }
|
|
553
|
+
|
|
554
|
+
export interface SkillToolCall
|
|
555
|
+
extends ToolCallBase<"skill", { skill: string }> { }
|
|
556
|
+
|
|
557
|
+
export interface GlobToolCall
|
|
558
|
+
extends ToolCallBase<"glob", { pattern: string }> { }
|
|
559
|
+
|
|
560
|
+
export interface GrepToolCall
|
|
561
|
+
extends ToolCallBase<"grep", { pattern: string; outputMode?: string }> { }
|
|
562
|
+
|
|
563
|
+
export interface BashToolCall
|
|
564
|
+
extends ToolCallBase<"bash", { command: string; description?: string; timeoutMs?: number; runInBackground?: boolean }> { }
|
|
565
|
+
|
|
566
|
+
export interface WebSearchToolCall
|
|
567
|
+
extends ToolCallBase<"web_search", { query: string }> { }
|
|
568
|
+
|
|
569
|
+
export interface ReadFileToolCall
|
|
570
|
+
extends ToolCallBase<"read_file", { filePath: string }> { }
|
|
571
|
+
|
|
572
|
+
export interface WriteFileToolCall
|
|
573
|
+
extends ToolCallBase<"write_file", { filePath: string; content: string }> { }
|
|
574
|
+
|
|
575
|
+
export interface EditFileToolCall
|
|
576
|
+
extends ToolCallBase<"edit_file", { filePath: string; oldString: string; newString: string }> { }
|
|
577
|
+
|
|
578
|
+
export interface DeleteFileToolCall
|
|
579
|
+
extends ToolCallBase<"delete_file", { filePath: string; content: string }> { }
|
|
580
|
+
|
|
581
|
+
export interface SubagentTaskToolCall
|
|
582
|
+
extends ToolCallBase<"subagent_task", { subagentType?: string }> { }
|
|
583
|
+
|
|
584
|
+
export interface McpGenericToolCall
|
|
585
|
+
extends ToolCallBase<"mcp_generic", { server: string; tool: string; payload: Record<string, unknown> }> { }
|
|
586
|
+
|
|
587
|
+
export interface UnknownToolCall
|
|
588
|
+
extends ToolCallBase<"unknown_tool", { payload: Record<string, unknown> }> { }
|
|
589
|
+
|
|
590
|
+
export type NormalizedToolCall =
|
|
591
|
+
| AskUserQuestionToolCall
|
|
592
|
+
| ExitPlanModeToolCall
|
|
593
|
+
| TodoWriteToolCall
|
|
594
|
+
| SkillToolCall
|
|
595
|
+
| GlobToolCall
|
|
596
|
+
| GrepToolCall
|
|
597
|
+
| BashToolCall
|
|
598
|
+
| WebSearchToolCall
|
|
599
|
+
| ReadFileToolCall
|
|
600
|
+
| WriteFileToolCall
|
|
601
|
+
| EditFileToolCall
|
|
602
|
+
| DeleteFileToolCall
|
|
603
|
+
| SubagentTaskToolCall
|
|
604
|
+
| McpGenericToolCall
|
|
605
|
+
| UnknownToolCall
|
|
606
|
+
|
|
607
|
+
export interface ToolResultEntry extends TranscriptEntryBase {
|
|
608
|
+
kind: "tool_result"
|
|
609
|
+
toolId: string
|
|
610
|
+
content: unknown
|
|
611
|
+
isError?: boolean
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
export interface UserPromptEntry extends TranscriptEntryBase {
|
|
615
|
+
kind: "user_prompt"
|
|
616
|
+
content: string
|
|
617
|
+
attachments?: ChatAttachment[]
|
|
618
|
+
steered?: boolean
|
|
619
|
+
autoContinue?: { scheduleId: string }
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
export interface SystemInitEntry extends TranscriptEntryBase {
|
|
623
|
+
kind: "system_init"
|
|
624
|
+
provider: AgentProvider
|
|
625
|
+
model: string
|
|
626
|
+
tools: string[]
|
|
627
|
+
agents: string[]
|
|
628
|
+
slashCommands: string[]
|
|
629
|
+
mcpServers: McpServerInfo[]
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
export interface AccountInfoEntry extends TranscriptEntryBase {
|
|
633
|
+
kind: "account_info"
|
|
634
|
+
accountInfo: AccountInfo
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
export interface AssistantTextEntry extends TranscriptEntryBase {
|
|
638
|
+
kind: "assistant_text"
|
|
639
|
+
text: string
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
export interface ToolCallEntry extends TranscriptEntryBase {
|
|
643
|
+
kind: "tool_call"
|
|
644
|
+
tool: NormalizedToolCall
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
export interface ResultEntry extends TranscriptEntryBase {
|
|
648
|
+
kind: "result"
|
|
649
|
+
subtype: "success" | "error" | "cancelled"
|
|
650
|
+
isError: boolean
|
|
651
|
+
durationMs: number
|
|
652
|
+
result: string
|
|
653
|
+
costUsd?: number
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
export interface StatusEntry extends TranscriptEntryBase {
|
|
657
|
+
kind: "status"
|
|
658
|
+
status: string
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
export interface ContextWindowUsageSnapshot {
|
|
662
|
+
usedTokens: number
|
|
663
|
+
totalProcessedTokens?: number
|
|
664
|
+
maxTokens?: number
|
|
665
|
+
inputTokens?: number
|
|
666
|
+
cachedInputTokens?: number
|
|
667
|
+
outputTokens?: number
|
|
668
|
+
reasoningOutputTokens?: number
|
|
669
|
+
lastUsedTokens?: number
|
|
670
|
+
lastInputTokens?: number
|
|
671
|
+
lastCachedInputTokens?: number
|
|
672
|
+
lastOutputTokens?: number
|
|
673
|
+
lastReasoningOutputTokens?: number
|
|
674
|
+
toolUses?: number
|
|
675
|
+
durationMs?: number
|
|
676
|
+
compactsAutomatically: boolean
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
export interface ChatDiffFile {
|
|
680
|
+
path: string
|
|
681
|
+
changeType: "added" | "deleted" | "modified" | "renamed"
|
|
682
|
+
isUntracked: boolean
|
|
683
|
+
additions: number
|
|
684
|
+
deletions: number
|
|
685
|
+
patchDigest: string
|
|
686
|
+
mimeType?: string
|
|
687
|
+
size?: number
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
export interface ChatBranchHistoryEntry {
|
|
691
|
+
sha: string
|
|
692
|
+
summary: string
|
|
693
|
+
description: string
|
|
694
|
+
authorName?: string
|
|
695
|
+
authoredAt: string
|
|
696
|
+
tags: string[]
|
|
697
|
+
githubUrl?: string
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
export interface ChatBranchHistorySnapshot {
|
|
701
|
+
entries: ChatBranchHistoryEntry[]
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
export type ChatBranchListEntryKind = "local" | "remote" | "pull_request"
|
|
705
|
+
|
|
706
|
+
export interface ChatBranchListEntry {
|
|
707
|
+
id: string
|
|
708
|
+
kind: ChatBranchListEntryKind
|
|
709
|
+
name: string
|
|
710
|
+
displayName: string
|
|
711
|
+
updatedAt?: string
|
|
712
|
+
description?: string
|
|
713
|
+
remoteRef?: string
|
|
714
|
+
prNumber?: number
|
|
715
|
+
prTitle?: string
|
|
716
|
+
headRefName?: string
|
|
717
|
+
headLabel?: string
|
|
718
|
+
headRepoCloneUrl?: string
|
|
719
|
+
isCrossRepository?: boolean
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
export interface ChatBranchListResult {
|
|
723
|
+
currentBranchName?: string
|
|
724
|
+
defaultBranchName?: string
|
|
725
|
+
recent: ChatBranchListEntry[]
|
|
726
|
+
local: ChatBranchListEntry[]
|
|
727
|
+
remote: ChatBranchListEntry[]
|
|
728
|
+
pullRequests: ChatBranchListEntry[]
|
|
729
|
+
pullRequestsStatus: "available" | "unavailable" | "error"
|
|
730
|
+
pullRequestsError?: string
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
export interface GitHubPublishInfo {
|
|
734
|
+
ghInstalled: boolean
|
|
735
|
+
authenticated: boolean
|
|
736
|
+
activeAccountLogin?: string
|
|
737
|
+
owners: string[]
|
|
738
|
+
suggestedRepoName: string
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
export interface GitHubRepoAvailabilityResult {
|
|
742
|
+
available: boolean
|
|
743
|
+
message: string
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
export interface BranchMetadata {
|
|
747
|
+
branchName?: string
|
|
748
|
+
defaultBranchName?: string
|
|
749
|
+
hasOriginRemote?: boolean
|
|
750
|
+
originRepoSlug?: string
|
|
751
|
+
hasUpstream?: boolean
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
export interface UpstreamStatus {
|
|
755
|
+
aheadCount?: number
|
|
756
|
+
behindCount?: number
|
|
757
|
+
lastFetchedAt?: string
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
export interface ChatDiffSnapshot extends BranchMetadata, UpstreamStatus {
|
|
761
|
+
status: "unknown" | "ready" | "no_repo"
|
|
762
|
+
files: ChatDiffFile[]
|
|
763
|
+
branchHistory?: ChatBranchHistorySnapshot
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
export interface BranchActionSuccess {
|
|
767
|
+
ok: true
|
|
768
|
+
branchName?: string
|
|
769
|
+
snapshotChanged: boolean
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
export interface BranchActionFailure {
|
|
773
|
+
ok: false
|
|
774
|
+
title: string
|
|
775
|
+
message: string
|
|
776
|
+
detail?: string
|
|
777
|
+
cancelled?: boolean
|
|
778
|
+
snapshotChanged?: boolean
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
export type ChatSyncSuccess = BranchActionSuccess & {
|
|
782
|
+
action: "fetch" | "pull" | "push" | "publish"
|
|
783
|
+
aheadCount?: number
|
|
784
|
+
behindCount?: number
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
export type ChatSyncFailure = BranchActionFailure & {
|
|
788
|
+
action: "fetch" | "pull" | "push" | "publish"
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
export type ChatSyncResult = ChatSyncSuccess | ChatSyncFailure
|
|
792
|
+
|
|
793
|
+
export type DiffCommitMode = "commit_and_push" | "commit_only"
|
|
794
|
+
|
|
795
|
+
export type ChatCheckoutBranchSuccess = BranchActionSuccess
|
|
796
|
+
export type ChatCheckoutBranchFailure = BranchActionFailure
|
|
797
|
+
export type ChatCheckoutBranchResult = ChatCheckoutBranchSuccess | ChatCheckoutBranchFailure
|
|
798
|
+
|
|
799
|
+
export type ChatCreateBranchSuccess = BranchActionSuccess & { branchName: string }
|
|
800
|
+
export type ChatCreateBranchFailure = BranchActionFailure
|
|
801
|
+
export type ChatCreateBranchResult = ChatCreateBranchSuccess | ChatCreateBranchFailure
|
|
802
|
+
|
|
803
|
+
export type ChatMergePreviewStatus = "up_to_date" | "mergeable" | "conflicts" | "error"
|
|
804
|
+
|
|
805
|
+
export interface ChatMergePreviewResult {
|
|
806
|
+
currentBranchName?: string
|
|
807
|
+
targetBranchName: string
|
|
808
|
+
targetDisplayName: string
|
|
809
|
+
status: ChatMergePreviewStatus
|
|
810
|
+
commitCount: number
|
|
811
|
+
hasConflicts: boolean
|
|
812
|
+
message: string
|
|
813
|
+
detail?: string
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
export type ChatMergeBranchSuccess = BranchActionSuccess
|
|
817
|
+
export type ChatMergeBranchFailure = BranchActionFailure
|
|
818
|
+
export type ChatMergeBranchResult = ChatMergeBranchSuccess | ChatMergeBranchFailure
|
|
819
|
+
|
|
820
|
+
export type DiffCommitSuccess = BranchActionSuccess & {
|
|
821
|
+
mode: DiffCommitMode
|
|
822
|
+
pushed: boolean
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
export type DiffCommitFailure = BranchActionFailure & {
|
|
826
|
+
mode: DiffCommitMode
|
|
827
|
+
phase: "commit" | "push"
|
|
828
|
+
localCommitCreated?: boolean
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
export type DiffCommitResult = DiffCommitSuccess | DiffCommitFailure
|
|
832
|
+
|
|
833
|
+
export interface ContextWindowUpdatedEntry extends TranscriptEntryBase {
|
|
834
|
+
kind: "context_window_updated"
|
|
835
|
+
usage: ContextWindowUsageSnapshot
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
export interface CompactBoundaryEntry extends TranscriptEntryBase {
|
|
839
|
+
kind: "compact_boundary"
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
export interface CompactSummaryEntry extends TranscriptEntryBase {
|
|
843
|
+
kind: "compact_summary"
|
|
844
|
+
summary: string
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
export interface ContextClearedEntry extends TranscriptEntryBase {
|
|
848
|
+
kind: "context_cleared"
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
export interface InterruptedEntry extends TranscriptEntryBase {
|
|
852
|
+
kind: "interrupted"
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
export type TranscriptEntry =
|
|
856
|
+
| UserPromptEntry
|
|
857
|
+
| SystemInitEntry
|
|
858
|
+
| AccountInfoEntry
|
|
859
|
+
| AssistantTextEntry
|
|
860
|
+
| ToolCallEntry
|
|
861
|
+
| ToolResultEntry
|
|
862
|
+
| ResultEntry
|
|
863
|
+
| StatusEntry
|
|
864
|
+
| ContextWindowUpdatedEntry
|
|
865
|
+
| CompactBoundaryEntry
|
|
866
|
+
| CompactSummaryEntry
|
|
867
|
+
| ContextClearedEntry
|
|
868
|
+
| InterruptedEntry
|
|
869
|
+
| AutoContinuePromptEntry
|
|
870
|
+
|
|
871
|
+
export interface HydratedToolCallBase<TKind extends string, TInput, TResult> {
|
|
872
|
+
id: string
|
|
873
|
+
messageId?: string
|
|
874
|
+
hidden?: boolean
|
|
875
|
+
kind: "tool"
|
|
876
|
+
toolKind: TKind
|
|
877
|
+
toolName: string
|
|
878
|
+
toolId: string
|
|
879
|
+
input: TInput
|
|
880
|
+
result?: TResult
|
|
881
|
+
rawResult?: unknown
|
|
882
|
+
isError?: boolean
|
|
883
|
+
timestamp: string
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
export interface AskUserQuestionToolResult {
|
|
887
|
+
answers: AskUserQuestionAnswerMap
|
|
888
|
+
discarded?: boolean
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
export interface ExitPlanModeToolResult {
|
|
892
|
+
confirmed?: boolean
|
|
893
|
+
clearContext?: boolean
|
|
894
|
+
message?: string
|
|
895
|
+
discarded?: boolean
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
export type HydratedAskUserQuestionToolCall =
|
|
899
|
+
HydratedToolCallBase<"ask_user_question", AskUserQuestionToolCall["input"], AskUserQuestionToolResult>
|
|
900
|
+
|
|
901
|
+
export type HydratedExitPlanModeToolCall =
|
|
902
|
+
HydratedToolCallBase<"exit_plan_mode", ExitPlanModeToolCall["input"], ExitPlanModeToolResult>
|
|
903
|
+
|
|
904
|
+
export type HydratedTodoWriteToolCall =
|
|
905
|
+
HydratedToolCallBase<"todo_write", TodoWriteToolCall["input"], unknown>
|
|
906
|
+
|
|
907
|
+
export type HydratedSkillToolCall =
|
|
908
|
+
HydratedToolCallBase<"skill", SkillToolCall["input"], unknown>
|
|
909
|
+
|
|
910
|
+
export type HydratedGlobToolCall =
|
|
911
|
+
HydratedToolCallBase<"glob", GlobToolCall["input"], unknown>
|
|
912
|
+
|
|
913
|
+
export type HydratedGrepToolCall =
|
|
914
|
+
HydratedToolCallBase<"grep", GrepToolCall["input"], unknown>
|
|
915
|
+
|
|
916
|
+
export type HydratedBashToolCall =
|
|
917
|
+
HydratedToolCallBase<"bash", BashToolCall["input"], unknown>
|
|
918
|
+
|
|
919
|
+
export type HydratedWebSearchToolCall =
|
|
920
|
+
HydratedToolCallBase<"web_search", WebSearchToolCall["input"], unknown>
|
|
921
|
+
|
|
922
|
+
export interface ReadFileTextBlock {
|
|
923
|
+
type: "text"
|
|
924
|
+
text: string
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
export interface ReadFileImageBlock {
|
|
928
|
+
type: "image"
|
|
929
|
+
data: string
|
|
930
|
+
mimeType?: string
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
export interface ReadFileToolResult {
|
|
934
|
+
content: string
|
|
935
|
+
blocks?: Array<ReadFileTextBlock | ReadFileImageBlock>
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
export type HydratedReadFileToolCall =
|
|
939
|
+
HydratedToolCallBase<"read_file", ReadFileToolCall["input"], ReadFileToolResult | string>
|
|
940
|
+
|
|
941
|
+
export type HydratedWriteFileToolCall =
|
|
942
|
+
HydratedToolCallBase<"write_file", WriteFileToolCall["input"], unknown>
|
|
943
|
+
|
|
944
|
+
export type HydratedEditFileToolCall =
|
|
945
|
+
HydratedToolCallBase<"edit_file", EditFileToolCall["input"], unknown>
|
|
946
|
+
|
|
947
|
+
export type HydratedDeleteFileToolCall =
|
|
948
|
+
HydratedToolCallBase<"delete_file", DeleteFileToolCall["input"], unknown>
|
|
949
|
+
|
|
950
|
+
export type HydratedSubagentTaskToolCall =
|
|
951
|
+
HydratedToolCallBase<"subagent_task", SubagentTaskToolCall["input"], unknown>
|
|
952
|
+
|
|
953
|
+
export type HydratedMcpGenericToolCall =
|
|
954
|
+
HydratedToolCallBase<"mcp_generic", McpGenericToolCall["input"], unknown>
|
|
955
|
+
|
|
956
|
+
export type HydratedUnknownToolCall =
|
|
957
|
+
HydratedToolCallBase<"unknown_tool", UnknownToolCall["input"], unknown>
|
|
958
|
+
|
|
959
|
+
export type HydratedToolCall =
|
|
960
|
+
| HydratedAskUserQuestionToolCall
|
|
961
|
+
| HydratedExitPlanModeToolCall
|
|
962
|
+
| HydratedTodoWriteToolCall
|
|
963
|
+
| HydratedSkillToolCall
|
|
964
|
+
| HydratedGlobToolCall
|
|
965
|
+
| HydratedGrepToolCall
|
|
966
|
+
| HydratedBashToolCall
|
|
967
|
+
| HydratedWebSearchToolCall
|
|
968
|
+
| HydratedReadFileToolCall
|
|
969
|
+
| HydratedWriteFileToolCall
|
|
970
|
+
| HydratedEditFileToolCall
|
|
971
|
+
| HydratedDeleteFileToolCall
|
|
972
|
+
| HydratedSubagentTaskToolCall
|
|
973
|
+
| HydratedMcpGenericToolCall
|
|
974
|
+
| HydratedUnknownToolCall
|
|
975
|
+
|
|
976
|
+
export type HydratedTranscriptMessage =
|
|
977
|
+
| ({ kind: "user_prompt"; content: string; attachments?: ChatAttachment[]; steered?: boolean; autoContinue?: { scheduleId: string }; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
978
|
+
| ({ kind: "system_init"; model: string; tools: string[]; agents: string[]; slashCommands: string[]; mcpServers: McpServerInfo[]; provider: AgentProvider; id: string; messageId?: string; timestamp: string; hidden?: boolean; debugRaw?: string })
|
|
979
|
+
| ({ kind: "account_info"; accountInfo: AccountInfo; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
980
|
+
| ({ kind: "assistant_text"; text: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
981
|
+
| ({ kind: "result"; success: boolean; cancelled?: boolean; result: string; durationMs: number; costUsd?: number; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
982
|
+
| ({ kind: "status"; status: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
983
|
+
| ({ kind: "context_window_updated"; usage: ContextWindowUsageSnapshot; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
984
|
+
| ({ kind: "compact_boundary"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
985
|
+
| ({ kind: "compact_summary"; summary: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
986
|
+
| ({ kind: "context_cleared"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
987
|
+
| ({ kind: "interrupted"; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
988
|
+
| ({ kind: "unknown"; json: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
989
|
+
| ({ kind: "auto_continue_prompt"; scheduleId: string; id: string; messageId?: string; timestamp: string; hidden?: boolean })
|
|
990
|
+
| ({ id: string; messageId?: string; hidden?: boolean } & HydratedToolCall)
|
|
991
|
+
|
|
992
|
+
export interface ChatRuntime {
|
|
993
|
+
chatId: string
|
|
994
|
+
projectId: string
|
|
995
|
+
localPath: string
|
|
996
|
+
title: string
|
|
997
|
+
status: KannaStatus
|
|
998
|
+
isDraining: boolean
|
|
999
|
+
provider: AgentProvider | null
|
|
1000
|
+
planMode: boolean
|
|
1001
|
+
sessionToken: string | null
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
export interface ChatHistorySnapshot {
|
|
1005
|
+
hasOlder: boolean
|
|
1006
|
+
olderCursor: string | null
|
|
1007
|
+
recentLimit: number
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
export interface SlashCommand {
|
|
1011
|
+
name: string
|
|
1012
|
+
description: string
|
|
1013
|
+
argumentHint: string
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
export interface ChatSnapshot {
|
|
1017
|
+
runtime: ChatRuntime
|
|
1018
|
+
queuedMessages: QueuedChatMessage[]
|
|
1019
|
+
messages: TranscriptEntry[]
|
|
1020
|
+
history: ChatHistorySnapshot
|
|
1021
|
+
availableProviders: ProviderCatalogEntry[]
|
|
1022
|
+
slashCommands: SlashCommand[]
|
|
1023
|
+
slashCommandsLoading: boolean
|
|
1024
|
+
schedules: Record<string, AutoContinueSchedule>
|
|
1025
|
+
liveScheduleId: string | null
|
|
1026
|
+
tunnels: Record<string, CloudflareTunnelRecord>
|
|
1027
|
+
liveTunnelId: string | null
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
export interface ChatHistoryPage {
|
|
1031
|
+
messages: TranscriptEntry[]
|
|
1032
|
+
hasOlder: boolean
|
|
1033
|
+
olderCursor: string | null
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
export interface KannaSnapshot {
|
|
1037
|
+
sidebar: SidebarData
|
|
1038
|
+
chat?: ChatSnapshot | null
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
export interface PendingToolSnapshot {
|
|
1042
|
+
toolUseId: string
|
|
1043
|
+
toolKind: "ask_user_question" | "exit_plan_mode"
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
export type AutoContinueScheduleState = "proposed" | "scheduled" | "fired" | "cancelled"
|
|
1047
|
+
|
|
1048
|
+
export interface AutoContinueSchedule {
|
|
1049
|
+
scheduleId: string
|
|
1050
|
+
state: AutoContinueScheduleState
|
|
1051
|
+
scheduledAt: number | null
|
|
1052
|
+
tz: string
|
|
1053
|
+
resetAt: number
|
|
1054
|
+
detectedAt: number
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
export interface AutoContinuePromptEntry extends TranscriptEntryBase {
|
|
1058
|
+
kind: "auto_continue_prompt"
|
|
1059
|
+
scheduleId: string
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
export type CloudflareTunnelMode = "always-ask" | "auto-expose"
|
|
1063
|
+
|
|
1064
|
+
export interface CloudflareTunnelSettings {
|
|
1065
|
+
enabled: boolean
|
|
1066
|
+
cloudflaredPath: string
|
|
1067
|
+
mode: CloudflareTunnelMode
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
export const CLOUDFLARE_TUNNEL_DEFAULTS: CloudflareTunnelSettings = {
|
|
1071
|
+
enabled: false,
|
|
1072
|
+
cloudflaredPath: "cloudflared",
|
|
1073
|
+
mode: "always-ask",
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
export type CloudflareTunnelState = "proposed" | "active" | "stopped" | "failed"
|
|
1077
|
+
|
|
1078
|
+
export interface CloudflareTunnelRecord {
|
|
1079
|
+
tunnelId: string
|
|
1080
|
+
chatId: string
|
|
1081
|
+
port: number
|
|
1082
|
+
state: CloudflareTunnelState
|
|
1083
|
+
url: string | null
|
|
1084
|
+
error: string | null
|
|
1085
|
+
proposedAt: number
|
|
1086
|
+
activatedAt: number | null
|
|
1087
|
+
stoppedAt: number | null
|
|
1088
|
+
}
|