anycodex 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/assets/abap-BdImnpbu.js +1 -0
- package/dist/app/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/app/assets/ada-bCR0ucgS.js +1 -0
- package/dist/app/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/app/assets/angular-html-DA-rfuFy.js +1 -0
- package/dist/app/assets/angular-ts-BrjP3tb8.js +1 -0
- package/dist/app/assets/apache-Pmp26Uib.js +1 -0
- package/dist/app/assets/apex-D8_7TLub.js +1 -0
- package/dist/app/assets/apl-CORt7UWP.js +1 -0
- package/dist/app/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/app/assets/ara-BRHolxvo.js +1 -0
- package/dist/app/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/app/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/app/assets/astro-HNnZUWAn.js +1 -0
- package/dist/app/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/app/assets/awk-DMzUqQB5.js +1 -0
- package/dist/app/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/app/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/app/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/app/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/app/assets/bat-BkioyH1T.js +1 -0
- package/dist/app/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/app/assets/berry-uYugtg8r.js +1 -0
- package/dist/app/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/app/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/app/assets/bird2-BIv1doCn.js +1 -0
- package/dist/app/assets/blade-BjGOyj-B.js +1 -0
- package/dist/app/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/app/assets/c-BIGW1oBm.js +1 -0
- package/dist/app/assets/c3-eo99z4R2.js +1 -0
- package/dist/app/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/app/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/app/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/app/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/app/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/app/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/app/assets/clarity-D53aC0YG.js +1 -0
- package/dist/app/assets/clojure-P80f7IUj.js +1 -0
- package/dist/app/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/app/assets/cobol-nBiQ_Alo.js +1 -0
- package/dist/app/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/app/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/app/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/app/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/app/assets/coq-DkFqJrB1.js +1 -0
- package/dist/app/assets/cpp-CofmeUqb.js +1 -0
- package/dist/app/assets/crystal-DNxU26gB.js +1 -0
- package/dist/app/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/app/assets/css-CLj8gQPS.js +1 -0
- package/dist/app/assets/csv-fuZLfV_i.js +1 -0
- package/dist/app/assets/cue-D82EKSYY.js +1 -0
- package/dist/app/assets/cypher-COkxafJQ.js +1 -0
- package/dist/app/assets/d-85-TOEBH.js +1 -0
- package/dist/app/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/app/assets/dart-bE4Kk8sk.js +1 -0
- package/dist/app/assets/dax-CEL-wOlO.js +1 -0
- package/dist/app/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/app/assets/diff-D97Zzqfu.js +1 -0
- package/dist/app/assets/docker-BcOcwvcX.js +1 -0
- package/dist/app/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/app/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/app/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/app/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/app/assets/edge-FbVlp4U3.js +1 -0
- package/dist/app/assets/elixir-CkH2-t6x.js +1 -0
- package/dist/app/assets/elm-DbKCFpqz.js +1 -0
- package/dist/app/assets/emacs-lisp-CXvaQtF9.js +1 -0
- package/dist/app/assets/erb-BYCe7drp.js +1 -0
- package/dist/app/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/app/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/app/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/app/assets/fennel-BYunw83y.js +1 -0
- package/dist/app/assets/fish-BvzEVeQv.js +1 -0
- package/dist/app/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/app/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/app/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/app/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/app/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/app/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/app/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/app/assets/genie-D0YGMca9.js +1 -0
- package/dist/app/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/app/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/app/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/app/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/app/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/app/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/app/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/app/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/app/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/app/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/app/assets/gleam-BspZqrRM.js +1 -0
- package/dist/app/assets/glimmer-js-ByusRIyA.js +1 -0
- package/dist/app/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/dist/app/assets/glsl-DplSGwfg.js +1 -0
- package/dist/app/assets/gn-n2N0HUVH.js +1 -0
- package/dist/app/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/app/assets/go-C27-OAKa.js +1 -0
- package/dist/app/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/app/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/app/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/app/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/app/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/app/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/app/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/app/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/app/assets/hack-i7_Ulhet.js +1 -0
- package/dist/app/assets/haml-D5jkg6IW.js +1 -0
- package/dist/app/assets/handlebars-BpdQsYii.js +1 -0
- package/dist/app/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/app/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/app/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/app/assets/hjson-D5-asLiD.js +1 -0
- package/dist/app/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/app/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/app/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/dist/app/assets/houston-DnULxvSX.js +1 -0
- package/dist/app/assets/html-derivative-DlHx6ybY.js +1 -0
- package/dist/app/assets/html-pp8916En.js +1 -0
- package/dist/app/assets/http-jrhK8wxY.js +1 -0
- package/dist/app/assets/hurl-irOxFIW8.js +1 -0
- package/dist/app/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/app/assets/hy-DFXneXwc.js +1 -0
- package/dist/app/assets/imba-DGztddWO.js +1 -0
- package/dist/app/assets/index-BBYiZjoU.js +238 -0
- package/dist/app/assets/index-DU8KNBjo.css +32 -0
- package/dist/app/assets/ini-BEwlwnbL.js +1 -0
- package/dist/app/assets/java-CylS5w8V.js +1 -0
- package/dist/app/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/app/assets/jinja-f2NsQr07.js +1 -0
- package/dist/app/assets/jison-wvAkD_A8.js +1 -0
- package/dist/app/assets/json-Cp-IABpG.js +1 -0
- package/dist/app/assets/json5-C9tS-k6U.js +1 -0
- package/dist/app/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/app/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/app/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/app/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/app/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/app/assets/julia-CxzCAyBv.js +1 -0
- package/dist/app/assets/just-VxiPbLrw.js +1 -0
- package/dist/app/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/app/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/app/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/app/assets/kdl-DV7GczEv.js +1 -0
- package/dist/app/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/app/assets/kusto-wEQ09or8.js +1 -0
- package/dist/app/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/app/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/app/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/app/assets/less-B1dDrJ26.js +1 -0
- package/dist/app/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/app/assets/liquid-C0sCDyMI.js +1 -0
- package/dist/app/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/app/assets/log-2UxHyX5q.js +1 -0
- package/dist/app/assets/logo-BtOb2qkB.js +1 -0
- package/dist/app/assets/lua-BaeVxFsk.js +1 -0
- package/dist/app/assets/luau-C-HG3fhB.js +1 -0
- package/dist/app/assets/make-CHLpvVh8.js +1 -0
- package/dist/app/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/app/assets/marko-DjSrsDqO.js +1 -0
- package/dist/app/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/app/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/app/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/app/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/app/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/app/assets/matlab-D7o27uSR.js +1 -0
- package/dist/app/assets/mdc-DTYItulj.js +1 -0
- package/dist/app/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/app/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/app/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/app/assets/min-light-CTRr51gU.js +1 -0
- package/dist/app/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/app/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/app/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/app/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/app/assets/move-IF9eRakj.js +1 -0
- package/dist/app/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/app/assets/nextflow-C-mBbutL.js +1 -0
- package/dist/app/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/dist/app/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/app/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/app/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/app/assets/nim-BIad80T-.js +1 -0
- package/dist/app/assets/nix-CwoSXNpI.js +1 -0
- package/dist/app/assets/nord-Ddv68eIx.js +1 -0
- package/dist/app/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/app/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/app/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/app/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/app/assets/odin-BBf5iR-q.js +1 -0
- package/dist/app/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/app/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/app/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/app/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/app/assets/perl-NvoQZIq0.js +1 -0
- package/dist/app/assets/php-R6g_5hLQ.js +1 -0
- package/dist/app/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/app/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/app/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/app/assets/po-BTJTHyun.js +1 -0
- package/dist/app/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/app/assets/polar-C0HS_06l.js +1 -0
- package/dist/app/assets/postcss-CXtECtnM.js +1 -0
- package/dist/app/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/app/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/app/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/app/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/app/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/app/assets/pug-DKIMFp6K.js +1 -0
- package/dist/app/assets/puppet-BMWR74SV.js +1 -0
- package/dist/app/assets/purescript-CklMAg4u.js +1 -0
- package/dist/app/assets/python-B6aJPvgy.js +1 -0
- package/dist/app/assets/qml-3beO22l8.js +1 -0
- package/dist/app/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/app/assets/qss-IeuSbFQv.js +1 -0
- package/dist/app/assets/r-Dspwwk_N.js +1 -0
- package/dist/app/assets/racket-BqYA7rlc.js +1 -0
- package/dist/app/assets/raku-DXvB9xmW.js +1 -0
- package/dist/app/assets/razor-BDqjjVU7.js +1 -0
- package/dist/app/assets/red-bN70gL4F.js +1 -0
- package/dist/app/assets/reg-C-SQnVFl.js +1 -0
- package/dist/app/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/app/assets/rel-C3B-1QV4.js +1 -0
- package/dist/app/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/app/assets/ron-D8l8udqQ.js +1 -0
- package/dist/app/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/app/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/app/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/app/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/app/assets/rst-CRjBmOyv.js +1 -0
- package/dist/app/assets/ruby-Wjq7vjNf.js +1 -0
- package/dist/app/assets/rust-B1yitclQ.js +1 -0
- package/dist/app/assets/sas-cz2c8ADy.js +1 -0
- package/dist/app/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/app/assets/scala-C151Ov-r.js +1 -0
- package/dist/app/assets/scheme-C98Dy4si.js +1 -0
- package/dist/app/assets/scss-D5BDwBP9.js +1 -0
- package/dist/app/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/app/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/app/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/app/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/app/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/app/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/app/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/app/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/app/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/app/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/app/assets/solidity-rGO070M0.js +1 -0
- package/dist/app/assets/soy-8wufbnw4.js +1 -0
- package/dist/app/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/app/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/app/assets/sql-BLtJtn59.js +1 -0
- package/dist/app/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/app/assets/stata-BH5u7GGu.js +1 -0
- package/dist/app/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/app/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/app/assets/svelte-Cy7k_4gC.js +1 -0
- package/dist/app/assets/swift-D82vCrfD.js +1 -0
- package/dist/app/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/app/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/app/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/app/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/app/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/app/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/app/assets/templ-DhtptRzy.js +1 -0
- package/dist/app/assets/terraform-BETggiCN.js +1 -0
- package/dist/app/assets/tex-idrVyKtj.js +1 -0
- package/dist/app/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/app/assets/toml-vGWfd6FD.js +1 -0
- package/dist/app/assets/ts-tags-DQrlYJgV.js +1 -0
- package/dist/app/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/app/assets/tsx-COt5Ahok.js +1 -0
- package/dist/app/assets/turtle-BsS91CYL.js +1 -0
- package/dist/app/assets/twig-xg9kU7Mw.js +1 -0
- package/dist/app/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/app/assets/typespec-CAFt9gP4.js +1 -0
- package/dist/app/assets/typst-DHCkPAjA.js +1 -0
- package/dist/app/assets/v-BcVCzyr7.js +1 -0
- package/dist/app/assets/vala-CsfeWuGM.js +1 -0
- package/dist/app/assets/vb-D17OF-Vu.js +1 -0
- package/dist/app/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/app/assets/vesper-DU1UobuO.js +1 -0
- package/dist/app/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/app/assets/viml-CJc9bBzg.js +1 -0
- package/dist/app/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/app/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/app/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/app/assets/vue-D2xRrEX4.js +1 -0
- package/dist/app/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/app/assets/vue-vine-BoDAl6tE.js +1 -0
- package/dist/app/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/app/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/app/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/app/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/app/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/app/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/app/assets/wit-5i3qLPDT.js +1 -0
- package/dist/app/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/app/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/app/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/app/assets/yaml-Buea-lGh.js +1 -0
- package/dist/app/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/app/assets/zig-VOosw3JB.js +1 -0
- package/dist/app/index.html +13 -0
- package/dist/bin.js +534 -0
- package/dist/chunk-6DDCZPRP.js +1474 -0
- package/dist/chunk-HULFFF7R.js +25 -0
- package/dist/chunk-KB4MYP36.js +8 -0
- package/dist/chunk-P23NZBHE.js +5130 -0
- package/dist/chunk-TDYQG5PB.js +1621 -0
- package/dist/chunk-XU2SE4LZ.js +3864 -0
- package/dist/chunk-XXVDY7BO.js +53 -0
- package/dist/chunk-ZXPWUU3S.js +110 -0
- package/dist/dist-GBG4FGPZ.js +1806 -0
- package/dist/dist-XGPL3ARQ.js +94 -0
- package/dist/glob-RMMK6FVW-M34I5XTP.js +8 -0
- package/dist/registry-VQVHAEPP-MGYPDXYJ.js +13 -0
- package/dist/schema-SOLWPA3E-CEUVS57H.js +13 -0
- package/dist/session-Q7S3ITUV-CECGQJC5.js +18 -0
- package/dist/storage-YSEEBFV7-N75L4HBF.js +28 -0
- package/package.json +77 -1
- package/index.js +0 -1
|
@@ -0,0 +1,1474 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
Glob
|
|
4
|
+
} from "./chunk-HULFFF7R.js";
|
|
5
|
+
import {
|
|
6
|
+
withStatics
|
|
7
|
+
} from "./chunk-KB4MYP36.js";
|
|
8
|
+
import {
|
|
9
|
+
__callDispose,
|
|
10
|
+
__using
|
|
11
|
+
} from "./chunk-XXVDY7BO.js";
|
|
12
|
+
|
|
13
|
+
// ../agent/dist/chunk-KXKREECS.js
|
|
14
|
+
import { integer as integer3 } from "drizzle-orm/sqlite-core";
|
|
15
|
+
import { Schema } from "effect";
|
|
16
|
+
import z2 from "zod";
|
|
17
|
+
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
18
|
+
import z from "zod";
|
|
19
|
+
import { sqliteTable as sqliteTable2, text as text2, integer as integer2, index, primaryKey } from "drizzle-orm/sqlite-core";
|
|
20
|
+
import z3 from "zod";
|
|
21
|
+
import z4 from "zod";
|
|
22
|
+
import fs from "fs/promises";
|
|
23
|
+
var sep = "/";
|
|
24
|
+
function join(...parts) {
|
|
25
|
+
const joined = parts.filter(Boolean).join("/");
|
|
26
|
+
return normalize(joined);
|
|
27
|
+
}
|
|
28
|
+
function dirname(p) {
|
|
29
|
+
if (!p) return ".";
|
|
30
|
+
const i = p.lastIndexOf("/");
|
|
31
|
+
if (i < 0) return ".";
|
|
32
|
+
if (i === 0) return "/";
|
|
33
|
+
return p.slice(0, i);
|
|
34
|
+
}
|
|
35
|
+
function basename(p, ext) {
|
|
36
|
+
if (p.endsWith("/")) p = p.slice(0, -1);
|
|
37
|
+
const i = p.lastIndexOf("/");
|
|
38
|
+
const base = i < 0 ? p : p.slice(i + 1);
|
|
39
|
+
if (ext && base.endsWith(ext)) return base.slice(0, -ext.length);
|
|
40
|
+
return base;
|
|
41
|
+
}
|
|
42
|
+
function extname(p) {
|
|
43
|
+
const base = basename(p);
|
|
44
|
+
const i = base.lastIndexOf(".");
|
|
45
|
+
if (i <= 0) return "";
|
|
46
|
+
return base.slice(i);
|
|
47
|
+
}
|
|
48
|
+
function isAbsolute(p) {
|
|
49
|
+
return p.startsWith("/");
|
|
50
|
+
}
|
|
51
|
+
function normalize(p) {
|
|
52
|
+
if (!p) return ".";
|
|
53
|
+
const isAbs = p.startsWith("/");
|
|
54
|
+
const segments = p.split("/");
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const s of segments) {
|
|
57
|
+
if (s === "" || s === ".") continue;
|
|
58
|
+
if (s === "..") {
|
|
59
|
+
if (out.length > 0 && out[out.length - 1] !== "..") {
|
|
60
|
+
out.pop();
|
|
61
|
+
} else if (!isAbs) {
|
|
62
|
+
out.push("..");
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
out.push(s);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const result = out.join("/");
|
|
69
|
+
if (isAbs) return "/" + result;
|
|
70
|
+
return result || ".";
|
|
71
|
+
}
|
|
72
|
+
function relative(from, to) {
|
|
73
|
+
from = normalize(from);
|
|
74
|
+
to = normalize(to);
|
|
75
|
+
if (from === to) return "";
|
|
76
|
+
const fromParts = from.split("/").filter(Boolean);
|
|
77
|
+
const toParts = to.split("/").filter(Boolean);
|
|
78
|
+
let common = 0;
|
|
79
|
+
while (common < fromParts.length && common < toParts.length && fromParts[common] === toParts[common]) {
|
|
80
|
+
common++;
|
|
81
|
+
}
|
|
82
|
+
const ups = fromParts.length - common;
|
|
83
|
+
const downs = toParts.slice(common);
|
|
84
|
+
const parts = [...Array(ups).fill(".."), ...downs];
|
|
85
|
+
return parts.join("/") || ".";
|
|
86
|
+
}
|
|
87
|
+
function resolve(...parts) {
|
|
88
|
+
let resolved = "";
|
|
89
|
+
for (let i = parts.length - 1; i >= 0; i--) {
|
|
90
|
+
const part = parts[i];
|
|
91
|
+
if (!part) continue;
|
|
92
|
+
resolved = resolved ? part + "/" + resolved : part;
|
|
93
|
+
if (isAbsolute(part)) break;
|
|
94
|
+
}
|
|
95
|
+
return normalize(resolved);
|
|
96
|
+
}
|
|
97
|
+
var Filesystem;
|
|
98
|
+
((Filesystem2) => {
|
|
99
|
+
async function exists(context, p) {
|
|
100
|
+
return context.fs.exists(p);
|
|
101
|
+
}
|
|
102
|
+
Filesystem2.exists = exists;
|
|
103
|
+
async function isDir(context, p) {
|
|
104
|
+
const s = await context.fs.stat(p);
|
|
105
|
+
return s?.isDirectory ?? false;
|
|
106
|
+
}
|
|
107
|
+
Filesystem2.isDir = isDir;
|
|
108
|
+
async function stat(context, p) {
|
|
109
|
+
return context.fs.stat(p);
|
|
110
|
+
}
|
|
111
|
+
Filesystem2.stat = stat;
|
|
112
|
+
async function size(context, p) {
|
|
113
|
+
const s = await context.fs.stat(p);
|
|
114
|
+
return s?.size ?? 0;
|
|
115
|
+
}
|
|
116
|
+
Filesystem2.size = size;
|
|
117
|
+
async function readText(context, p) {
|
|
118
|
+
return context.fs.readText(p);
|
|
119
|
+
}
|
|
120
|
+
Filesystem2.readText = readText;
|
|
121
|
+
async function readJson(context, p) {
|
|
122
|
+
return JSON.parse(await readText(context, p));
|
|
123
|
+
}
|
|
124
|
+
Filesystem2.readJson = readJson;
|
|
125
|
+
async function readBytes(context, p) {
|
|
126
|
+
return context.fs.readBytes(p);
|
|
127
|
+
}
|
|
128
|
+
Filesystem2.readBytes = readBytes;
|
|
129
|
+
async function readArrayBuffer(context, p) {
|
|
130
|
+
const bytes = await readBytes(context, p);
|
|
131
|
+
return bytes.buffer;
|
|
132
|
+
}
|
|
133
|
+
Filesystem2.readArrayBuffer = readArrayBuffer;
|
|
134
|
+
async function write(context, p, content) {
|
|
135
|
+
return context.fs.write(p, content);
|
|
136
|
+
}
|
|
137
|
+
Filesystem2.write = write;
|
|
138
|
+
async function writeJson(context, p, data) {
|
|
139
|
+
return write(context, p, JSON.stringify(data, null, 2));
|
|
140
|
+
}
|
|
141
|
+
Filesystem2.writeJson = writeJson;
|
|
142
|
+
async function mkdir(context, p) {
|
|
143
|
+
return context.fs.mkdir(p);
|
|
144
|
+
}
|
|
145
|
+
Filesystem2.mkdir = mkdir;
|
|
146
|
+
async function remove(context, p) {
|
|
147
|
+
return context.fs.remove(p);
|
|
148
|
+
}
|
|
149
|
+
Filesystem2.remove = remove;
|
|
150
|
+
const MIME_MAP = {
|
|
151
|
+
".html": "text/html",
|
|
152
|
+
".css": "text/css",
|
|
153
|
+
".js": "application/javascript",
|
|
154
|
+
".mjs": "application/javascript",
|
|
155
|
+
".json": "application/json",
|
|
156
|
+
".ts": "text/typescript",
|
|
157
|
+
".tsx": "text/typescript",
|
|
158
|
+
".jsx": "text/javascript",
|
|
159
|
+
".md": "text/markdown",
|
|
160
|
+
".txt": "text/plain",
|
|
161
|
+
".csv": "text/csv",
|
|
162
|
+
".xml": "application/xml",
|
|
163
|
+
".yaml": "text/yaml",
|
|
164
|
+
".yml": "text/yaml",
|
|
165
|
+
".toml": "text/plain",
|
|
166
|
+
".svg": "image/svg+xml",
|
|
167
|
+
".png": "image/png",
|
|
168
|
+
".jpg": "image/jpeg",
|
|
169
|
+
".jpeg": "image/jpeg",
|
|
170
|
+
".gif": "image/gif",
|
|
171
|
+
".webp": "image/webp",
|
|
172
|
+
".ico": "image/x-icon",
|
|
173
|
+
".pdf": "application/pdf",
|
|
174
|
+
".zip": "application/zip",
|
|
175
|
+
".gz": "application/gzip",
|
|
176
|
+
".wasm": "application/wasm",
|
|
177
|
+
".mp4": "video/mp4",
|
|
178
|
+
".webm": "video/webm",
|
|
179
|
+
".mp3": "audio/mpeg",
|
|
180
|
+
".sh": "text/x-shellscript",
|
|
181
|
+
".py": "text/x-python",
|
|
182
|
+
".rb": "text/x-ruby",
|
|
183
|
+
".go": "text/x-go",
|
|
184
|
+
".rs": "text/x-rust",
|
|
185
|
+
".java": "text/x-java",
|
|
186
|
+
".c": "text/x-c",
|
|
187
|
+
".cpp": "text/x-c++",
|
|
188
|
+
".h": "text/x-c",
|
|
189
|
+
".hpp": "text/x-c++"
|
|
190
|
+
};
|
|
191
|
+
function mimeType(p) {
|
|
192
|
+
return MIME_MAP[extname(p).toLowerCase()] || "application/octet-stream";
|
|
193
|
+
}
|
|
194
|
+
Filesystem2.mimeType = mimeType;
|
|
195
|
+
function resolve2(p) {
|
|
196
|
+
return resolve(p);
|
|
197
|
+
}
|
|
198
|
+
Filesystem2.resolve = resolve2;
|
|
199
|
+
function overlaps(a, b) {
|
|
200
|
+
const relA = relative(a, b);
|
|
201
|
+
const relB = relative(b, a);
|
|
202
|
+
return !relA || !relA.startsWith("..") || !relB || !relB.startsWith("..");
|
|
203
|
+
}
|
|
204
|
+
Filesystem2.overlaps = overlaps;
|
|
205
|
+
function contains(parent, child) {
|
|
206
|
+
return !relative(parent, child).startsWith("..");
|
|
207
|
+
}
|
|
208
|
+
Filesystem2.contains = contains;
|
|
209
|
+
async function findUp(context, target, start, stop) {
|
|
210
|
+
let current = start;
|
|
211
|
+
const result = [];
|
|
212
|
+
while (true) {
|
|
213
|
+
const search = join(current, target);
|
|
214
|
+
if (await exists(context, search)) result.push(search);
|
|
215
|
+
if (stop === current) break;
|
|
216
|
+
const parent = dirname(current);
|
|
217
|
+
if (parent === current) break;
|
|
218
|
+
current = parent;
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
Filesystem2.findUp = findUp;
|
|
223
|
+
async function* up(context, options) {
|
|
224
|
+
const { targets, start, stop } = options;
|
|
225
|
+
let current = start;
|
|
226
|
+
while (true) {
|
|
227
|
+
for (const target of targets) {
|
|
228
|
+
const search = join(current, target);
|
|
229
|
+
if (await exists(context, search)) yield search;
|
|
230
|
+
}
|
|
231
|
+
if (stop === current) break;
|
|
232
|
+
const parent = dirname(current);
|
|
233
|
+
if (parent === current) break;
|
|
234
|
+
current = parent;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
Filesystem2.up = up;
|
|
238
|
+
async function globUp(context, pattern, start, stop) {
|
|
239
|
+
let current = start;
|
|
240
|
+
const result = [];
|
|
241
|
+
while (true) {
|
|
242
|
+
try {
|
|
243
|
+
const { Glob: Glob2 } = await import("./glob-RMMK6FVW-M34I5XTP.js");
|
|
244
|
+
const matches = await Glob2.scan(context, pattern, {
|
|
245
|
+
cwd: current,
|
|
246
|
+
absolute: true,
|
|
247
|
+
include: "file",
|
|
248
|
+
dot: true
|
|
249
|
+
});
|
|
250
|
+
result.push(...matches);
|
|
251
|
+
} catch {
|
|
252
|
+
}
|
|
253
|
+
if (stop === current) break;
|
|
254
|
+
const parent = dirname(current);
|
|
255
|
+
if (parent === current) break;
|
|
256
|
+
current = parent;
|
|
257
|
+
}
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
Filesystem2.globUp = globUp;
|
|
261
|
+
})(Filesystem || (Filesystem = {}));
|
|
262
|
+
var Log;
|
|
263
|
+
((Log2) => {
|
|
264
|
+
Log2.Level = z.enum(["DEBUG", "INFO", "WARN", "ERROR"]).meta({ ref: "LogLevel", description: "Log level" });
|
|
265
|
+
const levelPriority = {
|
|
266
|
+
DEBUG: 0,
|
|
267
|
+
INFO: 1,
|
|
268
|
+
WARN: 2,
|
|
269
|
+
ERROR: 3
|
|
270
|
+
};
|
|
271
|
+
let level = "INFO";
|
|
272
|
+
function shouldLog(input) {
|
|
273
|
+
return levelPriority[input] >= levelPriority[level];
|
|
274
|
+
}
|
|
275
|
+
const loggers = /* @__PURE__ */ new Map();
|
|
276
|
+
Log2.Default = create({ service: "default" });
|
|
277
|
+
let write = (msg) => {
|
|
278
|
+
console.error(msg);
|
|
279
|
+
return msg.length;
|
|
280
|
+
};
|
|
281
|
+
async function init(options) {
|
|
282
|
+
if (options.level) level = options.level;
|
|
283
|
+
if (options.writer) {
|
|
284
|
+
write = (msg) => {
|
|
285
|
+
options.writer(msg);
|
|
286
|
+
return msg.length;
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
Log2.init = init;
|
|
291
|
+
function formatError(error, depth = 0) {
|
|
292
|
+
const result = error.message;
|
|
293
|
+
return error.cause instanceof Error && depth < 10 ? result + " Caused by: " + formatError(error.cause, depth + 1) : result;
|
|
294
|
+
}
|
|
295
|
+
let last = Date.now();
|
|
296
|
+
function create(tags) {
|
|
297
|
+
tags = tags || {};
|
|
298
|
+
const service = tags["service"];
|
|
299
|
+
if (service && typeof service === "string") {
|
|
300
|
+
const cached = loggers.get(service);
|
|
301
|
+
if (cached) {
|
|
302
|
+
return cached;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function build(message, extra) {
|
|
306
|
+
const prefix = Object.entries({
|
|
307
|
+
...tags,
|
|
308
|
+
...extra
|
|
309
|
+
}).filter(([_, value]) => value !== void 0 && value !== null).map(([key, value]) => {
|
|
310
|
+
const prefix2 = `${key}=`;
|
|
311
|
+
if (value instanceof Error) return prefix2 + formatError(value);
|
|
312
|
+
if (typeof value === "object") return prefix2 + JSON.stringify(value);
|
|
313
|
+
return prefix2 + value;
|
|
314
|
+
}).join(" ");
|
|
315
|
+
const next = /* @__PURE__ */ new Date();
|
|
316
|
+
const diff = next.getTime() - last;
|
|
317
|
+
last = next.getTime();
|
|
318
|
+
return [next.toISOString().split(".")[0], "+" + diff + "ms", prefix, message].filter(Boolean).join(" ") + "\n";
|
|
319
|
+
}
|
|
320
|
+
const result = {
|
|
321
|
+
debug(message, extra) {
|
|
322
|
+
if (shouldLog("DEBUG")) {
|
|
323
|
+
write("DEBUG " + build(message, extra));
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
info(message, extra) {
|
|
327
|
+
if (shouldLog("INFO")) {
|
|
328
|
+
write("INFO " + build(message, extra));
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
error(message, extra) {
|
|
332
|
+
if (shouldLog("ERROR")) {
|
|
333
|
+
write("ERROR " + build(message, extra));
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
warn(message, extra) {
|
|
337
|
+
if (shouldLog("WARN")) {
|
|
338
|
+
write("WARN " + build(message, extra));
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
tag(key, value) {
|
|
342
|
+
if (tags) tags[key] = value;
|
|
343
|
+
return result;
|
|
344
|
+
},
|
|
345
|
+
clone() {
|
|
346
|
+
return Log2.create({ ...tags });
|
|
347
|
+
},
|
|
348
|
+
time(message, extra) {
|
|
349
|
+
const now = Date.now();
|
|
350
|
+
result.info(message, { status: "started", ...extra });
|
|
351
|
+
function stop() {
|
|
352
|
+
result.info(message, {
|
|
353
|
+
status: "completed",
|
|
354
|
+
duration: Date.now() - now,
|
|
355
|
+
...extra
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
stop,
|
|
360
|
+
[Symbol.dispose]() {
|
|
361
|
+
stop();
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
if (service && typeof service === "string") {
|
|
367
|
+
loggers.set(service, result);
|
|
368
|
+
}
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
Log2.create = create;
|
|
372
|
+
})(Log || (Log = {}));
|
|
373
|
+
var _env = {};
|
|
374
|
+
function truthy(key) {
|
|
375
|
+
const value = _env[key]?.toLowerCase();
|
|
376
|
+
return value === "true" || value === "1";
|
|
377
|
+
}
|
|
378
|
+
function falsy(key) {
|
|
379
|
+
const value = _env[key]?.toLowerCase();
|
|
380
|
+
return value === "false" || value === "0";
|
|
381
|
+
}
|
|
382
|
+
function number(key) {
|
|
383
|
+
const value = _env[key];
|
|
384
|
+
if (!value) return void 0;
|
|
385
|
+
const parsed = Number(value);
|
|
386
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : void 0;
|
|
387
|
+
}
|
|
388
|
+
var Flag;
|
|
389
|
+
((Flag2) => {
|
|
390
|
+
function init(env) {
|
|
391
|
+
_env = env;
|
|
392
|
+
Flag2.OPENCODE_AUTO_SHARE = truthy("OPENCODE_AUTO_SHARE");
|
|
393
|
+
Flag2.OPENCODE_GIT_BASH_PATH = _env["OPENCODE_GIT_BASH_PATH"];
|
|
394
|
+
Flag2.OPENCODE_CONFIG = _env["OPENCODE_CONFIG"];
|
|
395
|
+
Flag2.OPENCODE_CONFIG_CONTENT = _env["OPENCODE_CONFIG_CONTENT"];
|
|
396
|
+
Flag2.OPENCODE_DISABLE_AUTOUPDATE = truthy("OPENCODE_DISABLE_AUTOUPDATE");
|
|
397
|
+
Flag2.OPENCODE_DISABLE_PRUNE = truthy("OPENCODE_DISABLE_PRUNE");
|
|
398
|
+
Flag2.OPENCODE_DISABLE_TERMINAL_TITLE = truthy("OPENCODE_DISABLE_TERMINAL_TITLE");
|
|
399
|
+
Flag2.OPENCODE_PERMISSION = _env["OPENCODE_PERMISSION"];
|
|
400
|
+
Flag2.OPENCODE_DISABLE_DEFAULT_PLUGINS = truthy("OPENCODE_DISABLE_DEFAULT_PLUGINS");
|
|
401
|
+
Flag2.OPENCODE_DISABLE_LSP_DOWNLOAD = truthy("OPENCODE_DISABLE_LSP_DOWNLOAD");
|
|
402
|
+
Flag2.OPENCODE_ENABLE_EXPERIMENTAL_MODELS = truthy("OPENCODE_ENABLE_EXPERIMENTAL_MODELS");
|
|
403
|
+
Flag2.OPENCODE_DISABLE_AUTOCOMPACT = truthy("OPENCODE_DISABLE_AUTOCOMPACT");
|
|
404
|
+
Flag2.OPENCODE_DISABLE_MODELS_FETCH = truthy("OPENCODE_DISABLE_MODELS_FETCH");
|
|
405
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE = truthy("OPENCODE_DISABLE_CLAUDE_CODE");
|
|
406
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT = Flag2.OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT");
|
|
407
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS = Flag2.OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS");
|
|
408
|
+
Flag2.OPENCODE_DISABLE_EXTERNAL_SKILLS = Flag2.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS || truthy("OPENCODE_DISABLE_EXTERNAL_SKILLS");
|
|
409
|
+
Flag2.OPENCODE_FAKE_VCS = _env["OPENCODE_FAKE_VCS"];
|
|
410
|
+
Flag2.OPENCODE_SERVER_PASSWORD = _env["OPENCODE_SERVER_PASSWORD"];
|
|
411
|
+
Flag2.OPENCODE_SERVER_USERNAME = _env["OPENCODE_SERVER_USERNAME"];
|
|
412
|
+
Flag2.OPENCODE_ENABLE_QUESTION_TOOL = truthy("OPENCODE_ENABLE_QUESTION_TOOL");
|
|
413
|
+
Flag2.OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL");
|
|
414
|
+
Flag2.OPENCODE_EXPERIMENTAL_FILEWATCHER = truthy("OPENCODE_EXPERIMENTAL_FILEWATCHER");
|
|
415
|
+
Flag2.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = truthy("OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER");
|
|
416
|
+
Flag2.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY = Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY");
|
|
417
|
+
Flag2.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT = (() => {
|
|
418
|
+
const copy = _env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"];
|
|
419
|
+
return copy === void 0 ? false : truthy("OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT");
|
|
420
|
+
})();
|
|
421
|
+
Flag2.OPENCODE_ENABLE_EXA = truthy("OPENCODE_ENABLE_EXA") || Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_EXA");
|
|
422
|
+
Flag2.OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS = number("OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS");
|
|
423
|
+
Flag2.OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX = number("OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX");
|
|
424
|
+
Flag2.OPENCODE_EXPERIMENTAL_OXFMT = Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_OXFMT");
|
|
425
|
+
Flag2.OPENCODE_EXPERIMENTAL_LSP_TY = truthy("OPENCODE_EXPERIMENTAL_LSP_TY");
|
|
426
|
+
Flag2.OPENCODE_EXPERIMENTAL_LSP_TOOL = Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_LSP_TOOL");
|
|
427
|
+
Flag2.OPENCODE_DISABLE_FILETIME_CHECK = truthy("OPENCODE_DISABLE_FILETIME_CHECK");
|
|
428
|
+
Flag2.OPENCODE_EXPERIMENTAL_PLAN_MODE = Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE");
|
|
429
|
+
Flag2.OPENCODE_EXPERIMENTAL_WORKSPACES = Flag2.OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WORKSPACES");
|
|
430
|
+
Flag2.OPENCODE_EXPERIMENTAL_MARKDOWN = !falsy("OPENCODE_EXPERIMENTAL_MARKDOWN");
|
|
431
|
+
Flag2.OPENCODE_MODELS_URL = _env["OPENCODE_MODELS_URL"];
|
|
432
|
+
Flag2.OPENCODE_MODELS_PATH = _env["OPENCODE_MODELS_PATH"];
|
|
433
|
+
Flag2.OPENCODE_DISABLE_CHANNEL_DB = truthy("OPENCODE_DISABLE_CHANNEL_DB");
|
|
434
|
+
Flag2.OPENCODE_SKIP_MIGRATIONS = truthy("OPENCODE_SKIP_MIGRATIONS");
|
|
435
|
+
Flag2.OPENCODE_STRICT_CONFIG_DEPS = truthy("OPENCODE_STRICT_CONFIG_DEPS");
|
|
436
|
+
}
|
|
437
|
+
Flag2.init = init;
|
|
438
|
+
Flag2.OPENCODE_AUTO_SHARE = false;
|
|
439
|
+
Flag2.OPENCODE_DISABLE_AUTOUPDATE = false;
|
|
440
|
+
Flag2.OPENCODE_DISABLE_PRUNE = false;
|
|
441
|
+
Flag2.OPENCODE_DISABLE_TERMINAL_TITLE = false;
|
|
442
|
+
Flag2.OPENCODE_DISABLE_DEFAULT_PLUGINS = false;
|
|
443
|
+
Flag2.OPENCODE_DISABLE_LSP_DOWNLOAD = false;
|
|
444
|
+
Flag2.OPENCODE_ENABLE_EXPERIMENTAL_MODELS = false;
|
|
445
|
+
Flag2.OPENCODE_DISABLE_AUTOCOMPACT = false;
|
|
446
|
+
Flag2.OPENCODE_DISABLE_MODELS_FETCH = false;
|
|
447
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE = false;
|
|
448
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE_PROMPT = false;
|
|
449
|
+
Flag2.OPENCODE_DISABLE_CLAUDE_CODE_SKILLS = false;
|
|
450
|
+
Flag2.OPENCODE_DISABLE_EXTERNAL_SKILLS = false;
|
|
451
|
+
Flag2.OPENCODE_ENABLE_QUESTION_TOOL = false;
|
|
452
|
+
Flag2.OPENCODE_EXPERIMENTAL = false;
|
|
453
|
+
Flag2.OPENCODE_EXPERIMENTAL_FILEWATCHER = false;
|
|
454
|
+
Flag2.OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER = false;
|
|
455
|
+
Flag2.OPENCODE_EXPERIMENTAL_ICON_DISCOVERY = false;
|
|
456
|
+
Flag2.OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT = false;
|
|
457
|
+
Flag2.OPENCODE_ENABLE_EXA = false;
|
|
458
|
+
Flag2.OPENCODE_EXPERIMENTAL_OXFMT = false;
|
|
459
|
+
Flag2.OPENCODE_EXPERIMENTAL_LSP_TY = false;
|
|
460
|
+
Flag2.OPENCODE_EXPERIMENTAL_LSP_TOOL = false;
|
|
461
|
+
Flag2.OPENCODE_DISABLE_FILETIME_CHECK = false;
|
|
462
|
+
Flag2.OPENCODE_EXPERIMENTAL_PLAN_MODE = false;
|
|
463
|
+
Flag2.OPENCODE_EXPERIMENTAL_WORKSPACES = false;
|
|
464
|
+
Flag2.OPENCODE_EXPERIMENTAL_MARKDOWN = true;
|
|
465
|
+
Flag2.OPENCODE_DISABLE_CHANNEL_DB = false;
|
|
466
|
+
Flag2.OPENCODE_SKIP_MIGRATIONS = false;
|
|
467
|
+
Flag2.OPENCODE_STRICT_CONFIG_DEPS = false;
|
|
468
|
+
})(Flag || (Flag = {}));
|
|
469
|
+
Object.defineProperty(Flag, "OPENCODE_DISABLE_PROJECT_CONFIG", {
|
|
470
|
+
get() {
|
|
471
|
+
return truthy("OPENCODE_DISABLE_PROJECT_CONFIG");
|
|
472
|
+
},
|
|
473
|
+
enumerable: true,
|
|
474
|
+
configurable: false
|
|
475
|
+
});
|
|
476
|
+
Object.defineProperty(Flag, "OPENCODE_TUI_CONFIG", {
|
|
477
|
+
get() {
|
|
478
|
+
return _env["OPENCODE_TUI_CONFIG"];
|
|
479
|
+
},
|
|
480
|
+
enumerable: true,
|
|
481
|
+
configurable: false
|
|
482
|
+
});
|
|
483
|
+
Object.defineProperty(Flag, "OPENCODE_CONFIG_DIR", {
|
|
484
|
+
get() {
|
|
485
|
+
return _env["OPENCODE_CONFIG_DIR"];
|
|
486
|
+
},
|
|
487
|
+
enumerable: true,
|
|
488
|
+
configurable: false
|
|
489
|
+
});
|
|
490
|
+
Object.defineProperty(Flag, "OPENCODE_CLIENT", {
|
|
491
|
+
get() {
|
|
492
|
+
return _env["OPENCODE_CLIENT"] ?? "cli";
|
|
493
|
+
},
|
|
494
|
+
enumerable: true,
|
|
495
|
+
configurable: false
|
|
496
|
+
});
|
|
497
|
+
var projectIdSchema = Schema.String.pipe(Schema.brand("ProjectID"));
|
|
498
|
+
var ProjectID = projectIdSchema.pipe(
|
|
499
|
+
withStatics((schema) => ({
|
|
500
|
+
global: schema.makeUnsafe("global"),
|
|
501
|
+
make: (id) => schema.makeUnsafe(id),
|
|
502
|
+
zod: z2.string().pipe(z2.custom())
|
|
503
|
+
}))
|
|
504
|
+
);
|
|
505
|
+
var ProjectTable = sqliteTable("project", {
|
|
506
|
+
id: text().$type().primaryKey(),
|
|
507
|
+
worktree: text().notNull(),
|
|
508
|
+
vcs: text(),
|
|
509
|
+
name: text(),
|
|
510
|
+
icon_url: text(),
|
|
511
|
+
icon_color: text(),
|
|
512
|
+
...Timestamps,
|
|
513
|
+
time_initialized: integer(),
|
|
514
|
+
sandboxes: text({ mode: "json" }).notNull().$type(),
|
|
515
|
+
commands: text({ mode: "json" }).$type()
|
|
516
|
+
});
|
|
517
|
+
var DARWIN_HOME = [
|
|
518
|
+
"Music",
|
|
519
|
+
"Pictures",
|
|
520
|
+
"Movies",
|
|
521
|
+
"Downloads",
|
|
522
|
+
"Desktop",
|
|
523
|
+
"Documents",
|
|
524
|
+
"Public",
|
|
525
|
+
"Applications",
|
|
526
|
+
"Library"
|
|
527
|
+
];
|
|
528
|
+
var DARWIN_LIBRARY = [
|
|
529
|
+
"Application Support/AddressBook",
|
|
530
|
+
"Calendars",
|
|
531
|
+
"Mail",
|
|
532
|
+
"Messages",
|
|
533
|
+
"Safari",
|
|
534
|
+
"Cookies",
|
|
535
|
+
"Application Support/com.apple.TCC",
|
|
536
|
+
"PersonalizationPortrait",
|
|
537
|
+
"Metadata/CoreSpotlight",
|
|
538
|
+
"Suggestions"
|
|
539
|
+
];
|
|
540
|
+
var DARWIN_ROOT = ["/.DocumentRevisions-V100", "/.Spotlight-V100", "/.Trashes", "/.fseventsd"];
|
|
541
|
+
var WIN32_HOME = ["AppData", "Downloads", "Desktop", "Documents", "Pictures", "Music", "Videos", "OneDrive"];
|
|
542
|
+
var Protected;
|
|
543
|
+
((Protected2) => {
|
|
544
|
+
function names(platform) {
|
|
545
|
+
if (platform === "darwin") return new Set(DARWIN_HOME);
|
|
546
|
+
if (platform === "win32") return new Set(WIN32_HOME);
|
|
547
|
+
return /* @__PURE__ */ new Set();
|
|
548
|
+
}
|
|
549
|
+
Protected2.names = names;
|
|
550
|
+
function paths(home, platform) {
|
|
551
|
+
if (platform === "darwin")
|
|
552
|
+
return [
|
|
553
|
+
...DARWIN_HOME.map((n) => join(home, n)),
|
|
554
|
+
...DARWIN_LIBRARY.map((n) => join(home, "Library", n)),
|
|
555
|
+
...DARWIN_ROOT
|
|
556
|
+
];
|
|
557
|
+
if (platform === "win32") return WIN32_HOME.map((n) => join(home, n));
|
|
558
|
+
return [];
|
|
559
|
+
}
|
|
560
|
+
Protected2.paths = paths;
|
|
561
|
+
})(Protected || (Protected = {}));
|
|
562
|
+
var FileIgnore;
|
|
563
|
+
((FileIgnore2) => {
|
|
564
|
+
const FOLDERS = /* @__PURE__ */ new Set([
|
|
565
|
+
"node_modules",
|
|
566
|
+
"bower_components",
|
|
567
|
+
".pnpm-store",
|
|
568
|
+
"vendor",
|
|
569
|
+
".npm",
|
|
570
|
+
"dist",
|
|
571
|
+
"build",
|
|
572
|
+
"out",
|
|
573
|
+
".next",
|
|
574
|
+
"target",
|
|
575
|
+
"bin",
|
|
576
|
+
"obj",
|
|
577
|
+
".git",
|
|
578
|
+
".svn",
|
|
579
|
+
".hg",
|
|
580
|
+
".vscode",
|
|
581
|
+
".idea",
|
|
582
|
+
".turbo",
|
|
583
|
+
".output",
|
|
584
|
+
"desktop",
|
|
585
|
+
".sst",
|
|
586
|
+
".cache",
|
|
587
|
+
".webkit-cache",
|
|
588
|
+
"__pycache__",
|
|
589
|
+
".pytest_cache",
|
|
590
|
+
"mypy_cache",
|
|
591
|
+
".history",
|
|
592
|
+
".gradle"
|
|
593
|
+
]);
|
|
594
|
+
const FILES = [
|
|
595
|
+
"**/*.swp",
|
|
596
|
+
"**/*.swo",
|
|
597
|
+
"**/*.pyc",
|
|
598
|
+
"**/.DS_Store",
|
|
599
|
+
"**/Thumbs.db",
|
|
600
|
+
"**/logs/**",
|
|
601
|
+
"**/tmp/**",
|
|
602
|
+
"**/temp/**",
|
|
603
|
+
"**/*.log",
|
|
604
|
+
"**/coverage/**",
|
|
605
|
+
"**/.nyc_output/**"
|
|
606
|
+
];
|
|
607
|
+
FileIgnore2.PATTERNS = [...FILES, ...FOLDERS];
|
|
608
|
+
function match(filepath, opts) {
|
|
609
|
+
for (const pattern of opts?.whitelist || []) {
|
|
610
|
+
if (Glob.match(pattern, filepath)) return false;
|
|
611
|
+
}
|
|
612
|
+
const parts = filepath.split(/[/\\]/);
|
|
613
|
+
for (let i = 0; i < parts.length; i++) {
|
|
614
|
+
if (FOLDERS.has(parts[i])) return true;
|
|
615
|
+
}
|
|
616
|
+
const extra = opts?.extra || [];
|
|
617
|
+
for (const pattern of [...FILES, ...extra]) {
|
|
618
|
+
if (Glob.match(pattern, filepath)) return true;
|
|
619
|
+
}
|
|
620
|
+
return false;
|
|
621
|
+
}
|
|
622
|
+
FileIgnore2.match = match;
|
|
623
|
+
})(FileIgnore || (FileIgnore = {}));
|
|
624
|
+
var FileTimeService = class {
|
|
625
|
+
log = Log.create({ service: "file.time" });
|
|
626
|
+
readTimes = {};
|
|
627
|
+
locks = /* @__PURE__ */ new Map();
|
|
628
|
+
read(sessionID, file) {
|
|
629
|
+
this.log.info("read", { sessionID, file });
|
|
630
|
+
this.readTimes[sessionID] = this.readTimes[sessionID] || {};
|
|
631
|
+
this.readTimes[sessionID][file] = /* @__PURE__ */ new Date();
|
|
632
|
+
}
|
|
633
|
+
get(sessionID, file) {
|
|
634
|
+
return this.readTimes[sessionID]?.[file];
|
|
635
|
+
}
|
|
636
|
+
async assert(context, sessionID, filepath) {
|
|
637
|
+
if (Flag.OPENCODE_DISABLE_FILETIME_CHECK === true) return;
|
|
638
|
+
const time = this.get(sessionID, filepath);
|
|
639
|
+
if (!time) throw new Error(`You must read file ${filepath} before overwriting it. Use the Read tool first`);
|
|
640
|
+
const s = await Filesystem.stat(context, filepath);
|
|
641
|
+
const mtimeMs = s?.mtimeMs;
|
|
642
|
+
if (mtimeMs && mtimeMs > time.getTime() + 50) {
|
|
643
|
+
const mtime = new Date(mtimeMs);
|
|
644
|
+
throw new Error(
|
|
645
|
+
`File ${filepath} has been modified since it was last read.
|
|
646
|
+
Last modification: ${mtime.toISOString()}
|
|
647
|
+
Last read: ${time.toISOString()}
|
|
648
|
+
|
|
649
|
+
Please read the file again before modifying it.`
|
|
650
|
+
);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
async withLock(filepath, fn) {
|
|
654
|
+
const currentLock = this.locks.get(filepath) ?? Promise.resolve();
|
|
655
|
+
let release = () => {
|
|
656
|
+
};
|
|
657
|
+
const nextLock = new Promise((resolve2) => {
|
|
658
|
+
release = resolve2;
|
|
659
|
+
});
|
|
660
|
+
const chained = currentLock.then(() => nextLock);
|
|
661
|
+
this.locks.set(filepath, chained);
|
|
662
|
+
await currentLock;
|
|
663
|
+
try {
|
|
664
|
+
return await fn();
|
|
665
|
+
} finally {
|
|
666
|
+
release();
|
|
667
|
+
if (this.locks.get(filepath) === chained) this.locks.delete(filepath);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
};
|
|
671
|
+
var FileTime;
|
|
672
|
+
((FileTime2) => {
|
|
673
|
+
function svc(context) {
|
|
674
|
+
if (context.fileTime) return context.fileTime;
|
|
675
|
+
return context.fileTime;
|
|
676
|
+
}
|
|
677
|
+
function state(context) {
|
|
678
|
+
const s = svc(context);
|
|
679
|
+
return { read: s.readTimes, locks: s.locks };
|
|
680
|
+
}
|
|
681
|
+
FileTime2.state = state;
|
|
682
|
+
function read(context, sessionID, file) {
|
|
683
|
+
svc(context).read(sessionID, file);
|
|
684
|
+
}
|
|
685
|
+
FileTime2.read = read;
|
|
686
|
+
function get(context, sessionID, file) {
|
|
687
|
+
return svc(context).get(sessionID, file);
|
|
688
|
+
}
|
|
689
|
+
FileTime2.get = get;
|
|
690
|
+
async function withLock(context, filepath, fn) {
|
|
691
|
+
return svc(context).withLock(filepath, fn);
|
|
692
|
+
}
|
|
693
|
+
FileTime2.withLock = withLock;
|
|
694
|
+
async function assert(context, sessionID, filepath) {
|
|
695
|
+
return svc(context).assert(context, sessionID, filepath);
|
|
696
|
+
}
|
|
697
|
+
FileTime2.assert = assert;
|
|
698
|
+
})(FileTime || (FileTime = {}));
|
|
699
|
+
var Project;
|
|
700
|
+
((Project2) => {
|
|
701
|
+
const log = Log.create({ service: "project" });
|
|
702
|
+
Project2.Info = z2.object({
|
|
703
|
+
id: ProjectID.zod,
|
|
704
|
+
worktree: z2.string(),
|
|
705
|
+
vcs: z2.literal("git").optional(),
|
|
706
|
+
name: z2.string().optional(),
|
|
707
|
+
icon: z2.object({
|
|
708
|
+
url: z2.string().optional(),
|
|
709
|
+
override: z2.string().optional(),
|
|
710
|
+
color: z2.string().optional()
|
|
711
|
+
}).optional(),
|
|
712
|
+
commands: z2.object({
|
|
713
|
+
start: z2.string().optional().describe("Startup script to run when creating a new workspace (worktree)")
|
|
714
|
+
}).optional(),
|
|
715
|
+
time: z2.object({
|
|
716
|
+
created: z2.number(),
|
|
717
|
+
updated: z2.number(),
|
|
718
|
+
initialized: z2.number().optional()
|
|
719
|
+
}),
|
|
720
|
+
sandboxes: z2.array(z2.string())
|
|
721
|
+
}).meta({ ref: "Project" });
|
|
722
|
+
function fromRow(row) {
|
|
723
|
+
const icon = row.icon_url || row.icon_color ? { url: row.icon_url ?? void 0, color: row.icon_color ?? void 0 } : void 0;
|
|
724
|
+
return {
|
|
725
|
+
id: ProjectID.make(row.id),
|
|
726
|
+
worktree: row.worktree,
|
|
727
|
+
vcs: row.vcs ? Project2.Info.shape.vcs.parse(row.vcs) : void 0,
|
|
728
|
+
name: row.name ?? void 0,
|
|
729
|
+
icon,
|
|
730
|
+
time: {
|
|
731
|
+
created: row.time_created,
|
|
732
|
+
updated: row.time_updated,
|
|
733
|
+
initialized: row.time_initialized ?? void 0
|
|
734
|
+
},
|
|
735
|
+
sandboxes: row.sandboxes,
|
|
736
|
+
commands: row.commands ?? void 0
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
Project2.fromRow = fromRow;
|
|
740
|
+
function setInitialized(context, id) {
|
|
741
|
+
context.db.update("project", { op: "eq", field: "id", value: id }, { time_initialized: Date.now() });
|
|
742
|
+
}
|
|
743
|
+
Project2.setInitialized = setInitialized;
|
|
744
|
+
function list(context) {
|
|
745
|
+
return context.db.findMany("project").map((row) => fromRow(row));
|
|
746
|
+
}
|
|
747
|
+
Project2.list = list;
|
|
748
|
+
function get(context, id) {
|
|
749
|
+
const row = context.db.findOne("project", { op: "eq", field: "id", value: id });
|
|
750
|
+
if (!row) return void 0;
|
|
751
|
+
return fromRow(row);
|
|
752
|
+
}
|
|
753
|
+
Project2.get = get;
|
|
754
|
+
async function sandboxes(context, id) {
|
|
755
|
+
const row = context.db.findOne("project", { op: "eq", field: "id", value: id });
|
|
756
|
+
if (!row) return [];
|
|
757
|
+
const data = fromRow(row);
|
|
758
|
+
const valid = [];
|
|
759
|
+
for (const dir of data.sandboxes) {
|
|
760
|
+
const s = await Filesystem.stat(context, dir);
|
|
761
|
+
if (s?.isDirectory) valid.push(dir);
|
|
762
|
+
}
|
|
763
|
+
return valid;
|
|
764
|
+
}
|
|
765
|
+
Project2.sandboxes = sandboxes;
|
|
766
|
+
})(Project || (Project = {}));
|
|
767
|
+
var SessionTable = sqliteTable2(
|
|
768
|
+
"session",
|
|
769
|
+
{
|
|
770
|
+
id: text2().$type().primaryKey(),
|
|
771
|
+
project_id: text2().$type().notNull().references(() => ProjectTable.id, { onDelete: "cascade" }),
|
|
772
|
+
workspace_id: text2().$type(),
|
|
773
|
+
parent_id: text2().$type(),
|
|
774
|
+
slug: text2().notNull(),
|
|
775
|
+
directory: text2().notNull(),
|
|
776
|
+
title: text2().notNull(),
|
|
777
|
+
version: text2().notNull(),
|
|
778
|
+
share_url: text2(),
|
|
779
|
+
summary_additions: integer2(),
|
|
780
|
+
summary_deletions: integer2(),
|
|
781
|
+
summary_files: integer2(),
|
|
782
|
+
summary_diffs: text2({ mode: "json" }).$type(),
|
|
783
|
+
revert: text2({ mode: "json" }).$type(),
|
|
784
|
+
...Timestamps,
|
|
785
|
+
time_compacting: integer2(),
|
|
786
|
+
time_archived: integer2()
|
|
787
|
+
},
|
|
788
|
+
(table) => [
|
|
789
|
+
index("session_project_idx").on(table.project_id),
|
|
790
|
+
index("session_workspace_idx").on(table.workspace_id),
|
|
791
|
+
index("session_parent_idx").on(table.parent_id)
|
|
792
|
+
]
|
|
793
|
+
);
|
|
794
|
+
var MessageTable = sqliteTable2(
|
|
795
|
+
"message",
|
|
796
|
+
{
|
|
797
|
+
id: text2().$type().primaryKey(),
|
|
798
|
+
session_id: text2().$type().notNull().references(() => SessionTable.id, { onDelete: "cascade" }),
|
|
799
|
+
...Timestamps,
|
|
800
|
+
data: text2({ mode: "json" }).notNull().$type()
|
|
801
|
+
},
|
|
802
|
+
(table) => [index("message_session_time_created_id_idx").on(table.session_id, table.time_created, table.id)]
|
|
803
|
+
);
|
|
804
|
+
var PartTable = sqliteTable2(
|
|
805
|
+
"part",
|
|
806
|
+
{
|
|
807
|
+
id: text2().$type().primaryKey(),
|
|
808
|
+
message_id: text2().$type().notNull().references(() => MessageTable.id, { onDelete: "cascade" }),
|
|
809
|
+
session_id: text2().$type().notNull(),
|
|
810
|
+
...Timestamps,
|
|
811
|
+
data: text2({ mode: "json" }).notNull().$type()
|
|
812
|
+
},
|
|
813
|
+
(table) => [
|
|
814
|
+
index("part_message_id_id_idx").on(table.message_id, table.id),
|
|
815
|
+
index("part_session_idx").on(table.session_id)
|
|
816
|
+
]
|
|
817
|
+
);
|
|
818
|
+
var TodoTable = sqliteTable2(
|
|
819
|
+
"todo",
|
|
820
|
+
{
|
|
821
|
+
session_id: text2().$type().notNull().references(() => SessionTable.id, { onDelete: "cascade" }),
|
|
822
|
+
content: text2().notNull(),
|
|
823
|
+
status: text2().notNull(),
|
|
824
|
+
priority: text2().notNull(),
|
|
825
|
+
position: integer2().notNull(),
|
|
826
|
+
...Timestamps
|
|
827
|
+
},
|
|
828
|
+
(table) => [
|
|
829
|
+
primaryKey({ columns: [table.session_id, table.position] }),
|
|
830
|
+
index("todo_session_idx").on(table.session_id)
|
|
831
|
+
]
|
|
832
|
+
);
|
|
833
|
+
var NamedError = class _NamedError extends Error {
|
|
834
|
+
static create(name, data) {
|
|
835
|
+
const schema = z3.object({
|
|
836
|
+
name: z3.literal(name),
|
|
837
|
+
data
|
|
838
|
+
}).meta({
|
|
839
|
+
ref: name
|
|
840
|
+
});
|
|
841
|
+
const result = class extends _NamedError {
|
|
842
|
+
constructor(data2, options) {
|
|
843
|
+
super(name, options);
|
|
844
|
+
this.data = data2;
|
|
845
|
+
this.name = name;
|
|
846
|
+
}
|
|
847
|
+
static Schema = schema;
|
|
848
|
+
name = name;
|
|
849
|
+
static isInstance(input) {
|
|
850
|
+
return typeof input === "object" && "name" in input && input.name === name;
|
|
851
|
+
}
|
|
852
|
+
schema() {
|
|
853
|
+
return schema;
|
|
854
|
+
}
|
|
855
|
+
toObject() {
|
|
856
|
+
return {
|
|
857
|
+
name,
|
|
858
|
+
data: this.data
|
|
859
|
+
};
|
|
860
|
+
}
|
|
861
|
+
};
|
|
862
|
+
Object.defineProperty(result, "name", { value: name });
|
|
863
|
+
return result;
|
|
864
|
+
}
|
|
865
|
+
static Unknown = _NamedError.create(
|
|
866
|
+
"UnknownError",
|
|
867
|
+
z3.object({
|
|
868
|
+
message: z3.string()
|
|
869
|
+
})
|
|
870
|
+
);
|
|
871
|
+
};
|
|
872
|
+
var Lock;
|
|
873
|
+
((Lock2) => {
|
|
874
|
+
const locks = /* @__PURE__ */ new Map();
|
|
875
|
+
function get(key) {
|
|
876
|
+
if (!locks.has(key)) {
|
|
877
|
+
locks.set(key, {
|
|
878
|
+
readers: 0,
|
|
879
|
+
writer: false,
|
|
880
|
+
waitingReaders: [],
|
|
881
|
+
waitingWriters: []
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
return locks.get(key);
|
|
885
|
+
}
|
|
886
|
+
function process(key) {
|
|
887
|
+
const lock = locks.get(key);
|
|
888
|
+
if (!lock || lock.writer || lock.readers > 0) return;
|
|
889
|
+
if (lock.waitingWriters.length > 0) {
|
|
890
|
+
const nextWriter = lock.waitingWriters.shift();
|
|
891
|
+
nextWriter();
|
|
892
|
+
return;
|
|
893
|
+
}
|
|
894
|
+
while (lock.waitingReaders.length > 0) {
|
|
895
|
+
const nextReader = lock.waitingReaders.shift();
|
|
896
|
+
nextReader();
|
|
897
|
+
}
|
|
898
|
+
if (lock.readers === 0 && !lock.writer && lock.waitingReaders.length === 0 && lock.waitingWriters.length === 0) {
|
|
899
|
+
locks.delete(key);
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
async function read(key) {
|
|
903
|
+
const lock = get(key);
|
|
904
|
+
return new Promise((resolve2) => {
|
|
905
|
+
if (!lock.writer && lock.waitingWriters.length === 0) {
|
|
906
|
+
lock.readers++;
|
|
907
|
+
resolve2({
|
|
908
|
+
[Symbol.dispose]: () => {
|
|
909
|
+
lock.readers--;
|
|
910
|
+
process(key);
|
|
911
|
+
}
|
|
912
|
+
});
|
|
913
|
+
} else {
|
|
914
|
+
lock.waitingReaders.push(() => {
|
|
915
|
+
lock.readers++;
|
|
916
|
+
resolve2({
|
|
917
|
+
[Symbol.dispose]: () => {
|
|
918
|
+
lock.readers--;
|
|
919
|
+
process(key);
|
|
920
|
+
}
|
|
921
|
+
});
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
});
|
|
925
|
+
}
|
|
926
|
+
Lock2.read = read;
|
|
927
|
+
async function write(key) {
|
|
928
|
+
const lock = get(key);
|
|
929
|
+
return new Promise((resolve2) => {
|
|
930
|
+
if (!lock.writer && lock.readers === 0) {
|
|
931
|
+
lock.writer = true;
|
|
932
|
+
resolve2({
|
|
933
|
+
[Symbol.dispose]: () => {
|
|
934
|
+
lock.writer = false;
|
|
935
|
+
process(key);
|
|
936
|
+
}
|
|
937
|
+
});
|
|
938
|
+
} else {
|
|
939
|
+
lock.waitingWriters.push(() => {
|
|
940
|
+
lock.writer = true;
|
|
941
|
+
resolve2({
|
|
942
|
+
[Symbol.dispose]: () => {
|
|
943
|
+
lock.writer = false;
|
|
944
|
+
process(key);
|
|
945
|
+
}
|
|
946
|
+
});
|
|
947
|
+
});
|
|
948
|
+
}
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
Lock2.write = write;
|
|
952
|
+
})(Lock || (Lock = {}));
|
|
953
|
+
var Timestamps = {
|
|
954
|
+
time_created: integer3().notNull().$default(() => Date.now()),
|
|
955
|
+
time_updated: integer3().notNull().$onUpdate(() => Date.now())
|
|
956
|
+
};
|
|
957
|
+
var NotFoundError = NamedError.create(
|
|
958
|
+
"NotFoundError",
|
|
959
|
+
z4.object({
|
|
960
|
+
message: z4.string()
|
|
961
|
+
})
|
|
962
|
+
);
|
|
963
|
+
var Database;
|
|
964
|
+
((Database2) => {
|
|
965
|
+
const INITIAL_MIGRATION = `-- project table
|
|
966
|
+
CREATE TABLE IF NOT EXISTS "project" (
|
|
967
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
968
|
+
"worktree" TEXT NOT NULL,
|
|
969
|
+
"vcs" TEXT,
|
|
970
|
+
"name" TEXT,
|
|
971
|
+
"icon_url" TEXT,
|
|
972
|
+
"icon_color" TEXT,
|
|
973
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
974
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
975
|
+
"time_initialized" INTEGER,
|
|
976
|
+
"sandboxes" TEXT NOT NULL DEFAULT '[]',
|
|
977
|
+
"commands" TEXT
|
|
978
|
+
);
|
|
979
|
+
|
|
980
|
+
-- session table
|
|
981
|
+
CREATE TABLE IF NOT EXISTS "session" (
|
|
982
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
983
|
+
"project_id" TEXT NOT NULL REFERENCES "project"("id") ON DELETE CASCADE,
|
|
984
|
+
"workspace_id" TEXT,
|
|
985
|
+
"parent_id" TEXT,
|
|
986
|
+
"slug" TEXT NOT NULL,
|
|
987
|
+
"directory" TEXT NOT NULL,
|
|
988
|
+
"title" TEXT NOT NULL,
|
|
989
|
+
"version" TEXT NOT NULL,
|
|
990
|
+
"share_url" TEXT,
|
|
991
|
+
"summary_additions" INTEGER,
|
|
992
|
+
"summary_deletions" INTEGER,
|
|
993
|
+
"summary_files" INTEGER,
|
|
994
|
+
"summary_diffs" TEXT,
|
|
995
|
+
"revert" TEXT,
|
|
996
|
+
"permission" TEXT,
|
|
997
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
998
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
999
|
+
"time_compacting" INTEGER,
|
|
1000
|
+
"time_archived" INTEGER
|
|
1001
|
+
);
|
|
1002
|
+
CREATE INDEX IF NOT EXISTS "session_project_idx" ON "session"("project_id");
|
|
1003
|
+
CREATE INDEX IF NOT EXISTS "session_workspace_idx" ON "session"("workspace_id");
|
|
1004
|
+
CREATE INDEX IF NOT EXISTS "session_parent_idx" ON "session"("parent_id");
|
|
1005
|
+
|
|
1006
|
+
-- message table
|
|
1007
|
+
CREATE TABLE IF NOT EXISTS "message" (
|
|
1008
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
1009
|
+
"session_id" TEXT NOT NULL REFERENCES "session"("id") ON DELETE CASCADE,
|
|
1010
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1011
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1012
|
+
"data" TEXT NOT NULL
|
|
1013
|
+
);
|
|
1014
|
+
CREATE INDEX IF NOT EXISTS "message_session_time_created_id_idx" ON "message"("session_id", "time_created", "id");
|
|
1015
|
+
|
|
1016
|
+
-- part table
|
|
1017
|
+
CREATE TABLE IF NOT EXISTS "part" (
|
|
1018
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
1019
|
+
"message_id" TEXT NOT NULL REFERENCES "message"("id") ON DELETE CASCADE,
|
|
1020
|
+
"session_id" TEXT NOT NULL,
|
|
1021
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1022
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1023
|
+
"data" TEXT NOT NULL
|
|
1024
|
+
);
|
|
1025
|
+
CREATE INDEX IF NOT EXISTS "part_message_id_id_idx" ON "part"("message_id", "id");
|
|
1026
|
+
CREATE INDEX IF NOT EXISTS "part_session_idx" ON "part"("session_id");
|
|
1027
|
+
|
|
1028
|
+
-- todo table
|
|
1029
|
+
CREATE TABLE IF NOT EXISTS "todo" (
|
|
1030
|
+
"session_id" TEXT NOT NULL REFERENCES "session"("id") ON DELETE CASCADE,
|
|
1031
|
+
"content" TEXT NOT NULL,
|
|
1032
|
+
"status" TEXT NOT NULL,
|
|
1033
|
+
"priority" TEXT NOT NULL,
|
|
1034
|
+
"position" INTEGER NOT NULL,
|
|
1035
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1036
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1037
|
+
PRIMARY KEY ("session_id", "position")
|
|
1038
|
+
);
|
|
1039
|
+
CREATE INDEX IF NOT EXISTS "todo_session_idx" ON "todo"("session_id");
|
|
1040
|
+
|
|
1041
|
+
-- permission table
|
|
1042
|
+
CREATE TABLE IF NOT EXISTS "permission" (
|
|
1043
|
+
"project_id" TEXT PRIMARY KEY NOT NULL REFERENCES "project"("id") ON DELETE CASCADE,
|
|
1044
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1045
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1046
|
+
"data" TEXT NOT NULL
|
|
1047
|
+
);
|
|
1048
|
+
|
|
1049
|
+
-- session_share table
|
|
1050
|
+
CREATE TABLE IF NOT EXISTS "session_share" (
|
|
1051
|
+
"session_id" TEXT PRIMARY KEY NOT NULL REFERENCES "session"("id") ON DELETE CASCADE,
|
|
1052
|
+
"id" TEXT NOT NULL,
|
|
1053
|
+
"secret" TEXT NOT NULL,
|
|
1054
|
+
"url" TEXT NOT NULL,
|
|
1055
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1056
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
1057
|
+
);
|
|
1058
|
+
|
|
1059
|
+
-- workspace table
|
|
1060
|
+
CREATE TABLE IF NOT EXISTS "workspace" (
|
|
1061
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
1062
|
+
"type" TEXT NOT NULL,
|
|
1063
|
+
"branch" TEXT,
|
|
1064
|
+
"name" TEXT,
|
|
1065
|
+
"directory" TEXT,
|
|
1066
|
+
"extra" TEXT,
|
|
1067
|
+
"project_id" TEXT NOT NULL REFERENCES "project"("id") ON DELETE CASCADE
|
|
1068
|
+
);
|
|
1069
|
+
|
|
1070
|
+
-- account table
|
|
1071
|
+
CREATE TABLE IF NOT EXISTS "account" (
|
|
1072
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
1073
|
+
"email" TEXT NOT NULL,
|
|
1074
|
+
"url" TEXT NOT NULL,
|
|
1075
|
+
"access_token" TEXT NOT NULL,
|
|
1076
|
+
"refresh_token" TEXT NOT NULL,
|
|
1077
|
+
"token_expiry" INTEGER,
|
|
1078
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1079
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
1080
|
+
);
|
|
1081
|
+
|
|
1082
|
+
-- account_state table
|
|
1083
|
+
CREATE TABLE IF NOT EXISTS "account_state" (
|
|
1084
|
+
"id" INTEGER PRIMARY KEY,
|
|
1085
|
+
"active_account_id" TEXT REFERENCES "account"("id") ON DELETE SET NULL,
|
|
1086
|
+
"active_org_id" TEXT
|
|
1087
|
+
);
|
|
1088
|
+
|
|
1089
|
+
-- control_account table (legacy)
|
|
1090
|
+
CREATE TABLE IF NOT EXISTS "control_account" (
|
|
1091
|
+
"email" TEXT NOT NULL,
|
|
1092
|
+
"url" TEXT NOT NULL,
|
|
1093
|
+
"access_token" TEXT NOT NULL,
|
|
1094
|
+
"refresh_token" TEXT NOT NULL,
|
|
1095
|
+
"token_expiry" INTEGER,
|
|
1096
|
+
"active" INTEGER NOT NULL DEFAULT 0,
|
|
1097
|
+
"time_created" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1098
|
+
"time_updated" INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
1099
|
+
PRIMARY KEY ("email", "url")
|
|
1100
|
+
);`;
|
|
1101
|
+
function getMigrations() {
|
|
1102
|
+
const entries = [
|
|
1103
|
+
{ sql: INITIAL_MIGRATION, timestamp: Date.UTC(2024, 0, 1), name: "20240101000000_initial" }
|
|
1104
|
+
];
|
|
1105
|
+
if (Flag.OPENCODE_SKIP_MIGRATIONS) {
|
|
1106
|
+
for (const item of entries) {
|
|
1107
|
+
item.sql = "select 1;";
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
return entries;
|
|
1111
|
+
}
|
|
1112
|
+
Database2.getMigrations = getMigrations;
|
|
1113
|
+
})(Database || (Database = {}));
|
|
1114
|
+
var SqliteNoSqlDb = class {
|
|
1115
|
+
constructor(raw) {
|
|
1116
|
+
this.raw = raw;
|
|
1117
|
+
}
|
|
1118
|
+
insert(table, row) {
|
|
1119
|
+
const cols = Object.keys(row);
|
|
1120
|
+
const placeholders = cols.map(() => "?").join(", ");
|
|
1121
|
+
const sql = `INSERT INTO "${table}" (${cols.map((c) => `"${c}"`).join(", ")}) VALUES (${placeholders})`;
|
|
1122
|
+
this.raw.run(sql, cols.map((c) => serialize(row[c])));
|
|
1123
|
+
}
|
|
1124
|
+
upsert(table, row, conflictKeys, updateFields) {
|
|
1125
|
+
const cols = Object.keys(row);
|
|
1126
|
+
const placeholders = cols.map(() => "?").join(", ");
|
|
1127
|
+
const conflict = conflictKeys.map((k) => `"${k}"`).join(", ");
|
|
1128
|
+
const updates = Object.keys(updateFields).map((k) => `"${k}" = ?`).join(", ");
|
|
1129
|
+
const sql = `INSERT INTO "${table}" (${cols.map((c) => `"${c}"`).join(", ")}) VALUES (${placeholders}) ON CONFLICT (${conflict}) DO UPDATE SET ${updates}`;
|
|
1130
|
+
const params = [
|
|
1131
|
+
...cols.map((c) => serialize(row[c])),
|
|
1132
|
+
...Object.keys(updateFields).map((k) => serialize(updateFields[k]))
|
|
1133
|
+
];
|
|
1134
|
+
this.raw.run(sql, params);
|
|
1135
|
+
}
|
|
1136
|
+
findOne(table, filter, options) {
|
|
1137
|
+
const fields = options?.select?.map((f) => `"${f}"`).join(", ") ?? "*";
|
|
1138
|
+
const { clause, params } = filter ? buildWhere(filter) : { clause: "", params: [] };
|
|
1139
|
+
const where = clause ? ` WHERE ${clause}` : "";
|
|
1140
|
+
const sql = `SELECT ${fields} FROM "${table}"${where} LIMIT 1`;
|
|
1141
|
+
const row = this.raw.get(sql, params);
|
|
1142
|
+
return row ? deserializeRow(row) : void 0;
|
|
1143
|
+
}
|
|
1144
|
+
findMany(table, options) {
|
|
1145
|
+
const fields = options?.select?.map((f) => `"${f}"`).join(", ") ?? "*";
|
|
1146
|
+
const { clause, params } = options?.filter ? buildWhere(options.filter) : { clause: "", params: [] };
|
|
1147
|
+
const where = clause ? ` WHERE ${clause}` : "";
|
|
1148
|
+
let orderClause = "";
|
|
1149
|
+
if (options?.orderBy?.length) {
|
|
1150
|
+
const parts = options.orderBy.map(
|
|
1151
|
+
(o) => `"${o.field}" ${o.direction === "desc" ? "DESC" : "ASC"}`
|
|
1152
|
+
);
|
|
1153
|
+
orderClause = ` ORDER BY ${parts.join(", ")}`;
|
|
1154
|
+
}
|
|
1155
|
+
const limitClause = options?.limit != null ? ` LIMIT ${options.limit}` : "";
|
|
1156
|
+
const sql = `SELECT ${fields} FROM "${table}"${where}${orderClause}${limitClause}`;
|
|
1157
|
+
return this.raw.all(sql, params).map(deserializeRow);
|
|
1158
|
+
}
|
|
1159
|
+
update(table, filter, set) {
|
|
1160
|
+
const setCols = Object.keys(set);
|
|
1161
|
+
const setClause = setCols.map((k) => `"${k}" = ?`).join(", ");
|
|
1162
|
+
const { clause, params } = buildWhere(filter);
|
|
1163
|
+
const sql = `UPDATE "${table}" SET ${setClause} WHERE ${clause} RETURNING *`;
|
|
1164
|
+
const setParams = setCols.map((k) => serialize(set[k]));
|
|
1165
|
+
const row = this.raw.get(sql, [...setParams, ...params]);
|
|
1166
|
+
return row ? deserializeRow(row) : void 0;
|
|
1167
|
+
}
|
|
1168
|
+
remove(table, filter) {
|
|
1169
|
+
const { clause, params } = buildWhere(filter);
|
|
1170
|
+
this.raw.run(`DELETE FROM "${table}" WHERE ${clause}`, params);
|
|
1171
|
+
}
|
|
1172
|
+
transaction(fn) {
|
|
1173
|
+
this.raw.transaction(() => {
|
|
1174
|
+
fn(this);
|
|
1175
|
+
});
|
|
1176
|
+
}
|
|
1177
|
+
};
|
|
1178
|
+
function buildWhere(filter) {
|
|
1179
|
+
switch (filter.op) {
|
|
1180
|
+
case "eq":
|
|
1181
|
+
return { clause: `"${filter.field}" = ?`, params: [serialize(filter.value)] };
|
|
1182
|
+
case "ne":
|
|
1183
|
+
return { clause: `"${filter.field}" != ?`, params: [serialize(filter.value)] };
|
|
1184
|
+
case "gt":
|
|
1185
|
+
return { clause: `"${filter.field}" > ?`, params: [serialize(filter.value)] };
|
|
1186
|
+
case "gte":
|
|
1187
|
+
return { clause: `"${filter.field}" >= ?`, params: [serialize(filter.value)] };
|
|
1188
|
+
case "lt":
|
|
1189
|
+
return { clause: `"${filter.field}" < ?`, params: [serialize(filter.value)] };
|
|
1190
|
+
case "like":
|
|
1191
|
+
return { clause: `"${filter.field}" LIKE ?`, params: [filter.value] };
|
|
1192
|
+
case "isNull":
|
|
1193
|
+
return { clause: `"${filter.field}" IS NULL`, params: [] };
|
|
1194
|
+
case "in": {
|
|
1195
|
+
const placeholders = filter.values.map(() => "?").join(", ");
|
|
1196
|
+
return { clause: `"${filter.field}" IN (${placeholders})`, params: filter.values.map(serialize) };
|
|
1197
|
+
}
|
|
1198
|
+
case "and": {
|
|
1199
|
+
const parts = filter.conditions.map(buildWhere);
|
|
1200
|
+
return {
|
|
1201
|
+
clause: parts.map((p) => `(${p.clause})`).join(" AND "),
|
|
1202
|
+
params: parts.flatMap((p) => p.params)
|
|
1203
|
+
};
|
|
1204
|
+
}
|
|
1205
|
+
case "or": {
|
|
1206
|
+
const parts = filter.conditions.map(buildWhere);
|
|
1207
|
+
return {
|
|
1208
|
+
clause: parts.map((p) => `(${p.clause})`).join(" OR "),
|
|
1209
|
+
params: parts.flatMap((p) => p.params)
|
|
1210
|
+
};
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
function serialize(value) {
|
|
1215
|
+
if (value === void 0) return null;
|
|
1216
|
+
if (value === null) return null;
|
|
1217
|
+
if (typeof value === "object" && !(value instanceof Buffer) && !(value instanceof Uint8Array)) {
|
|
1218
|
+
return JSON.stringify(value);
|
|
1219
|
+
}
|
|
1220
|
+
return value;
|
|
1221
|
+
}
|
|
1222
|
+
function deserializeRow(row) {
|
|
1223
|
+
const result = {};
|
|
1224
|
+
for (const [key, value] of Object.entries(row)) {
|
|
1225
|
+
if (typeof value === "string" && (value.startsWith("{") || value.startsWith("["))) {
|
|
1226
|
+
try {
|
|
1227
|
+
result[key] = JSON.parse(value);
|
|
1228
|
+
} catch {
|
|
1229
|
+
result[key] = value;
|
|
1230
|
+
}
|
|
1231
|
+
} else {
|
|
1232
|
+
result[key] = value;
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
return result;
|
|
1236
|
+
}
|
|
1237
|
+
var Storage;
|
|
1238
|
+
((Storage2) => {
|
|
1239
|
+
const log = Log.create({ service: "storage" });
|
|
1240
|
+
Storage2.NotFoundError = NamedError.create(
|
|
1241
|
+
"NotFoundError",
|
|
1242
|
+
z4.object({
|
|
1243
|
+
message: z4.string()
|
|
1244
|
+
})
|
|
1245
|
+
);
|
|
1246
|
+
const MIGRATIONS = [
|
|
1247
|
+
async (context, dir) => {
|
|
1248
|
+
const project = resolve(dir, "../project");
|
|
1249
|
+
if (!await Filesystem.isDir(context, project)) return;
|
|
1250
|
+
const projectDirs = await Glob.scan(context, "*", {
|
|
1251
|
+
cwd: project,
|
|
1252
|
+
include: "all"
|
|
1253
|
+
});
|
|
1254
|
+
for (const projectDir of projectDirs) {
|
|
1255
|
+
const fullPath = join(project, projectDir);
|
|
1256
|
+
if (!await Filesystem.isDir(context, fullPath)) continue;
|
|
1257
|
+
log.info(`migrating project ${projectDir}`);
|
|
1258
|
+
let projectID = projectDir;
|
|
1259
|
+
const fullProjectDir = join(project, projectDir);
|
|
1260
|
+
let worktree = "/";
|
|
1261
|
+
if (projectID !== "global") {
|
|
1262
|
+
for (const msgFile of await Glob.scan(context, "storage/session/message/*/*.json", {
|
|
1263
|
+
cwd: join(project, projectDir),
|
|
1264
|
+
absolute: true
|
|
1265
|
+
})) {
|
|
1266
|
+
const json = await Filesystem.readJson(context, msgFile);
|
|
1267
|
+
worktree = json.path?.root;
|
|
1268
|
+
if (worktree) break;
|
|
1269
|
+
}
|
|
1270
|
+
if (!worktree) continue;
|
|
1271
|
+
if (!await Filesystem.isDir(context, worktree)) continue;
|
|
1272
|
+
const result = await context.git.run(["rev-list", "--max-parents=0", "--all"], {
|
|
1273
|
+
cwd: worktree
|
|
1274
|
+
});
|
|
1275
|
+
const [id] = result.text().split("\n").filter(Boolean).map((x) => x.trim()).toSorted();
|
|
1276
|
+
if (!id) continue;
|
|
1277
|
+
projectID = id;
|
|
1278
|
+
await Filesystem.writeJson(context, join(dir, "project", projectID + ".json"), {
|
|
1279
|
+
id,
|
|
1280
|
+
vcs: "git",
|
|
1281
|
+
worktree,
|
|
1282
|
+
time: {
|
|
1283
|
+
created: Date.now(),
|
|
1284
|
+
initialized: Date.now()
|
|
1285
|
+
}
|
|
1286
|
+
});
|
|
1287
|
+
log.info(`migrating sessions for project ${projectID}`);
|
|
1288
|
+
for (const sessionFile of await Glob.scan(context, "storage/session/info/*.json", {
|
|
1289
|
+
cwd: fullProjectDir,
|
|
1290
|
+
absolute: true
|
|
1291
|
+
})) {
|
|
1292
|
+
const dest = join(dir, "session", projectID, basename(sessionFile));
|
|
1293
|
+
log.info("copying", {
|
|
1294
|
+
sessionFile,
|
|
1295
|
+
dest
|
|
1296
|
+
});
|
|
1297
|
+
const session = await Filesystem.readJson(context, sessionFile);
|
|
1298
|
+
await Filesystem.writeJson(context, dest, session);
|
|
1299
|
+
log.info(`migrating messages for session ${session.id}`);
|
|
1300
|
+
for (const msgFile of await Glob.scan(context, `storage/session/message/${session.id}/*.json`, {
|
|
1301
|
+
cwd: fullProjectDir,
|
|
1302
|
+
absolute: true
|
|
1303
|
+
})) {
|
|
1304
|
+
const dest2 = join(dir, "message", session.id, basename(msgFile));
|
|
1305
|
+
log.info("copying", {
|
|
1306
|
+
msgFile,
|
|
1307
|
+
dest: dest2
|
|
1308
|
+
});
|
|
1309
|
+
const message = await Filesystem.readJson(context, msgFile);
|
|
1310
|
+
await Filesystem.writeJson(context, dest2, message);
|
|
1311
|
+
log.info(`migrating parts for message ${message.id}`);
|
|
1312
|
+
for (const partFile of await Glob.scan(context, `storage/session/part/${session.id}/${message.id}/*.json`, {
|
|
1313
|
+
cwd: fullProjectDir,
|
|
1314
|
+
absolute: true
|
|
1315
|
+
})) {
|
|
1316
|
+
const dest3 = join(dir, "part", message.id, basename(partFile));
|
|
1317
|
+
const part = await Filesystem.readJson(context, partFile);
|
|
1318
|
+
log.info("copying", {
|
|
1319
|
+
partFile,
|
|
1320
|
+
dest: dest3
|
|
1321
|
+
});
|
|
1322
|
+
await Filesystem.writeJson(context, dest3, part);
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
},
|
|
1329
|
+
async (context, dir) => {
|
|
1330
|
+
for (const item of await Glob.scan(context, "session/*/*.json", {
|
|
1331
|
+
cwd: dir,
|
|
1332
|
+
absolute: true
|
|
1333
|
+
})) {
|
|
1334
|
+
const session = await Filesystem.readJson(context, item);
|
|
1335
|
+
if (!session.projectID) continue;
|
|
1336
|
+
if (!session.summary?.diffs) continue;
|
|
1337
|
+
const { diffs } = session.summary;
|
|
1338
|
+
await Filesystem.write(context, join(dir, "session_diff", session.id + ".json"), JSON.stringify(diffs));
|
|
1339
|
+
await Filesystem.writeJson(context, join(dir, "session", session.projectID, session.id + ".json"), {
|
|
1340
|
+
...session,
|
|
1341
|
+
summary: {
|
|
1342
|
+
additions: diffs.reduce((sum, x) => sum + x.additions, 0),
|
|
1343
|
+
deletions: diffs.reduce((sum, x) => sum + x.deletions, 0)
|
|
1344
|
+
}
|
|
1345
|
+
});
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
];
|
|
1349
|
+
async function getDir(context) {
|
|
1350
|
+
const dir = join(context.dataPath, "storage");
|
|
1351
|
+
const migration = await Filesystem.readJson(context, join(dir, "migration")).then((x) => parseInt(x)).catch(() => 0);
|
|
1352
|
+
for (let index2 = migration; index2 < MIGRATIONS.length; index2++) {
|
|
1353
|
+
log.info("running migration", { index: index2 });
|
|
1354
|
+
const migrationFn = MIGRATIONS[index2];
|
|
1355
|
+
await migrationFn(context, dir).catch(() => log.error("failed to run migration", { index: index2 }));
|
|
1356
|
+
await Filesystem.write(context, join(dir, "migration"), (index2 + 1).toString());
|
|
1357
|
+
}
|
|
1358
|
+
return dir;
|
|
1359
|
+
}
|
|
1360
|
+
async function remove(context, key) {
|
|
1361
|
+
const dir = await getDir(context);
|
|
1362
|
+
const target = join(dir, ...key) + ".json";
|
|
1363
|
+
return withErrorHandling(async () => {
|
|
1364
|
+
await fs.unlink(target).catch(() => {
|
|
1365
|
+
});
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
Storage2.remove = remove;
|
|
1369
|
+
async function read(context, key) {
|
|
1370
|
+
const dir = await getDir(context);
|
|
1371
|
+
const target = join(dir, ...key) + ".json";
|
|
1372
|
+
return withErrorHandling(async () => {
|
|
1373
|
+
var _stack = [];
|
|
1374
|
+
try {
|
|
1375
|
+
const _ = __using(_stack, await Lock.read(target));
|
|
1376
|
+
const result = await Filesystem.readJson(context, target);
|
|
1377
|
+
return result;
|
|
1378
|
+
} catch (_2) {
|
|
1379
|
+
var _error = _2, _hasError = true;
|
|
1380
|
+
} finally {
|
|
1381
|
+
__callDispose(_stack, _error, _hasError);
|
|
1382
|
+
}
|
|
1383
|
+
});
|
|
1384
|
+
}
|
|
1385
|
+
Storage2.read = read;
|
|
1386
|
+
async function update(context, key, fn) {
|
|
1387
|
+
const dir = await getDir(context);
|
|
1388
|
+
const target = join(dir, ...key) + ".json";
|
|
1389
|
+
return withErrorHandling(async () => {
|
|
1390
|
+
var _stack = [];
|
|
1391
|
+
try {
|
|
1392
|
+
const _ = __using(_stack, await Lock.write(target));
|
|
1393
|
+
const content = await Filesystem.readJson(context, target);
|
|
1394
|
+
fn(content);
|
|
1395
|
+
await Filesystem.writeJson(context, target, content);
|
|
1396
|
+
return content;
|
|
1397
|
+
} catch (_2) {
|
|
1398
|
+
var _error = _2, _hasError = true;
|
|
1399
|
+
} finally {
|
|
1400
|
+
__callDispose(_stack, _error, _hasError);
|
|
1401
|
+
}
|
|
1402
|
+
});
|
|
1403
|
+
}
|
|
1404
|
+
Storage2.update = update;
|
|
1405
|
+
async function write(context, key, content) {
|
|
1406
|
+
const dir = await getDir(context);
|
|
1407
|
+
const target = join(dir, ...key) + ".json";
|
|
1408
|
+
return withErrorHandling(async () => {
|
|
1409
|
+
var _stack = [];
|
|
1410
|
+
try {
|
|
1411
|
+
const _ = __using(_stack, await Lock.write(target));
|
|
1412
|
+
await Filesystem.writeJson(context, target, content);
|
|
1413
|
+
} catch (_2) {
|
|
1414
|
+
var _error = _2, _hasError = true;
|
|
1415
|
+
} finally {
|
|
1416
|
+
__callDispose(_stack, _error, _hasError);
|
|
1417
|
+
}
|
|
1418
|
+
});
|
|
1419
|
+
}
|
|
1420
|
+
Storage2.write = write;
|
|
1421
|
+
async function withErrorHandling(body) {
|
|
1422
|
+
return body().catch((e) => {
|
|
1423
|
+
if (!(e instanceof Error)) throw e;
|
|
1424
|
+
const errnoException = e;
|
|
1425
|
+
if (errnoException.code === "ENOENT") {
|
|
1426
|
+
throw new Storage2.NotFoundError({ message: `Resource not found: ${errnoException.path}` });
|
|
1427
|
+
}
|
|
1428
|
+
throw e;
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
async function list(context, prefix) {
|
|
1432
|
+
const dir = await getDir(context);
|
|
1433
|
+
try {
|
|
1434
|
+
const result = await Glob.scan(context, "**/*", {
|
|
1435
|
+
cwd: join(dir, ...prefix),
|
|
1436
|
+
include: "file"
|
|
1437
|
+
}).then((results) => results.map((x) => [...prefix, ...x.slice(0, -5).split(sep)]));
|
|
1438
|
+
result.sort();
|
|
1439
|
+
return result;
|
|
1440
|
+
} catch {
|
|
1441
|
+
return [];
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
Storage2.list = list;
|
|
1445
|
+
})(Storage || (Storage = {}));
|
|
1446
|
+
|
|
1447
|
+
export {
|
|
1448
|
+
join,
|
|
1449
|
+
dirname,
|
|
1450
|
+
basename,
|
|
1451
|
+
extname,
|
|
1452
|
+
isAbsolute,
|
|
1453
|
+
relative,
|
|
1454
|
+
resolve,
|
|
1455
|
+
Filesystem,
|
|
1456
|
+
Log,
|
|
1457
|
+
Flag,
|
|
1458
|
+
ProjectID,
|
|
1459
|
+
ProjectTable,
|
|
1460
|
+
Protected,
|
|
1461
|
+
FileIgnore,
|
|
1462
|
+
FileTimeService,
|
|
1463
|
+
Project,
|
|
1464
|
+
SessionTable,
|
|
1465
|
+
MessageTable,
|
|
1466
|
+
PartTable,
|
|
1467
|
+
TodoTable,
|
|
1468
|
+
NamedError,
|
|
1469
|
+
Timestamps,
|
|
1470
|
+
NotFoundError,
|
|
1471
|
+
Database,
|
|
1472
|
+
SqliteNoSqlDb,
|
|
1473
|
+
Storage
|
|
1474
|
+
};
|