@markusylisiurunen/tau 0.2.80 → 0.2.82
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/README.md +39 -1
- package/dist/core/cli.js +17 -0
- package/dist/core/cli.js.map +1 -1
- package/dist/core/commands/registry.js +15 -0
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/builtin_themes.js +62 -0
- package/dist/core/config/builtin_themes.js.map +1 -1
- package/dist/core/config/diff_tool.js +51 -0
- package/dist/core/config/diff_tool.js.map +1 -0
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/runtime.js +1 -0
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/schema.js +10 -0
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/diff_review/index.js +5 -0
- package/dist/core/diff_review/index.js.map +1 -0
- package/dist/core/diff_review/protocol.js +222 -0
- package/dist/core/diff_review/protocol.js.map +1 -0
- package/dist/core/diff_review/review_thread.js +148 -0
- package/dist/core/diff_review/review_thread.js.map +1 -0
- package/dist/core/diff_review/session.js +453 -0
- package/dist/core/diff_review/session.js.map +1 -0
- package/dist/core/diff_review/snapshot.js +327 -0
- package/dist/core/diff_review/snapshot.js.map +1 -0
- package/dist/core/events/parser.js +13 -2
- package/dist/core/events/parser.js.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/static/index.js +11 -0
- package/dist/core/static/index.js.map +1 -1
- package/dist/core/static/prompts/diff-review-wrapper.md +24 -0
- package/dist/core/subagents/control_plane.js +35 -0
- package/dist/core/subagents/control_plane.js.map +1 -1
- package/dist/core/subagents/subagent_engine.js +23 -3
- package/dist/core/subagents/subagent_engine.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/diff_tool/app/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/diff_tool/app/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/diff_tool/app/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/diff_tool/app/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/diff_tool/app/dist/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/diff_tool/app/dist/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/diff_tool/app/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/diff_tool/app/dist/assets/apex-D8_7TLub.js +1 -0
- package/dist/diff_tool/app/dist/assets/apl-dKokRX4l.js +1 -0
- package/dist/diff_tool/app/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/diff_tool/app/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/diff_tool/app/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/diff_tool/app/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/diff_tool/app/dist/assets/astro-CbQHKStN.js +1 -0
- package/dist/diff_tool/app/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/diff_tool/app/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/diff_tool/app/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/diff_tool/app/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/diff_tool/app/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/diff_tool/app/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/diff_tool/app/dist/assets/bat-BkioyH1T.js +1 -0
- package/dist/diff_tool/app/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/diff_tool/app/dist/assets/berry-uYugtg8r.js +1 -0
- package/dist/diff_tool/app/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/diff_tool/app/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/diff_tool/app/dist/assets/bird2-DPOp833l.js +1 -0
- package/dist/diff_tool/app/dist/assets/blade-D4QpJJKB.js +1 -0
- package/dist/diff_tool/app/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/diff_tool/app/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/diff_tool/app/dist/assets/c3-eo99z4R2.js +1 -0
- package/dist/diff_tool/app/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/diff_tool/app/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/diff_tool/app/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/diff_tool/app/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/diff_tool/app/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/diff_tool/app/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/diff_tool/app/dist/assets/clarity-D53aC0YG.js +1 -0
- package/dist/diff_tool/app/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/diff_tool/app/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/diff_tool/app/dist/assets/cobol-nwyudZeR.js +1 -0
- package/dist/diff_tool/app/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/diff_tool/app/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/diff_tool/app/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/diff_tool/app/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/diff_tool/app/dist/assets/coq-DkFqJrB1.js +1 -0
- package/dist/diff_tool/app/dist/assets/cpp-CofmeUqb.js +1 -0
- package/dist/diff_tool/app/dist/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/diff_tool/app/dist/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/diff_tool/app/dist/assets/css-DPfMkruS.js +1 -0
- package/dist/diff_tool/app/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/diff_tool/app/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/diff_tool/app/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/diff_tool/app/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/diff_tool/app/dist/assets/dart-CF10PKvl.js +1 -0
- package/dist/diff_tool/app/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/diff_tool/app/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/diff_tool/app/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/diff_tool/app/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/diff_tool/app/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/diff_tool/app/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/diff_tool/app/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/diff_tool/app/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/diff_tool/app/dist/assets/edge-BkV0erSs.js +1 -0
- package/dist/diff_tool/app/dist/assets/elixir-CDX3lj18.js +1 -0
- package/dist/diff_tool/app/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/diff_tool/app/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/diff_tool/app/dist/assets/erb-B12qg9BL.js +1 -0
- package/dist/diff_tool/app/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/diff_tool/app/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/diff_tool/app/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/diff_tool/app/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/diff_tool/app/dist/assets/fish-BvzEVeQv.js +1 -0
- package/dist/diff_tool/app/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/diff_tool/app/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/diff_tool/app/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/diff_tool/app/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/diff_tool/app/dist/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/diff_tool/app/dist/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/diff_tool/app/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/diff_tool/app/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/diff_tool/app/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/diff_tool/app/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/diff_tool/app/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/diff_tool/app/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/diff_tool/app/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/diff_tool/app/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/diff_tool/app/dist/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/diff_tool/app/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/diff_tool/app/dist/assets/gn-n2N0HUVH.js +1 -0
- package/dist/diff_tool/app/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/diff_tool/app/dist/assets/go-CxLEBnE3.js +1 -0
- package/dist/diff_tool/app/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/diff_tool/app/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/diff_tool/app/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/diff_tool/app/dist/assets/hack-CaT9iCJl.js +1 -0
- package/dist/diff_tool/app/dist/assets/haml-B8DHNrY2.js +1 -0
- package/dist/diff_tool/app/dist/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/diff_tool/app/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/diff_tool/app/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/diff_tool/app/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/diff_tool/app/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/diff_tool/app/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/diff_tool/app/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/diff_tool/app/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/diff_tool/app/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/diff_tool/app/dist/assets/html-GMplVEZG.js +1 -0
- package/dist/diff_tool/app/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/diff_tool/app/dist/assets/http-jrhK8wxY.js +1 -0
- package/dist/diff_tool/app/dist/assets/hurl-irOxFIW8.js +1 -0
- package/dist/diff_tool/app/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/diff_tool/app/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/diff_tool/app/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/diff_tool/app/dist/assets/index-BGMccoTY.css +1 -0
- package/dist/diff_tool/app/dist/assets/index-_ajOenBj.js +1887 -0
- package/dist/diff_tool/app/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/diff_tool/app/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/diff_tool/app/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/diff_tool/app/dist/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/diff_tool/app/dist/assets/jison-wvAkD_A8.js +1 -0
- package/dist/diff_tool/app/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/diff_tool/app/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/diff_tool/app/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/diff_tool/app/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/diff_tool/app/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/diff_tool/app/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/diff_tool/app/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/diff_tool/app/dist/assets/julia-CxzCAyBv.js +1 -0
- package/dist/diff_tool/app/dist/assets/just-Cw27pwNe.js +1 -0
- package/dist/diff_tool/app/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/diff_tool/app/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/diff_tool/app/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/diff_tool/app/dist/assets/kdl-DV7GczEv.js +1 -0
- package/dist/diff_tool/app/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/diff_tool/app/dist/assets/kusto-DZf3V79B.js +1 -0
- package/dist/diff_tool/app/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/diff_tool/app/dist/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/diff_tool/app/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/diff_tool/app/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/diff_tool/app/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/diff_tool/app/dist/assets/liquid-DYVedYrR.js +1 -0
- package/dist/diff_tool/app/dist/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/diff_tool/app/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/diff_tool/app/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/diff_tool/app/dist/assets/lua-BaeVxFsk.js +1 -0
- package/dist/diff_tool/app/dist/assets/luau-C-HG3fhB.js +1 -0
- package/dist/diff_tool/app/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/diff_tool/app/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/diff_tool/app/dist/assets/marko-CnJfTvn9.js +1 -0
- package/dist/diff_tool/app/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/diff_tool/app/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/diff_tool/app/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/diff_tool/app/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/diff_tool/app/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/diff_tool/app/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/diff_tool/app/dist/assets/mdc-BMNejdWA.js +1 -0
- package/dist/diff_tool/app/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/diff_tool/app/dist/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/diff_tool/app/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/diff_tool/app/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/diff_tool/app/dist/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/diff_tool/app/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/diff_tool/app/dist/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/diff_tool/app/dist/assets/move-IF9eRakj.js +1 -0
- package/dist/diff_tool/app/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/diff_tool/app/dist/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/diff_tool/app/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/diff_tool/app/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/diff_tool/app/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/diff_tool/app/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/diff_tool/app/dist/assets/nim-CVrawwO9.js +1 -0
- package/dist/diff_tool/app/dist/assets/nix-CwoSXNpI.js +1 -0
- package/dist/diff_tool/app/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/diff_tool/app/dist/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/diff_tool/app/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/diff_tool/app/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/diff_tool/app/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/diff_tool/app/dist/assets/odin-BBf5iR-q.js +1 -0
- package/dist/diff_tool/app/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/diff_tool/app/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/diff_tool/app/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/diff_tool/app/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/diff_tool/app/dist/assets/perl-C0TMdlhV.js +1 -0
- package/dist/diff_tool/app/dist/assets/php-Dhbhpdrm.js +1 -0
- package/dist/diff_tool/app/dist/assets/pierre-dark-ClCaJvdG.js +1 -0
- package/dist/diff_tool/app/dist/assets/pierre-light-zjGsWSiE.js +1 -0
- package/dist/diff_tool/app/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/diff_tool/app/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/diff_tool/app/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/diff_tool/app/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/diff_tool/app/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/diff_tool/app/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/diff_tool/app/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/diff_tool/app/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/diff_tool/app/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/diff_tool/app/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/diff_tool/app/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/diff_tool/app/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/pug-CGlum2m_.js +1 -0
- package/dist/diff_tool/app/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/diff_tool/app/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/diff_tool/app/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/diff_tool/app/dist/assets/qml-3beO22l8.js +1 -0
- package/dist/diff_tool/app/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/diff_tool/app/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/diff_tool/app/dist/assets/r-Dspwwk_N.js +1 -0
- package/dist/diff_tool/app/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/diff_tool/app/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/diff_tool/app/dist/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/diff_tool/app/dist/assets/red-bN70gL4F.js +1 -0
- package/dist/diff_tool/app/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/diff_tool/app/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/diff_tool/app/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/diff_tool/app/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/diff_tool/app/dist/assets/ron-D8l8udqQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/diff_tool/app/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/diff_tool/app/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/diff_tool/app/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/diff_tool/app/dist/assets/rst-BrH8l1NY.js +1 -0
- package/dist/diff_tool/app/dist/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/diff_tool/app/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/sas-cz2c8ADy.js +1 -0
- package/dist/diff_tool/app/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/diff_tool/app/dist/assets/scala-C151Ov-r.js +1 -0
- package/dist/diff_tool/app/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/diff_tool/app/dist/assets/scss-OYdSNvt2.js +1 -0
- package/dist/diff_tool/app/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/diff_tool/app/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/diff_tool/app/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/diff_tool/app/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/diff_tool/app/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/diff_tool/app/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/diff_tool/app/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/diff_tool/app/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/diff_tool/app/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/diff_tool/app/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/diff_tool/app/dist/assets/solidity-rGO070M0.js +1 -0
- package/dist/diff_tool/app/dist/assets/soy-Brmx7dQM.js +1 -0
- package/dist/diff_tool/app/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/diff_tool/app/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/diff_tool/app/dist/assets/sql-BLtJtn59.js +1 -0
- package/dist/diff_tool/app/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/diff_tool/app/dist/assets/stata-BH5u7GGu.js +1 -0
- package/dist/diff_tool/app/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/diff_tool/app/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/diff_tool/app/dist/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/diff_tool/app/dist/assets/swift-D82vCrfD.js +1 -0
- package/dist/diff_tool/app/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/diff_tool/app/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/diff_tool/app/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/diff_tool/app/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/diff_tool/app/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/diff_tool/app/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/diff_tool/app/dist/assets/templ-P3uqSqPl.js +1 -0
- package/dist/diff_tool/app/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/diff_tool/app/dist/assets/tex-idrVyKtj.js +1 -0
- package/dist/diff_tool/app/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/diff_tool/app/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/diff_tool/app/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/diff_tool/app/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/diff_tool/app/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/diff_tool/app/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/diff_tool/app/dist/assets/twig-DNn4PbVi.js +1 -0
- package/dist/diff_tool/app/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/diff_tool/app/dist/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/diff_tool/app/dist/assets/typst-DHCkPAjA.js +1 -0
- package/dist/diff_tool/app/dist/assets/v-BcVCzyr7.js +1 -0
- package/dist/diff_tool/app/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/diff_tool/app/dist/assets/vb-D17OF-Vu.js +1 -0
- package/dist/diff_tool/app/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/diff_tool/app/dist/assets/vesper-DU1UobuO.js +1 -0
- package/dist/diff_tool/app/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/diff_tool/app/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/diff_tool/app/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/diff_tool/app/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/diff_tool/app/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/diff_tool/app/dist/assets/vue-DN_0RTcg.js +1 -0
- package/dist/diff_tool/app/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/diff_tool/app/dist/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/diff_tool/app/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/diff_tool/app/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/diff_tool/app/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/diff_tool/app/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/diff_tool/app/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/diff_tool/app/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/diff_tool/app/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/diff_tool/app/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/diff_tool/app/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/diff_tool/app/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/diff_tool/app/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/diff_tool/app/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/diff_tool/app/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/diff_tool/app/dist/fonts/GeistMono-Medium.woff2 +0 -0
- package/dist/diff_tool/app/dist/fonts/GeistMono-Regular.woff2 +0 -0
- package/dist/diff_tool/app/dist/index.html +13 -0
- package/dist/diff_tool/http_server.js +354 -0
- package/dist/diff_tool/http_server.js.map +1 -0
- package/dist/diff_tool/index.js +42 -0
- package/dist/diff_tool/index.js.map +1 -0
- package/dist/diff_tool/launcher.js +7 -0
- package/dist/diff_tool/launcher.js.map +1 -0
- package/dist/diff_tool/protocol_client.js +247 -0
- package/dist/diff_tool/protocol_client.js.map +1 -0
- package/dist/diff_tool/review_state.js +140 -0
- package/dist/diff_tool/review_state.js.map +1 -0
- package/dist/diff_tool/shared_types.js +2 -0
- package/dist/diff_tool/shared_types.js.map +1 -0
- package/dist/main.js +45 -2
- package/dist/main.js.map +1 -1
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js +258 -0
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -0
- package/dist/tui/chat_controller/interrupt_lifecycle.js +1 -3
- package/dist/tui/chat_controller/interrupt_lifecycle.js.map +1 -1
- package/dist/tui/chat_controller.js +127 -31
- package/dist/tui/chat_controller.js.map +1 -1
- package/dist/tui/chat_view.js +4 -0
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/ui/chat_message_model.js +16 -2
- package/dist/tui/ui/chat_message_model.js.map +1 -1
- package/dist/tui/ui/components/editor.js +79 -13
- package/dist/tui/ui/components/editor.js.map +1 -1
- package/dist/tui/ui/components/undo_stack.js +16 -0
- package/dist/tui/ui/components/undo_stack.js.map +1 -0
- package/dist/tui/ui/diff_review_message.js +82 -0
- package/dist/tui/ui/diff_review_message.js.map +1 -0
- package/dist/tui/ui/rewind_picker.js +2 -7
- package/dist/tui/ui/rewind_picker.js.map +1 -1
- package/dist/tui/ui/subagent_panel.js +17 -0
- package/dist/tui/ui/subagent_panel.js.map +1 -1
- package/dist/tui/ui/theme/palette.js +2 -0
- package/dist/tui/ui/theme/palette.js.map +1 -1
- package/dist/tui/ui/theme/theme.js.map +1 -1
- package/dist/tui/ui/user_message.js +8 -4
- package/dist/tui/ui/user_message.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { ConversationTurnRuntime } from "../runtime/conversation_turn_runtime.js";
|
|
2
|
+
import { createDefaultCoreDeps } from "../runtime/deps.js";
|
|
3
|
+
import { resolveRuntimePromptBootstrap } from "../runtime/runtime_bootstrap.js";
|
|
4
|
+
import { composeSessionPrompts } from "../runtime/session_prompt_composer.js";
|
|
5
|
+
import { CoreSession } from "../session/core_session.js";
|
|
6
|
+
import { renderDiffReviewWrapperPrompt } from "../static/index.js";
|
|
7
|
+
import { BASH_TOOL } from "../tools/bash.js";
|
|
8
|
+
import { ToolCatalog } from "../tools/catalog.js";
|
|
9
|
+
import { createLocalToolExecutionBackend, } from "../tools/execution_backend.js";
|
|
10
|
+
import { TOOL_NAME_BASH, TOOL_NAME_VIEW_IMAGE } from "../tools/tool_names.js";
|
|
11
|
+
import { VIEW_IMAGE_TOOL } from "../tools/view_image.js";
|
|
12
|
+
import { appendUsageLogEntry, getUsageCostTotal, getUsageTotals } from "../usage/logs.js";
|
|
13
|
+
import { extractAssistantText } from "../utils/messages.js";
|
|
14
|
+
export class DiffReviewThread {
|
|
15
|
+
session;
|
|
16
|
+
runtime;
|
|
17
|
+
personaId;
|
|
18
|
+
reasoningEffort;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
const deps = options.deps ?? createDefaultCoreDeps();
|
|
21
|
+
const backend = options.toolExecutionBackend ??
|
|
22
|
+
createLocalToolExecutionBackend({
|
|
23
|
+
spawn: deps.spawn,
|
|
24
|
+
env: deps.env,
|
|
25
|
+
});
|
|
26
|
+
this.personaId = options.persona.id;
|
|
27
|
+
this.reasoningEffort = options.persona.settings.reasoning ?? "none";
|
|
28
|
+
const persona = createDiffReviewPersona(options.persona, options.snapshot);
|
|
29
|
+
const promptBootstrap = resolveRuntimePromptBootstrap({
|
|
30
|
+
persona,
|
|
31
|
+
discoveredSkills: options.discoveredSkills ?? [],
|
|
32
|
+
cwd: options.snapshot.cwd,
|
|
33
|
+
home: deps.env.home(),
|
|
34
|
+
includeAgentContext: options.includeAgentContext ?? true,
|
|
35
|
+
sandboxEnabled: false,
|
|
36
|
+
readFile: deps.fs.readFile,
|
|
37
|
+
});
|
|
38
|
+
const promptComposition = composeSessionPrompts({
|
|
39
|
+
persona,
|
|
40
|
+
riskLevel: "read-only",
|
|
41
|
+
cwd: promptBootstrap.promptContext.cwd,
|
|
42
|
+
hostCwd: promptBootstrap.promptContext.hostCwd,
|
|
43
|
+
datetime: new Date(deps.clock.now()).toISOString(),
|
|
44
|
+
platform: deps.env.platform(),
|
|
45
|
+
nodeVersion: deps.env.nodeVersion(),
|
|
46
|
+
skillsBlock: promptBootstrap.promptContext.skillsBlock,
|
|
47
|
+
projectContextBlock: promptBootstrap.promptContext.projectContextBlock,
|
|
48
|
+
sandboxEnabled: false,
|
|
49
|
+
});
|
|
50
|
+
const toolRegistry = ToolCatalog.createSubagentRegistry([TOOL_NAME_BASH, TOOL_NAME_VIEW_IMAGE], options.config, backend);
|
|
51
|
+
this.session = new CoreSession({
|
|
52
|
+
persona,
|
|
53
|
+
systemPrompt: promptComposition.baseSystemPrompt,
|
|
54
|
+
subagentPrompts: promptComposition.subagentPrompts,
|
|
55
|
+
riskLevel: "read-only",
|
|
56
|
+
toolRegistry,
|
|
57
|
+
config: options.config,
|
|
58
|
+
deps,
|
|
59
|
+
cwd: promptBootstrap.promptContext.cwd,
|
|
60
|
+
hostCwd: promptBootstrap.promptContext.hostCwd,
|
|
61
|
+
home: promptBootstrap.promptContext.home,
|
|
62
|
+
includeAgentContext: promptBootstrap.promptContext.includeAgentContext,
|
|
63
|
+
sandboxEnabled: false,
|
|
64
|
+
});
|
|
65
|
+
this.runtime = new ConversationTurnRuntime(this.session);
|
|
66
|
+
}
|
|
67
|
+
async submitMessage(message) {
|
|
68
|
+
this.session.addUserText(message);
|
|
69
|
+
const result = await this.runtime.run();
|
|
70
|
+
if (result.aborted) {
|
|
71
|
+
throw new Error("diff review thread was interrupted");
|
|
72
|
+
}
|
|
73
|
+
const assistantMessage = findLastAssistantMessage(this.session);
|
|
74
|
+
if (!assistantMessage) {
|
|
75
|
+
throw new Error("diff review thread produced no assistant response");
|
|
76
|
+
}
|
|
77
|
+
const response = extractAssistantText(assistantMessage).trim();
|
|
78
|
+
if (!response) {
|
|
79
|
+
throw new Error("diff review thread produced an empty assistant response");
|
|
80
|
+
}
|
|
81
|
+
appendUsageLogEntry({
|
|
82
|
+
timestamp: assistantMessage.timestamp,
|
|
83
|
+
sessionId: this.session.sessionId,
|
|
84
|
+
personaId: this.personaId,
|
|
85
|
+
provider: assistantMessage.provider,
|
|
86
|
+
model: assistantMessage.model,
|
|
87
|
+
api: assistantMessage.api,
|
|
88
|
+
reasoningEffort: this.reasoningEffort,
|
|
89
|
+
usage: getUsageTotals(assistantMessage.usage),
|
|
90
|
+
cost: { total: getUsageCostTotal(assistantMessage.usage) },
|
|
91
|
+
agent: { type: "review" },
|
|
92
|
+
});
|
|
93
|
+
return response;
|
|
94
|
+
}
|
|
95
|
+
interrupt() {
|
|
96
|
+
return this.runtime.interrupt();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function buildDiffReviewSystemPrompt(mainPersonaSystemPrompt, snapshot) {
|
|
100
|
+
return renderDiffReviewWrapperPrompt({
|
|
101
|
+
inheritedInstructions: mainPersonaSystemPrompt,
|
|
102
|
+
reviewContext: buildReviewContextBlock(snapshot),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function createDiffReviewPersona(persona, snapshot) {
|
|
106
|
+
return {
|
|
107
|
+
...persona,
|
|
108
|
+
id: `${persona.id}-diff-review`,
|
|
109
|
+
label: `${persona.label} diff review`,
|
|
110
|
+
description: "Diff review assistant",
|
|
111
|
+
systemPrompt: buildDiffReviewSystemPrompt(persona.systemPrompt, snapshot),
|
|
112
|
+
subagents: undefined,
|
|
113
|
+
skills: persona.skills,
|
|
114
|
+
tools: [BASH_TOOL, VIEW_IMAGE_TOOL],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function buildReviewContextBlock(snapshot) {
|
|
118
|
+
const changedFiles = snapshot.files.length > 0
|
|
119
|
+
? snapshot.files
|
|
120
|
+
.map((file) => {
|
|
121
|
+
const path = file.oldPath && file.newPath && file.oldPath !== file.newPath
|
|
122
|
+
? `${file.oldPath} -> ${file.newPath}`
|
|
123
|
+
: file.path;
|
|
124
|
+
return `- ${path} (${file.status})`;
|
|
125
|
+
})
|
|
126
|
+
.join("\n")
|
|
127
|
+
: "- (no changed files)";
|
|
128
|
+
return [
|
|
129
|
+
`Repo root: ${snapshot.repoRoot}`,
|
|
130
|
+
`Cwd: ${snapshot.cwd}`,
|
|
131
|
+
`Diff command: ${snapshot.toDiffCommand()}`,
|
|
132
|
+
"",
|
|
133
|
+
"Changed files:",
|
|
134
|
+
changedFiles,
|
|
135
|
+
"",
|
|
136
|
+
"The full diff is not embedded in this prompt. Use read-only tools to inspect relevant repo context when needed.",
|
|
137
|
+
].join("\n");
|
|
138
|
+
}
|
|
139
|
+
function findLastAssistantMessage(session) {
|
|
140
|
+
for (let index = session.historyEntries.length - 1; index >= 0; index -= 1) {
|
|
141
|
+
const entry = session.historyEntries[index];
|
|
142
|
+
if (entry?.message.role === "assistant") {
|
|
143
|
+
return entry.message;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=review_thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review_thread.js","sourceRoot":"","sources":["../../../src/core/diff_review/review_thread.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomBytes, randomUUID } from "node:crypto";
|
|
3
|
+
import { existsSync, rmSync } from "node:fs";
|
|
4
|
+
import { createServer } from "node:net";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { createInterface } from "node:readline";
|
|
7
|
+
import { createDefaultCoreDeps } from "../runtime/deps.js";
|
|
8
|
+
import { createDiffReviewErrorResponse, createDiffReviewSuccessResponse, DIFF_REVIEW_ERROR_CODES, DIFF_REVIEW_METHODS, DIFF_REVIEW_PROTOCOL_VERSION, parseDiffReviewRequestLine, serializeDiffReviewMessage, } from "./protocol.js";
|
|
9
|
+
import { DiffReviewThread } from "./review_thread.js";
|
|
10
|
+
import { captureDiffReviewSnapshot } from "./snapshot.js";
|
|
11
|
+
const DIFF_REVIEW_INITIALIZE_TIMEOUT_MS = 10_000;
|
|
12
|
+
export class DiffReviewSession {
|
|
13
|
+
sessionId;
|
|
14
|
+
snapshot;
|
|
15
|
+
persona;
|
|
16
|
+
config;
|
|
17
|
+
deps;
|
|
18
|
+
toolExecutionBackend;
|
|
19
|
+
createThreadSession;
|
|
20
|
+
socketPath;
|
|
21
|
+
authToken;
|
|
22
|
+
server;
|
|
23
|
+
threads = new Map();
|
|
24
|
+
connections = new Set();
|
|
25
|
+
uiStateListeners = new Set();
|
|
26
|
+
uiState = {
|
|
27
|
+
reviewAgent: { status: "idle" },
|
|
28
|
+
};
|
|
29
|
+
initializedConnection;
|
|
30
|
+
initializeTimeout;
|
|
31
|
+
completionResolver;
|
|
32
|
+
completionPromise;
|
|
33
|
+
completedResult;
|
|
34
|
+
closed = false;
|
|
35
|
+
constructor(options) {
|
|
36
|
+
this.sessionId = `tau-diff-review-${randomUUID()}`;
|
|
37
|
+
this.snapshot = options.snapshot;
|
|
38
|
+
this.persona = options.persona;
|
|
39
|
+
this.config = options.config;
|
|
40
|
+
this.deps = options.deps ?? createDefaultCoreDeps();
|
|
41
|
+
this.toolExecutionBackend = options.toolExecutionBackend;
|
|
42
|
+
this.socketPath = join("/tmp", `tau-diff-${randomBytes(8).toString("hex")}.sock`);
|
|
43
|
+
this.authToken = randomBytes(24).toString("hex");
|
|
44
|
+
this.createThreadSession =
|
|
45
|
+
options.createThread ??
|
|
46
|
+
((threadId) => new DiffReviewThread({
|
|
47
|
+
threadId,
|
|
48
|
+
snapshot: this.snapshot,
|
|
49
|
+
persona: this.persona,
|
|
50
|
+
config: this.config,
|
|
51
|
+
discoveredSkills: options.discoveredSkills,
|
|
52
|
+
includeAgentContext: options.includeAgentContext,
|
|
53
|
+
deps: this.deps,
|
|
54
|
+
toolExecutionBackend: this.toolExecutionBackend,
|
|
55
|
+
}));
|
|
56
|
+
this.completionPromise = new Promise((resolve) => {
|
|
57
|
+
this.completionResolver = resolve;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
get result() {
|
|
61
|
+
return this.completionPromise;
|
|
62
|
+
}
|
|
63
|
+
get protocolVersion() {
|
|
64
|
+
return DIFF_REVIEW_PROTOCOL_VERSION;
|
|
65
|
+
}
|
|
66
|
+
getUiState() {
|
|
67
|
+
return cloneDiffReviewUiState(this.uiState);
|
|
68
|
+
}
|
|
69
|
+
onUiStateChange(listener) {
|
|
70
|
+
this.uiStateListeners.add(listener);
|
|
71
|
+
listener(this.getUiState());
|
|
72
|
+
return () => {
|
|
73
|
+
this.uiStateListeners.delete(listener);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
get launchEnvironment() {
|
|
77
|
+
return {
|
|
78
|
+
TAU_DIFF_PROTOCOL_VERSION: String(DIFF_REVIEW_PROTOCOL_VERSION),
|
|
79
|
+
TAU_DIFF_SOCKET: this.socketPath,
|
|
80
|
+
TAU_DIFF_TOKEN: this.authToken,
|
|
81
|
+
TAU_DIFF_SESSION_ID: this.sessionId,
|
|
82
|
+
TAU_DIFF_REPO_ROOT: this.snapshot.repoRoot,
|
|
83
|
+
TAU_DIFF_CWD: this.snapshot.cwd,
|
|
84
|
+
TAU_DIFF_ARGS_JSON: JSON.stringify(this.snapshot.diffArgs),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async start() {
|
|
88
|
+
if (this.server) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (existsSync(this.socketPath)) {
|
|
92
|
+
rmSync(this.socketPath, { force: true });
|
|
93
|
+
}
|
|
94
|
+
this.server = createServer((socket) => this.handleConnection(socket));
|
|
95
|
+
await new Promise((resolve, reject) => {
|
|
96
|
+
const server = this.server;
|
|
97
|
+
if (!server) {
|
|
98
|
+
reject(new Error("diff review server was not created"));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const onError = (error) => {
|
|
102
|
+
server.off("listening", onListening);
|
|
103
|
+
reject(error);
|
|
104
|
+
};
|
|
105
|
+
const onListening = () => {
|
|
106
|
+
server.off("error", onError);
|
|
107
|
+
resolve();
|
|
108
|
+
};
|
|
109
|
+
server.once("error", onError);
|
|
110
|
+
server.once("listening", onListening);
|
|
111
|
+
server.listen(this.socketPath);
|
|
112
|
+
});
|
|
113
|
+
this.armInitializeTimeout();
|
|
114
|
+
}
|
|
115
|
+
async launchTool(diffTool) {
|
|
116
|
+
const env = {
|
|
117
|
+
...this.deps.env.env(),
|
|
118
|
+
...(diffTool.env ?? {}),
|
|
119
|
+
...this.launchEnvironment,
|
|
120
|
+
};
|
|
121
|
+
await new Promise((resolve, reject) => {
|
|
122
|
+
const child = spawn(diffTool.command, diffTool.args ?? [], {
|
|
123
|
+
cwd: this.snapshot.cwd,
|
|
124
|
+
env,
|
|
125
|
+
stdio: "ignore",
|
|
126
|
+
detached: true,
|
|
127
|
+
});
|
|
128
|
+
const onError = (error) => reject(error);
|
|
129
|
+
child.once("error", onError);
|
|
130
|
+
child.once("spawn", () => {
|
|
131
|
+
child.off("error", onError);
|
|
132
|
+
child.unref();
|
|
133
|
+
resolve();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
async cancel(reason = "controller_cancelled") {
|
|
138
|
+
if (this.completedResult) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
for (const thread of this.threads.values()) {
|
|
142
|
+
thread.interrupt();
|
|
143
|
+
}
|
|
144
|
+
await this.complete({ status: "cancelled", reason });
|
|
145
|
+
}
|
|
146
|
+
async close() {
|
|
147
|
+
if (!this.completedResult) {
|
|
148
|
+
await this.cancel("controller_cancelled");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (this.closed) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.closed = true;
|
|
155
|
+
await this.closeServer();
|
|
156
|
+
}
|
|
157
|
+
handleConnection(socket) {
|
|
158
|
+
const readline = createInterface({ input: socket, crlfDelay: Number.POSITIVE_INFINITY });
|
|
159
|
+
const connection = {
|
|
160
|
+
socket,
|
|
161
|
+
readline,
|
|
162
|
+
initialized: false,
|
|
163
|
+
queue: Promise.resolve(),
|
|
164
|
+
};
|
|
165
|
+
this.connections.add(connection);
|
|
166
|
+
readline.on("line", (line) => {
|
|
167
|
+
connection.queue = connection.queue
|
|
168
|
+
.then(() => this.handleLine(connection, line))
|
|
169
|
+
.catch((error) => {
|
|
170
|
+
this.sendError(connection.socket, null, "internalError", "diff review request failed", {
|
|
171
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
socket.on("close", () => {
|
|
176
|
+
readline.close();
|
|
177
|
+
this.connections.delete(connection);
|
|
178
|
+
const lostInitializedConnection = this.initializedConnection === connection;
|
|
179
|
+
if (lostInitializedConnection) {
|
|
180
|
+
this.initializedConnection = undefined;
|
|
181
|
+
}
|
|
182
|
+
if (!this.completedResult && lostInitializedConnection) {
|
|
183
|
+
void this.cancel("tool_disconnected");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (!this.completedResult && this.connections.size === 0 && !this.initializedConnection) {
|
|
187
|
+
void this.cancel("tool_disconnected");
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
socket.on("error", () => { });
|
|
191
|
+
}
|
|
192
|
+
async handleLine(connection, line) {
|
|
193
|
+
const parsed = parseDiffReviewRequestLine(line);
|
|
194
|
+
if (!parsed.ok) {
|
|
195
|
+
this.sendMessage(connection.socket, createDiffReviewErrorResponse(parsed.id, parsed.error.code, parsed.error.message, parsed.error.data));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const request = parsed.request;
|
|
199
|
+
if (this.completedResult && request.method !== "initialize") {
|
|
200
|
+
this.sendError(connection.socket, request.id, "sessionClosed", "diff review session is closed");
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (request.method !== "initialize" && !connection.initialized) {
|
|
204
|
+
this.sendError(connection.socket, request.id, "notInitialized", "call initialize before other diff review methods");
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
switch (request.method) {
|
|
208
|
+
case "initialize":
|
|
209
|
+
this.handleInitialize(connection, request);
|
|
210
|
+
return;
|
|
211
|
+
case "session.get_context":
|
|
212
|
+
this.respond(connection.socket, request.id, request.method, {
|
|
213
|
+
sessionId: this.sessionId,
|
|
214
|
+
repoRoot: this.snapshot.repoRoot,
|
|
215
|
+
cwd: this.snapshot.cwd,
|
|
216
|
+
diffArgs: [...this.snapshot.diffArgs],
|
|
217
|
+
diffCommand: this.snapshot.toDiffCommand(),
|
|
218
|
+
});
|
|
219
|
+
return;
|
|
220
|
+
case "session.list_files":
|
|
221
|
+
this.respond(connection.socket, request.id, request.method, {
|
|
222
|
+
files: this.snapshot.files.map((file) => ({ ...file })),
|
|
223
|
+
});
|
|
224
|
+
return;
|
|
225
|
+
case "session.get_diff":
|
|
226
|
+
this.handleGetDiff(connection.socket, request);
|
|
227
|
+
return;
|
|
228
|
+
case "session.set_ui_text":
|
|
229
|
+
this.updateDiffToolUiText(request.params.text);
|
|
230
|
+
this.respond(connection.socket, request.id, request.method, { status: "updated" });
|
|
231
|
+
return;
|
|
232
|
+
case "thread.submit_message":
|
|
233
|
+
await this.handleThreadSubmit(connection.socket, request);
|
|
234
|
+
return;
|
|
235
|
+
case "session.return_review":
|
|
236
|
+
this.respond(connection.socket, request.id, request.method, { status: "returned" });
|
|
237
|
+
await this.complete({ status: "returned", review: request.params.review });
|
|
238
|
+
return;
|
|
239
|
+
case "session.cancel":
|
|
240
|
+
this.respond(connection.socket, request.id, request.method, { status: "cancelled" });
|
|
241
|
+
await this.cancel("tool_cancelled");
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
handleInitialize(connection, request) {
|
|
246
|
+
if (request.params.token !== this.authToken) {
|
|
247
|
+
this.sendError(connection.socket, request.id, "unauthorized", "invalid diff review token");
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (this.initializedConnection && this.initializedConnection !== connection) {
|
|
251
|
+
this.sendError(connection.socket, request.id, "invalidRequest", "diff review session already has an active client");
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const result = {
|
|
255
|
+
protocolVersion: DIFF_REVIEW_PROTOCOL_VERSION,
|
|
256
|
+
sessionId: this.sessionId,
|
|
257
|
+
methods: [...DIFF_REVIEW_METHODS],
|
|
258
|
+
alreadyInitialized: connection.initialized,
|
|
259
|
+
};
|
|
260
|
+
connection.initialized = true;
|
|
261
|
+
this.initializedConnection = connection;
|
|
262
|
+
this.clearInitializeTimeout();
|
|
263
|
+
this.sendMessage(connection.socket, createDiffReviewSuccessResponse(request.id, result));
|
|
264
|
+
}
|
|
265
|
+
handleGetDiff(socket, request) {
|
|
266
|
+
if (!request.params.path) {
|
|
267
|
+
this.respond(socket, request.id, request.method, {
|
|
268
|
+
scope: "session",
|
|
269
|
+
patch: this.snapshot.patch,
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const patch = this.snapshot.getFilePatch(request.params.path);
|
|
274
|
+
if (patch === undefined) {
|
|
275
|
+
this.sendError(socket, request.id, "invalidParams", `unknown diff file '${request.params.path}'`);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
this.respond(socket, request.id, request.method, {
|
|
279
|
+
scope: "file",
|
|
280
|
+
path: request.params.path,
|
|
281
|
+
patch,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
async handleThreadSubmit(socket, request) {
|
|
285
|
+
const threadId = request.params.threadId ?? `thread-${randomUUID()}`;
|
|
286
|
+
const thread = this.getOrCreateThread(threadId);
|
|
287
|
+
this.updateReviewAgentActivity({ status: "running", threadId });
|
|
288
|
+
try {
|
|
289
|
+
const response = await thread.submitMessage(request.params.message);
|
|
290
|
+
if (this.completedResult || socket.destroyed) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
this.respond(socket, request.id, request.method, { threadId, response });
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
if (this.completedResult || socket.destroyed) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
this.sendError(socket, request.id, "internalError", error instanceof Error ? error.message : String(error));
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
this.updateReviewAgentActivity({ status: "idle" });
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
getOrCreateThread(threadId) {
|
|
306
|
+
const existing = this.threads.get(threadId);
|
|
307
|
+
if (existing) {
|
|
308
|
+
return existing;
|
|
309
|
+
}
|
|
310
|
+
const created = this.createThreadSession(threadId);
|
|
311
|
+
this.threads.set(threadId, created);
|
|
312
|
+
return created;
|
|
313
|
+
}
|
|
314
|
+
updateDiffToolUiText(text) {
|
|
315
|
+
const nextText = text.trim() || undefined;
|
|
316
|
+
if (this.uiState.diffToolUiText === nextText) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
this.uiState = {
|
|
320
|
+
...(nextText ? { diffToolUiText: nextText } : {}),
|
|
321
|
+
reviewAgent: this.uiState.reviewAgent,
|
|
322
|
+
};
|
|
323
|
+
this.emitUiState();
|
|
324
|
+
}
|
|
325
|
+
updateReviewAgentActivity(activity) {
|
|
326
|
+
const current = this.uiState.reviewAgent;
|
|
327
|
+
const isUnchanged = current.status === activity.status &&
|
|
328
|
+
(current.status !== "running" ||
|
|
329
|
+
(activity.status === "running" && current.threadId === activity.threadId));
|
|
330
|
+
if (isUnchanged) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
this.uiState = {
|
|
334
|
+
...this.uiState,
|
|
335
|
+
reviewAgent: activity,
|
|
336
|
+
};
|
|
337
|
+
this.emitUiState();
|
|
338
|
+
}
|
|
339
|
+
emitUiState() {
|
|
340
|
+
const state = this.getUiState();
|
|
341
|
+
for (const listener of this.uiStateListeners) {
|
|
342
|
+
listener(state);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
armInitializeTimeout() {
|
|
346
|
+
if (this.initializeTimeout || this.completedResult || this.initializedConnection) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
this.initializeTimeout = setTimeout(() => {
|
|
350
|
+
this.initializeTimeout = undefined;
|
|
351
|
+
if (this.completedResult || this.initializedConnection) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
void this.cancel("tool_disconnected");
|
|
355
|
+
}, DIFF_REVIEW_INITIALIZE_TIMEOUT_MS);
|
|
356
|
+
}
|
|
357
|
+
clearInitializeTimeout() {
|
|
358
|
+
if (!this.initializeTimeout) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
clearTimeout(this.initializeTimeout);
|
|
362
|
+
this.initializeTimeout = undefined;
|
|
363
|
+
}
|
|
364
|
+
async complete(result) {
|
|
365
|
+
if (this.completedResult) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
this.clearInitializeTimeout();
|
|
369
|
+
this.completedResult = result;
|
|
370
|
+
this.completionResolver?.(result);
|
|
371
|
+
this.completionResolver = undefined;
|
|
372
|
+
await this.close();
|
|
373
|
+
}
|
|
374
|
+
async closeServer() {
|
|
375
|
+
const server = this.server;
|
|
376
|
+
this.server = undefined;
|
|
377
|
+
this.clearInitializeTimeout();
|
|
378
|
+
for (const connection of this.connections) {
|
|
379
|
+
connection.readline.close();
|
|
380
|
+
connection.socket.destroy();
|
|
381
|
+
}
|
|
382
|
+
this.connections.clear();
|
|
383
|
+
this.initializedConnection = undefined;
|
|
384
|
+
if (server) {
|
|
385
|
+
await new Promise((resolve) => {
|
|
386
|
+
server.close(() => resolve());
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
if (existsSync(this.socketPath)) {
|
|
390
|
+
rmSync(this.socketPath, { force: true });
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
respond(socket, id, _method, result) {
|
|
394
|
+
this.sendMessage(socket, createDiffReviewSuccessResponse(id, result));
|
|
395
|
+
}
|
|
396
|
+
sendError(socket, id, code, message, data) {
|
|
397
|
+
const resolvedCode = DIFF_REVIEW_ERROR_CODES[code];
|
|
398
|
+
this.sendMessage(socket, createDiffReviewErrorResponse(id, resolvedCode, message, data));
|
|
399
|
+
}
|
|
400
|
+
sendMessage(socket, message) {
|
|
401
|
+
if (socket.destroyed) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
socket.write(serializeDiffReviewMessage(message));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
function cloneDiffReviewUiState(state) {
|
|
408
|
+
return {
|
|
409
|
+
...(state.diffToolUiText ? { diffToolUiText: state.diffToolUiText } : {}),
|
|
410
|
+
reviewAgent: state.reviewAgent.status === "running"
|
|
411
|
+
? { status: "running", threadId: state.reviewAgent.threadId }
|
|
412
|
+
: { status: "idle" },
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
export async function startDiffReviewSession(options) {
|
|
416
|
+
throwIfDiffReviewStartAborted(options.signal);
|
|
417
|
+
const snapshot = await captureDiffReviewSnapshot({
|
|
418
|
+
cwd: options.cwd,
|
|
419
|
+
diffArgs: options.diffArgs,
|
|
420
|
+
signal: options.signal,
|
|
421
|
+
deps: options.deps,
|
|
422
|
+
});
|
|
423
|
+
throwIfDiffReviewStartAborted(options.signal);
|
|
424
|
+
const session = new DiffReviewSession({
|
|
425
|
+
snapshot,
|
|
426
|
+
persona: options.persona,
|
|
427
|
+
config: options.config,
|
|
428
|
+
discoveredSkills: options.discoveredSkills,
|
|
429
|
+
includeAgentContext: options.includeAgentContext,
|
|
430
|
+
deps: options.deps,
|
|
431
|
+
toolExecutionBackend: options.toolExecutionBackend,
|
|
432
|
+
});
|
|
433
|
+
await session.start();
|
|
434
|
+
try {
|
|
435
|
+
throwIfDiffReviewStartAborted(options.signal);
|
|
436
|
+
await session.launchTool(options.diffTool);
|
|
437
|
+
}
|
|
438
|
+
catch (error) {
|
|
439
|
+
await session.cancel("launch_failed");
|
|
440
|
+
throw error;
|
|
441
|
+
}
|
|
442
|
+
return {
|
|
443
|
+
session,
|
|
444
|
+
result: session.result,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
function throwIfDiffReviewStartAborted(signal) {
|
|
448
|
+
if (!signal?.aborted) {
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
throw new Error("diff review start aborted");
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/core/diff_review/session.ts"],"names":[],"mappings":"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"}
|